summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/iovmm-gart.c
diff options
context:
space:
mode:
authorGary King <gking@nvidia.com>2010-05-11 17:04:13 -0700
committerGary King <gking@nvidia.com>2010-05-11 17:04:13 -0700
commit735fafba3fbb47311364c1b38059a3f462cbec20 (patch)
treeec88ee3ceccc7094510596e218eebcb5d459256d /arch/arm/mach-tegra/iovmm-gart.c
parent90807f26e12cb1bf10aeb05c850c8717c9af5f24 (diff)
[ARM/tegra] iovmm-gart: use platform wmb as GART barrier
defining gart_barrier as a register read is more expensive than it needs to be; a simple wmb() (defined by the platform as draining the internal & outer cache write buffers) is sufficient. Change-Id: I73d58256de3fdcae7e75c87b168cfc417919eb28
Diffstat (limited to 'arch/arm/mach-tegra/iovmm-gart.c')
-rw-r--r--arch/arm/mach-tegra/iovmm-gart.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/arch/arm/mach-tegra/iovmm-gart.c b/arch/arm/mach-tegra/iovmm-gart.c
index c5dbbc25860e..14f6ad1fd49d 100644
--- a/arch/arm/mach-tegra/iovmm-gart.c
+++ b/arch/arm/mach-tegra/iovmm-gart.c
@@ -86,8 +86,6 @@ static struct platform_driver tegra_iovmm_gart_drv = {
},
};
-#define gart_barrier(_g) (void)readl((_g)->regs + GART_ENTRY_DATA)
-
static int gart_suspend(struct platform_device *pdev, pm_message_t state)
{
struct gart_device *gart = platform_get_drvdata(pdev);
@@ -105,6 +103,7 @@ static int gart_suspend(struct platform_device *pdev, pm_message_t state)
for (i=0; i<gart->page_count; i++) {
writel(reg, gart->regs + GART_ENTRY_ADDR);
gart->savedata[i] = readl(gart->regs + GART_ENTRY_DATA);
+ dmb();
reg += 1 << GART_PAGE_SHIFT;
}
spin_unlock(&gart->pte_lock);
@@ -122,7 +121,7 @@ static void do_gart_setup(struct gart_device *gart, const u32 *data)
for (i=0; i<gart->page_count; i++) {
writel(reg, gart->regs + GART_ENTRY_ADDR);
writel((data) ? data[i] : 0, gart->regs + GART_ENTRY_DATA);
- gart_barrier(gart);
+ wmb();
reg += 1 << GART_PAGE_SHIFT;
}
wmb();
@@ -284,7 +283,7 @@ static int gart_map(struct tegra_iovmm_device *dev,
writel(gart_page, gart->regs + GART_ENTRY_ADDR);
writel(GART_PTE(pfn), gart->regs + GART_ENTRY_DATA);
- gart_barrier(gart);
+ wmb();
gart_page += 1 << GART_PAGE_SHIFT;
spin_unlock(&gart->pte_lock);
@@ -299,7 +298,7 @@ fail:
gart_page -= 1 << GART_PAGE_SHIFT;
writel(gart_page, gart->regs + GART_ENTRY_ADDR);
writel(0, gart->regs + GART_ENTRY_DATA);
- gart_barrier(gart);
+ wmb();
}
spin_unlock(&gart->pte_lock);
wmb();
@@ -323,7 +322,7 @@ static void gart_unmap(struct tegra_iovmm_device *dev,
writel(gart_page, gart->regs + GART_ENTRY_ADDR);
writel(0, gart->regs + GART_ENTRY_DATA);
- gart_barrier(gart);
+ wmb();
gart_page += 1 << GART_PAGE_SHIFT;
}
spin_unlock(&gart->pte_lock);
@@ -340,7 +339,7 @@ static void gart_map_pfn(struct tegra_iovmm_device *dev,
spin_lock(&gart->pte_lock);
writel(offs, gart->regs + GART_ENTRY_ADDR);
writel(GART_PTE(pfn), gart->regs + GART_ENTRY_DATA);
- gart_barrier(gart);
+ wmb();
spin_unlock(&gart->pte_lock);
wmb();
}