diff options
author | Ricardo Perez Olivares <x0081762@ti.com> | 2009-11-05 15:09:44 -0600 |
---|---|---|
committer | Ricardo Perez Olivares <x0081762@ti.com> | 2009-11-05 15:09:44 -0600 |
commit | 8de98a22dd36bf1be67501268b1ac4192e434e41 (patch) | |
tree | fd0082c92459b0c4f2ceb792f56b0fa6a4491d69 /drivers/media/video/tiler/dmm_ll_drv.c | |
parent | be1f0ec29e24c6941bda41a06783dd21982de10d (diff) | |
parent | de4f6f44e549d02f54e305c7dd7c0fdd337b0be4 (diff) |
Merge branch 'dmm_tiler_v2.6.31-P1' of git://dev.omapzoom.org/pub/scm/dsin/tiler-omap4 into L24.0.13_INC1ti-2.6.31-omap4-24.0.13-P1
Diffstat (limited to 'drivers/media/video/tiler/dmm_ll_drv.c')
-rw-r--r-- | drivers/media/video/tiler/dmm_ll_drv.c | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/drivers/media/video/tiler/dmm_ll_drv.c b/drivers/media/video/tiler/dmm_ll_drv.c index ce7db57e90ce..6161fc678686 100644 --- a/drivers/media/video/tiler/dmm_ll_drv.c +++ b/drivers/media/video/tiler/dmm_ll_drv.c @@ -22,6 +22,119 @@ #include "dmm_reg.h" MODULE_LICENSE("GPL v2"); +#define __NEWCODE__ +#ifdef __NEWCODE__ +/* extern unsigned long entry_data; */ +static void pat_config_set(); + +static void pat_config_set()/* (struct pat_config_set *config, char id) */ +{ + void __iomem *reg = NULL; + unsigned long reg_val = 0x0; + unsigned long new_val = 0x0; + unsigned long bit_field = 0x0; + unsigned long field_pos = 0x0; + + /* set PAT_CONFIG register */ + reg = (void __iomem *)( + (unsigned long)dmm_virt_base_addr + | (unsigned long)PAT_CONFIG); + reg_val = __raw_readl(reg); + regdump("PAT_CONFIG", reg_val); + + bit_field = BITFIELD(31, 0); + field_pos = 0; + new_val = (reg_val & (~(bit_field))) | + ((((unsigned long)0) << field_pos) & bit_field); + __raw_writel(0x0000000F, reg); /* __raw_writel(new_val, reg); */ + + reg = (void __iomem *)( + (unsigned long)dmm_virt_base_addr | + (unsigned long)PAT_CONFIG); + reg_val = __raw_readl(reg); + regdump("PAT_CONFIG", reg_val); +} + +struct pat_area { + int x0:8; + int y0:8; + int x1:8; + int y1:8; +}; + +struct pat_ctrl { + int start:4; + int direction:4; + int lut_id:8; + int sync:12; + int initiator:4; +}; + +struct pat_desc { + struct pat_desc *next; + struct pat_area area; + struct pat_ctrl ctrl; + unsigned long data; +}; + +static void pat_ctrl_set(struct pat_ctrl *ctrl, char id) +{ + void __iomem *reg = NULL; + unsigned long reg_val = 0x0; + unsigned long new_val = 0x0; + unsigned long bit_field = 0x0; + unsigned long field_pos = 0x0; + + /* set PAT_CTRL register */ + /* TODO: casting as unsigned long */ + reg = (void __iomem *)( + (unsigned long)dmm_virt_base_addr | + (unsigned long)PAT_CTRL__0); + reg_val = __raw_readl(reg); + regdump("PAT_CTRL__0", reg_val); + + bit_field = BITFIELD(31, 28); + field_pos = 28; + new_val = (reg_val & (~(bit_field))) | + ((((unsigned long)ctrl->initiator) << + field_pos) & bit_field); + __raw_writel(new_val, reg); + + reg_val = __raw_readl(reg); + bit_field = BITFIELD(16, 16); + field_pos = 16; + new_val = (reg_val & (~(bit_field))) | + ((((unsigned long)ctrl->sync) << field_pos) & bit_field); + __raw_writel(new_val, reg); + + reg_val = __raw_readl(reg); + bit_field = BITFIELD(9, 8); + field_pos = 8; + new_val = (reg_val & (~(bit_field))) | + ((((unsigned long)ctrl->lut_id) << field_pos) & bit_field); + __raw_writel(new_val, reg); + + reg_val = __raw_readl(reg); + bit_field = BITFIELD(6, 4); + field_pos = 4; + new_val = (reg_val & (~(bit_field))) | + ((((unsigned long)ctrl->direction) << field_pos) & bit_field); + __raw_writel(new_val, reg); + + reg_val = __raw_readl(reg); + bit_field = BITFIELD(0, 0); + field_pos = 0; + new_val = (reg_val & (~(bit_field))) | + ((((unsigned long)ctrl->start) << field_pos) & bit_field); + __raw_writel(new_val, reg); + + reg = (void __iomem *)( + (unsigned long)dmm_virt_base_addr | (unsigned long)PAT_CTRL__0); + reg_val = __raw_readl(reg); + regdump("PAT_CTRL__0", reg_val); +} +#endif + /* ========================================================================== */ /** * dmm_tiler_alias_orientation_set() @@ -254,6 +367,7 @@ enum errorCodeT dmm_pat_area_refill(struct PATDescrT *patDesc, writeval = (regval & (~(f))) | ((((char)patDesc->area.x0) << fp) & f); __raw_writel(writeval, reg); +#ifndef __NEWCODE__ /* Apply 4 bit lft shft to counter the 4 bit rt shft */ reg = (void __iomem *) ((unsigned long)dmm_virt_base_addr | (0x500ul + 0xc)); @@ -291,6 +405,66 @@ enum errorCodeT dmm_pat_area_refill(struct PATDescrT *patDesc, writeval = (regval & (~(f))) | (((patDesc->ctrl.start) << fp) & f); __raw_writel(writeval, reg); +#else + reg = (void __iomem *)( + (unsigned long)dmm_virt_base_addr | + (unsigned long)PAT_STATUS__0); + regdump("PAT_STATUS__0", __raw_readl(reg)); + + reg = (void __iomem *)( + (unsigned long)dmm_virt_base_addr | + (unsigned long)PAT_IRQSTATUS_RAW); + regdump("PAT_IRQSTATUS_RAW", __raw_readl(reg)); + + reg = (void __iomem *)( + (unsigned long)dmm_virt_base_addr | + (unsigned long)PAT_IRQSTATUS); + regdump("PAT_IRQSTATUS", __raw_readl(reg)); + + /* read and print data register */ + reg = (void __iomem *) + ((unsigned long)dmm_virt_base_addr | (0x500ul + 0xc)); + regval = __raw_readl(reg); + regdump("PAT_DATA__0", regval); + + /* Apply 4 bit lft shft to counter the 4 bit rt shft */ + f = BITFIELD(31, 4); + fp = 4; + writeval = (regval & (~(f))) | ((((unsigned long) + (patDesc->data >> 4)) << fp) & f); + __raw_writel(writeval, reg); + + /* read and print data register again */ + reg = (void __iomem *) + ((unsigned long)dmm_virt_base_addr | (0x500ul + 0xc)); + regval = __raw_readl(reg); + regdump("PAT_DATA__0", regval); + + struct pat_desc pat_desc = {0}; + pat_desc.ctrl.start = 1; + pat_desc.ctrl.direction = 0; + pat_desc.ctrl.lut_id = 0; + pat_desc.ctrl.sync = 0; + pat_desc.ctrl.initiator = 0; + pat_ctrl_set(&pat_desc.ctrl, 0); + + reg = (void __iomem *)( + (unsigned long)dmm_virt_base_addr | + (unsigned long)PAT_STATUS__0); + regdump("PAT_STATUS__0", __raw_readl(reg)); + + reg = (void __iomem *)( + (unsigned long)dmm_virt_base_addr | + (unsigned long)PAT_IRQSTATUS_RAW); + regdump("PAT_IRQSTATUS_RAW", __raw_readl(reg)); + + reg = (void __iomem *)( + (unsigned long)dmm_virt_base_addr | + (unsigned long)PAT_IRQSTATUS); + regdump("PAT_IRQSTATUS", __raw_readl(reg)); + + /* pat_config_set(); */ +#endif } else { eCode = DMM_WRONG_PARAM; } |