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 | |
| 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>
| -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 | } |
