]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
ARM i.MX53: Make MX53 EVK bootable
authorYong Shen <yong.shen@linaro.org>
Tue, 4 Jan 2011 06:22:56 +0000 (14:22 +0800)
committerSascha Hauer <s.hauer@pengutronix.de>
Tue, 4 Jan 2011 11:00:23 +0000 (12:00 +0100)
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>
arch/arm/mach-mx5/Kconfig
arch/arm/mach-mx5/Makefile
arch/arm/mach-mx5/Makefile.boot
arch/arm/mach-mx5/board-mx53_evk.c [new file with mode: 0644]
arch/arm/mach-mx5/devices-imx53.h [new file with mode: 0644]
arch/arm/plat-mxc/devices/platform-imx-uart.c
arch/arm/plat-mxc/include/mach/iomux-mx53.h
arch/arm/plat-mxc/include/mach/irqs.h
arch/arm/plat-mxc/include/mach/uncompress.h

index 7c317579cde981522534f57f4b85d0cabaa5c166..55254b6e9460be654747f97f30526c33802e3525 100644 (file)
@@ -7,6 +7,9 @@ config ARCH_MX50
 config ARCH_MX51
        bool
 
 config ARCH_MX51
        bool
 
+config ARCH_MX53
+       bool
+
 config SOC_IMX50
        bool
        select MXC_TZIC
 config SOC_IMX50
        bool
        select MXC_TZIC
@@ -23,6 +26,12 @@ config       SOC_IMX51
        select ARCH_HAS_CPUFREQ
        select ARCH_MX51
 
        select ARCH_HAS_CPUFREQ
        select ARCH_MX51
 
+config SOC_IMX53
+       bool
+       select MXC_TZIC
+       select ARCH_MXC_IOMUX_V3
+       select ARCH_MX53
+
 comment "MX5 platforms:"
 
 config MACH_MX51_BABBAGE
 comment "MX5 platforms:"
 
 config MACH_MX51_BABBAGE
@@ -111,6 +120,15 @@ config MACH_MX51_EFIKAMX
          Include support for Genesi Efika MX nettop. This includes specific
          configurations for the board and its peripherals.
 
          Include support for Genesi Efika MX nettop. This includes specific
          configurations for the board and its peripherals.
 
+config MACH_MX53_EVK
+       bool "Support MX53 EVK platforms"
+       select SOC_IMX53
+       select IMX_HAVE_PLATFORM_IMX_UART
+       help
+         Include support for MX53 EVK platform. This includes specific
+         configurations for the board and its peripherals.
+
+
 config MACH_MX50_RDP
        bool "Support MX50 reference design platform"
        depends on BROKEN
 config MACH_MX50_RDP
        bool "Support MX50 reference design platform"
        depends on BROKEN
index d99d7ab3b39bbbd308f0e78747862aa582287eb9..0c398baf11fea4108357c520a18123778cc4c557 100644 (file)
@@ -9,6 +9,7 @@ obj-$(CONFIG_SOC_IMX50) += mm-mx50.o
 obj-$(CONFIG_CPU_FREQ_IMX)    += cpu_op-mx51.o
 obj-$(CONFIG_MACH_MX51_BABBAGE) += board-mx51_babbage.o
 obj-$(CONFIG_MACH_MX51_3DS) += board-mx51_3ds.o
 obj-$(CONFIG_CPU_FREQ_IMX)    += cpu_op-mx51.o
 obj-$(CONFIG_MACH_MX51_BABBAGE) += board-mx51_babbage.o
 obj-$(CONFIG_MACH_MX51_3DS) += board-mx51_3ds.o
+obj-$(CONFIG_MACH_MX53_EVK) += board-mx53_evk.o
 obj-$(CONFIG_MACH_EUKREA_CPUIMX51) += board-cpuimx51.o
 obj-$(CONFIG_MACH_EUKREA_MBIMX51_BASEBOARD) += eukrea_mbimx51-baseboard.o
 obj-$(CONFIG_MACH_EUKREA_CPUIMX51SD) += board-cpuimx51sd.o
 obj-$(CONFIG_MACH_EUKREA_CPUIMX51) += board-cpuimx51.o
 obj-$(CONFIG_MACH_EUKREA_MBIMX51_BASEBOARD) += eukrea_mbimx51-baseboard.o
 obj-$(CONFIG_MACH_EUKREA_CPUIMX51SD) += board-cpuimx51sd.o
