diff options
author | Yong Shen <yong.shen@linaro.org> | 2011-01-04 01:22:56 -0500 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2011-01-04 06:00:23 -0500 |
commit | a58154d1c3535f451a409abbd0bda6770b2d9380 (patch) | |
tree | 695c321719b7c13e5c55b4a857c2bc99d66023f2 /arch/arm | |
parent | 644b1d586d6670262501057ae99d893fadb012de (diff) |
ARM i.MX53: Make MX53 EVK bootable
1. Add entries to Kconfig
2. Add machine definition
3. Add Uart platform data, pad setting and base address
4. Adjust GPIO irq number
Signed-off-by: Yong Shen <yong.shen@linaro.org>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/mach-mx5/Kconfig | 18 | ||||
-rw-r--r-- | arch/arm/mach-mx5/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/mach-mx5/Makefile.boot | 3 | ||||
-rw-r--r-- | arch/arm/mach-mx5/board-mx53_evk.c | 84 | ||||
-rw-r--r-- | arch/arm/mach-mx5/devices-imx53.h | 13 | ||||
-rw-r--r-- | arch/arm/plat-mxc/devices/platform-imx-uart.c | 10 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/iomux-mx53.h | 20 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/irqs.h | 4 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/uncompress.h | 4 |
9 files changed, 156 insertions, 1 deletions
diff --git a/arch/arm/mach-mx5/Kconfig b/arch/arm/mach-mx5/Kconfig index 7c317579cde9..55254b6e9460 100644 --- a/arch/arm/mach-mx5/Kconfig +++ b/arch/arm/mach-mx5/Kconfig | |||
@@ -7,6 +7,9 @@ config ARCH_MX50 | |||
7 | config ARCH_MX51 | 7 | config ARCH_MX51 |
8 | bool | 8 | bool |
9 | 9 | ||
10 | config ARCH_MX53 | ||
11 | bool | ||
12 | |||
10 | config SOC_IMX50 | 13 | config SOC_IMX50 |
11 | bool | 14 | bool |
12 | select MXC_TZIC | 15 | select MXC_TZIC |
@@ -23,6 +26,12 @@ config SOC_IMX51 | |||
23 | select ARCH_HAS_CPUFREQ | 26 | select ARCH_HAS_CPUFREQ |
24 | select ARCH_MX51 | 27 | select ARCH_MX51 |
25 | 28 | ||
29 | config SOC_IMX53 | ||
30 | bool | ||
31 | select MXC_TZIC | ||
32 | select ARCH_MXC_IOMUX_V3 | ||
33 | select ARCH_MX53 | ||
34 | |||
26 | comment "MX5 platforms:" | 35 | comment "MX5 platforms:" |
27 | 36 | ||
28 | config MACH_MX51_BABBAGE | 37 | config MACH_MX51_BABBAGE |
@@ -111,6 +120,15 @@ config MACH_MX51_EFIKAMX | |||
111 | Include support for Genesi Efika MX nettop. This includes specific | 120 | Include support for Genesi Efika MX nettop. This includes specific |
112 | configurations for the board and its peripherals. | 121 | configurations for the board and its peripherals. |
113 | 122 | ||
123 | config MACH_MX53_EVK | ||
124 | bool "Support MX53 EVK platforms" | ||
125 | select SOC_IMX53 | ||
126 | select IMX_HAVE_PLATFORM_IMX_UART | ||
127 | help | ||
128 | Include support for MX53 EVK platform. This includes specific | ||
129 | configurations for the board and its peripherals. | ||
130 | |||
131 | |||
114 | config MACH_MX50_RDP | 132 | config MACH_MX50_RDP |
115 | bool "Support MX50 reference design platform" | 133 | bool "Support MX50 reference design platform" |
116 | depends on BROKEN | 134 | depends on BROKEN |
diff --git a/arch/arm/mach-mx5/Makefile b/arch/arm/mach-mx5/Makefile index d99d7ab3b39b..0c398baf11fe 100644 --- a/arch/arm/mach-mx5/Makefile +++ b/arch/arm/mach-mx5/Makefile | |||
@@ -9,6 +9,7 @@ obj-$(CONFIG_SOC_IMX50) += mm-mx50.o | |||
9 | obj-$(CONFIG_CPU_FREQ_IMX) += cpu_op-mx51.o | 9 | obj-$(CONFIG_CPU_FREQ_IMX) += cpu_op-mx51.o |
10 | obj-$(CONFIG_MACH_MX51_BABBAGE) += board-mx51_babbage.o | 10 | obj-$(CONFIG_MACH_MX51_BABBAGE) += board-mx51_babbage.o |
11 | obj-$(CONFIG_MACH_MX51_3DS) += board-mx51_3ds.o | 11 | obj-$(CONFIG_MACH_MX51_3DS) += board-mx51_3ds.o |
12 | obj-$(CONFIG_MACH_MX53_EVK) += board-mx53_evk.o | ||
12 | obj-$(CONFIG_MACH_EUKREA_CPUIMX51) += board-cpuimx51.o | 13 | obj-$(CONFIG_MACH_EUKREA_CPUIMX51) += board-cpuimx51.o |
13 | obj-$(CONFIG_MACH_EUKREA_MBIMX51_BASEBOARD) += eukrea_mbimx51-baseboard.o | 14 | obj-$(CONFIG_MACH_EUKREA_MBIMX51_BASEBOARD) += eukrea_mbimx51-baseboard.o |
14 | obj-$(CONFIG_MACH_EUKREA_CPUIMX51SD) += board-cpuimx51sd.o | 15 | obj-$(CONFIG_MACH_EUKREA_CPUIMX51SD) += board-cpuimx51sd.o |
diff --git a/arch/arm/mach-mx5/Makefile.boot b/arch/arm/mach-mx5/Makefile.boot index 854748f80cc1..e928be1b6757 100644 --- a/arch/arm/mach-mx5/Makefile.boot +++ b/arch/arm/mach-mx5/Makefile.boot | |||
@@ -4,3 +4,6 @@ initrd_phys-$(CONFIG_ARCH_MX50) := 0x70800000 | |||
4 | zreladdr-$(CONFIG_ARCH_MX51) := 0x90008000 | 4 | zreladdr-$(CONFIG_ARCH_MX51) := 0x90008000 |
5 | params_phys-$(CONFIG_ARCH_MX51) := 0x90000100 | 5 | params_phys-$(CONFIG_ARCH_MX51) := 0x90000100 |
6 | initrd_phys-$(CONFIG_ARCH_MX51) := 0x90800000 | 6 | initrd_phys-$(CONFIG_ARCH_MX51) := 0x90800000 |
7 | zreladdr-$(CONFIG_ARCH_MX53) := 0x70008000 | ||
8 | params_phys-$(CONFIG_ARCH_MX53) := 0x70000100 | ||
9 | initrd_phys-$(CONFIG_ARCH_MX53) := 0x70800000 | ||
diff --git a/arch/arm/mach-mx5/board-mx53_evk.c b/arch/arm/mach-mx5/board-mx53_evk.c new file mode 100644 index 000000000000..fa97d0d5dd05 --- /dev/null +++ b/arch/arm/mach-mx5/board-mx53_evk.c | |||
@@ -0,0 +1,84 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved. | ||
3 | * Copyright (C) 2010 Yong Shen. <Yong.Shen@linaro.org> | ||
4 | */ | ||
5 | |||
6 | /* | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License, or | ||
10 | * (at your option) any later version. | ||
11 | |||
12 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | |||
17 | * You should have received a copy of the GNU General Public License along | ||
18 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
19 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
20 | */ | ||
21 | |||
22 | #include <linux/init.h> | ||
23 | #include <linux/clk.h> | ||
24 | #include <mach/common.h> | ||
25 | #include <mach/hardware.h> | ||
26 | #include <asm/mach-types.h> | ||
27 | #include <asm/mach/arch.h> | ||
28 | #include <asm/mach/time.h> | ||
29 | #include <mach/imx-uart.h> | ||
30 | #include <mach/iomux-mx53.h> | ||
31 | |||
32 | #include "crm_regs.h" | ||
33 | #include "devices-imx53.h" | ||
34 | |||
35 | static iomux_v3_cfg_t mx53_evk_pads[] = { | ||
36 | MX53_PAD_CSI0_D10__UART1_TXD, | ||
37 | MX53_PAD_CSI0_D11__UART1_RXD, | ||
38 | MX53_PAD_ATA_DIOW__UART1_TXD, | ||
39 | MX53_PAD_ATA_DMACK__UART1_RXD, | ||
40 | |||
41 | MX53_PAD_ATA_BUFFER_EN__UART2_RXD, | ||
42 | MX53_PAD_ATA_DMARQ__UART2_TXD, | ||
43 | MX53_PAD_ATA_DIOR__UART2_RTS, | ||
44 | MX53_PAD_ATA_INTRQ__UART2_CTS, | ||
45 | |||
46 | MX53_PAD_ATA_CS_0__UART3_TXD, | ||
47 | MX53_PAD_ATA_CS_1__UART3_RXD, | ||
48 | MX53_PAD_ATA_DA_1__UART3_CTS, | ||
49 | MX53_PAD_ATA_DA_2__UART3_RTS, | ||
50 | }; | ||
51 | |||
52 | static const struct imxuart_platform_data mx53_evk_uart_pdata __initconst = { | ||
53 | .flags = IMXUART_HAVE_RTSCTS, | ||
54 | }; | ||
55 | |||
56 | static inline void mx53_evk_init_uart(void) | ||
57 | { | ||
58 | imx53_add_imx_uart(0, &mx53_evk_uart_pdata); | ||
59 | imx53_add_imx_uart(1, &mx53_evk_uart_pdata); | ||
60 | imx53_add_imx_uart(2, &mx53_evk_uart_pdata); | ||
61 | } | ||
62 | |||
63 | static void __init mx53_evk_board_init(void) | ||
64 | { | ||
65 | mxc_iomux_v3_setup_multiple_pads(mx53_evk_pads, | ||
66 | ARRAY_SIZE(mx53_evk_pads)); | ||
67 | mx53_evk_init_uart(); | ||
68 | } | ||
69 | |||
70 | static void __init mx53_evk_timer_init(void) | ||
71 | { | ||
72 | mx53_clocks_init(32768, 24000000, 22579200, 0); | ||
73 | } | ||
74 | |||
75 | static struct sys_timer mx53_evk_timer = { | ||
76 | .init = mx53_evk_timer_init, | ||
77 | }; | ||
78 | |||
79 | MACHINE_START(MX53_EVK, "Freescale MX53 EVK Board") | ||
80 | .map_io = mx53_map_io, | ||
81 | .init_irq = mx53_init_irq, | ||
82 | .init_machine = mx53_evk_board_init, | ||
83 | .timer = &mx53_evk_timer, | ||
84 | MACHINE_END | ||
diff --git a/arch/arm/mach-mx5/devices-imx53.h b/arch/arm/mach-mx5/devices-imx53.h new file mode 100644 index 000000000000..9d0ec2507fa6 --- /dev/null +++ b/arch/arm/mach-mx5/devices-imx53.h | |||
@@ -0,0 +1,13 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2010 Yong Shen. <Yong.Shen@linaro.org> | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it under | ||
5 | * the terms of the GNU General Public License version 2 as published by the | ||
6 | * Free Software Foundation. | ||
7 | */ | ||
8 | #include <mach/mx53.h> | ||
9 | #include <mach/devices-common.h> | ||
10 | |||
11 | extern const struct imx_imx_uart_1irq_data imx53_imx_uart_data[] __initconst; | ||
12 | #define imx53_add_imx_uart(id, pdata) \ | ||
13 | imx_add_imx_uart_1irq(&imx53_imx_uart_data[id], pdata) | ||
diff --git a/arch/arm/plat-mxc/devices/platform-imx-uart.c b/arch/arm/plat-mxc/devices/platform-imx-uart.c index 0c69fbcae46a..3c854c2cc6dd 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-uart.c +++ b/arch/arm/plat-mxc/devices/platform-imx-uart.c | |||
@@ -116,6 +116,16 @@ const struct imx_imx_uart_1irq_data imx51_imx_uart_data[] __initconst = { | |||
116 | }; | 116 | }; |
117 | #endif /* ifdef CONFIG_SOC_IMX51 */ | 117 | #endif /* ifdef CONFIG_SOC_IMX51 */ |
118 | 118 | ||
119 | #ifdef CONFIG_SOC_IMX53 | ||
120 | const struct imx_imx_uart_1irq_data imx53_imx_uart_data[] __initconst = { | ||
121 | #define imx53_imx_uart_data_entry(_id, _hwid) \ | ||
122 | imx_imx_uart_1irq_data_entry(MX53, _id, _hwid, SZ_4K) | ||
123 | imx53_imx_uart_data_entry(0, 1), | ||
124 | imx53_imx_uart_data_entry(1, 2), | ||
125 | imx53_imx_uart_data_entry(2, 3), | ||
126 | }; | ||
127 | #endif /* ifdef CONFIG_SOC_IMX53 */ | ||
128 | |||
119 | struct platform_device *__init imx_add_imx_uart_3irq( | 129 | struct platform_device *__init imx_add_imx_uart_3irq( |
120 | const struct imx_imx_uart_3irq_data *data, | 130 | const struct imx_imx_uart_3irq_data *data, |
121 | const struct imxuart_platform_data *pdata) | 131 | const struct imxuart_platform_data *pdata) |
diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx53.h b/arch/arm/plat-mxc/include/mach/iomux-mx53.h index 80cb3c587f92..5deee019c29e 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx53.h +++ b/arch/arm/plat-mxc/include/mach/iomux-mx53.h | |||
@@ -42,6 +42,26 @@ typedef enum iomux_config { | |||
42 | #define NON_MUX_I 0x00 | 42 | #define NON_MUX_I 0x00 |
43 | #define NON_PAD_I 0x00 | 43 | #define NON_PAD_I 0x00 |
44 | 44 | ||
45 | #define MX53_UART_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \ | ||
46 | PAD_CTL_DSE_HIGH | PAD_CTL_SRE_FAST | PAD_CTL_HYS) | ||
47 | /* UART1 */ | ||
48 | #define MX53_PAD_CSI0_D10__UART1_TXD IOMUX_PAD(0x414, 0xE8, 2, 0x0, 0, MX53_UART_PAD_CTRL) | ||
49 | #define MX53_PAD_CSI0_D11__UART1_RXD IOMUX_PAD(0x418, 0xEC, 2, 0x878, 1, MX53_UART_PAD_CTRL) | ||
50 | #define MX53_PAD_ATA_DIOW__UART1_TXD IOMUX_PAD(0x5F0, 0x270, 3, 0x0, 0, MX53_UART_PAD_CTRL) | ||
51 | #define MX53_PAD_ATA_DMACK__UART1_RXD IOMUX_PAD(0x5F4, 0x274, 3, 0x880, 3, MX53_UART_PAD_CTRL) | ||
52 | |||
53 | /* UART2 */ | ||
54 | #define MX53_PAD_ATA_BUFFER_EN__UART2_RXD IOMUX_PAD(0x5FC, 0x27C, 3, 0x880, 3, MX53_UART_PAD_CTRL) | ||
55 | #define MX53_PAD_ATA_DMARQ__UART2_TXD IOMUX_PAD(0x5F8, 0x278, 3, 0x0, 0, MX53_UART_PAD_CTRL) | ||
56 | #define MX53_PAD_ATA_DIOR__UART2_RTS IOMUX_PAD(0x604, 0x284, 3, 0x87C, 3, MX53_UART_PAD_CTRL) | ||
57 | #define MX53_PAD_ATA_INTRQ__UART2_CTS IOMUX_PAD(0x600, 0x280, 3, 0x0, 0, MX53_UART_PAD_CTRL) | ||
58 | |||
59 | /* UART3 */ | ||
60 | #define MX53_PAD_ATA_CS_0__UART3_TXD IOMUX_PAD(0x61C, 0x29C, 4, 0x0, 0, MX53_UART_PAD_CTRL) | ||
61 | #define MX53_PAD_ATA_CS_1__UART3_RXD IOMUX_PAD(0x620, 0x2A0, 4, 0x888, 3, MX53_UART_PAD_CTRL) | ||
62 | #define MX53_PAD_ATA_DA_1__UART3_CTS IOMUX_PAD(0x614, 0x294, 4, 0x0, 0, MX53_UART_PAD_CTRL) | ||
63 | #define MX53_PAD_ATA_DA_2__UART3_RTS IOMUX_PAD(0x618, 0x298, 4, 0x884, 5, MX53_UART_PAD_CTRL) | ||
64 | |||
45 | #define MX53_PAD_GPIO_19__GPIO_4_5 IOMUX_PAD(0x348, 0x20,IOMUX_CONFIG_ALT1, 0x0, 0, NO_PAD_CTRL) | 65 | #define MX53_PAD_GPIO_19__GPIO_4_5 IOMUX_PAD(0x348, 0x20,IOMUX_CONFIG_ALT1, 0x0, 0, NO_PAD_CTRL) |
46 | #define MX53_PAD_KEY_COL0__GPIO_4_6 IOMUX_PAD(0x34C, 0x24,IOMUX_CONFIG_ALT1, 0x0, 0, NO_PAD_CTRL) | 66 | #define MX53_PAD_KEY_COL0__GPIO_4_6 IOMUX_PAD(0x34C, 0x24,IOMUX_CONFIG_ALT1, 0x0, 0, NO_PAD_CTRL) |
47 | #define MX53_PAD_KEY_ROW0__GPIO_4_7 IOMUX_PAD(0x350, 0x28,IOMUX_CONFIG_ALT1, 0x0, 0, NO_PAD_CTRL) | 67 | #define MX53_PAD_KEY_ROW0__GPIO_4_7 IOMUX_PAD(0x350, 0x28,IOMUX_CONFIG_ALT1, 0x0, 0, NO_PAD_CTRL) |
diff --git a/arch/arm/plat-mxc/include/mach/irqs.h b/arch/arm/plat-mxc/include/mach/irqs.h index 064026b5a786..58a49cc83797 100644 --- a/arch/arm/plat-mxc/include/mach/irqs.h +++ b/arch/arm/plat-mxc/include/mach/irqs.h | |||
@@ -23,7 +23,9 @@ | |||
23 | #define MXC_GPIO_IRQ_START MXC_INTERNAL_IRQS | 23 | #define MXC_GPIO_IRQ_START MXC_INTERNAL_IRQS |
24 | 24 | ||
25 | /* these are ordered by size to support multi-SoC kernels */ | 25 | /* these are ordered by size to support multi-SoC kernels */ |
26 | #if defined CONFIG_ARCH_MX2 | 26 | #if defined CONFIG_ARCH_MX53 |
27 | #define MXC_GPIO_IRQS (32 * 7) | ||
28 | #elif defined CONFIG_ARCH_MX2 | ||
27 | #define MXC_GPIO_IRQS (32 * 6) | 29 | #define MXC_GPIO_IRQS (32 * 6) |
28 | #elif defined CONFIG_ARCH_MX50 | 30 | #elif defined CONFIG_ARCH_MX50 |
29 | #define MXC_GPIO_IRQS (32 * 6) | 31 | #define MXC_GPIO_IRQS (32 * 6) |
diff --git a/arch/arm/plat-mxc/include/mach/uncompress.h b/arch/arm/plat-mxc/include/mach/uncompress.h index 5ccf3ef41d69..3a70ebf0477f 100644 --- a/arch/arm/plat-mxc/include/mach/uncompress.h +++ b/arch/arm/plat-mxc/include/mach/uncompress.h | |||
@@ -64,6 +64,7 @@ static inline void flush(void) | |||
64 | #define MX3X_UART2_BASE_ADDR 0x43F94000 | 64 | #define MX3X_UART2_BASE_ADDR 0x43F94000 |
65 | #define MX51_UART1_BASE_ADDR 0x73fbc000 | 65 | #define MX51_UART1_BASE_ADDR 0x73fbc000 |
66 | #define MX50_UART1_BASE_ADDR 0x53fbc000 | 66 | #define MX50_UART1_BASE_ADDR 0x53fbc000 |
67 | #define MX53_UART1_BASE_ADDR 0x53fbc000 | ||
67 | 68 | ||
68 | static __inline__ void __arch_decomp_setup(unsigned long arch_id) | 69 | static __inline__ void __arch_decomp_setup(unsigned long arch_id) |
69 | { | 70 | { |
@@ -106,6 +107,9 @@ static __inline__ void __arch_decomp_setup(unsigned long arch_id) | |||
106 | case MACH_TYPE_MX50_RDP: | 107 | case MACH_TYPE_MX50_RDP: |
107 | uart_base = MX50_UART1_BASE_ADDR; | 108 | uart_base = MX50_UART1_BASE_ADDR; |
108 | break; | 109 | break; |
110 | case MACH_TYPE_MX53_EVK: | ||
111 | uart_base = MX53_UART1_BASE_ADDR; | ||
112 | break; | ||
109 | default: | 113 | default: |
110 | break; | 114 | break; |
111 | } | 115 | } |