blob: 80998b0d3222e4d2bd602fc45bf3c8e24c929976 [file] [log] [blame]
Amit Kucheriaa329b482010-02-04 12:21:53 -08001/*
Dinh Nguyenb66ff7a2010-11-15 11:30:00 -06002 * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
Amit Kucheriaa329b482010-02-04 12:21:53 -08003 *
4 * The code contained herein is licensed under the GNU General Public
5 * License. You may obtain a copy of the GNU General Public License
6 * Version 2 or later at the following locations:
7 *
8 * http://www.opensource.org/licenses/gpl-license.html
9 * http://www.gnu.org/copyleft/gpl.html
10 *
11 * Create static mapping between physical to virtual memory.
12 */
13
14#include <linux/mm.h>
15#include <linux/init.h>
16
17#include <asm/mach/map.h>
18
19#include <mach/hardware.h>
20#include <mach/common.h>
Shawn Guo36223602011-06-22 22:41:30 +080021#include <mach/devices-common.h>
Amit Kucheriaa329b482010-02-04 12:21:53 -080022#include <mach/iomux-v3.h>
23
24/*
Jason Liuabca2e12011-09-09 17:17:47 +080025 * Define the MX50 memory map.
26 */
27static struct map_desc mx50_io_desc[] __initdata = {
28 imx_map_entry(MX50, TZIC, MT_DEVICE),
29 imx_map_entry(MX50, SPBA0, MT_DEVICE),
30 imx_map_entry(MX50, AIPS1, MT_DEVICE),
31 imx_map_entry(MX50, AIPS2, MT_DEVICE),
32};
33
34/*
Amit Kucheriaa329b482010-02-04 12:21:53 -080035 * Define the MX51 memory map.
36 */
Uwe Kleine-König08ff97b2010-10-25 15:38:09 +020037static struct map_desc mx51_io_desc[] __initdata = {
Jason Liu4c542392011-09-09 17:17:49 +080038 imx_map_entry(MX51, TZIC, MT_DEVICE),
Uwe Kleine-König08ff97b2010-10-25 15:38:09 +020039 imx_map_entry(MX51, IRAM, MT_DEVICE),
Uwe Kleine-König08ff97b2010-10-25 15:38:09 +020040 imx_map_entry(MX51, AIPS1, MT_DEVICE),
41 imx_map_entry(MX51, SPBA0, MT_DEVICE),
42 imx_map_entry(MX51, AIPS2, MT_DEVICE),
Amit Kucheriaa329b482010-02-04 12:21:53 -080043};
44
45/*
Dinh Nguyenb66ff7a2010-11-15 11:30:00 -060046 * Define the MX53 memory map.
47 */
48static struct map_desc mx53_io_desc[] __initdata = {
Jason Liu4c542392011-09-09 17:17:49 +080049 imx_map_entry(MX53, TZIC, MT_DEVICE),
Dinh Nguyenb66ff7a2010-11-15 11:30:00 -060050 imx_map_entry(MX53, AIPS1, MT_DEVICE),
51 imx_map_entry(MX53, SPBA0, MT_DEVICE),
52 imx_map_entry(MX53, AIPS2, MT_DEVICE),
53};
54
55/*
Amit Kucheriaa329b482010-02-04 12:21:53 -080056 * This function initializes the memory map. It is called during the
57 * system startup to create static physical to virtual memory mappings
58 * for the IO modules.
59 */
Jason Liuabca2e12011-09-09 17:17:47 +080060void __init mx50_map_io(void)
61{
62 iotable_init(mx50_io_desc, ARRAY_SIZE(mx50_io_desc));
63}
64
Amit Kucheriaa329b482010-02-04 12:21:53 -080065void __init mx51_map_io(void)
66{
Uwe Kleine-Königab1304212011-02-07 16:35:21 +010067 iotable_init(mx51_io_desc, ARRAY_SIZE(mx51_io_desc));
68}
69
Jason Liuabca2e12011-09-09 17:17:47 +080070void __init mx53_map_io(void)
71{
72 iotable_init(mx53_io_desc, ARRAY_SIZE(mx53_io_desc));
73}
74
75void __init imx50_init_early(void)
76{
77 mxc_set_cpu_type(MXC_CPU_MX50);
78 mxc_iomux_v3_init(MX50_IO_ADDRESS(MX50_IOMUXC_BASE_ADDR));
79 mxc_arch_reset_init(MX50_IO_ADDRESS(MX50_WDOG_BASE_ADDR));
80}
81
Uwe Kleine-Königab1304212011-02-07 16:35:21 +010082void __init imx51_init_early(void)
83{
Amit Kucheriaa329b482010-02-04 12:21:53 -080084 mxc_set_cpu_type(MXC_CPU_MX51);
85 mxc_iomux_v3_init(MX51_IO_ADDRESS(MX51_IOMUXC_BASE_ADDR));
Fabio Estevam8c2efec2010-12-06 16:38:32 -020086 mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR));
Amit Kucheriaa329b482010-02-04 12:21:53 -080087}
88
Uwe Kleine-Königab1304212011-02-07 16:35:21 +010089void __init imx53_init_early(void)
90{
Dinh Nguyenb66ff7a2010-11-15 11:30:00 -060091 mxc_set_cpu_type(MXC_CPU_MX53);
92 mxc_iomux_v3_init(MX53_IO_ADDRESS(MX53_IOMUXC_BASE_ADDR));
Fabio Estevam78c73592011-02-17 18:09:52 -020093 mxc_arch_reset_init(MX53_IO_ADDRESS(MX53_WDOG1_BASE_ADDR));
Dinh Nguyenb66ff7a2010-11-15 11:30:00 -060094}
95
Jason Liuabca2e12011-09-09 17:17:47 +080096void __init mx50_init_irq(void)
97{
98 tzic_init_irq(MX50_IO_ADDRESS(MX50_TZIC_BASE_ADDR));
99}
100
Amit Kucheriaa329b482010-02-04 12:21:53 -0800101void __init mx51_init_irq(void)
102{
Jason Liu4c542392011-09-09 17:17:49 +0800103 tzic_init_irq(MX51_IO_ADDRESS(MX51_TZIC_BASE_ADDR));
Amit Kucheriaa329b482010-02-04 12:21:53 -0800104}
Dinh Nguyenc0abefd2010-11-15 11:29:59 -0600105
Dinh Nguyenc0abefd2010-11-15 11:29:59 -0600106void __init mx53_init_irq(void)
107{
Jason Liu4c542392011-09-09 17:17:49 +0800108 tzic_init_irq(MX53_IO_ADDRESS(MX53_TZIC_BASE_ADDR));
Shawn Guob78d8e52011-06-06 00:07:55 +0800109}
110
Shawn Guo36223602011-06-22 22:41:30 +0800111static struct sdma_script_start_addrs imx51_sdma_script __initdata = {
112 .ap_2_ap_addr = 642,
113 .uart_2_mcu_addr = 817,
114 .mcu_2_app_addr = 747,
115 .mcu_2_shp_addr = 961,
116 .ata_2_mcu_addr = 1473,
117 .mcu_2_ata_addr = 1392,
118 .app_2_per_addr = 1033,
119 .app_2_mcu_addr = 683,
120 .shp_2_per_addr = 1251,
121 .shp_2_mcu_addr = 892,
122};
123
124static struct sdma_platform_data imx51_sdma_pdata __initdata = {
Shawn Guo2e534b22011-06-22 22:41:31 +0800125 .fw_name = "sdma-imx51.bin",
Shawn Guo36223602011-06-22 22:41:30 +0800126 .script_addrs = &imx51_sdma_script,
127};
128
129static struct sdma_script_start_addrs imx53_sdma_script __initdata = {
130 .ap_2_ap_addr = 642,
131 .app_2_mcu_addr = 683,
132 .mcu_2_app_addr = 747,
133 .uart_2_mcu_addr = 817,
134 .shp_2_mcu_addr = 891,
135 .mcu_2_shp_addr = 960,
136 .uartsh_2_mcu_addr = 1032,
137 .spdif_2_mcu_addr = 1100,
138 .mcu_2_spdif_addr = 1134,
139 .firi_2_mcu_addr = 1193,
140 .mcu_2_firi_addr = 1290,
141};
142
143static struct sdma_platform_data imx53_sdma_pdata __initdata = {
Shawn Guo2e534b22011-06-22 22:41:31 +0800144 .fw_name = "sdma-imx53.bin",
Shawn Guo36223602011-06-22 22:41:30 +0800145 .script_addrs = &imx53_sdma_script,
146};
147
Jason Liuabca2e12011-09-09 17:17:47 +0800148void __init imx50_soc_init(void)
149{
150 /* i.mx50 has the i.mx31 type gpio */
151 mxc_register_gpio("imx31-gpio", 0, MX50_GPIO1_BASE_ADDR, SZ_16K, MX50_INT_GPIO1_LOW, MX50_INT_GPIO1_HIGH);
152 mxc_register_gpio("imx31-gpio", 1, MX50_GPIO2_BASE_ADDR, SZ_16K, MX50_INT_GPIO2_LOW, MX50_INT_GPIO2_HIGH);
153 mxc_register_gpio("imx31-gpio", 2, MX50_GPIO3_BASE_ADDR, SZ_16K, MX50_INT_GPIO3_LOW, MX50_INT_GPIO3_HIGH);
154 mxc_register_gpio("imx31-gpio", 3, MX50_GPIO4_BASE_ADDR, SZ_16K, MX50_INT_GPIO4_LOW, MX50_INT_GPIO4_HIGH);
155 mxc_register_gpio("imx31-gpio", 4, MX50_GPIO5_BASE_ADDR, SZ_16K, MX50_INT_GPIO5_LOW, MX50_INT_GPIO5_HIGH);
156 mxc_register_gpio("imx31-gpio", 5, MX50_GPIO6_BASE_ADDR, SZ_16K, MX50_INT_GPIO6_LOW, MX50_INT_GPIO6_HIGH);
157}
158
Shawn Guob78d8e52011-06-06 00:07:55 +0800159void __init imx51_soc_init(void)
160{
Shawn Guoe7fc6ae2011-07-07 00:37:41 +0800161 /* i.mx51 has the i.mx31 type gpio */
162 mxc_register_gpio("imx31-gpio", 0, MX51_GPIO1_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO1_LOW, MX51_MXC_INT_GPIO1_HIGH);
163 mxc_register_gpio("imx31-gpio", 1, MX51_GPIO2_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO2_LOW, MX51_MXC_INT_GPIO2_HIGH);
164 mxc_register_gpio("imx31-gpio", 2, MX51_GPIO3_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO3_LOW, MX51_MXC_INT_GPIO3_HIGH);
165 mxc_register_gpio("imx31-gpio", 3, MX51_GPIO4_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO4_LOW, MX51_MXC_INT_GPIO4_HIGH);
Shawn Guo36223602011-06-22 22:41:30 +0800166
Shawn Guo62550cd2011-07-13 21:33:17 +0800167 /* i.mx51 has the i.mx35 type sdma */
168 imx_add_imx_sdma("imx35-sdma", MX51_SDMA_BASE_ADDR, MX51_INT_SDMA, &imx51_sdma_pdata);
Shawn Guob78d8e52011-06-06 00:07:55 +0800169}
170
171void __init imx53_soc_init(void)
172{
Shawn Guoe7fc6ae2011-07-07 00:37:41 +0800173 /* i.mx53 has the i.mx31 type gpio */
174 mxc_register_gpio("imx31-gpio", 0, MX53_GPIO1_BASE_ADDR, SZ_16K, MX53_INT_GPIO1_LOW, MX53_INT_GPIO1_HIGH);
175 mxc_register_gpio("imx31-gpio", 1, MX53_GPIO2_BASE_ADDR, SZ_16K, MX53_INT_GPIO2_LOW, MX53_INT_GPIO2_HIGH);
176 mxc_register_gpio("imx31-gpio", 2, MX53_GPIO3_BASE_ADDR, SZ_16K, MX53_INT_GPIO3_LOW, MX53_INT_GPIO3_HIGH);
177 mxc_register_gpio("imx31-gpio", 3, MX53_GPIO4_BASE_ADDR, SZ_16K, MX53_INT_GPIO4_LOW, MX53_INT_GPIO4_HIGH);
178 mxc_register_gpio("imx31-gpio", 4, MX53_GPIO5_BASE_ADDR, SZ_16K, MX53_INT_GPIO5_LOW, MX53_INT_GPIO5_HIGH);
179 mxc_register_gpio("imx31-gpio", 5, MX53_GPIO6_BASE_ADDR, SZ_16K, MX53_INT_GPIO6_LOW, MX53_INT_GPIO6_HIGH);
180 mxc_register_gpio("imx31-gpio", 6, MX53_GPIO7_BASE_ADDR, SZ_16K, MX53_INT_GPIO7_LOW, MX53_INT_GPIO7_HIGH);
Shawn Guo36223602011-06-22 22:41:30 +0800181
Shawn Guo62550cd2011-07-13 21:33:17 +0800182 /* i.mx53 has the i.mx35 type sdma */
183 imx_add_imx_sdma("imx35-sdma", MX53_SDMA_BASE_ADDR, MX53_INT_SDMA, &imx53_sdma_pdata);
Dinh Nguyenc0abefd2010-11-15 11:29:59 -0600184}