index 854748f80cc15036e70e6bafa3c591e63307e571..e928be1b6757ed7b4ee9c17cd642a379c42e2ca1 100644 (file)
@@ -4,3 +4,6 @@ initrd_phys-$(CONFIG_ARCH_MX50) := 0x70800000
    zreladdr-$(CONFIG_ARCH_MX51)        := 0x90008000
 params_phys-$(CONFIG_ARCH_MX51)        := 0x90000100
 initrd_phys-$(CONFIG_ARCH_MX51)        := 0x90800000
    zreladdr-$(CONFIG_ARCH_MX51)        := 0x90008000
 params_phys-$(CONFIG_ARCH_MX51)        := 0x90000100
 initrd_phys-$(CONFIG_ARCH_MX51)        := 0x90800000
+   zreladdr-$(CONFIG_ARCH_MX53)        := 0x70008000
+params_phys-$(CONFIG_ARCH_MX53)        := 0x70000100
+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 (file)
index 0000000..fa97d0d
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ * Copyright (C) 2010 Yong Shen. <Yong.Shen@linaro.org>
+ */
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include <linux/init.h>
+#include <linux/clk.h>
+#include <mach/common.h>
+#include <mach/hardware.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/time.h>
+#include <mach/imx-uart.h>
+#include <mach/iomux-mx53.h>
+
+#include "crm_regs.h"
+#include "devices-imx53.h"
+
+static iomux_v3_cfg_t mx53_evk_pads[] = {
+       MX53_PAD_CSI0_D10__UART1_TXD,
+       MX53_PAD_CSI0_D11__UART1_RXD,
+       MX53_PAD_ATA_DIOW__UART1_TXD,
+       MX53_PAD_ATA_DMACK__UART1_RXD,
+
+       MX53_PAD_ATA_BUFFER_EN__UART2_RXD,
+       MX53_PAD_ATA_DMARQ__UART2_TXD,
+       MX53_PAD_ATA_DIOR__UART2_RTS,
+       MX53_PAD_ATA_INTRQ__UART2_CTS,
+
+       MX53_PAD_ATA_CS_0__UART3_TXD,
+       MX53_PAD_ATA_CS_1__UART3_RXD,
+       MX53_PAD_ATA_DA_1__UART3_CTS,
+       MX53_PAD_ATA_DA_2__UART3_RTS,
+};
+
+static const struct imxuart_platform_data mx53_evk_uart_pdata __initconst = {
+       .flags = IMXUART_HAVE_RTSCTS,
+};
+
+static inline void mx53_evk_init_uart(void)
+{
+       imx53_add_imx_uart(0, &mx53_evk_uart_pdata);
+       imx53_add_imx_uart(1, &mx53_evk_uart_pdata);
+       imx53_add_imx_uart(2, &mx53_evk_uart_pdata);
+}
+
+static void __init mx53_evk_board_init(void)
+{
+       mxc_iomux_v3_setup_multiple_pads(mx53_evk_pads,
+                                       ARRAY_SIZE(mx53_evk_pads));
+       mx53_evk_init_uart();
+}
+
+static void __init mx53_evk_timer_init(void)
+{
+       mx53_clocks_init(32768, 24000000, 22579200, 0);
+}
+
+static struct sys_timer mx53_evk_timer = {
+       .init   = mx53_evk_timer_init,
+};
+
+MACHINE_START(MX53_EVK, "Freescale MX53 EVK Board")
+       .map_io = mx53_map_io,
+       .init_irq = mx53_init_irq,
+       .init_machine = mx53_evk_board_init,
+       .timer = &mx53_evk_timer,
+MACHINE_END
diff --git a/arch/arm/mach-mx5/devices-imx53.h b/arch/arm/mach-mx5/devices-imx53.h
new file mode 100644 (file)
index 0000000..9d0ec25
--- /dev/null
@@ -0,0 +1,13 @@
+/*
+ * Copyright (C) 2010 Yong Shen. <Yong.Shen@linaro.org>
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation.
+ */
+#include <mach/mx53.h>
+#include <mach/devices-common.h>
+
+extern const struct imx_imx_uart_1irq_data imx53_imx_uart_data[] __initconst;
+#define imx53_add_imx_uart(id, pdata)  \
+       imx_add_imx_uart_1irq(&imx53_imx_uart_data[id], pdata)
index 0c69fbcae46ab7fc717202eab06569b228c1ad90..3c854c2cc6ddc8be9c3ca4b28847937f684f1fc1 100644 (file)
@@ -116,6 +116,16 @@ const struct imx_imx_uart_1irq_data imx51_imx_uart_data[] __initconst = {
 };
 #endif /* ifdef CONFIG_SOC_IMX51 */
 
 };
 #endif /* ifdef CONFIG_SOC_IMX51 */
 
