|
@@ -19,6 +19,7 @@
|
|
#include <linux/mm.h>
|
|
#include <linux/mm.h>
|
|
#include <linux/init.h>
|
|
#include <linux/init.h>
|
|
#include <linux/err.h>
|
|
#include <linux/err.h>
|
|
|
|
+#include <linux/io.h>
|
|
#include <linux/pinctrl/machine.h>
|
|
#include <linux/pinctrl/machine.h>
|
|
|
|
|
|
#include <asm/pgtable.h>
|
|
#include <asm/pgtable.h>
|
|
@@ -38,8 +39,6 @@ static void imx3_idle(void)
|
|
{
|
|
{
|
|
unsigned long reg = 0;
|
|
unsigned long reg = 0;
|
|
|
|
|
|
- mx3_cpu_lp_set(MX3_WAIT);
|
|
|
|
-
|
|
|
|
__asm__ __volatile__(
|
|
__asm__ __volatile__(
|
|
/* disable I and D cache */
|
|
/* disable I and D cache */
|
|
"mrc p15, 0, %0, c1, c0, 0\n"
|
|
"mrc p15, 0, %0, c1, c0, 0\n"
|
|
@@ -135,11 +134,20 @@ void __init mx31_map_io(void)
|
|
iotable_init(mx31_io_desc, ARRAY_SIZE(mx31_io_desc));
|
|
iotable_init(mx31_io_desc, ARRAY_SIZE(mx31_io_desc));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void imx31_idle(void)
|
|
|
|
+{
|
|
|
|
+ int reg = imx_readl(mx3_ccm_base + MXC_CCM_CCMR);
|
|
|
|
+ reg &= ~MXC_CCM_CCMR_LPM_MASK;
|
|
|
|
+ imx_writel(reg, mx3_ccm_base + MXC_CCM_CCMR);
|
|
|
|
+
|
|
|
|
+ imx3_idle();
|
|
|
|
+}
|
|
|
|
+
|
|
void __init imx31_init_early(void)
|
|
void __init imx31_init_early(void)
|
|
{
|
|
{
|
|
mxc_set_cpu_type(MXC_CPU_MX31);
|
|
mxc_set_cpu_type(MXC_CPU_MX31);
|
|
arch_ioremap_caller = imx3_ioremap_caller;
|
|
arch_ioremap_caller = imx3_ioremap_caller;
|
|
- arm_pm_idle = imx3_idle;
|
|
|
|
|
|
+ arm_pm_idle = imx31_idle;
|
|
mx3_ccm_base = MX31_IO_ADDRESS(MX31_CCM_BASE_ADDR);
|
|
mx3_ccm_base = MX31_IO_ADDRESS(MX31_CCM_BASE_ADDR);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -167,6 +175,10 @@ static const struct resource imx31_audmux_res[] __initconst = {
|
|
DEFINE_RES_MEM(MX31_AUDMUX_BASE_ADDR, SZ_16K),
|
|
DEFINE_RES_MEM(MX31_AUDMUX_BASE_ADDR, SZ_16K),
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+static const struct resource imx31_rnga_res[] __initconst = {
|
|
|
|
+ DEFINE_RES_MEM(MX31_RNGA_BASE_ADDR, SZ_16K),
|
|
|
|
+};
|
|
|
|
+
|
|
void __init imx31_soc_init(void)
|
|
void __init imx31_soc_init(void)
|
|
{
|
|
{
|
|
int to_version = mx31_revision() >> 4;
|
|
int to_version = mx31_revision() >> 4;
|
|
@@ -195,6 +207,8 @@ void __init imx31_soc_init(void)
|
|
|
|
|
|
platform_device_register_simple("imx31-audmux", 0, imx31_audmux_res,
|
|
platform_device_register_simple("imx31-audmux", 0, imx31_audmux_res,
|
|
ARRAY_SIZE(imx31_audmux_res));
|
|
ARRAY_SIZE(imx31_audmux_res));
|
|
|
|
+ platform_device_register_simple("mxc_rnga", -1, imx31_rnga_res,
|
|
|
|
+ ARRAY_SIZE(imx31_rnga_res));
|
|
}
|
|
}
|
|
#endif /* ifdef CONFIG_SOC_IMX31 */
|
|
#endif /* ifdef CONFIG_SOC_IMX31 */
|
|
|
|
|
|
@@ -212,11 +226,21 @@ void __init mx35_map_io(void)
|
|
iotable_init(mx35_io_desc, ARRAY_SIZE(mx35_io_desc));
|
|
iotable_init(mx35_io_desc, ARRAY_SIZE(mx35_io_desc));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void imx35_idle(void)
|
|
|
|
+{
|
|
|
|
+ int reg = imx_readl(mx3_ccm_base + MXC_CCM_CCMR);
|
|
|
|
+ reg &= ~MXC_CCM_CCMR_LPM_MASK;
|
|
|
|
+ reg |= MXC_CCM_CCMR_LPM_WAIT_MX35;
|
|
|
|
+ imx_writel(reg, mx3_ccm_base + MXC_CCM_CCMR);
|
|
|
|
+
|
|
|
|
+ imx3_idle();
|
|
|
|
+}
|
|
|
|
+
|
|
void __init imx35_init_early(void)
|
|
void __init imx35_init_early(void)
|
|
{
|
|
{
|
|
mxc_set_cpu_type(MXC_CPU_MX35);
|
|
mxc_set_cpu_type(MXC_CPU_MX35);
|
|
mxc_iomux_v3_init(MX35_IO_ADDRESS(MX35_IOMUXC_BASE_ADDR));
|
|
mxc_iomux_v3_init(MX35_IO_ADDRESS(MX35_IOMUXC_BASE_ADDR));
|
|
- arm_pm_idle = imx3_idle;
|
|
|
|
|
|
+ arm_pm_idle = imx35_idle;
|
|
arch_ioremap_caller = imx3_ioremap_caller;
|
|
arch_ioremap_caller = imx3_ioremap_caller;
|
|
mx3_ccm_base = MX35_IO_ADDRESS(MX35_CCM_BASE_ADDR);
|
|
mx3_ccm_base = MX35_IO_ADDRESS(MX35_CCM_BASE_ADDR);
|
|
}
|
|
}
|