diff options
author | Gary King <gking@nvidia.com> | 2010-05-11 17:04:13 -0700 |
---|---|---|
committer | Gary King <gking@nvidia.com> | 2010-05-11 17:04:13 -0700 |
commit | 735fafba3fbb47311364c1b38059a3f462cbec20 (patch) | |
tree | ec88ee3ceccc7094510596e218eebcb5d459256d /arch/arm/mach-tegra/iovmm-gart.c | |
parent | 90807f26e12cb1bf10aeb05c850c8717c9af5f24 (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.c | 13 |
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(); } |