+#ifdef CONFIG_SOC_IMX53
+const struct imx_imx_uart_1irq_data imx53_imx_uart_data[] __initconst = {
+#define imx53_imx_uart_data_entry(_id, _hwid)                          \
+       imx_imx_uart_1irq_data_entry(MX53, _id, _hwid, SZ_4K)
+       imx53_imx_uart_data_entry(0, 1),
+       imx53_imx_uart_data_entry(1, 2),
+       imx53_imx_uart_data_entry(2, 3),
+};
+#endif /* ifdef CONFIG_SOC_IMX53 */
+
 struct platform_device *__init imx_add_imx_uart_3irq(
                const struct imx_imx_uart_3irq_data *data,
                const struct imxuart_platform_data *pdata)
 struct platform_device *__init imx_add_imx_uart_3irq(
                const struct imx_imx_uart_3irq_data *data,
                const struct imxuart_platform_data *pdata)
index 80cb3c587f92a85fc9c04cf50820d07515388814..5deee019c29e7d17024be9cd4d6e5ee344deee90 100644 (file)
@@ -42,6 +42,26 @@ typedef enum iomux_config {
 #define NON_MUX_I      0x00
 #define NON_PAD_I      0x00
 
 #define NON_MUX_I      0x00
 #define NON_PAD_I      0x00
 
+#define MX53_UART_PAD_CTRL             (PAD_CTL_PKE | PAD_CTL_PUE |    \
+               PAD_CTL_DSE_HIGH | PAD_CTL_SRE_FAST | PAD_CTL_HYS)
+/* UART1 */
+#define MX53_PAD_CSI0_D10__UART1_TXD   IOMUX_PAD(0x414, 0xE8, 2, 0x0, 0, MX53_UART_PAD_CTRL)
+#define MX53_PAD_CSI0_D11__UART1_RXD   IOMUX_PAD(0x418, 0xEC, 2, 0x878, 1, MX53_UART_PAD_CTRL)
+#define MX53_PAD_ATA_DIOW__UART1_TXD   IOMUX_PAD(0x5F0, 0x270, 3, 0x0, 0, MX53_UART_PAD_CTRL)
+#define MX53_PAD_ATA_DMACK__UART1_RXD  IOMUX_PAD(0x5F4, 0x274, 3, 0x880, 3, MX53_UART_PAD_CTRL)
+
+/* UART2 */
+#define MX53_PAD_ATA_BUFFER_EN__UART2_RXD      IOMUX_PAD(0x5FC, 0x27C, 3, 0x880, 3, MX53_UART_PAD_CTRL)
+#define MX53_PAD_ATA_DMARQ__UART2_TXD  IOMUX_PAD(0x5F8, 0x278, 3, 0x0, 0, MX53_UART_PAD_CTRL)
+#define MX53_PAD_ATA_DIOR__UART2_RTS   IOMUX_PAD(0x604, 0x284, 3, 0x87C, 3, MX53_UART_PAD_CTRL)
+#define MX53_PAD_ATA_INTRQ__UART2_CTS  IOMUX_PAD(0x600, 0x280, 3, 0x0, 0, MX53_UART_PAD_CTRL)
+
+/* UART3 */
+#define MX53_PAD_ATA_CS_0__UART3_TXD   IOMUX_PAD(0x61C, 0x29C, 4, 0x0, 0, MX53_UART_PAD_CTRL)
+#define MX53_PAD_ATA_CS_1__UART3_RXD   IOMUX_PAD(0x620, 0x2A0, 4, 0x888, 3, MX53_UART_PAD_CTRL)
+#define MX53_PAD_ATA_DA_1__UART3_CTS   IOMUX_PAD(0x614, 0x294, 4, 0x0, 0, MX53_UART_PAD_CTRL)
+#define MX53_PAD_ATA_DA_2__UART3_RTS   IOMUX_PAD(0x618, 0x298, 4, 0x884, 5, MX53_UART_PAD_CTRL)
+
 #define MX53_PAD_GPIO_19__GPIO_4_5             IOMUX_PAD(0x348, 0x20,IOMUX_CONFIG_ALT1, 0x0, 0, NO_PAD_CTRL)
 #define MX53_PAD_KEY_COL0__GPIO_4_6            IOMUX_PAD(0x34C, 0x24,IOMUX_CONFIG_ALT1, 0x0, 0, NO_PAD_CTRL)
 #define MX53_PAD_KEY_ROW0__GPIO_4_7            IOMUX_PAD(0x350, 0x28,IOMUX_CONFIG_ALT1, 0x0, 0, NO_PAD_CTRL)
 #define MX53_PAD_GPIO_19__GPIO_4_5             IOMUX_PAD(0x348, 0x20,IOMUX_CONFIG_ALT1, 0x0, 0, NO_PAD_CTRL)
 #define MX53_PAD_KEY_COL0__GPIO_4_6            IOMUX_PAD(0x34C, 0x24,IOMUX_CONFIG_ALT1, 0x0, 0, NO_PAD_CTRL)
 #define MX53_PAD_KEY_ROW0__GPIO_4_7            IOMUX_PAD(0x350, 0x28,IOMUX_CONFIG_ALT1, 0x0, 0, NO_PAD_CTRL)
