diff options
| -rw-r--r-- | arch/arm/configs/mxs_defconfig | 1 | ||||
| -rw-r--r-- | arch/arm/mach-mxs/Kconfig | 17 | ||||
| -rw-r--r-- | arch/arm/mach-mxs/Makefile | 1 | ||||
| -rw-r--r-- | arch/arm/mach-mxs/clock-mx28.c | 16 | ||||
| -rw-r--r-- | arch/arm/mach-mxs/include/mach/mxs.h | 1 | ||||
| -rw-r--r-- | arch/arm/mach-mxs/include/mach/uncompress.h | 1 | ||||
| -rw-r--r-- | arch/arm/mach-mxs/mach-m28evk.c | 366 |
7 files changed, 398 insertions, 5 deletions
diff --git a/arch/arm/configs/mxs_defconfig b/arch/arm/configs/mxs_defconfig index db2cb7d180dc..6ee781bf6bf1 100644 --- a/arch/arm/configs/mxs_defconfig +++ b/arch/arm/configs/mxs_defconfig | |||
| @@ -26,6 +26,7 @@ CONFIG_MACH_MX23EVK=y | |||
| 26 | CONFIG_MACH_MX28EVK=y | 26 | CONFIG_MACH_MX28EVK=y |
| 27 | CONFIG_MACH_STMP378X_DEVB=y | 27 | CONFIG_MACH_STMP378X_DEVB=y |
| 28 | CONFIG_MACH_TX28=y | 28 | CONFIG_MACH_TX28=y |
| 29 | CONFIG_MACH_M28EVK=y | ||
| 29 | # CONFIG_ARM_THUMB is not set | 30 | # CONFIG_ARM_THUMB is not set |
| 30 | CONFIG_NO_HZ=y | 31 | CONFIG_NO_HZ=y |
| 31 | CONFIG_HIGH_RES_TIMERS=y | 32 | CONFIG_HIGH_RES_TIMERS=y |
diff --git a/arch/arm/mach-mxs/Kconfig b/arch/arm/mach-mxs/Kconfig index 4cd0231ee539..ea5ec0f3b5b1 100644 --- a/arch/arm/mach-mxs/Kconfig +++ b/arch/arm/mach-mxs/Kconfig | |||
| @@ -64,8 +64,25 @@ config MODULE_TX28 | |||
| 64 | select MXS_HAVE_PLATFORM_MXS_MMC | 64 | select MXS_HAVE_PLATFORM_MXS_MMC |
| 65 | select MXS_HAVE_PLATFORM_MXS_PWM | 65 | select MXS_HAVE_PLATFORM_MXS_PWM |
| 66 | 66 | ||
| 67 | config MODULE_M28 | ||
| 68 | bool | ||
| 69 | select SOC_IMX28 | ||
| 70 | select LEDS_GPIO_REGISTER | ||
| 71 | select MXS_HAVE_AMBA_DUART | ||
| 72 | select MXS_HAVE_PLATFORM_AUART | ||
| 73 | select MXS_HAVE_PLATFORM_FEC | ||
| 74 | select MXS_HAVE_PLATFORM_FLEXCAN | ||
| 75 | select MXS_HAVE_PLATFORM_MXS_I2C | ||
| 76 | select MXS_HAVE_PLATFORM_MXS_MMC | ||
| 77 | select MXS_HAVE_PLATFORM_MXSFB | ||
| 78 | select MXS_OCOTP | ||
| 79 | |||
| 67 | config MACH_TX28 | 80 | config MACH_TX28 |
| 68 | bool "Ka-Ro TX28 module" | 81 | bool "Ka-Ro TX28 module" |
| 69 | select MODULE_TX28 | 82 | select MODULE_TX28 |
| 70 | 83 | ||
| 84 | config MACH_M28EVK | ||
| 85 | bool "Support DENX M28EVK Platform" | ||
| 86 | select MODULE_M28 | ||
| 87 | |||
| 71 | endif | 88 | endif |
diff --git a/arch/arm/mach-mxs/Makefile b/arch/arm/mach-mxs/Makefile index 6c38262a3aaa..adcfb4e45106 100644 --- a/arch/arm/mach-mxs/Makefile +++ b/arch/arm/mach-mxs/Makefile | |||
| @@ -10,6 +10,7 @@ obj-$(CONFIG_SOC_IMX28) += clock-mx28.o mm-mx28.o | |||
| 10 | obj-$(CONFIG_MACH_STMP378X_DEVB) += mach-stmp378x_devb.o | 10 | obj-$(CONFIG_MACH_STMP378X_DEVB) += mach-stmp378x_devb.o |
| 11 | obj-$(CONFIG_MACH_MX23EVK) += mach-mx23evk.o | 11 | obj-$(CONFIG_MACH_MX23EVK) += mach-mx23evk.o |
| 12 | obj-$(CONFIG_MACH_MX28EVK) += mach-mx28evk.o | 12 | obj-$(CONFIG_MACH_MX28EVK) += mach-mx28evk.o |
| 13 | obj-$(CONFIG_MACH_M28EVK) += mach-m28evk.o | ||
| 13 | obj-$(CONFIG_MODULE_TX28) += module-tx28.o | 14 | obj-$(CONFIG_MODULE_TX28) += module-tx28.o |
| 14 | obj-$(CONFIG_MACH_TX28) += mach-tx28.o | 15 | obj-$(CONFIG_MACH_TX28) += mach-tx28.o |
| 15 | 16 | ||
diff --git a/arch/arm/mach-mxs/clock-mx28.c b/arch/arm/mach-mxs/clock-mx28.c index 5dcc59d5b9ec..31223106ad6a 100644 --- a/arch/arm/mach-mxs/clock-mx28.c +++ b/arch/arm/mach-mxs/clock-mx28.c | |||
| @@ -738,11 +738,17 @@ static int clk_misc_init(void) | |||
| 738 | __raw_writel(BM_CLKCTRL_CPU_INTERRUPT_WAIT, | 738 | __raw_writel(BM_CLKCTRL_CPU_INTERRUPT_WAIT, |
| 739 | CLKCTRL_BASE_ADDR + HW_CLKCTRL_CPU_SET); | 739 | CLKCTRL_BASE_ADDR + HW_CLKCTRL_CPU_SET); |
| 740 | 740 | ||
| 741 | /* Extra fec clock setting */ | 741 | /* |
| 742 | reg = __raw_readl(CLKCTRL_BASE_ADDR + HW_CLKCTRL_ENET); | 742 | * Extra fec clock setting |
| 743 | reg &= ~BM_CLKCTRL_ENET_SLEEP; | 743 | * The DENX M28 uses an external clock source |
| 744 | reg |= BM_CLKCTRL_ENET_CLK_OUT_EN; | 744 | * and the clock output must not be enabled |
| 745 | __raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_ENET); | 745 | */ |
| 746 | if (!machine_is_m28evk()) { | ||
| 747 | reg = __raw_readl(CLKCTRL_BASE_ADDR + HW_CLKCTRL_ENET); | ||
| 748 | reg &= ~BM_CLKCTRL_ENET_SLEEP; | ||
| 749 | reg |= BM_CLKCTRL_ENET_CLK_OUT_EN; | ||
| 750 | __raw_writel(reg, CLKCTRL_BASE_ADDR + HW_CLKCTRL_ENET); | ||
| 751 | } | ||
| 746 | 752 | ||
| 747 | /* | 753 | /* |
| 748 | * 480 MHz seems too high to be ssp clock source directly, | 754 | * 480 MHz seems too high to be ssp clock source directly, |
diff --git a/arch/arm/mach-mxs/include/mach/mxs.h b/arch/arm/mach-mxs/include/mach/mxs.h index 35a89dd27242..05823187ec03 100644 --- a/arch/arm/mach-mxs/include/mach/mxs.h +++ b/arch/arm/mach-mxs/include/mach/mxs.h | |||
| @@ -33,6 +33,7 @@ | |||
| 33 | 0) | 33 | 0) |
| 34 | #define cpu_is_mx28() ( \ | 34 | #define cpu_is_mx28() ( \ |
| 35 | machine_is_mx28evk() || \ | 35 | machine_is_mx28evk() || \ |
| 36 | machine_is_m28evk() || \ | ||
| 36 | machine_is_tx28() || \ | 37 | machine_is_tx28() || \ |
| 37 | 0) | 38 | 0) |
| 38 | 39 | ||
diff --git a/arch/arm/mach-mxs/include/mach/uncompress.h b/arch/arm/mach-mxs/include/mach/uncompress.h index 7f8bf6539646..67776746f143 100644 --- a/arch/arm/mach-mxs/include/mach/uncompress.h +++ b/arch/arm/mach-mxs/include/mach/uncompress.h | |||
| @@ -63,6 +63,7 @@ static inline void __arch_decomp_setup(unsigned long arch_id) | |||
| 63 | mxs_duart_base = MX23_DUART_BASE_ADDR; | 63 | mxs_duart_base = MX23_DUART_BASE_ADDR; |
| 64 | break; | 64 | break; |
| 65 | case MACH_TYPE_MX28EVK: | 65 | case MACH_TYPE_MX28EVK: |
| 66 | case MACH_TYPE_M28EVK: | ||
| 66 | case MACH_TYPE_TX28: | 67 | case MACH_TYPE_TX28: |
| 67 | mxs_duart_base = MX28_DUART_BASE_ADDR; | 68 | mxs_duart_base = MX28_DUART_BASE_ADDR; |
| 68 | break; | 69 | break; |
diff --git a/arch/arm/mach-mxs/mach-m28evk.c b/arch/arm/mach-mxs/mach-m28evk.c new file mode 100644 index 000000000000..3b1681e4f49a --- /dev/null +++ b/arch/arm/mach-mxs/mach-m28evk.c | |||
| @@ -0,0 +1,366 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2011 | ||
| 3 | * Stefano Babic, DENX Software Engineering, <sbabic@denx.de> | ||
| 4 | * | ||
| 5 | * based on: mach-mx28_evk.c | ||
| 6 | * Copyright 2010 Freescale Semiconductor, Inc. All Rights Reserved. | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License as published by | ||
| 10 | * the Free Software Foundation; either version 2 of the License, or | ||
| 11 | * (at your option) any later version. | ||
| 12 | * | ||
| 13 | * This program is distributed in the hope that it will be useful, | ||
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 16 | * GNU General Public License for more details. | ||
| 17 | */ | ||
| 18 | |||
| 19 | #include <linux/delay.h> | ||
| 20 | #include <linux/platform_device.h> | ||
| 21 | #include <linux/gpio.h> | ||
| 22 | #include <linux/leds.h> | ||
| 23 | #include <linux/irq.h> | ||
| 24 | #include <linux/clk.h> | ||
| 25 | #include <linux/i2c.h> | ||
| 26 | #include <linux/i2c/at24.h> | ||
| 27 | |||
| 28 | #include <asm/mach-types.h> | ||
| 29 | #include <asm/mach/arch.h> | ||
| 30 | #include <asm/mach/time.h> | ||
| 31 | |||
| 32 | #include <mach/common.h> | ||
| 33 | #include <mach/iomux-mx28.h> | ||
| 34 | |||
| 35 | #include "devices-mx28.h" | ||
| 36 | |||
| 37 | #define M28EVK_GPIO_USERLED1 MXS_GPIO_NR(3, 16) | ||
| 38 | #define M28EVK_GPIO_USERLED2 MXS_GPIO_NR(3, 17) | ||
| 39 | |||
| 40 | #define MX28EVK_BL_ENABLE MXS_GPIO_NR(3, 18) | ||
| 41 | #define M28EVK_LCD_ENABLE MXS_GPIO_NR(3, 28) | ||
| 42 | |||
| 43 | #define MX28EVK_MMC0_WRITE_PROTECT MXS_GPIO_NR(2, 12) | ||
| 44 | #define MX28EVK_MMC1_WRITE_PROTECT MXS_GPIO_NR(0, 28) | ||
| 45 | |||
| 46 | static const iomux_cfg_t m28evk_pads[] __initconst = { | ||
| 47 | /* duart */ | ||
| 48 | MX28_PAD_AUART0_CTS__DUART_RX | MXS_PAD_CTRL, | ||
| 49 | MX28_PAD_AUART0_RTS__DUART_TX | MXS_PAD_CTRL, | ||
| 50 | |||
| 51 | /* auart0 */ | ||
| 52 | MX28_PAD_AUART0_RX__AUART0_RX | MXS_PAD_CTRL, | ||
| 53 | MX28_PAD_AUART0_TX__AUART0_TX | MXS_PAD_CTRL, | ||
| 54 | |||
| 55 | /* auart3 */ | ||
| 56 | MX28_PAD_AUART3_RX__AUART3_RX | MXS_PAD_CTRL, | ||
| 57 | MX28_PAD_AUART3_TX__AUART3_TX | MXS_PAD_CTRL, | ||
| 58 | MX28_PAD_AUART3_CTS__AUART3_CTS | MXS_PAD_CTRL, | ||
| 59 | MX28_PAD_AUART3_RTS__AUART3_RTS | MXS_PAD_CTRL, | ||
| 60 | |||
| 61 | #define MXS_PAD_FEC (MXS_PAD_8MA | MXS_PAD_3V3 | MXS_PAD_PULLUP) | ||
| 62 | /* fec0 */ | ||
| 63 | MX28_PAD_ENET0_MDC__ENET0_MDC | MXS_PAD_FEC, | ||
| 64 | MX28_PAD_ENET0_MDIO__ENET0_MDIO | MXS_PAD_FEC, | ||
| 65 | MX28_PAD_ENET0_RX_EN__ENET0_RX_EN | MXS_PAD_FEC, | ||
| 66 | MX28_PAD_ENET0_RXD0__ENET0_RXD0 | MXS_PAD_FEC, | ||
| 67 | MX28_PAD_ENET0_RXD1__ENET0_RXD1 | MXS_PAD_FEC, | ||
| 68 | MX28_PAD_ENET0_TX_EN__ENET0_TX_EN | MXS_PAD_FEC, | ||
| 69 | MX28_PAD_ENET0_TXD0__ENET0_TXD0 | MXS_PAD_FEC, | ||
| 70 | MX28_PAD_ENET0_TXD1__ENET0_TXD1 | MXS_PAD_FEC, | ||
| 71 | MX28_PAD_ENET_CLK__CLKCTRL_ENET | MXS_PAD_FEC, | ||
| 72 | /* fec1 */ | ||
| 73 | MX28_PAD_ENET0_CRS__ENET1_RX_EN | MXS_PAD_FEC, | ||
| 74 | MX28_PAD_ENET0_RXD2__ENET1_RXD0 | MXS_PAD_FEC, | ||
| 75 | MX28_PAD_ENET0_RXD3__ENET1_RXD1 | MXS_PAD_FEC, | ||
| 76 | MX28_PAD_ENET0_COL__ENET1_TX_EN | MXS_PAD_FEC, | ||
| 77 | MX28_PAD_ENET0_TXD2__ENET1_TXD0 | MXS_PAD_FEC, | ||
| 78 | MX28_PAD_ENET0_TXD3__ENET1_TXD1 | MXS_PAD_FEC, | ||
| 79 | |||
