diff options
author | David Sin <davidsin@ti.com> | 2011-04-07 08:41:22 +0100 |
---|---|---|
committer | Andy Green <andy.green@linaro.org> | 2011-04-07 08:41:22 +0100 |
commit | 9698d09c6cc64be204917f48be91a3a67b01501b (patch) | |
tree | 8a7968baf7536b7536efa21237abb721eed4096c /drivers | |
parent | 6c0b14d734824b8bee84febca682e3b306a486d9 (diff) |
TILER: Replace dsb calls with wmb for es2.0
This patch will resolve the data inconsistency problems
seen in omap 4 es2.0. For es1.0, we were creating a
memory barrier using dsb() around the PAT reg accesses.
Additionally, we have added wmb() calls before the call to the
PAT refill function to ensure that the data reaches the main
memory beforehand.
Signed-off-by: David Sin <davidsin@ti.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/video/dmm/dmm.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/media/video/dmm/dmm.c b/drivers/media/video/dmm/dmm.c index 463cc9953f9..8663b36a5e7 100644 --- a/drivers/media/video/dmm/dmm.c +++ b/drivers/media/video/dmm/dmm.c @@ -104,7 +104,7 @@ s32 dmm_pat_refill(struct dmm *dmm, struct pat *pd, enum pat_mode mode) v = __raw_readl(r); w = (v & (~(BF(7, 0)))) | ((((s8)pd->area.x0) << 0) & BF(7, 0)); __raw_writel(w, r); - dsb(); + wmb(); #ifdef __DEBUG__ printk(KERN_NOTICE "\nx0=(%d),y0=(%d),x1=(%d),y1=(%d)\n", @@ -117,7 +117,7 @@ s32 dmm_pat_refill(struct dmm *dmm, struct pat *pd, enum pat_mode mode) /* First, clear the DMM_PAT_IRQSTATUS register */ r = (void __iomem *)((u32)dmm->base | (u32)DMM_PAT_IRQSTATUS); __raw_writel(0xFFFFFFFF, r); - dsb(); + wmb(); r = (void __iomem *)((u32)dmm->base | (u32)DMM_PAT_IRQSTATUS_RAW); v = 0xFFFFFFFF; @@ -134,7 +134,7 @@ s32 dmm_pat_refill(struct dmm *dmm, struct pat *pd, enum pat_mode mode) /* Apply 4 bit left shft to counter the 4 bit right shift */ w = (v & (~(BF(31, 4)))) | ((((u32)(pd->data >> 4)) << 4) & BF(31, 4)); __raw_writel(w, r); - dsb(); + wmb(); /* Read back PAT_DATA__0 to see if write was successful */ v = 0x0; @@ -164,7 +164,7 @@ s32 dmm_pat_refill(struct dmm *dmm, struct pat *pd, enum pat_mode mode) v = __raw_readl(r); w = (v & (~(BF(0, 0)))) | ((((u32)pd->ctrl.start) << 0) & BF(0, 0)); __raw_writel(w, r); - dsb(); + wmb(); /* * Now, check if PAT_IRQSTATUS_RAW has been @@ -180,7 +180,7 @@ s32 dmm_pat_refill(struct dmm *dmm, struct pat *pd, enum pat_mode mode) /* Again, clear the DMM_PAT_IRQSTATUS register */ r = (void __iomem *)((u32)dmm->base | (u32)DMM_PAT_IRQSTATUS); __raw_writel(0xFFFFFFFF, r); - dsb(); + wmb(); r = (void __iomem *)((u32)dmm->base | (u32)DMM_PAT_IRQSTATUS_RAW); v = 0xFFFFFFFF; |