index 064026b5a78653005cc219b1fb1803828af7eebb..58a49cc83797216c7e7fb1a4306f4dff1fc22ca0 100644 (file)
@@ -23,7 +23,9 @@
 #define MXC_GPIO_IRQ_START     MXC_INTERNAL_IRQS
 
 /* these are ordered by size to support multi-SoC kernels */
 #define MXC_GPIO_IRQ_START     MXC_INTERNAL_IRQS
 
 /* these are ordered by size to support multi-SoC kernels */
-#if defined CONFIG_ARCH_MX2
+#if defined CONFIG_ARCH_MX53
+#define MXC_GPIO_IRQS          (32 * 7)
+#elif defined CONFIG_ARCH_MX2
 #define MXC_GPIO_IRQS          (32 * 6)
 #elif defined CONFIG_ARCH_MX50
 #define MXC_GPIO_IRQS          (32 * 6)
 #define MXC_GPIO_IRQS          (32 * 6)
 #elif defined CONFIG_ARCH_MX50
 #define MXC_GPIO_IRQS          (32 * 6)
index 5ccf3ef41d69f2fe938f371ed050deb8498734e2..3a70ebf0477f45e2d20bf9732e41ee8829d3afea 100644 (file)
@@ -64,6 +64,7 @@ static inline void flush(void)
 #define MX3X_UART2_BASE_ADDR   0x43F94000
 #define MX51_UART1_BASE_ADDR   0x73fbc000
 #define MX50_UART1_BASE_ADDR   0x53fbc000
 #define MX3X_UART2_BASE_ADDR   0x43F94000
 #define MX51_UART1_BASE_ADDR   0x73fbc000
 #define MX50_UART1_BASE_ADDR   0x53fbc000
+#define MX53_UART1_BASE_ADDR   0x53fbc000
 
 static __inline__ void __arch_decomp_setup(unsigned long arch_id)
 {
 
 static __inline__ void __arch_decomp_setup(unsigned long arch_id)
 {
@@ -106,6 +107,9 @@ static __inline__ void __arch_decomp_setup(unsigned long arch_id)
        case MACH_TYPE_MX50_RDP:
                uart_base = MX50_UART1_BASE_ADDR;
                break;
        case MACH_TYPE_MX50_RDP:
                uart_base = MX50_UART1_BASE_ADDR;
                break;
+       case MACH_TYPE_MX53_EVK:
+               uart_base = MX53_UART1_BASE_ADDR;
+               break;
        default:
                break;
        }
        default:
                break;
        }