diff options
Diffstat (limited to 'arch/arm/mach-mx5/mm.c')
-rw-r--r-- | arch/arm/mach-mx5/mm.c | 90 |
1 files changed, 57 insertions, 33 deletions
diff --git a/arch/arm/mach-mx5/mm.c b/arch/arm/mach-mx5/mm.c index baea6e5cddd9..26eacc9d0d90 100644 --- a/arch/arm/mach-mx5/mm.c +++ b/arch/arm/mach-mx5/mm.c | |||
@@ -21,12 +21,27 @@ | |||
21 | #include <mach/devices-common.h> | 21 | #include <mach/devices-common.h> |
22 | #include <mach/iomux-v3.h> | 22 | #include <mach/iomux-v3.h> |
23 | 23 | ||
24 | static void imx5_idle(void) | ||
25 | { | ||
26 | mx5_cpu_lp_set(WAIT_UNCLOCKED_POWER_OFF); | ||
27 | } | ||
28 | |||
29 | /* | ||
30 | * Define the MX50 memory map. | ||
31 | */ | ||
32 | static struct map_desc mx50_io_desc[] __initdata = { | ||
33 | imx_map_entry(MX50, TZIC, MT_DEVICE), | ||
34 | imx_map_entry(MX50, SPBA0, MT_DEVICE), | ||
35 | imx_map_entry(MX50, AIPS1, MT_DEVICE), | ||
36 | imx_map_entry(MX50, AIPS2, MT_DEVICE), | ||
37 | }; | ||
38 | |||
24 | /* | 39 | /* |
25 | * Define the MX51 memory map. | 40 | * Define the MX51 memory map. |
26 | */ | 41 | */ |
27 | static struct map_desc mx51_io_desc[] __initdata = { | 42 | static struct map_desc mx51_io_desc[] __initdata = { |
43 | imx_map_entry(MX51, TZIC, MT_DEVICE), | ||
28 | imx_map_entry(MX51, IRAM, MT_DEVICE), | 44 | imx_map_entry(MX51, IRAM, MT_DEVICE), |
29 | imx_map_entry(MX51, DEBUG, MT_DEVICE), | ||
30 | imx_map_entry(MX51, AIPS1, MT_DEVICE), | 45 | imx_map_entry(MX51, AIPS1, MT_DEVICE), |
31 | imx_map_entry(MX51, SPBA0, MT_DEVICE), | 46 | imx_map_entry(MX51, SPBA0, MT_DEVICE), |
32 | imx_map_entry(MX51, AIPS2, MT_DEVICE), | 47 | imx_map_entry(MX51, AIPS2, MT_DEVICE), |
@@ -36,6 +51,7 @@ static struct map_desc mx51_io_desc[] __initdata = { | |||
36 | * Define the MX53 memory map. | 51 | * Define the MX53 memory map. |
37 | */ | 52 | */ |
38 | static struct map_desc mx53_io_desc[] __initdata = { | 53 | static struct map_desc mx53_io_desc[] __initdata = { |
54 | imx_map_entry(MX53, TZIC, MT_DEVICE), | ||
39 | imx_map_entry(MX53, AIPS1, MT_DEVICE), | 55 | imx_map_entry(MX53, AIPS1, MT_DEVICE), |
40 | imx_map_entry(MX53, SPBA0, MT_DEVICE), | 56 | imx_map_entry(MX53, SPBA0, MT_DEVICE), |
41 | imx_map_entry(MX53, AIPS2, MT_DEVICE), | 57 | imx_map_entry(MX53, AIPS2, MT_DEVICE), |
@@ -46,21 +62,34 @@ static struct map_desc mx53_io_desc[] __initdata = { | |||
46 | * system startup to create static physical to virtual memory mappings | 62 | * system startup to create static physical to virtual memory mappings |
47 | * for the IO modules. | 63 | * for the IO modules. |
48 | */ | 64 | */ |
65 | void __init mx50_map_io(void) | ||
66 | { | ||
67 | iotable_init(mx50_io_desc, ARRAY_SIZE(mx50_io_desc)); | ||
68 | } | ||
69 | |||
49 | void __init mx51_map_io(void) | 70 | void __init mx51_map_io(void) |
50 | { | 71 | { |
51 | iotable_init(mx51_io_desc, ARRAY_SIZE(mx51_io_desc)); | 72 | iotable_init(mx51_io_desc, ARRAY_SIZE(mx51_io_desc)); |
52 | } | 73 | } |
53 | 74 | ||
75 | void __init mx53_map_io(void) | ||
76 | { | ||
77 | iotable_init(mx53_io_desc, ARRAY_SIZE(mx53_io_desc)); | ||
78 | } | ||
79 | |||
80 | void __init imx50_init_early(void) | ||
81 | { | ||
82 | mxc_set_cpu_type(MXC_CPU_MX50); | ||
83 | mxc_iomux_v3_init(MX50_IO_ADDRESS(MX50_IOMUXC_BASE_ADDR)); | ||
84 | mxc_arch_reset_init(MX50_IO_ADDRESS(MX50_WDOG_BASE_ADDR)); | ||
85 | } | ||
86 | |||
54 | void __init imx51_init_early(void) | 87 | void __init imx51_init_early(void) |
55 | { | 88 | { |
56 | mxc_set_cpu_type(MXC_CPU_MX51); | 89 | mxc_set_cpu_type(MXC_CPU_MX51); |
57 | mxc_iomux_v3_init(MX51_IO_ADDRESS(MX51_IOMUXC_BASE_ADDR)); | 90 | mxc_iomux_v3_init(MX51_IO_ADDRESS(MX51_IOMUXC_BASE_ADDR)); |
58 | mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR)); | 91 | mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR)); |
59 | } | 92 | imx_idle = imx5_idle; |
60 | |||
61 | void __init mx53_map_io(void) | ||
62 | { | ||
63 | iotable_init(mx53_io_desc, ARRAY_SIZE(mx53_io_desc)); | ||
64 | } | 93 | } |
65 | 94 | ||
66 | void __init imx53_init_early(void) | 95 | void __init imx53_init_early(void) |
@@ -70,35 +99,19 @@ void __init imx53_init_early(void) | |||
70 | mxc_arch_reset_init(MX53_IO_ADDRESS(MX53_WDOG1_BASE_ADDR)); | 99 | mxc_arch_reset_init(MX53_IO_ADDRESS(MX53_WDOG1_BASE_ADDR)); |
71 | } | 100 | } |
72 | 101 | ||
73 | void __init mx51_init_irq(void) | 102 | void __init mx50_init_irq(void) |
74 | { | 103 | { |
75 | unsigned long tzic_addr; | 104 | tzic_init_irq(MX50_IO_ADDRESS(MX50_TZIC_BASE_ADDR)); |
76 | void __iomem *tzic_virt; | 105 | } |
77 | |||
78 | if (mx51_revision() < IMX_CHIP_REVISION_2_0) | ||
79 | tzic_addr = MX51_TZIC_BASE_ADDR_TO1; | ||
80 | else | ||
81 | tzic_addr = MX51_TZIC_BASE_ADDR; | ||
82 | |||
83 | tzic_virt = ioremap(tzic_addr, SZ_16K); | ||
84 | if (!tzic_virt) | ||
85 | panic("unable to map TZIC interrupt controller\n"); | ||
86 | 106 | ||
87 | tzic_init_irq(tzic_virt); | 107 | void __init mx51_init_irq(void) |
108 | { | ||
109 | tzic_init_irq(MX51_IO_ADDRESS(MX51_TZIC_BASE_ADDR)); | ||
88 | } | 110 | } |
89 | 111 | ||
90 | void __init mx53_init_irq(void) | 112 | void __init mx53_init_irq(void) |
91 | { | 113 | { |
92 | unsigned long tzic_addr; | 114 | tzic_init_irq(MX53_IO_ADDRESS(MX53_TZIC_BASE_ADDR)); |
93 | void __iomem *tzic_virt; | ||
94 | |||
95 | tzic_addr = MX53_TZIC_BASE_ADDR; | ||
96 | |||
97 | tzic_virt = ioremap(tzic_addr, SZ_16K); | ||
98 | if (!tzic_virt) | ||
99 | panic("unable to map TZIC interrupt controller\n"); | ||
100 | |||
101 | tzic_init_irq(tzic_virt); | ||
102 | } | 115 | } |
103 | 116 | ||
104 | static struct sdma_script_start_addrs imx51_sdma_script __initdata = { | 117 | static struct sdma_script_start_addrs imx51_sdma_script __initdata = { |
@@ -138,13 +151,24 @@ static struct sdma_platform_data imx53_sdma_pdata __initdata = { | |||
138 | .script_addrs = &imx53_sdma_script, | 151 | .script_addrs = &imx53_sdma_script, |
139 | }; | 152 | }; |
140 | 153 | ||
154 | void __init imx50_soc_init(void) | ||
155 | { | ||
156 | /* i.mx50 has the i.mx31 type gpio */ | ||
157 | mxc_register_gpio("imx31-gpio", 0, MX50_GPIO1_BASE_ADDR, SZ_16K, MX50_INT_GPIO1_LOW, MX50_INT_GPIO1_HIGH); | ||
158 | mxc_register_gpio("imx31-gpio", 1, MX50_GPIO2_BASE_ADDR, SZ_16K, MX50_INT_GPIO2_LOW, MX50_INT_GPIO2_HIGH); | ||
159 | mxc_register_gpio("imx31-gpio", 2, MX50_GPIO3_BASE_ADDR, SZ_16K, MX50_INT_GPIO3_LOW, MX50_INT_GPIO3_HIGH); | ||
160 | mxc_register_gpio("imx31-gpio", 3, MX50_GPIO4_BASE_ADDR, SZ_16K, MX50_INT_GPIO4_LOW, MX50_INT_GPIO4_HIGH); | ||
161 | mxc_register_gpio("imx31-gpio", 4, MX50_GPIO5_BASE_ADDR, SZ_16K, MX50_INT_GPIO5_LOW, MX50_INT_GPIO5_HIGH); | ||
162 | mxc_register_gpio("imx31-gpio", 5, MX50_GPIO6_BASE_ADDR, SZ_16K, MX50_INT_GPIO6_LOW, MX50_INT_GPIO6_HIGH); | ||
163 | } | ||
164 | |||
141 | void __init imx51_soc_init(void) | 165 | void __init imx51_soc_init(void) |
142 | { | 166 | { |
143 | /* i.mx51 has the i.mx31 type gpio */ | 167 | /* i.mx51 has the i.mx31 type gpio */ |
144 | mxc_register_gpio("imx31-gpio", 0, MX51_GPIO1_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO1_LOW, MX51_MXC_INT_GPIO1_HIGH); | 168 | mxc_register_gpio("imx31-gpio", 0, MX51_GPIO1_BASE_ADDR, SZ_16K, MX51_INT_GPIO1_LOW, MX51_INT_GPIO1_HIGH); |
145 | mxc_register_gpio("imx31-gpio", 1, MX51_GPIO2_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO2_LOW, MX51_MXC_INT_GPIO2_HIGH); | 169 | mxc_register_gpio("imx31-gpio", 1, MX51_GPIO2_BASE_ADDR, SZ_16K, MX51_INT_GPIO2_LOW, MX51_INT_GPIO2_HIGH); |
146 | mxc_register_gpio("imx31-gpio", 2, MX51_GPIO3_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO3_LOW, MX51_MXC_INT_GPIO3_HIGH); | 170 | mxc_register_gpio("imx31-gpio", 2, MX51_GPIO3_BASE_ADDR, SZ_16K, MX51_INT_GPIO3_LOW, MX51_INT_GPIO3_HIGH); |
147 | mxc_register_gpio("imx31-gpio", 3, MX51_GPIO4_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO4_LOW, MX51_MXC_INT_GPIO4_HIGH); | 171 | mxc_register_gpio("imx31-gpio", 3, MX51_GPIO4_BASE_ADDR, SZ_16K, MX51_INT_GPIO4_LOW, MX51_INT_GPIO4_HIGH); |
148 | 172 | ||
149 | /* i.mx51 has the i.mx35 type sdma */ | 173 | /* i.mx51 has the i.mx35 type sdma */ |
150 | imx_add_imx_sdma("imx35-sdma", MX51_SDMA_BASE_ADDR, MX51_INT_SDMA, &imx51_sdma_pdata); | 174 | imx_add_imx_sdma("imx35-sdma", MX51_SDMA_BASE_ADDR, MX51_INT_SDMA, &imx51_sdma_pdata); |