diff options
Diffstat (limited to 'arch/arm/mach-imx')
98 files changed, 891 insertions, 3183 deletions
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index 0a2349dc701..ba44328464f 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -5,6 +5,7 @@ config ARCH_MXC  	select AUTO_ZRELADDR if !ZBOOT_ROM  	select CLKDEV_LOOKUP  	select CLKSRC_MMIO +	select GENERIC_ALLOCATOR  	select GENERIC_CLOCKEVENTS  	select GENERIC_IRQ_CHIP  	select MULTI_IRQ_HANDLER @@ -61,9 +62,8 @@ config MXC_ULPI  config ARCH_HAS_RNGA  	bool -config IRAM_ALLOC +config HAVE_IMX_ANATOP  	bool -	select GENERIC_ALLOCATOR  config HAVE_IMX_GPC  	bool @@ -73,6 +73,7 @@ config HAVE_IMX_MMDC  config HAVE_IMX_SRC  	def_bool y if SMP +	select ARCH_HAS_RESET_CONTROLLER  config IMX_HAVE_IOMUX_V1  	bool @@ -83,27 +84,12 @@ config ARCH_MXC_IOMUX_V3  config ARCH_MX1  	bool -config MACH_MX21 -	bool -  config ARCH_MX25  	bool  config MACH_MX27  	bool -config ARCH_MX5 -	bool - -config ARCH_MX50 -	bool - -config ARCH_MX51 -	bool - -config ARCH_MX53 -	bool -  config SOC_IMX1  	bool  	select ARCH_MX1 @@ -117,7 +103,6 @@ config SOC_IMX21  	select COMMON_CLK  	select CPU_ARM926T  	select IMX_HAVE_IOMUX_V1 -	select MACH_MX21  	select MXC_AVIC  config SOC_IMX25 @@ -131,6 +116,8 @@ config SOC_IMX25  config SOC_IMX27  	bool +	select ARCH_HAS_CPUFREQ +	select ARCH_HAS_OPP  	select COMMON_CLK  	select CPU_ARM926T  	select IMX_HAVE_IOMUX_V1 @@ -158,21 +145,15 @@ config SOC_IMX35  config SOC_IMX5  	bool  	select ARCH_HAS_CPUFREQ -	select ARCH_MX5 +	select ARCH_HAS_OPP  	select ARCH_MXC_IOMUX_V3  	select COMMON_CLK  	select CPU_V7  	select MXC_TZIC -config SOC_IMX50 -	bool -	select ARCH_MX50 -	select SOC_IMX5 -  config	SOC_IMX51  	bool -	select ARCH_MX5 -	select ARCH_MX51 +	select HAVE_IMX_SRC  	select PINCTRL  	select PINCTRL_IMX51  	select SOC_IMX5 @@ -488,9 +469,7 @@ config MACH_MX31ADS_WM1133_EV1  	bool "Support Wolfson Microelectronics 1133-EV1 module"  	depends on MACH_MX31ADS  	depends on MFD_WM8350_I2C -	depends on REGULATOR_WM8350 -	select MFD_WM8350_CONFIG_MODE_0 -	select MFD_WM8352_CONFIG_MODE_0 +	depends on REGULATOR_WM8350 = y  	help  	  Include support for the Wolfson Microelectronics 1133-EV1 PMU  	  and audio module for the MX31ADS platform. @@ -738,25 +717,10 @@ endif  if ARCH_MULTI_V7 -comment "i.MX5 platforms:" - -config MACH_MX50_RDP -	bool "Support MX50 reference design platform" -	depends on BROKEN -	select IMX_HAVE_PLATFORM_IMX_I2C -	select IMX_HAVE_PLATFORM_IMX_UART -	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX -	select IMX_HAVE_PLATFORM_SPI_IMX -	select SOC_IMX50 -	help -	  Include support for MX50 reference design platform (RDP) board. This -	  includes specific configurations for the board and its peripherals. -  comment "i.MX51 machines:"  config MACH_IMX51_DT  	bool "Support i.MX51 platforms from device tree" -	select MACH_MX51_BABBAGE  	select SOC_IMX51  	help  	  Include support for Freescale i.MX51 based platforms @@ -777,19 +741,6 @@ config MACH_MX51_BABBAGE  	  u-boot. This includes specific configurations for the board and its  	  peripherals. -config MACH_MX51_3DS -	bool "Support MX51PDK (3DS)" -	select IMX_HAVE_PLATFORM_IMX2_WDT -	select IMX_HAVE_PLATFORM_IMX_KEYPAD -	select IMX_HAVE_PLATFORM_IMX_UART -	select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX -	select IMX_HAVE_PLATFORM_SPI_IMX -	select MXC_DEBUG_BOARD -	select SOC_IMX51 -	help -	  Include support for MX51PDK (3DS) platform. This includes specific -	  configurations for the board and its peripherals. -  config MACH_EUKREA_CPUIMX51SD  	bool "Support Eukrea CPUIMX51SD module"  	select IMX_HAVE_PLATFORM_FSL_USB2_UDC @@ -825,9 +776,8 @@ comment "Device tree only"  config	SOC_IMX53  	bool "i.MX53 support" -	select ARCH_MX5 -	select ARCH_MX53  	select HAVE_CAN_FLEXCAN if CAN +	select HAVE_IMX_SRC  	select IMX_HAVE_PLATFORM_IMX2_WDT  	select PINCTRL  	select PINCTRL_IMX53 @@ -837,7 +787,7 @@ config	SOC_IMX53  	  This enables support for Freescale i.MX53 processor.  config SOC_IMX6Q -	bool "i.MX6 Quad support" +	bool "i.MX6 Quad/DualLite support"  	select ARCH_HAS_CPUFREQ  	select ARCH_HAS_OPP  	select ARM_CPU_SUSPEND if PM @@ -847,8 +797,10 @@ config SOC_IMX6Q  	select ARM_GIC  	select COMMON_CLK  	select CPU_V7 -	select HAVE_ARM_SCU +	select HAVE_ARM_SCU if SMP +	select HAVE_ARM_TWD if LOCAL_TIMERS  	select HAVE_CAN_FLEXCAN if CAN +	select HAVE_IMX_ANATOP  	select HAVE_IMX_GPC  	select HAVE_IMX_MMDC  	select HAVE_IMX_SRC diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile index 0634b3152c2..70ae7c490ac 100644 --- a/arch/arm/mach-imx/Makefile +++ b/arch/arm/mach-imx/Makefile @@ -12,7 +12,7 @@ obj-$(CONFIG_SOC_IMX31) += mm-imx3.o cpu-imx31.o clk-imx31.o iomux-imx31.o ehci-  obj-$(CONFIG_SOC_IMX35) += mm-imx3.o cpu-imx35.o clk-imx35.o ehci-imx35.o pm-imx3.o  imx5-pm-$(CONFIG_PM) += pm-imx5.o -obj-$(CONFIG_SOC_IMX5) += cpu-imx5.o mm-imx5.o clk-imx51-imx53.o ehci-imx5.o $(imx5-pm-y) cpu_op-mx51.o +obj-$(CONFIG_SOC_IMX5) += cpu-imx5.o mm-imx5.o clk-imx51-imx53.o ehci-imx5.o $(imx5-pm-y)  obj-$(CONFIG_COMMON_CLK) += clk-pllv1.o clk-pllv2.o clk-pllv3.o clk-gate2.o \  			    clk-pfd.o clk-busy.o clk.o @@ -23,12 +23,14 @@ obj-$(CONFIG_ARCH_MXC_IOMUX_V3) += iomux-v3.o  obj-$(CONFIG_MXC_TZIC) += tzic.o  obj-$(CONFIG_MXC_AVIC) += avic.o -obj-$(CONFIG_IRAM_ALLOC) += iram_alloc.o  obj-$(CONFIG_MXC_ULPI) += ulpi.o  obj-$(CONFIG_MXC_USE_EPIT) += epit.o  obj-$(CONFIG_MXC_DEBUG_BOARD) += 3ds_debugboard.o -obj-$(CONFIG_CPU_FREQ_IMX)    += cpufreq.o -obj-$(CONFIG_CPU_IDLE) += cpuidle.o + +ifeq ($(CONFIG_CPU_IDLE),y) +obj-$(CONFIG_SOC_IMX5) += cpuidle-imx5.o +obj-$(CONFIG_SOC_IMX6Q) += cpuidle-imx6q.o +endif  ifdef CONFIG_SND_IMX_SOC  obj-y += ssi-fiq.o @@ -88,7 +90,7 @@ obj-$(CONFIG_MACH_EUKREA_CPUIMX35SD) += mach-cpuimx35.o  obj-$(CONFIG_MACH_EUKREA_MBIMXSD35_BASEBOARD) += eukrea_mbimxsd35-baseboard.o  obj-$(CONFIG_MACH_VPR200) += mach-vpr200.o -obj-$(CONFIG_DEBUG_LL) += lluart.o +obj-$(CONFIG_HAVE_IMX_ANATOP) += anatop.o  obj-$(CONFIG_HAVE_IMX_GPC) += gpc.o  obj-$(CONFIG_HAVE_IMX_MMDC) += mmdc.o  obj-$(CONFIG_HAVE_IMX_SRC) += src.o @@ -103,10 +105,8 @@ endif  # i.MX5 based machines  obj-$(CONFIG_MACH_MX51_BABBAGE) += mach-mx51_babbage.o -obj-$(CONFIG_MACH_MX51_3DS) += mach-mx51_3ds.o  obj-$(CONFIG_MACH_EUKREA_CPUIMX51SD) += mach-cpuimx51sd.o  obj-$(CONFIG_MACH_EUKREA_MBIMXSD51_BASEBOARD) += eukrea_mbimxsd51-baseboard.o -obj-$(CONFIG_MACH_MX50_RDP) += mach-mx50_rdp.o  obj-$(CONFIG_MACH_IMX51_DT) += imx51-dt.o  obj-$(CONFIG_SOC_IMX53) += mach-imx53.o diff --git a/arch/arm/mach-imx/Makefile.boot b/arch/arm/mach-imx/Makefile.boot deleted file mode 100644 index b27815de847..00000000000 --- a/arch/arm/mach-imx/Makefile.boot +++ /dev/null @@ -1,39 +0,0 @@ -zreladdr-$(CONFIG_SOC_IMX1)	+= 0x08008000 -params_phys-$(CONFIG_SOC_IMX1)	:= 0x08000100 -initrd_phys-$(CONFIG_SOC_IMX1)	:= 0x08800000 - -zreladdr-$(CONFIG_SOC_IMX21)	+= 0xC0008000 -params_phys-$(CONFIG_SOC_IMX21)	:= 0xC0000100 -initrd_phys-$(CONFIG_SOC_IMX21)	:= 0xC0800000 - -zreladdr-$(CONFIG_SOC_IMX25)	+= 0x80008000 -params_phys-$(CONFIG_SOC_IMX25)	:= 0x80000100 -initrd_phys-$(CONFIG_SOC_IMX25)	:= 0x80800000 - -zreladdr-$(CONFIG_SOC_IMX27)	+= 0xA0008000 -params_phys-$(CONFIG_SOC_IMX27)	:= 0xA0000100 -initrd_phys-$(CONFIG_SOC_IMX27)	:= 0xA0800000 - -zreladdr-$(CONFIG_SOC_IMX31)	+= 0x80008000 -params_phys-$(CONFIG_SOC_IMX31)	:= 0x80000100 -initrd_phys-$(CONFIG_SOC_IMX31)	:= 0x80800000 - -zreladdr-$(CONFIG_SOC_IMX35)	+= 0x80008000 -params_phys-$(CONFIG_SOC_IMX35)	:= 0x80000100 -initrd_phys-$(CONFIG_SOC_IMX35)	:= 0x80800000 - -zreladdr-$(CONFIG_SOC_IMX50)	+= 0x70008000 -params_phys-$(CONFIG_SOC_IMX50)	:= 0x70000100 -initrd_phys-$(CONFIG_SOC_IMX50)	:= 0x70800000 - -zreladdr-$(CONFIG_SOC_IMX51)	+= 0x90008000 -params_phys-$(CONFIG_SOC_IMX51)	:= 0x90000100 -initrd_phys-$(CONFIG_SOC_IMX51)	:= 0x90800000 - -zreladdr-$(CONFIG_SOC_IMX53)	+= 0x70008000 -params_phys-$(CONFIG_SOC_IMX53)	:= 0x70000100 -initrd_phys-$(CONFIG_SOC_IMX53)	:= 0x70800000 - -zreladdr-$(CONFIG_SOC_IMX6Q)	+= 0x10008000 -params_phys-$(CONFIG_SOC_IMX6Q)	:= 0x10000100 -initrd_phys-$(CONFIG_SOC_IMX6Q)	:= 0x10800000 diff --git a/arch/arm/mach-imx/anatop.c b/arch/arm/mach-imx/anatop.c new file mode 100644 index 00000000000..0cfa07dd9aa --- /dev/null +++ b/arch/arm/mach-imx/anatop.c @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2013 Freescale Semiconductor, Inc. + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +#include <linux/err.h> +#include <linux/io.h> +#include <linux/of.h> +#include <linux/of_address.h> +#include <linux/mfd/syscon.h> +#include <linux/regmap.h> +#include "common.h" + +#define REG_SET		0x4 +#define REG_CLR		0x8 + +#define ANADIG_REG_2P5		0x130 +#define ANADIG_REG_CORE		0x140 +#define ANADIG_ANA_MISC0	0x150 +#define ANADIG_USB1_CHRG_DETECT	0x1b0 +#define ANADIG_USB2_CHRG_DETECT	0x210 +#define ANADIG_DIGPROG		0x260 + +#define BM_ANADIG_REG_2P5_ENABLE_WEAK_LINREG	0x40000 +#define BM_ANADIG_REG_CORE_FET_ODRIVE		0x20000000 +#define BM_ANADIG_ANA_MISC0_STOP_MODE_CONFIG	0x1000 +#define BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B	0x80000 +#define BM_ANADIG_USB_CHRG_DETECT_EN_B		0x100000 + +static struct regmap *anatop; + +static void imx_anatop_enable_weak2p5(bool enable) +{ +	u32 reg, val; + +	regmap_read(anatop, ANADIG_ANA_MISC0, &val); + +	/* can only be enabled when stop_mode_config is clear. */ +	reg = ANADIG_REG_2P5; +	reg += (enable && (val & BM_ANADIG_ANA_MISC0_STOP_MODE_CONFIG) == 0) ? +		REG_SET : REG_CLR; +	regmap_write(anatop, reg, BM_ANADIG_REG_2P5_ENABLE_WEAK_LINREG); +} + +static void imx_anatop_enable_fet_odrive(bool enable) +{ +	regmap_write(anatop, ANADIG_REG_CORE + (enable ? REG_SET : REG_CLR), +		BM_ANADIG_REG_CORE_FET_ODRIVE); +} + +void imx_anatop_pre_suspend(void) +{ +	imx_anatop_enable_weak2p5(true); +	imx_anatop_enable_fet_odrive(true); +} + +void imx_anatop_post_resume(void) +{ +	imx_anatop_enable_fet_odrive(false); +	imx_anatop_enable_weak2p5(false); +} + +void imx_anatop_usb_chrg_detect_disable(void) +{ +	regmap_write(anatop, ANADIG_USB1_CHRG_DETECT, +		BM_ANADIG_USB_CHRG_DETECT_EN_B +		| BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B); +	regmap_write(anatop, ANADIG_USB2_CHRG_DETECT, +		BM_ANADIG_USB_CHRG_DETECT_EN_B | +		BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B); +} + +u32 imx_anatop_get_digprog(void) +{ +	struct device_node *np; +	void __iomem *anatop_base; +	static u32 digprog; + +	if (digprog) +		return digprog; + +	np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-anatop"); +	anatop_base = of_iomap(np, 0); +	WARN_ON(!anatop_base); +	digprog = readl_relaxed(anatop_base + ANADIG_DIGPROG); + +	return digprog; +} + +void __init imx_anatop_init(void) +{ +	anatop = syscon_regmap_lookup_by_compatible("fsl,imx6q-anatop"); +	if (IS_ERR(anatop)) { +		pr_err("%s: failed to find imx6q-anatop regmap!\n", __func__); +		return; +	} +} diff --git a/arch/arm/mach-imx/avic.c b/arch/arm/mach-imx/avic.c index 0eff23ed92b..e163ec7a844 100644 --- a/arch/arm/mach-imx/avic.c +++ b/arch/arm/mach-imx/avic.c @@ -51,11 +51,9 @@  #define AVIC_NUM_IRQS 64 -void __iomem *avic_base; +static void __iomem *avic_base;  static struct irq_domain *domain; -static u32 avic_saved_mask_reg[2]; -  #ifdef CONFIG_MXC_IRQ_PRIOR  static int avic_irq_set_priority(unsigned char irq, unsigned char prio)  { @@ -113,6 +111,8 @@ static struct mxc_extra_irq avic_extra_irq = {  };  #ifdef CONFIG_PM +static u32 avic_saved_mask_reg[2]; +  static void avic_irq_suspend(struct irq_data *d)  {  	struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); diff --git a/arch/arm/mach-imx/clk-busy.c b/arch/arm/mach-imx/clk-busy.c index 1ab91b5209e..4bb1bc419b7 100644 --- a/arch/arm/mach-imx/clk-busy.c +++ b/arch/arm/mach-imx/clk-busy.c @@ -147,7 +147,7 @@ static int clk_busy_mux_set_parent(struct clk_hw *hw, u8 index)  	return ret;  } -struct clk_ops clk_busy_mux_ops = { +static struct clk_ops clk_busy_mux_ops = {  	.get_parent = clk_busy_mux_get_parent,  	.set_parent = clk_busy_mux_set_parent,  }; @@ -169,7 +169,7 @@ struct clk *imx_clk_busy_mux(const char *name, void __iomem *reg, u8 shift,  	busy->mux.reg = reg;  	busy->mux.shift = shift; -	busy->mux.width = width; +	busy->mux.mask = BIT(width) - 1;  	busy->mux.lock = &imx_ccm_lock;  	busy->mux_ops = &clk_mux_ops; diff --git a/arch/arm/mach-imx/clk-gate2.c b/arch/arm/mach-imx/clk-gate2.c index cc49c7ae186..a63e415609a 100644 --- a/arch/arm/mach-imx/clk-gate2.c +++ b/arch/arm/mach-imx/clk-gate2.c @@ -15,6 +15,7 @@  #include <linux/io.h>  #include <linux/err.h>  #include <linux/string.h> +#include "clk.h"  /**   * DOC: basic gatable clock which can gate and ungate it's ouput diff --git a/arch/arm/mach-imx/clk-imx25.c b/arch/arm/mach-imx/clk-imx25.c index 2c570cdaae7..69858c78f40 100644 --- a/arch/arm/mach-imx/clk-imx25.c +++ b/arch/arm/mach-imx/clk-imx25.c @@ -224,6 +224,9 @@ static int __init __mx25_clocks_init(unsigned long osc_rate)  	clk_prepare_enable(clk[emi_ahb]); +	/* Clock source for gpt must be derived from AHB */ +	clk_set_parent(clk[per5_sel], clk[ahb]); +  	clk_register_clkdev(clk[ipg], "ipg", "imx-gpt.0");  	clk_register_clkdev(clk[gpt_ipg_per], "per", "imx-gpt.0"); diff --git a/arch/arm/mach-imx/clk-imx27.c b/arch/arm/mach-imx/clk-imx27.c index 1ffe3b534e5..c3cfa4116dc 100644 --- a/arch/arm/mach-imx/clk-imx27.c +++ b/arch/arm/mach-imx/clk-imx27.c @@ -62,7 +62,7 @@ static const char *clko_sel_clks[] = {  	"32k", "usb_div", "dptc",  }; -static const char *ssi_sel_clks[] = { "spll", "mpll", }; +static const char *ssi_sel_clks[] = { "spll_gate", "mpll", };  enum mx27_clks {  	dummy, ckih, ckil, mpll, spll, mpll_main2, ahb, ipg, nfc_div, per1_div, @@ -82,14 +82,16 @@ enum mx27_clks {  	csi_ahb_gate, brom_ahb_gate, ata_ahb_gate, wdog_ipg_gate, usb_ipg_gate,  	uart6_ipg_gate, uart5_ipg_gate, uart4_ipg_gate, uart3_ipg_gate,  	uart2_ipg_gate, uart1_ipg_gate, ckih_div1p5, fpm, mpll_osc_sel, -	mpll_sel, clk_max +	mpll_sel, spll_gate, clk_max  };  static struct clk *clk[clk_max]; +static struct clk_onecell_data clk_data;  int __init mx27_clocks_init(unsigned long fref)  {  	int i; +	struct device_node *np;  	clk[dummy] = imx_clk_fixed("dummy", 0);  	clk[ckih] = imx_clk_fixed("ckih", fref); @@ -104,6 +106,7 @@ int __init mx27_clocks_init(unsigned long fref)  			ARRAY_SIZE(mpll_sel_clks));  	clk[mpll] = imx_clk_pllv1("mpll", "mpll_sel", CCM_MPCTL0);  	clk[spll] = imx_clk_pllv1("spll", "ckih", CCM_SPCTL0); +	clk[spll_gate] = imx_clk_gate("spll_gate", "spll", CCM_CSCR, 1);  	clk[mpll_main2] = imx_clk_fixed_factor("mpll_main2", "mpll", 2, 3);  	if (mx27_revision() >= IMX_CHIP_REVISION_2_0) { @@ -121,7 +124,7 @@ int __init mx27_clocks_init(unsigned long fref)  	clk[per4_div] = imx_clk_divider("per4_div", "mpll_main2", CCM_PCDR1, 24, 6);  	clk[vpu_sel] = imx_clk_mux("vpu_sel", CCM_CSCR, 21, 1, vpu_sel_clks, ARRAY_SIZE(vpu_sel_clks));  	clk[vpu_div] = imx_clk_divider("vpu_div", "vpu_sel", CCM_PCDR0, 10, 6); -	clk[usb_div] = imx_clk_divider("usb_div", "spll", CCM_CSCR, 28, 3); +	clk[usb_div] = imx_clk_divider("usb_div", "spll_gate", CCM_CSCR, 28, 3);  	clk[cpu_sel] = imx_clk_mux("cpu_sel", CCM_CSCR, 15, 1, cpu_sel_clks, ARRAY_SIZE(cpu_sel_clks));  	clk[clko_sel] = imx_clk_mux("clko_sel", CCM_CCSR, 0, 5, clko_sel_clks, ARRAY_SIZE(clko_sel_clks));  	if (mx27_revision() >= IMX_CHIP_REVISION_2_0) @@ -197,6 +200,13 @@ int __init mx27_clocks_init(unsigned long fref)  			pr_err("i.MX27 clk %d: register failed with %ld\n",  				i, PTR_ERR(clk[i])); +	np = of_find_compatible_node(NULL, NULL, "fsl,imx27-ccm"); +	if (np) { +		clk_data.clks = clk; +		clk_data.clk_num = ARRAY_SIZE(clk); +		of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); +	} +  	clk_register_clkdev(clk[uart1_ipg_gate], "ipg", "imx21-uart.0");  	clk_register_clkdev(clk[per1_gate], "per", "imx21-uart.0");  	clk_register_clkdev(clk[uart2_ipg_gate], "ipg", "imx21-uart.1"); @@ -228,9 +238,12 @@ int __init mx27_clocks_init(unsigned long fref)  	clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "imx21-mmc.1");  	clk_register_clkdev(clk[per2_gate], "per", "imx21-mmc.2");  	clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "imx21-mmc.2"); -	clk_register_clkdev(clk[cspi1_ipg_gate], NULL, "imx27-cspi.0"); -	clk_register_clkdev(clk[cspi2_ipg_gate], NULL, "imx27-cspi.1"); -	clk_register_clkdev(clk[cspi3_ipg_gate], NULL, "imx27-cspi.2"); +	clk_register_clkdev(clk[per2_gate], "per", "imx27-cspi.0"); +	clk_register_clkdev(clk[cspi1_ipg_gate], "ipg", "imx27-cspi.0"); +	clk_register_clkdev(clk[per2_gate], "per", "imx27-cspi.1"); +	clk_register_clkdev(clk[cspi2_ipg_gate], "ipg", "imx27-cspi.1"); +	clk_register_clkdev(clk[per2_gate], "per", "imx27-cspi.2"); +	clk_register_clkdev(clk[cspi3_ipg_gate], "ipg", "imx27-cspi.2");  	clk_register_clkdev(clk[per3_gate], "per", "imx21-fb.0");  	clk_register_clkdev(clk[lcdc_ipg_gate], "ipg", "imx21-fb.0");  	clk_register_clkdev(clk[lcdc_ahb_gate], "ahb", "imx21-fb.0"); @@ -272,10 +285,8 @@ int __init mx27_clocks_init(unsigned long fref)  	clk_register_clkdev(clk[ata_ahb_gate], "ata", NULL);  	clk_register_clkdev(clk[rtc_ipg_gate], NULL, "imx21-rtc");  	clk_register_clkdev(clk[scc_ipg_gate], "scc", NULL); -	clk_register_clkdev(clk[cpu_div], "cpu", NULL); +	clk_register_clkdev(clk[cpu_div], NULL, "cpufreq-cpu0.0");  	clk_register_clkdev(clk[emi_ahb_gate], "emi_ahb" , NULL); -	clk_register_clkdev(clk[ssi1_baud_gate], "bitrate" , "imx-ssi.0"); -	clk_register_clkdev(clk[ssi2_baud_gate], "bitrate" , "imx-ssi.1");  	mxc_timer_init(MX27_IO_ADDRESS(MX27_GPT1_BASE_ADDR), MX27_INT_GPT1); diff --git a/arch/arm/mach-imx/clk-imx31.c b/arch/arm/mach-imx/clk-imx31.c index 16ccbd41dea..b5b65f3efaf 100644 --- a/arch/arm/mach-imx/clk-imx31.c +++ b/arch/arm/mach-imx/clk-imx31.c @@ -34,8 +34,8 @@ static const char *csi_sel[] = { "upll", "spll", };  static const char *fir_sel[] = { "mcu_main", "upll", "spll" };  enum mx31_clks { -	ckih, ckil, mpll, spll, upll, mcu_main, hsp, ahb, nfc, ipg, per_div, -	per, csi, fir, csi_div, usb_div_pre, usb_div_post, fir_div_pre, +	dummy, ckih, ckil, mpll, spll, upll, mcu_main, hsp, ahb, nfc, ipg, +	per_div, per, csi, fir, csi_div, usb_div_pre, usb_div_post, fir_div_pre,  	fir_div_post, sdhc1_gate, sdhc2_gate, gpt_gate, epit1_gate, epit2_gate,  	iim_gate, ata_gate, sdma_gate, cspi3_gate, rng_gate, uart1_gate,  	uart2_gate, ssi1_gate, i2c1_gate, i2c2_gate, i2c3_gate, hantro_gate, @@ -46,12 +46,15 @@ enum mx31_clks {  };  static struct clk *clk[clk_max]; +static struct clk_onecell_data clk_data;  int __init mx31_clocks_init(unsigned long fref)  {  	void __iomem *base = MX31_IO_ADDRESS(MX31_CCM_BASE_ADDR);  	int i; +	struct device_node *np; +	clk[dummy] = imx_clk_fixed("dummy", 0);  	clk[ckih] = imx_clk_fixed("ckih", fref);  	clk[ckil] = imx_clk_fixed("ckil", 32768);  	clk[mpll] = imx_clk_pllv1("mpll", "ckih", base + MXC_CCM_MPCTL); @@ -116,6 +119,14 @@ int __init mx31_clocks_init(unsigned long fref)  			pr_err("imx31 clk %d: register failed with %ld\n",  				i, PTR_ERR(clk[i])); +	np = of_find_compatible_node(NULL, NULL, "fsl,imx31-ccm"); + +	if (np) { +		clk_data.clks = clk; +		clk_data.clk_num = ARRAY_SIZE(clk); +		of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); +	} +  	clk_register_clkdev(clk[gpt_gate], "per", "imx-gpt.0");  	clk_register_clkdev(clk[ipg], "ipg", "imx-gpt.0");  	clk_register_clkdev(clk[cspi1_gate], NULL, "imx31-cspi.0"); diff --git a/arch/arm/mach-imx/clk-imx35.c b/arch/arm/mach-imx/clk-imx35.c index f0727e80815..2193c834f55 100644 --- a/arch/arm/mach-imx/clk-imx35.c +++ b/arch/arm/mach-imx/clk-imx35.c @@ -67,13 +67,13 @@ enum mx35_clks {  static struct clk *clk[clk_max]; -int __init mx35_clocks_init() +int __init mx35_clocks_init(void)  {  	void __iomem *base = MX35_IO_ADDRESS(MX35_CCM_BASE_ADDR);  	u32 pdr0, consumer_sel, hsp_sel;  	struct arm_ahb_div *aad;  	unsigned char *hsp_div; -	int i; +	u32 i;  	pdr0 = __raw_readl(base + MXC_CCM_PDR0);  	consumer_sel = (pdr0 >> 16) & 0xf; @@ -257,6 +257,7 @@ int __init mx35_clocks_init()  	clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0");  	clk_register_clkdev(clk[nfc_div], NULL, "imx25-nand.0");  	clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0"); +	clk_register_clkdev(clk[admux_gate], "audmux", NULL);  	clk_prepare_enable(clk[spba_gate]);  	clk_prepare_enable(clk[gpio1_gate]); @@ -264,6 +265,8 @@ int __init mx35_clocks_init()  	clk_prepare_enable(clk[gpio3_gate]);  	clk_prepare_enable(clk[iim_gate]);  	clk_prepare_enable(clk[emi_gate]); +	clk_prepare_enable(clk[max_gate]); +	clk_prepare_enable(clk[iomuxc_gate]);  	/*  	 * SCC is needed to boot via mmc after a watchdog reset. The clock code diff --git a/arch/arm/mach-imx/clk-imx51-imx53.c b/arch/arm/mach-imx/clk-imx51-imx53.c index fb7cb841b64..6fc486b6a3c 100644 --- a/arch/arm/mach-imx/clk-imx51-imx53.c +++ b/arch/arm/mach-imx/clk-imx51-imx53.c @@ -45,16 +45,40 @@ static const char *mx53_ipu_di1_sel[] = { "di_pred", "osc", "ckih1", "tve_di", "  static const char *mx53_ldb_di1_sel[] = { "pll3_sw", "pll4_sw", };  static const char *mx51_tve_ext_sel[] = { "osc", "ckih1", };  static const char *mx53_tve_ext_sel[] = { "pll4_sw", "ckih1", }; -static const char *tve_sel[] = { "tve_pred", "tve_ext_sel", }; +static const char *mx51_tve_sel[] = { "tve_pred", "tve_ext_sel", };  static const char *ipu_sel[] = { "axi_a", "axi_b", "emi_slow_gate", "ahb", }; +static const char *gpu3d_sel[] = { "axi_a", "axi_b", "emi_slow_gate", "ahb" }; +static const char *gpu2d_sel[] = { "axi_a", "axi_b", "emi_slow_gate", "ahb" };  static const char *vpu_sel[] = { "axi_a", "axi_b", "emi_slow_gate", "ahb", };  static const char *mx53_can_sel[] = { "ipg", "ckih1", "ckih2", "lp_apm", }; +static const char *mx53_cko1_sel[] = { +	"cpu_podf", "pll1_sw", "pll2_sw", "pll3_sw", +	"emi_slow_podf", "pll4_sw", "nfc_podf", "dummy", +	"di_pred", "dummy", "dummy", "ahb", +	"ipg", "per_root", "ckil", "dummy",}; +static const char *mx53_cko2_sel[] = { +	"dummy"/* dptc_core */, "dummy"/* dptc_perich */, +	"dummy", "esdhc_a_podf", +	"usboh3_podf", "dummy"/* wrck_clk_root */, +	"ecspi_podf", "dummy"/* pll1_ref_clk */, +	"esdhc_b_podf", "dummy"/* ddr_clk_root */, +	"dummy"/* arm_axi_clk_root */, "dummy"/* usb_phy_out */, +	"vpu_sel", "ipu_sel", +	"osc", "ckih1", +	"dummy", "esdhc_c_sel", +	"ssi1_root_podf", "ssi2_root_podf", +	"dummy", "dummy", +	"dummy"/* lpsr_clk_root */, "dummy"/* pgc_clk_root */, +	"dummy"/* tve_out */, "usb_phy_sel", +	"tve_sel", "lp_apm", +	"uart_root", "dummy"/* spdif0_clk_root */, +	"dummy", "dummy", };  enum imx5_clks {  	dummy, ckil, osc, ckih1, ckih2, ahb, ipg, axi_a, axi_b, uart_pred,  	uart_root, esdhc_a_pred, esdhc_b_pred, esdhc_c_s, esdhc_d_s,  	emi_sel, emi_slow_podf, nfc_podf, ecspi_pred, ecspi_podf, usboh3_pred, -	usboh3_podf, usb_phy_pred, usb_phy_podf, cpu_podf, di_pred, tve_di, +	usboh3_podf, usb_phy_pred, usb_phy_podf, cpu_podf, di_pred, tve_di_unused,  	tve_s, uart1_ipg_gate, uart1_per_gate, uart2_ipg_gate,  	uart2_per_gate, uart3_ipg_gate, uart3_per_gate, i2c1_gate, i2c2_gate,  	gpt_ipg_gate, pwm1_ipg_gate, pwm1_hf_gate, pwm2_ipg_gate, pwm2_hf_gate, @@ -83,6 +107,10 @@ enum imx5_clks {  	ssi2_root_gate, ssi3_root_gate, ssi_ext1_gate, ssi_ext2_gate,  	epit1_ipg_gate, epit1_hf_gate, epit2_ipg_gate, epit2_hf_gate,  	can_sel, can1_serial_gate, can1_ipg_gate, +	owire_gate, gpu3d_s, gpu2d_s, gpu3d_gate, gpu2d_gate, garb_gate, +	cko1_sel, cko1_podf, cko1, +	cko2_sel, cko2_podf, cko2, +	srtc_gate, pata_gate,  	clk_max  }; @@ -159,8 +187,6 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil,  				usb_phy_sel_str, ARRAY_SIZE(usb_phy_sel_str));  	clk[cpu_podf] = imx_clk_divider("cpu_podf", "pll1_sw", MXC_CCM_CACRR, 0, 3);  	clk[di_pred] = imx_clk_divider("di_pred", "pll3_sw", MXC_CCM_CDCDR, 6, 3); -	clk[tve_di] = imx_clk_fixed("tve_di", 65000000); /* FIXME */ -	clk[tve_s] = imx_clk_mux("tve_sel", MXC_CCM_CSCMR1, 7, 1, tve_sel, ARRAY_SIZE(tve_sel));  	clk[iim_gate] = imx_clk_gate2("iim_gate", "ipg", MXC_CCM_CCGR0, 30);  	clk[uart1_ipg_gate] = imx_clk_gate2("uart1_ipg_gate", "ipg", MXC_CCM_CCGR1, 6);  	clk[uart1_per_gate] = imx_clk_gate2("uart1_per_gate", "uart_root", MXC_CCM_CCGR1, 8); @@ -199,6 +225,11 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil,  	clk[nfc_gate] = imx_clk_gate2("nfc_gate", "nfc_podf", MXC_CCM_CCGR5, 20);  	clk[ipu_di0_gate] = imx_clk_gate2("ipu_di0_gate", "ipu_di0_sel", MXC_CCM_CCGR6, 10);  	clk[ipu_di1_gate] = imx_clk_gate2("ipu_di1_gate", "ipu_di1_sel", MXC_CCM_CCGR6, 12); +	clk[gpu3d_s] = imx_clk_mux("gpu3d_sel", MXC_CCM_CBCMR, 4, 2, gpu3d_sel, ARRAY_SIZE(gpu3d_sel)); +	clk[gpu2d_s] = imx_clk_mux("gpu2d_sel", MXC_CCM_CBCMR, 16, 2, gpu2d_sel, ARRAY_SIZE(gpu2d_sel)); +	clk[gpu3d_gate] = imx_clk_gate2("gpu3d_gate", "gpu3d_sel", MXC_CCM_CCGR5, 2); +	clk[garb_gate] = imx_clk_gate2("garb_gate", "axi_a", MXC_CCM_CCGR5, 4); +	clk[gpu2d_gate] = imx_clk_gate2("gpu2d_gate", "gpu2d_sel", MXC_CCM_CCGR6, 14);  	clk[vpu_s] = imx_clk_mux("vpu_sel", MXC_CCM_CBCMR, 14, 2, vpu_sel, ARRAY_SIZE(vpu_sel));  	clk[vpu_gate] = imx_clk_gate2("vpu_gate", "vpu_sel", MXC_CCM_CCGR5, 6);  	clk[vpu_reference_gate] = imx_clk_gate2("vpu_reference_gate", "osc", MXC_CCM_CCGR5, 8); @@ -233,12 +264,15 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil,  	clk[epit1_hf_gate] = imx_clk_gate2("epit1_hf_gate", "per_root", MXC_CCM_CCGR2, 4);  	clk[epit2_ipg_gate] = imx_clk_gate2("epit2_ipg_gate", "ipg", MXC_CCM_CCGR2, 6);  	clk[epit2_hf_gate] = imx_clk_gate2("epit2_hf_gate", "per_root", MXC_CCM_CCGR2, 8); +	clk[owire_gate] = imx_clk_gate2("owire_gate", "per_root", MXC_CCM_CCGR2, 22); +	clk[srtc_gate] = imx_clk_gate2("srtc_gate", "per_root", MXC_CCM_CCGR4, 28); +	clk[pata_gate] = imx_clk_gate2("pata_gate", "ipg", MXC_CCM_CCGR4, 0);  	for (i = 0; i < ARRAY_SIZE(clk); i++)  		if (IS_ERR(clk[i]))  			pr_err("i.MX5 clk %d: register failed with %ld\n",  				i, PTR_ERR(clk[i])); -	 +  	clk_register_clkdev(clk[gpt_hf_gate], "per", "imx-gpt.0");  	clk_register_clkdev(clk[gpt_ipg_gate], "ipg", "imx-gpt.0");  	clk_register_clkdev(clk[uart1_per_gate], "per", "imx21-uart.0"); @@ -279,12 +313,11 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil,  	clk_register_clkdev(clk[ssi_ext1_gate], "ssi_ext1", NULL);  	clk_register_clkdev(clk[ssi_ext2_gate], "ssi_ext2", NULL);  	clk_register_clkdev(clk[sdma_gate], NULL, "imx35-sdma"); -	clk_register_clkdev(clk[cpu_podf], "cpu", NULL); +	clk_register_clkdev(clk[cpu_podf], NULL, "cpufreq-cpu0.0");  	clk_register_clkdev(clk[iim_gate], "iim", NULL);  	clk_register_clkdev(clk[dummy], NULL, "imx2-wdt.0");  	clk_register_clkdev(clk[dummy], NULL, "imx2-wdt.1");  	clk_register_clkdev(clk[dummy], NULL, "imx-keypad"); -	clk_register_clkdev(clk[tve_gate], NULL, "imx-tve.0");  	clk_register_clkdev(clk[ipu_di1_gate], "di1", "imx-tve.0");  	clk_register_clkdev(clk[gpc_dvfs], "gpc_dvfs", NULL);  	clk_register_clkdev(clk[epit1_ipg_gate], "ipg", "imx-epit.0"); @@ -329,8 +362,10 @@ int __init mx51_clocks_init(unsigned long rate_ckil, unsigned long rate_osc,  				mx51_ipu_di0_sel, ARRAY_SIZE(mx51_ipu_di0_sel));  	clk[ipu_di1_sel] = imx_clk_mux("ipu_di1_sel", MXC_CCM_CSCMR2, 29, 3,  				mx51_ipu_di1_sel, ARRAY_SIZE(mx51_ipu_di1_sel)); -	clk[tve_ext_sel] = imx_clk_mux("tve_ext_sel", MXC_CCM_CSCMR1, 6, 1, -				mx51_tve_ext_sel, ARRAY_SIZE(mx51_tve_ext_sel)); +	clk[tve_ext_sel] = imx_clk_mux_flags("tve_ext_sel", MXC_CCM_CSCMR1, 6, 1, +				mx51_tve_ext_sel, ARRAY_SIZE(mx51_tve_ext_sel), CLK_SET_RATE_PARENT); +	clk[tve_s] = imx_clk_mux("tve_sel", MXC_CCM_CSCMR1, 7, 1, +				mx51_tve_sel, ARRAY_SIZE(mx51_tve_sel));  	clk[tve_gate] = imx_clk_gate2("tve_gate", "tve_sel", MXC_CCM_CCGR2, 30);  	clk[tve_pred] = imx_clk_divider("tve_pred", "pll3_sw", MXC_CCM_CDCDR, 28, 3);  	clk[esdhc1_per_gate] = imx_clk_gate2("esdhc1_per_gate", "esdhc_a_podf", MXC_CCM_CCGR3, 2); @@ -360,9 +395,6 @@ int __init mx51_clocks_init(unsigned long rate_ckil, unsigned long rate_osc,  	clk_register_clkdev(clk[mx51_mipi], "mipi_hsp", NULL);  	clk_register_clkdev(clk[vpu_gate], NULL, "imx51-vpu.0");  	clk_register_clkdev(clk[fec_gate], NULL, "imx27-fec.0"); -	clk_register_clkdev(clk[ipu_gate], "bus", "40000000.ipu"); -	clk_register_clkdev(clk[ipu_di0_gate], "di0", "40000000.ipu"); -	clk_register_clkdev(clk[ipu_di1_gate], "di1", "40000000.ipu");  	clk_register_clkdev(clk[usb_phy_gate], "phy", "mxc-ehci.0");  	clk_register_clkdev(clk[esdhc1_ipg_gate], "ipg", "sdhci-esdhc-imx51.0");  	clk_register_clkdev(clk[dummy], "ahb", "sdhci-esdhc-imx51.0"); @@ -421,23 +453,23 @@ int __init mx53_clocks_init(unsigned long rate_ckil, unsigned long rate_osc,  	clk[pll3_sw] = imx_clk_pllv2("pll3_sw", "osc", MX53_DPLL3_BASE);  	clk[pll4_sw] = imx_clk_pllv2("pll4_sw", "osc", MX53_DPLL4_BASE); -	clk[ldb_di1_sel] = imx_clk_mux("ldb_di1_sel", MXC_CCM_CSCMR2, 9, 1, -				mx53_ldb_di1_sel, ARRAY_SIZE(mx53_ldb_di1_sel));  	clk[ldb_di1_div_3_5] = imx_clk_fixed_factor("ldb_di1_div_3_5", "ldb_di1_sel", 2, 7); -	clk[ldb_di1_div] = imx_clk_divider("ldb_di1_div", "ldb_di1_div_3_5", MXC_CCM_CSCMR2, 11, 1); +	clk[ldb_di1_div] = imx_clk_divider_flags("ldb_di1_div", "ldb_di1_div_3_5", MXC_CCM_CSCMR2, 11, 1, 0); +	clk[ldb_di1_sel] = imx_clk_mux_flags("ldb_di1_sel", MXC_CCM_CSCMR2, 9, 1, +				mx53_ldb_di1_sel, ARRAY_SIZE(mx53_ldb_di1_sel), CLK_SET_RATE_PARENT);  	clk[di_pll4_podf] = imx_clk_divider("di_pll4_podf", "pll4_sw", MXC_CCM_CDCDR, 16, 3); -	clk[ldb_di0_sel] = imx_clk_mux("ldb_di0_sel", MXC_CCM_CSCMR2, 8, 1, -				mx53_ldb_di0_sel, ARRAY_SIZE(mx53_ldb_di0_sel));  	clk[ldb_di0_div_3_5] = imx_clk_fixed_factor("ldb_di0_div_3_5", "ldb_di0_sel", 2, 7); -	clk[ldb_di0_div] = imx_clk_divider("ldb_di0_div", "ldb_di0_div_3_5", MXC_CCM_CSCMR2, 10, 1); +	clk[ldb_di0_div] = imx_clk_divider_flags("ldb_di0_div", "ldb_di0_div_3_5", MXC_CCM_CSCMR2, 10, 1, 0); +	clk[ldb_di0_sel] = imx_clk_mux_flags("ldb_di0_sel", MXC_CCM_CSCMR2, 8, 1, +				mx53_ldb_di0_sel, ARRAY_SIZE(mx53_ldb_di0_sel), CLK_SET_RATE_PARENT);  	clk[ldb_di0_gate] = imx_clk_gate2("ldb_di0_gate", "ldb_di0_div", MXC_CCM_CCGR6, 28);  	clk[ldb_di1_gate] = imx_clk_gate2("ldb_di1_gate", "ldb_di1_div", MXC_CCM_CCGR6, 30);  	clk[ipu_di0_sel] = imx_clk_mux("ipu_di0_sel", MXC_CCM_CSCMR2, 26, 3,  				mx53_ipu_di0_sel, ARRAY_SIZE(mx53_ipu_di0_sel));  	clk[ipu_di1_sel] = imx_clk_mux("ipu_di1_sel", MXC_CCM_CSCMR2, 29, 3,  				mx53_ipu_di1_sel, ARRAY_SIZE(mx53_ipu_di1_sel)); -	clk[tve_ext_sel] = imx_clk_mux("tve_ext_sel", MXC_CCM_CSCMR1, 6, 1, -				mx53_tve_ext_sel, ARRAY_SIZE(mx53_tve_ext_sel)); +	clk[tve_ext_sel] = imx_clk_mux_flags("tve_ext_sel", MXC_CCM_CSCMR1, 6, 1, +				mx53_tve_ext_sel, ARRAY_SIZE(mx53_tve_ext_sel), CLK_SET_RATE_PARENT);  	clk[tve_gate] = imx_clk_gate2("tve_gate", "tve_pred", MXC_CCM_CCGR2, 30);  	clk[tve_pred] = imx_clk_divider("tve_pred", "tve_ext_sel", MXC_CCM_CDCDR, 28, 3);  	clk[esdhc1_per_gate] = imx_clk_gate2("esdhc1_per_gate", "esdhc_a_podf", MXC_CCM_CCGR3, 2); @@ -454,6 +486,16 @@ int __init mx53_clocks_init(unsigned long rate_ckil, unsigned long rate_osc,  	clk[can2_ipg_gate] = imx_clk_gate2("can2_ipg_gate", "ipg", MXC_CCM_CCGR4, 6);  	clk[i2c3_gate] = imx_clk_gate2("i2c3_gate", "per_root", MXC_CCM_CCGR1, 22); +	clk[cko1_sel] = imx_clk_mux("cko1_sel", MXC_CCM_CCOSR, 0, 4, +				mx53_cko1_sel, ARRAY_SIZE(mx53_cko1_sel)); +	clk[cko1_podf] = imx_clk_divider("cko1_podf", "cko1_sel", MXC_CCM_CCOSR, 4, 3); +	clk[cko1] = imx_clk_gate2("cko1", "cko1_podf", MXC_CCM_CCOSR, 7); + +	clk[cko2_sel] = imx_clk_mux("cko2_sel", MXC_CCM_CCOSR, 16, 5, +				mx53_cko2_sel, ARRAY_SIZE(mx53_cko2_sel)); +	clk[cko2_podf] = imx_clk_divider("cko2_podf", "cko2_sel", MXC_CCM_CCOSR, 21, 3); +	clk[cko2] = imx_clk_gate2("cko2", "cko2_podf", MXC_CCM_CCOSR, 24); +  	for (i = 0; i < ARRAY_SIZE(clk); i++)  		if (IS_ERR(clk[i]))  			pr_err("i.MX53 clk %d: register failed with %ld\n", @@ -469,10 +511,6 @@ int __init mx53_clocks_init(unsigned long rate_ckil, unsigned long rate_osc,  	clk_register_clkdev(clk[vpu_gate], NULL, "imx53-vpu.0");  	clk_register_clkdev(clk[i2c3_gate], NULL, "imx21-i2c.2");  	clk_register_clkdev(clk[fec_gate], NULL, "imx25-fec.0"); -	clk_register_clkdev(clk[ipu_gate], "bus", "18000000.ipu"); -	clk_register_clkdev(clk[ipu_di0_gate], "di0", "18000000.ipu"); -	clk_register_clkdev(clk[ipu_di1_gate], "di1", "18000000.ipu"); -	clk_register_clkdev(clk[ipu_gate], "hsp", "18000000.ipu");  	clk_register_clkdev(clk[usb_phy1_gate], "usb_phy1", "mxc-ehci.0");  	clk_register_clkdev(clk[esdhc1_ipg_gate], "ipg", "sdhci-esdhc-imx53.0");  	clk_register_clkdev(clk[dummy], "ahb", "sdhci-esdhc-imx53.0"); diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index c0c4e723b7f..15125900308 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c @@ -1,5 +1,5 @@  /* - * Copyright 2011 Freescale Semiconductor, Inc. + * Copyright 2011-2013 Freescale Semiconductor, Inc.   * Copyright 2011 Linaro Ltd.   *   * The code contained herein is licensed under the GNU General Public @@ -14,6 +14,7 @@  #include <linux/types.h>  #include <linux/clk.h>  #include <linux/clkdev.h> +#include <linux/delay.h>  #include <linux/err.h>  #include <linux/io.h>  #include <linux/of.h> @@ -22,6 +23,12 @@  #include "clk.h"  #include "common.h" +#include "hardware.h" + +#define CCR				0x0 +#define BM_CCR_WB_COUNT			(0x7 << 16) +#define BM_CCR_RBC_BYPASS_COUNT		(0x3f << 21) +#define BM_CCR_RBC_EN			(0x1 << 27)  #define CCGR0				0x68  #define CCGR1				0x6c @@ -54,9 +61,79 @@  #define BM_CLPCR_MASK_SCU_IDLE		(0x1 << 26)  #define BM_CLPCR_MASK_L2CC_IDLE		(0x1 << 27) +#define CGPR				0x64 +#define BM_CGPR_CHICKEN_BIT		(0x1 << 17) +  static void __iomem *ccm_base; -void __init imx6q_clock_map_io(void) { } +void imx6q_set_chicken_bit(void) +{ +	u32 val = readl_relaxed(ccm_base + CGPR); + +	val |= BM_CGPR_CHICKEN_BIT; +	writel_relaxed(val, ccm_base + CGPR); +} + +static void imx6q_enable_rbc(bool enable) +{ +	u32 val; +	static bool last_rbc_mode; + +	if (last_rbc_mode == enable) +		return; +	/* +	 * need to mask all interrupts in GPC before +	 * operating RBC configurations +	 */ +	imx_gpc_mask_all(); + +	/* configure RBC enable bit */ +	val = readl_relaxed(ccm_base + CCR); +	val &= ~BM_CCR_RBC_EN; +	val |= enable ? BM_CCR_RBC_EN : 0; +	writel_relaxed(val, ccm_base + CCR); + +	/* configure RBC count */ +	val = readl_relaxed(ccm_base + CCR); +	val &= ~BM_CCR_RBC_BYPASS_COUNT; +	val |= enable ? BM_CCR_RBC_BYPASS_COUNT : 0; +	writel(val, ccm_base + CCR); + +	/* +	 * need to delay at least 2 cycles of CKIL(32K) +	 * due to hardware design requirement, which is +	 * ~61us, here we use 65us for safe +	 */ +	udelay(65); + +	/* restore GPC interrupt mask settings */ +	imx_gpc_restore_all(); + +	last_rbc_mode = enable; +} + +static void imx6q_enable_wb(bool enable) +{ +	u32 val; +	static bool last_wb_mode; + +	if (last_wb_mode == enable) +		return; + +	/* configure well bias enable bit */ +	val = readl_relaxed(ccm_base + CLPCR); +	val &= ~BM_CLPCR_WB_PER_AT_LPM; +	val |= enable ? BM_CLPCR_WB_PER_AT_LPM : 0; +	writel_relaxed(val, ccm_base + CLPCR); + +	/* configure well bias count */ +	val = readl_relaxed(ccm_base + CCR); +	val &= ~BM_CCR_WB_COUNT; +	val |= enable ? BM_CCR_WB_COUNT : 0; +	writel_relaxed(val, ccm_base + CCR); + +	last_wb_mode = enable; +}  int imx6q_set_lpm(enum mxc_cpu_pwr_mode mode)  { @@ -65,9 +142,12 @@ int imx6q_set_lpm(enum mxc_cpu_pwr_mode mode)  	val &= ~BM_CLPCR_LPM;  	switch (mode) {  	case WAIT_CLOCKED: +		imx6q_enable_wb(false); +		imx6q_enable_rbc(false);  		break;  	case WAIT_UNCLOCKED:  		val |= 0x1 << BP_CLPCR_LPM; +		val |= BM_CLPCR_ARM_CLK_DIS_ON_LPM;  		break;  	case STOP_POWER_ON:  		val |= 0x2 << BP_CLPCR_LPM; @@ -82,6 +162,8 @@ int imx6q_set_lpm(enum mxc_cpu_pwr_mode mode)  		val |= 0x3 << BP_CLPCR_STBY_COUNT;  		val |= BM_CLPCR_VSTBY;  		val |= BM_CLPCR_SBYOS; +		imx6q_enable_wb(true); +		imx6q_enable_rbc(true);  		break;  	default:  		return -EINVAL; @@ -99,29 +181,29 @@ static const char *periph_clk2_sels[]	= { "pll3_usb_otg", "osc", };  static const char *periph_sels[]	= { "periph_pre", "periph_clk2", };  static const char *periph2_sels[]	= { "periph2_pre", "periph2_clk2", };  static const char *axi_sels[]		= { "periph", "pll2_pfd2_396m", "pll3_pfd1_540m", }; -static const char *audio_sels[]	= { "pll4_audio", "pll3_pfd2_508m", "pll3_pfd3_454m", "pll3_usb_otg", }; +static const char *audio_sels[]	= { "pll4_post_div", "pll3_pfd2_508m", "pll3_pfd3_454m", "pll3_usb_otg", };  static const char *gpu_axi_sels[]	= { "axi", "ahb", };  static const char *gpu2d_core_sels[]	= { "axi", "pll3_usb_otg", "pll2_pfd0_352m", "pll2_pfd2_396m", };  static const char *gpu3d_core_sels[]	= { "mmdc_ch0_axi", "pll3_usb_otg", "pll2_pfd1_594m", "pll2_pfd2_396m", };  static const char *gpu3d_shader_sels[] = { "mmdc_ch0_axi", "pll3_usb_otg", "pll2_pfd1_594m", "pll2_pfd9_720m", };  static const char *ipu_sels[]		= { "mmdc_ch0_axi", "pll2_pfd2_396m", "pll3_120m", "pll3_pfd1_540m", }; -static const char *ldb_di_sels[]	= { "pll5_video", "pll2_pfd0_352m", "pll2_pfd2_396m", "mmdc_ch1_axi", "pll3_pfd1_540m", }; -static const char *ipu_di_pre_sels[]	= { "mmdc_ch0_axi", "pll3_usb_otg", "pll5_video", "pll2_pfd0_352m", "pll2_pfd2_396m", "pll3_pfd1_540m", }; +static const char *ldb_di_sels[]	= { "pll5_video", "pll2_pfd0_352m", "pll2_pfd2_396m", "mmdc_ch1_axi", "pll3_usb_otg", }; +static const char *ipu_di_pre_sels[]	= { "mmdc_ch0_axi", "pll3_usb_otg", "pll5_video_div", "pll2_pfd0_352m", "pll2_pfd2_396m", "pll3_pfd1_540m", };  static const char *ipu1_di0_sels[]	= { "ipu1_di0_pre", "dummy", "dummy", "ldb_di0", "ldb_di1", };  static const char *ipu1_di1_sels[]	= { "ipu1_di1_pre", "dummy", "dummy", "ldb_di0", "ldb_di1", };  static const char *ipu2_di0_sels[]	= { "ipu2_di0_pre", "dummy", "dummy", "ldb_di0", "ldb_di1", };  static const char *ipu2_di1_sels[]	= { "ipu2_di1_pre", "dummy", "dummy", "ldb_di0", "ldb_di1", };  static const char *hsi_tx_sels[]	= { "pll3_120m", "pll2_pfd2_396m", };  static const char *pcie_axi_sels[]	= { "axi", "ahb", }; -static const char *ssi_sels[]		= { "pll3_pfd2_508m", "pll3_pfd3_454m", "pll4_audio", }; +static const char *ssi_sels[]		= { "pll3_pfd2_508m", "pll3_pfd3_454m", "pll4_post_div", };  static const char *usdhc_sels[]	= { "pll2_pfd2_396m", "pll2_pfd0_352m", };  static const char *enfc_sels[]	= { "pll2_pfd0_352m", "pll2_bus", "pll3_usb_otg", "pll2_pfd2_396m", };  static const char *emi_sels[]		= { "axi", "pll3_usb_otg", "pll2_pfd2_396m", "pll2_pfd0_352m", };  static const char *vdo_axi_sels[]	= { "axi", "ahb", };  static const char *vpu_axi_sels[]	= { "axi", "pll2_pfd2_396m", "pll2_pfd0_352m", }; -static const char *cko1_sels[]	= { "pll3_usb_otg", "pll2_bus", "pll1_sys", "pll5_video", +static const char *cko1_sels[]	= { "pll3_usb_otg", "pll2_bus", "pll1_sys", "pll5_video_div",  				    "dummy", "axi", "enfc", "ipu1_di0", "ipu1_di1", "ipu2_di0", -				    "ipu2_di1", "ahb", "ipg", "ipg_per", "ckil", "pll4_audio", }; +				    "ipu2_di1", "ahb", "ipg", "ipg_per", "ckil", "pll4_post_div", };  enum mx6q_clks {  	dummy, ckil, ckih, osc, pll2_pfd0_352m, pll2_pfd1_594m, pll2_pfd2_396m, @@ -154,15 +236,15 @@ enum mx6q_clks {  	usdhc4, vdo_axi, vpu_axi, cko1, pll1_sys, pll2_bus, pll3_usb_otg,  	pll4_audio, pll5_video, pll8_mlb, pll7_usb_host, pll6_enet, ssi1_ipg,  	ssi2_ipg, ssi3_ipg, rom, usbphy1, usbphy2, ldb_di0_div_3_5, ldb_di1_div_3_5, -	sata_ref, sata_ref_100m, pcie_ref, pcie_ref_125m, enet_ref, -	clk_max +	sata_ref, sata_ref_100m, pcie_ref, pcie_ref_125m, enet_ref, usbphy1_gate, +	usbphy2_gate, pll4_post_div, pll5_post_div, pll5_video_div, clk_max  };  static struct clk *clk[clk_max];  static struct clk_onecell_data clk_data;  static enum mx6q_clks const clks_init_on[] __initconst = { -	mmdc_ch0_axi, rom, +	mmdc_ch0_axi, rom, pll1_sys,  };  static struct clk_div_table clk_enet_ref_table[] = { @@ -172,6 +254,21 @@ static struct clk_div_table clk_enet_ref_table[] = {  	{ .val = 3, .div = 4, },  }; +static struct clk_div_table post_div_table[] = { +	{ .val = 2, .div = 1, }, +	{ .val = 1, .div = 2, }, +	{ .val = 0, .div = 4, }, +	{ } +}; + +static struct clk_div_table video_div_table[] = { +	{ .val = 0, .div = 1, }, +	{ .val = 1, .div = 2, }, +	{ .val = 2, .div = 1, }, +	{ .val = 3, .div = 4, }, +	{ } +}; +  int __init mx6q_clocks_init(void)  {  	struct device_node *np; @@ -198,6 +295,14 @@ int __init mx6q_clocks_init(void)  	base = of_iomap(np, 0);  	WARN_ON(!base); +	/* Audio/video PLL post dividers do not work on i.MX6q revision 1.0 */ +	if (cpu_is_imx6q() && imx6q_revision() == IMX_CHIP_REVISION_1_0) { +		post_div_table[1].div = 1; +		post_div_table[2].div = 1; +		video_div_table[1].div = 1; +		video_div_table[2].div = 1; +	}; +  	/*                   type                               name         parent_name  base     div_mask */  	clk[pll1_sys]      = imx_clk_pllv3(IMX_PLLV3_SYS,	"pll1_sys",	"osc", base,        0x7f);  	clk[pll2_bus]      = imx_clk_pllv3(IMX_PLLV3_GENERIC,	"pll2_bus",	"osc", base + 0x30, 0x1); @@ -208,8 +313,21 @@ int __init mx6q_clocks_init(void)  	clk[pll7_usb_host] = imx_clk_pllv3(IMX_PLLV3_USB,	"pll7_usb_host","osc", base + 0x20, 0x3);  	clk[pll8_mlb]      = imx_clk_pllv3(IMX_PLLV3_MLB,	"pll8_mlb",	"osc", base + 0xd0, 0x0); -	clk[usbphy1] = imx_clk_gate("usbphy1", "pll3_usb_otg", base + 0x10, 6); -	clk[usbphy2] = imx_clk_gate("usbphy2", "pll7_usb_host", base + 0x20, 6); +	/* +	 * Bit 20 is the reserved and read-only bit, we do this only for: +	 * - Do nothing for usbphy clk_enable/disable +	 * - Keep refcount when do usbphy clk_enable/disable, in that case, +	 * the clk framework may need to enable/disable usbphy's parent +	 */ +	clk[usbphy1] = imx_clk_gate("usbphy1", "pll3_usb_otg", base + 0x10, 20); +	clk[usbphy2] = imx_clk_gate("usbphy2", "pll7_usb_host", base + 0x20, 20); + +	/* +	 * usbphy*_gate needs to be on after system boots up, and software +	 * never needs to control it anymore. +	 */ +	clk[usbphy1_gate] = imx_clk_gate("usbphy1_gate", "dummy", base + 0x10, 6); +	clk[usbphy2_gate] = imx_clk_gate("usbphy2_gate", "dummy", base + 0x20, 6);  	clk[sata_ref] = imx_clk_fixed_factor("sata_ref", "pll6_enet", 1, 5);  	clk[pcie_ref] = imx_clk_fixed_factor("pcie_ref", "pll6_enet", 1, 4); @@ -237,6 +355,10 @@ int __init mx6q_clocks_init(void)  	clk[pll3_60m]  = imx_clk_fixed_factor("pll3_60m",  "pll3_usb_otg",   1, 8);  	clk[twd]       = imx_clk_fixed_factor("twd",       "arm",            1, 2); +	clk[pll4_post_div] = clk_register_divider_table(NULL, "pll4_post_div", "pll4_audio", CLK_SET_RATE_PARENT, base + 0x70, 19, 2, 0, post_div_table, &imx_ccm_lock); +	clk[pll5_post_div] = clk_register_divider_table(NULL, "pll5_post_div", "pll5_video", CLK_SET_RATE_PARENT, base + 0xa0, 19, 2, 0, post_div_table, &imx_ccm_lock); +	clk[pll5_video_div] = clk_register_divider_table(NULL, "pll5_video_div", "pll5_post_div", CLK_SET_RATE_PARENT, base + 0x170, 30, 2, 0, video_div_table, &imx_ccm_lock); +  	np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-ccm");  	base = of_iomap(np, 0);  	WARN_ON(!base); @@ -260,8 +382,8 @@ int __init mx6q_clocks_init(void)  	clk[gpu3d_shader_sel] = imx_clk_mux("gpu3d_shader_sel", base + 0x18, 8,  2, gpu3d_shader_sels, ARRAY_SIZE(gpu3d_shader_sels));  	clk[ipu1_sel]         = imx_clk_mux("ipu1_sel",         base + 0x3c, 9,  2, ipu_sels,          ARRAY_SIZE(ipu_sels));  	clk[ipu2_sel]         = imx_clk_mux("ipu2_sel",         base + 0x3c, 14, 2, ipu_sels,          ARRAY_SIZE(ipu_sels)); -	clk[ldb_di0_sel]      = imx_clk_mux("ldb_di0_sel",      base + 0x2c, 9,  3, ldb_di_sels,       ARRAY_SIZE(ldb_di_sels)); -	clk[ldb_di1_sel]      = imx_clk_mux("ldb_di1_sel",      base + 0x2c, 12, 3, ldb_di_sels,       ARRAY_SIZE(ldb_di_sels)); +	clk[ldb_di0_sel]      = imx_clk_mux_flags("ldb_di0_sel", base + 0x2c, 9,  3, ldb_di_sels,      ARRAY_SIZE(ldb_di_sels), CLK_SET_RATE_PARENT); +	clk[ldb_di1_sel]      = imx_clk_mux_flags("ldb_di1_sel", base + 0x2c, 12, 3, ldb_di_sels,      ARRAY_SIZE(ldb_di_sels), CLK_SET_RATE_PARENT);  	clk[ipu1_di0_pre_sel] = imx_clk_mux("ipu1_di0_pre_sel", base + 0x34, 6,  3, ipu_di_pre_sels,   ARRAY_SIZE(ipu_di_pre_sels));  	clk[ipu1_di1_pre_sel] = imx_clk_mux("ipu1_di1_pre_sel", base + 0x34, 15, 3, ipu_di_pre_sels,   ARRAY_SIZE(ipu_di_pre_sels));  	clk[ipu2_di0_pre_sel] = imx_clk_mux("ipu2_di0_pre_sel", base + 0x38, 6,  3, ipu_di_pre_sels,   ARRAY_SIZE(ipu_di_pre_sels)); @@ -309,9 +431,9 @@ int __init mx6q_clocks_init(void)  	clk[ipu1_podf]        = imx_clk_divider("ipu1_podf",        "ipu1_sel",          base + 0x3c, 11, 3);  	clk[ipu2_podf]        = imx_clk_divider("ipu2_podf",        "ipu2_sel",          base + 0x3c, 16, 3);  	clk[ldb_di0_div_3_5]  = imx_clk_fixed_factor("ldb_di0_div_3_5", "ldb_di0_sel", 2, 7); -	clk[ldb_di0_podf]     = imx_clk_divider("ldb_di0_podf",     "ldb_di0_div_3_5",       base + 0x20, 10, 1); +	clk[ldb_di0_podf]     = imx_clk_divider_flags("ldb_di0_podf", "ldb_di0_div_3_5", base + 0x20, 10, 1, 0);  	clk[ldb_di1_div_3_5]  = imx_clk_fixed_factor("ldb_di1_div_3_5", "ldb_di1_sel", 2, 7); -	clk[ldb_di1_podf]     = imx_clk_divider("ldb_di1_podf",     "ldb_di1_div_3_5",   base + 0x20, 11, 1); +	clk[ldb_di1_podf]     = imx_clk_divider_flags("ldb_di1_podf", "ldb_di1_div_3_5", base + 0x20, 11, 1, 0);  	clk[ipu1_di0_pre]     = imx_clk_divider("ipu1_di0_pre",     "ipu1_di0_pre_sel",  base + 0x34, 3,  3);  	clk[ipu1_di1_pre]     = imx_clk_divider("ipu1_di1_pre",     "ipu1_di1_pre_sel",  base + 0x34, 12, 3);  	clk[ipu2_di0_pre]     = imx_clk_divider("ipu2_di0_pre",     "ipu2_di0_pre_sel",  base + 0x38, 3,  3); @@ -420,12 +542,16 @@ int __init mx6q_clocks_init(void)  	clk_register_clkdev(clk[gpt_ipg], "ipg", "imx-gpt.0");  	clk_register_clkdev(clk[gpt_ipg_per], "per", "imx-gpt.0"); -	clk_register_clkdev(clk[twd], NULL, "smp_twd");  	clk_register_clkdev(clk[cko1_sel], "cko1_sel", NULL);  	clk_register_clkdev(clk[ahb], "ahb", NULL);  	clk_register_clkdev(clk[cko1], "cko1", NULL);  	clk_register_clkdev(clk[arm], NULL, "cpu0"); +	if (imx6q_revision() != IMX_CHIP_REVISION_1_0) { +		clk_set_parent(clk[ldb_di0_sel], clk[pll5_video_div]); +		clk_set_parent(clk[ldb_di1_sel], clk[pll5_video_div]); +	} +  	/*  	 * The gpmi needs 100MHz frequency in the EDO/Sync mode,  	 * We can not get the 100MHz from the pll2_pfd0_352m. @@ -436,6 +562,11 @@ int __init mx6q_clocks_init(void)  	for (i = 0; i < ARRAY_SIZE(clks_init_on); i++)  		clk_prepare_enable(clk[clks_init_on[i]]); +	if (IS_ENABLED(CONFIG_USB_MXS_PHY)) { +		clk_prepare_enable(clk[usbphy1_gate]); +		clk_prepare_enable(clk[usbphy2_gate]); +	} +  	/* Set initial power mode */  	imx6q_set_lpm(WAIT_CLOCKED); diff --git a/arch/arm/mach-imx/clk-pllv1.c b/arch/arm/mach-imx/clk-pllv1.c index abff350ba24..c1eaee34695 100644 --- a/arch/arm/mach-imx/clk-pllv1.c +++ b/arch/arm/mach-imx/clk-pllv1.c @@ -78,7 +78,7 @@ static unsigned long clk_pllv1_recalc_rate(struct clk_hw *hw,  	return ll;  } -struct clk_ops clk_pllv1_ops = { +static struct clk_ops clk_pllv1_ops = {  	.recalc_rate = clk_pllv1_recalc_rate,  }; diff --git a/arch/arm/mach-imx/clk-pllv2.c b/arch/arm/mach-imx/clk-pllv2.c index 0440379e362..20889d59b44 100644 --- a/arch/arm/mach-imx/clk-pllv2.c +++ b/arch/arm/mach-imx/clk-pllv2.c @@ -229,7 +229,7 @@ static void clk_pllv2_unprepare(struct clk_hw *hw)  	__raw_writel(reg, pllbase + MXC_PLL_DP_CTL);  } -struct clk_ops clk_pllv2_ops = { +static struct clk_ops clk_pllv2_ops = {  	.prepare = clk_pllv2_prepare,  	.unprepare = clk_pllv2_unprepare,  	.recalc_rate = clk_pllv2_recalc_rate, diff --git a/arch/arm/mach-imx/clk.c b/arch/arm/mach-imx/clk.c index f5e8be8e7f1..37e884ed1cd 100644 --- a/arch/arm/mach-imx/clk.c +++ b/arch/arm/mach-imx/clk.c @@ -1,3 +1,4 @@  #include <linux/spinlock.h> +#include "clk.h"  DEFINE_SPINLOCK(imx_ccm_lock); diff --git a/arch/arm/mach-imx/clk.h b/arch/arm/mach-imx/clk.h index 9d1f3b99d1d..d9d9d9c66df 100644 --- a/arch/arm/mach-imx/clk.h +++ b/arch/arm/mach-imx/clk.h @@ -59,6 +59,14 @@ static inline struct clk *imx_clk_divider(const char *name, const char *parent,  			reg, shift, width, 0, &imx_ccm_lock);  } +static inline struct clk *imx_clk_divider_flags(const char *name, +		const char *parent, void __iomem *reg, u8 shift, u8 width, +		unsigned long flags) +{ +	return clk_register_divider(NULL, name, parent, flags, +			reg, shift, width, 0, &imx_ccm_lock); +} +  static inline struct clk *imx_clk_gate(const char *name, const char *parent,  		void __iomem *reg, u8 shift)  { @@ -73,6 +81,15 @@ static inline struct clk *imx_clk_mux(const char *name, void __iomem *reg,  			width, 0, &imx_ccm_lock);  } +static inline struct clk *imx_clk_mux_flags(const char *name, +		void __iomem *reg, u8 shift, u8 width, const char **parents, +		int num_parents, unsigned long flags) +{ +	return clk_register_mux(NULL, name, parents, num_parents, +			flags, reg, shift, width, 0, +			&imx_ccm_lock); +} +  static inline struct clk *imx_clk_fixed_factor(const char *name,  		const char *parent, unsigned int mult, unsigned int div)  { diff --git a/arch/arm/mach-imx/common.h b/arch/arm/mach-imx/common.h index fa36fb84ab1..c08ae3f99ce 100644 --- a/arch/arm/mach-imx/common.h +++ b/arch/arm/mach-imx/common.h @@ -1,5 +1,5 @@  /* - * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. + * Copyright 2004-2013 Freescale Semiconductor, Inc. All Rights Reserved.   */  /* @@ -12,6 +12,7 @@  #define __ASM_ARCH_MXC_COMMON_H__  struct platform_device; +struct pt_regs;  struct clk;  enum mxc_cpu_pwr_mode; @@ -21,7 +22,6 @@ extern void mx25_map_io(void);  extern void mx27_map_io(void);  extern void mx31_map_io(void);  extern void mx35_map_io(void); -extern void mx50_map_io(void);  extern void mx51_map_io(void);  extern void mx53_map_io(void);  extern void imx1_init_early(void); @@ -30,7 +30,6 @@ extern void imx25_init_early(void);  extern void imx27_init_early(void);  extern void imx31_init_early(void);  extern void imx35_init_early(void); -extern void imx50_init_early(void);  extern void imx51_init_early(void);  extern void imx53_init_early(void);  extern void mxc_init_irq(void __iomem *); @@ -41,7 +40,6 @@ extern void mx25_init_irq(void);  extern void mx27_init_irq(void);  extern void mx31_init_irq(void);  extern void mx35_init_irq(void); -extern void mx50_init_irq(void);  extern void mx51_init_irq(void);  extern void mx53_init_irq(void);  extern void imx1_soc_init(void); @@ -50,7 +48,6 @@ extern void imx25_soc_init(void);  extern void imx27_soc_init(void);  extern void imx31_soc_init(void);  extern void imx35_soc_init(void); -extern void imx50_soc_init(void);  extern void imx51_soc_init(void);  extern void imx51_init_late(void);  extern void imx53_init_late(void); @@ -78,6 +75,7 @@ extern void mxc_set_cpu_type(unsigned int type);  extern void mxc_restart(char, const char *);  extern void mxc_arch_reset_init(void __iomem *);  extern int mx53_revision(void); +extern int imx6q_revision(void);  extern int mx53_display_revision(void);  extern void imx_set_aips(void __iomem *);  extern int mxc_device_init(void); @@ -109,37 +107,38 @@ void tzic_handle_irq(struct pt_regs *);  #define imx27_handle_irq avic_handle_irq  #define imx31_handle_irq avic_handle_irq  #define imx35_handle_irq avic_handle_irq -#define imx50_handle_irq tzic_handle_irq  #define imx51_handle_irq tzic_handle_irq  #define imx53_handle_irq tzic_handle_irq -#define imx6q_handle_irq gic_handle_irq  extern void imx_enable_cpu(int cpu, bool enable);  extern void imx_set_cpu_jump(int cpu, void *jump_addr); -#ifdef CONFIG_DEBUG_LL -extern void imx_lluart_map_io(void); -#else -static inline void imx_lluart_map_io(void) {} -#endif +extern u32 imx_get_cpu_arg(int cpu); +extern void imx_set_cpu_arg(int cpu, u32 arg);  extern void v7_cpu_resume(void); -extern u32 *pl310_get_save_ptr(void);  #ifdef CONFIG_SMP  extern void v7_secondary_startup(void);  extern void imx_scu_map_io(void);  extern void imx_smp_prepare(void); +extern void imx_scu_standby_enable(void);  #else  static inline void imx_scu_map_io(void) {}  static inline void imx_smp_prepare(void) {} +static inline void imx_scu_standby_enable(void) {}  #endif -extern void imx_enable_cpu(int cpu, bool enable); -extern void imx_set_cpu_jump(int cpu, void *jump_addr);  extern void imx_src_init(void);  extern void imx_src_prepare_restart(void);  extern void imx_gpc_init(void);  extern void imx_gpc_pre_suspend(void);  extern void imx_gpc_post_resume(void); +extern void imx_gpc_mask_all(void); +extern void imx_gpc_restore_all(void); +extern void imx_anatop_init(void); +extern void imx_anatop_pre_suspend(void); +extern void imx_anatop_post_resume(void); +extern void imx_anatop_usb_chrg_detect_disable(void); +extern u32 imx_anatop_get_digprog(void);  extern int imx6q_set_lpm(enum mxc_cpu_pwr_mode mode); -extern void imx6q_clock_map_io(void); +extern void imx6q_set_chicken_bit(void);  extern void imx_cpu_die(unsigned int cpu);  extern int imx_cpu_kill(unsigned int cpu); diff --git a/arch/arm/mach-imx/cpu-imx5.c b/arch/arm/mach-imx/cpu-imx5.c index d88760014ff..c1c99a72c6a 100644 --- a/arch/arm/mach-imx/cpu-imx5.c +++ b/arch/arm/mach-imx/cpu-imx5.c @@ -18,11 +18,11 @@  #include <linux/io.h>  #include "hardware.h" +#include "common.h"  static int mx5_cpu_rev = -1;  #define IIM_SREV 0x24 -#define MX50_HW_ADADIG_DIGPROG	0xB0  static int get_mx51_srev(void)  { @@ -108,41 +108,3 @@ int mx53_revision(void)  	return mx5_cpu_rev;  }  EXPORT_SYMBOL(mx53_revision); - -static int get_mx50_srev(void) -{ -	void __iomem *anatop = ioremap(MX50_ANATOP_BASE_ADDR, SZ_8K); -	u32 rev; - -	if (!anatop) { -		mx5_cpu_rev = -EINVAL; -		return 0; -	} - -	rev = readl(anatop + MX50_HW_ADADIG_DIGPROG); -	rev &= 0xff; - -	iounmap(anatop); -	if (rev == 0x0) -		return IMX_CHIP_REVISION_1_0; -	else if (rev == 0x1) -		return IMX_CHIP_REVISION_1_1; -	return 0; -} - -/* - * Returns: - *	the silicon revision of the cpu - *	-EINVAL - not a mx50 - */ -int mx50_revision(void) -{ -	if (!cpu_is_mx50()) -		return -EINVAL; - -	if (mx5_cpu_rev == -1) -		mx5_cpu_rev = get_mx50_srev(); - -	return mx5_cpu_rev; -} -EXPORT_SYMBOL(mx50_revision); diff --git a/arch/arm/mach-imx/cpu.c b/arch/arm/mach-imx/cpu.c index 03fcbd08259..e70e3acbf9b 100644 --- a/arch/arm/mach-imx/cpu.c +++ b/arch/arm/mach-imx/cpu.c @@ -3,6 +3,7 @@  #include <linux/io.h>  #include "hardware.h" +#include "common.h"  unsigned int __mxc_cpu_type;  EXPORT_SYMBOL(__mxc_cpu_type); diff --git a/arch/arm/mach-imx/cpu_op-mx51.c b/arch/arm/mach-imx/cpu_op-mx51.c deleted file mode 100644 index b9ef692b61a..00000000000 --- a/arch/arm/mach-imx/cpu_op-mx51.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved. - */ - -/* - * The code contained herein is licensed under the GNU General Public - * License. You may obtain a copy of the GNU General Public License - * Version 2 or later at the following locations: - * - * http://www.opensource.org/licenses/gpl-license.html - * http://www.gnu.org/copyleft/gpl.html - */ - -#include <linux/bug.h> -#include <linux/types.h> -#include <linux/kernel.h> - -#include "hardware.h" - -static struct cpu_op mx51_cpu_op[] = { -	{ -	.cpu_rate = 160000000,}, -	{ -	.cpu_rate = 800000000,}, -}; - -struct cpu_op *mx51_get_cpu_op(int *op) -{ -	*op = ARRAY_SIZE(mx51_cpu_op); -	return mx51_cpu_op; -} diff --git a/arch/arm/mach-imx/cpu_op-mx51.h b/arch/arm/mach-imx/cpu_op-mx51.h deleted file mode 100644 index 97477fecb46..00000000000 --- a/arch/arm/mach-imx/cpu_op-mx51.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved. - */ - -/* - * The code contained herein is licensed under the GNU General Public - * License. You may obtain a copy of the GNU General Public License - * Version 2 or later at the following locations: - * - * http://www.opensource.org/licenses/gpl-license.html - * http://www.gnu.org/copyleft/gpl.html - */ - -extern struct cpu_op *mx51_get_cpu_op(int *op); diff --git a/arch/arm/mach-imx/cpufreq.c b/arch/arm/mach-imx/cpufreq.c deleted file mode 100644 index d8c75c3c925..00000000000 --- a/arch/arm/mach-imx/cpufreq.c +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved. - */ - -/* - * The code contained herein is licensed under the GNU General Public - * License. You may obtain a copy of the GNU General Public License - * Version 2 or later at the following locations: - * - * http://www.opensource.org/licenses/gpl-license.html - * http://www.gnu.org/copyleft/gpl.html - */ - -/* - * A driver for the Freescale Semiconductor i.MXC CPUfreq module. - * The CPUFREQ driver is for controlling CPU frequency. It allows you to change - * the CPU clock speed on the fly. - */ - -#include <linux/module.h> -#include <linux/cpufreq.h> -#include <linux/clk.h> -#include <linux/err.h> -#include <linux/slab.h> - -#include "hardware.h" - -#define CLK32_FREQ	32768 -#define NANOSECOND	(1000 * 1000 * 1000) - -struct cpu_op *(*get_cpu_op)(int *op); - -static int cpu_freq_khz_min; -static int cpu_freq_khz_max; - -static struct clk *cpu_clk; -static struct cpufreq_frequency_table *imx_freq_table; - -static int cpu_op_nr; -static struct cpu_op *cpu_op_tbl; - -static int set_cpu_freq(int freq) -{ -	int ret = 0; -	int org_cpu_rate; - -	org_cpu_rate = clk_get_rate(cpu_clk); -	if (org_cpu_rate == freq) -		return ret; - -	ret = clk_set_rate(cpu_clk, freq); -	if (ret != 0) { -		printk(KERN_DEBUG "cannot set CPU clock rate\n"); -		return ret; -	} - -	return ret; -} - -static int mxc_verify_speed(struct cpufreq_policy *policy) -{ -	if (policy->cpu != 0) -		return -EINVAL; - -	return cpufreq_frequency_table_verify(policy, imx_freq_table); -} - -static unsigned int mxc_get_speed(unsigned int cpu) -{ -	if (cpu) -		return 0; - -	return clk_get_rate(cpu_clk) / 1000; -} - -static int mxc_set_target(struct cpufreq_policy *policy, -			  unsigned int target_freq, unsigned int relation) -{ -	struct cpufreq_freqs freqs; -	int freq_Hz; -	int ret = 0; -	unsigned int index; - -	cpufreq_frequency_table_target(policy, imx_freq_table, -			target_freq, relation, &index); -	freq_Hz = imx_freq_table[index].frequency * 1000; - -	freqs.old = clk_get_rate(cpu_clk) / 1000; -	freqs.new = freq_Hz / 1000; -	freqs.cpu = 0; -	freqs.flags = 0; -	cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); - -	ret = set_cpu_freq(freq_Hz); - -	cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); - -	return ret; -} - -static int mxc_cpufreq_init(struct cpufreq_policy *policy) -{ -	int ret; -	int i; - -	printk(KERN_INFO "i.MXC CPU frequency driver\n"); - -	if (policy->cpu != 0) -		return -EINVAL; - -	if (!get_cpu_op) -		return -EINVAL; - -	cpu_clk = clk_get(NULL, "cpu_clk"); -	if (IS_ERR(cpu_clk)) { -		printk(KERN_ERR "%s: failed to get cpu clock\n", __func__); -		return PTR_ERR(cpu_clk); -	} - -	cpu_op_tbl = get_cpu_op(&cpu_op_nr); - -	cpu_freq_khz_min = cpu_op_tbl[0].cpu_rate / 1000; -	cpu_freq_khz_max = cpu_op_tbl[0].cpu_rate / 1000; - -	imx_freq_table = kmalloc( -		sizeof(struct cpufreq_frequency_table) * (cpu_op_nr + 1), -			GFP_KERNEL); -	if (!imx_freq_table) { -		ret = -ENOMEM; -		goto err1; -	} - -	for (i = 0; i < cpu_op_nr; i++) { -		imx_freq_table[i].index = i; -		imx_freq_table[i].frequency = cpu_op_tbl[i].cpu_rate / 1000; - -		if ((cpu_op_tbl[i].cpu_rate / 1000) < cpu_freq_khz_min) -			cpu_freq_khz_min = cpu_op_tbl[i].cpu_rate / 1000; - -		if ((cpu_op_tbl[i].cpu_rate / 1000) > cpu_freq_khz_max) -			cpu_freq_khz_max = cpu_op_tbl[i].cpu_rate / 1000; -	} - -	imx_freq_table[i].index = i; -	imx_freq_table[i].frequency = CPUFREQ_TABLE_END; - -	policy->cur = clk_get_rate(cpu_clk) / 1000; -	policy->min = policy->cpuinfo.min_freq = cpu_freq_khz_min; -	policy->max = policy->cpuinfo.max_freq = cpu_freq_khz_max; - -	/* Manual states, that PLL stabilizes in two CLK32 periods */ -	policy->cpuinfo.transition_latency = 2 * NANOSECOND / CLK32_FREQ; - -	ret = cpufreq_frequency_table_cpuinfo(policy, imx_freq_table); - -	if (ret < 0) { -		printk(KERN_ERR "%s: failed to register i.MXC CPUfreq with error code %d\n", -		       __func__, ret); -		goto err; -	} - -	cpufreq_frequency_table_get_attr(imx_freq_table, policy->cpu); -	return 0; -err: -	kfree(imx_freq_table); -err1: -	clk_put(cpu_clk); -	return ret; -} - -static int mxc_cpufreq_exit(struct cpufreq_policy *policy) -{ -	cpufreq_frequency_table_put_attr(policy->cpu); - -	set_cpu_freq(cpu_freq_khz_max * 1000); -	clk_put(cpu_clk); -	kfree(imx_freq_table); -	return 0; -} - -static struct cpufreq_driver mxc_driver = { -	.flags = CPUFREQ_STICKY, -	.verify = mxc_verify_speed, -	.target = mxc_set_target, -	.get = mxc_get_speed, -	.init = mxc_cpufreq_init, -	.exit = mxc_cpufreq_exit, -	.name = "imx", -}; - -static int mxc_cpufreq_driver_init(void) -{ -	return cpufreq_register_driver(&mxc_driver); -} - -static void mxc_cpufreq_driver_exit(void) -{ -	cpufreq_unregister_driver(&mxc_driver); -} - -module_init(mxc_cpufreq_driver_init); -module_exit(mxc_cpufreq_driver_exit); - -MODULE_AUTHOR("Freescale Semiconductor Inc. Yong Shen <yong.shen@linaro.org>"); -MODULE_DESCRIPTION("CPUfreq driver for i.MX"); -MODULE_LICENSE("GPL"); diff --git a/arch/arm/mach-imx/cpuidle-imx5.c b/arch/arm/mach-imx/cpuidle-imx5.c new file mode 100644 index 00000000000..5a47e3c6172 --- /dev/null +++ b/arch/arm/mach-imx/cpuidle-imx5.c @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2012 Freescale Semiconductor, Inc. + * + * 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 <linux/cpuidle.h> +#include <linux/module.h> +#include <asm/system_misc.h> + +static int imx5_cpuidle_enter(struct cpuidle_device *dev, +			      struct cpuidle_driver *drv, int index) +{ +	arm_pm_idle(); +	return index; +} + +static struct cpuidle_driver imx5_cpuidle_driver = { +	.name             = "imx5_cpuidle", +	.owner            = THIS_MODULE, +	.states[0] = { +		.enter            = imx5_cpuidle_enter, +		.exit_latency     = 2, +		.target_residency = 1, +		.flags            = CPUIDLE_FLAG_TIME_VALID, +		.name             = "IMX5 SRPG", +		.desc             = "CPU state retained,powered off", +	}, +	.state_count = 1, +}; + +int __init imx5_cpuidle_init(void) +{ +	return cpuidle_register(&imx5_cpuidle_driver, NULL); +} diff --git a/arch/arm/mach-imx/cpuidle-imx6q.c b/arch/arm/mach-imx/cpuidle-imx6q.c new file mode 100644 index 00000000000..23ddfb693b2 --- /dev/null +++ b/arch/arm/mach-imx/cpuidle-imx6q.c @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2012 Freescale Semiconductor, Inc. + * + * 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 <linux/cpuidle.h> +#include <linux/module.h> +#include <asm/cpuidle.h> +#include <asm/proc-fns.h> + +#include "common.h" +#include "cpuidle.h" + +static atomic_t master = ATOMIC_INIT(0); +static DEFINE_SPINLOCK(master_lock); + +static int imx6q_enter_wait(struct cpuidle_device *dev, +			    struct cpuidle_driver *drv, int index) +{ +	if (atomic_inc_return(&master) == num_online_cpus()) { +		/* +		 * With this lock, we prevent other cpu to exit and enter +		 * this function again and become the master. +		 */ +		if (!spin_trylock(&master_lock)) +			goto idle; +		imx6q_set_lpm(WAIT_UNCLOCKED); +		cpu_do_idle(); +		imx6q_set_lpm(WAIT_CLOCKED); +		spin_unlock(&master_lock); +		goto done; +	} + +idle: +	cpu_do_idle(); +done: +	atomic_dec(&master); + +	return index; +} + +static struct cpuidle_driver imx6q_cpuidle_driver = { +	.name = "imx6q_cpuidle", +	.owner = THIS_MODULE, +	.states = { +		/* WFI */ +		ARM_CPUIDLE_WFI_STATE, +		/* WAIT */ +		{ +			.exit_latency = 50, +			.target_residency = 75, +			.flags = CPUIDLE_FLAG_TIME_VALID | +			         CPUIDLE_FLAG_TIMER_STOP, +			.enter = imx6q_enter_wait, +			.name = "WAIT", +			.desc = "Clock off", +		}, +	}, +	.state_count = 2, +	.safe_state_index = 0, +}; + +int __init imx6q_cpuidle_init(void) +{ +	/* Need to enable SCU standby for entering WAIT modes */ +	imx_scu_standby_enable(); + +	/* Set chicken bit to get a reliable WAIT mode support */ +	imx6q_set_chicken_bit(); + +	return cpuidle_register(&imx6q_cpuidle_driver, NULL); +} diff --git a/arch/arm/mach-imx/cpuidle.c b/arch/arm/mach-imx/cpuidle.c deleted file mode 100644 index d4cb511a44a..00000000000 --- a/arch/arm/mach-imx/cpuidle.c +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2012 Freescale Semiconductor, Inc. - * Copyright 2012 Linaro Ltd. - * - * The code contained herein is licensed under the GNU General Public - * License. You may obtain a copy of the GNU General Public License - * Version 2 or later at the following locations: - * - * http://www.opensource.org/licenses/gpl-license.html - * http://www.gnu.org/copyleft/gpl.html - */ - -#include <linux/cpuidle.h> -#include <linux/err.h> -#include <linux/hrtimer.h> -#include <linux/io.h> -#include <linux/kernel.h> -#include <linux/slab.h> - -static struct cpuidle_device __percpu * imx_cpuidle_devices; - -static void __init imx_cpuidle_devices_uninit(void) -{ -	int cpu_id; -	struct cpuidle_device *dev; - -	for_each_possible_cpu(cpu_id) { -		dev = per_cpu_ptr(imx_cpuidle_devices, cpu_id); -		cpuidle_unregister_device(dev); -	} - -	free_percpu(imx_cpuidle_devices); -} - -int __init imx_cpuidle_init(struct cpuidle_driver *drv) -{ -	struct cpuidle_device *dev; -	int cpu_id, ret; - -	if (drv->state_count > CPUIDLE_STATE_MAX) { -		pr_err("%s: state_count exceeds maximum\n", __func__); -		return -EINVAL; -	} - -	ret = cpuidle_register_driver(drv); -	if (ret) { -		pr_err("%s: Failed to register cpuidle driver with error: %d\n", -			 __func__, ret); -		return ret; -	} - -	imx_cpuidle_devices = alloc_percpu(struct cpuidle_device); -	if (imx_cpuidle_devices == NULL) { -		ret = -ENOMEM; -		goto unregister_drv; -	} - -	/* initialize state data for each cpuidle_device */ -	for_each_possible_cpu(cpu_id) { -		dev = per_cpu_ptr(imx_cpuidle_devices, cpu_id); -		dev->cpu = cpu_id; -		dev->state_count = drv->state_count; - -		ret = cpuidle_register_device(dev); -		if (ret) { -			pr_err("%s: Failed to register cpu %u, error: %d\n", -				__func__, cpu_id, ret); -			goto uninit; -		} -	} - -	return 0; - -uninit: -	imx_cpuidle_devices_uninit(); - -unregister_drv: -	cpuidle_unregister_driver(drv); -	return ret; -} diff --git a/arch/arm/mach-imx/cpuidle.h b/arch/arm/mach-imx/cpuidle.h index bc932d1af37..786f98ecc14 100644 --- a/arch/arm/mach-imx/cpuidle.h +++ b/arch/arm/mach-imx/cpuidle.h @@ -10,13 +10,16 @@   * http://www.gnu.org/copyleft/gpl.html   */ -#include <linux/cpuidle.h> -  #ifdef CONFIG_CPU_IDLE -extern int imx_cpuidle_init(struct cpuidle_driver *drv); +extern int imx5_cpuidle_init(void); +extern int imx6q_cpuidle_init(void);  #else -static inline int imx_cpuidle_init(struct cpuidle_driver *drv) +static inline int imx5_cpuidle_init(void) +{ +	return 0; +} +static inline int imx6q_cpuidle_init(void)  { -	return -ENODEV; +	return 0;  }  #endif diff --git a/arch/arm/mach-imx/devices-imx50.h b/arch/arm/mach-imx/devices-imx50.h deleted file mode 100644 index 2c290391f29..00000000000 --- a/arch/arm/mach-imx/devices-imx50.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved. - */ - -/* - * 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 "devices/devices-common.h" - -extern const struct imx_imx_uart_1irq_data imx50_imx_uart_data[]; -#define imx50_add_imx_uart(id, pdata)	\ -	imx_add_imx_uart_1irq(&imx50_imx_uart_data[id], pdata) - -extern const struct imx_fec_data imx50_fec_data; -#define imx50_add_fec(pdata)	\ -	imx_add_fec(&imx50_fec_data, pdata) - -extern const struct imx_imx_i2c_data imx50_imx_i2c_data[]; -#define imx50_add_imx_i2c(id, pdata)	\ -	imx_add_imx_i2c(&imx50_imx_i2c_data[id], pdata) diff --git a/arch/arm/mach-imx/devices/Kconfig b/arch/arm/mach-imx/devices/Kconfig index 9a8f1ca7bcb..3dd2b1b041d 100644 --- a/arch/arm/mach-imx/devices/Kconfig +++ b/arch/arm/mach-imx/devices/Kconfig @@ -1,6 +1,6 @@  config IMX_HAVE_PLATFORM_FEC  	bool -	default y if ARCH_MX25 || SOC_IMX27 || SOC_IMX35 || SOC_IMX50 || SOC_IMX51 || SOC_IMX53 +	default y if ARCH_MX25 || SOC_IMX27 || SOC_IMX35 || SOC_IMX51 || SOC_IMX53  config IMX_HAVE_PLATFORM_FLEXCAN  	bool @@ -86,7 +86,3 @@ config IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX  config IMX_HAVE_PLATFORM_SPI_IMX  	bool - -config IMX_HAVE_PLATFORM_AHCI -	bool -	default y if ARCH_MX53 diff --git a/arch/arm/mach-imx/devices/Makefile b/arch/arm/mach-imx/devices/Makefile index 6acf37e0c11..67416fb1dc6 100644 --- a/arch/arm/mach-imx/devices/Makefile +++ b/arch/arm/mach-imx/devices/Makefile @@ -29,5 +29,4 @@ obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_RTC) += platform-mxc_rtc.o  obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_W1) += platform-mxc_w1.o  obj-$(CONFIG_IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX) += platform-sdhci-esdhc-imx.o  obj-$(CONFIG_IMX_HAVE_PLATFORM_SPI_IMX) +=  platform-spi_imx.o -obj-$(CONFIG_IMX_HAVE_PLATFORM_AHCI) +=  platform-ahci-imx.o  obj-$(CONFIG_IMX_HAVE_PLATFORM_MX2_EMMA) += platform-mx2-emma.o diff --git a/arch/arm/mach-imx/devices/devices-common.h b/arch/arm/mach-imx/devices/devices-common.h index 9bd5777ff0e..453e20bc265 100644 --- a/arch/arm/mach-imx/devices/devices-common.h +++ b/arch/arm/mach-imx/devices/devices-common.h @@ -344,13 +344,3 @@ struct platform_device *imx_add_imx_dma(char *name, resource_size_t iobase,  					int irq, int irq_err);  struct platform_device *imx_add_imx_sdma(char *name,  	resource_size_t iobase, int irq, struct sdma_platform_data *pdata); - -#include <linux/ahci_platform.h> -struct imx_ahci_imx_data { -	const char *devid; -	resource_size_t iobase; -	resource_size_t irq; -}; -struct platform_device *__init imx_add_ahci_imx( -		const struct imx_ahci_imx_data *data, -		const struct ahci_platform_data *pdata); diff --git a/arch/arm/mach-imx/devices/devices.c b/arch/arm/mach-imx/devices/devices.c index 1b37482407f..1b4366a0e7c 100644 --- a/arch/arm/mach-imx/devices/devices.c +++ b/arch/arm/mach-imx/devices/devices.c @@ -37,7 +37,7 @@ int __init mxc_device_init(void)  	int ret;  	ret = device_register(&mxc_aips_bus); -	if (IS_ERR_VALUE(ret)) +	if (ret < 0)  		goto done;  	ret = device_register(&mxc_ahb_bus); diff --git a/arch/arm/mach-imx/devices/platform-ahci-imx.c b/arch/arm/mach-imx/devices/platform-ahci-imx.c deleted file mode 100644 index 3d87dd9c284..00000000000 --- a/arch/arm/mach-imx/devices/platform-ahci-imx.c +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (C) 2011 Freescale Semiconductor, Inc. All Rights Reserved. - */ - -/* - * 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/io.h> -#include <linux/clk.h> -#include <linux/err.h> -#include <linux/device.h> -#include <linux/dma-mapping.h> -#include <asm/sizes.h> - -#include "../hardware.h" -#include "devices-common.h" - -#define imx_ahci_imx_data_entry_single(soc, _devid)		\ -	{								\ -		.devid = _devid,					\ -		.iobase = soc ## _SATA_BASE_ADDR,			\ -		.irq = soc ## _INT_SATA,				\ -	} - -#ifdef CONFIG_SOC_IMX53 -const struct imx_ahci_imx_data imx53_ahci_imx_data __initconst = -	imx_ahci_imx_data_entry_single(MX53, "imx53-ahci"); -#endif - -enum { -	HOST_CAP = 0x00, -	HOST_CAP_SSS = (1 << 27), /* Staggered Spin-up */ -	HOST_PORTS_IMPL	= 0x0c, -	HOST_TIMER1MS = 0xe0, /* Timer 1-ms */ -}; - -static struct clk *sata_clk, *sata_ref_clk; - -/* AHCI module Initialization, if return 0, initialization is successful. */ -static int imx_sata_init(struct device *dev, void __iomem *addr) -{ -	u32 tmpdata; -	int ret = 0; -	struct clk *clk; - -	sata_clk = clk_get(dev, "ahci"); -	if (IS_ERR(sata_clk)) { -		dev_err(dev, "no sata clock.\n"); -		return PTR_ERR(sata_clk); -	} -	ret = clk_prepare_enable(sata_clk); -	if (ret) { -		dev_err(dev, "can't prepare/enable sata clock.\n"); -		goto put_sata_clk; -	} - -	/* Get the AHCI SATA PHY CLK */ -	sata_ref_clk = clk_get(dev, "ahci_phy"); -	if (IS_ERR(sata_ref_clk)) { -		dev_err(dev, "no sata ref clock.\n"); -		ret = PTR_ERR(sata_ref_clk); -		goto release_sata_clk; -	} -	ret = clk_prepare_enable(sata_ref_clk); -	if (ret) { -		dev_err(dev, "can't prepare/enable sata ref clock.\n"); -		goto put_sata_ref_clk; -	} - -	/* Get the AHB clock rate, and configure the TIMER1MS reg later */ -	clk = clk_get(dev, "ahci_dma"); -	if (IS_ERR(clk)) { -		dev_err(dev, "no dma clock.\n"); -		ret = PTR_ERR(clk); -		goto release_sata_ref_clk; -	} -	tmpdata = clk_get_rate(clk) / 1000; -	clk_put(clk); - -	writel(tmpdata, addr + HOST_TIMER1MS); - -	tmpdata = readl(addr + HOST_CAP); -	if (!(tmpdata & HOST_CAP_SSS)) { -		tmpdata |= HOST_CAP_SSS; -		writel(tmpdata, addr + HOST_CAP); -	} - -	if (!(readl(addr + HOST_PORTS_IMPL) & 0x1)) -		writel((readl(addr + HOST_PORTS_IMPL) | 0x1), -			addr + HOST_PORTS_IMPL); - -	return 0; - -release_sata_ref_clk: -	clk_disable_unprepare(sata_ref_clk); -put_sata_ref_clk: -	clk_put(sata_ref_clk); -release_sata_clk: -	clk_disable_unprepare(sata_clk); -put_sata_clk: -	clk_put(sata_clk); - -	return ret; -} - -static void imx_sata_exit(struct device *dev) -{ -	clk_disable_unprepare(sata_ref_clk); -	clk_put(sata_ref_clk); - -	clk_disable_unprepare(sata_clk); -	clk_put(sata_clk); - -} -struct platform_device *__init imx_add_ahci_imx( -		const struct imx_ahci_imx_data *data, -		const struct ahci_platform_data *pdata) -{ -	struct resource res[] = { -		{ -			.start = data->iobase, -			.end = data->iobase + SZ_4K - 1, -			.flags = IORESOURCE_MEM, -		}, { -			.start = data->irq, -			.end = data->irq, -			.flags = IORESOURCE_IRQ, -		}, -	}; - -	return imx_add_platform_device_dmamask(data->devid, 0, -			res, ARRAY_SIZE(res), -			pdata, sizeof(*pdata),  DMA_BIT_MASK(32)); -} - -struct platform_device *__init imx53_add_ahci_imx(void) -{ -	struct ahci_platform_data pdata = { -		.init = imx_sata_init, -		.exit = imx_sata_exit, -	}; - -	return imx_add_ahci_imx(&imx53_ahci_imx_data, &pdata); -} diff --git a/arch/arm/mach-imx/devices/platform-fec.c b/arch/arm/mach-imx/devices/platform-fec.c index 2cb188ad9a0..63eba08f87b 100644 --- a/arch/arm/mach-imx/devices/platform-fec.c +++ b/arch/arm/mach-imx/devices/platform-fec.c @@ -35,12 +35,6 @@ const struct imx_fec_data imx35_fec_data __initconst =  	imx_fec_data_entry_single(MX35, "imx27-fec");  #endif -#ifdef CONFIG_SOC_IMX50 -/* i.mx50 has the i.mx25 type fec */ -const struct imx_fec_data imx50_fec_data __initconst = -	imx_fec_data_entry_single(MX50, "imx25-fec"); -#endif -  #ifdef CONFIG_SOC_IMX51  /* i.mx51 has the i.mx27 type fec */  const struct imx_fec_data imx51_fec_data __initconst = diff --git a/arch/arm/mach-imx/devices/platform-imx-i2c.c b/arch/arm/mach-imx/devices/platform-imx-i2c.c index 8e30e5703cd..57d342e85c2 100644 --- a/arch/arm/mach-imx/devices/platform-imx-i2c.c +++ b/arch/arm/mach-imx/devices/platform-imx-i2c.c @@ -70,16 +70,6 @@ const struct imx_imx_i2c_data imx35_imx_i2c_data[] __initconst = {  };  #endif /* ifdef CONFIG_SOC_IMX35 */ -#ifdef CONFIG_SOC_IMX50 -const struct imx_imx_i2c_data imx50_imx_i2c_data[] __initconst = { -#define imx50_imx_i2c_data_entry(_id, _hwid)				\ -	imx_imx_i2c_data_entry(MX50, "imx21-i2c", _id, _hwid, SZ_4K) -	imx50_imx_i2c_data_entry(0, 1), -	imx50_imx_i2c_data_entry(1, 2), -	imx50_imx_i2c_data_entry(2, 3), -}; -#endif /* ifdef CONFIG_SOC_IMX51 */ -  #ifdef CONFIG_SOC_IMX51  const struct imx_imx_i2c_data imx51_imx_i2c_data[] __initconst = {  #define imx51_imx_i2c_data_entry(_id, _hwid)				\ diff --git a/arch/arm/mach-imx/devices/platform-imx-uart.c b/arch/arm/mach-imx/devices/platform-imx-uart.c index 67bf866a2cb..faac4aa6ca6 100644 --- a/arch/arm/mach-imx/devices/platform-imx-uart.c +++ b/arch/arm/mach-imx/devices/platform-imx-uart.c @@ -94,18 +94,6 @@ const struct imx_imx_uart_1irq_data imx35_imx_uart_data[] __initconst = {  };  #endif /* ifdef CONFIG_SOC_IMX35 */ -#ifdef CONFIG_SOC_IMX50 -const struct imx_imx_uart_1irq_data imx50_imx_uart_data[] __initconst = { -#define imx50_imx_uart_data_entry(_id, _hwid)				\ -	imx_imx_uart_1irq_data_entry(MX50, _id, _hwid, SZ_4K) -	imx50_imx_uart_data_entry(0, 1), -	imx50_imx_uart_data_entry(1, 2), -	imx50_imx_uart_data_entry(2, 3), -	imx50_imx_uart_data_entry(3, 4), -	imx50_imx_uart_data_entry(4, 5), -}; -#endif /* ifdef CONFIG_SOC_IMX50 */ -  #ifdef CONFIG_SOC_IMX51  const struct imx_imx_uart_1irq_data imx51_imx_uart_data[] __initconst = {  #define imx51_imx_uart_data_entry(_id, _hwid)				\ diff --git a/arch/arm/mach-imx/epit.c b/arch/arm/mach-imx/epit.c index 04a5961beea..e02de188ae8 100644 --- a/arch/arm/mach-imx/epit.c +++ b/arch/arm/mach-imx/epit.c @@ -178,7 +178,6 @@ static struct irqaction epit_timer_irq = {  static struct clock_event_device clockevent_epit = {  	.name		= "epit",  	.features	= CLOCK_EVT_FEAT_ONESHOT, -	.shift		= 32,  	.set_mode	= epit_set_mode,  	.set_next_event	= epit_set_next_event,  	.rating		= 200, @@ -186,18 +185,10 @@ static struct clock_event_device clockevent_epit = {  static int __init epit_clockevent_init(struct clk *timer_clk)  { -	unsigned int c = clk_get_rate(timer_clk); - -	clockevent_epit.mult = div_sc(c, NSEC_PER_SEC, -					clockevent_epit.shift); -	clockevent_epit.max_delta_ns = -			clockevent_delta2ns(0xfffffffe, &clockevent_epit); -	clockevent_epit.min_delta_ns = -			clockevent_delta2ns(0x800, &clockevent_epit); -  	clockevent_epit.cpumask = cpumask_of(0); - -	clockevents_register_device(&clockevent_epit); +	clockevents_config_and_register(&clockevent_epit, +					clk_get_rate(timer_clk), +					0x800, 0xfffffffe);  	return 0;  } diff --git a/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c b/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c index b4c70028d35..b2f08bfbbdd 100644 --- a/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c +++ b/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c @@ -46,7 +46,7 @@ static const int eukrea_mbimx27_pins[] __initconst = {  	PE10_PF_UART3_CTS,  	PE11_PF_UART3_RTS,  	/* UART4 */ -#if !defined(MACH_EUKREA_CPUIMX27_USEUART4) +#if !defined(CONFIG_MACH_EUKREA_CPUIMX27_USEUART4)  	PB26_AF_UART4_RTS,  	PB28_AF_UART4_TXD,  	PB29_AF_UART4_CTS, @@ -306,7 +306,7 @@ void __init eukrea_mbimx27_baseboard_init(void)  	imx27_add_imx_uart1(&uart_pdata);  	imx27_add_imx_uart2(&uart_pdata); -#if !defined(MACH_EUKREA_CPUIMX27_USEUART4) +#if !defined(CONFIG_MACH_EUKREA_CPUIMX27_USEUART4)  	imx27_add_imx_uart3(&uart_pdata);  #endif diff --git a/arch/arm/mach-imx/gpc.c b/arch/arm/mach-imx/gpc.c index e1537f9e45b..44a65e9ff1f 100644 --- a/arch/arm/mach-imx/gpc.c +++ b/arch/arm/mach-imx/gpc.c @@ -1,5 +1,5 @@  /* - * Copyright 2011 Freescale Semiconductor, Inc. + * Copyright 2011-2013 Freescale Semiconductor, Inc.   * Copyright 2011 Linaro Ltd.   *   * The code contained herein is licensed under the GNU General Public @@ -15,7 +15,8 @@  #include <linux/of.h>  #include <linux/of_address.h>  #include <linux/of_irq.h> -#include <asm/hardware/gic.h> +#include <linux/irqchip/arm-gic.h> +#include "common.h"  #define GPC_IMR1		0x008  #define GPC_PGC_CPU_PDN		0x2a0 @@ -68,6 +69,27 @@ static int imx_gpc_irq_set_wake(struct irq_data *d, unsigned int on)  	return 0;  } +void imx_gpc_mask_all(void) +{ +	void __iomem *reg_imr1 = gpc_base + GPC_IMR1; +	int i; + +	for (i = 0; i < IMR_NUM; i++) { +		gpc_saved_imrs[i] = readl_relaxed(reg_imr1 + i * 4); +		writel_relaxed(~0, reg_imr1 + i * 4); +	} + +} + +void imx_gpc_restore_all(void) +{ +	void __iomem *reg_imr1 = gpc_base + GPC_IMR1; +	int i; + +	for (i = 0; i < IMR_NUM; i++) +		writel_relaxed(gpc_saved_imrs[i], reg_imr1 + i * 4); +} +  static void imx_gpc_irq_unmask(struct irq_data *d)  {  	void __iomem *reg; @@ -101,11 +123,16 @@ static void imx_gpc_irq_mask(struct irq_data *d)  void __init imx_gpc_init(void)  {  	struct device_node *np; +	int i;  	np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpc");  	gpc_base = of_iomap(np, 0);  	WARN_ON(!gpc_base); +	/* Initially mask all interrupts */ +	for (i = 0; i < IMR_NUM; i++) +		writel_relaxed(~0, gpc_base + GPC_IMR1 + i * 4); +  	/* Register GPC as the secondary interrupt controller behind GIC */  	gic_arch_extn.irq_mask = imx_gpc_irq_mask;  	gic_arch_extn.irq_unmask = imx_gpc_irq_unmask; diff --git a/arch/arm/mach-imx/hardware.h b/arch/arm/mach-imx/hardware.h index 3ce7fa3bd43..356131f7b59 100644 --- a/arch/arm/mach-imx/hardware.h +++ b/arch/arm/mach-imx/hardware.h @@ -72,11 +72,6 @@   *	AVIC	0x68000000+0x100000	->	0xf5800000+0x100000   *	X_MEMC	0xb8000000+0x010000	->	0xf5c00000+0x010000   *	SPBA0	0x50000000+0x100000	->	0xf5400000+0x100000 - * mx50: - *	TZIC	0x0fffc000+0x004000	->	0xf4bfc000+0x004000 - *	AIPS1	0x53f00000+0x100000	->	0xf5700000+0x100000 - *	SPBA0	0x50000000+0x100000	->	0xf5400000+0x100000 - *	AIPS2	0x63f00000+0x100000	->	0xf5300000+0x100000   * mx51:   *	TZIC	0x0fffc000+0x004000	->	0xf4bfc000+0x004000   *	IRAM	0x1ffe0000+0x020000	->	0xf4fe0000+0x020000 @@ -107,8 +102,6 @@  #include "mxc.h" -#include "mx6q.h" -#include "mx50.h"  #include "mx51.h"  #include "mx53.h"  #include "mx3x.h" diff --git a/arch/arm/mach-imx/headsmp.S b/arch/arm/mach-imx/headsmp.S index 7e49deb128a..67b9c48dcaf 100644 --- a/arch/arm/mach-imx/headsmp.S +++ b/arch/arm/mach-imx/headsmp.S @@ -17,53 +17,6 @@  	.section ".text.head", "ax" -/* - * The secondary kernel init calls v7_flush_dcache_all before it enables - * the L1; however, the L1 comes out of reset in an undefined state, so - * the clean + invalidate performed by v7_flush_dcache_all causes a bunch - * of cache lines with uninitialized data and uninitialized tags to get - * written out to memory, which does really unpleasant things to the main - * processor.  We fix this by performing an invalidate, rather than a - * clean + invalidate, before jumping into the kernel. - * - * This funciton is cloned from arch/arm/mach-tegra/headsmp.S, and needs - * to be called for both secondary cores startup and primary core resume - * procedures.  Ideally, it should be moved into arch/arm/mm/cache-v7.S. - */ -ENTRY(v7_invalidate_l1) -	mov	r0, #0 -	mcr	p15, 0, r0, c7, c5, 0	@ invalidate I cache -	mcr	p15, 2, r0, c0, c0, 0 -	mrc	p15, 1, r0, c0, c0, 0 - -	ldr	r1, =0x7fff -	and	r2, r1, r0, lsr #13 - -	ldr	r1, =0x3ff - -	and	r3, r1, r0, lsr #3	@ NumWays - 1 -	add	r2, r2, #1		@ NumSets - -	and	r0, r0, #0x7 -	add	r0, r0, #4	@ SetShift - -	clz	r1, r3		@ WayShift -	add	r4, r3, #1	@ NumWays -1:	sub	r2, r2, #1	@ NumSets-- -	mov	r3, r4		@ Temp = NumWays -2:	subs	r3, r3, #1	@ Temp-- -	mov	r5, r3, lsl r1 -	mov	r6, r2, lsl r0 -	orr	r5, r5, r6	@ Reg = (Temp<<WayShift)|(NumSets<<SetShift) -	mcr	p15, 0, r5, c7, c6, 2 -	bgt	2b -	cmp	r2, #0 -	bgt	1b -	dsb -	isb -	mov	pc, lr -ENDPROC(v7_invalidate_l1) -  #ifdef CONFIG_SMP  ENTRY(v7_secondary_startup)  	bl	v7_invalidate_l1 @@ -71,18 +24,18 @@ ENTRY(v7_secondary_startup)  ENDPROC(v7_secondary_startup)  #endif -#ifdef CONFIG_PM +#ifdef CONFIG_ARM_CPU_SUSPEND  /* - * The following code is located into the .data section.  This is to - * allow phys_l2x0_saved_regs to be accessed with a relative load - * as we are running on physical address here. + * The following code must assume it is running from physical address + * where absolute virtual addresses to the data section have to be + * turned into relative ones.   */ -	.data -	.align  #ifdef CONFIG_CACHE_L2X0  	.macro	pl310_resume -	ldr	r2, phys_l2x0_saved_regs +	adr	r0, l2x0_saved_regs_offset +	ldr	r2, [r0] +	add	r2, r2, r0  	ldr	r0, [r2, #L2X0_R_PHY_BASE]	@ get physical base of l2x0  	ldr	r1, [r2, #L2X0_R_AUX_CTRL]	@ get aux_ctrl value  	str	r1, [r0, #L2X0_AUX_CTRL]	@ restore aux_ctrl @@ -90,9 +43,9 @@ ENDPROC(v7_secondary_startup)  	str	r1, [r0, #L2X0_CTRL]		@ re-enable L2  	.endm -	.globl	phys_l2x0_saved_regs -phys_l2x0_saved_regs: -        .long   0 +l2x0_saved_regs_offset: +	.word	l2x0_saved_regs - . +  #else  	.macro	pl310_resume  	.endm diff --git a/arch/arm/mach-imx/hotplug.c b/arch/arm/mach-imx/hotplug.c index 7bc5fe15dda..3daf1ed9057 100644 --- a/arch/arm/mach-imx/hotplug.c +++ b/arch/arm/mach-imx/hotplug.c @@ -11,8 +11,9 @@   */  #include <linux/errno.h> -#include <asm/cacheflush.h> +#include <linux/jiffies.h>  #include <asm/cp15.h> +#include <asm/proc-fns.h>  #include "common.h" @@ -20,7 +21,6 @@ static inline void cpu_enter_lowpower(void)  {  	unsigned int v; -	flush_cache_all();  	asm volatile(  		"mcr	p15, 0, %1, c7, c5, 0\n"  	"	mcr	p15, 0, %1, c7, c10, 4\n" @@ -46,11 +46,23 @@ static inline void cpu_enter_lowpower(void)  void imx_cpu_die(unsigned int cpu)  {  	cpu_enter_lowpower(); +	/* +	 * We use the cpu jumping argument register to sync with +	 * imx_cpu_kill() which is running on cpu0 and waiting for +	 * the register being cleared to kill the cpu. +	 */ +	imx_set_cpu_arg(cpu, ~0);  	cpu_do_idle();  }  int imx_cpu_kill(unsigned int cpu)  { +	unsigned long timeout = jiffies + msecs_to_jiffies(50); + +	while (imx_get_cpu_arg(cpu) == 0) +		if (time_after(jiffies, timeout)) +			return 0;  	imx_enable_cpu(cpu, false); +	imx_set_cpu_arg(cpu, 0);  	return 1;  } diff --git a/arch/arm/mach-imx/imx25-dt.c b/arch/arm/mach-imx/imx25-dt.c index e17dfbc4219..82348391582 100644 --- a/arch/arm/mach-imx/imx25-dt.c +++ b/arch/arm/mach-imx/imx25-dt.c @@ -22,26 +22,22 @@ static void __init imx25_dt_init(void)  	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);  } -static void __init imx25_timer_init(void) -{ -	mx25_clocks_init_dt(); -} - -static struct sys_timer imx25_timer = { -	.init = imx25_timer_init, -}; -  static const char * const imx25_dt_board_compat[] __initconst = {  	"fsl,imx25",  	NULL  }; +static void __init imx25_timer_init(void) +{ +	mx25_clocks_init_dt(); +} +  DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)")  	.map_io		= mx25_map_io,  	.init_early	= imx25_init_early,  	.init_irq	= mx25_init_irq,  	.handle_irq	= imx25_handle_irq, -	.timer		= &imx25_timer, +	.init_time	= imx25_timer_init,  	.init_machine	= imx25_dt_init,  	.dt_compat	= imx25_dt_board_compat,  	.restart	= mxc_restart, diff --git a/arch/arm/mach-imx/imx27-dt.c b/arch/arm/mach-imx/imx27-dt.c index ebfae96543c..4aaead0a77f 100644 --- a/arch/arm/mach-imx/imx27-dt.c +++ b/arch/arm/mach-imx/imx27-dt.c @@ -18,47 +18,31 @@  #include "common.h"  #include "mx27.h" -static const struct of_dev_auxdata imx27_auxdata_lookup[] __initconst = { -	OF_DEV_AUXDATA("fsl,imx27-uart", MX27_UART1_BASE_ADDR, "imx21-uart.0", NULL), -	OF_DEV_AUXDATA("fsl,imx27-uart", MX27_UART2_BASE_ADDR, "imx21-uart.1", NULL), -	OF_DEV_AUXDATA("fsl,imx27-uart", MX27_UART3_BASE_ADDR, "imx21-uart.2", NULL), -	OF_DEV_AUXDATA("fsl,imx27-fec", MX27_FEC_BASE_ADDR, "imx27-fec.0", NULL), -	OF_DEV_AUXDATA("fsl,imx27-i2c", MX27_I2C1_BASE_ADDR, "imx21-i2c.0", NULL), -	OF_DEV_AUXDATA("fsl,imx27-i2c", MX27_I2C2_BASE_ADDR, "imx21-i2c.1", NULL), -	OF_DEV_AUXDATA("fsl,imx27-cspi", MX27_CSPI1_BASE_ADDR, "imx27-cspi.0", NULL), -	OF_DEV_AUXDATA("fsl,imx27-cspi", MX27_CSPI2_BASE_ADDR, "imx27-cspi.1", NULL), -	OF_DEV_AUXDATA("fsl,imx27-cspi", MX27_CSPI3_BASE_ADDR, "imx27-cspi.2", NULL), -	OF_DEV_AUXDATA("fsl,imx27-wdt", MX27_WDOG_BASE_ADDR, "imx2-wdt.0", NULL), -	OF_DEV_AUXDATA("fsl,imx27-nand", MX27_NFC_BASE_ADDR, "imx27-nand.0", NULL), -	{ /* sentinel */ } -}; -  static void __init imx27_dt_init(void)  { -	of_platform_populate(NULL, of_default_bus_match_table, -			     imx27_auxdata_lookup, NULL); -} +	struct platform_device_info devinfo = { .name = "cpufreq-cpu0", }; -static void __init imx27_timer_init(void) -{ -	mx27_clocks_init_dt(); -} +	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); -static struct sys_timer imx27_timer = { -	.init = imx27_timer_init, -}; +	platform_device_register_full(&devinfo); +}  static const char * const imx27_dt_board_compat[] __initconst = {  	"fsl,imx27",  	NULL  }; +static void __init imx27_timer_init(void) +{ +	mx27_clocks_init_dt(); +} +  DT_MACHINE_START(IMX27_DT, "Freescale i.MX27 (Device Tree Support)")  	.map_io		= mx27_map_io,  	.init_early	= imx27_init_early,  	.init_irq	= mx27_init_irq,  	.handle_irq	= imx27_handle_irq, -	.timer		= &imx27_timer, +	.init_time	= imx27_timer_init,  	.init_machine	= imx27_dt_init,  	.dt_compat	= imx27_dt_board_compat,  	.restart	= mxc_restart, diff --git a/arch/arm/mach-imx/imx31-dt.c b/arch/arm/mach-imx/imx31-dt.c index af476de2570..67de611e29a 100644 --- a/arch/arm/mach-imx/imx31-dt.c +++ b/arch/arm/mach-imx/imx31-dt.c @@ -18,46 +18,27 @@  #include "common.h"  #include "mx31.h" -static const struct of_dev_auxdata imx31_auxdata_lookup[] __initconst = { -	OF_DEV_AUXDATA("fsl,imx31-uart", MX31_UART1_BASE_ADDR, -			"imx21-uart.0", NULL), -	OF_DEV_AUXDATA("fsl,imx31-uart", MX31_UART2_BASE_ADDR, -			"imx21-uart.1", NULL), -	OF_DEV_AUXDATA("fsl,imx31-uart", MX31_UART3_BASE_ADDR, -			"imx21-uart.2", NULL), -	OF_DEV_AUXDATA("fsl,imx31-uart", MX31_UART4_BASE_ADDR, -			"imx21-uart.3", NULL), -	OF_DEV_AUXDATA("fsl,imx31-uart", MX31_UART5_BASE_ADDR, -			"imx21-uart.4", NULL), -	{ /* sentinel */ } -}; -  static void __init imx31_dt_init(void)  { -	of_platform_populate(NULL, of_default_bus_match_table, -			     imx31_auxdata_lookup, NULL); -} - -static void __init imx31_timer_init(void) -{ -	mx31_clocks_init_dt(); +	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);  } -static struct sys_timer imx31_timer = { -	.init = imx31_timer_init, -}; -  static const char *imx31_dt_board_compat[] __initdata = {  	"fsl,imx31",  	NULL  }; +static void __init imx31_dt_timer_init(void) +{ +	mx31_clocks_init_dt(); +} +  DT_MACHINE_START(IMX31_DT, "Freescale i.MX31 (Device Tree Support)")  	.map_io		= mx31_map_io,  	.init_early	= imx31_init_early,  	.init_irq	= mx31_init_irq,  	.handle_irq	= imx31_handle_irq, -	.timer		= &imx31_timer, +	.init_time	= imx31_dt_timer_init,  	.init_machine	= imx31_dt_init,  	.dt_compat	= imx31_dt_board_compat,  	.restart	= mxc_restart, diff --git a/arch/arm/mach-imx/imx51-dt.c b/arch/arm/mach-imx/imx51-dt.c index 5ffa40c673f..ab24cc32211 100644 --- a/arch/arm/mach-imx/imx51-dt.c +++ b/arch/arm/mach-imx/imx51-dt.c @@ -21,29 +21,28 @@  static void __init imx51_dt_init(void)  { -	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); -} +	struct platform_device_info devinfo = { .name = "cpufreq-cpu0", }; -static void __init imx51_timer_init(void) -{ -	mx51_clocks_init_dt(); +	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); +	platform_device_register_full(&devinfo);  } -static struct sys_timer imx51_timer = { -	.init = imx51_timer_init, -}; -  static const char *imx51_dt_board_compat[] __initdata = {  	"fsl,imx51",  	NULL  }; +static void __init imx51_timer_init(void) +{ +	mx51_clocks_init_dt(); +} +  DT_MACHINE_START(IMX51_DT, "Freescale i.MX51 (Device Tree Support)")  	.map_io		= mx51_map_io,  	.init_early	= imx51_init_early,  	.init_irq	= mx51_init_irq,  	.handle_irq	= imx51_handle_irq, -	.timer		= &imx51_timer, +	.init_time	= imx51_timer_init,  	.init_machine	= imx51_dt_init,  	.init_late	= imx51_init_late,  	.dt_compat	= imx51_dt_board_compat, diff --git a/arch/arm/mach-imx/iomux-imx31.c b/arch/arm/mach-imx/iomux-imx31.c index cabefbc5e7c..7c66805d2cc 100644 --- a/arch/arm/mach-imx/iomux-imx31.c +++ b/arch/arm/mach-imx/iomux-imx31.c @@ -40,7 +40,7 @@ static DEFINE_SPINLOCK(gpio_mux_lock);  #define IOMUX_REG_MASK (IOMUX_PADNUM_MASK & ~0x3) -unsigned long mxc_pin_alloc_map[NB_PORTS * 32 / BITS_PER_LONG]; +static unsigned long mxc_pin_alloc_map[NB_PORTS * 32 / BITS_PER_LONG];  /*   * set the mode for a IOMUX pin.   */ diff --git a/arch/arm/mach-imx/iomux-mx50.h b/arch/arm/mach-imx/iomux-mx50.h deleted file mode 100644 index 00f56e0e800..00000000000 --- a/arch/arm/mach-imx/iomux-mx50.h +++ /dev/null @@ -1,977 +0,0 @@ -/* - * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved. - * - * 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. - */ - -#ifndef __MACH_IOMUX_MX50_H__ -#define __MACH_IOMUX_MX50_H__ - -#include "iomux-v3.h" - -#define MX50_ELCDIF_PAD_CTRL	(PAD_CTL_PKE | PAD_CTL_DSE_HIGH) - -#define MX50_SD_PAD_CTRL	(PAD_CTL_HYS | PAD_CTL_PKE | PAD_CTL_PUE | \ -					PAD_CTL_PUS_47K_UP | PAD_CTL_DSE_HIGH) - -#define MX50_UART_PAD_CTRL	(PAD_CTL_DSE_HIGH | PAD_CTL_PKE) - -#define MX50_I2C_PAD_CTRL	(PAD_CTL_ODE | PAD_CTL_DSE_HIGH | \ -					PAD_CTL_PUS_100K_UP | PAD_CTL_HYS) - -#define MX50_USB_PAD_CTRL	(PAD_CTL_PKE | PAD_CTL_PUE | \ -					PAD_CTL_DSE_HIGH | PAD_CTL_PUS_47K_UP) - -#define MX50_FEC_PAD_CTRL	(PAD_CTL_HYS | PAD_CTL_PKE | PAD_CTL_PUE | \ -					PAD_CTL_PUS_22K_UP | PAD_CTL_ODE | \ -					PAD_CTL_DSE_HIGH) - -#define MX50_OWIRE_PAD_CTRL	(PAD_CTL_HYS | PAD_CTL_PKE | PAD_CTL_PUE | \ -					PAD_CTL_PUS_100K_UP | PAD_CTL_ODE | \ -					PAD_CTL_DSE_HIGH | PAD_CTL_SRE_FAST) - -#define MX50_KEYPAD_CTRL        (PAD_CTL_HYS | PAD_CTL_PKE | PAD_CTL_PUE | \ -					PAD_CTL_PUS_100K_UP | PAD_CTL_DSE_HIGH) - -#define MX50_CSPI_SS_PAD	(PAD_CTL_PKE | PAD_CTL_PUE | \ -					PAD_CTL_PUS_22K_UP | PAD_CTL_DSE_HIGH) - -#define MX50_PAD_KEY_COL0__KEY_COL0	IOMUX_PAD(0x2CC, 0x20, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_KEY_COL0__GPIO_4_0	IOMUX_PAD(0x2CC, 0x20, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_KEY_COL0__NANDF_CLE	IOMUX_PAD(0x2CC, 0x20, 2, 0x0, 0, PAD_CTL_DSE_HIGH) - -#define MX50_PAD_KEY_ROW0__KEY_ROW0	IOMUX_PAD(0x2D0, 0x24, 0, 0x0, 0, MX50_KEYPAD_CTRL) -#define MX50_PAD_KEY_ROW0__GPIO_4_1	IOMUX_PAD(0x2D0, 0x24, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_KEY_ROW0__NANDF_ALE	IOMUX_PAD(0x2D0, 0x24, 2, 0x0, 0, PAD_CTL_DSE_HIGH) - -#define MX50_PAD_KEY_COL1__KEY_COL1	IOMUX_PAD(0x2D4, 0x28, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_KEY_COL1__GPIO_4_2	IOMUX_PAD(0x2D4, 0x28, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_KEY_COL1__NANDF_CE0	IOMUX_PAD(0x2D4, 0x28, 2, 0x0, 0, PAD_CTL_DSE_HIGH) - -#define MX50_PAD_KEY_ROW1__KEY_ROW1	IOMUX_PAD(0x2D8, 0x2C, 0, 0x0, 0, MX50_KEYPAD_CTRL) -#define MX50_PAD_KEY_ROW1__GPIO_4_3	IOMUX_PAD(0x2D8, 0x2C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_KEY_ROW1__NANDF_CE1	IOMUX_PAD(0x2D8, 0x2C, 2, 0x0, 0, PAD_CTL_DSE_HIGH) - -#define MX50_PAD_KEY_COL2__KEY_COL2	IOMUX_PAD(0x2DC, 0x30, 0, 0x0, 0, MX50_KEYPAD_CTRL) -#define MX50_PAD_KEY_COL2__GPIO_4_4	IOMUX_PAD(0x2DC, 0x30, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_KEY_COL2__NANDF_CE2	IOMUX_PAD(0x2DC, 0x30, 2, 0x0, 0, PAD_CTL_DSE_HIGH) - -#define MX50_PAD_KEY_ROW2__KEY_ROW2	IOMUX_PAD(0x2E0, 0x34, 0, 0x0, 0, MX50_KEYPAD_CTRL) -#define MX50_PAD_KEY_ROW2__GPIO_4_5	IOMUX_PAD(0x2E0, 0x34, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_KEY_ROW2__NANDF_CE3	IOMUX_PAD(0x2E0, 0x34, 2, 0x0, 0, PAD_CTL_DSE_HIGH) - -#define MX50_PAD_KEY_COL3__KEY_COL3	IOMUX_PAD(0x2E4, 0x38, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_KEY_COL3__GPIO_4_6	IOMUX_PAD(0x2E4, 0x38, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_KEY_COL3__NANDF_READY	IOMUX_PAD(0x2E4, 0x38, 2, 0x7b4, 0, PAD_CTL_PKE | \ -							PAD_CTL_PUE | PAD_CTL_PUS_100K_UP) -#define MX50_PAD_KEY_COL3__SDMA_EXT0	IOMUX_PAD(0x2E4, 0x38, 6, 0x7b8, 0, NO_PAD_CTRL) - -#define MX50_PAD_KEY_ROW3__KEY_ROW3	IOMUX_PAD(0x2E8, 0x3C, 0, 0x0, 0, MX50_KEYPAD_CTRL) -#define MX50_PAD_KEY_ROW3__GPIO_4_7	IOMUX_PAD(0x2E8, 0x3C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_KEY_ROW3__NANDF_DQS	IOMUX_PAD(0x2E8, 0x3C, 2, 0x7b0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_KEY_ROW3__SDMA_EXT1	IOMUX_PAD(0x2E8, 0x3C, 6, 0x7bc, 0, NO_PAD_CTRL) - -#define MX50_PAD_I2C1_SCL__I2C1_SCL	IOMUX_PAD(0x2EC, 0x40, IOMUX_CONFIG_SION, 0x0, 0, \ -							MX50_I2C_PAD_CTRL) -#define MX50_PAD_I2C1_SCL__GPIO_6_18	IOMUX_PAD(0x2EC, 0x40, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_I2C1_SCL__UART2_TXD	IOMUX_PAD(0x2EC, 0x40, 2, 0x0, 0, MX50_UART_PAD_CTRL) - -#define MX50_PAD_I2C1_SDA__I2C1_SDA	IOMUX_PAD(0x2F0, 0x44, IOMUX_CONFIG_SION, 0x0, 0, \ -							MX50_I2C_PAD_CTRL) -#define MX50_PAD_I2C1_SDA__GPIO_6_19	IOMUX_PAD(0x2F0, 0x44, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_I2C1_SDA__UART2_RXD	IOMUX_PAD(0x2F0, 0x44, 2, 0x7cc, 1, MX50_UART_PAD_CTRL) - -#define MX50_PAD_I2C2_SCL__I2C2_SCL	IOMUX_PAD(0x2F4, 0x48, IOMUX_CONFIG_SION, 0x0, 0, \ -							MX50_I2C_PAD_CTRL) -#define MX50_PAD_I2C2_SCL__GPIO_6_20	IOMUX_PAD(0x2F4, 0x48, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_I2C2_SCL__UART2_CTS	IOMUX_PAD(0x2F4, 0x48, 2, 0x0, 0, MX50_UART_PAD_CTRL) -#define MX50_PAD_I2C2_SCL__DCDC_OK	IOMUX_PAD(0x2F4, 0x48, 7, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_I2C2_SDA__I2C2_SDA	IOMUX_PAD(0x2F8, 0x4C, IOMUX_CONFIG_SION, 0x0, 0, \ -							MX50_I2C_PAD_CTRL) -#define MX50_PAD_I2C2_SDA__GPIO_6_21	IOMUX_PAD(0x2F8, 0x4C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_I2C2_SDA__UART2_RTS	IOMUX_PAD(0x2F8, 0x4C, 2, 0x7c8, 1, MX50_UART_PAD_CTRL) -#define MX50_PAD_I2C2_SDA__PWRSTABLE	IOMUX_PAD(0x2F8, 0x4C, 7, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_I2C3_SCL__I2C3_SCL	IOMUX_PAD(0x2FC, 0x50, IOMUX_CONFIG_SION, 0x0, 0, \ -							MX50_I2C_PAD_CTRL) -#define MX50_PAD_I2C3_SCL__GPIO_6_22	IOMUX_PAD(0x2FC, 0x50, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_I2C3_SCL__FEC_MDC	IOMUX_PAD(0x2FC, 0x50, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_I2C3_SCL__PMIC_RDY	IOMUX_PAD(0x2FC, 0x50, 3, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_I2C3_SCL__GPT_CAPIN1	IOMUX_PAD(0x2FC, 0x50, 5, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_I2C3_SCL__USBOTG_OC	IOMUX_PAD(0x2FC, 0x50, 7, 0x7E8, 0, MX50_USB_PAD_CTRL) - -#define MX50_PAD_I2C3_SDA__I2C3_SDA	IOMUX_PAD(0x300, 0x54, IOMUX_CONFIG_SION, 0x0, 0, \ -								MX50_I2C_PAD_CTRL) -#define MX50_PAD_I2C3_SDA__GPIO_6_23	IOMUX_PAD(0x300, 0x54, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_I2C3_SDA__FEC_MDIO	IOMUX_PAD(0x300, 0x54, 2, 0x774, 0, MX50_FEC_PAD_CTRL) -#define MX50_PAD_I2C3_SDA__PWRFAIL_INT	IOMUX_PAD(0x300, 0x54, 3, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_I2C3_SDA__ALARM_DEB	IOMUX_PAD(0x300, 0x54, 4, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_I2C3_SDA__GPT_CAPIN1	IOMUX_PAD(0x300, 0x54, 5, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_I2C3_SDA__USBOTG_PWR	IOMUX_PAD(0x300, 0x54, 7, 0x0, 0, \ -							PAD_CTL_PKE | PAD_CTL_DSE_HIGH) - -#define MX50_PAD_PWM1__PWM1_PWMO	IOMUX_PAD(0x304, 0x58, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_PWM1__GPIO_6_24	IOMUX_PAD(0x304, 0x58, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_PWM1__USBOTG_OC	IOMUX_PAD(0x304, 0x58, 2, 0x7E8, 1, MX50_USB_PAD_CTRL) -#define MX50_PAD_PWM1__GPT_CMPOUT1	IOMUX_PAD(0x304, 0x58, 5, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_PWM2__PWM2_PWMO	IOMUX_PAD(0x308, 0x5C, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_PWM2__GPIO_6_25	IOMUX_PAD(0x308, 0x5C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_PWM2__USBOTG_PWR	IOMUX_PAD(0x308, 0x5C, 2, 0x0, 0, \ -							PAD_CTL_PKE | PAD_CTL_DSE_HIGH) -#define MX50_PAD_PWM2__DCDC_PWM		IOMUX_PAD(0x308, 0x5C, 4, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_PWM2__GPT_CMPOUT2	IOMUX_PAD(0x308, 0x5C, 5, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_PWM2__ANY_PU_RST	IOMUX_PAD(0x308, 0x5C, 7, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_OWIRE__OWIRE		IOMUX_PAD(0x30C, 0x60, 0, 0x0, 0, MX50_OWIRE_PAD_CTRL) -#define MX50_PAD_OWIRE__GPIO_6_26	IOMUX_PAD(0x30C, 0x60, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_OWIRE__USBH1_OC	IOMUX_PAD(0x30C, 0x60, 2, 0x0, 0, MX50_USB_PAD_CTRL) -#define MX50_PAD_OWIRE__SSI_EXT1_CLK	IOMUX_PAD(0x30C, 0x60, 3, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_OWIRE__EPDC_PWRIRQ	IOMUX_PAD(0x30C, 0x60, 4, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_OWIRE__GPT_CMPOUT3	IOMUX_PAD(0x30C, 0x60, 5, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPITO__EPITO		IOMUX_PAD(0x310, 0x64, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPITO__GPIO_6_27	IOMUX_PAD(0x310, 0x64, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPITO__USBH1_PWR	IOMUX_PAD(0x310, 0x64, 2, 0x0, 0, \ -							PAD_CTL_PKE | PAD_CTL_DSE_HIGH) -#define MX50_PAD_EPITO__SSI_EXT2_CLK	IOMUX_PAD(0x310, 0x64, 3, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPITO__TOG_EN		IOMUX_PAD(0x310, 0x64, 4, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPITO__GPT_CLKIN	IOMUX_PAD(0x310, 0x64, 5, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_WDOG__WDOG		IOMUX_PAD(0x314, 0x68, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_WDOG__GPIO_6_28	IOMUX_PAD(0x314, 0x68, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_WDOG__WDOG_RST		IOMUX_PAD(0x314, 0x68, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_WDOG__XTAL32K		IOMUX_PAD(0x314, 0x68, 6, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SSI_TXFS__SSI_TXFS	IOMUX_PAD(0x318, 0x6C, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SSI_TXFS__GPIO_6_0	IOMUX_PAD(0x318, 0x6C, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SSI_TXC__SSI_TXC	IOMUX_PAD(0x31C, 0x70, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SSI_TXC__GPIO_6_1	IOMUX_PAD(0x31C, 0x70, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SSI_TXD__SSI_TXD	IOMUX_PAD(0x320, 0x74, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SSI_TXD__GPIO_6_2	IOMUX_PAD(0x320, 0x74, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SSI_TXD__CSPI_RDY	IOMUX_PAD(0x320, 0x74, 4, 0x6e8, 0, NO_PAD_CTRL) - -#define MX50_PAD_SSI_RXD__SSI_RXD	IOMUX_PAD(0x324, 0x78, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SSI_RXD__GPIO_6_3	IOMUX_PAD(0x324, 0x78, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SSI_RXD__CSPI_SS3	IOMUX_PAD(0x324, 0x78, 4, 0x6f4, 0, MX50_CSPI_SS_PAD) - -#define MX50_PAD_SSI_RXFS__AUD3_RXFS	IOMUX_PAD(0x328, 0x7C, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SSI_RXFS__GPIO_6_4	IOMUX_PAD(0x328, 0x7C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SSI_RXFS__UART5_TXD	IOMUX_PAD(0x328, 0x7C, 2, 0x0, 0, MX50_UART_PAD_CTRL) -#define MX50_PAD_SSI_RXFS__WEIM_D6	IOMUX_PAD(0x328, 0x7C, 3, 0x804, 0, NO_PAD_CTRL) -#define MX50_PAD_SSI_RXFS__CSPI_SS2	IOMUX_PAD(0x328, 0x7C, 4, 0x6f0, 0, MX50_CSPI_SS_PAD) -#define MX50_PAD_SSI_RXFS__FEC_COL	IOMUX_PAD(0x328, 0x7C, 5, 0x770, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_SSI_RXFS__FEC_MDC	IOMUX_PAD(0x328, 0x7C, 6, 0x0, 0, PAD_CTL_DSE_HIGH) - -#define MX50_PAD_SSI_RXC__AUD3_RXC	IOMUX_PAD(0x32C, 0x80, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SSI_RXC__GPIO_6_5	IOMUX_PAD(0x32C, 0x80, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SSI_RXC__UART5_RXD	IOMUX_PAD(0x32C, 0x80, 2, 0x7e4, 1, MX50_UART_PAD_CTRL) -#define MX50_PAD_SSI_RXC__WEIM_D7	IOMUX_PAD(0x32C, 0x80, 3, 0x808, 0, NO_PAD_CTRL) -#define MX50_PAD_SSI_RXC__CSPI_SS1	IOMUX_PAD(0x32C, 0x80, 4, 0x6ec, 0, MX50_CSPI_SS_PAD) -#define MX50_PAD_SSI_RXC__FEC_RX_CLK	IOMUX_PAD(0x32C, 0x80, 5, 0x780, 0, NO_PAD_CTRL) -#define MX50_PAD_SSI_RXC__FEC_MDIO	IOMUX_PAD(0x32C, 0x80, 6, 0x774, 1, MX50_FEC_PAD_CTRL) - -#define MX50_PAD_UART1_TXD__UART1_TXD	IOMUX_PAD(0x330, 0x84, 0, 0x0, 0, MX50_UART_PAD_CTRL) -#define MX50_PAD_UART1_TXD__GPIO_6_6	IOMUX_PAD(0x330, 0x84, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_UART1_RXD__UART1_RXD	IOMUX_PAD(0x334, 0x88, 0, 0x7c4, 1, MX50_UART_PAD_CTRL) -#define MX50_PAD_UART1_RXD__GPIO_6_7	IOMUX_PAD(0x334, 0x88, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_UART1_CTS__UART1_CTS	IOMUX_PAD(0x338, 0x8C, 0, 0x0, 0, MX50_UART_PAD_CTRL) -#define MX50_PAD_UART1_CTS__GPIO_6_8	IOMUX_PAD(0x338, 0x8C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_UART1_CTS__UART5_TXD	IOMUX_PAD(0x338, 0x8C, 2, 0x0, 0, MX50_UART_PAD_CTRL) -#define MX50_PAD_UART1_CTS__SD4_D4	IOMUX_PAD(0x338, 0x8C, 4, 0x760, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART1_CTS__SD4_CMD	IOMUX_PAD(0x338, 0x8C, 5, 0x74c, 0, MX50_SD_PAD_CTRL) - -#define MX50_PAD_UART1_RTS__UART1_RTS	IOMUX_PAD(0x33C, 0x90, 0, 0x7c0, 1, MX50_UART_PAD_CTRL) -#define MX50_PAD_UART1_RTS__GPIO_6_9	IOMUX_PAD(0x33C, 0x90, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_UART1_RTS__UART5_RXD	IOMUX_PAD(0x33C, 0x90, 2, 0x7e4, 3, MX50_UART_PAD_CTRL) -#define MX50_PAD_UART1_RTS__SD4_D5	IOMUX_PAD(0x33C, 0x90, 4, 0x764, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART1_RTS__SD4_CLK	IOMUX_PAD(0x33C, 0x90, 5, 0x748, 0, MX50_SD_PAD_CTRL) - -#define MX50_PAD_UART2_TXD__UART2_TXD	IOMUX_PAD(0x340, 0x94, 0, 0x0, 0, MX50_UART_PAD_CTRL) -#define MX50_PAD_UART2_TXD__GPIO_6_10	IOMUX_PAD(0x340, 0x94, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_UART2_TXD__SD4_D6	IOMUX_PAD(0x340, 0x94, 4, 0x768, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART2_TXD__SD4_D4	IOMUX_PAD(0x340, 0x94, 5, 0x760, 1, MX50_SD_PAD_CTRL) - -#define MX50_PAD_UART2_RXD__UART2_RXD	IOMUX_PAD(0x344, 0x98, 0, 0x7cc, 3, MX50_UART_PAD_CTRL) -#define MX50_PAD_UART2_RXD__GPIO_6_11	IOMUX_PAD(0x344, 0x98, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_UART2_RXD__SD4_D7	IOMUX_PAD(0x344, 0x98, 4, 0x76c, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART2_RXD__SD4_D5	IOMUX_PAD(0x344, 0x98, 5, 0x764, 1, MX50_SD_PAD_CTRL) - -#define MX50_PAD_UART2_CTS__UART2_CTS	IOMUX_PAD(0x348, 0x9C, 0, 0x0, 0, MX50_UART_PAD_CTRL) -#define MX50_PAD_UART2_CTS__GPIO_6_12	IOMUX_PAD(0x348, 0x9C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_UART2_CTS__SD4_CMD	IOMUX_PAD(0x348, 0x9C, 4, 0x74c, 1, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART2_CTS__SD4_D6	IOMUX_PAD(0x348, 0x9C, 5, 0x768, 1, MX50_SD_PAD_CTRL) - -#define MX50_PAD_UART2_RTS__UART2_RTS	IOMUX_PAD(0x34C, 0xA0, 0, 0x7c8, 3, MX50_UART_PAD_CTRL) -#define MX50_PAD_UART2_RTS__GPIO_6_13	IOMUX_PAD(0x34C, 0xA0, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_UART2_RTS__SD4_CLK	IOMUX_PAD(0x34C, 0xA0, 4, 0x748, 1, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART2_RTS__SD4_D7	IOMUX_PAD(0x34C, 0xA0, 5, 0x76c, 1, MX50_SD_PAD_CTRL) - -#define MX50_PAD_UART3_TXD__UART3_TXD	IOMUX_PAD(0x350, 0xA4, 0, 0x0, 0, MX50_UART_PAD_CTRL) -#define MX50_PAD_UART3_TXD__GPIO_6_14	IOMUX_PAD(0x350, 0xA4, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_UART3_TXD__SD1_D4	IOMUX_PAD(0x350, 0xA4, 3, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART3_TXD__SD4_D0	IOMUX_PAD(0x350, 0xA4, 4, 0x750, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART3_TXD__SD2_WP	IOMUX_PAD(0x350, 0xA4, 5, 0x744, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART3_TXD__WEIM_D12	IOMUX_PAD(0x350, 0xA4, 6, 0x81c, 0, NO_PAD_CTRL) - -#define MX50_PAD_UART3_RXD__UART3_RXD	IOMUX_PAD(0x354, 0xA8, 0, 0x7d4, 1, MX50_UART_PAD_CTRL) -#define MX50_PAD_UART3_RXD__GPIO_6_15	IOMUX_PAD(0x354, 0xA8, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_UART3_RXD__SD1_D5	IOMUX_PAD(0x354, 0xA8, 3, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART3_RXD__SD4_D1	IOMUX_PAD(0x354, 0xA8, 4, 0x754, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART3_RXD__SD2_CD	IOMUX_PAD(0x354, 0xA8, 5, 0x740, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART3_RXD__WEIM_D13	IOMUX_PAD(0x354, 0xA8, 6, 0x820, 0, NO_PAD_CTRL) - -#define MX50_PAD_UART4_TXD__UART4_TXD	IOMUX_PAD(0x358, 0xAC, 0, 0x0, 0, MX50_UART_PAD_CTRL) -#define MX50_PAD_UART4_TXD__GPIO_6_16	IOMUX_PAD(0x358, 0xAC, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_UART4_TXD__UART3_CTS	IOMUX_PAD(0x358, 0xAC, 2, 0x0, 0, MX50_UART_PAD_CTRL) -#define MX50_PAD_UART4_TXD__SD1_D6	IOMUX_PAD(0x358, 0xAC, 3, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART4_TXD__SD4_D2	IOMUX_PAD(0x358, 0xAC, 4, 0x758, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART4_TXD__SD2_LCTL	IOMUX_PAD(0x358, 0xAC, 5, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART4_TXD__WEIM_D14	IOMUX_PAD(0x358, 0xAC, 6, 0x824, 0, NO_PAD_CTRL) - -#define MX50_PAD_UART4_RXD__UART4_RXD	IOMUX_PAD(0x35C, 0xB0, 0, 0x7dc, 1, MX50_UART_PAD_CTRL) -#define MX50_PAD_UART4_RXD__GPIO_6_17	IOMUX_PAD(0x35C, 0xB0, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_UART4_RXD__UART3_RTS	IOMUX_PAD(0x35C, 0xB0, 2, 0x7d0, 1, MX50_UART_PAD_CTRL) -#define MX50_PAD_UART4_RXD__SD1_D7	IOMUX_PAD(0x35C, 0xB0, 3, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART4_RXD__SD4_D3	IOMUX_PAD(0x35C, 0xB0, 4, 0x75c, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART4_RXD__SD1_LCTL	IOMUX_PAD(0x35C, 0xB0, 5, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_UART4_RXD__WEIM_D15	IOMUX_PAD(0x35C, 0xB0, 6, 0x828, 0, NO_PAD_CTRL) - -#define MX50_PAD_CSPI_SCLK__CSPI_SCLK	IOMUX_PAD(0x360, 0xB4, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_CSPI_SCLK__GPIO_4_8	IOMUX_PAD(0x360, 0xB4, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_CSPI_MOSI__CSPI_MOSI	IOMUX_PAD(0x364, 0xB8, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_CSPI_MOSI__GPIO_4_9	IOMUX_PAD(0x364, 0xB8, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_CSPI_MISO__CSPI_MISO	IOMUX_PAD(0x368, 0xBC, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_CSPI_MISO__GPIO_4_10	IOMUX_PAD(0x368, 0xBC, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_CSPI_SS0__CSPI_SS0	IOMUX_PAD(0x36C, 0xC0, 0, 0x0, 0, MX50_CSPI_SS_PAD) -#define MX50_PAD_CSPI_SS0__GPIO_4_11	IOMUX_PAD(0x36C, 0xC0, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_ECSPI1_SCLK__ECSPI1_SCLK	IOMUX_PAD(0x370, 0xC4, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI1_SCLK__GPIO_4_12		IOMUX_PAD(0x370, 0xC4, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI1_SCLK__CSPI_RDY		IOMUX_PAD(0x370, 0xC4, 2, 0x6e8, 1, NO_PAD_CTRL) -#define MX50_PAD_ECSPI1_SCLK__ECSPI2_RDY	IOMUX_PAD(0x370, 0xC4, 3, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI1_SCLK__UART3_RTS		IOMUX_PAD(0x370, 0xC4, 4, 0x7d0, 2, MX50_UART_PAD_CTRL) -#define MX50_PAD_ECSPI1_SCLK__EPDC_SDCE6	IOMUX_PAD(0x370, 0xC4, 5, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI1_SCLK__WEIM_D8		IOMUX_PAD(0x370, 0xC4, 7, 0x80c, 0, NO_PAD_CTRL) - -#define MX50_PAD_ECSPI1_MOSI__ECSPI1_MOSI	IOMUX_PAD(0x374, 0xC8, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI1_MOSI__GPIO_4_13		IOMUX_PAD(0x374, 0xC8, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI1_MOSI__CSPI_SS1		IOMUX_PAD(0x374, 0xC8, 2, 0x6ec, 1, MX50_CSPI_SS_PAD) -#define MX50_PAD_ECSPI1_MOSI__ECSPI2_SS1	IOMUX_PAD(0x374, 0xC8, 3, 0x0, 0, MX50_CSPI_SS_PAD) -#define MX50_PAD_ECSPI1_MOSI__UART3_CTS		IOMUX_PAD(0x374, 0xC8, 4, 0x0, 0, MX50_UART_PAD_CTRL) -#define MX50_PAD_ECSPI1_MOSI__EPDC_SDCE7	IOMUX_PAD(0x374, 0xC8, 5, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI1_MOSI__WEIM_D9		IOMUX_PAD(0x374, 0xC8, 7, 0x810, 0, NO_PAD_CTRL) - -#define MX50_PAD_ECSPI1_MISO__ECSPI1_MISO	IOMUX_PAD(0x378, 0xCC, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI1_MISO__GPIO_4_14		IOMUX_PAD(0x378, 0xCC, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI1_MISO__CSPI_SS2		IOMUX_PAD(0x378, 0xCC, 2, 0x6f0, 1, MX50_CSPI_SS_PAD) -#define MX50_PAD_ECSPI1_MISO__ECSPI2_SS2	IOMUX_PAD(0x378, 0xCC, 3, 0x0, 0, MX50_CSPI_SS_PAD) -#define MX50_PAD_ECSPI1_MISO__UART4_RTS		IOMUX_PAD(0x378, 0xCC, 4, 0x7d8, 0, MX50_UART_PAD_CTRL) -#define MX50_PAD_ECSPI1_MISO__EPDC_SDCE8	IOMUX_PAD(0x378, 0xCC, 5, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI1_MISO__WEIM_D10		IOMUX_PAD(0x378, 0xCC, 7, 0x814, 0, NO_PAD_CTRL) - -#define MX50_PAD_ECSPI1_SS0__ECSPI1_SS0		IOMUX_PAD(0x37C, 0xD0, 0, 0x0, 0, MX50_CSPI_SS_PAD) -#define MX50_PAD_ECSPI1_SS0__GPIO_4_15		IOMUX_PAD(0x37C, 0xD0, 1, 0x0, 0, PAD_CTL_PUS_100K_UP) -#define MX50_PAD_ECSPI1_SS0__CSPI_SS3		IOMUX_PAD(0x37C, 0xD0, 2, 0x6f4, 1, MX50_CSPI_SS_PAD) -#define MX50_PAD_ECSPI1_SS0__ECSPI2_SS3		IOMUX_PAD(0x37C, 0xD0, 3, 0x0, 0, MX50_CSPI_SS_PAD) -#define MX50_PAD_ECSPI1_SS0__UART4_CTS		IOMUX_PAD(0x37C, 0xD0, 4, 0x0, 0, MX50_UART_PAD_CTRL) -#define MX50_PAD_ECSPI1_SS0__EPDC_SDCE9		IOMUX_PAD(0x37C, 0xD0, 5, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI1_SS0__WEIM_D11		IOMUX_PAD(0x37C, 0xD0, 7, 0x818, 0, NO_PAD_CTRL) - -#define MX50_PAD_ECSPI2_SCLK__ECSPI2_SCLK	IOMUX_PAD(0x380, 0xD4, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_SCLK__GPIO_4_16		IOMUX_PAD(0x380, 0xD4, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_SCLK__ELCDIF_WR		IOMUX_PAD(0x380, 0xD4, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_SCLK__ECSPI1_RDY	IOMUX_PAD(0x380, 0xD4, 3, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_SCLK__UART5_RTS		IOMUX_PAD(0x380, 0xD4, 4, 0x7e0, 0, MX50_UART_PAD_CTRL) -#define MX50_PAD_ECSPI2_SCLK__ELCDIF_DOTCLK	IOMUX_PAD(0x380, 0xD4, 5, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_SCLK__NANDF_CEN4	IOMUX_PAD(0x380, 0xD4, 6, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_SCLK__WEIM_D8		IOMUX_PAD(0x380, 0xD4, 7, 0x80c, 1, NO_PAD_CTRL) - -#define MX50_PAD_ECSPI2_MOSI__ECSPI2_MOSI	IOMUX_PAD(0x384, 0xD8, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_MOSI__GPIO_4_17		IOMUX_PAD(0x384, 0xD8, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_MOSI__ELCDIF_RD		IOMUX_PAD(0x384, 0xD8, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_MOSI__ECSPI1_SS1	IOMUX_PAD(0x384, 0xD8, 3, 0x0, 0, MX50_CSPI_SS_PAD) -#define MX50_PAD_ECSPI2_MOSI__UART5_CTS		IOMUX_PAD(0x384, 0xD8, 4, 0x0, 0, MX50_UART_PAD_CTRL) -#define MX50_PAD_ECSPI2_MOSI__ELCDIF_EN		IOMUX_PAD(0x384, 0xD8, 5, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_MOSI__NANDF_CEN5	IOMUX_PAD(0x384, 0xD8, 6, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_MOSI__WEIM_D9		IOMUX_PAD(0x384, 0xD8, 7, 0x810, 1, NO_PAD_CTRL) - -#define MX50_PAD_ECSPI2_MISO__ECSPI2_MISO	IOMUX_PAD(0x388, 0xDC, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_MISO__GPIO_4_18		IOMUX_PAD(0x388, 0xDC, 1, 0x0, 0, PAD_CTL_PUS_100K_UP) -#define MX50_PAD_ECSPI2_MISO__ELCDIF_RS		IOMUX_PAD(0x388, 0xDC, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_MISO__ECSPI1_SS2	IOMUX_PAD(0x388, 0xDC, 3, 0x0, 0, MX50_CSPI_SS_PAD) -#define MX50_PAD_ECSPI2_MISO__UART5_TXD		IOMUX_PAD(0x388, 0xDC, 4, 0x0, 0, MX50_UART_PAD_CTRL) -#define MX50_PAD_ECSPI2_MISO__ELCDIF_VSYNC	IOMUX_PAD(0x388, 0xDC, 5, 0x73c, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_MISO__NANDF_CEN6	IOMUX_PAD(0x388, 0xDC, 6, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_MISO__WEIM_D10		IOMUX_PAD(0x388, 0xDC, 7, 0x814, 1, NO_PAD_CTRL) - -#define MX50_PAD_ECSPI2_SS0__ECSPI2_SS0		IOMUX_PAD(0x38C, 0xE0, 0, 0x0, 0, MX50_CSPI_SS_PAD) -#define MX50_PAD_ECSPI2_SS0__GPIO_4_19		IOMUX_PAD(0x38C, 0xE0, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_SS0__ELCDIF_CS		IOMUX_PAD(0x38C, 0xE0, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_SS0__ECSPI1_SS3		IOMUX_PAD(0x38C, 0xE0, 3, 0x0, 0, MX50_CSPI_SS_PAD) -#define MX50_PAD_ECSPI2_SS0__UART5_RXD		IOMUX_PAD(0x38C, 0xE0, 4, 0x7e4, 5, MX50_UART_PAD_CTRL) -#define MX50_PAD_ECSPI2_SS0__ELCDIF_HSYNC	IOMUX_PAD(0x38C, 0xE0, 5, 0x6f8, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_SS0__NANDF_CEN7		IOMUX_PAD(0x38C, 0xE0, 6, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_ECSPI2_SS0__WEIM_D11		IOMUX_PAD(0x38C, 0xE0, 7, 0x818, 1, NO_PAD_CTRL) - -#define MX50_PAD_SD1_CLK__SD1_CLK	IOMUX_PAD(0x390, 0xE4, IOMUX_CONFIG_SION, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD1_CLK__GPIO_5_0	IOMUX_PAD(0x390, 0xE4, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD1_CLK__CLKO		IOMUX_PAD(0x390, 0xE4, 7, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD1_CMD__SD1_CMD	IOMUX_PAD(0x394, 0xE8, IOMUX_CONFIG_SION, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD1_CMD__GPIO_5_1	IOMUX_PAD(0x394, 0xE8, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD1_CMD__CLKO2		IOMUX_PAD(0x394, 0xE8, 7, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD1_D0__SD1_D0		IOMUX_PAD(0x398, 0xEC, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD1_D0__GPIO_5_2	IOMUX_PAD(0x398, 0xEC, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD1_D0__PLL1_BYP	IOMUX_PAD(0x398, 0xEC, 7, 0x6dc, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD1_D1__SD1_D1		IOMUX_PAD(0x39C, 0xF0, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD1_D1__GPIO_5_3	IOMUX_PAD(0x39C, 0xF0, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD1_D1__PLL2_BYP	IOMUX_PAD(0x39C, 0xF0, 7, 0x6e0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD1_D2__SD1_D2		IOMUX_PAD(0x3A0, 0xF4, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD1_D2__GPIO_5_4	IOMUX_PAD(0x3A0, 0xF4, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD1_D2__PLL3_BYP	IOMUX_PAD(0x3A0, 0xF4, 7, 0x6e4, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD1_D3__SD1_D3		IOMUX_PAD(0x3A4, 0xF8, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD1_D3__GPIO_5_5	IOMUX_PAD(0x3A4, 0xF8, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD2_CLK__SD2_CLK	IOMUX_PAD(0x3A8, 0xFC, IOMUX_CONFIG_SION, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD2_CLK__GPIO_5_6	IOMUX_PAD(0x3A8, 0xFC, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_CLK__MSHC_SCLK	IOMUX_PAD(0x3A8, 0xFC, 2, 0x0, 0, MX50_SD_PAD_CTRL) - -#define MX50_PAD_SD2_CMD__SD2_CMD	IOMUX_PAD(0x3AC, 0x100, IOMUX_CONFIG_SION, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD2_CMD__GPIO_5_7	IOMUX_PAD(0x3AC, 0x100, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_CMD__MSHC_BS	IOMUX_PAD(0x3AC, 0x100, 2, 0x0, 0, MX50_SD_PAD_CTRL) - -#define MX50_PAD_SD2_D0__SD2_D0		IOMUX_PAD(0x3B0, 0x104, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD2_D0__GPIO_5_8	IOMUX_PAD(0x3B0, 0x104, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D0__MSHC_D0	IOMUX_PAD(0x3B0, 0x104, 2, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD2_D0__KEY_COL4	IOMUX_PAD(0x3B0, 0x104, 3, 0x790, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD2_D1__SD2_D1		IOMUX_PAD(0x3B4, 0x108, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD2_D1__GPIO_5_9	IOMUX_PAD(0x3B4, 0x108, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D1__MSHC_D1	IOMUX_PAD(0x3B4, 0x108, 2, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD2_D1__KEY_ROW4	IOMUX_PAD(0x3B4, 0x108, 3, 0x7a0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD2_D2__SD2_D2		IOMUX_PAD(0x3B8, 0x10C, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD2_D2__GPIO_5_10	IOMUX_PAD(0x3B8, 0x10C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D2__MSHC_D2	IOMUX_PAD(0x3B8, 0x10C, 2, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD2_D2__KEY_COL5	IOMUX_PAD(0x3B8, 0x10C, 3, 0x794, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD2_D3__SD2_D3		IOMUX_PAD(0x3BC, 0x110, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD2_D3__GPIO_5_11	IOMUX_PAD(0x3BC, 0x110, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D3__MSHC_D3	IOMUX_PAD(0x3BC, 0x110, 2, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD2_D3__KEY_ROW5	IOMUX_PAD(0x3BC, 0x110, 3, 0x7a4, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD2_D4__SD2_D4		IOMUX_PAD(0x3C0, 0x114, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD2_D4__GPIO_5_12	IOMUX_PAD(0x3C0, 0x114, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D4__AUD4_RXFS	IOMUX_PAD(0x3C0, 0x114, 2, 0x6d0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D4__KEY_COL6	IOMUX_PAD(0x3C0, 0x114, 3, 0x798, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D4__WEIM_D0	IOMUX_PAD(0x3C0, 0x114, 4, 0x7ec, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D4__CCM_OUT0	IOMUX_PAD(0x3C0, 0x114, 7, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD2_D5__SD2_D5		IOMUX_PAD(0x3C4, 0x118, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD2_D5__GPIO_5_13	IOMUX_PAD(0x3C4, 0x118, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D5__AUD4_RXC	IOMUX_PAD(0x3C4, 0x118, 2, 0x6cc, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D5__KEY_ROW6	IOMUX_PAD(0x3C4, 0x118, 3, 0x7a8, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D5__WEIM_D1	IOMUX_PAD(0x3C4, 0x118, 4, 0x7f0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D5__CCM_OUT1	IOMUX_PAD(0x3C4, 0x118, 7, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD2_D6__SD2_D6		IOMUX_PAD(0x3C8, 0x11C, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD2_D6__GPIO_5_14	IOMUX_PAD(0x3C8, 0x11C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D6__AUD4_RXD	IOMUX_PAD(0x3C8, 0x11C, 2, 0x6c4, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D6__KEY_COL7	IOMUX_PAD(0x3C8, 0x11C, 3, 0x79c, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D6__WEIM_D2	IOMUX_PAD(0x3C8, 0x11C, 4, 0x7f4, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D6__CCM_OUT2	IOMUX_PAD(0x3C8, 0x11C, 7, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD2_D7__SD2_D7		IOMUX_PAD(0x3CC, 0x120, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD2_D7__GPIO_5_15	IOMUX_PAD(0x3CC, 0x120, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D7__AUD4_TXFS	IOMUX_PAD(0x3CC, 0x120, 2, 0x6d8, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D7__KEY_ROW7	IOMUX_PAD(0x3CC, 0x120, 3, 0x7ac, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D7__WEIM_D3	IOMUX_PAD(0x3CC, 0x120, 4, 0x7f8, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_D7__CCM_STOP	IOMUX_PAD(0x3CC, 0x120, 7, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD2_WP__SD2_WP		IOMUX_PAD(0x3D0, 0x124, 0, 0x744, 1, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD2_WP__GPIO_5_16	IOMUX_PAD(0x3D0, 0x124, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_WP__AUD4_TXD	IOMUX_PAD(0x3D0, 0x124, 2, 0x6c8, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_WP__WEIM_D4	IOMUX_PAD(0x3D0, 0x124, 4, 0x7fc, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_WP__CCM_WAIT	IOMUX_PAD(0x3D0, 0x124, 7, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD2_CD__SD2_CD		IOMUX_PAD(0x3D4, 0x128, 0, 0x740, 1, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD2_CD__GPIO_5_17	IOMUX_PAD(0x3D4, 0x128, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_CD__AUD4_TXC	IOMUX_PAD(0x3D4, 0x128, 2, 0x6d4, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_CD__WEIM_D5	IOMUX_PAD(0x3D4, 0x128, 4, 0x800, 0, NO_PAD_CTRL) -#define MX50_PAD_SD2_CD__CCM_REF_EN	IOMUX_PAD(0x3D4, 0x128, 7, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_PMIC_ON_REQ__PMIC_ON_REQ	IOMUX_PAD(0x3D8, 0, 0, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_PMIC_STBY_REQ__PMIC_STBY_REQ	IOMUX_PAD(0x3DC, 0, 0, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_PMIC_PORT_B__PMIC_PORT_B	IOMUX_PAD(0x3E0, 0, 0, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_PMIC_BOOT_MODE1__PMIC_BOOT_MODE1	IOMUX_PAD(0x3E4, 0, 0, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_PMIC_RESET_IN_B__PMIC_RESET_IN_B	IOMUX_PAD(0x3E8, 0, 0, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_PMIC_BOOT_MODE0__PMIC_BOOT_MODE0	IOMUX_PAD(0x3EC, 0, 0, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_PMIC_TEST_MODE__PMIC_TEST_MODE	IOMUX_PAD(0x3F0, 0, 0, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_PMIC_JTAG_TMS__PMIC_JTAG_TMS	IOMUX_PAD(0x3F4, 0, 0, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_PMIC_JTAG_MOD__PMIC_JTAG_MOD	IOMUX_PAD(0x3F8, 0, 0, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_PMIC_JTAG_TRSTB__PMIC_JTAG_TRSTB	IOMUX_PAD(0x3FC, 0, 0, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_PMIC_JTAG_TDI__PMIC_JTAG_TDI	IOMUX_PAD(0x400, 0, 0, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_PMIC_JTAG_TCK__PMIC_JTAG_TCK	IOMUX_PAD(0x404, 0, 0, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_PMIC_JTAG_TDO__PMIC_JTAG_TDO	IOMUX_PAD(0x408, 0, 0, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_DISP_D0__DISP_D0	IOMUX_PAD(0x40C, 0x12C, 0, 0x6fc, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_D0__GPIO_2_0	IOMUX_PAD(0x40C, 0x12C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D0__FEC_TXCLK	IOMUX_PAD(0x40C, 0x12C, 2, 0x78c, 0, PAD_CTL_HYS | PAD_CTL_PKE) - -#define MX50_PAD_DISP_D1__DISP_D1	IOMUX_PAD(0x410, 0x130, 0, 0x700, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_D1__GPIO_2_1	IOMUX_PAD(0x410, 0x130, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D1__FEC_RX_ER	IOMUX_PAD(0x410, 0x130, 2, 0x788, 0, PAD_CTL_HYS | PAD_CTL_PKE) -#define MX50_PAD_DISP_D1__WEIM_A17	IOMUX_PAD(0x410, 0x130, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_DISP_D2__DISP_D2	IOMUX_PAD(0x414, 0x134, 0, 0x704, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_D2__GPIO_2_2	IOMUX_PAD(0x414, 0x134, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D2__FEC_RX_DV	IOMUX_PAD(0x414, 0x134, 2, 0x784, 0, PAD_CTL_HYS | PAD_CTL_PKE) -#define MX50_PAD_DISP_D2__WEIM_A18	IOMUX_PAD(0x414, 0x134, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_DISP_D3__DISP_D3	IOMUX_PAD(0x418, 0x138, 0, 0x708, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_D3__GPIO_2_3	IOMUX_PAD(0x418, 0x138, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D3__FEC_RXD1	IOMUX_PAD(0x418, 0x138, 2, 0x77C, 0, PAD_CTL_HYS | PAD_CTL_PKE) -#define MX50_PAD_DISP_D3__WEIM_A19	IOMUX_PAD(0x418, 0x138, 3, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D3__FEC_COL	IOMUX_PAD(0x418, 0x138, 4, 0x770, 1, NO_PAD_CTRL) - -#define MX50_PAD_DISP_D4__DISP_D4	IOMUX_PAD(0x41C, 0x13C, 0, 0x70c, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_D4__GPIO_2_4	IOMUX_PAD(0x41C, 0x13C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D4__FEC_RXD0	IOMUX_PAD(0x41C, 0x13C, 2, 0x778, 0, PAD_CTL_HYS | PAD_CTL_PKE) -#define MX50_PAD_DISP_D4__WEIM_A20	IOMUX_PAD(0x41C, 0x13C, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_DISP_D5__DISP_D5	IOMUX_PAD(0x420, 0x140, 0, 0x710, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_D5__GPIO_2_5	IOMUX_PAD(0x420, 0x140, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D5__FEC_TX_EN	IOMUX_PAD(0x420, 0x140, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_DISP_D5__WEIM_A21	IOMUX_PAD(0x420, 0x140, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_DISP_D6__DISP_D6	IOMUX_PAD(0x424, 0x144, 0, 0x714, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_D6__GPIO_2_6	IOMUX_PAD(0x424, 0x144, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D6__FEC_TXD1	IOMUX_PAD(0x424, 0x144, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_DISP_D6__WEIM_A22	IOMUX_PAD(0x424, 0x144, 3, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D6__FEC_RX_CLK	IOMUX_PAD(0x424, 0x144, 4, 0x780, 1, NO_PAD_CTRL) - -#define MX50_PAD_DISP_D7__DISP_D7	IOMUX_PAD(0x428, 0x148, 0, 0x718, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_D7__GPIO_2_7	IOMUX_PAD(0x428, 0x148, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D7__FEC_TXD0	IOMUX_PAD(0x428, 0x148, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_DISP_D7__WEIM_A23	IOMUX_PAD(0x428, 0x148, 3, 0x0, 0, NO_PAD_CTRL) - - -#define MX50_PAD_DISP_WR__ELCDIF_WR	IOMUX_PAD(0x42C, 0x14C, 0, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_WR__GPIO_2_16	IOMUX_PAD(0x42C, 0x14C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_WR__ELCDIF_PIXCLK	IOMUX_PAD(0x42C, 0x14C, 2, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_WR__WEIM_A24	IOMUX_PAD(0x42C, 0x14C, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_DISP_RD__ELCDIF_RD	IOMUX_PAD(0x430, 0x150, 0, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_RD__GPIO_2_19	IOMUX_PAD(0x430, 0x150, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_RD__ELCDIF_EN	IOMUX_PAD(0x430, 0x150, 2, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_RD__WEIM_A25	IOMUX_PAD(0x430, 0x150, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_DISP_RS__ELCDIF_RS	IOMUX_PAD(0x434, 0x154, 0, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_RS__GPIO_2_17	IOMUX_PAD(0x434, 0x154, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_RS__ELCDIF_VSYNC	IOMUX_PAD(0x434, 0x154, 2, 0x73c, 1, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_RS__WEIM_A26	IOMUX_PAD(0x434, 0x154, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_DISP_CS__ELCDIF_CS	IOMUX_PAD(0x438, 0x158, 0, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_CS__GPIO_2_21	IOMUX_PAD(0x438, 0x158, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_CS__ELCDIF_HSYNC	IOMUX_PAD(0x438, 0x158, 2, 0x6f8, 1, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_CS__WEIM_A27	IOMUX_PAD(0x438, 0x158, 3, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_CS__WEIM_CS3	IOMUX_PAD(0x438, 0x158, 4, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_DISP_BUSY__ELCDIF_HSYNC	IOMUX_PAD(0x43C, 0x15C, 0, 0x6f8, 2, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_BUSY__GPIO_2_18		IOMUX_PAD(0x43C, 0x15C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_BUSY__WEIM_CS3		IOMUX_PAD(0x43C, 0x15C, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_DISP_RESET__ELCDIF_RST	IOMUX_PAD(0x440, 0x160, 0, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_RESET__GPIO_2_20	IOMUX_PAD(0x440, 0x160, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_RESET__WEIM_CS3	IOMUX_PAD(0x440, 0x160, 4, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD3_CMD__SD3_CMD	IOMUX_PAD(0x444, 0x164, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD3_CMD__GPIO_5_18	IOMUX_PAD(0x444, 0x164, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_SD3_CMD__NANDF_WRN	IOMUX_PAD(0x444, 0x164, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_SD3_CMD__SSP_CMD	IOMUX_PAD(0x444, 0x164, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD3_CLK__SD3_CLK	IOMUX_PAD(0x448, 0x168, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD3_CLK__GPIO_5_19	IOMUX_PAD(0x448, 0x168, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_SD3_CLK__NANDF_RDN	IOMUX_PAD(0x448, 0x168, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_SD3_CLK__SSP_CLK	IOMUX_PAD(0x448, 0x168, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD3_D0__SD3_D0		IOMUX_PAD(0x44C, 0x16C, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD3_D0__GPIO_5_20	IOMUX_PAD(0x44C, 0x16C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_SD3_D0__NANDF_D4	IOMUX_PAD(0x44C, 0x16C, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_SD3_D0__SSP_D0		IOMUX_PAD(0x44C, 0x16C, 3, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD3_D0__PLL1_BYP	IOMUX_PAD(0x44C, 0x16C, 7, 0x6dc, 1, NO_PAD_CTRL) - -#define MX50_PAD_SD3_D1__SD3_D1		IOMUX_PAD(0x450, 0x170, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD3_D1__GPIO_5_21	IOMUX_PAD(0x450, 0x170, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_SD3_D1__NANDF_D5	IOMUX_PAD(0x450, 0x170, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_SD3_D1__PLL2_BYP	IOMUX_PAD(0x450, 0x170, 7, 0x6e0, 1, NO_PAD_CTRL) - -#define MX50_PAD_SD3_D2__SD3_D2		IOMUX_PAD(0x454, 0x174, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD3_D2__GPIO_5_22	IOMUX_PAD(0x454, 0x174, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_SD3_D2__NANDF_D6	IOMUX_PAD(0x454, 0x174, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_SD3_D2__SSP_D2		IOMUX_PAD(0x454, 0x174, 3, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD3_D2__PLL3_BYP	IOMUX_PAD(0x454, 0x174, 7, 0x6e4, 1, NO_PAD_CTRL) - -#define MX50_PAD_SD3_D3__SD3_D3		IOMUX_PAD(0x458, 0x178, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD3_D3__GPIO_5_23	IOMUX_PAD(0x458, 0x178, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_SD3_D3__NANDF_D7	IOMUX_PAD(0x458, 0x178, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_SD3_D3__SSP_D3		IOMUX_PAD(0x458, 0x178, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD3_D4__SD3_D4		IOMUX_PAD(0x45C, 0x17C, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD3_D4__GPIO_5_24	IOMUX_PAD(0x45C, 0x17C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_SD3_D4__NANDF_D0	IOMUX_PAD(0x45C, 0x17C, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_SD3_D4__SSP_D4		IOMUX_PAD(0x45C, 0x17C, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD3_D5__SD3_D5		IOMUX_PAD(0x460, 0x180, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD3_D5__GPIO_5_25	IOMUX_PAD(0x460, 0x180, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_SD3_D5__NANDF_D1	IOMUX_PAD(0x460, 0x180, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_SD3_D5__SSP_D5		IOMUX_PAD(0x460, 0x180, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD3_D6__SD3_D6		IOMUX_PAD(0x464, 0x184, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD3_D6__GPIO_5_26	IOMUX_PAD(0x464, 0x184, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_SD3_D6__NANDF_D2	IOMUX_PAD(0x464, 0x184, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_SD3_D6__SSP_D6		IOMUX_PAD(0x464, 0x184, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD3_D7__SD3_D7		IOMUX_PAD(0x468, 0x188, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD3_D7__GPIO_5_27	IOMUX_PAD(0x468, 0x188, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_SD3_D7__NANDF_D3	IOMUX_PAD(0x468, 0x188, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_SD3_D7__SSP_D7		IOMUX_PAD(0x468, 0x188, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_SD3_WP__SD3_WP		IOMUX_PAD(0x46C, 0x18C, 0, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD3_WP__GPIO_5_28	IOMUX_PAD(0x46C, 0x18C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_SD3_WP__NANDF_RESETN	IOMUX_PAD(0x46C, 0x18C, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_SD3_WP__SSP_CD		IOMUX_PAD(0x46C, 0x18C, 3, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_SD3_WP__SD4_LCTL	IOMUX_PAD(0x46C, 0x18C, 4, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_SD3_WP__WEIM_CS3	IOMUX_PAD(0x46C, 0x18C, 5, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_DISP_D8__DISP_D8	IOMUX_PAD(0x470, 0x190, 0, 0x71c, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_D8__GPIO_2_8	IOMUX_PAD(0x470, 0x190, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D8__NANDF_CLE	IOMUX_PAD(0x470, 0x190, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D8__SD1_LCTL	IOMUX_PAD(0x470, 0x190, 3, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_DISP_D8__SD4_CMD	IOMUX_PAD(0x470, 0x190, 4, 0x74c, 2, MX50_SD_PAD_CTRL) -#define MX50_PAD_DISP_D8__KEY_COL4	IOMUX_PAD(0x470, 0x190, 5, 0x790, 1, NO_PAD_CTRL) -#define MX50_PAD_DISP_D8__FEC_TX_CLK	IOMUX_PAD(0x470, 0x190, 6, 0x78c, 1, NO_PAD_CTRL) - -#define MX50_PAD_DISP_D9__DISP_D9	IOMUX_PAD(0x474, 0x194, 0, 0x720, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_D9__GPIO_2_9	IOMUX_PAD(0x474, 0x194, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D9__NANDF_ALE	IOMUX_PAD(0x474, 0x194, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D9__SD2_LCTL	IOMUX_PAD(0x474, 0x194, 3, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_DISP_D9__SD4_CLK	IOMUX_PAD(0x474, 0x194, 4, 0x748, 2, MX50_SD_PAD_CTRL) -#define MX50_PAD_DISP_D9__KEY_ROW4	IOMUX_PAD(0x474, 0x194, 5, 0x7a0, 1, NO_PAD_CTRL) -#define MX50_PAD_DISP_D9__FEC_RX_ER	IOMUX_PAD(0x474, 0x194, 6, 0x788, 1, NO_PAD_CTRL) - -#define MX50_PAD_DISP_D10__DISP_D10	IOMUX_PAD(0x478, 0x198, 0, 0x724, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_D10__GPIO_2_10	IOMUX_PAD(0x478, 0x198, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D10__NANDF_CEN0	IOMUX_PAD(0x478, 0x198, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D10__SD3_LCTL	IOMUX_PAD(0x478, 0x198, 3, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_DISP_D10__SD4_D0	IOMUX_PAD(0x478, 0x198, 4, 0x750, 1, MX50_SD_PAD_CTRL) -#define MX50_PAD_DISP_D10__KEY_COL5	IOMUX_PAD(0x478, 0x198, 5, 0x794, 1, NO_PAD_CTRL) -#define MX50_PAD_DISP_D10__FEC_RX_DV	IOMUX_PAD(0x478, 0x198, 6, 0x784, 1, NO_PAD_CTRL) - -#define MX50_PAD_DISP_D11__DISP_D11	IOMUX_PAD(0x47C, 0x19C, 0, 0x728, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_D11__GPIO_2_11	IOMUX_PAD(0x47C, 0x19C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D11__NANDF_CEN1	IOMUX_PAD(0x47C, 0x19C, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D11__SD4_D1	IOMUX_PAD(0x47C, 0x19C, 4, 0x754, 1, MX50_SD_PAD_CTRL) -#define MX50_PAD_DISP_D11__KEY_ROW5	IOMUX_PAD(0x47C, 0x19C, 5, 0x7a4, 1, NO_PAD_CTRL) -#define MX50_PAD_DISP_D11__FEC_RDAT1	IOMUX_PAD(0x47C, 0x19C, 6, 0x77c, 1, NO_PAD_CTRL) - -#define MX50_PAD_DISP_D12__DISP_D12	IOMUX_PAD(0x480, 0x1A0, 0, 0x72c, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_D12__GPIO_2_12	IOMUX_PAD(0x480, 0x1A0, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D12__NANDF_CEN2	IOMUX_PAD(0x480, 0x1A0, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D12__SD1_CD	IOMUX_PAD(0x480, 0x1A0, 3, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_DISP_D12__SD4_D2	IOMUX_PAD(0x480, 0x1A0, 4, 0x758, 1, MX50_SD_PAD_CTRL) -#define MX50_PAD_DISP_D12__KEY_COL6	IOMUX_PAD(0x480, 0x1A0, 5, 0x798, 1, NO_PAD_CTRL) -#define MX50_PAD_DISP_D12__FEC_RDAT0	IOMUX_PAD(0x480, 0x1A0, 6, 0x778, 1, NO_PAD_CTRL) - -#define MX50_PAD_DISP_D13__DISP_D13	IOMUX_PAD(0x484, 0x1A4, 0, 0x730, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_D13__GPIO_2_13	IOMUX_PAD(0x484, 0x1A4, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D13__NANDF_CEN3	IOMUX_PAD(0x484, 0x1A4, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D13__SD3_CD	IOMUX_PAD(0x484, 0x1A4, 3, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_DISP_D13__SD4_D3	IOMUX_PAD(0x484, 0x1A4, 4, 0x75c, 1, MX50_SD_PAD_CTRL) -#define MX50_PAD_DISP_D13__KEY_ROW6	IOMUX_PAD(0x484, 0x1A4, 5, 0x7a8, 1, NO_PAD_CTRL) -#define MX50_PAD_DISP_D13__FEC_TX_EN	IOMUX_PAD(0x484, 0x1A4, 6, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_DISP_D14__DISP_D14	IOMUX_PAD(0x488, 0x1A8, 0, 0x734, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_D14__GPIO_2_14	IOMUX_PAD(0x488, 0x1A8, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D14__NANDF_RDY0	IOMUX_PAD(0x488, 0x1A8, 2, 0x7b4, 1, NO_PAD_CTRL) -#define MX50_PAD_DISP_D14__SD1_WP	IOMUX_PAD(0x488, 0x1A8, 3, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_DISP_D14__SD4_WP	IOMUX_PAD(0x488, 0x1A8, 4, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_DISP_D14__KEY_COL7	IOMUX_PAD(0x488, 0x1A8, 5, 0x79c, 1, NO_PAD_CTRL) -#define MX50_PAD_DISP_D14__FEC_TDAT1	IOMUX_PAD(0x488, 0x1A8, 6, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_DISP_D15__DISP_D15	IOMUX_PAD(0x48C, 0x1AC, 0, 0x738, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_DISP_D15__GPIO_2_15	IOMUX_PAD(0x48C, 0x1AC, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_DISP_D15__NANDF_DQS	IOMUX_PAD(0x48C, 0x1AC, 2, 0x7b0, 1, NO_PAD_CTRL) -#define MX50_PAD_DISP_D15__SD3_RST	IOMUX_PAD(0x48C, 0x1AC, 3, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_DISP_D15__SD4_CD	IOMUX_PAD(0x48C, 0x1AC, 4, 0x0, 0, MX50_SD_PAD_CTRL) -#define MX50_PAD_DISP_D15__KEY_ROW7	IOMUX_PAD(0x48C, 0x1AC, 5, 0x7ac, 1, NO_PAD_CTRL) -#define MX50_PAD_DISP_D15__FEC_TDAT0	IOMUX_PAD(0x48C, 0x1AC, 6, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_D0__EPDC_D0	IOMUX_PAD(0x54C, 0x1B0, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D0__GPIO_3_0	IOMUX_PAD(0x54C, 0x1B0, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D0__WEIM_D0	IOMUX_PAD(0x54C, 0x1B0, 2, 0x7ec, 1, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D0__ELCDIF_RS	IOMUX_PAD(0x54C, 0x1B0, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_D0__ELCDIF_PIXCLK	IOMUX_PAD(0x54C, 0x1B0, 4, 0x0, 0, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EPDC_D1__EPDC_D1	IOMUX_PAD(0x550, 0x1B4, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D1__GPIO_3_1	IOMUX_PAD(0x550, 0x1B4, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D1__WEIM_D1	IOMUX_PAD(0x550, 0x1B4, 2, 0x7f0, 1, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D1__ELCDIF_CS	IOMUX_PAD(0x550, 0x1B4, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_D1__ELCDIF_EN	IOMUX_PAD(0x550, 0x1B4, 4, 0x0, 0, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EPDC_D2__EPDC_D2	IOMUX_PAD(0x554, 0x1B8, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D2__GPIO_3_2	IOMUX_PAD(0x554, 0x1B8, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D2__WEIM_D2	IOMUX_PAD(0x554, 0x1B8, 2, 0x7f4, 1, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D2__ELCDIF_WR	IOMUX_PAD(0x554, 0x1B8, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_D2__ELCDIF_VSYNC	IOMUX_PAD(0x554, 0x1B8, 4, 0x73c, 2, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EPDC_D3__EPDC_D3	IOMUX_PAD(0x558, 0x1BC, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D3__GPIO_3_3	IOMUX_PAD(0x558, 0x1BC, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D3__WEIM_D3	IOMUX_PAD(0x558, 0x1BC, 2, 0x7f8, 1, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D3__ELCDIF_RD	IOMUX_PAD(0x558, 0x1BC, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_D3__ELCDIF_HSYNC	IOMUX_PAD(0x558, 0x1BC, 4, 0x6f8, 3, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EPDC_D4__EPDC_D4	IOMUX_PAD(0x55C, 0x1C0, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D4__GPIO_3_4	IOMUX_PAD(0x55C, 0x1C0, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D4__WEIM_D4	IOMUX_PAD(0x55C, 0x1C0, 2, 0x7fc, 1, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_D5__EPDC_D5	IOMUX_PAD(0x560, 0x1C4, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D5__GPIO_3_5	IOMUX_PAD(0x560, 0x1C4, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D5__WEIM_D5	IOMUX_PAD(0x560, 0x1C4, 2, 0x800, 1, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_D6__EPDC_D6	IOMUX_PAD(0x564, 0x1C8, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D6__GPIO_3_6	IOMUX_PAD(0x564, 0x1C8, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D6__WEIM_D6	IOMUX_PAD(0x564, 0x1C8, 2, 0x804, 1, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_D7__EPDC_D7	IOMUX_PAD(0x568, 0x1CC, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D7__GPIO_3_7	IOMUX_PAD(0x568, 0x1CC, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D7__WEIM_D7	IOMUX_PAD(0x568, 0x1CC, 2, 0x808, 1, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_D8__EPDC_D8	IOMUX_PAD(0x56C, 0x1D0, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D8__GPIO_3_8	IOMUX_PAD(0x56C, 0x1D0, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D8__WEIM_D8	IOMUX_PAD(0x56C, 0x1D0, 2, 0x80c, 2, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D8__ELCDIF_D24	IOMUX_PAD(0x56C, 0x1D0, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EPDC_D9__EPDC_D9	IOMUX_PAD(0x570, 0x1D4, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D9__GPIO_3_9	IOMUX_PAD(0x570, 0x1D4, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D9__WEIM_D9	IOMUX_PAD(0x570, 0x1D4, 2, 0x810, 2, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D9__ELCDIF_D25	IOMUX_PAD(0x570, 0x1D4, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EPDC_D10__EPDC_D10	IOMUX_PAD(0x574, 0x1D8, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D10__GPIO_3_10	IOMUX_PAD(0x574, 0x1D8, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D10__WEIM_D10	IOMUX_PAD(0x574, 0x1D8, 2, 0x814, 2, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D10__ELCDIF_D26	IOMUX_PAD(0x574, 0x1D8, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_D11__EPDC_D11	IOMUX_PAD(0x578, 0x1DC, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D11__GPIO_3_11	IOMUX_PAD(0x578, 0x1DC, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D11__WEIM_D11	IOMUX_PAD(0x578, 0x1DC, 2, 0x818, 2, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D11__ELCDIF_D27	IOMUX_PAD(0x578, 0x1DC, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EPDC_D12__EPDC_D12	IOMUX_PAD(0x57C, 0x1E0, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D12__GPIO_3_12	IOMUX_PAD(0x57C, 0x1E0, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D12__WEIM_D12	IOMUX_PAD(0x57C, 0x1E0, 2, 0x81c, 1, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D12__ELCDIF_D28	IOMUX_PAD(0x57C, 0x1E0, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EPDC_D13__EPDC_D13	IOMUX_PAD(0x580, 0x1E4, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D13__GPIO_3_13	IOMUX_PAD(0x580, 0x1E4, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D13__WEIM_D13	IOMUX_PAD(0x580, 0x1E4, 2, 0x820, 1, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D13__ELCDIF_D29	IOMUX_PAD(0x580, 0x1E4, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EPDC_D14__EPDC_D14	IOMUX_PAD(0x584, 0x1E8, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D14__GPIO_3_14	IOMUX_PAD(0x584, 0x1E8, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D14__WEIM_D14	IOMUX_PAD(0x584, 0x1E8, 2, 0x824, 1, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D14__ELCDIF_D30	IOMUX_PAD(0x584, 0x1E8, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_D14__AUD6_TXD	IOMUX_PAD(0x584, 0x1E8, 4, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_D15__EPDC_D15	IOMUX_PAD(0x588, 0x1EC, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D15__GPIO_3_15	IOMUX_PAD(0x588, 0x1EC, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D15__WEIM_D15	IOMUX_PAD(0x588, 0x1EC, 2, 0x828, 1, NO_PAD_CTRL) -#define MX50_PAD_EPDC_D15__ELCDIF_D31	IOMUX_PAD(0x588, 0x1EC, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_D15__AUD6_TXC	IOMUX_PAD(0x588, 0x1EC, 4, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_GDCLK__EPDC_GDCLK	IOMUX_PAD(0x58C, 0x1F0, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_GDCLK__GPIO_3_16	IOMUX_PAD(0x58C, 0x1F0, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_GDCLK__WEIM_D16	IOMUX_PAD(0x58C, 0x1F0, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_GDCLK__ELCDIF_D16	IOMUX_PAD(0x58C, 0x1F0, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_GDCLK__AUD6_TXFS	IOMUX_PAD(0x58C, 0x1F0, 4, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_GDSP__EPDC_GDSP	IOMUX_PAD(0x590, 0x1F4, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_GDSP__GPIO_3_17	IOMUX_PAD(0x590, 0x1F4, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_GDSP__WEIM_D17	IOMUX_PAD(0x590, 0x1F4, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_GDSP__ELCDIF_D17	IOMUX_PAD(0x590, 0x1F4, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_GDSP__AUD6_RXD	IOMUX_PAD(0x590, 0x1F4, 4, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_GDOE__EPDC_GDOE	IOMUX_PAD(0x594, 0x1F8, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_GDOE__GPIO_3_18	IOMUX_PAD(0x594, 0x1F8, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_GDOE__WEIM_D18	IOMUX_PAD(0x594, 0x1F8, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_GDOE__ELCDIF_D18	IOMUX_PAD(0x594, 0x1F8, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_GDOE__AUD6_RXC	IOMUX_PAD(0x594, 0x1F8, 4, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_GDRL__EPDC_GDRL	IOMUX_PAD(0x598, 0x1FC, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_GDRL__GPIO_3_19	IOMUX_PAD(0x598, 0x1FC, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_GDRL__WEIM_D19	IOMUX_PAD(0x598, 0x1FC, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_GDRL__ELCDIF_D19	IOMUX_PAD(0x598, 0x1FC, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_GDRL__AUD6_RXFS	IOMUX_PAD(0x598, 0x1FC, 4, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_SDCLK__EPDC_SDCLK	IOMUX_PAD(0x59C, 0x200, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCLK__GPIO_3_20	IOMUX_PAD(0x59C, 0x200, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCLK__WEIM_D20	IOMUX_PAD(0x59C, 0x200, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCLK__ELCDIF_D20	IOMUX_PAD(0x59C, 0x200, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_SDCLK__AUD5_TXD	IOMUX_PAD(0x59C, 0x200, 4, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_SDOEZ__EPDC_SDOEZ	IOMUX_PAD(0x5A0, 0x204, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDOEZ__GPIO_3_21	IOMUX_PAD(0x5A0, 0x204, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDOEZ__WEIM_D21	IOMUX_PAD(0x5A0, 0x204, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDOEZ__ELCDIF_D21	IOMUX_PAD(0x5A0, 0x204, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_SDOEZ__AUD5_TXC	IOMUX_PAD(0x5A0, 0x204, 4, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_SDOED__EPDC_SDOED	IOMUX_PAD(0x5A4, 0x208, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDOED__GPIO_3_22	IOMUX_PAD(0x5A4, 0x208, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDOED__WEIM_D22	IOMUX_PAD(0x5A4, 0x208, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDOED__ELCDIF_D22	IOMUX_PAD(0x5A4, 0x208, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_SDOED__AUD5_TXFS	IOMUX_PAD(0x5A4, 0x208, 4, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_SDOE__EPDC_SDOE	IOMUX_PAD(0x5A8, 0x20C, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDOE__GPIO_3_23	IOMUX_PAD(0x5A8, 0x20C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDOE__WEIM_D23	IOMUX_PAD(0x5A8, 0x20C, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDOE__ELCDIF_D23	IOMUX_PAD(0x5A8, 0x20C, 3, 0x0, 0, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_SDOE__AUD5_RXD	IOMUX_PAD(0x5A8, 0x20C, 4, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_SDLE__EPDC_SDLE	IOMUX_PAD(0x5AC, 0x210, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDLE__GPIO_3_24	IOMUX_PAD(0x5AC, 0x210, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDLE__WEIM_D24	IOMUX_PAD(0x5AC, 0x210, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDLE__ELCDIF_D8	IOMUX_PAD(0x5AC, 0x210, 3, 0x71c, 1, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_SDLE__AUD5_RXC	IOMUX_PAD(0x5AC, 0x210, 4, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_SDCLKN__EPDC_SDCLKN	IOMUX_PAD(0x5B0, 0x214, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCLKN__GPIO_3_25		IOMUX_PAD(0x5B0, 0x214, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCLKN__WEIM_D25		IOMUX_PAD(0x5B0, 0x214, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCLKN__ELCDIF_D9		IOMUX_PAD(0x5B0, 0x214, 3, 0x720, 1, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_SDCLKN__AUD5_RXFS		IOMUX_PAD(0x5B0, 0x214, 4, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_SDSHR__EPDC_SDSHR	IOMUX_PAD(0x5B4, 0x218, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDSHR__GPIO_3_26	IOMUX_PAD(0x5B4, 0x218, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDSHR__WEIM_D26	IOMUX_PAD(0x5B4, 0x218, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDSHR__ELCDIF_D10	IOMUX_PAD(0x5B4, 0x218, 3, 0x724, 1, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_SDSHR__AUD4_TXD	IOMUX_PAD(0x5B4, 0x218, 4, 0x6c8, 1, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_PWRCOM__EPDC_PWRCOM	IOMUX_PAD(0x5B8, 0x21C, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCOM__GPIO_3_27		IOMUX_PAD(0x5B8, 0x21C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCOM__WEIM_D27		IOMUX_PAD(0x5B8, 0x21C, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCOM__ELCDIF_D11	IOMUX_PAD(0x5B8, 0x21C, 3, 0x728, 1, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCOM__AUD4_TXC		IOMUX_PAD(0x5B8, 0x21C, 4, 0x6d4, 1, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_PWRSTAT__EPDC_PWRSTAT	IOMUX_PAD(0x5BC, 0x220, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRSTAT__GPIO_3_28	IOMUX_PAD(0x5BC, 0x220, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRSTAT__WEIM_D28		IOMUX_PAD(0x5BC, 0x220, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRSTAT__ELCDIF_D12	IOMUX_PAD(0x5BC, 0x220, 3, 0x72c, 1, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_PWRSTAT__AUD4_TXFS	IOMUX_PAD(0x5BC, 0x220, 4, 0x6d8, 1, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_PWRCTRL0__EPDC_PWRCTRL0	IOMUX_PAD(0x5C0, 0x224, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCTRL0__GPIO_3_29	IOMUX_PAD(0x5C0, 0x224, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCTRL0__WEIM_D29	IOMUX_PAD(0x5C0, 0x224, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCTRL0__ELCDIF_D13	IOMUX_PAD(0x5C0, 0x224, 3, 0x730, 1, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCTRL0__AUD4_RXD	IOMUX_PAD(0x5C0, 0x224, 4, 0x6c4, 1, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_PWRCTRL1__EPDC_PWRCTRL1	IOMUX_PAD(0x5C4, 0x228, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCTRL1__GPIO_3_30	IOMUX_PAD(0x5C4, 0x228, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCTRL1__WEIM_D30	IOMUX_PAD(0x5C4, 0x228, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCTRL1__ELCDIF_D14	IOMUX_PAD(0x5C4, 0x228, 3, 0x734, 1, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCTRL1__AUD4_RXC	IOMUX_PAD(0x5C4, 0x228, 4, 0x6cc, 1, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_PWRCTRL2__EPDC_PWRCTRL2	IOMUX_PAD(0x5C8, 0x22C, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCTRL2__GPIO_3_31	IOMUX_PAD(0x5C8, 0x22C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCTRL2__WEIM_D31	IOMUX_PAD(0x5C8, 0x22C, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCTRL2__ELCDIF_D15	IOMUX_PAD(0x5C8, 0x22C, 3, 0x738, 1, MX50_ELCDIF_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCTRL2__AUD4_RXFS	IOMUX_PAD(0x5C8, 0x22C, 4, 0x6d0, 1, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCTRL2__SDMA_EXT0	IOMUX_PAD(0x5C8, 0x22C, 6, 0x7b8, 1, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_PWRCTRL3__PWRCTRL3	IOMUX_PAD(0x5CC, 0x230, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCTRL3__GPIO_4_20	IOMUX_PAD(0x5CC, 0x230, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCTRL3__WEIM_EB2	IOMUX_PAD(0x5CC, 0x230, 2, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_PWRCTRL3__SDMA_EXT1	IOMUX_PAD(0x5CC, 0x230, 6, 0x7bc, 1, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_VCOM0__EPDC_VCOM0	IOMUX_PAD(0x5D0, 0x234, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_VCOM0__GPIO_4_21	IOMUX_PAD(0x5D0, 0x234, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_VCOM0__WEIM_EB3	IOMUX_PAD(0x5D0, 0x234, 2, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_VCOM1__EPDC_VCOM1	IOMUX_PAD(0x5D4, 0x238, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_VCOM1__GPIO_4_22	IOMUX_PAD(0x5D4, 0x238, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_VCOM1__WEIM_CS3	IOMUX_PAD(0x5D4, 0x238, 2, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EPDC_BDR0__EPDC_BDR0	IOMUX_PAD(0x5D8, 0x23C, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_BDR0__GPIO_4_23	IOMUX_PAD(0x5D8, 0x23C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_BDR0__ELCDIF_D7	IOMUX_PAD(0x5D8, 0x23C, 3, 0x718, 1, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EPDC_BDR1__EPDC_BDR1	IOMUX_PAD(0x5DC, 0x240, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_BDR1__GPIO_4_24	IOMUX_PAD(0x5DC, 0x240, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_BDR1__ELCDIF_D6	IOMUX_PAD(0x5DC, 0x240, 3, 0x714, 1, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EPDC_SDCE0__EPDC_SDCE0	IOMUX_PAD(0x5E0, 0x244, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCE0__GPIO_4_25	IOMUX_PAD(0x5E0, 0x244, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCE0__ELCDIF_D5	IOMUX_PAD(0x5E0, 0x244, 3, 0x710, 1, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EPDC_SDCE1__EPDC_SDCE1	IOMUX_PAD(0x5E4, 0x248, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCE1__GPIO_4_26	IOMUX_PAD(0x5E4, 0x248, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCE1__ELCDIF_D4	IOMUX_PAD(0x5E4, 0x248, 2, 0x70c, 1, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EPDC_SDCE2__EPDC_SDCE2		IOMUX_PAD(0x5E8, 0x24C, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCE2__GPIO_4_27		IOMUX_PAD(0x5E8, 0x24C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCE2__ELCDIF_DAT3	IOMUX_PAD(0x5E8, 0x24C, 3, 0x708, 1, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EPDC_SDCE3__EPDC_SDCE3	IOMUX_PAD(0x5EC, 0x250, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCE3__GPIO_4_28	IOMUX_PAD(0x5EC, 0x250, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCE3__ELCDIF_D2	IOMUX_PAD(0x5EC, 0x250, 3, 0x704, 1, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EPDC_SDCE4__EPDC_SDCE4	IOMUX_PAD(0x5F0, 0x254, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCE4__GPIO_4_29	IOMUX_PAD(0x5F0, 0x254, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCE4__ELCDIF_D1	IOMUX_PAD(0x5F0, 0x254, 3, 0x700, 1, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EPDC_SDCE5__EPDC_SDCE5	IOMUX_PAD(0x5F4, 0x258, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCE5__GPIO_4_30	IOMUX_PAD(0x5F4, 0x258, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EPDC_SDCE5__ELCDIF_D0	IOMUX_PAD(0x5F4, 0x258, 3, 0x6fc, 1, MX50_ELCDIF_PAD_CTRL) - -#define MX50_PAD_EIM_DA0__WEIM_A0	IOMUX_PAD(0x5F8, 0x25C, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA0__GPIO_1_0	IOMUX_PAD(0x5F8, 0x25C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA0__KEY_COL4	IOMUX_PAD(0x5f8, 0x25C, 3, 0x790, 2, NO_PAD_CTRL) - -#define MX50_PAD_EIM_DA1__WEIM_A1	IOMUX_PAD(0x5FC, 0x260, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA1__GPIO_1_1	IOMUX_PAD(0x5FC, 0x260, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA1__KEY_ROW4	IOMUX_PAD(0x5fc, 0x260, 3, 0x7a0, 2, MX50_KEYPAD_CTRL) - -#define MX50_PAD_EIM_DA2__WEIM_A2	IOMUX_PAD(0x600, 0x264, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA2__GPIO_1_2	IOMUX_PAD(0x600, 0x264, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA2__KEY_COL5	IOMUX_PAD(0x600, 0x264, 3, 0x794, 2, NO_PAD_CTRL) - -#define MX50_PAD_EIM_DA3__WEIM_A3	IOMUX_PAD(0x604, 0x268, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA3__GPIO_1_3	IOMUX_PAD(0x604, 0x268, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA3__KEY_ROW5	IOMUX_PAD(0x604, 0x268, 3, 0x7a4, 2, MX50_KEYPAD_CTRL) - -#define MX50_PAD_EIM_DA4__WEIM_A4	IOMUX_PAD(0x608, 0x26C, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA4__GPIO_1_4	IOMUX_PAD(0x608, 0x26C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA4__KEY_COL6	IOMUX_PAD(0x608, 0x26C, 3, 0x798, 2, NO_PAD_CTRL) - -#define MX50_PAD_EIM_DA5__WEIM_A5	IOMUX_PAD(0x60C, 0x270, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA5__GPIO_1_5	IOMUX_PAD(0x60C, 0x270, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA5__KEY_ROW6	IOMUX_PAD(0x60C, 0x270, 3, 0x7a8, 2, MX50_KEYPAD_CTRL) - -#define MX50_PAD_EIM_DA6__WEIM_A6	IOMUX_PAD(0x610, 0x274, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA6__GPIO_1_6	IOMUX_PAD(0x610, 0x274, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA6__KEY_COL7	IOMUX_PAD(0x610, 0x274, 3, 0x79c, 2, NO_PAD_CTRL) - -#define MX50_PAD_EIM_DA7__WEIM_A7	IOMUX_PAD(0x614, 0x278, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA7__GPIO_1_7	IOMUX_PAD(0x614, 0x278, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA7__KEY_ROW7	IOMUX_PAD(0x614, 0x278, 3, 0x7ac, 2, MX50_KEYPAD_CTRL) - -#define MX50_PAD_EIM_DA8__WEIM_A8	IOMUX_PAD(0x618, 0x27C, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA8__GPIO_1_8	IOMUX_PAD(0x618, 0x27C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_EIM_DA8__NANDF_CLE	IOMUX_PAD(0x618, 0x27C, 2, 0x0, 0, PAD_CTL_DSE_HIGH) - -#define MX50_PAD_EIM_DA9__WEIM_A9	IOMUX_PAD(0x61C, 0x280, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA9__GPIO_1_9	IOMUX_PAD(0x61C, 0x280, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_EIM_DA9__NANDF_ALE	IOMUX_PAD(0x61C, 0x280, 2, 0x0, 0, PAD_CTL_DSE_HIGH) - -#define MX50_PAD_EIM_DA10__WEIM_A10	IOMUX_PAD(0x620, 0x284, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA10__GPIO_1_10	IOMUX_PAD(0x620, 0x284, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_EIM_DA10__NANDF_CE0	IOMUX_PAD(0x620, 0x284, 2, 0x0, 0, PAD_CTL_DSE_HIGH) - -#define MX50_PAD_EIM_DA11__WEIM_A11	IOMUX_PAD(0x624, 0x288, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA11__GPIO_1_11	IOMUX_PAD(0x624, 0x288, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_EIM_DA11__NANDF_CE1	IOMUX_PAD(0x624, 0x288, 2, 0x0, 0, PAD_CTL_DSE_HIGH) - -#define MX50_PAD_EIM_DA12__WEIM_A12	IOMUX_PAD(0x628, 0x28C, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA12__GPIO_1_12	IOMUX_PAD(0x628, 0x28C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_EIM_DA12__NANDF_CE2	IOMUX_PAD(0x628, 0x28C, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PAD_EIM_DA12__EPDC_SDCE6	IOMUX_PAD(0x628, 0x28C, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EIM_DA13__WEIM_A13	IOMUX_PAD(0x62C, 0x290, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA13__GPIO_1_13	IOMUX_PAD(0x62C, 0x290, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_EIM_DA13__NANDF_CE3	IOMUX_PAD(0x62C, 0x290, 2, 0x0, 0, PAD_CTL_DSE_HIGH) -#define MX50_PIN_EIM_DA13__EPDC_SDCE7	IOMUX_PAD(0x62C, 0x290, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EIM_DA14__WEIM_A14	IOMUX_PAD(0x630, 0x294, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA14__GPIO_1_14	IOMUX_PAD(0x630, 0x294, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA14__NANDF_READY	IOMUX_PAD(0x630, 0x294, 2, 0x7B4, 2, PAD_CTL_PKE | \ -							PAD_CTL_PUE | PAD_CTL_PUS_100K_UP) -#define MX50_PAD_EIM_DA14__EPDC_SDCE8	IOMUX_PAD(0x630, 0x294, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EIM_DA15__WEIM_A15	IOMUX_PAD(0x634, 0x298, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_DA15__GPIO_1_15	IOMUX_PAD(0x634, 0x298, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PIN_EIM_DA15__NANDF_DQS	IOMUX_PAD(0x634, 0x298, 2, 0x7B0, 2, PAD_CTL_DSE_HIGH) -#define MX50_PAD_EIM_DA15__EPDC_SDCE9	IOMUX_PAD(0x634, 0x298, 3, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EIM_CS2__WEIM_CS2	IOMUX_PAD(0x638, 0x29C, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_CS2__GPIO_1_16	IOMUX_PAD(0x638, 0x29C, 1, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_CS2__WEIM_A27	IOMUX_PAD(0x638, 0x29C, 2, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EIM_CS1__WEIM_CS1	IOMUX_PAD(0x63C, 0x2A0, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_CS1__GPIO_1_17	IOMUX_PAD(0x63C, 0x2A0, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EIM_CS0__WEIM_CS0	IOMUX_PAD(0x640, 0x2A4, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_CS0__GPIO_1_18	IOMUX_PAD(0x640, 0x2A4, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EIM_EB0__WEIM_EB0	IOMUX_PAD(0x644, 0x2A8, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_EB0__GPIO_1_19	IOMUX_PAD(0x644, 0x2A8, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EIM_EB1__WEIM_EB1	IOMUX_PAD(0x648, 0x2AC, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_EB1__GPIO_1_20	IOMUX_PAD(0x648, 0x2AC, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EIM_WAIT__WEIM_WAIT	IOMUX_PAD(0x64C, 0x2B0, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_WAIT__GPIO_1_21	IOMUX_PAD(0x64C, 0x2B0, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EIM_BCLK__WEIM_BCLK	IOMUX_PAD(0x650, 0x2B4, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_BCLK__GPIO_1_22	IOMUX_PAD(0x650, 0x2B4, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EIM_RDY__WEIM_RDY	IOMUX_PAD(0x654, 0x2B8, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_RDY__GPIO_1_23	IOMUX_PAD(0x654, 0x2B8, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EIM_OE__WEIM_OE	IOMUX_PAD(0x658, 0x2BC, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_OE__GPIO_1_24	IOMUX_PAD(0x658, 0x2BC, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EIM_RW__WEIM_RW	IOMUX_PAD(0x65C, 0x2C0, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_RW__GPIO_1_25	IOMUX_PAD(0x65C, 0x2C0, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EIM_LBA__WEIM_LBA	IOMUX_PAD(0x660, 0x2C4, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_LBA__GPIO_1_26	IOMUX_PAD(0x660, 0x2C4, 1, 0x0, 0, NO_PAD_CTRL) - -#define MX50_PAD_EIM_CRE__WEIM_CRE	IOMUX_PAD(0x664, 0x2C8, 0, 0x0, 0, NO_PAD_CTRL) -#define MX50_PAD_EIM_CRE__GPIO_1_27	IOMUX_PAD(0x664, 0x2C8, 1, 0x0, 0, NO_PAD_CTRL) - -#endif /* __MACH_IOMUX_MX50_H__ */ diff --git a/arch/arm/mach-imx/iram_alloc.c b/arch/arm/mach-imx/iram_alloc.c deleted file mode 100644 index e05cf407db6..00000000000 --- a/arch/arm/mach-imx/iram_alloc.c +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved. - * - * 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/kernel.h> -#include <linux/io.h> -#include <linux/module.h> -#include <linux/spinlock.h> -#include <linux/genalloc.h> -#include "linux/platform_data/imx-iram.h" - -static unsigned long iram_phys_base; -static void __iomem *iram_virt_base; -static struct gen_pool *iram_pool; - -static inline void __iomem *iram_phys_to_virt(unsigned long p) -{ -	return iram_virt_base + (p - iram_phys_base); -} - -void __iomem *iram_alloc(unsigned int size, unsigned long *dma_addr) -{ -	if (!iram_pool) -		return NULL; - -	*dma_addr = gen_pool_alloc(iram_pool, size); -	pr_debug("iram alloc - %dB@0x%lX\n", size, *dma_addr); -	if (!*dma_addr) -		return NULL; -	return iram_phys_to_virt(*dma_addr); -} -EXPORT_SYMBOL(iram_alloc); - -void iram_free(unsigned long addr, unsigned int size) -{ -	if (!iram_pool) -		return; - -	gen_pool_free(iram_pool, addr, size); -} -EXPORT_SYMBOL(iram_free); - -int __init iram_init(unsigned long base, unsigned long size) -{ -	iram_phys_base = base; - -	iram_pool = gen_pool_create(PAGE_SHIFT, -1); -	if (!iram_pool) -		return -ENOMEM; - -	gen_pool_add(iram_pool, base, size, -1); -	iram_virt_base = ioremap(iram_phys_base, size); -	if (!iram_virt_base) -		return -EIO; - -	pr_debug("i.MX IRAM pool: %ld KB@0x%p\n", size / 1024, iram_virt_base); -	return 0; -} diff --git a/arch/arm/mach-imx/irq-common.c b/arch/arm/mach-imx/irq-common.c index b6e11458e5a..4b34f52dc46 100644 --- a/arch/arm/mach-imx/irq-common.c +++ b/arch/arm/mach-imx/irq-common.c @@ -21,25 +21,6 @@  #include "irq-common.h" -int imx_irq_set_priority(unsigned char irq, unsigned char prio) -{ -	struct irq_chip_generic *gc; -	struct mxc_extra_irq *exirq; -	int ret; - -	ret = -ENOSYS; - -	gc = irq_get_chip_data(irq); -	if (gc && gc->private) { -		exirq = gc->private; -		if (exirq->set_priority) -			ret = exirq->set_priority(irq, prio); -	} - -	return ret; -} -EXPORT_SYMBOL(imx_irq_set_priority); -  int mxc_set_irq_fiq(unsigned int irq, unsigned int type)  {  	struct irq_chip_generic *gc; diff --git a/arch/arm/mach-imx/lluart.c b/arch/arm/mach-imx/lluart.c deleted file mode 100644 index 2fdc9bf2fb5..00000000000 --- a/arch/arm/mach-imx/lluart.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2011 Freescale Semiconductor, Inc. - * Copyright 2011 Linaro Ltd. - * - * The code contained herein is licensed under the GNU General Public - * License. You may obtain a copy of the GNU General Public License - * Version 2 or later at the following locations: - * - * http://www.opensource.org/licenses/gpl-license.html - * http://www.gnu.org/copyleft/gpl.html - */ - -#include <linux/init.h> -#include <asm/page.h> -#include <asm/sizes.h> -#include <asm/mach/map.h> - -#include "hardware.h" - -#define IMX6Q_UART1_BASE_ADDR	0x02020000 -#define IMX6Q_UART2_BASE_ADDR	0x021e8000 -#define IMX6Q_UART3_BASE_ADDR	0x021ec000 -#define IMX6Q_UART4_BASE_ADDR	0x021f0000 -#define IMX6Q_UART5_BASE_ADDR	0x021f4000 - -/* - * IMX6Q_UART_BASE_ADDR is put in the middle to force the expansion - * of IMX6Q_UART##n##_BASE_ADDR. - */ -#define IMX6Q_UART_BASE_ADDR(n)	IMX6Q_UART##n##_BASE_ADDR -#define IMX6Q_UART_BASE(n)	IMX6Q_UART_BASE_ADDR(n) -#define IMX6Q_DEBUG_UART_BASE	IMX6Q_UART_BASE(CONFIG_DEBUG_IMX6Q_UART_PORT) - -static struct map_desc imx_lluart_desc = { -#ifdef CONFIG_DEBUG_IMX6Q_UART -	.virtual	= IMX_IO_P2V(IMX6Q_DEBUG_UART_BASE), -	.pfn		= __phys_to_pfn(IMX6Q_DEBUG_UART_BASE), -	.length		= 0x4000, -	.type		= MT_DEVICE, -#endif -}; - -void __init imx_lluart_map_io(void) -{ -	if (imx_lluart_desc.virtual) -		iotable_init(&imx_lluart_desc, 1); -} diff --git a/arch/arm/mach-imx/mach-apf9328.c b/arch/arm/mach-imx/mach-apf9328.c index 5c9bd2c66e6..067580b2969 100644 --- a/arch/arm/mach-imx/mach-apf9328.c +++ b/arch/arm/mach-imx/mach-apf9328.c @@ -137,17 +137,13 @@ static void __init apf9328_timer_init(void)  	mx1_clocks_init(32768);  } -static struct sys_timer apf9328_timer = { -	.init	= apf9328_timer_init, -}; -  MACHINE_START(APF9328, "Armadeus APF9328")  	/* Maintainer: Gwenhael Goavec-Merou, ARMadeus Systems */  	.map_io       = mx1_map_io,  	.init_early   = imx1_init_early,  	.init_irq     = mx1_init_irq,  	.handle_irq   = imx1_handle_irq, -	.timer        = &apf9328_timer, +	.init_time	= apf9328_timer_init,  	.init_machine = apf9328_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-armadillo5x0.c b/arch/arm/mach-imx/mach-armadillo5x0.c index 59bd6b06a6b..368a6e3f592 100644 --- a/arch/arm/mach-imx/mach-armadillo5x0.c +++ b/arch/arm/mach-imx/mach-armadillo5x0.c @@ -557,10 +557,6 @@ static void __init armadillo5x0_timer_init(void)  	mx31_clocks_init(26000000);  } -static struct sys_timer armadillo5x0_timer = { -	.init	= armadillo5x0_timer_init, -}; -  MACHINE_START(ARMADILLO5X0, "Armadillo-500")  	/* Maintainer: Alberto Panizzo  */  	.atag_offset = 0x100, @@ -568,7 +564,7 @@ MACHINE_START(ARMADILLO5X0, "Armadillo-500")  	.init_early = imx31_init_early,  	.init_irq = mx31_init_irq,  	.handle_irq = imx31_handle_irq, -	.timer = &armadillo5x0_timer, +	.init_time	= armadillo5x0_timer_init,  	.init_machine = armadillo5x0_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-bug.c b/arch/arm/mach-imx/mach-bug.c index 3a39d5aec07..2d00476f7d2 100644 --- a/arch/arm/mach-imx/mach-bug.c +++ b/arch/arm/mach-imx/mach-bug.c @@ -53,16 +53,12 @@ static void __init bug_timer_init(void)  	mx31_clocks_init(26000000);  } -static struct sys_timer bug_timer = { -	.init = bug_timer_init, -}; -  MACHINE_START(BUG, "BugLabs BUGBase")  	.map_io = mx31_map_io,  	.init_early = imx31_init_early,  	.init_irq = mx31_init_irq,  	.handle_irq = imx31_handle_irq, -	.timer = &bug_timer, +	.init_time	= bug_timer_init,  	.init_machine = bug_board_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-cpuimx27.c b/arch/arm/mach-imx/mach-cpuimx27.c index 12a370646b4..ea50870bda8 100644 --- a/arch/arm/mach-imx/mach-cpuimx27.c +++ b/arch/arm/mach-imx/mach-cpuimx27.c @@ -48,7 +48,7 @@ static const int eukrea_cpuimx27_pins[] __initconst = {  	PE14_PF_UART1_CTS,  	PE15_PF_UART1_RTS,  	/* UART4 */ -#if defined(MACH_EUKREA_CPUIMX27_USEUART4) +#if defined(CONFIG_MACH_EUKREA_CPUIMX27_USEUART4)  	PB26_AF_UART4_RTS,  	PB28_AF_UART4_TXD,  	PB29_AF_UART4_CTS, @@ -272,7 +272,7 @@ static void __init eukrea_cpuimx27_init(void)  	/* SDHC2 can be used for Wifi */  	imx27_add_mxc_mmc(1, NULL);  #endif -#if defined(MACH_EUKREA_CPUIMX27_USEUART4) +#if defined(CONFIG_MACH_EUKREA_CPUIMX27_USEUART4)  	/* in which case UART4 is also used for Bluetooth */  	imx27_add_imx_uart3(&uart_pdata);  #endif @@ -309,17 +309,13 @@ static void __init eukrea_cpuimx27_timer_init(void)  	mx27_clocks_init(26000000);  } -static struct sys_timer eukrea_cpuimx27_timer = { -	.init = eukrea_cpuimx27_timer_init, -}; -  MACHINE_START(EUKREA_CPUIMX27, "EUKREA CPUIMX27")  	.atag_offset = 0x100,  	.map_io = mx27_map_io,  	.init_early = imx27_init_early,  	.init_irq = mx27_init_irq,  	.handle_irq = imx27_handle_irq, -	.timer = &eukrea_cpuimx27_timer, +	.init_time	= eukrea_cpuimx27_timer_init,  	.init_machine = eukrea_cpuimx27_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-cpuimx35.c b/arch/arm/mach-imx/mach-cpuimx35.c index 5a31bf8c8f4..771362d1fbe 100644 --- a/arch/arm/mach-imx/mach-cpuimx35.c +++ b/arch/arm/mach-imx/mach-cpuimx35.c @@ -193,10 +193,6 @@ static void __init eukrea_cpuimx35_timer_init(void)  	mx35_clocks_init();  } -static struct sys_timer eukrea_cpuimx35_timer = { -	.init	= eukrea_cpuimx35_timer_init, -}; -  MACHINE_START(EUKREA_CPUIMX35SD, "Eukrea CPUIMX35")  	/* Maintainer: Eukrea Electromatique */  	.atag_offset = 0x100, @@ -204,7 +200,7 @@ MACHINE_START(EUKREA_CPUIMX35SD, "Eukrea CPUIMX35")  	.init_early = imx35_init_early,  	.init_irq = mx35_init_irq,  	.handle_irq = imx35_handle_irq, -	.timer = &eukrea_cpuimx35_timer, +	.init_time	= eukrea_cpuimx35_timer_init,  	.init_machine = eukrea_cpuimx35_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-cpuimx51sd.c b/arch/arm/mach-imx/mach-cpuimx51sd.c index b727de029c8..9b5ddf5bbd3 100644 --- a/arch/arm/mach-imx/mach-cpuimx51sd.c +++ b/arch/arm/mach-imx/mach-cpuimx51sd.c @@ -33,7 +33,6 @@  #include "common.h"  #include "devices-imx51.h" -#include "cpu_op-mx51.h"  #include "eukrea-baseboards.h"  #include "hardware.h"  #include "iomux-mx51.h" @@ -285,10 +284,6 @@ static void __init eukrea_cpuimx51sd_init(void)  	mxc_iomux_v3_setup_multiple_pads(eukrea_cpuimx51sd_pads,  					ARRAY_SIZE(eukrea_cpuimx51sd_pads)); -#if defined(CONFIG_CPU_FREQ_IMX) -	get_cpu_op = mx51_get_cpu_op; -#endif -  	imx51_add_imx_uart(0, &uart_pdata);  	imx51_add_mxc_nand(&eukrea_cpuimx51sd_nand_board_info);  	imx51_add_imx2_wdt(0); @@ -355,10 +350,6 @@ static void __init eukrea_cpuimx51sd_timer_init(void)  	mx51_clocks_init(32768, 24000000, 22579200, 0);  } -static struct sys_timer mxc_timer = { -	.init	= eukrea_cpuimx51sd_timer_init, -}; -  MACHINE_START(EUKREA_CPUIMX51SD, "Eukrea CPUIMX51SD")  	/* Maintainer: Eric Bénard <eric@eukrea.com> */  	.atag_offset = 0x100, @@ -366,7 +357,7 @@ MACHINE_START(EUKREA_CPUIMX51SD, "Eukrea CPUIMX51SD")  	.init_early = imx51_init_early,  	.init_irq = mx51_init_irq,  	.handle_irq = imx51_handle_irq, -	.timer = &mxc_timer, +	.init_time	= eukrea_cpuimx51sd_timer_init,  	.init_machine = eukrea_cpuimx51sd_init,  	.init_late	= imx51_init_late,  	.restart	= mxc_restart, diff --git a/arch/arm/mach-imx/mach-eukrea_cpuimx25.c b/arch/arm/mach-imx/mach-eukrea_cpuimx25.c index 75027a5ad8b..4bf45442424 100644 --- a/arch/arm/mach-imx/mach-eukrea_cpuimx25.c +++ b/arch/arm/mach-imx/mach-eukrea_cpuimx25.c @@ -159,10 +159,6 @@ static void __init eukrea_cpuimx25_timer_init(void)  	mx25_clocks_init();  } -static struct sys_timer eukrea_cpuimx25_timer = { -	.init   = eukrea_cpuimx25_timer_init, -}; -  MACHINE_START(EUKREA_CPUIMX25SD, "Eukrea CPUIMX25")  	/* Maintainer: Eukrea Electromatique */  	.atag_offset = 0x100, @@ -170,7 +166,7 @@ MACHINE_START(EUKREA_CPUIMX25SD, "Eukrea CPUIMX25")  	.init_early = imx25_init_early,  	.init_irq = mx25_init_irq,  	.handle_irq = imx25_handle_irq, -	.timer = &eukrea_cpuimx25_timer, +	.init_time = eukrea_cpuimx25_timer_init,  	.init_machine = eukrea_cpuimx25_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-imx27_visstrim_m10.c b/arch/arm/mach-imx/mach-imx27_visstrim_m10.c index 318bd8df7fc..29ac8ee651d 100644 --- a/arch/arm/mach-imx/mach-imx27_visstrim_m10.c +++ b/arch/arm/mach-imx/mach-imx27_visstrim_m10.c @@ -598,10 +598,6 @@ static void __init visstrim_m10_timer_init(void)  	mx27_clocks_init((unsigned long)25000000);  } -static struct sys_timer visstrim_m10_timer = { -	.init	= visstrim_m10_timer_init, -}; -  MACHINE_START(IMX27_VISSTRIM_M10, "Vista Silicon Visstrim_M10")  	.atag_offset = 0x100,  	.reserve = visstrim_reserve, @@ -609,7 +605,7 @@ MACHINE_START(IMX27_VISSTRIM_M10, "Vista Silicon Visstrim_M10")  	.init_early = imx27_init_early,  	.init_irq = mx27_init_irq,  	.handle_irq = imx27_handle_irq, -	.timer = &visstrim_m10_timer, +	.init_time	= visstrim_m10_timer_init,  	.init_machine = visstrim_m10_board_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-imx27ipcam.c b/arch/arm/mach-imx/mach-imx27ipcam.c index 53a86011293..1a851aea683 100644 --- a/arch/arm/mach-imx/mach-imx27ipcam.c +++ b/arch/arm/mach-imx/mach-imx27ipcam.c @@ -65,10 +65,6 @@ static void __init mx27ipcam_timer_init(void)  	mx27_clocks_init(25000000);  } -static struct sys_timer mx27ipcam_timer = { -	.init	= mx27ipcam_timer_init, -}; -  MACHINE_START(IMX27IPCAM, "Freescale IMX27IPCAM")  	/* maintainer: Freescale Semiconductor, Inc. */  	.atag_offset = 0x100, @@ -76,7 +72,7 @@ MACHINE_START(IMX27IPCAM, "Freescale IMX27IPCAM")  	.init_early = imx27_init_early,  	.init_irq = mx27_init_irq,  	.handle_irq = imx27_handle_irq, -	.timer = &mx27ipcam_timer, +	.init_time	= mx27ipcam_timer_init,  	.init_machine = mx27ipcam_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-imx27lite.c b/arch/arm/mach-imx/mach-imx27lite.c index fc8dce93137..3da2e3e44ce 100644 --- a/arch/arm/mach-imx/mach-imx27lite.c +++ b/arch/arm/mach-imx/mach-imx27lite.c @@ -72,17 +72,13 @@ static void __init mx27lite_timer_init(void)  	mx27_clocks_init(26000000);  } -static struct sys_timer mx27lite_timer = { -	.init	= mx27lite_timer_init, -}; -  MACHINE_START(IMX27LITE, "LogicPD i.MX27LITE")  	.atag_offset = 0x100,  	.map_io = mx27_map_io,  	.init_early = imx27_init_early,  	.init_irq = mx27_init_irq,  	.handle_irq = imx27_handle_irq, -	.timer = &mx27lite_timer, +	.init_time	= mx27lite_timer_init,  	.init_machine = mx27lite_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-imx53.c b/arch/arm/mach-imx/mach-imx53.c index 860284dea0e..f579c616fee 100644 --- a/arch/arm/mach-imx/mach-imx53.c +++ b/arch/arm/mach-imx/mach-imx53.c @@ -44,26 +44,22 @@ static void __init imx53_dt_init(void)  	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);  } -static void __init imx53_timer_init(void) -{ -	mx53_clocks_init_dt(); -} - -static struct sys_timer imx53_timer = { -	.init = imx53_timer_init, -}; -  static const char *imx53_dt_board_compat[] __initdata = {  	"fsl,imx53",  	NULL  }; +static void __init imx53_timer_init(void) +{ +	mx53_clocks_init_dt(); +} +  DT_MACHINE_START(IMX53_DT, "Freescale i.MX53 (Device Tree Support)")  	.map_io		= mx53_map_io,  	.init_early	= imx53_init_early,  	.init_irq	= mx53_init_irq,  	.handle_irq	= imx53_handle_irq, -	.timer		= &imx53_timer, +	.init_time	= imx53_timer_init,  	.init_machine	= imx53_dt_init,  	.init_late	= imx53_init_late,  	.dt_compat	= imx53_dt_board_compat, diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c index 4eb1b3ac794..5536fd81379 100644 --- a/arch/arm/mach-imx/mach-imx6q.c +++ b/arch/arm/mach-imx/mach-imx6q.c @@ -1,5 +1,5 @@  /* - * Copyright 2011 Freescale Semiconductor, Inc. + * Copyright 2011-2013 Freescale Semiconductor, Inc.   * Copyright 2011 Linaro Ltd.   *   * The code contained herein is licensed under the GNU General Public @@ -12,67 +12,61 @@  #include <linux/clk.h>  #include <linux/clkdev.h> -#include <linux/cpuidle.h> +#include <linux/clocksource.h> +#include <linux/cpu.h>  #include <linux/delay.h>  #include <linux/export.h>  #include <linux/init.h>  #include <linux/io.h>  #include <linux/irq.h> +#include <linux/irqchip.h>  #include <linux/of.h>  #include <linux/of_address.h>  #include <linux/of_irq.h>  #include <linux/of_platform.h> +#include <linux/opp.h>  #include <linux/phy.h>  #include <linux/regmap.h>  #include <linux/micrel_phy.h>  #include <linux/mfd/syscon.h> -#include <asm/cpuidle.h> -#include <asm/smp_twd.h>  #include <asm/hardware/cache-l2x0.h> -#include <asm/hardware/gic.h>  #include <asm/mach/arch.h> -#include <asm/mach/time.h> +#include <asm/mach/map.h>  #include <asm/system_misc.h>  #include "common.h"  #include "cpuidle.h"  #include "hardware.h" -#define IMX6Q_ANALOG_DIGPROG	0x260 +static u32 chip_revision; -static int imx6q_revision(void) +int imx6q_revision(void)  { -	struct device_node *np; -	void __iomem *base; -	static u32 rev; +	return chip_revision; +} -	if (!rev) { -		np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-anatop"); -		if (!np) -			return IMX_CHIP_REVISION_UNKNOWN; -		base = of_iomap(np, 0); -		if (!base) { -			of_node_put(np); -			return IMX_CHIP_REVISION_UNKNOWN; -		} -		rev =  readl_relaxed(base + IMX6Q_ANALOG_DIGPROG); -		iounmap(base); -		of_node_put(np); -	} +static void __init imx6q_init_revision(void) +{ +	u32 rev = imx_anatop_get_digprog();  	switch (rev & 0xff) {  	case 0: -		return IMX_CHIP_REVISION_1_0; +		chip_revision = IMX_CHIP_REVISION_1_0; +		break;  	case 1: -		return IMX_CHIP_REVISION_1_1; +		chip_revision = IMX_CHIP_REVISION_1_1; +		break;  	case 2: -		return IMX_CHIP_REVISION_1_2; +		chip_revision = IMX_CHIP_REVISION_1_2; +		break;  	default: -		return IMX_CHIP_REVISION_UNKNOWN; +		chip_revision = IMX_CHIP_REVISION_UNKNOWN;  	} + +	mxc_set_cpu_type(rev >> 16 & 0xff);  } -void imx6q_restart(char mode, const char *cmd) +static void imx6q_restart(char mode, const char *cmd)  {  	struct device_node *np;  	void __iomem *wdog_base; @@ -164,29 +158,7 @@ static void __init imx6q_1588_init(void)  }  static void __init imx6q_usb_init(void)  { -	struct regmap *anatop; - -#define HW_ANADIG_USB1_CHRG_DETECT		0x000001b0 -#define HW_ANADIG_USB2_CHRG_DETECT		0x00000210 - -#define BM_ANADIG_USB_CHRG_DETECT_EN_B		0x00100000 -#define BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B	0x00080000 - -	anatop = syscon_regmap_lookup_by_compatible("fsl,imx6q-anatop"); -	if (!IS_ERR(anatop)) { -		/* -		 * The external charger detector needs to be disabled, -		 * or the signal at DP will be poor -		 */ -		regmap_write(anatop, HW_ANADIG_USB1_CHRG_DETECT, -				BM_ANADIG_USB_CHRG_DETECT_EN_B -				| BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B); -		regmap_write(anatop, HW_ANADIG_USB2_CHRG_DETECT, -				BM_ANADIG_USB_CHRG_DETECT_EN_B | -				BM_ANADIG_USB_CHRG_DETECT_CHK_CHRG_B); -	} else { -		pr_warn("failed to find fsl,imx6q-anatop regmap\n"); -	} +	imx_anatop_usb_chrg_detect_disable();  }  static void __init imx6q_init_machine(void) @@ -196,66 +168,119 @@ static void __init imx6q_init_machine(void)  	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); +	imx_anatop_init();  	imx6q_pm_init();  	imx6q_usb_init();  	imx6q_1588_init();  } -static struct cpuidle_driver imx6q_cpuidle_driver = { -	.name			= "imx6q_cpuidle", -	.owner			= THIS_MODULE, -	.en_core_tk_irqen	= 1, -	.states[0]		= ARM_CPUIDLE_WFI_STATE, -	.state_count		= 1, +#define OCOTP_CFG3			0x440 +#define OCOTP_CFG3_SPEED_SHIFT		16 +#define OCOTP_CFG3_SPEED_1P2GHZ		0x3 + +static void __init imx6q_opp_check_1p2ghz(struct device *cpu_dev) +{ +	struct device_node *np; +	void __iomem *base; +	u32 val; + +	np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-ocotp"); +	if (!np) { +		pr_warn("failed to find ocotp node\n"); +		return; +	} + +	base = of_iomap(np, 0); +	if (!base) { +		pr_warn("failed to map ocotp\n"); +		goto put_node; +	} + +	val = readl_relaxed(base + OCOTP_CFG3); +	val >>= OCOTP_CFG3_SPEED_SHIFT; +	if ((val & 0x3) != OCOTP_CFG3_SPEED_1P2GHZ) +		if (opp_disable(cpu_dev, 1200000000)) +			pr_warn("failed to disable 1.2 GHz OPP\n"); + +put_node: +	of_node_put(np); +} + +static void __init imx6q_opp_init(struct device *cpu_dev) +{ +	struct device_node *np; + +	np = of_find_node_by_path("/cpus/cpu@0"); +	if (!np) { +		pr_warn("failed to find cpu0 node\n"); +		return; +	} + +	cpu_dev->of_node = np; +	if (of_init_opp_table(cpu_dev)) { +		pr_warn("failed to init OPP table\n"); +		goto put_node; +	} + +	imx6q_opp_check_1p2ghz(cpu_dev); + +put_node: +	of_node_put(np); +} + +static struct platform_device imx6q_cpufreq_pdev = { +	.name = "imx6q-cpufreq",  };  static void __init imx6q_init_late(void)  { -	imx_cpuidle_init(&imx6q_cpuidle_driver); +	/* +	 * WAIT mode is broken on TO 1.0 and 1.1, so there is no point +	 * to run cpuidle on them. +	 */ +	if (imx6q_revision() > IMX_CHIP_REVISION_1_1) +		imx6q_cpuidle_init(); + +	if (IS_ENABLED(CONFIG_ARM_IMX6Q_CPUFREQ)) { +		imx6q_opp_init(&imx6q_cpufreq_pdev.dev); +		platform_device_register(&imx6q_cpufreq_pdev); +	}  }  static void __init imx6q_map_io(void)  { -	imx_lluart_map_io(); +	debug_ll_io_init();  	imx_scu_map_io(); -	imx6q_clock_map_io();  } -static const struct of_device_id imx6q_irq_match[] __initconst = { -	{ .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, -	{ /* sentinel */ } -}; -  static void __init imx6q_init_irq(void)  { +	imx6q_init_revision();  	l2x0_of_init(0, ~0UL);  	imx_src_init();  	imx_gpc_init(); -	of_irq_init(imx6q_irq_match); +	irqchip_init();  }  static void __init imx6q_timer_init(void)  {  	mx6q_clocks_init(); -	twd_local_timer_of_register(); -	imx_print_silicon_rev("i.MX6Q", imx6q_revision()); +	clocksource_of_init(); +	imx_print_silicon_rev(cpu_is_imx6dl() ? "i.MX6DL" : "i.MX6Q", +			      imx6q_revision());  } -static struct sys_timer imx6q_timer = { -	.init = imx6q_timer_init, -}; -  static const char *imx6q_dt_compat[] __initdata = { +	"fsl,imx6dl",  	"fsl,imx6q",  	NULL,  }; -DT_MACHINE_START(IMX6Q, "Freescale i.MX6 Quad (Device Tree)") +DT_MACHINE_START(IMX6Q, "Freescale i.MX6 Quad/DualLite (Device Tree)")  	.smp		= smp_ops(imx_smp_ops),  	.map_io		= imx6q_map_io,  	.init_irq	= imx6q_init_irq, -	.handle_irq	= imx6q_handle_irq, -	.timer		= &imx6q_timer, +	.init_time	= imx6q_timer_init,  	.init_machine	= imx6q_init_machine,  	.init_late      = imx6q_init_late,  	.dt_compat	= imx6q_dt_compat, diff --git a/arch/arm/mach-imx/mach-kzm_arm11_01.c b/arch/arm/mach-imx/mach-kzm_arm11_01.c index 2e536ea5344..c7bc41d6b46 100644 --- a/arch/arm/mach-imx/mach-kzm_arm11_01.c +++ b/arch/arm/mach-imx/mach-kzm_arm11_01.c @@ -284,17 +284,13 @@ static void __init kzm_timer_init(void)  	mx31_clocks_init(26000000);  } -static struct sys_timer kzm_timer = { -	.init = kzm_timer_init, -}; -  MACHINE_START(KZM_ARM11_01, "Kyoto Microcomputer Co., Ltd. KZM-ARM11-01")  	.atag_offset = 0x100,  	.map_io = kzm_map_io,  	.init_early = imx31_init_early,  	.init_irq = mx31_init_irq,  	.handle_irq = imx31_handle_irq, -	.timer = &kzm_timer, +	.init_time	= kzm_timer_init,  	.init_machine = kzm_board_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-mx1ads.c b/arch/arm/mach-imx/mach-mx1ads.c index 06b483783e6..9f883e4d6fc 100644 --- a/arch/arm/mach-imx/mach-mx1ads.c +++ b/arch/arm/mach-imx/mach-mx1ads.c @@ -132,10 +132,6 @@ static void __init mx1ads_timer_init(void)  	mx1_clocks_init(32000);  } -static struct sys_timer mx1ads_timer = { -	.init	= mx1ads_timer_init, -}; -  MACHINE_START(MX1ADS, "Freescale MX1ADS")  	/* Maintainer: Sascha Hauer, Pengutronix */  	.atag_offset = 0x100, @@ -143,7 +139,7 @@ MACHINE_START(MX1ADS, "Freescale MX1ADS")  	.init_early = imx1_init_early,  	.init_irq = mx1_init_irq,  	.handle_irq = imx1_handle_irq, -	.timer = &mx1ads_timer, +	.init_time	= mx1ads_timer_init,  	.init_machine = mx1ads_init,  	.restart	= mxc_restart,  MACHINE_END @@ -154,7 +150,7 @@ MACHINE_START(MXLADS, "Freescale MXLADS")  	.init_early = imx1_init_early,  	.init_irq = mx1_init_irq,  	.handle_irq = imx1_handle_irq, -	.timer = &mx1ads_timer, +	.init_time	= mx1ads_timer_init,  	.init_machine = mx1ads_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-mx21ads.c b/arch/arm/mach-imx/mach-mx21ads.c index 6adb3136bb0..a06aa4dc37f 100644 --- a/arch/arm/mach-imx/mach-mx21ads.c +++ b/arch/arm/mach-imx/mach-mx21ads.c @@ -318,10 +318,6 @@ static void __init mx21ads_timer_init(void)  	mx21_clocks_init(32768, 26000000);  } -static struct sys_timer mx21ads_timer = { -	.init	= mx21ads_timer_init, -}; -  MACHINE_START(MX21ADS, "Freescale i.MX21ADS")  	/* maintainer: Freescale Semiconductor, Inc. */  	.atag_offset = 0x100, @@ -329,7 +325,7 @@ MACHINE_START(MX21ADS, "Freescale i.MX21ADS")  	.init_early = imx21_init_early,  	.init_irq = mx21_init_irq,  	.handle_irq = imx21_handle_irq, -	.timer = &mx21ads_timer, +	.init_time	= mx21ads_timer_init,  	.init_machine = mx21ads_board_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-mx25_3ds.c b/arch/arm/mach-imx/mach-mx25_3ds.c index b1b03aa55bb..8bcda688a00 100644 --- a/arch/arm/mach-imx/mach-mx25_3ds.c +++ b/arch/arm/mach-imx/mach-mx25_3ds.c @@ -257,10 +257,6 @@ static void __init mx25pdk_timer_init(void)  	mx25_clocks_init();  } -static struct sys_timer mx25pdk_timer = { -	.init   = mx25pdk_timer_init, -}; -  MACHINE_START(MX25_3DS, "Freescale MX25PDK (3DS)")  	/* Maintainer: Freescale Semiconductor, Inc. */  	.atag_offset = 0x100, @@ -268,7 +264,7 @@ MACHINE_START(MX25_3DS, "Freescale MX25PDK (3DS)")  	.init_early = imx25_init_early,  	.init_irq = mx25_init_irq,  	.handle_irq = imx25_handle_irq, -	.timer = &mx25pdk_timer, +	.init_time	= mx25pdk_timer_init,  	.init_machine = mx25pdk_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-mx27_3ds.c b/arch/arm/mach-imx/mach-mx27_3ds.c index d0e547fa925..25b3e4c9bc0 100644 --- a/arch/arm/mach-imx/mach-mx27_3ds.c +++ b/arch/arm/mach-imx/mach-mx27_3ds.c @@ -538,10 +538,6 @@ static void __init mx27pdk_timer_init(void)  	mx27_clocks_init(26000000);  } -static struct sys_timer mx27pdk_timer = { -	.init	= mx27pdk_timer_init, -}; -  MACHINE_START(MX27_3DS, "Freescale MX27PDK")  	/* maintainer: Freescale Semiconductor, Inc. */  	.atag_offset = 0x100, @@ -549,7 +545,7 @@ MACHINE_START(MX27_3DS, "Freescale MX27PDK")  	.init_early = imx27_init_early,  	.init_irq = mx27_init_irq,  	.handle_irq = imx27_handle_irq, -	.timer = &mx27pdk_timer, +	.init_time	= mx27pdk_timer_init,  	.init_machine = mx27pdk_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-mx27ads.c b/arch/arm/mach-imx/mach-mx27ads.c index 3d036f57f0e..9821b824dca 100644 --- a/arch/arm/mach-imx/mach-mx27ads.c +++ b/arch/arm/mach-imx/mach-mx27ads.c @@ -323,10 +323,6 @@ static void __init mx27ads_timer_init(void)  	mx27_clocks_init(fref);  } -static struct sys_timer mx27ads_timer = { -	.init	= mx27ads_timer_init, -}; -  static struct map_desc mx27ads_io_desc[] __initdata = {  	{  		.virtual = PBC_BASE_ADDRESS, @@ -349,7 +345,7 @@ MACHINE_START(MX27ADS, "Freescale i.MX27ADS")  	.init_early = imx27_init_early,  	.init_irq = mx27_init_irq,  	.handle_irq = imx27_handle_irq, -	.timer = &mx27ads_timer, +	.init_time	= mx27ads_timer_init,  	.init_machine = mx27ads_board_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-mx31_3ds.c b/arch/arm/mach-imx/mach-mx31_3ds.c index bc301befdd0..1ed916175d4 100644 --- a/arch/arm/mach-imx/mach-mx31_3ds.c +++ b/arch/arm/mach-imx/mach-mx31_3ds.c @@ -762,10 +762,6 @@ static void __init mx31_3ds_timer_init(void)  	mx31_clocks_init(26000000);  } -static struct sys_timer mx31_3ds_timer = { -	.init	= mx31_3ds_timer_init, -}; -  static void __init mx31_3ds_reserve(void)  {  	/* reserve MX31_3DS_CAMERA_BUF_SIZE bytes for mx3-camera */ @@ -780,7 +776,7 @@ MACHINE_START(MX31_3DS, "Freescale MX31PDK (3DS)")  	.init_early = imx31_init_early,  	.init_irq = mx31_init_irq,  	.handle_irq = imx31_handle_irq, -	.timer = &mx31_3ds_timer, +	.init_time	= mx31_3ds_timer_init,  	.init_machine = mx31_3ds_init,  	.reserve = mx31_3ds_reserve,  	.restart	= mxc_restart, diff --git a/arch/arm/mach-imx/mach-mx31ads.c b/arch/arm/mach-imx/mach-mx31ads.c index 8b56f8883f3..daf8889125c 100644 --- a/arch/arm/mach-imx/mach-mx31ads.c +++ b/arch/arm/mach-imx/mach-mx31ads.c @@ -576,10 +576,6 @@ static void __init mx31ads_timer_init(void)  	mx31_clocks_init(26000000);  } -static struct sys_timer mx31ads_timer = { -	.init	= mx31ads_timer_init, -}; -  MACHINE_START(MX31ADS, "Freescale MX31ADS")  	/* Maintainer: Freescale Semiconductor, Inc. */  	.atag_offset = 0x100, @@ -587,7 +583,7 @@ MACHINE_START(MX31ADS, "Freescale MX31ADS")  	.init_early = imx31_init_early,  	.init_irq = mx31ads_init_irq,  	.handle_irq = imx31_handle_irq, -	.timer = &mx31ads_timer, +	.init_time	= mx31ads_timer_init,  	.init_machine = mx31ads_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-mx31lilly.c b/arch/arm/mach-imx/mach-mx31lilly.c index 08b9965c8b3..832b1e2f964 100644 --- a/arch/arm/mach-imx/mach-mx31lilly.c +++ b/arch/arm/mach-imx/mach-mx31lilly.c @@ -303,17 +303,13 @@ static void __init mx31lilly_timer_init(void)  	mx31_clocks_init(26000000);  } -static struct sys_timer mx31lilly_timer = { -	.init	= mx31lilly_timer_init, -}; -  MACHINE_START(LILLY1131, "INCO startec LILLY-1131")  	.atag_offset = 0x100,  	.map_io = mx31_map_io,  	.init_early = imx31_init_early,  	.init_irq = mx31_init_irq,  	.handle_irq = imx31_handle_irq, -	.timer = &mx31lilly_timer, +	.init_time	= mx31lilly_timer_init,  	.init_machine = mx31lilly_board_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-mx31lite.c b/arch/arm/mach-imx/mach-mx31lite.c index bdcd92e5951..bea07299b61 100644 --- a/arch/arm/mach-imx/mach-mx31lite.c +++ b/arch/arm/mach-imx/mach-mx31lite.c @@ -285,10 +285,6 @@ static void __init mx31lite_timer_init(void)  	mx31_clocks_init(26000000);  } -static struct sys_timer mx31lite_timer = { -	.init	= mx31lite_timer_init, -}; -  MACHINE_START(MX31LITE, "LogicPD i.MX31 SOM")  	/* Maintainer: Freescale Semiconductor, Inc. */  	.atag_offset = 0x100, @@ -296,7 +292,7 @@ MACHINE_START(MX31LITE, "LogicPD i.MX31 SOM")  	.init_early = imx31_init_early,  	.init_irq = mx31_init_irq,  	.handle_irq = imx31_handle_irq, -	.timer = &mx31lite_timer, +	.init_time	= mx31lite_timer_init,  	.init_machine = mx31lite_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-mx31moboard.c b/arch/arm/mach-imx/mach-mx31moboard.c index 2517cfa9f26..dae4cd7be04 100644 --- a/arch/arm/mach-imx/mach-mx31moboard.c +++ b/arch/arm/mach-imx/mach-mx31moboard.c @@ -596,10 +596,6 @@ static void __init mx31moboard_timer_init(void)  	mx31_clocks_init(26000000);  } -static struct sys_timer mx31moboard_timer = { -	.init	= mx31moboard_timer_init, -}; -  static void __init mx31moboard_reserve(void)  {  	/* reserve 4 MiB for mx3-camera */ @@ -615,7 +611,7 @@ MACHINE_START(MX31MOBOARD, "EPFL Mobots mx31moboard")  	.init_early = imx31_init_early,  	.init_irq = mx31_init_irq,  	.handle_irq = imx31_handle_irq, -	.timer = &mx31moboard_timer, +	.init_time	= mx31moboard_timer_init,  	.init_machine = mx31moboard_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-mx35_3ds.c b/arch/arm/mach-imx/mach-mx35_3ds.c index 5277da45d60..a42f4f07051 100644 --- a/arch/arm/mach-imx/mach-mx35_3ds.c +++ b/arch/arm/mach-imx/mach-mx35_3ds.c @@ -602,10 +602,6 @@ static void __init mx35pdk_timer_init(void)  	mx35_clocks_init();  } -static struct sys_timer mx35pdk_timer = { -	.init	= mx35pdk_timer_init, -}; -  static void __init mx35_3ds_reserve(void)  {  	/* reserve MX35_3DS_CAMERA_BUF_SIZE bytes for mx3-camera */ @@ -620,7 +616,7 @@ MACHINE_START(MX35_3DS, "Freescale MX35PDK")  	.init_early = imx35_init_early,  	.init_irq = mx35_init_irq,  	.handle_irq = imx35_handle_irq, -	.timer = &mx35pdk_timer, +	.init_time	= mx35pdk_timer_init,  	.init_machine = mx35_3ds_init,  	.reserve = mx35_3ds_reserve,  	.restart	= mxc_restart, diff --git a/arch/arm/mach-imx/mach-mx50_rdp.c b/arch/arm/mach-imx/mach-mx50_rdp.c deleted file mode 100644 index 0c1f88a80bd..00000000000 --- a/arch/arm/mach-imx/mach-mx50_rdp.c +++ /dev/null @@ -1,225 +0,0 @@ -/* - * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved. - */ - -/* - * 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/platform_device.h> -#include <linux/gpio.h> -#include <linux/delay.h> -#include <linux/io.h> - -#include <asm/irq.h> -#include <asm/setup.h> -#include <asm/mach-types.h> -#include <asm/mach/arch.h> -#include <asm/mach/time.h> - -#include "common.h" -#include "devices-imx50.h" -#include "hardware.h" -#include "iomux-mx50.h" - -#define FEC_EN		IMX_GPIO_NR(6, 23) -#define FEC_RESET_B	IMX_GPIO_NR(4, 12) - -static iomux_v3_cfg_t mx50_rdp_pads[] __initdata = { -	/* SD1 */ -	MX50_PAD_ECSPI2_SS0__GPIO_4_19, -	MX50_PAD_EIM_CRE__GPIO_1_27, -	MX50_PAD_SD1_CMD__SD1_CMD, - -	MX50_PAD_SD1_CLK__SD1_CLK, -	MX50_PAD_SD1_D0__SD1_D0, -	MX50_PAD_SD1_D1__SD1_D1, -	MX50_PAD_SD1_D2__SD1_D2, -	MX50_PAD_SD1_D3__SD1_D3, - -	/* SD2 */ -	MX50_PAD_SD2_CD__GPIO_5_17, -	MX50_PAD_SD2_WP__GPIO_5_16, -	MX50_PAD_SD2_CMD__SD2_CMD, -	MX50_PAD_SD2_CLK__SD2_CLK, -	MX50_PAD_SD2_D0__SD2_D0, -	MX50_PAD_SD2_D1__SD2_D1, -	MX50_PAD_SD2_D2__SD2_D2, -	MX50_PAD_SD2_D3__SD2_D3, -	MX50_PAD_SD2_D4__SD2_D4, -	MX50_PAD_SD2_D5__SD2_D5, -	MX50_PAD_SD2_D6__SD2_D6, -	MX50_PAD_SD2_D7__SD2_D7, - -	/* SD3 */ -	MX50_PAD_SD3_CMD__SD3_CMD, -	MX50_PAD_SD3_CLK__SD3_CLK, -	MX50_PAD_SD3_D0__SD3_D0, -	MX50_PAD_SD3_D1__SD3_D1, -	MX50_PAD_SD3_D2__SD3_D2, -	MX50_PAD_SD3_D3__SD3_D3, -	MX50_PAD_SD3_D4__SD3_D4, -	MX50_PAD_SD3_D5__SD3_D5, -	MX50_PAD_SD3_D6__SD3_D6, -	MX50_PAD_SD3_D7__SD3_D7, - -	/* PWR_INT */ -	MX50_PAD_ECSPI2_MISO__GPIO_4_18, - -	/* UART pad setting */ -	MX50_PAD_UART1_TXD__UART1_TXD, -	MX50_PAD_UART1_RXD__UART1_RXD, -	MX50_PAD_UART1_RTS__UART1_RTS, -	MX50_PAD_UART2_TXD__UART2_TXD, -	MX50_PAD_UART2_RXD__UART2_RXD, -	MX50_PAD_UART2_CTS__UART2_CTS, -	MX50_PAD_UART2_RTS__UART2_RTS, - -	MX50_PAD_I2C1_SCL__I2C1_SCL, -	MX50_PAD_I2C1_SDA__I2C1_SDA, -	MX50_PAD_I2C2_SCL__I2C2_SCL, -	MX50_PAD_I2C2_SDA__I2C2_SDA, - -	MX50_PAD_EPITO__USBH1_PWR, -	/* Need to comment below line if -	 * one needs to debug owire. -	 */ -	MX50_PAD_OWIRE__USBH1_OC, -	/* using gpio to control otg pwr */ -	MX50_PAD_PWM2__GPIO_6_25, -	MX50_PAD_I2C3_SCL__USBOTG_OC, - -	MX50_PAD_SSI_RXC__FEC_MDIO, -	MX50_PAD_SSI_RXFS__FEC_MDC, -	MX50_PAD_DISP_D0__FEC_TXCLK, -	MX50_PAD_DISP_D1__FEC_RX_ER, -	MX50_PAD_DISP_D2__FEC_RX_DV, -	MX50_PAD_DISP_D3__FEC_RXD1, -	MX50_PAD_DISP_D4__FEC_RXD0, -	MX50_PAD_DISP_D5__FEC_TX_EN, -	MX50_PAD_DISP_D6__FEC_TXD1, -	MX50_PAD_DISP_D7__FEC_TXD0, -	MX50_PAD_I2C3_SDA__GPIO_6_23, -	MX50_PAD_ECSPI1_SCLK__GPIO_4_12, - -	MX50_PAD_CSPI_SS0__CSPI_SS0, -	MX50_PAD_ECSPI1_MOSI__CSPI_SS1, -	MX50_PAD_CSPI_MOSI__CSPI_MOSI, -	MX50_PAD_CSPI_MISO__CSPI_MISO, - -	/* SGTL500_OSC_EN */ -	MX50_PAD_UART1_CTS__GPIO_6_8, - -	/* SGTL_AMP_SHDN */ -	MX50_PAD_UART3_RXD__GPIO_6_15, - -	/* Keypad */ -	MX50_PAD_KEY_COL0__KEY_COL0, -	MX50_PAD_KEY_ROW0__KEY_ROW0, -	MX50_PAD_KEY_COL1__KEY_COL1, -	MX50_PAD_KEY_ROW1__KEY_ROW1, -	MX50_PAD_KEY_COL2__KEY_COL2, -	MX50_PAD_KEY_ROW2__KEY_ROW2, -	MX50_PAD_KEY_COL3__KEY_COL3, -	MX50_PAD_KEY_ROW3__KEY_ROW3, -	MX50_PAD_EIM_DA0__KEY_COL4, -	MX50_PAD_EIM_DA1__KEY_ROW4, -	MX50_PAD_EIM_DA2__KEY_COL5, -	MX50_PAD_EIM_DA3__KEY_ROW5, -	MX50_PAD_EIM_DA4__KEY_COL6, -	MX50_PAD_EIM_DA5__KEY_ROW6, -	MX50_PAD_EIM_DA6__KEY_COL7, -	MX50_PAD_EIM_DA7__KEY_ROW7, -	/*EIM pads */ -	MX50_PAD_EIM_DA8__GPIO_1_8, -	MX50_PAD_EIM_DA9__GPIO_1_9, -	MX50_PAD_EIM_DA10__GPIO_1_10, -	MX50_PAD_EIM_DA11__GPIO_1_11, -	MX50_PAD_EIM_DA12__GPIO_1_12, -	MX50_PAD_EIM_DA13__GPIO_1_13, -	MX50_PAD_EIM_DA14__GPIO_1_14, -	MX50_PAD_EIM_DA15__GPIO_1_15, -	MX50_PAD_EIM_CS2__GPIO_1_16, -	MX50_PAD_EIM_CS1__GPIO_1_17, -	MX50_PAD_EIM_CS0__GPIO_1_18, -	MX50_PAD_EIM_EB0__GPIO_1_19, -	MX50_PAD_EIM_EB1__GPIO_1_20, -	MX50_PAD_EIM_WAIT__GPIO_1_21, -	MX50_PAD_EIM_BCLK__GPIO_1_22, -	MX50_PAD_EIM_RDY__GPIO_1_23, -	MX50_PAD_EIM_OE__GPIO_1_24, -}; - -/* Serial ports */ -static const struct imxuart_platform_data uart_pdata __initconst = { -	.flags = IMXUART_HAVE_RTSCTS, -}; - -static const struct fec_platform_data fec_data __initconst = { -	.phy = PHY_INTERFACE_MODE_RMII, -}; - -static inline void mx50_rdp_fec_reset(void) -{ -	gpio_request(FEC_EN, "fec-en"); -	gpio_direction_output(FEC_EN, 0); -	gpio_request(FEC_RESET_B, "fec-reset_b"); -	gpio_direction_output(FEC_RESET_B, 0); -	msleep(1); -	gpio_set_value(FEC_RESET_B, 1); -} - -static const struct imxi2c_platform_data i2c_data __initconst = { -	.bitrate = 100000, -}; - -/* - * Board specific initialization. - */ -static void __init mx50_rdp_board_init(void) -{ -	imx50_soc_init(); - -	mxc_iomux_v3_setup_multiple_pads(mx50_rdp_pads, -					ARRAY_SIZE(mx50_rdp_pads)); - -	imx50_add_imx_uart(0, &uart_pdata); -	imx50_add_imx_uart(1, &uart_pdata); -	mx50_rdp_fec_reset(); -	imx50_add_fec(&fec_data); -	imx50_add_imx_i2c(0, &i2c_data); -	imx50_add_imx_i2c(1, &i2c_data); -	imx50_add_imx_i2c(2, &i2c_data); -} - -static void __init mx50_rdp_timer_init(void) -{ -	mx50_clocks_init(32768, 24000000, 22579200); -} - -static struct sys_timer mx50_rdp_timer = { -	.init	= mx50_rdp_timer_init, -}; - -MACHINE_START(MX50_RDP, "Freescale MX50 Reference Design Platform") -	.map_io = mx50_map_io, -	.init_early = imx50_init_early, -	.init_irq = mx50_init_irq, -	.handle_irq = imx50_handle_irq, -	.timer = &mx50_rdp_timer, -	.init_machine = mx50_rdp_board_init, -	.restart	= mxc_restart, -MACHINE_END diff --git a/arch/arm/mach-imx/mach-mx51_3ds.c b/arch/arm/mach-imx/mach-mx51_3ds.c deleted file mode 100644 index abc25bd1107..00000000000 --- a/arch/arm/mach-imx/mach-mx51_3ds.c +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright 2008-2009 Freescale Semiconductor, Inc. All Rights Reserved. - * Copyright (C) 2010 Jason Wang <jason77.wang@gmail.com> - * - * The code contained herein is licensed under the GNU General Public - * License. You may obtain a copy of the GNU General Public License - * Version 2 or later at the following locations: - * - * http://www.opensource.org/licenses/gpl-license.html - * http://www.gnu.org/copyleft/gpl.html - */ - -#include <linux/irq.h> -#include <linux/platform_device.h> -#include <linux/spi/spi.h> -#include <linux/gpio.h> - -#include <asm/mach-types.h> -#include <asm/mach/arch.h> -#include <asm/mach/time.h> - -#include "3ds_debugboard.h" -#include "common.h" -#include "devices-imx51.h" -#include "hardware.h" -#include "iomux-mx51.h" - -#define MX51_3DS_ECSPI2_CS	(GPIO_PORTC + 28) - -static iomux_v3_cfg_t mx51_3ds_pads[] = { -	/* UART1 */ -	MX51_PAD_UART1_RXD__UART1_RXD, -	MX51_PAD_UART1_TXD__UART1_TXD, -	MX51_PAD_UART1_RTS__UART1_RTS, -	MX51_PAD_UART1_CTS__UART1_CTS, - -	/* UART2 */ -	MX51_PAD_UART2_RXD__UART2_RXD, -	MX51_PAD_UART2_TXD__UART2_TXD, -	MX51_PAD_EIM_D25__UART2_CTS, -	MX51_PAD_EIM_D26__UART2_RTS, - -	/* UART3 */ -	MX51_PAD_UART3_RXD__UART3_RXD, -	MX51_PAD_UART3_TXD__UART3_TXD, -	MX51_PAD_EIM_D24__UART3_CTS, -	MX51_PAD_EIM_D27__UART3_RTS, - -	/* CPLD PARENT IRQ PIN */ -	MX51_PAD_GPIO1_6__GPIO1_6, - -	/* KPP */ -	MX51_PAD_KEY_ROW0__KEY_ROW0, -	MX51_PAD_KEY_ROW1__KEY_ROW1, -	MX51_PAD_KEY_ROW2__KEY_ROW2, -	MX51_PAD_KEY_ROW3__KEY_ROW3, -	MX51_PAD_KEY_COL0__KEY_COL0, -	MX51_PAD_KEY_COL1__KEY_COL1, -	MX51_PAD_KEY_COL2__KEY_COL2, -	MX51_PAD_KEY_COL3__KEY_COL3, -	MX51_PAD_KEY_COL4__KEY_COL4, -	MX51_PAD_KEY_COL5__KEY_COL5, - -	/* eCSPI2 */ -	MX51_PAD_NANDF_RB2__ECSPI2_SCLK, -	MX51_PAD_NANDF_RB3__ECSPI2_MISO, -	MX51_PAD_NANDF_D15__ECSPI2_MOSI, -	MX51_PAD_NANDF_D12__GPIO3_28, -}; - -/* Serial ports */ -static const struct imxuart_platform_data uart_pdata __initconst = { -	.flags = IMXUART_HAVE_RTSCTS, -}; - -static int mx51_3ds_board_keymap[] = { -	KEY(0, 0, KEY_1), -	KEY(0, 1, KEY_2), -	KEY(0, 2, KEY_3), -	KEY(0, 3, KEY_F1), -	KEY(0, 4, KEY_UP), -	KEY(0, 5, KEY_F2), - -	KEY(1, 0, KEY_4), -	KEY(1, 1, KEY_5), -	KEY(1, 2, KEY_6), -	KEY(1, 3, KEY_LEFT), -	KEY(1, 4, KEY_SELECT), -	KEY(1, 5, KEY_RIGHT), - -	KEY(2, 0, KEY_7), -	KEY(2, 1, KEY_8), -	KEY(2, 2, KEY_9), -	KEY(2, 3, KEY_F3), -	KEY(2, 4, KEY_DOWN), -	KEY(2, 5, KEY_F4), - -	KEY(3, 0, KEY_0), -	KEY(3, 1, KEY_OK), -	KEY(3, 2, KEY_ESC), -	KEY(3, 3, KEY_ENTER), -	KEY(3, 4, KEY_MENU), -	KEY(3, 5, KEY_BACK) -}; - -static const struct matrix_keymap_data mx51_3ds_map_data __initconst = { -	.keymap		= mx51_3ds_board_keymap, -	.keymap_size	= ARRAY_SIZE(mx51_3ds_board_keymap), -}; - -static int mx51_3ds_spi2_cs[] = { -	MXC_SPI_CS(0), -	MX51_3DS_ECSPI2_CS, -}; - -static const struct spi_imx_master mx51_3ds_ecspi2_pdata __initconst = { -	.chipselect	= mx51_3ds_spi2_cs, -	.num_chipselect	= ARRAY_SIZE(mx51_3ds_spi2_cs), -}; - -static struct spi_board_info mx51_3ds_spi_nor_device[] = { -	{ -	 .modalias = "m25p80", -	 .max_speed_hz = 25000000,	/* max spi clock (SCK) speed in HZ */ -	 .bus_num = 1, -	 .chip_select = 1, -	 .mode = SPI_MODE_0, -	 .platform_data = NULL,}, -}; - -/* - * Board specific initialization. - */ -static void __init mx51_3ds_init(void) -{ -	imx51_soc_init(); - -	mxc_iomux_v3_setup_multiple_pads(mx51_3ds_pads, -					ARRAY_SIZE(mx51_3ds_pads)); - -	imx51_add_imx_uart(0, &uart_pdata); -	imx51_add_imx_uart(1, &uart_pdata); -	imx51_add_imx_uart(2, &uart_pdata); - -	imx51_add_ecspi(1, &mx51_3ds_ecspi2_pdata); -	spi_register_board_info(mx51_3ds_spi_nor_device, -				ARRAY_SIZE(mx51_3ds_spi_nor_device)); - -	if (mxc_expio_init(MX51_CS5_BASE_ADDR, IMX_GPIO_NR(1, 6))) -		printk(KERN_WARNING "Init of the debugboard failed, all " -				    "devices on the board are unusable.\n"); - -	imx51_add_sdhci_esdhc_imx(0, NULL); -	imx51_add_imx_keypad(&mx51_3ds_map_data); -	imx51_add_imx2_wdt(0); -} - -static void __init mx51_3ds_timer_init(void) -{ -	mx51_clocks_init(32768, 24000000, 22579200, 0); -} - -static struct sys_timer mx51_3ds_timer = { -	.init = mx51_3ds_timer_init, -}; - -MACHINE_START(MX51_3DS, "Freescale MX51 3-Stack Board") -	/* Maintainer: Freescale Semiconductor, Inc. */ -	.atag_offset = 0x100, -	.map_io = mx51_map_io, -	.init_early = imx51_init_early, -	.init_irq = mx51_init_irq, -	.handle_irq = imx51_handle_irq, -	.timer = &mx51_3ds_timer, -	.init_machine = mx51_3ds_init, -	.init_late	= imx51_init_late, -	.restart	= mxc_restart, -MACHINE_END diff --git a/arch/arm/mach-imx/mach-mx51_babbage.c b/arch/arm/mach-imx/mach-mx51_babbage.c index d9a84ca2199..f3d264a636f 100644 --- a/arch/arm/mach-imx/mach-mx51_babbage.c +++ b/arch/arm/mach-imx/mach-mx51_babbage.c @@ -27,7 +27,6 @@  #include "common.h"  #include "devices-imx51.h" -#include "cpu_op-mx51.h"  #include "hardware.h"  #include "iomux-mx51.h" @@ -371,9 +370,6 @@ static void __init mx51_babbage_init(void)  	imx51_soc_init(); -#if defined(CONFIG_CPU_FREQ_IMX) -	get_cpu_op = mx51_get_cpu_op; -#endif  	imx51_babbage_common_init();  	imx51_add_imx_uart(0, &uart_pdata); @@ -418,10 +414,6 @@ static void __init mx51_babbage_timer_init(void)  	mx51_clocks_init(32768, 24000000, 22579200, 0);  } -static struct sys_timer mx51_babbage_timer = { -	.init = mx51_babbage_timer_init, -}; -  MACHINE_START(MX51_BABBAGE, "Freescale MX51 Babbage Board")  	/* Maintainer: Amit Kucheria <amit.kucheria@canonical.com> */  	.atag_offset = 0x100, @@ -429,7 +421,7 @@ MACHINE_START(MX51_BABBAGE, "Freescale MX51 Babbage Board")  	.init_early = imx51_init_early,  	.init_irq = mx51_init_irq,  	.handle_irq = imx51_handle_irq, -	.timer = &mx51_babbage_timer, +	.init_time	= mx51_babbage_timer_init,  	.init_machine = mx51_babbage_init,  	.init_late	= imx51_init_late,  	.restart	= mxc_restart, diff --git a/arch/arm/mach-imx/mach-mxt_td60.c b/arch/arm/mach-imx/mach-mxt_td60.c index f4a8c7e108e..a27faaba98e 100644 --- a/arch/arm/mach-imx/mach-mxt_td60.c +++ b/arch/arm/mach-imx/mach-mxt_td60.c @@ -261,10 +261,6 @@ static void __init mxt_td60_timer_init(void)  	mx27_clocks_init(26000000);  } -static struct sys_timer mxt_td60_timer = { -	.init	= mxt_td60_timer_init, -}; -  MACHINE_START(MXT_TD60, "Maxtrack i-MXT TD60")  	/* maintainer: Maxtrack Industrial */  	.atag_offset = 0x100, @@ -272,7 +268,7 @@ MACHINE_START(MXT_TD60, "Maxtrack i-MXT TD60")  	.init_early = imx27_init_early,  	.init_irq = mx27_init_irq,  	.handle_irq = imx27_handle_irq, -	.timer = &mxt_td60_timer, +	.init_time	= mxt_td60_timer_init,  	.init_machine = mxt_td60_board_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-pca100.c b/arch/arm/mach-imx/mach-pca100.c index eee369fa94a..b8b15bb1ffd 100644 --- a/arch/arm/mach-imx/mach-pca100.c +++ b/arch/arm/mach-imx/mach-pca100.c @@ -416,10 +416,6 @@ static void __init pca100_timer_init(void)  	mx27_clocks_init(26000000);  } -static struct sys_timer pca100_timer = { -	.init = pca100_timer_init, -}; -  MACHINE_START(PCA100, "phyCARD-i.MX27")  	.atag_offset = 0x100,  	.map_io = mx27_map_io, @@ -427,6 +423,6 @@ MACHINE_START(PCA100, "phyCARD-i.MX27")  	.init_irq = mx27_init_irq,  	.handle_irq = imx27_handle_irq,  	.init_machine = pca100_init, -	.timer = &pca100_timer, +	.init_time	= pca100_timer_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-pcm037.c b/arch/arm/mach-imx/mach-pcm037.c index 547fef133f6..bc0261e99d3 100644 --- a/arch/arm/mach-imx/mach-pcm037.c +++ b/arch/arm/mach-imx/mach-pcm037.c @@ -685,10 +685,6 @@ static void __init pcm037_timer_init(void)  	mx31_clocks_init(26000000);  } -static struct sys_timer pcm037_timer = { -	.init	= pcm037_timer_init, -}; -  static void __init pcm037_reserve(void)  {  	/* reserve 4 MiB for mx3-camera */ @@ -709,7 +705,7 @@ MACHINE_START(PCM037, "Phytec Phycore pcm037")  	.init_early = imx31_init_early,  	.init_irq = mx31_init_irq,  	.handle_irq = imx31_handle_irq, -	.timer = &pcm037_timer, +	.init_time	= pcm037_timer_init,  	.init_machine = pcm037_init,  	.init_late = pcm037_init_late,  	.restart	= mxc_restart, diff --git a/arch/arm/mach-imx/mach-pcm038.c b/arch/arm/mach-imx/mach-pcm038.c index 4aa0d079860..e805ac273e9 100644 --- a/arch/arm/mach-imx/mach-pcm038.c +++ b/arch/arm/mach-imx/mach-pcm038.c @@ -346,17 +346,13 @@ static void __init pcm038_timer_init(void)  	mx27_clocks_init(26000000);  } -static struct sys_timer pcm038_timer = { -	.init = pcm038_timer_init, -}; -  MACHINE_START(PCM038, "phyCORE-i.MX27")  	.atag_offset = 0x100,  	.map_io = mx27_map_io,  	.init_early = imx27_init_early,  	.init_irq = mx27_init_irq,  	.handle_irq = imx27_handle_irq, -	.timer = &pcm038_timer, +	.init_time	= pcm038_timer_init,  	.init_machine = pcm038_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-pcm043.c b/arch/arm/mach-imx/mach-pcm043.c index 92445440221..8ed533f0f8c 100644 --- a/arch/arm/mach-imx/mach-pcm043.c +++ b/arch/arm/mach-imx/mach-pcm043.c @@ -394,10 +394,6 @@ static void __init pcm043_timer_init(void)  	mx35_clocks_init();  } -static struct sys_timer pcm043_timer = { -	.init	= pcm043_timer_init, -}; -  MACHINE_START(PCM043, "Phytec Phycore pcm043")  	/* Maintainer: Pengutronix */  	.atag_offset = 0x100, @@ -405,7 +401,7 @@ MACHINE_START(PCM043, "Phytec Phycore pcm043")  	.init_early = imx35_init_early,  	.init_irq = mx35_init_irq,  	.handle_irq = imx35_handle_irq, -	.timer = &pcm043_timer, +	.init_time = pcm043_timer_init,  	.init_machine = pcm043_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-qong.c b/arch/arm/mach-imx/mach-qong.c index 96d9a91f8a3..22af27ed457 100644 --- a/arch/arm/mach-imx/mach-qong.c +++ b/arch/arm/mach-imx/mach-qong.c @@ -260,10 +260,6 @@ static void __init qong_timer_init(void)  	mx31_clocks_init(26000000);  } -static struct sys_timer qong_timer = { -	.init	= qong_timer_init, -}; -  MACHINE_START(QONG, "Dave/DENX QongEVB-LITE")  	/* Maintainer: DENX Software Engineering GmbH */  	.atag_offset = 0x100, @@ -271,7 +267,7 @@ MACHINE_START(QONG, "Dave/DENX QongEVB-LITE")  	.init_early = imx31_init_early,  	.init_irq = mx31_init_irq,  	.handle_irq = imx31_handle_irq, -	.timer = &qong_timer, +	.init_time	= qong_timer_init,  	.init_machine = qong_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-scb9328.c b/arch/arm/mach-imx/mach-scb9328.c index fc970409dba..b0fa10dd79f 100644 --- a/arch/arm/mach-imx/mach-scb9328.c +++ b/arch/arm/mach-imx/mach-scb9328.c @@ -131,10 +131,6 @@ static void __init scb9328_timer_init(void)  	mx1_clocks_init(32000);  } -static struct sys_timer scb9328_timer = { -	.init	= scb9328_timer_init, -}; -  MACHINE_START(SCB9328, "Synertronixx scb9328")  	/* Sascha Hauer */  	.atag_offset = 100, @@ -142,7 +138,7 @@ MACHINE_START(SCB9328, "Synertronixx scb9328")  	.init_early = imx1_init_early,  	.init_irq = mx1_init_irq,  	.handle_irq = imx1_handle_irq, -	.timer = &scb9328_timer, +	.init_time	= scb9328_timer_init,  	.init_machine = scb9328_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mach-vpr200.c b/arch/arm/mach-imx/mach-vpr200.c index 3aecf91e428..0910761e828 100644 --- a/arch/arm/mach-imx/mach-vpr200.c +++ b/arch/arm/mach-imx/mach-vpr200.c @@ -305,17 +305,13 @@ static void __init vpr200_timer_init(void)  	mx35_clocks_init();  } -static struct sys_timer vpr200_timer = { -	.init	= vpr200_timer_init, -}; -  MACHINE_START(VPR200, "VPR200")  	/* Maintainer: Creative Product Design */  	.map_io = mx35_map_io,  	.init_early = imx35_init_early,  	.init_irq = mx35_init_irq,  	.handle_irq = imx35_handle_irq, -	.timer = &vpr200_timer, +	.init_time = vpr200_timer_init,  	.init_machine = vpr200_board_init,  	.restart	= mxc_restart,  MACHINE_END diff --git a/arch/arm/mach-imx/mm-imx1.c b/arch/arm/mach-imx/mm-imx1.c index 7a146671e65..3c609c52d3e 100644 --- a/arch/arm/mach-imx/mm-imx1.c +++ b/arch/arm/mach-imx/mm-imx1.c @@ -51,6 +51,8 @@ void __init mx1_init_irq(void)  void __init imx1_soc_init(void)  { +	mxc_device_init(); +  	mxc_register_gpio("imx1-gpio", 0, MX1_GPIO1_BASE_ADDR, SZ_256,  						MX1_GPIO_INT_PORTA, 0);  	mxc_register_gpio("imx1-gpio", 1, MX1_GPIO2_BASE_ADDR, SZ_256, diff --git a/arch/arm/mach-imx/mm-imx3.c b/arch/arm/mach-imx/mm-imx3.c index cefa047c405..e0e69a68217 100644 --- a/arch/arm/mach-imx/mm-imx3.c +++ b/arch/arm/mach-imx/mm-imx3.c @@ -82,7 +82,7 @@ static void __iomem *imx3_ioremap_caller(unsigned long phys_addr, size_t size,  	return __arm_ioremap_caller(phys_addr, size, mtype, caller);  } -void __init imx3_init_l2x0(void) +static void __init imx3_init_l2x0(void)  {  #ifdef CONFIG_CACHE_L2X0  	void __iomem *l2x0_base; diff --git a/arch/arm/mach-imx/mm-imx5.c b/arch/arm/mach-imx/mm-imx5.c index 79d71cf23a1..b7c4e70e508 100644 --- a/arch/arm/mach-imx/mm-imx5.c +++ b/arch/arm/mach-imx/mm-imx5.c @@ -24,16 +24,6 @@  #include "iomux-v3.h"  /* - * Define the MX50 memory map. - */ -static struct map_desc mx50_io_desc[] __initdata = { -	imx_map_entry(MX50, TZIC, MT_DEVICE), -	imx_map_entry(MX50, SPBA0, MT_DEVICE), -	imx_map_entry(MX50, AIPS1, MT_DEVICE), -	imx_map_entry(MX50, AIPS2, MT_DEVICE), -}; - -/*   * Define the MX51 memory map.   */  static struct map_desc mx51_io_desc[] __initdata = { @@ -59,11 +49,6 @@ static struct map_desc mx53_io_desc[] __initdata = {   * system startup to create static physical to virtual memory mappings   * for the IO modules.   */ -void __init mx50_map_io(void) -{ -	iotable_init(mx50_io_desc, ARRAY_SIZE(mx50_io_desc)); -} -  void __init mx51_map_io(void)  {  	iotable_init(mx51_io_desc, ARRAY_SIZE(mx51_io_desc)); @@ -74,13 +59,6 @@ void __init mx53_map_io(void)  	iotable_init(mx53_io_desc, ARRAY_SIZE(mx53_io_desc));  } -void __init imx50_init_early(void) -{ -	mxc_set_cpu_type(MXC_CPU_MX50); -	mxc_iomux_v3_init(MX50_IO_ADDRESS(MX50_IOMUXC_BASE_ADDR)); -	mxc_arch_reset_init(MX50_IO_ADDRESS(MX50_WDOG_BASE_ADDR)); -} -  /*   * The MIPI HSC unit has been removed from the i.MX51 Reference Manual by   * the Freescale marketing division. However this did not remove the @@ -106,6 +84,7 @@ void __init imx51_init_early(void)  	mxc_set_cpu_type(MXC_CPU_MX51);  	mxc_iomux_v3_init(MX51_IO_ADDRESS(MX51_IOMUXC_BASE_ADDR));  	mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR)); +	imx_src_init();  }  void __init imx53_init_early(void) @@ -113,11 +92,7 @@ void __init imx53_init_early(void)  	mxc_set_cpu_type(MXC_CPU_MX53);  	mxc_iomux_v3_init(MX53_IO_ADDRESS(MX53_IOMUXC_BASE_ADDR));  	mxc_arch_reset_init(MX53_IO_ADDRESS(MX53_WDOG1_BASE_ADDR)); -} - -void __init mx50_init_irq(void) -{ -	tzic_init_irq(MX50_IO_ADDRESS(MX50_TZIC_BASE_ADDR)); +	imx_src_init();  }  void __init mx51_init_irq(void) @@ -148,31 +123,10 @@ static struct sdma_platform_data imx51_sdma_pdata __initdata = {  	.script_addrs = &imx51_sdma_script,  }; -static const struct resource imx50_audmux_res[] __initconst = { -	DEFINE_RES_MEM(MX50_AUDMUX_BASE_ADDR, SZ_16K), -}; -  static const struct resource imx51_audmux_res[] __initconst = {  	DEFINE_RES_MEM(MX51_AUDMUX_BASE_ADDR, SZ_16K),  }; -void __init imx50_soc_init(void) -{ -	mxc_device_init(); - -	/* i.mx50 has the i.mx35 type gpio */ -	mxc_register_gpio("imx35-gpio", 0, MX50_GPIO1_BASE_ADDR, SZ_16K, MX50_INT_GPIO1_LOW, MX50_INT_GPIO1_HIGH); -	mxc_register_gpio("imx35-gpio", 1, MX50_GPIO2_BASE_ADDR, SZ_16K, MX50_INT_GPIO2_LOW, MX50_INT_GPIO2_HIGH); -	mxc_register_gpio("imx35-gpio", 2, MX50_GPIO3_BASE_ADDR, SZ_16K, MX50_INT_GPIO3_LOW, MX50_INT_GPIO3_HIGH); -	mxc_register_gpio("imx35-gpio", 3, MX50_GPIO4_BASE_ADDR, SZ_16K, MX50_INT_GPIO4_LOW, MX50_INT_GPIO4_HIGH); -	mxc_register_gpio("imx35-gpio", 4, MX50_GPIO5_BASE_ADDR, SZ_16K, MX50_INT_GPIO5_LOW, MX50_INT_GPIO5_HIGH); -	mxc_register_gpio("imx35-gpio", 5, MX50_GPIO6_BASE_ADDR, SZ_16K, MX50_INT_GPIO6_LOW, MX50_INT_GPIO6_HIGH); - -	/* i.mx50 has the i.mx31 type audmux */ -	platform_device_register_simple("imx31-audmux", 0, imx50_audmux_res, -					ARRAY_SIZE(imx50_audmux_res)); -} -  void __init imx51_soc_init(void)  {  	mxc_device_init(); diff --git a/arch/arm/mach-imx/mx50.h b/arch/arm/mach-imx/mx50.h deleted file mode 100644 index 09ac19c1570..00000000000 --- a/arch/arm/mach-imx/mx50.h +++ /dev/null @@ -1,290 +0,0 @@ -#ifndef __MACH_MX50_H__ -#define __MACH_MX50_H__ - -/* - * IROM - */ -#define MX50_IROM_BASE_ADDR		0x0 -#define MX50_IROM_SIZE			SZ_64K - -/* TZIC */ -#define MX50_TZIC_BASE_ADDR		0x0fffc000 -#define MX50_TZIC_SIZE			SZ_16K - -/* - * IRAM - */ -#define MX50_IRAM_BASE_ADDR	0xf8000000	/* internal ram */ -#define MX50_IRAM_PARTITIONS	16 -#define MX50_IRAM_SIZE		(MX50_IRAM_PARTITIONS * SZ_8K)	/* 128KB */ - -/* - * Databahn - */ -#define MX50_DATABAHN_BASE_ADDR			0x14000000 - -/* - * Graphics Memory of GPU - */ -#define MX50_GPU2D_BASE_ADDR		0x20000000 - -#define MX50_DEBUG_BASE_ADDR		0x40000000 -#define MX50_DEBUG_SIZE			SZ_1M -#define MX50_ETB_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x00001000) -#define MX50_ETM_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x00002000) -#define MX50_TPIU_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x00003000) -#define MX50_CTI0_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x00004000) -#define MX50_CTI1_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x00005000) -#define MX50_CTI2_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x00006000) -#define MX50_CTI3_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x00007000) -#define MX50_CORTEX_DBG_BASE_ADDR	(MX50_DEBUG_BASE_ADDR + 0x00008000) - -#define MX50_APBHDMA_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x01000000) -#define MX50_OCOTP_CTRL_BASE_ADDR	(MX50_DEBUG_BASE_ADDR + 0x01002000) -#define MX50_DIGCTL_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x01004000) -#define MX50_GPMI_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x01006000) -#define MX50_BCH_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x01008000) -#define MX50_ELCDIF_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x0100a000) -#define MX50_EPXP_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x0100c000) -#define MX50_DCP_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x0100e000) -#define MX50_EPDC_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x01010000) -#define MX50_QOSC_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x01012000) -#define MX50_PERFMON_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x01014000) -#define MX50_SSP_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x01016000) -#define MX50_ANATOP_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x01018000) -#define MX50_NIC_BASE_ADDR		(MX50_DEBUG_BASE_ADDR + 0x08000000) - -/* - * SPBA global module enabled #0 - */ -#define MX50_SPBA0_BASE_ADDR		0x50000000 -#define MX50_SPBA0_SIZE			SZ_1M - -#define MX50_MMC_SDHC1_BASE_ADDR	(MX50_SPBA0_BASE_ADDR + 0x00004000) -#define MX50_MMC_SDHC2_BASE_ADDR	(MX50_SPBA0_BASE_ADDR + 0x00008000) -#define MX50_UART3_BASE_ADDR		(MX50_SPBA0_BASE_ADDR + 0x0000c000) -#define MX50_CSPI1_BASE_ADDR		(MX50_SPBA0_BASE_ADDR + 0x00010000) -#define MX50_SSI2_BASE_ADDR		(MX50_SPBA0_BASE_ADDR + 0x00014000) -#define MX50_MMC_SDHC3_BASE_ADDR	(MX50_SPBA0_BASE_ADDR + 0x00020000) -#define MX50_MMC_SDHC4_BASE_ADDR	(MX50_SPBA0_BASE_ADDR + 0x00024000) - -/* - * AIPS 1 - */ -#define MX50_AIPS1_BASE_ADDR	0x53f00000 -#define MX50_AIPS1_SIZE		SZ_1M - -#define MX50_OTG_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x00080000) -#define MX50_GPIO1_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x00084000) -#define MX50_GPIO2_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x00088000) -#define MX50_GPIO3_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x0008c000) -#define MX50_GPIO4_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x00090000) -#define MX50_KPP_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x00094000) -#define MX50_WDOG_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x00098000) -#define MX50_GPT1_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000a0000) -#define MX50_SRTC_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000a4000) -#define MX50_IOMUXC_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000a8000) -#define MX50_EPIT1_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000ac000) -#define MX50_PWM1_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000b4000) -#define MX50_PWM2_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000b8000) -#define MX50_UART1_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000bc000) -#define MX50_UART2_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000c0000) -#define MX50_SRC_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000d0000) -#define MX50_CCM_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000d4000) -#define MX50_GPC_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000d8000) -#define MX50_GPIO5_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000dc000) -#define MX50_GPIO6_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000e0000) -#define MX50_I2C3_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000ec000) -#define MX50_UART4_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000f0000) - -#define MX50_MSHC_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000f4000) -#define MX50_RNGB_BASE_ADDR	(MX50_AIPS1_BASE_ADDR + 0x000f8000) - -/* - * AIPS 2 - */ -#define MX50_AIPS2_BASE_ADDR	0x63f00000 -#define MX50_AIPS2_SIZE		SZ_1M - -#define MX50_PLL1_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x00080000) -#define MX50_PLL2_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x00084000) -#define MX50_PLL3_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x00088000) -#define MX50_UART5_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x00090000) -#define MX50_AHBMAX_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x00094000) -#define MX50_ARM_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x000a0000) -#define MX50_OWIRE_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x000a4000) -#define MX50_CSPI2_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x000ac000) -#define MX50_SDMA_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x000b0000) -#define MX50_ROMCP_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x000b8000) -#define MX50_CSPI3_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x000c0000) -#define MX50_I2C2_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x000c4000) -#define MX50_I2C1_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x000c8000) -#define MX50_SSI1_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x000cc000) -#define MX50_AUDMUX_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x000d0000) -#define MX50_WEIM_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x000d8000) -#define MX50_FEC_BASE_ADDR	(MX50_AIPS2_BASE_ADDR + 0x000ec000) - -/* - * Memory regions and CS - */ -#define MX50_CSD0_BASE_ADDR		0x70000000 -#define MX50_CSD1_BASE_ADDR		0xb0000000 -#define MX50_CS0_BASE_ADDR		0xf0000000 - -#define MX50_IO_P2V(x)			IMX_IO_P2V(x) -#define MX50_IO_ADDRESS(x)		IOMEM(MX50_IO_P2V(x)) - -/* - * defines for SPBA modules - */ -#define MX50_SPBA_SDHC1		0x04 -#define MX50_SPBA_SDHC2		0x08 -#define MX50_SPBA_UART3		0x0c -#define MX50_SPBA_CSPI1		0x10 -#define MX50_SPBA_SSI2		0x14 -#define MX50_SPBA_SDHC3		0x20 -#define MX50_SPBA_SDHC4		0x24 -#define MX50_SPBA_SPDIF		0x28 -#define MX50_SPBA_ATA		0x30 -#define MX50_SPBA_SLIM		0x34 -#define MX50_SPBA_HSI2C		0x38 -#define MX50_SPBA_CTRL		0x3c - -/* - * DMA request assignments - */ -#define MX50_DMA_REQ_GPC		1 -#define MX50_DMA_REQ_ATA_UART4_RX	2 -#define MX50_DMA_REQ_ATA_UART4_TX	3 -#define MX50_DMA_REQ_CSPI1_RX		6 -#define MX50_DMA_REQ_CSPI1_TX		7 -#define MX50_DMA_REQ_CSPI2_RX		8 -#define MX50_DMA_REQ_CSPI2_TX		9 -#define MX50_DMA_REQ_I2C3_SDHC3		10 -#define MX50_DMA_REQ_SDHC4		11 -#define MX50_DMA_REQ_UART2_FIRI_RX	12 -#define MX50_DMA_REQ_UART2_FIRI_TX	13 -#define MX50_DMA_REQ_EXT0		14 -#define MX50_DMA_REQ_EXT1		15 -#define MX50_DMA_REQ_UART5_RX		16 -#define MX50_DMA_REQ_UART5_TX		17 -#define MX50_DMA_REQ_UART1_RX		18 -#define MX50_DMA_REQ_UART1_TX		19 -#define MX50_DMA_REQ_I2C1_SDHC1		20 -#define MX50_DMA_REQ_I2C2_SDHC2		21 -#define MX50_DMA_REQ_SSI2_RX2		22 -#define MX50_DMA_REQ_SSI2_TX2		23 -#define MX50_DMA_REQ_SSI2_RX1		24 -#define MX50_DMA_REQ_SSI2_TX1		25 -#define MX50_DMA_REQ_SSI1_RX2		26 -#define MX50_DMA_REQ_SSI1_TX2		27 -#define MX50_DMA_REQ_SSI1_RX1		28 -#define MX50_DMA_REQ_SSI1_TX1		29 -#define MX50_DMA_REQ_CSPI_RX		38 -#define MX50_DMA_REQ_CSPI_TX		39 -#define MX50_DMA_REQ_UART3_RX		42 -#define MX50_DMA_REQ_UART3_TX		43 - -/* - * Interrupt numbers - */ -#include <asm/irq.h> -#define MX50_INT_MMC_SDHC1	(NR_IRQS_LEGACY + 1) -#define MX50_INT_MMC_SDHC2	(NR_IRQS_LEGACY + 2) -#define MX50_INT_MMC_SDHC3	(NR_IRQS_LEGACY + 3) -#define MX50_INT_MMC_SDHC4	(NR_IRQS_LEGACY + 4) -#define MX50_INT_DAP		(NR_IRQS_LEGACY + 5) -#define MX50_INT_SDMA		(NR_IRQS_LEGACY + 6) -#define MX50_INT_IOMUX		(NR_IRQS_LEGACY + 7) -#define MX50_INT_UART4		(NR_IRQS_LEGACY + 13) -#define MX50_INT_USB_H1		(NR_IRQS_LEGACY + 14) -#define MX50_INT_USB_OTG	(NR_IRQS_LEGACY + 18) -#define MX50_INT_DATABAHN	(NR_IRQS_LEGACY + 19) -#define MX50_INT_ELCDIF		(NR_IRQS_LEGACY + 20) -#define MX50_INT_EPXP		(NR_IRQS_LEGACY + 21) -#define MX50_INT_SRTC_NTZ	(NR_IRQS_LEGACY + 24) -#define MX50_INT_SRTC_TZ	(NR_IRQS_LEGACY + 25) -#define MX50_INT_EPDC		(NR_IRQS_LEGACY + 27) -#define MX50_INT_NIC		(NR_IRQS_LEGACY + 28) -#define MX50_INT_SSI1		(NR_IRQS_LEGACY + 29) -#define MX50_INT_SSI2		(NR_IRQS_LEGACY + 30) -#define MX50_INT_UART1		(NR_IRQS_LEGACY + 31) -#define MX50_INT_UART2		(NR_IRQS_LEGACY + 32) -#define MX50_INT_UART3		(NR_IRQS_LEGACY + 33) -#define MX50_INT_RESV34		(NR_IRQS_LEGACY + 34) -#define MX50_INT_RESV35		(NR_IRQS_LEGACY + 35) -#define MX50_INT_CSPI1		(NR_IRQS_LEGACY + 36) -#define MX50_INT_CSPI2		(NR_IRQS_LEGACY + 37) -#define MX50_INT_CSPI		(NR_IRQS_LEGACY + 38) -#define MX50_INT_GPT		(NR_IRQS_LEGACY + 39) -#define MX50_INT_EPIT1		(NR_IRQS_LEGACY + 40) -#define MX50_INT_GPIO1_INT7	(NR_IRQS_LEGACY + 42) -#define MX50_INT_GPIO1_INT6	(NR_IRQS_LEGACY + 43) -#define MX50_INT_GPIO1_INT5	(NR_IRQS_LEGACY + 44) -#define MX50_INT_GPIO1_INT4	(NR_IRQS_LEGACY + 45) -#define MX50_INT_GPIO1_INT3	(NR_IRQS_LEGACY + 46) -#define MX50_INT_GPIO1_INT2	(NR_IRQS_LEGACY + 47) -#define MX50_INT_GPIO1_INT1	(NR_IRQS_LEGACY + 48) -#define MX50_INT_GPIO1_INT0	(NR_IRQS_LEGACY + 49) -#define MX50_INT_GPIO1_LOW	(NR_IRQS_LEGACY + 50) -#define MX50_INT_GPIO1_HIGH	(NR_IRQS_LEGACY + 51) -#define MX50_INT_GPIO2_LOW	(NR_IRQS_LEGACY + 52) -#define MX50_INT_GPIO2_HIGH	(NR_IRQS_LEGACY + 53) -#define MX50_INT_GPIO3_LOW	(NR_IRQS_LEGACY + 54) -#define MX50_INT_GPIO3_HIGH	(NR_IRQS_LEGACY + 55) -#define MX50_INT_GPIO4_LOW	(NR_IRQS_LEGACY + 56) -#define MX50_INT_GPIO4_HIGH	(NR_IRQS_LEGACY + 57) -#define MX50_INT_WDOG1		(NR_IRQS_LEGACY + 58) -#define MX50_INT_KPP		(NR_IRQS_LEGACY + 60) -#define MX50_INT_PWM1		(NR_IRQS_LEGACY + 61) -#define MX50_INT_I2C1		(NR_IRQS_LEGACY + 62) -#define MX50_INT_I2C2		(NR_IRQS_LEGACY + 63) -#define MX50_INT_I2C3		(NR_IRQS_LEGACY + 64) -#define MX50_INT_RESV65		(NR_IRQS_LEGACY + 65) -#define MX50_INT_DCDC		(NR_IRQS_LEGACY + 66) -#define MX50_INT_THERMAL_ALARM	(NR_IRQS_LEGACY + 67) -#define MX50_INT_ANA3		(NR_IRQS_LEGACY + 68) -#define MX50_INT_ANA4		(NR_IRQS_LEGACY + 69) -#define MX50_INT_CCM1		(NR_IRQS_LEGACY + 71) -#define MX50_INT_CCM2		(NR_IRQS_LEGACY + 72) -#define MX50_INT_GPC1		(NR_IRQS_LEGACY + 73) -#define MX50_INT_GPC2		(NR_IRQS_LEGACY + 74) -#define MX50_INT_SRC		(NR_IRQS_LEGACY + 75) -#define MX50_INT_NM		(NR_IRQS_LEGACY + 76) -#define MX50_INT_PMU		(NR_IRQS_LEGACY + 77) -#define MX50_INT_CTI_IRQ	(NR_IRQS_LEGACY + 78) -#define MX50_INT_CTI1_TG0	(NR_IRQS_LEGACY + 79) -#define MX50_INT_CTI1_TG1	(NR_IRQS_LEGACY + 80) -#define MX50_INT_GPU2_IRQ	(NR_IRQS_LEGACY + 84) -#define MX50_INT_GPU2_BUSY	(NR_IRQS_LEGACY + 85) -#define MX50_INT_UART5		(NR_IRQS_LEGACY + 86) -#define MX50_INT_FEC		(NR_IRQS_LEGACY + 87) -#define MX50_INT_OWIRE		(NR_IRQS_LEGACY + 88) -#define MX50_INT_CTI1_TG2	(NR_IRQS_LEGACY + 89) -#define MX50_INT_SJC		(NR_IRQS_LEGACY + 90) -#define MX50_INT_DCP_CHAN1_3	(NR_IRQS_LEGACY + 91) -#define MX50_INT_DCP_CHAN0	(NR_IRQS_LEGACY + 92) -#define MX50_INT_PWM2		(NR_IRQS_LEGACY + 94) -#define MX50_INT_RNGB		(NR_IRQS_LEGACY + 97) -#define MX50_INT_CTI1_TG3	(NR_IRQS_LEGACY + 98) -#define MX50_INT_RAWNAND_BCH	(NR_IRQS_LEGACY + 100) -#define MX50_INT_RAWNAND_GPMI	(NR_IRQS_LEGACY + 102) -#define MX50_INT_GPIO5_LOW	(NR_IRQS_LEGACY + 103) -#define MX50_INT_GPIO5_HIGH	(NR_IRQS_LEGACY + 104) -#define MX50_INT_GPIO6_LOW	(NR_IRQS_LEGACY + 105) -#define MX50_INT_GPIO6_HIGH	(NR_IRQS_LEGACY + 106) -#define MX50_INT_MSHC		(NR_IRQS_LEGACY + 109) -#define MX50_INT_APBHDMA_CHAN0	(NR_IRQS_LEGACY + 110) -#define MX50_INT_APBHDMA_CHAN1	(NR_IRQS_LEGACY + 111) -#define MX50_INT_APBHDMA_CHAN2	(NR_IRQS_LEGACY + 112) -#define MX50_INT_APBHDMA_CHAN3	(NR_IRQS_LEGACY + 113) -#define MX50_INT_APBHDMA_CHAN4	(NR_IRQS_LEGACY + 114) -#define MX50_INT_APBHDMA_CHAN5	(NR_IRQS_LEGACY + 115) -#define MX50_INT_APBHDMA_CHAN6	(NR_IRQS_LEGACY + 116) -#define MX50_INT_APBHDMA_CHAN7	(NR_IRQS_LEGACY + 117) - -#if !defined(__ASSEMBLY__) && !defined(__MXC_BOOT_UNCOMPRESS) -extern int mx50_revision(void); -#endif - -#endif /* ifndef __MACH_MX50_H__ */ diff --git a/arch/arm/mach-imx/mx6q.h b/arch/arm/mach-imx/mx6q.h deleted file mode 100644 index 19d3f54db5a..00000000000 --- a/arch/arm/mach-imx/mx6q.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2011 Freescale Semiconductor, Inc. All Rights Reserved. - * Copyright 2011 Linaro Ltd. - * - * The code contained herein is licensed under the GNU General Public - * License. You may obtain a copy of the GNU General Public License - * Version 2 or later at the following locations: - * - * http://www.opensource.org/licenses/gpl-license.html - * http://www.gnu.org/copyleft/gpl.html - */ - -#ifndef __MACH_MX6Q_H__ -#define __MACH_MX6Q_H__ - -#define MX6Q_IO_P2V(x)			IMX_IO_P2V(x) -#define MX6Q_IO_ADDRESS(x)		IOMEM(MX6Q_IO_P2V(x)) - -/* - * The following are the blocks that need to be statically mapped. - * For other blocks, the base address really should be retrieved from - * device tree. - */ -#define MX6Q_SCU_BASE_ADDR		0x00a00000 -#define MX6Q_SCU_SIZE			0x1000 -#define MX6Q_CCM_BASE_ADDR		0x020c4000 -#define MX6Q_CCM_SIZE			0x4000 -#define MX6Q_ANATOP_BASE_ADDR		0x020c8000 -#define MX6Q_ANATOP_SIZE		0x1000 - -#endif	/* __MACH_MX6Q_H__ */ diff --git a/arch/arm/mach-imx/mxc.h b/arch/arm/mach-imx/mxc.h index d78298366a9..8629e5be7ec 100644 --- a/arch/arm/mach-imx/mxc.h +++ b/arch/arm/mach-imx/mxc.h @@ -32,9 +32,10 @@  #define MXC_CPU_MX27		27  #define MXC_CPU_MX31		31  #define MXC_CPU_MX35		35 -#define MXC_CPU_MX50		50  #define MXC_CPU_MX51		51  #define MXC_CPU_MX53		53 +#define MXC_CPU_IMX6DL		0x61 +#define MXC_CPU_IMX6Q		0x63  #define IMX_CHIP_REVISION_1_0		0x10  #define IMX_CHIP_REVISION_1_1		0x11 @@ -126,18 +127,6 @@ extern unsigned int __mxc_cpu_type;  # define cpu_is_mx35()		(0)  #endif -#ifdef CONFIG_SOC_IMX50 -# ifdef mxc_cpu_type -#  undef mxc_cpu_type -#  define mxc_cpu_type __mxc_cpu_type -# else -#  define mxc_cpu_type MXC_CPU_MX50 -# endif -# define cpu_is_mx50()		(mxc_cpu_type == MXC_CPU_MX50) -#else -# define cpu_is_mx50()		(0) -#endif -  #ifdef CONFIG_SOC_IMX51  # ifdef mxc_cpu_type  #  undef mxc_cpu_type @@ -163,6 +152,15 @@ extern unsigned int __mxc_cpu_type;  #endif  #ifndef __ASSEMBLY__ +static inline bool cpu_is_imx6dl(void) +{ +	return __mxc_cpu_type == MXC_CPU_IMX6DL; +} + +static inline bool cpu_is_imx6q(void) +{ +	return __mxc_cpu_type == MXC_CPU_IMX6Q; +}  struct cpu_op {  	u32 cpu_rate; diff --git a/arch/arm/mach-imx/platsmp.c b/arch/arm/mach-imx/platsmp.c index 66fae885c84..4a69305db65 100644 --- a/arch/arm/mach-imx/platsmp.c +++ b/arch/arm/mach-imx/platsmp.c @@ -14,12 +14,13 @@  #include <linux/smp.h>  #include <asm/page.h>  #include <asm/smp_scu.h> -#include <asm/hardware/gic.h>  #include <asm/mach/map.h>  #include "common.h"  #include "hardware.h" +#define SCU_STANDBY_ENABLE	(1 << 5) +  static void __iomem *scu_base;  static struct map_desc scu_io_desc __initdata = { @@ -42,14 +43,12 @@ void __init imx_scu_map_io(void)  	scu_base = IMX_IO_ADDRESS(base);  } -static void __cpuinit imx_secondary_init(unsigned int cpu) +void imx_scu_standby_enable(void)  { -	/* -	 * if any interrupts are already enabled for the primary -	 * core (e.g. timer irq), then they will not have been enabled -	 * for us: do so -	 */ -	gic_secondary_init(0); +	u32 val = readl_relaxed(scu_base); + +	val |= SCU_STANDBY_ENABLE; +	writel_relaxed(val, scu_base);  }  static int __cpuinit imx_boot_secondary(unsigned int cpu, struct task_struct *idle) @@ -69,10 +68,8 @@ static void __init imx_smp_init_cpus(void)  	ncores = scu_get_core_count(scu_base); -	for (i = 0; i < ncores; i++) -		set_cpu_possible(i, true); - -	set_smp_cross_call(gic_raise_softirq); +	for (i = ncores; i < NR_CPUS; i++) +		set_cpu_possible(i, false);  }  void imx_smp_prepare(void) @@ -88,7 +85,6 @@ static void __init imx_smp_prepare_cpus(unsigned int max_cpus)  struct smp_operations  imx_smp_ops __initdata = {  	.smp_init_cpus		= imx_smp_init_cpus,  	.smp_prepare_cpus	= imx_smp_prepare_cpus, -	.smp_secondary_init	= imx_secondary_init,  	.smp_boot_secondary	= imx_boot_secondary,  #ifdef CONFIG_HOTPLUG_CPU  	.cpu_die		= imx_cpu_die, diff --git a/arch/arm/mach-imx/pm-imx5.c b/arch/arm/mach-imx/pm-imx5.c index 2e063c2deb9..82e79c658eb 100644 --- a/arch/arm/mach-imx/pm-imx5.c +++ b/arch/arm/mach-imx/pm-imx5.c @@ -34,7 +34,7 @@  /*   * set cpu low power mode before WFI instruction. This function is called - * mx5 because it can be used for mx50, mx51, and mx53. + * mx5 because it can be used for mx51, and mx53.   */  static void mx5_cpu_lp_set(enum mxc_cpu_pwr_mode mode)  { @@ -85,10 +85,7 @@ static void mx5_cpu_lp_set(enum mxc_cpu_pwr_mode mode)  	__raw_writel(plat_lpc, MXC_CORTEXA8_PLAT_LPC);  	__raw_writel(ccm_clpcr, MXC_CCM_CLPCR);  	__raw_writel(arm_srpgcr, MXC_SRPG_ARM_SRPGCR); - -	/* Enable NEON SRPG for all but MX50TO1.0. */ -	if (mx50_revision() != IMX_CHIP_REVISION_1_0) -		__raw_writel(arm_srpgcr, MXC_SRPG_NEON_SRPGCR); +	__raw_writel(arm_srpgcr, MXC_SRPG_NEON_SRPGCR);  	if (stop_mode) {  		empgc0 |= MXC_SRPGCR_PCR; @@ -152,33 +149,6 @@ static void imx5_pm_idle(void)  	imx5_cpu_do_idle();  } -static int imx5_cpuidle_enter(struct cpuidle_device *dev, -				struct cpuidle_driver *drv, int idx) -{ -	int ret; - -	ret = imx5_cpu_do_idle(); -	if (ret < 0) -		return ret; - -	return idx; -} - -static struct cpuidle_driver imx5_cpuidle_driver = { -	.name			= "imx5_cpuidle", -	.owner			= THIS_MODULE, -	.en_core_tk_irqen	= 1, -	.states[0]	= { -		.enter			= imx5_cpuidle_enter, -		.exit_latency		= 2, -		.target_residency	= 1, -		.flags			= CPUIDLE_FLAG_TIME_VALID, -		.name			= "IMX5 SRPG", -		.desc			= "CPU state retained,powered off", -	}, -	.state_count		= 1, -}; -  static int __init imx5_pm_common_init(void)  {  	int ret; @@ -196,8 +166,7 @@ static int __init imx5_pm_common_init(void)  	/* Set the registers to the default cpu idle state. */  	mx5_cpu_lp_set(IMX5_DEFAULT_CPU_IDLE_STATE); -	imx_cpuidle_init(&imx5_cpuidle_driver); -	return 0; +	return imx5_cpuidle_init();  }  void __init imx51_pm_init(void) diff --git a/arch/arm/mach-imx/pm-imx6q.c b/arch/arm/mach-imx/pm-imx6q.c index ee42d20cba1..204942749e2 100644 --- a/arch/arm/mach-imx/pm-imx6q.c +++ b/arch/arm/mach-imx/pm-imx6q.c @@ -1,5 +1,5 @@  /* - * Copyright 2011 Freescale Semiconductor, Inc. + * Copyright 2011-2013 Freescale Semiconductor, Inc.   * Copyright 2011 Linaro Ltd.   *   * The code contained herein is licensed under the GNU General Public @@ -22,8 +22,6 @@  #include "common.h"  #include "hardware.h" -extern unsigned long phys_l2x0_saved_regs; -  static int imx6q_suspend_finish(unsigned long val)  {  	cpu_do_idle(); @@ -36,10 +34,12 @@ static int imx6q_pm_enter(suspend_state_t state)  	case PM_SUSPEND_MEM:  		imx6q_set_lpm(STOP_POWER_OFF);  		imx_gpc_pre_suspend(); +		imx_anatop_pre_suspend();  		imx_set_cpu_jump(0, v7_cpu_resume);  		/* Zzz ... */  		cpu_suspend(0, imx6q_suspend_finish);  		imx_smp_prepare(); +		imx_anatop_post_resume();  		imx_gpc_post_resume();  		imx6q_set_lpm(WAIT_CLOCKED);  		break; @@ -57,18 +57,5 @@ static const struct platform_suspend_ops imx6q_pm_ops = {  void __init imx6q_pm_init(void)  { -	/* -	 * The l2x0 core code provides an infrastucture to save and restore -	 * l2x0 registers across suspend/resume cycle.  But because imx6q -	 * retains L2 content during suspend and needs to resume L2 before -	 * MMU is enabled, it can only utilize register saving support and -	 * have to take care of restoring on its own.  So we save physical -	 * address of the data structure used by l2x0 core to save registers, -	 * and later restore the necessary ones in imx6q resume entry. -	 */ -#ifdef CONFIG_CACHE_L2X0 -	phys_l2x0_saved_regs = __pa(&l2x0_saved_regs); -#endif -  	suspend_set_ops(&imx6q_pm_ops);  } diff --git a/arch/arm/mach-imx/src.c b/arch/arm/mach-imx/src.c index e15f1555c59..10a6b1a8c5a 100644 --- a/arch/arm/mach-imx/src.c +++ b/arch/arm/mach-imx/src.c @@ -14,16 +14,73 @@  #include <linux/io.h>  #include <linux/of.h>  #include <linux/of_address.h> +#include <linux/reset-controller.h>  #include <linux/smp.h>  #include <asm/smp_plat.h> +#include "common.h"  #define SRC_SCR				0x000  #define SRC_GPR1			0x020  #define BP_SRC_SCR_WARM_RESET_ENABLE	0 +#define BP_SRC_SCR_SW_GPU_RST		1 +#define BP_SRC_SCR_SW_VPU_RST		2 +#define BP_SRC_SCR_SW_IPU1_RST		3 +#define BP_SRC_SCR_SW_OPEN_VG_RST	4 +#define BP_SRC_SCR_SW_IPU2_RST		12  #define BP_SRC_SCR_CORE1_RST		14  #define BP_SRC_SCR_CORE1_ENABLE		22  static void __iomem *src_base; +static DEFINE_SPINLOCK(scr_lock); + +static const int sw_reset_bits[5] = { +	BP_SRC_SCR_SW_GPU_RST, +	BP_SRC_SCR_SW_VPU_RST, +	BP_SRC_SCR_SW_IPU1_RST, +	BP_SRC_SCR_SW_OPEN_VG_RST, +	BP_SRC_SCR_SW_IPU2_RST +}; + +static int imx_src_reset_module(struct reset_controller_dev *rcdev, +		unsigned long sw_reset_idx) +{ +	unsigned long timeout; +	unsigned long flags; +	int bit; +	u32 val; + +	if (!src_base) +		return -ENODEV; + +	if (sw_reset_idx >= ARRAY_SIZE(sw_reset_bits)) +		return -EINVAL; + +	bit = 1 << sw_reset_bits[sw_reset_idx]; + +	spin_lock_irqsave(&scr_lock, flags); +	val = readl_relaxed(src_base + SRC_SCR); +	val |= bit; +	writel_relaxed(val, src_base + SRC_SCR); +	spin_unlock_irqrestore(&scr_lock, flags); + +	timeout = jiffies + msecs_to_jiffies(1000); +	while (readl(src_base + SRC_SCR) & bit) { +		if (time_after(jiffies, timeout)) +			return -ETIME; +		cpu_relax(); +	} + +	return 0; +} + +static struct reset_control_ops imx_src_ops = { +	.reset = imx_src_reset_module, +}; + +static struct reset_controller_dev imx_reset_controller = { +	.ops = &imx_src_ops, +	.nr_resets = ARRAY_SIZE(sw_reset_bits), +};  void imx_enable_cpu(int cpu, bool enable)  { @@ -31,9 +88,11 @@ void imx_enable_cpu(int cpu, bool enable)  	cpu = cpu_logical_map(cpu);  	mask = 1 << (BP_SRC_SCR_CORE1_ENABLE + cpu - 1); +	spin_lock(&scr_lock);  	val = readl_relaxed(src_base + SRC_SCR);  	val = enable ? val | mask : val & ~mask;  	writel_relaxed(val, src_base + SRC_SCR); +	spin_unlock(&scr_lock);  }  void imx_set_cpu_jump(int cpu, void *jump_addr) @@ -43,14 +102,28 @@ void imx_set_cpu_jump(int cpu, void *jump_addr)  		       src_base + SRC_GPR1 + cpu * 8);  } +u32 imx_get_cpu_arg(int cpu) +{ +	cpu = cpu_logical_map(cpu); +	return readl_relaxed(src_base + SRC_GPR1 + cpu * 8 + 4); +} + +void imx_set_cpu_arg(int cpu, u32 arg) +{ +	cpu = cpu_logical_map(cpu); +	writel_relaxed(arg, src_base + SRC_GPR1 + cpu * 8 + 4); +} +  void imx_src_prepare_restart(void)  {  	u32 val;  	/* clear enable bits of secondary cores */ +	spin_lock(&scr_lock);  	val = readl_relaxed(src_base + SRC_SCR);  	val &= ~(0x7 << BP_SRC_SCR_CORE1_ENABLE);  	writel_relaxed(val, src_base + SRC_SCR); +	spin_unlock(&scr_lock);  	/* clear persistent entry register of primary core */  	writel_relaxed(0, src_base + SRC_GPR1); @@ -61,15 +134,23 @@ void __init imx_src_init(void)  	struct device_node *np;  	u32 val; -	np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-src"); +	np = of_find_compatible_node(NULL, NULL, "fsl,imx51-src"); +	if (!np) +		return;  	src_base = of_iomap(np, 0);  	WARN_ON(!src_base); +	imx_reset_controller.of_node = np; +	if (IS_ENABLED(CONFIG_RESET_CONTROLLER)) +		reset_controller_register(&imx_reset_controller); +  	/*  	 * force warm reset sources to generate cold reset  	 * for a more reliable restart  	 */ +	spin_lock(&scr_lock);  	val = readl_relaxed(src_base + SRC_SCR);  	val &= ~(1 << BP_SRC_SCR_WARM_RESET_ENABLE);  	writel_relaxed(val, src_base + SRC_SCR); +	spin_unlock(&scr_lock);  } diff --git a/arch/arm/mach-imx/time.c b/arch/arm/mach-imx/time.c index f017302f6d0..fea91313678 100644 --- a/arch/arm/mach-imx/time.c +++ b/arch/arm/mach-imx/time.c @@ -152,7 +152,8 @@ static int v2_set_next_event(unsigned long evt,  	__raw_writel(tcmp, timer_base + V2_TCMP); -	return (int)(tcmp - __raw_readl(timer_base + V2_TCN)) < 0 ? +	return evt < 0x7fffffff && +		(int)(tcmp - __raw_readl(timer_base + V2_TCN)) < 0 ?  				-ETIME : 0;  } @@ -256,7 +257,6 @@ static struct irqaction mxc_timer_irq = {  static struct clock_event_device clockevent_mxc = {  	.name		= "mxc_timer1",  	.features	= CLOCK_EVT_FEAT_ONESHOT, -	.shift		= 32,  	.set_mode	= mxc_set_mode,  	.set_next_event	= mx1_2_set_next_event,  	.rating		= 200, @@ -264,21 +264,13 @@ static struct clock_event_device clockevent_mxc = {  static int __init mxc_clockevent_init(struct clk *timer_clk)  { -	unsigned int c = clk_get_rate(timer_clk); -  	if (timer_is_v2())  		clockevent_mxc.set_next_event = v2_set_next_event; -	clockevent_mxc.mult = div_sc(c, NSEC_PER_SEC, -					clockevent_mxc.shift); -	clockevent_mxc.max_delta_ns = -			clockevent_delta2ns(0xfffffffe, &clockevent_mxc); -	clockevent_mxc.min_delta_ns = -			clockevent_delta2ns(0xff, &clockevent_mxc); -  	clockevent_mxc.cpumask = cpumask_of(0); - -	clockevents_register_device(&clockevent_mxc); +	clockevents_config_and_register(&clockevent_mxc, +					clk_get_rate(timer_clk), +					0xff, 0xfffffffe);  	return 0;  } diff --git a/arch/arm/mach-imx/tzic.c b/arch/arm/mach-imx/tzic.c index 9721161f208..8183178d5aa 100644 --- a/arch/arm/mach-imx/tzic.c +++ b/arch/arm/mach-imx/tzic.c @@ -49,7 +49,7 @@  #define TZIC_SWINT	0x0F00	/* Software Interrupt Rigger Register */  #define TZIC_ID0	0x0FD0	/* Indentification Register 0 */ -void __iomem *tzic_base; /* Used as irq controller base in entry-macro.S */ +static void __iomem *tzic_base;  static struct irq_domain *domain;  #define TZIC_NUM_IRQS 128  |