summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-imx/mm-imx3.c
diff options
context:
space:
mode:
authorShawn Guo <shawn.guo@linaro.org>2011-09-28 11:16:07 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2011-10-04 10:55:12 +0200
commitf548897ffc0510885af27e22a11f449fe5e0cbbd (patch)
tree0fdf27f5466df384626741edaf6f36bfc3a0d46a /arch/arm/mach-imx/mm-imx3.c
parentarm/imx: remove cpu_is_xxx() from arch_idle() (diff)
downloadlinux-f548897ffc0510885af27e22a11f449fe5e0cbbd.tar.xz
linux-f548897ffc0510885af27e22a11f449fe5e0cbbd.zip
arm/imx: remove cpu_is_xxx() check from __imx_ioremap()
This patch adds an ioremap hook imx_ioremap to be called in __imx_ioremap(). Any soc that needs a customized ioremap other than __arm_ioremap() can set up this hook in soc specific call. Signed-off-by: Shawn Guo <shawn.guo@linaro.org> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/mach-imx/mm-imx3.c')
-rw-r--r--arch/arm/mach-imx/mm-imx3.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/mm-imx3.c b/arch/arm/mach-imx/mm-imx3.c
index 6fad0d62052e..9f0e82ec3398 100644
--- a/arch/arm/mach-imx/mm-imx3.c
+++ b/arch/arm/mach-imx/mm-imx3.c
@@ -58,6 +58,23 @@ static void imx3_idle(void)
: "=r" (reg));
}
+static void __iomem *imx3_ioremap(unsigned long phys_addr, size_t size,
+ unsigned int mtype)
+{
+ if (mtype == MT_DEVICE) {
+ /*
+ * Access all peripherals below 0x80000000 as nonshared device
+ * on mx3, but leave l2cc alone. Otherwise cache corruptions
+ * can occur.
+ */
+ if (phys_addr < 0x80000000 &&
+ !addr_in_module(phys_addr, MX3x_L2CC))
+ mtype = MT_DEVICE_NONSHARED;
+ }
+
+ return __arm_ioremap(phys_addr, size, mtype);
+}
+
void imx3_init_l2x0(void)
{
void __iomem *l2x0_base;
@@ -127,6 +144,7 @@ void __init imx31_init_early(void)
mxc_set_cpu_type(MXC_CPU_MX31);
mxc_arch_reset_init(MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR));
imx_idle = imx3_idle;
+ imx_ioremap = imx3_ioremap;
}
void __init imx35_init_early(void)
@@ -135,6 +153,7 @@ void __init imx35_init_early(void)
mxc_iomux_v3_init(MX35_IO_ADDRESS(MX35_IOMUXC_BASE_ADDR));
mxc_arch_reset_init(MX35_IO_ADDRESS(MX35_WDOG_BASE_ADDR));
imx_idle = imx3_idle;
+ imx_ioremap = imx3_ioremap;
}
void __init mx31_init_irq(void)