summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorDavid Sin <davidsin@ti.com>2011-04-07 08:41:22 +0100
committerAndy Green <andy.green@linaro.org>2011-04-07 08:41:22 +0100
commit9698d09c6cc64be204917f48be91a3a67b01501b (patch)
tree8a7968baf7536b7536efa21237abb721eed4096c /drivers
parent6c0b14d734824b8bee84febca682e3b306a486d9 (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.c10
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;