diff options
Diffstat (limited to 'arch/arm')
770 files changed, 21943 insertions, 15240 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index ccb6c0c7152..1e31dac36a5 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -15,6 +15,7 @@ config ARM  	select GENERIC_IRQ_SHOW  	select GENERIC_PCI_IOMAP  	select GENERIC_SMP_IDLE_THREAD +	select GENERIC_IDLE_POLL_SETUP  	select GENERIC_STRNCPY_FROM_USER  	select GENERIC_STRNLEN_USER  	select HARDIRQS_SW_RESEND @@ -58,6 +59,7 @@ config ARM  	select CLONE_BACKWARDS  	select OLD_SIGSUSPEND3  	select OLD_SIGACTION +	select HAVE_CONTEXT_TRACKING  	help  	  The ARM series is a line of low-power-consumption RISC chip designs  	  licensed by ARM Ltd and targeted at embedded applications and @@ -361,37 +363,6 @@ config ARCH_AT91  	  This enables support for systems based on Atmel  	  AT91RM9200 and AT91SAM9* processors. -config ARCH_BCM2835 -	bool "Broadcom BCM2835 family" -	select ARCH_REQUIRE_GPIOLIB -	select ARM_AMBA -	select ARM_ERRATA_411920 -	select ARM_TIMER_SP804 -	select CLKDEV_LOOKUP -	select CLKSRC_OF -	select COMMON_CLK -	select CPU_V6 -	select GENERIC_CLOCKEVENTS -	select MULTI_IRQ_HANDLER -	select PINCTRL -	select PINCTRL_BCM2835 -	select SPARSE_IRQ -	select USE_OF -	help -	  This enables support for the Broadcom BCM2835 SoC. This SoC is -	  use in the Raspberry Pi, and Roku 2 devices. - -config ARCH_CNS3XXX -	bool "Cavium Networks CNS3XXX family" -	select ARM_GIC -	select CPU_V6K -	select GENERIC_CLOCKEVENTS -	select MIGHT_HAVE_CACHE_L2X0 -	select MIGHT_HAVE_PCI -	select PCI_DOMAINS if PCI -	help -	  Support for Cavium Networks CNS3XXX platform. -  config ARCH_CLPS711X  	bool "Cirrus Logic CLPS711x/EP721x/EP731x-based"  	select ARCH_REQUIRE_GPIOLIB @@ -410,25 +381,11 @@ config ARCH_GEMINI  	bool "Cortina Systems Gemini"  	select ARCH_REQUIRE_GPIOLIB  	select ARCH_USES_GETTIMEOFFSET +	select NEED_MACH_GPIO_H  	select CPU_FA526  	help  	  Support for the Cortina Systems Gemini family SoCs -config ARCH_SIRF -	bool "CSR SiRF" -	select ARCH_REQUIRE_GPIOLIB -	select AUTO_ZRELADDR -	select COMMON_CLK -	select GENERIC_CLOCKEVENTS -	select GENERIC_IRQ_CHIP -	select MIGHT_HAVE_CACHE_L2X0 -	select NO_IOPORT -	select PINCTRL -	select PINCTRL_SIRF -	select USE_OF -	help -	  Support for CSR SiRFprimaII/Marco/Polo platforms -  config ARCH_EBSA110  	bool "EBSA-110"  	select ARCH_USES_GETTIMEOFFSET @@ -468,21 +425,6 @@ config ARCH_FOOTBRIDGE  	  Support for systems based on the DC21285 companion chip  	  ("FootBridge"), such as the Simtec CATS and the Rebel NetWinder. -config ARCH_MXS -	bool "Freescale MXS-based" -	select ARCH_REQUIRE_GPIOLIB -	select CLKDEV_LOOKUP -	select CLKSRC_MMIO -	select COMMON_CLK -	select GENERIC_CLOCKEVENTS -	select HAVE_CLK_PREPARE -	select MULTI_IRQ_HANDLER -	select PINCTRL -	select SPARSE_IRQ -	select USE_OF -	help -	  Support for Freescale MXS-based family of processors -  config ARCH_NETX  	bool "Hilscher NetX based"  	select ARM_VIC @@ -492,14 +434,6 @@ config ARCH_NETX  	help  	  This enables support for systems based on the Hilscher NetX Soc -config ARCH_H720X -	bool "Hynix HMS720x-based" -	select ARCH_USES_GETTIMEOFFSET -	select CPU_ARM720T -	select ISA_DMA_API -	help -	  This enables support for systems based on the Hynix HMS720x -  config ARCH_IOP13XX  	bool "IOP13xx-based"  	depends on MMU @@ -549,6 +483,8 @@ config ARCH_IXP4XX  	select GENERIC_CLOCKEVENTS  	select MIGHT_HAVE_PCI  	select NEED_MACH_IO_H +	select USB_EHCI_BIG_ENDIAN_MMIO +	select USB_EHCI_BIG_ENDIAN_DESC  	help  	  Support for Intel's IXP4XX (XScale) family of processors. @@ -661,25 +597,6 @@ config ARCH_LPC32XX  	help  	  Support for the NXP LPC32XX family of processors -config ARCH_TEGRA -	bool "NVIDIA Tegra" -	select ARCH_HAS_CPUFREQ -	select ARCH_REQUIRE_GPIOLIB -	select CLKDEV_LOOKUP -	select CLKSRC_MMIO -	select CLKSRC_OF -	select COMMON_CLK -	select GENERIC_CLOCKEVENTS -	select HAVE_CLK -	select HAVE_SMP -	select MIGHT_HAVE_CACHE_L2X0 -	select SOC_BUS -	select SPARSE_IRQ -	select USE_OF -	help -	  This enables support for NVIDIA Tegra based systems (Tegra APX, -	  Tegra 6xx and Tegra 2 series). -  config ARCH_PXA  	bool "PXA2xx/PXA3xx-based"  	depends on MMU @@ -717,6 +634,8 @@ config ARCH_SHMOBILE  	bool "Renesas SH-Mobile / R-Mobile"  	select CLKDEV_LOOKUP  	select GENERIC_CLOCKEVENTS +	select HAVE_ARM_SCU if SMP +	select HAVE_ARM_TWD if LOCAL_TIMERS  	select HAVE_CLK  	select HAVE_MACH_CLKDEV  	select HAVE_SMP @@ -909,51 +828,6 @@ config ARCH_U300  	help  	  Support for ST-Ericsson U300 series mobile platforms. -config ARCH_U8500 -	bool "ST-Ericsson U8500 Series" -	depends on MMU -	select ARCH_HAS_CPUFREQ -	select ARCH_REQUIRE_GPIOLIB -	select ARM_AMBA -	select CLKDEV_LOOKUP -	select CPU_V7 -	select GENERIC_CLOCKEVENTS -	select HAVE_SMP -	select MIGHT_HAVE_CACHE_L2X0 -	select SPARSE_IRQ -	help -	  Support for ST-Ericsson's Ux500 architecture - -config ARCH_NOMADIK -	bool "STMicroelectronics Nomadik" -	select ARCH_REQUIRE_GPIOLIB -	select ARM_AMBA -	select ARM_VIC -	select CLKSRC_NOMADIK_MTU -	select COMMON_CLK -	select CPU_ARM926T -	select GENERIC_CLOCKEVENTS -	select MIGHT_HAVE_CACHE_L2X0 -	select USE_OF -	select PINCTRL -	select PINCTRL_STN8815 -	select SPARSE_IRQ -	help -	  Support for the Nomadik platform by ST-Ericsson - -config PLAT_SPEAR -	bool "ST SPEAr" -	select ARCH_HAS_CPUFREQ -	select ARCH_REQUIRE_GPIOLIB -	select ARM_AMBA -	select CLKDEV_LOOKUP -	select CLKSRC_MMIO -	select COMMON_CLK -	select GENERIC_CLOCKEVENTS -	select HAVE_CLK -	help -	  Support for ST's SPEAr platform (SPEAr3xx, SPEAr6xx and SPEAr13xx). -  config ARCH_DAVINCI  	bool "TI DaVinci"  	select ARCH_HAS_HOLES_MEMORYMODEL @@ -1045,6 +919,8 @@ source "arch/arm/mach-at91/Kconfig"  source "arch/arm/mach-bcm/Kconfig" +source "arch/arm/mach-bcm2835/Kconfig" +  source "arch/arm/mach-clps711x/Kconfig"  source "arch/arm/mach-cns3xxx/Kconfig" @@ -1059,8 +935,6 @@ source "arch/arm/mach-footbridge/Kconfig"  source "arch/arm/mach-gemini/Kconfig" -source "arch/arm/mach-h720x/Kconfig" -  source "arch/arm/mach-highbank/Kconfig"  source "arch/arm/mach-integrator/Kconfig" @@ -1112,7 +986,7 @@ source "arch/arm/plat-samsung/Kconfig"  source "arch/arm/mach-socfpga/Kconfig" -source "arch/arm/plat-spear/Kconfig" +source "arch/arm/mach-spear/Kconfig"  source "arch/arm/mach-s3c24xx/Kconfig" @@ -1181,7 +1055,6 @@ config PLAT_VERSATILE  config ARM_TIMER_SP804  	bool  	select CLKSRC_MMIO -	select HAVE_SCHED_CLOCK  source arch/arm/mm/Kconfig @@ -1191,9 +1064,9 @@ config ARM_NR_BANKS  	default 8  config IWMMXT -	bool "Enable iWMMXt support" +	bool "Enable iWMMXt support" if !CPU_PJ4  	depends on CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_PJ4 -	default y if PXA27x || PXA3xx || ARCH_MMP +	default y if PXA27x || PXA3xx || ARCH_MMP || CPU_PJ4  	help  	  Enable support for iWMMXt context switching at run time if  	  running on a CPU that supports it. @@ -1447,6 +1320,16 @@ config ARM_ERRATA_775420  	 to deadlock. This workaround puts DSB before executing ISB if  	 an abort may occur on cache maintenance. +config ARM_ERRATA_798181 +	bool "ARM errata: TLBI/DSB failure on Cortex-A15" +	depends on CPU_V7 && SMP +	help +	  On Cortex-A15 (r0p0..r3p2) the TLBI*IS/DSB operations are not +	  adequately shooting down all use of the old entries. This +	  option enables the Linux kernel workaround for this erratum +	  which sends an IPI to the CPUs that are running the same ASID +	  as the one being invalidated. +  endmenu  source "arch/arm/common/Kconfig" @@ -1530,7 +1413,6 @@ config SMP  	depends on GENERIC_CLOCKEVENTS  	depends on HAVE_SMP  	depends on MMU -	select HAVE_ARM_SCU if !ARCH_MSM_SCORPIONMP  	select USE_GENERIC_SMP_HELPERS  	help  	  This enables support for systems with more than one CPU. If you have @@ -1605,6 +1487,14 @@ config HAVE_ARM_TWD  	help  	  This options enables support for the ARM timer and watchdog unit +config MCPM +	bool "Multi-Cluster Power Management" +	depends on CPU_V7 && SMP +	help +	  This option provides the common power management infrastructure +	  for (multi-)cluster based systems, such as big.LITTLE based +	  systems. +  choice  	prompt "Memory split"  	default VMSPLIT_3G @@ -1655,7 +1545,6 @@ config LOCAL_TIMERS  	bool "Use local timer interrupts"  	depends on SMP  	default y -	select HAVE_ARM_TWD if (!ARCH_MSM_SCORPIONMP && !CLKSRC_EXYNOS_MCT)  	help  	  Enable support for local timers on SMP platforms, rather then the  	  legacy IPI broadcast method.  Local timers allows the system @@ -1669,7 +1558,7 @@ config ARCH_NR_GPIO  	int  	default 1024 if ARCH_SHMOBILE || ARCH_TEGRA  	default 512 if SOC_OMAP5 -	default 355 if ARCH_U8500 +	default 392 if ARCH_U8500  	default 352 if ARCH_VT8500  	default 288 if ARCH_SUNXI  	default 264 if MACH_H4700 @@ -1693,8 +1582,9 @@ config SCHED_HRTICK  	def_bool HIGH_RES_TIMERS  config THUMB2_KERNEL -	bool "Compile the kernel in Thumb-2 mode" +	bool "Compile the kernel in Thumb-2 mode" if !CPU_THUMBONLY  	depends on CPU_V7 && !CPU_V6 && !CPU_V6K +	default y if CPU_THUMBONLY  	select AEABI  	select ARM_ASM_UNIFIED  	select ARM_UNWIND @@ -2160,40 +2050,8 @@ endmenu  menu "CPU Power Management"  if ARCH_HAS_CPUFREQ -  source "drivers/cpufreq/Kconfig" -config CPU_FREQ_IMX -	tristate "CPUfreq driver for i.MX CPUs" -	depends on ARCH_MXC && CPU_FREQ -	select CPU_FREQ_TABLE -	help -	  This enables the CPUfreq driver for i.MX CPUs. - -config CPU_FREQ_SA1100 -	bool - -config CPU_FREQ_SA1110 -	bool - -config CPU_FREQ_INTEGRATOR -	tristate "CPUfreq driver for ARM Integrator CPUs" -	depends on ARCH_INTEGRATOR && CPU_FREQ -	default y -	help -	  This enables the CPUfreq driver for ARM Integrator CPUs. - -	  For details, take a look at <file:Documentation/cpu-freq>. - -	  If in doubt, say Y. - -config CPU_FREQ_PXA -	bool -	depends on CPU_FREQ && ARCH_PXA && PXA25x -	default y -	select CPU_FREQ_DEFAULT_GOV_USERSPACE -	select CPU_FREQ_TABLE -  config CPU_FREQ_S3C  	bool  	help diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index 59ce26afdcc..5c8e59f6a6f 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug @@ -89,6 +89,10 @@ choice  		bool "Kernel low-level debugging on 9263 and 9g45"  		depends on HAVE_AT91_DBGU1 +	config DEBUG_BCM2835 +		bool "Kernel low-level debugging on BCM2835 PL011 UART" +		depends on ARCH_BCM2835 +  	config DEBUG_CLPS711X_UART1  		bool "Kernel low-level debugging messages via UART1"  		depends on ARCH_CLPS711X @@ -103,6 +107,13 @@ choice  		  Say Y here if you want the debug print routines to direct  		  their output to the second serial port on these devices. +	config DEBUG_CNS3XXX +		bool "Kernel Kernel low-level debugging on Cavium Networks CNS3xxx" +		depends on ARCH_CNS3XXX +		help +		  Say Y here if you want the debug print routines to direct +                  their output to the CNS3xxx UART0. +  	config DEBUG_DAVINCI_DA8XX_UART1  		bool "Kernel low-level debugging on DaVinci DA8XX using UART1"  		depends on ARCH_DAVINCI_DA8XX @@ -298,6 +309,13 @@ choice  		  Say Y here if you want kernel low-level debugging support  		  on MVEBU based platforms. +	config DEBUG_NOMADIK_UART +		bool "Kernel low-level debugging messages via NOMADIK UART" +		depends on ARCH_NOMADIK +		help +		  Say Y here if you want kernel low-level debugging support +		  on NOMADIK based platforms. +  	config DEBUG_OMAP2PLUS_UART  		bool "Kernel low-level debugging messages via OMAP2PLUS UART"  		depends on ARCH_OMAP2PLUS @@ -418,6 +436,13 @@ choice  		  Say Y here if you want the debug print routines to direct  		  their output to the uart1 port on SiRFmarco devices. +	config DEBUG_UX500_UART +		depends on ARCH_U8500 +		bool "Use Ux500 UART for low-level debug" +		help +		  Say Y here if you want kernel low-level debugging support +		  on Ux500 based platforms. +  	config DEBUG_VEXPRESS_UART0_DETECT  		bool "Autodetect UART0 on Versatile Express Cortex-A core tiles"  		depends on ARCH_VEXPRESS && CPU_CP15_MMU @@ -587,6 +612,8 @@ endchoice  config DEBUG_LL_INCLUDE  	string +	default "debug/bcm2835.S" if DEBUG_BCM2835 +	default "debug/cns3xxx.S" if DEBUG_CNS3XXX  	default "debug/exynos.S" if DEBUG_EXYNOS_UART  	default "debug/icedcc.S" if DEBUG_ICEDCC  	default "debug/imx.S" if DEBUG_IMX1_UART || \ @@ -599,17 +626,32 @@ config DEBUG_LL_INCLUDE  				 DEBUG_IMX6Q_UART  	default "debug/highbank.S" if DEBUG_HIGHBANK_UART  	default "debug/mvebu.S" if DEBUG_MVEBU_UART +	default "debug/mxs.S" if DEBUG_IMX23_UART || DEBUG_IMX28_UART +	default "debug/nomadik.S" if DEBUG_NOMADIK_UART  	default "debug/omap2plus.S" if DEBUG_OMAP2PLUS_UART  	default "debug/picoxcell.S" if DEBUG_PICOXCELL_UART +	default "debug/sirf.S" if DEBUG_SIRFPRIMA2_UART1 || DEBUG_SIRFMARCO_UART1  	default "debug/socfpga.S" if DEBUG_SOCFPGA_UART  	default "debug/sunxi.S" if DEBUG_SUNXI_UART0 || DEBUG_SUNXI_UART1  	default "debug/vexpress.S" if DEBUG_VEXPRESS_UART0_DETECT || \  		DEBUG_VEXPRESS_UART0_CA9 || DEBUG_VEXPRESS_UART0_RS1  	default "debug/vt8500.S" if DEBUG_VT8500_UART0  	default "debug/tegra.S" if DEBUG_TEGRA_UART +	default "debug/ux500.S" if DEBUG_UX500_UART  	default "debug/zynq.S" if DEBUG_ZYNQ_UART0 || DEBUG_ZYNQ_UART1  	default "mach/debug-macro.S" +config DEBUG_UNCOMPRESS +	bool +	default y if ARCH_MULTIPLATFORM && DEBUG_LL && \ +		     !DEBUG_OMAP2PLUS_UART && \ +		     !DEBUG_TEGRA_UART + +config UNCOMPRESS_INCLUDE +	string +	default "debug/uncompress.h" if ARCH_MULTIPLATFORM +	default "mach/uncompress.h" +  config EARLY_PRINTK  	bool "Early printk"  	depends on DEBUG_LL diff --git a/arch/arm/Makefile b/arch/arm/Makefile index ee4605f400b..47374085bef 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -147,7 +147,6 @@ machine-$(CONFIG_ARCH_DOVE)		+= dove  machine-$(CONFIG_ARCH_EBSA110)		+= ebsa110  machine-$(CONFIG_ARCH_EP93XX)		+= ep93xx  machine-$(CONFIG_ARCH_GEMINI)		+= gemini -machine-$(CONFIG_ARCH_H720X)		+= h720x  machine-$(CONFIG_ARCH_HIGHBANK)		+= highbank  machine-$(CONFIG_ARCH_INTEGRATOR)	+= integrator  machine-$(CONFIG_ARCH_IOP13XX)		+= iop13xx @@ -191,9 +190,7 @@ machine-$(CONFIG_ARCH_VT8500)		+= vt8500  machine-$(CONFIG_ARCH_W90X900)		+= w90x900  machine-$(CONFIG_FOOTBRIDGE)		+= footbridge  machine-$(CONFIG_ARCH_SOCFPGA)		+= socfpga -machine-$(CONFIG_ARCH_SPEAR13XX)	+= spear13xx -machine-$(CONFIG_ARCH_SPEAR3XX)		+= spear3xx -machine-$(CONFIG_MACH_SPEAR600)		+= spear6xx +machine-$(CONFIG_PLAT_SPEAR)		+= spear  machine-$(CONFIG_ARCH_VIRT)		+= virt  machine-$(CONFIG_ARCH_ZYNQ)		+= zynq  machine-$(CONFIG_ARCH_SUNXI)		+= sunxi @@ -207,7 +204,6 @@ plat-$(CONFIG_PLAT_ORION)	+= orion  plat-$(CONFIG_PLAT_PXA)		+= pxa  plat-$(CONFIG_PLAT_S3C24XX)	+= samsung  plat-$(CONFIG_PLAT_S5P)		+= samsung -plat-$(CONFIG_PLAT_SPEAR)	+= spear  plat-$(CONFIG_PLAT_VERSATILE)	+= versatile  ifeq ($(CONFIG_ARCH_EBSA110),y) diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile index afed28e37ea..3580d57ea21 100644 --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile @@ -24,6 +24,9 @@ endif  AFLAGS_head.o += -DTEXT_OFFSET=$(TEXT_OFFSET)  HEAD	= head.o  OBJS	+= misc.o decompress.o +ifeq ($(CONFIG_DEBUG_UNCOMPRESS),y) +OBJS	+= debug.o +endif  FONTC	= $(srctree)/drivers/video/console/font_acorn_8x8.c  # string library code (-Os is enforced to keep it much smaller) diff --git a/arch/arm/boot/compressed/debug.S b/arch/arm/boot/compressed/debug.S new file mode 100644 index 00000000000..6e8382d5b7a --- /dev/null +++ b/arch/arm/boot/compressed/debug.S @@ -0,0 +1,12 @@ +#include <linux/linkage.h> +#include <asm/assembler.h> + +#include CONFIG_DEBUG_LL_INCLUDE + +ENTRY(putc) +	addruart r1, r2, r3 +	waituart r3, r1 +	senduart r0, r1 +	busyuart r3, r1 +	mov	 pc, lr +ENDPROC(putc) diff --git a/arch/arm/boot/compressed/misc.c b/arch/arm/boot/compressed/misc.c index df899834d84..31bd43b8209 100644 --- a/arch/arm/boot/compressed/misc.c +++ b/arch/arm/boot/compressed/misc.c @@ -25,13 +25,7 @@ unsigned int __machine_arch_type;  static void putstr(const char *ptr);  extern void error(char *x); -#ifdef CONFIG_ARCH_MULTIPLATFORM -static inline void putc(int c) {} -static inline void flush(void) {} -static inline void arch_decomp_setup(void) {} -#else -#include <mach/uncompress.h> -#endif +#include CONFIG_UNCOMPRESS_INCLUDE  #ifdef CONFIG_DEBUG_ICEDCC diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index d3cd880d70b..55196639211 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -3,6 +3,7 @@ ifeq ($(CONFIG_OF),y)  # Keep at91 dtb files sorted alphabetically for each SoC  # rm9200  dtb-$(CONFIG_ARCH_AT91) += at91rm9200ek.dtb +dtb-$(CONFIG_ARCH_AT91) += mpa1600.dtb  # sam9260  dtb-$(CONFIG_ARCH_AT91) += animeo_ip.dtb  dtb-$(CONFIG_ARCH_AT91) += aks-cdu.dtb @@ -26,11 +27,17 @@ dtb-$(CONFIG_ARCH_AT91) += pm9g45.dtb  # sam9n12  dtb-$(CONFIG_ARCH_AT91) += at91sam9n12ek.dtb  # sam9x5 +dtb-$(CONFIG_ARCH_AT91) += at91-ariag25.dtb  dtb-$(CONFIG_ARCH_AT91) += at91sam9g15ek.dtb  dtb-$(CONFIG_ARCH_AT91) += at91sam9g25ek.dtb  dtb-$(CONFIG_ARCH_AT91) += at91sam9g35ek.dtb  dtb-$(CONFIG_ARCH_AT91) += at91sam9x25ek.dtb  dtb-$(CONFIG_ARCH_AT91) += at91sam9x35ek.dtb +# sama5d3 +dtb-$(CONFIG_ARCH_AT91)	+= sama5d31ek.dtb +dtb-$(CONFIG_ARCH_AT91)	+= sama5d33ek.dtb +dtb-$(CONFIG_ARCH_AT91)	+= sama5d34ek.dtb +dtb-$(CONFIG_ARCH_AT91)	+= sama5d35ek.dtb  dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb  dtb-$(CONFIG_ARCH_BCM) += bcm11351-brt.dtb @@ -90,19 +97,26 @@ dtb-$(CONFIG_ARCH_MXC) += \  	imx25-karo-tx25.dtb \  	imx25-pdk.dtb \  	imx27-apf27.dtb \ +	imx27-apf27dev.dtb \  	imx27-pdk.dtb \ +	imx27-phytec-phycore.dtb \  	imx31-bug.dtb \  	imx51-apf51.dtb \ +	imx51-apf51dev.dtb \  	imx51-babbage.dtb \  	imx53-ard.dtb \  	imx53-evk.dtb \  	imx53-mba53.dtb \  	imx53-qsb.dtb \  	imx53-smd.dtb \ +	imx6dl-sabreauto.dtb \ +	imx6dl-sabresd.dtb \ +	imx6dl-wandboard.dtb \  	imx6q-arm2.dtb \  	imx6q-sabreauto.dtb \  	imx6q-sabrelite.dtb \ -	imx6q-sabresd.dtb +	imx6q-sabresd.dtb \ +	imx6q-sbc6x.dtb  dtb-$(CONFIG_ARCH_MXS) += imx23-evk.dtb \  	imx23-olinuxino.dtb \  	imx23-stmp378x_devb.dtb \ diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi index 0957645b73a..91fe4f148f8 100644 --- a/arch/arm/boot/dts/am33xx.dtsi +++ b/arch/arm/boot/dts/am33xx.dtsi @@ -349,7 +349,7 @@  			rx_descs = <64>;  			mac_control = <0x20>;  			slaves = <2>; -			cpts_active_slave = <0>; +			active_slave = <0>;  			cpts_clock_mult = <0x80000000>;  			cpts_clock_shift = <29>;  			reg = <0x4a100000 0x800 diff --git a/arch/arm/boot/dts/armada-370-db.dts b/arch/arm/boot/dts/armada-370-db.dts index e34b280ce6e..6403acdbb75 100644 --- a/arch/arm/boot/dts/armada-370-db.dts +++ b/arch/arm/boot/dts/armada-370-db.dts @@ -94,5 +94,22 @@  				spi-max-frequency = <50000000>;  			};  		}; + +		pcie-controller { +			status = "okay"; +			/* +			 * The two PCIe units are accessible through +			 * both standard PCIe slots and mini-PCIe +			 * slots on the board. +			 */ +			pcie@1,0 { +				/* Port 0, Lane 0 */ +				status = "okay"; +			}; +			pcie@2,0 { +				/* Port 1, Lane 0 */ +				status = "okay"; +			}; +		};  	};  }; diff --git a/arch/arm/boot/dts/armada-370-mirabox.dts b/arch/arm/boot/dts/armada-370-mirabox.dts index dd0c57dd9f3..58ee7937220 100644 --- a/arch/arm/boot/dts/armada-370-mirabox.dts +++ b/arch/arm/boot/dts/armada-370-mirabox.dts @@ -33,6 +33,43 @@  			clock-frequency = <600000000>;  			status = "okay";  		}; + +		pinctrl { +			pwr_led_pin: pwr-led-pin { +				marvell,pins = "mpp63"; +				marvell,function = "gpo"; +			}; + +			stat_led_pins: stat-led-pins { +				marvell,pins = "mpp64", "mpp65"; +				marvell,function = "gpio"; +			}; +		}; + +		gpio_leds { +			compatible = "gpio-leds"; +			pinctrl-names = "default"; +			pinctrl-0 = <&pwr_led_pin &stat_led_pins>; + +			green_pwr_led { +				label = "mirabox:green:pwr"; +				gpios = <&gpio1 31 1>; +				linux,default-trigger = "heartbeat"; +			}; + +			blue_stat_led { +				label = "mirabox:blue:stat"; +				gpios = <&gpio2 0 1>; +				linux,default-trigger = "cpu0"; +			}; + +			green_stat_led { +				label = "mirabox:green:stat"; +				gpios = <&gpio2 1 1>; +				default-state = "off"; +			}; +		}; +  		mdio {  			phy0: ethernet-phy@0 {  				reg = <0>; @@ -54,7 +91,7 @@  		};  		mvsdio@d00d4000 { -			pinctrl-0 = <&sdio_pins2>; +			pinctrl-0 = <&sdio_pins3>;  			pinctrl-names = "default";  			status = "okay";  			/* @@ -70,5 +107,32 @@  		usb@d0051000 {  			status = "okay";  		}; + +		i2c@d0011000 { +			status = "okay"; +			clock-frequency = <100000>; +			pca9505: pca9505@25 { +				compatible = "nxp,pca9505"; +				gpio-controller; +				#gpio-cells = <2>; +				reg = <0x25>; +			}; +		}; + +		pcie-controller { +			status = "okay"; + +			/* Internal mini-PCIe connector */ +			pcie@1,0 { +				/* Port 0, Lane 0 */ +				status = "okay"; +			}; + +			/* Connected on the PCB to a USB 3.0 XHCI controller */ +			pcie@2,0 { +				/* Port 1, Lane 0 */ +				status = "okay"; +			}; +		};  	};  }; diff --git a/arch/arm/boot/dts/armada-370-rd.dts b/arch/arm/boot/dts/armada-370-rd.dts index 070bba4f258..516dec31b46 100644 --- a/arch/arm/boot/dts/armada-370-rd.dts +++ b/arch/arm/boot/dts/armada-370-rd.dts @@ -73,4 +73,15 @@  			status = "okay";  		};  	}; + +	gpio-keys { +		compatible = "gpio-keys"; +		#address-cells = <1>; +		#size-cells = <0>; +		button@1 { +			label = "Software Button"; +			linux,code = <116>; +			gpios = <&gpio0 6 1>; +		}; +	};  }; diff --git a/arch/arm/boot/dts/armada-370-xp.dtsi b/arch/arm/boot/dts/armada-370-xp.dtsi index 5b708208b60..758c4ea9034 100644 --- a/arch/arm/boot/dts/armada-370-xp.dtsi +++ b/arch/arm/boot/dts/armada-370-xp.dtsi @@ -181,6 +181,51 @@  			clocks = <&coreclk 0>;  			status = "disabled";  		}; + +		devbus-bootcs@d0010400 { +			compatible = "marvell,mvebu-devbus"; +			reg = <0xd0010400 0x8>; +			#address-cells = <1>; +			#size-cells = <1>; +			clocks = <&coreclk 0>; +			status = "disabled"; +		}; + +		devbus-cs0@d0010408 { +			compatible = "marvell,mvebu-devbus"; +			reg = <0xd0010408 0x8>; +			#address-cells = <1>; +			#size-cells = <1>; +			clocks = <&coreclk 0>; +			status = "disabled"; +		}; + +		devbus-cs1@d0010410 { +			compatible = "marvell,mvebu-devbus"; +			reg = <0xd0010410 0x8>; +			#address-cells = <1>; +			#size-cells = <1>; +			clocks = <&coreclk 0>; +			status = "disabled"; +		}; + +		devbus-cs2@d0010418 { +			compatible = "marvell,mvebu-devbus"; +			reg = <0xd0010418 0x8>; +			#address-cells = <1>; +			#size-cells = <1>; +			clocks = <&coreclk 0>; +			status = "disabled"; +		}; + +		devbus-cs3@d0010420 { +			compatible = "marvell,mvebu-devbus"; +			reg = <0xd0010420 0x8>; +			#address-cells = <1>; +			#size-cells = <1>; +			clocks = <&coreclk 0>; +			status = "disabled"; +		};  	};  }; diff --git a/arch/arm/boot/dts/armada-370.dtsi b/arch/arm/boot/dts/armada-370.dtsi index 8188d138020..18f6eb47cc5 100644 --- a/arch/arm/boot/dts/armada-370.dtsi +++ b/arch/arm/boot/dts/armada-370.dtsi @@ -59,6 +59,12 @@  					     "mpp50", "mpp51", "mpp52";  			      marvell,function = "sd0";  			}; + +			sdio_pins3: sdio-pins3 { +			      marvell,pins = "mpp48", "mpp49", "mpp50", +					     "mpp51", "mpp52", "mpp53"; +			      marvell,function = "sd0"; +			};  	        };  		gpio0: gpio@d0018100 { @@ -153,5 +159,63 @@  			clocks = <&coreclk 0>;  		}; +		thermal@d0018300 { +			compatible = "marvell,armada370-thermal"; +			reg = <0xd0018300 0x4 +			       0xd0018304 0x4>; +			status = "okay"; +		}; + +		pcie-controller { +			compatible = "marvell,armada-370-pcie"; +			status = "disabled"; +			device_type = "pci"; + +			#address-cells = <3>; +			#size-cells = <2>; + +			bus-range = <0x00 0xff>; + +			reg = <0xd0040000 0x2000>, <0xd0080000 0x2000>; + +			reg-names = "pcie0.0", "pcie1.0"; + +			ranges = <0x82000000 0 0xd0040000 0xd0040000 0 0x00002000   /* Port 0.0 registers */ +				  0x82000000 0 0xd0080000 0xd0080000 0 0x00002000   /* Port 1.0 registers */ +				  0x82000000 0 0xe0000000 0xe0000000 0 0x08000000   /* non-prefetchable memory */ +			          0x81000000 0 0          0xe8000000 0 0x00100000>; /* downstream I/O */ + +			pcie@1,0 { +				device_type = "pci"; +				assigned-addresses = <0x82000800 0 0xd0040000 0 0x2000>; +				reg = <0x0800 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 58>; +				marvell,pcie-port = <0>; +				marvell,pcie-lane = <0>; +				clocks = <&gateclk 5>; +				status = "disabled"; +			}; + +			pcie@2,0 { +				device_type = "pci"; +				assigned-addresses = <0x82002800 0 0xd0080000 0 0x2000>; +				reg = <0x1000 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 62>; +				marvell,pcie-port = <1>; +				marvell,pcie-lane = <0>; +				clocks = <&gateclk 9>; +				status = "disabled"; +			}; +		};  	};  }; diff --git a/arch/arm/boot/dts/armada-xp-db.dts b/arch/arm/boot/dts/armada-xp-db.dts index e83505e4c23..54cc5bb705f 100644 --- a/arch/arm/boot/dts/armada-xp-db.dts +++ b/arch/arm/boot/dts/armada-xp-db.dts @@ -121,5 +121,38 @@  				spi-max-frequency = <20000000>;  			};  		}; + +		pcie-controller { +			status = "okay"; + +			/* +			 * All 6 slots are physically present as +			 * standard PCIe slots on the board. +			 */ +			pcie@1,0 { +				/* Port 0, Lane 0 */ +				status = "okay"; +			}; +			pcie@2,0 { +				/* Port 0, Lane 1 */ +				status = "okay"; +			}; +			pcie@3,0 { +				/* Port 0, Lane 2 */ +				status = "okay"; +			}; +			pcie@4,0 { +				/* Port 0, Lane 3 */ +				status = "okay"; +			}; +			pcie@9,0 { +				/* Port 2, Lane 0 */ +				status = "okay"; +			}; +			pcie@10,0 { +				/* Port 3, Lane 0 */ +				status = "okay"; +			}; +		};  	};  }; diff --git a/arch/arm/boot/dts/armada-xp-gp.dts b/arch/arm/boot/dts/armada-xp-gp.dts index 1c8afe2ffeb..04f28a712b9 100644 --- a/arch/arm/boot/dts/armada-xp-gp.dts +++ b/arch/arm/boot/dts/armada-xp-gp.dts @@ -109,5 +109,55 @@  				spi-max-frequency = <108000000>;  			};  		}; + +		devbus-bootcs@d0010400 { +			status = "okay"; +			ranges = <0 0xf0000000 0x1000000>; /* @addr 0xf000000, size 0x1000000 */ + +			/* Device Bus parameters are required */ + +			/* Read parameters */ +			devbus,bus-width    = <8>; +			devbus,turn-off-ps  = <60000>; +			devbus,badr-skew-ps = <0>; +			devbus,acc-first-ps = <124000>; +			devbus,acc-next-ps  = <248000>; +			devbus,rd-setup-ps  = <0>; +			devbus,rd-hold-ps   = <0>; + +			/* Write parameters */ +			devbus,sync-enable = <0>; +			devbus,wr-high-ps  = <60000>; +			devbus,wr-low-ps   = <60000>; +			devbus,ale-wr-ps   = <60000>; + +			/* NOR 16 MiB */ +			nor@0 { +				compatible = "cfi-flash"; +				reg = <0 0x1000000>; +				bank-width = <2>; +			}; +		}; + +		pcie-controller { +			status = "okay"; + +			/* +			 * The 3 slots are physically present as +			 * standard PCIe slots on the board. +			 */ +			pcie@1,0 { +				/* Port 0, Lane 0 */ +				status = "okay"; +			}; +			pcie@9,0 { +				/* Port 2, Lane 0 */ +				status = "okay"; +			}; +			pcie@10,0 { +				/* Port 3, Lane 0 */ +				status = "okay"; +			}; +		};  	};  }; diff --git a/arch/arm/boot/dts/armada-xp-mv78230.dtsi b/arch/arm/boot/dts/armada-xp-mv78230.dtsi index f56c40599f5..c2c78459a4d 100644 --- a/arch/arm/boot/dts/armada-xp-mv78230.dtsi +++ b/arch/arm/boot/dts/armada-xp-mv78230.dtsi @@ -76,5 +76,109 @@  			#interrupts-cells = <2>;  			interrupts = <87>, <88>, <89>;  		}; + +		/* +		 * MV78230 has 2 PCIe units Gen2.0: One unit can be +		 * configured as x4 or quad x1 lanes. One unit is +		 * x4/x1. +		 */ +		pcie-controller { +			compatible = "marvell,armada-xp-pcie"; +			status = "disabled"; +			device_type = "pci"; + +			#address-cells = <3>; +			#size-cells = <2>; + +			bus-range = <0x00 0xff>; + +			ranges = <0x82000000 0 0xd0040000 0xd0040000 0 0x00002000   /* Port 0.0 registers */ +				  0x82000000 0 0xd0042000 0xd0042000 0 0x00002000   /* Port 2.0 registers */ +				  0x82000000 0 0xd0044000 0xd0044000 0 0x00002000   /* Port 0.1 registers */ +				  0x82000000 0 0xd0048000 0xd0048000 0 0x00002000   /* Port 0.2 registers */ +				  0x82000000 0 0xd004c000 0xd004c000 0 0x00002000   /* Port 0.3 registers */ +				  0x82000000 0 0xe0000000 0xe0000000 0 0x08000000   /* non-prefetchable memory */ +				  0x81000000 0 0	  0xe8000000 0 0x00100000>; /* downstream I/O */ + +			pcie@1,0 { +				device_type = "pci"; +				assigned-addresses = <0x82000800 0 0xd0040000 0 0x2000>; +				reg = <0x0800 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 58>; +				marvell,pcie-port = <0>; +				marvell,pcie-lane = <0>; +				clocks = <&gateclk 5>; +				status = "disabled"; +			}; + +			pcie@2,0 { +				device_type = "pci"; +				assigned-addresses = <0x82000800 0 0xd0044000 0 0x2000>; +				reg = <0x1000 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 59>; +				marvell,pcie-port = <0>; +				marvell,pcie-lane = <1>; +				clocks = <&gateclk 6>; +				status = "disabled"; +			}; + +			pcie@3,0 { +				device_type = "pci"; +				assigned-addresses = <0x82000800 0 0xd0048000 0 0x2000>; +				reg = <0x1800 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 60>; +				marvell,pcie-port = <0>; +				marvell,pcie-lane = <2>; +				clocks = <&gateclk 7>; +				status = "disabled"; +			}; + +			pcie@4,0 { +				device_type = "pci"; +				assigned-addresses = <0x82000800 0 0xd004c000 0 0x2000>; +				reg = <0x2000 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 61>; +				marvell,pcie-port = <0>; +				marvell,pcie-lane = <3>; +				clocks = <&gateclk 8>; +				status = "disabled"; +			}; + +			pcie@9,0 { +				device_type = "pci"; +				assigned-addresses = <0x82000800 0 0xd0042000 0 0x2000>; +				reg = <0x4800 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 99>; +				marvell,pcie-port = <2>; +				marvell,pcie-lane = <0>; +				clocks = <&gateclk 26>; +				status = "disabled"; +			}; +		};  	};  }; diff --git a/arch/arm/boot/dts/armada-xp-mv78260.dtsi b/arch/arm/boot/dts/armada-xp-mv78260.dtsi index f8f2b787d2b..885bf229eef 100644 --- a/arch/arm/boot/dts/armada-xp-mv78260.dtsi +++ b/arch/arm/boot/dts/armada-xp-mv78260.dtsi @@ -96,5 +96,127 @@  				clocks = <&gateclk 1>;  				status = "disabled";  		}; + +		/* +		 * MV78260 has 3 PCIe units Gen2.0: Two units can be +		 * configured as x4 or quad x1 lanes. One unit is +		 * x4/x1. +		 */ +		pcie-controller { +			compatible = "marvell,armada-xp-pcie"; +			status = "disabled"; +			device_type = "pci"; + +			#address-cells = <3>; +			#size-cells = <2>; + +			bus-range = <0x00 0xff>; + +			ranges = <0x82000000 0 0xd0040000 0xd0040000 0 0x00002000   /* Port 0.0 registers */ +				  0x82000000 0 0xd0042000 0xd0042000 0 0x00002000   /* Port 2.0 registers */ +				  0x82000000 0 0xd0044000 0xd0044000 0 0x00002000   /* Port 0.1 registers */ +				  0x82000000 0 0xd0048000 0xd0048000 0 0x00002000   /* Port 0.2 registers */ +				  0x82000000 0 0xd004c000 0xd004c000 0 0x00002000   /* Port 0.3 registers */ +				  0x82000000 0 0xd0080000 0xd0080000 0 0x00002000   /* Port 1.0 registers */ +				  0x82000000 0 0xd0082000 0xd0082000 0 0x00002000   /* Port 3.0 registers */ +				  0x82000000 0 0xe0000000 0xe0000000 0 0x08000000   /* non-prefetchable memory */ +				  0x81000000 0 0	  0xe8000000 0 0x00100000>; /* downstream I/O */ + +			pcie@1,0 { +				device_type = "pci"; +				assigned-addresses = <0x82000800 0 0xd0040000 0 0x2000>; +				reg = <0x0800 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 58>; +				marvell,pcie-port = <0>; +				marvell,pcie-lane = <0>; +				clocks = <&gateclk 5>; +				status = "disabled"; +			}; + +			pcie@2,0 { +				device_type = "pci"; +				assigned-addresses = <0x82000800 0 0xd0044000 0 0x2000>; +				reg = <0x1000 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 59>; +				marvell,pcie-port = <0>; +				marvell,pcie-lane = <1>; +				clocks = <&gateclk 6>; +				status = "disabled"; +			}; + +			pcie@3,0 { +				device_type = "pci"; +				assigned-addresses = <0x82000800 0 0xd0048000 0 0x2000>; +				reg = <0x1800 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 60>; +				marvell,pcie-port = <0>; +				marvell,pcie-lane = <2>; +				clocks = <&gateclk 7>; +				status = "disabled"; +			}; + +			pcie@4,0 { +				device_type = "pci"; +				assigned-addresses = <0x82000800 0 0xd004c000 0 0x2000>; +				reg = <0x2000 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 61>; +				marvell,pcie-port = <0>; +				marvell,pcie-lane = <3>; +				clocks = <&gateclk 8>; +				status = "disabled"; +			}; + +			pcie@9,0 { +				device_type = "pci"; +				assigned-addresses = <0x82000800 0 0xd0042000 0 0x2000>; +				reg = <0x4800 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 99>; +				marvell,pcie-port = <2>; +				marvell,pcie-lane = <0>; +				clocks = <&gateclk 26>; +				status = "disabled"; +			}; + +			pcie@10,0 { +				device_type = "pci"; +				assigned-addresses = <0x82000800 0 0xd0082000 0 0x2000>; +				reg = <0x5000 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 103>; +				marvell,pcie-port = <3>; +				marvell,pcie-lane = <0>; +				clocks = <&gateclk 27>; +				status = "disabled"; +			}; +		};  	};  }; diff --git a/arch/arm/boot/dts/armada-xp-mv78460.dtsi b/arch/arm/boot/dts/armada-xp-mv78460.dtsi index 936c25dc32b..23a5ac4490a 100644 --- a/arch/arm/boot/dts/armada-xp-mv78460.dtsi +++ b/arch/arm/boot/dts/armada-xp-mv78460.dtsi @@ -111,5 +111,193 @@  				clocks = <&gateclk 1>;  				status = "disabled";  		}; + +		/* +		 * MV78460 has 4 PCIe units Gen2.0: Two units can be +		 * configured as x4 or quad x1 lanes. Two units are +		 * x4/x1. +		 */ +		pcie-controller { +			compatible = "marvell,armada-xp-pcie"; +			status = "disabled"; +			device_type = "pci"; + +			#address-cells = <3>; +			#size-cells = <2>; + +			bus-range = <0x00 0xff>; + +			ranges = <0x82000000 0 0xd0040000 0xd0040000 0 0x00002000   /* Port 0.0 registers */ +				  0x82000000 0 0xd0042000 0xd0042000 0 0x00002000   /* Port 2.0 registers */ +				  0x82000000 0 0xd0044000 0xd0044000 0 0x00002000   /* Port 0.1 registers */ +				  0x82000000 0 0xd0048000 0xd0048000 0 0x00002000   /* Port 0.2 registers */ +				  0x82000000 0 0xd004c000 0xd004c000 0 0x00002000   /* Port 0.3 registers */ +				  0x82000000 0 0xd0080000 0xd0080000 0 0x00002000   /* Port 1.0 registers */ +				  0x82000000 0 0xd0082000 0xd0082000 0 0x00002000   /* Port 3.0 registers */ +				  0x82000000 0 0xd0084000 0xd0084000 0 0x00002000   /* Port 1.1 registers */ +				  0x82000000 0 0xd0088000 0xd0088000 0 0x00002000   /* Port 1.2 registers */ +				  0x82000000 0 0xd008c000 0xd008c000 0 0x00002000   /* Port 1.3 registers */ +				  0x82000000 0 0xe0000000 0xe0000000 0 0x08000000   /* non-prefetchable memory */ +				  0x81000000 0 0	  0xe8000000 0 0x00100000>; /* downstream I/O */ + +			pcie@1,0 { +				device_type = "pci"; +				assigned-addresses = <0x82000800 0 0xd0040000 0 0x2000>; +				reg = <0x0800 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 58>; +				marvell,pcie-port = <0>; +				marvell,pcie-lane = <0>; +				clocks = <&gateclk 5>; +				status = "disabled"; +			}; + +			pcie@2,0 { +				device_type = "pci"; +				assigned-addresses = <0x82001000 0 0xd0044000 0 0x2000>; +				reg = <0x1000 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 59>; +				marvell,pcie-port = <0>; +				marvell,pcie-lane = <1>; +				clocks = <&gateclk 6>; +				status = "disabled"; +			}; + +			pcie@3,0 { +				device_type = "pci"; +				assigned-addresses = <0x82001800 0 0xd0048000 0 0x2000>; +				reg = <0x1800 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 60>; +				marvell,pcie-port = <0>; +				marvell,pcie-lane = <2>; +				clocks = <&gateclk 7>; +				status = "disabled"; +			}; + +			pcie@4,0 { +				device_type = "pci"; +				assigned-addresses = <0x82002000 0 0xd004c000 0 0x2000>; +				reg = <0x2000 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 61>; +				marvell,pcie-port = <0>; +				marvell,pcie-lane = <3>; +				clocks = <&gateclk 8>; +				status = "disabled"; +			}; + +			pcie@5,0 { +				device_type = "pci"; +				assigned-addresses = <0x82002800 0 0xd0080000 0 0x2000>; +				reg = <0x2800 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 62>; +				marvell,pcie-port = <1>; +				marvell,pcie-lane = <0>; +				clocks = <&gateclk 9>; +				status = "disabled"; +			}; + +			pcie@6,0 { +				device_type = "pci"; +				assigned-addresses = <0x82003000 0 0xd0084000 0 0x2000>; +				reg = <0x3000 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 63>; +				marvell,pcie-port = <1>; +				marvell,pcie-lane = <1>; +				clocks = <&gateclk 10>; +				status = "disabled"; +			}; + +			pcie@7,0 { +				device_type = "pci"; +				assigned-addresses = <0x82003800 0 0xd0088000 0 0x2000>; +				reg = <0x3800 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 64>; +				marvell,pcie-port = <1>; +				marvell,pcie-lane = <2>; +				clocks = <&gateclk 11>; +				status = "disabled"; +			}; + +			pcie@8,0 { +				device_type = "pci"; +				assigned-addresses = <0x82004000 0 0xd008c000 0 0x2000>; +				reg = <0x4000 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 65>; +				marvell,pcie-port = <1>; +				marvell,pcie-lane = <3>; +				clocks = <&gateclk 12>; +				status = "disabled"; +			}; +			pcie@9,0 { +				device_type = "pci"; +				assigned-addresses = <0x82004800 0 0xd0042000 0 0x2000>; +				reg = <0x4800 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 99>; +				marvell,pcie-port = <2>; +				marvell,pcie-lane = <0>; +				clocks = <&gateclk 26>; +				status = "disabled"; +			}; + +			pcie@10,0 { +				device_type = "pci"; +				assigned-addresses = <0x82005000 0 0xd0082000 0 0x2000>; +				reg = <0x5000 0 0 0 0>; +				#address-cells = <3>; +				#size-cells = <2>; +				#interrupt-cells = <1>; +				ranges; +				interrupt-map-mask = <0 0 0 0>; +				interrupt-map = <0 0 0 0 &mpic 103>; +				marvell,pcie-port = <3>; +				marvell,pcie-lane = <0>; +				clocks = <&gateclk 27>; +				status = "disabled"; +			}; +		};  	};   }; diff --git a/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts b/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts index 3818a82176a..9d04f04d4e3 100644 --- a/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts +++ b/arch/arm/boot/dts/armada-xp-openblocks-ax3-4.dts @@ -139,5 +139,43 @@  		usb@d0051000 {  			status = "okay";  		}; + +		devbus-bootcs@d0010400 { +			status = "okay"; +			ranges = <0 0xf0000000 0x8000000>; /* @addr 0xf000000, size 0x8000000 */ + +			/* Device Bus parameters are required */ + +			/* Read parameters */ +			devbus,bus-width    = <8>; +			devbus,turn-off-ps  = <60000>; +			devbus,badr-skew-ps = <0>; +			devbus,acc-first-ps = <124000>; +			devbus,acc-next-ps  = <248000>; +			devbus,rd-setup-ps  = <0>; +			devbus,rd-hold-ps   = <0>; + +			/* Write parameters */ +			devbus,sync-enable = <0>; +			devbus,wr-high-ps  = <60000>; +			devbus,wr-low-ps   = <60000>; +			devbus,ale-wr-ps   = <60000>; + +			/* NOR 128 MiB */ +			nor@0 { +				compatible = "cfi-flash"; +				reg = <0 0x8000000>; +				bank-width = <2>; +			}; +		}; + +		pcie-controller { +			status = "okay"; +			/* Internal mini-PCIe connector */ +			pcie@1,0 { +				/* Port 0, Lane 0 */ +				status = "okay"; +			}; +		};  	};  }; diff --git a/arch/arm/boot/dts/armada-xp.dtsi b/arch/arm/boot/dts/armada-xp.dtsi index ca00d8326c8..29dfeb6d4a2 100644 --- a/arch/arm/boot/dts/armada-xp.dtsi +++ b/arch/arm/boot/dts/armada-xp.dtsi @@ -151,5 +151,11 @@  			status = "disabled";  		}; +		thermal@d00182b0 { +			compatible = "marvell,armadaxp-thermal"; +			reg = <0xd00182b0 0x4 +			       0xd00184d0 0x4>; +			status = "okay"; +		};  	};  }; diff --git a/arch/arm/boot/dts/at91-ariag25.dts b/arch/arm/boot/dts/at91-ariag25.dts new file mode 100644 index 00000000000..c7aebba4e8e --- /dev/null +++ b/arch/arm/boot/dts/at91-ariag25.dts @@ -0,0 +1,171 @@ +/* + * at91-ariag25.dts - Device Tree file for Acme Systems Aria G25 (AT91SAM9G25 based) + * + * Copyright (C) 2013 Douglas Gilbert <dgilbert@interlog.com>, + *                    Robert Nelson <robertcnelson@gmail.com> + * + * Licensed under GPLv2 or later. + */ +/dts-v1/; +/include/ "at91sam9g25.dtsi" + +/ { +	model = "Acme Systems Aria G25"; +	compatible = "acme,ariag25", "atmel,at91sam9x5ek", +		     "atmel,at91sam9x5", "atmel,at91sam9"; + +	aliases { +		serial0 = &dbgu; +		serial1 = &usart0; +		serial2 = &usart1; +		serial3 = &usart2; +		serial4 = &usart3; +		serial5 = &uart0; +	}; + +	chosen { +		bootargs = "console=ttyS0,115200 root=/dev/mmcblk0p2 rw rootwait"; +	}; + +	memory { +		/* 128 MB, change this for 256 MB revision */ +		reg = <0x20000000 0x8000000>; +	}; + +	clocks { +		#address-cells = <1>; +		#size-cells = <1>; +		ranges; + +		main_clock: clock@0 { +			compatible = "atmel,osc", "fixed-clock"; +			clock-frequency = <12000000>; +		}; +	}; + +	ahb { +		apb { +			mmc0: mmc@f0008000 { +				/* N.B. Aria has no SD card detect (CD), assumed present */ + +				pinctrl-0 = < +					&pinctrl_mmc0_slot0_clk_cmd_dat0 +					&pinctrl_mmc0_slot0_dat1_3>; +				status = "okay"; +				slot@0 { +					reg = <0>; +					bus-width = <4>; +				}; +			}; + +			i2c0: i2c@f8010000 { +				status = "okay"; +			}; + +			i2c1: i2c@f8014000 { +				status = "okay"; +			}; + +			/* TWD2+TCLK2 hidden behind ethernet, so no i2c2 */ + +			usart0: serial@f801c000 { +				pinctrl-0 = <&pinctrl_usart0 +					     &pinctrl_usart0_rts +					     &pinctrl_usart0_cts>; +				status = "okay"; +			}; + +			usart1: serial@f8020000 { +				pinctrl-0 = <&pinctrl_usart1 +					     /* &pinctrl_usart1_rts */ +					     /* &pinctrl_usart1_cts */ +					    >; +				status = "okay"; +			}; + +			usart2: serial@f8024000 { +				/* cannot activate RTS2+CTS2, clash with +				 * ethernet on PB0 and PB1 */ +				pinctrl-0 = <&pinctrl_usart2>; +				status = "okay"; +			}; + +			usart3: serial@f8028000 { +				compatible = "atmel,at91sam9260-usart"; +				reg = <0xf8028000 0x200>; +				interrupts = <8 4 5>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_usart3 +					     /* &pinctrl_usart3_rts */ +					     /* &pinctrl_usart3_cts */ +					    >; +				status = "okay"; +			}; + +			macb0: ethernet@f802c000 { +				phy-mode = "rmii"; +				/* +				 * following can be overwritten by bootloader: +				 * for example u-boot 'ftd set' command +				 */ +				local-mac-address = [00 00 00 00 00 00]; +				status = "okay"; +			}; + +			uart0: serial@f8040000 { +				compatible = "atmel,at91sam9260-usart"; +				reg = <0xf8040000 0x200>; +				interrupts = <15 4 5>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_uart0>; +				status = "okay"; +			}; + +			adc0: adc@f804c000 { +				status = "okay"; +				atmel,adc-channels-used = <0xf>; +				atmel,adc-num-channels = <4>; +			}; + +			dbgu: serial@fffff200 { +				status = "okay"; +			}; + +			pinctrl@fffff400 { +				w1_0 { +					pinctrl_w1_0: w1_0-0 { +						atmel,pins = <0 21 0x0 0x1>; /* PA21 PIO, pull-up */ +					}; +				}; +			}; +		}; + +		usb0: ohci@00600000 { +			status = "okay"; +			num-ports = <3>; +		}; + +		usb1: ehci@00700000 { +			status = "okay"; +		}; +	}; + +	leds { +		compatible = "gpio-leds"; + +		/* little green LED in middle of Aria G25 module */ +		aria_led { +			label = "aria_led"; +			gpios = <&pioB 8 0>; /* PB8 */ +			linux,default-trigger = "heartbeat"; +		}; + +	}; + +	onewire@0 { +		compatible = "w1-gpio"; +		gpios = <&pioA 21 1>; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_w1_0>; +	}; +}; diff --git a/arch/arm/boot/dts/at91rm9200.dtsi b/arch/arm/boot/dts/at91rm9200.dtsi index b0268a5f4b4..5d3ed5aafc6 100644 --- a/arch/arm/boot/dts/at91rm9200.dtsi +++ b/arch/arm/boot/dts/at91rm9200.dtsi @@ -29,6 +29,7 @@  		gpio3 = &pioD;  		tcb0 = &tcb0;  		tcb1 = &tcb1; +		i2c0 = &i2c0;  		ssc0 = &ssc0;  		ssc1 = &ssc1;  		ssc2 = &ssc2; @@ -91,6 +92,17 @@  				interrupts = <20 4 0 21 4 0 22 4 0>;  			}; +			i2c0: i2c@fffb8000 { +				compatible = "atmel,at91rm9200-i2c"; +				reg = <0xfffb8000 0x4000>; +				interrupts = <12 4 6>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_twi>; +				#address-cells = <1>; +				#size-cells = <0>; +				status = "disabled"; +			}; +  			mmc0: mmc@fffb4000 {  				compatible = "atmel,hsmci";  				reg = <0xfffb4000 0x4000>; @@ -365,6 +377,20 @@  					};  				}; +				twi { +					pinctrl_twi: twi-0 { +						atmel,pins = +							<0 25 0x1 0x2	/* PA25 periph A with multi drive */ +							 0 26 0x1 0x2>;	/* PA26 periph A with multi drive */ +					}; + +					pinctrl_twi_gpio: twi_gpio-0 { +						atmel,pins = +							<0 25 0x0 0x2	/* PA25 GPIO with multi drive */ +							 0 26 0x0 0x2>;	/* PA26 GPIO with multi drive */ +					}; +				}; +  				pioA: gpio@fffff400 {  					compatible = "atmel,at91rm9200-gpio";  					reg = <0xfffff400 0x200>; @@ -500,6 +526,8 @@  		i2c-gpio,sda-open-drain;  		i2c-gpio,scl-open-drain;  		i2c-gpio,delay-us = <2>;	/* ~100 kHz */ +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_twi_gpio>;  		#address-cells = <1>;  		#size-cells = <0>;  		status = "disabled"; diff --git a/arch/arm/boot/dts/at91sam9260.dtsi b/arch/arm/boot/dts/at91sam9260.dtsi index cb7bcc51608..70b5ccbac23 100644 --- a/arch/arm/boot/dts/at91sam9260.dtsi +++ b/arch/arm/boot/dts/at91sam9260.dtsi @@ -158,8 +158,8 @@  				usart1 {  					pinctrl_usart1: usart1-0 {  						atmel,pins = -							<2 6 0x1 0x1	/* PB6 periph A with pullup */ -							 2 7 0x1 0x0>;	/* PB7 periph A */ +							<1 6 0x1 0x1	/* PB6 periph A with pullup */ +							 1 7 0x1 0x0>;	/* PB7 periph A */  					};  					pinctrl_usart1_rts: usart1_rts-0 { @@ -194,18 +194,18 @@  				usart3 {  					pinctrl_usart3: usart3-0 {  						atmel,pins = -							<2 10 0x1 0x1	/* PB10 periph A with pullup */ -							 2 11 0x1 0x0>;	/* PB11 periph A */ +							<1 10 0x1 0x1	/* PB10 periph A with pullup */ +							 1 11 0x1 0x0>;	/* PB11 periph A */  					};  					pinctrl_usart3_rts: usart3_rts-0 {  						atmel,pins = -							<3 8 0x2 0x0>;	/* PB8 periph B */ +							<2 8 0x2 0x0>;	/* PC8 periph B */  					};  					pinctrl_usart3_cts: usart3_cts-0 {  						atmel,pins = -							<3 10 0x2 0x0>;	/* PB10 periph B */ +							<2 10 0x2 0x0>;	/* PC10 periph B */  					};  				}; @@ -220,8 +220,8 @@  				uart1 {  					pinctrl_uart1: uart1-0 {  						atmel,pins = -							<2 12 0x1 0x1	/* PB12 periph A with pullup */ -							 2 13 0x1 0x0>;	/* PB13 periph A */ +							<1 12 0x1 0x1	/* PB12 periph A with pullup */ +							 1 13 0x1 0x0>;	/* PB13 periph A */  					};  				}; @@ -322,6 +322,24 @@  					};  				}; +				spi0 { +					pinctrl_spi0: spi0-0 { +						atmel,pins = +							<0 0 0x1 0x0	/* PA0 periph A SPI0_MISO pin */ +							 0 1 0x1 0x0	/* PA1 periph A SPI0_MOSI pin */ +							 0 2 0x1 0x0>;	/* PA2 periph A SPI0_SPCK pin */ +					}; +				}; + +				spi1 { +					pinctrl_spi1: spi1-0 { +						atmel,pins = +							<1 0 0x1 0x0	/* PB0 periph A SPI1_MISO pin */ +							 1 1 0x1 0x0	/* PB1 periph A SPI1_MOSI pin */ +							 1 2 0x1 0x0>;	/* PB2 periph A SPI1_SPCK pin */ +					}; +				}; +  				pioA: gpio@fffff400 {  					compatible = "atmel,at91rm9200-gpio";  					reg = <0xfffff400 0x200>; @@ -471,6 +489,28 @@  				status = "disabled";  			}; +			spi0: spi@fffc8000 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "atmel,at91rm9200-spi"; +				reg = <0xfffc8000 0x200>; +				interrupts = <12 4 3>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_spi0>; +				status = "disabled"; +			}; + +			spi1: spi@fffcc000 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "atmel,at91rm9200-spi"; +				reg = <0xfffcc000 0x200>; +				interrupts = <13 4 3>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_spi1>; +				status = "disabled"; +			}; +  			adc0: adc@fffe0000 {  				compatible = "atmel,at91sam9260-adc";  				reg = <0xfffe0000 0x100>; @@ -484,6 +524,9 @@  				atmel,adc-drdy-mask = <0x10000>;  				atmel,adc-status-register = <0x1c>;  				atmel,adc-trigger-register = <0x04>; +				atmel,adc-res = <8 10>; +				atmel,adc-res-names = "lowres", "highres"; +				atmel,adc-use-res = "highres";  				trigger@0 {  					trigger-name = "timer-counter-0"; diff --git a/arch/arm/boot/dts/at91sam9263.dtsi b/arch/arm/boot/dts/at91sam9263.dtsi index 271d4de026e..94b58ab2cc0 100644 --- a/arch/arm/boot/dts/at91sam9263.dtsi +++ b/arch/arm/boot/dts/at91sam9263.dtsi @@ -303,6 +303,24 @@  					};  				}; +				spi0 { +					pinctrl_spi0: spi0-0 { +						atmel,pins = +							<0 0 0x2 0x0	/* PA0 periph B SPI0_MISO pin */ +							 0 1 0x2 0x0	/* PA1 periph B SPI0_MOSI pin */ +							 0 2 0x2 0x0>;	/* PA2 periph B SPI0_SPCK pin */ +					}; +				}; + +				spi1 { +					pinctrl_spi1: spi1-0 { +						atmel,pins = +							<1 12 0x1 0x0	/* PB12 periph A SPI1_MISO pin */ +							 1 13 0x1 0x0	/* PB13 periph A SPI1_MOSI pin */ +							 1 14 0x1 0x0>;	/* PB14 periph A SPI1_SPCK pin */ +					}; +				}; +  				pioA: gpio@fffff200 {  					compatible = "atmel,at91rm9200-gpio";  					reg = <0xfffff200 0x200>; @@ -462,6 +480,28 @@  				reg = <0xfffffd40 0x10>;  				status = "disabled";  			}; + +			spi0: spi@fffa4000 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "atmel,at91rm9200-spi"; +				reg = <0xfffa4000 0x200>; +				interrupts = <14 4 3>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_spi0>; +				status = "disabled"; +			}; + +			spi1: spi@fffa8000 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "atmel,at91rm9200-spi"; +				reg = <0xfffa8000 0x200>; +				interrupts = <15 4 3>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_spi1>; +				status = "disabled"; +			};  		};  		nand0: nand@40000000 { diff --git a/arch/arm/boot/dts/at91sam9263ek.dts b/arch/arm/boot/dts/at91sam9263ek.dts index 1eb08728f52..3b82d91e7fc 100644 --- a/arch/arm/boot/dts/at91sam9263ek.dts +++ b/arch/arm/boot/dts/at91sam9263ek.dts @@ -79,6 +79,16 @@  					};  				};  			}; + +			spi0: spi@fffa4000 { +				status = "okay"; +				cs-gpios = <&pioA 5 0>, <0>, <0>, <0>; +				mtd_dataflash@0 { +					compatible = "atmel,at45", "atmel,dataflash"; +					spi-max-frequency = <50000000>; +					reg = <0>; +				}; +			};  		};  		nand0: nand@40000000 { @@ -155,8 +165,6 @@  	gpio_keys {  		compatible = "gpio-keys"; -		#address-cells = <1>; -		#size-cells = <0>;  		left_click {  			label = "left_click"; diff --git a/arch/arm/boot/dts/at91sam9g15.dtsi b/arch/arm/boot/dts/at91sam9g15.dtsi index fbe7a7089c2..28467fd6bf9 100644 --- a/arch/arm/boot/dts/at91sam9g15.dtsi +++ b/arch/arm/boot/dts/at91sam9g15.dtsi @@ -10,7 +10,7 @@  / {  	model = "Atmel AT91SAM9G15 SoC"; -	compatible = "atmel, at91sam9g15, atmel,at91sam9x5"; +	compatible = "atmel,at91sam9g15", "atmel,at91sam9x5";  	ahb {  		apb { diff --git a/arch/arm/boot/dts/at91sam9g15ek.dts b/arch/arm/boot/dts/at91sam9g15ek.dts index 86dd3f6d938..5427b2dba87 100644 --- a/arch/arm/boot/dts/at91sam9g15ek.dts +++ b/arch/arm/boot/dts/at91sam9g15ek.dts @@ -11,6 +11,6 @@  /include/ "at91sam9x5ek.dtsi"  / { -	model = "Atmel AT91SAM9G25-EK"; +	model = "Atmel AT91SAM9G15-EK";  	compatible = "atmel,at91sam9g15ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9";  }; diff --git a/arch/arm/boot/dts/at91sam9g20ek_common.dtsi b/arch/arm/boot/dts/at91sam9g20ek_common.dtsi index da15e83e7f1..6a92c5baef8 100644 --- a/arch/arm/boot/dts/at91sam9g20ek_common.dtsi +++ b/arch/arm/boot/dts/at91sam9g20ek_common.dtsi @@ -96,6 +96,16 @@  				status = "okay";  				pinctrl-0 = <&pinctrl_ssc0_tx>;  			}; + +			spi0: spi@fffc8000 { +				status = "okay"; +				cs-gpios = <0>, <&pioC 11 0>, <0>, <0>; +				mtd_dataflash@0 { +					compatible = "atmel,at45", "atmel,dataflash"; +					spi-max-frequency = <50000000>; +					reg = <1>; +				}; +			};  		};  		nand0: nand@40000000 { @@ -167,8 +177,6 @@  	gpio_keys {  		compatible = "gpio-keys"; -		#address-cells = <1>; -		#size-cells = <0>;  		btn3 {  			label = "Button 3"; diff --git a/arch/arm/boot/dts/at91sam9g25.dtsi b/arch/arm/boot/dts/at91sam9g25.dtsi index 05a718fb83c..5fd32df03f2 100644 --- a/arch/arm/boot/dts/at91sam9g25.dtsi +++ b/arch/arm/boot/dts/at91sam9g25.dtsi @@ -10,7 +10,7 @@  / {  	model = "Atmel AT91SAM9G25 SoC"; -	compatible = "atmel, at91sam9g25, atmel,at91sam9x5"; +	compatible = "atmel,at91sam9g25", "atmel,at91sam9x5";  	ahb {  		apb { diff --git a/arch/arm/boot/dts/at91sam9g25ek.dts b/arch/arm/boot/dts/at91sam9g25ek.dts index c5ab16fba05..a1c511fecdc 100644 --- a/arch/arm/boot/dts/at91sam9g25ek.dts +++ b/arch/arm/boot/dts/at91sam9g25ek.dts @@ -13,4 +13,13 @@  / {  	model = "Atmel AT91SAM9G25-EK";  	compatible = "atmel,at91sam9g25ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; + +	ahb { +		apb { +			macb0: ethernet@f802c000 { +				phy-mode = "rmii"; +				status = "okay"; +			}; +		}; +	};  }; diff --git a/arch/arm/boot/dts/at91sam9g35.dtsi b/arch/arm/boot/dts/at91sam9g35.dtsi index f9d14a72279..d6fa8af5072 100644 --- a/arch/arm/boot/dts/at91sam9g35.dtsi +++ b/arch/arm/boot/dts/at91sam9g35.dtsi @@ -10,7 +10,7 @@  / {  	model = "Atmel AT91SAM9G35 SoC"; -	compatible = "atmel, at91sam9g35, atmel,at91sam9x5"; +	compatible = "atmel,at91sam9g35", "atmel,at91sam9x5";  	ahb {  		apb { diff --git a/arch/arm/boot/dts/at91sam9g35ek.dts b/arch/arm/boot/dts/at91sam9g35ek.dts index 95944bdd798..6f58ab8d21f 100644 --- a/arch/arm/boot/dts/at91sam9g35ek.dts +++ b/arch/arm/boot/dts/at91sam9g35ek.dts @@ -13,4 +13,13 @@  / {  	model = "Atmel AT91SAM9G35-EK";  	compatible = "atmel,at91sam9g35ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; + +	ahb { +		apb { +			macb0: ethernet@f802c000 { +				phy-mode = "rmii"; +				status = "okay"; +			}; +		}; +	};  }; diff --git a/arch/arm/boot/dts/at91sam9g45.dtsi b/arch/arm/boot/dts/at91sam9g45.dtsi index 6b1d4cab24c..f8f7370e866 100644 --- a/arch/arm/boot/dts/at91sam9g45.dtsi +++ b/arch/arm/boot/dts/at91sam9g45.dtsi @@ -322,6 +322,24 @@  					};  				}; +				spi0 { +					pinctrl_spi0: spi0-0 { +						atmel,pins = +							<1 0 0x1 0x0	/* PB0 periph A SPI0_MISO pin */ +							 1 1 0x1 0x0	/* PB1 periph A SPI0_MOSI pin */ +							 1 2 0x1 0x0>;	/* PB2 periph A SPI0_SPCK pin */ +					}; +				}; + +				spi1 { +					pinctrl_spi1: spi1-0 { +						atmel,pins = +							<1 14 0x1 0x0	/* PB14 periph A SPI1_MISO pin */ +							 1 15 0x1 0x0	/* PB15 periph A SPI1_MOSI pin */ +							 1 16 0x1 0x0>;	/* PB16 periph A SPI1_SPCK pin */ +					}; +				}; +  				pioA: gpio@fffff200 {  					compatible = "atmel,at91rm9200-gpio";  					reg = <0xfffff200 0x200>; @@ -484,6 +502,9 @@  				atmel,adc-drdy-mask = <0x10000>;  				atmel,adc-status-register = <0x1c>;  				atmel,adc-trigger-register = <0x08>; +				atmel,adc-res = <8 10>; +				atmel,adc-res-names = "lowres", "highres"; +				atmel,adc-use-res = "highres";  				trigger@0 {  					trigger-name = "external-rising"; @@ -531,6 +552,28 @@  				reg = <0xfffffd40 0x10>;  				status = "disabled";  			}; + +			spi0: spi@fffa4000 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "atmel,at91rm9200-spi"; +				reg = <0xfffa4000 0x200>; +				interrupts = <14 4 3>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_spi0>; +				status = "disabled"; +			}; + +			spi1: spi@fffa8000 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "atmel,at91rm9200-spi"; +				reg = <0xfffa8000 0x200>; +				interrupts = <15 4 3>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_spi1>; +				status = "disabled"; +			};  		};  		nand0: nand@40000000 { diff --git a/arch/arm/boot/dts/at91sam9m10g45ek.dts b/arch/arm/boot/dts/at91sam9m10g45ek.dts index 20c31913c27..51d9251b5bb 100644 --- a/arch/arm/boot/dts/at91sam9m10g45ek.dts +++ b/arch/arm/boot/dts/at91sam9m10g45ek.dts @@ -102,6 +102,16 @@  					};  				};  			}; + +			spi0: spi@fffa4000{ +				status = "okay"; +				cs-gpios = <&pioB 3 0>, <0>, <0>, <0>; +				mtd_dataflash@0 { +					compatible = "atmel,at45", "atmel,dataflash"; +					spi-max-frequency = <13000000>; +					reg = <0>; +				}; +			};  		};  		nand0: nand@40000000 { @@ -162,8 +172,6 @@  	gpio_keys {  		compatible = "gpio-keys"; -		#address-cells = <1>; -		#size-cells = <0>;  		left_click {  			label = "left_click"; diff --git a/arch/arm/boot/dts/at91sam9n12.dtsi b/arch/arm/boot/dts/at91sam9n12.dtsi index 7750f98dd76..b2961f1ea51 100644 --- a/arch/arm/boot/dts/at91sam9n12.dtsi +++ b/arch/arm/boot/dts/at91sam9n12.dtsi @@ -261,6 +261,24 @@  					};  				}; +				spi0 { +					pinctrl_spi0: spi0-0 { +						atmel,pins = +							<0 11 0x1 0x0	/* PA11 periph A SPI0_MISO pin */ +							 0 12 0x1 0x0	/* PA12 periph A SPI0_MOSI pin */ +							 0 13 0x1 0x0>;	/* PA13 periph A SPI0_SPCK pin */ +					}; +				}; + +				spi1 { +					pinctrl_spi1: spi1-0 { +						atmel,pins = +							<0 21 0x2 0x0	/* PA21 periph B SPI1_MISO pin */ +							 0 22 0x2 0x0	/* PA22 periph B SPI1_MOSI pin */ +							 0 23 0x2 0x0>;	/* PA23 periph B SPI1_SPCK pin */ +					}; +				}; +  				pioA: gpio@fffff400 {  					compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";  					reg = <0xfffff400 0x200>; @@ -373,6 +391,28 @@  				#size-cells = <0>;  				status = "disabled";  			}; + +			spi0: spi@f0000000 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "atmel,at91rm9200-spi"; +				reg = <0xf0000000 0x100>; +				interrupts = <13 4 3>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_spi0>; +				status = "disabled"; +			}; + +			spi1: spi@f0004000 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "atmel,at91rm9200-spi"; +				reg = <0xf0004000 0x100>; +				interrupts = <14 4 3>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_spi1>; +				status = "disabled"; +			};  		};  		nand0: nand@40000000 { diff --git a/arch/arm/boot/dts/at91sam9n12ek.dts b/arch/arm/boot/dts/at91sam9n12ek.dts index d400f8de438..d30e48bd1e9 100644 --- a/arch/arm/boot/dts/at91sam9n12ek.dts +++ b/arch/arm/boot/dts/at91sam9n12ek.dts @@ -67,6 +67,16 @@  					};  				};  			}; + +			spi0: spi@f0000000 { +				status = "okay"; +				cs-gpios = <&pioA 14 0>, <0>, <0>, <0>; +				m25p80@0 { +					compatible = "atmel,at25df321a"; +					spi-max-frequency = <50000000>; +					reg = <0>; +				}; +			};  		};  		nand0: nand@40000000 { @@ -104,8 +114,6 @@  	gpio_keys {  		compatible = "gpio-keys"; -		#address-cells = <1>; -		#size-cells = <0>;  		enter {  			label = "Enter"; diff --git a/arch/arm/boot/dts/at91sam9x25.dtsi b/arch/arm/boot/dts/at91sam9x25.dtsi index 54eb33ba6d2..9ac2bc2b4f0 100644 --- a/arch/arm/boot/dts/at91sam9x25.dtsi +++ b/arch/arm/boot/dts/at91sam9x25.dtsi @@ -10,7 +10,7 @@  / {  	model = "Atmel AT91SAM9X25 SoC"; -	compatible = "atmel, at91sam9x25, atmel,at91sam9x5"; +	compatible = "atmel,at91sam9x25", "atmel,at91sam9x5";  	ahb {  		apb { diff --git a/arch/arm/boot/dts/at91sam9x25ek.dts b/arch/arm/boot/dts/at91sam9x25ek.dts index af907eaa1f2..3b40d11d65e 100644 --- a/arch/arm/boot/dts/at91sam9x25ek.dts +++ b/arch/arm/boot/dts/at91sam9x25ek.dts @@ -13,4 +13,18 @@  / {  	model = "Atmel AT91SAM9G25-EK";  	compatible = "atmel,at91sam9x25ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; + +	ahb { +		apb { +			macb0: ethernet@f802c000 { +				phy-mode = "rmii"; +				status = "okay"; +			}; + +			macb1: ethernet@f8030000 { +				phy-mode = "rmii"; +				status = "okay"; +			}; +		}; +	};  }; diff --git a/arch/arm/boot/dts/at91sam9x35.dtsi b/arch/arm/boot/dts/at91sam9x35.dtsi index fb102d6126c..ba67d83d17a 100644 --- a/arch/arm/boot/dts/at91sam9x35.dtsi +++ b/arch/arm/boot/dts/at91sam9x35.dtsi @@ -10,7 +10,7 @@  / {  	model = "Atmel AT91SAM9X35 SoC"; -	compatible = "atmel, at91sam9x35, atmel,at91sam9x5"; +	compatible = "atmel,at91sam9x35", "atmel,at91sam9x5";  	ahb {  		apb { diff --git a/arch/arm/boot/dts/at91sam9x35ek.dts b/arch/arm/boot/dts/at91sam9x35ek.dts index 5ccb607b541..6ad19a0d542 100644 --- a/arch/arm/boot/dts/at91sam9x35ek.dts +++ b/arch/arm/boot/dts/at91sam9x35ek.dts @@ -13,4 +13,13 @@  / {  	model = "Atmel AT91SAM9X35-EK";  	compatible = "atmel,at91sam9x35ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; + +	ahb { +		apb { +			macb0: ethernet@f802c000 { +				phy-mode = "rmii"; +				status = "okay"; +			}; +		}; +	};  }; diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi index a98c0d50fbb..640b3bbbb70 100644 --- a/arch/arm/boot/dts/at91sam9x5.dtsi +++ b/arch/arm/boot/dts/at91sam9x5.dtsi @@ -343,6 +343,72 @@  					};  				}; +				spi0 { +					pinctrl_spi0: spi0-0 { +						atmel,pins = +							<0 11 0x1 0x0	/* PA11 periph A SPI0_MISO pin */ +							 0 12 0x1 0x0	/* PA12 periph A SPI0_MOSI pin */ +							 0 13 0x1 0x0>;	/* PA13 periph A SPI0_SPCK pin */ +					}; +				}; + +				spi1 { +					pinctrl_spi1: spi1-0 { +						atmel,pins = +							<0 21 0x2 0x0	/* PA21 periph B SPI1_MISO pin */ +							 0 22 0x2 0x0	/* PA22 periph B SPI1_MOSI pin */ +							 0 23 0x2 0x0>;	/* PA23 periph B SPI1_SPCK pin */ +					}; +				}; + +				i2c0 { +					pinctrl_i2c0: i2c0-0 { +						atmel,pins = +							<0 30 0x1 0x0	/* PA30 periph A I2C0 data */ +							 0 31 0x1 0x0>;	/* PA31 periph A I2C0 clock */ +					}; +				}; + +				i2c1 { +					pinctrl_i2c1: i2c1-0 { +						atmel,pins = +							<2 0 0x3 0x0	/* PC0 periph C I2C1 data */ +							 2 1 0x3 0x0>;	/* PC1 periph C I2C1 clock */ +					}; +				}; + +				i2c2 { +					pinctrl_i2c2: i2c2-0 { +						atmel,pins = +							<1 4 0x2 0x0	/* PB4 periph B I2C2 data */ +							 1 5 0x2 0x0>;	/* PB5 periph B I2C2 clock */ +					}; +				}; + +				i2c_gpio0 { +					pinctrl_i2c_gpio0: i2c_gpio0-0 { +						atmel,pins = +							<0 30 0x0 0x2	/* PA30 gpio multidrive I2C0 data */ +							 0 31 0x0 0x2>;	/* PA31 gpio multidrive I2C0 clock */ +					}; +				}; + +				i2c_gpio1 { +					pinctrl_i2c_gpio1: i2c_gpio1-0 { +						atmel,pins = +							<2 0 0x0 0x2	/* PC0 gpio multidrive I2C1 data */ +							 2 1 0x0 0x2>;	/* PC1 gpio multidrive I2C1 clock */ +					}; +				}; + +				i2c_gpio2 { +					pinctrl_i2c_gpio2: i2c_gpio2-0 { +						atmel,pins = +							<1 4 0x0 0x2	/* PB4 gpio multidrive I2C2 data */ +							 1 5 0x0 0x2>;	/* PB5 gpio multidrive I2C2 clock */ +					}; +				}; +  				pioA: gpio@fffff400 {  					compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio";  					reg = <0xfffff400 0x200>; @@ -471,6 +537,8 @@  				interrupts = <9 4 6>;  				#address-cells = <1>;  				#size-cells = <0>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_i2c0>;  				status = "disabled";  			}; @@ -480,6 +548,8 @@  				interrupts = <10 4 6>;  				#address-cells = <1>;  				#size-cells = <0>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_i2c1>;  				status = "disabled";  			}; @@ -489,6 +559,8 @@  				interrupts = <11 4 6>;  				#address-cells = <1>;  				#size-cells = <0>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_i2c2>;  				status = "disabled";  			}; @@ -505,6 +577,9 @@  				atmel,adc-drdy-mask = <0x1000000>;  				atmel,adc-status-register = <0x30>;  				atmel,adc-trigger-register = <0xc0>; +				atmel,adc-res = <8 10>; +				atmel,adc-res-names = "lowres", "highres"; +				atmel,adc-use-res = "highres";  				trigger@0 {  					trigger-name = "external-rising"; @@ -529,6 +604,35 @@  					trigger-value = <0x6>;  				};  			}; + +			spi0: spi@f0000000 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "atmel,at91rm9200-spi"; +				reg = <0xf0000000 0x100>; +				interrupts = <13 4 3>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_spi0>; +				status = "disabled"; +			}; + +			spi1: spi@f0004000 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "atmel,at91rm9200-spi"; +				reg = <0xf0004000 0x100>; +				interrupts = <14 4 3>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_spi1>; +				status = "disabled"; +			}; + +			rtc@fffffeb0 { +				compatible = "atmel,at91rm9200-rtc"; +				reg = <0xfffffeb0 0x40>; +				interrupts = <1 4 7>; +				status = "disabled"; +			};  		};  		nand0: nand@40000000 { @@ -577,6 +681,8 @@  		i2c-gpio,delay-us = <2>;	/* ~100 kHz */  		#address-cells = <1>;  		#size-cells = <0>; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_i2c_gpio0>;  		status = "disabled";  	}; @@ -590,6 +696,8 @@  		i2c-gpio,delay-us = <2>;	/* ~100 kHz */  		#address-cells = <1>;  		#size-cells = <0>; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_i2c_gpio1>;  		status = "disabled";  	}; @@ -603,6 +711,8 @@  		i2c-gpio,delay-us = <2>;	/* ~100 kHz */  		#address-cells = <1>;  		#size-cells = <0>; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_i2c_gpio2>;  		status = "disabled";  	};  }; diff --git a/arch/arm/boot/dts/at91sam9x5cm.dtsi b/arch/arm/boot/dts/at91sam9x5cm.dtsi index 4027ac7e450..347a74a857f 100644 --- a/arch/arm/boot/dts/at91sam9x5cm.dtsi +++ b/arch/arm/boot/dts/at91sam9x5cm.dtsi @@ -24,6 +24,16 @@  	};  	ahb { +		apb { +			pinctrl@fffff400 { +				1wire_cm { +					pinctrl_1wire_cm: 1wire_cm-0 { +						atmel,pins = <1 18 0x0 0x2>; /* PB18 multidrive, conflicts with led */ +					}; +				}; +			}; +		}; +  		nand0: nand@40000000 {  			nand-bus-width = <8>;  			nand-ecc-mode = "hw"; @@ -74,4 +84,14 @@  			gpios = <&pioD 21 0>;  		};  	}; + +	1wire_cm { +		compatible = "w1-gpio"; +		gpios = <&pioB 18 0>; +		linux,open-drain; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_1wire_cm>; +		status = "okay"; +	}; +  }; diff --git a/arch/arm/boot/dts/at91sam9x5ek.dtsi b/arch/arm/boot/dts/at91sam9x5ek.dtsi index 8a7cf1d9cf5..1fa48d2bfd8 100644 --- a/arch/arm/boot/dts/at91sam9x5ek.dtsi +++ b/arch/arm/boot/dts/at91sam9x5ek.dtsi @@ -13,7 +13,7 @@  	compatible = "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9";  	chosen { -		bootargs = "128M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs"; +		bootargs = "console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs";  	};  	ahb { @@ -52,23 +52,10 @@  				status = "okay";  			}; -			macb0: ethernet@f802c000 { -				phy-mode = "rmii"; -				status = "okay"; -			}; -  			i2c0: i2c@f8010000 {  				status = "okay";  			}; -			i2c1: i2c@f8014000 { -				status = "okay"; -			}; - -			i2c2: i2c@f8018000 { -				status = "okay"; -			}; -  			pinctrl@fffff400 {  				mmc0 {  					pinctrl_board_mmc0: mmc0-board { @@ -84,6 +71,16 @@  					};  				};  			}; + +			spi0: spi@f0000000 { +				status = "okay"; +				cs-gpios = <&pioA 14 0>, <0>, <0>, <0>; +				m25p80@0 { +					compatible = "atmel,at25df321a"; +					spi-max-frequency = <50000000>; +					reg = <0>; +				}; +			};  		};  		usb0: ohci@00600000 { diff --git a/arch/arm/boot/dts/atlas6-evb.dts b/arch/arm/boot/dts/atlas6-evb.dts new file mode 100644 index 00000000000..ab042ca8dea --- /dev/null +++ b/arch/arm/boot/dts/atlas6-evb.dts @@ -0,0 +1,78 @@ +/* + * DTS file for CSR SiRFatlas6 Evaluation Board + * + * Copyright (c) 2012 Cambridge Silicon Radio Limited, a CSR plc group company. + * + * Licensed under GPLv2 or later. + */ + +/dts-v1/; + +/include/ "atlas6.dtsi" + +/ { +	model = "CSR SiRFatlas6 Evaluation Board"; +	compatible = "sirf,atlas6-cb", "sirf,atlas6"; + +	memory { +		reg = <0x00000000 0x20000000>; +	}; + +	axi { +		peri-iobg { +			uart@b0060000 { +				pinctrl-names = "default"; +				pinctrl-0 = <&uart1_pins_a>; +			}; +			spi@b00d0000 { +				status = "okay"; +				pinctrl-names = "default"; +				pinctrl-0 = <&spi0_pins_a>; +				spi@0 { +					compatible = "spidev"; +					reg = <0>; +					spi-max-frequency = <1000000>; +				}; +			}; +			spi@b0170000 { +				pinctrl-names = "default"; +				pinctrl-0 = <&spi1_pins_a>; +			}; +			i2c0: i2c@b00e0000 { +				status = "okay"; +				pinctrl-names = "default"; +				pinctrl-0 = <&i2c0_pins_a>; +				lcd@40 { +					compatible = "sirf,lcd"; +					reg = <0x40>; +				}; +			}; + +		}; +		disp-iobg { +			lcd@90010000 { +				status = "okay"; +				pinctrl-names = "default"; +				pinctrl-0 = <&lcd_24pins_a>; +			}; +		}; +	}; +	display: display@0 { +	    panels { +		panel0: panel@0 { +			panel-name = "Innolux TFT"; +			hactive = <800>; +			vactive = <480>; +			left_margin = <20>; +			right_margin = <234>; +			upper_margin = <3>; +			lower_margin = <41>; +			hsync_len = <3>; +			vsync_len = <2>; +			pixclock = <33264000>; +			sync = <3>; +			timing = <0x88>; +			}; +	    }; +	}; +}; diff --git a/arch/arm/boot/dts/atlas6.dtsi b/arch/arm/boot/dts/atlas6.dtsi new file mode 100644 index 00000000000..7d1a27949c1 --- /dev/null +++ b/arch/arm/boot/dts/atlas6.dtsi @@ -0,0 +1,668 @@ +/* + * DTS file for CSR SiRFatlas6 SoC + * + * Copyright (c) 2012 Cambridge Silicon Radio Limited, a CSR plc group company. + * + * Licensed under GPLv2 or later. + */ + +/include/ "skeleton.dtsi" +/ { +	compatible = "sirf,atlas6"; +	#address-cells = <1>; +	#size-cells = <1>; +	interrupt-parent = <&intc>; + +	cpus { +		#address-cells = <1>; +		#size-cells = <0>; + +		cpu@0 { +			reg = <0x0>; +			d-cache-line-size = <32>; +			i-cache-line-size = <32>; +			d-cache-size = <32768>; +			i-cache-size = <32768>; +			/* from bootloader */ +			timebase-frequency = <0>; +			bus-frequency = <0>; +			clock-frequency = <0>; +		}; +	}; + +	axi { +		compatible = "simple-bus"; +		#address-cells = <1>; +		#size-cells = <1>; +		ranges = <0x40000000 0x40000000 0x80000000>; + +		intc: interrupt-controller@80020000 { +			#interrupt-cells = <1>; +			interrupt-controller; +			compatible = "sirf,prima2-intc"; +			reg = <0x80020000 0x1000>; +		}; + +		sys-iobg { +			compatible = "simple-bus"; +			#address-cells = <1>; +			#size-cells = <1>; +			ranges = <0x88000000 0x88000000 0x40000>; + +			clks: clock-controller@88000000 { +				compatible = "sirf,atlas6-clkc"; +				reg = <0x88000000 0x1000>; +				interrupts = <3>; +				#clock-cells = <1>; +			}; + +			reset-controller@88010000 { +				compatible = "sirf,prima2-rstc"; +				reg = <0x88010000 0x1000>; +			}; + +			rsc-controller@88020000 { +				compatible = "sirf,prima2-rsc"; +				reg = <0x88020000 0x1000>; +			}; +		}; + +		mem-iobg { +			compatible = "simple-bus"; +			#address-cells = <1>; +			#size-cells = <1>; +			ranges = <0x90000000 0x90000000 0x10000>; + +			memory-controller@90000000 { +				compatible = "sirf,prima2-memc"; +				reg = <0x90000000 0x10000>; +				interrupts = <27>; +				clocks = <&clks 5>; +			}; +		}; + +		disp-iobg { +			compatible = "simple-bus"; +			#address-cells = <1>; +			#size-cells = <1>; +			ranges = <0x90010000 0x90010000 0x30000>; + +			lcd@90010000 { +				compatible = "sirf,prima2-lcd"; +				reg = <0x90010000 0x20000>; +				interrupts = <30>; +				clocks = <&clks 34>; +				display=<&display>; +				/* later transfer to pwm */ +				bl-gpio = <&gpio 7 0>; +				default-panel = <&panel0>; +			}; + +			vpp@90020000 { +				compatible = "sirf,prima2-vpp"; +				reg = <0x90020000 0x10000>; +				interrupts = <31>; +				clocks = <&clks 35>; +			}; +		}; + +		graphics-iobg { +			compatible = "simple-bus"; +			#address-cells = <1>; +			#size-cells = <1>; +			ranges = <0x98000000 0x98000000 0x8000000>; + +			graphics@98000000 { +				compatible = "powervr,sgx510"; +				reg = <0x98000000 0x8000000>; +				interrupts = <6>; +				clocks = <&clks 32>; +			}; +		}; + +		dsp-iobg { +			compatible = "simple-bus"; +			#address-cells = <1>; +			#size-cells = <1>; +			ranges = <0xa8000000 0xa8000000 0x2000000>; + +			dspif@a8000000 { +				compatible = "sirf,prima2-dspif"; +				reg = <0xa8000000 0x10000>; +				interrupts = <9>; +			}; + +			gps@a8010000 { +				compatible = "sirf,prima2-gps"; +				reg = <0xa8010000 0x10000>; +				interrupts = <7>; +				clocks = <&clks 9>; +			}; + +			dsp@a9000000 { +				compatible = "sirf,prima2-dsp"; +				reg = <0xa9000000 0x1000000>; +				interrupts = <8>; +				clocks = <&clks 8>; +			}; +		}; + +		peri-iobg { +			compatible = "simple-bus"; +			#address-cells = <1>; +			#size-cells = <1>; +			ranges = <0xb0000000 0xb0000000 0x180000>, +			       <0x56000000 0x56000000 0x1b00000>; + +			timer@b0020000 { +				compatible = "sirf,prima2-tick"; +				reg = <0xb0020000 0x1000>; +				interrupts = <0>; +			}; + +			nand@b0030000 { +				compatible = "sirf,prima2-nand"; +				reg = <0xb0030000 0x10000>; +				interrupts = <41>; +				clocks = <&clks 26>; +			}; + +			audio@b0040000 { +				compatible = "sirf,prima2-audio"; +				reg = <0xb0040000 0x10000>; +				interrupts = <35>; +				clocks = <&clks 27>; +			}; + +			uart0: uart@b0050000 { +				cell-index = <0>; +				compatible = "sirf,prima2-uart"; +				reg = <0xb0050000 0x1000>; +				interrupts = <17>; +				fifosize = <128>; +				clocks = <&clks 13>; +			}; + +			uart1: uart@b0060000 { +				cell-index = <1>; +				compatible = "sirf,prima2-uart"; +				reg = <0xb0060000 0x1000>; +				interrupts = <18>; +				fifosize = <32>; +				clocks = <&clks 14>; +			}; + +			uart2: uart@b0070000 { +				cell-index = <2>; +				compatible = "sirf,prima2-uart"; +				reg = <0xb0070000 0x1000>; +				interrupts = <19>; +				fifosize = <128>; +				clocks = <&clks 15>; +			}; + +			usp0: usp@b0080000 { +				cell-index = <0>; +				compatible = "sirf,prima2-usp"; +				reg = <0xb0080000 0x10000>; +				interrupts = <20>; +				clocks = <&clks 28>; +			}; + +			usp1: usp@b0090000 { +				cell-index = <1>; +				compatible = "sirf,prima2-usp"; +				reg = <0xb0090000 0x10000>; +				interrupts = <21>; +				clocks = <&clks 29>; +			}; + +			dmac0: dma-controller@b00b0000 { +				cell-index = <0>; +				compatible = "sirf,prima2-dmac"; +				reg = <0xb00b0000 0x10000>; +				interrupts = <12>; +				clocks = <&clks 24>; +			}; + +			dmac1: dma-controller@b0160000 { +				cell-index = <1>; +				compatible = "sirf,prima2-dmac"; +				reg = <0xb0160000 0x10000>; +				interrupts = <13>; +				clocks = <&clks 25>; +			}; + +			vip@b00C0000 { +				compatible = "sirf,prima2-vip"; +				reg = <0xb00C0000 0x10000>; +				clocks = <&clks 31>; +			}; + +			spi0: spi@b00d0000 { +				cell-index = <0>; +				compatible = "sirf,prima2-spi"; +				reg = <0xb00d0000 0x10000>; +				interrupts = <15>; +				sirf,spi-num-chipselects = <1>; +				cs-gpios = <&gpio 0 0>; +				sirf,spi-dma-rx-channel = <25>; +				sirf,spi-dma-tx-channel = <20>; +				#address-cells = <1>; +				#size-cells = <0>; +				clocks = <&clks 19>; +				status = "disabled"; +			}; + +			spi1: spi@b0170000 { +				cell-index = <1>; +				compatible = "sirf,prima2-spi"; +				reg = <0xb0170000 0x10000>; +				interrupts = <16>; +				clocks = <&clks 20>; +				status = "disabled"; +			}; + +			i2c0: i2c@b00e0000 { +				cell-index = <0>; +				compatible = "sirf,prima2-i2c"; +				reg = <0xb00e0000 0x10000>; +				interrupts = <24>; +				#address-cells = <1>; +				#size-cells = <0>; +				clocks = <&clks 17>; +			}; + +			i2c1: i2c@b00f0000 { +				cell-index = <1>; +				compatible = "sirf,prima2-i2c"; +				reg = <0xb00f0000 0x10000>; +				interrupts = <25>; +				#address-cells = <1>; +				#size-cells = <0>; +				clocks = <&clks 18>; +			}; + +			tsc@b0110000 { +				compatible = "sirf,prima2-tsc"; +				reg = <0xb0110000 0x10000>; +				interrupts = <33>; +				clocks = <&clks 16>; +			}; + +			gpio: pinctrl@b0120000 { +				#gpio-cells = <2>; +				#interrupt-cells = <2>; +				compatible = "sirf,atlas6-pinctrl"; +				reg = <0xb0120000 0x10000>; +				interrupts = <43 44 45 46 47>; +				gpio-controller; +				interrupt-controller; + +				lcd_16pins_a: lcd0@0 { +					lcd { +						sirf,pins = "lcd_16bitsgrp"; +						sirf,function = "lcd_16bits"; +					}; +				}; +				lcd_18pins_a: lcd0@1 { +					lcd { +						sirf,pins = "lcd_18bitsgrp"; +						sirf,function = "lcd_18bits"; +					}; +				}; +				lcd_24pins_a: lcd0@2 { +					lcd { +						sirf,pins = "lcd_24bitsgrp"; +						sirf,function = "lcd_24bits"; +					}; +				}; +				lcdrom_pins_a: lcdrom0@0 { +					lcd { +						sirf,pins = "lcdromgrp"; +						sirf,function = "lcdrom"; +					}; +				}; +				uart0_pins_a: uart0@0 { +					uart { +						sirf,pins = "uart0grp"; +						sirf,function = "uart0"; +					}; +				}; +				uart1_pins_a: uart1@0 { +					uart { +						sirf,pins = "uart1grp"; +						sirf,function = "uart1"; +					}; +				}; +				uart2_pins_a: uart2@0 { +					uart { +						sirf,pins = "uart2grp"; +						sirf,function = "uart2"; +					}; +				}; +				uart2_noflow_pins_a: uart2@1 { +					uart { +						sirf,pins = "uart2_nostreamctrlgrp"; +						sirf,function = "uart2_nostreamctrl"; +					}; +				}; +				spi0_pins_a: spi0@0 { +					spi { +						sirf,pins = "spi0grp"; +						sirf,function = "spi0"; +					}; +				}; +				spi1_pins_a: spi1@0 { +					spi { +						sirf,pins = "spi1grp"; +						sirf,function = "spi1"; +					}; +				}; +				i2c0_pins_a: i2c0@0 { +					i2c { +						sirf,pins = "i2c0grp"; +						sirf,function = "i2c0"; +					}; +				}; +				i2c1_pins_a: i2c1@0 { +					i2c { +						sirf,pins = "i2c1grp"; +						sirf,function = "i2c1"; +					}; +				}; +                                pwm0_pins_a: pwm0@0 { +                                        pwm { +                                                sirf,pins = "pwm0grp"; +                                                sirf,function = "pwm0"; +                                        }; +                                }; +                                pwm1_pins_a: pwm1@0 { +                                        pwm { +                                                sirf,pins = "pwm1grp"; +                                                sirf,function = "pwm1"; +                                        }; +                                }; +                                pwm2_pins_a: pwm2@0 { +                                        pwm { +                                                sirf,pins = "pwm2grp"; +                                                sirf,function = "pwm2"; +                                        }; +                                }; +                                pwm3_pins_a: pwm3@0 { +                                        pwm { +                                                sirf,pins = "pwm3grp"; +                                                sirf,function = "pwm3"; +                                        }; +                                }; +				pwm4_pins_a: pwm4@0 { +                                        pwm { +                                                sirf,pins = "pwm4grp"; +                                                sirf,function = "pwm4"; +                                        }; +                                }; +                                gps_pins_a: gps@0 { +                                        gps { +                                                sirf,pins = "gpsgrp"; +                                                sirf,function = "gps"; +                                        }; +                                }; +                                vip_pins_a: vip@0 { +                                        vip { +                                                sirf,pins = "vipgrp"; +                                                sirf,function = "vip"; +                                        }; +                                }; +                                sdmmc0_pins_a: sdmmc0@0 { +                                        sdmmc0 { +                                                sirf,pins = "sdmmc0grp"; +                                                sirf,function = "sdmmc0"; +                                        }; +                                }; +                                sdmmc1_pins_a: sdmmc1@0 { +                                        sdmmc1 { +                                                sirf,pins = "sdmmc1grp"; +                                                sirf,function = "sdmmc1"; +                                        }; +                                }; +                                sdmmc2_pins_a: sdmmc2@0 { +                                        sdmmc2 { +                                                sirf,pins = "sdmmc2grp"; +                                                sirf,function = "sdmmc2"; +                                        }; +                                }; +				sdmmc2_nowp_pins_a: sdmmc2_nowp@0 { +                                        sdmmc2_nowp { +                                                sirf,pins = "sdmmc2_nowpgrp"; +                                                sirf,function = "sdmmc2_nowp"; +                                        }; +                                }; +                                sdmmc3_pins_a: sdmmc3@0 { +                                        sdmmc3 { +                                                sirf,pins = "sdmmc3grp"; +                                                sirf,function = "sdmmc3"; +                                        }; +                                }; +                                sdmmc5_pins_a: sdmmc5@0 { +                                        sdmmc5 { +                                                sirf,pins = "sdmmc5grp"; +                                                sirf,function = "sdmmc5"; +                                        }; +                                }; +                                i2s_pins_a: i2s@0 { +                                        i2s { +                                                sirf,pins = "i2sgrp"; +                                                sirf,function = "i2s"; +                                        }; +                                }; +				i2s_no_din_pins_a: i2s_no_din@0 { +                                        i2s_no_din { +                                                sirf,pins = "i2s_no_dingrp"; +                                                sirf,function = "i2s_no_din"; +                                        }; +                                }; +				i2s_6chn_pins_a: i2s_6chn@0 { +                                        i2s_6chn { +                                                sirf,pins = "i2s_6chngrp"; +                                                sirf,function = "i2s_6chn"; +                                        }; +                                }; +                                ac97_pins_a: ac97@0 { +                                        ac97 { +                                                sirf,pins = "ac97grp"; +                                                sirf,function = "ac97"; +                                        }; +                                }; +                                nand_pins_a: nand@0 { +                                        nand { +                                                sirf,pins = "nandgrp"; +                                                sirf,function = "nand"; +                                        }; +                                }; +                                usp0_pins_a: usp0@0 { +                                        usp0 { +                                                sirf,pins = "usp0grp"; +                                                sirf,function = "usp0"; +                                        }; +                                }; +                                usp1_pins_a: usp1@0 { +                                        usp1 { +                                                sirf,pins = "usp1grp"; +                                                sirf,function = "usp1"; +                                        }; +                                }; +                                usb0_upli_drvbus_pins_a: usb0_upli_drvbus@0 { +                                        usb0_upli_drvbus { +                                                sirf,pins = "usb0_upli_drvbusgrp"; +                                                sirf,function = "usb0_upli_drvbus"; +                                        }; +                                }; +                                usb1_utmi_drvbus_pins_a: usb1_utmi_drvbus@0 { +                                        usb1_utmi_drvbus { +                                                sirf,pins = "usb1_utmi_drvbusgrp"; +                                                sirf,function = "usb1_utmi_drvbus"; +                                        }; +                                }; +                                warm_rst_pins_a: warm_rst@0 { +                                        warm_rst { +                                                sirf,pins = "warm_rstgrp"; +                                                sirf,function = "warm_rst"; +                                        }; +                                }; +                                pulse_count_pins_a: pulse_count@0 { +                                        pulse_count { +                                                sirf,pins = "pulse_countgrp"; +                                                sirf,function = "pulse_count"; +                                        }; +                                }; +                                cko0_rst_pins_a: cko0_rst@0 { +                                        cko0_rst { +                                                sirf,pins = "cko0_rstgrp"; +                                                sirf,function = "cko0_rst"; +                                        }; +                                }; +                                cko1_rst_pins_a: cko1_rst@0 { +                                        cko1_rst { +                                                sirf,pins = "cko1_rstgrp"; +                                                sirf,function = "cko1_rst"; +                                        }; +                                }; +			}; + +			pwm@b0130000 { +				compatible = "sirf,prima2-pwm"; +				reg = <0xb0130000 0x10000>; +				clocks = <&clks 21>; +			}; + +			efusesys@b0140000 { +				compatible = "sirf,prima2-efuse"; +				reg = <0xb0140000 0x10000>; +				clocks = <&clks 22>; +			}; + +			pulsec@b0150000 { +				compatible = "sirf,prima2-pulsec"; +				reg = <0xb0150000 0x10000>; +				interrupts = <48>; +				clocks = <&clks 23>; +			}; + +			pci-iobg { +				compatible = "sirf,prima2-pciiobg", "simple-bus"; +				#address-cells = <1>; +				#size-cells = <1>; +				ranges = <0x56000000 0x56000000 0x1b00000>; + +				sd0: sdhci@56000000 { +					cell-index = <0>; +					compatible = "sirf,prima2-sdhc"; +					reg = <0x56000000 0x100000>; +					interrupts = <38>; +					bus-width = <8>; +					clocks = <&clks 36>; +				}; + +				sd1: sdhci@56100000 { +					cell-index = <1>; +					compatible = "sirf,prima2-sdhc"; +					reg = <0x56100000 0x100000>; +					interrupts = <38>; +					status = "disabled"; +					clocks = <&clks 36>; +				}; + +				sd2: sdhci@56200000 { +					cell-index = <2>; +					compatible = "sirf,prima2-sdhc"; +					reg = <0x56200000 0x100000>; +					interrupts = <23>; +					status = "disabled"; +					clocks = <&clks 37>; +				}; + +				sd3: sdhci@56300000 { +					cell-index = <3>; +					compatible = "sirf,prima2-sdhc"; +					reg = <0x56300000 0x100000>; +					interrupts = <23>; +					status = "disabled"; +					clocks = <&clks 37>; +				}; + +				sd5: sdhci@56500000 { +					cell-index = <5>; +					compatible = "sirf,prima2-sdhc"; +					reg = <0x56500000 0x100000>; +					interrupts = <39>; +					status = "disabled"; +					clocks = <&clks 38>; +				}; + +				pci-copy@57900000 { +					compatible = "sirf,prima2-pcicp"; +					reg = <0x57900000 0x100000>; +					interrupts = <40>; +				}; + +				rom-interface@57a00000 { +					compatible = "sirf,prima2-romif"; +					reg = <0x57a00000 0x100000>; +				}; +			}; +		}; + +		rtc-iobg { +			compatible = "sirf,prima2-rtciobg", "sirf-prima2-rtciobg-bus"; +			#address-cells = <1>; +			#size-cells = <1>; +			reg = <0x80030000 0x10000>; + +			gpsrtc@1000 { +				compatible = "sirf,prima2-gpsrtc"; +				reg = <0x1000 0x1000>; +				interrupts = <55 56 57>; +			}; + +			sysrtc@2000 { +				compatible = "sirf,prima2-sysrtc"; +				reg = <0x2000 0x1000>; +				interrupts = <52 53 54>; +			}; + +			pwrc@3000 { +				compatible = "sirf,prima2-pwrc"; +				reg = <0x3000 0x1000>; +				interrupts = <32>; +			}; +		}; + +		uus-iobg { +			compatible = "simple-bus"; +			#address-cells = <1>; +			#size-cells = <1>; +			ranges = <0xb8000000 0xb8000000 0x40000>; + +			usb0: usb@b00e0000 { +				compatible = "chipidea,ci13611a-prima2"; +				reg = <0xb8000000 0x10000>; +				interrupts = <10>; +				clocks = <&clks 40>; +			}; + +			usb1: usb@b00f0000 { +				compatible = "chipidea,ci13611a-prima2"; +				reg = <0xb8010000 0x10000>; +				interrupts = <11>; +				clocks = <&clks 41>; +			}; + +			security@b00f0000 { +				compatible = "sirf,prima2-security"; +				reg = <0xb8030000 0x10000>; +				interrupts = <42>; +				clocks = <&clks 7>; +			}; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/bcm11351.dtsi b/arch/arm/boot/dts/bcm11351.dtsi index ad135885bd2..8f71f40722b 100644 --- a/arch/arm/boot/dts/bcm11351.dtsi +++ b/arch/arm/boot/dts/bcm11351.dtsi @@ -47,4 +47,12 @@  		    cache-unified;  		    cache-level = <2>;  	}; + +	timer@35006000 { +		compatible = "bcm,kona-timer"; +		reg = <0x35006000 0x1000>; +		interrupts = <0x0 7 0x4>; +		clock-frequency = <32768>; +	}; +  }; diff --git a/arch/arm/boot/dts/bcm2835.dtsi b/arch/arm/boot/dts/bcm2835.dtsi index 7e0481e2441..f0052dccf9a 100644 --- a/arch/arm/boot/dts/bcm2835.dtsi +++ b/arch/arm/boot/dts/bcm2835.dtsi @@ -34,6 +34,11 @@  			reg = <0x7e100000 0x28>;  		}; +		rng { +			compatible = "brcm,bcm2835-rng"; +			reg = <0x7e104000 0x10>; +		}; +  		uart@20201000 {  			compatible = "brcm,bcm2835-pl011", "arm,pl011", "arm,primecell";  			reg = <0x7e201000 0x1000>; @@ -64,6 +69,16 @@  			#interrupt-cells = <2>;  		}; +		spi: spi@20204000 { +			compatible = "brcm,bcm2835-spi"; +			reg = <0x7e204000 0x1000>; +			interrupts = <2 22>; +			clocks = <&clk_spi>; +			#address-cells = <1>; +			#size-cells = <0>; +			status = "disabled"; +		}; +  		i2c0: i2c@20205000 {  			compatible = "brcm,bcm2835-i2c";  			reg = <0x7e205000 0x1000>; @@ -107,5 +122,12 @@  			#clock-cells = <0>;  			clock-frequency = <250000000>;  		}; + +		clk_spi: spi { +			compatible = "fixed-clock"; +			reg = <2>; +			#clock-cells = <0>; +			clock-frequency = <250000000>; +		};  	};  }; diff --git a/arch/arm/boot/dts/da850-evm.dts b/arch/arm/boot/dts/da850-evm.dts index f712fb607a4..c5834a6c5bf 100644 --- a/arch/arm/boot/dts/da850-evm.dts +++ b/arch/arm/boot/dts/da850-evm.dts @@ -35,14 +35,84 @@  			clock-frequency = <100000>;  			pinctrl-names = "default";  			pinctrl-0 = <&i2c0_pins>; + +			tps: tps@48 { +				reg = <0x48>; +			};  		};  		wdt: wdt@1c21000 {  			status = "okay";  		}; +		mmc0: mmc@1c40000 { +			max-frequency = <50000000>; +			bus-width = <4>; +			status = "okay"; +			pinctrl-names = "default"; +			pinctrl-0 = <&mmc0_pins>; +		};  	};  	nand_cs3@62000000 {  		status = "okay";  		pinctrl-names = "default";  		pinctrl-0 = <&nand_cs3_pins>;  	}; +	vbat: fixedregulator@0 { +		compatible = "regulator-fixed"; +		regulator-name = "vbat"; +		regulator-min-microvolt = <5000000>; +		regulator-max-microvolt = <5000000>; +		regulator-boot-on; +	}; +}; + +/include/ "tps6507x.dtsi" + +&tps { +	vdcdc1_2-supply = <&vbat>; +	vdcdc3-supply = <&vbat>; +	vldo1_2-supply = <&vbat>; + +	regulators { +		vdcdc1_reg: regulator@0 { +			regulator-name = "VDCDC1_3.3V"; +			regulator-min-microvolt = <3150000>; +			regulator-max-microvolt = <3450000>; +			regulator-always-on; +			regulator-boot-on; +		}; + +		vdcdc2_reg: regulator@1 { +			regulator-name = "VDCDC2_3.3V"; +			regulator-min-microvolt = <1710000>; +			regulator-max-microvolt = <3450000>; +			regulator-always-on; +			regulator-boot-on; +			ti,defdcdc_default = <1>; +		}; + +		vdcdc3_reg: regulator@2 { +			regulator-name = "VDCDC3_1.2V"; +			regulator-min-microvolt = <950000>; +			regulator-max-microvolt = <1350000>; +			regulator-always-on; +			regulator-boot-on; +			ti,defdcdc_default = <1>; +		}; + +		ldo1_reg: regulator@3 { +			regulator-name = "LDO1_1.8V"; +			regulator-min-microvolt = <1710000>; +			regulator-max-microvolt = <1890000>; +			regulator-always-on; +			regulator-boot-on; +		}; + +		ldo2_reg: regulator@4 { +			regulator-name = "LDO2_1.2V"; +			regulator-min-microvolt = <1140000>; +			regulator-max-microvolt = <1320000>; +			regulator-always-on; +			regulator-boot-on; +		}; +	};  }; diff --git a/arch/arm/boot/dts/da850.dtsi b/arch/arm/boot/dts/da850.dtsi index 3ec1bda6435..3ade343f13c 100644 --- a/arch/arm/boot/dts/da850.dtsi +++ b/arch/arm/boot/dts/da850.dtsi @@ -62,6 +62,15 @@  					0x10 0x00002200 0x0000ff00  				>;  			}; +			mmc0_pins: pinmux_mmc_pins { +				pinctrl-single,bits = < +					/* MMCSD0_DAT[3] MMCSD0_DAT[2] +					 * MMCSD0_DAT[1] MMCSD0_DAT[0] +					 * MMCSD0_CMD    MMCSD0_CLK +					 */ +					0x28 0x00222222  0x00ffffff +				>; +			};  		};  		serial0: serial@1c42000 {  			compatible = "ns16550a"; @@ -107,6 +116,12 @@  			reg = <0x21000 0x1000>;  			status = "disabled";  		}; +		mmc0: mmc@1c40000 { +			compatible = "ti,da830-mmc"; +			reg = <0x40000 0x1000>; +			interrupts = <16>; +			status = "disabled"; +		};  	};  	nand_cs3@62000000 {  		compatible = "ti,davinci-nand"; diff --git a/arch/arm/boot/dts/dbx5x0.dtsi b/arch/arm/boot/dts/dbx5x0.dtsi index 9de93096601..b6bc4ff17f2 100644 --- a/arch/arm/boot/dts/dbx5x0.dtsi +++ b/arch/arm/boot/dts/dbx5x0.dtsi @@ -191,8 +191,8 @@  		prcmu: prcmu@80157000 {  			compatible = "stericsson,db8500-prcmu"; -			reg = <0x80157000 0x1000>; -			reg-names = "prcmu"; +			reg = <0x80157000 0x2000>, <0x801b0000 0x8000>, <0x801b8000 0x1000>; +			reg-names = "prcmu", "prcmu-tcpm", "prcmu-tcdm";  			interrupts = <0 47 0x4>;  			#address-cells = <1>;  			#size-cells = <1>; @@ -674,10 +674,13 @@  			compatible = "regulator-gpio";  			regulator-min-microvolt = <1800000>; -			regulator-max-microvolt = <2600000>; +			regulator-max-microvolt = <2900000>;  			regulator-name = "mmci-reg";  			regulator-type = "voltage"; +			startup-delay-us = <100>; +			enable-active-high; +  			states = <1800000 0x1  				  2900000 0x0>; diff --git a/arch/arm/boot/dts/dove.dtsi b/arch/arm/boot/dts/dove.dtsi index f7509cafc37..6cab46849cd 100644 --- a/arch/arm/boot/dts/dove.dtsi +++ b/arch/arm/boot/dts/dove.dtsi @@ -50,6 +50,11 @@  			#clock-cells = <1>;  		}; +		thermal: thermal@d001c { +			compatible = "marvell,dove-thermal"; +			reg = <0xd001c 0x0c>, <0xd005c 0x08>; +		}; +  		uart0: serial@12000 {  			compatible = "ns16550a";  			reg = <0x12000 0x100>; diff --git a/arch/arm/boot/dts/href.dtsi b/arch/arm/boot/dts/href.dtsi index 379128eb9d9..c0bc426952e 100644 --- a/arch/arm/boot/dts/href.dtsi +++ b/arch/arm/boot/dts/href.dtsi @@ -87,6 +87,7 @@  			mmc-cap-sd-highspeed;  			mmc-cap-mmc-highspeed;  			vmmc-supply = <&ab8500_ldo_aux3_reg>; +			vqmmc-supply = <&vmmci>;  			cd-gpios  = <&tc3589x_gpio 3 0x4>; diff --git a/arch/arm/boot/dts/hrefprev60.dts b/arch/arm/boot/dts/hrefprev60.dts index eec29c4a86d..c2d27481592 100644 --- a/arch/arm/boot/dts/hrefprev60.dts +++ b/arch/arm/boot/dts/hrefprev60.dts @@ -25,6 +25,14 @@  	};  	soc-u9500 { +		prcmu@80157000 { +			ab8500@5 { +				ab8500-gpio { +					compatible = "stericsson,ab8500-gpio"; +				}; +			}; +		}; +  		i2c@80004000 {  			tps61052@33 {  				compatible = "tps61052"; @@ -40,7 +48,7 @@  		vmmci: regulator-gpio {  			gpios = <&tc3589x_gpio 18 0x4>; -			gpio-enable = <&tc3589x_gpio 17 0x4>; +			enable-gpio = <&tc3589x_gpio 17 0x4>;  			status = "okay";  		}; diff --git a/arch/arm/boot/dts/imx23.dtsi b/arch/arm/boot/dts/imx23.dtsi index 56afcf41aae..ad2d79324cd 100644 --- a/arch/arm/boot/dts/imx23.dtsi +++ b/arch/arm/boot/dts/imx23.dtsi @@ -295,6 +295,7 @@  			};  			digctl@8001c000 { +				compatible = "fsl,imx23-digctl";  				reg = <0x8001c000 2000>;  				status = "disabled";  			}; @@ -321,6 +322,7 @@  			};  			ocotp@8002c000 { +				compatible = "fsl,ocotp";  				reg = <0x8002c000 0x2000>;  				status = "disabled";  			}; @@ -360,7 +362,7 @@  			ranges;  			clks: clkctrl@80040000 { -				compatible = "fsl,imx23-clkctrl"; +				compatible = "fsl,imx23-clkctrl", "fsl,clkctrl";  				reg = <0x80040000 0x2000>;  				#clock-cells = <1>;  			}; @@ -426,6 +428,7 @@  				compatible = "fsl,imx23-timrot", "fsl,timrot";  				reg = <0x80068000 0x2000>;  				interrupts = <28 29 30 31>; +				clocks = <&clks 28>;  			};  			auart0: serial@8006c000 { diff --git a/arch/arm/boot/dts/imx25-karo-tx25.dts b/arch/arm/boot/dts/imx25-karo-tx25.dts index 1a9d0491cdc..f8db366c46f 100644 --- a/arch/arm/boot/dts/imx25-karo-tx25.dts +++ b/arch/arm/boot/dts/imx25-karo-tx25.dts @@ -10,7 +10,7 @@   */  /dts-v1/; -/include/ "imx25.dtsi" +#include "imx25.dtsi"  / {  	model = "Ka-Ro TX25"; diff --git a/arch/arm/boot/dts/imx25-pdk.dts b/arch/arm/boot/dts/imx25-pdk.dts index a02a860afd1..f607ce520ed 100644 --- a/arch/arm/boot/dts/imx25-pdk.dts +++ b/arch/arm/boot/dts/imx25-pdk.dts @@ -10,7 +10,7 @@   */  /dts-v1/; -/include/ "imx25.dtsi" +#include "imx25.dtsi"  / {  	model = "Freescale i.MX25 Product Development Kit"; diff --git a/arch/arm/boot/dts/imx25.dtsi b/arch/arm/boot/dts/imx25.dtsi index 94f33059158..d2550e0bca2 100644 --- a/arch/arm/boot/dts/imx25.dtsi +++ b/arch/arm/boot/dts/imx25.dtsi @@ -9,7 +9,7 @@   * http://www.gnu.org/copyleft/gpl.html   */ -/include/ "skeleton.dtsi" +#include "skeleton.dtsi"  / {  	aliases { diff --git a/arch/arm/boot/dts/imx27-apf27.dts b/arch/arm/boot/dts/imx27-apf27.dts index b464c807d8d..ba4c6df08ec 100644 --- a/arch/arm/boot/dts/imx27-apf27.dts +++ b/arch/arm/boot/dts/imx27-apf27.dts @@ -13,7 +13,7 @@   */  /dts-v1/; -/include/ "imx27.dtsi" +#include "imx27.dtsi"  / {  	model = "Armadeus Systems APF27 module"; diff --git a/arch/arm/boot/dts/imx27-apf27dev.dts b/arch/arm/boot/dts/imx27-apf27dev.dts new file mode 100644 index 00000000000..66b8e1c1b0b --- /dev/null +++ b/arch/arm/boot/dts/imx27-apf27dev.dts @@ -0,0 +1,60 @@ +/* + * Copyright 2013 Armadeus Systems - <support@armadeus.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 + */ + +/* APF27Dev is a docking board for the APF27 SOM */ +#include "imx27-apf27.dts" + +/ { +	model = "Armadeus Systems APF27Dev docking/development board"; +	compatible = "armadeus,imx27-apf27dev", "armadeus,imx27-apf27", "fsl,imx27"; + +	gpio-keys { +		compatible = "gpio-keys"; + +		user-key { +			label = "user"; +			gpios = <&gpio6 13 0>; +			linux,code = <276>; /* BTN_EXTRA */ +		}; +	}; + +	leds { +		compatible = "gpio-leds"; + +		user { +			label = "Heartbeat"; +			gpios = <&gpio6 14 0>; +			linux,default-trigger = "heartbeat"; +		}; +	}; +}; + +&cspi1 { +	fsl,spi-num-chipselects = <1>; +	cs-gpios = <&gpio4 28 1>; +	status = "okay"; +}; + +&cspi2 { +	fsl,spi-num-chipselects = <3>; +	cs-gpios = <&gpio4 21 1>, <&gpio4 27 1>, +			<&gpio2 17 1>; +	status = "okay"; +}; + +&i2c1 { +	clock-frequency = <400000>; +	status = "okay"; +}; + +&i2c2 { +	status = "okay"; +}; diff --git a/arch/arm/boot/dts/imx27-pdk.dts b/arch/arm/boot/dts/imx27-pdk.dts index 41cd1105608..5ce89aa275d 100644 --- a/arch/arm/boot/dts/imx27-pdk.dts +++ b/arch/arm/boot/dts/imx27-pdk.dts @@ -10,7 +10,7 @@   */  /dts-v1/; -/include/ "imx27.dtsi" +#include "imx27.dtsi"  / {  	model = "Freescale i.MX27 Product Development Kit"; diff --git a/arch/arm/boot/dts/imx27-phytec-phycore.dts b/arch/arm/boot/dts/imx27-phytec-phycore.dts index 53b0ec0c228..fe64e3a91df 100644 --- a/arch/arm/boot/dts/imx27-phytec-phycore.dts +++ b/arch/arm/boot/dts/imx27-phytec-phycore.dts @@ -10,7 +10,7 @@   */  /dts-v1/; -/include/ "imx27.dtsi" +#include "imx27.dtsi"  / {  	model = "Phytec pcm038"; @@ -71,3 +71,9 @@  		#size-cells = <1>;  	};  }; + +&nfc { +	nand-bus-width = <8>; +	nand-ecc-mode = "hw"; +	status = "okay"; +}; diff --git a/arch/arm/boot/dts/imx27.dtsi b/arch/arm/boot/dts/imx27.dtsi index 5a82cb5707a..ff4bd4873ed 100644 --- a/arch/arm/boot/dts/imx27.dtsi +++ b/arch/arm/boot/dts/imx27.dtsi @@ -9,7 +9,7 @@   * http://www.gnu.org/copyleft/gpl.html   */ -/include/ "skeleton.dtsi" +#include "skeleton.dtsi"  / {  	aliases { @@ -60,14 +60,41 @@  			wdog: wdog@10002000 {  				compatible = "fsl,imx27-wdt", "fsl,imx21-wdt"; -				reg = <0x10002000 0x4000>; +				reg = <0x10002000 0x1000>;  				interrupts = <27>; +				clocks = <&clks 0>; +			}; + +			gpt1: timer@10003000 { +				compatible = "fsl,imx27-gpt", "fsl,imx1-gpt"; +				reg = <0x10003000 0x1000>; +				interrupts = <26>; +				clocks = <&clks 46>, <&clks 61>; +				clock-names = "ipg", "per"; +			}; + +			gpt2: timer@10004000 { +				compatible = "fsl,imx27-gpt", "fsl,imx1-gpt"; +				reg = <0x10004000 0x1000>; +				interrupts = <25>; +				clocks = <&clks 45>, <&clks 61>; +				clock-names = "ipg", "per"; +			}; + +			gpt3: timer@10005000 { +				compatible = "fsl,imx27-gpt", "fsl,imx1-gpt"; +				reg = <0x10005000 0x1000>; +				interrupts = <24>; +				clocks = <&clks 44>, <&clks 61>; +				clock-names = "ipg", "per";  			};  			uart1: serial@1000a000 {  				compatible = "fsl,imx27-uart", "fsl,imx21-uart";  				reg = <0x1000a000 0x1000>;  				interrupts = <20>; +				clocks = <&clks 81>, <&clks 61>; +				clock-names = "ipg", "per";  				status = "disabled";  			}; @@ -75,6 +102,8 @@  				compatible = "fsl,imx27-uart", "fsl,imx21-uart";  				reg = <0x1000b000 0x1000>;  				interrupts = <19>; +				clocks = <&clks 80>, <&clks 61>; +				clock-names = "ipg", "per";  				status = "disabled";  			}; @@ -82,6 +111,8 @@  				compatible = "fsl,imx27-uart", "fsl,imx21-uart";  				reg = <0x1000c000 0x1000>;  				interrupts = <18>; +				clocks = <&clks 79>, <&clks 61>; +				clock-names = "ipg", "per";  				status = "disabled";  			}; @@ -89,6 +120,8 @@  				compatible = "fsl,imx27-uart", "fsl,imx21-uart";  				reg = <0x1000d000 0x1000>;  				interrupts = <17>; +				clocks = <&clks 78>, <&clks 61>; +				clock-names = "ipg", "per";  				status = "disabled";  			}; @@ -98,6 +131,8 @@  				compatible = "fsl,imx27-cspi";  				reg = <0x1000e000 0x1000>;  				interrupts = <16>; +				clocks = <&clks 53>, <&clks 0>; +				clock-names = "ipg", "per";  				status = "disabled";  			}; @@ -107,6 +142,8 @@  				compatible = "fsl,imx27-cspi";  				reg = <0x1000f000 0x1000>;  				interrupts = <15>; +				clocks = <&clks 52>, <&clks 0>; +				clock-names = "ipg", "per";  				status = "disabled";  			}; @@ -116,6 +153,7 @@  				compatible = "fsl,imx27-i2c", "fsl,imx21-i2c";  				reg = <0x10012000 0x1000>;  				interrupts = <12>; +				clocks = <&clks 40>;  				status = "disabled";  			}; @@ -185,13 +223,33 @@  				compatible = "fsl,imx27-cspi";  				reg = <0x10017000 0x1000>;  				interrupts = <6>; +				clocks = <&clks 51>, <&clks 0>; +				clock-names = "ipg", "per";  				status = "disabled";  			}; +			gpt4: timer@10019000 { +				compatible = "fsl,imx27-gpt", "fsl,imx1-gpt"; +				reg = <0x10019000 0x1000>; +				interrupts = <4>; +				clocks = <&clks 43>, <&clks 61>; +				clock-names = "ipg", "per"; +			}; + +			gpt5: timer@1001a000 { +				compatible = "fsl,imx27-gpt", "fsl,imx1-gpt"; +				reg = <0x1001a000 0x1000>; +				interrupts = <3>; +				clocks = <&clks 42>, <&clks 61>; +				clock-names = "ipg", "per"; +			}; +  			uart5: serial@1001b000 {  				compatible = "fsl,imx27-uart", "fsl,imx21-uart";  				reg = <0x1001b000 0x1000>;  				interrupts = <49>; +				clocks = <&clks 77>, <&clks 61>; +				clock-names = "ipg", "per";  				status = "disabled";  			}; @@ -199,6 +257,8 @@  				compatible = "fsl,imx27-uart", "fsl,imx21-uart";  				reg = <0x1001c000 0x1000>;  				interrupts = <48>; +				clocks = <&clks 78>, <&clks 61>; +				clock-names = "ipg", "per";  				status = "disabled";  			}; @@ -208,9 +268,17 @@  				compatible = "fsl,imx27-i2c", "fsl,imx21-i2c";  				reg = <0x1001d000 0x1000>;  				interrupts = <1>; +				clocks = <&clks 39>;  				status = "disabled";  			}; +			gpt6: timer@1001f000 { +				compatible = "fsl,imx27-gpt", "fsl,imx1-gpt"; +				reg = <0x1001f000 0x1000>; +				interrupts = <2>; +				clocks = <&clks 41>, <&clks 61>; +				clock-names = "ipg", "per"; +			};  		};  		aipi@10020000 { /* AIPI2 */ @@ -224,10 +292,19 @@  				compatible = "fsl,imx27-fec";  				reg = <0x1002b000 0x4000>;  				interrupts = <50>; +				clocks = <&clks 48>, <&clks 67>, <&clks 0>; +				clock-names = "ipg", "ahb", "ptp";  				status = "disabled";  			}; + +			clks: ccm@10027000{ +				compatible = "fsl,imx27-ccm"; +				reg = <0x10027000 0x1000>; +				#clock-cells = <1>; +			};  		}; +  		nfc: nand@d8000000 {  			#address-cells = <1>;  			#size-cells = <1>; @@ -235,6 +312,7 @@  			compatible = "fsl,imx27-nand";  			reg = <0xd8000000 0x1000>;  			interrupts = <29>; +			clocks = <&clks 54>;  			status = "disabled";  		};  	}; diff --git a/arch/arm/boot/dts/imx28-m28evk.dts b/arch/arm/boot/dts/imx28-m28evk.dts index 6ce3d17c3a2..fd36e1cca10 100644 --- a/arch/arm/boot/dts/imx28-m28evk.dts +++ b/arch/arm/boot/dts/imx28-m28evk.dts @@ -152,7 +152,6 @@  			i2c0: i2c@80058000 {  				pinctrl-names = "default";  				pinctrl-0 = <&i2c0_pins_a>; -				clock-frequency = <400000>;  				status = "okay";  				sgtl5000: codec@0a { diff --git a/arch/arm/boot/dts/imx28-sps1.dts b/arch/arm/boot/dts/imx28-sps1.dts index e6cde8aa7ff..6c6a5442800 100644 --- a/arch/arm/boot/dts/imx28-sps1.dts +++ b/arch/arm/boot/dts/imx28-sps1.dts @@ -70,7 +70,6 @@  			i2c0: i2c@80058000 {  				pinctrl-names = "default";  				pinctrl-0 = <&i2c0_pins_a>; -				clock-frequency = <400000>;  				status = "okay";  				rtc: rtc@51 { diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi index 7ba49662b9b..64af2381c1b 100644 --- a/arch/arm/boot/dts/imx28.dtsi +++ b/arch/arm/boot/dts/imx28.dtsi @@ -647,6 +647,7 @@  			};  			digctl@8001c000 { +				compatible = "fsl,imx28-digctl";  				reg = <0x8001c000 0x2000>;  				interrupts = <89>;  				status = "disabled"; @@ -676,6 +677,7 @@  			};  			ocotp@8002c000 { +				compatible = "fsl,ocotp";  				reg = <0x8002c000 0x2000>;  				status = "disabled";  			}; @@ -755,7 +757,7 @@  			ranges;  			clks: clkctrl@80040000 { -				compatible = "fsl,imx28-clkctrl"; +				compatible = "fsl,imx28-clkctrl", "fsl,clkctrl";  				reg = <0x80040000 0x2000>;  				#clock-cells = <1>;  			}; @@ -838,6 +840,7 @@  				compatible = "fsl,imx28-timrot", "fsl,timrot";  				reg = <0x80068000 0x2000>;  				interrupts = <48 49 50 51>; +				clocks = <&clks 26>;  			};  			auart0: serial@8006a000 { diff --git a/arch/arm/boot/dts/imx31-bug.dts b/arch/arm/boot/dts/imx31-bug.dts index 9ac6f6ba1d6..2424abfc9c7 100644 --- a/arch/arm/boot/dts/imx31-bug.dts +++ b/arch/arm/boot/dts/imx31-bug.dts @@ -10,7 +10,7 @@   */  /dts-v1/; -/include/ "imx31.dtsi" +#include "imx31.dtsi"  / {  	model = "Buglabs i.MX31 Bug 1.x"; diff --git a/arch/arm/boot/dts/imx31.dtsi b/arch/arm/boot/dts/imx31.dtsi index 454c2d17540..c5449257ad9 100644 --- a/arch/arm/boot/dts/imx31.dtsi +++ b/arch/arm/boot/dts/imx31.dtsi @@ -9,7 +9,7 @@   * http://www.gnu.org/copyleft/gpl.html   */ -/include/ "skeleton.dtsi" +#include "skeleton.dtsi"  / {  	aliases { @@ -101,5 +101,21 @@  				#clock-cells = <1>;  			};  		}; + +		aips@53f00000 { /* AIPS2 */ +			compatible = "fsl,aips-bus", "simple-bus"; +			#address-cells = <1>; +			#size-cells = <1>; +			reg = <0x53f00000 0x100000>; +			ranges; + +			gpt: timer@53f90000 { +				compatible = "fsl,imx31-gpt"; +				reg = <0x53f90000 0x4000>; +				interrupts = <29>; +				clocks = <&clks 10>, <&clks 22>; +				clock-names = "ipg", "per"; +			}; +		};  	};  }; diff --git a/arch/arm/boot/dts/imx35-pinfunc.h b/arch/arm/boot/dts/imx35-pinfunc.h new file mode 100644 index 00000000000..4911f2c405f --- /dev/null +++ b/arch/arm/boot/dts/imx35-pinfunc.h @@ -0,0 +1,970 @@ +/* + * Copyright 2013 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. + * + */ + +#ifndef __DTS_IMX35_PINFUNC_H +#define __DTS_IMX35_PINFUNC_H + +/* + * The pin function ID is a tuple of + * <mux_reg conf_reg input_reg mux_mode input_val> + */ +#define MX35_PAD_CAPTURE__GPT_CAPIN1				0x004 0x328 0x000 0x0 0x0 +#define MX35_PAD_CAPTURE__GPT_CMPOUT2				0x004 0x328 0x000 0x1 0x0 +#define MX35_PAD_CAPTURE__CSPI2_SS1				0x004 0x328 0x7f4 0x2 0x0 +#define MX35_PAD_CAPTURE__EPIT1_EPITO				0x004 0x328 0x000 0x3 0x0 +#define MX35_PAD_CAPTURE__CCM_CLK32K				0x004 0x328 0x7d0 0x4 0x0 +#define MX35_PAD_CAPTURE__GPIO1_4				0x004 0x328 0x850 0x5 0x0 +#define MX35_PAD_COMPARE__GPT_CMPOUT1				0x008 0x32c 0x000 0x0 0x0 +#define MX35_PAD_COMPARE__GPT_CAPIN2				0x008 0x32c 0x000 0x1 0x0 +#define MX35_PAD_COMPARE__GPT_CMPOUT3				0x008 0x32c 0x000 0x2 0x0 +#define MX35_PAD_COMPARE__EPIT2_EPITO				0x008 0x32c 0x000 0x3 0x0 +#define MX35_PAD_COMPARE__GPIO1_5				0x008 0x32c 0x854 0x5 0x0 +#define MX35_PAD_COMPARE__SDMA_EXTDMA_2				0x008 0x32c 0x000 0x7 0x0 +#define MX35_PAD_WDOG_RST__WDOG_WDOG_B				0x00c 0x330 0x000 0x0 0x0 +#define MX35_PAD_WDOG_RST__IPU_FLASH_STROBE			0x00c 0x330 0x000 0x3 0x0 +#define MX35_PAD_WDOG_RST__GPIO1_6				0x00c 0x330 0x858 0x5 0x0 +#define MX35_PAD_GPIO1_0__GPIO1_0				0x010 0x334 0x82c 0x0 0x0 +#define MX35_PAD_GPIO1_0__CCM_PMIC_RDY				0x010 0x334 0x7d4 0x1 0x0 +#define MX35_PAD_GPIO1_0__OWIRE_LINE				0x010 0x334 0x990 0x2 0x0 +#define MX35_PAD_GPIO1_0__SDMA_EXTDMA_0				0x010 0x334 0x000 0x7 0x0 +#define MX35_PAD_GPIO1_1__GPIO1_1				0x014 0x338 0x838 0x0 0x0 +#define MX35_PAD_GPIO1_1__PWM_PWMO				0x014 0x338 0x000 0x2 0x0 +#define MX35_PAD_GPIO1_1__CSPI1_SS2				0x014 0x338 0x7d8 0x3 0x0 +#define MX35_PAD_GPIO1_1__SCC_TAMPER_DETECT			0x014 0x338 0x000 0x6 0x0 +#define MX35_PAD_GPIO1_1__SDMA_EXTDMA_1				0x014 0x338 0x000 0x7 0x0 +#define MX35_PAD_GPIO2_0__GPIO2_0				0x018 0x33c 0x868 0x0 0x0 +#define MX35_PAD_GPIO2_0__USB_TOP_USBOTG_CLK			0x018 0x33c 0x000 0x1 0x0 +#define MX35_PAD_GPIO3_0__GPIO3_0				0x01c 0x340 0x8e8 0x0 0x0 +#define MX35_PAD_GPIO3_0__USB_TOP_USBH2_CLK			0x01c 0x340 0x000 0x1 0x0 +#define MX35_PAD_RESET_IN_B__CCM_RESET_IN_B			0x000 0x344 0x000 0x0 0x0 +#define MX35_PAD_POR_B__CCM_POR_B				0x000 0x348 0x000 0x0 0x0 +#define MX35_PAD_CLKO__CCM_CLKO					0x020 0x34c 0x000 0x0 0x0 +#define MX35_PAD_CLKO__GPIO1_8					0x020 0x34c 0x860 0x5 0x0 +#define MX35_PAD_BOOT_MODE0__CCM_BOOT_MODE_0			0x000 0x350 0x000 0x0 0x0 +#define MX35_PAD_BOOT_MODE1__CCM_BOOT_MODE_1			0x000 0x354 0x000 0x0 0x0 +#define MX35_PAD_CLK_MODE0__CCM_CLK_MODE_0			0x000 0x358 0x000 0x0 0x0 +#define MX35_PAD_CLK_MODE1__CCM_CLK_MODE_1			0x000 0x35c 0x000 0x0 0x0 +#define MX35_PAD_POWER_FAIL__CCM_DSM_WAKEUP_INT_26		0x000 0x360 0x000 0x0 0x0 +#define MX35_PAD_VSTBY__CCM_VSTBY				0x024 0x364 0x000 0x0 0x0 +#define MX35_PAD_VSTBY__GPIO1_7					0x024 0x364 0x85c 0x5 0x0 +#define MX35_PAD_A0__EMI_EIM_DA_L_0				0x028 0x368 0x000 0x0 0x0 +#define MX35_PAD_A1__EMI_EIM_DA_L_1				0x02c 0x36c 0x000 0x0 0x0 +#define MX35_PAD_A2__EMI_EIM_DA_L_2				0x030 0x370 0x000 0x0 0x0 +#define MX35_PAD_A3__EMI_EIM_DA_L_3				0x034 0x374 0x000 0x0 0x0 +#define MX35_PAD_A4__EMI_EIM_DA_L_4				0x038 0x378 0x000 0x0 0x0 +#define MX35_PAD_A5__EMI_EIM_DA_L_5				0x03c 0x37c 0x000 0x0 0x0 +#define MX35_PAD_A6__EMI_EIM_DA_L_6				0x040 0x380 0x000 0x0 0x0 +#define MX35_PAD_A7__EMI_EIM_DA_L_7				0x044 0x384 0x000 0x0 0x0 +#define MX35_PAD_A8__EMI_EIM_DA_H_8				0x048 0x388 0x000 0x0 0x0 +#define MX35_PAD_A9__EMI_EIM_DA_H_9				0x04c 0x38c 0x000 0x0 0x0 +#define MX35_PAD_A10__EMI_EIM_DA_H_10				0x050 0x390 0x000 0x0 0x0 +#define MX35_PAD_MA10__EMI_MA10					0x054 0x394 0x000 0x0 0x0 +#define MX35_PAD_A11__EMI_EIM_DA_H_11				0x058 0x398 0x000 0x0 0x0 +#define MX35_PAD_A12__EMI_EIM_DA_H_12				0x05c 0x39c 0x000 0x0 0x0 +#define MX35_PAD_A13__EMI_EIM_DA_H_13				0x060 0x3a0 0x000 0x0 0x0 +#define MX35_PAD_A14__EMI_EIM_DA_H2_14				0x064 0x3a4 0x000 0x0 0x0 +#define MX35_PAD_A15__EMI_EIM_DA_H2_15				0x068 0x3a8 0x000 0x0 0x0 +#define MX35_PAD_A16__EMI_EIM_A_16				0x06c 0x3ac 0x000 0x0 0x0 +#define MX35_PAD_A17__EMI_EIM_A_17				0x070 0x3b0 0x000 0x0 0x0 +#define MX35_PAD_A18__EMI_EIM_A_18				0x074 0x3b4 0x000 0x0 0x0 +#define MX35_PAD_A19__EMI_EIM_A_19				0x078 0x3b8 0x000 0x0 0x0 +#define MX35_PAD_A20__EMI_EIM_A_20				0x07c 0x3bc 0x000 0x0 0x0 +#define MX35_PAD_A21__EMI_EIM_A_21				0x080 0x3c0 0x000 0x0 0x0 +#define MX35_PAD_A22__EMI_EIM_A_22				0x084 0x3c4 0x000 0x0 0x0 +#define MX35_PAD_A23__EMI_EIM_A_23				0x088 0x3c8 0x000 0x0 0x0 +#define MX35_PAD_A24__EMI_EIM_A_24				0x08c 0x3cc 0x000 0x0 0x0 +#define MX35_PAD_A25__EMI_EIM_A_25				0x090 0x3d0 0x000 0x0 0x0 +#define MX35_PAD_SDBA1__EMI_EIM_SDBA1				0x000 0x3d4 0x000 0x0 0x0 +#define MX35_PAD_SDBA0__EMI_EIM_SDBA0				0x000 0x3d8 0x000 0x0 0x0 +#define MX35_PAD_SD0__EMI_DRAM_D_0				0x000 0x3dc 0x000 0x0 0x0 +#define MX35_PAD_SD1__EMI_DRAM_D_1				0x000 0x3e0 0x000 0x0 0x0 +#define MX35_PAD_SD2__EMI_DRAM_D_2				0x000 0x3e4 0x000 0x0 0x0 +#define MX35_PAD_SD3__EMI_DRAM_D_3				0x000 0x3e8 0x000 0x0 0x0 +#define MX35_PAD_SD4__EMI_DRAM_D_4				0x000 0x3ec 0x000 0x0 0x0 +#define MX35_PAD_SD5__EMI_DRAM_D_5				0x000 0x3f0 0x000 0x0 0x0 +#define MX35_PAD_SD6__EMI_DRAM_D_6				0x000 0x3f4 0x000 0x0 0x0 +#define MX35_PAD_SD7__EMI_DRAM_D_7				0x000 0x3f8 0x000 0x0 0x0 +#define MX35_PAD_SD8__EMI_DRAM_D_8				0x000 0x3fc 0x000 0x0 0x0 +#define MX35_PAD_SD9__EMI_DRAM_D_9				0x000 0x400 0x000 0x0 0x0 +#define MX35_PAD_SD10__EMI_DRAM_D_10				0x000 0x404 0x000 0x0 0x0 +#define MX35_PAD_SD11__EMI_DRAM_D_11				0x000 0x408 0x000 0x0 0x0 +#define MX35_PAD_SD12__EMI_DRAM_D_12				0x000 0x40c 0x000 0x0 0x0 +#define MX35_PAD_SD13__EMI_DRAM_D_13				0x000 0x410 0x000 0x0 0x0 +#define MX35_PAD_SD14__EMI_DRAM_D_14				0x000 0x414 0x000 0x0 0x0 +#define MX35_PAD_SD15__EMI_DRAM_D_15				0x000 0x418 0x000 0x0 0x0 +#define MX35_PAD_SD16__EMI_DRAM_D_16				0x000 0x41c 0x000 0x0 0x0 +#define MX35_PAD_SD17__EMI_DRAM_D_17				0x000 0x420 0x000 0x0 0x0 +#define MX35_PAD_SD18__EMI_DRAM_D_18				0x000 0x424 0x000 0x0 0x0 +#define MX35_PAD_SD19__EMI_DRAM_D_19				0x000 0x428 0x000 0x0 0x0 +#define MX35_PAD_SD20__EMI_DRAM_D_20				0x000 0x42c 0x000 0x0 0x0 +#define MX35_PAD_SD21__EMI_DRAM_D_21				0x000 0x430 0x000 0x0 0x0 +#define MX35_PAD_SD22__EMI_DRAM_D_22				0x000 0x434 0x000 0x0 0x0 +#define MX35_PAD_SD23__EMI_DRAM_D_23				0x000 0x438 0x000 0x0 0x0 +#define MX35_PAD_SD24__EMI_DRAM_D_24				0x000 0x43c 0x000 0x0 0x0 +#define MX35_PAD_SD25__EMI_DRAM_D_25				0x000 0x440 0x000 0x0 0x0 +#define MX35_PAD_SD26__EMI_DRAM_D_26				0x000 0x444 0x000 0x0 0x0 +#define MX35_PAD_SD27__EMI_DRAM_D_27				0x000 0x448 0x000 0x0 0x0 +#define MX35_PAD_SD28__EMI_DRAM_D_28				0x000 0x44c 0x000 0x0 0x0 +#define MX35_PAD_SD29__EMI_DRAM_D_29				0x000 0x450 0x000 0x0 0x0 +#define MX35_PAD_SD30__EMI_DRAM_D_30				0x000 0x454 0x000 0x0 0x0 +#define MX35_PAD_SD31__EMI_DRAM_D_31				0x000 0x458 0x000 0x0 0x0 +#define MX35_PAD_DQM0__EMI_DRAM_DQM_0				0x000 0x45c 0x000 0x0 0x0 +#define MX35_PAD_DQM1__EMI_DRAM_DQM_1				0x000 0x460 0x000 0x0 0x0 +#define MX35_PAD_DQM2__EMI_DRAM_DQM_2				0x000 0x464 0x000 0x0 0x0 +#define MX35_PAD_DQM3__EMI_DRAM_DQM_3				0x000 0x468 0x000 0x0 0x0 +#define MX35_PAD_EB0__EMI_EIM_EB0_B				0x094 0x46c 0x000 0x0 0x0 +#define MX35_PAD_EB1__EMI_EIM_EB1_B				0x098 0x470 0x000 0x0 0x0 +#define MX35_PAD_OE__EMI_EIM_OE					0x09c 0x474 0x000 0x0 0x0 +#define MX35_PAD_CS0__EMI_EIM_CS0				0x0a0 0x478 0x000 0x0 0x0 +#define MX35_PAD_CS1__EMI_EIM_CS1				0x0a4 0x47c 0x000 0x0 0x0 +#define MX35_PAD_CS1__EMI_NANDF_CE3				0x0a4 0x47c 0x000 0x3 0x0 +#define MX35_PAD_CS2__EMI_EIM_CS2				0x0a8 0x480 0x000 0x0 0x0 +#define MX35_PAD_CS3__EMI_EIM_CS3				0x0ac 0x484 0x000 0x0 0x0 +#define MX35_PAD_CS4__EMI_EIM_CS4				0x0b0 0x488 0x000 0x0 0x0 +#define MX35_PAD_CS4__EMI_DTACK_B				0x0b0 0x488 0x800 0x1 0x0 +#define MX35_PAD_CS4__EMI_NANDF_CE1				0x0b0 0x488 0x000 0x3 0x0 +#define MX35_PAD_CS4__GPIO1_20					0x0b0 0x488 0x83c 0x5 0x0 +#define MX35_PAD_CS5__EMI_EIM_CS5				0x0b4 0x48c 0x000 0x0 0x0 +#define MX35_PAD_CS5__CSPI2_SS2					0x0b4 0x48c 0x7f8 0x1 0x0 +#define MX35_PAD_CS5__CSPI1_SS2					0x0b4 0x48c 0x7d8 0x2 0x1 +#define MX35_PAD_CS5__EMI_NANDF_CE2				0x0b4 0x48c 0x000 0x3 0x0 +#define MX35_PAD_CS5__GPIO1_21					0x0b4 0x48c 0x840 0x5 0x0 +#define MX35_PAD_NF_CE0__EMI_NANDF_CE0				0x0b8 0x490 0x000 0x0 0x0 +#define MX35_PAD_NF_CE0__GPIO1_22				0x0b8 0x490 0x844 0x5 0x0 +#define MX35_PAD_ECB__EMI_EIM_ECB				0x000 0x494 0x000 0x0 0x0 +#define MX35_PAD_LBA__EMI_EIM_LBA				0x0bc 0x498 0x000 0x0 0x0 +#define MX35_PAD_BCLK__EMI_EIM_BCLK				0x0c0 0x49c 0x000 0x0 0x0 +#define MX35_PAD_RW__EMI_EIM_RW					0x0c4 0x4a0 0x000 0x0 0x0 +#define MX35_PAD_RAS__EMI_DRAM_RAS				0x000 0x4a4 0x000 0x0 0x0 +#define MX35_PAD_CAS__EMI_DRAM_CAS				0x000 0x4a8 0x000 0x0 0x0 +#define MX35_PAD_SDWE__EMI_DRAM_SDWE				0x000 0x4ac 0x000 0x0 0x0 +#define MX35_PAD_SDCKE0__EMI_DRAM_SDCKE_0			0x000 0x4b0 0x000 0x0 0x0 +#define MX35_PAD_SDCKE1__EMI_DRAM_SDCKE_1			0x000 0x4b4 0x000 0x0 0x0 +#define MX35_PAD_SDCLK__EMI_DRAM_SDCLK				0x000 0x4b8 0x000 0x0 0x0 +#define MX35_PAD_SDQS0__EMI_DRAM_SDQS_0				0x000 0x4bc 0x000 0x0 0x0 +#define MX35_PAD_SDQS1__EMI_DRAM_SDQS_1				0x000 0x4c0 0x000 0x0 0x0 +#define MX35_PAD_SDQS2__EMI_DRAM_SDQS_2				0x000 0x4c4 0x000 0x0 0x0 +#define MX35_PAD_SDQS3__EMI_DRAM_SDQS_3				0x000 0x4c8 0x000 0x0 0x0 +#define MX35_PAD_NFWE_B__EMI_NANDF_WE_B				0x0c8 0x4cc 0x000 0x0 0x0 +#define MX35_PAD_NFWE_B__USB_TOP_USBH2_DATA_3			0x0c8 0x4cc 0x9d8 0x1 0x0 +#define MX35_PAD_NFWE_B__IPU_DISPB_D0_VSYNC			0x0c8 0x4cc 0x924 0x2 0x0 +#define MX35_PAD_NFWE_B__GPIO2_18				0x0c8 0x4cc 0x88c 0x5 0x0 +#define MX35_PAD_NFWE_B__ARM11P_TOP_TRACE_0			0x0c8 0x4cc 0x000 0x7 0x0 +#define MX35_PAD_NFRE_B__EMI_NANDF_RE_B				0x0cc 0x4d0 0x000 0x0 0x0 +#define MX35_PAD_NFRE_B__USB_TOP_USBH2_DIR			0x0cc 0x4d0 0x9ec 0x1 0x0 +#define MX35_PAD_NFRE_B__IPU_DISPB_BCLK				0x0cc 0x4d0 0x000 0x2 0x0 +#define MX35_PAD_NFRE_B__GPIO2_19				0x0cc 0x4d0 0x890 0x5 0x0 +#define MX35_PAD_NFRE_B__ARM11P_TOP_TRACE_1			0x0cc 0x4d0 0x000 0x7 0x0 +#define MX35_PAD_NFALE__EMI_NANDF_ALE				0x0d0 0x4d4 0x000 0x0 0x0 +#define MX35_PAD_NFALE__USB_TOP_USBH2_STP			0x0d0 0x4d4 0x000 0x1 0x0 +#define MX35_PAD_NFALE__IPU_DISPB_CS0				0x0d0 0x4d4 0x000 0x2 0x0 +#define MX35_PAD_NFALE__GPIO2_20				0x0d0 0x4d4 0x898 0x5 0x0 +#define MX35_PAD_NFALE__ARM11P_TOP_TRACE_2			0x0d0 0x4d4 0x000 0x7 0x0 +#define MX35_PAD_NFCLE__EMI_NANDF_CLE				0x0d4 0x4d8 0x000 0x0 0x0 +#define MX35_PAD_NFCLE__USB_TOP_USBH2_NXT			0x0d4 0x4d8 0x9f0 0x1 0x0 +#define MX35_PAD_NFCLE__IPU_DISPB_PAR_RS			0x0d4 0x4d8 0x000 0x2 0x0 +#define MX35_PAD_NFCLE__GPIO2_21				0x0d4 0x4d8 0x89c 0x5 0x0 +#define MX35_PAD_NFCLE__ARM11P_TOP_TRACE_3			0x0d4 0x4d8 0x000 0x7 0x0 +#define MX35_PAD_NFWP_B__EMI_NANDF_WP_B				0x0d8 0x4dc 0x000 0x0 0x0 +#define MX35_PAD_NFWP_B__USB_TOP_USBH2_DATA_7			0x0d8 0x4dc 0x9e8 0x1 0x0 +#define MX35_PAD_NFWP_B__IPU_DISPB_WR				0x0d8 0x4dc 0x000 0x2 0x0 +#define MX35_PAD_NFWP_B__GPIO2_22				0x0d8 0x4dc 0x8a0 0x5 0x0 +#define MX35_PAD_NFWP_B__ARM11P_TOP_TRCTL			0x0d8 0x4dc 0x000 0x7 0x0 +#define MX35_PAD_NFRB__EMI_NANDF_RB				0x0dc 0x4e0 0x000 0x0 0x0 +#define MX35_PAD_NFRB__IPU_DISPB_RD				0x0dc 0x4e0 0x000 0x2 0x0 +#define MX35_PAD_NFRB__GPIO2_23					0x0dc 0x4e0 0x8a4 0x5 0x0 +#define MX35_PAD_NFRB__ARM11P_TOP_TRCLK				0x0dc 0x4e0 0x000 0x7 0x0 +#define MX35_PAD_D15__EMI_EIM_D_15				0x000 0x4e4 0x000 0x0 0x0 +#define MX35_PAD_D14__EMI_EIM_D_14				0x000 0x4e8 0x000 0x0 0x0 +#define MX35_PAD_D13__EMI_EIM_D_13				0x000 0x4ec 0x000 0x0 0x0 +#define MX35_PAD_D12__EMI_EIM_D_12				0x000 0x4f0 0x000 0x0 0x0 +#define MX35_PAD_D11__EMI_EIM_D_11				0x000 0x4f4 0x000 0x0 0x0 +#define MX35_PAD_D10__EMI_EIM_D_10				0x000 0x4f8 0x000 0x0 0x0 +#define MX35_PAD_D9__EMI_EIM_D_9				0x000 0x4fc 0x000 0x0 0x0 +#define MX35_PAD_D8__EMI_EIM_D_8				0x000 0x500 0x000 0x0 0x0 +#define MX35_PAD_D7__EMI_EIM_D_7				0x000 0x504 0x000 0x0 0x0 +#define MX35_PAD_D6__EMI_EIM_D_6				0x000 0x508 0x000 0x0 0x0 +#define MX35_PAD_D5__EMI_EIM_D_5				0x000 0x50c 0x000 0x0 0x0 +#define MX35_PAD_D4__EMI_EIM_D_4				0x000 0x510 0x000 0x0 0x0 +#define MX35_PAD_D3__EMI_EIM_D_3				0x000 0x514 0x000 0x0 0x0 +#define MX35_PAD_D2__EMI_EIM_D_2				0x000 0x518 0x000 0x0 0x0 +#define MX35_PAD_D1__EMI_EIM_D_1				0x000 0x51c 0x000 0x0 0x0 +#define MX35_PAD_D0__EMI_EIM_D_0				0x000 0x520 0x000 0x0 0x0 +#define MX35_PAD_CSI_D8__IPU_CSI_D_8				0x0e0 0x524 0x000 0x0 0x0 +#define MX35_PAD_CSI_D8__KPP_COL_0				0x0e0 0x524 0x950 0x1 0x0 +#define MX35_PAD_CSI_D8__GPIO1_20				0x0e0 0x524 0x83c 0x5 0x1 +#define MX35_PAD_CSI_D8__ARM11P_TOP_EVNTBUS_13			0x0e0 0x524 0x000 0x7 0x0 +#define MX35_PAD_CSI_D9__IPU_CSI_D_9				0x0e4 0x528 0x000 0x0 0x0 +#define MX35_PAD_CSI_D9__KPP_COL_1				0x0e4 0x528 0x954 0x1 0x0 +#define MX35_PAD_CSI_D9__GPIO1_21				0x0e4 0x528 0x840 0x5 0x1 +#define MX35_PAD_CSI_D9__ARM11P_TOP_EVNTBUS_14			0x0e4 0x528 0x000 0x7 0x0 +#define MX35_PAD_CSI_D10__IPU_CSI_D_10				0x0e8 0x52c 0x000 0x0 0x0 +#define MX35_PAD_CSI_D10__KPP_COL_2				0x0e8 0x52c 0x958 0x1 0x0 +#define MX35_PAD_CSI_D10__GPIO1_22				0x0e8 0x52c 0x844 0x5 0x1 +#define MX35_PAD_CSI_D10__ARM11P_TOP_EVNTBUS_15			0x0e8 0x52c 0x000 0x7 0x0 +#define MX35_PAD_CSI_D11__IPU_CSI_D_11				0x0ec 0x530 0x000 0x0 0x0 +#define MX35_PAD_CSI_D11__KPP_COL_3				0x0ec 0x530 0x95c 0x1 0x0 +#define MX35_PAD_CSI_D11__GPIO1_23				0x0ec 0x530 0x000 0x5 0x0 +#define MX35_PAD_CSI_D12__IPU_CSI_D_12				0x0f0 0x534 0x000 0x0 0x0 +#define MX35_PAD_CSI_D12__KPP_ROW_0				0x0f0 0x534 0x970 0x1 0x0 +#define MX35_PAD_CSI_D12__GPIO1_24				0x0f0 0x534 0x000 0x5 0x0 +#define MX35_PAD_CSI_D13__IPU_CSI_D_13				0x0f4 0x538 0x000 0x0 0x0 +#define MX35_PAD_CSI_D13__KPP_ROW_1				0x0f4 0x538 0x974 0x1 0x0 +#define MX35_PAD_CSI_D13__GPIO1_25				0x0f4 0x538 0x000 0x5 0x0 +#define MX35_PAD_CSI_D14__IPU_CSI_D_14				0x0f8 0x53c 0x000 0x0 0x0 +#define MX35_PAD_CSI_D14__KPP_ROW_2				0x0f8 0x53c 0x978 0x1 0x0 +#define MX35_PAD_CSI_D14__GPIO1_26				0x0f8 0x53c 0x000 0x5 0x0 +#define MX35_PAD_CSI_D15__IPU_CSI_D_15				0x0fc 0x540 0x97c 0x0 0x0 +#define MX35_PAD_CSI_D15__KPP_ROW_3				0x0fc 0x540 0x000 0x1 0x0 +#define MX35_PAD_CSI_D15__GPIO1_27				0x0fc 0x540 0x000 0x5 0x0 +#define MX35_PAD_CSI_MCLK__IPU_CSI_MCLK				0x100 0x544 0x000 0x0 0x0 +#define MX35_PAD_CSI_MCLK__GPIO1_28				0x100 0x544 0x000 0x5 0x0 +#define MX35_PAD_CSI_VSYNC__IPU_CSI_VSYNC			0x104 0x548 0x000 0x0 0x0 +#define MX35_PAD_CSI_VSYNC__GPIO1_29				0x104 0x548 0x000 0x5 0x0 +#define MX35_PAD_CSI_HSYNC__IPU_CSI_HSYNC			0x108 0x54c 0x000 0x0 0x0 +#define MX35_PAD_CSI_HSYNC__GPIO1_30				0x108 0x54c 0x000 0x5 0x0 +#define MX35_PAD_CSI_PIXCLK__IPU_CSI_PIXCLK			0x10c 0x550 0x000 0x0 0x0 +#define MX35_PAD_CSI_PIXCLK__GPIO1_31				0x10c 0x550 0x000 0x5 0x0 +#define MX35_PAD_I2C1_CLK__I2C1_SCL				0x110 0x554 0x000 0x0 0x0 +#define MX35_PAD_I2C1_CLK__GPIO2_24				0x110 0x554 0x8a8 0x5 0x0 +#define MX35_PAD_I2C1_CLK__CCM_USB_BYP_CLK			0x110 0x554 0x000 0x6 0x0 +#define MX35_PAD_I2C1_DAT__I2C1_SDA				0x114 0x558 0x000 0x0 0x0 +#define MX35_PAD_I2C1_DAT__GPIO2_25				0x114 0x558 0x8ac 0x5 0x0 +#define MX35_PAD_I2C2_CLK__I2C2_SCL				0x118 0x55c 0x000 0x0 0x0 +#define MX35_PAD_I2C2_CLK__CAN1_TXCAN				0x118 0x55c 0x000 0x1 0x0 +#define MX35_PAD_I2C2_CLK__USB_TOP_USBH2_PWR			0x118 0x55c 0x000 0x2 0x0 +#define MX35_PAD_I2C2_CLK__GPIO2_26				0x118 0x55c 0x8b0 0x5 0x0 +#define MX35_PAD_I2C2_CLK__SDMA_DEBUG_BUS_DEVICE_2		0x118 0x55c 0x000 0x6 0x0 +#define MX35_PAD_I2C2_DAT__I2C2_SDA				0x11c 0x560 0x000 0x0 0x0 +#define MX35_PAD_I2C2_DAT__CAN1_RXCAN				0x11c 0x560 0x7c8 0x1 0x0 +#define MX35_PAD_I2C2_DAT__USB_TOP_USBH2_OC			0x11c 0x560 0x9f4 0x2 0x0 +#define MX35_PAD_I2C2_DAT__GPIO2_27				0x11c 0x560 0x8b4 0x5 0x0 +#define MX35_PAD_I2C2_DAT__SDMA_DEBUG_BUS_DEVICE_3		0x11c 0x560 0x000 0x6 0x0 +#define MX35_PAD_STXD4__AUDMUX_AUD4_TXD				0x120 0x564 0x000 0x0 0x0 +#define MX35_PAD_STXD4__GPIO2_28				0x120 0x564 0x8b8 0x5 0x0 +#define MX35_PAD_STXD4__ARM11P_TOP_ARM_COREASID0		0x120 0x564 0x000 0x7 0x0 +#define MX35_PAD_SRXD4__AUDMUX_AUD4_RXD				0x124 0x568 0x000 0x0 0x0 +#define MX35_PAD_SRXD4__GPIO2_29				0x124 0x568 0x8bc 0x5 0x0 +#define MX35_PAD_SRXD4__ARM11P_TOP_ARM_COREASID1		0x124 0x568 0x000 0x7 0x0 +#define MX35_PAD_SCK4__AUDMUX_AUD4_TXC				0x128 0x56c 0x000 0x0 0x0 +#define MX35_PAD_SCK4__GPIO2_30					0x128 0x56c 0x8c4 0x5 0x0 +#define MX35_PAD_SCK4__ARM11P_TOP_ARM_COREASID2			0x128 0x56c 0x000 0x7 0x0 +#define MX35_PAD_STXFS4__AUDMUX_AUD4_TXFS			0x12c 0x570 0x000 0x0 0x0 +#define MX35_PAD_STXFS4__GPIO2_31				0x12c 0x570 0x8c8 0x5 0x0 +#define MX35_PAD_STXFS4__ARM11P_TOP_ARM_COREASID3		0x12c 0x570 0x000 0x7 0x0 +#define MX35_PAD_STXD5__AUDMUX_AUD5_TXD				0x130 0x574 0x000 0x0 0x0 +#define MX35_PAD_STXD5__SPDIF_SPDIF_OUT1			0x130 0x574 0x000 0x1 0x0 +#define MX35_PAD_STXD5__CSPI2_MOSI				0x130 0x574 0x7ec 0x2 0x0 +#define MX35_PAD_STXD5__GPIO1_0					0x130 0x574 0x82c 0x5 0x1 +#define MX35_PAD_STXD5__ARM11P_TOP_ARM_COREASID4		0x130 0x574 0x000 0x7 0x0 +#define MX35_PAD_SRXD5__AUDMUX_AUD5_RXD				0x134 0x578 0x000 0x0 0x0 +#define MX35_PAD_SRXD5__SPDIF_SPDIF_IN1				0x134 0x578 0x998 0x1 0x0 +#define MX35_PAD_SRXD5__CSPI2_MISO				0x134 0x578 0x7e8 0x2 0x0 +#define MX35_PAD_SRXD5__GPIO1_1					0x134 0x578 0x838 0x5 0x1 +#define MX35_PAD_SRXD5__ARM11P_TOP_ARM_COREASID5		0x134 0x578 0x000 0x7 0x0 +#define MX35_PAD_SCK5__AUDMUX_AUD5_TXC				0x138 0x57c 0x000 0x0 0x0 +#define MX35_PAD_SCK5__SPDIF_SPDIF_EXTCLK			0x138 0x57c 0x994 0x1 0x0 +#define MX35_PAD_SCK5__CSPI2_SCLK				0x138 0x57c 0x7e0 0x2 0x0 +#define MX35_PAD_SCK5__GPIO1_2					0x138 0x57c 0x848 0x5 0x0 +#define MX35_PAD_SCK5__ARM11P_TOP_ARM_COREASID6			0x138 0x57c 0x000 0x7 0x0 +#define MX35_PAD_STXFS5__AUDMUX_AUD5_TXFS			0x13c 0x580 0x000 0x0 0x0 +#define MX35_PAD_STXFS5__CSPI2_RDY				0x13c 0x580 0x7e4 0x2 0x0 +#define MX35_PAD_STXFS5__GPIO1_3				0x13c 0x580 0x84c 0x5 0x0 +#define MX35_PAD_STXFS5__ARM11P_TOP_ARM_COREASID7		0x13c 0x580 0x000 0x7 0x0 +#define MX35_PAD_SCKR__ESAI_SCKR				0x140 0x584 0x000 0x0 0x0 +#define MX35_PAD_SCKR__GPIO1_4					0x140 0x584 0x850 0x5 0x1 +#define MX35_PAD_SCKR__ARM11P_TOP_EVNTBUS_10			0x140 0x584 0x000 0x7 0x0 +#define MX35_PAD_FSR__ESAI_FSR					0x144 0x588 0x000 0x0 0x0 +#define MX35_PAD_FSR__GPIO1_5					0x144 0x588 0x854 0x5 0x1 +#define MX35_PAD_FSR__ARM11P_TOP_EVNTBUS_11			0x144 0x588 0x000 0x7 0x0 +#define MX35_PAD_HCKR__ESAI_HCKR				0x148 0x58c 0x000 0x0 0x0 +#define MX35_PAD_HCKR__AUDMUX_AUD5_RXFS				0x148 0x58c 0x000 0x1 0x0 +#define MX35_PAD_HCKR__CSPI2_SS0				0x148 0x58c 0x7f0 0x2 0x0 +#define MX35_PAD_HCKR__IPU_FLASH_STROBE				0x148 0x58c 0x000 0x3 0x0 +#define MX35_PAD_HCKR__GPIO1_6					0x148 0x58c 0x858 0x5 0x1 +#define MX35_PAD_HCKR__ARM11P_TOP_EVNTBUS_12			0x148 0x58c 0x000 0x7 0x0 +#define MX35_PAD_SCKT__ESAI_SCKT				0x14c 0x590 0x000 0x0 0x0 +#define MX35_PAD_SCKT__GPIO1_7					0x14c 0x590 0x85c 0x5 0x1 +#define MX35_PAD_SCKT__IPU_CSI_D_0				0x14c 0x590 0x930 0x6 0x0 +#define MX35_PAD_SCKT__KPP_ROW_2				0x14c 0x590 0x978 0x7 0x1 +#define MX35_PAD_FST__ESAI_FST					0x150 0x594 0x000 0x0 0x0 +#define MX35_PAD_FST__GPIO1_8					0x150 0x594 0x860 0x5 0x1 +#define MX35_PAD_FST__IPU_CSI_D_1				0x150 0x594 0x934 0x6 0x0 +#define MX35_PAD_FST__KPP_ROW_3					0x150 0x594 0x97c 0x7 0x1 +#define MX35_PAD_HCKT__ESAI_HCKT				0x154 0x598 0x000 0x0 0x0 +#define MX35_PAD_HCKT__AUDMUX_AUD5_RXC				0x154 0x598 0x7a8 0x1 0x0 +#define MX35_PAD_HCKT__GPIO1_9					0x154 0x598 0x864 0x5 0x0 +#define MX35_PAD_HCKT__IPU_CSI_D_2				0x154 0x598 0x938 0x6 0x0 +#define MX35_PAD_HCKT__KPP_COL_3				0x154 0x598 0x95c 0x7 0x1 +#define MX35_PAD_TX5_RX0__ESAI_TX5_RX0				0x158 0x59c 0x000 0x0 0x0 +#define MX35_PAD_TX5_RX0__AUDMUX_AUD4_RXC			0x158 0x59c 0x000 0x1 0x0 +#define MX35_PAD_TX5_RX0__CSPI2_SS2				0x158 0x59c 0x7f8 0x2 0x1 +#define MX35_PAD_TX5_RX0__CAN2_TXCAN				0x158 0x59c 0x000 0x3 0x0 +#define MX35_PAD_TX5_RX0__UART2_DTR				0x158 0x59c 0x000 0x4 0x0 +#define MX35_PAD_TX5_RX0__GPIO1_10				0x158 0x59c 0x830 0x5 0x0 +#define MX35_PAD_TX5_RX0__EMI_M3IF_CHOSEN_MASTER_0		0x158 0x59c 0x000 0x7 0x0 +#define MX35_PAD_TX4_RX1__ESAI_TX4_RX1				0x15c 0x5a0 0x000 0x0 0x0 +#define MX35_PAD_TX4_RX1__AUDMUX_AUD4_RXFS			0x15c 0x5a0 0x000 0x1 0x0 +#define MX35_PAD_TX4_RX1__CSPI2_SS3				0x15c 0x5a0 0x7fc 0x2 0x0 +#define MX35_PAD_TX4_RX1__CAN2_RXCAN				0x15c 0x5a0 0x7cc 0x3 0x0 +#define MX35_PAD_TX4_RX1__UART2_DSR				0x15c 0x5a0 0x000 0x4 0x0 +#define MX35_PAD_TX4_RX1__GPIO1_11				0x15c 0x5a0 0x834 0x5 0x0 +#define MX35_PAD_TX4_RX1__IPU_CSI_D_3				0x15c 0x5a0 0x93c 0x6 0x0 +#define MX35_PAD_TX4_RX1__KPP_ROW_0				0x15c 0x5a0 0x970 0x7 0x1 +#define MX35_PAD_TX3_RX2__ESAI_TX3_RX2				0x160 0x5a4 0x000 0x0 0x0 +#define MX35_PAD_TX3_RX2__I2C3_SCL				0x160 0x5a4 0x91c 0x1 0x0 +#define MX35_PAD_TX3_RX2__EMI_NANDF_CE1				0x160 0x5a4 0x000 0x3 0x0 +#define MX35_PAD_TX3_RX2__GPIO1_12				0x160 0x5a4 0x000 0x5 0x0 +#define MX35_PAD_TX3_RX2__IPU_CSI_D_4				0x160 0x5a4 0x940 0x6 0x0 +#define MX35_PAD_TX3_RX2__KPP_ROW_1				0x160 0x5a4 0x974 0x7 0x1 +#define MX35_PAD_TX2_RX3__ESAI_TX2_RX3				0x164 0x5a8 0x000 0x0 0x0 +#define MX35_PAD_TX2_RX3__I2C3_SDA				0x164 0x5a8 0x920 0x1 0x0 +#define MX35_PAD_TX2_RX3__EMI_NANDF_CE2				0x164 0x5a8 0x000 0x3 0x0 +#define MX35_PAD_TX2_RX3__GPIO1_13				0x164 0x5a8 0x000 0x5 0x0 +#define MX35_PAD_TX2_RX3__IPU_CSI_D_5				0x164 0x5a8 0x944 0x6 0x0 +#define MX35_PAD_TX2_RX3__KPP_COL_0				0x164 0x5a8 0x950 0x7 0x1 +#define MX35_PAD_TX1__ESAI_TX1					0x168 0x5ac 0x000 0x0 0x0 +#define MX35_PAD_TX1__CCM_PMIC_RDY				0x168 0x5ac 0x7d4 0x1 0x1 +#define MX35_PAD_TX1__CSPI1_SS2					0x168 0x5ac 0x7d8 0x2 0x2 +#define MX35_PAD_TX1__EMI_NANDF_CE3				0x168 0x5ac 0x000 0x3 0x0 +#define MX35_PAD_TX1__UART2_RI					0x168 0x5ac 0x000 0x4 0x0 +#define MX35_PAD_TX1__GPIO1_14					0x168 0x5ac 0x000 0x5 0x0 +#define MX35_PAD_TX1__IPU_CSI_D_6				0x168 0x5ac 0x948 0x6 0x0 +#define MX35_PAD_TX1__KPP_COL_1					0x168 0x5ac 0x954 0x7 0x1 +#define MX35_PAD_TX0__ESAI_TX0					0x16c 0x5b0 0x000 0x0 0x0 +#define MX35_PAD_TX0__SPDIF_SPDIF_EXTCLK			0x16c 0x5b0 0x994 0x1 0x1 +#define MX35_PAD_TX0__CSPI1_SS3					0x16c 0x5b0 0x7dc 0x2 0x0 +#define MX35_PAD_TX0__EMI_DTACK_B				0x16c 0x5b0 0x800 0x3 0x1 +#define MX35_PAD_TX0__UART2_DCD					0x16c 0x5b0 0x000 0x4 0x0 +#define MX35_PAD_TX0__GPIO1_15					0x16c 0x5b0 0x000 0x5 0x0 +#define MX35_PAD_TX0__IPU_CSI_D_7				0x16c 0x5b0 0x94c 0x6 0x0 +#define MX35_PAD_TX0__KPP_COL_2					0x16c 0x5b0 0x958 0x7 0x1 +#define MX35_PAD_CSPI1_MOSI__CSPI1_MOSI				0x170 0x5b4 0x000 0x0 0x0 +#define MX35_PAD_CSPI1_MOSI__GPIO1_16				0x170 0x5b4 0x000 0x5 0x0 +#define MX35_PAD_CSPI1_MOSI__ECT_CTI_TRIG_OUT1_2		0x170 0x5b4 0x000 0x7 0x0 +#define MX35_PAD_CSPI1_MISO__CSPI1_MISO				0x174 0x5b8 0x000 0x0 0x0 +#define MX35_PAD_CSPI1_MISO__GPIO1_17				0x174 0x5b8 0x000 0x5 0x0 +#define MX35_PAD_CSPI1_MISO__ECT_CTI_TRIG_OUT1_3		0x174 0x5b8 0x000 0x7 0x0 +#define MX35_PAD_CSPI1_SS0__CSPI1_SS0				0x178 0x5bc 0x000 0x0 0x0 +#define MX35_PAD_CSPI1_SS0__OWIRE_LINE				0x178 0x5bc 0x990 0x1 0x1 +#define MX35_PAD_CSPI1_SS0__CSPI2_SS3				0x178 0x5bc 0x7fc 0x2 0x1 +#define MX35_PAD_CSPI1_SS0__GPIO1_18				0x178 0x5bc 0x000 0x5 0x0 +#define MX35_PAD_CSPI1_SS0__ECT_CTI_TRIG_OUT1_4			0x178 0x5bc 0x000 0x7 0x0 +#define MX35_PAD_CSPI1_SS1__CSPI1_SS1				0x17c 0x5c0 0x000 0x0 0x0 +#define MX35_PAD_CSPI1_SS1__PWM_PWMO				0x17c 0x5c0 0x000 0x1 0x0 +#define MX35_PAD_CSPI1_SS1__CCM_CLK32K				0x17c 0x5c0 0x7d0 0x2 0x1 +#define MX35_PAD_CSPI1_SS1__GPIO1_19				0x17c 0x5c0 0x000 0x5 0x0 +#define MX35_PAD_CSPI1_SS1__IPU_DIAGB_29			0x17c 0x5c0 0x000 0x6 0x0 +#define MX35_PAD_CSPI1_SS1__ECT_CTI_TRIG_OUT1_5			0x17c 0x5c0 0x000 0x7 0x0 +#define MX35_PAD_CSPI1_SCLK__CSPI1_SCLK				0x180 0x5c4 0x000 0x0 0x0 +#define MX35_PAD_CSPI1_SCLK__GPIO3_4				0x180 0x5c4 0x904 0x5 0x0 +#define MX35_PAD_CSPI1_SCLK__IPU_DIAGB_30			0x180 0x5c4 0x000 0x6 0x0 +#define MX35_PAD_CSPI1_SCLK__EMI_M3IF_CHOSEN_MASTER_1		0x180 0x5c4 0x000 0x7 0x0 +#define MX35_PAD_CSPI1_SPI_RDY__CSPI1_RDY			0x184 0x5c8 0x000 0x0 0x0 +#define MX35_PAD_CSPI1_SPI_RDY__GPIO3_5				0x184 0x5c8 0x908 0x5 0x0 +#define MX35_PAD_CSPI1_SPI_RDY__IPU_DIAGB_31			0x184 0x5c8 0x000 0x6 0x0 +#define MX35_PAD_CSPI1_SPI_RDY__EMI_M3IF_CHOSEN_MASTER_2	0x184 0x5c8 0x000 0x7 0x0 +#define MX35_PAD_RXD1__UART1_RXD_MUX				0x188 0x5cc 0x000 0x0 0x0 +#define MX35_PAD_RXD1__CSPI2_MOSI				0x188 0x5cc 0x7ec 0x1 0x1 +#define MX35_PAD_RXD1__KPP_COL_4				0x188 0x5cc 0x960 0x4 0x0 +#define MX35_PAD_RXD1__GPIO3_6					0x188 0x5cc 0x90c 0x5 0x0 +#define MX35_PAD_RXD1__ARM11P_TOP_EVNTBUS_16			0x188 0x5cc 0x000 0x7 0x0 +#define MX35_PAD_TXD1__UART1_TXD_MUX				0x18c 0x5d0 0x000 0x0 0x0 +#define MX35_PAD_TXD1__CSPI2_MISO				0x18c 0x5d0 0x7e8 0x1 0x1 +#define MX35_PAD_TXD1__KPP_COL_5				0x18c 0x5d0 0x964 0x4 0x0 +#define MX35_PAD_TXD1__GPIO3_7					0x18c 0x5d0 0x910 0x5 0x0 +#define MX35_PAD_TXD1__ARM11P_TOP_EVNTBUS_17			0x18c 0x5d0 0x000 0x7 0x0 +#define MX35_PAD_RTS1__UART1_RTS				0x190 0x5d4 0x000 0x0 0x0 +#define MX35_PAD_RTS1__CSPI2_SCLK				0x190 0x5d4 0x7e0 0x1 0x1 +#define MX35_PAD_RTS1__I2C3_SCL					0x190 0x5d4 0x91c 0x2 0x1 +#define MX35_PAD_RTS1__IPU_CSI_D_0				0x190 0x5d4 0x930 0x3 0x1 +#define MX35_PAD_RTS1__KPP_COL_6				0x190 0x5d4 0x968 0x4 0x0 +#define MX35_PAD_RTS1__GPIO3_8					0x190 0x5d4 0x914 0x5 0x0 +#define MX35_PAD_RTS1__EMI_NANDF_CE1				0x190 0x5d4 0x000 0x6 0x0 +#define MX35_PAD_RTS1__ARM11P_TOP_EVNTBUS_18			0x190 0x5d4 0x000 0x7 0x0 +#define MX35_PAD_CTS1__UART1_CTS				0x194 0x5d8 0x000 0x0 0x0 +#define MX35_PAD_CTS1__CSPI2_RDY				0x194 0x5d8 0x7e4 0x1 0x1 +#define MX35_PAD_CTS1__I2C3_SDA					0x194 0x5d8 0x920 0x2 0x1 +#define MX35_PAD_CTS1__IPU_CSI_D_1				0x194 0x5d8 0x934 0x3 0x1 +#define MX35_PAD_CTS1__KPP_COL_7				0x194 0x5d8 0x96c 0x4 0x0 +#define MX35_PAD_CTS1__GPIO3_9					0x194 0x5d8 0x918 0x5 0x0 +#define MX35_PAD_CTS1__EMI_NANDF_CE2				0x194 0x5d8 0x000 0x6 0x0 +#define MX35_PAD_CTS1__ARM11P_TOP_EVNTBUS_19			0x194 0x5d8 0x000 0x7 0x0 +#define MX35_PAD_RXD2__UART2_RXD_MUX				0x198 0x5dc 0x000 0x0 0x0 +#define MX35_PAD_RXD2__KPP_ROW_4				0x198 0x5dc 0x980 0x4 0x0 +#define MX35_PAD_RXD2__GPIO3_10					0x198 0x5dc 0x8ec 0x5 0x0 +#define MX35_PAD_TXD2__UART2_TXD_MUX				0x19c 0x5e0 0x000 0x0 0x0 +#define MX35_PAD_TXD2__SPDIF_SPDIF_EXTCLK			0x19c 0x5e0 0x994 0x1 0x2 +#define MX35_PAD_TXD2__KPP_ROW_5				0x19c 0x5e0 0x984 0x4 0x0 +#define MX35_PAD_TXD2__GPIO3_11					0x19c 0x5e0 0x8f0 0x5 0x0 +#define MX35_PAD_RTS2__UART2_RTS				0x1a0 0x5e4 0x000 0x0 0x0 +#define MX35_PAD_RTS2__SPDIF_SPDIF_IN1				0x1a0 0x5e4 0x998 0x1 0x1 +#define MX35_PAD_RTS2__CAN2_RXCAN				0x1a0 0x5e4 0x7cc 0x2 0x1 +#define MX35_PAD_RTS2__IPU_CSI_D_2				0x1a0 0x5e4 0x938 0x3 0x1 +#define MX35_PAD_RTS2__KPP_ROW_6				0x1a0 0x5e4 0x988 0x4 0x0 +#define MX35_PAD_RTS2__GPIO3_12					0x1a0 0x5e4 0x8f4 0x5 0x0 +#define MX35_PAD_RTS2__AUDMUX_AUD5_RXC				0x1a0 0x5e4 0x000 0x6 0x0 +#define MX35_PAD_RTS2__UART3_RXD_MUX				0x1a0 0x5e4 0x9a0 0x7 0x0 +#define MX35_PAD_CTS2__UART2_CTS				0x1a4 0x5e8 0x000 0x0 0x0 +#define MX35_PAD_CTS2__SPDIF_SPDIF_OUT1				0x1a4 0x5e8 0x000 0x1 0x0 +#define MX35_PAD_CTS2__CAN2_TXCAN				0x1a4 0x5e8 0x000 0x2 0x0 +#define MX35_PAD_CTS2__IPU_CSI_D_3				0x1a4 0x5e8 0x93c 0x3 0x1 +#define MX35_PAD_CTS2__KPP_ROW_7				0x1a4 0x5e8 0x98c 0x4 0x0 +#define MX35_PAD_CTS2__GPIO3_13					0x1a4 0x5e8 0x8f8 0x5 0x0 +#define MX35_PAD_CTS2__AUDMUX_AUD5_RXFS				0x1a4 0x5e8 0x000 0x6 0x0 +#define MX35_PAD_CTS2__UART3_TXD_MUX				0x1a4 0x5e8 0x000 0x7 0x0 +#define MX35_PAD_RTCK__ARM11P_TOP_RTCK				0x000 0x5ec 0x000 0x0 0x0 +#define MX35_PAD_TCK__SJC_TCK					0x000 0x5f0 0x000 0x0 0x0 +#define MX35_PAD_TMS__SJC_TMS					0x000 0x5f4 0x000 0x0 0x0 +#define MX35_PAD_TDI__SJC_TDI					0x000 0x5f8 0x000 0x0 0x0 +#define MX35_PAD_TDO__SJC_TDO					0x000 0x5fc 0x000 0x0 0x0 +#define MX35_PAD_TRSTB__SJC_TRSTB				0x000 0x600 0x000 0x0 0x0 +#define MX35_PAD_DE_B__SJC_DE_B					0x000 0x604 0x000 0x0 0x0 +#define MX35_PAD_SJC_MOD__SJC_MOD				0x000 0x608 0x000 0x0 0x0 +#define MX35_PAD_USBOTG_PWR__USB_TOP_USBOTG_PWR			0x1a8 0x60c 0x000 0x0 0x0 +#define MX35_PAD_USBOTG_PWR__USB_TOP_USBH2_PWR			0x1a8 0x60c 0x000 0x1 0x0 +#define MX35_PAD_USBOTG_PWR__GPIO3_14				0x1a8 0x60c 0x8fc 0x5 0x0 +#define MX35_PAD_USBOTG_OC__USB_TOP_USBOTG_OC			0x1ac 0x610 0x000 0x0 0x0 +#define MX35_PAD_USBOTG_OC__USB_TOP_USBH2_OC			0x1ac 0x610 0x9f4 0x1 0x1 +#define MX35_PAD_USBOTG_OC__GPIO3_15				0x1ac 0x610 0x900 0x5 0x0 +#define MX35_PAD_LD0__IPU_DISPB_DAT_0				0x1b0 0x614 0x000 0x0 0x0 +#define MX35_PAD_LD0__GPIO2_0					0x1b0 0x614 0x868 0x5 0x1 +#define MX35_PAD_LD0__SDMA_SDMA_DEBUG_PC_0			0x1b0 0x614 0x000 0x6 0x0 +#define MX35_PAD_LD1__IPU_DISPB_DAT_1				0x1b4 0x618 0x000 0x0 0x0 +#define MX35_PAD_LD1__GPIO2_1					0x1b4 0x618 0x894 0x5 0x0 +#define MX35_PAD_LD1__SDMA_SDMA_DEBUG_PC_1			0x1b4 0x618 0x000 0x6 0x0 +#define MX35_PAD_LD2__IPU_DISPB_DAT_2				0x1b8 0x61c 0x000 0x0 0x0 +#define MX35_PAD_LD2__GPIO2_2					0x1b8 0x61c 0x8c0 0x5 0x0 +#define MX35_PAD_LD2__SDMA_SDMA_DEBUG_PC_2			0x1b8 0x61c 0x000 0x6 0x0 +#define MX35_PAD_LD3__IPU_DISPB_DAT_3				0x1bc 0x620 0x000 0x0 0x0 +#define MX35_PAD_LD3__GPIO2_3					0x1bc 0x620 0x8cc 0x5 0x0 +#define MX35_PAD_LD3__SDMA_SDMA_DEBUG_PC_3			0x1bc 0x620 0x000 0x6 0x0 +#define MX35_PAD_LD4__IPU_DISPB_DAT_4				0x1c0 0x624 0x000 0x0 0x0 +#define MX35_PAD_LD4__GPIO2_4					0x1c0 0x624 0x8d0 0x5 0x0 +#define MX35_PAD_LD4__SDMA_SDMA_DEBUG_PC_4			0x1c0 0x624 0x000 0x6 0x0 +#define MX35_PAD_LD5__IPU_DISPB_DAT_5				0x1c4 0x628 0x000 0x0 0x0 +#define MX35_PAD_LD5__GPIO2_5					0x1c4 0x628 0x8d4 0x5 0x0 +#define MX35_PAD_LD5__SDMA_SDMA_DEBUG_PC_5			0x1c4 0x628 0x000 0x6 0x0 +#define MX35_PAD_LD6__IPU_DISPB_DAT_6				0x1c8 0x62c 0x000 0x0 0x0 +#define MX35_PAD_LD6__GPIO2_6					0x1c8 0x62c 0x8d8 0x5 0x0 +#define MX35_PAD_LD6__SDMA_SDMA_DEBUG_PC_6			0x1c8 0x62c 0x000 0x6 0x0 +#define MX35_PAD_LD7__IPU_DISPB_DAT_7				0x1cc 0x630 0x000 0x0 0x0 +#define MX35_PAD_LD7__GPIO2_7					0x1cc 0x630 0x8dc 0x5 0x0 +#define MX35_PAD_LD7__SDMA_SDMA_DEBUG_PC_7			0x1cc 0x630 0x000 0x6 0x0 +#define MX35_PAD_LD8__IPU_DISPB_DAT_8				0x1d0 0x634 0x000 0x0 0x0 +#define MX35_PAD_LD8__GPIO2_8					0x1d0 0x634 0x8e0 0x5 0x0 +#define MX35_PAD_LD8__SDMA_SDMA_DEBUG_PC_8			0x1d0 0x634 0x000 0x6 0x0 +#define MX35_PAD_LD9__IPU_DISPB_DAT_9				0x1d4 0x638 0x000 0x0 0x0 +#define MX35_PAD_LD9__GPIO2_9					0x1d4 0x638 0x8e4 0x5 0x0 +#define MX35_PAD_LD9__SDMA_SDMA_DEBUG_PC_9			0x1d4 0x638 0x000 0x6 0x0 +#define MX35_PAD_LD10__IPU_DISPB_DAT_10				0x1d8 0x63c 0x000 0x0 0x0 +#define MX35_PAD_LD10__GPIO2_10					0x1d8 0x63c 0x86c 0x5 0x0 +#define MX35_PAD_LD10__SDMA_SDMA_DEBUG_PC_10			0x1d8 0x63c 0x000 0x6 0x0 +#define MX35_PAD_LD11__IPU_DISPB_DAT_11				0x1dc 0x640 0x000 0x0 0x0 +#define MX35_PAD_LD11__GPIO2_11					0x1dc 0x640 0x870 0x5 0x0 +#define MX35_PAD_LD11__SDMA_SDMA_DEBUG_PC_11			0x1dc 0x640 0x000 0x6 0x0 +#define MX35_PAD_LD11__ARM11P_TOP_TRACE_4			0x1dc 0x640 0x000 0x7 0x0 +#define MX35_PAD_LD12__IPU_DISPB_DAT_12				0x1e0 0x644 0x000 0x0 0x0 +#define MX35_PAD_LD12__GPIO2_12					0x1e0 0x644 0x874 0x5 0x0 +#define MX35_PAD_LD12__SDMA_SDMA_DEBUG_PC_12			0x1e0 0x644 0x000 0x6 0x0 +#define MX35_PAD_LD12__ARM11P_TOP_TRACE_5			0x1e0 0x644 0x000 0x7 0x0 +#define MX35_PAD_LD13__IPU_DISPB_DAT_13				0x1e4 0x648 0x000 0x0 0x0 +#define MX35_PAD_LD13__GPIO2_13					0x1e4 0x648 0x878 0x5 0x0 +#define MX35_PAD_LD13__SDMA_SDMA_DEBUG_PC_13			0x1e4 0x648 0x000 0x6 0x0 +#define MX35_PAD_LD13__ARM11P_TOP_TRACE_6			0x1e4 0x648 0x000 0x7 0x0 +#define MX35_PAD_LD14__IPU_DISPB_DAT_14				0x1e8 0x64c 0x000 0x0 0x0 +#define MX35_PAD_LD14__GPIO2_14					0x1e8 0x64c 0x87c 0x5 0x0 +#define MX35_PAD_LD14__SDMA_SDMA_DEBUG_EVENT_CHANNEL_0		0x1e8 0x64c 0x000 0x6 0x0 +#define MX35_PAD_LD14__ARM11P_TOP_TRACE_7			0x1e8 0x64c 0x000 0x7 0x0 +#define MX35_PAD_LD15__IPU_DISPB_DAT_15				0x1ec 0x650 0x000 0x0 0x0 +#define MX35_PAD_LD15__GPIO2_15					0x1ec 0x650 0x880 0x5 0x0 +#define MX35_PAD_LD15__SDMA_SDMA_DEBUG_EVENT_CHANNEL_1		0x1ec 0x650 0x000 0x6 0x0 +#define MX35_PAD_LD15__ARM11P_TOP_TRACE_8			0x1ec 0x650 0x000 0x7 0x0 +#define MX35_PAD_LD16__IPU_DISPB_DAT_16				0x1f0 0x654 0x000 0x0 0x0 +#define MX35_PAD_LD16__IPU_DISPB_D12_VSYNC			0x1f0 0x654 0x928 0x2 0x0 +#define MX35_PAD_LD16__GPIO2_16					0x1f0 0x654 0x884 0x5 0x0 +#define MX35_PAD_LD16__SDMA_SDMA_DEBUG_EVENT_CHANNEL_2		0x1f0 0x654 0x000 0x6 0x0 +#define MX35_PAD_LD16__ARM11P_TOP_TRACE_9			0x1f0 0x654 0x000 0x7 0x0 +#define MX35_PAD_LD17__IPU_DISPB_DAT_17				0x1f4 0x658 0x000 0x0 0x0 +#define MX35_PAD_LD17__IPU_DISPB_CS2				0x1f4 0x658 0x000 0x2 0x0 +#define MX35_PAD_LD17__GPIO2_17					0x1f4 0x658 0x888 0x5 0x0 +#define MX35_PAD_LD17__SDMA_SDMA_DEBUG_EVENT_CHANNEL_3		0x1f4 0x658 0x000 0x6 0x0 +#define MX35_PAD_LD17__ARM11P_TOP_TRACE_10			0x1f4 0x658 0x000 0x7 0x0 +#define MX35_PAD_LD18__IPU_DISPB_DAT_18				0x1f8 0x65c 0x000 0x0 0x0 +#define MX35_PAD_LD18__IPU_DISPB_D0_VSYNC			0x1f8 0x65c 0x924 0x1 0x1 +#define MX35_PAD_LD18__IPU_DISPB_D12_VSYNC			0x1f8 0x65c 0x928 0x2 0x1 +#define MX35_PAD_LD18__ESDHC3_CMD				0x1f8 0x65c 0x818 0x3 0x0 +#define MX35_PAD_LD18__USB_TOP_USBOTG_DATA_3			0x1f8 0x65c 0x9b0 0x4 0x0 +#define MX35_PAD_LD18__GPIO3_24					0x1f8 0x65c 0x000 0x5 0x0 +#define MX35_PAD_LD18__SDMA_SDMA_DEBUG_EVENT_CHANNEL_4		0x1f8 0x65c 0x000 0x6 0x0 +#define MX35_PAD_LD18__ARM11P_TOP_TRACE_11			0x1f8 0x65c 0x000 0x7 0x0 +#define MX35_PAD_LD19__IPU_DISPB_DAT_19				0x1fc 0x660 0x000 0x0 0x0 +#define MX35_PAD_LD19__IPU_DISPB_BCLK				0x1fc 0x660 0x000 0x1 0x0 +#define MX35_PAD_LD19__IPU_DISPB_CS1				0x1fc 0x660 0x000 0x2 0x0 +#define MX35_PAD_LD19__ESDHC3_CLK				0x1fc 0x660 0x814 0x3 0x0 +#define MX35_PAD_LD19__USB_TOP_USBOTG_DIR			0x1fc 0x660 0x9c4 0x4 0x0 +#define MX35_PAD_LD19__GPIO3_25					0x1fc 0x660 0x000 0x5 0x0 +#define MX35_PAD_LD19__SDMA_SDMA_DEBUG_EVENT_CHANNEL_5		0x1fc 0x660 0x000 0x6 0x0 +#define MX35_PAD_LD19__ARM11P_TOP_TRACE_12			0x1fc 0x660 0x000 0x7 0x0 +#define MX35_PAD_LD20__IPU_DISPB_DAT_20				0x200 0x664 0x000 0x0 0x0 +#define MX35_PAD_LD20__IPU_DISPB_CS0				0x200 0x664 0x000 0x1 0x0 +#define MX35_PAD_LD20__IPU_DISPB_SD_CLK				0x200 0x664 0x000 0x2 0x0 +#define MX35_PAD_LD20__ESDHC3_DAT0				0x200 0x664 0x81c 0x3 0x0 +#define MX35_PAD_LD20__GPIO3_26					0x200 0x664 0x000 0x5 0x0 +#define MX35_PAD_LD20__SDMA_SDMA_DEBUG_CORE_STATUS_3		0x200 0x664 0x000 0x6 0x0 +#define MX35_PAD_LD20__ARM11P_TOP_TRACE_13			0x200 0x664 0x000 0x7 0x0 +#define MX35_PAD_LD21__IPU_DISPB_DAT_21				0x204 0x668 0x000 0x0 0x0 +#define MX35_PAD_LD21__IPU_DISPB_PAR_RS				0x204 0x668 0x000 0x1 0x0 +#define MX35_PAD_LD21__IPU_DISPB_SER_RS				0x204 0x668 0x000 0x2 0x0 +#define MX35_PAD_LD21__ESDHC3_DAT1				0x204 0x668 0x820 0x3 0x0 +#define MX35_PAD_LD21__USB_TOP_USBOTG_STP			0x204 0x668 0x000 0x4 0x0 +#define MX35_PAD_LD21__GPIO3_27					0x204 0x668 0x000 0x5 0x0 +#define MX35_PAD_LD21__SDMA_DEBUG_EVENT_CHANNEL_SEL		0x204 0x668 0x000 0x6 0x0 +#define MX35_PAD_LD21__ARM11P_TOP_TRACE_14			0x204 0x668 0x000 0x7 0x0 +#define MX35_PAD_LD22__IPU_DISPB_DAT_22				0x208 0x66c 0x000 0x0 0x0 +#define MX35_PAD_LD22__IPU_DISPB_WR				0x208 0x66c 0x000 0x1 0x0 +#define MX35_PAD_LD22__IPU_DISPB_SD_D_I				0x208 0x66c 0x92c 0x2 0x0 +#define MX35_PAD_LD22__ESDHC3_DAT2				0x208 0x66c 0x824 0x3 0x0 +#define MX35_PAD_LD22__USB_TOP_USBOTG_NXT			0x208 0x66c 0x9c8 0x4 0x0 +#define MX35_PAD_LD22__GPIO3_28					0x208 0x66c 0x000 0x5 0x0 +#define MX35_PAD_LD22__SDMA_DEBUG_BUS_ERROR			0x208 0x66c 0x000 0x6 0x0 +#define MX35_PAD_LD22__ARM11P_TOP_TRCTL				0x208 0x66c 0x000 0x7 0x0 +#define MX35_PAD_LD23__IPU_DISPB_DAT_23				0x20c 0x670 0x000 0x0 0x0 +#define MX35_PAD_LD23__IPU_DISPB_RD				0x20c 0x670 0x000 0x1 0x0 +#define MX35_PAD_LD23__IPU_DISPB_SD_D_IO			0x20c 0x670 0x92c 0x2 0x1 +#define MX35_PAD_LD23__ESDHC3_DAT3				0x20c 0x670 0x828 0x3 0x0 +#define MX35_PAD_LD23__USB_TOP_USBOTG_DATA_7			0x20c 0x670 0x9c0 0x4 0x0 +#define MX35_PAD_LD23__GPIO3_29					0x20c 0x670 0x000 0x5 0x0 +#define MX35_PAD_LD23__SDMA_DEBUG_MATCHED_DMBUS			0x20c 0x670 0x000 0x6 0x0 +#define MX35_PAD_LD23__ARM11P_TOP_TRCLK				0x20c 0x670 0x000 0x7 0x0 +#define MX35_PAD_D3_HSYNC__IPU_DISPB_D3_HSYNC			0x210 0x674 0x000 0x0 0x0 +#define MX35_PAD_D3_HSYNC__IPU_DISPB_SD_D_IO			0x210 0x674 0x92c 0x2 0x2 +#define MX35_PAD_D3_HSYNC__GPIO3_30				0x210 0x674 0x000 0x5 0x0 +#define MX35_PAD_D3_HSYNC__SDMA_DEBUG_RTBUFFER_WRITE		0x210 0x674 0x000 0x6 0x0 +#define MX35_PAD_D3_HSYNC__ARM11P_TOP_TRACE_15			0x210 0x674 0x000 0x7 0x0 +#define MX35_PAD_D3_FPSHIFT__IPU_DISPB_D3_CLK			0x214 0x678 0x000 0x0 0x0 +#define MX35_PAD_D3_FPSHIFT__IPU_DISPB_SD_CLK			0x214 0x678 0x000 0x2 0x0 +#define MX35_PAD_D3_FPSHIFT__GPIO3_31				0x214 0x678 0x000 0x5 0x0 +#define MX35_PAD_D3_FPSHIFT__SDMA_SDMA_DEBUG_CORE_STATUS_0	0x214 0x678 0x000 0x6 0x0 +#define MX35_PAD_D3_FPSHIFT__ARM11P_TOP_TRACE_16		0x214 0x678 0x000 0x7 0x0 +#define MX35_PAD_D3_DRDY__IPU_DISPB_D3_DRDY			0x218 0x67c 0x000 0x0 0x0 +#define MX35_PAD_D3_DRDY__IPU_DISPB_SD_D_O			0x218 0x67c 0x000 0x2 0x0 +#define MX35_PAD_D3_DRDY__GPIO1_0				0x218 0x67c 0x82c 0x5 0x2 +#define MX35_PAD_D3_DRDY__SDMA_SDMA_DEBUG_CORE_STATUS_1		0x218 0x67c 0x000 0x6 0x0 +#define MX35_PAD_D3_DRDY__ARM11P_TOP_TRACE_17			0x218 0x67c 0x000 0x7 0x0 +#define MX35_PAD_CONTRAST__IPU_DISPB_CONTR			0x21c 0x680 0x000 0x0 0x0 +#define MX35_PAD_CONTRAST__GPIO1_1				0x21c 0x680 0x838 0x5 0x2 +#define MX35_PAD_CONTRAST__SDMA_SDMA_DEBUG_CORE_STATUS_2	0x21c 0x680 0x000 0x6 0x0 +#define MX35_PAD_CONTRAST__ARM11P_TOP_TRACE_18			0x21c 0x680 0x000 0x7 0x0 +#define MX35_PAD_D3_VSYNC__IPU_DISPB_D3_VSYNC			0x220 0x684 0x000 0x0 0x0 +#define MX35_PAD_D3_VSYNC__IPU_DISPB_CS1			0x220 0x684 0x000 0x2 0x0 +#define MX35_PAD_D3_VSYNC__GPIO1_2				0x220 0x684 0x848 0x5 0x1 +#define MX35_PAD_D3_VSYNC__SDMA_DEBUG_YIELD			0x220 0x684 0x000 0x6 0x0 +#define MX35_PAD_D3_VSYNC__ARM11P_TOP_TRACE_19			0x220 0x684 0x000 0x7 0x0 +#define MX35_PAD_D3_REV__IPU_DISPB_D3_REV			0x224 0x688 0x000 0x0 0x0 +#define MX35_PAD_D3_REV__IPU_DISPB_SER_RS			0x224 0x688 0x000 0x2 0x0 +#define MX35_PAD_D3_REV__GPIO1_3				0x224 0x688 0x84c 0x5 0x1 +#define MX35_PAD_D3_REV__SDMA_DEBUG_BUS_RWB			0x224 0x688 0x000 0x6 0x0 +#define MX35_PAD_D3_REV__ARM11P_TOP_TRACE_20			0x224 0x688 0x000 0x7 0x0 +#define MX35_PAD_D3_CLS__IPU_DISPB_D3_CLS			0x228 0x68c 0x000 0x0 0x0 +#define MX35_PAD_D3_CLS__IPU_DISPB_CS2				0x228 0x68c 0x000 0x2 0x0 +#define MX35_PAD_D3_CLS__GPIO1_4				0x228 0x68c 0x850 0x5 0x2 +#define MX35_PAD_D3_CLS__SDMA_DEBUG_BUS_DEVICE_0		0x228 0x68c 0x000 0x6 0x0 +#define MX35_PAD_D3_CLS__ARM11P_TOP_TRACE_21			0x228 0x68c 0x000 0x7 0x0 +#define MX35_PAD_D3_SPL__IPU_DISPB_D3_SPL			0x22c 0x690 0x000 0x0 0x0 +#define MX35_PAD_D3_SPL__IPU_DISPB_D12_VSYNC			0x22c 0x690 0x928 0x2 0x2 +#define MX35_PAD_D3_SPL__GPIO1_5				0x22c 0x690 0x854 0x5 0x2 +#define MX35_PAD_D3_SPL__SDMA_DEBUG_BUS_DEVICE_1		0x22c 0x690 0x000 0x6 0x0 +#define MX35_PAD_D3_SPL__ARM11P_TOP_TRACE_22			0x22c 0x690 0x000 0x7 0x0 +#define MX35_PAD_SD1_CMD__ESDHC1_CMD				0x230 0x694 0x000 0x0 0x0 +#define MX35_PAD_SD1_CMD__MSHC_SCLK				0x230 0x694 0x000 0x1 0x0 +#define MX35_PAD_SD1_CMD__IPU_DISPB_D0_VSYNC			0x230 0x694 0x924 0x3 0x2 +#define MX35_PAD_SD1_CMD__USB_TOP_USBOTG_DATA_4			0x230 0x694 0x9b4 0x4 0x0 +#define MX35_PAD_SD1_CMD__GPIO1_6				0x230 0x694 0x858 0x5 0x2 +#define MX35_PAD_SD1_CMD__ARM11P_TOP_TRCTL			0x230 0x694 0x000 0x7 0x0 +#define MX35_PAD_SD1_CLK__ESDHC1_CLK				0x234 0x698 0x000 0x0 0x0 +#define MX35_PAD_SD1_CLK__MSHC_BS				0x234 0x698 0x000 0x1 0x0 +#define MX35_PAD_SD1_CLK__IPU_DISPB_BCLK			0x234 0x698 0x000 0x3 0x0 +#define MX35_PAD_SD1_CLK__USB_TOP_USBOTG_DATA_5			0x234 0x698 0x9b8 0x4 0x0 +#define MX35_PAD_SD1_CLK__GPIO1_7				0x234 0x698 0x85c 0x5 0x2 +#define MX35_PAD_SD1_CLK__ARM11P_TOP_TRCLK			0x234 0x698 0x000 0x7 0x0 +#define MX35_PAD_SD1_DATA0__ESDHC1_DAT0				0x238 0x69c 0x000 0x0 0x0 +#define MX35_PAD_SD1_DATA0__MSHC_DATA_0				0x238 0x69c 0x000 0x1 0x0 +#define MX35_PAD_SD1_DATA0__IPU_DISPB_CS0			0x238 0x69c 0x000 0x3 0x0 +#define MX35_PAD_SD1_DATA0__USB_TOP_USBOTG_DATA_6		0x238 0x69c 0x9bc 0x4 0x0 +#define MX35_PAD_SD1_DATA0__GPIO1_8				0x238 0x69c 0x860 0x5 0x2 +#define MX35_PAD_SD1_DATA0__ARM11P_TOP_TRACE_23			0x238 0x69c 0x000 0x7 0x0 +#define MX35_PAD_SD1_DATA1__ESDHC1_DAT1				0x23c 0x6a0 0x000 0x0 0x0 +#define MX35_PAD_SD1_DATA1__MSHC_DATA_1				0x23c 0x6a0 0x000 0x1 0x0 +#define MX35_PAD_SD1_DATA1__IPU_DISPB_PAR_RS			0x23c 0x6a0 0x000 0x3 0x0 +#define MX35_PAD_SD1_DATA1__USB_TOP_USBOTG_DATA_0		0x23c 0x6a0 0x9a4 0x4 0x0 +#define MX35_PAD_SD1_DATA1__GPIO1_9				0x23c 0x6a0 0x864 0x5 0x1 +#define MX35_PAD_SD1_DATA1__ARM11P_TOP_TRACE_24			0x23c 0x6a0 0x000 0x7 0x0 +#define MX35_PAD_SD1_DATA2__ESDHC1_DAT2				0x240 0x6a4 0x000 0x0 0x0 +#define MX35_PAD_SD1_DATA2__MSHC_DATA_2				0x240 0x6a4 0x000 0x1 0x0 +#define MX35_PAD_SD1_DATA2__IPU_DISPB_WR			0x240 0x6a4 0x000 0x3 0x0 +#define MX35_PAD_SD1_DATA2__USB_TOP_USBOTG_DATA_1		0x240 0x6a4 0x9a8 0x4 0x0 +#define MX35_PAD_SD1_DATA2__GPIO1_10				0x240 0x6a4 0x830 0x5 0x1 +#define MX35_PAD_SD1_DATA2__ARM11P_TOP_TRACE_25			0x240 0x6a4 0x000 0x7 0x0 +#define MX35_PAD_SD1_DATA3__ESDHC1_DAT3				0x244 0x6a8 0x000 0x0 0x0 +#define MX35_PAD_SD1_DATA3__MSHC_DATA_3				0x244 0x6a8 0x000 0x1 0x0 +#define MX35_PAD_SD1_DATA3__IPU_DISPB_RD			0x244 0x6a8 0x000 0x3 0x0 +#define MX35_PAD_SD1_DATA3__USB_TOP_USBOTG_DATA_2		0x244 0x6a8 0x9ac 0x4 0x0 +#define MX35_PAD_SD1_DATA3__GPIO1_11				0x244 0x6a8 0x834 0x5 0x1 +#define MX35_PAD_SD1_DATA3__ARM11P_TOP_TRACE_26			0x244 0x6a8 0x000 0x7 0x0 +#define MX35_PAD_SD2_CMD__ESDHC2_CMD				0x248 0x6ac 0x000 0x0 0x0 +#define MX35_PAD_SD2_CMD__I2C3_SCL				0x248 0x6ac 0x91c 0x1 0x2 +#define MX35_PAD_SD2_CMD__ESDHC1_DAT4				0x248 0x6ac 0x804 0x2 0x0 +#define MX35_PAD_SD2_CMD__IPU_CSI_D_2				0x248 0x6ac 0x938 0x3 0x2 +#define MX35_PAD_SD2_CMD__USB_TOP_USBH2_DATA_4			0x248 0x6ac 0x9dc 0x4 0x0 +#define MX35_PAD_SD2_CMD__GPIO2_0				0x248 0x6ac 0x868 0x5 0x2 +#define MX35_PAD_SD2_CMD__SPDIF_SPDIF_OUT1			0x248 0x6ac 0x000 0x6 0x0 +#define MX35_PAD_SD2_CMD__IPU_DISPB_D12_VSYNC			0x248 0x6ac 0x928 0x7 0x3 +#define MX35_PAD_SD2_CLK__ESDHC2_CLK				0x24c 0x6b0 0x000 0x0 0x0 +#define MX35_PAD_SD2_CLK__I2C3_SDA				0x24c 0x6b0 0x920 0x1 0x2 +#define MX35_PAD_SD2_CLK__ESDHC1_DAT5				0x24c 0x6b0 0x808 0x2 0x0 +#define MX35_PAD_SD2_CLK__IPU_CSI_D_3				0x24c 0x6b0 0x93c 0x3 0x2 +#define MX35_PAD_SD2_CLK__USB_TOP_USBH2_DATA_5			0x24c 0x6b0 0x9e0 0x4 0x0 +#define MX35_PAD_SD2_CLK__GPIO2_1				0x24c 0x6b0 0x894 0x5 0x1 +#define MX35_PAD_SD2_CLK__SPDIF_SPDIF_IN1			0x24c 0x6b0 0x998 0x6 0x2 +#define MX35_PAD_SD2_CLK__IPU_DISPB_CS2				0x24c 0x6b0 0x000 0x7 0x0 +#define MX35_PAD_SD2_DATA0__ESDHC2_DAT0				0x250 0x6b4 0x000 0x0 0x0 +#define MX35_PAD_SD2_DATA0__UART3_RXD_MUX			0x250 0x6b4 0x9a0 0x1 0x1 +#define MX35_PAD_SD2_DATA0__ESDHC1_DAT6				0x250 0x6b4 0x80c 0x2 0x0 +#define MX35_PAD_SD2_DATA0__IPU_CSI_D_4				0x250 0x6b4 0x940 0x3 0x1 +#define MX35_PAD_SD2_DATA0__USB_TOP_USBH2_DATA_6		0x250 0x6b4 0x9e4 0x4 0x0 +#define MX35_PAD_SD2_DATA0__GPIO2_2				0x250 0x6b4 0x8c0 0x5 0x1 +#define MX35_PAD_SD2_DATA0__SPDIF_SPDIF_EXTCLK			0x250 0x6b4 0x994 0x6 0x3 +#define MX35_PAD_SD2_DATA1__ESDHC2_DAT1				0x254 0x6b8 0x000 0x0 0x0 +#define MX35_PAD_SD2_DATA1__UART3_TXD_MUX			0x254 0x6b8 0x000 0x1 0x0 +#define MX35_PAD_SD2_DATA1__ESDHC1_DAT7				0x254 0x6b8 0x810 0x2 0x0 +#define MX35_PAD_SD2_DATA1__IPU_CSI_D_5				0x254 0x6b8 0x944 0x3 0x1 +#define MX35_PAD_SD2_DATA1__USB_TOP_USBH2_DATA_0		0x254 0x6b8 0x9cc 0x4 0x0 +#define MX35_PAD_SD2_DATA1__GPIO2_3				0x254 0x6b8 0x8cc 0x5 0x1 +#define MX35_PAD_SD2_DATA2__ESDHC2_DAT2				0x258 0x6bc 0x000 0x0 0x0 +#define MX35_PAD_SD2_DATA2__UART3_RTS				0x258 0x6bc 0x99c 0x1 0x0 +#define MX35_PAD_SD2_DATA2__CAN1_RXCAN				0x258 0x6bc 0x7c8 0x2 0x1 +#define MX35_PAD_SD2_DATA2__IPU_CSI_D_6				0x258 0x6bc 0x948 0x3 0x1 +#define MX35_PAD_SD2_DATA2__USB_TOP_USBH2_DATA_1		0x258 0x6bc 0x9d0 0x4 0x0 +#define MX35_PAD_SD2_DATA2__GPIO2_4				0x258 0x6bc 0x8d0 0x5 0x1 +#define MX35_PAD_SD2_DATA3__ESDHC2_DAT3				0x25c 0x6c0 0x000 0x0 0x0 +#define MX35_PAD_SD2_DATA3__UART3_CTS				0x25c 0x6c0 0x000 0x1 0x0 +#define MX35_PAD_SD2_DATA3__CAN1_TXCAN				0x25c 0x6c0 0x000 0x2 0x0 +#define MX35_PAD_SD2_DATA3__IPU_CSI_D_7				0x25c 0x6c0 0x94c 0x3 0x1 +#define MX35_PAD_SD2_DATA3__USB_TOP_USBH2_DATA_2		0x25c 0x6c0 0x9d4 0x4 0x0 +#define MX35_PAD_SD2_DATA3__GPIO2_5				0x25c 0x6c0 0x8d4 0x5 0x1 +#define MX35_PAD_ATA_CS0__ATA_CS0				0x260 0x6c4 0x000 0x0 0x0 +#define MX35_PAD_ATA_CS0__CSPI1_SS3				0x260 0x6c4 0x7dc 0x1 0x1 +#define MX35_PAD_ATA_CS0__IPU_DISPB_CS1				0x260 0x6c4 0x000 0x3 0x0 +#define MX35_PAD_ATA_CS0__GPIO2_6				0x260 0x6c4 0x8d8 0x5 0x1 +#define MX35_PAD_ATA_CS0__IPU_DIAGB_0				0x260 0x6c4 0x000 0x6 0x0 +#define MX35_PAD_ATA_CS0__ARM11P_TOP_MAX1_HMASTER_0		0x260 0x6c4 0x000 0x7 0x0 +#define MX35_PAD_ATA_CS1__ATA_CS1				0x264 0x6c8 0x000 0x0 0x0 +#define MX35_PAD_ATA_CS1__IPU_DISPB_CS2				0x264 0x6c8 0x000 0x3 0x0 +#define MX35_PAD_ATA_CS1__CSPI2_SS0				0x264 0x6c8 0x7f0 0x4 0x1 +#define MX35_PAD_ATA_CS1__GPIO2_7				0x264 0x6c8 0x8dc 0x5 0x1 +#define MX35_PAD_ATA_CS1__IPU_DIAGB_1				0x264 0x6c8 0x000 0x6 0x0 +#define MX35_PAD_ATA_CS1__ARM11P_TOP_MAX1_HMASTER_1		0x264 0x6c8 0x000 0x7 0x0 +#define MX35_PAD_ATA_DIOR__ATA_DIOR				0x268 0x6cc 0x000 0x0 0x0 +#define MX35_PAD_ATA_DIOR__ESDHC3_DAT0				0x268 0x6cc 0x81c 0x1 0x1 +#define MX35_PAD_ATA_DIOR__USB_TOP_USBOTG_DIR			0x268 0x6cc 0x9c4 0x2 0x1 +#define MX35_PAD_ATA_DIOR__IPU_DISPB_BE0			0x268 0x6cc 0x000 0x3 0x0 +#define MX35_PAD_ATA_DIOR__CSPI2_SS1				0x268 0x6cc 0x7f4 0x4 0x1 +#define MX35_PAD_ATA_DIOR__GPIO2_8				0x268 0x6cc 0x8e0 0x5 0x1 +#define MX35_PAD_ATA_DIOR__IPU_DIAGB_2				0x268 0x6cc 0x000 0x6 0x0 +#define MX35_PAD_ATA_DIOR__ARM11P_TOP_MAX1_HMASTER_2		0x268 0x6cc 0x000 0x7 0x0 +#define MX35_PAD_ATA_DIOW__ATA_DIOW				0x26c 0x6d0 0x000 0x0 0x0 +#define MX35_PAD_ATA_DIOW__ESDHC3_DAT1				0x26c 0x6d0 0x820 0x1 0x1 +#define MX35_PAD_ATA_DIOW__USB_TOP_USBOTG_STP			0x26c 0x6d0 0x000 0x2 0x0 +#define MX35_PAD_ATA_DIOW__IPU_DISPB_BE1			0x26c 0x6d0 0x000 0x3 0x0 +#define MX35_PAD_ATA_DIOW__CSPI2_MOSI				0x26c 0x6d0 0x7ec 0x4 0x2 +#define MX35_PAD_ATA_DIOW__GPIO2_9				0x26c 0x6d0 0x8e4 0x5 0x1 +#define MX35_PAD_ATA_DIOW__IPU_DIAGB_3				0x26c 0x6d0 0x000 0x6 0x0 +#define MX35_PAD_ATA_DIOW__ARM11P_TOP_MAX1_HMASTER_3		0x26c 0x6d0 0x000 0x7 0x0 +#define MX35_PAD_ATA_DMACK__ATA_DMACK				0x270 0x6d4 0x000 0x0 0x0 +#define MX35_PAD_ATA_DMACK__ESDHC3_DAT2				0x270 0x6d4 0x824 0x1 0x1 +#define MX35_PAD_ATA_DMACK__USB_TOP_USBOTG_NXT			0x270 0x6d4 0x9c8 0x2 0x1 +#define MX35_PAD_ATA_DMACK__CSPI2_MISO				0x270 0x6d4 0x7e8 0x4 0x2 +#define MX35_PAD_ATA_DMACK__GPIO2_10				0x270 0x6d4 0x86c 0x5 0x1 +#define MX35_PAD_ATA_DMACK__IPU_DIAGB_4				0x270 0x6d4 0x000 0x6 0x0 +#define MX35_PAD_ATA_DMACK__ARM11P_TOP_MAX0_HMASTER_0		0x270 0x6d4 0x000 0x7 0x0 +#define MX35_PAD_ATA_RESET_B__ATA_RESET_B			0x274 0x6d8 0x000 0x0 0x0 +#define MX35_PAD_ATA_RESET_B__ESDHC3_DAT3			0x274 0x6d8 0x828 0x1 0x1 +#define MX35_PAD_ATA_RESET_B__USB_TOP_USBOTG_DATA_0		0x274 0x6d8 0x9a4 0x2 0x1 +#define MX35_PAD_ATA_RESET_B__IPU_DISPB_SD_D_O			0x274 0x6d8 0x000 0x3 0x0 +#define MX35_PAD_ATA_RESET_B__CSPI2_RDY				0x274 0x6d8 0x7e4 0x4 0x2 +#define MX35_PAD_ATA_RESET_B__GPIO2_11				0x274 0x6d8 0x870 0x5 0x1 +#define MX35_PAD_ATA_RESET_B__IPU_DIAGB_5			0x274 0x6d8 0x000 0x6 0x0 +#define MX35_PAD_ATA_RESET_B__ARM11P_TOP_MAX0_HMASTER_1		0x274 0x6d8 0x000 0x7 0x0 +#define MX35_PAD_ATA_IORDY__ATA_IORDY				0x278 0x6dc 0x000 0x0 0x0 +#define MX35_PAD_ATA_IORDY__ESDHC3_DAT4				0x278 0x6dc 0x000 0x1 0x0 +#define MX35_PAD_ATA_IORDY__USB_TOP_USBOTG_DATA_1		0x278 0x6dc 0x9a8 0x2 0x1 +#define MX35_PAD_ATA_IORDY__IPU_DISPB_SD_D_IO			0x278 0x6dc 0x92c 0x3 0x3 +#define MX35_PAD_ATA_IORDY__ESDHC2_DAT4				0x278 0x6dc 0x000 0x4 0x0 +#define MX35_PAD_ATA_IORDY__GPIO2_12				0x278 0x6dc 0x874 0x5 0x1 +#define MX35_PAD_ATA_IORDY__IPU_DIAGB_6				0x278 0x6dc 0x000 0x6 0x0 +#define MX35_PAD_ATA_IORDY__ARM11P_TOP_MAX0_HMASTER_2		0x278 0x6dc 0x000 0x7 0x0 +#define MX35_PAD_ATA_DATA0__ATA_DATA_0				0x27c 0x6e0 0x000 0x0 0x0 +#define MX35_PAD_ATA_DATA0__ESDHC3_DAT5				0x27c 0x6e0 0x000 0x1 0x0 +#define MX35_PAD_ATA_DATA0__USB_TOP_USBOTG_DATA_2		0x27c 0x6e0 0x9ac 0x2 0x1 +#define MX35_PAD_ATA_DATA0__IPU_DISPB_D12_VSYNC			0x27c 0x6e0 0x928 0x3 0x4 +#define MX35_PAD_ATA_DATA0__ESDHC2_DAT5				0x27c 0x6e0 0x000 0x4 0x0 +#define MX35_PAD_ATA_DATA0__GPIO2_13				0x27c 0x6e0 0x878 0x5 0x1 +#define MX35_PAD_ATA_DATA0__IPU_DIAGB_7				0x27c 0x6e0 0x000 0x6 0x0 +#define MX35_PAD_ATA_DATA0__ARM11P_TOP_MAX0_HMASTER_3		0x27c 0x6e0 0x000 0x7 0x0 +#define MX35_PAD_ATA_DATA1__ATA_DATA_1				0x280 0x6e4 0x000 0x0 0x0 +#define MX35_PAD_ATA_DATA1__ESDHC3_DAT6				0x280 0x6e4 0x000 0x1 0x0 +#define MX35_PAD_ATA_DATA1__USB_TOP_USBOTG_DATA_3		0x280 0x6e4 0x9b0 0x2 0x1 +#define MX35_PAD_ATA_DATA1__IPU_DISPB_SD_CLK			0x280 0x6e4 0x000 0x3 0x0 +#define MX35_PAD_ATA_DATA1__ESDHC2_DAT6				0x280 0x6e4 0x000 0x4 0x0 +#define MX35_PAD_ATA_DATA1__GPIO2_14				0x280 0x6e4 0x87c 0x5 0x1 +#define MX35_PAD_ATA_DATA1__IPU_DIAGB_8				0x280 0x6e4 0x000 0x6 0x0 +#define MX35_PAD_ATA_DATA1__ARM11P_TOP_TRACE_27			0x280 0x6e4 0x000 0x7 0x0 +#define MX35_PAD_ATA_DATA2__ATA_DATA_2				0x284 0x6e8 0x000 0x0 0x0 +#define MX35_PAD_ATA_DATA2__ESDHC3_DAT7				0x284 0x6e8 0x000 0x1 0x0 +#define MX35_PAD_ATA_DATA2__USB_TOP_USBOTG_DATA_4		0x284 0x6e8 0x9b4 0x2 0x1 +#define MX35_PAD_ATA_DATA2__IPU_DISPB_SER_RS			0x284 0x6e8 0x000 0x3 0x0 +#define MX35_PAD_ATA_DATA2__ESDHC2_DAT7				0x284 0x6e8 0x000 0x4 0x0 +#define MX35_PAD_ATA_DATA2__GPIO2_15				0x284 0x6e8 0x880 0x5 0x1 +#define MX35_PAD_ATA_DATA2__IPU_DIAGB_9				0x284 0x6e8 0x000 0x6 0x0 +#define MX35_PAD_ATA_DATA2__ARM11P_TOP_TRACE_28			0x284 0x6e8 0x000 0x7 0x0 +#define MX35_PAD_ATA_DATA3__ATA_DATA_3				0x288 0x6ec 0x000 0x0 0x0 +#define MX35_PAD_ATA_DATA3__ESDHC3_CLK				0x288 0x6ec 0x814 0x1 0x1 +#define MX35_PAD_ATA_DATA3__USB_TOP_USBOTG_DATA_5		0x288 0x6ec 0x9b8 0x2 0x1 +#define MX35_PAD_ATA_DATA3__CSPI2_SCLK				0x288 0x6ec 0x7e0 0x4 0x2 +#define MX35_PAD_ATA_DATA3__GPIO2_16				0x288 0x6ec 0x884 0x5 0x1 +#define MX35_PAD_ATA_DATA3__IPU_DIAGB_10			0x288 0x6ec 0x000 0x6 0x0 +#define MX35_PAD_ATA_DATA3__ARM11P_TOP_TRACE_29			0x288 0x6ec 0x000 0x7 0x0 +#define MX35_PAD_ATA_DATA4__ATA_DATA_4				0x28c 0x6f0 0x000 0x0 0x0 +#define MX35_PAD_ATA_DATA4__ESDHC3_CMD				0x28c 0x6f0 0x818 0x1 0x1 +#define MX35_PAD_ATA_DATA4__USB_TOP_USBOTG_DATA_6		0x28c 0x6f0 0x9bc 0x2 0x1 +#define MX35_PAD_ATA_DATA4__GPIO2_17				0x28c 0x6f0 0x888 0x5 0x1 +#define MX35_PAD_ATA_DATA4__IPU_DIAGB_11			0x28c 0x6f0 0x000 0x6 0x0 +#define MX35_PAD_ATA_DATA4__ARM11P_TOP_TRACE_30			0x28c 0x6f0 0x000 0x7 0x0 +#define MX35_PAD_ATA_DATA5__ATA_DATA_5				0x290 0x6f4 0x000 0x0 0x0 +#define MX35_PAD_ATA_DATA5__USB_TOP_USBOTG_DATA_7		0x290 0x6f4 0x9c0 0x2 0x1 +#define MX35_PAD_ATA_DATA5__GPIO2_18				0x290 0x6f4 0x88c 0x5 0x1 +#define MX35_PAD_ATA_DATA5__IPU_DIAGB_12			0x290 0x6f4 0x000 0x6 0x0 +#define MX35_PAD_ATA_DATA5__ARM11P_TOP_TRACE_31			0x290 0x6f4 0x000 0x7 0x0 +#define MX35_PAD_ATA_DATA6__ATA_DATA_6				0x294 0x6f8 0x000 0x0 0x0 +#define MX35_PAD_ATA_DATA6__CAN1_TXCAN				0x294 0x6f8 0x000 0x1 0x0 +#define MX35_PAD_ATA_DATA6__UART1_DTR				0x294 0x6f8 0x000 0x2 0x0 +#define MX35_PAD_ATA_DATA6__AUDMUX_AUD6_TXD			0x294 0x6f8 0x7b4 0x3 0x0 +#define MX35_PAD_ATA_DATA6__GPIO2_19				0x294 0x6f8 0x890 0x5 0x1 +#define MX35_PAD_ATA_DATA6__IPU_DIAGB_13			0x294 0x6f8 0x000 0x6 0x0 +#define MX35_PAD_ATA_DATA7__ATA_DATA_7				0x298 0x6fc 0x000 0x0 0x0 +#define MX35_PAD_ATA_DATA7__CAN1_RXCAN				0x298 0x6fc 0x7c8 0x1 0x2 +#define MX35_PAD_ATA_DATA7__UART1_DSR				0x298 0x6fc 0x000 0x2 0x0 +#define MX35_PAD_ATA_DATA7__AUDMUX_AUD6_RXD			0x298 0x6fc 0x7b0 0x3 0x0 +#define MX35_PAD_ATA_DATA7__GPIO2_20				0x298 0x6fc 0x898 0x5 0x1 +#define MX35_PAD_ATA_DATA7__IPU_DIAGB_14			0x298 0x6fc 0x000 0x6 0x0 +#define MX35_PAD_ATA_DATA8__ATA_DATA_8				0x29c 0x700 0x000 0x0 0x0 +#define MX35_PAD_ATA_DATA8__UART3_RTS				0x29c 0x700 0x99c 0x1 0x1 +#define MX35_PAD_ATA_DATA8__UART1_RI				0x29c 0x700 0x000 0x2 0x0 +#define MX35_PAD_ATA_DATA8__AUDMUX_AUD6_TXC			0x29c 0x700 0x7c0 0x3 0x0 +#define MX35_PAD_ATA_DATA8__GPIO2_21				0x29c 0x700 0x89c 0x5 0x1 +#define MX35_PAD_ATA_DATA8__IPU_DIAGB_15			0x29c 0x700 0x000 0x6 0x0 +#define MX35_PAD_ATA_DATA9__ATA_DATA_9				0x2a0 0x704 0x000 0x0 0x0 +#define MX35_PAD_ATA_DATA9__UART3_CTS				0x2a0 0x704 0x000 0x1 0x0 +#define MX35_PAD_ATA_DATA9__UART1_DCD				0x2a0 0x704 0x000 0x2 0x0 +#define MX35_PAD_ATA_DATA9__AUDMUX_AUD6_TXFS			0x2a0 0x704 0x7c4 0x3 0x0 +#define MX35_PAD_ATA_DATA9__GPIO2_22				0x2a0 0x704 0x8a0 0x5 0x1 +#define MX35_PAD_ATA_DATA9__IPU_DIAGB_16			0x2a0 0x704 0x000 0x6 0x0 +#define MX35_PAD_ATA_DATA10__ATA_DATA_10			0x2a4 0x708 0x000 0x0 0x0 +#define MX35_PAD_ATA_DATA10__UART3_RXD_MUX			0x2a4 0x708 0x9a0 0x1 0x2 +#define MX35_PAD_ATA_DATA10__AUDMUX_AUD6_RXC			0x2a4 0x708 0x7b8 0x3 0x0 +#define MX35_PAD_ATA_DATA10__GPIO2_23				0x2a4 0x708 0x8a4 0x5 0x1 +#define MX35_PAD_ATA_DATA10__IPU_DIAGB_17			0x2a4 0x708 0x000 0x6 0x0 +#define MX35_PAD_ATA_DATA11__ATA_DATA_11			0x2a8 0x70c 0x000 0x0 0x0 +#define MX35_PAD_ATA_DATA11__UART3_TXD_MUX			0x2a8 0x70c 0x000 0x1 0x0 +#define MX35_PAD_ATA_DATA11__AUDMUX_AUD6_RXFS			0x2a8 0x70c 0x7bc 0x3 0x0 +#define MX35_PAD_ATA_DATA11__GPIO2_24				0x2a8 0x70c 0x8a8 0x5 0x1 +#define MX35_PAD_ATA_DATA11__IPU_DIAGB_18			0x2a8 0x70c 0x000 0x6 0x0 +#define MX35_PAD_ATA_DATA12__ATA_DATA_12			0x2ac 0x710 0x000 0x0 0x0 +#define MX35_PAD_ATA_DATA12__I2C3_SCL				0x2ac 0x710 0x91c 0x1 0x3 +#define MX35_PAD_ATA_DATA12__GPIO2_25				0x2ac 0x710 0x8ac 0x5 0x1 +#define MX35_PAD_ATA_DATA12__IPU_DIAGB_19			0x2ac 0x710 0x000 0x6 0x0 +#define MX35_PAD_ATA_DATA13__ATA_DATA_13			0x2b0 0x714 0x000 0x0 0x0 +#define MX35_PAD_ATA_DATA13__I2C3_SDA				0x2b0 0x714 0x920 0x1 0x3 +#define MX35_PAD_ATA_DATA13__GPIO2_26				0x2b0 0x714 0x8b0 0x5 0x1 +#define MX35_PAD_ATA_DATA13__IPU_DIAGB_20			0x2b0 0x714 0x000 0x6 0x0 +#define MX35_PAD_ATA_DATA14__ATA_DATA_14			0x2b4 0x718 0x000 0x0 0x0 +#define MX35_PAD_ATA_DATA14__IPU_CSI_D_0			0x2b4 0x718 0x930 0x1 0x2 +#define MX35_PAD_ATA_DATA14__KPP_ROW_0				0x2b4 0x718 0x970 0x3 0x2 +#define MX35_PAD_ATA_DATA14__GPIO2_27				0x2b4 0x718 0x8b4 0x5 0x1 +#define MX35_PAD_ATA_DATA14__IPU_DIAGB_21			0x2b4 0x718 0x000 0x6 0x0 +#define MX35_PAD_ATA_DATA15__ATA_DATA_15			0x2b8 0x71c 0x000 0x0 0x0 +#define MX35_PAD_ATA_DATA15__IPU_CSI_D_1			0x2b8 0x71c 0x934 0x1 0x2 +#define MX35_PAD_ATA_DATA15__KPP_ROW_1				0x2b8 0x71c 0x974 0x3 0x2 +#define MX35_PAD_ATA_DATA15__GPIO2_28				0x2b8 0x71c 0x8b8 0x5 0x1 +#define MX35_PAD_ATA_DATA15__IPU_DIAGB_22			0x2b8 0x71c 0x000 0x6 0x0 +#define MX35_PAD_ATA_INTRQ__ATA_INTRQ				0x2bc 0x720 0x000 0x0 0x0 +#define MX35_PAD_ATA_INTRQ__IPU_CSI_D_2				0x2bc 0x720 0x938 0x1 0x3 +#define MX35_PAD_ATA_INTRQ__KPP_ROW_2				0x2bc 0x720 0x978 0x3 0x2 +#define MX35_PAD_ATA_INTRQ__GPIO2_29				0x2bc 0x720 0x8bc 0x5 0x1 +#define MX35_PAD_ATA_INTRQ__IPU_DIAGB_23			0x2bc 0x720 0x000 0x6 0x0 +#define MX35_PAD_ATA_BUFF_EN__ATA_BUFFER_EN			0x2c0 0x724 0x000 0x0 0x0 +#define MX35_PAD_ATA_BUFF_EN__IPU_CSI_D_3			0x2c0 0x724 0x93c 0x1 0x3 +#define MX35_PAD_ATA_BUFF_EN__KPP_ROW_3				0x2c0 0x724 0x97c 0x3 0x2 +#define MX35_PAD_ATA_BUFF_EN__GPIO2_30				0x2c0 0x724 0x8c4 0x5 0x1 +#define MX35_PAD_ATA_BUFF_EN__IPU_DIAGB_24			0x2c0 0x724 0x000 0x6 0x0 +#define MX35_PAD_ATA_DMARQ__ATA_DMARQ				0x2c4 0x728 0x000 0x0 0x0 +#define MX35_PAD_ATA_DMARQ__IPU_CSI_D_4				0x2c4 0x728 0x940 0x1 0x2 +#define MX35_PAD_ATA_DMARQ__KPP_COL_0				0x2c4 0x728 0x950 0x3 0x2 +#define MX35_PAD_ATA_DMARQ__GPIO2_31				0x2c4 0x728 0x8c8 0x5 0x1 +#define MX35_PAD_ATA_DMARQ__IPU_DIAGB_25			0x2c4 0x728 0x000 0x6 0x0 +#define MX35_PAD_ATA_DMARQ__ECT_CTI_TRIG_IN1_4			0x2c4 0x728 0x000 0x7 0x0 +#define MX35_PAD_ATA_DA0__ATA_DA_0				0x2c8 0x72c 0x000 0x0 0x0 +#define MX35_PAD_ATA_DA0__IPU_CSI_D_5				0x2c8 0x72c 0x944 0x1 0x2 +#define MX35_PAD_ATA_DA0__KPP_COL_1				0x2c8 0x72c 0x954 0x3 0x2 +#define MX35_PAD_ATA_DA0__GPIO3_0				0x2c8 0x72c 0x8e8 0x5 0x1 +#define MX35_PAD_ATA_DA0__IPU_DIAGB_26				0x2c8 0x72c 0x000 0x6 0x0 +#define MX35_PAD_ATA_DA0__ECT_CTI_TRIG_IN1_5			0x2c8 0x72c 0x000 0x7 0x0 +#define MX35_PAD_ATA_DA1__ATA_DA_1				0x2cc 0x730 0x000 0x0 0x0 +#define MX35_PAD_ATA_DA1__IPU_CSI_D_6				0x2cc 0x730 0x948 0x1 0x2 +#define MX35_PAD_ATA_DA1__KPP_COL_2				0x2cc 0x730 0x958 0x3 0x2 +#define MX35_PAD_ATA_DA1__GPIO3_1				0x2cc 0x730 0x000 0x5 0x0 +#define MX35_PAD_ATA_DA1__IPU_DIAGB_27				0x2cc 0x730 0x000 0x6 0x0 +#define MX35_PAD_ATA_DA1__ECT_CTI_TRIG_IN1_6			0x2cc 0x730 0x000 0x7 0x0 +#define MX35_PAD_ATA_DA2__ATA_DA_2				0x2d0 0x734 0x000 0x0 0x0 +#define MX35_PAD_ATA_DA2__IPU_CSI_D_7				0x2d0 0x734 0x94c 0x1 0x2 +#define MX35_PAD_ATA_DA2__KPP_COL_3				0x2d0 0x734 0x95c 0x3 0x2 +#define MX35_PAD_ATA_DA2__GPIO3_2				0x2d0 0x734 0x000 0x5 0x0 +#define MX35_PAD_ATA_DA2__IPU_DIAGB_28				0x2d0 0x734 0x000 0x6 0x0 +#define MX35_PAD_ATA_DA2__ECT_CTI_TRIG_IN1_7			0x2d0 0x734 0x000 0x7 0x0 +#define MX35_PAD_MLB_CLK__MLB_MLBCLK				0x2d4 0x738 0x000 0x0 0x0 +#define MX35_PAD_MLB_CLK__GPIO3_3				0x2d4 0x738 0x000 0x5 0x0 +#define MX35_PAD_MLB_DAT__MLB_MLBDAT				0x2d8 0x73c 0x000 0x0 0x0 +#define MX35_PAD_MLB_DAT__GPIO3_4				0x2d8 0x73c 0x904 0x5 0x1 +#define MX35_PAD_MLB_SIG__MLB_MLBSIG				0x2dc 0x740 0x000 0x0 0x0 +#define MX35_PAD_MLB_SIG__GPIO3_5				0x2dc 0x740 0x908 0x5 0x1 +#define MX35_PAD_FEC_TX_CLK__FEC_TX_CLK				0x2e0 0x744 0x000 0x0 0x0 +#define MX35_PAD_FEC_TX_CLK__ESDHC1_DAT4			0x2e0 0x744 0x804 0x1 0x1 +#define MX35_PAD_FEC_TX_CLK__UART3_RXD_MUX			0x2e0 0x744 0x9a0 0x2 0x3 +#define MX35_PAD_FEC_TX_CLK__USB_TOP_USBH2_DIR			0x2e0 0x744 0x9ec 0x3 0x1 +#define MX35_PAD_FEC_TX_CLK__CSPI2_MOSI				0x2e0 0x744 0x7ec 0x4 0x3 +#define MX35_PAD_FEC_TX_CLK__GPIO3_6				0x2e0 0x744 0x90c 0x5 0x1 +#define MX35_PAD_FEC_TX_CLK__IPU_DISPB_D12_VSYNC		0x2e0 0x744 0x928 0x6 0x5 +#define MX35_PAD_FEC_TX_CLK__ARM11P_TOP_EVNTBUS_0		0x2e0 0x744 0x000 0x7 0x0 +#define MX35_PAD_FEC_RX_CLK__FEC_RX_CLK				0x2e4 0x748 0x000 0x0 0x0 +#define MX35_PAD_FEC_RX_CLK__ESDHC1_DAT5			0x2e4 0x748 0x808 0x1 0x1 +#define MX35_PAD_FEC_RX_CLK__UART3_TXD_MUX			0x2e4 0x748 0x000 0x2 0x0 +#define MX35_PAD_FEC_RX_CLK__USB_TOP_USBH2_STP			0x2e4 0x748 0x000 0x3 0x0 +#define MX35_PAD_FEC_RX_CLK__CSPI2_MISO				0x2e4 0x748 0x7e8 0x4 0x3 +#define MX35_PAD_FEC_RX_CLK__GPIO3_7				0x2e4 0x748 0x910 0x5 0x1 +#define MX35_PAD_FEC_RX_CLK__IPU_DISPB_SD_D_I			0x2e4 0x748 0x92c 0x6 0x4 +#define MX35_PAD_FEC_RX_CLK__ARM11P_TOP_EVNTBUS_1		0x2e4 0x748 0x000 0x7 0x0 +#define MX35_PAD_FEC_RX_DV__FEC_RX_DV				0x2e8 0x74c 0x000 0x0 0x0 +#define MX35_PAD_FEC_RX_DV__ESDHC1_DAT6				0x2e8 0x74c 0x80c 0x1 0x1 +#define MX35_PAD_FEC_RX_DV__UART3_RTS				0x2e8 0x74c 0x99c 0x2 0x2 +#define MX35_PAD_FEC_RX_DV__USB_TOP_USBH2_NXT			0x2e8 0x74c 0x9f0 0x3 0x1 +#define MX35_PAD_FEC_RX_DV__CSPI2_SCLK				0x2e8 0x74c 0x7e0 0x4 0x3 +#define MX35_PAD_FEC_RX_DV__GPIO3_8				0x2e8 0x74c 0x914 0x5 0x1 +#define MX35_PAD_FEC_RX_DV__IPU_DISPB_SD_CLK			0x2e8 0x74c 0x000 0x6 0x0 +#define MX35_PAD_FEC_RX_DV__ARM11P_TOP_EVNTBUS_2		0x2e8 0x74c 0x000 0x7 0x0 +#define MX35_PAD_FEC_COL__FEC_COL				0x2ec 0x750 0x000 0x0 0x0 +#define MX35_PAD_FEC_COL__ESDHC1_DAT7				0x2ec 0x750 0x810 0x1 0x1 +#define MX35_PAD_FEC_COL__UART3_CTS				0x2ec 0x750 0x000 0x2 0x0 +#define MX35_PAD_FEC_COL__USB_TOP_USBH2_DATA_0			0x2ec 0x750 0x9cc 0x3 0x1 +#define MX35_PAD_FEC_COL__CSPI2_RDY				0x2ec 0x750 0x7e4 0x4 0x3 +#define MX35_PAD_FEC_COL__GPIO3_9				0x2ec 0x750 0x918 0x5 0x1 +#define MX35_PAD_FEC_COL__IPU_DISPB_SER_RS			0x2ec 0x750 0x000 0x6 0x0 +#define MX35_PAD_FEC_COL__ARM11P_TOP_EVNTBUS_3			0x2ec 0x750 0x000 0x7 0x0 +#define MX35_PAD_FEC_RDATA0__FEC_RDATA_0			0x2f0 0x754 0x000 0x0 0x0 +#define MX35_PAD_FEC_RDATA0__PWM_PWMO				0x2f0 0x754 0x000 0x1 0x0 +#define MX35_PAD_FEC_RDATA0__UART3_DTR				0x2f0 0x754 0x000 0x2 0x0 +#define MX35_PAD_FEC_RDATA0__USB_TOP_USBH2_DATA_1		0x2f0 0x754 0x9d0 0x3 0x1 +#define MX35_PAD_FEC_RDATA0__CSPI2_SS0				0x2f0 0x754 0x7f0 0x4 0x2 +#define MX35_PAD_FEC_RDATA0__GPIO3_10				0x2f0 0x754 0x8ec 0x5 0x1 +#define MX35_PAD_FEC_RDATA0__IPU_DISPB_CS1			0x2f0 0x754 0x000 0x6 0x0 +#define MX35_PAD_FEC_RDATA0__ARM11P_TOP_EVNTBUS_4		0x2f0 0x754 0x000 0x7 0x0 +#define MX35_PAD_FEC_TDATA0__FEC_TDATA_0			0x2f4 0x758 0x000 0x0 0x0 +#define MX35_PAD_FEC_TDATA0__SPDIF_SPDIF_OUT1			0x2f4 0x758 0x000 0x1 0x0 +#define MX35_PAD_FEC_TDATA0__UART3_DSR				0x2f4 0x758 0x000 0x2 0x0 +#define MX35_PAD_FEC_TDATA0__USB_TOP_USBH2_DATA_2		0x2f4 0x758 0x9d4 0x3 0x1 +#define MX35_PAD_FEC_TDATA0__CSPI2_SS1				0x2f4 0x758 0x7f4 0x4 0x2 +#define MX35_PAD_FEC_TDATA0__GPIO3_11				0x2f4 0x758 0x8f0 0x5 0x1 +#define MX35_PAD_FEC_TDATA0__IPU_DISPB_CS0			0x2f4 0x758 0x000 0x6 0x0 +#define MX35_PAD_FEC_TDATA0__ARM11P_TOP_EVNTBUS_5		0x2f4 0x758 0x000 0x7 0x0 +#define MX35_PAD_FEC_TX_EN__FEC_TX_EN				0x2f8 0x75c 0x000 0x0 0x0 +#define MX35_PAD_FEC_TX_EN__SPDIF_SPDIF_IN1			0x2f8 0x75c 0x998 0x1 0x3 +#define MX35_PAD_FEC_TX_EN__UART3_RI				0x2f8 0x75c 0x000 0x2 0x0 +#define MX35_PAD_FEC_TX_EN__USB_TOP_USBH2_DATA_3		0x2f8 0x75c 0x9d8 0x3 0x1 +#define MX35_PAD_FEC_TX_EN__GPIO3_12				0x2f8 0x75c 0x8f4 0x5 0x1 +#define MX35_PAD_FEC_TX_EN__IPU_DISPB_PAR_RS			0x2f8 0x75c 0x000 0x6 0x0 +#define MX35_PAD_FEC_TX_EN__ARM11P_TOP_EVNTBUS_6		0x2f8 0x75c 0x000 0x7 0x0 +#define MX35_PAD_FEC_MDC__FEC_MDC				0x2fc 0x760 0x000 0x0 0x0 +#define MX35_PAD_FEC_MDC__CAN2_TXCAN				0x2fc 0x760 0x000 0x1 0x0 +#define MX35_PAD_FEC_MDC__UART3_DCD				0x2fc 0x760 0x000 0x2 0x0 +#define MX35_PAD_FEC_MDC__USB_TOP_USBH2_DATA_4			0x2fc 0x760 0x9dc 0x3 0x1 +#define MX35_PAD_FEC_MDC__GPIO3_13				0x2fc 0x760 0x8f8 0x5 0x1 +#define MX35_PAD_FEC_MDC__IPU_DISPB_WR				0x2fc 0x760 0x000 0x6 0x0 +#define MX35_PAD_FEC_MDC__ARM11P_TOP_EVNTBUS_7			0x2fc 0x760 0x000 0x7 0x0 +#define MX35_PAD_FEC_MDIO__FEC_MDIO				0x300 0x764 0x000 0x0 0x0 +#define MX35_PAD_FEC_MDIO__CAN2_RXCAN				0x300 0x764 0x7cc 0x1 0x2 +#define MX35_PAD_FEC_MDIO__USB_TOP_USBH2_DATA_5			0x300 0x764 0x9e0 0x3 0x1 +#define MX35_PAD_FEC_MDIO__GPIO3_14				0x300 0x764 0x8fc 0x5 0x1 +#define MX35_PAD_FEC_MDIO__IPU_DISPB_RD				0x300 0x764 0x000 0x6 0x0 +#define MX35_PAD_FEC_MDIO__ARM11P_TOP_EVNTBUS_8			0x300 0x764 0x000 0x7 0x0 +#define MX35_PAD_FEC_TX_ERR__FEC_TX_ERR				0x304 0x768 0x000 0x0 0x0 +#define MX35_PAD_FEC_TX_ERR__OWIRE_LINE				0x304 0x768 0x990 0x1 0x2 +#define MX35_PAD_FEC_TX_ERR__SPDIF_SPDIF_EXTCLK			0x304 0x768 0x994 0x2 0x4 +#define MX35_PAD_FEC_TX_ERR__USB_TOP_USBH2_DATA_6		0x304 0x768 0x9e4 0x3 0x1 +#define MX35_PAD_FEC_TX_ERR__GPIO3_15				0x304 0x768 0x900 0x5 0x1 +#define MX35_PAD_FEC_TX_ERR__IPU_DISPB_D0_VSYNC			0x304 0x768 0x924 0x6 0x3 +#define MX35_PAD_FEC_TX_ERR__ARM11P_TOP_EVNTBUS_9		0x304 0x768 0x000 0x7 0x0 +#define MX35_PAD_FEC_RX_ERR__FEC_RX_ERR				0x308 0x76c 0x000 0x0 0x0 +#define MX35_PAD_FEC_RX_ERR__IPU_CSI_D_0			0x308 0x76c 0x930 0x1 0x3 +#define MX35_PAD_FEC_RX_ERR__USB_TOP_USBH2_DATA_7		0x308 0x76c 0x9e8 0x3 0x1 +#define MX35_PAD_FEC_RX_ERR__KPP_COL_4				0x308 0x76c 0x960 0x4 0x1 +#define MX35_PAD_FEC_RX_ERR__GPIO3_16				0x308 0x76c 0x000 0x5 0x0 +#define MX35_PAD_FEC_RX_ERR__IPU_DISPB_SD_D_IO			0x308 0x76c 0x92c 0x6 0x5 +#define MX35_PAD_FEC_CRS__FEC_CRS				0x30c 0x770 0x000 0x0 0x0 +#define MX35_PAD_FEC_CRS__IPU_CSI_D_1				0x30c 0x770 0x934 0x1 0x3 +#define MX35_PAD_FEC_CRS__USB_TOP_USBH2_PWR			0x30c 0x770 0x000 0x3 0x0 +#define MX35_PAD_FEC_CRS__KPP_COL_5				0x30c 0x770 0x964 0x4 0x1 +#define MX35_PAD_FEC_CRS__GPIO3_17				0x30c 0x770 0x000 0x5 0x0 +#define MX35_PAD_FEC_CRS__IPU_FLASH_STROBE			0x30c 0x770 0x000 0x6 0x0 +#define MX35_PAD_FEC_RDATA1__FEC_RDATA_1			0x310 0x774 0x000 0x0 0x0 +#define MX35_PAD_FEC_RDATA1__IPU_CSI_D_2			0x310 0x774 0x938 0x1 0x4 +#define MX35_PAD_FEC_RDATA1__AUDMUX_AUD6_RXC			0x310 0x774 0x000 0x2 0x0 +#define MX35_PAD_FEC_RDATA1__USB_TOP_USBH2_OC			0x310 0x774 0x9f4 0x3 0x2 +#define MX35_PAD_FEC_RDATA1__KPP_COL_6				0x310 0x774 0x968 0x4 0x1 +#define MX35_PAD_FEC_RDATA1__GPIO3_18				0x310 0x774 0x000 0x5 0x0 +#define MX35_PAD_FEC_RDATA1__IPU_DISPB_BE0			0x310 0x774 0x000 0x6 0x0 +#define MX35_PAD_FEC_TDATA1__FEC_TDATA_1			0x314 0x778 0x000 0x0 0x0 +#define MX35_PAD_FEC_TDATA1__IPU_CSI_D_3			0x314 0x778 0x93c 0x1 0x4 +#define MX35_PAD_FEC_TDATA1__AUDMUX_AUD6_RXFS			0x314 0x778 0x7bc 0x2 0x1 +#define MX35_PAD_FEC_TDATA1__KPP_COL_7				0x314 0x778 0x96c 0x4 0x1 +#define MX35_PAD_FEC_TDATA1__GPIO3_19				0x314 0x778 0x000 0x5 0x0 +#define MX35_PAD_FEC_TDATA1__IPU_DISPB_BE1			0x314 0x778 0x000 0x6 0x0 +#define MX35_PAD_FEC_RDATA2__FEC_RDATA_2			0x318 0x77c 0x000 0x0 0x0 +#define MX35_PAD_FEC_RDATA2__IPU_CSI_D_4			0x318 0x77c 0x940 0x1 0x3 +#define MX35_PAD_FEC_RDATA2__AUDMUX_AUD6_TXD			0x318 0x77c 0x7b4 0x2 0x1 +#define MX35_PAD_FEC_RDATA2__KPP_ROW_4				0x318 0x77c 0x980 0x4 0x1 +#define MX35_PAD_FEC_RDATA2__GPIO3_20				0x318 0x77c 0x000 0x5 0x0 +#define MX35_PAD_FEC_TDATA2__FEC_TDATA_2			0x31c 0x780 0x000 0x0 0x0 +#define MX35_PAD_FEC_TDATA2__IPU_CSI_D_5			0x31c 0x780 0x944 0x1 0x3 +#define MX35_PAD_FEC_TDATA2__AUDMUX_AUD6_RXD			0x31c 0x780 0x7b0 0x2 0x1 +#define MX35_PAD_FEC_TDATA2__KPP_ROW_5				0x31c 0x780 0x984 0x4 0x1 +#define MX35_PAD_FEC_TDATA2__GPIO3_21				0x31c 0x780 0x000 0x5 0x0 +#define MX35_PAD_FEC_RDATA3__FEC_RDATA_3			0x320 0x784 0x000 0x0 0x0 +#define MX35_PAD_FEC_RDATA3__IPU_CSI_D_6			0x320 0x784 0x948 0x1 0x3 +#define MX35_PAD_FEC_RDATA3__AUDMUX_AUD6_TXC			0x320 0x784 0x7c0 0x2 0x1 +#define MX35_PAD_FEC_RDATA3__KPP_ROW_6				0x320 0x784 0x988 0x4 0x1 +#define MX35_PAD_FEC_RDATA3__GPIO3_22				0x320 0x784 0x000 0x6 0x0 +#define MX35_PAD_FEC_TDATA3__FEC_TDATA_3			0x324 0x788 0x000 0x0 0x0 +#define MX35_PAD_FEC_TDATA3__IPU_CSI_D_7			0x324 0x788 0x94c 0x1 0x3 +#define MX35_PAD_FEC_TDATA3__AUDMUX_AUD6_TXFS			0x324 0x788 0x7c4 0x2 0x1 +#define MX35_PAD_FEC_TDATA3__KPP_ROW_7				0x324 0x788 0x98c 0x4 0x1 +#define MX35_PAD_FEC_TDATA3__GPIO3_23				0x324 0x788 0x000 0x5 0x0 +#define MX35_PAD_EXT_ARMCLK__CCM_EXT_ARMCLK			0x000 0x78c 0x000 0x0 0x0 +#define MX35_PAD_TEST_MODE__TCU_TEST_MODE			0x000 0x790 0x000 0x0 0x0 + +#endif /* __DTS_IMX35_PINFUNC_H */ diff --git a/arch/arm/boot/dts/imx51-apf51.dts b/arch/arm/boot/dts/imx51-apf51.dts index 92d3a66a69e..2bcf6981d49 100644 --- a/arch/arm/boot/dts/imx51-apf51.dts +++ b/arch/arm/boot/dts/imx51-apf51.dts @@ -15,7 +15,7 @@   */  /dts-v1/; -/include/ "imx51.dtsi" +#include "imx51.dtsi"  / {  	model = "Armadeus Systems APF51 module"; diff --git a/arch/arm/boot/dts/imx51-apf51dev.dts b/arch/arm/boot/dts/imx51-apf51dev.dts new file mode 100644 index 00000000000..123fe84e0e8 --- /dev/null +++ b/arch/arm/boot/dts/imx51-apf51dev.dts @@ -0,0 +1,97 @@ +/* + * Copyright 2013 Armadeus Systems - <support@armadeus.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 + */ + +/* APF51Dev is a docking board for the APF51 SOM */ +#include "imx51-apf51.dts" + +/ { +	model = "Armadeus Systems APF51Dev docking/development board"; +	compatible = "armadeus,imx51-apf51dev", "armadeus,imx51-apf51", "fsl,imx51"; + +	gpio-keys { +		compatible = "gpio-keys"; + +		user-key { +			label = "user"; +			gpios = <&gpio1 3 0>; +			linux,code = <256>; /* BTN_0 */ +		}; +	}; + +	leds { +		compatible = "gpio-leds"; + +		user { +			label = "Heartbeat"; +			gpios = <&gpio1 2 0>; +			linux,default-trigger = "heartbeat"; +		}; +	}; +}; + +&ecspi1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_ecspi1_1>; +	fsl,spi-num-chipselects = <2>; +	cs-gpios = <&gpio4 24 0>, <&gpio4 25 0>; +	status = "okay"; +}; + +&ecspi2 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_ecspi2_1>; +	fsl,spi-num-chipselects = <2>; +	cs-gpios = <&gpio3 28 1>, <&gpio3 27 1>; +	status = "okay"; +}; + +&esdhc1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_esdhc1_1>; +	cd-gpios = <&gpio2 29 0>; +	bus-width = <4>; +	status = "okay"; +}; + +&esdhc2 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_esdhc2_1>; +	bus-width = <4>; +	non-removable; +	status = "okay"; +}; + +&i2c2 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_i2c2_2>; +	status = "okay"; +}; + +&iomuxc { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_hog>; + +	hog { +		pinctrl_hog: hoggrp { +			fsl,pins = < +				MX51_PAD_EIM_EB2__GPIO2_22   0x0C5 +				MX51_PAD_EIM_EB3__GPIO2_23   0x0C5 +				MX51_PAD_EIM_CS4__GPIO2_29   0x100 +				MX51_PAD_NANDF_D13__GPIO3_27 0x0C5 +				MX51_PAD_NANDF_D12__GPIO3_28 0x0C5 +				MX51_PAD_CSPI1_SS0__GPIO4_24 0x0C5 +				MX51_PAD_CSPI1_SS1__GPIO4_25 0x0C5 +				MX51_PAD_GPIO1_2__GPIO1_2    0x0C5 +				MX51_PAD_GPIO1_3__GPIO1_3    0x0C5 +			>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/imx51-babbage.dts b/arch/arm/boot/dts/imx51-babbage.dts index aab6e43219a..6dd9486c755 100644 --- a/arch/arm/boot/dts/imx51-babbage.dts +++ b/arch/arm/boot/dts/imx51-babbage.dts @@ -11,7 +11,7 @@   */  /dts-v1/; -/include/ "imx51.dtsi" +#include "imx51.dtsi"  / {  	model = "Freescale i.MX51 Babbage Board"; @@ -222,13 +222,13 @@  	hog {  		pinctrl_hog: hoggrp {  			fsl,pins = < -				694  0x20d5	/* MX51_PAD_GPIO1_0__SD1_CD */ -				697  0x20d5	/* MX51_PAD_GPIO1_1__SD1_WP */ -				737  0x100	/* MX51_PAD_GPIO1_5__GPIO1_5 */ -				740  0x100	/* MX51_PAD_GPIO1_6__GPIO1_6 */ -				121  0x5	/* MX51_PAD_EIM_A27__GPIO2_21 */ -				402  0x85	/* MX51_PAD_CSPI1_SS0__GPIO4_24 */ -				405  0x85	/* MX51_PAD_CSPI1_SS1__GPIO4_25 */ +				MX51_PAD_GPIO1_0__SD1_CD     0x20d5 +				MX51_PAD_GPIO1_1__SD1_WP     0x20d5 +				MX51_PAD_GPIO1_5__GPIO1_5    0x100 +				MX51_PAD_GPIO1_6__GPIO1_6    0x100 +				MX51_PAD_EIM_A27__GPIO2_21   0x5 +				MX51_PAD_CSPI1_SS0__GPIO4_24 0x85 +				MX51_PAD_CSPI1_SS1__GPIO4_25 0x85  			>;  		};  	}; diff --git a/arch/arm/boot/dts/imx51-pinfunc.h b/arch/arm/boot/dts/imx51-pinfunc.h new file mode 100644 index 00000000000..9eb92abaeb6 --- /dev/null +++ b/arch/arm/boot/dts/imx51-pinfunc.h @@ -0,0 +1,773 @@ +/* + * Copyright 2013 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. + * + */ + +#ifndef __DTS_IMX51_PINFUNC_H +#define __DTS_IMX51_PINFUNC_H + +/* + * The pin function ID is a tuple of + * <mux_reg conf_reg input_reg mux_mode input_val> + */ +#define MX51_PAD_EIM_D16__AUD4_RXFS			0x05c 0x3f0 0x000 0x5 0x0 +#define MX51_PAD_EIM_D16__AUD5_TXD			0x05c 0x3f0 0x8d8 0x7 0x0 +#define MX51_PAD_EIM_D16__EIM_D16			0x05c 0x3f0 0x000 0x0 0x0 +#define MX51_PAD_EIM_D16__GPIO2_0			0x05c 0x3f0 0x000 0x1 0x0 +#define MX51_PAD_EIM_D16__I2C1_SDA			0x05c 0x3f0 0x9b4 0x4 0x0 +#define MX51_PAD_EIM_D16__UART2_CTS			0x05c 0x3f0 0x000 0x3 0x0 +#define MX51_PAD_EIM_D16__USBH2_DATA0			0x05c 0x3f0 0x000 0x2 0x0 +#define MX51_PAD_EIM_D17__AUD5_RXD			0x060 0x3f4 0x8d4 0x7 0x0 +#define MX51_PAD_EIM_D17__EIM_D17			0x060 0x3f4 0x000 0x0 0x0 +#define MX51_PAD_EIM_D17__GPIO2_1			0x060 0x3f4 0x000 0x1 0x0 +#define MX51_PAD_EIM_D17__UART2_RXD			0x060 0x3f4 0x9ec 0x3 0x0 +#define MX51_PAD_EIM_D17__UART3_CTS			0x060 0x3f4 0x000 0x4 0x0 +#define MX51_PAD_EIM_D17__USBH2_DATA1			0x060 0x3f4 0x000 0x2 0x0 +#define MX51_PAD_EIM_D18__AUD5_TXC			0x064 0x3f8 0x8e4 0x7 0x0 +#define MX51_PAD_EIM_D18__EIM_D18			0x064 0x3f8 0x000 0x0 0x0 +#define MX51_PAD_EIM_D18__GPIO2_2			0x064 0x3f8 0x000 0x1 0x0 +#define MX51_PAD_EIM_D18__UART2_TXD			0x064 0x3f8 0x000 0x3 0x0 +#define MX51_PAD_EIM_D18__UART3_RTS			0x064 0x3f8 0x9f0 0x4 0x1 +#define MX51_PAD_EIM_D18__USBH2_DATA2			0x064 0x3f8 0x000 0x2 0x0 +#define MX51_PAD_EIM_D19__AUD4_RXC			0x068 0x3fc 0x000 0x5 0x0 +#define MX51_PAD_EIM_D19__AUD5_TXFS			0x068 0x3fc 0x8e8 0x7 0x0 +#define MX51_PAD_EIM_D19__EIM_D19			0x068 0x3fc 0x000 0x0 0x0 +#define MX51_PAD_EIM_D19__GPIO2_3			0x068 0x3fc 0x000 0x1 0x0 +#define MX51_PAD_EIM_D19__I2C1_SCL			0x068 0x3fc 0x9b0 0x4 0x0 +#define MX51_PAD_EIM_D19__UART2_RTS			0x068 0x3fc 0x9e8 0x3 0x1 +#define MX51_PAD_EIM_D19__USBH2_DATA3			0x068 0x3fc 0x000 0x2 0x0 +#define MX51_PAD_EIM_D20__AUD4_TXD			0x06c 0x400 0x8c8 0x5 0x0 +#define MX51_PAD_EIM_D20__EIM_D20			0x06c 0x400 0x000 0x0 0x0 +#define MX51_PAD_EIM_D20__GPIO2_4			0x06c 0x400 0x000 0x1 0x0 +#define MX51_PAD_EIM_D20__SRTC_ALARM_DEB		0x06c 0x400 0x000 0x4 0x0 +#define MX51_PAD_EIM_D20__USBH2_DATA4			0x06c 0x400 0x000 0x2 0x0 +#define MX51_PAD_EIM_D21__AUD4_RXD			0x070 0x404 0x8c4 0x5 0x0 +#define MX51_PAD_EIM_D21__EIM_D21			0x070 0x404 0x000 0x0 0x0 +#define MX51_PAD_EIM_D21__GPIO2_5			0x070 0x404 0x000 0x1 0x0 +#define MX51_PAD_EIM_D21__SRTC_ALARM_DEB		0x070 0x404 0x000 0x3 0x0 +#define MX51_PAD_EIM_D21__USBH2_DATA5			0x070 0x404 0x000 0x2 0x0 +#define MX51_PAD_EIM_D22__AUD4_TXC			0x074 0x408 0x8cc 0x5 0x0 +#define MX51_PAD_EIM_D22__EIM_D22			0x074 0x408 0x000 0x0 0x0 +#define MX51_PAD_EIM_D22__GPIO2_6			0x074 0x408 0x000 0x1 0x0 +#define MX51_PAD_EIM_D22__USBH2_DATA6			0x074 0x408 0x000 0x2 0x0 +#define MX51_PAD_EIM_D23__AUD4_TXFS			0x078 0x40c 0x8d0 0x5 0x0 +#define MX51_PAD_EIM_D23__EIM_D23			0x078 0x40c 0x000 0x0 0x0 +#define MX51_PAD_EIM_D23__GPIO2_7			0x078 0x40c 0x000 0x1 0x0 +#define MX51_PAD_EIM_D23__SPDIF_OUT1			0x078 0x40c 0x000 0x4 0x0 +#define MX51_PAD_EIM_D23__USBH2_DATA7			0x078 0x40c 0x000 0x2 0x0 +#define MX51_PAD_EIM_D24__AUD6_RXFS			0x07c 0x410 0x8f8 0x5 0x0 +#define MX51_PAD_EIM_D24__EIM_D24			0x07c 0x410 0x000 0x0 0x0 +#define MX51_PAD_EIM_D24__GPIO2_8			0x07c 0x410 0x000 0x1 0x0 +#define MX51_PAD_EIM_D24__I2C2_SDA			0x07c 0x410 0x9bc 0x4 0x0 +#define MX51_PAD_EIM_D24__UART3_CTS			0x07c 0x410 0x000 0x3 0x0 +#define MX51_PAD_EIM_D24__USBOTG_DATA0			0x07c 0x410 0x000 0x2 0x0 +#define MX51_PAD_EIM_D25__EIM_D25			0x080 0x414 0x000 0x0 0x0 +#define MX51_PAD_EIM_D25__KEY_COL6			0x080 0x414 0x9c8 0x1 0x0 +#define MX51_PAD_EIM_D25__UART2_CTS			0x080 0x414 0x000 0x4 0x0 +#define MX51_PAD_EIM_D25__UART3_RXD			0x080 0x414 0x9f4 0x3 0x0 +#define MX51_PAD_EIM_D25__USBOTG_DATA1			0x080 0x414 0x000 0x2 0x0 +#define MX51_PAD_EIM_D26__EIM_D26			0x084 0x418 0x000 0x0 0x0 +#define MX51_PAD_EIM_D26__KEY_COL7			0x084 0x418 0x9cc 0x1 0x0 +#define MX51_PAD_EIM_D26__UART2_RTS			0x084 0x418 0x9e8 0x4 0x3 +#define MX51_PAD_EIM_D26__UART3_TXD			0x084 0x418 0x000 0x3 0x0 +#define MX51_PAD_EIM_D26__USBOTG_DATA2			0x084 0x418 0x000 0x2 0x0 +#define MX51_PAD_EIM_D27__AUD6_RXC			0x088 0x41c 0x8f4 0x5 0x0 +#define MX51_PAD_EIM_D27__EIM_D27			0x088 0x41c 0x000 0x0 0x0 +#define MX51_PAD_EIM_D27__GPIO2_9			0x088 0x41c 0x000 0x1 0x0 +#define MX51_PAD_EIM_D27__I2C2_SCL			0x088 0x41c 0x9b8 0x4 0x0 +#define MX51_PAD_EIM_D27__UART3_RTS			0x088 0x41c 0x9f0 0x3 0x3 +#define MX51_PAD_EIM_D27__USBOTG_DATA3			0x088 0x41c 0x000 0x2 0x0 +#define MX51_PAD_EIM_D28__AUD6_TXD			0x08c 0x420 0x8f0 0x5 0x0 +#define MX51_PAD_EIM_D28__EIM_D28			0x08c 0x420 0x000 0x0 0x0 +#define MX51_PAD_EIM_D28__KEY_ROW4			0x08c 0x420 0x9d0 0x1 0x0 +#define MX51_PAD_EIM_D28__USBOTG_DATA4			0x08c 0x420 0x000 0x2 0x0 +#define MX51_PAD_EIM_D29__AUD6_RXD			0x090 0x424 0x8ec 0x5 0x0 +#define MX51_PAD_EIM_D29__EIM_D29			0x090 0x424 0x000 0x0 0x0 +#define MX51_PAD_EIM_D29__KEY_ROW5			0x090 0x424 0x9d4 0x1 0x0 +#define MX51_PAD_EIM_D29__USBOTG_DATA5			0x090 0x424 0x000 0x2 0x0 +#define MX51_PAD_EIM_D30__AUD6_TXC			0x094 0x428 0x8fc 0x5 0x0 +#define MX51_PAD_EIM_D30__EIM_D30			0x094 0x428 0x000 0x0 0x0 +#define MX51_PAD_EIM_D30__KEY_ROW6			0x094 0x428 0x9d8 0x1 0x0 +#define MX51_PAD_EIM_D30__USBOTG_DATA6			0x094 0x428 0x000 0x2 0x0 +#define MX51_PAD_EIM_D31__AUD6_TXFS			0x098 0x42c 0x900 0x5 0x0 +#define MX51_PAD_EIM_D31__EIM_D31			0x098 0x42c 0x000 0x0 0x0 +#define MX51_PAD_EIM_D31__KEY_ROW7			0x098 0x42c 0x9dc 0x1 0x0 +#define MX51_PAD_EIM_D31__USBOTG_DATA7			0x098 0x42c 0x000 0x2 0x0 +#define MX51_PAD_EIM_A16__EIM_A16			0x09c 0x430 0x000 0x0 0x0 +#define MX51_PAD_EIM_A16__GPIO2_10			0x09c 0x430 0x000 0x1 0x0 +#define MX51_PAD_EIM_A16__OSC_FREQ_SEL0			0x09c 0x430 0x000 0x7 0x0 +#define MX51_PAD_EIM_A17__EIM_A17			0x0a0 0x434 0x000 0x0 0x0 +#define MX51_PAD_EIM_A17__GPIO2_11			0x0a0 0x434 0x000 0x1 0x0 +#define MX51_PAD_EIM_A17__OSC_FREQ_SEL1			0x0a0 0x434 0x000 0x7 0x0 +#define MX51_PAD_EIM_A18__BOOT_LPB0			0x0a4 0x438 0x000 0x7 0x0 +#define MX51_PAD_EIM_A18__EIM_A18			0x0a4 0x438 0x000 0x0 0x0 +#define MX51_PAD_EIM_A18__GPIO2_12			0x0a4 0x438 0x000 0x1 0x0 +#define MX51_PAD_EIM_A19__BOOT_LPB1			0x0a8 0x43c 0x000 0x7 0x0 +#define MX51_PAD_EIM_A19__EIM_A19			0x0a8 0x43c 0x000 0x0 0x0 +#define MX51_PAD_EIM_A19__GPIO2_13			0x0a8 0x43c 0x000 0x1 0x0 +#define MX51_PAD_EIM_A20__BOOT_UART_SRC0		0x0ac 0x440 0x000 0x7 0x0 +#define MX51_PAD_EIM_A20__EIM_A20			0x0ac 0x440 0x000 0x0 0x0 +#define MX51_PAD_EIM_A20__GPIO2_14			0x0ac 0x440 0x000 0x1 0x0 +#define MX51_PAD_EIM_A21__BOOT_UART_SRC1		0x0b0 0x444 0x000 0x7 0x0 +#define MX51_PAD_EIM_A21__EIM_A21			0x0b0 0x444 0x000 0x0 0x0 +#define MX51_PAD_EIM_A21__GPIO2_15			0x0b0 0x444 0x000 0x1 0x0 +#define MX51_PAD_EIM_A22__EIM_A22			0x0b4 0x448 0x000 0x0 0x0 +#define MX51_PAD_EIM_A22__GPIO2_16			0x0b4 0x448 0x000 0x1 0x0 +#define MX51_PAD_EIM_A23__BOOT_HPN_EN			0x0b8 0x44c 0x000 0x7 0x0 +#define MX51_PAD_EIM_A23__EIM_A23			0x0b8 0x44c 0x000 0x0 0x0 +#define MX51_PAD_EIM_A23__GPIO2_17			0x0b8 0x44c 0x000 0x1 0x0 +#define MX51_PAD_EIM_A24__EIM_A24			0x0bc 0x450 0x000 0x0 0x0 +#define MX51_PAD_EIM_A24__GPIO2_18			0x0bc 0x450 0x000 0x1 0x0 +#define MX51_PAD_EIM_A24__USBH2_CLK			0x0bc 0x450 0x000 0x2 0x0 +#define MX51_PAD_EIM_A25__DISP1_PIN4			0x0c0 0x454 0x000 0x6 0x0 +#define MX51_PAD_EIM_A25__EIM_A25			0x0c0 0x454 0x000 0x0 0x0 +#define MX51_PAD_EIM_A25__GPIO2_19			0x0c0 0x454 0x000 0x1 0x0 +#define MX51_PAD_EIM_A25__USBH2_DIR			0x0c0 0x454 0x000 0x2 0x0 +#define MX51_PAD_EIM_A26__CSI1_DATA_EN			0x0c4 0x458 0x9a0 0x5 0x0 +#define MX51_PAD_EIM_A26__DISP2_EXT_CLK			0x0c4 0x458 0x908 0x6 0x0 +#define MX51_PAD_EIM_A26__EIM_A26			0x0c4 0x458 0x000 0x0 0x0 +#define MX51_PAD_EIM_A26__GPIO2_20			0x0c4 0x458 0x000 0x1 0x0 +#define MX51_PAD_EIM_A26__USBH2_STP			0x0c4 0x458 0x000 0x2 0x0 +#define MX51_PAD_EIM_A27__CSI2_DATA_EN			0x0c8 0x45c 0x99c 0x5 0x0 +#define MX51_PAD_EIM_A27__DISP1_PIN1			0x0c8 0x45c 0x9a4 0x6 0x0 +#define MX51_PAD_EIM_A27__EIM_A27			0x0c8 0x45c 0x000 0x0 0x0 +#define MX51_PAD_EIM_A27__GPIO2_21			0x0c8 0x45c 0x000 0x1 0x0 +#define MX51_PAD_EIM_A27__USBH2_NXT			0x0c8 0x45c 0x000 0x2 0x0 +#define MX51_PAD_EIM_EB0__EIM_EB0			0x0cc 0x460 0x000 0x0 0x0 +#define MX51_PAD_EIM_EB1__EIM_EB1			0x0d0 0x464 0x000 0x0 0x0 +#define MX51_PAD_EIM_EB2__AUD5_RXFS			0x0d4 0x468 0x8e0 0x6 0x0 +#define MX51_PAD_EIM_EB2__CSI1_D2			0x0d4 0x468 0x000 0x5 0x0 +#define MX51_PAD_EIM_EB2__EIM_EB2			0x0d4 0x468 0x000 0x0 0x0 +#define MX51_PAD_EIM_EB2__FEC_MDIO			0x0d4 0x468 0x954 0x3 0x0 +#define MX51_PAD_EIM_EB2__GPIO2_22			0x0d4 0x468 0x000 0x1 0x0 +#define MX51_PAD_EIM_EB2__GPT_CMPOUT1			0x0d4 0x468 0x000 0x7 0x0 +#define MX51_PAD_EIM_EB3__AUD5_RXC			0x0d8 0x46c 0x8dc 0x6 0x0 +#define MX51_PAD_EIM_EB3__CSI1_D3			0x0d8 0x46c 0x000 0x5 0x0 +#define MX51_PAD_EIM_EB3__EIM_EB3			0x0d8 0x46c 0x000 0x0 0x0 +#define MX51_PAD_EIM_EB3__FEC_RDATA1			0x0d8 0x46c 0x95c 0x3 0x0 +#define MX51_PAD_EIM_EB3__GPIO2_23			0x0d8 0x46c 0x000 0x1 0x0 +#define MX51_PAD_EIM_EB3__GPT_CMPOUT2			0x0d8 0x46c 0x000 0x7 0x0 +#define MX51_PAD_EIM_OE__EIM_OE				0x0dc 0x470 0x000 0x0 0x0 +#define MX51_PAD_EIM_OE__GPIO2_24			0x0dc 0x470 0x000 0x1 0x0 +#define MX51_PAD_EIM_CS0__EIM_CS0			0x0e0 0x474 0x000 0x0 0x0 +#define MX51_PAD_EIM_CS0__GPIO2_25			0x0e0 0x474 0x000 0x1 0x0 +#define MX51_PAD_EIM_CS1__EIM_CS1			0x0e4 0x478 0x000 0x0 0x0 +#define MX51_PAD_EIM_CS1__GPIO2_26			0x0e4 0x478 0x000 0x1 0x0 +#define MX51_PAD_EIM_CS2__AUD5_TXD			0x0e8 0x47c 0x8d8 0x6 0x1 +#define MX51_PAD_EIM_CS2__CSI1_D4			0x0e8 0x47c 0x000 0x5 0x0 +#define MX51_PAD_EIM_CS2__EIM_CS2			0x0e8 0x47c 0x000 0x0 0x0 +#define MX51_PAD_EIM_CS2__FEC_RDATA2			0x0e8 0x47c 0x960 0x3 0x0 +#define MX51_PAD_EIM_CS2__GPIO2_27			0x0e8 0x47c 0x000 0x1 0x0 +#define MX51_PAD_EIM_CS2__USBOTG_STP			0x0e8 0x47c 0x000 0x2 0x0 +#define MX51_PAD_EIM_CS3__AUD5_RXD			0x0ec 0x480 0x8d4 0x6 0x1 +#define MX51_PAD_EIM_CS3__CSI1_D5			0x0ec 0x480 0x000 0x5 0x0 +#define MX51_PAD_EIM_CS3__EIM_CS3			0x0ec 0x480 0x000 0x0 0x0 +#define MX51_PAD_EIM_CS3__FEC_RDATA3			0x0ec 0x480 0x964 0x3 0x0 +#define MX51_PAD_EIM_CS3__GPIO2_28			0x0ec 0x480 0x000 0x1 0x0 +#define MX51_PAD_EIM_CS3__USBOTG_NXT			0x0ec 0x480 0x000 0x2 0x0 +#define MX51_PAD_EIM_CS4__AUD5_TXC			0x0f0 0x484 0x8e4 0x6 0x1 +#define MX51_PAD_EIM_CS4__CSI1_D6			0x0f0 0x484 0x000 0x5 0x0 +#define MX51_PAD_EIM_CS4__EIM_CS4			0x0f0 0x484 0x000 0x0 0x0 +#define MX51_PAD_EIM_CS4__FEC_RX_ER			0x0f0 0x484 0x970 0x3 0x0 +#define MX51_PAD_EIM_CS4__GPIO2_29			0x0f0 0x484 0x000 0x1 0x0 +#define MX51_PAD_EIM_CS4__USBOTG_CLK			0x0f0 0x484 0x000 0x2 0x0 +#define MX51_PAD_EIM_CS5__AUD5_TXFS			0x0f4 0x488 0x8e8 0x6 0x1 +#define MX51_PAD_EIM_CS5__CSI1_D7			0x0f4 0x488 0x000 0x5 0x0 +#define MX51_PAD_EIM_CS5__DISP1_EXT_CLK			0x0f4 0x488 0x904 0x4 0x0 +#define MX51_PAD_EIM_CS5__EIM_CS5			0x0f4 0x488 0x000 0x0 0x0 +#define MX51_PAD_EIM_CS5__FEC_CRS			0x0f4 0x488 0x950 0x3 0x0 +#define MX51_PAD_EIM_CS5__GPIO2_30			0x0f4 0x488 0x000 0x1 0x0 +#define MX51_PAD_EIM_CS5__USBOTG_DIR			0x0f4 0x488 0x000 0x2 0x0 +#define MX51_PAD_EIM_DTACK__EIM_DTACK			0x0f8 0x48c 0x000 0x0 0x0 +#define MX51_PAD_EIM_DTACK__GPIO2_31			0x0f8 0x48c 0x000 0x1 0x0 +#define MX51_PAD_EIM_LBA__EIM_LBA			0x0fc 0x494 0x000 0x0 0x0 +#define MX51_PAD_EIM_LBA__GPIO3_1			0x0fc 0x494 0x978 0x1 0x0 +#define MX51_PAD_EIM_CRE__EIM_CRE			0x100 0x4a0 0x000 0x0 0x0 +#define MX51_PAD_EIM_CRE__GPIO3_2			0x100 0x4a0 0x97c 0x1 0x0 +#define MX51_PAD_DRAM_CS1__DRAM_CS1			0x104 0x4d0 0x000 0x0 0x0 +#define MX51_PAD_NANDF_WE_B__GPIO3_3			0x108 0x4e4 0x980 0x3 0x0 +#define MX51_PAD_NANDF_WE_B__NANDF_WE_B			0x108 0x4e4 0x000 0x0 0x0 +#define MX51_PAD_NANDF_WE_B__PATA_DIOW			0x108 0x4e4 0x000 0x1 0x0 +#define MX51_PAD_NANDF_WE_B__SD3_DATA0			0x108 0x4e4 0x93c 0x2 0x0 +#define MX51_PAD_NANDF_RE_B__GPIO3_4			0x10c 0x4e8 0x984 0x3 0x0 +#define MX51_PAD_NANDF_RE_B__NANDF_RE_B			0x10c 0x4e8 0x000 0x0 0x0 +#define MX51_PAD_NANDF_RE_B__PATA_DIOR			0x10c 0x4e8 0x000 0x1 0x0 +#define MX51_PAD_NANDF_RE_B__SD3_DATA1			0x10c 0x4e8 0x940 0x2 0x0 +#define MX51_PAD_NANDF_ALE__GPIO3_5			0x110 0x4ec 0x988 0x3 0x0 +#define MX51_PAD_NANDF_ALE__NANDF_ALE			0x110 0x4ec 0x000 0x0 0x0 +#define MX51_PAD_NANDF_ALE__PATA_BUFFER_EN		0x110 0x4ec 0x000 0x1 0x0 +#define MX51_PAD_NANDF_CLE__GPIO3_6			0x114 0x4f0 0x98c 0x3 0x0 +#define MX51_PAD_NANDF_CLE__NANDF_CLE			0x114 0x4f0 0x000 0x0 0x0 +#define MX51_PAD_NANDF_CLE__PATA_RESET_B		0x114 0x4f0 0x000 0x1 0x0 +#define MX51_PAD_NANDF_WP_B__GPIO3_7			0x118 0x4f4 0x990 0x3 0x0 +#define MX51_PAD_NANDF_WP_B__NANDF_WP_B			0x118 0x4f4 0x000 0x0 0x0 +#define MX51_PAD_NANDF_WP_B__PATA_DMACK			0x118 0x4f4 0x000 0x1 0x0 +#define MX51_PAD_NANDF_WP_B__SD3_DATA2			0x118 0x4f4 0x944 0x2 0x0 +#define MX51_PAD_NANDF_RB0__ECSPI2_SS1			0x11c 0x4f8 0x930 0x5 0x0 +#define MX51_PAD_NANDF_RB0__GPIO3_8			0x11c 0x4f8 0x994 0x3 0x0 +#define MX51_PAD_NANDF_RB0__NANDF_RB0			0x11c 0x4f8 0x000 0x0 0x0 +#define MX51_PAD_NANDF_RB0__PATA_DMARQ			0x11c 0x4f8 0x000 0x1 0x0 +#define MX51_PAD_NANDF_RB0__SD3_DATA3			0x11c 0x4f8 0x948 0x2 0x0 +#define MX51_PAD_NANDF_RB1__CSPI_MOSI			0x120 0x4fc 0x91c 0x6 0x0 +#define MX51_PAD_NANDF_RB1__ECSPI2_RDY			0x120 0x4fc 0x000 0x2 0x0 +#define MX51_PAD_NANDF_RB1__GPIO3_9			0x120 0x4fc 0x000 0x3 0x0 +#define MX51_PAD_NANDF_RB1__NANDF_RB1			0x120 0x4fc 0x000 0x0 0x0 +#define MX51_PAD_NANDF_RB1__PATA_IORDY			0x120 0x4fc 0x000 0x1 0x0 +#define MX51_PAD_NANDF_RB1__SD4_CMD			0x120 0x4fc 0x000 0x5 0x0 +#define MX51_PAD_NANDF_RB2__DISP2_WAIT			0x124 0x500 0x9a8 0x5 0x0 +#define MX51_PAD_NANDF_RB2__ECSPI2_SCLK			0x124 0x500 0x000 0x2 0x0 +#define MX51_PAD_NANDF_RB2__FEC_COL			0x124 0x500 0x94c 0x1 0x0 +#define MX51_PAD_NANDF_RB2__GPIO3_10			0x124 0x500 0x000 0x3 0x0 +#define MX51_PAD_NANDF_RB2__NANDF_RB2			0x124 0x500 0x000 0x0 0x0 +#define MX51_PAD_NANDF_RB2__USBH3_H3_DP			0x124 0x500 0x000 0x7 0x0 +#define MX51_PAD_NANDF_RB2__USBH3_NXT			0x124 0x500 0xa20 0x6 0x0 +#define MX51_PAD_NANDF_RB3__DISP1_WAIT			0x128 0x504 0x000 0x5 0x0 +#define MX51_PAD_NANDF_RB3__ECSPI2_MISO			0x128 0x504 0x000 0x2 0x0 +#define MX51_PAD_NANDF_RB3__FEC_RX_CLK			0x128 0x504 0x968 0x1 0x0 +#define MX51_PAD_NANDF_RB3__GPIO3_11			0x128 0x504 0x000 0x3 0x0 +#define MX51_PAD_NANDF_RB3__NANDF_RB3			0x128 0x504 0x000 0x0 0x0 +#define MX51_PAD_NANDF_RB3__USBH3_CLK			0x128 0x504 0x9f8 0x6 0x0 +#define MX51_PAD_NANDF_RB3__USBH3_H3_DM			0x128 0x504 0x000 0x7 0x0 +#define MX51_PAD_GPIO_NAND__GPIO_NAND			0x12c 0x514 0x998 0x0 0x0 +#define MX51_PAD_GPIO_NAND__PATA_INTRQ			0x12c 0x514 0x000 0x1 0x0 +#define MX51_PAD_NANDF_CS0__GPIO3_16			0x130 0x518 0x000 0x3 0x0 +#define MX51_PAD_NANDF_CS0__NANDF_CS0			0x130 0x518 0x000 0x0 0x0 +#define MX51_PAD_NANDF_CS1__GPIO3_17			0x134 0x51c 0x000 0x3 0x0 +#define MX51_PAD_NANDF_CS1__NANDF_CS1			0x134 0x51c 0x000 0x0 0x0 +#define MX51_PAD_NANDF_CS2__CSPI_SCLK			0x138 0x520 0x914 0x6 0x0 +#define MX51_PAD_NANDF_CS2__FEC_TX_ER			0x138 0x520 0x000 0x2 0x0 +#define MX51_PAD_NANDF_CS2__GPIO3_18			0x138 0x520 0x000 0x3 0x0 +#define MX51_PAD_NANDF_CS2__NANDF_CS2			0x138 0x520 0x000 0x0 0x0 +#define MX51_PAD_NANDF_CS2__PATA_CS_0			0x138 0x520 0x000 0x1 0x0 +#define MX51_PAD_NANDF_CS2__SD4_CLK			0x138 0x520 0x000 0x5 0x0 +#define MX51_PAD_NANDF_CS2__USBH3_H1_DP			0x138 0x520 0x000 0x7 0x0 +#define MX51_PAD_NANDF_CS3__FEC_MDC			0x13c 0x524 0x000 0x2 0x0 +#define MX51_PAD_NANDF_CS3__GPIO3_19			0x13c 0x524 0x000 0x3 0x0 +#define MX51_PAD_NANDF_CS3__NANDF_CS3			0x13c 0x524 0x000 0x0 0x0 +#define MX51_PAD_NANDF_CS3__PATA_CS_1			0x13c 0x524 0x000 0x1 0x0 +#define MX51_PAD_NANDF_CS3__SD4_DAT0			0x13c 0x524 0x000 0x5 0x0 +#define MX51_PAD_NANDF_CS3__USBH3_H1_DM			0x13c 0x524 0x000 0x7 0x0 +#define MX51_PAD_NANDF_CS4__FEC_TDATA1			0x140 0x528 0x000 0x2 0x0 +#define MX51_PAD_NANDF_CS4__GPIO3_20			0x140 0x528 0x000 0x3 0x0 +#define MX51_PAD_NANDF_CS4__NANDF_CS4			0x140 0x528 0x000 0x0 0x0 +#define MX51_PAD_NANDF_CS4__PATA_DA_0			0x140 0x528 0x000 0x1 0x0 +#define MX51_PAD_NANDF_CS4__SD4_DAT1			0x140 0x528 0x000 0x5 0x0 +#define MX51_PAD_NANDF_CS4__USBH3_STP			0x140 0x528 0xa24 0x7 0x0 +#define MX51_PAD_NANDF_CS5__FEC_TDATA2			0x144 0x52c 0x000 0x2 0x0 +#define MX51_PAD_NANDF_CS5__GPIO3_21			0x144 0x52c 0x000 0x3 0x0 +#define MX51_PAD_NANDF_CS5__NANDF_CS5			0x144 0x52c 0x000 0x0 0x0 +#define MX51_PAD_NANDF_CS5__PATA_DA_1			0x144 0x52c 0x000 0x1 0x0 +#define MX51_PAD_NANDF_CS5__SD4_DAT2			0x144 0x52c 0x000 0x5 0x0 +#define MX51_PAD_NANDF_CS5__USBH3_DIR			0x144 0x52c 0xa1c 0x7 0x0 +#define MX51_PAD_NANDF_CS6__CSPI_SS3			0x148 0x530 0x928 0x7 0x0 +#define MX51_PAD_NANDF_CS6__FEC_TDATA3			0x148 0x530 0x000 0x2 0x0 +#define MX51_PAD_NANDF_CS6__GPIO3_22			0x148 0x530 0x000 0x3 0x0 +#define MX51_PAD_NANDF_CS6__NANDF_CS6			0x148 0x530 0x000 0x0 0x0 +#define MX51_PAD_NANDF_CS6__PATA_DA_2			0x148 0x530 0x000 0x1 0x0 +#define MX51_PAD_NANDF_CS6__SD4_DAT3			0x148 0x530 0x000 0x5 0x0 +#define MX51_PAD_NANDF_CS7__FEC_TX_EN			0x14c 0x534 0x000 0x1 0x0 +#define MX51_PAD_NANDF_CS7__GPIO3_23			0x14c 0x534 0x000 0x3 0x0 +#define MX51_PAD_NANDF_CS7__NANDF_CS7			0x14c 0x534 0x000 0x0 0x0 +#define MX51_PAD_NANDF_CS7__SD3_CLK			0x14c 0x534 0x000 0x5 0x0 +#define MX51_PAD_NANDF_RDY_INT__ECSPI2_SS0		0x150 0x538 0x000 0x2 0x0 +#define MX51_PAD_NANDF_RDY_INT__FEC_TX_CLK		0x150 0x538 0x974 0x1 0x0 +#define MX51_PAD_NANDF_RDY_INT__GPIO3_24		0x150 0x538 0x000 0x3 0x0 +#define MX51_PAD_NANDF_RDY_INT__NANDF_RDY_INT		0x150 0x538 0x938 0x0 0x0 +#define MX51_PAD_NANDF_RDY_INT__SD3_CMD			0x150 0x538 0x000 0x5 0x0 +#define MX51_PAD_NANDF_D15__ECSPI2_MOSI			0x154 0x53c 0x000 0x2 0x0 +#define MX51_PAD_NANDF_D15__GPIO3_25			0x154 0x53c 0x000 0x3 0x0 +#define MX51_PAD_NANDF_D15__NANDF_D15			0x154 0x53c 0x000 0x0 0x0 +#define MX51_PAD_NANDF_D15__PATA_DATA15			0x154 0x53c 0x000 0x1 0x0 +#define MX51_PAD_NANDF_D15__SD3_DAT7			0x154 0x53c 0x000 0x5 0x0 +#define MX51_PAD_NANDF_D14__ECSPI2_SS3			0x158 0x540 0x934 0x2 0x0 +#define MX51_PAD_NANDF_D14__GPIO3_26			0x158 0x540 0x000 0x3 0x0 +#define MX51_PAD_NANDF_D14__NANDF_D14			0x158 0x540 0x000 0x0 0x0 +#define MX51_PAD_NANDF_D14__PATA_DATA14			0x158 0x540 0x000 0x1 0x0 +#define MX51_PAD_NANDF_D14__SD3_DAT6			0x158 0x540 0x000 0x5 0x0 +#define MX51_PAD_NANDF_D13__ECSPI2_SS2			0x15c 0x544 0x000 0x2 0x0 +#define MX51_PAD_NANDF_D13__GPIO3_27			0x15c 0x544 0x000 0x3 0x0 +#define MX51_PAD_NANDF_D13__NANDF_D13			0x15c 0x544 0x000 0x0 0x0 +#define MX51_PAD_NANDF_D13__PATA_DATA13			0x15c 0x544 0x000 0x1 0x0 +#define MX51_PAD_NANDF_D13__SD3_DAT5			0x15c 0x544 0x000 0x5 0x0 +#define MX51_PAD_NANDF_D12__ECSPI2_SS1			0x160 0x548 0x930 0x2 0x1 +#define MX51_PAD_NANDF_D12__GPIO3_28			0x160 0x548 0x000 0x3 0x0 +#define MX51_PAD_NANDF_D12__NANDF_D12			0x160 0x548 0x000 0x0 0x0 +#define MX51_PAD_NANDF_D12__PATA_DATA12			0x160 0x548 0x000 0x1 0x0 +#define MX51_PAD_NANDF_D12__SD3_DAT4			0x160 0x548 0x000 0x5 0x0 +#define MX51_PAD_NANDF_D11__FEC_RX_DV			0x164 0x54c 0x96c 0x2 0x0 +#define MX51_PAD_NANDF_D11__GPIO3_29			0x164 0x54c 0x000 0x3 0x0 +#define MX51_PAD_NANDF_D11__NANDF_D11			0x164 0x54c 0x000 0x0 0x0 +#define MX51_PAD_NANDF_D11__PATA_DATA11			0x164 0x54c 0x000 0x1 0x0 +#define MX51_PAD_NANDF_D11__SD3_DATA3			0x164 0x54c 0x948 0x5 0x1 +#define MX51_PAD_NANDF_D10__GPIO3_30			0x168 0x550 0x000 0x3 0x0 +#define MX51_PAD_NANDF_D10__NANDF_D10			0x168 0x550 0x000 0x0 0x0 +#define MX51_PAD_NANDF_D10__PATA_DATA10			0x168 0x550 0x000 0x1 0x0 +#define MX51_PAD_NANDF_D10__SD3_DATA2			0x168 0x550 0x944 0x5 0x1 +#define MX51_PAD_NANDF_D9__FEC_RDATA0			0x16c 0x554 0x958 0x2 0x0 +#define MX51_PAD_NANDF_D9__GPIO3_31			0x16c 0x554 0x000 0x3 0x0 +#define MX51_PAD_NANDF_D9__NANDF_D9			0x16c 0x554 0x000 0x0 0x0 +#define MX51_PAD_NANDF_D9__PATA_DATA9			0x16c 0x554 0x000 0x1 0x0 +#define MX51_PAD_NANDF_D9__SD3_DATA1			0x16c 0x554 0x940 0x5 0x1 +#define MX51_PAD_NANDF_D8__FEC_TDATA0			0x170 0x558 0x000 0x2 0x0 +#define MX51_PAD_NANDF_D8__GPIO4_0			0x170 0x558 0x000 0x3 0x0 +#define MX51_PAD_NANDF_D8__NANDF_D8			0x170 0x558 0x000 0x0 0x0 +#define MX51_PAD_NANDF_D8__PATA_DATA8			0x170 0x558 0x000 0x1 0x0 +#define MX51_PAD_NANDF_D8__SD3_DATA0			0x170 0x558 0x93c 0x5 0x1 +#define MX51_PAD_NANDF_D7__GPIO4_1			0x174 0x55c 0x000 0x3 0x0 +#define MX51_PAD_NANDF_D7__NANDF_D7			0x174 0x55c 0x000 0x0 0x0 +#define MX51_PAD_NANDF_D7__PATA_DATA7			0x174 0x55c 0x000 0x1 0x0 +#define MX51_PAD_NANDF_D7__USBH3_DATA0			0x174 0x55c 0x9fc 0x5 0x0 +#define MX51_PAD_NANDF_D6__GPIO4_2			0x178 0x560 0x000 0x3 0x0 +#define MX51_PAD_NANDF_D6__NANDF_D6			0x178 0x560 0x000 0x0 0x0 +#define MX51_PAD_NANDF_D6__PATA_DATA6			0x178 0x560 0x000 0x1 0x0 +#define MX51_PAD_NANDF_D6__SD4_LCTL			0x178 0x560 0x000 0x2 0x0 +#define MX51_PAD_NANDF_D6__USBH3_DATA1			0x178 0x560 0xa00 0x5 0x0 +#define MX51_PAD_NANDF_D5__GPIO4_3			0x17c 0x564 0x000 0x3 0x0 +#define MX51_PAD_NANDF_D5__NANDF_D5			0x17c 0x564 0x000 0x0 0x0 +#define MX51_PAD_NANDF_D5__PATA_DATA5			0x17c 0x564 0x000 0x1 0x0 +#define MX51_PAD_NANDF_D5__SD4_WP			0x17c 0x564 0x000 0x2 0x0 +#define MX51_PAD_NANDF_D5__USBH3_DATA2			0x17c 0x564 0xa04 0x5 0x0 +#define MX51_PAD_NANDF_D4__GPIO4_4			0x180 0x568 0x000 0x3 0x0 +#define MX51_PAD_NANDF_D4__NANDF_D4			0x180 0x568 0x000 0x0 0x0 +#define MX51_PAD_NANDF_D4__PATA_DATA4			0x180 0x568 0x000 0x1 0x0 +#define MX51_PAD_NANDF_D4__SD4_CD			0x180 0x568 0x000 0x2 0x0 +#define MX51_PAD_NANDF_D4__USBH3_DATA3			0x180 0x568 0xa08 0x5 0x0 +#define MX51_PAD_NANDF_D3__GPIO4_5			0x184 0x56c 0x000 0x3 0x0 +#define MX51_PAD_NANDF_D3__NANDF_D3			0x184 0x56c 0x000 0x0 0x0 +#define MX51_PAD_NANDF_D3__PATA_DATA3			0x184 0x56c 0x000 0x1 0x0 +#define MX51_PAD_NANDF_D3__SD4_DAT4			0x184 0x56c 0x000 0x2 0x0 +#define MX51_PAD_NANDF_D3__USBH3_DATA4			0x184 0x56c 0xa0c 0x5 0x0 +#define MX51_PAD_NANDF_D2__GPIO4_6			0x188 0x570 0x000 0x3 0x0 +#define MX51_PAD_NANDF_D2__NANDF_D2			0x188 0x570 0x000 0x0 0x0 +#define MX51_PAD_NANDF_D2__PATA_DATA2			0x188 0x570 0x000 0x1 0x0 +#define MX51_PAD_NANDF_D2__SD4_DAT5			0x188 0x570 0x000 0x2 0x0 +#define MX51_PAD_NANDF_D2__USBH3_DATA5			0x188 0x570 0xa10 0x5 0x0 +#define MX51_PAD_NANDF_D1__GPIO4_7			0x18c 0x574 0x000 0x3 0x0 +#define MX51_PAD_NANDF_D1__NANDF_D1			0x18c 0x574 0x000 0x0 0x0 +#define MX51_PAD_NANDF_D1__PATA_DATA1			0x18c 0x574 0x000 0x1 0x0 +#define MX51_PAD_NANDF_D1__SD4_DAT6			0x18c 0x574 0x000 0x2 0x0 +#define MX51_PAD_NANDF_D1__USBH3_DATA6			0x18c 0x574 0xa14 0x5 0x0 +#define MX51_PAD_NANDF_D0__GPIO4_8			0x190 0x578 0x000 0x3 0x0 +#define MX51_PAD_NANDF_D0__NANDF_D0			0x190 0x578 0x000 0x0 0x0 +#define MX51_PAD_NANDF_D0__PATA_DATA0			0x190 0x578 0x000 0x1 0x0 +#define MX51_PAD_NANDF_D0__SD4_DAT7			0x190 0x578 0x000 0x2 0x0 +#define MX51_PAD_NANDF_D0__USBH3_DATA7			0x190 0x578 0xa18 0x5 0x0 +#define MX51_PAD_CSI1_D8__CSI1_D8			0x194 0x57c 0x000 0x0 0x0 +#define MX51_PAD_CSI1_D8__GPIO3_12			0x194 0x57c 0x998 0x3 0x1 +#define MX51_PAD_CSI1_D9__CSI1_D9			0x198 0x580 0x000 0x0 0x0 +#define MX51_PAD_CSI1_D9__GPIO3_13			0x198 0x580 0x000 0x3 0x0 +#define MX51_PAD_CSI1_D10__CSI1_D10			0x19c 0x584 0x000 0x0 0x0 +#define MX51_PAD_CSI1_D11__CSI1_D11			0x1a0 0x588 0x000 0x0 0x0 +#define MX51_PAD_CSI1_D12__CSI1_D12			0x1a4 0x58c 0x000 0x0 0x0 +#define MX51_PAD_CSI1_D13__CSI1_D13			0x1a8 0x590 0x000 0x0 0x0 +#define MX51_PAD_CSI1_D14__CSI1_D14			0x1ac 0x594 0x000 0x0 0x0 +#define MX51_PAD_CSI1_D15__CSI1_D15			0x1b0 0x598 0x000 0x0 0x0 +#define MX51_PAD_CSI1_D16__CSI1_D16			0x1b4 0x59c 0x000 0x0 0x0 +#define MX51_PAD_CSI1_D17__CSI1_D17			0x1b8 0x5a0 0x000 0x0 0x0 +#define MX51_PAD_CSI1_D18__CSI1_D18			0x1bc 0x5a4 0x000 0x0 0x0 +#define MX51_PAD_CSI1_D19__CSI1_D19			0x1c0 0x5a8 0x000 0x0 0x0 +#define MX51_PAD_CSI1_VSYNC__CSI1_VSYNC			0x1c4 0x5ac 0x000 0x0 0x0 +#define MX51_PAD_CSI1_VSYNC__GPIO3_14			0x1c4 0x5ac 0x000 0x3 0x0 +#define MX51_PAD_CSI1_HSYNC__CSI1_HSYNC			0x1c8 0x5b0 0x000 0x0 0x0 +#define MX51_PAD_CSI1_HSYNC__GPIO3_15			0x1c8 0x5b0 0x000 0x3 0x0 +#define MX51_PAD_CSI1_PIXCLK__CSI1_PIXCLK		0x000 0x5b4 0x000 0x0 0x0 +#define MX51_PAD_CSI1_MCLK__CSI1_MCLK			0x000 0x5b8 0x000 0x0 0x0 +#define MX51_PAD_CSI2_D12__CSI2_D12			0x1cc 0x5bc 0x000 0x0 0x0 +#define MX51_PAD_CSI2_D12__GPIO4_9			0x1cc 0x5bc 0x000 0x3 0x0 +#define MX51_PAD_CSI2_D13__CSI2_D13			0x1d0 0x5c0 0x000 0x0 0x0 +#define MX51_PAD_CSI2_D13__GPIO4_10			0x1d0 0x5c0 0x000 0x3 0x0 +#define MX51_PAD_CSI2_D14__CSI2_D14			0x1d4 0x5c4 0x000 0x0 0x0 +#define MX51_PAD_CSI2_D15__CSI2_D15			0x1d8 0x5c8 0x000 0x0 0x0 +#define MX51_PAD_CSI2_D16__CSI2_D16			0x1dc 0x5cc 0x000 0x0 0x0 +#define MX51_PAD_CSI2_D17__CSI2_D17			0x1e0 0x5d0 0x000 0x0 0x0 +#define MX51_PAD_CSI2_D18__CSI2_D18			0x1e4 0x5d4 0x000 0x0 0x0 +#define MX51_PAD_CSI2_D18__GPIO4_11			0x1e4 0x5d4 0x000 0x3 0x0 +#define MX51_PAD_CSI2_D19__CSI2_D19			0x1e8 0x5d8 0x000 0x0 0x0 +#define MX51_PAD_CSI2_D19__GPIO4_12			0x1e8 0x5d8 0x000 0x3 0x0 +#define MX51_PAD_CSI2_VSYNC__CSI2_VSYNC			0x1ec 0x5dc 0x000 0x0 0x0 +#define MX51_PAD_CSI2_VSYNC__GPIO4_13			0x1ec 0x5dc 0x000 0x3 0x0 +#define MX51_PAD_CSI2_HSYNC__CSI2_HSYNC			0x1f0 0x5e0 0x000 0x0 0x0 +#define MX51_PAD_CSI2_HSYNC__GPIO4_14			0x1f0 0x5e0 0x000 0x3 0x0 +#define MX51_PAD_CSI2_PIXCLK__CSI2_PIXCLK		0x1f4 0x5e4 0x000 0x0 0x0 +#define MX51_PAD_CSI2_PIXCLK__GPIO4_15			0x1f4 0x5e4 0x000 0x3 0x0 +#define MX51_PAD_I2C1_CLK__GPIO4_16			0x1f8 0x5e8 0x000 0x3 0x0 +#define MX51_PAD_I2C1_CLK__I2C1_CLK			0x1f8 0x5e8 0x000 0x0 0x0 +#define MX51_PAD_I2C1_DAT__GPIO4_17			0x1fc 0x5ec 0x000 0x3 0x0 +#define MX51_PAD_I2C1_DAT__I2C1_DAT			0x1fc 0x5ec 0x000 0x0 0x0 +#define MX51_PAD_AUD3_BB_TXD__AUD3_TXD			0x200 0x5f0 0x000 0x0 0x0 +#define MX51_PAD_AUD3_BB_TXD__GPIO4_18			0x200 0x5f0 0x000 0x3 0x0 +#define MX51_PAD_AUD3_BB_RXD__AUD3_RXD			0x204 0x5f4 0x000 0x0 0x0 +#define MX51_PAD_AUD3_BB_RXD__GPIO4_19			0x204 0x5f4 0x000 0x3 0x0 +#define MX51_PAD_AUD3_BB_RXD__UART3_RXD			0x204 0x5f4 0x9f4 0x1 0x2 +#define MX51_PAD_AUD3_BB_CK__AUD3_TXC			0x208 0x5f8 0x000 0x0 0x0 +#define MX51_PAD_AUD3_BB_CK__GPIO4_20			0x208 0x5f8 0x000 0x3 0x0 +#define MX51_PAD_AUD3_BB_FS__AUD3_TXFS			0x20c 0x5fc 0x000 0x0 0x0 +#define MX51_PAD_AUD3_BB_FS__GPIO4_21			0x20c 0x5fc 0x000 0x3 0x0 +#define MX51_PAD_AUD3_BB_FS__UART3_TXD			0x20c 0x5fc 0x000 0x1 0x0 +#define MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI		0x210 0x600 0x000 0x0 0x0 +#define MX51_PAD_CSPI1_MOSI__GPIO4_22			0x210 0x600 0x000 0x3 0x0 +#define MX51_PAD_CSPI1_MOSI__I2C1_SDA			0x210 0x600 0x9b4 0x1 0x1 +#define MX51_PAD_CSPI1_MISO__AUD4_RXD			0x214 0x604 0x8c4 0x1 0x1 +#define MX51_PAD_CSPI1_MISO__ECSPI1_MISO		0x214 0x604 0x000 0x0 0x0 +#define MX51_PAD_CSPI1_MISO__GPIO4_23			0x214 0x604 0x000 0x3 0x0 +#define MX51_PAD_CSPI1_SS0__AUD4_TXC			0x218 0x608 0x8cc 0x1 0x1 +#define MX51_PAD_CSPI1_SS0__ECSPI1_SS0			0x218 0x608 0x000 0x0 0x0 +#define MX51_PAD_CSPI1_SS0__GPIO4_24			0x218 0x608 0x000 0x3 0x0 +#define MX51_PAD_CSPI1_SS1__AUD4_TXD			0x21c 0x60c 0x8c8 0x1 0x1 +#define MX51_PAD_CSPI1_SS1__ECSPI1_SS1			0x21c 0x60c 0x000 0x0 0x0 +#define MX51_PAD_CSPI1_SS1__GPIO4_25			0x21c 0x60c 0x000 0x3 0x0 +#define MX51_PAD_CSPI1_RDY__AUD4_TXFS			0x220 0x610 0x8d0 0x1 0x1 +#define MX51_PAD_CSPI1_RDY__ECSPI1_RDY			0x220 0x610 0x000 0x0 0x0 +#define MX51_PAD_CSPI1_RDY__GPIO4_26			0x220 0x610 0x000 0x3 0x0 +#define MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK		0x224 0x614 0x000 0x0 0x0 +#define MX51_PAD_CSPI1_SCLK__GPIO4_27			0x224 0x614 0x000 0x3 0x0 +#define MX51_PAD_CSPI1_SCLK__I2C1_SCL			0x224 0x614 0x9b0 0x1 0x1 +#define MX51_PAD_UART1_RXD__GPIO4_28			0x228 0x618 0x000 0x3 0x0 +#define MX51_PAD_UART1_RXD__UART1_RXD			0x228 0x618 0x9e4 0x0 0x0 +#define MX51_PAD_UART1_TXD__GPIO4_29			0x22c 0x61c 0x000 0x3 0x0 +#define MX51_PAD_UART1_TXD__PWM2_PWMO			0x22c 0x61c 0x000 0x1 0x0 +#define MX51_PAD_UART1_TXD__UART1_TXD			0x22c 0x61c 0x000 0x0 0x0 +#define MX51_PAD_UART1_RTS__GPIO4_30			0x230 0x620 0x000 0x3 0x0 +#define MX51_PAD_UART1_RTS__UART1_RTS			0x230 0x620 0x9e0 0x0 0x0 +#define MX51_PAD_UART1_CTS__GPIO4_31			0x234 0x624 0x000 0x3 0x0 +#define MX51_PAD_UART1_CTS__UART1_CTS			0x234 0x624 0x000 0x0 0x0 +#define MX51_PAD_UART2_RXD__FIRI_TXD			0x238 0x628 0x000 0x1 0x0 +#define MX51_PAD_UART2_RXD__GPIO1_20			0x238 0x628 0x000 0x3 0x0 +#define MX51_PAD_UART2_RXD__UART2_RXD			0x238 0x628 0x9ec 0x0 0x2 +#define MX51_PAD_UART2_TXD__FIRI_RXD			0x23c 0x62c 0x000 0x1 0x0 +#define MX51_PAD_UART2_TXD__GPIO1_21			0x23c 0x62c 0x000 0x3 0x0 +#define MX51_PAD_UART2_TXD__UART2_TXD			0x23c 0x62c 0x000 0x0 0x0 +#define MX51_PAD_UART3_RXD__CSI1_D0			0x240 0x630 0x000 0x2 0x0 +#define MX51_PAD_UART3_RXD__GPIO1_22			0x240 0x630 0x000 0x3 0x0 +#define MX51_PAD_UART3_RXD__UART1_DTR			0x240 0x630 0x000 0x0 0x0 +#define MX51_PAD_UART3_RXD__UART3_RXD			0x240 0x630 0x9f4 0x1 0x4 +#define MX51_PAD_UART3_TXD__CSI1_D1			0x244 0x634 0x000 0x2 0x0 +#define MX51_PAD_UART3_TXD__GPIO1_23			0x244 0x634 0x000 0x3 0x0 +#define MX51_PAD_UART3_TXD__UART1_DSR			0x244 0x634 0x000 0x0 0x0 +#define MX51_PAD_UART3_TXD__UART3_TXD			0x244 0x634 0x000 0x1 0x0 +#define MX51_PAD_OWIRE_LINE__GPIO1_24			0x248 0x638 0x000 0x3 0x0 +#define MX51_PAD_OWIRE_LINE__OWIRE_LINE			0x248 0x638 0x000 0x0 0x0 +#define MX51_PAD_OWIRE_LINE__SPDIF_OUT			0x248 0x638 0x000 0x6 0x0 +#define MX51_PAD_KEY_ROW0__KEY_ROW0			0x24c 0x63c 0x000 0x0 0x0 +#define MX51_PAD_KEY_ROW1__KEY_ROW1			0x250 0x640 0x000 0x0 0x0 +#define MX51_PAD_KEY_ROW2__KEY_ROW2			0x254 0x644 0x000 0x0 0x0 +#define MX51_PAD_KEY_ROW3__KEY_ROW3			0x258 0x648 0x000 0x0 0x0 +#define MX51_PAD_KEY_COL0__KEY_COL0			0x25c 0x64c 0x000 0x0 0x0 +#define MX51_PAD_KEY_COL0__PLL1_BYP			0x25c 0x64c 0x90c 0x7 0x0 +#define MX51_PAD_KEY_COL1__KEY_COL1			0x260 0x650 0x000 0x0 0x0 +#define MX51_PAD_KEY_COL1__PLL2_BYP			0x260 0x650 0x910 0x7 0x0 +#define MX51_PAD_KEY_COL2__KEY_COL2			0x264 0x654 0x000 0x0 0x0 +#define MX51_PAD_KEY_COL2__PLL3_BYP			0x264 0x654 0x000 0x7 0x0 +#define MX51_PAD_KEY_COL3__KEY_COL3			0x268 0x658 0x000 0x0 0x0 +#define MX51_PAD_KEY_COL4__I2C2_SCL			0x26c 0x65c 0x9b8 0x3 0x1 +#define MX51_PAD_KEY_COL4__KEY_COL4			0x26c 0x65c 0x000 0x0 0x0 +#define MX51_PAD_KEY_COL4__SPDIF_OUT1			0x26c 0x65c 0x000 0x6 0x0 +#define MX51_PAD_KEY_COL4__UART1_RI			0x26c 0x65c 0x000 0x1 0x0 +#define MX51_PAD_KEY_COL4__UART3_RTS			0x26c 0x65c 0x9f0 0x2 0x4 +#define MX51_PAD_KEY_COL5__I2C2_SDA			0x270 0x660 0x9bc 0x3 0x1 +#define MX51_PAD_KEY_COL5__KEY_COL5			0x270 0x660 0x000 0x0 0x0 +#define MX51_PAD_KEY_COL5__UART1_DCD			0x270 0x660 0x000 0x1 0x0 +#define MX51_PAD_KEY_COL5__UART3_CTS			0x270 0x660 0x000 0x2 0x0 +#define MX51_PAD_USBH1_CLK__CSPI_SCLK			0x278 0x678 0x914 0x1 0x1 +#define MX51_PAD_USBH1_CLK__GPIO1_25			0x278 0x678 0x000 0x2 0x0 +#define MX51_PAD_USBH1_CLK__I2C2_SCL			0x278 0x678 0x9b8 0x5 0x2 +#define MX51_PAD_USBH1_CLK__USBH1_CLK			0x278 0x678 0x000 0x0 0x0 +#define MX51_PAD_USBH1_DIR__CSPI_MOSI			0x27c 0x67c 0x91c 0x1 0x1 +#define MX51_PAD_USBH1_DIR__GPIO1_26			0x27c 0x67c 0x000 0x2 0x0 +#define MX51_PAD_USBH1_DIR__I2C2_SDA			0x27c 0x67c 0x9bc 0x5 0x2 +#define MX51_PAD_USBH1_DIR__USBH1_DIR			0x27c 0x67c 0x000 0x0 0x0 +#define MX51_PAD_USBH1_STP__CSPI_RDY			0x280 0x680 0x000 0x1 0x0 +#define MX51_PAD_USBH1_STP__GPIO1_27			0x280 0x680 0x000 0x2 0x0 +#define MX51_PAD_USBH1_STP__UART3_RXD			0x280 0x680 0x9f4 0x5 0x6 +#define MX51_PAD_USBH1_STP__USBH1_STP			0x280 0x680 0x000 0x0 0x0 +#define MX51_PAD_USBH1_NXT__CSPI_MISO			0x284 0x684 0x918 0x1 0x0 +#define MX51_PAD_USBH1_NXT__GPIO1_28			0x284 0x684 0x000 0x2 0x0 +#define MX51_PAD_USBH1_NXT__UART3_TXD			0x284 0x684 0x000 0x5 0x0 +#define MX51_PAD_USBH1_NXT__USBH1_NXT			0x284 0x684 0x000 0x0 0x0 +#define MX51_PAD_USBH1_DATA0__GPIO1_11			0x288 0x688 0x000 0x2 0x0 +#define MX51_PAD_USBH1_DATA0__UART2_CTS			0x288 0x688 0x000 0x1 0x0 +#define MX51_PAD_USBH1_DATA0__USBH1_DATA0		0x288 0x688 0x000 0x0 0x0 +#define MX51_PAD_USBH1_DATA1__GPIO1_12			0x28c 0x68c 0x000 0x2 0x0 +#define MX51_PAD_USBH1_DATA1__UART2_RXD			0x28c 0x68c 0x9ec 0x1 0x4 +#define MX51_PAD_USBH1_DATA1__USBH1_DATA1		0x28c 0x68c 0x000 0x0 0x0 +#define MX51_PAD_USBH1_DATA2__GPIO1_13			0x290 0x690 0x000 0x2 0x0 +#define MX51_PAD_USBH1_DATA2__UART2_TXD			0x290 0x690 0x000 0x1 0x0 +#define MX51_PAD_USBH1_DATA2__USBH1_DATA2		0x290 0x690 0x000 0x0 0x0 +#define MX51_PAD_USBH1_DATA3__GPIO1_14			0x294 0x694 0x000 0x2 0x0 +#define MX51_PAD_USBH1_DATA3__UART2_RTS			0x294 0x694 0x9e8 0x1 0x5 +#define MX51_PAD_USBH1_DATA3__USBH1_DATA3		0x294 0x694 0x000 0x0 0x0 +#define MX51_PAD_USBH1_DATA4__CSPI_SS0			0x298 0x698 0x000 0x1 0x0 +#define MX51_PAD_USBH1_DATA4__GPIO1_15			0x298 0x698 0x000 0x2 0x0 +#define MX51_PAD_USBH1_DATA4__USBH1_DATA4		0x298 0x698 0x000 0x0 0x0 +#define MX51_PAD_USBH1_DATA5__CSPI_SS1			0x29c 0x69c 0x920 0x1 0x0 +#define MX51_PAD_USBH1_DATA5__GPIO1_16			0x29c 0x69c 0x000 0x2 0x0 +#define MX51_PAD_USBH1_DATA5__USBH1_DATA5		0x29c 0x69c 0x000 0x0 0x0 +#define MX51_PAD_USBH1_DATA6__CSPI_SS3			0x2a0 0x6a0 0x928 0x1 0x1 +#define MX51_PAD_USBH1_DATA6__GPIO1_17			0x2a0 0x6a0 0x000 0x2 0x0 +#define MX51_PAD_USBH1_DATA6__USBH1_DATA6		0x2a0 0x6a0 0x000 0x0 0x0 +#define MX51_PAD_USBH1_DATA7__ECSPI1_SS3		0x2a4 0x6a4 0x000 0x1 0x0 +#define MX51_PAD_USBH1_DATA7__ECSPI2_SS3		0x2a4 0x6a4 0x934 0x5 0x1 +#define MX51_PAD_USBH1_DATA7__GPIO1_18			0x2a4 0x6a4 0x000 0x2 0x0 +#define MX51_PAD_USBH1_DATA7__USBH1_DATA7		0x2a4 0x6a4 0x000 0x0 0x0 +#define MX51_PAD_DI1_PIN11__DI1_PIN11			0x2a8 0x6a8 0x000 0x0 0x0 +#define MX51_PAD_DI1_PIN11__ECSPI1_SS2			0x2a8 0x6a8 0x000 0x7 0x0 +#define MX51_PAD_DI1_PIN11__GPIO3_0			0x2a8 0x6a8 0x000 0x4 0x0 +#define MX51_PAD_DI1_PIN12__DI1_PIN12			0x2ac 0x6ac 0x000 0x0 0x0 +#define MX51_PAD_DI1_PIN12__GPIO3_1			0x2ac 0x6ac 0x978 0x4 0x1 +#define MX51_PAD_DI1_PIN13__DI1_PIN13			0x2b0 0x6b0 0x000 0x0 0x0 +#define MX51_PAD_DI1_PIN13__GPIO3_2			0x2b0 0x6b0 0x97c 0x4 0x1 +#define MX51_PAD_DI1_D0_CS__DI1_D0_CS			0x2b4 0x6b4 0x000 0x0 0x0 +#define MX51_PAD_DI1_D0_CS__GPIO3_3			0x2b4 0x6b4 0x980 0x4 0x1 +#define MX51_PAD_DI1_D1_CS__DI1_D1_CS			0x2b8 0x6b8 0x000 0x0 0x0 +#define MX51_PAD_DI1_D1_CS__DISP1_PIN14			0x2b8 0x6b8 0x000 0x2 0x0 +#define MX51_PAD_DI1_D1_CS__DISP1_PIN5			0x2b8 0x6b8 0x000 0x3 0x0 +#define MX51_PAD_DI1_D1_CS__GPIO3_4			0x2b8 0x6b8 0x984 0x4 0x1 +#define MX51_PAD_DISPB2_SER_DIN__DISP1_PIN1		0x2bc 0x6bc 0x9a4 0x2 0x1 +#define MX51_PAD_DISPB2_SER_DIN__DISPB2_SER_DIN		0x2bc 0x6bc 0x9c4 0x0 0x0 +#define MX51_PAD_DISPB2_SER_DIN__GPIO3_5		0x2bc 0x6bc 0x988 0x4 0x1 +#define MX51_PAD_DISPB2_SER_DIO__DISP1_PIN6		0x2c0 0x6c0 0x000 0x3 0x0 +#define MX51_PAD_DISPB2_SER_DIO__DISPB2_SER_DIO		0x2c0 0x6c0 0x9c4 0x0 0x1 +#define MX51_PAD_DISPB2_SER_DIO__GPIO3_6		0x2c0 0x6c0 0x98c 0x4 0x1 +#define MX51_PAD_DISPB2_SER_CLK__DISP1_PIN17		0x2c4 0x6c4 0x000 0x2 0x0 +#define MX51_PAD_DISPB2_SER_CLK__DISP1_PIN7		0x2c4 0x6c4 0x000 0x3 0x0 +#define MX51_PAD_DISPB2_SER_CLK__DISPB2_SER_CLK		0x2c4 0x6c4 0x000 0x0 0x0 +#define MX51_PAD_DISPB2_SER_CLK__GPIO3_7		0x2c4 0x6c4 0x990 0x4 0x1 +#define MX51_PAD_DISPB2_SER_RS__DISP1_EXT_CLK		0x2c8 0x6c8 0x000 0x2 0x0 +#define MX51_PAD_DISPB2_SER_RS__DISP1_PIN16		0x2c8 0x6c8 0x000 0x2 0x0 +#define MX51_PAD_DISPB2_SER_RS__DISP1_PIN8		0x2c8 0x6c8 0x000 0x3 0x0 +#define MX51_PAD_DISPB2_SER_RS__DISPB2_SER_RS		0x2c8 0x6c8 0x000 0x0 0x0 +#define MX51_PAD_DISPB2_SER_RS__GPIO3_8			0x2c8 0x6c8 0x994 0x4 0x1 +#define MX51_PAD_DISP1_DAT0__DISP1_DAT0			0x2cc 0x6cc 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT1__DISP1_DAT1			0x2d0 0x6d0 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT2__DISP1_DAT2			0x2d4 0x6d4 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT3__DISP1_DAT3			0x2d8 0x6d8 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT4__DISP1_DAT4			0x2dc 0x6dc 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT5__DISP1_DAT5			0x2e0 0x6e0 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT6__BOOT_USB_SRC		0x2e4 0x6e4 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT6__DISP1_DAT6			0x2e4 0x6e4 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT7__BOOT_EEPROM_CFG		0x2e8 0x6e8 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT7__DISP1_DAT7			0x2e8 0x6e8 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT8__BOOT_SRC0			0x2ec 0x6ec 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT8__DISP1_DAT8			0x2ec 0x6ec 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT9__BOOT_SRC1			0x2f0 0x6f0 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT9__DISP1_DAT9			0x2f0 0x6f0 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT10__BOOT_SPARE_SIZE		0x2f4 0x6f4 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT10__DISP1_DAT10		0x2f4 0x6f4 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT11__BOOT_LPB_FREQ2		0x2f8 0x6f8 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT11__DISP1_DAT11		0x2f8 0x6f8 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT12__BOOT_MLC_SEL		0x2fc 0x6fc 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT12__DISP1_DAT12		0x2fc 0x6fc 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT13__BOOT_MEM_CTL0		0x300 0x700 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT13__DISP1_DAT13		0x300 0x700 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT14__BOOT_MEM_CTL1		0x304 0x704 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT14__DISP1_DAT14		0x304 0x704 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT15__BOOT_BUS_WIDTH		0x308 0x708 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT15__DISP1_DAT15		0x308 0x708 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT16__BOOT_PAGE_SIZE0		0x30c 0x70c 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT16__DISP1_DAT16		0x30c 0x70c 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT17__BOOT_PAGE_SIZE1		0x310 0x710 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT17__DISP1_DAT17		0x310 0x710 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT18__BOOT_WEIM_MUXED0		0x314 0x714 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT18__DISP1_DAT18		0x314 0x714 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT18__DISP2_PIN11		0x314 0x714 0x000 0x5 0x0 +#define MX51_PAD_DISP1_DAT18__DISP2_PIN5		0x314 0x714 0x000 0x4 0x0 +#define MX51_PAD_DISP1_DAT19__BOOT_WEIM_MUXED1		0x318 0x718 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT19__DISP1_DAT19		0x318 0x718 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT19__DISP2_PIN12		0x318 0x718 0x000 0x5 0x0 +#define MX51_PAD_DISP1_DAT19__DISP2_PIN6		0x318 0x718 0x000 0x4 0x0 +#define MX51_PAD_DISP1_DAT20__BOOT_MEM_TYPE0		0x31c 0x71c 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT20__DISP1_DAT20		0x31c 0x71c 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT20__DISP2_PIN13		0x31c 0x71c 0x000 0x5 0x0 +#define MX51_PAD_DISP1_DAT20__DISP2_PIN7		0x31c 0x71c 0x000 0x4 0x0 +#define MX51_PAD_DISP1_DAT21__BOOT_MEM_TYPE1		0x320 0x720 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT21__DISP1_DAT21		0x320 0x720 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT21__DISP2_PIN14		0x320 0x720 0x000 0x5 0x0 +#define MX51_PAD_DISP1_DAT21__DISP2_PIN8		0x320 0x720 0x000 0x4 0x0 +#define MX51_PAD_DISP1_DAT22__BOOT_LPB_FREQ0		0x324 0x724 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT22__DISP1_DAT22		0x324 0x724 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT22__DISP2_D0_CS		0x324 0x724 0x000 0x6 0x0 +#define MX51_PAD_DISP1_DAT22__DISP2_DAT16		0x324 0x724 0x000 0x5 0x0 +#define MX51_PAD_DISP1_DAT23__BOOT_LPB_FREQ1		0x328 0x728 0x000 0x7 0x0 +#define MX51_PAD_DISP1_DAT23__DISP1_DAT23		0x328 0x728 0x000 0x0 0x0 +#define MX51_PAD_DISP1_DAT23__DISP2_D1_CS		0x328 0x728 0x000 0x6 0x0 +#define MX51_PAD_DISP1_DAT23__DISP2_DAT17		0x328 0x728 0x000 0x5 0x0 +#define MX51_PAD_DISP1_DAT23__DISP2_SER_CS		0x328 0x728 0x000 0x4 0x0 +#define MX51_PAD_DI1_PIN3__DI1_PIN3			0x32c 0x72c 0x000 0x0 0x0 +#define MX51_PAD_DI1_PIN2__DI1_PIN2			0x330 0x734 0x000 0x0 0x0 +#define MX51_PAD_DI_GP2__DISP1_SER_CLK			0x338 0x740 0x000 0x0 0x0 +#define MX51_PAD_DI_GP2__DISP2_WAIT			0x338 0x740 0x9a8 0x2 0x1 +#define MX51_PAD_DI_GP3__CSI1_DATA_EN			0x33c 0x744 0x9a0 0x3 0x1 +#define MX51_PAD_DI_GP3__DISP1_SER_DIO			0x33c 0x744 0x9c0 0x0 0x0 +#define MX51_PAD_DI_GP3__FEC_TX_ER			0x33c 0x744 0x000 0x2 0x0 +#define MX51_PAD_DI2_PIN4__CSI2_DATA_EN			0x340 0x748 0x99c 0x3 0x1 +#define MX51_PAD_DI2_PIN4__DI2_PIN4			0x340 0x748 0x000 0x0 0x0 +#define MX51_PAD_DI2_PIN4__FEC_CRS			0x340 0x748 0x950 0x2 0x1 +#define MX51_PAD_DI2_PIN2__DI2_PIN2			0x344 0x74c 0x000 0x0 0x0 +#define MX51_PAD_DI2_PIN2__FEC_MDC			0x344 0x74c 0x000 0x2 0x0 +#define MX51_PAD_DI2_PIN3__DI2_PIN3			0x348 0x750 0x000 0x0 0x0 +#define MX51_PAD_DI2_PIN3__FEC_MDIO			0x348 0x750 0x954 0x2 0x1 +#define MX51_PAD_DI2_DISP_CLK__DI2_DISP_CLK		0x34c 0x754 0x000 0x0 0x0 +#define MX51_PAD_DI2_DISP_CLK__FEC_RDATA1		0x34c 0x754 0x95c 0x2 0x1 +#define MX51_PAD_DI_GP4__DI2_PIN15			0x350 0x758 0x000 0x4 0x0 +#define MX51_PAD_DI_GP4__DISP1_SER_DIN			0x350 0x758 0x9c0 0x0 0x1 +#define MX51_PAD_DI_GP4__DISP2_PIN1			0x350 0x758 0x000 0x3 0x0 +#define MX51_PAD_DI_GP4__FEC_RDATA2			0x350 0x758 0x960 0x2 0x1 +#define MX51_PAD_DISP2_DAT0__DISP2_DAT0			0x354 0x75c 0x000 0x0 0x0 +#define MX51_PAD_DISP2_DAT0__FEC_RDATA3			0x354 0x75c 0x964 0x2 0x1 +#define MX51_PAD_DISP2_DAT0__KEY_COL6			0x354 0x75c 0x9c8 0x4 0x1 +#define MX51_PAD_DISP2_DAT0__UART3_RXD			0x354 0x75c 0x9f4 0x5 0x8 +#define MX51_PAD_DISP2_DAT0__USBH3_CLK			0x354 0x75c 0x9f8 0x3 0x1 +#define MX51_PAD_DISP2_DAT1__DISP2_DAT1			0x358 0x760 0x000 0x0 0x0 +#define MX51_PAD_DISP2_DAT1__FEC_RX_ER			0x358 0x760 0x970 0x2 0x1 +#define MX51_PAD_DISP2_DAT1__KEY_COL7			0x358 0x760 0x9cc 0x4 0x1 +#define MX51_PAD_DISP2_DAT1__UART3_TXD			0x358 0x760 0x000 0x5 0x0 +#define MX51_PAD_DISP2_DAT1__USBH3_DIR			0x358 0x760 0xa1c 0x3 0x1 +#define MX51_PAD_DISP2_DAT2__DISP2_DAT2			0x35c 0x764 0x000 0x0 0x0 +#define MX51_PAD_DISP2_DAT3__DISP2_DAT3			0x360 0x768 0x000 0x0 0x0 +#define MX51_PAD_DISP2_DAT4__DISP2_DAT4			0x364 0x76c 0x000 0x0 0x0 +#define MX51_PAD_DISP2_DAT5__DISP2_DAT5			0x368 0x770 0x000 0x0 0x0 +#define MX51_PAD_DISP2_DAT6__DISP2_DAT6			0x36c 0x774 0x000 0x0 0x0 +#define MX51_PAD_DISP2_DAT6__FEC_TDATA1			0x36c 0x774 0x000 0x2 0x0 +#define MX51_PAD_DISP2_DAT6__GPIO1_19			0x36c 0x774 0x000 0x5 0x0 +#define MX51_PAD_DISP2_DAT6__KEY_ROW4			0x36c 0x774 0x9d0 0x4 0x1 +#define MX51_PAD_DISP2_DAT6__USBH3_STP			0x36c 0x774 0xa24 0x3 0x1 +#define MX51_PAD_DISP2_DAT7__DISP2_DAT7			0x370 0x778 0x000 0x0 0x0 +#define MX51_PAD_DISP2_DAT7__FEC_TDATA2			0x370 0x778 0x000 0x2 0x0 +#define MX51_PAD_DISP2_DAT7__GPIO1_29			0x370 0x778 0x000 0x5 0x0 +#define MX51_PAD_DISP2_DAT7__KEY_ROW5			0x370 0x778 0x9d4 0x4 0x1 +#define MX51_PAD_DISP2_DAT7__USBH3_NXT			0x370 0x778 0xa20 0x3 0x1 +#define MX51_PAD_DISP2_DAT8__DISP2_DAT8			0x374 0x77c 0x000 0x0 0x0 +#define MX51_PAD_DISP2_DAT8__FEC_TDATA3			0x374 0x77c 0x000 0x2 0x0 +#define MX51_PAD_DISP2_DAT8__GPIO1_30			0x374 0x77c 0x000 0x5 0x0 +#define MX51_PAD_DISP2_DAT8__KEY_ROW6			0x374 0x77c 0x9d8 0x4 0x1 +#define MX51_PAD_DISP2_DAT8__USBH3_DATA0		0x374 0x77c 0x9fc 0x3 0x1 +#define MX51_PAD_DISP2_DAT9__AUD6_RXC			0x378 0x780 0x8f4 0x4 0x1 +#define MX51_PAD_DISP2_DAT9__DISP2_DAT9			0x378 0x780 0x000 0x0 0x0 +#define MX51_PAD_DISP2_DAT9__FEC_TX_EN			0x378 0x780 0x000 0x2 0x0 +#define MX51_PAD_DISP2_DAT9__GPIO1_31			0x378 0x780 0x000 0x5 0x0 +#define MX51_PAD_DISP2_DAT9__USBH3_DATA1		0x378 0x780 0xa00 0x3 0x1 +#define MX51_PAD_DISP2_DAT10__DISP2_DAT10		0x37c 0x784 0x000 0x0 0x0 +#define MX51_PAD_DISP2_DAT10__DISP2_SER_CS		0x37c 0x784 0x000 0x5 0x0 +#define MX51_PAD_DISP2_DAT10__FEC_COL			0x37c 0x784 0x94c 0x2 0x1 +#define MX51_PAD_DISP2_DAT10__KEY_ROW7			0x37c 0x784 0x9dc 0x4 0x1 +#define MX51_PAD_DISP2_DAT10__USBH3_DATA2		0x37c 0x784 0xa04 0x3 0x1 +#define MX51_PAD_DISP2_DAT11__AUD6_TXD			0x380 0x788 0x8f0 0x4 0x1 +#define MX51_PAD_DISP2_DAT11__DISP2_DAT11		0x380 0x788 0x000 0x0 0x0 +#define MX51_PAD_DISP2_DAT11__FEC_RX_CLK		0x380 0x788 0x968 0x2 0x1 +#define MX51_PAD_DISP2_DAT11__GPIO1_10			0x380 0x788 0x000 0x7 0x0 +#define MX51_PAD_DISP2_DAT11__USBH3_DATA3		0x380 0x788 0xa08 0x3 0x1 +#define MX51_PAD_DISP2_DAT12__AUD6_RXD			0x384 0x78c 0x8ec 0x4 0x1 +#define MX51_PAD_DISP2_DAT12__DISP2_DAT12		0x384 0x78c 0x000 0x0 0x0 +#define MX51_PAD_DISP2_DAT12__FEC_RX_DV			0x384 0x78c 0x96c 0x2 0x1 +#define MX51_PAD_DISP2_DAT12__USBH3_DATA4		0x384 0x78c 0xa0c 0x3 0x1 +#define MX51_PAD_DISP2_DAT13__AUD6_TXC			0x388 0x790 0x8fc 0x4 0x1 +#define MX51_PAD_DISP2_DAT13__DISP2_DAT13		0x388 0x790 0x000 0x0 0x0 +#define MX51_PAD_DISP2_DAT13__FEC_TX_CLK		0x388 0x790 0x974 0x2 0x1 +#define MX51_PAD_DISP2_DAT13__USBH3_DATA5		0x388 0x790 0xa10 0x3 0x1 +#define MX51_PAD_DISP2_DAT14__AUD6_TXFS			0x38c 0x794 0x900 0x4 0x1 +#define MX51_PAD_DISP2_DAT14__DISP2_DAT14		0x38c 0x794 0x000 0x0 0x0 +#define MX51_PAD_DISP2_DAT14__FEC_RDATA0		0x38c 0x794 0x958 0x2 0x1 +#define MX51_PAD_DISP2_DAT14__USBH3_DATA6		0x38c 0x794 0xa14 0x3 0x1 +#define MX51_PAD_DISP2_DAT15__AUD6_RXFS			0x390 0x798 0x8f8 0x4 0x1 +#define MX51_PAD_DISP2_DAT15__DISP1_SER_CS		0x390 0x798 0x000 0x5 0x0 +#define MX51_PAD_DISP2_DAT15__DISP2_DAT15		0x390 0x798 0x000 0x0 0x0 +#define MX51_PAD_DISP2_DAT15__FEC_TDATA0		0x390 0x798 0x000 0x2 0x0 +#define MX51_PAD_DISP2_DAT15__USBH3_DATA7		0x390 0x798 0xa18 0x3 0x1 +#define MX51_PAD_SD1_CMD__AUD5_RXFS			0x394 0x79c 0x8e0 0x1 0x1 +#define MX51_PAD_SD1_CMD__CSPI_MOSI			0x394 0x79c 0x91c 0x2 0x2 +#define MX51_PAD_SD1_CMD__SD1_CMD			0x394 0x79c 0x000 0x0 0x0 +#define MX51_PAD_SD1_CLK__AUD5_RXC			0x398 0x7a0 0x8dc 0x1 0x1 +#define MX51_PAD_SD1_CLK__CSPI_SCLK			0x398 0x7a0 0x914 0x2 0x2 +#define MX51_PAD_SD1_CLK__SD1_CLK			0x398 0x7a0 0x000 0x0 0x0 +#define MX51_PAD_SD1_DATA0__AUD5_TXD			0x39c 0x7a4 0x8d8 0x1 0x2 +#define MX51_PAD_SD1_DATA0__CSPI_MISO			0x39c 0x7a4 0x918 0x2 0x1 +#define MX51_PAD_SD1_DATA0__SD1_DATA0			0x39c 0x7a4 0x000 0x0 0x0 +#define MX51_PAD_EIM_DA0__EIM_DA0			0x01c 0x000 0x000 0x0 0x0 +#define MX51_PAD_EIM_DA1__EIM_DA1			0x020 0x000 0x000 0x0 0x0 +#define MX51_PAD_EIM_DA2__EIM_DA2			0x024 0x000 0x000 0x0 0x0 +#define MX51_PAD_EIM_DA3__EIM_DA3			0x028 0x000 0x000 0x0 0x0 +#define MX51_PAD_SD1_DATA1__AUD5_RXD			0x3a0 0x7a8 0x8d4 0x1 0x2 +#define MX51_PAD_SD1_DATA1__SD1_DATA1			0x3a0 0x7a8 0x000 0x0 0x0 +#define MX51_PAD_EIM_DA4__EIM_DA4			0x02c 0x000 0x000 0x0 0x0 +#define MX51_PAD_EIM_DA5__EIM_DA5			0x030 0x000 0x000 0x0 0x0 +#define MX51_PAD_EIM_DA6__EIM_DA6			0x034 0x000 0x000 0x0 0x0 +#define MX51_PAD_EIM_DA7__EIM_DA7			0x038 0x000 0x000 0x0 0x0 +#define MX51_PAD_SD1_DATA2__AUD5_TXC			0x3a4 0x7ac 0x8e4 0x1 0x2 +#define MX51_PAD_SD1_DATA2__SD1_DATA2			0x3a4 0x7ac 0x000 0x0 0x0 +#define MX51_PAD_EIM_DA10__EIM_DA10			0x044 0x000 0x000 0x0 0x0 +#define MX51_PAD_EIM_DA11__EIM_DA11			0x048 0x000 0x000 0x0 0x0 +#define MX51_PAD_EIM_DA8__EIM_DA8			0x03c 0x000 0x000 0x0 0x0 +#define MX51_PAD_EIM_DA9__EIM_DA9			0x040 0x000 0x000 0x0 0x0 +#define MX51_PAD_SD1_DATA3__AUD5_TXFS			0x3a8 0x7b0 0x8e8 0x1 0x2 +#define MX51_PAD_SD1_DATA3__CSPI_SS1			0x3a8 0x7b0 0x920 0x2 0x1 +#define MX51_PAD_SD1_DATA3__SD1_DATA3			0x3a8 0x7b0 0x000 0x0 0x0 +#define MX51_PAD_GPIO1_0__CSPI_SS2			0x3ac 0x7b4 0x924 0x2 0x0 +#define MX51_PAD_GPIO1_0__GPIO1_0			0x3ac 0x7b4 0x000 0x1 0x0 +#define MX51_PAD_GPIO1_0__SD1_CD			0x3ac 0x7b4 0x000 0x0 0x0 +#define MX51_PAD_GPIO1_1__CSPI_MISO			0x3b0 0x7b8 0x918 0x2 0x2 +#define MX51_PAD_GPIO1_1__GPIO1_1			0x3b0 0x7b8 0x000 0x1 0x0 +#define MX51_PAD_GPIO1_1__SD1_WP			0x3b0 0x7b8 0x000 0x0 0x0 +#define MX51_PAD_EIM_DA12__EIM_DA12			0x04c 0x000 0x000 0x0 0x0 +#define MX51_PAD_EIM_DA13__EIM_DA13			0x050 0x000 0x000 0x0 0x0 +#define MX51_PAD_EIM_DA14__EIM_DA14			0x054 0x000 0x000 0x0 0x0 +#define MX51_PAD_EIM_DA15__EIM_DA15			0x058 0x000 0x000 0x0 0x0 +#define MX51_PAD_SD2_CMD__CSPI_MOSI			0x3b4 0x7bc 0x91c 0x2 0x3 +#define MX51_PAD_SD2_CMD__I2C1_SCL			0x3b4 0x7bc 0x9b0 0x1 0x2 +#define MX51_PAD_SD2_CMD__SD2_CMD			0x3b4 0x7bc 0x000 0x0 0x0 +#define MX51_PAD_SD2_CLK__CSPI_SCLK			0x3b8 0x7c0 0x914 0x2 0x3 +#define MX51_PAD_SD2_CLK__I2C1_SDA			0x3b8 0x7c0 0x9b4 0x1 0x2 +#define MX51_PAD_SD2_CLK__SD2_CLK			0x3b8 0x7c0 0x000 0x0 0x0 +#define MX51_PAD_SD2_DATA0__CSPI_MISO			0x3bc 0x7c4 0x918 0x2 0x3 +#define MX51_PAD_SD2_DATA0__SD1_DAT4			0x3bc 0x7c4 0x000 0x1 0x0 +#define MX51_PAD_SD2_DATA0__SD2_DATA0			0x3bc 0x7c4 0x000 0x0 0x0 +#define MX51_PAD_SD2_DATA1__SD1_DAT5			0x3c0 0x7c8 0x000 0x1 0x0 +#define MX51_PAD_SD2_DATA1__SD2_DATA1			0x3c0 0x7c8 0x000 0x0 0x0 +#define MX51_PAD_SD2_DATA1__USBH3_H2_DP			0x3c0 0x7c8 0x000 0x2 0x0 +#define MX51_PAD_SD2_DATA2__SD1_DAT6			0x3c4 0x7cc 0x000 0x1 0x0 +#define MX51_PAD_SD2_DATA2__SD2_DATA2			0x3c4 0x7cc 0x000 0x0 0x0 +#define MX51_PAD_SD2_DATA2__USBH3_H2_DM			0x3c4 0x7cc 0x000 0x2 0x0 +#define MX51_PAD_SD2_DATA3__CSPI_SS2			0x3c8 0x7d0 0x924 0x2 0x1 +#define MX51_PAD_SD2_DATA3__SD1_DAT7			0x3c8 0x7d0 0x000 0x1 0x0 +#define MX51_PAD_SD2_DATA3__SD2_DATA3			0x3c8 0x7d0 0x000 0x0 0x0 +#define MX51_PAD_GPIO1_2__CCM_OUT_2			0x3cc 0x7d4 0x000 0x5 0x0 +#define MX51_PAD_GPIO1_2__GPIO1_2			0x3cc 0x7d4 0x000 0x0 0x0 +#define MX51_PAD_GPIO1_2__I2C2_SCL			0x3cc 0x7d4 0x9b8 0x2 0x3 +#define MX51_PAD_GPIO1_2__PLL1_BYP			0x3cc 0x7d4 0x90c 0x7 0x1 +#define MX51_PAD_GPIO1_2__PWM1_PWMO			0x3cc 0x7d4 0x000 0x1 0x0 +#define MX51_PAD_GPIO1_3__GPIO1_3			0x3d0 0x7d8 0x000 0x0 0x0 +#define MX51_PAD_GPIO1_3__I2C2_SDA			0x3d0 0x7d8 0x9bc 0x2 0x3 +#define MX51_PAD_GPIO1_3__PLL2_BYP			0x3d0 0x7d8 0x910 0x7 0x1 +#define MX51_PAD_GPIO1_3__PWM2_PWMO			0x3d0 0x7d8 0x000 0x1 0x0 +#define MX51_PAD_PMIC_INT_REQ__PMIC_INT_REQ		0x3d4 0x7fc 0x000 0x0 0x0 +#define MX51_PAD_PMIC_INT_REQ__PMIC_PMU_IRQ_B		0x3d4 0x7fc 0x000 0x1 0x0 +#define MX51_PAD_GPIO1_4__DISP2_EXT_CLK			0x3d8 0x804 0x908 0x4 0x1 +#define MX51_PAD_GPIO1_4__EIM_RDY			0x3d8 0x804 0x938 0x3 0x1 +#define MX51_PAD_GPIO1_4__GPIO1_4			0x3d8 0x804 0x000 0x0 0x0 +#define MX51_PAD_GPIO1_4__WDOG1_WDOG_B			0x3d8 0x804 0x000 0x2 0x0 +#define MX51_PAD_GPIO1_5__CSI2_MCLK			0x3dc 0x808 0x000 0x6 0x0 +#define MX51_PAD_GPIO1_5__DISP2_PIN16			0x3dc 0x808 0x000 0x3 0x0 +#define MX51_PAD_GPIO1_5__GPIO1_5			0x3dc 0x808 0x000 0x0 0x0 +#define MX51_PAD_GPIO1_5__WDOG2_WDOG_B			0x3dc 0x808 0x000 0x2 0x0 +#define MX51_PAD_GPIO1_6__DISP2_PIN17			0x3e0 0x80c 0x000 0x4 0x0 +#define MX51_PAD_GPIO1_6__GPIO1_6			0x3e0 0x80c 0x000 0x0 0x0 +#define MX51_PAD_GPIO1_6__REF_EN_B			0x3e0 0x80c 0x000 0x3 0x0 +#define MX51_PAD_GPIO1_7__CCM_OUT_0			0x3e4 0x810 0x000 0x3 0x0 +#define MX51_PAD_GPIO1_7__GPIO1_7			0x3e4 0x810 0x000 0x0 0x0 +#define MX51_PAD_GPIO1_7__SD2_WP			0x3e4 0x810 0x000 0x6 0x0 +#define MX51_PAD_GPIO1_7__SPDIF_OUT1			0x3e4 0x810 0x000 0x2 0x0 +#define MX51_PAD_GPIO1_8__CSI2_DATA_EN			0x3e8 0x814 0x99c 0x2 0x2 +#define MX51_PAD_GPIO1_8__GPIO1_8			0x3e8 0x814 0x000 0x0 0x0 +#define MX51_PAD_GPIO1_8__SD2_CD			0x3e8 0x814 0x000 0x6 0x0 +#define MX51_PAD_GPIO1_8__USBH3_PWR			0x3e8 0x814 0x000 0x1 0x0 +#define MX51_PAD_GPIO1_9__CCM_OUT_1			0x3ec 0x818 0x000 0x3 0x0 +#define MX51_PAD_GPIO1_9__DISP2_D1_CS			0x3ec 0x818 0x000 0x2 0x0 +#define MX51_PAD_GPIO1_9__DISP2_SER_CS			0x3ec 0x818 0x000 0x7 0x0 +#define MX51_PAD_GPIO1_9__GPIO1_9			0x3ec 0x818 0x000 0x0 0x0 +#define MX51_PAD_GPIO1_9__SD2_LCTL			0x3ec 0x818 0x000 0x6 0x0 +#define MX51_PAD_GPIO1_9__USBH3_OC			0x3ec 0x818 0x000 0x1 0x0 + +#endif /* __DTS_IMX51_PINFUNC_H */ diff --git a/arch/arm/boot/dts/imx51.dtsi b/arch/arm/boot/dts/imx51.dtsi index fcf035bf7c5..21bb786c5b3 100644 --- a/arch/arm/boot/dts/imx51.dtsi +++ b/arch/arm/boot/dts/imx51.dtsi @@ -10,7 +10,8 @@   * http://www.gnu.org/copyleft/gpl.html   */ -/include/ "skeleton.dtsi" +#include "skeleton.dtsi" +#include "imx51-pinfunc.h"  / {  	aliases { @@ -55,6 +56,24 @@  		};  	}; +	cpus { +		#address-cells = <1>; +		#size-cells = <0>; +		cpu@0 { +			device_type = "cpu"; +			compatible = "arm,cortex-a8"; +			reg = <0>; +			clock-latency = <61036>; /* two CLK32 periods */ +			clocks = <&clks 24>; +			clock-names = "cpu"; +			operating-points = < +				/* kHz  uV (No regulator support) */ +				160000  0 +				800000  0 +			>; +		}; +	}; +  	soc {  		#address-cells = <1>;  		#size-cells = <1>; @@ -67,6 +86,9 @@  			compatible = "fsl,imx51-ipu";  			reg = <0x40000000 0x20000000>;  			interrupts = <11 10>; +			clocks = <&clks 59>, <&clks 110>, <&clks 61>; +			clock-names = "bus", "di0", "di1"; +			resets = <&src 2>;  		};  		aips@70000000 { /* AIPS1 */ @@ -244,6 +266,14 @@  				status = "disabled";  			}; +			gpt: timer@73fa0000 { +				compatible = "fsl,imx51-gpt", "fsl,imx31-gpt"; +				reg = <0x73fa0000 0x4000>; +				interrupts = <39>; +				clocks = <&clks 36>, <&clks 41>; +				clock-names = "ipg", "per"; +			}; +  			iomuxc: iomuxc@73fa8000 {  				compatible = "fsl,imx51-iomuxc";  				reg = <0x73fa8000 0x4000>; @@ -251,10 +281,10 @@  				audmux {  					pinctrl_audmux_1: audmuxgrp-1 {  						fsl,pins = < -							384 0x80000000	/* MX51_PAD_AUD3_BB_TXD__AUD3_TXD */ -							386 0x80000000	/* MX51_PAD_AUD3_BB_RXD__AUD3_RXD */ -							389 0x80000000	/* MX51_PAD_AUD3_BB_CK__AUD3_TXC */ -							391 0x80000000	/* MX51_PAD_AUD3_BB_FS__AUD3_TXFS */ +							MX51_PAD_AUD3_BB_TXD__AUD3_TXD 0x80000000 +							MX51_PAD_AUD3_BB_RXD__AUD3_RXD 0x80000000 +							MX51_PAD_AUD3_BB_CK__AUD3_TXC  0x80000000 +							MX51_PAD_AUD3_BB_FS__AUD3_TXFS 0x80000000  						>;  					};  				}; @@ -262,46 +292,46 @@  				fec {  					pinctrl_fec_1: fecgrp-1 {  						fsl,pins = < -							128 0x80000000	/* MX51_PAD_EIM_EB2__FEC_MDIO */ -							134 0x80000000	/* MX51_PAD_EIM_EB3__FEC_RDATA1 */ -							146 0x80000000	/* MX51_PAD_EIM_CS2__FEC_RDATA2 */ -							152 0x80000000	/* MX51_PAD_EIM_CS3__FEC_RDATA3 */ -							158 0x80000000	/* MX51_PAD_EIM_CS4__FEC_RX_ER */ -							165 0x80000000	/* MX51_PAD_EIM_CS5__FEC_CRS */ -							206 0x80000000	/* MX51_PAD_NANDF_RB2__FEC_COL */ -							213 0x80000000	/* MX51_PAD_NANDF_RB3__FEC_RX_CLK */ -							293 0x80000000	/* MX51_PAD_NANDF_D9__FEC_RDATA0 */ -							298 0x80000000	/* MX51_PAD_NANDF_D8__FEC_TDATA0 */ -							225 0x80000000	/* MX51_PAD_NANDF_CS2__FEC_TX_ER */ -							231 0x80000000	/* MX51_PAD_NANDF_CS3__FEC_MDC */ -							237 0x80000000	/* MX51_PAD_NANDF_CS4__FEC_TDATA1 */ -							243 0x80000000	/* MX51_PAD_NANDF_CS5__FEC_TDATA2 */ -							250 0x80000000	/* MX51_PAD_NANDF_CS6__FEC_TDATA3 */ -							255 0x80000000	/* MX51_PAD_NANDF_CS7__FEC_TX_EN */ -							260 0x80000000	/* MX51_PAD_NANDF_RDY_INT__FEC_TX_CLK */ +							MX51_PAD_EIM_EB2__FEC_MDIO	   0x80000000 +							MX51_PAD_EIM_EB3__FEC_RDATA1	   0x80000000 +							MX51_PAD_EIM_CS2__FEC_RDATA2	   0x80000000 +							MX51_PAD_EIM_CS3__FEC_RDATA3	   0x80000000 +							MX51_PAD_EIM_CS4__FEC_RX_ER	   0x80000000 +							MX51_PAD_EIM_CS5__FEC_CRS	   0x80000000 +							MX51_PAD_NANDF_RB2__FEC_COL	   0x80000000 +							MX51_PAD_NANDF_RB3__FEC_RX_CLK	   0x80000000 +							MX51_PAD_NANDF_D9__FEC_RDATA0	   0x80000000 +							MX51_PAD_NANDF_D8__FEC_TDATA0	   0x80000000 +							MX51_PAD_NANDF_CS2__FEC_TX_ER	   0x80000000 +							MX51_PAD_NANDF_CS3__FEC_MDC	   0x80000000 +							MX51_PAD_NANDF_CS4__FEC_TDATA1	   0x80000000 +							MX51_PAD_NANDF_CS5__FEC_TDATA2	   0x80000000 +							MX51_PAD_NANDF_CS6__FEC_TDATA3	   0x80000000 +							MX51_PAD_NANDF_CS7__FEC_TX_EN	   0x80000000 +							MX51_PAD_NANDF_RDY_INT__FEC_TX_CLK 0x80000000  						>;  					};  					pinctrl_fec_2: fecgrp-2 {  						fsl,pins = < -							589 0x80000000 /* MX51_PAD_DI_GP3__FEC_TX_ER */ -							592 0x80000000 /* MX51_PAD_DI2_PIN4__FEC_CRS */ -							594 0x80000000 /* MX51_PAD_DI2_PIN2__FEC_MDC */ -							596 0x80000000 /* MX51_PAD_DI2_PIN3__FEC_MDIO */ -							598 0x80000000 /* MX51_PAD_DI2_DISP_CLK__FEC_RDATA1 */ -							602 0x80000000 /* MX51_PAD_DI_GP4__FEC_RDATA2 */ -							604 0x80000000 /* MX51_PAD_DISP2_DAT0__FEC_RDATA3 */ -							609 0x80000000 /* MX51_PAD_DISP2_DAT1__FEC_RX_ER */ -							618 0x80000000 /* MX51_PAD_DISP2_DAT6__FEC_TDATA1 */ -							623 0x80000000 /* MX51_PAD_DISP2_DAT7__FEC_TDATA2 */ -							628 0x80000000 /* MX51_PAD_DISP2_DAT8__FEC_TDATA3 */ -							634 0x80000000 /* MX51_PAD_DISP2_DAT9__FEC_TX_EN */ -							639 0x80000000 /* MX51_PAD_DISP2_DAT10__FEC_COL */ -							644 0x80000000 /* MX51_PAD_DISP2_DAT11__FEC_RX_CLK */ -							649 0x80000000 /* MX51_PAD_DISP2_DAT12__FEC_RX_DV */ -							653 0x80000000 /* MX51_PAD_DISP2_DAT13__FEC_TX_CLK */ -							657 0x80000000 /* MX51_PAD_DISP2_DAT14__FEC_RDATA0 */ -							662 0x80000000 /* MX51_PAD_DISP2_DAT15__FEC_TDATA0 */ +							MX51_PAD_DI_GP3__FEC_TX_ER	  0x80000000 +							MX51_PAD_DI2_PIN4__FEC_CRS	  0x80000000 +							MX51_PAD_DI2_PIN2__FEC_MDC	  0x80000000 +							MX51_PAD_DI2_PIN3__FEC_MDIO	  0x80000000 +							MX51_PAD_DI2_DISP_CLK__FEC_RDATA1 0x80000000 +							MX51_PAD_DI_GP4__FEC_RDATA2	  0x80000000 +							MX51_PAD_DISP2_DAT0__FEC_RDATA3   0x80000000 +							MX51_PAD_DISP2_DAT1__FEC_RX_ER	  0x80000000 +							MX51_PAD_DISP2_DAT6__FEC_TDATA1	  0x80000000 +							MX51_PAD_DISP2_DAT7__FEC_TDATA2	  0x80000000 +							MX51_PAD_DISP2_DAT8__FEC_TDATA3	  0x80000000 +							MX51_PAD_DISP2_DAT9__FEC_TX_EN	  0x80000000 +							MX51_PAD_DISP2_DAT10__FEC_COL	  0x80000000 +							MX51_PAD_DISP2_DAT11__FEC_RX_CLK  0x80000000 +							MX51_PAD_DISP2_DAT12__FEC_RX_DV	  0x80000000 +							MX51_PAD_DISP2_DAT13__FEC_TX_CLK  0x80000000 +							MX51_PAD_DISP2_DAT14__FEC_RDATA0  0x80000000 +							MX51_PAD_DISP2_DAT15__FEC_TDATA0  0x80000000  						>;  					};  				}; @@ -309,9 +339,19 @@  				ecspi1 {  					pinctrl_ecspi1_1: ecspi1grp-1 {  						fsl,pins = < -							398 0x185	/* MX51_PAD_CSPI1_MISO__ECSPI1_MISO */ -							394 0x185	/* MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI */ -							409 0x185	/* MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK */ +							MX51_PAD_CSPI1_MISO__ECSPI1_MISO 0x185 +							MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI 0x185 +							MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK 0x185 +						>; +					}; +				}; + +				ecspi2 { +					pinctrl_ecspi2_1: ecspi2grp-1 { +						fsl,pins = < +							MX51_PAD_NANDF_RB3__ECSPI2_MISO 0x185 +							MX51_PAD_NANDF_D15__ECSPI2_MOSI 0x185 +							MX51_PAD_NANDF_RB2__ECSPI2_SCLK 0x185  						>;  					};  				}; @@ -319,12 +359,12 @@  				esdhc1 {  					pinctrl_esdhc1_1: esdhc1grp-1 {  						fsl,pins = < -							666 0x400020d5	/* MX51_PAD_SD1_CMD__SD1_CMD */ -							669 0x20d5	/* MX51_PAD_SD1_CLK__SD1_CLK */ -							672 0x20d5	/* MX51_PAD_SD1_DATA0__SD1_DATA0 */ -							678 0x20d5	/* MX51_PAD_SD1_DATA1__SD1_DATA1 */ -							684 0x20d5	/* MX51_PAD_SD1_DATA2__SD1_DATA2 */ -							691 0x20d5	/* MX51_PAD_SD1_DATA3__SD1_DATA3 */ +							MX51_PAD_SD1_CMD__SD1_CMD     0x400020d5 +							MX51_PAD_SD1_CLK__SD1_CLK     0x20d5 +							MX51_PAD_SD1_DATA0__SD1_DATA0 0x20d5 +							MX51_PAD_SD1_DATA1__SD1_DATA1 0x20d5 +							MX51_PAD_SD1_DATA2__SD1_DATA2 0x20d5 +							MX51_PAD_SD1_DATA3__SD1_DATA3 0x20d5  						>;  					};  				}; @@ -332,12 +372,12 @@  				esdhc2 {  					pinctrl_esdhc2_1: esdhc2grp-1 {  						fsl,pins = < -							704 0x400020d5	/* MX51_PAD_SD2_CMD__SD2_CMD */ -							707 0x20d5	/* MX51_PAD_SD2_CLK__SD2_CLK */ -							710 0x20d5	/* MX51_PAD_SD2_DATA0__SD2_DATA0 */ -							712 0x20d5	/* MX51_PAD_SD2_DATA1__SD2_DATA1 */ -							715 0x20d5	/* MX51_PAD_SD2_DATA2__SD2_DATA2 */ -							719 0x20d5	/* MX51_PAD_SD2_DATA3__SD2_DATA3 */ +							MX51_PAD_SD2_CMD__SD2_CMD     0x400020d5 +							MX51_PAD_SD2_CLK__SD2_CLK     0x20d5 +							MX51_PAD_SD2_DATA0__SD2_DATA0 0x20d5 +							MX51_PAD_SD2_DATA1__SD2_DATA1 0x20d5 +							MX51_PAD_SD2_DATA2__SD2_DATA2 0x20d5 +							MX51_PAD_SD2_DATA3__SD2_DATA3 0x20d5  						>;  					};  				}; @@ -345,8 +385,15 @@  				i2c2 {  					pinctrl_i2c2_1: i2c2grp-1 {  						fsl,pins = < -							449 0x400001ed	/* MX51_PAD_KEY_COL4__I2C2_SCL */ -							454 0x400001ed	/* MX51_PAD_KEY_COL5__I2C2_SDA */ +							MX51_PAD_KEY_COL4__I2C2_SCL 0x400001ed +							MX51_PAD_KEY_COL5__I2C2_SDA 0x400001ed +						>; +					}; + +					pinctrl_i2c2_2: i2c2grp-2 { +						fsl,pins = < +							MX51_PAD_EIM_D27__I2C2_SCL 0x400001ed +							MX51_PAD_EIM_D24__I2C2_SDA 0x400001ed  						>;  					};  				}; @@ -354,32 +401,32 @@  				ipu_disp1 {  					pinctrl_ipu_disp1_1: ipudisp1grp-1 {  						fsl,pins = < -							528 0x5 /* MX51_PAD_DISP1_DAT0__DISP1_DAT0 */ -							529 0x5 /* MX51_PAD_DISP1_DAT1__DISP1_DAT1 */ -							530 0x5 /* MX51_PAD_DISP1_DAT2__DISP1_DAT2 */ -							531 0x5 /* MX51_PAD_DISP1_DAT3__DISP1_DAT3 */ -							532 0x5 /* MX51_PAD_DISP1_DAT4__DISP1_DAT4 */ -							533 0x5 /* MX51_PAD_DISP1_DAT5__DISP1_DAT5 */ -							535 0x5 /* MX51_PAD_DISP1_DAT6__DISP1_DAT6 */ -							537 0x5 /* MX51_PAD_DISP1_DAT7__DISP1_DAT7 */ -							539 0x5 /* MX51_PAD_DISP1_DAT8__DISP1_DAT8 */ -							541 0x5 /* MX51_PAD_DISP1_DAT9__DISP1_DAT9 */ -							543 0x5 /* MX51_PAD_DISP1_DAT10__DISP1_DAT10 */ -							545 0x5 /* MX51_PAD_DISP1_DAT11__DISP1_DAT11 */ -							547 0x5 /* MX51_PAD_DISP1_DAT12__DISP1_DAT12 */ -							549 0x5 /* MX51_PAD_DISP1_DAT13__DISP1_DAT13 */ -							551 0x5 /* MX51_PAD_DISP1_DAT14__DISP1_DAT14 */ -							553 0x5 /* MX51_PAD_DISP1_DAT15__DISP1_DAT15 */ -							555 0x5 /* MX51_PAD_DISP1_DAT16__DISP1_DAT16 */ -							557 0x5 /* MX51_PAD_DISP1_DAT17__DISP1_DAT17 */ -							559 0x5 /* MX51_PAD_DISP1_DAT18__DISP1_DAT18 */ -							563 0x5 /* MX51_PAD_DISP1_DAT19__DISP1_DAT19 */ -							567 0x5 /* MX51_PAD_DISP1_DAT20__DISP1_DAT20 */ -							571 0x5 /* MX51_PAD_DISP1_DAT21__DISP1_DAT21 */ -							575 0x5 /* MX51_PAD_DISP1_DAT22__DISP1_DAT22 */ -							579 0x5 /* MX51_PAD_DISP1_DAT23__DISP1_DAT23 */ -							584 0x5 /* MX51_PAD_DI1_PIN2__DI1_PIN2 (hsync) */ -							583 0x5 /* MX51_PAD_DI1_PIN3__DI1_PIN3 (vsync) */ +							MX51_PAD_DISP1_DAT0__DISP1_DAT0	  0x5 +							MX51_PAD_DISP1_DAT1__DISP1_DAT1   0x5 +							MX51_PAD_DISP1_DAT2__DISP1_DAT2   0x5 +							MX51_PAD_DISP1_DAT3__DISP1_DAT3   0x5 +							MX51_PAD_DISP1_DAT4__DISP1_DAT4   0x5 +							MX51_PAD_DISP1_DAT5__DISP1_DAT5   0x5 +							MX51_PAD_DISP1_DAT6__DISP1_DAT6   0x5 +							MX51_PAD_DISP1_DAT7__DISP1_DAT7   0x5 +							MX51_PAD_DISP1_DAT8__DISP1_DAT8   0x5 +							MX51_PAD_DISP1_DAT9__DISP1_DAT9   0x5 +							MX51_PAD_DISP1_DAT10__DISP1_DAT10 0x5 +							MX51_PAD_DISP1_DAT11__DISP1_DAT11 0x5 +							MX51_PAD_DISP1_DAT12__DISP1_DAT12 0x5 +							MX51_PAD_DISP1_DAT13__DISP1_DAT13 0x5 +							MX51_PAD_DISP1_DAT14__DISP1_DAT14 0x5 +							MX51_PAD_DISP1_DAT15__DISP1_DAT15 0x5 +							MX51_PAD_DISP1_DAT16__DISP1_DAT16 0x5 +							MX51_PAD_DISP1_DAT17__DISP1_DAT17 0x5 +							MX51_PAD_DISP1_DAT18__DISP1_DAT18 0x5 +							MX51_PAD_DISP1_DAT19__DISP1_DAT19 0x5 +							MX51_PAD_DISP1_DAT20__DISP1_DAT20 0x5 +							MX51_PAD_DISP1_DAT21__DISP1_DAT21 0x5 +							MX51_PAD_DISP1_DAT22__DISP1_DAT22 0x5 +							MX51_PAD_DISP1_DAT23__DISP1_DAT23 0x5 +							MX51_PAD_DI1_PIN2__DI1_PIN2	  0x5 /* hsync */ +							MX51_PAD_DI1_PIN3__DI1_PIN3	  0x5 /* vsync */  						>;  					};  				}; @@ -387,26 +434,62 @@  				ipu_disp2 {  					pinctrl_ipu_disp2_1: ipudisp2grp-1 {  						fsl,pins = < -							603 0x5 /* MX51_PAD_DISP2_DAT0__DISP2_DAT0 */ -							608 0x5 /* MX51_PAD_DISP2_DAT1__DISP2_DAT1 */ -							613 0x5 /* MX51_PAD_DISP2_DAT2__DISP2_DAT2 */ -							614 0x5 /* MX51_PAD_DISP2_DAT3__DISP2_DAT3 */ -							615 0x5 /* MX51_PAD_DISP2_DAT4__DISP2_DAT4 */ -							616 0x5 /* MX51_PAD_DISP2_DAT5__DISP2_DAT5 */ -							617 0x5 /* MX51_PAD_DISP2_DAT6__DISP2_DAT6 */ -							622 0x5 /* MX51_PAD_DISP2_DAT7__DISP2_DAT7 */ -							627 0x5 /* MX51_PAD_DISP2_DAT8__DISP2_DAT8 */ -							633 0x5 /* MX51_PAD_DISP2_DAT9__DISP2_DAT9 */ -							637 0x5 /* MX51_PAD_DISP2_DAT10__DISP2_DAT10 */ -							643 0x5 /* MX51_PAD_DISP2_DAT11__DISP2_DAT11 */ -							648 0x5 /* MX51_PAD_DISP2_DAT12__DISP2_DAT12 */ -							652 0x5 /* MX51_PAD_DISP2_DAT13__DISP2_DAT13 */ -							656 0x5 /* MX51_PAD_DISP2_DAT14__DISP2_DAT14 */ -							661 0x5 /* MX51_PAD_DISP2_DAT15__DISP2_DAT15 */ -							593 0x5 /* MX51_PAD_DI2_PIN2__DI2_PIN2 (hsync) */ -							595 0x5 /* MX51_PAD_DI2_PIN3__DI2_PIN3 (vsync) */ -							597 0x5 /* MX51_PAD_DI2_DISP_CLK__DI2_DISP_CLK */ -							599 0x5 /* MX51_PAD_DI_GP4__DI2_PIN15 */ +							MX51_PAD_DISP2_DAT0__DISP2_DAT0     0x5 +							MX51_PAD_DISP2_DAT1__DISP2_DAT1     0x5 +							MX51_PAD_DISP2_DAT2__DISP2_DAT2     0x5 +							MX51_PAD_DISP2_DAT3__DISP2_DAT3     0x5 +							MX51_PAD_DISP2_DAT4__DISP2_DAT4     0x5 +							MX51_PAD_DISP2_DAT5__DISP2_DAT5     0x5 +							MX51_PAD_DISP2_DAT6__DISP2_DAT6     0x5 +							MX51_PAD_DISP2_DAT7__DISP2_DAT7     0x5 +							MX51_PAD_DISP2_DAT8__DISP2_DAT8     0x5 +							MX51_PAD_DISP2_DAT9__DISP2_DAT9     0x5 +							MX51_PAD_DISP2_DAT10__DISP2_DAT10   0x5 +							MX51_PAD_DISP2_DAT11__DISP2_DAT11   0x5 +							MX51_PAD_DISP2_DAT12__DISP2_DAT12   0x5 +							MX51_PAD_DISP2_DAT13__DISP2_DAT13   0x5 +							MX51_PAD_DISP2_DAT14__DISP2_DAT14   0x5 +							MX51_PAD_DISP2_DAT15__DISP2_DAT15   0x5 +							MX51_PAD_DI2_PIN2__DI2_PIN2	    0x5 /* hsync */ +							MX51_PAD_DI2_PIN3__DI2_PIN3	    0x5 /* vsync */ +							MX51_PAD_DI2_DISP_CLK__DI2_DISP_CLK 0x5 +							MX51_PAD_DI_GP4__DI2_PIN15	    0x5 +						>; +					}; +				}; + +				pata { +					pinctrl_pata_1: patagrp-1 { +						fsl,pins = < +							MX51_PAD_NANDF_WE_B__PATA_DIOW		0x2004 +							MX51_PAD_NANDF_RE_B__PATA_DIOR		0x2004 +							MX51_PAD_NANDF_ALE__PATA_BUFFER_EN	0x2004 +							MX51_PAD_NANDF_CLE__PATA_RESET_B	0x2004 +							MX51_PAD_NANDF_WP_B__PATA_DMACK		0x2004 +							MX51_PAD_NANDF_RB0__PATA_DMARQ		0x2004 +							MX51_PAD_NANDF_RB1__PATA_IORDY		0x2004 +							MX51_PAD_GPIO_NAND__PATA_INTRQ		0x2004 +							MX51_PAD_NANDF_CS2__PATA_CS_0		0x2004 +							MX51_PAD_NANDF_CS3__PATA_CS_1		0x2004 +							MX51_PAD_NANDF_CS4__PATA_DA_0		0x2004 +							MX51_PAD_NANDF_CS5__PATA_DA_1		0x2004 +							MX51_PAD_NANDF_CS6__PATA_DA_2		0x2004 +							MX51_PAD_NANDF_D15__PATA_DATA15		0x2004 +							MX51_PAD_NANDF_D14__PATA_DATA14		0x2004 +							MX51_PAD_NANDF_D13__PATA_DATA13		0x2004 +							MX51_PAD_NANDF_D12__PATA_DATA12		0x2004 +							MX51_PAD_NANDF_D11__PATA_DATA11		0x2004 +							MX51_PAD_NANDF_D10__PATA_DATA10		0x2004 +							MX51_PAD_NANDF_D9__PATA_DATA9		0x2004 +							MX51_PAD_NANDF_D8__PATA_DATA8		0x2004 +							MX51_PAD_NANDF_D7__PATA_DATA7		0x2004 +							MX51_PAD_NANDF_D6__PATA_DATA6		0x2004 +							MX51_PAD_NANDF_D5__PATA_DATA5		0x2004 +							MX51_PAD_NANDF_D4__PATA_DATA4		0x2004 +							MX51_PAD_NANDF_D3__PATA_DATA3		0x2004 +							MX51_PAD_NANDF_D2__PATA_DATA2		0x2004 +							MX51_PAD_NANDF_D1__PATA_DATA1		0x2004 +							MX51_PAD_NANDF_D0__PATA_DATA0		0x2004  						>;  					};  				}; @@ -414,10 +497,10 @@  				uart1 {  					pinctrl_uart1_1: uart1grp-1 {  						fsl,pins = < -							413 0x1c5	/* MX51_PAD_UART1_RXD__UART1_RXD */ -							416 0x1c5	/* MX51_PAD_UART1_TXD__UART1_TXD */ -							418 0x1c5	/* MX51_PAD_UART1_RTS__UART1_RTS */ -							420 0x1c5	/* MX51_PAD_UART1_CTS__UART1_CTS */ +							MX51_PAD_UART1_RXD__UART1_RXD 0x1c5 +							MX51_PAD_UART1_TXD__UART1_TXD 0x1c5 +							MX51_PAD_UART1_RTS__UART1_RTS 0x1c5 +							MX51_PAD_UART1_CTS__UART1_CTS 0x1c5  						>;  					};  				}; @@ -425,8 +508,8 @@  				uart2 {  					pinctrl_uart2_1: uart2grp-1 {  						fsl,pins = < -							423 0x1c5	/* MX51_PAD_UART2_RXD__UART2_RXD */ -							426 0x1c5	/* MX51_PAD_UART2_TXD__UART2_TXD */ +							MX51_PAD_UART2_RXD__UART2_RXD 0x1c5 +							MX51_PAD_UART2_TXD__UART2_TXD 0x1c5  						>;  					};  				}; @@ -434,17 +517,17 @@  				uart3 {  					pinctrl_uart3_1: uart3grp-1 {  						fsl,pins = < -							54 0x1c5	/* MX51_PAD_EIM_D25__UART3_RXD */ -							59 0x1c5	/* MX51_PAD_EIM_D26__UART3_TXD */ -							65 0x1c5	/* MX51_PAD_EIM_D27__UART3_RTS */ -							49 0x1c5	/* MX51_PAD_EIM_D24__UART3_CTS */ +							MX51_PAD_EIM_D25__UART3_RXD 0x1c5 +							MX51_PAD_EIM_D26__UART3_TXD 0x1c5 +							MX51_PAD_EIM_D27__UART3_RTS 0x1c5 +							MX51_PAD_EIM_D24__UART3_CTS 0x1c5  						>;  					};  					pinctrl_uart3_2: uart3grp-2 {  						fsl,pins = < -							434 0x1c5	/* MX51_PAD_UART3_RXD__UART3_RXD */ -							430 0x1c5	/* MX51_PAD_UART3_TXD__UART3_TXD */ +							MX51_PAD_UART3_RXD__UART3_RXD 0x1c5 +							MX51_PAD_UART3_TXD__UART3_TXD 0x1c5  						>;  					};  				}; @@ -452,14 +535,14 @@  				kpp {  					pinctrl_kpp_1: kppgrp-1 {  						fsl,pins = < -							438 0xe0	/* MX51_PAD_KEY_ROW0__KEY_ROW0 */ -							439 0xe0	/* MX51_PAD_KEY_ROW1__KEY_ROW1 */ -							440 0xe0	/* MX51_PAD_KEY_ROW2__KEY_ROW2 */ -							441 0xe0	/* MX51_PAD_KEY_ROW3__KEY_ROW3 */ -							442 0xe8	/* MX51_PAD_KEY_COL0__KEY_COL0 */ -							444 0xe8	/* MX51_PAD_KEY_COL1__KEY_COL1 */ -							446 0xe8	/* MX51_PAD_KEY_COL2__KEY_COL2 */ -							448 0xe8	/* MX51_PAD_KEY_COL3__KEY_COL3 */ +							MX51_PAD_KEY_ROW0__KEY_ROW0 0xe0 +							MX51_PAD_KEY_ROW1__KEY_ROW1 0xe0 +							MX51_PAD_KEY_ROW2__KEY_ROW2 0xe0 +							MX51_PAD_KEY_ROW3__KEY_ROW3 0xe0 +							MX51_PAD_KEY_COL0__KEY_COL0 0xe8 +							MX51_PAD_KEY_COL1__KEY_COL1 0xe8 +							MX51_PAD_KEY_COL2__KEY_COL2 0xe8 +							MX51_PAD_KEY_COL3__KEY_COL3 0xe8  						>;  					};  				}; @@ -501,6 +584,12 @@  				status = "disabled";  			}; +			src: src@73fd0000 { +				compatible = "fsl,imx51-src"; +				reg = <0x73fd0000 0x4000>; +				#reset-cells = <1>; +			}; +  			clks: ccm@73fd4000{  				compatible = "fsl,imx51-ccm";  				reg = <0x73fd4000 0x4000>; @@ -591,6 +680,14 @@  				status = "disabled";  			}; +			pata: pata@83fe0000 { +				compatible = "fsl,imx51-pata", "fsl,imx27-pata"; +				reg = <0x83fe0000 0x4000>; +				interrupts = <70>; +				clocks = <&clks 161>; +				status = "disabled"; +			}; +  			ssi3: ssi@83fe8000 {  				compatible = "fsl,imx51-ssi", "fsl,imx21-ssi";  				reg = <0x83fe8000 0x4000>; diff --git a/arch/arm/boot/dts/imx53-ard.dts b/arch/arm/boot/dts/imx53-ard.dts index e049fd0319e..174f86938c8 100644 --- a/arch/arm/boot/dts/imx53-ard.dts +++ b/arch/arm/boot/dts/imx53-ard.dts @@ -11,7 +11,7 @@   */  /dts-v1/; -/include/ "imx53.dtsi" +#include "imx53.dtsi"  / {  	model = "Freescale i.MX53 Automotive Reference Design Board"; @@ -112,40 +112,40 @@  	hog {  		pinctrl_hog: hoggrp {  			fsl,pins = < -				1077 0x80000000	/* MX53_PAD_GPIO_1__GPIO1_1 */ -				1085 0x80000000	/* MX53_PAD_GPIO_9__GPIO1_9 */ -				486  0x80000000	/* MX53_PAD_EIM_EB3__GPIO2_31 */ -				739  0x80000000	/* MX53_PAD_GPIO_10__GPIO4_0 */ -				218  0x80000000	/* MX53_PAD_DISP0_DAT16__GPIO5_10 */ -				226  0x80000000	/* MX53_PAD_DISP0_DAT17__GPIO5_11 */ -				233  0x80000000	/* MX53_PAD_DISP0_DAT18__GPIO5_12 */ -				241  0x80000000	/* MX53_PAD_DISP0_DAT19__GPIO5_13 */ -				429  0x80000000	/* MX53_PAD_EIM_D16__EMI_WEIM_D_16 */ -				435  0x80000000	/* MX53_PAD_EIM_D17__EMI_WEIM_D_17 */ -				441  0x80000000	/* MX53_PAD_EIM_D18__EMI_WEIM_D_18 */ -				448  0x80000000	/* MX53_PAD_EIM_D19__EMI_WEIM_D_19 */ -				456  0x80000000	/* MX53_PAD_EIM_D20__EMI_WEIM_D_20 */ -				464  0x80000000	/* MX53_PAD_EIM_D21__EMI_WEIM_D_21 */ -				471  0x80000000	/* MX53_PAD_EIM_D22__EMI_WEIM_D_22 */ -				477  0x80000000	/* MX53_PAD_EIM_D23__EMI_WEIM_D_23 */ -				492  0x80000000	/* MX53_PAD_EIM_D24__EMI_WEIM_D_24 */ -				500  0x80000000	/* MX53_PAD_EIM_D25__EMI_WEIM_D_25 */ -				508  0x80000000	/* MX53_PAD_EIM_D26__EMI_WEIM_D_26 */ -				516  0x80000000	/* MX53_PAD_EIM_D27__EMI_WEIM_D_27 */ -				524  0x80000000	/* MX53_PAD_EIM_D28__EMI_WEIM_D_28 */ -				532  0x80000000	/* MX53_PAD_EIM_D29__EMI_WEIM_D_29 */ -				540  0x80000000	/* MX53_PAD_EIM_D30__EMI_WEIM_D_30 */ -				548  0x80000000	/* MX53_PAD_EIM_D31__EMI_WEIM_D_31 */ -				637  0x80000000	/* MX53_PAD_EIM_DA0__EMI_NAND_WEIM_DA_0 */ -				642  0x80000000	/* MX53_PAD_EIM_DA1__EMI_NAND_WEIM_DA_1 */ -				647  0x80000000	/* MX53_PAD_EIM_DA2__EMI_NAND_WEIM_DA_2 */ -				652  0x80000000	/* MX53_PAD_EIM_DA3__EMI_NAND_WEIM_DA_3 */ -				657  0x80000000	/* MX53_PAD_EIM_DA4__EMI_NAND_WEIM_DA_4 */ -				662  0x80000000	/* MX53_PAD_EIM_DA5__EMI_NAND_WEIM_DA_5 */ -				667  0x80000000	/* MX53_PAD_EIM_DA6__EMI_NAND_WEIM_DA_6 */ -				611  0x80000000	/* MX53_PAD_EIM_OE__EMI_WEIM_OE */ -				616  0x80000000	/* MX53_PAD_EIM_RW__EMI_WEIM_RW */ -				607  0x80000000	/* MX53_PAD_EIM_CS1__EMI_WEIM_CS_1 */ +				MX53_PAD_GPIO_1__GPIO1_1             0x80000000 +				MX53_PAD_GPIO_9__GPIO1_9             0x80000000 +				MX53_PAD_EIM_EB3__GPIO2_31           0x80000000 +				MX53_PAD_GPIO_10__GPIO4_0            0x80000000 +				MX53_PAD_DISP0_DAT16__GPIO5_10	     0x80000000 +				MX53_PAD_DISP0_DAT17__GPIO5_11       0x80000000 +				MX53_PAD_DISP0_DAT18__GPIO5_12       0x80000000 +				MX53_PAD_DISP0_DAT19__GPIO5_13       0x80000000 +				MX53_PAD_EIM_D16__EMI_WEIM_D_16      0x80000000 +				MX53_PAD_EIM_D17__EMI_WEIM_D_17      0x80000000 +				MX53_PAD_EIM_D18__EMI_WEIM_D_18      0x80000000 +				MX53_PAD_EIM_D19__EMI_WEIM_D_19      0x80000000 +				MX53_PAD_EIM_D20__EMI_WEIM_D_20      0x80000000 +				MX53_PAD_EIM_D21__EMI_WEIM_D_21      0x80000000 +				MX53_PAD_EIM_D22__EMI_WEIM_D_22      0x80000000 +				MX53_PAD_EIM_D23__EMI_WEIM_D_23      0x80000000 +				MX53_PAD_EIM_D24__EMI_WEIM_D_24      0x80000000 +				MX53_PAD_EIM_D25__EMI_WEIM_D_25      0x80000000 +				MX53_PAD_EIM_D26__EMI_WEIM_D_26      0x80000000 +				MX53_PAD_EIM_D27__EMI_WEIM_D_27      0x80000000 +				MX53_PAD_EIM_D28__EMI_WEIM_D_28      0x80000000 +				MX53_PAD_EIM_D29__EMI_WEIM_D_29      0x80000000 +				MX53_PAD_EIM_D30__EMI_WEIM_D_30      0x80000000 +				MX53_PAD_EIM_D31__EMI_WEIM_D_31      0x80000000 +				MX53_PAD_EIM_DA0__EMI_NAND_WEIM_DA_0 0x80000000 +				MX53_PAD_EIM_DA1__EMI_NAND_WEIM_DA_1 0x80000000 +				MX53_PAD_EIM_DA2__EMI_NAND_WEIM_DA_2 0x80000000 +				MX53_PAD_EIM_DA3__EMI_NAND_WEIM_DA_3 0x80000000 +				MX53_PAD_EIM_DA4__EMI_NAND_WEIM_DA_4 0x80000000 +				MX53_PAD_EIM_DA5__EMI_NAND_WEIM_DA_5 0x80000000 +				MX53_PAD_EIM_DA6__EMI_NAND_WEIM_DA_6 0x80000000 +				MX53_PAD_EIM_OE__EMI_WEIM_OE	     0x80000000 +				MX53_PAD_EIM_RW__EMI_WEIM_RW	     0x80000000 +				MX53_PAD_EIM_CS1__EMI_WEIM_CS_1	     0x80000000  			>;  		};  	}; diff --git a/arch/arm/boot/dts/imx53-evk.dts b/arch/arm/boot/dts/imx53-evk.dts index 85a89b52f9b..801fda728ed 100644 --- a/arch/arm/boot/dts/imx53-evk.dts +++ b/arch/arm/boot/dts/imx53-evk.dts @@ -11,7 +11,7 @@   */  /dts-v1/; -/include/ "imx53.dtsi" +#include "imx53.dtsi"  / {  	model = "Freescale i.MX53 Evaluation Kit"; @@ -82,14 +82,14 @@  	hog {  		pinctrl_hog: hoggrp {  			fsl,pins = < -				424  0x80000000	/* MX53_PAD_EIM_EB2__GPIO2_30 */ -				449  0x80000000	/* MX53_PAD_EIM_D19__GPIO3_19 */ -				693  0x80000000	/* MX53_PAD_EIM_DA11__GPIO3_11 */ -				697  0x80000000	/* MX53_PAD_EIM_DA12__GPIO3_12 */ -				701  0x80000000	/* MX53_PAD_EIM_DA13__GPIO3_13 */ -				705  0x80000000	/* MX53_PAD_EIM_DA14__GPIO3_14 */ -				868  0x80000000	/* MX53_PAD_PATA_DA_0__GPIO7_6 */ -				873  0x80000000	/* MX53_PAD_PATA_DA_1__GPIO7_7 */ +				MX53_PAD_EIM_EB2__GPIO2_30  0x80000000 +				MX53_PAD_EIM_D19__GPIO3_19  0x80000000 +				MX53_PAD_EIM_DA11__GPIO3_11 0x80000000 +				MX53_PAD_EIM_DA12__GPIO3_12 0x80000000 +				MX53_PAD_EIM_DA13__GPIO3_13 0x80000000 +				MX53_PAD_EIM_DA14__GPIO3_14 0x80000000 +				MX53_PAD_PATA_DA_0__GPIO7_6 0x80000000 +				MX53_PAD_PATA_DA_1__GPIO7_7 0x80000000  			>;  		};  	}; diff --git a/arch/arm/boot/dts/imx53-mba53.dts b/arch/arm/boot/dts/imx53-mba53.dts index 468c0a1d48d..445a01119cc 100644 --- a/arch/arm/boot/dts/imx53-mba53.dts +++ b/arch/arm/boot/dts/imx53-mba53.dts @@ -11,7 +11,7 @@   */  /dts-v1/; -/include/ "imx53-tqma53.dtsi" +#include "imx53-tqma53.dtsi"  / {  	model = "TQ MBa53 starter kit"; @@ -21,51 +21,57 @@  &iomuxc {  	lvds1 {  		pinctrl_lvds1_1: lvds1-grp1 { -			fsl,pins = <730 0x10000		/* LVDS0_TX3 */ -				    732 0x10000		/* LVDS0_CLK */ -				    734 0x10000		/* LVDS0_TX2 */ -				    736 0x10000		/* LVDS0_TX1 */ -				    738 0x10000>;	/* LVDS0_TX0 */ +			fsl,pins = < +				MX53_PAD_LVDS0_TX3_P__LDB_LVDS0_TX3 0x10000 +				MX53_PAD_LVDS0_CLK_P__LDB_LVDS0_CLK 0x10000 +				MX53_PAD_LVDS0_TX2_P__LDB_LVDS0_TX2 0x10000 +				MX53_PAD_LVDS0_TX1_P__LDB_LVDS0_TX1 0x10000 +				MX53_PAD_LVDS0_TX0_P__LDB_LVDS0_TX0 0x10000 +			>;  		};  		pinctrl_lvds1_2: lvds1-grp2 { -			fsl,pins = <720 0x10000		/* LVDS1_TX3 */ -				    722 0x10000		/* LVDS1_TX2 */ -				    724 0x10000		/* LVDS1_CLK */ -				    726 0x10000		/* LVDS1_TX1 */ -				    728 0x10000>;	/* LVDS1_TX0 */ +			fsl,pins = < +				MX53_PAD_LVDS1_TX3_P__LDB_LVDS1_TX3 0x10000 +				MX53_PAD_LVDS1_TX2_P__LDB_LVDS1_TX2 0x10000 +				MX53_PAD_LVDS1_CLK_P__LDB_LVDS1_CLK 0x10000 +				MX53_PAD_LVDS1_TX1_P__LDB_LVDS1_TX1 0x10000 +				MX53_PAD_LVDS1_TX0_P__LDB_LVDS1_TX0 0x10000 +			>;  		};  	};  	disp1 {  		pinctrl_disp1_1: disp1-grp1 { -			fsl,pins = <689 0x10000		/* DISP1_DRDY	*/ -				    482 0x10000		/* DISP1_HSYNC	*/ -				    489 0x10000		/* DISP1_VSYNC	*/ -				    515 0x10000		/* DISP1_DAT_22	*/ -				    523 0x10000		/* DISP1_DAT_23	*/ -				    545 0x10000		/* DISP1_DAT_21	*/ -				    553 0x10000		/* DISP1_DAT_20	*/ -				    558 0x10000		/* DISP1_DAT_19	*/ -				    564 0x10000		/* DISP1_DAT_18	*/ -				    570 0x10000		/* DISP1_DAT_17	*/ -				    575 0x10000		/* DISP1_DAT_16	*/ -				    580 0x10000		/* DISP1_DAT_15	*/ -				    585 0x10000		/* DISP1_DAT_14	*/ -				    590 0x10000		/* DISP1_DAT_13	*/ -				    595 0x10000		/* DISP1_DAT_12	*/ -				    628 0x10000		/* DISP1_DAT_11	*/ -				    634 0x10000		/* DISP1_DAT_10	*/ -				    639 0x10000		/* DISP1_DAT_9	*/ -				    644 0x10000		/* DISP1_DAT_8	*/ -				    649 0x10000		/* DISP1_DAT_7	*/ -				    654 0x10000		/* DISP1_DAT_6	*/ -				    659 0x10000		/* DISP1_DAT_5	*/ -				    664 0x10000		/* DISP1_DAT_4	*/ -				    669 0x10000		/* DISP1_DAT_3	*/ -				    674 0x10000		/* DISP1_DAT_2	*/ -				    679 0x10000		/* DISP1_DAT_1	*/ -				    684 0x10000>;	/* DISP1_DAT_0	*/ +			fsl,pins = < +				MX53_PAD_EIM_DA10__IPU_DI1_PIN15   0x10000 /* DISP1_DRDY */ +				MX53_PAD_EIM_D23__IPU_DI1_PIN2     0x10000 /* DISP1_HSYNC */ +				MX53_PAD_EIM_EB3__IPU_DI1_PIN3     0x10000 /* DISP1_VSYNC */ +				MX53_PAD_EIM_D26__IPU_DISP1_DAT_22 0x10000 +				MX53_PAD_EIM_D27__IPU_DISP1_DAT_23 0x10000 +				MX53_PAD_EIM_D30__IPU_DISP1_DAT_21 0x10000 +				MX53_PAD_EIM_D31__IPU_DISP1_DAT_20 0x10000 +				MX53_PAD_EIM_A24__IPU_DISP1_DAT_19 0x10000 +				MX53_PAD_EIM_A23__IPU_DISP1_DAT_18 0x10000 +				MX53_PAD_EIM_A22__IPU_DISP1_DAT_17 0x10000 +				MX53_PAD_EIM_A21__IPU_DISP1_DAT_16 0x10000 +				MX53_PAD_EIM_A20__IPU_DISP1_DAT_15 0x10000 +				MX53_PAD_EIM_A19__IPU_DISP1_DAT_14 0x10000 +				MX53_PAD_EIM_A18__IPU_DISP1_DAT_13 0x10000 +				MX53_PAD_EIM_A17__IPU_DISP1_DAT_12 0x10000 +				MX53_PAD_EIM_EB0__IPU_DISP1_DAT_11 0x10000 +				MX53_PAD_EIM_EB1__IPU_DISP1_DAT_10 0x10000 +				MX53_PAD_EIM_DA0__IPU_DISP1_DAT_9  0x10000 +				MX53_PAD_EIM_DA1__IPU_DISP1_DAT_8  0x10000 +				MX53_PAD_EIM_DA2__IPU_DISP1_DAT_7  0x10000 +				MX53_PAD_EIM_DA3__IPU_DISP1_DAT_6  0x10000 +				MX53_PAD_EIM_DA4__IPU_DISP1_DAT_5  0x10000 +				MX53_PAD_EIM_DA5__IPU_DISP1_DAT_4  0x10000 +				MX53_PAD_EIM_DA6__IPU_DISP1_DAT_3  0x10000 +				MX53_PAD_EIM_DA7__IPU_DISP1_DAT_2  0x10000 +				MX53_PAD_EIM_DA8__IPU_DISP1_DAT_1  0x10000 +				MX53_PAD_EIM_DA9__IPU_DISP1_DAT_0  0x10000 +			>;  		};  	};  }; diff --git a/arch/arm/boot/dts/imx53-pinfunc.h b/arch/arm/boot/dts/imx53-pinfunc.h new file mode 100644 index 00000000000..aec406bc65e --- /dev/null +++ b/arch/arm/boot/dts/imx53-pinfunc.h @@ -0,0 +1,1189 @@ +/* + * Copyright 2013 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. + * + */ + +#ifndef __DTS_IMX53_PINFUNC_H +#define __DTS_IMX53_PINFUNC_H + +/* + * The pin function ID is a tuple of + * <mux_reg conf_reg input_reg mux_mode input_val> + */ +#define MX53_PAD_GPIO_19__KPP_COL_5				0x020 0x348 0x840 0x0 0x0 +#define MX53_PAD_GPIO_19__GPIO4_5				0x020 0x348 0x000 0x1 0x0 +#define MX53_PAD_GPIO_19__CCM_CLKO				0x020 0x348 0x000 0x2 0x0 +#define MX53_PAD_GPIO_19__SPDIF_OUT1				0x020 0x348 0x000 0x3 0x0 +#define MX53_PAD_GPIO_19__RTC_CE_RTC_EXT_TRIG2			0x020 0x348 0x000 0x4 0x0 +#define MX53_PAD_GPIO_19__ECSPI1_RDY				0x020 0x348 0x000 0x5 0x0 +#define MX53_PAD_GPIO_19__FEC_TDATA_3				0x020 0x348 0x000 0x6 0x0 +#define MX53_PAD_GPIO_19__SRC_INT_BOOT				0x020 0x348 0x000 0x7 0x0 +#define MX53_PAD_KEY_COL0__KPP_COL_0				0x024 0x34c 0x000 0x0 0x0 +#define MX53_PAD_KEY_COL0__GPIO4_6				0x024 0x34c 0x000 0x1 0x0 +#define MX53_PAD_KEY_COL0__AUDMUX_AUD5_TXC			0x024 0x34c 0x758 0x2 0x0 +#define MX53_PAD_KEY_COL0__UART4_TXD_MUX			0x024 0x34c 0x000 0x4 0x0 +#define MX53_PAD_KEY_COL0__ECSPI1_SCLK				0x024 0x34c 0x79c 0x5 0x0 +#define MX53_PAD_KEY_COL0__FEC_RDATA_3				0x024 0x34c 0x000 0x6 0x0 +#define MX53_PAD_KEY_COL0__SRC_ANY_PU_RST			0x024 0x34c 0x000 0x7 0x0 +#define MX53_PAD_KEY_ROW0__KPP_ROW_0				0x028 0x350 0x000 0x0 0x0 +#define MX53_PAD_KEY_ROW0__GPIO4_7				0x028 0x350 0x000 0x1 0x0 +#define MX53_PAD_KEY_ROW0__AUDMUX_AUD5_TXD			0x028 0x350 0x74c 0x2 0x0 +#define MX53_PAD_KEY_ROW0__UART4_RXD_MUX			0x028 0x350 0x890 0x4 0x1 +#define MX53_PAD_KEY_ROW0__ECSPI1_MOSI				0x028 0x350 0x7a4 0x5 0x0 +#define MX53_PAD_KEY_ROW0__FEC_TX_ER				0x028 0x350 0x000 0x6 0x0 +#define MX53_PAD_KEY_COL1__KPP_COL_1				0x02c 0x354 0x000 0x0 0x0 +#define MX53_PAD_KEY_COL1__GPIO4_8				0x02c 0x354 0x000 0x1 0x0 +#define MX53_PAD_KEY_COL1__AUDMUX_AUD5_TXFS			0x02c 0x354 0x75c 0x2 0x0 +#define MX53_PAD_KEY_COL1__UART5_TXD_MUX			0x02c 0x354 0x000 0x4 0x0 +#define MX53_PAD_KEY_COL1__ECSPI1_MISO				0x02c 0x354 0x7a0 0x5 0x0 +#define MX53_PAD_KEY_COL1__FEC_RX_CLK				0x02c 0x354 0x808 0x6 0x0 +#define MX53_PAD_KEY_COL1__USBPHY1_TXREADY			0x02c 0x354 0x000 0x7 0x0 +#define MX53_PAD_KEY_ROW1__KPP_ROW_1				0x030 0x358 0x000 0x0 0x0 +#define MX53_PAD_KEY_ROW1__GPIO4_9				0x030 0x358 0x000 0x1 0x0 +#define MX53_PAD_KEY_ROW1__AUDMUX_AUD5_RXD			0x030 0x358 0x748 0x2 0x0 +#define MX53_PAD_KEY_ROW1__UART5_RXD_MUX			0x030 0x358 0x898 0x4 0x1 +#define MX53_PAD_KEY_ROW1__ECSPI1_SS0				0x030 0x358 0x7a8 0x5 0x0 +#define MX53_PAD_KEY_ROW1__FEC_COL				0x030 0x358 0x800 0x6 0x0 +#define MX53_PAD_KEY_ROW1__USBPHY1_RXVALID			0x030 0x358 0x000 0x7 0x0 +#define MX53_PAD_KEY_COL2__KPP_COL_2				0x034 0x35c 0x000 0x0 0x0 +#define MX53_PAD_KEY_COL2__GPIO4_10				0x034 0x35c 0x000 0x1 0x0 +#define MX53_PAD_KEY_COL2__CAN1_TXCAN				0x034 0x35c 0x000 0x2 0x0 +#define MX53_PAD_KEY_COL2__FEC_MDIO				0x034 0x35c 0x804 0x4 0x0 +#define MX53_PAD_KEY_COL2__ECSPI1_SS1				0x034 0x35c 0x7ac 0x5 0x0 +#define MX53_PAD_KEY_COL2__FEC_RDATA_2				0x034 0x35c 0x000 0x6 0x0 +#define MX53_PAD_KEY_COL2__USBPHY1_RXACTIVE			0x034 0x35c 0x000 0x7 0x0 +#define MX53_PAD_KEY_ROW2__KPP_ROW_2				0x038 0x360 0x000 0x0 0x0 +#define MX53_PAD_KEY_ROW2__GPIO4_11				0x038 0x360 0x000 0x1 0x0 +#define MX53_PAD_KEY_ROW2__CAN1_RXCAN				0x038 0x360 0x760 0x2 0x0 +#define MX53_PAD_KEY_ROW2__FEC_MDC				0x038 0x360 0x000 0x4 0x0 +#define MX53_PAD_KEY_ROW2__ECSPI1_SS2				0x038 0x360 0x7b0 0x5 0x0 +#define MX53_PAD_KEY_ROW2__FEC_TDATA_2				0x038 0x360 0x000 0x6 0x0 +#define MX53_PAD_KEY_ROW2__USBPHY1_RXERROR			0x038 0x360 0x000 0x7 0x0 +#define MX53_PAD_KEY_COL3__KPP_COL_3				0x03c 0x364 0x000 0x0 0x0 +#define MX53_PAD_KEY_COL3__GPIO4_12				0x03c 0x364 0x000 0x1 0x0 +#define MX53_PAD_KEY_COL3__USBOH3_H2_DP				0x03c 0x364 0x000 0x2 0x0 +#define MX53_PAD_KEY_COL3__SPDIF_IN1				0x03c 0x364 0x870 0x3 0x0 +#define MX53_PAD_KEY_COL3__I2C2_SCL				0x03c 0x364 0x81c 0x4 0x0 +#define MX53_PAD_KEY_COL3__ECSPI1_SS3				0x03c 0x364 0x7b4 0x5 0x0 +#define MX53_PAD_KEY_COL3__FEC_CRS				0x03c 0x364 0x000 0x6 0x0 +#define MX53_PAD_KEY_COL3__USBPHY1_SIECLOCK			0x03c 0x364 0x000 0x7 0x0 +#define MX53_PAD_KEY_ROW3__KPP_ROW_3				0x040 0x368 0x000 0x0 0x0 +#define MX53_PAD_KEY_ROW3__GPIO4_13				0x040 0x368 0x000 0x1 0x0 +#define MX53_PAD_KEY_ROW3__USBOH3_H2_DM				0x040 0x368 0x000 0x2 0x0 +#define MX53_PAD_KEY_ROW3__CCM_ASRC_EXT_CLK			0x040 0x368 0x768 0x3 0x0 +#define MX53_PAD_KEY_ROW3__I2C2_SDA				0x040 0x368 0x820 0x4 0x0 +#define MX53_PAD_KEY_ROW3__OSC32K_32K_OUT			0x040 0x368 0x000 0x5 0x0 +#define MX53_PAD_KEY_ROW3__CCM_PLL4_BYP				0x040 0x368 0x77c 0x6 0x0 +#define MX53_PAD_KEY_ROW3__USBPHY1_LINESTATE_0			0x040 0x368 0x000 0x7 0x0 +#define MX53_PAD_KEY_COL4__KPP_COL_4				0x044 0x36c 0x000 0x0 0x0 +#define MX53_PAD_KEY_COL4__GPIO4_14				0x044 0x36c 0x000 0x1 0x0 +#define MX53_PAD_KEY_COL4__CAN2_TXCAN				0x044 0x36c 0x000 0x2 0x0 +#define MX53_PAD_KEY_COL4__IPU_SISG_4				0x044 0x36c 0x000 0x3 0x0 +#define MX53_PAD_KEY_COL4__UART5_RTS				0x044 0x36c 0x894 0x4 0x0 +#define MX53_PAD_KEY_COL4__USBOH3_USBOTG_OC			0x044 0x36c 0x89c 0x5 0x0 +#define MX53_PAD_KEY_COL4__USBPHY1_LINESTATE_1			0x044 0x36c 0x000 0x7 0x0 +#define MX53_PAD_KEY_ROW4__KPP_ROW_4				0x048 0x370 0x000 0x0 0x0 +#define MX53_PAD_KEY_ROW4__GPIO4_15				0x048 0x370 0x000 0x1 0x0 +#define MX53_PAD_KEY_ROW4__CAN2_RXCAN				0x048 0x370 0x764 0x2 0x0 +#define MX53_PAD_KEY_ROW4__IPU_SISG_5				0x048 0x370 0x000 0x3 0x0 +#define MX53_PAD_KEY_ROW4__UART5_CTS				0x048 0x370 0x000 0x4 0x0 +#define MX53_PAD_KEY_ROW4__USBOH3_USBOTG_PWR			0x048 0x370 0x000 0x5 0x0 +#define MX53_PAD_KEY_ROW4__USBPHY1_VBUSVALID			0x048 0x370 0x000 0x7 0x0 +#define MX53_PAD_DI0_DISP_CLK__IPU_DI0_DISP_CLK			0x04c 0x378 0x000 0x0 0x0 +#define MX53_PAD_DI0_DISP_CLK__GPIO4_16				0x04c 0x378 0x000 0x1 0x0 +#define MX53_PAD_DI0_DISP_CLK__USBOH3_USBH2_DIR			0x04c 0x378 0x000 0x2 0x0 +#define MX53_PAD_DI0_DISP_CLK__SDMA_DEBUG_CORE_STATE_0		0x04c 0x378 0x000 0x5 0x0 +#define MX53_PAD_DI0_DISP_CLK__EMI_EMI_DEBUG_0			0x04c 0x378 0x000 0x6 0x0 +#define MX53_PAD_DI0_DISP_CLK__USBPHY1_AVALID			0x04c 0x378 0x000 0x7 0x0 +#define MX53_PAD_DI0_PIN15__IPU_DI0_PIN15			0x050 0x37c 0x000 0x0 0x0 +#define MX53_PAD_DI0_PIN15__GPIO4_17				0x050 0x37c 0x000 0x1 0x0 +#define MX53_PAD_DI0_PIN15__AUDMUX_AUD6_TXC			0x050 0x37c 0x000 0x2 0x0 +#define MX53_PAD_DI0_PIN15__SDMA_DEBUG_CORE_STATE_1		0x050 0x37c 0x000 0x5 0x0 +#define MX53_PAD_DI0_PIN15__EMI_EMI_DEBUG_1			0x050 0x37c 0x000 0x6 0x0 +#define MX53_PAD_DI0_PIN15__USBPHY1_BVALID			0x050 0x37c 0x000 0x7 0x0 +#define MX53_PAD_DI0_PIN2__IPU_DI0_PIN2				0x054 0x380 0x000 0x0 0x0 +#define MX53_PAD_DI0_PIN2__GPIO4_18				0x054 0x380 0x000 0x1 0x0 +#define MX53_PAD_DI0_PIN2__AUDMUX_AUD6_TXD			0x054 0x380 0x000 0x2 0x0 +#define MX53_PAD_DI0_PIN2__SDMA_DEBUG_CORE_STATE_2		0x054 0x380 0x000 0x5 0x0 +#define MX53_PAD_DI0_PIN2__EMI_EMI_DEBUG_2			0x054 0x380 0x000 0x6 0x0 +#define MX53_PAD_DI0_PIN2__USBPHY1_ENDSESSION			0x054 0x380 0x000 0x7 0x0 +#define MX53_PAD_DI0_PIN3__IPU_DI0_PIN3				0x058 0x384 0x000 0x0 0x0 +#define MX53_PAD_DI0_PIN3__GPIO4_19				0x058 0x384 0x000 0x1 0x0 +#define MX53_PAD_DI0_PIN3__AUDMUX_AUD6_TXFS			0x058 0x384 0x000 0x2 0x0 +#define MX53_PAD_DI0_PIN3__SDMA_DEBUG_CORE_STATE_3		0x058 0x384 0x000 0x5 0x0 +#define MX53_PAD_DI0_PIN3__EMI_EMI_DEBUG_3			0x058 0x384 0x000 0x6 0x0 +#define MX53_PAD_DI0_PIN3__USBPHY1_IDDIG			0x058 0x384 0x000 0x7 0x0 +#define MX53_PAD_DI0_PIN4__IPU_DI0_PIN4				0x05c 0x388 0x000 0x0 0x0 +#define MX53_PAD_DI0_PIN4__GPIO4_20				0x05c 0x388 0x000 0x1 0x0 +#define MX53_PAD_DI0_PIN4__AUDMUX_AUD6_RXD			0x05c 0x388 0x000 0x2 0x0 +#define MX53_PAD_DI0_PIN4__ESDHC1_WP				0x05c 0x388 0x7fc 0x3 0x0 +#define MX53_PAD_DI0_PIN4__SDMA_DEBUG_YIELD			0x05c 0x388 0x000 0x5 0x0 +#define MX53_PAD_DI0_PIN4__EMI_EMI_DEBUG_4			0x05c 0x388 0x000 0x6 0x0 +#define MX53_PAD_DI0_PIN4__USBPHY1_HOSTDISCONNECT		0x05c 0x388 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT0__IPU_DISP0_DAT_0			0x060 0x38c 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT0__GPIO4_21				0x060 0x38c 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT0__CSPI_SCLK				0x060 0x38c 0x780 0x2 0x0 +#define MX53_PAD_DISP0_DAT0__USBOH3_USBH2_DATA_0		0x060 0x38c 0x000 0x3 0x0 +#define MX53_PAD_DISP0_DAT0__SDMA_DEBUG_CORE_RUN		0x060 0x38c 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT0__EMI_EMI_DEBUG_5			0x060 0x38c 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT0__USBPHY2_TXREADY			0x060 0x38c 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT1__IPU_DISP0_DAT_1			0x064 0x390 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT1__GPIO4_22				0x064 0x390 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT1__CSPI_MOSI				0x064 0x390 0x788 0x2 0x0 +#define MX53_PAD_DISP0_DAT1__USBOH3_USBH2_DATA_1		0x064 0x390 0x000 0x3 0x0 +#define MX53_PAD_DISP0_DAT1__SDMA_DEBUG_EVENT_CHANNEL_SEL	0x064 0x390 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT1__EMI_EMI_DEBUG_6			0x064 0x390 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT1__USBPHY2_RXVALID			0x064 0x390 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT2__IPU_DISP0_DAT_2			0x068 0x394 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT2__GPIO4_23				0x068 0x394 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT2__CSPI_MISO				0x068 0x394 0x784 0x2 0x0 +#define MX53_PAD_DISP0_DAT2__USBOH3_USBH2_DATA_2		0x068 0x394 0x000 0x3 0x0 +#define MX53_PAD_DISP0_DAT2__SDMA_DEBUG_MODE			0x068 0x394 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT2__EMI_EMI_DEBUG_7			0x068 0x394 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT2__USBPHY2_RXACTIVE			0x068 0x394 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT3__IPU_DISP0_DAT_3			0x06c 0x398 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT3__GPIO4_24				0x06c 0x398 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT3__CSPI_SS0				0x06c 0x398 0x78c 0x2 0x0 +#define MX53_PAD_DISP0_DAT3__USBOH3_USBH2_DATA_3		0x06c 0x398 0x000 0x3 0x0 +#define MX53_PAD_DISP0_DAT3__SDMA_DEBUG_BUS_ERROR		0x06c 0x398 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT3__EMI_EMI_DEBUG_8			0x06c 0x398 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT3__USBPHY2_RXERROR			0x06c 0x398 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT4__IPU_DISP0_DAT_4			0x070 0x39c 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT4__GPIO4_25				0x070 0x39c 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT4__CSPI_SS1				0x070 0x39c 0x790 0x2 0x0 +#define MX53_PAD_DISP0_DAT4__USBOH3_USBH2_DATA_4		0x070 0x39c 0x000 0x3 0x0 +#define MX53_PAD_DISP0_DAT4__SDMA_DEBUG_BUS_RWB			0x070 0x39c 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT4__EMI_EMI_DEBUG_9			0x070 0x39c 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT4__USBPHY2_SIECLOCK			0x070 0x39c 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT5__IPU_DISP0_DAT_5			0x074 0x3a0 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT5__GPIO4_26				0x074 0x3a0 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT5__CSPI_SS2				0x074 0x3a0 0x794 0x2 0x0 +#define MX53_PAD_DISP0_DAT5__USBOH3_USBH2_DATA_5		0x074 0x3a0 0x000 0x3 0x0 +#define MX53_PAD_DISP0_DAT5__SDMA_DEBUG_MATCHED_DMBUS		0x074 0x3a0 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT5__EMI_EMI_DEBUG_10			0x074 0x3a0 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT5__USBPHY2_LINESTATE_0		0x074 0x3a0 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT6__IPU_DISP0_DAT_6			0x078 0x3a4 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT6__GPIO4_27				0x078 0x3a4 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT6__CSPI_SS3				0x078 0x3a4 0x798 0x2 0x0 +#define MX53_PAD_DISP0_DAT6__USBOH3_USBH2_DATA_6		0x078 0x3a4 0x000 0x3 0x0 +#define MX53_PAD_DISP0_DAT6__SDMA_DEBUG_RTBUFFER_WRITE		0x078 0x3a4 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT6__EMI_EMI_DEBUG_11			0x078 0x3a4 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT6__USBPHY2_LINESTATE_1		0x078 0x3a4 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT7__IPU_DISP0_DAT_7			0x07c 0x3a8 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT7__GPIO4_28				0x07c 0x3a8 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT7__CSPI_RDY				0x07c 0x3a8 0x000 0x2 0x0 +#define MX53_PAD_DISP0_DAT7__USBOH3_USBH2_DATA_7		0x07c 0x3a8 0x000 0x3 0x0 +#define MX53_PAD_DISP0_DAT7__SDMA_DEBUG_EVENT_CHANNEL_0		0x07c 0x3a8 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT7__EMI_EMI_DEBUG_12			0x07c 0x3a8 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT7__USBPHY2_VBUSVALID			0x07c 0x3a8 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT8__IPU_DISP0_DAT_8			0x080 0x3ac 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT8__GPIO4_29				0x080 0x3ac 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT8__PWM1_PWMO				0x080 0x3ac 0x000 0x2 0x0 +#define MX53_PAD_DISP0_DAT8__WDOG1_WDOG_B			0x080 0x3ac 0x000 0x3 0x0 +#define MX53_PAD_DISP0_DAT8__SDMA_DEBUG_EVENT_CHANNEL_1		0x080 0x3ac 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT8__EMI_EMI_DEBUG_13			0x080 0x3ac 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT8__USBPHY2_AVALID			0x080 0x3ac 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT9__IPU_DISP0_DAT_9			0x084 0x3b0 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT9__GPIO4_30				0x084 0x3b0 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT9__PWM2_PWMO				0x084 0x3b0 0x000 0x2 0x0 +#define MX53_PAD_DISP0_DAT9__WDOG2_WDOG_B			0x084 0x3b0 0x000 0x3 0x0 +#define MX53_PAD_DISP0_DAT9__SDMA_DEBUG_EVENT_CHANNEL_2		0x084 0x3b0 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT9__EMI_EMI_DEBUG_14			0x084 0x3b0 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT9__USBPHY2_VSTATUS_0			0x084 0x3b0 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT10__IPU_DISP0_DAT_10			0x088 0x3b4 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT10__GPIO4_31				0x088 0x3b4 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT10__USBOH3_USBH2_STP			0x088 0x3b4 0x000 0x2 0x0 +#define MX53_PAD_DISP0_DAT10__SDMA_DEBUG_EVENT_CHANNEL_3	0x088 0x3b4 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT10__EMI_EMI_DEBUG_15			0x088 0x3b4 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT10__USBPHY2_VSTATUS_1			0x088 0x3b4 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT11__IPU_DISP0_DAT_11			0x08c 0x3b8 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT11__GPIO5_5				0x08c 0x3b8 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT11__USBOH3_USBH2_NXT			0x08c 0x3b8 0x000 0x2 0x0 +#define MX53_PAD_DISP0_DAT11__SDMA_DEBUG_EVENT_CHANNEL_4	0x08c 0x3b8 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT11__EMI_EMI_DEBUG_16			0x08c 0x3b8 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT11__USBPHY2_VSTATUS_2			0x08c 0x3b8 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT12__IPU_DISP0_DAT_12			0x090 0x3bc 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT12__GPIO5_6				0x090 0x3bc 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT12__USBOH3_USBH2_CLK			0x090 0x3bc 0x000 0x2 0x0 +#define MX53_PAD_DISP0_DAT12__SDMA_DEBUG_EVENT_CHANNEL_5	0x090 0x3bc 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT12__EMI_EMI_DEBUG_17			0x090 0x3bc 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT12__USBPHY2_VSTATUS_3			0x090 0x3bc 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT13__IPU_DISP0_DAT_13			0x094 0x3c0 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT13__GPIO5_7				0x094 0x3c0 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT13__AUDMUX_AUD5_RXFS			0x094 0x3c0 0x754 0x3 0x0 +#define MX53_PAD_DISP0_DAT13__SDMA_DEBUG_EVT_CHN_LINES_0	0x094 0x3c0 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT13__EMI_EMI_DEBUG_18			0x094 0x3c0 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT13__USBPHY2_VSTATUS_4			0x094 0x3c0 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT14__IPU_DISP0_DAT_14			0x098 0x3c4 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT14__GPIO5_8				0x098 0x3c4 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT14__AUDMUX_AUD5_RXC			0x098 0x3c4 0x750 0x3 0x0 +#define MX53_PAD_DISP0_DAT14__SDMA_DEBUG_EVT_CHN_LINES_1	0x098 0x3c4 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT14__EMI_EMI_DEBUG_19			0x098 0x3c4 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT14__USBPHY2_VSTATUS_5			0x098 0x3c4 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT15__IPU_DISP0_DAT_15			0x09c 0x3c8 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT15__GPIO5_9				0x09c 0x3c8 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT15__ECSPI1_SS1			0x09c 0x3c8 0x7ac 0x2 0x1 +#define MX53_PAD_DISP0_DAT15__ECSPI2_SS1			0x09c 0x3c8 0x7c8 0x3 0x0 +#define MX53_PAD_DISP0_DAT15__SDMA_DEBUG_EVT_CHN_LINES_2	0x09c 0x3c8 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT15__EMI_EMI_DEBUG_20			0x09c 0x3c8 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT15__USBPHY2_VSTATUS_6			0x09c 0x3c8 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT16__IPU_DISP0_DAT_16			0x0a0 0x3cc 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT16__GPIO5_10				0x0a0 0x3cc 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT16__ECSPI2_MOSI			0x0a0 0x3cc 0x7c0 0x2 0x0 +#define MX53_PAD_DISP0_DAT16__AUDMUX_AUD5_TXC			0x0a0 0x3cc 0x758 0x3 0x1 +#define MX53_PAD_DISP0_DAT16__SDMA_EXT_EVENT_0			0x0a0 0x3cc 0x868 0x4 0x0 +#define MX53_PAD_DISP0_DAT16__SDMA_DEBUG_EVT_CHN_LINES_3	0x0a0 0x3cc 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT16__EMI_EMI_DEBUG_21			0x0a0 0x3cc 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT16__USBPHY2_VSTATUS_7			0x0a0 0x3cc 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT17__IPU_DISP0_DAT_17			0x0a4 0x3d0 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT17__GPIO5_11				0x0a4 0x3d0 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT17__ECSPI2_MISO			0x0a4 0x3d0 0x7bc 0x2 0x0 +#define MX53_PAD_DISP0_DAT17__AUDMUX_AUD5_TXD			0x0a4 0x3d0 0x74c 0x3 0x1 +#define MX53_PAD_DISP0_DAT17__SDMA_EXT_EVENT_1			0x0a4 0x3d0 0x86c 0x4 0x0 +#define MX53_PAD_DISP0_DAT17__SDMA_DEBUG_EVT_CHN_LINES_4	0x0a4 0x3d0 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT17__EMI_EMI_DEBUG_22			0x0a4 0x3d0 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT18__IPU_DISP0_DAT_18			0x0a8 0x3d4 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT18__GPIO5_12				0x0a8 0x3d4 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT18__ECSPI2_SS0			0x0a8 0x3d4 0x7c4 0x2 0x0 +#define MX53_PAD_DISP0_DAT18__AUDMUX_AUD5_TXFS			0x0a8 0x3d4 0x75c 0x3 0x1 +#define MX53_PAD_DISP0_DAT18__AUDMUX_AUD4_RXFS			0x0a8 0x3d4 0x73c 0x4 0x0 +#define MX53_PAD_DISP0_DAT18__SDMA_DEBUG_EVT_CHN_LINES_5	0x0a8 0x3d4 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT18__EMI_EMI_DEBUG_23			0x0a8 0x3d4 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT18__EMI_WEIM_CS_2			0x0a8 0x3d4 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT19__IPU_DISP0_DAT_19			0x0ac 0x3d8 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT19__GPIO5_13				0x0ac 0x3d8 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT19__ECSPI2_SCLK			0x0ac 0x3d8 0x7b8 0x2 0x0 +#define MX53_PAD_DISP0_DAT19__AUDMUX_AUD5_RXD			0x0ac 0x3d8 0x748 0x3 0x1 +#define MX53_PAD_DISP0_DAT19__AUDMUX_AUD4_RXC			0x0ac 0x3d8 0x738 0x4 0x0 +#define MX53_PAD_DISP0_DAT19__SDMA_DEBUG_EVT_CHN_LINES_6	0x0ac 0x3d8 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT19__EMI_EMI_DEBUG_24			0x0ac 0x3d8 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT19__EMI_WEIM_CS_3			0x0ac 0x3d8 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT20__IPU_DISP0_DAT_20			0x0b0 0x3dc 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT20__GPIO5_14				0x0b0 0x3dc 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT20__ECSPI1_SCLK			0x0b0 0x3dc 0x79c 0x2 0x1 +#define MX53_PAD_DISP0_DAT20__AUDMUX_AUD4_TXC			0x0b0 0x3dc 0x740 0x3 0x0 +#define MX53_PAD_DISP0_DAT20__SDMA_DEBUG_EVT_CHN_LINES_7	0x0b0 0x3dc 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT20__EMI_EMI_DEBUG_25			0x0b0 0x3dc 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT20__SATA_PHY_TDI			0x0b0 0x3dc 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT21__IPU_DISP0_DAT_21			0x0b4 0x3e0 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT21__GPIO5_15				0x0b4 0x3e0 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT21__ECSPI1_MOSI			0x0b4 0x3e0 0x7a4 0x2 0x1 +#define MX53_PAD_DISP0_DAT21__AUDMUX_AUD4_TXD			0x0b4 0x3e0 0x734 0x3 0x0 +#define MX53_PAD_DISP0_DAT21__SDMA_DEBUG_BUS_DEVICE_0		0x0b4 0x3e0 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT21__EMI_EMI_DEBUG_26			0x0b4 0x3e0 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT21__SATA_PHY_TDO			0x0b4 0x3e0 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT22__IPU_DISP0_DAT_22			0x0b8 0x3e4 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT22__GPIO5_16				0x0b8 0x3e4 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT22__ECSPI1_MISO			0x0b8 0x3e4 0x7a0 0x2 0x1 +#define MX53_PAD_DISP0_DAT22__AUDMUX_AUD4_TXFS			0x0b8 0x3e4 0x744 0x3 0x0 +#define MX53_PAD_DISP0_DAT22__SDMA_DEBUG_BUS_DEVICE_1		0x0b8 0x3e4 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT22__EMI_EMI_DEBUG_27			0x0b8 0x3e4 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT22__SATA_PHY_TCK			0x0b8 0x3e4 0x000 0x7 0x0 +#define MX53_PAD_DISP0_DAT23__IPU_DISP0_DAT_23			0x0bc 0x3e8 0x000 0x0 0x0 +#define MX53_PAD_DISP0_DAT23__GPIO5_17				0x0bc 0x3e8 0x000 0x1 0x0 +#define MX53_PAD_DISP0_DAT23__ECSPI1_SS0			0x0bc 0x3e8 0x7a8 0x2 0x1 +#define MX53_PAD_DISP0_DAT23__AUDMUX_AUD4_RXD			0x0bc 0x3e8 0x730 0x3 0x0 +#define MX53_PAD_DISP0_DAT23__SDMA_DEBUG_BUS_DEVICE_2		0x0bc 0x3e8 0x000 0x5 0x0 +#define MX53_PAD_DISP0_DAT23__EMI_EMI_DEBUG_28			0x0bc 0x3e8 0x000 0x6 0x0 +#define MX53_PAD_DISP0_DAT23__SATA_PHY_TMS			0x0bc 0x3e8 0x000 0x7 0x0 +#define MX53_PAD_CSI0_PIXCLK__IPU_CSI0_PIXCLK			0x0c0 0x3ec 0x000 0x0 0x0 +#define MX53_PAD_CSI0_PIXCLK__GPIO5_18				0x0c0 0x3ec 0x000 0x1 0x0 +#define MX53_PAD_CSI0_PIXCLK__SDMA_DEBUG_PC_0			0x0c0 0x3ec 0x000 0x5 0x0 +#define MX53_PAD_CSI0_PIXCLK__EMI_EMI_DEBUG_29			0x0c0 0x3ec 0x000 0x6 0x0 +#define MX53_PAD_CSI0_MCLK__IPU_CSI0_HSYNC			0x0c4 0x3f0 0x000 0x0 0x0 +#define MX53_PAD_CSI0_MCLK__GPIO5_19				0x0c4 0x3f0 0x000 0x1 0x0 +#define MX53_PAD_CSI0_MCLK__CCM_CSI0_MCLK			0x0c4 0x3f0 0x000 0x2 0x0 +#define MX53_PAD_CSI0_MCLK__SDMA_DEBUG_PC_1			0x0c4 0x3f0 0x000 0x5 0x0 +#define MX53_PAD_CSI0_MCLK__EMI_EMI_DEBUG_30			0x0c4 0x3f0 0x000 0x6 0x0 +#define MX53_PAD_CSI0_MCLK__TPIU_TRCTL				0x0c4 0x3f0 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DATA_EN__IPU_CSI0_DATA_EN			0x0c8 0x3f4 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DATA_EN__GPIO5_20				0x0c8 0x3f4 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DATA_EN__SDMA_DEBUG_PC_2			0x0c8 0x3f4 0x000 0x5 0x0 +#define MX53_PAD_CSI0_DATA_EN__EMI_EMI_DEBUG_31			0x0c8 0x3f4 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DATA_EN__TPIU_TRCLK			0x0c8 0x3f4 0x000 0x7 0x0 +#define MX53_PAD_CSI0_VSYNC__IPU_CSI0_VSYNC			0x0cc 0x3f8 0x000 0x0 0x0 +#define MX53_PAD_CSI0_VSYNC__GPIO5_21				0x0cc 0x3f8 0x000 0x1 0x0 +#define MX53_PAD_CSI0_VSYNC__SDMA_DEBUG_PC_3			0x0cc 0x3f8 0x000 0x5 0x0 +#define MX53_PAD_CSI0_VSYNC__EMI_EMI_DEBUG_32			0x0cc 0x3f8 0x000 0x6 0x0 +#define MX53_PAD_CSI0_VSYNC__TPIU_TRACE_0			0x0cc 0x3f8 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DAT4__IPU_CSI0_D_4			0x0d0 0x3fc 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DAT4__GPIO5_22				0x0d0 0x3fc 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DAT4__KPP_COL_5				0x0d0 0x3fc 0x840 0x2 0x1 +#define MX53_PAD_CSI0_DAT4__ECSPI1_SCLK				0x0d0 0x3fc 0x79c 0x3 0x2 +#define MX53_PAD_CSI0_DAT4__USBOH3_USBH3_STP			0x0d0 0x3fc 0x000 0x4 0x0 +#define MX53_PAD_CSI0_DAT4__AUDMUX_AUD3_TXC			0x0d0 0x3fc 0x000 0x5 0x0 +#define MX53_PAD_CSI0_DAT4__EMI_EMI_DEBUG_33			0x0d0 0x3fc 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DAT4__TPIU_TRACE_1			0x0d0 0x3fc 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DAT5__IPU_CSI0_D_5			0x0d4 0x400 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DAT5__GPIO5_23				0x0d4 0x400 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DAT5__KPP_ROW_5				0x0d4 0x400 0x84c 0x2 0x0 +#define MX53_PAD_CSI0_DAT5__ECSPI1_MOSI				0x0d4 0x400 0x7a4 0x3 0x2 +#define MX53_PAD_CSI0_DAT5__USBOH3_USBH3_NXT			0x0d4 0x400 0x000 0x4 0x0 +#define MX53_PAD_CSI0_DAT5__AUDMUX_AUD3_TXD			0x0d4 0x400 0x000 0x5 0x0 +#define MX53_PAD_CSI0_DAT5__EMI_EMI_DEBUG_34			0x0d4 0x400 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DAT5__TPIU_TRACE_2			0x0d4 0x400 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DAT6__IPU_CSI0_D_6			0x0d8 0x404 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DAT6__GPIO5_24				0x0d8 0x404 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DAT6__KPP_COL_6				0x0d8 0x404 0x844 0x2 0x0 +#define MX53_PAD_CSI0_DAT6__ECSPI1_MISO				0x0d8 0x404 0x7a0 0x3 0x2 +#define MX53_PAD_CSI0_DAT6__USBOH3_USBH3_CLK			0x0d8 0x404 0x000 0x4 0x0 +#define MX53_PAD_CSI0_DAT6__AUDMUX_AUD3_TXFS			0x0d8 0x404 0x000 0x5 0x0 +#define MX53_PAD_CSI0_DAT6__EMI_EMI_DEBUG_35			0x0d8 0x404 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DAT6__TPIU_TRACE_3			0x0d8 0x404 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DAT7__IPU_CSI0_D_7			0x0dc 0x408 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DAT7__GPIO5_25				0x0dc 0x408 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DAT7__KPP_ROW_6				0x0dc 0x408 0x850 0x2 0x0 +#define MX53_PAD_CSI0_DAT7__ECSPI1_SS0				0x0dc 0x408 0x7a8 0x3 0x2 +#define MX53_PAD_CSI0_DAT7__USBOH3_USBH3_DIR			0x0dc 0x408 0x000 0x4 0x0 +#define MX53_PAD_CSI0_DAT7__AUDMUX_AUD3_RXD			0x0dc 0x408 0x000 0x5 0x0 +#define MX53_PAD_CSI0_DAT7__EMI_EMI_DEBUG_36			0x0dc 0x408 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DAT7__TPIU_TRACE_4			0x0dc 0x408 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DAT8__IPU_CSI0_D_8			0x0e0 0x40c 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DAT8__GPIO5_26				0x0e0 0x40c 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DAT8__KPP_COL_7				0x0e0 0x40c 0x848 0x2 0x0 +#define MX53_PAD_CSI0_DAT8__ECSPI2_SCLK				0x0e0 0x40c 0x7b8 0x3 0x1 +#define MX53_PAD_CSI0_DAT8__USBOH3_USBH3_OC			0x0e0 0x40c 0x000 0x4 0x0 +#define MX53_PAD_CSI0_DAT8__I2C1_SDA				0x0e0 0x40c 0x818 0x5 0x0 +#define MX53_PAD_CSI0_DAT8__EMI_EMI_DEBUG_37			0x0e0 0x40c 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DAT8__TPIU_TRACE_5			0x0e0 0x40c 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DAT9__IPU_CSI0_D_9			0x0e4 0x410 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DAT9__GPIO5_27				0x0e4 0x410 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DAT9__KPP_ROW_7				0x0e4 0x410 0x854 0x2 0x0 +#define MX53_PAD_CSI0_DAT9__ECSPI2_MOSI				0x0e4 0x410 0x7c0 0x3 0x1 +#define MX53_PAD_CSI0_DAT9__USBOH3_USBH3_PWR			0x0e4 0x410 0x000 0x4 0x0 +#define MX53_PAD_CSI0_DAT9__I2C1_SCL				0x0e4 0x410 0x814 0x5 0x0 +#define MX53_PAD_CSI0_DAT9__EMI_EMI_DEBUG_38			0x0e4 0x410 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DAT9__TPIU_TRACE_6			0x0e4 0x410 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DAT10__IPU_CSI0_D_10			0x0e8 0x414 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DAT10__GPIO5_28				0x0e8 0x414 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DAT10__UART1_TXD_MUX			0x0e8 0x414 0x000 0x2 0x0 +#define MX53_PAD_CSI0_DAT10__ECSPI2_MISO			0x0e8 0x414 0x7bc 0x3 0x1 +#define MX53_PAD_CSI0_DAT10__AUDMUX_AUD3_RXC			0x0e8 0x414 0x000 0x4 0x0 +#define MX53_PAD_CSI0_DAT10__SDMA_DEBUG_PC_4			0x0e8 0x414 0x000 0x5 0x0 +#define MX53_PAD_CSI0_DAT10__EMI_EMI_DEBUG_39			0x0e8 0x414 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DAT10__TPIU_TRACE_7			0x0e8 0x414 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DAT11__IPU_CSI0_D_11			0x0ec 0x418 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DAT11__GPIO5_29				0x0ec 0x418 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DAT11__UART1_RXD_MUX			0x0ec 0x418 0x878 0x2 0x1 +#define MX53_PAD_CSI0_DAT11__ECSPI2_SS0				0x0ec 0x418 0x7c4 0x3 0x1 +#define MX53_PAD_CSI0_DAT11__AUDMUX_AUD3_RXFS			0x0ec 0x418 0x000 0x4 0x0 +#define MX53_PAD_CSI0_DAT11__SDMA_DEBUG_PC_5			0x0ec 0x418 0x000 0x5 0x0 +#define MX53_PAD_CSI0_DAT11__EMI_EMI_DEBUG_40			0x0ec 0x418 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DAT11__TPIU_TRACE_8			0x0ec 0x418 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DAT12__IPU_CSI0_D_12			0x0f0 0x41c 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DAT12__GPIO5_30				0x0f0 0x41c 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DAT12__UART4_TXD_MUX			0x0f0 0x41c 0x000 0x2 0x0 +#define MX53_PAD_CSI0_DAT12__USBOH3_USBH3_DATA_0		0x0f0 0x41c 0x000 0x4 0x0 +#define MX53_PAD_CSI0_DAT12__SDMA_DEBUG_PC_6			0x0f0 0x41c 0x000 0x5 0x0 +#define MX53_PAD_CSI0_DAT12__EMI_EMI_DEBUG_41			0x0f0 0x41c 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DAT12__TPIU_TRACE_9			0x0f0 0x41c 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DAT13__IPU_CSI0_D_13			0x0f4 0x420 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DAT13__GPIO5_31				0x0f4 0x420 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DAT13__UART4_RXD_MUX			0x0f4 0x420 0x890 0x2 0x3 +#define MX53_PAD_CSI0_DAT13__USBOH3_USBH3_DATA_1		0x0f4 0x420 0x000 0x4 0x0 +#define MX53_PAD_CSI0_DAT13__SDMA_DEBUG_PC_7			0x0f4 0x420 0x000 0x5 0x0 +#define MX53_PAD_CSI0_DAT13__EMI_EMI_DEBUG_42			0x0f4 0x420 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DAT13__TPIU_TRACE_10			0x0f4 0x420 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DAT14__IPU_CSI0_D_14			0x0f8 0x424 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DAT14__GPIO6_0				0x0f8 0x424 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DAT14__UART5_TXD_MUX			0x0f8 0x424 0x000 0x2 0x0 +#define MX53_PAD_CSI0_DAT14__USBOH3_USBH3_DATA_2		0x0f8 0x424 0x000 0x4 0x0 +#define MX53_PAD_CSI0_DAT14__SDMA_DEBUG_PC_8			0x0f8 0x424 0x000 0x5 0x0 +#define MX53_PAD_CSI0_DAT14__EMI_EMI_DEBUG_43			0x0f8 0x424 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DAT14__TPIU_TRACE_11			0x0f8 0x424 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DAT15__IPU_CSI0_D_15			0x0fc 0x428 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DAT15__GPIO6_1				0x0fc 0x428 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DAT15__UART5_RXD_MUX			0x0fc 0x428 0x898 0x2 0x3 +#define MX53_PAD_CSI0_DAT15__USBOH3_USBH3_DATA_3		0x0fc 0x428 0x000 0x4 0x0 +#define MX53_PAD_CSI0_DAT15__SDMA_DEBUG_PC_9			0x0fc 0x428 0x000 0x5 0x0 +#define MX53_PAD_CSI0_DAT15__EMI_EMI_DEBUG_44			0x0fc 0x428 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DAT15__TPIU_TRACE_12			0x0fc 0x428 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DAT16__IPU_CSI0_D_16			0x100 0x42c 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DAT16__GPIO6_2				0x100 0x42c 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DAT16__UART4_RTS				0x100 0x42c 0x88c 0x2 0x0 +#define MX53_PAD_CSI0_DAT16__USBOH3_USBH3_DATA_4		0x100 0x42c 0x000 0x4 0x0 +#define MX53_PAD_CSI0_DAT16__SDMA_DEBUG_PC_10			0x100 0x42c 0x000 0x5 0x0 +#define MX53_PAD_CSI0_DAT16__EMI_EMI_DEBUG_45			0x100 0x42c 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DAT16__TPIU_TRACE_13			0x100 0x42c 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DAT17__IPU_CSI0_D_17			0x104 0x430 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DAT17__GPIO6_3				0x104 0x430 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DAT17__UART4_CTS				0x104 0x430 0x000 0x2 0x0 +#define MX53_PAD_CSI0_DAT17__USBOH3_USBH3_DATA_5		0x104 0x430 0x000 0x4 0x0 +#define MX53_PAD_CSI0_DAT17__SDMA_DEBUG_PC_11			0x104 0x430 0x000 0x5 0x0 +#define MX53_PAD_CSI0_DAT17__EMI_EMI_DEBUG_46			0x104 0x430 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DAT17__TPIU_TRACE_14			0x104 0x430 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DAT18__IPU_CSI0_D_18			0x108 0x434 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DAT18__GPIO6_4				0x108 0x434 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DAT18__UART5_RTS				0x108 0x434 0x894 0x2 0x2 +#define MX53_PAD_CSI0_DAT18__USBOH3_USBH3_DATA_6		0x108 0x434 0x000 0x4 0x0 +#define MX53_PAD_CSI0_DAT18__SDMA_DEBUG_PC_12			0x108 0x434 0x000 0x5 0x0 +#define MX53_PAD_CSI0_DAT18__EMI_EMI_DEBUG_47			0x108 0x434 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DAT18__TPIU_TRACE_15			0x108 0x434 0x000 0x7 0x0 +#define MX53_PAD_CSI0_DAT19__IPU_CSI0_D_19			0x10c 0x438 0x000 0x0 0x0 +#define MX53_PAD_CSI0_DAT19__GPIO6_5				0x10c 0x438 0x000 0x1 0x0 +#define MX53_PAD_CSI0_DAT19__UART5_CTS				0x10c 0x438 0x000 0x2 0x0 +#define MX53_PAD_CSI0_DAT19__USBOH3_USBH3_DATA_7		0x10c 0x438 0x000 0x4 0x0 +#define MX53_PAD_CSI0_DAT19__SDMA_DEBUG_PC_13			0x10c 0x438 0x000 0x5 0x0 +#define MX53_PAD_CSI0_DAT19__EMI_EMI_DEBUG_48			0x10c 0x438 0x000 0x6 0x0 +#define MX53_PAD_CSI0_DAT19__USBPHY2_BISTOK			0x10c 0x438 0x000 0x7 0x0 +#define MX53_PAD_EIM_A25__EMI_WEIM_A_25				0x110 0x458 0x000 0x0 0x0 +#define MX53_PAD_EIM_A25__GPIO5_2				0x110 0x458 0x000 0x1 0x0 +#define MX53_PAD_EIM_A25__ECSPI2_RDY				0x110 0x458 0x000 0x2 0x0 +#define MX53_PAD_EIM_A25__IPU_DI1_PIN12				0x110 0x458 0x000 0x3 0x0 +#define MX53_PAD_EIM_A25__CSPI_SS1				0x110 0x458 0x790 0x4 0x1 +#define MX53_PAD_EIM_A25__IPU_DI0_D1_CS				0x110 0x458 0x000 0x6 0x0 +#define MX53_PAD_EIM_A25__USBPHY1_BISTOK			0x110 0x458 0x000 0x7 0x0 +#define MX53_PAD_EIM_EB2__EMI_WEIM_EB_2				0x114 0x45c 0x000 0x0 0x0 +#define MX53_PAD_EIM_EB2__GPIO2_30				0x114 0x45c 0x000 0x1 0x0 +#define MX53_PAD_EIM_EB2__CCM_DI1_EXT_CLK			0x114 0x45c 0x76c 0x2 0x0 +#define MX53_PAD_EIM_EB2__IPU_SER_DISP1_CS			0x114 0x45c 0x000 0x3 0x0 +#define MX53_PAD_EIM_EB2__ECSPI1_SS0				0x114 0x45c 0x7a8 0x4 0x3 +#define MX53_PAD_EIM_EB2__I2C2_SCL				0x114 0x45c 0x81c 0x5 0x1 +#define MX53_PAD_EIM_D16__EMI_WEIM_D_16				0x118 0x460 0x000 0x0 0x0 +#define MX53_PAD_EIM_D16__GPIO3_16				0x118 0x460 0x000 0x1 0x0 +#define MX53_PAD_EIM_D16__IPU_DI0_PIN5				0x118 0x460 0x000 0x2 0x0 +#define MX53_PAD_EIM_D16__IPU_DISPB1_SER_CLK			0x118 0x460 0x000 0x3 0x0 +#define MX53_PAD_EIM_D16__ECSPI1_SCLK				0x118 0x460 0x79c 0x4 0x3 +#define MX53_PAD_EIM_D16__I2C2_SDA				0x118 0x460 0x820 0x5 0x1 +#define MX53_PAD_EIM_D17__EMI_WEIM_D_17				0x11c 0x464 0x000 0x0 0x0 +#define MX53_PAD_EIM_D17__GPIO3_17				0x11c 0x464 0x000 0x1 0x0 +#define MX53_PAD_EIM_D17__IPU_DI0_PIN6				0x11c 0x464 0x000 0x2 0x0 +#define MX53_PAD_EIM_D17__IPU_DISPB1_SER_DIN			0x11c 0x464 0x830 0x3 0x0 +#define MX53_PAD_EIM_D17__ECSPI1_MISO				0x11c 0x464 0x7a0 0x4 0x3 +#define MX53_PAD_EIM_D17__I2C3_SCL				0x11c 0x464 0x824 0x5 0x0 +#define MX53_PAD_EIM_D18__EMI_WEIM_D_18				0x120 0x468 0x000 0x0 0x0 +#define MX53_PAD_EIM_D18__GPIO3_18				0x120 0x468 0x000 0x1 0x0 +#define MX53_PAD_EIM_D18__IPU_DI0_PIN7				0x120 0x468 0x000 0x2 0x0 +#define MX53_PAD_EIM_D18__IPU_DISPB1_SER_DIO			0x120 0x468 0x830 0x3 0x1 +#define MX53_PAD_EIM_D18__ECSPI1_MOSI				0x120 0x468 0x7a4 0x4 0x3 +#define MX53_PAD_EIM_D18__I2C3_SDA				0x120 0x468 0x828 0x5 0x0 +#define MX53_PAD_EIM_D18__IPU_DI1_D0_CS				0x120 0x468 0x000 0x6 0x0 +#define MX53_PAD_EIM_D19__EMI_WEIM_D_19				0x124 0x46c 0x000 0x0 0x0 +#define MX53_PAD_EIM_D19__GPIO3_19				0x124 0x46c 0x000 0x1 0x0 +#define MX53_PAD_EIM_D19__IPU_DI0_PIN8				0x124 0x46c 0x000 0x2 0x0 +#define MX53_PAD_EIM_D19__IPU_DISPB1_SER_RS			0x124 0x46c 0x000 0x3 0x0 +#define MX53_PAD_EIM_D19__ECSPI1_SS1				0x124 0x46c 0x7ac 0x4 0x2 +#define MX53_PAD_EIM_D19__EPIT1_EPITO				0x124 0x46c 0x000 0x5 0x0 +#define MX53_PAD_EIM_D19__UART1_CTS				0x124 0x46c 0x000 0x6 0x0 +#define MX53_PAD_EIM_D19__USBOH3_USBH2_OC			0x124 0x46c 0x8a4 0x7 0x0 +#define MX53_PAD_EIM_D20__EMI_WEIM_D_20				0x128 0x470 0x000 0x0 0x0 +#define MX53_PAD_EIM_D20__GPIO3_20				0x128 0x470 0x000 0x1 0x0 +#define MX53_PAD_EIM_D20__IPU_DI0_PIN16				0x128 0x470 0x000 0x2 0x0 +#define MX53_PAD_EIM_D20__IPU_SER_DISP0_CS			0x128 0x470 0x000 0x3 0x0 +#define MX53_PAD_EIM_D20__CSPI_SS0				0x128 0x470 0x78c 0x4 0x1 +#define MX53_PAD_EIM_D20__EPIT2_EPITO				0x128 0x470 0x000 0x5 0x0 +#define MX53_PAD_EIM_D20__UART1_RTS				0x128 0x470 0x874 0x6 0x1 +#define MX53_PAD_EIM_D20__USBOH3_USBH2_PWR			0x128 0x470 0x000 0x7 0x0 +#define MX53_PAD_EIM_D21__EMI_WEIM_D_21				0x12c 0x474 0x000 0x0 0x0 +#define MX53_PAD_EIM_D21__GPIO3_21				0x12c 0x474 0x000 0x1 0x0 +#define MX53_PAD_EIM_D21__IPU_DI0_PIN17				0x12c 0x474 0x000 0x2 0x0 +#define MX53_PAD_EIM_D21__IPU_DISPB0_SER_CLK			0x12c 0x474 0x000 0x3 0x0 +#define MX53_PAD_EIM_D21__CSPI_SCLK				0x12c 0x474 0x780 0x4 0x1 +#define MX53_PAD_EIM_D21__I2C1_SCL				0x12c 0x474 0x814 0x5 0x1 +#define MX53_PAD_EIM_D21__USBOH3_USBOTG_OC			0x12c 0x474 0x89c 0x6 0x1 +#define MX53_PAD_EIM_D22__EMI_WEIM_D_22				0x130 0x478 0x000 0x0 0x0 +#define MX53_PAD_EIM_D22__GPIO3_22				0x130 0x478 0x000 0x1 0x0 +#define MX53_PAD_EIM_D22__IPU_DI0_PIN1				0x130 0x478 0x000 0x2 0x0 +#define MX53_PAD_EIM_D22__IPU_DISPB0_SER_DIN			0x130 0x478 0x82c 0x3 0x0 +#define MX53_PAD_EIM_D22__CSPI_MISO				0x130 0x478 0x784 0x4 0x1 +#define MX53_PAD_EIM_D22__USBOH3_USBOTG_PWR			0x130 0x478 0x000 0x6 0x0 +#define MX53_PAD_EIM_D23__EMI_WEIM_D_23				0x134 0x47c 0x000 0x0 0x0 +#define MX53_PAD_EIM_D23__GPIO3_23				0x134 0x47c 0x000 0x1 0x0 +#define MX53_PAD_EIM_D23__UART3_CTS				0x134 0x47c 0x000 0x2 0x0 +#define MX53_PAD_EIM_D23__UART1_DCD				0x134 0x47c 0x000 0x3 0x0 +#define MX53_PAD_EIM_D23__IPU_DI0_D0_CS				0x134 0x47c 0x000 0x4 0x0 +#define MX53_PAD_EIM_D23__IPU_DI1_PIN2				0x134 0x47c 0x000 0x5 0x0 +#define MX53_PAD_EIM_D23__IPU_CSI1_DATA_EN			0x134 0x47c 0x834 0x6 0x0 +#define MX53_PAD_EIM_D23__IPU_DI1_PIN14				0x134 0x47c 0x000 0x7 0x0 +#define MX53_PAD_EIM_EB3__EMI_WEIM_EB_3				0x138 0x480 0x000 0x0 0x0 +#define MX53_PAD_EIM_EB3__GPIO2_31				0x138 0x480 0x000 0x1 0x0 +#define MX53_PAD_EIM_EB3__UART3_RTS				0x138 0x480 0x884 0x2 0x1 +#define MX53_PAD_EIM_EB3__UART1_RI				0x138 0x480 0x000 0x3 0x0 +#define MX53_PAD_EIM_EB3__IPU_DI1_PIN3				0x138 0x480 0x000 0x5 0x0 +#define MX53_PAD_EIM_EB3__IPU_CSI1_HSYNC			0x138 0x480 0x838 0x6 0x0 +#define MX53_PAD_EIM_EB3__IPU_DI1_PIN16				0x138 0x480 0x000 0x7 0x0 +#define MX53_PAD_EIM_D24__EMI_WEIM_D_24				0x13c 0x484 0x000 0x0 0x0 +#define MX53_PAD_EIM_D24__GPIO3_24				0x13c 0x484 0x000 0x1 0x0 +#define MX53_PAD_EIM_D24__UART3_TXD_MUX				0x13c 0x484 0x000 0x2 0x0 +#define MX53_PAD_EIM_D24__ECSPI1_SS2				0x13c 0x484 0x7b0 0x3 0x1 +#define MX53_PAD_EIM_D24__CSPI_SS2				0x13c 0x484 0x794 0x4 0x1 +#define MX53_PAD_EIM_D24__AUDMUX_AUD5_RXFS			0x13c 0x484 0x754 0x5 0x1 +#define MX53_PAD_EIM_D24__ECSPI2_SS2				0x13c 0x484 0x000 0x6 0x0 +#define MX53_PAD_EIM_D24__UART1_DTR				0x13c 0x484 0x000 0x7 0x0 +#define MX53_PAD_EIM_D25__EMI_WEIM_D_25				0x140 0x488 0x000 0x0 0x0 +#define MX53_PAD_EIM_D25__GPIO3_25				0x140 0x488 0x000 0x1 0x0 +#define MX53_PAD_EIM_D25__UART3_RXD_MUX				0x140 0x488 0x888 0x2 0x1 +#define MX53_PAD_EIM_D25__ECSPI1_SS3				0x140 0x488 0x7b4 0x3 0x1 +#define MX53_PAD_EIM_D25__CSPI_SS3				0x140 0x488 0x798 0x4 0x1 +#define MX53_PAD_EIM_D25__AUDMUX_AUD5_RXC			0x140 0x488 0x750 0x5 0x1 +#define MX53_PAD_EIM_D25__ECSPI2_SS3				0x140 0x488 0x000 0x6 0x0 +#define MX53_PAD_EIM_D25__UART1_DSR				0x140 0x488 0x000 0x7 0x0 +#define MX53_PAD_EIM_D26__EMI_WEIM_D_26				0x144 0x48c 0x000 0x0 0x0 +#define MX53_PAD_EIM_D26__GPIO3_26				0x144 0x48c 0x000 0x1 0x0 +#define MX53_PAD_EIM_D26__UART2_TXD_MUX				0x144 0x48c 0x000 0x2 0x0 +#define MX53_PAD_EIM_D26__FIRI_RXD				0x144 0x48c 0x80c 0x3 0x0 +#define MX53_PAD_EIM_D26__IPU_CSI0_D_1				0x144 0x48c 0x000 0x4 0x0 +#define MX53_PAD_EIM_D26__IPU_DI1_PIN11				0x144 0x48c 0x000 0x5 0x0 +#define MX53_PAD_EIM_D26__IPU_SISG_2				0x144 0x48c 0x000 0x6 0x0 +#define MX53_PAD_EIM_D26__IPU_DISP1_DAT_22			0x144 0x48c 0x000 0x7 0x0 +#define MX53_PAD_EIM_D27__EMI_WEIM_D_27				0x148 0x490 0x000 0x0 0x0 +#define MX53_PAD_EIM_D27__GPIO3_27				0x148 0x490 0x000 0x1 0x0 +#define MX53_PAD_EIM_D27__UART2_RXD_MUX				0x148 0x490 0x880 0x2 0x1 +#define MX53_PAD_EIM_D27__FIRI_TXD				0x148 0x490 0x000 0x3 0x0 +#define MX53_PAD_EIM_D27__IPU_CSI0_D_0				0x148 0x490 0x000 0x4 0x0 +#define MX53_PAD_EIM_D27__IPU_DI1_PIN13				0x148 0x490 0x000 0x5 0x0 +#define MX53_PAD_EIM_D27__IPU_SISG_3				0x148 0x490 0x000 0x6 0x0 +#define MX53_PAD_EIM_D27__IPU_DISP1_DAT_23			0x148 0x490 0x000 0x7 0x0 +#define MX53_PAD_EIM_D28__EMI_WEIM_D_28				0x14c 0x494 0x000 0x0 0x0 +#define MX53_PAD_EIM_D28__GPIO3_28				0x14c 0x494 0x000 0x1 0x0 +#define MX53_PAD_EIM_D28__UART2_CTS				0x14c 0x494 0x000 0x2 0x0 +#define MX53_PAD_EIM_D28__IPU_DISPB0_SER_DIO			0x14c 0x494 0x82c 0x3 0x1 +#define MX53_PAD_EIM_D28__CSPI_MOSI				0x14c 0x494 0x788 0x4 0x1 +#define MX53_PAD_EIM_D28__I2C1_SDA				0x14c 0x494 0x818 0x5 0x1 +#define MX53_PAD_EIM_D28__IPU_EXT_TRIG				0x14c 0x494 0x000 0x6 0x0 +#define MX53_PAD_EIM_D28__IPU_DI0_PIN13				0x14c 0x494 0x000 0x7 0x0 +#define MX53_PAD_EIM_D29__EMI_WEIM_D_29				0x150 0x498 0x000 0x0 0x0 +#define MX53_PAD_EIM_D29__GPIO3_29				0x150 0x498 0x000 0x1 0x0 +#define MX53_PAD_EIM_D29__UART2_RTS				0x150 0x498 0x87c 0x2 0x1 +#define MX53_PAD_EIM_D29__IPU_DISPB0_SER_RS			0x150 0x498 0x000 0x3 0x0 +#define MX53_PAD_EIM_D29__CSPI_SS0				0x150 0x498 0x78c 0x4 0x2 +#define MX53_PAD_EIM_D29__IPU_DI1_PIN15				0x150 0x498 0x000 0x5 0x0 +#define MX53_PAD_EIM_D29__IPU_CSI1_VSYNC			0x150 0x498 0x83c 0x6 0x0 +#define MX53_PAD_EIM_D29__IPU_DI0_PIN14				0x150 0x498 0x000 0x7 0x0 +#define MX53_PAD_EIM_D30__EMI_WEIM_D_30				0x154 0x49c 0x000 0x0 0x0 +#define MX53_PAD_EIM_D30__GPIO3_30				0x154 0x49c 0x000 0x1 0x0 +#define MX53_PAD_EIM_D30__UART3_CTS				0x154 0x49c 0x000 0x2 0x0 +#define MX53_PAD_EIM_D30__IPU_CSI0_D_3				0x154 0x49c 0x000 0x3 0x0 +#define MX53_PAD_EIM_D30__IPU_DI0_PIN11				0x154 0x49c 0x000 0x4 0x0 +#define MX53_PAD_EIM_D30__IPU_DISP1_DAT_21			0x154 0x49c 0x000 0x5 0x0 +#define MX53_PAD_EIM_D30__USBOH3_USBH1_OC			0x154 0x49c 0x8a0 0x6 0x0 +#define MX53_PAD_EIM_D30__USBOH3_USBH2_OC			0x154 0x49c 0x8a4 0x7 0x1 +#define MX53_PAD_EIM_D31__EMI_WEIM_D_31				0x158 0x4a0 0x000 0x0 0x0 +#define MX53_PAD_EIM_D31__GPIO3_31				0x158 0x4a0 0x000 0x1 0x0 +#define MX53_PAD_EIM_D31__UART3_RTS				0x158 0x4a0 0x884 0x2 0x3 +#define MX53_PAD_EIM_D31__IPU_CSI0_D_2				0x158 0x4a0 0x000 0x3 0x0 +#define MX53_PAD_EIM_D31__IPU_DI0_PIN12				0x158 0x4a0 0x000 0x4 0x0 +#define MX53_PAD_EIM_D31__IPU_DISP1_DAT_20			0x158 0x4a0 0x000 0x5 0x0 +#define MX53_PAD_EIM_D31__USBOH3_USBH1_PWR			0x158 0x4a0 0x000 0x6 0x0 +#define MX53_PAD_EIM_D31__USBOH3_USBH2_PWR			0x158 0x4a0 0x000 0x7 0x0 +#define MX53_PAD_EIM_A24__EMI_WEIM_A_24				0x15c 0x4a8 0x000 0x0 0x0 +#define MX53_PAD_EIM_A24__GPIO5_4				0x15c 0x4a8 0x000 0x1 0x0 +#define MX53_PAD_EIM_A24__IPU_DISP1_DAT_19			0x15c 0x4a8 0x000 0x2 0x0 +#define MX53_PAD_EIM_A24__IPU_CSI1_D_19				0x15c 0x4a8 0x000 0x3 0x0 +#define MX53_PAD_EIM_A24__IPU_SISG_2				0x15c 0x4a8 0x000 0x6 0x0 +#define MX53_PAD_EIM_A24__USBPHY2_BVALID			0x15c 0x4a8 0x000 0x7 0x0 +#define MX53_PAD_EIM_A23__EMI_WEIM_A_23				0x160 0x4ac 0x000 0x0 0x0 +#define MX53_PAD_EIM_A23__GPIO6_6				0x160 0x4ac 0x000 0x1 0x0 +#define MX53_PAD_EIM_A23__IPU_DISP1_DAT_18			0x160 0x4ac 0x000 0x2 0x0 +#define MX53_PAD_EIM_A23__IPU_CSI1_D_18				0x160 0x4ac 0x000 0x3 0x0 +#define MX53_PAD_EIM_A23__IPU_SISG_3				0x160 0x4ac 0x000 0x6 0x0 +#define MX53_PAD_EIM_A23__USBPHY2_ENDSESSION			0x160 0x4ac 0x000 0x7 0x0 +#define MX53_PAD_EIM_A22__EMI_WEIM_A_22				0x164 0x4b0 0x000 0x0 0x0 +#define MX53_PAD_EIM_A22__GPIO2_16				0x164 0x4b0 0x000 0x1 0x0 +#define MX53_PAD_EIM_A22__IPU_DISP1_DAT_17			0x164 0x4b0 0x000 0x2 0x0 +#define MX53_PAD_EIM_A22__IPU_CSI1_D_17				0x164 0x4b0 0x000 0x3 0x0 +#define MX53_PAD_EIM_A22__SRC_BT_CFG1_7				0x164 0x4b0 0x000 0x7 0x0 +#define MX53_PAD_EIM_A21__EMI_WEIM_A_21				0x168 0x4b4 0x000 0x0 0x0 +#define MX53_PAD_EIM_A21__GPIO2_17				0x168 0x4b4 0x000 0x1 0x0 +#define MX53_PAD_EIM_A21__IPU_DISP1_DAT_16			0x168 0x4b4 0x000 0x2 0x0 +#define MX53_PAD_EIM_A21__IPU_CSI1_D_16				0x168 0x4b4 0x000 0x3 0x0 +#define MX53_PAD_EIM_A21__SRC_BT_CFG1_6				0x168 0x4b4 0x000 0x7 0x0 +#define MX53_PAD_EIM_A20__EMI_WEIM_A_20				0x16c 0x4b8 0x000 0x0 0x0 +#define MX53_PAD_EIM_A20__GPIO2_18				0x16c 0x4b8 0x000 0x1 0x0 +#define MX53_PAD_EIM_A20__IPU_DISP1_DAT_15			0x16c 0x4b8 0x000 0x2 0x0 +#define MX53_PAD_EIM_A20__IPU_CSI1_D_15				0x16c 0x4b8 0x000 0x3 0x0 +#define MX53_PAD_EIM_A20__SRC_BT_CFG1_5				0x16c 0x4b8 0x000 0x7 0x0 +#define MX53_PAD_EIM_A19__EMI_WEIM_A_19				0x170 0x4bc 0x000 0x0 0x0 +#define MX53_PAD_EIM_A19__GPIO2_19				0x170 0x4bc 0x000 0x1 0x0 +#define MX53_PAD_EIM_A19__IPU_DISP1_DAT_14			0x170 0x4bc 0x000 0x2 0x0 +#define MX53_PAD_EIM_A19__IPU_CSI1_D_14				0x170 0x4bc 0x000 0x3 0x0 +#define MX53_PAD_EIM_A19__SRC_BT_CFG1_4				0x170 0x4bc 0x000 0x7 0x0 +#define MX53_PAD_EIM_A18__EMI_WEIM_A_18				0x174 0x4c0 0x000 0x0 0x0 +#define MX53_PAD_EIM_A18__GPIO2_20				0x174 0x4c0 0x000 0x1 0x0 +#define MX53_PAD_EIM_A18__IPU_DISP1_DAT_13			0x174 0x4c0 0x000 0x2 0x0 +#define MX53_PAD_EIM_A18__IPU_CSI1_D_13				0x174 0x4c0 0x000 0x3 0x0 +#define MX53_PAD_EIM_A18__SRC_BT_CFG1_3				0x174 0x4c0 0x000 0x7 0x0 +#define MX53_PAD_EIM_A17__EMI_WEIM_A_17				0x178 0x4c4 0x000 0x0 0x0 +#define MX53_PAD_EIM_A17__GPIO2_21				0x178 0x4c4 0x000 0x1 0x0 +#define MX53_PAD_EIM_A17__IPU_DISP1_DAT_12			0x178 0x4c4 0x000 0x2 0x0 +#define MX53_PAD_EIM_A17__IPU_CSI1_D_12				0x178 0x4c4 0x000 0x3 0x0 +#define MX53_PAD_EIM_A17__SRC_BT_CFG1_2				0x178 0x4c4 0x000 0x7 0x0 +#define MX53_PAD_EIM_A16__EMI_WEIM_A_16				0x17c 0x4c8 0x000 0x0 0x0 +#define MX53_PAD_EIM_A16__GPIO2_22				0x17c 0x4c8 0x000 0x1 0x0 +#define MX53_PAD_EIM_A16__IPU_DI1_DISP_CLK			0x17c 0x4c8 0x000 0x2 0x0 +#define MX53_PAD_EIM_A16__IPU_CSI1_PIXCLK			0x17c 0x4c8 0x000 0x3 0x0 +#define MX53_PAD_EIM_A16__SRC_BT_CFG1_1				0x17c 0x4c8 0x000 0x7 0x0 +#define MX53_PAD_EIM_CS0__EMI_WEIM_CS_0				0x180 0x4cc 0x000 0x0 0x0 +#define MX53_PAD_EIM_CS0__GPIO2_23				0x180 0x4cc 0x000 0x1 0x0 +#define MX53_PAD_EIM_CS0__ECSPI2_SCLK				0x180 0x4cc 0x7b8 0x2 0x2 +#define MX53_PAD_EIM_CS0__IPU_DI1_PIN5				0x180 0x4cc 0x000 0x3 0x0 +#define MX53_PAD_EIM_CS1__EMI_WEIM_CS_1				0x184 0x4d0 0x000 0x0 0x0 +#define MX53_PAD_EIM_CS1__GPIO2_24				0x184 0x4d0 0x000 0x1 0x0 +#define MX53_PAD_EIM_CS1__ECSPI2_MOSI				0x184 0x4d0 0x7c0 0x2 0x2 +#define MX53_PAD_EIM_CS1__IPU_DI1_PIN6				0x184 0x4d0 0x000 0x3 0x0 +#define MX53_PAD_EIM_OE__EMI_WEIM_OE				0x188 0x4d4 0x000 0x0 0x0 +#define MX53_PAD_EIM_OE__GPIO2_25				0x188 0x4d4 0x000 0x1 0x0 +#define MX53_PAD_EIM_OE__ECSPI2_MISO				0x188 0x4d4 0x7bc 0x2 0x2 +#define MX53_PAD_EIM_OE__IPU_DI1_PIN7				0x188 0x4d4 0x000 0x3 0x0 +#define MX53_PAD_EIM_OE__USBPHY2_IDDIG				0x188 0x4d4 0x000 0x7 0x0 +#define MX53_PAD_EIM_RW__EMI_WEIM_RW				0x18c 0x4d8 0x000 0x0 0x0 +#define MX53_PAD_EIM_RW__GPIO2_26				0x18c 0x4d8 0x000 0x1 0x0 +#define MX53_PAD_EIM_RW__ECSPI2_SS0				0x18c 0x4d8 0x7c4 0x2 0x2 +#define MX53_PAD_EIM_RW__IPU_DI1_PIN8				0x18c 0x4d8 0x000 0x3 0x0 +#define MX53_PAD_EIM_RW__USBPHY2_HOSTDISCONNECT			0x18c 0x4d8 0x000 0x7 0x0 +#define MX53_PAD_EIM_LBA__EMI_WEIM_LBA				0x190 0x4dc 0x000 0x0 0x0 +#define MX53_PAD_EIM_LBA__GPIO2_27				0x190 0x4dc 0x000 0x1 0x0 +#define MX53_PAD_EIM_LBA__ECSPI2_SS1				0x190 0x4dc 0x7c8 0x2 0x1 +#define MX53_PAD_EIM_LBA__IPU_DI1_PIN17				0x190 0x4dc 0x000 0x3 0x0 +#define MX53_PAD_EIM_LBA__SRC_BT_CFG1_0				0x190 0x4dc 0x000 0x7 0x0 +#define MX53_PAD_EIM_EB0__EMI_WEIM_EB_0				0x194 0x4e4 0x000 0x0 0x0 +#define MX53_PAD_EIM_EB0__GPIO2_28				0x194 0x4e4 0x000 0x1 0x0 +#define MX53_PAD_EIM_EB0__IPU_DISP1_DAT_11			0x194 0x4e4 0x000 0x3 0x0 +#define MX53_PAD_EIM_EB0__IPU_CSI1_D_11				0x194 0x4e4 0x000 0x4 0x0 +#define MX53_PAD_EIM_EB0__GPC_PMIC_RDY				0x194 0x4e4 0x810 0x5 0x0 +#define MX53_PAD_EIM_EB0__SRC_BT_CFG2_7				0x194 0x4e4 0x000 0x7 0x0 +#define MX53_PAD_EIM_EB1__EMI_WEIM_EB_1				0x198 0x4e8 0x000 0x0 0x0 +#define MX53_PAD_EIM_EB1__GPIO2_29				0x198 0x4e8 0x000 0x1 0x0 +#define MX53_PAD_EIM_EB1__IPU_DISP1_DAT_10			0x198 0x4e8 0x000 0x3 0x0 +#define MX53_PAD_EIM_EB1__IPU_CSI1_D_10				0x198 0x4e8 0x000 0x4 0x0 +#define MX53_PAD_EIM_EB1__SRC_BT_CFG2_6				0x198 0x4e8 0x000 0x7 0x0 +#define MX53_PAD_EIM_DA0__EMI_NAND_WEIM_DA_0			0x19c 0x4ec 0x000 0x0 0x0 +#define MX53_PAD_EIM_DA0__GPIO3_0				0x19c 0x4ec 0x000 0x1 0x0 +#define MX53_PAD_EIM_DA0__IPU_DISP1_DAT_9			0x19c 0x4ec 0x000 0x3 0x0 +#define MX53_PAD_EIM_DA0__IPU_CSI1_D_9				0x19c 0x4ec 0x000 0x4 0x0 +#define MX53_PAD_EIM_DA0__SRC_BT_CFG2_5				0x19c 0x4ec 0x000 0x7 0x0 +#define MX53_PAD_EIM_DA1__EMI_NAND_WEIM_DA_1			0x1a0 0x4f0 0x000 0x0 0x0 +#define MX53_PAD_EIM_DA1__GPIO3_1				0x1a0 0x4f0 0x000 0x1 0x0 +#define MX53_PAD_EIM_DA1__IPU_DISP1_DAT_8			0x1a0 0x4f0 0x000 0x3 0x0 +#define MX53_PAD_EIM_DA1__IPU_CSI1_D_8				0x1a0 0x4f0 0x000 0x4 0x0 +#define MX53_PAD_EIM_DA1__SRC_BT_CFG2_4				0x1a0 0x4f0 0x000 0x7 0x0 +#define MX53_PAD_EIM_DA2__EMI_NAND_WEIM_DA_2			0x1a4 0x4f4 0x000 0x0 0x0 +#define MX53_PAD_EIM_DA2__GPIO3_2				0x1a4 0x4f4 0x000 0x1 0x0 +#define MX53_PAD_EIM_DA2__IPU_DISP1_DAT_7			0x1a4 0x4f4 0x000 0x3 0x0 +#define MX53_PAD_EIM_DA2__IPU_CSI1_D_7				0x1a4 0x4f4 0x000 0x4 0x0 +#define MX53_PAD_EIM_DA2__SRC_BT_CFG2_3				0x1a4 0x4f4 0x000 0x7 0x0 +#define MX53_PAD_EIM_DA3__EMI_NAND_WEIM_DA_3			0x1a8 0x4f8 0x000 0x0 0x0 +#define MX53_PAD_EIM_DA3__GPIO3_3				0x1a8 0x4f8 0x000 0x1 0x0 +#define MX53_PAD_EIM_DA3__IPU_DISP1_DAT_6			0x1a8 0x4f8 0x000 0x3 0x0 +#define MX53_PAD_EIM_DA3__IPU_CSI1_D_6				0x1a8 0x4f8 0x000 0x4 0x0 +#define MX53_PAD_EIM_DA3__SRC_BT_CFG2_2				0x1a8 0x4f8 0x000 0x7 0x0 +#define MX53_PAD_EIM_DA4__EMI_NAND_WEIM_DA_4			0x1ac 0x4fc 0x000 0x0 0x0 +#define MX53_PAD_EIM_DA4__GPIO3_4				0x1ac 0x4fc 0x000 0x1 0x0 +#define MX53_PAD_EIM_DA4__IPU_DISP1_DAT_5			0x1ac 0x4fc 0x000 0x3 0x0 +#define MX53_PAD_EIM_DA4__IPU_CSI1_D_5				0x1ac 0x4fc 0x000 0x4 0x0 +#define MX53_PAD_EIM_DA4__SRC_BT_CFG3_7				0x1ac 0x4fc 0x000 0x7 0x0 +#define MX53_PAD_EIM_DA5__EMI_NAND_WEIM_DA_5			0x1b0 0x500 0x000 0x0 0x0 +#define MX53_PAD_EIM_DA5__GPIO3_5				0x1b0 0x500 0x000 0x1 0x0 +#define MX53_PAD_EIM_DA5__IPU_DISP1_DAT_4			0x1b0 0x500 0x000 0x3 0x0 +#define MX53_PAD_EIM_DA5__IPU_CSI1_D_4				0x1b0 0x500 0x000 0x4 0x0 +#define MX53_PAD_EIM_DA5__SRC_BT_CFG3_6				0x1b0 0x500 0x000 0x7 0x0 +#define MX53_PAD_EIM_DA6__EMI_NAND_WEIM_DA_6			0x1b4 0x504 0x000 0x0 0x0 +#define MX53_PAD_EIM_DA6__GPIO3_6				0x1b4 0x504 0x000 0x1 0x0 +#define MX53_PAD_EIM_DA6__IPU_DISP1_DAT_3			0x1b4 0x504 0x000 0x3 0x0 +#define MX53_PAD_EIM_DA6__IPU_CSI1_D_3				0x1b4 0x504 0x000 0x4 0x0 +#define MX53_PAD_EIM_DA6__SRC_BT_CFG3_5				0x1b4 0x504 0x000 0x7 0x0 +#define MX53_PAD_EIM_DA7__EMI_NAND_WEIM_DA_7			0x1b8 0x508 0x000 0x0 0x0 +#define MX53_PAD_EIM_DA7__GPIO3_7				0x1b8 0x508 0x000 0x1 0x0 +#define MX53_PAD_EIM_DA7__IPU_DISP1_DAT_2			0x1b8 0x508 0x000 0x3 0x0 +#define MX53_PAD_EIM_DA7__IPU_CSI1_D_2				0x1b8 0x508 0x000 0x4 0x0 +#define MX53_PAD_EIM_DA7__SRC_BT_CFG3_4				0x1b8 0x508 0x000 0x7 0x0 +#define MX53_PAD_EIM_DA8__EMI_NAND_WEIM_DA_8			0x1bc 0x50c 0x000 0x0 0x0 +#define MX53_PAD_EIM_DA8__GPIO3_8				0x1bc 0x50c 0x000 0x1 0x0 +#define MX53_PAD_EIM_DA8__IPU_DISP1_DAT_1			0x1bc 0x50c 0x000 0x3 0x0 +#define MX53_PAD_EIM_DA8__IPU_CSI1_D_1				0x1bc 0x50c 0x000 0x4 0x0 +#define MX53_PAD_EIM_DA8__SRC_BT_CFG3_3				0x1bc 0x50c 0x000 0x7 0x0 +#define MX53_PAD_EIM_DA9__EMI_NAND_WEIM_DA_9			0x1c0 0x510 0x000 0x0 0x0 +#define MX53_PAD_EIM_DA9__GPIO3_9				0x1c0 0x510 0x000 0x1 0x0 +#define MX53_PAD_EIM_DA9__IPU_DISP1_DAT_0			0x1c0 0x510 0x000 0x3 0x0 +#define MX53_PAD_EIM_DA9__IPU_CSI1_D_0				0x1c0 0x510 0x000 0x4 0x0 +#define MX53_PAD_EIM_DA9__SRC_BT_CFG3_2				0x1c0 0x510 0x000 0x7 0x0 +#define MX53_PAD_EIM_DA10__EMI_NAND_WEIM_DA_10			0x1c4 0x514 0x000 0x0 0x0 +#define MX53_PAD_EIM_DA10__GPIO3_10				0x1c4 0x514 0x000 0x1 0x0 +#define MX53_PAD_EIM_DA10__IPU_DI1_PIN15			0x1c4 0x514 0x000 0x3 0x0 +#define MX53_PAD_EIM_DA10__IPU_CSI1_DATA_EN			0x1c4 0x514 0x834 0x4 0x1 +#define MX53_PAD_EIM_DA10__SRC_BT_CFG3_1			0x1c4 0x514 0x000 0x7 0x0 +#define MX53_PAD_EIM_DA11__EMI_NAND_WEIM_DA_11			0x1c8 0x518 0x000 0x0 0x0 +#define MX53_PAD_EIM_DA11__GPIO3_11				0x1c8 0x518 0x000 0x1 0x0 +#define MX53_PAD_EIM_DA11__IPU_DI1_PIN2				0x1c8 0x518 0x000 0x3 0x0 +#define MX53_PAD_EIM_DA11__IPU_CSI1_HSYNC			0x1c8 0x518 0x838 0x4 0x1 +#define MX53_PAD_EIM_DA12__EMI_NAND_WEIM_DA_12			0x1cc 0x51c 0x000 0x0 0x0 +#define MX53_PAD_EIM_DA12__GPIO3_12				0x1cc 0x51c 0x000 0x1 0x0 +#define MX53_PAD_EIM_DA12__IPU_DI1_PIN3				0x1cc 0x51c 0x000 0x3 0x0 +#define MX53_PAD_EIM_DA12__IPU_CSI1_VSYNC			0x1cc 0x51c 0x83c 0x4 0x1 +#define MX53_PAD_EIM_DA13__EMI_NAND_WEIM_DA_13			0x1d0 0x520 0x000 0x0 0x0 +#define MX53_PAD_EIM_DA13__GPIO3_13				0x1d0 0x520 0x000 0x1 0x0 +#define MX53_PAD_EIM_DA13__IPU_DI1_D0_CS			0x1d0 0x520 0x000 0x3 0x0 +#define MX53_PAD_EIM_DA13__CCM_DI1_EXT_CLK			0x1d0 0x520 0x76c 0x4 0x1 +#define MX53_PAD_EIM_DA14__EMI_NAND_WEIM_DA_14			0x1d4 0x524 0x000 0x0 0x0 +#define MX53_PAD_EIM_DA14__GPIO3_14				0x1d4 0x524 0x000 0x1 0x0 +#define MX53_PAD_EIM_DA14__IPU_DI1_D1_CS			0x1d4 0x524 0x000 0x3 0x0 +#define MX53_PAD_EIM_DA14__CCM_DI0_EXT_CLK			0x1d4 0x524 0x000 0x4 0x0 +#define MX53_PAD_EIM_DA15__EMI_NAND_WEIM_DA_15			0x1d8 0x528 0x000 0x0 0x0 +#define MX53_PAD_EIM_DA15__GPIO3_15				0x1d8 0x528 0x000 0x1 0x0 +#define MX53_PAD_EIM_DA15__IPU_DI1_PIN1				0x1d8 0x528 0x000 0x3 0x0 +#define MX53_PAD_EIM_DA15__IPU_DI1_PIN4				0x1d8 0x528 0x000 0x4 0x0 +#define MX53_PAD_NANDF_WE_B__EMI_NANDF_WE_B			0x1dc 0x52c 0x000 0x0 0x0 +#define MX53_PAD_NANDF_WE_B__GPIO6_12				0x1dc 0x52c 0x000 0x1 0x0 +#define MX53_PAD_NANDF_RE_B__EMI_NANDF_RE_B			0x1e0 0x530 0x000 0x0 0x0 +#define MX53_PAD_NANDF_RE_B__GPIO6_13				0x1e0 0x530 0x000 0x1 0x0 +#define MX53_PAD_EIM_WAIT__EMI_WEIM_WAIT			0x1e4 0x534 0x000 0x0 0x0 +#define MX53_PAD_EIM_WAIT__GPIO5_0				0x1e4 0x534 0x000 0x1 0x0 +#define MX53_PAD_EIM_WAIT__EMI_WEIM_DTACK_B			0x1e4 0x534 0x000 0x2 0x0 +#define MX53_PAD_LVDS1_TX3_P__GPIO6_22				0x1ec 0x000 0x000 0x0 0x0 +#define MX53_PAD_LVDS1_TX3_P__LDB_LVDS1_TX3			0x1ec 0x000 0x000 0x1 0x0 +#define MX53_PAD_LVDS1_TX2_P__GPIO6_24				0x1f0 0x000 0x000 0x0 0x0 +#define MX53_PAD_LVDS1_TX2_P__LDB_LVDS1_TX2			0x1f0 0x000 0x000 0x1 0x0 +#define MX53_PAD_LVDS1_CLK_P__GPIO6_26				0x1f4 0x000 0x000 0x0 0x0 +#define MX53_PAD_LVDS1_CLK_P__LDB_LVDS1_CLK			0x1f4 0x000 0x000 0x1 0x0 +#define MX53_PAD_LVDS1_TX1_P__GPIO6_28				0x1f8 0x000 0x000 0x0 0x0 +#define MX53_PAD_LVDS1_TX1_P__LDB_LVDS1_TX1			0x1f8 0x000 0x000 0x1 0x0 +#define MX53_PAD_LVDS1_TX0_P__GPIO6_30				0x1fc 0x000 0x000 0x0 0x0 +#define MX53_PAD_LVDS1_TX0_P__LDB_LVDS1_TX0			0x1fc 0x000 0x000 0x1 0x0 +#define MX53_PAD_LVDS0_TX3_P__GPIO7_22				0x200 0x000 0x000 0x0 0x0 +#define MX53_PAD_LVDS0_TX3_P__LDB_LVDS0_TX3			0x200 0x000 0x000 0x1 0x0 +#define MX53_PAD_LVDS0_CLK_P__GPIO7_24				0x204 0x000 0x000 0x0 0x0 +#define MX53_PAD_LVDS0_CLK_P__LDB_LVDS0_CLK			0x204 0x000 0x000 0x1 0x0 +#define MX53_PAD_LVDS0_TX2_P__GPIO7_26				0x208 0x000 0x000 0x0 0x0 +#define MX53_PAD_LVDS0_TX2_P__LDB_LVDS0_TX2			0x208 0x000 0x000 0x1 0x0 +#define MX53_PAD_LVDS0_TX1_P__GPIO7_28				0x20c 0x000 0x000 0x0 0x0 +#define MX53_PAD_LVDS0_TX1_P__LDB_LVDS0_TX1			0x20c 0x000 0x000 0x1 0x0 +#define MX53_PAD_LVDS0_TX0_P__GPIO7_30				0x210 0x000 0x000 0x0 0x0 +#define MX53_PAD_LVDS0_TX0_P__LDB_LVDS0_TX0			0x210 0x000 0x000 0x1 0x0 +#define MX53_PAD_GPIO_10__GPIO4_0				0x214 0x540 0x000 0x0 0x0 +#define MX53_PAD_GPIO_10__OSC32k_32K_OUT			0x214 0x540 0x000 0x1 0x0 +#define MX53_PAD_GPIO_11__GPIO4_1				0x218 0x544 0x000 0x0 0x0 +#define MX53_PAD_GPIO_12__GPIO4_2				0x21c 0x548 0x000 0x0 0x0 +#define MX53_PAD_GPIO_13__GPIO4_3				0x220 0x54c 0x000 0x0 0x0 +#define MX53_PAD_GPIO_14__GPIO4_4				0x224 0x550 0x000 0x0 0x0 +#define MX53_PAD_NANDF_CLE__EMI_NANDF_CLE			0x228 0x5a0 0x000 0x0 0x0 +#define MX53_PAD_NANDF_CLE__GPIO6_7				0x228 0x5a0 0x000 0x1 0x0 +#define MX53_PAD_NANDF_CLE__USBPHY1_VSTATUS_0			0x228 0x5a0 0x000 0x7 0x0 +#define MX53_PAD_NANDF_ALE__EMI_NANDF_ALE			0x22c 0x5a4 0x000 0x0 0x0 +#define MX53_PAD_NANDF_ALE__GPIO6_8				0x22c 0x5a4 0x000 0x1 0x0 +#define MX53_PAD_NANDF_ALE__USBPHY1_VSTATUS_1			0x22c 0x5a4 0x000 0x7 0x0 +#define MX53_PAD_NANDF_WP_B__EMI_NANDF_WP_B			0x230 0x5a8 0x000 0x0 0x0 +#define MX53_PAD_NANDF_WP_B__GPIO6_9				0x230 0x5a8 0x000 0x1 0x0 +#define MX53_PAD_NANDF_WP_B__USBPHY1_VSTATUS_2			0x230 0x5a8 0x000 0x7 0x0 +#define MX53_PAD_NANDF_RB0__EMI_NANDF_RB_0			0x234 0x5ac 0x000 0x0 0x0 +#define MX53_PAD_NANDF_RB0__GPIO6_10				0x234 0x5ac 0x000 0x1 0x0 +#define MX53_PAD_NANDF_RB0__USBPHY1_VSTATUS_3			0x234 0x5ac 0x000 0x7 0x0 +#define MX53_PAD_NANDF_CS0__EMI_NANDF_CS_0			0x238 0x5b0 0x000 0x0 0x0 +#define MX53_PAD_NANDF_CS0__GPIO6_11				0x238 0x5b0 0x000 0x1 0x0 +#define MX53_PAD_NANDF_CS0__USBPHY1_VSTATUS_4			0x238 0x5b0 0x000 0x7 0x0 +#define MX53_PAD_NANDF_CS1__EMI_NANDF_CS_1			0x23c 0x5b4 0x000 0x0 0x0 +#define MX53_PAD_NANDF_CS1__GPIO6_14				0x23c 0x5b4 0x000 0x1 0x0 +#define MX53_PAD_NANDF_CS1__MLB_MLBCLK				0x23c 0x5b4 0x858 0x6 0x0 +#define MX53_PAD_NANDF_CS1__USBPHY1_VSTATUS_5			0x23c 0x5b4 0x000 0x7 0x0 +#define MX53_PAD_NANDF_CS2__EMI_NANDF_CS_2			0x240 0x5b8 0x000 0x0 0x0 +#define MX53_PAD_NANDF_CS2__GPIO6_15				0x240 0x5b8 0x000 0x1 0x0 +#define MX53_PAD_NANDF_CS2__IPU_SISG_0				0x240 0x5b8 0x000 0x2 0x0 +#define MX53_PAD_NANDF_CS2__ESAI1_TX0				0x240 0x5b8 0x7e4 0x3 0x0 +#define MX53_PAD_NANDF_CS2__EMI_WEIM_CRE			0x240 0x5b8 0x000 0x4 0x0 +#define MX53_PAD_NANDF_CS2__CCM_CSI0_MCLK			0x240 0x5b8 0x000 0x5 0x0 +#define MX53_PAD_NANDF_CS2__MLB_MLBSIG				0x240 0x5b8 0x860 0x6 0x0 +#define MX53_PAD_NANDF_CS2__USBPHY1_VSTATUS_6			0x240 0x5b8 0x000 0x7 0x0 +#define MX53_PAD_NANDF_CS3__EMI_NANDF_CS_3			0x244 0x5bc 0x000 0x0 0x0 +#define MX53_PAD_NANDF_CS3__GPIO6_16				0x244 0x5bc 0x000 0x1 0x0 +#define MX53_PAD_NANDF_CS3__IPU_SISG_1				0x244 0x5bc 0x000 0x2 0x0 +#define MX53_PAD_NANDF_CS3__ESAI1_TX1				0x244 0x5bc 0x7e8 0x3 0x0 +#define MX53_PAD_NANDF_CS3__EMI_WEIM_A_26			0x244 0x5bc 0x000 0x4 0x0 +#define MX53_PAD_NANDF_CS3__MLB_MLBDAT				0x244 0x5bc 0x85c 0x6 0x0 +#define MX53_PAD_NANDF_CS3__USBPHY1_VSTATUS_7			0x244 0x5bc 0x000 0x7 0x0 +#define MX53_PAD_FEC_MDIO__FEC_MDIO				0x248 0x5c4 0x804 0x0 0x1 +#define MX53_PAD_FEC_MDIO__GPIO1_22				0x248 0x5c4 0x000 0x1 0x0 +#define MX53_PAD_FEC_MDIO__ESAI1_SCKR				0x248 0x5c4 0x7dc 0x2 0x0 +#define MX53_PAD_FEC_MDIO__FEC_COL				0x248 0x5c4 0x800 0x3 0x1 +#define MX53_PAD_FEC_MDIO__RTC_CE_RTC_PS2			0x248 0x5c4 0x000 0x4 0x0 +#define MX53_PAD_FEC_MDIO__SDMA_DEBUG_BUS_DEVICE_3		0x248 0x5c4 0x000 0x5 0x0 +#define MX53_PAD_FEC_MDIO__EMI_EMI_DEBUG_49			0x248 0x5c4 0x000 0x6 0x0 +#define MX53_PAD_FEC_REF_CLK__FEC_TX_CLK			0x24c 0x5c8 0x000 0x0 0x0 +#define MX53_PAD_FEC_REF_CLK__GPIO1_23				0x24c 0x5c8 0x000 0x1 0x0 +#define MX53_PAD_FEC_REF_CLK__ESAI1_FSR				0x24c 0x5c8 0x7cc 0x2 0x0 +#define MX53_PAD_FEC_REF_CLK__SDMA_DEBUG_BUS_DEVICE_4		0x24c 0x5c8 0x000 0x5 0x0 +#define MX53_PAD_FEC_REF_CLK__EMI_EMI_DEBUG_50			0x24c 0x5c8 0x000 0x6 0x0 +#define MX53_PAD_FEC_RX_ER__FEC_RX_ER				0x250 0x5cc 0x000 0x0 0x0 +#define MX53_PAD_FEC_RX_ER__GPIO1_24				0x250 0x5cc 0x000 0x1 0x0 +#define MX53_PAD_FEC_RX_ER__ESAI1_HCKR				0x250 0x5cc 0x7d4 0x2 0x0 +#define MX53_PAD_FEC_RX_ER__FEC_RX_CLK				0x250 0x5cc 0x808 0x3 0x1 +#define MX53_PAD_FEC_RX_ER__RTC_CE_RTC_PS3			0x250 0x5cc 0x000 0x4 0x0 +#define MX53_PAD_FEC_CRS_DV__FEC_RX_DV				0x254 0x5d0 0x000 0x0 0x0 +#define MX53_PAD_FEC_CRS_DV__GPIO1_25				0x254 0x5d0 0x000 0x1 0x0 +#define MX53_PAD_FEC_CRS_DV__ESAI1_SCKT				0x254 0x5d0 0x7e0 0x2 0x0 +#define MX53_PAD_FEC_RXD1__FEC_RDATA_1				0x258 0x5d4 0x000 0x0 0x0 +#define MX53_PAD_FEC_RXD1__GPIO1_26				0x258 0x5d4 0x000 0x1 0x0 +#define MX53_PAD_FEC_RXD1__ESAI1_FST				0x258 0x5d4 0x7d0 0x2 0x0 +#define MX53_PAD_FEC_RXD1__MLB_MLBSIG				0x258 0x5d4 0x860 0x3 0x1 +#define MX53_PAD_FEC_RXD1__RTC_CE_RTC_PS1			0x258 0x5d4 0x000 0x4 0x0 +#define MX53_PAD_FEC_RXD0__FEC_RDATA_0				0x25c 0x5d8 0x000 0x0 0x0 +#define MX53_PAD_FEC_RXD0__GPIO1_27				0x25c 0x5d8 0x000 0x1 0x0 +#define MX53_PAD_FEC_RXD0__ESAI1_HCKT				0x25c 0x5d8 0x7d8 0x2 0x0 +#define MX53_PAD_FEC_RXD0__OSC32k_32K_OUT			0x25c 0x5d8 0x000 0x3 0x0 +#define MX53_PAD_FEC_TX_EN__FEC_TX_EN				0x260 0x5dc 0x000 0x0 0x0 +#define MX53_PAD_FEC_TX_EN__GPIO1_28				0x260 0x5dc 0x000 0x1 0x0 +#define MX53_PAD_FEC_TX_EN__ESAI1_TX3_RX2			0x260 0x5dc 0x7f0 0x2 0x0 +#define MX53_PAD_FEC_TXD1__FEC_TDATA_1				0x264 0x5e0 0x000 0x0 0x0 +#define MX53_PAD_FEC_TXD1__GPIO1_29				0x264 0x5e0 0x000 0x1 0x0 +#define MX53_PAD_FEC_TXD1__ESAI1_TX2_RX3			0x264 0x5e0 0x7ec 0x2 0x0 +#define MX53_PAD_FEC_TXD1__MLB_MLBCLK				0x264 0x5e0 0x858 0x3 0x1 +#define MX53_PAD_FEC_TXD1__RTC_CE_RTC_PRSC_CLK			0x264 0x5e0 0x000 0x4 0x0 +#define MX53_PAD_FEC_TXD0__FEC_TDATA_0				0x268 0x5e4 0x000 0x0 0x0 +#define MX53_PAD_FEC_TXD0__GPIO1_30				0x268 0x5e4 0x000 0x1 0x0 +#define MX53_PAD_FEC_TXD0__ESAI1_TX4_RX1			0x268 0x5e4 0x7f4 0x2 0x0 +#define MX53_PAD_FEC_TXD0__USBPHY2_DATAOUT_0			0x268 0x5e4 0x000 0x7 0x0 +#define MX53_PAD_FEC_MDC__FEC_MDC				0x26c 0x5e8 0x000 0x0 0x0 +#define MX53_PAD_FEC_MDC__GPIO1_31				0x26c 0x5e8 0x000 0x1 0x0 +#define MX53_PAD_FEC_MDC__ESAI1_TX5_RX0				0x26c 0x5e8 0x7f8 0x2 0x0 +#define MX53_PAD_FEC_MDC__MLB_MLBDAT				0x26c 0x5e8 0x85c 0x3 0x1 +#define MX53_PAD_FEC_MDC__RTC_CE_RTC_ALARM1_TRIG		0x26c 0x5e8 0x000 0x4 0x0 +#define MX53_PAD_FEC_MDC__USBPHY2_DATAOUT_1			0x26c 0x5e8 0x000 0x7 0x0 +#define MX53_PAD_PATA_DIOW__PATA_DIOW				0x270 0x5f0 0x000 0x0 0x0 +#define MX53_PAD_PATA_DIOW__GPIO6_17				0x270 0x5f0 0x000 0x1 0x0 +#define MX53_PAD_PATA_DIOW__UART1_TXD_MUX			0x270 0x5f0 0x000 0x3 0x0 +#define MX53_PAD_PATA_DIOW__USBPHY2_DATAOUT_2			0x270 0x5f0 0x000 0x7 0x0 +#define MX53_PAD_PATA_DMACK__PATA_DMACK				0x274 0x5f4 0x000 0x0 0x0 +#define MX53_PAD_PATA_DMACK__GPIO6_18				0x274 0x5f4 0x000 0x1 0x0 +#define MX53_PAD_PATA_DMACK__UART1_RXD_MUX			0x274 0x5f4 0x878 0x3 0x3 +#define MX53_PAD_PATA_DMACK__USBPHY2_DATAOUT_3			0x274 0x5f4 0x000 0x7 0x0 +#define MX53_PAD_PATA_DMARQ__PATA_DMARQ				0x278 0x5f8 0x000 0x0 0x0 +#define MX53_PAD_PATA_DMARQ__GPIO7_0				0x278 0x5f8 0x000 0x1 0x0 +#define MX53_PAD_PATA_DMARQ__UART2_TXD_MUX			0x278 0x5f8 0x000 0x3 0x0 +#define MX53_PAD_PATA_DMARQ__CCM_CCM_OUT_0			0x278 0x5f8 0x000 0x5 0x0 +#define MX53_PAD_PATA_DMARQ__USBPHY2_DATAOUT_4			0x278 0x5f8 0x000 0x7 0x0 +#define MX53_PAD_PATA_BUFFER_EN__PATA_BUFFER_EN			0x27c 0x5fc 0x000 0x0 0x0 +#define MX53_PAD_PATA_BUFFER_EN__GPIO7_1			0x27c 0x5fc 0x000 0x1 0x0 +#define MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX			0x27c 0x5fc 0x880 0x3 0x3 +#define MX53_PAD_PATA_BUFFER_EN__CCM_CCM_OUT_1			0x27c 0x5fc 0x000 0x5 0x0 +#define MX53_PAD_PATA_BUFFER_EN__USBPHY2_DATAOUT_5		0x27c 0x5fc 0x000 0x7 0x0 +#define MX53_PAD_PATA_INTRQ__PATA_INTRQ				0x280 0x600 0x000 0x0 0x0 +#define MX53_PAD_PATA_INTRQ__GPIO7_2				0x280 0x600 0x000 0x1 0x0 +#define MX53_PAD_PATA_INTRQ__UART2_CTS				0x280 0x600 0x000 0x3 0x0 +#define MX53_PAD_PATA_INTRQ__CAN1_TXCAN				0x280 0x600 0x000 0x4 0x0 +#define MX53_PAD_PATA_INTRQ__CCM_CCM_OUT_2			0x280 0x600 0x000 0x5 0x0 +#define MX53_PAD_PATA_INTRQ__USBPHY2_DATAOUT_6			0x280 0x600 0x000 0x7 0x0 +#define MX53_PAD_PATA_DIOR__PATA_DIOR				0x284 0x604 0x000 0x0 0x0 +#define MX53_PAD_PATA_DIOR__GPIO7_3				0x284 0x604 0x000 0x1 0x0 +#define MX53_PAD_PATA_DIOR__UART2_RTS				0x284 0x604 0x87c 0x3 0x3 +#define MX53_PAD_PATA_DIOR__CAN1_RXCAN				0x284 0x604 0x760 0x4 0x1 +#define MX53_PAD_PATA_DIOR__USBPHY2_DATAOUT_7			0x284 0x604 0x000 0x7 0x0 +#define MX53_PAD_PATA_RESET_B__PATA_PATA_RESET_B		0x288 0x608 0x000 0x0 0x0 +#define MX53_PAD_PATA_RESET_B__GPIO7_4				0x288 0x608 0x000 0x1 0x0 +#define MX53_PAD_PATA_RESET_B__ESDHC3_CMD			0x288 0x608 0x000 0x2 0x0 +#define MX53_PAD_PATA_RESET_B__UART1_CTS			0x288 0x608 0x000 0x3 0x0 +#define MX53_PAD_PATA_RESET_B__CAN2_TXCAN			0x288 0x608 0x000 0x4 0x0 +#define MX53_PAD_PATA_RESET_B__USBPHY1_DATAOUT_0		0x288 0x608 0x000 0x7 0x0 +#define MX53_PAD_PATA_IORDY__PATA_IORDY				0x28c 0x60c 0x000 0x0 0x0 +#define MX53_PAD_PATA_IORDY__GPIO7_5				0x28c 0x60c 0x000 0x1 0x0 +#define MX53_PAD_PATA_IORDY__ESDHC3_CLK				0x28c 0x60c 0x000 0x2 0x0 +#define MX53_PAD_PATA_IORDY__UART1_RTS				0x28c 0x60c 0x874 0x3 0x3 +#define MX53_PAD_PATA_IORDY__CAN2_RXCAN				0x28c 0x60c 0x764 0x4 0x1 +#define MX53_PAD_PATA_IORDY__USBPHY1_DATAOUT_1			0x28c 0x60c 0x000 0x7 0x0 +#define MX53_PAD_PATA_DA_0__PATA_DA_0				0x290 0x610 0x000 0x0 0x0 +#define MX53_PAD_PATA_DA_0__GPIO7_6				0x290 0x610 0x000 0x1 0x0 +#define MX53_PAD_PATA_DA_0__ESDHC3_RST				0x290 0x610 0x000 0x2 0x0 +#define MX53_PAD_PATA_DA_0__OWIRE_LINE				0x290 0x610 0x864 0x4 0x0 +#define MX53_PAD_PATA_DA_0__USBPHY1_DATAOUT_2			0x290 0x610 0x000 0x7 0x0 +#define MX53_PAD_PATA_DA_1__PATA_DA_1				0x294 0x614 0x000 0x0 0x0 +#define MX53_PAD_PATA_DA_1__GPIO7_7				0x294 0x614 0x000 0x1 0x0 +#define MX53_PAD_PATA_DA_1__ESDHC4_CMD				0x294 0x614 0x000 0x2 0x0 +#define MX53_PAD_PATA_DA_1__UART3_CTS				0x294 0x614 0x000 0x4 0x0 +#define MX53_PAD_PATA_DA_1__USBPHY1_DATAOUT_3			0x294 0x614 0x000 0x7 0x0 +#define MX53_PAD_PATA_DA_2__PATA_DA_2				0x298 0x618 0x000 0x0 0x0 +#define MX53_PAD_PATA_DA_2__GPIO7_8				0x298 0x618 0x000 0x1 0x0 +#define MX53_PAD_PATA_DA_2__ESDHC4_CLK				0x298 0x618 0x000 0x2 0x0 +#define MX53_PAD_PATA_DA_2__UART3_RTS				0x298 0x618 0x884 0x4 0x5 +#define MX53_PAD_PATA_DA_2__USBPHY1_DATAOUT_4			0x298 0x618 0x000 0x7 0x0 +#define MX53_PAD_PATA_CS_0__PATA_CS_0				0x29c 0x61c 0x000 0x0 0x0 +#define MX53_PAD_PATA_CS_0__GPIO7_9				0x29c 0x61c 0x000 0x1 0x0 +#define MX53_PAD_PATA_CS_0__UART3_TXD_MUX			0x29c 0x61c 0x000 0x4 0x0 +#define MX53_PAD_PATA_CS_0__USBPHY1_DATAOUT_5			0x29c 0x61c 0x000 0x7 0x0 +#define MX53_PAD_PATA_CS_1__PATA_CS_1				0x2a0 0x620 0x000 0x0 0x0 +#define MX53_PAD_PATA_CS_1__GPIO7_10				0x2a0 0x620 0x000 0x1 0x0 +#define MX53_PAD_PATA_CS_1__UART3_RXD_MUX			0x2a0 0x620 0x888 0x4 0x3 +#define MX53_PAD_PATA_CS_1__USBPHY1_DATAOUT_6			0x2a0 0x620 0x000 0x7 0x0 +#define MX53_PAD_PATA_DATA0__PATA_DATA_0			0x2a4 0x628 0x000 0x0 0x0 +#define MX53_PAD_PATA_DATA0__GPIO2_0				0x2a4 0x628 0x000 0x1 0x0 +#define MX53_PAD_PATA_DATA0__EMI_NANDF_D_0			0x2a4 0x628 0x000 0x3 0x0 +#define MX53_PAD_PATA_DATA0__ESDHC3_DAT4			0x2a4 0x628 0x000 0x4 0x0 +#define MX53_PAD_PATA_DATA0__GPU3d_GPU_DEBUG_OUT_0		0x2a4 0x628 0x000 0x5 0x0 +#define MX53_PAD_PATA_DATA0__IPU_DIAG_BUS_0			0x2a4 0x628 0x000 0x6 0x0 +#define MX53_PAD_PATA_DATA0__USBPHY1_DATAOUT_7			0x2a4 0x628 0x000 0x7 0x0 +#define MX53_PAD_PATA_DATA1__PATA_DATA_1			0x2a8 0x62c 0x000 0x0 0x0 +#define MX53_PAD_PATA_DATA1__GPIO2_1				0x2a8 0x62c 0x000 0x1 0x0 +#define MX53_PAD_PATA_DATA1__EMI_NANDF_D_1			0x2a8 0x62c 0x000 0x3 0x0 +#define MX53_PAD_PATA_DATA1__ESDHC3_DAT5			0x2a8 0x62c 0x000 0x4 0x0 +#define MX53_PAD_PATA_DATA1__GPU3d_GPU_DEBUG_OUT_1		0x2a8 0x62c 0x000 0x5 0x0 +#define MX53_PAD_PATA_DATA1__IPU_DIAG_BUS_1			0x2a8 0x62c 0x000 0x6 0x0 +#define MX53_PAD_PATA_DATA2__PATA_DATA_2			0x2ac 0x630 0x000 0x0 0x0 +#define MX53_PAD_PATA_DATA2__GPIO2_2				0x2ac 0x630 0x000 0x1 0x0 +#define MX53_PAD_PATA_DATA2__EMI_NANDF_D_2			0x2ac 0x630 0x000 0x3 0x0 +#define MX53_PAD_PATA_DATA2__ESDHC3_DAT6			0x2ac 0x630 0x000 0x4 0x0 +#define MX53_PAD_PATA_DATA2__GPU3d_GPU_DEBUG_OUT_2		0x2ac 0x630 0x000 0x5 0x0 +#define MX53_PAD_PATA_DATA2__IPU_DIAG_BUS_2			0x2ac 0x630 0x000 0x6 0x0 +#define MX53_PAD_PATA_DATA3__PATA_DATA_3			0x2b0 0x634 0x000 0x0 0x0 +#define MX53_PAD_PATA_DATA3__GPIO2_3				0x2b0 0x634 0x000 0x1 0x0 +#define MX53_PAD_PATA_DATA3__EMI_NANDF_D_3			0x2b0 0x634 0x000 0x3 0x0 +#define MX53_PAD_PATA_DATA3__ESDHC3_DAT7			0x2b0 0x634 0x000 0x4 0x0 +#define MX53_PAD_PATA_DATA3__GPU3d_GPU_DEBUG_OUT_3		0x2b0 0x634 0x000 0x5 0x0 +#define MX53_PAD_PATA_DATA3__IPU_DIAG_BUS_3			0x2b0 0x634 0x000 0x6 0x0 +#define MX53_PAD_PATA_DATA4__PATA_DATA_4			0x2b4 0x638 0x000 0x0 0x0 +#define MX53_PAD_PATA_DATA4__GPIO2_4				0x2b4 0x638 0x000 0x1 0x0 +#define MX53_PAD_PATA_DATA4__EMI_NANDF_D_4			0x2b4 0x638 0x000 0x3 0x0 +#define MX53_PAD_PATA_DATA4__ESDHC4_DAT4			0x2b4 0x638 0x000 0x4 0x0 +#define MX53_PAD_PATA_DATA4__GPU3d_GPU_DEBUG_OUT_4		0x2b4 0x638 0x000 0x5 0x0 +#define MX53_PAD_PATA_DATA4__IPU_DIAG_BUS_4			0x2b4 0x638 0x000 0x6 0x0 +#define MX53_PAD_PATA_DATA5__PATA_DATA_5			0x2b8 0x63c 0x000 0x0 0x0 +#define MX53_PAD_PATA_DATA5__GPIO2_5				0x2b8 0x63c 0x000 0x1 0x0 +#define MX53_PAD_PATA_DATA5__EMI_NANDF_D_5			0x2b8 0x63c 0x000 0x3 0x0 +#define MX53_PAD_PATA_DATA5__ESDHC4_DAT5			0x2b8 0x63c 0x000 0x4 0x0 +#define MX53_PAD_PATA_DATA5__GPU3d_GPU_DEBUG_OUT_5		0x2b8 0x63c 0x000 0x5 0x0 +#define MX53_PAD_PATA_DATA5__IPU_DIAG_BUS_5			0x2b8 0x63c 0x000 0x6 0x0 +#define MX53_PAD_PATA_DATA6__PATA_DATA_6			0x2bc 0x640 0x000 0x0 0x0 +#define MX53_PAD_PATA_DATA6__GPIO2_6				0x2bc 0x640 0x000 0x1 0x0 +#define MX53_PAD_PATA_DATA6__EMI_NANDF_D_6			0x2bc 0x640 0x000 0x3 0x0 +#define MX53_PAD_PATA_DATA6__ESDHC4_DAT6			0x2bc 0x640 0x000 0x4 0x0 +#define MX53_PAD_PATA_DATA6__GPU3d_GPU_DEBUG_OUT_6		0x2bc 0x640 0x000 0x5 0x0 +#define MX53_PAD_PATA_DATA6__IPU_DIAG_BUS_6			0x2bc 0x640 0x000 0x6 0x0 +#define MX53_PAD_PATA_DATA7__PATA_DATA_7			0x2c0 0x644 0x000 0x0 0x0 +#define MX53_PAD_PATA_DATA7__GPIO2_7				0x2c0 0x644 0x000 0x1 0x0 +#define MX53_PAD_PATA_DATA7__EMI_NANDF_D_7			0x2c0 0x644 0x000 0x3 0x0 +#define MX53_PAD_PATA_DATA7__ESDHC4_DAT7			0x2c0 0x644 0x000 0x4 0x0 +#define MX53_PAD_PATA_DATA7__GPU3d_GPU_DEBUG_OUT_7		0x2c0 0x644 0x000 0x5 0x0 +#define MX53_PAD_PATA_DATA7__IPU_DIAG_BUS_7			0x2c0 0x644 0x000 0x6 0x0 +#define MX53_PAD_PATA_DATA8__PATA_DATA_8			0x2c4 0x648 0x000 0x0 0x0 +#define MX53_PAD_PATA_DATA8__GPIO2_8				0x2c4 0x648 0x000 0x1 0x0 +#define MX53_PAD_PATA_DATA8__ESDHC1_DAT4			0x2c4 0x648 0x000 0x2 0x0 +#define MX53_PAD_PATA_DATA8__EMI_NANDF_D_8			0x2c4 0x648 0x000 0x3 0x0 +#define MX53_PAD_PATA_DATA8__ESDHC3_DAT0			0x2c4 0x648 0x000 0x4 0x0 +#define MX53_PAD_PATA_DATA8__GPU3d_GPU_DEBUG_OUT_8		0x2c4 0x648 0x000 0x5 0x0 +#define MX53_PAD_PATA_DATA8__IPU_DIAG_BUS_8			0x2c4 0x648 0x000 0x6 0x0 +#define MX53_PAD_PATA_DATA9__PATA_DATA_9			0x2c8 0x64c 0x000 0x0 0x0 +#define MX53_PAD_PATA_DATA9__GPIO2_9				0x2c8 0x64c 0x000 0x1 0x0 +#define MX53_PAD_PATA_DATA9__ESDHC1_DAT5			0x2c8 0x64c 0x000 0x2 0x0 +#define MX53_PAD_PATA_DATA9__EMI_NANDF_D_9			0x2c8 0x64c 0x000 0x3 0x0 +#define MX53_PAD_PATA_DATA9__ESDHC3_DAT1			0x2c8 0x64c 0x000 0x4 0x0 +#define MX53_PAD_PATA_DATA9__GPU3d_GPU_DEBUG_OUT_9		0x2c8 0x64c 0x000 0x5 0x0 +#define MX53_PAD_PATA_DATA9__IPU_DIAG_BUS_9			0x2c8 0x64c 0x000 0x6 0x0 +#define MX53_PAD_PATA_DATA10__PATA_DATA_10			0x2cc 0x650 0x000 0x0 0x0 +#define MX53_PAD_PATA_DATA10__GPIO2_10				0x2cc 0x650 0x000 0x1 0x0 +#define MX53_PAD_PATA_DATA10__ESDHC1_DAT6			0x2cc 0x650 0x000 0x2 0x0 +#define MX53_PAD_PATA_DATA10__EMI_NANDF_D_10			0x2cc 0x650 0x000 0x3 0x0 +#define MX53_PAD_PATA_DATA10__ESDHC3_DAT2			0x2cc 0x650 0x000 0x4 0x0 +#define MX53_PAD_PATA_DATA10__GPU3d_GPU_DEBUG_OUT_10		0x2cc 0x650 0x000 0x5 0x0 +#define MX53_PAD_PATA_DATA10__IPU_DIAG_BUS_10			0x2cc 0x650 0x000 0x6 0x0 +#define MX53_PAD_PATA_DATA11__PATA_DATA_11			0x2d0 0x654 0x000 0x0 0x0 +#define MX53_PAD_PATA_DATA11__GPIO2_11				0x2d0 0x654 0x000 0x1 0x0 +#define MX53_PAD_PATA_DATA11__ESDHC1_DAT7			0x2d0 0x654 0x000 0x2 0x0 +#define MX53_PAD_PATA_DATA11__EMI_NANDF_D_11			0x2d0 0x654 0x000 0x3 0x0 +#define MX53_PAD_PATA_DATA11__ESDHC3_DAT3			0x2d0 0x654 0x000 0x4 0x0 +#define MX53_PAD_PATA_DATA11__GPU3d_GPU_DEBUG_OUT_11		0x2d0 0x654 0x000 0x5 0x0 +#define MX53_PAD_PATA_DATA11__IPU_DIAG_BUS_11			0x2d0 0x654 0x000 0x6 0x0 +#define MX53_PAD_PATA_DATA12__PATA_DATA_12			0x2d4 0x658 0x000 0x0 0x0 +#define MX53_PAD_PATA_DATA12__GPIO2_12				0x2d4 0x658 0x000 0x1 0x0 +#define MX53_PAD_PATA_DATA12__ESDHC2_DAT4			0x2d4 0x658 0x000 0x2 0x0 +#define MX53_PAD_PATA_DATA12__EMI_NANDF_D_12			0x2d4 0x658 0x000 0x3 0x0 +#define MX53_PAD_PATA_DATA12__ESDHC4_DAT0			0x2d4 0x658 0x000 0x4 0x0 +#define MX53_PAD_PATA_DATA12__GPU3d_GPU_DEBUG_OUT_12		0x2d4 0x658 0x000 0x5 0x0 +#define MX53_PAD_PATA_DATA12__IPU_DIAG_BUS_12			0x2d4 0x658 0x000 0x6 0x0 +#define MX53_PAD_PATA_DATA13__PATA_DATA_13			0x2d8 0x65c 0x000 0x0 0x0 +#define MX53_PAD_PATA_DATA13__GPIO2_13				0x2d8 0x65c 0x000 0x1 0x0 +#define MX53_PAD_PATA_DATA13__ESDHC2_DAT5			0x2d8 0x65c 0x000 0x2 0x0 +#define MX53_PAD_PATA_DATA13__EMI_NANDF_D_13			0x2d8 0x65c 0x000 0x3 0x0 +#define MX53_PAD_PATA_DATA13__ESDHC4_DAT1			0x2d8 0x65c 0x000 0x4 0x0 +#define MX53_PAD_PATA_DATA13__GPU3d_GPU_DEBUG_OUT_13		0x2d8 0x65c 0x000 0x5 0x0 +#define MX53_PAD_PATA_DATA13__IPU_DIAG_BUS_13			0x2d8 0x65c 0x000 0x6 0x0 +#define MX53_PAD_PATA_DATA14__PATA_DATA_14			0x2dc 0x660 0x000 0x0 0x0 +#define MX53_PAD_PATA_DATA14__GPIO2_14				0x2dc 0x660 0x000 0x1 0x0 +#define MX53_PAD_PATA_DATA14__ESDHC2_DAT6			0x2dc 0x660 0x000 0x2 0x0 +#define MX53_PAD_PATA_DATA14__EMI_NANDF_D_14			0x2dc 0x660 0x000 0x3 0x0 +#define MX53_PAD_PATA_DATA14__ESDHC4_DAT2			0x2dc 0x660 0x000 0x4 0x0 +#define MX53_PAD_PATA_DATA14__GPU3d_GPU_DEBUG_OUT_14		0x2dc 0x660 0x000 0x5 0x0 +#define MX53_PAD_PATA_DATA14__IPU_DIAG_BUS_14			0x2dc 0x660 0x000 0x6 0x0 +#define MX53_PAD_PATA_DATA15__PATA_DATA_15			0x2e0 0x664 0x000 0x0 0x0 +#define MX53_PAD_PATA_DATA15__GPIO2_15				0x2e0 0x664 0x000 0x1 0x0 +#define MX53_PAD_PATA_DATA15__ESDHC2_DAT7			0x2e0 0x664 0x000 0x2 0x0 +#define MX53_PAD_PATA_DATA15__EMI_NANDF_D_15			0x2e0 0x664 0x000 0x3 0x0 +#define MX53_PAD_PATA_DATA15__ESDHC4_DAT3			0x2e0 0x664 0x000 0x4 0x0 +#define MX53_PAD_PATA_DATA15__GPU3d_GPU_DEBUG_OUT_15		0x2e0 0x664 0x000 0x5 0x0 +#define MX53_PAD_PATA_DATA15__IPU_DIAG_BUS_15			0x2e0 0x664 0x000 0x6 0x0 +#define MX53_PAD_SD1_DATA0__ESDHC1_DAT0				0x2e4 0x66c 0x000 0x0 0x0 +#define MX53_PAD_SD1_DATA0__GPIO1_16				0x2e4 0x66c 0x000 0x1 0x0 +#define MX53_PAD_SD1_DATA0__GPT_CAPIN1				0x2e4 0x66c 0x000 0x3 0x0 +#define MX53_PAD_SD1_DATA0__CSPI_MISO				0x2e4 0x66c 0x784 0x5 0x2 +#define MX53_PAD_SD1_DATA0__CCM_PLL3_BYP			0x2e4 0x66c 0x778 0x7 0x0 +#define MX53_PAD_SD1_DATA1__ESDHC1_DAT1				0x2e8 0x670 0x000 0x0 0x0 +#define MX53_PAD_SD1_DATA1__GPIO1_17				0x2e8 0x670 0x000 0x1 0x0 +#define MX53_PAD_SD1_DATA1__GPT_CAPIN2				0x2e8 0x670 0x000 0x3 0x0 +#define MX53_PAD_SD1_DATA1__CSPI_SS0				0x2e8 0x670 0x78c 0x5 0x3 +#define MX53_PAD_SD1_DATA1__CCM_PLL4_BYP			0x2e8 0x670 0x77c 0x7 0x1 +#define MX53_PAD_SD1_CMD__ESDHC1_CMD				0x2ec 0x674 0x000 0x0 0x0 +#define MX53_PAD_SD1_CMD__GPIO1_18				0x2ec 0x674 0x000 0x1 0x0 +#define MX53_PAD_SD1_CMD__GPT_CMPOUT1				0x2ec 0x674 0x000 0x3 0x0 +#define MX53_PAD_SD1_CMD__CSPI_MOSI				0x2ec 0x674 0x788 0x5 0x2 +#define MX53_PAD_SD1_CMD__CCM_PLL1_BYP				0x2ec 0x674 0x770 0x7 0x0 +#define MX53_PAD_SD1_DATA2__ESDHC1_DAT2				0x2f0 0x678 0x000 0x0 0x0 +#define MX53_PAD_SD1_DATA2__GPIO1_19				0x2f0 0x678 0x000 0x1 0x0 +#define MX53_PAD_SD1_DATA2__GPT_CMPOUT2				0x2f0 0x678 0x000 0x2 0x0 +#define MX53_PAD_SD1_DATA2__PWM2_PWMO				0x2f0 0x678 0x000 0x3 0x0 +#define MX53_PAD_SD1_DATA2__WDOG1_WDOG_B			0x2f0 0x678 0x000 0x4 0x0 +#define MX53_PAD_SD1_DATA2__CSPI_SS1				0x2f0 0x678 0x790 0x5 0x2 +#define MX53_PAD_SD1_DATA2__WDOG1_WDOG_RST_B_DEB		0x2f0 0x678 0x000 0x6 0x0 +#define MX53_PAD_SD1_DATA2__CCM_PLL2_BYP			0x2f0 0x678 0x774 0x7 0x0 +#define MX53_PAD_SD1_CLK__ESDHC1_CLK				0x2f4 0x67c 0x000 0x0 0x0 +#define MX53_PAD_SD1_CLK__GPIO1_20				0x2f4 0x67c 0x000 0x1 0x0 +#define MX53_PAD_SD1_CLK__OSC32k_32K_OUT			0x2f4 0x67c 0x000 0x2 0x0 +#define MX53_PAD_SD1_CLK__GPT_CLKIN				0x2f4 0x67c 0x000 0x3 0x0 +#define MX53_PAD_SD1_CLK__CSPI_SCLK				0x2f4 0x67c 0x780 0x5 0x2 +#define MX53_PAD_SD1_CLK__SATA_PHY_DTB_0			0x2f4 0x67c 0x000 0x7 0x0 +#define MX53_PAD_SD1_DATA3__ESDHC1_DAT3				0x2f8 0x680 0x000 0x0 0x0 +#define MX53_PAD_SD1_DATA3__GPIO1_21				0x2f8 0x680 0x000 0x1 0x0 +#define MX53_PAD_SD1_DATA3__GPT_CMPOUT3				0x2f8 0x680 0x000 0x2 0x0 +#define MX53_PAD_SD1_DATA3__PWM1_PWMO				0x2f8 0x680 0x000 0x3 0x0 +#define MX53_PAD_SD1_DATA3__WDOG2_WDOG_B			0x2f8 0x680 0x000 0x4 0x0 +#define MX53_PAD_SD1_DATA3__CSPI_SS2				0x2f8 0x680 0x794 0x5 0x2 +#define MX53_PAD_SD1_DATA3__WDOG2_WDOG_RST_B_DEB		0x2f8 0x680 0x000 0x6 0x0 +#define MX53_PAD_SD1_DATA3__SATA_PHY_DTB_1			0x2f8 0x680 0x000 0x7 0x0 +#define MX53_PAD_SD2_CLK__ESDHC2_CLK				0x2fc 0x688 0x000 0x0 0x0 +#define MX53_PAD_SD2_CLK__GPIO1_10				0x2fc 0x688 0x000 0x1 0x0 +#define MX53_PAD_SD2_CLK__KPP_COL_5				0x2fc 0x688 0x840 0x2 0x2 +#define MX53_PAD_SD2_CLK__AUDMUX_AUD4_RXFS			0x2fc 0x688 0x73c 0x3 0x1 +#define MX53_PAD_SD2_CLK__CSPI_SCLK				0x2fc 0x688 0x780 0x5 0x3 +#define MX53_PAD_SD2_CLK__SCC_RANDOM_V				0x2fc 0x688 0x000 0x7 0x0 +#define MX53_PAD_SD2_CMD__ESDHC2_CMD				0x300 0x68c 0x000 0x0 0x0 +#define MX53_PAD_SD2_CMD__GPIO1_11				0x300 0x68c 0x000 0x1 0x0 +#define MX53_PAD_SD2_CMD__KPP_ROW_5				0x300 0x68c 0x84c 0x2 0x1 +#define MX53_PAD_SD2_CMD__AUDMUX_AUD4_RXC			0x300 0x68c 0x738 0x3 0x1 +#define MX53_PAD_SD2_CMD__CSPI_MOSI				0x300 0x68c 0x788 0x5 0x3 +#define MX53_PAD_SD2_CMD__SCC_RANDOM				0x300 0x68c 0x000 0x7 0x0 +#define MX53_PAD_SD2_DATA3__ESDHC2_DAT3				0x304 0x690 0x000 0x0 0x0 +#define MX53_PAD_SD2_DATA3__GPIO1_12				0x304 0x690 0x000 0x1 0x0 +#define MX53_PAD_SD2_DATA3__KPP_COL_6				0x304 0x690 0x844 0x2 0x1 +#define MX53_PAD_SD2_DATA3__AUDMUX_AUD4_TXC			0x304 0x690 0x740 0x3 0x1 +#define MX53_PAD_SD2_DATA3__CSPI_SS2				0x304 0x690 0x794 0x5 0x3 +#define MX53_PAD_SD2_DATA3__SJC_DONE				0x304 0x690 0x000 0x7 0x0 +#define MX53_PAD_SD2_DATA2__ESDHC2_DAT2				0x308 0x694 0x000 0x0 0x0 +#define MX53_PAD_SD2_DATA2__GPIO1_13				0x308 0x694 0x000 0x1 0x0 +#define MX53_PAD_SD2_DATA2__KPP_ROW_6				0x308 0x694 0x850 0x2 0x1 +#define MX53_PAD_SD2_DATA2__AUDMUX_AUD4_TXD			0x308 0x694 0x734 0x3 0x1 +#define MX53_PAD_SD2_DATA2__CSPI_SS1				0x308 0x694 0x790 0x5 0x3 +#define MX53_PAD_SD2_DATA2__SJC_FAIL				0x308 0x694 0x000 0x7 0x0 +#define MX53_PAD_SD2_DATA1__ESDHC2_DAT1				0x30c 0x698 0x000 0x0 0x0 +#define MX53_PAD_SD2_DATA1__GPIO1_14				0x30c 0x698 0x000 0x1 0x0 +#define MX53_PAD_SD2_DATA1__KPP_COL_7				0x30c 0x698 0x848 0x2 0x1 +#define MX53_PAD_SD2_DATA1__AUDMUX_AUD4_TXFS			0x30c 0x698 0x744 0x3 0x1 +#define MX53_PAD_SD2_DATA1__CSPI_SS0				0x30c 0x698 0x78c 0x5 0x4 +#define MX53_PAD_SD2_DATA1__RTIC_SEC_VIO			0x30c 0x698 0x000 0x7 0x0 +#define MX53_PAD_SD2_DATA0__ESDHC2_DAT0				0x310 0x69c 0x000 0x0 0x0 +#define MX53_PAD_SD2_DATA0__GPIO1_15				0x310 0x69c 0x000 0x1 0x0 +#define MX53_PAD_SD2_DATA0__KPP_ROW_7				0x310 0x69c 0x854 0x2 0x1 +#define MX53_PAD_SD2_DATA0__AUDMUX_AUD4_RXD			0x310 0x69c 0x730 0x3 0x1 +#define MX53_PAD_SD2_DATA0__CSPI_MISO				0x310 0x69c 0x784 0x5 0x3 +#define MX53_PAD_SD2_DATA0__RTIC_DONE_INT			0x310 0x69c 0x000 0x7 0x0 +#define MX53_PAD_GPIO_0__CCM_CLKO				0x314 0x6a4 0x000 0x0 0x0 +#define MX53_PAD_GPIO_0__GPIO1_0				0x314 0x6a4 0x000 0x1 0x0 +#define MX53_PAD_GPIO_0__KPP_COL_5				0x314 0x6a4 0x840 0x2 0x3 +#define MX53_PAD_GPIO_0__CCM_SSI_EXT1_CLK			0x314 0x6a4 0x000 0x3 0x0 +#define MX53_PAD_GPIO_0__EPIT1_EPITO				0x314 0x6a4 0x000 0x4 0x0 +#define MX53_PAD_GPIO_0__SRTC_ALARM_DEB				0x314 0x6a4 0x000 0x5 0x0 +#define MX53_PAD_GPIO_0__USBOH3_USBH1_PWR			0x314 0x6a4 0x000 0x6 0x0 +#define MX53_PAD_GPIO_0__CSU_TD					0x314 0x6a4 0x000 0x7 0x0 +#define MX53_PAD_GPIO_1__ESAI1_SCKR				0x318 0x6a8 0x7dc 0x0 0x1 +#define MX53_PAD_GPIO_1__GPIO1_1				0x318 0x6a8 0x000 0x1 0x0 +#define MX53_PAD_GPIO_1__KPP_ROW_5				0x318 0x6a8 0x84c 0x2 0x2 +#define MX53_PAD_GPIO_1__CCM_SSI_EXT2_CLK			0x318 0x6a8 0x000 0x3 0x0 +#define MX53_PAD_GPIO_1__PWM2_PWMO				0x318 0x6a8 0x000 0x4 0x0 +#define MX53_PAD_GPIO_1__WDOG2_WDOG_B				0x318 0x6a8 0x000 0x5 0x0 +#define MX53_PAD_GPIO_1__ESDHC1_CD				0x318 0x6a8 0x000 0x6 0x0 +#define MX53_PAD_GPIO_1__SRC_TESTER_ACK				0x318 0x6a8 0x000 0x7 0x0 +#define MX53_PAD_GPIO_9__ESAI1_FSR				0x31c 0x6ac 0x7cc 0x0 0x1 +#define MX53_PAD_GPIO_9__GPIO1_9				0x31c 0x6ac 0x000 0x1 0x0 +#define MX53_PAD_GPIO_9__KPP_COL_6				0x31c 0x6ac 0x844 0x2 0x2 +#define MX53_PAD_GPIO_9__CCM_REF_EN_B				0x31c 0x6ac 0x000 0x3 0x0 +#define MX53_PAD_GPIO_9__PWM1_PWMO				0x31c 0x6ac 0x000 0x4 0x0 +#define MX53_PAD_GPIO_9__WDOG1_WDOG_B				0x31c 0x6ac 0x000 0x5 0x0 +#define MX53_PAD_GPIO_9__ESDHC1_WP				0x31c 0x6ac 0x7fc 0x6 0x1 +#define MX53_PAD_GPIO_9__SCC_FAIL_STATE				0x31c 0x6ac 0x000 0x7 0x0 +#define MX53_PAD_GPIO_3__ESAI1_HCKR				0x320 0x6b0 0x7d4 0x0 0x1 +#define MX53_PAD_GPIO_3__GPIO1_3				0x320 0x6b0 0x000 0x1 0x0 +#define MX53_PAD_GPIO_3__I2C3_SCL				0x320 0x6b0 0x824 0x2 0x1 +#define MX53_PAD_GPIO_3__DPLLIP1_TOG_EN				0x320 0x6b0 0x000 0x3 0x0 +#define MX53_PAD_GPIO_3__CCM_CLKO2				0x320 0x6b0 0x000 0x4 0x0 +#define MX53_PAD_GPIO_3__OBSERVE_MUX_OBSRV_INT_OUT0		0x320 0x6b0 0x000 0x5 0x0 +#define MX53_PAD_GPIO_3__USBOH3_USBH1_OC			0x320 0x6b0 0x8a0 0x6 0x1 +#define MX53_PAD_GPIO_3__MLB_MLBCLK				0x320 0x6b0 0x858 0x7 0x2 +#define MX53_PAD_GPIO_6__ESAI1_SCKT				0x324 0x6b4 0x7e0 0x0 0x1 +#define MX53_PAD_GPIO_6__GPIO1_6				0x324 0x6b4 0x000 0x1 0x0 +#define MX53_PAD_GPIO_6__I2C3_SDA				0x324 0x6b4 0x828 0x2 0x1 +#define MX53_PAD_GPIO_6__CCM_CCM_OUT_0				0x324 0x6b4 0x000 0x3 0x0 +#define MX53_PAD_GPIO_6__CSU_CSU_INT_DEB			0x324 0x6b4 0x000 0x4 0x0 +#define MX53_PAD_GPIO_6__OBSERVE_MUX_OBSRV_INT_OUT1		0x324 0x6b4 0x000 0x5 0x0 +#define MX53_PAD_GPIO_6__ESDHC2_LCTL				0x324 0x6b4 0x000 0x6 0x0 +#define MX53_PAD_GPIO_6__MLB_MLBSIG				0x324 0x6b4 0x860 0x7 0x2 +#define MX53_PAD_GPIO_2__ESAI1_FST				0x328 0x6b8 0x7d0 0x0 0x1 +#define MX53_PAD_GPIO_2__GPIO1_2				0x328 0x6b8 0x000 0x1 0x0 +#define MX53_PAD_GPIO_2__KPP_ROW_6				0x328 0x6b8 0x850 0x2 0x2 +#define MX53_PAD_GPIO_2__CCM_CCM_OUT_1				0x328 0x6b8 0x000 0x3 0x0 +#define MX53_PAD_GPIO_2__CSU_CSU_ALARM_AUT_0			0x328 0x6b8 0x000 0x4 0x0 +#define MX53_PAD_GPIO_2__OBSERVE_MUX_OBSRV_INT_OUT2		0x328 0x6b8 0x000 0x5 0x0 +#define MX53_PAD_GPIO_2__ESDHC2_WP				0x328 0x6b8 0x000 0x6 0x0 +#define MX53_PAD_GPIO_2__MLB_MLBDAT				0x328 0x6b8 0x85c 0x7 0x2 +#define MX53_PAD_GPIO_4__ESAI1_HCKT				0x32c 0x6bc 0x7d8 0x0 0x1 +#define MX53_PAD_GPIO_4__GPIO1_4				0x32c 0x6bc 0x000 0x1 0x0 +#define MX53_PAD_GPIO_4__KPP_COL_7				0x32c 0x6bc 0x848 0x2 0x2 +#define MX53_PAD_GPIO_4__CCM_CCM_OUT_2				0x32c 0x6bc 0x000 0x3 0x0 +#define MX53_PAD_GPIO_4__CSU_CSU_ALARM_AUT_1			0x32c 0x6bc 0x000 0x4 0x0 +#define MX53_PAD_GPIO_4__OBSERVE_MUX_OBSRV_INT_OUT3		0x32c 0x6bc 0x000 0x5 0x0 +#define MX53_PAD_GPIO_4__ESDHC2_CD				0x32c 0x6bc 0x000 0x6 0x0 +#define MX53_PAD_GPIO_4__SCC_SEC_STATE				0x32c 0x6bc 0x000 0x7 0x0 +#define MX53_PAD_GPIO_5__ESAI1_TX2_RX3				0x330 0x6c0 0x7ec 0x0 0x1 +#define MX53_PAD_GPIO_5__GPIO1_5				0x330 0x6c0 0x000 0x1 0x0 +#define MX53_PAD_GPIO_5__KPP_ROW_7				0x330 0x6c0 0x854 0x2 0x2 +#define MX53_PAD_GPIO_5__CCM_CLKO				0x330 0x6c0 0x000 0x3 0x0 +#define MX53_PAD_GPIO_5__CSU_CSU_ALARM_AUT_2			0x330 0x6c0 0x000 0x4 0x0 +#define MX53_PAD_GPIO_5__OBSERVE_MUX_OBSRV_INT_OUT4		0x330 0x6c0 0x000 0x5 0x0 +#define MX53_PAD_GPIO_5__I2C3_SCL				0x330 0x6c0 0x824 0x6 0x2 +#define MX53_PAD_GPIO_5__CCM_PLL1_BYP				0x330 0x6c0 0x770 0x7 0x1 +#define MX53_PAD_GPIO_7__ESAI1_TX4_RX1				0x334 0x6c4 0x7f4 0x0 0x1 +#define MX53_PAD_GPIO_7__GPIO1_7				0x334 0x6c4 0x000 0x1 0x0 +#define MX53_PAD_GPIO_7__EPIT1_EPITO				0x334 0x6c4 0x000 0x2 0x0 +#define MX53_PAD_GPIO_7__CAN1_TXCAN				0x334 0x6c4 0x000 0x3 0x0 +#define MX53_PAD_GPIO_7__UART2_TXD_MUX				0x334 0x6c4 0x000 0x4 0x0 +#define MX53_PAD_GPIO_7__FIRI_RXD				0x334 0x6c4 0x80c 0x5 0x1 +#define MX53_PAD_GPIO_7__SPDIF_PLOCK				0x334 0x6c4 0x000 0x6 0x0 +#define MX53_PAD_GPIO_7__CCM_PLL2_BYP				0x334 0x6c4 0x774 0x7 0x1 +#define MX53_PAD_GPIO_8__ESAI1_TX5_RX0				0x338 0x6c8 0x7f8 0x0 0x1 +#define MX53_PAD_GPIO_8__GPIO1_8				0x338 0x6c8 0x000 0x1 0x0 +#define MX53_PAD_GPIO_8__EPIT2_EPITO				0x338 0x6c8 0x000 0x2 0x0 +#define MX53_PAD_GPIO_8__CAN1_RXCAN				0x338 0x6c8 0x760 0x3 0x2 +#define MX53_PAD_GPIO_8__UART2_RXD_MUX				0x338 0x6c8 0x880 0x4 0x5 +#define MX53_PAD_GPIO_8__FIRI_TXD				0x338 0x6c8 0x000 0x5 0x0 +#define MX53_PAD_GPIO_8__SPDIF_SRCLK				0x338 0x6c8 0x000 0x6 0x0 +#define MX53_PAD_GPIO_8__CCM_PLL3_BYP				0x338 0x6c8 0x778 0x7 0x1 +#define MX53_PAD_GPIO_16__ESAI1_TX3_RX2				0x33c 0x6cc 0x7f0 0x0 0x1 +#define MX53_PAD_GPIO_16__GPIO7_11				0x33c 0x6cc 0x000 0x1 0x0 +#define MX53_PAD_GPIO_16__TZIC_PWRFAIL_INT			0x33c 0x6cc 0x000 0x2 0x0 +#define MX53_PAD_GPIO_16__RTC_CE_RTC_EXT_TRIG1			0x33c 0x6cc 0x000 0x4 0x0 +#define MX53_PAD_GPIO_16__SPDIF_IN1				0x33c 0x6cc 0x870 0x5 0x1 +#define MX53_PAD_GPIO_16__I2C3_SDA				0x33c 0x6cc 0x828 0x6 0x2 +#define MX53_PAD_GPIO_16__SJC_DE_B				0x33c 0x6cc 0x000 0x7 0x0 +#define MX53_PAD_GPIO_17__ESAI1_TX0				0x340 0x6d0 0x7e4 0x0 0x1 +#define MX53_PAD_GPIO_17__GPIO7_12				0x340 0x6d0 0x000 0x1 0x0 +#define MX53_PAD_GPIO_17__SDMA_EXT_EVENT_0			0x340 0x6d0 0x868 0x2 0x1 +#define MX53_PAD_GPIO_17__GPC_PMIC_RDY				0x340 0x6d0 0x810 0x3 0x1 +#define MX53_PAD_GPIO_17__RTC_CE_RTC_FSV_TRIG			0x340 0x6d0 0x000 0x4 0x0 +#define MX53_PAD_GPIO_17__SPDIF_OUT1				0x340 0x6d0 0x000 0x5 0x0 +#define MX53_PAD_GPIO_17__IPU_SNOOP2				0x340 0x6d0 0x000 0x6 0x0 +#define MX53_PAD_GPIO_17__SJC_JTAG_ACT				0x340 0x6d0 0x000 0x7 0x0 +#define MX53_PAD_GPIO_18__ESAI1_TX1				0x344 0x6d4 0x7e8 0x0 0x1 +#define MX53_PAD_GPIO_18__GPIO7_13				0x344 0x6d4 0x000 0x1 0x0 +#define MX53_PAD_GPIO_18__SDMA_EXT_EVENT_1			0x344 0x6d4 0x86c 0x2 0x1 +#define MX53_PAD_GPIO_18__OWIRE_LINE				0x344 0x6d4 0x864 0x3 0x1 +#define MX53_PAD_GPIO_18__RTC_CE_RTC_ALARM2_TRIG		0x344 0x6d4 0x000 0x4 0x0 +#define MX53_PAD_GPIO_18__CCM_ASRC_EXT_CLK			0x344 0x6d4 0x768 0x5 0x1 +#define MX53_PAD_GPIO_18__ESDHC1_LCTL				0x344 0x6d4 0x000 0x6 0x0 +#define MX53_PAD_GPIO_18__SRC_SYSTEM_RST			0x344 0x6d4 0x000 0x7 0x0 + +#endif /* __DTS_IMX53_PINFUNC_H */ diff --git a/arch/arm/boot/dts/imx53-qsb.dts b/arch/arm/boot/dts/imx53-qsb.dts index 05cc5620436..8f0e9ae0e3e 100644 --- a/arch/arm/boot/dts/imx53-qsb.dts +++ b/arch/arm/boot/dts/imx53-qsb.dts @@ -11,7 +11,7 @@   */  /dts-v1/; -/include/ "imx53.dtsi" +#include "imx53.dtsi"  / {  	model = "Freescale i.MX53 Quick Start Board"; @@ -110,21 +110,21 @@  	hog {  		pinctrl_hog: hoggrp {  			fsl,pins = < -				1071 0x80000000	/* MX53_PAD_GPIO_0__CCM_SSI_EXT1_CLK */ -				1141 0x80000000	/* MX53_PAD_GPIO_8__GPIO1_8 */ -				982  0x80000000	/* MX53_PAD_PATA_DATA14__GPIO2_14 */ -				989  0x80000000	/* MX53_PAD_PATA_DATA15__GPIO2_15 */ -				693  0x80000000	/* MX53_PAD_EIM_DA11__GPIO3_11 */ -				697  0x80000000	/* MX53_PAD_EIM_DA12__GPIO3_12 */ -				701  0x80000000	/* MX53_PAD_EIM_DA13__GPIO3_13 */ -				868  0x80000000	/* MX53_PAD_PATA_DA_0__GPIO7_6 */ -				1149 0x80000000 /* MX53_PAD_GPIO_16__GPIO7_11 */ +				MX53_PAD_GPIO_0__CCM_SSI_EXT1_CLK 0x80000000 +				MX53_PAD_GPIO_8__GPIO1_8          0x80000000 +				MX53_PAD_PATA_DATA14__GPIO2_14    0x80000000 +				MX53_PAD_PATA_DATA15__GPIO2_15    0x80000000 +				MX53_PAD_EIM_DA11__GPIO3_11       0x80000000 +				MX53_PAD_EIM_DA12__GPIO3_12       0x80000000 +				MX53_PAD_EIM_DA13__GPIO3_13       0x80000000 +				MX53_PAD_PATA_DA_0__GPIO7_6       0x80000000 +				MX53_PAD_GPIO_16__GPIO7_11        0x80000000  			>;  		};  		led_pin_gpio7_7: led_gpio7_7@0 {  			fsl,pins = < -				873  0x80000000	/* MX53_PAD_PATA_DA_1__GPIO7_7 */ +				MX53_PAD_PATA_DA_1__GPIO7_7 0x80000000  			>;  		};  	}; diff --git a/arch/arm/boot/dts/imx53-smd.dts b/arch/arm/boot/dts/imx53-smd.dts index 995554c324b..a9b6e10de0a 100644 --- a/arch/arm/boot/dts/imx53-smd.dts +++ b/arch/arm/boot/dts/imx53-smd.dts @@ -11,7 +11,7 @@   */  /dts-v1/; -/include/ "imx53.dtsi" +#include "imx53.dtsi"  / {  	model = "Freescale i.MX53 Smart Mobile Reference Design Board"; @@ -107,13 +107,13 @@  	hog {  		pinctrl_hog: hoggrp {  			fsl,pins = < -				982  0x80000000	/* MX53_PAD_PATA_DATA14__GPIO2_14 */ -				989  0x80000000	/* MX53_PAD_PATA_DATA15__GPIO2_15 */ -				424  0x80000000	/* MX53_PAD_EIM_EB2__GPIO2_30 */ -				701  0x80000000	/* MX53_PAD_EIM_DA13__GPIO3_13 */ -				449  0x80000000	/* MX53_PAD_EIM_D19__GPIO3_19 */ -				43   0x80000000	/* MX53_PAD_KEY_ROW2__GPIO4_11 */ -				868  0x80000000	/* MX53_PAD_PATA_DA_0__GPIO7_6 */ +				MX53_PAD_PATA_DATA14__GPIO2_14 0x80000000 +				MX53_PAD_PATA_DATA15__GPIO2_15 0x80000000 +				MX53_PAD_EIM_EB2__GPIO2_30     0x80000000 +				MX53_PAD_EIM_DA13__GPIO3_13    0x80000000 +				MX53_PAD_EIM_D19__GPIO3_19     0x80000000 +				MX53_PAD_KEY_ROW2__GPIO4_11    0x80000000 +				MX53_PAD_PATA_DA_0__GPIO7_6    0x80000000  			>;  		};  	}; diff --git a/arch/arm/boot/dts/imx53-tqma53.dtsi b/arch/arm/boot/dts/imx53-tqma53.dtsi index 8278ec5ec22..38bed3ed7c1 100644 --- a/arch/arm/boot/dts/imx53-tqma53.dtsi +++ b/arch/arm/boot/dts/imx53-tqma53.dtsi @@ -10,7 +10,7 @@   * http://www.gnu.org/copyleft/gpl.html   */ -/include/ "imx53.dtsi" +#include "imx53.dtsi"  / {  	model = "TQ TQMa53"; @@ -72,11 +72,11 @@  	i2s {  		pinctrl_i2s_1: i2s-grp1 {  			fsl,pins = < -				 1   0x10000	/* I2S_MCLK */ -				 10  0x10000	/* I2S_SCLK */ -				 17  0x10000	/* I2S_DOUT */ -				 23  0x10000	/* I2S_LRCLK*/ -				 30  0x10000	/* I2S_DIN  */ +				 MX53_PAD_GPIO_19__GPIO4_5           0x10000 /* I2S_MCLK */ +				 MX53_PAD_KEY_COL0__AUDMUX_AUD5_TXC  0x10000 /* I2S_SCLK */ +				 MX53_PAD_KEY_ROW0__AUDMUX_AUD5_TXD  0x10000 /* I2S_DOUT */ +				 MX53_PAD_KEY_COL1__AUDMUX_AUD5_TXFS 0x10000 /* I2S_LRCLK */ +				 MX53_PAD_KEY_ROW1__AUDMUX_AUD5_RXD  0x10000 /* I2S_DIN */  			>;  		};  	}; @@ -84,16 +84,16 @@  	hog {  		pinctrl_hog: hoggrp {  			fsl,pins = < -				 610  0x10000	/* MX53_PAD_EIM_CS1__IPU_DI1_PIN6 (VSYNC)*/ -				 711  0x10000	/* MX53_PAD_EIM_DA15__IPU_DI1_PIN4 (HSYNC)*/ -				 873  0x10000	/* MX53_PAD_PATA_DA_1__GPIO7_7 (LCD_BLT_EN)*/ -				 878  0x10000	/* MX53_PAD_PATA_DA_2__GPIO7_8 (LCD_RESET)*/ -				 922  0x10000	/* MX53_PAD_PATA_DATA5__GPIO2_5 (LCD_POWER)*/ -				 928  0x10000	/* MX53_PAD_PATA_DATA6__GPIO2_6 (PMIC_INT)*/ -				 982  0x10000	/* MX53_PAD_PATA_DATA14__GPIO2_14 (CSI_RST)*/ -				 989  0x10000	/* MX53_PAD_PATA_DATA15__GPIO2_15 (CSI_PWDN)*/ -				 1069 0x10000	/* MX53_PAD_GPIO_0__GPIO1_0 (SYSTEM_DOWN)*/ -				 1093 0x10000	/* MX53_PAD_GPIO_3__GPIO1_3 */ +				 MX53_PAD_EIM_CS1__IPU_DI1_PIN6  0x10000 /* VSYNC */ +				 MX53_PAD_EIM_DA15__IPU_DI1_PIN4 0x10000 /* HSYNC */ +				 MX53_PAD_PATA_DA_1__GPIO7_7     0x10000 /* LCD_BLT_EN */ +				 MX53_PAD_PATA_DA_2__GPIO7_8     0x10000 /* LCD_RESET */ +				 MX53_PAD_PATA_DATA5__GPIO2_5    0x10000 /* LCD_POWER */ +				 MX53_PAD_PATA_DATA6__GPIO2_6    0x10000 /* PMIC_INT */ +				 MX53_PAD_PATA_DATA14__GPIO2_14  0x10000 /* CSI_RST */ +				 MX53_PAD_PATA_DATA15__GPIO2_15  0x10000 /* CSI_PWDN */ +				 MX53_PAD_GPIO_0__GPIO1_0        0x10000 /* SYSTEM_DOWN */ +				 MX53_PAD_GPIO_3__GPIO1_3        0x10000  			>;  		};  	}; diff --git a/arch/arm/boot/dts/imx53.dtsi b/arch/arm/boot/dts/imx53.dtsi index d05aa215c7f..845982eaac2 100644 --- a/arch/arm/boot/dts/imx53.dtsi +++ b/arch/arm/boot/dts/imx53.dtsi @@ -10,7 +10,8 @@   * http://www.gnu.org/copyleft/gpl.html   */ -/include/ "skeleton.dtsi" +#include "skeleton.dtsi" +#include "imx53-pinfunc.h"  / {  	aliases { @@ -72,6 +73,9 @@  			compatible = "fsl,imx53-ipu";  			reg = <0x18000000 0x080000000>;  			interrupts = <11 10>; +			clocks = <&clks 59>, <&clks 110>, <&clks 61>; +			clock-names = "bus", "di0", "di1"; +			resets = <&src 2>;  		};  		aips@50000000 { /* AIPS1 */ @@ -242,6 +246,14 @@  				status = "disabled";  			}; +			gpt: timer@53fa0000 { +				compatible = "fsl,imx53-gpt", "fsl,imx31-gpt"; +				reg = <0x53fa0000 0x4000>; +				interrupts = <39>; +				clocks = <&clks 36>, <&clks 41>; +				clock-names = "ipg", "per"; +			}; +  			iomuxc: iomuxc@53fa8000 {  				compatible = "fsl,imx53-iomuxc";  				reg = <0x53fa8000 0x4000>; @@ -249,10 +261,10 @@  				audmux {  					pinctrl_audmux_1: audmuxgrp-1 {  						fsl,pins = < -							10 0x80000000	/* MX53_PAD_KEY_COL0__AUDMUX_AUD5_TXC */ -							17 0x80000000	/* MX53_PAD_KEY_ROW0__AUDMUX_AUD5_TXD */ -							23 0x80000000	/* MX53_PAD_KEY_COL1__AUDMUX_AUD5_TXFS */ -							30 0x80000000	/* MX53_PAD_KEY_ROW1__AUDMUX_AUD5_RXD */ +							MX53_PAD_KEY_COL0__AUDMUX_AUD5_TXC  0x80000000 +							MX53_PAD_KEY_ROW0__AUDMUX_AUD5_TXD  0x80000000 +							MX53_PAD_KEY_COL1__AUDMUX_AUD5_TXFS 0x80000000 +							MX53_PAD_KEY_ROW1__AUDMUX_AUD5_RXD  0x80000000  						>;  					};  				}; @@ -260,16 +272,16 @@  				fec {  					pinctrl_fec_1: fecgrp-1 {  						fsl,pins = < -							820 0x80000000	/* MX53_PAD_FEC_MDC__FEC_MDC */ -							779 0x80000000	/* MX53_PAD_FEC_MDIO__FEC_MDIO */ -							786 0x80000000	/* MX53_PAD_FEC_REF_CLK__FEC_TX_CLK */ -							791 0x80000000	/* MX53_PAD_FEC_RX_ER__FEC_RX_ER */ -							796 0x80000000	/* MX53_PAD_FEC_CRS_DV__FEC_RX_DV */ -							799 0x80000000	/* MX53_PAD_FEC_RXD1__FEC_RDATA_1 */ -							804 0x80000000	/* MX53_PAD_FEC_RXD0__FEC_RDATA_0 */ -							808 0x80000000	/* MX53_PAD_FEC_TX_EN__FEC_TX_EN */ -							811 0x80000000	/* MX53_PAD_FEC_TXD1__FEC_TDATA_1 */ -							816 0x80000000	/* MX53_PAD_FEC_TXD0__FEC_TDATA_0 */ +							MX53_PAD_FEC_MDC__FEC_MDC	 0x80000000 +							MX53_PAD_FEC_MDIO__FEC_MDIO	 0x80000000 +							MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 0x80000000 +							MX53_PAD_FEC_RX_ER__FEC_RX_ER    0x80000000 +							MX53_PAD_FEC_CRS_DV__FEC_RX_DV   0x80000000 +							MX53_PAD_FEC_RXD1__FEC_RDATA_1   0x80000000 +							MX53_PAD_FEC_RXD0__FEC_RDATA_0   0x80000000 +							MX53_PAD_FEC_TX_EN__FEC_TX_EN    0x80000000 +							MX53_PAD_FEC_TXD1__FEC_TDATA_1   0x80000000 +							MX53_PAD_FEC_TXD0__FEC_TDATA_0   0x80000000  						>;  					};  				}; @@ -277,27 +289,27 @@  				csi {  					pinctrl_csi_1: csigrp-1 {  						fsl,pins = < -							286 0x1d5	/* MX53_PAD_CSI0_DATA_EN__IPU_CSI0_DATA_EN */ -							291 0x1d5	/* MX53_PAD_CSI0_VSYNC__IPU_CSI0_VSYNC */ -							280 0x1d5	/* MX53_PAD_CSI0_MCLK__IPU_CSI0_HSYNC */ -							276 0x1d5	/* MX53_PAD_CSI0_PIXCLK__IPU_CSI0_PIXCLK */ -							409 0x1d5	/* MX53_PAD_CSI0_DAT19__IPU_CSI0_D_19 */ -							402 0x1d5	/* MX53_PAD_CSI0_DAT18__IPU_CSI0_D_18 */ -							395 0x1d5	/* MX53_PAD_CSI0_DAT17__IPU_CSI0_D_17 */ -							388 0x1d5	/* MX53_PAD_CSI0_DAT16__IPU_CSI0_D_16 */ -							381 0x1d5	/* MX53_PAD_CSI0_DAT15__IPU_CSI0_D_15 */ -							374 0x1d5	/* MX53_PAD_CSI0_DAT14__IPU_CSI0_D_14 */ -							367 0x1d5	/* MX53_PAD_CSI0_DAT13__IPU_CSI0_D_13 */ -							360 0x1d5	/* MX53_PAD_CSI0_DAT12__IPU_CSI0_D_12 */ -							352 0x1d5	/* MX53_PAD_CSI0_DAT11__IPU_CSI0_D_11 */ -							344 0x1d5	/* MX53_PAD_CSI0_DAT10__IPU_CSI0_D_10 */ -							336 0x1d5	/* MX53_PAD_CSI0_DAT9__IPU_CSI0_D_9 */ -							328 0x1d5	/* MX53_PAD_CSI0_DAT8__IPU_CSI0_D_8 */ -							320 0x1d5	/* MX53_PAD_CSI0_DAT7__IPU_CSI0_D_7 */ -							312 0x1d5	/* MX53_PAD_CSI0_DAT6__IPU_CSI0_D_6 */ -							304 0x1d5	/* MX53_PAD_CSI0_DAT5__IPU_CSI0_D_5 */ -							296 0x1d5	/* MX53_PAD_CSI0_DAT4__IPU_CSI0_D_4 */ -							276 0x1d5	/* MX53_PAD_CSI0_PIXCLK__IPU_CSI0_PIXCLK */ +							MX53_PAD_CSI0_DATA_EN__IPU_CSI0_DATA_EN 0x1d5 +							MX53_PAD_CSI0_VSYNC__IPU_CSI0_VSYNC     0x1d5 +							MX53_PAD_CSI0_MCLK__IPU_CSI0_HSYNC      0x1d5 +							MX53_PAD_CSI0_PIXCLK__IPU_CSI0_PIXCLK   0x1d5 +							MX53_PAD_CSI0_DAT19__IPU_CSI0_D_19      0x1d5 +							MX53_PAD_CSI0_DAT18__IPU_CSI0_D_18      0x1d5 +							MX53_PAD_CSI0_DAT17__IPU_CSI0_D_17      0x1d5 +							MX53_PAD_CSI0_DAT16__IPU_CSI0_D_16      0x1d5 +							MX53_PAD_CSI0_DAT15__IPU_CSI0_D_15      0x1d5 +							MX53_PAD_CSI0_DAT14__IPU_CSI0_D_14      0x1d5 +							MX53_PAD_CSI0_DAT13__IPU_CSI0_D_13      0x1d5 +							MX53_PAD_CSI0_DAT12__IPU_CSI0_D_12      0x1d5 +							MX53_PAD_CSI0_DAT11__IPU_CSI0_D_11      0x1d5 +							MX53_PAD_CSI0_DAT10__IPU_CSI0_D_10      0x1d5 +							MX53_PAD_CSI0_DAT9__IPU_CSI0_D_9	0x1d5 +							MX53_PAD_CSI0_DAT8__IPU_CSI0_D_8	0x1d5 +							MX53_PAD_CSI0_DAT7__IPU_CSI0_D_7	0x1d5 +							MX53_PAD_CSI0_DAT6__IPU_CSI0_D_6	0x1d5 +							MX53_PAD_CSI0_DAT5__IPU_CSI0_D_5	0x1d5 +							MX53_PAD_CSI0_DAT4__IPU_CSI0_D_4	0x1d5 +							MX53_PAD_CSI0_PIXCLK__IPU_CSI0_PIXCLK   0x1d5  						>;  					};  				}; @@ -305,9 +317,9 @@  				cspi {  					pinctrl_cspi_1: cspigrp-1 {  						fsl,pins = < -							998  0x1d5	/* MX53_PAD_SD1_DATA0__CSPI_MISO */ -							1008 0x1d5	/* MX53_PAD_SD1_CMD__CSPI_MOSI */ -							1022 0x1d5	/* MX53_PAD_SD1_CLK__CSPI_SCLK */ +							MX53_PAD_SD1_DATA0__CSPI_MISO 0x1d5 +							MX53_PAD_SD1_CMD__CSPI_MOSI   0x1d5 +							MX53_PAD_SD1_CLK__CSPI_SCLK   0x1d5  						>;  					};  				}; @@ -315,9 +327,9 @@  				ecspi1 {  					pinctrl_ecspi1_1: ecspi1grp-1 {  						fsl,pins = < -							433 0x80000000	/* MX53_PAD_EIM_D16__ECSPI1_SCLK */ -							439 0x80000000	/* MX53_PAD_EIM_D17__ECSPI1_MISO */ -							445 0x80000000	/* MX53_PAD_EIM_D18__ECSPI1_MOSI */ +							MX53_PAD_EIM_D16__ECSPI1_SCLK 0x80000000 +							MX53_PAD_EIM_D17__ECSPI1_MISO 0x80000000 +							MX53_PAD_EIM_D18__ECSPI1_MOSI 0x80000000  						>;  					};  				}; @@ -325,27 +337,27 @@  				esdhc1 {  					pinctrl_esdhc1_1: esdhc1grp-1 {  						fsl,pins = < -							995  0x1d5	/* MX53_PAD_SD1_DATA0__ESDHC1_DAT0 */ -							1000 0x1d5	/* MX53_PAD_SD1_DATA1__ESDHC1_DAT1 */ -							1010 0x1d5	/* MX53_PAD_SD1_DATA2__ESDHC1_DAT2 */ -							1024 0x1d5	/* MX53_PAD_SD1_DATA3__ESDHC1_DAT3 */ -							1005 0x1d5	/* MX53_PAD_SD1_CMD__ESDHC1_CMD */ -							1018 0x1d5	/* MX53_PAD_SD1_CLK__ESDHC1_CLK */ +							MX53_PAD_SD1_DATA0__ESDHC1_DAT0 0x1d5 +							MX53_PAD_SD1_DATA1__ESDHC1_DAT1 0x1d5 +							MX53_PAD_SD1_DATA2__ESDHC1_DAT2 0x1d5 +							MX53_PAD_SD1_DATA3__ESDHC1_DAT3 0x1d5 +							MX53_PAD_SD1_CMD__ESDHC1_CMD	0x1d5 +							MX53_PAD_SD1_CLK__ESDHC1_CLK	0x1d5  						>;  					};  					pinctrl_esdhc1_2: esdhc1grp-2 {  						fsl,pins = < -							995  0x1d5	/* MX53_PAD_SD1_DATA0__ESDHC1_DAT0 */ -							1000 0x1d5	/* MX53_PAD_SD1_DATA1__ESDHC1_DAT1 */ -							1010 0x1d5	/* MX53_PAD_SD1_DATA2__ESDHC1_DAT2 */ -							1024 0x1d5	/* MX53_PAD_SD1_DATA3__ESDHC1_DAT3 */ -							941  0x1d5	/* MX53_PAD_PATA_DATA8__ESDHC1_DAT4 */ -							948  0x1d5	/* MX53_PAD_PATA_DATA9__ESDHC1_DAT5 */ -							955  0x1d5	/* MX53_PAD_PATA_DATA10__ESDHC1_DAT6 */ -							962  0x1d5	/* MX53_PAD_PATA_DATA11__ESDHC1_DAT7 */ -							1005 0x1d5	/* MX53_PAD_SD1_CMD__ESDHC1_CMD */ -							1018 0x1d5	/* MX53_PAD_SD1_CLK__ESDHC1_CLK */ +							MX53_PAD_SD1_DATA0__ESDHC1_DAT0   0x1d5 +							MX53_PAD_SD1_DATA1__ESDHC1_DAT1   0x1d5 +							MX53_PAD_SD1_DATA2__ESDHC1_DAT2   0x1d5 +							MX53_PAD_SD1_DATA3__ESDHC1_DAT3   0x1d5 +							MX53_PAD_PATA_DATA8__ESDHC1_DAT4  0x1d5 +							MX53_PAD_PATA_DATA9__ESDHC1_DAT5  0x1d5 +							MX53_PAD_PATA_DATA10__ESDHC1_DAT6 0x1d5 +							MX53_PAD_PATA_DATA11__ESDHC1_DAT7 0x1d5 +							MX53_PAD_SD1_CMD__ESDHC1_CMD	  0x1d5 +							MX53_PAD_SD1_CLK__ESDHC1_CLK	  0x1d5  						>;  					};  				}; @@ -353,12 +365,12 @@  				esdhc2 {  					pinctrl_esdhc2_1: esdhc2grp-1 {  						fsl,pins = < -							1038 0x1d5	/* MX53_PAD_SD2_CMD__ESDHC2_CMD */ -							1032 0x1d5	/* MX53_PAD_SD2_CLK__ESDHC2_CLK */ -							1062 0x1d5	/* MX53_PAD_SD2_DATA0__ESDHC2_DAT0 */ -							1056 0x1d5	/* MX53_PAD_SD2_DATA1__ESDHC2_DAT1 */ -							1050 0x1d5	/* MX53_PAD_SD2_DATA2__ESDHC2_DAT2 */ -							1044 0x1d5	/* MX53_PAD_SD2_DATA3__ESDHC2_DAT3 */ +							MX53_PAD_SD2_CMD__ESDHC2_CMD	0x1d5 +							MX53_PAD_SD2_CLK__ESDHC2_CLK	0x1d5 +							MX53_PAD_SD2_DATA0__ESDHC2_DAT0 0x1d5 +							MX53_PAD_SD2_DATA1__ESDHC2_DAT1 0x1d5 +							MX53_PAD_SD2_DATA2__ESDHC2_DAT2 0x1d5 +							MX53_PAD_SD2_DATA3__ESDHC2_DAT3 0x1d5  						>;  					};  				}; @@ -366,16 +378,16 @@  				esdhc3 {  					pinctrl_esdhc3_1: esdhc3grp-1 {  						fsl,pins = < -							943 0x1d5	/* MX53_PAD_PATA_DATA8__ESDHC3_DAT0 */ -							950 0x1d5	/* MX53_PAD_PATA_DATA9__ESDHC3_DAT1 */ -							957 0x1d5	/* MX53_PAD_PATA_DATA10__ESDHC3_DAT2 */ -							964 0x1d5	/* MX53_PAD_PATA_DATA11__ESDHC3_DAT3 */ -							893 0x1d5	/* MX53_PAD_PATA_DATA0__ESDHC3_DAT4 */ -							900 0x1d5	/* MX53_PAD_PATA_DATA1__ESDHC3_DAT5 */ -							906 0x1d5	/* MX53_PAD_PATA_DATA2__ESDHC3_DAT6 */ -							912 0x1d5	/* MX53_PAD_PATA_DATA3__ESDHC3_DAT7 */ -							857 0x1d5	/* MX53_PAD_PATA_RESET_B__ESDHC3_CMD */ -							863 0x1d5	/* MX53_PAD_PATA_IORDY__ESDHC3_CLK */ +							MX53_PAD_PATA_DATA8__ESDHC3_DAT0  0x1d5 +							MX53_PAD_PATA_DATA9__ESDHC3_DAT1  0x1d5 +							MX53_PAD_PATA_DATA10__ESDHC3_DAT2 0x1d5 +							MX53_PAD_PATA_DATA11__ESDHC3_DAT3 0x1d5 +							MX53_PAD_PATA_DATA0__ESDHC3_DAT4  0x1d5 +							MX53_PAD_PATA_DATA1__ESDHC3_DAT5  0x1d5 +							MX53_PAD_PATA_DATA2__ESDHC3_DAT6  0x1d5 +							MX53_PAD_PATA_DATA3__ESDHC3_DAT7  0x1d5 +							MX53_PAD_PATA_RESET_B__ESDHC3_CMD 0x1d5 +							MX53_PAD_PATA_IORDY__ESDHC3_CLK   0x1d5  						>;  					};  				}; @@ -383,15 +395,15 @@  				can1 {  					pinctrl_can1_1: can1grp-1 {  						fsl,pins = < -							847 0x80000000  /* MX53_PAD_PATA_INTRQ__CAN1_TXCAN */ -							853 0x80000000  /* MX53_PAD_PATA_DIOR__CAN1_RXCAN */ +							MX53_PAD_PATA_INTRQ__CAN1_TXCAN 0x80000000 +							MX53_PAD_PATA_DIOR__CAN1_RXCAN  0x80000000  						>;  					};  					pinctrl_can1_2: can1grp-2 {  						fsl,pins = < -							37  0x80000000  /* MX53_PAD_KEY_COL2__CAN1_TXCAN */ -							44  0x80000000  /* MX53_PAD_KEY_ROW2__CAN1_RXCAN */ +							MX53_PAD_KEY_COL2__CAN1_TXCAN 0x80000000 +							MX53_PAD_KEY_ROW2__CAN1_RXCAN 0x80000000  						>;  					};  				}; @@ -399,8 +411,8 @@  				can2 {  					pinctrl_can2_1: can2grp-1 {  						fsl,pins = < -							67  0x80000000  /* MX53_PAD_KEY_COL4__CAN2_TXCAN */ -							74  0x80000000  /* MX53_PAD_KEY_ROW4__CAN2_RXCAN */ +							MX53_PAD_KEY_COL4__CAN2_TXCAN 0x80000000 +							MX53_PAD_KEY_ROW4__CAN2_RXCAN 0x80000000  						>;  					};  				}; @@ -408,8 +420,8 @@  				i2c1 {  					pinctrl_i2c1_1: i2c1grp-1 {  						fsl,pins = < -							333 0xc0000000	/* MX53_PAD_CSI0_DAT8__I2C1_SDA */ -							341 0xc0000000	/* MX53_PAD_CSI0_DAT9__I2C1_SCL */ +							MX53_PAD_CSI0_DAT8__I2C1_SDA 0xc0000000 +							MX53_PAD_CSI0_DAT9__I2C1_SCL 0xc0000000  						>;  					};  				}; @@ -417,8 +429,8 @@  				i2c2 {  					pinctrl_i2c2_1: i2c2grp-1 {  						fsl,pins = < -							61 0xc0000000	/* MX53_PAD_KEY_ROW3__I2C2_SDA */ -							53 0xc0000000	/* MX53_PAD_KEY_COL3__I2C2_SCL */ +							MX53_PAD_KEY_ROW3__I2C2_SDA 0xc0000000 +							MX53_PAD_KEY_COL3__I2C2_SCL 0xc0000000  						>;  					};  				}; @@ -426,8 +438,8 @@  				i2c3 {  					pinctrl_i2c3_1: i2c3grp-1 {  						fsl,pins = < -							1102 0xc0000000	/* MX53_PAD_GPIO_6__I2C3_SDA */ -							1130 0xc0000000	/* MX53_PAD_GPIO_5__I2C3_SCL */ +							MX53_PAD_GPIO_6__I2C3_SDA 0xc0000000 +							MX53_PAD_GPIO_5__I2C3_SCL 0xc0000000  						>;  					};  				}; @@ -435,7 +447,7 @@  				owire {  					pinctrl_owire_1: owiregrp-1 {  						fsl,pins = < -								1166 0x80000000 /* MX53_PAD_GPIO_18__OWIRE_LINE */ +							MX53_PAD_GPIO_18__OWIRE_LINE 0x80000000  						>;  					};  				}; @@ -443,15 +455,15 @@  				uart1 {  					pinctrl_uart1_1: uart1grp-1 {  						fsl,pins = < -							346 0x1c5	/* MX53_PAD_CSI0_DAT10__UART1_TXD_MUX */ -							354 0x1c5	/* MX53_PAD_CSI0_DAT11__UART1_RXD_MUX */ +							MX53_PAD_CSI0_DAT10__UART1_TXD_MUX 0x1c5 +							MX53_PAD_CSI0_DAT11__UART1_RXD_MUX 0x1c5  						>;  					};  					pinctrl_uart1_2: uart1grp-2 {  						fsl,pins = < -							828 0x1c5	/* MX53_PAD_PATA_DIOW__UART1_TXD_MUX */ -							832 0x1c5	/* MX53_PAD_PATA_DMACK__UART1_RXD_MUX */ +							MX53_PAD_PATA_DIOW__UART1_TXD_MUX  0x1c5 +							MX53_PAD_PATA_DMACK__UART1_RXD_MUX 0x1c5  						>;  					};  				}; @@ -459,8 +471,8 @@  				uart2 {  					pinctrl_uart2_1: uart2grp-1 {  						fsl,pins = < -							841 0x1c5	/* MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX */ -							836 0x1c5	/* MX53_PAD_PATA_DMARQ__UART2_TXD_MUX */ +							MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX 0x1c5 +							MX53_PAD_PATA_DMARQ__UART2_TXD_MUX     0x1c5  						>;  					};  				}; @@ -468,17 +480,17 @@  				uart3 {  					pinctrl_uart3_1: uart3grp-1 {  						fsl,pins = < -							884 0x1c5	/* MX53_PAD_PATA_CS_0__UART3_TXD_MUX */ -							888 0x1c5	/* MX53_PAD_PATA_CS_1__UART3_RXD_MUX */ -							875 0x1c5	/* MX53_PAD_PATA_DA_1__UART3_CTS */ -							880 0x1c5	/* MX53_PAD_PATA_DA_2__UART3_RTS */ +							MX53_PAD_PATA_CS_0__UART3_TXD_MUX 0x1c5 +							MX53_PAD_PATA_CS_1__UART3_RXD_MUX 0x1c5 +							MX53_PAD_PATA_DA_1__UART3_CTS	  0x1c5 +							MX53_PAD_PATA_DA_2__UART3_RTS	  0x1c5  						>;  					};  					pinctrl_uart3_2: uart3grp-2 {  						fsl,pins = < -							884 0x1c5	/* MX53_PAD_PATA_CS_0__UART3_TXD_MUX */ -							888 0x1c5	/* MX53_PAD_PATA_CS_1__UART3_RXD_MUX */ +							MX53_PAD_PATA_CS_0__UART3_TXD_MUX 0x1c5 +							MX53_PAD_PATA_CS_1__UART3_RXD_MUX 0x1c5  						>;  					}; @@ -487,8 +499,8 @@  				uart4 {  					pinctrl_uart4_1: uart4grp-1 {  						fsl,pins = < -							11 0x1c5	/* MX53_PAD_KEY_COL0__UART4_TXD_MUX */ -							18 0x1c5	/* MX53_PAD_KEY_ROW0__UART4_RXD_MUX */ +							MX53_PAD_KEY_COL0__UART4_TXD_MUX 0x1c5 +							MX53_PAD_KEY_ROW0__UART4_RXD_MUX 0x1c5  						>;  					};  				}; @@ -496,14 +508,46 @@  				uart5 {  					pinctrl_uart5_1: uart5grp-1 {  						fsl,pins = < -							24 0x1c5	/* MX53_PAD_KEY_COL1__UART5_TXD_MUX */ -							31 0x1c5	/* MX53_PAD_KEY_ROW1__UART5_RXD_MUX */ +							MX53_PAD_KEY_COL1__UART5_TXD_MUX 0x1c5 +							MX53_PAD_KEY_ROW1__UART5_RXD_MUX 0x1c5  						>;  					};  				};  			}; +			gpr: iomuxc-gpr@53fa8000 { +				compatible = "fsl,imx53-iomuxc-gpr", "syscon"; +				reg = <0x53fa8000 0xc>; +			}; + +			ldb: ldb@53fa8008 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "fsl,imx53-ldb"; +				reg = <0x53fa8008 0x4>; +				gpr = <&gpr>; +				clocks = <&clks 122>, <&clks 120>, +					 <&clks 115>, <&clks 116>, +					 <&clks 123>, <&clks 85>; +				clock-names = "di0_pll", "di1_pll", +					      "di0_sel", "di1_sel", +					      "di0", "di1"; +				status = "disabled"; + +				lvds-channel@0 { +					reg = <0>; +					crtcs = <&ipu 0>; +					status = "disabled"; +				}; + +				lvds-channel@1 { +					reg = <1>; +					crtcs = <&ipu 1>; +					status = "disabled"; +				}; +			}; +  			pwm1: pwm@53fb4000 {  				#pwm-cells = <2>;  				compatible = "fsl,imx53-pwm", "fsl,imx27-pwm"; @@ -558,6 +602,12 @@  				status = "disabled";  			}; +			src: src@53fd0000 { +				compatible = "fsl,imx53-src", "fsl,imx51-src"; +				reg = <0x53fd0000 0x4000>; +				#reset-cells = <1>; +			}; +  			clks: ccm@53fd4000{  				compatible = "fsl,imx53-ccm";  				reg = <0x53fd4000 0x4000>; diff --git a/arch/arm/boot/dts/imx6dl-pinfunc.h b/arch/arm/boot/dts/imx6dl-pinfunc.h new file mode 100644 index 00000000000..9aab950ec26 --- /dev/null +++ b/arch/arm/boot/dts/imx6dl-pinfunc.h @@ -0,0 +1,1085 @@ +/* + * Copyright 2013 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. + * + */ + +#ifndef __DTS_IMX6DL_PINFUNC_H +#define __DTS_IMX6DL_PINFUNC_H + +/* + * The pin function ID is a tuple of + * <mux_reg conf_reg input_reg mux_mode input_val> + */ +#define MX6DL_PAD_CSI0_DAT10__IPU1_CSI0_DATA10     0x04c 0x360 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DAT10__AUD3_RXC             0x04c 0x360 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DAT10__ECSPI2_MISO          0x04c 0x360 0x7f8 0x2 0x0 +#define MX6DL_PAD_CSI0_DAT10__UART1_TX_DATA        0x04c 0x360 0x000 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT10__UART1_RX_DATA        0x04c 0x360 0x8fc 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT10__GPIO5_IO28           0x04c 0x360 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DAT10__ARM_TRACE07          0x04c 0x360 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_DAT11__IPU1_CSI0_DATA11     0x050 0x364 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DAT11__AUD3_RXFS            0x050 0x364 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DAT11__ECSPI2_SS0           0x050 0x364 0x800 0x2 0x0 +#define MX6DL_PAD_CSI0_DAT11__UART1_RX_DATA        0x050 0x364 0x8fc 0x3 0x1 +#define MX6DL_PAD_CSI0_DAT11__UART1_TX_DATA        0x050 0x364 0x000 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT11__GPIO5_IO29           0x050 0x364 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DAT11__ARM_TRACE08          0x050 0x364 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_DAT12__IPU1_CSI0_DATA12     0x054 0x368 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DAT12__EIM_DATA08           0x054 0x368 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DAT12__UART4_TX_DATA        0x054 0x368 0x000 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT12__UART4_RX_DATA        0x054 0x368 0x914 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT12__GPIO5_IO30           0x054 0x368 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DAT12__ARM_TRACE09          0x054 0x368 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_DAT13__IPU1_CSI0_DATA13     0x058 0x36c 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DAT13__EIM_DATA09           0x058 0x36c 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DAT13__UART4_RX_DATA        0x058 0x36c 0x914 0x3 0x1 +#define MX6DL_PAD_CSI0_DAT13__UART4_TX_DATA        0x058 0x36c 0x000 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT13__GPIO5_IO31           0x058 0x36c 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DAT13__ARM_TRACE10          0x058 0x36c 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_DAT14__IPU1_CSI0_DATA14     0x05c 0x370 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DAT14__EIM_DATA10           0x05c 0x370 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DAT14__UART5_TX_DATA        0x05c 0x370 0x000 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT14__UART5_RX_DATA        0x05c 0x370 0x91c 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT14__GPIO6_IO00           0x05c 0x370 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DAT14__ARM_TRACE11          0x05c 0x370 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_DAT15__IPU1_CSI0_DATA15     0x060 0x374 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DAT15__EIM_DATA11           0x060 0x374 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DAT15__UART5_RX_DATA        0x060 0x374 0x91c 0x3 0x1 +#define MX6DL_PAD_CSI0_DAT15__UART5_TX_DATA        0x060 0x374 0x000 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT15__GPIO6_IO01           0x060 0x374 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DAT15__ARM_TRACE12          0x060 0x374 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_DAT16__IPU1_CSI0_DATA16     0x064 0x378 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DAT16__EIM_DATA12           0x064 0x378 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DAT16__UART4_RTS_B          0x064 0x378 0x910 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT16__UART4_CTS_B          0x064 0x378 0x000 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT16__GPIO6_IO02           0x064 0x378 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DAT16__ARM_TRACE13          0x064 0x378 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_DAT17__IPU1_CSI0_DATA17     0x068 0x37c 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DAT17__EIM_DATA13           0x068 0x37c 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DAT17__UART4_CTS_B          0x068 0x37c 0x000 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT17__UART4_RTS_B          0x068 0x37c 0x910 0x3 0x1 +#define MX6DL_PAD_CSI0_DAT17__GPIO6_IO03           0x068 0x37c 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DAT17__ARM_TRACE14          0x068 0x37c 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_DAT18__IPU1_CSI0_DATA18     0x06c 0x380 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DAT18__EIM_DATA14           0x06c 0x380 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DAT18__UART5_RTS_B          0x06c 0x380 0x918 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT18__UART5_CTS_B          0x06c 0x380 0x000 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT18__GPIO6_IO04           0x06c 0x380 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DAT18__ARM_TRACE15          0x06c 0x380 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_DAT19__IPU1_CSI0_DATA19     0x070 0x384 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DAT19__EIM_DATA15           0x070 0x384 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DAT19__UART5_CTS_B          0x070 0x384 0x000 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT19__UART5_RTS_B          0x070 0x384 0x918 0x3 0x1 +#define MX6DL_PAD_CSI0_DAT19__GPIO6_IO05           0x070 0x384 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DAT4__IPU1_CSI0_DATA04      0x074 0x388 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DAT4__EIM_DATA02            0x074 0x388 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DAT4__ECSPI1_SCLK           0x074 0x388 0x7d8 0x2 0x0 +#define MX6DL_PAD_CSI0_DAT4__KEY_COL5              0x074 0x388 0x8c0 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT4__AUD3_TXC              0x074 0x388 0x000 0x4 0x0 +#define MX6DL_PAD_CSI0_DAT4__GPIO5_IO22            0x074 0x388 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DAT4__ARM_TRACE01           0x074 0x388 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_DAT5__IPU1_CSI0_DATA05      0x078 0x38c 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DAT5__EIM_DATA03            0x078 0x38c 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DAT5__ECSPI1_MOSI           0x078 0x38c 0x7e0 0x2 0x0 +#define MX6DL_PAD_CSI0_DAT5__KEY_ROW5              0x078 0x38c 0x8cc 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT5__AUD3_TXD              0x078 0x38c 0x000 0x4 0x0 +#define MX6DL_PAD_CSI0_DAT5__GPIO5_IO23            0x078 0x38c 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DAT5__ARM_TRACE02           0x078 0x38c 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_DAT6__IPU1_CSI0_DATA06      0x07c 0x390 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DAT6__EIM_DATA04            0x07c 0x390 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DAT6__ECSPI1_MISO           0x07c 0x390 0x7dc 0x2 0x0 +#define MX6DL_PAD_CSI0_DAT6__KEY_COL6              0x07c 0x390 0x8c4 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT6__AUD3_TXFS             0x07c 0x390 0x000 0x4 0x0 +#define MX6DL_PAD_CSI0_DAT6__GPIO5_IO24            0x07c 0x390 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DAT6__ARM_TRACE03           0x07c 0x390 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_DAT7__IPU1_CSI0_DATA07      0x080 0x394 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DAT7__EIM_DATA05            0x080 0x394 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DAT7__ECSPI1_SS0            0x080 0x394 0x7e4 0x2 0x0 +#define MX6DL_PAD_CSI0_DAT7__KEY_ROW6              0x080 0x394 0x8d0 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT7__AUD3_RXD              0x080 0x394 0x000 0x4 0x0 +#define MX6DL_PAD_CSI0_DAT7__GPIO5_IO25            0x080 0x394 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DAT7__ARM_TRACE04           0x080 0x394 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_DAT8__IPU1_CSI0_DATA08      0x084 0x398 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DAT8__EIM_DATA06            0x084 0x398 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DAT8__ECSPI2_SCLK           0x084 0x398 0x7f4 0x2 0x0 +#define MX6DL_PAD_CSI0_DAT8__KEY_COL7              0x084 0x398 0x8c8 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT8__I2C1_SDA              0x084 0x398 0x86c 0x4 0x0 +#define MX6DL_PAD_CSI0_DAT8__GPIO5_IO26            0x084 0x398 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DAT8__ARM_TRACE05           0x084 0x398 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_DAT9__IPU1_CSI0_DATA09      0x088 0x39c 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DAT9__EIM_DATA07            0x088 0x39c 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DAT9__ECSPI2_MOSI           0x088 0x39c 0x7fc 0x2 0x0 +#define MX6DL_PAD_CSI0_DAT9__KEY_ROW7              0x088 0x39c 0x8d4 0x3 0x0 +#define MX6DL_PAD_CSI0_DAT9__I2C1_SCL              0x088 0x39c 0x868 0x4 0x0 +#define MX6DL_PAD_CSI0_DAT9__GPIO5_IO27            0x088 0x39c 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DAT9__ARM_TRACE06           0x088 0x39c 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_DATA_EN__IPU1_CSI0_DATA_EN  0x08c 0x3a0 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_DATA_EN__EIM_DATA00         0x08c 0x3a0 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_DATA_EN__GPIO5_IO20         0x08c 0x3a0 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_DATA_EN__ARM_TRACE_CLK      0x08c 0x3a0 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC       0x090 0x3a4 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_MCLK__CCM_CLKO1             0x090 0x3a4 0x000 0x3 0x0 +#define MX6DL_PAD_CSI0_MCLK__GPIO5_IO19            0x090 0x3a4 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_MCLK__ARM_TRACE_CTL         0x090 0x3a4 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK    0x094 0x3a8 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_PIXCLK__GPIO5_IO18          0x094 0x3a8 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_PIXCLK__ARM_EVENTO          0x094 0x3a8 0x000 0x7 0x0 +#define MX6DL_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC      0x098 0x3ac 0x000 0x0 0x0 +#define MX6DL_PAD_CSI0_VSYNC__EIM_DATA01           0x098 0x3ac 0x000 0x1 0x0 +#define MX6DL_PAD_CSI0_VSYNC__GPIO5_IO21           0x098 0x3ac 0x000 0x5 0x0 +#define MX6DL_PAD_CSI0_VSYNC__ARM_TRACE00          0x098 0x3ac 0x000 0x7 0x0 +#define MX6DL_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK  0x09c 0x3b0 0x000 0x0 0x0 +#define MX6DL_PAD_DI0_DISP_CLK__LCD_CLK            0x09c 0x3b0 0x000 0x1 0x0 +#define MX6DL_PAD_DI0_DISP_CLK__GPIO4_IO16         0x09c 0x3b0 0x000 0x5 0x0 +#define MX6DL_PAD_DI0_DISP_CLK__LCD_WR_RWN         0x09c 0x3b0 0x000 0x8 0x0 +#define MX6DL_PAD_DI0_PIN15__IPU1_DI0_PIN15        0x0a0 0x3b4 0x000 0x0 0x0 +#define MX6DL_PAD_DI0_PIN15__LCD_ENABLE            0x0a0 0x3b4 0x000 0x1 0x0 +#define MX6DL_PAD_DI0_PIN15__AUD6_TXC              0x0a0 0x3b4 0x000 0x2 0x0 +#define MX6DL_PAD_DI0_PIN15__GPIO4_IO17            0x0a0 0x3b4 0x000 0x5 0x0 +#define MX6DL_PAD_DI0_PIN15__LCD_RD_E              0x0a0 0x3b4 0x000 0x8 0x0 +#define MX6DL_PAD_DI0_PIN2__IPU1_DI0_PIN02         0x0a4 0x3b8 0x000 0x0 0x0 +#define MX6DL_PAD_DI0_PIN2__LCD_HSYNC              0x0a4 0x3b8 0x8d8 0x1 0x0 +#define MX6DL_PAD_DI0_PIN2__AUD6_TXD               0x0a4 0x3b8 0x000 0x2 0x0 +#define MX6DL_PAD_DI0_PIN2__GPIO4_IO18             0x0a4 0x3b8 0x000 0x5 0x0 +#define MX6DL_PAD_DI0_PIN2__LCD_RS                 0x0a4 0x3b8 0x000 0x8 0x0 +#define MX6DL_PAD_DI0_PIN3__IPU1_DI0_PIN03         0x0a8 0x3bc 0x000 0x0 0x0 +#define MX6DL_PAD_DI0_PIN3__LCD_VSYNC              0x0a8 0x3bc 0x000 0x1 0x0 +#define MX6DL_PAD_DI0_PIN3__AUD6_TXFS              0x0a8 0x3bc 0x000 0x2 0x0 +#define MX6DL_PAD_DI0_PIN3__GPIO4_IO19             0x0a8 0x3bc 0x000 0x5 0x0 +#define MX6DL_PAD_DI0_PIN3__LCD_CS                 0x0a8 0x3bc 0x000 0x8 0x0 +#define MX6DL_PAD_DI0_PIN4__IPU1_DI0_PIN04         0x0ac 0x3c0 0x000 0x0 0x0 +#define MX6DL_PAD_DI0_PIN4__LCD_BUSY               0x0ac 0x3c0 0x8d8 0x1 0x1 +#define MX6DL_PAD_DI0_PIN4__AUD6_RXD               0x0ac 0x3c0 0x000 0x2 0x0 +#define MX6DL_PAD_DI0_PIN4__SD1_WP                 0x0ac 0x3c0 0x92c 0x3 0x0 +#define MX6DL_PAD_DI0_PIN4__GPIO4_IO20             0x0ac 0x3c0 0x000 0x5 0x0 +#define MX6DL_PAD_DI0_PIN4__LCD_RESET              0x0ac 0x3c0 0x000 0x8 0x0 +#define MX6DL_PAD_DISP0_DAT0__IPU1_DISP0_DATA00    0x0b0 0x3c4 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT0__LCD_DATA00           0x0b0 0x3c4 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT0__ECSPI3_SCLK          0x0b0 0x3c4 0x000 0x2 0x0 +#define MX6DL_PAD_DISP0_DAT0__GPIO4_IO21           0x0b0 0x3c4 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT1__IPU1_DISP0_DATA01    0x0b4 0x3c8 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT1__LCD_DATA01           0x0b4 0x3c8 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT1__ECSPI3_MOSI          0x0b4 0x3c8 0x000 0x2 0x0 +#define MX6DL_PAD_DISP0_DAT1__GPIO4_IO22           0x0b4 0x3c8 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT10__IPU1_DISP0_DATA10   0x0b8 0x3cc 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT10__LCD_DATA10          0x0b8 0x3cc 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT10__GPIO4_IO31          0x0b8 0x3cc 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT11__IPU1_DISP0_DATA11   0x0bc 0x3d0 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT11__LCD_DATA11          0x0bc 0x3d0 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT11__GPIO5_IO05          0x0bc 0x3d0 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT12__IPU1_DISP0_DATA12   0x0c0 0x3d4 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT12__LCD_DATA12          0x0c0 0x3d4 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT12__GPIO5_IO06          0x0c0 0x3d4 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT13__IPU1_DISP0_DATA13   0x0c4 0x3d8 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT13__LCD_DATA13          0x0c4 0x3d8 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT13__AUD5_RXFS           0x0c4 0x3d8 0x7bc 0x3 0x0 +#define MX6DL_PAD_DISP0_DAT13__GPIO5_IO07          0x0c4 0x3d8 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT14__IPU1_DISP0_DATA14   0x0c8 0x3dc 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT14__LCD_DATA14          0x0c8 0x3dc 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT14__AUD5_RXC            0x0c8 0x3dc 0x7b8 0x3 0x0 +#define MX6DL_PAD_DISP0_DAT14__GPIO5_IO08          0x0c8 0x3dc 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT15__IPU1_DISP0_DATA15   0x0cc 0x3e0 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT15__LCD_DATA15          0x0cc 0x3e0 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT15__ECSPI1_SS1          0x0cc 0x3e0 0x7e8 0x2 0x0 +#define MX6DL_PAD_DISP0_DAT15__ECSPI2_SS1          0x0cc 0x3e0 0x804 0x3 0x0 +#define MX6DL_PAD_DISP0_DAT15__GPIO5_IO09          0x0cc 0x3e0 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT16__IPU1_DISP0_DATA16   0x0d0 0x3e4 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT16__LCD_DATA16          0x0d0 0x3e4 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT16__ECSPI2_MOSI         0x0d0 0x3e4 0x7fc 0x2 0x1 +#define MX6DL_PAD_DISP0_DAT16__AUD5_TXC            0x0d0 0x3e4 0x7c0 0x3 0x0 +#define MX6DL_PAD_DISP0_DAT16__SDMA_EXT_EVENT0     0x0d0 0x3e4 0x8e8 0x4 0x0 +#define MX6DL_PAD_DISP0_DAT16__GPIO5_IO10          0x0d0 0x3e4 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT17__IPU1_DISP0_DATA17   0x0d4 0x3e8 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT17__LCD_DATA17          0x0d4 0x3e8 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT17__ECSPI2_MISO         0x0d4 0x3e8 0x7f8 0x2 0x1 +#define MX6DL_PAD_DISP0_DAT17__AUD5_TXD            0x0d4 0x3e8 0x7b4 0x3 0x0 +#define MX6DL_PAD_DISP0_DAT17__SDMA_EXT_EVENT1     0x0d4 0x3e8 0x8ec 0x4 0x0 +#define MX6DL_PAD_DISP0_DAT17__GPIO5_IO11          0x0d4 0x3e8 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT18__IPU1_DISP0_DATA18   0x0d8 0x3ec 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT18__LCD_DATA18          0x0d8 0x3ec 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT18__ECSPI2_SS0          0x0d8 0x3ec 0x800 0x2 0x1 +#define MX6DL_PAD_DISP0_DAT18__AUD5_TXFS           0x0d8 0x3ec 0x7c4 0x3 0x0 +#define MX6DL_PAD_DISP0_DAT18__AUD4_RXFS           0x0d8 0x3ec 0x7a4 0x4 0x0 +#define MX6DL_PAD_DISP0_DAT18__GPIO5_IO12          0x0d8 0x3ec 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT18__EIM_CS2_B           0x0d8 0x3ec 0x000 0x7 0x0 +#define MX6DL_PAD_DISP0_DAT19__IPU1_DISP0_DATA19   0x0dc 0x3f0 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT19__LCD_DATA19          0x0dc 0x3f0 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT19__ECSPI2_SCLK         0x0dc 0x3f0 0x7f4 0x2 0x1 +#define MX6DL_PAD_DISP0_DAT19__AUD5_RXD            0x0dc 0x3f0 0x7b0 0x3 0x0 +#define MX6DL_PAD_DISP0_DAT19__AUD4_RXC            0x0dc 0x3f0 0x7a0 0x4 0x0 +#define MX6DL_PAD_DISP0_DAT19__GPIO5_IO13          0x0dc 0x3f0 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT19__EIM_CS3_B           0x0dc 0x3f0 0x000 0x7 0x0 +#define MX6DL_PAD_DISP0_DAT2__IPU1_DISP0_DATA02    0x0e0 0x3f4 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT2__LCD_DATA02           0x0e0 0x3f4 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT2__ECSPI3_MISO          0x0e0 0x3f4 0x000 0x2 0x0 +#define MX6DL_PAD_DISP0_DAT2__GPIO4_IO23           0x0e0 0x3f4 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT20__IPU1_DISP0_DATA20   0x0e4 0x3f8 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT20__LCD_DATA20          0x0e4 0x3f8 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT20__ECSPI1_SCLK         0x0e4 0x3f8 0x7d8 0x2 0x1 +#define MX6DL_PAD_DISP0_DAT20__AUD4_TXC            0x0e4 0x3f8 0x7a8 0x3 0x0 +#define MX6DL_PAD_DISP0_DAT20__GPIO5_IO14          0x0e4 0x3f8 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT21__IPU1_DISP0_DATA21   0x0e8 0x3fc 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT21__LCD_DATA21          0x0e8 0x3fc 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT21__ECSPI1_MOSI         0x0e8 0x3fc 0x7e0 0x2 0x1 +#define MX6DL_PAD_DISP0_DAT21__AUD4_TXD            0x0e8 0x3fc 0x79c 0x3 0x0 +#define MX6DL_PAD_DISP0_DAT21__GPIO5_IO15          0x0e8 0x3fc 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT22__IPU1_DISP0_DATA22   0x0ec 0x400 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT22__LCD_DATA22          0x0ec 0x400 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT22__ECSPI1_MISO         0x0ec 0x400 0x7dc 0x2 0x1 +#define MX6DL_PAD_DISP0_DAT22__AUD4_TXFS           0x0ec 0x400 0x7ac 0x3 0x0 +#define MX6DL_PAD_DISP0_DAT22__GPIO5_IO16          0x0ec 0x400 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT23__IPU1_DISP0_DATA23   0x0f0 0x404 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT23__LCD_DATA23          0x0f0 0x404 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT23__ECSPI1_SS0          0x0f0 0x404 0x7e4 0x2 0x1 +#define MX6DL_PAD_DISP0_DAT23__AUD4_RXD            0x0f0 0x404 0x798 0x3 0x0 +#define MX6DL_PAD_DISP0_DAT23__GPIO5_IO17          0x0f0 0x404 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT3__IPU1_DISP0_DATA03    0x0f4 0x408 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT3__LCD_DATA03           0x0f4 0x408 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT3__ECSPI3_SS0           0x0f4 0x408 0x000 0x2 0x0 +#define MX6DL_PAD_DISP0_DAT3__GPIO4_IO24           0x0f4 0x408 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT4__IPU1_DISP0_DATA04    0x0f8 0x40c 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT4__LCD_DATA04           0x0f8 0x40c 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT4__ECSPI3_SS1           0x0f8 0x40c 0x000 0x2 0x0 +#define MX6DL_PAD_DISP0_DAT4__GPIO4_IO25           0x0f8 0x40c 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT5__IPU1_DISP0_DATA05    0x0fc 0x410 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT5__LCD_DATA05           0x0fc 0x410 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT5__ECSPI3_SS2           0x0fc 0x410 0x000 0x2 0x0 +#define MX6DL_PAD_DISP0_DAT5__AUD6_RXFS            0x0fc 0x410 0x000 0x3 0x0 +#define MX6DL_PAD_DISP0_DAT5__GPIO4_IO26           0x0fc 0x410 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT6__IPU1_DISP0_DATA06    0x100 0x414 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT6__LCD_DATA06           0x100 0x414 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT6__ECSPI3_SS3           0x100 0x414 0x000 0x2 0x0 +#define MX6DL_PAD_DISP0_DAT6__AUD6_RXC             0x100 0x414 0x000 0x3 0x0 +#define MX6DL_PAD_DISP0_DAT6__GPIO4_IO27           0x100 0x414 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT7__IPU1_DISP0_DATA07    0x104 0x418 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT7__LCD_DATA07           0x104 0x418 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT7__ECSPI3_RDY           0x104 0x418 0x000 0x2 0x0 +#define MX6DL_PAD_DISP0_DAT7__GPIO4_IO28           0x104 0x418 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT8__IPU1_DISP0_DATA08    0x108 0x41c 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT8__LCD_DATA08           0x108 0x41c 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT8__PWM1_OUT             0x108 0x41c 0x000 0x2 0x0 +#define MX6DL_PAD_DISP0_DAT8__WDOG1_B              0x108 0x41c 0x000 0x3 0x0 +#define MX6DL_PAD_DISP0_DAT8__GPIO4_IO29           0x108 0x41c 0x000 0x5 0x0 +#define MX6DL_PAD_DISP0_DAT9__IPU1_DISP0_DATA09    0x10c 0x420 0x000 0x0 0x0 +#define MX6DL_PAD_DISP0_DAT9__LCD_DATA09           0x10c 0x420 0x000 0x1 0x0 +#define MX6DL_PAD_DISP0_DAT9__PWM2_OUT             0x10c 0x420 0x000 0x2 0x0 +#define MX6DL_PAD_DISP0_DAT9__WDOG2_B              0x10c 0x420 0x000 0x3 0x0 +#define MX6DL_PAD_DISP0_DAT9__GPIO4_IO30           0x10c 0x420 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_A16__EIM_ADDR16              0x110 0x4e0 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_A16__IPU1_DI1_DISP_CLK       0x110 0x4e0 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_A16__IPU1_CSI1_PIXCLK        0x110 0x4e0 0x8b8 0x2 0x0 +#define MX6DL_PAD_EIM_A16__GPIO2_IO22              0x110 0x4e0 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_A16__SRC_BOOT_CFG16          0x110 0x4e0 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_A16__EPDC_DATA00             0x110 0x4e0 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_A17__EIM_ADDR17              0x114 0x4e4 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_A17__IPU1_DISP1_DATA12       0x114 0x4e4 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_A17__IPU1_CSI1_DATA12        0x114 0x4e4 0x890 0x2 0x0 +#define MX6DL_PAD_EIM_A17__GPIO2_IO21              0x114 0x4e4 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_A17__SRC_BOOT_CFG17          0x114 0x4e4 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_A17__EPDC_PWR_STAT           0x114 0x4e4 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_A18__EIM_ADDR18              0x118 0x4e8 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_A18__IPU1_DISP1_DATA13       0x118 0x4e8 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_A18__IPU1_CSI1_DATA13        0x118 0x4e8 0x894 0x2 0x0 +#define MX6DL_PAD_EIM_A18__GPIO2_IO20              0x118 0x4e8 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_A18__SRC_BOOT_CFG18          0x118 0x4e8 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_A18__EPDC_PWR_CTRL0          0x118 0x4e8 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_A19__EIM_ADDR19              0x11c 0x4ec 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_A19__IPU1_DISP1_DATA14       0x11c 0x4ec 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_A19__IPU1_CSI1_DATA14        0x11c 0x4ec 0x898 0x2 0x0 +#define MX6DL_PAD_EIM_A19__GPIO2_IO19              0x11c 0x4ec 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_A19__SRC_BOOT_CFG19          0x11c 0x4ec 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_A19__EPDC_PWR_CTRL1          0x11c 0x4ec 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_A20__EIM_ADDR20              0x120 0x4f0 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_A20__IPU1_DISP1_DATA15       0x120 0x4f0 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_A20__IPU1_CSI1_DATA15        0x120 0x4f0 0x89c 0x2 0x0 +#define MX6DL_PAD_EIM_A20__GPIO2_IO18              0x120 0x4f0 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_A20__SRC_BOOT_CFG20          0x120 0x4f0 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_A20__EPDC_PWR_CTRL2          0x120 0x4f0 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_A21__EIM_ADDR21              0x124 0x4f4 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_A21__IPU1_DISP1_DATA16       0x124 0x4f4 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_A21__IPU1_CSI1_DATA16        0x124 0x4f4 0x8a0 0x2 0x0 +#define MX6DL_PAD_EIM_A21__GPIO2_IO17              0x124 0x4f4 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_A21__SRC_BOOT_CFG21          0x124 0x4f4 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_A21__EPDC_GDCLK              0x124 0x4f4 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_A22__EIM_ADDR22              0x128 0x4f8 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_A22__IPU1_DISP1_DATA17       0x128 0x4f8 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_A22__IPU1_CSI1_DATA17        0x128 0x4f8 0x8a4 0x2 0x0 +#define MX6DL_PAD_EIM_A22__GPIO2_IO16              0x128 0x4f8 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_A22__SRC_BOOT_CFG22          0x128 0x4f8 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_A22__EPDC_GDSP               0x128 0x4f8 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_A23__EIM_ADDR23              0x12c 0x4fc 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_A23__IPU1_DISP1_DATA18       0x12c 0x4fc 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_A23__IPU1_CSI1_DATA18        0x12c 0x4fc 0x8a8 0x2 0x0 +#define MX6DL_PAD_EIM_A23__IPU1_SISG3              0x12c 0x4fc 0x000 0x4 0x0 +#define MX6DL_PAD_EIM_A23__GPIO6_IO06              0x12c 0x4fc 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_A23__SRC_BOOT_CFG23          0x12c 0x4fc 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_A23__EPDC_GDOE               0x12c 0x4fc 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_A24__EIM_ADDR24              0x130 0x500 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_A24__IPU1_DISP1_DATA19       0x130 0x500 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_A24__IPU1_CSI1_DATA19        0x130 0x500 0x8ac 0x2 0x0 +#define MX6DL_PAD_EIM_A24__IPU1_SISG2              0x130 0x500 0x000 0x4 0x0 +#define MX6DL_PAD_EIM_A24__GPIO5_IO04              0x130 0x500 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_A24__SRC_BOOT_CFG24          0x130 0x500 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_A24__EPDC_GDRL               0x130 0x500 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_A25__EIM_ADDR25              0x134 0x504 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_A25__ECSPI4_SS1              0x134 0x504 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_A25__ECSPI2_RDY              0x134 0x504 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_A25__IPU1_DI1_PIN12          0x134 0x504 0x000 0x3 0x0 +#define MX6DL_PAD_EIM_A25__IPU1_DI0_D1_CS          0x134 0x504 0x000 0x4 0x0 +#define MX6DL_PAD_EIM_A25__GPIO5_IO02              0x134 0x504 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_A25__HDMI_TX_CEC_LINE        0x134 0x504 0x85c 0x6 0x0 +#define MX6DL_PAD_EIM_A25__EPDC_DATA15             0x134 0x504 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_A25__EIM_ACLK_FREERUN        0x134 0x504 0x000 0x9 0x0 +#define MX6DL_PAD_EIM_BCLK__EIM_BCLK               0x138 0x508 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_BCLK__IPU1_DI1_PIN16         0x138 0x508 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_BCLK__GPIO6_IO31             0x138 0x508 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_BCLK__EPDC_SDCE9             0x138 0x508 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_CS0__EIM_CS0_B               0x13c 0x50c 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_CS0__IPU1_DI1_PIN05          0x13c 0x50c 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_CS0__ECSPI2_SCLK             0x13c 0x50c 0x7f4 0x2 0x2 +#define MX6DL_PAD_EIM_CS0__GPIO2_IO23              0x13c 0x50c 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_CS0__EPDC_DATA06             0x13c 0x50c 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_CS1__EIM_CS1_B               0x140 0x510 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_CS1__IPU1_DI1_PIN06          0x140 0x510 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_CS1__ECSPI2_MOSI             0x140 0x510 0x7fc 0x2 0x2 +#define MX6DL_PAD_EIM_CS1__GPIO2_IO24              0x140 0x510 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_CS1__EPDC_DATA08             0x140 0x510 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_D16__EIM_DATA16              0x144 0x514 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_D16__ECSPI1_SCLK             0x144 0x514 0x7d8 0x1 0x2 +#define MX6DL_PAD_EIM_D16__IPU1_DI0_PIN05          0x144 0x514 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_D16__IPU1_CSI1_DATA18        0x144 0x514 0x8a8 0x3 0x1 +#define MX6DL_PAD_EIM_D16__HDMI_TX_DDC_SDA         0x144 0x514 0x864 0x4 0x0 +#define MX6DL_PAD_EIM_D16__GPIO3_IO16              0x144 0x514 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_D16__I2C2_SDA                0x144 0x514 0x874 0x6 0x0 +#define MX6DL_PAD_EIM_D16__EPDC_DATA10             0x144 0x514 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_D17__EIM_DATA17              0x148 0x518 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_D17__ECSPI1_MISO             0x148 0x518 0x7dc 0x1 0x2 +#define MX6DL_PAD_EIM_D17__IPU1_DI0_PIN06          0x148 0x518 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_D17__IPU1_CSI1_PIXCLK        0x148 0x518 0x8b8 0x3 0x1 +#define MX6DL_PAD_EIM_D17__DCIC1_OUT               0x148 0x518 0x000 0x4 0x0 +#define MX6DL_PAD_EIM_D17__GPIO3_IO17              0x148 0x518 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_D17__I2C3_SCL                0x148 0x518 0x878 0x6 0x0 +#define MX6DL_PAD_EIM_D17__EPDC_VCOM0              0x148 0x518 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_D18__EIM_DATA18              0x14c 0x51c 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_D18__ECSPI1_MOSI             0x14c 0x51c 0x7e0 0x1 0x2 +#define MX6DL_PAD_EIM_D18__IPU1_DI0_PIN07          0x14c 0x51c 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_D18__IPU1_CSI1_DATA17        0x14c 0x51c 0x8a4 0x3 0x1 +#define MX6DL_PAD_EIM_D18__IPU1_DI1_D0_CS          0x14c 0x51c 0x000 0x4 0x0 +#define MX6DL_PAD_EIM_D18__GPIO3_IO18              0x14c 0x51c 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_D18__I2C3_SDA                0x14c 0x51c 0x87c 0x6 0x0 +#define MX6DL_PAD_EIM_D18__EPDC_VCOM1              0x14c 0x51c 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_D19__EIM_DATA19              0x150 0x520 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_D19__ECSPI1_SS1              0x150 0x520 0x7e8 0x1 0x1 +#define MX6DL_PAD_EIM_D19__IPU1_DI0_PIN08          0x150 0x520 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_D19__IPU1_CSI1_DATA16        0x150 0x520 0x8a0 0x3 0x1 +#define MX6DL_PAD_EIM_D19__UART1_CTS_B             0x150 0x520 0x000 0x4 0x0 +#define MX6DL_PAD_EIM_D19__UART1_RTS_B             0x150 0x520 0x8f8 0x4 0x0 +#define MX6DL_PAD_EIM_D19__GPIO3_IO19              0x150 0x520 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_D19__EPIT1_OUT               0x150 0x520 0x000 0x6 0x0 +#define MX6DL_PAD_EIM_D19__EPDC_DATA12             0x150 0x520 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_D20__EIM_DATA20              0x154 0x524 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_D20__ECSPI4_SS0              0x154 0x524 0x808 0x1 0x0 +#define MX6DL_PAD_EIM_D20__IPU1_DI0_PIN16          0x154 0x524 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_D20__IPU1_CSI1_DATA15        0x154 0x524 0x89c 0x3 0x1 +#define MX6DL_PAD_EIM_D20__UART1_RTS_B             0x154 0x524 0x8f8 0x4 0x1 +#define MX6DL_PAD_EIM_D20__UART1_CTS_B             0x154 0x524 0x000 0x4 0x0 +#define MX6DL_PAD_EIM_D20__GPIO3_IO20              0x154 0x524 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_D20__EPIT2_OUT               0x154 0x524 0x000 0x6 0x0 +#define MX6DL_PAD_EIM_D21__EIM_DATA21              0x158 0x528 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_D21__ECSPI4_SCLK             0x158 0x528 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_D21__IPU1_DI0_PIN17          0x158 0x528 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_D21__IPU1_CSI1_DATA11        0x158 0x528 0x88c 0x3 0x0 +#define MX6DL_PAD_EIM_D21__USB_OTG_OC              0x158 0x528 0x920 0x4 0x0 +#define MX6DL_PAD_EIM_D21__GPIO3_IO21              0x158 0x528 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_D21__I2C1_SCL                0x158 0x528 0x868 0x6 0x1 +#define MX6DL_PAD_EIM_D21__SPDIF_IN                0x158 0x528 0x8f0 0x7 0x0 +#define MX6DL_PAD_EIM_D22__EIM_DATA22              0x15c 0x52c 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_D22__ECSPI4_MISO             0x15c 0x52c 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_D22__IPU1_DI0_PIN01          0x15c 0x52c 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_D22__IPU1_CSI1_DATA10        0x15c 0x52c 0x888 0x3 0x0 +#define MX6DL_PAD_EIM_D22__USB_OTG_PWR             0x15c 0x52c 0x000 0x4 0x0 +#define MX6DL_PAD_EIM_D22__GPIO3_IO22              0x15c 0x52c 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_D22__SPDIF_OUT               0x15c 0x52c 0x000 0x6 0x0 +#define MX6DL_PAD_EIM_D22__EPDC_SDCE6              0x15c 0x52c 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_D23__EIM_DATA23              0x160 0x530 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_D23__IPU1_DI0_D0_CS          0x160 0x530 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_D23__UART3_CTS_B             0x160 0x530 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_D23__UART3_RTS_B             0x160 0x530 0x908 0x2 0x0 +#define MX6DL_PAD_EIM_D23__UART1_DCD_B             0x160 0x530 0x000 0x3 0x0 +#define MX6DL_PAD_EIM_D23__IPU1_CSI1_DATA_EN       0x160 0x530 0x8b0 0x4 0x0 +#define MX6DL_PAD_EIM_D23__GPIO3_IO23              0x160 0x530 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_D23__IPU1_DI1_PIN02          0x160 0x530 0x000 0x6 0x0 +#define MX6DL_PAD_EIM_D23__IPU1_DI1_PIN14          0x160 0x530 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_D23__EPDC_DATA11             0x160 0x530 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_D24__EIM_DATA24              0x164 0x534 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_D24__ECSPI4_SS2              0x164 0x534 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_D24__UART3_TX_DATA           0x164 0x534 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_D24__UART3_RX_DATA           0x164 0x534 0x90c 0x2 0x0 +#define MX6DL_PAD_EIM_D24__ECSPI1_SS2              0x164 0x534 0x7ec 0x3 0x0 +#define MX6DL_PAD_EIM_D24__ECSPI2_SS2              0x164 0x534 0x000 0x4 0x0 +#define MX6DL_PAD_EIM_D24__GPIO3_IO24              0x164 0x534 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_D24__AUD5_RXFS               0x164 0x534 0x7bc 0x6 0x1 +#define MX6DL_PAD_EIM_D24__UART1_DTR_B             0x164 0x534 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_D24__EPDC_SDCE7              0x164 0x534 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_D25__EIM_DATA25              0x168 0x538 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_D25__ECSPI4_SS3              0x168 0x538 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_D25__UART3_RX_DATA           0x168 0x538 0x90c 0x2 0x1 +#define MX6DL_PAD_EIM_D25__UART3_TX_DATA           0x168 0x538 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_D25__ECSPI1_SS3              0x168 0x538 0x7f0 0x3 0x0 +#define MX6DL_PAD_EIM_D25__ECSPI2_SS3              0x168 0x538 0x000 0x4 0x0 +#define MX6DL_PAD_EIM_D25__GPIO3_IO25              0x168 0x538 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_D25__AUD5_RXC                0x168 0x538 0x7b8 0x6 0x1 +#define MX6DL_PAD_EIM_D25__UART1_DSR_B             0x168 0x538 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_D25__EPDC_SDCE8              0x168 0x538 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_D26__EIM_DATA26              0x16c 0x53c 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_D26__IPU1_DI1_PIN11          0x16c 0x53c 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_D26__IPU1_CSI0_DATA01        0x16c 0x53c 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_D26__IPU1_CSI1_DATA14        0x16c 0x53c 0x898 0x3 0x1 +#define MX6DL_PAD_EIM_D26__UART2_TX_DATA           0x16c 0x53c 0x000 0x4 0x0 +#define MX6DL_PAD_EIM_D26__UART2_RX_DATA           0x16c 0x53c 0x904 0x4 0x0 +#define MX6DL_PAD_EIM_D26__GPIO3_IO26              0x16c 0x53c 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_D26__IPU1_SISG2              0x16c 0x53c 0x000 0x6 0x0 +#define MX6DL_PAD_EIM_D26__IPU1_DISP1_DATA22       0x16c 0x53c 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_D26__EPDC_SDOED              0x16c 0x53c 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_D27__EIM_DATA27              0x170 0x540 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_D27__IPU1_DI1_PIN13          0x170 0x540 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_D27__IPU1_CSI0_DATA00        0x170 0x540 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_D27__IPU1_CSI1_DATA13        0x170 0x540 0x894 0x3 0x1 +#define MX6DL_PAD_EIM_D27__UART2_RX_DATA           0x170 0x540 0x904 0x4 0x1 +#define MX6DL_PAD_EIM_D27__UART2_TX_DATA           0x170 0x540 0x000 0x4 0x0 +#define MX6DL_PAD_EIM_D27__GPIO3_IO27              0x170 0x540 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_D27__IPU1_SISG3              0x170 0x540 0x000 0x6 0x0 +#define MX6DL_PAD_EIM_D27__IPU1_DISP1_DATA23       0x170 0x540 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_D27__EPDC_SDOE               0x170 0x540 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_D28__EIM_DATA28              0x174 0x544 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_D28__I2C1_SDA                0x174 0x544 0x86c 0x1 0x1 +#define MX6DL_PAD_EIM_D28__ECSPI4_MOSI             0x174 0x544 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_D28__IPU1_CSI1_DATA12        0x174 0x544 0x890 0x3 0x1 +#define MX6DL_PAD_EIM_D28__UART2_CTS_B             0x174 0x544 0x000 0x4 0x0 +#define MX6DL_PAD_EIM_D28__UART2_RTS_B             0x174 0x544 0x900 0x4 0x0 +#define MX6DL_PAD_EIM_D28__GPIO3_IO28              0x174 0x544 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_D28__IPU1_EXT_TRIG           0x174 0x544 0x000 0x6 0x0 +#define MX6DL_PAD_EIM_D28__IPU1_DI0_PIN13          0x174 0x544 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_D28__EPDC_PWR_CTRL3          0x174 0x544 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_D29__EIM_DATA29              0x178 0x548 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_D29__IPU1_DI1_PIN15          0x178 0x548 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_D29__ECSPI4_SS0              0x178 0x548 0x808 0x2 0x1 +#define MX6DL_PAD_EIM_D29__UART2_RTS_B             0x178 0x548 0x900 0x4 0x1 +#define MX6DL_PAD_EIM_D29__UART2_CTS_B             0x178 0x548 0x000 0x4 0x0 +#define MX6DL_PAD_EIM_D29__GPIO3_IO29              0x178 0x548 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_D29__IPU1_CSI1_VSYNC         0x178 0x548 0x8bc 0x6 0x0 +#define MX6DL_PAD_EIM_D29__IPU1_DI0_PIN14          0x178 0x548 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_D29__EPDC_PWR_WAKE           0x178 0x548 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_D30__EIM_DATA30              0x17c 0x54c 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_D30__IPU1_DISP1_DATA21       0x17c 0x54c 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_D30__IPU1_DI0_PIN11          0x17c 0x54c 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_D30__IPU1_CSI0_DATA03        0x17c 0x54c 0x000 0x3 0x0 +#define MX6DL_PAD_EIM_D30__UART3_CTS_B             0x17c 0x54c 0x000 0x4 0x0 +#define MX6DL_PAD_EIM_D30__UART3_RTS_B             0x17c 0x54c 0x908 0x4 0x1 +#define MX6DL_PAD_EIM_D30__GPIO3_IO30              0x17c 0x54c 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_D30__USB_H1_OC               0x17c 0x54c 0x924 0x6 0x0 +#define MX6DL_PAD_EIM_D30__EPDC_SDOEZ              0x17c 0x54c 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_D31__EIM_DATA31              0x180 0x550 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_D31__IPU1_DISP1_DATA20       0x180 0x550 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_D31__IPU1_DI0_PIN12          0x180 0x550 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_D31__IPU1_CSI0_DATA02        0x180 0x550 0x000 0x3 0x0 +#define MX6DL_PAD_EIM_D31__UART3_RTS_B             0x180 0x550 0x908 0x4 0x2 +#define MX6DL_PAD_EIM_D31__UART3_CTS_B             0x180 0x550 0x000 0x4 0x0 +#define MX6DL_PAD_EIM_D31__GPIO3_IO31              0x180 0x550 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_D31__USB_H1_PWR              0x180 0x550 0x000 0x6 0x0 +#define MX6DL_PAD_EIM_D31__EPDC_SDCLK_P            0x180 0x550 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_D31__EIM_ACLK_FREERUN        0x180 0x550 0x000 0x9 0x0 +#define MX6DL_PAD_EIM_DA0__EIM_AD00                0x184 0x554 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_DA0__IPU1_DISP1_DATA09       0x184 0x554 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_DA0__IPU1_CSI1_DATA09        0x184 0x554 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_DA0__GPIO3_IO00              0x184 0x554 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_DA0__SRC_BOOT_CFG00          0x184 0x554 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_DA0__EPDC_SDCLK_N            0x184 0x554 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_DA1__EIM_AD01                0x188 0x558 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_DA1__IPU1_DISP1_DATA08       0x188 0x558 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_DA1__IPU1_CSI1_DATA08        0x188 0x558 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_DA1__GPIO3_IO01              0x188 0x558 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_DA1__SRC_BOOT_CFG01          0x188 0x558 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_DA1__EPDC_SDLE               0x188 0x558 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_DA10__EIM_AD10               0x18c 0x55c 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_DA10__IPU1_DI1_PIN15         0x18c 0x55c 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_DA10__IPU1_CSI1_DATA_EN      0x18c 0x55c 0x8b0 0x2 0x1 +#define MX6DL_PAD_EIM_DA10__GPIO3_IO10             0x18c 0x55c 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_DA10__SRC_BOOT_CFG10         0x18c 0x55c 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_DA10__EPDC_DATA01            0x18c 0x55c 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_DA11__EIM_AD11               0x190 0x560 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_DA11__IPU1_DI1_PIN02         0x190 0x560 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_DA11__IPU1_CSI1_HSYNC        0x190 0x560 0x8b4 0x2 0x0 +#define MX6DL_PAD_EIM_DA11__GPIO3_IO11             0x190 0x560 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_DA11__SRC_BOOT_CFG11         0x190 0x560 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_DA11__EPDC_DATA03            0x190 0x560 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_DA12__EIM_AD12               0x194 0x564 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_DA12__IPU1_DI1_PIN03         0x194 0x564 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_DA12__IPU1_CSI1_VSYNC        0x194 0x564 0x8bc 0x2 0x1 +#define MX6DL_PAD_EIM_DA12__GPIO3_IO12             0x194 0x564 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_DA12__SRC_BOOT_CFG12         0x194 0x564 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_DA12__EPDC_DATA02            0x194 0x564 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_DA13__EIM_AD13               0x198 0x568 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_DA13__IPU1_DI1_D0_CS         0x198 0x568 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_DA13__GPIO3_IO13             0x198 0x568 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_DA13__SRC_BOOT_CFG13         0x198 0x568 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_DA13__EPDC_DATA13            0x198 0x568 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_DA14__EIM_AD14               0x19c 0x56c 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_DA14__IPU1_DI1_D1_CS         0x19c 0x56c 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_DA14__GPIO3_IO14             0x19c 0x56c 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_DA14__SRC_BOOT_CFG14         0x19c 0x56c 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_DA14__EPDC_DATA14            0x19c 0x56c 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_DA15__EIM_AD15               0x1a0 0x570 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_DA15__IPU1_DI1_PIN01         0x1a0 0x570 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_DA15__IPU1_DI1_PIN04         0x1a0 0x570 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_DA15__GPIO3_IO15             0x1a0 0x570 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_DA15__SRC_BOOT_CFG15         0x1a0 0x570 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_DA15__EPDC_DATA09            0x1a0 0x570 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_DA2__EIM_AD02                0x1a4 0x574 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_DA2__IPU1_DISP1_DATA07       0x1a4 0x574 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_DA2__IPU1_CSI1_DATA07        0x1a4 0x574 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_DA2__GPIO3_IO02              0x1a4 0x574 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_DA2__SRC_BOOT_CFG02          0x1a4 0x574 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_DA2__EPDC_BDR0               0x1a4 0x574 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_DA3__EIM_AD03                0x1a8 0x578 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_DA3__IPU1_DISP1_DATA06       0x1a8 0x578 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_DA3__IPU1_CSI1_DATA06        0x1a8 0x578 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_DA3__GPIO3_IO03              0x1a8 0x578 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_DA3__SRC_BOOT_CFG03          0x1a8 0x578 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_DA3__EPDC_BDR1               0x1a8 0x578 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_DA4__EIM_AD04                0x1ac 0x57c 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_DA4__IPU1_DISP1_DATA05       0x1ac 0x57c 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_DA4__IPU1_CSI1_DATA05        0x1ac 0x57c 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_DA4__GPIO3_IO04              0x1ac 0x57c 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_DA4__SRC_BOOT_CFG04          0x1ac 0x57c 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_DA4__EPDC_SDCE0              0x1ac 0x57c 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_DA5__EIM_AD05                0x1b0 0x580 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_DA5__IPU1_DISP1_DATA04       0x1b0 0x580 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_DA5__IPU1_CSI1_DATA04        0x1b0 0x580 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_DA5__GPIO3_IO05              0x1b0 0x580 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_DA5__SRC_BOOT_CFG05          0x1b0 0x580 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_DA5__EPDC_SDCE1              0x1b0 0x580 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_DA6__EIM_AD06                0x1b4 0x584 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_DA6__IPU1_DISP1_DATA03       0x1b4 0x584 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_DA6__IPU1_CSI1_DATA03        0x1b4 0x584 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_DA6__GPIO3_IO06              0x1b4 0x584 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_DA6__SRC_BOOT_CFG06          0x1b4 0x584 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_DA6__EPDC_SDCE2              0x1b4 0x584 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_DA7__EIM_AD07                0x1b8 0x588 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_DA7__IPU1_DISP1_DATA02       0x1b8 0x588 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_DA7__IPU1_CSI1_DATA02        0x1b8 0x588 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_DA7__GPIO3_IO07              0x1b8 0x588 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_DA7__SRC_BOOT_CFG07          0x1b8 0x588 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_DA7__EPDC_SDCE3              0x1b8 0x588 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_DA8__EIM_AD08                0x1bc 0x58c 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_DA8__IPU1_DISP1_DATA01       0x1bc 0x58c 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_DA8__IPU1_CSI1_DATA01        0x1bc 0x58c 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_DA8__GPIO3_IO08              0x1bc 0x58c 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_DA8__SRC_BOOT_CFG08          0x1bc 0x58c 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_DA8__EPDC_SDCE4              0x1bc 0x58c 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_DA9__EIM_AD09                0x1c0 0x590 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_DA9__IPU1_DISP1_DATA00       0x1c0 0x590 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_DA9__IPU1_CSI1_DATA00        0x1c0 0x590 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_DA9__GPIO3_IO09              0x1c0 0x590 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_DA9__SRC_BOOT_CFG09          0x1c0 0x590 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_DA9__EPDC_SDCE5              0x1c0 0x590 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_EB0__EIM_EB0_B               0x1c4 0x594 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_EB0__IPU1_DISP1_DATA11       0x1c4 0x594 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_EB0__IPU1_CSI1_DATA11        0x1c4 0x594 0x88c 0x2 0x1 +#define MX6DL_PAD_EIM_EB0__CCM_PMIC_READY          0x1c4 0x594 0x7d4 0x4 0x0 +#define MX6DL_PAD_EIM_EB0__GPIO2_IO28              0x1c4 0x594 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_EB0__SRC_BOOT_CFG27          0x1c4 0x594 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_EB0__EPDC_PWR_COM            0x1c4 0x594 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_EB1__EIM_EB1_B               0x1c8 0x598 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_EB1__IPU1_DISP1_DATA10       0x1c8 0x598 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_EB1__IPU1_CSI1_DATA10        0x1c8 0x598 0x888 0x2 0x1 +#define MX6DL_PAD_EIM_EB1__GPIO2_IO29              0x1c8 0x598 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_EB1__SRC_BOOT_CFG28          0x1c8 0x598 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_EB1__EPDC_SDSHR              0x1c8 0x598 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_EB2__EIM_EB2_B               0x1cc 0x59c 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_EB2__ECSPI1_SS0              0x1cc 0x59c 0x7e4 0x1 0x2 +#define MX6DL_PAD_EIM_EB2__IPU1_CSI1_DATA19        0x1cc 0x59c 0x8ac 0x3 0x1 +#define MX6DL_PAD_EIM_EB2__HDMI_TX_DDC_SCL         0x1cc 0x59c 0x860 0x4 0x0 +#define MX6DL_PAD_EIM_EB2__GPIO2_IO30              0x1cc 0x59c 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_EB2__I2C2_SCL                0x1cc 0x59c 0x870 0x6 0x0 +#define MX6DL_PAD_EIM_EB2__SRC_BOOT_CFG30          0x1cc 0x59c 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_EB2__EPDC_DATA05             0x1cc 0x59c 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_EB3__EIM_EB3_B               0x1d0 0x5a0 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_EB3__ECSPI4_RDY              0x1d0 0x5a0 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_EB3__UART3_RTS_B             0x1d0 0x5a0 0x908 0x2 0x3 +#define MX6DL_PAD_EIM_EB3__UART3_CTS_B             0x1d0 0x5a0 0x000 0x2 0x0 +#define MX6DL_PAD_EIM_EB3__UART1_RI_B              0x1d0 0x5a0 0x000 0x3 0x0 +#define MX6DL_PAD_EIM_EB3__IPU1_CSI1_HSYNC         0x1d0 0x5a0 0x8b4 0x4 0x1 +#define MX6DL_PAD_EIM_EB3__GPIO2_IO31              0x1d0 0x5a0 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_EB3__IPU1_DI1_PIN03          0x1d0 0x5a0 0x000 0x6 0x0 +#define MX6DL_PAD_EIM_EB3__SRC_BOOT_CFG31          0x1d0 0x5a0 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_EB3__EPDC_SDCE0              0x1d0 0x5a0 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_EB3__EIM_ACLK_FREERUN        0x1d0 0x5a0 0x000 0x9 0x0 +#define MX6DL_PAD_EIM_LBA__EIM_LBA_B               0x1d4 0x5a4 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_LBA__IPU1_DI1_PIN17          0x1d4 0x5a4 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_LBA__ECSPI2_SS1              0x1d4 0x5a4 0x804 0x2 0x1 +#define MX6DL_PAD_EIM_LBA__GPIO2_IO27              0x1d4 0x5a4 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_LBA__SRC_BOOT_CFG26          0x1d4 0x5a4 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_LBA__EPDC_DATA04             0x1d4 0x5a4 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_OE__EIM_OE_B                 0x1d8 0x5a8 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_OE__IPU1_DI1_PIN07           0x1d8 0x5a8 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_OE__ECSPI2_MISO              0x1d8 0x5a8 0x7f8 0x2 0x2 +#define MX6DL_PAD_EIM_OE__GPIO2_IO25               0x1d8 0x5a8 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_OE__EPDC_PWR_IRQ             0x1d8 0x5a8 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_RW__EIM_RW                   0x1dc 0x5ac 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_RW__IPU1_DI1_PIN08           0x1dc 0x5ac 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_RW__ECSPI2_SS0               0x1dc 0x5ac 0x800 0x2 0x2 +#define MX6DL_PAD_EIM_RW__GPIO2_IO26               0x1dc 0x5ac 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_RW__SRC_BOOT_CFG29           0x1dc 0x5ac 0x000 0x7 0x0 +#define MX6DL_PAD_EIM_RW__EPDC_DATA07              0x1dc 0x5ac 0x000 0x8 0x0 +#define MX6DL_PAD_EIM_WAIT__EIM_WAIT_B             0x1e0 0x5b0 0x000 0x0 0x0 +#define MX6DL_PAD_EIM_WAIT__EIM_DTACK_B            0x1e0 0x5b0 0x000 0x1 0x0 +#define MX6DL_PAD_EIM_WAIT__GPIO5_IO00             0x1e0 0x5b0 0x000 0x5 0x0 +#define MX6DL_PAD_EIM_WAIT__SRC_BOOT_CFG25         0x1e0 0x5b0 0x000 0x7 0x0 +#define MX6DL_PAD_ENET_CRS_DV__ENET_RX_EN          0x1e4 0x5b4 0x828 0x1 0x0 +#define MX6DL_PAD_ENET_CRS_DV__ESAI_TX_CLK         0x1e4 0x5b4 0x840 0x2 0x0 +#define MX6DL_PAD_ENET_CRS_DV__SPDIF_EXT_CLK       0x1e4 0x5b4 0x8f4 0x3 0x0 +#define MX6DL_PAD_ENET_CRS_DV__GPIO1_IO25          0x1e4 0x5b4 0x000 0x5 0x0 +#define MX6DL_PAD_ENET_MDC__MLB_DATA               0x1e8 0x5b8 0x8e0 0x0 0x0 +#define MX6DL_PAD_ENET_MDC__ENET_MDC               0x1e8 0x5b8 0x000 0x1 0x0 +#define MX6DL_PAD_ENET_MDC__ESAI_TX5_RX0           0x1e8 0x5b8 0x858 0x2 0x0 +#define MX6DL_PAD_ENET_MDC__ENET_1588_EVENT1_IN    0x1e8 0x5b8 0x000 0x4 0x0 +#define MX6DL_PAD_ENET_MDC__GPIO1_IO31             0x1e8 0x5b8 0x000 0x5 0x0 +#define MX6DL_PAD_ENET_MDIO__ENET_MDIO             0x1ec 0x5bc 0x810 0x1 0x0 +#define MX6DL_PAD_ENET_MDIO__ESAI_RX_CLK           0x1ec 0x5bc 0x83c 0x2 0x0 +#define MX6DL_PAD_ENET_MDIO__ENET_1588_EVENT1_OUT  0x1ec 0x5bc 0x000 0x4 0x0 +#define MX6DL_PAD_ENET_MDIO__GPIO1_IO22            0x1ec 0x5bc 0x000 0x5 0x0 +#define MX6DL_PAD_ENET_MDIO__SPDIF_LOCK            0x1ec 0x5bc 0x000 0x6 0x0 +#define MX6DL_PAD_ENET_REF_CLK__ENET_TX_CLK        0x1f0 0x5c0 0x000 0x1 0x0 +#define MX6DL_PAD_ENET_REF_CLK__ESAI_RX_FS         0x1f0 0x5c0 0x82c 0x2 0x0 +#define MX6DL_PAD_ENET_REF_CLK__GPIO1_IO23         0x1f0 0x5c0 0x000 0x5 0x0 +#define MX6DL_PAD_ENET_REF_CLK__SPDIF_SR_CLK       0x1f0 0x5c0 0x000 0x6 0x0 +#define MX6DL_PAD_ENET_RX_ER__USB_OTG_ID           0x1f4 0x5c4 0x790 0x0 0x0 +#define MX6DL_PAD_ENET_RX_ER__ENET_RX_ER           0x1f4 0x5c4 0x000 0x1 0x0 +#define MX6DL_PAD_ENET_RX_ER__ESAI_RX_HF_CLK       0x1f4 0x5c4 0x834 0x2 0x0 +#define MX6DL_PAD_ENET_RX_ER__SPDIF_IN             0x1f4 0x5c4 0x8f0 0x3 0x1 +#define MX6DL_PAD_ENET_RX_ER__ENET_1588_EVENT2_OUT 0x1f4 0x5c4 0x000 0x4 0x0 +#define MX6DL_PAD_ENET_RX_ER__GPIO1_IO24           0x1f4 0x5c4 0x000 0x5 0x0 +#define MX6DL_PAD_ENET_RXD0__ENET_RX_DATA0         0x1f8 0x5c8 0x818 0x1 0x0 +#define MX6DL_PAD_ENET_RXD0__ESAI_TX_HF_CLK        0x1f8 0x5c8 0x838 0x2 0x0 +#define MX6DL_PAD_ENET_RXD0__SPDIF_OUT             0x1f8 0x5c8 0x000 0x3 0x0 +#define MX6DL_PAD_ENET_RXD0__GPIO1_IO27            0x1f8 0x5c8 0x000 0x5 0x0 +#define MX6DL_PAD_ENET_RXD1__MLB_SIG               0x1fc 0x5cc 0x8e4 0x0 0x0 +#define MX6DL_PAD_ENET_RXD1__ENET_RX_DATA1         0x1fc 0x5cc 0x81c 0x1 0x0 +#define MX6DL_PAD_ENET_RXD1__ESAI_TX_FS            0x1fc 0x5cc 0x830 0x2 0x0 +#define MX6DL_PAD_ENET_RXD1__ENET_1588_EVENT3_OUT  0x1fc 0x5cc 0x000 0x4 0x0 +#define MX6DL_PAD_ENET_RXD1__GPIO1_IO26            0x1fc 0x5cc 0x000 0x5 0x0 +#define MX6DL_PAD_ENET_TX_EN__ENET_TX_EN           0x200 0x5d0 0x000 0x1 0x0 +#define MX6DL_PAD_ENET_TX_EN__ESAI_TX3_RX2         0x200 0x5d0 0x850 0x2 0x0 +#define MX6DL_PAD_ENET_TX_EN__GPIO1_IO28           0x200 0x5d0 0x000 0x5 0x0 +#define MX6DL_PAD_ENET_TX_EN__I2C4_SCL             0x200 0x5d0 0x880 0x9 0x0 +#define MX6DL_PAD_ENET_TXD0__ENET_TX_DATA0         0x204 0x5d4 0x000 0x1 0x0 +#define MX6DL_PAD_ENET_TXD0__ESAI_TX4_RX1          0x204 0x5d4 0x854 0x2 0x0 +#define MX6DL_PAD_ENET_TXD0__GPIO1_IO30            0x204 0x5d4 0x000 0x5 0x0 +#define MX6DL_PAD_ENET_TXD1__MLB_CLK               0x208 0x5d8 0x8dc 0x0 0x0 +#define MX6DL_PAD_ENET_TXD1__ENET_TX_DATA1         0x208 0x5d8 0x000 0x1 0x0 +#define MX6DL_PAD_ENET_TXD1__ESAI_TX2_RX3          0x208 0x5d8 0x84c 0x2 0x0 +#define MX6DL_PAD_ENET_TXD1__ENET_1588_EVENT0_IN   0x208 0x5d8 0x000 0x4 0x0 +#define MX6DL_PAD_ENET_TXD1__GPIO1_IO29            0x208 0x5d8 0x000 0x5 0x0 +#define MX6DL_PAD_ENET_TXD1__I2C4_SDA              0x208 0x5d8 0x884 0x9 0x0 +#define MX6DL_PAD_GPIO_0__CCM_CLKO1                0x20c 0x5dc 0x000 0x0 0x0 +#define MX6DL_PAD_GPIO_0__KEY_COL5                 0x20c 0x5dc 0x8c0 0x2 0x1 +#define MX6DL_PAD_GPIO_0__ASRC_EXT_CLK             0x20c 0x5dc 0x794 0x3 0x0 +#define MX6DL_PAD_GPIO_0__EPIT1_OUT                0x20c 0x5dc 0x000 0x4 0x0 +#define MX6DL_PAD_GPIO_0__GPIO1_IO00               0x20c 0x5dc 0x000 0x5 0x0 +#define MX6DL_PAD_GPIO_0__USB_H1_PWR               0x20c 0x5dc 0x000 0x6 0x0 +#define MX6DL_PAD_GPIO_0__SNVS_VIO_5               0x20c 0x5dc 0x000 0x7 0x0 +#define MX6DL_PAD_GPIO_1__ESAI_RX_CLK              0x210 0x5e0 0x83c 0x0 0x1 +#define MX6DL_PAD_GPIO_1__WDOG2_B                  0x210 0x5e0 0x000 0x1 0x0 +#define MX6DL_PAD_GPIO_1__KEY_ROW5                 0x210 0x5e0 0x8cc 0x2 0x1 +#define MX6DL_PAD_GPIO_1__USB_OTG_ID               0x210 0x5e0 0x790 0x3 0x1 +#define MX6DL_PAD_GPIO_1__PWM2_OUT                 0x210 0x5e0 0x000 0x4 0x0 +#define MX6DL_PAD_GPIO_1__GPIO1_IO01               0x210 0x5e0 0x000 0x5 0x0 +#define MX6DL_PAD_GPIO_1__SD1_CD_B                 0x210 0x5e0 0x000 0x6 0x0 +#define MX6DL_PAD_GPIO_16__ESAI_TX3_RX2            0x214 0x5e4 0x850 0x0 0x1 +#define MX6DL_PAD_GPIO_16__ENET_1588_EVENT2_IN     0x214 0x5e4 0x000 0x1 0x0 +#define MX6DL_PAD_GPIO_16__ENET_REF_CLK            0x214 0x5e4 0x80c 0x2 0x0 +#define MX6DL_PAD_GPIO_16__SD1_LCTL                0x214 0x5e4 0x000 0x3 0x0 +#define MX6DL_PAD_GPIO_16__SPDIF_IN                0x214 0x5e4 0x8f0 0x4 0x2 +#define MX6DL_PAD_GPIO_16__GPIO7_IO11              0x214 0x5e4 0x000 0x5 0x0 +#define MX6DL_PAD_GPIO_16__I2C3_SDA                0x214 0x5e4 0x87c 0x6 0x1 +#define MX6DL_PAD_GPIO_16__JTAG_DE_B               0x214 0x5e4 0x000 0x7 0x0 +#define MX6DL_PAD_GPIO_17__ESAI_TX0                0x218 0x5e8 0x844 0x0 0x0 +#define MX6DL_PAD_GPIO_17__ENET_1588_EVENT3_IN     0x218 0x5e8 0x000 0x1 0x0 +#define MX6DL_PAD_GPIO_17__CCM_PMIC_READY          0x218 0x5e8 0x7d4 0x2 0x1 +#define MX6DL_PAD_GPIO_17__SDMA_EXT_EVENT0         0x218 0x5e8 0x8e8 0x3 0x1 +#define MX6DL_PAD_GPIO_17__SPDIF_OUT               0x218 0x5e8 0x000 0x4 0x0 +#define MX6DL_PAD_GPIO_17__GPIO7_IO12              0x218 0x5e8 0x000 0x5 0x0 +#define MX6DL_PAD_GPIO_18__ESAI_TX1                0x21c 0x5ec 0x848 0x0 0x0 +#define MX6DL_PAD_GPIO_18__ENET_RX_CLK             0x21c 0x5ec 0x814 0x1 0x0 +#define MX6DL_PAD_GPIO_18__SD3_VSELECT             0x21c 0x5ec 0x000 0x2 0x0 +#define MX6DL_PAD_GPIO_18__SDMA_EXT_EVENT1         0x21c 0x5ec 0x8ec 0x3 0x1 +#define MX6DL_PAD_GPIO_18__ASRC_EXT_CLK            0x21c 0x5ec 0x794 0x4 0x1 +#define MX6DL_PAD_GPIO_18__GPIO7_IO13              0x21c 0x5ec 0x000 0x5 0x0 +#define MX6DL_PAD_GPIO_18__SNVS_VIO_5_CTL          0x21c 0x5ec 0x000 0x6 0x0 +#define MX6DL_PAD_GPIO_19__KEY_COL5                0x220 0x5f0 0x8c0 0x0 0x2 +#define MX6DL_PAD_GPIO_19__ENET_1588_EVENT0_OUT    0x220 0x5f0 0x000 0x1 0x0 +#define MX6DL_PAD_GPIO_19__SPDIF_OUT               0x220 0x5f0 0x000 0x2 0x0 +#define MX6DL_PAD_GPIO_19__CCM_CLKO1               0x220 0x5f0 0x000 0x3 0x0 +#define MX6DL_PAD_GPIO_19__ECSPI1_RDY              0x220 0x5f0 0x000 0x4 0x0 +#define MX6DL_PAD_GPIO_19__GPIO4_IO05              0x220 0x5f0 0x000 0x5 0x0 +#define MX6DL_PAD_GPIO_19__ENET_TX_ER              0x220 0x5f0 0x000 0x6 0x0 +#define MX6DL_PAD_GPIO_2__ESAI_TX_FS               0x224 0x5f4 0x830 0x0 0x1 +#define MX6DL_PAD_GPIO_2__KEY_ROW6                 0x224 0x5f4 0x8d0 0x2 0x1 +#define MX6DL_PAD_GPIO_2__GPIO1_IO02               0x224 0x5f4 0x000 0x5 0x0 +#define MX6DL_PAD_GPIO_2__SD2_WP                   0x224 0x5f4 0x000 0x6 0x0 +#define MX6DL_PAD_GPIO_2__MLB_DATA                 0x224 0x5f4 0x8e0 0x7 0x1 +#define MX6DL_PAD_GPIO_3__ESAI_RX_HF_CLK           0x228 0x5f8 0x834 0x0 0x1 +#define MX6DL_PAD_GPIO_3__I2C3_SCL                 0x228 0x5f8 0x878 0x2 0x1 +#define MX6DL_PAD_GPIO_3__XTALOSC_REF_CLK_24M      0x228 0x5f8 0x000 0x3 0x0 +#define MX6DL_PAD_GPIO_3__CCM_CLKO2                0x228 0x5f8 0x000 0x4 0x0 +#define MX6DL_PAD_GPIO_3__GPIO1_IO03               0x228 0x5f8 0x000 0x5 0x0 +#define MX6DL_PAD_GPIO_3__USB_H1_OC                0x228 0x5f8 0x924 0x6 0x1 +#define MX6DL_PAD_GPIO_3__MLB_CLK                  0x228 0x5f8 0x8dc 0x7 0x1 +#define MX6DL_PAD_GPIO_4__ESAI_TX_HF_CLK           0x22c 0x5fc 0x838 0x0 0x1 +#define MX6DL_PAD_GPIO_4__KEY_COL7                 0x22c 0x5fc 0x8c8 0x2 0x1 +#define MX6DL_PAD_GPIO_4__GPIO1_IO04               0x22c 0x5fc 0x000 0x5 0x0 +#define MX6DL_PAD_GPIO_4__SD2_CD_B                 0x22c 0x5fc 0x000 0x6 0x0 +#define MX6DL_PAD_GPIO_5__ESAI_TX2_RX3             0x230 0x600 0x84c 0x0 0x1 +#define MX6DL_PAD_GPIO_5__KEY_ROW7                 0x230 0x600 0x8d4 0x2 0x1 +#define MX6DL_PAD_GPIO_5__CCM_CLKO1                0x230 0x600 0x000 0x3 0x0 +#define MX6DL_PAD_GPIO_5__GPIO1_IO05               0x230 0x600 0x000 0x5 0x0 +#define MX6DL_PAD_GPIO_5__I2C3_SCL                 0x230 0x600 0x878 0x6 0x2 +#define MX6DL_PAD_GPIO_5__ARM_EVENTI               0x230 0x600 0x000 0x7 0x0 +#define MX6DL_PAD_GPIO_6__ESAI_TX_CLK              0x234 0x604 0x840 0x0 0x1 +#define MX6DL_PAD_GPIO_6__I2C3_SDA                 0x234 0x604 0x87c 0x2 0x2 +#define MX6DL_PAD_GPIO_6__GPIO1_IO06               0x234 0x604 0x000 0x5 0x0 +#define MX6DL_PAD_GPIO_6__SD2_LCTL                 0x234 0x604 0x000 0x6 0x0 +#define MX6DL_PAD_GPIO_6__MLB_SIG                  0x234 0x604 0x8e4 0x7 0x1 +#define MX6DL_PAD_GPIO_7__ESAI_TX4_RX1             0x238 0x608 0x854 0x0 0x1 +#define MX6DL_PAD_GPIO_7__EPIT1_OUT                0x238 0x608 0x000 0x2 0x0 +#define MX6DL_PAD_GPIO_7__FLEXCAN1_TX              0x238 0x608 0x000 0x3 0x0 +#define MX6DL_PAD_GPIO_7__UART2_TX_DATA            0x238 0x608 0x000 0x4 0x0 +#define MX6DL_PAD_GPIO_7__UART2_RX_DATA            0x238 0x608 0x904 0x4 0x2 +#define MX6DL_PAD_GPIO_7__GPIO1_IO07               0x238 0x608 0x000 0x5 0x0 +#define MX6DL_PAD_GPIO_7__SPDIF_LOCK               0x238 0x608 0x000 0x6 0x0 +#define MX6DL_PAD_GPIO_7__USB_OTG_HOST_MODE        0x238 0x608 0x000 0x7 0x0 +#define MX6DL_PAD_GPIO_7__I2C4_SCL                 0x238 0x608 0x880 0x8 0x1 +#define MX6DL_PAD_GPIO_8__ESAI_TX5_RX0             0x23c 0x60c 0x858 0x0 0x1 +#define MX6DL_PAD_GPIO_8__XTALOSC_REF_CLK_32K      0x23c 0x60c 0x000 0x1 0x0 +#define MX6DL_PAD_GPIO_8__EPIT2_OUT                0x23c 0x60c 0x000 0x2 0x0 +#define MX6DL_PAD_GPIO_8__FLEXCAN1_RX              0x23c 0x60c 0x7c8 0x3 0x0 +#define MX6DL_PAD_GPIO_8__UART2_RX_DATA            0x23c 0x60c 0x904 0x4 0x3 +#define MX6DL_PAD_GPIO_8__UART2_TX_DATA            0x23c 0x60c 0x000 0x4 0x0 +#define MX6DL_PAD_GPIO_8__GPIO1_IO08               0x23c 0x60c 0x000 0x5 0x0 +#define MX6DL_PAD_GPIO_8__SPDIF_SR_CLK             0x23c 0x60c 0x000 0x6 0x0 +#define MX6DL_PAD_GPIO_8__USB_OTG_PWR_CTL_WAKE     0x23c 0x60c 0x000 0x7 0x0 +#define MX6DL_PAD_GPIO_8__I2C4_SDA                 0x23c 0x60c 0x884 0x8 0x1 +#define MX6DL_PAD_GPIO_9__ESAI_RX_FS               0x240 0x610 0x82c 0x0 0x1 +#define MX6DL_PAD_GPIO_9__WDOG1_B                  0x240 0x610 0x000 0x1 0x0 +#define MX6DL_PAD_GPIO_9__KEY_COL6                 0x240 0x610 0x8c4 0x2 0x1 +#define MX6DL_PAD_GPIO_9__CCM_REF_EN_B             0x240 0x610 0x000 0x3 0x0 +#define MX6DL_PAD_GPIO_9__PWM1_OUT                 0x240 0x610 0x000 0x4 0x0 +#define MX6DL_PAD_GPIO_9__GPIO1_IO09               0x240 0x610 0x000 0x5 0x0 +#define MX6DL_PAD_GPIO_9__SD1_WP                   0x240 0x610 0x92c 0x6 0x1 +#define MX6DL_PAD_KEY_COL0__ECSPI1_SCLK            0x244 0x62c 0x7d8 0x0 0x3 +#define MX6DL_PAD_KEY_COL0__ENET_RX_DATA3          0x244 0x62c 0x824 0x1 0x0 +#define MX6DL_PAD_KEY_COL0__AUD5_TXC               0x244 0x62c 0x7c0 0x2 0x1 +#define MX6DL_PAD_KEY_COL0__KEY_COL0               0x244 0x62c 0x000 0x3 0x0 +#define MX6DL_PAD_KEY_COL0__UART4_TX_DATA          0x244 0x62c 0x000 0x4 0x0 +#define MX6DL_PAD_KEY_COL0__UART4_RX_DATA          0x244 0x62c 0x914 0x4 0x2 +#define MX6DL_PAD_KEY_COL0__GPIO4_IO06             0x244 0x62c 0x000 0x5 0x0 +#define MX6DL_PAD_KEY_COL0__DCIC1_OUT              0x244 0x62c 0x000 0x6 0x0 +#define MX6DL_PAD_KEY_COL1__ECSPI1_MISO            0x248 0x630 0x7dc 0x0 0x3 +#define MX6DL_PAD_KEY_COL1__ENET_MDIO              0x248 0x630 0x810 0x1 0x1 +#define MX6DL_PAD_KEY_COL1__AUD5_TXFS              0x248 0x630 0x7c4 0x2 0x1 +#define MX6DL_PAD_KEY_COL1__KEY_COL1               0x248 0x630 0x000 0x3 0x0 +#define MX6DL_PAD_KEY_COL1__UART5_TX_DATA          0x248 0x630 0x000 0x4 0x0 +#define MX6DL_PAD_KEY_COL1__UART5_RX_DATA          0x248 0x630 0x91c 0x4 0x2 +#define MX6DL_PAD_KEY_COL1__GPIO4_IO08             0x248 0x630 0x000 0x5 0x0 +#define MX6DL_PAD_KEY_COL1__SD1_VSELECT            0x248 0x630 0x000 0x6 0x0 +#define MX6DL_PAD_KEY_COL2__ECSPI1_SS1             0x24c 0x634 0x7e8 0x0 0x2 +#define MX6DL_PAD_KEY_COL2__ENET_RX_DATA2          0x24c 0x634 0x820 0x1 0x0 +#define MX6DL_PAD_KEY_COL2__FLEXCAN1_TX            0x24c 0x634 0x000 0x2 0x0 +#define MX6DL_PAD_KEY_COL2__KEY_COL2               0x24c 0x634 0x000 0x3 0x0 +#define MX6DL_PAD_KEY_COL2__ENET_MDC               0x24c 0x634 0x000 0x4 0x0 +#define MX6DL_PAD_KEY_COL2__GPIO4_IO10             0x24c 0x634 0x000 0x5 0x0 +#define MX6DL_PAD_KEY_COL2__USB_H1_PWR_CTL_WAKE    0x24c 0x634 0x000 0x6 0x0 +#define MX6DL_PAD_KEY_COL3__ECSPI1_SS3             0x250 0x638 0x7f0 0x0 0x1 +#define MX6DL_PAD_KEY_COL3__ENET_CRS               0x250 0x638 0x000 0x1 0x0 +#define MX6DL_PAD_KEY_COL3__HDMI_TX_DDC_SCL        0x250 0x638 0x860 0x2 0x1 +#define MX6DL_PAD_KEY_COL3__KEY_COL3               0x250 0x638 0x000 0x3 0x0 +#define MX6DL_PAD_KEY_COL3__I2C2_SCL               0x250 0x638 0x870 0x4 0x1 +#define MX6DL_PAD_KEY_COL3__GPIO4_IO12             0x250 0x638 0x000 0x5 0x0 +#define MX6DL_PAD_KEY_COL3__SPDIF_IN               0x250 0x638 0x8f0 0x6 0x3 +#define MX6DL_PAD_KEY_COL4__FLEXCAN2_TX            0x254 0x63c 0x000 0x0 0x0 +#define MX6DL_PAD_KEY_COL4__IPU1_SISG4             0x254 0x63c 0x000 0x1 0x0 +#define MX6DL_PAD_KEY_COL4__USB_OTG_OC             0x254 0x63c 0x920 0x2 0x1 +#define MX6DL_PAD_KEY_COL4__KEY_COL4               0x254 0x63c 0x000 0x3 0x0 +#define MX6DL_PAD_KEY_COL4__UART5_RTS_B            0x254 0x63c 0x918 0x4 0x2 +#define MX6DL_PAD_KEY_COL4__UART5_CTS_B            0x254 0x63c 0x000 0x4 0x0 +#define MX6DL_PAD_KEY_COL4__GPIO4_IO14             0x254 0x63c 0x000 0x5 0x0 +#define MX6DL_PAD_KEY_ROW0__ECSPI1_MOSI            0x258 0x640 0x7e0 0x0 0x3 +#define MX6DL_PAD_KEY_ROW0__ENET_TX_DATA3          0x258 0x640 0x000 0x1 0x0 +#define MX6DL_PAD_KEY_ROW0__AUD5_TXD               0x258 0x640 0x7b4 0x2 0x1 +#define MX6DL_PAD_KEY_ROW0__KEY_ROW0               0x258 0x640 0x000 0x3 0x0 +#define MX6DL_PAD_KEY_ROW0__UART4_RX_DATA          0x258 0x640 0x914 0x4 0x3 +#define MX6DL_PAD_KEY_ROW0__UART4_TX_DATA          0x258 0x640 0x000 0x4 0x0 +#define MX6DL_PAD_KEY_ROW0__GPIO4_IO07             0x258 0x640 0x000 0x5 0x0 +#define MX6DL_PAD_KEY_ROW0__DCIC2_OUT              0x258 0x640 0x000 0x6 0x0 +#define MX6DL_PAD_KEY_ROW1__ECSPI1_SS0             0x25c 0x644 0x7e4 0x0 0x3 +#define MX6DL_PAD_KEY_ROW1__ENET_COL               0x25c 0x644 0x000 0x1 0x0 +#define MX6DL_PAD_KEY_ROW1__AUD5_RXD               0x25c 0x644 0x7b0 0x2 0x1 +#define MX6DL_PAD_KEY_ROW1__KEY_ROW1               0x25c 0x644 0x000 0x3 0x0 +#define MX6DL_PAD_KEY_ROW1__UART5_RX_DATA          0x25c 0x644 0x91c 0x4 0x3 +#define MX6DL_PAD_KEY_ROW1__UART5_TX_DATA          0x25c 0x644 0x000 0x4 0x0 +#define MX6DL_PAD_KEY_ROW1__GPIO4_IO09             0x25c 0x644 0x000 0x5 0x0 +#define MX6DL_PAD_KEY_ROW1__SD2_VSELECT            0x25c 0x644 0x000 0x6 0x0 +#define MX6DL_PAD_KEY_ROW2__ECSPI1_SS2             0x260 0x648 0x7ec 0x0 0x1 +#define MX6DL_PAD_KEY_ROW2__ENET_TX_DATA2          0x260 0x648 0x000 0x1 0x0 +#define MX6DL_PAD_KEY_ROW2__FLEXCAN1_RX            0x260 0x648 0x7c8 0x2 0x1 +#define MX6DL_PAD_KEY_ROW2__KEY_ROW2               0x260 0x648 0x000 0x3 0x0 +#define MX6DL_PAD_KEY_ROW2__SD2_VSELECT            0x260 0x648 0x000 0x4 0x0 +#define MX6DL_PAD_KEY_ROW2__GPIO4_IO11             0x260 0x648 0x000 0x5 0x0 +#define MX6DL_PAD_KEY_ROW2__HDMI_TX_CEC_LINE       0x260 0x648 0x85c 0x6 0x1 +#define MX6DL_PAD_KEY_ROW3__ASRC_EXT_CLK           0x264 0x64c 0x794 0x1 0x2 +#define MX6DL_PAD_KEY_ROW3__HDMI_TX_DDC_SDA        0x264 0x64c 0x864 0x2 0x1 +#define MX6DL_PAD_KEY_ROW3__KEY_ROW3               0x264 0x64c 0x000 0x3 0x0 +#define MX6DL_PAD_KEY_ROW3__I2C2_SDA               0x264 0x64c 0x874 0x4 0x1 +#define MX6DL_PAD_KEY_ROW3__GPIO4_IO13             0x264 0x64c 0x000 0x5 0x0 +#define MX6DL_PAD_KEY_ROW3__SD1_VSELECT            0x264 0x64c 0x000 0x6 0x0 +#define MX6DL_PAD_KEY_ROW4__FLEXCAN2_RX            0x268 0x650 0x7cc 0x0 0x0 +#define MX6DL_PAD_KEY_ROW4__IPU1_SISG5             0x268 0x650 0x000 0x1 0x0 +#define MX6DL_PAD_KEY_ROW4__USB_OTG_PWR            0x268 0x650 0x000 0x2 0x0 +#define MX6DL_PAD_KEY_ROW4__KEY_ROW4               0x268 0x650 0x000 0x3 0x0 +#define MX6DL_PAD_KEY_ROW4__UART5_CTS_B            0x268 0x650 0x000 0x4 0x0 +#define MX6DL_PAD_KEY_ROW4__UART5_RTS_B            0x268 0x650 0x918 0x4 0x3 +#define MX6DL_PAD_KEY_ROW4__GPIO4_IO15             0x268 0x650 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_ALE__NAND_ALE              0x26c 0x654 0x000 0x0 0x0 +#define MX6DL_PAD_NANDF_ALE__SD4_RESET             0x26c 0x654 0x000 0x1 0x0 +#define MX6DL_PAD_NANDF_ALE__GPIO6_IO08            0x26c 0x654 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_CLE__NAND_CLE              0x270 0x658 0x000 0x0 0x0 +#define MX6DL_PAD_NANDF_CLE__GPIO6_IO07            0x270 0x658 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_CS0__NAND_CE0_B            0x274 0x65c 0x000 0x0 0x0 +#define MX6DL_PAD_NANDF_CS0__GPIO6_IO11            0x274 0x65c 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_CS1__NAND_CE1_B            0x278 0x660 0x000 0x0 0x0 +#define MX6DL_PAD_NANDF_CS1__SD4_VSELECT           0x278 0x660 0x000 0x1 0x0 +#define MX6DL_PAD_NANDF_CS1__SD3_VSELECT           0x278 0x660 0x000 0x2 0x0 +#define MX6DL_PAD_NANDF_CS1__GPIO6_IO14            0x278 0x660 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_CS2__NAND_CE2_B            0x27c 0x664 0x000 0x0 0x0 +#define MX6DL_PAD_NANDF_CS2__IPU1_SISG0            0x27c 0x664 0x000 0x1 0x0 +#define MX6DL_PAD_NANDF_CS2__ESAI_TX0              0x27c 0x664 0x844 0x2 0x1 +#define MX6DL_PAD_NANDF_CS2__EIM_CRE               0x27c 0x664 0x000 0x3 0x0 +#define MX6DL_PAD_NANDF_CS2__CCM_CLKO2             0x27c 0x664 0x000 0x4 0x0 +#define MX6DL_PAD_NANDF_CS2__GPIO6_IO15            0x27c 0x664 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_CS3__NAND_CE3_B            0x280 0x668 0x000 0x0 0x0 +#define MX6DL_PAD_NANDF_CS3__IPU1_SISG1            0x280 0x668 0x000 0x1 0x0 +#define MX6DL_PAD_NANDF_CS3__ESAI_TX1              0x280 0x668 0x848 0x2 0x1 +#define MX6DL_PAD_NANDF_CS3__EIM_ADDR26            0x280 0x668 0x000 0x3 0x0 +#define MX6DL_PAD_NANDF_CS3__GPIO6_IO16            0x280 0x668 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_CS3__I2C4_SDA              0x280 0x668 0x884 0x9 0x2 +#define MX6DL_PAD_NANDF_D0__NAND_DATA00            0x284 0x66c 0x000 0x0 0x0 +#define MX6DL_PAD_NANDF_D0__SD1_DATA4              0x284 0x66c 0x000 0x1 0x0 +#define MX6DL_PAD_NANDF_D0__GPIO2_IO00             0x284 0x66c 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_D1__NAND_DATA01            0x288 0x670 0x000 0x0 0x0 +#define MX6DL_PAD_NANDF_D1__SD1_DATA5              0x288 0x670 0x000 0x1 0x0 +#define MX6DL_PAD_NANDF_D1__GPIO2_IO01             0x288 0x670 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_D2__NAND_DATA02            0x28c 0x674 0x000 0x0 0x0 +#define MX6DL_PAD_NANDF_D2__SD1_DATA6              0x28c 0x674 0x000 0x1 0x0 +#define MX6DL_PAD_NANDF_D2__GPIO2_IO02             0x28c 0x674 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_D3__NAND_DATA03            0x290 0x678 0x000 0x0 0x0 +#define MX6DL_PAD_NANDF_D3__SD1_DATA7              0x290 0x678 0x000 0x1 0x0 +#define MX6DL_PAD_NANDF_D3__GPIO2_IO03             0x290 0x678 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_D4__NAND_DATA04            0x294 0x67c 0x000 0x0 0x0 +#define MX6DL_PAD_NANDF_D4__SD2_DATA4              0x294 0x67c 0x000 0x1 0x0 +#define MX6DL_PAD_NANDF_D4__GPIO2_IO04             0x294 0x67c 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_D5__NAND_DATA05            0x298 0x680 0x000 0x0 0x0 +#define MX6DL_PAD_NANDF_D5__SD2_DATA5              0x298 0x680 0x000 0x1 0x0 +#define MX6DL_PAD_NANDF_D5__GPIO2_IO05             0x298 0x680 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_D6__NAND_DATA06            0x29c 0x684 0x000 0x0 0x0 +#define MX6DL_PAD_NANDF_D6__SD2_DATA6              0x29c 0x684 0x000 0x1 0x0 +#define MX6DL_PAD_NANDF_D6__GPIO2_IO06             0x29c 0x684 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_D7__NAND_DATA07            0x2a0 0x688 0x000 0x0 0x0 +#define MX6DL_PAD_NANDF_D7__SD2_DATA7              0x2a0 0x688 0x000 0x1 0x0 +#define MX6DL_PAD_NANDF_D7__GPIO2_IO07             0x2a0 0x688 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_RB0__NAND_READY_B          0x2a4 0x68c 0x000 0x0 0x0 +#define MX6DL_PAD_NANDF_RB0__GPIO6_IO10            0x2a4 0x68c 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_WP_B__NAND_WP_B            0x2a8 0x690 0x000 0x0 0x0 +#define MX6DL_PAD_NANDF_WP_B__GPIO6_IO09           0x2a8 0x690 0x000 0x5 0x0 +#define MX6DL_PAD_NANDF_WP_B__I2C4_SCL             0x2a8 0x690 0x880 0x9 0x2 +#define MX6DL_PAD_RGMII_RD0__HSI_RX_READY          0x2ac 0x694 0x000 0x0 0x0 +#define MX6DL_PAD_RGMII_RD0__RGMII_RD0             0x2ac 0x694 0x818 0x1 0x1 +#define MX6DL_PAD_RGMII_RD0__GPIO6_IO25            0x2ac 0x694 0x000 0x5 0x0 +#define MX6DL_PAD_RGMII_RD1__HSI_TX_FLAG           0x2b0 0x698 0x000 0x0 0x0 +#define MX6DL_PAD_RGMII_RD1__RGMII_RD1             0x2b0 0x698 0x81c 0x1 0x1 +#define MX6DL_PAD_RGMII_RD1__GPIO6_IO27            0x2b0 0x698 0x000 0x5 0x0 +#define MX6DL_PAD_RGMII_RD2__HSI_TX_DATA           0x2b4 0x69c 0x000 0x0 0x0 +#define MX6DL_PAD_RGMII_RD2__RGMII_RD2             0x2b4 0x69c 0x820 0x1 0x1 +#define MX6DL_PAD_RGMII_RD2__GPIO6_IO28            0x2b4 0x69c 0x000 0x5 0x0 +#define MX6DL_PAD_RGMII_RD3__HSI_TX_WAKE           0x2b8 0x6a0 0x000 0x0 0x0 +#define MX6DL_PAD_RGMII_RD3__RGMII_RD3             0x2b8 0x6a0 0x824 0x1 0x1 +#define MX6DL_PAD_RGMII_RD3__GPIO6_IO29            0x2b8 0x6a0 0x000 0x5 0x0 +#define MX6DL_PAD_RGMII_RX_CTL__USB_H3_DATA        0x2bc 0x6a4 0x000 0x0 0x0 +#define MX6DL_PAD_RGMII_RX_CTL__RGMII_RX_CTL       0x2bc 0x6a4 0x828 0x1 0x1 +#define MX6DL_PAD_RGMII_RX_CTL__GPIO6_IO24         0x2bc 0x6a4 0x000 0x5 0x0 +#define MX6DL_PAD_RGMII_RXC__USB_H3_STROBE         0x2c0 0x6a8 0x000 0x0 0x0 +#define MX6DL_PAD_RGMII_RXC__RGMII_RXC             0x2c0 0x6a8 0x814 0x1 0x1 +#define MX6DL_PAD_RGMII_RXC__GPIO6_IO30            0x2c0 0x6a8 0x000 0x5 0x0 +#define MX6DL_PAD_RGMII_TD0__HSI_TX_READY          0x2c4 0x6ac 0x000 0x0 0x0 +#define MX6DL_PAD_RGMII_TD0__RGMII_TD0             0x2c4 0x6ac 0x000 0x1 0x0 +#define MX6DL_PAD_RGMII_TD0__GPIO6_IO20            0x2c4 0x6ac 0x000 0x5 0x0 +#define MX6DL_PAD_RGMII_TD1__HSI_RX_FLAG           0x2c8 0x6b0 0x000 0x0 0x0 +#define MX6DL_PAD_RGMII_TD1__RGMII_TD1             0x2c8 0x6b0 0x000 0x1 0x0 +#define MX6DL_PAD_RGMII_TD1__GPIO6_IO21            0x2c8 0x6b0 0x000 0x5 0x0 +#define MX6DL_PAD_RGMII_TD2__HSI_RX_DATA           0x2cc 0x6b4 0x000 0x0 0x0 +#define MX6DL_PAD_RGMII_TD2__RGMII_TD2             0x2cc 0x6b4 0x000 0x1 0x0 +#define MX6DL_PAD_RGMII_TD2__GPIO6_IO22            0x2cc 0x6b4 0x000 0x5 0x0 +#define MX6DL_PAD_RGMII_TD3__HSI_RX_WAKE           0x2d0 0x6b8 0x000 0x0 0x0 +#define MX6DL_PAD_RGMII_TD3__RGMII_TD3             0x2d0 0x6b8 0x000 0x1 0x0 +#define MX6DL_PAD_RGMII_TD3__GPIO6_IO23            0x2d0 0x6b8 0x000 0x5 0x0 +#define MX6DL_PAD_RGMII_TX_CTL__USB_H2_STROBE      0x2d4 0x6bc 0x000 0x0 0x0 +#define MX6DL_PAD_RGMII_TX_CTL__RGMII_TX_CTL       0x2d4 0x6bc 0x000 0x1 0x0 +#define MX6DL_PAD_RGMII_TX_CTL__GPIO6_IO26         0x2d4 0x6bc 0x000 0x5 0x0 +#define MX6DL_PAD_RGMII_TX_CTL__ENET_REF_CLK       0x2d4 0x6bc 0x80c 0x7 0x1 +#define MX6DL_PAD_RGMII_TXC__USB_H2_DATA           0x2d8 0x6c0 0x000 0x0 0x0 +#define MX6DL_PAD_RGMII_TXC__RGMII_TXC             0x2d8 0x6c0 0x000 0x1 0x0 +#define MX6DL_PAD_RGMII_TXC__SPDIF_EXT_CLK         0x2d8 0x6c0 0x8f4 0x2 0x1 +#define MX6DL_PAD_RGMII_TXC__GPIO6_IO19            0x2d8 0x6c0 0x000 0x5 0x0 +#define MX6DL_PAD_RGMII_TXC__XTALOSC_REF_CLK_24M   0x2d8 0x6c0 0x000 0x7 0x0 +#define MX6DL_PAD_SD1_CLK__SD1_CLK                 0x2dc 0x6c4 0x928 0x0 0x1 +#define MX6DL_PAD_SD1_CLK__GPT_CLKIN               0x2dc 0x6c4 0x000 0x3 0x0 +#define MX6DL_PAD_SD1_CLK__GPIO1_IO20              0x2dc 0x6c4 0x000 0x5 0x0 +#define MX6DL_PAD_SD1_CMD__SD1_CMD                 0x2e0 0x6c8 0x000 0x0 0x0 +#define MX6DL_PAD_SD1_CMD__PWM4_OUT                0x2e0 0x6c8 0x000 0x2 0x0 +#define MX6DL_PAD_SD1_CMD__GPT_COMPARE1            0x2e0 0x6c8 0x000 0x3 0x0 +#define MX6DL_PAD_SD1_CMD__GPIO1_IO18              0x2e0 0x6c8 0x000 0x5 0x0 +#define MX6DL_PAD_SD1_DAT0__SD1_DATA0              0x2e4 0x6cc 0x000 0x0 0x0 +#define MX6DL_PAD_SD1_DAT0__GPT_CAPTURE1           0x2e4 0x6cc 0x000 0x3 0x0 +#define MX6DL_PAD_SD1_DAT0__GPIO1_IO16             0x2e4 0x6cc 0x000 0x5 0x0 +#define MX6DL_PAD_SD1_DAT1__SD1_DATA1              0x2e8 0x6d0 0x000 0x0 0x0 +#define MX6DL_PAD_SD1_DAT1__PWM3_OUT               0x2e8 0x6d0 0x000 0x2 0x0 +#define MX6DL_PAD_SD1_DAT1__GPT_CAPTURE2           0x2e8 0x6d0 0x000 0x3 0x0 +#define MX6DL_PAD_SD1_DAT1__GPIO1_IO17             0x2e8 0x6d0 0x000 0x5 0x0 +#define MX6DL_PAD_SD1_DAT2__SD1_DATA2              0x2ec 0x6d4 0x000 0x0 0x0 +#define MX6DL_PAD_SD1_DAT2__GPT_COMPARE2           0x2ec 0x6d4 0x000 0x2 0x0 +#define MX6DL_PAD_SD1_DAT2__PWM2_OUT               0x2ec 0x6d4 0x000 0x3 0x0 +#define MX6DL_PAD_SD1_DAT2__WDOG1_B                0x2ec 0x6d4 0x000 0x4 0x0 +#define MX6DL_PAD_SD1_DAT2__GPIO1_IO19             0x2ec 0x6d4 0x000 0x5 0x0 +#define MX6DL_PAD_SD1_DAT2__WDOG1_RESET_B_DEB      0x2ec 0x6d4 0x000 0x6 0x0 +#define MX6DL_PAD_SD1_DAT3__SD1_DATA3              0x2f0 0x6d8 0x000 0x0 0x0 +#define MX6DL_PAD_SD1_DAT3__GPT_COMPARE3           0x2f0 0x6d8 0x000 0x2 0x0 +#define MX6DL_PAD_SD1_DAT3__PWM1_OUT               0x2f0 0x6d8 0x000 0x3 0x0 +#define MX6DL_PAD_SD1_DAT3__WDOG2_B                0x2f0 0x6d8 0x000 0x4 0x0 +#define MX6DL_PAD_SD1_DAT3__GPIO1_IO21             0x2f0 0x6d8 0x000 0x5 0x0 +#define MX6DL_PAD_SD1_DAT3__WDOG2_RESET_B_DEB      0x2f0 0x6d8 0x000 0x6 0x0 +#define MX6DL_PAD_SD2_CLK__SD2_CLK                 0x2f4 0x6dc 0x930 0x0 0x1 +#define MX6DL_PAD_SD2_CLK__KEY_COL5                0x2f4 0x6dc 0x8c0 0x2 0x3 +#define MX6DL_PAD_SD2_CLK__AUD4_RXFS               0x2f4 0x6dc 0x7a4 0x3 0x1 +#define MX6DL_PAD_SD2_CLK__GPIO1_IO10              0x2f4 0x6dc 0x000 0x5 0x0 +#define MX6DL_PAD_SD2_CMD__SD2_CMD                 0x2f8 0x6e0 0x000 0x0 0x0 +#define MX6DL_PAD_SD2_CMD__KEY_ROW5                0x2f8 0x6e0 0x8cc 0x2 0x2 +#define MX6DL_PAD_SD2_CMD__AUD4_RXC                0x2f8 0x6e0 0x7a0 0x3 0x1 +#define MX6DL_PAD_SD2_CMD__GPIO1_IO11              0x2f8 0x6e0 0x000 0x5 0x0 +#define MX6DL_PAD_SD2_DAT0__SD2_DATA0              0x2fc 0x6e4 0x000 0x0 0x0 +#define MX6DL_PAD_SD2_DAT0__AUD4_RXD               0x2fc 0x6e4 0x798 0x3 0x1 +#define MX6DL_PAD_SD2_DAT0__KEY_ROW7               0x2fc 0x6e4 0x8d4 0x4 0x2 +#define MX6DL_PAD_SD2_DAT0__GPIO1_IO15             0x2fc 0x6e4 0x000 0x5 0x0 +#define MX6DL_PAD_SD2_DAT0__DCIC2_OUT              0x2fc 0x6e4 0x000 0x6 0x0 +#define MX6DL_PAD_SD2_DAT1__SD2_DATA1              0x300 0x6e8 0x000 0x0 0x0 +#define MX6DL_PAD_SD2_DAT1__EIM_CS2_B              0x300 0x6e8 0x000 0x2 0x0 +#define MX6DL_PAD_SD2_DAT1__AUD4_TXFS              0x300 0x6e8 0x7ac 0x3 0x1 +#define MX6DL_PAD_SD2_DAT1__KEY_COL7               0x300 0x6e8 0x8c8 0x4 0x2 +#define MX6DL_PAD_SD2_DAT1__GPIO1_IO14             0x300 0x6e8 0x000 0x5 0x0 +#define MX6DL_PAD_SD2_DAT2__SD2_DATA2              0x304 0x6ec 0x000 0x0 0x0 +#define MX6DL_PAD_SD2_DAT2__EIM_CS3_B              0x304 0x6ec 0x000 0x2 0x0 +#define MX6DL_PAD_SD2_DAT2__AUD4_TXD               0x304 0x6ec 0x79c 0x3 0x1 +#define MX6DL_PAD_SD2_DAT2__KEY_ROW6               0x304 0x6ec 0x8d0 0x4 0x2 +#define MX6DL_PAD_SD2_DAT2__GPIO1_IO13             0x304 0x6ec 0x000 0x5 0x0 +#define MX6DL_PAD_SD2_DAT3__SD2_DATA3              0x308 0x6f0 0x000 0x0 0x0 +#define MX6DL_PAD_SD2_DAT3__KEY_COL6               0x308 0x6f0 0x8c4 0x2 0x2 +#define MX6DL_PAD_SD2_DAT3__AUD4_TXC               0x308 0x6f0 0x7a8 0x3 0x1 +#define MX6DL_PAD_SD2_DAT3__GPIO1_IO12             0x308 0x6f0 0x000 0x5 0x0 +#define MX6DL_PAD_SD3_CLK__SD3_CLK                 0x30c 0x6f4 0x934 0x0 0x1 +#define MX6DL_PAD_SD3_CLK__UART2_RTS_B             0x30c 0x6f4 0x900 0x1 0x2 +#define MX6DL_PAD_SD3_CLK__UART2_CTS_B             0x30c 0x6f4 0x000 0x1 0x0 +#define MX6DL_PAD_SD3_CLK__FLEXCAN1_RX             0x30c 0x6f4 0x7c8 0x2 0x2 +#define MX6DL_PAD_SD3_CLK__GPIO7_IO03              0x30c 0x6f4 0x000 0x5 0x0 +#define MX6DL_PAD_SD3_CMD__SD3_CMD                 0x310 0x6f8 0x000 0x0 0x0 +#define MX6DL_PAD_SD3_CMD__UART2_CTS_B             0x310 0x6f8 0x000 0x1 0x0 +#define MX6DL_PAD_SD3_CMD__UART2_RTS_B             0x310 0x6f8 0x900 0x1 0x3 +#define MX6DL_PAD_SD3_CMD__FLEXCAN1_TX             0x310 0x6f8 0x000 0x2 0x0 +#define MX6DL_PAD_SD3_CMD__GPIO7_IO02              0x310 0x6f8 0x000 0x5 0x0 +#define MX6DL_PAD_SD3_DAT0__SD3_DATA0              0x314 0x6fc 0x000 0x0 0x0 +#define MX6DL_PAD_SD3_DAT0__UART1_CTS_B            0x314 0x6fc 0x000 0x1 0x0 +#define MX6DL_PAD_SD3_DAT0__UART1_RTS_B            0x314 0x6fc 0x8f8 0x1 0x2 +#define MX6DL_PAD_SD3_DAT0__FLEXCAN2_TX            0x314 0x6fc 0x000 0x2 0x0 +#define MX6DL_PAD_SD3_DAT0__GPIO7_IO04             0x314 0x6fc 0x000 0x5 0x0 +#define MX6DL_PAD_SD3_DAT1__SD3_DATA1              0x318 0x700 0x000 0x0 0x0 +#define MX6DL_PAD_SD3_DAT1__UART1_RTS_B            0x318 0x700 0x8f8 0x1 0x3 +#define MX6DL_PAD_SD3_DAT1__UART1_CTS_B            0x318 0x700 0x000 0x1 0x0 +#define MX6DL_PAD_SD3_DAT1__FLEXCAN2_RX            0x318 0x700 0x7cc 0x2 0x1 +#define MX6DL_PAD_SD3_DAT1__GPIO7_IO05             0x318 0x700 0x000 0x5 0x0 +#define MX6DL_PAD_SD3_DAT2__SD3_DATA2              0x31c 0x704 0x000 0x0 0x0 +#define MX6DL_PAD_SD3_DAT2__GPIO7_IO06             0x31c 0x704 0x000 0x5 0x0 +#define MX6DL_PAD_SD3_DAT3__SD3_DATA3              0x320 0x708 0x000 0x0 0x0 +#define MX6DL_PAD_SD3_DAT3__UART3_CTS_B            0x320 0x708 0x000 0x1 0x0 +#define MX6DL_PAD_SD3_DAT3__UART3_RTS_B            0x320 0x708 0x908 0x1 0x4 +#define MX6DL_PAD_SD3_DAT3__GPIO7_IO07             0x320 0x708 0x000 0x5 0x0 +#define MX6DL_PAD_SD3_DAT4__SD3_DATA4              0x324 0x70c 0x000 0x0 0x0 +#define MX6DL_PAD_SD3_DAT4__UART2_RX_DATA          0x324 0x70c 0x904 0x1 0x4 +#define MX6DL_PAD_SD3_DAT4__UART2_TX_DATA          0x324 0x70c 0x000 0x1 0x0 +#define MX6DL_PAD_SD3_DAT4__GPIO7_IO01             0x324 0x70c 0x000 0x5 0x0 +#define MX6DL_PAD_SD3_DAT5__SD3_DATA5              0x328 0x710 0x000 0x0 0x0 +#define MX6DL_PAD_SD3_DAT5__UART2_TX_DATA          0x328 0x710 0x000 0x1 0x0 +#define MX6DL_PAD_SD3_DAT5__UART2_RX_DATA          0x328 0x710 0x904 0x1 0x5 +#define MX6DL_PAD_SD3_DAT5__GPIO7_IO00             0x328 0x710 0x000 0x5 0x0 +#define MX6DL_PAD_SD3_DAT6__SD3_DATA6              0x32c 0x714 0x000 0x0 0x0 +#define MX6DL_PAD_SD3_DAT6__UART1_RX_DATA          0x32c 0x714 0x8fc 0x1 0x2 +#define MX6DL_PAD_SD3_DAT6__UART1_TX_DATA          0x32c 0x714 0x000 0x1 0x0 +#define MX6DL_PAD_SD3_DAT6__GPIO6_IO18             0x32c 0x714 0x000 0x5 0x0 +#define MX6DL_PAD_SD3_DAT7__SD3_DATA7              0x330 0x718 0x000 0x0 0x0 +#define MX6DL_PAD_SD3_DAT7__UART1_TX_DATA          0x330 0x718 0x000 0x1 0x0 +#define MX6DL_PAD_SD3_DAT7__UART1_RX_DATA          0x330 0x718 0x8fc 0x1 0x3 +#define MX6DL_PAD_SD3_DAT7__GPIO6_IO17             0x330 0x718 0x000 0x5 0x0 +#define MX6DL_PAD_SD3_RST__SD3_RESET               0x334 0x71c 0x000 0x0 0x0 +#define MX6DL_PAD_SD3_RST__UART3_RTS_B             0x334 0x71c 0x908 0x1 0x5 +#define MX6DL_PAD_SD3_RST__UART3_CTS_B             0x334 0x71c 0x000 0x1 0x0 +#define MX6DL_PAD_SD3_RST__GPIO7_IO08              0x334 0x71c 0x000 0x5 0x0 +#define MX6DL_PAD_SD4_CLK__SD4_CLK                 0x338 0x720 0x938 0x0 0x1 +#define MX6DL_PAD_SD4_CLK__NAND_WE_B               0x338 0x720 0x000 0x1 0x0 +#define MX6DL_PAD_SD4_CLK__UART3_RX_DATA           0x338 0x720 0x90c 0x2 0x2 +#define MX6DL_PAD_SD4_CLK__UART3_TX_DATA           0x338 0x720 0x000 0x2 0x0 +#define MX6DL_PAD_SD4_CLK__GPIO7_IO10              0x338 0x720 0x000 0x5 0x0 +#define MX6DL_PAD_SD4_CMD__SD4_CMD                 0x33c 0x724 0x000 0x0 0x0 +#define MX6DL_PAD_SD4_CMD__NAND_RE_B               0x33c 0x724 0x000 0x1 0x0 +#define MX6DL_PAD_SD4_CMD__UART3_TX_DATA           0x33c 0x724 0x000 0x2 0x0 +#define MX6DL_PAD_SD4_CMD__UART3_RX_DATA           0x33c 0x724 0x90c 0x2 0x3 +#define MX6DL_PAD_SD4_CMD__GPIO7_IO09              0x33c 0x724 0x000 0x5 0x0 +#define MX6DL_PAD_SD4_DAT0__SD4_DATA0              0x340 0x728 0x000 0x1 0x0 +#define MX6DL_PAD_SD4_DAT0__NAND_DQS               0x340 0x728 0x000 0x2 0x0 +#define MX6DL_PAD_SD4_DAT0__GPIO2_IO08             0x340 0x728 0x000 0x5 0x0 +#define MX6DL_PAD_SD4_DAT1__SD4_DATA1              0x344 0x72c 0x000 0x1 0x0 +#define MX6DL_PAD_SD4_DAT1__PWM3_OUT               0x344 0x72c 0x000 0x2 0x0 +#define MX6DL_PAD_SD4_DAT1__GPIO2_IO09             0x344 0x72c 0x000 0x5 0x0 +#define MX6DL_PAD_SD4_DAT2__SD4_DATA2              0x348 0x730 0x000 0x1 0x0 +#define MX6DL_PAD_SD4_DAT2__PWM4_OUT               0x348 0x730 0x000 0x2 0x0 +#define MX6DL_PAD_SD4_DAT2__GPIO2_IO10             0x348 0x730 0x000 0x5 0x0 +#define MX6DL_PAD_SD4_DAT3__SD4_DATA3              0x34c 0x734 0x000 0x1 0x0 +#define MX6DL_PAD_SD4_DAT3__GPIO2_IO11             0x34c 0x734 0x000 0x5 0x0 +#define MX6DL_PAD_SD4_DAT4__SD4_DATA4              0x350 0x738 0x000 0x1 0x0 +#define MX6DL_PAD_SD4_DAT4__UART2_RX_DATA          0x350 0x738 0x904 0x2 0x6 +#define MX6DL_PAD_SD4_DAT4__UART2_TX_DATA          0x350 0x738 0x000 0x2 0x0 +#define MX6DL_PAD_SD4_DAT4__GPIO2_IO12             0x350 0x738 0x000 0x5 0x0 +#define MX6DL_PAD_SD4_DAT5__SD4_DATA5              0x354 0x73c 0x000 0x1 0x0 +#define MX6DL_PAD_SD4_DAT5__UART2_RTS_B            0x354 0x73c 0x900 0x2 0x4 +#define MX6DL_PAD_SD4_DAT5__UART2_CTS_B            0x354 0x73c 0x000 0x2 0x0 +#define MX6DL_PAD_SD4_DAT5__GPIO2_IO13             0x354 0x73c 0x000 0x5 0x0 +#define MX6DL_PAD_SD4_DAT6__SD4_DATA6              0x358 0x740 0x000 0x1 0x0 +#define MX6DL_PAD_SD4_DAT6__UART2_CTS_B            0x358 0x740 0x000 0x2 0x0 +#define MX6DL_PAD_SD4_DAT6__UART2_RTS_B            0x358 0x740 0x900 0x2 0x5 +#define MX6DL_PAD_SD4_DAT6__GPIO2_IO14             0x358 0x740 0x000 0x5 0x0 +#define MX6DL_PAD_SD4_DAT7__SD4_DATA7              0x35c 0x744 0x000 0x1 0x0 +#define MX6DL_PAD_SD4_DAT7__UART2_TX_DATA          0x35c 0x744 0x000 0x2 0x0 +#define MX6DL_PAD_SD4_DAT7__UART2_RX_DATA          0x35c 0x744 0x904 0x2 0x7 +#define MX6DL_PAD_SD4_DAT7__GPIO2_IO15             0x35c 0x744 0x000 0x5 0x0 + +#endif /* __DTS_IMX6DL_PINFUNC_H */ diff --git a/arch/arm/boot/dts/imx6dl-sabreauto.dts b/arch/arm/boot/dts/imx6dl-sabreauto.dts new file mode 100644 index 00000000000..7adcec36021 --- /dev/null +++ b/arch/arm/boot/dts/imx6dl-sabreauto.dts @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2013 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. + */ + +/dts-v1/; + +#include "imx6dl.dtsi" +#include "imx6qdl-sabreauto.dtsi" + +/ { +	model = "Freescale i.MX6 DualLite/Solo SABRE Automotive Board"; +	compatible = "fsl,imx6dl-sabreauto", "fsl,imx6dl"; +}; + +&iomuxc { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_hog>; + +	hog { +		pinctrl_hog: hoggrp { +			fsl,pins = < +				MX6DL_PAD_NANDF_CS2__GPIO6_IO15 0x80000000 +				MX6DL_PAD_SD2_DAT2__GPIO1_IO13  0x80000000 +			>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/imx6dl-sabresd.dts b/arch/arm/boot/dts/imx6dl-sabresd.dts new file mode 100644 index 00000000000..7efb05db478 --- /dev/null +++ b/arch/arm/boot/dts/imx6dl-sabresd.dts @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2013 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. + */ + +/dts-v1/; + +#include "imx6dl.dtsi" +#include "imx6qdl-sabresd.dtsi" + +/ { +	model = "Freescale i.MX6 DualLite SABRE Smart Device Board"; +	compatible = "fsl,imx6dl-sabresd", "fsl,imx6dl"; +}; + +&iomuxc { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_hog>; + +	hog { +		pinctrl_hog: hoggrp { +			fsl,pins = < +				MX6DL_PAD_GPIO_4__GPIO1_IO04   0x80000000 +				MX6DL_PAD_GPIO_5__GPIO1_IO05   0x80000000 +				MX6DL_PAD_NANDF_D0__GPIO2_IO00 0x80000000 +				MX6DL_PAD_NANDF_D1__GPIO2_IO01 0x80000000 +				MX6DL_PAD_NANDF_D2__GPIO2_IO02 0x80000000 +				MX6DL_PAD_NANDF_D3__GPIO2_IO03 0x80000000 +			>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/imx6dl-wandboard.dts b/arch/arm/boot/dts/imx6dl-wandboard.dts new file mode 100644 index 00000000000..bfc59c3566a --- /dev/null +++ b/arch/arm/boot/dts/imx6dl-wandboard.dts @@ -0,0 +1,44 @@ +/* + * Copyright 2013 Freescale Semiconductor, Inc. + * + * Author: Fabio Estevam <fabio.estevam@freescale.com> + * + * 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. + * + */ +/dts-v1/; +#include "imx6dl.dtsi" + +/ { +	model = "Wandboard i.MX6 Dual Lite Board"; +	compatible = "wand,imx6dl-wandboard", "fsl,imx6dl"; + +	memory { +		reg = <0x10000000 0x40000000>; +	}; +}; + +&fec { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_enet_1>; +	phy-mode = "rgmii"; +	status = "okay"; +}; + +&uart1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart1_1>; +	status = "okay"; +}; + +&usbh1 { +	status = "okay"; +}; + +&usdhc3 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_usdhc3_2>; +	status = "okay"; +}; diff --git a/arch/arm/boot/dts/imx6dl.dtsi b/arch/arm/boot/dts/imx6dl.dtsi index 63fafe2a606..5bcdf3a90bb 100644 --- a/arch/arm/boot/dts/imx6dl.dtsi +++ b/arch/arm/boot/dts/imx6dl.dtsi @@ -1,3 +1,4 @@ +  /*   * Copyright 2013 Freescale Semiconductor, Inc.   * @@ -7,7 +8,8 @@   *   */ -/include/ "imx6qdl.dtsi" +#include "imx6qdl.dtsi" +#include "imx6dl-pinfunc.h"  / {  	cpus { @@ -29,6 +31,127 @@  	soc {  		aips1: aips-bus@02000000 { +			iomuxc: iomuxc@020e0000 { +				compatible = "fsl,imx6dl-iomuxc"; +				reg = <0x020e0000 0x4000>; + +				enet { +					pinctrl_enet_1: enetgrp-1 { +						fsl,pins = < +							MX6DL_PAD_ENET_MDIO__ENET_MDIO       0x1b0b0 +							MX6DL_PAD_ENET_MDC__ENET_MDC         0x1b0b0 +							MX6DL_PAD_RGMII_TXC__RGMII_TXC       0x1b0b0 +							MX6DL_PAD_RGMII_TD0__RGMII_TD0       0x1b0b0 +							MX6DL_PAD_RGMII_TD1__RGMII_TD1       0x1b0b0 +							MX6DL_PAD_RGMII_TD2__RGMII_TD2       0x1b0b0 +							MX6DL_PAD_RGMII_TD3__RGMII_TD3       0x1b0b0 +							MX6DL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0 +							MX6DL_PAD_ENET_REF_CLK__ENET_TX_CLK  0x1b0b0 +							MX6DL_PAD_RGMII_RXC__RGMII_RXC       0x1b0b0 +							MX6DL_PAD_RGMII_RD0__RGMII_RD0       0x1b0b0 +							MX6DL_PAD_RGMII_RD1__RGMII_RD1       0x1b0b0 +							MX6DL_PAD_RGMII_RD2__RGMII_RD2       0x1b0b0 +							MX6DL_PAD_RGMII_RD3__RGMII_RD3       0x1b0b0 +							MX6DL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0 +							MX6DL_PAD_GPIO_16__ENET_REF_CLK      0x4001b0a8 +						>; +					}; + +					pinctrl_enet_2: enetgrp-2 { +						fsl,pins = < +							MX6DL_PAD_KEY_COL1__ENET_MDIO        0x1b0b0 +							MX6DL_PAD_KEY_COL2__ENET_MDC         0x1b0b0 +							MX6DL_PAD_RGMII_TXC__RGMII_TXC       0x1b0b0 +							MX6DL_PAD_RGMII_TD0__RGMII_TD0       0x1b0b0 +							MX6DL_PAD_RGMII_TD1__RGMII_TD1       0x1b0b0 +							MX6DL_PAD_RGMII_TD2__RGMII_TD2       0x1b0b0 +							MX6DL_PAD_RGMII_TD3__RGMII_TD3       0x1b0b0 +							MX6DL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0 +							MX6DL_PAD_ENET_REF_CLK__ENET_TX_CLK  0x1b0b0 +							MX6DL_PAD_RGMII_RXC__RGMII_RXC       0x1b0b0 +							MX6DL_PAD_RGMII_RD0__RGMII_RD0       0x1b0b0 +							MX6DL_PAD_RGMII_RD1__RGMII_RD1       0x1b0b0 +							MX6DL_PAD_RGMII_RD2__RGMII_RD2       0x1b0b0 +							MX6DL_PAD_RGMII_RD3__RGMII_RD3       0x1b0b0 +							MX6DL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0 +						>; +					}; +				}; + +				uart1 { +					pinctrl_uart1_1: uart1grp-1 { +						fsl,pins = < +							MX6DL_PAD_CSI0_DAT10__UART1_TX_DATA 0x1b0b1 +							MX6DL_PAD_CSI0_DAT11__UART1_RX_DATA 0x1b0b1 +						>; +					}; +				}; + +				uart4 { +					pinctrl_uart4_1: uart4grp-1 { +						fsl,pins = < +							MX6DL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1 +							MX6DL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1 +						>; +					}; +				}; + +				usbotg { +					pinctrl_usbotg_2: usbotggrp-2 { +						fsl,pins = < +							MX6DL_PAD_ENET_RX_ER__USB_OTG_ID 0x17059 +						>; +					}; +				}; + +				usdhc2 { +					pinctrl_usdhc2_1: usdhc2grp-1 { +						fsl,pins = < +							MX6DL_PAD_SD2_CMD__SD2_CMD    0x17059 +							MX6DL_PAD_SD2_CLK__SD2_CLK    0x10059 +							MX6DL_PAD_SD2_DAT0__SD2_DATA0 0x17059 +							MX6DL_PAD_SD2_DAT1__SD2_DATA1 0x17059 +							MX6DL_PAD_SD2_DAT2__SD2_DATA2 0x17059 +							MX6DL_PAD_SD2_DAT3__SD2_DATA3 0x17059 +							MX6DL_PAD_NANDF_D4__SD2_DATA4 0x17059 +							MX6DL_PAD_NANDF_D5__SD2_DATA5 0x17059 +							MX6DL_PAD_NANDF_D6__SD2_DATA6 0x17059 +							MX6DL_PAD_NANDF_D7__SD2_DATA7 0x17059 +						>; +					}; +				}; + +				usdhc3 { +					pinctrl_usdhc3_1: usdhc3grp-1 { +						fsl,pins = < +							MX6DL_PAD_SD3_CMD__SD3_CMD    0x17059 +							MX6DL_PAD_SD3_CLK__SD3_CLK    0x10059 +							MX6DL_PAD_SD3_DAT0__SD3_DATA0 0x17059 +							MX6DL_PAD_SD3_DAT1__SD3_DATA1 0x17059 +							MX6DL_PAD_SD3_DAT2__SD3_DATA2 0x17059 +							MX6DL_PAD_SD3_DAT3__SD3_DATA3 0x17059 +							MX6DL_PAD_SD3_DAT4__SD3_DATA4 0x17059 +							MX6DL_PAD_SD3_DAT5__SD3_DATA5 0x17059 +							MX6DL_PAD_SD3_DAT6__SD3_DATA6 0x17059 +							MX6DL_PAD_SD3_DAT7__SD3_DATA7 0x17059 +						>; +					}; + +					pinctrl_usdhc3_2: usdhc3grp_2 { +						fsl,pins = < +							MX6DL_PAD_SD3_CMD__SD3_CMD    0x17059 +							MX6DL_PAD_SD3_CLK__SD3_CLK    0x10059 +							MX6DL_PAD_SD3_DAT0__SD3_DATA0 0x17059 +							MX6DL_PAD_SD3_DAT1__SD3_DATA1 0x17059 +							MX6DL_PAD_SD3_DAT2__SD3_DATA2 0x17059 +							MX6DL_PAD_SD3_DAT3__SD3_DATA3 0x17059 +						>; +					}; +				}; + + +			}; +  			pxp: pxp@020f0000 {  				reg = <0x020f0000 0x4000>;  				interrupts = <0 98 0x04>; diff --git a/arch/arm/boot/dts/imx6q-arm2.dts b/arch/arm/boot/dts/imx6q-arm2.dts index 53eb241fa5a..4e54fde591b 100644 --- a/arch/arm/boot/dts/imx6q-arm2.dts +++ b/arch/arm/boot/dts/imx6q-arm2.dts @@ -11,7 +11,7 @@   */  /dts-v1/; -/include/ "imx6q.dtsi" +#include "imx6q.dtsi"  / {  	model = "Freescale i.MX6 Quad Armadillo2 Board"; @@ -57,7 +57,7 @@  	hog {  		pinctrl_hog: hoggrp {  			fsl,pins = < -				176  0x80000000	/* MX6Q_PAD_EIM_D25__GPIO_3_25 */ +				MX6Q_PAD_EIM_D25__GPIO3_IO25 0x80000000  			>;  		};  	}; @@ -65,8 +65,8 @@  	arm2 {  		pinctrl_usdhc3_arm2: usdhc3grp-arm2 {  			fsl,pins = < -				1363 0x80000000	/* MX6Q_PAD_NANDF_CS0__GPIO_6_11 */ -				1369 0x80000000 /* MX6Q_PAD_NANDF_CS1__GPIO_6_14 */ +				MX6Q_PAD_NANDF_CS0__GPIO6_IO11 0x80000000 +				MX6Q_PAD_NANDF_CS1__GPIO6_IO14 0x80000000  			>;  		};  	}; diff --git a/arch/arm/boot/dts/imx6q-pinfunc.h b/arch/arm/boot/dts/imx6q-pinfunc.h new file mode 100644 index 00000000000..faea6e1ada0 --- /dev/null +++ b/arch/arm/boot/dts/imx6q-pinfunc.h @@ -0,0 +1,1041 @@ +/* + * Copyright 2013 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. + * + */ + +#ifndef __DTS_IMX6Q_PINFUNC_H +#define __DTS_IMX6Q_PINFUNC_H + +/* + * The pin function ID is a tuple of + * <mux_reg conf_reg input_reg mux_mode input_val> + */ +#define MX6Q_PAD_SD2_DAT1__SD2_DATA1              0x04c 0x360 0x000 0x0 0x0 +#define MX6Q_PAD_SD2_DAT1__ECSPI5_SS0             0x04c 0x360 0x834 0x1 0x0 +#define MX6Q_PAD_SD2_DAT1__EIM_CS2_B              0x04c 0x360 0x000 0x2 0x0 +#define MX6Q_PAD_SD2_DAT1__AUD4_TXFS              0x04c 0x360 0x7c8 0x3 0x0 +#define MX6Q_PAD_SD2_DAT1__KEY_COL7               0x04c 0x360 0x8f0 0x4 0x0 +#define MX6Q_PAD_SD2_DAT1__GPIO1_IO14             0x04c 0x360 0x000 0x5 0x0 +#define MX6Q_PAD_SD2_DAT2__SD2_DATA2              0x050 0x364 0x000 0x0 0x0 +#define MX6Q_PAD_SD2_DAT2__ECSPI5_SS1             0x050 0x364 0x838 0x1 0x0 +#define MX6Q_PAD_SD2_DAT2__EIM_CS3_B              0x050 0x364 0x000 0x2 0x0 +#define MX6Q_PAD_SD2_DAT2__AUD4_TXD               0x050 0x364 0x7b8 0x3 0x0 +#define MX6Q_PAD_SD2_DAT2__KEY_ROW6               0x050 0x364 0x8f8 0x4 0x0 +#define MX6Q_PAD_SD2_DAT2__GPIO1_IO13             0x050 0x364 0x000 0x5 0x0 +#define MX6Q_PAD_SD2_DAT0__SD2_DATA0              0x054 0x368 0x000 0x0 0x0 +#define MX6Q_PAD_SD2_DAT0__ECSPI5_MISO            0x054 0x368 0x82c 0x1 0x0 +#define MX6Q_PAD_SD2_DAT0__AUD4_RXD               0x054 0x368 0x7b4 0x3 0x0 +#define MX6Q_PAD_SD2_DAT0__KEY_ROW7               0x054 0x368 0x8fc 0x4 0x0 +#define MX6Q_PAD_SD2_DAT0__GPIO1_IO15             0x054 0x368 0x000 0x5 0x0 +#define MX6Q_PAD_SD2_DAT0__DCIC2_OUT              0x054 0x368 0x000 0x6 0x0 +#define MX6Q_PAD_RGMII_TXC__USB_H2_DATA           0x058 0x36c 0x000 0x0 0x0 +#define MX6Q_PAD_RGMII_TXC__RGMII_TXC             0x058 0x36c 0x000 0x1 0x0 +#define MX6Q_PAD_RGMII_TXC__SPDIF_EXT_CLK         0x058 0x36c 0x918 0x2 0x0 +#define MX6Q_PAD_RGMII_TXC__GPIO6_IO19            0x058 0x36c 0x000 0x5 0x0 +#define MX6Q_PAD_RGMII_TXC__XTALOSC_REF_CLK_24M   0x058 0x36c 0x000 0x7 0x0 +#define MX6Q_PAD_RGMII_TD0__HSI_TX_READY          0x05c 0x370 0x000 0x0 0x0 +#define MX6Q_PAD_RGMII_TD0__RGMII_TD0             0x05c 0x370 0x000 0x1 0x0 +#define MX6Q_PAD_RGMII_TD0__GPIO6_IO20            0x05c 0x370 0x000 0x5 0x0 +#define MX6Q_PAD_RGMII_TD1__HSI_RX_FLAG           0x060 0x374 0x000 0x0 0x0 +#define MX6Q_PAD_RGMII_TD1__RGMII_TD1             0x060 0x374 0x000 0x1 0x0 +#define MX6Q_PAD_RGMII_TD1__GPIO6_IO21            0x060 0x374 0x000 0x5 0x0 +#define MX6Q_PAD_RGMII_TD2__HSI_RX_DATA           0x064 0x378 0x000 0x0 0x0 +#define MX6Q_PAD_RGMII_TD2__RGMII_TD2             0x064 0x378 0x000 0x1 0x0 +#define MX6Q_PAD_RGMII_TD2__GPIO6_IO22            0x064 0x378 0x000 0x5 0x0 +#define MX6Q_PAD_RGMII_TD3__HSI_RX_WAKE           0x068 0x37c 0x000 0x0 0x0 +#define MX6Q_PAD_RGMII_TD3__RGMII_TD3             0x068 0x37c 0x000 0x1 0x0 +#define MX6Q_PAD_RGMII_TD3__GPIO6_IO23            0x068 0x37c 0x000 0x5 0x0 +#define MX6Q_PAD_RGMII_RX_CTL__USB_H3_DATA        0x06c 0x380 0x000 0x0 0x0 +#define MX6Q_PAD_RGMII_RX_CTL__RGMII_RX_CTL       0x06c 0x380 0x858 0x1 0x0 +#define MX6Q_PAD_RGMII_RX_CTL__GPIO6_IO24         0x06c 0x380 0x000 0x5 0x0 +#define MX6Q_PAD_RGMII_RD0__HSI_RX_READY          0x070 0x384 0x000 0x0 0x0 +#define MX6Q_PAD_RGMII_RD0__RGMII_RD0             0x070 0x384 0x848 0x1 0x0 +#define MX6Q_PAD_RGMII_RD0__GPIO6_IO25            0x070 0x384 0x000 0x5 0x0 +#define MX6Q_PAD_RGMII_TX_CTL__USB_H2_STROBE      0x074 0x388 0x000 0x0 0x0 +#define MX6Q_PAD_RGMII_TX_CTL__RGMII_TX_CTL       0x074 0x388 0x000 0x1 0x0 +#define MX6Q_PAD_RGMII_TX_CTL__GPIO6_IO26         0x074 0x388 0x000 0x5 0x0 +#define MX6Q_PAD_RGMII_TX_CTL__ENET_REF_CLK       0x074 0x388 0x83c 0x7 0x0 +#define MX6Q_PAD_RGMII_RD1__HSI_TX_FLAG           0x078 0x38c 0x000 0x0 0x0 +#define MX6Q_PAD_RGMII_RD1__RGMII_RD1             0x078 0x38c 0x84c 0x1 0x0 +#define MX6Q_PAD_RGMII_RD1__GPIO6_IO27            0x078 0x38c 0x000 0x5 0x0 +#define MX6Q_PAD_RGMII_RD2__HSI_TX_DATA           0x07c 0x390 0x000 0x0 0x0 +#define MX6Q_PAD_RGMII_RD2__RGMII_RD2             0x07c 0x390 0x850 0x1 0x0 +#define MX6Q_PAD_RGMII_RD2__GPIO6_IO28            0x07c 0x390 0x000 0x5 0x0 +#define MX6Q_PAD_RGMII_RD3__HSI_TX_WAKE           0x080 0x394 0x000 0x0 0x0 +#define MX6Q_PAD_RGMII_RD3__RGMII_RD3             0x080 0x394 0x854 0x1 0x0 +#define MX6Q_PAD_RGMII_RD3__GPIO6_IO29            0x080 0x394 0x000 0x5 0x0 +#define MX6Q_PAD_RGMII_RXC__USB_H3_STROBE         0x084 0x398 0x000 0x0 0x0 +#define MX6Q_PAD_RGMII_RXC__RGMII_RXC             0x084 0x398 0x844 0x1 0x0 +#define MX6Q_PAD_RGMII_RXC__GPIO6_IO30            0x084 0x398 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_A25__EIM_ADDR25              0x088 0x39c 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_A25__ECSPI4_SS1              0x088 0x39c 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_A25__ECSPI2_RDY              0x088 0x39c 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_A25__IPU1_DI1_PIN12          0x088 0x39c 0x000 0x3 0x0 +#define MX6Q_PAD_EIM_A25__IPU1_DI0_D1_CS          0x088 0x39c 0x000 0x4 0x0 +#define MX6Q_PAD_EIM_A25__GPIO5_IO02              0x088 0x39c 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_A25__HDMI_TX_CEC_LINE        0x088 0x39c 0x88c 0x6 0x0 +#define MX6Q_PAD_EIM_EB2__EIM_EB2_B               0x08c 0x3a0 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_EB2__ECSPI1_SS0              0x08c 0x3a0 0x800 0x1 0x0 +#define MX6Q_PAD_EIM_EB2__IPU2_CSI1_DATA19        0x08c 0x3a0 0x8d4 0x3 0x0 +#define MX6Q_PAD_EIM_EB2__HDMI_TX_DDC_SCL         0x08c 0x3a0 0x890 0x4 0x0 +#define MX6Q_PAD_EIM_EB2__GPIO2_IO30              0x08c 0x3a0 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_EB2__I2C2_SCL                0x08c 0x3a0 0x8a0 0x6 0x0 +#define MX6Q_PAD_EIM_EB2__SRC_BOOT_CFG30          0x08c 0x3a0 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_D16__EIM_DATA16              0x090 0x3a4 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_D16__ECSPI1_SCLK             0x090 0x3a4 0x7f4 0x1 0x0 +#define MX6Q_PAD_EIM_D16__IPU1_DI0_PIN05          0x090 0x3a4 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_D16__IPU2_CSI1_DATA18        0x090 0x3a4 0x8d0 0x3 0x0 +#define MX6Q_PAD_EIM_D16__HDMI_TX_DDC_SDA         0x090 0x3a4 0x894 0x4 0x0 +#define MX6Q_PAD_EIM_D16__GPIO3_IO16              0x090 0x3a4 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_D16__I2C2_SDA                0x090 0x3a4 0x8a4 0x6 0x0 +#define MX6Q_PAD_EIM_D17__EIM_DATA17              0x094 0x3a8 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_D17__ECSPI1_MISO             0x094 0x3a8 0x7f8 0x1 0x0 +#define MX6Q_PAD_EIM_D17__IPU1_DI0_PIN06          0x094 0x3a8 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_D17__IPU2_CSI1_PIXCLK        0x094 0x3a8 0x8e0 0x3 0x0 +#define MX6Q_PAD_EIM_D17__DCIC1_OUT               0x094 0x3a8 0x000 0x4 0x0 +#define MX6Q_PAD_EIM_D17__GPIO3_IO17              0x094 0x3a8 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_D17__I2C3_SCL                0x094 0x3a8 0x8a8 0x6 0x0 +#define MX6Q_PAD_EIM_D18__EIM_DATA18              0x098 0x3ac 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_D18__ECSPI1_MOSI             0x098 0x3ac 0x7fc 0x1 0x0 +#define MX6Q_PAD_EIM_D18__IPU1_DI0_PIN07          0x098 0x3ac 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_D18__IPU2_CSI1_DATA17        0x098 0x3ac 0x8cc 0x3 0x0 +#define MX6Q_PAD_EIM_D18__IPU1_DI1_D0_CS          0x098 0x3ac 0x000 0x4 0x0 +#define MX6Q_PAD_EIM_D18__GPIO3_IO18              0x098 0x3ac 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_D18__I2C3_SDA                0x098 0x3ac 0x8ac 0x6 0x0 +#define MX6Q_PAD_EIM_D19__EIM_DATA19              0x09c 0x3b0 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_D19__ECSPI1_SS1              0x09c 0x3b0 0x804 0x1 0x0 +#define MX6Q_PAD_EIM_D19__IPU1_DI0_PIN08          0x09c 0x3b0 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_D19__IPU2_CSI1_DATA16        0x09c 0x3b0 0x8c8 0x3 0x0 +#define MX6Q_PAD_EIM_D19__UART1_CTS_B             0x09c 0x3b0 0x000 0x4 0x0 +#define MX6Q_PAD_EIM_D19__UART1_RTS_B             0x09c 0x3b0 0x91c 0x4 0x0 +#define MX6Q_PAD_EIM_D19__GPIO3_IO19              0x09c 0x3b0 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_D19__EPIT1_OUT               0x09c 0x3b0 0x000 0x6 0x0 +#define MX6Q_PAD_EIM_D20__EIM_DATA20              0x0a0 0x3b4 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_D20__ECSPI4_SS0              0x0a0 0x3b4 0x824 0x1 0x0 +#define MX6Q_PAD_EIM_D20__IPU1_DI0_PIN16          0x0a0 0x3b4 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_D20__IPU2_CSI1_DATA15        0x0a0 0x3b4 0x8c4 0x3 0x0 +#define MX6Q_PAD_EIM_D20__UART1_RTS_B             0x0a0 0x3b4 0x91c 0x4 0x1 +#define MX6Q_PAD_EIM_D20__UART1_CTS_B             0x0a0 0x3b4 0x000 0x4 0x0 +#define MX6Q_PAD_EIM_D20__GPIO3_IO20              0x0a0 0x3b4 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_D20__EPIT2_OUT               0x0a0 0x3b4 0x000 0x6 0x0 +#define MX6Q_PAD_EIM_D21__EIM_DATA21              0x0a4 0x3b8 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_D21__ECSPI4_SCLK             0x0a4 0x3b8 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_D21__IPU1_DI0_PIN17          0x0a4 0x3b8 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_D21__IPU2_CSI1_DATA11        0x0a4 0x3b8 0x8b4 0x3 0x0 +#define MX6Q_PAD_EIM_D21__USB_OTG_OC              0x0a4 0x3b8 0x944 0x4 0x0 +#define MX6Q_PAD_EIM_D21__GPIO3_IO21              0x0a4 0x3b8 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_D21__I2C1_SCL                0x0a4 0x3b8 0x898 0x6 0x0 +#define MX6Q_PAD_EIM_D21__SPDIF_IN                0x0a4 0x3b8 0x914 0x7 0x0 +#define MX6Q_PAD_EIM_D22__EIM_DATA22              0x0a8 0x3bc 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_D22__ECSPI4_MISO             0x0a8 0x3bc 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_D22__IPU1_DI0_PIN01          0x0a8 0x3bc 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_D22__IPU2_CSI1_DATA10        0x0a8 0x3bc 0x8b0 0x3 0x0 +#define MX6Q_PAD_EIM_D22__USB_OTG_PWR             0x0a8 0x3bc 0x000 0x4 0x0 +#define MX6Q_PAD_EIM_D22__GPIO3_IO22              0x0a8 0x3bc 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_D22__SPDIF_OUT               0x0a8 0x3bc 0x000 0x6 0x0 +#define MX6Q_PAD_EIM_D23__EIM_DATA23              0x0ac 0x3c0 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_D23__IPU1_DI0_D0_CS          0x0ac 0x3c0 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_D23__UART3_CTS_B             0x0ac 0x3c0 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_D23__UART3_RTS_B             0x0ac 0x3c0 0x92c 0x2 0x0 +#define MX6Q_PAD_EIM_D23__UART1_DCD_B             0x0ac 0x3c0 0x000 0x3 0x0 +#define MX6Q_PAD_EIM_D23__IPU2_CSI1_DATA_EN       0x0ac 0x3c0 0x8d8 0x4 0x0 +#define MX6Q_PAD_EIM_D23__GPIO3_IO23              0x0ac 0x3c0 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_D23__IPU1_DI1_PIN02          0x0ac 0x3c0 0x000 0x6 0x0 +#define MX6Q_PAD_EIM_D23__IPU1_DI1_PIN14          0x0ac 0x3c0 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_EB3__EIM_EB3_B               0x0b0 0x3c4 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_EB3__ECSPI4_RDY              0x0b0 0x3c4 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_EB3__UART3_RTS_B             0x0b0 0x3c4 0x92c 0x2 0x1 +#define MX6Q_PAD_EIM_EB3__UART3_CTS_B             0x0b0 0x3c4 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_EB3__UART1_RI_B              0x0b0 0x3c4 0x000 0x3 0x0 +#define MX6Q_PAD_EIM_EB3__IPU2_CSI1_HSYNC         0x0b0 0x3c4 0x8dc 0x4 0x0 +#define MX6Q_PAD_EIM_EB3__GPIO2_IO31              0x0b0 0x3c4 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_EB3__IPU1_DI1_PIN03          0x0b0 0x3c4 0x000 0x6 0x0 +#define MX6Q_PAD_EIM_EB3__SRC_BOOT_CFG31          0x0b0 0x3c4 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_D24__EIM_DATA24              0x0b4 0x3c8 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_D24__ECSPI4_SS2              0x0b4 0x3c8 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_D24__UART3_TX_DATA           0x0b4 0x3c8 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_D24__UART3_RX_DATA           0x0b4 0x3c8 0x930 0x2 0x0 +#define MX6Q_PAD_EIM_D24__ECSPI1_SS2              0x0b4 0x3c8 0x808 0x3 0x0 +#define MX6Q_PAD_EIM_D24__ECSPI2_SS2              0x0b4 0x3c8 0x000 0x4 0x0 +#define MX6Q_PAD_EIM_D24__GPIO3_IO24              0x0b4 0x3c8 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_D24__AUD5_RXFS               0x0b4 0x3c8 0x7d8 0x6 0x0 +#define MX6Q_PAD_EIM_D24__UART1_DTR_B             0x0b4 0x3c8 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_D25__EIM_DATA25              0x0b8 0x3cc 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_D25__ECSPI4_SS3              0x0b8 0x3cc 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_D25__UART3_RX_DATA           0x0b8 0x3cc 0x930 0x2 0x1 +#define MX6Q_PAD_EIM_D25__UART3_TX_DATA           0x0b8 0x3cc 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_D25__ECSPI1_SS3              0x0b8 0x3cc 0x80c 0x3 0x0 +#define MX6Q_PAD_EIM_D25__ECSPI2_SS3              0x0b8 0x3cc 0x000 0x4 0x0 +#define MX6Q_PAD_EIM_D25__GPIO3_IO25              0x0b8 0x3cc 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_D25__AUD5_RXC                0x0b8 0x3cc 0x7d4 0x6 0x0 +#define MX6Q_PAD_EIM_D25__UART1_DSR_B             0x0b8 0x3cc 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_D26__EIM_DATA26              0x0bc 0x3d0 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_D26__IPU1_DI1_PIN11          0x0bc 0x3d0 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_D26__IPU1_CSI0_DATA01        0x0bc 0x3d0 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_D26__IPU2_CSI1_DATA14        0x0bc 0x3d0 0x8c0 0x3 0x0 +#define MX6Q_PAD_EIM_D26__UART2_TX_DATA           0x0bc 0x3d0 0x000 0x4 0x0 +#define MX6Q_PAD_EIM_D26__UART2_RX_DATA           0x0bc 0x3d0 0x928 0x4 0x0 +#define MX6Q_PAD_EIM_D26__GPIO3_IO26              0x0bc 0x3d0 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_D26__IPU1_SISG2              0x0bc 0x3d0 0x000 0x6 0x0 +#define MX6Q_PAD_EIM_D26__IPU1_DISP1_DATA22       0x0bc 0x3d0 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_D27__EIM_DATA27              0x0c0 0x3d4 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_D27__IPU1_DI1_PIN13          0x0c0 0x3d4 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_D27__IPU1_CSI0_DATA00        0x0c0 0x3d4 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_D27__IPU2_CSI1_DATA13        0x0c0 0x3d4 0x8bc 0x3 0x0 +#define MX6Q_PAD_EIM_D27__UART2_RX_DATA           0x0c0 0x3d4 0x928 0x4 0x1 +#define MX6Q_PAD_EIM_D27__UART2_TX_DATA           0x0c0 0x3d4 0x000 0x4 0x0 +#define MX6Q_PAD_EIM_D27__GPIO3_IO27              0x0c0 0x3d4 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_D27__IPU1_SISG3              0x0c0 0x3d4 0x000 0x6 0x0 +#define MX6Q_PAD_EIM_D27__IPU1_DISP1_DATA23       0x0c0 0x3d4 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_D28__EIM_DATA28              0x0c4 0x3d8 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_D28__I2C1_SDA                0x0c4 0x3d8 0x89c 0x1 0x0 +#define MX6Q_PAD_EIM_D28__ECSPI4_MOSI             0x0c4 0x3d8 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_D28__IPU2_CSI1_DATA12        0x0c4 0x3d8 0x8b8 0x3 0x0 +#define MX6Q_PAD_EIM_D28__UART2_CTS_B             0x0c4 0x3d8 0x000 0x4 0x0 +#define MX6Q_PAD_EIM_D28__UART2_RTS_B             0x0c4 0x3d8 0x924 0x4 0x0 +#define MX6Q_PAD_EIM_D28__GPIO3_IO28              0x0c4 0x3d8 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_D28__IPU1_EXT_TRIG           0x0c4 0x3d8 0x000 0x6 0x0 +#define MX6Q_PAD_EIM_D28__IPU1_DI0_PIN13          0x0c4 0x3d8 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_D29__EIM_DATA29              0x0c8 0x3dc 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_D29__IPU1_DI1_PIN15          0x0c8 0x3dc 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_D29__ECSPI4_SS0              0x0c8 0x3dc 0x824 0x2 0x1 +#define MX6Q_PAD_EIM_D29__UART2_RTS_B             0x0c8 0x3dc 0x924 0x4 0x1 +#define MX6Q_PAD_EIM_D29__UART2_CTS_B             0x0c8 0x3dc 0x000 0x4 0x0 +#define MX6Q_PAD_EIM_D29__GPIO3_IO29              0x0c8 0x3dc 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_D29__IPU2_CSI1_VSYNC         0x0c8 0x3dc 0x8e4 0x6 0x0 +#define MX6Q_PAD_EIM_D29__IPU1_DI0_PIN14          0x0c8 0x3dc 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_D30__EIM_DATA30              0x0cc 0x3e0 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_D30__IPU1_DISP1_DATA21       0x0cc 0x3e0 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_D30__IPU1_DI0_PIN11          0x0cc 0x3e0 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_D30__IPU1_CSI0_DATA03        0x0cc 0x3e0 0x000 0x3 0x0 +#define MX6Q_PAD_EIM_D30__UART3_CTS_B             0x0cc 0x3e0 0x000 0x4 0x0 +#define MX6Q_PAD_EIM_D30__UART3_RTS_B             0x0cc 0x3e0 0x92c 0x4 0x2 +#define MX6Q_PAD_EIM_D30__GPIO3_IO30              0x0cc 0x3e0 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_D30__USB_H1_OC               0x0cc 0x3e0 0x948 0x6 0x0 +#define MX6Q_PAD_EIM_D31__EIM_DATA31              0x0d0 0x3e4 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_D31__IPU1_DISP1_DATA20       0x0d0 0x3e4 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_D31__IPU1_DI0_PIN12          0x0d0 0x3e4 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_D31__IPU1_CSI0_DATA02        0x0d0 0x3e4 0x000 0x3 0x0 +#define MX6Q_PAD_EIM_D31__UART3_RTS_B             0x0d0 0x3e4 0x92c 0x4 0x3 +#define MX6Q_PAD_EIM_D31__UART3_CTS_B             0x0d0 0x3e4 0x000 0x4 0x0 +#define MX6Q_PAD_EIM_D31__GPIO3_IO31              0x0d0 0x3e4 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_D31__USB_H1_PWR              0x0d0 0x3e4 0x000 0x6 0x0 +#define MX6Q_PAD_EIM_A24__EIM_ADDR24              0x0d4 0x3e8 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_A24__IPU1_DISP1_DATA19       0x0d4 0x3e8 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_A24__IPU2_CSI1_DATA19        0x0d4 0x3e8 0x8d4 0x2 0x1 +#define MX6Q_PAD_EIM_A24__IPU2_SISG2              0x0d4 0x3e8 0x000 0x3 0x0 +#define MX6Q_PAD_EIM_A24__IPU1_SISG2              0x0d4 0x3e8 0x000 0x4 0x0 +#define MX6Q_PAD_EIM_A24__GPIO5_IO04              0x0d4 0x3e8 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_A24__SRC_BOOT_CFG24          0x0d4 0x3e8 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_A23__EIM_ADDR23              0x0d8 0x3ec 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_A23__IPU1_DISP1_DATA18       0x0d8 0x3ec 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_A23__IPU2_CSI1_DATA18        0x0d8 0x3ec 0x8d0 0x2 0x1 +#define MX6Q_PAD_EIM_A23__IPU2_SISG3              0x0d8 0x3ec 0x000 0x3 0x0 +#define MX6Q_PAD_EIM_A23__IPU1_SISG3              0x0d8 0x3ec 0x000 0x4 0x0 +#define MX6Q_PAD_EIM_A23__GPIO6_IO06              0x0d8 0x3ec 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_A23__SRC_BOOT_CFG23          0x0d8 0x3ec 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_A22__EIM_ADDR22              0x0dc 0x3f0 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_A22__IPU1_DISP1_DATA17       0x0dc 0x3f0 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_A22__IPU2_CSI1_DATA17        0x0dc 0x3f0 0x8cc 0x2 0x1 +#define MX6Q_PAD_EIM_A22__GPIO2_IO16              0x0dc 0x3f0 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_A22__SRC_BOOT_CFG22          0x0dc 0x3f0 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_A21__EIM_ADDR21              0x0e0 0x3f4 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_A21__IPU1_DISP1_DATA16       0x0e0 0x3f4 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_A21__IPU2_CSI1_DATA16        0x0e0 0x3f4 0x8c8 0x2 0x1 +#define MX6Q_PAD_EIM_A21__GPIO2_IO17              0x0e0 0x3f4 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_A21__SRC_BOOT_CFG21          0x0e0 0x3f4 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_A20__EIM_ADDR20              0x0e4 0x3f8 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_A20__IPU1_DISP1_DATA15       0x0e4 0x3f8 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_A20__IPU2_CSI1_DATA15        0x0e4 0x3f8 0x8c4 0x2 0x1 +#define MX6Q_PAD_EIM_A20__GPIO2_IO18              0x0e4 0x3f8 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_A20__SRC_BOOT_CFG20          0x0e4 0x3f8 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_A19__EIM_ADDR19              0x0e8 0x3fc 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_A19__IPU1_DISP1_DATA14       0x0e8 0x3fc 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_A19__IPU2_CSI1_DATA14        0x0e8 0x3fc 0x8c0 0x2 0x1 +#define MX6Q_PAD_EIM_A19__GPIO2_IO19              0x0e8 0x3fc 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_A19__SRC_BOOT_CFG19          0x0e8 0x3fc 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_A18__EIM_ADDR18              0x0ec 0x400 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_A18__IPU1_DISP1_DATA13       0x0ec 0x400 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_A18__IPU2_CSI1_DATA13        0x0ec 0x400 0x8bc 0x2 0x1 +#define MX6Q_PAD_EIM_A18__GPIO2_IO20              0x0ec 0x400 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_A18__SRC_BOOT_CFG18          0x0ec 0x400 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_A17__EIM_ADDR17              0x0f0 0x404 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_A17__IPU1_DISP1_DATA12       0x0f0 0x404 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_A17__IPU2_CSI1_DATA12        0x0f0 0x404 0x8b8 0x2 0x1 +#define MX6Q_PAD_EIM_A17__GPIO2_IO21              0x0f0 0x404 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_A17__SRC_BOOT_CFG17          0x0f0 0x404 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_A16__EIM_ADDR16              0x0f4 0x408 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_A16__IPU1_DI1_DISP_CLK       0x0f4 0x408 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_A16__IPU2_CSI1_PIXCLK        0x0f4 0x408 0x8e0 0x2 0x1 +#define MX6Q_PAD_EIM_A16__GPIO2_IO22              0x0f4 0x408 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_A16__SRC_BOOT_CFG16          0x0f4 0x408 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_CS0__EIM_CS0_B               0x0f8 0x40c 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_CS0__IPU1_DI1_PIN05          0x0f8 0x40c 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_CS0__ECSPI2_SCLK             0x0f8 0x40c 0x810 0x2 0x0 +#define MX6Q_PAD_EIM_CS0__GPIO2_IO23              0x0f8 0x40c 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_CS1__EIM_CS1_B               0x0fc 0x410 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_CS1__IPU1_DI1_PIN06          0x0fc 0x410 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_CS1__ECSPI2_MOSI             0x0fc 0x410 0x818 0x2 0x0 +#define MX6Q_PAD_EIM_CS1__GPIO2_IO24              0x0fc 0x410 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_OE__EIM_OE_B                 0x100 0x414 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_OE__IPU1_DI1_PIN07           0x100 0x414 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_OE__ECSPI2_MISO              0x100 0x414 0x814 0x2 0x0 +#define MX6Q_PAD_EIM_OE__GPIO2_IO25               0x100 0x414 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_RW__EIM_RW                   0x104 0x418 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_RW__IPU1_DI1_PIN08           0x104 0x418 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_RW__ECSPI2_SS0               0x104 0x418 0x81c 0x2 0x0 +#define MX6Q_PAD_EIM_RW__GPIO2_IO26               0x104 0x418 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_RW__SRC_BOOT_CFG29           0x104 0x418 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_LBA__EIM_LBA_B               0x108 0x41c 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_LBA__IPU1_DI1_PIN17          0x108 0x41c 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_LBA__ECSPI2_SS1              0x108 0x41c 0x820 0x2 0x0 +#define MX6Q_PAD_EIM_LBA__GPIO2_IO27              0x108 0x41c 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_LBA__SRC_BOOT_CFG26          0x108 0x41c 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_EB0__EIM_EB0_B               0x10c 0x420 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_EB0__IPU1_DISP1_DATA11       0x10c 0x420 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_EB0__IPU2_CSI1_DATA11        0x10c 0x420 0x8b4 0x2 0x1 +#define MX6Q_PAD_EIM_EB0__CCM_PMIC_READY          0x10c 0x420 0x7f0 0x4 0x0 +#define MX6Q_PAD_EIM_EB0__GPIO2_IO28              0x10c 0x420 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_EB0__SRC_BOOT_CFG27          0x10c 0x420 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_EB1__EIM_EB1_B               0x110 0x424 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_EB1__IPU1_DISP1_DATA10       0x110 0x424 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_EB1__IPU2_CSI1_DATA10        0x110 0x424 0x8b0 0x2 0x1 +#define MX6Q_PAD_EIM_EB1__GPIO2_IO29              0x110 0x424 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_EB1__SRC_BOOT_CFG28          0x110 0x424 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_DA0__EIM_AD00                0x114 0x428 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_DA0__IPU1_DISP1_DATA09       0x114 0x428 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_DA0__IPU2_CSI1_DATA09        0x114 0x428 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_DA0__GPIO3_IO00              0x114 0x428 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_DA0__SRC_BOOT_CFG00          0x114 0x428 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_DA1__EIM_AD01                0x118 0x42c 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_DA1__IPU1_DISP1_DATA08       0x118 0x42c 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_DA1__IPU2_CSI1_DATA08        0x118 0x42c 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_DA1__GPIO3_IO01              0x118 0x42c 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_DA1__SRC_BOOT_CFG01          0x118 0x42c 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_DA2__EIM_AD02                0x11c 0x430 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_DA2__IPU1_DISP1_DATA07       0x11c 0x430 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_DA2__IPU2_CSI1_DATA07        0x11c 0x430 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_DA2__GPIO3_IO02              0x11c 0x430 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_DA2__SRC_BOOT_CFG02          0x11c 0x430 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_DA3__EIM_AD03                0x120 0x434 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_DA3__IPU1_DISP1_DATA06       0x120 0x434 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_DA3__IPU2_CSI1_DATA06        0x120 0x434 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_DA3__GPIO3_IO03              0x120 0x434 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_DA3__SRC_BOOT_CFG03          0x120 0x434 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_DA4__EIM_AD04                0x124 0x438 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_DA4__IPU1_DISP1_DATA05       0x124 0x438 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_DA4__IPU2_CSI1_DATA05        0x124 0x438 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_DA4__GPIO3_IO04              0x124 0x438 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_DA4__SRC_BOOT_CFG04          0x124 0x438 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_DA5__EIM_AD05                0x128 0x43c 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_DA5__IPU1_DISP1_DATA04       0x128 0x43c 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_DA5__IPU2_CSI1_DATA04        0x128 0x43c 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_DA5__GPIO3_IO05              0x128 0x43c 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_DA5__SRC_BOOT_CFG05          0x128 0x43c 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_DA6__EIM_AD06                0x12c 0x440 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_DA6__IPU1_DISP1_DATA03       0x12c 0x440 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_DA6__IPU2_CSI1_DATA03        0x12c 0x440 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_DA6__GPIO3_IO06              0x12c 0x440 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_DA6__SRC_BOOT_CFG06          0x12c 0x440 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_DA7__EIM_AD07                0x130 0x444 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_DA7__IPU1_DISP1_DATA02       0x130 0x444 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_DA7__IPU2_CSI1_DATA02        0x130 0x444 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_DA7__GPIO3_IO07              0x130 0x444 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_DA7__SRC_BOOT_CFG07          0x130 0x444 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_DA8__EIM_AD08                0x134 0x448 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_DA8__IPU1_DISP1_DATA01       0x134 0x448 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_DA8__IPU2_CSI1_DATA01        0x134 0x448 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_DA8__GPIO3_IO08              0x134 0x448 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_DA8__SRC_BOOT_CFG08          0x134 0x448 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_DA9__EIM_AD09                0x138 0x44c 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_DA9__IPU1_DISP1_DATA00       0x138 0x44c 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_DA9__IPU2_CSI1_DATA00        0x138 0x44c 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_DA9__GPIO3_IO09              0x138 0x44c 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_DA9__SRC_BOOT_CFG09          0x138 0x44c 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_DA10__EIM_AD10               0x13c 0x450 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_DA10__IPU1_DI1_PIN15         0x13c 0x450 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_DA10__IPU2_CSI1_DATA_EN      0x13c 0x450 0x8d8 0x2 0x1 +#define MX6Q_PAD_EIM_DA10__GPIO3_IO10             0x13c 0x450 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_DA10__SRC_BOOT_CFG10         0x13c 0x450 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_DA11__EIM_AD11               0x140 0x454 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_DA11__IPU1_DI1_PIN02         0x140 0x454 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_DA11__IPU2_CSI1_HSYNC        0x140 0x454 0x8dc 0x2 0x1 +#define MX6Q_PAD_EIM_DA11__GPIO3_IO11             0x140 0x454 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_DA11__SRC_BOOT_CFG11         0x140 0x454 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_DA12__EIM_AD12               0x144 0x458 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_DA12__IPU1_DI1_PIN03         0x144 0x458 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_DA12__IPU2_CSI1_VSYNC        0x144 0x458 0x8e4 0x2 0x1 +#define MX6Q_PAD_EIM_DA12__GPIO3_IO12             0x144 0x458 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_DA12__SRC_BOOT_CFG12         0x144 0x458 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_DA13__EIM_AD13               0x148 0x45c 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_DA13__IPU1_DI1_D0_CS         0x148 0x45c 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_DA13__GPIO3_IO13             0x148 0x45c 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_DA13__SRC_BOOT_CFG13         0x148 0x45c 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_DA14__EIM_AD14               0x14c 0x460 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_DA14__IPU1_DI1_D1_CS         0x14c 0x460 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_DA14__GPIO3_IO14             0x14c 0x460 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_DA14__SRC_BOOT_CFG14         0x14c 0x460 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_DA15__EIM_AD15               0x150 0x464 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_DA15__IPU1_DI1_PIN01         0x150 0x464 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_DA15__IPU1_DI1_PIN04         0x150 0x464 0x000 0x2 0x0 +#define MX6Q_PAD_EIM_DA15__GPIO3_IO15             0x150 0x464 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_DA15__SRC_BOOT_CFG15         0x150 0x464 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_WAIT__EIM_WAIT_B             0x154 0x468 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_WAIT__EIM_DTACK_B            0x154 0x468 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_WAIT__GPIO5_IO00             0x154 0x468 0x000 0x5 0x0 +#define MX6Q_PAD_EIM_WAIT__SRC_BOOT_CFG25         0x154 0x468 0x000 0x7 0x0 +#define MX6Q_PAD_EIM_BCLK__EIM_BCLK               0x158 0x46c 0x000 0x0 0x0 +#define MX6Q_PAD_EIM_BCLK__IPU1_DI1_PIN16         0x158 0x46c 0x000 0x1 0x0 +#define MX6Q_PAD_EIM_BCLK__GPIO6_IO31             0x158 0x46c 0x000 0x5 0x0 +#define MX6Q_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK  0x15c 0x470 0x000 0x0 0x0 +#define MX6Q_PAD_DI0_DISP_CLK__IPU2_DI0_DISP_CLK  0x15c 0x470 0x000 0x1 0x0 +#define MX6Q_PAD_DI0_DISP_CLK__GPIO4_IO16         0x15c 0x470 0x000 0x5 0x0 +#define MX6Q_PAD_DI0_PIN15__IPU1_DI0_PIN15        0x160 0x474 0x000 0x0 0x0 +#define MX6Q_PAD_DI0_PIN15__IPU2_DI0_PIN15        0x160 0x474 0x000 0x1 0x0 +#define MX6Q_PAD_DI0_PIN15__AUD6_TXC              0x160 0x474 0x000 0x2 0x0 +#define MX6Q_PAD_DI0_PIN15__GPIO4_IO17            0x160 0x474 0x000 0x5 0x0 +#define MX6Q_PAD_DI0_PIN2__IPU1_DI0_PIN02         0x164 0x478 0x000 0x0 0x0 +#define MX6Q_PAD_DI0_PIN2__IPU2_DI0_PIN02         0x164 0x478 0x000 0x1 0x0 +#define MX6Q_PAD_DI0_PIN2__AUD6_TXD               0x164 0x478 0x000 0x2 0x0 +#define MX6Q_PAD_DI0_PIN2__GPIO4_IO18             0x164 0x478 0x000 0x5 0x0 +#define MX6Q_PAD_DI0_PIN3__IPU1_DI0_PIN03         0x168 0x47c 0x000 0x0 0x0 +#define MX6Q_PAD_DI0_PIN3__IPU2_DI0_PIN03         0x168 0x47c 0x000 0x1 0x0 +#define MX6Q_PAD_DI0_PIN3__AUD6_TXFS              0x168 0x47c 0x000 0x2 0x0 +#define MX6Q_PAD_DI0_PIN3__GPIO4_IO19             0x168 0x47c 0x000 0x5 0x0 +#define MX6Q_PAD_DI0_PIN4__IPU1_DI0_PIN04         0x16c 0x480 0x000 0x0 0x0 +#define MX6Q_PAD_DI0_PIN4__IPU2_DI0_PIN04         0x16c 0x480 0x000 0x1 0x0 +#define MX6Q_PAD_DI0_PIN4__AUD6_RXD               0x16c 0x480 0x000 0x2 0x0 +#define MX6Q_PAD_DI0_PIN4__SD1_WP                 0x16c 0x480 0x94c 0x3 0x0 +#define MX6Q_PAD_DI0_PIN4__GPIO4_IO20             0x16c 0x480 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT0__IPU1_DISP0_DATA00    0x170 0x484 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT0__IPU2_DISP0_DATA00    0x170 0x484 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT0__ECSPI3_SCLK          0x170 0x484 0x000 0x2 0x0 +#define MX6Q_PAD_DISP0_DAT0__GPIO4_IO21           0x170 0x484 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT1__IPU1_DISP0_DATA01    0x174 0x488 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT1__IPU2_DISP0_DATA01    0x174 0x488 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT1__ECSPI3_MOSI          0x174 0x488 0x000 0x2 0x0 +#define MX6Q_PAD_DISP0_DAT1__GPIO4_IO22           0x174 0x488 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT2__IPU1_DISP0_DATA02    0x178 0x48c 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT2__IPU2_DISP0_DATA02    0x178 0x48c 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT2__ECSPI3_MISO          0x178 0x48c 0x000 0x2 0x0 +#define MX6Q_PAD_DISP0_DAT2__GPIO4_IO23           0x178 0x48c 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT3__IPU1_DISP0_DATA03    0x17c 0x490 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT3__IPU2_DISP0_DATA03    0x17c 0x490 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT3__ECSPI3_SS0           0x17c 0x490 0x000 0x2 0x0 +#define MX6Q_PAD_DISP0_DAT3__GPIO4_IO24           0x17c 0x490 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT4__IPU1_DISP0_DATA04    0x180 0x494 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT4__IPU2_DISP0_DATA04    0x180 0x494 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT4__ECSPI3_SS1           0x180 0x494 0x000 0x2 0x0 +#define MX6Q_PAD_DISP0_DAT4__GPIO4_IO25           0x180 0x494 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT5__IPU1_DISP0_DATA05    0x184 0x498 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT5__IPU2_DISP0_DATA05    0x184 0x498 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT5__ECSPI3_SS2           0x184 0x498 0x000 0x2 0x0 +#define MX6Q_PAD_DISP0_DAT5__AUD6_RXFS            0x184 0x498 0x000 0x3 0x0 +#define MX6Q_PAD_DISP0_DAT5__GPIO4_IO26           0x184 0x498 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT6__IPU1_DISP0_DATA06    0x188 0x49c 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT6__IPU2_DISP0_DATA06    0x188 0x49c 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT6__ECSPI3_SS3           0x188 0x49c 0x000 0x2 0x0 +#define MX6Q_PAD_DISP0_DAT6__AUD6_RXC             0x188 0x49c 0x000 0x3 0x0 +#define MX6Q_PAD_DISP0_DAT6__GPIO4_IO27           0x188 0x49c 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT7__IPU1_DISP0_DATA07    0x18c 0x4a0 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT7__IPU2_DISP0_DATA07    0x18c 0x4a0 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT7__ECSPI3_RDY           0x18c 0x4a0 0x000 0x2 0x0 +#define MX6Q_PAD_DISP0_DAT7__GPIO4_IO28           0x18c 0x4a0 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT8__IPU1_DISP0_DATA08    0x190 0x4a4 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT8__IPU2_DISP0_DATA08    0x190 0x4a4 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT8__PWM1_OUT             0x190 0x4a4 0x000 0x2 0x0 +#define MX6Q_PAD_DISP0_DAT8__WDOG1_B              0x190 0x4a4 0x000 0x3 0x0 +#define MX6Q_PAD_DISP0_DAT8__GPIO4_IO29           0x190 0x4a4 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT9__IPU1_DISP0_DATA09    0x194 0x4a8 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT9__IPU2_DISP0_DATA09    0x194 0x4a8 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT9__PWM2_OUT             0x194 0x4a8 0x000 0x2 0x0 +#define MX6Q_PAD_DISP0_DAT9__WDOG2_B              0x194 0x4a8 0x000 0x3 0x0 +#define MX6Q_PAD_DISP0_DAT9__GPIO4_IO30           0x194 0x4a8 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT10__IPU1_DISP0_DATA10   0x198 0x4ac 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT10__IPU2_DISP0_DATA10   0x198 0x4ac 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT10__GPIO4_IO31          0x198 0x4ac 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT11__IPU1_DISP0_DATA11   0x19c 0x4b0 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT11__IPU2_DISP0_DATA11   0x19c 0x4b0 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT11__GPIO5_IO05          0x19c 0x4b0 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT12__IPU1_DISP0_DATA12   0x1a0 0x4b4 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT12__IPU2_DISP0_DATA12   0x1a0 0x4b4 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT12__GPIO5_IO06          0x1a0 0x4b4 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT13__IPU1_DISP0_DATA13   0x1a4 0x4b8 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT13__IPU2_DISP0_DATA13   0x1a4 0x4b8 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT13__AUD5_RXFS           0x1a4 0x4b8 0x7d8 0x3 0x1 +#define MX6Q_PAD_DISP0_DAT13__GPIO5_IO07          0x1a4 0x4b8 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT14__IPU1_DISP0_DATA14   0x1a8 0x4bc 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT14__IPU2_DISP0_DATA14   0x1a8 0x4bc 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT14__AUD5_RXC            0x1a8 0x4bc 0x7d4 0x3 0x1 +#define MX6Q_PAD_DISP0_DAT14__GPIO5_IO08          0x1a8 0x4bc 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT15__IPU1_DISP0_DATA15   0x1ac 0x4c0 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT15__IPU2_DISP0_DATA15   0x1ac 0x4c0 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT15__ECSPI1_SS1          0x1ac 0x4c0 0x804 0x2 0x1 +#define MX6Q_PAD_DISP0_DAT15__ECSPI2_SS1          0x1ac 0x4c0 0x820 0x3 0x1 +#define MX6Q_PAD_DISP0_DAT15__GPIO5_IO09          0x1ac 0x4c0 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT16__IPU1_DISP0_DATA16   0x1b0 0x4c4 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT16__IPU2_DISP0_DATA16   0x1b0 0x4c4 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT16__ECSPI2_MOSI         0x1b0 0x4c4 0x818 0x2 0x1 +#define MX6Q_PAD_DISP0_DAT16__AUD5_TXC            0x1b0 0x4c4 0x7dc 0x3 0x0 +#define MX6Q_PAD_DISP0_DAT16__SDMA_EXT_EVENT0     0x1b0 0x4c4 0x90c 0x4 0x0 +#define MX6Q_PAD_DISP0_DAT16__GPIO5_IO10          0x1b0 0x4c4 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT17__IPU1_DISP0_DATA17   0x1b4 0x4c8 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT17__IPU2_DISP0_DATA17   0x1b4 0x4c8 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT17__ECSPI2_MISO         0x1b4 0x4c8 0x814 0x2 0x1 +#define MX6Q_PAD_DISP0_DAT17__AUD5_TXD            0x1b4 0x4c8 0x7d0 0x3 0x0 +#define MX6Q_PAD_DISP0_DAT17__SDMA_EXT_EVENT1     0x1b4 0x4c8 0x910 0x4 0x0 +#define MX6Q_PAD_DISP0_DAT17__GPIO5_IO11          0x1b4 0x4c8 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT18__IPU1_DISP0_DATA18   0x1b8 0x4cc 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT18__IPU2_DISP0_DATA18   0x1b8 0x4cc 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT18__ECSPI2_SS0          0x1b8 0x4cc 0x81c 0x2 0x1 +#define MX6Q_PAD_DISP0_DAT18__AUD5_TXFS           0x1b8 0x4cc 0x7e0 0x3 0x0 +#define MX6Q_PAD_DISP0_DAT18__AUD4_RXFS           0x1b8 0x4cc 0x7c0 0x4 0x0 +#define MX6Q_PAD_DISP0_DAT18__GPIO5_IO12          0x1b8 0x4cc 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT18__EIM_CS2_B           0x1b8 0x4cc 0x000 0x7 0x0 +#define MX6Q_PAD_DISP0_DAT19__IPU1_DISP0_DATA19   0x1bc 0x4d0 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT19__IPU2_DISP0_DATA19   0x1bc 0x4d0 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT19__ECSPI2_SCLK         0x1bc 0x4d0 0x810 0x2 0x1 +#define MX6Q_PAD_DISP0_DAT19__AUD5_RXD            0x1bc 0x4d0 0x7cc 0x3 0x0 +#define MX6Q_PAD_DISP0_DAT19__AUD4_RXC            0x1bc 0x4d0 0x7bc 0x4 0x0 +#define MX6Q_PAD_DISP0_DAT19__GPIO5_IO13          0x1bc 0x4d0 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT19__EIM_CS3_B           0x1bc 0x4d0 0x000 0x7 0x0 +#define MX6Q_PAD_DISP0_DAT20__IPU1_DISP0_DATA20   0x1c0 0x4d4 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT20__IPU2_DISP0_DATA20   0x1c0 0x4d4 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT20__ECSPI1_SCLK         0x1c0 0x4d4 0x7f4 0x2 0x1 +#define MX6Q_PAD_DISP0_DAT20__AUD4_TXC            0x1c0 0x4d4 0x7c4 0x3 0x0 +#define MX6Q_PAD_DISP0_DAT20__GPIO5_IO14          0x1c0 0x4d4 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT21__IPU1_DISP0_DATA21   0x1c4 0x4d8 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT21__IPU2_DISP0_DATA21   0x1c4 0x4d8 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT21__ECSPI1_MOSI         0x1c4 0x4d8 0x7fc 0x2 0x1 +#define MX6Q_PAD_DISP0_DAT21__AUD4_TXD            0x1c4 0x4d8 0x7b8 0x3 0x1 +#define MX6Q_PAD_DISP0_DAT21__GPIO5_IO15          0x1c4 0x4d8 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT22__IPU1_DISP0_DATA22   0x1c8 0x4dc 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT22__IPU2_DISP0_DATA22   0x1c8 0x4dc 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT22__ECSPI1_MISO         0x1c8 0x4dc 0x7f8 0x2 0x1 +#define MX6Q_PAD_DISP0_DAT22__AUD4_TXFS           0x1c8 0x4dc 0x7c8 0x3 0x1 +#define MX6Q_PAD_DISP0_DAT22__GPIO5_IO16          0x1c8 0x4dc 0x000 0x5 0x0 +#define MX6Q_PAD_DISP0_DAT23__IPU1_DISP0_DATA23   0x1cc 0x4e0 0x000 0x0 0x0 +#define MX6Q_PAD_DISP0_DAT23__IPU2_DISP0_DATA23   0x1cc 0x4e0 0x000 0x1 0x0 +#define MX6Q_PAD_DISP0_DAT23__ECSPI1_SS0          0x1cc 0x4e0 0x800 0x2 0x1 +#define MX6Q_PAD_DISP0_DAT23__AUD4_RXD            0x1cc 0x4e0 0x7b4 0x3 0x1 +#define MX6Q_PAD_DISP0_DAT23__GPIO5_IO17          0x1cc 0x4e0 0x000 0x5 0x0 +#define MX6Q_PAD_ENET_MDIO__ENET_MDIO             0x1d0 0x4e4 0x840 0x1 0x0 +#define MX6Q_PAD_ENET_MDIO__ESAI_RX_CLK           0x1d0 0x4e4 0x86c 0x2 0x0 +#define MX6Q_PAD_ENET_MDIO__ENET_1588_EVENT1_OUT  0x1d0 0x4e4 0x000 0x4 0x0 +#define MX6Q_PAD_ENET_MDIO__GPIO1_IO22            0x1d0 0x4e4 0x000 0x5 0x0 +#define MX6Q_PAD_ENET_MDIO__SPDIF_LOCK            0x1d0 0x4e4 0x000 0x6 0x0 +#define MX6Q_PAD_ENET_REF_CLK__ENET_TX_CLK        0x1d4 0x4e8 0x000 0x1 0x0 +#define MX6Q_PAD_ENET_REF_CLK__ESAI_RX_FS         0x1d4 0x4e8 0x85c 0x2 0x0 +#define MX6Q_PAD_ENET_REF_CLK__GPIO1_IO23         0x1d4 0x4e8 0x000 0x5 0x0 +#define MX6Q_PAD_ENET_REF_CLK__SPDIF_SR_CLK       0x1d4 0x4e8 0x000 0x6 0x0 +#define MX6Q_PAD_ENET_RX_ER__USB_OTG_ID           0x1d8 0x4ec 0x000 0x0 0x0 +#define MX6Q_PAD_ENET_RX_ER__ENET_RX_ER           0x1d8 0x4ec 0x000 0x1 0x0 +#define MX6Q_PAD_ENET_RX_ER__ESAI_RX_HF_CLK       0x1d8 0x4ec 0x864 0x2 0x0 +#define MX6Q_PAD_ENET_RX_ER__SPDIF_IN             0x1d8 0x4ec 0x914 0x3 0x1 +#define MX6Q_PAD_ENET_RX_ER__ENET_1588_EVENT2_OUT 0x1d8 0x4ec 0x000 0x4 0x0 +#define MX6Q_PAD_ENET_RX_ER__GPIO1_IO24           0x1d8 0x4ec 0x000 0x5 0x0 +#define MX6Q_PAD_ENET_CRS_DV__ENET_RX_EN          0x1dc 0x4f0 0x858 0x1 0x1 +#define MX6Q_PAD_ENET_CRS_DV__ESAI_TX_CLK         0x1dc 0x4f0 0x870 0x2 0x0 +#define MX6Q_PAD_ENET_CRS_DV__SPDIF_EXT_CLK       0x1dc 0x4f0 0x918 0x3 0x1 +#define MX6Q_PAD_ENET_CRS_DV__GPIO1_IO25          0x1dc 0x4f0 0x000 0x5 0x0 +#define MX6Q_PAD_ENET_RXD1__MLB_SIG               0x1e0 0x4f4 0x908 0x0 0x0 +#define MX6Q_PAD_ENET_RXD1__ENET_RX_DATA1         0x1e0 0x4f4 0x84c 0x1 0x1 +#define MX6Q_PAD_ENET_RXD1__ESAI_TX_FS            0x1e0 0x4f4 0x860 0x2 0x0 +#define MX6Q_PAD_ENET_RXD1__ENET_1588_EVENT3_OUT  0x1e0 0x4f4 0x000 0x4 0x0 +#define MX6Q_PAD_ENET_RXD1__GPIO1_IO26            0x1e0 0x4f4 0x000 0x5 0x0 +#define MX6Q_PAD_ENET_RXD0__ENET_RX_DATA0         0x1e4 0x4f8 0x848 0x1 0x1 +#define MX6Q_PAD_ENET_RXD0__ESAI_TX_HF_CLK        0x1e4 0x4f8 0x868 0x2 0x0 +#define MX6Q_PAD_ENET_RXD0__SPDIF_OUT             0x1e4 0x4f8 0x000 0x3 0x0 +#define MX6Q_PAD_ENET_RXD0__GPIO1_IO27            0x1e4 0x4f8 0x000 0x5 0x0 +#define MX6Q_PAD_ENET_TX_EN__ENET_TX_EN           0x1e8 0x4fc 0x000 0x1 0x0 +#define MX6Q_PAD_ENET_TX_EN__ESAI_TX3_RX2         0x1e8 0x4fc 0x880 0x2 0x0 +#define MX6Q_PAD_ENET_TX_EN__GPIO1_IO28           0x1e8 0x4fc 0x000 0x5 0x0 +#define MX6Q_PAD_ENET_TXD1__MLB_CLK               0x1ec 0x500 0x900 0x0 0x0 +#define MX6Q_PAD_ENET_TXD1__ENET_TX_DATA1         0x1ec 0x500 0x000 0x1 0x0 +#define MX6Q_PAD_ENET_TXD1__ESAI_TX2_RX3          0x1ec 0x500 0x87c 0x2 0x0 +#define MX6Q_PAD_ENET_TXD1__ENET_1588_EVENT0_IN   0x1ec 0x500 0x000 0x4 0x0 +#define MX6Q_PAD_ENET_TXD1__GPIO1_IO29            0x1ec 0x500 0x000 0x5 0x0 +#define MX6Q_PAD_ENET_TXD0__ENET_TX_DATA0         0x1f0 0x504 0x000 0x1 0x0 +#define MX6Q_PAD_ENET_TXD0__ESAI_TX4_RX1          0x1f0 0x504 0x884 0x2 0x0 +#define MX6Q_PAD_ENET_TXD0__GPIO1_IO30            0x1f0 0x504 0x000 0x5 0x0 +#define MX6Q_PAD_ENET_MDC__MLB_DATA               0x1f4 0x508 0x904 0x0 0x0 +#define MX6Q_PAD_ENET_MDC__ENET_MDC               0x1f4 0x508 0x000 0x1 0x0 +#define MX6Q_PAD_ENET_MDC__ESAI_TX5_RX0           0x1f4 0x508 0x888 0x2 0x0 +#define MX6Q_PAD_ENET_MDC__ENET_1588_EVENT1_IN    0x1f4 0x508 0x000 0x4 0x0 +#define MX6Q_PAD_ENET_MDC__GPIO1_IO31             0x1f4 0x508 0x000 0x5 0x0 +#define MX6Q_PAD_KEY_COL0__ECSPI1_SCLK            0x1f8 0x5c8 0x7f4 0x0 0x2 +#define MX6Q_PAD_KEY_COL0__ENET_RX_DATA3          0x1f8 0x5c8 0x854 0x1 0x1 +#define MX6Q_PAD_KEY_COL0__AUD5_TXC               0x1f8 0x5c8 0x7dc 0x2 0x1 +#define MX6Q_PAD_KEY_COL0__KEY_COL0               0x1f8 0x5c8 0x000 0x3 0x0 +#define MX6Q_PAD_KEY_COL0__UART4_TX_DATA          0x1f8 0x5c8 0x000 0x4 0x0 +#define MX6Q_PAD_KEY_COL0__UART4_RX_DATA          0x1f8 0x5c8 0x938 0x4 0x0 +#define MX6Q_PAD_KEY_COL0__GPIO4_IO06             0x1f8 0x5c8 0x000 0x5 0x0 +#define MX6Q_PAD_KEY_COL0__DCIC1_OUT              0x1f8 0x5c8 0x000 0x6 0x0 +#define MX6Q_PAD_KEY_ROW0__ECSPI1_MOSI            0x1fc 0x5cc 0x7fc 0x0 0x2 +#define MX6Q_PAD_KEY_ROW0__ENET_TX_DATA3          0x1fc 0x5cc 0x000 0x1 0x0 +#define MX6Q_PAD_KEY_ROW0__AUD5_TXD               0x1fc 0x5cc 0x7d0 0x2 0x1 +#define MX6Q_PAD_KEY_ROW0__KEY_ROW0               0x1fc 0x5cc 0x000 0x3 0x0 +#define MX6Q_PAD_KEY_ROW0__UART4_RX_DATA          0x1fc 0x5cc 0x938 0x4 0x1 +#define MX6Q_PAD_KEY_ROW0__UART4_TX_DATA          0x1fc 0x5cc 0x000 0x4 0x0 +#define MX6Q_PAD_KEY_ROW0__GPIO4_IO07             0x1fc 0x5cc 0x000 0x5 0x0 +#define MX6Q_PAD_KEY_ROW0__DCIC2_OUT              0x1fc 0x5cc 0x000 0x6 0x0 +#define MX6Q_PAD_KEY_COL1__ECSPI1_MISO            0x200 0x5d0 0x7f8 0x0 0x2 +#define MX6Q_PAD_KEY_COL1__ENET_MDIO              0x200 0x5d0 0x840 0x1 0x1 +#define MX6Q_PAD_KEY_COL1__AUD5_TXFS              0x200 0x5d0 0x7e0 0x2 0x1 +#define MX6Q_PAD_KEY_COL1__KEY_COL1               0x200 0x5d0 0x000 0x3 0x0 +#define MX6Q_PAD_KEY_COL1__UART5_TX_DATA          0x200 0x5d0 0x000 0x4 0x0 +#define MX6Q_PAD_KEY_COL1__UART5_RX_DATA          0x200 0x5d0 0x940 0x4 0x0 +#define MX6Q_PAD_KEY_COL1__GPIO4_IO08             0x200 0x5d0 0x000 0x5 0x0 +#define MX6Q_PAD_KEY_COL1__SD1_VSELECT            0x200 0x5d0 0x000 0x6 0x0 +#define MX6Q_PAD_KEY_ROW1__ECSPI1_SS0             0x204 0x5d4 0x800 0x0 0x2 +#define MX6Q_PAD_KEY_ROW1__ENET_COL               0x204 0x5d4 0x000 0x1 0x0 +#define MX6Q_PAD_KEY_ROW1__AUD5_RXD               0x204 0x5d4 0x7cc 0x2 0x1 +#define MX6Q_PAD_KEY_ROW1__KEY_ROW1               0x204 0x5d4 0x000 0x3 0x0 +#define MX6Q_PAD_KEY_ROW1__UART5_RX_DATA          0x204 0x5d4 0x940 0x4 0x1 +#define MX6Q_PAD_KEY_ROW1__UART5_TX_DATA          0x204 0x5d4 0x000 0x4 0x0 +#define MX6Q_PAD_KEY_ROW1__GPIO4_IO09             0x204 0x5d4 0x000 0x5 0x0 +#define MX6Q_PAD_KEY_ROW1__SD2_VSELECT            0x204 0x5d4 0x000 0x6 0x0 +#define MX6Q_PAD_KEY_COL2__ECSPI1_SS1             0x208 0x5d8 0x804 0x0 0x2 +#define MX6Q_PAD_KEY_COL2__ENET_RX_DATA2          0x208 0x5d8 0x850 0x1 0x1 +#define MX6Q_PAD_KEY_COL2__FLEXCAN1_TX            0x208 0x5d8 0x000 0x2 0x0 +#define MX6Q_PAD_KEY_COL2__KEY_COL2               0x208 0x5d8 0x000 0x3 0x0 +#define MX6Q_PAD_KEY_COL2__ENET_MDC               0x208 0x5d8 0x000 0x4 0x0 +#define MX6Q_PAD_KEY_COL2__GPIO4_IO10             0x208 0x5d8 0x000 0x5 0x0 +#define MX6Q_PAD_KEY_COL2__USB_H1_PWR_CTL_WAKE    0x208 0x5d8 0x000 0x6 0x0 +#define MX6Q_PAD_KEY_ROW2__ECSPI1_SS2             0x20c 0x5dc 0x808 0x0 0x1 +#define MX6Q_PAD_KEY_ROW2__ENET_TX_DATA2          0x20c 0x5dc 0x000 0x1 0x0 +#define MX6Q_PAD_KEY_ROW2__FLEXCAN1_RX            0x20c 0x5dc 0x7e4 0x2 0x0 +#define MX6Q_PAD_KEY_ROW2__KEY_ROW2               0x20c 0x5dc 0x000 0x3 0x0 +#define MX6Q_PAD_KEY_ROW2__SD2_VSELECT            0x20c 0x5dc 0x000 0x4 0x0 +#define MX6Q_PAD_KEY_ROW2__GPIO4_IO11             0x20c 0x5dc 0x000 0x5 0x0 +#define MX6Q_PAD_KEY_ROW2__HDMI_TX_CEC_LINE       0x20c 0x5dc 0x88c 0x6 0x1 +#define MX6Q_PAD_KEY_COL3__ECSPI1_SS3             0x210 0x5e0 0x80c 0x0 0x1 +#define MX6Q_PAD_KEY_COL3__ENET_CRS               0x210 0x5e0 0x000 0x1 0x0 +#define MX6Q_PAD_KEY_COL3__HDMI_TX_DDC_SCL        0x210 0x5e0 0x890 0x2 0x1 +#define MX6Q_PAD_KEY_COL3__KEY_COL3               0x210 0x5e0 0x000 0x3 0x0 +#define MX6Q_PAD_KEY_COL3__I2C2_SCL               0x210 0x5e0 0x8a0 0x4 0x1 +#define MX6Q_PAD_KEY_COL3__GPIO4_IO12             0x210 0x5e0 0x000 0x5 0x0 +#define MX6Q_PAD_KEY_COL3__SPDIF_IN               0x210 0x5e0 0x914 0x6 0x2 +#define MX6Q_PAD_KEY_ROW3__ASRC_EXT_CLK           0x214 0x5e4 0x7b0 0x1 0x0 +#define MX6Q_PAD_KEY_ROW3__HDMI_TX_DDC_SDA        0x214 0x5e4 0x894 0x2 0x1 +#define MX6Q_PAD_KEY_ROW3__KEY_ROW3               0x214 0x5e4 0x000 0x3 0x0 +#define MX6Q_PAD_KEY_ROW3__I2C2_SDA               0x214 0x5e4 0x8a4 0x4 0x1 +#define MX6Q_PAD_KEY_ROW3__GPIO4_IO13             0x214 0x5e4 0x000 0x5 0x0 +#define MX6Q_PAD_KEY_ROW3__SD1_VSELECT            0x214 0x5e4 0x000 0x6 0x0 +#define MX6Q_PAD_KEY_COL4__FLEXCAN2_TX            0x218 0x5e8 0x000 0x0 0x0 +#define MX6Q_PAD_KEY_COL4__IPU1_SISG4             0x218 0x5e8 0x000 0x1 0x0 +#define MX6Q_PAD_KEY_COL4__USB_OTG_OC             0x218 0x5e8 0x944 0x2 0x1 +#define MX6Q_PAD_KEY_COL4__KEY_COL4               0x218 0x5e8 0x000 0x3 0x0 +#define MX6Q_PAD_KEY_COL4__UART5_RTS_B            0x218 0x5e8 0x93c 0x4 0x0 +#define MX6Q_PAD_KEY_COL4__UART5_CTS_B            0x218 0x5e8 0x000 0x4 0x0 +#define MX6Q_PAD_KEY_COL4__GPIO4_IO14             0x218 0x5e8 0x000 0x5 0x0 +#define MX6Q_PAD_KEY_ROW4__FLEXCAN2_RX            0x21c 0x5ec 0x7e8 0x0 0x0 +#define MX6Q_PAD_KEY_ROW4__IPU1_SISG5             0x21c 0x5ec 0x000 0x1 0x0 +#define MX6Q_PAD_KEY_ROW4__USB_OTG_PWR            0x21c 0x5ec 0x000 0x2 0x0 +#define MX6Q_PAD_KEY_ROW4__KEY_ROW4               0x21c 0x5ec 0x000 0x3 0x0 +#define MX6Q_PAD_KEY_ROW4__UART5_CTS_B            0x21c 0x5ec 0x000 0x4 0x0 +#define MX6Q_PAD_KEY_ROW4__UART5_RTS_B            0x21c 0x5ec 0x93c 0x4 0x1 +#define MX6Q_PAD_KEY_ROW4__GPIO4_IO15             0x21c 0x5ec 0x000 0x5 0x0 +#define MX6Q_PAD_GPIO_0__CCM_CLKO1                0x220 0x5f0 0x000 0x0 0x0 +#define MX6Q_PAD_GPIO_0__KEY_COL5                 0x220 0x5f0 0x8e8 0x2 0x0 +#define MX6Q_PAD_GPIO_0__ASRC_EXT_CLK             0x220 0x5f0 0x7b0 0x3 0x1 +#define MX6Q_PAD_GPIO_0__EPIT1_OUT                0x220 0x5f0 0x000 0x4 0x0 +#define MX6Q_PAD_GPIO_0__GPIO1_IO00               0x220 0x5f0 0x000 0x5 0x0 +#define MX6Q_PAD_GPIO_0__USB_H1_PWR               0x220 0x5f0 0x000 0x6 0x0 +#define MX6Q_PAD_GPIO_0__SNVS_VIO_5               0x220 0x5f0 0x000 0x7 0x0 +#define MX6Q_PAD_GPIO_1__ESAI_RX_CLK              0x224 0x5f4 0x86c 0x0 0x1 +#define MX6Q_PAD_GPIO_1__WDOG2_B                  0x224 0x5f4 0x000 0x1 0x0 +#define MX6Q_PAD_GPIO_1__KEY_ROW5                 0x224 0x5f4 0x8f4 0x2 0x0 +#define MX6Q_PAD_GPIO_1__USB_OTG_ID               0x224 0x5f4 0x000 0x3 0x0 +#define MX6Q_PAD_GPIO_1__PWM2_OUT                 0x224 0x5f4 0x000 0x4 0x0 +#define MX6Q_PAD_GPIO_1__GPIO1_IO01               0x224 0x5f4 0x000 0x5 0x0 +#define MX6Q_PAD_GPIO_1__SD1_CD_B                 0x224 0x5f4 0x000 0x6 0x0 +#define MX6Q_PAD_GPIO_9__ESAI_RX_FS               0x228 0x5f8 0x85c 0x0 0x1 +#define MX6Q_PAD_GPIO_9__WDOG1_B                  0x228 0x5f8 0x000 0x1 0x0 +#define MX6Q_PAD_GPIO_9__KEY_COL6                 0x228 0x5f8 0x8ec 0x2 0x0 +#define MX6Q_PAD_GPIO_9__CCM_REF_EN_B             0x228 0x5f8 0x000 0x3 0x0 +#define MX6Q_PAD_GPIO_9__PWM1_OUT                 0x228 0x5f8 0x000 0x4 0x0 +#define MX6Q_PAD_GPIO_9__GPIO1_IO09               0x228 0x5f8 0x000 0x5 0x0 +#define MX6Q_PAD_GPIO_9__SD1_WP                   0x228 0x5f8 0x94c 0x6 0x1 +#define MX6Q_PAD_GPIO_3__ESAI_RX_HF_CLK           0x22c 0x5fc 0x864 0x0 0x1 +#define MX6Q_PAD_GPIO_3__I2C3_SCL                 0x22c 0x5fc 0x8a8 0x2 0x1 +#define MX6Q_PAD_GPIO_3__XTALOSC_REF_CLK_24M      0x22c 0x5fc 0x000 0x3 0x0 +#define MX6Q_PAD_GPIO_3__CCM_CLKO2                0x22c 0x5fc 0x000 0x4 0x0 +#define MX6Q_PAD_GPIO_3__GPIO1_IO03               0x22c 0x5fc 0x000 0x5 0x0 +#define MX6Q_PAD_GPIO_3__USB_H1_OC                0x22c 0x5fc 0x948 0x6 0x1 +#define MX6Q_PAD_GPIO_3__MLB_CLK                  0x22c 0x5fc 0x900 0x7 0x1 +#define MX6Q_PAD_GPIO_6__ESAI_TX_CLK              0x230 0x600 0x870 0x0 0x1 +#define MX6Q_PAD_GPIO_6__I2C3_SDA                 0x230 0x600 0x8ac 0x2 0x1 +#define MX6Q_PAD_GPIO_6__GPIO1_IO06               0x230 0x600 0x000 0x5 0x0 +#define MX6Q_PAD_GPIO_6__SD2_LCTL                 0x230 0x600 0x000 0x6 0x0 +#define MX6Q_PAD_GPIO_6__MLB_SIG                  0x230 0x600 0x908 0x7 0x1 +#define MX6Q_PAD_GPIO_2__ESAI_TX_FS               0x234 0x604 0x860 0x0 0x1 +#define MX6Q_PAD_GPIO_2__KEY_ROW6                 0x234 0x604 0x8f8 0x2 0x1 +#define MX6Q_PAD_GPIO_2__GPIO1_IO02               0x234 0x604 0x000 0x5 0x0 +#define MX6Q_PAD_GPIO_2__SD2_WP                   0x234 0x604 0x000 0x6 0x0 +#define MX6Q_PAD_GPIO_2__MLB_DATA                 0x234 0x604 0x904 0x7 0x1 +#define MX6Q_PAD_GPIO_4__ESAI_TX_HF_CLK           0x238 0x608 0x868 0x0 0x1 +#define MX6Q_PAD_GPIO_4__KEY_COL7                 0x238 0x608 0x8f0 0x2 0x1 +#define MX6Q_PAD_GPIO_4__GPIO1_IO04               0x238 0x608 0x000 0x5 0x0 +#define MX6Q_PAD_GPIO_4__SD2_CD_B                 0x238 0x608 0x000 0x6 0x0 +#define MX6Q_PAD_GPIO_5__ESAI_TX2_RX3             0x23c 0x60c 0x87c 0x0 0x1 +#define MX6Q_PAD_GPIO_5__KEY_ROW7                 0x23c 0x60c 0x8fc 0x2 0x1 +#define MX6Q_PAD_GPIO_5__CCM_CLKO1                0x23c 0x60c 0x000 0x3 0x0 +#define MX6Q_PAD_GPIO_5__GPIO1_IO05               0x23c 0x60c 0x000 0x5 0x0 +#define MX6Q_PAD_GPIO_5__I2C3_SCL                 0x23c 0x60c 0x8a8 0x6 0x2 +#define MX6Q_PAD_GPIO_5__ARM_EVENTI               0x23c 0x60c 0x000 0x7 0x0 +#define MX6Q_PAD_GPIO_7__ESAI_TX4_RX1             0x240 0x610 0x884 0x0 0x1 +#define MX6Q_PAD_GPIO_7__ECSPI5_RDY               0x240 0x610 0x000 0x1 0x0 +#define MX6Q_PAD_GPIO_7__EPIT1_OUT                0x240 0x610 0x000 0x2 0x0 +#define MX6Q_PAD_GPIO_7__FLEXCAN1_TX              0x240 0x610 0x000 0x3 0x0 +#define MX6Q_PAD_GPIO_7__UART2_TX_DATA            0x240 0x610 0x000 0x4 0x0 +#define MX6Q_PAD_GPIO_7__UART2_RX_DATA            0x240 0x610 0x928 0x4 0x2 +#define MX6Q_PAD_GPIO_7__GPIO1_IO07               0x240 0x610 0x000 0x5 0x0 +#define MX6Q_PAD_GPIO_7__SPDIF_LOCK               0x240 0x610 0x000 0x6 0x0 +#define MX6Q_PAD_GPIO_7__USB_OTG_HOST_MODE        0x240 0x610 0x000 0x7 0x0 +#define MX6Q_PAD_GPIO_8__ESAI_TX5_RX0             0x244 0x614 0x888 0x0 0x1 +#define MX6Q_PAD_GPIO_8__XTALOSC_REF_CLK_32K      0x244 0x614 0x000 0x1 0x0 +#define MX6Q_PAD_GPIO_8__EPIT2_OUT                0x244 0x614 0x000 0x2 0x0 +#define MX6Q_PAD_GPIO_8__FLEXCAN1_RX              0x244 0x614 0x7e4 0x3 0x1 +#define MX6Q_PAD_GPIO_8__UART2_RX_DATA            0x244 0x614 0x928 0x4 0x3 +#define MX6Q_PAD_GPIO_8__UART2_TX_DATA            0x244 0x614 0x000 0x4 0x0 +#define MX6Q_PAD_GPIO_8__GPIO1_IO08               0x244 0x614 0x000 0x5 0x0 +#define MX6Q_PAD_GPIO_8__SPDIF_SR_CLK             0x244 0x614 0x000 0x6 0x0 +#define MX6Q_PAD_GPIO_8__USB_OTG_PWR_CTL_WAKE     0x244 0x614 0x000 0x7 0x0 +#define MX6Q_PAD_GPIO_16__ESAI_TX3_RX2            0x248 0x618 0x880 0x0 0x1 +#define MX6Q_PAD_GPIO_16__ENET_1588_EVENT2_IN     0x248 0x618 0x000 0x1 0x0 +#define MX6Q_PAD_GPIO_16__ENET_REF_CLK            0x248 0x618 0x83c 0x2 0x1 +#define MX6Q_PAD_GPIO_16__SD1_LCTL                0x248 0x618 0x000 0x3 0x0 +#define MX6Q_PAD_GPIO_16__SPDIF_IN                0x248 0x618 0x914 0x4 0x3 +#define MX6Q_PAD_GPIO_16__GPIO7_IO11              0x248 0x618 0x000 0x5 0x0 +#define MX6Q_PAD_GPIO_16__I2C3_SDA                0x248 0x618 0x8ac 0x6 0x2 +#define MX6Q_PAD_GPIO_16__JTAG_DE_B               0x248 0x618 0x000 0x7 0x0 +#define MX6Q_PAD_GPIO_17__ESAI_TX0                0x24c 0x61c 0x874 0x0 0x0 +#define MX6Q_PAD_GPIO_17__ENET_1588_EVENT3_IN     0x24c 0x61c 0x000 0x1 0x0 +#define MX6Q_PAD_GPIO_17__CCM_PMIC_READY          0x24c 0x61c 0x7f0 0x2 0x1 +#define MX6Q_PAD_GPIO_17__SDMA_EXT_EVENT0         0x24c 0x61c 0x90c 0x3 0x1 +#define MX6Q_PAD_GPIO_17__SPDIF_OUT               0x24c 0x61c 0x000 0x4 0x0 +#define MX6Q_PAD_GPIO_17__GPIO7_IO12              0x24c 0x61c 0x000 0x5 0x0 +#define MX6Q_PAD_GPIO_18__ESAI_TX1                0x250 0x620 0x878 0x0 0x0 +#define MX6Q_PAD_GPIO_18__ENET_RX_CLK             0x250 0x620 0x844 0x1 0x1 +#define MX6Q_PAD_GPIO_18__SD3_VSELECT             0x250 0x620 0x000 0x2 0x0 +#define MX6Q_PAD_GPIO_18__SDMA_EXT_EVENT1         0x250 0x620 0x910 0x3 0x1 +#define MX6Q_PAD_GPIO_18__ASRC_EXT_CLK            0x250 0x620 0x7b0 0x4 0x2 +#define MX6Q_PAD_GPIO_18__GPIO7_IO13              0x250 0x620 0x000 0x5 0x0 +#define MX6Q_PAD_GPIO_18__SNVS_VIO_5_CTL          0x250 0x620 0x000 0x6 0x0 +#define MX6Q_PAD_GPIO_19__KEY_COL5                0x254 0x624 0x8e8 0x0 0x1 +#define MX6Q_PAD_GPIO_19__ENET_1588_EVENT0_OUT    0x254 0x624 0x000 0x1 0x0 +#define MX6Q_PAD_GPIO_19__SPDIF_OUT               0x254 0x624 0x000 0x2 0x0 +#define MX6Q_PAD_GPIO_19__CCM_CLKO1               0x254 0x624 0x000 0x3 0x0 +#define MX6Q_PAD_GPIO_19__ECSPI1_RDY              0x254 0x624 0x000 0x4 0x0 +#define MX6Q_PAD_GPIO_19__GPIO4_IO05              0x254 0x624 0x000 0x5 0x0 +#define MX6Q_PAD_GPIO_19__ENET_TX_ER              0x254 0x624 0x000 0x6 0x0 +#define MX6Q_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK    0x258 0x628 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_PIXCLK__GPIO5_IO18          0x258 0x628 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_PIXCLK__ARM_EVENTO          0x258 0x628 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC       0x25c 0x62c 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_MCLK__CCM_CLKO1             0x25c 0x62c 0x000 0x3 0x0 +#define MX6Q_PAD_CSI0_MCLK__GPIO5_IO19            0x25c 0x62c 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_MCLK__ARM_TRACE_CTL         0x25c 0x62c 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DATA_EN__IPU1_CSI0_DATA_EN  0x260 0x630 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DATA_EN__EIM_DATA00         0x260 0x630 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DATA_EN__GPIO5_IO20         0x260 0x630 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_DATA_EN__ARM_TRACE_CLK      0x260 0x630 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC      0x264 0x634 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_VSYNC__EIM_DATA01           0x264 0x634 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_VSYNC__GPIO5_IO21           0x264 0x634 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_VSYNC__ARM_TRACE00          0x264 0x634 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DAT4__IPU1_CSI0_DATA04      0x268 0x638 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DAT4__EIM_DATA02            0x268 0x638 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DAT4__ECSPI1_SCLK           0x268 0x638 0x7f4 0x2 0x3 +#define MX6Q_PAD_CSI0_DAT4__KEY_COL5              0x268 0x638 0x8e8 0x3 0x2 +#define MX6Q_PAD_CSI0_DAT4__AUD3_TXC              0x268 0x638 0x000 0x4 0x0 +#define MX6Q_PAD_CSI0_DAT4__GPIO5_IO22            0x268 0x638 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_DAT4__ARM_TRACE01           0x268 0x638 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DAT5__IPU1_CSI0_DATA05      0x26c 0x63c 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DAT5__EIM_DATA03            0x26c 0x63c 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DAT5__ECSPI1_MOSI           0x26c 0x63c 0x7fc 0x2 0x3 +#define MX6Q_PAD_CSI0_DAT5__KEY_ROW5              0x26c 0x63c 0x8f4 0x3 0x1 +#define MX6Q_PAD_CSI0_DAT5__AUD3_TXD              0x26c 0x63c 0x000 0x4 0x0 +#define MX6Q_PAD_CSI0_DAT5__GPIO5_IO23            0x26c 0x63c 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_DAT5__ARM_TRACE02           0x26c 0x63c 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DAT6__IPU1_CSI0_DATA06      0x270 0x640 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DAT6__EIM_DATA04            0x270 0x640 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DAT6__ECSPI1_MISO           0x270 0x640 0x7f8 0x2 0x3 +#define MX6Q_PAD_CSI0_DAT6__KEY_COL6              0x270 0x640 0x8ec 0x3 0x1 +#define MX6Q_PAD_CSI0_DAT6__AUD3_TXFS             0x270 0x640 0x000 0x4 0x0 +#define MX6Q_PAD_CSI0_DAT6__GPIO5_IO24            0x270 0x640 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_DAT6__ARM_TRACE03           0x270 0x640 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DAT7__IPU1_CSI0_DATA07      0x274 0x644 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DAT7__EIM_DATA05            0x274 0x644 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DAT7__ECSPI1_SS0            0x274 0x644 0x800 0x2 0x3 +#define MX6Q_PAD_CSI0_DAT7__KEY_ROW6              0x274 0x644 0x8f8 0x3 0x2 +#define MX6Q_PAD_CSI0_DAT7__AUD3_RXD              0x274 0x644 0x000 0x4 0x0 +#define MX6Q_PAD_CSI0_DAT7__GPIO5_IO25            0x274 0x644 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_DAT7__ARM_TRACE04           0x274 0x644 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DAT8__IPU1_CSI0_DATA08      0x278 0x648 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DAT8__EIM_DATA06            0x278 0x648 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DAT8__ECSPI2_SCLK           0x278 0x648 0x810 0x2 0x2 +#define MX6Q_PAD_CSI0_DAT8__KEY_COL7              0x278 0x648 0x8f0 0x3 0x2 +#define MX6Q_PAD_CSI0_DAT8__I2C1_SDA              0x278 0x648 0x89c 0x4 0x1 +#define MX6Q_PAD_CSI0_DAT8__GPIO5_IO26            0x278 0x648 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_DAT8__ARM_TRACE05           0x278 0x648 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DAT9__IPU1_CSI0_DATA09      0x27c 0x64c 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DAT9__EIM_DATA07            0x27c 0x64c 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DAT9__ECSPI2_MOSI           0x27c 0x64c 0x818 0x2 0x2 +#define MX6Q_PAD_CSI0_DAT9__KEY_ROW7              0x27c 0x64c 0x8fc 0x3 0x2 +#define MX6Q_PAD_CSI0_DAT9__I2C1_SCL              0x27c 0x64c 0x898 0x4 0x1 +#define MX6Q_PAD_CSI0_DAT9__GPIO5_IO27            0x27c 0x64c 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_DAT9__ARM_TRACE06           0x27c 0x64c 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DAT10__IPU1_CSI0_DATA10     0x280 0x650 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DAT10__AUD3_RXC             0x280 0x650 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DAT10__ECSPI2_MISO          0x280 0x650 0x814 0x2 0x2 +#define MX6Q_PAD_CSI0_DAT10__UART1_TX_DATA        0x280 0x650 0x000 0x3 0x0 +#define MX6Q_PAD_CSI0_DAT10__UART1_RX_DATA        0x280 0x650 0x920 0x3 0x0 +#define MX6Q_PAD_CSI0_DAT10__GPIO5_IO28           0x280 0x650 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_DAT10__ARM_TRACE07          0x280 0x650 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DAT11__IPU1_CSI0_DATA11     0x284 0x654 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DAT11__AUD3_RXFS            0x284 0x654 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DAT11__ECSPI2_SS0           0x284 0x654 0x81c 0x2 0x2 +#define MX6Q_PAD_CSI0_DAT11__UART1_RX_DATA        0x284 0x654 0x920 0x3 0x1 +#define MX6Q_PAD_CSI0_DAT11__UART1_TX_DATA        0x284 0x654 0x000 0x3 0x0 +#define MX6Q_PAD_CSI0_DAT11__GPIO5_IO29           0x284 0x654 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_DAT11__ARM_TRACE08          0x284 0x654 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DAT12__IPU1_CSI0_DATA12     0x288 0x658 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DAT12__EIM_DATA08           0x288 0x658 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DAT12__UART4_TX_DATA        0x288 0x658 0x000 0x3 0x0 +#define MX6Q_PAD_CSI0_DAT12__UART4_RX_DATA        0x288 0x658 0x938 0x3 0x2 +#define MX6Q_PAD_CSI0_DAT12__GPIO5_IO30           0x288 0x658 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_DAT12__ARM_TRACE09          0x288 0x658 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DAT13__IPU1_CSI0_DATA13     0x28c 0x65c 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DAT13__EIM_DATA09           0x28c 0x65c 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DAT13__UART4_RX_DATA        0x28c 0x65c 0x938 0x3 0x3 +#define MX6Q_PAD_CSI0_DAT13__UART4_TX_DATA        0x28c 0x65c 0x000 0x3 0x0 +#define MX6Q_PAD_CSI0_DAT13__GPIO5_IO31           0x28c 0x65c 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_DAT13__ARM_TRACE10          0x28c 0x65c 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DAT14__IPU1_CSI0_DATA14     0x290 0x660 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DAT14__EIM_DATA10           0x290 0x660 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DAT14__UART5_TX_DATA        0x290 0x660 0x000 0x3 0x0 +#define MX6Q_PAD_CSI0_DAT14__UART5_RX_DATA        0x290 0x660 0x940 0x3 0x2 +#define MX6Q_PAD_CSI0_DAT14__GPIO6_IO00           0x290 0x660 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_DAT14__ARM_TRACE11          0x290 0x660 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DAT15__IPU1_CSI0_DATA15     0x294 0x664 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DAT15__EIM_DATA11           0x294 0x664 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DAT15__UART5_RX_DATA        0x294 0x664 0x940 0x3 0x3 +#define MX6Q_PAD_CSI0_DAT15__UART5_TX_DATA        0x294 0x664 0x000 0x3 0x0 +#define MX6Q_PAD_CSI0_DAT15__GPIO6_IO01           0x294 0x664 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_DAT15__ARM_TRACE12          0x294 0x664 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DAT16__IPU1_CSI0_DATA16     0x298 0x668 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DAT16__EIM_DATA12           0x298 0x668 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DAT16__UART4_RTS_B          0x298 0x668 0x934 0x3 0x0 +#define MX6Q_PAD_CSI0_DAT16__UART4_CTS_B          0x298 0x668 0x000 0x3 0x0 +#define MX6Q_PAD_CSI0_DAT16__GPIO6_IO02           0x298 0x668 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_DAT16__ARM_TRACE13          0x298 0x668 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DAT17__IPU1_CSI0_DATA17     0x29c 0x66c 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DAT17__EIM_DATA13           0x29c 0x66c 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DAT17__UART4_CTS_B          0x29c 0x66c 0x000 0x3 0x0 +#define MX6Q_PAD_CSI0_DAT17__UART4_RTS_B          0x29c 0x66c 0x934 0x3 0x1 +#define MX6Q_PAD_CSI0_DAT17__GPIO6_IO03           0x29c 0x66c 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_DAT17__ARM_TRACE14          0x29c 0x66c 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DAT18__IPU1_CSI0_DATA18     0x2a0 0x670 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DAT18__EIM_DATA14           0x2a0 0x670 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DAT18__UART5_RTS_B          0x2a0 0x670 0x93c 0x3 0x2 +#define MX6Q_PAD_CSI0_DAT18__UART5_CTS_B          0x2a0 0x670 0x000 0x3 0x0 +#define MX6Q_PAD_CSI0_DAT18__GPIO6_IO04           0x2a0 0x670 0x000 0x5 0x0 +#define MX6Q_PAD_CSI0_DAT18__ARM_TRACE15          0x2a0 0x670 0x000 0x7 0x0 +#define MX6Q_PAD_CSI0_DAT19__IPU1_CSI0_DATA19     0x2a4 0x674 0x000 0x0 0x0 +#define MX6Q_PAD_CSI0_DAT19__EIM_DATA15           0x2a4 0x674 0x000 0x1 0x0 +#define MX6Q_PAD_CSI0_DAT19__UART5_CTS_B          0x2a4 0x674 0x000 0x3 0x0 +#define MX6Q_PAD_CSI0_DAT19__UART5_RTS_B          0x2a4 0x674 0x93c 0x3 0x3 +#define MX6Q_PAD_CSI0_DAT19__GPIO6_IO05           0x2a4 0x674 0x000 0x5 0x0 +#define MX6Q_PAD_SD3_DAT7__SD3_DATA7              0x2a8 0x690 0x000 0x0 0x0 +#define MX6Q_PAD_SD3_DAT7__UART1_TX_DATA          0x2a8 0x690 0x000 0x1 0x0 +#define MX6Q_PAD_SD3_DAT7__UART1_RX_DATA          0x2a8 0x690 0x920 0x1 0x2 +#define MX6Q_PAD_SD3_DAT7__GPIO6_IO17             0x2a8 0x690 0x000 0x5 0x0 +#define MX6Q_PAD_SD3_DAT6__SD3_DATA6              0x2ac 0x694 0x000 0x0 0x0 +#define MX6Q_PAD_SD3_DAT6__UART1_RX_DATA          0x2ac 0x694 0x920 0x1 0x3 +#define MX6Q_PAD_SD3_DAT6__UART1_TX_DATA          0x2ac 0x694 0x000 0x1 0x0 +#define MX6Q_PAD_SD3_DAT6__GPIO6_IO18             0x2ac 0x694 0x000 0x5 0x0 +#define MX6Q_PAD_SD3_DAT5__SD3_DATA5              0x2b0 0x698 0x000 0x0 0x0 +#define MX6Q_PAD_SD3_DAT5__UART2_TX_DATA          0x2b0 0x698 0x000 0x1 0x0 +#define MX6Q_PAD_SD3_DAT5__UART2_RX_DATA          0x2b0 0x698 0x928 0x1 0x4 +#define MX6Q_PAD_SD3_DAT5__GPIO7_IO00             0x2b0 0x698 0x000 0x5 0x0 +#define MX6Q_PAD_SD3_DAT4__SD3_DATA4              0x2b4 0x69c 0x000 0x0 0x0 +#define MX6Q_PAD_SD3_DAT4__UART2_RX_DATA          0x2b4 0x69c 0x928 0x1 0x5 +#define MX6Q_PAD_SD3_DAT4__UART2_TX_DATA          0x2b4 0x69c 0x000 0x1 0x0 +#define MX6Q_PAD_SD3_DAT4__GPIO7_IO01             0x2b4 0x69c 0x000 0x5 0x0 +#define MX6Q_PAD_SD3_CMD__SD3_CMD                 0x2b8 0x6a0 0x000 0x0 0x0 +#define MX6Q_PAD_SD3_CMD__UART2_CTS_B             0x2b8 0x6a0 0x000 0x1 0x0 +#define MX6Q_PAD_SD3_CMD__UART2_RTS_B             0x2b8 0x6a0 0x924 0x1 0x2 +#define MX6Q_PAD_SD3_CMD__FLEXCAN1_TX             0x2b8 0x6a0 0x000 0x2 0x0 +#define MX6Q_PAD_SD3_CMD__GPIO7_IO02              0x2b8 0x6a0 0x000 0x5 0x0 +#define MX6Q_PAD_SD3_CLK__SD3_CLK                 0x2bc 0x6a4 0x000 0x0 0x0 +#define MX6Q_PAD_SD3_CLK__UART2_RTS_B             0x2bc 0x6a4 0x924 0x1 0x3 +#define MX6Q_PAD_SD3_CLK__UART2_CTS_B             0x2bc 0x6a4 0x000 0x1 0x0 +#define MX6Q_PAD_SD3_CLK__FLEXCAN1_RX             0x2bc 0x6a4 0x7e4 0x2 0x2 +#define MX6Q_PAD_SD3_CLK__GPIO7_IO03              0x2bc 0x6a4 0x000 0x5 0x0 +#define MX6Q_PAD_SD3_DAT0__SD3_DATA0              0x2c0 0x6a8 0x000 0x0 0x0 +#define MX6Q_PAD_SD3_DAT0__UART1_CTS_B            0x2c0 0x6a8 0x000 0x1 0x0 +#define MX6Q_PAD_SD3_DAT0__UART1_RTS_B            0x2c0 0x6a8 0x91c 0x1 0x2 +#define MX6Q_PAD_SD3_DAT0__FLEXCAN2_TX            0x2c0 0x6a8 0x000 0x2 0x0 +#define MX6Q_PAD_SD3_DAT0__GPIO7_IO04             0x2c0 0x6a8 0x000 0x5 0x0 +#define MX6Q_PAD_SD3_DAT1__SD3_DATA1              0x2c4 0x6ac 0x000 0x0 0x0 +#define MX6Q_PAD_SD3_DAT1__UART1_RTS_B            0x2c4 0x6ac 0x91c 0x1 0x3 +#define MX6Q_PAD_SD3_DAT1__UART1_CTS_B            0x2c4 0x6ac 0x000 0x1 0x0 +#define MX6Q_PAD_SD3_DAT1__FLEXCAN2_RX            0x2c4 0x6ac 0x7e8 0x2 0x1 +#define MX6Q_PAD_SD3_DAT1__GPIO7_IO05             0x2c4 0x6ac 0x000 0x5 0x0 +#define MX6Q_PAD_SD3_DAT2__SD3_DATA2              0x2c8 0x6b0 0x000 0x0 0x0 +#define MX6Q_PAD_SD3_DAT2__GPIO7_IO06             0x2c8 0x6b0 0x000 0x5 0x0 +#define MX6Q_PAD_SD3_DAT3__SD3_DATA3              0x2cc 0x6b4 0x000 0x0 0x0 +#define MX6Q_PAD_SD3_DAT3__UART3_CTS_B            0x2cc 0x6b4 0x000 0x1 0x0 +#define MX6Q_PAD_SD3_DAT3__UART3_RTS_B            0x2cc 0x6b4 0x92c 0x1 0x4 +#define MX6Q_PAD_SD3_DAT3__GPIO7_IO07             0x2cc 0x6b4 0x000 0x5 0x0 +#define MX6Q_PAD_SD3_RST__SD3_RESET               0x2d0 0x6b8 0x000 0x0 0x0 +#define MX6Q_PAD_SD3_RST__UART3_RTS_B             0x2d0 0x6b8 0x92c 0x1 0x5 +#define MX6Q_PAD_SD3_RST__UART3_CTS_B             0x2d0 0x6b8 0x000 0x1 0x0 +#define MX6Q_PAD_SD3_RST__GPIO7_IO08              0x2d0 0x6b8 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_CLE__NAND_CLE              0x2d4 0x6bc 0x000 0x0 0x0 +#define MX6Q_PAD_NANDF_CLE__IPU2_SISG4            0x2d4 0x6bc 0x000 0x1 0x0 +#define MX6Q_PAD_NANDF_CLE__GPIO6_IO07            0x2d4 0x6bc 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_ALE__NAND_ALE              0x2d8 0x6c0 0x000 0x0 0x0 +#define MX6Q_PAD_NANDF_ALE__SD4_RESET             0x2d8 0x6c0 0x000 0x1 0x0 +#define MX6Q_PAD_NANDF_ALE__GPIO6_IO08            0x2d8 0x6c0 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_WP_B__NAND_WP_B            0x2dc 0x6c4 0x000 0x0 0x0 +#define MX6Q_PAD_NANDF_WP_B__IPU2_SISG5           0x2dc 0x6c4 0x000 0x1 0x0 +#define MX6Q_PAD_NANDF_WP_B__GPIO6_IO09           0x2dc 0x6c4 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_RB0__NAND_READY_B          0x2e0 0x6c8 0x000 0x0 0x0 +#define MX6Q_PAD_NANDF_RB0__IPU2_DI0_PIN01        0x2e0 0x6c8 0x000 0x1 0x0 +#define MX6Q_PAD_NANDF_RB0__GPIO6_IO10            0x2e0 0x6c8 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_CS0__NAND_CE0_B            0x2e4 0x6cc 0x000 0x0 0x0 +#define MX6Q_PAD_NANDF_CS0__GPIO6_IO11            0x2e4 0x6cc 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_CS1__NAND_CE1_B            0x2e8 0x6d0 0x000 0x0 0x0 +#define MX6Q_PAD_NANDF_CS1__SD4_VSELECT           0x2e8 0x6d0 0x000 0x1 0x0 +#define MX6Q_PAD_NANDF_CS1__SD3_VSELECT           0x2e8 0x6d0 0x000 0x2 0x0 +#define MX6Q_PAD_NANDF_CS1__GPIO6_IO14            0x2e8 0x6d0 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_CS2__NAND_CE2_B            0x2ec 0x6d4 0x000 0x0 0x0 +#define MX6Q_PAD_NANDF_CS2__IPU1_SISG0            0x2ec 0x6d4 0x000 0x1 0x0 +#define MX6Q_PAD_NANDF_CS2__ESAI_TX0              0x2ec 0x6d4 0x874 0x2 0x1 +#define MX6Q_PAD_NANDF_CS2__EIM_CRE               0x2ec 0x6d4 0x000 0x3 0x0 +#define MX6Q_PAD_NANDF_CS2__CCM_CLKO2             0x2ec 0x6d4 0x000 0x4 0x0 +#define MX6Q_PAD_NANDF_CS2__GPIO6_IO15            0x2ec 0x6d4 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_CS2__IPU2_SISG0            0x2ec 0x6d4 0x000 0x6 0x0 +#define MX6Q_PAD_NANDF_CS3__NAND_CE3_B            0x2f0 0x6d8 0x000 0x0 0x0 +#define MX6Q_PAD_NANDF_CS3__IPU1_SISG1            0x2f0 0x6d8 0x000 0x1 0x0 +#define MX6Q_PAD_NANDF_CS3__ESAI_TX1              0x2f0 0x6d8 0x878 0x2 0x1 +#define MX6Q_PAD_NANDF_CS3__EIM_ADDR26            0x2f0 0x6d8 0x000 0x3 0x0 +#define MX6Q_PAD_NANDF_CS3__GPIO6_IO16            0x2f0 0x6d8 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_CS3__IPU2_SISG1            0x2f0 0x6d8 0x000 0x6 0x0 +#define MX6Q_PAD_SD4_CMD__SD4_CMD                 0x2f4 0x6dc 0x000 0x0 0x0 +#define MX6Q_PAD_SD4_CMD__NAND_RE_B               0x2f4 0x6dc 0x000 0x1 0x0 +#define MX6Q_PAD_SD4_CMD__UART3_TX_DATA           0x2f4 0x6dc 0x000 0x2 0x0 +#define MX6Q_PAD_SD4_CMD__UART3_RX_DATA           0x2f4 0x6dc 0x930 0x2 0x2 +#define MX6Q_PAD_SD4_CMD__GPIO7_IO09              0x2f4 0x6dc 0x000 0x5 0x0 +#define MX6Q_PAD_SD4_CLK__SD4_CLK                 0x2f8 0x6e0 0x000 0x0 0x0 +#define MX6Q_PAD_SD4_CLK__NAND_WE_B               0x2f8 0x6e0 0x000 0x1 0x0 +#define MX6Q_PAD_SD4_CLK__UART3_RX_DATA           0x2f8 0x6e0 0x930 0x2 0x3 +#define MX6Q_PAD_SD4_CLK__UART3_TX_DATA           0x2f8 0x6e0 0x000 0x2 0x0 +#define MX6Q_PAD_SD4_CLK__GPIO7_IO10              0x2f8 0x6e0 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_D0__NAND_DATA00            0x2fc 0x6e4 0x000 0x0 0x0 +#define MX6Q_PAD_NANDF_D0__SD1_DATA4              0x2fc 0x6e4 0x000 0x1 0x0 +#define MX6Q_PAD_NANDF_D0__GPIO2_IO00             0x2fc 0x6e4 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_D1__NAND_DATA01            0x300 0x6e8 0x000 0x0 0x0 +#define MX6Q_PAD_NANDF_D1__SD1_DATA5              0x300 0x6e8 0x000 0x1 0x0 +#define MX6Q_PAD_NANDF_D1__GPIO2_IO01             0x300 0x6e8 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_D2__NAND_DATA02            0x304 0x6ec 0x000 0x0 0x0 +#define MX6Q_PAD_NANDF_D2__SD1_DATA6              0x304 0x6ec 0x000 0x1 0x0 +#define MX6Q_PAD_NANDF_D2__GPIO2_IO02             0x304 0x6ec 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_D3__NAND_DATA03            0x308 0x6f0 0x000 0x0 0x0 +#define MX6Q_PAD_NANDF_D3__SD1_DATA7              0x308 0x6f0 0x000 0x1 0x0 +#define MX6Q_PAD_NANDF_D3__GPIO2_IO03             0x308 0x6f0 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_D4__NAND_DATA04            0x30c 0x6f4 0x000 0x0 0x0 +#define MX6Q_PAD_NANDF_D4__SD2_DATA4              0x30c 0x6f4 0x000 0x1 0x0 +#define MX6Q_PAD_NANDF_D4__GPIO2_IO04             0x30c 0x6f4 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_D5__NAND_DATA05            0x310 0x6f8 0x000 0x0 0x0 +#define MX6Q_PAD_NANDF_D5__SD2_DATA5              0x310 0x6f8 0x000 0x1 0x0 +#define MX6Q_PAD_NANDF_D5__GPIO2_IO05             0x310 0x6f8 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_D6__NAND_DATA06            0x314 0x6fc 0x000 0x0 0x0 +#define MX6Q_PAD_NANDF_D6__SD2_DATA6              0x314 0x6fc 0x000 0x1 0x0 +#define MX6Q_PAD_NANDF_D6__GPIO2_IO06             0x314 0x6fc 0x000 0x5 0x0 +#define MX6Q_PAD_NANDF_D7__NAND_DATA07            0x318 0x700 0x000 0x0 0x0 +#define MX6Q_PAD_NANDF_D7__SD2_DATA7              0x318 0x700 0x000 0x1 0x0 +#define MX6Q_PAD_NANDF_D7__GPIO2_IO07             0x318 0x700 0x000 0x5 0x0 +#define MX6Q_PAD_SD4_DAT0__SD4_DATA0              0x31c 0x704 0x000 0x1 0x0 +#define MX6Q_PAD_SD4_DAT0__NAND_DQS               0x31c 0x704 0x000 0x2 0x0 +#define MX6Q_PAD_SD4_DAT0__GPIO2_IO08             0x31c 0x704 0x000 0x5 0x0 +#define MX6Q_PAD_SD4_DAT1__SD4_DATA1              0x320 0x708 0x000 0x1 0x0 +#define MX6Q_PAD_SD4_DAT1__PWM3_OUT               0x320 0x708 0x000 0x2 0x0 +#define MX6Q_PAD_SD4_DAT1__GPIO2_IO09             0x320 0x708 0x000 0x5 0x0 +#define MX6Q_PAD_SD4_DAT2__SD4_DATA2              0x324 0x70c 0x000 0x1 0x0 +#define MX6Q_PAD_SD4_DAT2__PWM4_OUT               0x324 0x70c 0x000 0x2 0x0 +#define MX6Q_PAD_SD4_DAT2__GPIO2_IO10             0x324 0x70c 0x000 0x5 0x0 +#define MX6Q_PAD_SD4_DAT3__SD4_DATA3              0x328 0x710 0x000 0x1 0x0 +#define MX6Q_PAD_SD4_DAT3__GPIO2_IO11             0x328 0x710 0x000 0x5 0x0 +#define MX6Q_PAD_SD4_DAT4__SD4_DATA4              0x32c 0x714 0x000 0x1 0x0 +#define MX6Q_PAD_SD4_DAT4__UART2_RX_DATA          0x32c 0x714 0x928 0x2 0x6 +#define MX6Q_PAD_SD4_DAT4__UART2_TX_DATA          0x32c 0x714 0x000 0x2 0x0 +#define MX6Q_PAD_SD4_DAT4__GPIO2_IO12             0x32c 0x714 0x000 0x5 0x0 +#define MX6Q_PAD_SD4_DAT5__SD4_DATA5              0x330 0x718 0x000 0x1 0x0 +#define MX6Q_PAD_SD4_DAT5__UART2_RTS_B            0x330 0x718 0x924 0x2 0x4 +#define MX6Q_PAD_SD4_DAT5__UART2_CTS_B            0x330 0x718 0x000 0x2 0x0 +#define MX6Q_PAD_SD4_DAT5__GPIO2_IO13             0x330 0x718 0x000 0x5 0x0 +#define MX6Q_PAD_SD4_DAT6__SD4_DATA6              0x334 0x71c 0x000 0x1 0x0 +#define MX6Q_PAD_SD4_DAT6__UART2_CTS_B            0x334 0x71c 0x000 0x2 0x0 +#define MX6Q_PAD_SD4_DAT6__UART2_RTS_B            0x334 0x71c 0x924 0x2 0x5 +#define MX6Q_PAD_SD4_DAT6__GPIO2_IO14             0x334 0x71c 0x000 0x5 0x0 +#define MX6Q_PAD_SD4_DAT7__SD4_DATA7              0x338 0x720 0x000 0x1 0x0 +#define MX6Q_PAD_SD4_DAT7__UART2_TX_DATA          0x338 0x720 0x000 0x2 0x0 +#define MX6Q_PAD_SD4_DAT7__UART2_RX_DATA          0x338 0x720 0x928 0x2 0x7 +#define MX6Q_PAD_SD4_DAT7__GPIO2_IO15             0x338 0x720 0x000 0x5 0x0 +#define MX6Q_PAD_SD1_DAT1__SD1_DATA1              0x33c 0x724 0x000 0x0 0x0 +#define MX6Q_PAD_SD1_DAT1__ECSPI5_SS0             0x33c 0x724 0x834 0x1 0x1 +#define MX6Q_PAD_SD1_DAT1__PWM3_OUT               0x33c 0x724 0x000 0x2 0x0 +#define MX6Q_PAD_SD1_DAT1__GPT_CAPTURE2           0x33c 0x724 0x000 0x3 0x0 +#define MX6Q_PAD_SD1_DAT1__GPIO1_IO17             0x33c 0x724 0x000 0x5 0x0 +#define MX6Q_PAD_SD1_DAT0__SD1_DATA0              0x340 0x728 0x000 0x0 0x0 +#define MX6Q_PAD_SD1_DAT0__ECSPI5_MISO            0x340 0x728 0x82c 0x1 0x1 +#define MX6Q_PAD_SD1_DAT0__GPT_CAPTURE1           0x340 0x728 0x000 0x3 0x0 +#define MX6Q_PAD_SD1_DAT0__GPIO1_IO16             0x340 0x728 0x000 0x5 0x0 +#define MX6Q_PAD_SD1_DAT3__SD1_DATA3              0x344 0x72c 0x000 0x0 0x0 +#define MX6Q_PAD_SD1_DAT3__ECSPI5_SS2             0x344 0x72c 0x000 0x1 0x0 +#define MX6Q_PAD_SD1_DAT3__GPT_COMPARE3           0x344 0x72c 0x000 0x2 0x0 +#define MX6Q_PAD_SD1_DAT3__PWM1_OUT               0x344 0x72c 0x000 0x3 0x0 +#define MX6Q_PAD_SD1_DAT3__WDOG2_B                0x344 0x72c 0x000 0x4 0x0 +#define MX6Q_PAD_SD1_DAT3__GPIO1_IO21             0x344 0x72c 0x000 0x5 0x0 +#define MX6Q_PAD_SD1_DAT3__WDOG2_RESET_B_DEB      0x344 0x72c 0x000 0x6 0x0 +#define MX6Q_PAD_SD1_CMD__SD1_CMD                 0x348 0x730 0x000 0x0 0x0 +#define MX6Q_PAD_SD1_CMD__ECSPI5_MOSI             0x348 0x730 0x830 0x1 0x0 +#define MX6Q_PAD_SD1_CMD__PWM4_OUT                0x348 0x730 0x000 0x2 0x0 +#define MX6Q_PAD_SD1_CMD__GPT_COMPARE1            0x348 0x730 0x000 0x3 0x0 +#define MX6Q_PAD_SD1_CMD__GPIO1_IO18              0x348 0x730 0x000 0x5 0x0 +#define MX6Q_PAD_SD1_DAT2__SD1_DATA2              0x34c 0x734 0x000 0x0 0x0 +#define MX6Q_PAD_SD1_DAT2__ECSPI5_SS1             0x34c 0x734 0x838 0x1 0x1 +#define MX6Q_PAD_SD1_DAT2__GPT_COMPARE2           0x34c 0x734 0x000 0x2 0x0 +#define MX6Q_PAD_SD1_DAT2__PWM2_OUT               0x34c 0x734 0x000 0x3 0x0 +#define MX6Q_PAD_SD1_DAT2__WDOG1_B                0x34c 0x734 0x000 0x4 0x0 +#define MX6Q_PAD_SD1_DAT2__GPIO1_IO19             0x34c 0x734 0x000 0x5 0x0 +#define MX6Q_PAD_SD1_DAT2__WDOG1_RESET_B_DEB      0x34c 0x734 0x000 0x6 0x0 +#define MX6Q_PAD_SD1_CLK__SD1_CLK                 0x350 0x738 0x000 0x0 0x0 +#define MX6Q_PAD_SD1_CLK__ECSPI5_SCLK             0x350 0x738 0x828 0x1 0x0 +#define MX6Q_PAD_SD1_CLK__GPT_CLKIN               0x350 0x738 0x000 0x3 0x0 +#define MX6Q_PAD_SD1_CLK__GPIO1_IO20              0x350 0x738 0x000 0x5 0x0 +#define MX6Q_PAD_SD2_CLK__SD2_CLK                 0x354 0x73c 0x000 0x0 0x0 +#define MX6Q_PAD_SD2_CLK__ECSPI5_SCLK             0x354 0x73c 0x828 0x1 0x1 +#define MX6Q_PAD_SD2_CLK__KEY_COL5                0x354 0x73c 0x8e8 0x2 0x3 +#define MX6Q_PAD_SD2_CLK__AUD4_RXFS               0x354 0x73c 0x7c0 0x3 0x1 +#define MX6Q_PAD_SD2_CLK__GPIO1_IO10              0x354 0x73c 0x000 0x5 0x0 +#define MX6Q_PAD_SD2_CMD__SD2_CMD                 0x358 0x740 0x000 0x0 0x0 +#define MX6Q_PAD_SD2_CMD__ECSPI5_MOSI             0x358 0x740 0x830 0x1 0x1 +#define MX6Q_PAD_SD2_CMD__KEY_ROW5                0x358 0x740 0x8f4 0x2 0x2 +#define MX6Q_PAD_SD2_CMD__AUD4_RXC                0x358 0x740 0x7bc 0x3 0x1 +#define MX6Q_PAD_SD2_CMD__GPIO1_IO11              0x358 0x740 0x000 0x5 0x0 +#define MX6Q_PAD_SD2_DAT3__SD2_DATA3              0x35c 0x744 0x000 0x0 0x0 +#define MX6Q_PAD_SD2_DAT3__ECSPI5_SS3             0x35c 0x744 0x000 0x1 0x0 +#define MX6Q_PAD_SD2_DAT3__KEY_COL6               0x35c 0x744 0x8ec 0x2 0x2 +#define MX6Q_PAD_SD2_DAT3__AUD4_TXC               0x35c 0x744 0x7c4 0x3 0x1 +#define MX6Q_PAD_SD2_DAT3__GPIO1_IO12             0x35c 0x744 0x000 0x5 0x0 + +#endif /* __DTS_IMX6Q_PINFUNC_H */ diff --git a/arch/arm/boot/dts/imx6q-sabreauto.dts b/arch/arm/boot/dts/imx6q-sabreauto.dts index 656d489122f..49d6f2831ec 100644 --- a/arch/arm/boot/dts/imx6q-sabreauto.dts +++ b/arch/arm/boot/dts/imx6q-sabreauto.dts @@ -11,15 +11,13 @@   */  /dts-v1/; -/include/ "imx6q.dtsi" + +#include "imx6q.dtsi" +#include "imx6qdl-sabreauto.dtsi"  / {  	model = "Freescale i.MX6 Quad SABRE Automotive Board";  	compatible = "fsl,imx6q-sabreauto", "fsl,imx6q"; - -	memory { -		reg = <0x10000000 0x80000000>; -	};  };  &iomuxc { @@ -29,30 +27,9 @@  	hog {  		pinctrl_hog: hoggrp {  			fsl,pins = < -				1376 0x80000000	/* MX6Q_PAD_NANDF_CS2__GPIO_6_15 */ -				13   0x80000000	/* MX6Q_PAD_SD2_DAT2__GPIO_1_13 */ +				MX6Q_PAD_NANDF_CS2__GPIO6_IO15 0x80000000 +				MX6Q_PAD_SD2_DAT2__GPIO1_IO13  0x80000000  			>;  		};  	};  }; - -&uart4 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart4_1>; -	status = "okay"; -}; - -&fec { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_enet_2>; -	phy-mode = "rgmii"; -	status = "okay"; -}; - -&usdhc3 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_usdhc3_1>; -	cd-gpios = <&gpio6 15 0>; -	wp-gpios = <&gpio1 13 0>; -	status = "okay"; -}; diff --git a/arch/arm/boot/dts/imx6q-sabrelite.dts b/arch/arm/boot/dts/imx6q-sabrelite.dts index 2ce355cd05e..6a000666c14 100644 --- a/arch/arm/boot/dts/imx6q-sabrelite.dts +++ b/arch/arm/boot/dts/imx6q-sabrelite.dts @@ -11,7 +11,7 @@   */  /dts-v1/; -/include/ "imx6q.dtsi" +#include "imx6q.dtsi"  / {  	model = "Freescale i.MX6 Quad SABRE Lite Board"; @@ -91,14 +91,14 @@  	hog {  		pinctrl_hog: hoggrp {  			fsl,pins = < -				1450 0x80000000	/* MX6Q_PAD_NANDF_D6__GPIO_2_6 */ -				1458 0x80000000	/* MX6Q_PAD_NANDF_D7__GPIO_2_7 */ -				121  0x80000000	/* MX6Q_PAD_EIM_D19__GPIO_3_19 */ -				144  0x80000000	/* MX6Q_PAD_EIM_D22__GPIO_3_22 */ -				152  0x80000000	/* MX6Q_PAD_EIM_D23__GPIO_3_23 */ -				1262 0x80000000 /* MX6Q_PAD_SD3_DAT5__GPIO_7_0 */ -				1270 0x1f0b0	/* MX6Q_PAD_SD3_DAT4__GPIO_7_1 */ -				953  0x80000000	/* MX6Q_PAD_GPIO_0__CCM_CLKO */ +				MX6Q_PAD_NANDF_D6__GPIO2_IO06 0x80000000 +				MX6Q_PAD_NANDF_D7__GPIO2_IO07 0x80000000 +				MX6Q_PAD_EIM_D19__GPIO3_IO19  0x80000000 +				MX6Q_PAD_EIM_D22__GPIO3_IO22  0x80000000 +				MX6Q_PAD_EIM_D23__GPIO3_IO23  0x80000000 +				MX6Q_PAD_SD3_DAT5__GPIO7_IO00 0x80000000 +				MX6Q_PAD_SD3_DAT4__GPIO7_IO01 0x1f0b0 +				MX6Q_PAD_GPIO_0__CCM_CLKO1    0x80000000  			>;  		};  	}; diff --git a/arch/arm/boot/dts/imx6q-sabresd.dts b/arch/arm/boot/dts/imx6q-sabresd.dts index 2dea304a798..44205135022 100644 --- a/arch/arm/boot/dts/imx6q-sabresd.dts +++ b/arch/arm/boot/dts/imx6q-sabresd.dts @@ -11,37 +11,13 @@   */  /dts-v1/; -/include/ "imx6q.dtsi" + +#include "imx6q.dtsi" +#include "imx6qdl-sabresd.dtsi"  / { -	model = "Freescale i.MX6Q SABRE Smart Device Board"; +	model = "Freescale i.MX6 Quad SABRE Smart Device Board";  	compatible = "fsl,imx6q-sabresd", "fsl,imx6q"; - -	memory { -		reg = <0x10000000 0x40000000>; -	}; - -	gpio-keys { -		compatible = "gpio-keys"; - -		volume-up { -			label = "Volume Up"; -			gpios = <&gpio1 4 0>; -			linux,code = <115>; /* KEY_VOLUMEUP */ -		}; - -		volume-down { -			label = "Volume Down"; -			gpios = <&gpio1 5 0>; -			linux,code = <114>; /* KEY_VOLUMEDOWN */ -		}; -	}; -}; - -&uart1 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart1_1>; -	status = "okay";  };  &iomuxc { @@ -51,36 +27,13 @@  	hog {  		pinctrl_hog: hoggrp {  			fsl,pins = < -				1004 0x80000000 /* MX6Q_PAD_GPIO_4__GPIO_1_4 */ -				1012 0x80000000 /* MX6Q_PAD_GPIO_5__GPIO_1_5 */ -				1402 0x80000000	/* MX6Q_PAD_NANDF_D0__GPIO_2_0 */ -				1410 0x80000000	/* MX6Q_PAD_NANDF_D1__GPIO_2_1 */ -				1418 0x80000000	/* MX6Q_PAD_NANDF_D2__GPIO_2_2 */ -				1426 0x80000000	/* MX6Q_PAD_NANDF_D3__GPIO_2_3 */ +				MX6Q_PAD_GPIO_4__GPIO1_IO04   0x80000000 +				MX6Q_PAD_GPIO_5__GPIO1_IO05   0x80000000 +				MX6Q_PAD_NANDF_D0__GPIO2_IO00 0x80000000 +				MX6Q_PAD_NANDF_D1__GPIO2_IO01 0x80000000 +				MX6Q_PAD_NANDF_D2__GPIO2_IO02 0x80000000 +				MX6Q_PAD_NANDF_D3__GPIO2_IO03 0x80000000  			>;  		};  	};  }; - -&fec { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_enet_1>; -	phy-mode = "rgmii"; -	status = "okay"; -}; - -&usdhc2 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_usdhc2_1>; -	cd-gpios = <&gpio2 2 0>; -	wp-gpios = <&gpio2 3 0>; -	status = "okay"; -}; - -&usdhc3 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_usdhc3_1>; -	cd-gpios = <&gpio2 0 0>; -	wp-gpios = <&gpio2 1 0>; -	status = "okay"; -}; diff --git a/arch/arm/boot/dts/imx6q-sbc6x.dts b/arch/arm/boot/dts/imx6q-sbc6x.dts new file mode 100644 index 00000000000..ee6addf149a --- /dev/null +++ b/arch/arm/boot/dts/imx6q-sbc6x.dts @@ -0,0 +1,44 @@ +/* + * Copyright 2013 Pavel Machek <pavel@denx.de> + * + * The code contained herein is licensed under the GNU General Public + * License V2. + */ + +/dts-v1/; +#include "imx6q.dtsi" + +/ { +	model = "MicroSys sbc6x board"; +	compatible = "microsys,sbc6x", "fsl,imx6q"; + +	memory { +		reg = <0x10000000 0x80000000>; +	}; +}; + +&fec { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_enet_1>; +	phy-mode = "rgmii"; +	status = "okay"; +}; + +&uart1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart1_1>; +	status = "okay"; +}; + +&usbotg { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_usbotg_1>; +	disable-over-current; +	status = "okay"; +}; + +&usdhc3 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_usdhc3_2>; +	status = "okay"; +}; diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi index cba021eb035..21e675848bd 100644 --- a/arch/arm/boot/dts/imx6q.dtsi +++ b/arch/arm/boot/dts/imx6q.dtsi @@ -8,7 +8,8 @@   *   */ -/include/ "imx6qdl.dtsi" +#include "imx6qdl.dtsi" +#include "imx6q-pinfunc.h"  / {  	cpus { @@ -78,10 +79,19 @@  				audmux {  					pinctrl_audmux_1: audmux-1 {  						fsl,pins = < -							18   0x80000000	/* MX6Q_PAD_SD2_DAT0__AUDMUX_AUD4_RXD */ -							1586 0x80000000	/* MX6Q_PAD_SD2_DAT3__AUDMUX_AUD4_TXC */ -							11   0x80000000	/* MX6Q_PAD_SD2_DAT2__AUDMUX_AUD4_TXD */ -							3    0x80000000	/* MX6Q_PAD_SD2_DAT1__AUDMUX_AUD4_TXFS */ +							MX6Q_PAD_SD2_DAT0__AUD4_RXD  0x80000000 +							MX6Q_PAD_SD2_DAT3__AUD4_TXC  0x80000000 +							MX6Q_PAD_SD2_DAT2__AUD4_TXD  0x80000000 +							MX6Q_PAD_SD2_DAT1__AUD4_TXFS 0x80000000 +						>; +					}; + +					pinctrl_audmux_2: audmux-2 { +						fsl,pins = < +							MX6Q_PAD_CSI0_DAT7__AUD3_RXD  0x80000000 +							MX6Q_PAD_CSI0_DAT4__AUD3_TXC  0x80000000 +							MX6Q_PAD_CSI0_DAT5__AUD3_TXD  0x80000000 +							MX6Q_PAD_CSI0_DAT6__AUD3_TXFS 0x80000000  						>;  					};  				}; @@ -89,9 +99,19 @@  				ecspi1 {  					pinctrl_ecspi1_1: ecspi1grp-1 {  						fsl,pins = < -							101 0x100b1	/* MX6Q_PAD_EIM_D17__ECSPI1_MISO */ -							109 0x100b1	/* MX6Q_PAD_EIM_D18__ECSPI1_MOSI */ -							94  0x100b1	/* MX6Q_PAD_EIM_D16__ECSPI1_SCLK */ +							MX6Q_PAD_EIM_D17__ECSPI1_MISO 0x100b1 +							MX6Q_PAD_EIM_D18__ECSPI1_MOSI 0x100b1 +							MX6Q_PAD_EIM_D16__ECSPI1_SCLK 0x100b1 +						>; +					}; +				}; + +				ecspi3 { +					pinctrl_ecspi3_1: ecspi3grp-1 { +						fsl,pins = < +							MX6Q_PAD_DISP0_DAT2__ECSPI3_MISO 0x100b1 +							MX6Q_PAD_DISP0_DAT1__ECSPI3_MOSI 0x100b1 +							MX6Q_PAD_DISP0_DAT0__ECSPI3_SCLK 0x100b1  						>;  					};  				}; @@ -99,42 +119,42 @@  				enet {  					pinctrl_enet_1: enetgrp-1 {  						fsl,pins = < -							695 0x1b0b0	/* MX6Q_PAD_ENET_MDIO__ENET_MDIO */ -							756 0x1b0b0	/* MX6Q_PAD_ENET_MDC__ENET_MDC */ -							24  0x1b0b0	/* MX6Q_PAD_RGMII_TXC__ENET_RGMII_TXC */ -							30  0x1b0b0	/* MX6Q_PAD_RGMII_TD0__ENET_RGMII_TD0 */ -							34  0x1b0b0	/* MX6Q_PAD_RGMII_TD1__ENET_RGMII_TD1 */ -							39  0x1b0b0	/* MX6Q_PAD_RGMII_TD2__ENET_RGMII_TD2 */ -							44  0x1b0b0	/* MX6Q_PAD_RGMII_TD3__ENET_RGMII_TD3 */ -							56  0x1b0b0	/* MX6Q_PAD_RGMII_TX_CTL__RGMII_TX_CTL */ -							702 0x1b0b0	/* MX6Q_PAD_ENET_REF_CLK__ENET_TX_CLK */ -							74  0x1b0b0	/* MX6Q_PAD_RGMII_RXC__ENET_RGMII_RXC */ -							52  0x1b0b0	/* MX6Q_PAD_RGMII_RD0__ENET_RGMII_RD0 */ -							61  0x1b0b0	/* MX6Q_PAD_RGMII_RD1__ENET_RGMII_RD1 */ -							66  0x1b0b0	/* MX6Q_PAD_RGMII_RD2__ENET_RGMII_RD2 */ -							70  0x1b0b0	/* MX6Q_PAD_RGMII_RD3__ENET_RGMII_RD3 */ -							48  0x1b0b0	/* MX6Q_PAD_RGMII_RX_CTL__RGMII_RX_CTL */ -							1033 0x4001b0a8	/* MX6Q_PAD_GPIO_16__ENET_ANATOP_ETHERNET_REF_OUT*/ +							MX6Q_PAD_ENET_MDIO__ENET_MDIO       0x1b0b0 +							MX6Q_PAD_ENET_MDC__ENET_MDC         0x1b0b0 +							MX6Q_PAD_RGMII_TXC__RGMII_TXC       0x1b0b0 +							MX6Q_PAD_RGMII_TD0__RGMII_TD0       0x1b0b0 +							MX6Q_PAD_RGMII_TD1__RGMII_TD1       0x1b0b0 +							MX6Q_PAD_RGMII_TD2__RGMII_TD2       0x1b0b0 +							MX6Q_PAD_RGMII_TD3__RGMII_TD3       0x1b0b0 +							MX6Q_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0 +							MX6Q_PAD_ENET_REF_CLK__ENET_TX_CLK  0x1b0b0 +							MX6Q_PAD_RGMII_RXC__RGMII_RXC       0x1b0b0 +							MX6Q_PAD_RGMII_RD0__RGMII_RD0       0x1b0b0 +							MX6Q_PAD_RGMII_RD1__RGMII_RD1       0x1b0b0 +							MX6Q_PAD_RGMII_RD2__RGMII_RD2       0x1b0b0 +							MX6Q_PAD_RGMII_RD3__RGMII_RD3       0x1b0b0 +							MX6Q_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0 +							MX6Q_PAD_GPIO_16__ENET_REF_CLK      0x4001b0a8  						>;  					};  					pinctrl_enet_2: enetgrp-2 {  						fsl,pins = < -							890 0x1b0b0	/* MX6Q_PAD_KEY_COL1__ENET_MDIO */ -							909 0x1b0b0	/* MX6Q_PAD_KEY_COL2__ENET_MDC */ -							24  0x1b0b0	/* MX6Q_PAD_RGMII_TXC__ENET_RGMII_TXC */ -							30  0x1b0b0	/* MX6Q_PAD_RGMII_TD0__ENET_RGMII_TD0 */ -							34  0x1b0b0	/* MX6Q_PAD_RGMII_TD1__ENET_RGMII_TD1 */ -							39  0x1b0b0	/* MX6Q_PAD_RGMII_TD2__ENET_RGMII_TD2 */ -							44  0x1b0b0	/* MX6Q_PAD_RGMII_TD3__ENET_RGMII_TD3 */ -							56  0x1b0b0	/* MX6Q_PAD_RGMII_TX_CTL__RGMII_TX_CTL */ -							702 0x1b0b0	/* MX6Q_PAD_ENET_REF_CLK__ENET_TX_CLK */ -							74  0x1b0b0	/* MX6Q_PAD_RGMII_RXC__ENET_RGMII_RXC */ -							52  0x1b0b0	/* MX6Q_PAD_RGMII_RD0__ENET_RGMII_RD0 */ -							61  0x1b0b0	/* MX6Q_PAD_RGMII_RD1__ENET_RGMII_RD1 */ -							66  0x1b0b0	/* MX6Q_PAD_RGMII_RD2__ENET_RGMII_RD2 */ -							70  0x1b0b0	/* MX6Q_PAD_RGMII_RD3__ENET_RGMII_RD3 */ -							48  0x1b0b0	/* MX6Q_PAD_RGMII_RX_CTL__RGMII_RX_CTL */ +							MX6Q_PAD_KEY_COL1__ENET_MDIO        0x1b0b0 +							MX6Q_PAD_KEY_COL2__ENET_MDC         0x1b0b0 +							MX6Q_PAD_RGMII_TXC__RGMII_TXC       0x1b0b0 +							MX6Q_PAD_RGMII_TD0__RGMII_TD0       0x1b0b0 +							MX6Q_PAD_RGMII_TD1__RGMII_TD1       0x1b0b0 +							MX6Q_PAD_RGMII_TD2__RGMII_TD2       0x1b0b0 +							MX6Q_PAD_RGMII_TD3__RGMII_TD3       0x1b0b0 +							MX6Q_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0 +							MX6Q_PAD_ENET_REF_CLK__ENET_TX_CLK  0x1b0b0 +							MX6Q_PAD_RGMII_RXC__RGMII_RXC       0x1b0b0 +							MX6Q_PAD_RGMII_RD0__RGMII_RD0       0x1b0b0 +							MX6Q_PAD_RGMII_RD1__RGMII_RD1       0x1b0b0 +							MX6Q_PAD_RGMII_RD2__RGMII_RD2       0x1b0b0 +							MX6Q_PAD_RGMII_RD3__RGMII_RD3       0x1b0b0 +							MX6Q_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0  						>;  					};  				}; @@ -142,25 +162,25 @@  				gpmi-nand {  					pinctrl_gpmi_nand_1: gpmi-nand-1 {  						fsl,pins = < -							1328 0xb0b1	/* MX6Q_PAD_NANDF_CLE__RAWNAND_CLE */ -							1336 0xb0b1	/* MX6Q_PAD_NANDF_ALE__RAWNAND_ALE */ -							1344 0xb0b1	/* MX6Q_PAD_NANDF_WP_B__RAWNAND_RESETN */ -							1352 0xb000	/* MX6Q_PAD_NANDF_RB0__RAWNAND_READY0 */ -							1360 0xb0b1	/* MX6Q_PAD_NANDF_CS0__RAWNAND_CE0N */ -							1365 0xb0b1	/* MX6Q_PAD_NANDF_CS1__RAWNAND_CE1N */ -							1371 0xb0b1	/* MX6Q_PAD_NANDF_CS2__RAWNAND_CE2N */ -							1378 0xb0b1	/* MX6Q_PAD_NANDF_CS3__RAWNAND_CE3N */ -							1387 0xb0b1	/* MX6Q_PAD_SD4_CMD__RAWNAND_RDN */ -							1393 0xb0b1	/* MX6Q_PAD_SD4_CLK__RAWNAND_WRN */ -							1397 0xb0b1	/* MX6Q_PAD_NANDF_D0__RAWNAND_D0 */ -							1405 0xb0b1	/* MX6Q_PAD_NANDF_D1__RAWNAND_D1 */ -							1413 0xb0b1	/* MX6Q_PAD_NANDF_D2__RAWNAND_D2 */ -							1421 0xb0b1	/* MX6Q_PAD_NANDF_D3__RAWNAND_D3 */ -							1429 0xb0b1	/* MX6Q_PAD_NANDF_D4__RAWNAND_D4 */ -							1437 0xb0b1	/* MX6Q_PAD_NANDF_D5__RAWNAND_D5 */ -							1445 0xb0b1	/* MX6Q_PAD_NANDF_D6__RAWNAND_D6 */ -							1453 0xb0b1	/* MX6Q_PAD_NANDF_D7__RAWNAND_D7 */ -							1463 0x00b1	/* MX6Q_PAD_SD4_DAT0__RAWNAND_DQS */ +							MX6Q_PAD_NANDF_CLE__NAND_CLE     0xb0b1 +							MX6Q_PAD_NANDF_ALE__NAND_ALE     0xb0b1 +							MX6Q_PAD_NANDF_WP_B__NAND_WP_B   0xb0b1 +							MX6Q_PAD_NANDF_RB0__NAND_READY_B 0xb000 +							MX6Q_PAD_NANDF_CS0__NAND_CE0_B   0xb0b1 +							MX6Q_PAD_NANDF_CS1__NAND_CE1_B   0xb0b1 +							MX6Q_PAD_NANDF_CS2__NAND_CE2_B   0xb0b1 +							MX6Q_PAD_NANDF_CS3__NAND_CE3_B   0xb0b1 +							MX6Q_PAD_SD4_CMD__NAND_RE_B      0xb0b1 +							MX6Q_PAD_SD4_CLK__NAND_WE_B      0xb0b1 +							MX6Q_PAD_NANDF_D0__NAND_DATA00   0xb0b1 +							MX6Q_PAD_NANDF_D1__NAND_DATA01   0xb0b1 +							MX6Q_PAD_NANDF_D2__NAND_DATA02   0xb0b1 +							MX6Q_PAD_NANDF_D3__NAND_DATA03   0xb0b1 +							MX6Q_PAD_NANDF_D4__NAND_DATA04   0xb0b1 +							MX6Q_PAD_NANDF_D5__NAND_DATA05   0xb0b1 +							MX6Q_PAD_NANDF_D6__NAND_DATA06   0xb0b1 +							MX6Q_PAD_NANDF_D7__NAND_DATA07   0xb0b1 +							MX6Q_PAD_SD4_DAT0__NAND_DQS      0x00b1  						>;  					};  				}; @@ -168,8 +188,26 @@  				i2c1 {  					pinctrl_i2c1_1: i2c1grp-1 {  						fsl,pins = < -							137 0x4001b8b1	/* MX6Q_PAD_EIM_D21__I2C1_SCL */ -							196 0x4001b8b1	/* MX6Q_PAD_EIM_D28__I2C1_SDA */ +							MX6Q_PAD_EIM_D21__I2C1_SCL 0x4001b8b1 +							MX6Q_PAD_EIM_D28__I2C1_SDA 0x4001b8b1 +						>; +					}; +				}; + +				i2c2 { +					pinctrl_i2c2_1: i2c2grp-1 { +						fsl,pins = < +							MX6Q_PAD_EIM_EB2__I2C2_SCL 0x4001b8b1 +							MX6Q_PAD_EIM_D16__I2C2_SDA 0x4001b8b1 +						>; +					}; +				}; + +				i2c3 { +					pinctrl_i2c3_1: i2c3grp-1 { +						fsl,pins = < +							MX6Q_PAD_EIM_D17__I2C3_SCL 0x4001b8b1 +							MX6Q_PAD_EIM_D18__I2C3_SDA 0x4001b8b1  						>;  					};  				}; @@ -177,8 +215,8 @@  				uart1 {  					pinctrl_uart1_1: uart1grp-1 {  						fsl,pins = < -							1140 0x1b0b1	/* MX6Q_PAD_CSI0_DAT10__UART1_TXD */ -							1148 0x1b0b1	/* MX6Q_PAD_CSI0_DAT11__UART1_RXD */ +							MX6Q_PAD_CSI0_DAT10__UART1_TX_DATA 0x1b0b1 +							MX6Q_PAD_CSI0_DAT11__UART1_RX_DATA 0x1b0b1  						>;  					};  				}; @@ -186,8 +224,8 @@  				uart2 {  					pinctrl_uart2_1: uart2grp-1 {  						fsl,pins = < -							183 0x1b0b1	/* MX6Q_PAD_EIM_D26__UART2_TXD */ -							191 0x1b0b1	/* MX6Q_PAD_EIM_D27__UART2_RXD */ +							MX6Q_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1 +							MX6Q_PAD_EIM_D27__UART2_RX_DATA 0x1b0b1  						>;  					};  				}; @@ -195,8 +233,8 @@  				uart4 {  					pinctrl_uart4_1: uart4grp-1 {  						fsl,pins = < -							877 0x1b0b1	/* MX6Q_PAD_KEY_COL0__UART4_TXD */ -							885 0x1b0b1	/* MX6Q_PAD_KEY_ROW0__UART4_RXD */ +							MX6Q_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1 +							MX6Q_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1  						>;  					};  				}; @@ -204,7 +242,13 @@  				usbotg {  					pinctrl_usbotg_1: usbotggrp-1 {  						fsl,pins = < -							1592 0x17059	/* MX6Q_PAD_GPIO_1__ANATOP_USBOTG_ID */ +							MX6Q_PAD_GPIO_1__USB_OTG_ID 0x17059 +						>; +					}; + +					pinctrl_usbotg_2: usbotggrp-2 { +						fsl,pins = < +							MX6Q_PAD_ENET_RX_ER__USB_OTG_ID 0x17059  						>;  					};  				}; @@ -212,16 +256,16 @@  				usdhc2 {  					pinctrl_usdhc2_1: usdhc2grp-1 {  						fsl,pins = < -							1577 0x17059	/* MX6Q_PAD_SD2_CMD__USDHC2_CMD */ -							1569 0x10059	/* MX6Q_PAD_SD2_CLK__USDHC2_CLK */ -							16   0x17059	/* MX6Q_PAD_SD2_DAT0__USDHC2_DAT0 */ -							0    0x17059	/* MX6Q_PAD_SD2_DAT1__USDHC2_DAT1 */ -							8    0x17059	/* MX6Q_PAD_SD2_DAT2__USDHC2_DAT2 */ -							1583 0x17059	/* MX6Q_PAD_SD2_DAT3__USDHC2_DAT3 */ -							1430 0x17059	/* MX6Q_PAD_NANDF_D4__USDHC2_DAT4 */ -							1438 0x17059	/* MX6Q_PAD_NANDF_D5__USDHC2_DAT5 */ -							1446 0x17059	/* MX6Q_PAD_NANDF_D6__USDHC2_DAT6 */ -							1454 0x17059	/* MX6Q_PAD_NANDF_D7__USDHC2_DAT7 */ +							MX6Q_PAD_SD2_CMD__SD2_CMD    0x17059 +							MX6Q_PAD_SD2_CLK__SD2_CLK    0x10059 +							MX6Q_PAD_SD2_DAT0__SD2_DATA0 0x17059 +							MX6Q_PAD_SD2_DAT1__SD2_DATA1 0x17059 +							MX6Q_PAD_SD2_DAT2__SD2_DATA2 0x17059 +							MX6Q_PAD_SD2_DAT3__SD2_DATA3 0x17059 +							MX6Q_PAD_NANDF_D4__SD2_DATA4 0x17059 +							MX6Q_PAD_NANDF_D5__SD2_DATA5 0x17059 +							MX6Q_PAD_NANDF_D6__SD2_DATA6 0x17059 +							MX6Q_PAD_NANDF_D7__SD2_DATA7 0x17059  						>;  					};  				}; @@ -229,27 +273,27 @@  				usdhc3 {  					pinctrl_usdhc3_1: usdhc3grp-1 {  						fsl,pins = < -							1273 0x17059	/* MX6Q_PAD_SD3_CMD__USDHC3_CMD */ -							1281 0x10059	/* MX6Q_PAD_SD3_CLK__USDHC3_CLK	*/ -							1289 0x17059	/* MX6Q_PAD_SD3_DAT0__USDHC3_DAT0 */ -							1297 0x17059	/* MX6Q_PAD_SD3_DAT1__USDHC3_DAT1 */ -							1305 0x17059	/* MX6Q_PAD_SD3_DAT2__USDHC3_DAT2 */ -							1312 0x17059	/* MX6Q_PAD_SD3_DAT3__USDHC3_DAT3 */ -							1265 0x17059	/* MX6Q_PAD_SD3_DAT4__USDHC3_DAT4 */ -							1257 0x17059	/* MX6Q_PAD_SD3_DAT5__USDHC3_DAT5 */ -							1249 0x17059	/* MX6Q_PAD_SD3_DAT6__USDHC3_DAT6 */ -							1241 0x17059	/* MX6Q_PAD_SD3_DAT7__USDHC3_DAT7 */ +							MX6Q_PAD_SD3_CMD__SD3_CMD    0x17059 +							MX6Q_PAD_SD3_CLK__SD3_CLK    0x10059 +							MX6Q_PAD_SD3_DAT0__SD3_DATA0 0x17059 +							MX6Q_PAD_SD3_DAT1__SD3_DATA1 0x17059 +							MX6Q_PAD_SD3_DAT2__SD3_DATA2 0x17059 +							MX6Q_PAD_SD3_DAT3__SD3_DATA3 0x17059 +							MX6Q_PAD_SD3_DAT4__SD3_DATA4 0x17059 +							MX6Q_PAD_SD3_DAT5__SD3_DATA5 0x17059 +							MX6Q_PAD_SD3_DAT6__SD3_DATA6 0x17059 +							MX6Q_PAD_SD3_DAT7__SD3_DATA7 0x17059  						>;  					};  					pinctrl_usdhc3_2: usdhc3grp-2 {  						fsl,pins = < -							1273 0x17059	/* MX6Q_PAD_SD3_CMD__USDHC3_CMD */ -							1281 0x10059	/* MX6Q_PAD_SD3_CLK__USDHC3_CLK	*/ -							1289 0x17059	/* MX6Q_PAD_SD3_DAT0__USDHC3_DAT0 */ -							1297 0x17059	/* MX6Q_PAD_SD3_DAT1__USDHC3_DAT1 */ -							1305 0x17059	/* MX6Q_PAD_SD3_DAT2__USDHC3_DAT2 */ -							1312 0x17059	/* MX6Q_PAD_SD3_DAT3__USDHC3_DAT3 */ +							MX6Q_PAD_SD3_CMD__SD3_CMD    0x17059 +							MX6Q_PAD_SD3_CLK__SD3_CLK    0x10059 +							MX6Q_PAD_SD3_DAT0__SD3_DATA0 0x17059 +							MX6Q_PAD_SD3_DAT1__SD3_DATA1 0x17059 +							MX6Q_PAD_SD3_DAT2__SD3_DATA2 0x17059 +							MX6Q_PAD_SD3_DAT3__SD3_DATA3 0x17059  						>;  					};  				}; @@ -257,27 +301,27 @@  				usdhc4 {  					pinctrl_usdhc4_1: usdhc4grp-1 {  						fsl,pins = < -							1386 0x17059	/* MX6Q_PAD_SD4_CMD__USDHC4_CMD */ -							1392 0x10059	/* MX6Q_PAD_SD4_CLK__USDHC4_CLK	*/ -							1462 0x17059	/* MX6Q_PAD_SD4_DAT0__USDHC4_DAT0 */ -							1470 0x17059	/* MX6Q_PAD_SD4_DAT1__USDHC4_DAT1 */ -							1478 0x17059	/* MX6Q_PAD_SD4_DAT2__USDHC4_DAT2 */ -							1486 0x17059	/* MX6Q_PAD_SD4_DAT3__USDHC4_DAT3 */ -							1493 0x17059	/* MX6Q_PAD_SD4_DAT4__USDHC4_DAT4 */ -							1501 0x17059	/* MX6Q_PAD_SD4_DAT5__USDHC4_DAT5 */ -							1509 0x17059	/* MX6Q_PAD_SD4_DAT6__USDHC4_DAT6 */ -							1517 0x17059	/* MX6Q_PAD_SD4_DAT7__USDHC4_DAT7 */ +							MX6Q_PAD_SD4_CMD__SD4_CMD    0x17059 +							MX6Q_PAD_SD4_CLK__SD4_CLK    0x10059 +							MX6Q_PAD_SD4_DAT0__SD4_DATA0 0x17059 +							MX6Q_PAD_SD4_DAT1__SD4_DATA1 0x17059 +							MX6Q_PAD_SD4_DAT2__SD4_DATA2 0x17059 +							MX6Q_PAD_SD4_DAT3__SD4_DATA3 0x17059 +							MX6Q_PAD_SD4_DAT4__SD4_DATA4 0x17059 +							MX6Q_PAD_SD4_DAT5__SD4_DATA5 0x17059 +							MX6Q_PAD_SD4_DAT6__SD4_DATA6 0x17059 +							MX6Q_PAD_SD4_DAT7__SD4_DATA7 0x17059  						>;  					};  					pinctrl_usdhc4_2: usdhc4grp-2 {  						fsl,pins = < -							1386 0x17059	/* MX6Q_PAD_SD4_CMD__USDHC4_CMD */ -							1392 0x10059	/* MX6Q_PAD_SD4_CLK__USDHC4_CLK	*/ -							1462 0x17059	/* MX6Q_PAD_SD4_DAT0__USDHC4_DAT0 */ -							1470 0x17059	/* MX6Q_PAD_SD4_DAT1__USDHC4_DAT1 */ -							1478 0x17059	/* MX6Q_PAD_SD4_DAT2__USDHC4_DAT2 */ -							1486 0x17059	/* MX6Q_PAD_SD4_DAT3__USDHC4_DAT3 */ +							MX6Q_PAD_SD4_CMD__SD4_CMD    0x17059 +							MX6Q_PAD_SD4_CLK__SD4_CLK    0x10059 +							MX6Q_PAD_SD4_DAT0__SD4_DATA0 0x17059 +							MX6Q_PAD_SD4_DAT1__SD4_DATA1 0x17059 +							MX6Q_PAD_SD4_DAT2__SD4_DATA2 0x17059 +							MX6Q_PAD_SD4_DAT3__SD4_DATA3 0x17059  						>;  					};  				}; @@ -291,6 +335,24 @@  			interrupts = <0 8 0x4 0 7 0x4>;  			clocks = <&clks 133>, <&clks 134>, <&clks 137>;  			clock-names = "bus", "di0", "di1"; +			resets = <&src 4>;  		};  	};  }; + +&ldb { +	clocks = <&clks 33>, <&clks 34>, +		 <&clks 39>, <&clks 40>, <&clks 41>, <&clks 42>, +		 <&clks 135>, <&clks 136>; +	clock-names = "di0_pll", "di1_pll", +		      "di0_sel", "di1_sel", "di2_sel", "di3_sel", +		      "di0", "di1"; + +	lvds-channel@0 { +		crtcs = <&ipu1 0>, <&ipu1 1>, <&ipu2 0>, <&ipu2 1>; +	}; + +	lvds-channel@1 { +		crtcs = <&ipu1 0>, <&ipu1 1>, <&ipu2 0>, <&ipu2 1>; +	}; +}; diff --git a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi new file mode 100644 index 00000000000..4d237cffcc4 --- /dev/null +++ b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi @@ -0,0 +1,38 @@ +/* + * Copyright 2012 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 + */ + +/ { +	memory { +		reg = <0x10000000 0x80000000>; +	}; +}; + +&fec { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_enet_2>; +	phy-mode = "rgmii"; +	status = "okay"; +}; + +&uart4 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart4_1>; +	status = "okay"; +}; + +&usdhc3 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_usdhc3_1>; +	cd-gpios = <&gpio6 15 0>; +	wp-gpios = <&gpio1 13 0>; +	status = "okay"; +}; diff --git a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi new file mode 100644 index 00000000000..e21f6a89cf0 --- /dev/null +++ b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi @@ -0,0 +1,87 @@ +/* + * Copyright 2012 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 + */ + +/ { +	memory { +		reg = <0x10000000 0x40000000>; +	}; + +	regulators { +		compatible = "simple-bus"; + +		reg_usb_otg_vbus: usb_otg_vbus { +			compatible = "regulator-fixed"; +			regulator-name = "usb_otg_vbus"; +			regulator-min-microvolt = <5000000>; +			regulator-max-microvolt = <5000000>; +			gpio = <&gpio3 22 0>; +			enable-active-high; +		}; +	}; + +	gpio-keys { +		compatible = "gpio-keys"; + +		volume-up { +			label = "Volume Up"; +			gpios = <&gpio1 4 0>; +			linux,code = <115>; /* KEY_VOLUMEUP */ +		}; + +		volume-down { +			label = "Volume Down"; +			gpios = <&gpio1 5 0>; +			linux,code = <114>; /* KEY_VOLUMEDOWN */ +		}; +	}; +}; + +&fec { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_enet_1>; +	phy-mode = "rgmii"; +	status = "okay"; +}; + +&uart1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart1_1>; +	status = "okay"; +}; + +&usbh1 { +	status = "okay"; +}; + +&usbotg { +	vbus-supply = <®_usb_otg_vbus>; +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_usbotg_2>; +	disable-over-current; +	status = "okay"; +}; + +&usdhc2 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_usdhc2_1>; +	cd-gpios = <&gpio2 2 0>; +	wp-gpios = <&gpio2 3 0>; +	status = "okay"; +}; + +&usdhc3 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_usdhc3_1>; +	cd-gpios = <&gpio2 0 0>; +	wp-gpios = <&gpio2 1 0>; +	status = "okay"; +}; diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi index 06ec460b458..3cca7d39529 100644 --- a/arch/arm/boot/dts/imx6qdl.dtsi +++ b/arch/arm/boot/dts/imx6qdl.dtsi @@ -10,7 +10,7 @@   * http://www.gnu.org/copyleft/gpl.html   */ -/include/ "skeleton.dtsi" +#include "skeleton.dtsi"  / {  	aliases { @@ -91,6 +91,7 @@  			compatible = "arm,cortex-a9-twd-timer";  			reg = <0x00a00600 0x20>;  			interrupts = <1 13 0xf01>; +			clocks = <&clks 15>;  		};  		L2: l2-cache@00a02000 { @@ -101,6 +102,11 @@  			cache-level = <2>;  		}; +		pmu { +			compatible = "arm,cortex-a9-pmu"; +			interrupts = <0 94 0x04>; +		}; +  		aips-bus@02000000 { /* AIPS1 */  			compatible = "fsl,aips-bus", "simple-bus";  			#address-cells = <1>; @@ -277,6 +283,8 @@  				compatible = "fsl,imx6q-gpt";  				reg = <0x02098000 0x4000>;  				interrupts = <0 55 0x04>; +				clocks = <&clks 119>, <&clks 120>; +				clock-names = "ipg", "per";  			};  			gpio1: gpio@0209c000 { @@ -513,9 +521,10 @@  			};  			src: src@020d8000 { -				compatible = "fsl,imx6q-src"; +				compatible = "fsl,imx6q-src", "fsl,imx51-src";  				reg = <0x020d8000 0x4000>;  				interrupts = <0 91 0x04 0 96 0x04>; +				#reset-cells = <1>;  			};  			gpc: gpc@020dc000 { @@ -529,6 +538,26 @@  				reg = <0x020e0000 0x38>;  			}; +			ldb: ldb@020e0008 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "fsl,imx6q-ldb", "fsl,imx53-ldb"; +				gpr = <&gpr>; +				status = "disabled"; + +				lvds-channel@0 { +					reg = <0>; +					crtcs = <&ipu1 0>; +					status = "disabled"; +				}; + +				lvds-channel@1 { +					reg = <1>; +					crtcs = <&ipu1 1>; +					status = "disabled"; +				}; +			}; +  			dcic1: dcic@020e4000 {  				reg = <0x020e4000 0x4000>;  				interrupts = <0 124 0x04>; @@ -795,6 +824,7 @@  			interrupts = <0 6 0x4 0 5 0x4>;  			clocks = <&clks 130>, <&clks 131>, <&clks 132>;  			clock-names = "bus", "di0", "di1"; +			resets = <&src 2>;  		};  	};  }; diff --git a/arch/arm/boot/dts/imx6sl-pinfunc.h b/arch/arm/boot/dts/imx6sl-pinfunc.h new file mode 100644 index 00000000000..77b17bcc7b7 --- /dev/null +++ b/arch/arm/boot/dts/imx6sl-pinfunc.h @@ -0,0 +1,1077 @@ +/* + * Copyright 2013 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. + * + */ + +#ifndef __DTS_IMX6SL_PINFUNC_H +#define __DTS_IMX6SL_PINFUNC_H + +/* + * The pin function ID is a tuple of + * <mux_reg conf_reg input_reg mux_mode input_val> + */ +#define MX6SL_PAD_AUD_MCLK__AUDIO_CLK_OUT          0x04c 0x2a4 0x000 0x0 0x0 +#define MX6SL_PAD_AUD_MCLK__PWM4_OUT               0x04c 0x2a4 0x000 0x1 0x0 +#define MX6SL_PAD_AUD_MCLK__ECSPI3_RDY             0x04c 0x2a4 0x6b4 0x2 0x0 +#define MX6SL_PAD_AUD_MCLK__FEC_MDC                0x04c 0x2a4 0x000 0x3 0x0 +#define MX6SL_PAD_AUD_MCLK__WDOG2_RESET_B_DEB      0x04c 0x2a4 0x000 0x4 0x0 +#define MX6SL_PAD_AUD_MCLK__GPIO1_IO06             0x04c 0x2a4 0x000 0x5 0x0 +#define MX6SL_PAD_AUD_MCLK__SPDIF_EXT_CLK          0x04c 0x2a4 0x7f4 0x6 0x0 +#define MX6SL_PAD_AUD_RXC__AUD3_RXC                0x050 0x2a8 0x000 0x0 0x0 +#define MX6SL_PAD_AUD_RXC__I2C1_SDA                0x050 0x2a8 0x720 0x1 0x0 +#define MX6SL_PAD_AUD_RXC__UART3_TX_DATA           0x050 0x2a8 0x000 0x2 0x0 +#define MX6SL_PAD_AUD_RXC__UART3_RX_DATA           0x050 0x2a8 0x80c 0x2 0x0 +#define MX6SL_PAD_AUD_RXC__FEC_TX_CLK              0x050 0x2a8 0x70c 0x3 0x0 +#define MX6SL_PAD_AUD_RXC__I2C3_SDA                0x050 0x2a8 0x730 0x4 0x0 +#define MX6SL_PAD_AUD_RXC__GPIO1_IO01              0x050 0x2a8 0x000 0x5 0x0 +#define MX6SL_PAD_AUD_RXC__ECSPI3_SS1              0x050 0x2a8 0x6c4 0x6 0x0 +#define MX6SL_PAD_AUD_RXD__AUD3_RXD                0x054 0x2ac 0x000 0x0 0x0 +#define MX6SL_PAD_AUD_RXD__ECSPI3_MOSI             0x054 0x2ac 0x6bc 0x1 0x0 +#define MX6SL_PAD_AUD_RXD__UART4_RX_DATA           0x054 0x2ac 0x814 0x2 0x0 +#define MX6SL_PAD_AUD_RXD__UART4_TX_DATA           0x054 0x2ac 0x000 0x2 0x0 +#define MX6SL_PAD_AUD_RXD__FEC_RX_ER               0x054 0x2ac 0x708 0x3 0x0 +#define MX6SL_PAD_AUD_RXD__SD1_LCTL                0x054 0x2ac 0x000 0x4 0x0 +#define MX6SL_PAD_AUD_RXD__GPIO1_IO02              0x054 0x2ac 0x000 0x5 0x0 +#define MX6SL_PAD_AUD_RXFS__AUD3_RXFS              0x058 0x2b0 0x000 0x0 0x0 +#define MX6SL_PAD_AUD_RXFS__I2C1_SCL               0x058 0x2b0 0x71c 0x1 0x0 +#define MX6SL_PAD_AUD_RXFS__UART3_RX_DATA          0x058 0x2b0 0x80c 0x2 0x1 +#define MX6SL_PAD_AUD_RXFS__UART3_TX_DATA          0x058 0x2b0 0x000 0x2 0x0 +#define MX6SL_PAD_AUD_RXFS__FEC_MDIO               0x058 0x2b0 0x6f4 0x3 0x0 +#define MX6SL_PAD_AUD_RXFS__I2C3_SCL               0x058 0x2b0 0x72c 0x4 0x0 +#define MX6SL_PAD_AUD_RXFS__GPIO1_IO00             0x058 0x2b0 0x000 0x5 0x0 +#define MX6SL_PAD_AUD_RXFS__ECSPI3_SS0             0x058 0x2b0 0x6c0 0x6 0x0 +#define MX6SL_PAD_AUD_TXC__AUD3_TXC                0x05c 0x2b4 0x000 0x0 0x0 +#define MX6SL_PAD_AUD_TXC__ECSPI3_MISO             0x05c 0x2b4 0x6b8 0x1 0x0 +#define MX6SL_PAD_AUD_TXC__UART4_TX_DATA           0x05c 0x2b4 0x000 0x2 0x0 +#define MX6SL_PAD_AUD_TXC__UART4_RX_DATA           0x05c 0x2b4 0x814 0x2 0x1 +#define MX6SL_PAD_AUD_TXC__FEC_RX_DV               0x05c 0x2b4 0x704 0x3 0x0 +#define MX6SL_PAD_AUD_TXC__SD2_LCTL                0x05c 0x2b4 0x000 0x4 0x0 +#define MX6SL_PAD_AUD_TXC__GPIO1_IO03              0x05c 0x2b4 0x000 0x5 0x0 +#define MX6SL_PAD_AUD_TXD__AUD3_TXD                0x060 0x2b8 0x000 0x0 0x0 +#define MX6SL_PAD_AUD_TXD__ECSPI3_SCLK             0x060 0x2b8 0x6b0 0x1 0x0 +#define MX6SL_PAD_AUD_TXD__UART4_CTS_B             0x060 0x2b8 0x000 0x2 0x0 +#define MX6SL_PAD_AUD_TXD__UART4_RTS_B             0x060 0x2b8 0x810 0x2 0x0 +#define MX6SL_PAD_AUD_TXD__FEC_TX_DATA0            0x060 0x2b8 0x000 0x3 0x0 +#define MX6SL_PAD_AUD_TXD__SD4_LCTL                0x060 0x2b8 0x000 0x4 0x0 +#define MX6SL_PAD_AUD_TXD__GPIO1_IO05              0x060 0x2b8 0x000 0x5 0x0 +#define MX6SL_PAD_AUD_TXFS__AUD3_TXFS              0x064 0x2bc 0x000 0x0 0x0 +#define MX6SL_PAD_AUD_TXFS__PWM3_OUT               0x064 0x2bc 0x000 0x1 0x0 +#define MX6SL_PAD_AUD_TXFS__UART4_RTS_B            0x064 0x2bc 0x810 0x2 0x1 +#define MX6SL_PAD_AUD_TXFS__UART4_CTS_B            0x064 0x2bc 0x000 0x2 0x0 +#define MX6SL_PAD_AUD_TXFS__FEC_RX_DATA1           0x064 0x2bc 0x6fc 0x3 0x0 +#define MX6SL_PAD_AUD_TXFS__SD3_LCTL               0x064 0x2bc 0x000 0x4 0x0 +#define MX6SL_PAD_AUD_TXFS__GPIO1_IO04             0x064 0x2bc 0x000 0x5 0x0 +#define MX6SL_PAD_ECSPI1_MISO__ECSPI1_MISO         0x068 0x358 0x684 0x0 0x0 +#define MX6SL_PAD_ECSPI1_MISO__AUD4_TXFS           0x068 0x358 0x5f8 0x1 0x0 +#define MX6SL_PAD_ECSPI1_MISO__UART5_RTS_B         0x068 0x358 0x818 0x2 0x0 +#define MX6SL_PAD_ECSPI1_MISO__UART5_CTS_B         0x068 0x358 0x000 0x2 0x0 +#define MX6SL_PAD_ECSPI1_MISO__EPDC_BDR0           0x068 0x358 0x000 0x3 0x0 +#define MX6SL_PAD_ECSPI1_MISO__SD2_WP              0x068 0x358 0x834 0x4 0x0 +#define MX6SL_PAD_ECSPI1_MISO__GPIO4_IO10          0x068 0x358 0x000 0x5 0x0 +#define MX6SL_PAD_ECSPI1_MOSI__ECSPI1_MOSI         0x06c 0x35c 0x688 0x0 0x0 +#define MX6SL_PAD_ECSPI1_MOSI__AUD4_TXC            0x06c 0x35c 0x5f4 0x1 0x0 +#define MX6SL_PAD_ECSPI1_MOSI__UART5_TX_DATA       0x06c 0x35c 0x000 0x2 0x0 +#define MX6SL_PAD_ECSPI1_MOSI__UART5_RX_DATA       0x06c 0x35c 0x81c 0x2 0x0 +#define MX6SL_PAD_ECSPI1_MOSI__EPDC_VCOM1          0x06c 0x35c 0x000 0x3 0x0 +#define MX6SL_PAD_ECSPI1_MOSI__SD2_VSELECT         0x06c 0x35c 0x000 0x4 0x0 +#define MX6SL_PAD_ECSPI1_MOSI__GPIO4_IO09          0x06c 0x35c 0x000 0x5 0x0 +#define MX6SL_PAD_ECSPI1_SCLK__ECSPI1_SCLK         0x070 0x360 0x67c 0x0 0x0 +#define MX6SL_PAD_ECSPI1_SCLK__AUD4_TXD            0x070 0x360 0x5e8 0x1 0x0 +#define MX6SL_PAD_ECSPI1_SCLK__UART5_RX_DATA       0x070 0x360 0x81c 0x2 0x1 +#define MX6SL_PAD_ECSPI1_SCLK__UART5_TX_DATA       0x070 0x360 0x000 0x2 0x0 +#define MX6SL_PAD_ECSPI1_SCLK__EPDC_VCOM0          0x070 0x360 0x000 0x3 0x0 +#define MX6SL_PAD_ECSPI1_SCLK__SD2_RESET           0x070 0x360 0x000 0x4 0x0 +#define MX6SL_PAD_ECSPI1_SCLK__GPIO4_IO08          0x070 0x360 0x000 0x5 0x0 +#define MX6SL_PAD_ECSPI1_SCLK__USB_OTG2_OC         0x070 0x360 0x820 0x6 0x0 +#define MX6SL_PAD_ECSPI1_SS0__ECSPI1_SS0           0x074 0x364 0x68c 0x0 0x0 +#define MX6SL_PAD_ECSPI1_SS0__AUD4_RXD             0x074 0x364 0x5e4 0x1 0x0 +#define MX6SL_PAD_ECSPI1_SS0__UART5_CTS_B          0x074 0x364 0x000 0x2 0x0 +#define MX6SL_PAD_ECSPI1_SS0__UART5_RTS_B          0x074 0x364 0x818 0x2 0x1 +#define MX6SL_PAD_ECSPI1_SS0__EPDC_BDR1            0x074 0x364 0x000 0x3 0x0 +#define MX6SL_PAD_ECSPI1_SS0__SD2_CD_B             0x074 0x364 0x830 0x4 0x0 +#define MX6SL_PAD_ECSPI1_SS0__GPIO4_IO11           0x074 0x364 0x000 0x5 0x0 +#define MX6SL_PAD_ECSPI1_SS0__USB_OTG2_PWR         0x074 0x364 0x000 0x6 0x0 +#define MX6SL_PAD_ECSPI2_MISO__ECSPI2_MISO         0x078 0x368 0x6a0 0x0 0x0 +#define MX6SL_PAD_ECSPI2_MISO__SDMA_EXT_EVENT0     0x078 0x368 0x000 0x1 0x0 +#define MX6SL_PAD_ECSPI2_MISO__UART3_RTS_B         0x078 0x368 0x808 0x2 0x0 +#define MX6SL_PAD_ECSPI2_MISO__UART3_CTS_B         0x078 0x368 0x000 0x2 0x0 +#define MX6SL_PAD_ECSPI2_MISO__CSI_MCLK            0x078 0x368 0x000 0x3 0x0 +#define MX6SL_PAD_ECSPI2_MISO__SD1_WP              0x078 0x368 0x82c 0x4 0x0 +#define MX6SL_PAD_ECSPI2_MISO__GPIO4_IO14          0x078 0x368 0x000 0x5 0x0 +#define MX6SL_PAD_ECSPI2_MISO__USB_OTG1_OC         0x078 0x368 0x824 0x6 0x0 +#define MX6SL_PAD_ECSPI2_MOSI__ECSPI2_MOSI         0x07c 0x36c 0x6a4 0x0 0x0 +#define MX6SL_PAD_ECSPI2_MOSI__SDMA_EXT_EVENT1     0x07c 0x36c 0x000 0x1 0x0 +#define MX6SL_PAD_ECSPI2_MOSI__UART3_TX_DATA       0x07c 0x36c 0x000 0x2 0x0 +#define MX6SL_PAD_ECSPI2_MOSI__UART3_RX_DATA       0x07c 0x36c 0x80c 0x2 0x2 +#define MX6SL_PAD_ECSPI2_MOSI__CSI_HSYNC           0x07c 0x36c 0x670 0x3 0x0 +#define MX6SL_PAD_ECSPI2_MOSI__SD1_VSELECT         0x07c 0x36c 0x000 0x4 0x0 +#define MX6SL_PAD_ECSPI2_MOSI__GPIO4_IO13          0x07c 0x36c 0x000 0x5 0x0 +#define MX6SL_PAD_ECSPI2_SCLK__ECSPI2_SCLK         0x080 0x370 0x69c 0x0 0x0 +#define MX6SL_PAD_ECSPI2_SCLK__SPDIF_EXT_CLK       0x080 0x370 0x7f4 0x1 0x1 +#define MX6SL_PAD_ECSPI2_SCLK__UART3_RX_DATA       0x080 0x370 0x80c 0x2 0x3 +#define MX6SL_PAD_ECSPI2_SCLK__UART3_TX_DATA       0x080 0x370 0x000 0x2 0x0 +#define MX6SL_PAD_ECSPI2_SCLK__CSI_PIXCLK          0x080 0x370 0x674 0x3 0x0 +#define MX6SL_PAD_ECSPI2_SCLK__SD1_RESET           0x080 0x370 0x000 0x4 0x0 +#define MX6SL_PAD_ECSPI2_SCLK__GPIO4_IO12          0x080 0x370 0x000 0x5 0x0 +#define MX6SL_PAD_ECSPI2_SCLK__USB_OTG2_OC         0x080 0x370 0x820 0x6 0x1 +#define MX6SL_PAD_ECSPI2_SS0__ECSPI2_SS0           0x084 0x374 0x6a8 0x0 0x0 +#define MX6SL_PAD_ECSPI2_SS0__ECSPI1_SS3           0x084 0x374 0x698 0x1 0x0 +#define MX6SL_PAD_ECSPI2_SS0__UART3_CTS_B          0x084 0x374 0x000 0x2 0x0 +#define MX6SL_PAD_ECSPI2_SS0__UART3_RTS_B          0x084 0x374 0x808 0x2 0x1 +#define MX6SL_PAD_ECSPI2_SS0__CSI_VSYNC            0x084 0x374 0x678 0x3 0x0 +#define MX6SL_PAD_ECSPI2_SS0__SD1_CD_B             0x084 0x374 0x828 0x4 0x0 +#define MX6SL_PAD_ECSPI2_SS0__GPIO4_IO15           0x084 0x374 0x000 0x5 0x0 +#define MX6SL_PAD_ECSPI2_SS0__USB_OTG1_PWR         0x084 0x374 0x000 0x6 0x0 +#define MX6SL_PAD_EPDC_BDR0__EPDC_BDR0             0x088 0x378 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_BDR0__SD4_CLK               0x088 0x378 0x850 0x1 0x0 +#define MX6SL_PAD_EPDC_BDR0__UART3_RTS_B           0x088 0x378 0x808 0x2 0x2 +#define MX6SL_PAD_EPDC_BDR0__UART3_CTS_B           0x088 0x378 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_BDR0__EIM_ADDR26            0x088 0x378 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_BDR0__SPDC_RL               0x088 0x378 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_BDR0__GPIO2_IO05            0x088 0x378 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_BDR0__EPDC_SDCE7            0x088 0x378 0x000 0x6 0x0 +#define MX6SL_PAD_EPDC_BDR1__EPDC_BDR1             0x08c 0x37c 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_BDR1__SD4_CMD               0x08c 0x37c 0x858 0x1 0x0 +#define MX6SL_PAD_EPDC_BDR1__UART3_CTS_B           0x08c 0x37c 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_BDR1__UART3_RTS_B           0x08c 0x37c 0x808 0x2 0x3 +#define MX6SL_PAD_EPDC_BDR1__EIM_CRE               0x08c 0x37c 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_BDR1__SPDC_UD               0x08c 0x37c 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_BDR1__GPIO2_IO06            0x08c 0x37c 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_BDR1__EPDC_SDCE8            0x08c 0x37c 0x000 0x6 0x0 +#define MX6SL_PAD_EPDC_D0__EPDC_DATA00             0x090 0x380 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_D0__ECSPI4_MOSI             0x090 0x380 0x6d8 0x1 0x0 +#define MX6SL_PAD_EPDC_D0__LCD_DATA24              0x090 0x380 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_D0__CSI_DATA00              0x090 0x380 0x630 0x3 0x0 +#define MX6SL_PAD_EPDC_D0__SPDC_DATA00             0x090 0x380 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_D0__GPIO1_IO07              0x090 0x380 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_D1__EPDC_DATA01             0x094 0x384 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_D1__ECSPI4_MISO             0x094 0x384 0x6d4 0x1 0x0 +#define MX6SL_PAD_EPDC_D1__LCD_DATA25              0x094 0x384 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_D1__CSI_DATA01              0x094 0x384 0x634 0x3 0x0 +#define MX6SL_PAD_EPDC_D1__SPDC_DATA01             0x094 0x384 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_D1__GPIO1_IO08              0x094 0x384 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_D10__EPDC_DATA10            0x098 0x388 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_D10__ECSPI3_SS0             0x098 0x388 0x6c0 0x1 0x1 +#define MX6SL_PAD_EPDC_D10__EPDC_PWR_CTRL2         0x098 0x388 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_D10__EIM_ADDR18             0x098 0x388 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_D10__SPDC_DATA10            0x098 0x388 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_D10__GPIO1_IO17             0x098 0x388 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_D10__SD4_WP                 0x098 0x388 0x87c 0x6 0x0 +#define MX6SL_PAD_EPDC_D11__EPDC_DATA11            0x09c 0x38c 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_D11__ECSPI3_SCLK            0x09c 0x38c 0x6b0 0x1 0x1 +#define MX6SL_PAD_EPDC_D11__EPDC_PWR_CTRL3         0x09c 0x38c 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_D11__EIM_ADDR19             0x09c 0x38c 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_D11__SPDC_DATA11            0x09c 0x38c 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_D11__GPIO1_IO18             0x09c 0x38c 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_D11__SD4_CD_B               0x09c 0x38c 0x854 0x6 0x0 +#define MX6SL_PAD_EPDC_D12__EPDC_DATA12            0x0a0 0x390 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_D12__UART2_RX_DATA          0x0a0 0x390 0x804 0x1 0x0 +#define MX6SL_PAD_EPDC_D12__UART2_TX_DATA          0x0a0 0x390 0x000 0x1 0x0 +#define MX6SL_PAD_EPDC_D12__EPDC_PWR_COM           0x0a0 0x390 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_D12__EIM_ADDR20             0x0a0 0x390 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_D12__SPDC_DATA12            0x0a0 0x390 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_D12__GPIO1_IO19             0x0a0 0x390 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_D12__ECSPI3_SS1             0x0a0 0x390 0x6c4 0x6 0x1 +#define MX6SL_PAD_EPDC_D13__EPDC_DATA13            0x0a4 0x394 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_D13__UART2_TX_DATA          0x0a4 0x394 0x000 0x1 0x0 +#define MX6SL_PAD_EPDC_D13__UART2_RX_DATA          0x0a4 0x394 0x804 0x1 0x1 +#define MX6SL_PAD_EPDC_D13__EPDC_PWR_IRQ           0x0a4 0x394 0x6e8 0x2 0x0 +#define MX6SL_PAD_EPDC_D13__EIM_ADDR21             0x0a4 0x394 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_D13__SPDC_DATA13            0x0a4 0x394 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_D13__GPIO1_IO20             0x0a4 0x394 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_D13__ECSPI3_SS2             0x0a4 0x394 0x6c8 0x6 0x0 +#define MX6SL_PAD_EPDC_D14__EPDC_DATA14            0x0a8 0x398 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_D14__UART2_RTS_B            0x0a8 0x398 0x800 0x1 0x0 +#define MX6SL_PAD_EPDC_D14__UART2_CTS_B            0x0a8 0x398 0x000 0x1 0x0 +#define MX6SL_PAD_EPDC_D14__EPDC_PWR_STAT          0x0a8 0x398 0x6ec 0x2 0x0 +#define MX6SL_PAD_EPDC_D14__EIM_ADDR22             0x0a8 0x398 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_D14__SPDC_DATA14            0x0a8 0x398 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_D14__GPIO1_IO21             0x0a8 0x398 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_D14__ECSPI3_SS3             0x0a8 0x398 0x6cc 0x6 0x0 +#define MX6SL_PAD_EPDC_D15__EPDC_DATA15            0x0ac 0x39c 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_D15__UART2_CTS_B            0x0ac 0x39c 0x000 0x1 0x0 +#define MX6SL_PAD_EPDC_D15__UART2_RTS_B            0x0ac 0x39c 0x800 0x1 0x1 +#define MX6SL_PAD_EPDC_D15__EPDC_PWR_WAKE          0x0ac 0x39c 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_D15__EIM_ADDR23             0x0ac 0x39c 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_D15__SPDC_DATA15            0x0ac 0x39c 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_D15__GPIO1_IO22             0x0ac 0x39c 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_D15__ECSPI3_RDY             0x0ac 0x39c 0x6b4 0x6 0x1 +#define MX6SL_PAD_EPDC_D2__EPDC_DATA02             0x0b0 0x3a0 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_D2__ECSPI4_SS0              0x0b0 0x3a0 0x6dc 0x1 0x0 +#define MX6SL_PAD_EPDC_D2__LCD_DATA26              0x0b0 0x3a0 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_D2__CSI_DATA02              0x0b0 0x3a0 0x638 0x3 0x0 +#define MX6SL_PAD_EPDC_D2__SPDC_DATA02             0x0b0 0x3a0 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_D2__GPIO1_IO09              0x0b0 0x3a0 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_D3__EPDC_DATA03             0x0b4 0x3a4 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_D3__ECSPI4_SCLK             0x0b4 0x3a4 0x6d0 0x1 0x0 +#define MX6SL_PAD_EPDC_D3__LCD_DATA27              0x0b4 0x3a4 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_D3__CSI_DATA03              0x0b4 0x3a4 0x63c 0x3 0x0 +#define MX6SL_PAD_EPDC_D3__SPDC_DATA03             0x0b4 0x3a4 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_D3__GPIO1_IO10              0x0b4 0x3a4 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_D4__EPDC_DATA04             0x0b8 0x3a8 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_D4__ECSPI4_SS1              0x0b8 0x3a8 0x6e0 0x1 0x0 +#define MX6SL_PAD_EPDC_D4__LCD_DATA28              0x0b8 0x3a8 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_D4__CSI_DATA04              0x0b8 0x3a8 0x640 0x3 0x0 +#define MX6SL_PAD_EPDC_D4__SPDC_DATA04             0x0b8 0x3a8 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_D4__GPIO1_IO11              0x0b8 0x3a8 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_D5__EPDC_DATA05             0x0bc 0x3ac 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_D5__ECSPI4_SS2              0x0bc 0x3ac 0x6e4 0x1 0x0 +#define MX6SL_PAD_EPDC_D5__LCD_DATA29              0x0bc 0x3ac 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_D5__CSI_DATA05              0x0bc 0x3ac 0x644 0x3 0x0 +#define MX6SL_PAD_EPDC_D5__SPDC_DATA05             0x0bc 0x3ac 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_D5__GPIO1_IO12              0x0bc 0x3ac 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_D6__EPDC_DATA06             0x0c0 0x3b0 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_D6__ECSPI4_SS3              0x0c0 0x3b0 0x000 0x1 0x0 +#define MX6SL_PAD_EPDC_D6__LCD_DATA30              0x0c0 0x3b0 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_D6__CSI_DATA06              0x0c0 0x3b0 0x648 0x3 0x0 +#define MX6SL_PAD_EPDC_D6__SPDC_DATA06             0x0c0 0x3b0 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_D6__GPIO1_IO13              0x0c0 0x3b0 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_D7__EPDC_DATA07             0x0c4 0x3b4 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_D7__ECSPI4_RDY              0x0c4 0x3b4 0x000 0x1 0x0 +#define MX6SL_PAD_EPDC_D7__LCD_DATA31              0x0c4 0x3b4 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_D7__CSI_DATA07              0x0c4 0x3b4 0x64c 0x3 0x0 +#define MX6SL_PAD_EPDC_D7__SPDC_DATA07             0x0c4 0x3b4 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_D7__GPIO1_IO14              0x0c4 0x3b4 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_D8__EPDC_DATA08             0x0c8 0x3b8 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_D8__ECSPI3_MOSI             0x0c8 0x3b8 0x6bc 0x1 0x1 +#define MX6SL_PAD_EPDC_D8__EPDC_PWR_CTRL0          0x0c8 0x3b8 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_D8__EIM_ADDR16              0x0c8 0x3b8 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_D8__SPDC_DATA08             0x0c8 0x3b8 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_D8__GPIO1_IO15              0x0c8 0x3b8 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_D8__SD4_RESET               0x0c8 0x3b8 0x000 0x6 0x0 +#define MX6SL_PAD_EPDC_D9__EPDC_DATA09             0x0cc 0x3bc 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_D9__ECSPI3_MISO             0x0cc 0x3bc 0x6b8 0x1 0x1 +#define MX6SL_PAD_EPDC_D9__EPDC_PWR_CTRL1          0x0cc 0x3bc 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_D9__EIM_ADDR17              0x0cc 0x3bc 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_D9__SPDC_DATA09             0x0cc 0x3bc 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_D9__GPIO1_IO16              0x0cc 0x3bc 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_D9__SD4_VSELECT             0x0cc 0x3bc 0x000 0x6 0x0 +#define MX6SL_PAD_EPDC_GDCLK__EPDC_GDCLK           0x0d0 0x3c0 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_GDCLK__ECSPI2_SS2           0x0d0 0x3c0 0x000 0x1 0x0 +#define MX6SL_PAD_EPDC_GDCLK__SPDC_YCKR            0x0d0 0x3c0 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_GDCLK__CSI_PIXCLK           0x0d0 0x3c0 0x674 0x3 0x1 +#define MX6SL_PAD_EPDC_GDCLK__SPDC_YCKL            0x0d0 0x3c0 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_GDCLK__GPIO1_IO31           0x0d0 0x3c0 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_GDCLK__SD2_RESET            0x0d0 0x3c0 0x000 0x6 0x0 +#define MX6SL_PAD_EPDC_GDOE__EPDC_GDOE             0x0d4 0x3c4 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_GDOE__ECSPI2_SS3            0x0d4 0x3c4 0x000 0x1 0x0 +#define MX6SL_PAD_EPDC_GDOE__SPDC_YOER             0x0d4 0x3c4 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_GDOE__CSI_HSYNC             0x0d4 0x3c4 0x670 0x3 0x1 +#define MX6SL_PAD_EPDC_GDOE__SPDC_YOEL             0x0d4 0x3c4 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_GDOE__GPIO2_IO00            0x0d4 0x3c4 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_GDOE__SD2_VSELECT           0x0d4 0x3c4 0x000 0x6 0x0 +#define MX6SL_PAD_EPDC_GDRL__EPDC_GDRL             0x0d8 0x3c8 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_GDRL__ECSPI2_RDY            0x0d8 0x3c8 0x000 0x1 0x0 +#define MX6SL_PAD_EPDC_GDRL__SPDC_YDIOUR           0x0d8 0x3c8 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_GDRL__CSI_MCLK              0x0d8 0x3c8 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_GDRL__SPDC_YDIOUL           0x0d8 0x3c8 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_GDRL__GPIO2_IO01            0x0d8 0x3c8 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_GDRL__SD2_WP                0x0d8 0x3c8 0x834 0x6 0x1 +#define MX6SL_PAD_EPDC_GDSP__EPDC_GDSP             0x0dc 0x3cc 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_GDSP__PWM4_OUT              0x0dc 0x3cc 0x000 0x1 0x0 +#define MX6SL_PAD_EPDC_GDSP__SPDC_YDIODR           0x0dc 0x3cc 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_GDSP__CSI_VSYNC             0x0dc 0x3cc 0x678 0x3 0x1 +#define MX6SL_PAD_EPDC_GDSP__SPDC_YDIODL           0x0dc 0x3cc 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_GDSP__GPIO2_IO02            0x0dc 0x3cc 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_GDSP__SD2_CD_B              0x0dc 0x3cc 0x830 0x6 0x1 +#define MX6SL_PAD_EPDC_PWRCOM__EPDC_PWR_COM        0x0e0 0x3d0 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_PWRCOM__SD4_DATA0           0x0e0 0x3d0 0x85c 0x1 0x0 +#define MX6SL_PAD_EPDC_PWRCOM__LCD_DATA20          0x0e0 0x3d0 0x7c8 0x2 0x0 +#define MX6SL_PAD_EPDC_PWRCOM__EIM_BCLK            0x0e0 0x3d0 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_PWRCOM__USB_OTG1_ID         0x0e0 0x3d0 0x5dc 0x4 0x0 +#define MX6SL_PAD_EPDC_PWRCOM__GPIO2_IO11          0x0e0 0x3d0 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_PWRCOM__SD3_RESET           0x0e0 0x3d0 0x000 0x6 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL0__EPDC_PWR_CTRL0    0x0e4 0x3d4 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL0__AUD5_RXC          0x0e4 0x3d4 0x604 0x1 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL0__LCD_DATA16        0x0e4 0x3d4 0x7b8 0x2 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL0__EIM_RW            0x0e4 0x3d4 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL0__SPDC_YCKL         0x0e4 0x3d4 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL0__GPIO2_IO07        0x0e4 0x3d4 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL0__SD4_RESET         0x0e4 0x3d4 0x000 0x6 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL1__EPDC_PWR_CTRL1    0x0e8 0x3d8 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL1__AUD5_TXFS         0x0e8 0x3d8 0x610 0x1 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL1__LCD_DATA17        0x0e8 0x3d8 0x7bc 0x2 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL1__EIM_OE_B          0x0e8 0x3d8 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL1__SPDC_YOEL         0x0e8 0x3d8 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL1__GPIO2_IO08        0x0e8 0x3d8 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL1__SD4_VSELECT       0x0e8 0x3d8 0x000 0x6 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL2__EPDC_PWR_CTRL2    0x0ec 0x3dc 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL2__AUD5_TXD          0x0ec 0x3dc 0x600 0x1 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL2__LCD_DATA18        0x0ec 0x3dc 0x7c0 0x2 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL2__EIM_CS0_B         0x0ec 0x3dc 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL2__SPDC_YDIOUL       0x0ec 0x3dc 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL2__GPIO2_IO09        0x0ec 0x3dc 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL2__SD4_WP            0x0ec 0x3dc 0x87c 0x6 0x1 +#define MX6SL_PAD_EPDC_PWRCTRL3__EPDC_PWR_CTRL3    0x0f0 0x3e0 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL3__AUD5_TXC          0x0f0 0x3e0 0x60c 0x1 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL3__LCD_DATA19        0x0f0 0x3e0 0x7c4 0x2 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL3__EIM_CS1_B         0x0f0 0x3e0 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL3__SPDC_YDIODL       0x0f0 0x3e0 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL3__GPIO2_IO10        0x0f0 0x3e0 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_PWRCTRL3__SD4_CD_B          0x0f0 0x3e0 0x854 0x6 0x1 +#define MX6SL_PAD_EPDC_PWRINT__EPDC_PWR_IRQ        0x0f4 0x3e4 0x6e8 0x0 0x1 +#define MX6SL_PAD_EPDC_PWRINT__SD4_DATA1           0x0f4 0x3e4 0x860 0x1 0x0 +#define MX6SL_PAD_EPDC_PWRINT__LCD_DATA21          0x0f4 0x3e4 0x7cc 0x2 0x0 +#define MX6SL_PAD_EPDC_PWRINT__EIM_ACLK_FREERUN    0x0f4 0x3e4 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_PWRINT__USB_OTG2_ID         0x0f4 0x3e4 0x5e0 0x4 0x0 +#define MX6SL_PAD_EPDC_PWRINT__GPIO2_IO12          0x0f4 0x3e4 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_PWRINT__SD3_VSELECT         0x0f4 0x3e4 0x000 0x6 0x0 +#define MX6SL_PAD_EPDC_PWRSTAT__EPDC_PWR_STAT      0x0f8 0x3e8 0x6ec 0x0 0x1 +#define MX6SL_PAD_EPDC_PWRSTAT__SD4_DATA2          0x0f8 0x3e8 0x864 0x1 0x0 +#define MX6SL_PAD_EPDC_PWRSTAT__LCD_DATA22         0x0f8 0x3e8 0x7d0 0x2 0x0 +#define MX6SL_PAD_EPDC_PWRSTAT__EIM_WAIT_B         0x0f8 0x3e8 0x884 0x3 0x0 +#define MX6SL_PAD_EPDC_PWRSTAT__ARM_EVENTI         0x0f8 0x3e8 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_PWRSTAT__GPIO2_IO13         0x0f8 0x3e8 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_PWRSTAT__SD3_WP             0x0f8 0x3e8 0x84c 0x6 0x0 +#define MX6SL_PAD_EPDC_PWRWAKEUP__EPDC_PWR_WAKE    0x0fc 0x3ec 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_PWRWAKEUP__SD4_DATA3        0x0fc 0x3ec 0x868 0x1 0x0 +#define MX6SL_PAD_EPDC_PWRWAKEUP__LCD_DATA23       0x0fc 0x3ec 0x7d4 0x2 0x0 +#define MX6SL_PAD_EPDC_PWRWAKEUP__EIM_DTACK_B      0x0fc 0x3ec 0x880 0x3 0x0 +#define MX6SL_PAD_EPDC_PWRWAKEUP__ARM_EVENTO       0x0fc 0x3ec 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_PWRWAKEUP__GPIO2_IO14       0x0fc 0x3ec 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_PWRWAKEUP__SD3_CD_B         0x0fc 0x3ec 0x838 0x6 0x0 +#define MX6SL_PAD_EPDC_SDCE0__EPDC_SDCE0           0x100 0x3f0 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_SDCE0__ECSPI2_SS1           0x100 0x3f0 0x6ac 0x1 0x0 +#define MX6SL_PAD_EPDC_SDCE0__PWM3_OUT             0x100 0x3f0 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_SDCE0__EIM_CS2_B            0x100 0x3f0 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_SDCE0__SPDC_YCKR            0x100 0x3f0 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_SDCE0__GPIO1_IO27           0x100 0x3f0 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_SDCE1__EPDC_SDCE1           0x104 0x3f4 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_SDCE1__WDOG2_B              0x104 0x3f4 0x000 0x1 0x0 +#define MX6SL_PAD_EPDC_SDCE1__PWM4_OUT             0x104 0x3f4 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_SDCE1__EIM_LBA_B            0x104 0x3f4 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_SDCE1__SPDC_YOER            0x104 0x3f4 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_SDCE1__GPIO1_IO28           0x104 0x3f4 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_SDCE2__EPDC_SDCE2           0x108 0x3f8 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_SDCE2__I2C3_SCL             0x108 0x3f8 0x72c 0x1 0x1 +#define MX6SL_PAD_EPDC_SDCE2__PWM1_OUT             0x108 0x3f8 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_SDCE2__EIM_EB0_B            0x108 0x3f8 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_SDCE2__SPDC_YDIOUR          0x108 0x3f8 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_SDCE2__GPIO1_IO29           0x108 0x3f8 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_SDCE3__EPDC_SDCE3           0x10c 0x3fc 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_SDCE3__I2C3_SDA             0x10c 0x3fc 0x730 0x1 0x1 +#define MX6SL_PAD_EPDC_SDCE3__PWM2_OUT             0x10c 0x3fc 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_SDCE3__EIM_EB1_B            0x10c 0x3fc 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_SDCE3__SPDC_YDIODR          0x10c 0x3fc 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_SDCE3__GPIO1_IO30           0x10c 0x3fc 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_SDCLK__EPDC_SDCLK_P         0x110 0x400 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_SDCLK__ECSPI2_MOSI          0x110 0x400 0x6a4 0x1 0x1 +#define MX6SL_PAD_EPDC_SDCLK__I2C2_SCL             0x110 0x400 0x724 0x2 0x0 +#define MX6SL_PAD_EPDC_SDCLK__CSI_DATA08           0x110 0x400 0x650 0x3 0x0 +#define MX6SL_PAD_EPDC_SDCLK__SPDC_CL              0x110 0x400 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_SDCLK__GPIO1_IO23           0x110 0x400 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_SDLE__EPDC_SDLE             0x114 0x404 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_SDLE__ECSPI2_MISO           0x114 0x404 0x6a0 0x1 0x1 +#define MX6SL_PAD_EPDC_SDLE__I2C2_SDA              0x114 0x404 0x728 0x2 0x0 +#define MX6SL_PAD_EPDC_SDLE__CSI_DATA09            0x114 0x404 0x654 0x3 0x0 +#define MX6SL_PAD_EPDC_SDLE__SPDC_LD               0x114 0x404 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_SDLE__GPIO1_IO24            0x114 0x404 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_SDOE__EPDC_SDOE             0x118 0x408 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_SDOE__ECSPI2_SS0            0x118 0x408 0x6a8 0x1 0x1 +#define MX6SL_PAD_EPDC_SDOE__SPDC_XDIOR            0x118 0x408 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_SDOE__CSI_DATA10            0x118 0x408 0x658 0x3 0x0 +#define MX6SL_PAD_EPDC_SDOE__SPDC_XDIOL            0x118 0x408 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_SDOE__GPIO1_IO25            0x118 0x408 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_SDSHR__EPDC_SDSHR           0x11c 0x40c 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_SDSHR__ECSPI2_SCLK          0x11c 0x40c 0x69c 0x1 0x1 +#define MX6SL_PAD_EPDC_SDSHR__EPDC_SDCE4           0x11c 0x40c 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_SDSHR__CSI_DATA11           0x11c 0x40c 0x65c 0x3 0x0 +#define MX6SL_PAD_EPDC_SDSHR__SPDC_XDIOR           0x11c 0x40c 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_SDSHR__GPIO1_IO26           0x11c 0x40c 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_VCOM0__EPDC_VCOM0           0x120 0x410 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_VCOM0__AUD5_RXFS            0x120 0x410 0x608 0x1 0x0 +#define MX6SL_PAD_EPDC_VCOM0__UART3_RX_DATA        0x120 0x410 0x80c 0x2 0x4 +#define MX6SL_PAD_EPDC_VCOM0__UART3_TX_DATA        0x120 0x410 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_VCOM0__EIM_ADDR24           0x120 0x410 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_VCOM0__SPDC_VCOM0           0x120 0x410 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_VCOM0__GPIO2_IO03           0x120 0x410 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_VCOM0__EPDC_SDCE5           0x120 0x410 0x000 0x6 0x0 +#define MX6SL_PAD_EPDC_VCOM1__EPDC_VCOM1           0x124 0x414 0x000 0x0 0x0 +#define MX6SL_PAD_EPDC_VCOM1__AUD5_RXD             0x124 0x414 0x5fc 0x1 0x0 +#define MX6SL_PAD_EPDC_VCOM1__UART3_TX_DATA        0x124 0x414 0x000 0x2 0x0 +#define MX6SL_PAD_EPDC_VCOM1__UART3_RX_DATA        0x124 0x414 0x80c 0x2 0x5 +#define MX6SL_PAD_EPDC_VCOM1__EIM_ADDR25           0x124 0x414 0x000 0x3 0x0 +#define MX6SL_PAD_EPDC_VCOM1__SPDC_VCOM1           0x124 0x414 0x000 0x4 0x0 +#define MX6SL_PAD_EPDC_VCOM1__GPIO2_IO04           0x124 0x414 0x000 0x5 0x0 +#define MX6SL_PAD_EPDC_VCOM1__EPDC_SDCE6           0x124 0x414 0x000 0x6 0x0 +#define MX6SL_PAD_FEC_CRS_DV__FEC_RX_DV            0x128 0x418 0x704 0x0 0x1 +#define MX6SL_PAD_FEC_CRS_DV__SD4_DATA1            0x128 0x418 0x860 0x1 0x1 +#define MX6SL_PAD_FEC_CRS_DV__AUD6_TXC             0x128 0x418 0x624 0x2 0x0 +#define MX6SL_PAD_FEC_CRS_DV__ECSPI4_MISO          0x128 0x418 0x6d4 0x3 0x1 +#define MX6SL_PAD_FEC_CRS_DV__GPT_COMPARE2         0x128 0x418 0x000 0x4 0x0 +#define MX6SL_PAD_FEC_CRS_DV__GPIO4_IO25           0x128 0x418 0x000 0x5 0x0 +#define MX6SL_PAD_FEC_CRS_DV__ARM_TRACE31          0x128 0x418 0x000 0x6 0x0 +#define MX6SL_PAD_FEC_MDC__FEC_MDC                 0x12c 0x41c 0x000 0x0 0x0 +#define MX6SL_PAD_FEC_MDC__SD4_DATA4               0x12c 0x41c 0x86c 0x1 0x0 +#define MX6SL_PAD_FEC_MDC__AUDIO_CLK_OUT           0x12c 0x41c 0x000 0x2 0x0 +#define MX6SL_PAD_FEC_MDC__SD1_RESET               0x12c 0x41c 0x000 0x3 0x0 +#define MX6SL_PAD_FEC_MDC__SD3_RESET               0x12c 0x41c 0x000 0x4 0x0 +#define MX6SL_PAD_FEC_MDC__GPIO4_IO23              0x12c 0x41c 0x000 0x5 0x0 +#define MX6SL_PAD_FEC_MDC__ARM_TRACE29             0x12c 0x41c 0x000 0x6 0x0 +#define MX6SL_PAD_FEC_MDIO__FEC_MDIO               0x130 0x420 0x6f4 0x0 0x1 +#define MX6SL_PAD_FEC_MDIO__SD4_CLK                0x130 0x420 0x850 0x1 0x1 +#define MX6SL_PAD_FEC_MDIO__AUD6_RXFS              0x130 0x420 0x620 0x2 0x0 +#define MX6SL_PAD_FEC_MDIO__ECSPI4_SS0             0x130 0x420 0x6dc 0x3 0x1 +#define MX6SL_PAD_FEC_MDIO__GPT_CAPTURE1           0x130 0x420 0x710 0x4 0x0 +#define MX6SL_PAD_FEC_MDIO__GPIO4_IO20             0x130 0x420 0x000 0x5 0x0 +#define MX6SL_PAD_FEC_MDIO__ARM_TRACE26            0x130 0x420 0x000 0x6 0x0 +#define MX6SL_PAD_FEC_REF_CLK__FEC_REF_OUT         0x134 0x424 0x000 0x0 0x0 +#define MX6SL_PAD_FEC_REF_CLK__SD4_RESET           0x134 0x424 0x000 0x1 0x0 +#define MX6SL_PAD_FEC_REF_CLK__WDOG1_B             0x134 0x424 0x000 0x2 0x0 +#define MX6SL_PAD_FEC_REF_CLK__PWM4_OUT            0x134 0x424 0x000 0x3 0x0 +#define MX6SL_PAD_FEC_REF_CLK__CCM_PMIC_READY      0x134 0x424 0x62c 0x4 0x0 +#define MX6SL_PAD_FEC_REF_CLK__GPIO4_IO26          0x134 0x424 0x000 0x5 0x0 +#define MX6SL_PAD_FEC_REF_CLK__SPDIF_EXT_CLK       0x134 0x424 0x7f4 0x6 0x2 +#define MX6SL_PAD_FEC_RX_ER__FEC_RX_ER             0x138 0x428 0x708 0x0 0x1 +#define MX6SL_PAD_FEC_RX_ER__SD4_DATA0             0x138 0x428 0x85c 0x1 0x1 +#define MX6SL_PAD_FEC_RX_ER__AUD6_RXD              0x138 0x428 0x614 0x2 0x0 +#define MX6SL_PAD_FEC_RX_ER__ECSPI4_MOSI           0x138 0x428 0x6d8 0x3 0x1 +#define MX6SL_PAD_FEC_RX_ER__GPT_COMPARE1          0x138 0x428 0x000 0x4 0x0 +#define MX6SL_PAD_FEC_RX_ER__GPIO4_IO19            0x138 0x428 0x000 0x5 0x0 +#define MX6SL_PAD_FEC_RX_ER__ARM_TRACE25           0x138 0x428 0x000 0x6 0x0 +#define MX6SL_PAD_FEC_RXD0__FEC_RX_DATA0           0x13c 0x42c 0x6f8 0x0 0x0 +#define MX6SL_PAD_FEC_RXD0__SD4_DATA5              0x13c 0x42c 0x870 0x1 0x0 +#define MX6SL_PAD_FEC_RXD0__USB_OTG1_ID            0x13c 0x42c 0x5dc 0x2 0x1 +#define MX6SL_PAD_FEC_RXD0__SD1_VSELECT            0x13c 0x42c 0x000 0x3 0x0 +#define MX6SL_PAD_FEC_RXD0__SD3_VSELECT            0x13c 0x42c 0x000 0x4 0x0 +#define MX6SL_PAD_FEC_RXD0__GPIO4_IO17             0x13c 0x42c 0x000 0x5 0x0 +#define MX6SL_PAD_FEC_RXD0__ARM_TRACE24            0x13c 0x42c 0x000 0x6 0x0 +#define MX6SL_PAD_FEC_RXD1__FEC_RX_DATA1           0x140 0x430 0x6fc 0x0 0x1 +#define MX6SL_PAD_FEC_RXD1__SD4_DATA2              0x140 0x430 0x864 0x1 0x1 +#define MX6SL_PAD_FEC_RXD1__AUD6_TXFS              0x140 0x430 0x628 0x2 0x0 +#define MX6SL_PAD_FEC_RXD1__ECSPI4_SS1             0x140 0x430 0x6e0 0x3 0x1 +#define MX6SL_PAD_FEC_RXD1__GPT_COMPARE3           0x140 0x430 0x000 0x4 0x0 +#define MX6SL_PAD_FEC_RXD1__GPIO4_IO18             0x140 0x430 0x000 0x5 0x0 +#define MX6SL_PAD_FEC_RXD1__FEC_COL                0x140 0x430 0x6f0 0x6 0x0 +#define MX6SL_PAD_FEC_TX_CLK__FEC_TX_CLK           0x144 0x434 0x70c 0x0 0x1 +#define MX6SL_PAD_FEC_TX_CLK__SD4_CMD              0x144 0x434 0x858 0x1 0x1 +#define MX6SL_PAD_FEC_TX_CLK__AUD6_RXC             0x144 0x434 0x61c 0x2 0x0 +#define MX6SL_PAD_FEC_TX_CLK__ECSPI4_SCLK          0x144 0x434 0x6d0 0x3 0x1 +#define MX6SL_PAD_FEC_TX_CLK__GPT_CAPTURE2         0x144 0x434 0x714 0x4 0x0 +#define MX6SL_PAD_FEC_TX_CLK__GPIO4_IO21           0x144 0x434 0x000 0x5 0x0 +#define MX6SL_PAD_FEC_TX_CLK__ARM_TRACE27          0x144 0x434 0x000 0x6 0x0 +#define MX6SL_PAD_FEC_TX_EN__FEC_TX_EN             0x148 0x438 0x000 0x0 0x0 +#define MX6SL_PAD_FEC_TX_EN__SD4_DATA6             0x148 0x438 0x874 0x1 0x0 +#define MX6SL_PAD_FEC_TX_EN__SPDIF_IN              0x148 0x438 0x7f0 0x2 0x0 +#define MX6SL_PAD_FEC_TX_EN__SD1_WP                0x148 0x438 0x82c 0x3 0x1 +#define MX6SL_PAD_FEC_TX_EN__SD3_WP                0x148 0x438 0x84c 0x4 0x1 +#define MX6SL_PAD_FEC_TX_EN__GPIO4_IO22            0x148 0x438 0x000 0x5 0x0 +#define MX6SL_PAD_FEC_TX_EN__ARM_TRACE28           0x148 0x438 0x000 0x6 0x0 +#define MX6SL_PAD_FEC_TXD0__FEC_TX_DATA0           0x14c 0x43c 0x000 0x0 0x0 +#define MX6SL_PAD_FEC_TXD0__SD4_DATA3              0x14c 0x43c 0x868 0x1 0x1 +#define MX6SL_PAD_FEC_TXD0__AUD6_TXD               0x14c 0x43c 0x618 0x2 0x0 +#define MX6SL_PAD_FEC_TXD0__ECSPI4_SS2             0x14c 0x43c 0x6e4 0x3 0x1 +#define MX6SL_PAD_FEC_TXD0__GPT_CLKIN              0x14c 0x43c 0x718 0x4 0x0 +#define MX6SL_PAD_FEC_TXD0__GPIO4_IO24             0x14c 0x43c 0x000 0x5 0x0 +#define MX6SL_PAD_FEC_TXD0__ARM_TRACE30            0x14c 0x43c 0x000 0x6 0x0 +#define MX6SL_PAD_FEC_TXD1__FEC_TX_DATA1           0x150 0x440 0x000 0x0 0x0 +#define MX6SL_PAD_FEC_TXD1__SD4_DATA7              0x150 0x440 0x878 0x1 0x0 +#define MX6SL_PAD_FEC_TXD1__SPDIF_OUT              0x150 0x440 0x000 0x2 0x0 +#define MX6SL_PAD_FEC_TXD1__SD1_CD_B               0x150 0x440 0x828 0x3 0x1 +#define MX6SL_PAD_FEC_TXD1__SD3_CD_B               0x150 0x440 0x838 0x4 0x1 +#define MX6SL_PAD_FEC_TXD1__GPIO4_IO16             0x150 0x440 0x000 0x5 0x0 +#define MX6SL_PAD_FEC_TXD1__FEC_RX_CLK             0x150 0x440 0x700 0x6 0x0 +#define MX6SL_PAD_HSIC_DAT__USB_H_DATA             0x154 0x444 0x000 0x0 0x0 +#define MX6SL_PAD_HSIC_DAT__I2C1_SCL               0x154 0x444 0x71c 0x1 0x1 +#define MX6SL_PAD_HSIC_DAT__PWM1_OUT               0x154 0x444 0x000 0x2 0x0 +#define MX6SL_PAD_HSIC_DAT__XTALOSC_REF_CLK_24M    0x154 0x444 0x000 0x3 0x0 +#define MX6SL_PAD_HSIC_DAT__GPIO3_IO19             0x154 0x444 0x000 0x5 0x0 +#define MX6SL_PAD_HSIC_STROBE__USB_H_STROBE        0x158 0x448 0x000 0x0 0x0 +#define MX6SL_PAD_HSIC_STROBE__I2C1_SDA            0x158 0x448 0x720 0x1 0x1 +#define MX6SL_PAD_HSIC_STROBE__PWM2_OUT            0x158 0x448 0x000 0x2 0x0 +#define MX6SL_PAD_HSIC_STROBE__XTALOSC_REF_CLK_32K 0x158 0x448 0x000 0x3 0x0 +#define MX6SL_PAD_HSIC_STROBE__GPIO3_IO20          0x158 0x448 0x000 0x5 0x0 +#define MX6SL_PAD_I2C1_SCL__I2C1_SCL               0x15c 0x44c 0x71c 0x0 0x2 +#define MX6SL_PAD_I2C1_SCL__UART1_RTS_B            0x15c 0x44c 0x7f8 0x1 0x0 +#define MX6SL_PAD_I2C1_SCL__UART1_CTS_B            0x15c 0x44c 0x000 0x1 0x0 +#define MX6SL_PAD_I2C1_SCL__ECSPI3_SS2             0x15c 0x44c 0x6c8 0x2 0x1 +#define MX6SL_PAD_I2C1_SCL__FEC_RX_DATA0           0x15c 0x44c 0x6f8 0x3 0x1 +#define MX6SL_PAD_I2C1_SCL__SD3_RESET              0x15c 0x44c 0x000 0x4 0x0 +#define MX6SL_PAD_I2C1_SCL__GPIO3_IO12             0x15c 0x44c 0x000 0x5 0x0 +#define MX6SL_PAD_I2C1_SCL__ECSPI1_SS1             0x15c 0x44c 0x690 0x6 0x0 +#define MX6SL_PAD_I2C1_SDA__I2C1_SDA               0x160 0x450 0x720 0x0 0x2 +#define MX6SL_PAD_I2C1_SDA__UART1_CTS_B            0x160 0x450 0x000 0x1 0x0 +#define MX6SL_PAD_I2C1_SDA__UART1_RTS_B            0x160 0x450 0x7f8 0x1 0x1 +#define MX6SL_PAD_I2C1_SDA__ECSPI3_SS3             0x160 0x450 0x6cc 0x2 0x1 +#define MX6SL_PAD_I2C1_SDA__FEC_TX_EN              0x160 0x450 0x000 0x3 0x0 +#define MX6SL_PAD_I2C1_SDA__SD3_VSELECT            0x160 0x450 0x000 0x4 0x0 +#define MX6SL_PAD_I2C1_SDA__GPIO3_IO13             0x160 0x450 0x000 0x5 0x0 +#define MX6SL_PAD_I2C1_SDA__ECSPI1_SS2             0x160 0x450 0x694 0x6 0x0 +#define MX6SL_PAD_I2C2_SCL__I2C2_SCL               0x164 0x454 0x724 0x0 0x1 +#define MX6SL_PAD_I2C2_SCL__AUD4_RXFS              0x164 0x454 0x5f0 0x1 0x0 +#define MX6SL_PAD_I2C2_SCL__SPDIF_IN               0x164 0x454 0x7f0 0x2 0x1 +#define MX6SL_PAD_I2C2_SCL__FEC_TX_DATA1           0x164 0x454 0x000 0x3 0x0 +#define MX6SL_PAD_I2C2_SCL__SD3_WP                 0x164 0x454 0x84c 0x4 0x2 +#define MX6SL_PAD_I2C2_SCL__GPIO3_IO14             0x164 0x454 0x000 0x5 0x0 +#define MX6SL_PAD_I2C2_SCL__ECSPI1_RDY             0x164 0x454 0x680 0x6 0x0 +#define MX6SL_PAD_I2C2_SDA__I2C2_SDA               0x168 0x458 0x728 0x0 0x1 +#define MX6SL_PAD_I2C2_SDA__AUD4_RXC               0x168 0x458 0x5ec 0x1 0x0 +#define MX6SL_PAD_I2C2_SDA__SPDIF_OUT              0x168 0x458 0x000 0x2 0x0 +#define MX6SL_PAD_I2C2_SDA__FEC_REF_OUT            0x168 0x458 0x000 0x3 0x0 +#define MX6SL_PAD_I2C2_SDA__SD3_CD_B               0x168 0x458 0x838 0x4 0x2 +#define MX6SL_PAD_I2C2_SDA__GPIO3_IO15             0x168 0x458 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_COL0__KEY_COL0               0x16c 0x474 0x734 0x0 0x0 +#define MX6SL_PAD_KEY_COL0__I2C2_SCL               0x16c 0x474 0x724 0x1 0x2 +#define MX6SL_PAD_KEY_COL0__LCD_DATA00             0x16c 0x474 0x778 0x2 0x0 +#define MX6SL_PAD_KEY_COL0__EIM_AD00               0x16c 0x474 0x000 0x3 0x0 +#define MX6SL_PAD_KEY_COL0__SD1_CD_B               0x16c 0x474 0x828 0x4 0x2 +#define MX6SL_PAD_KEY_COL0__GPIO3_IO24             0x16c 0x474 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_COL1__KEY_COL1               0x170 0x478 0x738 0x0 0x0 +#define MX6SL_PAD_KEY_COL1__ECSPI4_MOSI            0x170 0x478 0x6d8 0x1 0x2 +#define MX6SL_PAD_KEY_COL1__LCD_DATA02             0x170 0x478 0x780 0x2 0x0 +#define MX6SL_PAD_KEY_COL1__EIM_AD02               0x170 0x478 0x000 0x3 0x0 +#define MX6SL_PAD_KEY_COL1__SD3_DATA4              0x170 0x478 0x83c 0x4 0x0 +#define MX6SL_PAD_KEY_COL1__GPIO3_IO26             0x170 0x478 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_COL2__KEY_COL2               0x174 0x47c 0x73c 0x0 0x0 +#define MX6SL_PAD_KEY_COL2__ECSPI4_SS0             0x174 0x47c 0x6dc 0x1 0x2 +#define MX6SL_PAD_KEY_COL2__LCD_DATA04             0x174 0x47c 0x788 0x2 0x0 +#define MX6SL_PAD_KEY_COL2__EIM_AD04               0x174 0x47c 0x000 0x3 0x0 +#define MX6SL_PAD_KEY_COL2__SD3_DATA6              0x174 0x47c 0x844 0x4 0x0 +#define MX6SL_PAD_KEY_COL2__GPIO3_IO28             0x174 0x47c 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_COL3__KEY_COL3               0x178 0x480 0x740 0x0 0x0 +#define MX6SL_PAD_KEY_COL3__AUD6_RXFS              0x178 0x480 0x620 0x1 0x1 +#define MX6SL_PAD_KEY_COL3__LCD_DATA06             0x178 0x480 0x790 0x2 0x0 +#define MX6SL_PAD_KEY_COL3__EIM_AD06               0x178 0x480 0x000 0x3 0x0 +#define MX6SL_PAD_KEY_COL3__SD4_DATA6              0x178 0x480 0x874 0x4 0x1 +#define MX6SL_PAD_KEY_COL3__GPIO3_IO30             0x178 0x480 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_COL3__SD1_RESET              0x178 0x480 0x000 0x6 0x0 +#define MX6SL_PAD_KEY_COL4__KEY_COL4               0x17c 0x484 0x744 0x0 0x0 +#define MX6SL_PAD_KEY_COL4__AUD6_RXD               0x17c 0x484 0x614 0x1 0x1 +#define MX6SL_PAD_KEY_COL4__LCD_DATA08             0x17c 0x484 0x798 0x2 0x0 +#define MX6SL_PAD_KEY_COL4__EIM_AD08               0x17c 0x484 0x000 0x3 0x0 +#define MX6SL_PAD_KEY_COL4__SD4_CLK                0x17c 0x484 0x850 0x4 0x2 +#define MX6SL_PAD_KEY_COL4__GPIO4_IO00             0x17c 0x484 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_COL4__USB_OTG1_PWR           0x17c 0x484 0x000 0x6 0x0 +#define MX6SL_PAD_KEY_COL5__KEY_COL5               0x180 0x488 0x748 0x0 0x0 +#define MX6SL_PAD_KEY_COL5__AUD6_TXFS              0x180 0x488 0x628 0x1 0x1 +#define MX6SL_PAD_KEY_COL5__LCD_DATA10             0x180 0x488 0x7a0 0x2 0x0 +#define MX6SL_PAD_KEY_COL5__EIM_AD10               0x180 0x488 0x000 0x3 0x0 +#define MX6SL_PAD_KEY_COL5__SD4_DATA0              0x180 0x488 0x85c 0x4 0x2 +#define MX6SL_PAD_KEY_COL5__GPIO4_IO02             0x180 0x488 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_COL5__USB_OTG2_PWR           0x180 0x488 0x000 0x6 0x0 +#define MX6SL_PAD_KEY_COL6__KEY_COL6               0x184 0x48c 0x74c 0x0 0x0 +#define MX6SL_PAD_KEY_COL6__UART4_RX_DATA          0x184 0x48c 0x814 0x1 0x2 +#define MX6SL_PAD_KEY_COL6__UART4_TX_DATA          0x184 0x48c 0x000 0x1 0x0 +#define MX6SL_PAD_KEY_COL6__LCD_DATA12             0x184 0x48c 0x7a8 0x2 0x0 +#define MX6SL_PAD_KEY_COL6__EIM_AD12               0x184 0x48c 0x000 0x3 0x0 +#define MX6SL_PAD_KEY_COL6__SD4_DATA2              0x184 0x48c 0x864 0x4 0x2 +#define MX6SL_PAD_KEY_COL6__GPIO4_IO04             0x184 0x48c 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_COL6__SD3_RESET              0x184 0x48c 0x000 0x6 0x0 +#define MX6SL_PAD_KEY_COL7__KEY_COL7               0x188 0x490 0x750 0x0 0x0 +#define MX6SL_PAD_KEY_COL7__UART4_RTS_B            0x188 0x490 0x810 0x1 0x2 +#define MX6SL_PAD_KEY_COL7__UART4_CTS_B            0x188 0x490 0x000 0x1 0x0 +#define MX6SL_PAD_KEY_COL7__LCD_DATA14             0x188 0x490 0x7b0 0x2 0x0 +#define MX6SL_PAD_KEY_COL7__EIM_AD14               0x188 0x490 0x000 0x3 0x0 +#define MX6SL_PAD_KEY_COL7__SD4_DATA4              0x188 0x490 0x86c 0x4 0x1 +#define MX6SL_PAD_KEY_COL7__GPIO4_IO06             0x188 0x490 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_COL7__SD1_WP                 0x188 0x490 0x82c 0x6 0x2 +#define MX6SL_PAD_KEY_ROW0__KEY_ROW0               0x18c 0x494 0x754 0x0 0x0 +#define MX6SL_PAD_KEY_ROW0__I2C2_SDA               0x18c 0x494 0x728 0x1 0x2 +#define MX6SL_PAD_KEY_ROW0__LCD_DATA01             0x18c 0x494 0x77c 0x2 0x0 +#define MX6SL_PAD_KEY_ROW0__EIM_AD01               0x18c 0x494 0x000 0x3 0x0 +#define MX6SL_PAD_KEY_ROW0__SD1_WP                 0x18c 0x494 0x82c 0x4 0x3 +#define MX6SL_PAD_KEY_ROW0__GPIO3_IO25             0x18c 0x494 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_ROW1__KEY_ROW1               0x190 0x498 0x758 0x0 0x0 +#define MX6SL_PAD_KEY_ROW1__ECSPI4_MISO            0x190 0x498 0x6d4 0x1 0x2 +#define MX6SL_PAD_KEY_ROW1__LCD_DATA03             0x190 0x498 0x784 0x2 0x0 +#define MX6SL_PAD_KEY_ROW1__EIM_AD03               0x190 0x498 0x000 0x3 0x0 +#define MX6SL_PAD_KEY_ROW1__SD3_DATA5              0x190 0x498 0x840 0x4 0x0 +#define MX6SL_PAD_KEY_ROW1__GPIO3_IO27             0x190 0x498 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_ROW2__KEY_ROW2               0x194 0x49c 0x75c 0x0 0x0 +#define MX6SL_PAD_KEY_ROW2__ECSPI4_SCLK            0x194 0x49c 0x6d0 0x1 0x2 +#define MX6SL_PAD_KEY_ROW2__LCD_DATA05             0x194 0x49c 0x78c 0x2 0x0 +#define MX6SL_PAD_KEY_ROW2__EIM_AD05               0x194 0x49c 0x000 0x3 0x0 +#define MX6SL_PAD_KEY_ROW2__SD3_DATA7              0x194 0x49c 0x848 0x4 0x0 +#define MX6SL_PAD_KEY_ROW2__GPIO3_IO29             0x194 0x49c 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_ROW3__KEY_ROW3               0x198 0x4a0 0x760 0x0 0x0 +#define MX6SL_PAD_KEY_ROW3__AUD6_RXC               0x198 0x4a0 0x61c 0x1 0x1 +#define MX6SL_PAD_KEY_ROW3__LCD_DATA07             0x198 0x4a0 0x794 0x2 0x0 +#define MX6SL_PAD_KEY_ROW3__EIM_AD07               0x198 0x4a0 0x000 0x3 0x0 +#define MX6SL_PAD_KEY_ROW3__SD4_DATA7              0x198 0x4a0 0x878 0x4 0x1 +#define MX6SL_PAD_KEY_ROW3__GPIO3_IO31             0x198 0x4a0 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_ROW3__SD1_VSELECT            0x198 0x4a0 0x000 0x6 0x0 +#define MX6SL_PAD_KEY_ROW4__KEY_ROW4               0x19c 0x4a4 0x764 0x0 0x0 +#define MX6SL_PAD_KEY_ROW4__AUD6_TXC               0x19c 0x4a4 0x624 0x1 0x1 +#define MX6SL_PAD_KEY_ROW4__LCD_DATA09             0x19c 0x4a4 0x79c 0x2 0x0 +#define MX6SL_PAD_KEY_ROW4__EIM_AD09               0x19c 0x4a4 0x000 0x3 0x0 +#define MX6SL_PAD_KEY_ROW4__SD4_CMD                0x19c 0x4a4 0x858 0x4 0x2 +#define MX6SL_PAD_KEY_ROW4__GPIO4_IO01             0x19c 0x4a4 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_ROW4__USB_OTG1_OC            0x19c 0x4a4 0x824 0x6 0x1 +#define MX6SL_PAD_KEY_ROW5__KEY_ROW5               0x1a0 0x4a8 0x768 0x0 0x0 +#define MX6SL_PAD_KEY_ROW5__AUD6_TXD               0x1a0 0x4a8 0x618 0x1 0x1 +#define MX6SL_PAD_KEY_ROW5__LCD_DATA11             0x1a0 0x4a8 0x7a4 0x2 0x0 +#define MX6SL_PAD_KEY_ROW5__EIM_AD11               0x1a0 0x4a8 0x000 0x3 0x0 +#define MX6SL_PAD_KEY_ROW5__SD4_DATA1              0x1a0 0x4a8 0x860 0x4 0x2 +#define MX6SL_PAD_KEY_ROW5__GPIO4_IO03             0x1a0 0x4a8 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_ROW5__USB_OTG2_OC            0x1a0 0x4a8 0x820 0x6 0x2 +#define MX6SL_PAD_KEY_ROW6__KEY_ROW6               0x1a4 0x4ac 0x76c 0x0 0x0 +#define MX6SL_PAD_KEY_ROW6__UART4_TX_DATA          0x1a4 0x4ac 0x000 0x1 0x0 +#define MX6SL_PAD_KEY_ROW6__UART4_RX_DATA          0x1a4 0x4ac 0x814 0x1 0x3 +#define MX6SL_PAD_KEY_ROW6__LCD_DATA13             0x1a4 0x4ac 0x7ac 0x2 0x0 +#define MX6SL_PAD_KEY_ROW6__EIM_AD13               0x1a4 0x4ac 0x000 0x3 0x0 +#define MX6SL_PAD_KEY_ROW6__SD4_DATA3              0x1a4 0x4ac 0x868 0x4 0x2 +#define MX6SL_PAD_KEY_ROW6__GPIO4_IO05             0x1a4 0x4ac 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_ROW6__SD3_VSELECT            0x1a4 0x4ac 0x000 0x6 0x0 +#define MX6SL_PAD_KEY_ROW7__KEY_ROW7               0x1a8 0x4b0 0x770 0x0 0x0 +#define MX6SL_PAD_KEY_ROW7__UART4_CTS_B            0x1a8 0x4b0 0x000 0x1 0x0 +#define MX6SL_PAD_KEY_ROW7__UART4_RTS_B            0x1a8 0x4b0 0x810 0x1 0x3 +#define MX6SL_PAD_KEY_ROW7__LCD_DATA15             0x1a8 0x4b0 0x7b4 0x2 0x0 +#define MX6SL_PAD_KEY_ROW7__EIM_AD15               0x1a8 0x4b0 0x000 0x3 0x0 +#define MX6SL_PAD_KEY_ROW7__SD4_DATA5              0x1a8 0x4b0 0x870 0x4 0x1 +#define MX6SL_PAD_KEY_ROW7__GPIO4_IO07             0x1a8 0x4b0 0x000 0x5 0x0 +#define MX6SL_PAD_KEY_ROW7__SD1_CD_B               0x1a8 0x4b0 0x828 0x6 0x3 +#define MX6SL_PAD_LCD_CLK__LCD_CLK                 0x1ac 0x4b4 0x000 0x0 0x0 +#define MX6SL_PAD_LCD_CLK__SD4_DATA4               0x1ac 0x4b4 0x86c 0x1 0x2 +#define MX6SL_PAD_LCD_CLK__LCD_WR_RWN              0x1ac 0x4b4 0x000 0x2 0x0 +#define MX6SL_PAD_LCD_CLK__EIM_RW                  0x1ac 0x4b4 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_CLK__PWM4_OUT                0x1ac 0x4b4 0x000 0x4 0x0 +#define MX6SL_PAD_LCD_CLK__GPIO2_IO15              0x1ac 0x4b4 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT0__LCD_DATA00             0x1b0 0x4b8 0x778 0x0 0x1 +#define MX6SL_PAD_LCD_DAT0__ECSPI1_MOSI            0x1b0 0x4b8 0x688 0x1 0x1 +#define MX6SL_PAD_LCD_DAT0__USB_OTG2_ID            0x1b0 0x4b8 0x5e0 0x2 0x1 +#define MX6SL_PAD_LCD_DAT0__PWM1_OUT               0x1b0 0x4b8 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT0__UART5_DTR_B            0x1b0 0x4b8 0x000 0x4 0x0 +#define MX6SL_PAD_LCD_DAT0__GPIO2_IO20             0x1b0 0x4b8 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT0__ARM_TRACE00            0x1b0 0x4b8 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT0__SRC_BOOT_CFG00         0x1b0 0x4b8 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT1__LCD_DATA01             0x1b4 0x4bc 0x77c 0x0 0x1 +#define MX6SL_PAD_LCD_DAT1__ECSPI1_MISO            0x1b4 0x4bc 0x684 0x1 0x1 +#define MX6SL_PAD_LCD_DAT1__USB_OTG1_ID            0x1b4 0x4bc 0x5dc 0x2 0x2 +#define MX6SL_PAD_LCD_DAT1__PWM2_OUT               0x1b4 0x4bc 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT1__AUD4_RXFS              0x1b4 0x4bc 0x5f0 0x4 0x1 +#define MX6SL_PAD_LCD_DAT1__GPIO2_IO21             0x1b4 0x4bc 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT1__ARM_TRACE01            0x1b4 0x4bc 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT1__SRC_BOOT_CFG01         0x1b4 0x4bc 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT10__LCD_DATA10            0x1b8 0x4c0 0x7a0 0x0 0x1 +#define MX6SL_PAD_LCD_DAT10__KEY_COL1              0x1b8 0x4c0 0x738 0x1 0x1 +#define MX6SL_PAD_LCD_DAT10__CSI_DATA07            0x1b8 0x4c0 0x64c 0x2 0x1 +#define MX6SL_PAD_LCD_DAT10__EIM_DATA04            0x1b8 0x4c0 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT10__ECSPI2_MISO           0x1b8 0x4c0 0x6a0 0x4 0x2 +#define MX6SL_PAD_LCD_DAT10__GPIO2_IO30            0x1b8 0x4c0 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT10__ARM_TRACE10           0x1b8 0x4c0 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT10__SRC_BOOT_CFG10        0x1b8 0x4c0 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT11__LCD_DATA11            0x1bc 0x4c4 0x7a4 0x0 0x1 +#define MX6SL_PAD_LCD_DAT11__KEY_ROW1              0x1bc 0x4c4 0x758 0x1 0x1 +#define MX6SL_PAD_LCD_DAT11__CSI_DATA06            0x1bc 0x4c4 0x648 0x2 0x1 +#define MX6SL_PAD_LCD_DAT11__EIM_DATA05            0x1bc 0x4c4 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT11__ECSPI2_SS1            0x1bc 0x4c4 0x6ac 0x4 0x1 +#define MX6SL_PAD_LCD_DAT11__GPIO2_IO31            0x1bc 0x4c4 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT11__ARM_TRACE11           0x1bc 0x4c4 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT11__SRC_BOOT_CFG11        0x1bc 0x4c4 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT12__LCD_DATA12            0x1c0 0x4c8 0x7a8 0x0 0x1 +#define MX6SL_PAD_LCD_DAT12__KEY_COL2              0x1c0 0x4c8 0x73c 0x1 0x1 +#define MX6SL_PAD_LCD_DAT12__CSI_DATA05            0x1c0 0x4c8 0x644 0x2 0x1 +#define MX6SL_PAD_LCD_DAT12__EIM_DATA06            0x1c0 0x4c8 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT12__UART5_RTS_B           0x1c0 0x4c8 0x818 0x4 0x2 +#define MX6SL_PAD_LCD_DAT12__UART5_CTS_B           0x1c0 0x4c8 0x000 0x4 0x0 +#define MX6SL_PAD_LCD_DAT12__GPIO3_IO00            0x1c0 0x4c8 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT12__ARM_TRACE12           0x1c0 0x4c8 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT12__SRC_BOOT_CFG12        0x1c0 0x4c8 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT13__LCD_DATA13            0x1c4 0x4cc 0x7ac 0x0 0x1 +#define MX6SL_PAD_LCD_DAT13__KEY_ROW2              0x1c4 0x4cc 0x75c 0x1 0x1 +#define MX6SL_PAD_LCD_DAT13__CSI_DATA04            0x1c4 0x4cc 0x640 0x2 0x1 +#define MX6SL_PAD_LCD_DAT13__EIM_DATA07            0x1c4 0x4cc 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT13__UART5_CTS_B           0x1c4 0x4cc 0x000 0x4 0x0 +#define MX6SL_PAD_LCD_DAT13__UART5_RTS_B           0x1c4 0x4cc 0x818 0x4 0x3 +#define MX6SL_PAD_LCD_DAT13__GPIO3_IO01            0x1c4 0x4cc 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT13__ARM_TRACE13           0x1c4 0x4cc 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT13__SRC_BOOT_CFG13        0x1c4 0x4cc 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT14__LCD_DATA14            0x1c8 0x4d0 0x7b0 0x0 0x1 +#define MX6SL_PAD_LCD_DAT14__KEY_COL3              0x1c8 0x4d0 0x740 0x1 0x1 +#define MX6SL_PAD_LCD_DAT14__CSI_DATA03            0x1c8 0x4d0 0x63c 0x2 0x1 +#define MX6SL_PAD_LCD_DAT14__EIM_DATA08            0x1c8 0x4d0 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT14__UART5_RX_DATA         0x1c8 0x4d0 0x81c 0x4 0x2 +#define MX6SL_PAD_LCD_DAT14__UART5_TX_DATA         0x1c8 0x4d0 0x000 0x4 0x0 +#define MX6SL_PAD_LCD_DAT14__GPIO3_IO02            0x1c8 0x4d0 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT14__ARM_TRACE14           0x1c8 0x4d0 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT14__SRC_BOOT_CFG14        0x1c8 0x4d0 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT15__LCD_DATA15            0x1cc 0x4d4 0x7b4 0x0 0x1 +#define MX6SL_PAD_LCD_DAT15__KEY_ROW3              0x1cc 0x4d4 0x760 0x1 0x1 +#define MX6SL_PAD_LCD_DAT15__CSI_DATA02            0x1cc 0x4d4 0x638 0x2 0x1 +#define MX6SL_PAD_LCD_DAT15__EIM_DATA09            0x1cc 0x4d4 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT15__UART5_TX_DATA         0x1cc 0x4d4 0x000 0x4 0x0 +#define MX6SL_PAD_LCD_DAT15__UART5_RX_DATA         0x1cc 0x4d4 0x81c 0x4 0x3 +#define MX6SL_PAD_LCD_DAT15__GPIO3_IO03            0x1cc 0x4d4 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT15__ARM_TRACE15           0x1cc 0x4d4 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT15__SRC_BOOT_CFG15        0x1cc 0x4d4 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT16__LCD_DATA16            0x1d0 0x4d8 0x7b8 0x0 0x1 +#define MX6SL_PAD_LCD_DAT16__KEY_COL4              0x1d0 0x4d8 0x744 0x1 0x1 +#define MX6SL_PAD_LCD_DAT16__CSI_DATA01            0x1d0 0x4d8 0x634 0x2 0x1 +#define MX6SL_PAD_LCD_DAT16__EIM_DATA10            0x1d0 0x4d8 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT16__I2C2_SCL              0x1d0 0x4d8 0x724 0x4 0x3 +#define MX6SL_PAD_LCD_DAT16__GPIO3_IO04            0x1d0 0x4d8 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT16__ARM_TRACE16           0x1d0 0x4d8 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT16__SRC_BOOT_CFG24        0x1d0 0x4d8 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT17__LCD_DATA17            0x1d4 0x4dc 0x7bc 0x0 0x1 +#define MX6SL_PAD_LCD_DAT17__KEY_ROW4              0x1d4 0x4dc 0x764 0x1 0x1 +#define MX6SL_PAD_LCD_DAT17__CSI_DATA00            0x1d4 0x4dc 0x630 0x2 0x1 +#define MX6SL_PAD_LCD_DAT17__EIM_DATA11            0x1d4 0x4dc 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT17__I2C2_SDA              0x1d4 0x4dc 0x728 0x4 0x3 +#define MX6SL_PAD_LCD_DAT17__GPIO3_IO05            0x1d4 0x4dc 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT17__ARM_TRACE17           0x1d4 0x4dc 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT17__SRC_BOOT_CFG25        0x1d4 0x4dc 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT18__LCD_DATA18            0x1d8 0x4e0 0x7c0 0x0 0x1 +#define MX6SL_PAD_LCD_DAT18__KEY_COL5              0x1d8 0x4e0 0x748 0x1 0x1 +#define MX6SL_PAD_LCD_DAT18__CSI_DATA15            0x1d8 0x4e0 0x66c 0x2 0x0 +#define MX6SL_PAD_LCD_DAT18__EIM_DATA12            0x1d8 0x4e0 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT18__GPT_CAPTURE1          0x1d8 0x4e0 0x710 0x4 0x1 +#define MX6SL_PAD_LCD_DAT18__GPIO3_IO06            0x1d8 0x4e0 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT18__ARM_TRACE18           0x1d8 0x4e0 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT18__SRC_BOOT_CFG26        0x1d8 0x4e0 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT19__LCD_DATA19            0x1dc 0x4e4 0x7c4 0x0 0x1 +#define MX6SL_PAD_LCD_DAT19__KEY_ROW5              0x1dc 0x4e4 0x768 0x1 0x1 +#define MX6SL_PAD_LCD_DAT19__CSI_DATA14            0x1dc 0x4e4 0x668 0x2 0x0 +#define MX6SL_PAD_LCD_DAT19__EIM_DATA13            0x1dc 0x4e4 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT19__GPT_CAPTURE2          0x1dc 0x4e4 0x714 0x4 0x1 +#define MX6SL_PAD_LCD_DAT19__GPIO3_IO07            0x1dc 0x4e4 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT19__ARM_TRACE19           0x1dc 0x4e4 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT19__SRC_BOOT_CFG27        0x1dc 0x4e4 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT2__LCD_DATA02             0x1e0 0x4e8 0x780 0x0 0x1 +#define MX6SL_PAD_LCD_DAT2__ECSPI1_SS0             0x1e0 0x4e8 0x68c 0x1 0x1 +#define MX6SL_PAD_LCD_DAT2__EPIT2_OUT              0x1e0 0x4e8 0x000 0x2 0x0 +#define MX6SL_PAD_LCD_DAT2__PWM3_OUT               0x1e0 0x4e8 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT2__AUD4_RXC               0x1e0 0x4e8 0x5ec 0x4 0x1 +#define MX6SL_PAD_LCD_DAT2__GPIO2_IO22             0x1e0 0x4e8 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT2__ARM_TRACE02            0x1e0 0x4e8 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT2__SRC_BOOT_CFG02         0x1e0 0x4e8 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT20__LCD_DATA20            0x1e4 0x4ec 0x7c8 0x0 0x1 +#define MX6SL_PAD_LCD_DAT20__KEY_COL6              0x1e4 0x4ec 0x74c 0x1 0x1 +#define MX6SL_PAD_LCD_DAT20__CSI_DATA13            0x1e4 0x4ec 0x664 0x2 0x0 +#define MX6SL_PAD_LCD_DAT20__EIM_DATA14            0x1e4 0x4ec 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT20__GPT_COMPARE1          0x1e4 0x4ec 0x000 0x4 0x0 +#define MX6SL_PAD_LCD_DAT20__GPIO3_IO08            0x1e4 0x4ec 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT20__ARM_TRACE20           0x1e4 0x4ec 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT20__SRC_BOOT_CFG28        0x1e4 0x4ec 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT21__LCD_DATA21            0x1e8 0x4f0 0x7cc 0x0 0x1 +#define MX6SL_PAD_LCD_DAT21__KEY_ROW6              0x1e8 0x4f0 0x76c 0x1 0x1 +#define MX6SL_PAD_LCD_DAT21__CSI_DATA12            0x1e8 0x4f0 0x660 0x2 0x0 +#define MX6SL_PAD_LCD_DAT21__EIM_DATA15            0x1e8 0x4f0 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT21__GPT_COMPARE2          0x1e8 0x4f0 0x000 0x4 0x0 +#define MX6SL_PAD_LCD_DAT21__GPIO3_IO09            0x1e8 0x4f0 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT21__ARM_TRACE21           0x1e8 0x4f0 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT21__SRC_BOOT_CFG29        0x1e8 0x4f0 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT22__LCD_DATA22            0x1ec 0x4f4 0x7d0 0x0 0x1 +#define MX6SL_PAD_LCD_DAT22__KEY_COL7              0x1ec 0x4f4 0x750 0x1 0x1 +#define MX6SL_PAD_LCD_DAT22__CSI_DATA11            0x1ec 0x4f4 0x65c 0x2 0x1 +#define MX6SL_PAD_LCD_DAT22__EIM_EB3_B             0x1ec 0x4f4 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT22__GPT_COMPARE3          0x1ec 0x4f4 0x000 0x4 0x0 +#define MX6SL_PAD_LCD_DAT22__GPIO3_IO10            0x1ec 0x4f4 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT22__ARM_TRACE22           0x1ec 0x4f4 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT22__SRC_BOOT_CFG30        0x1ec 0x4f4 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT23__LCD_DATA23            0x1f0 0x4f8 0x7d4 0x0 0x1 +#define MX6SL_PAD_LCD_DAT23__KEY_ROW7              0x1f0 0x4f8 0x770 0x1 0x1 +#define MX6SL_PAD_LCD_DAT23__CSI_DATA10            0x1f0 0x4f8 0x658 0x2 0x1 +#define MX6SL_PAD_LCD_DAT23__EIM_EB2_B             0x1f0 0x4f8 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT23__GPT_CLKIN             0x1f0 0x4f8 0x718 0x4 0x1 +#define MX6SL_PAD_LCD_DAT23__GPIO3_IO11            0x1f0 0x4f8 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT23__ARM_TRACE23           0x1f0 0x4f8 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT23__SRC_BOOT_CFG31        0x1f0 0x4f8 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT3__LCD_DATA03             0x1f4 0x4fc 0x784 0x0 0x1 +#define MX6SL_PAD_LCD_DAT3__ECSPI1_SCLK            0x1f4 0x4fc 0x67c 0x1 0x1 +#define MX6SL_PAD_LCD_DAT3__UART5_DSR_B            0x1f4 0x4fc 0x000 0x2 0x0 +#define MX6SL_PAD_LCD_DAT3__PWM4_OUT               0x1f4 0x4fc 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT3__AUD4_RXD               0x1f4 0x4fc 0x5e4 0x4 0x1 +#define MX6SL_PAD_LCD_DAT3__GPIO2_IO23             0x1f4 0x4fc 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT3__ARM_TRACE03            0x1f4 0x4fc 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT3__SRC_BOOT_CFG03         0x1f4 0x4fc 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT4__LCD_DATA04             0x1f8 0x500 0x788 0x0 0x1 +#define MX6SL_PAD_LCD_DAT4__ECSPI1_SS1             0x1f8 0x500 0x690 0x1 0x1 +#define MX6SL_PAD_LCD_DAT4__CSI_VSYNC              0x1f8 0x500 0x678 0x2 0x2 +#define MX6SL_PAD_LCD_DAT4__WDOG2_RESET_B_DEB      0x1f8 0x500 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT4__AUD4_TXC               0x1f8 0x500 0x5f4 0x4 0x1 +#define MX6SL_PAD_LCD_DAT4__GPIO2_IO24             0x1f8 0x500 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT4__ARM_TRACE04            0x1f8 0x500 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT4__SRC_BOOT_CFG04         0x1f8 0x500 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT5__LCD_DATA05             0x1fc 0x504 0x78c 0x0 0x1 +#define MX6SL_PAD_LCD_DAT5__ECSPI1_SS2             0x1fc 0x504 0x694 0x1 0x1 +#define MX6SL_PAD_LCD_DAT5__CSI_HSYNC              0x1fc 0x504 0x670 0x2 0x2 +#define MX6SL_PAD_LCD_DAT5__EIM_CS3_B              0x1fc 0x504 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT5__AUD4_TXFS              0x1fc 0x504 0x5f8 0x4 0x1 +#define MX6SL_PAD_LCD_DAT5__GPIO2_IO25             0x1fc 0x504 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT5__ARM_TRACE05            0x1fc 0x504 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT5__SRC_BOOT_CFG05         0x1fc 0x504 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT6__LCD_DATA06             0x200 0x508 0x790 0x0 0x1 +#define MX6SL_PAD_LCD_DAT6__ECSPI1_SS3             0x200 0x508 0x698 0x1 0x1 +#define MX6SL_PAD_LCD_DAT6__CSI_PIXCLK             0x200 0x508 0x674 0x2 0x2 +#define MX6SL_PAD_LCD_DAT6__EIM_DATA00             0x200 0x508 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT6__AUD4_TXD               0x200 0x508 0x5e8 0x4 0x1 +#define MX6SL_PAD_LCD_DAT6__GPIO2_IO26             0x200 0x508 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT6__ARM_TRACE06            0x200 0x508 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT6__SRC_BOOT_CFG06         0x200 0x508 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT7__LCD_DATA07             0x204 0x50c 0x794 0x0 0x1 +#define MX6SL_PAD_LCD_DAT7__ECSPI1_RDY             0x204 0x50c 0x680 0x1 0x1 +#define MX6SL_PAD_LCD_DAT7__CSI_MCLK               0x204 0x50c 0x000 0x2 0x0 +#define MX6SL_PAD_LCD_DAT7__EIM_DATA01             0x204 0x50c 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT7__AUDIO_CLK_OUT          0x204 0x50c 0x000 0x4 0x0 +#define MX6SL_PAD_LCD_DAT7__GPIO2_IO27             0x204 0x50c 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT7__ARM_TRACE07            0x204 0x50c 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT7__SRC_BOOT_CFG07         0x204 0x50c 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT8__LCD_DATA08             0x208 0x510 0x798 0x0 0x1 +#define MX6SL_PAD_LCD_DAT8__KEY_COL0               0x208 0x510 0x734 0x1 0x1 +#define MX6SL_PAD_LCD_DAT8__CSI_DATA09             0x208 0x510 0x654 0x2 0x1 +#define MX6SL_PAD_LCD_DAT8__EIM_DATA02             0x208 0x510 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT8__ECSPI2_SCLK            0x208 0x510 0x69c 0x4 0x2 +#define MX6SL_PAD_LCD_DAT8__GPIO2_IO28             0x208 0x510 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT8__ARM_TRACE08            0x208 0x510 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT8__SRC_BOOT_CFG08         0x208 0x510 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_DAT9__LCD_DATA09             0x20c 0x514 0x79c 0x0 0x1 +#define MX6SL_PAD_LCD_DAT9__KEY_ROW0               0x20c 0x514 0x754 0x1 0x1 +#define MX6SL_PAD_LCD_DAT9__CSI_DATA08             0x20c 0x514 0x650 0x2 0x1 +#define MX6SL_PAD_LCD_DAT9__EIM_DATA03             0x20c 0x514 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_DAT9__ECSPI2_MOSI            0x20c 0x514 0x6a4 0x4 0x2 +#define MX6SL_PAD_LCD_DAT9__GPIO2_IO29             0x20c 0x514 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_DAT9__ARM_TRACE09            0x20c 0x514 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_DAT9__SRC_BOOT_CFG09         0x20c 0x514 0x000 0x7 0x0 +#define MX6SL_PAD_LCD_ENABLE__LCD_ENABLE           0x210 0x518 0x000 0x0 0x0 +#define MX6SL_PAD_LCD_ENABLE__SD4_DATA5            0x210 0x518 0x870 0x1 0x2 +#define MX6SL_PAD_LCD_ENABLE__LCD_RD_E             0x210 0x518 0x000 0x2 0x0 +#define MX6SL_PAD_LCD_ENABLE__EIM_OE_B             0x210 0x518 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_ENABLE__UART2_RX_DATA        0x210 0x518 0x804 0x4 0x2 +#define MX6SL_PAD_LCD_ENABLE__UART2_TX_DATA        0x210 0x518 0x000 0x4 0x0 +#define MX6SL_PAD_LCD_ENABLE__GPIO2_IO16           0x210 0x518 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_HSYNC__LCD_HSYNC             0x214 0x51c 0x774 0x0 0x0 +#define MX6SL_PAD_LCD_HSYNC__SD4_DATA6             0x214 0x51c 0x874 0x1 0x2 +#define MX6SL_PAD_LCD_HSYNC__LCD_CS                0x214 0x51c 0x000 0x2 0x0 +#define MX6SL_PAD_LCD_HSYNC__EIM_CS0_B             0x214 0x51c 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_HSYNC__UART2_TX_DATA         0x214 0x51c 0x000 0x4 0x0 +#define MX6SL_PAD_LCD_HSYNC__UART2_RX_DATA         0x214 0x51c 0x804 0x4 0x3 +#define MX6SL_PAD_LCD_HSYNC__GPIO2_IO17            0x214 0x51c 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_HSYNC__ARM_TRACE_CLK         0x214 0x51c 0x000 0x6 0x0 +#define MX6SL_PAD_LCD_RESET__LCD_RESET             0x218 0x520 0x000 0x0 0x0 +#define MX6SL_PAD_LCD_RESET__EIM_DTACK_B           0x218 0x520 0x880 0x1 0x1 +#define MX6SL_PAD_LCD_RESET__LCD_BUSY              0x218 0x520 0x774 0x2 0x1 +#define MX6SL_PAD_LCD_RESET__EIM_WAIT_B            0x218 0x520 0x884 0x3 0x1 +#define MX6SL_PAD_LCD_RESET__UART2_CTS_B           0x218 0x520 0x000 0x4 0x0 +#define MX6SL_PAD_LCD_RESET__UART2_RTS_B           0x218 0x520 0x800 0x4 0x2 +#define MX6SL_PAD_LCD_RESET__GPIO2_IO19            0x218 0x520 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_RESET__CCM_PMIC_READY        0x218 0x520 0x62c 0x6 0x1 +#define MX6SL_PAD_LCD_VSYNC__LCD_VSYNC             0x21c 0x524 0x000 0x0 0x0 +#define MX6SL_PAD_LCD_VSYNC__SD4_DATA7             0x21c 0x524 0x878 0x1 0x2 +#define MX6SL_PAD_LCD_VSYNC__LCD_RS                0x21c 0x524 0x000 0x2 0x0 +#define MX6SL_PAD_LCD_VSYNC__EIM_CS1_B             0x21c 0x524 0x000 0x3 0x0 +#define MX6SL_PAD_LCD_VSYNC__UART2_RTS_B           0x21c 0x524 0x800 0x4 0x3 +#define MX6SL_PAD_LCD_VSYNC__UART2_CTS_B           0x21c 0x524 0x000 0x4 0x0 +#define MX6SL_PAD_LCD_VSYNC__GPIO2_IO18            0x21c 0x524 0x000 0x5 0x0 +#define MX6SL_PAD_LCD_VSYNC__ARM_TRACE_CTL         0x21c 0x524 0x000 0x6 0x0 +#define MX6SL_PAD_PWM1__PWM1_OUT                   0x220 0x528 0x000 0x0 0x0 +#define MX6SL_PAD_PWM1__CCM_CLKO                   0x220 0x528 0x000 0x1 0x0 +#define MX6SL_PAD_PWM1__AUDIO_CLK_OUT              0x220 0x528 0x000 0x2 0x0 +#define MX6SL_PAD_PWM1__FEC_REF_OUT                0x220 0x528 0x000 0x3 0x0 +#define MX6SL_PAD_PWM1__CSI_MCLK                   0x220 0x528 0x000 0x4 0x0 +#define MX6SL_PAD_PWM1__GPIO3_IO23                 0x220 0x528 0x000 0x5 0x0 +#define MX6SL_PAD_PWM1__EPIT1_OUT                  0x220 0x528 0x000 0x6 0x0 +#define MX6SL_PAD_REF_CLK_24M__XTALOSC_REF_CLK_24M 0x224 0x52c 0x000 0x0 0x0 +#define MX6SL_PAD_REF_CLK_24M__I2C3_SCL            0x224 0x52c 0x72c 0x1 0x2 +#define MX6SL_PAD_REF_CLK_24M__PWM3_OUT            0x224 0x52c 0x000 0x2 0x0 +#define MX6SL_PAD_REF_CLK_24M__USB_OTG2_ID         0x224 0x52c 0x5e0 0x3 0x2 +#define MX6SL_PAD_REF_CLK_24M__CCM_PMIC_READY      0x224 0x52c 0x62c 0x4 0x2 +#define MX6SL_PAD_REF_CLK_24M__GPIO3_IO21          0x224 0x52c 0x000 0x5 0x0 +#define MX6SL_PAD_REF_CLK_24M__SD3_WP              0x224 0x52c 0x84c 0x6 0x3 +#define MX6SL_PAD_REF_CLK_32K__XTALOSC_REF_CLK_32K 0x228 0x530 0x000 0x0 0x0 +#define MX6SL_PAD_REF_CLK_32K__I2C3_SDA            0x228 0x530 0x730 0x1 0x2 +#define MX6SL_PAD_REF_CLK_32K__PWM4_OUT            0x228 0x530 0x000 0x2 0x0 +#define MX6SL_PAD_REF_CLK_32K__USB_OTG1_ID         0x228 0x530 0x5dc 0x3 0x3 +#define MX6SL_PAD_REF_CLK_32K__SD1_LCTL            0x228 0x530 0x000 0x4 0x0 +#define MX6SL_PAD_REF_CLK_32K__GPIO3_IO22          0x228 0x530 0x000 0x5 0x0 +#define MX6SL_PAD_REF_CLK_32K__SD3_CD_B            0x228 0x530 0x838 0x6 0x3 +#define MX6SL_PAD_SD1_CLK__SD1_CLK                 0x22c 0x534 0x000 0x0 0x0 +#define MX6SL_PAD_SD1_CLK__FEC_MDIO                0x22c 0x534 0x6f4 0x1 0x2 +#define MX6SL_PAD_SD1_CLK__KEY_COL0                0x22c 0x534 0x734 0x2 0x2 +#define MX6SL_PAD_SD1_CLK__EPDC_SDCE4              0x22c 0x534 0x000 0x3 0x0 +#define MX6SL_PAD_SD1_CLK__GPIO5_IO15              0x22c 0x534 0x000 0x5 0x0 +#define MX6SL_PAD_SD1_CMD__SD1_CMD                 0x230 0x538 0x000 0x0 0x0 +#define MX6SL_PAD_SD1_CMD__FEC_TX_CLK              0x230 0x538 0x70c 0x1 0x2 +#define MX6SL_PAD_SD1_CMD__KEY_ROW0                0x230 0x538 0x754 0x2 0x2 +#define MX6SL_PAD_SD1_CMD__EPDC_SDCE5              0x230 0x538 0x000 0x3 0x0 +#define MX6SL_PAD_SD1_CMD__GPIO5_IO14              0x230 0x538 0x000 0x5 0x0 +#define MX6SL_PAD_SD1_DAT0__SD1_DATA0              0x234 0x53c 0x000 0x0 0x0 +#define MX6SL_PAD_SD1_DAT0__FEC_RX_ER              0x234 0x53c 0x708 0x1 0x2 +#define MX6SL_PAD_SD1_DAT0__KEY_COL1               0x234 0x53c 0x738 0x2 0x2 +#define MX6SL_PAD_SD1_DAT0__EPDC_SDCE6             0x234 0x53c 0x000 0x3 0x0 +#define MX6SL_PAD_SD1_DAT0__GPIO5_IO11             0x234 0x53c 0x000 0x5 0x0 +#define MX6SL_PAD_SD1_DAT1__SD1_DATA1              0x238 0x540 0x000 0x0 0x0 +#define MX6SL_PAD_SD1_DAT1__FEC_RX_DV              0x238 0x540 0x704 0x1 0x2 +#define MX6SL_PAD_SD1_DAT1__KEY_ROW1               0x238 0x540 0x758 0x2 0x2 +#define MX6SL_PAD_SD1_DAT1__EPDC_SDCE7             0x238 0x540 0x000 0x3 0x0 +#define MX6SL_PAD_SD1_DAT1__GPIO5_IO08             0x238 0x540 0x000 0x5 0x0 +#define MX6SL_PAD_SD1_DAT2__SD1_DATA2              0x23c 0x544 0x000 0x0 0x0 +#define MX6SL_PAD_SD1_DAT2__FEC_RX_DATA1           0x23c 0x544 0x6fc 0x1 0x2 +#define MX6SL_PAD_SD1_DAT2__KEY_COL2               0x23c 0x544 0x73c 0x2 0x2 +#define MX6SL_PAD_SD1_DAT2__EPDC_SDCE8             0x23c 0x544 0x000 0x3 0x0 +#define MX6SL_PAD_SD1_DAT2__GPIO5_IO13             0x23c 0x544 0x000 0x5 0x0 +#define MX6SL_PAD_SD1_DAT3__SD1_DATA3              0x240 0x548 0x000 0x0 0x0 +#define MX6SL_PAD_SD1_DAT3__FEC_TX_DATA0           0x240 0x548 0x000 0x1 0x0 +#define MX6SL_PAD_SD1_DAT3__KEY_ROW2               0x240 0x548 0x75c 0x2 0x2 +#define MX6SL_PAD_SD1_DAT3__EPDC_SDCE9             0x240 0x548 0x000 0x3 0x0 +#define MX6SL_PAD_SD1_DAT3__GPIO5_IO06             0x240 0x548 0x000 0x5 0x0 +#define MX6SL_PAD_SD1_DAT4__SD1_DATA4              0x244 0x54c 0x000 0x0 0x0 +#define MX6SL_PAD_SD1_DAT4__FEC_MDC                0x244 0x54c 0x000 0x1 0x0 +#define MX6SL_PAD_SD1_DAT4__KEY_COL3               0x244 0x54c 0x740 0x2 0x2 +#define MX6SL_PAD_SD1_DAT4__EPDC_SDCLK_N           0x244 0x54c 0x000 0x3 0x0 +#define MX6SL_PAD_SD1_DAT4__UART4_RX_DATA          0x244 0x54c 0x814 0x4 0x4 +#define MX6SL_PAD_SD1_DAT4__UART4_TX_DATA          0x244 0x54c 0x000 0x4 0x0 +#define MX6SL_PAD_SD1_DAT4__GPIO5_IO12             0x244 0x54c 0x000 0x5 0x0 +#define MX6SL_PAD_SD1_DAT5__SD1_DATA5              0x248 0x550 0x000 0x0 0x0 +#define MX6SL_PAD_SD1_DAT5__FEC_RX_DATA0           0x248 0x550 0x6f8 0x1 0x2 +#define MX6SL_PAD_SD1_DAT5__KEY_ROW3               0x248 0x550 0x760 0x2 0x2 +#define MX6SL_PAD_SD1_DAT5__EPDC_SDOED             0x248 0x550 0x000 0x3 0x0 +#define MX6SL_PAD_SD1_DAT5__UART4_TX_DATA          0x248 0x550 0x000 0x4 0x0 +#define MX6SL_PAD_SD1_DAT5__UART4_RX_DATA          0x248 0x550 0x814 0x4 0x5 +#define MX6SL_PAD_SD1_DAT5__GPIO5_IO09             0x248 0x550 0x000 0x5 0x0 +#define MX6SL_PAD_SD1_DAT6__SD1_DATA6              0x24c 0x554 0x000 0x0 0x0 +#define MX6SL_PAD_SD1_DAT6__FEC_TX_EN              0x24c 0x554 0x000 0x1 0x0 +#define MX6SL_PAD_SD1_DAT6__KEY_COL4               0x24c 0x554 0x744 0x2 0x2 +#define MX6SL_PAD_SD1_DAT6__EPDC_SDOEZ             0x24c 0x554 0x000 0x3 0x0 +#define MX6SL_PAD_SD1_DAT6__UART4_RTS_B            0x24c 0x554 0x810 0x4 0x4 +#define MX6SL_PAD_SD1_DAT6__UART4_CTS_B            0x24c 0x554 0x000 0x4 0x0 +#define MX6SL_PAD_SD1_DAT6__GPIO5_IO07             0x24c 0x554 0x000 0x5 0x0 +#define MX6SL_PAD_SD1_DAT7__SD1_DATA7              0x250 0x558 0x000 0x0 0x0 +#define MX6SL_PAD_SD1_DAT7__FEC_TX_DATA1           0x250 0x558 0x000 0x1 0x0 +#define MX6SL_PAD_SD1_DAT7__KEY_ROW4               0x250 0x558 0x764 0x2 0x2 +#define MX6SL_PAD_SD1_DAT7__CCM_PMIC_READY         0x250 0x558 0x62c 0x3 0x3 +#define MX6SL_PAD_SD1_DAT7__UART4_CTS_B            0x250 0x558 0x000 0x4 0x0 +#define MX6SL_PAD_SD1_DAT7__UART4_RTS_B            0x250 0x558 0x810 0x4 0x5 +#define MX6SL_PAD_SD1_DAT7__GPIO5_IO10             0x250 0x558 0x000 0x5 0x0 +#define MX6SL_PAD_SD2_CLK__SD2_CLK                 0x254 0x55c 0x000 0x0 0x0 +#define MX6SL_PAD_SD2_CLK__AUD4_RXFS               0x254 0x55c 0x5f0 0x1 0x2 +#define MX6SL_PAD_SD2_CLK__ECSPI3_SCLK             0x254 0x55c 0x6b0 0x2 0x2 +#define MX6SL_PAD_SD2_CLK__CSI_DATA00              0x254 0x55c 0x630 0x3 0x2 +#define MX6SL_PAD_SD2_CLK__GPIO5_IO05              0x254 0x55c 0x000 0x5 0x0 +#define MX6SL_PAD_SD2_CMD__SD2_CMD                 0x258 0x560 0x000 0x0 0x0 +#define MX6SL_PAD_SD2_CMD__AUD4_RXC                0x258 0x560 0x5ec 0x1 0x2 +#define MX6SL_PAD_SD2_CMD__ECSPI3_SS0              0x258 0x560 0x6c0 0x2 0x2 +#define MX6SL_PAD_SD2_CMD__CSI_DATA01              0x258 0x560 0x634 0x3 0x2 +#define MX6SL_PAD_SD2_CMD__EPIT1_OUT               0x258 0x560 0x000 0x4 0x0 +#define MX6SL_PAD_SD2_CMD__GPIO5_IO04              0x258 0x560 0x000 0x5 0x0 +#define MX6SL_PAD_SD2_DAT0__SD2_DATA0              0x25c 0x564 0x000 0x0 0x0 +#define MX6SL_PAD_SD2_DAT0__AUD4_RXD               0x25c 0x564 0x5e4 0x1 0x2 +#define MX6SL_PAD_SD2_DAT0__ECSPI3_MOSI            0x25c 0x564 0x6bc 0x2 0x2 +#define MX6SL_PAD_SD2_DAT0__CSI_DATA02             0x25c 0x564 0x638 0x3 0x2 +#define MX6SL_PAD_SD2_DAT0__UART5_RTS_B            0x25c 0x564 0x818 0x4 0x4 +#define MX6SL_PAD_SD2_DAT0__UART5_CTS_B            0x25c 0x564 0x000 0x4 0x0 +#define MX6SL_PAD_SD2_DAT0__GPIO5_IO01             0x25c 0x564 0x000 0x5 0x0 +#define MX6SL_PAD_SD2_DAT1__SD2_DATA1              0x260 0x568 0x000 0x0 0x0 +#define MX6SL_PAD_SD2_DAT1__AUD4_TXC               0x260 0x568 0x5f4 0x1 0x2 +#define MX6SL_PAD_SD2_DAT1__ECSPI3_MISO            0x260 0x568 0x6b8 0x2 0x2 +#define MX6SL_PAD_SD2_DAT1__CSI_DATA03             0x260 0x568 0x63c 0x3 0x2 +#define MX6SL_PAD_SD2_DAT1__UART5_CTS_B            0x260 0x568 0x000 0x4 0x0 +#define MX6SL_PAD_SD2_DAT1__UART5_RTS_B            0x260 0x568 0x818 0x4 0x5 +#define MX6SL_PAD_SD2_DAT1__GPIO4_IO30             0x260 0x568 0x000 0x5 0x0 +#define MX6SL_PAD_SD2_DAT2__SD2_DATA2              0x264 0x56c 0x000 0x0 0x0 +#define MX6SL_PAD_SD2_DAT2__AUD4_TXFS              0x264 0x56c 0x5f8 0x1 0x2 +#define MX6SL_PAD_SD2_DAT2__FEC_COL                0x264 0x56c 0x6f0 0x2 0x1 +#define MX6SL_PAD_SD2_DAT2__CSI_DATA04             0x264 0x56c 0x640 0x3 0x2 +#define MX6SL_PAD_SD2_DAT2__UART5_RX_DATA          0x264 0x56c 0x81c 0x4 0x4 +#define MX6SL_PAD_SD2_DAT2__UART5_TX_DATA          0x264 0x56c 0x000 0x4 0x0 +#define MX6SL_PAD_SD2_DAT2__GPIO5_IO03             0x264 0x56c 0x000 0x5 0x0 +#define MX6SL_PAD_SD2_DAT3__SD2_DATA3              0x268 0x570 0x000 0x0 0x0 +#define MX6SL_PAD_SD2_DAT3__AUD4_TXD               0x268 0x570 0x5e8 0x1 0x2 +#define MX6SL_PAD_SD2_DAT3__FEC_RX_CLK             0x268 0x570 0x700 0x2 0x1 +#define MX6SL_PAD_SD2_DAT3__CSI_DATA05             0x268 0x570 0x644 0x3 0x2 +#define MX6SL_PAD_SD2_DAT3__UART5_TX_DATA          0x268 0x570 0x000 0x4 0x0 +#define MX6SL_PAD_SD2_DAT3__UART5_RX_DATA          0x268 0x570 0x81c 0x4 0x5 +#define MX6SL_PAD_SD2_DAT3__GPIO4_IO28             0x268 0x570 0x000 0x5 0x0 +#define MX6SL_PAD_SD2_DAT4__SD2_DATA4              0x26c 0x574 0x000 0x0 0x0 +#define MX6SL_PAD_SD2_DAT4__SD3_DATA4              0x26c 0x574 0x83c 0x1 0x1 +#define MX6SL_PAD_SD2_DAT4__UART2_RX_DATA          0x26c 0x574 0x804 0x2 0x4 +#define MX6SL_PAD_SD2_DAT4__UART2_TX_DATA          0x26c 0x574 0x000 0x2 0x0 +#define MX6SL_PAD_SD2_DAT4__CSI_DATA06             0x26c 0x574 0x648 0x3 0x2 +#define MX6SL_PAD_SD2_DAT4__SPDIF_OUT              0x26c 0x574 0x000 0x4 0x0 +#define MX6SL_PAD_SD2_DAT4__GPIO5_IO02             0x26c 0x574 0x000 0x5 0x0 +#define MX6SL_PAD_SD2_DAT5__SD2_DATA5              0x270 0x578 0x000 0x0 0x0 +#define MX6SL_PAD_SD2_DAT5__SD3_DATA5              0x270 0x578 0x840 0x1 0x1 +#define MX6SL_PAD_SD2_DAT5__UART2_TX_DATA          0x270 0x578 0x000 0x2 0x0 +#define MX6SL_PAD_SD2_DAT5__UART2_RX_DATA          0x270 0x578 0x804 0x2 0x5 +#define MX6SL_PAD_SD2_DAT5__CSI_DATA07             0x270 0x578 0x64c 0x3 0x2 +#define MX6SL_PAD_SD2_DAT5__SPDIF_IN               0x270 0x578 0x7f0 0x4 0x2 +#define MX6SL_PAD_SD2_DAT5__GPIO4_IO31             0x270 0x578 0x000 0x5 0x0 +#define MX6SL_PAD_SD2_DAT6__SD2_DATA6              0x274 0x57c 0x000 0x0 0x0 +#define MX6SL_PAD_SD2_DAT6__SD3_DATA6              0x274 0x57c 0x844 0x1 0x1 +#define MX6SL_PAD_SD2_DAT6__UART2_RTS_B            0x274 0x57c 0x800 0x2 0x4 +#define MX6SL_PAD_SD2_DAT6__UART2_CTS_B            0x274 0x57c 0x000 0x2 0x0 +#define MX6SL_PAD_SD2_DAT6__CSI_DATA08             0x274 0x57c 0x650 0x3 0x2 +#define MX6SL_PAD_SD2_DAT6__SD2_WP                 0x274 0x57c 0x834 0x4 0x2 +#define MX6SL_PAD_SD2_DAT6__GPIO4_IO29             0x274 0x57c 0x000 0x5 0x0 +#define MX6SL_PAD_SD2_DAT7__SD2_DATA7              0x278 0x580 0x000 0x0 0x0 +#define MX6SL_PAD_SD2_DAT7__SD3_DATA7              0x278 0x580 0x848 0x1 0x1 +#define MX6SL_PAD_SD2_DAT7__UART2_CTS_B            0x278 0x580 0x000 0x2 0x0 +#define MX6SL_PAD_SD2_DAT7__UART2_RTS_B            0x278 0x580 0x800 0x2 0x5 +#define MX6SL_PAD_SD2_DAT7__CSI_DATA09             0x278 0x580 0x654 0x3 0x2 +#define MX6SL_PAD_SD2_DAT7__SD2_CD_B               0x278 0x580 0x830 0x4 0x2 +#define MX6SL_PAD_SD2_DAT7__GPIO5_IO00             0x278 0x580 0x000 0x5 0x0 +#define MX6SL_PAD_SD2_RST__SD2_RESET               0x27c 0x584 0x000 0x0 0x0 +#define MX6SL_PAD_SD2_RST__FEC_REF_OUT             0x27c 0x584 0x000 0x1 0x0 +#define MX6SL_PAD_SD2_RST__WDOG2_B                 0x27c 0x584 0x000 0x2 0x0 +#define MX6SL_PAD_SD2_RST__SPDIF_OUT               0x27c 0x584 0x000 0x3 0x0 +#define MX6SL_PAD_SD2_RST__CSI_MCLK                0x27c 0x584 0x000 0x4 0x0 +#define MX6SL_PAD_SD2_RST__GPIO4_IO27              0x27c 0x584 0x000 0x5 0x0 +#define MX6SL_PAD_SD3_CLK__SD3_CLK                 0x280 0x588 0x000 0x0 0x0 +#define MX6SL_PAD_SD3_CLK__AUD5_RXFS               0x280 0x588 0x608 0x1 0x1 +#define MX6SL_PAD_SD3_CLK__KEY_COL5                0x280 0x588 0x748 0x2 0x2 +#define MX6SL_PAD_SD3_CLK__CSI_DATA10              0x280 0x588 0x658 0x3 0x2 +#define MX6SL_PAD_SD3_CLK__WDOG1_RESET_B_DEB       0x280 0x588 0x000 0x4 0x0 +#define MX6SL_PAD_SD3_CLK__GPIO5_IO18              0x280 0x588 0x000 0x5 0x0 +#define MX6SL_PAD_SD3_CLK__USB_OTG1_PWR            0x280 0x588 0x000 0x6 0x0 +#define MX6SL_PAD_SD3_CMD__SD3_CMD                 0x284 0x58c 0x000 0x0 0x0 +#define MX6SL_PAD_SD3_CMD__AUD5_RXC                0x284 0x58c 0x604 0x1 0x1 +#define MX6SL_PAD_SD3_CMD__KEY_ROW5                0x284 0x58c 0x768 0x2 0x2 +#define MX6SL_PAD_SD3_CMD__CSI_DATA11              0x284 0x58c 0x65c 0x3 0x2 +#define MX6SL_PAD_SD3_CMD__USB_OTG2_ID             0x284 0x58c 0x5e0 0x4 0x3 +#define MX6SL_PAD_SD3_CMD__GPIO5_IO21              0x284 0x58c 0x000 0x5 0x0 +#define MX6SL_PAD_SD3_CMD__USB_OTG2_PWR            0x284 0x58c 0x000 0x6 0x0 +#define MX6SL_PAD_SD3_DAT0__SD3_DATA0              0x288 0x590 0x000 0x0 0x0 +#define MX6SL_PAD_SD3_DAT0__AUD5_RXD               0x288 0x590 0x5fc 0x1 0x1 +#define MX6SL_PAD_SD3_DAT0__KEY_COL6               0x288 0x590 0x74c 0x2 0x2 +#define MX6SL_PAD_SD3_DAT0__CSI_DATA12             0x288 0x590 0x660 0x3 0x1 +#define MX6SL_PAD_SD3_DAT0__USB_OTG1_ID            0x288 0x590 0x5dc 0x4 0x4 +#define MX6SL_PAD_SD3_DAT0__GPIO5_IO19             0x288 0x590 0x000 0x5 0x0 +#define MX6SL_PAD_SD3_DAT1__SD3_DATA1              0x28c 0x594 0x000 0x0 0x0 +#define MX6SL_PAD_SD3_DAT1__AUD5_TXC               0x28c 0x594 0x60c 0x1 0x1 +#define MX6SL_PAD_SD3_DAT1__KEY_ROW6               0x28c 0x594 0x76c 0x2 0x2 +#define MX6SL_PAD_SD3_DAT1__CSI_DATA13             0x28c 0x594 0x664 0x3 0x1 +#define MX6SL_PAD_SD3_DAT1__SD1_VSELECT            0x28c 0x594 0x000 0x4 0x0 +#define MX6SL_PAD_SD3_DAT1__GPIO5_IO20             0x28c 0x594 0x000 0x5 0x0 +#define MX6SL_PAD_SD3_DAT1__JTAG_DE_B              0x28c 0x594 0x000 0x6 0x0 +#define MX6SL_PAD_SD3_DAT2__SD3_DATA2              0x290 0x598 0x000 0x0 0x0 +#define MX6SL_PAD_SD3_DAT2__AUD5_TXFS              0x290 0x598 0x610 0x1 0x1 +#define MX6SL_PAD_SD3_DAT2__KEY_COL7               0x290 0x598 0x750 0x2 0x2 +#define MX6SL_PAD_SD3_DAT2__CSI_DATA14             0x290 0x598 0x668 0x3 0x1 +#define MX6SL_PAD_SD3_DAT2__EPIT1_OUT              0x290 0x598 0x000 0x4 0x0 +#define MX6SL_PAD_SD3_DAT2__GPIO5_IO16             0x290 0x598 0x000 0x5 0x0 +#define MX6SL_PAD_SD3_DAT2__USB_OTG2_OC            0x290 0x598 0x820 0x6 0x3 +#define MX6SL_PAD_SD3_DAT3__SD3_DATA3              0x294 0x59c 0x000 0x0 0x0 +#define MX6SL_PAD_SD3_DAT3__AUD5_TXD               0x294 0x59c 0x600 0x1 0x1 +#define MX6SL_PAD_SD3_DAT3__KEY_ROW7               0x294 0x59c 0x770 0x2 0x2 +#define MX6SL_PAD_SD3_DAT3__CSI_DATA15             0x294 0x59c 0x66c 0x3 0x1 +#define MX6SL_PAD_SD3_DAT3__EPIT2_OUT              0x294 0x59c 0x000 0x4 0x0 +#define MX6SL_PAD_SD3_DAT3__GPIO5_IO17             0x294 0x59c 0x000 0x5 0x0 +#define MX6SL_PAD_SD3_DAT3__USB_OTG1_OC            0x294 0x59c 0x824 0x6 0x2 +#define MX6SL_PAD_UART1_RXD__UART1_RX_DATA         0x298 0x5a0 0x7fc 0x0 0x0 +#define MX6SL_PAD_UART1_RXD__UART1_TX_DATA         0x298 0x5a0 0x000 0x0 0x0 +#define MX6SL_PAD_UART1_RXD__PWM1_OUT              0x298 0x5a0 0x000 0x1 0x0 +#define MX6SL_PAD_UART1_RXD__UART4_RX_DATA         0x298 0x5a0 0x814 0x2 0x6 +#define MX6SL_PAD_UART1_RXD__UART4_TX_DATA         0x298 0x5a0 0x000 0x2 0x0 +#define MX6SL_PAD_UART1_RXD__FEC_COL               0x298 0x5a0 0x6f0 0x3 0x2 +#define MX6SL_PAD_UART1_RXD__UART5_RX_DATA         0x298 0x5a0 0x81c 0x4 0x6 +#define MX6SL_PAD_UART1_RXD__UART5_TX_DATA         0x298 0x5a0 0x000 0x4 0x0 +#define MX6SL_PAD_UART1_RXD__GPIO3_IO16            0x298 0x5a0 0x000 0x5 0x0 +#define MX6SL_PAD_UART1_TXD__UART1_TX_DATA         0x29c 0x5a4 0x000 0x0 0x0 +#define MX6SL_PAD_UART1_TXD__UART1_RX_DATA         0x29c 0x5a4 0x7fc 0x0 0x1 +#define MX6SL_PAD_UART1_TXD__PWM2_OUT              0x29c 0x5a4 0x000 0x1 0x0 +#define MX6SL_PAD_UART1_TXD__UART4_TX_DATA         0x29c 0x5a4 0x000 0x2 0x0 +#define MX6SL_PAD_UART1_TXD__UART4_RX_DATA         0x29c 0x5a4 0x814 0x2 0x7 +#define MX6SL_PAD_UART1_TXD__FEC_RX_CLK            0x29c 0x5a4 0x700 0x3 0x2 +#define MX6SL_PAD_UART1_TXD__UART5_TX_DATA         0x29c 0x5a4 0x000 0x4 0x0 +#define MX6SL_PAD_UART1_TXD__UART5_RX_DATA         0x29c 0x5a4 0x81c 0x4 0x7 +#define MX6SL_PAD_UART1_TXD__GPIO3_IO17            0x29c 0x5a4 0x000 0x5 0x0 +#define MX6SL_PAD_UART1_TXD__UART5_DCD_B           0x29c 0x5a4 0x000 0x7 0x0 +#define MX6SL_PAD_WDOG_B__WDOG1_B                  0x2a0 0x5a8 0x000 0x0 0x0 +#define MX6SL_PAD_WDOG_B__WDOG1_RESET_B_DEB        0x2a0 0x5a8 0x000 0x1 0x0 +#define MX6SL_PAD_WDOG_B__UART5_RI_B               0x2a0 0x5a8 0x000 0x2 0x0 +#define MX6SL_PAD_WDOG_B__GPIO3_IO18               0x2a0 0x5a8 0x000 0x5 0x0 + +#endif /* __DTS_IMX6SL_PINFUNC_H */ diff --git a/arch/arm/boot/dts/include/dt-bindings b/arch/arm/boot/dts/include/dt-bindings new file mode 120000 index 00000000000..08c00e4972f --- /dev/null +++ b/arch/arm/boot/dts/include/dt-bindings @@ -0,0 +1 @@ +../../../../../include/dt-bindings
\ No newline at end of file diff --git a/arch/arm/boot/dts/kirkwood-6282.dtsi b/arch/arm/boot/dts/kirkwood-6282.dtsi index 192cf76fbf9..23991e45bc5 100644 --- a/arch/arm/boot/dts/kirkwood-6282.dtsi +++ b/arch/arm/boot/dts/kirkwood-6282.dtsi @@ -49,6 +49,12 @@  			};  		}; +		thermal@10078 { +			compatible = "marvell,kirkwood-thermal"; +			reg = <0x10078 0x4>; +			status = "okay"; +		}; +  		i2c@11100 {  			compatible = "marvell,mv64xxx-i2c";  			reg = <0x11100 0x20>; diff --git a/arch/arm/boot/dts/kirkwood-goflexnet.dts b/arch/arm/boot/dts/kirkwood-goflexnet.dts index bd83b8fc7c8..c3573be7b92 100644 --- a/arch/arm/boot/dts/kirkwood-goflexnet.dts +++ b/arch/arm/boot/dts/kirkwood-goflexnet.dts @@ -77,6 +77,7 @@  		};  		nand@3000000 { +			chip-delay = <40>;  			status = "okay";  			partition@0 { diff --git a/arch/arm/boot/dts/kirkwood-guruplug-server-plus.dts b/arch/arm/boot/dts/kirkwood-guruplug-server-plus.dts index 9555a86297c..44fd97dfc1f 100644 --- a/arch/arm/boot/dts/kirkwood-guruplug-server-plus.dts +++ b/arch/arm/boot/dts/kirkwood-guruplug-server-plus.dts @@ -69,6 +69,10 @@  			status = "okay";  			nr-ports = <1>;  		}; + +		mvsdio@90000 { +			status = "okay"; +		};  	};  	gpio-leds { diff --git a/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts b/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts index 93c3afbef9e..3694e94f6e9 100644 --- a/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts +++ b/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts @@ -96,11 +96,11 @@  				marvell,function = "gpio";  			};  			pmx_led_rebuild_brt_ctrl_1: pmx-led-rebuild-brt-ctrl-1 { -				marvell,pins = "mpp44"; +				marvell,pins = "mpp46";  				marvell,function = "gpio";  			};  			pmx_led_rebuild_brt_ctrl_2: pmx-led-rebuild-brt-ctrl-2 { -				marvell,pins = "mpp45"; +				marvell,pins = "mpp47";  				marvell,function = "gpio";  			}; @@ -157,14 +157,14 @@  			gpios = <&gpio0 16 0>;  			linux,default-trigger = "default-on";  		}; -		health_led1 { +		rebuild_led { +			label = "status:white:rebuild_led"; +			gpios = <&gpio1 4 0>; +		}; +		health_led {  			label = "status:red:health_led";  			gpios = <&gpio1 5 0>;  		}; -		health_led2 { -			label = "status:white:health_led"; -			gpios = <&gpio1 4 0>; -		};  		backup_led {  			label = "status:blue:backup_led";  			gpios = <&gpio0 15 0>; diff --git a/arch/arm/boot/dts/mpa1600.dts b/arch/arm/boot/dts/mpa1600.dts new file mode 100644 index 00000000000..317300875f3 --- /dev/null +++ b/arch/arm/boot/dts/mpa1600.dts @@ -0,0 +1,69 @@ +/* + * mpa1600.dts - Device Tree file for Phontech MPA 1600 + * + *  Copyright (C) 2013 Joachim Eastwood <manabian@gmail.com> + * + * Licensed under GPLv2 only + */ +/dts-v1/; +/include/ "at91rm9200.dtsi" + +/ { +	model = "Phontech MPA 1600"; +	compatible = "phontech,mpa1600", "atmel,at91rm9200"; + +	memory { +		reg = <0x20000000 0x4000000>; +	}; + +	clocks { +		#address-cells = <1>; +		#size-cells = <1>; +		ranges; + +		main_clock: clock@0 { +			compatible = "atmel,osc", "fixed-clock"; +			clock-frequency = <18432000>; +		}; +	}; + +	ahb { +		apb { +			dbgu: serial@fffff200 { +				status = "okay"; +			}; + +			macb0: ethernet@fffbc000 { +				phy-mode = "rmii"; +				status = "okay"; +			}; + +			ssc0: ssc@fffd0000 { +				status = "okay"; +			}; + +			ssc1: ssc@fffd4000 { +				status = "okay"; +			}; +		}; + +		usb0: ohci@00300000 { +			num-ports = <1>; +			status = "okay"; +		}; +	}; + +	i2c@0 { +		status = "okay"; +	}; + +	gpio_keys { +		compatible = "gpio-keys"; + +		monitor_mute { +			label = "Monitor mute"; +			gpios = <&pioC 1 1>; +			linux,code = <113>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/msm8660-surf.dts b/arch/arm/boot/dts/msm8660-surf.dts index 31f2157cd7d..9bf49b3826e 100644 --- a/arch/arm/boot/dts/msm8660-surf.dts +++ b/arch/arm/boot/dts/msm8660-surf.dts @@ -16,19 +16,13 @@  	};  	timer@2000004 { -		compatible = "qcom,msm-gpt", "qcom,msm-timer"; -		interrupts = <1 1 0x301>; -		reg = <0x02000004 0x10>; -		clock-frequency = <32768>; -		cpu-offset = <0x40000>; -	}; - -	timer@2000024 { -		compatible = "qcom,msm-dgt", "qcom,msm-timer"; -		interrupts = <1 0 0x301>; -		reg = <0x02000024 0x10>, -		      <0x02000034 0x4>; -		clock-frequency = <6750000>; +		compatible = "qcom,scss-timer", "qcom,msm-timer"; +		interrupts = <1 0 0x301>, +			     <1 1 0x301>, +			     <1 2 0x301>; +		reg = <0x02000000 0x100>; +		clock-frequency = <27000000>, +				  <32768>;  		cpu-offset = <0x40000>;  	}; @@ -38,4 +32,10 @@  		      <0x19c00000 0x1000>;  		interrupts = <0 195 0x0>;  	}; + +	qcom,ssbi@500000 { +		compatible = "qcom,ssbi"; +		reg = <0x500000 0x1000>; +		qcom,controller-type = "pmic-arbiter"; +	};  }; diff --git a/arch/arm/boot/dts/msm8960-cdp.dts b/arch/arm/boot/dts/msm8960-cdp.dts index 9e621b5ad3d..2e4d87a125d 100644 --- a/arch/arm/boot/dts/msm8960-cdp.dts +++ b/arch/arm/boot/dts/msm8960-cdp.dts @@ -15,20 +15,14 @@  		      < 0x02002000 0x1000 >;  	}; -	timer@200a004 { -		compatible = "qcom,msm-gpt", "qcom,msm-timer"; -		interrupts = <1 2 0x301>; -		reg = <0x0200a004 0x10>; -		clock-frequency = <32768>; -		cpu-offset = <0x80000>; -	}; - -	timer@200a024 { -		compatible = "qcom,msm-dgt", "qcom,msm-timer"; -		interrupts = <1 1 0x301>; -		reg = <0x0200a024 0x10>, -		      <0x0200a034 0x4>; -		clock-frequency = <6750000>; +	timer@200a000 { +		compatible = "qcom,kpss-timer", "qcom,msm-timer"; +		interrupts = <1 1 0x301>, +			     <1 2 0x301>, +			     <1 3 0x301>; +		reg = <0x0200a000 0x100>; +		clock-frequency = <27000000>, +				  <32768>;  		cpu-offset = <0x80000>;  	}; @@ -38,4 +32,10 @@  		      <0x16400000 0x1000>;  		interrupts = <0 154 0x0>;  	}; + +	qcom,ssbi@500000 { +		compatible = "qcom,ssbi"; +		reg = <0x500000 0x1000>; +		qcom,controller-type = "pmic-arbiter"; +	};  }; diff --git a/arch/arm/boot/dts/orion5x.dtsi b/arch/arm/boot/dts/orion5x.dtsi index 8aad00f81ed..892c64e3f1e 100644 --- a/arch/arm/boot/dts/orion5x.dtsi +++ b/arch/arm/boot/dts/orion5x.dtsi @@ -13,6 +13,9 @@  	compatible = "marvell,orion5x";  	interrupt-parent = <&intc>; +	aliases { +		gpio0 = &gpio0; +	};  	intc: interrupt-controller {  		compatible = "marvell,orion-intc", "marvell,intc";  		interrupt-controller; @@ -32,7 +35,9 @@  			#gpio-cells = <2>;  			gpio-controller;  			reg = <0x10100 0x40>; -			ngpio = <32>; +			ngpios = <32>; +			interrupt-controller; +			#interrupt-cells = <2>;  			interrupts = <6>, <7>, <8>, <9>;  		}; @@ -69,6 +74,20 @@  			status = "okay";  		}; +		ehci@50000 { +			compatible = "marvell,orion-ehci"; +			reg = <0x50000 0x1000>; +			interrupts = <17>; +			status = "disabled"; +		}; + +		ehci@a0000 { +			compatible = "marvell,orion-ehci"; +			reg = <0xa0000 0x1000>; +			interrupts = <12>; +			status = "disabled"; +		}; +  		sata@80000 {  			compatible = "marvell,orion-sata";  			reg = <0x80000 0x5000>; @@ -86,12 +105,31 @@  			status = "disabled";  		}; +		xor@60900 { +			compatible = "marvell,orion-xor"; +			reg = <0x60900 0x100 +			       0x60b00 0x100>; +			status = "okay"; + +			xor00 { +			      interrupts = <30>; +			      dmacap,memcpy; +			      dmacap,xor; +			}; +			xor01 { +			      interrupts = <31>; +			      dmacap,memcpy; +			      dmacap,xor; +			      dmacap,memset; +			}; +		}; +  		crypto@90000 {  			compatible = "marvell,orion-crypto";  			reg = <0x90000 0x10000>,  			      <0xf2200000 0x800>;  			reg-names = "regs", "sram"; -			interrupts = <22>; +			interrupts = <28>;  			status = "okay";  		};  	}; diff --git a/arch/arm/boot/dts/sama5d3.dtsi b/arch/arm/boot/dts/sama5d3.dtsi new file mode 100644 index 00000000000..39b0458d365 --- /dev/null +++ b/arch/arm/boot/dts/sama5d3.dtsi @@ -0,0 +1,1031 @@ +/* + * sama5d3.dtsi - Device Tree Include file for SAMA5D3 family SoC + *                applies to SAMA5D31, SAMA5D33, SAMA5D34, SAMA5D35 SoC + * + *  Copyright (C) 2013 Atmel, + *                2013 Ludovic Desroches <ludovic.desroches@atmel.com> + * + * Licensed under GPLv2 or later. + */ + +/include/ "skeleton.dtsi" + +/ { +	model = "Atmel SAMA5D3 family SoC"; +	compatible = "atmel,sama5d3", "atmel,sama5"; +	interrupt-parent = <&aic>; + +	aliases { +		serial0 = &dbgu; +		serial1 = &usart0; +		serial2 = &usart1; +		serial3 = &usart2; +		serial4 = &usart3; +		gpio0 = &pioA; +		gpio1 = &pioB; +		gpio2 = &pioC; +		gpio3 = &pioD; +		gpio4 = &pioE; +		tcb0 = &tcb0; +		tcb1 = &tcb1; +		i2c0 = &i2c0; +		i2c1 = &i2c1; +		i2c2 = &i2c2; +		ssc0 = &ssc0; +		ssc1 = &ssc1; +	}; +	cpus { +		cpu@0 { +			compatible = "arm,cortex-a5"; +		}; +	}; + +	memory { +		reg = <0x20000000 0x8000000>; +	}; + +	ahb { +		compatible = "simple-bus"; +		#address-cells = <1>; +		#size-cells = <1>; +		ranges; + +		apb { +			compatible = "simple-bus"; +			#address-cells = <1>; +			#size-cells = <1>; +			ranges; + +			mmc0: mmc@f0000000 { +				compatible = "atmel,hsmci"; +				reg = <0xf0000000 0x600>; +				interrupts = <21 4 0>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0 &pinctrl_mmc0_dat1_3 &pinctrl_mmc0_dat4_7>; +				status = "disabled"; +				#address-cells = <1>; +				#size-cells = <0>; +			}; + +			spi0: spi@f0004000 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "atmel,at91sam9x5-spi"; +				reg = <0xf0004000 0x100>; +				interrupts = <24 4 3>; +				cs-gpios = <&pioD 13 0 +					    &pioD 14 0 /* conflicts with SCK0 and CANRX0 */ +					    &pioD 15 0 /* conflicts with CTS0 and CANTX0 */ +					    &pioD 16 0 /* conflicts with RTS0 and PWMFI3 */ +					   >; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_spi0>; +				status = "disabled"; +			}; + +			ssc0: ssc@f0008000 { +				compatible = "atmel,at91sam9g45-ssc"; +				reg = <0xf0008000 0x4000>; +				interrupts = <38 4 4>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_ssc0_tx &pinctrl_ssc0_rx>; +				status = "disabled"; +			}; + +			can0: can@f000c000 { +				compatible = "atmel,at91sam9x5-can"; +				reg = <0xf000c000 0x300>; +				interrupts = <40 4 3>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_can0_rx_tx>; +				status = "disabled"; +			}; + +			tcb0: timer@f0010000 { +				compatible = "atmel,at91sam9x5-tcb"; +				reg = <0xf0010000 0x100>; +				interrupts = <26 4 0>; +			}; + +			i2c0: i2c@f0014000 { +				compatible = "atmel,at91sam9x5-i2c"; +				reg = <0xf0014000 0x4000>; +				interrupts = <18 4 6>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_i2c0>; +				#address-cells = <1>; +				#size-cells = <0>; +				status = "disabled"; +			}; + +			i2c1: i2c@f0018000 { +				compatible = "atmel,at91sam9x5-i2c"; +				reg = <0xf0018000 0x4000>; +				interrupts = <19 4 6>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_i2c1>; +				#address-cells = <1>; +				#size-cells = <0>; +				status = "disabled"; +			}; + +			usart0: serial@f001c000 { +				compatible = "atmel,at91sam9260-usart"; +				reg = <0xf001c000 0x100>; +				interrupts = <12 4 5>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_usart0>; +				status = "disabled"; +			}; + +			usart1: serial@f0020000 { +				compatible = "atmel,at91sam9260-usart"; +				reg = <0xf0020000 0x100>; +				interrupts = <13 4 5>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_usart1>; +				status = "disabled"; +			}; + +			macb0: ethernet@f0028000 { +				compatible = "cnds,pc302-gem", "cdns,gem"; +				reg = <0xf0028000 0x100>; +				interrupts = <34 4 3>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_macb0_data_rgmii &pinctrl_macb0_signal_rgmii>; +				status = "disabled"; +			}; + +			isi: isi@f0034000 { +				compatible = "atmel,at91sam9g45-isi"; +				reg = <0xf0034000 0x4000>; +				interrupts = <37 4 5>; +				status = "disabled"; +			}; + +			mmc1: mmc@f8000000 { +				compatible = "atmel,hsmci"; +				reg = <0xf8000000 0x600>; +				interrupts = <22 4 0>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_mmc1_clk_cmd_dat0 &pinctrl_mmc1_dat1_3>; +				status = "disabled"; +				#address-cells = <1>; +				#size-cells = <0>; +			}; + +			mmc2: mmc@f8004000 { +				compatible = "atmel,hsmci"; +				reg = <0xf8004000 0x600>; +				interrupts = <23 4 0>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_mmc2_clk_cmd_dat0 &pinctrl_mmc2_dat1_3>; +				status = "disabled"; +				#address-cells = <1>; +				#size-cells = <0>; +			}; + +			spi1: spi@f8008000 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "atmel,at91sam9x5-spi"; +				reg = <0xf8008000 0x100>; +				interrupts = <25 4 3>; +				cs-gpios = <&pioC 25 0 +					    &pioC 26 0 /* conflitcs with TWD1 and ISI_D11 */ +					    &pioC 27 0 /* conflitcs with TWCK1 and ISI_D10 */ +					    &pioC 28 0 /* conflitcs with PWMFI0 and ISI_D9 */ +					   >; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_spi1>; +				status = "disabled"; +			}; + +			ssc1: ssc@f800c000 { +				compatible = "atmel,at91sam9g45-ssc"; +				reg = <0xf800c000 0x4000>; +				interrupts = <39 4 4>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_ssc1_tx &pinctrl_ssc1_rx>; +				status = "disabled"; +			}; + +			can1: can@f8010000 { +				compatible = "atmel,at91sam9x5-can"; +				reg = <0xf8010000 0x300>; +				interrupts = <41 4 3>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_can1_rx_tx>; +			}; + +			tcb1: timer@f8014000 { +				compatible = "atmel,at91sam9x5-tcb"; +				reg = <0xf8014000 0x100>; +				interrupts = <27 4 0>; +			}; + +			adc0: adc@f8018000 { +				compatible = "atmel,at91sam9260-adc"; +				reg = <0xf8018000 0x100>; +				interrupts = <29 4 5>; +				pinctrl-names = "default"; +				pinctrl-0 = < +					&pinctrl_adc0_adtrg +					&pinctrl_adc0_ad0 +					&pinctrl_adc0_ad1 +					&pinctrl_adc0_ad2 +					&pinctrl_adc0_ad3 +					&pinctrl_adc0_ad4 +					&pinctrl_adc0_ad5 +					&pinctrl_adc0_ad6 +					&pinctrl_adc0_ad7 +					&pinctrl_adc0_ad8 +					&pinctrl_adc0_ad9 +					&pinctrl_adc0_ad10 +					&pinctrl_adc0_ad11 +					>; +				atmel,adc-channel-base = <0x50>; +				atmel,adc-channels-used = <0xfff>; +				atmel,adc-drdy-mask = <0x1000000>; +				atmel,adc-num-channels = <12>; +				atmel,adc-startup-time = <40>; +				atmel,adc-status-register = <0x30>; +				atmel,adc-trigger-register = <0xc0>; +				atmel,adc-use-external; +				atmel,adc-vref = <3000>; +				atmel,adc-res = <10 12>; +				atmel,adc-res-names = "lowres", "highres"; +				status = "disabled"; + +				trigger@0 { +					trigger-name = "external-rising"; +					trigger-value = <0x1>; +					trigger-external; +				}; +				trigger@1 { +					trigger-name = "external-falling"; +					trigger-value = <0x2>; +					trigger-external; +				}; +				trigger@2 { +					trigger-name = "external-any"; +					trigger-value = <0x3>; +					trigger-external; +				}; +				trigger@3 { +					trigger-name = "continuous"; +					trigger-value = <0x6>; +				}; +			}; + +			tsadcc: tsadcc@f8018000 { +				compatible = "atmel,at91sam9x5-tsadcc"; +				reg = <0xf8018000 0x4000>; +				interrupts = <29 4 5>; +				atmel,tsadcc_clock = <300000>; +				atmel,filtering_average = <0x03>; +				atmel,pendet_debounce = <0x08>; +				atmel,pendet_sensitivity = <0x02>; +				atmel,ts_sample_hold_time = <0x0a>; +				status = "disabled"; +			}; + +			i2c2: i2c@f801c000 { +				compatible = "atmel,at91sam9x5-i2c"; +				reg = <0xf801c000 0x4000>; +				interrupts = <20 4 6>; +				#address-cells = <1>; +				#size-cells = <0>; +				status = "disabled"; +			}; + +			usart2: serial@f8020000 { +				compatible = "atmel,at91sam9260-usart"; +				reg = <0xf8020000 0x100>; +				interrupts = <14 4 5>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_usart2>; +				status = "disabled"; +			}; + +			usart3: serial@f8024000 { +				compatible = "atmel,at91sam9260-usart"; +				reg = <0xf8024000 0x100>; +				interrupts = <15 4 5>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_usart3>; +				status = "disabled"; +			}; + +			macb1: ethernet@f802c000 { +				compatible = "cdns,at32ap7000-macb", "cdns,macb"; +				reg = <0xf802c000 0x100>; +				interrupts = <35 4 3>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_macb1_rmii>; +				status = "disabled"; +			}; + +			sha@f8034000 { +				compatible = "atmel,sam9g46-sha"; +				reg = <0xf8034000 0x100>; +				interrupts = <42 4 0>; +			}; + +			aes@f8038000 { +				compatible = "atmel,sam9g46-aes"; +				reg = <0xf8038000 0x100>; +				interrupts = <43 4 0>; +			}; + +			tdes@f803c000 { +				compatible = "atmel,sam9g46-tdes"; +				reg = <0xf803c000 0x100>; +				interrupts = <44 4 0>; +			}; + +			dma0: dma-controller@ffffe600 { +				compatible = "atmel,at91sam9g45-dma"; +				reg = <0xffffe600 0x200>; +				interrupts = <30 4 0>; +				#dma-cells = <1>; +			}; + +			dma1: dma-controller@ffffe800 { +				compatible = "atmel,at91sam9g45-dma"; +				reg = <0xffffe800 0x200>; +				interrupts = <31 4 0>; +				#dma-cells = <1>; +			}; + +			ramc0: ramc@ffffea00 { +				compatible = "atmel,at91sam9g45-ddramc"; +				reg = <0xffffea00 0x200>; +			}; + +			dbgu: serial@ffffee00 { +				compatible = "atmel,at91sam9260-usart"; +				reg = <0xffffee00 0x200>; +				interrupts = <2 4 7>; +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_dbgu>; +				status = "disabled"; +			}; + +			aic: interrupt-controller@fffff000 { +				#interrupt-cells = <3>; +				compatible = "atmel,sama5d3-aic"; +				interrupt-controller; +				reg = <0xfffff000 0x200>; +				atmel,external-irqs = <47>; +			}; + +			pinctrl@fffff200 { +				#address-cells = <1>; +				#size-cells = <1>; +				compatible = "atmel,at91sam9x5-pinctrl", "atmel,at91rm9200-pinctrl", "simple-bus"; +				ranges = <0xfffff200 0xfffff200 0xa00>; +				atmel,mux-mask = < +					/*   A          B          C  */ +					0xffffffff 0xc0fc0000 0xc0ff0000	/* pioA */ +					0xffffffff 0x0ff8ffff 0x00000000	/* pioB */ +					0xffffffff 0xbc00f1ff 0x7c00fc00	/* pioC */ +					0xffffffff 0xc001c0e0 0x0001c1e0	/* pioD */ +					0xffffffff 0xbf9f8000 0x18000000	/* pioE */ +					>; + +				/* shared pinctrl settings */ +				adc0 { +					pinctrl_adc0_adtrg: adc0_adtrg { +						atmel,pins = +							<3 19 0x1 0x0>;	/* PD19 periph A ADTRG */ +					}; +					pinctrl_adc0_ad0: adc0_ad0 { +						atmel,pins = +							<3 20 0x1 0x0>;	/* PD20 periph A AD0 */ +					}; +					pinctrl_adc0_ad1: adc0_ad1 { +						atmel,pins = +							<3 21 0x1 0x0>;	/* PD21 periph A AD1 */ +					}; +					pinctrl_adc0_ad2: adc0_ad2 { +						atmel,pins = +							<3 22 0x1 0x0>;	/* PD22 periph A AD2 */ +					}; +					pinctrl_adc0_ad3: adc0_ad3 { +						atmel,pins = +							<3 23 0x1 0x0>;	/* PD23 periph A AD3 */ +					}; +					pinctrl_adc0_ad4: adc0_ad4 { +						atmel,pins = +							<3 24 0x1 0x0>;	/* PD24 periph A AD4 */ +					}; +					pinctrl_adc0_ad5: adc0_ad5 { +						atmel,pins = +							<3 25 0x1 0x0>;	/* PD25 periph A AD5 */ +					}; +					pinctrl_adc0_ad6: adc0_ad6 { +						atmel,pins = +							<3 26 0x1 0x0>;	/* PD26 periph A AD6 */ +					}; +					pinctrl_adc0_ad7: adc0_ad7 { +						atmel,pins = +							<3 27 0x1 0x0>;	/* PD27 periph A AD7 */ +					}; +					pinctrl_adc0_ad8: adc0_ad8 { +						atmel,pins = +							<3 28 0x1 0x0>;	/* PD28 periph A AD8 */ +					}; +					pinctrl_adc0_ad9: adc0_ad9 { +						atmel,pins = +							<3 29 0x1 0x0>;	/* PD29 periph A AD9 */ +					}; +					pinctrl_adc0_ad10: adc0_ad10 { +						atmel,pins = +							<3 30 0x1 0x0>;	/* PD30 periph A AD10, conflicts with PCK0 */ +					}; +					pinctrl_adc0_ad11: adc0_ad11 { +						atmel,pins = +							<3 31 0x1 0x0>;	/* PD31 periph A AD11, conflicts with PCK1 */ +					}; +				}; + +				can0 { +					pinctrl_can0_rx_tx: can0_rx_tx { +						atmel,pins = +							<3 14 0x3 0x0	/* PD14 periph C RX, conflicts with SCK0, SPI0_NPCS1 */ +							 3 15 0x3 0x0>;	/* PD15 periph C TX, conflicts with CTS0, SPI0_NPCS2 */ +					}; +				}; + +				can1 { +					pinctrl_can1_rx_tx: can1_rx_tx { +						atmel,pins = +							<1 14 0x2 0x0	/* PB14 periph B RX, conflicts with GCRS */ +							 1 15 0x2 0x0>;	/* PB15 periph B TX, conflicts with GCOL */ +					}; +				}; + +				dbgu { +					pinctrl_dbgu: dbgu-0 { +						atmel,pins = +							<1 30 0x1 0x0	/* PB30 periph A */ +							 1 31 0x1 0x1>;	/* PB31 periph A with pullup */ +					}; +				}; + +				i2c0 { +					pinctrl_i2c0: i2c0-0 { +						atmel,pins = +							<0 30 0x1 0x0	/* PA30 periph A TWD0 pin, conflicts with URXD1, ISI_VSYNC */ +							 0 31 0x1 0x0>;	/* PA31 periph A TWCK0 pin, conflicts with UTXD1, ISI_HSYNC */ +					}; +				}; + +				i2c1 { +					pinctrl_i2c1: i2c1-0 { +						atmel,pins = +							<2 26 0x2 0x0	/* PC26 periph B TWD1 pin, conflicts with SPI1_NPCS1, ISI_D11 */ +							 2 27 0x2 0x0>;	/* PC27 periph B TWCK1 pin, conflicts with SPI1_NPCS2, ISI_D10 */ +					}; +				}; + +				isi { +					pinctrl_isi: isi-0 { +						atmel,pins = +							<0 16 0x3 0x0	/* PA16 periph C ISI_D0, conflicts with LCDDAT16 */ +							 0 17 0x3 0x0	/* PA17 periph C ISI_D1, conflicts with LCDDAT17 */ +							 0 18 0x3 0x0	/* PA18 periph C ISI_D2, conflicts with LCDDAT18, TWD2 */ +							 0 19 0x3 0x0	/* PA19 periph C ISI_D3, conflicts with LCDDAT19, TWCK2 */ +							 0 20 0x3 0x0	/* PA20 periph C ISI_D4, conflicts with LCDDAT20, PWMH0 */ +							 0 21 0x3 0x0	/* PA21 periph C ISI_D5, conflicts with LCDDAT21, PWML0 */ +							 0 22 0x3 0x0	/* PA22 periph C ISI_D6, conflicts with LCDDAT22, PWMH1 */ +							 0 23 0x3 0x0	/* PA23 periph C ISI_D7, conflicts with LCDDAT23, PWML1 */ +							 2 30 0x3 0x0	/* PC30 periph C ISI_PCK, conflicts with UTXD0 */ +							 0 31 0x3 0x0	/* PA31 periph C ISI_HSYNC, conflicts with TWCK0, UTXD1 */ +							 0 30 0x3 0x0	/* PA30 periph C ISI_VSYNC, conflicts with TWD0, URXD1 */ +							 2 29 0x3 0x0	/* PC29 periph C ISI_PD8, conflicts with URXD0, PWMFI2 */ +							 2 28 0x3 0x0>;	/* PC28 periph C ISI_PD9, conflicts with SPI1_NPCS3, PWMFI0 */ +					}; +					pinctrl_isi_pck_as_mck: isi_pck_as_mck-0 { +						atmel,pins = +							<3 31 0x2 0x0>;	/* PD31 periph B ISI_MCK */ +					}; +				}; + +				lcd { +					pinctrl_lcd: lcd-0 { +						atmel,pins = +							<0 24 0x1 0x0	/* PA24 periph A LCDPWM */ +							 0 26 0x1 0x0	/* PA26 periph A LCDVSYNC */ +							 0 27 0x1 0x0	/* PA27 periph A LCDHSYNC */ +							 0 25 0x1 0x0	/* PA25 periph A LCDDISP */ +							 0 29 0x1 0x0	/* PA29 periph A LCDDEN */ +							 0 28 0x1 0x0	/* PA28 periph A LCDPCK */ +							 0 0 0x1 0x0	/* PA0 periph A LCDD0 pin */ +							 0 1 0x1 0x0	/* PA1 periph A LCDD1 pin */ +							 0 2 0x1 0x0	/* PA2 periph A LCDD2 pin */ +							 0 3 0x1 0x0	/* PA3 periph A LCDD3 pin */ +							 0 4 0x1 0x0	/* PA4 periph A LCDD4 pin */ +							 0 5 0x1 0x0	/* PA5 periph A LCDD5 pin */ +							 0 6 0x1 0x0	/* PA6 periph A LCDD6 pin */ +							 0 7 0x1 0x0	/* PA7 periph A LCDD7 pin */ +							 0 8 0x1 0x0	/* PA8 periph A LCDD8 pin */ +							 0 9 0x1 0x0	/* PA9 periph A LCDD9 pin */ +							 0 10 0x1 0x0	/* PA10 periph A LCDD10 pin */ +							 0 11 0x1 0x0	/* PA11 periph A LCDD11 pin */ +							 0 12 0x1 0x0	/* PA12 periph A LCDD12 pin */ +							 0 13 0x1 0x0	/* PA13 periph A LCDD13 pin */ +							 0 14 0x1 0x0	/* PA14 periph A LCDD14 pin */ +							 0 15 0x1 0x0	/* PA15 periph A LCDD15 pin */ +							 2 14 0x3 0x0	/* PC14 periph C LCDD16 pin */ +							 2 13 0x3 0x0	/* PC13 periph C LCDD17 pin */ +							 2 12 0x3 0x0	/* PC12 periph C LCDD18 pin */ +							 2 11 0x3 0x0	/* PC11 periph C LCDD19 pin */ +							 2 10 0x3 0x0	/* PC10 periph C LCDD20 pin */ +							 2 15 0x3 0x0	/* PC15 periph C LCDD21 pin */ +							 4 27 0x3 0x0	/* PE27 periph C LCDD22 pin */ +							 4 28 0x3 0x0>;	/* PE28 periph C LCDD23 pin */ +					}; +				}; + +				macb0 { +					pinctrl_macb0_data_rgmii: macb0_data_rgmii { +						atmel,pins = +							<1 0 0x1 0x0	/* PB0 periph A GTX0, conflicts with PWMH0 */ +							 1 1 0x1 0x0	/* PB1 periph A GTX1, conflicts with PWML0 */ +							 1 2 0x1 0x0	/* PB2 periph A GTX2, conflicts with TK1 */ +							 1 3 0x1 0x0	/* PB3 periph A GTX3, conflicts with TF1 */ +							 1 4 0x1 0x0	/* PB4 periph A GRX0, conflicts with PWMH1 */ +							 1 5 0x1 0x0	/* PB5 periph A GRX1, conflicts with PWML1 */ +							 1 6 0x1 0x0	/* PB6 periph A GRX2, conflicts with TD1 */ +							 1 7 0x1 0x0>;	/* PB7 periph A GRX3, conflicts with RK1 */ +					}; +					pinctrl_macb0_data_gmii: macb0_data_gmii { +						atmel,pins = +							<1 19 0x2 0x0	/* PB19 periph B GTX4, conflicts with MCI1_CDA */ +							 1 20 0x2 0x0	/* PB20 periph B GTX5, conflicts with MCI1_DA0 */ +							 1 21 0x2 0x0	/* PB21 periph B GTX6, conflicts with MCI1_DA1 */ +							 1 22 0x2 0x0	/* PB22 periph B GTX7, conflicts with MCI1_DA2 */ +							 1 23 0x2 0x0	/* PB23 periph B GRX4, conflicts with MCI1_DA3 */ +							 1 24 0x2 0x0	/* PB24 periph B GRX5, conflicts with MCI1_CK */ +							 1 25 0x2 0x0	/* PB25 periph B GRX6, conflicts with SCK1 */ +							 1 26 0x2 0x0>;	/* PB26 periph B GRX7, conflicts with CTS1 */ +					}; +					pinctrl_macb0_signal_rgmii: macb0_signal_rgmii { +						atmel,pins = +							<1 8 0x1 0x0	/* PB8 periph A GTXCK, conflicts with PWMH2 */ +							 1 9 0x1 0x0	/* PB9 periph A GTXEN, conflicts with PWML2 */ +							 1 11 0x1 0x0	/* PB11 periph A GRXCK, conflicts with RD1 */ +							 1 13 0x1 0x0	/* PB13 periph A GRXER, conflicts with PWML3 */ +							 1 16 0x1 0x0	/* PB16 periph A GMDC */ +							 1 17 0x1 0x0	/* PB17 periph A GMDIO */ +							 1 18 0x1 0x0>;	/* PB18 periph A G125CK */ +					}; +					pinctrl_macb0_signal_gmii: macb0_signal_gmii { +						atmel,pins = +							<1 9 0x1 0x0	/* PB9 periph A GTXEN, conflicts with PWML2 */ +							 1 10 0x1 0x0	/* PB10 periph A GTXER, conflicts with RF1 */ +							 1 11 0x1 0x0	/* PB11 periph A GRXCK, conflicts with RD1 */ +							 1 12 0x1 0x0	/* PB12 periph A GRXDV, conflicts with PWMH3 */ +							 1 13 0x1 0x0	/* PB13 periph A GRXER, conflicts with PWML3 */ +							 1 14 0x1 0x0	/* PB14 periph A GCRS, conflicts with CANRX1 */ +							 1 15 0x1 0x0	/* PB15 periph A GCOL, conflicts with CANTX1 */ +							 1 16 0x1 0x0	/* PB16 periph A GMDC */ +							 1 17 0x1 0x0	/* PB17 periph A GMDIO */ +							 1 27 0x2 0x0>;	/* PB27 periph B G125CKO */ +					}; + +				}; + +				macb1 { +					pinctrl_macb1_rmii: macb1_rmii-0 { +						atmel,pins = +							<2 0 0x1 0x0	/* PC0 periph A ETX0, conflicts with TIOA3 */ +							 2 1 0x1 0x0	/* PC1 periph A ETX1, conflicts with TIOB3 */ +							 2 2 0x1 0x0	/* PC2 periph A ERX0, conflicts with TCLK3 */ +							 2 3 0x1 0x0	/* PC3 periph A ERX1, conflicts with TIOA4 */ +							 2 4 0x1 0x0	/* PC4 periph A ETXEN, conflicts with TIOB4 */ +							 2 5 0x1 0x0	/* PC5 periph A ECRSDV,conflicts with TCLK4 */ +							 2 6 0x1 0x0	/* PC6 periph A ERXER, conflicts with TIOA5 */ +							 2 7 0x1 0x0	/* PC7 periph A EREFCK, conflicts with TIOB5 */ +							 2 8 0x1 0x0	/* PC8 periph A EMDC, conflicts with TCLK5 */ +							 2 9 0x1 0x0>;	/* PC9 periph A EMDIO  */ +					}; +				}; + +				mmc0 { +					pinctrl_mmc0_clk_cmd_dat0: mmc0_clk_cmd_dat0 { +						atmel,pins = +							<3 9 0x1 0x0	/* PD9 periph A MCI0_CK */ +							 3 0 0x1 0x1	/* PD0 periph A MCI0_CDA with pullup */ +							 3 1 0x1 0x1>;	/* PD1 periph A MCI0_DA0 with pullup */ +					}; +					pinctrl_mmc0_dat1_3: mmc0_dat1_3 { +						atmel,pins = +							<3 2 0x1 0x1	/* PD2 periph A MCI0_DA1 with pullup */ +							 3 3 0x1 0x1	/* PD3 periph A MCI0_DA2 with pullup */ +							 3 4 0x1 0x1>;	/* PD4 periph A MCI0_DA3 with pullup */ +					}; +					pinctrl_mmc0_dat4_7: mmc0_dat4_7 { +						atmel,pins = +							<3 5 0x1 0x1	/* PD5 periph A MCI0_DA4 with pullup, conflicts with TIOA0, PWMH2 */ +							 3 6 0x1 0x1	/* PD6 periph A MCI0_DA5 with pullup, conflicts with TIOB0, PWML2 */ +							 3 7 0x1 0x1	/* PD7 periph A MCI0_DA6 with pullup, conlicts with TCLK0, PWMH3 */ +							 3 8 0x1 0x1>;	/* PD8 periph A MCI0_DA7 with pullup, conflicts with PWML3 */ +					}; +				}; + +				mmc1 { +					pinctrl_mmc1_clk_cmd_dat0: mmc1_clk_cmd_dat0 { +						atmel,pins = +							<1 24 0x1 0x0	/* PB24 periph A MCI1_CK, conflicts with GRX5 */ +							 1 19 0x1 0x1	/* PB19 periph A MCI1_CDA with pullup, conflicts with GTX4 */ +							 1 20 0x1 0x1>;	/* PB20 periph A MCI1_DA0 with pullup, conflicts with GTX5 */ +					}; +					pinctrl_mmc1_dat1_3: mmc1_dat1_3 { +						atmel,pins = +							<1 21 0x1 0x1	/* PB21 periph A MCI1_DA1 with pullup, conflicts with GTX6 */ +							 1 22 0x1 0x1	/* PB22 periph A MCI1_DA2 with pullup, conflicts with GTX7 */ +							 1 23 0x1 0x1>;	/* PB23 periph A MCI1_DA3 with pullup, conflicts with GRX4 */ +					}; +				}; + +				mmc2 { +					pinctrl_mmc2_clk_cmd_dat0: mmc2_clk_cmd_dat0 { +						atmel,pins = +							<2 15 0x1 0x0	/* PC15 periph A MCI2_CK, conflicts with PCK2 */ +							 2 10 0x1 0x1	/* PC10 periph A MCI2_CDA with pullup */ +							 2 11 0x1 0x1>;	/* PC11 periph A MCI2_DA0 with pullup */ +					}; +					pinctrl_mmc2_dat1_3: mmc2_dat1_3 { +						atmel,pins = +							<2 12 0x1 0x0	/* PC12 periph A MCI2_DA1 with pullup, conflicts with TIOA1 */ +							 2 13 0x1 0x0	/* PC13 periph A MCI2_DA2 with pullup, conflicts with TIOB1 */ +							 2 14 0x1 0x0>;	/* PC14 periph A MCI2_DA3 with pullup, conflicts with TCLK1 */ +					}; +				}; + +				nand0 { +					pinctrl_nand0_ale_cle: nand0_ale_cle-0 { +						atmel,pins = +							<4 21 0x1 0x1	/* PE21 periph A with pullup */ +							 4 22 0x1 0x1>;	/* PE22 periph A with pullup */ +					}; +				}; + +				pioA: gpio@fffff200 { +					compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; +					reg = <0xfffff200 0x100>; +					interrupts = <6 4 1>; +					#gpio-cells = <2>; +					gpio-controller; +					interrupt-controller; +					#interrupt-cells = <2>; +				}; + +				pioB: gpio@fffff400 { +					compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; +					reg = <0xfffff400 0x100>; +					interrupts = <7 4 1>; +					#gpio-cells = <2>; +					gpio-controller; +					interrupt-controller; +					#interrupt-cells = <2>; +				}; + +				pioC: gpio@fffff600 { +					compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; +					reg = <0xfffff600 0x100>; +					interrupts = <8 4 1>; +					#gpio-cells = <2>; +					gpio-controller; +					interrupt-controller; +					#interrupt-cells = <2>; +				}; + +				pioD: gpio@fffff800 { +					compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; +					reg = <0xfffff800 0x100>; +					interrupts = <9 4 1>; +					#gpio-cells = <2>; +					gpio-controller; +					interrupt-controller; +					#interrupt-cells = <2>; +				}; + +				pioE: gpio@fffffa00 { +					compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; +					reg = <0xfffffa00 0x100>; +					interrupts = <10 4 1>; +					#gpio-cells = <2>; +					gpio-controller; +					interrupt-controller; +					#interrupt-cells = <2>; +				}; + +				spi0 { +					pinctrl_spi0: spi0-0 { +						atmel,pins = +							<3 10 0x1 0x0	/* PD10 periph A SPI0_MISO pin */ +							 3 11 0x1 0x0	/* PD11 periph A SPI0_MOSI pin */ +							 3 12 0x1 0x0	/* PD12 periph A SPI0_SPCK pin */ +							 3 13 0x0 0x0>;	/* PD13 GPIO SPI0_NPCS0 pin */ +					}; +				}; + +				spi1 { +					pinctrl_spi1: spi1-0 { +						atmel,pins = +							<2 22 0x1 0x0	/* PC22 periph A SPI1_MISO pin */ +							 2 23 0x1 0x0	/* PC23 periph A SPI1_MOSI pin */ +							 2 24 0x1 0x0	/* PC24 periph A SPI1_SPCK pin */ +							 2 25 0x0 0x0>;	/* PC25 GPIO SPI1_NPCS0 pin */ +					}; +				}; + +				ssc0 { +					pinctrl_ssc0_tx: ssc0_tx { +						atmel,pins = +							<2 16 0x1 0x0	/* PC16 periph A TK0 */ +							 2 17 0x1 0x0	/* PC17 periph A TF0 */ +							 2 18 0x1 0x0>;	/* PC18 periph A TD0 */ +					}; + +					pinctrl_ssc0_rx: ssc0_rx { +						atmel,pins = +							<2 19 0x1 0x0	/* PC19 periph A RK0 */ +							 2 20 0x1 0x0	/* PC20 periph A RF0 */ +							 2 21 0x1 0x0>;	/* PC21 periph A RD0 */ +					}; +				}; + +				ssc1 { +					pinctrl_ssc1_tx: ssc1_tx { +						atmel,pins = +							<1 2 0x2 0x0	/* PB2 periph B TK1, conflicts with GTX2 */ +							 1 3 0x2 0x0	/* PB3 periph B TF1, conflicts with GTX3 */ +							 1 6 0x2 0x0>;	/* PB6 periph B TD1, conflicts with TD1 */ +					}; + +					pinctrl_ssc1_rx: ssc1_rx { +						atmel,pins = +							<1 7 0x2 0x0	/* PB7 periph B RK1, conflicts with EREFCK */ +							 1 10 0x2 0x0	/* PB10 periph B RF1, conflicts with GTXER */ +							 1 11 0x2 0x0>;	/* PB11 periph B RD1, conflicts with GRXCK */ +					}; +				}; + +				uart0 { +					pinctrl_uart0: uart0-0 { +						atmel,pins = +							<2 29 0x1 0x0	/* PC29 periph A, conflicts with PWMFI2, ISI_D8 */ +							 2 30 0x1 0x1>;	/* PC30 periph A with pullup, conflicts with ISI_PCK */ +					}; +				}; + +				uart1 { +					pinctrl_uart1: uart1-0 { +						atmel,pins = +							<0 30 0x2 0x0	/* PA30 periph B, conflicts with TWD0, ISI_VSYNC */ +							 0 31 0x2 0x1>;	/* PA31 periph B with pullup, conflicts with TWCK0, ISI_HSYNC */ +					}; +				}; + +				usart0 { +					pinctrl_usart0: usart0-0 { +						atmel,pins = +							<3 17 0x1 0x0	/* PD17 periph A */ +							 3 18 0x1 0x1>;	/* PD18 periph A with pullup */ +					}; + +					pinctrl_usart0_rts_cts: usart0_rts_cts-0 { +						atmel,pins = +							<3 15 0x1 0x0	/* PD15 periph A, conflicts with SPI0_NPCS2, CANTX0 */ +							 3 16 0x1 0x0>;	/* PD16 periph A, conflicts with SPI0_NPCS3, PWMFI3 */ +					}; +				}; + +				usart1 { +					pinctrl_usart1: usart1-0 { +						atmel,pins = +							<1 28 0x1 0x0	/* PB28 periph A */ +							 1 29 0x1 0x1>;	/* PB29 periph A with pullup */ +					}; + +					pinctrl_usart1_rts_cts: usart1_rts_cts-0 { +						atmel,pins = +							<1 26 0x1 0x0	/* PB26 periph A, conflicts with GRX7 */ +							 1 27 0x1 0x0>;	/* PB27 periph A, conflicts with G125CKO */ +					}; +				}; + +				usart2 { +					pinctrl_usart2: usart2-0 { +						atmel,pins = +							<4 25 0x2 0x0	/* PE25 periph B, conflicts with A25 */ +							 4 26 0x2 0x1>;	/* PE26 periph B with pullup, conflicts NCS0 */ +					}; + +					pinctrl_usart2_rts_cts: usart2_rts_cts-0 { +						atmel,pins = +							<4 23 0x2 0x0	/* PE23 periph B, conflicts with A23 */ +							 4 24 0x2 0x0>;	/* PE24 periph B, conflicts with A24 */ +					}; +				}; + +				usart3 { +					pinctrl_usart3: usart3-0 { +						atmel,pins = +							<4 18 0x2 0x0	/* PE18 periph B, conflicts with A18 */ +							 4 19 0x2 0x1>;	/* PE19 periph B with pullup, conflicts with A19 */ +					}; + +					pinctrl_usart3_rts_cts: usart3_rts_cts-0 { +						atmel,pins = +							<4 16 0x2 0x0	/* PE16 periph B, conflicts with A16 */ +							 4 17 0x2 0x0>;	/* PE17 periph B, conflicts with A17 */ +					}; +				}; +			}; + +			pmc: pmc@fffffc00 { +				compatible = "atmel,at91rm9200-pmc"; +				reg = <0xfffffc00 0x120>; +			}; + +			rstc@fffffe00 { +				compatible = "atmel,at91sam9g45-rstc"; +				reg = <0xfffffe00 0x10>; +			}; + +			pit: timer@fffffe30 { +				compatible = "atmel,at91sam9260-pit"; +				reg = <0xfffffe30 0xf>; +				interrupts = <3 4 5>; +			}; + +			watchdog@fffffe40 { +				compatible = "atmel,at91sam9260-wdt"; +				reg = <0xfffffe40 0x10>; +				status = "disabled"; +			}; + +			rtc@fffffeb0 { +				compatible = "atmel,at91rm9200-rtc"; +				reg = <0xfffffeb0 0x30>; +				interrupts = <1 4 7>; +			}; +		}; + +		usb0: gadget@00500000 { +			#address-cells = <1>; +			#size-cells = <0>; +			compatible = "atmel,at91sam9rl-udc"; +			reg = <0x00500000 0x100000 +			       0xf8030000 0x4000>; +			interrupts = <33 4 2>; +			status = "disabled"; + +			ep0 { +				reg = <0>; +				atmel,fifo-size = <64>; +				atmel,nb-banks = <1>; +			}; + +			ep1 { +				reg = <1>; +				atmel,fifo-size = <1024>; +				atmel,nb-banks = <3>; +				atmel,can-dma; +				atmel,can-isoc; +			}; + +			ep2 { +				reg = <2>; +				atmel,fifo-size = <1024>; +				atmel,nb-banks = <3>; +				atmel,can-dma; +				atmel,can-isoc; +			}; + +			ep3 { +				reg = <3>; +				atmel,fifo-size = <1024>; +				atmel,nb-banks = <2>; +				atmel,can-dma; +			}; + +			ep4 { +				reg = <4>; +				atmel,fifo-size = <1024>; +				atmel,nb-banks = <2>; +				atmel,can-dma; +			}; + +			ep5 { +				reg = <5>; +				atmel,fifo-size = <1024>; +				atmel,nb-banks = <2>; +				atmel,can-dma; +			}; + +			ep6 { +				reg = <6>; +				atmel,fifo-size = <1024>; +				atmel,nb-banks = <2>; +				atmel,can-dma; +			}; + +			ep7 { +				reg = <7>; +				atmel,fifo-size = <1024>; +				atmel,nb-banks = <2>; +				atmel,can-dma; +			}; + +			ep8 { +				reg = <8>; +				atmel,fifo-size = <1024>; +				atmel,nb-banks = <2>; +			}; + +			ep9 { +				reg = <9>; +				atmel,fifo-size = <1024>; +				atmel,nb-banks = <2>; +			}; + +			ep10 { +				reg = <10>; +				atmel,fifo-size = <1024>; +				atmel,nb-banks = <2>; +			}; + +			ep11 { +				reg = <11>; +				atmel,fifo-size = <1024>; +				atmel,nb-banks = <2>; +			}; + +			ep12 { +				reg = <12>; +				atmel,fifo-size = <1024>; +				atmel,nb-banks = <2>; +			}; + +			ep13 { +				reg = <13>; +				atmel,fifo-size = <1024>; +				atmel,nb-banks = <2>; +			}; + +			ep14 { +				reg = <14>; +				atmel,fifo-size = <1024>; +				atmel,nb-banks = <2>; +			}; + +			ep15 { +				reg = <15>; +				atmel,fifo-size = <1024>; +				atmel,nb-banks = <2>; +			}; +		}; + +		usb1: ohci@00600000 { +			compatible = "atmel,at91rm9200-ohci", "usb-ohci"; +			reg = <0x00600000 0x100000>; +			interrupts = <32 4 2>; +			status = "disabled"; +		}; + +		usb2: ehci@00700000 { +			compatible = "atmel,at91sam9g45-ehci", "usb-ehci"; +			reg = <0x00700000 0x100000>; +			interrupts = <32 4 2>; +			status = "disabled"; +		}; + +		nand0: nand@60000000 { +			compatible = "atmel,at91rm9200-nand"; +			#address-cells = <1>; +			#size-cells = <1>; +			reg = <	0x60000000 0x01000000	/* EBI CS3 */ +				0xffffc070 0x00000490	/* SMC PMECC regs */ +				0xffffc500 0x00000100	/* SMC PMECC Error Location regs */ +				0x00100000 0x00100000	/* ROM code */ +				0x70000000 0x10000000	/* NFC Command Registers */ +				0xffffc000 0x00000070	/* NFC HSMC regs */ +				0x00200000 0x00100000	/* NFC SRAM banks */ +				>; +			interrupts = <5 4 6>; +			atmel,nand-addr-offset = <21>; +			atmel,nand-cmd-offset = <22>; +			pinctrl-names = "default"; +			pinctrl-0 = <&pinctrl_nand0_ale_cle>; +			atmel,pmecc-lookup-table-offset = <0x10000 0x18000>; +			status = "disabled"; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/sama5d31ek.dts b/arch/arm/boot/dts/sama5d31ek.dts new file mode 100644 index 00000000000..fa5d216f1db --- /dev/null +++ b/arch/arm/boot/dts/sama5d31ek.dts @@ -0,0 +1,51 @@ +/* + * sama5d31ek.dts - Device Tree file for SAMA5D31-EK board + * + *  Copyright (C) 2013 Atmel, + *                2013 Ludovic Desroches <ludovic.desroches@atmel.com> + * + * Licensed under GPLv2 or later. + */ +/dts-v1/; +/include/ "sama5d3xmb.dtsi" +/include/ "sama5d3xdm.dtsi" + +/ { +	model = "Atmel SAMA5D31-EK"; +	compatible = "atmel,sama5d31ek", "atmel,sama5d3xmb", "atmel,sama5d3xcm", "atmel,sama5d3", "atmel,sama5"; + +	ahb { +		apb { +			spi0: spi@f0004000 { +				status = "okay"; +			}; + +			ssc0: ssc@f0008000 { +				status = "okay"; +			}; + +			i2c0: i2c@f0014000 { +				status = "okay"; +			}; + +			i2c1: i2c@f0018000 { +				status = "okay"; +			}; + +			macb1: ethernet@f802c000 { +				status = "okay"; +			}; +		}; +	}; + +	leds { +		d3 { +			label = "d3"; +			gpios = <&pioE 24 0>; +		}; +	}; + +	sound { +		status = "okay"; +	}; +}; diff --git a/arch/arm/boot/dts/sama5d33ek.dts b/arch/arm/boot/dts/sama5d33ek.dts new file mode 100644 index 00000000000..c38c9433d7a --- /dev/null +++ b/arch/arm/boot/dts/sama5d33ek.dts @@ -0,0 +1,44 @@ +/* + * sama5d33ek.dts - Device Tree file for SAMA5D33-EK board + * + *  Copyright (C) 2013 Atmel, + *                2013 Ludovic Desroches <ludovic.desroches@atmel.com> + * + * Licensed under GPLv2 or later. + */ +/dts-v1/; +/include/ "sama5d3xmb.dtsi" +/include/ "sama5d3xdm.dtsi" + +/ { +	model = "Atmel SAMA5D33-EK"; +	compatible = "atmel,sama5d33ek", "atmel,sama5d3xmb", "atmel,sama5d3xcm", "atmel,sama5d3", "atmel,sama5"; + +	ahb { +		apb { +			spi0: spi@f0004000 { +				status = "okay"; +			}; + +			ssc0: ssc@f0008000 { +				status = "okay"; +			}; + +			i2c0: i2c@f0014000 { +				status = "okay"; +			}; + +			i2c1: i2c@f0018000 { +				status = "okay"; +			}; + +			macb0: ethernet@f0028000 { +				status = "okay"; +			}; +		}; +	}; + +	sound { +		status = "okay"; +	}; +}; diff --git a/arch/arm/boot/dts/sama5d34ek.dts b/arch/arm/boot/dts/sama5d34ek.dts new file mode 100644 index 00000000000..d2739f8d7ae --- /dev/null +++ b/arch/arm/boot/dts/sama5d34ek.dts @@ -0,0 +1,61 @@ +/* + * sama5d34ek.dts - Device Tree file for SAMA5D34-EK board + * + *  Copyright (C) 2013 Atmel, + *                2013 Ludovic Desroches <ludovic.desroches@atmel.com> + * + * Licensed under GPLv2 or later. + */ +/dts-v1/; +/include/ "sama5d3xmb.dtsi" +/include/ "sama5d3xdm.dtsi" + +/ { +	model = "Atmel SAMA5D34-EK"; +	compatible = "atmel,sama5d34ek", "atmel,sama5ek", "atmel,sama5d3xmb", "atmel,sama5d3xcm", "atmel,sama5d3", "atmel,sama5"; + +	ahb { +		apb { +			spi0: spi@f0004000 { +				status = "okay"; +			}; + +			ssc0: ssc@f0008000 { +				status = "okay"; +			}; + +			can0: can@f000c000 { +				status = "okay"; +			}; + +			i2c0: i2c@f0014000 { +				status = "okay"; +			}; + +			i2c1: i2c@f0018000 { +				status = "okay"; + +				24c256@50 { +					compatible = "24c256"; +					reg = <0x50>; +					pagesize = <64>; +				}; +			}; + +			macb0: ethernet@f0028000 { +				status = "okay"; +			}; +		}; +	}; + +	leds { +		d3 { +			label = "d3"; +			gpios = <&pioE 24 0>; +		}; +	}; + +	sound { +		status = "okay"; +	}; +}; diff --git a/arch/arm/boot/dts/sama5d35ek.dts b/arch/arm/boot/dts/sama5d35ek.dts new file mode 100644 index 00000000000..a488fc4e977 --- /dev/null +++ b/arch/arm/boot/dts/sama5d35ek.dts @@ -0,0 +1,56 @@ +/* + * sama5d35ek.dts - Device Tree file for SAMA5D35-EK board + * + *  Copyright (C) 2013 Atmel, + *                2013 Ludovic Desroches <ludovic.desroches@atmel.com> + * + * Licensed under GPLv2 or later. + */ +/dts-v1/; +/include/ "sama5d3xmb.dtsi" + +/ { +	model = "Atmel SAMA5D35-EK"; +	compatible = "atmel,sama5d35ek", "atmel,sama5d3xmb", "atmel,sama5d3xcm", "atmel,sama5d3", "atmel,sama5"; + +	ahb { +		apb { +			spi0: spi@f0004000 { +				status = "okay"; +			}; + +			can0: can@f000c000 { +				status = "okay"; +			}; + +			i2c1: i2c@f0018000 { +				status = "okay"; +			}; + +			macb0: ethernet@f0028000 { +				status = "okay"; +			}; + +			isi: isi@f0034000 { +				status = "okay"; +			}; + +			macb1: ethernet@f802c000 { +				status = "okay"; +			}; +		}; +	}; + +	gpio_keys { +		compatible = "gpio-keys"; +		#address-cells = <1>; +		#size-cells = <0>; + +		pb_user1 { +			label = "pb_user1"; +			gpios = <&pioE 27 0>; +			linux,code = <0x100>; +			gpio-key,wakeup; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/sama5d3xcm.dtsi b/arch/arm/boot/dts/sama5d3xcm.dtsi new file mode 100644 index 00000000000..1f8ed404626 --- /dev/null +++ b/arch/arm/boot/dts/sama5d3xcm.dtsi @@ -0,0 +1,91 @@ +/* + * sama5d3xcm.dtsi - Device Tree Include file for SAMA5D3x CPU Module + * + *  Copyright (C) 2013 Atmel, + *                2013 Ludovic Desroches <ludovic.desroches@atmel.com> + * + * Licensed under GPLv2 or later. + */ +/include/ "sama5d3.dtsi" + +/ { +	compatible = "atmel,samad3xcm", "atmel,sama5d3", "atmel,sama5"; + +	chosen { +		bootargs = "console=ttyS0,115200 rootfstype=ubifs ubi.mtd=5 root=ubi0:rootfs"; +	}; + +	memory { +		reg = <0x20000000 0x20000000>; +	}; + +	clocks { +		#address-cells = <1>; +		#size-cells = <1>; +		ranges; + +		main_clock: clock@0 { +			compatible = "atmel,osc", "fixed-clock"; +			clock-frequency = <12000000>; +		}; +	}; + +	ahb { +		apb { +			macb0: ethernet@f0028000 { +				phy-mode = "rgmii"; +			}; +		}; + +		nand0: nand@60000000 { +			nand-bus-width = <8>; +			nand-ecc-mode = "hw"; +			atmel,has-pmecc; +			atmel,pmecc-cap = <4>; +			atmel,pmecc-sector-size = <512>; +			atmel,has-nfc; +			atmel,use-nfc-sram; +			nand-on-flash-bbt; +			status = "okay"; + +			at91bootstrap@0 { +				label = "at91bootstrap"; +				reg = <0x0 0x40000>; +			}; + +			bootloader@40000 { +				label = "bootloader"; +				reg = <0x40000 0x80000>; +			}; + +			bootloaderenv@c0000 { +				label = "bootloader env"; +				reg = <0xc0000 0xc0000>; +			}; + +			dtb@180000 { +				label = "device tree"; +				reg = <0x180000 0x80000>; +			}; + +			kernel@200000 { +				label = "kernel"; +				reg = <0x200000 0x600000>; +			}; + +			rootfs@800000 { +				label = "rootfs"; +				reg = <0x800000 0x0f800000>; +			}; +		}; +	}; + +	leds { +		compatible = "gpio-leds"; + +		d2 { +			label = "d2"; +			gpios = <&pioE 25 1>;	/* PE25, conflicts with A25, RXD2 */ +		}; +	}; +}; diff --git a/arch/arm/boot/dts/sama5d3xdm.dtsi b/arch/arm/boot/dts/sama5d3xdm.dtsi new file mode 100644 index 00000000000..4b8830eb206 --- /dev/null +++ b/arch/arm/boot/dts/sama5d3xdm.dtsi @@ -0,0 +1,42 @@ +/* + * sama5d3dm.dtsi - Device Tree file for SAMA5 display module + * + *  Copyright (C) 2013 Atmel, + *                2013 Ludovic Desroches <ludovic.desroches@atmel.com> + * + * Licensed under GPLv2 or later. + */ + +/ { +	ahb { +		apb { +			i2c1: i2c@f0018000 { +				qt1070: keyboard@1b { +					compatible = "qt1070"; +					reg = <0x1b>; +					interrupt-parent = <&pioE>; +					interrupts = <31 0x0>; +					pinctrl-names = "default"; +					pinctrl-0 = <&pinctrl_qt1070_irq>; +				}; +			}; + +			adc0: adc@f8018000 { +				status = "disabled"; +			}; + +			tsadcc: tsadcc@f8018000 { +				status = "okay"; +			}; + +			pinctrl@fffff200 { +				board { +					pinctrl_qt1070_irq: qt1070_irq { +						atmel,pins = +							<4 31 0x0 0x5>; /* PE31 GPIO with pull up deglith */ +					}; +				}; +			}; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/sama5d3xmb.dtsi b/arch/arm/boot/dts/sama5d3xmb.dtsi new file mode 100644 index 00000000000..661d7ca9c30 --- /dev/null +++ b/arch/arm/boot/dts/sama5d3xmb.dtsi @@ -0,0 +1,166 @@ +/* + * sama5d3xmb.dts - Device Tree file for SAMA5D3x mother board + * + *  Copyright (C) 2013 Atmel, + *                2013 Ludovic Desroches <ludovic.desroches@atmel.com> + * + * Licensed under GPLv2 or later. + */ +/include/ "sama5d3xcm.dtsi" + +/ { +	compatible = "atmel,sama5d3xmb", "atmel,sama5d3xcm", "atmel,sama5d3", "atmel,sama5"; + +	ahb { +		apb { +			mmc0: mmc@f0000000 { +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0 &pinctrl_mmc0_dat1_3 &pinctrl_mmc0_cd>; +				status = "okay"; +				slot@0 { +					reg = <0>; +					bus-width = <4>; +					cd-gpios = <&pioD 17 0>; +				}; +			}; + +			spi0: spi@f0004000 { +				m25p80@0 { +					compatible = "atmel,at25df321a"; +					spi-max-frequency = <50000000>; +					reg = <0>; +				}; +			}; + +			/* +			 * i2c0 conflicts with ISI: +			 * disable it to allow the use of ISI +			 * can not enable audio when i2c0 disabled +			 */ +			i2c0: i2c@f0014000 { +				wm8904: wm8904@1a { +					compatible = "wm8904"; +					reg = <0x1a>; +				}; +			}; + +			usart1: serial@f0020000 { +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_usart1 &pinctrl_usart1_rts_cts>; +				status = "okay"; +			}; + +			isi: isi@f0034000 { +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_isi &pinctrl_isi_pck_as_mck &pinctrl_isi_power &pinctrl_isi_reset>; +			}; + +			mmc1: mmc@f8000000 { +				pinctrl-names = "default"; +				pinctrl-0 = <&pinctrl_mmc1_clk_cmd_dat0 &pinctrl_mmc1_dat1_3 &pinctrl_mmc1_cd>; +				status = "okay"; +				slot@0 { +					reg = <0>; +					bus-width = <4>; +					cd-gpios = <&pioD 18 0>; +				}; +			}; + +			adc0: adc@f8018000 { +				pinctrl-names = "default"; +				pinctrl-0 = < +					&pinctrl_adc0_adtrg +					&pinctrl_adc0_ad0 +					&pinctrl_adc0_ad1 +					&pinctrl_adc0_ad2 +					&pinctrl_adc0_ad3 +					&pinctrl_adc0_ad4 +					>; +				status = "okay"; +			}; + +			macb1: ethernet@f802c000 { +				phy-mode = "rmii"; +			}; + +			pinctrl@fffff200 { +				board { +					pinctrl_mmc0_cd: mmc0_cd { +						atmel,pins = +							<3 17 0x0 0x5>; /* PD17 GPIO with pullup deglitch */ +					}; + +					pinctrl_mmc1_cd: mmc1_cd { +						atmel,pins = +							<3 18 0x0 0x5>; /* PD18 GPIO with pullup deglitch */ +					}; + +					pinctrl_pck0_as_audio_mck: pck0_as_audio_mck { +						atmel,pins = +							<3 30 0x2 0x0>;	/* PD30 periph B */ +					}; + +					pinctrl_isi_reset: isi_reset-0 { +						atmel,pins = +							<4 24 0x0 0x0>;   /* PE24 gpio */ +					}; + +					pinctrl_isi_power: isi_power-0 { +						atmel,pins = +							<4 29 0x0 0x0>; /* PE29 gpio */ +					}; + +					pinctrl_usba_vbus: usba_vbus { +						atmel,pins = +							<3 29 0x0 0x4>; /* PD29 GPIO with deglitch */ +					}; +				}; +			}; + +			dbgu: serial@ffffee00 { +				status = "okay"; +			}; + +			watchdog@fffffe40 { +				status = "okay"; +			}; +		}; + +		usb0: gadget@00500000 { +			atmel,vbus-gpio = <&pioD 29 0>; +			pinctrl-names = "default"; +			pinctrl-0 = <&pinctrl_usba_vbus>; +			status = "okay"; +		}; + +		usb1: ohci@00600000 { +			num-ports = <3>; +			atmel,vbus-gpio = <&pioD 25 0 +					   &pioD 26 1 +					   &pioD 27 1 +					  >; +			status = "okay"; +		}; + +		usb2: ehci@00700000 { +			status = "okay"; +		}; +	}; + +	sound { +		compatible = "atmel,sama5d3ek-wm8904"; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_pck0_as_audio_mck>; + +		atmel,model = "wm8904 @ SAMA5D3EK"; +		atmel,audio-routing = +			"Headphone Jack", "HPOUTL", +			"Headphone Jack", "HPOUTR", +			"IN2L", "Line In Jack", +			"IN2R", "Line In Jack", +			"IN1L", "Mic"; + +		atmel,ssc-controller = <&ssc0>; +		atmel,audio-codec = <&wm8904>; +	}; +}; diff --git a/arch/arm/boot/dts/skeleton64.dtsi b/arch/arm/boot/dts/skeleton64.dtsi new file mode 100644 index 00000000000..15994158a99 --- /dev/null +++ b/arch/arm/boot/dts/skeleton64.dtsi @@ -0,0 +1,13 @@ +/* + * Skeleton device tree in the 64 bits version; the bare minimum + * needed to boot; just include and add a compatible value.  The + * bootloader will typically populate the memory node. + */ + +/ { +	#address-cells = <2>; +	#size-cells = <2>; +	chosen { }; +	aliases { }; +	memory { device_type = "memory"; reg = <0 0>; }; +}; diff --git a/arch/arm/boot/dts/snowball.dts b/arch/arm/boot/dts/snowball.dts index d3ec32f6b79..db5db24fd54 100644 --- a/arch/arm/boot/dts/snowball.dts +++ b/arch/arm/boot/dts/snowball.dts @@ -299,6 +299,10 @@  			};  			ab8500 { +				ab8500-gpio { +					compatible = "stericsson,ab8500-gpio"; +				}; +  				ab8500-regulators {  					ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {  						regulator-name = "V-DISPLAY"; diff --git a/arch/arm/boot/dts/socfpga.dtsi b/arch/arm/boot/dts/socfpga.dtsi index 7e8769bd597..16a6e13e08b 100644 --- a/arch/arm/boot/dts/socfpga.dtsi +++ b/arch/arm/boot/dts/socfpga.dtsi @@ -81,6 +81,163 @@  			};  		}; +		clkmgr@ffd04000 { +				compatible = "altr,clk-mgr"; +				reg = <0xffd04000 0x1000>; + +				clocks { +					#address-cells = <1>; +					#size-cells = <0>; + +					osc: osc1 { +						#clock-cells = <0>; +						compatible = "fixed-clock"; +					}; + +					main_pll: main_pll { +						#address-cells = <1>; +						#size-cells = <0>; +						#clock-cells = <0>; +						compatible = "altr,socfpga-pll-clock"; +						clocks = <&osc>; +						reg = <0x40>; + +						mpuclk: mpuclk { +							#clock-cells = <0>; +							compatible = "altr,socfpga-perip-clk"; +							clocks = <&main_pll>; +							fixed-divider = <2>; +							reg = <0x48>; +						}; + +						mainclk: mainclk { +							#clock-cells = <0>; +							compatible = "altr,socfpga-perip-clk"; +							clocks = <&main_pll>; +							fixed-divider = <4>; +							reg = <0x4C>; +						}; + +						dbg_base_clk: dbg_base_clk { +							#clock-cells = <0>; +							compatible = "altr,socfpga-perip-clk"; +							clocks = <&main_pll>; +							fixed-divider = <4>; +							reg = <0x50>; +						}; + +						main_qspi_clk: main_qspi_clk { +							#clock-cells = <0>; +							compatible = "altr,socfpga-perip-clk"; +							clocks = <&main_pll>; +							reg = <0x54>; +						}; + +						main_nand_sdmmc_clk: main_nand_sdmmc_clk { +							#clock-cells = <0>; +							compatible = "altr,socfpga-perip-clk"; +							clocks = <&main_pll>; +							reg = <0x58>; +						}; + +						cfg_s2f_usr0_clk: cfg_s2f_usr0_clk { +							#clock-cells = <0>; +							compatible = "altr,socfpga-perip-clk"; +							clocks = <&main_pll>; +							reg = <0x5C>; +						}; +					}; + +					periph_pll: periph_pll { +						#address-cells = <1>; +						#size-cells = <0>; +						#clock-cells = <0>; +						compatible = "altr,socfpga-pll-clock"; +						clocks = <&osc>; +						reg = <0x80>; + +						emac0_clk: emac0_clk { +							#clock-cells = <0>; +							compatible = "altr,socfpga-perip-clk"; +							clocks = <&periph_pll>; +							reg = <0x88>; +						}; + +						emac1_clk: emac1_clk { +							#clock-cells = <0>; +							compatible = "altr,socfpga-perip-clk"; +							clocks = <&periph_pll>; +							reg = <0x8C>; +						}; + +						per_qspi_clk: per_qsi_clk { +							#clock-cells = <0>; +							compatible = "altr,socfpga-perip-clk"; +							clocks = <&periph_pll>; +							reg = <0x90>; +						}; + +						per_nand_mmc_clk: per_nand_mmc_clk { +							#clock-cells = <0>; +							compatible = "altr,socfpga-perip-clk"; +							clocks = <&periph_pll>; +							reg = <0x94>; +						}; + +						per_base_clk: per_base_clk { +							#clock-cells = <0>; +							compatible = "altr,socfpga-perip-clk"; +							clocks = <&periph_pll>; +							reg = <0x98>; +						}; + +						s2f_usr1_clk: s2f_usr1_clk { +							#clock-cells = <0>; +							compatible = "altr,socfpga-perip-clk"; +							clocks = <&periph_pll>; +							reg = <0x9C>; +						}; +					}; + +					sdram_pll: sdram_pll { +						#address-cells = <1>; +						#size-cells = <0>; +						#clock-cells = <0>; +						compatible = "altr,socfpga-pll-clock"; +						clocks = <&osc>; +						reg = <0xC0>; + +						ddr_dqs_clk: ddr_dqs_clk { +							#clock-cells = <0>; +							compatible = "altr,socfpga-perip-clk"; +							clocks = <&sdram_pll>; +							reg = <0xC8>; +						}; + +						ddr_2x_dqs_clk: ddr_2x_dqs_clk { +							#clock-cells = <0>; +							compatible = "altr,socfpga-perip-clk"; +							clocks = <&sdram_pll>; +							reg = <0xCC>; +						}; + +						ddr_dq_clk: ddr_dq_clk { +							#clock-cells = <0>; +							compatible = "altr,socfpga-perip-clk"; +							clocks = <&sdram_pll>; +							reg = <0xD0>; +						}; + +						s2f_usr2_clk: s2f_usr2_clk { +							#clock-cells = <0>; +							compatible = "altr,socfpga-perip-clk"; +							clocks = <&sdram_pll>; +							reg = <0xD4>; +						}; +					}; +				}; +			}; +  		gmac0: stmmac@ff700000 {  			compatible = "altr,socfpga-stmmac", "snps,dwmac-3.70a", "snps,dwmac";  			reg = <0xff700000 0x2000>; diff --git a/arch/arm/boot/dts/socfpga_cyclone5.dts b/arch/arm/boot/dts/socfpga_cyclone5.dts index 3ae8a83a087..2495958f101 100644 --- a/arch/arm/boot/dts/socfpga_cyclone5.dts +++ b/arch/arm/boot/dts/socfpga_cyclone5.dts @@ -33,6 +33,14 @@  	};  	soc { +		clkmgr@ffd04000 { +			clocks { +				osc1 { +					clock-frequency = <25000000>; +				}; +			}; +		}; +  		timer0@ffc08000 {  			clock-frequency = <100000000>;  		}; diff --git a/arch/arm/boot/dts/socfpga_vt.dts b/arch/arm/boot/dts/socfpga_vt.dts index 1036eba40bb..0bf035d607f 100644 --- a/arch/arm/boot/dts/socfpga_vt.dts +++ b/arch/arm/boot/dts/socfpga_vt.dts @@ -33,6 +33,14 @@  	};  	soc { +		clkmgr@ffd04000 { +			clocks { +				osc1 { +					clock-frequency = <10000000>; +				}; +			}; +		}; +  		timer0@ffc08000 {  			clock-frequency = <7000000>;  		}; diff --git a/arch/arm/boot/dts/spear1310.dtsi b/arch/arm/boot/dts/spear1310.dtsi index 1513c1927cc..122ae94076c 100644 --- a/arch/arm/boot/dts/spear1310.dtsi +++ b/arch/arm/boot/dts/spear1310.dtsi @@ -89,7 +89,7 @@  		pinmux: pinmux@e0700000 {  			compatible = "st,spear1310-pinmux";  			reg = <0xe0700000 0x1000>; -			#gpio-range-cells = <2>; +			#gpio-range-cells = <3>;  		};  		apb { @@ -212,7 +212,7 @@  				interrupt-controller;  				gpio-controller;  				#gpio-cells = <2>; -				gpio-ranges = <&pinmux 0 246>; +				gpio-ranges = <&pinmux 0 0 246>;  				status = "disabled";  				st-plgpio,ngpio = <246>; diff --git a/arch/arm/boot/dts/spear1340.dtsi b/arch/arm/boot/dts/spear1340.dtsi index 34da11aa679..c511c4772ef 100644 --- a/arch/arm/boot/dts/spear1340.dtsi +++ b/arch/arm/boot/dts/spear1340.dtsi @@ -63,7 +63,7 @@  		pinmux: pinmux@e0700000 {  			compatible = "st,spear1340-pinmux";  			reg = <0xe0700000 0x1000>; -			#gpio-range-cells = <2>; +			#gpio-range-cells = <3>;  		};  		pwm: pwm@e0180000 { @@ -127,7 +127,7 @@  				interrupt-controller;  				gpio-controller;  				#gpio-cells = <2>; -				gpio-ranges = <&pinmux 0 252>; +				gpio-ranges = <&pinmux 0 0 252>;  				status = "disabled";  				st-plgpio,ngpio = <250>; diff --git a/arch/arm/boot/dts/spear310.dtsi b/arch/arm/boot/dts/spear310.dtsi index ab45b8c8198..95372080eea 100644 --- a/arch/arm/boot/dts/spear310.dtsi +++ b/arch/arm/boot/dts/spear310.dtsi @@ -25,7 +25,7 @@  		pinmux: pinmux@b4000000 {  			compatible = "st,spear310-pinmux";  			reg = <0xb4000000 0x1000>; -			#gpio-range-cells = <2>; +			#gpio-range-cells = <3>;  		};  		fsmc: flash@44000000 { @@ -102,7 +102,7 @@  				interrupt-controller;  				gpio-controller;  				#gpio-cells = <2>; -				gpio-ranges = <&pinmux 0 102>; +				gpio-ranges = <&pinmux 0 0 102>;  				status = "disabled";  				st-plgpio,ngpio = <102>; diff --git a/arch/arm/boot/dts/spear320.dtsi b/arch/arm/boot/dts/spear320.dtsi index caa5520b1fd..ffea342aeec 100644 --- a/arch/arm/boot/dts/spear320.dtsi +++ b/arch/arm/boot/dts/spear320.dtsi @@ -24,7 +24,7 @@  		pinmux: pinmux@b3000000 {  			compatible = "st,spear320-pinmux";  			reg = <0xb3000000 0x1000>; -			#gpio-range-cells = <2>; +			#gpio-range-cells = <3>;  		};  		clcd@90000000 { @@ -130,7 +130,7 @@  				interrupt-controller;  				gpio-controller;  				#gpio-cells = <2>; -				gpio-ranges = <&pinmux 0 102>; +				gpio-ranges = <&pinmux 0 0 102>;  				status = "disabled";  				st-plgpio,ngpio = <102>; diff --git a/arch/arm/boot/dts/stuib.dtsi b/arch/arm/boot/dts/stuib.dtsi index 39446a247e7..615392a7567 100644 --- a/arch/arm/boot/dts/stuib.dtsi +++ b/arch/arm/boot/dts/stuib.dtsi @@ -15,7 +15,7 @@  			stmpe1601: stmpe1601@40 {  				compatible = "st,stmpe1601";  				reg = <0x40>; -				interrupts = <26 0x1>; +				interrupts = <26 0x2>;  				interrupt-parent = <&gpio6>;  				interrupt-controller; diff --git a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts index 5cab8254043..b70fe0db6bb 100644 --- a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts +++ b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts @@ -26,13 +26,37 @@  		bootargs = "earlyprintk console=ttyS0,115200";  	}; -	soc { -		uart0: uart@01c28000 { -			status = "okay"; +	soc@01c20000 { +		pinctrl@01c20800 { +			led_pins_cubieboard: led_pins@0 { +				allwinner,pins = "PH20", "PH21"; +				allwinner,function = "gpio_out"; +				allwinner,drive = <1>; +				allwinner,pull = <0>; +			};  		}; -		uart1: uart@01c28400 { +		uart0: serial@01c28000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&uart0_pins_a>;  			status = "okay";  		};  	}; + +	leds { +		compatible = "gpio-leds"; +		pinctrl-names = "default"; +		pinctrl-0 = <&led_pins_cubieboard>; + +		blue { +			label = "cubieboard::blue"; +			gpios = <&pio 7 21 0>; /* LED1 */ +		}; + +		green { +			label = "cubieboard::green"; +			gpios = <&pio 7 20 0>; /* LED2 */ +			linux,default-trigger = "heartbeat"; +		}; +	};  }; diff --git a/arch/arm/boot/dts/sun4i-a10-hackberry.dts b/arch/arm/boot/dts/sun4i-a10-hackberry.dts index f84549ad791..b9efac100c8 100644 --- a/arch/arm/boot/dts/sun4i-a10-hackberry.dts +++ b/arch/arm/boot/dts/sun4i-a10-hackberry.dts @@ -22,8 +22,10 @@  		bootargs = "earlyprintk console=ttyS0,115200";  	}; -	soc { -		uart0: uart@01c28000 { +	soc@01c20000 { +		uart0: serial@01c28000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&uart0_pins_a>;  			status = "okay";  		};  	}; diff --git a/arch/arm/boot/dts/sun4i-a10-mini-xplus.dts b/arch/arm/boot/dts/sun4i-a10-mini-xplus.dts new file mode 100644 index 00000000000..4a7c35d6726 --- /dev/null +++ b/arch/arm/boot/dts/sun4i-a10-mini-xplus.dts @@ -0,0 +1,32 @@ +/* + * Copyright 2012 Maxime Ripard + * + * Maxime Ripard <maxime.ripard@free-electrons.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 + */ + +/dts-v1/; +/include/ "sun4i-a10.dtsi" + +/ { +	model = "PineRiver Mini X-Plus"; +	compatible = "pineriver,mini-xplus", "allwinner,sun4i-a10"; + +	chosen { +		bootargs = "earlyprintk console=ttyS0,115200"; +	}; + +	soc { +		uart0: uart@01c28000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&uart0_pins_a>; +			status = "okay"; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi index f99f60dadf5..e7ef619a70a 100644 --- a/arch/arm/boot/dts/sun4i-a10.dtsi +++ b/arch/arm/boot/dts/sun4i-a10.dtsi @@ -10,19 +10,174 @@   * http://www.gnu.org/copyleft/gpl.html   */ -/include/ "sunxi.dtsi" +/include/ "skeleton.dtsi"  / { +	interrupt-parent = <&intc>; + +	cpus { +		cpu@0 { +			compatible = "arm,cortex-a8"; +		}; +	}; +  	memory {  		reg = <0x40000000 0x80000000>;  	}; -	soc { -		pinctrl@01c20800 { +	clocks { +		#address-cells = <1>; +		#size-cells = <1>; +		ranges; + +		/* +		 * This is a dummy clock, to be used as placeholder on +		 * other mux clocks when a specific parent clock is not +		 * yet implemented. It should be dropped when the driver +		 * is complete. +		 */ +		dummy: dummy { +			#clock-cells = <0>; +			compatible = "fixed-clock"; +			clock-frequency = <0>; +		}; + +		osc24M: osc24M@01c20050 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-osc-clk"; +			reg = <0x01c20050 0x4>; +			clock-frequency = <24000000>; +		}; + +		osc32k: osc32k { +			#clock-cells = <0>; +			compatible = "fixed-clock"; +			clock-frequency = <32768>; +		}; + +		pll1: pll1@01c20000 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-pll1-clk"; +			reg = <0x01c20000 0x4>; +			clocks = <&osc24M>; +		}; + +		/* dummy is 200M */ +		cpu: cpu@01c20054 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-cpu-clk"; +			reg = <0x01c20054 0x4>; +			clocks = <&osc32k>, <&osc24M>, <&pll1>, <&dummy>; +		}; + +		axi: axi@01c20054 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-axi-clk"; +			reg = <0x01c20054 0x4>; +			clocks = <&cpu>; +		}; + +		axi_gates: axi_gates@01c2005c { +			#clock-cells = <1>; +			compatible = "allwinner,sun4i-axi-gates-clk"; +			reg = <0x01c2005c 0x4>; +			clocks = <&axi>; +			clock-output-names = "axi_dram"; +		}; + +		ahb: ahb@01c20054 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-ahb-clk"; +			reg = <0x01c20054 0x4>; +			clocks = <&axi>; +		}; + +		ahb_gates: ahb_gates@01c20060 { +			#clock-cells = <1>; +			compatible = "allwinner,sun4i-ahb-gates-clk"; +			reg = <0x01c20060 0x8>; +			clocks = <&ahb>; +			clock-output-names = "ahb_usb0", "ahb_ehci0", +				"ahb_ohci0", "ahb_ehci1", "ahb_ohci1", "ahb_ss", +				"ahb_dma", "ahb_bist", "ahb_mmc0", "ahb_mmc1", +				"ahb_mmc2", "ahb_mmc3", "ahb_ms", "ahb_nand", +				"ahb_sdram", "ahb_ace",	"ahb_emac", "ahb_ts", +				"ahb_spi0", "ahb_spi1", "ahb_spi2", "ahb_spi3", +				"ahb_pata", "ahb_sata", "ahb_gps", "ahb_ve", +				"ahb_tvd", "ahb_tve0", "ahb_tve1", "ahb_lcd0", +				"ahb_lcd1", "ahb_csi0", "ahb_csi1", "ahb_hdmi", +				"ahb_de_be0", "ahb_de_be1", "ahb_de_fe0", +				"ahb_de_fe1", "ahb_mp", "ahb_mali400"; +		}; + +		apb0: apb0@01c20054 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-apb0-clk"; +			reg = <0x01c20054 0x4>; +			clocks = <&ahb>; +		}; + +		apb0_gates: apb0_gates@01c20068 { +			#clock-cells = <1>; +			compatible = "allwinner,sun4i-apb0-gates-clk"; +			reg = <0x01c20068 0x4>; +			clocks = <&apb0>; +			clock-output-names = "apb0_codec", "apb0_spdif", +				"apb0_ac97", "apb0_iis", "apb0_pio", "apb0_ir0", +				"apb0_ir1", "apb0_keypad"; +		}; + +		/* dummy is pll62 */ +		apb1_mux: apb1_mux@01c20058 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-apb1-mux-clk"; +			reg = <0x01c20058 0x4>; +			clocks = <&osc24M>, <&dummy>, <&osc32k>; +		}; + +		apb1: apb1@01c20058 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-apb1-clk"; +			reg = <0x01c20058 0x4>; +			clocks = <&apb1_mux>; +		}; + +		apb1_gates: apb1_gates@01c2006c { +			#clock-cells = <1>; +			compatible = "allwinner,sun4i-apb1-gates-clk"; +			reg = <0x01c2006c 0x4>; +			clocks = <&apb1>; +			clock-output-names = "apb1_i2c0", "apb1_i2c1", +				"apb1_i2c2", "apb1_can", "apb1_scr", +				"apb1_ps20", "apb1_ps21", "apb1_uart0", +				"apb1_uart1", "apb1_uart2", "apb1_uart3", +				"apb1_uart4", "apb1_uart5", "apb1_uart6", +				"apb1_uart7"; +		}; +	}; + +	soc@01c20000 { +		compatible = "simple-bus"; +		#address-cells = <1>; +		#size-cells = <1>; +		reg = <0x01c20000 0x300000>; +		ranges; + +		intc: interrupt-controller@01c20400 { +			compatible = "allwinner,sun4i-ic"; +			reg = <0x01c20400 0x400>; +			interrupt-controller; +			#interrupt-cells = <1>; +		}; + +		pio: pinctrl@01c20800 {  			compatible = "allwinner,sun4i-a10-pinctrl";  			reg = <0x01c20800 0x400>; +			clocks = <&apb0_gates 5>; +			gpio-controller;  			#address-cells = <1>;  			#size-cells = <0>; +			#gpio-cells = <3>;  			uart0_pins_a: uart0@0 {  				allwinner,pins = "PB22", "PB23"; @@ -45,5 +200,97 @@  				allwinner,pull = <0>;  			};  		}; + +		timer@01c20c00 { +			compatible = "allwinner,sun4i-timer"; +			reg = <0x01c20c00 0x90>; +			interrupts = <22>; +			clocks = <&osc24M>; +		}; + +		wdt: watchdog@01c20c90 { +			compatible = "allwinner,sun4i-wdt"; +			reg = <0x01c20c90 0x10>; +		}; + +		uart0: serial@01c28000 { +			compatible = "snps,dw-apb-uart"; +			reg = <0x01c28000 0x400>; +			interrupts = <1>; +			reg-shift = <2>; +			reg-io-width = <4>; +			clocks = <&apb1_gates 16>; +			status = "disabled"; +		}; + +		uart1: serial@01c28400 { +			compatible = "snps,dw-apb-uart"; +			reg = <0x01c28400 0x400>; +			interrupts = <2>; +			reg-shift = <2>; +			reg-io-width = <4>; +			clocks = <&apb1_gates 17>; +			status = "disabled"; +		}; + +		uart2: serial@01c28800 { +			compatible = "snps,dw-apb-uart"; +			reg = <0x01c28800 0x400>; +			interrupts = <3>; +			reg-shift = <2>; +			reg-io-width = <4>; +			clocks = <&apb1_gates 18>; +			status = "disabled"; +		}; + +		uart3: serial@01c28c00 { +			compatible = "snps,dw-apb-uart"; +			reg = <0x01c28c00 0x400>; +			interrupts = <4>; +			reg-shift = <2>; +			reg-io-width = <4>; +			clocks = <&apb1_gates 19>; +			status = "disabled"; +		}; + +		uart4: serial@01c29000 { +			compatible = "snps,dw-apb-uart"; +			reg = <0x01c29000 0x400>; +			interrupts = <17>; +			reg-shift = <2>; +			reg-io-width = <4>; +			clocks = <&apb1_gates 20>; +			status = "disabled"; +		}; + +		uart5: serial@01c29400 { +			compatible = "snps,dw-apb-uart"; +			reg = <0x01c29400 0x400>; +			interrupts = <18>; +			reg-shift = <2>; +			reg-io-width = <4>; +			clocks = <&apb1_gates 21>; +			status = "disabled"; +		}; + +		uart6: serial@01c29800 { +			compatible = "snps,dw-apb-uart"; +			reg = <0x01c29800 0x400>; +			interrupts = <19>; +			reg-shift = <2>; +			reg-io-width = <4>; +			clocks = <&apb1_gates 22>; +			status = "disabled"; +		}; + +		uart7: serial@01c29c00 { +			compatible = "snps,dw-apb-uart"; +			reg = <0x01c29c00 0x400>; +			interrupts = <20>; +			reg-shift = <2>; +			reg-io-width = <4>; +			clocks = <&apb1_gates 23>; +			status = "disabled"; +		};  	};  }; diff --git a/arch/arm/boot/dts/sun5i-a13-olinuxino.dts b/arch/arm/boot/dts/sun5i-a13-olinuxino.dts index 4a1e45d4aac..3ca55067f86 100644 --- a/arch/arm/boot/dts/sun5i-a13-olinuxino.dts +++ b/arch/arm/boot/dts/sun5i-a13-olinuxino.dts @@ -22,11 +22,31 @@  		bootargs = "earlyprintk console=ttyS0,115200";  	}; -	soc { -		uart1: uart@01c28400 { +	soc@01c20000 { +		pinctrl@01c20800 { +			led_pins_olinuxino: led_pins@0 { +				allwinner,pins = "PG9"; +				allwinner,function = "gpio_out"; +				allwinner,drive = <1>; +				allwinner,pull = <0>; +			}; +		}; + +		uart1: serial@01c28400 {  			pinctrl-names = "default";  			pinctrl-0 = <&uart1_pins_b>;  			status = "okay";  		};  	}; + +	leds { +		compatible = "gpio-leds"; +		pinctrl-names = "default"; +		pinctrl-0 = <&led_pins_olinuxino>; + +		power { +			gpios = <&pio 6 9 0>; +			default-state = "on"; +		}; +	};  }; diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi index e1121890fb2..31fa38f8cc9 100644 --- a/arch/arm/boot/dts/sun5i-a13.dtsi +++ b/arch/arm/boot/dts/sun5i-a13.dtsi @@ -11,19 +11,174 @@   * http://www.gnu.org/copyleft/gpl.html   */ -/include/ "sunxi.dtsi" +/include/ "skeleton.dtsi"  / { +	interrupt-parent = <&intc>; + +	cpus { +		cpu@0 { +			compatible = "arm,cortex-a8"; +		}; +	}; +  	memory {  		reg = <0x40000000 0x20000000>;  	}; -	soc { -		pinctrl@01c20800 { +	clocks { +		#address-cells = <1>; +		#size-cells = <1>; +		ranges; + +		/* +		 * This is a dummy clock, to be used as placeholder on +		 * other mux clocks when a specific parent clock is not +		 * yet implemented. It should be dropped when the driver +		 * is complete. +		 */ +		dummy: dummy { +			#clock-cells = <0>; +			compatible = "fixed-clock"; +			clock-frequency = <0>; +		}; + +		osc24M: osc24M@01c20050 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-osc-clk"; +			reg = <0x01c20050 0x4>; +			clock-frequency = <24000000>; +		}; + +		osc32k: osc32k { +			#clock-cells = <0>; +			compatible = "fixed-clock"; +			clock-frequency = <32768>; +		}; + +		pll1: pll1@01c20000 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-pll1-clk"; +			reg = <0x01c20000 0x4>; +			clocks = <&osc24M>; +		}; + +		/* dummy is 200M */ +		cpu: cpu@01c20054 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-cpu-clk"; +			reg = <0x01c20054 0x4>; +			clocks = <&osc32k>, <&osc24M>, <&pll1>, <&dummy>; +		}; + +		axi: axi@01c20054 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-axi-clk"; +			reg = <0x01c20054 0x4>; +			clocks = <&cpu>; +		}; + +		axi_gates: axi_gates@01c2005c { +			#clock-cells = <1>; +			compatible = "allwinner,sun4i-axi-gates-clk"; +			reg = <0x01c2005c 0x4>; +			clocks = <&axi>; +			clock-output-names = "axi_dram"; +		}; + +		ahb: ahb@01c20054 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-ahb-clk"; +			reg = <0x01c20054 0x4>; +			clocks = <&axi>; +		}; + +		ahb_gates: ahb_gates@01c20060 { +			#clock-cells = <1>; +			compatible = "allwinner,sun4i-ahb-gates-clk"; +			reg = <0x01c20060 0x8>; +			clocks = <&ahb>; +			clock-output-names = "ahb_usb0", "ahb_ehci0", +				"ahb_ohci0", "ahb_ehci1", "ahb_ohci1", "ahb_ss", +				"ahb_dma", "ahb_bist", "ahb_mmc0", "ahb_mmc1", +				"ahb_mmc2", "ahb_mmc3", "ahb_ms", "ahb_nand", +				"ahb_sdram", "ahb_ace",	"ahb_emac", "ahb_ts", +				"ahb_spi0", "ahb_spi1", "ahb_spi2", "ahb_spi3", +				"ahb_pata", "ahb_sata", "ahb_gps", "ahb_ve", +				"ahb_tvd", "ahb_tve0", "ahb_tve1", "ahb_lcd0", +				"ahb_lcd1", "ahb_csi0", "ahb_csi1", "ahb_hdmi", +				"ahb_de_be0", "ahb_de_be1", "ahb_de_fe0", +				"ahb_de_fe1", "ahb_mp", "ahb_mali400"; +		}; + +		apb0: apb0@01c20054 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-apb0-clk"; +			reg = <0x01c20054 0x4>; +			clocks = <&ahb>; +		}; + +		apb0_gates: apb0_gates@01c20068 { +			#clock-cells = <1>; +			compatible = "allwinner,sun4i-apb0-gates-clk"; +			reg = <0x01c20068 0x4>; +			clocks = <&apb0>; +			clock-output-names = "apb0_codec", "apb0_spdif", +				"apb0_ac97", "apb0_iis", "apb0_pio", "apb0_ir0", +				"apb0_ir1", "apb0_keypad"; +		}; + +		/* dummy is pll62 */ +		apb1_mux: apb1_mux@01c20058 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-apb1-mux-clk"; +			reg = <0x01c20058 0x4>; +			clocks = <&osc24M>, <&dummy>, <&osc32k>; +		}; + +		apb1: apb1@01c20058 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-apb1-clk"; +			reg = <0x01c20058 0x4>; +			clocks = <&apb1_mux>; +		}; + +		apb1_gates: apb1_gates@01c2006c { +			#clock-cells = <1>; +			compatible = "allwinner,sun4i-apb1-gates-clk"; +			reg = <0x01c2006c 0x4>; +			clocks = <&apb1>; +			clock-output-names = "apb1_i2c0", "apb1_i2c1", +				"apb1_i2c2", "apb1_can", "apb1_scr", +				"apb1_ps20", "apb1_ps21", "apb1_uart0", +				"apb1_uart1", "apb1_uart2", "apb1_uart3", +				"apb1_uart4", "apb1_uart5", "apb1_uart6", +				"apb1_uart7"; +		}; +	}; + +	soc@01c20000 { +		compatible = "simple-bus"; +		#address-cells = <1>; +		#size-cells = <1>; +		reg = <0x01c20000 0x300000>; +		ranges; + +		intc: interrupt-controller@01c20400 { +			compatible = "allwinner,sun4i-ic"; +			reg = <0x01c20400 0x400>; +			interrupt-controller; +			#interrupt-cells = <1>; +		}; + +		pio: pinctrl@01c20800 {  			compatible = "allwinner,sun5i-a13-pinctrl";  			reg = <0x01c20800 0x400>; +			clocks = <&apb0_gates 5>; +			gpio-controller;  			#address-cells = <1>;  			#size-cells = <0>; +			#gpio-cells = <3>;  			uart1_pins_a: uart1@0 {  				allwinner,pins = "PE10", "PE11"; @@ -39,5 +194,37 @@  				allwinner,pull = <0>;  			};  		}; + +		timer@01c20c00 { +			compatible = "allwinner,sun4i-timer"; +			reg = <0x01c20c00 0x90>; +			interrupts = <22>; +			clocks = <&osc24M>; +		}; + +		wdt: watchdog@01c20c90 { +			compatible = "allwinner,sun4i-wdt"; +			reg = <0x01c20c90 0x10>; +		}; + +		uart1: serial@01c28400 { +			compatible = "snps,dw-apb-uart"; +			reg = <0x01c28400 0x400>; +			interrupts = <2>; +			reg-shift = <2>; +			reg-io-width = <4>; +			clocks = <&apb1_gates 17>; +			status = "disabled"; +		}; + +		uart3: serial@01c28c00 { +			compatible = "snps,dw-apb-uart"; +			reg = <0x01c28c00 0x400>; +			interrupts = <4>; +			reg-shift = <2>; +			reg-io-width = <4>; +			clocks = <&apb1_gates 19>; +			status = "disabled"; +		};  	};  }; diff --git a/arch/arm/boot/dts/sunxi.dtsi b/arch/arm/boot/dts/sunxi.dtsi deleted file mode 100644 index 8b36abea9f2..00000000000 --- a/arch/arm/boot/dts/sunxi.dtsi +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2012 Maxime Ripard - * - * Maxime Ripard <maxime.ripard@free-electrons.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/ "skeleton.dtsi" - -/ { -	interrupt-parent = <&intc>; - -	cpus { -		cpu@0 { -			compatible = "arm,cortex-a8"; -		}; -	}; - -	clocks { -		#address-cells = <1>; -		#size-cells = <0>; - -		osc: oscillator { -			#clock-cells = <0>; -			compatible = "fixed-clock"; -			clock-frequency = <24000000>; -		}; -	}; - -	soc { -		compatible = "simple-bus"; -		#address-cells = <1>; -		#size-cells = <1>; -		reg = <0x01c20000 0x300000>; -		ranges; - -		timer@01c20c00 { -			compatible = "allwinner,sunxi-timer"; -			reg = <0x01c20c00 0x90>; -			interrupts = <22>; -			clocks = <&osc>; -		}; - -		wdt: watchdog@01c20c90 { -			compatible = "allwinner,sunxi-wdt"; -			reg = <0x01c20c90 0x10>; -		}; - -		intc: interrupt-controller@01c20400 { -			compatible = "allwinner,sunxi-ic"; -			reg = <0x01c20400 0x400>; -			interrupt-controller; -			#interrupt-cells = <1>; -		}; - -		uart0: uart@01c28000 { -			compatible = "snps,dw-apb-uart"; -			reg = <0x01c28000 0x400>; -			interrupts = <1>; -			reg-shift = <2>; -			reg-io-width = <4>; -			clock-frequency = <24000000>; -			status = "disabled"; -		}; - -		uart1: uart@01c28400 { -			compatible = "snps,dw-apb-uart"; -			reg = <0x01c28400 0x400>; -			interrupts = <2>; -			reg-shift = <2>; -			reg-io-width = <4>; -			clock-frequency = <24000000>; -			status = "disabled"; -		}; -	}; -}; diff --git a/arch/arm/boot/dts/tps6507x.dtsi b/arch/arm/boot/dts/tps6507x.dtsi new file mode 100644 index 00000000000..4c326e591e5 --- /dev/null +++ b/arch/arm/boot/dts/tps6507x.dtsi @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ + * + * 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. + */ + +/* + * Integrated Power Management Chip + * http://www.ti.com/lit/ds/symlink/tps65070.pdf + */ + +&tps { +	compatible = "ti,tps6507x"; + +	regulators { +		#address-cells = <1>; +		#size-cells = <0>; + +		vdcdc1_reg: regulator@0 { +			reg = <0>; +			regulator-compatible = "VDCDC1"; +		}; + +		vdcdc2_reg: regulator@1 { +			reg = <1>; +			regulator-compatible = "VDCDC2"; +		}; + +		vdcdc3_reg: regulator@2 { +			reg = <2>; +			regulator-compatible = "VDCDC3"; +		}; + +		ldo1_reg: regulator@3 { +			reg = <3>; +			regulator-compatible = "LDO1"; +		}; + +		ldo2_reg: regulator@4 { +			reg = <4>; +			regulator-compatible = "LDO2"; +		}; + +	}; +}; diff --git a/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts b/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts index 73187173117..9420053acc1 100644 --- a/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts +++ b/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dts @@ -117,7 +117,7 @@  	};  	pmu { -		compatible = "arm,cortex-a15-pmu", "arm,cortex-a9-pmu"; +		compatible = "arm,cortex-a15-pmu";  		interrupts = <0 68 4>,  			     <0 69 4>;  	}; diff --git a/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts b/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts index dfe371ec274..d2803be4e1a 100644 --- a/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts +++ b/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts @@ -134,7 +134,7 @@  	};  	pmu { -		compatible = "arm,cortex-a15-pmu", "arm,cortex-a9-pmu"; +		compatible = "arm,cortex-a15-pmu";  		interrupts = <0 68 4>,  			     <0 69 4>;  	}; diff --git a/arch/arm/boot/dts/vexpress-v2p-ca5s.dts b/arch/arm/boot/dts/vexpress-v2p-ca5s.dts index 6328cbc71d3..c544a550459 100644 --- a/arch/arm/boot/dts/vexpress-v2p-ca5s.dts +++ b/arch/arm/boot/dts/vexpress-v2p-ca5s.dts @@ -111,7 +111,7 @@  	};  	pmu { -		compatible = "arm,cortex-a5-pmu", "arm,cortex-a9-pmu"; +		compatible = "arm,cortex-a5-pmu";  		interrupts = <0 68 4>,  			     <0 69 4>;  	}; diff --git a/arch/arm/boot/dts/vt8500-bv07.dts b/arch/arm/boot/dts/vt8500-bv07.dts index 567cf4e8ab8..877b33afa7e 100644 --- a/arch/arm/boot/dts/vt8500-bv07.dts +++ b/arch/arm/boot/dts/vt8500-bv07.dts @@ -11,26 +11,22 @@  / {  	model = "Benign BV07 Netbook"; +}; -	/* -	 * Display node is based on Sascha Hauer's patch on dri-devel. -	 * Added a bpp property to calculate the size of the framebuffer -	 * until the binding is formalized. -	 */ -	display: display@0 { -		modes { -			mode0: mode@0 { -				hactive = <800>; -				vactive = <480>; -				hback-porch = <88>; -				hfront-porch = <40>; -				hsync-len = <0>; -				vback-porch = <32>; -				vfront-porch = <11>; -				vsync-len = <1>; -				clock = <0>;	/* unused but required */ -				bpp = <16>;	/* non-standard but required */ -			}; +&fb { +	bits-per-pixel = <16>; +	display-timings { +		native-mode = <&timing0>; +		timing0: 800x480 { +			clock-frequency = <0>; /* unused but required */ +			hactive = <800>; +			vactive = <480>; +			hfront-porch = <40>; +			hback-porch = <88>; +			hsync-len = <0>; +			vback-porch = <32>; +			vfront-porch = <11>; +			vsync-len = <1>;  		};  	};  }; diff --git a/arch/arm/boot/dts/vt8500.dtsi b/arch/arm/boot/dts/vt8500.dtsi index e1c3926aca5..4a4b96f6827 100644 --- a/arch/arm/boot/dts/vt8500.dtsi +++ b/arch/arm/boot/dts/vt8500.dtsi @@ -100,12 +100,10 @@  			interrupts = <43>;  		}; -		fb@d800e400 { +		fb: fb@d8050800 {  			compatible = "via,vt8500-fb";  			reg = <0xd800e400 0x400>;  			interrupts = <12>; -			display = <&display>; -			default-mode = <&mode0>;  		};  		ge_rops@d8050400 { diff --git a/arch/arm/boot/dts/wm8505-ref.dts b/arch/arm/boot/dts/wm8505-ref.dts index fd4e248074c..edd2cec3d37 100644 --- a/arch/arm/boot/dts/wm8505-ref.dts +++ b/arch/arm/boot/dts/wm8505-ref.dts @@ -11,26 +11,22 @@  / {  	model = "Wondermedia WM8505 Netbook"; +}; -	/* -	 * Display node is based on Sascha Hauer's patch on dri-devel. -	 * Added a bpp property to calculate the size of the framebuffer -	 * until the binding is formalized. -	 */ -	display: display@0 { -		modes { -			mode0: mode@0 { -				hactive = <800>; -				vactive = <480>; -				hback-porch = <88>; -				hfront-porch = <40>; -				hsync-len = <0>; -				vback-porch = <32>; -				vfront-porch = <11>; -				vsync-len = <1>; -				clock = <0>;	/* unused but required */ -				bpp = <32>;	/* non-standard but required */ -			}; +&fb { +	bits-per-pixel = <32>; +	display-timings { +		native-mode = <&timing0>; +		timing0: 800x480 { +			clock-frequency = <0>; /* unused but required */ +			hactive = <800>; +			vactive = <480>; +			hfront-porch = <40>; +			hback-porch = <88>; +			hsync-len = <0>; +			vback-porch = <32>; +			vfront-porch = <11>; +			vsync-len = <1>;  		};  	};  }; diff --git a/arch/arm/boot/dts/wm8505.dtsi b/arch/arm/boot/dts/wm8505.dtsi index bb92ef8ce66..b2bf359e852 100644 --- a/arch/arm/boot/dts/wm8505.dtsi +++ b/arch/arm/boot/dts/wm8505.dtsi @@ -62,6 +62,19 @@  					clock-frequency = <24000000>;  				}; +				ref25: ref25M { +					#clock-cells = <0>; +					compatible = "fixed-clock"; +					clock-frequency = <25000000>; +				}; + +				pllb: pllb { +					#clock-cells = <0>; +					compatible = "via,vt8500-pll-clock"; +					clocks = <&ref25>; +					reg = <0x204>; +				}; +  				clkuart0: uart0 {  					#clock-cells = <0>;  					compatible = "via,vt8500-device-clock"; @@ -109,6 +122,16 @@  					enable-reg = <0x250>;  					enable-bit = <23>;  				}; + +				clksdhc: sdhc { +					#clock-cells = <0>; +					compatible = "via,vt8500-device-clock"; +					clocks = <&pllb>; +					divisor-reg = <0x328>; +					divisor-mask = <0x3f>; +					enable-reg = <0x254>; +					enable-bit = <18>; +				};  			};  		}; @@ -130,11 +153,9 @@  			interrupts = <0>;  		}; -		fb@d8050800 { +		fb: fb@d8050800 {  			compatible = "wm,wm8505-fb";  			reg = <0xd8050800 0x200>; -			display = <&display>; -			default-mode = <&mode0>;  		};  		ge_rops@d8050400 { @@ -189,5 +210,13 @@  			reg = <0xd8100000 0x10000>;  			interrupts = <48>;  		}; + +		sdhc@d800a000 { +			compatible = "wm,wm8505-sdhc"; +			reg = <0xd800a000 0x1000>; +			interrupts = <20 21>; +			clocks = <&clksdhc>; +			bus-width = <4>; +		};  	};  }; diff --git a/arch/arm/boot/dts/wm8650-mid.dts b/arch/arm/boot/dts/wm8650-mid.dts index cefd938f842..61671a0d9ed 100644 --- a/arch/arm/boot/dts/wm8650-mid.dts +++ b/arch/arm/boot/dts/wm8650-mid.dts @@ -11,26 +11,24 @@  / {  	model = "Wondermedia WM8650-MID Tablet"; +}; + +&fb { +	bits-per-pixel = <16>; -	/* -	 * Display node is based on Sascha Hauer's patch on dri-devel. -	 * Added a bpp property to calculate the size of the framebuffer -	 * until the binding is formalized. -	 */ -	display: display@0 { -		modes { -			mode0: mode@0 { -				hactive = <800>; -				vactive = <480>; -				hback-porch = <88>; -				hfront-porch = <40>; -				hsync-len = <0>; -				vback-porch = <32>; -				vfront-porch = <11>; -				vsync-len = <1>; -				clock = <0>;	/* unused but required */ -				bpp = <16>;	/* non-standard but required */ -			}; +	display-timings { +		native-mode = <&timing0>; +		timing0: 800x480 { +			clock-frequency = <0>; /* unused but required */ +			hactive = <800>; +			vactive = <480>; +			hfront-porch = <40>; +			hback-porch = <88>; +			hsync-len = <0>; +			vback-porch = <32>; +			vfront-porch = <11>; +			vsync-len = <1>;  		};  	};  }; + diff --git a/arch/arm/boot/dts/wm8650.dtsi b/arch/arm/boot/dts/wm8650.dtsi index bb4af580f40..dd8464eeb40 100644 --- a/arch/arm/boot/dts/wm8650.dtsi +++ b/arch/arm/boot/dts/wm8650.dtsi @@ -130,11 +130,9 @@  			interrupts = <43>;  		}; -		fb@d8050800 { +		fb: fb@d8050800 {  			compatible = "wm,wm8505-fb";  			reg = <0xd8050800 0x200>; -			display = <&display>; -			default-mode = <&mode0>;  		};  		ge_rops@d8050400 { diff --git a/arch/arm/boot/dts/wm8850-w70v2.dts b/arch/arm/boot/dts/wm8850-w70v2.dts index fcc660c8954..32d22532cd6 100644 --- a/arch/arm/boot/dts/wm8850-w70v2.dts +++ b/arch/arm/boot/dts/wm8850-w70v2.dts @@ -15,28 +15,6 @@  / {  	model = "Wondermedia WM8850-W70v2 Tablet"; -	/* -	 * Display node is based on Sascha Hauer's patch on dri-devel. -	 * Added a bpp property to calculate the size of the framebuffer -	 * until the binding is formalized. -	 */ -	display: display@0 { -		modes { -			mode0: mode@0 { -				hactive = <800>; -				vactive = <480>; -				hback-porch = <88>; -				hfront-porch = <40>; -				hsync-len = <0>; -				vback-porch = <32>; -				vfront-porch = <11>; -				vsync-len = <1>; -				clock = <0>;	/* unused but required */ -				bpp = <16>;	/* non-standard but required */ -			}; -		}; -	}; -  	backlight {  		compatible = "pwm-backlight";  		pwms = <&pwm 0 50000 1>;	/* duty inverted */ @@ -45,3 +23,21 @@  		default-brightness-level = <5>;  	};  }; + +&fb { +	bits-per-pixel = <16>; +	display-timings { +		native-mode = <&timing0>; +		timing0: 800x480 { +			clock-frequency = <0>; /* unused but required */ +			hactive = <800>; +			vactive = <480>; +			hfront-porch = <40>; +			hback-porch = <88>; +			hsync-len = <0>; +			vback-porch = <32>; +			vfront-porch = <11>; +			vsync-len = <1>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/wm8850.dtsi b/arch/arm/boot/dts/wm8850.dtsi index 11cd180c58d..fc790d0aee6 100644 --- a/arch/arm/boot/dts/wm8850.dtsi +++ b/arch/arm/boot/dts/wm8850.dtsi @@ -137,11 +137,9 @@  			};  		}; -		fb@d8051700 { +		fb: fb@d8051700 {  			compatible = "wm,wm8505-fb";  			reg = <0xd8051700 0x200>; -			display = <&display>; -			default-mode = <&mode0>;  		};  		ge_rops@d8050400 { diff --git a/arch/arm/boot/dts/zynq-7000.dtsi b/arch/arm/boot/dts/zynq-7000.dtsi index 51243db2e9e..748fc347ed1 100644 --- a/arch/arm/boot/dts/zynq-7000.dtsi +++ b/arch/arm/boot/dts/zynq-7000.dtsi @@ -15,6 +15,13 @@  / {  	compatible = "xlnx,zynq-7000"; +	pmu { +		compatible = "arm,cortex-a9-pmu"; +		interrupts = <0 5 4>, <0 6 4>; +		interrupt-parent = <&intc>; +		reg = < 0xf8891000 0x1000 0xf8893000 0x1000 >; +	}; +  	amba {  		compatible = "simple-bus";  		#address-cells = <1>; diff --git a/arch/arm/common/Makefile b/arch/arm/common/Makefile index dc8dd0de5c0..53e68b16319 100644 --- a/arch/arm/common/Makefile +++ b/arch/arm/common/Makefile @@ -11,3 +11,6 @@ obj-$(CONFIG_SHARP_PARAM)	+= sharpsl_param.o  obj-$(CONFIG_SHARP_SCOOP)	+= scoop.o  obj-$(CONFIG_PCI_HOST_ITE8152)  += it8152.o  obj-$(CONFIG_ARM_TIMER_SP804)	+= timer-sp.o +obj-$(CONFIG_MCPM)		+= mcpm_head.o mcpm_entry.o mcpm_platsmp.o vlock.o +AFLAGS_mcpm_head.o		:= -march=armv7-a +AFLAGS_vlock.o			:= -march=armv7-a diff --git a/arch/arm/common/mcpm_entry.c b/arch/arm/common/mcpm_entry.c new file mode 100644 index 00000000000..370236dd1a0 --- /dev/null +++ b/arch/arm/common/mcpm_entry.c @@ -0,0 +1,263 @@ +/* + * arch/arm/common/mcpm_entry.c -- entry point for multi-cluster PM + * + * Created by:  Nicolas Pitre, March 2012 + * Copyright:   (C) 2012-2013  Linaro Limited + * + * 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/kernel.h> +#include <linux/init.h> +#include <linux/irqflags.h> + +#include <asm/mcpm.h> +#include <asm/cacheflush.h> +#include <asm/idmap.h> +#include <asm/cputype.h> + +extern unsigned long mcpm_entry_vectors[MAX_NR_CLUSTERS][MAX_CPUS_PER_CLUSTER]; + +void mcpm_set_entry_vector(unsigned cpu, unsigned cluster, void *ptr) +{ +	unsigned long val = ptr ? virt_to_phys(ptr) : 0; +	mcpm_entry_vectors[cluster][cpu] = val; +	sync_cache_w(&mcpm_entry_vectors[cluster][cpu]); +} + +static const struct mcpm_platform_ops *platform_ops; + +int __init mcpm_platform_register(const struct mcpm_platform_ops *ops) +{ +	if (platform_ops) +		return -EBUSY; +	platform_ops = ops; +	return 0; +} + +int mcpm_cpu_power_up(unsigned int cpu, unsigned int cluster) +{ +	if (!platform_ops) +		return -EUNATCH; /* try not to shadow power_up errors */ +	might_sleep(); +	return platform_ops->power_up(cpu, cluster); +} + +typedef void (*phys_reset_t)(unsigned long); + +void mcpm_cpu_power_down(void) +{ +	phys_reset_t phys_reset; + +	BUG_ON(!platform_ops); +	BUG_ON(!irqs_disabled()); + +	/* +	 * Do this before calling into the power_down method, +	 * as it might not always be safe to do afterwards. +	 */ +	setup_mm_for_reboot(); + +	platform_ops->power_down(); + +	/* +	 * It is possible for a power_up request to happen concurrently +	 * with a power_down request for the same CPU. In this case the +	 * power_down method might not be able to actually enter a +	 * powered down state with the WFI instruction if the power_up +	 * method has removed the required reset condition.  The +	 * power_down method is then allowed to return. We must perform +	 * a re-entry in the kernel as if the power_up method just had +	 * deasserted reset on the CPU. +	 * +	 * To simplify race issues, the platform specific implementation +	 * must accommodate for the possibility of unordered calls to +	 * power_down and power_up with a usage count. Therefore, if a +	 * call to power_up is issued for a CPU that is not down, then +	 * the next call to power_down must not attempt a full shutdown +	 * but only do the minimum (normally disabling L1 cache and CPU +	 * coherency) and return just as if a concurrent power_up request +	 * had happened as described above. +	 */ + +	phys_reset = (phys_reset_t)(unsigned long)virt_to_phys(cpu_reset); +	phys_reset(virt_to_phys(mcpm_entry_point)); + +	/* should never get here */ +	BUG(); +} + +void mcpm_cpu_suspend(u64 expected_residency) +{ +	phys_reset_t phys_reset; + +	BUG_ON(!platform_ops); +	BUG_ON(!irqs_disabled()); + +	/* Very similar to mcpm_cpu_power_down() */ +	setup_mm_for_reboot(); +	platform_ops->suspend(expected_residency); +	phys_reset = (phys_reset_t)(unsigned long)virt_to_phys(cpu_reset); +	phys_reset(virt_to_phys(mcpm_entry_point)); +	BUG(); +} + +int mcpm_cpu_powered_up(void) +{ +	if (!platform_ops) +		return -EUNATCH; +	if (platform_ops->powered_up) +		platform_ops->powered_up(); +	return 0; +} + +struct sync_struct mcpm_sync; + +/* + * __mcpm_cpu_going_down: Indicates that the cpu is being torn down. + *    This must be called at the point of committing to teardown of a CPU. + *    The CPU cache (SCTRL.C bit) is expected to still be active. + */ +void __mcpm_cpu_going_down(unsigned int cpu, unsigned int cluster) +{ +	mcpm_sync.clusters[cluster].cpus[cpu].cpu = CPU_GOING_DOWN; +	sync_cache_w(&mcpm_sync.clusters[cluster].cpus[cpu].cpu); +} + +/* + * __mcpm_cpu_down: Indicates that cpu teardown is complete and that the + *    cluster can be torn down without disrupting this CPU. + *    To avoid deadlocks, this must be called before a CPU is powered down. + *    The CPU cache (SCTRL.C bit) is expected to be off. + *    However L2 cache might or might not be active. + */ +void __mcpm_cpu_down(unsigned int cpu, unsigned int cluster) +{ +	dmb(); +	mcpm_sync.clusters[cluster].cpus[cpu].cpu = CPU_DOWN; +	sync_cache_w(&mcpm_sync.clusters[cluster].cpus[cpu].cpu); +	dsb_sev(); +} + +/* + * __mcpm_outbound_leave_critical: Leave the cluster teardown critical section. + * @state: the final state of the cluster: + *     CLUSTER_UP: no destructive teardown was done and the cluster has been + *         restored to the previous state (CPU cache still active); or + *     CLUSTER_DOWN: the cluster has been torn-down, ready for power-off + *         (CPU cache disabled, L2 cache either enabled or disabled). + */ +void __mcpm_outbound_leave_critical(unsigned int cluster, int state) +{ +	dmb(); +	mcpm_sync.clusters[cluster].cluster = state; +	sync_cache_w(&mcpm_sync.clusters[cluster].cluster); +	dsb_sev(); +} + +/* + * __mcpm_outbound_enter_critical: Enter the cluster teardown critical section. + * This function should be called by the last man, after local CPU teardown + * is complete.  CPU cache expected to be active. + * + * Returns: + *     false: the critical section was not entered because an inbound CPU was + *         observed, or the cluster is already being set up; + *     true: the critical section was entered: it is now safe to tear down the + *         cluster. + */ +bool __mcpm_outbound_enter_critical(unsigned int cpu, unsigned int cluster) +{ +	unsigned int i; +	struct mcpm_sync_struct *c = &mcpm_sync.clusters[cluster]; + +	/* Warn inbound CPUs that the cluster is being torn down: */ +	c->cluster = CLUSTER_GOING_DOWN; +	sync_cache_w(&c->cluster); + +	/* Back out if the inbound cluster is already in the critical region: */ +	sync_cache_r(&c->inbound); +	if (c->inbound == INBOUND_COMING_UP) +		goto abort; + +	/* +	 * Wait for all CPUs to get out of the GOING_DOWN state, so that local +	 * teardown is complete on each CPU before tearing down the cluster. +	 * +	 * If any CPU has been woken up again from the DOWN state, then we +	 * shouldn't be taking the cluster down at all: abort in that case. +	 */ +	sync_cache_r(&c->cpus); +	for (i = 0; i < MAX_CPUS_PER_CLUSTER; i++) { +		int cpustate; + +		if (i == cpu) +			continue; + +		while (1) { +			cpustate = c->cpus[i].cpu; +			if (cpustate != CPU_GOING_DOWN) +				break; + +			wfe(); +			sync_cache_r(&c->cpus[i].cpu); +		} + +		switch (cpustate) { +		case CPU_DOWN: +			continue; + +		default: +			goto abort; +		} +	} + +	return true; + +abort: +	__mcpm_outbound_leave_critical(cluster, CLUSTER_UP); +	return false; +} + +int __mcpm_cluster_state(unsigned int cluster) +{ +	sync_cache_r(&mcpm_sync.clusters[cluster].cluster); +	return mcpm_sync.clusters[cluster].cluster; +} + +extern unsigned long mcpm_power_up_setup_phys; + +int __init mcpm_sync_init( +	void (*power_up_setup)(unsigned int affinity_level)) +{ +	unsigned int i, j, mpidr, this_cluster; + +	BUILD_BUG_ON(MCPM_SYNC_CLUSTER_SIZE * MAX_NR_CLUSTERS != sizeof mcpm_sync); +	BUG_ON((unsigned long)&mcpm_sync & (__CACHE_WRITEBACK_GRANULE - 1)); + +	/* +	 * Set initial CPU and cluster states. +	 * Only one cluster is assumed to be active at this point. +	 */ +	for (i = 0; i < MAX_NR_CLUSTERS; i++) { +		mcpm_sync.clusters[i].cluster = CLUSTER_DOWN; +		mcpm_sync.clusters[i].inbound = INBOUND_NOT_COMING_UP; +		for (j = 0; j < MAX_CPUS_PER_CLUSTER; j++) +			mcpm_sync.clusters[i].cpus[j].cpu = CPU_DOWN; +	} +	mpidr = read_cpuid_mpidr(); +	this_cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1); +	for_each_online_cpu(i) +		mcpm_sync.clusters[this_cluster].cpus[i].cpu = CPU_UP; +	mcpm_sync.clusters[this_cluster].cluster = CLUSTER_UP; +	sync_cache_w(&mcpm_sync); + +	if (power_up_setup) { +		mcpm_power_up_setup_phys = virt_to_phys(power_up_setup); +		sync_cache_w(&mcpm_power_up_setup_phys); +	} + +	return 0; +} diff --git a/arch/arm/common/mcpm_head.S b/arch/arm/common/mcpm_head.S new file mode 100644 index 00000000000..8178705c4b2 --- /dev/null +++ b/arch/arm/common/mcpm_head.S @@ -0,0 +1,219 @@ +/* + * arch/arm/common/mcpm_head.S -- kernel entry point for multi-cluster PM + * + * Created by:  Nicolas Pitre, March 2012 + * Copyright:   (C) 2012-2013  Linaro Limited + * + * 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. + * + * + * Refer to Documentation/arm/cluster-pm-race-avoidance.txt + * for details of the synchronisation algorithms used here. + */ + +#include <linux/linkage.h> +#include <asm/mcpm.h> + +#include "vlock.h" + +.if MCPM_SYNC_CLUSTER_CPUS +.error "cpus must be the first member of struct mcpm_sync_struct" +.endif + +	.macro	pr_dbg	string +#if defined(CONFIG_DEBUG_LL) && defined(DEBUG) +	b	1901f +1902:	.asciz	"CPU" +1903:	.asciz	" cluster" +1904:	.asciz	": \string" +	.align +1901:	adr	r0, 1902b +	bl	printascii +	mov	r0, r9 +	bl	printhex8 +	adr	r0, 1903b +	bl	printascii +	mov	r0, r10 +	bl	printhex8 +	adr	r0, 1904b +	bl	printascii +#endif +	.endm + +	.arm +	.align + +ENTRY(mcpm_entry_point) + + THUMB(	adr	r12, BSYM(1f)	) + THUMB(	bx	r12		) + THUMB(	.thumb			) +1: +	mrc	p15, 0, r0, c0, c0, 5		@ MPIDR +	ubfx	r9, r0, #0, #8			@ r9 = cpu +	ubfx	r10, r0, #8, #8			@ r10 = cluster +	mov	r3, #MAX_CPUS_PER_CLUSTER +	mla	r4, r3, r10, r9			@ r4 = canonical CPU index +	cmp	r4, #(MAX_CPUS_PER_CLUSTER * MAX_NR_CLUSTERS) +	blo	2f + +	/* We didn't expect this CPU.  Try to cheaply make it quiet. */ +1:	wfi +	wfe +	b	1b + +2:	pr_dbg	"kernel mcpm_entry_point\n" + +	/* +	 * MMU is off so we need to get to various variables in a +	 * position independent way. +	 */ +	adr	r5, 3f +	ldmia	r5, {r6, r7, r8, r11} +	add	r6, r5, r6			@ r6 = mcpm_entry_vectors +	ldr	r7, [r5, r7]			@ r7 = mcpm_power_up_setup_phys +	add	r8, r5, r8			@ r8 = mcpm_sync +	add	r11, r5, r11			@ r11 = first_man_locks + +	mov	r0, #MCPM_SYNC_CLUSTER_SIZE +	mla	r8, r0, r10, r8			@ r8 = sync cluster base + +	@ Signal that this CPU is coming UP: +	mov	r0, #CPU_COMING_UP +	mov	r5, #MCPM_SYNC_CPU_SIZE +	mla	r5, r9, r5, r8			@ r5 = sync cpu address +	strb	r0, [r5] + +	@ At this point, the cluster cannot unexpectedly enter the GOING_DOWN +	@ state, because there is at least one active CPU (this CPU). + +	mov	r0, #VLOCK_SIZE +	mla	r11, r0, r10, r11		@ r11 = cluster first man lock +	mov	r0, r11 +	mov	r1, r9				@ cpu +	bl	vlock_trylock			@ implies DMB + +	cmp	r0, #0				@ failed to get the lock? +	bne	mcpm_setup_wait		@ wait for cluster setup if so + +	ldrb	r0, [r8, #MCPM_SYNC_CLUSTER_CLUSTER] +	cmp	r0, #CLUSTER_UP			@ cluster already up? +	bne	mcpm_setup			@ if not, set up the cluster + +	@ Otherwise, release the first man lock and skip setup: +	mov	r0, r11 +	bl	vlock_unlock +	b	mcpm_setup_complete + +mcpm_setup: +	@ Control dependency implies strb not observable before previous ldrb. + +	@ Signal that the cluster is being brought up: +	mov	r0, #INBOUND_COMING_UP +	strb	r0, [r8, #MCPM_SYNC_CLUSTER_INBOUND] +	dmb + +	@ Any CPU trying to take the cluster into CLUSTER_GOING_DOWN from this +	@ point onwards will observe INBOUND_COMING_UP and abort. + +	@ Wait for any previously-pending cluster teardown operations to abort +	@ or complete: +mcpm_teardown_wait: +	ldrb	r0, [r8, #MCPM_SYNC_CLUSTER_CLUSTER] +	cmp	r0, #CLUSTER_GOING_DOWN +	bne	first_man_setup +	wfe +	b	mcpm_teardown_wait + +first_man_setup: +	dmb + +	@ If the outbound gave up before teardown started, skip cluster setup: + +	cmp	r0, #CLUSTER_UP +	beq	mcpm_setup_leave + +	@ power_up_setup is now responsible for setting up the cluster: + +	cmp	r7, #0 +	mov	r0, #1		@ second (cluster) affinity level +	blxne	r7		@ Call power_up_setup if defined +	dmb + +	mov	r0, #CLUSTER_UP +	strb	r0, [r8, #MCPM_SYNC_CLUSTER_CLUSTER] +	dmb + +mcpm_setup_leave: +	@ Leave the cluster setup critical section: + +	mov	r0, #INBOUND_NOT_COMING_UP +	strb	r0, [r8, #MCPM_SYNC_CLUSTER_INBOUND] +	dsb +	sev + +	mov	r0, r11 +	bl	vlock_unlock	@ implies DMB +	b	mcpm_setup_complete + +	@ In the contended case, non-first men wait here for cluster setup +	@ to complete: +mcpm_setup_wait: +	ldrb	r0, [r8, #MCPM_SYNC_CLUSTER_CLUSTER] +	cmp	r0, #CLUSTER_UP +	wfene +	bne	mcpm_setup_wait +	dmb + +mcpm_setup_complete: +	@ If a platform-specific CPU setup hook is needed, it is +	@ called from here. + +	cmp	r7, #0 +	mov	r0, #0		@ first (CPU) affinity level +	blxne	r7		@ Call power_up_setup if defined +	dmb + +	@ Mark the CPU as up: + +	mov	r0, #CPU_UP +	strb	r0, [r5] + +	@ Observability order of CPU_UP and opening of the gate does not matter. + +mcpm_entry_gated: +	ldr	r5, [r6, r4, lsl #2]		@ r5 = CPU entry vector +	cmp	r5, #0 +	wfeeq +	beq	mcpm_entry_gated +	dmb + +	pr_dbg	"released\n" +	bx	r5 + +	.align	2 + +3:	.word	mcpm_entry_vectors - . +	.word	mcpm_power_up_setup_phys - 3b +	.word	mcpm_sync - 3b +	.word	first_man_locks - 3b + +ENDPROC(mcpm_entry_point) + +	.bss + +	.align	CACHE_WRITEBACK_ORDER +	.type	first_man_locks, #object +first_man_locks: +	.space	VLOCK_SIZE * MAX_NR_CLUSTERS +	.align	CACHE_WRITEBACK_ORDER + +	.type	mcpm_entry_vectors, #object +ENTRY(mcpm_entry_vectors) +	.space	4 * MAX_NR_CLUSTERS * MAX_CPUS_PER_CLUSTER + +	.type	mcpm_power_up_setup_phys, #object +ENTRY(mcpm_power_up_setup_phys) +	.space  4		@ set by mcpm_sync_init() diff --git a/arch/arm/common/mcpm_platsmp.c b/arch/arm/common/mcpm_platsmp.c new file mode 100644 index 00000000000..52b88d81b7b --- /dev/null +++ b/arch/arm/common/mcpm_platsmp.c @@ -0,0 +1,92 @@ +/* + * linux/arch/arm/mach-vexpress/mcpm_platsmp.c + * + * Created by:  Nicolas Pitre, November 2012 + * Copyright:   (C) 2012-2013  Linaro Limited + * + * 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. + * + * Code to handle secondary CPU bringup and hotplug for the cluster power API. + */ + +#include <linux/init.h> +#include <linux/smp.h> +#include <linux/spinlock.h> + +#include <linux/irqchip/arm-gic.h> + +#include <asm/mcpm.h> +#include <asm/smp.h> +#include <asm/smp_plat.h> + +static void __init simple_smp_init_cpus(void) +{ +} + +static int __cpuinit mcpm_boot_secondary(unsigned int cpu, struct task_struct *idle) +{ +	unsigned int mpidr, pcpu, pcluster, ret; +	extern void secondary_startup(void); + +	mpidr = cpu_logical_map(cpu); +	pcpu = MPIDR_AFFINITY_LEVEL(mpidr, 0); +	pcluster = MPIDR_AFFINITY_LEVEL(mpidr, 1); +	pr_debug("%s: logical CPU %d is physical CPU %d cluster %d\n", +		 __func__, cpu, pcpu, pcluster); + +	mcpm_set_entry_vector(pcpu, pcluster, NULL); +	ret = mcpm_cpu_power_up(pcpu, pcluster); +	if (ret) +		return ret; +	mcpm_set_entry_vector(pcpu, pcluster, secondary_startup); +	arch_send_wakeup_ipi_mask(cpumask_of(cpu)); +	dsb_sev(); +	return 0; +} + +static void __cpuinit mcpm_secondary_init(unsigned int cpu) +{ +	mcpm_cpu_powered_up(); +	gic_secondary_init(0); +} + +#ifdef CONFIG_HOTPLUG_CPU + +static int mcpm_cpu_disable(unsigned int cpu) +{ +	/* +	 * We assume all CPUs may be shut down. +	 * This would be the hook to use for eventual Secure +	 * OS migration requests as described in the PSCI spec. +	 */ +	return 0; +} + +static void mcpm_cpu_die(unsigned int cpu) +{ +	unsigned int mpidr, pcpu, pcluster; +	mpidr = read_cpuid_mpidr(); +	pcpu = MPIDR_AFFINITY_LEVEL(mpidr, 0); +	pcluster = MPIDR_AFFINITY_LEVEL(mpidr, 1); +	mcpm_set_entry_vector(pcpu, pcluster, NULL); +	mcpm_cpu_power_down(); +} + +#endif + +static struct smp_operations __initdata mcpm_smp_ops = { +	.smp_init_cpus		= simple_smp_init_cpus, +	.smp_boot_secondary	= mcpm_boot_secondary, +	.smp_secondary_init	= mcpm_secondary_init, +#ifdef CONFIG_HOTPLUG_CPU +	.cpu_disable		= mcpm_cpu_disable, +	.cpu_die		= mcpm_cpu_die, +#endif +}; + +void __init mcpm_smp_set_ops(void) +{ +	smp_set_ops(&mcpm_smp_ops); +} diff --git a/arch/arm/common/vlock.S b/arch/arm/common/vlock.S new file mode 100644 index 00000000000..ff198583f68 --- /dev/null +++ b/arch/arm/common/vlock.S @@ -0,0 +1,108 @@ +/* + * vlock.S - simple voting lock implementation for ARM + * + * Created by:	Dave Martin, 2012-08-16 + * Copyright:	(C) 2012-2013  Linaro Limited + * + * 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. + * + * 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. + * + * + * This algorithm is described in more detail in + * Documentation/arm/vlocks.txt. + */ + +#include <linux/linkage.h> +#include "vlock.h" + +/* Select different code if voting flags  can fit in a single word. */ +#if VLOCK_VOTING_SIZE > 4 +#define FEW(x...) +#define MANY(x...) x +#else +#define FEW(x...) x +#define MANY(x...) +#endif + +@ voting lock for first-man coordination + +.macro voting_begin rbase:req, rcpu:req, rscratch:req +	mov	\rscratch, #1 +	strb	\rscratch, [\rbase, \rcpu] +	dmb +.endm + +.macro voting_end rbase:req, rcpu:req, rscratch:req +	dmb +	mov	\rscratch, #0 +	strb	\rscratch, [\rbase, \rcpu] +	dsb +	sev +.endm + +/* + * The vlock structure must reside in Strongly-Ordered or Device memory. + * This implementation deliberately eliminates most of the barriers which + * would be required for other memory types, and assumes that independent + * writes to neighbouring locations within a cacheline do not interfere + * with one another. + */ + +@ r0: lock structure base +@ r1: CPU ID (0-based index within cluster) +ENTRY(vlock_trylock) +	add	r1, r1, #VLOCK_VOTING_OFFSET + +	voting_begin	r0, r1, r2 + +	ldrb	r2, [r0, #VLOCK_OWNER_OFFSET]	@ check whether lock is held +	cmp	r2, #VLOCK_OWNER_NONE +	bne	trylock_fail			@ fail if so + +	@ Control dependency implies strb not observable before previous ldrb. + +	strb	r1, [r0, #VLOCK_OWNER_OFFSET]	@ submit my vote + +	voting_end	r0, r1, r2		@ implies DMB + +	@ Wait for the current round of voting to finish: + + MANY(	mov	r3, #VLOCK_VOTING_OFFSET			) +0: + MANY(	ldr	r2, [r0, r3]					) + FEW(	ldr	r2, [r0, #VLOCK_VOTING_OFFSET]			) +	cmp	r2, #0 +	wfene +	bne	0b + MANY(	add	r3, r3, #4					) + MANY(	cmp	r3, #VLOCK_VOTING_OFFSET + VLOCK_VOTING_SIZE	) + MANY(	bne	0b						) + +	@ Check who won: + +	dmb +	ldrb	r2, [r0, #VLOCK_OWNER_OFFSET] +	eor	r0, r1, r2			@ zero if I won, else nonzero +	bx	lr + +trylock_fail: +	voting_end	r0, r1, r2 +	mov	r0, #1				@ nonzero indicates that I lost +	bx	lr +ENDPROC(vlock_trylock) + +@ r0: lock structure base +ENTRY(vlock_unlock) +	dmb +	mov	r1, #VLOCK_OWNER_NONE +	strb	r1, [r0, #VLOCK_OWNER_OFFSET] +	dsb +	sev +	bx	lr +ENDPROC(vlock_unlock) diff --git a/arch/arm/common/vlock.h b/arch/arm/common/vlock.h new file mode 100644 index 00000000000..3b441475a59 --- /dev/null +++ b/arch/arm/common/vlock.h @@ -0,0 +1,29 @@ +/* + * vlock.h - simple voting lock implementation + * + * Created by:	Dave Martin, 2012-08-16 + * Copyright:	(C) 2012-2013  Linaro Limited + * + * 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. + * + * 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. + */ + +#ifndef __VLOCK_H +#define __VLOCK_H + +#include <asm/mcpm.h> + +/* Offsets and sizes are rounded to a word (4 bytes) */ +#define VLOCK_OWNER_OFFSET	0 +#define VLOCK_VOTING_OFFSET	4 +#define VLOCK_VOTING_SIZE	((MAX_CPUS_PER_CLUSTER + 3) / 4 * 4) +#define VLOCK_SIZE		(VLOCK_VOTING_OFFSET + VLOCK_VOTING_SIZE) +#define VLOCK_OWNER_NONE	0 + +#endif /* ! __VLOCK_H */ diff --git a/arch/arm/configs/ape6evm_defconfig b/arch/arm/configs/ape6evm_defconfig new file mode 100644 index 00000000000..dab5a7dfadc --- /dev/null +++ b/arch/arm/configs/ape6evm_defconfig @@ -0,0 +1,95 @@ +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=16 +CONFIG_CGROUPS=y +CONFIG_CGROUP_SCHED=y +CONFIG_KALLSYMS_ALL=y +CONFIG_EMBEDDED=y +CONFIG_PERF_EVENTS=y +CONFIG_SLAB=y +# CONFIG_BLOCK is not set +CONFIG_ARCH_SHMOBILE=y +CONFIG_ARCH_R8A73A4=y +CONFIG_MACH_APE6EVM=y +# CONFIG_ARM_THUMB is not set +CONFIG_CPU_BPREDICT_DISABLE=y +CONFIG_PL310_ERRATA_588369=y +CONFIG_ARM_ERRATA_754322=y +CONFIG_SMP=y +CONFIG_SCHED_MC=y +CONFIG_HAVE_ARM_ARCH_TIMER=y +CONFIG_NR_CPUS=8 +CONFIG_AEABI=y +CONFIG_HIGHMEM=y +CONFIG_HIGHPTE=y +# CONFIG_HW_PERF_EVENTS is not set +# CONFIG_COMPACTION is not set +# CONFIG_CROSS_MEMORY_ATTACH is not set +CONFIG_ARM_APPENDED_DTB=y +CONFIG_VFP=y +CONFIG_NEON=y +CONFIG_BINFMT_MISC=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_XFRM_USER=y +CONFIG_NET_KEY=y +CONFIG_NET_KEY_MIGRATE=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +# CONFIG_INET_LRO is not set +# CONFIG_IPV6_SIT is not set +CONFIG_NETFILTER=y +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +# CONFIG_FW_LOADER_USER_HELPER is not set +CONFIG_NETDEVICES=y +# CONFIG_NET_CADENCE is not set +CONFIG_SMC91X=y +CONFIG_SMSC911X=y +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_KEYBOARD is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_SERIO is not set +CONFIG_SERIAL_NONSTANDARD=y +CONFIG_SERIAL_SH_SCI=y +CONFIG_SERIAL_SH_SCI_NR_UARTS=12 +CONFIG_SERIAL_SH_SCI_CONSOLE=y +CONFIG_GPIO_SH_PFC=y +CONFIG_GPIOLIB=y +# CONFIG_HWMON is not set +CONFIG_THERMAL=y +CONFIG_RCAR_THERMAL=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_GPIO=y +# CONFIG_HID is not set +# CONFIG_USB_SUPPORT is not set +# CONFIG_IOMMU_SUPPORT is not set +# CONFIG_DNOTIFY is not set +CONFIG_TMPFS=y +# CONFIG_MISC_FILESYSTEMS is not set +CONFIG_NFS_FS=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +CONFIG_NFS_V4_1=y +CONFIG_ROOT_NFS=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_ENABLE_DEFAULT_TRACERS=y +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_ECB=y +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_MICHAEL_MIC=y +CONFIG_CRYPTO_TWOFISH=y +CONFIG_CRC_CCITT=y +CONFIG_CRC16=y +CONFIG_CRC_T10DIF=y +CONFIG_CRC_ITU_T=y +CONFIG_CRC7=y +CONFIG_LIBCRC32C=y diff --git a/arch/arm/configs/armadillo800eva_defconfig b/arch/arm/configs/armadillo800eva_defconfig index 0b98100d2ae..0f2d80da737 100644 --- a/arch/arm/configs/armadillo800eva_defconfig +++ b/arch/arm/configs/armadillo800eva_defconfig @@ -20,15 +20,19 @@ CONFIG_ARCH_R8A7740=y  CONFIG_MACH_ARMADILLO800EVA=y  # CONFIG_SH_TIMER_TMU is not set  CONFIG_ARM_THUMB=y -CONFIG_CPU_BPREDICT_DISABLE=y  CONFIG_CACHE_L2X0=y  CONFIG_ARM_ERRATA_430973=y  CONFIG_ARM_ERRATA_458693=y  CONFIG_ARM_ERRATA_460075=y +CONFIG_PL310_ERRATA_588369=y  CONFIG_ARM_ERRATA_720789=y +CONFIG_PL310_ERRATA_727915=y  CONFIG_ARM_ERRATA_743622=y  CONFIG_ARM_ERRATA_751472=y +CONFIG_PL310_ERRATA_753970=y  CONFIG_ARM_ERRATA_754322=y +CONFIG_PL310_ERRATA_769419=y +CONFIG_ARM_ERRATA_775420=y  CONFIG_AEABI=y  # CONFIG_OABI_COMPAT is not set  CONFIG_FORCE_MAX_ZONEORDER=13 @@ -37,6 +41,7 @@ CONFIG_ZBOOT_ROM_BSS=0x0  CONFIG_ARM_APPENDED_DTB=y  CONFIG_KEXEC=y  CONFIG_VFP=y +CONFIG_NEON=y  # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set  CONFIG_PM_RUNTIME=y  CONFIG_NET=y @@ -88,6 +93,7 @@ CONFIG_I2C=y  CONFIG_I2C_GPIO=y  CONFIG_I2C_SH_MOBILE=y  # CONFIG_HWMON is not set +CONFIG_REGULATOR=y  CONFIG_MEDIA_SUPPORT=y  CONFIG_VIDEO_DEV=y  CONFIG_MEDIA_CAMERA_SUPPORT=y diff --git a/arch/arm/configs/at91_dt_defconfig b/arch/arm/configs/at91_dt_defconfig index 1ea959019fc..047f2a41530 100644 --- a/arch/arm/configs/at91_dt_defconfig +++ b/arch/arm/configs/at91_dt_defconfig @@ -20,7 +20,7 @@ CONFIG_SOC_AT91SAM9263=y  CONFIG_SOC_AT91SAM9G45=y  CONFIG_SOC_AT91SAM9X5=y  CONFIG_SOC_AT91SAM9N12=y -CONFIG_MACH_AT91SAM_DT=y +CONFIG_MACH_AT91SAM9_DT=y  CONFIG_AT91_PROGRAMMABLE_CLOCKS=y  CONFIG_AT91_TIMER_HZ=128  CONFIG_AEABI=y diff --git a/arch/arm/configs/at91sam9260_defconfig b/arch/arm/configs/at91sam9260_defconfig index 0ea5d2c97fc..05618eb694f 100644 --- a/arch/arm/configs/at91sam9260_defconfig +++ b/arch/arm/configs/at91sam9260_defconfig @@ -22,7 +22,7 @@ CONFIG_MACH_QIL_A9260=y  CONFIG_MACH_CPU9260=y  CONFIG_MACH_FLEXIBITY=y  CONFIG_MACH_SNAPPER_9260=y -CONFIG_MACH_AT91SAM_DT=y +CONFIG_MACH_AT91SAM9_DT=y  CONFIG_AT91_PROGRAMMABLE_CLOCKS=y  # CONFIG_ARM_THUMB is not set  CONFIG_ZBOOT_ROM_TEXT=0x0 diff --git a/arch/arm/configs/at91sam9g20_defconfig b/arch/arm/configs/at91sam9g20_defconfig index 3b1881033ad..892e8287ed7 100644 --- a/arch/arm/configs/at91sam9g20_defconfig +++ b/arch/arm/configs/at91sam9g20_defconfig @@ -22,7 +22,7 @@ CONFIG_MACH_PCONTROL_G20=y  CONFIG_MACH_GSIA18S=y  CONFIG_MACH_USB_A9G20=y  CONFIG_MACH_SNAPPER_9260=y -CONFIG_MACH_AT91SAM_DT=y +CONFIG_MACH_AT91SAM9_DT=y  CONFIG_AT91_PROGRAMMABLE_CLOCKS=y  # CONFIG_ARM_THUMB is not set  CONFIG_AEABI=y diff --git a/arch/arm/configs/at91sam9g45_defconfig b/arch/arm/configs/at91sam9g45_defconfig index 606d48f3b8f..5f551b76cb6 100644 --- a/arch/arm/configs/at91sam9g45_defconfig +++ b/arch/arm/configs/at91sam9g45_defconfig @@ -18,7 +18,7 @@ CONFIG_MODULE_UNLOAD=y  CONFIG_ARCH_AT91=y  CONFIG_ARCH_AT91SAM9G45=y  CONFIG_MACH_AT91SAM9M10G45EK=y -CONFIG_MACH_AT91SAM_DT=y +CONFIG_MACH_AT91SAM9_DT=y  CONFIG_AT91_PROGRAMMABLE_CLOCKS=y  CONFIG_AT91_SLOW_CLOCK=y  CONFIG_AEABI=y diff --git a/arch/arm/configs/bcm2835_defconfig b/arch/arm/configs/bcm2835_defconfig index af472e4ed45..ce987211a60 100644 --- a/arch/arm/configs/bcm2835_defconfig +++ b/arch/arm/configs/bcm2835_defconfig @@ -29,6 +29,8 @@ CONFIG_EMBEDDED=y  CONFIG_PROFILING=y  CONFIG_OPROFILE=y  CONFIG_JUMP_LABEL=y +CONFIG_ARCH_MULTI_V6=y +# CONFIG_ARCH_MULTI_V7 is not set  CONFIG_ARCH_BCM2835=y  CONFIG_PREEMPT_VOLUNTARY=y  CONFIG_AEABI=y @@ -59,10 +61,13 @@ CONFIG_DEVTMPFS_MOUNT=y  CONFIG_SERIAL_AMBA_PL011=y  CONFIG_SERIAL_AMBA_PL011_CONSOLE=y  CONFIG_TTY_PRINTK=y -# CONFIG_HW_RANDOM is not set +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_BCM2835=y  CONFIG_I2C=y  CONFIG_I2C_CHARDEV=y  CONFIG_I2C_BCM2835=y +CONFIG_SPI=y +CONFIG_SPI_BCM2835=y  CONFIG_GPIO_SYSFS=y  # CONFIG_HWMON is not set  # CONFIG_USB_SUPPORT is not set @@ -108,9 +113,5 @@ CONFIG_TEST_KSTRTOX=y  CONFIG_STRICT_DEVMEM=y  CONFIG_DEBUG_LL=y  CONFIG_EARLY_PRINTK=y -# CONFIG_XZ_DEC_X86 is not set -# CONFIG_XZ_DEC_POWERPC is not set -# CONFIG_XZ_DEC_IA64 is not set  # CONFIG_XZ_DEC_ARM is not set  # CONFIG_XZ_DEC_ARMTHUMB is not set -# CONFIG_XZ_DEC_SPARC is not set diff --git a/arch/arm/configs/cns3420vb_defconfig b/arch/arm/configs/cns3420vb_defconfig index 313627adf46..b1ff5cdba9a 100644 --- a/arch/arm/configs/cns3420vb_defconfig +++ b/arch/arm/configs/cns3420vb_defconfig @@ -19,8 +19,11 @@ CONFIG_MODULE_FORCE_UNLOAD=y  CONFIG_MODVERSIONS=y  # CONFIG_BLK_DEV_BSG is not set  CONFIG_IOSCHED_CFQ=m +CONFIG_ARCH_MULTI_V6=y +#CONFIG_ARCH_MULTI_V7 is not set  CONFIG_ARCH_CNS3XXX=y  CONFIG_MACH_CNS3420VB=y +CONFIG_DEBUG_CNS3XXX=y  CONFIG_AEABI=y  CONFIG_ZBOOT_ROM_TEXT=0x0  CONFIG_ZBOOT_ROM_BSS=0x0 diff --git a/arch/arm/configs/dove_defconfig b/arch/arm/configs/dove_defconfig index 3fe8dae8d32..4364eff5b01 100644 --- a/arch/arm/configs/dove_defconfig +++ b/arch/arm/configs/dove_defconfig @@ -75,6 +75,8 @@ CONFIG_I2C_MV64XXX=y  CONFIG_SPI=y  CONFIG_SPI_ORION=y  # CONFIG_HWMON is not set +CONFIG_THERMAL=y +CONFIG_DOVE_THERMAL=y  CONFIG_USB=y  CONFIG_USB_EHCI_HCD=y  CONFIG_USB_EHCI_ROOT_HUB_TT=y diff --git a/arch/arm/configs/h7201_defconfig b/arch/arm/configs/h7201_defconfig deleted file mode 100644 index bee94d29655..00000000000 --- a/arch/arm/configs/h7201_defconfig +++ /dev/null @@ -1,27 +0,0 @@ -CONFIG_EXPERIMENTAL=y -CONFIG_SYSVIPC=y -CONFIG_LOG_BUF_SHIFT=14 -CONFIG_BLK_DEV_INITRD=y -CONFIG_MODULES=y -CONFIG_ARCH_H720X=y -CONFIG_ARCH_H7201=y -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_FPE_NWFPE=y -CONFIG_MTD=y -CONFIG_MTD_DEBUG=y -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -CONFIG_MTD_CFI=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_INTELEXT=y -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=8192 -# CONFIG_INPUT_KEYBOARD is not set -# CONFIG_INPUT_MOUSE is not set -# CONFIG_VGA_CONSOLE is not set -CONFIG_SOUND=m -CONFIG_EXT2_FS=y -CONFIG_JFFS2_FS=y -CONFIG_DEBUG_USER=y diff --git a/arch/arm/configs/h7202_defconfig b/arch/arm/configs/h7202_defconfig deleted file mode 100644 index e16d3f372e2..00000000000 --- a/arch/arm/configs/h7202_defconfig +++ /dev/null @@ -1,47 +0,0 @@ -CONFIG_EXPERIMENTAL=y -CONFIG_SYSVIPC=y -CONFIG_LOG_BUF_SHIFT=14 -CONFIG_MODULES=y -CONFIG_ARCH_H720X=y -CONFIG_ARCH_H7202=y -# CONFIG_ARM_THUMB is not set -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="console=ttyS0,19200" -CONFIG_FPE_NWFPE=y -CONFIG_FPE_NWFPE_XP=y -CONFIG_NET=y -CONFIG_UNIX=y -CONFIG_INET=y -CONFIG_IP_PNP=y -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IPV6 is not set -CONFIG_MTD=y -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_CMDLINE_PARTS=y -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -CONFIG_MTD_CFI=y -CONFIG_MTD_CFI_INTELEXT=y -CONFIG_MTD_H720X=y -CONFIG_NETDEVICES=y -CONFIG_NET_ETHERNET=y -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -CONFIG_FB=y -CONFIG_FB_MODE_HELPERS=y -# CONFIG_VGA_CONSOLE is not set -CONFIG_USB_GADGET=m -CONFIG_USB_ZERO=m -CONFIG_USB_GADGETFS=m -CONFIG_USB_MASS_STORAGE=m -CONFIG_USB_G_SERIAL=m -CONFIG_EXT2_FS=y -CONFIG_TMPFS=y -CONFIG_JFFS2_FS=y -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -CONFIG_MAGIC_SYSRQ=y -CONFIG_DEBUG_KERNEL=y -CONFIG_DEBUG_INFO=y -CONFIG_DEBUG_USER=y diff --git a/arch/arm/configs/imx_v6_v7_defconfig b/arch/arm/configs/imx_v6_v7_defconfig index e36b0102532..088d6c11a0f 100644 --- a/arch/arm/configs/imx_v6_v7_defconfig +++ b/arch/arm/configs/imx_v6_v7_defconfig @@ -188,6 +188,7 @@ CONFIG_USB_EHCI_HCD=y  CONFIG_USB_EHCI_MXC=y  CONFIG_USB_CHIPIDEA=y  CONFIG_USB_CHIPIDEA_HOST=y +CONFIG_USB_PHY=y  CONFIG_USB_MXS_PHY=y  CONFIG_USB_STORAGE=y  CONFIG_MMC=y diff --git a/arch/arm/configs/kirkwood_defconfig b/arch/arm/configs/kirkwood_defconfig index 13482ea58b0..3d8667f648b 100644 --- a/arch/arm/configs/kirkwood_defconfig +++ b/arch/arm/configs/kirkwood_defconfig @@ -56,7 +56,6 @@ CONFIG_AEABI=y  CONFIG_ZBOOT_ROM_TEXT=0x0  CONFIG_ZBOOT_ROM_BSS=0x0  CONFIG_CPU_IDLE=y -CONFIG_CPU_IDLE_KIRKWOOD=y  CONFIG_NET=y  CONFIG_PACKET=y  CONFIG_UNIX=y @@ -119,6 +118,8 @@ CONFIG_SPI=y  CONFIG_SPI_ORION=y  CONFIG_GPIO_SYSFS=y  # CONFIG_HWMON is not set +CONFIG_THERMAL=y +CONFIG_KIRKWOOD_THERMAL=y  CONFIG_WATCHDOG=y  CONFIG_ORION_WATCHDOG=y  CONFIG_HID_DRAGONRISE=y diff --git a/arch/arm/configs/kzm9g_defconfig b/arch/arm/configs/kzm9g_defconfig index 670c3b60f93..f6e585b353a 100644 --- a/arch/arm/configs/kzm9g_defconfig +++ b/arch/arm/configs/kzm9g_defconfig @@ -33,7 +33,6 @@ CONFIG_NO_HZ=y  CONFIG_HIGH_RES_TIMERS=y  CONFIG_SMP=y  CONFIG_SCHED_MC=y -CONFIG_PREEMPT=y  CONFIG_AEABI=y  # CONFIG_OABI_COMPAT is not set  CONFIG_HIGHMEM=y @@ -86,7 +85,6 @@ CONFIG_I2C_SH_MOBILE=y  CONFIG_GPIO_PCF857X=y  # CONFIG_HWMON is not set  CONFIG_REGULATOR=y -CONFIG_REGULATOR_DUMMY=y  CONFIG_FB=y  CONFIG_FB_SH_MOBILE_LCDC=y  CONFIG_FRAMEBUFFER_CONSOLE=y diff --git a/arch/arm/configs/lpc32xx_defconfig b/arch/arm/configs/lpc32xx_defconfig index 92386b20bd0..398a367ffce 100644 --- a/arch/arm/configs/lpc32xx_defconfig +++ b/arch/arm/configs/lpc32xx_defconfig @@ -1,4 +1,3 @@ -CONFIG_EXPERIMENTAL=y  CONFIG_SYSVIPC=y  CONFIG_NO_HZ=y  CONFIG_HIGH_RES_TIMERS=y @@ -18,6 +17,7 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_BLK_DEV_BSG is not set  CONFIG_PARTITION_ADVANCED=y  CONFIG_ARCH_LPC32XX=y +CONFIG_GPIO_PCA953X=y  CONFIG_KEYBOARD_GPIO_POLLED=y  CONFIG_PREEMPT=y  CONFIG_AEABI=y @@ -48,6 +48,8 @@ CONFIG_IPV6=y  CONFIG_IPV6_PRIVACY=y  # CONFIG_WIRELESS is not set  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y  # CONFIG_FW_LOADER is not set  CONFIG_MTD=y  CONFIG_MTD_CMDLINE_PARTS=y @@ -55,7 +57,6 @@ CONFIG_MTD_CHAR=y  CONFIG_MTD_BLOCK=y  CONFIG_MTD_M25P80=y  CONFIG_MTD_NAND=y -CONFIG_MTD_NAND_MUSEUM_IDS=y  CONFIG_MTD_NAND_SLC_LPC32XX=y  CONFIG_MTD_NAND_MLC_LPC32XX=y  CONFIG_BLK_DEV_LOOP=y @@ -70,7 +71,6 @@ CONFIG_BLK_DEV_SD=y  CONFIG_NETDEVICES=y  CONFIG_MII=y  # CONFIG_NET_VENDOR_BROADCOM is not set -# CONFIG_NET_VENDOR_CHELSIO is not set  # CONFIG_NET_VENDOR_CIRRUS is not set  # CONFIG_NET_VENDOR_FARADAY is not set  # CONFIG_NET_VENDOR_INTEL is not set @@ -84,7 +84,6 @@ CONFIG_LPC_ENET=y  # CONFIG_NET_VENDOR_STMICRO is not set  CONFIG_SMSC_PHY=y  # CONFIG_WLAN is not set -CONFIG_INPUT_MATRIXKMAP=y  # CONFIG_INPUT_MOUSEDEV_PSAUX is not set  CONFIG_INPUT_MOUSEDEV_SCREEN_X=240  CONFIG_INPUT_MOUSEDEV_SCREEN_Y=320 @@ -108,6 +107,19 @@ CONFIG_I2C_PNX=y  CONFIG_SPI=y  CONFIG_SPI_PL022=y  CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_GENERIC_PLATFORM=y +CONFIG_GPIO_EM=y +CONFIG_GPIO_PL061=y +CONFIG_GPIO_MAX7300=y +CONFIG_GPIO_MAX732X=y +CONFIG_GPIO_PCF857X=y +CONFIG_GPIO_SX150X=y +CONFIG_GPIO_ADP5588=y +CONFIG_GPIO_ADNP=y +CONFIG_GPIO_MAX7301=y +CONFIG_GPIO_MCP23S08=y +CONFIG_GPIO_MC33880=y +CONFIG_GPIO_74X164=y  CONFIG_SENSORS_DS620=y  CONFIG_SENSORS_MAX6639=y  CONFIG_WATCHDOG=y @@ -134,6 +146,7 @@ CONFIG_SND_DEBUG_VERBOSE=y  # CONFIG_SND_SPI is not set  CONFIG_SND_SOC=y  CONFIG_USB=y +CONFIG_USB_PHY=y  CONFIG_USB_OHCI_HCD=y  CONFIG_USB_STORAGE=y  CONFIG_USB_GADGET=y @@ -143,6 +156,7 @@ CONFIG_USB_G_SERIAL=m  CONFIG_MMC=y  # CONFIG_MMC_BLOCK_BOUNCE is not set  CONFIG_MMC_ARMMMCI=y +CONFIG_MMC_SPI=y  CONFIG_NEW_LEDS=y  CONFIG_LEDS_CLASS=y  CONFIG_LEDS_PCA9532=y diff --git a/arch/arm/configs/mackerel_defconfig b/arch/arm/configs/mackerel_defconfig index 7594b3aff25..9fb11895b2e 100644 --- a/arch/arm/configs/mackerel_defconfig +++ b/arch/arm/configs/mackerel_defconfig @@ -75,6 +75,7 @@ CONFIG_I2C=y  CONFIG_I2C_SH_MOBILE=y  # CONFIG_HWMON is not set  # CONFIG_MFD_SUPPORT is not set +CONFIG_REGULATOR=y  CONFIG_FB=y  CONFIG_FB_MODE_HELPERS=y  CONFIG_FB_SH_MOBILE_LCDC=y @@ -94,6 +95,9 @@ CONFIG_USB_RENESAS_USBHS=y  CONFIG_USB_STORAGE=y  CONFIG_USB_GADGET=y  CONFIG_USB_RENESAS_USBHS_UDC=y +CONFIG_MMC=y +CONFIG_MMC_SDHI=y +CONFIG_MMC_SH_MMCIF=y  CONFIG_DMADEVICES=y  CONFIG_SH_DMAE=y  CONFIG_EXT2_FS=y diff --git a/arch/arm/configs/marzen_defconfig b/arch/arm/configs/marzen_defconfig index afb17d630d4..494e70aeb9e 100644 --- a/arch/arm/configs/marzen_defconfig +++ b/arch/arm/configs/marzen_defconfig @@ -49,6 +49,10 @@ CONFIG_DEVTMPFS_MOUNT=y  # CONFIG_FW_LOADER is not set  CONFIG_SCSI=y  CONFIG_BLK_DEV_SD=y +CONFIG_ATA=y +CONFIG_ATA_SFF=y +CONFIG_ATA_BMDMA=y +CONFIG_SATA_RCAR=y  CONFIG_NETDEVICES=y  # CONFIG_NET_VENDOR_BROADCOM is not set  # CONFIG_NET_VENDOR_FARADAY is not set @@ -75,6 +79,7 @@ CONFIG_I2C_RCAR=y  CONFIG_SPI=y  CONFIG_SPI_SH_HSPI=y  CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_RCAR=y  # CONFIG_HWMON is not set  CONFIG_THERMAL=y  CONFIG_RCAR_THERMAL=y @@ -88,6 +93,9 @@ CONFIG_USB_OHCI_HCD=y  CONFIG_USB_OHCI_HCD_PLATFORM=y  CONFIG_USB_EHCI_HCD_PLATFORM=y  CONFIG_USB_STORAGE=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y  CONFIG_UIO=y  CONFIG_UIO_PDRV_GENIRQ=y  # CONFIG_IOMMU_SUPPORT is not set diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig index e31d442343c..2e67a272df7 100644 --- a/arch/arm/configs/multi_v7_defconfig +++ b/arch/arm/configs/multi_v7_defconfig @@ -3,13 +3,19 @@ CONFIG_NO_HZ=y  CONFIG_HIGH_RES_TIMERS=y  CONFIG_ARCH_MVEBU=y  CONFIG_MACH_ARMADA_370=y +CONFIG_ARCH_SIRF=y  CONFIG_MACH_ARMADA_XP=y  CONFIG_ARCH_HIGHBANK=y  CONFIG_ARCH_SOCFPGA=y  CONFIG_ARCH_SUNXI=y +CONFIG_ARCH_WM8850=y  # CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA is not set  CONFIG_ARCH_ZYNQ=y  CONFIG_ARM_ERRATA_754322=y +CONFIG_PLAT_SPEAR=y +CONFIG_ARCH_SPEAR13XX=y +CONFIG_MACH_SPEAR1310=y +CONFIG_MACH_SPEAR1340=y  CONFIG_SMP=y  CONFIG_ARM_ARCH_TIMER=y  CONFIG_AEABI=y @@ -23,6 +29,7 @@ CONFIG_BLK_DEV_SD=y  CONFIG_ATA=y  CONFIG_SATA_HIGHBANK=y  CONFIG_SATA_MV=y +CONFIG_SATA_AHCI_PLATFORM=y  CONFIG_NETDEVICES=y  CONFIG_NET_CALXEDA_XGMAC=y  CONFIG_SMSC911X=y @@ -31,17 +38,26 @@ CONFIG_SERIO_AMBAKMI=y  CONFIG_SERIAL_8250=y  CONFIG_SERIAL_8250_CONSOLE=y  CONFIG_SERIAL_8250_DW=y +CONFIG_KEYBOARD_SPEAR=y  CONFIG_SERIAL_AMBA_PL011=y  CONFIG_SERIAL_AMBA_PL011_CONSOLE=y  CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_SERIAL_SIRFSOC=y +CONFIG_SERIAL_SIRFSOC_CONSOLE=y +CONFIG_SERIAL_VT8500=y +CONFIG_SERIAL_VT8500_CONSOLE=y  CONFIG_IPMI_HANDLER=y  CONFIG_IPMI_SI=y  CONFIG_I2C=y  CONFIG_I2C_DESIGNWARE_PLATFORM=y +CONFIG_I2C_SIRF=y  CONFIG_SPI=y  CONFIG_SPI_PL022=y +CONFIG_SPI_SIRF=y +CONFIG_GPIO_PL061=y  CONFIG_FB=y  CONFIG_FB_ARMCLCD=y +CONFIG_FB_WM8505=y  CONFIG_FRAMEBUFFER_CONSOLE=y  CONFIG_USB=y  CONFIG_USB_ISP1760_HCD=y @@ -50,11 +66,18 @@ CONFIG_MMC=y  CONFIG_MMC_ARMMMCI=y  CONFIG_MMC_SDHCI=y  CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_SPEAR=y +CONFIG_MMC_WMT=y  CONFIG_EDAC=y  CONFIG_EDAC_MM_EDAC=y  CONFIG_EDAC_HIGHBANK_MC=y  CONFIG_EDAC_HIGHBANK_L2=y  CONFIG_RTC_CLASS=y  CONFIG_RTC_DRV_PL031=y +CONFIG_RTC_DRV_VT8500=y +CONFIG_PWM=y +CONFIG_PWM_VT8500=y  CONFIG_DMADEVICES=y  CONFIG_PL330_DMA=y +CONFIG_SIRF_DMA=y +CONFIG_DW_DMAC=y diff --git a/arch/arm/configs/mvebu_defconfig b/arch/arm/configs/mvebu_defconfig index 2ec8119cff7..f3e8ae001ff 100644 --- a/arch/arm/configs/mvebu_defconfig +++ b/arch/arm/configs/mvebu_defconfig @@ -46,9 +46,16 @@ CONFIG_I2C_MV64XXX=y  CONFIG_MTD=y  CONFIG_MTD_CHAR=y  CONFIG_MTD_M25P80=y +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_INTELEXT=y +CONFIG_MTD_CFI_AMDSTD=y +CONFIG_MTD_CFI_STAA=y +CONFIG_MTD_PHYSMAP_OF=y  CONFIG_SERIAL_8250_DW=y  CONFIG_GPIOLIB=y  CONFIG_GPIO_SYSFS=y +CONFIG_THERMAL=y +CONFIG_ARMADA_THERMAL=y  CONFIG_USB_SUPPORT=y  CONFIG_USB=y  CONFIG_USB_EHCI_HCD=y @@ -65,6 +72,8 @@ CONFIG_RTC_DRV_S35390A=y  CONFIG_RTC_DRV_MV=y  CONFIG_DMADEVICES=y  CONFIG_MV_XOR=y +CONFIG_MEMORY=y +CONFIG_MVEBU_DEVBUS=y  # CONFIG_IOMMU_SUPPORT is not set  CONFIG_EXT2_FS=y  CONFIG_EXT3_FS=y diff --git a/arch/arm/configs/mxs_defconfig b/arch/arm/configs/mxs_defconfig index 6a99e30f81d..1d6d8fb7f4a 100644 --- a/arch/arm/configs/mxs_defconfig +++ b/arch/arm/configs/mxs_defconfig @@ -22,8 +22,8 @@ CONFIG_MODVERSIONS=y  CONFIG_BLK_DEV_INTEGRITY=y  # CONFIG_IOSCHED_DEADLINE is not set  # CONFIG_IOSCHED_CFQ is not set +# CONFIG_ARCH_MULTI_V7 is not set  CONFIG_ARCH_MXS=y -CONFIG_MACH_MXS_DT=y  # CONFIG_ARM_THUMB is not set  CONFIG_PREEMPT_VOLUNTARY=y  CONFIG_AEABI=y @@ -75,7 +75,7 @@ CONFIG_REALTEK_PHY=y  CONFIG_MICREL_PHY=y  # CONFIG_WLAN is not set  # CONFIG_INPUT_MOUSEDEV_PSAUX is not set -CONFIG_INPUT_EVDEV=m +CONFIG_INPUT_EVDEV=y  # CONFIG_INPUT_KEYBOARD is not set  # CONFIG_INPUT_MOUSE is not set  CONFIG_INPUT_TOUCHSCREEN=y @@ -99,6 +99,8 @@ CONFIG_SPI_MXS=y  CONFIG_DEBUG_GPIO=y  CONFIG_GPIO_SYSFS=y  # CONFIG_HWMON is not set +CONFIG_WATCHDOG=y +CONFIG_STMP3XXX_RTC_WATCHDOG=y  CONFIG_REGULATOR=y  CONFIG_REGULATOR_FIXED_VOLTAGE=y  CONFIG_FB=y @@ -120,8 +122,10 @@ CONFIG_USB_EHCI_HCD=y  CONFIG_USB_CHIPIDEA=y  CONFIG_USB_CHIPIDEA_HOST=y  CONFIG_USB_STORAGE=y +CONFIG_USB_PHY=y  CONFIG_USB_MXS_PHY=y  CONFIG_MMC=y +CONFIG_MMC_UNSAFE_RESUME=y  CONFIG_MMC_MXS=y  CONFIG_NEW_LEDS=y  CONFIG_LEDS_CLASS=y diff --git a/arch/arm/configs/nhk8815_defconfig b/arch/arm/configs/nhk8815_defconfig index 86cfd2959c4..b01e7632ed2 100644 --- a/arch/arm/configs/nhk8815_defconfig +++ b/arch/arm/configs/nhk8815_defconfig @@ -1,11 +1,9 @@ -CONFIG_EXPERIMENTAL=y  # CONFIG_LOCALVERSION_AUTO is not set  # CONFIG_SWAP is not set  CONFIG_SYSVIPC=y  CONFIG_IKCONFIG=y  CONFIG_IKCONFIG_PROC=y  CONFIG_LOG_BUF_SHIFT=14 -CONFIG_SYSFS_DEPRECATED_V2=y  CONFIG_BLK_DEV_INITRD=y  CONFIG_EXPERT=y  CONFIG_KALLSYMS_ALL=y @@ -13,6 +11,7 @@ CONFIG_SLAB=y  CONFIG_MODULES=y  CONFIG_MODULE_UNLOAD=y  # CONFIG_BLK_DEV_BSG is not set +# CONFIG_ARCH_MULTI_V7 is not set  CONFIG_ARCH_NOMADIK=y  CONFIG_MACH_NOMADIK_8815NHK=y  CONFIG_PREEMPT=y @@ -20,7 +19,6 @@ CONFIG_AEABI=y  CONFIG_ZBOOT_ROM_TEXT=0x0  CONFIG_ZBOOT_ROM_BSS=0x0  CONFIG_FPE_NWFPE=y -CONFIG_PM=y  CONFIG_NET=y  CONFIG_PACKET=y  CONFIG_UNIX=y @@ -32,14 +30,10 @@ CONFIG_IP_PNP=y  CONFIG_IP_PNP_DHCP=y  CONFIG_IP_PNP_BOOTP=y  CONFIG_NET_IPIP=y -CONFIG_NET_IPGRE=y -CONFIG_NET_IPGRE_BROADCAST=y  CONFIG_IP_MROUTE=y  # CONFIG_INET_LRO is not set  # CONFIG_IPV6 is not set  CONFIG_BT=m -CONFIG_BT_L2CAP=m -CONFIG_BT_SCO=m  CONFIG_BT_RFCOMM=m  CONFIG_BT_RFCOMM_TTY=y  CONFIG_BT_BNEP=m @@ -53,14 +47,16 @@ CONFIG_BT_HCIVHCI=m  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"  CONFIG_MTD=y  CONFIG_MTD_TESTS=m +CONFIG_MTD_CMDLINE_PARTS=y  CONFIG_MTD_CHAR=y  CONFIG_MTD_BLOCK=y -CONFIG_MTD_NAND=y  CONFIG_MTD_NAND_ECC_SMC=y +CONFIG_MTD_NAND=y  CONFIG_MTD_NAND_FSMC=y  CONFIG_MTD_ONENAND=y  CONFIG_MTD_ONENAND_VERIFY_WRITE=y  CONFIG_MTD_ONENAND_GENERIC=y +CONFIG_PROC_DEVICETREE=y  CONFIG_BLK_DEV_LOOP=y  CONFIG_BLK_DEV_CRYPTOLOOP=y  CONFIG_BLK_DEV_RAM=y @@ -72,47 +68,48 @@ CONFIG_SCSI_CONSTANTS=y  CONFIG_SCSI_LOGGING=y  CONFIG_SCSI_SCAN_ASYNC=y  CONFIG_NETDEVICES=y +CONFIG_NETCONSOLE=m  CONFIG_TUN=y -CONFIG_NET_ETHERNET=y  CONFIG_SMC91X=y  CONFIG_PPP=m -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m  CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_DEFLATE=m  CONFIG_PPP_MPPE=m  CONFIG_PPPOE=m -CONFIG_NETCONSOLE=m +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m  # CONFIG_INPUT_MOUSEDEV is not set  CONFIG_INPUT_EVDEV=y  # CONFIG_KEYBOARD_ATKBD is not set  # CONFIG_MOUSE_PS2 is not set  # CONFIG_SERIO is not set +# CONFIG_LEGACY_PTYS is not set  CONFIG_SERIAL_AMBA_PL011=y  CONFIG_SERIAL_AMBA_PL011_CONSOLE=y -# CONFIG_LEGACY_PTYS is not set -# CONFIG_HW_RANDOM is not set -CONFIG_I2C=y +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_NOMADIK=y  CONFIG_I2C_CHARDEV=y  CONFIG_I2C_GPIO=y +CONFIG_I2C_NOMADIK=y  CONFIG_DEBUG_GPIO=y -CONFIG_PINCTRL_NOMADIK=y  # CONFIG_HWMON is not set -# CONFIG_VGA_CONSOLE is not set +CONFIG_MMC=y +CONFIG_MMC_CLKGATE=y +CONFIG_MMC_ARMMMCI=y  CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_PL031=y +CONFIG_DMADEVICES=y +CONFIG_AMBA_PL08X=y  CONFIG_EXT2_FS=y  CONFIG_EXT3_FS=y -CONFIG_INOTIFY=y  CONFIG_FUSE_FS=y  CONFIG_MSDOS_FS=y  CONFIG_VFAT_FS=y  CONFIG_TMPFS=y  CONFIG_JFFS2_FS=y  CONFIG_NFS_FS=y -CONFIG_NFS_V3=y  CONFIG_NFS_V3_ACL=y  CONFIG_ROOT_NFS=y -CONFIG_SMB_FS=m  CONFIG_CIFS=m  CONFIG_CIFS_WEAK_PW_HASH=y  CONFIG_NLS_CODEPAGE_437=y @@ -120,12 +117,11 @@ CONFIG_NLS_ASCII=y  CONFIG_NLS_ISO8859_1=y  CONFIG_NLS_ISO8859_15=y  # CONFIG_ENABLE_MUST_CHECK is not set -CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_FS=y  # CONFIG_SCHED_DEBUG is not set  # CONFIG_DEBUG_PREEMPT is not set  # CONFIG_DEBUG_BUGVERBOSE is not set  CONFIG_DEBUG_INFO=y -# CONFIG_RCU_CPU_STALL_DETECTOR is not set  CONFIG_CRYPTO_MD5=y  CONFIG_CRYPTO_SHA1=y  CONFIG_CRYPTO_DES=y diff --git a/arch/arm/configs/omap1_defconfig b/arch/arm/configs/omap1_defconfig index 42eab9a2a0f..7e0ebb64a7f 100644 --- a/arch/arm/configs/omap1_defconfig +++ b/arch/arm/configs/omap1_defconfig @@ -195,6 +195,7 @@ CONFIG_SND_SOC=y  CONFIG_SND_OMAP_SOC=y  # CONFIG_USB_HID is not set  CONFIG_USB=y +CONFIG_USB_PHY=y  CONFIG_USB_DEBUG=y  CONFIG_USB_DEVICEFS=y  # CONFIG_USB_DEVICE_CLASS is not set diff --git a/arch/arm/configs/sama5_defconfig b/arch/arm/configs/sama5_defconfig new file mode 100644 index 00000000000..4d0dc3c1606 --- /dev/null +++ b/arch/arm/configs/sama5_defconfig @@ -0,0 +1,181 @@ +# CONFIG_LOCALVERSION_AUTO is not set +# CONFIG_SWAP is not set +CONFIG_SYSVIPC=y +CONFIG_IRQ_DOMAIN_DEBUG=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_SYSFS_DEPRECATED=y +CONFIG_SYSFS_DEPRECATED_V2=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_EMBEDDED=y +CONFIG_SLAB=y +CONFIG_MODULES=y +CONFIG_MODULE_FORCE_LOAD=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_LBDAF is not set +# CONFIG_BLK_DEV_BSG is not set +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +CONFIG_ARCH_AT91=y +CONFIG_SOC_SAM_V7=y +CONFIG_SOC_SAMA5D3=y +CONFIG_MACH_SAMA5_DT=y +CONFIG_AT91_PROGRAMMABLE_CLOCKS=y +CONFIG_AEABI=y +# CONFIG_OABI_COMPAT is not set +CONFIG_UACCESS_WITH_MEMCPY=y +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="console=ttyS0,115200 initrd=0x21100000,25165824 root=/dev/ram0 rw" +CONFIG_AUTO_ZRELADDR=y +CONFIG_VFP=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_PM_RUNTIME=y +CONFIG_PM_DEBUG=y +CONFIG_PM_ADVANCED_DEBUG=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_PNP=y +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +# CONFIG_INET_DIAG is not set +CONFIG_IPV6=y +# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET6_XFRM_MODE_TUNNEL is not set +# CONFIG_INET6_XFRM_MODE_BEET is not set +CONFIG_IPV6_SIT_6RD=y +CONFIG_CAN=y +CONFIG_CAN_AT91=y +CONFIG_CFG80211=y +CONFIG_MAC80211=y +CONFIG_MAC80211_LEDS=y +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +# CONFIG_STANDALONE is not set +# CONFIG_PREVENT_FIRMWARE_BUILD is not set +CONFIG_MTD=y +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_CFI=y +CONFIG_MTD_M25P80=y +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_ATMEL=y +CONFIG_MTD_UBI=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=4 +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_ATMEL_TCLIB=y +CONFIG_ATMEL_SSC=y +CONFIG_EEPROM_AT24=y +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_LOWLEVEL is not set +CONFIG_NETDEVICES=y +CONFIG_MII=y +CONFIG_MACB=y +# CONFIG_NET_VENDOR_BROADCOM is not set +# CONFIG_NET_VENDOR_CIRRUS is not set +# CONFIG_NET_VENDOR_FARADAY is not set +# CONFIG_NET_VENDOR_INTEL is not set +# CONFIG_NET_VENDOR_MARVELL is not set +# CONFIG_NET_VENDOR_MICREL is not set +# CONFIG_NET_VENDOR_MICROCHIP is not set +# CONFIG_NET_VENDOR_NATSEMI is not set +# CONFIG_NET_VENDOR_SEEQ is not set +# CONFIG_NET_VENDOR_SMSC is not set +# CONFIG_NET_VENDOR_STMICRO is not set +# CONFIG_NET_VENDOR_WIZNET is not set +CONFIG_MICREL_PHY=y +# CONFIG_WLAN is not set +# CONFIG_INPUT_MOUSEDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_KEYBOARD_ATKBD is not set +CONFIG_KEYBOARD_QT1070=y +CONFIG_KEYBOARD_GPIO=y +# CONFIG_INPUT_MOUSE is not set +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ATMEL_MXT=y +CONFIG_TOUCHSCREEN_ATMEL_TSADCC=y +# CONFIG_SERIO is not set +CONFIG_LEGACY_PTY_COUNT=4 +CONFIG_SERIAL_ATMEL=y +CONFIG_SERIAL_ATMEL_CONSOLE=y +CONFIG_HW_RANDOM=y +CONFIG_I2C=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_AT91=y +CONFIG_I2C_GPIO=y +CONFIG_SPI=y +CONFIG_SPI_ATMEL=y +CONFIG_SPI_GPIO=y +CONFIG_GPIO_SYSFS=y +# CONFIG_HWMON is not set +CONFIG_SSB=m +CONFIG_FB=y +CONFIG_BACKLIGHT_LCD_SUPPORT=y +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_GENERIC is not set +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_HID_GENERIC is not set +CONFIG_USB=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_ACM=y +CONFIG_USB_STORAGE=y +CONFIG_USB_GADGET=y +CONFIG_USB_AT91=y +CONFIG_USB_MASS_STORAGE=m +CONFIG_MMC=y +# CONFIG_MMC_BLOCK_BOUNCE is not set +CONFIG_MMC_ATMELMCI=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_GPIO=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_AT91RM9200=y +CONFIG_DMADEVICES=y +# CONFIG_IOMMU_SUPPORT is not set +CONFIG_IIO=y +CONFIG_AT91_ADC=y +CONFIG_EXT2_FS=y +CONFIG_FANOTIFY=y +CONFIG_VFAT_FS=y +CONFIG_TMPFS=y +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_SUMMARY=y +CONFIG_UBIFS_FS=y +CONFIG_NFS_FS=y +CONFIG_ROOT_NFS=y +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_CODEPAGE_850=y +CONFIG_NLS_ISO8859_1=y +CONFIG_STRIP_ASM_SYMS=y +CONFIG_DEBUG_FS=y +# CONFIG_SCHED_DEBUG is not set +CONFIG_DEBUG_MEMORY_INIT=y +# CONFIG_FTRACE is not set +CONFIG_DEBUG_USER=y +CONFIG_DEBUG_LL=y +CONFIG_EARLY_PRINTK=y +# CONFIG_CRYPTO_ANSI_CPRNG is not set +CONFIG_CRYPTO_USER_API_HASH=m +CONFIG_CRYPTO_USER_API_SKCIPHER=m +CONFIG_CRYPTO_DEV_ATMEL_AES=y +CONFIG_CRYPTO_DEV_ATMEL_TDES=y +CONFIG_CRYPTO_DEV_ATMEL_SHA=y +CONFIG_CRC_CCITT=m +CONFIG_CRC_ITU_T=m diff --git a/arch/arm/configs/spear3xx_defconfig b/arch/arm/configs/spear3xx_defconfig index 865980c5f21..7ff23a077f5 100644 --- a/arch/arm/configs/spear3xx_defconfig +++ b/arch/arm/configs/spear3xx_defconfig @@ -6,7 +6,9 @@ CONFIG_MODULES=y  CONFIG_MODULE_UNLOAD=y  CONFIG_MODVERSIONS=y  CONFIG_PARTITION_ADVANCED=y +# CONFIG_ARCH_MULTI_V7 is not set  CONFIG_PLAT_SPEAR=y +CONFIG_ARCH_SPEAR3XX=y  CONFIG_MACH_SPEAR300=y  CONFIG_MACH_SPEAR310=y  CONFIG_MACH_SPEAR320=y diff --git a/arch/arm/configs/spear6xx_defconfig b/arch/arm/configs/spear6xx_defconfig index a2a1265f86b..7822980d7d5 100644 --- a/arch/arm/configs/spear6xx_defconfig +++ b/arch/arm/configs/spear6xx_defconfig @@ -6,6 +6,7 @@ CONFIG_MODULES=y  CONFIG_MODULE_UNLOAD=y  CONFIG_MODVERSIONS=y  CONFIG_PARTITION_ADVANCED=y +# CONFIG_ARCH_MULTI_V7 is not set  CONFIG_PLAT_SPEAR=y  CONFIG_ARCH_SPEAR6XX=y  CONFIG_BINFMT_MISC=y diff --git a/arch/arm/configs/tegra_defconfig b/arch/arm/configs/tegra_defconfig index aba4881d20e..a5f0485133c 100644 --- a/arch/arm/configs/tegra_defconfig +++ b/arch/arm/configs/tegra_defconfig @@ -1,4 +1,3 @@ -CONFIG_EXPERIMENTAL=y  CONFIG_NO_HZ=y  CONFIG_HIGH_RES_TIMERS=y  CONFIG_IKCONFIG=y @@ -20,15 +19,14 @@ CONFIG_MODULE_UNLOAD=y  CONFIG_MODULE_FORCE_UNLOAD=y  # CONFIG_BLK_DEV_BSG is not set  CONFIG_PARTITION_ADVANCED=y -CONFIG_EFI_PARTITION=y  # CONFIG_IOSCHED_DEADLINE is not set  # CONFIG_IOSCHED_CFQ is not set  CONFIG_ARCH_TEGRA=y  CONFIG_GPIO_PCA953X=y  CONFIG_ARCH_TEGRA_2x_SOC=y  CONFIG_ARCH_TEGRA_3x_SOC=y +CONFIG_ARCH_TEGRA_114_SOC=y  CONFIG_TEGRA_PCI=y -CONFIG_TEGRA_DEBUG_UART_AUTO_ODMDATA=y  CONFIG_TEGRA_EMC_SCALING_ENABLE=y  CONFIG_SMP=y  CONFIG_PREEMPT=y @@ -37,8 +35,8 @@ CONFIG_AEABI=y  CONFIG_HIGHMEM=y  CONFIG_ZBOOT_ROM_TEXT=0x0  CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_AUTO_ZRELADDR=y  CONFIG_KEXEC=y +CONFIG_AUTO_ZRELADDR=y  CONFIG_CPU_FREQ=y  CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y  CONFIG_CPU_IDLE=y @@ -108,6 +106,7 @@ CONFIG_RT2X00=y  CONFIG_RT2800USB=m  CONFIG_INPUT_EVDEV=y  CONFIG_KEYBOARD_TEGRA=y +CONFIG_KEYBOARD_GPIO=y  CONFIG_INPUT_MISC=y  CONFIG_INPUT_MPU3050=y  # CONFIG_LEGACY_PTYS is not set @@ -117,7 +116,6 @@ CONFIG_SERIAL_8250_CONSOLE=y  CONFIG_SERIAL_TEGRA=y  CONFIG_SERIAL_OF_PLATFORM=y  # CONFIG_HW_RANDOM is not set -CONFIG_I2C=y  # CONFIG_I2C_COMPAT is not set  CONFIG_I2C_MUX=y  CONFIG_I2C_MUX_PINCTRL=y @@ -126,6 +124,7 @@ CONFIG_SPI=y  CONFIG_SPI_TEGRA20_SFLASH=y  CONFIG_SPI_TEGRA20_SLINK=y  CONFIG_GPIO_PCA953X_IRQ=y +CONFIG_GPIO_PALMAS=y  CONFIG_GPIO_TPS6586X=y  CONFIG_GPIO_TPS65910=y  CONFIG_POWER_SUPPLY=y @@ -136,12 +135,17 @@ CONFIG_SENSORS_LM90=y  CONFIG_MFD_TPS6586X=y  CONFIG_MFD_TPS65910=y  CONFIG_MFD_MAX8907=y +CONFIG_MFD_TPS65090=y +CONFIG_MFD_PALMAS=y  CONFIG_REGULATOR=y  CONFIG_REGULATOR_FIXED_VOLTAGE=y  CONFIG_REGULATOR_VIRTUAL_CONSUMER=y  CONFIG_REGULATOR_GPIO=y  CONFIG_REGULATOR_MAX8907=y +CONFIG_REGULATOR_PALMAS=y +CONFIG_REGULATOR_TPS51632=y  CONFIG_REGULATOR_TPS62360=y +CONFIG_REGULATOR_TPS65090=y  CONFIG_REGULATOR_TPS6586X=y  CONFIG_REGULATOR_TPS65910=y  CONFIG_MEDIA_SUPPORT=y @@ -187,10 +191,8 @@ CONFIG_LEDS_GPIO=y  CONFIG_LEDS_TRIGGERS=y  CONFIG_LEDS_TRIGGER_GPIO=y  CONFIG_RTC_CLASS=y -CONFIG_RTC_INTF_SYSFS=y -CONFIG_RTC_INTF_PROC=y -CONFIG_RTC_INTF_DEV=y  CONFIG_RTC_DRV_MAX8907=y +CONFIG_RTC_DRV_PALMAS=y  CONFIG_RTC_DRV_TPS6586X=y  CONFIG_RTC_DRV_TPS65910=y  CONFIG_RTC_DRV_EM3027=y diff --git a/arch/arm/configs/u8500_defconfig b/arch/arm/configs/u8500_defconfig index 426270fe080..c037aa1065b 100644 --- a/arch/arm/configs/u8500_defconfig +++ b/arch/arm/configs/u8500_defconfig @@ -5,7 +5,6 @@ CONFIG_BLK_DEV_INITRD=y  CONFIG_KALLSYMS_ALL=y  CONFIG_MODULES=y  CONFIG_MODULE_UNLOAD=y -# CONFIG_LBDAF is not set  # CONFIG_BLK_DEV_BSG is not set  CONFIG_ARCH_U8500=y  CONFIG_MACH_HREFV60=y @@ -90,6 +89,8 @@ CONFIG_LEDS_CLASS=y  CONFIG_LEDS_LM3530=y  CONFIG_LEDS_LP5521=y  CONFIG_LEDS_GPIO=y +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y  CONFIG_RTC_CLASS=y  CONFIG_RTC_DRV_AB8500=y  CONFIG_RTC_DRV_PL031=y @@ -103,6 +104,7 @@ CONFIG_EXT2_FS_XATTR=y  CONFIG_EXT2_FS_POSIX_ACL=y  CONFIG_EXT2_FS_SECURITY=y  CONFIG_EXT3_FS=y +CONFIG_EXT4_FS=y  CONFIG_VFAT_FS=y  CONFIG_TMPFS=y  CONFIG_TMPFS_POSIX_ACL=y diff --git a/arch/arm/include/asm/atomic.h b/arch/arm/include/asm/atomic.h index c79f61faa3a..da1c77d3932 100644 --- a/arch/arm/include/asm/atomic.h +++ b/arch/arm/include/asm/atomic.h @@ -243,6 +243,29 @@ typedef struct {  #define ATOMIC64_INIT(i) { (i) } +#ifdef CONFIG_ARM_LPAE +static inline u64 atomic64_read(const atomic64_t *v) +{ +	u64 result; + +	__asm__ __volatile__("@ atomic64_read\n" +"	ldrd	%0, %H0, [%1]" +	: "=&r" (result) +	: "r" (&v->counter), "Qo" (v->counter) +	); + +	return result; +} + +static inline void atomic64_set(atomic64_t *v, u64 i) +{ +	__asm__ __volatile__("@ atomic64_set\n" +"	strd	%2, %H2, [%1]" +	: "=Qo" (v->counter) +	: "r" (&v->counter), "r" (i) +	); +} +#else  static inline u64 atomic64_read(const atomic64_t *v)  {  	u64 result; @@ -269,6 +292,7 @@ static inline void atomic64_set(atomic64_t *v, u64 i)  	: "r" (&v->counter), "r" (i)  	: "cc");  } +#endif  static inline void atomic64_add(u64 i, atomic64_t *v)  { diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h index e1489c54cd1..bff71388e72 100644 --- a/arch/arm/include/asm/cacheflush.h +++ b/arch/arm/include/asm/cacheflush.h @@ -363,4 +363,79 @@ static inline void flush_cache_vunmap(unsigned long start, unsigned long end)  		flush_cache_all();  } +/* + * Memory synchronization helpers for mixed cached vs non cached accesses. + * + * Some synchronization algorithms have to set states in memory with the + * cache enabled or disabled depending on the code path.  It is crucial + * to always ensure proper cache maintenance to update main memory right + * away in that case. + * + * Any cached write must be followed by a cache clean operation. + * Any cached read must be preceded by a cache invalidate operation. + * Yet, in the read case, a cache flush i.e. atomic clean+invalidate + * operation is needed to avoid discarding possible concurrent writes to the + * accessed memory. + * + * Also, in order to prevent a cached writer from interfering with an + * adjacent non-cached writer, each state variable must be located to + * a separate cache line. + */ + +/* + * This needs to be >= the max cache writeback size of all + * supported platforms included in the current kernel configuration. + * This is used to align state variables to their own cache lines. + */ +#define __CACHE_WRITEBACK_ORDER 6  /* guessed from existing platforms */ +#define __CACHE_WRITEBACK_GRANULE (1 << __CACHE_WRITEBACK_ORDER) + +/* + * There is no __cpuc_clean_dcache_area but we use it anyway for + * code intent clarity, and alias it to __cpuc_flush_dcache_area. + */ +#define __cpuc_clean_dcache_area __cpuc_flush_dcache_area + +/* + * Ensure preceding writes to *p by this CPU are visible to + * subsequent reads by other CPUs: + */ +static inline void __sync_cache_range_w(volatile void *p, size_t size) +{ +	char *_p = (char *)p; + +	__cpuc_clean_dcache_area(_p, size); +	outer_clean_range(__pa(_p), __pa(_p + size)); +} + +/* + * Ensure preceding writes to *p by other CPUs are visible to + * subsequent reads by this CPU.  We must be careful not to + * discard data simultaneously written by another CPU, hence the + * usage of flush rather than invalidate operations. + */ +static inline void __sync_cache_range_r(volatile void *p, size_t size) +{ +	char *_p = (char *)p; + +#ifdef CONFIG_OUTER_CACHE +	if (outer_cache.flush_range) { +		/* +		 * Ensure dirty data migrated from other CPUs into our cache +		 * are cleaned out safely before the outer cache is cleaned: +		 */ +		__cpuc_clean_dcache_area(_p, size); + +		/* Clean and invalidate stale data for *p from outer ... */ +		outer_flush_range(__pa(_p), __pa(_p + size)); +	} +#endif + +	/* ... and inner cache: */ +	__cpuc_flush_dcache_area(_p, size); +} + +#define sync_cache_w(ptr) __sync_cache_range_w(ptr, sizeof *(ptr)) +#define sync_cache_r(ptr) __sync_cache_range_r(ptr, sizeof *(ptr)) +  #endif diff --git a/arch/arm/include/asm/cp15.h b/arch/arm/include/asm/cp15.h index 5ef4d8015a6..1f3262e99d8 100644 --- a/arch/arm/include/asm/cp15.h +++ b/arch/arm/include/asm/cp15.h @@ -42,6 +42,8 @@  #define vectors_high()	(0)  #endif +#ifdef CONFIG_CPU_CP15 +  extern unsigned long cr_no_alignment;	/* defined in entry-armv.S */  extern unsigned long cr_alignment;	/* defined in entry-armv.S */ @@ -82,6 +84,18 @@ static inline void set_copro_access(unsigned int val)  	isb();  } -#endif +#else /* ifdef CONFIG_CPU_CP15 */ + +/* + * cr_alignment and cr_no_alignment are tightly coupled to cp15 (at least in the + * minds of the developers). Yielding 0 for machines without a cp15 (and making + * it read-only) is fine for most cases and saves quite some #ifdeffery. + */ +#define cr_no_alignment	UL(0) +#define cr_alignment	UL(0) + +#endif /* ifdef CONFIG_CPU_CP15 / else */ + +#endif /* ifndef __ASSEMBLY__ */  #endif diff --git a/arch/arm/include/asm/cputype.h b/arch/arm/include/asm/cputype.h index ad41ec2471e..7652712d1d1 100644 --- a/arch/arm/include/asm/cputype.h +++ b/arch/arm/include/asm/cputype.h @@ -38,6 +38,24 @@  #define MPIDR_AFFINITY_LEVEL(mpidr, level) \  	((mpidr >> (MPIDR_LEVEL_BITS * level)) & MPIDR_LEVEL_MASK) +#define ARM_CPU_IMP_ARM			0x41 +#define ARM_CPU_IMP_INTEL		0x69 + +#define ARM_CPU_PART_ARM1136		0xB360 +#define ARM_CPU_PART_ARM1156		0xB560 +#define ARM_CPU_PART_ARM1176		0xB760 +#define ARM_CPU_PART_ARM11MPCORE	0xB020 +#define ARM_CPU_PART_CORTEX_A8		0xC080 +#define ARM_CPU_PART_CORTEX_A9		0xC090 +#define ARM_CPU_PART_CORTEX_A5		0xC050 +#define ARM_CPU_PART_CORTEX_A15		0xC0F0 +#define ARM_CPU_PART_CORTEX_A7		0xC070 + +#define ARM_CPU_XSCALE_ARCH_MASK	0xe000 +#define ARM_CPU_XSCALE_ARCH_V1		0x2000 +#define ARM_CPU_XSCALE_ARCH_V2		0x4000 +#define ARM_CPU_XSCALE_ARCH_V3		0x6000 +  extern unsigned int processor_id;  #ifdef CONFIG_CPU_CP15 @@ -50,6 +68,7 @@ extern unsigned int processor_id;  		    : "cc");						\  		__val;							\  	}) +  #define read_cpuid_ext(ext_reg)						\  	({								\  		unsigned int __val;					\ @@ -59,29 +78,24 @@ extern unsigned int processor_id;  		    : "cc");						\  		__val;							\  	}) -#else -#define read_cpuid(reg) (processor_id) -#define read_cpuid_ext(reg) 0 -#endif -#define ARM_CPU_IMP_ARM			0x41 -#define ARM_CPU_IMP_INTEL		0x69 +#else /* ifdef CONFIG_CPU_CP15 */ -#define ARM_CPU_PART_ARM1136		0xB360 -#define ARM_CPU_PART_ARM1156		0xB560 -#define ARM_CPU_PART_ARM1176		0xB760 -#define ARM_CPU_PART_ARM11MPCORE	0xB020 -#define ARM_CPU_PART_CORTEX_A8		0xC080 -#define ARM_CPU_PART_CORTEX_A9		0xC090 -#define ARM_CPU_PART_CORTEX_A5		0xC050 -#define ARM_CPU_PART_CORTEX_A15		0xC0F0 -#define ARM_CPU_PART_CORTEX_A7		0xC070 +/* + * read_cpuid and read_cpuid_ext should only ever be called on machines that + * have cp15 so warn on other usages. + */ +#define read_cpuid(reg)							\ +	({								\ +		WARN_ON_ONCE(1);					\ +		0;							\ +	}) -#define ARM_CPU_XSCALE_ARCH_MASK	0xe000 -#define ARM_CPU_XSCALE_ARCH_V1		0x2000 -#define ARM_CPU_XSCALE_ARCH_V2		0x4000 -#define ARM_CPU_XSCALE_ARCH_V3		0x6000 +#define read_cpuid_ext(reg) read_cpuid(reg) + +#endif /* ifdef CONFIG_CPU_CP15 / else */ +#ifdef CONFIG_CPU_CP15  /*   * The CPU ID never changes at run time, so we might as well tell the   * compiler that it's constant.  Use this function to read the CPU ID @@ -92,6 +106,15 @@ static inline unsigned int __attribute_const__ read_cpuid_id(void)  	return read_cpuid(CPUID_ID);  } +#else /* ifdef CONFIG_CPU_CP15 */ + +static inline unsigned int __attribute_const__ read_cpuid_id(void) +{ +	return processor_id; +} + +#endif /* ifdef CONFIG_CPU_CP15 / else */ +  static inline unsigned int __attribute_const__ read_cpuid_implementor(void)  {  	return (read_cpuid_id() & 0xFF000000) >> 24; diff --git a/arch/arm/include/asm/delay.h b/arch/arm/include/asm/delay.h index 720799fd3a8..dff714d886d 100644 --- a/arch/arm/include/asm/delay.h +++ b/arch/arm/include/asm/delay.h @@ -24,7 +24,7 @@ extern struct arm_delay_ops {  	void (*delay)(unsigned long);  	void (*const_udelay)(unsigned long);  	void (*udelay)(unsigned long); -	bool const_clock; +	unsigned long ticks_per_jiffy;  } arm_delay_ops;  #define __delay(n)		arm_delay_ops.delay(n) diff --git a/arch/arm/include/asm/glue-cache.h b/arch/arm/include/asm/glue-cache.h index cca9f15704e..ea289e1435e 100644 --- a/arch/arm/include/asm/glue-cache.h +++ b/arch/arm/include/asm/glue-cache.h @@ -19,14 +19,6 @@  #undef _CACHE  #undef MULTI_CACHE -#if defined(CONFIG_CPU_CACHE_V3) -# ifdef _CACHE -#  define MULTI_CACHE 1 -# else -#  define _CACHE v3 -# endif -#endif -  #if defined(CONFIG_CPU_CACHE_V4)  # ifdef _CACHE  #  define MULTI_CACHE 1 diff --git a/arch/arm/include/asm/glue-df.h b/arch/arm/include/asm/glue-df.h index 8cacbcda76d..b6e9f2c108b 100644 --- a/arch/arm/include/asm/glue-df.h +++ b/arch/arm/include/asm/glue-df.h @@ -18,12 +18,12 @@   *	================   *   *	We have the following to choose from: - *	  arm6          - ARM6 style   *	  arm7		- ARM7 style   *	  v4_early	- ARMv4 without Thumb early abort handler   *	  v4t_late	- ARMv4 with Thumb late abort handler   *	  v4t_early	- ARMv4 with Thumb early abort handler - *	  v5tej_early	- ARMv5 with Thumb and Java early abort handler + *	  v5t_early	- ARMv5 with Thumb early abort handler + *	  v5tj_early	- ARMv5 with Thumb and Java early abort handler   *	  xscale	- ARMv5 with Thumb with Xscale extensions   *	  v6_early	- ARMv6 generic early abort handler   *	  v7_early	- ARMv7 generic early abort handler @@ -39,19 +39,19 @@  # endif  #endif -#ifdef CONFIG_CPU_ABRT_LV4T +#ifdef CONFIG_CPU_ABRT_EV4  # ifdef CPU_DABORT_HANDLER  #  define MULTI_DABORT 1  # else -#  define CPU_DABORT_HANDLER v4t_late_abort +#  define CPU_DABORT_HANDLER v4_early_abort  # endif  #endif -#ifdef CONFIG_CPU_ABRT_EV4 +#ifdef CONFIG_CPU_ABRT_LV4T  # ifdef CPU_DABORT_HANDLER  #  define MULTI_DABORT 1  # else -#  define CPU_DABORT_HANDLER v4_early_abort +#  define CPU_DABORT_HANDLER v4t_late_abort  # endif  #endif @@ -63,19 +63,19 @@  # endif  #endif -#ifdef CONFIG_CPU_ABRT_EV5TJ +#ifdef CONFIG_CPU_ABRT_EV5T  # ifdef CPU_DABORT_HANDLER  #  define MULTI_DABORT 1  # else -#  define CPU_DABORT_HANDLER v5tj_early_abort +#  define CPU_DABORT_HANDLER v5t_early_abort  # endif  #endif -#ifdef CONFIG_CPU_ABRT_EV5T +#ifdef CONFIG_CPU_ABRT_EV5TJ  # ifdef CPU_DABORT_HANDLER  #  define MULTI_DABORT 1  # else -#  define CPU_DABORT_HANDLER v5t_early_abort +#  define CPU_DABORT_HANDLER v5tj_early_abort  # endif  #endif diff --git a/arch/arm/include/asm/hardware/iop3xx.h b/arch/arm/include/asm/hardware/iop3xx.h index 02fe2fbe247..ed94b1a366a 100644 --- a/arch/arm/include/asm/hardware/iop3xx.h +++ b/arch/arm/include/asm/hardware/iop3xx.h @@ -37,7 +37,7 @@ extern int iop3xx_get_init_atu(void);   * IOP3XX processor registers   */  #define IOP3XX_PERIPHERAL_PHYS_BASE	0xffffe000 -#define IOP3XX_PERIPHERAL_VIRT_BASE	0xfeffe000 +#define IOP3XX_PERIPHERAL_VIRT_BASE	0xfedfe000  #define IOP3XX_PERIPHERAL_SIZE		0x00002000  #define IOP3XX_PERIPHERAL_UPPER_PA (IOP3XX_PERIPHERAL_PHYS_BASE +\  					IOP3XX_PERIPHERAL_SIZE - 1) diff --git a/arch/arm/include/asm/highmem.h b/arch/arm/include/asm/highmem.h index 8c5e828f484..91b99abe7a9 100644 --- a/arch/arm/include/asm/highmem.h +++ b/arch/arm/include/asm/highmem.h @@ -41,6 +41,13 @@ extern void kunmap_high(struct page *page);  #endif  #endif +/* + * Needed to be able to broadcast the TLB invalidation for kmap. + */ +#ifdef CONFIG_ARM_ERRATA_798181 +#undef ARCH_NEEDS_KMAP_HIGH_GET +#endif +  #ifdef ARCH_NEEDS_KMAP_HIGH_GET  extern void *kmap_high_get(struct page *page);  #else diff --git a/arch/arm/include/asm/irq.h b/arch/arm/include/asm/irq.h index 35c21c375d8..53c15dec7af 100644 --- a/arch/arm/include/asm/irq.h +++ b/arch/arm/include/asm/irq.h @@ -30,6 +30,11 @@ extern void asm_do_IRQ(unsigned int, struct pt_regs *);  void handle_IRQ(unsigned int, struct pt_regs *);  void init_IRQ(void); +#ifdef CONFIG_MULTI_IRQ_HANDLER +extern void (*handle_arch_irq)(struct pt_regs *); +extern void set_handle_irq(void (*handle_irq)(struct pt_regs *)); +#endif +  #endif  #endif diff --git a/arch/arm/include/asm/kvm_arm.h b/arch/arm/include/asm/kvm_arm.h index 7c3d813e15d..124623e5ef1 100644 --- a/arch/arm/include/asm/kvm_arm.h +++ b/arch/arm/include/asm/kvm_arm.h @@ -211,4 +211,8 @@  #define HSR_HVC_IMM_MASK	((1UL << 16) - 1) +#define HSR_DABT_S1PTW		(1U << 7) +#define HSR_DABT_CM		(1U << 8) +#define HSR_DABT_EA		(1U << 9) +  #endif /* __ARM_KVM_ARM_H__ */ diff --git a/arch/arm/include/asm/kvm_asm.h b/arch/arm/include/asm/kvm_asm.h index e4956f4e23e..18d50322a9e 100644 --- a/arch/arm/include/asm/kvm_asm.h +++ b/arch/arm/include/asm/kvm_asm.h @@ -75,7 +75,7 @@ extern char __kvm_hyp_code_end[];  extern void __kvm_tlb_flush_vmid(struct kvm *kvm);  extern void __kvm_flush_vm_context(void); -extern void __kvm_tlb_flush_vmid(struct kvm *kvm); +extern void __kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa);  extern int __kvm_vcpu_run(struct kvm_vcpu *vcpu);  #endif diff --git a/arch/arm/include/asm/kvm_emulate.h b/arch/arm/include/asm/kvm_emulate.h index fd611996bfb..82b4babead2 100644 --- a/arch/arm/include/asm/kvm_emulate.h +++ b/arch/arm/include/asm/kvm_emulate.h @@ -22,11 +22,12 @@  #include <linux/kvm_host.h>  #include <asm/kvm_asm.h>  #include <asm/kvm_mmio.h> +#include <asm/kvm_arm.h> -u32 *vcpu_reg(struct kvm_vcpu *vcpu, u8 reg_num); -u32 *vcpu_spsr(struct kvm_vcpu *vcpu); +unsigned long *vcpu_reg(struct kvm_vcpu *vcpu, u8 reg_num); +unsigned long *vcpu_spsr(struct kvm_vcpu *vcpu); -int kvm_handle_wfi(struct kvm_vcpu *vcpu, struct kvm_run *run); +bool kvm_condition_valid(struct kvm_vcpu *vcpu);  void kvm_skip_instr(struct kvm_vcpu *vcpu, bool is_wide_instr);  void kvm_inject_undefined(struct kvm_vcpu *vcpu);  void kvm_inject_dabt(struct kvm_vcpu *vcpu, unsigned long addr); @@ -37,14 +38,14 @@ static inline bool vcpu_mode_is_32bit(struct kvm_vcpu *vcpu)  	return 1;  } -static inline u32 *vcpu_pc(struct kvm_vcpu *vcpu) +static inline unsigned long *vcpu_pc(struct kvm_vcpu *vcpu)  { -	return (u32 *)&vcpu->arch.regs.usr_regs.ARM_pc; +	return &vcpu->arch.regs.usr_regs.ARM_pc;  } -static inline u32 *vcpu_cpsr(struct kvm_vcpu *vcpu) +static inline unsigned long *vcpu_cpsr(struct kvm_vcpu *vcpu)  { -	return (u32 *)&vcpu->arch.regs.usr_regs.ARM_cpsr; +	return &vcpu->arch.regs.usr_regs.ARM_cpsr;  }  static inline void vcpu_set_thumb(struct kvm_vcpu *vcpu) @@ -69,4 +70,96 @@ static inline bool kvm_vcpu_reg_is_pc(struct kvm_vcpu *vcpu, int reg)  	return reg == 15;  } +static inline u32 kvm_vcpu_get_hsr(struct kvm_vcpu *vcpu) +{ +	return vcpu->arch.fault.hsr; +} + +static inline unsigned long kvm_vcpu_get_hfar(struct kvm_vcpu *vcpu) +{ +	return vcpu->arch.fault.hxfar; +} + +static inline phys_addr_t kvm_vcpu_get_fault_ipa(struct kvm_vcpu *vcpu) +{ +	return ((phys_addr_t)vcpu->arch.fault.hpfar & HPFAR_MASK) << 8; +} + +static inline unsigned long kvm_vcpu_get_hyp_pc(struct kvm_vcpu *vcpu) +{ +	return vcpu->arch.fault.hyp_pc; +} + +static inline bool kvm_vcpu_dabt_isvalid(struct kvm_vcpu *vcpu) +{ +	return kvm_vcpu_get_hsr(vcpu) & HSR_ISV; +} + +static inline bool kvm_vcpu_dabt_iswrite(struct kvm_vcpu *vcpu) +{ +	return kvm_vcpu_get_hsr(vcpu) & HSR_WNR; +} + +static inline bool kvm_vcpu_dabt_issext(struct kvm_vcpu *vcpu) +{ +	return kvm_vcpu_get_hsr(vcpu) & HSR_SSE; +} + +static inline int kvm_vcpu_dabt_get_rd(struct kvm_vcpu *vcpu) +{ +	return (kvm_vcpu_get_hsr(vcpu) & HSR_SRT_MASK) >> HSR_SRT_SHIFT; +} + +static inline bool kvm_vcpu_dabt_isextabt(struct kvm_vcpu *vcpu) +{ +	return kvm_vcpu_get_hsr(vcpu) & HSR_DABT_EA; +} + +static inline bool kvm_vcpu_dabt_iss1tw(struct kvm_vcpu *vcpu) +{ +	return kvm_vcpu_get_hsr(vcpu) & HSR_DABT_S1PTW; +} + +/* Get Access Size from a data abort */ +static inline int kvm_vcpu_dabt_get_as(struct kvm_vcpu *vcpu) +{ +	switch ((kvm_vcpu_get_hsr(vcpu) >> 22) & 0x3) { +	case 0: +		return 1; +	case 1: +		return 2; +	case 2: +		return 4; +	default: +		kvm_err("Hardware is weird: SAS 0b11 is reserved\n"); +		return -EFAULT; +	} +} + +/* This one is not specific to Data Abort */ +static inline bool kvm_vcpu_trap_il_is32bit(struct kvm_vcpu *vcpu) +{ +	return kvm_vcpu_get_hsr(vcpu) & HSR_IL; +} + +static inline u8 kvm_vcpu_trap_get_class(struct kvm_vcpu *vcpu) +{ +	return kvm_vcpu_get_hsr(vcpu) >> HSR_EC_SHIFT; +} + +static inline bool kvm_vcpu_trap_is_iabt(struct kvm_vcpu *vcpu) +{ +	return kvm_vcpu_trap_get_class(vcpu) == HSR_EC_IABT; +} + +static inline u8 kvm_vcpu_trap_get_fault(struct kvm_vcpu *vcpu) +{ +	return kvm_vcpu_get_hsr(vcpu) & HSR_FSC_TYPE; +} + +static inline u32 kvm_vcpu_hvc_get_imm(struct kvm_vcpu *vcpu) +{ +	return kvm_vcpu_get_hsr(vcpu) & HSR_HVC_IMM_MASK; +} +  #endif /* __ARM_KVM_EMULATE_H__ */ diff --git a/arch/arm/include/asm/kvm_host.h b/arch/arm/include/asm/kvm_host.h index d1736a53b12..0c4e643d939 100644 --- a/arch/arm/include/asm/kvm_host.h +++ b/arch/arm/include/asm/kvm_host.h @@ -80,6 +80,15 @@ struct kvm_mmu_memory_cache {  	void *objects[KVM_NR_MEM_OBJS];  }; +struct kvm_vcpu_fault_info { +	u32 hsr;		/* Hyp Syndrome Register */ +	u32 hxfar;		/* Hyp Data/Inst. Fault Address Register */ +	u32 hpfar;		/* Hyp IPA Fault Address Register */ +	u32 hyp_pc;		/* PC when exception was taken from Hyp mode */ +}; + +typedef struct vfp_hard_struct kvm_kernel_vfp_t; +  struct kvm_vcpu_arch {  	struct kvm_regs regs; @@ -93,13 +102,11 @@ struct kvm_vcpu_arch {  	u32 midr;  	/* Exception Information */ -	u32 hsr;		/* Hyp Syndrome Register */ -	u32 hxfar;		/* Hyp Data/Inst Fault Address Register */ -	u32 hpfar;		/* Hyp IPA Fault Address Register */ +	struct kvm_vcpu_fault_info fault;  	/* Floating point registers (VFP and Advanced SIMD/NEON) */ -	struct vfp_hard_struct vfp_guest; -	struct vfp_hard_struct *vfp_host; +	kvm_kernel_vfp_t vfp_guest; +	kvm_kernel_vfp_t *vfp_host;  	/* VGIC state */  	struct vgic_cpu vgic_cpu; @@ -122,9 +129,6 @@ struct kvm_vcpu_arch {  	/* Interrupt related fields */  	u32 irq_lines;		/* IRQ and FIQ levels */ -	/* Hyp exception information */ -	u32 hyp_pc;		/* PC when exception was taken from Hyp mode */ -  	/* Cache some mmu pages needed inside spinlock regions */  	struct kvm_mmu_memory_cache mmu_page_cache; @@ -181,4 +185,26 @@ struct kvm_one_reg;  int kvm_arm_coproc_get_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *);  int kvm_arm_coproc_set_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *); +int handle_exit(struct kvm_vcpu *vcpu, struct kvm_run *run, +		int exception_index); + +static inline void __cpu_init_hyp_mode(unsigned long long pgd_ptr, +				       unsigned long hyp_stack_ptr, +				       unsigned long vector_ptr) +{ +	unsigned long pgd_low, pgd_high; + +	pgd_low = (pgd_ptr & ((1ULL << 32) - 1)); +	pgd_high = (pgd_ptr >> 32ULL); + +	/* +	 * Call initialization code, and switch to the full blown +	 * HYP code. The init code doesn't need to preserve these registers as +	 * r1-r3 and r12 are already callee save according to the AAPCS. +	 * Note that we slightly misuse the prototype by casing the pgd_low to +	 * a void *. +	 */ +	kvm_call_hyp((void *)pgd_low, pgd_high, hyp_stack_ptr, vector_ptr); +} +  #endif /* __ARM_KVM_HOST_H__ */ diff --git a/arch/arm/include/asm/kvm_mmu.h b/arch/arm/include/asm/kvm_mmu.h index 421a20b3487..970f3b5fa10 100644 --- a/arch/arm/include/asm/kvm_mmu.h +++ b/arch/arm/include/asm/kvm_mmu.h @@ -19,6 +19,18 @@  #ifndef __ARM_KVM_MMU_H__  #define __ARM_KVM_MMU_H__ +#include <asm/cacheflush.h> +#include <asm/pgalloc.h> +#include <asm/idmap.h> + +/* + * We directly use the kernel VA for the HYP, as we can directly share + * the mapping (HTTBR "covers" TTBR1). + */ +#define HYP_PAGE_OFFSET_MASK	(~0UL) +#define HYP_PAGE_OFFSET		PAGE_OFFSET +#define KERN_TO_HYP(kva)	(kva) +  int create_hyp_mappings(void *from, void *to);  int create_hyp_io_mappings(void *from, void *to, phys_addr_t);  void free_hyp_pmds(void); @@ -36,6 +48,16 @@ phys_addr_t kvm_mmu_get_httbr(void);  int kvm_mmu_init(void);  void kvm_clear_hyp_idmap(void); +static inline void kvm_set_pte(pte_t *pte, pte_t new_pte) +{ +	pte_val(*pte) = new_pte; +	/* +	 * flush_pmd_entry just takes a void pointer and cleans the necessary +	 * cache entries, so we can reuse the function for ptes. +	 */ +	flush_pmd_entry(pte); +} +  static inline bool kvm_is_write_fault(unsigned long hsr)  {  	unsigned long hsr_ec = hsr >> HSR_EC_SHIFT; @@ -47,4 +69,49 @@ static inline bool kvm_is_write_fault(unsigned long hsr)  		return true;  } +static inline void kvm_clean_pgd(pgd_t *pgd) +{ +	clean_dcache_area(pgd, PTRS_PER_S2_PGD * sizeof(pgd_t)); +} + +static inline void kvm_clean_pmd_entry(pmd_t *pmd) +{ +	clean_pmd_entry(pmd); +} + +static inline void kvm_clean_pte(pte_t *pte) +{ +	clean_pte_table(pte); +} + +static inline void kvm_set_s2pte_writable(pte_t *pte) +{ +	pte_val(*pte) |= L_PTE_S2_RDWR; +} + +struct kvm; + +static inline void coherent_icache_guest_page(struct kvm *kvm, gfn_t gfn) +{ +	/* +	 * If we are going to insert an instruction page and the icache is +	 * either VIPT or PIPT, there is a potential problem where the host +	 * (or another VM) may have used the same page as this guest, and we +	 * read incorrect data from the icache.  If we're using a PIPT cache, +	 * we can invalidate just that page, but if we are using a VIPT cache +	 * we need to invalidate the entire icache - damn shame - as written +	 * in the ARM ARM (DDI 0406C.b - Page B3-1393). +	 * +	 * VIVT caches are tagged using both the ASID and the VMID and doesn't +	 * need any kind of flushing (DDI 0406C.b - Page B3-1392). +	 */ +	if (icache_is_pipt()) { +		unsigned long hva = gfn_to_hva(kvm, gfn); +		__cpuc_coherent_user_range(hva, hva + PAGE_SIZE); +	} else if (!icache_is_vivt_asid_tagged()) { +		/* any kind of VIPT cache */ +		__flush_icache_all(); +	} +} +  #endif /* __ARM_KVM_MMU_H__ */ diff --git a/arch/arm/include/asm/kvm_vgic.h b/arch/arm/include/asm/kvm_vgic.h index ab97207d9cd..343744e4809 100644 --- a/arch/arm/include/asm/kvm_vgic.h +++ b/arch/arm/include/asm/kvm_vgic.h @@ -21,7 +21,6 @@  #include <linux/kernel.h>  #include <linux/kvm.h> -#include <linux/kvm_host.h>  #include <linux/irqreturn.h>  #include <linux/spinlock.h>  #include <linux/types.h> diff --git a/arch/arm/include/asm/mach/irq.h b/arch/arm/include/asm/mach/irq.h index 18c88302333..2092ee1e130 100644 --- a/arch/arm/include/asm/mach/irq.h +++ b/arch/arm/include/asm/mach/irq.h @@ -20,11 +20,6 @@ struct seq_file;  extern void init_FIQ(int);  extern int show_fiq_list(struct seq_file *, int); -#ifdef CONFIG_MULTI_IRQ_HANDLER -extern void (*handle_arch_irq)(struct pt_regs *); -extern void set_handle_irq(void (*handle_irq)(struct pt_regs *)); -#endif -  /*   * This is for easy migration, but should be changed in the source   */ @@ -35,35 +30,4 @@ do {							\  	raw_spin_unlock(&desc->lock);			\  } while(0) -#ifndef __ASSEMBLY__ -/* - * Entry/exit functions for chained handlers where the primary IRQ chip - * may implement either fasteoi or level-trigger flow control. - */ -static inline void chained_irq_enter(struct irq_chip *chip, -				     struct irq_desc *desc) -{ -	/* FastEOI controllers require no action on entry. */ -	if (chip->irq_eoi) -		return; - -	if (chip->irq_mask_ack) { -		chip->irq_mask_ack(&desc->irq_data); -	} else { -		chip->irq_mask(&desc->irq_data); -		if (chip->irq_ack) -			chip->irq_ack(&desc->irq_data); -	} -} - -static inline void chained_irq_exit(struct irq_chip *chip, -				    struct irq_desc *desc) -{ -	if (chip->irq_eoi) -		chip->irq_eoi(&desc->irq_data); -	else -		chip->irq_unmask(&desc->irq_data); -} -#endif -  #endif diff --git a/arch/arm/include/asm/mach/pci.h b/arch/arm/include/asm/mach/pci.h index 5cf2e979b4b..7d2c3c84380 100644 --- a/arch/arm/include/asm/mach/pci.h +++ b/arch/arm/include/asm/mach/pci.h @@ -30,6 +30,11 @@ struct hw_pci {  	void		(*postinit)(void);  	u8		(*swizzle)(struct pci_dev *dev, u8 *pin);  	int		(*map_irq)(const struct pci_dev *dev, u8 slot, u8 pin); +	resource_size_t (*align_resource)(struct pci_dev *dev, +					  const struct resource *res, +					  resource_size_t start, +					  resource_size_t size, +					  resource_size_t align);  };  /* @@ -51,6 +56,12 @@ struct pci_sys_data {  	u8		(*swizzle)(struct pci_dev *, u8 *);  					/* IRQ mapping				*/  	int		(*map_irq)(const struct pci_dev *, u8, u8); +					/* Resource alignement requirements	*/ +	resource_size_t (*align_resource)(struct pci_dev *dev, +					  const struct resource *res, +					  resource_size_t start, +					  resource_size_t size, +					  resource_size_t align);  	void		*private_data;	/* platform controller private data	*/  }; diff --git a/arch/arm/include/asm/mcpm.h b/arch/arm/include/asm/mcpm.h new file mode 100644 index 00000000000..0f7b7620e9a --- /dev/null +++ b/arch/arm/include/asm/mcpm.h @@ -0,0 +1,209 @@ +/* + * arch/arm/include/asm/mcpm.h + * + * Created by:  Nicolas Pitre, April 2012 + * Copyright:   (C) 2012-2013  Linaro Limited + * + * 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. + */ + +#ifndef MCPM_H +#define MCPM_H + +/* + * Maximum number of possible clusters / CPUs per cluster. + * + * This should be sufficient for quite a while, while keeping the + * (assembly) code simpler.  When this starts to grow then we'll have + * to consider dynamic allocation. + */ +#define MAX_CPUS_PER_CLUSTER	4 +#define MAX_NR_CLUSTERS		2 + +#ifndef __ASSEMBLY__ + +#include <linux/types.h> +#include <asm/cacheflush.h> + +/* + * Platform specific code should use this symbol to set up secondary + * entry location for processors to use when released from reset. + */ +extern void mcpm_entry_point(void); + +/* + * This is used to indicate where the given CPU from given cluster should + * branch once it is ready to re-enter the kernel using ptr, or NULL if it + * should be gated.  A gated CPU is held in a WFE loop until its vector + * becomes non NULL. + */ +void mcpm_set_entry_vector(unsigned cpu, unsigned cluster, void *ptr); + +/* + * CPU/cluster power operations API for higher subsystems to use. + */ + +/** + * mcpm_cpu_power_up - make given CPU in given cluster runable + * + * @cpu: CPU number within given cluster + * @cluster: cluster number for the CPU + * + * The identified CPU is brought out of reset.  If the cluster was powered + * down then it is brought up as well, taking care not to let the other CPUs + * in the cluster run, and ensuring appropriate cluster setup. + * + * Caller must ensure the appropriate entry vector is initialized with + * mcpm_set_entry_vector() prior to calling this. + * + * This must be called in a sleepable context.  However, the implementation + * is strongly encouraged to return early and let the operation happen + * asynchronously, especially when significant delays are expected. + * + * If the operation cannot be performed then an error code is returned. + */ +int mcpm_cpu_power_up(unsigned int cpu, unsigned int cluster); + +/** + * mcpm_cpu_power_down - power the calling CPU down + * + * The calling CPU is powered down. + * + * If this CPU is found to be the "last man standing" in the cluster + * then the cluster is prepared for power-down too. + * + * This must be called with interrupts disabled. + * + * This does not return.  Re-entry in the kernel is expected via + * mcpm_entry_point. + */ +void mcpm_cpu_power_down(void); + +/** + * mcpm_cpu_suspend - bring the calling CPU in a suspended state + * + * @expected_residency: duration in microseconds the CPU is expected + *			to remain suspended, or 0 if unknown/infinity. + * + * The calling CPU is suspended.  The expected residency argument is used + * as a hint by the platform specific backend to implement the appropriate + * sleep state level according to the knowledge it has on wake-up latency + * for the given hardware. + * + * If this CPU is found to be the "last man standing" in the cluster + * then the cluster may be prepared for power-down too, if the expected + * residency makes it worthwhile. + * + * This must be called with interrupts disabled. + * + * This does not return.  Re-entry in the kernel is expected via + * mcpm_entry_point. + */ +void mcpm_cpu_suspend(u64 expected_residency); + +/** + * mcpm_cpu_powered_up - housekeeping workafter a CPU has been powered up + * + * This lets the platform specific backend code perform needed housekeeping + * work.  This must be called by the newly activated CPU as soon as it is + * fully operational in kernel space, before it enables interrupts. + * + * If the operation cannot be performed then an error code is returned. + */ +int mcpm_cpu_powered_up(void); + +/* + * Platform specific methods used in the implementation of the above API. + */ +struct mcpm_platform_ops { +	int (*power_up)(unsigned int cpu, unsigned int cluster); +	void (*power_down)(void); +	void (*suspend)(u64); +	void (*powered_up)(void); +}; + +/** + * mcpm_platform_register - register platform specific power methods + * + * @ops: mcpm_platform_ops structure to register + * + * An error is returned if the registration has been done previously. + */ +int __init mcpm_platform_register(const struct mcpm_platform_ops *ops); + +/* Synchronisation structures for coordinating safe cluster setup/teardown: */ + +/* + * When modifying this structure, make sure you update the MCPM_SYNC_ defines + * to match. + */ +struct mcpm_sync_struct { +	/* individual CPU states */ +	struct { +		s8 cpu __aligned(__CACHE_WRITEBACK_GRANULE); +	} cpus[MAX_CPUS_PER_CLUSTER]; + +	/* cluster state */ +	s8 cluster __aligned(__CACHE_WRITEBACK_GRANULE); + +	/* inbound-side state */ +	s8 inbound __aligned(__CACHE_WRITEBACK_GRANULE); +}; + +struct sync_struct { +	struct mcpm_sync_struct clusters[MAX_NR_CLUSTERS]; +}; + +extern unsigned long sync_phys;	/* physical address of *mcpm_sync */ + +void __mcpm_cpu_going_down(unsigned int cpu, unsigned int cluster); +void __mcpm_cpu_down(unsigned int cpu, unsigned int cluster); +void __mcpm_outbound_leave_critical(unsigned int cluster, int state); +bool __mcpm_outbound_enter_critical(unsigned int this_cpu, unsigned int cluster); +int __mcpm_cluster_state(unsigned int cluster); + +int __init mcpm_sync_init( +	void (*power_up_setup)(unsigned int affinity_level)); + +void __init mcpm_smp_set_ops(void); + +#else + +/*  + * asm-offsets.h causes trouble when included in .c files, and cacheflush.h + * cannot be included in asm files.  Let's work around the conflict like this. + */ +#include <asm/asm-offsets.h> +#define __CACHE_WRITEBACK_GRANULE CACHE_WRITEBACK_GRANULE + +#endif /* ! __ASSEMBLY__ */ + +/* Definitions for mcpm_sync_struct */ +#define CPU_DOWN		0x11 +#define CPU_COMING_UP		0x12 +#define CPU_UP			0x13 +#define CPU_GOING_DOWN		0x14 + +#define CLUSTER_DOWN		0x21 +#define CLUSTER_UP		0x22 +#define CLUSTER_GOING_DOWN	0x23 + +#define INBOUND_NOT_COMING_UP	0x31 +#define INBOUND_COMING_UP	0x32 + +/* + * Offsets for the mcpm_sync_struct members, for use in asm. + * We don't want to make them global to the kernel via asm-offsets.c. + */ +#define MCPM_SYNC_CLUSTER_CPUS	0 +#define MCPM_SYNC_CPU_SIZE	__CACHE_WRITEBACK_GRANULE +#define MCPM_SYNC_CLUSTER_CLUSTER \ +	(MCPM_SYNC_CLUSTER_CPUS + MCPM_SYNC_CPU_SIZE * MAX_CPUS_PER_CLUSTER) +#define MCPM_SYNC_CLUSTER_INBOUND \ +	(MCPM_SYNC_CLUSTER_CLUSTER + __CACHE_WRITEBACK_GRANULE) +#define MCPM_SYNC_CLUSTER_SIZE \ +	(MCPM_SYNC_CLUSTER_INBOUND + __CACHE_WRITEBACK_GRANULE) + +#endif diff --git a/arch/arm/include/asm/mmu_context.h b/arch/arm/include/asm/mmu_context.h index 863a6611323..a7b85e0d0cc 100644 --- a/arch/arm/include/asm/mmu_context.h +++ b/arch/arm/include/asm/mmu_context.h @@ -27,6 +27,8 @@ void __check_vmalloc_seq(struct mm_struct *mm);  void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk);  #define init_new_context(tsk,mm)	({ atomic64_set(&mm->context.id, 0); 0; }) +DECLARE_PER_CPU(atomic64_t, active_asids); +  #else	/* !CONFIG_CPU_HAS_ASID */  #ifdef CONFIG_MMU diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h index 6ef8afd1b64..86b8fe398b9 100644 --- a/arch/arm/include/asm/pgtable-3level.h +++ b/arch/arm/include/asm/pgtable-3level.h @@ -111,7 +111,7 @@  #define L_PTE_S2_MT_WRITETHROUGH (_AT(pteval_t, 0xa) << 2) /* MemAttr[3:0] */  #define L_PTE_S2_MT_WRITEBACK	 (_AT(pteval_t, 0xf) << 2) /* MemAttr[3:0] */  #define L_PTE_S2_RDONLY		 (_AT(pteval_t, 1) << 6)   /* HAP[1]   */ -#define L_PTE_S2_RDWR		 (_AT(pteval_t, 2) << 6)   /* HAP[2:1] */ +#define L_PTE_S2_RDWR		 (_AT(pteval_t, 3) << 6)   /* HAP[2:1] */  /*   * Hyp-mode PL2 PTE definitions for LPAE. diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index 80d6fc4dbe4..9bcd262a900 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h @@ -61,6 +61,15 @@ extern void __pgd_error(const char *file, int line, pgd_t);  #define FIRST_USER_ADDRESS	PAGE_SIZE  /* + * Use TASK_SIZE as the ceiling argument for free_pgtables() and + * free_pgd_range() to avoid freeing the modules pmd when LPAE is enabled (pmd + * page shared between user and kernel). + */ +#ifdef CONFIG_ARM_LPAE +#define USER_PGTABLES_CEILING	TASK_SIZE +#endif + +/*   * The pgprot_* and protection_map entries will be fixed up in runtime   * to include the cachable and bufferable bits based on memory policy,   * as well as any architecture dependent bits like global/ASID and SMP diff --git a/arch/arm/include/asm/system_misc.h b/arch/arm/include/asm/system_misc.h index 5a85f148b60..21a23e378bb 100644 --- a/arch/arm/include/asm/system_misc.h +++ b/arch/arm/include/asm/system_misc.h @@ -21,9 +21,6 @@ extern void (*arm_pm_idle)(void);  extern unsigned int user_debug; -extern void disable_hlt(void); -extern void enable_hlt(void); -  #endif /* !__ASSEMBLY__ */  #endif /* __ASM_ARM_SYSTEM_MISC_H */ diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h index cddda1f41f0..1995d1a8406 100644 --- a/arch/arm/include/asm/thread_info.h +++ b/arch/arm/include/asm/thread_info.h @@ -152,6 +152,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,  #define TIF_SYSCALL_AUDIT	9  #define TIF_SYSCALL_TRACEPOINT	10  #define TIF_SECCOMP		11	/* seccomp syscall filtering active */ +#define TIF_NOHZ		12	/* in adaptive nohz mode */  #define TIF_USING_IWMMXT	17  #define TIF_MEMDIE		18	/* is terminating due to OOM killer */  #define TIF_RESTORE_SIGMASK	20 diff --git a/arch/arm/include/asm/tlbflush.h b/arch/arm/include/asm/tlbflush.h index 4db8c8820f0..a3625d141c1 100644 --- a/arch/arm/include/asm/tlbflush.h +++ b/arch/arm/include/asm/tlbflush.h @@ -14,7 +14,6 @@  #include <asm/glue.h> -#define TLB_V3_PAGE	(1 << 0)  #define TLB_V4_U_PAGE	(1 << 1)  #define TLB_V4_D_PAGE	(1 << 2)  #define TLB_V4_I_PAGE	(1 << 3) @@ -22,7 +21,6 @@  #define TLB_V6_D_PAGE	(1 << 5)  #define TLB_V6_I_PAGE	(1 << 6) -#define TLB_V3_FULL	(1 << 8)  #define TLB_V4_U_FULL	(1 << 9)  #define TLB_V4_D_FULL	(1 << 10)  #define TLB_V4_I_FULL	(1 << 11) @@ -52,7 +50,6 @@   *	=============   *   *	We have the following to choose from: - *	  v3    - ARMv3   *	  v4    - ARMv4 without write buffer   *	  v4wb  - ARMv4 with write buffer without I TLB flush entry instruction   *	  v4wbi - ARMv4 with write buffer with I TLB flush entry instruction @@ -169,7 +166,7 @@  # define v6wbi_always_flags	(-1UL)  #endif -#define v7wbi_tlb_flags_smp	(TLB_WB | TLB_DCLEAN | TLB_BARRIER | \ +#define v7wbi_tlb_flags_smp	(TLB_WB | TLB_BARRIER | \  				 TLB_V7_UIS_FULL | TLB_V7_UIS_PAGE | \  				 TLB_V7_UIS_ASID | TLB_V7_UIS_BP)  #define v7wbi_tlb_flags_up	(TLB_WB | TLB_DCLEAN | TLB_BARRIER | \ @@ -330,7 +327,6 @@ static inline void local_flush_tlb_all(void)  	if (tlb_flag(TLB_WB))  		dsb(); -	tlb_op(TLB_V3_FULL, "c6, c0, 0", zero);  	tlb_op(TLB_V4_U_FULL | TLB_V6_U_FULL, "c8, c7, 0", zero);  	tlb_op(TLB_V4_D_FULL | TLB_V6_D_FULL, "c8, c6, 0", zero);  	tlb_op(TLB_V4_I_FULL | TLB_V6_I_FULL, "c8, c5, 0", zero); @@ -351,9 +347,8 @@ static inline void local_flush_tlb_mm(struct mm_struct *mm)  	if (tlb_flag(TLB_WB))  		dsb(); -	if (possible_tlb_flags & (TLB_V3_FULL|TLB_V4_U_FULL|TLB_V4_D_FULL|TLB_V4_I_FULL)) { +	if (possible_tlb_flags & (TLB_V4_U_FULL|TLB_V4_D_FULL|TLB_V4_I_FULL)) {  		if (cpumask_test_cpu(get_cpu(), mm_cpumask(mm))) { -			tlb_op(TLB_V3_FULL, "c6, c0, 0", zero);  			tlb_op(TLB_V4_U_FULL, "c8, c7, 0", zero);  			tlb_op(TLB_V4_D_FULL, "c8, c6, 0", zero);  			tlb_op(TLB_V4_I_FULL, "c8, c5, 0", zero); @@ -385,9 +380,8 @@ local_flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)  	if (tlb_flag(TLB_WB))  		dsb(); -	if (possible_tlb_flags & (TLB_V3_PAGE|TLB_V4_U_PAGE|TLB_V4_D_PAGE|TLB_V4_I_PAGE|TLB_V4_I_FULL) && +	if (possible_tlb_flags & (TLB_V4_U_PAGE|TLB_V4_D_PAGE|TLB_V4_I_PAGE|TLB_V4_I_FULL) &&  	    cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) { -		tlb_op(TLB_V3_PAGE, "c6, c0, 0", uaddr);  		tlb_op(TLB_V4_U_PAGE, "c8, c7, 1", uaddr);  		tlb_op(TLB_V4_D_PAGE, "c8, c6, 1", uaddr);  		tlb_op(TLB_V4_I_PAGE, "c8, c5, 1", uaddr); @@ -418,7 +412,6 @@ static inline void local_flush_tlb_kernel_page(unsigned long kaddr)  	if (tlb_flag(TLB_WB))  		dsb(); -	tlb_op(TLB_V3_PAGE, "c6, c0, 0", kaddr);  	tlb_op(TLB_V4_U_PAGE, "c8, c7, 1", kaddr);  	tlb_op(TLB_V4_D_PAGE, "c8, c6, 1", kaddr);  	tlb_op(TLB_V4_I_PAGE, "c8, c5, 1", kaddr); @@ -450,6 +443,21 @@ static inline void local_flush_bp_all(void)  		isb();  } +#ifdef CONFIG_ARM_ERRATA_798181 +static inline void dummy_flush_tlb_a15_erratum(void) +{ +	/* +	 * Dummy TLBIMVAIS. Using the unmapped address 0 and ASID 0. +	 */ +	asm("mcr p15, 0, %0, c8, c3, 1" : : "r" (0)); +	dsb(); +} +#else +static inline void dummy_flush_tlb_a15_erratum(void) +{ +} +#endif +  /*   *	flush_pmd_entry   * diff --git a/arch/arm/include/asm/unistd.h b/arch/arm/include/asm/unistd.h index e4ddfb39ca3..141baa3f9a7 100644 --- a/arch/arm/include/asm/unistd.h +++ b/arch/arm/include/asm/unistd.h @@ -44,14 +44,6 @@  #define __ARCH_WANT_SYS_CLONE  /* - * "Conditional" syscalls - * - * What we want is __attribute__((weak,alias("sys_ni_syscall"))), - * but it doesn't work on all toolchains, so we just do it by hand - */ -#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall") - -/*   * Unimplemented (or alternatively implemented) syscalls   */  #define __IGNORE_fadvise64_64 diff --git a/arch/arm/mach-bcm2835/include/mach/debug-macro.S b/arch/arm/include/debug/bcm2835.S index 8a161e44ae2..aed9199bd84 100644 --- a/arch/arm/mach-bcm2835/include/mach/debug-macro.S +++ b/arch/arm/include/debug/bcm2835.S @@ -11,7 +11,8 @@   *   */ -#include <mach/bcm2835_soc.h> +#define BCM2835_DEBUG_PHYS 0x20201000 +#define BCM2835_DEBUG_VIRT 0xf0201000  	.macro	addruart, rp, rv, tmp  	ldr	\rp, =BCM2835_DEBUG_PHYS diff --git a/arch/arm/mach-cns3xxx/include/mach/debug-macro.S b/arch/arm/include/debug/cns3xxx.S index d04c150baa1..d04c150baa1 100644 --- a/arch/arm/mach-cns3xxx/include/mach/debug-macro.S +++ b/arch/arm/include/debug/cns3xxx.S diff --git a/arch/arm/mach-mxs/include/mach/debug-macro.S b/arch/arm/include/debug/mxs.S index 90c6b7836ad..d86951551ca 100644 --- a/arch/arm/mach-mxs/include/mach/debug-macro.S +++ b/arch/arm/include/debug/mxs.S @@ -11,16 +11,13 @@   *   */ -#include <mach/mx23.h> -#include <mach/mx28.h> -  #ifdef CONFIG_DEBUG_IMX23_UART -#define UART_PADDR	MX23_DUART_BASE_ADDR +#define UART_PADDR	0x80070000  #elif defined (CONFIG_DEBUG_IMX28_UART) -#define UART_PADDR	MX28_DUART_BASE_ADDR +#define UART_PADDR	0x80074000  #endif -#define UART_VADDR	MXS_IO_ADDRESS(UART_PADDR) +#define UART_VADDR	0xfe100000  		.macro	addruart, rp, rv, tmp  		ldr	\rp, =UART_PADDR	@ physical diff --git a/arch/arm/mach-nomadik/include/mach/debug-macro.S b/arch/arm/include/debug/nomadik.S index 735417922ce..735417922ce 100644 --- a/arch/arm/mach-nomadik/include/mach/debug-macro.S +++ b/arch/arm/include/debug/nomadik.S diff --git a/arch/arm/mach-prima2/include/mach/uart.h b/arch/arm/include/debug/sirf.S index c10510d01a4..dbf250cf18e 100644 --- a/arch/arm/mach-prima2/include/mach/uart.h +++ b/arch/arm/include/debug/sirf.S @@ -1,15 +1,11 @@  /* - * arch/arm/mach-prima2/include/mach/uart.h + * arch/arm/mach-prima2/include/mach/debug-macro.S   *   * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company.   *   * Licensed under GPLv2 or later.   */ -#ifndef __MACH_PRIMA2_SIRFSOC_UART_H -#define __MACH_PRIMA2_SIRFSOC_UART_H - -/* UART-1: used as serial debug port */  #if defined(CONFIG_DEBUG_SIRFPRIMA2_UART1)  #define SIRFSOC_UART1_PA_BASE          0xb0060000  #elif defined(CONFIG_DEBUG_SIRFMARCO_UART1) @@ -17,8 +13,8 @@  #else  #define SIRFSOC_UART1_PA_BASE          0  #endif -#define SIRFSOC_UART1_VA_BASE          SIRFSOC_VA(0x060000) -#define SIRFSOC_UART1_SIZE		SZ_4K + +#define SIRFSOC_UART1_VA_BASE		0xFEC60000  #define SIRFSOC_UART_TXFIFO_STATUS	0x0114  #define SIRFSOC_UART_TXFIFO_DATA	0x0118 @@ -26,4 +22,21 @@  #define SIRFSOC_UART1_TXFIFO_FULL                       (1 << 5)  #define SIRFSOC_UART1_TXFIFO_EMPTY			(1 << 6) -#endif +	.macro	addruart, rp, rv, tmp +	ldr	\rp, =SIRFSOC_UART1_PA_BASE		@ physical +	ldr	\rv, =SIRFSOC_UART1_VA_BASE		@ virtual +	.endm + +	.macro	senduart,rd,rx +	str	\rd, [\rx, #SIRFSOC_UART_TXFIFO_DATA] +	.endm + +	.macro	busyuart,rd,rx +	.endm + +	.macro	waituart,rd,rx +1001:	ldr	\rd, [\rx, #SIRFSOC_UART_TXFIFO_STATUS] +	tst	\rd, #SIRFSOC_UART1_TXFIFO_EMPTY +	beq	1001b +	.endm + diff --git a/arch/arm/include/debug/uncompress.h b/arch/arm/include/debug/uncompress.h new file mode 100644 index 00000000000..0e2949b0fae --- /dev/null +++ b/arch/arm/include/debug/uncompress.h @@ -0,0 +1,7 @@ +#ifdef CONFIG_DEBUG_UNCOMPRESS +extern void putc(int c); +#else +static inline void putc(int c) {} +#endif +static inline void flush(void) {} +static inline void arch_decomp_setup(void) {} diff --git a/arch/arm/include/debug/ux500.S b/arch/arm/include/debug/ux500.S new file mode 100644 index 00000000000..2848857f5b6 --- /dev/null +++ b/arch/arm/include/debug/ux500.S @@ -0,0 +1,48 @@ +/* + * Debugging macro include header + * + *  Copyright (C) 2009 ST-Ericsson + * + * 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. + * + */ + + +#if CONFIG_UX500_DEBUG_UART > 2 +#error Invalid Ux500 debug UART +#endif + +/* + * DEBUG_LL only works if only one SOC is built in.  We don't use #else below + * in order to get "__UX500_UART redefined" warnings if more than one SOC is + * built, so that there's some hint during the build that something is wrong. + */ + +#ifdef CONFIG_UX500_SOC_DB8500 +#define U8500_UART0_PHYS_BASE	(0x80120000) +#define U8500_UART1_PHYS_BASE	(0x80121000) +#define U8500_UART2_PHYS_BASE	(0x80007000) +#define U8500_UART0_VIRT_BASE	(0xa8120000) +#define U8500_UART1_VIRT_BASE	(0xa8121000) +#define U8500_UART2_VIRT_BASE	(0xa8007000) +#define __UX500_PHYS_UART(n)	U8500_UART##n##_PHYS_BASE +#define __UX500_VIRT_UART(n)	U8500_UART##n##_VIRT_BASE +#endif + +#if !defined(__UX500_PHYS_UART) || !defined(__UX500_VIRT_UART) +#error Unknown SOC +#endif + +#define UX500_PHYS_UART(n)	__UX500_PHYS_UART(n) +#define UX500_VIRT_UART(n)	__UX500_VIRT_UART(n) +#define UART_PHYS_BASE	UX500_PHYS_UART(CONFIG_UX500_DEBUG_UART) +#define UART_VIRT_BASE	UX500_VIRT_UART(CONFIG_UX500_DEBUG_UART) + +	.macro	addruart, rp, rv, tmp +	ldr	\rp, =UART_PHYS_BASE		@ no, physical address +	ldr	\rv, =UART_VIRT_BASE		@ yes, virtual address +	.endm + +#include <asm/hardware/debug-pl01x.S> diff --git a/arch/arm/include/uapi/asm/kvm.h b/arch/arm/include/uapi/asm/kvm.h index 023bfeb367b..c1ee007523d 100644 --- a/arch/arm/include/uapi/asm/kvm.h +++ b/arch/arm/include/uapi/asm/kvm.h @@ -53,12 +53,12 @@  #define KVM_ARM_FIQ_spsr	fiq_regs[7]  struct kvm_regs { -	struct pt_regs usr_regs;/* R0_usr - R14_usr, PC, CPSR */ -	__u32 svc_regs[3];	/* SP_svc, LR_svc, SPSR_svc */ -	__u32 abt_regs[3];	/* SP_abt, LR_abt, SPSR_abt */ -	__u32 und_regs[3];	/* SP_und, LR_und, SPSR_und */ -	__u32 irq_regs[3];	/* SP_irq, LR_irq, SPSR_irq */ -	__u32 fiq_regs[8];	/* R8_fiq - R14_fiq, SPSR_fiq */ +	struct pt_regs usr_regs;	/* R0_usr - R14_usr, PC, CPSR */ +	unsigned long svc_regs[3];	/* SP_svc, LR_svc, SPSR_svc */ +	unsigned long abt_regs[3];	/* SP_abt, LR_abt, SPSR_abt */ +	unsigned long und_regs[3];	/* SP_und, LR_und, SPSR_und */ +	unsigned long irq_regs[3];	/* SP_irq, LR_irq, SPSR_irq */ +	unsigned long fiq_regs[8];	/* R8_fiq - R14_fiq, SPSR_fiq */  };  /* Supported Processor Types */ diff --git a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c index 923eec7105c..a53efa99369 100644 --- a/arch/arm/kernel/asm-offsets.c +++ b/arch/arm/kernel/asm-offsets.c @@ -149,6 +149,10 @@ int main(void)    DEFINE(DMA_BIDIRECTIONAL,	DMA_BIDIRECTIONAL);    DEFINE(DMA_TO_DEVICE,		DMA_TO_DEVICE);    DEFINE(DMA_FROM_DEVICE,	DMA_FROM_DEVICE); +  BLANK(); +  DEFINE(CACHE_WRITEBACK_ORDER, __CACHE_WRITEBACK_ORDER); +  DEFINE(CACHE_WRITEBACK_GRANULE, __CACHE_WRITEBACK_GRANULE); +  BLANK();  #ifdef CONFIG_KVM_ARM_HOST    DEFINE(VCPU_KVM,		offsetof(struct kvm_vcpu, kvm));    DEFINE(VCPU_MIDR,		offsetof(struct kvm_vcpu, arch.midr)); @@ -165,10 +169,10 @@ int main(void)    DEFINE(VCPU_PC,		offsetof(struct kvm_vcpu, arch.regs.usr_regs.ARM_pc));    DEFINE(VCPU_CPSR,		offsetof(struct kvm_vcpu, arch.regs.usr_regs.ARM_cpsr));    DEFINE(VCPU_IRQ_LINES,	offsetof(struct kvm_vcpu, arch.irq_lines)); -  DEFINE(VCPU_HSR,		offsetof(struct kvm_vcpu, arch.hsr)); -  DEFINE(VCPU_HxFAR,		offsetof(struct kvm_vcpu, arch.hxfar)); -  DEFINE(VCPU_HPFAR,		offsetof(struct kvm_vcpu, arch.hpfar)); -  DEFINE(VCPU_HYP_PC,		offsetof(struct kvm_vcpu, arch.hyp_pc)); +  DEFINE(VCPU_HSR,		offsetof(struct kvm_vcpu, arch.fault.hsr)); +  DEFINE(VCPU_HxFAR,		offsetof(struct kvm_vcpu, arch.fault.hxfar)); +  DEFINE(VCPU_HPFAR,		offsetof(struct kvm_vcpu, arch.fault.hpfar)); +  DEFINE(VCPU_HYP_PC,		offsetof(struct kvm_vcpu, arch.fault.hyp_pc));  #ifdef CONFIG_KVM_ARM_VGIC    DEFINE(VCPU_VGIC_CPU,		offsetof(struct kvm_vcpu, arch.vgic_cpu));    DEFINE(VGIC_CPU_HCR,		offsetof(struct vgic_cpu, vgic_hcr)); diff --git a/arch/arm/kernel/atags_proc.c b/arch/arm/kernel/atags_proc.c index 42a1a1415fa..c7ff8073416 100644 --- a/arch/arm/kernel/atags_proc.c +++ b/arch/arm/kernel/atags_proc.c @@ -9,24 +9,18 @@ struct buffer {  	char data[];  }; -static int -read_buffer(char* page, char** start, off_t off, int count, -	int* eof, void* data) +static ssize_t atags_read(struct file *file, char __user *buf, +			  size_t count, loff_t *ppos)  { -	struct buffer *buffer = (struct buffer *)data; - -	if (off >= buffer->size) { -		*eof = 1; -		return 0; -	} - -	count = min((int) (buffer->size - off), count); - -	memcpy(page, &buffer->data[off], count); - -	return count; +	struct buffer *b = PDE_DATA(file_inode(file)); +	return simple_read_from_buffer(buf, count, ppos, b->data, b->size);  } +static const struct file_operations atags_fops = { +	.read = atags_read, +	.llseek = default_llseek, +}; +  #define BOOT_PARAMS_SIZE 1536  static char __initdata atags_copy[BOOT_PARAMS_SIZE]; @@ -66,9 +60,7 @@ static int __init init_atags_procfs(void)  	b->size = size;  	memcpy(b->data, atags_copy, size); -	tags_entry = create_proc_read_entry("atags", 0400, -			NULL, read_buffer, b); - +	tags_entry = proc_create_data("atags", 0400, NULL, &atags_fops, b);  	if (!tags_entry)  		goto nomem; diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c index a1f73b502ef..b2ed73c4548 100644 --- a/arch/arm/kernel/bios32.c +++ b/arch/arm/kernel/bios32.c @@ -462,6 +462,7 @@ static void pcibios_init_hw(struct hw_pci *hw, struct list_head *head)  		sys->busnr   = busnr;  		sys->swizzle = hw->swizzle;  		sys->map_irq = hw->map_irq; +		sys->align_resource = hw->align_resource;  		INIT_LIST_HEAD(&sys->resources);  		if (hw->private_data) @@ -574,6 +575,8 @@ char * __init pcibios_setup(char *str)  resource_size_t pcibios_align_resource(void *data, const struct resource *res,  				resource_size_t size, resource_size_t align)  { +	struct pci_dev *dev = data; +	struct pci_sys_data *sys = dev->sysdata;  	resource_size_t start = res->start;  	if (res->flags & IORESOURCE_IO && start & 0x300) @@ -581,6 +584,9 @@ resource_size_t pcibios_align_resource(void *data, const struct resource *res,  	start = (start + align - 1) & ~(align - 1); +	if (sys->align_resource) +		return sys->align_resource(dev, res, start, size, align); +  	return start;  } diff --git a/arch/arm/kernel/early_printk.c b/arch/arm/kernel/early_printk.c index 85aa2b29269..43076536965 100644 --- a/arch/arm/kernel/early_printk.c +++ b/arch/arm/kernel/early_printk.c @@ -29,28 +29,17 @@ static void early_console_write(struct console *con, const char *s, unsigned n)  	early_write(s, n);  } -static struct console early_console = { +static struct console early_console_dev = {  	.name =		"earlycon",  	.write =	early_console_write,  	.flags =	CON_PRINTBUFFER | CON_BOOT,  	.index =	-1,  }; -asmlinkage void early_printk(const char *fmt, ...) -{ -	char buf[512]; -	int n; -	va_list ap; - -	va_start(ap, fmt); -	n = vscnprintf(buf, sizeof(buf), fmt, ap); -	early_write(buf, n); -	va_end(ap); -} -  static int __init setup_early_printk(char *buf)  { -	register_console(&early_console); +	early_console = &early_console_dev; +	register_console(&early_console_dev);  	return 0;  } diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index cd22d821bf7..582b405befc 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S @@ -192,18 +192,6 @@ __dabt_svc:  	svc_entry  	mov	r2, sp  	dabt_helper - -	@ -	@ IRQs off again before pulling preserved data off the stack -	@ -	disable_irq_notrace - -#ifdef CONFIG_TRACE_IRQFLAGS -	tst	r5, #PSR_I_BIT -	bleq	trace_hardirqs_on -	tst	r5, #PSR_I_BIT -	blne	trace_hardirqs_off -#endif  	svc_exit r5				@ return from exception   UNWIND(.fnend		)  ENDPROC(__dabt_svc) @@ -223,12 +211,7 @@ __irq_svc:  	blne	svc_preempt  #endif -#ifdef CONFIG_TRACE_IRQFLAGS -	@ The parent context IRQs must have been enabled to get here in -	@ the first place, so there's no point checking the PSR I bit. -	bl	trace_hardirqs_on -#endif -	svc_exit r5				@ return from exception +	svc_exit r5, irq = 1			@ return from exception   UNWIND(.fnend		)  ENDPROC(__irq_svc) @@ -295,22 +278,8 @@ __und_svc_fault:  	mov	r0, sp				@ struct pt_regs *regs  	bl	__und_fault -	@ -	@ IRQs off again before pulling preserved data off the stack -	@  __und_svc_finish: -	disable_irq_notrace - -	@ -	@ restore SPSR and restart the instruction -	@  	ldr	r5, [sp, #S_PSR]		@ Get SVC cpsr -#ifdef CONFIG_TRACE_IRQFLAGS -	tst	r5, #PSR_I_BIT -	bleq	trace_hardirqs_on -	tst	r5, #PSR_I_BIT -	blne	trace_hardirqs_off -#endif  	svc_exit r5				@ return from exception   UNWIND(.fnend		)  ENDPROC(__und_svc) @@ -320,18 +289,6 @@ __pabt_svc:  	svc_entry  	mov	r2, sp				@ regs  	pabt_helper - -	@ -	@ IRQs off again before pulling preserved data off the stack -	@ -	disable_irq_notrace - -#ifdef CONFIG_TRACE_IRQFLAGS -	tst	r5, #PSR_I_BIT -	bleq	trace_hardirqs_on -	tst	r5, #PSR_I_BIT -	blne	trace_hardirqs_off -#endif  	svc_exit r5				@ return from exception   UNWIND(.fnend		)  ENDPROC(__pabt_svc) @@ -396,6 +353,7 @@ ENDPROC(__pabt_svc)  #ifdef CONFIG_IRQSOFF_TRACER  	bl	trace_hardirqs_off  #endif +	ct_user_exit save = 0  	.endm  	.macro	kuser_cmpxchg_check diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index 3248cde504e..bc5bc0a9713 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S @@ -35,12 +35,11 @@ ret_fast_syscall:  	ldr	r1, [tsk, #TI_FLAGS]  	tst	r1, #_TIF_WORK_MASK  	bne	fast_work_pending -#if defined(CONFIG_IRQSOFF_TRACER)  	asm_trace_hardirqs_on -#endif  	/* perform architecture specific actions before user return */  	arch_ret_to_user r1, lr +	ct_user_enter  	restore_user_regs fast = 1, offset = S_OFF   UNWIND(.fnend		) @@ -71,11 +70,11 @@ ENTRY(ret_to_user_from_irq)  	tst	r1, #_TIF_WORK_MASK  	bne	work_pending  no_work_pending: -#if defined(CONFIG_IRQSOFF_TRACER)  	asm_trace_hardirqs_on -#endif +  	/* perform architecture specific actions before user return */  	arch_ret_to_user r1, lr +	ct_user_enter save = 0  	restore_user_regs fast = 0, offset = 0  ENDPROC(ret_to_user_from_irq) @@ -276,7 +275,13 @@ ENDPROC(ftrace_graph_caller_old)   */  .macro mcount_enter +/* + * This pad compensates for the push {lr} at the call site.  Note that we are + * unable to unwind through a function which does not otherwise save its lr. + */ + UNWIND(.pad	#4)  	stmdb	sp!, {r0-r3, lr} + UNWIND(.save	{r0-r3, lr})  .endm  .macro mcount_get_lr reg @@ -289,6 +294,7 @@ ENDPROC(ftrace_graph_caller_old)  .endm  ENTRY(__gnu_mcount_nc) +UNWIND(.fnstart)  #ifdef CONFIG_DYNAMIC_FTRACE  	mov	ip, lr  	ldmia	sp!, {lr} @@ -296,17 +302,22 @@ ENTRY(__gnu_mcount_nc)  #else  	__mcount  #endif +UNWIND(.fnend)  ENDPROC(__gnu_mcount_nc)  #ifdef CONFIG_DYNAMIC_FTRACE  ENTRY(ftrace_caller) +UNWIND(.fnstart)  	__ftrace_caller +UNWIND(.fnend)  ENDPROC(ftrace_caller)  #endif  #ifdef CONFIG_FUNCTION_GRAPH_TRACER  ENTRY(ftrace_graph_caller) +UNWIND(.fnstart)  	__ftrace_graph_caller +UNWIND(.fnend)  ENDPROC(ftrace_graph_caller)  #endif @@ -394,6 +405,7 @@ ENTRY(vector_swi)  	mcr	p15, 0, ip, c1, c0		@ update control register  #endif  	enable_irq +	ct_user_exit  	get_thread_info tsk  	adr	tbl, sys_call_table		@ load syscall table pointer diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S index 9a8531eadd3..160f3376ba6 100644 --- a/arch/arm/kernel/entry-header.S +++ b/arch/arm/kernel/entry-header.S @@ -74,7 +74,24 @@  	.endm  #ifndef CONFIG_THUMB2_KERNEL -	.macro	svc_exit, rpsr +	.macro	svc_exit, rpsr, irq = 0 +	.if	\irq != 0 +	@ IRQs already off +#ifdef CONFIG_TRACE_IRQFLAGS +	@ The parent context IRQs must have been enabled to get here in +	@ the first place, so there's no point checking the PSR I bit. +	bl	trace_hardirqs_on +#endif +	.else +	@ IRQs off again before pulling preserved data off the stack +	disable_irq_notrace +#ifdef CONFIG_TRACE_IRQFLAGS +	tst	\rpsr, #PSR_I_BIT +	bleq	trace_hardirqs_on +	tst	\rpsr, #PSR_I_BIT +	blne	trace_hardirqs_off +#endif +	.endif  	msr	spsr_cxsf, \rpsr  #if defined(CONFIG_CPU_V6)  	ldr	r0, [sp] @@ -120,7 +137,24 @@  	mov	pc, \reg  	.endm  #else	/* CONFIG_THUMB2_KERNEL */ -	.macro	svc_exit, rpsr +	.macro	svc_exit, rpsr, irq = 0 +	.if	\irq != 0 +	@ IRQs already off +#ifdef CONFIG_TRACE_IRQFLAGS +	@ The parent context IRQs must have been enabled to get here in +	@ the first place, so there's no point checking the PSR I bit. +	bl	trace_hardirqs_on +#endif +	.else +	@ IRQs off again before pulling preserved data off the stack +	disable_irq_notrace +#ifdef CONFIG_TRACE_IRQFLAGS +	tst	\rpsr, #PSR_I_BIT +	bleq	trace_hardirqs_on +	tst	\rpsr, #PSR_I_BIT +	blne	trace_hardirqs_off +#endif +	.endif  	ldr	lr, [sp, #S_SP]			@ top of the stack  	ldrd	r0, r1, [sp, #S_LR]		@ calling lr and pc  	clrex					@ clear the exclusive monitor @@ -164,6 +198,34 @@  #endif	/* !CONFIG_THUMB2_KERNEL */  /* + * Context tracking subsystem.  Used to instrument transitions + * between user and kernel mode. + */ +	.macro ct_user_exit, save = 1 +#ifdef CONFIG_CONTEXT_TRACKING +	.if	\save +	stmdb   sp!, {r0-r3, ip, lr} +	bl	user_exit +	ldmia	sp!, {r0-r3, ip, lr} +	.else +	bl	user_exit +	.endif +#endif +	.endm + +	.macro ct_user_enter, save = 1 +#ifdef CONFIG_CONTEXT_TRACKING +	.if	\save +	stmdb   sp!, {r0-r3, ip, lr} +	bl	user_enter +	ldmia	sp!, {r0-r3, ip, lr} +	.else +	bl	user_enter +	.endif +#endif +	.endm + +/*   * These are the registers used in the syscall handler, and allow us to   * have in theory up to 7 arguments to a function - r0 to r6.   * diff --git a/arch/arm/kernel/etm.c b/arch/arm/kernel/etm.c index 9b6de8c988f..8ff0ecdc637 100644 --- a/arch/arm/kernel/etm.c +++ b/arch/arm/kernel/etm.c @@ -254,7 +254,7 @@ static void sysrq_etm_dump(int key)  static struct sysrq_key_op sysrq_etm_op = {  	.handler = sysrq_etm_dump, -	.help_msg = "ETM buffer dump", +	.help_msg = "etm-buffer-dump(v)",  	.action_msg = "etm",  }; diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S index 854bd22380d..5b391a689b4 100644 --- a/arch/arm/kernel/head-common.S +++ b/arch/arm/kernel/head-common.S @@ -98,8 +98,9 @@ __mmap_switched:  	str	r9, [r4]			@ Save processor ID  	str	r1, [r5]			@ Save machine type  	str	r2, [r6]			@ Save atags pointer -	bic	r4, r0, #CR_A			@ Clear 'A' bit -	stmia	r7, {r0, r4}			@ Save control register values +	cmp	r7, #0 +	bicne	r4, r0, #CR_A			@ Clear 'A' bit +	stmneia	r7, {r0, r4}			@ Save control register values  	b	start_kernel  ENDPROC(__mmap_switched) @@ -113,7 +114,11 @@ __mmap_switched_data:  	.long	processor_id			@ r4  	.long	__machine_arch_type		@ r5  	.long	__atags_pointer			@ r6 +#ifdef CONFIG_CPU_CP15  	.long	cr_alignment			@ r7 +#else +	.long	0				@ r7 +#endif  	.long	init_thread_union + THREAD_START_SP @ sp  	.size	__mmap_switched_data, . - __mmap_switched_data diff --git a/arch/arm/kernel/head-nommu.S b/arch/arm/kernel/head-nommu.S index 2c228a07e58..6a2e09c952c 100644 --- a/arch/arm/kernel/head-nommu.S +++ b/arch/arm/kernel/head-nommu.S @@ -32,15 +32,21 @@   * numbers for r1.   *   */ -	.arm  	__HEAD + +#ifdef CONFIG_CPU_THUMBONLY +	.thumb +ENTRY(stext) +#else +	.arm  ENTRY(stext)   THUMB(	adr	r9, BSYM(1f)	)	@ Kernel is always entered in ARM.   THUMB(	bx	r9		)	@ If this is a Thumb-2 kernel,   THUMB(	.thumb			)	@ switch to Thumb now.   THUMB(1:			) +#endif  	setmode	PSR_F_BIT | PSR_I_BIT | SVC_MODE, r9 @ ensure svc mode  						@ and irqs disabled diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index e0eb9a1cae7..8bac553fe21 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S @@ -267,7 +267,7 @@ __create_page_tables:  	addne	r6, r6, #1 << SECTION_SHIFT  	strne	r6, [r3] -#if defined(CONFIG_LPAE) && defined(CONFIG_CPU_ENDIAN_BE8) +#if defined(CONFIG_ARM_LPAE) && defined(CONFIG_CPU_ENDIAN_BE8)  	sub	r4, r4, #4			@ Fixup page table pointer  						@ for 64-bit descriptors  #endif diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c index 96093b75ab9..1fd749ee4a1 100644 --- a/arch/arm/kernel/hw_breakpoint.c +++ b/arch/arm/kernel/hw_breakpoint.c @@ -966,7 +966,7 @@ static void reset_ctrl_regs(void *unused)  	}  	if (err) { -		pr_warning("CPU %d debug is powered down!\n", cpu); +		pr_warn_once("CPU %d debug is powered down!\n", cpu);  		cpumask_or(&debug_err_mask, &debug_err_mask, cpumask_of(cpu));  		return;  	} @@ -987,7 +987,7 @@ clear_vcr:  	isb();  	if (cpumask_intersects(&debug_err_mask, cpumask_of(cpu))) { -		pr_warning("CPU %d failed to disable vector catch\n", cpu); +		pr_warn_once("CPU %d failed to disable vector catch\n", cpu);  		return;  	} @@ -1007,7 +1007,7 @@ clear_vcr:  	}  	if (cpumask_intersects(&debug_err_mask, cpumask_of(cpu))) { -		pr_warning("CPU %d failed to clear debug register pairs\n", cpu); +		pr_warn_once("CPU %d failed to clear debug register pairs\n", cpu);  		return;  	} @@ -1043,7 +1043,7 @@ static int dbg_cpu_pm_notify(struct notifier_block *self, unsigned long action,  	return NOTIFY_OK;  } -static struct notifier_block __cpuinitdata dbg_cpu_pm_nb = { +static struct notifier_block dbg_cpu_pm_nb = {  	.notifier_call = dbg_cpu_pm_notify,  }; diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c index 8e4ef4c83a7..9723d17b8f3 100644 --- a/arch/arm/kernel/irq.c +++ b/arch/arm/kernel/irq.c @@ -26,6 +26,7 @@  #include <linux/ioport.h>  #include <linux/interrupt.h>  #include <linux/irq.h> +#include <linux/irqchip.h>  #include <linux/random.h>  #include <linux/smp.h>  #include <linux/init.h> @@ -114,7 +115,10 @@ EXPORT_SYMBOL_GPL(set_irq_flags);  void __init init_IRQ(void)  { -	machine_desc->init_irq(); +	if (IS_ENABLED(CONFIG_OF) && !machine_desc->init_irq) +		irqchip_init(); +	else +		machine_desc->init_irq();  }  #ifdef CONFIG_MULTI_IRQ_HANDLER diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index 146157dfe27..8c3094d0f7b 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c @@ -253,7 +253,10 @@ validate_event(struct pmu_hw_events *hw_events,  	struct arm_pmu *armpmu = to_arm_pmu(event->pmu);  	struct pmu *leader_pmu = event->group_leader->pmu; -	if (event->pmu != leader_pmu || event->state <= PERF_EVENT_STATE_OFF) +	if (event->pmu != leader_pmu || event->state < PERF_EVENT_STATE_OFF) +		return 1; + +	if (event->state == PERF_EVENT_STATE_OFF && !event->attr.enable_on_exec)  		return 1;  	return armpmu->get_event_idx(hw_events, event) >= 0; diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index cbd0f51937c..f2197031683 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c @@ -57,38 +57,6 @@ static const char *isa_modes[] = {    "ARM" , "Thumb" , "Jazelle", "ThumbEE"  }; -static volatile int hlt_counter; - -void disable_hlt(void) -{ -	hlt_counter++; -} - -EXPORT_SYMBOL(disable_hlt); - -void enable_hlt(void) -{ -	hlt_counter--; -	BUG_ON(hlt_counter < 0); -} - -EXPORT_SYMBOL(enable_hlt); - -static int __init nohlt_setup(char *__unused) -{ -	hlt_counter = 1; -	return 1; -} - -static int __init hlt_setup(char *__unused) -{ -	hlt_counter = 0; -	return 1; -} - -__setup("nohlt", nohlt_setup); -__setup("hlt", hlt_setup); -  extern void call_with_stack(void (*fn)(void *), void *arg, void *sp);  typedef void (*phys_reset_t)(unsigned long); @@ -172,54 +140,38 @@ static void default_idle(void)  	local_irq_enable();  } -/* - * The idle thread. - * We always respect 'hlt_counter' to prevent low power idle. - */ -void cpu_idle(void) +void arch_cpu_idle_prepare(void)  {  	local_fiq_enable(); +} -	/* endless idle loop with no priority at all */ -	while (1) { -		tick_nohz_idle_enter(); -		rcu_idle_enter(); -		ledtrig_cpu(CPU_LED_IDLE_START); -		while (!need_resched()) { -#ifdef CONFIG_HOTPLUG_CPU -			if (cpu_is_offline(smp_processor_id())) -				cpu_die(); +void arch_cpu_idle_enter(void) +{ +	ledtrig_cpu(CPU_LED_IDLE_START); +#ifdef CONFIG_PL310_ERRATA_769419 +	wmb();  #endif +} -			/* -			 * We need to disable interrupts here -			 * to ensure we don't miss a wakeup call. -			 */ -			local_irq_disable(); -#ifdef CONFIG_PL310_ERRATA_769419 -			wmb(); +void arch_cpu_idle_exit(void) +{ +	ledtrig_cpu(CPU_LED_IDLE_END); +} + +#ifdef CONFIG_HOTPLUG_CPU +void arch_cpu_idle_dead(void) +{ +	cpu_die(); +}  #endif -			if (hlt_counter) { -				local_irq_enable(); -				cpu_relax(); -			} else if (!need_resched()) { -				stop_critical_timings(); -				if (cpuidle_idle_call()) -					default_idle(); -				start_critical_timings(); -				/* -				 * default_idle functions must always -				 * return with IRQs enabled. -				 */ -				WARN_ON(irqs_disabled()); -			} else -				local_irq_enable(); -		} -		ledtrig_cpu(CPU_LED_IDLE_END); -		rcu_idle_exit(); -		tick_nohz_idle_exit(); -		schedule_preempt_disabled(); -	} + +/* + * Called from the core idle loop. + */ +void arch_cpu_idle(void) +{ +	if (cpuidle_idle_call()) +		default_idle();  }  static char reboot_mode = 'h'; @@ -273,11 +225,8 @@ void __show_regs(struct pt_regs *regs)  	unsigned long flags;  	char buf[64]; -	printk("CPU: %d    %s  (%s %.*s)\n", -		raw_smp_processor_id(), print_tainted(), -		init_utsname()->release, -		(int)strcspn(init_utsname()->version, " "), -		init_utsname()->version); +	show_regs_print_info(KERN_DEFAULT); +  	print_symbol("PC is at %s\n", instruction_pointer(regs));  	print_symbol("LR is at %s\n", regs->ARM_lr);  	printk("pc : [<%08lx>]    lr : [<%08lx>]    psr: %08lx\n" @@ -332,7 +281,6 @@ void __show_regs(struct pt_regs *regs)  void show_regs(struct pt_regs * regs)  {  	printk("\n"); -	printk("Pid: %d, comm: %20s\n", task_pid_nr(current), current->comm);  	__show_regs(regs);  	dump_stack();  } diff --git a/arch/arm/kernel/return_address.c b/arch/arm/kernel/return_address.c index 8085417555d..fafedd86885 100644 --- a/arch/arm/kernel/return_address.c +++ b/arch/arm/kernel/return_address.c @@ -26,7 +26,7 @@ static int save_return_addr(struct stackframe *frame, void *d)  	struct return_address_data *data = d;  	if (!data->level) { -		data->addr = (void *)frame->lr; +		data->addr = (void *)frame->pc;  		return 1;  	} else { @@ -41,7 +41,8 @@ void *return_address(unsigned int level)  	struct stackframe frame;  	register unsigned long current_sp asm ("sp"); -	data.level = level + 1; +	data.level = level + 2; +	data.addr = NULL;  	frame.fp = (unsigned long)__builtin_frame_address(0);  	frame.sp = current_sp; diff --git a/arch/arm/kernel/sched_clock.c b/arch/arm/kernel/sched_clock.c index bd6f56b9ec2..59d2adb764a 100644 --- a/arch/arm/kernel/sched_clock.c +++ b/arch/arm/kernel/sched_clock.c @@ -45,12 +45,12 @@ static u32 notrace jiffy_sched_clock_read(void)  static u32 __read_mostly (*read_sched_clock)(void) = jiffy_sched_clock_read; -static inline u64 cyc_to_ns(u64 cyc, u32 mult, u32 shift) +static inline u64 notrace cyc_to_ns(u64 cyc, u32 mult, u32 shift)  {  	return (cyc * mult) >> shift;  } -static unsigned long long cyc_to_sched_clock(u32 cyc, u32 mask) +static unsigned long long notrace cyc_to_sched_clock(u32 cyc, u32 mask)  {  	u64 epoch_ns;  	u32 epoch_cyc; diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 3f6cbb2e3ed..728007c4a2b 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @@ -56,7 +56,6 @@  #include <asm/virt.h>  #include "atags.h" -#include "tcm.h"  #if defined(CONFIG_FPE_NWFPE) || defined(CONFIG_FPE_FASTFPE) @@ -291,10 +290,10 @@ static int cpu_has_aliasing_icache(unsigned int arch)  static void __init cacheid_init(void)  { -	unsigned int cachetype = read_cpuid_cachetype();  	unsigned int arch = cpu_architecture();  	if (arch >= CPU_ARCH_ARMv6) { +		unsigned int cachetype = read_cpuid_cachetype();  		if ((cachetype & (7 << 29)) == 4 << 29) {  			/* ARMv7 register format */  			arch = CPU_ARCH_ARMv7; @@ -353,6 +352,23 @@ void __init early_print(const char *str, ...)  	printk("%s", buf);  } +static void __init cpuid_init_hwcaps(void) +{ +	unsigned int divide_instrs; + +	if (cpu_architecture() < CPU_ARCH_ARMv7) +		return; + +	divide_instrs = (read_cpuid_ext(CPUID_EXT_ISAR0) & 0x0f000000) >> 24; + +	switch (divide_instrs) { +	case 2: +		elf_hwcap |= HWCAP_IDIVA; +	case 1: +		elf_hwcap |= HWCAP_IDIVT; +	} +} +  static void __init feat_v6_fixup(void)  {  	int id = read_cpuid_id(); @@ -373,7 +389,7 @@ static void __init feat_v6_fixup(void)   *   * cpu_init sets up the per-CPU stacks.   */ -void cpu_init(void) +void notrace cpu_init(void)  {  	unsigned int cpu = smp_processor_id();  	struct stack *stk = &stacks[cpu]; @@ -483,8 +499,11 @@ static void __init setup_processor(void)  	snprintf(elf_platform, ELF_PLATFORM_SIZE, "%s%c",  		 list->elf_name, ENDIANNESS);  	elf_hwcap = list->elf_hwcap; + +	cpuid_init_hwcaps(); +  #ifndef CONFIG_ARM_THUMB -	elf_hwcap &= ~HWCAP_THUMB; +	elf_hwcap &= ~(HWCAP_THUMB | HWCAP_IDIVT);  #endif  	feat_v6_fixup(); @@ -524,7 +543,7 @@ int __init arm_add_memory(phys_addr_t start, phys_addr_t size)  	size -= start & ~PAGE_MASK;  	bank->start = PAGE_ALIGN(start); -#ifndef CONFIG_LPAE +#ifndef CONFIG_ARM_LPAE  	if (bank->start + size < bank->start) {  		printk(KERN_CRIT "Truncating memory at 0x%08llx to fit in "  			"32-bit physical address space\n", (long long)start); @@ -778,8 +797,6 @@ void __init setup_arch(char **cmdline_p)  	reserve_crashkernel(); -	tcm_init(); -  #ifdef CONFIG_MULTI_IRQ_HANDLER  	handle_arch_irq = mdesc->handle_irq;  #endif diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 79078edbb9b..47ab90563bf 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c @@ -211,6 +211,13 @@ void __cpuinit __cpu_die(unsigned int cpu)  	}  	printk(KERN_NOTICE "CPU%u: shutdown\n", cpu); +	/* +	 * platform_cpu_kill() is generally expected to do the powering off +	 * and/or cutting of clocks to the dying CPU.  Optionally, this may +	 * be done by the CPU which is dying in preference to supporting +	 * this call, but that means there is _no_ synchronisation between +	 * the requesting CPU and the dying CPU actually losing power. +	 */  	if (!platform_cpu_kill(cpu))  		printk("CPU%u: unable to kill\n", cpu);  } @@ -230,14 +237,41 @@ void __ref cpu_die(void)  	idle_task_exit();  	local_irq_disable(); -	mb(); -	/* Tell __cpu_die() that this CPU is now safe to dispose of */ +	/* +	 * Flush the data out of the L1 cache for this CPU.  This must be +	 * before the completion to ensure that data is safely written out +	 * before platform_cpu_kill() gets called - which may disable +	 * *this* CPU and power down its cache. +	 */ +	flush_cache_louis(); + +	/* +	 * Tell __cpu_die() that this CPU is now safe to dispose of.  Once +	 * this returns, power and/or clocks can be removed at any point +	 * from this CPU and its cache by platform_cpu_kill(). +	 */  	RCU_NONIDLE(complete(&cpu_died));  	/* -	 * actual CPU shutdown procedure is at least platform (if not -	 * CPU) specific. +	 * Ensure that the cache lines associated with that completion are +	 * written out.  This covers the case where _this_ CPU is doing the +	 * powering down, to ensure that the completion is visible to the +	 * CPU waiting for this one. +	 */ +	flush_cache_louis(); + +	/* +	 * The actual CPU shutdown procedure is at least platform (if not +	 * CPU) specific.  This may remove power, or it may simply spin. +	 * +	 * Platforms are generally expected *NOT* to return from this call, +	 * although there are some which do because they have no way to +	 * power down the CPU.  These platforms are the _only_ reason we +	 * have a return path which uses the fragment of assembly below. +	 * +	 * The return path should not be used for platforms which can +	 * power off the CPU.  	 */  	if (smp_ops.cpu_die)  		smp_ops.cpu_die(cpu); @@ -336,7 +370,7 @@ asmlinkage void __cpuinit secondary_start_kernel(void)  	/*  	 * OK, it's off to the idle thread for us  	 */ -	cpu_idle(); +	cpu_startup_entry(CPUHP_ONLINE);  }  void __init smp_cpus_done(unsigned int max_cpus) @@ -673,9 +707,6 @@ static int cpufreq_callback(struct notifier_block *nb,  	if (freq->flags & CPUFREQ_CONST_LOOPS)  		return NOTIFY_OK; -	if (arm_delay_ops.const_clock) -		return NOTIFY_OK; -  	if (!per_cpu(l_p_j_ref, cpu)) {  		per_cpu(l_p_j_ref, cpu) =  			per_cpu(cpu_data, cpu).loops_per_jiffy; diff --git a/arch/arm/kernel/smp_scu.c b/arch/arm/kernel/smp_scu.c index 45eac87ed66..5bc1a63284e 100644 --- a/arch/arm/kernel/smp_scu.c +++ b/arch/arm/kernel/smp_scu.c @@ -41,7 +41,7 @@ void scu_enable(void __iomem *scu_base)  #ifdef CONFIG_ARM_ERRATA_764369  	/* Cortex-A9 only */ -	if ((read_cpuid(CPUID_ID) & 0xff0ffff0) == 0x410fc090) { +	if ((read_cpuid_id() & 0xff0ffff0) == 0x410fc090) {  		scu_ctrl = __raw_readl(scu_base + 0x30);  		if (!(scu_ctrl & 1))  			__raw_writel(scu_ctrl | 0x1, scu_base + 0x30); diff --git a/arch/arm/kernel/smp_tlb.c b/arch/arm/kernel/smp_tlb.c index bd030053139..9a52a07aa40 100644 --- a/arch/arm/kernel/smp_tlb.c +++ b/arch/arm/kernel/smp_tlb.c @@ -12,6 +12,7 @@  #include <asm/smp_plat.h>  #include <asm/tlbflush.h> +#include <asm/mmu_context.h>  /**********************************************************************/ @@ -69,12 +70,73 @@ static inline void ipi_flush_bp_all(void *ignored)  	local_flush_bp_all();  } +#ifdef CONFIG_ARM_ERRATA_798181 +static int erratum_a15_798181(void) +{ +	unsigned int midr = read_cpuid_id(); + +	/* Cortex-A15 r0p0..r3p2 affected */ +	if ((midr & 0xff0ffff0) != 0x410fc0f0 || midr > 0x413fc0f2) +		return 0; +	return 1; +} +#else +static int erratum_a15_798181(void) +{ +	return 0; +} +#endif + +static void ipi_flush_tlb_a15_erratum(void *arg) +{ +	dmb(); +} + +static void broadcast_tlb_a15_erratum(void) +{ +	if (!erratum_a15_798181()) +		return; + +	dummy_flush_tlb_a15_erratum(); +	smp_call_function(ipi_flush_tlb_a15_erratum, NULL, 1); +} + +static void broadcast_tlb_mm_a15_erratum(struct mm_struct *mm) +{ +	int cpu, this_cpu; +	cpumask_t mask = { CPU_BITS_NONE }; + +	if (!erratum_a15_798181()) +		return; + +	dummy_flush_tlb_a15_erratum(); +	this_cpu = get_cpu(); +	for_each_online_cpu(cpu) { +		if (cpu == this_cpu) +			continue; +		/* +		 * We only need to send an IPI if the other CPUs are running +		 * the same ASID as the one being invalidated. There is no +		 * need for locking around the active_asids check since the +		 * switch_mm() function has at least one dmb() (as required by +		 * this workaround) in case a context switch happens on +		 * another CPU after the condition below. +		 */ +		if (atomic64_read(&mm->context.id) == +		    atomic64_read(&per_cpu(active_asids, cpu))) +			cpumask_set_cpu(cpu, &mask); +	} +	smp_call_function_many(&mask, ipi_flush_tlb_a15_erratum, NULL, 1); +	put_cpu(); +} +  void flush_tlb_all(void)  {  	if (tlb_ops_need_broadcast())  		on_each_cpu(ipi_flush_tlb_all, NULL, 1);  	else  		local_flush_tlb_all(); +	broadcast_tlb_a15_erratum();  }  void flush_tlb_mm(struct mm_struct *mm) @@ -83,6 +145,7 @@ void flush_tlb_mm(struct mm_struct *mm)  		on_each_cpu_mask(mm_cpumask(mm), ipi_flush_tlb_mm, mm, 1);  	else  		local_flush_tlb_mm(mm); +	broadcast_tlb_mm_a15_erratum(mm);  }  void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr) @@ -95,6 +158,7 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)  					&ta, 1);  	} else  		local_flush_tlb_page(vma, uaddr); +	broadcast_tlb_mm_a15_erratum(vma->vm_mm);  }  void flush_tlb_kernel_page(unsigned long kaddr) @@ -105,6 +169,7 @@ void flush_tlb_kernel_page(unsigned long kaddr)  		on_each_cpu(ipi_flush_tlb_kernel_page, &ta, 1);  	} else  		local_flush_tlb_kernel_page(kaddr); +	broadcast_tlb_a15_erratum();  }  void flush_tlb_range(struct vm_area_struct *vma, @@ -119,6 +184,7 @@ void flush_tlb_range(struct vm_area_struct *vma,  					&ta, 1);  	} else  		local_flush_tlb_range(vma, start, end); +	broadcast_tlb_mm_a15_erratum(vma->vm_mm);  }  void flush_tlb_kernel_range(unsigned long start, unsigned long end) @@ -130,6 +196,7 @@ void flush_tlb_kernel_range(unsigned long start, unsigned long end)  		on_each_cpu(ipi_flush_tlb_kernel_range, &ta, 1);  	} else  		local_flush_tlb_kernel_range(start, end); +	broadcast_tlb_a15_erratum();  }  void flush_bp_all(void) diff --git a/arch/arm/kernel/swp_emulate.c b/arch/arm/kernel/swp_emulate.c index ab1017bd166..087fc321e9e 100644 --- a/arch/arm/kernel/swp_emulate.c +++ b/arch/arm/kernel/swp_emulate.c @@ -21,6 +21,7 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/proc_fs.h> +#include <linux/seq_file.h>  #include <linux/sched.h>  #include <linux/syscalls.h>  #include <linux/perf_event.h> @@ -79,27 +80,27 @@ static unsigned long abtcounter;  static pid_t         previous_pid;  #ifdef CONFIG_PROC_FS -static int proc_read_status(char *page, char **start, off_t off, int count, -			    int *eof, void *data) +static int proc_status_show(struct seq_file *m, void *v)  { -	char *p = page; -	int len; - -	p += sprintf(p, "Emulated SWP:\t\t%lu\n", swpcounter); -	p += sprintf(p, "Emulated SWPB:\t\t%lu\n", swpbcounter); -	p += sprintf(p, "Aborted SWP{B}:\t\t%lu\n", abtcounter); +	seq_printf(m, "Emulated SWP:\t\t%lu\n", swpcounter); +	seq_printf(m, "Emulated SWPB:\t\t%lu\n", swpbcounter); +	seq_printf(m, "Aborted SWP{B}:\t\t%lu\n", abtcounter);  	if (previous_pid != 0) -		p += sprintf(p, "Last process:\t\t%d\n", previous_pid); - -	len = (p - page) - off; -	if (len < 0) -		len = 0; - -	*eof = (len <= count) ? 1 : 0; -	*start = page + off; +		seq_printf(m, "Last process:\t\t%d\n", previous_pid); +	return 0; +} -	return len; +static int proc_status_open(struct inode *inode, struct file *file) +{ +	return single_open(file, proc_status_show, PDE_DATA(inode));  } + +static const struct file_operations proc_status_fops = { +	.open		= proc_status_open, +	.read		= seq_read, +	.llseek		= seq_lseek, +	.release	= seq_release, +};  #endif  /* @@ -266,14 +267,8 @@ static struct undef_hook swp_hook = {  static int __init swp_emulation_init(void)  {  #ifdef CONFIG_PROC_FS -	struct proc_dir_entry *res; - -	res = create_proc_entry("cpu/swp_emulation", S_IRUGO, NULL); - -	if (!res) +	if (!proc_create("cpu/swp_emulation", S_IRUGO, NULL, &proc_status_fops))  		return -ENOMEM; - -	res->read_proc = proc_read_status;  #endif /* CONFIG_PROC_FS */  	printk(KERN_NOTICE "Registering SWP/SWPB emulation handler\n"); diff --git a/arch/arm/kernel/tcm.c b/arch/arm/kernel/tcm.c index 30ae6bb4a31..f50f19e5c13 100644 --- a/arch/arm/kernel/tcm.c +++ b/arch/arm/kernel/tcm.c @@ -17,7 +17,6 @@  #include <asm/mach/map.h>  #include <asm/memory.h>  #include <asm/system_info.h> -#include "tcm.h"  static struct gen_pool *tcm_pool;  static bool dtcm_present; diff --git a/arch/arm/kernel/topology.c b/arch/arm/kernel/topology.c index 79282ebcd93..f10316b4ecd 100644 --- a/arch/arm/kernel/topology.c +++ b/arch/arm/kernel/topology.c @@ -100,7 +100,7 @@ static void __init parse_dt_topology(void)  	int alloc_size, cpu = 0;  	alloc_size = nr_cpu_ids * sizeof(struct cpu_capacity); -	cpu_capacity = (struct cpu_capacity *)kzalloc(alloc_size, GFP_NOWAIT); +	cpu_capacity = kzalloc(alloc_size, GFP_NOWAIT);  	while ((cn = of_find_node_by_type(cn, "cpu"))) {  		const u32 *rate, *reg; diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 1c089119b2d..18b32e8e449 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c @@ -204,13 +204,6 @@ static void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk)  }  #endif -void dump_stack(void) -{ -	dump_backtrace(NULL, NULL); -} - -EXPORT_SYMBOL(dump_stack); -  void show_stack(struct task_struct *tsk, unsigned long *sp)  {  	dump_backtrace(NULL, tsk); diff --git a/arch/arm/kvm/Makefile b/arch/arm/kvm/Makefile index fc96ce6f235..8dc5e76cb78 100644 --- a/arch/arm/kvm/Makefile +++ b/arch/arm/kvm/Makefile @@ -17,7 +17,7 @@ AFLAGS_interrupts.o := -Wa,-march=armv7-a$(plus_virt)  kvm-arm-y = $(addprefix ../../../virt/kvm/, kvm_main.o coalesced_mmio.o)  obj-y += kvm-arm.o init.o interrupts.o -obj-y += arm.o guest.o mmu.o emulate.o reset.o +obj-y += arm.o handle_exit.o guest.o mmu.o emulate.o reset.o  obj-y += coproc.o coproc_a15.o mmio.o psci.o  obj-$(CONFIG_KVM_ARM_VGIC) += vgic.o  obj-$(CONFIG_KVM_ARM_TIMER) += arch_timer.o diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c index 5a936988eb2..a0dfc2a53f9 100644 --- a/arch/arm/kvm/arm.c +++ b/arch/arm/kvm/arm.c @@ -30,11 +30,9 @@  #define CREATE_TRACE_POINTS  #include "trace.h" -#include <asm/unified.h>  #include <asm/uaccess.h>  #include <asm/ptrace.h>  #include <asm/mman.h> -#include <asm/cputype.h>  #include <asm/tlbflush.h>  #include <asm/cacheflush.h>  #include <asm/virt.h> @@ -44,14 +42,13 @@  #include <asm/kvm_emulate.h>  #include <asm/kvm_coproc.h>  #include <asm/kvm_psci.h> -#include <asm/opcodes.h>  #ifdef REQUIRES_VIRT  __asm__(".arch_extension	virt");  #endif  static DEFINE_PER_CPU(unsigned long, kvm_arm_hyp_stack_page); -static struct vfp_hard_struct __percpu *kvm_host_vfp_state; +static kvm_kernel_vfp_t __percpu *kvm_host_vfp_state;  static unsigned long hyp_default_vectors;  /* Per-CPU variable containing the currently running vcpu. */ @@ -201,6 +198,7 @@ int kvm_dev_ioctl_check_extension(long ext)  		break;  	case KVM_CAP_ARM_SET_DEVICE_ADDR:  		r = 1; +		break;  	case KVM_CAP_NR_VCPUS:  		r = num_online_cpus();  		break; @@ -303,22 +301,6 @@ int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu)  	return 0;  } -int __attribute_const__ kvm_target_cpu(void) -{ -	unsigned long implementor = read_cpuid_implementor(); -	unsigned long part_number = read_cpuid_part_number(); - -	if (implementor != ARM_CPU_IMP_ARM) -		return -EINVAL; - -	switch (part_number) { -	case ARM_CPU_PART_CORTEX_A15: -		return KVM_ARM_TARGET_CORTEX_A15; -	default: -		return -EINVAL; -	} -} -  int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)  {  	int ret; @@ -481,163 +463,6 @@ static void update_vttbr(struct kvm *kvm)  	spin_unlock(&kvm_vmid_lock);  } -static int handle_svc_hyp(struct kvm_vcpu *vcpu, struct kvm_run *run) -{ -	/* SVC called from Hyp mode should never get here */ -	kvm_debug("SVC called from Hyp mode shouldn't go here\n"); -	BUG(); -	return -EINVAL; /* Squash warning */ -} - -static int handle_hvc(struct kvm_vcpu *vcpu, struct kvm_run *run) -{ -	trace_kvm_hvc(*vcpu_pc(vcpu), *vcpu_reg(vcpu, 0), -		      vcpu->arch.hsr & HSR_HVC_IMM_MASK); - -	if (kvm_psci_call(vcpu)) -		return 1; - -	kvm_inject_undefined(vcpu); -	return 1; -} - -static int handle_smc(struct kvm_vcpu *vcpu, struct kvm_run *run) -{ -	if (kvm_psci_call(vcpu)) -		return 1; - -	kvm_inject_undefined(vcpu); -	return 1; -} - -static int handle_pabt_hyp(struct kvm_vcpu *vcpu, struct kvm_run *run) -{ -	/* The hypervisor should never cause aborts */ -	kvm_err("Prefetch Abort taken from Hyp mode at %#08x (HSR: %#08x)\n", -		vcpu->arch.hxfar, vcpu->arch.hsr); -	return -EFAULT; -} - -static int handle_dabt_hyp(struct kvm_vcpu *vcpu, struct kvm_run *run) -{ -	/* This is either an error in the ws. code or an external abort */ -	kvm_err("Data Abort taken from Hyp mode at %#08x (HSR: %#08x)\n", -		vcpu->arch.hxfar, vcpu->arch.hsr); -	return -EFAULT; -} - -typedef int (*exit_handle_fn)(struct kvm_vcpu *, struct kvm_run *); -static exit_handle_fn arm_exit_handlers[] = { -	[HSR_EC_WFI]		= kvm_handle_wfi, -	[HSR_EC_CP15_32]	= kvm_handle_cp15_32, -	[HSR_EC_CP15_64]	= kvm_handle_cp15_64, -	[HSR_EC_CP14_MR]	= kvm_handle_cp14_access, -	[HSR_EC_CP14_LS]	= kvm_handle_cp14_load_store, -	[HSR_EC_CP14_64]	= kvm_handle_cp14_access, -	[HSR_EC_CP_0_13]	= kvm_handle_cp_0_13_access, -	[HSR_EC_CP10_ID]	= kvm_handle_cp10_id, -	[HSR_EC_SVC_HYP]	= handle_svc_hyp, -	[HSR_EC_HVC]		= handle_hvc, -	[HSR_EC_SMC]		= handle_smc, -	[HSR_EC_IABT]		= kvm_handle_guest_abort, -	[HSR_EC_IABT_HYP]	= handle_pabt_hyp, -	[HSR_EC_DABT]		= kvm_handle_guest_abort, -	[HSR_EC_DABT_HYP]	= handle_dabt_hyp, -}; - -/* - * A conditional instruction is allowed to trap, even though it - * wouldn't be executed.  So let's re-implement the hardware, in - * software! - */ -static bool kvm_condition_valid(struct kvm_vcpu *vcpu) -{ -	unsigned long cpsr, cond, insn; - -	/* -	 * Exception Code 0 can only happen if we set HCR.TGE to 1, to -	 * catch undefined instructions, and then we won't get past -	 * the arm_exit_handlers test anyway. -	 */ -	BUG_ON(((vcpu->arch.hsr & HSR_EC) >> HSR_EC_SHIFT) == 0); - -	/* Top two bits non-zero?  Unconditional. */ -	if (vcpu->arch.hsr >> 30) -		return true; - -	cpsr = *vcpu_cpsr(vcpu); - -	/* Is condition field valid? */ -	if ((vcpu->arch.hsr & HSR_CV) >> HSR_CV_SHIFT) -		cond = (vcpu->arch.hsr & HSR_COND) >> HSR_COND_SHIFT; -	else { -		/* This can happen in Thumb mode: examine IT state. */ -		unsigned long it; - -		it = ((cpsr >> 8) & 0xFC) | ((cpsr >> 25) & 0x3); - -		/* it == 0 => unconditional. */ -		if (it == 0) -			return true; - -		/* The cond for this insn works out as the top 4 bits. */ -		cond = (it >> 4); -	} - -	/* Shift makes it look like an ARM-mode instruction */ -	insn = cond << 28; -	return arm_check_condition(insn, cpsr) != ARM_OPCODE_CONDTEST_FAIL; -} - -/* - * Return > 0 to return to guest, < 0 on error, 0 (and set exit_reason) on - * proper exit to QEMU. - */ -static int handle_exit(struct kvm_vcpu *vcpu, struct kvm_run *run, -		       int exception_index) -{ -	unsigned long hsr_ec; - -	switch (exception_index) { -	case ARM_EXCEPTION_IRQ: -		return 1; -	case ARM_EXCEPTION_UNDEFINED: -		kvm_err("Undefined exception in Hyp mode at: %#08x\n", -			vcpu->arch.hyp_pc); -		BUG(); -		panic("KVM: Hypervisor undefined exception!\n"); -	case ARM_EXCEPTION_DATA_ABORT: -	case ARM_EXCEPTION_PREF_ABORT: -	case ARM_EXCEPTION_HVC: -		hsr_ec = (vcpu->arch.hsr & HSR_EC) >> HSR_EC_SHIFT; - -		if (hsr_ec >= ARRAY_SIZE(arm_exit_handlers) -		    || !arm_exit_handlers[hsr_ec]) { -			kvm_err("Unkown exception class: %#08lx, " -				"hsr: %#08x\n", hsr_ec, -				(unsigned int)vcpu->arch.hsr); -			BUG(); -		} - -		/* -		 * See ARM ARM B1.14.1: "Hyp traps on instructions -		 * that fail their condition code check" -		 */ -		if (!kvm_condition_valid(vcpu)) { -			bool is_wide = vcpu->arch.hsr & HSR_IL; -			kvm_skip_instr(vcpu, is_wide); -			return 1; -		} - -		return arm_exit_handlers[hsr_ec](vcpu, run); -	default: -		kvm_pr_unimpl("Unsupported exception type: %d", -			      exception_index); -		run->exit_reason = KVM_EXIT_INTERNAL_ERROR; -		return 0; -	} -} -  static int kvm_vcpu_first_run_init(struct kvm_vcpu *vcpu)  {  	if (likely(vcpu->arch.has_run_once)) @@ -972,7 +797,6 @@ long kvm_arch_vm_ioctl(struct file *filp,  static void cpu_init_hyp_mode(void *vector)  {  	unsigned long long pgd_ptr; -	unsigned long pgd_low, pgd_high;  	unsigned long hyp_stack_ptr;  	unsigned long stack_page;  	unsigned long vector_ptr; @@ -981,20 +805,11 @@ static void cpu_init_hyp_mode(void *vector)  	__hyp_set_vectors((unsigned long)vector);  	pgd_ptr = (unsigned long long)kvm_mmu_get_httbr(); -	pgd_low = (pgd_ptr & ((1ULL << 32) - 1)); -	pgd_high = (pgd_ptr >> 32ULL);  	stack_page = __get_cpu_var(kvm_arm_hyp_stack_page);  	hyp_stack_ptr = stack_page + PAGE_SIZE;  	vector_ptr = (unsigned long)__kvm_hyp_vector; -	/* -	 * Call initialization code, and switch to the full blown -	 * HYP code. The init code doesn't need to preserve these registers as -	 * r1-r3 and r12 are already callee save according to the AAPCS. -	 * Note that we slightly misuse the prototype by casing the pgd_low to -	 * a void *. -	 */ -	kvm_call_hyp((void *)pgd_low, pgd_high, hyp_stack_ptr, vector_ptr); +	__cpu_init_hyp_mode(pgd_ptr, hyp_stack_ptr, vector_ptr);  }  /** @@ -1077,7 +892,7 @@ static int init_hyp_mode(void)  	/*  	 * Map the host VFP structures  	 */ -	kvm_host_vfp_state = alloc_percpu(struct vfp_hard_struct); +	kvm_host_vfp_state = alloc_percpu(kvm_kernel_vfp_t);  	if (!kvm_host_vfp_state) {  		err = -ENOMEM;  		kvm_err("Cannot allocate host VFP state\n"); @@ -1085,7 +900,7 @@ static int init_hyp_mode(void)  	}  	for_each_possible_cpu(cpu) { -		struct vfp_hard_struct *vfp; +		kvm_kernel_vfp_t *vfp;  		vfp = per_cpu_ptr(kvm_host_vfp_state, cpu);  		err = create_hyp_mappings(vfp, vfp + 1); diff --git a/arch/arm/kvm/coproc.c b/arch/arm/kvm/coproc.c index 4ea9a982269..8eea97be1ed 100644 --- a/arch/arm/kvm/coproc.c +++ b/arch/arm/kvm/coproc.c @@ -76,14 +76,14 @@ static bool access_dcsw(struct kvm_vcpu *vcpu,  			const struct coproc_params *p,  			const struct coproc_reg *r)  { -	u32 val; +	unsigned long val;  	int cpu; -	cpu = get_cpu(); -  	if (!p->is_write)  		return read_from_write_only(vcpu, p); +	cpu = get_cpu(); +  	cpumask_setall(&vcpu->arch.require_dcache_flush);  	cpumask_clear_cpu(cpu, &vcpu->arch.require_dcache_flush); @@ -293,12 +293,12 @@ static int emulate_cp15(struct kvm_vcpu *vcpu,  		if (likely(r->access(vcpu, params, r))) {  			/* Skip instruction, since it was emulated */ -			kvm_skip_instr(vcpu, (vcpu->arch.hsr >> 25) & 1); +			kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));  			return 1;  		}  		/* If access function fails, it should complain. */  	} else { -		kvm_err("Unsupported guest CP15 access at: %08x\n", +		kvm_err("Unsupported guest CP15 access at: %08lx\n",  			*vcpu_pc(vcpu));  		print_cp_instr(params);  	} @@ -315,14 +315,14 @@ int kvm_handle_cp15_64(struct kvm_vcpu *vcpu, struct kvm_run *run)  {  	struct coproc_params params; -	params.CRm = (vcpu->arch.hsr >> 1) & 0xf; -	params.Rt1 = (vcpu->arch.hsr >> 5) & 0xf; -	params.is_write = ((vcpu->arch.hsr & 1) == 0); +	params.CRm = (kvm_vcpu_get_hsr(vcpu) >> 1) & 0xf; +	params.Rt1 = (kvm_vcpu_get_hsr(vcpu) >> 5) & 0xf; +	params.is_write = ((kvm_vcpu_get_hsr(vcpu) & 1) == 0);  	params.is_64bit = true; -	params.Op1 = (vcpu->arch.hsr >> 16) & 0xf; +	params.Op1 = (kvm_vcpu_get_hsr(vcpu) >> 16) & 0xf;  	params.Op2 = 0; -	params.Rt2 = (vcpu->arch.hsr >> 10) & 0xf; +	params.Rt2 = (kvm_vcpu_get_hsr(vcpu) >> 10) & 0xf;  	params.CRn = 0;  	return emulate_cp15(vcpu, ¶ms); @@ -347,14 +347,14 @@ int kvm_handle_cp15_32(struct kvm_vcpu *vcpu, struct kvm_run *run)  {  	struct coproc_params params; -	params.CRm = (vcpu->arch.hsr >> 1) & 0xf; -	params.Rt1 = (vcpu->arch.hsr >> 5) & 0xf; -	params.is_write = ((vcpu->arch.hsr & 1) == 0); +	params.CRm = (kvm_vcpu_get_hsr(vcpu) >> 1) & 0xf; +	params.Rt1 = (kvm_vcpu_get_hsr(vcpu) >> 5) & 0xf; +	params.is_write = ((kvm_vcpu_get_hsr(vcpu) & 1) == 0);  	params.is_64bit = false; -	params.CRn = (vcpu->arch.hsr >> 10) & 0xf; -	params.Op1 = (vcpu->arch.hsr >> 14) & 0x7; -	params.Op2 = (vcpu->arch.hsr >> 17) & 0x7; +	params.CRn = (kvm_vcpu_get_hsr(vcpu) >> 10) & 0xf; +	params.Op1 = (kvm_vcpu_get_hsr(vcpu) >> 14) & 0x7; +	params.Op2 = (kvm_vcpu_get_hsr(vcpu) >> 17) & 0x7;  	params.Rt2 = 0;  	return emulate_cp15(vcpu, ¶ms); diff --git a/arch/arm/kvm/coproc.h b/arch/arm/kvm/coproc.h index 992adfafa2f..b7301d3e479 100644 --- a/arch/arm/kvm/coproc.h +++ b/arch/arm/kvm/coproc.h @@ -84,7 +84,7 @@ static inline bool read_zero(struct kvm_vcpu *vcpu,  static inline bool write_to_read_only(struct kvm_vcpu *vcpu,  				      const struct coproc_params *params)  { -	kvm_debug("CP15 write to read-only register at: %08x\n", +	kvm_debug("CP15 write to read-only register at: %08lx\n",  		  *vcpu_pc(vcpu));  	print_cp_instr(params);  	return false; @@ -93,7 +93,7 @@ static inline bool write_to_read_only(struct kvm_vcpu *vcpu,  static inline bool read_from_write_only(struct kvm_vcpu *vcpu,  					const struct coproc_params *params)  { -	kvm_debug("CP15 read to write-only register at: %08x\n", +	kvm_debug("CP15 read to write-only register at: %08lx\n",  		  *vcpu_pc(vcpu));  	print_cp_instr(params);  	return false; diff --git a/arch/arm/kvm/emulate.c b/arch/arm/kvm/emulate.c index d61450ac666..bdede9e7da5 100644 --- a/arch/arm/kvm/emulate.c +++ b/arch/arm/kvm/emulate.c @@ -20,6 +20,7 @@  #include <linux/kvm_host.h>  #include <asm/kvm_arm.h>  #include <asm/kvm_emulate.h> +#include <asm/opcodes.h>  #include <trace/events/kvm.h>  #include "trace.h" @@ -109,10 +110,10 @@ static const unsigned long vcpu_reg_offsets[VCPU_NR_MODES][15] = {   * Return a pointer to the register number valid in the current mode of   * the virtual CPU.   */ -u32 *vcpu_reg(struct kvm_vcpu *vcpu, u8 reg_num) +unsigned long *vcpu_reg(struct kvm_vcpu *vcpu, u8 reg_num)  { -	u32 *reg_array = (u32 *)&vcpu->arch.regs; -	u32 mode = *vcpu_cpsr(vcpu) & MODE_MASK; +	unsigned long *reg_array = (unsigned long *)&vcpu->arch.regs; +	unsigned long mode = *vcpu_cpsr(vcpu) & MODE_MASK;  	switch (mode) {  	case USR_MODE...SVC_MODE: @@ -141,9 +142,9 @@ u32 *vcpu_reg(struct kvm_vcpu *vcpu, u8 reg_num)  /*   * Return the SPSR for the current mode of the virtual CPU.   */ -u32 *vcpu_spsr(struct kvm_vcpu *vcpu) +unsigned long *vcpu_spsr(struct kvm_vcpu *vcpu)  { -	u32 mode = *vcpu_cpsr(vcpu) & MODE_MASK; +	unsigned long mode = *vcpu_cpsr(vcpu) & MODE_MASK;  	switch (mode) {  	case SVC_MODE:  		return &vcpu->arch.regs.KVM_ARM_SVC_spsr; @@ -160,20 +161,48 @@ u32 *vcpu_spsr(struct kvm_vcpu *vcpu)  	}  } -/** - * kvm_handle_wfi - handle a wait-for-interrupts instruction executed by a guest - * @vcpu:	the vcpu pointer - * @run:	the kvm_run structure pointer - * - * Simply sets the wait_for_interrupts flag on the vcpu structure, which will - * halt execution of world-switches and schedule other host processes until - * there is an incoming IRQ or FIQ to the VM. +/* + * A conditional instruction is allowed to trap, even though it + * wouldn't be executed.  So let's re-implement the hardware, in + * software!   */ -int kvm_handle_wfi(struct kvm_vcpu *vcpu, struct kvm_run *run) +bool kvm_condition_valid(struct kvm_vcpu *vcpu)  { -	trace_kvm_wfi(*vcpu_pc(vcpu)); -	kvm_vcpu_block(vcpu); -	return 1; +	unsigned long cpsr, cond, insn; + +	/* +	 * Exception Code 0 can only happen if we set HCR.TGE to 1, to +	 * catch undefined instructions, and then we won't get past +	 * the arm_exit_handlers test anyway. +	 */ +	BUG_ON(!kvm_vcpu_trap_get_class(vcpu)); + +	/* Top two bits non-zero?  Unconditional. */ +	if (kvm_vcpu_get_hsr(vcpu) >> 30) +		return true; + +	cpsr = *vcpu_cpsr(vcpu); + +	/* Is condition field valid? */ +	if ((kvm_vcpu_get_hsr(vcpu) & HSR_CV) >> HSR_CV_SHIFT) +		cond = (kvm_vcpu_get_hsr(vcpu) & HSR_COND) >> HSR_COND_SHIFT; +	else { +		/* This can happen in Thumb mode: examine IT state. */ +		unsigned long it; + +		it = ((cpsr >> 8) & 0xFC) | ((cpsr >> 25) & 0x3); + +		/* it == 0 => unconditional. */ +		if (it == 0) +			return true; + +		/* The cond for this insn works out as the top 4 bits. */ +		cond = (it >> 4); +	} + +	/* Shift makes it look like an ARM-mode instruction */ +	insn = cond << 28; +	return arm_check_condition(insn, cpsr) != ARM_OPCODE_CONDTEST_FAIL;  }  /** @@ -257,9 +286,9 @@ static u32 exc_vector_base(struct kvm_vcpu *vcpu)   */  void kvm_inject_undefined(struct kvm_vcpu *vcpu)  { -	u32 new_lr_value; -	u32 new_spsr_value; -	u32 cpsr = *vcpu_cpsr(vcpu); +	unsigned long new_lr_value; +	unsigned long new_spsr_value; +	unsigned long cpsr = *vcpu_cpsr(vcpu);  	u32 sctlr = vcpu->arch.cp15[c1_SCTLR];  	bool is_thumb = (cpsr & PSR_T_BIT);  	u32 vect_offset = 4; @@ -291,9 +320,9 @@ void kvm_inject_undefined(struct kvm_vcpu *vcpu)   */  static void inject_abt(struct kvm_vcpu *vcpu, bool is_pabt, unsigned long addr)  { -	u32 new_lr_value; -	u32 new_spsr_value; -	u32 cpsr = *vcpu_cpsr(vcpu); +	unsigned long new_lr_value; +	unsigned long new_spsr_value; +	unsigned long cpsr = *vcpu_cpsr(vcpu);  	u32 sctlr = vcpu->arch.cp15[c1_SCTLR];  	bool is_thumb = (cpsr & PSR_T_BIT);  	u32 vect_offset; diff --git a/arch/arm/kvm/guest.c b/arch/arm/kvm/guest.c index 2339d9609d3..152d0361218 100644 --- a/arch/arm/kvm/guest.c +++ b/arch/arm/kvm/guest.c @@ -22,6 +22,7 @@  #include <linux/module.h>  #include <linux/vmalloc.h>  #include <linux/fs.h> +#include <asm/cputype.h>  #include <asm/uaccess.h>  #include <asm/kvm.h>  #include <asm/kvm_asm.h> @@ -180,6 +181,22 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,  	return -EINVAL;  } +int __attribute_const__ kvm_target_cpu(void) +{ +	unsigned long implementor = read_cpuid_implementor(); +	unsigned long part_number = read_cpuid_part_number(); + +	if (implementor != ARM_CPU_IMP_ARM) +		return -EINVAL; + +	switch (part_number) { +	case ARM_CPU_PART_CORTEX_A15: +		return KVM_ARM_TARGET_CORTEX_A15; +	default: +		return -EINVAL; +	} +} +  int kvm_vcpu_set_target(struct kvm_vcpu *vcpu,  			const struct kvm_vcpu_init *init)  { diff --git a/arch/arm/kvm/handle_exit.c b/arch/arm/kvm/handle_exit.c new file mode 100644 index 00000000000..3d74a0be47d --- /dev/null +++ b/arch/arm/kvm/handle_exit.c @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2012 - Virtual Open Systems and Columbia University + * Author: Christoffer Dall <c.dall@virtualopensystems.com> + * + * 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. + * + * 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, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. + */ + +#include <linux/kvm.h> +#include <linux/kvm_host.h> +#include <asm/kvm_emulate.h> +#include <asm/kvm_coproc.h> +#include <asm/kvm_mmu.h> +#include <asm/kvm_psci.h> +#include <trace/events/kvm.h> + +#include "trace.h" + +#include "trace.h" + +typedef int (*exit_handle_fn)(struct kvm_vcpu *, struct kvm_run *); + +static int handle_svc_hyp(struct kvm_vcpu *vcpu, struct kvm_run *run) +{ +	/* SVC called from Hyp mode should never get here */ +	kvm_debug("SVC called from Hyp mode shouldn't go here\n"); +	BUG(); +	return -EINVAL; /* Squash warning */ +} + +static int handle_hvc(struct kvm_vcpu *vcpu, struct kvm_run *run) +{ +	trace_kvm_hvc(*vcpu_pc(vcpu), *vcpu_reg(vcpu, 0), +		      kvm_vcpu_hvc_get_imm(vcpu)); + +	if (kvm_psci_call(vcpu)) +		return 1; + +	kvm_inject_undefined(vcpu); +	return 1; +} + +static int handle_smc(struct kvm_vcpu *vcpu, struct kvm_run *run) +{ +	if (kvm_psci_call(vcpu)) +		return 1; + +	kvm_inject_undefined(vcpu); +	return 1; +} + +static int handle_pabt_hyp(struct kvm_vcpu *vcpu, struct kvm_run *run) +{ +	/* The hypervisor should never cause aborts */ +	kvm_err("Prefetch Abort taken from Hyp mode at %#08lx (HSR: %#08x)\n", +		kvm_vcpu_get_hfar(vcpu), kvm_vcpu_get_hsr(vcpu)); +	return -EFAULT; +} + +static int handle_dabt_hyp(struct kvm_vcpu *vcpu, struct kvm_run *run) +{ +	/* This is either an error in the ws. code or an external abort */ +	kvm_err("Data Abort taken from Hyp mode at %#08lx (HSR: %#08x)\n", +		kvm_vcpu_get_hfar(vcpu), kvm_vcpu_get_hsr(vcpu)); +	return -EFAULT; +} + +/** + * kvm_handle_wfi - handle a wait-for-interrupts instruction executed by a guest + * @vcpu:	the vcpu pointer + * @run:	the kvm_run structure pointer + * + * Simply sets the wait_for_interrupts flag on the vcpu structure, which will + * halt execution of world-switches and schedule other host processes until + * there is an incoming IRQ or FIQ to the VM. + */ +static int kvm_handle_wfi(struct kvm_vcpu *vcpu, struct kvm_run *run) +{ +	trace_kvm_wfi(*vcpu_pc(vcpu)); +	kvm_vcpu_block(vcpu); +	return 1; +} + +static exit_handle_fn arm_exit_handlers[] = { +	[HSR_EC_WFI]		= kvm_handle_wfi, +	[HSR_EC_CP15_32]	= kvm_handle_cp15_32, +	[HSR_EC_CP15_64]	= kvm_handle_cp15_64, +	[HSR_EC_CP14_MR]	= kvm_handle_cp14_access, +	[HSR_EC_CP14_LS]	= kvm_handle_cp14_load_store, +	[HSR_EC_CP14_64]	= kvm_handle_cp14_access, +	[HSR_EC_CP_0_13]	= kvm_handle_cp_0_13_access, +	[HSR_EC_CP10_ID]	= kvm_handle_cp10_id, +	[HSR_EC_SVC_HYP]	= handle_svc_hyp, +	[HSR_EC_HVC]		= handle_hvc, +	[HSR_EC_SMC]		= handle_smc, +	[HSR_EC_IABT]		= kvm_handle_guest_abort, +	[HSR_EC_IABT_HYP]	= handle_pabt_hyp, +	[HSR_EC_DABT]		= kvm_handle_guest_abort, +	[HSR_EC_DABT_HYP]	= handle_dabt_hyp, +}; + +static exit_handle_fn kvm_get_exit_handler(struct kvm_vcpu *vcpu) +{ +	u8 hsr_ec = kvm_vcpu_trap_get_class(vcpu); + +	if (hsr_ec >= ARRAY_SIZE(arm_exit_handlers) || +	    !arm_exit_handlers[hsr_ec]) { +		kvm_err("Unknown exception class: hsr: %#08x\n", +			(unsigned int)kvm_vcpu_get_hsr(vcpu)); +		BUG(); +	} + +	return arm_exit_handlers[hsr_ec]; +} + +/* + * Return > 0 to return to guest, < 0 on error, 0 (and set exit_reason) on + * proper exit to userspace. + */ +int handle_exit(struct kvm_vcpu *vcpu, struct kvm_run *run, +		       int exception_index) +{ +	exit_handle_fn exit_handler; + +	switch (exception_index) { +	case ARM_EXCEPTION_IRQ: +		return 1; +	case ARM_EXCEPTION_UNDEFINED: +		kvm_err("Undefined exception in Hyp mode at: %#08lx\n", +			kvm_vcpu_get_hyp_pc(vcpu)); +		BUG(); +		panic("KVM: Hypervisor undefined exception!\n"); +	case ARM_EXCEPTION_DATA_ABORT: +	case ARM_EXCEPTION_PREF_ABORT: +	case ARM_EXCEPTION_HVC: +		/* +		 * See ARM ARM B1.14.1: "Hyp traps on instructions +		 * that fail their condition code check" +		 */ +		if (!kvm_condition_valid(vcpu)) { +			kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu)); +			return 1; +		} + +		exit_handler = kvm_get_exit_handler(vcpu); + +		return exit_handler(vcpu, run); +	default: +		kvm_pr_unimpl("Unsupported exception type: %d", +			      exception_index); +		run->exit_reason = KVM_EXIT_INTERNAL_ERROR; +		return 0; +	} +} diff --git a/arch/arm/kvm/interrupts.S b/arch/arm/kvm/interrupts.S index 8ca87ab0919..f7793df62f5 100644 --- a/arch/arm/kvm/interrupts.S +++ b/arch/arm/kvm/interrupts.S @@ -35,15 +35,18 @@ __kvm_hyp_code_start:  /********************************************************************   * Flush per-VMID TLBs   * - * void __kvm_tlb_flush_vmid(struct kvm *kvm); + * void __kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa);   *   * We rely on the hardware to broadcast the TLB invalidation to all CPUs   * inside the inner-shareable domain (which is the case for all v7   * implementations).  If we come across a non-IS SMP implementation, we'll   * have to use an IPI based mechanism. Until then, we stick to the simple   * hardware assisted version. + * + * As v7 does not support flushing per IPA, just nuke the whole TLB + * instead, ignoring the ipa value.   */ -ENTRY(__kvm_tlb_flush_vmid) +ENTRY(__kvm_tlb_flush_vmid_ipa)  	push	{r2, r3}  	add	r0, r0, #KVM_VTTBR @@ -60,7 +63,7 @@ ENTRY(__kvm_tlb_flush_vmid)  	pop	{r2, r3}  	bx	lr -ENDPROC(__kvm_tlb_flush_vmid) +ENDPROC(__kvm_tlb_flush_vmid_ipa)  /********************************************************************   * Flush TLBs and instruction caches of all CPUs inside the inner-shareable @@ -235,9 +238,9 @@ ENTRY(kvm_call_hyp)   * instruction is issued since all traps are disabled when running the host   * kernel as per the Hyp-mode initialization at boot time.   * - * HVC instructions cause a trap to the vector page + offset 0x18 (see hyp_hvc + * HVC instructions cause a trap to the vector page + offset 0x14 (see hyp_hvc   * below) when the HVC instruction is called from SVC mode (i.e. a guest or the - * host kernel) and they cause a trap to the vector page + offset 0xc when HVC + * host kernel) and they cause a trap to the vector page + offset 0x8 when HVC   * instructions are called from within Hyp-mode.   *   * Hyp-ABI: Calling HYP-mode functions from host (in SVC mode): diff --git a/arch/arm/kvm/mmio.c b/arch/arm/kvm/mmio.c index 98a870ff1a5..72a12f2171b 100644 --- a/arch/arm/kvm/mmio.c +++ b/arch/arm/kvm/mmio.c @@ -33,16 +33,16 @@   */  int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run)  { -	__u32 *dest; +	unsigned long *dest;  	unsigned int len;  	int mask;  	if (!run->mmio.is_write) {  		dest = vcpu_reg(vcpu, vcpu->arch.mmio_decode.rt); -		memset(dest, 0, sizeof(int)); +		*dest = 0;  		len = run->mmio.len; -		if (len > 4) +		if (len > sizeof(unsigned long))  			return -EINVAL;  		memcpy(dest, run->mmio.data, len); @@ -50,7 +50,8 @@ int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run)  		trace_kvm_mmio(KVM_TRACE_MMIO_READ, len, run->mmio.phys_addr,  				*((u64 *)run->mmio.data)); -		if (vcpu->arch.mmio_decode.sign_extend && len < 4) { +		if (vcpu->arch.mmio_decode.sign_extend && +		    len < sizeof(unsigned long)) {  			mask = 1U << ((len * 8) - 1);  			*dest = (*dest ^ mask) - mask;  		} @@ -65,40 +66,29 @@ static int decode_hsr(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,  	unsigned long rt, len;  	bool is_write, sign_extend; -	if ((vcpu->arch.hsr >> 8) & 1) { +	if (kvm_vcpu_dabt_isextabt(vcpu)) {  		/* cache operation on I/O addr, tell guest unsupported */ -		kvm_inject_dabt(vcpu, vcpu->arch.hxfar); +		kvm_inject_dabt(vcpu, kvm_vcpu_get_hfar(vcpu));  		return 1;  	} -	if ((vcpu->arch.hsr >> 7) & 1) { +	if (kvm_vcpu_dabt_iss1tw(vcpu)) {  		/* page table accesses IO mem: tell guest to fix its TTBR */ -		kvm_inject_dabt(vcpu, vcpu->arch.hxfar); +		kvm_inject_dabt(vcpu, kvm_vcpu_get_hfar(vcpu));  		return 1;  	} -	switch ((vcpu->arch.hsr >> 22) & 0x3) { -	case 0: -		len = 1; -		break; -	case 1: -		len = 2; -		break; -	case 2: -		len = 4; -		break; -	default: -		kvm_err("Hardware is weird: SAS 0b11 is reserved\n"); -		return -EFAULT; -	} +	len = kvm_vcpu_dabt_get_as(vcpu); +	if (unlikely(len < 0)) +		return len; -	is_write = vcpu->arch.hsr & HSR_WNR; -	sign_extend = vcpu->arch.hsr & HSR_SSE; -	rt = (vcpu->arch.hsr & HSR_SRT_MASK) >> HSR_SRT_SHIFT; +	is_write = kvm_vcpu_dabt_iswrite(vcpu); +	sign_extend = kvm_vcpu_dabt_issext(vcpu); +	rt = kvm_vcpu_dabt_get_rd(vcpu);  	if (kvm_vcpu_reg_is_pc(vcpu, rt)) {  		/* IO memory trying to read/write pc */ -		kvm_inject_pabt(vcpu, vcpu->arch.hxfar); +		kvm_inject_pabt(vcpu, kvm_vcpu_get_hfar(vcpu));  		return 1;  	} @@ -112,7 +102,7 @@ static int decode_hsr(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,  	 * The MMIO instruction is emulated and should not be re-executed  	 * in the guest.  	 */ -	kvm_skip_instr(vcpu, (vcpu->arch.hsr >> 25) & 1); +	kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));  	return 0;  } @@ -130,7 +120,7 @@ int io_mem_abort(struct kvm_vcpu *vcpu, struct kvm_run *run,  	 * space do its magic.  	 */ -	if (vcpu->arch.hsr & HSR_ISV) { +	if (kvm_vcpu_dabt_isvalid(vcpu)) {  		ret = decode_hsr(vcpu, fault_ipa, &mmio);  		if (ret)  			return ret; diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c index 99e07c7dd74..2f12e405640 100644 --- a/arch/arm/kvm/mmu.c +++ b/arch/arm/kvm/mmu.c @@ -20,7 +20,6 @@  #include <linux/kvm_host.h>  #include <linux/io.h>  #include <trace/events/kvm.h> -#include <asm/idmap.h>  #include <asm/pgalloc.h>  #include <asm/cacheflush.h>  #include <asm/kvm_arm.h> @@ -28,8 +27,6 @@  #include <asm/kvm_mmio.h>  #include <asm/kvm_asm.h>  #include <asm/kvm_emulate.h> -#include <asm/mach/map.h> -#include <trace/events/kvm.h>  #include "trace.h" @@ -37,19 +34,9 @@ extern char  __hyp_idmap_text_start[], __hyp_idmap_text_end[];  static DEFINE_MUTEX(kvm_hyp_pgd_mutex); -static void kvm_tlb_flush_vmid(struct kvm *kvm) +static void kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa)  { -	kvm_call_hyp(__kvm_tlb_flush_vmid, kvm); -} - -static void kvm_set_pte(pte_t *pte, pte_t new_pte) -{ -	pte_val(*pte) = new_pte; -	/* -	 * flush_pmd_entry just takes a void pointer and cleans the necessary -	 * cache entries, so we can reuse the function for ptes. -	 */ -	flush_pmd_entry(pte); +	kvm_call_hyp(__kvm_tlb_flush_vmid_ipa, kvm, ipa);  }  static int mmu_topup_memory_cache(struct kvm_mmu_memory_cache *cache, @@ -98,33 +85,42 @@ static void free_ptes(pmd_t *pmd, unsigned long addr)  	}  } +static void free_hyp_pgd_entry(unsigned long addr) +{ +	pgd_t *pgd; +	pud_t *pud; +	pmd_t *pmd; +	unsigned long hyp_addr = KERN_TO_HYP(addr); + +	pgd = hyp_pgd + pgd_index(hyp_addr); +	pud = pud_offset(pgd, hyp_addr); + +	if (pud_none(*pud)) +		return; +	BUG_ON(pud_bad(*pud)); + +	pmd = pmd_offset(pud, hyp_addr); +	free_ptes(pmd, addr); +	pmd_free(NULL, pmd); +	pud_clear(pud); +} +  /**   * free_hyp_pmds - free a Hyp-mode level-2 tables and child level-3 tables   *   * Assumes this is a page table used strictly in Hyp-mode and therefore contains - * only mappings in the kernel memory area, which is above PAGE_OFFSET. + * either mappings in the kernel memory area (above PAGE_OFFSET), or + * device mappings in the vmalloc range (from VMALLOC_START to VMALLOC_END).   */  void free_hyp_pmds(void)  { -	pgd_t *pgd; -	pud_t *pud; -	pmd_t *pmd;  	unsigned long addr;  	mutex_lock(&kvm_hyp_pgd_mutex); -	for (addr = PAGE_OFFSET; addr != 0; addr += PGDIR_SIZE) { -		pgd = hyp_pgd + pgd_index(addr); -		pud = pud_offset(pgd, addr); - -		if (pud_none(*pud)) -			continue; -		BUG_ON(pud_bad(*pud)); - -		pmd = pmd_offset(pud, addr); -		free_ptes(pmd, addr); -		pmd_free(NULL, pmd); -		pud_clear(pud); -	} +	for (addr = PAGE_OFFSET; virt_addr_valid(addr); addr += PGDIR_SIZE) +		free_hyp_pgd_entry(addr); +	for (addr = VMALLOC_START; is_vmalloc_addr((void*)addr); addr += PGDIR_SIZE) +		free_hyp_pgd_entry(addr);  	mutex_unlock(&kvm_hyp_pgd_mutex);  } @@ -136,7 +132,9 @@ static void create_hyp_pte_mappings(pmd_t *pmd, unsigned long start,  	struct page *page;  	for (addr = start & PAGE_MASK; addr < end; addr += PAGE_SIZE) { -		pte = pte_offset_kernel(pmd, addr); +		unsigned long hyp_addr = KERN_TO_HYP(addr); + +		pte = pte_offset_kernel(pmd, hyp_addr);  		BUG_ON(!virt_addr_valid(addr));  		page = virt_to_page(addr);  		kvm_set_pte(pte, mk_pte(page, PAGE_HYP)); @@ -151,7 +149,9 @@ static void create_hyp_io_pte_mappings(pmd_t *pmd, unsigned long start,  	unsigned long addr;  	for (addr = start & PAGE_MASK; addr < end; addr += PAGE_SIZE) { -		pte = pte_offset_kernel(pmd, addr); +		unsigned long hyp_addr = KERN_TO_HYP(addr); + +		pte = pte_offset_kernel(pmd, hyp_addr);  		BUG_ON(pfn_valid(*pfn_base));  		kvm_set_pte(pte, pfn_pte(*pfn_base, PAGE_HYP_DEVICE));  		(*pfn_base)++; @@ -166,12 +166,13 @@ static int create_hyp_pmd_mappings(pud_t *pud, unsigned long start,  	unsigned long addr, next;  	for (addr = start; addr < end; addr = next) { -		pmd = pmd_offset(pud, addr); +		unsigned long hyp_addr = KERN_TO_HYP(addr); +		pmd = pmd_offset(pud, hyp_addr);  		BUG_ON(pmd_sect(*pmd));  		if (pmd_none(*pmd)) { -			pte = pte_alloc_one_kernel(NULL, addr); +			pte = pte_alloc_one_kernel(NULL, hyp_addr);  			if (!pte) {  				kvm_err("Cannot allocate Hyp pte\n");  				return -ENOMEM; @@ -206,17 +207,23 @@ static int __create_hyp_mappings(void *from, void *to, unsigned long *pfn_base)  	unsigned long addr, next;  	int err = 0; -	BUG_ON(start > end); -	if (start < PAGE_OFFSET) +	if (start >= end) +		return -EINVAL; +	/* Check for a valid kernel memory mapping */ +	if (!pfn_base && (!virt_addr_valid(from) || !virt_addr_valid(to - 1))) +		return -EINVAL; +	/* Check for a valid kernel IO mapping */ +	if (pfn_base && (!is_vmalloc_addr(from) || !is_vmalloc_addr(to - 1)))  		return -EINVAL;  	mutex_lock(&kvm_hyp_pgd_mutex);  	for (addr = start; addr < end; addr = next) { -		pgd = hyp_pgd + pgd_index(addr); -		pud = pud_offset(pgd, addr); +		unsigned long hyp_addr = KERN_TO_HYP(addr); +		pgd = hyp_pgd + pgd_index(hyp_addr); +		pud = pud_offset(pgd, hyp_addr);  		if (pud_none_or_clear_bad(pud)) { -			pmd = pmd_alloc_one(NULL, addr); +			pmd = pmd_alloc_one(NULL, hyp_addr);  			if (!pmd) {  				kvm_err("Cannot allocate Hyp pmd\n");  				err = -ENOMEM; @@ -236,12 +243,13 @@ out:  }  /** - * create_hyp_mappings - map a kernel virtual address range in Hyp mode + * create_hyp_mappings - duplicate a kernel virtual address range in Hyp mode   * @from:	The virtual kernel start address of the range   * @to:		The virtual kernel end address of the range (exclusive)   * - * The same virtual address as the kernel virtual address is also used in - * Hyp-mode mapping to the same underlying physical pages. + * The same virtual address as the kernel virtual address is also used + * in Hyp-mode mapping (modulo HYP_PAGE_OFFSET) to the same underlying + * physical pages.   *   * Note: Wrapping around zero in the "to" address is not supported.   */ @@ -251,10 +259,13 @@ int create_hyp_mappings(void *from, void *to)  }  /** - * create_hyp_io_mappings - map a physical IO range in Hyp mode - * @from:	The virtual HYP start address of the range - * @to:		The virtual HYP end address of the range (exclusive) + * create_hyp_io_mappings - duplicate a kernel IO mapping into Hyp mode + * @from:	The kernel start VA of the range + * @to:		The kernel end VA of the range (exclusive)   * @addr:	The physical start address which gets mapped + * + * The resulting HYP VA is the same as the kernel VA, modulo + * HYP_PAGE_OFFSET.   */  int create_hyp_io_mappings(void *from, void *to, phys_addr_t addr)  { @@ -290,7 +301,7 @@ int kvm_alloc_stage2_pgd(struct kvm *kvm)  	VM_BUG_ON((unsigned long)pgd & (S2_PGD_SIZE - 1));  	memset(pgd, 0, PTRS_PER_S2_PGD * sizeof(pgd_t)); -	clean_dcache_area(pgd, PTRS_PER_S2_PGD * sizeof(pgd_t)); +	kvm_clean_pgd(pgd);  	kvm->arch.pgd = pgd;  	return 0; @@ -422,22 +433,22 @@ static int stage2_set_pte(struct kvm *kvm, struct kvm_mmu_memory_cache *cache,  			return 0; /* ignore calls from kvm_set_spte_hva */  		pmd = mmu_memory_cache_alloc(cache);  		pud_populate(NULL, pud, pmd); -		pmd += pmd_index(addr);  		get_page(virt_to_page(pud)); -	} else -		pmd = pmd_offset(pud, addr); +	} + +	pmd = pmd_offset(pud, addr);  	/* Create 2nd stage page table mapping - Level 2 */  	if (pmd_none(*pmd)) {  		if (!cache)  			return 0; /* ignore calls from kvm_set_spte_hva */  		pte = mmu_memory_cache_alloc(cache); -		clean_pte_table(pte); +		kvm_clean_pte(pte);  		pmd_populate_kernel(NULL, pmd, pte); -		pte += pte_index(addr);  		get_page(virt_to_page(pmd)); -	} else -		pte = pte_offset_kernel(pmd, addr); +	} + +	pte = pte_offset_kernel(pmd, addr);  	if (iomap && pte_present(*pte))  		return -EFAULT; @@ -446,7 +457,7 @@ static int stage2_set_pte(struct kvm *kvm, struct kvm_mmu_memory_cache *cache,  	old_pte = *pte;  	kvm_set_pte(pte, *new_pte);  	if (pte_present(old_pte)) -		kvm_tlb_flush_vmid(kvm); +		kvm_tlb_flush_vmid_ipa(kvm, addr);  	else  		get_page(virt_to_page(pte)); @@ -473,7 +484,8 @@ int kvm_phys_addr_ioremap(struct kvm *kvm, phys_addr_t guest_ipa,  	pfn = __phys_to_pfn(pa);  	for (addr = guest_ipa; addr < end; addr += PAGE_SIZE) { -		pte_t pte = pfn_pte(pfn, PAGE_S2_DEVICE | L_PTE_S2_RDWR); +		pte_t pte = pfn_pte(pfn, PAGE_S2_DEVICE); +		kvm_set_s2pte_writable(&pte);  		ret = mmu_topup_memory_cache(&cache, 2, 2);  		if (ret) @@ -492,29 +504,6 @@ out:  	return ret;  } -static void coherent_icache_guest_page(struct kvm *kvm, gfn_t gfn) -{ -	/* -	 * If we are going to insert an instruction page and the icache is -	 * either VIPT or PIPT, there is a potential problem where the host -	 * (or another VM) may have used the same page as this guest, and we -	 * read incorrect data from the icache.  If we're using a PIPT cache, -	 * we can invalidate just that page, but if we are using a VIPT cache -	 * we need to invalidate the entire icache - damn shame - as written -	 * in the ARM ARM (DDI 0406C.b - Page B3-1393). -	 * -	 * VIVT caches are tagged using both the ASID and the VMID and doesn't -	 * need any kind of flushing (DDI 0406C.b - Page B3-1392). -	 */ -	if (icache_is_pipt()) { -		unsigned long hva = gfn_to_hva(kvm, gfn); -		__cpuc_coherent_user_range(hva, hva + PAGE_SIZE); -	} else if (!icache_is_vivt_asid_tagged()) { -		/* any kind of VIPT cache */ -		__flush_icache_all(); -	} -} -  static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,  			  gfn_t gfn, struct kvm_memory_slot *memslot,  			  unsigned long fault_status) @@ -526,7 +515,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,  	unsigned long mmu_seq;  	struct kvm_mmu_memory_cache *memcache = &vcpu->arch.mmu_page_cache; -	write_fault = kvm_is_write_fault(vcpu->arch.hsr); +	write_fault = kvm_is_write_fault(kvm_vcpu_get_hsr(vcpu));  	if (fault_status == FSC_PERM && !write_fault) {  		kvm_err("Unexpected L2 read permission error\n");  		return -EFAULT; @@ -560,7 +549,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,  	if (mmu_notifier_retry(vcpu->kvm, mmu_seq))  		goto out_unlock;  	if (writable) { -		pte_val(new_pte) |= L_PTE_S2_RDWR; +		kvm_set_s2pte_writable(&new_pte);  		kvm_set_pfn_dirty(pfn);  	}  	stage2_set_pte(vcpu->kvm, memcache, fault_ipa, &new_pte, false); @@ -585,7 +574,6 @@ out_unlock:   */  int kvm_handle_guest_abort(struct kvm_vcpu *vcpu, struct kvm_run *run)  { -	unsigned long hsr_ec;  	unsigned long fault_status;  	phys_addr_t fault_ipa;  	struct kvm_memory_slot *memslot; @@ -593,18 +581,17 @@ int kvm_handle_guest_abort(struct kvm_vcpu *vcpu, struct kvm_run *run)  	gfn_t gfn;  	int ret, idx; -	hsr_ec = vcpu->arch.hsr >> HSR_EC_SHIFT; -	is_iabt = (hsr_ec == HSR_EC_IABT); -	fault_ipa = ((phys_addr_t)vcpu->arch.hpfar & HPFAR_MASK) << 8; +	is_iabt = kvm_vcpu_trap_is_iabt(vcpu); +	fault_ipa = kvm_vcpu_get_fault_ipa(vcpu); -	trace_kvm_guest_fault(*vcpu_pc(vcpu), vcpu->arch.hsr, -			      vcpu->arch.hxfar, fault_ipa); +	trace_kvm_guest_fault(*vcpu_pc(vcpu), kvm_vcpu_get_hsr(vcpu), +			      kvm_vcpu_get_hfar(vcpu), fault_ipa);  	/* Check the stage-2 fault is trans. fault or write fault */ -	fault_status = (vcpu->arch.hsr & HSR_FSC_TYPE); +	fault_status = kvm_vcpu_trap_get_fault(vcpu);  	if (fault_status != FSC_FAULT && fault_status != FSC_PERM) { -		kvm_err("Unsupported fault status: EC=%#lx DFCS=%#lx\n", -			hsr_ec, fault_status); +		kvm_err("Unsupported fault status: EC=%#x DFCS=%#lx\n", +			kvm_vcpu_trap_get_class(vcpu), fault_status);  		return -EFAULT;  	} @@ -614,7 +601,7 @@ int kvm_handle_guest_abort(struct kvm_vcpu *vcpu, struct kvm_run *run)  	if (!kvm_is_visible_gfn(vcpu->kvm, gfn)) {  		if (is_iabt) {  			/* Prefetch Abort on I/O address */ -			kvm_inject_pabt(vcpu, vcpu->arch.hxfar); +			kvm_inject_pabt(vcpu, kvm_vcpu_get_hfar(vcpu));  			ret = 1;  			goto out_unlock;  		} @@ -626,8 +613,13 @@ int kvm_handle_guest_abort(struct kvm_vcpu *vcpu, struct kvm_run *run)  			goto out_unlock;  		} -		/* Adjust page offset */ -		fault_ipa |= vcpu->arch.hxfar & ~PAGE_MASK; +		/* +		 * The IPA is reported as [MAX:12], so we need to +		 * complement it with the bottom 12 bits from the +		 * faulting VA. This is always 12 bits, irrespective +		 * of the page size. +		 */ +		fault_ipa |= kvm_vcpu_get_hfar(vcpu) & ((1 << 12) - 1);  		ret = io_mem_abort(vcpu, run, fault_ipa);  		goto out_unlock;  	} @@ -682,7 +674,7 @@ static void handle_hva_to_gpa(struct kvm *kvm,  static void kvm_unmap_hva_handler(struct kvm *kvm, gpa_t gpa, void *data)  {  	unmap_stage2_range(kvm, gpa, PAGE_SIZE); -	kvm_tlb_flush_vmid(kvm); +	kvm_tlb_flush_vmid_ipa(kvm, gpa);  }  int kvm_unmap_hva(struct kvm *kvm, unsigned long hva) @@ -776,7 +768,7 @@ void kvm_clear_hyp_idmap(void)  		pmd = pmd_offset(pud, addr);  		pud_clear(pud); -		clean_pmd_entry(pmd); +		kvm_clean_pmd_entry(pmd);  		pmd_free(NULL, (pmd_t *)((unsigned long)pmd & PAGE_MASK));  	} while (pgd++, addr = next, addr < end);  } diff --git a/arch/arm/kvm/vgic.c b/arch/arm/kvm/vgic.c index c9a17316e9f..17c5ac7d10e 100644 --- a/arch/arm/kvm/vgic.c +++ b/arch/arm/kvm/vgic.c @@ -883,8 +883,7 @@ static bool vgic_queue_irq(struct kvm_vcpu *vcpu, u8 sgi_source_id, int irq)  			  lr, irq, vgic_cpu->vgic_lr[lr]);  		BUG_ON(!test_bit(lr, vgic_cpu->lr_used));  		vgic_cpu->vgic_lr[lr] |= GICH_LR_PENDING_BIT; - -		goto out; +		return true;  	}  	/* Try to use another LR for this interrupt */ @@ -898,7 +897,6 @@ static bool vgic_queue_irq(struct kvm_vcpu *vcpu, u8 sgi_source_id, int irq)  	vgic_cpu->vgic_irq_lr_map[irq] = lr;  	set_bit(lr, vgic_cpu->lr_used); -out:  	if (!vgic_irq_is_edge(vcpu, irq))  		vgic_cpu->vgic_lr[lr] |= GICH_LR_EOI; @@ -1018,21 +1016,6 @@ static bool vgic_process_maintenance(struct kvm_vcpu *vcpu)  	kvm_debug("MISR = %08x\n", vgic_cpu->vgic_misr); -	/* -	 * We do not need to take the distributor lock here, since the only -	 * action we perform is clearing the irq_active_bit for an EOIed -	 * level interrupt.  There is a potential race with -	 * the queuing of an interrupt in __kvm_vgic_flush_hwstate(), where we -	 * check if the interrupt is already active. Two possibilities: -	 * -	 * - The queuing is occurring on the same vcpu: cannot happen, -	 *   as we're already in the context of this vcpu, and -	 *   executing the handler -	 * - The interrupt has been migrated to another vcpu, and we -	 *   ignore this interrupt for this run. Big deal. It is still -	 *   pending though, and will get considered when this vcpu -	 *   exits. -	 */  	if (vgic_cpu->vgic_misr & GICH_MISR_EOI) {  		/*  		 * Some level interrupts have been EOIed. Clear their @@ -1054,6 +1037,13 @@ static bool vgic_process_maintenance(struct kvm_vcpu *vcpu)  			} else {  				vgic_cpu_irq_clear(vcpu, irq);  			} + +			/* +			 * Despite being EOIed, the LR may not have +			 * been marked as empty. +			 */ +			set_bit(lr, (unsigned long *)vgic_cpu->vgic_elrsr); +			vgic_cpu->vgic_lr[lr] &= ~GICH_LR_ACTIVE_BIT;  		}  	} @@ -1064,9 +1054,8 @@ static bool vgic_process_maintenance(struct kvm_vcpu *vcpu)  }  /* - * Sync back the VGIC state after a guest run. We do not really touch - * the distributor here (the irq_pending_on_cpu bit is safe to set), - * so there is no need for taking its lock. + * Sync back the VGIC state after a guest run. The distributor lock is + * needed so we don't get preempted in the middle of the state processing.   */  static void __kvm_vgic_sync_hwstate(struct kvm_vcpu *vcpu)  { @@ -1112,10 +1101,14 @@ void kvm_vgic_flush_hwstate(struct kvm_vcpu *vcpu)  void kvm_vgic_sync_hwstate(struct kvm_vcpu *vcpu)  { +	struct vgic_dist *dist = &vcpu->kvm->arch.vgic; +  	if (!irqchip_in_kernel(vcpu->kvm))  		return; +	spin_lock(&dist->lock);  	__kvm_vgic_sync_hwstate(vcpu); +	spin_unlock(&dist->lock);  }  int kvm_vgic_vcpu_pending_irq(struct kvm_vcpu *vcpu) @@ -1484,7 +1477,7 @@ int kvm_vgic_set_addr(struct kvm *kvm, unsigned long type, u64 addr)  	if (addr & ~KVM_PHYS_MASK)  		return -E2BIG; -	if (addr & ~PAGE_MASK) +	if (addr & (SZ_4K - 1))  		return -EINVAL;  	mutex_lock(&kvm->lock); diff --git a/arch/arm/lib/delay.c b/arch/arm/lib/delay.c index 6b93f6a1a3c..64dbfa57204 100644 --- a/arch/arm/lib/delay.c +++ b/arch/arm/lib/delay.c @@ -58,7 +58,7 @@ static void __timer_delay(unsigned long cycles)  static void __timer_const_udelay(unsigned long xloops)  {  	unsigned long long loops = xloops; -	loops *= loops_per_jiffy; +	loops *= arm_delay_ops.ticks_per_jiffy;  	__timer_delay(loops >> UDELAY_SHIFT);  } @@ -73,11 +73,13 @@ void __init register_current_timer_delay(const struct delay_timer *timer)  		pr_info("Switching to timer-based delay loop\n");  		delay_timer			= timer;  		lpj_fine			= timer->freq / HZ; -		loops_per_jiffy			= lpj_fine; + +		/* cpufreq may scale loops_per_jiffy, so keep a private copy */ +		arm_delay_ops.ticks_per_jiffy	= lpj_fine;  		arm_delay_ops.delay		= __timer_delay;  		arm_delay_ops.const_udelay	= __timer_const_udelay;  		arm_delay_ops.udelay		= __timer_udelay; -		arm_delay_ops.const_clock	= true; +  		delay_calibrated		= true;  	} else {  		pr_info("Ignoring duplicate/late registration of read_current_timer delay\n"); diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig index 6071f4c3d65..02802386b89 100644 --- a/arch/arm/mach-at91/Kconfig +++ b/arch/arm/mach-at91/Kconfig @@ -1,14 +1,15 @@  if ARCH_AT91 -config HAVE_AT91_DATAFLASH_CARD -	bool -  config HAVE_AT91_DBGU0  	bool  config HAVE_AT91_DBGU1  	bool +config AT91_PMC_UNIT +	bool +	default !ARCH_AT91X40 +  config AT91_SAM9_ALT_RESET  	bool  	default !ARCH_AT91X40 @@ -17,17 +18,59 @@ config AT91_SAM9G45_RESET  	bool  	default !ARCH_AT91X40 +config AT91_SAM9_TIME +	bool +  config SOC_AT91SAM9  	bool +	select AT91_SAM9_TIME  	select CPU_ARM926T  	select GENERIC_CLOCKEVENTS  	select MULTI_IRQ_HANDLER  	select SPARSE_IRQ +config SOC_SAMA5 +	bool +	select AT91_SAM9_TIME +	select CPU_V7 +	select GENERIC_CLOCKEVENTS +	select MULTI_IRQ_HANDLER +	select SPARSE_IRQ +  menu "Atmel AT91 System-on-Chip" +choice + +	prompt "Core type" + +config SOC_SAM_V4_V5 +	bool "ARM7/ARM9" +	help +	  Select this if you are using one of Atmel's AT91SAM9, AT91RM9200 +	  or AT91X40 SoC. + +config SOC_SAM_V7 +	bool "Cortex A5" +	help +	  Select this if you are using one of Atmel's SAMA5D3 SoC. + +endchoice +  comment "Atmel AT91 Processor" +if SOC_SAM_V7 +config SOC_SAMA5D3 +	bool "SAMA5D3 family" +	depends on SOC_SAM_V7 +	select SOC_SAMA5 +	select HAVE_FB_ATMEL +	select HAVE_AT91_DBGU1 +	help +	  Select this if you are using one of Atmel's SAMA5D3 family SoC. +	  This support covers SAMA5D31, SAMA5D33, SAMA5D34, SAMA5D35. +endif + +if SOC_SAM_V4_V5  config SOC_AT91RM9200  	bool "AT91RM9200"  	select CPU_ARM920T @@ -93,394 +136,10 @@ config SOC_AT91SAM9N12  	help  	  Select this if you are using Atmel's AT91SAM9N12 SoC. -choice -	prompt "Atmel AT91 Processor Devices for non DT boards" - -config ARCH_AT91_NONE -	bool "None" - -config ARCH_AT91RM9200 -	bool "AT91RM9200" -	select SOC_AT91RM9200 - -config ARCH_AT91SAM9260 -	bool "AT91SAM9260 or AT91SAM9XE" -	select SOC_AT91SAM9260 - -config ARCH_AT91SAM9261 -	bool "AT91SAM9261" -	select SOC_AT91SAM9261 - -config ARCH_AT91SAM9G10 -	bool "AT91SAM9G10" -	select SOC_AT91SAM9261 - -config ARCH_AT91SAM9263 -	bool "AT91SAM9263" -	select SOC_AT91SAM9263 - -config ARCH_AT91SAM9RL -	bool "AT91SAM9RL" -	select SOC_AT91SAM9RL - -config ARCH_AT91SAM9G20 -	bool "AT91SAM9G20" -	select SOC_AT91SAM9260 - -config ARCH_AT91SAM9G45 -	bool "AT91SAM9G45" -	select SOC_AT91SAM9G45 - -config ARCH_AT91X40 -	bool "AT91x40" -	depends on !MMU -	select ARCH_USES_GETTIMEOFFSET -	select MULTI_IRQ_HANDLER -	select SPARSE_IRQ - -endchoice - -config AT91_PMC_UNIT -	bool -	default !ARCH_AT91X40 - -# ---------------------------------------------------------- - -if ARCH_AT91RM9200 - -comment "AT91RM9200 Board Type" - -config MACH_ONEARM -	bool "Ajeco 1ARM Single Board Computer" -	help -	  Select this if you are using Ajeco's 1ARM Single Board Computer. -	  <http://www.ajeco.fi/> - -config ARCH_AT91RM9200DK -	bool "Atmel AT91RM9200-DK Development board" -	select HAVE_AT91_DATAFLASH_CARD -	help -	  Select this if you are using Atmel's AT91RM9200-DK Development board. -	  (Discontinued) - -config MACH_AT91RM9200EK -	bool "Atmel AT91RM9200-EK Evaluation Kit" -	select HAVE_AT91_DATAFLASH_CARD -	help -	  Select this if you are using Atmel's AT91RM9200-EK Evaluation Kit. -	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3507> - -config MACH_CSB337 -	bool "Cogent CSB337" -	help -	  Select this if you are using Cogent's CSB337 board. -	  <http://www.cogcomp.com/csb_csb337.htm> - -config MACH_CSB637 -	bool "Cogent CSB637" -	help -	  Select this if you are using Cogent's CSB637 board. -	  <http://www.cogcomp.com/csb_csb637.htm> - -config MACH_CARMEVA -	bool "Conitec ARM&EVA" -	help -	  Select this if you are using Conitec's AT91RM9200-MCU-Module. -	  <http://www.conitec.net/english/linuxboard.php> - -config MACH_ATEB9200 -	bool "Embest ATEB9200" -	help -	  Select this if you are using Embest's ATEB9200 board. -	  <http://www.embedinfo.com/english/product/ATEB9200.asp> - -config MACH_KB9200 -	bool "KwikByte KB920x" -	help -	  Select this if you are using KwikByte's KB920x board. -	  <http://www.kwikbyte.com/KB9202.html> - -config MACH_PICOTUX2XX -	bool "picotux 200" -	help -	  Select this if you are using a picotux 200. -	  <http://www.picotux.com/> - -config MACH_KAFA -	bool "Sperry-Sun KAFA board" -	help -	  Select this if you are using Sperry-Sun's KAFA board. - -config MACH_ECBAT91 -	bool "emQbit ECB_AT91 SBC" -	select HAVE_AT91_DATAFLASH_CARD -	help -	  Select this if you are using emQbit's ECB_AT91 board. -	  <http://wiki.emqbit.com/free-ecb-at91> - -config MACH_YL9200 -	bool "ucDragon YL-9200" -	help -	  Select this if you are using the ucDragon YL-9200 board. - -config MACH_CPUAT91 -	bool "Eukrea CPUAT91" -	help -	  Select this if you are using the Eukrea Electromatique's -	  CPUAT91 board <http://www.eukrea.com/>. - -config MACH_ECO920 -	bool "eco920" -	help -	  Select this if you are using the eco920 board - -config MACH_RSI_EWS -	bool "RSI Embedded Webserver" -	depends on ARCH_AT91RM9200 -	help -	  Select this if you are using RSIs EWS board. -endif - -# ---------------------------------------------------------- - -if ARCH_AT91SAM9260 - -comment "AT91SAM9260 Variants" - -comment "AT91SAM9260 / AT91SAM9XE Board Type" - -config MACH_AT91SAM9260EK -	bool "Atmel AT91SAM9260-EK / AT91SAM9XE Evaluation Kit" -	select HAVE_AT91_DATAFLASH_CARD -	help -	  Select this if you are using Atmel's AT91SAM9260-EK or AT91SAM9XE Evaluation Kit -	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3933> - -config MACH_CAM60 -	bool "KwikByte KB9260 (CAM60) board" -	help -	  Select this if you are using KwikByte's KB9260 (CAM60) board based on the Atmel AT91SAM9260. -	  <http://www.kwikbyte.com/KB9260.html> - -config MACH_SAM9_L9260 -	bool "Olimex SAM9-L9260 board" -	select HAVE_AT91_DATAFLASH_CARD -	help -	  Select this if you are using Olimex's SAM9-L9260 board based on the Atmel AT91SAM9260. -	  <http://www.olimex.com/dev/sam9-L9260.html> - -config MACH_AFEB9260 -	bool "Custom afeb9260 board v1" -	help -	  Select this if you are using custom afeb9260 board based on -	  open hardware design. Select this for revision 1 of the board. -	  <svn://194.85.238.22/home/users/george/svn/arm9eb> -	  <http://groups.google.com/group/arm9fpga-evolution-board> - -config MACH_USB_A9260 -	bool "CALAO USB-A9260" -	help -	  Select this if you are using a Calao Systems USB-A9260. -	  <http://www.calao-systems.com> - -config MACH_QIL_A9260 -	bool "CALAO QIL-A9260 board" -	help -	  Select this if you are using a Calao Systems QIL-A9260 Board. -	  <http://www.calao-systems.com> - -config MACH_CPU9260 -	bool "Eukrea CPU9260 board" -	help -	  Select this if you are using a Eukrea Electromatique's -	  CPU9260 Board <http://www.eukrea.com/> - -config MACH_FLEXIBITY -	bool "Flexibity Connect board" -	help -	  Select this if you are using Flexibity Connect board -	  <http://www.flexibity.com> - -endif - -# ---------------------------------------------------------- - -if ARCH_AT91SAM9261 - -comment "AT91SAM9261 Board Type" - -config MACH_AT91SAM9261EK -	bool "Atmel AT91SAM9261-EK Evaluation Kit" -	select HAVE_AT91_DATAFLASH_CARD -	help -	  Select this if you are using Atmel's AT91SAM9261-EK Evaluation Kit. -	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3820> - -endif - -# ---------------------------------------------------------- - -if ARCH_AT91SAM9G10 - -comment "AT91SAM9G10 Board Type" - -config MACH_AT91SAM9G10EK -	bool "Atmel AT91SAM9G10-EK Evaluation Kit" -	select HAVE_AT91_DATAFLASH_CARD -	help -	  Select this if you are using Atmel's AT91SAM9G10-EK Evaluation Kit. -	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4588> - -endif - -# ---------------------------------------------------------- - -if ARCH_AT91SAM9263 - -comment "AT91SAM9263 Board Type" - -config MACH_AT91SAM9263EK -	bool "Atmel AT91SAM9263-EK Evaluation Kit" -	select HAVE_AT91_DATAFLASH_CARD -	help -	  Select this if you are using Atmel's AT91SAM9263-EK Evaluation Kit. -	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4057> - -config MACH_USB_A9263 -	bool "CALAO USB-A9263" -	help -	  Select this if you are using a Calao Systems USB-A9263. -	  <http://www.calao-systems.com> - -endif - -# ---------------------------------------------------------- - -if ARCH_AT91SAM9RL - -comment "AT91SAM9RL Board Type" - -config MACH_AT91SAM9RLEK -	bool "Atmel AT91SAM9RL-EK Evaluation Kit" -	help -	  Select this if you are using Atmel's AT91SAM9RL-EK Evaluation Kit. - -endif -  # ---------------------------------------------------------- -if ARCH_AT91SAM9G20 - -comment "AT91SAM9G20 Board Type" - -config MACH_AT91SAM9G20EK -	bool "Atmel AT91SAM9G20-EK Evaluation Kit" -	select HAVE_AT91_DATAFLASH_CARD -	help -	  Select this if you are using Atmel's AT91SAM9G20-EK Evaluation Kit -	  that embeds only one SD/MMC slot. - -config MACH_AT91SAM9G20EK_2MMC -	depends on MACH_AT91SAM9G20EK -	bool "Atmel AT91SAM9G20-EK Evaluation Kit with 2 SD/MMC Slots" -	help -	  Select this if you are using an Atmel AT91SAM9G20-EK Evaluation Kit -	  with 2 SD/MMC Slots. This is the case for AT91SAM9G20-EK rev. C and -	  onwards. -	  <http://www.atmel.com/tools/SAM9G20-EK.aspx> - -config MACH_CPU9G20 -	bool "Eukrea CPU9G20 board" -	help -	  Select this if you are using a Eukrea Electromatique's -	  CPU9G20 Board <http://www.eukrea.com/> - -config MACH_ACMENETUSFOXG20 -	bool "Acme Systems srl FOX Board G20" -	help -	  Select this if you are using Acme Systems -	  FOX Board G20 <http://www.acmesystems.it> - -config MACH_PORTUXG20 -	bool "taskit PortuxG20" -	help -	  Select this if you are using taskit's PortuxG20. -	  <http://www.taskit.de/en/> - -config MACH_STAMP9G20 -	bool "taskit Stamp9G20 CPU module" -	help -	  Select this if you are using taskit's Stamp9G20 CPU module on its -	  evaluation board. -	  <http://www.taskit.de/en/> - -config MACH_PCONTROL_G20 -	bool "PControl G20 CPU module" -	help -	  Select this if you are using taskit's Stamp9G20 CPU module on this -	  carrier board, beeing the decentralized unit of a building automation -	  system; featuring nvram, eth-switch, iso-rs485, display, io - -config MACH_GSIA18S -	bool "GS_IA18_S board" -	help -	  This enables support for the GS_IA18_S board -	  produced by GeoSIG Ltd company. This is an internet accelerograph. -	  <http://www.geosig.com> - -config MACH_USB_A9G20 -	bool "CALAO USB-A9G20" -	depends on ARCH_AT91SAM9G20 -	help -	  Select this if you are using a Calao Systems USB-A9G20. -	  <http://www.calao-systems.com> - -endif - -if (ARCH_AT91SAM9260 || ARCH_AT91SAM9G20) -comment "AT91SAM9260/AT91SAM9G20 boards" - -config MACH_SNAPPER_9260 -        bool "Bluewater Systems Snapper 9260/9G20 module" -        help -          Select this if you are using the Bluewater Systems Snapper 9260 or -          Snapper 9G20 modules. -          <http://www.bluewatersys.com/> -endif - -# ---------------------------------------------------------- - -if ARCH_AT91SAM9G45 - -comment "AT91SAM9G45 Board Type" - -config MACH_AT91SAM9M10G45EK -	bool "Atmel AT91SAM9M10G45-EK Evaluation Kits" -	help -	  Select this if you are using Atmel's AT91SAM9M10G45-EK Evaluation Kit. -	  Those boards can be populated with any SoC of AT91SAM9G45 or AT91SAM9M10 -	  families: AT91SAM9G45, AT91SAM9G46, AT91SAM9M10 and AT91SAM9M11. -	  <http://www.atmel.com/tools/SAM9M10-G45-EK.aspx> - -endif - -# ---------------------------------------------------------- - -if ARCH_AT91X40 - -comment "AT91X40 Board Type" - -config MACH_AT91EB01 -	bool "Atmel AT91EB01 Evaluation Kit" -	help -	  Select this if you are using Atmel's AT91EB01 Evaluation Kit. -	  It is also a popular target for simulators such as GDB's -	  ARM simulator (commonly known as the ARMulator) and the -	  Skyeye simulator. - -endif - -# ---------------------------------------------------------- +source arch/arm/mach-at91/Kconfig.non_dt +endif # SOC_SAM_V4_V5  comment "Generic Board Type" @@ -492,7 +151,7 @@ config MACH_AT91RM9200_DT  	  Select this if you want to experiment device-tree with  	  an Atmel RM9200 Evaluation Kit. -config MACH_AT91SAM_DT +config MACH_AT91SAM9_DT  	bool "Atmel AT91SAM Evaluation Kits with device-tree support"  	depends on SOC_AT91SAM9  	select USE_OF @@ -500,15 +159,13 @@ config MACH_AT91SAM_DT  	  Select this if you want to experiment device-tree with  	  an Atmel Evaluation Kit. -# ---------------------------------------------------------- - -comment "AT91 Board Options" - -config MTD_AT91_DATAFLASH_CARD -	bool "Enable DataFlash Card support" -	depends on HAVE_AT91_DATAFLASH_CARD +config MACH_SAMA5_DT +	bool "Atmel SAMA5 Evaluation Kits with device-tree support" +	depends on SOC_SAMA5 +	select USE_OF  	help -	  Enable support for the DataFlash card. +	  Select this if you want to experiment device-tree with +	  an Atmel Evaluation Kit.  # ---------------------------------------------------------- diff --git a/arch/arm/mach-at91/Kconfig.non_dt b/arch/arm/mach-at91/Kconfig.non_dt new file mode 100644 index 00000000000..6c24985515a --- /dev/null +++ b/arch/arm/mach-at91/Kconfig.non_dt @@ -0,0 +1,399 @@ +menu "Atmel Non-DT world" + +config HAVE_AT91_DATAFLASH_CARD +	bool + +choice +	prompt "Atmel AT91 Processor Devices for non DT boards" + +config ARCH_AT91_NONE +	bool "None" + +config ARCH_AT91RM9200 +	bool "AT91RM9200" +	select SOC_AT91RM9200 + +config ARCH_AT91SAM9260 +	bool "AT91SAM9260 or AT91SAM9XE" +	select SOC_AT91SAM9260 + +config ARCH_AT91SAM9261 +	bool "AT91SAM9261" +	select SOC_AT91SAM9261 + +config ARCH_AT91SAM9G10 +	bool "AT91SAM9G10" +	select SOC_AT91SAM9261 + +config ARCH_AT91SAM9263 +	bool "AT91SAM9263" +	select SOC_AT91SAM9263 + +config ARCH_AT91SAM9RL +	bool "AT91SAM9RL" +	select SOC_AT91SAM9RL + +config ARCH_AT91SAM9G20 +	bool "AT91SAM9G20" +	select SOC_AT91SAM9260 + +config ARCH_AT91SAM9G45 +	bool "AT91SAM9G45" +	select SOC_AT91SAM9G45 + +config ARCH_AT91X40 +	bool "AT91x40" +	depends on !MMU +	select ARCH_USES_GETTIMEOFFSET +	select MULTI_IRQ_HANDLER +	select SPARSE_IRQ + +endchoice + +# ---------------------------------------------------------- + +if ARCH_AT91RM9200 + +comment "AT91RM9200 Board Type" + +config MACH_ONEARM +	bool "Ajeco 1ARM Single Board Computer" +	help +	  Select this if you are using Ajeco's 1ARM Single Board Computer. +	  <http://www.ajeco.fi/> + +config ARCH_AT91RM9200DK +	bool "Atmel AT91RM9200-DK Development board" +	select HAVE_AT91_DATAFLASH_CARD +	help +	  Select this if you are using Atmel's AT91RM9200-DK Development board. +	  (Discontinued) + +config MACH_AT91RM9200EK +	bool "Atmel AT91RM9200-EK Evaluation Kit" +	select HAVE_AT91_DATAFLASH_CARD +	help +	  Select this if you are using Atmel's AT91RM9200-EK Evaluation Kit. +	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3507> + +config MACH_CSB337 +	bool "Cogent CSB337" +	help +	  Select this if you are using Cogent's CSB337 board. +	  <http://www.cogcomp.com/csb_csb337.htm> + +config MACH_CSB637 +	bool "Cogent CSB637" +	help +	  Select this if you are using Cogent's CSB637 board. +	  <http://www.cogcomp.com/csb_csb637.htm> + +config MACH_CARMEVA +	bool "Conitec ARM&EVA" +	help +	  Select this if you are using Conitec's AT91RM9200-MCU-Module. +	  <http://www.conitec.net/english/linuxboard.php> + +config MACH_ATEB9200 +	bool "Embest ATEB9200" +	help +	  Select this if you are using Embest's ATEB9200 board. +	  <http://www.embedinfo.com/english/product/ATEB9200.asp> + +config MACH_KB9200 +	bool "KwikByte KB920x" +	help +	  Select this if you are using KwikByte's KB920x board. +	  <http://www.kwikbyte.com/KB9202.html> + +config MACH_PICOTUX2XX +	bool "picotux 200" +	help +	  Select this if you are using a picotux 200. +	  <http://www.picotux.com/> + +config MACH_KAFA +	bool "Sperry-Sun KAFA board" +	help +	  Select this if you are using Sperry-Sun's KAFA board. + +config MACH_ECBAT91 +	bool "emQbit ECB_AT91 SBC" +	select HAVE_AT91_DATAFLASH_CARD +	help +	  Select this if you are using emQbit's ECB_AT91 board. +	  <http://wiki.emqbit.com/free-ecb-at91> + +config MACH_YL9200 +	bool "ucDragon YL-9200" +	help +	  Select this if you are using the ucDragon YL-9200 board. + +config MACH_CPUAT91 +	bool "Eukrea CPUAT91" +	help +	  Select this if you are using the Eukrea Electromatique's +	  CPUAT91 board <http://www.eukrea.com/>. + +config MACH_ECO920 +	bool "eco920" +	help +	  Select this if you are using the eco920 board + +config MACH_RSI_EWS +	bool "RSI Embedded Webserver" +	depends on ARCH_AT91RM9200 +	help +	  Select this if you are using RSIs EWS board. +endif + +# ---------------------------------------------------------- + +if ARCH_AT91SAM9260 + +comment "AT91SAM9260 Variants" + +comment "AT91SAM9260 / AT91SAM9XE Board Type" + +config MACH_AT91SAM9260EK +	bool "Atmel AT91SAM9260-EK / AT91SAM9XE Evaluation Kit" +	select HAVE_AT91_DATAFLASH_CARD +	help +	  Select this if you are using Atmel's AT91SAM9260-EK or AT91SAM9XE Evaluation Kit +	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3933> + +config MACH_CAM60 +	bool "KwikByte KB9260 (CAM60) board" +	help +	  Select this if you are using KwikByte's KB9260 (CAM60) board based on the Atmel AT91SAM9260. +	  <http://www.kwikbyte.com/KB9260.html> + +config MACH_SAM9_L9260 +	bool "Olimex SAM9-L9260 board" +	select HAVE_AT91_DATAFLASH_CARD +	help +	  Select this if you are using Olimex's SAM9-L9260 board based on the Atmel AT91SAM9260. +	  <http://www.olimex.com/dev/sam9-L9260.html> + +config MACH_AFEB9260 +	bool "Custom afeb9260 board v1" +	help +	  Select this if you are using custom afeb9260 board based on +	  open hardware design. Select this for revision 1 of the board. +	  <svn://194.85.238.22/home/users/george/svn/arm9eb> +	  <http://groups.google.com/group/arm9fpga-evolution-board> + +config MACH_USB_A9260 +	bool "CALAO USB-A9260" +	help +	  Select this if you are using a Calao Systems USB-A9260. +	  <http://www.calao-systems.com> + +config MACH_QIL_A9260 +	bool "CALAO QIL-A9260 board" +	help +	  Select this if you are using a Calao Systems QIL-A9260 Board. +	  <http://www.calao-systems.com> + +config MACH_CPU9260 +	bool "Eukrea CPU9260 board" +	help +	  Select this if you are using a Eukrea Electromatique's +	  CPU9260 Board <http://www.eukrea.com/> + +config MACH_FLEXIBITY +	bool "Flexibity Connect board" +	help +	  Select this if you are using Flexibity Connect board +	  <http://www.flexibity.com> + +endif + +# ---------------------------------------------------------- + +if ARCH_AT91SAM9261 + +comment "AT91SAM9261 Board Type" + +config MACH_AT91SAM9261EK +	bool "Atmel AT91SAM9261-EK Evaluation Kit" +	select HAVE_AT91_DATAFLASH_CARD +	help +	  Select this if you are using Atmel's AT91SAM9261-EK Evaluation Kit. +	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3820> + +endif + +# ---------------------------------------------------------- + +if ARCH_AT91SAM9G10 + +comment "AT91SAM9G10 Board Type" + +config MACH_AT91SAM9G10EK +	bool "Atmel AT91SAM9G10-EK Evaluation Kit" +	select HAVE_AT91_DATAFLASH_CARD +	help +	  Select this if you are using Atmel's AT91SAM9G10-EK Evaluation Kit. +	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4588> + +endif + +# ---------------------------------------------------------- + +if ARCH_AT91SAM9263 + +comment "AT91SAM9263 Board Type" + +config MACH_AT91SAM9263EK +	bool "Atmel AT91SAM9263-EK Evaluation Kit" +	select HAVE_AT91_DATAFLASH_CARD +	help +	  Select this if you are using Atmel's AT91SAM9263-EK Evaluation Kit. +	  <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4057> + +config MACH_USB_A9263 +	bool "CALAO USB-A9263" +	help +	  Select this if you are using a Calao Systems USB-A9263. +	  <http://www.calao-systems.com> + +endif + +# ---------------------------------------------------------- + +if ARCH_AT91SAM9RL + +comment "AT91SAM9RL Board Type" + +config MACH_AT91SAM9RLEK +	bool "Atmel AT91SAM9RL-EK Evaluation Kit" +	help +	  Select this if you are using Atmel's AT91SAM9RL-EK Evaluation Kit. + +endif + +# ---------------------------------------------------------- + +if ARCH_AT91SAM9G20 + +comment "AT91SAM9G20 Board Type" + +config MACH_AT91SAM9G20EK +	bool "Atmel AT91SAM9G20-EK Evaluation Kit" +	select HAVE_AT91_DATAFLASH_CARD +	help +	  Select this if you are using Atmel's AT91SAM9G20-EK Evaluation Kit +	  that embeds only one SD/MMC slot. + +config MACH_AT91SAM9G20EK_2MMC +	depends on MACH_AT91SAM9G20EK +	bool "Atmel AT91SAM9G20-EK Evaluation Kit with 2 SD/MMC Slots" +	help +	  Select this if you are using an Atmel AT91SAM9G20-EK Evaluation Kit +	  with 2 SD/MMC Slots. This is the case for AT91SAM9G20-EK rev. C and +	  onwards. +	  <http://www.atmel.com/tools/SAM9G20-EK.aspx> + +config MACH_CPU9G20 +	bool "Eukrea CPU9G20 board" +	help +	  Select this if you are using a Eukrea Electromatique's +	  CPU9G20 Board <http://www.eukrea.com/> + +config MACH_ACMENETUSFOXG20 +	bool "Acme Systems srl FOX Board G20" +	help +	  Select this if you are using Acme Systems +	  FOX Board G20 <http://www.acmesystems.it> + +config MACH_PORTUXG20 +	bool "taskit PortuxG20" +	help +	  Select this if you are using taskit's PortuxG20. +	  <http://www.taskit.de/en/> + +config MACH_STAMP9G20 +	bool "taskit Stamp9G20 CPU module" +	help +	  Select this if you are using taskit's Stamp9G20 CPU module on its +	  evaluation board. +	  <http://www.taskit.de/en/> + +config MACH_PCONTROL_G20 +	bool "PControl G20 CPU module" +	help +	  Select this if you are using taskit's Stamp9G20 CPU module on this +	  carrier board, beeing the decentralized unit of a building automation +	  system; featuring nvram, eth-switch, iso-rs485, display, io + +config MACH_GSIA18S +	bool "GS_IA18_S board" +	help +	  This enables support for the GS_IA18_S board +	  produced by GeoSIG Ltd company. This is an internet accelerograph. +	  <http://www.geosig.com> + +config MACH_USB_A9G20 +	bool "CALAO USB-A9G20" +	depends on ARCH_AT91SAM9G20 +	help +	  Select this if you are using a Calao Systems USB-A9G20. +	  <http://www.calao-systems.com> + +endif + +if (ARCH_AT91SAM9260 || ARCH_AT91SAM9G20) +comment "AT91SAM9260/AT91SAM9G20 boards" + +config MACH_SNAPPER_9260 +        bool "Bluewater Systems Snapper 9260/9G20 module" +        help +          Select this if you are using the Bluewater Systems Snapper 9260 or +          Snapper 9G20 modules. +          <http://www.bluewatersys.com/> +endif + +# ---------------------------------------------------------- + +if ARCH_AT91SAM9G45 + +comment "AT91SAM9G45 Board Type" + +config MACH_AT91SAM9M10G45EK +	bool "Atmel AT91SAM9M10G45-EK Evaluation Kits" +	help +	  Select this if you are using Atmel's AT91SAM9M10G45-EK Evaluation Kit. +	  Those boards can be populated with any SoC of AT91SAM9G45 or AT91SAM9M10 +	  families: AT91SAM9G45, AT91SAM9G46, AT91SAM9M10 and AT91SAM9M11. +	  <http://www.atmel.com/tools/SAM9M10-G45-EK.aspx> + +endif + +# ---------------------------------------------------------- + +if ARCH_AT91X40 + +comment "AT91X40 Board Type" + +config MACH_AT91EB01 +	bool "Atmel AT91EB01 Evaluation Kit" +	help +	  Select this if you are using Atmel's AT91EB01 Evaluation Kit. +	  It is also a popular target for simulators such as GDB's +	  ARM simulator (commonly known as the ARMulator) and the +	  Skyeye simulator. + +endif + +# ---------------------------------------------------------- + +comment "AT91 Board Options" + +config MTD_AT91_DATAFLASH_CARD +	bool "Enable DataFlash Card support" +	depends on HAVE_AT91_DATAFLASH_CARD +	help +	  Enable support for the DataFlash card. + +endmenu diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile index 39218ca6d8e..788562dccb4 100644 --- a/arch/arm/mach-at91/Makefile +++ b/arch/arm/mach-at91/Makefile @@ -10,7 +10,8 @@ obj-		:=  obj-$(CONFIG_AT91_PMC_UNIT)	+= clock.o  obj-$(CONFIG_AT91_SAM9_ALT_RESET) += at91sam9_alt_reset.o  obj-$(CONFIG_AT91_SAM9G45_RESET) += at91sam9g45_reset.o -obj-$(CONFIG_SOC_AT91SAM9)	+= at91sam926x_time.o sam9_smc.o +obj-$(CONFIG_AT91_SAM9_TIME)	+= at91sam926x_time.o +obj-$(CONFIG_SOC_AT91SAM9)	+= sam9_smc.o  # CPU-specific support  obj-$(CONFIG_SOC_AT91RM9200)	+= at91rm9200.o at91rm9200_time.o @@ -21,6 +22,7 @@ obj-$(CONFIG_SOC_AT91SAM9G45)	+= at91sam9g45.o  obj-$(CONFIG_SOC_AT91SAM9N12)	+= at91sam9n12.o  obj-$(CONFIG_SOC_AT91SAM9X5)	+= at91sam9x5.o  obj-$(CONFIG_SOC_AT91SAM9RL)	+= at91sam9rl.o +obj-$(CONFIG_SOC_SAMA5D3)	+= sama5d3.o  obj-$(CONFIG_ARCH_AT91RM9200)	+= at91rm9200_devices.o  obj-$(CONFIG_ARCH_AT91SAM9260)	+= at91sam9260_devices.o @@ -87,8 +89,11 @@ obj-$(CONFIG_MACH_SNAPPER_9260)	+= board-snapper9260.o  obj-$(CONFIG_MACH_AT91SAM9M10G45EK) += board-sam9m10g45ek.o  # AT91SAM board with device-tree -obj-$(CONFIG_MACH_AT91RM9200_DT) += board-rm9200-dt.o -obj-$(CONFIG_MACH_AT91SAM_DT) += board-dt.o +obj-$(CONFIG_MACH_AT91RM9200_DT) += board-dt-rm9200.o +obj-$(CONFIG_MACH_AT91SAM9_DT) += board-dt-sam9.o + +# SAMA5 board with device-tree +obj-$(CONFIG_MACH_SAMA5_DT) += board-dt-sama5.o  # AT91X40 board-specific support  obj-$(CONFIG_MACH_AT91EB01)	+= board-eb01.o diff --git a/arch/arm/mach-at91/at91_rstc.h b/arch/arm/mach-at91/at91_rstc.h index 875fa336800..a600e699292 100644 --- a/arch/arm/mach-at91/at91_rstc.h +++ b/arch/arm/mach-at91/at91_rstc.h @@ -23,7 +23,7 @@ extern void __iomem *at91_rstc_base;  	__raw_readl(at91_rstc_base + field)  #define at91_rstc_write(field, value) \ -	__raw_writel(value, at91_rstc_base + field); +	__raw_writel(value, at91_rstc_base + field)  #else  .extern at91_rstc_base  #endif diff --git a/arch/arm/mach-at91/at91_shdwc.h b/arch/arm/mach-at91/at91_shdwc.h index 60478ea8bd4..9e29f31ec9a 100644 --- a/arch/arm/mach-at91/at91_shdwc.h +++ b/arch/arm/mach-at91/at91_shdwc.h @@ -23,7 +23,7 @@ extern void __iomem *at91_shdwc_base;  	__raw_readl(at91_shdwc_base + field)  #define at91_shdwc_write(field, value) \ -	__raw_writel(value, at91_shdwc_base + field); +	__raw_writel(value, at91_shdwc_base + field)  #endif  #define AT91_SHDW_CR		0x00			/* Shut Down Control Register */ diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c index 9706c000f29..d193a409bc4 100644 --- a/arch/arm/mach-at91/at91rm9200.c +++ b/arch/arm/mach-at91/at91rm9200.c @@ -212,6 +212,7 @@ static struct clk_lookup periph_clocks_lookups[] = {  	CLKDEV_CON_DEV_ID("t2_clk", "fffa4000.timer", &tc5_clk),  	CLKDEV_CON_DEV_ID("mci_clk", "fffb4000.mmc", &mmc_clk),  	CLKDEV_CON_DEV_ID("emac_clk", "fffbc000.ethernet", ðer_clk), +	CLKDEV_CON_DEV_ID(NULL, "fffb8000.i2c", &twi_clk),  	CLKDEV_CON_DEV_ID("hclk", "300000.ohci", &ohci_clk),  	CLKDEV_CON_DEV_ID(NULL, "fffff400.gpio", &pioA_clk),  	CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioB_clk), @@ -384,7 +385,7 @@ static unsigned int at91rm9200_default_irq_priority[NR_AIC_IRQS] __initdata = {  	0	/* Advanced Interrupt Controller (IRQ6) */  }; -AT91_SOC_START(rm9200) +AT91_SOC_START(at91rm9200)  	.map_io = at91rm9200_map_io,  	.default_irq_priority = at91rm9200_default_irq_priority,  	.ioremap_registers = at91rm9200_ioremap_registers, diff --git a/arch/arm/mach-at91/at91sam9260.c b/arch/arm/mach-at91/at91sam9260.c index b67cd537411..a8ce24538da 100644 --- a/arch/arm/mach-at91/at91sam9260.c +++ b/arch/arm/mach-at91/at91sam9260.c @@ -232,6 +232,8 @@ static struct clk_lookup periph_clocks_lookups[] = {  	CLKDEV_CON_DEV_ID("t2_clk", "fffdc000.timer", &tc5_clk),  	CLKDEV_CON_DEV_ID("hclk", "500000.ohci", &ohci_clk),  	CLKDEV_CON_DEV_ID("mci_clk", "fffa8000.mmc", &mmc_clk), +	CLKDEV_CON_DEV_ID("spi_clk", "fffc8000.spi", &spi0_clk), +	CLKDEV_CON_DEV_ID("spi_clk", "fffcc000.spi", &spi1_clk),  	/* fake hclk clock */  	CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk),  	CLKDEV_CON_ID("pioA", &pioA_clk), @@ -395,7 +397,7 @@ static unsigned int at91sam9260_default_irq_priority[NR_AIC_IRQS] __initdata = {  	0,	/* Advanced Interrupt Controller */  }; -AT91_SOC_START(sam9260) +AT91_SOC_START(at91sam9260)  	.map_io = at91sam9260_map_io,  	.default_irq_priority = at91sam9260_default_irq_priority,  	.ioremap_registers = at91sam9260_ioremap_registers, diff --git a/arch/arm/mach-at91/at91sam9261.c b/arch/arm/mach-at91/at91sam9261.c index 0204f4cc9eb..25efb5ac30f 100644 --- a/arch/arm/mach-at91/at91sam9261.c +++ b/arch/arm/mach-at91/at91sam9261.c @@ -339,7 +339,7 @@ static unsigned int at91sam9261_default_irq_priority[NR_AIC_IRQS] __initdata = {  	0,	/* Advanced Interrupt Controller */  }; -AT91_SOC_START(sam9261) +AT91_SOC_START(at91sam9261)  	.map_io = at91sam9261_map_io,  	.default_irq_priority = at91sam9261_default_irq_priority,  	.ioremap_registers = at91sam9261_ioremap_registers, diff --git a/arch/arm/mach-at91/at91sam9263.c b/arch/arm/mach-at91/at91sam9263.c index 2282fd7ad3e..f44ffd2105a 100644 --- a/arch/arm/mach-at91/at91sam9263.c +++ b/arch/arm/mach-at91/at91sam9263.c @@ -375,7 +375,7 @@ static unsigned int at91sam9263_default_irq_priority[NR_AIC_IRQS] __initdata = {  	0,	/* Advanced Interrupt Controller (IRQ1) */  }; -AT91_SOC_START(sam9263) +AT91_SOC_START(at91sam9263)  	.map_io = at91sam9263_map_io,  	.default_irq_priority = at91sam9263_default_irq_priority,  	.ioremap_registers = at91sam9263_ioremap_registers, diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c index c68960d8224..8b7fce06765 100644 --- a/arch/arm/mach-at91/at91sam9g45.c +++ b/arch/arm/mach-at91/at91sam9g45.c @@ -264,6 +264,8 @@ static struct clk_lookup periph_clocks_lookups[] = {  	CLKDEV_CON_DEV_ID("mci_clk", "fffd0000.mmc", &mmc1_clk),  	CLKDEV_CON_DEV_ID(NULL, "fff84000.i2c", &twi0_clk),  	CLKDEV_CON_DEV_ID(NULL, "fff88000.i2c", &twi1_clk), +	CLKDEV_CON_DEV_ID("spi_clk", "fffa4000.spi", &spi0_clk), +	CLKDEV_CON_DEV_ID("spi_clk", "fffa8000.spi", &spi1_clk),  	/* fake hclk clock */  	CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &uhphs_clk),  	CLKDEV_CON_DEV_ID(NULL, "fffff200.gpio", &pioA_clk), @@ -420,7 +422,7 @@ static unsigned int at91sam9g45_default_irq_priority[NR_AIC_IRQS] __initdata = {  	0,	/* Advanced Interrupt Controller (IRQ0) */  }; -AT91_SOC_START(sam9g45) +AT91_SOC_START(at91sam9g45)  	.map_io = at91sam9g45_map_io,  	.default_irq_priority = at91sam9g45_default_irq_priority,  	.ioremap_registers = at91sam9g45_ioremap_registers, diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index fe626d431b6..acb703e1333 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c @@ -18,7 +18,7 @@  #include <linux/platform_device.h>  #include <linux/i2c-gpio.h>  #include <linux/atmel-mci.h> -#include <linux/platform_data/atmel-aes.h> +#include <linux/platform_data/crypto-atmel.h>  #include <linux/platform_data/at91_adc.h> @@ -1904,7 +1904,8 @@ static void __init at91_add_device_tdes(void) {}   * -------------------------------------------------------------------- */  #if defined(CONFIG_CRYPTO_DEV_ATMEL_AES) || defined(CONFIG_CRYPTO_DEV_ATMEL_AES_MODULE) -static struct aes_platform_data aes_data; +static struct crypto_platform_data aes_data; +static struct crypto_dma_data alt_atslave;  static u64 aes_dmamask = DMA_BIT_MASK(32);  static struct resource aes_resources[] = { @@ -1935,23 +1936,20 @@ static struct platform_device at91sam9g45_aes_device = {  static void __init at91_add_device_aes(void)  {  	struct at_dma_slave	*atslave; -	struct aes_dma_data	*alt_atslave; - -	alt_atslave = kzalloc(sizeof(struct aes_dma_data), GFP_KERNEL);  	/* DMA TX slave channel configuration */ -	atslave = &alt_atslave->txdata; +	atslave = &alt_atslave.txdata;  	atslave->dma_dev = &at_hdmac_device.dev;  	atslave->cfg = ATC_FIFOCFG_ENOUGHSPACE	| ATC_SRC_H2SEL_HW |  						ATC_SRC_PER(AT_DMA_ID_AES_RX);  	/* DMA RX slave channel configuration */ -	atslave = &alt_atslave->rxdata; +	atslave = &alt_atslave.rxdata;  	atslave->dma_dev = &at_hdmac_device.dev;  	atslave->cfg = ATC_FIFOCFG_ENOUGHSPACE	| ATC_DST_H2SEL_HW |  						ATC_DST_PER(AT_DMA_ID_AES_TX); -	aes_data.dma_slave = alt_atslave; +	aes_data.dma_slave = &alt_atslave;  	platform_device_register(&at91sam9g45_aes_device);  }  #else diff --git a/arch/arm/mach-at91/at91sam9n12.c b/arch/arm/mach-at91/at91sam9n12.c index 5dfc8fd8710..13cdbcd48f5 100644 --- a/arch/arm/mach-at91/at91sam9n12.c +++ b/arch/arm/mach-at91/at91sam9n12.c @@ -172,6 +172,8 @@ static struct clk_lookup periph_clocks_lookups[] = {  	CLKDEV_CON_DEV_ID("dma_clk", "ffffec00.dma-controller", &dma_clk),  	CLKDEV_CON_DEV_ID(NULL, "f8010000.i2c", &twi0_clk),  	CLKDEV_CON_DEV_ID(NULL, "f8014000.i2c", &twi1_clk), +	CLKDEV_CON_DEV_ID("spi_clk", "f0000000.spi", &spi0_clk), +	CLKDEV_CON_DEV_ID("spi_clk", "f0004000.spi", &spi1_clk),  	CLKDEV_CON_DEV_ID(NULL, "fffff400.gpio", &pioAB_clk),  	CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioAB_clk),  	CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioCD_clk), @@ -226,7 +228,7 @@ void __init at91sam9n12_initialize(void)  	at91_extern_irq = (1 << AT91SAM9N12_ID_IRQ0);  } -AT91_SOC_START(sam9n12) +AT91_SOC_START(at91sam9n12)  	.map_io = at91sam9n12_map_io,  	.register_clocks = at91sam9n12_register_clocks,  	.init = at91sam9n12_initialize, diff --git a/arch/arm/mach-at91/at91sam9rl.c b/arch/arm/mach-at91/at91sam9rl.c index 3de3e04d0f8..f77fae5591b 100644 --- a/arch/arm/mach-at91/at91sam9rl.c +++ b/arch/arm/mach-at91/at91sam9rl.c @@ -341,7 +341,7 @@ static unsigned int at91sam9rl_default_irq_priority[NR_AIC_IRQS] __initdata = {  	0,	/* Advanced Interrupt Controller */  }; -AT91_SOC_START(sam9rl) +AT91_SOC_START(at91sam9rl)  	.map_io = at91sam9rl_map_io,  	.default_irq_priority = at91sam9rl_default_irq_priority,  	.ioremap_registers = at91sam9rl_ioremap_registers, diff --git a/arch/arm/mach-at91/at91sam9x5.c b/arch/arm/mach-at91/at91sam9x5.c index 44a9a62dcc1..e631fec040c 100644 --- a/arch/arm/mach-at91/at91sam9x5.c +++ b/arch/arm/mach-at91/at91sam9x5.c @@ -237,6 +237,8 @@ static struct clk_lookup periph_clocks_lookups[] = {  	CLKDEV_CON_DEV_ID(NULL, "f8010000.i2c", &twi0_clk),  	CLKDEV_CON_DEV_ID(NULL, "f8014000.i2c", &twi1_clk),  	CLKDEV_CON_DEV_ID(NULL, "f8018000.i2c", &twi2_clk), +	CLKDEV_CON_DEV_ID("spi_clk", "f0000000.spi", &spi0_clk), +	CLKDEV_CON_DEV_ID("spi_clk", "f0004000.spi", &spi1_clk),  	CLKDEV_CON_DEV_ID(NULL, "fffff400.gpio", &pioAB_clk),  	CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioAB_clk),  	CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioCD_clk), @@ -320,7 +322,7 @@ static void __init at91sam9x5_map_io(void)   *  Interrupt initialization   * -------------------------------------------------------------------- */ -AT91_SOC_START(sam9x5) +AT91_SOC_START(at91sam9x5)  	.map_io = at91sam9x5_map_io,  	.register_clocks = at91sam9x5_register_clocks,  AT91_SOC_END diff --git a/arch/arm/mach-at91/at91x40_time.c b/arch/arm/mach-at91/at91x40_time.c index 0c07a4459cb..2919eba41ff 100644 --- a/arch/arm/mach-at91/at91x40_time.c +++ b/arch/arm/mach-at91/at91x40_time.c @@ -33,7 +33,7 @@  	__raw_readl(AT91_IO_P2V(AT91_TC) + field)  #define at91_tc_write(field, value) \ -	__raw_writel(value, AT91_IO_P2V(AT91_TC) + field); +	__raw_writel(value, AT91_IO_P2V(AT91_TC) + field)  /*   *	3 counter/timer units present. diff --git a/arch/arm/mach-at91/board-rm9200-dt.c b/arch/arm/mach-at91/board-dt-rm9200.c index 3fcb6623a33..3fcb6623a33 100644 --- a/arch/arm/mach-at91/board-rm9200-dt.c +++ b/arch/arm/mach-at91/board-dt-rm9200.c diff --git a/arch/arm/mach-at91/board-dt.c b/arch/arm/mach-at91/board-dt-sam9.c index 8db30132abe..8db30132abe 100644 --- a/arch/arm/mach-at91/board-dt.c +++ b/arch/arm/mach-at91/board-dt-sam9.c diff --git a/arch/arm/mach-at91/board-dt-sama5.c b/arch/arm/mach-at91/board-dt-sama5.c new file mode 100644 index 00000000000..705305e62bb --- /dev/null +++ b/arch/arm/mach-at91/board-dt-sama5.c @@ -0,0 +1,86 @@ +/* + *  Setup code for SAMA5 Evaluation Kits with Device Tree support + * + *  Copyright (C) 2013 Atmel, + *                2013 Ludovic Desroches <ludovic.desroches@atmel.com> + * + * Licensed under GPLv2 or later. + */ + +#include <linux/types.h> +#include <linux/init.h> +#include <linux/module.h> +#include <linux/gpio.h> +#include <linux/micrel_phy.h> +#include <linux/of.h> +#include <linux/of_irq.h> +#include <linux/of_platform.h> +#include <linux/phy.h> + +#include <asm/setup.h> +#include <asm/irq.h> +#include <asm/mach/arch.h> +#include <asm/mach/map.h> +#include <asm/mach/irq.h> + +#include "at91_aic.h" +#include "generic.h" + + +static const struct of_device_id irq_of_match[] __initconst = { + +	{ .compatible = "atmel,sama5d3-aic", .data = at91_aic5_of_init }, +	{ /*sentinel*/ } +}; + +static void __init at91_dt_init_irq(void) +{ +	of_irq_init(irq_of_match); +} + +static int ksz9021rn_phy_fixup(struct phy_device *phy) +{ +	int value; + +#define GMII_RCCPSR	260 +#define GMII_RRDPSR	261 +#define GMII_ERCR	11 +#define GMII_ERDWR	12 + +	/* Set delay values */ +	value = GMII_RCCPSR | 0x8000; +	phy_write(phy, GMII_ERCR, value); +	value = 0xF2F4; +	phy_write(phy, GMII_ERDWR, value); +	value = GMII_RRDPSR | 0x8000; +	phy_write(phy, GMII_ERCR, value); +	value = 0x2222; +	phy_write(phy, GMII_ERDWR, value); + +	return 0; +} + +static void __init sama5_dt_device_init(void) +{ +	if (of_machine_is_compatible("atmel,sama5d3xcm")) +		phy_register_fixup_for_uid(PHY_ID_KSZ9021, MICREL_PHY_ID_MASK, +			ksz9021rn_phy_fixup); + +	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); +} + +static const char *sama5_dt_board_compat[] __initdata = { +	"atmel,sama5", +	NULL +}; + +DT_MACHINE_START(sama5_dt, "Atmel SAMA5 (Device Tree)") +	/* Maintainer: Atmel */ +	.init_time	= at91sam926x_pit_init, +	.map_io		= at91_map_io, +	.handle_irq	= at91_aic5_handle_irq, +	.init_early	= at91_dt_initialize, +	.init_irq	= at91_dt_init_irq, +	.init_machine	= sama5_dt_device_init, +	.dt_compat	= sama5_dt_board_compat, +MACHINE_END diff --git a/arch/arm/mach-at91/clock.c b/arch/arm/mach-at91/clock.c index 33361505c0c..da841885d01 100644 --- a/arch/arm/mach-at91/clock.c +++ b/arch/arm/mach-at91/clock.c @@ -54,7 +54,10 @@ EXPORT_SYMBOL_GPL(at91_pmc_base);   */  #define cpu_has_utmi()		(  cpu_is_at91sam9rl() \  				|| cpu_is_at91sam9g45() \ -				|| cpu_is_at91sam9x5()) +				|| cpu_is_at91sam9x5() \ +				|| cpu_is_sama5d3()) + +#define cpu_has_1056M_plla()	(cpu_is_sama5d3())  #define cpu_has_800M_plla()	(  cpu_is_at91sam9g20() \  				|| cpu_is_at91sam9g45() \ @@ -75,7 +78,8 @@ EXPORT_SYMBOL_GPL(at91_pmc_base);  				|| cpu_is_at91sam9n12()))  #define cpu_has_upll()		(cpu_is_at91sam9g45() \ -				|| cpu_is_at91sam9x5()) +				|| cpu_is_at91sam9x5() \ +				|| cpu_is_sama5d3())  /* USB host HS & FS */  #define cpu_has_uhp()		(!cpu_is_at91sam9rl()) @@ -83,18 +87,22 @@ EXPORT_SYMBOL_GPL(at91_pmc_base);  /* USB device FS only */  #define cpu_has_udpfs()		(!(cpu_is_at91sam9rl() \  				|| cpu_is_at91sam9g45() \ -				|| cpu_is_at91sam9x5())) +				|| cpu_is_at91sam9x5() \ +				|| cpu_is_sama5d3()))  #define cpu_has_plladiv2()	(cpu_is_at91sam9g45() \  				|| cpu_is_at91sam9x5() \ -				|| cpu_is_at91sam9n12()) +				|| cpu_is_at91sam9n12() \ +				|| cpu_is_sama5d3())  #define cpu_has_mdiv3()		(cpu_is_at91sam9g45() \  				|| cpu_is_at91sam9x5() \ -				|| cpu_is_at91sam9n12()) +				|| cpu_is_at91sam9n12() \ +				|| cpu_is_sama5d3())  #define cpu_has_alt_prescaler()	(cpu_is_at91sam9x5() \ -				|| cpu_is_at91sam9n12()) +				|| cpu_is_at91sam9n12() \ +				|| cpu_is_sama5d3())  static LIST_HEAD(clocks);  static DEFINE_SPINLOCK(clk_lock); @@ -210,10 +218,26 @@ struct clk mck = {  static void pmc_periph_mode(struct clk *clk, int is_on)  { -	if (is_on) -		at91_pmc_write(AT91_PMC_PCER, clk->pmc_mask); -	else -		at91_pmc_write(AT91_PMC_PCDR, clk->pmc_mask); +	u32 regval = 0; + +	/* +	 * With sama5d3 devices, we are managing clock division so we have to +	 * use the Peripheral Control Register introduced from at91sam9x5 +	 * devices. +	 */ +	if (cpu_is_sama5d3()) { +		regval |= AT91_PMC_PCR_CMD; /* write command */ +		regval |= clk->pid & AT91_PMC_PCR_PID; /* peripheral selection */ +		regval |= AT91_PMC_PCR_DIV(clk->div); +		if (is_on) +			regval |= AT91_PMC_PCR_EN; /* enable clock */ +		at91_pmc_write(AT91_PMC_PCR, regval); +	} else { +		if (is_on) +			at91_pmc_write(AT91_PMC_PCER, clk->pmc_mask); +		else +			at91_pmc_write(AT91_PMC_PCDR, clk->pmc_mask); +	}  }  static struct clk __init *at91_css_to_clk(unsigned long css) @@ -443,14 +467,18 @@ static void __init init_programmable_clock(struct clk *clk)  static int at91_clk_show(struct seq_file *s, void *unused)  { -	u32		scsr, pcsr, uckr = 0, sr; +	u32		scsr, pcsr, pcsr1 = 0, uckr = 0, sr;  	struct clk	*clk;  	scsr = at91_pmc_read(AT91_PMC_SCSR);  	pcsr = at91_pmc_read(AT91_PMC_PCSR); +	if (cpu_is_sama5d3()) +		pcsr1 = at91_pmc_read(AT91_PMC_PCSR1);  	sr = at91_pmc_read(AT91_PMC_SR);  	seq_printf(s, "SCSR = %8x\n", scsr);  	seq_printf(s, "PCSR = %8x\n", pcsr); +	if (cpu_is_sama5d3()) +		seq_printf(s, "PCSR1 = %8x\n", pcsr1);  	seq_printf(s, "MOR  = %8x\n", at91_pmc_read(AT91_CKGR_MOR));  	seq_printf(s, "MCFR = %8x\n", at91_pmc_read(AT91_CKGR_MCFR));  	seq_printf(s, "PLLA = %8x\n", at91_pmc_read(AT91_CKGR_PLLAR)); @@ -470,20 +498,30 @@ static int at91_clk_show(struct seq_file *s, void *unused)  	list_for_each_entry(clk, &clocks, node) {  		char	*state; -		if (clk->mode == pmc_sys_mode) +		if (clk->mode == pmc_sys_mode) {  			state = (scsr & clk->pmc_mask) ? "on" : "off"; -		else if (clk->mode == pmc_periph_mode) -			state = (pcsr & clk->pmc_mask) ? "on" : "off"; -		else if (clk->mode == pmc_uckr_mode) +		} else if (clk->mode == pmc_periph_mode) { +			if (cpu_is_sama5d3()) { +				u32 pmc_mask = 1 << (clk->pid % 32); + +				if (clk->pid > 31) +					state = (pcsr1 & pmc_mask) ? "on" : "off"; +				else +					state = (pcsr & pmc_mask) ? "on" : "off"; +			} else { +				state = (pcsr & clk->pmc_mask) ? "on" : "off"; +			} +		} else if (clk->mode == pmc_uckr_mode) {  			state = (uckr & clk->pmc_mask) ? "on" : "off"; -		else if (clk->pmc_mask) +		} else if (clk->pmc_mask) {  			state = (sr & clk->pmc_mask) ? "on" : "off"; -		else if (clk == &clk32k || clk == &main_clk) +		} else if (clk == &clk32k || clk == &main_clk) {  			state = "on"; -		else +		} else {  			state = ""; +		} -		seq_printf(s, "%-10s users=%2d %-3s %9ld Hz %s\n", +		seq_printf(s, "%-10s users=%2d %-3s %9lu Hz %s\n",  			clk->name, clk->users, state, clk_get_rate(clk),  			clk->parent ? clk->parent->name : "");  	} @@ -530,6 +568,9 @@ int __init clk_register(struct clk *clk)  	if (clk_is_peripheral(clk)) {  		if (!clk->parent)  			clk->parent = &mck; +		if (cpu_is_sama5d3()) +			clk->rate_hz = DIV_ROUND_UP(clk->parent->rate_hz, +						    1 << clk->div);  		clk->mode = pmc_periph_mode;  	}  	else if (clk_is_sys(clk)) { @@ -555,7 +596,11 @@ static u32 __init at91_pll_rate(struct clk *pll, u32 freq, u32 reg)  	unsigned mul, div;  	div = reg & 0xff; -	mul = (reg >> 16) & 0x7ff; +	if (cpu_is_sama5d3()) +		mul = AT91_PMC3_MUL_GET(reg); +	else +		mul = AT91_PMC_MUL_GET(reg); +  	if (div && mul) {  		freq /= div;  		freq *= mul + 1; @@ -706,12 +751,15 @@ static int __init at91_pmc_init(unsigned long main_clock)  	/* report if PLLA is more than mildly overclocked */  	plla.rate_hz = at91_pll_rate(&plla, main_clock, at91_pmc_read(AT91_CKGR_PLLAR)); -	if (cpu_has_300M_plla()) { -		if (plla.rate_hz > 300000000) +	if (cpu_has_1056M_plla()) { +		if (plla.rate_hz > 1056000000)  			pll_overclock = true;  	} else if (cpu_has_800M_plla()) {  		if (plla.rate_hz > 800000000)  			pll_overclock = true; +	} else if (cpu_has_300M_plla()) { +		if (plla.rate_hz > 300000000) +			pll_overclock = true;  	} else if (cpu_has_240M_plla()) {  		if (plla.rate_hz > 240000000)  			pll_overclock = true; @@ -872,6 +920,7 @@ int __init at91_clock_init(unsigned long main_clock)  static int __init at91_clock_reset(void)  {  	unsigned long pcdr = 0; +	unsigned long pcdr1 = 0;  	unsigned long scdr = 0;  	struct clk *clk; @@ -879,8 +928,17 @@ static int __init at91_clock_reset(void)  		if (clk->users > 0)  			continue; -		if (clk->mode == pmc_periph_mode) -			pcdr |= clk->pmc_mask; +		if (clk->mode == pmc_periph_mode) { +			if (cpu_is_sama5d3()) { +				u32 pmc_mask = 1 << (clk->pid % 32); + +				if (clk->pid > 31) +					pcdr1 |= pmc_mask; +				else +					pcdr |= pmc_mask; +			} else +				pcdr |= clk->pmc_mask; +		}  		if (clk->mode == pmc_sys_mode)  			scdr |= clk->pmc_mask; @@ -888,8 +946,9 @@ static int __init at91_clock_reset(void)  		pr_debug("Clocks: disable unused %s\n", clk->name);  	} -	at91_pmc_write(AT91_PMC_PCDR, pcdr);  	at91_pmc_write(AT91_PMC_SCDR, scdr); +	if (cpu_is_sama5d3()) +		at91_pmc_write(AT91_PMC_PCDR1, pcdr1);  	return 0;  } diff --git a/arch/arm/mach-at91/clock.h b/arch/arm/mach-at91/clock.h index c2e63e47dcb..a98a39bbd88 100644 --- a/arch/arm/mach-at91/clock.h +++ b/arch/arm/mach-at91/clock.h @@ -20,7 +20,9 @@ struct clk {  	const char	*name;		/* unique clock name */  	struct clk_lookup cl;  	unsigned long	rate_hz; +	unsigned	div;		/* parent clock divider */  	struct clk	*parent; +	unsigned	pid;		/* peripheral ID */  	u32		pmc_mask;  	void		(*mode)(struct clk *, int);  	unsigned	id:3;		/* PCK0..4, or 32k/main/a/b */ diff --git a/arch/arm/mach-at91/cpuidle.c b/arch/arm/mach-at91/cpuidle.c index 0c6381516a5..48f1228c611 100644 --- a/arch/arm/mach-at91/cpuidle.c +++ b/arch/arm/mach-at91/cpuidle.c @@ -27,8 +27,6 @@  #define AT91_MAX_STATES	2 -static DEFINE_PER_CPU(struct cpuidle_device, at91_cpuidle_device); -  /* Actual code that puts the SoC in different idle states */  static int at91_enter_idle(struct cpuidle_device *dev,  			struct cpuidle_driver *drv, @@ -47,7 +45,6 @@ static int at91_enter_idle(struct cpuidle_device *dev,  static struct cpuidle_driver at91_idle_driver = {  	.name			= "at91_idle",  	.owner			= THIS_MODULE, -	.en_core_tk_irqen	= 1,  	.states[0]		= ARM_CPUIDLE_WFI_STATE,  	.states[1]		= {  		.enter			= at91_enter_idle, @@ -61,20 +58,9 @@ static struct cpuidle_driver at91_idle_driver = {  };  /* Initialize CPU idle by registering the idle states */ -static int at91_init_cpuidle(void) +static int __init at91_init_cpuidle(void)  { -	struct cpuidle_device *device; - -	device = &per_cpu(at91_cpuidle_device, smp_processor_id()); -	device->state_count = AT91_MAX_STATES; - -	cpuidle_register_driver(&at91_idle_driver); - -	if (cpuidle_register_device(device)) { -		printk(KERN_ERR "at91_init_cpuidle: Failed registering\n"); -		return -EIO; -	} -	return 0; +	return cpuidle_register(&at91_idle_driver, NULL);  }  device_initcall(at91_init_cpuidle); diff --git a/arch/arm/mach-at91/gpio.c b/arch/arm/mach-at91/gpio.c index c5d7e1e9d75..a5afcf76550 100644 --- a/arch/arm/mach-at91/gpio.c +++ b/arch/arm/mach-at91/gpio.c @@ -22,10 +22,9 @@  #include <linux/module.h>  #include <linux/io.h>  #include <linux/irqdomain.h> +#include <linux/irqchip/chained_irq.h>  #include <linux/of_address.h> -#include <asm/mach/irq.h> -  #include <mach/hardware.h>  #include <mach/at91_pio.h> diff --git a/arch/arm/mach-at91/include/mach/at91_dbgu.h b/arch/arm/mach-at91/include/mach/at91_dbgu.h index 2aa0c5e1349..3b5948566e5 100644 --- a/arch/arm/mach-at91/include/mach/at91_dbgu.h +++ b/arch/arm/mach-at91/include/mach/at91_dbgu.h @@ -16,9 +16,6 @@  #ifndef AT91_DBGU_H  #define AT91_DBGU_H -#define dbgu_readl(dbgu, field) \ -	__raw_readl(AT91_VA_BASE_SYS + dbgu + AT91_DBGU_ ## field) -  #if !defined(CONFIG_ARCH_AT91X40)  #define AT91_DBGU_CR		(0x00)	/* Control Register */  #define AT91_DBGU_MR		(0x04)	/* Mode Register */ diff --git a/arch/arm/mach-at91/include/mach/at91_matrix.h b/arch/arm/mach-at91/include/mach/at91_matrix.h index 02fae9de746..f8996c95413 100644 --- a/arch/arm/mach-at91/include/mach/at91_matrix.h +++ b/arch/arm/mach-at91/include/mach/at91_matrix.h @@ -14,7 +14,7 @@ extern void __iomem *at91_matrix_base;  	__raw_readl(at91_matrix_base + field)  #define at91_matrix_write(field, value) \ -	__raw_writel(value, at91_matrix_base + field); +	__raw_writel(value, at91_matrix_base + field)  #else  .extern at91_matrix_base diff --git a/arch/arm/mach-at91/include/mach/at91_pmc.h b/arch/arm/mach-at91/include/mach/at91_pmc.h index ea2c57a86ca..31df12029c4 100644 --- a/arch/arm/mach-at91/include/mach/at91_pmc.h +++ b/arch/arm/mach-at91/include/mach/at91_pmc.h @@ -75,6 +75,9 @@ extern void __iomem *at91_pmc_base;  #define		AT91_PMC_PLLCOUNT	(0x3f  <<  8)		/* PLL Counter */  #define		AT91_PMC_OUT		(3     << 14)		/* PLL Clock Frequency Range */  #define		AT91_PMC_MUL		(0x7ff << 16)		/* PLL Multiplier */ +#define		AT91_PMC_MUL_GET(n)	((n) >> 16 & 0x7ff) +#define		AT91_PMC3_MUL		(0x7f  << 18)		/* PLL Multiplier [SAMA5 only] */ +#define		AT91_PMC3_MUL_GET(n)	((n) >> 18 & 0x7f)  #define		AT91_PMC_USBDIV		(3     << 28)		/* USB Divisor (PLLB only) */  #define			AT91_PMC_USBDIV_1		(0 << 28)  #define			AT91_PMC_USBDIV_2		(1 << 28) @@ -167,11 +170,18 @@ extern void __iomem *at91_pmc_base;  #define		AT91_PMC_WPVS		(0x1  <<  0)		/* Write Protect Violation Status */  #define		AT91_PMC_WPVSRC		(0xffff  <<  8)		/* Write Protect Violation Source */ -#define AT91_PMC_PCR		0x10c			/* Peripheral Control Register [some SAM9] */ +#define AT91_PMC_PCER1		0x100			/* Peripheral Clock Enable Register 1 [SAMA5 only]*/ +#define AT91_PMC_PCDR1		0x104			/* Peripheral Clock Enable Register 1 */ +#define AT91_PMC_PCSR1		0x108			/* Peripheral Clock Enable Register 1 */ + +#define AT91_PMC_PCR		0x10c			/* Peripheral Control Register [some SAM9 and SAMA5] */  #define		AT91_PMC_PCR_PID	(0x3f  <<  0)		/* Peripheral ID */ -#define		AT91_PMC_PCR_CMD	(0x1  <<  12)		/* Command */ -#define		AT91_PMC_PCR_DIV	(0x3  <<  16)		/* Divisor Value */ -#define		AT91_PMC_PCRDIV(n)	(((n) <<  16) & AT91_PMC_PCR_DIV) +#define		AT91_PMC_PCR_CMD	(0x1  <<  12)		/* Command (read=0, write=1) */ +#define		AT91_PMC_PCR_DIV(n)	((n)  <<  16)		/* Divisor Value */ +#define			AT91_PMC_PCR_DIV0	0x0			/* Peripheral clock is MCK */ +#define			AT91_PMC_PCR_DIV2	0x2			/* Peripheral clock is MCK/2 */ +#define			AT91_PMC_PCR_DIV4	0x4			/* Peripheral clock is MCK/4 */ +#define			AT91_PMC_PCR_DIV8	0x8			/* Peripheral clock is MCK/8 */  #define		AT91_PMC_PCR_EN		(0x1  <<  28)		/* Enable */  #endif diff --git a/arch/arm/mach-at91/include/mach/at91_st.h b/arch/arm/mach-at91/include/mach/at91_st.h index 969aac27109..67fdbd13c3e 100644 --- a/arch/arm/mach-at91/include/mach/at91_st.h +++ b/arch/arm/mach-at91/include/mach/at91_st.h @@ -23,7 +23,7 @@ extern void __iomem *at91_st_base;  	__raw_readl(at91_st_base + field)  #define at91_st_write(field, value) \ -	__raw_writel(value, at91_st_base + field); +	__raw_writel(value, at91_st_base + field)  #else  .extern at91_st_base  #endif diff --git a/arch/arm/mach-at91/include/mach/cpu.h b/arch/arm/mach-at91/include/mach/cpu.h index b6504c19d55..0f3379fe645 100644 --- a/arch/arm/mach-at91/include/mach/cpu.h +++ b/arch/arm/mach-at91/include/mach/cpu.h @@ -36,6 +36,8 @@  #define ARCH_ID_AT91M40807	0x14080745  #define ARCH_ID_AT91R40008	0x44000840 +#define ARCH_ID_SAMA5D3		0x8A5C07C0 +  #define ARCH_EXID_AT91SAM9M11	0x00000001  #define ARCH_EXID_AT91SAM9M10	0x00000002  #define ARCH_EXID_AT91SAM9G46	0x00000003 @@ -47,6 +49,11 @@  #define ARCH_EXID_AT91SAM9G25	0x00000003  #define ARCH_EXID_AT91SAM9X25	0x00000004 +#define ARCH_EXID_SAMA5D31	0x00444300 +#define ARCH_EXID_SAMA5D33	0x00414300 +#define ARCH_EXID_SAMA5D34	0x00414301 +#define ARCH_EXID_SAMA5D35	0x00584300 +  #define ARCH_FAMILY_AT91X92	0x09200000  #define ARCH_FAMILY_AT91SAM9	0x01900000  #define ARCH_FAMILY_AT91SAM9XE	0x02900000 @@ -75,6 +82,9 @@ enum at91_soc_type {  	/* SAM9N12 */  	AT91_SOC_SAM9N12, +	/* SAMA5D3 */ +	AT91_SOC_SAMA5D3, +  	/* Unknown type */  	AT91_SOC_NONE  }; @@ -93,6 +103,10 @@ enum at91_soc_subtype {  	AT91_SOC_SAM9G15, AT91_SOC_SAM9G35, AT91_SOC_SAM9X35,  	AT91_SOC_SAM9G25, AT91_SOC_SAM9X25, +	/* SAMA5D3 */ +	AT91_SOC_SAMA5D31, AT91_SOC_SAMA5D33, AT91_SOC_SAMA5D34, +	AT91_SOC_SAMA5D35, +  	/* Unknown subtype */  	AT91_SOC_SUBTYPE_NONE  }; @@ -187,6 +201,12 @@ static inline int at91_soc_is_detected(void)  #define cpu_is_at91sam9n12()	(0)  #endif +#ifdef CONFIG_SOC_SAMA5D3 +#define cpu_is_sama5d3()	(at91_soc_initdata.type == AT91_SOC_SAMA5D3) +#else +#define cpu_is_sama5d3()	(0) +#endif +  /*   * Since this is ARM, we will never run on any AVR32 CPU. But these   * definitions may reduce clutter in common drivers. diff --git a/arch/arm/mach-at91/include/mach/sama5d3.h b/arch/arm/mach-at91/include/mach/sama5d3.h new file mode 100644 index 00000000000..6dc81ee3804 --- /dev/null +++ b/arch/arm/mach-at91/include/mach/sama5d3.h @@ -0,0 +1,73 @@ +/* + * Chip-specific header file for the SAMA5D3 family + * + *  Copyright (C) 2013 Atmel, + *                2013 Ludovic Desroches <ludovic.desroches@atmel.com> + * + * Common definitions. + * Based on SAMA5D3 datasheet. + * + * Licensed under GPLv2 or later. + */ + +#ifndef SAMA5D3_H +#define SAMA5D3_H + +/* + * Peripheral identifiers/interrupts. + */ +#define AT91_ID_FIQ		 0	/* Advanced Interrupt Controller (FIQ) */ +#define AT91_ID_SYS		 1	/* System Peripherals */ +#define SAMA5D3_ID_DBGU		 2	/* debug Unit (usually no special interrupt line) */ +#define AT91_ID_PIT		 3	/* PIT */ +#define SAMA5D3_ID_WDT		 4	/* Watchdog Timer Interrupt */ +#define SAMA5D3_ID_HSMC		 5	/* Static Memory Controller */ +#define SAMA5D3_ID_PIOA		 6	/* PIOA */ +#define SAMA5D3_ID_PIOB		 7	/* PIOB */ +#define SAMA5D3_ID_PIOC		 8	/* PIOC */ +#define SAMA5D3_ID_PIOD		 9	/* PIOD */ +#define SAMA5D3_ID_PIOE		10	/* PIOE */ +#define SAMA5D3_ID_SMD		11	/* SMD Soft Modem */ +#define SAMA5D3_ID_USART0	12	/* USART0 */ +#define SAMA5D3_ID_USART1	13	/* USART1 */ +#define SAMA5D3_ID_USART2	14	/* USART2 */ +#define SAMA5D3_ID_USART3	15	/* USART3 */ +#define SAMA5D3_ID_UART0	16	/* UART 0 */ +#define SAMA5D3_ID_UART1	17	/* UART 1 */ +#define SAMA5D3_ID_TWI0		18	/* Two-Wire Interface 0 */ +#define SAMA5D3_ID_TWI1		19	/* Two-Wire Interface 1 */ +#define SAMA5D3_ID_TWI2		20	/* Two-Wire Interface 2 */ +#define SAMA5D3_ID_HSMCI0	21	/* MCI */ +#define SAMA5D3_ID_HSMCI1	22	/* MCI */ +#define SAMA5D3_ID_HSMCI2	23	/* MCI */ +#define SAMA5D3_ID_SPI0		24	/* Serial Peripheral Interface 0 */ +#define SAMA5D3_ID_SPI1		25	/* Serial Peripheral Interface 1 */ +#define SAMA5D3_ID_TC0		26	/* Timer Counter 0 */ +#define SAMA5D3_ID_TC1		27	/* Timer Counter 2 */ +#define SAMA5D3_ID_PWM		28	/* Pulse Width Modulation Controller */ +#define SAMA5D3_ID_ADC		29	/* Touch Screen ADC Controller */ +#define SAMA5D3_ID_DMA0		30	/* DMA Controller 0 */ +#define SAMA5D3_ID_DMA1		31	/* DMA Controller 1 */ +#define SAMA5D3_ID_UHPHS	32	/* USB Host High Speed */ +#define SAMA5D3_ID_UDPHS	33	/* USB Device High Speed */ +#define SAMA5D3_ID_GMAC		34	/* Gigabit Ethernet MAC */ +#define SAMA5D3_ID_EMAC		35	/* Ethernet MAC */ +#define SAMA5D3_ID_LCDC		36	/* LCD Controller */ +#define SAMA5D3_ID_ISI		37	/* Image Sensor Interface */ +#define SAMA5D3_ID_SSC0		38	/* Synchronous Serial Controller 0 */ +#define SAMA5D3_ID_SSC1		39	/* Synchronous Serial Controller 1 */ +#define SAMA5D3_ID_CAN0		40	/* CAN Controller 0 */ +#define SAMA5D3_ID_CAN1		41	/* CAN Controller 1 */ +#define SAMA5D3_ID_SHA		42	/* Secure Hash Algorithm */ +#define SAMA5D3_ID_AES		43	/* Advanced Encryption Standard */ +#define SAMA5D3_ID_TDES		44	/* Triple Data Encryption Standard */ +#define SAMA5D3_ID_TRNG		45	/* True Random Generator Number */ +#define SAMA5D3_ID_IRQ0		47	/* Advanced Interrupt Controller (IRQ0) */ + +/* + * Internal Memory + */ +#define SAMA5D3_SRAM_BASE	0x00300000	/* Internal SRAM base address */ +#define SAMA5D3_SRAM_SIZE	(128 * SZ_1K)	/* Internal SRAM size (128Kb) */ + +#endif diff --git a/arch/arm/mach-at91/sama5d3.c b/arch/arm/mach-at91/sama5d3.c new file mode 100644 index 00000000000..401279715ab --- /dev/null +++ b/arch/arm/mach-at91/sama5d3.c @@ -0,0 +1,377 @@ +/* + *  Chip-specific setup code for the SAMA5D3 family + * + *  Copyright (C) 2013 Atmel, + *                2013 Ludovic Desroches <ludovic.desroches@atmel.com> + * + * Licensed under GPLv2 or later. + */ + +#include <linux/module.h> +#include <linux/dma-mapping.h> + +#include <asm/irq.h> +#include <asm/mach/arch.h> +#include <asm/mach/map.h> +#include <mach/sama5d3.h> +#include <mach/at91_pmc.h> +#include <mach/cpu.h> + +#include "soc.h" +#include "generic.h" +#include "clock.h" +#include "sam9_smc.h" + +/* -------------------------------------------------------------------- + *  Clocks + * -------------------------------------------------------------------- */ + +/* + * The peripheral clocks. + */ + +static struct clk pioA_clk = { +	.name		= "pioA_clk", +	.pid		= SAMA5D3_ID_PIOA, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk pioB_clk = { +	.name		= "pioB_clk", +	.pid		= SAMA5D3_ID_PIOB, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk pioC_clk = { +	.name		= "pioC_clk", +	.pid		= SAMA5D3_ID_PIOC, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk pioD_clk = { +	.name		= "pioD_clk", +	.pid		= SAMA5D3_ID_PIOD, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk pioE_clk = { +	.name		= "pioE_clk", +	.pid		= SAMA5D3_ID_PIOE, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk usart0_clk = { +	.name		= "usart0_clk", +	.pid		= SAMA5D3_ID_USART0, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV2, +}; +static struct clk usart1_clk = { +	.name		= "usart1_clk", +	.pid		= SAMA5D3_ID_USART1, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV2, +}; +static struct clk usart2_clk = { +	.name		= "usart2_clk", +	.pid		= SAMA5D3_ID_USART2, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV2, +}; +static struct clk usart3_clk = { +	.name		= "usart3_clk", +	.pid		= SAMA5D3_ID_USART3, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV2, +}; +static struct clk uart0_clk = { +	.name		= "uart0_clk", +	.pid		= SAMA5D3_ID_UART0, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV2, +}; +static struct clk uart1_clk = { +	.name		= "uart1_clk", +	.pid		= SAMA5D3_ID_UART1, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV2, +}; +static struct clk twi0_clk = { +	.name		= "twi0_clk", +	.pid		= SAMA5D3_ID_TWI0, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV2, +}; +static struct clk twi1_clk = { +	.name		= "twi1_clk", +	.pid		= SAMA5D3_ID_TWI1, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV2, +}; +static struct clk twi2_clk = { +	.name		= "twi2_clk", +	.pid		= SAMA5D3_ID_TWI2, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV2, +}; +static struct clk mmc0_clk = { +	.name		= "mci0_clk", +	.pid		= SAMA5D3_ID_HSMCI0, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk mmc1_clk = { +	.name		= "mci1_clk", +	.pid		= SAMA5D3_ID_HSMCI1, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk mmc2_clk = { +	.name		= "mci2_clk", +	.pid		= SAMA5D3_ID_HSMCI2, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk spi0_clk = { +	.name		= "spi0_clk", +	.pid		= SAMA5D3_ID_SPI0, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk spi1_clk = { +	.name		= "spi1_clk", +	.pid		= SAMA5D3_ID_SPI1, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk tcb0_clk = { +	.name		= "tcb0_clk", +	.pid		= SAMA5D3_ID_TC0, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV2, +}; +static struct clk tcb1_clk = { +	.name		= "tcb1_clk", +	.pid		= SAMA5D3_ID_TC1, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV2, +}; +static struct clk adc_clk = { +	.name		= "adc_clk", +	.pid		= SAMA5D3_ID_ADC, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV2, +}; +static struct clk adc_op_clk = { +	.name		= "adc_op_clk", +	.type		= CLK_TYPE_PERIPHERAL, +	.rate_hz	= 5000000, +}; +static struct clk dma0_clk = { +	.name		= "dma0_clk", +	.pid		= SAMA5D3_ID_DMA0, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk dma1_clk = { +	.name		= "dma1_clk", +	.pid		= SAMA5D3_ID_DMA1, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk uhphs_clk = { +	.name		= "uhphs", +	.pid		= SAMA5D3_ID_UHPHS, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk udphs_clk = { +	.name		= "udphs_clk", +	.pid		= SAMA5D3_ID_UDPHS, +	.type		= CLK_TYPE_PERIPHERAL, +}; +/* gmac only for sama5d33, sama5d34, sama5d35 */ +static struct clk macb0_clk = { +	.name		= "macb0_clk", +	.pid		= SAMA5D3_ID_GMAC, +	.type		= CLK_TYPE_PERIPHERAL, +}; +/* emac only for sama5d31, sama5d35 */ +static struct clk macb1_clk = { +	.name		= "macb1_clk", +	.pid		= SAMA5D3_ID_EMAC, +	.type		= CLK_TYPE_PERIPHERAL, +}; +/* lcd only for sama5d31, sama5d33, sama5d34 */ +static struct clk lcdc_clk = { +	.name		= "lcdc_clk", +	.pid		= SAMA5D3_ID_LCDC, +	.type		= CLK_TYPE_PERIPHERAL, +}; +/* isi only for sama5d33, sama5d35 */ +static struct clk isi_clk = { +	.name		= "isi_clk", +	.pid		= SAMA5D3_ID_ISI, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk can0_clk = { +	.name		= "can0_clk", +	.pid		= SAMA5D3_ID_CAN0, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV2, +}; +static struct clk can1_clk = { +	.name		= "can1_clk", +	.pid		= SAMA5D3_ID_CAN1, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV2, +}; +static struct clk ssc0_clk = { +	.name		= "ssc0_clk", +	.pid		= SAMA5D3_ID_SSC0, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV2, +}; +static struct clk ssc1_clk = { +	.name		= "ssc1_clk", +	.pid		= SAMA5D3_ID_SSC1, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV2, +}; +static struct clk sha_clk = { +	.name		= "sha_clk", +	.pid		= SAMA5D3_ID_SHA, +	.type		= CLK_TYPE_PERIPHERAL, +	.div		= AT91_PMC_PCR_DIV8, +}; +static struct clk aes_clk = { +	.name		= "aes_clk", +	.pid		= SAMA5D3_ID_AES, +	.type		= CLK_TYPE_PERIPHERAL, +}; +static struct clk tdes_clk = { +	.name		= "tdes_clk", +	.pid		= SAMA5D3_ID_TDES, +	.type		= CLK_TYPE_PERIPHERAL, +}; + +static struct clk *periph_clocks[] __initdata = { +	&pioA_clk, +	&pioB_clk, +	&pioC_clk, +	&pioD_clk, +	&pioE_clk, +	&usart0_clk, +	&usart1_clk, +	&usart2_clk, +	&usart3_clk, +	&uart0_clk, +	&uart1_clk, +	&twi0_clk, +	&twi1_clk, +	&twi2_clk, +	&mmc0_clk, +	&mmc1_clk, +	&mmc2_clk, +	&spi0_clk, +	&spi1_clk, +	&tcb0_clk, +	&tcb1_clk, +	&adc_clk, +	&adc_op_clk, +	&dma0_clk, +	&dma1_clk, +	&uhphs_clk, +	&udphs_clk, +	&macb0_clk, +	&macb1_clk, +	&lcdc_clk, +	&isi_clk, +	&can0_clk, +	&can1_clk, +	&ssc0_clk, +	&ssc1_clk, +	&sha_clk, +	&aes_clk, +	&tdes_clk, +}; + +static struct clk pck0 = { +	.name		= "pck0", +	.pmc_mask	= AT91_PMC_PCK0, +	.type		= CLK_TYPE_PROGRAMMABLE, +	.id		= 0, +}; + +static struct clk pck1 = { +	.name		= "pck1", +	.pmc_mask	= AT91_PMC_PCK1, +	.type		= CLK_TYPE_PROGRAMMABLE, +	.id		= 1, +}; + +static struct clk pck2 = { +	.name		= "pck2", +	.pmc_mask	= AT91_PMC_PCK2, +	.type		= CLK_TYPE_PROGRAMMABLE, +	.id		= 2, +}; + +static struct clk_lookup periph_clocks_lookups[] = { +	/* lookup table for DT entries */ +	CLKDEV_CON_DEV_ID("usart", "ffffee00.serial", &mck), +	CLKDEV_CON_DEV_ID(NULL, "fffff200.gpio", &pioA_clk), +	CLKDEV_CON_DEV_ID(NULL, "fffff400.gpio", &pioB_clk), +	CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioC_clk), +	CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioD_clk), +	CLKDEV_CON_DEV_ID(NULL, "fffffa00.gpio", &pioE_clk), +	CLKDEV_CON_DEV_ID("usart", "f001c000.serial", &usart0_clk), +	CLKDEV_CON_DEV_ID("usart", "f0020000.serial", &usart1_clk), +	CLKDEV_CON_DEV_ID("usart", "f8020000.serial", &usart2_clk), +	CLKDEV_CON_DEV_ID("usart", "f8024000.serial", &usart3_clk), +	CLKDEV_CON_DEV_ID(NULL, "f0014000.i2c", &twi0_clk), +	CLKDEV_CON_DEV_ID(NULL, "f0018000.i2c", &twi1_clk), +	CLKDEV_CON_DEV_ID(NULL, "f801c000.i2c", &twi2_clk), +	CLKDEV_CON_DEV_ID("mci_clk", "f0000000.mmc", &mmc0_clk), +	CLKDEV_CON_DEV_ID("mci_clk", "f8000000.mmc", &mmc1_clk), +	CLKDEV_CON_DEV_ID("mci_clk", "f8004000.mmc", &mmc2_clk), +	CLKDEV_CON_DEV_ID("spi_clk", "f0004000.spi", &spi0_clk), +	CLKDEV_CON_DEV_ID("spi_clk", "f8008000.spi", &spi1_clk), +	CLKDEV_CON_DEV_ID("t0_clk", "f0010000.timer", &tcb0_clk), +	CLKDEV_CON_DEV_ID("t0_clk", "f8014000.timer", &tcb1_clk), +	CLKDEV_CON_DEV_ID("tsc_clk", "f8018000.tsadcc", &adc_clk), +	CLKDEV_CON_DEV_ID("dma_clk", "ffffe600.dma-controller", &dma0_clk), +	CLKDEV_CON_DEV_ID("dma_clk", "ffffe800.dma-controller", &dma1_clk), +	CLKDEV_CON_DEV_ID("hclk", "600000.ohci", &uhphs_clk), +	CLKDEV_CON_DEV_ID("ohci_clk", "600000.ohci", &uhphs_clk), +	CLKDEV_CON_DEV_ID("ehci_clk", "700000.ehci", &uhphs_clk), +	CLKDEV_CON_DEV_ID("pclk", "500000.gadget", &udphs_clk), +	CLKDEV_CON_DEV_ID("hclk", "500000.gadget", &utmi_clk), +	CLKDEV_CON_DEV_ID("hclk", "f0028000.ethernet", &macb0_clk), +	CLKDEV_CON_DEV_ID("pclk", "f0028000.ethernet", &macb0_clk), +	CLKDEV_CON_DEV_ID("hclk", "f802c000.ethernet", &macb1_clk), +	CLKDEV_CON_DEV_ID("pclk", "f802c000.ethernet", &macb1_clk), +	CLKDEV_CON_DEV_ID("pclk", "f0008000.ssc", &ssc0_clk), +	CLKDEV_CON_DEV_ID("pclk", "f000c000.ssc", &ssc1_clk), +	CLKDEV_CON_DEV_ID("can_clk", "f000c000.can", &can0_clk), +	CLKDEV_CON_DEV_ID("can_clk", "f8010000.can", &can1_clk), +	CLKDEV_CON_DEV_ID("sha_clk", "f8034000.sha", &sha_clk), +	CLKDEV_CON_DEV_ID("aes_clk", "f8038000.aes", &aes_clk), +	CLKDEV_CON_DEV_ID("tdes_clk", "f803c000.tdes", &tdes_clk), +}; + +static void __init sama5d3_register_clocks(void) +{ +	int i; + +	for (i = 0; i < ARRAY_SIZE(periph_clocks); i++) +		clk_register(periph_clocks[i]); + +	clkdev_add_table(periph_clocks_lookups, +			 ARRAY_SIZE(periph_clocks_lookups)); + +	clk_register(&pck0); +	clk_register(&pck1); +	clk_register(&pck2); +} + +/* -------------------------------------------------------------------- + *  AT91SAM9x5 processor initialization + * -------------------------------------------------------------------- */ + +static void __init sama5d3_map_io(void) +{ +	at91_init_sram(0, SAMA5D3_SRAM_BASE, SAMA5D3_SRAM_SIZE); +} + +AT91_SOC_START(sama5d3) +	.map_io = sama5d3_map_io, +	.register_clocks = sama5d3_register_clocks, +AT91_SOC_END diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c index 4b678478cf9..e8491e77b1f 100644 --- a/arch/arm/mach-at91/setup.c +++ b/arch/arm/mach-at91/setup.c @@ -151,6 +151,11 @@ static void __init soc_detect(u32 dbgu_base)  		at91_soc_initdata.type = AT91_SOC_SAM9N12;  		at91_boot_soc = at91sam9n12_soc;  		break; + +	case ARCH_ID_SAMA5D3: +		at91_soc_initdata.type = AT91_SOC_SAMA5D3; +		at91_boot_soc = sama5d3_soc; +		break;  	}  	/* at91sam9g10 */ @@ -206,6 +211,23 @@ static void __init soc_detect(u32 dbgu_base)  			break;  		}  	} + +	if (at91_soc_initdata.type == AT91_SOC_SAMA5D3) { +		switch (at91_soc_initdata.exid) { +		case ARCH_EXID_SAMA5D31: +			at91_soc_initdata.subtype = AT91_SOC_SAMA5D31; +			break; +		case ARCH_EXID_SAMA5D33: +			at91_soc_initdata.subtype = AT91_SOC_SAMA5D33; +			break; +		case ARCH_EXID_SAMA5D34: +			at91_soc_initdata.subtype = AT91_SOC_SAMA5D34; +			break; +		case ARCH_EXID_SAMA5D35: +			at91_soc_initdata.subtype = AT91_SOC_SAMA5D35; +			break; +		} +	}  }  static const char *soc_name[] = { @@ -219,6 +241,7 @@ static const char *soc_name[] = {  	[AT91_SOC_SAM9RL]	= "at91sam9rl",  	[AT91_SOC_SAM9X5]	= "at91sam9x5",  	[AT91_SOC_SAM9N12]	= "at91sam9n12", +	[AT91_SOC_SAMA5D3]	= "sama5d3",  	[AT91_SOC_NONE]		= "Unknown"  }; @@ -241,6 +264,10 @@ static const char *soc_subtype_name[] = {  	[AT91_SOC_SAM9X35]	= "at91sam9x35",  	[AT91_SOC_SAM9G25]	= "at91sam9g25",  	[AT91_SOC_SAM9X25]	= "at91sam9x25", +	[AT91_SOC_SAMA5D31]	= "sama5d31", +	[AT91_SOC_SAMA5D33]	= "sama5d33", +	[AT91_SOC_SAMA5D34]	= "sama5d34", +	[AT91_SOC_SAMA5D35]	= "sama5d35",  	[AT91_SOC_SUBTYPE_NONE]	= "Unknown"  }; @@ -333,7 +360,7 @@ static void at91_dt_rstc(void)  	of_id = of_match_node(rstc_ids, np);  	if (!of_id) -		panic("AT91: rtsc no restart function availlable\n"); +		panic("AT91: rtsc no restart function available\n");  	arm_pm_restart = of_id->data; @@ -353,7 +380,7 @@ static void at91_dt_ramc(void)  	np = of_find_matching_node(NULL, ramc_ids);  	if (!np) -		panic("unable to find compatible ram conroller node in dtb\n"); +		panic("unable to find compatible ram controller node in dtb\n");  	at91_ramc_base[0] = of_iomap(np, 0);  	if (!at91_ramc_base[0]) @@ -403,7 +430,7 @@ static void at91_dt_shdwc(void)  	np = of_find_matching_node(NULL, shdwc_ids);  	if (!np) { -		pr_debug("AT91: unable to find compatible shutdown (shdwc) conroller node in dtb\n"); +		pr_debug("AT91: unable to find compatible shutdown (shdwc) controller node in dtb\n");  		return;  	} @@ -419,7 +446,7 @@ static void at91_dt_shdwc(void)  	if (!of_property_read_u32(np, "atmel,wakeup-counter", ®)) {  		if (reg > AT91_SHDW_CPTWK0_MAX) { -			pr_warn("AT91: shdwc wakeup conter 0x%x > 0x%x reduce it to 0x%x\n", +			pr_warn("AT91: shdwc wakeup counter 0x%x > 0x%x reduce it to 0x%x\n",  				reg, AT91_SHDW_CPTWK0_MAX, AT91_SHDW_CPTWK0_MAX);  			reg = AT91_SHDW_CPTWK0_MAX;  		} diff --git a/arch/arm/mach-at91/soc.h b/arch/arm/mach-at91/soc.h index 9c6d3d4f9a2..43a225f9e71 100644 --- a/arch/arm/mach-at91/soc.h +++ b/arch/arm/mach-at91/soc.h @@ -22,9 +22,10 @@ extern struct at91_init_soc at91sam9g45_soc;  extern struct at91_init_soc at91sam9rl_soc;  extern struct at91_init_soc at91sam9x5_soc;  extern struct at91_init_soc at91sam9n12_soc; +extern struct at91_init_soc sama5d3_soc;  #define AT91_SOC_START(_name)				\ -struct at91_init_soc __initdata at91##_name##_soc	\ +struct at91_init_soc __initdata _name##_soc		\   __used							\  						= {	\  	.builtin	= 1,				\ @@ -68,3 +69,7 @@ static inline int at91_soc_is_enabled(void)  #if !defined(CONFIG_SOC_AT91SAM9N12)  #define at91sam9n12_soc	at91_boot_soc  #endif + +#if !defined(CONFIG_SOC_SAMA5D3) +#define sama5d3_soc	at91_boot_soc +#endif diff --git a/arch/arm/mach-bcm/Kconfig b/arch/arm/mach-bcm/Kconfig index bf02471d7e7..f11289519c3 100644 --- a/arch/arm/mach-bcm/Kconfig +++ b/arch/arm/mach-bcm/Kconfig @@ -6,6 +6,7 @@ config ARCH_BCM  	select ARM_ERRATA_764369 if SMP  	select ARM_GIC  	select CPU_V7 +	select CLKSRC_OF  	select GENERIC_CLOCKEVENTS  	select GENERIC_TIME  	select GPIO_BCM diff --git a/arch/arm/mach-bcm/board_bcm.c b/arch/arm/mach-bcm/board_bcm.c index f0f9abafad2..25959354047 100644 --- a/arch/arm/mach-bcm/board_bcm.c +++ b/arch/arm/mach-bcm/board_bcm.c @@ -16,14 +16,11 @@  #include <linux/device.h>  #include <linux/platform_device.h>  #include <linux/irqchip.h> +#include <linux/clocksource.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h> -static void timer_init(void) -{ -} -  static void __init board_init(void)  { @@ -35,7 +32,7 @@ static const char * const bcm11351_dt_compat[] = { "bcm,bcm11351", NULL, };  DT_MACHINE_START(BCM11351_DT, "Broadcom Application Processor")  	.init_irq = irqchip_init, -	.init_time = timer_init, +	.init_time = clocksource_of_init,  	.init_machine = board_init,  	.dt_compat = bcm11351_dt_compat,  MACHINE_END diff --git a/arch/arm/mach-bcm2835/Kconfig b/arch/arm/mach-bcm2835/Kconfig new file mode 100644 index 00000000000..560045cafc3 --- /dev/null +++ b/arch/arm/mach-bcm2835/Kconfig @@ -0,0 +1,15 @@ +config ARCH_BCM2835 +	bool "Broadcom BCM2835 family" if ARCH_MULTI_V6 +	select ARCH_REQUIRE_GPIOLIB +	select ARM_AMBA +	select ARM_ERRATA_411920 +	select ARM_TIMER_SP804 +	select CLKDEV_LOOKUP +	select CLKSRC_OF +	select CPU_V6 +	select GENERIC_CLOCKEVENTS +	select PINCTRL +	select PINCTRL_BCM2835 +	help +	  This enables support for the Broadcom BCM2835 SoC. This SoC is +	  use in the Raspberry Pi, and Roku 2 devices. diff --git a/arch/arm/mach-bcm2835/Makefile.boot b/arch/arm/mach-bcm2835/Makefile.boot deleted file mode 100644 index b3271754e9f..00000000000 --- a/arch/arm/mach-bcm2835/Makefile.boot +++ /dev/null @@ -1 +0,0 @@ -zreladdr-y := 0x00008000 diff --git a/arch/arm/mach-bcm2835/bcm2835.c b/arch/arm/mach-bcm2835/bcm2835.c index 6f5785985dd..740fa9ebe24 100644 --- a/arch/arm/mach-bcm2835/bcm2835.c +++ b/arch/arm/mach-bcm2835/bcm2835.c @@ -23,8 +23,6 @@  #include <asm/mach/arch.h>  #include <asm/mach/map.h> -#include <mach/bcm2835_soc.h> -  #define PM_RSTC				0x1c  #define PM_RSTS				0x20  #define PM_WDOG				0x24 @@ -34,6 +32,10 @@  #define PM_RSTC_WRCFG_FULL_RESET	0x00000020  #define PM_RSTS_HADWRH_SET		0x00000040 +#define BCM2835_PERIPH_PHYS	0x20000000 +#define BCM2835_PERIPH_VIRT	0xf0000000 +#define BCM2835_PERIPH_SIZE	SZ_16M +  static void __iomem *wdt_regs;  /* diff --git a/arch/arm/mach-bcm2835/include/mach/bcm2835_soc.h b/arch/arm/mach-bcm2835/include/mach/bcm2835_soc.h deleted file mode 100644 index d4dfcf7a9cd..00000000000 --- a/arch/arm/mach-bcm2835/include/mach/bcm2835_soc.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2012 Stephen Warren - * - * Derived from code: - * Copyright (C) 2010 Broadcom - * - * 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. - */ - -#ifndef __MACH_BCM2835_BCM2835_SOC_H__ -#define __MACH_BCM2835_BCM2835_SOC_H__ - -#include <asm/sizes.h> - -#define BCM2835_PERIPH_PHYS	0x20000000 -#define BCM2835_PERIPH_VIRT	0xf0000000 -#define BCM2835_PERIPH_SIZE	SZ_16M -#define BCM2835_DEBUG_PHYS	0x20201000 -#define BCM2835_DEBUG_VIRT	0xf0201000 - -#endif diff --git a/arch/arm/mach-bcm2835/include/mach/gpio.h b/arch/arm/mach-bcm2835/include/mach/gpio.h deleted file mode 100644 index 40a8c178f10..00000000000 --- a/arch/arm/mach-bcm2835/include/mach/gpio.h +++ /dev/null @@ -1 +0,0 @@ -/* empty */ diff --git a/arch/arm/mach-bcm2835/include/mach/timex.h b/arch/arm/mach-bcm2835/include/mach/timex.h deleted file mode 100644 index 6d021e136ae..00000000000 --- a/arch/arm/mach-bcm2835/include/mach/timex.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - *  BCM2835 system clock frequency - * - *  Copyright (C) 2010 Broadcom - * - * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ - -#ifndef __ASM_ARCH_TIMEX_H -#define __ASM_ARCH_TIMEX_H - -#define CLOCK_TICK_RATE		(1000000) - -#endif diff --git a/arch/arm/mach-bcm2835/include/mach/uncompress.h b/arch/arm/mach-bcm2835/include/mach/uncompress.h deleted file mode 100644 index bf86dca3bf7..00000000000 --- a/arch/arm/mach-bcm2835/include/mach/uncompress.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2010 Broadcom - * Copyright (C) 2003 ARM Limited - * - * 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. - */ - -#include <linux/io.h> -#include <linux/amba/serial.h> -#include <mach/bcm2835_soc.h> - -#define UART0_BASE BCM2835_DEBUG_PHYS - -#define BCM2835_UART_DR IOMEM(UART0_BASE + UART01x_DR) -#define BCM2835_UART_FR IOMEM(UART0_BASE + UART01x_FR) -#define BCM2835_UART_CR IOMEM(UART0_BASE + UART011_CR) - -static inline void putc(int c) -{ -	while (__raw_readl(BCM2835_UART_FR) & UART01x_FR_TXFF) -		barrier(); - -	__raw_writel(c, BCM2835_UART_DR); -} - -static inline void flush(void) -{ -	int fr; - -	do { -		fr = __raw_readl(BCM2835_UART_FR); -		barrier(); -	} while ((fr & (UART011_FR_TXFE | UART01x_FR_BUSY)) != UART011_FR_TXFE); -} - -#define arch_decomp_setup() diff --git a/arch/arm/mach-cns3xxx/Kconfig b/arch/arm/mach-cns3xxx/Kconfig index 9ebfcc46feb..dbf0df8bb0a 100644 --- a/arch/arm/mach-cns3xxx/Kconfig +++ b/arch/arm/mach-cns3xxx/Kconfig @@ -1,8 +1,20 @@ +config ARCH_CNS3XXX +	bool "Cavium Networks CNS3XXX family" if ARCH_MULTI_V6 +	select ARM_GIC +	select CPU_V6K +	select GENERIC_CLOCKEVENTS +	select MIGHT_HAVE_CACHE_L2X0 +	select MIGHT_HAVE_PCI +	select PCI_DOMAINS if PCI +	help +	  Support for Cavium Networks CNS3XXX platform. +  menu "CNS3XXX platform type"  	depends on ARCH_CNS3XXX  config MACH_CNS3420VB  	bool "Support for CNS3420 Validation Board" +	depends on ATAGS  	help  	  Include support for the Cavium Networks CNS3420 MPCore Platform  	  Baseboard. diff --git a/arch/arm/mach-cns3xxx/Makefile b/arch/arm/mach-cns3xxx/Makefile index 11033f1c2e2..a1ff1084869 100644 --- a/arch/arm/mach-cns3xxx/Makefile +++ b/arch/arm/mach-cns3xxx/Makefile @@ -1,3 +1,5 @@ -obj-$(CONFIG_ARCH_CNS3XXX)		+= core.o pm.o devices.o -obj-$(CONFIG_PCI)			+= pcie.o -obj-$(CONFIG_MACH_CNS3420VB)		+= cns3420vb.o +obj-$(CONFIG_ARCH_CNS3XXX)		+= cns3xxx.o +cns3xxx-y				+= core.o pm.o +cns3xxx-$(CONFIG_ATAGS)			+= devices.o +cns3xxx-$(CONFIG_PCI)			+= pcie.o +cns3xxx-$(CONFIG_MACH_CNS3420VB)	+= cns3420vb.o diff --git a/arch/arm/mach-cns3xxx/cns3420vb.c b/arch/arm/mach-cns3xxx/cns3420vb.c index a71867e1d8d..ce096d678aa 100644 --- a/arch/arm/mach-cns3xxx/cns3420vb.c +++ b/arch/arm/mach-cns3xxx/cns3420vb.c @@ -31,9 +31,8 @@  #include <asm/mach/arch.h>  #include <asm/mach/map.h>  #include <asm/mach/time.h> -#include <mach/cns3xxx.h> -#include <mach/irqs.h> -#include <mach/pm.h> +#include "cns3xxx.h" +#include "pm.h"  #include "core.h"  #include "devices.h" @@ -247,6 +246,7 @@ static void __init cns3420_map_io(void)  MACHINE_START(CNS3420VB, "Cavium Networks CNS3420 Validation Board")  	.atag_offset	= 0x100, +	.nr_irqs	= NR_IRQS_CNS3XXX,  	.map_io		= cns3420_map_io,  	.init_irq	= cns3xxx_init_irq,  	.init_time	= cns3xxx_timer_init, diff --git a/arch/arm/mach-cns3xxx/include/mach/cns3xxx.h b/arch/arm/mach-cns3xxx/cns3xxx.h index 191c8e57f28..a0f5b60662a 100644 --- a/arch/arm/mach-cns3xxx/include/mach/cns3xxx.h +++ b/arch/arm/mach-cns3xxx/cns3xxx.h @@ -20,22 +20,16 @@  #define CNS3XXX_SPI_FLASH_BASE			0x60000000	/* SPI Serial Flash Memory */  #define CNS3XXX_SWITCH_BASE			0x70000000	/* Switch and HNAT Control */ -#define CNS3XXX_SWITCH_BASE_VIRT		0xFFF00000  #define CNS3XXX_PPE_BASE			0x70001000	/* HANT	*/ -#define CNS3XXX_PPE_BASE_VIRT			0xFFF50000  #define CNS3XXX_EMBEDDED_SRAM_BASE		0x70002000	/* HANT Embedded SRAM */ -#define CNS3XXX_EMBEDDED_SRAM_BASE_VIRT		0xFFF60000  #define CNS3XXX_SSP_BASE			0x71000000	/* Synchronous Serial Port - SPI/PCM/I2C */ -#define CNS3XXX_SSP_BASE_VIRT			0xFFF01000  #define CNS3XXX_DMC_BASE			0x72000000	/* DMC Control (DDR2 SDRAM) */ -#define CNS3XXX_DMC_BASE_VIRT			0xFFF02000  #define CNS3XXX_SMC_BASE			0x73000000	/* SMC Control */ -#define CNS3XXX_SMC_BASE_VIRT			0xFFF03000  #define SMC_MEMC_STATUS_OFFSET			0x000  #define SMC_MEMIF_CFG_OFFSET			0x004 @@ -74,13 +68,10 @@  #define SMC_PCELL_ID_3_OFFSET			0xFFC  #define CNS3XXX_GPIOA_BASE			0x74000000	/* GPIO port A */ -#define CNS3XXX_GPIOA_BASE_VIRT			0xFFF04000  #define CNS3XXX_GPIOB_BASE			0x74800000	/* GPIO port B */ -#define CNS3XXX_GPIOB_BASE_VIRT			0xFFF05000  #define CNS3XXX_RTC_BASE			0x75000000	/* Real Time Clock */ -#define CNS3XXX_RTC_BASE_VIRT			0xFFF06000  #define RTC_SEC_OFFSET				0x00  #define RTC_MIN_OFFSET				0x04 @@ -94,10 +85,10 @@  #define RTC_INTR_STS_OFFSET			0x34  #define CNS3XXX_MISC_BASE			0x76000000	/* Misc Control */ -#define CNS3XXX_MISC_BASE_VIRT			0xFFF07000	/* Misc Control */ +#define CNS3XXX_MISC_BASE_VIRT			0xFB000000	/* Misc Control */  #define CNS3XXX_PM_BASE				0x77000000	/* Power Management Control */ -#define CNS3XXX_PM_BASE_VIRT			0xFFF08000 +#define CNS3XXX_PM_BASE_VIRT			0xFB001000  #define PM_CLK_GATE_OFFSET			0x00  #define PM_SOFT_RST_OFFSET			0x04 @@ -109,28 +100,22 @@  #define PM_PLL_HM_PD_OFFSET			0x1C  #define CNS3XXX_UART0_BASE			0x78000000	/* UART 0 */ -#define CNS3XXX_UART0_BASE_VIRT			0xFFF09000 +#define CNS3XXX_UART0_BASE_VIRT			0xFB002000  #define CNS3XXX_UART1_BASE			0x78400000	/* UART 1 */ -#define CNS3XXX_UART1_BASE_VIRT			0xFFF0A000  #define CNS3XXX_UART2_BASE			0x78800000	/* UART 2 */ -#define CNS3XXX_UART2_BASE_VIRT			0xFFF0B000  #define CNS3XXX_DMAC_BASE			0x79000000	/* Generic DMA Control */ -#define CNS3XXX_DMAC_BASE_VIRT			0xFFF0D000  #define CNS3XXX_CORESIGHT_BASE			0x7A000000	/* CoreSight */ -#define CNS3XXX_CORESIGHT_BASE_VIRT		0xFFF0E000  #define CNS3XXX_CRYPTO_BASE			0x7B000000	/* Crypto */ -#define CNS3XXX_CRYPTO_BASE_VIRT		0xFFF0F000  #define CNS3XXX_I2S_BASE			0x7C000000	/* I2S */ -#define CNS3XXX_I2S_BASE_VIRT			0xFFF10000  #define CNS3XXX_TIMER1_2_3_BASE			0x7C800000	/* Timer */ -#define CNS3XXX_TIMER1_2_3_BASE_VIRT		0xFFF10800 +#define CNS3XXX_TIMER1_2_3_BASE_VIRT		0xFB003000  #define TIMER1_COUNTER_OFFSET			0x00  #define TIMER1_AUTO_RELOAD_OFFSET		0x04 @@ -150,42 +135,31 @@  #define TIMER_FREERUN_CONTROL_OFFSET		0x44  #define CNS3XXX_HCIE_BASE			0x7D000000	/* HCIE Control */ -#define CNS3XXX_HCIE_BASE_VIRT			0xFFF30000  #define CNS3XXX_RAID_BASE			0x7E000000	/* RAID Control */ -#define CNS3XXX_RAID_BASE_VIRT			0xFFF12000  #define CNS3XXX_AXI_IXC_BASE			0x7F000000	/* AXI IXC */ -#define CNS3XXX_AXI_IXC_BASE_VIRT		0xFFF13000  #define CNS3XXX_CLCD_BASE			0x80000000	/* LCD Control */ -#define CNS3XXX_CLCD_BASE_VIRT			0xFFF14000  #define CNS3XXX_USBOTG_BASE			0x81000000	/* USB OTG Control */ -#define CNS3XXX_USBOTG_BASE_VIRT		0xFFF15000  #define CNS3XXX_USB_BASE			0x82000000	/* USB Host Control */  #define CNS3XXX_SATA2_BASE			0x83000000	/* SATA */  #define CNS3XXX_SATA2_SIZE			SZ_16M -#define CNS3XXX_SATA2_BASE_VIRT			0xFFF17000  #define CNS3XXX_CAMERA_BASE			0x84000000	/* Camera Interface */ -#define CNS3XXX_CAMERA_BASE_VIRT		0xFFF18000  #define CNS3XXX_SDIO_BASE			0x85000000	/* SDIO */ -#define CNS3XXX_SDIO_BASE_VIRT			0xFFF19000  #define CNS3XXX_I2S_TDM_BASE			0x86000000	/* I2S TDM */ -#define CNS3XXX_I2S_TDM_BASE_VIRT		0xFFF1A000  #define CNS3XXX_2DG_BASE			0x87000000	/* 2D Graphic Control */ -#define CNS3XXX_2DG_BASE_VIRT			0xFFF1B000  #define CNS3XXX_USB_OHCI_BASE			0x88000000	/* USB OHCI */  #define CNS3XXX_L2C_BASE			0x92000000	/* L2 Cache Control */ -#define CNS3XXX_L2C_BASE_VIRT			0xFFF27000  #define CNS3XXX_PCIE0_MEM_BASE			0xA0000000	/* PCIe Port 0 IO/Memory Space */  #define CNS3XXX_PCIE0_MEM_BASE_VIRT		0xE0000000 @@ -227,19 +201,18 @@   * Testchip peripheral and fpga gic regions   */  #define CNS3XXX_TC11MP_SCU_BASE			0x90000000	/* IRQ, Test chip */ -#define CNS3XXX_TC11MP_SCU_BASE_VIRT		0xFF000000 +#define CNS3XXX_TC11MP_SCU_BASE_VIRT		0xFB004000  #define CNS3XXX_TC11MP_GIC_CPU_BASE		0x90000100	/* Test chip interrupt controller CPU interface */ -#define CNS3XXX_TC11MP_GIC_CPU_BASE_VIRT	0xFF000100 +#define CNS3XXX_TC11MP_GIC_CPU_BASE_VIRT	(CNS3XXX_TC11MP_SCU_BASE_VIRT + 0x100)  #define CNS3XXX_TC11MP_TWD_BASE			0x90000600 -#define CNS3XXX_TC11MP_TWD_BASE_VIRT		0xFF000600 +#define CNS3XXX_TC11MP_TWD_BASE_VIRT		(CNS3XXX_TC11MP_SCU_BASE_VIRT + 0x600)  #define CNS3XXX_TC11MP_GIC_DIST_BASE		0x90001000	/* Test chip interrupt controller distributor */ -#define CNS3XXX_TC11MP_GIC_DIST_BASE_VIRT	0xFF001000 +#define CNS3XXX_TC11MP_GIC_DIST_BASE_VIRT	(CNS3XXX_TC11MP_SCU_BASE_VIRT + 0x1000)  #define CNS3XXX_TC11MP_L220_BASE		0x92002000	/* L220 registers */ -#define CNS3XXX_TC11MP_L220_BASE_VIRT		0xFF002000  /*   * Misc block @@ -553,6 +526,8 @@ int cns3xxx_cpu_clock(void);  /*   * ARM11 MPCore interrupt sources (primary GIC)   */ +#define IRQ_TC11MP_GIC_START	32 +  #define IRQ_CNS3XXX_PMU			(IRQ_TC11MP_GIC_START + 0)  #define IRQ_CNS3XXX_SDIO		(IRQ_TC11MP_GIC_START + 1)  #define IRQ_CNS3XXX_L2CC		(IRQ_TC11MP_GIC_START + 2) @@ -624,9 +599,4 @@ int cns3xxx_cpu_clock(void);  #define NR_IRQS_CNS3XXX			(IRQ_TC11MP_GIC_START + 64) -#if !defined(NR_IRQS) || (NR_IRQS < NR_IRQS_CNS3XXX) -#undef NR_IRQS -#define NR_IRQS				NR_IRQS_CNS3XXX -#endif -  #endif	/* __MACH_BOARD_CNS3XXX_H */ diff --git a/arch/arm/mach-cns3xxx/core.c b/arch/arm/mach-cns3xxx/core.c index e698f26cc0c..e38b279f402 100644 --- a/arch/arm/mach-cns3xxx/core.c +++ b/arch/arm/mach-cns3xxx/core.c @@ -13,28 +13,24 @@  #include <linux/clockchips.h>  #include <linux/io.h>  #include <linux/irqchip/arm-gic.h> +#include <linux/of_platform.h> +#include <linux/platform_device.h> +#include <linux/usb/ehci_pdriver.h> +#include <linux/usb/ohci_pdriver.h> +#include <asm/mach/arch.h>  #include <asm/mach/map.h>  #include <asm/mach/time.h>  #include <asm/mach/irq.h>  #include <asm/hardware/cache-l2x0.h> -#include <mach/cns3xxx.h> +#include "cns3xxx.h"  #include "core.h" +#include "pm.h"  static struct map_desc cns3xxx_io_desc[] __initdata = {  	{ -		.virtual	= CNS3XXX_TC11MP_TWD_BASE_VIRT, -		.pfn		= __phys_to_pfn(CNS3XXX_TC11MP_TWD_BASE), -		.length		= SZ_4K, -		.type		= MT_DEVICE, -	}, { -		.virtual	= CNS3XXX_TC11MP_GIC_CPU_BASE_VIRT, -		.pfn		= __phys_to_pfn(CNS3XXX_TC11MP_GIC_CPU_BASE), -		.length		= SZ_4K, -		.type		= MT_DEVICE, -	}, { -		.virtual	= CNS3XXX_TC11MP_GIC_DIST_BASE_VIRT, -		.pfn		= __phys_to_pfn(CNS3XXX_TC11MP_GIC_DIST_BASE), -		.length		= SZ_4K, +		.virtual	= CNS3XXX_TC11MP_SCU_BASE_VIRT, +		.pfn		= __phys_to_pfn(CNS3XXX_TC11MP_SCU_BASE), +		.length		= SZ_8K,  		.type		= MT_DEVICE,  	}, {  		.virtual	= CNS3XXX_TIMER1_2_3_BASE_VIRT, @@ -42,16 +38,6 @@ static struct map_desc cns3xxx_io_desc[] __initdata = {  		.length		= SZ_4K,  		.type		= MT_DEVICE,  	}, { -		.virtual	= CNS3XXX_GPIOA_BASE_VIRT, -		.pfn		= __phys_to_pfn(CNS3XXX_GPIOA_BASE), -		.length		= SZ_4K, -		.type		= MT_DEVICE, -	}, { -		.virtual	= CNS3XXX_GPIOB_BASE_VIRT, -		.pfn		= __phys_to_pfn(CNS3XXX_GPIOB_BASE), -		.length		= SZ_4K, -		.type		= MT_DEVICE, -	}, {  		.virtual	= CNS3XXX_MISC_BASE_VIRT,  		.pfn		= __phys_to_pfn(CNS3XXX_MISC_BASE),  		.length		= SZ_4K, @@ -276,3 +262,116 @@ void __init cns3xxx_l2x0_init(void)  }  #endif /* CONFIG_CACHE_L2X0 */ + +static int csn3xxx_usb_power_on(struct platform_device *pdev) +{ +	/* +	 * EHCI and OHCI share the same clock and power, +	 * resetting twice would cause the 1st controller been reset. +	 * Therefore only do power up  at the first up device, and +	 * power down at the last down device. +	 * +	 * Set USB AHB INCR length to 16 +	 */ +	if (atomic_inc_return(&usb_pwr_ref) == 1) { +		cns3xxx_pwr_power_up(1 << PM_PLL_HM_PD_CTRL_REG_OFFSET_PLL_USB); +		cns3xxx_pwr_clk_en(1 << PM_CLK_GATE_REG_OFFSET_USB_HOST); +		cns3xxx_pwr_soft_rst(1 << PM_SOFT_RST_REG_OFFST_USB_HOST); +		__raw_writel((__raw_readl(MISC_CHIP_CONFIG_REG) | (0X2 << 24)), +			MISC_CHIP_CONFIG_REG); +	} + +	return 0; +} + +static void csn3xxx_usb_power_off(struct platform_device *pdev) +{ +	/* +	 * EHCI and OHCI share the same clock and power, +	 * resetting twice would cause the 1st controller been reset. +	 * Therefore only do power up  at the first up device, and +	 * power down at the last down device. +	 */ +	if (atomic_dec_return(&usb_pwr_ref) == 0) +		cns3xxx_pwr_clk_dis(1 << PM_CLK_GATE_REG_OFFSET_USB_HOST); +} + +static struct usb_ehci_pdata cns3xxx_usb_ehci_pdata = { +	.power_on	= csn3xxx_usb_power_on, +	.power_off	= csn3xxx_usb_power_off, +}; + +static struct usb_ohci_pdata cns3xxx_usb_ohci_pdata = { +	.num_ports	= 1, +	.power_on	= csn3xxx_usb_power_on, +	.power_off	= csn3xxx_usb_power_off, +}; + +static struct of_dev_auxdata cns3xxx_auxdata[] __initconst = { +	{ "intel,usb-ehci", CNS3XXX_USB_BASE, "ehci-platform", &cns3xxx_usb_ehci_pdata }, +	{ "intel,usb-ohci", CNS3XXX_USB_OHCI_BASE, "ohci-platform", &cns3xxx_usb_ohci_pdata }, +	{ "cavium,cns3420-ahci", CNS3XXX_SATA2_BASE, "ahci", NULL }, +	{ "cavium,cns3420-sdhci", CNS3XXX_SDIO_BASE, "ahci", NULL }, +	{}, +}; + +static void __init cns3xxx_init(void) +{ +	struct device_node *dn; + +	cns3xxx_l2x0_init(); + +	dn = of_find_compatible_node(NULL, NULL, "cavium,cns3420-ahci"); +	if (of_device_is_available(dn)) { +		u32 tmp; +	 +		tmp = __raw_readl(MISC_SATA_POWER_MODE); +		tmp |= 0x1 << 16; /* Disable SATA PHY 0 from SLUMBER Mode */ +		tmp |= 0x1 << 17; /* Disable SATA PHY 1 from SLUMBER Mode */ +		__raw_writel(tmp, MISC_SATA_POWER_MODE); +	 +		/* Enable SATA PHY */ +		cns3xxx_pwr_power_up(0x1 << PM_PLL_HM_PD_CTRL_REG_OFFSET_SATA_PHY0); +		cns3xxx_pwr_power_up(0x1 << PM_PLL_HM_PD_CTRL_REG_OFFSET_SATA_PHY1); +	 +		/* Enable SATA Clock */ +		cns3xxx_pwr_clk_en(0x1 << PM_CLK_GATE_REG_OFFSET_SATA); +	 +		/* De-Asscer SATA Reset */ +		cns3xxx_pwr_soft_rst(CNS3XXX_PWR_SOFTWARE_RST(SATA)); +	} + +	dn = of_find_compatible_node(NULL, NULL, "cavium,cns3420-sdhci"); +	if (of_device_is_available(dn)) { +		u32 __iomem *gpioa = IOMEM(CNS3XXX_MISC_BASE_VIRT + 0x0014); +		u32 gpioa_pins = __raw_readl(gpioa); +	 +		/* MMC/SD pins share with GPIOA */ +		gpioa_pins |= 0x1fff0004; +		__raw_writel(gpioa_pins, gpioa); +	 +		cns3xxx_pwr_clk_en(CNS3XXX_PWR_CLK_EN(SDIO)); +		cns3xxx_pwr_soft_rst(CNS3XXX_PWR_SOFTWARE_RST(SDIO)); +	} + +	pm_power_off = cns3xxx_power_off; + +	of_platform_populate(NULL, of_default_bus_match_table, +                        cns3xxx_auxdata, NULL); +} + +static const char *cns3xxx_dt_compat[] __initdata = { +	"cavium,cns3410", +	"cavium,cns3420", +	NULL, +}; + +DT_MACHINE_START(CNS3XXX_DT, "Cavium Networks CNS3xxx") +	.dt_compat	= cns3xxx_dt_compat, +	.nr_irqs	= NR_IRQS_CNS3XXX, +	.map_io		= cns3xxx_map_io, +	.init_irq	= cns3xxx_init_irq, +	.init_time	= cns3xxx_timer_init, +	.init_machine	= cns3xxx_init, +	.restart	= cns3xxx_restart, +MACHINE_END diff --git a/arch/arm/mach-cns3xxx/devices.c b/arch/arm/mach-cns3xxx/devices.c index 1e40c99b015..7da78a2451f 100644 --- a/arch/arm/mach-cns3xxx/devices.c +++ b/arch/arm/mach-cns3xxx/devices.c @@ -16,9 +16,8 @@  #include <linux/compiler.h>  #include <linux/dma-mapping.h>  #include <linux/platform_device.h> -#include <mach/cns3xxx.h> -#include <mach/irqs.h> -#include <mach/pm.h> +#include "cns3xxx.h" +#include "pm.h"  #include "core.h"  #include "devices.h" diff --git a/arch/arm/mach-cns3xxx/include/mach/irqs.h b/arch/arm/mach-cns3xxx/include/mach/irqs.h deleted file mode 100644 index 2ab96f8085c..00000000000 --- a/arch/arm/mach-cns3xxx/include/mach/irqs.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2000 Deep Blue Solutions Ltd. - * Copyright 2003 ARM Limited - * Copyright 2008 Cavium Networks - * - * This file 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. - */ - -#ifndef __MACH_IRQS_H -#define __MACH_IRQS_H - -#define IRQ_LOCALTIMER		29 -#define IRQ_LOCALWDOG		30 -#define IRQ_TC11MP_GIC_START	32 - -#include <mach/cns3xxx.h> - -#ifndef NR_IRQS -#error "NR_IRQS not defined by the board-specific files" -#endif - -#endif diff --git a/arch/arm/mach-cns3xxx/include/mach/timex.h b/arch/arm/mach-cns3xxx/include/mach/timex.h deleted file mode 100644 index 1fd04217cac..00000000000 --- a/arch/arm/mach-cns3xxx/include/mach/timex.h +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Cavium Networks architecture timex specifications - * - * Copyright 2003 ARM Limited - * Copyright 2008 Cavium Networks - * - * This file 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. - */ - -#define CLOCK_TICK_RATE		(50000000 / 16) diff --git a/arch/arm/mach-cns3xxx/include/mach/uncompress.h b/arch/arm/mach-cns3xxx/include/mach/uncompress.h deleted file mode 100644 index 7a030b99df8..00000000000 --- a/arch/arm/mach-cns3xxx/include/mach/uncompress.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2003 ARM Limited - * Copyright 2008 Cavium Networks - * - * This file 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 <asm/mach-types.h> -#include <mach/cns3xxx.h> - -#define AMBA_UART_DR(base)	(*(volatile unsigned char *)((base) + 0x00)) -#define AMBA_UART_LCRH(base)	(*(volatile unsigned char *)((base) + 0x2c)) -#define AMBA_UART_CR(base)	(*(volatile unsigned char *)((base) + 0x30)) -#define AMBA_UART_FR(base)	(*(volatile unsigned char *)((base) + 0x18)) - -/* - * Return the UART base address - */ -static inline unsigned long get_uart_base(void) -{ -	if (machine_is_cns3420vb()) -		return CNS3XXX_UART0_BASE; -	else -		return 0; -} - -/* - * This does not append a newline - */ -static inline void putc(int c) -{ -	unsigned long base = get_uart_base(); - -	while (AMBA_UART_FR(base) & (1 << 5)) -		barrier(); - -	AMBA_UART_DR(base) = c; -} - -static inline void flush(void) -{ -	unsigned long base = get_uart_base(); - -	while (AMBA_UART_FR(base) & (1 << 3)) -		barrier(); -} - -/* - * nothing to do - */ -#define arch_decomp_setup() diff --git a/arch/arm/mach-cns3xxx/pcie.c b/arch/arm/mach-cns3xxx/pcie.c index 31132831416..c7b204bff38 100644 --- a/arch/arm/mach-cns3xxx/pcie.c +++ b/arch/arm/mach-cns3xxx/pcie.c @@ -20,7 +20,7 @@  #include <linux/interrupt.h>  #include <linux/ptrace.h>  #include <asm/mach/map.h> -#include <mach/cns3xxx.h> +#include "cns3xxx.h"  #include "core.h"  enum cns3xxx_access_type { diff --git a/arch/arm/mach-cns3xxx/pm.c b/arch/arm/mach-cns3xxx/pm.c index 36458080332..79e3d47aad6 100644 --- a/arch/arm/mach-cns3xxx/pm.c +++ b/arch/arm/mach-cns3xxx/pm.c @@ -11,8 +11,8 @@  #include <linux/io.h>  #include <linux/delay.h>  #include <linux/atomic.h> -#include <mach/cns3xxx.h> -#include <mach/pm.h> +#include "cns3xxx.h" +#include "pm.h"  #include "core.h"  void cns3xxx_pwr_clk_en(unsigned int block) diff --git a/arch/arm/mach-cns3xxx/include/mach/pm.h b/arch/arm/mach-cns3xxx/pm.h index c2588cc991d..c2588cc991d 100644 --- a/arch/arm/mach-cns3xxx/include/mach/pm.h +++ b/arch/arm/mach-cns3xxx/pm.h diff --git a/arch/arm/mach-davinci/Makefile b/arch/arm/mach-davinci/Makefile index fb5c1aa98a6..dd1ffccc75e 100644 --- a/arch/arm/mach-davinci/Makefile +++ b/arch/arm/mach-davinci/Makefile @@ -37,7 +37,6 @@ obj-$(CONFIG_MACH_MITYOMAPL138)		+= board-mityomapl138.o  obj-$(CONFIG_MACH_OMAPL138_HAWKBOARD)	+= board-omapl138-hawk.o  # Power Management -obj-$(CONFIG_CPU_FREQ)			+= cpufreq.o  obj-$(CONFIG_CPU_IDLE)			+= cpuidle.o  obj-$(CONFIG_SUSPEND)			+= pm.o sleep.o  obj-$(CONFIG_HAVE_CLK)			+= pm_domain.o diff --git a/arch/arm/mach-davinci/board-da830-evm.c b/arch/arm/mach-davinci/board-da830-evm.c index 6da25eebf91..12e6f756361 100644 --- a/arch/arm/mach-davinci/board-da830-evm.c +++ b/arch/arm/mach-davinci/board-da830-evm.c @@ -246,7 +246,6 @@ static struct davinci_mmc_config da830_evm_mmc_config = {  	.wires			= 8,  	.max_freq		= 50000000,  	.caps			= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED, -	.version		= MMC_CTLR_VERSION_2,  };  static inline void da830_evm_init_mmc(void) diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c index c2dfe06563d..dcc8710936a 100644 --- a/arch/arm/mach-davinci/board-da850-evm.c +++ b/arch/arm/mach-davinci/board-da850-evm.c @@ -802,7 +802,6 @@ static struct davinci_mmc_config da850_mmc_config = {  	.wires		= 4,  	.max_freq	= 50000000,  	.caps		= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED, -	.version	= MMC_CTLR_VERSION_2,  };  static const short da850_evm_mmcsd0_pins[] __initconst = { @@ -1372,7 +1371,6 @@ static struct davinci_mmc_config da850_wl12xx_mmc_config = {  	.max_freq	= 25000000,  	.caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_NONREMOVABLE |  			  MMC_CAP_POWER_OFF_CARD, -	.version	= MMC_CTLR_VERSION_2,  };  static const short da850_wl12xx_pins[] __initconst = { diff --git a/arch/arm/mach-davinci/board-dm355-evm.c b/arch/arm/mach-davinci/board-dm355-evm.c index 147b8e1a440..c2a0a67d09e 100644 --- a/arch/arm/mach-davinci/board-dm355-evm.c +++ b/arch/arm/mach-davinci/board-dm355-evm.c @@ -242,6 +242,73 @@ static struct vpfe_config vpfe_cfg = {  	.ccdc = "DM355 CCDC",  }; +/* venc standards timings */ +static struct vpbe_enc_mode_info dm355evm_enc_preset_timing[] = { +	{ +		.name		= "ntsc", +		.timings_type	= VPBE_ENC_STD, +		.std_id		= V4L2_STD_NTSC, +		.interlaced	= 1, +		.xres		= 720, +		.yres		= 480, +		.aspect		= {11, 10}, +		.fps		= {30000, 1001}, +		.left_margin	= 0x79, +		.upper_margin	= 0x10, +	}, +	{ +		.name		= "pal", +		.timings_type	= VPBE_ENC_STD, +		.std_id		= V4L2_STD_PAL, +		.interlaced	= 1, +		.xres		= 720, +		.yres		= 576, +		.aspect		= {54, 59}, +		.fps		= {25, 1}, +		.left_margin	= 0x7E, +		.upper_margin	= 0x16 +	}, +}; + +#define VENC_STD_ALL	(V4L2_STD_NTSC | V4L2_STD_PAL) + +/* + * The outputs available from VPBE + ecnoders. Keep the + * the order same as that of encoders. First those from venc followed by that + * from encoders. Index in the output refers to index on a particular encoder. + * Driver uses this index to pass it to encoder when it supports more than + * one output. Application uses index of the array to set an output. + */ +static struct vpbe_output dm355evm_vpbe_outputs[] = { +	{ +		.output		= { +			.index		= 0, +			.name		= "Composite", +			.type		= V4L2_OUTPUT_TYPE_ANALOG, +			.std		= VENC_STD_ALL, +			.capabilities	= V4L2_OUT_CAP_STD, +		}, +		.subdev_name	= DM355_VPBE_VENC_SUBDEV_NAME, +		.default_mode	= "ntsc", +		.num_modes	= ARRAY_SIZE(dm355evm_enc_preset_timing), +		.modes		= dm355evm_enc_preset_timing, +		.if_params	= V4L2_MBUS_FMT_FIXED, +	}, +}; + +static struct vpbe_config dm355evm_display_cfg = { +	.module_name	= "dm355-vpbe-display", +	.i2c_adapter_id	= 1, +	.osd		= { +		.module_name	= DM355_VPBE_OSD_SUBDEV_NAME, +	}, +	.venc		= { +		.module_name	= DM355_VPBE_VENC_SUBDEV_NAME, +	}, +	.num_outputs	= ARRAY_SIZE(dm355evm_vpbe_outputs), +	.outputs	= dm355evm_vpbe_outputs, +}; +  static struct platform_device *davinci_evm_devices[] __initdata = {  	&dm355evm_dm9000,  	&davinci_nand_device, @@ -253,8 +320,6 @@ static struct davinci_uart_config uart_config __initdata = {  static void __init dm355_evm_map_io(void)  { -	/* setup input configuration for VPFE input devices */ -	dm355_set_vpfe_config(&vpfe_cfg);  	dm355_init();  } @@ -280,7 +345,6 @@ static struct davinci_mmc_config dm355evm_mmc_config = {  	.wires		= 4,  	.max_freq       = 50000000,  	.caps           = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED, -	.version	= MMC_CTLR_VERSION_1,  };  /* Don't connect anything to J10 unless you're only using USB host @@ -344,6 +408,8 @@ static __init void dm355_evm_init(void)  	davinci_setup_mmc(0, &dm355evm_mmc_config);  	davinci_setup_mmc(1, &dm355evm_mmc_config); +	dm355_init_video(&vpfe_cfg, &dm355evm_display_cfg); +  	dm355_init_spi0(BIT(0), dm355_evm_spi_info,  			ARRAY_SIZE(dm355_evm_spi_info)); diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c index c2d4958a0cb..fd38c8d22e3 100644 --- a/arch/arm/mach-davinci/board-dm365-evm.c +++ b/arch/arm/mach-davinci/board-dm365-evm.c @@ -27,6 +27,7 @@  #include <linux/input.h>  #include <linux/spi/spi.h>  #include <linux/spi/eeprom.h> +#include <linux/v4l2-dv-timings.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> @@ -39,6 +40,7 @@  #include <linux/platform_data/mtd-davinci.h>  #include <linux/platform_data/keyscan-davinci.h> +#include <media/ths7303.h>  #include <media/tvp514x.h>  #include "davinci.h" @@ -253,7 +255,6 @@ static struct davinci_mmc_config dm365evm_mmc_config = {  	.wires		= 4,  	.max_freq	= 50000000,  	.caps		= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED, -	.version	= MMC_CTLR_VERSION_2,  };  static void dm365evm_emac_configure(void) @@ -374,6 +375,166 @@ static struct vpfe_config vpfe_cfg = {  	.ccdc = "ISIF",  }; +/* venc standards timings */ +static struct vpbe_enc_mode_info dm365evm_enc_std_timing[] = { +	{ +		.name		= "ntsc", +		.timings_type	= VPBE_ENC_STD, +		.std_id		= V4L2_STD_NTSC, +		.interlaced	= 1, +		.xres		= 720, +		.yres		= 480, +		.aspect		= {11, 10}, +		.fps		= {30000, 1001}, +		.left_margin	= 0x79, +		.upper_margin	= 0x10, +	}, +	{ +		.name		= "pal", +		.timings_type	= VPBE_ENC_STD, +		.std_id		= V4L2_STD_PAL, +		.interlaced	= 1, +		.xres		= 720, +		.yres		= 576, +		.aspect		= {54, 59}, +		.fps		= {25, 1}, +		.left_margin	= 0x7E, +		.upper_margin	= 0x16, +	}, +}; + +/* venc dv timings */ +static struct vpbe_enc_mode_info dm365evm_enc_preset_timing[] = { +	{ +		.name		= "480p59_94", +		.timings_type	= VPBE_ENC_DV_TIMINGS, +		.dv_timings	= V4L2_DV_BT_CEA_720X480P59_94, +		.interlaced	= 0, +		.xres		= 720, +		.yres		= 480, +		.aspect		= {1, 1}, +		.fps		= {5994, 100}, +		.left_margin	= 0x8F, +		.upper_margin	= 0x2D, +	}, +	{ +		.name		= "576p50", +		.timings_type	= VPBE_ENC_DV_TIMINGS, +		.dv_timings	= V4L2_DV_BT_CEA_720X576P50, +		.interlaced	= 0, +		.xres		= 720, +		.yres		= 576, +		.aspect		= {1, 1}, +		.fps		= {50, 1}, +		.left_margin	= 0x8C, +		.upper_margin   = 0x36, +	}, +	{ +		.name		= "720p60", +		.timings_type	= VPBE_ENC_DV_TIMINGS, +		.dv_timings	= V4L2_DV_BT_CEA_1280X720P60, +		.interlaced	= 0, +		.xres		= 1280, +		.yres		= 720, +		.aspect		= {1, 1}, +		.fps		= {60, 1}, +		.left_margin	= 0x117, +		.right_margin	= 70, +		.upper_margin	= 38, +		.lower_margin	= 3, +		.hsync_len	= 80, +		.vsync_len	= 5, +	}, +	{ +		.name		= "1080i60", +		.timings_type	= VPBE_ENC_DV_TIMINGS, +		.dv_timings	= V4L2_DV_BT_CEA_1920X1080I60, +		.interlaced	= 1, +		.xres		= 1920, +		.yres		= 1080, +		.aspect		= {1, 1}, +		.fps		= {30, 1}, +		.left_margin	= 0xc9, +		.right_margin	= 80, +		.upper_margin	= 30, +		.lower_margin	= 3, +		.hsync_len	= 88, +		.vsync_len	= 5, +	}, +}; + +#define VENC_STD_ALL	(V4L2_STD_NTSC | V4L2_STD_PAL) + +/* + * The outputs available from VPBE + ecnoders. Keep the + * the order same as that of encoders. First those from venc followed by that + * from encoders. Index in the output refers to index on a particular + * encoder.Driver uses this index to pass it to encoder when it supports more + * than one output. Application uses index of the array to set an output. + */ +static struct vpbe_output dm365evm_vpbe_outputs[] = { +	{ +		.output		= { +			.index		= 0, +			.name		= "Composite", +			.type		= V4L2_OUTPUT_TYPE_ANALOG, +			.std		= VENC_STD_ALL, +			.capabilities	= V4L2_OUT_CAP_STD, +		}, +		.subdev_name	= DM365_VPBE_VENC_SUBDEV_NAME, +		.default_mode	= "ntsc", +		.num_modes	= ARRAY_SIZE(dm365evm_enc_std_timing), +		.modes		= dm365evm_enc_std_timing, +		.if_params	= V4L2_MBUS_FMT_FIXED, +	}, +	{ +		.output		= { +			.index		= 1, +			.name		= "Component", +			.type		= V4L2_OUTPUT_TYPE_ANALOG, +			.capabilities	= V4L2_OUT_CAP_DV_TIMINGS, +		}, +		.subdev_name	= DM365_VPBE_VENC_SUBDEV_NAME, +		.default_mode	= "480p59_94", +		.num_modes	= ARRAY_SIZE(dm365evm_enc_preset_timing), +		.modes		= dm365evm_enc_preset_timing, +		.if_params	= V4L2_MBUS_FMT_FIXED, +	}, +}; + +/* + * Amplifiers on the board + */ +struct ths7303_platform_data ths7303_pdata = { +	.ch_1 = 3, +	.ch_2 = 3, +	.ch_3 = 3, +	.init_enable = 1, +}; + +static struct amp_config_info vpbe_amp = { +	.module_name	= "ths7303", +	.is_i2c		= 1, +	.board_info	= { +		I2C_BOARD_INFO("ths7303", 0x2c), +		.platform_data = &ths7303_pdata, +	} +}; + +static struct vpbe_config dm365evm_display_cfg = { +	.module_name	= "dm365-vpbe-display", +	.i2c_adapter_id	= 1, +	.amp		= &vpbe_amp, +	.osd		= { +		.module_name	= DM365_VPBE_OSD_SUBDEV_NAME, +	}, +	.venc		= { +		.module_name	= DM365_VPBE_VENC_SUBDEV_NAME, +	}, +	.num_outputs	= ARRAY_SIZE(dm365evm_vpbe_outputs), +	.outputs	= dm365evm_vpbe_outputs, +}; +  static void __init evm_init_i2c(void)  {  	davinci_init_i2c(&i2c_pdata); @@ -564,8 +725,6 @@ static struct davinci_uart_config uart_config __initdata = {  static void __init dm365_evm_map_io(void)  { -	/* setup input configuration for VPFE input devices */ -	dm365_set_vpfe_config(&vpfe_cfg);  	dm365_init();  } @@ -597,6 +756,8 @@ static __init void dm365_evm_init(void)  	davinci_setup_mmc(0, &dm365evm_mmc_config); +	dm365_init_video(&vpfe_cfg, &dm365evm_display_cfg); +  	/* maybe setup mmc1/etc ... _after_ mmc0 */  	evm_init_cpld(); diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c index 71735e7797c..e62108fd792 100644 --- a/arch/arm/mach-davinci/board-dm644x-evm.c +++ b/arch/arm/mach-davinci/board-dm644x-evm.c @@ -570,7 +570,6 @@ static struct davinci_mmc_config dm6446evm_mmc_config = {  	.get_cd		= dm6444evm_mmc_get_cd,  	.get_ro		= dm6444evm_mmc_get_ro,  	.wires		= 4, -	.version	= MMC_CTLR_VERSION_1  };  static struct i2c_board_info __initdata i2c_info[] =  { @@ -622,7 +621,7 @@ static struct vpbe_enc_mode_info dm644xevm_enc_std_timing[] = {  	{  		.name		= "ntsc",  		.timings_type	= VPBE_ENC_STD, -		.std_id		= V4L2_STD_525_60, +		.std_id		= V4L2_STD_NTSC,  		.interlaced	= 1,  		.xres		= 720,  		.yres		= 480, @@ -634,7 +633,7 @@ static struct vpbe_enc_mode_info dm644xevm_enc_std_timing[] = {  	{  		.name		= "pal",  		.timings_type	= VPBE_ENC_STD, -		.std_id		= V4L2_STD_625_50, +		.std_id		= V4L2_STD_PAL,  		.interlaced	= 1,  		.xres		= 720,  		.yres		= 576, @@ -649,7 +648,7 @@ static struct vpbe_enc_mode_info dm644xevm_enc_std_timing[] = {  static struct vpbe_enc_mode_info dm644xevm_enc_preset_timing[] = {  	{  		.name		= "480p59_94", -		.timings_type	= VPBE_ENC_CUSTOM_TIMINGS, +		.timings_type	= VPBE_ENC_DV_TIMINGS,  		.dv_timings	= V4L2_DV_BT_CEA_720X480P59_94,  		.interlaced	= 0,  		.xres		= 720, @@ -661,7 +660,7 @@ static struct vpbe_enc_mode_info dm644xevm_enc_preset_timing[] = {  	},  	{  		.name		= "576p50", -		.timings_type	= VPBE_ENC_CUSTOM_TIMINGS, +		.timings_type	= VPBE_ENC_DV_TIMINGS,  		.dv_timings	= V4L2_DV_BT_CEA_720X576P50,  		.interlaced	= 0,  		.xres		= 720, diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c b/arch/arm/mach-davinci/board-dm646x-evm.c index de7adff324d..fc4871ac1c2 100644 --- a/arch/arm/mach-davinci/board-dm646x-evm.c +++ b/arch/arm/mach-davinci/board-dm646x-evm.c @@ -514,7 +514,7 @@ static const struct vpif_output dm6467_ch0_outputs[] = {  			.index = 1,  			.name = "Component",  			.type = V4L2_OUTPUT_TYPE_ANALOG, -			.capabilities = V4L2_OUT_CAP_CUSTOM_TIMINGS, +			.capabilities = V4L2_OUT_CAP_DV_TIMINGS,  		},  		.subdev_name = "adv7343",  		.output_route = ADV7343_COMPONENT_ID, diff --git a/arch/arm/mach-davinci/board-neuros-osd2.c b/arch/arm/mach-davinci/board-neuros-osd2.c index 1c98107527f..b70e83c03be 100644 --- a/arch/arm/mach-davinci/board-neuros-osd2.c +++ b/arch/arm/mach-davinci/board-neuros-osd2.c @@ -164,7 +164,6 @@ static void __init davinci_ntosd2_map_io(void)  static struct davinci_mmc_config davinci_ntosd2_mmc_config = {  	.wires		= 4, -	.version	= MMC_CTLR_VERSION_1  }; diff --git a/arch/arm/mach-davinci/board-omapl138-hawk.c b/arch/arm/mach-davinci/board-omapl138-hawk.c index 5a2bd44da54..328dbd8a37f 100644 --- a/arch/arm/mach-davinci/board-omapl138-hawk.c +++ b/arch/arm/mach-davinci/board-omapl138-hawk.c @@ -136,7 +136,6 @@ static struct davinci_mmc_config da850_mmc_config = {  	.wires		= 4,  	.max_freq	= 50000000,  	.caps		= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED, -	.version	= MMC_CTLR_VERSION_2,  };  static __init void omapl138_hawk_mmc_init(void) diff --git a/arch/arm/mach-davinci/board-tnetv107x-evm.c b/arch/arm/mach-davinci/board-tnetv107x-evm.c index 4f416023d4e..ba798370fc9 100644 --- a/arch/arm/mach-davinci/board-tnetv107x-evm.c +++ b/arch/arm/mach-davinci/board-tnetv107x-evm.c @@ -85,7 +85,6 @@ static struct davinci_mmc_config mmc_config = {  	.wires		= 4,  	.max_freq	= 50000000,  	.caps		= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED, -	.version	= MMC_CTLR_VERSION_1,  };  static const short sdio1_pins[] __initconst = { diff --git a/arch/arm/mach-davinci/clock.c b/arch/arm/mach-davinci/clock.c index d458558ee84..dc9a470ff9c 100644 --- a/arch/arm/mach-davinci/clock.c +++ b/arch/arm/mach-davinci/clock.c @@ -35,19 +35,26 @@ static void __clk_enable(struct clk *clk)  {  	if (clk->parent)  		__clk_enable(clk->parent); -	if (clk->usecount++ == 0 && (clk->flags & CLK_PSC)) -		davinci_psc_config(clk->domain, clk->gpsc, clk->lpsc, -				true, clk->flags); +	if (clk->usecount++ == 0) { +		if (clk->flags & CLK_PSC) +			davinci_psc_config(clk->domain, clk->gpsc, clk->lpsc, +					   true, clk->flags); +		else if (clk->clk_enable) +			clk->clk_enable(clk); +	}  }  static void __clk_disable(struct clk *clk)  {  	if (WARN_ON(clk->usecount == 0))  		return; -	if (--clk->usecount == 0 && !(clk->flags & CLK_PLL) && -	    (clk->flags & CLK_PSC)) -		davinci_psc_config(clk->domain, clk->gpsc, clk->lpsc, -				false, clk->flags); +	if (--clk->usecount == 0) { +		if (!(clk->flags & CLK_PLL) && (clk->flags & CLK_PSC)) +			davinci_psc_config(clk->domain, clk->gpsc, clk->lpsc, +					   false, clk->flags); +		else if (clk->clk_disable) +			clk->clk_disable(clk); +	}  	if (clk->parent)  		__clk_disable(clk->parent);  } diff --git a/arch/arm/mach-davinci/clock.h b/arch/arm/mach-davinci/clock.h index 8694b395fc9..1e4e836173a 100644 --- a/arch/arm/mach-davinci/clock.h +++ b/arch/arm/mach-davinci/clock.h @@ -104,6 +104,8 @@ struct clk {  	int (*set_rate) (struct clk *clk, unsigned long rate);  	int (*round_rate) (struct clk *clk, unsigned long rate);  	int (*reset) (struct clk *clk, bool reset); +	void (*clk_enable) (struct clk *clk); +	void (*clk_disable) (struct clk *clk);  };  /* Clock flags: SoC-specific flags start at BIT(16) */ diff --git a/arch/arm/mach-davinci/cpufreq.c b/arch/arm/mach-davinci/cpufreq.c deleted file mode 100644 index 4729eaab0f4..00000000000 --- a/arch/arm/mach-davinci/cpufreq.c +++ /dev/null @@ -1,248 +0,0 @@ -/* - * CPU frequency scaling for DaVinci - * - * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ - * - * Based on linux/arch/arm/plat-omap/cpu-omap.c. Original Copyright follows: - * - *  Copyright (C) 2005 Nokia Corporation - *  Written by Tony Lindgren <tony@atomide.com> - * - *  Based on cpu-sa1110.c, Copyright (C) 2001 Russell King - * - * Copyright (C) 2007-2008 Texas Instruments, Inc. - * Updated to support OMAP3 - * Rajendra Nayak <rnayak@ti.com> - * - * 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/types.h> -#include <linux/cpufreq.h> -#include <linux/init.h> -#include <linux/err.h> -#include <linux/clk.h> -#include <linux/platform_device.h> -#include <linux/export.h> - -#include <mach/hardware.h> -#include <mach/cpufreq.h> -#include <mach/common.h> - -#include "clock.h" - -struct davinci_cpufreq { -	struct device *dev; -	struct clk *armclk; -	struct clk *asyncclk; -	unsigned long asyncrate; -}; -static struct davinci_cpufreq cpufreq; - -static int davinci_verify_speed(struct cpufreq_policy *policy) -{ -	struct davinci_cpufreq_config *pdata = cpufreq.dev->platform_data; -	struct cpufreq_frequency_table *freq_table = pdata->freq_table; -	struct clk *armclk = cpufreq.armclk; - -	if (freq_table) -		return cpufreq_frequency_table_verify(policy, freq_table); - -	if (policy->cpu) -		return -EINVAL; - -	cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, -				     policy->cpuinfo.max_freq); - -	policy->min = clk_round_rate(armclk, policy->min * 1000) / 1000; -	policy->max = clk_round_rate(armclk, policy->max * 1000) / 1000; -	cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, -						policy->cpuinfo.max_freq); -	return 0; -} - -static unsigned int davinci_getspeed(unsigned int cpu) -{ -	if (cpu) -		return 0; - -	return clk_get_rate(cpufreq.armclk) / 1000; -} - -static int davinci_target(struct cpufreq_policy *policy, -				unsigned int target_freq, unsigned int relation) -{ -	int ret = 0; -	unsigned int idx; -	struct cpufreq_freqs freqs; -	struct davinci_cpufreq_config *pdata = cpufreq.dev->platform_data; -	struct clk *armclk = cpufreq.armclk; - -	/* -	 * Ensure desired rate is within allowed range.  Some govenors -	 * (ondemand) will just pass target_freq=0 to get the minimum. -	 */ -	if (target_freq < policy->cpuinfo.min_freq) -		target_freq = policy->cpuinfo.min_freq; -	if (target_freq > policy->cpuinfo.max_freq) -		target_freq = policy->cpuinfo.max_freq; - -	freqs.old = davinci_getspeed(0); -	freqs.new = clk_round_rate(armclk, target_freq * 1000) / 1000; -	freqs.cpu = 0; - -	if (freqs.old == freqs.new) -		return ret; - -	dev_dbg(cpufreq.dev, "transition: %u --> %u\n", freqs.old, freqs.new); - -	ret = cpufreq_frequency_table_target(policy, pdata->freq_table, -						freqs.new, relation, &idx); -	if (ret) -		return -EINVAL; - -	cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); - -	/* if moving to higher frequency, up the voltage beforehand */ -	if (pdata->set_voltage && freqs.new > freqs.old) { -		ret = pdata->set_voltage(idx); -		if (ret) -			goto out; -	} - -	ret = clk_set_rate(armclk, idx); -	if (ret) -		goto out; - -	if (cpufreq.asyncclk) { -		ret = clk_set_rate(cpufreq.asyncclk, cpufreq.asyncrate); -		if (ret) -			goto out; -	} - -	/* if moving to lower freq, lower the voltage after lowering freq */ -	if (pdata->set_voltage && freqs.new < freqs.old) -		pdata->set_voltage(idx); - -out: -	cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); - -	return ret; -} - -static int davinci_cpu_init(struct cpufreq_policy *policy) -{ -	int result = 0; -	struct davinci_cpufreq_config *pdata = cpufreq.dev->platform_data; -	struct cpufreq_frequency_table *freq_table = pdata->freq_table; - -	if (policy->cpu != 0) -		return -EINVAL; - -	/* Finish platform specific initialization */ -	if (pdata->init) { -		result = pdata->init(); -		if (result) -			return result; -	} - -	policy->cur = policy->min = policy->max = davinci_getspeed(0); - -	if (freq_table) { -		result = cpufreq_frequency_table_cpuinfo(policy, freq_table); -		if (!result) -			cpufreq_frequency_table_get_attr(freq_table, -							policy->cpu); -	} else { -		policy->cpuinfo.min_freq = policy->min; -		policy->cpuinfo.max_freq = policy->max; -	} - -	policy->min = policy->cpuinfo.min_freq; -	policy->max = policy->cpuinfo.max_freq; -	policy->cur = davinci_getspeed(0); - -	/* -	 * Time measurement across the target() function yields ~1500-1800us -	 * time taken with no drivers on notification list. -	 * Setting the latency to 2000 us to accommodate addition of drivers -	 * to pre/post change notification list. -	 */ -	policy->cpuinfo.transition_latency = 2000 * 1000; -	return 0; -} - -static int davinci_cpu_exit(struct cpufreq_policy *policy) -{ -	cpufreq_frequency_table_put_attr(policy->cpu); -	return 0; -} - -static struct freq_attr *davinci_cpufreq_attr[] = { -	&cpufreq_freq_attr_scaling_available_freqs, -	NULL, -}; - -static struct cpufreq_driver davinci_driver = { -	.flags		= CPUFREQ_STICKY, -	.verify		= davinci_verify_speed, -	.target		= davinci_target, -	.get		= davinci_getspeed, -	.init		= davinci_cpu_init, -	.exit		= davinci_cpu_exit, -	.name		= "davinci", -	.attr		= davinci_cpufreq_attr, -}; - -static int __init davinci_cpufreq_probe(struct platform_device *pdev) -{ -	struct davinci_cpufreq_config *pdata = pdev->dev.platform_data; -	struct clk *asyncclk; - -	if (!pdata) -		return -EINVAL; -	if (!pdata->freq_table) -		return -EINVAL; - -	cpufreq.dev = &pdev->dev; - -	cpufreq.armclk = clk_get(NULL, "arm"); -	if (IS_ERR(cpufreq.armclk)) { -		dev_err(cpufreq.dev, "Unable to get ARM clock\n"); -		return PTR_ERR(cpufreq.armclk); -	} - -	asyncclk = clk_get(cpufreq.dev, "async"); -	if (!IS_ERR(asyncclk)) { -		cpufreq.asyncclk = asyncclk; -		cpufreq.asyncrate = clk_get_rate(asyncclk); -	} - -	return cpufreq_register_driver(&davinci_driver); -} - -static int __exit davinci_cpufreq_remove(struct platform_device *pdev) -{ -	clk_put(cpufreq.armclk); - -	if (cpufreq.asyncclk) -		clk_put(cpufreq.asyncclk); - -	return cpufreq_unregister_driver(&davinci_driver); -} - -static struct platform_driver davinci_cpufreq_driver = { -	.driver = { -		.name	 = "cpufreq-davinci", -		.owner	 = THIS_MODULE, -	}, -	.remove = __exit_p(davinci_cpufreq_remove), -}; - -int __init davinci_cpufreq_init(void) -{ -	return platform_driver_probe(&davinci_cpufreq_driver, -							davinci_cpufreq_probe); -} - diff --git a/arch/arm/mach-davinci/cpuidle.c b/arch/arm/mach-davinci/cpuidle.c index 5ac9e9384b1..36aef3a7ded 100644 --- a/arch/arm/mach-davinci/cpuidle.c +++ b/arch/arm/mach-davinci/cpuidle.c @@ -25,7 +25,6 @@  #define DAVINCI_CPUIDLE_MAX_STATES	2 -static DEFINE_PER_CPU(struct cpuidle_device, davinci_cpuidle_device);  static void __iomem *ddr2_reg_base;  static bool ddr2_pdown; @@ -50,14 +49,10 @@ static void davinci_save_ddr_power(int enter, bool pdown)  /* Actual code that puts the SoC in different idle states */  static int davinci_enter_idle(struct cpuidle_device *dev, -				struct cpuidle_driver *drv, -						int index) +			      struct cpuidle_driver *drv, int index)  {  	davinci_save_ddr_power(1, ddr2_pdown); - -	index = cpuidle_wrap_enter(dev,	drv, index, -				arm_cpuidle_simple_enter); - +	cpu_do_idle();  	davinci_save_ddr_power(0, ddr2_pdown);  	return index; @@ -66,7 +61,6 @@ static int davinci_enter_idle(struct cpuidle_device *dev,  static struct cpuidle_driver davinci_idle_driver = {  	.name			= "cpuidle-davinci",  	.owner			= THIS_MODULE, -	.en_core_tk_irqen	= 1,  	.states[0]		= ARM_CPUIDLE_WFI_STATE,  	.states[1]		= {  		.enter			= davinci_enter_idle, @@ -81,12 +75,8 @@ static struct cpuidle_driver davinci_idle_driver = {  static int __init davinci_cpuidle_probe(struct platform_device *pdev)  { -	int ret; -	struct cpuidle_device *device;  	struct davinci_cpuidle_config *pdata = pdev->dev.platform_data; -	device = &per_cpu(davinci_cpuidle_device, smp_processor_id()); -  	if (!pdata) {  		dev_err(&pdev->dev, "cannot get platform data\n");  		return -ENOENT; @@ -96,20 +86,7 @@ static int __init davinci_cpuidle_probe(struct platform_device *pdev)  	ddr2_pdown = pdata->ddr2_pdown; -	ret = cpuidle_register_driver(&davinci_idle_driver); -	if (ret) { -		dev_err(&pdev->dev, "failed to register driver\n"); -		return ret; -	} - -	ret = cpuidle_register_device(device); -	if (ret) { -		dev_err(&pdev->dev, "failed to register device\n"); -		cpuidle_unregister_driver(&davinci_idle_driver); -		return ret; -	} - -	return 0; +	return cpuidle_register(&davinci_idle_driver, NULL);  }  static struct platform_driver davinci_cpuidle_driver = { diff --git a/arch/arm/mach-davinci/da830.c b/arch/arm/mach-davinci/da830.c index 678a54a64da..abbaf0270be 100644 --- a/arch/arm/mach-davinci/da830.c +++ b/arch/arm/mach-davinci/da830.c @@ -394,7 +394,7 @@ static struct clk_lookup da830_clks[] = {  	CLK(NULL,		"tpcc",		&tpcc_clk),  	CLK(NULL,		"tptc0",	&tptc0_clk),  	CLK(NULL,		"tptc1",	&tptc1_clk), -	CLK("davinci_mmc.0",	NULL,		&mmcsd_clk), +	CLK("da830-mmc.0",	NULL,		&mmcsd_clk),  	CLK(NULL,		"uart0",	&uart0_clk),  	CLK(NULL,		"uart1",	&uart1_clk),  	CLK(NULL,		"uart2",	&uart2_clk), diff --git a/arch/arm/mach-davinci/da850.c b/arch/arm/mach-davinci/da850.c index 0c4a26ddebb..4d6933848ab 100644 --- a/arch/arm/mach-davinci/da850.c +++ b/arch/arm/mach-davinci/da850.c @@ -383,6 +383,49 @@ static struct clk dsp_clk = {  	.flags		= PSC_LRST | PSC_FORCE,  }; +static struct clk ehrpwm_clk = { +	.name		= "ehrpwm", +	.parent		= &pll0_sysclk2, +	.lpsc		= DA8XX_LPSC1_PWM, +	.gpsc		= 1, +	.flags		= DA850_CLK_ASYNC3, +}; + +#define DA8XX_EHRPWM_TBCLKSYNC	BIT(12) + +static void ehrpwm_tblck_enable(struct clk *clk) +{ +	u32 val; + +	val = readl(DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP1_REG)); +	val |= DA8XX_EHRPWM_TBCLKSYNC; +	writel(val, DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP1_REG)); +} + +static void ehrpwm_tblck_disable(struct clk *clk) +{ +	u32 val; + +	val = readl(DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP1_REG)); +	val &= ~DA8XX_EHRPWM_TBCLKSYNC; +	writel(val, DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP1_REG)); +} + +static struct clk ehrpwm_tbclk = { +	.name		= "ehrpwm_tbclk", +	.parent		= &ehrpwm_clk, +	.clk_enable	= ehrpwm_tblck_enable, +	.clk_disable	= ehrpwm_tblck_disable, +}; + +static struct clk ecap_clk = { +	.name		= "ecap", +	.parent		= &pll0_sysclk2, +	.lpsc		= DA8XX_LPSC1_ECAP, +	.gpsc		= 1, +	.flags		= DA850_CLK_ASYNC3, +}; +  static struct clk_lookup da850_clks[] = {  	CLK(NULL,		"ref",		&ref_clk),  	CLK(NULL,		"pll0",		&pll0_clk), @@ -420,8 +463,8 @@ static struct clk_lookup da850_clks[] = {  	CLK("davinci_emac.1",	NULL,		&emac_clk),  	CLK("davinci-mcasp.0",	NULL,		&mcasp_clk),  	CLK("da8xx_lcdc.0",	"fck",		&lcdc_clk), -	CLK("davinci_mmc.0",	NULL,		&mmcsd0_clk), -	CLK("davinci_mmc.1",	NULL,		&mmcsd1_clk), +	CLK("da830-mmc.0",	NULL,		&mmcsd0_clk), +	CLK("da830-mmc.1",	NULL,		&mmcsd1_clk),  	CLK(NULL,		"aemif",	&aemif_clk),  	CLK(NULL,		"usb11",	&usb11_clk),  	CLK(NULL,		"usb20",	&usb20_clk), @@ -430,6 +473,9 @@ static struct clk_lookup da850_clks[] = {  	CLK("vpif",		NULL,		&vpif_clk),  	CLK("ahci",		NULL,		&sata_clk),  	CLK("davinci-rproc.0",	NULL,		&dsp_clk), +	CLK("ehrpwm",		"fck",		&ehrpwm_clk), +	CLK("ehrpwm",		"tbclk",	&ehrpwm_tbclk), +	CLK("ecap",		"fck",		&ecap_clk),  	CLK(NULL,		NULL,		NULL),  }; diff --git a/arch/arm/mach-davinci/da8xx-dt.c b/arch/arm/mach-davinci/da8xx-dt.c index 6b7a0a27fbd..b1c0a595827 100644 --- a/arch/arm/mach-davinci/da8xx-dt.c +++ b/arch/arm/mach-davinci/da8xx-dt.c @@ -20,7 +20,7 @@  #define DA8XX_NUM_UARTS	3 -void __init da8xx_uart_clk_enable(void) +static void __init da8xx_uart_clk_enable(void)  {  	int i;  	for (i = 0; i < DA8XX_NUM_UARTS; i++) @@ -37,9 +37,10 @@ static void __init da8xx_init_irq(void)  	of_irq_init(da8xx_irq_match);  } -struct of_dev_auxdata da850_auxdata_lookup[] __initdata = { +static struct of_dev_auxdata da850_auxdata_lookup[] __initdata = {  	OF_DEV_AUXDATA("ti,davinci-i2c", 0x01c22000, "i2c_davinci.1", NULL),  	OF_DEV_AUXDATA("ti,davinci-wdt", 0x01c21000, "watchdog", NULL), +	OF_DEV_AUXDATA("ti,da830-mmc", 0x01c40000, "da830-mmc.0", NULL),  	{}  }; diff --git a/arch/arm/mach-davinci/davinci.h b/arch/arm/mach-davinci/davinci.h index 12d544befcf..1ab3df423da 100644 --- a/arch/arm/mach-davinci/davinci.h +++ b/arch/arm/mach-davinci/davinci.h @@ -36,12 +36,19 @@  #include <media/davinci/vpbe_osd.h>  #define DAVINCI_SYSTEM_MODULE_BASE	0x01c40000 +#define SYSMOD_VDAC_CONFIG		0x2c  #define SYSMOD_VIDCLKCTL		0x38  #define SYSMOD_VPSS_CLKCTL		0x44  #define SYSMOD_VDD3P3VPWDN		0x48  #define SYSMOD_VSCLKDIS			0x6c  #define SYSMOD_PUPDCTL1			0x7c +/* VPSS CLKCTL bit definitions */ +#define VPSS_MUXSEL_EXTCLK_ENABLE	BIT(1) +#define VPSS_VENCCLKEN_ENABLE		BIT(3) +#define VPSS_DACCLKEN_ENABLE		BIT(4) +#define VPSS_PLLC2SYSCLK5_ENABLE	BIT(5) +  extern void __iomem *davinci_sysmod_base;  #define DAVINCI_SYSMOD_VIRT(x)	(davinci_sysmod_base + (x))  void davinci_map_sysmod(void); @@ -74,7 +81,7 @@ void __init dm355_init(void);  void dm355_init_spi0(unsigned chipselect_mask,  		const struct spi_board_info *info, unsigned len);  void __init dm355_init_asp1(u32 evt_enable, struct snd_platform_data *pdata); -void dm355_set_vpfe_config(struct vpfe_config *cfg); +int dm355_init_video(struct vpfe_config *, struct vpbe_config *);  /* DM365 function declarations */  void __init dm365_init(void); @@ -84,7 +91,7 @@ void __init dm365_init_ks(struct davinci_ks_platform_data *pdata);  void __init dm365_init_rtc(void);  void dm365_init_spi0(unsigned chipselect_mask,  			const struct spi_board_info *info, unsigned len); -void dm365_set_vpfe_config(struct vpfe_config *cfg); +int dm365_init_video(struct vpfe_config *, struct vpbe_config *);  /* DM644x function declarations */  void __init dm644x_init(void); diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c index fc50243b148..bf572525175 100644 --- a/arch/arm/mach-davinci/devices-da8xx.c +++ b/arch/arm/mach-davinci/devices-da8xx.c @@ -12,7 +12,7 @@   */  #include <linux/init.h>  #include <linux/platform_device.h> -#include <linux/dma-mapping.h> +#include <linux/dma-contiguous.h>  #include <linux/serial_8250.h>  #include <linux/ahci_platform.h>  #include <linux/clk.h> @@ -664,7 +664,7 @@ static struct resource da8xx_mmcsd0_resources[] = {  };  static struct platform_device da8xx_mmcsd0_device = { -	.name		= "davinci_mmc", +	.name		= "da830-mmc",  	.id		= 0,  	.num_resources	= ARRAY_SIZE(da8xx_mmcsd0_resources),  	.resource	= da8xx_mmcsd0_resources, @@ -701,7 +701,7 @@ static struct resource da850_mmcsd1_resources[] = {  };  static struct platform_device da850_mmcsd1_device = { -	.name		= "davinci_mmc", +	.name		= "da830-mmc",  	.id		= 1,  	.num_resources	= ARRAY_SIZE(da850_mmcsd1_resources),  	.resource	= da850_mmcsd1_resources, @@ -714,6 +714,92 @@ int __init da850_register_mmcsd1(struct davinci_mmc_config *config)  }  #endif +static struct resource da8xx_rproc_resources[] = { +	{ /* DSP boot address */ +		.start		= DA8XX_SYSCFG0_BASE + DA8XX_HOST1CFG_REG, +		.end		= DA8XX_SYSCFG0_BASE + DA8XX_HOST1CFG_REG + 3, +		.flags		= IORESOURCE_MEM, +	}, +	{ /* DSP interrupt registers */ +		.start		= DA8XX_SYSCFG0_BASE + DA8XX_CHIPSIG_REG, +		.end		= DA8XX_SYSCFG0_BASE + DA8XX_CHIPSIG_REG + 7, +		.flags		= IORESOURCE_MEM, +	}, +	{ /* dsp irq */ +		.start		= IRQ_DA8XX_CHIPINT0, +		.end		= IRQ_DA8XX_CHIPINT0, +		.flags		= IORESOURCE_IRQ, +	}, +}; + +static struct platform_device da8xx_dsp = { +	.name	= "davinci-rproc", +	.dev	= { +		.coherent_dma_mask	= DMA_BIT_MASK(32), +	}, +	.num_resources	= ARRAY_SIZE(da8xx_rproc_resources), +	.resource	= da8xx_rproc_resources, +}; + +#if IS_ENABLED(CONFIG_DA8XX_REMOTEPROC) + +static phys_addr_t rproc_base __initdata; +static unsigned long rproc_size __initdata; + +static int __init early_rproc_mem(char *p) +{ +	char *endp; + +	if (p == NULL) +		return 0; + +	rproc_size = memparse(p, &endp); +	if (*endp == '@') +		rproc_base = memparse(endp + 1, NULL); + +	return 0; +} +early_param("rproc_mem", early_rproc_mem); + +void __init da8xx_rproc_reserve_cma(void) +{ +	int ret; + +	if (!rproc_base || !rproc_size) { +		pr_err("%s: 'rproc_mem=nn@address' badly specified\n" +		       "    'nn' and 'address' must both be non-zero\n", +		       __func__); + +		return; +	} + +	pr_info("%s: reserving 0x%lx @ 0x%lx...\n", +		__func__, rproc_size, (unsigned long)rproc_base); + +	ret = dma_declare_contiguous(&da8xx_dsp.dev, rproc_size, rproc_base, 0); +	if (ret) +		pr_err("%s: dma_declare_contiguous failed %d\n", __func__, ret); +} + +#else + +void __init da8xx_rproc_reserve_cma(void) +{ +} + +#endif + +int __init da8xx_register_rproc(void) +{ +	int ret; + +	ret = platform_device_register(&da8xx_dsp); +	if (ret) +		pr_err("%s: can't register DSP device: %d\n", __func__, ret); + +	return ret; +}; +  static struct resource da8xx_rtc_resources[] = {  	{  		.start		= DA8XX_RTC_BASE, diff --git a/arch/arm/mach-davinci/devices-tnetv107x.c b/arch/arm/mach-davinci/devices-tnetv107x.c index 773ab07a71a..cfb194df18e 100644 --- a/arch/arm/mach-davinci/devices-tnetv107x.c +++ b/arch/arm/mach-davinci/devices-tnetv107x.c @@ -218,7 +218,7 @@ static u64 mmc1_dma_mask = DMA_BIT_MASK(32);  static struct platform_device mmc_devices[2] = {  	{ -		.name		= "davinci_mmc", +		.name		= "dm6441-mmc",  		.id		= 0,  		.dev		= {  			.dma_mask		= &mmc0_dma_mask, @@ -228,7 +228,7 @@ static struct platform_device mmc_devices[2] = {  		.resource	= mmc0_resources  	},  	{ -		.name		= "davinci_mmc", +		.name		= "dm6441-mmc",  		.id		= 1,  		.dev		= {  			.dma_mask		= &mmc1_dma_mask, diff --git a/arch/arm/mach-davinci/devices.c b/arch/arm/mach-davinci/devices.c index 4c48a36ee56..f6927df2dda 100644 --- a/arch/arm/mach-davinci/devices.c +++ b/arch/arm/mach-davinci/devices.c @@ -150,7 +150,7 @@ static struct resource mmcsd0_resources[] = {  };  static struct platform_device davinci_mmcsd0_device = { -	.name = "davinci_mmc", +	.name = "dm6441-mmc",  	.id = 0,  	.dev = {  		.dma_mask = &mmcsd0_dma_mask, @@ -187,7 +187,7 @@ static struct resource mmcsd1_resources[] = {  };  static struct platform_device davinci_mmcsd1_device = { -	.name = "davinci_mmc", +	.name = "dm6441-mmc",  	.id = 1,  	.dev = {  		.dma_mask = &mmcsd1_dma_mask, @@ -235,6 +235,7 @@ void __init davinci_setup_mmc(int module, struct davinci_mmc_config *config)  			mmcsd1_resources[0].end = DM365_MMCSD1_BASE +  							SZ_4K - 1;  			mmcsd1_resources[2].start = IRQ_DM365_SDIOINT1; +			davinci_mmcsd1_device.name = "da830-mmc";  		} else  			break; @@ -256,6 +257,7 @@ void __init davinci_setup_mmc(int module, struct davinci_mmc_config *config)  			mmcsd0_resources[0].end = DM365_MMCSD0_BASE +  							SZ_4K - 1;  			mmcsd0_resources[2].start = IRQ_DM365_SDIOINT0; +			davinci_mmcsd0_device.name = "da830-mmc";  		} else if (cpu_is_davinci_dm644x()) {  			/* REVISIT: should this be in board-init code? */  			/* Power-on 3.3V IO cells */ diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c index b49c3b77d55..a11034a358f 100644 --- a/arch/arm/mach-davinci/dm355.c +++ b/arch/arm/mach-davinci/dm355.c @@ -35,6 +35,8 @@  #include "asp.h"  #define DM355_UART2_BASE	(IO_PHYS + 0x206000) +#define DM355_OSD_BASE		(IO_PHYS + 0x70200) +#define DM355_VENC_BASE		(IO_PHYS + 0x70400)  /*   * Device specific clocks @@ -345,8 +347,8 @@ static struct clk_lookup dm355_clks[] = {  	CLK(NULL, "pll1_aux", &pll1_aux_clk),  	CLK(NULL, "pll1_sysclkbp", &pll1_sysclkbp),  	CLK(NULL, "vpss_dac", &vpss_dac_clk), -	CLK(NULL, "vpss_master", &vpss_master_clk), -	CLK(NULL, "vpss_slave", &vpss_slave_clk), +	CLK("vpss", "master", &vpss_master_clk), +	CLK("vpss", "slave", &vpss_slave_clk),  	CLK(NULL, "clkout1", &clkout1_clk),  	CLK(NULL, "clkout2", &clkout2_clk),  	CLK(NULL, "pll2", &pll2_clk), @@ -361,8 +363,8 @@ static struct clk_lookup dm355_clks[] = {  	CLK("i2c_davinci.1", NULL, &i2c_clk),  	CLK("davinci-mcbsp.0", NULL, &asp0_clk),  	CLK("davinci-mcbsp.1", NULL, &asp1_clk), -	CLK("davinci_mmc.0", NULL, &mmcsd0_clk), -	CLK("davinci_mmc.1", NULL, &mmcsd1_clk), +	CLK("dm6441-mmc.0", NULL, &mmcsd0_clk), +	CLK("dm6441-mmc.1", NULL, &mmcsd1_clk),  	CLK("spi_davinci.0", NULL, &spi0_clk),  	CLK("spi_davinci.1", NULL, &spi1_clk),  	CLK("spi_davinci.2", NULL, &spi2_clk), @@ -744,11 +746,146 @@ static struct platform_device vpfe_capture_dev = {  	},  }; -void dm355_set_vpfe_config(struct vpfe_config *cfg) +static struct resource dm355_osd_resources[] = { +	{ +		.start	= DM355_OSD_BASE, +		.end	= DM355_OSD_BASE + 0x17f, +		.flags	= IORESOURCE_MEM, +	}, +}; + +static struct platform_device dm355_osd_dev = { +	.name		= DM355_VPBE_OSD_SUBDEV_NAME, +	.id		= -1, +	.num_resources	= ARRAY_SIZE(dm355_osd_resources), +	.resource	= dm355_osd_resources, +	.dev		= { +		.dma_mask		= &vpfe_capture_dma_mask, +		.coherent_dma_mask	= DMA_BIT_MASK(32), +	}, +}; + +static struct resource dm355_venc_resources[] = { +	{ +		.start	= IRQ_VENCINT, +		.end	= IRQ_VENCINT, +		.flags	= IORESOURCE_IRQ, +	}, +	/* venc registers io space */ +	{ +		.start	= DM355_VENC_BASE, +		.end	= DM355_VENC_BASE + 0x17f, +		.flags	= IORESOURCE_MEM, +	}, +	/* VDAC config register io space */ +	{ +		.start	= DAVINCI_SYSTEM_MODULE_BASE + SYSMOD_VDAC_CONFIG, +		.end	= DAVINCI_SYSTEM_MODULE_BASE + SYSMOD_VDAC_CONFIG + 3, +		.flags	= IORESOURCE_MEM, +	}, +}; + +static struct resource dm355_v4l2_disp_resources[] = { +	{ +		.start	= IRQ_VENCINT, +		.end	= IRQ_VENCINT, +		.flags	= IORESOURCE_IRQ, +	}, +	/* venc registers io space */ +	{ +		.start	= DM355_VENC_BASE, +		.end	= DM355_VENC_BASE + 0x17f, +		.flags	= IORESOURCE_MEM, +	}, +}; + +static int dm355_vpbe_setup_pinmux(enum v4l2_mbus_pixelcode if_type, +			    int field)  { -	vpfe_capture_dev.dev.platform_data = cfg; +	switch (if_type) { +	case V4L2_MBUS_FMT_SGRBG8_1X8: +		davinci_cfg_reg(DM355_VOUT_FIELD_G70); +		break; +	case V4L2_MBUS_FMT_YUYV10_1X20: +		if (field) +			davinci_cfg_reg(DM355_VOUT_FIELD); +		else +			davinci_cfg_reg(DM355_VOUT_FIELD_G70); +		break; +	default: +		return -EINVAL; +	} + +	davinci_cfg_reg(DM355_VOUT_COUTL_EN); +	davinci_cfg_reg(DM355_VOUT_COUTH_EN); + +	return 0;  } +static int dm355_venc_setup_clock(enum vpbe_enc_timings_type type, +				   unsigned int pclock) +{ +	void __iomem *vpss_clk_ctrl_reg; + +	vpss_clk_ctrl_reg = DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL); + +	switch (type) { +	case VPBE_ENC_STD: +		writel(VPSS_DACCLKEN_ENABLE | VPSS_VENCCLKEN_ENABLE, +		       vpss_clk_ctrl_reg); +		break; +	case VPBE_ENC_DV_TIMINGS: +		if (pclock > 27000000) +			/* +			 * For HD, use external clock source since we cannot +			 * support HD mode with internal clocks. +			 */ +			writel(VPSS_MUXSEL_EXTCLK_ENABLE, vpss_clk_ctrl_reg); +		break; +	default: +		return -EINVAL; +	} + +	return 0; +} + +static struct platform_device dm355_vpbe_display = { +	.name		= "vpbe-v4l2", +	.id		= -1, +	.num_resources	= ARRAY_SIZE(dm355_v4l2_disp_resources), +	.resource	= dm355_v4l2_disp_resources, +	.dev		= { +		.dma_mask		= &vpfe_capture_dma_mask, +		.coherent_dma_mask	= DMA_BIT_MASK(32), +	}, +}; + +struct venc_platform_data dm355_venc_pdata = { +	.setup_pinmux	= dm355_vpbe_setup_pinmux, +	.setup_clock	= dm355_venc_setup_clock, +}; + +static struct platform_device dm355_venc_dev = { +	.name		= DM355_VPBE_VENC_SUBDEV_NAME, +	.id		= -1, +	.num_resources	= ARRAY_SIZE(dm355_venc_resources), +	.resource	= dm355_venc_resources, +	.dev		= { +		.dma_mask		= &vpfe_capture_dma_mask, +		.coherent_dma_mask	= DMA_BIT_MASK(32), +		.platform_data		= (void *)&dm355_venc_pdata, +	}, +}; + +static struct platform_device dm355_vpbe_dev = { +	.name		= "vpbe_controller", +	.id		= -1, +	.dev		= { +		.dma_mask		= &vpfe_capture_dma_mask, +		.coherent_dma_mask	= DMA_BIT_MASK(32), +	}, +}; +  /*----------------------------------------------------------------------*/  static struct map_desc dm355_io_desc[] = { @@ -868,19 +1005,36 @@ void __init dm355_init(void)  	davinci_map_sysmod();  } +int __init dm355_init_video(struct vpfe_config *vpfe_cfg, +				struct vpbe_config *vpbe_cfg) +{ +	if (vpfe_cfg || vpbe_cfg) +		platform_device_register(&dm355_vpss_device); + +	if (vpfe_cfg) { +		vpfe_capture_dev.dev.platform_data = vpfe_cfg; +		platform_device_register(&dm355_ccdc_dev); +		platform_device_register(&vpfe_capture_dev); +	} + +	if (vpbe_cfg) { +		dm355_vpbe_dev.dev.platform_data = vpbe_cfg; +		platform_device_register(&dm355_osd_dev); +		platform_device_register(&dm355_venc_dev); +		platform_device_register(&dm355_vpbe_dev); +		platform_device_register(&dm355_vpbe_display); +	} + +	return 0; +} +  static int __init dm355_init_devices(void)  {  	if (!cpu_is_davinci_dm355())  		return 0; -	/* Add ccdc clock aliases */ -	clk_add_alias("master", dm355_ccdc_dev.name, "vpss_master", NULL); -	clk_add_alias("slave", dm355_ccdc_dev.name, "vpss_master", NULL);  	davinci_cfg_reg(DM355_INT_EDMA_CC);  	platform_device_register(&dm355_edma_device); -	platform_device_register(&dm355_vpss_device); -	platform_device_register(&dm355_ccdc_dev); -	platform_device_register(&vpfe_capture_dev);  	return 0;  } diff --git a/arch/arm/mach-davinci/dm365.c b/arch/arm/mach-davinci/dm365.c index 6c3980540be..40fa4fee933 100644 --- a/arch/arm/mach-davinci/dm365.c +++ b/arch/arm/mach-davinci/dm365.c @@ -39,16 +39,13 @@  #include "asp.h"  #define DM365_REF_FREQ		24000000	/* 24 MHz on the DM365 EVM */ - -/* Base of key scan register bank */ -#define DM365_KEYSCAN_BASE		0x01c69400 -  #define DM365_RTC_BASE			0x01c69000 - +#define DM365_KEYSCAN_BASE		0x01c69400 +#define DM365_OSD_BASE			0x01c71c00 +#define DM365_VENC_BASE			0x01c71e00  #define DAVINCI_DM365_VC_BASE		0x01d0c000  #define DAVINCI_DMA_VC_TX		2  #define DAVINCI_DMA_VC_RX		3 -  #define DM365_EMAC_BASE			0x01d07000  #define DM365_EMAC_MDIO_BASE		(DM365_EMAC_BASE + 0x4000)  #define DM365_EMAC_CNTRL_OFFSET		0x0000 @@ -257,6 +254,12 @@ static struct clk vpss_master_clk = {  	.flags		= CLK_PSC,  }; +static struct clk vpss_slave_clk = { +	.name		= "vpss_slave", +	.parent		= &pll1_sysclk5, +	.lpsc		= DAVINCI_LPSC_VPSSSLV, +}; +  static struct clk arm_clk = {  	.name		= "arm_clk",  	.parent		= &pll2_sysclk2, @@ -449,13 +452,14 @@ static struct clk_lookup dm365_clks[] = {  	CLK(NULL, "pll2_sysclk8", &pll2_sysclk8),  	CLK(NULL, "pll2_sysclk9", &pll2_sysclk9),  	CLK(NULL, "vpss_dac", &vpss_dac_clk), -	CLK(NULL, "vpss_master", &vpss_master_clk), +	CLK("vpss", "master", &vpss_master_clk), +	CLK("vpss", "slave", &vpss_slave_clk),  	CLK(NULL, "arm", &arm_clk),  	CLK(NULL, "uart0", &uart0_clk),  	CLK(NULL, "uart1", &uart1_clk),  	CLK("i2c_davinci.1", NULL, &i2c_clk), -	CLK("davinci_mmc.0", NULL, &mmcsd0_clk), -	CLK("davinci_mmc.1", NULL, &mmcsd1_clk), +	CLK("da830-mmc.0", NULL, &mmcsd0_clk), +	CLK("da830-mmc.1", NULL, &mmcsd1_clk),  	CLK("spi_davinci.0", NULL, &spi0_clk),  	CLK("spi_davinci.1", NULL, &spi1_clk),  	CLK("spi_davinci.2", NULL, &spi2_clk), @@ -1226,6 +1230,173 @@ static struct platform_device dm365_isif_dev = {  	},  }; +static struct resource dm365_osd_resources[] = { +	{ +		.start = DM365_OSD_BASE, +		.end   = DM365_OSD_BASE + 0xff, +		.flags = IORESOURCE_MEM, +	}, +}; + +static u64 dm365_video_dma_mask = DMA_BIT_MASK(32); + +static struct platform_device dm365_osd_dev = { +	.name		= DM365_VPBE_OSD_SUBDEV_NAME, +	.id		= -1, +	.num_resources	= ARRAY_SIZE(dm365_osd_resources), +	.resource	= dm365_osd_resources, +	.dev		= { +		.dma_mask		= &dm365_video_dma_mask, +		.coherent_dma_mask	= DMA_BIT_MASK(32), +	}, +}; + +static struct resource dm365_venc_resources[] = { +	{ +		.start = IRQ_VENCINT, +		.end   = IRQ_VENCINT, +		.flags = IORESOURCE_IRQ, +	}, +	/* venc registers io space */ +	{ +		.start = DM365_VENC_BASE, +		.end   = DM365_VENC_BASE + 0x177, +		.flags = IORESOURCE_MEM, +	}, +	/* vdaccfg registers io space */ +	{ +		.start = DAVINCI_SYSTEM_MODULE_BASE + SYSMOD_VDAC_CONFIG, +		.end   = DAVINCI_SYSTEM_MODULE_BASE + SYSMOD_VDAC_CONFIG + 3, +		.flags = IORESOURCE_MEM, +	}, +}; + +static struct resource dm365_v4l2_disp_resources[] = { +	{ +		.start = IRQ_VENCINT, +		.end   = IRQ_VENCINT, +		.flags = IORESOURCE_IRQ, +	}, +	/* venc registers io space */ +	{ +		.start = DM365_VENC_BASE, +		.end   = DM365_VENC_BASE + 0x177, +		.flags = IORESOURCE_MEM, +	}, +}; + +static int dm365_vpbe_setup_pinmux(enum v4l2_mbus_pixelcode if_type, +			    int field) +{ +	switch (if_type) { +	case V4L2_MBUS_FMT_SGRBG8_1X8: +		davinci_cfg_reg(DM365_VOUT_FIELD_G81); +		davinci_cfg_reg(DM365_VOUT_COUTL_EN); +		davinci_cfg_reg(DM365_VOUT_COUTH_EN); +		break; +	case V4L2_MBUS_FMT_YUYV10_1X20: +		if (field) +			davinci_cfg_reg(DM365_VOUT_FIELD); +		else +			davinci_cfg_reg(DM365_VOUT_FIELD_G81); +		davinci_cfg_reg(DM365_VOUT_COUTL_EN); +		davinci_cfg_reg(DM365_VOUT_COUTH_EN); +		break; +	default: +		return -EINVAL; +	} + +	return 0; +} + +static int dm365_venc_setup_clock(enum vpbe_enc_timings_type type, +				  unsigned int pclock) +{ +	void __iomem *vpss_clkctl_reg; +	u32 val; + +	vpss_clkctl_reg = DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL); + +	switch (type) { +	case VPBE_ENC_STD: +		val = VPSS_VENCCLKEN_ENABLE | VPSS_DACCLKEN_ENABLE; +		break; +	case VPBE_ENC_DV_TIMINGS: +		if (pclock <= 27000000) { +			val = VPSS_VENCCLKEN_ENABLE | VPSS_DACCLKEN_ENABLE; +		} else { +			/* set sysclk4 to output 74.25 MHz from pll1 */ +			val = VPSS_PLLC2SYSCLK5_ENABLE | VPSS_DACCLKEN_ENABLE | +			      VPSS_VENCCLKEN_ENABLE; +		} +		break; +	default: +		return -EINVAL; +	} +	writel(val, vpss_clkctl_reg); + +	return 0; +} + +static struct platform_device dm365_vpbe_display = { +	.name		= "vpbe-v4l2", +	.id		= -1, +	.num_resources  = ARRAY_SIZE(dm365_v4l2_disp_resources), +	.resource	= dm365_v4l2_disp_resources, +	.dev		= { +		.dma_mask		= &dm365_video_dma_mask, +		.coherent_dma_mask	= DMA_BIT_MASK(32), +	}, +}; + +struct venc_platform_data dm365_venc_pdata = { +	.setup_pinmux	= dm365_vpbe_setup_pinmux, +	.setup_clock	= dm365_venc_setup_clock, +}; + +static struct platform_device dm365_venc_dev = { +	.name		= DM365_VPBE_VENC_SUBDEV_NAME, +	.id		= -1, +	.num_resources	= ARRAY_SIZE(dm365_venc_resources), +	.resource	= dm365_venc_resources, +	.dev		= { +		.dma_mask		= &dm365_video_dma_mask, +		.coherent_dma_mask	= DMA_BIT_MASK(32), +		.platform_data		= (void *)&dm365_venc_pdata, +	}, +}; + +static struct platform_device dm365_vpbe_dev = { +	.name		= "vpbe_controller", +	.id		= -1, +	.dev		= { +		.dma_mask		= &dm365_video_dma_mask, +		.coherent_dma_mask	= DMA_BIT_MASK(32), +	}, +}; + +int __init dm365_init_video(struct vpfe_config *vpfe_cfg, +				struct vpbe_config *vpbe_cfg) +{ +	if (vpfe_cfg || vpbe_cfg) +		platform_device_register(&dm365_vpss_device); + +	if (vpfe_cfg) { +		vpfe_capture_dev.dev.platform_data = vpfe_cfg; +		platform_device_register(&dm365_isif_dev); +		platform_device_register(&vpfe_capture_dev); +	} +	if (vpbe_cfg) { +		dm365_vpbe_dev.dev.platform_data = vpbe_cfg; +		platform_device_register(&dm365_osd_dev); +		platform_device_register(&dm365_venc_dev); +		platform_device_register(&dm365_vpbe_dev); +		platform_device_register(&dm365_vpbe_display); +	} + +	return 0; +} +  static int __init dm365_init_devices(void)  {  	if (!cpu_is_davinci_dm365()) @@ -1239,16 +1410,6 @@ static int __init dm365_init_devices(void)  	clk_add_alias(NULL, dev_name(&dm365_mdio_device.dev),  		      NULL, &dm365_emac_device.dev); -	/* Add isif clock alias */ -	clk_add_alias("master", dm365_isif_dev.name, "vpss_master", NULL); -	platform_device_register(&dm365_vpss_device); -	platform_device_register(&dm365_isif_dev); -	platform_device_register(&vpfe_capture_dev);  	return 0;  }  postcore_initcall(dm365_init_devices); - -void dm365_set_vpfe_config(struct vpfe_config *cfg) -{ -       vpfe_capture_dev.dev.platform_data = cfg; -} diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c index db1dd92e00a..4d37d3e2a19 100644 --- a/arch/arm/mach-davinci/dm644x.c +++ b/arch/arm/mach-davinci/dm644x.c @@ -300,8 +300,8 @@ static struct clk_lookup dm644x_clks[] = {  	CLK(NULL, "dsp", &dsp_clk),  	CLK(NULL, "arm", &arm_clk),  	CLK(NULL, "vicp", &vicp_clk), -	CLK(NULL, "vpss_master", &vpss_master_clk), -	CLK(NULL, "vpss_slave", &vpss_slave_clk), +	CLK("vpss", "master", &vpss_master_clk), +	CLK("vpss", "slave", &vpss_slave_clk),  	CLK(NULL, "arm", &arm_clk),  	CLK(NULL, "uart0", &uart0_clk),  	CLK(NULL, "uart1", &uart1_clk), @@ -310,7 +310,7 @@ static struct clk_lookup dm644x_clks[] = {  	CLK("i2c_davinci.1", NULL, &i2c_clk),  	CLK("palm_bk3710", NULL, &ide_clk),  	CLK("davinci-mcbsp", NULL, &asp_clk), -	CLK("davinci_mmc.0", NULL, &mmcsd_clk), +	CLK("dm6441-mmc.0", NULL, &mmcsd_clk),  	CLK(NULL, "spi", &spi_clk),  	CLK(NULL, "gpio", &gpio_clk),  	CLK(NULL, "usb", &usb_clk), @@ -706,7 +706,7 @@ static int dm644x_venc_setup_clock(enum vpbe_enc_timings_type type,  		v |= DM644X_VPSS_DACCLKEN;  		writel(v, DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL));  		break; -	case VPBE_ENC_CUSTOM_TIMINGS: +	case VPBE_ENC_DV_TIMINGS:  		if (pclock <= 27000000) {  			v |= DM644X_VPSS_DACCLKEN;  			writel(v, DAVINCI_SYSMOD_VIRT(SYSMOD_VPSS_CLKCTL)); @@ -901,11 +901,6 @@ int __init dm644x_init_video(struct vpfe_config *vpfe_cfg,  		dm644x_vpfe_dev.dev.platform_data = vpfe_cfg;  		platform_device_register(&dm644x_ccdc_dev);  		platform_device_register(&dm644x_vpfe_dev); -		/* Add ccdc clock aliases */ -		clk_add_alias("master", dm644x_ccdc_dev.name, -			      "vpss_master", NULL); -		clk_add_alias("slave", dm644x_ccdc_dev.name, -			      "vpss_slave", NULL);  	}  	if (vpbe_cfg) { diff --git a/arch/arm/mach-davinci/include/mach/da8xx.h b/arch/arm/mach-davinci/include/mach/da8xx.h index de439b7b9af..2e1c9eae0a5 100644 --- a/arch/arm/mach-davinci/include/mach/da8xx.h +++ b/arch/arm/mach-davinci/include/mach/da8xx.h @@ -54,7 +54,10 @@ extern unsigned int da850_max_speed;  #define DA8XX_SYSCFG0_BASE	(IO_PHYS + 0x14000)  #define DA8XX_SYSCFG0_VIRT(x)	(da8xx_syscfg0_base + (x))  #define DA8XX_JTAG_ID_REG	0x18 +#define DA8XX_HOST1CFG_REG	0x44 +#define DA8XX_CHIPSIG_REG	0x174  #define DA8XX_CFGCHIP0_REG	0x17c +#define DA8XX_CFGCHIP1_REG	0x180  #define DA8XX_CFGCHIP2_REG	0x184  #define DA8XX_CFGCHIP3_REG	0x188 @@ -104,6 +107,8 @@ int __init da850_register_vpif_display  int __init da850_register_vpif_capture  			(struct vpif_capture_config *capture_config);  void da8xx_restart(char mode, const char *cmd); +void da8xx_rproc_reserve_cma(void); +int da8xx_register_rproc(void);  extern struct platform_device da8xx_serial_device;  extern struct emac_platform_data da8xx_emac_pdata; diff --git a/arch/arm/mach-davinci/include/mach/debug-macro.S b/arch/arm/mach-davinci/include/mach/debug-macro.S index 34290d14754..b18b8ebc650 100644 --- a/arch/arm/mach-davinci/include/mach/debug-macro.S +++ b/arch/arm/mach-davinci/include/mach/debug-macro.S @@ -24,8 +24,6 @@  #if defined(CONFIG_DEBUG_DAVINCI_DMx_UART0)  #define UART_BASE	DAVINCI_UART0_BASE -#elif defined(CONFIG_DEBUG_DAVINCI_DA8XX_UART0) -#define UART_BASE	DA8XX_UART0_BASE  #elif defined(CONFIG_DEBUG_DAVINCI_DA8XX_UART1)  #define UART_BASE	DA8XX_UART1_BASE  #elif defined(CONFIG_DEBUG_DAVINCI_DA8XX_UART2) diff --git a/arch/arm/mach-davinci/pm.c b/arch/arm/mach-davinci/pm.c index eb8360b33aa..a508fe587af 100644 --- a/arch/arm/mach-davinci/pm.c +++ b/arch/arm/mach-davinci/pm.c @@ -19,6 +19,7 @@  #include <asm/delay.h>  #include <asm/io.h> +#include <mach/common.h>  #include <mach/da8xx.h>  #include <mach/sram.h>  #include <mach/pm.h> diff --git a/arch/arm/mach-davinci/pm_domain.c b/arch/arm/mach-davinci/pm_domain.c index c90250e3bef..6b98413cebd 100644 --- a/arch/arm/mach-davinci/pm_domain.c +++ b/arch/arm/mach-davinci/pm_domain.c @@ -53,7 +53,7 @@ static struct dev_pm_domain davinci_pm_domain = {  static struct pm_clk_notifier_block platform_bus_notifier = {  	.pm_domain = &davinci_pm_domain, -	.con_ids = { "fck", NULL, }, +	.con_ids = { "fck", "master", "slave", NULL },  };  static int __init davinci_pm_runtime_init(void) diff --git a/arch/arm/mach-davinci/sram.c b/arch/arm/mach-davinci/sram.c index c5f7ee5cc80..f18928b073f 100644 --- a/arch/arm/mach-davinci/sram.c +++ b/arch/arm/mach-davinci/sram.c @@ -62,7 +62,7 @@ static int __init sram_init(void)  	phys_addr_t phys = davinci_soc_info.sram_dma;  	unsigned len = davinci_soc_info.sram_len;  	int status = 0; -	void *addr; +	void __iomem *addr;  	if (len) {  		len = min_t(unsigned, len, SRAM_SIZE); @@ -75,7 +75,7 @@ static int __init sram_init(void)  		addr = ioremap(phys, len);  		if (!addr)  			return -ENOMEM; -		status = gen_pool_add_virt(sram_pool, (unsigned)addr, +		status = gen_pool_add_virt(sram_pool, (unsigned long) addr,  					   phys, len, -1);  		if (status < 0)  			iounmap(addr); diff --git a/arch/arm/mach-davinci/tnetv107x.c b/arch/arm/mach-davinci/tnetv107x.c index dc1a209b9b6..3b2a70d43ef 100644 --- a/arch/arm/mach-davinci/tnetv107x.c +++ b/arch/arm/mach-davinci/tnetv107x.c @@ -272,7 +272,7 @@ static struct clk_lookup clks[] = {  	CLK("tnetv107x-keypad.0", NULL,			&clk_keypad),  	CLK(NULL,		"clk_gpio",		&clk_gpio),  	CLK(NULL,		"clk_mdio",		&clk_mdio), -	CLK("davinci_mmc.0",	NULL,			&clk_sdio0), +	CLK("dm6441-mmc.0",	NULL,			&clk_sdio0),  	CLK(NULL,		"uart0",		&clk_uart0),  	CLK(NULL,		"uart1",		&clk_uart1),  	CLK(NULL,		"timer0",		&clk_timer0), @@ -292,7 +292,7 @@ static struct clk_lookup clks[] = {  	CLK(NULL,		"clk_system",		&clk_system),  	CLK(NULL,		"clk_imcop",		&clk_imcop),  	CLK(NULL,		"clk_spare",		&clk_spare), -	CLK("davinci_mmc.1",	NULL,			&clk_sdio1), +	CLK("dm6441-mmc.1",	NULL,			&clk_sdio1),  	CLK(NULL,		"clk_ddr2_vrst",	&clk_ddr2_vrst),  	CLK(NULL,		"clk_ddr2_vctl_rst",	&clk_ddr2_vctl_rst),  	CLK(NULL,		NULL,			NULL), diff --git a/arch/arm/mach-davinci/usb.c b/arch/arm/mach-davinci/usb.c index 34509ffba22..2b4c648f99b 100644 --- a/arch/arm/mach-davinci/usb.c +++ b/arch/arm/mach-davinci/usb.c @@ -10,6 +10,7 @@  #include <mach/common.h>  #include <mach/irqs.h>  #include <mach/cputype.h> +#include <mach/da8xx.h>  #include <linux/platform_data/usb-davinci.h>  #define DAVINCI_USB_OTG_BASE	0x01c64000 diff --git a/arch/arm/mach-ep93xx/include/mach/uncompress.h b/arch/arm/mach-ep93xx/include/mach/uncompress.h index d2afb4dd82a..b5cc77d2380 100644 --- a/arch/arm/mach-ep93xx/include/mach/uncompress.h +++ b/arch/arm/mach-ep93xx/include/mach/uncompress.h @@ -47,9 +47,13 @@ static void __raw_writel(unsigned int value, unsigned int ptr)  static inline void putc(int c)  { -	/* Transmit fifo not full?  */ -	while (__raw_readb(PHYS_UART_FLAG) & UART_FLAG_TXFF) -		; +	int i; + +	for (i = 0; i < 10000; i++) { +		/* Transmit fifo not full? */ +		if (!(__raw_readb(PHYS_UART_FLAG) & UART_FLAG_TXFF)) +			break; +	}  	__raw_writeb(c, PHYS_UART_DATA);  } diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig index b1cdff6f537..d19edff0ea6 100644 --- a/arch/arm/mach-exynos/Kconfig +++ b/arch/arm/mach-exynos/Kconfig @@ -14,6 +14,7 @@ menu "SAMSUNG EXYNOS SoCs Support"  config ARCH_EXYNOS4  	bool "SAMSUNG EXYNOS4"  	default y +	select HAVE_ARM_SCU if SMP  	select HAVE_SMP  	select MIGHT_HAVE_CACHE_L2X0  	help @@ -21,6 +22,7 @@ config ARCH_EXYNOS4  config ARCH_EXYNOS5  	bool "SAMSUNG EXYNOS5" +	select HAVE_ARM_SCU if SMP  	select HAVE_SMP  	help  	  Samsung EXYNOS5 (Cortex-A15) SoC based systems @@ -73,10 +75,12 @@ config SOC_EXYNOS5440  	bool "SAMSUNG EXYNOS5440"  	default y  	depends on ARCH_EXYNOS5 +	select ARCH_HAS_OPP  	select ARM_ARCH_TIMER  	select AUTO_ZRELADDR  	select PINCTRL  	select PINCTRL_EXYNOS5440 +	select PM_OPP  	help  	  Enable EXYNOS5440 SoC support @@ -103,11 +107,6 @@ config EXYNOS4_DEV_AHCI  	help  	  Compile in platform device definitions for AHCI -config EXYNOS_DEV_DRM -	bool -	help -	  Compile in platform device definitions for core DRM device -  config EXYNOS4_SETUP_FIMD0  	bool  	help @@ -207,7 +206,6 @@ config MACH_SMDKV310  	select EXYNOS4_SETUP_SDHCI  	select EXYNOS4_SETUP_USB_PHY  	select EXYNOS_DEV_DMA -	select EXYNOS_DEV_DRM  	select EXYNOS_DEV_SYSMMU  	select S3C24XX_PWM  	select S3C_DEV_HSMMC @@ -261,9 +259,7 @@ config MACH_UNIVERSAL_C210  	select EXYNOS4_SETUP_SDHCI  	select EXYNOS4_SETUP_USB_PHY  	select EXYNOS_DEV_DMA -	select EXYNOS_DEV_DRM  	select EXYNOS_DEV_SYSMMU -	select HAVE_SCHED_CLOCK  	select S3C_DEV_HSMMC  	select S3C_DEV_HSMMC2  	select S3C_DEV_HSMMC3 @@ -302,7 +298,6 @@ config MACH_NURI  	select EXYNOS4_SETUP_SDHCI  	select EXYNOS4_SETUP_USB_PHY  	select EXYNOS_DEV_DMA -	select EXYNOS_DEV_DRM  	select S3C_DEV_HSMMC  	select S3C_DEV_HSMMC2  	select S3C_DEV_HSMMC3 @@ -338,7 +333,6 @@ config MACH_ORIGEN  	select EXYNOS4_SETUP_SDHCI  	select EXYNOS4_SETUP_USB_PHY  	select EXYNOS_DEV_DMA -	select EXYNOS_DEV_DRM  	select EXYNOS_DEV_SYSMMU  	select S3C24XX_PWM  	select S3C_DEV_HSMMC @@ -374,7 +368,6 @@ config MACH_SMDK4212  	select EXYNOS4_SETUP_SDHCI  	select EXYNOS4_SETUP_USB_PHY  	select EXYNOS_DEV_DMA -	select EXYNOS_DEV_DRM  	select EXYNOS_DEV_SYSMMU  	select S3C24XX_PWM  	select S3C_DEV_HSMMC2 @@ -418,7 +411,7 @@ config MACH_EXYNOS4_DT  	select ARM_AMBA  	select CLKSRC_OF  	select CPU_EXYNOS4210 -	select HAVE_SAMSUNG_KEYPAD if INPUT_KEYBOARD +	select KEYBOARD_SAMSUNG if INPUT_KEYBOARD  	select PINCTRL  	select PINCTRL_EXYNOS  	select S5P_DEV_MFC diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c index 939bda77def..b35c60059bb 100644 --- a/arch/arm/mach-exynos/common.c +++ b/arch/arm/mach-exynos/common.c @@ -23,11 +23,11 @@  #include <linux/of_irq.h>  #include <linux/export.h>  #include <linux/irqdomain.h> -#include <linux/irqchip.h>  #include <linux/of_address.h>  #include <linux/clocksource.h>  #include <linux/clk-provider.h>  #include <linux/irqchip/arm-gic.h> +#include <linux/irqchip/chained_irq.h>  #include <asm/proc-fns.h>  #include <asm/exception.h> @@ -439,6 +439,8 @@ void __init exynos4_init_irq(void)  	 * uses GIC instead of VIC.  	 */  	s5p_init_irq(NULL, 0); + +	gic_arch_extn.irq_set_wake = s3c_irq_wake;  }  void __init exynos5_init_irq(void) diff --git a/arch/arm/mach-exynos/cpuidle.c b/arch/arm/mach-exynos/cpuidle.c index fcfe0251aa3..17a18ff3d71 100644 --- a/arch/arm/mach-exynos/cpuidle.c +++ b/arch/arm/mach-exynos/cpuidle.c @@ -41,24 +41,24 @@ static int exynos4_enter_lowpower(struct cpuidle_device *dev,  				struct cpuidle_driver *drv,  				int index); -static struct cpuidle_state exynos4_cpuidle_set[] __initdata = { -	[0] = ARM_CPUIDLE_WFI_STATE, -	[1] = { -		.enter			= exynos4_enter_lowpower, -		.exit_latency		= 300, -		.target_residency	= 100000, -		.flags			= CPUIDLE_FLAG_TIME_VALID, -		.name			= "C1", -		.desc			= "ARM power down", -	}, -}; -  static DEFINE_PER_CPU(struct cpuidle_device, exynos4_cpuidle_device);  static struct cpuidle_driver exynos4_idle_driver = {  	.name			= "exynos4_idle",  	.owner			= THIS_MODULE, -	.en_core_tk_irqen	= 1, +	.states = { +		[0] = ARM_CPUIDLE_WFI_STATE, +		[1] = { +			.enter			= exynos4_enter_lowpower, +			.exit_latency		= 300, +			.target_residency	= 100000, +			.flags			= CPUIDLE_FLAG_TIME_VALID, +			.name			= "C1", +			.desc			= "ARM power down", +		}, +	}, +	.state_count = 2, +	.safe_state_index = 0,  };  /* Ext-GIC nIRQ/nFIQ is the only wakeup source in AFTR */ @@ -193,37 +193,30 @@ static void __init exynos5_core_down_clk(void)  static int __init exynos4_init_cpuidle(void)  { -	int i, max_cpuidle_state, cpu_id; +	int cpu_id, ret;  	struct cpuidle_device *device; -	struct cpuidle_driver *drv = &exynos4_idle_driver;  	if (soc_is_exynos5250())  		exynos5_core_down_clk(); -	/* Setup cpuidle driver */ -	drv->state_count = (sizeof(exynos4_cpuidle_set) / -				       sizeof(struct cpuidle_state)); -	max_cpuidle_state = drv->state_count; -	for (i = 0; i < max_cpuidle_state; i++) { -		memcpy(&drv->states[i], &exynos4_cpuidle_set[i], -				sizeof(struct cpuidle_state)); +	ret = cpuidle_register_driver(&exynos4_idle_driver); +	if (ret) { +		printk(KERN_ERR "CPUidle failed to register driver\n"); +		return ret;  	} -	drv->safe_state_index = 0; -	cpuidle_register_driver(&exynos4_idle_driver); -	for_each_cpu(cpu_id, cpu_online_mask) { +	for_each_online_cpu(cpu_id) {  		device = &per_cpu(exynos4_cpuidle_device, cpu_id);  		device->cpu = cpu_id; -		if (cpu_id == 0) -			device->state_count = (sizeof(exynos4_cpuidle_set) / -					       sizeof(struct cpuidle_state)); -		else -			device->state_count = 1;	/* Support IDLE only */ +		/* Support IDLE only */ +		if (cpu_id != 0) +			device->state_count = 1; -		if (cpuidle_register_device(device)) { -			printk(KERN_ERR "CPUidle register device failed\n,"); -			return -EIO; +		ret = cpuidle_register_device(device); +		if (ret) { +			printk(KERN_ERR "CPUidle register device failed\n"); +			return ret;  		}  	} diff --git a/arch/arm/mach-exynos/dev-ohci.c b/arch/arm/mach-exynos/dev-ohci.c index 4244d02dafb..d5bc129e6bb 100644 --- a/arch/arm/mach-exynos/dev-ohci.c +++ b/arch/arm/mach-exynos/dev-ohci.c @@ -12,7 +12,7 @@  #include <linux/dma-mapping.h>  #include <linux/platform_device.h> -#include <linux/platform_data/usb-exynos.h> +#include <linux/platform_data/usb-ohci-exynos.h>  #include <mach/irqs.h>  #include <mach/map.h> diff --git a/arch/arm/mach-exynos/hotplug.c b/arch/arm/mach-exynos/hotplug.c index c3f825b2794..af90cfa2f82 100644 --- a/arch/arm/mach-exynos/hotplug.c +++ b/arch/arm/mach-exynos/hotplug.c @@ -28,7 +28,6 @@ static inline void cpu_enter_lowpower_a9(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" diff --git a/arch/arm/mach-exynos/include/mach/pm-core.h b/arch/arm/mach-exynos/include/mach/pm-core.h index a67ecfaf121..7dbbfec13ea 100644 --- a/arch/arm/mach-exynos/include/mach/pm-core.h +++ b/arch/arm/mach-exynos/include/mach/pm-core.h @@ -27,13 +27,8 @@ static inline void s3c_pm_debug_init_uart(void)  static inline void s3c_pm_arch_prepare_irqs(void)  { -	unsigned int tmp; -	tmp = __raw_readl(S5P_WAKEUP_MASK); -	tmp &= ~(1 << 31); -	__raw_writel(tmp, S5P_WAKEUP_MASK); - -	__raw_writel(s3c_irqwake_intmask, S5P_WAKEUP_MASK); -	__raw_writel(s3c_irqwake_eintmask & 0xFFFFFFFE, S5P_EINT_WAKEUP_MASK); +	__raw_writel(s3c_irqwake_eintmask, S5P_EINT_WAKEUP_MASK); +	__raw_writel(s3c_irqwake_intmask & ~(1 << 31), S5P_WAKEUP_MASK);  }  static inline void s3c_pm_arch_stop_clocks(void) diff --git a/arch/arm/mach-exynos/mach-nuri.c b/arch/arm/mach-exynos/mach-nuri.c index 081a5baadd8..5c8b2878dbb 100644 --- a/arch/arm/mach-exynos/mach-nuri.c +++ b/arch/arm/mach-exynos/mach-nuri.c @@ -1252,7 +1252,7 @@ static void __init nuri_camera_init(void)  	}  	m5mols_board_info.irq = s5p_register_gpio_interrupt(GPIO_CAM_8M_ISP_INT); -	if (!IS_ERR_VALUE(m5mols_board_info.irq)) +	if (m5mols_board_info.irq >= 0)  		s3c_gpio_cfgpin(GPIO_CAM_8M_ISP_INT, S3C_GPIO_SFN(0xF));  	else  		pr_err("%s: Failed to configure 8M_ISP_INT GPIO\n", __func__); diff --git a/arch/arm/mach-exynos/mach-origen.c b/arch/arm/mach-exynos/mach-origen.c index 27ebe44785f..27f03ed5d06 100644 --- a/arch/arm/mach-exynos/mach-origen.c +++ b/arch/arm/mach-exynos/mach-origen.c @@ -26,7 +26,7 @@  #include <linux/platform_data/i2c-s3c2410.h>  #include <linux/platform_data/s3c-hsotg.h>  #include <linux/platform_data/usb-ehci-s5p.h> -#include <linux/platform_data/usb-exynos.h> +#include <linux/platform_data/usb-ohci-exynos.h>  #include <asm/mach/arch.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-exynos/mach-smdkv310.c b/arch/arm/mach-exynos/mach-smdkv310.c index ee312b67677..d95b8cf8525 100644 --- a/arch/arm/mach-exynos/mach-smdkv310.c +++ b/arch/arm/mach-exynos/mach-smdkv310.c @@ -23,7 +23,7 @@  #include <linux/platform_data/i2c-s3c2410.h>  #include <linux/platform_data/s3c-hsotg.h>  #include <linux/platform_data/usb-ehci-s5p.h> -#include <linux/platform_data/usb-exynos.h> +#include <linux/platform_data/usb-ohci-exynos.h>  #include <asm/mach/arch.h>  #include <asm/mach-types.h> diff --git a/arch/arm/mach-exynos/mach-universal_c210.c b/arch/arm/mach-exynos/mach-universal_c210.c index 72f08fd7cfa..327d50d4681 100644 --- a/arch/arm/mach-exynos/mach-universal_c210.c +++ b/arch/arm/mach-exynos/mach-universal_c210.c @@ -97,6 +97,19 @@ static struct s3c2410_uartcfg universal_uartcfgs[] __initdata = {  static struct regulator_consumer_supply max8952_consumer =  	REGULATOR_SUPPLY("vdd_arm", NULL); +static struct regulator_init_data universal_max8952_reg_data = { +	.constraints	= { +		.name		= "VARM_1.2V", +		.min_uV		= 770000, +		.max_uV		= 1400000, +		.valid_ops_mask	= REGULATOR_CHANGE_VOLTAGE, +		.always_on	= 1, +		.boot_on	= 1, +	}, +	.num_consumer_supplies	= 1, +	.consumer_supplies	= &max8952_consumer, +}; +  static struct max8952_platform_data universal_max8952_pdata __initdata = {  	.gpio_vid0	= EXYNOS4_GPX0(3),  	.gpio_vid1	= EXYNOS4_GPX0(4), @@ -105,19 +118,7 @@ static struct max8952_platform_data universal_max8952_pdata __initdata = {  	.dvs_mode	= { 48, 32, 28, 18 }, /* 1.25, 1.20, 1.05, 0.95V */  	.sync_freq	= 0, /* default: fastest */  	.ramp_speed	= 0, /* default: fastest */ - -	.reg_data	= { -		.constraints	= { -			.name		= "VARM_1.2V", -			.min_uV		= 770000, -			.max_uV		= 1400000, -			.valid_ops_mask	= REGULATOR_CHANGE_VOLTAGE, -			.always_on	= 1, -			.boot_on	= 1, -		}, -		.num_consumer_supplies	= 1, -		.consumer_supplies	= &max8952_consumer, -	}, +	.reg_data	= &universal_max8952_reg_data,  };  static struct regulator_consumer_supply lp3974_buck1_consumer = diff --git a/arch/arm/mach-exynos/platsmp.c b/arch/arm/mach-exynos/platsmp.c index 60f7c5be057..95e04bd5813 100644 --- a/arch/arm/mach-exynos/platsmp.c +++ b/arch/arm/mach-exynos/platsmp.c @@ -20,7 +20,6 @@  #include <linux/jiffies.h>  #include <linux/smp.h>  #include <linux/io.h> -#include <linux/irqchip/arm-gic.h>  #include <asm/cacheflush.h>  #include <asm/smp_plat.h> @@ -76,13 +75,6 @@ static DEFINE_SPINLOCK(boot_lock);  static void __cpuinit exynos_secondary_init(unsigned int cpu)  {  	/* -	 * 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); - -	/*  	 * let the primary processor know we're out of the  	 * pen, then head off into the C entry point  	 */ diff --git a/arch/arm/mach-exynos/setup-usb-phy.c b/arch/arm/mach-exynos/setup-usb-phy.c index b81cc569a8d..6af40662a44 100644 --- a/arch/arm/mach-exynos/setup-usb-phy.c +++ b/arch/arm/mach-exynos/setup-usb-phy.c @@ -204,9 +204,9 @@ static int exynos4210_usb_phy1_exit(struct platform_device *pdev)  int s5p_usb_phy_init(struct platform_device *pdev, int type)  { -	if (type == S5P_USB_PHY_DEVICE) +	if (type == USB_PHY_TYPE_DEVICE)  		return exynos4210_usb_phy0_init(pdev); -	else if (type == S5P_USB_PHY_HOST) +	else if (type == USB_PHY_TYPE_HOST)  		return exynos4210_usb_phy1_init(pdev);  	return -EINVAL; @@ -214,9 +214,9 @@ int s5p_usb_phy_init(struct platform_device *pdev, int type)  int s5p_usb_phy_exit(struct platform_device *pdev, int type)  { -	if (type == S5P_USB_PHY_DEVICE) +	if (type == USB_PHY_TYPE_DEVICE)  		return exynos4210_usb_phy0_exit(pdev); -	else if (type == S5P_USB_PHY_HOST) +	else if (type == USB_PHY_TYPE_HOST)  		return exynos4210_usb_phy1_exit(pdev);  	return -EINVAL; diff --git a/arch/arm/mach-gemini/Makefile b/arch/arm/mach-gemini/Makefile index 7355c0bbcb5..7963a77be63 100644 --- a/arch/arm/mach-gemini/Makefile +++ b/arch/arm/mach-gemini/Makefile @@ -4,7 +4,7 @@  # Object file lists. -obj-y			:= irq.o mm.o time.o devices.o gpio.o idle.o +obj-y			:= irq.o mm.o time.o devices.o gpio.o idle.o reset.o  # Board-specific support  obj-$(CONFIG_MACH_NAS4220B)	+= board-nas4220b.o diff --git a/arch/arm/mach-gemini/board-nas4220b.c b/arch/arm/mach-gemini/board-nas4220b.c index 08bd650c42f..ca8a25bb352 100644 --- a/arch/arm/mach-gemini/board-nas4220b.c +++ b/arch/arm/mach-gemini/board-nas4220b.c @@ -103,4 +103,5 @@ MACHINE_START(NAS4220B, "Raidsonic NAS IB-4220-B")  	.init_irq	= gemini_init_irq,  	.init_time	= gemini_timer_init,  	.init_machine	= ib4220b_init, +	.restart	= gemini_restart,  MACHINE_END diff --git a/arch/arm/mach-gemini/board-rut1xx.c b/arch/arm/mach-gemini/board-rut1xx.c index fa0a36337f4..7a675f88ffd 100644 --- a/arch/arm/mach-gemini/board-rut1xx.c +++ b/arch/arm/mach-gemini/board-rut1xx.c @@ -14,6 +14,7 @@  #include <linux/leds.h>  #include <linux/input.h>  #include <linux/gpio_keys.h> +#include <linux/sizes.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> @@ -87,4 +88,5 @@ MACHINE_START(RUT100, "Teltonika RUT100")  	.init_irq	= gemini_init_irq,  	.init_time	= gemini_timer_init,  	.init_machine	= rut1xx_init, +	.restart	= gemini_restart,  MACHINE_END diff --git a/arch/arm/mach-gemini/board-wbd111.c b/arch/arm/mach-gemini/board-wbd111.c index 3321cd6cc1f..418188cd171 100644 --- a/arch/arm/mach-gemini/board-wbd111.c +++ b/arch/arm/mach-gemini/board-wbd111.c @@ -130,4 +130,5 @@ MACHINE_START(WBD111, "Wiliboard WBD-111")  	.init_irq	= gemini_init_irq,  	.init_time	= gemini_timer_init,  	.init_machine	= wbd111_init, +	.restart	= gemini_restart,  MACHINE_END diff --git a/arch/arm/mach-gemini/board-wbd222.c b/arch/arm/mach-gemini/board-wbd222.c index fe33c825fda..266b265090c 100644 --- a/arch/arm/mach-gemini/board-wbd222.c +++ b/arch/arm/mach-gemini/board-wbd222.c @@ -130,4 +130,5 @@ MACHINE_START(WBD222, "Wiliboard WBD-222")  	.init_irq	= gemini_init_irq,  	.init_time	= gemini_timer_init,  	.init_machine	= wbd222_init, +	.restart	= gemini_restart,  MACHINE_END diff --git a/arch/arm/mach-gemini/common.h b/arch/arm/mach-gemini/common.h index 7670c39acb2..38a45260a7c 100644 --- a/arch/arm/mach-gemini/common.h +++ b/arch/arm/mach-gemini/common.h @@ -26,4 +26,6 @@ extern int platform_register_pflash(unsigned int size,  				    struct mtd_partition *parts,  				    unsigned int nr_parts); +extern void gemini_restart(char mode, const char *cmd); +  #endif /* __GEMINI_COMMON_H__ */ diff --git a/arch/arm/mach-gemini/gpio.c b/arch/arm/mach-gemini/gpio.c index fdc7ef1391d..70bfa571b24 100644 --- a/arch/arm/mach-gemini/gpio.c +++ b/arch/arm/mach-gemini/gpio.c @@ -21,6 +21,7 @@  #include <mach/hardware.h>  #include <mach/irqs.h> +#include <mach/gpio.h>  #define GPIO_BASE(x)		IO_ADDRESS(GEMINI_GPIO_BASE(x)) @@ -44,7 +45,7 @@  #define GPIO_PORT_NUM		3 -static void _set_gpio_irqenable(unsigned int base, unsigned int index, +static void _set_gpio_irqenable(void __iomem *base, unsigned int index,  				int enable)  {  	unsigned int reg; @@ -57,7 +58,7 @@ static void _set_gpio_irqenable(unsigned int base, unsigned int index,  static void gpio_ack_irq(struct irq_data *d)  {  	unsigned int gpio = irq_to_gpio(d->irq); -	unsigned int base = GPIO_BASE(gpio / 32); +	void __iomem *base = GPIO_BASE(gpio / 32);  	__raw_writel(1 << (gpio % 32), base + GPIO_INT_CLR);  } @@ -65,7 +66,7 @@ static void gpio_ack_irq(struct irq_data *d)  static void gpio_mask_irq(struct irq_data *d)  {  	unsigned int gpio = irq_to_gpio(d->irq); -	unsigned int base = GPIO_BASE(gpio / 32); +	void __iomem *base = GPIO_BASE(gpio / 32);  	_set_gpio_irqenable(base, gpio % 32, 0);  } @@ -73,7 +74,7 @@ static void gpio_mask_irq(struct irq_data *d)  static void gpio_unmask_irq(struct irq_data *d)  {  	unsigned int gpio = irq_to_gpio(d->irq); -	unsigned int base = GPIO_BASE(gpio / 32); +	void __iomem *base = GPIO_BASE(gpio / 32);  	_set_gpio_irqenable(base, gpio % 32, 1);  } @@ -82,7 +83,7 @@ static int gpio_set_irq_type(struct irq_data *d, unsigned int type)  {  	unsigned int gpio = irq_to_gpio(d->irq);  	unsigned int gpio_mask = 1 << (gpio % 32); -	unsigned int base = GPIO_BASE(gpio / 32); +	void __iomem *base = GPIO_BASE(gpio / 32);  	unsigned int reg_both, reg_level, reg_type;  	reg_type = __raw_readl(base + GPIO_INT_TYPE); @@ -120,7 +121,7 @@ static int gpio_set_irq_type(struct irq_data *d, unsigned int type)  	__raw_writel(reg_level, base + GPIO_INT_LEVEL);  	__raw_writel(reg_both, base + GPIO_INT_BOTH_EDGE); -	gpio_ack_irq(d->irq); +	gpio_ack_irq(d);  	return 0;  } @@ -153,7 +154,7 @@ static struct irq_chip gpio_irq_chip = {  static void _set_gpio_direction(struct gpio_chip *chip, unsigned offset,  				int dir)  { -	unsigned int base = GPIO_BASE(offset / 32); +	void __iomem *base = GPIO_BASE(offset / 32);  	unsigned int reg;  	reg = __raw_readl(base + GPIO_DIR); @@ -166,7 +167,7 @@ static void _set_gpio_direction(struct gpio_chip *chip, unsigned offset,  static void gemini_gpio_set(struct gpio_chip *chip, unsigned offset, int value)  { -	unsigned int base = GPIO_BASE(offset / 32); +	void __iomem *base = GPIO_BASE(offset / 32);  	if (value)  		__raw_writel(1 << (offset % 32), base + GPIO_DATA_SET); @@ -176,7 +177,7 @@ static void gemini_gpio_set(struct gpio_chip *chip, unsigned offset, int value)  static int gemini_gpio_get(struct gpio_chip *chip, unsigned offset)  { -	unsigned int base = GPIO_BASE(offset / 32); +	void __iomem *base = GPIO_BASE(offset / 32);  	return (__raw_readl(base + GPIO_DATA_IN) >> (offset % 32)) & 1;  } diff --git a/arch/arm/mach-gemini/idle.c b/arch/arm/mach-gemini/idle.c index 92bbd6bb600..87dff4f5059 100644 --- a/arch/arm/mach-gemini/idle.c +++ b/arch/arm/mach-gemini/idle.c @@ -13,9 +13,11 @@ static void gemini_idle(void)  	 * will never wakeup... Acctualy it is not very good to enable  	 * interrupts first since scheduler can miss a tick, but there is  	 * no other way around this. Platforms that needs it for power saving -	 * should call enable_hlt() in init code, since by default it is +	 * should enable it in init code, since by default it is  	 * disabled.  	 */ + +	/* FIXME: Enabling interrupts here is racy! */  	local_irq_enable();  	cpu_do_idle();  } diff --git a/arch/arm/mach-gemini/include/mach/hardware.h b/arch/arm/mach-gemini/include/mach/hardware.h index 8c950e1d06b..98e7b0f286b 100644 --- a/arch/arm/mach-gemini/include/mach/hardware.h +++ b/arch/arm/mach-gemini/include/mach/hardware.h @@ -69,6 +69,6 @@  /*   * macro to get at IO space when running virtually   */ -#define IO_ADDRESS(x)	((((x) & 0xFFF00000) >> 4) | ((x) & 0x000FFFFF) | 0xF0000000) +#define IO_ADDRESS(x)	IOMEM((((x) & 0xFFF00000) >> 4) | ((x) & 0x000FFFFF) | 0xF0000000)  #endif diff --git a/arch/arm/mach-gemini/irq.c b/arch/arm/mach-gemini/irq.c index 020852d3bdd..44f50dcb616 100644 --- a/arch/arm/mach-gemini/irq.c +++ b/arch/arm/mach-gemini/irq.c @@ -15,6 +15,8 @@  #include <linux/stddef.h>  #include <linux/list.h>  #include <linux/sched.h> +#include <linux/cpu.h> +  #include <asm/irq.h>  #include <asm/mach/irq.h>  #include <asm/system_misc.h> @@ -65,8 +67,8 @@ static struct irq_chip gemini_irq_chip = {  static struct resource irq_resource = {  	.name	= "irq_handler", -	.start	= IO_ADDRESS(GEMINI_INTERRUPT_BASE), -	.end	= IO_ADDRESS(FIQ_STATUS(GEMINI_INTERRUPT_BASE)) + 4, +	.start	= GEMINI_INTERRUPT_BASE, +	.end	= FIQ_STATUS(GEMINI_INTERRUPT_BASE) + 4,  };  void __init gemini_init_irq(void) @@ -77,7 +79,7 @@ void __init gemini_init_irq(void)  	 * Disable the idle handler by default since it is buggy  	 * For more info see arch/arm/mach-gemini/idle.c  	 */ -	disable_hlt(); +	cpu_idle_poll_ctrl(true);  	request_resource(&iomem_resource, &irq_resource); diff --git a/arch/arm/mach-gemini/mm.c b/arch/arm/mach-gemini/mm.c index 51948242ec0..2c2cd284bb6 100644 --- a/arch/arm/mach-gemini/mm.c +++ b/arch/arm/mach-gemini/mm.c @@ -19,57 +19,57 @@  /* Page table mapping for I/O region */  static struct map_desc gemini_io_desc[] __initdata = {  	{ -		.virtual	= IO_ADDRESS(GEMINI_GLOBAL_BASE), +		.virtual	= (unsigned long)IO_ADDRESS(GEMINI_GLOBAL_BASE),  		.pfn		=__phys_to_pfn(GEMINI_GLOBAL_BASE),  		.length		= SZ_512K,  		.type 		= MT_DEVICE,  	}, { -		.virtual	= IO_ADDRESS(GEMINI_UART_BASE), +		.virtual	= (unsigned long)IO_ADDRESS(GEMINI_UART_BASE),  		.pfn		= __phys_to_pfn(GEMINI_UART_BASE),  		.length		= SZ_512K,  		.type 		= MT_DEVICE,  	}, { -		.virtual	= IO_ADDRESS(GEMINI_TIMER_BASE), +		.virtual	= (unsigned long)IO_ADDRESS(GEMINI_TIMER_BASE),  		.pfn		= __phys_to_pfn(GEMINI_TIMER_BASE),  		.length		= SZ_512K,  		.type 		= MT_DEVICE,  	}, { -		.virtual	= IO_ADDRESS(GEMINI_INTERRUPT_BASE), +		.virtual	= (unsigned long)IO_ADDRESS(GEMINI_INTERRUPT_BASE),  		.pfn		= __phys_to_pfn(GEMINI_INTERRUPT_BASE),  		.length		= SZ_512K,  		.type 		= MT_DEVICE,  	}, { -		.virtual	= IO_ADDRESS(GEMINI_POWER_CTRL_BASE), +		.virtual	= (unsigned long)IO_ADDRESS(GEMINI_POWER_CTRL_BASE),  		.pfn		= __phys_to_pfn(GEMINI_POWER_CTRL_BASE),  		.length		= SZ_512K,  		.type 		= MT_DEVICE,  	}, { -		.virtual	= IO_ADDRESS(GEMINI_GPIO_BASE(0)), +		.virtual	= (unsigned long)IO_ADDRESS(GEMINI_GPIO_BASE(0)),  		.pfn		= __phys_to_pfn(GEMINI_GPIO_BASE(0)),  		.length		= SZ_512K,  		.type 		= MT_DEVICE,  	}, { -		.virtual	= IO_ADDRESS(GEMINI_GPIO_BASE(1)), +		.virtual	= (unsigned long)IO_ADDRESS(GEMINI_GPIO_BASE(1)),  		.pfn		= __phys_to_pfn(GEMINI_GPIO_BASE(1)),  		.length		= SZ_512K,  		.type 		= MT_DEVICE,  	}, { -		.virtual	= IO_ADDRESS(GEMINI_GPIO_BASE(2)), +		.virtual	= (unsigned long)IO_ADDRESS(GEMINI_GPIO_BASE(2)),  		.pfn		= __phys_to_pfn(GEMINI_GPIO_BASE(2)),  		.length		= SZ_512K,  		.type 		= MT_DEVICE,  	}, { -		.virtual	= IO_ADDRESS(GEMINI_FLASH_CTRL_BASE), +		.virtual	= (unsigned long)IO_ADDRESS(GEMINI_FLASH_CTRL_BASE),  		.pfn		= __phys_to_pfn(GEMINI_FLASH_CTRL_BASE),  		.length		= SZ_512K,  		.type 		= MT_DEVICE,  	}, { -		.virtual	= IO_ADDRESS(GEMINI_DRAM_CTRL_BASE), +		.virtual	= (unsigned long)IO_ADDRESS(GEMINI_DRAM_CTRL_BASE),  		.pfn		= __phys_to_pfn(GEMINI_DRAM_CTRL_BASE),  		.length		= SZ_512K,  		.type 		= MT_DEVICE,  	}, { -		.virtual	= IO_ADDRESS(GEMINI_GENERAL_DMA_BASE), +		.virtual	= (unsigned long)IO_ADDRESS(GEMINI_GENERAL_DMA_BASE),  		.pfn		= __phys_to_pfn(GEMINI_GENERAL_DMA_BASE),  		.length		= SZ_512K,  		.type 		= MT_DEVICE, diff --git a/arch/arm/mach-gemini/include/mach/system.h b/arch/arm/mach-gemini/reset.c index a33b5a1f8ab..b26659759e2 100644 --- a/arch/arm/mach-gemini/include/mach/system.h +++ b/arch/arm/mach-gemini/reset.c @@ -14,7 +14,7 @@  #include <mach/hardware.h>  #include <mach/global_reg.h> -static inline void arch_reset(char mode, const char *cmd) +void gemini_restart(char mode, const char *cmd)  {  	__raw_writel(RESET_GLOBAL | RESET_CPU1,  		     IO_ADDRESS(GEMINI_GLOBAL_BASE) + GLOBAL_RESET); diff --git a/arch/arm/mach-h720x/Kconfig b/arch/arm/mach-h720x/Kconfig deleted file mode 100644 index 6bb755bcb6f..00000000000 --- a/arch/arm/mach-h720x/Kconfig +++ /dev/null @@ -1,40 +0,0 @@ -if ARCH_H720X - -menu "h720x Implementations" - -config ARCH_H7201 -	bool "gms30c7201" -	depends on ARCH_H720X -	select CPU_H7201 -	select ZONE_DMA -	help -	  Say Y here if you are using the Hynix GMS30C7201 Reference Board - -config ARCH_H7202 -	bool "hms30c7202" -	depends on ARCH_H720X -	select CPU_H7202 -	select ZONE_DMA -	help -	  Say Y here if you are using the Hynix HMS30C7202 Reference Board - -endmenu - -config CPU_H7201 -	bool -	help -	  Select code specific to h7201 variants - -config CPU_H7202 -	bool -	help -	  Select code specific to h7202 variants -config H7202_SERIAL23 -	depends on CPU_H7202 -	bool "Use serial ports 2+3" -	help -	  Say Y here if you wish to use serial ports 2+3. They share their -	  pins with the keyboard matrix controller, so you have to decide. - - -endif diff --git a/arch/arm/mach-h720x/Makefile b/arch/arm/mach-h720x/Makefile deleted file mode 100644 index e4cf728948e..00000000000 --- a/arch/arm/mach-h720x/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -# -# Makefile for the linux kernel. -# - -# Common support -obj-y := common.o -obj-m := -obj-n := -obj-  := - -# Specific board support - -obj-$(CONFIG_ARCH_H7201)		+= h7201-eval.o -obj-$(CONFIG_ARCH_H7202)		+= h7202-eval.o -obj-$(CONFIG_CPU_H7201) 		+= cpu-h7201.o -obj-$(CONFIG_CPU_H7202) 		+= cpu-h7202.o diff --git a/arch/arm/mach-h720x/Makefile.boot b/arch/arm/mach-h720x/Makefile.boot deleted file mode 100644 index d875a7094df..00000000000 --- a/arch/arm/mach-h720x/Makefile.boot +++ /dev/null @@ -1,2 +0,0 @@ -   zreladdr-$(CONFIG_ARCH_H720X)	+= 0x40008000 - diff --git a/arch/arm/mach-h720x/common.c b/arch/arm/mach-h720x/common.c deleted file mode 100644 index 17ef91fa3d5..00000000000 --- a/arch/arm/mach-h720x/common.c +++ /dev/null @@ -1,268 +0,0 @@ -/* - * linux/arch/arm/mach-h720x/common.c - * - * Copyright (C) 2003 Thomas Gleixner <tglx@linutronix.de> - *               2003 Robert Schwebel <r.schwebel@pengutronix.de> - *               2004 Sascha Hauer    <s.hauer@pengutronix.de> - * - * common stuff for Hynix h720x processors - * - * 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/sched.h> -#include <linux/mman.h> -#include <linux/init.h> -#include <linux/interrupt.h> -#include <linux/io.h> - -#include <asm/page.h> -#include <asm/pgtable.h> -#include <asm/dma.h> -#include <mach/hardware.h> -#include <asm/irq.h> -#include <asm/system_misc.h> -#include <asm/mach/irq.h> -#include <asm/mach/map.h> -#include <mach/irqs.h> - -#include <asm/mach/dma.h> - -#if 0 -#define IRQDBG(args...) printk(args) -#else -#define IRQDBG(args...) do {} while(0) -#endif - -void __init arch_dma_init(dma_t *dma) -{ -} - -/* - * Return nsecs since last timer reload - * (timercount * (usecs perjiffie)) / (ticks per jiffie) - */ -u32 h720x_gettimeoffset(void) -{ -	return ((CPU_REG(TIMER_VIRT, TM0_COUNT) * tick_usec) / LATCH) * 1000; -} - -/* - * mask Global irq's - */ -static void mask_global_irq(struct irq_data *d) -{ -	CPU_REG (IRQC_VIRT, IRQC_IER) &= ~(1 << d->irq); -} - -/* - * unmask Global irq's - */ -static void unmask_global_irq(struct irq_data *d) -{ -	CPU_REG (IRQC_VIRT, IRQC_IER) |= (1 << d->irq); -} - - -/* - * ack GPIO irq's - * Ack only for edge triggered int's valid - */ -static void inline ack_gpio_irq(struct irq_data *d) -{ -	u32 reg_base = GPIO_VIRT(IRQ_TO_REGNO(d->irq)); -	u32 bit = IRQ_TO_BIT(d->irq); -	if ( (CPU_REG (reg_base, GPIO_EDGE) & bit)) -		CPU_REG (reg_base, GPIO_CLR) = bit; -} - -/* - * mask GPIO irq's - */ -static void inline mask_gpio_irq(struct irq_data *d) -{ -	u32 reg_base = GPIO_VIRT(IRQ_TO_REGNO(d->irq)); -	u32 bit = IRQ_TO_BIT(d->irq); -	CPU_REG (reg_base, GPIO_MASK) &= ~bit; -} - -/* - * unmask GPIO irq's - */ -static void inline unmask_gpio_irq(struct irq_data *d) -{ -	u32 reg_base = GPIO_VIRT(IRQ_TO_REGNO(d->irq)); -	u32 bit = IRQ_TO_BIT(d->irq); -	CPU_REG (reg_base, GPIO_MASK) |= bit; -} - -static void -h720x_gpio_handler(unsigned int mask, unsigned int irq, -                 struct irq_desc *desc) -{ -	IRQDBG("%s irq: %d\n", __func__, irq); -	while (mask) { -		if (mask & 1) { -			IRQDBG("handling irq %d\n", irq); -			generic_handle_irq(irq); -		} -		irq++; -		mask >>= 1; -	} -} - -static void -h720x_gpioa_demux_handler(unsigned int irq_unused, struct irq_desc *desc) -{ -	unsigned int mask, irq; - -	mask = CPU_REG(GPIO_A_VIRT,GPIO_STAT); -	irq = IRQ_CHAINED_GPIOA(0); -	IRQDBG("%s mask: 0x%08x irq: %d\n", __func__, mask,irq); -	h720x_gpio_handler(mask, irq, desc); -} - -static void -h720x_gpiob_demux_handler(unsigned int irq_unused, struct irq_desc *desc) -{ -	unsigned int mask, irq; -	mask = CPU_REG(GPIO_B_VIRT,GPIO_STAT); -	irq = IRQ_CHAINED_GPIOB(0); -	IRQDBG("%s mask: 0x%08x irq: %d\n", __func__, mask,irq); -	h720x_gpio_handler(mask, irq, desc); -} - -static void -h720x_gpioc_demux_handler(unsigned int irq_unused, struct irq_desc *desc) -{ -	unsigned int mask, irq; - -	mask = CPU_REG(GPIO_C_VIRT,GPIO_STAT); -	irq = IRQ_CHAINED_GPIOC(0); -	IRQDBG("%s mask: 0x%08x irq: %d\n", __func__, mask,irq); -	h720x_gpio_handler(mask, irq, desc); -} - -static void -h720x_gpiod_demux_handler(unsigned int irq_unused, struct irq_desc *desc) -{ -	unsigned int mask, irq; - -	mask = CPU_REG(GPIO_D_VIRT,GPIO_STAT); -	irq = IRQ_CHAINED_GPIOD(0); -	IRQDBG("%s mask: 0x%08x irq: %d\n", __func__, mask,irq); -	h720x_gpio_handler(mask, irq, desc); -} - -#ifdef CONFIG_CPU_H7202 -static void -h720x_gpioe_demux_handler(unsigned int irq_unused, struct irq_desc *desc) -{ -	unsigned int mask, irq; - -	mask = CPU_REG(GPIO_E_VIRT,GPIO_STAT); -	irq = IRQ_CHAINED_GPIOE(0); -	IRQDBG("%s mask: 0x%08x irq: %d\n", __func__, mask,irq); -	h720x_gpio_handler(mask, irq, desc); -} -#endif - -static struct irq_chip h720x_global_chip = { -	.irq_ack = mask_global_irq, -	.irq_mask = mask_global_irq, -	.irq_unmask = unmask_global_irq, -}; - -static struct irq_chip h720x_gpio_chip = { -	.irq_ack = ack_gpio_irq, -	.irq_mask = mask_gpio_irq, -	.irq_unmask = unmask_gpio_irq, -}; - -/* - * Initialize IRQ's, mask all, enable multiplexed irq's - */ -void __init h720x_init_irq (void) -{ -	int 	irq; - -	/* Mask global irq's */ -	CPU_REG (IRQC_VIRT, IRQC_IER) = 0x0; - -	/* Mask all multiplexed irq's */ -	CPU_REG (GPIO_A_VIRT, GPIO_MASK) = 0x0; -	CPU_REG (GPIO_B_VIRT, GPIO_MASK) = 0x0; -	CPU_REG (GPIO_C_VIRT, GPIO_MASK) = 0x0; -	CPU_REG (GPIO_D_VIRT, GPIO_MASK) = 0x0; - -	/* Initialize global IRQ's, fast path */ -	for (irq = 0; irq < NR_GLBL_IRQS; irq++) { -		irq_set_chip_and_handler(irq, &h720x_global_chip, -					 handle_level_irq); -		set_irq_flags(irq, IRQF_VALID | IRQF_PROBE); -	} - -	/* Initialize multiplexed IRQ's, slow path */ -	for (irq = IRQ_CHAINED_GPIOA(0) ; irq <= IRQ_CHAINED_GPIOD(31); irq++) { -		irq_set_chip_and_handler(irq, &h720x_gpio_chip, -					 handle_edge_irq); -		set_irq_flags(irq, IRQF_VALID ); -	} -	irq_set_chained_handler(IRQ_GPIOA, h720x_gpioa_demux_handler); -	irq_set_chained_handler(IRQ_GPIOB, h720x_gpiob_demux_handler); -	irq_set_chained_handler(IRQ_GPIOC, h720x_gpioc_demux_handler); -	irq_set_chained_handler(IRQ_GPIOD, h720x_gpiod_demux_handler); - -#ifdef CONFIG_CPU_H7202 -	for (irq = IRQ_CHAINED_GPIOE(0) ; irq <= IRQ_CHAINED_GPIOE(31); irq++) { -		irq_set_chip_and_handler(irq, &h720x_gpio_chip, -					 handle_edge_irq); -		set_irq_flags(irq, IRQF_VALID ); -	} -	irq_set_chained_handler(IRQ_GPIOE, h720x_gpioe_demux_handler); -#endif - -	/* Enable multiplexed irq's */ -	CPU_REG (IRQC_VIRT, IRQC_IER) = IRQ_ENA_MUX; -} - -static struct map_desc h720x_io_desc[] __initdata = { -	{ -		.virtual	= IO_VIRT, -		.pfn		= __phys_to_pfn(IO_PHYS), -		.length		= IO_SIZE, -		.type		= MT_DEVICE -	}, -}; - -/* Initialize io tables */ -void __init h720x_map_io(void) -{ -	iotable_init(h720x_io_desc,ARRAY_SIZE(h720x_io_desc)); -} - -void h720x_restart(char mode, const char *cmd) -{ -	CPU_REG (PMU_BASE, PMU_STAT) |= PMU_WARMRESET; -} - -static void h720x__idle(void) -{ -	CPU_REG (PMU_BASE, PMU_MODE) = PMU_MODE_IDLE; -	nop(); -	nop(); -	CPU_REG (PMU_BASE, PMU_MODE) = PMU_MODE_RUN; -	nop(); -	nop(); -} - -static int __init h720x_idle_init(void) -{ -	arm_pm_idle = h720x__idle; -	return 0; -} - -arch_initcall(h720x_idle_init); diff --git a/arch/arm/mach-h720x/common.h b/arch/arm/mach-h720x/common.h deleted file mode 100644 index 7e738410ca9..00000000000 --- a/arch/arm/mach-h720x/common.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * linux/arch/arm/mach-h720x/common.h - * - * Copyright (C) 2003 Thomas Gleixner <tglx@linutronix.de> - *               2003 Robert Schwebel <r.schwebel@pengutronix.de> - *               2004 Sascha Hauer    <s.hauer@pengutronix.de> - * - * Architecture specific stuff for Hynix GMS30C7201 development board - * - * 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. - * - */ - -extern u32 h720x_gettimeoffset(void); -extern void __init h720x_init_irq(void); -extern void __init h720x_map_io(void); -extern void h720x_restart(char, const char *); - -#ifdef CONFIG_ARCH_H7202 -extern void h7202_timer_init(void); -extern void __init init_hw_h7202(void); -extern void __init h7202_init_irq(void); -extern void __init h7202_init_time(void); -#endif - -#ifdef CONFIG_ARCH_H7201 -extern void h7201_timer_init(void); -#endif diff --git a/arch/arm/mach-h720x/cpu-h7201.c b/arch/arm/mach-h720x/cpu-h7201.c deleted file mode 100644 index 13c74121538..00000000000 --- a/arch/arm/mach-h720x/cpu-h7201.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * linux/arch/arm/mach-h720x/cpu-h7201.c - * - * Copyright (C) 2003 Thomas Gleixner <tglx@linutronix.de> - *               2003 Robert Schwebel <r.schwebel@pengutronix.de> - *               2004 Sascha Hauer    <s.hauer@pengutronix.de> - * - * processor specific stuff for the Hynix h7201 - * - * 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/init.h> -#include <linux/interrupt.h> -#include <linux/module.h> -#include <asm/types.h> -#include <mach/hardware.h> -#include <asm/irq.h> -#include <mach/irqs.h> -#include <asm/mach/irq.h> -#include <asm/mach/time.h> -#include "common.h" -/* - * Timer interrupt handler - */ -static irqreturn_t -h7201_timer_interrupt(int irq, void *dev_id) -{ -	CPU_REG (TIMER_VIRT, TIMER_TOPSTAT); -	timer_tick(); - -	return IRQ_HANDLED; -} - -static struct irqaction h7201_timer_irq = { -	.name		= "h7201 Timer Tick", -	.flags		= IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, -	.handler	= h7201_timer_interrupt, -}; - -/* - * Setup TIMER0 as system timer - */ -void __init h7201_timer_init(void) -{ -	arch_gettimeoffset = h720x_gettimeoffset; - -	CPU_REG (TIMER_VIRT, TM0_PERIOD) = LATCH; -	CPU_REG (TIMER_VIRT, TM0_CTRL) = TM_RESET; -	CPU_REG (TIMER_VIRT, TM0_CTRL) = TM_REPEAT | TM_START; -	CPU_REG (TIMER_VIRT, TIMER_TOPCTRL) = ENABLE_TM0_INTR | TIMER_ENABLE_BIT; - -	setup_irq(IRQ_TIMER0, &h7201_timer_irq); -} diff --git a/arch/arm/mach-h720x/cpu-h7202.c b/arch/arm/mach-h720x/cpu-h7202.c deleted file mode 100644 index e2ae7e898f9..00000000000 --- a/arch/arm/mach-h720x/cpu-h7202.c +++ /dev/null @@ -1,225 +0,0 @@ -/* - * linux/arch/arm/mach-h720x/cpu-h7202.c - * - * Copyright (C) 2003 Thomas Gleixner <tglx@linutronix.de> - *               2003 Robert Schwebel <r.schwebel@pengutronix.de> - *               2004 Sascha Hauer    <s.hauer@pengutronix.de> - * - * processor specific stuff for the Hynix h7202 - * - * 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/init.h> -#include <linux/interrupt.h> -#include <linux/module.h> -#include <asm/types.h> -#include <mach/hardware.h> -#include <asm/irq.h> -#include <mach/irqs.h> -#include <asm/mach/irq.h> -#include <asm/mach/time.h> -#include <linux/device.h> -#include <linux/serial_8250.h> -#include "common.h" - -static struct resource h7202ps2_resources[] = { -	[0] = { -		.start	= 0x8002c000, -		.end	= 0x8002c040, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= IRQ_PS2, -		.end	= IRQ_PS2, -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device h7202ps2_device = { -	.name		= "h7202ps2", -	.id		= -1, -	.num_resources	= ARRAY_SIZE(h7202ps2_resources), -	.resource	= h7202ps2_resources, -}; - -static struct plat_serial8250_port serial_platform_data[] = { -	{ -		.membase	= (void*)SERIAL0_VIRT, -		.mapbase	= SERIAL0_BASE, -		.irq		= IRQ_UART0, -		.uartclk	= 2*1843200, -		.regshift	= 2, -		.iotype		= UPIO_MEM, -		.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, -	}, -	{ -		.membase	= (void*)SERIAL1_VIRT, -		.mapbase	= SERIAL1_BASE, -		.irq		= IRQ_UART1, -		.uartclk	= 2*1843200, -		.regshift	= 2, -		.iotype		= UPIO_MEM, -		.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, -	}, -#ifdef CONFIG_H7202_SERIAL23 -	{ -		.membase	= (void*)SERIAL2_VIRT, -		.mapbase	= SERIAL2_BASE, -		.irq		= IRQ_UART2, -		.uartclk	= 2*1843200, -		.regshift	= 2, -		.iotype		= UPIO_MEM, -		.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, -	}, -	{ -		.membase	= (void*)SERIAL3_VIRT, -		.mapbase	= SERIAL3_BASE, -		.irq		= IRQ_UART3, -		.uartclk	= 2*1843200, -		.regshift	= 2, -		.iotype		= UPIO_MEM, -		.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, -	}, -#endif -	{ }, -}; - -static struct platform_device serial_device = { -	.name			= "serial8250", -	.id			= PLAT8250_DEV_PLATFORM, -	.dev			= { -		.platform_data	= serial_platform_data, -	}, -}; - -static struct platform_device *devices[] __initdata = { -	&h7202ps2_device, -	&serial_device, -}; - -/* Although we have two interrupt lines for the timers, we only have one - * status register which clears all pending timer interrupts on reading. So - * we have to handle all timer interrupts in one place. - */ -static void -h7202_timerx_demux_handler(unsigned int irq_unused, struct irq_desc *desc) -{ -	unsigned int mask, irq; - -	mask = CPU_REG (TIMER_VIRT, TIMER_TOPSTAT); - -	if ( mask & TSTAT_T0INT ) { -		timer_tick(); -		if( mask == TSTAT_T0INT ) -			return; -	} - -	mask >>= 1; -	irq = IRQ_TIMER1; -	while (mask) { -		if (mask & 1) -			generic_handle_irq(irq); -		irq++; -		mask >>= 1; -	} -} - -/* - * Timer interrupt handler - */ -static irqreturn_t -h7202_timer_interrupt(int irq, void *dev_id) -{ -	h7202_timerx_demux_handler(0, NULL); -	return IRQ_HANDLED; -} - -/* - * mask multiplexed timer IRQs - */ -static void inline __mask_timerx_irq(unsigned int irq) -{ -	unsigned int bit; -	bit = 2 << ((irq == IRQ_TIMER64B) ? 4 : (irq - IRQ_TIMER1)); -	CPU_REG (TIMER_VIRT, TIMER_TOPCTRL) &= ~bit; -} - -static void inline mask_timerx_irq(struct irq_data *d) -{ -	__mask_timerx_irq(d->irq); -} - -/* - * unmask multiplexed timer IRQs - */ -static void inline unmask_timerx_irq(struct irq_data *d) -{ -	unsigned int bit; -	bit = 2 << ((d->irq == IRQ_TIMER64B) ? 4 : (d->irq - IRQ_TIMER1)); -	CPU_REG (TIMER_VIRT, TIMER_TOPCTRL) |= bit; -} - -static struct irq_chip h7202_timerx_chip = { -	.irq_ack = mask_timerx_irq, -	.irq_mask = mask_timerx_irq, -	.irq_unmask = unmask_timerx_irq, -}; - -static struct irqaction h7202_timer_irq = { -	.name		= "h7202 Timer Tick", -	.flags		= IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, -	.handler	= h7202_timer_interrupt, -}; - -/* - * Setup TIMER0 as system timer - */ -void __init h7202_timer_init(void) -{ -	arch_gettimeoffset = h720x_gettimeoffset; - -	CPU_REG (TIMER_VIRT, TM0_PERIOD) = LATCH; -	CPU_REG (TIMER_VIRT, TM0_CTRL) = TM_RESET; -	CPU_REG (TIMER_VIRT, TM0_CTRL) = TM_REPEAT | TM_START; -	CPU_REG (TIMER_VIRT, TIMER_TOPCTRL) = ENABLE_TM0_INTR | TIMER_ENABLE_BIT; - -	setup_irq(IRQ_TIMER0, &h7202_timer_irq); -} - -void __init h7202_init_irq (void) -{ -	int 	irq; - -	CPU_REG (GPIO_E_VIRT, GPIO_MASK) = 0x0; - -	for (irq = IRQ_TIMER1; -	                  irq < IRQ_CHAINED_TIMERX(NR_TIMERX_IRQS); irq++) { -		__mask_timerx_irq(irq); -		irq_set_chip_and_handler(irq, &h7202_timerx_chip, -					 handle_edge_irq); -		set_irq_flags(irq, IRQF_VALID ); -	} -	irq_set_chained_handler(IRQ_TIMERX, h7202_timerx_demux_handler); - -	h720x_init_irq(); -} - -void __init init_hw_h7202(void) -{ -	/* Enable clocks */ -	CPU_REG (PMU_BASE, PMU_PLL_CTRL) |= PLL_2_EN | PLL_1_EN | PLL_3_MUTE; - -	CPU_REG (SERIAL0_VIRT, SERIAL_ENABLE) = SERIAL_ENABLE_EN; -	CPU_REG (SERIAL1_VIRT, SERIAL_ENABLE) = SERIAL_ENABLE_EN; -#ifdef CONFIG_H7202_SERIAL23 -	CPU_REG (SERIAL2_VIRT, SERIAL_ENABLE) = SERIAL_ENABLE_EN; -	CPU_REG (SERIAL3_VIRT, SERIAL_ENABLE) = SERIAL_ENABLE_EN; -	CPU_IO (GPIO_AMULSEL) = AMULSEL_USIN2 | AMULSEL_USOUT2 | -	                        AMULSEL_USIN3 | AMULSEL_USOUT3; -#endif -	(void) platform_add_devices(devices, ARRAY_SIZE(devices)); -} diff --git a/arch/arm/mach-h720x/h7201-eval.c b/arch/arm/mach-h720x/h7201-eval.c deleted file mode 100644 index 4fdeb686c0a..00000000000 --- a/arch/arm/mach-h720x/h7201-eval.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * linux/arch/arm/mach-h720x/h7201-eval.c - * - * Copyright (C) 2003 Thomas Gleixner <tglx@linutronix.de> - *               2003 Robert Schwebel <r.schwebel@pengutronix.de> - *               2004 Sascha Hauer    <s.hauer@pengutronix.de> - * - * Architecture specific stuff for Hynix GMS30C7201 development board - * - * 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/init.h> -#include <linux/kernel.h> -#include <linux/types.h> -#include <linux/string.h> -#include <linux/device.h> - -#include <asm/setup.h> -#include <asm/types.h> -#include <asm/mach-types.h> -#include <asm/page.h> -#include <asm/mach/arch.h> -#include <mach/hardware.h> -#include "common.h" - -MACHINE_START(H7201, "Hynix GMS30C7201") -	/* Maintainer: Robert Schwebel, Pengutronix */ -	.atag_offset	= 0x1000, -	.map_io		= h720x_map_io, -	.init_irq	= h720x_init_irq, -	.init_time	= h7201_timer_init, -	.dma_zone_size	= SZ_256M, -	.restart	= h720x_restart, -MACHINE_END diff --git a/arch/arm/mach-h720x/h7202-eval.c b/arch/arm/mach-h720x/h7202-eval.c deleted file mode 100644 index f68e967a206..00000000000 --- a/arch/arm/mach-h720x/h7202-eval.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - * linux/arch/arm/mach-h720x/h7202-eval.c - * - * Copyright (C) 2003 Thomas Gleixner <tglx@linutronix.de> - *               2003 Robert Schwebel <r.schwebel@pengutronix.de> - *		 2004 Sascha Hauer <s.hauer@pengutronix.de> - * - * Architecture specific stuff for Hynix HMS30C7202 development board - * - * 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/init.h> -#include <linux/kernel.h> -#include <linux/types.h> -#include <linux/string.h> -#include <linux/platform_device.h> - -#include <asm/setup.h> -#include <asm/types.h> -#include <asm/mach-types.h> -#include <asm/page.h> -#include <asm/mach/arch.h> -#include <mach/irqs.h> -#include <mach/hardware.h> -#include "common.h" - -static struct resource cirrus_resources[] = { -	[0] = { -		.start	= ETH0_PHYS + 0x300, -		.end	= ETH0_PHYS + 0x300 + 0x10, -		.flags	= IORESOURCE_MEM, -	}, -	[1] = { -		.start	= IRQ_CHAINED_GPIOB(8), -		.end	= IRQ_CHAINED_GPIOB(8), -		.flags	= IORESOURCE_IRQ, -	}, -}; - -static struct platform_device cirrus_device = { -	.name		= "cirrus-cs89x0", -	.id		= -1, -	.num_resources	= ARRAY_SIZE(cirrus_resources), -	.resource	= cirrus_resources, -}; - -static struct platform_device *devices[] __initdata = { -	&cirrus_device, -}; - -/* - * Hardware init. This is called early in initcalls - * Place pin inits here. So you avoid adding ugly - * #ifdef stuff to common drivers. - * Use this only, if your bootloader is not able - * to initialize the pins proper. - */ -static void __init init_eval_h7202(void) -{ -	init_hw_h7202(); -	(void) platform_add_devices(devices, ARRAY_SIZE(devices)); - -	/* Enable interrupt on portb bit 8 (ethernet) */ -	CPU_REG (GPIO_B_VIRT, GPIO_POL) &= ~(1 << 8); -	CPU_REG (GPIO_B_VIRT, GPIO_EN) |= (1 << 8); -} - -MACHINE_START(H7202, "Hynix HMS30C7202") -	/* Maintainer: Robert Schwebel, Pengutronix */ -	.atag_offset	= 0x100, -	.map_io		= h720x_map_io, -	.init_irq	= h7202_init_irq, -	.init_time	= h7202_timer_init, -	.init_machine	= init_eval_h7202, -	.dma_zone_size	= SZ_256M, -	.restart	= h720x_restart, -MACHINE_END diff --git a/arch/arm/mach-h720x/include/mach/boards.h b/arch/arm/mach-h720x/include/mach/boards.h deleted file mode 100644 index 38b8e0d61fb..00000000000 --- a/arch/arm/mach-h720x/include/mach/boards.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * arch/arm/mach-h720x/include/mach/boards.h - * - * Copyright (C) 2003 Thomas Gleixner <tglx@linutronix.de> - *           (C) 2003 Robert Schwebel <r.schwebel@pengutronix.de> - * - * This file contains the board specific defines for various devices - * - * 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. - */ - -#ifndef __ASM_ARCH_HARDWARE_INCMACH_H -#error Do not include this file directly. Include asm/hardware.h instead ! -#endif - -/* Hynix H7202 developer board specific device defines */ -#ifdef CONFIG_ARCH_H7202 - -/* FLASH */ -#define H720X_FLASH_VIRT	0xd0000000 -#define H720X_FLASH_PHYS	0x00000000 -#define H720X_FLASH_SIZE	0x02000000 - -/* onboard LAN controller */ -# define ETH0_PHYS		0x08000000 - -/* Touch screen defines */ -/* GPIO Port */ -#define PEN_GPIO		GPIO_B_VIRT -/* Bitmask for pen down interrupt */ -#define PEN_INT_BIT		(1<<7) -/* Bitmask for pen up interrupt */ -#define PEN_ENA_BIT		(1<<6) -/* pen up interrupt */ -#define IRQ_PEN			IRQ_MUX_GPIOB(7) - -#endif - -/* Hynix H7201 developer board specific device defines */ -#if defined (CONFIG_ARCH_H7201) -/* ROM DISK SPACE */ -#define ROM_DISK_BASE           0xc1800000 -#define ROM_DISK_START          0x41800000 -#define ROM_DISK_SIZE           0x00700000 - -/* SRAM DISK SPACE */ -#define SRAM_DISK_BASE          0xf1000000 -#define SRAM_DISK_START         0x04000000 -#define SRAM_DISK_SIZE          0x00400000 -#endif - diff --git a/arch/arm/mach-h720x/include/mach/debug-macro.S b/arch/arm/mach-h720x/include/mach/debug-macro.S deleted file mode 100644 index 8a46157b058..00000000000 --- a/arch/arm/mach-h720x/include/mach/debug-macro.S +++ /dev/null @@ -1,40 +0,0 @@ -/* arch/arm/mach-h720x/include/mach/debug-macro.S - * - * Debugging macro include header - * - *  Copyright (C) 1994-1999 Russell King - *  Moved from linux/arch/arm/kernel/debug.S by Ben Dooks - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * -*/ - -#include <mach/hardware.h> - -		.equ    io_virt, IO_VIRT -		.equ    io_phys, IO_PHYS - -		.macro  addruart, rp, rv, tmp -		mov     \rp, #0x00020000	@ UART1 -		add     \rv, \rp, #io_virt	@ virtual address -		add     \rp, \rp, #io_phys	@ physical base address -		.endm - -		.macro  senduart,rd,rx -		str     \rd, [\rx, #0x0]        @ UARTDR - -		.endm - -		.macro  waituart,rd,rx -1001:		ldr     \rd, [\rx, #0x18]       @ UARTFLG -		tst     \rd, #1 << 5	       @ UARTFLGUTXFF - 1 when full -		bne     1001b -		.endm - -		.macro  busyuart,rd,rx -1001:		ldr     \rd, [\rx, #0x18]       @ UARTFLG -		tst     \rd, #1 << 3	       @ UARTFLGUBUSY - 1 when busy -		bne     1001b -		.endm diff --git a/arch/arm/mach-h720x/include/mach/entry-macro.S b/arch/arm/mach-h720x/include/mach/entry-macro.S deleted file mode 100644 index 75267fad701..00000000000 --- a/arch/arm/mach-h720x/include/mach/entry-macro.S +++ /dev/null @@ -1,57 +0,0 @@ -/* - * arch/arm/mach-h720x/include/mach/entry-macro.S - * - * Low-level IRQ helper macros for Hynix HMS720x based platforms - * - * This file is licensed under  the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -		.macro  get_irqnr_preamble, base, tmp -		.endm - -		.macro  get_irqnr_and_base, irqnr, irqstat, base, tmp -#if defined (CONFIG_CPU_H7201) || defined (CONFIG_CPU_H7202) -		@ we could use the id register on H7202, but this is not -		@ properly updated when we come back from asm_do_irq -		@ without a previous return from interrupt -		@ (see loops below in irq_svc, irq_usr) -		@ We see unmasked pending ints only, as the masked pending ints -		@ are not visible here - -		mov     \base, #0xf0000000	       @ base register -		orr     \base, \base, #0x24000	       @ irqbase -		ldr     \irqstat, [\base, #0x04]        @ get interrupt status -#if defined (CONFIG_CPU_H7201) -		ldr	\tmp, =0x001fffff -#else -		mvn     \tmp, #0xc0000000 -#endif -		and     \irqstat, \irqstat, \tmp        @ mask out unused ints -		mov     \irqnr, #0 - -		mov     \tmp, #0xff00 -		orr     \tmp, \tmp, #0xff -		tst     \irqstat, \tmp -		addeq   \irqnr, \irqnr, #16 -		moveq   \irqstat, \irqstat, lsr #16 -		tst     \irqstat, #255 -		addeq   \irqnr, \irqnr, #8 -		moveq   \irqstat, \irqstat, lsr #8 -		tst     \irqstat, #15 -		addeq   \irqnr, \irqnr, #4 -		moveq   \irqstat, \irqstat, lsr #4 -		tst     \irqstat, #3 -		addeq   \irqnr, \irqnr, #2 -		moveq   \irqstat, \irqstat, lsr #2 -		tst     \irqstat, #1 -		addeq   \irqnr, \irqnr, #1 -		moveq   \irqstat, \irqstat, lsr #1 -		tst     \irqstat, #1		       @ bit 0 should be set -		.endm - -#else -#error hynix processor selection missmatch -#endif - diff --git a/arch/arm/mach-h720x/include/mach/h7201-regs.h b/arch/arm/mach-h720x/include/mach/h7201-regs.h deleted file mode 100644 index 611b4947ccf..00000000000 --- a/arch/arm/mach-h720x/include/mach/h7201-regs.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * arch/arm/mach-h720x/include/mach/h7201-regs.h - * - * Copyright (C) 2000 Jungjun Kim, Hynix Semiconductor Inc. - *           (C) 2003 Thomas Gleixner <tglx@linutronix.de> - *           (C) 2003 Robert Schwebel <r.schwebel@pengutronix.de> - *           (C) 2004 Sascha Hauer    <s.hauer@pengutronix.de> - * - * This file contains the hardware definitions of the h720x processors - * - * 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. - * - * Do not add implementations specific defines here. This files contains - * only defines of the onchip peripherals. Add those defines to boards.h, - * which is included by this file. - */ - -#define SERIAL2_VIRT 		(IO_VIRT + 0x50100) -#define SERIAL3_VIRT 		(IO_VIRT + 0x50200) - -/* - * PCMCIA - */ -#define PCMCIA0_ATT_BASE        0xe5000000 -#define PCMCIA0_ATT_SIZE        0x00200000 -#define PCMCIA0_ATT_START       0x20000000 -#define PCMCIA0_MEM_BASE        0xe5200000 -#define PCMCIA0_MEM_SIZE        0x00200000 -#define PCMCIA0_MEM_START       0x24000000 -#define PCMCIA0_IO_BASE         0xe5400000 -#define PCMCIA0_IO_SIZE         0x00200000 -#define PCMCIA0_IO_START        0x28000000 - -#define PCMCIA1_ATT_BASE        0xe5600000 -#define PCMCIA1_ATT_SIZE        0x00200000 -#define PCMCIA1_ATT_START       0x30000000 -#define PCMCIA1_MEM_BASE        0xe5800000 -#define PCMCIA1_MEM_SIZE        0x00200000 -#define PCMCIA1_MEM_START       0x34000000 -#define PCMCIA1_IO_BASE         0xe5a00000 -#define PCMCIA1_IO_SIZE         0x00200000 -#define PCMCIA1_IO_START        0x38000000 - -#define PRIME3C_BASE            0xf0050000 -#define PRIME3C_SIZE            0x00001000 -#define PRIME3C_START           0x10000000 - -/* VGA Controller */ -#define VGA_RAMBASE 		0x50 -#define VGA_TIMING0 		0x60 -#define VGA_TIMING1 		0x64 -#define VGA_TIMING2 		0x68 -#define VGA_TIMING3 		0x6c - -#define LCD_CTRL_VGA_ENABLE   	0x00000100 -#define LCD_CTRL_VGA_BPP_MASK 	0x00000600 -#define LCD_CTRL_VGA_4BPP    	0x00000000 -#define LCD_CTRL_VGA_8BPP    	0x00000200 -#define LCD_CTRL_VGA_16BPP   	0x00000300 -#define LCD_CTRL_SHARE_DMA    	0x00000800 -#define LCD_CTRL_VDE          	0x00100000 -#define LCD_CTRL_LPE          	0x00400000	/* LCD Power enable */ -#define LCD_CTRL_BLE          	0x00800000	/* LCD backlight enable */ - -#define VGA_PALETTE_BASE	(IO_VIRT + 0x10800) diff --git a/arch/arm/mach-h720x/include/mach/h7202-regs.h b/arch/arm/mach-h720x/include/mach/h7202-regs.h deleted file mode 100644 index 17c12eb3499..00000000000 --- a/arch/arm/mach-h720x/include/mach/h7202-regs.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - * arch/arm/mach-h720x/include/mach/h7202-regs.h - * - * Copyright (C) 2000 Jungjun Kim, Hynix Semiconductor Inc. - *           (C) 2003 Thomas Gleixner <tglx@linutronix.de> - *           (C) 2003 Robert Schwebel <r.schwebel@pengutronix.de> - *           (C) 2004 Sascha Hauer    <s.hauer@pengutronix.de> - * - * This file contains the hardware definitions of the h720x processors - * - * 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. - * - * Do not add implementations specific defines here. This files contains - * only defines of the onchip peripherals. Add those defines to boards.h, - * which is included by this file. - */ - -#define SERIAL2_OFS		0x2d000 -#define SERIAL2_BASE		(IO_PHYS + SERIAL2_OFS) -#define SERIAL2_VIRT 		(IO_VIRT + SERIAL2_OFS) -#define SERIAL3_OFS		0x2e000 -#define SERIAL3_BASE		(IO_PHYS + SERIAL3_OFS) -#define SERIAL3_VIRT 		(IO_VIRT + SERIAL3_OFS) - -/* Matrix Keyboard Controller */ -#define KBD_VIRT		(IO_VIRT + 0x22000) -#define KBD_KBCR		0x00 -#define KBD_KBSC		0x04 -#define KBD_KBTR		0x08 -#define KBD_KBVR0		0x0C -#define KBD_KBVR1		0x10 -#define KBD_KBSR		0x18 - -#define KBD_KBCR_SCANENABLE	(1 << 7) -#define KBD_KBCR_NPOWERDOWN	(1 << 2) -#define KBD_KBCR_CLKSEL_MASK	(3) -#define KBD_KBCR_CLKSEL_PCLK2	0x0 -#define KBD_KBCR_CLKSEL_PCLK128	0x1 -#define KBD_KBCR_CLKSEL_PCLK256	0x2 -#define KBD_KBCR_CLKSEL_PCLK512	0x3 - -#define KBD_KBSR_INTR		(1 << 0) -#define KBD_KBSR_WAKEUP		(1 << 1) - -/* USB device controller */ - -#define USBD_BASE		(IO_VIRT + 0x12000) -#define USBD_LENGTH		0x3C - -#define USBD_GCTRL		0x00 -#define USBD_EPCTRL		0x04 -#define USBD_INTMASK		0x08 -#define USBD_INTSTAT		0x0C -#define USBD_PWR		0x10 -#define USBD_DMARXTX		0x14 -#define USBD_DEVID		0x18 -#define USBD_DEVCLASS		0x1C -#define USBD_INTCLASS		0x20 -#define USBD_SETUP0		0x24 -#define USBD_SETUP1		0x28 -#define USBD_ENDP0RD		0x2C -#define USBD_ENDP0WT		0x30 -#define USBD_ENDP1RD		0x34 -#define USBD_ENDP2WT		0x38 - -/* PS/2 port */ -#define PSDATA 0x00 -#define PSSTAT 0x04 -#define PSSTAT_TXEMPTY (1<<0) -#define PSSTAT_TXBUSY (1<<1) -#define PSSTAT_RXFULL (1<<2) -#define PSSTAT_RXBUSY (1<<3) -#define PSSTAT_CLKIN (1<<4) -#define PSSTAT_DATAIN (1<<5) -#define PSSTAT_PARITY (1<<6) - -#define PSCONF 0x08 -#define PSCONF_ENABLE (1<<0) -#define PSCONF_TXINTEN (1<<2) -#define PSCONF_RXINTEN (1<<3) -#define PSCONF_FORCECLKLOW (1<<4) -#define PSCONF_FORCEDATLOW (1<<5) -#define PSCONF_LCE (1<<6) - -#define PSINTR 0x0C -#define PSINTR_TXINT (1<<0) -#define PSINTR_RXINT (1<<1) -#define PSINTR_PAR (1<<2) -#define PSINTR_RXTO (1<<3) -#define PSINTR_TXTO (1<<4) - -#define PSTDLO 0x10 /* clk low before start transmission */ -#define PSTPRI 0x14 /* PRI clock */ -#define PSTXMT 0x18 /* maximum transmission time */ -#define PSTREC 0x20 /* maximum receive time */ -#define PSPWDN 0x3c - -/* ADC converter */ -#define ADC_BASE 		(IO_VIRT + 0x29000) -#define ADC_CR 			0x00 -#define ADC_TSCTRL 		0x04 -#define ADC_BT_CTRL 		0x08 -#define ADC_MC_CTRL		0x0C -#define ADC_STATUS		0x10 - -/* ADC control register bits */ -#define ADC_CR_PW_CTRL 		0x80 -#define ADC_CR_DIRECTC		0x04 -#define ADC_CR_CONTIME_NO	0x00 -#define ADC_CR_CONTIME_2	0x04 -#define ADC_CR_CONTIME_4	0x08 -#define ADC_CR_CONTIME_ADE	0x0c -#define ADC_CR_LONGCALTIME	0x01 - -/* ADC touch panel register bits */ -#define ADC_TSCTRL_ENABLE 	0x80 -#define ADC_TSCTRL_INTR   	0x40 -#define	ADC_TSCTRL_SWBYPSS	0x20 -#define ADC_TSCTRL_SWINVT	0x10 -#define ADC_TSCTRL_S400   	0x03 -#define ADC_TSCTRL_S200   	0x02 -#define ADC_TSCTRL_S100   	0x01 -#define ADC_TSCTRL_S50    	0x00 - -/* ADC Interrupt Status Register bits */ -#define ADC_STATUS_TS_BIT	0x80 -#define ADC_STATUS_MBT_BIT	0x40 -#define ADC_STATUS_BBT_BIT	0x20 -#define ADC_STATUS_MIC_BIT	0x10 - -/* Touch data registers */ -#define ADC_TS_X0X1  		0x30 -#define ADC_TS_X2X3		0x34 -#define ADC_TS_Y0Y1		0x38 -#define ADC_TS_Y2Y3  		0x3c -#define ADC_TS_X4X5  		0x40 -#define ADC_TS_X6X7  		0x44 -#define ADC_TS_Y4Y5		0x48 -#define ADC_TS_Y6Y7		0x50 - -/* battery data */ -#define ADC_MB_DATA		0x54 -#define ADC_BB_DATA		0x58 - -/* Sound data register */ -#define ADC_SD_DAT0 		0x60 -#define ADC_SD_DAT1		0x64 -#define ADC_SD_DAT2		0x68 -#define ADC_SD_DAT3		0x6c -#define ADC_SD_DAT4		0x70 -#define ADC_SD_DAT5		0x74 -#define ADC_SD_DAT6		0x78 -#define ADC_SD_DAT7		0x7c diff --git a/arch/arm/mach-h720x/include/mach/hardware.h b/arch/arm/mach-h720x/include/mach/hardware.h deleted file mode 100644 index c55a52c6541..00000000000 --- a/arch/arm/mach-h720x/include/mach/hardware.h +++ /dev/null @@ -1,190 +0,0 @@ -/* - * arch/arm/mach-h720x/include/mach/hardware.h - * - * Copyright (C) 2000 Jungjun Kim, Hynix Semiconductor Inc. - *           (C) 2003 Thomas Gleixner <tglx@linutronix.de> - *           (C) 2003 Robert Schwebel <r.schwebel@pengutronix.de> - * - * This file contains the hardware definitions of the h720x processors - * - * 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. - * - * Do not add implementations specific defines here. This files contains - * only defines of the onchip peripherals. Add those defines to boards.h, - * which is included by this file. - */ - -#ifndef __ASM_ARCH_HARDWARE_H -#define __ASM_ARCH_HARDWARE_H - -#define IOCLK (3686400L) - -/* Onchip peripherals */ - -#define IO_VIRT			0xf0000000	/* IO peripherals */ -#define IO_PHYS			0x80000000 -#define IO_SIZE			0x00050000 - -#ifdef CONFIG_CPU_H7202 -#include "h7202-regs.h" -#elif defined CONFIG_CPU_H7201 -#include "h7201-regs.h" -#else -#error machine definition mismatch -#endif - -/* Macro to access the CPU IO */ -#define CPU_IO(x) (*(volatile u32*)(x)) - -/* Macro to access general purpose regs (base, offset) */ -#define CPU_REG(x,y) CPU_IO(x+y) - -/* Macro to access irq related regs */ -#define IRQ_REG(x) CPU_REG(IRQC_VIRT,x) - -/* CPU registers */ -/* general purpose I/O */ -#define GPIO_VIRT(x)		(IO_VIRT + 0x23000 + ((x)<<5)) -#define GPIO_A_VIRT		(GPIO_VIRT(0)) -#define GPIO_B_VIRT		(GPIO_VIRT(1)) -#define GPIO_C_VIRT		(GPIO_VIRT(2)) -#define GPIO_D_VIRT		(GPIO_VIRT(3)) -#define GPIO_E_VIRT		(GPIO_VIRT(4)) -#define GPIO_AMULSEL		(GPIO_VIRT(0) + 0xA4) - -#define AMULSEL_USIN2	(1<<5) -#define AMULSEL_USOUT2	(1<<6) -#define AMULSEL_USIN3	(1<<13) -#define AMULSEL_USOUT3	(1<<14) -#define AMULSEL_IRDIN	(1<<15) -#define AMULSEL_IRDOUT	(1<<7) - -/* Register offsets general purpose I/O */ -#define GPIO_DATA		0x00 -#define GPIO_DIR		0x04 -#define GPIO_MASK		0x08 -#define GPIO_STAT		0x0C -#define GPIO_EDGE		0x10 -#define GPIO_CLR		0x14 -#define GPIO_POL		0x18 -#define GPIO_EN			0x1C - -/*interrupt controller */ -#define IRQC_VIRT		(IO_VIRT + 0x24000) -/* register offset interrupt controller */ -#define IRQC_IER		0x00 -#define IRQC_ISR		0x04 - -/* timer unit */ -#define TIMER_VIRT		(IO_VIRT + 0x25000) -/* Register offsets timer unit */ -#define TM0_PERIOD   		0x00 -#define TM0_COUNT    		0x08 -#define TM0_CTRL     		0x10 -#define TM1_PERIOD   		0x20 -#define TM1_COUNT    		0x28 -#define TM1_CTRL     		0x30 -#define TM2_PERIOD   		0x40 -#define TM2_COUNT    		0x48 -#define TM2_CTRL     		0x50 -#define TIMER_TOPCTRL		0x60 -#define TIMER_TOPSTAT		0x64 -#define T64_COUNTL		0x80 -#define T64_COUNTH		0x84 -#define T64_CTRL		0x88 -#define T64_BASEL		0x94 -#define T64_BASEH		0x98 -/* Bitmaks timer unit TOPSTAT reg */ -#define TSTAT_T0INT		0x1 -#define TSTAT_T1INT		0x2 -#define TSTAT_T2INT		0x4 -#define TSTAT_T3INT		0x8 -/* Bit description of TMx_CTRL register */ -#define TM_START  		0x1 -#define TM_REPEAT 		0x2 -#define TM_RESET  		0x4 -/* Bit description of TIMER_CTRL register */ -#define ENABLE_TM0_INTR  	0x1 -#define ENABLE_TM1_INTR  	0x2 -#define ENABLE_TM2_INTR  	0x4 -#define TIMER_ENABLE_BIT 	0x8 -#define ENABLE_TIMER64   	0x10 -#define ENABLE_TIMER64_INT	0x20 - -/* PMU & PLL */ -#define PMU_BASE 		(IO_VIRT + 0x1000) -#define PMU_MODE		0x00 -#define PMU_STAT   		0x20 -#define PMU_PLL_CTRL 		0x28 - -/* PMU Mode bits */ -#define PMU_MODE_SLOW		0x00 -#define PMU_MODE_RUN		0x01 -#define PMU_MODE_IDLE		0x02 -#define PMU_MODE_SLEEP		0x03 -#define PMU_MODE_INIT		0x04 -#define PMU_MODE_DEEPSLEEP	0x07 -#define PMU_MODE_WAKEUP		0x08 - -/* PMU ... */ -#define PLL_2_EN		0x8000 -#define PLL_1_EN		0x4000 -#define PLL_3_MUTE		0x0080 - -/* Control bits for PMU/ PLL */ -#define PMU_WARMRESET		0x00010000 -#define PLL_CTRL_MASK23		0x000080ff - -/* LCD Controller */ -#define LCD_BASE 		(IO_VIRT + 0x10000) -#define LCD_CTRL 		0x00 -#define LCD_STATUS		0x04 -#define LCD_STATUS_M		0x08 -#define LCD_INTERRUPT		0x0C -#define LCD_DBAR		0x10 -#define LCD_DCAR		0x14 -#define LCD_TIMING0 		0x20 -#define LCD_TIMING1 		0x24 -#define LCD_TIMING2 		0x28 -#define LCD_TEST		0x40 - -/* LCD Control Bits */ -#define LCD_CTRL_LCD_ENABLE   	0x00000001 -/* Bits per pixel */ -#define LCD_CTRL_LCD_BPP_MASK 	0x00000006 -#define LCD_CTRL_LCD_4BPP    	0x00000000 -#define LCD_CTRL_LCD_8BPP    	0x00000002 -#define LCD_CTRL_LCD_16BPP   	0x00000004 -#define LCD_CTRL_LCD_BW		0x00000008 -#define LCD_CTRL_LCD_TFT	0x00000010 -#define LCD_CTRL_BGR		0x00001000 -#define LCD_CTRL_LCD_VCOMP	0x00080000 -#define LCD_CTRL_LCD_MONO8	0x00200000 -#define LCD_CTRL_LCD_PWR	0x00400000 -#define LCD_CTRL_LCD_BLE	0x00800000 -#define LCD_CTRL_LDBUSEN	0x01000000 - -/* Palette */ -#define LCD_PALETTE_BASE 	(IO_VIRT + 0x10400) - -/* Serial ports */ -#define SERIAL0_OFS		0x20000 -#define SERIAL0_VIRT 		(IO_VIRT + SERIAL0_OFS) -#define SERIAL0_BASE		(IO_PHYS + SERIAL0_OFS) - -#define SERIAL1_OFS		0x21000 -#define SERIAL1_VIRT 		(IO_VIRT + SERIAL1_OFS) -#define SERIAL1_BASE		(IO_PHYS + SERIAL1_OFS) - -#define SERIAL_ENABLE		0x30 -#define SERIAL_ENABLE_EN	(1<<0) - -/* General defines to pacify gcc */ - -#define __ASM_ARCH_HARDWARE_INCMACH_H -#include "boards.h" -#undef __ASM_ARCH_HARDWARE_INCMACH_H - -#endif				/* __ASM_ARCH_HARDWARE_H */ diff --git a/arch/arm/mach-h720x/include/mach/irqs.h b/arch/arm/mach-h720x/include/mach/irqs.h deleted file mode 100644 index 430a92b492f..00000000000 --- a/arch/arm/mach-h720x/include/mach/irqs.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * arch/arm/mach-h720x/include/mach/irqs.h - * - * Copyright (C) 2000 Jungjun Kim - *           (C) 2003 Robert Schwebel <r.schwebel@pengutronix.de> - *           (C) 2003 Thomas Gleixner <tglx@linutronix.de> - * - */ - -#ifndef __ASM_ARCH_IRQS_H -#define __ASM_ARCH_IRQS_H - -#if defined (CONFIG_CPU_H7201) - -#define IRQ_PMU		0		/* 0x000001 */ -#define IRQ_DMA		1 		/* 0x000002 */ -#define IRQ_LCD		2		/* 0x000004 */ -#define IRQ_VGA		3 		/* 0x000008 */ -#define IRQ_PCMCIA1 	4 		/* 0x000010 */ -#define IRQ_PCMCIA2 	5 		/* 0x000020 */ -#define IRQ_AFE		6 		/* 0x000040 */ -#define IRQ_AIC		7 		/* 0x000080 */ -#define IRQ_KEYBOARD 	8 		/* 0x000100 */ -#define IRQ_TIMER0	9 		/* 0x000200 */ -#define IRQ_RTC		10		/* 0x000400 */ -#define IRQ_SOUND	11		/* 0x000800 */ -#define IRQ_USB		12		/* 0x001000 */ -#define IRQ_IrDA 	13		/* 0x002000 */ -#define IRQ_UART0	14		/* 0x004000 */ -#define IRQ_UART1	15		/* 0x008000 */ -#define IRQ_SPI		16		/* 0x010000 */ -#define IRQ_GPIOA 	17		/* 0x020000 */ -#define IRQ_GPIOB	18		/* 0x040000 */ -#define IRQ_GPIOC	19		/* 0x080000 */ -#define IRQ_GPIOD	20		/* 0x100000 */ -#define IRQ_CommRX	21		/* 0x200000 */ -#define IRQ_CommTX	22		/* 0x400000 */ -#define IRQ_Soft	23		/* 0x800000 */ - -#define NR_GLBL_IRQS	24 - -#define IRQ_CHAINED_GPIOA(x)  (NR_GLBL_IRQS + x) -#define IRQ_CHAINED_GPIOB(x)  (IRQ_CHAINED_GPIOA(32) + x) -#define IRQ_CHAINED_GPIOC(x)  (IRQ_CHAINED_GPIOB(32) + x) -#define IRQ_CHAINED_GPIOD(x)  (IRQ_CHAINED_GPIOC(32) + x) -#define NR_IRQS               IRQ_CHAINED_GPIOD(32) - -/* Enable mask for multiplexed interrupts */ -#define IRQ_ENA_MUX	(1<<IRQ_GPIOA) | (1<<IRQ_GPIOB) \ -			| (1<<IRQ_GPIOC) | (1<<IRQ_GPIOD) - - -#elif defined (CONFIG_CPU_H7202) - -#define IRQ_PMU		0		/* 0x00000001 */ -#define IRQ_DMA		1		/* 0x00000002 */ -#define IRQ_LCD		2		/* 0x00000004 */ -#define IRQ_SOUND	3		/* 0x00000008 */ -#define IRQ_I2S		4		/* 0x00000010 */ -#define IRQ_USB 	5		/* 0x00000020 */ -#define IRQ_MMC 	6		/* 0x00000040 */ -#define IRQ_RTC 	7		/* 0x00000080 */ -#define IRQ_UART0 	8		/* 0x00000100 */ -#define IRQ_UART1 	9		/* 0x00000200 */ -#define IRQ_UART2 	10		/* 0x00000400 */ -#define IRQ_UART3 	11		/* 0x00000800 */ -#define IRQ_KBD 	12		/* 0x00001000 */ -#define IRQ_PS2 	13		/* 0x00002000 */ -#define IRQ_AIC 	14		/* 0x00004000 */ -#define IRQ_TIMER0 	15		/* 0x00008000 */ -#define IRQ_TIMERX 	16		/* 0x00010000 */ -#define IRQ_WDT 	17		/* 0x00020000 */ -#define IRQ_CAN0 	18		/* 0x00040000 */ -#define IRQ_CAN1 	19		/* 0x00080000 */ -#define IRQ_EXT0 	20		/* 0x00100000 */ -#define IRQ_EXT1 	21		/* 0x00200000 */ -#define IRQ_GPIOA 	22		/* 0x00400000 */ -#define IRQ_GPIOB 	23		/* 0x00800000 */ -#define IRQ_GPIOC 	24		/* 0x01000000 */ -#define IRQ_GPIOD 	25		/* 0x02000000 */ -#define IRQ_GPIOE 	26		/* 0x04000000 */ -#define IRQ_COMMRX 	27		/* 0x08000000 */ -#define IRQ_COMMTX 	28		/* 0x10000000 */ -#define IRQ_SMC 	29		/* 0x20000000 */ -#define IRQ_Soft 	30		/* 0x40000000 */ -#define IRQ_RESERVED1 	31		/* 0x80000000 */ -#define NR_GLBL_IRQS	32 - -#define NR_TIMERX_IRQS	3 - -#define IRQ_CHAINED_GPIOA(x)  (NR_GLBL_IRQS + x) -#define IRQ_CHAINED_GPIOB(x)  (IRQ_CHAINED_GPIOA(32) + x) -#define IRQ_CHAINED_GPIOC(x)  (IRQ_CHAINED_GPIOB(32) + x) -#define IRQ_CHAINED_GPIOD(x)  (IRQ_CHAINED_GPIOC(32) + x) -#define IRQ_CHAINED_GPIOE(x)  (IRQ_CHAINED_GPIOD(32) + x) -#define IRQ_CHAINED_TIMERX(x) (IRQ_CHAINED_GPIOE(32) + x) -#define IRQ_TIMER1            (IRQ_CHAINED_TIMERX(0)) -#define IRQ_TIMER2            (IRQ_CHAINED_TIMERX(1)) -#define IRQ_TIMER64B          (IRQ_CHAINED_TIMERX(2)) - -#define NR_IRQS		(IRQ_CHAINED_TIMERX(NR_TIMERX_IRQS)) - -/* Enable mask for multiplexed interrupts */ -#define IRQ_ENA_MUX	(1<<IRQ_TIMERX) | (1<<IRQ_GPIOA) | (1<<IRQ_GPIOB) | \ -			(1<<IRQ_GPIOC) 	| (1<<IRQ_GPIOD) | (1<<IRQ_GPIOE) | \ -			(1<<IRQ_TIMERX) - -#else -#error cpu definition mismatch -#endif - -/* decode irq number to register number */ -#define IRQ_TO_REGNO(irq) ((irq - NR_GLBL_IRQS) >> 5) -#define IRQ_TO_BIT(irq) (1 << ((irq - NR_GLBL_IRQS) % 32)) - -#endif diff --git a/arch/arm/mach-h720x/include/mach/isa-dma.h b/arch/arm/mach-h720x/include/mach/isa-dma.h deleted file mode 100644 index 3eafb3f163c..00000000000 --- a/arch/arm/mach-h720x/include/mach/isa-dma.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * arch/arm/mach-h720x/include/mach/isa-dma.h - * - * Architecture DMA routes - * - * Copyright (C) 1997.1998 Russell King - */ -#ifndef __ASM_ARCH_DMA_H -#define __ASM_ARCH_DMA_H - -#if defined (CONFIG_CPU_H7201) -#define MAX_DMA_CHANNELS	3 -#elif defined (CONFIG_CPU_H7202) -#define MAX_DMA_CHANNELS	4 -#else -#error processor definition missmatch -#endif - -#endif /* __ASM_ARCH_DMA_H */ diff --git a/arch/arm/mach-h720x/include/mach/uncompress.h b/arch/arm/mach-h720x/include/mach/uncompress.h deleted file mode 100644 index 43e343c4b50..00000000000 --- a/arch/arm/mach-h720x/include/mach/uncompress.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * arch/arm/mach-h720x/include/mach/uncompress.h - * - * Copyright (C) 2001-2002 Jungjun Kim - */ - -#ifndef __ASM_ARCH_UNCOMPRESS_H -#define __ASM_ARCH_UNCOMPRESS_H - -#include <mach/hardware.h> - -#define LSR 	0x14 -#define TEMPTY 	0x40 - -static inline void putc(int c) -{ -	volatile unsigned char *p = (volatile unsigned char *)(IO_PHYS+0x20000); - -	/* wait until transmit buffer is empty */ -	while((p[LSR] & TEMPTY) == 0x0) -		barrier(); - -	/* write next character */ -	*p = c; -} - -static inline void flush(void) -{ -} - -/* - * nothing to do - */ -#define arch_decomp_setup() - -#endif diff --git a/arch/arm/mach-highbank/Kconfig b/arch/arm/mach-highbank/Kconfig index 44b12f9c158..cd9fcb1cd7a 100644 --- a/arch/arm/mach-highbank/Kconfig +++ b/arch/arm/mach-highbank/Kconfig @@ -12,6 +12,7 @@ config ARCH_HIGHBANK  	select CPU_V7  	select GENERIC_CLOCKEVENTS  	select HAVE_ARM_SCU +	select HAVE_ARM_TWD if LOCAL_TIMERS  	select HAVE_SMP  	select MAILBOX  	select PL320_MBOX diff --git a/arch/arm/mach-highbank/hotplug.c b/arch/arm/mach-highbank/hotplug.c index f30c5284339..a019e4e86e5 100644 --- a/arch/arm/mach-highbank/hotplug.c +++ b/arch/arm/mach-highbank/hotplug.c @@ -14,7 +14,6 @@   * this program.  If not, see <http://www.gnu.org/licenses/>.   */  #include <linux/kernel.h> -  #include <asm/cacheflush.h>  #include "core.h" @@ -28,13 +27,11 @@ extern void secondary_startup(void);   */  void __ref highbank_cpu_die(unsigned int cpu)  { -	flush_cache_all(); -  	highbank_set_cpu_jump(cpu, phys_to_virt(0)); -	highbank_set_core_pwr(); -	cpu_do_idle(); +	flush_cache_louis(); +	highbank_set_core_pwr(); -	/* We should never return from idle */ -	panic("highbank: cpu %d unexpectedly exit from shutdown\n", cpu); +	while (1) +		cpu_do_idle();  } diff --git a/arch/arm/mach-highbank/platsmp.c b/arch/arm/mach-highbank/platsmp.c index 8797a700172..a984573e0d0 100644 --- a/arch/arm/mach-highbank/platsmp.c +++ b/arch/arm/mach-highbank/platsmp.c @@ -17,7 +17,6 @@  #include <linux/init.h>  #include <linux/smp.h>  #include <linux/io.h> -#include <linux/irqchip/arm-gic.h>  #include <asm/smp_scu.h> @@ -25,11 +24,6 @@  extern void secondary_startup(void); -static void __cpuinit highbank_secondary_init(unsigned int cpu) -{ -	gic_secondary_init(0); -} -  static int __cpuinit highbank_boot_secondary(unsigned int cpu, struct task_struct *idle)  {  	highbank_set_cpu_jump(cpu, secondary_startup); @@ -67,7 +61,6 @@ static void __init highbank_smp_prepare_cpus(unsigned int max_cpus)  struct smp_operations highbank_smp_ops __initdata = {  	.smp_init_cpus		= highbank_smp_init_cpus,  	.smp_prepare_cpus	= highbank_smp_prepare_cpus, -	.smp_secondary_init	= highbank_secondary_init,  	.smp_boot_secondary	= highbank_boot_secondary,  #ifdef CONFIG_HOTPLUG_CPU  	.cpu_die		= highbank_cpu_die, diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index 4c9c6f9d2c5..d58ad4ff8d3 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -83,24 +83,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_MX51 -	bool - -config ARCH_MX53 -	bool -  config SOC_IMX1  	bool  	select ARCH_MX1 @@ -114,7 +102,6 @@ config SOC_IMX21  	select COMMON_CLK  	select CPU_ARM926T  	select IMX_HAVE_IOMUX_V1 -	select MACH_MX21  	select MXC_AVIC  config SOC_IMX25 @@ -155,7 +142,6 @@ config SOC_IMX35  config SOC_IMX5  	bool  	select ARCH_HAS_CPUFREQ -	select ARCH_MX5  	select ARCH_MXC_IOMUX_V3  	select COMMON_CLK  	select CPU_V7 @@ -163,8 +149,7 @@ config SOC_IMX5  config	SOC_IMX51  	bool -	select ARCH_MX5 -	select ARCH_MX51 +	select HAVE_IMX_SRC  	select PINCTRL  	select PINCTRL_IMX51  	select SOC_IMX5 @@ -789,9 +774,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 @@ -811,7 +795,8 @@ 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_GPC  	select HAVE_IMX_MMDC diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile index c4ce0906d76..fbe60a14534 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 @@ -27,10 +27,9 @@ 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  ifeq ($(CONFIG_CPU_IDLE),y) -obj-y += cpuidle.o +obj-$(CONFIG_SOC_IMX5) += cpuidle-imx5.o  obj-$(CONFIG_SOC_IMX6Q) += cpuidle-imx6q.o  endif diff --git a/arch/arm/mach-imx/Makefile.boot b/arch/arm/mach-imx/Makefile.boot deleted file mode 100644 index 41ba1bb0437..00000000000 --- a/arch/arm/mach-imx/Makefile.boot +++ /dev/null @@ -1,35 +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_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/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 85b728cc27a..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,  }; 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-imx27.c b/arch/arm/mach-imx/clk-imx27.c index 30b3242a7d4..c3cfa4116dc 100644 --- a/arch/arm/mach-imx/clk-imx27.c +++ b/arch/arm/mach-imx/clk-imx27.c @@ -86,10 +86,12 @@ enum mx27_clks {  };  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); @@ -198,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"); @@ -276,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-imx35.c b/arch/arm/mach-imx/clk-imx35.c index e13a8fa5e62..2193c834f55 100644 --- a/arch/arm/mach-imx/clk-imx35.c +++ b/arch/arm/mach-imx/clk-imx35.c @@ -257,6 +257,7 @@ int __init mx35_clocks_init(void)  	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]); @@ -265,6 +266,7 @@ int __init mx35_clocks_init(void)  	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 0f39f8c93b9..2bc623b414c 100644 --- a/arch/arm/mach-imx/clk-imx51-imx53.c +++ b/arch/arm/mach-imx/clk-imx51-imx53.c @@ -281,7 +281,7 @@ 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"); @@ -362,9 +362,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"); @@ -471,10 +468,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 2f9ff93a4e6..d38e54f5b6d 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c @@ -115,7 +115,7 @@ static const char *gpu2d_core_sels[]	= { "axi", "pll3_usb_otg", "pll2_pfd0_352m"  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 *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", "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", }; @@ -443,7 +443,6 @@ 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); 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/common.h b/arch/arm/mach-imx/common.h index 5a800bfcec5..9fea2522d7a 100644 --- a/arch/arm/mach-imx/common.h +++ b/arch/arm/mach-imx/common.h @@ -110,8 +110,9 @@ void tzic_handle_irq(struct pt_regs *);  extern void imx_enable_cpu(int cpu, bool enable);  extern void imx_set_cpu_jump(int cpu, void *jump_addr); +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); @@ -122,8 +123,6 @@ 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); diff --git a/arch/arm/mach-imx/cpu-imx5.c b/arch/arm/mach-imx/cpu-imx5.c index d7ce72252a4..c1c99a72c6a 100644 --- a/arch/arm/mach-imx/cpu-imx5.c +++ b/arch/arm/mach-imx/cpu-imx5.c @@ -18,6 +18,7 @@  #include <linux/io.h>  #include "hardware.h" +#include "common.h"  static int mx5_cpu_rev = -1; 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 index d533e2695f0..23ddfb693b2 100644 --- a/arch/arm/mach-imx/cpuidle-imx6q.c +++ b/arch/arm/mach-imx/cpuidle-imx6q.c @@ -6,7 +6,6 @@   * published by the Free Software Foundation.   */ -#include <linux/clockchips.h>  #include <linux/cpuidle.h>  #include <linux/module.h>  #include <asm/cpuidle.h> @@ -21,10 +20,6 @@ static DEFINE_SPINLOCK(master_lock);  static int imx6q_enter_wait(struct cpuidle_device *dev,  			    struct cpuidle_driver *drv, int index)  { -	int cpu = dev->cpu; - -	clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, &cpu); -  	if (atomic_inc_return(&master) == num_online_cpus()) {  		/*  		 * With this lock, we prevent other cpu to exit and enter @@ -43,26 +38,13 @@ idle:  	cpu_do_idle();  done:  	atomic_dec(&master); -	clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &cpu);  	return index;  } -/* - * For each cpu, setup the broadcast timer because local timer - * stops for the states other than WFI. - */ -static void imx6q_setup_broadcast_timer(void *arg) -{ -	int cpu = smp_processor_id(); - -	clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ON, &cpu); -} -  static struct cpuidle_driver imx6q_cpuidle_driver = {  	.name = "imx6q_cpuidle",  	.owner = THIS_MODULE, -	.en_core_tk_irqen = 1,  	.states = {  		/* WFI */  		ARM_CPUIDLE_WFI_STATE, @@ -70,7 +52,8 @@ static struct cpuidle_driver imx6q_cpuidle_driver = {  		{  			.exit_latency = 50,  			.target_residency = 75, -			.flags = CPUIDLE_FLAG_TIME_VALID, +			.flags = CPUIDLE_FLAG_TIME_VALID | +			         CPUIDLE_FLAG_TIMER_STOP,  			.enter = imx6q_enter_wait,  			.name = "WAIT",  			.desc = "Clock off", @@ -88,8 +71,5 @@ int __init imx6q_cpuidle_init(void)  	/* Set chicken bit to get a reliable WAIT mode support */  	imx6q_set_chicken_bit(); -	/* Configure the broadcast timer on each cpu */ -	on_each_cpu(imx6q_setup_broadcast_timer, NULL, 1); - -	return imx_cpuidle_init(&imx6q_cpuidle_driver); +	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 e092d1359d9..786f98ecc14 100644 --- a/arch/arm/mach-imx/cpuidle.h +++ b/arch/arm/mach-imx/cpuidle.h @@ -10,18 +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 -ENODEV; +	return 0;  }  static inline int imx6q_cpuidle_init(void)  { -	return -ENODEV; +	return 0;  }  #endif diff --git a/arch/arm/mach-imx/devices/Kconfig b/arch/arm/mach-imx/devices/Kconfig index 9b9ba1f4ffe..3dd2b1b041d 100644 --- a/arch/arm/mach-imx/devices/Kconfig +++ b/arch/arm/mach-imx/devices/Kconfig @@ -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/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 a96ccc7f501..02b61cdf39b 100644 --- a/arch/arm/mach-imx/gpc.c +++ b/arch/arm/mach-imx/gpc.c @@ -16,6 +16,7 @@  #include <linux/of_address.h>  #include <linux/of_irq.h>  #include <linux/irqchip/arm-gic.h> +#include "common.h"  #define GPC_IMR1		0x008  #define GPC_PGC_CPU_PDN		0x2a0 diff --git a/arch/arm/mach-imx/hardware.h b/arch/arm/mach-imx/hardware.h index 911e9b31b03..356131f7b59 100644 --- a/arch/arm/mach-imx/hardware.h +++ b/arch/arm/mach-imx/hardware.h @@ -102,7 +102,6 @@  #include "mxc.h" -#include "mx6q.h"  #include "mx51.h"  #include "mx53.h"  #include "mx3x.h" diff --git a/arch/arm/mach-imx/hotplug.c b/arch/arm/mach-imx/hotplug.c index 7bc5fe15dda..5e91112dcbe 100644 --- a/arch/arm/mach-imx/hotplug.c +++ b/arch/arm/mach-imx/hotplug.c @@ -11,7 +11,6 @@   */  #include <linux/errno.h> -#include <asm/cacheflush.h>  #include <asm/cp15.h>  #include "common.h" @@ -20,7 +19,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 +44,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/imx27-dt.c b/arch/arm/mach-imx/imx27-dt.c index c915a490a11..4aaead0a77f 100644 --- a/arch/arm/mach-imx/imx27-dt.c +++ b/arch/arm/mach-imx/imx27-dt.c @@ -18,25 +18,13 @@  #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", }; + +	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); + +	platform_device_register_full(&devinfo);  }  static const char * const imx27_dt_board_compat[] __initconst = { diff --git a/arch/arm/mach-imx/imx51-dt.c b/arch/arm/mach-imx/imx51-dt.c index e2926a8863f..ab24cc32211 100644 --- a/arch/arm/mach-imx/imx51-dt.c +++ b/arch/arm/mach-imx/imx51-dt.c @@ -21,7 +21,10 @@  static void __init imx51_dt_init(void)  { +	struct platform_device_info devinfo = { .name = "cpufreq-cpu0", }; +  	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); +	platform_device_register_full(&devinfo);  }  static const char *imx51_dt_board_compat[] __initdata = { 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/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/mach-cpuimx27.c b/arch/arm/mach-imx/mach-cpuimx27.c index 146559311bd..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 diff --git a/arch/arm/mach-imx/mach-cpuimx51sd.c b/arch/arm/mach-imx/mach-cpuimx51sd.c index 9b7393234f6..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); diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c index b59ddcb57c7..99502eeefdf 100644 --- a/arch/arm/mach-imx/mach-imx6q.c +++ b/arch/arm/mach-imx/mach-imx6q.c @@ -72,7 +72,7 @@ static int imx6q_revision(void)  	}  } -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; @@ -255,7 +255,7 @@ put_node:  	of_node_put(np);  } -struct platform_device imx6q_cpufreq_pdev = { +static struct platform_device imx6q_cpufreq_pdev = {  	.name = "imx6q-cpufreq",  }; diff --git a/arch/arm/mach-imx/mach-mx51_babbage.c b/arch/arm/mach-imx/mach-mx51_babbage.c index 6c4d7feb452..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); 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 cf34994cfe2..b7c4e70e508 100644 --- a/arch/arm/mach-imx/mm-imx5.c +++ b/arch/arm/mach-imx/mm-imx5.c @@ -84,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) @@ -91,6 +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)); +	imx_src_init();  }  void __init mx51_init_irq(void) 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/platsmp.c b/arch/arm/mach-imx/platsmp.c index 7c0b03f67b0..77e9a25ed0f 100644 --- a/arch/arm/mach-imx/platsmp.c +++ b/arch/arm/mach-imx/platsmp.c @@ -12,7 +12,6 @@  #include <linux/init.h>  #include <linux/smp.h> -#include <linux/irqchip/arm-gic.h>  #include <asm/page.h>  #include <asm/smp_scu.h>  #include <asm/mach/map.h> @@ -52,16 +51,6 @@ void imx_scu_standby_enable(void)  	writel_relaxed(val, scu_base);  } -static void __cpuinit imx_secondary_init(unsigned int cpu) -{ -	/* -	 * 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); -} -  static int __cpuinit imx_boot_secondary(unsigned int cpu, struct task_struct *idle)  {  	imx_set_cpu_jump(cpu, v7_secondary_startup); @@ -96,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 f67fd7ee812..82e79c658eb 100644 --- a/arch/arm/mach-imx/pm-imx5.c +++ b/arch/arm/mach-imx/pm-imx5.c @@ -149,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; @@ -193,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/src.c b/arch/arm/mach-imx/src.c index e15f1555c59..97d08688948 100644 --- a/arch/arm/mach-imx/src.c +++ b/arch/arm/mach-imx/src.c @@ -16,6 +16,7 @@  #include <linux/of_address.h>  #include <linux/smp.h>  #include <asm/smp_plat.h> +#include "common.h"  #define SRC_SCR				0x000  #define SRC_GPR1			0x020 @@ -43,6 +44,18 @@ 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; @@ -61,7 +74,9 @@ 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); 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 diff --git a/arch/arm/mach-integrator/Makefile b/arch/arm/mach-integrator/Makefile index 5521d18bf19..d14d6b76f4c 100644 --- a/arch/arm/mach-integrator/Makefile +++ b/arch/arm/mach-integrator/Makefile @@ -9,5 +9,4 @@ obj-$(CONFIG_ARCH_INTEGRATOR_AP)	+= integrator_ap.o  obj-$(CONFIG_ARCH_INTEGRATOR_CP)	+= integrator_cp.o  obj-$(CONFIG_PCI)			+= pci_v3.o pci.o -obj-$(CONFIG_CPU_FREQ_INTEGRATOR)	+= cpu.o  obj-$(CONFIG_INTEGRATOR_IMPD1)		+= impd1.o diff --git a/arch/arm/mach-integrator/cpu.c b/arch/arm/mach-integrator/cpu.c deleted file mode 100644 index 590c192cdf4..00000000000 --- a/arch/arm/mach-integrator/cpu.c +++ /dev/null @@ -1,224 +0,0 @@ -/* - *  linux/arch/arm/mach-integrator/cpu.c - * - *  Copyright (C) 2001-2002 Deep Blue Solutions Ltd. - * - * 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. - * - * CPU support functions - */ -#include <linux/module.h> -#include <linux/types.h> -#include <linux/kernel.h> -#include <linux/cpufreq.h> -#include <linux/sched.h> -#include <linux/smp.h> -#include <linux/init.h> -#include <linux/io.h> - -#include <mach/hardware.h> -#include <mach/platform.h> -#include <asm/mach-types.h> -#include <asm/hardware/icst.h> - -static struct cpufreq_driver integrator_driver; - -#define CM_ID  	__io_address(INTEGRATOR_HDR_ID) -#define CM_OSC	__io_address(INTEGRATOR_HDR_OSC) -#define CM_STAT __io_address(INTEGRATOR_HDR_STAT) -#define CM_LOCK __io_address(INTEGRATOR_HDR_LOCK) - -static const struct icst_params lclk_params = { -	.ref		= 24000000, -	.vco_max	= ICST525_VCO_MAX_5V, -	.vco_min	= ICST525_VCO_MIN, -	.vd_min		= 8, -	.vd_max		= 132, -	.rd_min		= 24, -	.rd_max		= 24, -	.s2div		= icst525_s2div, -	.idx2s		= icst525_idx2s, -}; - -static const struct icst_params cclk_params = { -	.ref		= 24000000, -	.vco_max	= ICST525_VCO_MAX_5V, -	.vco_min	= ICST525_VCO_MIN, -	.vd_min		= 12, -	.vd_max		= 160, -	.rd_min		= 24, -	.rd_max		= 24, -	.s2div		= icst525_s2div, -	.idx2s		= icst525_idx2s, -}; - -/* - * Validate the speed policy. - */ -static int integrator_verify_policy(struct cpufreq_policy *policy) -{ -	struct icst_vco vco; - -	cpufreq_verify_within_limits(policy,  -				     policy->cpuinfo.min_freq,  -				     policy->cpuinfo.max_freq); - -	vco = icst_hz_to_vco(&cclk_params, policy->max * 1000); -	policy->max = icst_hz(&cclk_params, vco) / 1000; - -	vco = icst_hz_to_vco(&cclk_params, policy->min * 1000); -	policy->min = icst_hz(&cclk_params, vco) / 1000; - -	cpufreq_verify_within_limits(policy,  -				     policy->cpuinfo.min_freq,  -				     policy->cpuinfo.max_freq); - -	return 0; -} - - -static int integrator_set_target(struct cpufreq_policy *policy, -				 unsigned int target_freq, -				 unsigned int relation) -{ -	cpumask_t cpus_allowed; -	int cpu = policy->cpu; -	struct icst_vco vco; -	struct cpufreq_freqs freqs; -	u_int cm_osc; - -	/* -	 * Save this threads cpus_allowed mask. -	 */ -	cpus_allowed = current->cpus_allowed; - -	/* -	 * Bind to the specified CPU.  When this call returns, -	 * we should be running on the right CPU. -	 */ -	set_cpus_allowed(current, cpumask_of_cpu(cpu)); -	BUG_ON(cpu != smp_processor_id()); - -	/* get current setting */ -	cm_osc = __raw_readl(CM_OSC); - -	if (machine_is_integrator()) { -		vco.s = (cm_osc >> 8) & 7; -	} else if (machine_is_cintegrator()) { -		vco.s = 1; -	} -	vco.v = cm_osc & 255; -	vco.r = 22; -	freqs.old = icst_hz(&cclk_params, vco) / 1000; - -	/* icst_hz_to_vco rounds down -- so we need the next -	 * larger freq in case of CPUFREQ_RELATION_L. -	 */ -	if (relation == CPUFREQ_RELATION_L) -		target_freq += 999; -	if (target_freq > policy->max) -		target_freq = policy->max; -	vco = icst_hz_to_vco(&cclk_params, target_freq * 1000); -	freqs.new = icst_hz(&cclk_params, vco) / 1000; - -	freqs.cpu = policy->cpu; - -	if (freqs.old == freqs.new) { -		set_cpus_allowed(current, cpus_allowed); -		return 0; -	} - -	cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); - -	cm_osc = __raw_readl(CM_OSC); - -	if (machine_is_integrator()) { -		cm_osc &= 0xfffff800; -		cm_osc |= vco.s << 8; -	} else if (machine_is_cintegrator()) { -		cm_osc &= 0xffffff00; -	} -	cm_osc |= vco.v; - -	__raw_writel(0xa05f, CM_LOCK); -	__raw_writel(cm_osc, CM_OSC); -	__raw_writel(0, CM_LOCK); - -	/* -	 * Restore the CPUs allowed mask. -	 */ -	set_cpus_allowed(current, cpus_allowed); - -	cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); - -	return 0; -} - -static unsigned int integrator_get(unsigned int cpu) -{ -	cpumask_t cpus_allowed; -	unsigned int current_freq; -	u_int cm_osc; -	struct icst_vco vco; - -	cpus_allowed = current->cpus_allowed; - -	set_cpus_allowed(current, cpumask_of_cpu(cpu)); -	BUG_ON(cpu != smp_processor_id()); - -	/* detect memory etc. */ -	cm_osc = __raw_readl(CM_OSC); - -	if (machine_is_integrator()) { -		vco.s = (cm_osc >> 8) & 7; -	} else { -		vco.s = 1; -	} -	vco.v = cm_osc & 255; -	vco.r = 22; - -	current_freq = icst_hz(&cclk_params, vco) / 1000; /* current freq */ - -	set_cpus_allowed(current, cpus_allowed); - -	return current_freq; -} - -static int integrator_cpufreq_init(struct cpufreq_policy *policy) -{ - -	/* set default policy and cpuinfo */ -	policy->cpuinfo.max_freq = 160000; -	policy->cpuinfo.min_freq = 12000; -	policy->cpuinfo.transition_latency = 1000000; /* 1 ms, assumed */ -	policy->cur = policy->min = policy->max = integrator_get(policy->cpu); - -	return 0; -} - -static struct cpufreq_driver integrator_driver = { -	.verify		= integrator_verify_policy, -	.target		= integrator_set_target, -	.get		= integrator_get, -	.init		= integrator_cpufreq_init, -	.name		= "integrator", -}; - -static int __init integrator_cpu_init(void) -{ -	return cpufreq_register_driver(&integrator_driver); -} - -static void __exit integrator_cpu_exit(void) -{ -	cpufreq_unregister_driver(&integrator_driver); -} - -MODULE_AUTHOR ("Russell M. King"); -MODULE_DESCRIPTION ("cpufreq driver for ARM Integrator CPUs"); -MODULE_LICENSE ("GPL"); - -module_init(integrator_cpu_init); -module_exit(integrator_cpu_exit); diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c index 1dbeb7c99d5..6600cff6bd9 100644 --- a/arch/arm/mach-ixp4xx/common.c +++ b/arch/arm/mach-ixp4xx/common.c @@ -29,6 +29,7 @@  #include <linux/io.h>  #include <linux/export.h>  #include <linux/gpio.h> +#include <linux/cpu.h>  #include <mach/udc.h>  #include <mach/hardware.h> @@ -239,7 +240,7 @@ void __init ixp4xx_init_irq(void)  	 * ixp4xx does not implement the XScale PWRMODE register  	 * so it must not call cpu_do_idle().  	 */ -	disable_hlt(); +	cpu_idle_poll_ctrl(true);  	/* Route all sources to IRQ instead of FIQ */  	*IXP4XX_ICLR = 0x0; diff --git a/arch/arm/mach-kirkwood/board-guruplug.c b/arch/arm/mach-kirkwood/board-guruplug.c index 0a0df4554d8..a857163954a 100644 --- a/arch/arm/mach-kirkwood/board-guruplug.c +++ b/arch/arm/mach-kirkwood/board-guruplug.c @@ -13,7 +13,6 @@  #include <linux/init.h>  #include <linux/mv643xx_eth.h>  #include <linux/gpio.h> -#include <linux/platform_data/mmc-mvsdio.h>  #include "common.h"  static struct mv643xx_eth_platform_data guruplug_ge00_data = { @@ -24,10 +23,6 @@ static struct mv643xx_eth_platform_data guruplug_ge01_data = {  	.phy_addr	= MV643XX_ETH_PHY_ADDR(1),  }; -static struct mvsdio_platform_data guruplug_mvsdio_data = { -	/* unfortunately the CD signal has not been connected */ -}; -  void __init guruplug_dt_init(void)  {  	/* @@ -35,5 +30,4 @@ void __init guruplug_dt_init(void)  	 */  	kirkwood_ge00_init(&guruplug_ge00_data);  	kirkwood_ge01_init(&guruplug_ge01_data); -	kirkwood_sdio_init(&guruplug_mvsdio_data);  } diff --git a/arch/arm/mach-kirkwood/board-iomega_ix2_200.c b/arch/arm/mach-kirkwood/board-iomega_ix2_200.c index f655b2637b0..e5f70415905 100644 --- a/arch/arm/mach-kirkwood/board-iomega_ix2_200.c +++ b/arch/arm/mach-kirkwood/board-iomega_ix2_200.c @@ -20,10 +20,15 @@ static struct mv643xx_eth_platform_data iomega_ix2_200_ge00_data = {  	.duplex         = DUPLEX_FULL,  }; +static struct mv643xx_eth_platform_data iomega_ix2_200_ge01_data = { +        .phy_addr       = MV643XX_ETH_PHY_ADDR(11), +}; +  void __init iomega_ix2_200_init(void)  {  	/*  	 * Basic setup. Needs to be called early.  	 */ -	kirkwood_ge01_init(&iomega_ix2_200_ge00_data); +	kirkwood_ge00_init(&iomega_ix2_200_ge00_data); +	kirkwood_ge01_init(&iomega_ix2_200_ge01_data);  } diff --git a/arch/arm/mach-kirkwood/guruplug-setup.c b/arch/arm/mach-kirkwood/guruplug-setup.c index 1c6e736cbbf..08dd739aa70 100644 --- a/arch/arm/mach-kirkwood/guruplug-setup.c +++ b/arch/arm/mach-kirkwood/guruplug-setup.c @@ -53,6 +53,8 @@ static struct mv_sata_platform_data guruplug_sata_data = {  static struct mvsdio_platform_data guruplug_mvsdio_data = {  	/* unfortunately the CD signal has not been connected */ +	.gpio_card_detect = -1, +	.gpio_write_protect = -1,  };  static struct gpio_led guruplug_led_pins[] = { diff --git a/arch/arm/mach-kirkwood/openrd-setup.c b/arch/arm/mach-kirkwood/openrd-setup.c index 8ddd69fdc93..6a6eb548307 100644 --- a/arch/arm/mach-kirkwood/openrd-setup.c +++ b/arch/arm/mach-kirkwood/openrd-setup.c @@ -55,6 +55,7 @@ static struct mv_sata_platform_data openrd_sata_data = {  static struct mvsdio_platform_data openrd_mvsdio_data = {  	.gpio_card_detect = 29,	/* MPP29 used as SD card detect */ +	.gpio_write_protect = -1,  };  static unsigned int openrd_mpp_config[] __initdata = { diff --git a/arch/arm/mach-kirkwood/rd88f6281-setup.c b/arch/arm/mach-kirkwood/rd88f6281-setup.c index c7d93b48926..d24223166e0 100644 --- a/arch/arm/mach-kirkwood/rd88f6281-setup.c +++ b/arch/arm/mach-kirkwood/rd88f6281-setup.c @@ -69,6 +69,7 @@ static struct mv_sata_platform_data rd88f6281_sata_data = {  static struct mvsdio_platform_data rd88f6281_mvsdio_data = {  	.gpio_card_detect = 28, +	.gpio_write_protect = -1,  };  static unsigned int rd88f6281_mpp_config[] __initdata = { diff --git a/arch/arm/mach-l7200/include/mach/debug-macro.S b/arch/arm/mach-l7200/include/mach/debug-macro.S deleted file mode 100644 index 0b4e760159b..00000000000 --- a/arch/arm/mach-l7200/include/mach/debug-macro.S +++ /dev/null @@ -1,38 +0,0 @@ -/* arch/arm/mach-l7200/include/mach/debug-macro.S - * - * Debugging macro include header - * - *  Copyright (C) 1994-1999 Russell King - *  Moved from linux/arch/arm/kernel/debug.S by Ben Dooks - * - * 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. - * -*/ - -		.equ	io_virt, IO_BASE -		.equ	io_phys, IO_START - -		.macro	addruart, rp, rv, tmp -		mov	\rp, #0x00044000	@ UART1 -@		mov	\rp, #0x00045000	@ UART2 -		add	\rv, \rp, #io_virt	@ virtual address -		add	\rp, \rp, #io_phys	@ physical base address -		.endm - -		.macro	senduart,rd,rx -		str	\rd, [\rx, #0x0]	@ UARTDR -		.endm - -		.macro	waituart,rd,rx -1001:		ldr	\rd, [\rx, #0x18]	@ UARTFLG -		tst	\rd, #1 << 5		@ UARTFLGUTXFF - 1 when full -		bne	1001b -		.endm - -		.macro	busyuart,rd,rx -1001:		ldr	\rd, [\rx, #0x18]	@ UARTFLG -		tst	\rd, #1 << 3		@ UARTFLGUBUSY - 1 when busy -		bne	1001b -		.endm diff --git a/arch/arm/mach-mmp/aspenite.c b/arch/arm/mach-mmp/aspenite.c index 9f64d5632e0..76901f4ce61 100644 --- a/arch/arm/mach-mmp/aspenite.c +++ b/arch/arm/mach-mmp/aspenite.c @@ -223,13 +223,7 @@ static struct pxa27x_keypad_platform_data aspenite_keypad_info __initdata = {  };  #if defined(CONFIG_USB_EHCI_MV) -static char *pxa168_sph_clock_name[] = { -	[0] = "PXA168-USBCLK", -}; -  static struct mv_usb_platform_data pxa168_sph_pdata = { -	.clknum         = 1, -	.clkname        = pxa168_sph_clock_name,  	.mode           = MV_USB_MODE_HOST,  	.phy_init	= pxa_usb_phy_init,  	.phy_deinit	= pxa_usb_phy_deinit, diff --git a/arch/arm/mach-mmp/ttc_dkb.c b/arch/arm/mach-mmp/ttc_dkb.c index 22a9058f9f4..6528a5fa6a2 100644 --- a/arch/arm/mach-mmp/ttc_dkb.c +++ b/arch/arm/mach-mmp/ttc_dkb.c @@ -162,13 +162,7 @@ static struct i2c_board_info ttc_dkb_i2c_info[] = {  #ifdef CONFIG_USB_SUPPORT  #if defined(CONFIG_USB_MV_UDC) || defined(CONFIG_USB_EHCI_MV_U2O) -static char *pxa910_usb_clock_name[] = { -	[0] = "U2OCLK", -}; -  static struct mv_usb_platform_data ttc_usb_pdata = { -	.clknum		= 1, -	.clkname	= pxa910_usb_clock_name,  	.vbus		= NULL,  	.mode		= MV_USB_MODE_OTG,  	.otg_force_a_bus_req = 1, diff --git a/arch/arm/mach-msm/Kconfig b/arch/arm/mach-msm/Kconfig index b61908594b4..fceb093b949 100644 --- a/arch/arm/mach-msm/Kconfig +++ b/arch/arm/mach-msm/Kconfig @@ -44,10 +44,10 @@ endchoice  config ARCH_MSM8X60  	bool "MSM8X60" -	select ARCH_MSM_SCORPIONMP  	select ARM_GIC  	select CPU_V7  	select GPIO_MSM_V2 +	select HAVE_SMP  	select MSM_GPIOMUX  	select MSM_SCM if SMP  	select MSM_V2_TLMM @@ -55,9 +55,9 @@ config ARCH_MSM8X60  config ARCH_MSM8960  	bool "MSM8960" -	select ARCH_MSM_SCORPIONMP  	select ARM_GIC  	select CPU_V7 +	select HAVE_SMP  	select MSM_GPIOMUX  	select MSM_SCM if SMP  	select MSM_V2_TLMM @@ -68,9 +68,6 @@ config MSM_HAS_DEBUG_UART_HS  config MSM_SOC_REV_A  	bool -config  ARCH_MSM_SCORPIONMP -	bool -	select HAVE_SMP  config  ARCH_MSM_ARM11  	bool diff --git a/arch/arm/mach-msm/board-halibut.c b/arch/arm/mach-msm/board-halibut.c index 84d720af34a..82eaf88d202 100644 --- a/arch/arm/mach-msm/board-halibut.c +++ b/arch/arm/mach-msm/board-halibut.c @@ -59,6 +59,7 @@ static struct platform_device smc91x_device = {  };  static struct platform_device *devices[] __initdata = { +	&msm_device_gpio_7201,  	&msm_device_uart3,  	&msm_device_smd,  	&msm_device_nand, diff --git a/arch/arm/mach-msm/board-msm7x30.c b/arch/arm/mach-msm/board-msm7x30.c index 7bc3f82e3ec..520c141acd0 100644 --- a/arch/arm/mach-msm/board-msm7x30.c +++ b/arch/arm/mach-msm/board-msm7x30.c @@ -89,6 +89,7 @@ struct msm_gpiomux_config msm_gpiomux_configs[GPIOMUX_NGPIOS] = {  };  static struct platform_device *devices[] __initdata = { +	&msm_device_gpio_7x30,  #if defined(CONFIG_SERIAL_MSM) || defined(CONFIG_MSM_SERIAL_DEBUGGER)          &msm_device_uart2,  #endif diff --git a/arch/arm/mach-msm/board-qsd8x50.c b/arch/arm/mach-msm/board-qsd8x50.c index 686e7949a73..38a532d6937 100644 --- a/arch/arm/mach-msm/board-qsd8x50.c +++ b/arch/arm/mach-msm/board-qsd8x50.c @@ -89,6 +89,7 @@ static struct msm_otg_platform_data msm_otg_pdata = {  };  static struct platform_device *devices[] __initdata = { +	&msm_device_gpio_8x50,  	&msm_device_uart3,  	&msm_device_smd,  	&msm_device_otg, diff --git a/arch/arm/mach-msm/board-trout.c b/arch/arm/mach-msm/board-trout.c index 919bfa32871..80fe1c5ff5c 100644 --- a/arch/arm/mach-msm/board-trout.c +++ b/arch/arm/mach-msm/board-trout.c @@ -36,6 +36,7 @@  extern int trout_init_mmc(unsigned int);  static struct platform_device *devices[] __initdata = { +	&msm_device_gpio_7201,  	&msm_device_uart3,  	&msm_device_smd,  	&msm_device_nand, diff --git a/arch/arm/mach-msm/devices-msm7x00.c b/arch/arm/mach-msm/devices-msm7x00.c index f66ee6ea872..1a0a2306b11 100644 --- a/arch/arm/mach-msm/devices-msm7x00.c +++ b/arch/arm/mach-msm/devices-msm7x00.c @@ -29,6 +29,37 @@  #include "clock-pcom.h"  #include <linux/platform_data/mmc-msm_sdcc.h> +static struct resource msm_gpio_resources[] = { +	{ +		.start	= 32 + 0, +		.end	= 32 + 0, +		.flags	= IORESOURCE_IRQ, +	}, +	{ +		.start	= 32 + 1, +		.end	= 32 + 1, +		.flags	= IORESOURCE_IRQ, +	}, +	{ +		.start	= 0xa9200800, +		.end	= 0xa9200800 + SZ_4K - 1, +		.flags	= IORESOURCE_MEM, +		.name  = "gpio1" +	}, +	{ +		.start	= 0xa9300C00, +		.end	= 0xa9300C00 + SZ_4K - 1, +		.flags	= IORESOURCE_MEM, +		.name  = "gpio2" +	}, +}; + +struct platform_device msm_device_gpio_7201 = { +	.name	= "gpio-msm-7201", +	.num_resources	= ARRAY_SIZE(msm_gpio_resources), +	.resource	= msm_gpio_resources, +}; +  static struct resource resources_uart1[] = {  	{  		.start	= INT_UART1, diff --git a/arch/arm/mach-msm/devices-msm7x30.c b/arch/arm/mach-msm/devices-msm7x30.c index e90ab5938c5..12f482c0774 100644 --- a/arch/arm/mach-msm/devices-msm7x30.c +++ b/arch/arm/mach-msm/devices-msm7x30.c @@ -33,6 +33,37 @@  #include <linux/platform_data/mmc-msm_sdcc.h> +static struct resource msm_gpio_resources[] = { +	{ +		.start	= 32 + 18, +		.end	= 32 + 18, +		.flags	= IORESOURCE_IRQ, +	}, +	{ +		.start	= 32 + 19, +		.end	= 32 + 19, +		.flags	= IORESOURCE_IRQ, +	}, +	{ +		.start	= 0xac001000, +		.end	= 0xac001000 + SZ_4K - 1, +		.flags	= IORESOURCE_MEM, +		.name  = "gpio1" +	}, +	{ +		.start	= 0xac101400, +		.end	= 0xac101400 + SZ_4K - 1, +		.flags	= IORESOURCE_MEM, +		.name  = "gpio2" +	}, +}; + +struct platform_device msm_device_gpio_7x30 = { +	.name	= "gpio-msm-7x30", +	.num_resources	= ARRAY_SIZE(msm_gpio_resources), +	.resource	= msm_gpio_resources, +}; +  static struct resource resources_uart2[] = {  	{  		.start	= INT_UART2, diff --git a/arch/arm/mach-msm/devices-qsd8x50.c b/arch/arm/mach-msm/devices-qsd8x50.c index 4db61d5fe31..2e1b3ec9dfc 100644 --- a/arch/arm/mach-msm/devices-qsd8x50.c +++ b/arch/arm/mach-msm/devices-qsd8x50.c @@ -30,6 +30,37 @@  #include <linux/platform_data/mmc-msm_sdcc.h>  #include "clock-pcom.h" +static struct resource msm_gpio_resources[] = { +	{ +		.start	= 64 + 165 + 9, +		.end	= 64 + 165 + 9, +		.flags	= IORESOURCE_IRQ, +	}, +	{ +		.start	= 64 + 165 + 10, +		.end	= 64 + 165 + 10, +		.flags	= IORESOURCE_IRQ, +	}, +	{ +		.start	= 0xa9000800, +		.end	= 0xa9000800 + SZ_4K - 1, +		.flags	= IORESOURCE_MEM, +		.name  = "gpio1" +	}, +	{ +		.start	= 0xa9100C00, +		.end	= 0xa9100C00 + SZ_4K - 1, +		.flags	= IORESOURCE_MEM, +		.name  = "gpio2" +	}, +}; + +struct platform_device msm_device_gpio_8x50 = { +	.name	= "gpio-msm-8x50", +	.num_resources	= ARRAY_SIZE(msm_gpio_resources), +	.resource	= msm_gpio_resources, +}; +  static struct resource resources_uart3[] = {  	{  		.start	= INT_UART3, diff --git a/arch/arm/mach-msm/devices.h b/arch/arm/mach-msm/devices.h index 9545c196c6e..da902cf5116 100644 --- a/arch/arm/mach-msm/devices.h +++ b/arch/arm/mach-msm/devices.h @@ -20,6 +20,10 @@  #include "clock.h" +extern struct platform_device msm_device_gpio_7201; +extern struct platform_device msm_device_gpio_7x30; +extern struct platform_device msm_device_gpio_8x50; +  extern struct platform_device msm_device_uart1;  extern struct platform_device msm_device_uart2;  extern struct platform_device msm_device_uart3; diff --git a/arch/arm/mach-msm/dma.c b/arch/arm/mach-msm/dma.c index 354b91d4c3a..b279fd8a31b 100644 --- a/arch/arm/mach-msm/dma.c +++ b/arch/arm/mach-msm/dma.c @@ -19,9 +19,35 @@  #include <linux/interrupt.h>  #include <linux/completion.h>  #include <mach/dma.h> +#include <mach/msm_iomap.h>  #define MSM_DMOV_CHANNEL_COUNT 16 +#define DMOV_SD0(off, ch) (MSM_DMOV_BASE + 0x0000 + (off) + ((ch) << 2)) +#define DMOV_SD1(off, ch) (MSM_DMOV_BASE + 0x0400 + (off) + ((ch) << 2)) +#define DMOV_SD2(off, ch) (MSM_DMOV_BASE + 0x0800 + (off) + ((ch) << 2)) +#define DMOV_SD3(off, ch) (MSM_DMOV_BASE + 0x0C00 + (off) + ((ch) << 2)) + +#if defined(CONFIG_ARCH_MSM7X30) +#define DMOV_SD_AARM DMOV_SD2 +#else +#define DMOV_SD_AARM DMOV_SD3 +#endif + +#define DMOV_CMD_PTR(ch)      DMOV_SD_AARM(0x000, ch) +#define DMOV_RSLT(ch)         DMOV_SD_AARM(0x040, ch) +#define DMOV_FLUSH0(ch)       DMOV_SD_AARM(0x080, ch) +#define DMOV_FLUSH1(ch)       DMOV_SD_AARM(0x0C0, ch) +#define DMOV_FLUSH2(ch)       DMOV_SD_AARM(0x100, ch) +#define DMOV_FLUSH3(ch)       DMOV_SD_AARM(0x140, ch) +#define DMOV_FLUSH4(ch)       DMOV_SD_AARM(0x180, ch) +#define DMOV_FLUSH5(ch)       DMOV_SD_AARM(0x1C0, ch) + +#define DMOV_STATUS(ch)       DMOV_SD_AARM(0x200, ch) +#define DMOV_ISR              DMOV_SD_AARM(0x380, 0) + +#define DMOV_CONFIG(ch)       DMOV_SD_AARM(0x300, ch) +  enum {  	MSM_DMOV_PRINT_ERRORS = 1,  	MSM_DMOV_PRINT_IO = 2, diff --git a/arch/arm/mach-msm/hotplug.c b/arch/arm/mach-msm/hotplug.c index 750446feb44..326a87261f9 100644 --- a/arch/arm/mach-msm/hotplug.c +++ b/arch/arm/mach-msm/hotplug.c @@ -10,16 +10,12 @@  #include <linux/errno.h>  #include <linux/smp.h> -#include <asm/cacheflush.h>  #include <asm/smp_plat.h>  #include "common.h"  static inline void cpu_enter_lowpower(void)  { -	/* Just flush the cache. Changing the coherency is not yet -	 * available on msm. */ -	flush_cache_all();  }  static inline void cpu_leave_lowpower(void) diff --git a/arch/arm/mach-msm/include/mach/cpu.h b/arch/arm/mach-msm/include/mach/cpu.h deleted file mode 100644 index a9481b08d5c..00000000000 --- a/arch/arm/mach-msm/include/mach/cpu.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (c) 2011, Code Aurora Forum. 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 version 2 and - * only version 2 as published by the Free Software Foundation. - * - * 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 __ARCH_ARM_MACH_MSM_CPU_H__ -#define __ARCH_ARM_MACH_MSM_CPU_H__ - -/* TODO: For now, only one CPU can be compiled at a time. */ - -#define cpu_is_msm7x01()	0 -#define cpu_is_msm7x30()	0 -#define cpu_is_qsd8x50()	0 -#define cpu_is_msm8x60()	0 -#define cpu_is_msm8960()	0 - -#ifdef CONFIG_ARCH_MSM7X00A -# undef cpu_is_msm7x01 -# define cpu_is_msm7x01()	1 -#endif - -#ifdef CONFIG_ARCH_MSM7X30 -# undef cpu_is_msm7x30 -# define cpu_is_msm7x30()	1 -#endif - -#ifdef CONFIG_ARCH_QSD8X50 -# undef cpu_is_qsd8x50 -# define cpu_is_qsd8x50()	1 -#endif - -#ifdef CONFIG_ARCH_MSM8X60 -# undef cpu_is_msm8x60 -# define cpu_is_msm8x60()	1 -#endif - -#ifdef CONFIG_ARCH_MSM8960 -# undef cpu_is_msm8960 -# define cpu_is_msm8960()	1 -#endif - -#endif diff --git a/arch/arm/mach-msm/include/mach/dma.h b/arch/arm/mach-msm/include/mach/dma.h index 05583f56952..a72d48d4234 100644 --- a/arch/arm/mach-msm/include/mach/dma.h +++ b/arch/arm/mach-msm/include/mach/dma.h @@ -16,7 +16,6 @@  #ifndef __ASM_ARCH_MSM_DMA_H  #include <linux/list.h> -#include <mach/msm_iomap.h>  struct msm_dmov_errdata {  	uint32_t flush[6]; @@ -45,48 +44,23 @@ static inline  int msm_dmov_exec_cmd(unsigned id, unsigned int cmdptr) { return -EIO; }  #endif - -#define DMOV_SD0(off, ch) (MSM_DMOV_BASE + 0x0000 + (off) + ((ch) << 2)) -#define DMOV_SD1(off, ch) (MSM_DMOV_BASE + 0x0400 + (off) + ((ch) << 2)) -#define DMOV_SD2(off, ch) (MSM_DMOV_BASE + 0x0800 + (off) + ((ch) << 2)) -#define DMOV_SD3(off, ch) (MSM_DMOV_BASE + 0x0C00 + (off) + ((ch) << 2)) - -#if defined(CONFIG_ARCH_MSM7X30) -#define DMOV_SD_AARM DMOV_SD2 -#else -#define DMOV_SD_AARM DMOV_SD3 -#endif - -#define DMOV_CMD_PTR(ch)      DMOV_SD_AARM(0x000, ch)  #define DMOV_CMD_LIST         (0 << 29) /* does not work */  #define DMOV_CMD_PTR_LIST     (1 << 29) /* works */  #define DMOV_CMD_INPUT_CFG    (2 << 29) /* untested */  #define DMOV_CMD_OUTPUT_CFG   (3 << 29) /* untested */  #define DMOV_CMD_ADDR(addr)   ((addr) >> 3) -#define DMOV_RSLT(ch)         DMOV_SD_AARM(0x040, ch)  #define DMOV_RSLT_VALID       (1 << 31) /* 0 == host has empties result fifo */  #define DMOV_RSLT_ERROR       (1 << 3)  #define DMOV_RSLT_FLUSH       (1 << 2)  #define DMOV_RSLT_DONE        (1 << 1)  /* top pointer done */  #define DMOV_RSLT_USER        (1 << 0)  /* command with FR force result */ -#define DMOV_FLUSH0(ch)       DMOV_SD_AARM(0x080, ch) -#define DMOV_FLUSH1(ch)       DMOV_SD_AARM(0x0C0, ch) -#define DMOV_FLUSH2(ch)       DMOV_SD_AARM(0x100, ch) -#define DMOV_FLUSH3(ch)       DMOV_SD_AARM(0x140, ch) -#define DMOV_FLUSH4(ch)       DMOV_SD_AARM(0x180, ch) -#define DMOV_FLUSH5(ch)       DMOV_SD_AARM(0x1C0, ch) - -#define DMOV_STATUS(ch)       DMOV_SD_AARM(0x200, ch)  #define DMOV_STATUS_RSLT_COUNT(n)    (((n) >> 29))  #define DMOV_STATUS_CMD_COUNT(n)     (((n) >> 27) & 3)  #define DMOV_STATUS_RSLT_VALID       (1 << 1)  #define DMOV_STATUS_CMD_PTR_RDY      (1 << 0) -#define DMOV_ISR              DMOV_SD_AARM(0x380, 0) -   -#define DMOV_CONFIG(ch)       DMOV_SD_AARM(0x300, ch)  #define DMOV_CONFIG_FORCE_TOP_PTR_RSLT (1 << 2)  #define DMOV_CONFIG_FORCE_FLUSH_RSLT   (1 << 1)  #define DMOV_CONFIG_IRQ_EN             (1 << 0) diff --git a/arch/arm/mach-msm/include/mach/uncompress.h b/arch/arm/mach-msm/include/mach/uncompress.h index fa97a10d869..94324870fb0 100644 --- a/arch/arm/mach-msm/include/mach/uncompress.h +++ b/arch/arm/mach-msm/include/mach/uncompress.h @@ -37,7 +37,7 @@ static void putc(int c)  	 * Wait for TX_READY to be set; but skip it if we have a  	 * TX underrun.  	 */ -	if (UART_DM_SR & 0x08) +	if (!(UART_DM_SR & 0x08))  		while (!(UART_DM_ISR & 0x80))  			cpu_relax(); diff --git a/arch/arm/mach-msm/last_radio_log.c b/arch/arm/mach-msm/last_radio_log.c index 1e243f46a96..7777767ee89 100644 --- a/arch/arm/mach-msm/last_radio_log.c +++ b/arch/arm/mach-msm/last_radio_log.c @@ -31,20 +31,8 @@ extern void *smem_item(unsigned id, unsigned *size);  static ssize_t last_radio_log_read(struct file *file, char __user *buf,  			size_t len, loff_t *offset)  { -	loff_t pos = *offset; -	ssize_t count; - -	if (pos >= radio_log_size) -		return 0; - -	count = min(len, (size_t)(radio_log_size - pos)); -	if (copy_to_user(buf, radio_log_base + pos, count)) { -		pr_err("%s: copy to user failed\n", __func__); -		return -EFAULT; -	} - -	*offset += count; -	return count; +	return simple_read_from_buffer(buf, len, offset, +				radio_log_base, radio_log_size);  }  static struct file_operations last_radio_log_fops = { @@ -67,7 +55,8 @@ void msm_init_last_radio_log(struct module *owner)  		return;  	} -	entry = create_proc_entry("last_radio_log", S_IFREG | S_IRUGO, NULL); +	entry = proc_create("last_radio_log", S_IRUGO, NULL, +				&last_radio_log_fops);  	if (!entry) {  		pr_err("%s: could not create proc entry for radio log\n",  				__func__); @@ -77,7 +66,6 @@ void msm_init_last_radio_log(struct module *owner)  	pr_err("%s: last radio log is %d bytes long\n", __func__,  		radio_log_size);  	last_radio_log_fops.owner = owner; -	entry->proc_fops = &last_radio_log_fops;  	entry->size = radio_log_size;  }  EXPORT_SYMBOL(msm_init_last_radio_log); diff --git a/arch/arm/mach-msm/platsmp.c b/arch/arm/mach-msm/platsmp.c index 42932865416..00cdb0a5dac 100644 --- a/arch/arm/mach-msm/platsmp.c +++ b/arch/arm/mach-msm/platsmp.c @@ -15,7 +15,6 @@  #include <linux/jiffies.h>  #include <linux/smp.h>  #include <linux/io.h> -#include <linux/irqchip/arm-gic.h>  #include <asm/cacheflush.h>  #include <asm/cputype.h> @@ -42,13 +41,6 @@ static inline int get_core_count(void)  static void __cpuinit msm_secondary_init(unsigned int cpu)  {  	/* -	 * 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); - -	/*  	 * let the primary processor know we're out of the  	 * pen, then head off into the C entry point  	 */ diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c index 2969027f02f..284313f3e02 100644 --- a/arch/arm/mach-msm/timer.c +++ b/arch/arm/mach-msm/timer.c @@ -30,19 +30,22 @@  #include "common.h" -#define TIMER_MATCH_VAL         0x0000 -#define TIMER_COUNT_VAL         0x0004 -#define TIMER_ENABLE            0x0008 -#define TIMER_ENABLE_CLR_ON_MATCH_EN    BIT(1) -#define TIMER_ENABLE_EN                 BIT(0) -#define TIMER_CLEAR             0x000C -#define DGT_CLK_CTL_DIV_4	0x3 +#define TIMER_MATCH_VAL			0x0000 +#define TIMER_COUNT_VAL			0x0004 +#define TIMER_ENABLE			0x0008 +#define TIMER_ENABLE_CLR_ON_MATCH_EN	BIT(1) +#define TIMER_ENABLE_EN			BIT(0) +#define TIMER_CLEAR			0x000C +#define DGT_CLK_CTL			0x10 +#define DGT_CLK_CTL_DIV_4		0x3 +#define TIMER_STS_GPT0_CLR_PEND		BIT(10)  #define GPT_HZ 32768  #define MSM_DGT_SHIFT 5  static void __iomem *event_base; +static void __iomem *sts_base;  static irqreturn_t msm_timer_interrupt(int irq, void *dev_id)  { @@ -62,8 +65,16 @@ static int msm_timer_set_next_event(unsigned long cycles,  {  	u32 ctrl = readl_relaxed(event_base + TIMER_ENABLE); -	writel_relaxed(0, event_base + TIMER_CLEAR); +	ctrl &= ~TIMER_ENABLE_EN; +	writel_relaxed(ctrl, event_base + TIMER_ENABLE); + +	writel_relaxed(ctrl, event_base + TIMER_CLEAR);  	writel_relaxed(cycles, event_base + TIMER_MATCH_VAL); + +	if (sts_base) +		while (readl_relaxed(sts_base) & TIMER_STS_GPT0_CLR_PEND) +			cpu_relax(); +  	writel_relaxed(ctrl | TIMER_ENABLE_EN, event_base + TIMER_ENABLE);  	return 0;  } @@ -134,9 +145,6 @@ static int __cpuinit msm_local_timer_setup(struct clock_event_device *evt)  	if (!smp_processor_id())  		return 0; -	writel_relaxed(0, event_base + TIMER_ENABLE); -	writel_relaxed(0, event_base + TIMER_CLEAR); -	writel_relaxed(~0, event_base + TIMER_MATCH_VAL);  	evt->irq = msm_clockevent.irq;  	evt->name = "local_timer";  	evt->features = msm_clockevent.features; @@ -174,9 +182,6 @@ static void __init msm_timer_init(u32 dgt_hz, int sched_bits, int irq,  	struct clocksource *cs = &msm_clocksource;  	int res; -	writel_relaxed(0, event_base + TIMER_ENABLE); -	writel_relaxed(0, event_base + TIMER_CLEAR); -	writel_relaxed(~0, event_base + TIMER_MATCH_VAL);  	ce->cpumask = cpumask_of(0);  	ce->irq = irq; @@ -214,13 +219,9 @@ err:  }  #ifdef CONFIG_OF -static const struct of_device_id msm_dgt_match[] __initconst = { -	{ .compatible = "qcom,msm-dgt" }, -	{ }, -}; - -static const struct of_device_id msm_gpt_match[] __initconst = { -	{ .compatible = "qcom,msm-gpt" }, +static const struct of_device_id msm_timer_match[] __initconst = { +	{ .compatible = "qcom,kpss-timer" }, +	{ .compatible = "qcom,scss-timer" },  	{ },  }; @@ -231,33 +232,29 @@ void __init msm_dt_timer_init(void)  	int irq;  	struct resource res;  	u32 percpu_offset; -	void __iomem *dgt_clk_ctl; +	void __iomem *base; +	void __iomem *cpu0_base; -	np = of_find_matching_node(NULL, msm_gpt_match); +	np = of_find_matching_node(NULL, msm_timer_match);  	if (!np) { -		pr_err("Can't find GPT DT node\n"); +		pr_err("Can't find msm timer DT node\n");  		return;  	} -	event_base = of_iomap(np, 0); -	if (!event_base) { +	base = of_iomap(np, 0); +	if (!base) {  		pr_err("Failed to map event base\n");  		return;  	} -	irq = irq_of_parse_and_map(np, 0); +	/* We use GPT0 for the clockevent */ +	irq = irq_of_parse_and_map(np, 1);  	if (irq <= 0) {  		pr_err("Can't get irq\n");  		return;  	} -	of_node_put(np); - -	np = of_find_matching_node(NULL, msm_dgt_match); -	if (!np) { -		pr_err("Can't find DGT DT node\n"); -		return; -	} +	/* We use CPU0's DGT for the clocksource */  	if (of_property_read_u32(np, "cpu-offset", &percpu_offset))  		percpu_offset = 0; @@ -266,45 +263,43 @@ void __init msm_dt_timer_init(void)  		return;  	} -	source_base = ioremap(res.start + percpu_offset, resource_size(&res)); -	if (!source_base) { +	cpu0_base = ioremap(res.start + percpu_offset, resource_size(&res)); +	if (!cpu0_base) {  		pr_err("Failed to map source base\n");  		return;  	} -	if (!of_address_to_resource(np, 1, &res)) { -		dgt_clk_ctl = ioremap(res.start + percpu_offset, -				      resource_size(&res)); -		if (!dgt_clk_ctl) { -			pr_err("Failed to map DGT control base\n"); -			return; -		} -		writel_relaxed(DGT_CLK_CTL_DIV_4, dgt_clk_ctl); -		iounmap(dgt_clk_ctl); -	} -  	if (of_property_read_u32(np, "clock-frequency", &freq)) {  		pr_err("Unknown frequency\n");  		return;  	}  	of_node_put(np); +	event_base = base + 0x4; +	sts_base = base + 0x88; +	source_base = cpu0_base + 0x24; +	freq /= 4; +	writel_relaxed(DGT_CLK_CTL_DIV_4, source_base + DGT_CLK_CTL); +  	msm_timer_init(freq, 32, irq, !!percpu_offset);  }  #endif -static int __init msm_timer_map(phys_addr_t event, phys_addr_t source) +static int __init msm_timer_map(phys_addr_t addr, u32 event, u32 source, +				u32 sts)  { -	event_base = ioremap(event, SZ_64); -	if (!event_base) { -		pr_err("Failed to map event base\n"); -		return 1; -	} -	source_base = ioremap(source, SZ_64); -	if (!source_base) { -		pr_err("Failed to map source base\n"); -		return 1; +	void __iomem *base; + +	base = ioremap(addr, SZ_256); +	if (!base) { +		pr_err("Failed to map timer base\n"); +		return -ENOMEM;  	} +	event_base = base + event; +	source_base = base + source; +	if (sts) +		sts_base = base + sts; +  	return 0;  } @@ -312,7 +307,7 @@ void __init msm7x01_timer_init(void)  {  	struct clocksource *cs = &msm_clocksource; -	if (msm_timer_map(0xc0100000, 0xc0100010)) +	if (msm_timer_map(0xc0100000, 0x0, 0x10, 0x0))  		return;  	cs->read = msm_read_timer_count_shift;  	cs->mask = CLOCKSOURCE_MASK((32 - MSM_DGT_SHIFT)); @@ -323,14 +318,14 @@ void __init msm7x01_timer_init(void)  void __init msm7x30_timer_init(void)  { -	if (msm_timer_map(0xc0100004, 0xc0100024)) +	if (msm_timer_map(0xc0100000, 0x4, 0x24, 0x80))  		return;  	msm_timer_init(24576000 / 4, 32, 1, false);  }  void __init qsd8x50_timer_init(void)  { -	if (msm_timer_map(0xAC100000, 0xAC100010)) +	if (msm_timer_map(0xAC100000, 0x0, 0x10, 0x34))  		return;  	msm_timer_init(19200000 / 4, 32, 7, false);  } diff --git a/arch/arm/mach-mvebu/irq-armada-370-xp.c b/arch/arm/mach-mvebu/irq-armada-370-xp.c index 274ff58271d..830139a3e2b 100644 --- a/arch/arm/mach-mvebu/irq-armada-370-xp.c +++ b/arch/arm/mach-mvebu/irq-armada-370-xp.c @@ -44,6 +44,8 @@  #define ARMADA_370_XP_MAX_PER_CPU_IRQS		(28) +#define ARMADA_370_XP_TIMER0_PER_CPU_IRQ	(5) +  #define ACTIVE_DOORBELLS			(8)  static DEFINE_RAW_SPINLOCK(irq_controller_lock); @@ -55,40 +57,30 @@ static struct irq_domain *armada_370_xp_mpic_domain;  /*   * In SMP mode:   * For shared global interrupts, mask/unmask global enable bit - * For CPU interrtups, mask/unmask the calling CPU's bit + * For CPU interrupts, mask/unmask the calling CPU's bit   */  static void armada_370_xp_irq_mask(struct irq_data *d)  { -#ifdef CONFIG_SMP  	irq_hw_number_t hwirq = irqd_to_hwirq(d); -	if (hwirq > ARMADA_370_XP_MAX_PER_CPU_IRQS) +	if (hwirq != ARMADA_370_XP_TIMER0_PER_CPU_IRQ)  		writel(hwirq, main_int_base +  				ARMADA_370_XP_INT_CLEAR_ENABLE_OFFS);  	else  		writel(hwirq, per_cpu_int_base +  				ARMADA_370_XP_INT_SET_MASK_OFFS); -#else -	writel(irqd_to_hwirq(d), -	       per_cpu_int_base + ARMADA_370_XP_INT_SET_MASK_OFFS); -#endif  }  static void armada_370_xp_irq_unmask(struct irq_data *d)  { -#ifdef CONFIG_SMP  	irq_hw_number_t hwirq = irqd_to_hwirq(d); -	if (hwirq > ARMADA_370_XP_MAX_PER_CPU_IRQS) +	if (hwirq != ARMADA_370_XP_TIMER0_PER_CPU_IRQ)  		writel(hwirq, main_int_base +  				ARMADA_370_XP_INT_SET_ENABLE_OFFS);  	else  		writel(hwirq, per_cpu_int_base +  				ARMADA_370_XP_INT_CLEAR_MASK_OFFS); -#else -	writel(irqd_to_hwirq(d), -	       per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS); -#endif  }  #ifdef CONFIG_SMP @@ -144,10 +136,14 @@ static int armada_370_xp_mpic_irq_map(struct irq_domain *h,  				      unsigned int virq, irq_hw_number_t hw)  {  	armada_370_xp_irq_mask(irq_get_irq_data(virq)); -	writel(hw, main_int_base + ARMADA_370_XP_INT_SET_ENABLE_OFFS); +	if (hw != ARMADA_370_XP_TIMER0_PER_CPU_IRQ) +		writel(hw, per_cpu_int_base + +			ARMADA_370_XP_INT_CLEAR_MASK_OFFS); +	else +		writel(hw, main_int_base + ARMADA_370_XP_INT_SET_ENABLE_OFFS);  	irq_set_status_flags(virq, IRQ_LEVEL); -	if (hw < ARMADA_370_XP_MAX_PER_CPU_IRQS) { +	if (hw == ARMADA_370_XP_TIMER0_PER_CPU_IRQ) {  		irq_set_percpu_devid(virq);  		irq_set_chip_and_handler(virq, &armada_370_xp_irq_chip,  					handle_percpu_devid_irq); diff --git a/arch/arm/mach-mxs/Kconfig b/arch/arm/mach-mxs/Kconfig index ecc431909d6..4dc2fbba0ec 100644 --- a/arch/arm/mach-mxs/Kconfig +++ b/arch/arm/mach-mxs/Kconfig @@ -1,8 +1,7 @@ -if ARCH_MXS -  config SOC_IMX23  	bool  	select ARM_AMBA +	select ARM_CPU_SUSPEND if PM  	select CPU_ARM926T  	select HAVE_PWM  	select PINCTRL_IMX23 @@ -10,19 +9,24 @@ config SOC_IMX23  config SOC_IMX28  	bool  	select ARM_AMBA +	select ARM_CPU_SUSPEND if PM  	select CPU_ARM926T  	select HAVE_CAN_FLEXCAN if CAN  	select HAVE_PWM  	select PINCTRL_IMX28 -comment "MXS platforms:" - -config MACH_MXS_DT -	bool "Support MXS platforms from device tree" +config ARCH_MXS +	bool "Freescale MXS (i.MX23, i.MX28) support" +	depends on ARCH_MULTI_V5 +	select ARCH_REQUIRE_GPIOLIB +	select CLKDEV_LOOKUP +	select CLKSRC_MMIO +	select CLKSRC_OF +	select GENERIC_CLOCKEVENTS +	select HAVE_CLK_PREPARE +	select PINCTRL  	select SOC_IMX23  	select SOC_IMX28 +	select STMP_DEVICE  	help -	  Include support for Freescale MXS platforms(i.MX23 and i.MX28) -	  using the device tree for discovery - -endif +	  Support for Freescale MXS-based family of processors diff --git a/arch/arm/mach-mxs/Makefile b/arch/arm/mach-mxs/Makefile index 3d3c8a97306..cc2bf6748ad 100644 --- a/arch/arm/mach-mxs/Makefile +++ b/arch/arm/mach-mxs/Makefile @@ -1,6 +1,2 @@ -# Common support -obj-y := icoll.o ocotp.o system.o timer.o mm.o -  obj-$(CONFIG_PM) += pm.o - -obj-$(CONFIG_MACH_MXS_DT) += mach-mxs.o +obj-$(CONFIG_ARCH_MXS) += mach-mxs.o diff --git a/arch/arm/mach-mxs/Makefile.boot b/arch/arm/mach-mxs/Makefile.boot deleted file mode 100644 index 07b11fe6453..00000000000 --- a/arch/arm/mach-mxs/Makefile.boot +++ /dev/null @@ -1 +0,0 @@ -zreladdr-y += 0x40008000 diff --git a/arch/arm/mach-mxs/icoll.c b/arch/arm/mach-mxs/icoll.c deleted file mode 100644 index e26eeba4659..00000000000 --- a/arch/arm/mach-mxs/icoll.c +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (C) 2009-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/init.h> -#include <linux/irq.h> -#include <linux/irqdomain.h> -#include <linux/io.h> -#include <linux/of.h> -#include <linux/of_irq.h> -#include <asm/exception.h> -#include <mach/mxs.h> -#include <mach/common.h> - -#define HW_ICOLL_VECTOR				0x0000 -#define HW_ICOLL_LEVELACK			0x0010 -#define HW_ICOLL_CTRL				0x0020 -#define HW_ICOLL_STAT_OFFSET			0x0070 -#define HW_ICOLL_INTERRUPTn_SET(n)		(0x0124 + (n) * 0x10) -#define HW_ICOLL_INTERRUPTn_CLR(n)		(0x0128 + (n) * 0x10) -#define BM_ICOLL_INTERRUPTn_ENABLE		0x00000004 -#define BV_ICOLL_LEVELACK_IRQLEVELACK__LEVEL0	0x1 - -#define ICOLL_NUM_IRQS		128 - -static void __iomem *icoll_base = MXS_IO_ADDRESS(MXS_ICOLL_BASE_ADDR); -static struct irq_domain *icoll_domain; - -static void icoll_ack_irq(struct irq_data *d) -{ -	/* -	 * The Interrupt Collector is able to prioritize irqs. -	 * Currently only level 0 is used. So acking can use -	 * BV_ICOLL_LEVELACK_IRQLEVELACK__LEVEL0 unconditionally. -	 */ -	__raw_writel(BV_ICOLL_LEVELACK_IRQLEVELACK__LEVEL0, -			icoll_base + HW_ICOLL_LEVELACK); -} - -static void icoll_mask_irq(struct irq_data *d) -{ -	__raw_writel(BM_ICOLL_INTERRUPTn_ENABLE, -			icoll_base + HW_ICOLL_INTERRUPTn_CLR(d->hwirq)); -} - -static void icoll_unmask_irq(struct irq_data *d) -{ -	__raw_writel(BM_ICOLL_INTERRUPTn_ENABLE, -			icoll_base + HW_ICOLL_INTERRUPTn_SET(d->hwirq)); -} - -static struct irq_chip mxs_icoll_chip = { -	.irq_ack = icoll_ack_irq, -	.irq_mask = icoll_mask_irq, -	.irq_unmask = icoll_unmask_irq, -}; - -asmlinkage void __exception_irq_entry icoll_handle_irq(struct pt_regs *regs) -{ -	u32 irqnr; - -	do { -		irqnr = __raw_readl(icoll_base + HW_ICOLL_STAT_OFFSET); -		if (irqnr != 0x7f) { -			__raw_writel(irqnr, icoll_base + HW_ICOLL_VECTOR); -			irqnr = irq_find_mapping(icoll_domain, irqnr); -			handle_IRQ(irqnr, regs); -			continue; -		} -		break; -	} while (1); -} - -static int icoll_irq_domain_map(struct irq_domain *d, unsigned int virq, -				irq_hw_number_t hw) -{ -	irq_set_chip_and_handler(virq, &mxs_icoll_chip, handle_level_irq); -	set_irq_flags(virq, IRQF_VALID); - -	return 0; -} - -static struct irq_domain_ops icoll_irq_domain_ops = { -	.map = icoll_irq_domain_map, -	.xlate = irq_domain_xlate_onecell, -}; - -static void __init icoll_of_init(struct device_node *np, -			  struct device_node *interrupt_parent) -{ -	/* -	 * Interrupt Collector reset, which initializes the priority -	 * for each irq to level 0. -	 */ -	mxs_reset_block(icoll_base + HW_ICOLL_CTRL); - -	icoll_domain = irq_domain_add_linear(np, ICOLL_NUM_IRQS, -					     &icoll_irq_domain_ops, NULL); -	WARN_ON(!icoll_domain); -} - -static const struct of_device_id icoll_of_match[] __initconst = { -	{.compatible = "fsl,icoll", .data = icoll_of_init}, -	{ /* sentinel */ } -}; - -void __init icoll_init_irq(void) -{ -	of_irq_init(icoll_of_match); -} diff --git a/arch/arm/mach-mxs/include/mach/common.h b/arch/arm/mach-mxs/include/mach/common.h deleted file mode 100644 index be5a9c93cb2..00000000000 --- a/arch/arm/mach-mxs/include/mach/common.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2004-2007 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 version 2 as - * published by the Free Software Foundation. - */ - -#ifndef __MACH_MXS_COMMON_H__ -#define __MACH_MXS_COMMON_H__ - -extern const u32 *mxs_get_ocotp(void); -extern int mxs_reset_block(void __iomem *); -extern void mxs_timer_init(void); -extern void mxs_restart(char, const char *); -extern int mxs_saif_clkmux_select(unsigned int clkmux); - -extern int mx23_clocks_init(void); -extern void mx23_map_io(void); - -extern int mx28_clocks_init(void); -extern void mx28_map_io(void); - -extern void icoll_init_irq(void); -extern void icoll_handle_irq(struct pt_regs *); - -#endif /* __MACH_MXS_COMMON_H__ */ diff --git a/arch/arm/mach-mxs/include/mach/digctl.h b/arch/arm/mach-mxs/include/mach/digctl.h deleted file mode 100644 index 17964066303..00000000000 --- a/arch/arm/mach-mxs/include/mach/digctl.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 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 version 2 as - * published by the Free Software Foundation. - */ - -#ifndef __MACH_DIGCTL_H__ -#define __MACH_DIGCTL_H__ - -/* MXS DIGCTL SAIF CLKMUX */ -#define MXS_DIGCTL_SAIF_CLKMUX_DIRECT		0x0 -#define MXS_DIGCTL_SAIF_CLKMUX_CROSSINPUT	0x1 -#define MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR0		0x2 -#define MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR1		0x3 - -#define HW_DIGCTL_CTRL			0x0 -#define  BP_DIGCTL_CTRL_SAIF_CLKMUX	10 -#define  BM_DIGCTL_CTRL_SAIF_CLKMUX	(0x3 << 10) -#define HW_DIGCTL_CHIPID		0x310 -#endif diff --git a/arch/arm/mach-mxs/include/mach/hardware.h b/arch/arm/mach-mxs/include/mach/hardware.h deleted file mode 100644 index 4c0e8a64d8c..00000000000 --- a/arch/arm/mach-mxs/include/mach/hardware.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved. - * Copyright 2008 Juergen Beisert, kernel@pengutronix.de - * - * 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_MXS_HARDWARE_H__ -#define __MACH_MXS_HARDWARE_H__ - -#endif /* __MACH_MXS_HARDWARE_H__ */ diff --git a/arch/arm/mach-mxs/include/mach/mx23.h b/arch/arm/mach-mxs/include/mach/mx23.h deleted file mode 100644 index 599094bc99d..00000000000 --- a/arch/arm/mach-mxs/include/mach/mx23.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (C) 2009-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_MX23_H__ -#define __MACH_MX23_H__ - -#include <mach/mxs.h> - -/* - * OCRAM - */ -#define MX23_OCRAM_BASE_ADDR		0x00000000 -#define MX23_OCRAM_SIZE			SZ_32K - -/* - * IO - */ -#define MX23_IO_BASE_ADDR		0x80000000 -#define MX23_IO_SIZE			SZ_1M - -#define MX23_ICOLL_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x000000) -#define MX23_APBH_DMA_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x004000) -#define MX23_BCH_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x00a000) -#define MX23_GPMI_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x00c000) -#define MX23_SSP1_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x010000) -#define MX23_PINCTRL_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x018000) -#define MX23_DIGCTL_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x01c000) -#define MX23_ETM_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x020000) -#define MX23_APBX_DMA_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x024000) -#define MX23_DCP_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x028000) -#define MX23_PXP_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x02a000) -#define MX23_OCOTP_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x02c000) -#define MX23_AXI_AHB0_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x02e000) -#define MX23_LCDIF_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x030000) -#define MX23_SSP2_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x034000) -#define MX23_TVENC_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x038000) -#define MX23_CLKCTRL_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x040000) -#define MX23_SAIF0_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x042000) -#define MX23_POWER_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x044000) -#define MX23_SAIF1_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x046000) -#define MX23_AUDIOOUT_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x048000) -#define MX23_AUDIOIN_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x04c000) -#define MX23_LRADC_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x050000) -#define MX23_SPDIF_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x054000) -#define MX23_I2C_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x058000) -#define MX23_RTC_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x05c000) -#define MX23_PWM_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x064000) -#define MX23_TIMROT_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x068000) -#define MX23_AUART1_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x06c000) -#define MX23_AUART2_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x06e000) -#define MX23_DUART_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x070000) -#define MX23_USBPHY_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x07c000) -#define MX23_USBCTRL_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x080000) -#define MX23_DRAM_BASE_ADDR		(MX23_IO_BASE_ADDR + 0x0e0000) - -#define MX23_IO_P2V(x)			MXS_IO_P2V(x) -#define MX23_IO_ADDRESS(x)		IOMEM(MX23_IO_P2V(x)) - -/* - * IRQ - */ -#define MX23_INT_DUART			0 -#define MX23_INT_COMMS_RX		1 -#define MX23_INT_COMMS_TX		1 -#define MX23_INT_SSP2_ERROR		2 -#define MX23_INT_VDD5V			3 -#define MX23_INT_HEADPHONE_SHORT	4 -#define MX23_INT_DAC_DMA		5 -#define MX23_INT_DAC_ERROR		6 -#define MX23_INT_ADC_DMA		7 -#define MX23_INT_ADC_ERROR		8 -#define MX23_INT_SPDIF_DMA		9 -#define MX23_INT_SAIF2_DMA		9 -#define MX23_INT_SPDIF_ERROR		10 -#define MX23_INT_SAIF1_IRQ		10 -#define MX23_INT_SAIF2_IRQ		10 -#define MX23_INT_USB_CTRL		11 -#define MX23_INT_USB_WAKEUP		12 -#define MX23_INT_GPMI_DMA		13 -#define MX23_INT_SSP1_DMA		14 -#define MX23_INT_SSP1_ERROR		15 -#define MX23_INT_GPIO0			16 -#define MX23_INT_GPIO1			17 -#define MX23_INT_GPIO2			18 -#define MX23_INT_SAIF1_DMA		19 -#define MX23_INT_SSP2_DMA		20 -#define MX23_INT_ECC8_IRQ		21 -#define MX23_INT_RTC_ALARM		22 -#define MX23_INT_AUART1_TX_DMA		23 -#define MX23_INT_AUART1			24 -#define MX23_INT_AUART1_RX_DMA		25 -#define MX23_INT_I2C_DMA		26 -#define MX23_INT_I2C_ERROR		27 -#define MX23_INT_TIMER0			28 -#define MX23_INT_TIMER1			29 -#define MX23_INT_TIMER2			30 -#define MX23_INT_TIMER3			31 -#define MX23_INT_BATT_BRNOUT		32 -#define MX23_INT_VDDD_BRNOUT		33 -#define MX23_INT_VDDIO_BRNOUT		34 -#define MX23_INT_VDD18_BRNOUT		35 -#define MX23_INT_TOUCH_DETECT		36 -#define MX23_INT_LRADC_CH0		37 -#define MX23_INT_LRADC_CH1		38 -#define MX23_INT_LRADC_CH2		39 -#define MX23_INT_LRADC_CH3		40 -#define MX23_INT_LRADC_CH4		41 -#define MX23_INT_LRADC_CH5		42 -#define MX23_INT_LRADC_CH6		43 -#define MX23_INT_LRADC_CH7		44 -#define MX23_INT_LCDIF_DMA		45 -#define MX23_INT_LCDIF_ERROR		46 -#define MX23_INT_DIGCTL_DEBUG_TRAP	47 -#define MX23_INT_RTC_1MSEC		48 -#define MX23_INT_DRI_DMA		49 -#define MX23_INT_DRI_ATTENTION		50 -#define MX23_INT_GPMI_ATTENTION		51 -#define MX23_INT_IR			52 -#define MX23_INT_DCP_VMI		53 -#define MX23_INT_DCP			54 -#define MX23_INT_BCH			56 -#define MX23_INT_PXP			57 -#define MX23_INT_AUART2_TX_DMA		58 -#define MX23_INT_AUART2			59 -#define MX23_INT_AUART2_RX_DMA		60 -#define MX23_INT_VDAC_DETECT		61 -#define MX23_INT_VDD5V_DROOP		64 -#define MX23_INT_DCDC4P2_BO		65 - -/* - * APBH DMA - */ -#define MX23_DMA_SSP1			1 -#define MX23_DMA_SSP2			2 -#define MX23_DMA_GPMI0			4 -#define MX23_DMA_GPMI1			5 -#define MX23_DMA_GPMI2			6 -#define MX23_DMA_GPMI3			7 - -/* - * APBX DMA - */ -#define MX23_DMA_ADC			0 -#define MX23_DMA_DAC			1 -#define MX23_DMA_SPDIF			2 -#define MX23_DMA_I2C			3 -#define MX23_DMA_SAIF0			4 -#define MX23_DMA_UART0_RX		6 -#define MX23_DMA_UART0_TX		7 -#define MX23_DMA_UART1_RX		8 -#define MX23_DMA_UART1_TX		9 -#define MX23_DMA_SAIF1			10 - -#endif /* __MACH_MX23_H__ */ diff --git a/arch/arm/mach-mxs/include/mach/mx28.h b/arch/arm/mach-mxs/include/mach/mx28.h deleted file mode 100644 index 30c7990f3c0..00000000000 --- a/arch/arm/mach-mxs/include/mach/mx28.h +++ /dev/null @@ -1,225 +0,0 @@ -/* - * Copyright (C) 2009-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_MX28_H__ -#define __MACH_MX28_H__ - -#include <mach/mxs.h> - -/* - * OCRAM - */ -#define MX28_OCRAM_BASE_ADDR		0x00000000 -#define MX28_OCRAM_SIZE			SZ_128K - -/* - * IO - */ -#define MX28_IO_BASE_ADDR		0x80000000 -#define MX28_IO_SIZE			SZ_1M - -#define MX28_ICOLL_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x000000) -#define MX28_HSADC_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x002000) -#define MX28_APBH_DMA_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x004000) -#define MX28_PERFMON_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x006000) -#define MX28_BCH_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x00a000) -#define MX28_GPMI_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x00c000) -#define MX28_SSP0_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x010000) -#define MX28_SSP1_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x012000) -#define MX28_SSP2_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x014000) -#define MX28_SSP3_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x016000) -#define MX28_PINCTRL_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x018000) -#define MX28_DIGCTL_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x01c000) -#define MX28_ETM_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x022000) -#define MX28_APBX_DMA_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x024000) -#define MX28_DCP_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x028000) -#define MX28_PXP_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x02a000) -#define MX28_OCOTP_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x02c000) -#define MX28_AXI_AHB0_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x02e000) -#define MX28_LCDIF_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x030000) -#define MX28_CAN0_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x032000) -#define MX28_CAN1_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x034000) -#define MX28_SIMDBG_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x03c000) -#define MX28_SIMGPMISEL_BASE_ADDR	(MX28_IO_BASE_ADDR + 0x03c200) -#define MX28_SIMSSPSEL_BASE_ADDR	(MX28_IO_BASE_ADDR + 0x03c300) -#define MX28_SIMMEMSEL_BASE_ADDR	(MX28_IO_BASE_ADDR + 0x03c400) -#define MX28_GPIOMON_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x03c500) -#define MX28_SIMENET_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x03c700) -#define MX28_ARMJTAG_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x03c800) -#define MX28_CLKCTRL_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x040000) -#define MX28_SAIF0_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x042000) -#define MX28_POWER_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x044000) -#define MX28_SAIF1_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x046000) -#define MX28_LRADC_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x050000) -#define MX28_SPDIF_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x054000) -#define MX28_RTC_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x056000) -#define MX28_I2C0_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x058000) -#define MX28_I2C1_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x05a000) -#define MX28_PWM_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x064000) -#define MX28_TIMROT_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x068000) -#define MX28_AUART0_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x06a000) -#define MX28_AUART1_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x06c000) -#define MX28_AUART2_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x06e000) -#define MX28_AUART3_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x070000) -#define MX28_AUART4_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x072000) -#define MX28_DUART_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x074000) -#define MX28_USBPHY0_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x07C000) -#define MX28_USBPHY1_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x07e000) -#define MX28_USBCTRL0_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x080000) -#define MX28_USBCTRL1_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x090000) -#define MX28_DFLPT_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x0c0000) -#define MX28_DRAM_BASE_ADDR		(MX28_IO_BASE_ADDR + 0x0e0000) -#define MX28_ENET_MAC0_BASE_ADDR	(MX28_IO_BASE_ADDR + 0x0f0000) -#define MX28_ENET_MAC1_BASE_ADDR	(MX28_IO_BASE_ADDR + 0x0f4000) - -#define MX28_IO_P2V(x)			MXS_IO_P2V(x) -#define MX28_IO_ADDRESS(x)		IOMEM(MX28_IO_P2V(x)) - -/* - * IRQ - */ -#define MX28_INT_BATT_BRNOUT		0 -#define MX28_INT_VDDD_BRNOUT		1 -#define MX28_INT_VDDIO_BRNOUT		2 -#define MX28_INT_VDDA_BRNOUT		3 -#define MX28_INT_VDD5V_DROOP		4 -#define MX28_INT_DCDC4P2_BRNOUT		5 -#define MX28_INT_VDD5V			6 -#define MX28_INT_CAN0			8 -#define MX28_INT_CAN1			9 -#define MX28_INT_LRADC_TOUCH		10 -#define MX28_INT_HSADC			13 -#define MX28_INT_LRADC_THRESH0		14 -#define MX28_INT_LRADC_THRESH1		15 -#define MX28_INT_LRADC_CH0		16 -#define MX28_INT_LRADC_CH1		17 -#define MX28_INT_LRADC_CH2		18 -#define MX28_INT_LRADC_CH3		19 -#define MX28_INT_LRADC_CH4		20 -#define MX28_INT_LRADC_CH5		21 -#define MX28_INT_LRADC_CH6		22 -#define MX28_INT_LRADC_CH7		23 -#define MX28_INT_LRADC_BUTTON0		24 -#define MX28_INT_LRADC_BUTTON1		25 -#define MX28_INT_PERFMON		27 -#define MX28_INT_RTC_1MSEC		28 -#define MX28_INT_RTC_ALARM		29 -#define MX28_INT_COMMS			31 -#define MX28_INT_EMI_ERR		32 -#define MX28_INT_LCDIF			38 -#define MX28_INT_PXP			39 -#define MX28_INT_BCH			41 -#define MX28_INT_GPMI			42 -#define MX28_INT_SPDIF_ERROR		45 -#define MX28_INT_DUART			47 -#define MX28_INT_TIMER0			48 -#define MX28_INT_TIMER1			49 -#define MX28_INT_TIMER2			50 -#define MX28_INT_TIMER3			51 -#define MX28_INT_DCP_VMI		52 -#define MX28_INT_DCP			53 -#define MX28_INT_DCP_SECURE		54 -#define MX28_INT_SAIF1			58 -#define MX28_INT_SAIF0			59 -#define MX28_INT_SPDIF_DMA		66 -#define MX28_INT_I2C0_DMA		68 -#define MX28_INT_I2C1_DMA		69 -#define MX28_INT_AUART0_RX_DMA		70 -#define MX28_INT_AUART0_TX_DMA		71 -#define MX28_INT_AUART1_RX_DMA		72 -#define MX28_INT_AUART1_TX_DMA		73 -#define MX28_INT_AUART2_RX_DMA		74 -#define MX28_INT_AUART2_TX_DMA		75 -#define MX28_INT_AUART3_RX_DMA		76 -#define MX28_INT_AUART3_TX_DMA		77 -#define MX28_INT_AUART4_RX_DMA		78 -#define MX28_INT_AUART4_TX_DMA		79 -#define MX28_INT_SAIF0_DMA		80 -#define MX28_INT_SAIF1_DMA		81 -#define MX28_INT_SSP0_DMA		82 -#define MX28_INT_SSP1_DMA		83 -#define MX28_INT_SSP2_DMA		84 -#define MX28_INT_SSP3_DMA		85 -#define MX28_INT_LCDIF_DMA		86 -#define MX28_INT_HSADC_DMA		87 -#define MX28_INT_GPMI_DMA		88 -#define MX28_INT_DIGCTL_DEBUG_TRAP	89 -#define MX28_INT_USB1			92 -#define MX28_INT_USB0			93 -#define MX28_INT_USB1_WAKEUP		94 -#define MX28_INT_USB0_WAKEUP		95 -#define MX28_INT_SSP0_ERROR		96 -#define MX28_INT_SSP1_ERROR		97 -#define MX28_INT_SSP2_ERROR		98 -#define MX28_INT_SSP3_ERROR		99 -#define MX28_INT_ENET_SWI		100 -#define MX28_INT_ENET_MAC0		101 -#define MX28_INT_ENET_MAC1		102 -#define MX28_INT_ENET_MAC0_1588		103 -#define MX28_INT_ENET_MAC1_1588		104 -#define MX28_INT_I2C1_ERROR		110 -#define MX28_INT_I2C0_ERROR		111 -#define MX28_INT_AUART0			112 -#define MX28_INT_AUART1			113 -#define MX28_INT_AUART2			114 -#define MX28_INT_AUART3			115 -#define MX28_INT_AUART4			116 -#define MX28_INT_GPIO4			123 -#define MX28_INT_GPIO3			124 -#define MX28_INT_GPIO2			125 -#define MX28_INT_GPIO1			126 -#define MX28_INT_GPIO0			127 - -/* - * APBH DMA - */ -#define MX28_DMA_SSP0			0 -#define MX28_DMA_SSP1			1 -#define MX28_DMA_SSP2			2 -#define MX28_DMA_SSP3			3 -#define MX28_DMA_GPMI0			4 -#define MX28_DMA_GPMI1			5 -#define MX28_DMA_GPMI2			6 -#define MX28_DMA_GPMI3			7 -#define MX28_DMA_GPMI4			8 -#define MX28_DMA_GPMI5			9 -#define MX28_DMA_GPMI6			10 -#define MX28_DMA_GPMI7			11 -#define MX28_DMA_HSADC			12 -#define MX28_DMA_LCDIF			13 - -/* - * APBX DMA - */ -#define MX28_DMA_AUART4_RX		0 -#define MX28_DMA_AUART4_TX		1 -#define MX28_DMA_SPDIF_TX		2 -#define MX28_DMA_SAIF0			4 -#define MX28_DMA_SAIF1			5 -#define MX28_DMA_I2C0			6 -#define MX28_DMA_I2C1			7 -#define MX28_DMA_AUART0_RX		8 -#define MX28_DMA_AUART0_TX		9 -#define MX28_DMA_AUART1_RX		10 -#define MX28_DMA_AUART1_TX		11 -#define MX28_DMA_AUART2_RX		12 -#define MX28_DMA_AUART2_TX		13 -#define MX28_DMA_AUART3_RX		14 -#define MX28_DMA_AUART3_TX		15 - -#endif /* __MACH_MX28_H__ */ diff --git a/arch/arm/mach-mxs/include/mach/mxs.h b/arch/arm/mach-mxs/include/mach/mxs.h deleted file mode 100644 index 7d4fb6d0afd..00000000000 --- a/arch/arm/mach-mxs/include/mach/mxs.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (C) 2009-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_MXS_H__ -#define __MACH_MXS_H__ - -#ifndef __ASSEMBLER__ -#include <linux/io.h> -#endif -#include <asm/mach-types.h> -#include <mach/digctl.h> -#include <mach/hardware.h> - -/* - * IO addresses common to MXS-based - */ -#define MXS_IO_BASE_ADDR		0x80000000 -#define MXS_IO_SIZE			SZ_1M - -#define MXS_ICOLL_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x000000) -#define MXS_APBH_DMA_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x004000) -#define MXS_BCH_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x00a000) -#define MXS_GPMI_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x00c000) -#define MXS_PINCTRL_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x018000) -#define MXS_DIGCTL_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x01c000) -#define MXS_APBX_DMA_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x024000) -#define MXS_DCP_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x028000) -#define MXS_PXP_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x02a000) -#define MXS_OCOTP_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x02c000) -#define MXS_AXI_AHB0_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x02e000) -#define MXS_LCDIF_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x030000) -#define MXS_CLKCTRL_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x040000) -#define MXS_SAIF0_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x042000) -#define MXS_POWER_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x044000) -#define MXS_SAIF1_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x046000) -#define MXS_LRADC_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x050000) -#define MXS_SPDIF_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x054000) -#define MXS_I2C0_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x058000) -#define MXS_PWM_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x064000) -#define MXS_TIMROT_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x068000) -#define MXS_AUART1_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x06c000) -#define MXS_AUART2_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x06e000) -#define MXS_DRAM_BASE_ADDR		(MXS_IO_BASE_ADDR + 0x0e0000) - -/* - * It maps the whole address space to [0xf4000000, 0xf50fffff]. - * - *	OCRAM	0x00000000+0x020000	->	0xf4000000+0x020000 - *	IO	0x80000000+0x100000	->	0xf5000000+0x100000 - */ -#define MXS_IO_P2V(x)	(0xf4000000 +					\ -			(((x) & 0x80000000) >> 7) +			\ -			(((x) & 0x000fffff))) - -#define MXS_IO_ADDRESS(x)	IOMEM(MXS_IO_P2V(x)) - -#define mxs_map_entry(soc, name, _type)	{				\ -	.virtual = soc ## _IO_P2V(soc ## _ ## name ## _BASE_ADDR),	\ -	.pfn = __phys_to_pfn(soc ## _ ## name ## _BASE_ADDR),		\ -	.length = soc ## _ ## name ## _SIZE,				\ -	.type = _type,							\ -} - -#define MXS_GPIO_NR(bank, nr)	((bank) * 32 + (nr)) - -#define MXS_SET_ADDR		0x4 -#define MXS_CLR_ADDR		0x8 -#define MXS_TOG_ADDR		0xc - -#ifndef __ASSEMBLER__ -static inline void __mxs_setl(u32 mask, void __iomem *reg) -{ -	__raw_writel(mask, reg + MXS_SET_ADDR); -} - -static inline void __mxs_clrl(u32 mask, void __iomem *reg) -{ -	__raw_writel(mask, reg + MXS_CLR_ADDR); -} - -static inline void __mxs_togl(u32 mask, void __iomem *reg) -{ -	__raw_writel(mask, reg + MXS_TOG_ADDR); -} - -/* - * MXS CPU types - */ -#define MXS_CHIPID (MXS_IO_ADDRESS(MXS_DIGCTL_BASE_ADDR) + HW_DIGCTL_CHIPID) - -static inline int cpu_is_mx23(void) -{ -	return ((__raw_readl(MXS_CHIPID) >> 16) == 0x3780); -} - -static inline int cpu_is_mx28(void) -{ -	return ((__raw_readl(MXS_CHIPID) >> 16) == 0x2800); -} -#endif - -#endif /* __MACH_MXS_H__ */ diff --git a/arch/arm/mach-mxs/include/mach/timex.h b/arch/arm/mach-mxs/include/mach/timex.h deleted file mode 100644 index 734ce8984a6..00000000000 --- a/arch/arm/mach-mxs/include/mach/timex.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - *  Copyright (C) 1999 ARM Limited - * Copyright 2004-2007 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. - */ - -#ifndef __MACH_MXS_TIMEX_H__ -#define __MACH_MXS_TIMEX_H__ - -#define CLOCK_TICK_RATE		32000	/* 32K */ - -#endif /* __MACH_MXS_TIMEX_H__ */ diff --git a/arch/arm/mach-mxs/include/mach/uncompress.h b/arch/arm/mach-mxs/include/mach/uncompress.h deleted file mode 100644 index 533f5186e20..00000000000 --- a/arch/arm/mach-mxs/include/mach/uncompress.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - *  arch/arm/mach-mxs/include/mach/uncompress.h - * - *  Copyright (C) 1999 ARM Limited - *  Copyright (C) Shane Nay (shane@minirl.com) - *  Copyright 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. - */ -#ifndef __MACH_MXS_UNCOMPRESS_H__ -#define __MACH_MXS_UNCOMPRESS_H__ - -unsigned long mxs_duart_base; - -#define MXS_DUART(x)	(*(volatile unsigned long *)(mxs_duart_base + (x))) - -#define MXS_DUART_DR		0x00 -#define MXS_DUART_FR		0x18 -#define MXS_DUART_FR_TXFE	(1 << 7) -#define MXS_DUART_CR		0x30 -#define MXS_DUART_CR_UARTEN	(1 << 0) - -/* - * The following code assumes the serial port has already been - * initialized by the bootloader. If it's not, the output is - * simply discarded. - */ - -static void putc(int ch) -{ -	if (!mxs_duart_base) -		return; -	if (!(MXS_DUART(MXS_DUART_CR) & MXS_DUART_CR_UARTEN)) -		return; - -	while (!(MXS_DUART(MXS_DUART_FR) & MXS_DUART_FR_TXFE)) -		barrier(); - -	MXS_DUART(MXS_DUART_DR) = ch; -} - -static inline void flush(void) -{ -} - -#define MX23_DUART_BASE_ADDR	0x80070000 -#define MX28_DUART_BASE_ADDR	0x80074000 -#define MXS_DIGCTL_CHIPID	0x8001c310 - -static inline void __arch_decomp_setup(unsigned long arch_id) -{ -	u16 chipid = (*(volatile unsigned long *) MXS_DIGCTL_CHIPID) >> 16; - -	switch (chipid) { -	case 0x3780: -		mxs_duart_base = MX23_DUART_BASE_ADDR; -		break; -	case 0x2800: -		mxs_duart_base = MX28_DUART_BASE_ADDR; -		break; -	default: -		break; -	} -} - -#define arch_decomp_setup()	__arch_decomp_setup(arch_id) - -#endif /* __MACH_MXS_UNCOMPRESS_H__ */ diff --git a/arch/arm/mach-mxs/mach-mxs.c b/arch/arm/mach-mxs/mach-mxs.c index e7b781d3788..b5c1bdd3dcd 100644 --- a/arch/arm/mach-mxs/mach-mxs.c +++ b/arch/arm/mach-mxs/mach-mxs.c @@ -11,22 +11,55 @@   */  #include <linux/clk.h> +#include <linux/clk/mxs.h>  #include <linux/clkdev.h> +#include <linux/clocksource.h>  #include <linux/can/platform/flexcan.h>  #include <linux/delay.h>  #include <linux/err.h>  #include <linux/gpio.h>  #include <linux/init.h> +#include <linux/irqchip.h> +#include <linux/irqchip/mxs.h>  #include <linux/micrel_phy.h>  #include <linux/mxsfb.h> +#include <linux/of_address.h>  #include <linux/of_platform.h>  #include <linux/phy.h>  #include <linux/pinctrl/consumer.h>  #include <asm/mach/arch.h> +#include <asm/mach/map.h>  #include <asm/mach/time.h> -#include <mach/common.h> -#include <mach/digctl.h> -#include <mach/mxs.h> +#include <asm/system_misc.h> + +#include "pm.h" + +/* MXS DIGCTL SAIF CLKMUX */ +#define MXS_DIGCTL_SAIF_CLKMUX_DIRECT		0x0 +#define MXS_DIGCTL_SAIF_CLKMUX_CROSSINPUT	0x1 +#define MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR0		0x2 +#define MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR1		0x3 + +#define MXS_GPIO_NR(bank, nr)	((bank) * 32 + (nr)) + +#define MXS_SET_ADDR		0x4 +#define MXS_CLR_ADDR		0x8 +#define MXS_TOG_ADDR		0xc + +static inline void __mxs_setl(u32 mask, void __iomem *reg) +{ +	__raw_writel(mask, reg + MXS_SET_ADDR); +} + +static inline void __mxs_clrl(u32 mask, void __iomem *reg) +{ +	__raw_writel(mask, reg + MXS_CLR_ADDR); +} + +static inline void __mxs_togl(u32 mask, void __iomem *reg) +{ +	__raw_writel(mask, reg + MXS_TOG_ADDR); +}  static struct fb_videomode mx23evk_video_modes[] = {  	{ @@ -165,14 +198,80 @@ static struct of_dev_auxdata mxs_auxdata_lookup[] __initdata = {  	{ /* sentinel */ }  }; -static void __init imx23_timer_init(void) -{ -	mx23_clocks_init(); -} +#define OCOTP_WORD_OFFSET		0x20 +#define OCOTP_WORD_COUNT		0x20 + +#define BM_OCOTP_CTRL_BUSY		(1 << 8) +#define BM_OCOTP_CTRL_ERROR		(1 << 9) +#define BM_OCOTP_CTRL_RD_BANK_OPEN	(1 << 12) -static void __init imx28_timer_init(void) +static DEFINE_MUTEX(ocotp_mutex); +static u32 ocotp_words[OCOTP_WORD_COUNT]; + +static const u32 *mxs_get_ocotp(void)  { -	mx28_clocks_init(); +	struct device_node *np; +	void __iomem *ocotp_base; +	int timeout = 0x400; +	size_t i; +	static int once; + +	if (once) +		return ocotp_words; + +	np = of_find_compatible_node(NULL, NULL, "fsl,ocotp"); +	ocotp_base = of_iomap(np, 0); +	WARN_ON(!ocotp_base); + +	mutex_lock(&ocotp_mutex); + +	/* +	 * clk_enable(hbus_clk) for ocotp can be skipped +	 * as it must be on when system is running. +	 */ + +	/* try to clear ERROR bit */ +	__mxs_clrl(BM_OCOTP_CTRL_ERROR, ocotp_base); + +	/* check both BUSY and ERROR cleared */ +	while ((__raw_readl(ocotp_base) & +		(BM_OCOTP_CTRL_BUSY | BM_OCOTP_CTRL_ERROR)) && --timeout) +		cpu_relax(); + +	if (unlikely(!timeout)) +		goto error_unlock; + +	/* open OCOTP banks for read */ +	__mxs_setl(BM_OCOTP_CTRL_RD_BANK_OPEN, ocotp_base); + +	/* approximately wait 32 hclk cycles */ +	udelay(1); + +	/* poll BUSY bit becoming cleared */ +	timeout = 0x400; +	while ((__raw_readl(ocotp_base) & BM_OCOTP_CTRL_BUSY) && --timeout) +		cpu_relax(); + +	if (unlikely(!timeout)) +		goto error_unlock; + +	for (i = 0; i < OCOTP_WORD_COUNT; i++) +		ocotp_words[i] = __raw_readl(ocotp_base + OCOTP_WORD_OFFSET + +						i * 0x10); + +	/* close banks for power saving */ +	__mxs_clrl(BM_OCOTP_CTRL_RD_BANK_OPEN, ocotp_base); + +	once = 1; + +	mutex_unlock(&ocotp_mutex); + +	return ocotp_words; + +error_unlock: +	mutex_unlock(&ocotp_mutex); +	pr_err("%s: timeout in reading OCOTP\n", __func__); +	return NULL;  }  enum mac_oui { @@ -454,32 +553,63 @@ static void __init mxs_machine_init(void)  		imx28_evk_post_init();  } -static const char *imx23_dt_compat[] __initdata = { -	"fsl,imx23", -	NULL, -}; +#define MX23_CLKCTRL_RESET_OFFSET	0x120 +#define MX28_CLKCTRL_RESET_OFFSET	0x1e0 +#define MXS_CLKCTRL_RESET_CHIP		(1 << 1) + +/* + * Reset the system. It is called by machine_restart(). + */ +static void mxs_restart(char mode, const char *cmd) +{ +	struct device_node *np; +	void __iomem *reset_addr; + +	np = of_find_compatible_node(NULL, NULL, "fsl,clkctrl"); +	reset_addr = of_iomap(np, 0); +	if (!reset_addr) +		goto soft; + +	if (of_device_is_compatible(np, "fsl,imx23-clkctrl")) +		reset_addr += MX23_CLKCTRL_RESET_OFFSET; +	else +		reset_addr += MX28_CLKCTRL_RESET_OFFSET; -static const char *imx28_dt_compat[] __initdata = { +	/* reset the chip */ +	__mxs_setl(MXS_CLKCTRL_RESET_CHIP, reset_addr); + +	pr_err("Failed to assert the chip reset\n"); + +	/* Delay to allow the serial port to show the message */ +	mdelay(50); + +soft: +	/* We'll take a jump through zero as a poor second */ +	soft_restart(0); +} + +static void __init mxs_timer_init(void) +{ +	if (of_machine_is_compatible("fsl,imx23")) +		mx23_clocks_init(); +	else +		mx28_clocks_init(); +	clocksource_of_init(); +} + +static const char *mxs_dt_compat[] __initdata = {  	"fsl,imx28", +	"fsl,imx23",  	NULL,  }; -DT_MACHINE_START(IMX23, "Freescale i.MX23 (Device Tree)") -	.map_io		= mx23_map_io, -	.init_irq	= icoll_init_irq, -	.handle_irq	= icoll_handle_irq, -	.init_time	= imx23_timer_init, -	.init_machine	= mxs_machine_init, -	.dt_compat	= imx23_dt_compat, -	.restart	= mxs_restart, -MACHINE_END - -DT_MACHINE_START(IMX28, "Freescale i.MX28 (Device Tree)") -	.map_io		= mx28_map_io, -	.init_irq	= icoll_init_irq, +DT_MACHINE_START(MXS, "Freescale MXS (Device Tree)") +	.map_io		= debug_ll_io_init, +	.init_irq	= irqchip_init,  	.handle_irq	= icoll_handle_irq, -	.init_time	= imx28_timer_init, +	.init_time	= mxs_timer_init,  	.init_machine	= mxs_machine_init, -	.dt_compat	= imx28_dt_compat, +	.init_late      = mxs_pm_init, +	.dt_compat	= mxs_dt_compat,  	.restart	= mxs_restart,  MACHINE_END diff --git a/arch/arm/mach-mxs/mm.c b/arch/arm/mach-mxs/mm.c deleted file mode 100644 index e63b7d87acb..00000000000 --- a/arch/arm/mach-mxs/mm.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2008-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 - * - * Create static mapping between physical to virtual memory. - */ - -#include <linux/mm.h> -#include <linux/init.h> - -#include <asm/mach/map.h> - -#include <mach/mx23.h> -#include <mach/mx28.h> -#include <mach/common.h> - -/* - * Define the MX23 memory map. - */ -static struct map_desc mx23_io_desc[] __initdata = { -	mxs_map_entry(MX23, OCRAM, MT_DEVICE), -	mxs_map_entry(MX23, IO, MT_DEVICE), -}; - -/* - * Define the MX28 memory map. - */ -static struct map_desc mx28_io_desc[] __initdata = { -	mxs_map_entry(MX28, OCRAM, MT_DEVICE), -	mxs_map_entry(MX28, IO, MT_DEVICE), -}; - -/* - * This function initializes the memory map. It is called during the - * system startup to create static physical to virtual memory mappings - * for the IO modules. - */ -void __init mx23_map_io(void) -{ -	iotable_init(mx23_io_desc, ARRAY_SIZE(mx23_io_desc)); -} - -void __init mx28_map_io(void) -{ -	iotable_init(mx28_io_desc, ARRAY_SIZE(mx28_io_desc)); -} diff --git a/arch/arm/mach-mxs/ocotp.c b/arch/arm/mach-mxs/ocotp.c deleted file mode 100644 index 1dff4670375..00000000000 --- a/arch/arm/mach-mxs/ocotp.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 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. - */ - -#include <linux/delay.h> -#include <linux/err.h> -#include <linux/mutex.h> - -#include <asm/processor.h>	/* for cpu_relax() */ - -#include <mach/mxs.h> -#include <mach/common.h> - -#define OCOTP_WORD_OFFSET		0x20 -#define OCOTP_WORD_COUNT		0x20 - -#define BM_OCOTP_CTRL_BUSY		(1 << 8) -#define BM_OCOTP_CTRL_ERROR		(1 << 9) -#define BM_OCOTP_CTRL_RD_BANK_OPEN	(1 << 12) - -static DEFINE_MUTEX(ocotp_mutex); -static u32 ocotp_words[OCOTP_WORD_COUNT]; - -const u32 *mxs_get_ocotp(void) -{ -	void __iomem *ocotp_base = MXS_IO_ADDRESS(MXS_OCOTP_BASE_ADDR); -	int timeout = 0x400; -	size_t i; -	static int once = 0; - -	if (once) -		return ocotp_words; - -	mutex_lock(&ocotp_mutex); - -	/* -	 * clk_enable(hbus_clk) for ocotp can be skipped -	 * as it must be on when system is running. -	 */ - -	/* try to clear ERROR bit */ -	__mxs_clrl(BM_OCOTP_CTRL_ERROR, ocotp_base); - -	/* check both BUSY and ERROR cleared */ -	while ((__raw_readl(ocotp_base) & -		(BM_OCOTP_CTRL_BUSY | BM_OCOTP_CTRL_ERROR)) && --timeout) -		cpu_relax(); - -	if (unlikely(!timeout)) -		goto error_unlock; - -	/* open OCOTP banks for read */ -	__mxs_setl(BM_OCOTP_CTRL_RD_BANK_OPEN, ocotp_base); - -	/* approximately wait 32 hclk cycles */ -	udelay(1); - -	/* poll BUSY bit becoming cleared */ -	timeout = 0x400; -	while ((__raw_readl(ocotp_base) & BM_OCOTP_CTRL_BUSY) && --timeout) -		cpu_relax(); - -	if (unlikely(!timeout)) -		goto error_unlock; - -	for (i = 0; i < OCOTP_WORD_COUNT; i++) -		ocotp_words[i] = __raw_readl(ocotp_base + OCOTP_WORD_OFFSET + -						i * 0x10); - -	/* close banks for power saving */ -	__mxs_clrl(BM_OCOTP_CTRL_RD_BANK_OPEN, ocotp_base); - -	once = 1; - -	mutex_unlock(&ocotp_mutex); - -	return ocotp_words; - -error_unlock: -	mutex_unlock(&ocotp_mutex); -	pr_err("%s: timeout in reading OCOTP\n", __func__); -	return NULL; -} diff --git a/arch/arm/mach-mxs/pm.c b/arch/arm/mach-mxs/pm.c index a9b4bbcdafb..b2494d2db2c 100644 --- a/arch/arm/mach-mxs/pm.c +++ b/arch/arm/mach-mxs/pm.c @@ -34,9 +34,7 @@ static struct platform_suspend_ops mxs_suspend_ops = {  	.valid = suspend_valid_only_mem,  }; -static int __init mxs_pm_init(void) +void __init mxs_pm_init(void)  {  	suspend_set_ops(&mxs_suspend_ops); -	return 0;  } -device_initcall(mxs_pm_init); diff --git a/arch/arm/mach-h720x/include/mach/timex.h b/arch/arm/mach-mxs/pm.h index 3f2f447ff36..f57e7cdece2 100644 --- a/arch/arm/mach-h720x/include/mach/timex.h +++ b/arch/arm/mach-mxs/pm.h @@ -1,15 +1,14 @@  /* - * arch/arm/mach-h720x/include/mach/timex.h - * Copyright (C) 2000 Jungjun Kim, Hynix Semiconductor Inc. + * Copyright (C) 2013 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.   */ -#ifndef __ASM_ARCH_TIMEX -#define __ASM_ARCH_TIMEX +#ifndef __ARCH_MXS_PM_H +#define __ARCH_MXS_PM_H -#define CLOCK_TICK_RATE		3686400 +void mxs_pm_init(void);  #endif diff --git a/arch/arm/mach-mxs/system.c b/arch/arm/mach-mxs/system.c deleted file mode 100644 index 30042e23bfa..00000000000 --- a/arch/arm/mach-mxs/system.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (C) 1999 ARM Limited - * Copyright (C) 2000 Deep Blue Solutions Ltd - * Copyright 2006-2007,2010 Freescale Semiconductor, Inc. All Rights Reserved. - * Copyright 2008 Juergen Beisert, kernel@pengutronix.de - * Copyright 2009 Ilya Yanok, Emcraft Systems Ltd, yanok@emcraft.com - * - * 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. - */ - -#include <linux/kernel.h> -#include <linux/clk.h> -#include <linux/io.h> -#include <linux/err.h> -#include <linux/delay.h> -#include <linux/init.h> -#include <linux/module.h> - -#include <asm/proc-fns.h> -#include <asm/system_misc.h> - -#include <mach/mxs.h> -#include <mach/common.h> - -#define MX23_CLKCTRL_RESET_OFFSET	0x120 -#define MX28_CLKCTRL_RESET_OFFSET	0x1e0 -#define MXS_CLKCTRL_RESET_CHIP		(1 << 1) - -#define MXS_MODULE_CLKGATE		(1 << 30) -#define MXS_MODULE_SFTRST		(1 << 31) - -static void __iomem *mxs_clkctrl_reset_addr; - -/* - * Reset the system. It is called by machine_restart(). - */ -void mxs_restart(char mode, const char *cmd) -{ -	/* reset the chip */ -	__mxs_setl(MXS_CLKCTRL_RESET_CHIP, mxs_clkctrl_reset_addr); - -	pr_err("Failed to assert the chip reset\n"); - -	/* Delay to allow the serial port to show the message */ -	mdelay(50); - -	/* We'll take a jump through zero as a poor second */ -	soft_restart(0); -} - -static int __init mxs_arch_reset_init(void) -{ -	struct clk *clk; - -	mxs_clkctrl_reset_addr = MXS_IO_ADDRESS(MXS_CLKCTRL_BASE_ADDR) + -				(cpu_is_mx23() ? MX23_CLKCTRL_RESET_OFFSET : -						 MX28_CLKCTRL_RESET_OFFSET); - -	clk = clk_get_sys("rtc", NULL); -	if (!IS_ERR(clk)) -		clk_prepare_enable(clk); - -	return 0; -} -core_initcall(mxs_arch_reset_init); - -/* - * Clear the bit and poll it cleared.  This is usually called with - * a reset address and mask being either SFTRST(bit 31) or CLKGATE - * (bit 30). - */ -static int clear_poll_bit(void __iomem *addr, u32 mask) -{ -	int timeout = 0x400; - -	/* clear the bit */ -	__mxs_clrl(mask, addr); - -	/* -	 * SFTRST needs 3 GPMI clocks to settle, the reference manual -	 * recommends to wait 1us. -	 */ -	udelay(1); - -	/* poll the bit becoming clear */ -	while ((__raw_readl(addr) & mask) && --timeout) -		/* nothing */; - -	return !timeout; -} - -int mxs_reset_block(void __iomem *reset_addr) -{ -	int ret; -	int timeout = 0x400; - -	/* clear and poll SFTRST */ -	ret = clear_poll_bit(reset_addr, MXS_MODULE_SFTRST); -	if (unlikely(ret)) -		goto error; - -	/* clear CLKGATE */ -	__mxs_clrl(MXS_MODULE_CLKGATE, reset_addr); - -	/* set SFTRST to reset the block */ -	__mxs_setl(MXS_MODULE_SFTRST, reset_addr); -	udelay(1); - -	/* poll CLKGATE becoming set */ -	while ((!(__raw_readl(reset_addr) & MXS_MODULE_CLKGATE)) && --timeout) -		/* nothing */; -	if (unlikely(!timeout)) -		goto error; - -	/* clear and poll SFTRST */ -	ret = clear_poll_bit(reset_addr, MXS_MODULE_SFTRST); -	if (unlikely(ret)) -		goto error; - -	/* clear and poll CLKGATE */ -	ret = clear_poll_bit(reset_addr, MXS_MODULE_CLKGATE); -	if (unlikely(ret)) -		goto error; - -	return 0; - -error: -	pr_err("%s(%p): module reset timeout\n", __func__, reset_addr); -	return -ETIMEDOUT; -} -EXPORT_SYMBOL(mxs_reset_block); diff --git a/arch/arm/mach-mxs/timer.c b/arch/arm/mach-mxs/timer.c deleted file mode 100644 index 421020498a1..00000000000 --- a/arch/arm/mach-mxs/timer.c +++ /dev/null @@ -1,306 +0,0 @@ -/* - *  Copyright (C) 2000-2001 Deep Blue Solutions - *  Copyright (C) 2002 Shane Nay (shane@minirl.com) - *  Copyright (C) 2006-2007 Pavel Pisa (ppisa@pikron.com) - *  Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de) - *  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/err.h> -#include <linux/interrupt.h> -#include <linux/irq.h> -#include <linux/clockchips.h> -#include <linux/clk.h> -#include <linux/of.h> -#include <linux/of_irq.h> - -#include <asm/mach/time.h> -#include <asm/sched_clock.h> -#include <mach/mxs.h> -#include <mach/common.h> - -/* - * There are 2 versions of the timrot on Freescale MXS-based SoCs. - * The v1 on MX23 only gets 16 bits counter, while v2 on MX28 - * extends the counter to 32 bits. - * - * The implementation uses two timers, one for clock_event and - * another for clocksource. MX28 uses timrot 0 and 1, while MX23 - * uses 0 and 2. - */ - -#define MX23_TIMROT_VERSION_OFFSET	0x0a0 -#define MX28_TIMROT_VERSION_OFFSET	0x120 -#define BP_TIMROT_MAJOR_VERSION		24 -#define BV_TIMROT_VERSION_1		0x01 -#define BV_TIMROT_VERSION_2		0x02 -#define timrot_is_v1()	(timrot_major_version == BV_TIMROT_VERSION_1) - -/* - * There are 4 registers for each timrotv2 instance, and 2 registers - * for each timrotv1. So address step 0x40 in macros below strides - * one instance of timrotv2 while two instances of timrotv1. - * - * As the result, HW_TIMROT_XXXn(1) defines the address of timrot1 - * on MX28 while timrot2 on MX23. - */ -/* common between v1 and v2 */ -#define HW_TIMROT_ROTCTRL		0x00 -#define HW_TIMROT_TIMCTRLn(n)		(0x20 + (n) * 0x40) -/* v1 only */ -#define HW_TIMROT_TIMCOUNTn(n)		(0x30 + (n) * 0x40) -/* v2 only */ -#define HW_TIMROT_RUNNING_COUNTn(n)	(0x30 + (n) * 0x40) -#define HW_TIMROT_FIXED_COUNTn(n)	(0x40 + (n) * 0x40) - -#define BM_TIMROT_TIMCTRLn_RELOAD	(1 << 6) -#define BM_TIMROT_TIMCTRLn_UPDATE	(1 << 7) -#define BM_TIMROT_TIMCTRLn_IRQ_EN	(1 << 14) -#define BM_TIMROT_TIMCTRLn_IRQ		(1 << 15) -#define BP_TIMROT_TIMCTRLn_SELECT	0 -#define BV_TIMROTv1_TIMCTRLn_SELECT__32KHZ_XTAL		0x8 -#define BV_TIMROTv2_TIMCTRLn_SELECT__32KHZ_XTAL		0xb -#define BV_TIMROTv2_TIMCTRLn_SELECT__TICK_ALWAYS	0xf - -static struct clock_event_device mxs_clockevent_device; -static enum clock_event_mode mxs_clockevent_mode = CLOCK_EVT_MODE_UNUSED; - -static void __iomem *mxs_timrot_base = MXS_IO_ADDRESS(MXS_TIMROT_BASE_ADDR); -static u32 timrot_major_version; - -static inline void timrot_irq_disable(void) -{ -	__mxs_clrl(BM_TIMROT_TIMCTRLn_IRQ_EN, -			mxs_timrot_base + HW_TIMROT_TIMCTRLn(0)); -} - -static inline void timrot_irq_enable(void) -{ -	__mxs_setl(BM_TIMROT_TIMCTRLn_IRQ_EN, -			mxs_timrot_base + HW_TIMROT_TIMCTRLn(0)); -} - -static void timrot_irq_acknowledge(void) -{ -	__mxs_clrl(BM_TIMROT_TIMCTRLn_IRQ, -			mxs_timrot_base + HW_TIMROT_TIMCTRLn(0)); -} - -static cycle_t timrotv1_get_cycles(struct clocksource *cs) -{ -	return ~((__raw_readl(mxs_timrot_base + HW_TIMROT_TIMCOUNTn(1)) -			& 0xffff0000) >> 16); -} - -static int timrotv1_set_next_event(unsigned long evt, -					struct clock_event_device *dev) -{ -	/* timrot decrements the count */ -	__raw_writel(evt, mxs_timrot_base + HW_TIMROT_TIMCOUNTn(0)); - -	return 0; -} - -static int timrotv2_set_next_event(unsigned long evt, -					struct clock_event_device *dev) -{ -	/* timrot decrements the count */ -	__raw_writel(evt, mxs_timrot_base + HW_TIMROT_FIXED_COUNTn(0)); - -	return 0; -} - -static irqreturn_t mxs_timer_interrupt(int irq, void *dev_id) -{ -	struct clock_event_device *evt = dev_id; - -	timrot_irq_acknowledge(); -	evt->event_handler(evt); - -	return IRQ_HANDLED; -} - -static struct irqaction mxs_timer_irq = { -	.name		= "MXS Timer Tick", -	.dev_id		= &mxs_clockevent_device, -	.flags		= IRQF_TIMER | IRQF_IRQPOLL, -	.handler	= mxs_timer_interrupt, -}; - -#ifdef DEBUG -static const char *clock_event_mode_label[] const = { -	[CLOCK_EVT_MODE_PERIODIC] = "CLOCK_EVT_MODE_PERIODIC", -	[CLOCK_EVT_MODE_ONESHOT]  = "CLOCK_EVT_MODE_ONESHOT", -	[CLOCK_EVT_MODE_SHUTDOWN] = "CLOCK_EVT_MODE_SHUTDOWN", -	[CLOCK_EVT_MODE_UNUSED]   = "CLOCK_EVT_MODE_UNUSED" -}; -#endif /* DEBUG */ - -static void mxs_set_mode(enum clock_event_mode mode, -				struct clock_event_device *evt) -{ -	/* Disable interrupt in timer module */ -	timrot_irq_disable(); - -	if (mode != mxs_clockevent_mode) { -		/* Set event time into the furthest future */ -		if (timrot_is_v1()) -			__raw_writel(0xffff, -				mxs_timrot_base + HW_TIMROT_TIMCOUNTn(1)); -		else -			__raw_writel(0xffffffff, -				mxs_timrot_base + HW_TIMROT_FIXED_COUNTn(1)); - -		/* Clear pending interrupt */ -		timrot_irq_acknowledge(); -	} - -#ifdef DEBUG -	pr_info("%s: changing mode from %s to %s\n", __func__, -		clock_event_mode_label[mxs_clockevent_mode], -		clock_event_mode_label[mode]); -#endif /* DEBUG */ - -	/* Remember timer mode */ -	mxs_clockevent_mode = mode; - -	switch (mode) { -	case CLOCK_EVT_MODE_PERIODIC: -		pr_err("%s: Periodic mode is not implemented\n", __func__); -		break; -	case CLOCK_EVT_MODE_ONESHOT: -		timrot_irq_enable(); -		break; -	case CLOCK_EVT_MODE_SHUTDOWN: -	case CLOCK_EVT_MODE_UNUSED: -	case CLOCK_EVT_MODE_RESUME: -		/* Left event sources disabled, no more interrupts appear */ -		break; -	} -} - -static struct clock_event_device mxs_clockevent_device = { -	.name		= "mxs_timrot", -	.features	= CLOCK_EVT_FEAT_ONESHOT, -	.set_mode	= mxs_set_mode, -	.set_next_event	= timrotv2_set_next_event, -	.rating		= 200, -}; - -static int __init mxs_clockevent_init(struct clk *timer_clk) -{ -	if (timrot_is_v1()) -		mxs_clockevent_device.set_next_event = timrotv1_set_next_event; -	mxs_clockevent_device.cpumask = cpumask_of(0); -	clockevents_config_and_register(&mxs_clockevent_device, -					clk_get_rate(timer_clk), -					timrot_is_v1() ? 0xf : 0x2, -					timrot_is_v1() ? 0xfffe : 0xfffffffe); - -	return 0; -} - -static struct clocksource clocksource_mxs = { -	.name		= "mxs_timer", -	.rating		= 200, -	.read		= timrotv1_get_cycles, -	.mask		= CLOCKSOURCE_MASK(16), -	.flags		= CLOCK_SOURCE_IS_CONTINUOUS, -}; - -static u32 notrace mxs_read_sched_clock_v2(void) -{ -	return ~readl_relaxed(mxs_timrot_base + HW_TIMROT_RUNNING_COUNTn(1)); -} - -static int __init mxs_clocksource_init(struct clk *timer_clk) -{ -	unsigned int c = clk_get_rate(timer_clk); - -	if (timrot_is_v1()) -		clocksource_register_hz(&clocksource_mxs, c); -	else { -		clocksource_mmio_init(mxs_timrot_base + HW_TIMROT_RUNNING_COUNTn(1), -			"mxs_timer", c, 200, 32, clocksource_mmio_readl_down); -		setup_sched_clock(mxs_read_sched_clock_v2, 32, c); -	} - -	return 0; -} - -void __init mxs_timer_init(void) -{ -	struct device_node *np; -	struct clk *timer_clk; -	int irq; - -	np = of_find_compatible_node(NULL, NULL, "fsl,timrot"); -	if (!np) { -		pr_err("%s: failed find timrot node\n", __func__); -		return; -	} - -	timer_clk = clk_get_sys("timrot", NULL); -	if (IS_ERR(timer_clk)) { -		pr_err("%s: failed to get clk\n", __func__); -		return; -	} - -	clk_prepare_enable(timer_clk); - -	/* -	 * Initialize timers to a known state -	 */ -	mxs_reset_block(mxs_timrot_base + HW_TIMROT_ROTCTRL); - -	/* get timrot version */ -	timrot_major_version = __raw_readl(mxs_timrot_base + -				(cpu_is_mx23() ? MX23_TIMROT_VERSION_OFFSET : -						MX28_TIMROT_VERSION_OFFSET)); -	timrot_major_version >>= BP_TIMROT_MAJOR_VERSION; - -	/* one for clock_event */ -	__raw_writel((timrot_is_v1() ? -			BV_TIMROTv1_TIMCTRLn_SELECT__32KHZ_XTAL : -			BV_TIMROTv2_TIMCTRLn_SELECT__TICK_ALWAYS) | -			BM_TIMROT_TIMCTRLn_UPDATE | -			BM_TIMROT_TIMCTRLn_IRQ_EN, -			mxs_timrot_base + HW_TIMROT_TIMCTRLn(0)); - -	/* another for clocksource */ -	__raw_writel((timrot_is_v1() ? -			BV_TIMROTv1_TIMCTRLn_SELECT__32KHZ_XTAL : -			BV_TIMROTv2_TIMCTRLn_SELECT__TICK_ALWAYS) | -			BM_TIMROT_TIMCTRLn_RELOAD, -			mxs_timrot_base + HW_TIMROT_TIMCTRLn(1)); - -	/* set clocksource timer fixed count to the maximum */ -	if (timrot_is_v1()) -		__raw_writel(0xffff, -			mxs_timrot_base + HW_TIMROT_TIMCOUNTn(1)); -	else -		__raw_writel(0xffffffff, -			mxs_timrot_base + HW_TIMROT_FIXED_COUNTn(1)); - -	/* init and register the timer to the framework */ -	mxs_clocksource_init(timer_clk); -	mxs_clockevent_init(timer_clk); - -	/* Make irqs happen */ -	irq = irq_of_parse_and_map(np, 0); -	setup_irq(irq, &mxs_timer_irq); -} diff --git a/arch/arm/mach-nomadik/Kconfig b/arch/arm/mach-nomadik/Kconfig index 82226a5d60e..9b9d105f194 100644 --- a/arch/arm/mach-nomadik/Kconfig +++ b/arch/arm/mach-nomadik/Kconfig @@ -1,5 +1,24 @@ -if ARCH_NOMADIK +config ARCH_NOMADIK +	bool "ST-Ericsson Nomadik" +	depends on ARCH_MULTI_V5 +	select ARCH_REQUIRE_GPIOLIB +	select ARM_AMBA +	select ARM_VIC +	select CLKSRC_NOMADIK_MTU +	select CLKSRC_NOMADIK_MTU_SCHED_CLOCK +	select COMMON_CLK +	select CPU_ARM926T +	select GENERIC_CLOCKEVENTS +	select MIGHT_HAVE_CACHE_L2X0 +	select PINCTRL +	select PINCTRL_NOMADIK +	select PINCTRL_STN8815 +	select SPARSE_IRQ +	select USE_OF +	help +	  Support for the Nomadik platform by ST-Ericsson +if ARCH_NOMADIK  menu "Nomadik boards"  config MACH_NOMADIK_8815NHK @@ -9,8 +28,8 @@ config MACH_NOMADIK_8815NHK  	select I2C_ALGOBIT  endmenu +endif  config NOMADIK_8815 +	depends on ARCH_NOMADIK  	bool - -endif diff --git a/arch/arm/mach-nomadik/Makefile.boot b/arch/arm/mach-nomadik/Makefile.boot deleted file mode 100644 index ff0a4b5b0a8..00000000000 --- a/arch/arm/mach-nomadik/Makefile.boot +++ /dev/null @@ -1,4 +0,0 @@ -   zreladdr-y	+= 0x00008000 -params_phys-y	:= 0x00000100 -initrd_phys-y	:= 0x00800000 - diff --git a/arch/arm/mach-nomadik/cpu-8815.c b/arch/arm/mach-nomadik/cpu-8815.c index 21c1aa51264..59f6ff5c9ba 100644 --- a/arch/arm/mach-nomadik/cpu-8815.c +++ b/arch/arm/mach-nomadik/cpu-8815.c @@ -38,7 +38,6 @@  #include <linux/gpio.h>  #include <linux/amba/mmci.h> -#include <mach/irqs.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h>  #include <asm/mach/time.h> diff --git a/arch/arm/mach-nomadik/include/mach/irqs.h b/arch/arm/mach-nomadik/include/mach/irqs.h deleted file mode 100644 index 90ac965a92f..00000000000 --- a/arch/arm/mach-nomadik/include/mach/irqs.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - *  mach-nomadik/include/mach/irqs.h - * - *  Copyright (C) ST Microelectronics - * - * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ -#ifndef __ASM_ARCH_IRQS_H -#define __ASM_ARCH_IRQS_H - -#define IRQ_VIC_START		32	/* first VIC interrupt is 1 */ - -/* - * Interrupt numbers generic for all Nomadik Chip cuts - */ -#define IRQ_WATCHDOG			(IRQ_VIC_START+0) -#define IRQ_SOFTINT			(IRQ_VIC_START+1) -#define IRQ_CRYPTO			(IRQ_VIC_START+2) -#define IRQ_OWM				(IRQ_VIC_START+3) -#define IRQ_MTU0			(IRQ_VIC_START+4) -#define IRQ_MTU1			(IRQ_VIC_START+5) -#define IRQ_GPIO0			(IRQ_VIC_START+6) -#define IRQ_GPIO1			(IRQ_VIC_START+7) -#define IRQ_GPIO2			(IRQ_VIC_START+8) -#define IRQ_GPIO3			(IRQ_VIC_START+9) -#define IRQ_RTC_RTT			(IRQ_VIC_START+10) -#define IRQ_SSP				(IRQ_VIC_START+11) -#define IRQ_UART0			(IRQ_VIC_START+12) -#define IRQ_DMA1			(IRQ_VIC_START+13) -#define IRQ_CLCD_MDIF			(IRQ_VIC_START+14) -#define IRQ_DMA0			(IRQ_VIC_START+15) -#define IRQ_PWRFAIL			(IRQ_VIC_START+16) -#define IRQ_UART1			(IRQ_VIC_START+17) -#define IRQ_FIRDA			(IRQ_VIC_START+18) -#define IRQ_MSP0			(IRQ_VIC_START+19) -#define IRQ_I2C0			(IRQ_VIC_START+20) -#define IRQ_I2C1			(IRQ_VIC_START+21) -#define IRQ_SDMMC			(IRQ_VIC_START+22) -#define IRQ_USBOTG			(IRQ_VIC_START+23) -#define IRQ_SVA_IT0			(IRQ_VIC_START+24) -#define IRQ_SVA_IT1			(IRQ_VIC_START+25) -#define IRQ_SAA_IT0			(IRQ_VIC_START+26) -#define IRQ_SAA_IT1			(IRQ_VIC_START+27) -#define IRQ_UART2			(IRQ_VIC_START+28) -#define IRQ_MSP2			(IRQ_VIC_START+29) -#define IRQ_L2CC			(IRQ_VIC_START+30) -#define IRQ_HPI				(IRQ_VIC_START+31) -#define IRQ_SKE				(IRQ_VIC_START+32) -#define IRQ_KP				(IRQ_VIC_START+33) -#define IRQ_MEMST			(IRQ_VIC_START+34) -#define IRQ_SGA_IT			(IRQ_VIC_START+35) -#define IRQ_USBM			(IRQ_VIC_START+36) -#define IRQ_MSP1			(IRQ_VIC_START+37) - -#define NOMADIK_GPIO_OFFSET		(IRQ_VIC_START+64) - -/* After chip-specific IRQ numbers we have the GPIO ones */ -#define NOMADIK_NR_GPIO			128 /* last 4 not wired to pins */ -#define NOMADIK_GPIO_TO_IRQ(gpio)	((gpio) + NOMADIK_GPIO_OFFSET) -#define NOMADIK_IRQ_TO_GPIO(irq)	((irq) - NOMADIK_GPIO_OFFSET) -#define NOMADIK_NR_IRQS			NOMADIK_GPIO_TO_IRQ(NOMADIK_NR_GPIO) - -/* Following two are used by entry_macro.S, to access our dual-vic */ -#define VIC_REG_IRQSR0		0 -#define VIC_REG_IRQSR1		0x20 - -#endif /* __ASM_ARCH_IRQS_H */ diff --git a/arch/arm/mach-nomadik/include/mach/timex.h b/arch/arm/mach-nomadik/include/mach/timex.h deleted file mode 100644 index 318b8896ce9..00000000000 --- a/arch/arm/mach-nomadik/include/mach/timex.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __ASM_ARCH_TIMEX_H -#define __ASM_ARCH_TIMEX_H - -#define CLOCK_TICK_RATE         2400000 - -#endif diff --git a/arch/arm/mach-nomadik/include/mach/uncompress.h b/arch/arm/mach-nomadik/include/mach/uncompress.h deleted file mode 100644 index 106fccca202..00000000000 --- a/arch/arm/mach-nomadik/include/mach/uncompress.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - *  Copyright (C) 2008 STMicroelectronics - * - * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ - -#ifndef __ASM_ARCH_UNCOMPRESS_H -#define __ASM_ARCH_UNCOMPRESS_H - -#include <asm/setup.h> -#include <asm/io.h> - -/* we need the constants in amba/serial.h, but it refers to amba_device */ -struct amba_device; -#include <linux/amba/serial.h> - -#define NOMADIK_UART_DR		(void __iomem *)0x101FB000 -#define NOMADIK_UART_LCRH	(void __iomem *)0x101FB02c -#define NOMADIK_UART_CR		(void __iomem *)0x101FB030 -#define NOMADIK_UART_FR		(void __iomem *)0x101FB018 - -static void putc(const char c) -{ -	/* Do nothing if the UART is not enabled. */ -	if (!(readb(NOMADIK_UART_CR) & UART01x_CR_UARTEN)) -		return; - -	if (c == '\n') -		putc('\r'); - -	while (readb(NOMADIK_UART_FR) & UART01x_FR_TXFF) -		barrier(); -	writeb(c, NOMADIK_UART_DR); -} - -static void flush(void) -{ -	if (!(readb(NOMADIK_UART_CR) & UART01x_CR_UARTEN)) -		return; -	while (readb(NOMADIK_UART_FR) & UART01x_FR_BUSY) -		barrier(); -} - -static inline void arch_decomp_setup(void) -{ -} - -#endif /* __ASM_ARCH_UNCOMPRESS_H */ diff --git a/arch/arm/mach-omap1/clock_data.c b/arch/arm/mach-omap1/clock_data.c index cb7c6ae2e3f..6c4f766365a 100644 --- a/arch/arm/mach-omap1/clock_data.c +++ b/arch/arm/mach-omap1/clock_data.c @@ -543,15 +543,6 @@ static struct clk usb_dc_ck = {  	/* Direct from ULPD, no parent */  	.rate		= 48000000,  	.enable_reg	= OMAP1_IO_ADDRESS(SOFT_REQ_REG), -	.enable_bit	= USB_REQ_EN_SHIFT, -}; - -static struct clk usb_dc_ck7xx = { -	.name		= "usb_dc_ck", -	.ops		= &clkops_generic, -	/* Direct from ULPD, no parent */ -	.rate		= 48000000, -	.enable_reg	= OMAP1_IO_ADDRESS(SOFT_REQ_REG),  	.enable_bit	= SOFT_USB_OTG_DPLL_REQ_SHIFT,  }; @@ -727,8 +718,7 @@ static struct omap_clk omap_clks[] = {  	CLK(NULL,	"usb_clko",	&usb_clko,	CK_16XX | CK_1510 | CK_310),  	CLK(NULL,	"usb_hhc_ck",	&usb_hhc_ck1510, CK_1510 | CK_310),  	CLK(NULL,	"usb_hhc_ck",	&usb_hhc_ck16xx, CK_16XX), -	CLK(NULL,	"usb_dc_ck",	&usb_dc_ck,	CK_16XX), -	CLK(NULL,	"usb_dc_ck",	&usb_dc_ck7xx,	CK_7XX), +	CLK(NULL,	"usb_dc_ck",	&usb_dc_ck,	CK_16XX | CK_7XX),  	CLK(NULL,	"mclk",		&mclk_1510,	CK_1510 | CK_310),  	CLK(NULL,	"mclk",		&mclk_16xx,	CK_16XX),  	CLK(NULL,	"bclk",		&bclk_1510,	CK_1510 | CK_310), diff --git a/arch/arm/mach-omap1/dma.h b/arch/arm/mach-omap1/dma.h index da6345dab03..d05909c9671 100644 --- a/arch/arm/mach-omap1/dma.h +++ b/arch/arm/mach-omap1/dma.h @@ -21,21 +21,10 @@  /* DMA channels for omap1 */  #define OMAP_DMA_NO_DEVICE		0 -#define OMAP_DMA_MCSI1_TX		1 -#define OMAP_DMA_MCSI1_RX		2 -#define OMAP_DMA_I2C_RX			3 -#define OMAP_DMA_I2C_TX			4 -#define OMAP_DMA_EXT_NDMA_REQ		5 -#define OMAP_DMA_EXT_NDMA_REQ2		6 -#define OMAP_DMA_UWIRE_TX		7  #define OMAP_DMA_MCBSP1_TX		8  #define OMAP_DMA_MCBSP1_RX		9  #define OMAP_DMA_MCBSP3_TX		10  #define OMAP_DMA_MCBSP3_RX		11 -#define OMAP_DMA_UART1_TX		12 -#define OMAP_DMA_UART1_RX		13 -#define OMAP_DMA_UART2_TX		14 -#define OMAP_DMA_UART2_RX		15  #define OMAP_DMA_MCBSP2_TX		16  #define OMAP_DMA_MCBSP2_RX		17  #define OMAP_DMA_UART3_TX		18 @@ -43,41 +32,11 @@  #define OMAP_DMA_CAMERA_IF_RX		20  #define OMAP_DMA_MMC_TX			21  #define OMAP_DMA_MMC_RX			22 -#define OMAP_DMA_NAND			23 -#define OMAP_DMA_IRQ_LCD_LINE		24 -#define OMAP_DMA_MEMORY_STICK		25  #define OMAP_DMA_USB_W2FC_RX0		26 -#define OMAP_DMA_USB_W2FC_RX1		27 -#define OMAP_DMA_USB_W2FC_RX2		28  #define OMAP_DMA_USB_W2FC_TX0		29 -#define OMAP_DMA_USB_W2FC_TX1		30 -#define OMAP_DMA_USB_W2FC_TX2		31  /* These are only for 1610 */ -#define OMAP_DMA_CRYPTO_DES_IN		32 -#define OMAP_DMA_SPI_TX			33 -#define OMAP_DMA_SPI_RX			34 -#define OMAP_DMA_CRYPTO_HASH		35 -#define OMAP_DMA_CCP_ATTN		36 -#define OMAP_DMA_CCP_FIFO_NOT_EMPTY	37 -#define OMAP_DMA_CMT_APE_TX_CHAN_0	38 -#define OMAP_DMA_CMT_APE_RV_CHAN_0	39 -#define OMAP_DMA_CMT_APE_TX_CHAN_1	40 -#define OMAP_DMA_CMT_APE_RV_CHAN_1	41 -#define OMAP_DMA_CMT_APE_TX_CHAN_2	42 -#define OMAP_DMA_CMT_APE_RV_CHAN_2	43 -#define OMAP_DMA_CMT_APE_TX_CHAN_3	44 -#define OMAP_DMA_CMT_APE_RV_CHAN_3	45 -#define OMAP_DMA_CMT_APE_TX_CHAN_4	46 -#define OMAP_DMA_CMT_APE_RV_CHAN_4	47 -#define OMAP_DMA_CMT_APE_TX_CHAN_5	48 -#define OMAP_DMA_CMT_APE_RV_CHAN_5	49 -#define OMAP_DMA_CMT_APE_TX_CHAN_6	50 -#define OMAP_DMA_CMT_APE_RV_CHAN_6	51 -#define OMAP_DMA_CMT_APE_TX_CHAN_7	52 -#define OMAP_DMA_CMT_APE_RV_CHAN_7	53  #define OMAP_DMA_MMC2_TX		54  #define OMAP_DMA_MMC2_RX		55 -#define OMAP_DMA_CRYPTO_DES_OUT		56  #endif /* __OMAP1_DMA_CHANNEL_H */ diff --git a/arch/arm/mach-omap1/pm.c b/arch/arm/mach-omap1/pm.c index 7a7690ab6cb..dd712f10973 100644 --- a/arch/arm/mach-omap1/pm.c +++ b/arch/arm/mach-omap1/pm.c @@ -37,12 +37,14 @@  #include <linux/suspend.h>  #include <linux/sched.h> -#include <linux/proc_fs.h> +#include <linux/debugfs.h> +#include <linux/seq_file.h>  #include <linux/interrupt.h>  #include <linux/sysfs.h>  #include <linux/module.h>  #include <linux/io.h>  #include <linux/atomic.h> +#include <linux/cpu.h>  #include <asm/fncpy.h>  #include <asm/system_misc.h> @@ -422,23 +424,12 @@ void omap1_pm_suspend(void)  		omap_rev());  } -#if defined(DEBUG) && defined(CONFIG_PROC_FS) -static int g_read_completed; - +#ifdef CONFIG_DEBUG_FS  /*   * Read system PM registers for debugging   */ -static int omap_pm_read_proc( -	char *page_buffer, -	char **my_first_byte, -	off_t virtual_start, -	int length, -	int *eof, -	void *data) +static int omap_pm_debug_show(struct seq_file *m, void *v)  { -	int my_buffer_offset = 0; -	char * const my_base = page_buffer; -  	ARM_SAVE(ARM_CKCTL);  	ARM_SAVE(ARM_IDLECT1);  	ARM_SAVE(ARM_IDLECT2); @@ -479,10 +470,7 @@ static int omap_pm_read_proc(  		MPUI1610_SAVE(EMIFS_CONFIG);  	} -	if (virtual_start == 0) { -		g_read_completed = 0; - -		my_buffer_offset += sprintf(my_base + my_buffer_offset, +	seq_printf(m,  		   "ARM_CKCTL_REG:            0x%-8x     \n"  		   "ARM_IDLECT1_REG:          0x%-8x     \n"  		   "ARM_IDLECT2_REG:          0x%-8x     \n" @@ -512,8 +500,8 @@ static int omap_pm_read_proc(  		   ULPD_SHOW(ULPD_STATUS_REQ),  		   ULPD_SHOW(ULPD_POWER_CTRL)); -		if (cpu_is_omap7xx()) { -			my_buffer_offset += sprintf(my_base + my_buffer_offset, +	if (cpu_is_omap7xx()) { +		seq_printf(m,  			   "MPUI7XX_CTRL_REG	     0x%-8x \n"  			   "MPUI7XX_DSP_STATUS_REG:      0x%-8x \n"  			   "MPUI7XX_DSP_BOOT_CONFIG_REG: 0x%-8x \n" @@ -526,8 +514,8 @@ static int omap_pm_read_proc(  			   MPUI7XX_SHOW(MPUI_DSP_API_CONFIG),  			   MPUI7XX_SHOW(EMIFF_SDRAM_CONFIG),  			   MPUI7XX_SHOW(EMIFS_CONFIG)); -		} else if (cpu_is_omap15xx()) { -			my_buffer_offset += sprintf(my_base + my_buffer_offset, +	} else if (cpu_is_omap15xx()) { +		seq_printf(m,  			   "MPUI1510_CTRL_REG             0x%-8x \n"  			   "MPUI1510_DSP_STATUS_REG:      0x%-8x \n"  			   "MPUI1510_DSP_BOOT_CONFIG_REG: 0x%-8x \n" @@ -540,8 +528,8 @@ static int omap_pm_read_proc(  			   MPUI1510_SHOW(MPUI_DSP_API_CONFIG),  			   MPUI1510_SHOW(EMIFF_SDRAM_CONFIG),  			   MPUI1510_SHOW(EMIFS_CONFIG)); -		} else if (cpu_is_omap16xx()) { -			my_buffer_offset += sprintf(my_base + my_buffer_offset, +	} else if (cpu_is_omap16xx()) { +		seq_printf(m,  			   "MPUI1610_CTRL_REG             0x%-8x \n"  			   "MPUI1610_DSP_STATUS_REG:      0x%-8x \n"  			   "MPUI1610_DSP_BOOT_CONFIG_REG: 0x%-8x \n" @@ -554,28 +542,37 @@ static int omap_pm_read_proc(  			   MPUI1610_SHOW(MPUI_DSP_API_CONFIG),  			   MPUI1610_SHOW(EMIFF_SDRAM_CONFIG),  			   MPUI1610_SHOW(EMIFS_CONFIG)); -		} - -		g_read_completed++; -	} else if (g_read_completed >= 1) { -		 *eof = 1; -		 return 0;  	} -	g_read_completed++; -	*my_first_byte = page_buffer; -	return  my_buffer_offset; +	return 0;  } -static void omap_pm_init_proc(void) +static int omap_pm_debug_open(struct inode *inode, struct file *file)  { -	/* XXX Appears to leak memory */ -	create_proc_read_entry("driver/omap_pm", -			       S_IWUSR | S_IRUGO, NULL, -			       omap_pm_read_proc, NULL); +	return single_open(file, omap_pm_debug_show, +				&inode->i_private);  } -#endif /* DEBUG && CONFIG_PROC_FS */ +static const struct file_operations omap_pm_debug_fops = { +	.open		= omap_pm_debug_open, +	.read		= seq_read, +	.llseek		= seq_lseek, +	.release	= seq_release, +}; + +static void omap_pm_init_debugfs(void) +{ +	struct dentry *d; + +	d = debugfs_create_dir("pm_debug", NULL); +	if (!d) +		return; + +	(void) debugfs_create_file("omap_pm", S_IWUSR | S_IRUGO, +					d, NULL, &omap_pm_debug_fops); +} + +#endif /* CONFIG_DEBUG_FS */  /*   *	omap_pm_prepare - Do preliminary suspend work. @@ -584,8 +581,7 @@ static void omap_pm_init_proc(void)  static int omap_pm_prepare(void)  {  	/* We cannot sleep in idle until we have resumed */ -	disable_hlt(); - +	cpu_idle_poll_ctrl(true);  	return 0;  } @@ -621,7 +617,7 @@ static int omap_pm_enter(suspend_state_t state)  static void omap_pm_finish(void)  { -	enable_hlt(); +	cpu_idle_poll_ctrl(false);  } @@ -701,8 +697,8 @@ static int __init omap_pm_init(void)  	suspend_set_ops(&omap_pm_ops); -#if defined(DEBUG) && defined(CONFIG_PROC_FS) -	omap_pm_init_proc(); +#ifdef CONFIG_DEBUG_FS +	omap_pm_init_debugfs();  #endif  #ifdef CONFIG_OMAP_32K_TIMER diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index b9c0ed3f648..857b1f097fd 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@ -15,6 +15,7 @@ config ARCH_OMAP2PLUS  	select OMAP_DM_TIMER  	select PINCTRL  	select PROC_DEVICETREE if PROC_FS +	select SOC_BUS  	select SPARSE_IRQ  	select USE_OF  	help @@ -55,6 +56,7 @@ config SOC_HAS_REALTIME_COUNTER  config ARCH_OMAP2  	bool "TI OMAP2"  	depends on ARCH_OMAP2PLUS +	depends on ARCH_MULTI_V6  	default y  	select CPU_V6  	select MULTI_IRQ_HANDLER @@ -64,6 +66,7 @@ config ARCH_OMAP2  config ARCH_OMAP3  	bool "TI OMAP3"  	depends on ARCH_OMAP2PLUS +	depends on ARCH_MULTI_V7  	default y  	select ARCH_HAS_OPP  	select ARM_CPU_SUSPEND if PM @@ -80,6 +83,7 @@ config ARCH_OMAP4  	bool "TI OMAP4"  	default y  	depends on ARCH_OMAP2PLUS +	depends on ARCH_MULTI_V7  	select ARCH_HAS_OPP  	select ARCH_NEEDS_CPU_IDLE_COUPLED if SMP  	select ARM_CPU_SUSPEND if PM @@ -87,6 +91,8 @@ config ARCH_OMAP4  	select ARM_GIC  	select CACHE_L2X0  	select CPU_V7 +	select HAVE_ARM_SCU if SMP +	select HAVE_ARM_TWD if LOCAL_TIMERS  	select HAVE_SMP  	select LOCAL_TIMERS if SMP  	select OMAP_INTERCONNECT @@ -96,9 +102,12 @@ config ARCH_OMAP4  	select PM_RUNTIME if CPU_IDLE  	select USB_ARCH_HAS_EHCI if USB_SUPPORT  	select COMMON_CLK +	select ARM_ERRATA_754322 +	select ARM_ERRATA_775420  config SOC_OMAP5  	bool "TI OMAP5" +	depends on ARCH_MULTI_V7  	select ARM_CPU_SUSPEND if PM  	select ARM_GIC  	select CPU_V7 @@ -135,6 +144,7 @@ config SOC_TI81XX  config SOC_AM33XX  	bool "AM33XX support" +	depends on ARCH_MULTI_V7  	default y  	select ARM_CPU_SUSPEND if PM  	select CPU_V7 diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c index cb0596b631c..5b86423c89f 100644 --- a/arch/arm/mach-omap2/board-2430sdp.c +++ b/arch/arm/mach-omap2/board-2430sdp.c @@ -38,7 +38,7 @@  #include "gpmc-smc91x.h"  #include <video/omapdss.h> -#include <video/omap-panel-generic-dpi.h> +#include <video/omap-panel-data.h>  #include "mux.h"  #include "hsmmc.h" diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c index 7eb9651dd0f..a4d4664894e 100644 --- a/arch/arm/mach-omap2/board-3430sdp.c +++ b/arch/arm/mach-omap2/board-3430sdp.c @@ -35,7 +35,7 @@  #include "common.h"  #include <linux/omap-dma.h>  #include <video/omapdss.h> -#include <video/omap-panel-tfp410.h> +#include <video/omap-panel-data.h>  #include "gpmc.h"  #include "gpmc-smc91x.h" diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c index 191f9762ba6..c29d2e74368 100644 --- a/arch/arm/mach-omap2/board-am3517evm.c +++ b/arch/arm/mach-omap2/board-am3517evm.c @@ -35,8 +35,7 @@  #include "common.h"  #include <video/omapdss.h> -#include <video/omap-panel-generic-dpi.h> -#include <video/omap-panel-tfp410.h> +#include <video/omap-panel-data.h>  #include "am35xx-emac.h"  #include "mux.h" diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c index 7fda3f5f8a7..e0ed8c07fc5 100644 --- a/arch/arm/mach-omap2/board-cm-t35.c +++ b/arch/arm/mach-omap2/board-cm-t35.c @@ -41,8 +41,7 @@  #include <linux/platform_data/mtd-nand-omap2.h>  #include <video/omapdss.h> -#include <video/omap-panel-generic-dpi.h> -#include <video/omap-panel-tfp410.h> +#include <video/omap-panel-data.h>  #include <linux/platform_data/spi-omap2-mcspi.h>  #include "common.h" diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index 42fbf1ef12a..e44b804f75a 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c @@ -43,8 +43,7 @@  #include "gpmc.h"  #include <linux/platform_data/mtd-nand-omap2.h>  #include <video/omapdss.h> -#include <video/omap-panel-generic-dpi.h> -#include <video/omap-panel-tfp410.h> +#include <video/omap-panel-data.h>  #include <linux/platform_data/spi-omap2-mcspi.h>  #include <linux/input/matrix_keypad.h> diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c index 5b4ec51c385..69c0acf5aa6 100644 --- a/arch/arm/mach-omap2/board-h4.c +++ b/arch/arm/mach-omap2/board-h4.c @@ -34,7 +34,7 @@  #include <asm/mach/map.h>  #include <video/omapdss.h> -#include <video/omap-panel-generic-dpi.h> +#include <video/omap-panel-data.h>  #include "common.h"  #include "mux.h" diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c index 95ccec0eeab..b54562d1235 100644 --- a/arch/arm/mach-omap2/board-igep0020.c +++ b/arch/arm/mach-omap2/board-igep0020.c @@ -31,7 +31,7 @@  #include <asm/mach/arch.h>  #include <video/omapdss.h> -#include <video/omap-panel-tfp410.h> +#include <video/omap-panel-data.h>  #include <linux/platform_data/mtd-onenand-omap2.h>  #include "common.h" diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c index b12fe966a7b..8a8e505a0e9 100644 --- a/arch/arm/mach-omap2/board-ldp.c +++ b/arch/arm/mach-omap2/board-ldp.c @@ -41,7 +41,7 @@  #include "gpmc-smsc911x.h"  #include <video/omapdss.h> -#include <video/omap-panel-generic-dpi.h> +#include <video/omap-panel-data.h>  #include "board-flash.h"  #include "mux.h" diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 6955a428f53..6de78605c0a 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -44,7 +44,7 @@  #include <asm/mach/flash.h>  #include <video/omapdss.h> -#include <video/omap-panel-tfp410.h> +#include <video/omap-panel-data.h>  #include <linux/platform_data/mtd-nand-omap2.h>  #include "common.h" diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c index 2de92facc8a..4f1bbc3cc29 100644 --- a/arch/arm/mach-omap2/board-omap3evm.c +++ b/arch/arm/mach-omap2/board-omap3evm.c @@ -51,7 +51,7 @@  #include "common.h"  #include <linux/platform_data/spi-omap2-mcspi.h>  #include <video/omapdss.h> -#include <video/omap-panel-tfp410.h> +#include <video/omap-panel-data.h>  #include "soc.h"  #include "mux.h" diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c index bf095648989..8afbba0923d 100644 --- a/arch/arm/mach-omap2/board-omap3stalker.c +++ b/arch/arm/mach-omap2/board-omap3stalker.c @@ -44,8 +44,7 @@  #include "gpmc.h"  #include <linux/platform_data/mtd-nand-omap2.h>  #include <video/omapdss.h> -#include <video/omap-panel-generic-dpi.h> -#include <video/omap-panel-tfp410.h> +#include <video/omap-panel-data.h>  #include <linux/platform_data/spi-omap2-mcspi.h> diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c index ab79a4422bc..f9101407cd5 100644 --- a/arch/arm/mach-omap2/board-overo.c +++ b/arch/arm/mach-omap2/board-overo.c @@ -47,8 +47,7 @@  #include <asm/mach/map.h>  #include <video/omapdss.h> -#include <video/omap-panel-generic-dpi.h> -#include <video/omap-panel-tfp410.h> +#include <video/omap-panel-data.h>  #include "common.h"  #include "mux.h" diff --git a/arch/arm/mach-omap2/cclock2420_data.c b/arch/arm/mach-omap2/cclock2420_data.c index 0f0a97c1fcc..3662f4d4c8e 100644 --- a/arch/arm/mach-omap2/cclock2420_data.c +++ b/arch/arm/mach-omap2/cclock2420_data.c @@ -1739,153 +1739,153 @@ DEFINE_STRUCT_CLK(wdt4_ick, aes_ick_parent_names, aes_ick_ops);  static struct omap_clk omap2420_clks[] = {  	/* external root sources */ -	CLK(NULL,	"func_32k_ck",	&func_32k_ck,	CK_242X), -	CLK(NULL,	"secure_32k_ck", &secure_32k_ck, CK_242X), -	CLK(NULL,	"osc_ck",	&osc_ck,	CK_242X), -	CLK(NULL,	"sys_ck",	&sys_ck,	CK_242X), -	CLK(NULL,	"alt_ck",	&alt_ck,	CK_242X), -	CLK(NULL,	"mcbsp_clks",	&mcbsp_clks,	CK_242X), +	CLK(NULL,	"func_32k_ck",	&func_32k_ck), +	CLK(NULL,	"secure_32k_ck", &secure_32k_ck), +	CLK(NULL,	"osc_ck",	&osc_ck), +	CLK(NULL,	"sys_ck",	&sys_ck), +	CLK(NULL,	"alt_ck",	&alt_ck), +	CLK(NULL,	"mcbsp_clks",	&mcbsp_clks),  	/* internal analog sources */ -	CLK(NULL,	"dpll_ck",	&dpll_ck,	CK_242X), -	CLK(NULL,	"apll96_ck",	&apll96_ck,	CK_242X), -	CLK(NULL,	"apll54_ck",	&apll54_ck,	CK_242X), +	CLK(NULL,	"dpll_ck",	&dpll_ck), +	CLK(NULL,	"apll96_ck",	&apll96_ck), +	CLK(NULL,	"apll54_ck",	&apll54_ck),  	/* internal prcm root sources */ -	CLK(NULL,	"func_54m_ck",	&func_54m_ck,	CK_242X), -	CLK(NULL,	"core_ck",	&core_ck,	CK_242X), -	CLK(NULL,	"func_96m_ck",	&func_96m_ck,	CK_242X), -	CLK(NULL,	"func_48m_ck",	&func_48m_ck,	CK_242X), -	CLK(NULL,	"func_12m_ck",	&func_12m_ck,	CK_242X), -	CLK(NULL,	"sys_clkout_src", &sys_clkout_src, CK_242X), -	CLK(NULL,	"sys_clkout",	&sys_clkout,	CK_242X), -	CLK(NULL,	"sys_clkout2_src", &sys_clkout2_src, CK_242X), -	CLK(NULL,	"sys_clkout2",	&sys_clkout2,	CK_242X), -	CLK(NULL,	"emul_ck",	&emul_ck,	CK_242X), +	CLK(NULL,	"func_54m_ck",	&func_54m_ck), +	CLK(NULL,	"core_ck",	&core_ck), +	CLK(NULL,	"func_96m_ck",	&func_96m_ck), +	CLK(NULL,	"func_48m_ck",	&func_48m_ck), +	CLK(NULL,	"func_12m_ck",	&func_12m_ck), +	CLK(NULL,	"sys_clkout_src", &sys_clkout_src), +	CLK(NULL,	"sys_clkout",	&sys_clkout), +	CLK(NULL,	"sys_clkout2_src", &sys_clkout2_src), +	CLK(NULL,	"sys_clkout2",	&sys_clkout2), +	CLK(NULL,	"emul_ck",	&emul_ck),  	/* mpu domain clocks */ -	CLK(NULL,	"mpu_ck",	&mpu_ck,	CK_242X), +	CLK(NULL,	"mpu_ck",	&mpu_ck),  	/* dsp domain clocks */ -	CLK(NULL,	"dsp_fck",	&dsp_fck,	CK_242X), -	CLK(NULL,	"dsp_ick",	&dsp_ick,	CK_242X), -	CLK(NULL,	"iva1_ifck",	&iva1_ifck,	CK_242X), -	CLK(NULL,	"iva1_mpu_int_ifck", &iva1_mpu_int_ifck, CK_242X), +	CLK(NULL,	"dsp_fck",	&dsp_fck), +	CLK(NULL,	"dsp_ick",	&dsp_ick), +	CLK(NULL,	"iva1_ifck",	&iva1_ifck), +	CLK(NULL,	"iva1_mpu_int_ifck", &iva1_mpu_int_ifck),  	/* GFX domain clocks */ -	CLK(NULL,	"gfx_3d_fck",	&gfx_3d_fck,	CK_242X), -	CLK(NULL,	"gfx_2d_fck",	&gfx_2d_fck,	CK_242X), -	CLK(NULL,	"gfx_ick",	&gfx_ick,	CK_242X), +	CLK(NULL,	"gfx_3d_fck",	&gfx_3d_fck), +	CLK(NULL,	"gfx_2d_fck",	&gfx_2d_fck), +	CLK(NULL,	"gfx_ick",	&gfx_ick),  	/* DSS domain clocks */ -	CLK("omapdss_dss",	"ick",		&dss_ick,	CK_242X), -	CLK(NULL,	"dss_ick",		&dss_ick,	CK_242X), -	CLK(NULL,	"dss1_fck",		&dss1_fck,	CK_242X), -	CLK(NULL,	"dss2_fck",	&dss2_fck,	CK_242X), -	CLK(NULL,	"dss_54m_fck",	&dss_54m_fck,	CK_242X), +	CLK("omapdss_dss",	"ick",		&dss_ick), +	CLK(NULL,	"dss_ick",		&dss_ick), +	CLK(NULL,	"dss1_fck",		&dss1_fck), +	CLK(NULL,	"dss2_fck",	&dss2_fck), +	CLK(NULL,	"dss_54m_fck",	&dss_54m_fck),  	/* L3 domain clocks */ -	CLK(NULL,	"core_l3_ck",	&core_l3_ck,	CK_242X), -	CLK(NULL,	"ssi_fck",	&ssi_ssr_sst_fck, CK_242X), -	CLK(NULL,	"usb_l4_ick",	&usb_l4_ick,	CK_242X), +	CLK(NULL,	"core_l3_ck",	&core_l3_ck), +	CLK(NULL,	"ssi_fck",	&ssi_ssr_sst_fck), +	CLK(NULL,	"usb_l4_ick",	&usb_l4_ick),  	/* L4 domain clocks */ -	CLK(NULL,	"l4_ck",	&l4_ck,		CK_242X), -	CLK(NULL,	"ssi_l4_ick",	&ssi_l4_ick,	CK_242X), +	CLK(NULL,	"l4_ck",	&l4_ck), +	CLK(NULL,	"ssi_l4_ick",	&ssi_l4_ick),  	/* virtual meta-group clock */ -	CLK(NULL,	"virt_prcm_set", &virt_prcm_set, CK_242X), +	CLK(NULL,	"virt_prcm_set", &virt_prcm_set),  	/* general l4 interface ck, multi-parent functional clk */ -	CLK(NULL,	"gpt1_ick",	&gpt1_ick,	CK_242X), -	CLK(NULL,	"gpt1_fck",	&gpt1_fck,	CK_242X), -	CLK(NULL,	"gpt2_ick",	&gpt2_ick,	CK_242X), -	CLK(NULL,	"gpt2_fck",	&gpt2_fck,	CK_242X), -	CLK(NULL,	"gpt3_ick",	&gpt3_ick,	CK_242X), -	CLK(NULL,	"gpt3_fck",	&gpt3_fck,	CK_242X), -	CLK(NULL,	"gpt4_ick",	&gpt4_ick,	CK_242X), -	CLK(NULL,	"gpt4_fck",	&gpt4_fck,	CK_242X), -	CLK(NULL,	"gpt5_ick",	&gpt5_ick,	CK_242X), -	CLK(NULL,	"gpt5_fck",	&gpt5_fck,	CK_242X), -	CLK(NULL,	"gpt6_ick",	&gpt6_ick,	CK_242X), -	CLK(NULL,	"gpt6_fck",	&gpt6_fck,	CK_242X), -	CLK(NULL,	"gpt7_ick",	&gpt7_ick,	CK_242X), -	CLK(NULL,	"gpt7_fck",	&gpt7_fck,	CK_242X), -	CLK(NULL,	"gpt8_ick",	&gpt8_ick,	CK_242X), -	CLK(NULL,	"gpt8_fck",	&gpt8_fck,	CK_242X), -	CLK(NULL,	"gpt9_ick",	&gpt9_ick,	CK_242X), -	CLK(NULL,	"gpt9_fck",	&gpt9_fck,	CK_242X), -	CLK(NULL,	"gpt10_ick",	&gpt10_ick,	CK_242X), -	CLK(NULL,	"gpt10_fck",	&gpt10_fck,	CK_242X), -	CLK(NULL,	"gpt11_ick",	&gpt11_ick,	CK_242X), -	CLK(NULL,	"gpt11_fck",	&gpt11_fck,	CK_242X), -	CLK(NULL,	"gpt12_ick",	&gpt12_ick,	CK_242X), -	CLK(NULL,	"gpt12_fck",	&gpt12_fck,	CK_242X), -	CLK("omap-mcbsp.1", "ick",	&mcbsp1_ick,	CK_242X), -	CLK(NULL,	"mcbsp1_ick",	&mcbsp1_ick,	CK_242X), -	CLK(NULL,	"mcbsp1_fck",	&mcbsp1_fck,	CK_242X), -	CLK("omap-mcbsp.2", "ick",	&mcbsp2_ick,	CK_242X), -	CLK(NULL,	"mcbsp2_ick",	&mcbsp2_ick,	CK_242X), -	CLK(NULL,	"mcbsp2_fck",	&mcbsp2_fck,	CK_242X), -	CLK("omap2_mcspi.1", "ick",	&mcspi1_ick,	CK_242X), -	CLK(NULL,	"mcspi1_ick",	&mcspi1_ick,	CK_242X), -	CLK(NULL,	"mcspi1_fck",	&mcspi1_fck,	CK_242X), -	CLK("omap2_mcspi.2", "ick",	&mcspi2_ick,	CK_242X), -	CLK(NULL,	"mcspi2_ick",	&mcspi2_ick,	CK_242X), -	CLK(NULL,	"mcspi2_fck",	&mcspi2_fck,	CK_242X), -	CLK(NULL,	"uart1_ick",	&uart1_ick,	CK_242X), -	CLK(NULL,	"uart1_fck",	&uart1_fck,	CK_242X), -	CLK(NULL,	"uart2_ick",	&uart2_ick,	CK_242X), -	CLK(NULL,	"uart2_fck",	&uart2_fck,	CK_242X), -	CLK(NULL,	"uart3_ick",	&uart3_ick,	CK_242X), -	CLK(NULL,	"uart3_fck",	&uart3_fck,	CK_242X), -	CLK(NULL,	"gpios_ick",	&gpios_ick,	CK_242X), -	CLK(NULL,	"gpios_fck",	&gpios_fck,	CK_242X), -	CLK("omap_wdt",	"ick",		&mpu_wdt_ick,	CK_242X), -	CLK(NULL,	"mpu_wdt_ick",		&mpu_wdt_ick,	CK_242X), -	CLK(NULL,	"mpu_wdt_fck",	&mpu_wdt_fck,	CK_242X), -	CLK(NULL,	"sync_32k_ick",	&sync_32k_ick,	CK_242X), -	CLK(NULL,	"wdt1_ick",	&wdt1_ick,	CK_242X), -	CLK(NULL,	"omapctrl_ick",	&omapctrl_ick,	CK_242X), -	CLK("omap24xxcam", "fck",	&cam_fck,	CK_242X), -	CLK(NULL,	"cam_fck",	&cam_fck,	CK_242X), -	CLK("omap24xxcam", "ick",	&cam_ick,	CK_242X), -	CLK(NULL,	"cam_ick",	&cam_ick,	CK_242X), -	CLK(NULL,	"mailboxes_ick", &mailboxes_ick,	CK_242X), -	CLK(NULL,	"wdt4_ick",	&wdt4_ick,	CK_242X), -	CLK(NULL,	"wdt4_fck",	&wdt4_fck,	CK_242X), -	CLK(NULL,	"wdt3_ick",	&wdt3_ick,	CK_242X), -	CLK(NULL,	"wdt3_fck",	&wdt3_fck,	CK_242X), -	CLK(NULL,	"mspro_ick",	&mspro_ick,	CK_242X), -	CLK(NULL,	"mspro_fck",	&mspro_fck,	CK_242X), -	CLK("mmci-omap.0", "ick",	&mmc_ick,	CK_242X), -	CLK(NULL,	"mmc_ick",	&mmc_ick,	CK_242X), -	CLK("mmci-omap.0", "fck",	&mmc_fck,	CK_242X), -	CLK(NULL,	"mmc_fck",	&mmc_fck,	CK_242X), -	CLK(NULL,	"fac_ick",	&fac_ick,	CK_242X), -	CLK(NULL,	"fac_fck",	&fac_fck,	CK_242X), -	CLK(NULL,	"eac_ick",	&eac_ick,	CK_242X), -	CLK(NULL,	"eac_fck",	&eac_fck,	CK_242X), -	CLK("omap_hdq.0", "ick",	&hdq_ick,	CK_242X), -	CLK(NULL,	"hdq_ick",	&hdq_ick,	CK_242X), -	CLK("omap_hdq.0", "fck",	&hdq_fck,	CK_242X), -	CLK(NULL,	"hdq_fck",	&hdq_fck,	CK_242X), -	CLK("omap_i2c.1", "ick",	&i2c1_ick,	CK_242X), -	CLK(NULL,	"i2c1_ick",	&i2c1_ick,	CK_242X), -	CLK(NULL,	"i2c1_fck",	&i2c1_fck,	CK_242X), -	CLK("omap_i2c.2", "ick",	&i2c2_ick,	CK_242X), -	CLK(NULL,	"i2c2_ick",	&i2c2_ick,	CK_242X), -	CLK(NULL,	"i2c2_fck",	&i2c2_fck,	CK_242X), -	CLK(NULL,	"gpmc_fck",	&gpmc_fck,	CK_242X), -	CLK(NULL,	"sdma_fck",	&sdma_fck,	CK_242X), -	CLK(NULL,	"sdma_ick",	&sdma_ick,	CK_242X), -	CLK(NULL,	"sdrc_ick",	&sdrc_ick,	CK_242X), -	CLK(NULL,	"vlynq_ick",	&vlynq_ick,	CK_242X), -	CLK(NULL,	"vlynq_fck",	&vlynq_fck,	CK_242X), -	CLK(NULL,	"des_ick",	&des_ick,	CK_242X), -	CLK("omap-sham",	"ick",	&sha_ick,	CK_242X), -	CLK(NULL,	"sha_ick",	&sha_ick,	CK_242X), -	CLK("omap_rng",	"ick",		&rng_ick,	CK_242X), -	CLK(NULL,	"rng_ick",		&rng_ick,	CK_242X), -	CLK("omap-aes",	"ick",	&aes_ick,	CK_242X), -	CLK(NULL,	"aes_ick",	&aes_ick,	CK_242X), -	CLK(NULL,	"pka_ick",	&pka_ick,	CK_242X), -	CLK(NULL,	"usb_fck",	&usb_fck,	CK_242X), -	CLK("musb-hdrc",	"fck",	&osc_ck,	CK_242X), -	CLK(NULL,	"timer_32k_ck",	&func_32k_ck,	CK_242X), -	CLK(NULL,	"timer_sys_ck",	&sys_ck,	CK_242X), -	CLK(NULL,	"timer_ext_ck",	&alt_ck,	CK_242X), -	CLK(NULL,	"cpufreq_ck",	&virt_prcm_set,	CK_242X), +	CLK(NULL,	"gpt1_ick",	&gpt1_ick), +	CLK(NULL,	"gpt1_fck",	&gpt1_fck), +	CLK(NULL,	"gpt2_ick",	&gpt2_ick), +	CLK(NULL,	"gpt2_fck",	&gpt2_fck), +	CLK(NULL,	"gpt3_ick",	&gpt3_ick), +	CLK(NULL,	"gpt3_fck",	&gpt3_fck), +	CLK(NULL,	"gpt4_ick",	&gpt4_ick), +	CLK(NULL,	"gpt4_fck",	&gpt4_fck), +	CLK(NULL,	"gpt5_ick",	&gpt5_ick), +	CLK(NULL,	"gpt5_fck",	&gpt5_fck), +	CLK(NULL,	"gpt6_ick",	&gpt6_ick), +	CLK(NULL,	"gpt6_fck",	&gpt6_fck), +	CLK(NULL,	"gpt7_ick",	&gpt7_ick), +	CLK(NULL,	"gpt7_fck",	&gpt7_fck), +	CLK(NULL,	"gpt8_ick",	&gpt8_ick), +	CLK(NULL,	"gpt8_fck",	&gpt8_fck), +	CLK(NULL,	"gpt9_ick",	&gpt9_ick), +	CLK(NULL,	"gpt9_fck",	&gpt9_fck), +	CLK(NULL,	"gpt10_ick",	&gpt10_ick), +	CLK(NULL,	"gpt10_fck",	&gpt10_fck), +	CLK(NULL,	"gpt11_ick",	&gpt11_ick), +	CLK(NULL,	"gpt11_fck",	&gpt11_fck), +	CLK(NULL,	"gpt12_ick",	&gpt12_ick), +	CLK(NULL,	"gpt12_fck",	&gpt12_fck), +	CLK("omap-mcbsp.1", "ick",	&mcbsp1_ick), +	CLK(NULL,	"mcbsp1_ick",	&mcbsp1_ick), +	CLK(NULL,	"mcbsp1_fck",	&mcbsp1_fck), +	CLK("omap-mcbsp.2", "ick",	&mcbsp2_ick), +	CLK(NULL,	"mcbsp2_ick",	&mcbsp2_ick), +	CLK(NULL,	"mcbsp2_fck",	&mcbsp2_fck), +	CLK("omap2_mcspi.1", "ick",	&mcspi1_ick), +	CLK(NULL,	"mcspi1_ick",	&mcspi1_ick), +	CLK(NULL,	"mcspi1_fck",	&mcspi1_fck), +	CLK("omap2_mcspi.2", "ick",	&mcspi2_ick), +	CLK(NULL,	"mcspi2_ick",	&mcspi2_ick), +	CLK(NULL,	"mcspi2_fck",	&mcspi2_fck), +	CLK(NULL,	"uart1_ick",	&uart1_ick), +	CLK(NULL,	"uart1_fck",	&uart1_fck), +	CLK(NULL,	"uart2_ick",	&uart2_ick), +	CLK(NULL,	"uart2_fck",	&uart2_fck), +	CLK(NULL,	"uart3_ick",	&uart3_ick), +	CLK(NULL,	"uart3_fck",	&uart3_fck), +	CLK(NULL,	"gpios_ick",	&gpios_ick), +	CLK(NULL,	"gpios_fck",	&gpios_fck), +	CLK("omap_wdt",	"ick",		&mpu_wdt_ick), +	CLK(NULL,	"mpu_wdt_ick",		&mpu_wdt_ick), +	CLK(NULL,	"mpu_wdt_fck",	&mpu_wdt_fck), +	CLK(NULL,	"sync_32k_ick",	&sync_32k_ick), +	CLK(NULL,	"wdt1_ick",	&wdt1_ick), +	CLK(NULL,	"omapctrl_ick",	&omapctrl_ick), +	CLK("omap24xxcam", "fck",	&cam_fck), +	CLK(NULL,	"cam_fck",	&cam_fck), +	CLK("omap24xxcam", "ick",	&cam_ick), +	CLK(NULL,	"cam_ick",	&cam_ick), +	CLK(NULL,	"mailboxes_ick", &mailboxes_ick), +	CLK(NULL,	"wdt4_ick",	&wdt4_ick), +	CLK(NULL,	"wdt4_fck",	&wdt4_fck), +	CLK(NULL,	"wdt3_ick",	&wdt3_ick), +	CLK(NULL,	"wdt3_fck",	&wdt3_fck), +	CLK(NULL,	"mspro_ick",	&mspro_ick), +	CLK(NULL,	"mspro_fck",	&mspro_fck), +	CLK("mmci-omap.0", "ick",	&mmc_ick), +	CLK(NULL,	"mmc_ick",	&mmc_ick), +	CLK("mmci-omap.0", "fck",	&mmc_fck), +	CLK(NULL,	"mmc_fck",	&mmc_fck), +	CLK(NULL,	"fac_ick",	&fac_ick), +	CLK(NULL,	"fac_fck",	&fac_fck), +	CLK(NULL,	"eac_ick",	&eac_ick), +	CLK(NULL,	"eac_fck",	&eac_fck), +	CLK("omap_hdq.0", "ick",	&hdq_ick), +	CLK(NULL,	"hdq_ick",	&hdq_ick), +	CLK("omap_hdq.0", "fck",	&hdq_fck), +	CLK(NULL,	"hdq_fck",	&hdq_fck), +	CLK("omap_i2c.1", "ick",	&i2c1_ick), +	CLK(NULL,	"i2c1_ick",	&i2c1_ick), +	CLK(NULL,	"i2c1_fck",	&i2c1_fck), +	CLK("omap_i2c.2", "ick",	&i2c2_ick), +	CLK(NULL,	"i2c2_ick",	&i2c2_ick), +	CLK(NULL,	"i2c2_fck",	&i2c2_fck), +	CLK(NULL,	"gpmc_fck",	&gpmc_fck), +	CLK(NULL,	"sdma_fck",	&sdma_fck), +	CLK(NULL,	"sdma_ick",	&sdma_ick), +	CLK(NULL,	"sdrc_ick",	&sdrc_ick), +	CLK(NULL,	"vlynq_ick",	&vlynq_ick), +	CLK(NULL,	"vlynq_fck",	&vlynq_fck), +	CLK(NULL,	"des_ick",	&des_ick), +	CLK("omap-sham",	"ick",	&sha_ick), +	CLK(NULL,	"sha_ick",	&sha_ick), +	CLK("omap_rng",	"ick",		&rng_ick), +	CLK(NULL,	"rng_ick",		&rng_ick), +	CLK("omap-aes",	"ick",	&aes_ick), +	CLK(NULL,	"aes_ick",	&aes_ick), +	CLK(NULL,	"pka_ick",	&pka_ick), +	CLK(NULL,	"usb_fck",	&usb_fck), +	CLK("musb-hdrc",	"fck",	&osc_ck), +	CLK(NULL,	"timer_32k_ck",	&func_32k_ck), +	CLK(NULL,	"timer_sys_ck",	&sys_ck), +	CLK(NULL,	"timer_ext_ck",	&alt_ck), +	CLK(NULL,	"cpufreq_ck",	&virt_prcm_set),  }; @@ -1904,8 +1904,6 @@ static const char *enable_init_clks[] = {  int __init omap2420_clk_init(void)  { -	struct omap_clk *c; -  	prcm_clksrc_ctrl = OMAP2420_PRCM_CLKSRC_CTRL;  	cpu_mask = RATE_IN_242X;  	rate_table = omap2420_rate_table; @@ -1914,12 +1912,7 @@ int __init omap2420_clk_init(void)  	omap2xxx_clkt_vps_check_bootloader_rates(); -	for (c = omap2420_clks; c < omap2420_clks + ARRAY_SIZE(omap2420_clks); -	     c++) { -		clkdev_add(&c->lk); -		if (!__clk_init(NULL, c->lk.clk)) -			omap2_init_clk_hw_omap_clocks(c->lk.clk); -	} +	omap_clocks_register(omap2420_clks, ARRAY_SIZE(omap2420_clks));  	omap2xxx_clkt_vps_late_init(); diff --git a/arch/arm/mach-omap2/cclock2430_data.c b/arch/arm/mach-omap2/cclock2430_data.c index aed8f74ca07..5e4b037bb24 100644 --- a/arch/arm/mach-omap2/cclock2430_data.c +++ b/arch/arm/mach-omap2/cclock2430_data.c @@ -1840,168 +1840,170 @@ DEFINE_STRUCT_CLK(wdt4_ick, aes_ick_parent_names, aes_ick_ops);  static struct omap_clk omap2430_clks[] = {  	/* external root sources */ -	CLK(NULL,	"func_32k_ck",	&func_32k_ck,	CK_243X), -	CLK(NULL,	"secure_32k_ck", &secure_32k_ck, CK_243X), -	CLK(NULL,	"osc_ck",	&osc_ck,	CK_243X), -	CLK("twl",	"fck",		&osc_ck,	CK_243X), -	CLK(NULL,	"sys_ck",	&sys_ck,	CK_243X), -	CLK(NULL,	"alt_ck",	&alt_ck,	CK_243X), -	CLK(NULL,	"mcbsp_clks",	&mcbsp_clks,	CK_243X), +	CLK(NULL,	"func_32k_ck",	&func_32k_ck), +	CLK(NULL,	"secure_32k_ck", &secure_32k_ck), +	CLK(NULL,	"osc_ck",	&osc_ck), +	CLK("twl",	"fck",		&osc_ck), +	CLK(NULL,	"sys_ck",	&sys_ck), +	CLK(NULL,	"alt_ck",	&alt_ck), +	CLK(NULL,	"mcbsp_clks",	&mcbsp_clks),  	/* internal analog sources */ -	CLK(NULL,	"dpll_ck",	&dpll_ck,	CK_243X), -	CLK(NULL,	"apll96_ck",	&apll96_ck,	CK_243X), -	CLK(NULL,	"apll54_ck",	&apll54_ck,	CK_243X), +	CLK(NULL,	"dpll_ck",	&dpll_ck), +	CLK(NULL,	"apll96_ck",	&apll96_ck), +	CLK(NULL,	"apll54_ck",	&apll54_ck),  	/* internal prcm root sources */ -	CLK(NULL,	"func_54m_ck",	&func_54m_ck,	CK_243X), -	CLK(NULL,	"core_ck",	&core_ck,	CK_243X), -	CLK(NULL,	"func_96m_ck",	&func_96m_ck,	CK_243X), -	CLK(NULL,	"func_48m_ck",	&func_48m_ck,	CK_243X), -	CLK(NULL,	"func_12m_ck",	&func_12m_ck,	CK_243X), -	CLK(NULL,	"sys_clkout_src", &sys_clkout_src, CK_243X), -	CLK(NULL,	"sys_clkout",	&sys_clkout,	CK_243X), -	CLK(NULL,	"emul_ck",	&emul_ck,	CK_243X), +	CLK(NULL,	"func_54m_ck",	&func_54m_ck), +	CLK(NULL,	"core_ck",	&core_ck), +	CLK(NULL,	"func_96m_ck",	&func_96m_ck), +	CLK(NULL,	"func_48m_ck",	&func_48m_ck), +	CLK(NULL,	"func_12m_ck",	&func_12m_ck), +	CLK(NULL,	"sys_clkout_src", &sys_clkout_src), +	CLK(NULL,	"sys_clkout",	&sys_clkout), +	CLK(NULL,	"emul_ck",	&emul_ck),  	/* mpu domain clocks */ -	CLK(NULL,	"mpu_ck",	&mpu_ck,	CK_243X), +	CLK(NULL,	"mpu_ck",	&mpu_ck),  	/* dsp domain clocks */ -	CLK(NULL,	"dsp_fck",	&dsp_fck,	CK_243X), -	CLK(NULL,	"iva2_1_ick",	&iva2_1_ick,	CK_243X), +	CLK(NULL,	"dsp_fck",	&dsp_fck), +	CLK(NULL,	"iva2_1_ick",	&iva2_1_ick),  	/* GFX domain clocks */ -	CLK(NULL,	"gfx_3d_fck",	&gfx_3d_fck,	CK_243X), -	CLK(NULL,	"gfx_2d_fck",	&gfx_2d_fck,	CK_243X), -	CLK(NULL,	"gfx_ick",	&gfx_ick,	CK_243X), +	CLK(NULL,	"gfx_3d_fck",	&gfx_3d_fck), +	CLK(NULL,	"gfx_2d_fck",	&gfx_2d_fck), +	CLK(NULL,	"gfx_ick",	&gfx_ick),  	/* Modem domain clocks */ -	CLK(NULL,	"mdm_ick",	&mdm_ick,	CK_243X), -	CLK(NULL,	"mdm_osc_ck",	&mdm_osc_ck,	CK_243X), +	CLK(NULL,	"mdm_ick",	&mdm_ick), +	CLK(NULL,	"mdm_osc_ck",	&mdm_osc_ck),  	/* DSS domain clocks */ -	CLK("omapdss_dss",	"ick",		&dss_ick,	CK_243X), -	CLK(NULL,	"dss_ick",		&dss_ick,	CK_243X), -	CLK(NULL,	"dss1_fck",		&dss1_fck,	CK_243X), -	CLK(NULL,	"dss2_fck",	&dss2_fck,	CK_243X), -	CLK(NULL,	"dss_54m_fck",	&dss_54m_fck,	CK_243X), +	CLK("omapdss_dss",	"ick",		&dss_ick), +	CLK(NULL,	"dss_ick",		&dss_ick), +	CLK(NULL,	"dss1_fck",		&dss1_fck), +	CLK(NULL,	"dss2_fck",	&dss2_fck), +	CLK(NULL,	"dss_54m_fck",	&dss_54m_fck),  	/* L3 domain clocks */ -	CLK(NULL,	"core_l3_ck",	&core_l3_ck,	CK_243X), -	CLK(NULL,	"ssi_fck",	&ssi_ssr_sst_fck, CK_243X), -	CLK(NULL,	"usb_l4_ick",	&usb_l4_ick,	CK_243X), +	CLK(NULL,	"core_l3_ck",	&core_l3_ck), +	CLK(NULL,	"ssi_fck",	&ssi_ssr_sst_fck), +	CLK(NULL,	"usb_l4_ick",	&usb_l4_ick),  	/* L4 domain clocks */ -	CLK(NULL,	"l4_ck",	&l4_ck,		CK_243X), -	CLK(NULL,	"ssi_l4_ick",	&ssi_l4_ick,	CK_243X), +	CLK(NULL,	"l4_ck",	&l4_ck), +	CLK(NULL,	"ssi_l4_ick",	&ssi_l4_ick),  	/* virtual meta-group clock */ -	CLK(NULL,	"virt_prcm_set", &virt_prcm_set, CK_243X), +	CLK(NULL,	"virt_prcm_set", &virt_prcm_set),  	/* general l4 interface ck, multi-parent functional clk */ -	CLK(NULL,	"gpt1_ick",	&gpt1_ick,	CK_243X), -	CLK(NULL,	"gpt1_fck",	&gpt1_fck,	CK_243X), -	CLK(NULL,	"gpt2_ick",	&gpt2_ick,	CK_243X), -	CLK(NULL,	"gpt2_fck",	&gpt2_fck,	CK_243X), -	CLK(NULL,	"gpt3_ick",	&gpt3_ick,	CK_243X), -	CLK(NULL,	"gpt3_fck",	&gpt3_fck,	CK_243X), -	CLK(NULL,	"gpt4_ick",	&gpt4_ick,	CK_243X), -	CLK(NULL,	"gpt4_fck",	&gpt4_fck,	CK_243X), -	CLK(NULL,	"gpt5_ick",	&gpt5_ick,	CK_243X), -	CLK(NULL,	"gpt5_fck",	&gpt5_fck,	CK_243X), -	CLK(NULL,	"gpt6_ick",	&gpt6_ick,	CK_243X), -	CLK(NULL,	"gpt6_fck",	&gpt6_fck,	CK_243X), -	CLK(NULL,	"gpt7_ick",	&gpt7_ick,	CK_243X), -	CLK(NULL,	"gpt7_fck",	&gpt7_fck,	CK_243X), -	CLK(NULL,	"gpt8_ick",	&gpt8_ick,	CK_243X), -	CLK(NULL,	"gpt8_fck",	&gpt8_fck,	CK_243X), -	CLK(NULL,	"gpt9_ick",	&gpt9_ick,	CK_243X), -	CLK(NULL,	"gpt9_fck",	&gpt9_fck,	CK_243X), -	CLK(NULL,	"gpt10_ick",	&gpt10_ick,	CK_243X), -	CLK(NULL,	"gpt10_fck",	&gpt10_fck,	CK_243X), -	CLK(NULL,	"gpt11_ick",	&gpt11_ick,	CK_243X), -	CLK(NULL,	"gpt11_fck",	&gpt11_fck,	CK_243X), -	CLK(NULL,	"gpt12_ick",	&gpt12_ick,	CK_243X), -	CLK(NULL,	"gpt12_fck",	&gpt12_fck,	CK_243X), -	CLK("omap-mcbsp.1", "ick",	&mcbsp1_ick,	CK_243X), -	CLK(NULL,	"mcbsp1_ick",	&mcbsp1_ick,	CK_243X), -	CLK(NULL,	"mcbsp1_fck",	&mcbsp1_fck,	CK_243X), -	CLK("omap-mcbsp.2", "ick",	&mcbsp2_ick,	CK_243X), -	CLK(NULL,	"mcbsp2_ick",	&mcbsp2_ick,	CK_243X), -	CLK(NULL,	"mcbsp2_fck",	&mcbsp2_fck,	CK_243X), -	CLK("omap-mcbsp.3", "ick",	&mcbsp3_ick,	CK_243X), -	CLK(NULL,	"mcbsp3_ick",	&mcbsp3_ick,	CK_243X), -	CLK(NULL,	"mcbsp3_fck",	&mcbsp3_fck,	CK_243X), -	CLK("omap-mcbsp.4", "ick",	&mcbsp4_ick,	CK_243X), -	CLK(NULL,	"mcbsp4_ick",	&mcbsp4_ick,	CK_243X), -	CLK(NULL,	"mcbsp4_fck",	&mcbsp4_fck,	CK_243X), -	CLK("omap-mcbsp.5", "ick",	&mcbsp5_ick,	CK_243X), -	CLK(NULL,	"mcbsp5_ick",	&mcbsp5_ick,	CK_243X), -	CLK(NULL,	"mcbsp5_fck",	&mcbsp5_fck,	CK_243X), -	CLK("omap2_mcspi.1", "ick",	&mcspi1_ick,	CK_243X), -	CLK(NULL,	"mcspi1_ick",	&mcspi1_ick,	CK_243X), -	CLK(NULL,	"mcspi1_fck",	&mcspi1_fck,	CK_243X), -	CLK("omap2_mcspi.2", "ick",	&mcspi2_ick,	CK_243X), -	CLK(NULL,	"mcspi2_ick",	&mcspi2_ick,	CK_243X), -	CLK(NULL,	"mcspi2_fck",	&mcspi2_fck,	CK_243X), -	CLK("omap2_mcspi.3", "ick",	&mcspi3_ick,	CK_243X), -	CLK(NULL,	"mcspi3_ick",	&mcspi3_ick,	CK_243X), -	CLK(NULL,	"mcspi3_fck",	&mcspi3_fck,	CK_243X), -	CLK(NULL,	"uart1_ick",	&uart1_ick,	CK_243X), -	CLK(NULL,	"uart1_fck",	&uart1_fck,	CK_243X), -	CLK(NULL,	"uart2_ick",	&uart2_ick,	CK_243X), -	CLK(NULL,	"uart2_fck",	&uart2_fck,	CK_243X), -	CLK(NULL,	"uart3_ick",	&uart3_ick,	CK_243X), -	CLK(NULL,	"uart3_fck",	&uart3_fck,	CK_243X), -	CLK(NULL,	"gpios_ick",	&gpios_ick,	CK_243X), -	CLK(NULL,	"gpios_fck",	&gpios_fck,	CK_243X), -	CLK("omap_wdt",	"ick",		&mpu_wdt_ick,	CK_243X), -	CLK(NULL,	"mpu_wdt_ick",	&mpu_wdt_ick,	CK_243X), -	CLK(NULL,	"mpu_wdt_fck",	&mpu_wdt_fck,	CK_243X), -	CLK(NULL,	"sync_32k_ick",	&sync_32k_ick,	CK_243X), -	CLK(NULL,	"wdt1_ick",	&wdt1_ick,	CK_243X), -	CLK(NULL,	"omapctrl_ick",	&omapctrl_ick,	CK_243X), -	CLK(NULL,	"icr_ick",	&icr_ick,	CK_243X), -	CLK("omap24xxcam", "fck",	&cam_fck,	CK_243X), -	CLK(NULL,	"cam_fck",	&cam_fck,	CK_243X), -	CLK("omap24xxcam", "ick",	&cam_ick,	CK_243X), -	CLK(NULL,	"cam_ick",	&cam_ick,	CK_243X), -	CLK(NULL,	"mailboxes_ick", &mailboxes_ick,	CK_243X), -	CLK(NULL,	"wdt4_ick",	&wdt4_ick,	CK_243X), -	CLK(NULL,	"wdt4_fck",	&wdt4_fck,	CK_243X), -	CLK(NULL,	"mspro_ick",	&mspro_ick,	CK_243X), -	CLK(NULL,	"mspro_fck",	&mspro_fck,	CK_243X), -	CLK(NULL,	"fac_ick",	&fac_ick,	CK_243X), -	CLK(NULL,	"fac_fck",	&fac_fck,	CK_243X), -	CLK("omap_hdq.0", "ick",	&hdq_ick,	CK_243X), -	CLK(NULL,	"hdq_ick",	&hdq_ick,	CK_243X), -	CLK("omap_hdq.1", "fck",	&hdq_fck,	CK_243X), -	CLK(NULL,	"hdq_fck",	&hdq_fck,	CK_243X), -	CLK("omap_i2c.1", "ick",	&i2c1_ick,	CK_243X), -	CLK(NULL,	"i2c1_ick",	&i2c1_ick,	CK_243X), -	CLK(NULL,	"i2chs1_fck",	&i2chs1_fck,	CK_243X), -	CLK("omap_i2c.2", "ick",	&i2c2_ick,	CK_243X), -	CLK(NULL,	"i2c2_ick",	&i2c2_ick,	CK_243X), -	CLK(NULL,	"i2chs2_fck",	&i2chs2_fck,	CK_243X), -	CLK(NULL,	"gpmc_fck",	&gpmc_fck,	CK_243X), -	CLK(NULL,	"sdma_fck",	&sdma_fck,	CK_243X), -	CLK(NULL,	"sdma_ick",	&sdma_ick,	CK_243X), -	CLK(NULL,	"sdrc_ick",	&sdrc_ick,	CK_243X), -	CLK(NULL,	"des_ick",	&des_ick,	CK_243X), -	CLK("omap-sham",	"ick",	&sha_ick,	CK_243X), -	CLK("omap_rng",	"ick",		&rng_ick,	CK_243X), -	CLK(NULL,	"rng_ick",	&rng_ick,	CK_243X), -	CLK("omap-aes",	"ick",	&aes_ick,	CK_243X), -	CLK(NULL,	"pka_ick",	&pka_ick,	CK_243X), -	CLK(NULL,	"usb_fck",	&usb_fck,	CK_243X), -	CLK("musb-omap2430",	"ick",	&usbhs_ick,	CK_243X), -	CLK(NULL,	"usbhs_ick",	&usbhs_ick,	CK_243X), -	CLK("omap_hsmmc.0", "ick",	&mmchs1_ick,	CK_243X), -	CLK(NULL,	"mmchs1_ick",	&mmchs1_ick,	CK_243X), -	CLK(NULL,	"mmchs1_fck",	&mmchs1_fck,	CK_243X), -	CLK("omap_hsmmc.1", "ick",	&mmchs2_ick,	CK_243X), -	CLK(NULL,	"mmchs2_ick",	&mmchs2_ick,	CK_243X), -	CLK(NULL,	"mmchs2_fck",	&mmchs2_fck,	CK_243X), -	CLK(NULL,	"gpio5_ick",	&gpio5_ick,	CK_243X), -	CLK(NULL,	"gpio5_fck",	&gpio5_fck,	CK_243X), -	CLK(NULL,	"mdm_intc_ick",	&mdm_intc_ick,	CK_243X), -	CLK("omap_hsmmc.0", "mmchsdb_fck",	&mmchsdb1_fck,	CK_243X), -	CLK(NULL,	 "mmchsdb1_fck",	&mmchsdb1_fck,	CK_243X), -	CLK("omap_hsmmc.1", "mmchsdb_fck",	&mmchsdb2_fck,	CK_243X), -	CLK(NULL,	 "mmchsdb2_fck",	&mmchsdb2_fck,	CK_243X), -	CLK(NULL,	"timer_32k_ck",  &func_32k_ck,   CK_243X), -	CLK(NULL,	"timer_sys_ck",	&sys_ck,	CK_243X), -	CLK(NULL,	"timer_ext_ck",	&alt_ck,	CK_243X), -	CLK(NULL,	"cpufreq_ck",	&virt_prcm_set,	CK_243X), +	CLK(NULL,	"gpt1_ick",	&gpt1_ick), +	CLK(NULL,	"gpt1_fck",	&gpt1_fck), +	CLK(NULL,	"gpt2_ick",	&gpt2_ick), +	CLK(NULL,	"gpt2_fck",	&gpt2_fck), +	CLK(NULL,	"gpt3_ick",	&gpt3_ick), +	CLK(NULL,	"gpt3_fck",	&gpt3_fck), +	CLK(NULL,	"gpt4_ick",	&gpt4_ick), +	CLK(NULL,	"gpt4_fck",	&gpt4_fck), +	CLK(NULL,	"gpt5_ick",	&gpt5_ick), +	CLK(NULL,	"gpt5_fck",	&gpt5_fck), +	CLK(NULL,	"gpt6_ick",	&gpt6_ick), +	CLK(NULL,	"gpt6_fck",	&gpt6_fck), +	CLK(NULL,	"gpt7_ick",	&gpt7_ick), +	CLK(NULL,	"gpt7_fck",	&gpt7_fck), +	CLK(NULL,	"gpt8_ick",	&gpt8_ick), +	CLK(NULL,	"gpt8_fck",	&gpt8_fck), +	CLK(NULL,	"gpt9_ick",	&gpt9_ick), +	CLK(NULL,	"gpt9_fck",	&gpt9_fck), +	CLK(NULL,	"gpt10_ick",	&gpt10_ick), +	CLK(NULL,	"gpt10_fck",	&gpt10_fck), +	CLK(NULL,	"gpt11_ick",	&gpt11_ick), +	CLK(NULL,	"gpt11_fck",	&gpt11_fck), +	CLK(NULL,	"gpt12_ick",	&gpt12_ick), +	CLK(NULL,	"gpt12_fck",	&gpt12_fck), +	CLK("omap-mcbsp.1", "ick",	&mcbsp1_ick), +	CLK(NULL,	"mcbsp1_ick",	&mcbsp1_ick), +	CLK(NULL,	"mcbsp1_fck",	&mcbsp1_fck), +	CLK("omap-mcbsp.2", "ick",	&mcbsp2_ick), +	CLK(NULL,	"mcbsp2_ick",	&mcbsp2_ick), +	CLK(NULL,	"mcbsp2_fck",	&mcbsp2_fck), +	CLK("omap-mcbsp.3", "ick",	&mcbsp3_ick), +	CLK(NULL,	"mcbsp3_ick",	&mcbsp3_ick), +	CLK(NULL,	"mcbsp3_fck",	&mcbsp3_fck), +	CLK("omap-mcbsp.4", "ick",	&mcbsp4_ick), +	CLK(NULL,	"mcbsp4_ick",	&mcbsp4_ick), +	CLK(NULL,	"mcbsp4_fck",	&mcbsp4_fck), +	CLK("omap-mcbsp.5", "ick",	&mcbsp5_ick), +	CLK(NULL,	"mcbsp5_ick",	&mcbsp5_ick), +	CLK(NULL,	"mcbsp5_fck",	&mcbsp5_fck), +	CLK("omap2_mcspi.1", "ick",	&mcspi1_ick), +	CLK(NULL,	"mcspi1_ick",	&mcspi1_ick), +	CLK(NULL,	"mcspi1_fck",	&mcspi1_fck), +	CLK("omap2_mcspi.2", "ick",	&mcspi2_ick), +	CLK(NULL,	"mcspi2_ick",	&mcspi2_ick), +	CLK(NULL,	"mcspi2_fck",	&mcspi2_fck), +	CLK("omap2_mcspi.3", "ick",	&mcspi3_ick), +	CLK(NULL,	"mcspi3_ick",	&mcspi3_ick), +	CLK(NULL,	"mcspi3_fck",	&mcspi3_fck), +	CLK(NULL,	"uart1_ick",	&uart1_ick), +	CLK(NULL,	"uart1_fck",	&uart1_fck), +	CLK(NULL,	"uart2_ick",	&uart2_ick), +	CLK(NULL,	"uart2_fck",	&uart2_fck), +	CLK(NULL,	"uart3_ick",	&uart3_ick), +	CLK(NULL,	"uart3_fck",	&uart3_fck), +	CLK(NULL,	"gpios_ick",	&gpios_ick), +	CLK(NULL,	"gpios_fck",	&gpios_fck), +	CLK("omap_wdt",	"ick",		&mpu_wdt_ick), +	CLK(NULL,	"mpu_wdt_ick",	&mpu_wdt_ick), +	CLK(NULL,	"mpu_wdt_fck",	&mpu_wdt_fck), +	CLK(NULL,	"sync_32k_ick",	&sync_32k_ick), +	CLK(NULL,	"wdt1_ick",	&wdt1_ick), +	CLK(NULL,	"omapctrl_ick",	&omapctrl_ick), +	CLK(NULL,	"icr_ick",	&icr_ick), +	CLK("omap24xxcam", "fck",	&cam_fck), +	CLK(NULL,	"cam_fck",	&cam_fck), +	CLK("omap24xxcam", "ick",	&cam_ick), +	CLK(NULL,	"cam_ick",	&cam_ick), +	CLK(NULL,	"mailboxes_ick", &mailboxes_ick), +	CLK(NULL,	"wdt4_ick",	&wdt4_ick), +	CLK(NULL,	"wdt4_fck",	&wdt4_fck), +	CLK(NULL,	"mspro_ick",	&mspro_ick), +	CLK(NULL,	"mspro_fck",	&mspro_fck), +	CLK(NULL,	"fac_ick",	&fac_ick), +	CLK(NULL,	"fac_fck",	&fac_fck), +	CLK("omap_hdq.0", "ick",	&hdq_ick), +	CLK(NULL,	"hdq_ick",	&hdq_ick), +	CLK("omap_hdq.1", "fck",	&hdq_fck), +	CLK(NULL,	"hdq_fck",	&hdq_fck), +	CLK("omap_i2c.1", "ick",	&i2c1_ick), +	CLK(NULL,	"i2c1_ick",	&i2c1_ick), +	CLK(NULL,	"i2chs1_fck",	&i2chs1_fck), +	CLK("omap_i2c.2", "ick",	&i2c2_ick), +	CLK(NULL,	"i2c2_ick",	&i2c2_ick), +	CLK(NULL,	"i2chs2_fck",	&i2chs2_fck), +	CLK(NULL,	"gpmc_fck",	&gpmc_fck), +	CLK(NULL,	"sdma_fck",	&sdma_fck), +	CLK(NULL,	"sdma_ick",	&sdma_ick), +	CLK(NULL,	"sdrc_ick",	&sdrc_ick), +	CLK(NULL,	"des_ick",	&des_ick), +	CLK("omap-sham",	"ick",	&sha_ick), +	CLK(NULL,	"sha_ick",	&sha_ick), +	CLK("omap_rng", "ick",		&rng_ick), +	CLK(NULL,	"rng_ick",	&rng_ick), +	CLK("omap-aes",	"ick",	&aes_ick), +	CLK(NULL,	"aes_ick",	&aes_ick), +	CLK(NULL,	"pka_ick",	&pka_ick), +	CLK(NULL,	"usb_fck",	&usb_fck), +	CLK("musb-omap2430",	"ick",	&usbhs_ick), +	CLK(NULL,	"usbhs_ick",	&usbhs_ick), +	CLK("omap_hsmmc.0", "ick",	&mmchs1_ick), +	CLK(NULL,	"mmchs1_ick",	&mmchs1_ick), +	CLK(NULL,	"mmchs1_fck",	&mmchs1_fck), +	CLK("omap_hsmmc.1", "ick",	&mmchs2_ick), +	CLK(NULL,	"mmchs2_ick",	&mmchs2_ick), +	CLK(NULL,	"mmchs2_fck",	&mmchs2_fck), +	CLK(NULL,	"gpio5_ick",	&gpio5_ick), +	CLK(NULL,	"gpio5_fck",	&gpio5_fck), +	CLK(NULL,	"mdm_intc_ick",	&mdm_intc_ick), +	CLK("omap_hsmmc.0", "mmchsdb_fck",	&mmchsdb1_fck), +	CLK(NULL,	 "mmchsdb1_fck",	&mmchsdb1_fck), +	CLK("omap_hsmmc.1", "mmchsdb_fck",	&mmchsdb2_fck), +	CLK(NULL,	 "mmchsdb2_fck",	&mmchsdb2_fck), +	CLK(NULL,	"timer_32k_ck",  &func_32k_ck), +	CLK(NULL,	"timer_sys_ck",	&sys_ck), +	CLK(NULL,	"timer_ext_ck",	&alt_ck), +	CLK(NULL,	"cpufreq_ck",	&virt_prcm_set),  };  static const char *enable_init_clks[] = { @@ -2019,8 +2021,6 @@ static const char *enable_init_clks[] = {  int __init omap2430_clk_init(void)  { -	struct omap_clk *c; -  	prcm_clksrc_ctrl = OMAP2430_PRCM_CLKSRC_CTRL;  	cpu_mask = RATE_IN_243X;  	rate_table = omap2430_rate_table; @@ -2029,12 +2029,7 @@ int __init omap2430_clk_init(void)  	omap2xxx_clkt_vps_check_bootloader_rates(); -	for (c = omap2430_clks; c < omap2430_clks + ARRAY_SIZE(omap2430_clks); -	     c++) { -		clkdev_add(&c->lk); -		if (!__clk_init(NULL, c->lk.clk)) -			omap2_init_clk_hw_omap_clocks(c->lk.clk); -	} +	omap_clocks_register(omap2430_clks, ARRAY_SIZE(omap2430_clks));  	omap2xxx_clkt_vps_late_init(); diff --git a/arch/arm/mach-omap2/cclock33xx_data.c b/arch/arm/mach-omap2/cclock33xx_data.c index 7f091c85384..6ebc7803bc3 100644 --- a/arch/arm/mach-omap2/cclock33xx_data.c +++ b/arch/arm/mach-omap2/cclock33xx_data.c @@ -413,6 +413,14 @@ static struct clk smartreflex1_fck;  DEFINE_STRUCT_CLK_HW_OMAP(smartreflex1_fck, NULL);  DEFINE_STRUCT_CLK(smartreflex1_fck, dpll_core_ck_parents, clk_ops_null); +static struct clk sha0_fck; +DEFINE_STRUCT_CLK_HW_OMAP(sha0_fck, NULL); +DEFINE_STRUCT_CLK(sha0_fck, dpll_core_ck_parents, clk_ops_null); + +static struct clk aes0_fck; +DEFINE_STRUCT_CLK_HW_OMAP(aes0_fck, NULL); +DEFINE_STRUCT_CLK(aes0_fck, dpll_core_ck_parents, clk_ops_null); +  /*   * Modules clock nodes   * @@ -838,80 +846,82 @@ DEFINE_STRUCT_CLK(wdt1_fck, wdt_ck_parents, gpio_fck_ops);   * clkdev   */  static struct omap_clk am33xx_clks[] = { -	CLK(NULL,	"clk_32768_ck",		&clk_32768_ck,	CK_AM33XX), -	CLK(NULL,	"clk_rc32k_ck",		&clk_rc32k_ck,	CK_AM33XX), -	CLK(NULL,	"virt_19200000_ck",	&virt_19200000_ck,	CK_AM33XX), -	CLK(NULL,	"virt_24000000_ck",	&virt_24000000_ck,	CK_AM33XX), -	CLK(NULL,	"virt_25000000_ck",	&virt_25000000_ck,	CK_AM33XX), -	CLK(NULL,	"virt_26000000_ck",	&virt_26000000_ck,	CK_AM33XX), -	CLK(NULL,	"sys_clkin_ck",		&sys_clkin_ck,	CK_AM33XX), -	CLK(NULL,	"tclkin_ck",		&tclkin_ck,	CK_AM33XX), -	CLK(NULL,	"dpll_core_ck",		&dpll_core_ck,	CK_AM33XX), -	CLK(NULL,	"dpll_core_x2_ck",	&dpll_core_x2_ck,	CK_AM33XX), -	CLK(NULL,	"dpll_core_m4_ck",	&dpll_core_m4_ck,	CK_AM33XX), -	CLK(NULL,	"dpll_core_m5_ck",	&dpll_core_m5_ck,	CK_AM33XX), -	CLK(NULL,	"dpll_core_m6_ck",	&dpll_core_m6_ck,	CK_AM33XX), -	CLK(NULL,	"dpll_mpu_ck",		&dpll_mpu_ck,	CK_AM33XX), -	CLK("cpu0",	NULL,			&dpll_mpu_ck,	CK_AM33XX), -	CLK(NULL,	"dpll_mpu_m2_ck",	&dpll_mpu_m2_ck,	CK_AM33XX), -	CLK(NULL,	"dpll_ddr_ck",		&dpll_ddr_ck,	CK_AM33XX), -	CLK(NULL,	"dpll_ddr_m2_ck",	&dpll_ddr_m2_ck,	CK_AM33XX), -	CLK(NULL,	"dpll_ddr_m2_div2_ck",	&dpll_ddr_m2_div2_ck,	CK_AM33XX), -	CLK(NULL,	"dpll_disp_ck",		&dpll_disp_ck,	CK_AM33XX), -	CLK(NULL,	"dpll_disp_m2_ck",	&dpll_disp_m2_ck,	CK_AM33XX), -	CLK(NULL,	"dpll_per_ck",		&dpll_per_ck,	CK_AM33XX), -	CLK(NULL,	"dpll_per_m2_ck",	&dpll_per_m2_ck,	CK_AM33XX), -	CLK(NULL,	"dpll_per_m2_div4_wkupdm_ck",	&dpll_per_m2_div4_wkupdm_ck,	CK_AM33XX), -	CLK(NULL,	"dpll_per_m2_div4_ck",	&dpll_per_m2_div4_ck,	CK_AM33XX), -	CLK(NULL,	"adc_tsc_fck",		&adc_tsc_fck,	CK_AM33XX), -	CLK(NULL,	"cefuse_fck",		&cefuse_fck,	CK_AM33XX), -	CLK(NULL,	"clkdiv32k_ck",		&clkdiv32k_ck,	CK_AM33XX), -	CLK(NULL,	"clkdiv32k_ick",	&clkdiv32k_ick,	CK_AM33XX), -	CLK(NULL,	"dcan0_fck",		&dcan0_fck,	CK_AM33XX), -	CLK("481cc000.d_can",	NULL,		&dcan0_fck,	CK_AM33XX), -	CLK(NULL,	"dcan1_fck",		&dcan1_fck,	CK_AM33XX), -	CLK("481d0000.d_can",	NULL,		&dcan1_fck,	CK_AM33XX), -	CLK(NULL,	"debugss_ick",		&debugss_ick,	CK_AM33XX), -	CLK(NULL,	"pruss_ocp_gclk",	&pruss_ocp_gclk,	CK_AM33XX), -	CLK(NULL,	"mcasp0_fck",		&mcasp0_fck,	CK_AM33XX), -	CLK(NULL,	"mcasp1_fck",		&mcasp1_fck,	CK_AM33XX), -	CLK(NULL,	"mmu_fck",		&mmu_fck,	CK_AM33XX), -	CLK(NULL,	"smartreflex0_fck",	&smartreflex0_fck,	CK_AM33XX), -	CLK(NULL,	"smartreflex1_fck",	&smartreflex1_fck,	CK_AM33XX), -	CLK(NULL,	"timer1_fck",		&timer1_fck,	CK_AM33XX), -	CLK(NULL,	"timer2_fck",		&timer2_fck,	CK_AM33XX), -	CLK(NULL,	"timer3_fck",		&timer3_fck,	CK_AM33XX), -	CLK(NULL,	"timer4_fck",		&timer4_fck,	CK_AM33XX), -	CLK(NULL,	"timer5_fck",		&timer5_fck,	CK_AM33XX), -	CLK(NULL,	"timer6_fck",		&timer6_fck,	CK_AM33XX), -	CLK(NULL,	"timer7_fck",		&timer7_fck,	CK_AM33XX), -	CLK(NULL,	"usbotg_fck",		&usbotg_fck,	CK_AM33XX), -	CLK(NULL,	"ieee5000_fck",		&ieee5000_fck,	CK_AM33XX), -	CLK(NULL,	"wdt1_fck",		&wdt1_fck,	CK_AM33XX), -	CLK(NULL,	"l4_rtc_gclk",		&l4_rtc_gclk,	CK_AM33XX), -	CLK(NULL,	"l3_gclk",		&l3_gclk,	CK_AM33XX), -	CLK(NULL,	"dpll_core_m4_div2_ck",	&dpll_core_m4_div2_ck,	CK_AM33XX), -	CLK(NULL,	"l4hs_gclk",		&l4hs_gclk,	CK_AM33XX), -	CLK(NULL,	"l3s_gclk",		&l3s_gclk,	CK_AM33XX), -	CLK(NULL,	"l4fw_gclk",		&l4fw_gclk,	CK_AM33XX), -	CLK(NULL,	"l4ls_gclk",		&l4ls_gclk,	CK_AM33XX), -	CLK(NULL,	"clk_24mhz",		&clk_24mhz,	CK_AM33XX), -	CLK(NULL,	"sysclk_div_ck",	&sysclk_div_ck,	CK_AM33XX), -	CLK(NULL,	"cpsw_125mhz_gclk",	&cpsw_125mhz_gclk,	CK_AM33XX), -	CLK(NULL,	"cpsw_cpts_rft_clk",	&cpsw_cpts_rft_clk,	CK_AM33XX), -	CLK(NULL,	"gpio0_dbclk_mux_ck",	&gpio0_dbclk_mux_ck,	CK_AM33XX), -	CLK(NULL,	"gpio0_dbclk",		&gpio0_dbclk,	CK_AM33XX), -	CLK(NULL,	"gpio1_dbclk",		&gpio1_dbclk,	CK_AM33XX), -	CLK(NULL,	"gpio2_dbclk",		&gpio2_dbclk,	CK_AM33XX), -	CLK(NULL,	"gpio3_dbclk",		&gpio3_dbclk,	CK_AM33XX), -	CLK(NULL,	"lcd_gclk",		&lcd_gclk,	CK_AM33XX), -	CLK(NULL,	"mmc_clk",		&mmc_clk,	CK_AM33XX), -	CLK(NULL,	"gfx_fclk_clksel_ck",	&gfx_fclk_clksel_ck,	CK_AM33XX), -	CLK(NULL,	"gfx_fck_div_ck",	&gfx_fck_div_ck,	CK_AM33XX), -	CLK(NULL,	"sysclkout_pre_ck",	&sysclkout_pre_ck,	CK_AM33XX), -	CLK(NULL,	"clkout2_div_ck",	&clkout2_div_ck,	CK_AM33XX), -	CLK(NULL,	"timer_32k_ck",		&clkdiv32k_ick,	CK_AM33XX), -	CLK(NULL,	"timer_sys_ck",		&sys_clkin_ck,	CK_AM33XX), +	CLK(NULL,	"clk_32768_ck",		&clk_32768_ck), +	CLK(NULL,	"clk_rc32k_ck",		&clk_rc32k_ck), +	CLK(NULL,	"virt_19200000_ck",	&virt_19200000_ck), +	CLK(NULL,	"virt_24000000_ck",	&virt_24000000_ck), +	CLK(NULL,	"virt_25000000_ck",	&virt_25000000_ck), +	CLK(NULL,	"virt_26000000_ck",	&virt_26000000_ck), +	CLK(NULL,	"sys_clkin_ck",		&sys_clkin_ck), +	CLK(NULL,	"tclkin_ck",		&tclkin_ck), +	CLK(NULL,	"dpll_core_ck",		&dpll_core_ck), +	CLK(NULL,	"dpll_core_x2_ck",	&dpll_core_x2_ck), +	CLK(NULL,	"dpll_core_m4_ck",	&dpll_core_m4_ck), +	CLK(NULL,	"dpll_core_m5_ck",	&dpll_core_m5_ck), +	CLK(NULL,	"dpll_core_m6_ck",	&dpll_core_m6_ck), +	CLK(NULL,	"dpll_mpu_ck",		&dpll_mpu_ck), +	CLK("cpu0",	NULL,			&dpll_mpu_ck), +	CLK(NULL,	"dpll_mpu_m2_ck",	&dpll_mpu_m2_ck), +	CLK(NULL,	"dpll_ddr_ck",		&dpll_ddr_ck), +	CLK(NULL,	"dpll_ddr_m2_ck",	&dpll_ddr_m2_ck), +	CLK(NULL,	"dpll_ddr_m2_div2_ck",	&dpll_ddr_m2_div2_ck), +	CLK(NULL,	"dpll_disp_ck",		&dpll_disp_ck), +	CLK(NULL,	"dpll_disp_m2_ck",	&dpll_disp_m2_ck), +	CLK(NULL,	"dpll_per_ck",		&dpll_per_ck), +	CLK(NULL,	"dpll_per_m2_ck",	&dpll_per_m2_ck), +	CLK(NULL,	"dpll_per_m2_div4_wkupdm_ck",	&dpll_per_m2_div4_wkupdm_ck), +	CLK(NULL,	"dpll_per_m2_div4_ck",	&dpll_per_m2_div4_ck), +	CLK(NULL,	"adc_tsc_fck",		&adc_tsc_fck), +	CLK(NULL,	"cefuse_fck",		&cefuse_fck), +	CLK(NULL,	"clkdiv32k_ck",		&clkdiv32k_ck), +	CLK(NULL,	"clkdiv32k_ick",	&clkdiv32k_ick), +	CLK(NULL,	"dcan0_fck",		&dcan0_fck), +	CLK("481cc000.d_can",	NULL,		&dcan0_fck), +	CLK(NULL,	"dcan1_fck",		&dcan1_fck), +	CLK("481d0000.d_can",	NULL,		&dcan1_fck), +	CLK(NULL,	"debugss_ick",		&debugss_ick), +	CLK(NULL,	"pruss_ocp_gclk",	&pruss_ocp_gclk), +	CLK(NULL,	"mcasp0_fck",		&mcasp0_fck), +	CLK(NULL,	"mcasp1_fck",		&mcasp1_fck), +	CLK(NULL,	"mmu_fck",		&mmu_fck), +	CLK(NULL,	"smartreflex0_fck",	&smartreflex0_fck), +	CLK(NULL,	"smartreflex1_fck",	&smartreflex1_fck), +	CLK(NULL,	"sha0_fck",		&sha0_fck), +	CLK(NULL,	"aes0_fck",		&aes0_fck), +	CLK(NULL,	"timer1_fck",		&timer1_fck), +	CLK(NULL,	"timer2_fck",		&timer2_fck), +	CLK(NULL,	"timer3_fck",		&timer3_fck), +	CLK(NULL,	"timer4_fck",		&timer4_fck), +	CLK(NULL,	"timer5_fck",		&timer5_fck), +	CLK(NULL,	"timer6_fck",		&timer6_fck), +	CLK(NULL,	"timer7_fck",		&timer7_fck), +	CLK(NULL,	"usbotg_fck",		&usbotg_fck), +	CLK(NULL,	"ieee5000_fck",		&ieee5000_fck), +	CLK(NULL,	"wdt1_fck",		&wdt1_fck), +	CLK(NULL,	"l4_rtc_gclk",		&l4_rtc_gclk), +	CLK(NULL,	"l3_gclk",		&l3_gclk), +	CLK(NULL,	"dpll_core_m4_div2_ck",	&dpll_core_m4_div2_ck), +	CLK(NULL,	"l4hs_gclk",		&l4hs_gclk), +	CLK(NULL,	"l3s_gclk",		&l3s_gclk), +	CLK(NULL,	"l4fw_gclk",		&l4fw_gclk), +	CLK(NULL,	"l4ls_gclk",		&l4ls_gclk), +	CLK(NULL,	"clk_24mhz",		&clk_24mhz), +	CLK(NULL,	"sysclk_div_ck",	&sysclk_div_ck), +	CLK(NULL,	"cpsw_125mhz_gclk",	&cpsw_125mhz_gclk), +	CLK(NULL,	"cpsw_cpts_rft_clk",	&cpsw_cpts_rft_clk), +	CLK(NULL,	"gpio0_dbclk_mux_ck",	&gpio0_dbclk_mux_ck), +	CLK(NULL,	"gpio0_dbclk",		&gpio0_dbclk), +	CLK(NULL,	"gpio1_dbclk",		&gpio1_dbclk), +	CLK(NULL,	"gpio2_dbclk",		&gpio2_dbclk), +	CLK(NULL,	"gpio3_dbclk",		&gpio3_dbclk), +	CLK(NULL,	"lcd_gclk",		&lcd_gclk), +	CLK(NULL,	"mmc_clk",		&mmc_clk), +	CLK(NULL,	"gfx_fclk_clksel_ck",	&gfx_fclk_clksel_ck), +	CLK(NULL,	"gfx_fck_div_ck",	&gfx_fck_div_ck), +	CLK(NULL,	"sysclkout_pre_ck",	&sysclkout_pre_ck), +	CLK(NULL,	"clkout2_div_ck",	&clkout2_div_ck), +	CLK(NULL,	"timer_32k_ck",		&clkdiv32k_ick), +	CLK(NULL,	"timer_sys_ck",		&sys_clkin_ck),  }; @@ -926,21 +936,10 @@ static const char *enable_init_clks[] = {  int __init am33xx_clk_init(void)  { -	struct omap_clk *c; -	u32 cpu_clkflg; - -	if (soc_is_am33xx()) { +	if (soc_is_am33xx())  		cpu_mask = RATE_IN_AM33XX; -		cpu_clkflg = CK_AM33XX; -	} -	for (c = am33xx_clks; c < am33xx_clks + ARRAY_SIZE(am33xx_clks); c++) { -		if (c->cpu & cpu_clkflg) { -			clkdev_add(&c->lk); -			if (!__clk_init(NULL, c->lk.clk)) -				omap2_init_clk_hw_omap_clocks(c->lk.clk); -		} -	} +	omap_clocks_register(am33xx_clks, ARRAY_SIZE(am33xx_clks));  	omap2_clk_disable_autoidle_all(); diff --git a/arch/arm/mach-omap2/cclock3xxx_data.c b/arch/arm/mach-omap2/cclock3xxx_data.c index 4579c3c5338..45cd26430d1 100644 --- a/arch/arm/mach-omap2/cclock3xxx_data.c +++ b/arch/arm/mach-omap2/cclock3xxx_data.c @@ -3219,289 +3219,327 @@ static struct clk_hw_omap wdt3_ick_hw = {  DEFINE_STRUCT_CLK(wdt3_ick, gpio2_ick_parent_names, aes2_ick_ops);  /* - * clkdev + * clocks specific to omap3430es1 + */ +static struct omap_clk omap3430es1_clks[] = { +	CLK(NULL,	"gfx_l3_ck",	&gfx_l3_ck), +	CLK(NULL,	"gfx_l3_fck",	&gfx_l3_fck), +	CLK(NULL,	"gfx_l3_ick",	&gfx_l3_ick), +	CLK(NULL,	"gfx_cg1_ck",	&gfx_cg1_ck), +	CLK(NULL,	"gfx_cg2_ck",	&gfx_cg2_ck), +	CLK(NULL,	"d2d_26m_fck",	&d2d_26m_fck), +	CLK(NULL,	"fshostusb_fck", &fshostusb_fck), +	CLK(NULL,	"ssi_ssr_fck",	&ssi_ssr_fck_3430es1), +	CLK(NULL,	"ssi_sst_fck",	&ssi_sst_fck_3430es1), +	CLK("musb-omap2430",	"ick",	&hsotgusb_ick_3430es1), +	CLK(NULL,	"hsotgusb_ick",	&hsotgusb_ick_3430es1), +	CLK(NULL,	"fac_ick",	&fac_ick), +	CLK(NULL,	"ssi_ick",	&ssi_ick_3430es1), +	CLK(NULL,	"usb_l4_ick",	&usb_l4_ick), +	CLK(NULL,	"dss1_alwon_fck",	&dss1_alwon_fck_3430es1), +	CLK("omapdss_dss",	"ick",		&dss_ick_3430es1), +	CLK(NULL,	"dss_ick",		&dss_ick_3430es1), +}; + +/* + * clocks specific to am35xx + */ +static struct omap_clk am35xx_clks[] = { +	CLK(NULL,	"ipss_ick",	&ipss_ick), +	CLK(NULL,	"rmii_ck",	&rmii_ck), +	CLK(NULL,	"pclk_ck",	&pclk_ck), +	CLK(NULL,	"emac_ick",	&emac_ick), +	CLK(NULL,	"emac_fck",	&emac_fck), +	CLK("davinci_emac.0",	NULL,	&emac_ick), +	CLK("davinci_mdio.0",	NULL,	&emac_fck), +	CLK("vpfe-capture",	"master",	&vpfe_ick), +	CLK("vpfe-capture",	"slave",	&vpfe_fck), +	CLK(NULL,	"hsotgusb_ick",		&hsotgusb_ick_am35xx), +	CLK(NULL,	"hsotgusb_fck",		&hsotgusb_fck_am35xx), +	CLK(NULL,	"hecc_ck",	&hecc_ck), +	CLK(NULL,	"uart4_ick",	&uart4_ick_am35xx), +	CLK(NULL,	"uart4_fck",	&uart4_fck_am35xx), +}; + +/* + * clocks specific to omap36xx + */ +static struct omap_clk omap36xx_clks[] = { +	CLK(NULL,	"omap_192m_alwon_fck", &omap_192m_alwon_fck), +	CLK(NULL,	"uart4_fck",	&uart4_fck), +}; + +/* + * clocks common to omap36xx omap34xx + */ +static struct omap_clk omap34xx_omap36xx_clks[] = { +	CLK(NULL,	"aes1_ick",	&aes1_ick), +	CLK("omap_rng",	"ick",		&rng_ick), +	CLK(NULL,	"sha11_ick",	&sha11_ick), +	CLK(NULL,	"des1_ick",	&des1_ick), +	CLK(NULL,	"cam_mclk",	&cam_mclk), +	CLK(NULL,	"cam_ick",	&cam_ick), +	CLK(NULL,	"csi2_96m_fck",	&csi2_96m_fck), +	CLK(NULL,	"security_l3_ick", &security_l3_ick), +	CLK(NULL,	"pka_ick",	&pka_ick), +	CLK(NULL,	"icr_ick",	&icr_ick), +	CLK("omap-aes",	"ick",	&aes2_ick), +	CLK("omap-sham",	"ick",	&sha12_ick), +	CLK(NULL,	"des2_ick",	&des2_ick), +	CLK(NULL,	"mspro_ick",	&mspro_ick), +	CLK(NULL,	"mailboxes_ick", &mailboxes_ick), +	CLK(NULL,	"ssi_l4_ick",	&ssi_l4_ick), +	CLK(NULL,	"sr1_fck",	&sr1_fck), +	CLK(NULL,	"sr2_fck",	&sr2_fck), +	CLK(NULL,	"sr_l4_ick",	&sr_l4_ick), +	CLK(NULL,	"security_l4_ick2", &security_l4_ick2), +	CLK(NULL,	"wkup_l4_ick",	&wkup_l4_ick), +	CLK(NULL,	"dpll2_fck",	&dpll2_fck), +	CLK(NULL,	"iva2_ck",	&iva2_ck), +	CLK(NULL,	"modem_fck",	&modem_fck), +	CLK(NULL,	"sad2d_ick",	&sad2d_ick), +	CLK(NULL,	"mad2d_ick",	&mad2d_ick), +	CLK(NULL,	"mspro_fck",	&mspro_fck), +	CLK(NULL,	"dpll2_ck",	&dpll2_ck), +	CLK(NULL,	"dpll2_m2_ck",	&dpll2_m2_ck), +}; + +/* + * clocks common to omap36xx and omap3430es2plus + */ +static struct omap_clk omap36xx_omap3430es2plus_clks[] = { +	CLK(NULL,	"ssi_ssr_fck",	&ssi_ssr_fck_3430es2), +	CLK(NULL,	"ssi_sst_fck",	&ssi_sst_fck_3430es2), +	CLK("musb-omap2430",	"ick",	&hsotgusb_ick_3430es2), +	CLK(NULL,	"hsotgusb_ick",	&hsotgusb_ick_3430es2), +	CLK(NULL,	"ssi_ick",	&ssi_ick_3430es2), +	CLK(NULL,	"usim_fck",	&usim_fck), +	CLK(NULL,	"usim_ick",	&usim_ick), +}; + +/* + * clocks common to am35xx omap36xx and omap3430es2plus + */ +static struct omap_clk omap36xx_am35xx_omap3430es2plus_clks[] = { +	CLK(NULL,	"virt_16_8m_ck", &virt_16_8m_ck), +	CLK(NULL,	"dpll5_ck",	&dpll5_ck), +	CLK(NULL,	"dpll5_m2_ck",	&dpll5_m2_ck), +	CLK(NULL,	"sgx_fck",	&sgx_fck), +	CLK(NULL,	"sgx_ick",	&sgx_ick), +	CLK(NULL,	"cpefuse_fck",	&cpefuse_fck), +	CLK(NULL,	"ts_fck",	&ts_fck), +	CLK(NULL,	"usbtll_fck",	&usbtll_fck), +	CLK("usbhs_omap",	"usbtll_fck",	&usbtll_fck), +	CLK("usbhs_tll",	"usbtll_fck",	&usbtll_fck), +	CLK(NULL,	"usbtll_ick",	&usbtll_ick), +	CLK("usbhs_omap",	"usbtll_ick",	&usbtll_ick), +	CLK("usbhs_tll",	"usbtll_ick",	&usbtll_ick), +	CLK("omap_hsmmc.2",	"ick",	&mmchs3_ick), +	CLK(NULL,	"mmchs3_ick",	&mmchs3_ick), +	CLK(NULL,	"mmchs3_fck",	&mmchs3_fck), +	CLK(NULL,	"dss1_alwon_fck",	&dss1_alwon_fck_3430es2), +	CLK("omapdss_dss",	"ick",		&dss_ick_3430es2), +	CLK(NULL,	"dss_ick",		&dss_ick_3430es2), +	CLK(NULL,	"usbhost_120m_fck", &usbhost_120m_fck), +	CLK(NULL,	"usbhost_48m_fck", &usbhost_48m_fck), +	CLK(NULL,	"usbhost_ick",	&usbhost_ick), +	CLK("usbhs_omap",	"usbhost_ick",	&usbhost_ick), +}; + +/* + * common clocks   */  static struct omap_clk omap3xxx_clks[] = { -	CLK(NULL,	"apb_pclk",	&dummy_apb_pclk,	CK_3XXX), -	CLK(NULL,	"omap_32k_fck",	&omap_32k_fck,	CK_3XXX), -	CLK(NULL,	"virt_12m_ck",	&virt_12m_ck,	CK_3XXX), -	CLK(NULL,	"virt_13m_ck",	&virt_13m_ck,	CK_3XXX), -	CLK(NULL,	"virt_16_8m_ck", &virt_16_8m_ck, CK_3430ES2PLUS | CK_AM35XX  | CK_36XX), -	CLK(NULL,	"virt_19200000_ck", &virt_19200000_ck, CK_3XXX), -	CLK(NULL,	"virt_26000000_ck", &virt_26000000_ck, CK_3XXX), -	CLK(NULL,	"virt_38_4m_ck", &virt_38_4m_ck, CK_3XXX), -	CLK(NULL,	"osc_sys_ck",	&osc_sys_ck,	CK_3XXX), -	CLK("twl",	"fck",		&osc_sys_ck,	CK_3XXX), -	CLK(NULL,	"sys_ck",	&sys_ck,	CK_3XXX), -	CLK(NULL,	"sys_altclk",	&sys_altclk,	CK_3XXX), -	CLK(NULL,	"mcbsp_clks",	&mcbsp_clks,	CK_3XXX), -	CLK(NULL,	"sys_clkout1",	&sys_clkout1,	CK_3XXX), -	CLK(NULL,	"dpll1_ck",	&dpll1_ck,	CK_3XXX), -	CLK(NULL,	"dpll1_x2_ck",	&dpll1_x2_ck,	CK_3XXX), -	CLK(NULL,	"dpll1_x2m2_ck", &dpll1_x2m2_ck, CK_3XXX), -	CLK(NULL,	"dpll2_ck",	&dpll2_ck,	CK_34XX | CK_36XX), -	CLK(NULL,	"dpll2_m2_ck",	&dpll2_m2_ck,	CK_34XX | CK_36XX), -	CLK(NULL,	"dpll3_ck",	&dpll3_ck,	CK_3XXX), -	CLK(NULL,	"core_ck",	&core_ck,	CK_3XXX), -	CLK(NULL,	"dpll3_x2_ck",	&dpll3_x2_ck,	CK_3XXX), -	CLK(NULL,	"dpll3_m2_ck",	&dpll3_m2_ck,	CK_3XXX), -	CLK(NULL,	"dpll3_m2x2_ck", &dpll3_m2x2_ck, CK_3XXX), -	CLK(NULL,	"dpll3_m3_ck",	&dpll3_m3_ck,	CK_3XXX), -	CLK(NULL,	"dpll3_m3x2_ck", &dpll3_m3x2_ck, CK_3XXX), -	CLK("etb",	"emu_core_alwon_ck", &emu_core_alwon_ck, CK_3XXX), -	CLK(NULL,	"dpll4_ck",	&dpll4_ck,	CK_3XXX), -	CLK(NULL,	"dpll4_x2_ck",	&dpll4_x2_ck,	CK_3XXX), -	CLK(NULL,	"omap_192m_alwon_fck", &omap_192m_alwon_fck, CK_36XX), -	CLK(NULL,	"omap_96m_alwon_fck", &omap_96m_alwon_fck, CK_3XXX), -	CLK(NULL,	"omap_96m_fck",	&omap_96m_fck,	CK_3XXX), -	CLK(NULL,	"cm_96m_fck",	&cm_96m_fck,	CK_3XXX), -	CLK(NULL,	"omap_54m_fck",	&omap_54m_fck,	CK_3XXX), -	CLK(NULL,	"omap_48m_fck",	&omap_48m_fck,	CK_3XXX), -	CLK(NULL,	"omap_12m_fck",	&omap_12m_fck,	CK_3XXX), -	CLK(NULL,	"dpll4_m2_ck",	&dpll4_m2_ck,	CK_3XXX), -	CLK(NULL,	"dpll4_m2x2_ck", &dpll4_m2x2_ck, CK_3XXX), -	CLK(NULL,	"dpll4_m3_ck",	&dpll4_m3_ck,	CK_3XXX), -	CLK(NULL,	"dpll4_m3x2_ck", &dpll4_m3x2_ck, CK_3XXX), -	CLK(NULL,	"dpll4_m4_ck",	&dpll4_m4_ck,	CK_3XXX), -	CLK(NULL,	"dpll4_m4x2_ck", &dpll4_m4x2_ck, CK_3XXX), -	CLK(NULL,	"dpll4_m5_ck",	&dpll4_m5_ck,	CK_3XXX), -	CLK(NULL,	"dpll4_m5x2_ck", &dpll4_m5x2_ck, CK_3XXX), -	CLK(NULL,	"dpll4_m6_ck",	&dpll4_m6_ck,	CK_3XXX), -	CLK(NULL,	"dpll4_m6x2_ck", &dpll4_m6x2_ck, CK_3XXX), -	CLK("etb",	"emu_per_alwon_ck", &emu_per_alwon_ck, CK_3XXX), -	CLK(NULL,	"dpll5_ck",	&dpll5_ck,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK(NULL,	"dpll5_m2_ck",	&dpll5_m2_ck,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK(NULL,	"clkout2_src_ck", &clkout2_src_ck, CK_3XXX), -	CLK(NULL,	"sys_clkout2",	&sys_clkout2,	CK_3XXX), -	CLK(NULL,	"corex2_fck",	&corex2_fck,	CK_3XXX), -	CLK(NULL,	"dpll1_fck",	&dpll1_fck,	CK_3XXX), -	CLK(NULL,	"mpu_ck",	&mpu_ck,	CK_3XXX), -	CLK(NULL,	"arm_fck",	&arm_fck,	CK_3XXX), -	CLK("etb",	"emu_mpu_alwon_ck", &emu_mpu_alwon_ck, CK_3XXX), -	CLK(NULL,	"dpll2_fck",	&dpll2_fck,	CK_34XX | CK_36XX), -	CLK(NULL,	"iva2_ck",	&iva2_ck,	CK_34XX | CK_36XX), -	CLK(NULL,	"l3_ick",	&l3_ick,	CK_3XXX), -	CLK(NULL,	"l4_ick",	&l4_ick,	CK_3XXX), -	CLK(NULL,	"rm_ick",	&rm_ick,	CK_3XXX), -	CLK(NULL,	"gfx_l3_ck",	&gfx_l3_ck,	CK_3430ES1), -	CLK(NULL,	"gfx_l3_fck",	&gfx_l3_fck,	CK_3430ES1), -	CLK(NULL,	"gfx_l3_ick",	&gfx_l3_ick,	CK_3430ES1), -	CLK(NULL,	"gfx_cg1_ck",	&gfx_cg1_ck,	CK_3430ES1), -	CLK(NULL,	"gfx_cg2_ck",	&gfx_cg2_ck,	CK_3430ES1), -	CLK(NULL,	"sgx_fck",	&sgx_fck,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK(NULL,	"sgx_ick",	&sgx_ick,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK(NULL,	"d2d_26m_fck",	&d2d_26m_fck,	CK_3430ES1), -	CLK(NULL,	"modem_fck",	&modem_fck,	CK_34XX | CK_36XX), -	CLK(NULL,	"sad2d_ick",	&sad2d_ick,	CK_34XX | CK_36XX), -	CLK(NULL,	"mad2d_ick",	&mad2d_ick,	CK_34XX | CK_36XX), -	CLK(NULL,	"gpt10_fck",	&gpt10_fck,	CK_3XXX), -	CLK(NULL,	"gpt11_fck",	&gpt11_fck,	CK_3XXX), -	CLK(NULL,	"cpefuse_fck",	&cpefuse_fck,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK(NULL,	"ts_fck",	&ts_fck,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK(NULL,	"usbtll_fck",	&usbtll_fck,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK("usbhs_omap",	"usbtll_fck",	&usbtll_fck,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK("usbhs_tll",	"usbtll_fck",	&usbtll_fck,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK(NULL,	"core_96m_fck",	&core_96m_fck,	CK_3XXX), -	CLK(NULL,	"mmchs3_fck",	&mmchs3_fck,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK(NULL,	"mmchs2_fck",	&mmchs2_fck,	CK_3XXX), -	CLK(NULL,	"mspro_fck",	&mspro_fck,	CK_34XX | CK_36XX), -	CLK(NULL,	"mmchs1_fck",	&mmchs1_fck,	CK_3XXX), -	CLK(NULL,	"i2c3_fck",	&i2c3_fck,	CK_3XXX), -	CLK(NULL,	"i2c2_fck",	&i2c2_fck,	CK_3XXX), -	CLK(NULL,	"i2c1_fck",	&i2c1_fck,	CK_3XXX), -	CLK(NULL,	"mcbsp5_fck",	&mcbsp5_fck,	CK_3XXX), -	CLK(NULL,	"mcbsp1_fck",	&mcbsp1_fck,	CK_3XXX), -	CLK(NULL,	"core_48m_fck",	&core_48m_fck,	CK_3XXX), -	CLK(NULL,	"mcspi4_fck",	&mcspi4_fck,	CK_3XXX), -	CLK(NULL,	"mcspi3_fck",	&mcspi3_fck,	CK_3XXX), -	CLK(NULL,	"mcspi2_fck",	&mcspi2_fck,	CK_3XXX), -	CLK(NULL,	"mcspi1_fck",	&mcspi1_fck,	CK_3XXX), -	CLK(NULL,	"uart2_fck",	&uart2_fck,	CK_3XXX), -	CLK(NULL,	"uart1_fck",	&uart1_fck,	CK_3XXX), -	CLK(NULL,	"fshostusb_fck", &fshostusb_fck, CK_3430ES1), -	CLK(NULL,	"core_12m_fck",	&core_12m_fck,	CK_3XXX), -	CLK("omap_hdq.0",	"fck",	&hdq_fck,	CK_3XXX), -	CLK(NULL,	"hdq_fck",	&hdq_fck,	CK_3XXX), -	CLK(NULL,	"ssi_ssr_fck",	&ssi_ssr_fck_3430es1,	CK_3430ES1), -	CLK(NULL,	"ssi_ssr_fck",	&ssi_ssr_fck_3430es2,	CK_3430ES2PLUS | CK_36XX), -	CLK(NULL,	"ssi_sst_fck",	&ssi_sst_fck_3430es1,	CK_3430ES1), -	CLK(NULL,	"ssi_sst_fck",	&ssi_sst_fck_3430es2,	CK_3430ES2PLUS | CK_36XX), -	CLK(NULL,	"core_l3_ick",	&core_l3_ick,	CK_3XXX), -	CLK("musb-omap2430",	"ick",	&hsotgusb_ick_3430es1,	CK_3430ES1), -	CLK("musb-omap2430",	"ick",	&hsotgusb_ick_3430es2,	CK_3430ES2PLUS | CK_36XX), -	CLK(NULL,	"hsotgusb_ick",	&hsotgusb_ick_3430es1,	CK_3430ES1), -	CLK(NULL,	"hsotgusb_ick",	&hsotgusb_ick_3430es2,	CK_3430ES2PLUS | CK_36XX), -	CLK(NULL,	"sdrc_ick",	&sdrc_ick,	CK_3XXX), -	CLK(NULL,	"gpmc_fck",	&gpmc_fck,	CK_3XXX), -	CLK(NULL,	"security_l3_ick", &security_l3_ick, CK_34XX | CK_36XX), -	CLK(NULL,	"pka_ick",	&pka_ick,	CK_34XX | CK_36XX), -	CLK(NULL,	"core_l4_ick",	&core_l4_ick,	CK_3XXX), -	CLK(NULL,	"usbtll_ick",	&usbtll_ick,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK("usbhs_omap",	"usbtll_ick",	&usbtll_ick,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK("usbhs_tll",	"usbtll_ick",	&usbtll_ick,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK("omap_hsmmc.2",	"ick",	&mmchs3_ick,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK(NULL,	"mmchs3_ick",	&mmchs3_ick,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK(NULL,	"icr_ick",	&icr_ick,	CK_34XX | CK_36XX), -	CLK("omap-aes",	"ick",	&aes2_ick,	CK_34XX | CK_36XX), -	CLK("omap-sham",	"ick",	&sha12_ick,	CK_34XX | CK_36XX), -	CLK(NULL,	"des2_ick",	&des2_ick,	CK_34XX | CK_36XX), -	CLK("omap_hsmmc.1",	"ick",	&mmchs2_ick,	CK_3XXX), -	CLK("omap_hsmmc.0",	"ick",	&mmchs1_ick,	CK_3XXX), -	CLK(NULL,	"mmchs2_ick",	&mmchs2_ick,	CK_3XXX), -	CLK(NULL,	"mmchs1_ick",	&mmchs1_ick,	CK_3XXX), -	CLK(NULL,	"mspro_ick",	&mspro_ick,	CK_34XX | CK_36XX), -	CLK("omap_hdq.0", "ick",	&hdq_ick,	CK_3XXX), -	CLK(NULL,	"hdq_ick",	&hdq_ick,	CK_3XXX), -	CLK("omap2_mcspi.4", "ick",	&mcspi4_ick,	CK_3XXX), -	CLK("omap2_mcspi.3", "ick",	&mcspi3_ick,	CK_3XXX), -	CLK("omap2_mcspi.2", "ick",	&mcspi2_ick,	CK_3XXX), -	CLK("omap2_mcspi.1", "ick",	&mcspi1_ick,	CK_3XXX), -	CLK(NULL,	"mcspi4_ick",	&mcspi4_ick,	CK_3XXX), -	CLK(NULL,	"mcspi3_ick",	&mcspi3_ick,	CK_3XXX), -	CLK(NULL,	"mcspi2_ick",	&mcspi2_ick,	CK_3XXX), -	CLK(NULL,	"mcspi1_ick",	&mcspi1_ick,	CK_3XXX), -	CLK("omap_i2c.3", "ick",	&i2c3_ick,	CK_3XXX), -	CLK("omap_i2c.2", "ick",	&i2c2_ick,	CK_3XXX), -	CLK("omap_i2c.1", "ick",	&i2c1_ick,	CK_3XXX), -	CLK(NULL,	"i2c3_ick",	&i2c3_ick,	CK_3XXX), -	CLK(NULL,	"i2c2_ick",	&i2c2_ick,	CK_3XXX), -	CLK(NULL,	"i2c1_ick",	&i2c1_ick,	CK_3XXX), -	CLK(NULL,	"uart2_ick",	&uart2_ick,	CK_3XXX), -	CLK(NULL,	"uart1_ick",	&uart1_ick,	CK_3XXX), -	CLK(NULL,	"gpt11_ick",	&gpt11_ick,	CK_3XXX), -	CLK(NULL,	"gpt10_ick",	&gpt10_ick,	CK_3XXX), -	CLK("omap-mcbsp.5", "ick",	&mcbsp5_ick,	CK_3XXX), -	CLK("omap-mcbsp.1", "ick",	&mcbsp1_ick,	CK_3XXX), -	CLK(NULL,	"mcbsp5_ick",	&mcbsp5_ick,	CK_3XXX), -	CLK(NULL,	"mcbsp1_ick",	&mcbsp1_ick,	CK_3XXX), -	CLK(NULL,	"fac_ick",	&fac_ick,	CK_3430ES1), -	CLK(NULL,	"mailboxes_ick", &mailboxes_ick, CK_34XX | CK_36XX), -	CLK(NULL,	"omapctrl_ick",	&omapctrl_ick,	CK_3XXX), -	CLK(NULL,	"ssi_l4_ick",	&ssi_l4_ick,	CK_34XX | CK_36XX), -	CLK(NULL,	"ssi_ick",	&ssi_ick_3430es1,	CK_3430ES1), -	CLK(NULL,	"ssi_ick",	&ssi_ick_3430es2,	CK_3430ES2PLUS | CK_36XX), -	CLK(NULL,	"usb_l4_ick",	&usb_l4_ick,	CK_3430ES1), -	CLK(NULL,	"security_l4_ick2", &security_l4_ick2, CK_34XX | CK_36XX), -	CLK(NULL,	"aes1_ick",	&aes1_ick,	CK_34XX | CK_36XX), -	CLK("omap_rng",	"ick",		&rng_ick,	CK_34XX | CK_36XX), -	CLK(NULL,	"sha11_ick",	&sha11_ick,	CK_34XX | CK_36XX), -	CLK(NULL,	"des1_ick",	&des1_ick,	CK_34XX | CK_36XX), -	CLK(NULL,	"dss1_alwon_fck",		&dss1_alwon_fck_3430es1, CK_3430ES1), -	CLK(NULL,	"dss1_alwon_fck",		&dss1_alwon_fck_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK(NULL,	"dss_tv_fck",	&dss_tv_fck,	CK_3XXX), -	CLK(NULL,	"dss_96m_fck",	&dss_96m_fck,	CK_3XXX), -	CLK(NULL,	"dss2_alwon_fck",	&dss2_alwon_fck, CK_3XXX), -	CLK("omapdss_dss",	"ick",		&dss_ick_3430es1,	CK_3430ES1), -	CLK(NULL,	"dss_ick",		&dss_ick_3430es1,	CK_3430ES1), -	CLK("omapdss_dss",	"ick",		&dss_ick_3430es2,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK(NULL,	"dss_ick",		&dss_ick_3430es2,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK(NULL,	"cam_mclk",	&cam_mclk,	CK_34XX | CK_36XX), -	CLK(NULL,	"cam_ick",	&cam_ick,	CK_34XX | CK_36XX), -	CLK(NULL,	"csi2_96m_fck",	&csi2_96m_fck,	CK_34XX | CK_36XX), -	CLK(NULL,	"usbhost_120m_fck", &usbhost_120m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK(NULL,	"usbhost_48m_fck", &usbhost_48m_fck, CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK(NULL,	"usbhost_ick",	&usbhost_ick,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK("usbhs_omap",	"usbhost_ick",	&usbhost_ick,	CK_3430ES2PLUS | CK_AM35XX | CK_36XX), -	CLK(NULL,	"utmi_p1_gfclk",	&dummy_ck,	CK_3XXX), -	CLK(NULL,	"utmi_p2_gfclk",	&dummy_ck,	CK_3XXX), -	CLK(NULL,	"xclk60mhsp1_ck",	&dummy_ck,	CK_3XXX), -	CLK(NULL,	"xclk60mhsp2_ck",	&dummy_ck,	CK_3XXX), -	CLK(NULL,	"usb_host_hs_utmi_p1_clk",	&dummy_ck,	CK_3XXX), -	CLK(NULL,	"usb_host_hs_utmi_p2_clk",	&dummy_ck,	CK_3XXX), -	CLK("usbhs_omap",	"usb_tll_hs_usb_ch0_clk",	&dummy_ck,	CK_3XXX), -	CLK("usbhs_omap",	"usb_tll_hs_usb_ch1_clk",	&dummy_ck,	CK_3XXX), -	CLK("usbhs_tll",	"usb_tll_hs_usb_ch0_clk",	&dummy_ck,	CK_3XXX), -	CLK("usbhs_tll",	"usb_tll_hs_usb_ch1_clk",	&dummy_ck,	CK_3XXX), -	CLK(NULL,	"init_60m_fclk",	&dummy_ck,	CK_3XXX), -	CLK(NULL,	"usim_fck",	&usim_fck,	CK_3430ES2PLUS | CK_36XX), -	CLK(NULL,	"gpt1_fck",	&gpt1_fck,	CK_3XXX), -	CLK(NULL,	"wkup_32k_fck",	&wkup_32k_fck,	CK_3XXX), -	CLK(NULL,	"gpio1_dbck",	&gpio1_dbck,	CK_3XXX), -	CLK(NULL,	"wdt2_fck",		&wdt2_fck,	CK_3XXX), -	CLK(NULL,	"wkup_l4_ick",	&wkup_l4_ick,	CK_34XX | CK_36XX), -	CLK(NULL,	"usim_ick",	&usim_ick,	CK_3430ES2PLUS | CK_36XX), -	CLK("omap_wdt",	"ick",		&wdt2_ick,	CK_3XXX), -	CLK(NULL,	"wdt2_ick",	&wdt2_ick,	CK_3XXX), -	CLK(NULL,	"wdt1_ick",	&wdt1_ick,	CK_3XXX), -	CLK(NULL,	"gpio1_ick",	&gpio1_ick,	CK_3XXX), -	CLK(NULL,	"omap_32ksync_ick", &omap_32ksync_ick, CK_3XXX), -	CLK(NULL,	"gpt12_ick",	&gpt12_ick,	CK_3XXX), -	CLK(NULL,	"gpt1_ick",	&gpt1_ick,	CK_3XXX), -	CLK(NULL,	"per_96m_fck",	&per_96m_fck,	CK_3XXX), -	CLK(NULL,	"per_48m_fck",	&per_48m_fck,	CK_3XXX), -	CLK(NULL,	"uart3_fck",	&uart3_fck,	CK_3XXX), -	CLK(NULL,	"uart4_fck",	&uart4_fck,	CK_36XX), -	CLK(NULL,	"uart4_fck",	&uart4_fck_am35xx, CK_AM35XX), -	CLK(NULL,	"gpt2_fck",	&gpt2_fck,	CK_3XXX), -	CLK(NULL,	"gpt3_fck",	&gpt3_fck,	CK_3XXX), -	CLK(NULL,	"gpt4_fck",	&gpt4_fck,	CK_3XXX), -	CLK(NULL,	"gpt5_fck",	&gpt5_fck,	CK_3XXX), -	CLK(NULL,	"gpt6_fck",	&gpt6_fck,	CK_3XXX), -	CLK(NULL,	"gpt7_fck",	&gpt7_fck,	CK_3XXX), -	CLK(NULL,	"gpt8_fck",	&gpt8_fck,	CK_3XXX), -	CLK(NULL,	"gpt9_fck",	&gpt9_fck,	CK_3XXX), -	CLK(NULL,	"per_32k_alwon_fck", &per_32k_alwon_fck, CK_3XXX), -	CLK(NULL,	"gpio6_dbck",	&gpio6_dbck,	CK_3XXX), -	CLK(NULL,	"gpio5_dbck",	&gpio5_dbck,	CK_3XXX), -	CLK(NULL,	"gpio4_dbck",	&gpio4_dbck,	CK_3XXX), -	CLK(NULL,	"gpio3_dbck",	&gpio3_dbck,	CK_3XXX), -	CLK(NULL,	"gpio2_dbck",	&gpio2_dbck,	CK_3XXX), -	CLK(NULL,	"wdt3_fck",	&wdt3_fck,	CK_3XXX), -	CLK(NULL,	"per_l4_ick",	&per_l4_ick,	CK_3XXX), -	CLK(NULL,	"gpio6_ick",	&gpio6_ick,	CK_3XXX), -	CLK(NULL,	"gpio5_ick",	&gpio5_ick,	CK_3XXX), -	CLK(NULL,	"gpio4_ick",	&gpio4_ick,	CK_3XXX), -	CLK(NULL,	"gpio3_ick",	&gpio3_ick,	CK_3XXX), -	CLK(NULL,	"gpio2_ick",	&gpio2_ick,	CK_3XXX), -	CLK(NULL,	"wdt3_ick",	&wdt3_ick,	CK_3XXX), -	CLK(NULL,	"uart3_ick",	&uart3_ick,	CK_3XXX), -	CLK(NULL,	"uart4_ick",	&uart4_ick,	CK_36XX), -	CLK(NULL,	"gpt9_ick",	&gpt9_ick,	CK_3XXX), -	CLK(NULL,	"gpt8_ick",	&gpt8_ick,	CK_3XXX), -	CLK(NULL,	"gpt7_ick",	&gpt7_ick,	CK_3XXX), -	CLK(NULL,	"gpt6_ick",	&gpt6_ick,	CK_3XXX), -	CLK(NULL,	"gpt5_ick",	&gpt5_ick,	CK_3XXX), -	CLK(NULL,	"gpt4_ick",	&gpt4_ick,	CK_3XXX), -	CLK(NULL,	"gpt3_ick",	&gpt3_ick,	CK_3XXX), -	CLK(NULL,	"gpt2_ick",	&gpt2_ick,	CK_3XXX), -	CLK("omap-mcbsp.2", "ick",	&mcbsp2_ick,	CK_3XXX), -	CLK("omap-mcbsp.3", "ick",	&mcbsp3_ick,	CK_3XXX), -	CLK("omap-mcbsp.4", "ick",	&mcbsp4_ick,	CK_3XXX), -	CLK(NULL,	"mcbsp4_ick",	&mcbsp2_ick,	CK_3XXX), -	CLK(NULL,	"mcbsp3_ick",	&mcbsp3_ick,	CK_3XXX), -	CLK(NULL,	"mcbsp2_ick",	&mcbsp4_ick,	CK_3XXX), -	CLK(NULL,	"mcbsp2_fck",	&mcbsp2_fck,	CK_3XXX), -	CLK(NULL,	"mcbsp3_fck",	&mcbsp3_fck,	CK_3XXX), -	CLK(NULL,	"mcbsp4_fck",	&mcbsp4_fck,	CK_3XXX), -	CLK("etb",	"emu_src_ck",	&emu_src_ck,	CK_3XXX), -	CLK(NULL,	"emu_src_ck",	&emu_src_ck,	CK_3XXX), -	CLK(NULL,	"pclk_fck",	&pclk_fck,	CK_3XXX), -	CLK(NULL,	"pclkx2_fck",	&pclkx2_fck,	CK_3XXX), -	CLK(NULL,	"atclk_fck",	&atclk_fck,	CK_3XXX), -	CLK(NULL,	"traceclk_src_fck", &traceclk_src_fck, CK_3XXX), -	CLK(NULL,	"traceclk_fck",	&traceclk_fck,	CK_3XXX), -	CLK(NULL,	"sr1_fck",	&sr1_fck,	CK_34XX | CK_36XX), -	CLK(NULL,	"sr2_fck",	&sr2_fck,	CK_34XX | CK_36XX), -	CLK(NULL,	"sr_l4_ick",	&sr_l4_ick,	CK_34XX | CK_36XX), -	CLK(NULL,	"secure_32k_fck", &secure_32k_fck, CK_3XXX), -	CLK(NULL,	"gpt12_fck",	&gpt12_fck,	CK_3XXX), -	CLK(NULL,	"wdt1_fck",	&wdt1_fck,	CK_3XXX), -	CLK(NULL,	"ipss_ick",	&ipss_ick,	CK_AM35XX), -	CLK(NULL,	"rmii_ck",	&rmii_ck,	CK_AM35XX), -	CLK(NULL,	"pclk_ck",	&pclk_ck,	CK_AM35XX), -	CLK(NULL,	"emac_ick",	&emac_ick,	CK_AM35XX), -	CLK(NULL,	"emac_fck",	&emac_fck,	CK_AM35XX), -	CLK("davinci_emac.0",	NULL,	&emac_ick,	CK_AM35XX), -	CLK("davinci_mdio.0",	NULL,	&emac_fck,	CK_AM35XX), -	CLK("vpfe-capture",	"master",	&vpfe_ick,	CK_AM35XX), -	CLK("vpfe-capture",	"slave",	&vpfe_fck,	CK_AM35XX), -	CLK(NULL,	"hsotgusb_ick",		&hsotgusb_ick_am35xx,	CK_AM35XX), -	CLK(NULL,	"hsotgusb_fck",		&hsotgusb_fck_am35xx,	CK_AM35XX), -	CLK(NULL,	"hecc_ck",	&hecc_ck,	CK_AM35XX), -	CLK(NULL,	"uart4_ick",	&uart4_ick_am35xx,	CK_AM35XX), -	CLK(NULL,	"timer_32k_ck",	&omap_32k_fck,  CK_3XXX), -	CLK(NULL,	"timer_sys_ck",	&sys_ck,	CK_3XXX), -	CLK(NULL,	"cpufreq_ck",	&dpll1_ck,	CK_3XXX), +	CLK(NULL,	"apb_pclk",	&dummy_apb_pclk), +	CLK(NULL,	"omap_32k_fck",	&omap_32k_fck), +	CLK(NULL,	"virt_12m_ck",	&virt_12m_ck), +	CLK(NULL,	"virt_13m_ck",	&virt_13m_ck), +	CLK(NULL,	"virt_19200000_ck", &virt_19200000_ck), +	CLK(NULL,	"virt_26000000_ck", &virt_26000000_ck), +	CLK(NULL,	"virt_38_4m_ck", &virt_38_4m_ck), +	CLK(NULL,	"osc_sys_ck",	&osc_sys_ck), +	CLK("twl",	"fck",		&osc_sys_ck), +	CLK(NULL,	"sys_ck",	&sys_ck), +	CLK(NULL,	"omap_96m_alwon_fck", &omap_96m_alwon_fck), +	CLK("etb",	"emu_core_alwon_ck", &emu_core_alwon_ck), +	CLK(NULL,	"sys_altclk",	&sys_altclk), +	CLK(NULL,	"mcbsp_clks",	&mcbsp_clks), +	CLK(NULL,	"sys_clkout1",	&sys_clkout1), +	CLK(NULL,	"dpll1_ck",	&dpll1_ck), +	CLK(NULL,	"dpll1_x2_ck",	&dpll1_x2_ck), +	CLK(NULL,	"dpll1_x2m2_ck", &dpll1_x2m2_ck), +	CLK(NULL,	"dpll3_ck",	&dpll3_ck), +	CLK(NULL,	"core_ck",	&core_ck), +	CLK(NULL,	"dpll3_x2_ck",	&dpll3_x2_ck), +	CLK(NULL,	"dpll3_m2_ck",	&dpll3_m2_ck), +	CLK(NULL,	"dpll3_m2x2_ck", &dpll3_m2x2_ck), +	CLK(NULL,	"dpll3_m3_ck",	&dpll3_m3_ck), +	CLK(NULL,	"dpll3_m3x2_ck", &dpll3_m3x2_ck), +	CLK(NULL,	"dpll4_ck",	&dpll4_ck), +	CLK(NULL,	"dpll4_x2_ck",	&dpll4_x2_ck), +	CLK(NULL,	"omap_96m_fck",	&omap_96m_fck), +	CLK(NULL,	"cm_96m_fck",	&cm_96m_fck), +	CLK(NULL,	"omap_54m_fck",	&omap_54m_fck), +	CLK(NULL,	"omap_48m_fck",	&omap_48m_fck), +	CLK(NULL,	"omap_12m_fck",	&omap_12m_fck), +	CLK(NULL,	"dpll4_m2_ck",	&dpll4_m2_ck), +	CLK(NULL,	"dpll4_m2x2_ck", &dpll4_m2x2_ck), +	CLK(NULL,	"dpll4_m3_ck",	&dpll4_m3_ck), +	CLK(NULL,	"dpll4_m3x2_ck", &dpll4_m3x2_ck), +	CLK(NULL,	"dpll4_m4_ck",	&dpll4_m4_ck), +	CLK(NULL,	"dpll4_m4x2_ck", &dpll4_m4x2_ck), +	CLK(NULL,	"dpll4_m5_ck",	&dpll4_m5_ck), +	CLK(NULL,	"dpll4_m5x2_ck", &dpll4_m5x2_ck), +	CLK(NULL,	"dpll4_m6_ck",	&dpll4_m6_ck), +	CLK(NULL,	"dpll4_m6x2_ck", &dpll4_m6x2_ck), +	CLK("etb",	"emu_per_alwon_ck", &emu_per_alwon_ck), +	CLK(NULL,	"clkout2_src_ck", &clkout2_src_ck), +	CLK(NULL,	"sys_clkout2",	&sys_clkout2), +	CLK(NULL,	"corex2_fck",	&corex2_fck), +	CLK(NULL,	"dpll1_fck",	&dpll1_fck), +	CLK(NULL,	"mpu_ck",	&mpu_ck), +	CLK(NULL,	"arm_fck",	&arm_fck), +	CLK("etb",	"emu_mpu_alwon_ck", &emu_mpu_alwon_ck), +	CLK(NULL,	"l3_ick",	&l3_ick), +	CLK(NULL,	"l4_ick",	&l4_ick), +	CLK(NULL,	"rm_ick",	&rm_ick), +	CLK(NULL,	"gpt10_fck",	&gpt10_fck), +	CLK(NULL,	"gpt11_fck",	&gpt11_fck), +	CLK(NULL,	"core_96m_fck",	&core_96m_fck), +	CLK(NULL,	"mmchs2_fck",	&mmchs2_fck), +	CLK(NULL,	"mmchs1_fck",	&mmchs1_fck), +	CLK(NULL,	"i2c3_fck",	&i2c3_fck), +	CLK(NULL,	"i2c2_fck",	&i2c2_fck), +	CLK(NULL,	"i2c1_fck",	&i2c1_fck), +	CLK(NULL,	"mcbsp5_fck",	&mcbsp5_fck), +	CLK(NULL,	"mcbsp1_fck",	&mcbsp1_fck), +	CLK(NULL,	"core_48m_fck",	&core_48m_fck), +	CLK(NULL,	"mcspi4_fck",	&mcspi4_fck), +	CLK(NULL,	"mcspi3_fck",	&mcspi3_fck), +	CLK(NULL,	"mcspi2_fck",	&mcspi2_fck), +	CLK(NULL,	"mcspi1_fck",	&mcspi1_fck), +	CLK(NULL,	"uart2_fck",	&uart2_fck), +	CLK(NULL,	"uart1_fck",	&uart1_fck), +	CLK(NULL,	"core_12m_fck",	&core_12m_fck), +	CLK("omap_hdq.0",	"fck",	&hdq_fck), +	CLK(NULL,	"hdq_fck",	&hdq_fck), +	CLK(NULL,	"core_l3_ick",	&core_l3_ick), +	CLK(NULL,	"sdrc_ick",	&sdrc_ick), +	CLK(NULL,	"gpmc_fck",	&gpmc_fck), +	CLK(NULL,	"core_l4_ick",	&core_l4_ick), +	CLK("omap_hsmmc.1",	"ick",	&mmchs2_ick), +	CLK("omap_hsmmc.0",	"ick",	&mmchs1_ick), +	CLK(NULL,	"mmchs2_ick",	&mmchs2_ick), +	CLK(NULL,	"mmchs1_ick",	&mmchs1_ick), +	CLK("omap_hdq.0", "ick",	&hdq_ick), +	CLK(NULL,	"hdq_ick",	&hdq_ick), +	CLK("omap2_mcspi.4", "ick",	&mcspi4_ick), +	CLK("omap2_mcspi.3", "ick",	&mcspi3_ick), +	CLK("omap2_mcspi.2", "ick",	&mcspi2_ick), +	CLK("omap2_mcspi.1", "ick",	&mcspi1_ick), +	CLK(NULL,	"mcspi4_ick",	&mcspi4_ick), +	CLK(NULL,	"mcspi3_ick",	&mcspi3_ick), +	CLK(NULL,	"mcspi2_ick",	&mcspi2_ick), +	CLK(NULL,	"mcspi1_ick",	&mcspi1_ick), +	CLK("omap_i2c.3", "ick",	&i2c3_ick), +	CLK("omap_i2c.2", "ick",	&i2c2_ick), +	CLK("omap_i2c.1", "ick",	&i2c1_ick), +	CLK(NULL,	"i2c3_ick",	&i2c3_ick), +	CLK(NULL,	"i2c2_ick",	&i2c2_ick), +	CLK(NULL,	"i2c1_ick",	&i2c1_ick), +	CLK(NULL,	"uart2_ick",	&uart2_ick), +	CLK(NULL,	"uart1_ick",	&uart1_ick), +	CLK(NULL,	"gpt11_ick",	&gpt11_ick), +	CLK(NULL,	"gpt10_ick",	&gpt10_ick), +	CLK("omap-mcbsp.5", "ick",	&mcbsp5_ick), +	CLK("omap-mcbsp.1", "ick",	&mcbsp1_ick), +	CLK(NULL,	"mcbsp5_ick",	&mcbsp5_ick), +	CLK(NULL,	"mcbsp1_ick",	&mcbsp1_ick), +	CLK(NULL,	"omapctrl_ick",	&omapctrl_ick), +	CLK(NULL,	"dss_tv_fck",	&dss_tv_fck), +	CLK(NULL,	"dss_96m_fck",	&dss_96m_fck), +	CLK(NULL,	"dss2_alwon_fck",	&dss2_alwon_fck), +	CLK(NULL,	"utmi_p1_gfclk",	&dummy_ck), +	CLK(NULL,	"utmi_p2_gfclk",	&dummy_ck), +	CLK(NULL,	"xclk60mhsp1_ck",	&dummy_ck), +	CLK(NULL,	"xclk60mhsp2_ck",	&dummy_ck), +	CLK(NULL,	"usb_host_hs_utmi_p1_clk",	&dummy_ck), +	CLK(NULL,	"usb_host_hs_utmi_p2_clk",	&dummy_ck), +	CLK("usbhs_omap",	"usb_tll_hs_usb_ch0_clk",	&dummy_ck), +	CLK("usbhs_omap",	"usb_tll_hs_usb_ch1_clk",	&dummy_ck), +	CLK("usbhs_tll",	"usb_tll_hs_usb_ch0_clk",	&dummy_ck), +	CLK("usbhs_tll",	"usb_tll_hs_usb_ch1_clk",	&dummy_ck), +	CLK(NULL,	"init_60m_fclk",	&dummy_ck), +	CLK(NULL,	"gpt1_fck",	&gpt1_fck), +	CLK(NULL,	"aes2_ick",	&aes2_ick), +	CLK(NULL,	"wkup_32k_fck",	&wkup_32k_fck), +	CLK(NULL,	"gpio1_dbck",	&gpio1_dbck), +	CLK(NULL,	"sha12_ick",	&sha12_ick), +	CLK(NULL,	"wdt2_fck",		&wdt2_fck), +	CLK("omap_wdt",	"ick",		&wdt2_ick), +	CLK(NULL,	"wdt2_ick",	&wdt2_ick), +	CLK(NULL,	"wdt1_ick",	&wdt1_ick), +	CLK(NULL,	"gpio1_ick",	&gpio1_ick), +	CLK(NULL,	"omap_32ksync_ick", &omap_32ksync_ick), +	CLK(NULL,	"gpt12_ick",	&gpt12_ick), +	CLK(NULL,	"gpt1_ick",	&gpt1_ick), +	CLK(NULL,	"per_96m_fck",	&per_96m_fck), +	CLK(NULL,	"per_48m_fck",	&per_48m_fck), +	CLK(NULL,	"uart3_fck",	&uart3_fck), +	CLK(NULL,	"gpt2_fck",	&gpt2_fck), +	CLK(NULL,	"gpt3_fck",	&gpt3_fck), +	CLK(NULL,	"gpt4_fck",	&gpt4_fck), +	CLK(NULL,	"gpt5_fck",	&gpt5_fck), +	CLK(NULL,	"gpt6_fck",	&gpt6_fck), +	CLK(NULL,	"gpt7_fck",	&gpt7_fck), +	CLK(NULL,	"gpt8_fck",	&gpt8_fck), +	CLK(NULL,	"gpt9_fck",	&gpt9_fck), +	CLK(NULL,	"per_32k_alwon_fck", &per_32k_alwon_fck), +	CLK(NULL,	"gpio6_dbck",	&gpio6_dbck), +	CLK(NULL,	"gpio5_dbck",	&gpio5_dbck), +	CLK(NULL,	"gpio4_dbck",	&gpio4_dbck), +	CLK(NULL,	"gpio3_dbck",	&gpio3_dbck), +	CLK(NULL,	"gpio2_dbck",	&gpio2_dbck), +	CLK(NULL,	"wdt3_fck",	&wdt3_fck), +	CLK(NULL,	"per_l4_ick",	&per_l4_ick), +	CLK(NULL,	"gpio6_ick",	&gpio6_ick), +	CLK(NULL,	"gpio5_ick",	&gpio5_ick), +	CLK(NULL,	"gpio4_ick",	&gpio4_ick), +	CLK(NULL,	"gpio3_ick",	&gpio3_ick), +	CLK(NULL,	"gpio2_ick",	&gpio2_ick), +	CLK(NULL,	"wdt3_ick",	&wdt3_ick), +	CLK(NULL,	"uart3_ick",	&uart3_ick), +	CLK(NULL,	"uart4_ick",	&uart4_ick), +	CLK(NULL,	"gpt9_ick",	&gpt9_ick), +	CLK(NULL,	"gpt8_ick",	&gpt8_ick), +	CLK(NULL,	"gpt7_ick",	&gpt7_ick), +	CLK(NULL,	"gpt6_ick",	&gpt6_ick), +	CLK(NULL,	"gpt5_ick",	&gpt5_ick), +	CLK(NULL,	"gpt4_ick",	&gpt4_ick), +	CLK(NULL,	"gpt3_ick",	&gpt3_ick), +	CLK(NULL,	"gpt2_ick",	&gpt2_ick), +	CLK("omap-mcbsp.2", "ick",	&mcbsp2_ick), +	CLK("omap-mcbsp.3", "ick",	&mcbsp3_ick), +	CLK("omap-mcbsp.4", "ick",	&mcbsp4_ick), +	CLK(NULL,	"mcbsp4_ick",	&mcbsp2_ick), +	CLK(NULL,	"mcbsp3_ick",	&mcbsp3_ick), +	CLK(NULL,	"mcbsp2_ick",	&mcbsp4_ick), +	CLK(NULL,	"mcbsp2_fck",	&mcbsp2_fck), +	CLK(NULL,	"mcbsp3_fck",	&mcbsp3_fck), +	CLK(NULL,	"mcbsp4_fck",	&mcbsp4_fck), +	CLK("etb",	"emu_src_ck",	&emu_src_ck), +	CLK(NULL,	"emu_src_ck",	&emu_src_ck), +	CLK(NULL,	"pclk_fck",	&pclk_fck), +	CLK(NULL,	"pclkx2_fck",	&pclkx2_fck), +	CLK(NULL,	"atclk_fck",	&atclk_fck), +	CLK(NULL,	"traceclk_src_fck", &traceclk_src_fck), +	CLK(NULL,	"traceclk_fck",	&traceclk_fck), +	CLK(NULL,	"secure_32k_fck", &secure_32k_fck), +	CLK(NULL,	"gpt12_fck",	&gpt12_fck), +	CLK(NULL,	"wdt1_fck",	&wdt1_fck), +	CLK(NULL,	"timer_32k_ck",	&omap_32k_fck), +	CLK(NULL,	"timer_sys_ck",	&sys_ck), +	CLK(NULL,	"cpufreq_ck",	&dpll1_ck),  };  static const char *enable_init_clks[] = { @@ -3512,8 +3550,27 @@ static const char *enable_init_clks[] = {  int __init omap3xxx_clk_init(void)  { -	struct omap_clk *c; -	u32 cpu_clkflg = 0; +	if (omap3_has_192mhz_clk()) +		omap_96m_alwon_fck = omap_96m_alwon_fck_3630; + +	if (cpu_is_omap3630()) { +		dpll3_m3x2_ck = dpll3_m3x2_ck_3630; +		dpll4_m2x2_ck = dpll4_m2x2_ck_3630; +		dpll4_m3x2_ck = dpll4_m3x2_ck_3630; +		dpll4_m4x2_ck = dpll4_m4x2_ck_3630; +		dpll4_m5x2_ck = dpll4_m5x2_ck_3630; +		dpll4_m6x2_ck = dpll4_m6x2_ck_3630; +	} + +	/* +	 * XXX This type of dynamic rewriting of the clock tree is +	 * deprecated and should be revised soon. +	 */ +	if (cpu_is_omap3630()) +		dpll4_dd = dpll4_dd_3630; +	else +		dpll4_dd = dpll4_dd_34xx; +  	/*  	 * 3505 must be tested before 3517, since 3517 returns true @@ -3523,13 +3580,20 @@ int __init omap3xxx_clk_init(void)  	 */  	if (soc_is_am35xx()) {  		cpu_mask = RATE_IN_34XX; -		cpu_clkflg = CK_AM35XX; +		omap_clocks_register(am35xx_clks, ARRAY_SIZE(am35xx_clks)); +		omap_clocks_register(omap36xx_am35xx_omap3430es2plus_clks, +				     ARRAY_SIZE(omap36xx_am35xx_omap3430es2plus_clks)); +		omap_clocks_register(omap3xxx_clks, ARRAY_SIZE(omap3xxx_clks));  	} else if (cpu_is_omap3630()) {  		cpu_mask = (RATE_IN_34XX | RATE_IN_36XX); -		cpu_clkflg = CK_36XX; -	} else if (cpu_is_ti816x()) { -		cpu_mask = RATE_IN_TI816X; -		cpu_clkflg = CK_TI816X; +		omap_clocks_register(omap36xx_clks, ARRAY_SIZE(omap36xx_clks)); +		omap_clocks_register(omap36xx_omap3430es2plus_clks, +				     ARRAY_SIZE(omap36xx_omap3430es2plus_clks)); +		omap_clocks_register(omap34xx_omap36xx_clks, +				     ARRAY_SIZE(omap34xx_omap36xx_clks)); +		omap_clocks_register(omap36xx_am35xx_omap3430es2plus_clks, +				     ARRAY_SIZE(omap36xx_am35xx_omap3430es2plus_clks)); +		omap_clocks_register(omap3xxx_clks, ARRAY_SIZE(omap3xxx_clks));  	} else if (soc_is_am33xx()) {  		cpu_mask = RATE_IN_AM33XX;  	} else if (cpu_is_ti814x()) { @@ -3537,49 +3601,32 @@ int __init omap3xxx_clk_init(void)  	} else if (cpu_is_omap34xx()) {  		if (omap_rev() == OMAP3430_REV_ES1_0) {  			cpu_mask = RATE_IN_3430ES1; -			cpu_clkflg = CK_3430ES1; +			omap_clocks_register(omap3430es1_clks, +					     ARRAY_SIZE(omap3430es1_clks)); +			omap_clocks_register(omap34xx_omap36xx_clks, +					     ARRAY_SIZE(omap34xx_omap36xx_clks)); +			omap_clocks_register(omap3xxx_clks, +					     ARRAY_SIZE(omap3xxx_clks));  		} else {  			/*  			 * Assume that anything that we haven't matched yet  			 * has 3430ES2-type clocks.  			 */  			cpu_mask = RATE_IN_3430ES2PLUS; -			cpu_clkflg = CK_3430ES2PLUS; +			omap_clocks_register(omap34xx_omap36xx_clks, +					     ARRAY_SIZE(omap34xx_omap36xx_clks)); +			omap_clocks_register(omap36xx_omap3430es2plus_clks, +					     ARRAY_SIZE(omap36xx_omap3430es2plus_clks)); +			omap_clocks_register(omap36xx_am35xx_omap3430es2plus_clks, +					     ARRAY_SIZE(omap36xx_am35xx_omap3430es2plus_clks)); +			omap_clocks_register(omap3xxx_clks, +					     ARRAY_SIZE(omap3xxx_clks));  		}  	} else {  		WARN(1, "clock: could not identify OMAP3 variant\n");  	} -	if (omap3_has_192mhz_clk()) -		omap_96m_alwon_fck = omap_96m_alwon_fck_3630; - -	if (cpu_is_omap3630()) { -		dpll3_m3x2_ck = dpll3_m3x2_ck_3630; -		dpll4_m2x2_ck = dpll4_m2x2_ck_3630; -		dpll4_m3x2_ck = dpll4_m3x2_ck_3630; -		dpll4_m4x2_ck = dpll4_m4x2_ck_3630; -		dpll4_m5x2_ck = dpll4_m5x2_ck_3630; -		dpll4_m6x2_ck = dpll4_m6x2_ck_3630; -	} - -	/* -	 * XXX This type of dynamic rewriting of the clock tree is -	 * deprecated and should be revised soon. -	 */ -	if (cpu_is_omap3630()) -		dpll4_dd = dpll4_dd_3630; -	else -		dpll4_dd = dpll4_dd_34xx; - -	for (c = omap3xxx_clks; c < omap3xxx_clks + ARRAY_SIZE(omap3xxx_clks); -	     c++) -		if (c->cpu & cpu_clkflg) { -			clkdev_add(&c->lk); -			if (!__clk_init(NULL, c->lk.clk)) -				omap2_init_clk_hw_omap_clocks(c->lk.clk); -		} - -	omap2_clk_disable_autoidle_all(); +		omap2_clk_disable_autoidle_all();  	omap2_clk_enable_init_clocks(enable_init_clks,  				     ARRAY_SIZE(enable_init_clks)); diff --git a/arch/arm/mach-omap2/cclock44xx_data.c b/arch/arm/mach-omap2/cclock44xx_data.c index 3d58f335f17..88e37a47433 100644 --- a/arch/arm/mach-omap2/cclock44xx_data.c +++ b/arch/arm/mach-omap2/cclock44xx_data.c @@ -52,6 +52,13 @@   */  #define OMAP4_DPLL_ABE_DEFFREQ				98304000 +/* + * OMAP4 USB DPLL default frequency. In OMAP4430 TRM version V, section + * "3.6.3.9.5 DPLL_USB Preferred Settings" shows that the preferred + * locked frequency for the USB DPLL is 960MHz. + */ +#define OMAP4_DPLL_USB_DEFFREQ				960000000 +  /* Root clocks */  DEFINE_CLK_FIXED_RATE(extalt_clkin_ck, CLK_IS_ROOT, 59000000, 0x0); @@ -1011,6 +1018,10 @@ DEFINE_CLK_OMAP_MUX(hsmmc2_fclk, "l3_init_clkdm", hsmmc1_fclk_sel,  		    OMAP4430_CM_L3INIT_MMC2_CLKCTRL, OMAP4430_CLKSEL_MASK,  		    hsmmc1_fclk_parents, func_dmic_abe_gfclk_ops); +DEFINE_CLK_GATE(ocp2scp_usb_phy_phy_48m, "func_48m_fclk", &func_48m_fclk, 0x0, +		OMAP4430_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL, +		OMAP4430_OPTFCLKEN_PHY_48M_SHIFT, 0x0, NULL); +  DEFINE_CLK_GATE(sha2md5_fck, "l3_div_ck", &l3_div_ck, 0x0,  		OMAP4430_CM_L4SEC_SHA2MD51_CLKCTRL,  		OMAP4430_MODULEMODE_SWCTRL_SHIFT, 0x0, NULL); @@ -1413,283 +1424,285 @@ DEFINE_CLK_MUX(auxclkreq5_ck, auxclkreq_ck_parents, NULL, 0x0,  	       0x0, NULL);  /* - * clkdev + * clocks specific to omap4460   */ +static struct omap_clk omap446x_clks[] = { +	CLK(NULL,	"div_ts_ck",			&div_ts_ck), +	CLK(NULL,	"bandgap_ts_fclk",		&bandgap_ts_fclk), +}; + +/* + * clocks specific to omap4430 + */ +static struct omap_clk omap443x_clks[] = { +	CLK(NULL,	"bandgap_fclk",			&bandgap_fclk), +}; +/* + * clocks common to omap44xx + */  static struct omap_clk omap44xx_clks[] = { -	CLK(NULL,	"extalt_clkin_ck",		&extalt_clkin_ck,	CK_443X), -	CLK(NULL,	"pad_clks_src_ck",		&pad_clks_src_ck,	CK_443X), -	CLK(NULL,	"pad_clks_ck",			&pad_clks_ck,	CK_443X), -	CLK(NULL,	"pad_slimbus_core_clks_ck",	&pad_slimbus_core_clks_ck,	CK_443X), -	CLK(NULL,	"secure_32k_clk_src_ck",	&secure_32k_clk_src_ck,	CK_443X), -	CLK(NULL,	"slimbus_src_clk",		&slimbus_src_clk,	CK_443X), -	CLK(NULL,	"slimbus_clk",			&slimbus_clk,	CK_443X), -	CLK(NULL,	"sys_32k_ck",			&sys_32k_ck,	CK_443X), -	CLK(NULL,	"virt_12000000_ck",		&virt_12000000_ck,	CK_443X), -	CLK(NULL,	"virt_13000000_ck",		&virt_13000000_ck,	CK_443X), -	CLK(NULL,	"virt_16800000_ck",		&virt_16800000_ck,	CK_443X), -	CLK(NULL,	"virt_19200000_ck",		&virt_19200000_ck,	CK_443X), -	CLK(NULL,	"virt_26000000_ck",		&virt_26000000_ck,	CK_443X), -	CLK(NULL,	"virt_27000000_ck",		&virt_27000000_ck,	CK_443X), -	CLK(NULL,	"virt_38400000_ck",		&virt_38400000_ck,	CK_443X), -	CLK(NULL,	"sys_clkin_ck",			&sys_clkin_ck,	CK_443X), -	CLK(NULL,	"tie_low_clock_ck",		&tie_low_clock_ck,	CK_443X), -	CLK(NULL,	"utmi_phy_clkout_ck",		&utmi_phy_clkout_ck,	CK_443X), -	CLK(NULL,	"xclk60mhsp1_ck",		&xclk60mhsp1_ck,	CK_443X), -	CLK(NULL,	"xclk60mhsp2_ck",		&xclk60mhsp2_ck,	CK_443X), -	CLK(NULL,	"xclk60motg_ck",		&xclk60motg_ck,	CK_443X), -	CLK(NULL,	"abe_dpll_bypass_clk_mux_ck",	&abe_dpll_bypass_clk_mux_ck,	CK_443X), -	CLK(NULL,	"abe_dpll_refclk_mux_ck",	&abe_dpll_refclk_mux_ck,	CK_443X), -	CLK(NULL,	"dpll_abe_ck",			&dpll_abe_ck,	CK_443X), -	CLK(NULL,	"dpll_abe_x2_ck",		&dpll_abe_x2_ck,	CK_443X), -	CLK(NULL,	"dpll_abe_m2x2_ck",		&dpll_abe_m2x2_ck,	CK_443X), -	CLK(NULL,	"abe_24m_fclk",			&abe_24m_fclk,	CK_443X), -	CLK(NULL,	"abe_clk",			&abe_clk,	CK_443X), -	CLK(NULL,	"aess_fclk",			&aess_fclk,	CK_443X), -	CLK(NULL,	"dpll_abe_m3x2_ck",		&dpll_abe_m3x2_ck,	CK_443X), -	CLK(NULL,	"core_hsd_byp_clk_mux_ck",	&core_hsd_byp_clk_mux_ck,	CK_443X), -	CLK(NULL,	"dpll_core_ck",			&dpll_core_ck,	CK_443X), -	CLK(NULL,	"dpll_core_x2_ck",		&dpll_core_x2_ck,	CK_443X), -	CLK(NULL,	"dpll_core_m6x2_ck",		&dpll_core_m6x2_ck,	CK_443X), -	CLK(NULL,	"dbgclk_mux_ck",		&dbgclk_mux_ck,	CK_443X), -	CLK(NULL,	"dpll_core_m2_ck",		&dpll_core_m2_ck,	CK_443X), -	CLK(NULL,	"ddrphy_ck",			&ddrphy_ck,	CK_443X), -	CLK(NULL,	"dpll_core_m5x2_ck",		&dpll_core_m5x2_ck,	CK_443X), -	CLK(NULL,	"div_core_ck",			&div_core_ck,	CK_443X), -	CLK(NULL,	"div_iva_hs_clk",		&div_iva_hs_clk,	CK_443X), -	CLK(NULL,	"div_mpu_hs_clk",		&div_mpu_hs_clk,	CK_443X), -	CLK(NULL,	"dpll_core_m4x2_ck",		&dpll_core_m4x2_ck,	CK_443X), -	CLK(NULL,	"dll_clk_div_ck",		&dll_clk_div_ck,	CK_443X), -	CLK(NULL,	"dpll_abe_m2_ck",		&dpll_abe_m2_ck,	CK_443X), -	CLK(NULL,	"dpll_core_m3x2_ck",		&dpll_core_m3x2_ck,	CK_443X), -	CLK(NULL,	"dpll_core_m7x2_ck",		&dpll_core_m7x2_ck,	CK_443X), -	CLK(NULL,	"iva_hsd_byp_clk_mux_ck",	&iva_hsd_byp_clk_mux_ck,	CK_443X), -	CLK(NULL,	"dpll_iva_ck",			&dpll_iva_ck,	CK_443X), -	CLK(NULL,	"dpll_iva_x2_ck",		&dpll_iva_x2_ck,	CK_443X), -	CLK(NULL,	"dpll_iva_m4x2_ck",		&dpll_iva_m4x2_ck,	CK_443X), -	CLK(NULL,	"dpll_iva_m5x2_ck",		&dpll_iva_m5x2_ck,	CK_443X), -	CLK(NULL,	"dpll_mpu_ck",			&dpll_mpu_ck,	CK_443X), -	CLK(NULL,	"dpll_mpu_m2_ck",		&dpll_mpu_m2_ck,	CK_443X), -	CLK(NULL,	"per_hs_clk_div_ck",		&per_hs_clk_div_ck,	CK_443X), -	CLK(NULL,	"per_hsd_byp_clk_mux_ck",	&per_hsd_byp_clk_mux_ck,	CK_443X), -	CLK(NULL,	"dpll_per_ck",			&dpll_per_ck,	CK_443X), -	CLK(NULL,	"dpll_per_m2_ck",		&dpll_per_m2_ck,	CK_443X), -	CLK(NULL,	"dpll_per_x2_ck",		&dpll_per_x2_ck,	CK_443X), -	CLK(NULL,	"dpll_per_m2x2_ck",		&dpll_per_m2x2_ck,	CK_443X), -	CLK(NULL,	"dpll_per_m3x2_ck",		&dpll_per_m3x2_ck,	CK_443X), -	CLK(NULL,	"dpll_per_m4x2_ck",		&dpll_per_m4x2_ck,	CK_443X), -	CLK(NULL,	"dpll_per_m5x2_ck",		&dpll_per_m5x2_ck,	CK_443X), -	CLK(NULL,	"dpll_per_m6x2_ck",		&dpll_per_m6x2_ck,	CK_443X), -	CLK(NULL,	"dpll_per_m7x2_ck",		&dpll_per_m7x2_ck,	CK_443X), -	CLK(NULL,	"usb_hs_clk_div_ck",		&usb_hs_clk_div_ck,	CK_443X), -	CLK(NULL,	"dpll_usb_ck",			&dpll_usb_ck,	CK_443X), -	CLK(NULL,	"dpll_usb_clkdcoldo_ck",	&dpll_usb_clkdcoldo_ck,	CK_443X), -	CLK(NULL,	"dpll_usb_m2_ck",		&dpll_usb_m2_ck,	CK_443X), -	CLK(NULL,	"ducati_clk_mux_ck",		&ducati_clk_mux_ck,	CK_443X), -	CLK(NULL,	"func_12m_fclk",		&func_12m_fclk,	CK_443X), -	CLK(NULL,	"func_24m_clk",			&func_24m_clk,	CK_443X), -	CLK(NULL,	"func_24mc_fclk",		&func_24mc_fclk,	CK_443X), -	CLK(NULL,	"func_48m_fclk",		&func_48m_fclk,	CK_443X), -	CLK(NULL,	"func_48mc_fclk",		&func_48mc_fclk,	CK_443X), -	CLK(NULL,	"func_64m_fclk",		&func_64m_fclk,	CK_443X), -	CLK(NULL,	"func_96m_fclk",		&func_96m_fclk,	CK_443X), -	CLK(NULL,	"init_60m_fclk",		&init_60m_fclk,	CK_443X), -	CLK(NULL,	"l3_div_ck",			&l3_div_ck,	CK_443X), -	CLK(NULL,	"l4_div_ck",			&l4_div_ck,	CK_443X), -	CLK(NULL,	"lp_clk_div_ck",		&lp_clk_div_ck,	CK_443X), -	CLK(NULL,	"l4_wkup_clk_mux_ck",		&l4_wkup_clk_mux_ck,	CK_443X), -	CLK("smp_twd",	NULL,				&mpu_periphclk,	CK_443X), -	CLK(NULL,	"ocp_abe_iclk",			&ocp_abe_iclk,	CK_443X), -	CLK(NULL,	"per_abe_24m_fclk",		&per_abe_24m_fclk,	CK_443X), -	CLK(NULL,	"per_abe_nc_fclk",		&per_abe_nc_fclk,	CK_443X), -	CLK(NULL,	"syc_clk_div_ck",		&syc_clk_div_ck,	CK_443X), -	CLK(NULL,	"aes1_fck",			&aes1_fck,	CK_443X), -	CLK(NULL,	"aes2_fck",			&aes2_fck,	CK_443X), -	CLK(NULL,	"bandgap_fclk",			&bandgap_fclk,	CK_443X), -	CLK(NULL,	"div_ts_ck",			&div_ts_ck,	CK_446X), -	CLK(NULL,	"bandgap_ts_fclk",		&bandgap_ts_fclk,	CK_446X), -	CLK(NULL,	"dmic_sync_mux_ck",		&dmic_sync_mux_ck,	CK_443X), -	CLK(NULL,	"func_dmic_abe_gfclk",			&func_dmic_abe_gfclk,	CK_443X), -	CLK(NULL,	"dss_sys_clk",			&dss_sys_clk,	CK_443X), -	CLK(NULL,	"dss_tv_clk",			&dss_tv_clk,	CK_443X), -	CLK(NULL,	"dss_dss_clk",			&dss_dss_clk,	CK_443X), -	CLK(NULL,	"dss_48mhz_clk",		&dss_48mhz_clk,	CK_443X), -	CLK(NULL,	"dss_fck",			&dss_fck,	CK_443X), -	CLK("omapdss_dss",	"ick",			&dss_fck,	CK_443X), -	CLK(NULL,	"fdif_fck",			&fdif_fck,	CK_443X), -	CLK(NULL,	"gpio1_dbclk",			&gpio1_dbclk,	CK_443X), -	CLK(NULL,	"gpio2_dbclk",			&gpio2_dbclk,	CK_443X), -	CLK(NULL,	"gpio3_dbclk",			&gpio3_dbclk,	CK_443X), -	CLK(NULL,	"gpio4_dbclk",			&gpio4_dbclk,	CK_443X), -	CLK(NULL,	"gpio5_dbclk",			&gpio5_dbclk,	CK_443X), -	CLK(NULL,	"gpio6_dbclk",			&gpio6_dbclk,	CK_443X), -	CLK(NULL,	"sgx_clk_mux",			&sgx_clk_mux,	CK_443X), -	CLK(NULL,	"hsi_fck",			&hsi_fck,	CK_443X), -	CLK(NULL,	"iss_ctrlclk",			&iss_ctrlclk,	CK_443X), -	CLK(NULL,	"mcasp_sync_mux_ck",		&mcasp_sync_mux_ck,	CK_443X), -	CLK(NULL,	"func_mcasp_abe_gfclk",			&func_mcasp_abe_gfclk,	CK_443X), -	CLK(NULL,	"mcbsp1_sync_mux_ck",		&mcbsp1_sync_mux_ck,	CK_443X), -	CLK(NULL,	"func_mcbsp1_gfclk",			&func_mcbsp1_gfclk,	CK_443X), -	CLK(NULL,	"mcbsp2_sync_mux_ck",		&mcbsp2_sync_mux_ck,	CK_443X), -	CLK(NULL,	"func_mcbsp2_gfclk",			&func_mcbsp2_gfclk,	CK_443X), -	CLK(NULL,	"mcbsp3_sync_mux_ck",		&mcbsp3_sync_mux_ck,	CK_443X), -	CLK(NULL,	"func_mcbsp3_gfclk",			&func_mcbsp3_gfclk,	CK_443X), -	CLK(NULL,	"mcbsp4_sync_mux_ck",		&mcbsp4_sync_mux_ck,	CK_443X), -	CLK(NULL,	"per_mcbsp4_gfclk",			&per_mcbsp4_gfclk,	CK_443X), -	CLK(NULL,	"hsmmc1_fclk",			&hsmmc1_fclk,	CK_443X), -	CLK(NULL,	"hsmmc2_fclk",			&hsmmc2_fclk,	CK_443X), -	CLK(NULL,	"sha2md5_fck",			&sha2md5_fck,	CK_443X), -	CLK(NULL,	"slimbus1_fclk_1",		&slimbus1_fclk_1,	CK_443X), -	CLK(NULL,	"slimbus1_fclk_0",		&slimbus1_fclk_0,	CK_443X), -	CLK(NULL,	"slimbus1_fclk_2",		&slimbus1_fclk_2,	CK_443X), -	CLK(NULL,	"slimbus1_slimbus_clk",		&slimbus1_slimbus_clk,	CK_443X), -	CLK(NULL,	"slimbus2_fclk_1",		&slimbus2_fclk_1,	CK_443X), -	CLK(NULL,	"slimbus2_fclk_0",		&slimbus2_fclk_0,	CK_443X), -	CLK(NULL,	"slimbus2_slimbus_clk",		&slimbus2_slimbus_clk,	CK_443X), -	CLK(NULL,	"smartreflex_core_fck",		&smartreflex_core_fck,	CK_443X), -	CLK(NULL,	"smartreflex_iva_fck",		&smartreflex_iva_fck,	CK_443X), -	CLK(NULL,	"smartreflex_mpu_fck",		&smartreflex_mpu_fck,	CK_443X), -	CLK(NULL,	"dmt1_clk_mux",			&dmt1_clk_mux,	CK_443X), -	CLK(NULL,	"cm2_dm10_mux",			&cm2_dm10_mux,	CK_443X), -	CLK(NULL,	"cm2_dm11_mux",			&cm2_dm11_mux,	CK_443X), -	CLK(NULL,	"cm2_dm2_mux",			&cm2_dm2_mux,	CK_443X), -	CLK(NULL,	"cm2_dm3_mux",			&cm2_dm3_mux,	CK_443X), -	CLK(NULL,	"cm2_dm4_mux",			&cm2_dm4_mux,	CK_443X), -	CLK(NULL,	"timer5_sync_mux",		&timer5_sync_mux,	CK_443X), -	CLK(NULL,	"timer6_sync_mux",			&timer6_sync_mux,	CK_443X), -	CLK(NULL,	"timer7_sync_mux",			&timer7_sync_mux,	CK_443X), -	CLK(NULL,	"timer8_sync_mux",			&timer8_sync_mux,	CK_443X), -	CLK(NULL,	"cm2_dm9_mux",			&cm2_dm9_mux,	CK_443X), -	CLK(NULL,	"usb_host_fs_fck",		&usb_host_fs_fck,	CK_443X), -	CLK("usbhs_omap",	"fs_fck",		&usb_host_fs_fck,	CK_443X), -	CLK(NULL,	"utmi_p1_gfclk",		&utmi_p1_gfclk,	CK_443X), -	CLK(NULL,	"usb_host_hs_utmi_p1_clk",	&usb_host_hs_utmi_p1_clk,	CK_443X), -	CLK(NULL,	"utmi_p2_gfclk",		&utmi_p2_gfclk,	CK_443X), -	CLK(NULL,	"usb_host_hs_utmi_p2_clk",	&usb_host_hs_utmi_p2_clk,	CK_443X), -	CLK(NULL,	"usb_host_hs_utmi_p3_clk",	&usb_host_hs_utmi_p3_clk,	CK_443X), -	CLK(NULL,	"usb_host_hs_hsic480m_p1_clk",	&usb_host_hs_hsic480m_p1_clk,	CK_443X), -	CLK(NULL,	"usb_host_hs_hsic60m_p1_clk",	&usb_host_hs_hsic60m_p1_clk,	CK_443X), -	CLK(NULL,	"usb_host_hs_hsic60m_p2_clk",	&usb_host_hs_hsic60m_p2_clk,	CK_443X), -	CLK(NULL,	"usb_host_hs_hsic480m_p2_clk",	&usb_host_hs_hsic480m_p2_clk,	CK_443X), -	CLK(NULL,	"usb_host_hs_func48mclk",	&usb_host_hs_func48mclk,	CK_443X), -	CLK(NULL,	"usb_host_hs_fck",		&usb_host_hs_fck,	CK_443X), -	CLK("usbhs_omap",	"hs_fck",		&usb_host_hs_fck,	CK_443X), -	CLK(NULL,	"otg_60m_gfclk",		&otg_60m_gfclk,	CK_443X), -	CLK(NULL,	"usb_otg_hs_xclk",		&usb_otg_hs_xclk,	CK_443X), -	CLK(NULL,	"usb_otg_hs_ick",		&usb_otg_hs_ick,	CK_443X), -	CLK("musb-omap2430",	"ick",			&usb_otg_hs_ick,	CK_443X), -	CLK(NULL,	"usb_phy_cm_clk32k",		&usb_phy_cm_clk32k,	CK_443X), -	CLK(NULL,	"usb_tll_hs_usb_ch2_clk",	&usb_tll_hs_usb_ch2_clk,	CK_443X), -	CLK(NULL,	"usb_tll_hs_usb_ch0_clk",	&usb_tll_hs_usb_ch0_clk,	CK_443X), -	CLK(NULL,	"usb_tll_hs_usb_ch1_clk",	&usb_tll_hs_usb_ch1_clk,	CK_443X), -	CLK(NULL,	"usb_tll_hs_ick",		&usb_tll_hs_ick,	CK_443X), -	CLK("usbhs_omap",	"usbtll_ick",		&usb_tll_hs_ick,	CK_443X), -	CLK("usbhs_tll",	"usbtll_ick",		&usb_tll_hs_ick,	CK_443X), -	CLK(NULL,	"usim_ck",			&usim_ck,	CK_443X), -	CLK(NULL,	"usim_fclk",			&usim_fclk,	CK_443X), -	CLK(NULL,	"pmd_stm_clock_mux_ck",		&pmd_stm_clock_mux_ck,	CK_443X), -	CLK(NULL,	"pmd_trace_clk_mux_ck",		&pmd_trace_clk_mux_ck,	CK_443X), -	CLK(NULL,	"stm_clk_div_ck",		&stm_clk_div_ck,	CK_443X), -	CLK(NULL,	"trace_clk_div_ck",		&trace_clk_div_ck,	CK_443X), -	CLK(NULL,	"auxclk0_src_ck",		&auxclk0_src_ck,	CK_443X), -	CLK(NULL,	"auxclk0_ck",			&auxclk0_ck,	CK_443X), -	CLK(NULL,	"auxclkreq0_ck",		&auxclkreq0_ck,	CK_443X), -	CLK(NULL,	"auxclk1_src_ck",		&auxclk1_src_ck,	CK_443X), -	CLK(NULL,	"auxclk1_ck",			&auxclk1_ck,	CK_443X), -	CLK(NULL,	"auxclkreq1_ck",		&auxclkreq1_ck,	CK_443X), -	CLK(NULL,	"auxclk2_src_ck",		&auxclk2_src_ck,	CK_443X), -	CLK(NULL,	"auxclk2_ck",			&auxclk2_ck,	CK_443X), -	CLK(NULL,	"auxclkreq2_ck",		&auxclkreq2_ck,	CK_443X), -	CLK(NULL,	"auxclk3_src_ck",		&auxclk3_src_ck,	CK_443X), -	CLK(NULL,	"auxclk3_ck",			&auxclk3_ck,	CK_443X), -	CLK(NULL,	"auxclkreq3_ck",		&auxclkreq3_ck,	CK_443X), -	CLK(NULL,	"auxclk4_src_ck",		&auxclk4_src_ck,	CK_443X), -	CLK(NULL,	"auxclk4_ck",			&auxclk4_ck,	CK_443X), -	CLK(NULL,	"auxclkreq4_ck",		&auxclkreq4_ck,	CK_443X), -	CLK(NULL,	"auxclk5_src_ck",		&auxclk5_src_ck,	CK_443X), -	CLK(NULL,	"auxclk5_ck",			&auxclk5_ck,	CK_443X), -	CLK(NULL,	"auxclkreq5_ck",		&auxclkreq5_ck,	CK_443X), -	CLK("omap-gpmc",	"fck",			&dummy_ck,	CK_443X), -	CLK("omap_i2c.1",	"ick",			&dummy_ck,	CK_443X), -	CLK("omap_i2c.2",	"ick",			&dummy_ck,	CK_443X), -	CLK("omap_i2c.3",	"ick",			&dummy_ck,	CK_443X), -	CLK("omap_i2c.4",	"ick",			&dummy_ck,	CK_443X), -	CLK(NULL,	"mailboxes_ick",		&dummy_ck,	CK_443X), -	CLK("omap_hsmmc.0",	"ick",			&dummy_ck,	CK_443X), -	CLK("omap_hsmmc.1",	"ick",			&dummy_ck,	CK_443X), -	CLK("omap_hsmmc.2",	"ick",			&dummy_ck,	CK_443X), -	CLK("omap_hsmmc.3",	"ick",			&dummy_ck,	CK_443X), -	CLK("omap_hsmmc.4",	"ick",			&dummy_ck,	CK_443X), -	CLK("omap-mcbsp.1",	"ick",			&dummy_ck,	CK_443X), -	CLK("omap-mcbsp.2",	"ick",			&dummy_ck,	CK_443X), -	CLK("omap-mcbsp.3",	"ick",			&dummy_ck,	CK_443X), -	CLK("omap-mcbsp.4",	"ick",			&dummy_ck,	CK_443X), -	CLK("omap2_mcspi.1",	"ick",			&dummy_ck,	CK_443X), -	CLK("omap2_mcspi.2",	"ick",			&dummy_ck,	CK_443X), -	CLK("omap2_mcspi.3",	"ick",			&dummy_ck,	CK_443X), -	CLK("omap2_mcspi.4",	"ick",			&dummy_ck,	CK_443X), -	CLK(NULL,	"uart1_ick",			&dummy_ck,	CK_443X), -	CLK(NULL,	"uart2_ick",			&dummy_ck,	CK_443X), -	CLK(NULL,	"uart3_ick",			&dummy_ck,	CK_443X), -	CLK(NULL,	"uart4_ick",			&dummy_ck,	CK_443X), -	CLK("usbhs_omap",	"usbhost_ick",		&dummy_ck,		CK_443X), -	CLK("usbhs_omap",	"usbtll_fck",		&dummy_ck,	CK_443X), -	CLK("usbhs_tll",	"usbtll_fck",		&dummy_ck,	CK_443X), -	CLK("omap_wdt",	"ick",				&dummy_ck,	CK_443X), -	CLK(NULL,	"timer_32k_ck",	&sys_32k_ck,	CK_443X), +	CLK(NULL,	"extalt_clkin_ck",		&extalt_clkin_ck), +	CLK(NULL,	"pad_clks_src_ck",		&pad_clks_src_ck), +	CLK(NULL,	"pad_clks_ck",			&pad_clks_ck), +	CLK(NULL,	"pad_slimbus_core_clks_ck",	&pad_slimbus_core_clks_ck), +	CLK(NULL,	"secure_32k_clk_src_ck",	&secure_32k_clk_src_ck), +	CLK(NULL,	"slimbus_src_clk",		&slimbus_src_clk), +	CLK(NULL,	"slimbus_clk",			&slimbus_clk), +	CLK(NULL,	"sys_32k_ck",			&sys_32k_ck), +	CLK(NULL,	"virt_12000000_ck",		&virt_12000000_ck), +	CLK(NULL,	"virt_13000000_ck",		&virt_13000000_ck), +	CLK(NULL,	"virt_16800000_ck",		&virt_16800000_ck), +	CLK(NULL,	"virt_19200000_ck",		&virt_19200000_ck), +	CLK(NULL,	"virt_26000000_ck",		&virt_26000000_ck), +	CLK(NULL,	"virt_27000000_ck",		&virt_27000000_ck), +	CLK(NULL,	"virt_38400000_ck",		&virt_38400000_ck), +	CLK(NULL,	"sys_clkin_ck",			&sys_clkin_ck), +	CLK(NULL,	"tie_low_clock_ck",		&tie_low_clock_ck), +	CLK(NULL,	"utmi_phy_clkout_ck",		&utmi_phy_clkout_ck), +	CLK(NULL,	"xclk60mhsp1_ck",		&xclk60mhsp1_ck), +	CLK(NULL,	"xclk60mhsp2_ck",		&xclk60mhsp2_ck), +	CLK(NULL,	"xclk60motg_ck",		&xclk60motg_ck), +	CLK(NULL,	"abe_dpll_bypass_clk_mux_ck",	&abe_dpll_bypass_clk_mux_ck), +	CLK(NULL,	"abe_dpll_refclk_mux_ck",	&abe_dpll_refclk_mux_ck), +	CLK(NULL,	"dpll_abe_ck",			&dpll_abe_ck), +	CLK(NULL,	"dpll_abe_x2_ck",		&dpll_abe_x2_ck), +	CLK(NULL,	"dpll_abe_m2x2_ck",		&dpll_abe_m2x2_ck), +	CLK(NULL,	"abe_24m_fclk",			&abe_24m_fclk), +	CLK(NULL,	"abe_clk",			&abe_clk), +	CLK(NULL,	"aess_fclk",			&aess_fclk), +	CLK(NULL,	"dpll_abe_m3x2_ck",		&dpll_abe_m3x2_ck), +	CLK(NULL,	"core_hsd_byp_clk_mux_ck",	&core_hsd_byp_clk_mux_ck), +	CLK(NULL,	"dpll_core_ck",			&dpll_core_ck), +	CLK(NULL,	"dpll_core_x2_ck",		&dpll_core_x2_ck), +	CLK(NULL,	"dpll_core_m6x2_ck",		&dpll_core_m6x2_ck), +	CLK(NULL,	"dbgclk_mux_ck",		&dbgclk_mux_ck), +	CLK(NULL,	"dpll_core_m2_ck",		&dpll_core_m2_ck), +	CLK(NULL,	"ddrphy_ck",			&ddrphy_ck), +	CLK(NULL,	"dpll_core_m5x2_ck",		&dpll_core_m5x2_ck), +	CLK(NULL,	"div_core_ck",			&div_core_ck), +	CLK(NULL,	"div_iva_hs_clk",		&div_iva_hs_clk), +	CLK(NULL,	"div_mpu_hs_clk",		&div_mpu_hs_clk), +	CLK(NULL,	"dpll_core_m4x2_ck",		&dpll_core_m4x2_ck), +	CLK(NULL,	"dll_clk_div_ck",		&dll_clk_div_ck), +	CLK(NULL,	"dpll_abe_m2_ck",		&dpll_abe_m2_ck), +	CLK(NULL,	"dpll_core_m3x2_ck",		&dpll_core_m3x2_ck), +	CLK(NULL,	"dpll_core_m7x2_ck",		&dpll_core_m7x2_ck), +	CLK(NULL,	"iva_hsd_byp_clk_mux_ck",	&iva_hsd_byp_clk_mux_ck), +	CLK(NULL,	"dpll_iva_ck",			&dpll_iva_ck), +	CLK(NULL,	"dpll_iva_x2_ck",		&dpll_iva_x2_ck), +	CLK(NULL,	"dpll_iva_m4x2_ck",		&dpll_iva_m4x2_ck), +	CLK(NULL,	"dpll_iva_m5x2_ck",		&dpll_iva_m5x2_ck), +	CLK(NULL,	"dpll_mpu_ck",			&dpll_mpu_ck), +	CLK(NULL,	"dpll_mpu_m2_ck",		&dpll_mpu_m2_ck), +	CLK(NULL,	"per_hs_clk_div_ck",		&per_hs_clk_div_ck), +	CLK(NULL,	"per_hsd_byp_clk_mux_ck",	&per_hsd_byp_clk_mux_ck), +	CLK(NULL,	"dpll_per_ck",			&dpll_per_ck), +	CLK(NULL,	"dpll_per_m2_ck",		&dpll_per_m2_ck), +	CLK(NULL,	"dpll_per_x2_ck",		&dpll_per_x2_ck), +	CLK(NULL,	"dpll_per_m2x2_ck",		&dpll_per_m2x2_ck), +	CLK(NULL,	"dpll_per_m3x2_ck",		&dpll_per_m3x2_ck), +	CLK(NULL,	"dpll_per_m4x2_ck",		&dpll_per_m4x2_ck), +	CLK(NULL,	"dpll_per_m5x2_ck",		&dpll_per_m5x2_ck), +	CLK(NULL,	"dpll_per_m6x2_ck",		&dpll_per_m6x2_ck), +	CLK(NULL,	"dpll_per_m7x2_ck",		&dpll_per_m7x2_ck), +	CLK(NULL,	"usb_hs_clk_div_ck",		&usb_hs_clk_div_ck), +	CLK(NULL,	"dpll_usb_ck",			&dpll_usb_ck), +	CLK(NULL,	"dpll_usb_clkdcoldo_ck",	&dpll_usb_clkdcoldo_ck), +	CLK(NULL,	"dpll_usb_m2_ck",		&dpll_usb_m2_ck), +	CLK(NULL,	"ducati_clk_mux_ck",		&ducati_clk_mux_ck), +	CLK(NULL,	"func_12m_fclk",		&func_12m_fclk), +	CLK(NULL,	"func_24m_clk",			&func_24m_clk), +	CLK(NULL,	"func_24mc_fclk",		&func_24mc_fclk), +	CLK(NULL,	"func_48m_fclk",		&func_48m_fclk), +	CLK(NULL,	"func_48mc_fclk",		&func_48mc_fclk), +	CLK(NULL,	"func_64m_fclk",		&func_64m_fclk), +	CLK(NULL,	"func_96m_fclk",		&func_96m_fclk), +	CLK(NULL,	"init_60m_fclk",		&init_60m_fclk), +	CLK(NULL,	"l3_div_ck",			&l3_div_ck), +	CLK(NULL,	"l4_div_ck",			&l4_div_ck), +	CLK(NULL,	"lp_clk_div_ck",		&lp_clk_div_ck), +	CLK(NULL,	"l4_wkup_clk_mux_ck",		&l4_wkup_clk_mux_ck), +	CLK("smp_twd",	NULL,				&mpu_periphclk), +	CLK(NULL,	"ocp_abe_iclk",			&ocp_abe_iclk), +	CLK(NULL,	"per_abe_24m_fclk",		&per_abe_24m_fclk), +	CLK(NULL,	"per_abe_nc_fclk",		&per_abe_nc_fclk), +	CLK(NULL,	"syc_clk_div_ck",		&syc_clk_div_ck), +	CLK(NULL,	"aes1_fck",			&aes1_fck), +	CLK(NULL,	"aes2_fck",			&aes2_fck), +	CLK(NULL,	"dmic_sync_mux_ck",		&dmic_sync_mux_ck), +	CLK(NULL,	"func_dmic_abe_gfclk",		&func_dmic_abe_gfclk), +	CLK(NULL,	"dss_sys_clk",			&dss_sys_clk), +	CLK(NULL,	"dss_tv_clk",			&dss_tv_clk), +	CLK(NULL,	"dss_dss_clk",			&dss_dss_clk), +	CLK(NULL,	"dss_48mhz_clk",		&dss_48mhz_clk), +	CLK(NULL,	"dss_fck",			&dss_fck), +	CLK("omapdss_dss",	"ick",			&dss_fck), +	CLK(NULL,	"fdif_fck",			&fdif_fck), +	CLK(NULL,	"gpio1_dbclk",			&gpio1_dbclk), +	CLK(NULL,	"gpio2_dbclk",			&gpio2_dbclk), +	CLK(NULL,	"gpio3_dbclk",			&gpio3_dbclk), +	CLK(NULL,	"gpio4_dbclk",			&gpio4_dbclk), +	CLK(NULL,	"gpio5_dbclk",			&gpio5_dbclk), +	CLK(NULL,	"gpio6_dbclk",			&gpio6_dbclk), +	CLK(NULL,	"sgx_clk_mux",			&sgx_clk_mux), +	CLK(NULL,	"hsi_fck",			&hsi_fck), +	CLK(NULL,	"iss_ctrlclk",			&iss_ctrlclk), +	CLK(NULL,	"mcasp_sync_mux_ck",		&mcasp_sync_mux_ck), +	CLK(NULL,	"func_mcasp_abe_gfclk",		&func_mcasp_abe_gfclk), +	CLK(NULL,	"mcbsp1_sync_mux_ck",		&mcbsp1_sync_mux_ck), +	CLK(NULL,	"func_mcbsp1_gfclk",		&func_mcbsp1_gfclk), +	CLK(NULL,	"mcbsp2_sync_mux_ck",		&mcbsp2_sync_mux_ck), +	CLK(NULL,	"func_mcbsp2_gfclk",		&func_mcbsp2_gfclk), +	CLK(NULL,	"mcbsp3_sync_mux_ck",		&mcbsp3_sync_mux_ck), +	CLK(NULL,	"func_mcbsp3_gfclk",		&func_mcbsp3_gfclk), +	CLK(NULL,	"mcbsp4_sync_mux_ck",		&mcbsp4_sync_mux_ck), +	CLK(NULL,	"per_mcbsp4_gfclk",		&per_mcbsp4_gfclk), +	CLK(NULL,	"hsmmc1_fclk",			&hsmmc1_fclk), +	CLK(NULL,	"hsmmc2_fclk",			&hsmmc2_fclk), +	CLK(NULL,	"ocp2scp_usb_phy_phy_48m",	&ocp2scp_usb_phy_phy_48m), +	CLK(NULL,	"sha2md5_fck",			&sha2md5_fck), +	CLK(NULL,	"slimbus1_fclk_1",		&slimbus1_fclk_1), +	CLK(NULL,	"slimbus1_fclk_0",		&slimbus1_fclk_0), +	CLK(NULL,	"slimbus1_fclk_2",		&slimbus1_fclk_2), +	CLK(NULL,	"slimbus1_slimbus_clk",		&slimbus1_slimbus_clk), +	CLK(NULL,	"slimbus2_fclk_1",		&slimbus2_fclk_1), +	CLK(NULL,	"slimbus2_fclk_0",		&slimbus2_fclk_0), +	CLK(NULL,	"slimbus2_slimbus_clk",		&slimbus2_slimbus_clk), +	CLK(NULL,	"smartreflex_core_fck",		&smartreflex_core_fck), +	CLK(NULL,	"smartreflex_iva_fck",		&smartreflex_iva_fck), +	CLK(NULL,	"smartreflex_mpu_fck",		&smartreflex_mpu_fck), +	CLK(NULL,	"dmt1_clk_mux",			&dmt1_clk_mux), +	CLK(NULL,	"cm2_dm10_mux",			&cm2_dm10_mux), +	CLK(NULL,	"cm2_dm11_mux",			&cm2_dm11_mux), +	CLK(NULL,	"cm2_dm2_mux",			&cm2_dm2_mux), +	CLK(NULL,	"cm2_dm3_mux",			&cm2_dm3_mux), +	CLK(NULL,	"cm2_dm4_mux",			&cm2_dm4_mux), +	CLK(NULL,	"timer5_sync_mux",		&timer5_sync_mux), +	CLK(NULL,	"timer6_sync_mux",		&timer6_sync_mux), +	CLK(NULL,	"timer7_sync_mux",		&timer7_sync_mux), +	CLK(NULL,	"timer8_sync_mux",		&timer8_sync_mux), +	CLK(NULL,	"cm2_dm9_mux",			&cm2_dm9_mux), +	CLK(NULL,	"usb_host_fs_fck",		&usb_host_fs_fck), +	CLK("usbhs_omap",	"fs_fck",		&usb_host_fs_fck), +	CLK(NULL,	"utmi_p1_gfclk",		&utmi_p1_gfclk), +	CLK(NULL,	"usb_host_hs_utmi_p1_clk",	&usb_host_hs_utmi_p1_clk), +	CLK(NULL,	"utmi_p2_gfclk",		&utmi_p2_gfclk), +	CLK(NULL,	"usb_host_hs_utmi_p2_clk",	&usb_host_hs_utmi_p2_clk), +	CLK(NULL,	"usb_host_hs_utmi_p3_clk",	&usb_host_hs_utmi_p3_clk), +	CLK(NULL,	"usb_host_hs_hsic480m_p1_clk",	&usb_host_hs_hsic480m_p1_clk), +	CLK(NULL,	"usb_host_hs_hsic60m_p1_clk",	&usb_host_hs_hsic60m_p1_clk), +	CLK(NULL,	"usb_host_hs_hsic60m_p2_clk",	&usb_host_hs_hsic60m_p2_clk), +	CLK(NULL,	"usb_host_hs_hsic480m_p2_clk",	&usb_host_hs_hsic480m_p2_clk), +	CLK(NULL,	"usb_host_hs_func48mclk",	&usb_host_hs_func48mclk), +	CLK(NULL,	"usb_host_hs_fck",		&usb_host_hs_fck), +	CLK("usbhs_omap",	"hs_fck",		&usb_host_hs_fck), +	CLK(NULL,	"otg_60m_gfclk",		&otg_60m_gfclk), +	CLK(NULL,	"usb_otg_hs_xclk",		&usb_otg_hs_xclk), +	CLK(NULL,	"usb_otg_hs_ick",		&usb_otg_hs_ick), +	CLK("musb-omap2430",	"ick",			&usb_otg_hs_ick), +	CLK(NULL,	"usb_phy_cm_clk32k",		&usb_phy_cm_clk32k), +	CLK(NULL,	"usb_tll_hs_usb_ch2_clk",	&usb_tll_hs_usb_ch2_clk), +	CLK(NULL,	"usb_tll_hs_usb_ch0_clk",	&usb_tll_hs_usb_ch0_clk), +	CLK(NULL,	"usb_tll_hs_usb_ch1_clk",	&usb_tll_hs_usb_ch1_clk), +	CLK(NULL,	"usb_tll_hs_ick",		&usb_tll_hs_ick), +	CLK("usbhs_omap",	"usbtll_ick",		&usb_tll_hs_ick), +	CLK("usbhs_tll",	"usbtll_ick",		&usb_tll_hs_ick), +	CLK(NULL,	"usim_ck",			&usim_ck), +	CLK(NULL,	"usim_fclk",			&usim_fclk), +	CLK(NULL,	"pmd_stm_clock_mux_ck",		&pmd_stm_clock_mux_ck), +	CLK(NULL,	"pmd_trace_clk_mux_ck",		&pmd_trace_clk_mux_ck), +	CLK(NULL,	"stm_clk_div_ck",		&stm_clk_div_ck), +	CLK(NULL,	"trace_clk_div_ck",		&trace_clk_div_ck), +	CLK(NULL,	"auxclk0_src_ck",		&auxclk0_src_ck), +	CLK(NULL,	"auxclk0_ck",			&auxclk0_ck), +	CLK(NULL,	"auxclkreq0_ck",		&auxclkreq0_ck), +	CLK(NULL,	"auxclk1_src_ck",		&auxclk1_src_ck), +	CLK(NULL,	"auxclk1_ck",			&auxclk1_ck), +	CLK(NULL,	"auxclkreq1_ck",		&auxclkreq1_ck), +	CLK(NULL,	"auxclk2_src_ck",		&auxclk2_src_ck), +	CLK(NULL,	"auxclk2_ck",			&auxclk2_ck), +	CLK(NULL,	"auxclkreq2_ck",		&auxclkreq2_ck), +	CLK(NULL,	"auxclk3_src_ck",		&auxclk3_src_ck), +	CLK(NULL,	"auxclk3_ck",			&auxclk3_ck), +	CLK(NULL,	"auxclkreq3_ck",		&auxclkreq3_ck), +	CLK(NULL,	"auxclk4_src_ck",		&auxclk4_src_ck), +	CLK(NULL,	"auxclk4_ck",			&auxclk4_ck), +	CLK(NULL,	"auxclkreq4_ck",		&auxclkreq4_ck), +	CLK(NULL,	"auxclk5_src_ck",		&auxclk5_src_ck), +	CLK(NULL,	"auxclk5_ck",			&auxclk5_ck), +	CLK(NULL,	"auxclkreq5_ck",		&auxclkreq5_ck), +	CLK("omap-gpmc",	"fck",			&dummy_ck), +	CLK("omap_i2c.1",	"ick",			&dummy_ck), +	CLK("omap_i2c.2",	"ick",			&dummy_ck), +	CLK("omap_i2c.3",	"ick",			&dummy_ck), +	CLK("omap_i2c.4",	"ick",			&dummy_ck), +	CLK(NULL,	"mailboxes_ick",		&dummy_ck), +	CLK("omap_hsmmc.0",	"ick",			&dummy_ck), +	CLK("omap_hsmmc.1",	"ick",			&dummy_ck), +	CLK("omap_hsmmc.2",	"ick",			&dummy_ck), +	CLK("omap_hsmmc.3",	"ick",			&dummy_ck), +	CLK("omap_hsmmc.4",	"ick",			&dummy_ck), +	CLK("omap-mcbsp.1",	"ick",			&dummy_ck), +	CLK("omap-mcbsp.2",	"ick",			&dummy_ck), +	CLK("omap-mcbsp.3",	"ick",			&dummy_ck), +	CLK("omap-mcbsp.4",	"ick",			&dummy_ck), +	CLK("omap2_mcspi.1",	"ick",			&dummy_ck), +	CLK("omap2_mcspi.2",	"ick",			&dummy_ck), +	CLK("omap2_mcspi.3",	"ick",			&dummy_ck), +	CLK("omap2_mcspi.4",	"ick",			&dummy_ck), +	CLK(NULL,	"uart1_ick",			&dummy_ck), +	CLK(NULL,	"uart2_ick",			&dummy_ck), +	CLK(NULL,	"uart3_ick",			&dummy_ck), +	CLK(NULL,	"uart4_ick",			&dummy_ck), +	CLK("usbhs_omap",	"usbhost_ick",		&dummy_ck), +	CLK("usbhs_omap",	"usbtll_fck",		&dummy_ck), +	CLK("usbhs_tll",	"usbtll_fck",		&dummy_ck), +	CLK("omap_wdt",	"ick",				&dummy_ck), +	CLK(NULL,	"timer_32k_ck",	&sys_32k_ck),  	/* TODO: Remove "omap_timer.X" aliases once DT migration is complete */ -	CLK("omap_timer.1",	"timer_sys_ck",	&sys_clkin_ck,	CK_443X), -	CLK("omap_timer.2",	"timer_sys_ck",	&sys_clkin_ck,	CK_443X), -	CLK("omap_timer.3",	"timer_sys_ck",	&sys_clkin_ck,	CK_443X), -	CLK("omap_timer.4",	"timer_sys_ck",	&sys_clkin_ck,	CK_443X), -	CLK("omap_timer.9",	"timer_sys_ck",	&sys_clkin_ck,	CK_443X), -	CLK("omap_timer.10",	"timer_sys_ck",	&sys_clkin_ck,	CK_443X), -	CLK("omap_timer.11",	"timer_sys_ck",	&sys_clkin_ck,	CK_443X), -	CLK("omap_timer.5",	"timer_sys_ck",	&syc_clk_div_ck,	CK_443X), -	CLK("omap_timer.6",	"timer_sys_ck",	&syc_clk_div_ck,	CK_443X), -	CLK("omap_timer.7",	"timer_sys_ck",	&syc_clk_div_ck,	CK_443X), -	CLK("omap_timer.8",	"timer_sys_ck",	&syc_clk_div_ck,	CK_443X), -	CLK("4a318000.timer",	"timer_sys_ck",	&sys_clkin_ck,	CK_443X), -	CLK("48032000.timer",	"timer_sys_ck",	&sys_clkin_ck,	CK_443X), -	CLK("48034000.timer",	"timer_sys_ck",	&sys_clkin_ck,	CK_443X), -	CLK("48036000.timer",	"timer_sys_ck",	&sys_clkin_ck,	CK_443X), -	CLK("4803e000.timer",	"timer_sys_ck",	&sys_clkin_ck,	CK_443X), -	CLK("48086000.timer",	"timer_sys_ck",	&sys_clkin_ck,	CK_443X), -	CLK("48088000.timer",	"timer_sys_ck",	&sys_clkin_ck,	CK_443X), -	CLK("40138000.timer",	"timer_sys_ck",	&syc_clk_div_ck,	CK_443X), -	CLK("4013a000.timer",	"timer_sys_ck",	&syc_clk_div_ck,	CK_443X), -	CLK("4013c000.timer",	"timer_sys_ck",	&syc_clk_div_ck,	CK_443X), -	CLK("4013e000.timer",	"timer_sys_ck",	&syc_clk_div_ck,	CK_443X), -	CLK(NULL,	"cpufreq_ck",	&dpll_mpu_ck,	CK_443X), +	CLK("omap_timer.1",	"timer_sys_ck",	&sys_clkin_ck), +	CLK("omap_timer.2",	"timer_sys_ck",	&sys_clkin_ck), +	CLK("omap_timer.3",	"timer_sys_ck",	&sys_clkin_ck), +	CLK("omap_timer.4",	"timer_sys_ck",	&sys_clkin_ck), +	CLK("omap_timer.9",	"timer_sys_ck",	&sys_clkin_ck), +	CLK("omap_timer.10",	"timer_sys_ck",	&sys_clkin_ck), +	CLK("omap_timer.11",	"timer_sys_ck",	&sys_clkin_ck), +	CLK("omap_timer.5",	"timer_sys_ck",	&syc_clk_div_ck), +	CLK("omap_timer.6",	"timer_sys_ck",	&syc_clk_div_ck), +	CLK("omap_timer.7",	"timer_sys_ck",	&syc_clk_div_ck), +	CLK("omap_timer.8",	"timer_sys_ck",	&syc_clk_div_ck), +	CLK("4a318000.timer",	"timer_sys_ck",	&sys_clkin_ck), +	CLK("48032000.timer",	"timer_sys_ck",	&sys_clkin_ck), +	CLK("48034000.timer",	"timer_sys_ck",	&sys_clkin_ck), +	CLK("48036000.timer",	"timer_sys_ck",	&sys_clkin_ck), +	CLK("4803e000.timer",	"timer_sys_ck",	&sys_clkin_ck), +	CLK("48086000.timer",	"timer_sys_ck",	&sys_clkin_ck), +	CLK("48088000.timer",	"timer_sys_ck",	&sys_clkin_ck), +	CLK("40138000.timer",	"timer_sys_ck",	&syc_clk_div_ck), +	CLK("4013a000.timer",	"timer_sys_ck",	&syc_clk_div_ck), +	CLK("4013c000.timer",	"timer_sys_ck",	&syc_clk_div_ck), +	CLK("4013e000.timer",	"timer_sys_ck",	&syc_clk_div_ck), +	CLK(NULL,	"cpufreq_ck",	&dpll_mpu_ck),  };  int __init omap4xxx_clk_init(void)  { -	u32 cpu_clkflg; -	struct omap_clk *c;  	int rc;  	if (cpu_is_omap443x()) {  		cpu_mask = RATE_IN_4430; -		cpu_clkflg = CK_443X; +		omap_clocks_register(omap443x_clks, ARRAY_SIZE(omap443x_clks));  	} else if (cpu_is_omap446x() || cpu_is_omap447x()) {  		cpu_mask = RATE_IN_4460 | RATE_IN_4430; -		cpu_clkflg = CK_446X | CK_443X; - +		omap_clocks_register(omap446x_clks, ARRAY_SIZE(omap446x_clks));  		if (cpu_is_omap447x())  			pr_warn("WARNING: OMAP4470 clock data incomplete!\n");  	} else {  		return 0;  	} -	for (c = omap44xx_clks; c < omap44xx_clks + ARRAY_SIZE(omap44xx_clks); -									c++) { -		if (c->cpu & cpu_clkflg) { -			clkdev_add(&c->lk); -			if (!__clk_init(NULL, c->lk.clk)) -				omap2_init_clk_hw_omap_clocks(c->lk.clk); -		} -	} +	omap_clocks_register(omap44xx_clks, ARRAY_SIZE(omap44xx_clks));  	omap2_clk_disable_autoidle_all(); @@ -1705,5 +1718,13 @@ int __init omap4xxx_clk_init(void)  	if (rc)  		pr_err("%s: failed to configure ABE DPLL!\n", __func__); +	/* +	 * Lock USB DPLL on OMAP4 devices so that the L3INIT power +	 * domain can transition to retention state when not in use. +	 */ +	rc = clk_set_rate(&dpll_usb_ck, OMAP4_DPLL_USB_DEFFREQ); +	if (rc) +		pr_err("%s: failed to configure USB DPLL!\n", __func__); +  	return 0;  } diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c index 2191f25ad21..0c38ca96c84 100644 --- a/arch/arm/mach-omap2/clock.c +++ b/arch/arm/mach-omap2/clock.c @@ -23,7 +23,7 @@  #include <linux/clk-provider.h>  #include <linux/io.h>  #include <linux/bitops.h> - +#include <linux/clk-private.h>  #include <asm/cpu.h> @@ -569,6 +569,21 @@ const struct clk_hw_omap_ops clkhwops_wait = {  };  /** + * omap_clocks_register - register an array of omap_clk + * @ocs: pointer to an array of omap_clk to register + */ +void __init omap_clocks_register(struct omap_clk oclks[], int cnt) +{ +	struct omap_clk *c; + +	for (c = oclks; c < oclks + cnt; c++) { +		clkdev_add(&c->lk); +		if (!__clk_init(NULL, c->lk.clk)) +			omap2_init_clk_hw_omap_clocks(c->lk.clk); +	} +} + +/**   * omap2_clk_switch_mpurate_at_boot - switch ARM MPU rate by boot-time argument   * @mpurate_ck_name: clk name of the clock to change rate   * diff --git a/arch/arm/mach-omap2/clock.h b/arch/arm/mach-omap2/clock.h index 60ddd8612b4..7aa32cd292f 100644 --- a/arch/arm/mach-omap2/clock.h +++ b/arch/arm/mach-omap2/clock.h @@ -27,9 +27,8 @@ struct omap_clk {  	struct clk_lookup		lk;  }; -#define CLK(dev, con, ck, cp)		\ +#define CLK(dev, con, ck)		\  	{				\ -		 .cpu = cp,		\  		.lk = {			\  			.dev_id = dev,	\  			.con_id = con,	\ @@ -37,22 +36,6 @@ struct omap_clk {  		},			\  	} -/* Platform flags for the clkdev-OMAP integration code */ -#define CK_242X		(1 << 0) -#define CK_243X		(1 << 1)	/* 243x, 253x */ -#define CK_3430ES1	(1 << 2)	/* 34xxES1 only */ -#define CK_3430ES2PLUS	(1 << 3)	/* 34xxES2, ES3, non-Sitara 35xx only */ -#define CK_AM35XX	(1 << 4)	/* Sitara AM35xx */ -#define CK_36XX		(1 << 5)	/* 36xx/37xx-specific clocks */ -#define CK_443X		(1 << 6) -#define CK_TI816X	(1 << 7) -#define CK_446X		(1 << 8) -#define CK_AM33XX	(1 << 9)	/* AM33xx specific clocks */ - - -#define CK_34XX		(CK_3430ES1 | CK_3430ES2PLUS) -#define CK_3XXX		(CK_34XX | CK_AM35XX | CK_36XX) -  struct clockdomain;  #define to_clk_hw_omap(_hw) container_of(_hw, struct clk_hw_omap, hw) @@ -480,4 +463,5 @@ extern int am33xx_clk_init(void);  extern int omap2_clkops_enable_clkdm(struct clk_hw *hw);  extern void omap2_clkops_disable_clkdm(struct clk_hw *hw); +extern void omap_clocks_register(struct omap_clk *oclks, int cnt);  #endif diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h index bf70e2b57ff..d555cf2459e 100644 --- a/arch/arm/mach-omap2/common.h +++ b/arch/arm/mach-omap2/common.h @@ -109,6 +109,14 @@ void am35xx_init_late(void);  void ti81xx_init_late(void);  int omap2_common_pm_late_init(void); +#ifdef CONFIG_SOC_BUS +void omap_soc_device_init(void); +#else +static inline void omap_soc_device_init(void) +{ +} +#endif +  #if defined(CONFIG_SOC_OMAP2420) || defined(CONFIG_SOC_OMAP2430)  void omap2xxx_restart(char mode, const char *cmd);  #else @@ -248,7 +256,6 @@ extern int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state);  extern int omap4_finish_suspend(unsigned long cpu_state);  extern void omap4_cpu_resume(void);  extern int omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state); -extern u32 omap4_mpuss_read_prev_context_state(void);  #else  static inline int omap4_enter_lowpower(unsigned int cpu,  					unsigned int power_state) @@ -276,10 +283,6 @@ static inline int omap4_finish_suspend(unsigned long cpu_state)  static inline void omap4_cpu_resume(void)  {} -static inline u32 omap4_mpuss_read_prev_context_state(void) -{ -	return 0; -}  #endif  struct omap_sdrc_params; @@ -292,5 +295,8 @@ extern void omap_reserve(void);  struct omap_hwmod;  extern int omap_dss_reset(struct omap_hwmod *); +/* SoC specific clock initializer */ +extern int (*omap_clk_init)(void); +  #endif /* __ASSEMBLER__ */  #endif /* __ARCH_ARM_MACH_OMAP2PLUS_COMMON_H */ diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c index 80392fca86c..e18709d3b95 100644 --- a/arch/arm/mach-omap2/cpuidle34xx.c +++ b/arch/arm/mach-omap2/cpuidle34xx.c @@ -26,6 +26,7 @@  #include <linux/cpuidle.h>  #include <linux/export.h>  #include <linux/cpu_pm.h> +#include <asm/cpuidle.h>  #include "powerdomain.h"  #include "clockdomain.h" @@ -99,16 +100,18 @@ static struct omap3_idle_statedata omap3_idle_data[] = {  	},  }; -/* Private functions */ - -static int __omap3_enter_idle(struct cpuidle_device *dev, -				struct cpuidle_driver *drv, -				int index) +/** + * omap3_enter_idle - Programs OMAP3 to enter the specified state + * @dev: cpuidle device + * @drv: cpuidle driver + * @index: the index of state to be entered + */ +static int omap3_enter_idle(struct cpuidle_device *dev, +			    struct cpuidle_driver *drv, +			    int index)  {  	struct omap3_idle_statedata *cx = &omap3_idle_data[index]; -	local_fiq_disable(); -  	if (omap_irq_pending() || need_resched())  		goto return_sleep_time; @@ -143,28 +146,11 @@ static int __omap3_enter_idle(struct cpuidle_device *dev,  		clkdm_allow_idle(mpu_pd->pwrdm_clkdms[0]);  return_sleep_time: -	local_fiq_enable();  	return index;  }  /** - * omap3_enter_idle - Programs OMAP3 to enter the specified state - * @dev: cpuidle device - * @drv: cpuidle driver - * @index: the index of state to be entered - * - * Called from the CPUidle framework to program the device to the - * specified target state selected by the governor. - */ -static inline int omap3_enter_idle(struct cpuidle_device *dev, -				struct cpuidle_driver *drv, -				int index) -{ -	return cpuidle_wrap_enter(dev, drv, index, __omap3_enter_idle); -} - -/**   * next_valid_state - Find next valid C-state   * @dev: cpuidle device   * @drv: cpuidle driver @@ -271,11 +257,9 @@ static int omap3_enter_idle_bm(struct cpuidle_device *dev,  	return ret;  } -static DEFINE_PER_CPU(struct cpuidle_device, omap3_idle_dev); -  static struct cpuidle_driver omap3_idle_driver = { -	.name =		"omap3_idle", -	.owner =	THIS_MODULE, +	.name             = "omap3_idle", +	.owner            = THIS_MODULE,  	.states = {  		{  			.enter		  = omap3_enter_idle_bm, @@ -348,8 +332,6 @@ static struct cpuidle_driver omap3_idle_driver = {   */  int __init omap3_idle_init(void)  { -	struct cpuidle_device *dev; -  	mpu_pd = pwrdm_lookup("mpu_pwrdm");  	core_pd = pwrdm_lookup("core_pwrdm");  	per_pd = pwrdm_lookup("per_pwrdm"); @@ -358,16 +340,5 @@ int __init omap3_idle_init(void)  	if (!mpu_pd || !core_pd || !per_pd || !cam_pd)  		return -ENODEV; -	cpuidle_register_driver(&omap3_idle_driver); - -	dev = &per_cpu(omap3_idle_dev, smp_processor_id()); -	dev->cpu = 0; - -	if (cpuidle_register_device(dev)) { -		printk(KERN_ERR "%s: CPUidle register device failed\n", -		       __func__); -		return -EIO; -	} - -	return 0; +	return cpuidle_register(&omap3_idle_driver, NULL);  } diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c index d639aef0ded..c443f2e97e1 100644 --- a/arch/arm/mach-omap2/cpuidle44xx.c +++ b/arch/arm/mach-omap2/cpuidle44xx.c @@ -1,7 +1,7 @@  /* - * OMAP4 CPU idle Routines + * OMAP4+ CPU idle Routines   * - * Copyright (C) 2011 Texas Instruments, Inc. + * Copyright (C) 2011-2013 Texas Instruments, Inc.   * Santosh Shilimkar <santosh.shilimkar@ti.com>   * Rajendra Nayak <rnayak@ti.com>   * @@ -14,8 +14,8 @@  #include <linux/cpuidle.h>  #include <linux/cpu_pm.h>  #include <linux/export.h> -#include <linux/clockchips.h> +#include <asm/cpuidle.h>  #include <asm/proc-fns.h>  #include "common.h" @@ -24,13 +24,13 @@  #include "clockdomain.h"  /* Machine specific information */ -struct omap4_idle_statedata { +struct idle_statedata {  	u32 cpu_state;  	u32 mpu_logic_state;  	u32 mpu_state;  }; -static struct omap4_idle_statedata omap4_idle_data[] = { +static struct idle_statedata omap4_idle_data[] = {  	{  		.cpu_state = PWRDM_POWER_ON,  		.mpu_state = PWRDM_POWER_ON, @@ -53,11 +53,12 @@ static struct clockdomain *cpu_clkdm[NR_CPUS];  static atomic_t abort_barrier;  static bool cpu_done[NR_CPUS]; +static struct idle_statedata *state_ptr = &omap4_idle_data[0];  /* Private functions */  /** - * omap4_enter_idle_coupled_[simple/coupled] - OMAP4 cpuidle entry functions + * omap_enter_idle_[simple/coupled] - OMAP4PLUS cpuidle entry functions   * @dev: cpuidle device   * @drv: cpuidle driver   * @index: the index of state to be entered @@ -66,25 +67,19 @@ static bool cpu_done[NR_CPUS];   * specified low power state selected by the governor.   * Returns the amount of time spent in the low power state.   */ -static int omap4_enter_idle_simple(struct cpuidle_device *dev, +static int omap_enter_idle_simple(struct cpuidle_device *dev,  			struct cpuidle_driver *drv,  			int index)  { -	local_fiq_disable();  	omap_do_wfi(); -	local_fiq_enable(); -  	return index;  } -static int omap4_enter_idle_coupled(struct cpuidle_device *dev, +static int omap_enter_idle_coupled(struct cpuidle_device *dev,  			struct cpuidle_driver *drv,  			int index)  { -	struct omap4_idle_statedata *cx = &omap4_idle_data[index]; -	int cpu_id = smp_processor_id(); - -	local_fiq_disable(); +	struct idle_statedata *cx = state_ptr + index;  	/*  	 * CPU0 has to wait and stay ON until CPU1 is OFF state. @@ -109,8 +104,6 @@ static int omap4_enter_idle_coupled(struct cpuidle_device *dev,  		}  	} -	clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, &cpu_id); -  	/*  	 * Call idle CPU PM enter notifier chain so that  	 * VFP and per CPU interrupt context is saved. @@ -136,6 +129,7 @@ static int omap4_enter_idle_coupled(struct cpuidle_device *dev,  	/* Wakeup CPU1 only if it is not offlined */  	if (dev->cpu == 0 && cpumask_test_cpu(1, cpu_online_mask)) {  		clkdm_wakeup(cpu_clkdm[1]); +		omap_set_pwrdm_state(cpu_pd[1], PWRDM_POWER_ON);  		clkdm_allow_idle(cpu_clkdm[1]);  	} @@ -149,63 +143,49 @@ static int omap4_enter_idle_coupled(struct cpuidle_device *dev,  	 * Call idle CPU cluster PM exit notifier chain  	 * to restore GIC and wakeupgen context.  	 */ -	if (omap4_mpuss_read_prev_context_state()) +	if ((cx->mpu_state == PWRDM_POWER_RET) && +		(cx->mpu_logic_state == PWRDM_POWER_OFF))  		cpu_cluster_pm_exit(); -	clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &cpu_id); -  fail:  	cpuidle_coupled_parallel_barrier(dev, &abort_barrier);  	cpu_done[dev->cpu] = false; -	local_fiq_enable(); -  	return index;  } -/* - * For each cpu, setup the broadcast timer because local timers - * stops for the states above C1. - */ -static void omap_setup_broadcast_timer(void *arg) -{ -	int cpu = smp_processor_id(); -	clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ON, &cpu); -} - -static DEFINE_PER_CPU(struct cpuidle_device, omap4_idle_dev); -  static struct cpuidle_driver omap4_idle_driver = {  	.name				= "omap4_idle",  	.owner				= THIS_MODULE, -	.en_core_tk_irqen		= 1,  	.states = {  		{  			/* C1 - CPU0 ON + CPU1 ON + MPU ON */  			.exit_latency = 2 + 2,  			.target_residency = 5,  			.flags = CPUIDLE_FLAG_TIME_VALID, -			.enter = omap4_enter_idle_simple, +			.enter = omap_enter_idle_simple,  			.name = "C1", -			.desc = "MPUSS ON" +			.desc = "CPUx ON, MPUSS ON"  		},  		{  			/* C2 - CPU0 OFF + CPU1 OFF + MPU CSWR */  			.exit_latency = 328 + 440,  			.target_residency = 960, -			.flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED, -			.enter = omap4_enter_idle_coupled, +			.flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED | +			         CPUIDLE_FLAG_TIMER_STOP, +			.enter = omap_enter_idle_coupled,  			.name = "C2", -			.desc = "MPUSS CSWR", +			.desc = "CPUx OFF, MPUSS CSWR",  		},  		{  			/* C3 - CPU0 OFF + CPU1 OFF + MPU OSWR */  			.exit_latency = 460 + 518,  			.target_residency = 1100, -			.flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED, -			.enter = omap4_enter_idle_coupled, +			.flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED | +			         CPUIDLE_FLAG_TIMER_STOP, +			.enter = omap_enter_idle_coupled,  			.name = "C3", -			.desc = "MPUSS OSWR", +			.desc = "CPUx OFF, MPUSS OSWR",  		},  	},  	.state_count = ARRAY_SIZE(omap4_idle_data), @@ -215,16 +195,13 @@ static struct cpuidle_driver omap4_idle_driver = {  /* Public functions */  /** - * omap4_idle_init - Init routine for OMAP4 idle + * omap4_idle_init - Init routine for OMAP4+ idle   * - * Registers the OMAP4 specific cpuidle driver to the cpuidle + * Registers the OMAP4+ specific cpuidle driver to the cpuidle   * framework with the valid set of states.   */  int __init omap4_idle_init(void)  { -	struct cpuidle_device *dev; -	unsigned int cpu_id = 0; -  	mpu_pd = pwrdm_lookup("mpu_pwrdm");  	cpu_pd[0] = pwrdm_lookup("cpu0_pwrdm");  	cpu_pd[1] = pwrdm_lookup("cpu1_pwrdm"); @@ -236,22 +213,5 @@ int __init omap4_idle_init(void)  	if (!cpu_clkdm[0] || !cpu_clkdm[1])  		return -ENODEV; -	/* Configure the broadcast timer on each cpu */ -	on_each_cpu(omap_setup_broadcast_timer, NULL, 1); - -	for_each_cpu(cpu_id, cpu_online_mask) { -		dev = &per_cpu(omap4_idle_dev, cpu_id); -		dev->cpu = cpu_id; -#ifdef CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED -		dev->coupled_cpus = *cpu_online_mask; -#endif -		cpuidle_register_driver(&omap4_idle_driver); - -		if (cpuidle_register_device(dev)) { -			pr_err("%s: CPUidle register failed\n", __func__); -			return -EIO; -		} -	} - -	return 0; +	return cpuidle_register(&omap4_idle_driver, cpu_online_mask);  } diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index 1ec7f059771..4269fc14569 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c @@ -504,140 +504,31 @@ static void omap_init_rng(void)  	WARN(IS_ERR(pdev), "Can't build omap_device for omap_rng\n");  } -#if defined(CONFIG_CRYPTO_DEV_OMAP_SHAM) || defined(CONFIG_CRYPTO_DEV_OMAP_SHAM_MODULE) - -#ifdef CONFIG_ARCH_OMAP2 -static struct resource omap2_sham_resources[] = { -	{ -		.start	= OMAP24XX_SEC_SHA1MD5_BASE, -		.end	= OMAP24XX_SEC_SHA1MD5_BASE + 0x64, -		.flags	= IORESOURCE_MEM, -	}, -	{ -		.start	= 51 + OMAP_INTC_START, -		.flags	= IORESOURCE_IRQ, -	} -}; -static int omap2_sham_resources_sz = ARRAY_SIZE(omap2_sham_resources); -#else -#define omap2_sham_resources		NULL -#define omap2_sham_resources_sz		0 -#endif - -#ifdef CONFIG_ARCH_OMAP3 -static struct resource omap3_sham_resources[] = { -	{ -		.start	= OMAP34XX_SEC_SHA1MD5_BASE, -		.end	= OMAP34XX_SEC_SHA1MD5_BASE + 0x64, -		.flags	= IORESOURCE_MEM, -	}, -	{ -		.start	= 49 + OMAP_INTC_START, -		.flags	= IORESOURCE_IRQ, -	}, -	{ -		.start	= OMAP34XX_DMA_SHA1MD5_RX, -		.flags	= IORESOURCE_DMA, -	} -}; -static int omap3_sham_resources_sz = ARRAY_SIZE(omap3_sham_resources); -#else -#define omap3_sham_resources		NULL -#define omap3_sham_resources_sz		0 -#endif - -static struct platform_device sham_device = { -	.name		= "omap-sham", -	.id		= -1, -}; - -static void omap_init_sham(void) +static void __init omap_init_sham(void)  { -	if (cpu_is_omap24xx()) { -		sham_device.resource = omap2_sham_resources; -		sham_device.num_resources = omap2_sham_resources_sz; -	} else if (cpu_is_omap34xx()) { -		sham_device.resource = omap3_sham_resources; -		sham_device.num_resources = omap3_sham_resources_sz; -	} else { -		pr_err("%s: platform not supported\n", __func__); -		return; -	} -	platform_device_register(&sham_device); -} -#else -static inline void omap_init_sham(void) { } -#endif - -#if defined(CONFIG_CRYPTO_DEV_OMAP_AES) || defined(CONFIG_CRYPTO_DEV_OMAP_AES_MODULE) - -#ifdef CONFIG_ARCH_OMAP2 -static struct resource omap2_aes_resources[] = { -	{ -		.start	= OMAP24XX_SEC_AES_BASE, -		.end	= OMAP24XX_SEC_AES_BASE + 0x4C, -		.flags	= IORESOURCE_MEM, -	}, -	{ -		.start	= OMAP24XX_DMA_AES_TX, -		.flags	= IORESOURCE_DMA, -	}, -	{ -		.start	= OMAP24XX_DMA_AES_RX, -		.flags	= IORESOURCE_DMA, -	} -}; -static int omap2_aes_resources_sz = ARRAY_SIZE(omap2_aes_resources); -#else -#define omap2_aes_resources		NULL -#define omap2_aes_resources_sz		0 -#endif +	struct omap_hwmod *oh; +	struct platform_device *pdev; -#ifdef CONFIG_ARCH_OMAP3 -static struct resource omap3_aes_resources[] = { -	{ -		.start	= OMAP34XX_SEC_AES_BASE, -		.end	= OMAP34XX_SEC_AES_BASE + 0x4C, -		.flags	= IORESOURCE_MEM, -	}, -	{ -		.start	= OMAP34XX_DMA_AES2_TX, -		.flags	= IORESOURCE_DMA, -	}, -	{ -		.start	= OMAP34XX_DMA_AES2_RX, -		.flags	= IORESOURCE_DMA, -	} -}; -static int omap3_aes_resources_sz = ARRAY_SIZE(omap3_aes_resources); -#else -#define omap3_aes_resources		NULL -#define omap3_aes_resources_sz		0 -#endif +	oh = omap_hwmod_lookup("sham"); +	if (!oh) +		return; -static struct platform_device aes_device = { -	.name		= "omap-aes", -	.id		= -1, -}; +	pdev = omap_device_build("omap-sham", -1, oh, NULL, 0); +	WARN(IS_ERR(pdev), "Can't build omap_device for omap-sham\n"); +} -static void omap_init_aes(void) +static void __init omap_init_aes(void)  { -	if (cpu_is_omap24xx()) { -		aes_device.resource = omap2_aes_resources; -		aes_device.num_resources = omap2_aes_resources_sz; -	} else if (cpu_is_omap34xx()) { -		aes_device.resource = omap3_aes_resources; -		aes_device.num_resources = omap3_aes_resources_sz; -	} else { -		pr_err("%s: platform not supported\n", __func__); +	struct omap_hwmod *oh; +	struct platform_device *pdev; + +	oh = omap_hwmod_lookup("aes"); +	if (!oh)  		return; -	} -	platform_device_register(&aes_device); -} -#else -static inline void omap_init_aes(void) { } -#endif +	pdev = omap_device_build("omap-aes", -1, oh, NULL, 0); +	WARN(IS_ERR(pdev), "Can't build omap_device for omap-aes\n"); +}  /*-------------------------------------------------------------------------*/ @@ -764,11 +655,11 @@ static int __init omap2_init_devices(void)  		omap_init_dmic();  		omap_init_mcpdm();  		omap_init_mcspi(); +		omap_init_sham(); +		omap_init_aes();  	}  	omap_init_sti();  	omap_init_rng(); -	omap_init_sham(); -	omap_init_aes();  	omap_init_vout();  	omap_init_ocp2scp(); diff --git a/arch/arm/mach-omap2/dma.h b/arch/arm/mach-omap2/dma.h index eba80dbc521..65f80cacf17 100644 --- a/arch/arm/mach-omap2/dma.h +++ b/arch/arm/mach-omap2/dma.h @@ -22,69 +22,20 @@  /* DMA channels for 24xx */  #define OMAP24XX_DMA_NO_DEVICE		0 -#define OMAP24XX_DMA_XTI_DMA		1	/* S_DMA_0 */  #define OMAP24XX_DMA_EXT_DMAREQ0	2	/* S_DMA_1 */  #define OMAP24XX_DMA_EXT_DMAREQ1	3	/* S_DMA_2 */  #define OMAP24XX_DMA_GPMC		4	/* S_DMA_3 */ -#define OMAP24XX_DMA_GFX		5	/* S_DMA_4 */ -#define OMAP24XX_DMA_DSS		6	/* S_DMA_5 */ -#define OMAP242X_DMA_VLYNQ_TX		7	/* S_DMA_6 */ -#define OMAP24XX_DMA_EXT_DMAREQ2	7	/* S_DMA_6 */ -#define OMAP24XX_DMA_CWT		8	/* S_DMA_7 */  #define OMAP24XX_DMA_AES_TX		9	/* S_DMA_8 */  #define OMAP24XX_DMA_AES_RX		10	/* S_DMA_9 */ -#define OMAP24XX_DMA_DES_TX		11	/* S_DMA_10 */ -#define OMAP24XX_DMA_DES_RX		12	/* S_DMA_11 */ -#define OMAP24XX_DMA_SHA1MD5_RX		13	/* S_DMA_12 */ -#define OMAP34XX_DMA_SHA2MD5_RX		13	/* S_DMA_12 */  #define OMAP242X_DMA_EXT_DMAREQ2	14	/* S_DMA_13 */  #define OMAP242X_DMA_EXT_DMAREQ3	15	/* S_DMA_14 */  #define OMAP242X_DMA_EXT_DMAREQ4	16	/* S_DMA_15 */ -#define OMAP242X_DMA_EAC_AC_RD		17	/* S_DMA_16 */ -#define OMAP242X_DMA_EAC_AC_WR		18	/* S_DMA_17 */ -#define OMAP242X_DMA_EAC_MD_UL_RD	19	/* S_DMA_18 */ -#define OMAP242X_DMA_EAC_MD_UL_WR	20	/* S_DMA_19 */ -#define OMAP242X_DMA_EAC_MD_DL_RD	21	/* S_DMA_20 */ -#define OMAP242X_DMA_EAC_MD_DL_WR	22	/* S_DMA_21 */ -#define OMAP242X_DMA_EAC_BT_UL_RD	23	/* S_DMA_22 */ -#define OMAP242X_DMA_EAC_BT_UL_WR	24	/* S_DMA_23 */ -#define OMAP242X_DMA_EAC_BT_DL_RD	25	/* S_DMA_24 */ -#define OMAP242X_DMA_EAC_BT_DL_WR	26	/* S_DMA_25 */ -#define OMAP243X_DMA_EXT_DMAREQ3	14	/* S_DMA_13 */ -#define OMAP24XX_DMA_SPI3_TX0		15	/* S_DMA_14 */ -#define OMAP24XX_DMA_SPI3_RX0		16	/* S_DMA_15 */ -#define OMAP24XX_DMA_MCBSP3_TX		17	/* S_DMA_16 */ -#define OMAP24XX_DMA_MCBSP3_RX		18	/* S_DMA_17 */ -#define OMAP24XX_DMA_MCBSP4_TX		19	/* S_DMA_18 */ -#define OMAP24XX_DMA_MCBSP4_RX		20	/* S_DMA_19 */ -#define OMAP24XX_DMA_MCBSP5_TX		21	/* S_DMA_20 */ -#define OMAP24XX_DMA_MCBSP5_RX		22	/* S_DMA_21 */ -#define OMAP24XX_DMA_SPI3_TX1		23	/* S_DMA_22 */ -#define OMAP24XX_DMA_SPI3_RX1		24	/* S_DMA_23 */ -#define OMAP243X_DMA_EXT_DMAREQ4	25	/* S_DMA_24 */ -#define OMAP243X_DMA_EXT_DMAREQ5	26	/* S_DMA_25 */  #define OMAP34XX_DMA_I2C3_TX		25	/* S_DMA_24 */  #define OMAP34XX_DMA_I2C3_RX		26	/* S_DMA_25 */  #define OMAP24XX_DMA_I2C1_TX		27	/* S_DMA_26 */  #define OMAP24XX_DMA_I2C1_RX		28	/* S_DMA_27 */  #define OMAP24XX_DMA_I2C2_TX		29	/* S_DMA_28 */  #define OMAP24XX_DMA_I2C2_RX		30	/* S_DMA_29 */ -#define OMAP24XX_DMA_MCBSP1_TX		31	/* S_DMA_30 */ -#define OMAP24XX_DMA_MCBSP1_RX		32	/* S_DMA_31 */ -#define OMAP24XX_DMA_MCBSP2_TX		33	/* S_DMA_32 */ -#define OMAP24XX_DMA_MCBSP2_RX		34	/* S_DMA_33 */ -#define OMAP24XX_DMA_SPI1_TX0		35	/* S_DMA_34 */ -#define OMAP24XX_DMA_SPI1_RX0		36	/* S_DMA_35 */ -#define OMAP24XX_DMA_SPI1_TX1		37	/* S_DMA_36 */ -#define OMAP24XX_DMA_SPI1_RX1		38	/* S_DMA_37 */ -#define OMAP24XX_DMA_SPI1_TX2		39	/* S_DMA_38 */ -#define OMAP24XX_DMA_SPI1_RX2		40	/* S_DMA_39 */ -#define OMAP24XX_DMA_SPI1_TX3		41	/* S_DMA_40 */ -#define OMAP24XX_DMA_SPI1_RX3		42	/* S_DMA_41 */ -#define OMAP24XX_DMA_SPI2_TX0		43	/* S_DMA_42 */ -#define OMAP24XX_DMA_SPI2_RX0		44	/* S_DMA_43 */ -#define OMAP24XX_DMA_SPI2_TX1		45	/* S_DMA_44 */ -#define OMAP24XX_DMA_SPI2_RX1		46	/* S_DMA_45 */  #define OMAP24XX_DMA_MMC2_TX		47	/* S_DMA_46 */  #define OMAP24XX_DMA_MMC2_RX		48	/* S_DMA_47 */  #define OMAP24XX_DMA_UART1_TX		49	/* S_DMA_48 */ @@ -93,33 +44,12 @@  #define OMAP24XX_DMA_UART2_RX		52	/* S_DMA_51 */  #define OMAP24XX_DMA_UART3_TX		53	/* S_DMA_52 */  #define OMAP24XX_DMA_UART3_RX		54	/* S_DMA_53 */ -#define OMAP24XX_DMA_USB_W2FC_TX0	55	/* S_DMA_54 */ -#define OMAP24XX_DMA_USB_W2FC_RX0	56	/* S_DMA_55 */ -#define OMAP24XX_DMA_USB_W2FC_TX1	57	/* S_DMA_56 */ -#define OMAP24XX_DMA_USB_W2FC_RX1	58	/* S_DMA_57 */ -#define OMAP24XX_DMA_USB_W2FC_TX2	59	/* S_DMA_58 */ -#define OMAP24XX_DMA_USB_W2FC_RX2	60	/* S_DMA_59 */  #define OMAP24XX_DMA_MMC1_TX		61	/* S_DMA_60 */  #define OMAP24XX_DMA_MMC1_RX		62	/* S_DMA_61 */ -#define OMAP24XX_DMA_MS			63	/* S_DMA_62 */  #define OMAP242X_DMA_EXT_DMAREQ5	64	/* S_DMA_63 */ -#define OMAP243X_DMA_EXT_DMAREQ6	64	/* S_DMA_63 */ -#define OMAP34XX_DMA_EXT_DMAREQ3	64	/* S_DMA_63 */  #define OMAP34XX_DMA_AES2_TX		65	/* S_DMA_64 */  #define OMAP34XX_DMA_AES2_RX		66	/* S_DMA_65 */ -#define OMAP34XX_DMA_DES2_TX		67	/* S_DMA_66 */ -#define OMAP34XX_DMA_DES2_RX		68	/* S_DMA_67 */  #define OMAP34XX_DMA_SHA1MD5_RX		69	/* S_DMA_68 */ -#define OMAP34XX_DMA_SPI4_TX0		70	/* S_DMA_69 */ -#define OMAP34XX_DMA_SPI4_RX0		71	/* S_DMA_70 */ -#define OMAP34XX_DSS_DMA0		72	/* S_DMA_71 */ -#define OMAP34XX_DSS_DMA1		73	/* S_DMA_72 */ -#define OMAP34XX_DSS_DMA2		74	/* S_DMA_73 */ -#define OMAP34XX_DSS_DMA3		75	/* S_DMA_74 */ -#define OMAP34XX_DMA_MMC3_TX		77	/* S_DMA_76 */ -#define OMAP34XX_DMA_MMC3_RX		78	/* S_DMA_77 */ -#define OMAP34XX_DMA_USIM_TX		79	/* S_DMA_78 */ -#define OMAP34XX_DMA_USIM_RX		80	/* S_DMA_79 */  #define OMAP36XX_DMA_UART4_TX		81	/* S_DMA_80 */  #define OMAP36XX_DMA_UART4_RX		82	/* S_DMA_81 */ diff --git a/arch/arm/mach-omap2/dss-common.c b/arch/arm/mach-omap2/dss-common.c index 4be5cfc81ab..9c49bbe825f 100644 --- a/arch/arm/mach-omap2/dss-common.c +++ b/arch/arm/mach-omap2/dss-common.c @@ -27,9 +27,7 @@  #include <linux/gpio.h>  #include <video/omapdss.h> -#include <video/omap-panel-tfp410.h> -#include <video/omap-panel-nokia-dsi.h> -#include <video/omap-panel-picodlp.h> +#include <video/omap-panel-data.h>  #include "soc.h"  #include "dss-common.h" diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c index ff0bc9e51aa..0f4c18e6e60 100644 --- a/arch/arm/mach-omap2/id.c +++ b/arch/arm/mach-omap2/id.c @@ -18,6 +18,11 @@  #include <linux/kernel.h>  #include <linux/init.h>  #include <linux/io.h> +#include <linux/slab.h> + +#ifdef CONFIG_SOC_BUS +#include <linux/sys_soc.h> +#endif  #include <asm/cputype.h> @@ -31,8 +36,11 @@  #define OMAP4_SILICON_TYPE_STANDARD		0x01  #define OMAP4_SILICON_TYPE_PERFORMANCE		0x02 +#define OMAP_SOC_MAX_NAME_LENGTH		16 +  static unsigned int omap_revision; -static const char *cpu_rev; +static char soc_name[OMAP_SOC_MAX_NAME_LENGTH]; +static char soc_rev[OMAP_SOC_MAX_NAME_LENGTH];  u32 omap_features;  unsigned int omap_rev(void) @@ -169,9 +177,12 @@ void __init omap2xxx_check_revision(void)  		j = i;  	} -	pr_info("OMAP%04x", omap_rev() >> 16); +	sprintf(soc_name, "OMAP%04x", omap_rev() >> 16); +	sprintf(soc_rev, "ES%x", (omap_rev() >> 12) & 0xf); + +	pr_info("%s", soc_name);  	if ((omap_rev() >> 8) & 0x0f) -		pr_info("ES%x", (omap_rev() >> 12) & 0xf); +		pr_info("%s", soc_rev);  	pr_info("\n");  } @@ -211,8 +222,10 @@ static void __init omap3_cpuinfo(void)  		cpu_name = "OMAP3503";  	} +	sprintf(soc_name, "%s", cpu_name); +  	/* Print verbose information */ -	pr_info("%s ES%s (", cpu_name, cpu_rev); +	pr_info("%s %s (", soc_name, soc_rev);  	OMAP3_SHOW_FEATURE(l2cache);  	OMAP3_SHOW_FEATURE(iva); @@ -291,6 +304,7 @@ void __init ti81xx_check_features(void)  void __init omap3xxx_check_revision(void)  { +	const char *cpu_rev;  	u32 cpuid, idcode;  	u16 hawkeye;  	u8 rev; @@ -300,7 +314,7 @@ void __init omap3xxx_check_revision(void)  	 * If the processor type is Cortex-A8 and the revision is 0x0  	 * it means its Cortex r0p0 which is 3430 ES1.0.  	 */ -	cpuid = read_cpuid(CPUID_ID); +	cpuid = read_cpuid_id();  	if ((((cpuid >> 4) & 0xfff) == 0xc08) && ((cpuid & 0xf) == 0x0)) {  		omap_revision = OMAP3430_REV_ES1_0;  		cpu_rev = "1.0"; @@ -438,6 +452,7 @@ void __init omap3xxx_check_revision(void)  		cpu_rev = "1.2";  		pr_warn("Warning: unknown chip type; assuming OMAP3630ES1.2\n");  	} +	sprintf(soc_rev, "ES%s", cpu_rev);  }  void __init omap4xxx_check_revision(void) @@ -460,7 +475,7 @@ void __init omap4xxx_check_revision(void)  	 * Use ARM register to detect the correct ES version  	 */  	if (!rev && (hawkeye != 0xb94e) && (hawkeye != 0xb975)) { -		idcode = read_cpuid(CPUID_ID); +		idcode = read_cpuid_id();  		rev = (idcode & 0xf) - 1;  	} @@ -512,8 +527,10 @@ void __init omap4xxx_check_revision(void)  		omap_revision = OMAP4430_REV_ES2_3;  	} -	pr_info("OMAP%04x ES%d.%d\n", omap_rev() >> 16, -		((omap_rev() >> 12) & 0xf), ((omap_rev() >> 8) & 0xf)); +	sprintf(soc_name, "OMAP%04x", omap_rev() >> 16); +	sprintf(soc_rev, "ES%d.%d", (omap_rev() >> 12) & 0xf, +						(omap_rev() >> 8) & 0xf); +	pr_info("%s %s\n", soc_name, soc_rev);  }  void __init omap5xxx_check_revision(void) @@ -553,8 +570,10 @@ void __init omap5xxx_check_revision(void)  		omap_revision = OMAP5430_REV_ES2_0;  	} -	pr_info("OMAP%04x ES%d.0\n", -			omap_rev() >> 16, ((omap_rev() >> 12) & 0xf)); +	sprintf(soc_name, "OMAP%04x", omap_rev() >> 16); +	sprintf(soc_rev, "ES%d.0", (omap_rev() >> 12) & 0xf); + +	pr_info("%s %s\n", soc_name, soc_rev);  }  /* @@ -575,3 +594,63 @@ void __init omap2_set_globals_tap(u32 class, void __iomem *tap)  	else  		tap_prod_id = 0x0208;  } + +#ifdef CONFIG_SOC_BUS + +static const char const *omap_types[] = { +	[OMAP2_DEVICE_TYPE_TEST]	= "TST", +	[OMAP2_DEVICE_TYPE_EMU]		= "EMU", +	[OMAP2_DEVICE_TYPE_SEC]		= "HS", +	[OMAP2_DEVICE_TYPE_GP]		= "GP", +	[OMAP2_DEVICE_TYPE_BAD]		= "BAD", +}; + +static const char * __init omap_get_family(void) +{ +	if (cpu_is_omap24xx()) +		return kasprintf(GFP_KERNEL, "OMAP2"); +	else if (cpu_is_omap34xx()) +		return kasprintf(GFP_KERNEL, "OMAP3"); +	else if (cpu_is_omap44xx()) +		return kasprintf(GFP_KERNEL, "OMAP4"); +	else if (soc_is_omap54xx()) +		return kasprintf(GFP_KERNEL, "OMAP5"); +	else +		return kasprintf(GFP_KERNEL, "Unknown"); +} + +static ssize_t omap_get_type(struct device *dev, +					struct device_attribute *attr, +					char *buf) +{ +	return sprintf(buf, "%s\n", omap_types[omap_type()]); +} + +static struct device_attribute omap_soc_attr = +	__ATTR(type,  S_IRUGO, omap_get_type,  NULL); + +void __init omap_soc_device_init(void) +{ +	struct device *parent; +	struct soc_device *soc_dev; +	struct soc_device_attribute *soc_dev_attr; + +	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL); +	if (!soc_dev_attr) +		return; + +	soc_dev_attr->machine  = soc_name; +	soc_dev_attr->family   = omap_get_family(); +	soc_dev_attr->revision = soc_rev; + +	soc_dev = soc_device_register(soc_dev_attr); +	if (IS_ERR_OR_NULL(soc_dev)) { +		kfree(soc_dev_attr); +		return; +	} + +	parent = soc_device_to_device(soc_dev); +	if (!IS_ERR_OR_NULL(parent)) +		device_create_file(parent, &omap_soc_attr); +} +#endif /* CONFIG_SOC_BUS */ diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index 2bef5a7e6af..09abf99e9e5 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c @@ -55,6 +55,12 @@  #include "prm44xx.h"  /* + * omap_clk_init: points to a function that does the SoC-specific + * clock initializations + */ +int (*omap_clk_init)(void); + +/*   * The machine specific code may provide the extra mapping besides the   * default mapping provided here.   */ @@ -388,6 +394,13 @@ static void __init omap_hwmod_init_postsetup(void)  	omap_pm_if_early_init();  } +static void __init omap_common_late_init(void) +{ +	omap_mux_late_init(); +	omap2_common_pm_late_init(); +	omap_soc_device_init(); +} +  #ifdef CONFIG_SOC_OMAP2420  void __init omap2420_init_early(void)  { @@ -406,13 +419,12 @@ void __init omap2420_init_early(void)  	omap242x_clockdomains_init();  	omap2420_hwmod_init();  	omap_hwmod_init_postsetup(); -	omap2420_clk_init(); +	omap_clk_init = omap2420_clk_init;  }  void __init omap2420_init_late(void)  { -	omap_mux_late_init(); -	omap2_common_pm_late_init(); +	omap_common_late_init();  	omap2_pm_init();  	omap2_clk_enable_autoidle_all();  } @@ -436,13 +448,12 @@ void __init omap2430_init_early(void)  	omap243x_clockdomains_init();  	omap2430_hwmod_init();  	omap_hwmod_init_postsetup(); -	omap2430_clk_init(); +	omap_clk_init = omap2430_clk_init;  }  void __init omap2430_init_late(void)  { -	omap_mux_late_init(); -	omap2_common_pm_late_init(); +	omap_common_late_init();  	omap2_pm_init();  	omap2_clk_enable_autoidle_all();  } @@ -471,7 +482,7 @@ void __init omap3_init_early(void)  	omap3xxx_clockdomains_init();  	omap3xxx_hwmod_init();  	omap_hwmod_init_postsetup(); -	omap3xxx_clk_init(); +	omap_clk_init = omap3xxx_clk_init;  }  void __init omap3430_init_early(void) @@ -509,53 +520,47 @@ void __init ti81xx_init_early(void)  	omap3xxx_clockdomains_init();  	omap3xxx_hwmod_init();  	omap_hwmod_init_postsetup(); -	omap3xxx_clk_init(); +	omap_clk_init = omap3xxx_clk_init;  }  void __init omap3_init_late(void)  { -	omap_mux_late_init(); -	omap2_common_pm_late_init(); +	omap_common_late_init();  	omap3_pm_init();  	omap2_clk_enable_autoidle_all();  }  void __init omap3430_init_late(void)  { -	omap_mux_late_init(); -	omap2_common_pm_late_init(); +	omap_common_late_init();  	omap3_pm_init();  	omap2_clk_enable_autoidle_all();  }  void __init omap35xx_init_late(void)  { -	omap_mux_late_init(); -	omap2_common_pm_late_init(); +	omap_common_late_init();  	omap3_pm_init();  	omap2_clk_enable_autoidle_all();  }  void __init omap3630_init_late(void)  { -	omap_mux_late_init(); -	omap2_common_pm_late_init(); +	omap_common_late_init();  	omap3_pm_init();  	omap2_clk_enable_autoidle_all();  }  void __init am35xx_init_late(void)  { -	omap_mux_late_init(); -	omap2_common_pm_late_init(); +	omap_common_late_init();  	omap3_pm_init();  	omap2_clk_enable_autoidle_all();  }  void __init ti81xx_init_late(void)  { -	omap_mux_late_init(); -	omap2_common_pm_late_init(); +	omap_common_late_init();  	omap3_pm_init();  	omap2_clk_enable_autoidle_all();  } @@ -577,7 +582,7 @@ void __init am33xx_init_early(void)  	am33xx_clockdomains_init();  	am33xx_hwmod_init();  	omap_hwmod_init_postsetup(); -	am33xx_clk_init(); +	omap_clk_init = am33xx_clk_init;  }  #endif @@ -602,13 +607,12 @@ void __init omap4430_init_early(void)  	omap44xx_clockdomains_init();  	omap44xx_hwmod_init();  	omap_hwmod_init_postsetup(); -	omap4xxx_clk_init(); +	omap_clk_init = omap4xxx_clk_init;  }  void __init omap4430_init_late(void)  { -	omap_mux_late_init(); -	omap2_common_pm_late_init(); +	omap_common_late_init();  	omap4_pm_init();  	omap2_clk_enable_autoidle_all();  } diff --git a/arch/arm/mach-omap2/omap-hotplug.c b/arch/arm/mach-omap2/omap-hotplug.c index e712d1725a8..458f72f9dc8 100644 --- a/arch/arm/mach-omap2/omap-hotplug.c +++ b/arch/arm/mach-omap2/omap-hotplug.c @@ -19,11 +19,8 @@  #include <linux/smp.h>  #include <linux/io.h> -#include <asm/cacheflush.h>  #include "omap-wakeupgen.h" -  #include "common.h" -  #include "powerdomain.h"  /* @@ -35,9 +32,6 @@ void __ref omap4_cpu_die(unsigned int cpu)  	unsigned int boot_cpu = 0;  	void __iomem *base = omap_get_wakeupgen_base(); -	flush_cache_all(); -	dsb(); -  	/*  	 * we're ready for shutdown now, so do it  	 */ diff --git a/arch/arm/mach-omap2/omap-mpuss-lowpower.c b/arch/arm/mach-omap2/omap-mpuss-lowpower.c index 8bcb64bcdcd..e80327b6c81 100644 --- a/arch/arm/mach-omap2/omap-mpuss-lowpower.c +++ b/arch/arm/mach-omap2/omap-mpuss-lowpower.c @@ -139,20 +139,6 @@ static inline void cpu_clear_prev_logic_pwrst(unsigned int cpu_id)  	}  } -/** - * omap4_mpuss_read_prev_context_state: - * Function returns the MPUSS previous context state - */ -u32 omap4_mpuss_read_prev_context_state(void) -{ -	u32 reg; - -	reg = omap4_prminst_read_inst_reg(OMAP4430_PRM_PARTITION, -		OMAP4430_PRM_MPU_INST, OMAP4_RM_MPU_MPU_CONTEXT_OFFSET); -	reg &= OMAP4430_LOSTCONTEXT_DFF_MASK; -	return reg; -} -  /*   * Store the CPU cluster state for L2X0 low power operations.   */ diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c index d9727218dd0..2a551f997ae 100644 --- a/arch/arm/mach-omap2/omap-smp.c +++ b/arch/arm/mach-omap2/omap-smp.c @@ -21,7 +21,6 @@  #include <linux/io.h>  #include <linux/irqchip/arm-gic.h> -#include <asm/cacheflush.h>  #include <asm/smp_scu.h>  #include "omap-secure.h" @@ -67,13 +66,6 @@ static void __cpuinit omap4_secondary_init(unsigned int cpu)  							4, 0, 0, 0, 0, 0);  	/* -	 * 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); - -	/*  	 * Synchronise with the boot thread.  	 */  	spin_lock(&boot_lock); @@ -84,6 +76,7 @@ static int __cpuinit omap4_boot_secondary(unsigned int cpu, struct task_struct *  {  	static struct clockdomain *cpu1_clkdm;  	static bool booted; +	static struct powerdomain *cpu1_pwrdm;  	void __iomem *base = omap_get_wakeupgen_base();  	/* @@ -103,11 +96,10 @@ static int __cpuinit omap4_boot_secondary(unsigned int cpu, struct task_struct *  	else  		__raw_writel(0x20, base + OMAP_AUX_CORE_BOOT_0); -	flush_cache_all(); -	smp_wmb(); - -	if (!cpu1_clkdm) +	if (!cpu1_clkdm && !cpu1_pwrdm) {  		cpu1_clkdm = clkdm_lookup("mpu1_clkdm"); +		cpu1_pwrdm = pwrdm_lookup("cpu1_pwrdm"); +	}  	/*  	 * The SGI(Software Generated Interrupts) are not wakeup capable @@ -120,7 +112,7 @@ static int __cpuinit omap4_boot_secondary(unsigned int cpu, struct task_struct *  	 * Section :  	 *	4.3.4.2 Power States of CPU0 and CPU1  	 */ -	if (booted) { +	if (booted && cpu1_pwrdm && cpu1_clkdm) {  		/*  		 * GIC distributor control register has changed between  		 * CortexA9 r1pX and r2pX. The Control Register secure @@ -141,7 +133,12 @@ static int __cpuinit omap4_boot_secondary(unsigned int cpu, struct task_struct *  			gic_dist_disable();  		} +		/* +		 * Ensure that CPU power state is set to ON to avoid CPU +		 * powerdomain transition on wfi +		 */  		clkdm_wakeup(cpu1_clkdm); +		omap_set_pwrdm_state(cpu1_pwrdm, PWRDM_POWER_ON);  		clkdm_allow_idle(cpu1_clkdm);  		if (IS_PM44XX_ERRATUM(PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD)) { @@ -168,38 +165,6 @@ static int __cpuinit omap4_boot_secondary(unsigned int cpu, struct task_struct *  	return 0;  } -static void __init wakeup_secondary(void) -{ -	void *startup_addr = omap_secondary_startup; -	void __iomem *base = omap_get_wakeupgen_base(); - -	if (cpu_is_omap446x()) { -		startup_addr = omap_secondary_startup_4460; -		pm44xx_errata |= PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD; -	} - -	/* -	 * Write the address of secondary startup routine into the -	 * AuxCoreBoot1 where ROM code will jump and start executing -	 * on secondary core once out of WFE -	 * A barrier is added to ensure that write buffer is drained -	 */ -	if (omap_secure_apis_support()) -		omap_auxcoreboot_addr(virt_to_phys(startup_addr)); -	else -		__raw_writel(virt_to_phys(omap5_secondary_startup), -						base + OMAP_AUX_CORE_BOOT_1); - -	smp_wmb(); - -	/* -	 * Send a 'sev' to wake the secondary core from WFE. -	 * Drain the outstanding writes to memory -	 */ -	dsb_sev(); -	mb(); -} -  /*   * Initialise the CPU possible map early - this describes the CPUs   * which may be present or become present in the system. @@ -209,7 +174,7 @@ static void __init omap4_smp_init_cpus(void)  	unsigned int i = 0, ncores = 1, cpu_id;  	/* Use ARM cpuid check here, as SoC detection will not work so early */ -	cpu_id = read_cpuid(CPUID_ID) & CPU_MASK; +	cpu_id = read_cpuid_id() & CPU_MASK;  	if (cpu_id == CPU_CORTEX_A9) {  		/*  		 * Currently we can't call ioremap here because @@ -235,6 +200,8 @@ static void __init omap4_smp_init_cpus(void)  static void __init omap4_smp_prepare_cpus(unsigned int max_cpus)  { +	void *startup_addr = omap_secondary_startup; +	void __iomem *base = omap_get_wakeupgen_base();  	/*  	 * Initialise the SCU and wake up the secondary core using @@ -242,7 +209,24 @@ static void __init omap4_smp_prepare_cpus(unsigned int max_cpus)  	 */  	if (scu_base)  		scu_enable(scu_base); -	wakeup_secondary(); + +	if (cpu_is_omap446x()) { +		startup_addr = omap_secondary_startup_4460; +		pm44xx_errata |= PM_OMAP4_ROM_SMP_BOOT_ERRATUM_GICD; +	} + +	/* +	 * Write the address of secondary startup routine into the +	 * AuxCoreBoot1 where ROM code will jump and start executing +	 * on secondary core once out of WFE +	 * A barrier is added to ensure that write buffer is drained +	 */ +	if (omap_secure_apis_support()) +		omap_auxcoreboot_addr(virt_to_phys(startup_addr)); +	else +		__raw_writel(virt_to_phys(omap5_secondary_startup), +						base + OMAP_AUX_CORE_BOOT_1); +  }  struct smp_operations omap4_smp_ops __initdata = { diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c index 2aeb928efdf..13b27ffaf45 100644 --- a/arch/arm/mach-omap2/omap4-common.c +++ b/arch/arm/mach-omap2/omap4-common.c @@ -22,6 +22,7 @@  #include <linux/of_platform.h>  #include <linux/export.h>  #include <linux/irqchip/arm-gic.h> +#include <linux/of_address.h>  #include <asm/hardware/cache-l2x0.h>  #include <asm/mach/map.h> @@ -264,6 +265,21 @@ omap_early_initcall(omap4_sar_ram_init);  void __init omap_gic_of_init(void)  { +	struct device_node *np; + +	/* Extract GIC distributor and TWD bases for OMAP4460 ROM Errata WA */ +	if (!cpu_is_omap446x()) +		goto skip_errata_init; + +	np = of_find_compatible_node(NULL, NULL, "arm,cortex-a9-gic"); +	gic_dist_base_addr = of_iomap(np, 0); +	WARN_ON(!gic_dist_base_addr); + +	np = of_find_compatible_node(NULL, NULL, "arm,cortex-a9-twd-timer"); +	twd_base = of_iomap(np, 0); +	WARN_ON(!twd_base); + +skip_errata_init:  	omap_wakeupgen_init();  	irqchip_init();  } diff --git a/arch/arm/mach-omap2/omap4-sar-layout.h b/arch/arm/mach-omap2/omap4-sar-layout.h index 937417523b8..792b1069f72 100644 --- a/arch/arm/mach-omap2/omap4-sar-layout.h +++ b/arch/arm/mach-omap2/omap4-sar-layout.h @@ -20,13 +20,13 @@  #define SAR_BANK4_OFFSET		0x3000  /* Scratch pad memory offsets from SAR_BANK1 */ -#define SCU_OFFSET0				0xd00 -#define SCU_OFFSET1				0xd04 -#define OMAP_TYPE_OFFSET			0xd10 -#define L2X0_SAVE_OFFSET0			0xd14 -#define L2X0_SAVE_OFFSET1			0xd18 -#define L2X0_AUXCTRL_OFFSET			0xd1c -#define L2X0_PREFETCH_CTRL_OFFSET		0xd20 +#define SCU_OFFSET0				0xfe4 +#define SCU_OFFSET1				0xfe8 +#define OMAP_TYPE_OFFSET			0xfec +#define L2X0_SAVE_OFFSET0			0xff0 +#define L2X0_SAVE_OFFSET1			0xff4 +#define L2X0_AUXCTRL_OFFSET			0xff8 +#define L2X0_PREFETCH_CTRL_OFFSET		0xffc  /* CPUx Wakeup Non-Secure Physical Address offsets in SAR_BANK3 */  #define CPU0_WAKEUP_NS_PA_ADDR_OFFSET		0xa04 diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 2520d46c850..93f213b6a78 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c @@ -138,6 +138,7 @@  #include <linux/spinlock.h>  #include <linux/slab.h>  #include <linux/bootmem.h> +#include <linux/cpu.h>  #include <asm/system_misc.h> @@ -1364,7 +1365,9 @@ static void _enable_sysc(struct omap_hwmod *oh)  	}  	if (sf & SYSC_HAS_MIDLEMODE) { -		if (oh->flags & HWMOD_SWSUP_MSTANDBY) { +		if (oh->flags & HWMOD_FORCE_MSTANDBY) { +			idlemode = HWMOD_IDLEMODE_FORCE; +		} else if (oh->flags & HWMOD_SWSUP_MSTANDBY) {  			idlemode = HWMOD_IDLEMODE_NO;  		} else {  			if (sf & SYSC_HAS_ENAWAKEUP) @@ -1436,7 +1439,8 @@ static void _idle_sysc(struct omap_hwmod *oh)  	}  	if (sf & SYSC_HAS_MIDLEMODE) { -		if (oh->flags & HWMOD_SWSUP_MSTANDBY) { +		if ((oh->flags & HWMOD_SWSUP_MSTANDBY) || +		    (oh->flags & HWMOD_FORCE_MSTANDBY)) {  			idlemode = HWMOD_IDLEMODE_FORCE;  		} else {  			if (sf & SYSC_HAS_ENAWAKEUP) @@ -2150,7 +2154,7 @@ static int _enable(struct omap_hwmod *oh)  	if (soc_ops.enable_module)  		soc_ops.enable_module(oh);  	if (oh->flags & HWMOD_BLOCK_WFI) -		disable_hlt(); +		cpu_idle_poll_ctrl(true);  	if (soc_ops.update_context_lost)  		soc_ops.update_context_lost(oh); @@ -2214,7 +2218,7 @@ static int _idle(struct omap_hwmod *oh)  	_del_initiator_dep(oh, mpu_oh);  	if (oh->flags & HWMOD_BLOCK_WFI) -		enable_hlt(); +		cpu_idle_poll_ctrl(false);  	if (soc_ops.disable_module)  		soc_ops.disable_module(oh); @@ -2324,7 +2328,7 @@ static int _shutdown(struct omap_hwmod *oh)  		_del_initiator_dep(oh, mpu_oh);  		/* XXX what about the other system initiators here? dma, dsp */  		if (oh->flags & HWMOD_BLOCK_WFI) -			enable_hlt(); +			cpu_idle_poll_ctrl(false);  		if (soc_ops.disable_module)  			soc_ops.disable_module(oh);  		_disable_clocks(oh); diff --git a/arch/arm/mach-omap2/omap_hwmod.h b/arch/arm/mach-omap2/omap_hwmod.h index 28f4dea0512..fe5962921f0 100644 --- a/arch/arm/mach-omap2/omap_hwmod.h +++ b/arch/arm/mach-omap2/omap_hwmod.h @@ -427,8 +427,8 @@ struct omap_hwmod_omap4_prcm {   *   * HWMOD_SWSUP_SIDLE: omap_hwmod code should manually bring module in and out   *     of idle, rather than relying on module smart-idle - * HWMOD_SWSUP_MSTDBY: omap_hwmod code should manually bring module in and out - *     of standby, rather than relying on module smart-standby + * HWMOD_SWSUP_MSTANDBY: omap_hwmod code should manually bring module in and + *     out of standby, rather than relying on module smart-standby   * HWMOD_INIT_NO_RESET: don't reset this module at boot - important for   *     SDRAM controller, etc. XXX probably belongs outside the main hwmod file   *     XXX Should be HWMOD_SETUP_NO_RESET @@ -459,6 +459,10 @@ struct omap_hwmod_omap4_prcm {   *     correctly, or this is being abused to deal with some PM latency   *     issues -- but we're currently suffering from a shortage of   *     folks who are able to track these issues down properly. + * HWMOD_FORCE_MSTANDBY: Always keep MIDLEMODE bits cleared so that device + *     is kept in force-standby mode. Failing to do so causes PM problems + *     with musb on OMAP3630 at least. Note that musb has a dedicated register + *     to control MSTANDBY signal when MIDLEMODE is set to force-standby.   */  #define HWMOD_SWSUP_SIDLE			(1 << 0)  #define HWMOD_SWSUP_MSTANDBY			(1 << 1) @@ -471,6 +475,7 @@ struct omap_hwmod_omap4_prcm {  #define HWMOD_16BIT_REG				(1 << 8)  #define HWMOD_EXT_OPT_MAIN_CLK			(1 << 9)  #define HWMOD_BLOCK_WFI				(1 << 10) +#define HWMOD_FORCE_MSTANDBY			(1 << 11)  /*   * omap_hwmod._int_flags definitions diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c index 6a764af6c6d..5137cc84b50 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c @@ -610,6 +610,8 @@ static struct omap_hwmod_ocp_if *omap2420_hwmod_ocp_ifs[] __initdata = {  	&omap2420_l4_core__mcbsp2,  	&omap2420_l4_core__msdi1,  	&omap2xxx_l4_core__rng, +	&omap2xxx_l4_core__sham, +	&omap2xxx_l4_core__aes,  	&omap2420_l4_core__hdq1w,  	&omap2420_l4_wkup__counter_32k,  	&omap2420_l3__gpmc, diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c index d2d3840557c..4ce999ee3ee 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c @@ -963,6 +963,8 @@ static struct omap_hwmod_ocp_if *omap2430_hwmod_ocp_ifs[] __initdata = {  	&omap2430_l4_core__mcbsp5,  	&omap2430_l4_core__hdq1w,  	&omap2xxx_l4_core__rng, +	&omap2xxx_l4_core__sham, +	&omap2xxx_l4_core__aes,  	&omap2430_l4_wkup__counter_32k,  	&omap2430_l3__gpmc,  	NULL, diff --git a/arch/arm/mach-omap2/omap_hwmod_2xxx_interconnect_data.c b/arch/arm/mach-omap2/omap_hwmod_2xxx_interconnect_data.c index 47901a5e76d..5fd40d4a989 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2xxx_interconnect_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2xxx_interconnect_data.c @@ -138,6 +138,24 @@ static struct omap_hwmod_addr_space omap2_rng_addr_space[] = {  	{ }  }; +static struct omap_hwmod_addr_space omap2xxx_sham_addrs[] = { +	{ +		.pa_start	= 0x480a4000, +		.pa_end		= 0x480a4000 + 0x64 - 1, +		.flags		= ADDR_TYPE_RT +	}, +	{ } +}; + +static struct omap_hwmod_addr_space omap2xxx_aes_addrs[] = { +	{ +		.pa_start	= 0x480a6000, +		.pa_end		= 0x480a6000 + 0x50 - 1, +		.flags		= ADDR_TYPE_RT +	}, +	{ } +}; +  /*   * Common interconnect data   */ @@ -389,3 +407,21 @@ struct omap_hwmod_ocp_if omap2xxx_l4_core__rng = {  	.addr		= omap2_rng_addr_space,  	.user		= OCP_USER_MPU | OCP_USER_SDMA,  }; + +/* l4 core -> sham interface */ +struct omap_hwmod_ocp_if omap2xxx_l4_core__sham = { +	.master		= &omap2xxx_l4_core_hwmod, +	.slave		= &omap2xxx_sham_hwmod, +	.clk		= "sha_ick", +	.addr		= omap2xxx_sham_addrs, +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* l4 core -> aes interface */ +struct omap_hwmod_ocp_if omap2xxx_l4_core__aes = { +	.master		= &omap2xxx_l4_core_hwmod, +	.slave		= &omap2xxx_aes_hwmod, +	.clk		= "aes_ick", +	.addr		= omap2xxx_aes_addrs, +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; diff --git a/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c b/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c index e596117004d..c8c64b3e1ac 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c @@ -864,3 +864,84 @@ struct omap_hwmod omap2xxx_rng_hwmod = {  	.flags		= HWMOD_INIT_NO_RESET,  	.class		= &omap2_rng_hwmod_class,  }; + +/* SHAM */ + +static struct omap_hwmod_class_sysconfig omap2_sham_sysc = { +	.rev_offs	= 0x5c, +	.sysc_offs	= 0x60, +	.syss_offs	= 0x64, +	.sysc_flags	= (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE | +			   SYSS_HAS_RESET_STATUS), +	.sysc_fields	= &omap_hwmod_sysc_type1, +}; + +static struct omap_hwmod_class omap2xxx_sham_class = { +	.name	= "sham", +	.sysc	= &omap2_sham_sysc, +}; + +static struct omap_hwmod_irq_info omap2_sham_mpu_irqs[] = { +	{ .irq = 51 + OMAP_INTC_START, }, +	{ .irq = -1 } +}; + +static struct omap_hwmod_dma_info omap2_sham_sdma_chs[] = { +	{ .name = "rx", .dma_req = 13 }, +	{ .dma_req = -1 } +}; + +struct omap_hwmod omap2xxx_sham_hwmod = { +	.name		= "sham", +	.mpu_irqs	= omap2_sham_mpu_irqs, +	.sdma_reqs	= omap2_sham_sdma_chs, +	.main_clk	= "l4_ck", +	.prcm		= { +		.omap2 = { +			.module_offs = CORE_MOD, +			.prcm_reg_id = 4, +			.module_bit = OMAP24XX_EN_SHA_SHIFT, +			.idlest_reg_id = 4, +			.idlest_idle_bit = OMAP24XX_ST_SHA_SHIFT, +		}, +	}, +	.class		= &omap2xxx_sham_class, +}; + +/* AES */ + +static struct omap_hwmod_class_sysconfig omap2_aes_sysc = { +	.rev_offs	= 0x44, +	.sysc_offs	= 0x48, +	.syss_offs	= 0x4c, +	.sysc_flags	= (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE | +			   SYSS_HAS_RESET_STATUS), +	.sysc_fields	= &omap_hwmod_sysc_type1, +}; + +static struct omap_hwmod_class omap2xxx_aes_class = { +	.name	= "aes", +	.sysc	= &omap2_aes_sysc, +}; + +static struct omap_hwmod_dma_info omap2_aes_sdma_chs[] = { +	{ .name = "tx", .dma_req = 9 }, +	{ .name = "rx", .dma_req = 10 }, +	{ .dma_req = -1 } +}; + +struct omap_hwmod omap2xxx_aes_hwmod = { +	.name		= "aes", +	.sdma_reqs	= omap2_aes_sdma_chs, +	.main_clk	= "l4_ck", +	.prcm		= { +		.omap2 = { +			.module_offs = CORE_MOD, +			.prcm_reg_id = 4, +			.module_bit = OMAP24XX_EN_AES_SHIFT, +			.idlest_reg_id = 4, +			.idlest_idle_bit = OMAP24XX_ST_AES_SHIFT, +		}, +	}, +	.class		= &omap2xxx_aes_class, +}; diff --git a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c index 31bea1ce3de..01d8f324450 100644 --- a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c @@ -418,8 +418,6 @@ static struct omap_hwmod am33xx_adc_tsc_hwmod = {   *    - clkdiv32k   *    - debugss   *    - ocp watch point - *    - aes0 - *    - sha0   */  #if 0  /* @@ -500,25 +498,41 @@ static struct omap_hwmod am33xx_ocpwp_hwmod = {  		},  	},  }; +#endif  /* - * 'aes' class + * 'aes0' class   */ -static struct omap_hwmod_class am33xx_aes_hwmod_class = { -	.name		= "aes", +static struct omap_hwmod_class_sysconfig am33xx_aes0_sysc = { +	.rev_offs	= 0x80, +	.sysc_offs	= 0x84, +	.syss_offs	= 0x88, +	.sysc_flags	= SYSS_HAS_RESET_STATUS, +}; + +static struct omap_hwmod_class am33xx_aes0_hwmod_class = { +	.name		= "aes0", +	.sysc		= &am33xx_aes0_sysc,  };  static struct omap_hwmod_irq_info am33xx_aes0_irqs[] = { -	{ .irq = 102 + OMAP_INTC_START, }, +	{ .irq = 103 + OMAP_INTC_START, },  	{ .irq = -1 },  }; +static struct omap_hwmod_dma_info am33xx_aes0_edma_reqs[] = { +	{ .name = "tx", .dma_req = 6, }, +	{ .name = "rx", .dma_req = 5, }, +	{ .dma_req = -1 } +}; +  static struct omap_hwmod am33xx_aes0_hwmod = { -	.name		= "aes0", -	.class		= &am33xx_aes_hwmod_class, +	.name		= "aes", +	.class		= &am33xx_aes0_hwmod_class,  	.clkdm_name	= "l3_clkdm",  	.mpu_irqs	= am33xx_aes0_irqs, -	.main_clk	= "l3_gclk", +	.sdma_reqs	= am33xx_aes0_edma_reqs, +	.main_clk	= "aes0_fck",  	.prcm		= {  		.omap4	= {  			.clkctrl_offs	= AM33XX_CM_PER_AES0_CLKCTRL_OFFSET, @@ -527,21 +541,35 @@ static struct omap_hwmod am33xx_aes0_hwmod = {  	},  }; -/* sha0 */ +/* sha0 HIB2 (the 'P' (public) device) */ +static struct omap_hwmod_class_sysconfig am33xx_sha0_sysc = { +	.rev_offs	= 0x100, +	.sysc_offs	= 0x110, +	.syss_offs	= 0x114, +	.sysc_flags	= SYSS_HAS_RESET_STATUS, +}; +  static struct omap_hwmod_class am33xx_sha0_hwmod_class = {  	.name		= "sha0", +	.sysc		= &am33xx_sha0_sysc,  };  static struct omap_hwmod_irq_info am33xx_sha0_irqs[] = { -	{ .irq = 108 + OMAP_INTC_START, }, +	{ .irq = 109 + OMAP_INTC_START, },  	{ .irq = -1 },  }; +static struct omap_hwmod_dma_info am33xx_sha0_edma_reqs[] = { +	{ .name = "rx", .dma_req = 36, }, +	{ .dma_req = -1 } +}; +  static struct omap_hwmod am33xx_sha0_hwmod = { -	.name		= "sha0", +	.name		= "sham",  	.class		= &am33xx_sha0_hwmod_class,  	.clkdm_name	= "l3_clkdm",  	.mpu_irqs	= am33xx_sha0_irqs, +	.sdma_reqs	= am33xx_sha0_edma_reqs,  	.main_clk	= "l3_gclk",  	.prcm		= {  		.omap4	= { @@ -551,8 +579,6 @@ static struct omap_hwmod am33xx_sha0_hwmod = {  	},  }; -#endif -  /* ocmcram */  static struct omap_hwmod_class am33xx_ocmcram_hwmod_class = {  	.name = "ocmcram", @@ -3449,6 +3475,42 @@ static struct omap_hwmod_ocp_if am33xx_l3_main__ocmc = {  	.user		= OCP_USER_MPU | OCP_USER_SDMA,  }; +/* l3 main -> sha0 HIB2 */ +static struct omap_hwmod_addr_space am33xx_sha0_addrs[] = { +	{ +		.pa_start	= 0x53100000, +		.pa_end		= 0x53100000 + SZ_512 - 1, +		.flags		= ADDR_TYPE_RT +	}, +	{ } +}; + +static struct omap_hwmod_ocp_if am33xx_l3_main__sha0 = { +	.master		= &am33xx_l3_main_hwmod, +	.slave		= &am33xx_sha0_hwmod, +	.clk		= "sha0_fck", +	.addr		= am33xx_sha0_addrs, +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* l3 main -> AES0 HIB2 */ +static struct omap_hwmod_addr_space am33xx_aes0_addrs[] = { +	{ +		.pa_start	= 0x53500000, +		.pa_end		= 0x53500000 + SZ_1M - 1, +		.flags		= ADDR_TYPE_RT +	}, +	{ } +}; + +static struct omap_hwmod_ocp_if am33xx_l3_main__aes0 = { +	.master		= &am33xx_l3_main_hwmod, +	.slave		= &am33xx_aes0_hwmod, +	.clk		= "aes0_fck", +	.addr		= am33xx_aes0_addrs, +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; +  static struct omap_hwmod_ocp_if *am33xx_hwmod_ocp_ifs[] __initdata = {  	&am33xx_l4_fw__emif_fw,  	&am33xx_l3_main__emif, @@ -3529,6 +3591,8 @@ static struct omap_hwmod_ocp_if *am33xx_hwmod_ocp_ifs[] __initdata = {  	&am33xx_l3_s__usbss,  	&am33xx_l4_hs__cpgmac0,  	&am33xx_cpgmac0__mdio, +	&am33xx_l3_main__sha0, +	&am33xx_l3_main__aes0,  	NULL,  }; diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index ac7e03ec952..4083606ea1d 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c @@ -1707,9 +1707,14 @@ static struct omap_hwmod omap3xxx_usbhsotg_hwmod = {  	 * Erratum ID: i479  idle_req / idle_ack mechanism potentially  	 * broken when autoidle is enabled  	 * workaround is to disable the autoidle bit at module level. +	 * +	 * Enabling the device in any other MIDLEMODE setting but force-idle +	 * causes core_pwrdm not enter idle states at least on OMAP3630. +	 * Note that musb has OTG_FORCESTDBY register that controls MSTANDBY +	 * signal when MIDLEMODE is set to force-idle.  	 */  	.flags		= HWMOD_NO_OCP_AUTOIDLE | HWMOD_SWSUP_SIDLE -				| HWMOD_SWSUP_MSTANDBY, +				| HWMOD_FORCE_MSTANDBY,  };  /* usb_otg_hs */ @@ -3545,6 +3550,132 @@ static struct omap_hwmod_ocp_if omap3xxx_l3_main__gpmc = {  	.user		= OCP_USER_MPU | OCP_USER_SDMA,  }; +/* l4_core -> SHAM2 (SHA1/MD5) (similar to omap24xx) */ +static struct omap_hwmod_sysc_fields omap3_sham_sysc_fields = { +	.sidle_shift	= 4, +	.srst_shift	= 1, +	.autoidle_shift	= 0, +}; + +static struct omap_hwmod_class_sysconfig omap3_sham_sysc = { +	.rev_offs	= 0x5c, +	.sysc_offs	= 0x60, +	.syss_offs	= 0x64, +	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET | +			   SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS), +	.sysc_fields	= &omap3_sham_sysc_fields, +}; + +static struct omap_hwmod_class omap3xxx_sham_class = { +	.name	= "sham", +	.sysc	= &omap3_sham_sysc, +}; + +static struct omap_hwmod_irq_info omap3_sham_mpu_irqs[] = { +	{ .irq = 49 + OMAP_INTC_START, }, +	{ .irq = -1 } +}; + +static struct omap_hwmod_dma_info omap3_sham_sdma_reqs[] = { +	{ .name = "rx", .dma_req = OMAP34XX_DMA_SHA1MD5_RX, }, +	{ .dma_req = -1 } +}; + +static struct omap_hwmod omap3xxx_sham_hwmod = { +	.name		= "sham", +	.mpu_irqs	= omap3_sham_mpu_irqs, +	.sdma_reqs	= omap3_sham_sdma_reqs, +	.main_clk	= "sha12_ick", +	.prcm		= { +		.omap2 = { +			.module_offs = CORE_MOD, +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_SHA12_SHIFT, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_SHA12_SHIFT, +		}, +	}, +	.class		= &omap3xxx_sham_class, +}; + +static struct omap_hwmod_addr_space omap3xxx_sham_addrs[] = { +	{ +		.pa_start	= 0x480c3000, +		.pa_end		= 0x480c3000 + 0x64 - 1, +		.flags		= ADDR_TYPE_RT +	}, +	{ } +}; + +static struct omap_hwmod_ocp_if omap3xxx_l4_core__sham = { +	.master		= &omap3xxx_l4_core_hwmod, +	.slave		= &omap3xxx_sham_hwmod, +	.clk		= "sha12_ick", +	.addr		= omap3xxx_sham_addrs, +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; + +/* l4_core -> AES */ +static struct omap_hwmod_sysc_fields omap3xxx_aes_sysc_fields = { +	.sidle_shift	= 6, +	.srst_shift	= 1, +	.autoidle_shift	= 0, +}; + +static struct omap_hwmod_class_sysconfig omap3_aes_sysc = { +	.rev_offs	= 0x44, +	.sysc_offs	= 0x48, +	.syss_offs	= 0x4c, +	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET | +			   SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS), +	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), +	.sysc_fields	= &omap3xxx_aes_sysc_fields, +}; + +static struct omap_hwmod_class omap3xxx_aes_class = { +	.name	= "aes", +	.sysc	= &omap3_aes_sysc, +}; + +static struct omap_hwmod_dma_info omap3_aes_sdma_reqs[] = { +	{ .name = "tx", .dma_req = OMAP34XX_DMA_AES2_TX, }, +	{ .name = "rx", .dma_req = OMAP34XX_DMA_AES2_RX, }, +	{ .dma_req = -1 } +}; + +static struct omap_hwmod omap3xxx_aes_hwmod = { +	.name		= "aes", +	.sdma_reqs	= omap3_aes_sdma_reqs, +	.main_clk	= "aes2_ick", +	.prcm		= { +		.omap2 = { +			.module_offs = CORE_MOD, +			.prcm_reg_id = 1, +			.module_bit = OMAP3430_EN_AES2_SHIFT, +			.idlest_reg_id = 1, +			.idlest_idle_bit = OMAP3430_ST_AES2_SHIFT, +		}, +	}, +	.class		= &omap3xxx_aes_class, +}; + +static struct omap_hwmod_addr_space omap3xxx_aes_addrs[] = { +	{ +		.pa_start	= 0x480c5000, +		.pa_end		= 0x480c5000 + 0x50 - 1, +		.flags		= ADDR_TYPE_RT +	}, +	{ } +}; + +static struct omap_hwmod_ocp_if omap3xxx_l4_core__aes = { +	.master		= &omap3xxx_l4_core_hwmod, +	.slave		= &omap3xxx_aes_hwmod, +	.clk		= "aes2_ick", +	.addr		= omap3xxx_aes_addrs, +	.user		= OCP_USER_MPU | OCP_USER_SDMA, +}; +  static struct omap_hwmod_ocp_if *omap3xxx_hwmod_ocp_ifs[] __initdata = {  	&omap3xxx_l3_main__l4_core,  	&omap3xxx_l3_main__l4_per, @@ -3596,8 +3727,32 @@ static struct omap_hwmod_ocp_if *omap3xxx_hwmod_ocp_ifs[] __initdata = {  };  /* GP-only hwmod links */ -static struct omap_hwmod_ocp_if *omap3xxx_gp_hwmod_ocp_ifs[] __initdata = { +static struct omap_hwmod_ocp_if *omap34xx_gp_hwmod_ocp_ifs[] __initdata = {  	&omap3xxx_l4_sec__timer12, +	&omap3xxx_l4_core__sham, +	&omap3xxx_l4_core__aes, +	NULL +}; + +static struct omap_hwmod_ocp_if *omap36xx_gp_hwmod_ocp_ifs[] __initdata = { +	&omap3xxx_l4_sec__timer12, +	&omap3xxx_l4_core__sham, +	&omap3xxx_l4_core__aes, +	NULL +}; + +static struct omap_hwmod_ocp_if *am35xx_gp_hwmod_ocp_ifs[] __initdata = { +	&omap3xxx_l4_sec__timer12, +	/* +	 * Apparently the SHA/MD5 and AES accelerator IP blocks are +	 * only present on some AM35xx chips, and no one knows which +	 * ones.  See +	 * http://www.spinics.net/lists/arm-kernel/msg215466.html So +	 * if you need these IP blocks on an AM35xx, try uncommenting +	 * the following lines. +	 */ +	/* &omap3xxx_l4_core__sham, */ +	/* &omap3xxx_l4_core__aes, */  	NULL  }; @@ -3704,7 +3859,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_dss_hwmod_ocp_ifs[] __initdata = {  int __init omap3xxx_hwmod_init(void)  {  	int r; -	struct omap_hwmod_ocp_if **h = NULL; +	struct omap_hwmod_ocp_if **h = NULL, **h_gp = NULL;  	unsigned int rev;  	omap_hwmod_init(); @@ -3714,13 +3869,6 @@ int __init omap3xxx_hwmod_init(void)  	if (r < 0)  		return r; -	/* Register GP-only hwmod links. */ -	if (omap_type() == OMAP2_DEVICE_TYPE_GP) { -		r = omap_hwmod_register_links(omap3xxx_gp_hwmod_ocp_ifs); -		if (r < 0) -			return r; -	} -  	rev = omap_rev();  	/* @@ -3732,11 +3880,14 @@ int __init omap3xxx_hwmod_init(void)  	    rev == OMAP3430_REV_ES2_1 || rev == OMAP3430_REV_ES3_0 ||  	    rev == OMAP3430_REV_ES3_1 || rev == OMAP3430_REV_ES3_1_2) {  		h = omap34xx_hwmod_ocp_ifs; +		h_gp = omap34xx_gp_hwmod_ocp_ifs;  	} else if (rev == AM35XX_REV_ES1_0 || rev == AM35XX_REV_ES1_1) {  		h = am35xx_hwmod_ocp_ifs; +		h_gp = am35xx_gp_hwmod_ocp_ifs;  	} else if (rev == OMAP3630_REV_ES1_0 || rev == OMAP3630_REV_ES1_1 ||  		   rev == OMAP3630_REV_ES1_2) {  		h = omap36xx_hwmod_ocp_ifs; +		h_gp = omap36xx_gp_hwmod_ocp_ifs;  	} else {  		WARN(1, "OMAP3 hwmod family init: unknown chip type\n");  		return -EINVAL; @@ -3746,6 +3897,14 @@ int __init omap3xxx_hwmod_init(void)  	if (r < 0)  		return r; +	/* Register GP-only hwmod links. */ +	if (h_gp && omap_type() == OMAP2_DEVICE_TYPE_GP) { +		r = omap_hwmod_register_links(h_gp); +		if (r < 0) +			return r; +	} + +  	/*  	 * Register hwmod links specific to certain ES levels of a  	 * particular family of silicon (e.g., 34xx ES1.0) diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c index 0e47d2e1687..eaba9dc91a0 100644 --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c @@ -2719,7 +2719,17 @@ static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = {  	.name		= "ocp2scp_usb_phy",  	.class		= &omap44xx_ocp2scp_hwmod_class,  	.clkdm_name	= "l3_init_clkdm", -	.main_clk	= "func_48m_fclk", +	/* +	 * ocp2scp_usb_phy_phy_48m is provided by the OMAP4 PRCM IP +	 * block as an "optional clock," and normally should never be +	 * specified as the main_clk for an OMAP IP block.  However it +	 * turns out that this clock is actually the main clock for +	 * the ocp2scp_usb_phy IP block: +	 * http://lists.infradead.org/pipermail/linux-arm-kernel/2012-September/119943.html +	 * So listing ocp2scp_usb_phy_phy_48m as a main_clk here seems +	 * to be the best workaround. +	 */ +	.main_clk	= "ocp2scp_usb_phy_phy_48m",  	.prcm = {  		.omap4 = {  			.clkctrl_offs = OMAP4_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL_OFFSET, diff --git a/arch/arm/mach-omap2/omap_hwmod_common_data.h b/arch/arm/mach-omap2/omap_hwmod_common_data.h index cfcce299177..6e04ff7065e 100644 --- a/arch/arm/mach-omap2/omap_hwmod_common_data.h +++ b/arch/arm/mach-omap2/omap_hwmod_common_data.h @@ -78,6 +78,8 @@ extern struct omap_hwmod omap2xxx_mcspi2_hwmod;  extern struct omap_hwmod omap2xxx_counter_32k_hwmod;  extern struct omap_hwmod omap2xxx_gpmc_hwmod;  extern struct omap_hwmod omap2xxx_rng_hwmod; +extern struct omap_hwmod omap2xxx_sham_hwmod; +extern struct omap_hwmod omap2xxx_aes_hwmod;  /* Common interface data across OMAP2xxx */  extern struct omap_hwmod_ocp_if omap2xxx_l3_main__l4_core; @@ -105,6 +107,8 @@ extern struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_dispc;  extern struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_rfbi;  extern struct omap_hwmod_ocp_if omap2xxx_l4_core__dss_venc;  extern struct omap_hwmod_ocp_if omap2xxx_l4_core__rng; +extern struct omap_hwmod_ocp_if omap2xxx_l4_core__sham; +extern struct omap_hwmod_ocp_if omap2xxx_l4_core__aes;  /* Common IP block data */  extern struct omap_hwmod_dma_info omap2_uart1_sdma_reqs[]; diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index 673a4c1d1d7..e742118fcfd 100644 --- a/arch/arm/mach-omap2/pm.c +++ b/arch/arm/mach-omap2/pm.c @@ -218,7 +218,7 @@ static int omap_pm_enter(suspend_state_t suspend_state)  static int omap_pm_begin(suspend_state_t state)  { -	disable_hlt(); +	cpu_idle_poll_ctrl(true);  	if (cpu_is_omap34xx())  		omap_prcm_irq_prepare();  	return 0; @@ -226,8 +226,7 @@ static int omap_pm_begin(suspend_state_t state)  static void omap_pm_end(void)  { -	enable_hlt(); -	return; +	cpu_idle_poll_ctrl(false);  }  static void omap_pm_finish(void) @@ -265,6 +264,12 @@ static void __init omap4_init_voltages(void)  	omap2_set_init_voltage("iva", "dpll_iva_m5x2_ck", "iva");  } +static inline void omap_init_cpufreq(void) +{ +	struct platform_device_info devinfo = { .name = "omap-cpufreq", }; +	platform_device_register_full(&devinfo); +} +  static int __init omap2_common_pm_init(void)  {  	if (!of_have_populated_dt()) @@ -294,6 +299,9 @@ int __init omap2_common_pm_late_init(void)  		/* Smartreflex device init */  		omap_devinit_smartreflex(); + +		/* cpufreq dummy device instantiation */ +		omap_init_cpufreq();  	}  #ifdef CONFIG_SUSPEND diff --git a/arch/arm/mach-omap2/pm24xx.c b/arch/arm/mach-omap2/pm24xx.c index b59d9390834..ce956b0a7ba 100644 --- a/arch/arm/mach-omap2/pm24xx.c +++ b/arch/arm/mach-omap2/pm24xx.c @@ -200,22 +200,17 @@ static int omap2_can_sleep(void)  static void omap2_pm_idle(void)  { -	local_fiq_disable(); -  	if (!omap2_can_sleep()) {  		if (omap_irq_pending()) -			goto out; +			return;  		omap2_enter_mpu_retention(); -		goto out; +		return;  	}  	if (omap_irq_pending()) -		goto out; +		return;  	omap2_enter_full_retention(); - -out: -	local_fiq_enable();  }  static void __init prcm_setup_regs(void) diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 2d93d8b2383..c01859398b5 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c @@ -346,19 +346,14 @@ void omap_sram_idle(void)  static void omap3_pm_idle(void)  { -	local_fiq_disable(); -  	if (omap_irq_pending()) -		goto out; +		return;  	trace_cpu_idle(1, smp_processor_id());  	omap_sram_idle();  	trace_cpu_idle(PWR_EVENT_EXIT, smp_processor_id()); - -out: -	local_fiq_enable();  }  #ifdef CONFIG_SUSPEND @@ -757,14 +752,12 @@ int __init omap3_pm_init(void)  			pr_err("Memory allocation failed when allocating for secure sram context\n");  		local_irq_disable(); -		local_fiq_disable();  		omap_dma_global_context_save();  		omap3_save_secure_ram_context();  		omap_dma_global_context_restore();  		local_irq_enable(); -		local_fiq_enable();  	}  	omap3_save_scratchpad_contents(); diff --git a/arch/arm/mach-omap2/pm44xx.c b/arch/arm/mach-omap2/pm44xx.c index ea62e75ef21..a251f87fa2a 100644 --- a/arch/arm/mach-omap2/pm44xx.c +++ b/arch/arm/mach-omap2/pm44xx.c @@ -126,16 +126,12 @@ static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused)   * omap_default_idle - OMAP4 default ilde routine.'   *   * Implements OMAP4 memory, IO ordering requirements which can't be addressed - * with default cpu_do_idle() hook. Used by all CPUs with !CONFIG_CPUIDLE and - * by secondary CPU with CONFIG_CPUIDLE. + * with default cpu_do_idle() hook. Used by all CPUs with !CONFIG_CPU_IDLE and + * by secondary CPU with CONFIG_CPU_IDLE.   */  static void omap_default_idle(void)  { -	local_fiq_disable(); -  	omap_do_wfi(); - -	local_fiq_enable();  }  /** @@ -147,8 +143,8 @@ static void omap_default_idle(void)  int __init omap4_pm_init(void)  {  	int ret; -	struct clockdomain *emif_clkdm, *mpuss_clkdm, *l3_1_clkdm, *l4wkup; -	struct clockdomain *ducati_clkdm, *l3_2_clkdm, *l4_per_clkdm; +	struct clockdomain *emif_clkdm, *mpuss_clkdm, *l3_1_clkdm; +	struct clockdomain *ducati_clkdm, *l3_2_clkdm;  	if (omap_rev() == OMAP4430_REV_ES1_0) {  		WARN(1, "Power Management not supported on OMAP4430 ES1.0\n"); @@ -175,27 +171,19 @@ int __init omap4_pm_init(void)  	 * MPUSS -> L4_PER/L3_* and DUCATI -> L3_* doesn't work as  	 * expected. The hardware recommendation is to enable static  	 * dependencies for these to avoid system lock ups or random crashes. -	 * The L4 wakeup depedency is added to workaround the OCP sync hardware -	 * BUG with 32K synctimer which lead to incorrect timer value read -	 * from the 32K counter. The BUG applies for GPTIMER1 and WDT2 which -	 * are part of L4 wakeup clockdomain.  	 */  	mpuss_clkdm = clkdm_lookup("mpuss_clkdm");  	emif_clkdm = clkdm_lookup("l3_emif_clkdm");  	l3_1_clkdm = clkdm_lookup("l3_1_clkdm");  	l3_2_clkdm = clkdm_lookup("l3_2_clkdm"); -	l4_per_clkdm = clkdm_lookup("l4_per_clkdm"); -	l4wkup = clkdm_lookup("l4_wkup_clkdm");  	ducati_clkdm = clkdm_lookup("ducati_clkdm"); -	if ((!mpuss_clkdm) || (!emif_clkdm) || (!l3_1_clkdm) || (!l4wkup) || -		(!l3_2_clkdm) || (!ducati_clkdm) || (!l4_per_clkdm)) +	if ((!mpuss_clkdm) || (!emif_clkdm) || (!l3_1_clkdm) || +		(!l3_2_clkdm) || (!ducati_clkdm))  		goto err2;  	ret = clkdm_add_wkdep(mpuss_clkdm, emif_clkdm);  	ret |= clkdm_add_wkdep(mpuss_clkdm, l3_1_clkdm);  	ret |= clkdm_add_wkdep(mpuss_clkdm, l3_2_clkdm); -	ret |= clkdm_add_wkdep(mpuss_clkdm, l4_per_clkdm); -	ret |= clkdm_add_wkdep(mpuss_clkdm, l4wkup);  	ret |= clkdm_add_wkdep(ducati_clkdm, l3_1_clkdm);  	ret |= clkdm_add_wkdep(ducati_clkdm, l3_2_clkdm);  	if (ret) { diff --git a/arch/arm/mach-orion5x/board-dt.c b/arch/arm/mach-orion5x/board-dt.c index 35a8014529c..94fbb815680 100644 --- a/arch/arm/mach-orion5x/board-dt.c +++ b/arch/arm/mach-orion5x/board-dt.c @@ -14,6 +14,7 @@  #include <linux/init.h>  #include <linux/of.h>  #include <linux/of_platform.h> +#include <linux/cpu.h>  #include <asm/system_misc.h>  #include <asm/mach/arch.h>  #include <mach/orion5x.h> @@ -52,7 +53,7 @@ static void __init orion5x_dt_init(void)  	 */  	if (dev == MV88F5281_DEV_ID && rev == MV88F5281_REV_D0) {  		printk(KERN_INFO "Orion: Applying 5281 D0 WFI workaround.\n"); -		disable_hlt(); +		cpu_idle_poll_ctrl(true);  	}  	if (of_machine_is_compatible("lacie,ethernet-disk-mini-v2")) diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c index d068f1431c4..2075bf8e3d9 100644 --- a/arch/arm/mach-orion5x/common.c +++ b/arch/arm/mach-orion5x/common.c @@ -19,6 +19,7 @@  #include <linux/ata_platform.h>  #include <linux/delay.h>  #include <linux/clk-provider.h> +#include <linux/cpu.h>  #include <net/dsa.h>  #include <asm/page.h>  #include <asm/setup.h> @@ -293,7 +294,7 @@ void __init orion5x_init(void)  	 */  	if (dev == MV88F5281_DEV_ID && rev == MV88F5281_REV_D0) {  		printk(KERN_INFO "Orion: Applying 5281 D0 WFI workaround.\n"); -		disable_hlt(); +		cpu_idle_poll_ctrl(true);  	}  	/* diff --git a/arch/arm/mach-orion5x/pci.c b/arch/arm/mach-orion5x/pci.c index d9c7c3bf0d9..973db98a3c2 100644 --- a/arch/arm/mach-orion5x/pci.c +++ b/arch/arm/mach-orion5x/pci.c @@ -402,8 +402,9 @@ static void __init orion5x_pci_master_slave_enable(void)  	orion5x_pci_hw_wr_conf(bus_nr, 0, func, reg, 4, val | 0x7);  } -static void __init orion5x_setup_pci_wins(struct mbus_dram_target_info *dram) +static void __init orion5x_setup_pci_wins(void)  { +	const struct mbus_dram_target_info *dram = mv_mbus_dram_info();  	u32 win_enable;  	int bus;  	int i; @@ -420,7 +421,7 @@ static void __init orion5x_setup_pci_wins(struct mbus_dram_target_info *dram)  	bus = orion5x_pci_local_bus_nr();  	for (i = 0; i < dram->num_cs; i++) { -		struct mbus_dram_window *cs = dram->cs + i; +		const struct mbus_dram_window *cs = dram->cs + i;  		u32 func = PCI_CONF_FUNC_BAR_CS(cs->cs_index);  		u32 reg;  		u32 val; @@ -467,7 +468,7 @@ static int __init pci_setup(struct pci_sys_data *sys)  	/*  	 * Point PCI unit MBUS decode windows to DRAM space.  	 */ -	orion5x_setup_pci_wins(&orion_mbus_dram_info); +	orion5x_setup_pci_wins();  	/*  	 * Master + Slave enable diff --git a/arch/arm/mach-prima2/Kconfig b/arch/arm/mach-prima2/Kconfig index 4f7379fe01e..80ca974b2f8 100644 --- a/arch/arm/mach-prima2/Kconfig +++ b/arch/arm/mach-prima2/Kconfig @@ -1,6 +1,26 @@ +config ARCH_SIRF +	bool "CSR SiRF" if ARCH_MULTI_V7 +	select ARCH_REQUIRE_GPIOLIB +	select GENERIC_CLOCKEVENTS +	select GENERIC_IRQ_CHIP +	select MIGHT_HAVE_CACHE_L2X0 +	select NO_IOPORT +	select PINCTRL +	select PINCTRL_SIRF +	help +	  Support for CSR SiRFprimaII/Marco/Polo platforms +  if ARCH_SIRF -menu "CSR SiRF primaII/Marco/Polo Specific Features" +menu "CSR SiRF atlas6/primaII/Marco/Polo Specific Features" + +config ARCH_ATLAS6 +	bool "CSR SiRFSoC ATLAS6 ARM Cortex A9 Platform" +	default y +	select CPU_V7 +	select SIRF_IRQ +	help +          Support for CSR SiRFSoC ARM Cortex A9 Platform  config ARCH_PRIMA2  	bool "CSR SiRFSoC PRIMA2 ARM Cortex A9 Platform" @@ -16,6 +36,7 @@ config ARCH_MARCO  	default y  	select ARM_GIC  	select CPU_V7 +	select HAVE_ARM_SCU if SMP  	select HAVE_SMP  	select SMP_ON_UP  	help diff --git a/arch/arm/mach-prima2/Makefile b/arch/arm/mach-prima2/Makefile index bfe360cbd17..7a6b4a32312 100644 --- a/arch/arm/mach-prima2/Makefile +++ b/arch/arm/mach-prima2/Makefile @@ -4,8 +4,7 @@ obj-y += rtciobrg.o  obj-$(CONFIG_DEBUG_LL) += lluart.o  obj-$(CONFIG_CACHE_L2X0) += l2x0.o  obj-$(CONFIG_SUSPEND) += pm.o sleep.o -obj-$(CONFIG_SIRF_IRQ) += irq.o  obj-$(CONFIG_SMP) += platsmp.o headsmp.o  obj-$(CONFIG_HOTPLUG_CPU)  += hotplug.o -obj-$(CONFIG_ARCH_PRIMA2) += timer-prima2.o -obj-$(CONFIG_ARCH_MARCO) += timer-marco.o + +CFLAGS_hotplug.o += -march=armv7-a diff --git a/arch/arm/mach-prima2/common.c b/arch/arm/mach-prima2/common.c index 2d57aa479a7..4f94cd87972 100644 --- a/arch/arm/mach-prima2/common.c +++ b/arch/arm/mach-prima2/common.c @@ -6,6 +6,7 @@   * Licensed under GPLv2 or later.   */ +#include <linux/clocksource.h>  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/irqchip.h> @@ -31,12 +32,38 @@ void __init sirfsoc_init_late(void)  	sirfsoc_pm_init();  } +static __init void sirfsoc_init_time(void) +{ +	/* initialize clocking early, we want to set the OS timer */ +	sirfsoc_of_clk_init(); +	clocksource_of_init(); +} +  static __init void sirfsoc_map_io(void)  {  	sirfsoc_map_lluart();  	sirfsoc_map_scu();  } +#ifdef CONFIG_ARCH_ATLAS6 +static const char *atlas6_dt_match[] __initdata = { +	"sirf,atlas6", +	NULL +}; + +DT_MACHINE_START(ATLAS6_DT, "Generic ATLAS6 (Flattened Device Tree)") +	/* Maintainer: Barry Song <baohua.song@csr.com> */ +	.nr_irqs	= 128, +	.map_io         = sirfsoc_map_io, +	.init_irq	= irqchip_init, +	.init_time	= sirfsoc_init_time, +	.init_machine	= sirfsoc_mach_init, +	.init_late	= sirfsoc_init_late, +	.dt_compat      = atlas6_dt_match, +	.restart	= sirfsoc_restart, +MACHINE_END +#endif +  #ifdef CONFIG_ARCH_PRIMA2  static const char *prima2_dt_match[] __initdata = {         "sirf,prima2", @@ -45,12 +72,10 @@ static const char *prima2_dt_match[] __initdata = {  DT_MACHINE_START(PRIMA2_DT, "Generic PRIMA2 (Flattened Device Tree)")  	/* Maintainer: Barry Song <baohua.song@csr.com> */ +	.nr_irqs	= 128,  	.map_io         = sirfsoc_map_io, -	.init_irq	= sirfsoc_of_irq_init, -	.init_time	= sirfsoc_prima2_timer_init, -#ifdef CONFIG_MULTI_IRQ_HANDLER -	.handle_irq     = sirfsoc_handle_irq, -#endif +	.init_irq	= irqchip_init, +	.init_time	= sirfsoc_init_time,  	.dma_zone_size	= SZ_256M,  	.init_machine	= sirfsoc_mach_init,  	.init_late	= sirfsoc_init_late, @@ -70,7 +95,7 @@ DT_MACHINE_START(MARCO_DT, "Generic MARCO (Flattened Device Tree)")  	.smp            = smp_ops(sirfsoc_smp_ops),  	.map_io         = sirfsoc_map_io,  	.init_irq	= irqchip_init, -	.init_time	= sirfsoc_marco_timer_init, +	.init_time	= sirfsoc_init_time,  	.init_machine	= sirfsoc_mach_init,  	.init_late	= sirfsoc_init_late,  	.dt_compat      = marco_dt_match, diff --git a/arch/arm/mach-prima2/common.h b/arch/arm/mach-prima2/common.h index b7c26b62e4a..81135cd88e5 100644 --- a/arch/arm/mach-prima2/common.h +++ b/arch/arm/mach-prima2/common.h @@ -13,8 +13,8 @@  #include <asm/mach/time.h>  #include <asm/exception.h> -extern void sirfsoc_prima2_timer_init(void); -extern void sirfsoc_marco_timer_init(void); +#define SIRFSOC_VA_BASE		_AC(0xFEC00000, UL) +#define SIRFSOC_VA(x)		(SIRFSOC_VA_BASE + ((x) & 0x00FFF000))  extern struct smp_operations   sirfsoc_smp_ops;  extern void sirfsoc_secondary_startup(void); diff --git a/arch/arm/mach-prima2/hotplug.c b/arch/arm/mach-prima2/hotplug.c index f4b17cbabab..0ab2f8bae28 100644 --- a/arch/arm/mach-prima2/hotplug.c +++ b/arch/arm/mach-prima2/hotplug.c @@ -10,13 +10,10 @@  #include <linux/errno.h>  #include <linux/smp.h> -#include <asm/cacheflush.h>  #include <asm/smp_plat.h>  static inline void platform_do_lowpower(unsigned int cpu)  { -	flush_cache_all(); -  	/* we put the platform to just WFI */  	for (;;) {  		__asm__ __volatile__("dsb\n\t" "wfi\n\t" diff --git a/arch/arm/mach-prima2/include/mach/clkdev.h b/arch/arm/mach-prima2/include/mach/clkdev.h deleted file mode 100644 index 66932518b1b..00000000000 --- a/arch/arm/mach-prima2/include/mach/clkdev.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * arch/arm/mach-prima2/include/mach/clkdev.h - * - * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company. - * - * Licensed under GPLv2 or later. - */ - -#ifndef __MACH_CLKDEV_H -#define __MACH_CLKDEV_H - -#define __clk_get(clk) ({ 1; }) -#define __clk_put(clk) do { } while (0) - -#endif diff --git a/arch/arm/mach-prima2/include/mach/debug-macro.S b/arch/arm/mach-prima2/include/mach/debug-macro.S deleted file mode 100644 index cd97492bb07..00000000000 --- a/arch/arm/mach-prima2/include/mach/debug-macro.S +++ /dev/null @@ -1,29 +0,0 @@ -/* - * arch/arm/mach-prima2/include/mach/debug-macro.S - * - * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company. - * - * Licensed under GPLv2 or later. - */ - -#include <mach/hardware.h> -#include <mach/uart.h> - -	.macro	addruart, rp, rv, tmp -	ldr	\rp, =SIRFSOC_UART1_PA_BASE		@ physical -	ldr	\rv, =SIRFSOC_UART1_VA_BASE		@ virtual -	.endm - -	.macro	senduart,rd,rx -	str	\rd, [\rx, #SIRFSOC_UART_TXFIFO_DATA] -	.endm - -	.macro	busyuart,rd,rx -	.endm - -	.macro	waituart,rd,rx -1001:	ldr	\rd, [\rx, #SIRFSOC_UART_TXFIFO_STATUS] -	tst	\rd, #SIRFSOC_UART1_TXFIFO_EMPTY -	beq	1001b -	.endm - diff --git a/arch/arm/mach-prima2/include/mach/entry-macro.S b/arch/arm/mach-prima2/include/mach/entry-macro.S deleted file mode 100644 index 86434e7a5be..00000000000 --- a/arch/arm/mach-prima2/include/mach/entry-macro.S +++ /dev/null @@ -1,22 +0,0 @@ -/* - * arch/arm/mach-prima2/include/mach/entry-macro.S - * - * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company. - * - * Licensed under GPLv2 or later. - */ - -#include <mach/hardware.h> - -#define SIRFSOC_INT_ID 0x38 - -	.macro  get_irqnr_preamble, base, tmp -	ldr     \base, =sirfsoc_intc_base -	ldr     \base, [\base] -	.endm - -	.macro  get_irqnr_and_base, irqnr, irqstat, base, tmp -	ldr \irqnr, [\base, #SIRFSOC_INT_ID]	@ Get the highest priority irq -	cmp \irqnr, #0x40			@ the irq num can't be larger than 0x3f -	movges \irqnr, #0 -	.endm diff --git a/arch/arm/mach-prima2/include/mach/hardware.h b/arch/arm/mach-prima2/include/mach/hardware.h deleted file mode 100644 index 105b96964f2..00000000000 --- a/arch/arm/mach-prima2/include/mach/hardware.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * arch/arm/mach-prima2/include/mach/hardware.h - * - * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company. - * - * Licensed under GPLv2 or later. - */ - -#ifndef __MACH_HARDWARE_H__ -#define __MACH_HARDWARE_H__ - -#include <asm/sizes.h> -#include <mach/map.h> - -#endif diff --git a/arch/arm/mach-prima2/include/mach/irqs.h b/arch/arm/mach-prima2/include/mach/irqs.h deleted file mode 100644 index b778a0f248e..00000000000 --- a/arch/arm/mach-prima2/include/mach/irqs.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * arch/arm/mach-prima2/include/mach/irqs.h - * - * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company. - * - * Licensed under GPLv2 or later. - */ - -#ifndef __ASM_ARCH_IRQS_H -#define __ASM_ARCH_IRQS_H - -#define SIRFSOC_INTENAL_IRQ_START  0 -#define SIRFSOC_INTENAL_IRQ_END    127 -#define SIRFSOC_GPIO_IRQ_START     (SIRFSOC_INTENAL_IRQ_END + 1) -#define NR_IRQS	288 - -#endif diff --git a/arch/arm/mach-prima2/include/mach/map.h b/arch/arm/mach-prima2/include/mach/map.h deleted file mode 100644 index 6f243532570..00000000000 --- a/arch/arm/mach-prima2/include/mach/map.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * memory & I/O static mapping definitions for CSR SiRFprimaII - * - * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company. - * - * Licensed under GPLv2 or later. - */ - -#ifndef __MACH_PRIMA2_MAP_H__ -#define __MACH_PRIMA2_MAP_H__ - -#include <linux/const.h> - -#define SIRFSOC_VA_BASE		_AC(0xFEC00000, UL) - -#define SIRFSOC_VA(x)		(SIRFSOC_VA_BASE + ((x) & 0x00FFF000)) - -#endif diff --git a/arch/arm/mach-prima2/include/mach/timex.h b/arch/arm/mach-prima2/include/mach/timex.h deleted file mode 100644 index d6f98a75e56..00000000000 --- a/arch/arm/mach-prima2/include/mach/timex.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * arch/arm/mach-prima2/include/mach/timex.h - * - * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company. - * - * Licensed under GPLv2 or later. - */ - -#ifndef __MACH_TIMEX_H__ -#define __MACH_TIMEX_H__ - -#define CLOCK_TICK_RATE  1000000 - -#endif diff --git a/arch/arm/mach-prima2/include/mach/uncompress.h b/arch/arm/mach-prima2/include/mach/uncompress.h deleted file mode 100644 index d1513a33709..00000000000 --- a/arch/arm/mach-prima2/include/mach/uncompress.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * arch/arm/mach-prima2/include/mach/uncompress.h - * - * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company. - * - * Licensed under GPLv2 or later. - */ - -#ifndef __ASM_ARCH_UNCOMPRESS_H -#define __ASM_ARCH_UNCOMPRESS_H - -#include <linux/io.h> -#include <mach/hardware.h> -#include <mach/uart.h> - -void arch_decomp_setup(void) -{ -} - -static __inline__ void putc(char c) -{ -	/* -	 * during kernel decompression, all mappings are flat: -	 *  virt_addr == phys_addr -	 */ -	if (!SIRFSOC_UART1_PA_BASE) -		return; - -	while (__raw_readl((void __iomem *)SIRFSOC_UART1_PA_BASE + SIRFSOC_UART_TXFIFO_STATUS) -		& SIRFSOC_UART1_TXFIFO_FULL) -		barrier(); - -	__raw_writel(c, (void __iomem *)SIRFSOC_UART1_PA_BASE + SIRFSOC_UART_TXFIFO_DATA); -} - -static inline void flush(void) -{ -} - -#endif - diff --git a/arch/arm/mach-prima2/irq.c b/arch/arm/mach-prima2/irq.c deleted file mode 100644 index 6c0f3e9c43f..00000000000 --- a/arch/arm/mach-prima2/irq.c +++ /dev/null @@ -1,129 +0,0 @@ -/* - * interrupt controller support for CSR SiRFprimaII - * - * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company. - * - * Licensed under GPLv2 or later. - */ - -#include <linux/init.h> -#include <linux/io.h> -#include <linux/irq.h> -#include <linux/of.h> -#include <linux/of_address.h> -#include <linux/irqdomain.h> -#include <linux/syscore_ops.h> -#include <asm/mach/irq.h> -#include <asm/exception.h> -#include <mach/hardware.h> - -#define SIRFSOC_INT_RISC_MASK0          0x0018 -#define SIRFSOC_INT_RISC_MASK1          0x001C -#define SIRFSOC_INT_RISC_LEVEL0         0x0020 -#define SIRFSOC_INT_RISC_LEVEL1         0x0024 -#define SIRFSOC_INIT_IRQ_ID		0x0038 - -void __iomem *sirfsoc_intc_base; - -static __init void -sirfsoc_alloc_gc(void __iomem *base, unsigned int irq_start, unsigned int num) -{ -	struct irq_chip_generic *gc; -	struct irq_chip_type *ct; - -	gc = irq_alloc_generic_chip("SIRFINTC", 1, irq_start, base, handle_level_irq); -	ct = gc->chip_types; - -	ct->chip.irq_mask = irq_gc_mask_clr_bit; -	ct->chip.irq_unmask = irq_gc_mask_set_bit; -	ct->regs.mask = SIRFSOC_INT_RISC_MASK0; - -	irq_setup_generic_chip(gc, IRQ_MSK(num), IRQ_GC_INIT_MASK_CACHE, IRQ_NOREQUEST, 0); -} - -static __init void sirfsoc_irq_init(void) -{ -	sirfsoc_alloc_gc(sirfsoc_intc_base, 0, 32); -	sirfsoc_alloc_gc(sirfsoc_intc_base + 4, 32, -			SIRFSOC_INTENAL_IRQ_END + 1 - 32); - -	writel_relaxed(0, sirfsoc_intc_base + SIRFSOC_INT_RISC_LEVEL0); -	writel_relaxed(0, sirfsoc_intc_base + SIRFSOC_INT_RISC_LEVEL1); - -	writel_relaxed(0, sirfsoc_intc_base + SIRFSOC_INT_RISC_MASK0); -	writel_relaxed(0, sirfsoc_intc_base + SIRFSOC_INT_RISC_MASK1); -} - -asmlinkage void __exception_irq_entry sirfsoc_handle_irq(struct pt_regs *regs) -{ -	u32 irqstat, irqnr; - -	irqstat = readl_relaxed(sirfsoc_intc_base + SIRFSOC_INIT_IRQ_ID); -	irqnr = irqstat & 0xff; - -	handle_IRQ(irqnr, regs); -} - -static struct of_device_id intc_ids[]  = { -	{ .compatible = "sirf,prima2-intc" }, -	{}, -}; - -void __init sirfsoc_of_irq_init(void) -{ -	struct device_node *np; - -	np = of_find_matching_node(NULL, intc_ids); -	if (!np) -		return; - -	sirfsoc_intc_base = of_iomap(np, 0); -	if (!sirfsoc_intc_base) -		panic("unable to map intc cpu registers\n"); - -	irq_domain_add_legacy(np, SIRFSOC_INTENAL_IRQ_END + 1, 0, 0, -		&irq_domain_simple_ops, NULL); - -	of_node_put(np); - -	sirfsoc_irq_init(); -} - -struct sirfsoc_irq_status { -	u32 mask0; -	u32 mask1; -	u32 level0; -	u32 level1; -}; - -static struct sirfsoc_irq_status sirfsoc_irq_st; - -static int sirfsoc_irq_suspend(void) -{ -	sirfsoc_irq_st.mask0 = readl_relaxed(sirfsoc_intc_base + SIRFSOC_INT_RISC_MASK0); -	sirfsoc_irq_st.mask1 = readl_relaxed(sirfsoc_intc_base + SIRFSOC_INT_RISC_MASK1); -	sirfsoc_irq_st.level0 = readl_relaxed(sirfsoc_intc_base + SIRFSOC_INT_RISC_LEVEL0); -	sirfsoc_irq_st.level1 = readl_relaxed(sirfsoc_intc_base + SIRFSOC_INT_RISC_LEVEL1); - -	return 0; -} - -static void sirfsoc_irq_resume(void) -{ -	writel_relaxed(sirfsoc_irq_st.mask0, sirfsoc_intc_base + SIRFSOC_INT_RISC_MASK0); -	writel_relaxed(sirfsoc_irq_st.mask1, sirfsoc_intc_base + SIRFSOC_INT_RISC_MASK1); -	writel_relaxed(sirfsoc_irq_st.level0, sirfsoc_intc_base + SIRFSOC_INT_RISC_LEVEL0); -	writel_relaxed(sirfsoc_irq_st.level1, sirfsoc_intc_base + SIRFSOC_INT_RISC_LEVEL1); -} - -static struct syscore_ops sirfsoc_irq_syscore_ops = { -	.suspend	= sirfsoc_irq_suspend, -	.resume		= sirfsoc_irq_resume, -}; - -static int __init sirfsoc_irq_pm_init(void) -{ -	register_syscore_ops(&sirfsoc_irq_syscore_ops); -	return 0; -} -device_initcall(sirfsoc_irq_pm_init); diff --git a/arch/arm/mach-prima2/lluart.c b/arch/arm/mach-prima2/lluart.c index a89f9b3c8cc..99c0c927ca4 100644 --- a/arch/arm/mach-prima2/lluart.c +++ b/arch/arm/mach-prima2/lluart.c @@ -9,8 +9,18 @@  #include <linux/kernel.h>  #include <asm/page.h>  #include <asm/mach/map.h> -#include <mach/map.h> -#include <mach/uart.h> +#include "common.h" + +#if defined(CONFIG_DEBUG_SIRFPRIMA2_UART1) +#define SIRFSOC_UART1_PA_BASE          0xb0060000 +#elif defined(CONFIG_DEBUG_SIRFMARCO_UART1) +#define SIRFSOC_UART1_PA_BASE          0xcc060000 +#else +#define SIRFSOC_UART1_PA_BASE          0 +#endif + +#define SIRFSOC_UART1_VA_BASE          SIRFSOC_VA(0x060000) +#define SIRFSOC_UART1_SIZE		SZ_4K  void __init sirfsoc_map_lluart(void)  { diff --git a/arch/arm/mach-prima2/platsmp.c b/arch/arm/mach-prima2/platsmp.c index 4b788310f6a..1c3de7bed84 100644 --- a/arch/arm/mach-prima2/platsmp.c +++ b/arch/arm/mach-prima2/platsmp.c @@ -11,14 +11,12 @@  #include <linux/delay.h>  #include <linux/of.h>  #include <linux/of_address.h> -#include <linux/irqchip/arm-gic.h>  #include <asm/page.h>  #include <asm/mach/map.h>  #include <asm/smp_plat.h>  #include <asm/smp_scu.h>  #include <asm/cacheflush.h>  #include <asm/cputype.h> -#include <mach/map.h>  #include "common.h" @@ -49,13 +47,6 @@ void __init sirfsoc_map_scu(void)  static void __cpuinit sirfsoc_secondary_init(unsigned int cpu)  {  	/* -	 * 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); - -	/*  	 * let the primary processor know we're out of the  	 * pen, then head off into the C entry point  	 */ diff --git a/arch/arm/mach-prima2/timer-marco.c b/arch/arm/mach-prima2/timer-marco.c deleted file mode 100644 index f4eea2e97eb..00000000000 --- a/arch/arm/mach-prima2/timer-marco.c +++ /dev/null @@ -1,316 +0,0 @@ -/* - * System timer for CSR SiRFprimaII - * - * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company. - * - * Licensed under GPLv2 or later. - */ - -#include <linux/kernel.h> -#include <linux/interrupt.h> -#include <linux/clockchips.h> -#include <linux/clocksource.h> -#include <linux/bitops.h> -#include <linux/irq.h> -#include <linux/clk.h> -#include <linux/slab.h> -#include <linux/of.h> -#include <linux/of_irq.h> -#include <linux/of_address.h> -#include <asm/sched_clock.h> -#include <asm/localtimer.h> -#include <asm/mach/time.h> - -#include "common.h" - -#define SIRFSOC_TIMER_32COUNTER_0_CTRL			0x0000 -#define SIRFSOC_TIMER_32COUNTER_1_CTRL			0x0004 -#define SIRFSOC_TIMER_MATCH_0				0x0018 -#define SIRFSOC_TIMER_MATCH_1				0x001c -#define SIRFSOC_TIMER_COUNTER_0				0x0048 -#define SIRFSOC_TIMER_COUNTER_1				0x004c -#define SIRFSOC_TIMER_INTR_STATUS			0x0060 -#define SIRFSOC_TIMER_WATCHDOG_EN			0x0064 -#define SIRFSOC_TIMER_64COUNTER_CTRL			0x0068 -#define SIRFSOC_TIMER_64COUNTER_LO			0x006c -#define SIRFSOC_TIMER_64COUNTER_HI			0x0070 -#define SIRFSOC_TIMER_64COUNTER_LOAD_LO			0x0074 -#define SIRFSOC_TIMER_64COUNTER_LOAD_HI			0x0078 -#define SIRFSOC_TIMER_64COUNTER_RLATCHED_LO		0x007c -#define SIRFSOC_TIMER_64COUNTER_RLATCHED_HI		0x0080 - -#define SIRFSOC_TIMER_REG_CNT 6 - -static const u32 sirfsoc_timer_reg_list[SIRFSOC_TIMER_REG_CNT] = { -	SIRFSOC_TIMER_WATCHDOG_EN, -	SIRFSOC_TIMER_32COUNTER_0_CTRL, -	SIRFSOC_TIMER_32COUNTER_1_CTRL, -	SIRFSOC_TIMER_64COUNTER_CTRL, -	SIRFSOC_TIMER_64COUNTER_RLATCHED_LO, -	SIRFSOC_TIMER_64COUNTER_RLATCHED_HI, -}; - -static u32 sirfsoc_timer_reg_val[SIRFSOC_TIMER_REG_CNT]; - -static void __iomem *sirfsoc_timer_base; -static void __init sirfsoc_of_timer_map(void); - -/* disable count and interrupt */ -static inline void sirfsoc_timer_count_disable(int idx) -{ -	writel_relaxed(readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_32COUNTER_0_CTRL + 4 * idx) & ~0x7, -		sirfsoc_timer_base + SIRFSOC_TIMER_32COUNTER_0_CTRL + 4 * idx); -} - -/* enable count and interrupt */ -static inline void sirfsoc_timer_count_enable(int idx) -{ -	writel_relaxed(readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_32COUNTER_0_CTRL + 4 * idx) | 0x7, -		sirfsoc_timer_base + SIRFSOC_TIMER_32COUNTER_0_CTRL + 4 * idx); -} - -/* timer interrupt handler */ -static irqreturn_t sirfsoc_timer_interrupt(int irq, void *dev_id) -{ -	struct clock_event_device *ce = dev_id; -	int cpu = smp_processor_id(); - -	/* clear timer interrupt */ -	writel_relaxed(BIT(cpu), sirfsoc_timer_base + SIRFSOC_TIMER_INTR_STATUS); - -	if (ce->mode == CLOCK_EVT_MODE_ONESHOT) -		sirfsoc_timer_count_disable(cpu); - -	ce->event_handler(ce); - -	return IRQ_HANDLED; -} - -/* read 64-bit timer counter */ -static cycle_t sirfsoc_timer_read(struct clocksource *cs) -{ -	u64 cycles; - -	writel_relaxed((readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_64COUNTER_CTRL) | -			BIT(0)) & ~BIT(1), sirfsoc_timer_base + SIRFSOC_TIMER_64COUNTER_CTRL); - -	cycles = readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_64COUNTER_RLATCHED_HI); -	cycles = (cycles << 32) | readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_64COUNTER_RLATCHED_LO); - -	return cycles; -} - -static int sirfsoc_timer_set_next_event(unsigned long delta, -	struct clock_event_device *ce) -{ -	int cpu = smp_processor_id(); - -	writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_0 + -		4 * cpu); -	writel_relaxed(delta, sirfsoc_timer_base + SIRFSOC_TIMER_MATCH_0 + -		4 * cpu); - -	/* enable the tick */ -	sirfsoc_timer_count_enable(cpu); - -	return 0; -} - -static void sirfsoc_timer_set_mode(enum clock_event_mode mode, -	struct clock_event_device *ce) -{ -	switch (mode) { -	case CLOCK_EVT_MODE_ONESHOT: -		/* enable in set_next_event */ -		break; -	default: -		break; -	} - -	sirfsoc_timer_count_disable(smp_processor_id()); -} - -static void sirfsoc_clocksource_suspend(struct clocksource *cs) -{ -	int i; - -	for (i = 0; i < SIRFSOC_TIMER_REG_CNT; i++) -		sirfsoc_timer_reg_val[i] = readl_relaxed(sirfsoc_timer_base + sirfsoc_timer_reg_list[i]); -} - -static void sirfsoc_clocksource_resume(struct clocksource *cs) -{ -	int i; - -	for (i = 0; i < SIRFSOC_TIMER_REG_CNT - 2; i++) -		writel_relaxed(sirfsoc_timer_reg_val[i], sirfsoc_timer_base + sirfsoc_timer_reg_list[i]); - -	writel_relaxed(sirfsoc_timer_reg_val[SIRFSOC_TIMER_REG_CNT - 2], -		sirfsoc_timer_base + SIRFSOC_TIMER_64COUNTER_LOAD_LO); -	writel_relaxed(sirfsoc_timer_reg_val[SIRFSOC_TIMER_REG_CNT - 1], -		sirfsoc_timer_base + SIRFSOC_TIMER_64COUNTER_LOAD_HI); - -	writel_relaxed(readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_64COUNTER_CTRL) | -		BIT(1) | BIT(0), sirfsoc_timer_base + SIRFSOC_TIMER_64COUNTER_CTRL); -} - -static struct clock_event_device sirfsoc_clockevent = { -	.name = "sirfsoc_clockevent", -	.rating = 200, -	.features = CLOCK_EVT_FEAT_ONESHOT, -	.set_mode = sirfsoc_timer_set_mode, -	.set_next_event = sirfsoc_timer_set_next_event, -}; - -static struct clocksource sirfsoc_clocksource = { -	.name = "sirfsoc_clocksource", -	.rating = 200, -	.mask = CLOCKSOURCE_MASK(64), -	.flags = CLOCK_SOURCE_IS_CONTINUOUS, -	.read = sirfsoc_timer_read, -	.suspend = sirfsoc_clocksource_suspend, -	.resume = sirfsoc_clocksource_resume, -}; - -static struct irqaction sirfsoc_timer_irq = { -	.name = "sirfsoc_timer0", -	.flags = IRQF_TIMER | IRQF_NOBALANCING, -	.handler = sirfsoc_timer_interrupt, -	.dev_id = &sirfsoc_clockevent, -}; - -#ifdef CONFIG_LOCAL_TIMERS - -static struct irqaction sirfsoc_timer1_irq = { -	.name = "sirfsoc_timer1", -	.flags = IRQF_TIMER | IRQF_NOBALANCING, -	.handler = sirfsoc_timer_interrupt, -}; - -static int __cpuinit sirfsoc_local_timer_setup(struct clock_event_device *ce) -{ -	/* Use existing clock_event for cpu 0 */ -	if (!smp_processor_id()) -		return 0; - -	ce->irq = sirfsoc_timer1_irq.irq; -	ce->name = "local_timer"; -	ce->features = sirfsoc_clockevent.features; -	ce->rating = sirfsoc_clockevent.rating; -	ce->set_mode = sirfsoc_timer_set_mode; -	ce->set_next_event = sirfsoc_timer_set_next_event; -	ce->shift = sirfsoc_clockevent.shift; -	ce->mult = sirfsoc_clockevent.mult; -	ce->max_delta_ns = sirfsoc_clockevent.max_delta_ns; -	ce->min_delta_ns = sirfsoc_clockevent.min_delta_ns; - -	sirfsoc_timer1_irq.dev_id = ce; -	BUG_ON(setup_irq(ce->irq, &sirfsoc_timer1_irq)); -	irq_set_affinity(sirfsoc_timer1_irq.irq, cpumask_of(1)); - -	clockevents_register_device(ce); -	return 0; -} - -static void sirfsoc_local_timer_stop(struct clock_event_device *ce) -{ -	sirfsoc_timer_count_disable(1); - -	remove_irq(sirfsoc_timer1_irq.irq, &sirfsoc_timer1_irq); -} - -static struct local_timer_ops sirfsoc_local_timer_ops __cpuinitdata = { -	.setup	= sirfsoc_local_timer_setup, -	.stop	= sirfsoc_local_timer_stop, -}; -#endif /* CONFIG_LOCAL_TIMERS */ - -static void __init sirfsoc_clockevent_init(void) -{ -	clockevents_calc_mult_shift(&sirfsoc_clockevent, CLOCK_TICK_RATE, 60); - -	sirfsoc_clockevent.max_delta_ns = -		clockevent_delta2ns(-2, &sirfsoc_clockevent); -	sirfsoc_clockevent.min_delta_ns = -		clockevent_delta2ns(2, &sirfsoc_clockevent); - -	sirfsoc_clockevent.cpumask = cpumask_of(0); -	clockevents_register_device(&sirfsoc_clockevent); -#ifdef CONFIG_LOCAL_TIMERS -	local_timer_register(&sirfsoc_local_timer_ops); -#endif -} - -/* initialize the kernel jiffy timer source */ -void __init sirfsoc_marco_timer_init(void) -{ -	unsigned long rate; -	u32 timer_div; -	struct clk *clk; - -	/* initialize clocking early, we want to set the OS timer */ -	sirfsoc_of_clk_init(); - -	/* timer's input clock is io clock */ -	clk = clk_get_sys("io", NULL); - -	BUG_ON(IS_ERR(clk)); -	rate = clk_get_rate(clk); - -	BUG_ON(rate < CLOCK_TICK_RATE); -	BUG_ON(rate % CLOCK_TICK_RATE); - -	sirfsoc_of_timer_map(); - -	/* Initialize the timer dividers */ -	timer_div = rate / CLOCK_TICK_RATE - 1; -	writel_relaxed(timer_div << 16, sirfsoc_timer_base + SIRFSOC_TIMER_64COUNTER_CTRL); -	writel_relaxed(timer_div << 16, sirfsoc_timer_base + SIRFSOC_TIMER_32COUNTER_0_CTRL); -	writel_relaxed(timer_div << 16, sirfsoc_timer_base + SIRFSOC_TIMER_32COUNTER_1_CTRL); - -	/* Initialize timer counters to 0 */ -	writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_64COUNTER_LOAD_LO); -	writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_64COUNTER_LOAD_HI); -	writel_relaxed(readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_64COUNTER_CTRL) | -		BIT(1) | BIT(0), sirfsoc_timer_base + SIRFSOC_TIMER_64COUNTER_CTRL); -	writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_0); -	writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_1); - -	/* Clear all interrupts */ -	writel_relaxed(0xFFFF, sirfsoc_timer_base + SIRFSOC_TIMER_INTR_STATUS); - -	BUG_ON(clocksource_register_hz(&sirfsoc_clocksource, CLOCK_TICK_RATE)); - -	BUG_ON(setup_irq(sirfsoc_timer_irq.irq, &sirfsoc_timer_irq)); - -	sirfsoc_clockevent_init(); -} - -static struct of_device_id timer_ids[] = { -	{ .compatible = "sirf,marco-tick" }, -	{}, -}; - -static void __init sirfsoc_of_timer_map(void) -{ -	struct device_node *np; - -	np = of_find_matching_node(NULL, timer_ids); -	if (!np) -		return; -	sirfsoc_timer_base = of_iomap(np, 0); -	if (!sirfsoc_timer_base) -		panic("unable to map timer cpu registers\n"); - -	sirfsoc_timer_irq.irq = irq_of_parse_and_map(np, 0); -	if (!sirfsoc_timer_irq.irq) -		panic("No irq passed for timer0 via DT\n"); - -#ifdef CONFIG_LOCAL_TIMERS -	sirfsoc_timer1_irq.irq = irq_of_parse_and_map(np, 1); -	if (!sirfsoc_timer1_irq.irq) -		panic("No irq passed for timer1 via DT\n"); -#endif - -	of_node_put(np); -} diff --git a/arch/arm/mach-prima2/timer-prima2.c b/arch/arm/mach-prima2/timer-prima2.c deleted file mode 100644 index 6da584f8a94..00000000000 --- a/arch/arm/mach-prima2/timer-prima2.c +++ /dev/null @@ -1,241 +0,0 @@ -/* - * System timer for CSR SiRFprimaII - * - * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company. - * - * Licensed under GPLv2 or later. - */ - -#include <linux/kernel.h> -#include <linux/interrupt.h> -#include <linux/clockchips.h> -#include <linux/clocksource.h> -#include <linux/bitops.h> -#include <linux/irq.h> -#include <linux/clk.h> -#include <linux/err.h> -#include <linux/slab.h> -#include <linux/of.h> -#include <linux/of_address.h> -#include <mach/map.h> -#include <asm/sched_clock.h> -#include <asm/mach/time.h> - -#include "common.h" - -#define SIRFSOC_TIMER_COUNTER_LO	0x0000 -#define SIRFSOC_TIMER_COUNTER_HI	0x0004 -#define SIRFSOC_TIMER_MATCH_0		0x0008 -#define SIRFSOC_TIMER_MATCH_1		0x000C -#define SIRFSOC_TIMER_MATCH_2		0x0010 -#define SIRFSOC_TIMER_MATCH_3		0x0014 -#define SIRFSOC_TIMER_MATCH_4		0x0018 -#define SIRFSOC_TIMER_MATCH_5		0x001C -#define SIRFSOC_TIMER_STATUS		0x0020 -#define SIRFSOC_TIMER_INT_EN		0x0024 -#define SIRFSOC_TIMER_WATCHDOG_EN	0x0028 -#define SIRFSOC_TIMER_DIV		0x002C -#define SIRFSOC_TIMER_LATCH		0x0030 -#define SIRFSOC_TIMER_LATCHED_LO	0x0034 -#define SIRFSOC_TIMER_LATCHED_HI	0x0038 - -#define SIRFSOC_TIMER_WDT_INDEX		5 - -#define SIRFSOC_TIMER_LATCH_BIT	 BIT(0) - -#define SIRFSOC_TIMER_REG_CNT 11 - -static const u32 sirfsoc_timer_reg_list[SIRFSOC_TIMER_REG_CNT] = { -	SIRFSOC_TIMER_MATCH_0, SIRFSOC_TIMER_MATCH_1, SIRFSOC_TIMER_MATCH_2, -	SIRFSOC_TIMER_MATCH_3, SIRFSOC_TIMER_MATCH_4, SIRFSOC_TIMER_MATCH_5, -	SIRFSOC_TIMER_INT_EN, SIRFSOC_TIMER_WATCHDOG_EN, SIRFSOC_TIMER_DIV, -	SIRFSOC_TIMER_LATCHED_LO, SIRFSOC_TIMER_LATCHED_HI, -}; - -static u32 sirfsoc_timer_reg_val[SIRFSOC_TIMER_REG_CNT]; - -static void __iomem *sirfsoc_timer_base; -static void __init sirfsoc_of_timer_map(void); - -/* timer0 interrupt handler */ -static irqreturn_t sirfsoc_timer_interrupt(int irq, void *dev_id) -{ -	struct clock_event_device *ce = dev_id; - -	WARN_ON(!(readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_STATUS) & BIT(0))); - -	/* clear timer0 interrupt */ -	writel_relaxed(BIT(0), sirfsoc_timer_base + SIRFSOC_TIMER_STATUS); - -	ce->event_handler(ce); - -	return IRQ_HANDLED; -} - -/* read 64-bit timer counter */ -static cycle_t sirfsoc_timer_read(struct clocksource *cs) -{ -	u64 cycles; - -	/* latch the 64-bit timer counter */ -	writel_relaxed(SIRFSOC_TIMER_LATCH_BIT, sirfsoc_timer_base + SIRFSOC_TIMER_LATCH); -	cycles = readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_LATCHED_HI); -	cycles = (cycles << 32) | readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_LATCHED_LO); - -	return cycles; -} - -static int sirfsoc_timer_set_next_event(unsigned long delta, -	struct clock_event_device *ce) -{ -	unsigned long now, next; - -	writel_relaxed(SIRFSOC_TIMER_LATCH_BIT, sirfsoc_timer_base + SIRFSOC_TIMER_LATCH); -	now = readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_LATCHED_LO); -	next = now + delta; -	writel_relaxed(next, sirfsoc_timer_base + SIRFSOC_TIMER_MATCH_0); -	writel_relaxed(SIRFSOC_TIMER_LATCH_BIT, sirfsoc_timer_base + SIRFSOC_TIMER_LATCH); -	now = readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_LATCHED_LO); - -	return next - now > delta ? -ETIME : 0; -} - -static void sirfsoc_timer_set_mode(enum clock_event_mode mode, -	struct clock_event_device *ce) -{ -	u32 val = readl_relaxed(sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN); -	switch (mode) { -	case CLOCK_EVT_MODE_PERIODIC: -		WARN_ON(1); -		break; -	case CLOCK_EVT_MODE_ONESHOT: -		writel_relaxed(val | BIT(0), sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN); -		break; -	case CLOCK_EVT_MODE_SHUTDOWN: -		writel_relaxed(val & ~BIT(0), sirfsoc_timer_base + SIRFSOC_TIMER_INT_EN); -		break; -	case CLOCK_EVT_MODE_UNUSED: -	case CLOCK_EVT_MODE_RESUME: -		break; -	} -} - -static void sirfsoc_clocksource_suspend(struct clocksource *cs) -{ -	int i; - -	writel_relaxed(SIRFSOC_TIMER_LATCH_BIT, sirfsoc_timer_base + SIRFSOC_TIMER_LATCH); - -	for (i = 0; i < SIRFSOC_TIMER_REG_CNT; i++) -		sirfsoc_timer_reg_val[i] = readl_relaxed(sirfsoc_timer_base + sirfsoc_timer_reg_list[i]); -} - -static void sirfsoc_clocksource_resume(struct clocksource *cs) -{ -	int i; - -	for (i = 0; i < SIRFSOC_TIMER_REG_CNT - 2; i++) -		writel_relaxed(sirfsoc_timer_reg_val[i], sirfsoc_timer_base + sirfsoc_timer_reg_list[i]); - -	writel_relaxed(sirfsoc_timer_reg_val[SIRFSOC_TIMER_REG_CNT - 2], sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_LO); -	writel_relaxed(sirfsoc_timer_reg_val[SIRFSOC_TIMER_REG_CNT - 1], sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_HI); -} - -static struct clock_event_device sirfsoc_clockevent = { -	.name = "sirfsoc_clockevent", -	.rating = 200, -	.features = CLOCK_EVT_FEAT_ONESHOT, -	.set_mode = sirfsoc_timer_set_mode, -	.set_next_event = sirfsoc_timer_set_next_event, -}; - -static struct clocksource sirfsoc_clocksource = { -	.name = "sirfsoc_clocksource", -	.rating = 200, -	.mask = CLOCKSOURCE_MASK(64), -	.flags = CLOCK_SOURCE_IS_CONTINUOUS, -	.read = sirfsoc_timer_read, -	.suspend = sirfsoc_clocksource_suspend, -	.resume = sirfsoc_clocksource_resume, -}; - -static struct irqaction sirfsoc_timer_irq = { -	.name = "sirfsoc_timer0", -	.flags = IRQF_TIMER, -	.irq = 0, -	.handler = sirfsoc_timer_interrupt, -	.dev_id = &sirfsoc_clockevent, -}; - -/* Overwrite weak default sched_clock with more precise one */ -static u32 notrace sirfsoc_read_sched_clock(void) -{ -	return (u32)(sirfsoc_timer_read(NULL) & 0xffffffff); -} - -static void __init sirfsoc_clockevent_init(void) -{ -	sirfsoc_clockevent.cpumask = cpumask_of(0); -	clockevents_config_and_register(&sirfsoc_clockevent, CLOCK_TICK_RATE, -					2, -2); -} - -/* initialize the kernel jiffy timer source */ -void __init sirfsoc_prima2_timer_init(void) -{ -	unsigned long rate; -	struct clk *clk; - -	/* initialize clocking early, we want to set the OS timer */ -	sirfsoc_of_clk_init(); - -	/* timer's input clock is io clock */ -	clk = clk_get_sys("io", NULL); - -	BUG_ON(IS_ERR(clk)); - -	rate = clk_get_rate(clk); - -	BUG_ON(rate < CLOCK_TICK_RATE); -	BUG_ON(rate % CLOCK_TICK_RATE); - -	sirfsoc_of_timer_map(); - -	writel_relaxed(rate / CLOCK_TICK_RATE / 2 - 1, sirfsoc_timer_base + SIRFSOC_TIMER_DIV); -	writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_LO); -	writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_HI); -	writel_relaxed(BIT(0), sirfsoc_timer_base + SIRFSOC_TIMER_STATUS); - -	BUG_ON(clocksource_register_hz(&sirfsoc_clocksource, CLOCK_TICK_RATE)); - -	setup_sched_clock(sirfsoc_read_sched_clock, 32, CLOCK_TICK_RATE); - -	BUG_ON(setup_irq(sirfsoc_timer_irq.irq, &sirfsoc_timer_irq)); - -	sirfsoc_clockevent_init(); -} - -static struct of_device_id timer_ids[] = { -	{ .compatible = "sirf,prima2-tick" }, -	{}, -}; - -static void __init sirfsoc_of_timer_map(void) -{ -	struct device_node *np; -	const unsigned int *intspec; - -	np = of_find_matching_node(NULL, timer_ids); -	if (!np) -		return; -	sirfsoc_timer_base = of_iomap(np, 0); -	if (!sirfsoc_timer_base) -		panic("unable to map timer cpu registers\n"); - -	/* Get the interrupts property */ -	intspec = of_get_property(np, "interrupts", NULL); -	BUG_ON(!intspec); -	sirfsoc_timer_irq.irq = be32_to_cpup(intspec); - -	of_node_put(np); -} diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile index 12c50055838..648867a8caa 100644 --- a/arch/arm/mach-pxa/Makefile +++ b/arch/arm/mach-pxa/Makefile @@ -7,12 +7,6 @@ obj-y				+= clock.o devices.o generic.o irq.o \  				   time.o reset.o  obj-$(CONFIG_PM)		+= pm.o sleep.o standby.o -ifeq ($(CONFIG_CPU_FREQ),y) -obj-$(CONFIG_PXA25x)		+= cpufreq-pxa2xx.o -obj-$(CONFIG_PXA27x)		+= cpufreq-pxa2xx.o -obj-$(CONFIG_PXA3xx)		+= cpufreq-pxa3xx.o -endif -  # Generic drivers that other drivers may depend upon  # SoC-specific code diff --git a/arch/arm/mach-pxa/cpufreq-pxa2xx.c b/arch/arm/mach-pxa/cpufreq-pxa2xx.c deleted file mode 100644 index 6a7aeab42f6..00000000000 --- a/arch/arm/mach-pxa/cpufreq-pxa2xx.c +++ /dev/null @@ -1,494 +0,0 @@ -/* - *  linux/arch/arm/mach-pxa/cpufreq-pxa2xx.c - * - *  Copyright (C) 2002,2003 Intrinsyc Software - * - * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - * - * History: - *   31-Jul-2002 : Initial version [FB] - *   29-Jan-2003 : added PXA255 support [FB] - *   20-Apr-2003 : ported to v2.5 (Dustin McIntire, Sensoria Corp.) - * - * Note: - *   This driver may change the memory bus clock rate, but will not do any - *   platform specific access timing changes... for example if you have flash - *   memory connected to CS0, you will need to register a platform specific - *   notifier which will adjust the memory access strobes to maintain a - *   minimum strobe width. - * - */ - -#include <linux/kernel.h> -#include <linux/module.h> -#include <linux/sched.h> -#include <linux/init.h> -#include <linux/cpufreq.h> -#include <linux/err.h> -#include <linux/regulator/consumer.h> -#include <linux/io.h> - -#include <mach/pxa2xx-regs.h> -#include <mach/smemc.h> - -#ifdef DEBUG -static unsigned int freq_debug; -module_param(freq_debug, uint, 0); -MODULE_PARM_DESC(freq_debug, "Set the debug messages to on=1/off=0"); -#else -#define freq_debug  0 -#endif - -static struct regulator *vcc_core; - -static unsigned int pxa27x_maxfreq; -module_param(pxa27x_maxfreq, uint, 0); -MODULE_PARM_DESC(pxa27x_maxfreq, "Set the pxa27x maxfreq in MHz" -		 "(typically 624=>pxa270, 416=>pxa271, 520=>pxa272)"); - -typedef struct { -	unsigned int khz; -	unsigned int membus; -	unsigned int cccr; -	unsigned int div2; -	unsigned int cclkcfg; -	int vmin; -	int vmax; -} pxa_freqs_t; - -/* Define the refresh period in mSec for the SDRAM and the number of rows */ -#define SDRAM_TREF	64	/* standard 64ms SDRAM */ -static unsigned int sdram_rows; - -#define CCLKCFG_TURBO		0x1 -#define CCLKCFG_FCS		0x2 -#define CCLKCFG_HALFTURBO	0x4 -#define CCLKCFG_FASTBUS		0x8 -#define MDREFR_DB2_MASK		(MDREFR_K2DB2 | MDREFR_K1DB2) -#define MDREFR_DRI_MASK		0xFFF - -#define MDCNFG_DRAC2(mdcnfg) (((mdcnfg) >> 21) & 0x3) -#define MDCNFG_DRAC0(mdcnfg) (((mdcnfg) >> 5) & 0x3) - -/* - * PXA255 definitions - */ -/* Use the run mode frequencies for the CPUFREQ_POLICY_PERFORMANCE policy */ -#define CCLKCFG			CCLKCFG_TURBO | CCLKCFG_FCS - -static pxa_freqs_t pxa255_run_freqs[] = -{ -	/* CPU   MEMBUS  CCCR  DIV2 CCLKCFG	           run  turbo PXbus SDRAM */ -	{ 99500,  99500, 0x121, 1,  CCLKCFG, -1, -1},	/*  99,   99,   50,   50  */ -	{132700, 132700, 0x123, 1,  CCLKCFG, -1, -1},	/* 133,  133,   66,   66  */ -	{199100,  99500, 0x141, 0,  CCLKCFG, -1, -1},	/* 199,  199,   99,   99  */ -	{265400, 132700, 0x143, 1,  CCLKCFG, -1, -1},	/* 265,  265,  133,   66  */ -	{331800, 165900, 0x145, 1,  CCLKCFG, -1, -1},	/* 331,  331,  166,   83  */ -	{398100,  99500, 0x161, 0,  CCLKCFG, -1, -1},	/* 398,  398,  196,   99  */ -}; - -/* Use the turbo mode frequencies for the CPUFREQ_POLICY_POWERSAVE policy */ -static pxa_freqs_t pxa255_turbo_freqs[] = -{ -	/* CPU   MEMBUS  CCCR  DIV2 CCLKCFG	   run  turbo PXbus SDRAM */ -	{ 99500, 99500,  0x121, 1,  CCLKCFG, -1, -1},	/*  99,   99,   50,   50  */ -	{199100, 99500,  0x221, 0,  CCLKCFG, -1, -1},	/*  99,  199,   50,   99  */ -	{298500, 99500,  0x321, 0,  CCLKCFG, -1, -1},	/*  99,  287,   50,   99  */ -	{298600, 99500,  0x1c1, 0,  CCLKCFG, -1, -1},	/* 199,  287,   99,   99  */ -	{398100, 99500,  0x241, 0,  CCLKCFG, -1, -1},	/* 199,  398,   99,   99  */ -}; - -#define NUM_PXA25x_RUN_FREQS ARRAY_SIZE(pxa255_run_freqs) -#define NUM_PXA25x_TURBO_FREQS ARRAY_SIZE(pxa255_turbo_freqs) - -static struct cpufreq_frequency_table -	pxa255_run_freq_table[NUM_PXA25x_RUN_FREQS+1]; -static struct cpufreq_frequency_table -	pxa255_turbo_freq_table[NUM_PXA25x_TURBO_FREQS+1]; - -static unsigned int pxa255_turbo_table; -module_param(pxa255_turbo_table, uint, 0); -MODULE_PARM_DESC(pxa255_turbo_table, "Selects the frequency table (0 = run table, !0 = turbo table)"); - -/* - * PXA270 definitions - * - * For the PXA27x: - * Control variables are A, L, 2N for CCCR; B, HT, T for CLKCFG. - * - * A = 0 => memory controller clock from table 3-7, - * A = 1 => memory controller clock = system bus clock - * Run mode frequency	= 13 MHz * L - * Turbo mode frequency = 13 MHz * L * N - * System bus frequency = 13 MHz * L / (B + 1) - * - * In CCCR: - * A = 1 - * L = 16	  oscillator to run mode ratio - * 2N = 6	  2 * (turbo mode to run mode ratio) - * - * In CCLKCFG: - * B = 1	  Fast bus mode - * HT = 0	  Half-Turbo mode - * T = 1	  Turbo mode - * - * For now, just support some of the combinations in table 3-7 of - * PXA27x Processor Family Developer's Manual to simplify frequency - * change sequences. - */ -#define PXA27x_CCCR(A, L, N2) (A << 25 | N2 << 7 | L) -#define CCLKCFG2(B, HT, T) \ -  (CCLKCFG_FCS | \ -   ((B)  ? CCLKCFG_FASTBUS : 0) | \ -   ((HT) ? CCLKCFG_HALFTURBO : 0) | \ -   ((T)  ? CCLKCFG_TURBO : 0)) - -static pxa_freqs_t pxa27x_freqs[] = { -	{104000, 104000, PXA27x_CCCR(1,	 8, 2), 0, CCLKCFG2(1, 0, 1),  900000, 1705000 }, -	{156000, 104000, PXA27x_CCCR(1,	 8, 3), 0, CCLKCFG2(1, 0, 1), 1000000, 1705000 }, -	{208000, 208000, PXA27x_CCCR(0, 16, 2), 1, CCLKCFG2(0, 0, 1), 1180000, 1705000 }, -	{312000, 208000, PXA27x_CCCR(1, 16, 3), 1, CCLKCFG2(1, 0, 1), 1250000, 1705000 }, -	{416000, 208000, PXA27x_CCCR(1, 16, 4), 1, CCLKCFG2(1, 0, 1), 1350000, 1705000 }, -	{520000, 208000, PXA27x_CCCR(1, 16, 5), 1, CCLKCFG2(1, 0, 1), 1450000, 1705000 }, -	{624000, 208000, PXA27x_CCCR(1, 16, 6), 1, CCLKCFG2(1, 0, 1), 1550000, 1705000 } -}; - -#define NUM_PXA27x_FREQS ARRAY_SIZE(pxa27x_freqs) -static struct cpufreq_frequency_table -	pxa27x_freq_table[NUM_PXA27x_FREQS+1]; - -extern unsigned get_clk_frequency_khz(int info); - -#ifdef CONFIG_REGULATOR - -static int pxa_cpufreq_change_voltage(pxa_freqs_t *pxa_freq) -{ -	int ret = 0; -	int vmin, vmax; - -	if (!cpu_is_pxa27x()) -		return 0; - -	vmin = pxa_freq->vmin; -	vmax = pxa_freq->vmax; -	if ((vmin == -1) || (vmax == -1)) -		return 0; - -	ret = regulator_set_voltage(vcc_core, vmin, vmax); -	if (ret) -		pr_err("cpufreq: Failed to set vcc_core in [%dmV..%dmV]\n", -		       vmin, vmax); -	return ret; -} - -static __init void pxa_cpufreq_init_voltages(void) -{ -	vcc_core = regulator_get(NULL, "vcc_core"); -	if (IS_ERR(vcc_core)) { -		pr_info("cpufreq: Didn't find vcc_core regulator\n"); -		vcc_core = NULL; -	} else { -		pr_info("cpufreq: Found vcc_core regulator\n"); -	} -} -#else -static int pxa_cpufreq_change_voltage(pxa_freqs_t *pxa_freq) -{ -	return 0; -} - -static __init void pxa_cpufreq_init_voltages(void) { } -#endif - -static void find_freq_tables(struct cpufreq_frequency_table **freq_table, -			     pxa_freqs_t **pxa_freqs) -{ -	if (cpu_is_pxa25x()) { -		if (!pxa255_turbo_table) { -			*pxa_freqs = pxa255_run_freqs; -			*freq_table = pxa255_run_freq_table; -		} else { -			*pxa_freqs = pxa255_turbo_freqs; -			*freq_table = pxa255_turbo_freq_table; -		} -	} -	if (cpu_is_pxa27x()) { -		*pxa_freqs = pxa27x_freqs; -		*freq_table = pxa27x_freq_table; -	} -} - -static void pxa27x_guess_max_freq(void) -{ -	if (!pxa27x_maxfreq) { -		pxa27x_maxfreq = 416000; -		printk(KERN_INFO "PXA CPU 27x max frequency not defined " -		       "(pxa27x_maxfreq), assuming pxa271 with %dkHz maxfreq\n", -		       pxa27x_maxfreq); -	} else { -		pxa27x_maxfreq *= 1000; -	} -} - -static void init_sdram_rows(void) -{ -	uint32_t mdcnfg = __raw_readl(MDCNFG); -	unsigned int drac2 = 0, drac0 = 0; - -	if (mdcnfg & (MDCNFG_DE2 | MDCNFG_DE3)) -		drac2 = MDCNFG_DRAC2(mdcnfg); - -	if (mdcnfg & (MDCNFG_DE0 | MDCNFG_DE1)) -		drac0 = MDCNFG_DRAC0(mdcnfg); - -	sdram_rows = 1 << (11 + max(drac0, drac2)); -} - -static u32 mdrefr_dri(unsigned int freq) -{ -	u32 interval = freq * SDRAM_TREF / sdram_rows; - -	return (interval - (cpu_is_pxa27x() ? 31 : 0)) / 32; -} - -/* find a valid frequency point */ -static int pxa_verify_policy(struct cpufreq_policy *policy) -{ -	struct cpufreq_frequency_table *pxa_freqs_table; -	pxa_freqs_t *pxa_freqs; -	int ret; - -	find_freq_tables(&pxa_freqs_table, &pxa_freqs); -	ret = cpufreq_frequency_table_verify(policy, pxa_freqs_table); - -	if (freq_debug) -		pr_debug("Verified CPU policy: %dKhz min to %dKhz max\n", -			 policy->min, policy->max); - -	return ret; -} - -static unsigned int pxa_cpufreq_get(unsigned int cpu) -{ -	return get_clk_frequency_khz(0); -} - -static int pxa_set_target(struct cpufreq_policy *policy, -			  unsigned int target_freq, -			  unsigned int relation) -{ -	struct cpufreq_frequency_table *pxa_freqs_table; -	pxa_freqs_t *pxa_freq_settings; -	struct cpufreq_freqs freqs; -	unsigned int idx; -	unsigned long flags; -	unsigned int new_freq_cpu, new_freq_mem; -	unsigned int unused, preset_mdrefr, postset_mdrefr, cclkcfg; -	int ret = 0; - -	/* Get the current policy */ -	find_freq_tables(&pxa_freqs_table, &pxa_freq_settings); - -	/* Lookup the next frequency */ -	if (cpufreq_frequency_table_target(policy, pxa_freqs_table, -					   target_freq, relation, &idx)) { -		return -EINVAL; -	} - -	new_freq_cpu = pxa_freq_settings[idx].khz; -	new_freq_mem = pxa_freq_settings[idx].membus; -	freqs.old = policy->cur; -	freqs.new = new_freq_cpu; -	freqs.cpu = policy->cpu; - -	if (freq_debug) -		pr_debug("Changing CPU frequency to %d Mhz, (SDRAM %d Mhz)\n", -			 freqs.new / 1000, (pxa_freq_settings[idx].div2) ? -			 (new_freq_mem / 2000) : (new_freq_mem / 1000)); - -	if (vcc_core && freqs.new > freqs.old) -		ret = pxa_cpufreq_change_voltage(&pxa_freq_settings[idx]); -	if (ret) -		return ret; -	/* -	 * Tell everyone what we're about to do... -	 * you should add a notify client with any platform specific -	 * Vcc changing capability -	 */ -	cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); - -	/* Calculate the next MDREFR.  If we're slowing down the SDRAM clock -	 * we need to preset the smaller DRI before the change.	 If we're -	 * speeding up we need to set the larger DRI value after the change. -	 */ -	preset_mdrefr = postset_mdrefr = __raw_readl(MDREFR); -	if ((preset_mdrefr & MDREFR_DRI_MASK) > mdrefr_dri(new_freq_mem)) { -		preset_mdrefr = (preset_mdrefr & ~MDREFR_DRI_MASK); -		preset_mdrefr |= mdrefr_dri(new_freq_mem); -	} -	postset_mdrefr = -		(postset_mdrefr & ~MDREFR_DRI_MASK) | mdrefr_dri(new_freq_mem); - -	/* If we're dividing the memory clock by two for the SDRAM clock, this -	 * must be set prior to the change.  Clearing the divide must be done -	 * after the change. -	 */ -	if (pxa_freq_settings[idx].div2) { -		preset_mdrefr  |= MDREFR_DB2_MASK; -		postset_mdrefr |= MDREFR_DB2_MASK; -	} else { -		postset_mdrefr &= ~MDREFR_DB2_MASK; -	} - -	local_irq_save(flags); - -	/* Set new the CCCR and prepare CCLKCFG */ -	CCCR = pxa_freq_settings[idx].cccr; -	cclkcfg = pxa_freq_settings[idx].cclkcfg; - -	asm volatile("							\n\ -		ldr	r4, [%1]		/* load MDREFR */	\n\ -		b	2f						\n\ -		.align	5						\n\ -1:									\n\ -		str	%3, [%1]		/* preset the MDREFR */	\n\ -		mcr	p14, 0, %2, c6, c0, 0	/* set CCLKCFG[FCS] */	\n\ -		str	%4, [%1]		/* postset the MDREFR */ \n\ -									\n\ -		b	3f						\n\ -2:		b	1b						\n\ -3:		nop							\n\ -	  " -		     : "=&r" (unused) -		     : "r" (MDREFR), "r" (cclkcfg), -		       "r" (preset_mdrefr), "r" (postset_mdrefr) -		     : "r4", "r5"); -	local_irq_restore(flags); - -	/* -	 * Tell everyone what we've just done... -	 * you should add a notify client with any platform specific -	 * SDRAM refresh timer adjustments -	 */ -	cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); - -	/* -	 * Even if voltage setting fails, we don't report it, as the frequency -	 * change succeeded. The voltage reduction is not a critical failure, -	 * only power savings will suffer from this. -	 * -	 * Note: if the voltage change fails, and a return value is returned, a -	 * bug is triggered (seems a deadlock). Should anybody find out where, -	 * the "return 0" should become a "return ret". -	 */ -	if (vcc_core && freqs.new < freqs.old) -		ret = pxa_cpufreq_change_voltage(&pxa_freq_settings[idx]); - -	return 0; -} - -static int pxa_cpufreq_init(struct cpufreq_policy *policy) -{ -	int i; -	unsigned int freq; -	struct cpufreq_frequency_table *pxa255_freq_table; -	pxa_freqs_t *pxa255_freqs; - -	/* try to guess pxa27x cpu */ -	if (cpu_is_pxa27x()) -		pxa27x_guess_max_freq(); - -	pxa_cpufreq_init_voltages(); - -	init_sdram_rows(); - -	/* set default policy and cpuinfo */ -	policy->cpuinfo.transition_latency = 1000; /* FIXME: 1 ms, assumed */ -	policy->cur = get_clk_frequency_khz(0);	   /* current freq */ -	policy->min = policy->max = policy->cur; - -	/* Generate pxa25x the run cpufreq_frequency_table struct */ -	for (i = 0; i < NUM_PXA25x_RUN_FREQS; i++) { -		pxa255_run_freq_table[i].frequency = pxa255_run_freqs[i].khz; -		pxa255_run_freq_table[i].index = i; -	} -	pxa255_run_freq_table[i].frequency = CPUFREQ_TABLE_END; - -	/* Generate pxa25x the turbo cpufreq_frequency_table struct */ -	for (i = 0; i < NUM_PXA25x_TURBO_FREQS; i++) { -		pxa255_turbo_freq_table[i].frequency = -			pxa255_turbo_freqs[i].khz; -		pxa255_turbo_freq_table[i].index = i; -	} -	pxa255_turbo_freq_table[i].frequency = CPUFREQ_TABLE_END; - -	pxa255_turbo_table = !!pxa255_turbo_table; - -	/* Generate the pxa27x cpufreq_frequency_table struct */ -	for (i = 0; i < NUM_PXA27x_FREQS; i++) { -		freq = pxa27x_freqs[i].khz; -		if (freq > pxa27x_maxfreq) -			break; -		pxa27x_freq_table[i].frequency = freq; -		pxa27x_freq_table[i].index = i; -	} -	pxa27x_freq_table[i].index = i; -	pxa27x_freq_table[i].frequency = CPUFREQ_TABLE_END; - -	/* -	 * Set the policy's minimum and maximum frequencies from the tables -	 * just constructed.  This sets cpuinfo.mxx_freq, min and max. -	 */ -	if (cpu_is_pxa25x()) { -		find_freq_tables(&pxa255_freq_table, &pxa255_freqs); -		pr_info("PXA255 cpufreq using %s frequency table\n", -			pxa255_turbo_table ? "turbo" : "run"); -		cpufreq_frequency_table_cpuinfo(policy, pxa255_freq_table); -	} -	else if (cpu_is_pxa27x()) -		cpufreq_frequency_table_cpuinfo(policy, pxa27x_freq_table); - -	printk(KERN_INFO "PXA CPU frequency change support initialized\n"); - -	return 0; -} - -static struct cpufreq_driver pxa_cpufreq_driver = { -	.verify	= pxa_verify_policy, -	.target	= pxa_set_target, -	.init	= pxa_cpufreq_init, -	.get	= pxa_cpufreq_get, -	.name	= "PXA2xx", -}; - -static int __init pxa_cpu_init(void) -{ -	int ret = -ENODEV; -	if (cpu_is_pxa25x() || cpu_is_pxa27x()) -		ret = cpufreq_register_driver(&pxa_cpufreq_driver); -	return ret; -} - -static void __exit pxa_cpu_exit(void) -{ -	cpufreq_unregister_driver(&pxa_cpufreq_driver); -} - - -MODULE_AUTHOR("Intrinsyc Software Inc."); -MODULE_DESCRIPTION("CPU frequency changing driver for the PXA architecture"); -MODULE_LICENSE("GPL"); -module_init(pxa_cpu_init); -module_exit(pxa_cpu_exit); diff --git a/arch/arm/mach-pxa/cpufreq-pxa3xx.c b/arch/arm/mach-pxa/cpufreq-pxa3xx.c deleted file mode 100644 index b85b4ab7aac..00000000000 --- a/arch/arm/mach-pxa/cpufreq-pxa3xx.c +++ /dev/null @@ -1,258 +0,0 @@ -/* - * linux/arch/arm/mach-pxa/cpufreq-pxa3xx.c - * - * Copyright (C) 2008 Marvell International Ltd. - * - * 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. - */ - -#include <linux/kernel.h> -#include <linux/module.h> -#include <linux/sched.h> -#include <linux/init.h> -#include <linux/cpufreq.h> -#include <linux/slab.h> -#include <linux/io.h> - -#include <mach/pxa3xx-regs.h> - -#include "generic.h" - -#define HSS_104M	(0) -#define HSS_156M	(1) -#define HSS_208M	(2) -#define HSS_312M	(3) - -#define SMCFS_78M	(0) -#define SMCFS_104M	(2) -#define SMCFS_208M	(5) - -#define SFLFS_104M	(0) -#define SFLFS_156M	(1) -#define SFLFS_208M	(2) -#define SFLFS_312M	(3) - -#define XSPCLK_156M	(0) -#define XSPCLK_NONE	(3) - -#define DMCFS_26M	(0) -#define DMCFS_260M	(3) - -struct pxa3xx_freq_info { -	unsigned int cpufreq_mhz; -	unsigned int core_xl : 5; -	unsigned int core_xn : 3; -	unsigned int hss : 2; -	unsigned int dmcfs : 2; -	unsigned int smcfs : 3; -	unsigned int sflfs : 2; -	unsigned int df_clkdiv : 3; - -	int	vcc_core;	/* in mV */ -	int	vcc_sram;	/* in mV */ -}; - -#define OP(cpufreq, _xl, _xn, _hss, _dmc, _smc, _sfl, _dfi, vcore, vsram) \ -{									\ -	.cpufreq_mhz	= cpufreq,					\ -	.core_xl	= _xl,						\ -	.core_xn	= _xn,						\ -	.hss		= HSS_##_hss##M,				\ -	.dmcfs		= DMCFS_##_dmc##M,				\ -	.smcfs		= SMCFS_##_smc##M,				\ -	.sflfs		= SFLFS_##_sfl##M,				\ -	.df_clkdiv	= _dfi,						\ -	.vcc_core	= vcore,					\ -	.vcc_sram	= vsram,					\ -} - -static struct pxa3xx_freq_info pxa300_freqs[] = { -	/*  CPU XL XN  HSS DMEM SMEM SRAM DFI VCC_CORE VCC_SRAM */ -	OP(104,  8, 1, 104, 260,  78, 104, 3, 1000, 1100), /* 104MHz */ -	OP(208, 16, 1, 104, 260, 104, 156, 2, 1000, 1100), /* 208MHz */ -	OP(416, 16, 2, 156, 260, 104, 208, 2, 1100, 1200), /* 416MHz */ -	OP(624, 24, 2, 208, 260, 208, 312, 3, 1375, 1400), /* 624MHz */ -}; - -static struct pxa3xx_freq_info pxa320_freqs[] = { -	/*  CPU XL XN  HSS DMEM SMEM SRAM DFI VCC_CORE VCC_SRAM */ -	OP(104,  8, 1, 104, 260,  78, 104, 3, 1000, 1100), /* 104MHz */ -	OP(208, 16, 1, 104, 260, 104, 156, 2, 1000, 1100), /* 208MHz */ -	OP(416, 16, 2, 156, 260, 104, 208, 2, 1100, 1200), /* 416MHz */ -	OP(624, 24, 2, 208, 260, 208, 312, 3, 1375, 1400), /* 624MHz */ -	OP(806, 31, 2, 208, 260, 208, 312, 3, 1400, 1400), /* 806MHz */ -}; - -static unsigned int pxa3xx_freqs_num; -static struct pxa3xx_freq_info *pxa3xx_freqs; -static struct cpufreq_frequency_table *pxa3xx_freqs_table; - -static int setup_freqs_table(struct cpufreq_policy *policy, -			     struct pxa3xx_freq_info *freqs, int num) -{ -	struct cpufreq_frequency_table *table; -	int i; - -	table = kzalloc((num + 1) * sizeof(*table), GFP_KERNEL); -	if (table == NULL) -		return -ENOMEM; - -	for (i = 0; i < num; i++) { -		table[i].index = i; -		table[i].frequency = freqs[i].cpufreq_mhz * 1000; -	} -	table[num].index = i; -	table[num].frequency = CPUFREQ_TABLE_END; - -	pxa3xx_freqs = freqs; -	pxa3xx_freqs_num = num; -	pxa3xx_freqs_table = table; - -	return cpufreq_frequency_table_cpuinfo(policy, table); -} - -static void __update_core_freq(struct pxa3xx_freq_info *info) -{ -	uint32_t mask = ACCR_XN_MASK | ACCR_XL_MASK; -	uint32_t accr = ACCR; -	uint32_t xclkcfg; - -	accr &= ~(ACCR_XN_MASK | ACCR_XL_MASK | ACCR_XSPCLK_MASK); -	accr |= ACCR_XN(info->core_xn) | ACCR_XL(info->core_xl); - -	/* No clock until core PLL is re-locked */ -	accr |= ACCR_XSPCLK(XSPCLK_NONE); - -	xclkcfg = (info->core_xn == 2) ? 0x3 : 0x2;	/* turbo bit */ - -	ACCR = accr; -	__asm__("mcr p14, 0, %0, c6, c0, 0\n" : : "r"(xclkcfg)); - -	while ((ACSR & mask) != (accr & mask)) -		cpu_relax(); -} - -static void __update_bus_freq(struct pxa3xx_freq_info *info) -{ -	uint32_t mask; -	uint32_t accr = ACCR; - -	mask = ACCR_SMCFS_MASK | ACCR_SFLFS_MASK | ACCR_HSS_MASK | -		ACCR_DMCFS_MASK; - -	accr &= ~mask; -	accr |= ACCR_SMCFS(info->smcfs) | ACCR_SFLFS(info->sflfs) | -		ACCR_HSS(info->hss) | ACCR_DMCFS(info->dmcfs); - -	ACCR = accr; - -	while ((ACSR & mask) != (accr & mask)) -		cpu_relax(); -} - -static int pxa3xx_cpufreq_verify(struct cpufreq_policy *policy) -{ -	return cpufreq_frequency_table_verify(policy, pxa3xx_freqs_table); -} - -static unsigned int pxa3xx_cpufreq_get(unsigned int cpu) -{ -	return pxa3xx_get_clk_frequency_khz(0); -} - -static int pxa3xx_cpufreq_set(struct cpufreq_policy *policy, -			      unsigned int target_freq, -			      unsigned int relation) -{ -	struct pxa3xx_freq_info *next; -	struct cpufreq_freqs freqs; -	unsigned long flags; -	int idx; - -	if (policy->cpu != 0) -		return -EINVAL; - -	/* Lookup the next frequency */ -	if (cpufreq_frequency_table_target(policy, pxa3xx_freqs_table, -				target_freq, relation, &idx)) -		return -EINVAL; - -	next = &pxa3xx_freqs[idx]; - -	freqs.old = policy->cur; -	freqs.new = next->cpufreq_mhz * 1000; -	freqs.cpu = policy->cpu; - -	pr_debug("CPU frequency from %d MHz to %d MHz%s\n", -			freqs.old / 1000, freqs.new / 1000, -			(freqs.old == freqs.new) ? " (skipped)" : ""); - -	if (freqs.old == target_freq) -		return 0; - -	cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); - -	local_irq_save(flags); -	__update_core_freq(next); -	__update_bus_freq(next); -	local_irq_restore(flags); - -	cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); - -	return 0; -} - -static int pxa3xx_cpufreq_init(struct cpufreq_policy *policy) -{ -	int ret = -EINVAL; - -	/* set default policy and cpuinfo */ -	policy->cpuinfo.min_freq = 104000; -	policy->cpuinfo.max_freq = (cpu_is_pxa320()) ? 806000 : 624000; -	policy->cpuinfo.transition_latency = 1000; /* FIXME: 1 ms, assumed */ -	policy->max = pxa3xx_get_clk_frequency_khz(0); -	policy->cur = policy->min = policy->max; - -	if (cpu_is_pxa300() || cpu_is_pxa310()) -		ret = setup_freqs_table(policy, ARRAY_AND_SIZE(pxa300_freqs)); - -	if (cpu_is_pxa320()) -		ret = setup_freqs_table(policy, ARRAY_AND_SIZE(pxa320_freqs)); - -	if (ret) { -		pr_err("failed to setup frequency table\n"); -		return ret; -	} - -	pr_info("CPUFREQ support for PXA3xx initialized\n"); -	return 0; -} - -static struct cpufreq_driver pxa3xx_cpufreq_driver = { -	.verify		= pxa3xx_cpufreq_verify, -	.target		= pxa3xx_cpufreq_set, -	.init		= pxa3xx_cpufreq_init, -	.get		= pxa3xx_cpufreq_get, -	.name		= "pxa3xx-cpufreq", -}; - -static int __init cpufreq_init(void) -{ -	if (cpu_is_pxa3xx()) -		return cpufreq_register_driver(&pxa3xx_cpufreq_driver); - -	return 0; -} -module_init(cpufreq_init); - -static void __exit cpufreq_exit(void) -{ -	cpufreq_unregister_driver(&pxa3xx_cpufreq_driver); -} -module_exit(cpufreq_exit); - -MODULE_DESCRIPTION("CPU frequency scaling driver for PXA3xx"); -MODULE_LICENSE("GPL"); diff --git a/arch/arm/mach-pxa/include/mach/generic.h b/arch/arm/mach-pxa/include/mach/generic.h new file mode 100644 index 00000000000..665542e0c9e --- /dev/null +++ b/arch/arm/mach-pxa/include/mach/generic.h @@ -0,0 +1 @@ +#include "../../generic.h" diff --git a/arch/arm/mach-realview/Kconfig b/arch/arm/mach-realview/Kconfig index 14c1d47e1ab..d210c0f9c2c 100644 --- a/arch/arm/mach-realview/Kconfig +++ b/arch/arm/mach-realview/Kconfig @@ -12,6 +12,8 @@ config REALVIEW_EB_A9MP  	bool "Support Multicore Cortex-A9 Tile"  	depends on MACH_REALVIEW_EB  	select CPU_V7 +	select HAVE_ARM_SCU if SMP +	select HAVE_ARM_TWD if LOCAL_TIMERS  	select HAVE_SMP  	select MIGHT_HAVE_CACHE_L2X0  	help @@ -23,6 +25,8 @@ config REALVIEW_EB_ARM11MP  	depends on MACH_REALVIEW_EB  	select ARCH_HAS_BARRIERS if SMP  	select CPU_V6K +	select HAVE_ARM_SCU if SMP +	select HAVE_ARM_TWD if LOCAL_TIMERS  	select HAVE_SMP  	select MIGHT_HAVE_CACHE_L2X0  	help @@ -43,6 +47,8 @@ config MACH_REALVIEW_PB11MP  	select ARCH_HAS_BARRIERS if SMP  	select ARM_GIC  	select CPU_V6K +	select HAVE_ARM_SCU if SMP +	select HAVE_ARM_TWD if LOCAL_TIMERS  	select HAVE_PATA_PLATFORM  	select HAVE_SMP  	select MIGHT_HAVE_CACHE_L2X0 @@ -85,6 +91,8 @@ config MACH_REALVIEW_PBX  	bool "Support RealView(R) Platform Baseboard Explore"  	select ARCH_SPARSEMEM_ENABLE if CPU_V7 && !REALVIEW_HIGH_PHYS_OFFSET  	select ARM_GIC +	select HAVE_ARM_SCU if SMP +	select HAVE_ARM_TWD if LOCAL_TIMERS  	select HAVE_PATA_PLATFORM  	select HAVE_SMP  	select MIGHT_HAVE_CACHE_L2X0 diff --git a/arch/arm/mach-realview/hotplug.c b/arch/arm/mach-realview/hotplug.c index 53818e5cd3a..ac22dd41b13 100644 --- a/arch/arm/mach-realview/hotplug.c +++ b/arch/arm/mach-realview/hotplug.c @@ -12,7 +12,6 @@  #include <linux/errno.h>  #include <linux/smp.h> -#include <asm/cacheflush.h>  #include <asm/cp15.h>  #include <asm/smp_plat.h> @@ -20,7 +19,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" diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig index 0a8663c5f2b..f2f7088bfd2 100644 --- a/arch/arm/mach-s3c24xx/Kconfig +++ b/arch/arm/mach-s3c24xx/Kconfig @@ -37,7 +37,6 @@ config CPU_S3C2410  config CPU_S3C2412  	bool "SAMSUNG S3C2412" -	depends on ARCH_S3C24XX  	select CPU_ARM926T  	select CPU_LLSERIAL_S3C2440  	select S3C2412_DMA if S3C24XX_DMA @@ -48,7 +47,6 @@ config CPU_S3C2412  config CPU_S3C2416  	bool "SAMSUNG S3C2416/S3C2450" -	depends on ARCH_S3C24XX  	select CPU_ARM926T  	select CPU_LLSERIAL_S3C2440  	select S3C2416_PM if PM @@ -86,7 +84,6 @@ config CPU_S3C244X  config CPU_S3C2443  	bool "SAMSUNG S3C2443" -	depends on ARCH_S3C24XX  	select CPU_ARM920T  	select CPU_LLSERIAL_S3C2440  	select S3C2443_COMMON @@ -139,7 +136,6 @@ config S3C24XX_SETUP_TS  config S3C24XX_DMA  	bool "S3C2410 DMA support" -	depends on ARCH_S3C24XX  	select S3C_DMA  	help  	  S3C2410 DMA support. This is needed for drivers like sound which @@ -148,7 +144,7 @@ config S3C24XX_DMA  config S3C2410_DMA_DEBUG  	bool "S3C2410 DMA support debug" -	depends on ARCH_S3C24XX && S3C2410_DMA +	depends on S3C2410_DMA  	help  	  Enable debugging output for the DMA code. This option sends info  	  to the kernel log, at priority KERN_DEBUG. @@ -239,7 +235,7 @@ if CPU_S3C2410  config S3C2410_CPUFREQ  	bool -	depends on CPU_FREQ_S3C24XX && CPU_S3C2410 +	depends on CPU_FREQ_S3C24XX  	select S3C2410_CPUFREQ_UTILS  	help  	  CPU Frequency scaling support for S3C2410 @@ -326,7 +322,6 @@ config PM_H1940  config MACH_N30  	bool "Acer N30 family" -	select MACH_N35  	select S3C_DEV_NAND  	select S3C_DEV_USB_HOST  	help @@ -386,14 +381,13 @@ if CPU_S3C2412  config CPU_S3C2412_ONLY  	bool -	depends on ARCH_S3C24XX && !CPU_S3C2410 && \ -		   !CPU_S3C2416 && !CPU_S3C2440 && !CPU_S3C2442 && \ -		   !CPU_S3C2443 && CPU_S3C2412 +	depends on !CPU_S3C2410 && !CPU_S3C2416 && !CPU_S3C2440 && \ +		   !CPU_S3C2442 && !CPU_S3C2443  	default y  config S3C2412_CPUFREQ  	bool -	depends on CPU_FREQ_S3C24XX && CPU_S3C2412 +	depends on CPU_FREQ_S3C24XX  	default y  	select S3C2412_IOTIMING  	help @@ -649,7 +643,6 @@ comment "S3C2442 Boards"  config MACH_NEO1973_GTA02  	bool "Openmoko GTA02 / Freerunner phone"  	select I2C -	select MACH_NEO1973  	select MFD_PCF50633  	select PCF50633_GPIO  	select POWER_SUPPLY @@ -670,10 +663,7 @@ config MACH_RX1950  	help  	   Say Y here if you're using HP iPAQ rx1950 -config SMDK2440_CPU2442 -	bool "SMDM2440 with S3C2442 CPU module" - -endif	# CPU_S3C2440 +endif	# CPU_S3C2442  if CPU_S3C2443 || CPU_S3C2416 diff --git a/arch/arm/mach-s3c24xx/clock-s3c2440.c b/arch/arm/mach-s3c24xx/clock-s3c2440.c index 04b87ec9253..1069b568082 100644 --- a/arch/arm/mach-s3c24xx/clock-s3c2440.c +++ b/arch/arm/mach-s3c24xx/clock-s3c2440.c @@ -123,6 +123,11 @@ static struct clk s3c2440_clk_ac97 = {  	.ctrlbit	= S3C2440_CLKCON_AC97,  }; +#define S3C24XX_VA_UART0      (S3C_VA_UART) +#define S3C24XX_VA_UART1      (S3C_VA_UART + 0x4000 ) +#define S3C24XX_VA_UART2      (S3C_VA_UART + 0x8000 ) +#define S3C24XX_VA_UART3      (S3C_VA_UART + 0xC000 ) +  static unsigned long  s3c2440_fclk_n_getrate(struct clk *clk)  {  	unsigned long ucon0, ucon1, ucon2, divisor; diff --git a/arch/arm/mach-s3c24xx/common.c b/arch/arm/mach-s3c24xx/common.c index d97533d21ac..c157103ed8e 100644 --- a/arch/arm/mach-s3c24xx/common.c +++ b/arch/arm/mach-s3c24xx/common.c @@ -236,6 +236,11 @@ void __init s3c24xx_init_io(struct map_desc *mach_desc, int size)  /* Serial port registrations */ +#define S3C2410_PA_UART0      (S3C24XX_PA_UART) +#define S3C2410_PA_UART1      (S3C24XX_PA_UART + 0x4000 ) +#define S3C2410_PA_UART2      (S3C24XX_PA_UART + 0x8000 ) +#define S3C2443_PA_UART3      (S3C24XX_PA_UART + 0xC000 ) +  static struct resource s3c2410_uart0_resource[] = {  	[0] = DEFINE_RES_MEM(S3C2410_PA_UART0, SZ_16K),  	[1] = DEFINE_RES_NAMED(IRQ_S3CUART_RX0, \ diff --git a/arch/arm/mach-s3c24xx/cpufreq.c b/arch/arm/mach-s3c24xx/cpufreq.c index 5f181e733ee..3c0e78ede0d 100644 --- a/arch/arm/mach-s3c24xx/cpufreq.c +++ b/arch/arm/mach-s3c24xx/cpufreq.c @@ -204,7 +204,6 @@ static int s3c_cpufreq_settarget(struct cpufreq_policy *policy,  	freqs.old = cpu_cur.freq;  	freqs.new = cpu_new.freq; -	freqs.freqs.cpu = 0;  	freqs.freqs.old = cpu_cur.freq.armclk / 1000;  	freqs.freqs.new = cpu_new.freq.armclk / 1000; @@ -218,9 +217,7 @@ static int s3c_cpufreq_settarget(struct cpufreq_policy *policy,  	s3c_cpufreq_updateclk(clk_pclk, cpu_new.freq.pclk);  	/* start the frequency change */ - -	if (policy) -		cpufreq_notify_transition(&freqs.freqs, CPUFREQ_PRECHANGE); +	cpufreq_notify_transition(policy, &freqs.freqs, CPUFREQ_PRECHANGE);  	/* If hclk is staying the same, then we do not need to  	 * re-write the IO or the refresh timings whilst we are changing @@ -264,8 +261,7 @@ static int s3c_cpufreq_settarget(struct cpufreq_policy *policy,  	local_irq_restore(flags);  	/* notify everyone we've done this */ -	if (policy) -		cpufreq_notify_transition(&freqs.freqs, CPUFREQ_POSTCHANGE); +	cpufreq_notify_transition(policy, &freqs.freqs, CPUFREQ_POSTCHANGE);  	s3c_freq_dbg("%s: finished\n", __func__);  	return 0; diff --git a/arch/arm/mach-s3c24xx/dma-s3c2410.c b/arch/arm/mach-s3c24xx/dma-s3c2410.c index a6c94b82095..30aa53ff07a 100644 --- a/arch/arm/mach-s3c24xx/dma-s3c2410.c +++ b/arch/arm/mach-s3c24xx/dma-s3c2410.c @@ -25,10 +25,8 @@  #include <plat/regs-serial.h>  #include <mach/regs-gpio.h> -#include <plat/regs-ac97.h>  #include <plat/regs-dma.h>  #include <mach/regs-lcd.h> -#include <plat/regs-iis.h>  #include <plat/regs-spi.h>  static struct s3c24xx_dma_map __initdata s3c2410_dma_mappings[] = { diff --git a/arch/arm/mach-s3c24xx/dma-s3c2412.c b/arch/arm/mach-s3c24xx/dma-s3c2412.c index c0e8c3f5057..ab1700ec8e6 100644 --- a/arch/arm/mach-s3c24xx/dma-s3c2412.c +++ b/arch/arm/mach-s3c24xx/dma-s3c2412.c @@ -25,10 +25,8 @@  #include <plat/regs-serial.h>  #include <mach/regs-gpio.h> -#include <plat/regs-ac97.h>  #include <plat/regs-dma.h>  #include <mach/regs-lcd.h> -#include <plat/regs-iis.h>  #include <plat/regs-spi.h>  #define MAP(x) { (x)| DMA_CH_VALID, (x)| DMA_CH_VALID, (x)| DMA_CH_VALID, (x)| DMA_CH_VALID } diff --git a/arch/arm/mach-s3c24xx/dma-s3c2440.c b/arch/arm/mach-s3c24xx/dma-s3c2440.c index 1c08eccd942..cd25de28804 100644 --- a/arch/arm/mach-s3c24xx/dma-s3c2440.c +++ b/arch/arm/mach-s3c24xx/dma-s3c2440.c @@ -25,10 +25,8 @@  #include <plat/regs-serial.h>  #include <mach/regs-gpio.h> -#include <plat/regs-ac97.h>  #include <plat/regs-dma.h>  #include <mach/regs-lcd.h> -#include <plat/regs-iis.h>  #include <plat/regs-spi.h>  static struct s3c24xx_dma_map __initdata s3c2440_dma_mappings[] = { diff --git a/arch/arm/mach-s3c24xx/dma-s3c2443.c b/arch/arm/mach-s3c24xx/dma-s3c2443.c index 000e4c69fce..5fe3539dc2b 100644 --- a/arch/arm/mach-s3c24xx/dma-s3c2443.c +++ b/arch/arm/mach-s3c24xx/dma-s3c2443.c @@ -25,10 +25,8 @@  #include <plat/regs-serial.h>  #include <mach/regs-gpio.h> -#include <plat/regs-ac97.h>  #include <plat/regs-dma.h>  #include <mach/regs-lcd.h> -#include <plat/regs-iis.h>  #include <plat/regs-spi.h>  #define MAP(x) { \ diff --git a/arch/arm/mach-s3c24xx/include/mach/dma.h b/arch/arm/mach-s3c24xx/include/mach/dma.h index 6b72d5a4b37..b55da1d8cd8 100644 --- a/arch/arm/mach-s3c24xx/include/mach/dma.h +++ b/arch/arm/mach-s3c24xx/include/mach/dma.h @@ -24,7 +24,6 @@  */  enum dma_ch { -	DMACH_DT_PROP = -1,	/* not yet supported, do not use */  	DMACH_XD0 = 0,  	DMACH_XD1,  	DMACH_SDI, diff --git a/arch/arm/mach-s3c24xx/include/mach/irqs.h b/arch/arm/mach-s3c24xx/include/mach/irqs.h index 43cada8019b..b6dd4cb5a2e 100644 --- a/arch/arm/mach-s3c24xx/include/mach/irqs.h +++ b/arch/arm/mach-s3c24xx/include/mach/irqs.h @@ -192,10 +192,8 @@  #if defined(CONFIG_CPU_S3C2416)  #define NR_IRQS (IRQ_S3C2416_I2S1 + 1) -#elif defined(CONFIG_CPU_S3C2443) -#define NR_IRQS (IRQ_S3C2443_AC97+1)  #else -#define NR_IRQS (IRQ_S3C2440_AC97+1) +#define NR_IRQS (IRQ_S3C2443_AC97 + 1)  #endif  /* compatibility define. */ diff --git a/arch/arm/mach-s3c24xx/mach-rx1950.c b/arch/arm/mach-s3c24xx/mach-rx1950.c index e4d67a33ebe..44ca018e1f9 100644 --- a/arch/arm/mach-s3c24xx/mach-rx1950.c +++ b/arch/arm/mach-s3c24xx/mach-rx1950.c @@ -56,7 +56,6 @@  #include <plat/cpu.h>  #include <plat/devs.h>  #include <plat/pm.h> -#include <plat/regs-iic.h>  #include <plat/regs-serial.h>  #include <plat/samsung-time.h> diff --git a/arch/arm/mach-s3c24xx/regs-dsc.h b/arch/arm/mach-s3c24xx/regs-dsc.h index 98fd4a05587..61b3d1387d7 100644 --- a/arch/arm/mach-s3c24xx/regs-dsc.h +++ b/arch/arm/mach-s3c24xx/regs-dsc.h @@ -1,5 +1,4 @@ -/* arch/arm/mach-s3c2410/include/mach/regs-dsc.h - * +/*   * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk>   *		      http://www.simtec.co.uk/products/SWLINUX/   * @@ -12,209 +11,15 @@  #ifndef __ASM_ARCH_REGS_DSC_H -#define __ASM_ARCH_REGS_DSC_H "2440-dsc" +#define __ASM_ARCH_REGS_DSC_H __FILE__ -#if defined(CONFIG_CPU_S3C2412) +/* S3C2412 */  #define S3C2412_DSC0	   S3C2410_GPIOREG(0xdc)  #define S3C2412_DSC1	   S3C2410_GPIOREG(0xe0) -#endif - -#if defined(CONFIG_CPU_S3C2416) -#define S3C2416_DSC0	   S3C2410_GPIOREG(0xc0) -#define S3C2416_DSC1	   S3C2410_GPIOREG(0xc4) -#define S3C2416_DSC2	   S3C2410_GPIOREG(0xc8) -#define S3C2416_DSC3	   S3C2410_GPIOREG(0x110) - -#define S3C2416_SELECT_DSC0	(0 << 30) -#define S3C2416_SELECT_DSC1	(1 << 30) -#define S3C2416_SELECT_DSC2	(2 << 30) -#define S3C2416_SELECT_DSC3	(3 << 30) - -#define S3C2416_DSC_GETSHIFT(x)	(x & 30) - -#define S3C2416_DSC0_CF		(S3C2416_SELECT_DSC0 | 28) -#define	S3C2416_DSC0_CF_5mA	(0 << 28) -#define	S3C2416_DSC0_CF_10mA	(1 << 28) -#define	S3C2416_DSC0_CF_15mA	(2 << 28) -#define	S3C2416_DSC0_CF_21mA	(3 << 28) -#define	S3C2416_DSC0_CF_MASK	(3 << 28) - -#define S3C2416_DSC0_nRBE	(S3C2416_SELECT_DSC0 | 26) -#define	S3C2416_DSC0_nRBE_5mA	(0 << 26) -#define	S3C2416_DSC0_nRBE_10mA	(1 << 26) -#define	S3C2416_DSC0_nRBE_15mA	(2 << 26) -#define	S3C2416_DSC0_nRBE_21mA	(3 << 26) -#define	S3C2416_DSC0_nRBE_MASK	(3 << 26) - -#define S3C2416_DSC0_nROE	(S3C2416_SELECT_DSC0 | 24) -#define	S3C2416_DSC0_nROE_5mA	(0 << 24) -#define	S3C2416_DSC0_nROE_10mA	(1 << 24) -#define	S3C2416_DSC0_nROE_15mA	(2 << 24) -#define	S3C2416_DSC0_nROE_21mA	(3 << 24) -#define	S3C2416_DSC0_nROE_MASK	(3 << 24) - -#endif - -#if defined(CONFIG_CPU_S3C244X) +/* S3C2440 */  #define S3C2440_DSC0	   S3C2410_GPIOREG(0xc4)  #define S3C2440_DSC1	   S3C2410_GPIOREG(0xc8) -#define S3C2440_SELECT_DSC0 (0) -#define S3C2440_SELECT_DSC1 (1<<31) - -#define S3C2440_DSC_GETSHIFT(x) ((x) & 31) - -#define S3C2440_DSC0_DISABLE	(1<<31) - -#define S3C2440_DSC0_ADDR       (S3C2440_SELECT_DSC0 | 8) -#define S3C2440_DSC0_ADDR_12mA  (0<<8) -#define S3C2440_DSC0_ADDR_10mA  (1<<8) -#define S3C2440_DSC0_ADDR_8mA   (2<<8) -#define S3C2440_DSC0_ADDR_6mA   (3<<8) -#define S3C2440_DSC0_ADDR_MASK  (3<<8) - -/* D24..D31 */ -#define S3C2440_DSC0_DATA3      (S3C2440_SELECT_DSC0 | 6) -#define S3C2440_DSC0_DATA3_12mA (0<<6) -#define S3C2440_DSC0_DATA3_10mA (1<<6) -#define S3C2440_DSC0_DATA3_8mA  (2<<6) -#define S3C2440_DSC0_DATA3_6mA  (3<<6) -#define S3C2440_DSC0_DATA3_MASK (3<<6) - -/* D16..D23 */ -#define S3C2440_DSC0_DATA2      (S3C2440_SELECT_DSC0 | 4) -#define S3C2440_DSC0_DATA2_12mA (0<<4) -#define S3C2440_DSC0_DATA2_10mA (1<<4) -#define S3C2440_DSC0_DATA2_8mA  (2<<4) -#define S3C2440_DSC0_DATA2_6mA  (3<<4) -#define S3C2440_DSC0_DATA2_MASK (3<<4) - -/* D8..D15 */ -#define S3C2440_DSC0_DATA1      (S3C2440_SELECT_DSC0 | 2) -#define S3C2440_DSC0_DATA1_12mA (0<<2) -#define S3C2440_DSC0_DATA1_10mA (1<<2) -#define S3C2440_DSC0_DATA1_8mA  (2<<2) -#define S3C2440_DSC0_DATA1_6mA  (3<<2) -#define S3C2440_DSC0_DATA1_MASK (3<<2) - -/* D0..D7 */ -#define S3C2440_DSC0_DATA0      (S3C2440_SELECT_DSC0 | 0) -#define S3C2440_DSC0_DATA0_12mA (0<<0) -#define S3C2440_DSC0_DATA0_10mA (1<<0) -#define S3C2440_DSC0_DATA0_8mA  (2<<0) -#define S3C2440_DSC0_DATA0_6mA  (3<<0) -#define S3C2440_DSC0_DATA0_MASK (3<<0) - -#define S3C2440_DSC1_SCK1       (S3C2440_SELECT_DSC1 | 28) -#define S3C2440_DSC1_SCK1_12mA  (0<<28) -#define S3C2440_DSC1_SCK1_10mA  (1<<28) -#define S3C2440_DSC1_SCK1_8mA   (2<<28) -#define S3C2440_DSC1_SCK1_6mA   (3<<28) -#define S3C2440_DSC1_SCK1_MASK  (3<<28) - -#define S3C2440_DSC1_SCK0       (S3C2440_SELECT_DSC1 | 26) -#define S3C2440_DSC1_SCK0_12mA  (0<<26) -#define S3C2440_DSC1_SCK0_10mA  (1<<26) -#define S3C2440_DSC1_SCK0_8mA   (2<<26) -#define S3C2440_DSC1_SCK0_6mA   (3<<26) -#define S3C2440_DSC1_SCK0_MASK  (3<<26) - -#define S3C2440_DSC1_SCKE       (S3C2440_SELECT_DSC1 | 24) -#define S3C2440_DSC1_SCKE_10mA  (0<<24) -#define S3C2440_DSC1_SCKE_8mA   (1<<24) -#define S3C2440_DSC1_SCKE_6mA   (2<<24) -#define S3C2440_DSC1_SCKE_4mA   (3<<24) -#define S3C2440_DSC1_SCKE_MASK  (3<<24) - -/* SDRAM nRAS/nCAS */ -#define S3C2440_DSC1_SDR        (S3C2440_SELECT_DSC1 | 22) -#define S3C2440_DSC1_SDR_10mA   (0<<22) -#define S3C2440_DSC1_SDR_8mA    (1<<22) -#define S3C2440_DSC1_SDR_6mA    (2<<22) -#define S3C2440_DSC1_SDR_4mA    (3<<22) -#define S3C2440_DSC1_SDR_MASK   (3<<22) - -/* NAND Flash Controller */ -#define S3C2440_DSC1_NFC        (S3C2440_SELECT_DSC1 | 20) -#define S3C2440_DSC1_NFC_10mA   (0<<20) -#define S3C2440_DSC1_NFC_8mA    (1<<20) -#define S3C2440_DSC1_NFC_6mA    (2<<20) -#define S3C2440_DSC1_NFC_4mA    (3<<20) -#define S3C2440_DSC1_NFC_MASK   (3<<20) - -/* nBE[0..3] */ -#define S3C2440_DSC1_nBE        (S3C2440_SELECT_DSC1 | 18) -#define S3C2440_DSC1_nBE_10mA   (0<<18) -#define S3C2440_DSC1_nBE_8mA    (1<<18) -#define S3C2440_DSC1_nBE_6mA    (2<<18) -#define S3C2440_DSC1_nBE_4mA    (3<<18) -#define S3C2440_DSC1_nBE_MASK   (3<<18) - -#define S3C2440_DSC1_WOE        (S3C2440_SELECT_DSC1 | 16) -#define S3C2440_DSC1_WOE_10mA   (0<<16) -#define S3C2440_DSC1_WOE_8mA    (1<<16) -#define S3C2440_DSC1_WOE_6mA    (2<<16) -#define S3C2440_DSC1_WOE_4mA    (3<<16) -#define S3C2440_DSC1_WOE_MASK   (3<<16) - -#define S3C2440_DSC1_CS7        (S3C2440_SELECT_DSC1 | 14) -#define S3C2440_DSC1_CS7_10mA   (0<<14) -#define S3C2440_DSC1_CS7_8mA    (1<<14) -#define S3C2440_DSC1_CS7_6mA    (2<<14) -#define S3C2440_DSC1_CS7_4mA    (3<<14) -#define S3C2440_DSC1_CS7_MASK   (3<<14) - -#define S3C2440_DSC1_CS6        (S3C2440_SELECT_DSC1 | 12) -#define S3C2440_DSC1_CS6_10mA   (0<<12) -#define S3C2440_DSC1_CS6_8mA    (1<<12) -#define S3C2440_DSC1_CS6_6mA    (2<<12) -#define S3C2440_DSC1_CS6_4mA    (3<<12) -#define S3C2440_DSC1_CS6_MASK   (3<<12) - -#define S3C2440_DSC1_CS5        (S3C2440_SELECT_DSC1 | 10) -#define S3C2440_DSC1_CS5_10mA   (0<<10) -#define S3C2440_DSC1_CS5_8mA    (1<<10) -#define S3C2440_DSC1_CS5_6mA    (2<<10) -#define S3C2440_DSC1_CS5_4mA    (3<<10) -#define S3C2440_DSC1_CS5_MASK   (3<<10) - -#define S3C2440_DSC1_CS4        (S3C2440_SELECT_DSC1 | 8) -#define S3C2440_DSC1_CS4_10mA   (0<<8) -#define S3C2440_DSC1_CS4_8mA    (1<<8) -#define S3C2440_DSC1_CS4_6mA    (2<<8) -#define S3C2440_DSC1_CS4_4mA    (3<<8) -#define S3C2440_DSC1_CS4_MASK   (3<<8) - -#define S3C2440_DSC1_CS3        (S3C2440_SELECT_DSC1 | 6) -#define S3C2440_DSC1_CS3_10mA   (0<<6) -#define S3C2440_DSC1_CS3_8mA    (1<<6) -#define S3C2440_DSC1_CS3_6mA    (2<<6) -#define S3C2440_DSC1_CS3_4mA    (3<<6) -#define S3C2440_DSC1_CS3_MASK   (3<<6) - -#define S3C2440_DSC1_CS2        (S3C2440_SELECT_DSC1 | 4) -#define S3C2440_DSC1_CS2_10mA   (0<<4) -#define S3C2440_DSC1_CS2_8mA    (1<<4) -#define S3C2440_DSC1_CS2_6mA    (2<<4) -#define S3C2440_DSC1_CS2_4mA    (3<<4) -#define S3C2440_DSC1_CS2_MASK   (3<<4) - -#define S3C2440_DSC1_CS1        (S3C2440_SELECT_DSC1 | 2) -#define S3C2440_DSC1_CS1_10mA   (0<<2) -#define S3C2440_DSC1_CS1_8mA    (1<<2) -#define S3C2440_DSC1_CS1_6mA    (2<<2) -#define S3C2440_DSC1_CS1_4mA    (3<<2) -#define S3C2440_DSC1_CS1_MASK   (3<<2) - -#define S3C2440_DSC1_CS0        (S3C2440_SELECT_DSC1 | 0) -#define S3C2440_DSC1_CS0_10mA   (0<<0) -#define S3C2440_DSC1_CS0_8mA    (1<<0) -#define S3C2440_DSC1_CS0_6mA    (2<<0) -#define S3C2440_DSC1_CS0_4mA    (3<<0) -#define S3C2440_DSC1_CS0_MASK   (3<<0) - -#endif /* CONFIG_CPU_S3C2440 */ -  #endif	/* __ASM_ARCH_REGS_DSC_H */ diff --git a/arch/arm/mach-s3c64xx/Makefile b/arch/arm/mach-s3c64xx/Makefile index f9ce1dc28ce..31d0c910127 100644 --- a/arch/arm/mach-s3c64xx/Makefile +++ b/arch/arm/mach-s3c64xx/Makefile @@ -32,7 +32,6 @@ obj-$(CONFIG_S3C64XX_DMA)	+= dma.o  obj-y				+= dev-uart.o  obj-y				+= dev-audio.o -obj-$(CONFIG_S3C64XX_DEV_SPI)	+= dev-spi.o  # Device setup diff --git a/arch/arm/mach-s3c64xx/cpuidle.c b/arch/arm/mach-s3c64xx/cpuidle.c index ead5fab0dbb..3c8ab07c201 100644 --- a/arch/arm/mach-s3c64xx/cpuidle.c +++ b/arch/arm/mach-s3c64xx/cpuidle.c @@ -40,12 +40,9 @@ static int s3c64xx_enter_idle(struct cpuidle_device *dev,  	return index;  } -static DEFINE_PER_CPU(struct cpuidle_device, s3c64xx_cpuidle_device); -  static struct cpuidle_driver s3c64xx_cpuidle_driver = {  	.name	= "s3c64xx_cpuidle",  	.owner  = THIS_MODULE, -	.en_core_tk_irqen = 1,  	.states = {  		{  			.enter            = s3c64xx_enter_idle, @@ -61,16 +58,6 @@ static struct cpuidle_driver s3c64xx_cpuidle_driver = {  static int __init s3c64xx_init_cpuidle(void)  { -	int ret; - -	cpuidle_register_driver(&s3c64xx_cpuidle_driver); - -	ret = cpuidle_register_device(&s3c64xx_cpuidle_device); -	if (ret) { -		pr_err("Failed to register cpuidle device: %d\n", ret); -		return ret; -	} - -	return 0; +	return cpuidle_register(&s3c64xx_cpuidle_driver, NULL);  }  device_initcall(s3c64xx_init_cpuidle); diff --git a/arch/arm/mach-s3c64xx/dma.c b/arch/arm/mach-s3c64xx/dma.c index 6af1aa1ef21..759846c28d1 100644 --- a/arch/arm/mach-s3c64xx/dma.c +++ b/arch/arm/mach-s3c64xx/dma.c @@ -509,6 +509,7 @@ int s3c2410_dma_request(enum dma_ch channel,  	chan->client = client;  	chan->in_use = 1;  	chan->peripheral = channel; +	chan->flags = 0;  	local_irq_restore(flags); diff --git a/arch/arm/mach-s3c64xx/include/mach/dma.h b/arch/arm/mach-s3c64xx/include/mach/dma.h index 57b1ff4b2d7..fe1a98cf0e4 100644 --- a/arch/arm/mach-s3c64xx/include/mach/dma.h +++ b/arch/arm/mach-s3c64xx/include/mach/dma.h @@ -21,7 +21,6 @@   */  enum dma_ch {  	/* DMA0/SDMA0 */ -	DMACH_DT_PROP = -1, /* not yet supported, do not use */  	DMACH_UART0 = 0,  	DMACH_UART0_SRC2,  	DMACH_UART1, diff --git a/arch/arm/mach-s3c64xx/mach-crag6410-module.c b/arch/arm/mach-s3c64xx/mach-crag6410-module.c index bf3d1c09b08..a946b759fab 100644 --- a/arch/arm/mach-s3c64xx/mach-crag6410-module.c +++ b/arch/arm/mach-s3c64xx/mach-crag6410-module.c @@ -210,6 +210,7 @@ static struct arizona_pdata wm5102_reva_pdata = {  	.gpio_base = CODEC_GPIO_BASE,  	.irq_active_high = true,  	.micd_pol_gpio = CODEC_GPIO_BASE + 4, +	.micd_rate = 6,  	.gpio_defaults = {  		[2] = 0x10000, /* AIF3TXLRCLK */  		[3] = 0x4,     /* OPCLK */ diff --git a/arch/arm/mach-s3c64xx/setup-usb-phy.c b/arch/arm/mach-s3c64xx/setup-usb-phy.c index c8174d95339..ca960bda02f 100644 --- a/arch/arm/mach-s3c64xx/setup-usb-phy.c +++ b/arch/arm/mach-s3c64xx/setup-usb-phy.c @@ -76,7 +76,7 @@ static int s3c_usb_otgphy_exit(struct platform_device *pdev)  int s5p_usb_phy_init(struct platform_device *pdev, int type)  { -	if (type == S5P_USB_PHY_DEVICE) +	if (type == USB_PHY_TYPE_DEVICE)  		return s3c_usb_otgphy_init(pdev);  	return -EINVAL; @@ -84,7 +84,7 @@ int s5p_usb_phy_init(struct platform_device *pdev, int type)  int s5p_usb_phy_exit(struct platform_device *pdev, int type)  { -	if (type == S5P_USB_PHY_DEVICE) +	if (type == USB_PHY_TYPE_DEVICE)  		return s3c_usb_otgphy_exit(pdev);  	return -EINVAL; diff --git a/arch/arm/mach-s5pc100/common.h b/arch/arm/mach-s5pc100/common.h index 9fbd3ae2b40..c41f912e9e1 100644 --- a/arch/arm/mach-s5pc100/common.h +++ b/arch/arm/mach-s5pc100/common.h @@ -20,18 +20,9 @@ void s5pc100_setup_clocks(void);  void s5pc100_restart(char mode, const char *cmd); -#ifdef CONFIG_CPU_S5PC100 -  extern  int s5pc100_init(void);  extern void s5pc100_map_io(void);  extern void s5pc100_init_clocks(int xtal);  extern void s5pc100_init_uarts(struct s3c2410_uartcfg *cfg, int no); -#else -#define s5pc100_init_clocks NULL -#define s5pc100_init_uarts NULL -#define s5pc100_map_io NULL -#define s5pc100_init NULL -#endif -  #endif /* __ARCH_ARM_MACH_S5PC100_COMMON_H */ diff --git a/arch/arm/mach-s5pv210/common.h b/arch/arm/mach-s5pv210/common.h index 6ed2af5c751..0a1cc0aef72 100644 --- a/arch/arm/mach-s5pv210/common.h +++ b/arch/arm/mach-s5pv210/common.h @@ -20,18 +20,9 @@ void s5pv210_setup_clocks(void);  void s5pv210_restart(char mode, const char *cmd); -#ifdef CONFIG_CPU_S5PV210 -  extern  int s5pv210_init(void);  extern void s5pv210_map_io(void);  extern void s5pv210_init_clocks(int xtal);  extern void s5pv210_init_uarts(struct s3c2410_uartcfg *cfg, int no); -#else -#define s5pv210_init_clocks NULL -#define s5pv210_init_uarts NULL -#define s5pv210_map_io NULL -#define s5pv210_init NULL -#endif -  #endif /* __ARCH_ARM_MACH_S5PV210_COMMON_H */ diff --git a/arch/arm/mach-s5pv210/setup-usb-phy.c b/arch/arm/mach-s5pv210/setup-usb-phy.c index 356a0900af0..b2ee5333f89 100644 --- a/arch/arm/mach-s5pv210/setup-usb-phy.c +++ b/arch/arm/mach-s5pv210/setup-usb-phy.c @@ -80,7 +80,7 @@ static int s5pv210_usb_otgphy_exit(struct platform_device *pdev)  int s5p_usb_phy_init(struct platform_device *pdev, int type)  { -	if (type == S5P_USB_PHY_DEVICE) +	if (type == USB_PHY_TYPE_DEVICE)  		return s5pv210_usb_otgphy_init(pdev);  	return -EINVAL; @@ -88,7 +88,7 @@ int s5p_usb_phy_init(struct platform_device *pdev, int type)  int s5p_usb_phy_exit(struct platform_device *pdev, int type)  { -	if (type == S5P_USB_PHY_DEVICE) +	if (type == USB_PHY_TYPE_DEVICE)  		return s5pv210_usb_otgphy_exit(pdev);  	return -EINVAL; diff --git a/arch/arm/mach-sa1100/Kconfig b/arch/arm/mach-sa1100/Kconfig index ca14dbdcfb2..04f9784ff0e 100644 --- a/arch/arm/mach-sa1100/Kconfig +++ b/arch/arm/mach-sa1100/Kconfig @@ -4,7 +4,7 @@ menu "SA11x0 Implementations"  config SA1100_ASSABET  	bool "Assabet" -	select CPU_FREQ_SA1110 +	select ARM_SA1110_CPUFREQ  	help  	  Say Y here if you are using the Intel(R) StrongARM(R) SA-1110  	  Microprocessor Development Board (also known as the Assabet). @@ -20,7 +20,7 @@ config ASSABET_NEPONSET  config SA1100_CERF  	bool "CerfBoard" -	select CPU_FREQ_SA1110 +	select ARM_SA1110_CPUFREQ  	help  	  The Intrinsyc CerfBoard is based on the StrongARM 1110 (Discontinued).  	  More information is available at: @@ -47,7 +47,7 @@ endchoice  config SA1100_COLLIE  	bool "Sharp Zaurus SL5500" -	# FIXME: select CPU_FREQ_SA11x0 +	# FIXME: select ARM_SA11x0_CPUFREQ  	select SHARP_LOCOMO  	select SHARP_PARAM  	select SHARP_SCOOP @@ -56,7 +56,7 @@ config SA1100_COLLIE  config SA1100_H3100  	bool "Compaq iPAQ H3100" -	select CPU_FREQ_SA1110 +	select ARM_SA1110_CPUFREQ  	select HTC_EGPIO  	help  	  Say Y here if you intend to run this kernel on the Compaq iPAQ @@ -67,7 +67,7 @@ config SA1100_H3100  config SA1100_H3600  	bool "Compaq iPAQ H3600/H3700" -	select CPU_FREQ_SA1110 +	select ARM_SA1110_CPUFREQ  	select HTC_EGPIO  	help  	  Say Y here if you intend to run this kernel on the Compaq iPAQ @@ -78,7 +78,7 @@ config SA1100_H3600  config SA1100_BADGE4  	bool "HP Labs BadgePAD 4" -	select CPU_FREQ_SA1100 +	select ARM_SA1100_CPUFREQ  	select SA1111  	help  	  Say Y here if you want to build a kernel for the HP Laboratories @@ -86,7 +86,7 @@ config SA1100_BADGE4  config SA1100_JORNADA720  	bool "HP Jornada 720" -	# FIXME: select CPU_FREQ_SA11x0 +	# FIXME: select ARM_SA11x0_CPUFREQ  	select SA1111  	help  	  Say Y here if you want to build a kernel for the HP Jornada 720 @@ -105,14 +105,14 @@ config SA1100_JORNADA720_SSP  config SA1100_HACKKIT  	bool "HackKit Core CPU Board" -	select CPU_FREQ_SA1100 +	select ARM_SA1100_CPUFREQ  	help  	  Say Y here to support the HackKit Core CPU Board  	  <http://hackkit.eletztrick.de>;  config SA1100_LART  	bool "LART" -	select CPU_FREQ_SA1100 +	select ARM_SA1100_CPUFREQ  	help  	  Say Y here if you are using the Linux Advanced Radio Terminal  	  (also known as the LART).  See <http://www.lartmaker.nl/> for @@ -120,7 +120,7 @@ config SA1100_LART  config SA1100_NANOENGINE  	bool "nanoEngine" -	select CPU_FREQ_SA1110 +	select ARM_SA1110_CPUFREQ  	select PCI  	select PCI_NANOENGINE  	help @@ -130,7 +130,7 @@ config SA1100_NANOENGINE  config SA1100_PLEB  	bool "PLEB" -	select CPU_FREQ_SA1100 +	select ARM_SA1100_CPUFREQ  	help  	  Say Y here if you are using version 1 of the Portable Linux  	  Embedded Board (also known as PLEB). @@ -139,7 +139,7 @@ config SA1100_PLEB  config SA1100_SHANNON  	bool "Shannon" -	select CPU_FREQ_SA1100 +	select ARM_SA1100_CPUFREQ  	help  	  The Shannon (also known as a Tuxscreen, and also as a IS2630) was a  	  limited edition webphone produced by Philips. The Shannon is a SA1100 @@ -148,7 +148,7 @@ config SA1100_SHANNON  config SA1100_SIMPAD  	bool "Simpad" -	select CPU_FREQ_SA1110 +	select ARM_SA1110_CPUFREQ  	help  	  The SIEMENS webpad SIMpad is based on the StrongARM 1110. There  	  are two different versions CL4 and SL4. CL4 has 32MB RAM and 16MB diff --git a/arch/arm/mach-sa1100/Makefile b/arch/arm/mach-sa1100/Makefile index 1aed9e70465..2732eef4896 100644 --- a/arch/arm/mach-sa1100/Makefile +++ b/arch/arm/mach-sa1100/Makefile @@ -8,9 +8,6 @@ obj-m :=  obj-n :=  obj-  := -obj-$(CONFIG_CPU_FREQ_SA1100)		+= cpu-sa1100.o -obj-$(CONFIG_CPU_FREQ_SA1110)		+= cpu-sa1110.o -  # Specific board support  obj-$(CONFIG_SA1100_ASSABET)		+= assabet.o  obj-$(CONFIG_ASSABET_NEPONSET)		+= neponset.o diff --git a/arch/arm/mach-sa1100/cpu-sa1100.c b/arch/arm/mach-sa1100/cpu-sa1100.c deleted file mode 100644 index e8f4d1e1923..00000000000 --- a/arch/arm/mach-sa1100/cpu-sa1100.c +++ /dev/null @@ -1,249 +0,0 @@ -/* - * cpu-sa1100.c: clock scaling for the SA1100 - * - * Copyright (C) 2000 2001, The Delft University of Technology - * - * Authors: - * - Johan Pouwelse (J.A.Pouwelse@its.tudelft.nl): initial version - * - Erik Mouw (J.A.K.Mouw@its.tudelft.nl): - *   - major rewrite for linux-2.3.99 - *   - rewritten for the more generic power management scheme in - *     linux-2.4.5-rmk1 - * - * This software has been developed while working on the LART - * computing board (http://www.lartmaker.nl/), which is - * sponsored by the Mobile Multi-media Communications - * (http://www.mobimedia.org/) and Ubiquitous Communications - * (http://www.ubicom.tudelft.nl/) projects. - * - * The authors can be reached at: - * - *  Erik Mouw - *  Information and Communication Theory Group - *  Faculty of Information Technology and Systems - *  Delft University of Technology - *  P.O. Box 5031 - *  2600 GA Delft - *  The Netherlands - * - * - * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - * - * - * Theory of operations - * ==================== - * - * Clock scaling can be used to lower the power consumption of the CPU - * core. This will give you a somewhat longer running time. - * - * The SA-1100 has a single register to change the core clock speed: - * - *   PPCR      0x90020014    PLL config - * - * However, the DRAM timings are closely related to the core clock - * speed, so we need to change these, too. The used registers are: - * - *   MDCNFG    0xA0000000    DRAM config - *   MDCAS0    0xA0000004    Access waveform - *   MDCAS1    0xA0000008    Access waveform - *   MDCAS2    0xA000000C    Access waveform - * - * Care must be taken to change the DRAM parameters the correct way, - * because otherwise the DRAM becomes unusable and the kernel will - * crash. - * - * The simple solution to avoid a kernel crash is to put the actual - * clock change in ROM and jump to that code from the kernel. The main - * disadvantage is that the ROM has to be modified, which is not - * possible on all SA-1100 platforms. Another disadvantage is that - * jumping to ROM makes clock switching unnecessary complicated. - * - * The idea behind this driver is that the memory configuration can be - * changed while running from DRAM (even with interrupts turned on!) - * as long as all re-configuration steps yield a valid DRAM - * configuration. The advantages are clear: it will run on all SA-1100 - * platforms, and the code is very simple. - * - * If you really want to understand what is going on in - * sa1100_update_dram_timings(), you'll have to read sections 8.2, - * 9.5.7.3, and 10.2 from the "Intel StrongARM SA-1100 Microprocessor - * Developers Manual" (available for free from Intel). - * - */ - -#include <linux/kernel.h> -#include <linux/types.h> -#include <linux/init.h> -#include <linux/cpufreq.h> -#include <linux/io.h> - -#include <asm/cputype.h> - -#include <mach/hardware.h> - -#include "generic.h" - -struct sa1100_dram_regs { -	int speed; -	u32 mdcnfg; -	u32 mdcas0; -	u32 mdcas1; -	u32 mdcas2; -}; - - -static struct cpufreq_driver sa1100_driver; - -static struct sa1100_dram_regs sa1100_dram_settings[] = { -	/*speed,     mdcnfg,     mdcas0,     mdcas1,     mdcas2,   clock freq */ -	{ 59000, 0x00dc88a3, 0xcccccccf, 0xfffffffc, 0xffffffff},/*  59.0 MHz */ -	{ 73700, 0x011490a3, 0xcccccccf, 0xfffffffc, 0xffffffff},/*  73.7 MHz */ -	{ 88500, 0x014e90a3, 0xcccccccf, 0xfffffffc, 0xffffffff},/*  88.5 MHz */ -	{103200, 0x01889923, 0xcccccccf, 0xfffffffc, 0xffffffff},/* 103.2 MHz */ -	{118000, 0x01c29923, 0x9999998f, 0xfffffff9, 0xffffffff},/* 118.0 MHz */ -	{132700, 0x01fb2123, 0x9999998f, 0xfffffff9, 0xffffffff},/* 132.7 MHz */ -	{147500, 0x02352123, 0x3333330f, 0xfffffff3, 0xffffffff},/* 147.5 MHz */ -	{162200, 0x026b29a3, 0x38e38e1f, 0xfff8e38e, 0xffffffff},/* 162.2 MHz */ -	{176900, 0x02a329a3, 0x71c71c1f, 0xfff1c71c, 0xffffffff},/* 176.9 MHz */ -	{191700, 0x02dd31a3, 0xe38e383f, 0xffe38e38, 0xffffffff},/* 191.7 MHz */ -	{206400, 0x03153223, 0xc71c703f, 0xffc71c71, 0xffffffff},/* 206.4 MHz */ -	{221200, 0x034fba23, 0xc71c703f, 0xffc71c71, 0xffffffff},/* 221.2 MHz */ -	{235900, 0x03853a23, 0xe1e1e07f, 0xe1e1e1e1, 0xffffffe1},/* 235.9 MHz */ -	{250700, 0x03bf3aa3, 0xc3c3c07f, 0xc3c3c3c3, 0xffffffc3},/* 250.7 MHz */ -	{265400, 0x03f7c2a3, 0xc3c3c07f, 0xc3c3c3c3, 0xffffffc3},/* 265.4 MHz */ -	{280200, 0x0431c2a3, 0x878780ff, 0x87878787, 0xffffff87},/* 280.2 MHz */ -	{ 0, 0, 0, 0, 0 } /* last entry */ -}; - -static void sa1100_update_dram_timings(int current_speed, int new_speed) -{ -	struct sa1100_dram_regs *settings = sa1100_dram_settings; - -	/* find speed */ -	while (settings->speed != 0) { -		if (new_speed == settings->speed) -			break; - -		settings++; -	} - -	if (settings->speed == 0) { -		panic("%s: couldn't find dram setting for speed %d\n", -		      __func__, new_speed); -	} - -	/* No risk, no fun: run with interrupts on! */ -	if (new_speed > current_speed) { -		/* We're going FASTER, so first relax the memory -		 * timings before changing the core frequency -		 */ - -		/* Half the memory access clock */ -		MDCNFG |= MDCNFG_CDB2; - -		/* The order of these statements IS important, keep 8 -		 * pulses!! -		 */ -		MDCAS2 = settings->mdcas2; -		MDCAS1 = settings->mdcas1; -		MDCAS0 = settings->mdcas0; -		MDCNFG = settings->mdcnfg; -	} else { -		/* We're going SLOWER: first decrease the core -		 * frequency and then tighten the memory settings. -		 */ - -		/* Half the memory access clock */ -		MDCNFG |= MDCNFG_CDB2; - -		/* The order of these statements IS important, keep 8 -		 * pulses!! -		 */ -		MDCAS0 = settings->mdcas0; -		MDCAS1 = settings->mdcas1; -		MDCAS2 = settings->mdcas2; -		MDCNFG = settings->mdcnfg; -	} -} - -static int sa1100_target(struct cpufreq_policy *policy, -			 unsigned int target_freq, -			 unsigned int relation) -{ -	unsigned int cur = sa11x0_getspeed(0); -	unsigned int new_ppcr; -	struct cpufreq_freqs freqs; - -	new_ppcr = sa11x0_freq_to_ppcr(target_freq); -	switch (relation) { -	case CPUFREQ_RELATION_L: -		if (sa11x0_ppcr_to_freq(new_ppcr) > policy->max) -			new_ppcr--; -		break; -	case CPUFREQ_RELATION_H: -		if ((sa11x0_ppcr_to_freq(new_ppcr) > target_freq) && -		    (sa11x0_ppcr_to_freq(new_ppcr - 1) >= policy->min)) -			new_ppcr--; -		break; -	} - -	freqs.old = cur; -	freqs.new = sa11x0_ppcr_to_freq(new_ppcr); -	freqs.cpu = 0; - -	cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); - -	if (freqs.new > cur) -		sa1100_update_dram_timings(cur, freqs.new); - -	PPCR = new_ppcr; - -	if (freqs.new < cur) -		sa1100_update_dram_timings(cur, freqs.new); - -	cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); - -	return 0; -} - -static int __init sa1100_cpu_init(struct cpufreq_policy *policy) -{ -	if (policy->cpu != 0) -		return -EINVAL; -	policy->cur = policy->min = policy->max = sa11x0_getspeed(0); -	policy->cpuinfo.min_freq = 59000; -	policy->cpuinfo.max_freq = 287000; -	policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL; -	return 0; -} - -static struct cpufreq_driver sa1100_driver __refdata = { -	.flags		= CPUFREQ_STICKY, -	.verify		= sa11x0_verify_speed, -	.target		= sa1100_target, -	.get		= sa11x0_getspeed, -	.init		= sa1100_cpu_init, -	.name		= "sa1100", -}; - -static int __init sa1100_dram_init(void) -{ -	if (cpu_is_sa1100()) -		return cpufreq_register_driver(&sa1100_driver); -	else -		return -ENODEV; -} - -arch_initcall(sa1100_dram_init); diff --git a/arch/arm/mach-sa1100/cpu-sa1110.c b/arch/arm/mach-sa1100/cpu-sa1110.c deleted file mode 100644 index 48c45b0c92b..00000000000 --- a/arch/arm/mach-sa1100/cpu-sa1110.c +++ /dev/null @@ -1,408 +0,0 @@ -/* - *  linux/arch/arm/mach-sa1100/cpu-sa1110.c - * - *  Copyright (C) 2001 Russell King - * - * 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. - * - * Note: there are two erratas that apply to the SA1110 here: - *  7 - SDRAM auto-power-up failure (rev A0) - * 13 - Corruption of internal register reads/writes following - *      SDRAM reads (rev A0, B0, B1) - * - * We ignore rev. A0 and B0 devices; I don't think they're worth supporting. - * - * The SDRAM type can be passed on the command line as cpu_sa1110.sdram=type - */ -#include <linux/cpufreq.h> -#include <linux/delay.h> -#include <linux/init.h> -#include <linux/io.h> -#include <linux/kernel.h> -#include <linux/moduleparam.h> -#include <linux/types.h> - -#include <asm/cputype.h> -#include <asm/mach-types.h> - -#include <mach/hardware.h> - -#include "generic.h" - -#undef DEBUG - -struct sdram_params { -	const char name[20]; -	u_char  rows;		/* bits				 */ -	u_char  cas_latency;	/* cycles			 */ -	u_char  tck;		/* clock cycle time (ns)	 */ -	u_char  trcd;		/* activate to r/w (ns)		 */ -	u_char  trp;		/* precharge to activate (ns)	 */ -	u_char  twr;		/* write recovery time (ns)	 */ -	u_short refresh;	/* refresh time for array (us)	 */ -}; - -struct sdram_info { -	u_int	mdcnfg; -	u_int	mdrefr; -	u_int	mdcas[3]; -}; - -static struct sdram_params sdram_tbl[] __initdata = { -	{	/* Toshiba TC59SM716 CL2 */ -		.name		= "TC59SM716-CL2", -		.rows		= 12, -		.tck		= 10, -		.trcd		= 20, -		.trp		= 20, -		.twr		= 10, -		.refresh	= 64000, -		.cas_latency	= 2, -	}, {	/* Toshiba TC59SM716 CL3 */ -		.name		= "TC59SM716-CL3", -		.rows		= 12, -		.tck		= 8, -		.trcd		= 20, -		.trp		= 20, -		.twr		= 8, -		.refresh	= 64000, -		.cas_latency	= 3, -	}, {	/* Samsung K4S641632D TC75 */ -		.name		= "K4S641632D", -		.rows		= 14, -		.tck		= 9, -		.trcd		= 27, -		.trp		= 20, -		.twr		= 9, -		.refresh	= 64000, -		.cas_latency	= 3, -	}, {	/* Samsung K4S281632B-1H */ -		.name           = "K4S281632B-1H", -		.rows		= 12, -		.tck		= 10, -		.trp		= 20, -		.twr		= 10, -		.refresh	= 64000, -		.cas_latency	= 3, -	}, {	/* Samsung KM416S4030CT */ -		.name		= "KM416S4030CT", -		.rows		= 13, -		.tck		= 8, -		.trcd		= 24,	/* 3 CLKs */ -		.trp		= 24,	/* 3 CLKs */ -		.twr		= 16,	/* Trdl: 2 CLKs */ -		.refresh	= 64000, -		.cas_latency	= 3, -	}, {	/* Winbond W982516AH75L CL3 */ -		.name		= "W982516AH75L", -		.rows		= 16, -		.tck		= 8, -		.trcd		= 20, -		.trp		= 20, -		.twr		= 8, -		.refresh	= 64000, -		.cas_latency	= 3, -	}, {	/* Micron MT48LC8M16A2TG-75 */ -		.name		= "MT48LC8M16A2TG-75", -		.rows		= 12, -		.tck		= 8, -		.trcd		= 20, -		.trp		= 20, -		.twr		= 8, -		.refresh	= 64000, -		.cas_latency	= 3, -	}, -}; - -static struct sdram_params sdram_params; - -/* - * Given a period in ns and frequency in khz, calculate the number of - * cycles of frequency in period.  Note that we round up to the next - * cycle, even if we are only slightly over. - */ -static inline u_int ns_to_cycles(u_int ns, u_int khz) -{ -	return (ns * khz + 999999) / 1000000; -} - -/* - * Create the MDCAS register bit pattern. - */ -static inline void set_mdcas(u_int *mdcas, int delayed, u_int rcd) -{ -	u_int shift; - -	rcd = 2 * rcd - 1; -	shift = delayed + 1 + rcd; - -	mdcas[0]  = (1 << rcd) - 1; -	mdcas[0] |= 0x55555555 << shift; -	mdcas[1]  = mdcas[2] = 0x55555555 << (shift & 1); -} - -static void -sdram_calculate_timing(struct sdram_info *sd, u_int cpu_khz, -		       struct sdram_params *sdram) -{ -	u_int mem_khz, sd_khz, trp, twr; - -	mem_khz = cpu_khz / 2; -	sd_khz = mem_khz; - -	/* -	 * If SDCLK would invalidate the SDRAM timings, -	 * run SDCLK at half speed. -	 * -	 * CPU steppings prior to B2 must either run the memory at -	 * half speed or use delayed read latching (errata 13). -	 */ -	if ((ns_to_cycles(sdram->tck, sd_khz) > 1) || -	    (CPU_REVISION < CPU_SA1110_B2 && sd_khz < 62000)) -		sd_khz /= 2; - -	sd->mdcnfg = MDCNFG & 0x007f007f; - -	twr = ns_to_cycles(sdram->twr, mem_khz); - -	/* trp should always be >1 */ -	trp = ns_to_cycles(sdram->trp, mem_khz) - 1; -	if (trp < 1) -		trp = 1; - -	sd->mdcnfg |= trp << 8; -	sd->mdcnfg |= trp << 24; -	sd->mdcnfg |= sdram->cas_latency << 12; -	sd->mdcnfg |= sdram->cas_latency << 28; -	sd->mdcnfg |= twr << 14; -	sd->mdcnfg |= twr << 30; - -	sd->mdrefr = MDREFR & 0xffbffff0; -	sd->mdrefr |= 7; - -	if (sd_khz != mem_khz) -		sd->mdrefr |= MDREFR_K1DB2; - -	/* initial number of '1's in MDCAS + 1 */ -	set_mdcas(sd->mdcas, sd_khz >= 62000, -		ns_to_cycles(sdram->trcd, mem_khz)); - -#ifdef DEBUG -	printk(KERN_DEBUG "MDCNFG: %08x MDREFR: %08x MDCAS0: %08x MDCAS1: %08x MDCAS2: %08x\n", -		sd->mdcnfg, sd->mdrefr, sd->mdcas[0], sd->mdcas[1], -		sd->mdcas[2]); -#endif -} - -/* - * Set the SDRAM refresh rate. - */ -static inline void sdram_set_refresh(u_int dri) -{ -	MDREFR = (MDREFR & 0xffff000f) | (dri << 4); -	(void) MDREFR; -} - -/* - * Update the refresh period.  We do this such that we always refresh - * the SDRAMs within their permissible period.  The refresh period is - * always a multiple of the memory clock (fixed at cpu_clock / 2). - * - * FIXME: we don't currently take account of burst accesses here, - * but neither do Intels DM nor Angel. - */ -static void -sdram_update_refresh(u_int cpu_khz, struct sdram_params *sdram) -{ -	u_int ns_row = (sdram->refresh * 1000) >> sdram->rows; -	u_int dri = ns_to_cycles(ns_row, cpu_khz / 2) / 32; - -#ifdef DEBUG -	mdelay(250); -	printk(KERN_DEBUG "new dri value = %d\n", dri); -#endif - -	sdram_set_refresh(dri); -} - -/* - * Ok, set the CPU frequency. - */ -static int sa1110_target(struct cpufreq_policy *policy, -			 unsigned int target_freq, -			 unsigned int relation) -{ -	struct sdram_params *sdram = &sdram_params; -	struct cpufreq_freqs freqs; -	struct sdram_info sd; -	unsigned long flags; -	unsigned int ppcr, unused; - -	switch (relation) { -	case CPUFREQ_RELATION_L: -		ppcr = sa11x0_freq_to_ppcr(target_freq); -		if (sa11x0_ppcr_to_freq(ppcr) > policy->max) -			ppcr--; -		break; -	case CPUFREQ_RELATION_H: -		ppcr = sa11x0_freq_to_ppcr(target_freq); -		if (ppcr && (sa11x0_ppcr_to_freq(ppcr) > target_freq) && -		    (sa11x0_ppcr_to_freq(ppcr-1) >= policy->min)) -			ppcr--; -		break; -	default: -		return -EINVAL; -	} - -	freqs.old = sa11x0_getspeed(0); -	freqs.new = sa11x0_ppcr_to_freq(ppcr); -	freqs.cpu = 0; - -	sdram_calculate_timing(&sd, freqs.new, sdram); - -#if 0 -	/* -	 * These values are wrong according to the SA1110 documentation -	 * and errata, but they seem to work.  Need to get a storage -	 * scope on to the SDRAM signals to work out why. -	 */ -	if (policy->max < 147500) { -		sd.mdrefr |= MDREFR_K1DB2; -		sd.mdcas[0] = 0xaaaaaa7f; -	} else { -		sd.mdrefr &= ~MDREFR_K1DB2; -		sd.mdcas[0] = 0xaaaaaa9f; -	} -	sd.mdcas[1] = 0xaaaaaaaa; -	sd.mdcas[2] = 0xaaaaaaaa; -#endif - -	cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); - -	/* -	 * The clock could be going away for some time.  Set the SDRAMs -	 * to refresh rapidly (every 64 memory clock cycles).  To get -	 * through the whole array, we need to wait 262144 mclk cycles. -	 * We wait 20ms to be safe. -	 */ -	sdram_set_refresh(2); -	if (!irqs_disabled()) -		msleep(20); -	else -		mdelay(20); - -	/* -	 * Reprogram the DRAM timings with interrupts disabled, and -	 * ensure that we are doing this within a complete cache line. -	 * This means that we won't access SDRAM for the duration of -	 * the programming. -	 */ -	local_irq_save(flags); -	asm("mcr p15, 0, %0, c7, c10, 4" : : "r" (0)); -	udelay(10); -	__asm__ __volatile__("\n\ -		b	2f					\n\ -		.align	5					\n\ -1:		str	%3, [%1, #0]		@ MDCNFG	\n\ -		str	%4, [%1, #28]		@ MDREFR	\n\ -		str	%5, [%1, #4]		@ MDCAS0	\n\ -		str	%6, [%1, #8]		@ MDCAS1	\n\ -		str	%7, [%1, #12]		@ MDCAS2	\n\ -		str	%8, [%2, #0]		@ PPCR		\n\ -		ldr	%0, [%1, #0]				\n\ -		b	3f					\n\ -2:		b	1b					\n\ -3:		nop						\n\ -		nop" -		: "=&r" (unused) -		: "r" (&MDCNFG), "r" (&PPCR), "0" (sd.mdcnfg), -		  "r" (sd.mdrefr), "r" (sd.mdcas[0]), -		  "r" (sd.mdcas[1]), "r" (sd.mdcas[2]), "r" (ppcr)); -	local_irq_restore(flags); - -	/* -	 * Now, return the SDRAM refresh back to normal. -	 */ -	sdram_update_refresh(freqs.new, sdram); - -	cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); - -	return 0; -} - -static int __init sa1110_cpu_init(struct cpufreq_policy *policy) -{ -	if (policy->cpu != 0) -		return -EINVAL; -	policy->cur = policy->min = policy->max = sa11x0_getspeed(0); -	policy->cpuinfo.min_freq = 59000; -	policy->cpuinfo.max_freq = 287000; -	policy->cpuinfo.transition_latency = CPUFREQ_ETERNAL; -	return 0; -} - -/* sa1110_driver needs __refdata because it must remain after init registers - * it with cpufreq_register_driver() */ -static struct cpufreq_driver sa1110_driver __refdata = { -	.flags		= CPUFREQ_STICKY, -	.verify		= sa11x0_verify_speed, -	.target		= sa1110_target, -	.get		= sa11x0_getspeed, -	.init		= sa1110_cpu_init, -	.name		= "sa1110", -}; - -static struct sdram_params *sa1110_find_sdram(const char *name) -{ -	struct sdram_params *sdram; - -	for (sdram = sdram_tbl; sdram < sdram_tbl + ARRAY_SIZE(sdram_tbl); -	     sdram++) -		if (strcmp(name, sdram->name) == 0) -			return sdram; - -	return NULL; -} - -static char sdram_name[16]; - -static int __init sa1110_clk_init(void) -{ -	struct sdram_params *sdram; -	const char *name = sdram_name; - -	if (!cpu_is_sa1110()) -		return -ENODEV; - -	if (!name[0]) { -		if (machine_is_assabet()) -			name = "TC59SM716-CL3"; -		if (machine_is_pt_system3()) -			name = "K4S641632D"; -		if (machine_is_h3100()) -			name = "KM416S4030CT"; -		if (machine_is_jornada720()) -			name = "K4S281632B-1H"; -		if (machine_is_nanoengine()) -			name = "MT48LC8M16A2TG-75"; -	} - -	sdram = sa1110_find_sdram(name); -	if (sdram) { -		printk(KERN_DEBUG "SDRAM: tck: %d trcd: %d trp: %d" -			" twr: %d refresh: %d cas_latency: %d\n", -			sdram->tck, sdram->trcd, sdram->trp, -			sdram->twr, sdram->refresh, sdram->cas_latency); - -		memcpy(&sdram_params, sdram, sizeof(sdram_params)); - -		return cpufreq_register_driver(&sa1110_driver); -	} - -	return 0; -} - -module_param_string(sdram, sdram_name, sizeof(sdram_name), 0); -arch_initcall(sa1110_clk_init); diff --git a/arch/arm/mach-sa1100/include/mach/generic.h b/arch/arm/mach-sa1100/include/mach/generic.h new file mode 100644 index 00000000000..665542e0c9e --- /dev/null +++ b/arch/arm/mach-sa1100/include/mach/generic.h @@ -0,0 +1 @@ +#include "../../generic.h" diff --git a/arch/arm/mach-shark/core.c b/arch/arm/mach-shark/core.c index b63dec84819..15355572498 100644 --- a/arch/arm/mach-shark/core.c +++ b/arch/arm/mach-shark/core.c @@ -10,6 +10,7 @@  #include <linux/sched.h>  #include <linux/serial_8250.h>  #include <linux/io.h> +#include <linux/cpu.h>  #include <asm/setup.h>  #include <asm/mach-types.h> @@ -130,7 +131,7 @@ static void __init shark_timer_init(void)  static void shark_init_early(void)  { -	disable_hlt(); +	cpu_idle_poll_ctrl(true);  }  MACHINE_START(SHARK, "Shark") diff --git a/arch/arm/mach-shmobile/board-armadillo800eva.c b/arch/arm/mach-shmobile/board-armadillo800eva.c index f2ec0777cfb..881e5c0e41d 100644 --- a/arch/arm/mach-shmobile/board-armadillo800eva.c +++ b/arch/arm/mach-shmobile/board-armadillo800eva.c @@ -24,6 +24,7 @@  #include <linux/err.h>  #include <linux/kernel.h>  #include <linux/input.h> +#include <linux/platform_data/st1232_pdata.h>  #include <linux/irq.h>  #include <linux/platform_device.h>  #include <linux/gpio.h> @@ -169,7 +170,7 @@ static int usbhsf_get_id(struct platform_device *pdev)  	return USBHS_GADGET;  } -static void usbhsf_power_ctrl(struct platform_device *pdev, +static int usbhsf_power_ctrl(struct platform_device *pdev,  			      void __iomem *base, int enable)  {  	struct usbhsf_private *priv = usbhsf_get_priv(pdev); @@ -223,6 +224,8 @@ static void usbhsf_power_ctrl(struct platform_device *pdev,  		clk_disable(priv->pci);		/* usb work around */  		clk_disable(priv->usb24);	/* usb work around */  	} + +	return 0;  }  static int usbhsf_get_vbus(struct platform_device *pdev) @@ -239,7 +242,7 @@ static irqreturn_t usbhsf_interrupt(int irq, void *data)  	return IRQ_HANDLED;  } -static void usbhsf_hardware_exit(struct platform_device *pdev) +static int usbhsf_hardware_exit(struct platform_device *pdev)  {  	struct usbhsf_private *priv = usbhsf_get_priv(pdev); @@ -264,6 +267,8 @@ static void usbhsf_hardware_exit(struct platform_device *pdev)  	priv->usbh_base	= NULL;  	free_irq(IRQ7, pdev); + +	return 0;  }  static int usbhsf_hardware_init(struct platform_device *pdev) @@ -878,10 +883,15 @@ static struct platform_device i2c_gpio_device = {  };  /* I2C */ +static struct st1232_pdata st1232_i2c0_pdata = { +	.reset_gpio = 166, +}; +  static struct i2c_board_info i2c0_devices[] = {  	{  		I2C_BOARD_INFO("st1232-ts", 0x55),  		.irq = evt2irq(0x0340), +		.platform_data = &st1232_i2c0_pdata,  	},  	{  		I2C_BOARD_INFO("wm8978", 0x1a), @@ -1005,7 +1015,6 @@ static void __init eva_init(void)  	/* Touchscreen */  	gpio_request(GPIO_FN_IRQ10,	NULL); /* TP_INT */ -	gpio_request_one(GPIO_PORT166, GPIOF_OUT_INIT_HIGH, NULL); /* TP_RST_B */  	/* GETHER */  	gpio_request(GPIO_FN_ET_CRS,		NULL); diff --git a/arch/arm/mach-shmobile/board-kzm9g.c b/arch/arm/mach-shmobile/board-kzm9g.c index d34d12ae496..95fe396f960 100644 --- a/arch/arm/mach-shmobile/board-kzm9g.c +++ b/arch/arm/mach-shmobile/board-kzm9g.c @@ -155,12 +155,14 @@ static int usbhs_get_vbus(struct platform_device *pdev)  	return !((1 << 7) & __raw_readw(priv->cr2));  } -static void usbhs_phy_reset(struct platform_device *pdev) +static int usbhs_phy_reset(struct platform_device *pdev)  {  	struct usbhs_private *priv = usbhs_get_priv(pdev);  	/* init phy */  	__raw_writew(0x8a0a, priv->cr2); + +	return 0;  }  static int usbhs_get_id(struct platform_device *pdev) @@ -202,7 +204,7 @@ static int usbhs_hardware_init(struct platform_device *pdev)  	return 0;  } -static void usbhs_hardware_exit(struct platform_device *pdev) +static int usbhs_hardware_exit(struct platform_device *pdev)  {  	struct usbhs_private *priv = usbhs_get_priv(pdev); @@ -210,6 +212,8 @@ static void usbhs_hardware_exit(struct platform_device *pdev)  	__raw_writew(USB_PHY_MODE | USB_PHY_INT_CLR, priv->phy);  	free_irq(IRQ15, pdev); + +	return 0;  }  static u32 usbhs_pipe_cfg[] = { diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c index db968a585ff..979237c18da 100644 --- a/arch/arm/mach-shmobile/board-mackerel.c +++ b/arch/arm/mach-shmobile/board-mackerel.c @@ -596,12 +596,14 @@ static int usbhs_get_vbus(struct platform_device *pdev)  	return usbhs_is_connected(usbhs_get_priv(pdev));  } -static void usbhs_phy_reset(struct platform_device *pdev) +static int usbhs_phy_reset(struct platform_device *pdev)  {  	struct usbhs_private *priv = usbhs_get_priv(pdev);  	/* init phy */  	__raw_writew(0x8a0a, priv->usbcrcaddr); + +	return 0;  }  static int usbhs0_get_id(struct platform_device *pdev) @@ -628,11 +630,13 @@ static int usbhs0_hardware_init(struct platform_device *pdev)  	return 0;  } -static void usbhs0_hardware_exit(struct platform_device *pdev) +static int usbhs0_hardware_exit(struct platform_device *pdev)  {  	struct usbhs_private *priv = usbhs_get_priv(pdev);  	cancel_delayed_work_sync(&priv->work); + +	return 0;  }  static struct usbhs_private usbhs0_private = { @@ -735,7 +739,7 @@ static int usbhs1_hardware_init(struct platform_device *pdev)  	return 0;  } -static void usbhs1_hardware_exit(struct platform_device *pdev) +static int usbhs1_hardware_exit(struct platform_device *pdev)  {  	struct usbhs_private *priv = usbhs_get_priv(pdev); @@ -743,6 +747,8 @@ static void usbhs1_hardware_exit(struct platform_device *pdev)  	__raw_writew(USB_PHY_MODE | USB_PHY_INT_CLR, priv->usbphyaddr);  	free_irq(IRQ8, pdev); + +	return 0;  }  static int usbhs1_get_id(struct platform_device *pdev) diff --git a/arch/arm/mach-shmobile/cpuidle.c b/arch/arm/mach-shmobile/cpuidle.c index 9e050268cde..0afeb5c7061 100644 --- a/arch/arm/mach-shmobile/cpuidle.c +++ b/arch/arm/mach-shmobile/cpuidle.c @@ -16,39 +16,22 @@  #include <asm/cpuidle.h>  #include <asm/io.h> -int shmobile_enter_wfi(struct cpuidle_device *dev, struct cpuidle_driver *drv, -		       int index) -{ -	cpu_do_idle(); -	return 0; -} - -static struct cpuidle_device shmobile_cpuidle_dev;  static struct cpuidle_driver shmobile_cpuidle_default_driver = {  	.name			= "shmobile_cpuidle",  	.owner			= THIS_MODULE, -	.en_core_tk_irqen	= 1,  	.states[0]		= ARM_CPUIDLE_WFI_STATE, -	.states[0].enter	= shmobile_enter_wfi,  	.safe_state_index	= 0, /* C1 */  	.state_count		= 1,  };  static struct cpuidle_driver *cpuidle_drv = &shmobile_cpuidle_default_driver; -void shmobile_cpuidle_set_driver(struct cpuidle_driver *drv) +void __init shmobile_cpuidle_set_driver(struct cpuidle_driver *drv)  {  	cpuidle_drv = drv;  } -int shmobile_cpuidle_init(void) +int __init shmobile_cpuidle_init(void)  { -	struct cpuidle_device *dev = &shmobile_cpuidle_dev; - -	cpuidle_register_driver(cpuidle_drv); - -	dev->state_count = cpuidle_drv->state_count; -	cpuidle_register_device(dev); - -	return 0; +	return cpuidle_register(cpuidle_drv, NULL);  } diff --git a/arch/arm/mach-shmobile/include/mach/common.h b/arch/arm/mach-shmobile/include/mach/common.h index 03f73def2fc..1fef737a4c1 100644 --- a/arch/arm/mach-shmobile/include/mach/common.h +++ b/arch/arm/mach-shmobile/include/mach/common.h @@ -14,9 +14,6 @@ extern int shmobile_clk_init(void);  extern void shmobile_handle_irq_intc(struct pt_regs *);  extern struct platform_suspend_ops shmobile_suspend_ops;  struct cpuidle_driver; -struct cpuidle_device; -extern int shmobile_enter_wfi(struct cpuidle_device *dev, -			      struct cpuidle_driver *drv, int index);  extern void shmobile_cpuidle_set_driver(struct cpuidle_driver *drv);  extern void sh7372_init_irq(void); diff --git a/arch/arm/mach-shmobile/pm-sh7372.c b/arch/arm/mach-shmobile/pm-sh7372.c index a0826a48dd0..dec9293bb90 100644 --- a/arch/arm/mach-shmobile/pm-sh7372.c +++ b/arch/arm/mach-shmobile/pm-sh7372.c @@ -410,11 +410,9 @@ static int sh7372_enter_a4s(struct cpuidle_device *dev,  static struct cpuidle_driver sh7372_cpuidle_driver = {  	.name			= "sh7372_cpuidle",  	.owner			= THIS_MODULE, -	.en_core_tk_irqen	= 1,  	.state_count		= 5,  	.safe_state_index	= 0, /* C1 */  	.states[0] = ARM_CPUIDLE_WFI_STATE, -	.states[0].enter = shmobile_enter_wfi,  	.states[1] = {  		.name = "C2",  		.desc = "Core Standby Mode", @@ -450,12 +448,12 @@ static struct cpuidle_driver sh7372_cpuidle_driver = {  	},  }; -static void sh7372_cpuidle_init(void) +static void __init sh7372_cpuidle_init(void)  {  	shmobile_cpuidle_set_driver(&sh7372_cpuidle_driver);  }  #else -static void sh7372_cpuidle_init(void) {} +static void __init sh7372_cpuidle_init(void) {}  #endif  #ifdef CONFIG_SUSPEND diff --git a/arch/arm/mach-shmobile/smp-emev2.c b/arch/arm/mach-shmobile/smp-emev2.c index 8225c16b371..e38691b4d0d 100644 --- a/arch/arm/mach-shmobile/smp-emev2.c +++ b/arch/arm/mach-shmobile/smp-emev2.c @@ -23,7 +23,6 @@  #include <linux/spinlock.h>  #include <linux/io.h>  #include <linux/delay.h> -#include <linux/irqchip/arm-gic.h>  #include <mach/common.h>  #include <mach/emev2.h>  #include <asm/smp_plat.h> @@ -31,11 +30,6 @@  #define EMEV2_SCU_BASE 0x1e000000 -static void __cpuinit emev2_secondary_init(unsigned int cpu) -{ -	gic_secondary_init(0); -} -  static int __cpuinit emev2_boot_secondary(unsigned int cpu, struct task_struct *idle)  {  	arch_send_wakeup_ipi_mask(cpumask_of(cpu_logical_map(cpu))); @@ -69,6 +63,5 @@ static void __init emev2_smp_init_cpus(void)  struct smp_operations emev2_smp_ops __initdata = {  	.smp_init_cpus		= emev2_smp_init_cpus,  	.smp_prepare_cpus	= emev2_smp_prepare_cpus, -	.smp_secondary_init	= emev2_secondary_init,  	.smp_boot_secondary	= emev2_boot_secondary,  }; diff --git a/arch/arm/mach-shmobile/smp-r8a7779.c b/arch/arm/mach-shmobile/smp-r8a7779.c index ea4535a5c4e..a853bf182ed 100644 --- a/arch/arm/mach-shmobile/smp-r8a7779.c +++ b/arch/arm/mach-shmobile/smp-r8a7779.c @@ -23,7 +23,6 @@  #include <linux/spinlock.h>  #include <linux/io.h>  #include <linux/delay.h> -#include <linux/irqchip/arm-gic.h>  #include <mach/common.h>  #include <mach/r8a7779.h>  #include <asm/cacheflush.h> @@ -82,11 +81,6 @@ static int r8a7779_platform_cpu_kill(unsigned int cpu)  	return ret ? ret : 1;  } -static void __cpuinit r8a7779_secondary_init(unsigned int cpu) -{ -	gic_secondary_init(0); -} -  static int __cpuinit r8a7779_boot_secondary(unsigned int cpu, struct task_struct *idle)  {  	struct r8a7779_pm_ch *ch = NULL; @@ -181,7 +175,6 @@ static int r8a7779_cpu_disable(unsigned int cpu)  struct smp_operations r8a7779_smp_ops  __initdata = {  	.smp_init_cpus		= r8a7779_smp_init_cpus,  	.smp_prepare_cpus	= r8a7779_smp_prepare_cpus, -	.smp_secondary_init	= r8a7779_secondary_init,  	.smp_boot_secondary	= r8a7779_boot_secondary,  #ifdef CONFIG_HOTPLUG_CPU  	.cpu_kill		= r8a7779_cpu_kill, diff --git a/arch/arm/mach-shmobile/smp-sh73a0.c b/arch/arm/mach-shmobile/smp-sh73a0.c index 5ae502b1643..496592b6c76 100644 --- a/arch/arm/mach-shmobile/smp-sh73a0.c +++ b/arch/arm/mach-shmobile/smp-sh73a0.c @@ -23,7 +23,6 @@  #include <linux/spinlock.h>  #include <linux/io.h>  #include <linux/delay.h> -#include <linux/irqchip/arm-gic.h>  #include <mach/common.h>  #include <asm/cacheflush.h>  #include <asm/smp_plat.h> @@ -49,11 +48,6 @@ void __init sh73a0_register_twd(void)  }  #endif -static void __cpuinit sh73a0_secondary_init(unsigned int cpu) -{ -	gic_secondary_init(0); -} -  static int __cpuinit sh73a0_boot_secondary(unsigned int cpu, struct task_struct *idle)  {  	cpu = cpu_logical_map(cpu); @@ -110,14 +104,6 @@ static int sh73a0_cpu_kill(unsigned int cpu)  static void sh73a0_cpu_die(unsigned int cpu)  { -	/* -	 * The ARM MPcore does not issue a cache coherency request for the L1 -	 * cache when powering off single CPUs. We must take care of this and -	 * further caches. -	 */ -	dsb(); -	flush_cache_all(); -  	/* Set power off mode. This takes the CPU out of the MP cluster */  	scu_power_mode(shmobile_scu_base, SCU_PM_POWEROFF); @@ -134,7 +120,6 @@ static int sh73a0_cpu_disable(unsigned int cpu)  struct smp_operations sh73a0_smp_ops __initdata = {  	.smp_init_cpus		= sh73a0_smp_init_cpus,  	.smp_prepare_cpus	= sh73a0_smp_prepare_cpus, -	.smp_secondary_init	= sh73a0_secondary_init,  	.smp_boot_secondary	= sh73a0_boot_secondary,  #ifdef CONFIG_HOTPLUG_CPU  	.cpu_kill		= sh73a0_cpu_kill, diff --git a/arch/arm/mach-shmobile/suspend.c b/arch/arm/mach-shmobile/suspend.c index 47d83f7a70b..5d92b5dd486 100644 --- a/arch/arm/mach-shmobile/suspend.c +++ b/arch/arm/mach-shmobile/suspend.c @@ -12,6 +12,8 @@  #include <linux/suspend.h>  #include <linux/module.h>  #include <linux/err.h> +#include <linux/cpu.h> +  #include <asm/io.h>  #include <asm/system_misc.h> @@ -23,13 +25,13 @@ static int shmobile_suspend_default_enter(suspend_state_t suspend_state)  static int shmobile_suspend_begin(suspend_state_t state)  { -	disable_hlt(); +	cpu_idle_poll_ctrl(true);  	return 0;  }  static void shmobile_suspend_end(void)  { -	enable_hlt(); +	cpu_idle_poll_ctrl(false);  }  struct platform_suspend_ops shmobile_suspend_ops = { diff --git a/arch/arm/mach-socfpga/core.h b/arch/arm/mach-socfpga/core.h index 315edff610f..572b8f719ff 100644 --- a/arch/arm/mach-socfpga/core.h +++ b/arch/arm/mach-socfpga/core.h @@ -20,12 +20,23 @@  #ifndef __MACH_CORE_H  #define __MACH_CORE_H +#define SOCFPGA_RSTMGR_CTRL	0x04 +#define SOCFPGA_RSTMGR_MODPERRST	0x14 +#define SOCFPGA_RSTMGR_BRGMODRST	0x1c + +/* System Manager bits */ +#define RSTMGR_CTRL_SWCOLDRSTREQ	0x1	/* Cold Reset */ +#define RSTMGR_CTRL_SWWARMRSTREQ	0x2	/* Warm Reset */ +  extern void socfpga_secondary_startup(void);  extern void __iomem *socfpga_scu_base_addr;  extern void socfpga_init_clocks(void);  extern void socfpga_sysmgr_init(void); +extern void __iomem *sys_manager_base_addr; +extern void __iomem *rst_manager_base_addr; +  extern struct smp_operations socfpga_smp_ops;  extern char secondary_trampoline, secondary_trampoline_end; diff --git a/arch/arm/mach-socfpga/platsmp.c b/arch/arm/mach-socfpga/platsmp.c index 84c60fa8daa..b51ce8c7929 100644 --- a/arch/arm/mach-socfpga/platsmp.c +++ b/arch/arm/mach-socfpga/platsmp.c @@ -22,7 +22,6 @@  #include <linux/io.h>  #include <linux/of.h>  #include <linux/of_address.h> -#include <linux/irqchip/arm-gic.h>  #include <asm/cacheflush.h>  #include <asm/smp_scu.h> @@ -30,19 +29,6 @@  #include "core.h" -extern void __iomem *sys_manager_base_addr; -extern void __iomem *rst_manager_base_addr; - -static void __cpuinit socfpga_secondary_init(unsigned int cpu) -{ -	/* -	 * 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); -} -  static int __cpuinit socfpga_boot_secondary(unsigned int cpu, struct task_struct *idle)  {  	int trampoline_size = &secondary_trampoline_end - &secondary_trampoline; @@ -109,7 +95,6 @@ static void socfpga_cpu_die(unsigned int cpu)  struct smp_operations socfpga_smp_ops __initdata = {  	.smp_init_cpus		= socfpga_smp_init_cpus,  	.smp_prepare_cpus	= socfpga_smp_prepare_cpus, -	.smp_secondary_init	= socfpga_secondary_init,  	.smp_boot_secondary	= socfpga_boot_secondary,  #ifdef CONFIG_HOTPLUG_CPU  	.cpu_die		= socfpga_cpu_die, diff --git a/arch/arm/mach-socfpga/socfpga.c b/arch/arm/mach-socfpga/socfpga.c index 1042c023cf2..46a051359f0 100644 --- a/arch/arm/mach-socfpga/socfpga.c +++ b/arch/arm/mach-socfpga/socfpga.c @@ -15,6 +15,7 @@   * along with this program.  If not, see <http://www.gnu.org/licenses/>.   */  #include <linux/dw_apb_timer.h> +#include <linux/clk-provider.h>  #include <linux/irqchip.h>  #include <linux/of_address.h>  #include <linux/of_irq.h> @@ -29,6 +30,7 @@  void __iomem *socfpga_scu_base_addr = ((void __iomem *)(SOCFPGA_SCU_VIRT_BASE));  void __iomem *sys_manager_base_addr;  void __iomem *rst_manager_base_addr; +void __iomem *clk_mgr_base_addr;  unsigned long cpu1start_addr;  static struct map_desc scu_io_desc __initdata = { @@ -77,6 +79,9 @@ void __init socfpga_sysmgr_init(void)  	np = of_find_compatible_node(NULL, NULL, "altr,rst-mgr");  	rst_manager_base_addr = of_iomap(np, 0); + +	np = of_find_compatible_node(NULL, NULL, "altr,clk-mgr"); +	clk_mgr_base_addr = of_iomap(np, 0);  }  static void __init socfpga_init_irq(void) @@ -87,13 +92,22 @@ static void __init socfpga_init_irq(void)  static void socfpga_cyclone5_restart(char mode, const char *cmd)  { -	/* TODO: */ +	u32 temp; + +	temp = readl(rst_manager_base_addr + SOCFPGA_RSTMGR_CTRL); + +	if (mode == 'h') +		temp |= RSTMGR_CTRL_SWCOLDRSTREQ; +	else +		temp |= RSTMGR_CTRL_SWWARMRSTREQ; +	writel(temp, rst_manager_base_addr + SOCFPGA_RSTMGR_CTRL);  }  static void __init socfpga_cyclone5_init(void)  {  	l2x0_of_init(0, ~0UL);  	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); +	of_clk_init(NULL);  	socfpga_init_clocks();  } diff --git a/arch/arm/mach-spear/Kconfig b/arch/arm/mach-spear/Kconfig new file mode 100644 index 00000000000..442917eedff --- /dev/null +++ b/arch/arm/mach-spear/Kconfig @@ -0,0 +1,105 @@ +# +# SPEAr Platform configuration file +# + +menuconfig PLAT_SPEAR +	bool "ST SPEAr Family" if ARCH_MULTI_V7 || ARCH_MULTI_V5 +	default PLAT_SPEAR_SINGLE +	select ARCH_REQUIRE_GPIOLIB +	select ARM_AMBA +	select CLKDEV_LOOKUP +	select CLKSRC_MMIO +	select COMMON_CLK +	select GENERIC_CLOCKEVENTS +	select HAVE_CLK + +if PLAT_SPEAR + +config ARCH_SPEAR13XX +	bool "ST SPEAr13xx" +	depends on ARCH_MULTI_V7 || PLAT_SPEAR_SINGLE +	select ARCH_HAS_CPUFREQ +	select ARM_GIC +	select CPU_V7 +	select GPIO_SPEAR_SPICS +	select HAVE_ARM_SCU if SMP +	select HAVE_ARM_TWD if LOCAL_TIMERS +	select HAVE_SMP +	select MIGHT_HAVE_CACHE_L2X0 +	select PINCTRL +	select USE_OF +	help +	  Supports for ARM's SPEAR13XX family + +if ARCH_SPEAR13XX + +config MACH_SPEAR1310 +	bool "SPEAr1310 Machine support with Device Tree" +	select PINCTRL_SPEAR1310 +	help +	  Supports ST SPEAr1310 machine configured via the device-tree + +config MACH_SPEAR1340 +	bool "SPEAr1340 Machine support with Device Tree" +	select PINCTRL_SPEAR1340 +	help +	  Supports ST SPEAr1340 machine configured via the device-tree + +endif #ARCH_SPEAR13XX + +config ARCH_SPEAR3XX +	bool "ST SPEAr3xx" +	depends on ARCH_MULTI_V5 || PLAT_SPEAR_SINGLE +	depends on !ARCH_SPEAR13XX +	select ARM_VIC +	select CPU_ARM926T +	select PINCTRL +	select USE_OF +	help +	  Supports for ARM's SPEAR3XX family + +if ARCH_SPEAR3XX + +config MACH_SPEAR300 +	bool "SPEAr300 Machine support with Device Tree" +	select PINCTRL_SPEAR300 +	help +	  Supports ST SPEAr300 machine configured via the device-tree + +config MACH_SPEAR310 +	bool "SPEAr310 Machine support with Device Tree" +	select PINCTRL_SPEAR310 +	help +	  Supports ST SPEAr310 machine configured via the device-tree + +config MACH_SPEAR320 +	bool "SPEAr320 Machine support with Device Tree" +	select PINCTRL_SPEAR320 +	help +	  Supports ST SPEAr320 machine configured via the device-tree + +endif + +config ARCH_SPEAR6XX +	bool "ST SPEAr6XX" +	depends on ARCH_MULTI_V5 || PLAT_SPEAR_SINGLE +	depends on !ARCH_SPEAR13XX +	select ARM_VIC +	select CPU_ARM926T +	help +	  Supports for ARM's SPEAR6XX family + +config MACH_SPEAR600 +	def_bool y +	depends on ARCH_SPEAR6XX +	select USE_OF +	help +	  Supports ST SPEAr600 boards configured via the device-treesource "arch/arm/mach-spear6xx/Kconfig" + +config ARCH_SPEAR_AUTO +	def_bool PLAT_SPEAR_SINGLE +	depends on !ARCH_SPEAR13XX && !ARCH_SPEAR6XX +	select ARCH_SPEAR3XX + +endif + diff --git a/arch/arm/mach-spear/Makefile b/arch/arm/mach-spear/Makefile new file mode 100644 index 00000000000..af9bffb94f1 --- /dev/null +++ b/arch/arm/mach-spear/Makefile @@ -0,0 +1,26 @@ +# +# SPEAr Platform specific Makefile +# + +ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include + +# Common support +obj-y	:= restart.o time.o + +obj-$(CONFIG_SMP)		+= headsmp.o platsmp.o +obj-$(CONFIG_HOTPLUG_CPU)	+= hotplug.o + +obj-$(CONFIG_ARCH_SPEAR13XX)	+= spear13xx.o +obj-$(CONFIG_MACH_SPEAR1310)	+= spear1310.o +obj-$(CONFIG_MACH_SPEAR1340)	+= spear1340.o + +obj-$(CONFIG_ARCH_SPEAR3XX)	+= spear3xx.o +obj-$(CONFIG_ARCH_SPEAR3XX)	+= pl080.o +obj-$(CONFIG_MACH_SPEAR300)	+= spear300.o +obj-$(CONFIG_MACH_SPEAR310)	+= spear310.o +obj-$(CONFIG_MACH_SPEAR320)	+= spear320.o + +obj-$(CONFIG_ARCH_SPEAR6XX)	+= spear6xx.o +obj-$(CONFIG_ARCH_SPEAR6XX)	+= pl080.o + +CFLAGS_hotplug.o		+= -march=armv7-a diff --git a/arch/arm/mach-spear13xx/Makefile.boot b/arch/arm/mach-spear/Makefile.boot index 4674a4c221d..4674a4c221d 100644 --- a/arch/arm/mach-spear13xx/Makefile.boot +++ b/arch/arm/mach-spear/Makefile.boot diff --git a/arch/arm/mach-spear13xx/include/mach/generic.h b/arch/arm/mach-spear/generic.h index 633e678e01a..8ba7e75b648 100644 --- a/arch/arm/mach-spear13xx/include/mach/generic.h +++ b/arch/arm/mach-spear/generic.h @@ -1,9 +1,8 @@  /* - * arch/arm/mach-spear13xx/include/mach/generic.h + * spear machine family generic header file   * - * spear13xx machine family generic header file - * - * Copyright (C) 2012 ST Microelectronics + * Copyright (C) 2009-2012 ST Microelectronics + * Rajeev Kumar <rajeev-dlh.kumar@st.com>   * Viresh Kumar <viresh.linux@gmail.com>   *   * This file is licensed under the terms of the GNU General Public @@ -15,37 +14,46 @@  #define __MACH_GENERIC_H  #include <linux/dmaengine.h> +#include <linux/amba/pl08x.h> +#include <linux/init.h>  #include <asm/mach/time.h> -/* Add spear13xx structure declarations here */  extern void spear13xx_timer_init(void); +extern void spear3xx_timer_init(void);  extern struct pl022_ssp_controller pl022_plat_data; +extern struct pl08x_platform_data pl080_plat_data;  extern struct dw_dma_platform_data dmac_plat_data;  extern struct dw_dma_slave cf_dma_priv;  extern struct dw_dma_slave nand_read_dma_priv;  extern struct dw_dma_slave nand_write_dma_priv; +bool dw_dma_filter(struct dma_chan *chan, void *slave); -/* Add spear13xx family function declarations here */  void __init spear_setup_of_timer(void); +void __init spear3xx_clk_init(void __iomem *misc_base, +			      void __iomem *soc_config_base); +void __init spear3xx_map_io(void); +void __init spear3xx_dt_init_irq(void); +void __init spear6xx_clk_init(void __iomem *misc_base);  void __init spear13xx_map_io(void);  void __init spear13xx_l2x0_init(void); -bool dw_dma_filter(struct dma_chan *chan, void *slave); +  void spear_restart(char, const char *); +  void spear13xx_secondary_startup(void);  void __cpuinit spear13xx_cpu_die(unsigned int cpu);  extern struct smp_operations spear13xx_smp_ops;  #ifdef CONFIG_MACH_SPEAR1310 -void __init spear1310_clk_init(void); +void __init spear1310_clk_init(void __iomem *misc_base, void __iomem *ras_base);  #else -static inline void spear1310_clk_init(void) {} +static inline void spear1310_clk_init(void __iomem *misc_base, void __iomem *ras_base) {}  #endif  #ifdef CONFIG_MACH_SPEAR1340 -void __init spear1340_clk_init(void); +void __init spear1340_clk_init(void __iomem *misc_base);  #else -static inline void spear1340_clk_init(void) {} +static inline void spear1340_clk_init(void __iomem *misc_base) {}  #endif  #endif /* __MACH_GENERIC_H */ diff --git a/arch/arm/mach-spear13xx/headsmp.S b/arch/arm/mach-spear/headsmp.S index ed85473a047..ed85473a047 100644 --- a/arch/arm/mach-spear13xx/headsmp.S +++ b/arch/arm/mach-spear/headsmp.S diff --git a/arch/arm/mach-spear13xx/hotplug.c b/arch/arm/mach-spear/hotplug.c index a7d2dd11a4f..d97749c642c 100644 --- a/arch/arm/mach-spear13xx/hotplug.c +++ b/arch/arm/mach-spear/hotplug.c @@ -13,7 +13,6 @@  #include <linux/kernel.h>  #include <linux/errno.h>  #include <linux/smp.h> -#include <asm/cacheflush.h>  #include <asm/cp15.h>  #include <asm/smp_plat.h> @@ -21,7 +20,6 @@ static inline void cpu_enter_lowpower(void)  {  	unsigned int v; -	flush_cache_all();  	asm volatile(  	"	mcr	p15, 0, %1, c7, c5, 0\n"  	"	dsb\n" diff --git a/arch/arm/plat-spear/include/plat/debug-macro.S b/arch/arm/mach-spear/include/mach/debug-macro.S index 75b05ad0fba..75b05ad0fba 100644 --- a/arch/arm/plat-spear/include/plat/debug-macro.S +++ b/arch/arm/mach-spear/include/mach/debug-macro.S diff --git a/arch/arm/mach-spear6xx/include/mach/irqs.h b/arch/arm/mach-spear/include/mach/irqs.h index 37a5c411a86..92da0a8c6bc 100644 --- a/arch/arm/mach-spear6xx/include/mach/irqs.h +++ b/arch/arm/mach-spear/include/mach/irqs.h @@ -1,10 +1,9 @@  /* - * arch/arm/mach-spear6xx/include/mach/irqs.h + * IRQ helper macros for spear machine family   * - * IRQ helper macros for SPEAr6xx machine family - * - * Copyright (C) 2009 ST Microelectronics - * Rajeev Kumar<rajeev-dlh.kumar@st.com> + * Copyright (C) 2009-2012 ST Microelectronics + * Rajeev Kumar <rajeev-dlh.kumar@st.com> + * Viresh Kumar <viresh.linux@gmail.com>   *   * This file is licensed under the terms of the GNU General Public   * License version 2. This program is licensed "as is" without any @@ -14,6 +13,11 @@  #ifndef __MACH_IRQS_H  #define __MACH_IRQS_H +#ifdef CONFIG_ARCH_SPEAR3XX +#define NR_IRQS			256 +#endif + +#ifdef CONFIG_ARCH_SPEAR6XX  /* IRQ definitions */  /* VIC 1 */  #define IRQ_VIC_END				64 @@ -21,5 +25,11 @@  /* GPIO pins virtual irqs */  #define VIRTUAL_IRQS				24  #define NR_IRQS					(IRQ_VIC_END + VIRTUAL_IRQS) +#endif + +#ifdef CONFIG_ARCH_SPEAR13XX +#define IRQ_GIC_END			160 +#define NR_IRQS				IRQ_GIC_END +#endif -#endif	/* __MACH_IRQS_H */ +#endif /* __MACH_IRQS_H */ diff --git a/arch/arm/mach-spear3xx/include/mach/misc_regs.h b/arch/arm/mach-spear/include/mach/misc_regs.h index 6309bf68d6f..935639ce59b 100644 --- a/arch/arm/mach-spear3xx/include/mach/misc_regs.h +++ b/arch/arm/mach-spear/include/mach/misc_regs.h @@ -16,7 +16,7 @@  #include <mach/spear.h> -#define MISC_BASE		IOMEM(VA_SPEAR3XX_ICM3_MISC_REG_BASE) +#define MISC_BASE		(VA_SPEAR_ICM3_MISC_REG_BASE)  #define DMA_CHN_CFG		(MISC_BASE + 0x0A0)  #endif /* __MACH_MISC_REGS_H */ diff --git a/arch/arm/mach-spear/include/mach/spear.h b/arch/arm/mach-spear/include/mach/spear.h new file mode 100644 index 00000000000..374ddc393df --- /dev/null +++ b/arch/arm/mach-spear/include/mach/spear.h @@ -0,0 +1,95 @@ +/* + * SPEAr3xx/6xx Machine family specific definition + * + * Copyright (C) 2009,2012 ST Microelectronics + * Rajeev Kumar<rajeev-dlh.kumar@st.com> + * Viresh Kumar <viresh.linux@gmail.com> + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + */ + +#ifndef __MACH_SPEAR_H +#define __MACH_SPEAR_H + +#include <asm/memory.h> + +#if defined(CONFIG_ARCH_SPEAR3XX) || defined (CONFIG_ARCH_SPEAR6XX) + +/* ICM1 - Low speed connection */ +#define SPEAR_ICM1_2_BASE		UL(0xD0000000) +#define VA_SPEAR_ICM1_2_BASE		IOMEM(0xFD000000) +#define SPEAR_ICM1_UART_BASE		UL(0xD0000000) +#define VA_SPEAR_ICM1_UART_BASE		(VA_SPEAR_ICM1_2_BASE - SPEAR_ICM1_2_BASE + SPEAR_ICM1_UART_BASE) +#define SPEAR3XX_ICM1_SSP_BASE		UL(0xD0100000) + +/* ML-1, 2 - Multi Layer CPU Subsystem */ +#define SPEAR_ICM3_ML1_2_BASE		UL(0xF0000000) +#define VA_SPEAR6XX_ML_CPU_BASE		IOMEM(0xF0000000) + +/* ICM3 - Basic Subsystem */ +#define SPEAR_ICM3_SMI_CTRL_BASE	UL(0xFC000000) +#define VA_SPEAR_ICM3_SMI_CTRL_BASE	IOMEM(0xFC000000) +#define SPEAR_ICM3_DMA_BASE		UL(0xFC400000) +#define SPEAR_ICM3_SYS_CTRL_BASE	UL(0xFCA00000) +#define VA_SPEAR_ICM3_SYS_CTRL_BASE	(VA_SPEAR_ICM3_SMI_CTRL_BASE - SPEAR_ICM3_SMI_CTRL_BASE + SPEAR_ICM3_SYS_CTRL_BASE) +#define SPEAR_ICM3_MISC_REG_BASE	UL(0xFCA80000) +#define VA_SPEAR_ICM3_MISC_REG_BASE	(VA_SPEAR_ICM3_SMI_CTRL_BASE - SPEAR_ICM3_SMI_CTRL_BASE + SPEAR_ICM3_MISC_REG_BASE) + +/* Debug uart for linux, will be used for debug and uncompress messages */ +#define SPEAR_DBG_UART_BASE		SPEAR_ICM1_UART_BASE +#define VA_SPEAR_DBG_UART_BASE		VA_SPEAR_ICM1_UART_BASE + +/* Sysctl base for spear platform */ +#define SPEAR_SYS_CTRL_BASE		SPEAR_ICM3_SYS_CTRL_BASE +#define VA_SPEAR_SYS_CTRL_BASE		VA_SPEAR_ICM3_SYS_CTRL_BASE +#endif /* SPEAR3xx || SPEAR6XX */ + +/* SPEAr320 Macros */ +#define SPEAR320_SOC_CONFIG_BASE	UL(0xB3000000) +#define VA_SPEAR320_SOC_CONFIG_BASE	IOMEM(0xFE000000) + +#ifdef CONFIG_ARCH_SPEAR13XX + +#define PERIP_GRP2_BASE				UL(0xB3000000) +#define VA_PERIP_GRP2_BASE			IOMEM(0xFE000000) +#define MCIF_SDHCI_BASE				UL(0xB3000000) +#define SYSRAM0_BASE				UL(0xB3800000) +#define VA_SYSRAM0_BASE				IOMEM(0xFE800000) +#define SYS_LOCATION				(VA_SYSRAM0_BASE + 0x600) + +#define PERIP_GRP1_BASE				UL(0xE0000000) +#define VA_PERIP_GRP1_BASE			IOMEM(0xFD000000) +#define UART_BASE				UL(0xE0000000) +#define VA_UART_BASE				IOMEM(0xFD000000) +#define SSP_BASE				UL(0xE0100000) +#define MISC_BASE				UL(0xE0700000) +#define VA_MISC_BASE				IOMEM(0xFD700000) + +#define A9SM_AND_MPMC_BASE			UL(0xEC000000) +#define VA_A9SM_AND_MPMC_BASE			IOMEM(0xFC000000) + +#define SPEAR1310_RAS_BASE			UL(0xD8400000) +#define VA_SPEAR1310_RAS_BASE			IOMEM(UL(0xFA400000)) + +/* A9SM peripheral offsets */ +#define A9SM_PERIP_BASE				UL(0xEC800000) +#define VA_A9SM_PERIP_BASE			IOMEM(0xFC800000) +#define VA_SCU_BASE				(VA_A9SM_PERIP_BASE + 0x00) + +#define L2CC_BASE				UL(0xED000000) +#define VA_L2CC_BASE				IOMEM(UL(0xFB000000)) + +/* others */ +#define DMAC0_BASE				UL(0xEA800000) +#define DMAC1_BASE				UL(0xEB000000) +#define MCIF_CF_BASE				UL(0xB2800000) + +/* Debug uart for linux, will be used for debug and uncompress messages */ +#define SPEAR_DBG_UART_BASE			UART_BASE +#define VA_SPEAR_DBG_UART_BASE			VA_UART_BASE + +#endif /* SPEAR13XX */ + +#endif /* __MACH_SPEAR_H */ diff --git a/arch/arm/plat-spear/include/plat/timex.h b/arch/arm/mach-spear/include/mach/timex.h index ef95e5b780b..ef95e5b780b 100644 --- a/arch/arm/plat-spear/include/plat/timex.h +++ b/arch/arm/mach-spear/include/mach/timex.h diff --git a/arch/arm/plat-spear/include/plat/uncompress.h b/arch/arm/mach-spear/include/mach/uncompress.h index 51b2dc93e4d..51b2dc93e4d 100644 --- a/arch/arm/plat-spear/include/plat/uncompress.h +++ b/arch/arm/mach-spear/include/mach/uncompress.h diff --git a/arch/arm/plat-spear/pl080.c b/arch/arm/mach-spear/pl080.c index cfa1199d0f4..cfa1199d0f4 100644 --- a/arch/arm/plat-spear/pl080.c +++ b/arch/arm/mach-spear/pl080.c diff --git a/arch/arm/plat-spear/include/plat/pl080.h b/arch/arm/mach-spear/pl080.h index eb6590ded40..eb6590ded40 100644 --- a/arch/arm/plat-spear/include/plat/pl080.h +++ b/arch/arm/mach-spear/pl080.h diff --git a/arch/arm/mach-spear13xx/platsmp.c b/arch/arm/mach-spear/platsmp.c index af4ade61cd9..9c4c722c954 100644 --- a/arch/arm/mach-spear13xx/platsmp.c +++ b/arch/arm/mach-spear/platsmp.c @@ -15,11 +15,10 @@  #include <linux/jiffies.h>  #include <linux/io.h>  #include <linux/smp.h> -#include <linux/irqchip/arm-gic.h>  #include <asm/cacheflush.h>  #include <asm/smp_scu.h>  #include <mach/spear.h> -#include <mach/generic.h> +#include "generic.h"  static DEFINE_SPINLOCK(boot_lock); @@ -28,13 +27,6 @@ static void __iomem *scu_base = IOMEM(VA_SCU_BASE);  static void __cpuinit spear13xx_secondary_init(unsigned int cpu)  {  	/* -	 * 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); - -	/*  	 * let the primary processor know we're out of the  	 * pen, then head off into the C entry point  	 */ diff --git a/arch/arm/plat-spear/restart.c b/arch/arm/mach-spear/restart.c index 7d4616d5df1..2b44500bb71 100644 --- a/arch/arm/plat-spear/restart.c +++ b/arch/arm/mach-spear/restart.c @@ -14,7 +14,7 @@  #include <linux/amba/sp810.h>  #include <asm/system_misc.h>  #include <mach/spear.h> -#include <mach/generic.h> +#include "generic.h"  #define SPEAR13XX_SYS_SW_RES			(VA_MISC_BASE + 0x204)  void spear_restart(char mode, const char *cmd) @@ -26,7 +26,8 @@ void spear_restart(char mode, const char *cmd)  		/* hardware reset, Use on-chip reset capability */  #ifdef CONFIG_ARCH_SPEAR13XX  		writel_relaxed(0x01, SPEAR13XX_SYS_SW_RES); -#else +#endif +#if defined(CONFIG_ARCH_SPEAR3XX) || defined(CONFIG_ARCH_SPEAR6XX)  		sysctl_soft_reset((void __iomem *)VA_SPEAR_SYS_CTRL_BASE);  #endif  	} diff --git a/arch/arm/mach-spear13xx/spear1310.c b/arch/arm/mach-spear/spear1310.c index 56214d1076e..ed3b5c287a7 100644 --- a/arch/arm/mach-spear13xx/spear1310.c +++ b/arch/arm/mach-spear/spear1310.c @@ -19,7 +19,7 @@  #include <linux/pata_arasan_cf_data.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> -#include <mach/generic.h> +#include "generic.h"  #include <mach/spear.h>  /* Base addresses */ @@ -30,8 +30,6 @@  #define SPEAR1310_RAS_GRP1_BASE			UL(0xD8000000)  #define VA_SPEAR1310_RAS_GRP1_BASE		UL(0xFA000000) -#define SPEAR1310_RAS_BASE			UL(0xD8400000) -#define VA_SPEAR1310_RAS_BASE			IOMEM(UL(0xFA400000))  static struct arasan_cf_pdata cf_pdata = {  	.cf_if_clk = CF_IF_CLK_166M, diff --git a/arch/arm/mach-spear13xx/spear1340.c b/arch/arm/mach-spear/spear1340.c index 9a28beb2a11..75e38644bbf 100644 --- a/arch/arm/mach-spear13xx/spear1340.c +++ b/arch/arm/mach-spear/spear1340.c @@ -20,10 +20,11 @@  #include <linux/of_platform.h>  #include <linux/irqchip.h>  #include <asm/mach/arch.h> -#include <mach/dma.h> -#include <mach/generic.h> +#include "generic.h"  #include <mach/spear.h> +#include "spear13xx-dma.h" +  /* Base addresses */  #define SPEAR1340_SATA_BASE			UL(0xB1000000)  #define SPEAR1340_UART1_BASE			UL(0xB4100000) diff --git a/arch/arm/mach-spear13xx/include/mach/dma.h b/arch/arm/mach-spear/spear13xx-dma.h index d50bdb60592..d50bdb60592 100644 --- a/arch/arm/mach-spear13xx/include/mach/dma.h +++ b/arch/arm/mach-spear/spear13xx-dma.h diff --git a/arch/arm/mach-spear13xx/spear13xx.c b/arch/arm/mach-spear/spear13xx.c index 25a10191b02..6dd20899717 100644 --- a/arch/arm/mach-spear13xx/spear13xx.c +++ b/arch/arm/mach-spear/spear13xx.c @@ -21,10 +21,11 @@  #include <linux/of.h>  #include <asm/hardware/cache-l2x0.h>  #include <asm/mach/map.h> -#include <mach/dma.h> -#include <mach/generic.h> +#include "generic.h"  #include <mach/spear.h> +#include "spear13xx-dma.h" +  /* common dw_dma filter routine to be used by peripherals */  bool dw_dma_filter(struct dma_chan *chan, void *slave)  { @@ -145,9 +146,9 @@ void __init spear13xx_map_io(void)  static void __init spear13xx_clk_init(void)  {  	if (of_machine_is_compatible("st,spear1310")) -		spear1310_clk_init(); +		spear1310_clk_init(VA_MISC_BASE, VA_SPEAR1310_RAS_BASE);  	else if (of_machine_is_compatible("st,spear1340")) -		spear1340_clk_init(); +		spear1340_clk_init(VA_MISC_BASE);  	else  		pr_err("%s: Unknown machine\n", __func__);  } diff --git a/arch/arm/mach-spear3xx/spear300.c b/arch/arm/mach-spear/spear300.c index bbc9b7e9c62..bac56e845f7 100644 --- a/arch/arm/mach-spear3xx/spear300.c +++ b/arch/arm/mach-spear/spear300.c @@ -17,7 +17,7 @@  #include <linux/irqchip.h>  #include <linux/of_platform.h>  #include <asm/mach/arch.h> -#include <mach/generic.h> +#include "generic.h"  #include <mach/spear.h>  /* DMAC platform data's slave info */ @@ -185,7 +185,7 @@ struct pl08x_channel_data spear300_dma_info[] = {  static struct of_dev_auxdata spear300_auxdata_lookup[] __initdata = {  	OF_DEV_AUXDATA("arm,pl022", SPEAR3XX_ICM1_SSP_BASE, NULL,  			&pl022_plat_data), -	OF_DEV_AUXDATA("arm,pl080", SPEAR3XX_ICM3_DMA_BASE, NULL, +	OF_DEV_AUXDATA("arm,pl080", SPEAR_ICM3_DMA_BASE, NULL,  			&pl080_plat_data),  	{}  }; diff --git a/arch/arm/mach-spear3xx/spear310.c b/arch/arm/mach-spear/spear310.c index c13a434a819..6ffbc63d516 100644 --- a/arch/arm/mach-spear3xx/spear310.c +++ b/arch/arm/mach-spear/spear310.c @@ -18,7 +18,7 @@  #include <linux/irqchip.h>  #include <linux/of_platform.h>  #include <asm/mach/arch.h> -#include <mach/generic.h> +#include "generic.h"  #include <mach/spear.h>  #define SPEAR310_UART1_BASE		UL(0xB2000000) @@ -217,7 +217,7 @@ static struct amba_pl011_data spear310_uart_data[] = {  static struct of_dev_auxdata spear310_auxdata_lookup[] __initdata = {  	OF_DEV_AUXDATA("arm,pl022", SPEAR3XX_ICM1_SSP_BASE, NULL,  			&pl022_plat_data), -	OF_DEV_AUXDATA("arm,pl080", SPEAR3XX_ICM3_DMA_BASE, NULL, +	OF_DEV_AUXDATA("arm,pl080", SPEAR_ICM3_DMA_BASE, NULL,  			&pl080_plat_data),  	OF_DEV_AUXDATA("arm,pl011", SPEAR310_UART1_BASE, NULL,  			&spear310_uart_data[0]), diff --git a/arch/arm/mach-spear3xx/spear320.c b/arch/arm/mach-spear/spear320.c index e1c77079a3e..6eb3eec65f9 100644 --- a/arch/arm/mach-spear3xx/spear320.c +++ b/arch/arm/mach-spear/spear320.c @@ -19,7 +19,8 @@  #include <linux/irqchip.h>  #include <linux/of_platform.h>  #include <asm/mach/arch.h> -#include <mach/generic.h> +#include <asm/mach/map.h> +#include "generic.h"  #include <mach/spear.h>  #define SPEAR320_UART1_BASE		UL(0xA3000000) @@ -222,7 +223,7 @@ static struct amba_pl011_data spear320_uart_data[] = {  static struct of_dev_auxdata spear320_auxdata_lookup[] __initdata = {  	OF_DEV_AUXDATA("arm,pl022", SPEAR3XX_ICM1_SSP_BASE, NULL,  			&pl022_plat_data), -	OF_DEV_AUXDATA("arm,pl080", SPEAR3XX_ICM3_DMA_BASE, NULL, +	OF_DEV_AUXDATA("arm,pl080", SPEAR_ICM3_DMA_BASE, NULL,  			&pl080_plat_data),  	OF_DEV_AUXDATA("arm,pl022", SPEAR320_SSP0_BASE, NULL,  			&spear320_ssp_data[0]), @@ -253,7 +254,7 @@ static const char * const spear320_dt_board_compat[] = {  struct map_desc spear320_io_desc[] __initdata = {  	{ -		.virtual	= VA_SPEAR320_SOC_CONFIG_BASE, +		.virtual	= (unsigned long)VA_SPEAR320_SOC_CONFIG_BASE,  		.pfn		= __phys_to_pfn(SPEAR320_SOC_CONFIG_BASE),  		.length		= SZ_16M,  		.type		= MT_DEVICE diff --git a/arch/arm/mach-spear3xx/spear3xx.c b/arch/arm/mach-spear/spear3xx.c index d2b3937c401..0227c97797c 100644 --- a/arch/arm/mach-spear3xx/spear3xx.c +++ b/arch/arm/mach-spear/spear3xx.c @@ -15,10 +15,13 @@  #include <linux/amba/pl022.h>  #include <linux/amba/pl080.h> +#include <linux/clk.h>  #include <linux/io.h> -#include <plat/pl080.h> -#include <mach/generic.h> +#include <asm/mach/map.h> +#include "pl080.h" +#include "generic.h"  #include <mach/spear.h> +#include <mach/misc_regs.h>  /* ssp device registration */  struct pl022_ssp_controller pl022_plat_data = { @@ -65,13 +68,13 @@ struct pl08x_platform_data pl080_plat_data = {   */  struct map_desc spear3xx_io_desc[] __initdata = {  	{ -		.virtual	= VA_SPEAR3XX_ICM1_2_BASE, -		.pfn		= __phys_to_pfn(SPEAR3XX_ICM1_2_BASE), +		.virtual	= (unsigned long)VA_SPEAR_ICM1_2_BASE, +		.pfn		= __phys_to_pfn(SPEAR_ICM1_2_BASE),  		.length		= SZ_16M,  		.type		= MT_DEVICE  	}, { -		.virtual	= VA_SPEAR3XX_ICM3_SMI_CTRL_BASE, -		.pfn		= __phys_to_pfn(SPEAR3XX_ICM3_SMI_CTRL_BASE), +		.virtual	= (unsigned long)VA_SPEAR_ICM3_SMI_CTRL_BASE, +		.pfn		= __phys_to_pfn(SPEAR_ICM3_SMI_CTRL_BASE),  		.length		= SZ_16M,  		.type		= MT_DEVICE  	}, @@ -88,7 +91,7 @@ void __init spear3xx_timer_init(void)  	char pclk_name[] = "pll3_clk";  	struct clk *gpt_clk, *pclk; -	spear3xx_clk_init(); +	spear3xx_clk_init(MISC_BASE, VA_SPEAR320_SOC_CONFIG_BASE);  	/* get the system timer clock */  	gpt_clk = clk_get_sys("gpt0", NULL); diff --git a/arch/arm/mach-spear6xx/spear6xx.c b/arch/arm/mach-spear/spear6xx.c index 8904d8a52d8..ec8eefbbdfa 100644 --- a/arch/arm/mach-spear6xx/spear6xx.c +++ b/arch/arm/mach-spear/spear6xx.c @@ -24,9 +24,10 @@  #include <asm/mach/arch.h>  #include <asm/mach/time.h>  #include <asm/mach/map.h> -#include <plat/pl080.h> -#include <mach/generic.h> +#include "pl080.h" +#include "generic.h"  #include <mach/spear.h> +#include <mach/misc_regs.h>  /* dmac device registration */  static struct pl08x_channel_data spear600_dma_info[] = { @@ -321,7 +322,7 @@ static struct pl08x_channel_data spear600_dma_info[] = {  	},  }; -struct pl08x_platform_data pl080_plat_data = { +static struct pl08x_platform_data spear6xx_pl080_plat_data = {  	.memcpy_channel = {  		.bus_id = "memcpy",  		.cctl_memcpy = @@ -350,18 +351,18 @@ struct pl08x_platform_data pl080_plat_data = {   */  struct map_desc spear6xx_io_desc[] __initdata = {  	{ -		.virtual	= VA_SPEAR6XX_ML_CPU_BASE, -		.pfn		= __phys_to_pfn(SPEAR6XX_ML_CPU_BASE), +		.virtual	= (unsigned long)VA_SPEAR6XX_ML_CPU_BASE, +		.pfn		= __phys_to_pfn(SPEAR_ICM3_ML1_2_BASE),  		.length		= 2 * SZ_16M,  		.type		= MT_DEVICE  	},	{ -		.virtual	= VA_SPEAR6XX_ICM1_BASE, -		.pfn		= __phys_to_pfn(SPEAR6XX_ICM1_BASE), +		.virtual	= (unsigned long)VA_SPEAR_ICM1_2_BASE, +		.pfn		= __phys_to_pfn(SPEAR_ICM1_2_BASE),  		.length		= SZ_16M,  		.type		= MT_DEVICE  	}, { -		.virtual	= VA_SPEAR6XX_ICM3_SMI_CTRL_BASE, -		.pfn		= __phys_to_pfn(SPEAR6XX_ICM3_SMI_CTRL_BASE), +		.virtual	= (unsigned long)VA_SPEAR_ICM3_SMI_CTRL_BASE, +		.pfn		= __phys_to_pfn(SPEAR_ICM3_SMI_CTRL_BASE),  		.length		= SZ_16M,  		.type		= MT_DEVICE  	}, @@ -378,7 +379,7 @@ void __init spear6xx_timer_init(void)  	char pclk_name[] = "pll3_clk";  	struct clk *gpt_clk, *pclk; -	spear6xx_clk_init(); +	spear6xx_clk_init(MISC_BASE);  	/* get the system timer clock */  	gpt_clk = clk_get_sys("gpt0", NULL); @@ -404,8 +405,8 @@ void __init spear6xx_timer_init(void)  /* Add auxdata to pass platform data */  struct of_dev_auxdata spear6xx_auxdata_lookup[] __initdata = { -	OF_DEV_AUXDATA("arm,pl080", SPEAR6XX_ICM3_DMA_BASE, NULL, -			&pl080_plat_data), +	OF_DEV_AUXDATA("arm,pl080", SPEAR_ICM3_DMA_BASE, NULL, +			&spear6xx_pl080_plat_data),  	{}  }; diff --git a/arch/arm/plat-spear/time.c b/arch/arm/mach-spear/time.c index bd5c53cd696..d449673e40f 100644 --- a/arch/arm/plat-spear/time.c +++ b/arch/arm/mach-spear/time.c @@ -23,7 +23,7 @@  #include <linux/time.h>  #include <linux/irq.h>  #include <asm/mach/time.h> -#include <mach/generic.h> +#include "generic.h"  /*   * We would use TIMER0 and TIMER1 as clockevent and clocksource. diff --git a/arch/arm/mach-spear13xx/Kconfig b/arch/arm/mach-spear13xx/Kconfig deleted file mode 100644 index eaadc66d96b..00000000000 --- a/arch/arm/mach-spear13xx/Kconfig +++ /dev/null @@ -1,20 +0,0 @@ -# -# SPEAr13XX Machine configuration file -# - -if ARCH_SPEAR13XX - -menu "SPEAr13xx Implementations" -config MACH_SPEAR1310 -	bool "SPEAr1310 Machine support with Device Tree" -	select PINCTRL_SPEAR1310 -	help -	  Supports ST SPEAr1310 machine configured via the device-tree - -config MACH_SPEAR1340 -	bool "SPEAr1340 Machine support with Device Tree" -	select PINCTRL_SPEAR1340 -	help -	  Supports ST SPEAr1340 machine configured via the device-tree -endmenu -endif #ARCH_SPEAR13XX diff --git a/arch/arm/mach-spear13xx/Makefile b/arch/arm/mach-spear13xx/Makefile deleted file mode 100644 index 3435ea78c15..00000000000 --- a/arch/arm/mach-spear13xx/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -# -# Makefile for SPEAr13XX machine series -# - -obj-$(CONFIG_SMP)		+= headsmp.o platsmp.o -obj-$(CONFIG_HOTPLUG_CPU)	+= hotplug.o - -obj-$(CONFIG_ARCH_SPEAR13XX)	+= spear13xx.o -obj-$(CONFIG_MACH_SPEAR1310)	+= spear1310.o -obj-$(CONFIG_MACH_SPEAR1340)	+= spear1340.o diff --git a/arch/arm/mach-spear13xx/include/mach/debug-macro.S b/arch/arm/mach-spear13xx/include/mach/debug-macro.S deleted file mode 100644 index 9e3ae6bfe50..00000000000 --- a/arch/arm/mach-spear13xx/include/mach/debug-macro.S +++ /dev/null @@ -1,14 +0,0 @@ -/* - * arch/arm/mach-spear13xx/include/mach/debug-macro.S - * - * Debugging macro include header spear13xx machine family - * - * Copyright (C) 2012 ST Microelectronics - * Viresh Kumar <viresh.linux@gmail.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#include <plat/debug-macro.S> diff --git a/arch/arm/mach-spear13xx/include/mach/hardware.h b/arch/arm/mach-spear13xx/include/mach/hardware.h deleted file mode 100644 index 40a8c178f10..00000000000 --- a/arch/arm/mach-spear13xx/include/mach/hardware.h +++ /dev/null @@ -1 +0,0 @@ -/* empty */ diff --git a/arch/arm/mach-spear13xx/include/mach/irqs.h b/arch/arm/mach-spear13xx/include/mach/irqs.h deleted file mode 100644 index 271a62b4cd3..00000000000 --- a/arch/arm/mach-spear13xx/include/mach/irqs.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * arch/arm/mach-spear13xx/include/mach/irqs.h - * - * IRQ helper macros for spear13xx machine family - * - * Copyright (C) 2012 ST Microelectronics - * Viresh Kumar <viresh.linux@gmail.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#ifndef __MACH_IRQS_H -#define __MACH_IRQS_H - -#define IRQ_GIC_END			160 -#define NR_IRQS				IRQ_GIC_END - -#endif /* __MACH_IRQS_H */ diff --git a/arch/arm/mach-spear13xx/include/mach/spear.h b/arch/arm/mach-spear13xx/include/mach/spear.h deleted file mode 100644 index 7cfa6818865..00000000000 --- a/arch/arm/mach-spear13xx/include/mach/spear.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * arch/arm/mach-spear13xx/include/mach/spear.h - * - * spear13xx Machine family specific definition - * - * Copyright (C) 2012 ST Microelectronics - * Viresh Kumar <viresh.linux@gmail.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#ifndef __MACH_SPEAR13XX_H -#define __MACH_SPEAR13XX_H - -#include <asm/memory.h> - -#define PERIP_GRP2_BASE				UL(0xB3000000) -#define VA_PERIP_GRP2_BASE			IOMEM(0xFE000000) -#define MCIF_SDHCI_BASE				UL(0xB3000000) -#define SYSRAM0_BASE				UL(0xB3800000) -#define VA_SYSRAM0_BASE				IOMEM(0xFE800000) -#define SYS_LOCATION				(VA_SYSRAM0_BASE + 0x600) - -#define PERIP_GRP1_BASE				UL(0xE0000000) -#define VA_PERIP_GRP1_BASE			IOMEM(0xFD000000) -#define UART_BASE				UL(0xE0000000) -#define VA_UART_BASE				IOMEM(0xFD000000) -#define SSP_BASE				UL(0xE0100000) -#define MISC_BASE				UL(0xE0700000) -#define VA_MISC_BASE				IOMEM(0xFD700000) - -#define A9SM_AND_MPMC_BASE			UL(0xEC000000) -#define VA_A9SM_AND_MPMC_BASE			IOMEM(0xFC000000) - -/* A9SM peripheral offsets */ -#define A9SM_PERIP_BASE				UL(0xEC800000) -#define VA_A9SM_PERIP_BASE			IOMEM(0xFC800000) -#define VA_SCU_BASE				(VA_A9SM_PERIP_BASE + 0x00) - -#define L2CC_BASE				UL(0xED000000) -#define VA_L2CC_BASE				IOMEM(UL(0xFB000000)) - -/* others */ -#define DMAC0_BASE				UL(0xEA800000) -#define DMAC1_BASE				UL(0xEB000000) -#define MCIF_CF_BASE				UL(0xB2800000) - -/* Debug uart for linux, will be used for debug and uncompress messages */ -#define SPEAR_DBG_UART_BASE			UART_BASE -#define VA_SPEAR_DBG_UART_BASE			VA_UART_BASE - -#endif /* __MACH_SPEAR13XX_H */ diff --git a/arch/arm/mach-spear13xx/include/mach/timex.h b/arch/arm/mach-spear13xx/include/mach/timex.h deleted file mode 100644 index 3a58b8284a6..00000000000 --- a/arch/arm/mach-spear13xx/include/mach/timex.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * arch/arm/mach-spear3xx/include/mach/timex.h - * - * SPEAr3XX machine family specific timex definitions - * - * Copyright (C) 2012 ST Microelectronics - * Viresh Kumar <viresh.linux@gmail.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#ifndef __MACH_TIMEX_H -#define __MACH_TIMEX_H - -#include <plat/timex.h> - -#endif /* __MACH_TIMEX_H */ diff --git a/arch/arm/mach-spear13xx/include/mach/uncompress.h b/arch/arm/mach-spear13xx/include/mach/uncompress.h deleted file mode 100644 index 70fe72f05de..00000000000 --- a/arch/arm/mach-spear13xx/include/mach/uncompress.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * arch/arm/mach-spear13xx/include/mach/uncompress.h - * - * Serial port stubs for kernel decompress status messages - * - * Copyright (C) 2012 ST Microelectronics - * Viresh Kumar <viresh.linux@gmail.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#ifndef __MACH_UNCOMPRESS_H -#define __MACH_UNCOMPRESS_H - -#include <plat/uncompress.h> - -#endif /* __MACH_UNCOMPRESS_H */ diff --git a/arch/arm/mach-spear3xx/Kconfig b/arch/arm/mach-spear3xx/Kconfig deleted file mode 100644 index 8bd37291fa4..00000000000 --- a/arch/arm/mach-spear3xx/Kconfig +++ /dev/null @@ -1,26 +0,0 @@ -# -# SPEAr3XX Machine configuration file -# - -if ARCH_SPEAR3XX - -menu "SPEAr3xx Implementations" -config MACH_SPEAR300 -	bool "SPEAr300 Machine support with Device Tree" -	select PINCTRL_SPEAR300 -	help -	  Supports ST SPEAr300 machine configured via the device-tree - -config MACH_SPEAR310 -	bool "SPEAr310 Machine support with Device Tree" -	select PINCTRL_SPEAR310 -	help -	  Supports ST SPEAr310 machine configured via the device-tree - -config MACH_SPEAR320 -	bool "SPEAr320 Machine support with Device Tree" -	select PINCTRL_SPEAR320 -	help -	  Supports ST SPEAr320 machine configured via the device-tree -endmenu -endif #ARCH_SPEAR3XX diff --git a/arch/arm/mach-spear3xx/Makefile b/arch/arm/mach-spear3xx/Makefile deleted file mode 100644 index 8d12faa178f..00000000000 --- a/arch/arm/mach-spear3xx/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -# -# Makefile for SPEAr3XX machine series -# - -# common files -obj-$(CONFIG_ARCH_SPEAR3XX)	+= spear3xx.o - -# spear300 specific files -obj-$(CONFIG_MACH_SPEAR300) += spear300.o - -# spear310 specific files -obj-$(CONFIG_MACH_SPEAR310) += spear310.o - -# spear320 specific files -obj-$(CONFIG_MACH_SPEAR320) += spear320.o diff --git a/arch/arm/mach-spear3xx/Makefile.boot b/arch/arm/mach-spear3xx/Makefile.boot deleted file mode 100644 index 4674a4c221d..00000000000 --- a/arch/arm/mach-spear3xx/Makefile.boot +++ /dev/null @@ -1,3 +0,0 @@ -zreladdr-y	+= 0x00008000 -params_phys-y	:= 0x00000100 -initrd_phys-y	:= 0x00800000 diff --git a/arch/arm/mach-spear3xx/include/mach/debug-macro.S b/arch/arm/mach-spear3xx/include/mach/debug-macro.S deleted file mode 100644 index 0a6381fad5d..00000000000 --- a/arch/arm/mach-spear3xx/include/mach/debug-macro.S +++ /dev/null @@ -1,14 +0,0 @@ -/* - * arch/arm/mach-spear3xx/include/mach/debug-macro.S - * - * Debugging macro include header spear3xx machine family - * - * Copyright (C) 2009 ST Microelectronics - * Viresh Kumar<viresh.linux@gmail.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#include <plat/debug-macro.S> diff --git a/arch/arm/mach-spear3xx/include/mach/generic.h b/arch/arm/mach-spear3xx/include/mach/generic.h deleted file mode 100644 index df310799e41..00000000000 --- a/arch/arm/mach-spear3xx/include/mach/generic.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * arch/arm/mach-spear3xx/generic.h - * - * SPEAr3XX machine family generic header file - * - * Copyright (C) 2009 ST Microelectronics - * Viresh Kumar<viresh.linux@gmail.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#ifndef __MACH_GENERIC_H -#define __MACH_GENERIC_H - -#include <linux/amba/pl08x.h> -#include <linux/init.h> -#include <linux/platform_device.h> -#include <linux/amba/bus.h> -#include <asm/mach/time.h> -#include <asm/mach/map.h> - -/* Add spear3xx family device structure declarations here */ -extern void spear3xx_timer_init(void); -extern struct pl022_ssp_controller pl022_plat_data; -extern struct pl08x_platform_data pl080_plat_data; - -/* Add spear3xx family function declarations here */ -void __init spear_setup_of_timer(void); -void __init spear3xx_clk_init(void); -void __init spear3xx_map_io(void); - -void spear_restart(char, const char *); - -#endif /* __MACH_GENERIC_H */ diff --git a/arch/arm/mach-spear3xx/include/mach/hardware.h b/arch/arm/mach-spear3xx/include/mach/hardware.h deleted file mode 100644 index 40a8c178f10..00000000000 --- a/arch/arm/mach-spear3xx/include/mach/hardware.h +++ /dev/null @@ -1 +0,0 @@ -/* empty */ diff --git a/arch/arm/mach-spear3xx/include/mach/irqs.h b/arch/arm/mach-spear3xx/include/mach/irqs.h deleted file mode 100644 index f95e5b2b668..00000000000 --- a/arch/arm/mach-spear3xx/include/mach/irqs.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * arch/arm/mach-spear3xx/include/mach/irqs.h - * - * IRQ helper macros for SPEAr3xx machine family - * - * Copyright (C) 2009 ST Microelectronics - * Viresh Kumar <viresh.linux@gmail.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#ifndef __MACH_IRQS_H -#define __MACH_IRQS_H - -#define NR_IRQS			256 - -#endif /* __MACH_IRQS_H */ diff --git a/arch/arm/mach-spear3xx/include/mach/spear.h b/arch/arm/mach-spear3xx/include/mach/spear.h deleted file mode 100644 index 8cca95193d4..00000000000 --- a/arch/arm/mach-spear3xx/include/mach/spear.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * arch/arm/mach-spear3xx/include/mach/spear.h - * - * SPEAr3xx Machine family specific definition - * - * Copyright (C) 2009 ST Microelectronics - * Viresh Kumar <viresh.linux@gmail.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#ifndef __MACH_SPEAR3XX_H -#define __MACH_SPEAR3XX_H - -#include <asm/memory.h> - -/* ICM1 - Low speed connection */ -#define SPEAR3XX_ICM1_2_BASE		UL(0xD0000000) -#define VA_SPEAR3XX_ICM1_2_BASE		UL(0xFD000000) -#define SPEAR3XX_ICM1_UART_BASE		UL(0xD0000000) -#define VA_SPEAR3XX_ICM1_UART_BASE	(VA_SPEAR3XX_ICM1_2_BASE | SPEAR3XX_ICM1_UART_BASE) -#define SPEAR3XX_ICM1_SSP_BASE		UL(0xD0100000) - -/* ML1 - Multi Layer CPU Subsystem */ -#define SPEAR3XX_ICM3_ML1_2_BASE	UL(0xF0000000) -#define VA_SPEAR6XX_ML_CPU_BASE		UL(0xF0000000) - -/* ICM3 - Basic Subsystem */ -#define SPEAR3XX_ICM3_SMI_CTRL_BASE	UL(0xFC000000) -#define VA_SPEAR3XX_ICM3_SMI_CTRL_BASE	UL(0xFC000000) -#define SPEAR3XX_ICM3_DMA_BASE		UL(0xFC400000) -#define SPEAR3XX_ICM3_SYS_CTRL_BASE	UL(0xFCA00000) -#define VA_SPEAR3XX_ICM3_SYS_CTRL_BASE	(VA_SPEAR3XX_ICM3_SMI_CTRL_BASE | SPEAR3XX_ICM3_SYS_CTRL_BASE) -#define SPEAR3XX_ICM3_MISC_REG_BASE	UL(0xFCA80000) -#define VA_SPEAR3XX_ICM3_MISC_REG_BASE	(VA_SPEAR3XX_ICM3_SMI_CTRL_BASE | SPEAR3XX_ICM3_MISC_REG_BASE) - -/* Debug uart for linux, will be used for debug and uncompress messages */ -#define SPEAR_DBG_UART_BASE		SPEAR3XX_ICM1_UART_BASE -#define VA_SPEAR_DBG_UART_BASE		VA_SPEAR3XX_ICM1_UART_BASE - -/* Sysctl base for spear platform */ -#define SPEAR_SYS_CTRL_BASE		SPEAR3XX_ICM3_SYS_CTRL_BASE -#define VA_SPEAR_SYS_CTRL_BASE		VA_SPEAR3XX_ICM3_SYS_CTRL_BASE - -/* SPEAr320 Macros */ -#define SPEAR320_SOC_CONFIG_BASE	UL(0xB3000000) -#define VA_SPEAR320_SOC_CONFIG_BASE	UL(0xFE000000) -#define SPEAR320_CONTROL_REG		IOMEM(VA_SPEAR320_SOC_CONFIG_BASE) -#define SPEAR320_EXT_CTRL_REG		IOMEM(VA_SPEAR320_SOC_CONFIG_BASE + 0x0018) -	#define SPEAR320_UARTX_PCLK_MASK		0x1 -	#define SPEAR320_UART2_PCLK_SHIFT		8 -	#define SPEAR320_UART3_PCLK_SHIFT		9 -	#define SPEAR320_UART4_PCLK_SHIFT		10 -	#define SPEAR320_UART5_PCLK_SHIFT		11 -	#define SPEAR320_UART6_PCLK_SHIFT		12 -	#define SPEAR320_RS485_PCLK_SHIFT		13 - -#endif /* __MACH_SPEAR3XX_H */ diff --git a/arch/arm/mach-spear3xx/include/mach/timex.h b/arch/arm/mach-spear3xx/include/mach/timex.h deleted file mode 100644 index 9f5d08bd0c4..00000000000 --- a/arch/arm/mach-spear3xx/include/mach/timex.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * arch/arm/mach-spear3xx/include/mach/timex.h - * - * SPEAr3XX machine family specific timex definitions - * - * Copyright (C) 2009 ST Microelectronics - * Viresh Kumar <viresh.linux@gmail.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#ifndef __MACH_TIMEX_H -#define __MACH_TIMEX_H - -#include <plat/timex.h> - -#endif /* __MACH_TIMEX_H */ diff --git a/arch/arm/mach-spear3xx/include/mach/uncompress.h b/arch/arm/mach-spear3xx/include/mach/uncompress.h deleted file mode 100644 index b909b011f7c..00000000000 --- a/arch/arm/mach-spear3xx/include/mach/uncompress.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * arch/arm/mach-spear3xx/include/mach/uncompress.h - * - * Serial port stubs for kernel decompress status messages - * - * Copyright (C) 2009 ST Microelectronics - * Viresh Kumar <viresh.linux@gmail.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#ifndef __MACH_UNCOMPRESS_H -#define __MACH_UNCOMPRESS_H - -#include <plat/uncompress.h> - -#endif /* __MACH_UNCOMPRESS_H */ diff --git a/arch/arm/mach-spear6xx/Kconfig b/arch/arm/mach-spear6xx/Kconfig deleted file mode 100644 index 339f397dea7..00000000000 --- a/arch/arm/mach-spear6xx/Kconfig +++ /dev/null @@ -1,10 +0,0 @@ -# -# SPEAr6XX Machine configuration file -# - -config MACH_SPEAR600 -	def_bool y -	depends on ARCH_SPEAR6XX -	select USE_OF -	help -	  Supports ST SPEAr600 boards configured via the device-tree diff --git a/arch/arm/mach-spear6xx/Makefile b/arch/arm/mach-spear6xx/Makefile deleted file mode 100644 index 898831d93f3..00000000000 --- a/arch/arm/mach-spear6xx/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# -# Makefile for SPEAr6XX machine series -# - -# common files -obj-y	+= spear6xx.o diff --git a/arch/arm/mach-spear6xx/Makefile.boot b/arch/arm/mach-spear6xx/Makefile.boot deleted file mode 100644 index 4674a4c221d..00000000000 --- a/arch/arm/mach-spear6xx/Makefile.boot +++ /dev/null @@ -1,3 +0,0 @@ -zreladdr-y	+= 0x00008000 -params_phys-y	:= 0x00000100 -initrd_phys-y	:= 0x00800000 diff --git a/arch/arm/mach-spear6xx/include/mach/debug-macro.S b/arch/arm/mach-spear6xx/include/mach/debug-macro.S deleted file mode 100644 index 0f3ea39edd9..00000000000 --- a/arch/arm/mach-spear6xx/include/mach/debug-macro.S +++ /dev/null @@ -1,14 +0,0 @@ -/* - * arch/arm/mach-spear6xx/include/mach/debug-macro.S - * - * Debugging macro include header for SPEAr6xx machine family - * - * Copyright (C) 2009 ST Microelectronics - * Rajeev Kumar<rajeev-dlh.kumar@st.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#include <plat/debug-macro.S> diff --git a/arch/arm/mach-spear6xx/include/mach/generic.h b/arch/arm/mach-spear6xx/include/mach/generic.h deleted file mode 100644 index 65514b15937..00000000000 --- a/arch/arm/mach-spear6xx/include/mach/generic.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * arch/arm/mach-spear6xx/include/mach/generic.h - * - * SPEAr6XX machine family specific generic header file - * - * Copyright (C) 2009 ST Microelectronics - * Rajeev Kumar<rajeev-dlh.kumar@st.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#ifndef __MACH_GENERIC_H -#define __MACH_GENERIC_H - -#include <linux/init.h> - -void __init spear_setup_of_timer(void); -void spear_restart(char, const char *); -void __init spear6xx_clk_init(void); - -#endif /* __MACH_GENERIC_H */ diff --git a/arch/arm/mach-spear6xx/include/mach/hardware.h b/arch/arm/mach-spear6xx/include/mach/hardware.h deleted file mode 100644 index 40a8c178f10..00000000000 --- a/arch/arm/mach-spear6xx/include/mach/hardware.h +++ /dev/null @@ -1 +0,0 @@ -/* empty */ diff --git a/arch/arm/mach-spear6xx/include/mach/misc_regs.h b/arch/arm/mach-spear6xx/include/mach/misc_regs.h deleted file mode 100644 index c34acc201d3..00000000000 --- a/arch/arm/mach-spear6xx/include/mach/misc_regs.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * arch/arm/mach-spear6xx/include/mach/misc_regs.h - * - * Miscellaneous registers definitions for SPEAr6xx machine family - * - * Copyright (C) 2009 ST Microelectronics - * Viresh Kumar <viresh.linux@gmail.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#ifndef __MACH_MISC_REGS_H -#define __MACH_MISC_REGS_H - -#include <mach/spear.h> - -#define MISC_BASE		IOMEM(VA_SPEAR6XX_ICM3_MISC_REG_BASE) -#define DMA_CHN_CFG		(MISC_BASE + 0x0A0) - -#endif /* __MACH_MISC_REGS_H */ diff --git a/arch/arm/mach-spear6xx/include/mach/spear.h b/arch/arm/mach-spear6xx/include/mach/spear.h deleted file mode 100644 index cb8ed2f4dc8..00000000000 --- a/arch/arm/mach-spear6xx/include/mach/spear.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * arch/arm/mach-spear6xx/include/mach/spear.h - * - * SPEAr6xx Machine family specific definition - * - * Copyright (C) 2009 ST Microelectronics - * Rajeev Kumar<rajeev-dlh.kumar@st.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#ifndef __MACH_SPEAR6XX_H -#define __MACH_SPEAR6XX_H - -#include <asm/memory.h> - -/* ICM1 - Low speed connection */ -#define SPEAR6XX_ICM1_BASE		UL(0xD0000000) -#define VA_SPEAR6XX_ICM1_BASE		UL(0xFD000000) -#define SPEAR6XX_ICM1_UART0_BASE	UL(0xD0000000) -#define VA_SPEAR6XX_ICM1_UART0_BASE	(VA_SPEAR6XX_ICM1_2_BASE | SPEAR6XX_ICM1_UART0_BASE) - -/* ML-1, 2 - Multi Layer CPU Subsystem */ -#define SPEAR6XX_ML_CPU_BASE		UL(0xF0000000) -#define VA_SPEAR6XX_ML_CPU_BASE		UL(0xF0000000) - -/* ICM3 - Basic Subsystem */ -#define SPEAR6XX_ICM3_SMI_CTRL_BASE	UL(0xFC000000) -#define VA_SPEAR6XX_ICM3_SMI_CTRL_BASE	UL(0xFC000000) -#define SPEAR6XX_ICM3_DMA_BASE		UL(0xFC400000) -#define SPEAR6XX_ICM3_SYS_CTRL_BASE	UL(0xFCA00000) -#define VA_SPEAR6XX_ICM3_SYS_CTRL_BASE	(VA_SPEAR6XX_ICM3_SMI_CTRL_BASE | SPEAR6XX_ICM3_SYS_CTRL_BASE) -#define SPEAR6XX_ICM3_MISC_REG_BASE	UL(0xFCA80000) -#define VA_SPEAR6XX_ICM3_MISC_REG_BASE	(VA_SPEAR6XX_ICM3_SMI_CTRL_BASE | SPEAR6XX_ICM3_MISC_REG_BASE) - -/* Debug uart for linux, will be used for debug and uncompress messages */ -#define SPEAR_DBG_UART_BASE		SPEAR6XX_ICM1_UART0_BASE -#define VA_SPEAR_DBG_UART_BASE		VA_SPEAR6XX_ICM1_UART0_BASE - -/* Sysctl base for spear platform */ -#define SPEAR_SYS_CTRL_BASE		SPEAR6XX_ICM3_SYS_CTRL_BASE -#define VA_SPEAR_SYS_CTRL_BASE		VA_SPEAR6XX_ICM3_SYS_CTRL_BASE - -#endif /* __MACH_SPEAR6XX_H */ diff --git a/arch/arm/mach-spear6xx/include/mach/timex.h b/arch/arm/mach-spear6xx/include/mach/timex.h deleted file mode 100644 index ac1c5b00569..00000000000 --- a/arch/arm/mach-spear6xx/include/mach/timex.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * arch/arm/mach-spear6xx/include/mach/timex.h - * - * SPEAr6XX machine family specific timex definitions - * - * Copyright (C) 2009 ST Microelectronics - * Rajeev Kumar<rajeev-dlh.kumar@st.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#ifndef __MACH_TIMEX_H -#define __MACH_TIMEX_H - -#include <plat/timex.h> - -#endif	/* __MACH_TIMEX_H */ diff --git a/arch/arm/mach-spear6xx/include/mach/uncompress.h b/arch/arm/mach-spear6xx/include/mach/uncompress.h deleted file mode 100644 index 77f0765e21e..00000000000 --- a/arch/arm/mach-spear6xx/include/mach/uncompress.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * arch/arm/mach-spear6xx/include/mach/uncompress.h - * - * Serial port stubs for kernel decompress status messages - * - * Copyright (C) 2009 ST Microelectronics - * Rajeev Kumar<rajeev-dlh.kumar@st.com> - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#ifndef __MACH_UNCOMPRESS_H -#define __MACH_UNCOMPRESS_H - -#include <plat/uncompress.h> - -#endif	/* __MACH_UNCOMPRESS_H */ diff --git a/arch/arm/mach-sunxi/Kconfig b/arch/arm/mach-sunxi/Kconfig index 8709a39bd34..d259c782d74 100644 --- a/arch/arm/mach-sunxi/Kconfig +++ b/arch/arm/mach-sunxi/Kconfig @@ -1,10 +1,11 @@  config ARCH_SUNXI  	bool "Allwinner A1X SOCs" if ARCH_MULTI_V7  	select CLKSRC_MMIO +	select CLKSRC_OF  	select COMMON_CLK  	select GENERIC_CLOCKEVENTS  	select GENERIC_IRQ_CHIP  	select PINCTRL  	select SPARSE_IRQ -	select SUNXI_TIMER -	select PINCTRL_SUNXI
\ No newline at end of file +	select SUN4I_TIMER +	select PINCTRL_SUNXI diff --git a/arch/arm/mach-sunxi/sunxi.c b/arch/arm/mach-sunxi/sunxi.c index 23afb732cb4..706ce35396b 100644 --- a/arch/arm/mach-sunxi/sunxi.c +++ b/arch/arm/mach-sunxi/sunxi.c @@ -10,63 +10,77 @@   * warranty of any kind, whether express or implied.   */ +#include <linux/clocksource.h>  #include <linux/delay.h>  #include <linux/kernel.h>  #include <linux/init.h> +#include <linux/irqchip.h>  #include <linux/of_address.h>  #include <linux/of_irq.h>  #include <linux/of_platform.h>  #include <linux/io.h> -#include <linux/sunxi_timer.h> -#include <linux/irqchip/sunxi.h> +#include <linux/clk/sunxi.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h> +#include <asm/system_misc.h>  #include "sunxi.h" -#define WATCHDOG_CTRL_REG	0x00 -#define WATCHDOG_CTRL_RESTART		(1 << 0) -#define WATCHDOG_MODE_REG	0x04 -#define WATCHDOG_MODE_ENABLE		(1 << 0) -#define WATCHDOG_MODE_RESET_ENABLE	(1 << 1) +#define SUN4I_WATCHDOG_CTRL_REG		0x00 +#define SUN4I_WATCHDOG_CTRL_RESTART		(1 << 0) +#define SUN4I_WATCHDOG_MODE_REG		0x04 +#define SUN4I_WATCHDOG_MODE_ENABLE		(1 << 0) +#define SUN4I_WATCHDOG_MODE_RESET_ENABLE	(1 << 1)  static void __iomem *wdt_base; -static void sunxi_setup_restart(void) -{ -	struct device_node *np = of_find_compatible_node(NULL, NULL, -						"allwinner,sunxi-wdt"); -	if (WARN(!np, "unable to setup watchdog restart")) -		return; - -	wdt_base = of_iomap(np, 0); -	WARN(!wdt_base, "failed to map watchdog base address"); -} - -static void sunxi_restart(char mode, const char *cmd) +static void sun4i_restart(char mode, const char *cmd)  {  	if (!wdt_base)  		return;  	/* Enable timer and set reset bit in the watchdog */ -	writel(WATCHDOG_MODE_ENABLE | WATCHDOG_MODE_RESET_ENABLE, -		wdt_base + WATCHDOG_MODE_REG); +	writel(SUN4I_WATCHDOG_MODE_ENABLE | SUN4I_WATCHDOG_MODE_RESET_ENABLE, +	       wdt_base + SUN4I_WATCHDOG_MODE_REG);  	/*  	 * Restart the watchdog. The default (and lowest) interval  	 * value for the watchdog is 0.5s.  	 */ -	writel(WATCHDOG_CTRL_RESTART, wdt_base + WATCHDOG_CTRL_REG); +	writel(SUN4I_WATCHDOG_CTRL_RESTART, wdt_base + SUN4I_WATCHDOG_CTRL_REG);  	while (1) {  		mdelay(5); -		writel(WATCHDOG_MODE_ENABLE | WATCHDOG_MODE_RESET_ENABLE, -			wdt_base + WATCHDOG_MODE_REG); +		writel(SUN4I_WATCHDOG_MODE_ENABLE | SUN4I_WATCHDOG_MODE_RESET_ENABLE, +		       wdt_base + SUN4I_WATCHDOG_MODE_REG);  	}  } +static struct of_device_id sunxi_restart_ids[] = { +	{ .compatible = "allwinner,sun4i-wdt", .data = sun4i_restart }, +	{ /*sentinel*/ } +}; + +static void sunxi_setup_restart(void) +{ +	const struct of_device_id *of_id; +	struct device_node *np; + +	np = of_find_matching_node(NULL, sunxi_restart_ids); +	if (WARN(!np, "unable to setup watchdog restart")) +		return; + +	wdt_base = of_iomap(np, 0); +	WARN(!wdt_base, "failed to map watchdog base address"); + +	of_id = of_match_node(sunxi_restart_ids, np); +	WARN(!of_id, "restart function not available"); + +	arm_pm_restart = of_id->data; +} +  static struct map_desc sunxi_io_desc[] __initdata = {  	{  		.virtual	= (unsigned long) SUNXI_REGS_VIRT_BASE, @@ -81,6 +95,12 @@ void __init sunxi_map_io(void)  	iotable_init(sunxi_io_desc, ARRAY_SIZE(sunxi_io_desc));  } +static void __init sunxi_timer_init(void) +{ +	sunxi_init_clocks(); +	clocksource_of_init(); +} +  static void __init sunxi_dt_init(void)  {  	sunxi_setup_restart(); @@ -97,9 +117,7 @@ static const char * const sunxi_board_dt_compat[] = {  DT_MACHINE_START(SUNXI_DT, "Allwinner A1X (Device Tree)")  	.init_machine	= sunxi_dt_init,  	.map_io		= sunxi_map_io, -	.init_irq	= sunxi_init_irq, -	.handle_irq	= sunxi_handle_irq, -	.restart	= sunxi_restart, -	.init_time	= &sunxi_timer_init, +	.init_irq	= irqchip_init, +	.init_time	= sunxi_timer_init,  	.dt_compat	= sunxi_board_dt_compat,  MACHINE_END diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig index d1c4893894c..20c3b372cdf 100644 --- a/arch/arm/mach-tegra/Kconfig +++ b/arch/arm/mach-tegra/Kconfig @@ -1,13 +1,30 @@ -if ARCH_TEGRA +config ARCH_TEGRA +	bool "NVIDIA Tegra" if ARCH_MULTI_V7 +	select ARCH_HAS_CPUFREQ +	select ARCH_REQUIRE_GPIOLIB +	select CLKDEV_LOOKUP +	select CLKSRC_MMIO +	select CLKSRC_OF +	select COMMON_CLK +	select GENERIC_CLOCKEVENTS +	select HAVE_ARM_SCU if SMP +	select HAVE_ARM_TWD if LOCAL_TIMERS +	select HAVE_CLK +	select HAVE_SMP +	select MIGHT_HAVE_CACHE_L2X0 +	select SOC_BUS +	select SPARSE_IRQ +	select USE_OF +	help +	  This enables support for NVIDIA Tegra based systems. -comment "NVIDIA Tegra options" +menu "NVIDIA Tegra options" +	depends on ARCH_TEGRA  config ARCH_TEGRA_2x_SOC  	bool "Enable support for Tegra20 family"  	select ARCH_NEEDS_CPU_IDLE_COUPLED if SMP  	select ARM_ERRATA_720789 -	select ARM_ERRATA_742230 if SMP -	select ARM_ERRATA_751472  	select ARM_ERRATA_754327 if SMP  	select ARM_ERRATA_764369 if SMP  	select ARM_GIC @@ -18,16 +35,14 @@ config ARCH_TEGRA_2x_SOC  	select PL310_ERRATA_727915 if CACHE_L2X0  	select PL310_ERRATA_769419 if CACHE_L2X0  	select USB_ARCH_HAS_EHCI if USB_SUPPORT -	select USB_ULPI if USB -	select USB_ULPI_VIEWPORT if USB_SUPPORT +	select USB_ULPI if USB_PHY +	select USB_ULPI_VIEWPORT if USB_PHY  	help  	  Support for NVIDIA Tegra AP20 and T20 processors, based on the  	  ARM CortexA9MP CPU and the ARM PL310 L2 cache controller  config ARCH_TEGRA_3x_SOC  	bool "Enable support for Tegra30 family" -	select ARM_ERRATA_743622 -	select ARM_ERRATA_751472  	select ARM_ERRATA_754322  	select ARM_ERRATA_764369 if SMP  	select ARM_GIC @@ -37,8 +52,8 @@ config ARCH_TEGRA_3x_SOC  	select PINCTRL_TEGRA30  	select PL310_ERRATA_769419 if CACHE_L2X0  	select USB_ARCH_HAS_EHCI if USB_SUPPORT -	select USB_ULPI if USB -	select USB_ULPI_VIEWPORT if USB_SUPPORT +	select USB_ULPI if USB_PHY +	select USB_ULPI_VIEWPORT if USB_PHY  	help  	  Support for NVIDIA Tegra T30 processor family, based on the  	  ARM CortexA9MP CPU and the ARM PL310 L2 cache controller @@ -71,4 +86,4 @@ config TEGRA_AHB  config TEGRA_EMC_SCALING_ENABLE  	bool "Enable scaling the memory frequency" -endif +endmenu diff --git a/arch/arm/mach-tegra/Makefile b/arch/arm/mach-tegra/Makefile index e40326d0e29..d011f0ad49c 100644 --- a/arch/arm/mach-tegra/Makefile +++ b/arch/arm/mach-tegra/Makefile @@ -1,3 +1,5 @@ +asflags-y				+= -march=armv7-a +  obj-y                                   += common.o  obj-y                                   += io.o  obj-y                                   += irq.o @@ -25,7 +27,6 @@ obj-$(CONFIG_ARCH_TEGRA_3x_SOC)		+= cpuidle-tegra30.o  endif  obj-$(CONFIG_SMP)			+= platsmp.o headsmp.o  obj-$(CONFIG_HOTPLUG_CPU)               += hotplug.o -obj-$(CONFIG_CPU_FREQ)                  += cpu-tegra.o  obj-$(CONFIG_TEGRA_PCI)			+= pcie.o  obj-$(CONFIG_ARCH_TEGRA_114_SOC)	+= tegra114_speedo.o diff --git a/arch/arm/mach-tegra/Makefile.boot b/arch/arm/mach-tegra/Makefile.boot deleted file mode 100644 index 29433816233..00000000000 --- a/arch/arm/mach-tegra/Makefile.boot +++ /dev/null @@ -1,3 +0,0 @@ -zreladdr-$(CONFIG_ARCH_TEGRA_2x_SOC)	+= 0x00008000 -params_phys-$(CONFIG_ARCH_TEGRA_2x_SOC)	:= 0x00000100 -initrd_phys-$(CONFIG_ARCH_TEGRA_2x_SOC)	:= 0x00800000 diff --git a/arch/arm/mach-tegra/board.h b/arch/arm/mach-tegra/board.h index 60431de585c..1787327fae3 100644 --- a/arch/arm/mach-tegra/board.h +++ b/arch/arm/mach-tegra/board.h @@ -40,6 +40,7 @@ int tegra_clk_debugfs_init(void);  static inline int tegra_clk_debugfs_init(void) { return 0; }  #endif +int __init tegra_powergate_init(void);  #if defined(CONFIG_ARCH_TEGRA_2x_SOC) && defined(CONFIG_DEBUG_FS)  int __init tegra_powergate_debugfs_init(void);  #else diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c index eb1f3c8c74c..9f852c6fe5b 100644 --- a/arch/arm/mach-tegra/common.c +++ b/arch/arm/mach-tegra/common.c @@ -27,8 +27,6 @@  #include <asm/hardware/cache-l2x0.h> -#include <mach/powergate.h> -  #include "board.h"  #include "common.h"  #include "fuse.h" diff --git a/arch/arm/mach-tegra/common.h b/arch/arm/mach-tegra/common.h index 32f8eb3fe34..5900cc44f78 100644 --- a/arch/arm/mach-tegra/common.h +++ b/arch/arm/mach-tegra/common.h @@ -2,4 +2,3 @@ extern struct smp_operations tegra_smp_ops;  extern int tegra_cpu_kill(unsigned int cpu);  extern void tegra_cpu_die(unsigned int cpu); -extern int tegra_cpu_disable(unsigned int cpu); diff --git a/arch/arm/mach-tegra/cpu-tegra.c b/arch/arm/mach-tegra/cpu-tegra.c deleted file mode 100644 index e3d6e15ff18..00000000000 --- a/arch/arm/mach-tegra/cpu-tegra.c +++ /dev/null @@ -1,293 +0,0 @@ -/* - * arch/arm/mach-tegra/cpu-tegra.c - * - * Copyright (C) 2010 Google, Inc. - * - * Author: - *	Colin Cross <ccross@google.com> - *	Based on arch/arm/plat-omap/cpu-omap.c, (C) 2005 Nokia Corporation - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * 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. - * - */ - -#include <linux/kernel.h> -#include <linux/module.h> -#include <linux/types.h> -#include <linux/sched.h> -#include <linux/cpufreq.h> -#include <linux/delay.h> -#include <linux/init.h> -#include <linux/err.h> -#include <linux/clk.h> -#include <linux/io.h> -#include <linux/suspend.h> - -/* Frequency table index must be sequential starting at 0 */ -static struct cpufreq_frequency_table freq_table[] = { -	{ 0, 216000 }, -	{ 1, 312000 }, -	{ 2, 456000 }, -	{ 3, 608000 }, -	{ 4, 760000 }, -	{ 5, 816000 }, -	{ 6, 912000 }, -	{ 7, 1000000 }, -	{ 8, CPUFREQ_TABLE_END }, -}; - -#define NUM_CPUS	2 - -static struct clk *cpu_clk; -static struct clk *pll_x_clk; -static struct clk *pll_p_clk; -static struct clk *emc_clk; - -static unsigned long target_cpu_speed[NUM_CPUS]; -static DEFINE_MUTEX(tegra_cpu_lock); -static bool is_suspended; - -static int tegra_verify_speed(struct cpufreq_policy *policy) -{ -	return cpufreq_frequency_table_verify(policy, freq_table); -} - -static unsigned int tegra_getspeed(unsigned int cpu) -{ -	unsigned long rate; - -	if (cpu >= NUM_CPUS) -		return 0; - -	rate = clk_get_rate(cpu_clk) / 1000; -	return rate; -} - -static int tegra_cpu_clk_set_rate(unsigned long rate) -{ -	int ret; - -	/* -	 * Take an extra reference to the main pll so it doesn't turn -	 * off when we move the cpu off of it -	 */ -	clk_prepare_enable(pll_x_clk); - -	ret = clk_set_parent(cpu_clk, pll_p_clk); -	if (ret) { -		pr_err("Failed to switch cpu to clock pll_p\n"); -		goto out; -	} - -	if (rate == clk_get_rate(pll_p_clk)) -		goto out; - -	ret = clk_set_rate(pll_x_clk, rate); -	if (ret) { -		pr_err("Failed to change pll_x to %lu\n", rate); -		goto out; -	} - -	ret = clk_set_parent(cpu_clk, pll_x_clk); -	if (ret) { -		pr_err("Failed to switch cpu to clock pll_x\n"); -		goto out; -	} - -out: -	clk_disable_unprepare(pll_x_clk); -	return ret; -} - -static int tegra_update_cpu_speed(unsigned long rate) -{ -	int ret = 0; -	struct cpufreq_freqs freqs; - -	freqs.old = tegra_getspeed(0); -	freqs.new = rate; - -	if (freqs.old == freqs.new) -		return ret; - -	/* -	 * Vote on memory bus frequency based on cpu frequency -	 * This sets the minimum frequency, display or avp may request higher -	 */ -	if (rate >= 816000) -		clk_set_rate(emc_clk, 600000000); /* cpu 816 MHz, emc max */ -	else if (rate >= 456000) -		clk_set_rate(emc_clk, 300000000); /* cpu 456 MHz, emc 150Mhz */ -	else -		clk_set_rate(emc_clk, 100000000);  /* emc 50Mhz */ - -	for_each_online_cpu(freqs.cpu) -		cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); - -#ifdef CONFIG_CPU_FREQ_DEBUG -	printk(KERN_DEBUG "cpufreq-tegra: transition: %u --> %u\n", -	       freqs.old, freqs.new); -#endif - -	ret = tegra_cpu_clk_set_rate(freqs.new * 1000); -	if (ret) { -		pr_err("cpu-tegra: Failed to set cpu frequency to %d kHz\n", -			freqs.new); -		return ret; -	} - -	for_each_online_cpu(freqs.cpu) -		cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); - -	return 0; -} - -static unsigned long tegra_cpu_highest_speed(void) -{ -	unsigned long rate = 0; -	int i; - -	for_each_online_cpu(i) -		rate = max(rate, target_cpu_speed[i]); -	return rate; -} - -static int tegra_target(struct cpufreq_policy *policy, -		       unsigned int target_freq, -		       unsigned int relation) -{ -	unsigned int idx; -	unsigned int freq; -	int ret = 0; - -	mutex_lock(&tegra_cpu_lock); - -	if (is_suspended) { -		ret = -EBUSY; -		goto out; -	} - -	cpufreq_frequency_table_target(policy, freq_table, target_freq, -		relation, &idx); - -	freq = freq_table[idx].frequency; - -	target_cpu_speed[policy->cpu] = freq; - -	ret = tegra_update_cpu_speed(tegra_cpu_highest_speed()); - -out: -	mutex_unlock(&tegra_cpu_lock); -	return ret; -} - -static int tegra_pm_notify(struct notifier_block *nb, unsigned long event, -	void *dummy) -{ -	mutex_lock(&tegra_cpu_lock); -	if (event == PM_SUSPEND_PREPARE) { -		is_suspended = true; -		pr_info("Tegra cpufreq suspend: setting frequency to %d kHz\n", -			freq_table[0].frequency); -		tegra_update_cpu_speed(freq_table[0].frequency); -	} else if (event == PM_POST_SUSPEND) { -		is_suspended = false; -	} -	mutex_unlock(&tegra_cpu_lock); - -	return NOTIFY_OK; -} - -static struct notifier_block tegra_cpu_pm_notifier = { -	.notifier_call = tegra_pm_notify, -}; - -static int tegra_cpu_init(struct cpufreq_policy *policy) -{ -	if (policy->cpu >= NUM_CPUS) -		return -EINVAL; - -	clk_prepare_enable(emc_clk); -	clk_prepare_enable(cpu_clk); - -	cpufreq_frequency_table_cpuinfo(policy, freq_table); -	cpufreq_frequency_table_get_attr(freq_table, policy->cpu); -	policy->cur = tegra_getspeed(policy->cpu); -	target_cpu_speed[policy->cpu] = policy->cur; - -	/* FIXME: what's the actual transition time? */ -	policy->cpuinfo.transition_latency = 300 * 1000; - -	cpumask_copy(policy->cpus, cpu_possible_mask); - -	if (policy->cpu == 0) -		register_pm_notifier(&tegra_cpu_pm_notifier); - -	return 0; -} - -static int tegra_cpu_exit(struct cpufreq_policy *policy) -{ -	cpufreq_frequency_table_cpuinfo(policy, freq_table); -	clk_disable_unprepare(emc_clk); -	return 0; -} - -static struct freq_attr *tegra_cpufreq_attr[] = { -	&cpufreq_freq_attr_scaling_available_freqs, -	NULL, -}; - -static struct cpufreq_driver tegra_cpufreq_driver = { -	.verify		= tegra_verify_speed, -	.target		= tegra_target, -	.get		= tegra_getspeed, -	.init		= tegra_cpu_init, -	.exit		= tegra_cpu_exit, -	.name		= "tegra", -	.attr		= tegra_cpufreq_attr, -}; - -static int __init tegra_cpufreq_init(void) -{ -	cpu_clk = clk_get_sys(NULL, "cpu"); -	if (IS_ERR(cpu_clk)) -		return PTR_ERR(cpu_clk); - -	pll_x_clk = clk_get_sys(NULL, "pll_x"); -	if (IS_ERR(pll_x_clk)) -		return PTR_ERR(pll_x_clk); - -	pll_p_clk = clk_get_sys(NULL, "pll_p_cclk"); -	if (IS_ERR(pll_p_clk)) -		return PTR_ERR(pll_p_clk); - -	emc_clk = clk_get_sys("cpu", "emc"); -	if (IS_ERR(emc_clk)) { -		clk_put(cpu_clk); -		return PTR_ERR(emc_clk); -	} - -	return cpufreq_register_driver(&tegra_cpufreq_driver); -} - -static void __exit tegra_cpufreq_exit(void) -{ -        cpufreq_unregister_driver(&tegra_cpufreq_driver); -	clk_put(emc_clk); -	clk_put(cpu_clk); -} - - -MODULE_AUTHOR("Colin Cross <ccross@android.com>"); -MODULE_DESCRIPTION("cpufreq driver for Nvidia Tegra2"); -MODULE_LICENSE("GPL"); -module_init(tegra_cpufreq_init); -module_exit(tegra_cpufreq_exit); diff --git a/arch/arm/mach-tegra/cpuidle-tegra114.c b/arch/arm/mach-tegra/cpuidle-tegra114.c index 0f4e8c483b3..1d1c6023f4a 100644 --- a/arch/arm/mach-tegra/cpuidle-tegra114.c +++ b/arch/arm/mach-tegra/cpuidle-tegra114.c @@ -23,39 +23,13 @@  static struct cpuidle_driver tegra_idle_driver = {  	.name = "tegra_idle",  	.owner = THIS_MODULE, -	.en_core_tk_irqen = 1,  	.state_count = 1,  	.states = {  		[0] = ARM_CPUIDLE_WFI_STATE_PWR(600),  	},  }; -static DEFINE_PER_CPU(struct cpuidle_device, tegra_idle_device); -  int __init tegra114_cpuidle_init(void)  { -	int ret; -	unsigned int cpu; -	struct cpuidle_device *dev; -	struct cpuidle_driver *drv = &tegra_idle_driver; - -	ret = cpuidle_register_driver(&tegra_idle_driver); -	if (ret) { -		pr_err("CPUidle driver registration failed\n"); -		return ret; -	} - -	for_each_possible_cpu(cpu) { -		dev = &per_cpu(tegra_idle_device, cpu); -		dev->cpu = cpu; - -		dev->state_count = drv->state_count; -		ret = cpuidle_register_device(dev); -		if (ret) { -			pr_err("CPU%u: CPUidle device registration failed\n", -				cpu); -			return ret; -		} -	} -	return 0; +	return cpuidle_register(&tegra_idle_driver, NULL);  } diff --git a/arch/arm/mach-tegra/cpuidle-tegra20.c b/arch/arm/mach-tegra/cpuidle-tegra20.c index 8bbbdebed88..0cdba8de8c7 100644 --- a/arch/arm/mach-tegra/cpuidle-tegra20.c +++ b/arch/arm/mach-tegra/cpuidle-tegra20.c @@ -43,32 +43,33 @@ static atomic_t abort_barrier;  static int tegra20_idle_lp2_coupled(struct cpuidle_device *dev,  				    struct cpuidle_driver *drv,  				    int index); +#define TEGRA20_MAX_STATES 2 +#else +#define TEGRA20_MAX_STATES 1  #endif -static struct cpuidle_state tegra_idle_states[] = { -	[0] = ARM_CPUIDLE_WFI_STATE_PWR(600), -#ifdef CONFIG_PM_SLEEP -	[1] = { -		.enter			= tegra20_idle_lp2_coupled, -		.exit_latency		= 5000, -		.target_residency	= 10000, -		.power_usage		= 0, -		.flags			= CPUIDLE_FLAG_TIME_VALID | -					  CPUIDLE_FLAG_COUPLED, -		.name			= "powered-down", -		.desc			= "CPU power gated", -	}, -#endif -}; -  static struct cpuidle_driver tegra_idle_driver = {  	.name = "tegra_idle",  	.owner = THIS_MODULE, -	.en_core_tk_irqen = 1, +	.states = { +		ARM_CPUIDLE_WFI_STATE_PWR(600), +#ifdef CONFIG_PM_SLEEP +		{ +			.enter            = tegra20_idle_lp2_coupled, +			.exit_latency     = 5000, +			.target_residency = 10000, +			.power_usage      = 0, +			.flags            = CPUIDLE_FLAG_TIME_VALID | +			CPUIDLE_FLAG_COUPLED, +			.name             = "powered-down", +			.desc             = "CPU power gated", +		}, +#endif +	}, +	.state_count = TEGRA20_MAX_STATES, +	.safe_state_index = 0,  }; -static DEFINE_PER_CPU(struct cpuidle_device, tegra_idle_device); -  #ifdef CONFIG_PM_SLEEP  #ifdef CONFIG_SMP  static void __iomem *pmc = IO_ADDRESS(TEGRA_PMC_BASE); @@ -213,39 +214,8 @@ static int tegra20_idle_lp2_coupled(struct cpuidle_device *dev,  int __init tegra20_cpuidle_init(void)  { -	int ret; -	unsigned int cpu; -	struct cpuidle_device *dev; -	struct cpuidle_driver *drv = &tegra_idle_driver; -  #ifdef CONFIG_PM_SLEEP  	tegra_tear_down_cpu = tegra20_tear_down_cpu;  #endif - -	drv->state_count = ARRAY_SIZE(tegra_idle_states); -	memcpy(drv->states, tegra_idle_states, -			drv->state_count * sizeof(drv->states[0])); - -	ret = cpuidle_register_driver(&tegra_idle_driver); -	if (ret) { -		pr_err("CPUidle driver registration failed\n"); -		return ret; -	} - -	for_each_possible_cpu(cpu) { -		dev = &per_cpu(tegra_idle_device, cpu); -		dev->cpu = cpu; -#ifdef CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED -		dev->coupled_cpus = *cpu_possible_mask; -#endif - -		dev->state_count = drv->state_count; -		ret = cpuidle_register_device(dev); -		if (ret) { -			pr_err("CPU%u: CPUidle device registration failed\n", -				cpu); -			return ret; -		} -	} -	return 0; +	return cpuidle_register(&tegra_idle_driver, cpu_possible_mask);  } diff --git a/arch/arm/mach-tegra/cpuidle-tegra30.c b/arch/arm/mach-tegra/cpuidle-tegra30.c index c0931c8bb3e..3cf9aca5f3e 100644 --- a/arch/arm/mach-tegra/cpuidle-tegra30.c +++ b/arch/arm/mach-tegra/cpuidle-tegra30.c @@ -43,7 +43,6 @@ static int tegra30_idle_lp2(struct cpuidle_device *dev,  static struct cpuidle_driver tegra_idle_driver = {  	.name = "tegra_idle",  	.owner = THIS_MODULE, -	.en_core_tk_irqen = 1,  #ifdef CONFIG_PM_SLEEP  	.state_count = 2,  #else @@ -65,8 +64,6 @@ static struct cpuidle_driver tegra_idle_driver = {  	},  }; -static DEFINE_PER_CPU(struct cpuidle_device, tegra_idle_device); -  #ifdef CONFIG_PM_SLEEP  static bool tegra30_cpu_cluster_power_down(struct cpuidle_device *dev,  					   struct cpuidle_driver *drv, @@ -149,32 +146,8 @@ static int tegra30_idle_lp2(struct cpuidle_device *dev,  int __init tegra30_cpuidle_init(void)  { -	int ret; -	unsigned int cpu; -	struct cpuidle_device *dev; -	struct cpuidle_driver *drv = &tegra_idle_driver; -  #ifdef CONFIG_PM_SLEEP  	tegra_tear_down_cpu = tegra30_tear_down_cpu;  #endif - -	ret = cpuidle_register_driver(&tegra_idle_driver); -	if (ret) { -		pr_err("CPUidle driver registration failed\n"); -		return ret; -	} - -	for_each_possible_cpu(cpu) { -		dev = &per_cpu(tegra_idle_device, cpu); -		dev->cpu = cpu; - -		dev->state_count = drv->state_count; -		ret = cpuidle_register_device(dev); -		if (ret) { -			pr_err("CPU%u: CPUidle device registration failed\n", -				cpu); -			return ret; -		} -	} -	return 0; +	return cpuidle_register(&tegra_idle_driver, NULL);  } diff --git a/arch/arm/mach-tegra/hotplug.c b/arch/arm/mach-tegra/hotplug.c index 8da9f78475d..184914a68d7 100644 --- a/arch/arm/mach-tegra/hotplug.c +++ b/arch/arm/mach-tegra/hotplug.c @@ -11,7 +11,6 @@  #include <linux/smp.h>  #include <linux/clk/tegra.h> -#include <asm/cacheflush.h>  #include <asm/smp_plat.h>  #include "fuse.h" @@ -47,15 +46,6 @@ void __ref tegra_cpu_die(unsigned int cpu)  	BUG();  } -int tegra_cpu_disable(unsigned int cpu) -{ -	/* -	 * we don't allow CPU 0 to be shutdown (it is still too special -	 * e.g. clock tick interrupts) -	 */ -	return cpu == 0 ? -EPERM : 0; -} -  void __init tegra_hotplug_init(void)  {  	if (!IS_ENABLED(CONFIG_HOTPLUG_CPU)) diff --git a/arch/arm/mach-tegra/include/mach/powergate.h b/arch/arm/mach-tegra/include/mach/powergate.h deleted file mode 100644 index 06763fe7529..00000000000 --- a/arch/arm/mach-tegra/include/mach/powergate.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * drivers/regulator/tegra-regulator.c - * - * Copyright (c) 2010 Google, Inc - * - * Author: - *	Colin Cross <ccross@google.com> - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * 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. - * - */ - -#ifndef _MACH_TEGRA_POWERGATE_H_ -#define _MACH_TEGRA_POWERGATE_H_ - -struct clk; - -#define TEGRA_POWERGATE_CPU	0 -#define TEGRA_POWERGATE_3D	1 -#define TEGRA_POWERGATE_VENC	2 -#define TEGRA_POWERGATE_PCIE	3 -#define TEGRA_POWERGATE_VDEC	4 -#define TEGRA_POWERGATE_L2	5 -#define TEGRA_POWERGATE_MPE	6 -#define TEGRA_POWERGATE_HEG	7 -#define TEGRA_POWERGATE_SATA	8 -#define TEGRA_POWERGATE_CPU1	9 -#define TEGRA_POWERGATE_CPU2	10 -#define TEGRA_POWERGATE_CPU3	11 -#define TEGRA_POWERGATE_CELP	12 -#define TEGRA_POWERGATE_3D1	13 - -#define TEGRA_POWERGATE_CPU0	TEGRA_POWERGATE_CPU -#define TEGRA_POWERGATE_3D0	TEGRA_POWERGATE_3D - -int  __init tegra_powergate_init(void); - -int tegra_cpu_powergate_id(int cpuid); -int tegra_powergate_is_powered(int id); -int tegra_powergate_power_on(int id); -int tegra_powergate_power_off(int id); -int tegra_powergate_remove_clamping(int id); - -/* Must be called with clk disabled, and returns with clk enabled */ -int tegra_powergate_sequence_power_up(int id, struct clk *clk); - -#endif /* _MACH_TEGRA_POWERGATE_H_ */ diff --git a/arch/arm/mach-tegra/include/mach/timex.h b/arch/arm/mach-tegra/include/mach/timex.h deleted file mode 100644 index a44ccbdb7db..00000000000 --- a/arch/arm/mach-tegra/include/mach/timex.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * arch/arm/mach-tegra/include/mach/timex.h - * - * Copyright (C) 2010 Google, Inc. - * - * Author: - *	Colin Cross <ccross@google.com> - *	Erik Gilling <konkers@google.com> - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * 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. - * - */ - -#ifndef __MACH_TEGRA_TIMEX_H -#define __MACH_TEGRA_TIMEX_H - -#define CLOCK_TICK_RATE		1000000 - -#endif diff --git a/arch/arm/mach-tegra/include/mach/uncompress.h b/arch/arm/mach-tegra/include/mach/uncompress.h deleted file mode 100644 index 08386418196..00000000000 --- a/arch/arm/mach-tegra/include/mach/uncompress.h +++ /dev/null @@ -1,175 +0,0 @@ -/* - * arch/arm/mach-tegra/include/mach/uncompress.h - * - * Copyright (C) 2010 Google, Inc. - * Copyright (C) 2011 Google, Inc. - * Copyright (C) 2011-2012 NVIDIA CORPORATION. All Rights Reserved. - * - * Author: - *	Colin Cross <ccross@google.com> - *	Erik Gilling <konkers@google.com> - *	Doug Anderson <dianders@chromium.org> - *	Stephen Warren <swarren@nvidia.com> - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * 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. - * - */ - -#ifndef __MACH_TEGRA_UNCOMPRESS_H -#define __MACH_TEGRA_UNCOMPRESS_H - -#include <linux/types.h> -#include <linux/serial_reg.h> - -#include "../../iomap.h" - -#define BIT(x) (1 << (x)) -#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) - -#define DEBUG_UART_SHIFT 2 - -volatile u8 *uart; - -static void putc(int c) -{ -	if (uart == NULL) -		return; - -	while (!(uart[UART_LSR << DEBUG_UART_SHIFT] & UART_LSR_THRE)) -		barrier(); -	uart[UART_TX << DEBUG_UART_SHIFT] = c; -} - -static inline void flush(void) -{ -} - -static const struct { -	u32 base; -	u32 reset_reg; -	u32 clock_reg; -	u32 bit; -} uarts[] = { -	{ -		TEGRA_UARTA_BASE, -		TEGRA_CLK_RESET_BASE + 0x04, -		TEGRA_CLK_RESET_BASE + 0x10, -		6, -	}, -	{ -		TEGRA_UARTB_BASE, -		TEGRA_CLK_RESET_BASE + 0x04, -		TEGRA_CLK_RESET_BASE + 0x10, -		7, -	}, -	{ -		TEGRA_UARTC_BASE, -		TEGRA_CLK_RESET_BASE + 0x08, -		TEGRA_CLK_RESET_BASE + 0x14, -		23, -	}, -	{ -		TEGRA_UARTD_BASE, -		TEGRA_CLK_RESET_BASE + 0x0c, -		TEGRA_CLK_RESET_BASE + 0x18, -		1, -	}, -	{ -		TEGRA_UARTE_BASE, -		TEGRA_CLK_RESET_BASE + 0x0c, -		TEGRA_CLK_RESET_BASE + 0x18, -		2, -	}, -}; - -static inline bool uart_clocked(int i) -{ -	if (*(u8 *)uarts[i].reset_reg & BIT(uarts[i].bit)) -		return false; - -	if (!(*(u8 *)uarts[i].clock_reg & BIT(uarts[i].bit))) -		return false; - -	return true; -} - -#ifdef CONFIG_TEGRA_DEBUG_UART_AUTO_ODMDATA -int auto_odmdata(void) -{ -	volatile u32 *pmc = (volatile u32 *)TEGRA_PMC_BASE; -	u32 odmdata = pmc[0xa0 / 4]; - -	/* -	 * Bits 19:18 are the console type: 0=default, 1=none, 2==DCC, 3==UART -	 * Some boards apparently swap the last two values, but we don't have -	 * any way of catering for that here, so we just accept either. If this -	 * doesn't make sense for your board, just don't enable this feature. -	 * -	 * Bits 17:15 indicate the UART to use, 0/1/2/3/4 are UART A/B/C/D/E. -	 */ - -	switch  ((odmdata >> 18) & 3) { -	case 2: -	case 3: -		break; -	default: -		return -1; -	} - -	return (odmdata >> 15) & 7; -} -#endif - -/* - * Setup before decompression.  This is where we do UART selection for - * earlyprintk and init the uart_base register. - */ -static inline void arch_decomp_setup(void) -{ -	int uart_id; -	volatile u32 *apb_misc = (volatile u32 *)TEGRA_APB_MISC_BASE; -	u32 chip, div; - -#if defined(CONFIG_TEGRA_DEBUG_UART_AUTO_ODMDATA) -	uart_id = auto_odmdata(); -#elif defined(CONFIG_TEGRA_DEBUG_UARTA) -	uart_id = 0; -#elif defined(CONFIG_TEGRA_DEBUG_UARTB) -	uart_id = 1; -#elif defined(CONFIG_TEGRA_DEBUG_UARTC) -	uart_id = 2; -#elif defined(CONFIG_TEGRA_DEBUG_UARTD) -	uart_id = 3; -#elif defined(CONFIG_TEGRA_DEBUG_UARTE) -	uart_id = 4; -#endif - -	if (uart_id < 0 || uart_id >= ARRAY_SIZE(uarts) || -	    !uart_clocked(uart_id)) -		uart = NULL; -	else -		uart = (volatile u8 *)uarts[uart_id].base; - -	if (uart == NULL) -		return; - -	chip = (apb_misc[0x804 / 4] >> 8) & 0xff; -	if (chip == 0x20) -		div = 0x0075; -	else -		div = 0x00dd; - -	uart[UART_LCR << DEBUG_UART_SHIFT] |= UART_LCR_DLAB; -	uart[UART_DLL << DEBUG_UART_SHIFT] = div & 0xff; -	uart[UART_DLM << DEBUG_UART_SHIFT] = div >> 8; -	uart[UART_LCR << DEBUG_UART_SHIFT] = 3; -} - -#endif diff --git a/arch/arm/mach-tegra/pcie.c b/arch/arm/mach-tegra/pcie.c index b60165f1ca0..46144a19a7e 100644 --- a/arch/arm/mach-tegra/pcie.c +++ b/arch/arm/mach-tegra/pcie.c @@ -34,12 +34,11 @@  #include <linux/delay.h>  #include <linux/export.h>  #include <linux/clk/tegra.h> +#include <linux/tegra-powergate.h>  #include <asm/sizes.h>  #include <asm/mach/pci.h> -#include <mach/powergate.h> -  #include "board.h"  #include "iomap.h" diff --git a/arch/arm/mach-tegra/platsmp.c b/arch/arm/mach-tegra/platsmp.c index 516aab28fe3..fad4226ef71 100644 --- a/arch/arm/mach-tegra/platsmp.c +++ b/arch/arm/mach-tegra/platsmp.c @@ -18,7 +18,6 @@  #include <linux/jiffies.h>  #include <linux/smp.h>  #include <linux/io.h> -#include <linux/irqchip/arm-gic.h>  #include <linux/clk/tegra.h>  #include <asm/cacheflush.h> @@ -38,13 +37,6 @@ static cpumask_t tegra_cpu_init_mask;  static void __cpuinit tegra_secondary_init(unsigned int cpu)  { -	/* -	 * 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); -  	cpumask_set_cpu(cpu, &tegra_cpu_init_mask);  } @@ -181,6 +173,5 @@ struct smp_operations tegra_smp_ops __initdata = {  #ifdef CONFIG_HOTPLUG_CPU  	.cpu_kill		= tegra_cpu_kill,  	.cpu_die		= tegra_cpu_die, -	.cpu_disable		= tegra_cpu_disable,  #endif  }; diff --git a/arch/arm/mach-tegra/pm.c b/arch/arm/mach-tegra/pm.c index d0b7400e460..45cf52c7e52 100644 --- a/arch/arm/mach-tegra/pm.c +++ b/arch/arm/mach-tegra/pm.c @@ -123,14 +123,14 @@ bool tegra_set_cpu_in_lp2(int phy_cpu_id)  	return last_cpu;  } -static int tegra_sleep_cpu(unsigned long v2p) +int tegra_cpu_do_idle(void)  { -	/* Switch to the identity mapping. */ -	cpu_switch_mm(idmap_pgd, &init_mm); - -	/* Flush the TLB. */ -	local_flush_tlb_all(); +	return cpu_do_idle(); +} +static int tegra_sleep_cpu(unsigned long v2p) +{ +	setup_mm_for_reboot();  	tegra_sleep_cpu_finish(v2p);  	/* should never here */ diff --git a/arch/arm/mach-tegra/pm.h b/arch/arm/mach-tegra/pm.h index 9d2d038bf12..778a4aa7c3f 100644 --- a/arch/arm/mach-tegra/pm.h +++ b/arch/arm/mach-tegra/pm.h @@ -39,7 +39,7 @@ enum tegra_suspend_mode tegra_pm_validate_suspend_mode(  				enum tegra_suspend_mode mode);  void tegra_init_suspend(void);  #else -enum tegra_suspend_mode tegra_pm_validate_suspend_mode( +static inline enum tegra_suspend_mode tegra_pm_validate_suspend_mode(  				enum tegra_suspend_mode mode)  {  	return TEGRA_SUSPEND_NONE; diff --git a/arch/arm/mach-tegra/powergate.c b/arch/arm/mach-tegra/powergate.c index c6bc8f85759..f076f0f80fc 100644 --- a/arch/arm/mach-tegra/powergate.c +++ b/arch/arm/mach-tegra/powergate.c @@ -22,13 +22,13 @@  #include <linux/debugfs.h>  #include <linux/delay.h>  #include <linux/err.h> +#include <linux/export.h>  #include <linux/init.h>  #include <linux/io.h>  #include <linux/seq_file.h>  #include <linux/spinlock.h>  #include <linux/clk/tegra.h> - -#include <mach/powergate.h> +#include <linux/tegra-powergate.h>  #include "fuse.h"  #include "iomap.h" @@ -75,7 +75,7 @@ static int tegra_powergate_set(int id, bool new_state)  	if (status == new_state) {  		spin_unlock_irqrestore(&tegra_powergate_lock, flags); -		return -EINVAL; +		return 0;  	}  	pmc_write(PWRGATE_TOGGLE_START | id, PWRGATE_TOGGLE); @@ -168,6 +168,7 @@ err_clk:  err_power:  	return ret;  } +EXPORT_SYMBOL(tegra_powergate_sequence_power_up);  int tegra_cpu_powergate_id(int cpuid)  { diff --git a/arch/arm/mach-tegra/reset-handler.S b/arch/arm/mach-tegra/reset-handler.S index 1676aba5e7b..e6de88a2ea0 100644 --- a/arch/arm/mach-tegra/reset-handler.S +++ b/arch/arm/mach-tegra/reset-handler.S @@ -44,6 +44,7 @@ ENTRY(tegra_resume)  	cpu_id	r0  	cmp	r0, #0				@ CPU0? + THUMB(	it	ne )  	bne	cpu_resume			@ no  #ifdef CONFIG_ARCH_TEGRA_3x_SOC diff --git a/arch/arm/mach-tegra/sleep-tegra20.S b/arch/arm/mach-tegra/sleep-tegra20.S index 9f6bfafdd51..e3f2417c420 100644 --- a/arch/arm/mach-tegra/sleep-tegra20.S +++ b/arch/arm/mach-tegra/sleep-tegra20.S @@ -197,7 +197,7 @@ ENTRY(tegra20_sleep_cpu_secondary_finish)  	mov	r3, #CPU_RESETTABLE  	str	r3, [r0] -	bl	cpu_do_idle +	bl	tegra_cpu_do_idle  	/*  	 * cpu may be reset while in wfi, which will return through diff --git a/arch/arm/mach-tegra/sleep-tegra30.S b/arch/arm/mach-tegra/sleep-tegra30.S index 63a15bd9b65..d29dfcce948 100644 --- a/arch/arm/mach-tegra/sleep-tegra30.S +++ b/arch/arm/mach-tegra/sleep-tegra30.S @@ -66,7 +66,9 @@ ENTRY(tegra30_cpu_shutdown)  		FLOW_CTRL_CSR_INTR_FLAG | FLOW_CTRL_CSR_EVENT_FLAG | \  		FLOW_CTRL_CSR_ENABLE  	mov	r4, #(1 << 4) -	orr	r12, r12, r4, lsl r3 + ARM(	orr	r12, r12, r4, lsl r3	) + THUMB(	lsl	r4, r4, r3		) + THUMB(	orr	r12, r12, r4		)  	str	r12, [r1]  	/* Halt this CPU. */ diff --git a/arch/arm/mach-tegra/sleep.h b/arch/arm/mach-tegra/sleep.h index 970ebd5138b..2080fb12ce2 100644 --- a/arch/arm/mach-tegra/sleep.h +++ b/arch/arm/mach-tegra/sleep.h @@ -92,7 +92,7 @@  #ifdef CONFIG_CACHE_L2X0  .macro l2_cache_resume, tmp1, tmp2, tmp3, phys_l2x0_saved_regs -	adr	\tmp1, \phys_l2x0_saved_regs +	W(adr)	\tmp1, \phys_l2x0_saved_regs  	ldr	\tmp1, [\tmp1]  	ldr	\tmp2, [\tmp1, #L2X0_R_PHY_BASE]  	ldr	\tmp3, [\tmp2, #L2X0_CTRL] diff --git a/arch/arm/mach-tegra/tegra.c b/arch/arm/mach-tegra/tegra.c index 61749e2d811..0d1e4128d46 100644 --- a/arch/arm/mach-tegra/tegra.c +++ b/arch/arm/mach-tegra/tegra.c @@ -31,8 +31,6 @@  #include <linux/pda_power.h>  #include <linux/platform_data/tegra_usb.h>  #include <linux/io.h> -#include <linux/i2c.h> -#include <linux/i2c-tegra.h>  #include <linux/slab.h>  #include <linux/sys_soc.h>  #include <linux/usb/tegra_usb_phy.h> diff --git a/arch/arm/mach-u300/include/mach/u300-regs.h b/arch/arm/mach-u300/include/mach/u300-regs.h index 1e49d901f2c..0320495efc4 100644 --- a/arch/arm/mach-u300/include/mach/u300-regs.h +++ b/arch/arm/mach-u300/include/mach/u300-regs.h @@ -95,7 +95,7 @@  #define U300_SPI_BASE			(U300_FAST_PER_PHYS_BASE+0x6000)  /* Fast UART1 on U335 only */ -#define U300_UART1_BASE			(U300_SLOW_PER_PHYS_BASE+0x7000) +#define U300_UART1_BASE			(U300_FAST_PER_PHYS_BASE+0x7000)  /*   * SLOW peripherals diff --git a/arch/arm/mach-ux500/Kconfig b/arch/arm/mach-ux500/Kconfig index 3e5bbd0e5b2..f66d7deae46 100644 --- a/arch/arm/mach-ux500/Kconfig +++ b/arch/arm/mach-ux500/Kconfig @@ -1,3 +1,19 @@ +config ARCH_U8500 +	bool "ST-Ericsson U8500 Series" if ARCH_MULTI_V7 +	depends on MMU +	select ARCH_HAS_CPUFREQ +	select ARCH_REQUIRE_GPIOLIB +	select ARM_AMBA +	select CLKDEV_LOOKUP +	select CPU_V7 +	select GENERIC_CLOCKEVENTS +	select HAVE_ARM_SCU if SMP +	select HAVE_ARM_TWD if LOCAL_TIMERS +	select HAVE_SMP +	select MIGHT_HAVE_CACHE_L2X0 +	help +	  Support for ST-Ericsson's Ux500 architecture +  if ARCH_U8500  config UX500_SOC_COMMON diff --git a/arch/arm/mach-ux500/Makefile b/arch/arm/mach-ux500/Makefile index f24710dfc39..bf9b6be5b18 100644 --- a/arch/arm/mach-ux500/Makefile +++ b/arch/arm/mach-ux500/Makefile @@ -3,7 +3,7 @@  #  obj-y				:= cpu.o devices.o devices-common.o \ -				   id.o usb.o timer.o +				   id.o usb.o timer.o pm.o  obj-$(CONFIG_CPU_IDLE)          += cpuidle.o  obj-$(CONFIG_CACHE_L2X0)	+= cache-l2x0.o  obj-$(CONFIG_UX500_SOC_DB8500)	+= cpu-db8500.o devices-db8500.o @@ -15,3 +15,5 @@ obj-$(CONFIG_MACH_MOP500)	+= board-mop500.o board-mop500-sdi.o \  				board-mop500-audio.o  obj-$(CONFIG_SMP)		+= platsmp.o headsmp.o  obj-$(CONFIG_HOTPLUG_CPU)	+= hotplug.o + +CFLAGS_hotplug.o		+= -march=armv7-a diff --git a/arch/arm/mach-ux500/board-mop500-audio.c b/arch/arm/mach-ux500/board-mop500-audio.c index 7209db7cdc7..aba9e569295 100644 --- a/arch/arm/mach-ux500/board-mop500-audio.c +++ b/arch/arm/mach-ux500/board-mop500-audio.c @@ -10,10 +10,9 @@  #include <linux/platform_data/pinctrl-nomadik.h>  #include <linux/platform_data/dma-ste-dma40.h> -#include <mach/devices.h> -#include <mach/hardware.h> -#include <mach/irqs.h> -#include <mach/msp.h> +#include "devices.h" +#include "irqs.h" +#include <linux/platform_data/asoc-ux500-msp.h>  #include "ste-dma40-db8500.h"  #include "board-mop500.h" diff --git a/arch/arm/mach-ux500/board-mop500-pins.c b/arch/arm/mach-ux500/board-mop500-pins.c index 152ae38cd18..947bd9eca07 100644 --- a/arch/arm/mach-ux500/board-mop500-pins.c +++ b/arch/arm/mach-ux500/board-mop500-pins.c @@ -13,8 +13,6 @@  #include <asm/mach-types.h> -#include <mach/hardware.h> -  #include "pins-db8500.h"  #include "board-mop500.h" diff --git a/arch/arm/mach-ux500/board-mop500-regulators.c b/arch/arm/mach-ux500/board-mop500-regulators.c index 2a17bc506cf..33c353bc1c4 100644 --- a/arch/arm/mach-ux500/board-mop500-regulators.c +++ b/arch/arm/mach-ux500/board-mop500-regulators.c @@ -5,6 +5,7 @@   *   * Authors: Sundar Iyer <sundar.iyer@stericsson.com>   *          Bengt Jonsson <bengt.g.jonsson@stericsson.com> + *          Daniel Willerud <daniel.willerud@stericsson.com>   *   * MOP500 board specific initialization for regulators   */ @@ -12,6 +13,7 @@  #include <linux/regulator/machine.h>  #include <linux/regulator/ab8500.h>  #include "board-mop500-regulators.h" +#include "id.h"  static struct regulator_consumer_supply gpio_en_3v3_consumers[] = {         REGULATOR_SUPPLY("vdd33a", "smsc911x.0"), @@ -28,6 +30,20 @@ struct regulator_init_data gpio_en_3v3_regulator = {         .consumer_supplies = gpio_en_3v3_consumers,  }; +static struct regulator_consumer_supply sdi0_reg_consumers[] = { +        REGULATOR_SUPPLY("vqmmc", "sdi0"), +}; + +struct regulator_init_data sdi0_reg_init_data = { +        .constraints = { +                .min_uV         = 1800000, +                .max_uV         = 2900000, +                .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE|REGULATOR_CHANGE_STATUS, +        }, +        .num_consumer_supplies  = ARRAY_SIZE(sdi0_reg_consumers), +        .consumer_supplies      = sdi0_reg_consumers, +}; +  /*   * TPS61052 regulator   */ @@ -53,21 +69,37 @@ struct regulator_init_data tps61052_regulator = {  };  static struct regulator_consumer_supply ab8500_vaux1_consumers[] = { -	/* External displays, connector on board 2v5 power supply */ -	REGULATOR_SUPPLY("vaux12v5", "mcde.0"), +	/* Main display, u8500 R3 uib */ +	REGULATOR_SUPPLY("vddi", "mcde_disp_sony_acx424akp.0"), +	/* Main display, u8500 uib and ST uib */ +	REGULATOR_SUPPLY("vdd1", "samsung_s6d16d0.0"), +	/* Secondary display, ST uib */ +	REGULATOR_SUPPLY("vdd1", "samsung_s6d16d0.1"),  	/* SFH7741 proximity sensor */  	REGULATOR_SUPPLY("vcc", "gpio-keys.0"),  	/* BH1780GLS ambient light sensor */  	REGULATOR_SUPPLY("vcc", "2-0029"),  	/* lsm303dlh accelerometer */ -	REGULATOR_SUPPLY("vdd", "3-0018"), +	REGULATOR_SUPPLY("vdd", "2-0018"), +	/* lsm303dlhc accelerometer */ +	REGULATOR_SUPPLY("vdd", "2-0019"),  	/* lsm303dlh magnetometer */ -	REGULATOR_SUPPLY("vdd", "3-001e"), +	REGULATOR_SUPPLY("vdd", "2-001e"),  	/* Rohm BU21013 Touchscreen devices */  	REGULATOR_SUPPLY("avdd", "3-005c"),  	REGULATOR_SUPPLY("avdd", "3-005d"),  	/* Synaptics RMI4 Touchscreen device */  	REGULATOR_SUPPLY("vdd", "3-004b"), +	/* L3G4200D Gyroscope device */ +	REGULATOR_SUPPLY("vdd", "2-0068"), +	/* Ambient light sensor device */ +	REGULATOR_SUPPLY("vdd", "3-0029"), +	/* Pressure sensor device */ +	REGULATOR_SUPPLY("vdd", "2-005c"), +	/* Cypress TrueTouch Touchscreen device */ +	REGULATOR_SUPPLY("vcpin", "spi8.0"), +	/* Camera device */ +	REGULATOR_SUPPLY("vaux12v5", "mmio_camera"),  };  static struct regulator_consumer_supply ab8500_vaux2_consumers[] = { @@ -75,18 +107,50 @@ static struct regulator_consumer_supply ab8500_vaux2_consumers[] = {  	REGULATOR_SUPPLY("vmmc", "sdi4"),  	/* AB8500 audio codec */  	REGULATOR_SUPPLY("vcc-N2158", "ab8500-codec.0"), +	/* AB8500 accessory detect 1 */ +	REGULATOR_SUPPLY("vcc-N2158", "ab8500-acc-det.0"), +	/* AB8500 Tv-out device */ +	REGULATOR_SUPPLY("vcc-N2158", "mcde_tv_ab8500.4"), +	/* AV8100 HDMI device */ +	REGULATOR_SUPPLY("vcc-N2158", "av8100_hdmi.3"),  };  static struct regulator_consumer_supply ab8500_vaux3_consumers[] = { +	REGULATOR_SUPPLY("v-SD-STM", "stm"),  	/* External MMC slot power */  	REGULATOR_SUPPLY("vmmc", "sdi0"),  }; +static struct regulator_consumer_supply ab8505_vaux4_consumers[] = { +}; + +static struct regulator_consumer_supply ab8505_vaux5_consumers[] = { +}; + +static struct regulator_consumer_supply ab8505_vaux6_consumers[] = { +}; + +static struct regulator_consumer_supply ab8505_vaux8_consumers[] = { +	/* AB8500 audio codec device */ +	REGULATOR_SUPPLY("v-aux8", NULL), +}; + +static struct regulator_consumer_supply ab8505_vadc_consumers[] = { +	/* Internal general-purpose ADC */ +	REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"), +	/* ADC for charger */ +	REGULATOR_SUPPLY("vddadc", "ab8500-charger.0"), +}; +  static struct regulator_consumer_supply ab8500_vtvout_consumers[] = {  	/* TV-out DENC supply */  	REGULATOR_SUPPLY("vtvout", "ab8500-denc.0"),  	/* Internal general-purpose ADC */  	REGULATOR_SUPPLY("vddadc", "ab8500-gpadc.0"), +	/* ADC for charger */ +	REGULATOR_SUPPLY("vddadc", "ab8500-charger.0"), +	/* AB8500 Tv-out device */ +	REGULATOR_SUPPLY("vtvout", "mcde_tv_ab8500.4"),  };  static struct regulator_consumer_supply ab8500_vaud_consumers[] = { @@ -114,77 +178,90 @@ static struct regulator_consumer_supply ab8500_vintcore_consumers[] = {  	REGULATOR_SUPPLY("v-intcore", NULL),  	/* USB Transceiver */  	REGULATOR_SUPPLY("vddulpivio18", "ab8500-usb.0"), +	/* Handled by abx500 clk driver */ +	REGULATOR_SUPPLY("v-intcore", "abx500-clk.0"), +}; + +static struct regulator_consumer_supply ab8505_usb_consumers[] = { +	/* HS USB OTG physical interface */ +	REGULATOR_SUPPLY("v-ape", NULL),  };  static struct regulator_consumer_supply ab8500_vana_consumers[] = { -	/* External displays, connector on board, 1v8 power supply */ -	REGULATOR_SUPPLY("vsmps2", "mcde.0"), +	/* DB8500 DSI */ +	REGULATOR_SUPPLY("vdddsi1v2", "mcde"), +	REGULATOR_SUPPLY("vdddsi1v2", "b2r2_core"), +	REGULATOR_SUPPLY("vdddsi1v2", "b2r2_1_core"), +	REGULATOR_SUPPLY("vdddsi1v2", "dsilink.0"), +	REGULATOR_SUPPLY("vdddsi1v2", "dsilink.1"), +	REGULATOR_SUPPLY("vdddsi1v2", "dsilink.2"), +	/* DB8500 CSI */ +	REGULATOR_SUPPLY("vddcsi1v2", "mmio_camera"),  };  /* ab8500 regulator register initialization */ -struct ab8500_regulator_reg_init -ab8500_regulator_reg_init[AB8500_NUM_REGULATOR_REGISTERS] = { +static struct ab8500_regulator_reg_init ab8500_reg_init[] = {  	/*  	 * VanaRequestCtrl          = HP/LP depending on VxRequest  	 * VextSupply1RequestCtrl   = HP/LP depending on VxRequest  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL2, 0x00), +	INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL2,       0xf0, 0x00),  	/*  	 * VextSupply2RequestCtrl   = HP/LP depending on VxRequest  	 * VextSupply3RequestCtrl   = HP/LP depending on VxRequest  	 * Vaux1RequestCtrl         = HP/LP depending on VxRequest  	 * Vaux2RequestCtrl         = HP/LP depending on VxRequest  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL3, 0x00), +	INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL3,       0xff, 0x00),  	/*  	 * Vaux3RequestCtrl         = HP/LP depending on VxRequest  	 * SwHPReq                  = Control through SWValid disabled  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL4, 0x00), +	INIT_REGULATOR_REGISTER(AB8500_REGUREQUESTCTRL4,       0x07, 0x00),  	/*  	 * VanaSysClkReq1HPValid    = disabled  	 * Vaux1SysClkReq1HPValid   = disabled  	 * Vaux2SysClkReq1HPValid   = disabled  	 * Vaux3SysClkReq1HPValid   = disabled  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID1, 0x00), +	INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID1, 0xe8, 0x00),  	/*  	 * VextSupply1SysClkReq1HPValid = disabled  	 * VextSupply2SysClkReq1HPValid = disabled  	 * VextSupply3SysClkReq1HPValid = SysClkReq1 controlled  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID2, 0x40), +	INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQ1HPVALID2, 0x70, 0x40),  	/*  	 * VanaHwHPReq1Valid        = disabled  	 * Vaux1HwHPreq1Valid       = disabled  	 * Vaux2HwHPReq1Valid       = disabled  	 * Vaux3HwHPReqValid        = disabled  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID1, 0x00), +	INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID1,     0xe8, 0x00),  	/*  	 * VextSupply1HwHPReq1Valid = disabled  	 * VextSupply2HwHPReq1Valid = disabled  	 * VextSupply3HwHPReq1Valid = disabled  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID2, 0x00), +	INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ1VALID2,     0x07, 0x00),  	/*  	 * VanaHwHPReq2Valid        = disabled  	 * Vaux1HwHPReq2Valid       = disabled  	 * Vaux2HwHPReq2Valid       = disabled  	 * Vaux3HwHPReq2Valid       = disabled  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID1, 0x00), +	INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID1,     0xe8, 0x00),  	/*  	 * VextSupply1HwHPReq2Valid = disabled  	 * VextSupply2HwHPReq2Valid = disabled  	 * VextSupply3HwHPReq2Valid = HWReq2 controlled  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID2, 0x04), +	INIT_REGULATOR_REGISTER(AB8500_REGUHWHPREQ2VALID2,     0x07, 0x04),  	/*  	 * VanaSwHPReqValid         = disabled  	 * Vaux1SwHPReqValid        = disabled  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID1, 0x00), +	INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID1,      0xa0, 0x00),  	/*  	 * Vaux2SwHPReqValid        = disabled  	 * Vaux3SwHPReqValid        = disabled @@ -192,7 +269,7 @@ ab8500_regulator_reg_init[AB8500_NUM_REGULATOR_REGISTERS] = {  	 * VextSupply2SwHPReqValid  = disabled  	 * VextSupply3SwHPReqValid  = disabled  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID2, 0x00), +	INIT_REGULATOR_REGISTER(AB8500_REGUSWHPREQVALID2,      0x1f, 0x00),  	/*  	 * SysClkReq2Valid1         = SysClkReq2 controlled  	 * SysClkReq3Valid1         = disabled @@ -202,7 +279,7 @@ ab8500_regulator_reg_init[AB8500_NUM_REGULATOR_REGISTERS] = {  	 * SysClkReq7Valid1         = disabled  	 * SysClkReq8Valid1         = disabled  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID1, 0x2a), +	INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID1,    0xfe, 0x2a),  	/*  	 * SysClkReq2Valid2         = disabled  	 * SysClkReq3Valid2         = disabled @@ -212,7 +289,7 @@ ab8500_regulator_reg_init[AB8500_NUM_REGULATOR_REGISTERS] = {  	 * SysClkReq7Valid2         = disabled  	 * SysClkReq8Valid2         = disabled  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID2, 0x20), +	INIT_REGULATOR_REGISTER(AB8500_REGUSYSCLKREQVALID2,    0xfe, 0x20),  	/*  	 * VTVoutEna                = disabled  	 * Vintcore12Ena            = disabled @@ -220,66 +297,62 @@ ab8500_regulator_reg_init[AB8500_NUM_REGULATOR_REGISTERS] = {  	 * Vintcore12LP             = inactive (HP)  	 * VTVoutLP                 = inactive (HP)  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUMISC1, 0x10), +	INIT_REGULATOR_REGISTER(AB8500_REGUMISC1,              0xfe, 0x10),  	/*  	 * VaudioEna                = disabled  	 * VdmicEna                 = disabled  	 * Vamic1Ena                = disabled  	 * Vamic2Ena                = disabled  	 */ -	INIT_REGULATOR_REGISTER(AB8500_VAUDIOSUPPLY, 0x00), +	INIT_REGULATOR_REGISTER(AB8500_VAUDIOSUPPLY,           0x1e, 0x00),  	/*  	 * Vamic1_dzout             = high-Z when Vamic1 is disabled  	 * Vamic2_dzout             = high-Z when Vamic2 is disabled  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUCTRL1VAMIC, 0x00), +	INIT_REGULATOR_REGISTER(AB8500_REGUCTRL1VAMIC,         0x03, 0x00),  	/* -	 * VPll                     = Hw controlled +	 * VPll                     = Hw controlled (NOTE! PRCMU bits)  	 * VanaRegu                 = force off  	 */ -	INIT_REGULATOR_REGISTER(AB8500_VPLLVANAREGU, 0x02), +	INIT_REGULATOR_REGISTER(AB8500_VPLLVANAREGU,           0x0f, 0x02),  	/*  	 * VrefDDREna               = disabled  	 * VrefDDRSleepMode         = inactive (no pulldown)  	 */ -	INIT_REGULATOR_REGISTER(AB8500_VREFDDR, 0x00), +	INIT_REGULATOR_REGISTER(AB8500_VREFDDR,                0x03, 0x00),  	/* -	 * VextSupply1Regu          = HW control -	 * VextSupply2Regu          = HW control -	 * VextSupply3Regu          = HW control +	 * VextSupply1Regu          = force LP +	 * VextSupply2Regu          = force OFF +	 * VextSupply3Regu          = force HP (-> STBB2=LP and TPS=LP)  	 * ExtSupply2Bypass         = ExtSupply12LPn ball is 0 when Ena is 0  	 * ExtSupply3Bypass         = ExtSupply3LPn ball is 0 when Ena is 0  	 */ -	INIT_REGULATOR_REGISTER(AB8500_EXTSUPPLYREGU, 0x2a), +	INIT_REGULATOR_REGISTER(AB8500_EXTSUPPLYREGU,          0xff, 0x13),  	/*  	 * Vaux1Regu                = force HP  	 * Vaux2Regu                = force off  	 */ -	INIT_REGULATOR_REGISTER(AB8500_VAUX12REGU, 0x01), -	/* -	 * Vaux3regu                = force off -	 */ -	INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3REGU, 0x00), +	INIT_REGULATOR_REGISTER(AB8500_VAUX12REGU,             0x0f, 0x01),  	/* -	 * Vsmps1                   = 1.15V +	 * Vaux3Regu                = force off  	 */ -	INIT_REGULATOR_REGISTER(AB8500_VSMPS1SEL1, 0x24), +	INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3REGU,          0x03, 0x00),  	/* -	 * Vaux1Sel                 = 2.5 V +	 * Vaux1Sel                 = 2.8 V  	 */ -	INIT_REGULATOR_REGISTER(AB8500_VAUX1SEL, 0x08), +	INIT_REGULATOR_REGISTER(AB8500_VAUX1SEL,               0x0f, 0x0C),  	/*  	 * Vaux2Sel                 = 2.9 V  	 */ -	INIT_REGULATOR_REGISTER(AB8500_VAUX2SEL, 0x0d), +	INIT_REGULATOR_REGISTER(AB8500_VAUX2SEL,               0x0f, 0x0d),  	/*  	 * Vaux3Sel                 = 2.91 V  	 */ -	INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3SEL, 0x07), +	INIT_REGULATOR_REGISTER(AB8500_VRF1VAUX3SEL,           0x07, 0x07),  	/*  	 * VextSupply12LP           = disabled (no LP)  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUCTRL2SPARE, 0x00), +	INIT_REGULATOR_REGISTER(AB8500_REGUCTRL2SPARE,         0x01, 0x00),  	/*  	 * Vaux1Disch               = short discharge time  	 * Vaux2Disch               = short discharge time @@ -288,33 +361,26 @@ ab8500_regulator_reg_init[AB8500_NUM_REGULATOR_REGISTERS] = {  	 * VTVoutDisch              = short discharge time  	 * VaudioDisch              = short discharge time  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH, 0x00), +	INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH,          0xfc, 0x00),  	/*  	 * VanaDisch                = short discharge time  	 * VdmicPullDownEna         = pulldown disabled when Vdmic is disabled  	 * VdmicDisch               = short discharge time  	 */ -	INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH2, 0x00), +	INIT_REGULATOR_REGISTER(AB8500_REGUCTRLDISCH2,         0x16, 0x00),  };  /* AB8500 regulators */ -struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = { +static struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = {  	/* supplies to the display/camera */  	[AB8500_LDO_AUX1] = {  		.constraints = {  			.name = "V-DISPLAY", -			.min_uV = 2500000, -			.max_uV = 2900000, +			.min_uV = 2800000, +			.max_uV = 3300000,  			.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |  					  REGULATOR_CHANGE_STATUS,  			.boot_on = 1, /* display is on at boot */ -			/* -			 * This voltage cannot be disabled right now because -			 * it is somehow affecting the external MMC -			 * functionality, though that typically will use -			 * AUX3. -			 */ -			.always_on = 1,  		},  		.num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers),  		.consumer_supplies = ab8500_vaux1_consumers, @@ -326,7 +392,10 @@ struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = {  			.min_uV = 1100000,  			.max_uV = 3300000,  			.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | -					  REGULATOR_CHANGE_STATUS, +					  REGULATOR_CHANGE_STATUS | +					  REGULATOR_CHANGE_MODE, +			.valid_modes_mask = REGULATOR_MODE_NORMAL | +					    REGULATOR_MODE_IDLE,  		},  		.num_consumer_supplies = ARRAY_SIZE(ab8500_vaux2_consumers),  		.consumer_supplies = ab8500_vaux2_consumers, @@ -338,7 +407,10 @@ struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = {  			.min_uV = 1100000,  			.max_uV = 3300000,  			.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | -					  REGULATOR_CHANGE_STATUS, +					  REGULATOR_CHANGE_STATUS | +					  REGULATOR_CHANGE_MODE, +			.valid_modes_mask = REGULATOR_MODE_NORMAL | +					    REGULATOR_MODE_IDLE,  		},  		.num_consumer_supplies = ARRAY_SIZE(ab8500_vaux3_consumers),  		.consumer_supplies = ab8500_vaux3_consumers, @@ -392,18 +464,614 @@ struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS] = {  	[AB8500_LDO_INTCORE] = {  		.constraints = {  			.name = "V-INTCORE", -			.valid_ops_mask = REGULATOR_CHANGE_STATUS, +			.min_uV = 1250000, +			.max_uV = 1350000, +			.input_uV = 1800000, +			.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | +					  REGULATOR_CHANGE_STATUS | +					  REGULATOR_CHANGE_MODE | +					  REGULATOR_CHANGE_DRMS, +			.valid_modes_mask = REGULATOR_MODE_NORMAL | +					    REGULATOR_MODE_IDLE,  		},  		.num_consumer_supplies = ARRAY_SIZE(ab8500_vintcore_consumers),  		.consumer_supplies = ab8500_vintcore_consumers,  	}, -	/* supply for U8500 CSI/DSI, VANA LDO */ +	/* supply for U8500 CSI-DSI, VANA LDO */  	[AB8500_LDO_ANA] = {  		.constraints = { -			.name = "V-CSI/DSI", +			.name = "V-CSI-DSI",  			.valid_ops_mask = REGULATOR_CHANGE_STATUS,  		},  		.num_consumer_supplies = ARRAY_SIZE(ab8500_vana_consumers),  		.consumer_supplies = ab8500_vana_consumers,  	},  }; + +/* supply for VextSupply3 */ +static struct regulator_consumer_supply ab8500_ext_supply3_consumers[] = { +	/* SIM supply for 3 V SIM cards */ +	REGULATOR_SUPPLY("vinvsim", "sim-detect.0"), +}; + +/* extended configuration for VextSupply2, only used for HREFP_V20 boards */ +static struct ab8500_ext_regulator_cfg ab8500_ext_supply2 = { +	.hwreq = true, +}; + +/* + * AB8500 external regulators + */ +static struct regulator_init_data ab8500_ext_regulators[] = { +	/* fixed Vbat supplies VSMPS1_EXT_1V8 */ +	[AB8500_EXT_SUPPLY1] = { +		.constraints = { +			.name = "ab8500-ext-supply1", +			.min_uV = 1800000, +			.max_uV = 1800000, +			.initial_mode = REGULATOR_MODE_IDLE, +			.boot_on = 1, +			.always_on = 1, +		}, +	}, +	/* fixed Vbat supplies VSMPS2_EXT_1V36 and VSMPS5_EXT_1V15 */ +	[AB8500_EXT_SUPPLY2] = { +		.constraints = { +			.name = "ab8500-ext-supply2", +			.min_uV = 1360000, +			.max_uV = 1360000, +		}, +	}, +	/* fixed Vbat supplies VSMPS3_EXT_3V4 and VSMPS4_EXT_3V4 */ +	[AB8500_EXT_SUPPLY3] = { +		.constraints = { +			.name = "ab8500-ext-supply3", +			.min_uV = 3400000, +			.max_uV = 3400000, +			.valid_ops_mask = REGULATOR_CHANGE_STATUS, +			.boot_on = 1, +		}, +		.num_consumer_supplies = +			ARRAY_SIZE(ab8500_ext_supply3_consumers), +		.consumer_supplies = ab8500_ext_supply3_consumers, +	}, +}; + +/* ab8505 regulator register initialization */ +static struct ab8500_regulator_reg_init ab8505_reg_init[] = { +	/* +	 * VarmRequestCtrl +	 * VsmpsCRequestCtrl +	 * VsmpsARequestCtrl +	 * VsmpsBRequestCtrl +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL1,       0x00, 0x00), +	/* +	 * VsafeRequestCtrl +	 * VpllRequestCtrl +	 * VanaRequestCtrl          = HP/LP depending on VxRequest +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL2,       0x30, 0x00), +	/* +	 * Vaux1RequestCtrl         = HP/LP depending on VxRequest +	 * Vaux2RequestCtrl         = HP/LP depending on VxRequest +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL3,       0xf0, 0x00), +	/* +	 * Vaux3RequestCtrl         = HP/LP depending on VxRequest +	 * SwHPReq                  = Control through SWValid disabled +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUREQUESTCTRL4,       0x07, 0x00), +	/* +	 * VsmpsASysClkReq1HPValid +	 * VsmpsBSysClkReq1HPValid +	 * VsafeSysClkReq1HPValid +	 * VanaSysClkReq1HPValid    = disabled +	 * VpllSysClkReq1HPValid +	 * Vaux1SysClkReq1HPValid   = disabled +	 * Vaux2SysClkReq1HPValid   = disabled +	 * Vaux3SysClkReq1HPValid   = disabled +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQ1HPVALID1, 0xe8, 0x00), +	/* +	 * VsmpsCSysClkReq1HPValid +	 * VarmSysClkReq1HPValid +	 * VbbSysClkReq1HPValid +	 * VsmpsMSysClkReq1HPValid +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQ1HPVALID2, 0x00, 0x00), +	/* +	 * VsmpsAHwHPReq1Valid +	 * VsmpsBHwHPReq1Valid +	 * VsafeHwHPReq1Valid +	 * VanaHwHPReq1Valid        = disabled +	 * VpllHwHPReq1Valid +	 * Vaux1HwHPreq1Valid       = disabled +	 * Vaux2HwHPReq1Valid       = disabled +	 * Vaux3HwHPReqValid        = disabled +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ1VALID1,     0xe8, 0x00), +	/* +	 * VsmpsMHwHPReq1Valid +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ1VALID2,     0x00, 0x00), +	/* +	 * VsmpsAHwHPReq2Valid +	 * VsmpsBHwHPReq2Valid +	 * VsafeHwHPReq2Valid +	 * VanaHwHPReq2Valid        = disabled +	 * VpllHwHPReq2Valid +	 * Vaux1HwHPReq2Valid       = disabled +	 * Vaux2HwHPReq2Valid       = disabled +	 * Vaux3HwHPReq2Valid       = disabled +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ2VALID1,     0xe8, 0x00), +	/* +	 * VsmpsMHwHPReq2Valid +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUHWHPREQ2VALID2,     0x00, 0x00), +	/** +	 * VsmpsCSwHPReqValid +	 * VarmSwHPReqValid +	 * VsmpsASwHPReqValid +	 * VsmpsBSwHPReqValid +	 * VsafeSwHPReqValid +	 * VanaSwHPReqValid +	 * VanaSwHPReqValid         = disabled +	 * VpllSwHPReqValid +	 * Vaux1SwHPReqValid        = disabled +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUSWHPREQVALID1,      0xa0, 0x00), +	/* +	 * Vaux2SwHPReqValid        = disabled +	 * Vaux3SwHPReqValid        = disabled +	 * VsmpsMSwHPReqValid +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUSWHPREQVALID2,      0x03, 0x00), +	/* +	 * SysClkReq2Valid1         = SysClkReq2 controlled +	 * SysClkReq3Valid1         = disabled +	 * SysClkReq4Valid1         = SysClkReq4 controlled +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQVALID1,    0x0e, 0x0a), +	/* +	 * SysClkReq2Valid2         = disabled +	 * SysClkReq3Valid2         = disabled +	 * SysClkReq4Valid2         = disabled +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUSYSCLKREQVALID2,    0x0e, 0x00), +	/* +	 * Vaux4SwHPReqValid +	 * Vaux4HwHPReq2Valid +	 * Vaux4HwHPReq1Valid +	 * Vaux4SysClkReq1HPValid +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUVAUX4REQVALID,    0x00, 0x00), +	/* +	 * VadcEna                  = disabled +	 * VintCore12Ena            = disabled +	 * VintCore12Sel            = 1.25 V +	 * VintCore12LP             = inactive (HP) +	 * VadcLP                   = inactive (HP) +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUMISC1,              0xfe, 0x10), +	/* +	 * VaudioEna                = disabled +	 * Vaux8Ena                 = disabled +	 * Vamic1Ena                = disabled +	 * Vamic2Ena                = disabled +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VAUDIOSUPPLY,           0x1e, 0x00), +	/* +	 * Vamic1_dzout             = high-Z when Vamic1 is disabled +	 * Vamic2_dzout             = high-Z when Vamic2 is disabled +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUCTRL1VAMIC,         0x03, 0x00), +	/* +	 * VsmpsARegu +	 * VsmpsASelCtrl +	 * VsmpsAAutoMode +	 * VsmpsAPWMMode +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VSMPSAREGU,    0x00, 0x00), +	/* +	 * VsmpsBRegu +	 * VsmpsBSelCtrl +	 * VsmpsBAutoMode +	 * VsmpsBPWMMode +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VSMPSBREGU,    0x00, 0x00), +	/* +	 * VsafeRegu +	 * VsafeSelCtrl +	 * VsafeAutoMode +	 * VsafePWMMode +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VSAFEREGU,    0x00, 0x00), +	/* +	 * VPll                     = Hw controlled (NOTE! PRCMU bits) +	 * VanaRegu                 = force off +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VPLLVANAREGU,           0x0f, 0x02), +	/* +	 * VextSupply1Regu          = force OFF (OTP_ExtSupply12LPnPolarity 1) +	 * VextSupply2Regu          = force OFF (OTP_ExtSupply12LPnPolarity 1) +	 * VextSupply3Regu          = force OFF (OTP_ExtSupply3LPnPolarity 0) +	 * ExtSupply2Bypass         = ExtSupply12LPn ball is 0 when Ena is 0 +	 * ExtSupply3Bypass         = ExtSupply3LPn ball is 0 when Ena is 0 +	 */ +	INIT_REGULATOR_REGISTER(AB8505_EXTSUPPLYREGU,          0xff, 0x30), +	/* +	 * Vaux1Regu                = force HP +	 * Vaux2Regu                = force off +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VAUX12REGU,             0x0f, 0x01), +	/* +	 * Vaux3Regu                = force off +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VRF1VAUX3REGU,          0x03, 0x00), +	/* +	 * VsmpsASel1 +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL1,    0x00, 0x00), +	/* +	 * VsmpsASel2 +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL2,    0x00, 0x00), +	/* +	 * VsmpsASel3 +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VSMPSASEL3,    0x00, 0x00), +	/* +	 * VsmpsBSel1 +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL1,    0x00, 0x00), +	/* +	 * VsmpsBSel2 +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL2,    0x00, 0x00), +	/* +	 * VsmpsBSel3 +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VSMPSBSEL3,    0x00, 0x00), +	/* +	 * VsafeSel1 +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VSAFESEL1,    0x00, 0x00), +	/* +	 * VsafeSel2 +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VSAFESEL2,    0x00, 0x00), +	/* +	 * VsafeSel3 +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VSAFESEL3,    0x00, 0x00), +	/* +	 * Vaux1Sel                 = 2.8 V +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VAUX1SEL,               0x0f, 0x0C), +	/* +	 * Vaux2Sel                 = 2.9 V +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VAUX2SEL,               0x0f, 0x0d), +	/* +	 * Vaux3Sel                 = 2.91 V +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VRF1VAUX3SEL,           0x07, 0x07), +	/* +	 * Vaux4RequestCtrl +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VAUX4REQCTRL,    0x00, 0x00), +	/* +	 * Vaux4Regu +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VAUX4REGU,    0x00, 0x00), +	/* +	 * Vaux4Sel +	 */ +	INIT_REGULATOR_REGISTER(AB8505_VAUX4SEL,    0x00, 0x00), +	/* +	 * Vaux1Disch               = short discharge time +	 * Vaux2Disch               = short discharge time +	 * Vaux3Disch               = short discharge time +	 * Vintcore12Disch          = short discharge time +	 * VTVoutDisch              = short discharge time +	 * VaudioDisch              = short discharge time +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH,          0xfc, 0x00), +	/* +	 * VanaDisch                = short discharge time +	 * Vaux8PullDownEna         = pulldown disabled when Vaux8 is disabled +	 * Vaux8Disch               = short discharge time +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH2,         0x16, 0x00), +	/* +	 * Vaux4Disch               = short discharge time +	 */ +	INIT_REGULATOR_REGISTER(AB8505_REGUCTRLDISCH3,         0x01, 0x00), +	/* +	 * Vaux5Sel +	 * Vaux5LP +	 * Vaux5Ena +	 * Vaux5Disch +	 * Vaux5DisSfst +	 * Vaux5DisPulld +	 */ +	INIT_REGULATOR_REGISTER(AB8505_CTRLVAUX5,              0x00, 0x00), +	/* +	 * Vaux6Sel +	 * Vaux6LP +	 * Vaux6Ena +	 * Vaux6DisPulld +	 */ +	INIT_REGULATOR_REGISTER(AB8505_CTRLVAUX6,              0x00, 0x00), +}; + +struct regulator_init_data ab8505_regulators[AB8505_NUM_REGULATORS] = { +	/* supplies to the display/camera */ +	[AB8505_LDO_AUX1] = { +		.constraints = { +			.name = "V-DISPLAY", +			.min_uV = 2800000, +			.max_uV = 3300000, +			.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | +					  REGULATOR_CHANGE_STATUS, +			.boot_on = 1, /* display is on at boot */ +		}, +		.num_consumer_supplies = ARRAY_SIZE(ab8500_vaux1_consumers), +		.consumer_supplies = ab8500_vaux1_consumers, +	}, +	/* supplies to the on-board eMMC */ +	[AB8505_LDO_AUX2] = { +		.constraints = { +			.name = "V-eMMC1", +			.min_uV = 1100000, +			.max_uV = 3300000, +			.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | +					  REGULATOR_CHANGE_STATUS | +					  REGULATOR_CHANGE_MODE, +			.valid_modes_mask = REGULATOR_MODE_NORMAL | +					    REGULATOR_MODE_IDLE, +		}, +		.num_consumer_supplies = ARRAY_SIZE(ab8500_vaux2_consumers), +		.consumer_supplies = ab8500_vaux2_consumers, +	}, +	/* supply for VAUX3, supplies to SDcard slots */ +	[AB8505_LDO_AUX3] = { +		.constraints = { +			.name = "V-MMC-SD", +			.min_uV = 1100000, +			.max_uV = 3300000, +			.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | +					  REGULATOR_CHANGE_STATUS | +					  REGULATOR_CHANGE_MODE, +			.valid_modes_mask = REGULATOR_MODE_NORMAL | +					    REGULATOR_MODE_IDLE, +		}, +		.num_consumer_supplies = ARRAY_SIZE(ab8500_vaux3_consumers), +		.consumer_supplies = ab8500_vaux3_consumers, +	}, +	/* supply for VAUX4, supplies to NFC and standalone secure element */ +	[AB8505_LDO_AUX4] = { +		.constraints = { +			.name = "V-NFC-SE", +			.min_uV = 1100000, +			.max_uV = 3300000, +			.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | +					  REGULATOR_CHANGE_STATUS | +					  REGULATOR_CHANGE_MODE, +			.valid_modes_mask = REGULATOR_MODE_NORMAL | +					    REGULATOR_MODE_IDLE, +		}, +		.num_consumer_supplies = ARRAY_SIZE(ab8505_vaux4_consumers), +		.consumer_supplies = ab8505_vaux4_consumers, +	}, +	/* supply for VAUX5, supplies to TBD */ +	[AB8505_LDO_AUX5] = { +		.constraints = { +			.name = "V-AUX5", +			.min_uV = 1050000, +			.max_uV = 2790000, +			.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | +					  REGULATOR_CHANGE_STATUS | +					  REGULATOR_CHANGE_MODE, +			.valid_modes_mask = REGULATOR_MODE_NORMAL | +					    REGULATOR_MODE_IDLE, +		}, +		.num_consumer_supplies = ARRAY_SIZE(ab8505_vaux5_consumers), +		.consumer_supplies = ab8505_vaux5_consumers, +	}, +	/* supply for VAUX6, supplies to TBD */ +	[AB8505_LDO_AUX6] = { +		.constraints = { +			.name = "V-AUX6", +			.min_uV = 1050000, +			.max_uV = 2790000, +			.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | +					  REGULATOR_CHANGE_STATUS | +					  REGULATOR_CHANGE_MODE, +			.valid_modes_mask = REGULATOR_MODE_NORMAL | +					    REGULATOR_MODE_IDLE, +		}, +		.num_consumer_supplies = ARRAY_SIZE(ab8505_vaux6_consumers), +		.consumer_supplies = ab8505_vaux6_consumers, +	}, +	/* supply for gpadc, ADC LDO */ +	[AB8505_LDO_ADC] = { +		.constraints = { +			.name = "V-ADC", +			.valid_ops_mask = REGULATOR_CHANGE_STATUS, +		}, +		.num_consumer_supplies = ARRAY_SIZE(ab8505_vadc_consumers), +		.consumer_supplies = ab8505_vadc_consumers, +	}, +	/* supply for ab8500-vaudio, VAUDIO LDO */ +	[AB8505_LDO_AUDIO] = { +		.constraints = { +			.name = "V-AUD", +			.valid_ops_mask = REGULATOR_CHANGE_STATUS, +		}, +		.num_consumer_supplies = ARRAY_SIZE(ab8500_vaud_consumers), +		.consumer_supplies = ab8500_vaud_consumers, +	}, +	/* supply for v-anamic1 VAMic1-LDO */ +	[AB8505_LDO_ANAMIC1] = { +		.constraints = { +			.name = "V-AMIC1", +			.valid_ops_mask = REGULATOR_CHANGE_STATUS | +					  REGULATOR_CHANGE_MODE, +			.valid_modes_mask = REGULATOR_MODE_NORMAL | +					    REGULATOR_MODE_IDLE, +		}, +		.num_consumer_supplies = ARRAY_SIZE(ab8500_vamic1_consumers), +		.consumer_supplies = ab8500_vamic1_consumers, +	}, +	/* supply for v-amic2, VAMIC2 LDO, reuse constants for AMIC1 */ +	[AB8505_LDO_ANAMIC2] = { +		.constraints = { +			.name = "V-AMIC2", +			.valid_ops_mask = REGULATOR_CHANGE_STATUS | +					  REGULATOR_CHANGE_MODE, +			.valid_modes_mask = REGULATOR_MODE_NORMAL | +					    REGULATOR_MODE_IDLE, +		}, +		.num_consumer_supplies = ARRAY_SIZE(ab8500_vamic2_consumers), +		.consumer_supplies = ab8500_vamic2_consumers, +	}, +	/* supply for v-aux8, VAUX8 LDO */ +	[AB8505_LDO_AUX8] = { +		.constraints = { +			.name = "V-AUX8", +			.valid_ops_mask = REGULATOR_CHANGE_STATUS, +		}, +		.num_consumer_supplies = ARRAY_SIZE(ab8505_vaux8_consumers), +		.consumer_supplies = ab8505_vaux8_consumers, +	}, +	/* supply for v-intcore12, VINTCORE12 LDO */ +	[AB8505_LDO_INTCORE] = { +		.constraints = { +			.name = "V-INTCORE", +			.min_uV = 1250000, +			.max_uV = 1350000, +			.input_uV = 1800000, +			.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | +					  REGULATOR_CHANGE_STATUS | +					  REGULATOR_CHANGE_MODE | +					  REGULATOR_CHANGE_DRMS, +			.valid_modes_mask = REGULATOR_MODE_NORMAL | +					    REGULATOR_MODE_IDLE, +		}, +		.num_consumer_supplies = ARRAY_SIZE(ab8500_vintcore_consumers), +		.consumer_supplies = ab8500_vintcore_consumers, +	}, +	/* supply for LDO USB */ +	[AB8505_LDO_USB] = { +		.constraints = { +			.name = "V-USB", +			.valid_ops_mask = REGULATOR_CHANGE_STATUS | +					  REGULATOR_CHANGE_MODE, +			.valid_modes_mask = REGULATOR_MODE_NORMAL | +					    REGULATOR_MODE_IDLE, +		}, +		.num_consumer_supplies = ARRAY_SIZE(ab8505_usb_consumers), +		.consumer_supplies = ab8505_usb_consumers, +	}, +	/* supply for U8500 CSI-DSI, VANA LDO */ +	[AB8505_LDO_ANA] = { +		.constraints = { +			.name = "V-CSI-DSI", +			.valid_ops_mask = REGULATOR_CHANGE_STATUS, +		}, +		.num_consumer_supplies = ARRAY_SIZE(ab8500_vana_consumers), +		.consumer_supplies = ab8500_vana_consumers, +	}, +}; + +struct ab8500_regulator_platform_data ab8500_regulator_plat_data = { +	.reg_init               = ab8500_reg_init, +	.num_reg_init           = ARRAY_SIZE(ab8500_reg_init), +	.regulator              = ab8500_regulators, +	.num_regulator          = ARRAY_SIZE(ab8500_regulators), +	.ext_regulator          = ab8500_ext_regulators, +	.num_ext_regulator      = ARRAY_SIZE(ab8500_ext_regulators), +}; + +/* Use the AB8500 init settings for AB8505 as they are the same right now */ +struct ab8500_regulator_platform_data ab8505_regulator_plat_data = { +	.reg_init               = ab8505_reg_init, +	.num_reg_init           = ARRAY_SIZE(ab8505_reg_init), +	.regulator              = ab8505_regulators, +	.num_regulator          = ARRAY_SIZE(ab8505_regulators), +}; + +static void ab8500_modify_reg_init(int id, u8 mask, u8 value) +{ +	int i; + +	if (cpu_is_u8520()) { +		for (i = ARRAY_SIZE(ab8505_reg_init) - 1; i >= 0; i--) { +			if (ab8505_reg_init[i].id == id) { +				u8 initval = ab8505_reg_init[i].value; +				initval = (initval & ~mask) | (value & mask); +				ab8505_reg_init[i].value = initval; + +				BUG_ON(mask & ~ab8505_reg_init[i].mask); +				return; +			} +		} +	} else { +		for (i = ARRAY_SIZE(ab8500_reg_init) - 1; i >= 0; i--) { +			if (ab8500_reg_init[i].id == id) { +				u8 initval = ab8500_reg_init[i].value; +				initval = (initval & ~mask) | (value & mask); +				ab8500_reg_init[i].value = initval; + +				BUG_ON(mask & ~ab8500_reg_init[i].mask); +				return; +			} +		} +	} + +	BUG_ON(1); +} + +void mop500_regulator_init(void) +{ +	struct regulator_init_data *regulator; + +	/* +	 * Temporarily turn on Vaux2 on 8520 machine +	 */ +	if (cpu_is_u8520()) { +		/* Vaux2 initialized to be on */ +		ab8500_modify_reg_init(AB8505_VAUX12REGU, 0x0f, 0x05); +	} + +	/* +	 * Handle AB8500_EXT_SUPPLY2 on HREFP_V20_V50 boards (do it for +	 * all HREFP_V20 boards) +	 */ +	if (cpu_is_u8500v20()) { +		/* VextSupply2RequestCtrl =  HP/OFF depending on VxRequest */ +		ab8500_modify_reg_init(AB8500_REGUREQUESTCTRL3, 0x01, 0x01); + +		/* VextSupply2SysClkReq1HPValid = SysClkReq1 controlled */ +		ab8500_modify_reg_init(AB8500_REGUSYSCLKREQ1HPVALID2, +			0x20, 0x20); + +		/* VextSupply2 = force HP at initialization */ +		ab8500_modify_reg_init(AB8500_EXTSUPPLYREGU, 0x0c, 0x04); + +		/* enable VextSupply2 during platform active */ +		regulator = &ab8500_ext_regulators[AB8500_EXT_SUPPLY2]; +		regulator->constraints.always_on = 1; + +		/* disable VextSupply2 in suspend */ +		regulator = &ab8500_ext_regulators[AB8500_EXT_SUPPLY2]; +		regulator->constraints.state_mem.disabled = 1; +		regulator->constraints.state_standby.disabled = 1; + +		/* enable VextSupply2 HW control (used in suspend) */ +		regulator->driver_data = (void *)&ab8500_ext_supply2; +	} +} diff --git a/arch/arm/mach-ux500/board-mop500-regulators.h b/arch/arm/mach-ux500/board-mop500-regulators.h index 78a0642a220..039f5132c37 100644 --- a/arch/arm/mach-ux500/board-mop500-regulators.h +++ b/arch/arm/mach-ux500/board-mop500-regulators.h @@ -14,10 +14,12 @@  #include <linux/regulator/machine.h>  #include <linux/regulator/ab8500.h> -extern struct ab8500_regulator_reg_init -ab8500_regulator_reg_init[AB8500_NUM_REGULATOR_REGISTERS]; -extern struct regulator_init_data ab8500_regulators[AB8500_NUM_REGULATORS]; +extern struct ab8500_regulator_platform_data ab8500_regulator_plat_data; +extern struct ab8500_regulator_platform_data ab8505_regulator_plat_data;  extern struct regulator_init_data tps61052_regulator;  extern struct regulator_init_data gpio_en_3v3_regulator; +extern struct regulator_init_data sdi0_reg_init_data; + +void mop500_regulator_init(void);  #endif diff --git a/arch/arm/mach-ux500/board-mop500-sdi.c b/arch/arm/mach-ux500/board-mop500-sdi.c index 051b62c2710..0ef38775a0c 100644 --- a/arch/arm/mach-ux500/board-mop500-sdi.c +++ b/arch/arm/mach-ux500/board-mop500-sdi.c @@ -14,9 +14,9 @@  #include <linux/platform_data/dma-ste-dma40.h>  #include <asm/mach-types.h> -#include <mach/devices.h> -#include <mach/hardware.h> +#include "devices.h" +#include "db8500-regs.h"  #include "devices-db8500.h"  #include "board-mop500.h"  #include "ste-dma40-db8500.h" @@ -31,35 +31,6 @@   * SDI 0 (MicroSD slot)   */ -/* GPIO pins used by the sdi0 level shifter */ -static int sdi0_en = -1; -static int sdi0_vsel = -1; - -static int mop500_sdi0_ios_handler(struct device *dev, struct mmc_ios *ios) -{ -	switch (ios->power_mode) { -	case MMC_POWER_UP: -	case MMC_POWER_ON: -		/* -		 * Level shifter voltage should depend on vdd to when deciding -		 * on either 1.8V or 2.9V. Once the decision has been made the -		 * level shifter must be disabled and re-enabled with a changed -		 * select signal in order to switch the voltage. Since there is -		 * no framework support yet for indicating 1.8V in vdd, use the -		 * default 2.9V. -		 */ -		gpio_direction_output(sdi0_vsel, 0); -		gpio_direction_output(sdi0_en, 1); -		break; -	case MMC_POWER_OFF: -		gpio_direction_output(sdi0_vsel, 0); -		gpio_direction_output(sdi0_en, 0); -		break; -	} - -	return 0; -} -  #ifdef CONFIG_STE_DMA40  struct stedma40_chan_cfg mop500_sdi0_dma_cfg_rx = {  	.mode = STEDMA40_MODE_LOGICAL, @@ -81,7 +52,6 @@ static struct stedma40_chan_cfg mop500_sdi0_dma_cfg_tx = {  #endif  struct mmci_platform_data mop500_sdi0_data = { -	.ios_handler	= mop500_sdi0_ios_handler,  	.ocr_mask	= MMC_VDD_29_30,  	.f_max		= 50000000,  	.capabilities	= MMC_CAP_4_BIT_DATA | @@ -101,22 +71,6 @@ struct mmci_platform_data mop500_sdi0_data = {  static void sdi0_configure(struct device *parent)  { -	int ret; - -	ret = gpio_request(sdi0_en, "level shifter enable"); -	if (!ret) -		ret = gpio_request(sdi0_vsel, -				   "level shifter 1v8-3v select"); - -	if (ret) { -		pr_warning("unable to config sdi0 gpios for level shifter.\n"); -		return; -	} - -	/* Select the default 2.9V and enable level shifter */ -	gpio_direction_output(sdi0_vsel, 0); -	gpio_direction_output(sdi0_en, 1); -  	/* Add the device, force v2 to subrevision 1 */  	db8500_add_sdi0(parent, &mop500_sdi0_data, U8500_SDI_V2_PERIPHID);  } @@ -124,8 +78,6 @@ static void sdi0_configure(struct device *parent)  void mop500_sdi_tc35892_init(struct device *parent)  {  	mop500_sdi0_data.gpio_cd = GPIO_SDMMC_CD; -	sdi0_en = GPIO_SDMMC_EN; -	sdi0_vsel = GPIO_SDMMC_1V8_3V_SEL;  	sdi0_configure(parent);  } @@ -264,8 +216,6 @@ void __init snowball_sdi_init(struct device *parent)  	/* External Micro SD slot */  	mop500_sdi0_data.gpio_cd = SNOWBALL_SDMMC_CD_GPIO;  	mop500_sdi0_data.cd_invert = true; -	sdi0_en = SNOWBALL_SDMMC_EN_GPIO; -	sdi0_vsel = SNOWBALL_SDMMC_1V8_3V_GPIO;  	sdi0_configure(parent);  } @@ -277,8 +227,6 @@ void __init hrefv60_sdi_init(struct device *parent)  	db8500_add_sdi4(parent, &mop500_sdi4_data, U8500_SDI_V2_PERIPHID);  	/* External Micro SD slot */  	mop500_sdi0_data.gpio_cd = HREFV60_SDMMC_CD_GPIO; -	sdi0_en = HREFV60_SDMMC_EN_GPIO; -	sdi0_vsel = HREFV60_SDMMC_1V8_3V_GPIO;  	sdi0_configure(parent);  	/* WLAN SDIO channel */  	db8500_add_sdi1(parent, &mop500_sdi1_data, U8500_SDI_V2_PERIPHID); diff --git a/arch/arm/mach-ux500/board-mop500-u8500uib.c b/arch/arm/mach-ux500/board-mop500-u8500uib.c index ead91c968ff..d397c19570a 100644 --- a/arch/arm/mach-ux500/board-mop500-u8500uib.c +++ b/arch/arm/mach-ux500/board-mop500-u8500uib.c @@ -12,12 +12,15 @@  #include <linux/mfd/tc3589x.h>  #include <linux/input/matrix_keypad.h> -#include <mach/irqs.h> +#include "irqs.h"  #include "board-mop500.h" -/* Dummy data that can be overridden by staging driver */ -struct i2c_board_info __initdata __weak mop500_i2c3_devices_u8500[] = { +static struct i2c_board_info __initdata mop500_i2c3_devices_u8500[] = { +	{ +		I2C_BOARD_INFO("synaptics_rmi4_i2c", 0x4B), +		.irq = NOMADIK_GPIO_TO_IRQ(84), +	},  };  /* diff --git a/arch/arm/mach-ux500/board-mop500-uib.c b/arch/arm/mach-ux500/board-mop500-uib.c index 7037d3687e9..bdaa422da02 100644 --- a/arch/arm/mach-ux500/board-mop500-uib.c +++ b/arch/arm/mach-ux500/board-mop500-uib.c @@ -11,7 +11,6 @@  #include <linux/init.h>  #include <linux/i2c.h> -#include <mach/hardware.h>  #include "board-mop500.h"  #include "id.h" diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c index b03457881c4..a15dd6b63a8 100644 --- a/arch/arm/mach-ux500/board-mop500.c +++ b/arch/arm/mach-ux500/board-mop500.c @@ -12,6 +12,7 @@  #include <linux/init.h>  #include <linux/interrupt.h>  #include <linux/platform_device.h> +#include <linux/clk.h>  #include <linux/io.h>  #include <linux/i2c.h>  #include <linux/platform_data/i2c-nomadik.h> @@ -24,6 +25,8 @@  #include <linux/mfd/abx500/ab8500.h>  #include <linux/regulator/ab8500.h>  #include <linux/regulator/fixed.h> +#include <linux/regulator/driver.h> +#include <linux/regulator/gpio-regulator.h>  #include <linux/mfd/tc3589x.h>  #include <linux/mfd/tps6105x.h>  #include <linux/mfd/abx500/ab8500-gpio.h> @@ -41,13 +44,13 @@  #include <asm/mach-types.h>  #include <asm/mach/arch.h> -#include <mach/hardware.h> -#include <mach/setup.h> -#include <mach/devices.h> -#include <mach/irqs.h> +#include "setup.h" +#include "devices.h" +#include "irqs.h"  #include <linux/platform_data/crypto-ux500.h>  #include "ste-dma40-db8500.h" +#include "db8500-regs.h"  #include "devices-db8500.h"  #include "board-mop500.h"  #include "board-mop500-regulators.h" @@ -89,6 +92,37 @@ static struct platform_device snowball_gpio_en_3v3_regulator_dev = {         },  }; +/* Dynamically populated. */ +static struct gpio sdi0_reg_gpios[] = { +	{ 0, GPIOF_OUT_INIT_LOW, "mmci_vsel" }, +}; + +static struct gpio_regulator_state sdi0_reg_states[] = { +	{ .value = 2900000, .gpios = (0 << 0) }, +	{ .value = 1800000, .gpios = (1 << 0) }, +}; + +static struct gpio_regulator_config sdi0_reg_info = { +	.supply_name		= "ext-mmc-level-shifter", +	.gpios			= sdi0_reg_gpios, +	.nr_gpios		= ARRAY_SIZE(sdi0_reg_gpios), +	.states			= sdi0_reg_states, +	.nr_states		= ARRAY_SIZE(sdi0_reg_states), +	.type			= REGULATOR_VOLTAGE, +	.enable_high		= 1, +	.enabled_at_boot	= 0, +	.init_data		= &sdi0_reg_init_data, +	.startup_delay		= 100, +}; + +static struct platform_device sdi0_regulator = { +	.name = "gpio-regulator", +	.id   = -1, +	.dev  = { +		.platform_data = &sdi0_reg_info, +	}, +}; +  static struct abx500_gpio_platform_data ab8500_gpio_pdata = {  	.gpio_base		= MOP500_AB8500_PIN_GPIO(1),  }; @@ -198,71 +232,11 @@ static struct platform_device snowball_sbnet_dev = {  struct ab8500_platform_data ab8500_platdata = {  	.irq_base	= MOP500_AB8500_IRQ_BASE, -	.regulator_reg_init = ab8500_regulator_reg_init, -	.num_regulator_reg_init	= ARRAY_SIZE(ab8500_regulator_reg_init), -	.regulator	= ab8500_regulators, -	.num_regulator	= ARRAY_SIZE(ab8500_regulators), +	.regulator	= &ab8500_regulator_plat_data,  	.gpio		= &ab8500_gpio_pdata,  	.codec		= &ab8500_codec_pdata,  }; -/* - * Thermal Sensor - */ - -static struct resource db8500_thsens_resources[] = { -	{ -		.name = "IRQ_HOTMON_LOW", -		.start  = IRQ_PRCMU_HOTMON_LOW, -		.end    = IRQ_PRCMU_HOTMON_LOW, -		.flags  = IORESOURCE_IRQ, -	}, -	{ -		.name = "IRQ_HOTMON_HIGH", -		.start  = IRQ_PRCMU_HOTMON_HIGH, -		.end    = IRQ_PRCMU_HOTMON_HIGH, -		.flags  = IORESOURCE_IRQ, -	}, -}; - -static struct db8500_thsens_platform_data db8500_thsens_data = { -	.trip_points[0] = { -		.temp = 70000, -		.type = THERMAL_TRIP_ACTIVE, -		.cdev_name = { -			[0] = "thermal-cpufreq-0", -		}, -	}, -	.trip_points[1] = { -		.temp = 75000, -		.type = THERMAL_TRIP_ACTIVE, -		.cdev_name = { -			[0] = "thermal-cpufreq-0", -		}, -	}, -	.trip_points[2] = { -		.temp = 80000, -		.type = THERMAL_TRIP_ACTIVE, -		.cdev_name = { -			[0] = "thermal-cpufreq-0", -		}, -	}, -	.trip_points[3] = { -		.temp = 85000, -		.type = THERMAL_TRIP_CRITICAL, -	}, -	.num_trips = 4, -}; - -static struct platform_device u8500_thsens_device = { -	.name           = "db8500-thermal", -	.resource       = db8500_thsens_resources, -	.num_resources  = ARRAY_SIZE(db8500_thsens_resources), -	.dev	= { -		.platform_data	= &db8500_thsens_data, -	}, -}; -  static struct platform_device u8500_cpufreq_cooling_device = {  	.name           = "db8500-cpufreq-cooling",  }; @@ -439,6 +413,15 @@ static void mop500_prox_deactivate(struct device *dev)  	regulator_put(prox_regulator);  } +void mop500_snowball_ethernet_clock_enable(void) +{ +	struct clk *clk; + +	clk = clk_get_sys("fsmc", NULL); +	if (!IS_ERR(clk)) +		clk_prepare_enable(clk); +} +  static struct cryp_platform_data u8500_cryp1_platform_data = {  		.mem_to_engine = {  				.dir = STEDMA40_MEM_TO_PERIPH, @@ -481,6 +464,7 @@ static struct hash_platform_data u8500_hash1_platform_data = {  /* add any platform devices here - TODO */  static struct platform_device *mop500_platform_devs[] __initdata = {  	&mop500_gpio_keys_device, +	&sdi0_regulator,  };  #ifdef CONFIG_STE_DMA40 @@ -622,8 +606,8 @@ static struct platform_device *snowball_platform_devs[] __initdata = {  	&snowball_key_dev,  	&snowball_sbnet_dev,  	&snowball_gpio_en_3v3_regulator_dev, -	&u8500_thsens_device,  	&u8500_cpufreq_cooling_device, +	&sdi0_regulator,  };  static void __init mop500_init_machine(void) @@ -635,6 +619,9 @@ static void __init mop500_init_machine(void)  	platform_device_register(&db8500_prcmu_device);  	mop500_gpio_keys[0].gpio = GPIO_PROX_SENSOR; +	sdi0_reg_info.enable_gpio = GPIO_SDMMC_EN; +	sdi0_reg_info.gpios[0].gpio = GPIO_SDMMC_1V8_3V_SEL; +  	mop500_pinmaps_init();  	parent = u8500_init_devices(&ab8500_platdata); @@ -668,6 +655,10 @@ static void __init snowball_init_machine(void)  	int i;  	platform_device_register(&db8500_prcmu_device); + +	sdi0_reg_info.enable_gpio = SNOWBALL_SDMMC_EN_GPIO; +	sdi0_reg_info.gpios[0].gpio = SNOWBALL_SDMMC_1V8_3V_GPIO; +  	snowball_pinmaps_init();  	parent = u8500_init_devices(&ab8500_platdata); @@ -683,6 +674,8 @@ static void __init snowball_init_machine(void)  	mop500_audio_init(parent);  	mop500_uart_init(parent); +	mop500_snowball_ethernet_clock_enable(); +  	/* This board has full regulator constraints */  	regulator_has_full_constraints();  } @@ -701,6 +694,9 @@ static void __init hrefv60_init_machine(void)  	 */  	mop500_gpio_keys[0].gpio = HREFV60_PROX_SENSE_GPIO; +	sdi0_reg_info.enable_gpio = HREFV60_SDMMC_EN_GPIO; +	sdi0_reg_info.gpios[0].gpio = HREFV60_SDMMC_1V8_3V_GPIO; +  	hrefv60_pinmaps_init();  	parent = u8500_init_devices(&ab8500_platdata); diff --git a/arch/arm/mach-ux500/board-mop500.h b/arch/arm/mach-ux500/board-mop500.h index eaa605f5d90..49514b82503 100644 --- a/arch/arm/mach-ux500/board-mop500.h +++ b/arch/arm/mach-ux500/board-mop500.h @@ -8,8 +8,8 @@  #define __BOARD_MOP500_H  /* For NOMADIK_NR_GPIO */ -#include <mach/irqs.h> -#include <mach/msp.h> +#include "irqs.h" +#include <linux/platform_data/asoc-ux500-msp.h>  #include <linux/amba/mmci.h>  /* Snowball specific GPIO assignments, this board has no GPIO expander */ @@ -104,6 +104,7 @@ void __init mop500_pinmaps_init(void);  void __init snowball_pinmaps_init(void);  void __init hrefv60_pinmaps_init(void);  void mop500_audio_init(struct device *parent); +void mop500_snowball_ethernet_clock_enable(void);  int __init mop500_uib_init(void);  void mop500_uib_i2c_add(int busnum, struct i2c_board_info *info, diff --git a/arch/arm/mach-ux500/cache-l2x0.c b/arch/arm/mach-ux500/cache-l2x0.c index 1c1609da76c..f58615b5c60 100644 --- a/arch/arm/mach-ux500/cache-l2x0.c +++ b/arch/arm/mach-ux500/cache-l2x0.c @@ -9,8 +9,8 @@  #include <asm/cacheflush.h>  #include <asm/hardware/cache-l2x0.h> -#include <mach/hardware.h> +#include "db8500-regs.h"  #include "id.h"  static void __iomem *l2x0_base; @@ -47,8 +47,8 @@ static int __init ux500_l2x0_init(void)  	/* Unlock before init */  	ux500_l2x0_unlock(); -	/* DB9540's L2 has 128KB way size */ -	if (cpu_is_u9540()) +	/* DBx540's L2 has 128KB way size */ +	if (cpu_is_ux540_family())  		/* 128KB way size */  		aux_val |= (0x4 << L2X0_AUX_CTRL_WAY_SIZE_SHIFT);  	else diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c index 19235cf7bbe..995928ba22f 100644 --- a/arch/arm/mach-ux500/cpu-db8500.c +++ b/arch/arm/mach-ux500/cpu-db8500.c @@ -28,15 +28,13 @@  #include <asm/mach/map.h>  #include <asm/mach/arch.h> -#include <mach/hardware.h> -#include <mach/setup.h> -#include <mach/devices.h> -#include <mach/db8500-regs.h> -#include <mach/irqs.h> +#include "setup.h" +#include "devices.h" +#include "irqs.h"  #include "devices-db8500.h"  #include "ste-dma40-db8500.h" - +#include "db8500-regs.h"  #include "board-mop500.h"  #include "id.h" @@ -94,8 +92,6 @@ void __init u8500_map_io(void)  		iotable_init(u9540_io_desc, ARRAY_SIZE(u9540_io_desc));  	else  		iotable_init(u8500_io_desc, ARRAY_SIZE(u8500_io_desc)); - -	_PRCMU_BASE = __io_address(U8500_PRCMU_BASE);  }  static struct resource db8500_pmu_resources[] = { @@ -282,6 +278,7 @@ static struct of_dev_auxdata u8500_auxdata_lookup[] __initdata = {  	OF_DEV_AUXDATA("st,nomadik-i2c", 0x8012a000, "nmk-i2c.4", NULL),  	OF_DEV_AUXDATA("stericsson,db8500-prcmu", 0x80157000, "db8500-prcmu",  			&db8500_prcmu_pdata), +	OF_DEV_AUXDATA("smsc,lan9115", 0x50000000, "smsc911x", NULL),  	/* Requires device name bindings. */  	OF_DEV_AUXDATA("stericsson,nmk-pinctrl", U8500_PRCMU_BASE,  		"pinctrl-db8500", NULL), @@ -312,9 +309,10 @@ static void __init u8500_init_machine(void)  	/* Pinmaps must be in place before devices register */  	if (of_machine_is_compatible("st-ericsson,mop500"))  		mop500_pinmaps_init(); -	else if (of_machine_is_compatible("calaosystems,snowball-a9500")) +	else if (of_machine_is_compatible("calaosystems,snowball-a9500")) {  		snowball_pinmaps_init(); -	else if (of_machine_is_compatible("st-ericsson,hrefv60+")) +		mop500_snowball_ethernet_clock_enable(); +	} else if (of_machine_is_compatible("st-ericsson,hrefv60+"))  		hrefv60_pinmaps_init();  	else if (of_machine_is_compatible("st-ericsson,ccu9540")) {}  		/* TODO: Add pinmaps for ccu9540 board. */ diff --git a/arch/arm/mach-ux500/cpu.c b/arch/arm/mach-ux500/cpu.c index 002da9a369d..b6145ea5164 100644 --- a/arch/arm/mach-ux500/cpu.c +++ b/arch/arm/mach-ux500/cpu.c @@ -8,7 +8,7 @@  #include <linux/platform_device.h>  #include <linux/io.h> -#include <linux/mfd/db8500-prcmu.h> +#include <linux/mfd/dbx500-prcmu.h>  #include <linux/clksrc-dbx500-prcmu.h>  #include <linux/sys_soc.h>  #include <linux/err.h> @@ -20,18 +20,17 @@  #include <linux/irqchip.h>  #include <linux/irqchip/arm-gic.h>  #include <linux/platform_data/clk-ux500.h> +#include <linux/platform_data/arm-ux500-pm.h>  #include <asm/mach/map.h> -#include <mach/hardware.h> -#include <mach/setup.h> -#include <mach/devices.h> +#include "setup.h" +#include "devices.h"  #include "board-mop500.h" +#include "db8500-regs.h"  #include "id.h" -void __iomem *_PRCMU_BASE; -  /*   * FIXME: Should we set up the GPIO domain here?   * @@ -68,13 +67,23 @@ void __init ux500_init_irq(void)  	 * Init clocks here so that they are available for system timer  	 * initialization.  	 */ -	if (cpu_is_u8500_family() || cpu_is_u9540()) -		db8500_prcmu_early_init(); - -	if (cpu_is_u8500_family() || cpu_is_u9540()) -		u8500_clk_init(); -	else if (cpu_is_u8540()) +	if (cpu_is_u8500_family()) { +		prcmu_early_init(U8500_PRCMU_BASE, SZ_8K - 1); +		ux500_pm_init(U8500_PRCMU_BASE, SZ_8K - 1); +		u8500_clk_init(U8500_CLKRST1_BASE, U8500_CLKRST2_BASE, +			       U8500_CLKRST3_BASE, U8500_CLKRST5_BASE, +			       U8500_CLKRST6_BASE); +	} else if (cpu_is_u9540()) { +		prcmu_early_init(U8500_PRCMU_BASE, SZ_8K - 1); +		ux500_pm_init(U8500_PRCMU_BASE, SZ_8K - 1); +		u8500_clk_init(U8500_CLKRST1_BASE, U8500_CLKRST2_BASE, +			       U8500_CLKRST3_BASE, U8500_CLKRST5_BASE, +			       U8500_CLKRST6_BASE); +	} else if (cpu_is_u8540()) { +		prcmu_early_init(U8500_PRCMU_BASE, SZ_8K + SZ_4K - 1); +		ux500_pm_init(U8500_PRCMU_BASE, SZ_8K + SZ_4K - 1);  		u8540_clk_init(); +	}  }  void __init ux500_init_late(void) diff --git a/arch/arm/mach-ux500/cpuidle.c b/arch/arm/mach-ux500/cpuidle.c index ce9149302cc..317a2be129f 100644 --- a/arch/arm/mach-ux500/cpuidle.c +++ b/arch/arm/mach-ux500/cpuidle.c @@ -11,18 +11,19 @@  #include <linux/module.h>  #include <linux/cpuidle.h> -#include <linux/clockchips.h>  #include <linux/spinlock.h>  #include <linux/atomic.h>  #include <linux/smp.h>  #include <linux/mfd/dbx500-prcmu.h> +#include <linux/platform_data/arm-ux500-pm.h>  #include <asm/cpuidle.h>  #include <asm/proc-fns.h> +#include "db8500-regs.h" +  static atomic_t master = ATOMIC_INIT(0);  static DEFINE_SPINLOCK(master_lock); -static DEFINE_PER_CPU(struct cpuidle_device, ux500_cpuidle_device);  static inline int ux500_enter_idle(struct cpuidle_device *dev,  				   struct cpuidle_driver *drv, int index) @@ -30,8 +31,6 @@ static inline int ux500_enter_idle(struct cpuidle_device *dev,  	int this_cpu = smp_processor_id();  	bool recouple = false; -	clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, &this_cpu); -  	if (atomic_inc_return(&master) == num_online_cpus()) {  		/* With this lock, we prevent the other cpu to exit and enter @@ -91,22 +90,20 @@ out:  		spin_unlock(&master_lock);  	} -	clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &this_cpu); -  	return index;  }  static struct cpuidle_driver ux500_idle_driver = {  	.name = "ux500_idle",  	.owner = THIS_MODULE, -	.en_core_tk_irqen = 1,  	.states = {  		ARM_CPUIDLE_WFI_STATE,  		{  			.enter		  = ux500_enter_idle,  			.exit_latency	  = 70,  			.target_residency = 260, -			.flags		  = CPUIDLE_FLAG_TIME_VALID, +			.flags		  = CPUIDLE_FLAG_TIME_VALID | +			                    CPUIDLE_FLAG_TIMER_STOP,  			.name		  = "ApIdle",  			.desc		  = "ARM Retention",  		}, @@ -115,59 +112,13 @@ static struct cpuidle_driver ux500_idle_driver = {  	.state_count = 2,  }; -/* - * For each cpu, setup the broadcast timer because we will - * need to migrate the timers for the states >= ApIdle. - */ -static void ux500_setup_broadcast_timer(void *arg) -{ -	int cpu = smp_processor_id(); -	clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ON, &cpu); -} -  int __init ux500_idle_init(void)  { -	int ret, cpu; -	struct cpuidle_device *device; - -        /* Configure wake up reasons */ +	/* Configure wake up reasons */  	prcmu_enable_wakeups(PRCMU_WAKEUP(ARM) | PRCMU_WAKEUP(RTC) |  			     PRCMU_WAKEUP(ABB)); -	/* -	 * Configure the timer broadcast for each cpu, that must -	 * be done from the cpu context, so we use a smp cross -	 * call with 'on_each_cpu'. -	 */ -	on_each_cpu(ux500_setup_broadcast_timer, NULL, 1); - -	ret = cpuidle_register_driver(&ux500_idle_driver); -	if (ret) { -		printk(KERN_ERR "failed to register ux500 idle driver\n"); -		return ret; -	} - -	for_each_online_cpu(cpu) { -		device = &per_cpu(ux500_cpuidle_device, cpu); -		device->cpu = cpu; -		ret = cpuidle_register_device(device); -		if (ret) { -			printk(KERN_ERR "Failed to register cpuidle " -			       "device for cpu%d\n", cpu); -			goto out_unregister; -		} -	} -out: -	return ret; - -out_unregister: -	for_each_online_cpu(cpu) { -		device = &per_cpu(ux500_cpuidle_device, cpu); -		cpuidle_unregister_device(device); -	} - -	cpuidle_unregister_driver(&ux500_idle_driver); -	goto out; +	return cpuidle_register(&ux500_idle_driver, NULL);  }  device_initcall(ux500_idle_init); diff --git a/arch/arm/mach-ux500/include/mach/db8500-regs.h b/arch/arm/mach-ux500/db8500-regs.h index 1530d493879..b2d7a0b9862 100644 --- a/arch/arm/mach-ux500/include/mach/db8500-regs.h +++ b/arch/arm/mach-ux500/db8500-regs.h @@ -170,4 +170,32 @@  /* SoC identification number information */  #define U8500_BB_UID_BASE      (U8500_BACKUPRAM1_BASE + 0xFC0) +/* Offsets to specific addresses in some IP blocks for DMA */ +#define MSP_TX_RX_REG_OFFSET	0 +#define CRYP1_RX_REG_OFFSET	0x10 +#define CRYP1_TX_REG_OFFSET	0x8 +#define HASH1_TX_REG_OFFSET	0x4 + +/* + * Macros to get at IO space when running virtually + * We dont map all the peripherals, let ioremap do + * this for us. We map only very basic peripherals here. + */ +#define U8500_IO_VIRTUAL	0xf0000000 +#define U8500_IO_PHYSICAL	0xa0000000 +/* This is where we map in the ROM to check ASIC IDs */ +#define UX500_VIRT_ROM		0xf0000000 + +/* This macro is used in assembly, so no cast */ +#define IO_ADDRESS(x)           \ +	(((x) & 0x0fffffff) + (((x) >> 4) & 0x0f000000) + U8500_IO_VIRTUAL) + +/* typesafe io address */ +#define __io_address(n)		IOMEM(IO_ADDRESS(n)) + +/* Used by some plat-nomadik code */ +#define io_p2v(n)		__io_address(n) + +#define ARRAY_AND_SIZE(x)	(x), ARRAY_SIZE(x) +  #endif diff --git a/arch/arm/mach-ux500/devices-common.c b/arch/arm/mach-ux500/devices-common.c index 16b5f71e697..f71b3d7bd4f 100644 --- a/arch/arm/mach-ux500/devices-common.c +++ b/arch/arm/mach-ux500/devices-common.c @@ -13,8 +13,7 @@  #include <linux/platform_device.h>  #include <linux/platform_data/pinctrl-nomadik.h> -#include <mach/hardware.h> -#include <mach/irqs.h> +#include "irqs.h"  #include "devices-common.h" diff --git a/arch/arm/mach-ux500/devices-db8500.c b/arch/arm/mach-ux500/devices-db8500.c index f3d9419f75d..1cf94ce0fee 100644 --- a/arch/arm/mach-ux500/devices-db8500.c +++ b/arch/arm/mach-ux500/devices-db8500.c @@ -15,10 +15,10 @@  #include <linux/platform_data/dma-ste-dma40.h>  #include <linux/mfd/dbx500-prcmu.h> -#include <mach/hardware.h> -#include <mach/setup.h> -#include <mach/irqs.h> +#include "setup.h" +#include "irqs.h" +#include "db8500-regs.h"  #include "devices-db8500.h"  #include "ste-dma40-db8500.h" @@ -199,6 +199,8 @@ struct platform_device u8500_ske_keypad_device = {  struct prcmu_pdata db8500_prcmu_pdata = {  	.ab_platdata	= &ab8500_platdata, +	.ab_irq		= IRQ_DB8500_AB8500, +	.irq_base	= IRQ_PRCMU_BASE,  	.version_offset	= DB8500_PRCMU_FW_VERSION_OFFSET,  	.legacy_offset	= DB8500_PRCMU_LEGACY_OFFSET,  }; diff --git a/arch/arm/mach-ux500/devices-db8500.h b/arch/arm/mach-ux500/devices-db8500.h index dbcb35c48f0..321998320f9 100644 --- a/arch/arm/mach-ux500/devices-db8500.h +++ b/arch/arm/mach-ux500/devices-db8500.h @@ -9,7 +9,8 @@  #define __DEVICES_DB8500_H  #include <linux/platform_data/usb-musb-ux500.h> -#include <mach/irqs.h> +#include "irqs.h" +#include "db8500-regs.h"  #include "devices-common.h"  struct ske_keypad_platform_data; diff --git a/arch/arm/mach-ux500/devices.c b/arch/arm/mach-ux500/devices.c index ea0a2f92ca7..0f9e52b9593 100644 --- a/arch/arm/mach-ux500/devices.c +++ b/arch/arm/mach-ux500/devices.c @@ -11,8 +11,9 @@  #include <linux/io.h>  #include <linux/amba/bus.h> -#include <mach/hardware.h> -#include <mach/setup.h> +#include "setup.h" + +#include "db8500-regs.h"  void __init amba_add_devices(struct amba_device *devs[], int num)  { diff --git a/arch/arm/mach-ux500/include/mach/devices.h b/arch/arm/mach-ux500/devices.h index cbc6f1e4104..cbc6f1e4104 100644 --- a/arch/arm/mach-ux500/include/mach/devices.h +++ b/arch/arm/mach-ux500/devices.h diff --git a/arch/arm/mach-ux500/hotplug.c b/arch/arm/mach-ux500/hotplug.c index 2f6af259015..2bc00b085e3 100644 --- a/arch/arm/mach-ux500/hotplug.c +++ b/arch/arm/mach-ux500/hotplug.c @@ -12,10 +12,9 @@  #include <linux/errno.h>  #include <linux/smp.h> -#include <asm/cacheflush.h>  #include <asm/smp_plat.h> -#include <mach/setup.h> +#include "setup.h"  /*   * platform-specific code to shutdown a CPU @@ -24,8 +23,6 @@   */  void __ref ux500_cpu_die(unsigned int cpu)  { -	flush_cache_all(); -  	/* directly enter low power state, skipping secure registers */  	for (;;) {  		__asm__ __volatile__("dsb\n\t" "wfi\n\t" diff --git a/arch/arm/mach-ux500/id.c b/arch/arm/mach-ux500/id.c index 9f951842e1e..0d33d1a0695 100644 --- a/arch/arm/mach-ux500/id.c +++ b/arch/arm/mach-ux500/id.c @@ -14,9 +14,9 @@  #include <asm/cacheflush.h>  #include <asm/mach/map.h> -#include <mach/hardware.h> -#include <mach/setup.h> +#include "setup.h" +#include "db8500-regs.h"  #include "id.h"  struct dbx500_asic_id dbx500_id; diff --git a/arch/arm/mach-ux500/include/mach/debug-macro.S b/arch/arm/mach-ux500/include/mach/debug-macro.S deleted file mode 100644 index 67035223334..00000000000 --- a/arch/arm/mach-ux500/include/mach/debug-macro.S +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Debugging macro include header - * - *  Copyright (C) 2009 ST-Ericsson - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - */ -#include <mach/hardware.h> - -#if CONFIG_UX500_DEBUG_UART > 2 -#error Invalid Ux500 debug UART -#endif - -/* - * DEBUG_LL only works if only one SOC is built in.  We don't use #else below - * in order to get "__UX500_UART redefined" warnings if more than one SOC is - * built, so that there's some hint during the build that something is wrong. - */ - -#ifdef CONFIG_UX500_SOC_DB8500 -#define __UX500_UART(n)	U8500_UART##n##_BASE -#endif - -#ifndef __UX500_UART -#error Unknown SOC -#endif - -#define UX500_UART(n)	__UX500_UART(n) -#define UART_BASE	UX500_UART(CONFIG_UX500_DEBUG_UART) - -	.macro	addruart, rp, rv, tmp -	ldr	\rp, =UART_BASE				@ no, physical address -	ldr	\rv, =IO_ADDRESS(UART_BASE)		@ yes, virtual address -	.endm - -#include <asm/hardware/debug-pl01x.S> diff --git a/arch/arm/mach-ux500/include/mach/hardware.h b/arch/arm/mach-ux500/include/mach/hardware.h deleted file mode 100644 index 5201ddace50..00000000000 --- a/arch/arm/mach-ux500/include/mach/hardware.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2009 ST-Ericsson. - * - * U8500 hardware definitions - * - * This file is licensed under  the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ -#ifndef __MACH_HARDWARE_H -#define __MACH_HARDWARE_H - -/* - * Macros to get at IO space when running virtually - * We dont map all the peripherals, let ioremap do - * this for us. We map only very basic peripherals here. - */ -#define U8500_IO_VIRTUAL	0xf0000000 -#define U8500_IO_PHYSICAL	0xa0000000 -/* This is where we map in the ROM to check ASIC IDs */ -#define UX500_VIRT_ROM		0xf0000000 - -/* This macro is used in assembly, so no cast */ -#define IO_ADDRESS(x)           \ -	(((x) & 0x0fffffff) + (((x) >> 4) & 0x0f000000) + U8500_IO_VIRTUAL) - -/* typesafe io address */ -#define __io_address(n)		IOMEM(IO_ADDRESS(n)) - -/* Used by some plat-nomadik code */ -#define io_p2v(n)		__io_address(n) - -#include <mach/db8500-regs.h> - -#define MSP_TX_RX_REG_OFFSET	0 -#define CRYP1_RX_REG_OFFSET	0x10 -#define CRYP1_TX_REG_OFFSET	0x8 -#define HASH1_TX_REG_OFFSET	0x4 - -#ifndef __ASSEMBLY__ - -extern void __iomem *_PRCMU_BASE; - -#define ARRAY_AND_SIZE(x)	(x), ARRAY_SIZE(x) - -#endif				/* __ASSEMBLY__ */ -#endif				/* __MACH_HARDWARE_H */ diff --git a/arch/arm/mach-ux500/include/mach/msp.h b/arch/arm/mach-ux500/include/mach/msp.h deleted file mode 100644 index 9991aea3d57..00000000000 --- a/arch/arm/mach-ux500/include/mach/msp.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) ST-Ericsson SA 2010 - * - * Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson - * License terms: GNU General Public License (GPL), version 2. - */ - -#ifndef __MSP_H -#define __MSP_H - -#include <linux/platform_data/dma-ste-dma40.h> - -enum msp_i2s_id { -	MSP_I2S_0 = 0, -	MSP_I2S_1, -	MSP_I2S_2, -	MSP_I2S_3, -}; - -/* Platform data structure for a MSP I2S-device */ -struct msp_i2s_platform_data { -	enum msp_i2s_id id; -	struct stedma40_chan_cfg *msp_i2s_dma_rx; -	struct stedma40_chan_cfg *msp_i2s_dma_tx; -}; - -#endif diff --git a/arch/arm/mach-ux500/include/mach/timex.h b/arch/arm/mach-ux500/include/mach/timex.h deleted file mode 100644 index d0942c17401..00000000000 --- a/arch/arm/mach-ux500/include/mach/timex.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __ASM_ARCH_TIMEX_H -#define __ASM_ARCH_TIMEX_H - -#define CLOCK_TICK_RATE		110000000 - -#endif diff --git a/arch/arm/mach-ux500/include/mach/uncompress.h b/arch/arm/mach-ux500/include/mach/uncompress.h deleted file mode 100644 index 36969d52e53..00000000000 --- a/arch/arm/mach-ux500/include/mach/uncompress.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - *  Copyright (C) 2009 ST-Ericsson - * - * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ -#ifndef __ASM_ARCH_UNCOMPRESS_H -#define __ASM_ARCH_UNCOMPRESS_H - -#include <asm/setup.h> -#include <asm/mach-types.h> -#include <linux/io.h> -#include <linux/amba/serial.h> -#include <mach/hardware.h> - -void __iomem *ux500_uart_base; - -static void putc(const char c) -{ -	/* Do nothing if the UART is not enabled. */ -	if (!(__raw_readb(ux500_uart_base + UART011_CR) & 0x1)) -		return; - -	if (c == '\n') -		putc('\r'); - -	while (__raw_readb(ux500_uart_base + UART01x_FR) & (1 << 5)) -		barrier(); -	__raw_writeb(c, ux500_uart_base + UART01x_DR); -} - -static void flush(void) -{ -	if (!(__raw_readb(ux500_uart_base + UART011_CR) & 0x1)) -		return; -	while (__raw_readb(ux500_uart_base + UART01x_FR) & (1 << 3)) -		barrier(); -} - -static inline void arch_decomp_setup(void) -{ -	/* Use machine_is_foo() macro if you need to switch base someday */ -	ux500_uart_base = (void __iomem *)U8500_UART2_BASE; -} - -#endif /* __ASM_ARCH_UNCOMPRESS_H */ diff --git a/arch/arm/mach-ux500/include/mach/irqs-board-mop500.h b/arch/arm/mach-ux500/irqs-board-mop500.h index d526dd8e87d..d526dd8e87d 100644 --- a/arch/arm/mach-ux500/include/mach/irqs-board-mop500.h +++ b/arch/arm/mach-ux500/irqs-board-mop500.h diff --git a/arch/arm/mach-ux500/include/mach/irqs-db8500.h b/arch/arm/mach-ux500/irqs-db8500.h index 68bc1497460..f3a9d5947ef 100644 --- a/arch/arm/mach-ux500/include/mach/irqs-db8500.h +++ b/arch/arm/mach-ux500/irqs-db8500.h @@ -109,31 +109,6 @@  /* Virtual interrupts corresponding to the PRCMU wakeups.  */  #define IRQ_PRCMU_BASE IRQ_SOC_START -#define NUM_PRCMU_WAKEUPS (IRQ_PRCMU_END - IRQ_PRCMU_BASE) - -#define IRQ_PRCMU_RTC (IRQ_PRCMU_BASE) -#define IRQ_PRCMU_RTT0 (IRQ_PRCMU_BASE + 1) -#define IRQ_PRCMU_RTT1 (IRQ_PRCMU_BASE + 2) -#define IRQ_PRCMU_HSI0 (IRQ_PRCMU_BASE + 3) -#define IRQ_PRCMU_HSI1 (IRQ_PRCMU_BASE + 4) -#define IRQ_PRCMU_CA_WAKE (IRQ_PRCMU_BASE + 5) -#define IRQ_PRCMU_USB (IRQ_PRCMU_BASE + 6) -#define IRQ_PRCMU_ABB (IRQ_PRCMU_BASE + 7) -#define IRQ_PRCMU_ABB_FIFO (IRQ_PRCMU_BASE + 8) -#define IRQ_PRCMU_ARM (IRQ_PRCMU_BASE + 9) -#define IRQ_PRCMU_MODEM_SW_RESET_REQ (IRQ_PRCMU_BASE + 10) -#define IRQ_PRCMU_GPIO0 (IRQ_PRCMU_BASE + 11) -#define IRQ_PRCMU_GPIO1 (IRQ_PRCMU_BASE + 12) -#define IRQ_PRCMU_GPIO2 (IRQ_PRCMU_BASE + 13) -#define IRQ_PRCMU_GPIO3 (IRQ_PRCMU_BASE + 14) -#define IRQ_PRCMU_GPIO4 (IRQ_PRCMU_BASE + 15) -#define IRQ_PRCMU_GPIO5 (IRQ_PRCMU_BASE + 16) -#define IRQ_PRCMU_GPIO6 (IRQ_PRCMU_BASE + 17) -#define IRQ_PRCMU_GPIO7 (IRQ_PRCMU_BASE + 18) -#define IRQ_PRCMU_GPIO8 (IRQ_PRCMU_BASE + 19) -#define IRQ_PRCMU_CA_SLEEP (IRQ_PRCMU_BASE + 20) -#define IRQ_PRCMU_HOTMON_LOW (IRQ_PRCMU_BASE + 21) -#define IRQ_PRCMU_HOTMON_HIGH (IRQ_PRCMU_BASE + 22)  #define IRQ_PRCMU_END (IRQ_PRCMU_BASE + 23)  /* diff --git a/arch/arm/mach-ux500/include/mach/irqs.h b/arch/arm/mach-ux500/irqs.h index fc77b4274c8..15b2af698ed 100644 --- a/arch/arm/mach-ux500/include/mach/irqs.h +++ b/arch/arm/mach-ux500/irqs.h @@ -10,8 +10,6 @@  #ifndef ASM_ARCH_IRQS_H  #define ASM_ARCH_IRQS_H -#include <mach/hardware.h> -  #define IRQ_LOCALTIMER			29  #define IRQ_LOCALWDOG			30 @@ -36,14 +34,14 @@  /* This will be overridden by SoC-specific irq headers */  #define IRQ_SOC_END		IRQ_SOC_START -#include <mach/irqs-db8500.h> +#include "irqs-db8500.h"  #define IRQ_BOARD_START		IRQ_SOC_END  /* This will be overridden by board-specific irq headers */  #define IRQ_BOARD_END		IRQ_BOARD_START  #ifdef CONFIG_MACH_MOP500 -#include <mach/irqs-board-mop500.h> +#include "irqs-board-mop500.h"  #endif  #define UX500_NR_IRQS		IRQ_BOARD_END diff --git a/arch/arm/mach-ux500/platsmp.c b/arch/arm/mach-ux500/platsmp.c index 18f7af339dc..14d90469392 100644 --- a/arch/arm/mach-ux500/platsmp.c +++ b/arch/arm/mach-ux500/platsmp.c @@ -16,15 +16,14 @@  #include <linux/device.h>  #include <linux/smp.h>  #include <linux/io.h> -#include <linux/irqchip/arm-gic.h>  #include <asm/cacheflush.h>  #include <asm/smp_plat.h>  #include <asm/smp_scu.h> -#include <mach/hardware.h> -#include <mach/setup.h> +#include "setup.h" +#include "db8500-regs.h"  #include "id.h"  /* This is called from headsmp.S to wakeup the secondary core */ @@ -58,13 +57,6 @@ static DEFINE_SPINLOCK(boot_lock);  static void __cpuinit ux500_secondary_init(unsigned int cpu)  {  	/* -	 * 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); - -	/*  	 * let the primary processor know we're out of the  	 * pen, then head off into the C entry point  	 */ diff --git a/arch/arm/mach-ux500/pm.c b/arch/arm/mach-ux500/pm.c new file mode 100644 index 00000000000..1a468f0fd22 --- /dev/null +++ b/arch/arm/mach-ux500/pm.c @@ -0,0 +1,167 @@ +/* + * Copyright (C) ST-Ericsson SA 2010-2013 + * Author: Rickard Andersson <rickard.andersson@stericsson.com> for + *         ST-Ericsson. + * Author: Daniel Lezcano <daniel.lezcano@linaro.org> for Linaro. + * License terms: GNU General Public License (GPL) version 2 + * + */ + +#include <linux/kernel.h> +#include <linux/irqchip/arm-gic.h> +#include <linux/delay.h> +#include <linux/io.h> +#include <linux/platform_data/arm-ux500-pm.h> + +#include "db8500-regs.h" + +/* ARM WFI Standby signal register */ +#define PRCM_ARM_WFI_STANDBY    (prcmu_base + 0x130) +#define PRCM_ARM_WFI_STANDBY_WFI0		0x08 +#define PRCM_ARM_WFI_STANDBY_WFI1		0x10 +#define PRCM_IOCR		(prcmu_base + 0x310) +#define PRCM_IOCR_IOFORCE			0x1 + +/* Dual A9 core interrupt management unit registers */ +#define PRCM_A9_MASK_REQ	(prcmu_base + 0x328) +#define PRCM_A9_MASK_REQ_PRCM_A9_MASK_REQ	0x1 + +#define PRCM_A9_MASK_ACK	(prcmu_base + 0x32c) +#define PRCM_ARMITMSK31TO0	(prcmu_base + 0x11c) +#define PRCM_ARMITMSK63TO32	(prcmu_base + 0x120) +#define PRCM_ARMITMSK95TO64	(prcmu_base + 0x124) +#define PRCM_ARMITMSK127TO96	(prcmu_base + 0x128) +#define PRCM_POWER_STATE_VAL	(prcmu_base + 0x25C) +#define PRCM_ARMITVAL31TO0	(prcmu_base + 0x260) +#define PRCM_ARMITVAL63TO32	(prcmu_base + 0x264) +#define PRCM_ARMITVAL95TO64	(prcmu_base + 0x268) +#define PRCM_ARMITVAL127TO96	(prcmu_base + 0x26C) + +static void __iomem *prcmu_base; + +/* This function decouple the gic from the prcmu */ +int prcmu_gic_decouple(void) +{ +	u32 val = readl(PRCM_A9_MASK_REQ); + +	/* Set bit 0 register value to 1 */ +	writel(val | PRCM_A9_MASK_REQ_PRCM_A9_MASK_REQ, +	       PRCM_A9_MASK_REQ); + +	/* Make sure the register is updated */ +	readl(PRCM_A9_MASK_REQ); + +	/* Wait a few cycles for the gic mask completion */ +	udelay(1); + +	return 0; +} + +/* This function recouple the gic with the prcmu */ +int prcmu_gic_recouple(void) +{ +	u32 val = readl(PRCM_A9_MASK_REQ); + +	/* Set bit 0 register value to 0 */ +	writel(val & ~PRCM_A9_MASK_REQ_PRCM_A9_MASK_REQ, PRCM_A9_MASK_REQ); + +	return 0; +} + +#define PRCMU_GIC_NUMBER_REGS 5 + +/* + * This function checks if there are pending irq on the gic. It only + * makes sense if the gic has been decoupled before with the + * db8500_prcmu_gic_decouple function. Disabling an interrupt only + * disables the forwarding of the interrupt to any CPU interface. It + * does not prevent the interrupt from changing state, for example + * becoming pending, or active and pending if it is already + * active. Hence, we have to check the interrupt is pending *and* is + * active. + */ +bool prcmu_gic_pending_irq(void) +{ +	u32 pr; /* Pending register */ +	u32 er; /* Enable register */ +	void __iomem *dist_base = __io_address(U8500_GIC_DIST_BASE); +	int i; + +	/* 5 registers. STI & PPI not skipped */ +	for (i = 0; i < PRCMU_GIC_NUMBER_REGS; i++) { + +		pr = readl_relaxed(dist_base + GIC_DIST_PENDING_SET + i * 4); +		er = readl_relaxed(dist_base + GIC_DIST_ENABLE_SET + i * 4); + +		if (pr & er) +			return true; /* There is a pending interrupt */ +	} + +	return false; +} + +/* + * This function checks if there are pending interrupt on the + * prcmu which has been delegated to monitor the irqs with the + * db8500_prcmu_copy_gic_settings function. + */ +bool prcmu_pending_irq(void) +{ +	u32 it, im; +	int i; + +	for (i = 0; i < PRCMU_GIC_NUMBER_REGS - 1; i++) { +		it = readl(PRCM_ARMITVAL31TO0 + i * 4); +		im = readl(PRCM_ARMITMSK31TO0 + i * 4); +		if (it & im) +			return true; /* There is a pending interrupt */ +	} + +	return false; +} + +/* + * This function checks if the specified cpu is in in WFI. It's usage + * makes sense only if the gic is decoupled with the db8500_prcmu_gic_decouple + * function. Of course passing smp_processor_id() to this function will + * always return false... + */ +bool prcmu_is_cpu_in_wfi(int cpu) +{ +	return readl(PRCM_ARM_WFI_STANDBY) & cpu ? PRCM_ARM_WFI_STANDBY_WFI1 : +		     PRCM_ARM_WFI_STANDBY_WFI0; +} + +/* + * This function copies the gic SPI settings to the prcmu in order to + * monitor them and abort/finish the retention/off sequence or state. + */ +int prcmu_copy_gic_settings(void) +{ +	u32 er; /* Enable register */ +	void __iomem *dist_base = __io_address(U8500_GIC_DIST_BASE); +	int i; + +	/* We skip the STI and PPI */ +	for (i = 0; i < PRCMU_GIC_NUMBER_REGS - 1; i++) { +		er = readl_relaxed(dist_base + +				   GIC_DIST_ENABLE_SET + (i + 1) * 4); +		writel(er, PRCM_ARMITMSK31TO0 + i * 4); +	} + +	return 0; +} + +void __init ux500_pm_init(u32 phy_base, u32 size) +{ +	prcmu_base = ioremap(phy_base, size); +	if (!prcmu_base) { +		pr_err("could not remap PRCMU for PM functions\n"); +		return; +	} +	/* +	 * On watchdog reboot the GIC is in some cases decoupled. +	 * This will make sure that the GIC is correctly configured. +	 */ +	prcmu_gic_recouple(); +} diff --git a/arch/arm/mach-ux500/include/mach/setup.h b/arch/arm/mach-ux500/setup.h index bddce2b4937..bddce2b4937 100644 --- a/arch/arm/mach-ux500/include/mach/setup.h +++ b/arch/arm/mach-ux500/setup.h diff --git a/arch/arm/mach-ux500/timer.c b/arch/arm/mach-ux500/timer.c index d07bbe7f04a..b6bd0efcbe6 100644 --- a/arch/arm/mach-ux500/timer.c +++ b/arch/arm/mach-ux500/timer.c @@ -14,10 +14,10 @@  #include <asm/smp_twd.h> -#include <mach/setup.h> -#include <mach/hardware.h> -#include <mach/irqs.h> +#include "setup.h" +#include "irqs.h" +#include "db8500-regs.h"  #include "id.h"  #ifdef CONFIG_HAVE_ARM_TWD diff --git a/arch/arm/mach-ux500/usb.c b/arch/arm/mach-ux500/usb.c index 78ac65f62e8..2dfc72f7cd8 100644 --- a/arch/arm/mach-ux500/usb.c +++ b/arch/arm/mach-ux500/usb.c @@ -10,7 +10,7 @@  #include <linux/platform_data/usb-musb-ux500.h>  #include <linux/platform_data/dma-ste-dma40.h> -#include <mach/hardware.h> +#include "db8500-regs.h"  #define MUSB_DMA40_RX_CH { \  		.mode = STEDMA40_MODE_LOGICAL, \ diff --git a/arch/arm/mach-vexpress/Kconfig b/arch/arm/mach-vexpress/Kconfig index 52d315b792c..5907e10c37f 100644 --- a/arch/arm/mach-vexpress/Kconfig +++ b/arch/arm/mach-vexpress/Kconfig @@ -9,6 +9,8 @@ config ARCH_VEXPRESS  	select COMMON_CLK_VERSATILE  	select CPU_V7  	select GENERIC_CLOCKEVENTS +	select HAVE_ARM_SCU if SMP +	select HAVE_ARM_TWD if LOCAL_TIMERS  	select HAVE_CLK  	select HAVE_PATA_PLATFORM  	select HAVE_SMP @@ -17,6 +19,9 @@ config ARCH_VEXPRESS  	select NO_IOPORT  	select PLAT_VERSATILE  	select PLAT_VERSATILE_CLCD +	select POWER_RESET +	select POWER_RESET_VEXPRESS +	select POWER_SUPPLY  	select REGULATOR_FIXED_VOLTAGE if REGULATOR  	select VEXPRESS_CONFIG  	help diff --git a/arch/arm/mach-vexpress/Makefile b/arch/arm/mach-vexpress/Makefile index 80b64971fbd..42703e8b4d3 100644 --- a/arch/arm/mach-vexpress/Makefile +++ b/arch/arm/mach-vexpress/Makefile @@ -4,7 +4,7 @@  ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \  	-I$(srctree)/arch/arm/plat-versatile/include -obj-y					:= v2m.o reset.o +obj-y					:= v2m.o  obj-$(CONFIG_ARCH_VEXPRESS_CA9X4)	+= ct-ca9x4.o  obj-$(CONFIG_SMP)			+= platsmp.o  obj-$(CONFIG_HOTPLUG_CPU)		+= hotplug.o diff --git a/arch/arm/mach-vexpress/hotplug.c b/arch/arm/mach-vexpress/hotplug.c index a141b98d84f..f0ce6b8f5e7 100644 --- a/arch/arm/mach-vexpress/hotplug.c +++ b/arch/arm/mach-vexpress/hotplug.c @@ -12,7 +12,6 @@  #include <linux/errno.h>  #include <linux/smp.h> -#include <asm/cacheflush.h>  #include <asm/smp_plat.h>  #include <asm/cp15.h> @@ -20,7 +19,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" diff --git a/arch/arm/mach-vexpress/reset.c b/arch/arm/mach-vexpress/reset.c deleted file mode 100644 index 465923aa381..00000000000 --- a/arch/arm/mach-vexpress/reset.c +++ /dev/null @@ -1,141 +0,0 @@ -/* - * 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. - * - * 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. - * - * Copyright (C) 2012 ARM Limited - */ - -#include <linux/jiffies.h> -#include <linux/of.h> -#include <linux/of_device.h> -#include <linux/platform_device.h> -#include <linux/stat.h> -#include <linux/vexpress.h> - -static void vexpress_reset_do(struct device *dev, const char *what) -{ -	int err = -ENOENT; -	struct vexpress_config_func *func = -			vexpress_config_func_get_by_dev(dev); - -	if (func) { -		unsigned long timeout; - -		err = vexpress_config_write(func, 0, 0); - -		timeout = jiffies + HZ; -		while (time_before(jiffies, timeout)) -			cpu_relax(); -	} - -	dev_emerg(dev, "Unable to %s (%d)\n", what, err); -} - -static struct device *vexpress_power_off_device; - -void vexpress_power_off(void) -{ -	vexpress_reset_do(vexpress_power_off_device, "power off"); -} - -static struct device *vexpress_restart_device; - -void vexpress_restart(char str, const char *cmd) -{ -	vexpress_reset_do(vexpress_restart_device, "restart"); -} - -static ssize_t vexpress_reset_active_show(struct device *dev, -		struct device_attribute *attr, char *buf) -{ -	return sprintf(buf, "%d\n", vexpress_restart_device == dev); -} - -static ssize_t vexpress_reset_active_store(struct device *dev, -		struct device_attribute *attr, const char *buf, size_t count) -{ -	long value; -	int err = kstrtol(buf, 0, &value); - -	if (!err && value) -		vexpress_restart_device = dev; - -	return err ? err : count; -} - -DEVICE_ATTR(active, S_IRUGO | S_IWUSR, vexpress_reset_active_show, -		vexpress_reset_active_store); - - -enum vexpress_reset_func { FUNC_RESET, FUNC_SHUTDOWN, FUNC_REBOOT }; - -static struct of_device_id vexpress_reset_of_match[] = { -	{ -		.compatible = "arm,vexpress-reset", -		.data = (void *)FUNC_RESET, -	}, { -		.compatible = "arm,vexpress-shutdown", -		.data = (void *)FUNC_SHUTDOWN -	}, { -		.compatible = "arm,vexpress-reboot", -		.data = (void *)FUNC_REBOOT -	}, -	{} -}; - -static int vexpress_reset_probe(struct platform_device *pdev) -{ -	enum vexpress_reset_func func; -	const struct of_device_id *match = -			of_match_device(vexpress_reset_of_match, &pdev->dev); - -	if (match) -		func = (enum vexpress_reset_func)match->data; -	else -		func = pdev->id_entry->driver_data; - -	switch (func) { -	case FUNC_SHUTDOWN: -		vexpress_power_off_device = &pdev->dev; -		break; -	case FUNC_RESET: -		if (!vexpress_restart_device) -			vexpress_restart_device = &pdev->dev; -		device_create_file(&pdev->dev, &dev_attr_active); -		break; -	case FUNC_REBOOT: -		vexpress_restart_device = &pdev->dev; -		device_create_file(&pdev->dev, &dev_attr_active); -		break; -	}; - -	return 0; -} - -static const struct platform_device_id vexpress_reset_id_table[] = { -	{ .name = "vexpress-reset", .driver_data = FUNC_RESET, }, -	{ .name = "vexpress-shutdown", .driver_data = FUNC_SHUTDOWN, }, -	{ .name = "vexpress-reboot", .driver_data = FUNC_REBOOT, }, -	{} -}; - -static struct platform_driver vexpress_reset_driver = { -	.probe = vexpress_reset_probe, -	.driver = { -		.name = "vexpress-reset", -		.of_match_table = vexpress_reset_of_match, -	}, -	.id_table = vexpress_reset_id_table, -}; - -static int __init vexpress_reset_init(void) -{ -	return platform_driver_register(&vexpress_reset_driver); -} -device_initcall(vexpress_reset_init); diff --git a/arch/arm/mach-vexpress/v2m.c b/arch/arm/mach-vexpress/v2m.c index d0ad78998cb..9366f37902d 100644 --- a/arch/arm/mach-vexpress/v2m.c +++ b/arch/arm/mach-vexpress/v2m.c @@ -22,6 +22,8 @@  #include <linux/regulator/fixed.h>  #include <linux/regulator/machine.h>  #include <linux/vexpress.h> +#include <linux/clk-provider.h> +#include <linux/clkdev.h>  #include <asm/arch_timer.h>  #include <asm/mach-types.h> @@ -361,8 +363,6 @@ static void __init v2m_init(void)  	for (i = 0; i < ARRAY_SIZE(v2m_amba_devs); i++)  		amba_device_register(v2m_amba_devs[i], &iomem_resource); -	pm_power_off = vexpress_power_off; -  	ct_desc->init_tile();  } @@ -374,7 +374,6 @@ MACHINE_START(VEXPRESS, "ARM-Versatile Express")  	.init_irq	= v2m_init_irq,  	.init_time	= v2m_timer_init,  	.init_machine	= v2m_init, -	.restart	= vexpress_restart,  MACHINE_END  static struct map_desc v2m_rs1_io_desc __initdata = { @@ -433,7 +432,7 @@ static void __init v2m_dt_timer_init(void)  {  	struct device_node *node = NULL; -	vexpress_clk_of_init(); +	of_clk_init(NULL);  	clocksource_of_init();  	do { @@ -442,6 +441,10 @@ static void __init v2m_dt_timer_init(void)  	if (node) {  		pr_info("Using SP804 '%s' as a clock & events source\n",  				node->full_name); +		WARN_ON(clk_register_clkdev(of_clk_get_by_name(node, +				"timclken1"), "v2m-timer0", "sp804")); +		WARN_ON(clk_register_clkdev(of_clk_get_by_name(node, +				"timclken2"), "v2m-timer1", "sp804"));  		v2m_sp804_init(of_iomap(node, 0),  				irq_of_parse_and_map(node, 0));  	} @@ -464,7 +467,6 @@ static void __init v2m_dt_init(void)  {  	l2x0_of_init(0x00400000, 0xfe0fffff);  	of_platform_populate(NULL, v2m_dt_bus_match, NULL, NULL); -	pm_power_off = vexpress_power_off;  }  static const char * const v2m_dt_match[] __initconst = { @@ -481,5 +483,4 @@ DT_MACHINE_START(VEXPRESS_DT, "ARM-Versatile Express")  	.init_irq	= irqchip_init,  	.init_time	= v2m_dt_timer_init,  	.init_machine	= v2m_dt_init, -	.restart	= vexpress_restart,  MACHINE_END diff --git a/arch/arm/mach-virt/platsmp.c b/arch/arm/mach-virt/platsmp.c index 8badaabe70a..f4143f5bfa5 100644 --- a/arch/arm/mach-virt/platsmp.c +++ b/arch/arm/mach-virt/platsmp.c @@ -21,8 +21,6 @@  #include <linux/smp.h>  #include <linux/of.h> -#include <linux/irqchip/arm-gic.h> -  #include <asm/psci.h>  #include <asm/smp_plat.h> @@ -45,14 +43,8 @@ static int __cpuinit virt_boot_secondary(unsigned int cpu,  	return -ENODEV;  } -static void __cpuinit virt_secondary_init(unsigned int cpu) -{ -	gic_secondary_init(0); -} -  struct smp_operations __initdata virt_smp_ops = {  	.smp_init_cpus		= virt_smp_init_cpus,  	.smp_prepare_cpus	= virt_smp_prepare_cpus, -	.smp_secondary_init	= virt_secondary_init,  	.smp_boot_secondary	= virt_boot_secondary,  }; diff --git a/arch/arm/mach-w90x900/dev.c b/arch/arm/mach-w90x900/dev.c index 7abdb9645c5..e65a80a1ac7 100644 --- a/arch/arm/mach-w90x900/dev.c +++ b/arch/arm/mach-w90x900/dev.c @@ -19,6 +19,7 @@  #include <linux/init.h>  #include <linux/platform_device.h>  #include <linux/slab.h> +#include <linux/cpu.h>  #include <linux/mtd/physmap.h>  #include <linux/mtd/mtd.h> @@ -531,7 +532,7 @@ static struct platform_device *nuc900_public_dev[] __initdata = {  void __init nuc900_board_init(struct platform_device **device, int size)  { -	disable_hlt(); +	cpu_idle_poll_ctrl(true);  	platform_add_devices(device, size);  	platform_add_devices(nuc900_public_dev, ARRAY_SIZE(nuc900_public_dev));  	spi_register_board_info(nuc900_spi_board_info, diff --git a/arch/arm/mach-zynq/Kconfig b/arch/arm/mach-zynq/Kconfig index d70651e8b70..cf3226b041f 100644 --- a/arch/arm/mach-zynq/Kconfig +++ b/arch/arm/mach-zynq/Kconfig @@ -5,6 +5,8 @@ config ARCH_ZYNQ  	select COMMON_CLK  	select CPU_V7  	select GENERIC_CLOCKEVENTS +	select HAVE_ARM_SCU if SMP +	select HAVE_ARM_TWD if LOCAL_TIMERS  	select ICST  	select MIGHT_HAVE_CACHE_L2X0  	select USE_OF diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 025d1732873..35955b54944 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig @@ -43,7 +43,7 @@ config CPU_ARM740T  	depends on !MMU  	select CPU_32v4T  	select CPU_ABRT_LV4T -	select CPU_CACHE_V3	# although the core is v4t +	select CPU_CACHE_V4  	select CPU_CP15_MPU  	select CPU_PABRT_LEGACY  	help @@ -397,6 +397,13 @@ config CPU_V7  	select CPU_PABRT_V7  	select CPU_TLB_V7 if MMU +config CPU_THUMBONLY +	bool +	# There are no CPUs available with MMU that don't implement an ARM ISA: +	depends on !MMU +	help +	  Select this if your CPU doesn't support the 32 bit ARM instructions. +  # Figure out what processor architecture version we should be using.  # This defines the compiler instruction set which depends on the machine type.  config CPU_32v3 @@ -469,9 +476,6 @@ config CPU_PABRT_V7  	bool  # The cache model -config CPU_CACHE_V3 -	bool -  config CPU_CACHE_V4  	bool @@ -608,7 +612,7 @@ config ARCH_DMA_ADDR_T_64BIT  	bool  config ARM_THUMB -	bool "Support Thumb user binaries" +	bool "Support Thumb user binaries" if !CPU_THUMBONLY  	depends on CPU_ARM720T || CPU_ARM740T || CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM940T || CPU_ARM946E || CPU_ARM1020 || CPU_ARM1020E || CPU_ARM1022 || CPU_ARM1026 || CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_V6 || CPU_V6K || CPU_V7 || CPU_FEROCEON  	default y  	help diff --git a/arch/arm/mm/Makefile b/arch/arm/mm/Makefile index 4e333fa2756..9e51be96f63 100644 --- a/arch/arm/mm/Makefile +++ b/arch/arm/mm/Makefile @@ -33,7 +33,6 @@ obj-$(CONFIG_CPU_PABRT_LEGACY)	+= pabort-legacy.o  obj-$(CONFIG_CPU_PABRT_V6)	+= pabort-v6.o  obj-$(CONFIG_CPU_PABRT_V7)	+= pabort-v7.o -obj-$(CONFIG_CPU_CACHE_V3)	+= cache-v3.o  obj-$(CONFIG_CPU_CACHE_V4)	+= cache-v4.o  obj-$(CONFIG_CPU_CACHE_V4WT)	+= cache-v4wt.o  obj-$(CONFIG_CPU_CACHE_V4WB)	+= cache-v4wb.o diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c index db26e2e543f..6f4585b8907 100644 --- a/arch/arm/mm/alignment.c +++ b/arch/arm/mm/alignment.c @@ -961,12 +961,14 @@ static int __init alignment_init(void)  		return -ENOMEM;  #endif +#ifdef CONFIG_CPU_CP15  	if (cpu_is_v6_unaligned()) {  		cr_alignment &= ~CR_A;  		cr_no_alignment &= ~CR_A;  		set_cr(cr_alignment);  		ai_usermode = safe_usermode(ai_usermode, false);  	} +#endif  	hook_fault_code(FAULT_CODE_ALIGNMENT, do_alignment, SIGBUS, BUS_ADRALN,  			"alignment exception"); diff --git a/arch/arm/mm/cache-feroceon-l2.c b/arch/arm/mm/cache-feroceon-l2.c index dd3d59122cc..48bc3c0a87c 100644 --- a/arch/arm/mm/cache-feroceon-l2.c +++ b/arch/arm/mm/cache-feroceon-l2.c @@ -343,6 +343,7 @@ void __init feroceon_l2_init(int __l2_wt_override)  	outer_cache.inv_range = feroceon_l2_inv_range;  	outer_cache.clean_range = feroceon_l2_clean_range;  	outer_cache.flush_range = feroceon_l2_flush_range; +	outer_cache.inv_all = l2_inv_all;  	enable_l2(); diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c index c2f37390308..c465faca51b 100644 --- a/arch/arm/mm/cache-l2x0.c +++ b/arch/arm/mm/cache-l2x0.c @@ -299,7 +299,7 @@ static void l2x0_unlock(u32 cache_id)  	int lockregs;  	int i; -	switch (cache_id) { +	switch (cache_id & L2X0_CACHE_ID_PART_MASK) {  	case L2X0_CACHE_ID_PART_L310:  		lockregs = 8;  		break; @@ -333,15 +333,14 @@ void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask)  	if (cache_id_part_number_from_dt)  		cache_id = cache_id_part_number_from_dt;  	else -		cache_id = readl_relaxed(l2x0_base + L2X0_CACHE_ID) -			& L2X0_CACHE_ID_PART_MASK; +		cache_id = readl_relaxed(l2x0_base + L2X0_CACHE_ID);  	aux = readl_relaxed(l2x0_base + L2X0_AUX_CTRL);  	aux &= aux_mask;  	aux |= aux_val;  	/* Determine the number of ways */ -	switch (cache_id) { +	switch (cache_id & L2X0_CACHE_ID_PART_MASK) {  	case L2X0_CACHE_ID_PART_L310:  		if (aux & (1 << 16))  			ways = 16; @@ -725,7 +724,6 @@ static const struct l2x0_of_data pl310_data = {  		.flush_all   = l2x0_flush_all,  		.inv_all     = l2x0_inv_all,  		.disable     = l2x0_disable, -		.set_debug   = pl310_set_debug,  	},  }; @@ -814,9 +812,8 @@ int __init l2x0_of_init(u32 aux_val, u32 aux_mask)  		data->save();  	of_init = true; -	l2x0_init(l2x0_base, aux_val, aux_mask); -  	memcpy(&outer_cache, &data->outer_cache, sizeof(outer_cache)); +	l2x0_init(l2x0_base, aux_val, aux_mask);  	return 0;  } diff --git a/arch/arm/mm/cache-v3.S b/arch/arm/mm/cache-v3.S deleted file mode 100644 index 8a3fadece8d..00000000000 --- a/arch/arm/mm/cache-v3.S +++ /dev/null @@ -1,137 +0,0 @@ -/* - *  linux/arch/arm/mm/cache-v3.S - * - *  Copyright (C) 1997-2002 Russell king - * - * 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/linkage.h> -#include <linux/init.h> -#include <asm/page.h> -#include "proc-macros.S" - -/* - *	flush_icache_all() - * - *	Unconditionally clean and invalidate the entire icache. - */ -ENTRY(v3_flush_icache_all) -	mov	pc, lr -ENDPROC(v3_flush_icache_all) - -/* - *	flush_user_cache_all() - * - *	Invalidate all cache entries in a particular address - *	space. - * - *	- mm	- mm_struct describing address space - */ -ENTRY(v3_flush_user_cache_all) -	/* FALLTHROUGH */ -/* - *	flush_kern_cache_all() - * - *	Clean and invalidate the entire cache. - */ -ENTRY(v3_flush_kern_cache_all) -	/* FALLTHROUGH */ - -/* - *	flush_user_cache_range(start, end, flags) - * - *	Invalidate a range of cache entries in the specified - *	address space. - * - *	- start - start address (may not be aligned) - *	- end	- end address (exclusive, may not be aligned) - *	- flags	- vma_area_struct flags describing address space - */ -ENTRY(v3_flush_user_cache_range) -	mov	ip, #0 -	mcreq	p15, 0, ip, c7, c0, 0		@ flush ID cache -	mov	pc, lr - -/* - *	coherent_kern_range(start, end) - * - *	Ensure coherency between the Icache and the Dcache in the - *	region described by start.  If you have non-snooping - *	Harvard caches, you need to implement this function. - * - *	- start  - virtual start address - *	- end	 - virtual end address - */ -ENTRY(v3_coherent_kern_range) -	/* FALLTHROUGH */ - -/* - *	coherent_user_range(start, end) - * - *	Ensure coherency between the Icache and the Dcache in the - *	region described by start.  If you have non-snooping - *	Harvard caches, you need to implement this function. - * - *	- start  - virtual start address - *	- end	 - virtual end address - */ -ENTRY(v3_coherent_user_range) -	mov	r0, #0 -	mov	pc, lr - -/* - *	flush_kern_dcache_area(void *page, size_t size) - * - *	Ensure no D cache aliasing occurs, either with itself or - *	the I cache - * - *	- addr	- kernel address - *	- size	- region size - */ -ENTRY(v3_flush_kern_dcache_area) -	/* FALLTHROUGH */ - -/* - *	dma_flush_range(start, end) - * - *	Clean and invalidate the specified virtual address range. - * - *	- start  - virtual start address - *	- end	 - virtual end address - */ -ENTRY(v3_dma_flush_range) -	mov	r0, #0 -	mcr	p15, 0, r0, c7, c0, 0		@ flush ID cache -	mov	pc, lr - -/* - *	dma_unmap_area(start, size, dir) - *	- start	- kernel virtual start address - *	- size	- size of region - *	- dir	- DMA direction - */ -ENTRY(v3_dma_unmap_area) -	teq	r2, #DMA_TO_DEVICE -	bne	v3_dma_flush_range -	/* FALLTHROUGH */ - -/* - *	dma_map_area(start, size, dir) - *	- start	- kernel virtual start address - *	- size	- size of region - *	- dir	- DMA direction - */ -ENTRY(v3_dma_map_area) -	mov	pc, lr -ENDPROC(v3_dma_unmap_area) -ENDPROC(v3_dma_map_area) - -	.globl	v3_flush_kern_cache_louis -	.equ	v3_flush_kern_cache_louis, v3_flush_kern_cache_all - -	__INITDATA - -	@ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S) -	define_cache_functions v3 diff --git a/arch/arm/mm/cache-v4.S b/arch/arm/mm/cache-v4.S index 43e5d77be67..a7ba68f59f0 100644 --- a/arch/arm/mm/cache-v4.S +++ b/arch/arm/mm/cache-v4.S @@ -58,7 +58,7 @@ ENTRY(v4_flush_kern_cache_all)  ENTRY(v4_flush_user_cache_range)  #ifdef CONFIG_CPU_CP15  	mov	ip, #0 -	mcreq	p15, 0, ip, c7, c7, 0		@ flush ID cache +	mcr	p15, 0, ip, c7, c7, 0		@ flush ID cache  	mov	pc, lr  #else  	/* FALLTHROUGH */ diff --git a/arch/arm/mm/context.c b/arch/arm/mm/context.c index a5a4b2bc42b..2ac37372ef5 100644 --- a/arch/arm/mm/context.c +++ b/arch/arm/mm/context.c @@ -48,7 +48,7 @@ static DEFINE_RAW_SPINLOCK(cpu_asid_lock);  static atomic64_t asid_generation = ATOMIC64_INIT(ASID_FIRST_VERSION);  static DECLARE_BITMAP(asid_map, NUM_USER_ASIDS); -static DEFINE_PER_CPU(atomic64_t, active_asids); +DEFINE_PER_CPU(atomic64_t, active_asids);  static DEFINE_PER_CPU(u64, reserved_asids);  static cpumask_t tlb_flush_pending; @@ -215,6 +215,7 @@ void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk)  	if (cpumask_test_and_clear_cpu(cpu, &tlb_flush_pending)) {  		local_flush_bp_all();  		local_flush_tlb_all(); +		dummy_flush_tlb_a15_erratum();  	}  	atomic64_set(&per_cpu(active_asids, cpu), asid); diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index e9db6b4bf65..ef3e0f3aac9 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -823,16 +823,17 @@ static void dma_cache_maint_page(struct page *page, unsigned long offset,  		if (PageHighMem(page)) {  			if (len + offset > PAGE_SIZE)  				len = PAGE_SIZE - offset; -			vaddr = kmap_high_get(page); -			if (vaddr) { -				vaddr += offset; -				op(vaddr, len, dir); -				kunmap_high(page); -			} else if (cache_is_vipt()) { -				/* unmapped pages might still be cached */ + +			if (cache_is_vipt_nonaliasing()) {  				vaddr = kmap_atomic(page);  				op(vaddr + offset, len, dir);  				kunmap_atomic(vaddr); +			} else { +				vaddr = kmap_high_get(page); +				if (vaddr) { +					op(vaddr + offset, len, dir); +					kunmap_high(page); +				}  			}  		} else {  			vaddr = page_address(page) + offset; diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c index 1c8f7f56417..0d473cce501 100644 --- a/arch/arm/mm/flush.c +++ b/arch/arm/mm/flush.c @@ -170,15 +170,18 @@ void __flush_dcache_page(struct address_space *mapping, struct page *page)  	if (!PageHighMem(page)) {  		__cpuc_flush_dcache_area(page_address(page), PAGE_SIZE);  	} else { -		void *addr = kmap_high_get(page); -		if (addr) { -			__cpuc_flush_dcache_area(addr, PAGE_SIZE); -			kunmap_high(page); -		} else if (cache_is_vipt()) { -			/* unmapped pages might still be cached */ +		void *addr; + +		if (cache_is_vipt_nonaliasing()) {  			addr = kmap_atomic(page);  			__cpuc_flush_dcache_area(addr, PAGE_SIZE);  			kunmap_atomic(addr); +		} else { +			addr = kmap_high_get(page); +			if (addr) { +				__cpuc_flush_dcache_area(addr, PAGE_SIZE); +				kunmap_high(page); +			}  		}  	} diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index ad722f1208a..9a5cdc01fcd 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c @@ -99,6 +99,9 @@ void show_mem(unsigned int filter)  	printk("Mem-info:\n");  	show_free_areas(filter); +	if (filter & SHOW_MEM_FILTER_PAGE_COUNT) +		return; +  	for_each_bank (i, mi) {  		struct membank *bank = &mi->bank[i];  		unsigned int pfn1, pfn2; @@ -424,24 +427,6 @@ void __init bootmem_init(void)  	max_pfn = max_high - PHYS_PFN_OFFSET;  } -static inline int free_area(unsigned long pfn, unsigned long end, char *s) -{ -	unsigned int pages = 0, size = (end - pfn) << (PAGE_SHIFT - 10); - -	for (; pfn < end; pfn++) { -		struct page *page = pfn_to_page(pfn); -		ClearPageReserved(page); -		init_page_count(page); -		__free_page(page); -		pages++; -	} - -	if (size && s) -		printk(KERN_INFO "Freeing %s memory: %dK\n", s, size); - -	return pages; -} -  /*   * Poison init memory with an undefined instruction (ARM) or a branch to an   * undefined instruction (Thumb). @@ -534,6 +519,14 @@ static void __init free_unused_memmap(struct meminfo *mi)  #endif  } +#ifdef CONFIG_HIGHMEM +static inline void free_area_high(unsigned long pfn, unsigned long end) +{ +	for (; pfn < end; pfn++) +		free_highmem_page(pfn_to_page(pfn)); +} +#endif +  static void __init free_highpages(void)  {  #ifdef CONFIG_HIGHMEM @@ -569,8 +562,7 @@ static void __init free_highpages(void)  			if (res_end > end)  				res_end = end;  			if (res_start != start) -				totalhigh_pages += free_area(start, res_start, -							     NULL); +				free_area_high(start, res_start);  			start = res_end;  			if (start == end)  				break; @@ -578,9 +570,8 @@ static void __init free_highpages(void)  		/* And now free anything which remains */  		if (start < end) -			totalhigh_pages += free_area(start, end, NULL); +			free_area_high(start, end);  	} -	totalram_pages += totalhigh_pages;  #endif  } @@ -609,8 +600,7 @@ void __init mem_init(void)  #ifdef CONFIG_SA1111  	/* now that our DMA memory is actually so designated, we can free it */ -	totalram_pages += free_area(PHYS_PFN_OFFSET, -				    __phys_to_pfn(__pa(swapper_pg_dir)), NULL); +	free_reserved_area(__va(PHYS_PFN_OFFSET), swapper_pg_dir, 0, NULL);  #endif  	free_highpages(); @@ -738,16 +728,12 @@ void free_initmem(void)  	extern char __tcm_start, __tcm_end;  	poison_init_mem(&__tcm_start, &__tcm_end - &__tcm_start); -	totalram_pages += free_area(__phys_to_pfn(__pa(&__tcm_start)), -				    __phys_to_pfn(__pa(&__tcm_end)), -				    "TCM link"); +	free_reserved_area(&__tcm_start, &__tcm_end, 0, "TCM link");  #endif  	poison_init_mem(__init_begin, __init_end - __init_begin);  	if (!machine_is_integrator() && !machine_is_cintegrator()) -		totalram_pages += free_area(__phys_to_pfn(__pa(__init_begin)), -					    __phys_to_pfn(__pa(__init_end)), -					    "init"); +		free_initmem_default(0);  }  #ifdef CONFIG_BLK_DEV_INITRD @@ -758,9 +744,7 @@ void free_initrd_mem(unsigned long start, unsigned long end)  {  	if (!keep_initrd) {  		poison_init_mem((void *)start, PAGE_ALIGN(end) - start); -		totalram_pages += free_area(__phys_to_pfn(__pa(start)), -					    __phys_to_pfn(__pa(end)), -					    "initrd"); +		free_reserved_area(start, end, 0, "initrd");  	}  } diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index e95a996ab78..e0d8565671a 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c @@ -34,6 +34,7 @@  #include <asm/mach/pci.h>  #include "mm.h" +#include "tcm.h"  /*   * empty_zero_page is a special page that is used for @@ -112,6 +113,7 @@ static struct cachepolicy cache_policies[] __initdata = {  	}  }; +#ifdef CONFIG_CPU_CP15  /*   * These are useful for identifying cache coherency   * problems by allowing the cache or the cache and @@ -210,6 +212,22 @@ void adjust_cr(unsigned long mask, unsigned long set)  }  #endif +#else /* ifdef CONFIG_CPU_CP15 */ + +static int __init early_cachepolicy(char *p) +{ +	pr_warning("cachepolicy kernel parameter not supported without cp15\n"); +} +early_param("cachepolicy", early_cachepolicy); + +static int __init noalign_setup(char *__unused) +{ +	pr_warning("noalign kernel parameter not supported without cp15\n"); +} +__setup("noalign", noalign_setup); + +#endif /* ifdef CONFIG_CPU_CP15 / else */ +  #define PROT_PTE_DEVICE		L_PTE_PRESENT|L_PTE_YOUNG|L_PTE_DIRTY|L_PTE_XN  #define PROT_SECT_DEVICE	PMD_TYPE_SECT|PMD_SECT_AP_WRITE @@ -598,39 +616,60 @@ static void __init alloc_init_pte(pmd_t *pmd, unsigned long addr,  	} while (pte++, addr += PAGE_SIZE, addr != end);  } -static void __init alloc_init_section(pud_t *pud, unsigned long addr, -				      unsigned long end, phys_addr_t phys, -				      const struct mem_type *type) +static void __init map_init_section(pmd_t *pmd, unsigned long addr, +			unsigned long end, phys_addr_t phys, +			const struct mem_type *type)  { -	pmd_t *pmd = pmd_offset(pud, addr); - +#ifndef CONFIG_ARM_LPAE  	/* -	 * Try a section mapping - end, addr and phys must all be aligned -	 * to a section boundary.  Note that PMDs refer to the individual -	 * L1 entries, whereas PGDs refer to a group of L1 entries making -	 * up one logical pointer to an L2 table. +	 * In classic MMU format, puds and pmds are folded in to +	 * the pgds. pmd_offset gives the PGD entry. PGDs refer to a +	 * group of L1 entries making up one logical pointer to +	 * an L2 table (2MB), where as PMDs refer to the individual +	 * L1 entries (1MB). Hence increment to get the correct +	 * offset for odd 1MB sections. +	 * (See arch/arm/include/asm/pgtable-2level.h)  	 */ -	if (type->prot_sect && ((addr | end | phys) & ~SECTION_MASK) == 0) { -		pmd_t *p = pmd; - -#ifndef CONFIG_ARM_LPAE -		if (addr & SECTION_SIZE) -			pmd++; +	if (addr & SECTION_SIZE) +		pmd++;  #endif +	do { +		*pmd = __pmd(phys | type->prot_sect); +		phys += SECTION_SIZE; +	} while (pmd++, addr += SECTION_SIZE, addr != end); -		do { -			*pmd = __pmd(phys | type->prot_sect); -			phys += SECTION_SIZE; -		} while (pmd++, addr += SECTION_SIZE, addr != end); +	flush_pmd_entry(pmd); +} -		flush_pmd_entry(p); -	} else { +static void __init alloc_init_pmd(pud_t *pud, unsigned long addr, +				      unsigned long end, phys_addr_t phys, +				      const struct mem_type *type) +{ +	pmd_t *pmd = pmd_offset(pud, addr); +	unsigned long next; + +	do {  		/* -		 * No need to loop; pte's aren't interested in the -		 * individual L1 entries. +		 * With LPAE, we must loop over to map +		 * all the pmds for the given range.  		 */ -		alloc_init_pte(pmd, addr, end, __phys_to_pfn(phys), type); -	} +		next = pmd_addr_end(addr, end); + +		/* +		 * Try a section mapping - addr, next and phys must all be +		 * aligned to a section boundary. +		 */ +		if (type->prot_sect && +				((addr | next | phys) & ~SECTION_MASK) == 0) { +			map_init_section(pmd, addr, next, phys, type); +		} else { +			alloc_init_pte(pmd, addr, next, +						__phys_to_pfn(phys), type); +		} + +		phys += next - addr; + +	} while (pmd++, addr = next, addr != end);  }  static void __init alloc_init_pud(pgd_t *pgd, unsigned long addr, @@ -641,7 +680,7 @@ static void __init alloc_init_pud(pgd_t *pgd, unsigned long addr,  	do {  		next = pud_addr_end(addr, end); -		alloc_init_section(pud, addr, next, phys, type); +		alloc_init_pmd(pud, addr, next, phys, type);  		phys += next - addr;  	} while (pud++, addr = next, addr != end);  } @@ -1256,6 +1295,7 @@ void __init paging_init(struct machine_desc *mdesc)  	dma_contiguous_remap();  	devicemaps_init(mdesc);  	kmap_init(); +	tcm_init();  	top_pmd = pmd_off_k(0xffff0000); diff --git a/arch/arm/mm/proc-arm740.S b/arch/arm/mm/proc-arm740.S index dc5de5d53f2..fde2d2a794c 100644 --- a/arch/arm/mm/proc-arm740.S +++ b/arch/arm/mm/proc-arm740.S @@ -77,24 +77,27 @@ __arm740_setup:  	mcr	p15, 0, r0, c6,	c0		@ set area 0, default  	ldr	r0, =(CONFIG_DRAM_BASE & 0xFFFFF000) @ base[31:12] of RAM -	ldr	r1, =(CONFIG_DRAM_SIZE >> 12)	@ size of RAM (must be >= 4KB) -	mov	r2, #10				@ 11 is the minimum (4KB) -1:	add	r2, r2, #1			@ area size *= 2 -	mov	r1, r1, lsr #1 +	ldr	r3, =(CONFIG_DRAM_SIZE >> 12)	@ size of RAM (must be >= 4KB) +	mov	r4, #10				@ 11 is the minimum (4KB) +1:	add	r4, r4, #1			@ area size *= 2 +	movs	r3, r3, lsr #1  	bne	1b				@ count not zero r-shift -	orr	r0, r0, r2, lsl #1		@ the area register value +	orr	r0, r0, r4, lsl #1		@ the area register value  	orr	r0, r0, #1			@ set enable bit  	mcr	p15, 0, r0, c6,	c1		@ set area 1, RAM  	ldr	r0, =(CONFIG_FLASH_MEM_BASE & 0xFFFFF000) @ base[31:12] of FLASH -	ldr	r1, =(CONFIG_FLASH_SIZE >> 12)	@ size of FLASH (must be >= 4KB) -	mov	r2, #10				@ 11 is the minimum (4KB) -1:	add	r2, r2, #1			@ area size *= 2 -	mov	r1, r1, lsr #1 +	ldr	r3, =(CONFIG_FLASH_SIZE >> 12)	@ size of FLASH (must be >= 4KB) +	cmp	r3, #0 +	moveq	r0, #0 +	beq	2f +	mov	r4, #10				@ 11 is the minimum (4KB) +1:	add	r4, r4, #1			@ area size *= 2 +	movs	r3, r3, lsr #1  	bne	1b				@ count not zero r-shift -	orr	r0, r0, r2, lsl #1		@ the area register value +	orr	r0, r0, r4, lsl #1		@ the area register value  	orr	r0, r0, #1			@ set enable bit -	mcr	p15, 0, r0, c6,	c2		@ set area 2, ROM/FLASH +2:	mcr	p15, 0, r0, c6,	c2		@ set area 2, ROM/FLASH  	mov	r0, #0x06  	mcr	p15, 0, r0, c2, c0		@ Region 1&2 cacheable @@ -137,13 +140,14 @@ __arm740_proc_info:  	.long	0x41807400  	.long	0xfffffff0  	.long	0 +	.long	0  	b	__arm740_setup  	.long	cpu_arch_name  	.long	cpu_elf_name -	.long	HWCAP_SWP | HWCAP_HALF | HWCAP_26BIT +	.long	HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_26BIT  	.long	cpu_arm740_name  	.long	arm740_processor_functions  	.long	0  	.long	0 -	.long	v3_cache_fns			@ cache model +	.long	v4_cache_fns			@ cache model  	.size	__arm740_proc_info, . - __arm740_proc_info diff --git a/arch/arm/mm/proc-arm920.S b/arch/arm/mm/proc-arm920.S index 2c3b9421ab5..2556cf1c2da 100644 --- a/arch/arm/mm/proc-arm920.S +++ b/arch/arm/mm/proc-arm920.S @@ -387,7 +387,7 @@ ENTRY(cpu_arm920_set_pte_ext)  /* Suspend/resume support: taken from arch/arm/plat-s3c24xx/sleep.S */  .globl	cpu_arm920_suspend_size  .equ	cpu_arm920_suspend_size, 4 * 3 -#ifdef CONFIG_PM_SLEEP +#ifdef CONFIG_ARM_CPU_SUSPEND  ENTRY(cpu_arm920_do_suspend)  	stmfd	sp!, {r4 - r6, lr}  	mrc	p15, 0, r4, c13, c0, 0	@ PID diff --git a/arch/arm/mm/proc-arm926.S b/arch/arm/mm/proc-arm926.S index f1803f7e297..344c8a548cc 100644 --- a/arch/arm/mm/proc-arm926.S +++ b/arch/arm/mm/proc-arm926.S @@ -402,7 +402,7 @@ ENTRY(cpu_arm926_set_pte_ext)  /* Suspend/resume support: taken from arch/arm/plat-s3c24xx/sleep.S */  .globl	cpu_arm926_suspend_size  .equ	cpu_arm926_suspend_size, 4 * 3 -#ifdef CONFIG_PM_SLEEP +#ifdef CONFIG_ARM_CPU_SUSPEND  ENTRY(cpu_arm926_do_suspend)  	stmfd	sp!, {r4 - r6, lr}  	mrc	p15, 0, r4, c13, c0, 0	@ PID diff --git a/arch/arm/mm/proc-mohawk.S b/arch/arm/mm/proc-mohawk.S index 82f9cdc751d..0b60dd3d742 100644 --- a/arch/arm/mm/proc-mohawk.S +++ b/arch/arm/mm/proc-mohawk.S @@ -350,7 +350,7 @@ ENTRY(cpu_mohawk_set_pte_ext)  .globl	cpu_mohawk_suspend_size  .equ	cpu_mohawk_suspend_size, 4 * 6 -#ifdef CONFIG_PM_SLEEP +#ifdef CONFIG_ARM_CPU_SUSPEND  ENTRY(cpu_mohawk_do_suspend)  	stmfd	sp!, {r4 - r9, lr}  	mrc	p14, 0, r4, c6, c0, 0	@ clock configuration, for turbo mode diff --git a/arch/arm/mm/proc-sa1100.S b/arch/arm/mm/proc-sa1100.S index 3aa0da11fd8..d92dfd08142 100644 --- a/arch/arm/mm/proc-sa1100.S +++ b/arch/arm/mm/proc-sa1100.S @@ -172,7 +172,7 @@ ENTRY(cpu_sa1100_set_pte_ext)  .globl	cpu_sa1100_suspend_size  .equ	cpu_sa1100_suspend_size, 4 * 3 -#ifdef CONFIG_PM_SLEEP +#ifdef CONFIG_ARM_CPU_SUSPEND  ENTRY(cpu_sa1100_do_suspend)  	stmfd	sp!, {r4 - r6, lr}  	mrc	p15, 0, r4, c3, c0, 0		@ domain ID diff --git a/arch/arm/mm/proc-syms.c b/arch/arm/mm/proc-syms.c index 3e6210b4d6d..054b491ff76 100644 --- a/arch/arm/mm/proc-syms.c +++ b/arch/arm/mm/proc-syms.c @@ -17,7 +17,9 @@  #ifndef MULTI_CPU  EXPORT_SYMBOL(cpu_dcache_clean_area); +#ifdef CONFIG_MMU  EXPORT_SYMBOL(cpu_set_pte_ext); +#endif  #else  EXPORT_SYMBOL(processor);  #endif diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S index bcaaa8de932..919405e20b8 100644 --- a/arch/arm/mm/proc-v6.S +++ b/arch/arm/mm/proc-v6.S @@ -80,12 +80,10 @@ ENTRY(cpu_v6_do_idle)  	mov	pc, lr  ENTRY(cpu_v6_dcache_clean_area) -#ifndef TLB_CAN_READ_FROM_L1_CACHE  1:	mcr	p15, 0, r0, c7, c10, 1		@ clean D entry  	add	r0, r0, #D_CACHE_LINE_SIZE  	subs	r1, r1, #D_CACHE_LINE_SIZE  	bhi	1b -#endif  	mov	pc, lr  /* @@ -138,7 +136,7 @@ ENTRY(cpu_v6_set_pte_ext)  /* Suspend/resume support: taken from arch/arm/mach-s3c64xx/sleep.S */  .globl	cpu_v6_suspend_size  .equ	cpu_v6_suspend_size, 4 * 6 -#ifdef CONFIG_PM_SLEEP +#ifdef CONFIG_ARM_CPU_SUSPEND  ENTRY(cpu_v6_do_suspend)  	stmfd	sp!, {r4 - r9, lr}  	mrc	p15, 0, r4, c13, c0, 0	@ FCSE/PID diff --git a/arch/arm/mm/proc-v7-2level.S b/arch/arm/mm/proc-v7-2level.S index 78f520bc0e9..9704097c450 100644 --- a/arch/arm/mm/proc-v7-2level.S +++ b/arch/arm/mm/proc-v7-2level.S @@ -110,7 +110,8 @@ ENTRY(cpu_v7_set_pte_ext)   ARM(	str	r3, [r0, #2048]! )   THUMB(	add	r0, r0, #2048 )   THUMB(	str	r3, [r0] ) -	mcr	p15, 0, r0, c7, c10, 1		@ flush_pte +	ALT_SMP(mov	pc,lr) +	ALT_UP (mcr	p15, 0, r0, c7, c10, 1)		@ flush_pte  #endif  	mov	pc, lr  ENDPROC(cpu_v7_set_pte_ext) diff --git a/arch/arm/mm/proc-v7-3level.S b/arch/arm/mm/proc-v7-3level.S index 6ffd78c0f9a..363027e811d 100644 --- a/arch/arm/mm/proc-v7-3level.S +++ b/arch/arm/mm/proc-v7-3level.S @@ -73,7 +73,8 @@ ENTRY(cpu_v7_set_pte_ext)  	tst	r3, #1 << (55 - 32)		@ L_PTE_DIRTY  	orreq	r2, #L_PTE_RDONLY  1:	strd	r2, r3, [r0] -	mcr	p15, 0, r0, c7, c10, 1		@ flush_pte +	ALT_SMP(mov	pc, lr) +	ALT_UP (mcr	p15, 0, r0, c7, c10, 1)		@ flush_pte  #endif  	mov	pc, lr  ENDPROC(cpu_v7_set_pte_ext) diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S index 3a3c015f8d5..2c73a7301ff 100644 --- a/arch/arm/mm/proc-v7.S +++ b/arch/arm/mm/proc-v7.S @@ -75,14 +75,14 @@ ENTRY(cpu_v7_do_idle)  ENDPROC(cpu_v7_do_idle)  ENTRY(cpu_v7_dcache_clean_area) -#ifndef TLB_CAN_READ_FROM_L1_CACHE +	ALT_SMP(mov	pc, lr)			@ MP extensions imply L1 PTW +	ALT_UP(W(nop))  	dcache_line_size r2, r3  1:	mcr	p15, 0, r0, c7, c10, 1		@ clean D entry  	add	r0, r0, r2  	subs	r1, r1, r2  	bhi	1b  	dsb -#endif  	mov	pc, lr  ENDPROC(cpu_v7_dcache_clean_area) @@ -402,6 +402,8 @@ __v7_ca9mp_proc_info:  	__v7_proc __v7_ca9mp_setup  	.size	__v7_ca9mp_proc_info, . - __v7_ca9mp_proc_info +#endif	/* CONFIG_ARM_LPAE */ +  	/*  	 * Marvell PJ4B processor.  	 */ @@ -411,7 +413,6 @@ __v7_pj4b_proc_info:  	.long	0xfffffff0  	__v7_proc __v7_pj4b_setup  	.size	__v7_pj4b_proc_info, . - __v7_pj4b_proc_info -#endif	/* CONFIG_ARM_LPAE */  	/*  	 * ARM Ltd. Cortex A7 processor. @@ -420,7 +421,7 @@ __v7_pj4b_proc_info:  __v7_ca7mp_proc_info:  	.long	0x410fc070  	.long	0xff0ffff0 -	__v7_proc __v7_ca7mp_setup, hwcaps = HWCAP_IDIV +	__v7_proc __v7_ca7mp_setup  	.size	__v7_ca7mp_proc_info, . - __v7_ca7mp_proc_info  	/* @@ -430,10 +431,25 @@ __v7_ca7mp_proc_info:  __v7_ca15mp_proc_info:  	.long	0x410fc0f0  	.long	0xff0ffff0 -	__v7_proc __v7_ca15mp_setup, hwcaps = HWCAP_IDIV +	__v7_proc __v7_ca15mp_setup  	.size	__v7_ca15mp_proc_info, . - __v7_ca15mp_proc_info  	/* +	 * Qualcomm Inc. Krait processors. +	 */ +	.type	__krait_proc_info, #object +__krait_proc_info: +	.long	0x510f0400		@ Required ID value +	.long	0xff0ffc00		@ Mask for ID +	/* +	 * Some Krait processors don't indicate support for SDIV and UDIV +	 * instructions in the ARM instruction set, even though they actually +	 * do support them. +	 */ +	__v7_proc __v7_setup, hwcaps = HWCAP_IDIV +	.size	__krait_proc_info, . - __krait_proc_info + +	/*  	 * Match any ARMv7 processor core.  	 */  	.type	__v7_proc_info, #object diff --git a/arch/arm/mm/proc-xsc3.S b/arch/arm/mm/proc-xsc3.S index eb93d6487f3..e8efd83b6f2 100644 --- a/arch/arm/mm/proc-xsc3.S +++ b/arch/arm/mm/proc-xsc3.S @@ -413,7 +413,7 @@ ENTRY(cpu_xsc3_set_pte_ext)  .globl	cpu_xsc3_suspend_size  .equ	cpu_xsc3_suspend_size, 4 * 6 -#ifdef CONFIG_PM_SLEEP +#ifdef CONFIG_ARM_CPU_SUSPEND  ENTRY(cpu_xsc3_do_suspend)  	stmfd	sp!, {r4 - r9, lr}  	mrc	p14, 0, r4, c6, c0, 0	@ clock configuration, for turbo mode diff --git a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S index 25510361aa1..e766f889bfd 100644 --- a/arch/arm/mm/proc-xscale.S +++ b/arch/arm/mm/proc-xscale.S @@ -528,7 +528,7 @@ ENTRY(cpu_xscale_set_pte_ext)  .globl	cpu_xscale_suspend_size  .equ	cpu_xscale_suspend_size, 4 * 6 -#ifdef CONFIG_PM_SLEEP +#ifdef CONFIG_ARM_CPU_SUSPEND  ENTRY(cpu_xscale_do_suspend)  	stmfd	sp!, {r4 - r9, lr}  	mrc	p14, 0, r4, c6, c0, 0	@ clock configuration, for turbo mode diff --git a/arch/arm/kernel/tcm.h b/arch/arm/mm/tcm.h index 8015ad434a4..8015ad434a4 100644 --- a/arch/arm/kernel/tcm.h +++ b/arch/arm/mm/tcm.h diff --git a/arch/arm/net/bpf_jit_32.c b/arch/arm/net/bpf_jit_32.c index a0bd8a755bd..1a643ee8e08 100644 --- a/arch/arm/net/bpf_jit_32.c +++ b/arch/arm/net/bpf_jit_32.c @@ -918,9 +918,8 @@ void bpf_jit_compile(struct sk_filter *fp)  #endif  	if (bpf_jit_enable > 1) -		print_hex_dump(KERN_INFO, "BPF JIT code: ", -			       DUMP_PREFIX_ADDRESS, 16, 4, ctx.target, -			       alloc_size, false); +		/* there are 2 passes here */ +		bpf_jit_dump(fp->len, alloc_size, 2, ctx.target);  	fp->bpf_func = (void *)ctx.target;  out: diff --git a/arch/arm/plat-orion/Makefile b/arch/arm/plat-orion/Makefile index a82cecb8494..ad97400ba3a 100644 --- a/arch/arm/plat-orion/Makefile +++ b/arch/arm/plat-orion/Makefile @@ -3,7 +3,11 @@  #  ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include -obj-y                             += addr-map.o +obj-$(CONFIG_ARCH_MVEBU)          += addr-map.o +obj-$(CONFIG_ARCH_KIRKWOOD)       += addr-map.o +obj-$(CONFIG_ARCH_DOVE)           += addr-map.o +obj-$(CONFIG_ARCH_ORION5X)        += addr-map.o +obj-$(CONFIG_ARCH_MV78XX0)        += addr-map.o  orion-gpio-$(CONFIG_GENERIC_GPIO) += gpio.o  obj-$(CONFIG_PLAT_ORION_LEGACY)   += irq.o pcie.o time.o common.o mpp.o diff --git a/arch/arm/plat-orion/common.c b/arch/arm/plat-orion/common.c index 2d4b6414609..251f827271e 100644 --- a/arch/arm/plat-orion/common.c +++ b/arch/arm/plat-orion/common.c @@ -238,6 +238,7 @@ static __init void ge_complete(  	struct mv643xx_eth_shared_platform_data *orion_ge_shared_data,  	struct resource *orion_ge_resource, unsigned long irq,  	struct platform_device *orion_ge_shared, +	struct platform_device *orion_ge_mvmdio,  	struct mv643xx_eth_platform_data *eth_data,  	struct platform_device *orion_ge)  { @@ -247,6 +248,8 @@ static __init void ge_complete(  	orion_ge->dev.platform_data = eth_data;  	platform_device_register(orion_ge_shared); +	if (orion_ge_mvmdio) +		platform_device_register(orion_ge_mvmdio);  	platform_device_register(orion_ge);  } @@ -258,8 +261,6 @@ struct mv643xx_eth_shared_platform_data orion_ge00_shared_data;  static struct resource orion_ge00_shared_resources[] = {  	{  		.name	= "ge00 base", -	}, { -		.name	= "ge00 err irq",  	},  }; @@ -271,6 +272,19 @@ static struct platform_device orion_ge00_shared = {  	},  }; +static struct resource orion_ge_mvmdio_resources[] = { +	{ +		.name	= "ge00 mvmdio base", +	}, { +		.name	= "ge00 mvmdio err irq", +	}, +}; + +static struct platform_device orion_ge_mvmdio = { +	.name		= "orion-mdio", +	.id		= -1, +}; +  static struct resource orion_ge00_resources[] = {  	{  		.name	= "ge00 irq", @@ -295,26 +309,25 @@ void __init orion_ge00_init(struct mv643xx_eth_platform_data *eth_data,  			    unsigned int tx_csum_limit)  {  	fill_resources(&orion_ge00_shared, orion_ge00_shared_resources, -		       mapbase + 0x2000, SZ_16K - 1, irq_err); +		       mapbase + 0x2000, SZ_16K - 1, NO_IRQ); +	fill_resources(&orion_ge_mvmdio, orion_ge_mvmdio_resources, +			mapbase + 0x2004, 0x84 - 1, irq_err);  	orion_ge00_shared_data.tx_csum_limit = tx_csum_limit;  	ge_complete(&orion_ge00_shared_data,  		    orion_ge00_resources, irq, &orion_ge00_shared, +		    &orion_ge_mvmdio,  		    eth_data, &orion_ge00);  }  /*****************************************************************************   * GE01   ****************************************************************************/ -struct mv643xx_eth_shared_platform_data orion_ge01_shared_data = { -	.shared_smi	= &orion_ge00_shared, -}; +struct mv643xx_eth_shared_platform_data orion_ge01_shared_data;  static struct resource orion_ge01_shared_resources[] = {  	{  		.name	= "ge01 base", -	}, { -		.name	= "ge01 err irq", -	}, +	}  };  static struct platform_device orion_ge01_shared = { @@ -349,26 +362,23 @@ void __init orion_ge01_init(struct mv643xx_eth_platform_data *eth_data,  			    unsigned int tx_csum_limit)  {  	fill_resources(&orion_ge01_shared, orion_ge01_shared_resources, -		       mapbase + 0x2000, SZ_16K - 1, irq_err); +		       mapbase + 0x2000, SZ_16K - 1, NO_IRQ);  	orion_ge01_shared_data.tx_csum_limit = tx_csum_limit;  	ge_complete(&orion_ge01_shared_data,  		    orion_ge01_resources, irq, &orion_ge01_shared, +		    NULL,  		    eth_data, &orion_ge01);  }  /*****************************************************************************   * GE10   ****************************************************************************/ -struct mv643xx_eth_shared_platform_data orion_ge10_shared_data = { -	.shared_smi	= &orion_ge00_shared, -}; +struct mv643xx_eth_shared_platform_data orion_ge10_shared_data;  static struct resource orion_ge10_shared_resources[] = {  	{  		.name	= "ge10 base", -	}, { -		.name	= "ge10 err irq", -	}, +	}  };  static struct platform_device orion_ge10_shared = { @@ -402,24 +412,21 @@ void __init orion_ge10_init(struct mv643xx_eth_platform_data *eth_data,  			    unsigned long irq_err)  {  	fill_resources(&orion_ge10_shared, orion_ge10_shared_resources, -		       mapbase + 0x2000, SZ_16K - 1, irq_err); +		       mapbase + 0x2000, SZ_16K - 1, NO_IRQ);  	ge_complete(&orion_ge10_shared_data,  		    orion_ge10_resources, irq, &orion_ge10_shared, +		    NULL,  		    eth_data, &orion_ge10);  }  /*****************************************************************************   * GE11   ****************************************************************************/ -struct mv643xx_eth_shared_platform_data orion_ge11_shared_data = { -	.shared_smi	= &orion_ge00_shared, -}; +struct mv643xx_eth_shared_platform_data orion_ge11_shared_data;  static struct resource orion_ge11_shared_resources[] = {  	{  		.name	= "ge11 base", -	}, { -		.name	= "ge11 err irq",  	},  }; @@ -454,9 +461,10 @@ void __init orion_ge11_init(struct mv643xx_eth_platform_data *eth_data,  			    unsigned long irq_err)  {  	fill_resources(&orion_ge11_shared, orion_ge11_shared_resources, -		       mapbase + 0x2000, SZ_16K - 1, irq_err); +		       mapbase + 0x2000, SZ_16K - 1, NO_IRQ);  	ge_complete(&orion_ge11_shared_data,  		    orion_ge11_resources, irq, &orion_ge11_shared, +		    NULL,  		    eth_data, &orion_ge11);  } diff --git a/arch/arm/plat-orion/pcie.c b/arch/arm/plat-orion/pcie.c index f20a321088a..8b8c06d2e9c 100644 --- a/arch/arm/plat-orion/pcie.c +++ b/arch/arm/plat-orion/pcie.c @@ -120,12 +120,14 @@ void __init orion_pcie_reset(void __iomem *base)   * BAR[0,2] -> disabled, BAR[1] -> covers all DRAM banks   * WIN[0-3] -> DRAM bank[0-3]   */ -static void __init orion_pcie_setup_wins(void __iomem *base, -					 struct mbus_dram_target_info *dram) +static void __init orion_pcie_setup_wins(void __iomem *base)  { +	const struct mbus_dram_target_info *dram;  	u32 size;  	int i; +	dram = mv_mbus_dram_info(); +  	/*  	 * First, disable and clear BARs and windows.  	 */ @@ -150,7 +152,7 @@ static void __init orion_pcie_setup_wins(void __iomem *base,  	 */  	size = 0;  	for (i = 0; i < dram->num_cs; i++) { -		struct mbus_dram_window *cs = dram->cs + i; +		const struct mbus_dram_window *cs = dram->cs + i;  		writel(cs->base & 0xffff0000, base + PCIE_WIN04_BASE_OFF(i));  		writel(0, base + PCIE_WIN04_REMAP_OFF(i)); @@ -184,7 +186,7 @@ void __init orion_pcie_setup(void __iomem *base)  	/*  	 * Point PCIe unit MBUS decode windows to DRAM space.  	 */ -	orion_pcie_setup_wins(base, &orion_mbus_dram_info); +	orion_pcie_setup_wins(base);  	/*  	 * Master + slave enable. diff --git a/arch/arm/plat-samsung/Kconfig b/arch/arm/plat-samsung/Kconfig index 6cb19c6aa9d..54d186106f9 100644 --- a/arch/arm/plat-samsung/Kconfig +++ b/arch/arm/plat-samsung/Kconfig @@ -37,14 +37,6 @@ if PLAT_SAMSUNG  comment "Boot options" -config S3C_BOOT_WATCHDOG -	bool "S3C Initialisation watchdog" -	depends on S3C2410_WATCHDOG -	help -	  Say y to enable the watchdog during the kernel decompression -	  stage. If the kernel fails to uncompress, then the watchdog -	  will trigger a reset and the system should restart. -  config S3C_BOOT_ERROR_RESET  	bool "S3C Reboot on decompression error"  	help @@ -125,12 +117,6 @@ config SAMSUNG_GPIOLIB_4BIT  	  configuration. GPIOlib shall be compiled only for S3C64XX and S5P  	  series of processors. -config S3C_GPIO_CFG_S3C64XX -	bool -	help -	  Internal configuration to enable S3C64XX style GPIO configuration -	  functions. -  config S5P_GPIO_DRVSTR  	bool  	help diff --git a/arch/arm/plat-samsung/devs.c b/arch/arm/plat-samsung/devs.c index 4cf660e3818..30c2fe243f7 100644 --- a/arch/arm/plat-samsung/devs.c +++ b/arch/arm/plat-samsung/devs.c @@ -10,6 +10,7 @@   * published by the Free Software Foundation.  */ +#include <linux/amba/pl330.h>  #include <linux/kernel.h>  #include <linux/types.h>  #include <linux/interrupt.h> @@ -62,7 +63,6 @@  #include <linux/platform_data/usb-s3c2410_udc.h>  #include <linux/platform_data/usb-ohci-s3c2410.h>  #include <plat/usb-phy.h> -#include <plat/regs-iic.h>  #include <plat/regs-serial.h>  #include <plat/regs-spi.h>  #include <linux/platform_data/spi-s3c64xx.h> @@ -146,14 +146,20 @@ struct platform_device s3c_device_camif = {  /* ASOC DMA */ +#ifdef CONFIG_PLAT_S5P  +static struct resource samsung_asoc_idma_resource = DEFINE_RES_IRQ(IRQ_I2S0); +  struct platform_device samsung_asoc_idma = {  	.name		= "samsung-idma",  	.id		= -1, +	.num_resources	= 1, +	.resource	= &samsung_asoc_idma_resource,  	.dev		= {  		.dma_mask		= &samsung_device_dma_mask,  		.coherent_dma_mask	= DMA_BIT_MASK(32),  	}  }; +#endif  /* FB */ @@ -1507,6 +1513,9 @@ void __init s3c64xx_spi0_set_platdata(int (*cfg_gpio)(void), int src_clk_nr,  	pd.num_cs = num_cs;  	pd.src_clk_nr = src_clk_nr;  	pd.cfg_gpio = (cfg_gpio) ? cfg_gpio : s3c64xx_spi0_cfg_gpio; +#ifdef CONFIG_PL330_DMA +	pd.filter = pl330_filter; +#endif  	s3c_set_platdata(&pd, sizeof(pd), &s3c64xx_device_spi0);  } @@ -1545,6 +1554,9 @@ void __init s3c64xx_spi1_set_platdata(int (*cfg_gpio)(void), int src_clk_nr,  	pd.num_cs = num_cs;  	pd.src_clk_nr = src_clk_nr;  	pd.cfg_gpio = (cfg_gpio) ? cfg_gpio : s3c64xx_spi1_cfg_gpio; +#ifdef CONFIG_PL330_DMA +	pd.filter = pl330_filter; +#endif  	s3c_set_platdata(&pd, sizeof(pd), &s3c64xx_device_spi1);  } @@ -1583,6 +1595,9 @@ void __init s3c64xx_spi2_set_platdata(int (*cfg_gpio)(void), int src_clk_nr,  	pd.num_cs = num_cs;  	pd.src_clk_nr = src_clk_nr;  	pd.cfg_gpio = (cfg_gpio) ? cfg_gpio : s3c64xx_spi2_cfg_gpio; +#ifdef CONFIG_PL330_DMA +	pd.filter = pl330_filter; +#endif  	s3c_set_platdata(&pd, sizeof(pd), &s3c64xx_device_spi2);  } diff --git a/arch/arm/plat-samsung/dma-ops.c b/arch/arm/plat-samsung/dma-ops.c index 71d58ddea9c..ec0d731b0e7 100644 --- a/arch/arm/plat-samsung/dma-ops.c +++ b/arch/arm/plat-samsung/dma-ops.c @@ -23,23 +23,15 @@ static unsigned samsung_dmadev_request(enum dma_ch dma_ch,  				struct device *dev, char *ch_name)  {  	dma_cap_mask_t mask; -	void *filter_param;  	dma_cap_zero(mask);  	dma_cap_set(param->cap, mask); -	/* -	 * If a dma channel property of a device node from device tree is -	 * specified, use that as the fliter parameter. -	 */ -	filter_param = (dma_ch == DMACH_DT_PROP) ? -		(void *)param->dt_dmach_prop : (void *)dma_ch; -  	if (dev->of_node)  		return (unsigned)dma_request_slave_channel(dev, ch_name);  	else  		return (unsigned)dma_request_channel(mask, pl330_filter, -							filter_param); +							(void *)dma_ch);  }  static int samsung_dmadev_release(unsigned ch, void *param) diff --git a/arch/arm/plat-samsung/include/plat/dma-ops.h b/arch/arm/plat-samsung/include/plat/dma-ops.h index 114178268b7..ce6d7634b6c 100644 --- a/arch/arm/plat-samsung/include/plat/dma-ops.h +++ b/arch/arm/plat-samsung/include/plat/dma-ops.h @@ -18,7 +18,6 @@  struct samsung_dma_req {  	enum dma_transaction_type cap; -	struct property *dt_dmach_prop;  	struct s3c2410_dma_client *client;  }; diff --git a/arch/arm/plat-samsung/include/plat/dma-pl330.h b/arch/arm/plat-samsung/include/plat/dma-pl330.h index d384a8016b4..abe07fae71d 100644 --- a/arch/arm/plat-samsung/include/plat/dma-pl330.h +++ b/arch/arm/plat-samsung/include/plat/dma-pl330.h @@ -21,7 +21,6 @@   * use these just as IDs.   */  enum dma_ch { -	DMACH_DT_PROP = -1,  	DMACH_UART0_RX = 0,  	DMACH_UART0_TX,  	DMACH_UART1_RX, diff --git a/arch/arm/plat-samsung/include/plat/fb.h b/arch/arm/plat-samsung/include/plat/fb.h index b885322717a..9ae50727078 100644 --- a/arch/arm/plat-samsung/include/plat/fb.h +++ b/arch/arm/plat-samsung/include/plat/fb.h @@ -15,55 +15,7 @@  #ifndef __PLAT_S3C_FB_H  #define __PLAT_S3C_FB_H __FILE__ -/* S3C_FB_MAX_WIN - * Set to the maximum number of windows that any of the supported hardware - * can use. Since the platform data uses this for an array size, having it - * set to the maximum of any version of the hardware can do is safe. - */ -#define S3C_FB_MAX_WIN	(5) - -/** - * struct s3c_fb_pd_win - per window setup data - * @xres     : The window X size. - * @yres     : The window Y size. - * @virtual_x: The virtual X size. - * @virtual_y: The virtual Y size. - */ -struct s3c_fb_pd_win { -	unsigned short		default_bpp; -	unsigned short		max_bpp; -	unsigned short		xres; -	unsigned short		yres; -	unsigned short		virtual_x; -	unsigned short		virtual_y; -}; - -/** - * struct s3c_fb_platdata -  S3C driver platform specific information - * @setup_gpio: Setup the external GPIO pins to the right state to transfer - *		the data from the display system to the connected display - *		device. - * @vidcon0: The base vidcon0 values to control the panel data format. - * @vidcon1: The base vidcon1 values to control the panel data output. - * @vtiming: Video timing when connected to a RGB type panel. - * @win: The setup data for each hardware window, or NULL for unused. - * @display_mode: The LCD output display mode. - * - * The platform data supplies the video driver with all the information - * it requires to work with the display(s) attached to the machine. It - * controls the initial mode, the number of display windows (0 is always - * the base framebuffer) that are initialised etc. - * - */ -struct s3c_fb_platdata { -	void	(*setup_gpio)(void); - -	struct s3c_fb_pd_win	*win[S3C_FB_MAX_WIN]; -	struct fb_videomode     *vtiming; - -	u32			 vidcon0; -	u32			 vidcon1; -}; +#include <linux/platform_data/video_s3c.h>  /**   * s3c_fb_set_platdata() - Setup the FB device with platform data. diff --git a/arch/arm/plat-samsung/include/plat/regs-ac97.h b/arch/arm/plat-samsung/include/plat/regs-ac97.h deleted file mode 100644 index c3878f7acb8..00000000000 --- a/arch/arm/plat-samsung/include/plat/regs-ac97.h +++ /dev/null @@ -1,67 +0,0 @@ -/* arch/arm/mach-s3c2410/include/mach/regs-ac97.h - * - * Copyright (c) 2006 Simtec Electronics <linux@simtec.co.uk> - *		http://www.simtec.co.uk/products/SWLINUX/ - * - * 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. - * - * S3C2440 AC97 Controller -*/ - -#ifndef __ASM_ARCH_REGS_AC97_H -#define __ASM_ARCH_REGS_AC97_H __FILE__ - -#define S3C_AC97_GLBCTRL				(0x00) - -#define S3C_AC97_GLBCTRL_CODECREADYIE			(1<<22) -#define S3C_AC97_GLBCTRL_PCMOUTURIE			(1<<21) -#define S3C_AC97_GLBCTRL_PCMINORIE			(1<<20) -#define S3C_AC97_GLBCTRL_MICINORIE			(1<<19) -#define S3C_AC97_GLBCTRL_PCMOUTTIE			(1<<18) -#define S3C_AC97_GLBCTRL_PCMINTIE			(1<<17) -#define S3C_AC97_GLBCTRL_MICINTIE			(1<<16) -#define S3C_AC97_GLBCTRL_PCMOUTTM_OFF			(0<<12) -#define S3C_AC97_GLBCTRL_PCMOUTTM_PIO			(1<<12) -#define S3C_AC97_GLBCTRL_PCMOUTTM_DMA			(2<<12) -#define S3C_AC97_GLBCTRL_PCMOUTTM_MASK			(3<<12) -#define S3C_AC97_GLBCTRL_PCMINTM_OFF			(0<<10) -#define S3C_AC97_GLBCTRL_PCMINTM_PIO			(1<<10) -#define S3C_AC97_GLBCTRL_PCMINTM_DMA			(2<<10) -#define S3C_AC97_GLBCTRL_PCMINTM_MASK			(3<<10) -#define S3C_AC97_GLBCTRL_MICINTM_OFF			(0<<8) -#define S3C_AC97_GLBCTRL_MICINTM_PIO			(1<<8) -#define S3C_AC97_GLBCTRL_MICINTM_DMA			(2<<8) -#define S3C_AC97_GLBCTRL_MICINTM_MASK			(3<<8) -#define S3C_AC97_GLBCTRL_TRANSFERDATAENABLE		(1<<3) -#define S3C_AC97_GLBCTRL_ACLINKON			(1<<2) -#define S3C_AC97_GLBCTRL_WARMRESET			(1<<1) -#define S3C_AC97_GLBCTRL_COLDRESET			(1<<0) - -#define S3C_AC97_GLBSTAT				(0x04) - -#define S3C_AC97_GLBSTAT_CODECREADY			(1<<22) -#define S3C_AC97_GLBSTAT_PCMOUTUR			(1<<21) -#define S3C_AC97_GLBSTAT_PCMINORI			(1<<20) -#define S3C_AC97_GLBSTAT_MICINORI			(1<<19) -#define S3C_AC97_GLBSTAT_PCMOUTTI			(1<<18) -#define S3C_AC97_GLBSTAT_PCMINTI			(1<<17) -#define S3C_AC97_GLBSTAT_MICINTI			(1<<16) -#define S3C_AC97_GLBSTAT_MAINSTATE_IDLE			(0<<0) -#define S3C_AC97_GLBSTAT_MAINSTATE_INIT			(1<<0) -#define S3C_AC97_GLBSTAT_MAINSTATE_READY		(2<<0) -#define S3C_AC97_GLBSTAT_MAINSTATE_ACTIVE		(3<<0) -#define S3C_AC97_GLBSTAT_MAINSTATE_LP			(4<<0) -#define S3C_AC97_GLBSTAT_MAINSTATE_WARM			(5<<0) - -#define S3C_AC97_CODEC_CMD				(0x08) - -#define S3C_AC97_CODEC_CMD_READ				(1<<23) - -#define S3C_AC97_STAT					(0x0c) -#define S3C_AC97_PCM_ADDR				(0x10) -#define S3C_AC97_PCM_DATA				(0x18) -#define S3C_AC97_MIC_DATA				(0x1C) - -#endif /* __ASM_ARCH_REGS_AC97_H */ diff --git a/arch/arm/plat-samsung/include/plat/regs-iic.h b/arch/arm/plat-samsung/include/plat/regs-iic.h deleted file mode 100644 index 2f7c17de8ac..00000000000 --- a/arch/arm/plat-samsung/include/plat/regs-iic.h +++ /dev/null @@ -1,56 +0,0 @@ -/* arch/arm/mach-s3c2410/include/mach/regs-iic.h - * - * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk> - *		http://www.simtec.co.uk/products/SWLINUX/ - * - * 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. - * - * S3C2410 I2C Controller -*/ - -#ifndef __ASM_ARCH_REGS_IIC_H -#define __ASM_ARCH_REGS_IIC_H __FILE__ - -/* see s3c2410x user guide, v1.1, section 9 (p447) for more info */ - -#define S3C2410_IICREG(x) (x) - -#define S3C2410_IICCON    S3C2410_IICREG(0x00) -#define S3C2410_IICSTAT   S3C2410_IICREG(0x04) -#define S3C2410_IICADD    S3C2410_IICREG(0x08) -#define S3C2410_IICDS     S3C2410_IICREG(0x0C) -#define S3C2440_IICLC	  S3C2410_IICREG(0x10) - -#define S3C2410_IICCON_ACKEN		(1<<7) -#define S3C2410_IICCON_TXDIV_16		(0<<6) -#define S3C2410_IICCON_TXDIV_512	(1<<6) -#define S3C2410_IICCON_IRQEN		(1<<5) -#define S3C2410_IICCON_IRQPEND		(1<<4) -#define S3C2410_IICCON_SCALE(x)		((x)&15) -#define S3C2410_IICCON_SCALEMASK	(0xf) - -#define S3C2410_IICSTAT_MASTER_RX	(2<<6) -#define S3C2410_IICSTAT_MASTER_TX	(3<<6) -#define S3C2410_IICSTAT_SLAVE_RX	(0<<6) -#define S3C2410_IICSTAT_SLAVE_TX	(1<<6) -#define S3C2410_IICSTAT_MODEMASK	(3<<6) - -#define S3C2410_IICSTAT_START		(1<<5) -#define S3C2410_IICSTAT_BUSBUSY		(1<<5) -#define S3C2410_IICSTAT_TXRXEN		(1<<4) -#define S3C2410_IICSTAT_ARBITR		(1<<3) -#define S3C2410_IICSTAT_ASSLAVE		(1<<2) -#define S3C2410_IICSTAT_ADDR0		(1<<1) -#define S3C2410_IICSTAT_LASTBIT		(1<<0) - -#define S3C2410_IICLC_SDA_DELAY0	(0 << 0) -#define S3C2410_IICLC_SDA_DELAY5	(1 << 0) -#define S3C2410_IICLC_SDA_DELAY10	(2 << 0) -#define S3C2410_IICLC_SDA_DELAY15	(3 << 0) -#define S3C2410_IICLC_SDA_DELAY_MASK	(3 << 0) - -#define S3C2410_IICLC_FILTER_ON		(1<<2) - -#endif /* __ASM_ARCH_REGS_IIC_H */ diff --git a/arch/arm/plat-samsung/include/plat/regs-iis.h b/arch/arm/plat-samsung/include/plat/regs-iis.h deleted file mode 100644 index a18d35e7a73..00000000000 --- a/arch/arm/plat-samsung/include/plat/regs-iis.h +++ /dev/null @@ -1,70 +0,0 @@ -/* arch/arm/plat-samsung/include/plat/regs-iis.h - * - * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk> - *		      http://www.simtec.co.uk/products/SWLINUX/ - * - * 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. - * - * S3C2410 IIS register definition -*/ - -#ifndef __ASM_ARCH_REGS_IIS_H -#define __ASM_ARCH_REGS_IIS_H - -#define S3C2410_IISCON			(0x00) - -#define S3C2410_IISCON_LRINDEX		(1 << 8) -#define S3C2410_IISCON_TXFIFORDY	(1 << 7) -#define S3C2410_IISCON_RXFIFORDY	(1 << 6) -#define S3C2410_IISCON_TXDMAEN		(1 << 5) -#define S3C2410_IISCON_RXDMAEN		(1 << 4) -#define S3C2410_IISCON_TXIDLE		(1 << 3) -#define S3C2410_IISCON_RXIDLE		(1 << 2) -#define S3C2410_IISCON_PSCEN		(1 << 1) -#define S3C2410_IISCON_IISEN		(1 << 0) - -#define S3C2410_IISMOD			(0x04) - -#define S3C2440_IISMOD_MPLL		(1 << 9) -#define S3C2410_IISMOD_SLAVE		(1 << 8) -#define S3C2410_IISMOD_NOXFER		(0 << 6) -#define S3C2410_IISMOD_RXMODE		(1 << 6) -#define S3C2410_IISMOD_TXMODE		(2 << 6) -#define S3C2410_IISMOD_TXRXMODE		(3 << 6) -#define S3C2410_IISMOD_LR_LLOW		(0 << 5) -#define S3C2410_IISMOD_LR_RLOW		(1 << 5) -#define S3C2410_IISMOD_IIS		(0 << 4) -#define S3C2410_IISMOD_MSB		(1 << 4) -#define S3C2410_IISMOD_8BIT		(0 << 3) -#define S3C2410_IISMOD_16BIT		(1 << 3) -#define S3C2410_IISMOD_BITMASK		(1 << 3) -#define S3C2410_IISMOD_256FS		(0 << 2) -#define S3C2410_IISMOD_384FS		(1 << 2) -#define S3C2410_IISMOD_16FS		(0 << 0) -#define S3C2410_IISMOD_32FS		(1 << 0) -#define S3C2410_IISMOD_48FS		(2 << 0) -#define S3C2410_IISMOD_FS_MASK		(3 << 0) - -#define S3C2410_IISPSR			(0x08) - -#define S3C2410_IISPSR_INTMASK		(31 << 5) -#define S3C2410_IISPSR_INTSHIFT		(5) -#define S3C2410_IISPSR_EXTMASK		(31 << 0) -#define S3C2410_IISPSR_EXTSHFIT		(0) - -#define S3C2410_IISFCON			(0x0c) - -#define S3C2410_IISFCON_TXDMA		(1 << 15) -#define S3C2410_IISFCON_RXDMA		(1 << 14) -#define S3C2410_IISFCON_TXENABLE	(1 << 13) -#define S3C2410_IISFCON_RXENABLE	(1 << 12) -#define S3C2410_IISFCON_TXMASK		(0x3f << 6) -#define S3C2410_IISFCON_TXSHIFT		(6) -#define S3C2410_IISFCON_RXMASK		(0x3f) -#define S3C2410_IISFCON_RXSHIFT		(0) - -#define S3C2410_IISFIFO			(0x10) - -#endif /* __ASM_ARCH_REGS_IIS_H */ diff --git a/arch/arm/plat-samsung/include/plat/regs-serial.h b/arch/arm/plat-samsung/include/plat/regs-serial.h index 29c26a81884..f05f2afa440 100644 --- a/arch/arm/plat-samsung/include/plat/regs-serial.h +++ b/arch/arm/plat-samsung/include/plat/regs-serial.h @@ -1,281 +1 @@ -/* arch/arm/plat-samsung/include/plat/regs-serial.h - * - *  From linux/include/asm-arm/hardware/serial_s3c2410.h - * - *  Internal header file for Samsung S3C2410 serial ports (UART0-2) - * - *  Copyright (C) 2002 Shane Nay (shane@minirl.com) - * - *  Additional defines, Copyright 2003 Simtec Electronics (linux@simtec.co.uk) - * - *  Adapted from: - * - *  Internal header file for MX1ADS serial ports (UART1 & 2) - * - *  Copyright (C) 2002 Shane Nay (shane@minirl.com) - * - * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA -*/ - -#ifndef __ASM_ARM_REGS_SERIAL_H -#define __ASM_ARM_REGS_SERIAL_H - -#define S3C24XX_VA_UART0      (S3C_VA_UART) -#define S3C24XX_VA_UART1      (S3C_VA_UART + 0x4000 ) -#define S3C24XX_VA_UART2      (S3C_VA_UART + 0x8000 ) -#define S3C24XX_VA_UART3      (S3C_VA_UART + 0xC000 ) - -#define S3C2410_PA_UART0      (S3C24XX_PA_UART) -#define S3C2410_PA_UART1      (S3C24XX_PA_UART + 0x4000 ) -#define S3C2410_PA_UART2      (S3C24XX_PA_UART + 0x8000 ) -#define S3C2443_PA_UART3      (S3C24XX_PA_UART + 0xC000 ) - -#define S3C2410_URXH	  (0x24) -#define S3C2410_UTXH	  (0x20) -#define S3C2410_ULCON	  (0x00) -#define S3C2410_UCON	  (0x04) -#define S3C2410_UFCON	  (0x08) -#define S3C2410_UMCON	  (0x0C) -#define S3C2410_UBRDIV	  (0x28) -#define S3C2410_UTRSTAT	  (0x10) -#define S3C2410_UERSTAT	  (0x14) -#define S3C2410_UFSTAT	  (0x18) -#define S3C2410_UMSTAT	  (0x1C) - -#define S3C2410_LCON_CFGMASK	  ((0xF<<3)|(0x3)) - -#define S3C2410_LCON_CS5	  (0x0) -#define S3C2410_LCON_CS6	  (0x1) -#define S3C2410_LCON_CS7	  (0x2) -#define S3C2410_LCON_CS8	  (0x3) -#define S3C2410_LCON_CSMASK	  (0x3) - -#define S3C2410_LCON_PNONE	  (0x0) -#define S3C2410_LCON_PEVEN	  (0x5 << 3) -#define S3C2410_LCON_PODD	  (0x4 << 3) -#define S3C2410_LCON_PMASK	  (0x7 << 3) - -#define S3C2410_LCON_STOPB	  (1<<2) -#define S3C2410_LCON_IRM          (1<<6) - -#define S3C2440_UCON_CLKMASK	  (3<<10) -#define S3C2440_UCON_CLKSHIFT	  (10) -#define S3C2440_UCON_PCLK	  (0<<10) -#define S3C2440_UCON_UCLK	  (1<<10) -#define S3C2440_UCON_PCLK2	  (2<<10) -#define S3C2440_UCON_FCLK	  (3<<10) -#define S3C2443_UCON_EPLL	  (3<<10) - -#define S3C6400_UCON_CLKMASK	(3<<10) -#define S3C6400_UCON_CLKSHIFT	(10) -#define S3C6400_UCON_PCLK	(0<<10) -#define S3C6400_UCON_PCLK2	(2<<10) -#define S3C6400_UCON_UCLK0	(1<<10) -#define S3C6400_UCON_UCLK1	(3<<10) - -#define S3C2440_UCON2_FCLK_EN	  (1<<15) -#define S3C2440_UCON0_DIVMASK	  (15 << 12) -#define S3C2440_UCON1_DIVMASK	  (15 << 12) -#define S3C2440_UCON2_DIVMASK	  (7 << 12) -#define S3C2440_UCON_DIVSHIFT	  (12) - -#define S3C2412_UCON_CLKMASK	(3<<10) -#define S3C2412_UCON_CLKSHIFT	(10) -#define S3C2412_UCON_UCLK	(1<<10) -#define S3C2412_UCON_USYSCLK	(3<<10) -#define S3C2412_UCON_PCLK	(0<<10) -#define S3C2412_UCON_PCLK2	(2<<10) - -#define S3C2410_UCON_CLKMASK	(1 << 10) -#define S3C2410_UCON_CLKSHIFT	(10) -#define S3C2410_UCON_UCLK	  (1<<10) -#define S3C2410_UCON_SBREAK	  (1<<4) - -#define S3C2410_UCON_TXILEVEL	  (1<<9) -#define S3C2410_UCON_RXILEVEL	  (1<<8) -#define S3C2410_UCON_TXIRQMODE	  (1<<2) -#define S3C2410_UCON_RXIRQMODE	  (1<<0) -#define S3C2410_UCON_RXFIFO_TOI	  (1<<7) -#define S3C2443_UCON_RXERR_IRQEN  (1<<6) -#define S3C2443_UCON_LOOPBACK	  (1<<5) - -#define S3C2410_UCON_DEFAULT	  (S3C2410_UCON_TXILEVEL  | \ -				   S3C2410_UCON_RXILEVEL  | \ -				   S3C2410_UCON_TXIRQMODE | \ -				   S3C2410_UCON_RXIRQMODE | \ -				   S3C2410_UCON_RXFIFO_TOI) - -#define S3C2410_UFCON_FIFOMODE	  (1<<0) -#define S3C2410_UFCON_TXTRIG0	  (0<<6) -#define S3C2410_UFCON_RXTRIG8	  (1<<4) -#define S3C2410_UFCON_RXTRIG12	  (2<<4) - -/* S3C2440 FIFO trigger levels */ -#define S3C2440_UFCON_RXTRIG1	  (0<<4) -#define S3C2440_UFCON_RXTRIG8	  (1<<4) -#define S3C2440_UFCON_RXTRIG16	  (2<<4) -#define S3C2440_UFCON_RXTRIG32	  (3<<4) - -#define S3C2440_UFCON_TXTRIG0	  (0<<6) -#define S3C2440_UFCON_TXTRIG16	  (1<<6) -#define S3C2440_UFCON_TXTRIG32	  (2<<6) -#define S3C2440_UFCON_TXTRIG48	  (3<<6) - -#define S3C2410_UFCON_RESETBOTH	  (3<<1) -#define S3C2410_UFCON_RESETTX	  (1<<2) -#define S3C2410_UFCON_RESETRX	  (1<<1) - -#define S3C2410_UFCON_DEFAULT	  (S3C2410_UFCON_FIFOMODE | \ -				   S3C2410_UFCON_TXTRIG0  | \ -				   S3C2410_UFCON_RXTRIG8 ) - -#define	S3C2410_UMCOM_AFC	  (1<<4) -#define	S3C2410_UMCOM_RTS_LOW	  (1<<0) - -#define S3C2412_UMCON_AFC_63	(0<<5)		/* same as s3c2443 */ -#define S3C2412_UMCON_AFC_56	(1<<5) -#define S3C2412_UMCON_AFC_48	(2<<5) -#define S3C2412_UMCON_AFC_40	(3<<5) -#define S3C2412_UMCON_AFC_32	(4<<5) -#define S3C2412_UMCON_AFC_24	(5<<5) -#define S3C2412_UMCON_AFC_16	(6<<5) -#define S3C2412_UMCON_AFC_8	(7<<5) - -#define S3C2410_UFSTAT_TXFULL	  (1<<9) -#define S3C2410_UFSTAT_RXFULL	  (1<<8) -#define S3C2410_UFSTAT_TXMASK	  (15<<4) -#define S3C2410_UFSTAT_TXSHIFT	  (4) -#define S3C2410_UFSTAT_RXMASK	  (15<<0) -#define S3C2410_UFSTAT_RXSHIFT	  (0) - -/* UFSTAT S3C2443 same as S3C2440 */ -#define S3C2440_UFSTAT_TXFULL	  (1<<14) -#define S3C2440_UFSTAT_RXFULL	  (1<<6) -#define S3C2440_UFSTAT_TXSHIFT	  (8) -#define S3C2440_UFSTAT_RXSHIFT	  (0) -#define S3C2440_UFSTAT_TXMASK	  (63<<8) -#define S3C2440_UFSTAT_RXMASK	  (63) - -#define S3C2410_UTRSTAT_TXE	  (1<<2) -#define S3C2410_UTRSTAT_TXFE	  (1<<1) -#define S3C2410_UTRSTAT_RXDR	  (1<<0) - -#define S3C2410_UERSTAT_OVERRUN	  (1<<0) -#define S3C2410_UERSTAT_FRAME	  (1<<2) -#define S3C2410_UERSTAT_BREAK	  (1<<3) -#define S3C2443_UERSTAT_PARITY	  (1<<1) - -#define S3C2410_UERSTAT_ANY	  (S3C2410_UERSTAT_OVERRUN | \ -				   S3C2410_UERSTAT_FRAME | \ -				   S3C2410_UERSTAT_BREAK) - -#define S3C2410_UMSTAT_CTS	  (1<<0) -#define S3C2410_UMSTAT_DeltaCTS	  (1<<2) - -#define S3C2443_DIVSLOT		  (0x2C) - -/* S3C64XX interrupt registers. */ -#define S3C64XX_UINTP		0x30 -#define S3C64XX_UINTSP		0x34 -#define S3C64XX_UINTM		0x38 - -#define S3C64XX_UINTM_RXD	(0) -#define S3C64XX_UINTM_TXD	(2) -#define S3C64XX_UINTM_RXD_MSK	(1 << S3C64XX_UINTM_RXD) -#define S3C64XX_UINTM_TXD_MSK	(1 << S3C64XX_UINTM_TXD) - -/* Following are specific to S5PV210 */ -#define S5PV210_UCON_CLKMASK	(1<<10) -#define S5PV210_UCON_CLKSHIFT	(10) -#define S5PV210_UCON_PCLK	(0<<10) -#define S5PV210_UCON_UCLK	(1<<10) - -#define S5PV210_UFCON_TXTRIG0	(0<<8) -#define S5PV210_UFCON_TXTRIG4	(1<<8) -#define S5PV210_UFCON_TXTRIG8	(2<<8) -#define S5PV210_UFCON_TXTRIG16	(3<<8) -#define S5PV210_UFCON_TXTRIG32	(4<<8) -#define S5PV210_UFCON_TXTRIG64	(5<<8) -#define S5PV210_UFCON_TXTRIG128 (6<<8) -#define S5PV210_UFCON_TXTRIG256 (7<<8) - -#define S5PV210_UFCON_RXTRIG1	(0<<4) -#define S5PV210_UFCON_RXTRIG4	(1<<4) -#define S5PV210_UFCON_RXTRIG8	(2<<4) -#define S5PV210_UFCON_RXTRIG16	(3<<4) -#define S5PV210_UFCON_RXTRIG32	(4<<4) -#define S5PV210_UFCON_RXTRIG64	(5<<4) -#define S5PV210_UFCON_RXTRIG128	(6<<4) -#define S5PV210_UFCON_RXTRIG256	(7<<4) - -#define S5PV210_UFSTAT_TXFULL	(1<<24) -#define S5PV210_UFSTAT_RXFULL	(1<<8) -#define S5PV210_UFSTAT_TXMASK	(255<<16) -#define S5PV210_UFSTAT_TXSHIFT	(16) -#define S5PV210_UFSTAT_RXMASK	(255<<0) -#define S5PV210_UFSTAT_RXSHIFT	(0) - -#define S3C2410_UCON_CLKSEL0	(1 << 0) -#define S3C2410_UCON_CLKSEL1	(1 << 1) -#define S3C2410_UCON_CLKSEL2	(1 << 2) -#define S3C2410_UCON_CLKSEL3	(1 << 3) - -/* Default values for s5pv210 UCON and UFCON uart registers */ -#define S5PV210_UCON_DEFAULT	(S3C2410_UCON_TXILEVEL |	\ -				 S3C2410_UCON_RXILEVEL |	\ -				 S3C2410_UCON_TXIRQMODE |	\ -				 S3C2410_UCON_RXIRQMODE |	\ -				 S3C2410_UCON_RXFIFO_TOI |	\ -				 S3C2443_UCON_RXERR_IRQEN) - -#define S5PV210_UFCON_DEFAULT	(S3C2410_UFCON_FIFOMODE |	\ -				 S5PV210_UFCON_TXTRIG4 |	\ -				 S5PV210_UFCON_RXTRIG4) - -#ifndef __ASSEMBLY__ - -/* configuration structure for per-machine configurations for the - * serial port - * - * the pointer is setup by the machine specific initialisation from the - * arch/arm/mach-s3c2410/ directory. -*/ - -struct s3c2410_uartcfg { -	unsigned char	   hwport;	 /* hardware port number */ -	unsigned char	   unused; -	unsigned short	   flags; -	upf_t		   uart_flags;	 /* default uart flags */ -	unsigned int	   clk_sel; - -	unsigned int	   has_fracval; - -	unsigned long	   ucon;	 /* value of ucon for port */ -	unsigned long	   ulcon;	 /* value of ulcon for port */ -	unsigned long	   ufcon;	 /* value of ufcon for port */ -}; - -/* s3c24xx_uart_devs - * - * this is exported from the core as we cannot use driver_register(), - * or platform_add_device() before the console_initcall() -*/ - -extern struct platform_device *s3c24xx_uart_devs[4]; - -#endif /* __ASSEMBLY__ */ - -#endif /* __ASM_ARM_REGS_SERIAL_H */ - +#include <linux/serial_s3c.h> diff --git a/arch/arm/plat-samsung/include/plat/rtc-core.h b/arch/arm/plat-samsung/include/plat/rtc-core.h index 21d8594d37c..7b542f7b793 100644 --- a/arch/arm/plat-samsung/include/plat/rtc-core.h +++ b/arch/arm/plat-samsung/include/plat/rtc-core.h @@ -19,7 +19,7 @@  /* re-define device name depending on support. */  static inline void s3c_rtc_setname(char *name)  { -#if defined(CONFIG_SAMSUNG_DEV_RTC) || defined(CONFIG_PLAT_S3C24XX) +#if defined(CONFIG_S3C_DEV_RTC) || defined(CONFIG_PLAT_S3C24XX)  	s3c_device_rtc.name = name;  #endif  } diff --git a/arch/arm/plat-samsung/include/plat/sdhci.h b/arch/arm/plat-samsung/include/plat/sdhci.h index 1e0aab08c13..ce1d0f785ef 100644 --- a/arch/arm/plat-samsung/include/plat/sdhci.h +++ b/arch/arm/plat-samsung/include/plat/sdhci.h @@ -153,7 +153,7 @@ static inline void s3c6400_default_sdhci2(void) { }  /* S5P64X0 SDHCI setup */ -#ifdef CONFIG_S5P64X0_SETUP_SDHCI +#ifdef CONFIG_S5P64X0_SETUP_SDHCI_GPIO  static inline void s5p64x0_default_sdhci0(void)  {  #ifdef CONFIG_S3C_DEV_HSMMC @@ -188,7 +188,7 @@ static inline void s5p64x0_default_sdhci1(void) { }  static inline void s5p6440_default_sdhci2(void) { }  static inline void s5p6450_default_sdhci2(void) { } -#endif /* CONFIG_S5P64X0_SETUP_SDHCI */ +#endif /* CONFIG_S5P64X0_SETUP_SDHCI_GPIO */  /* S5PC100 SDHCI setup */ diff --git a/arch/arm/plat-samsung/include/plat/usb-phy.h b/arch/arm/plat-samsung/include/plat/usb-phy.h index 959bcdb03a2..ab34dfadb7f 100644 --- a/arch/arm/plat-samsung/include/plat/usb-phy.h +++ b/arch/arm/plat-samsung/include/plat/usb-phy.h @@ -11,10 +11,7 @@  #ifndef __PLAT_SAMSUNG_USB_PHY_H  #define __PLAT_SAMSUNG_USB_PHY_H __FILE__ -enum s5p_usb_phy_type { -	S5P_USB_PHY_DEVICE, -	S5P_USB_PHY_HOST, -}; +#include <linux/usb/samsung_usb_phy.h>  extern int s5p_usb_phy_init(struct platform_device *pdev, int type);  extern int s5p_usb_phy_exit(struct platform_device *pdev, int type); diff --git a/arch/arm/plat-samsung/irq-vic-timer.c b/arch/arm/plat-samsung/irq-vic-timer.c index 1113066240c..0fceb427382 100644 --- a/arch/arm/plat-samsung/irq-vic-timer.c +++ b/arch/arm/plat-samsung/irq-vic-timer.c @@ -16,6 +16,7 @@  #include <linux/kernel.h>  #include <linux/interrupt.h>  #include <linux/irq.h> +#include <linux/irqchip/chained_irq.h>  #include <linux/io.h>  #include <mach/map.h> @@ -24,8 +25,6 @@  #include <plat/irq-vic-timer.h>  #include <plat/regs-timer.h> -#include <asm/mach/irq.h> -  static void s3c_irq_demux_vic_timer(unsigned int irq, struct irq_desc *desc)  {  	struct irq_chip *chip = irq_get_chip(irq); diff --git a/arch/arm/plat-samsung/s5p-irq-gpioint.c b/arch/arm/plat-samsung/s5p-irq-gpioint.c index bae56131a50..fafdb059043 100644 --- a/arch/arm/plat-samsung/s5p-irq-gpioint.c +++ b/arch/arm/plat-samsung/s5p-irq-gpioint.c @@ -14,6 +14,7 @@  #include <linux/kernel.h>  #include <linux/interrupt.h>  #include <linux/irq.h> +#include <linux/irqchip/chained_irq.h>  #include <linux/io.h>  #include <linux/gpio.h>  #include <linux/slab.h> @@ -22,8 +23,6 @@  #include <plat/gpio-core.h>  #include <plat/gpio-cfg.h> -#include <asm/mach/irq.h> -  #define GPIO_BASE(chip)		((void __iomem *)((unsigned long)((chip)->base) & 0xFFFFF000u))  #define CON_OFFSET		0x700 diff --git a/arch/arm/plat-samsung/s5p-sleep.S b/arch/arm/plat-samsung/s5p-sleep.S index bdf6dadf879..a030e7301da 100644 --- a/arch/arm/plat-samsung/s5p-sleep.S +++ b/arch/arm/plat-samsung/s5p-sleep.S @@ -25,6 +25,9 @@  #include <asm/asm-offsets.h>  #include <asm/hardware/cache-l2x0.h> +#define CPU_MASK	0xff0ffff0 +#define CPU_CORTEX_A9	0x410fc090 +  /*   *	 The following code is located into the .data section. This is to   *	 allow l2x0_regs_phys to be accessed with a relative load while we @@ -51,6 +54,12 @@  ENTRY(s3c_cpu_resume)  #ifdef CONFIG_CACHE_L2X0 +	mrc	p15, 0, r0, c0, c0, 0 +	ldr	r1, =CPU_MASK +	and	r0, r0, r1 +	ldr	r1, =CPU_CORTEX_A9 +	cmp	r0, r1 +	bne	resume_l2on  	adr	r0, l2x0_regs_phys  	ldr	r0, [r0]  	ldr	r1, [r0, #L2X0_R_PHY_BASE] diff --git a/arch/arm/plat-samsung/setup-mipiphy.c b/arch/arm/plat-samsung/setup-mipiphy.c index 14745932760..66df315990a 100644 --- a/arch/arm/plat-samsung/setup-mipiphy.c +++ b/arch/arm/plat-samsung/setup-mipiphy.c @@ -8,6 +8,7 @@   * published by the Free Software Foundation.   */ +#include <linux/export.h>  #include <linux/kernel.h>  #include <linux/platform_device.h>  #include <linux/io.h> @@ -50,8 +51,10 @@ int s5p_csis_phy_enable(int id, bool on)  {  	return __s5p_mipi_phy_control(id, on, S5P_MIPI_DPHY_SRESETN);  } +EXPORT_SYMBOL(s5p_csis_phy_enable);  int s5p_dsim_phy_enable(struct platform_device *pdev, bool on)  {  	return __s5p_mipi_phy_control(pdev->id, on, S5P_MIPI_DPHY_MRESETN);  } +EXPORT_SYMBOL(s5p_dsim_phy_enable); diff --git a/arch/arm/plat-spear/Kconfig b/arch/arm/plat-spear/Kconfig deleted file mode 100644 index 8a08c31b5e2..00000000000 --- a/arch/arm/plat-spear/Kconfig +++ /dev/null @@ -1,47 +0,0 @@ -# -# SPEAr Platform configuration file -# - -if PLAT_SPEAR - -choice -	prompt "ST SPEAr Family" -	default ARCH_SPEAR3XX - -config ARCH_SPEAR13XX -	bool "ST SPEAr13xx with Device Tree" -	select ARCH_HAS_CPUFREQ -	select ARM_GIC -	select CPU_V7 -	select GPIO_SPEAR_SPICS -	select HAVE_SMP -	select MIGHT_HAVE_CACHE_L2X0 -	select PINCTRL -	select USE_OF -	help -	  Supports for ARM's SPEAR13XX family - -config ARCH_SPEAR3XX -	bool "ST SPEAr3xx with Device Tree" -	select ARM_VIC -	select CPU_ARM926T -	select PINCTRL -	select USE_OF -	help -	  Supports for ARM's SPEAR3XX family - -config ARCH_SPEAR6XX -	bool "SPEAr6XX" -	select ARM_VIC -	select CPU_ARM926T -	help -	  Supports for ARM's SPEAR6XX family - -endchoice - -# Adding SPEAr machine specific configuration files -source "arch/arm/mach-spear13xx/Kconfig" -source "arch/arm/mach-spear3xx/Kconfig" -source "arch/arm/mach-spear6xx/Kconfig" - -endif diff --git a/arch/arm/plat-spear/Makefile b/arch/arm/plat-spear/Makefile deleted file mode 100644 index 01e88532a5d..00000000000 --- a/arch/arm/plat-spear/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# -# SPEAr Platform specific Makefile -# - -# Common support -obj-y	:= restart.o time.o - -obj-$(CONFIG_ARCH_SPEAR3XX)	+= pl080.o -obj-$(CONFIG_ARCH_SPEAR6XX)	+= pl080.o diff --git a/arch/arm/plat-versatile/platsmp.c b/arch/arm/plat-versatile/platsmp.c index f2ac1556177..1e1b2d76974 100644 --- a/arch/arm/plat-versatile/platsmp.c +++ b/arch/arm/plat-versatile/platsmp.c @@ -14,7 +14,6 @@  #include <linux/device.h>  #include <linux/jiffies.h>  #include <linux/smp.h> -#include <linux/irqchip/arm-gic.h>  #include <asm/cacheflush.h>  #include <asm/smp_plat.h> @@ -37,13 +36,6 @@ static DEFINE_SPINLOCK(boot_lock);  void __cpuinit versatile_secondary_init(unsigned int cpu)  {  	/* -	 * 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); - -	/*  	 * let the primary processor know we're out of the  	 * pen, then head off into the C entry point  	 */ diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types index 831e1fdfdb2..a10297da122 100644 --- a/arch/arm/tools/mach-types +++ b/arch/arm/tools/mach-types @@ -16,7 +16,7 @@  # are merged into mainline or have been edited in the machine database  # within the last 12 months.  References to machine_is_NAME() do not count!  # -# Last update: Thu Apr 26 08:44:23 2012 +# Last update: Fri Mar 22 17:24:50 2013  #  # machine_is_xxx	CONFIG_xxxx		MACH_TYPE_xxx		number  # @@ -64,8 +64,8 @@ h7201			ARCH_H7201		H7201			161  h7202			ARCH_H7202		H7202			162  iq80321			ARCH_IQ80321		IQ80321			169  ks8695			ARCH_KS8695		KS8695			180 -karo			ARCH_KARO		KARO			190  smdk2410		ARCH_SMDK2410		SMDK2410		193 +ceiva			ARCH_CEIVA		CEIVA			200  voiceblue		MACH_VOICEBLUE		VOICEBLUE		218  h5400			ARCH_H5400		H5400			220  omap_innovator		MACH_OMAP_INNOVATOR	OMAP_INNOVATOR		234 @@ -95,6 +95,7 @@ lpd7a400		MACH_LPD7A400		LPD7A400		389  lpd7a404		MACH_LPD7A404		LPD7A404		390  csb337			MACH_CSB337		CSB337			399  mainstone		MACH_MAINSTONE		MAINSTONE		406 +lite300			MACH_LITE300		LITE300			408  xcep			MACH_XCEP		XCEP			413  arcom_vulcan		MACH_ARCOM_VULCAN	ARCOM_VULCAN		414  nomadik			MACH_NOMADIK		NOMADIK			420 @@ -131,12 +132,14 @@ kb9200			MACH_KB9200		KB9200			612  sx1			MACH_SX1		SX1			613  ixdp465			MACH_IXDP465		IXDP465			618  ixdp2351		MACH_IXDP2351		IXDP2351		619 +cm4008			MACH_CM4008		CM4008			624  iq80332			MACH_IQ80332		IQ80332			629  gtwx5715		MACH_GTWX5715		GTWX5715		641  csb637			MACH_CSB637		CSB637			648  n30			MACH_N30		N30			656  nec_mp900		MACH_NEC_MP900		NEC_MP900		659  kafa			MACH_KAFA		KAFA			662 +cm41xx			MACH_CM41XX		CM41XX			672  ts72xx			MACH_TS72XX		TS72XX			673  otom			MACH_OTOM		OTOM			680  nexcoder_2440		MACH_NEXCODER_2440	NEXCODER_2440		681 @@ -149,6 +152,7 @@ colibri			MACH_COLIBRI		COLIBRI			729  gateway7001		MACH_GATEWAY7001	GATEWAY7001		731  pcm027			MACH_PCM027		PCM027			732  anubis			MACH_ANUBIS		ANUBIS			734 +xboardgp8		MACH_XBOARDGP8		XBOARDGP8		742  akita			MACH_AKITA		AKITA			744  e330			MACH_E330		E330			753  nokia770		MACH_NOKIA770		NOKIA770		755 @@ -157,9 +161,11 @@ edb9315a		MACH_EDB9315A		EDB9315A		772  stargate2		MACH_STARGATE2		STARGATE2		774  intelmote2		MACH_INTELMOTE2		INTELMOTE2		775  trizeps4		MACH_TRIZEPS4		TRIZEPS4		776 +pnx4008			MACH_PNX4008		PNX4008			782  cpuat91			MACH_CPUAT91		CPUAT91			787  iq81340sc		MACH_IQ81340SC		IQ81340SC		799  iq81340mc		MACH_IQ81340MC		IQ81340MC		801 +se4200			MACH_SE4200		SE4200			809  micro9			MACH_MICRO9		MICRO9			811  micro9l			MACH_MICRO9L		MICRO9L			812  omap_palmte		MACH_OMAP_PALMTE	OMAP_PALMTE		817 @@ -178,6 +184,7 @@ mx21ads			MACH_MX21ADS		MX21ADS			851  ams_delta		MACH_AMS_DELTA		AMS_DELTA		862  nas100d			MACH_NAS100D		NAS100D			865  magician		MACH_MAGICIAN		MAGICIAN		875 +cm4002			MACH_CM4002		CM4002			876  nxdkn			MACH_NXDKN		NXDKN			880  palmtx			MACH_PALMTX		PALMTX			885  s3c2413			MACH_S3C2413		S3C2413			887 @@ -203,7 +210,6 @@ omap_fsample		MACH_OMAP_FSAMPLE	OMAP_FSAMPLE		970  snapper_cl15		MACH_SNAPPER_CL15	SNAPPER_CL15		986  omap_palmz71		MACH_OMAP_PALMZ71	OMAP_PALMZ71		993  smdk2412		MACH_SMDK2412		SMDK2412		1009 -bkde303			MACH_BKDE303		BKDE303			1021  smdk2413		MACH_SMDK2413		SMDK2413		1022  aml_m5900		MACH_AML_M5900		AML_M5900		1024  balloon3		MACH_BALLOON3		BALLOON3		1029 @@ -214,6 +220,7 @@ fsg			MACH_FSG		FSG			1091  at91sam9260ek		MACH_AT91SAM9260EK	AT91SAM9260EK		1099  glantank		MACH_GLANTANK		GLANTANK		1100  n2100			MACH_N2100		N2100			1101 +im42xx			MACH_IM42XX		IM42XX			1105  qt2410			MACH_QT2410		QT2410			1108  kixrp435		MACH_KIXRP435		KIXRP435		1109  cc9p9360dev		MACH_CC9P9360DEV	CC9P9360DEV		1114 @@ -247,6 +254,7 @@ csb726			MACH_CSB726		CSB726			1359  davinci_dm6467_evm	MACH_DAVINCI_DM6467_EVM	DAVINCI_DM6467_EVM	1380  davinci_dm355_evm	MACH_DAVINCI_DM355_EVM	DAVINCI_DM355_EVM	1381  littleton		MACH_LITTLETON		LITTLETON		1388 +im4004			MACH_IM4004		IM4004			1400  realview_pb11mp		MACH_REALVIEW_PB11MP	REALVIEW_PB11MP		1407  mx27_3ds		MACH_MX27_3DS		MX27_3DS		1430  halibut			MACH_HALIBUT		HALIBUT			1439 @@ -268,6 +276,7 @@ dns323			MACH_DNS323		DNS323			1542  omap3_beagle		MACH_OMAP3_BEAGLE	OMAP3_BEAGLE		1546  nokia_n810		MACH_NOKIA_N810		NOKIA_N810		1548  pcm038			MACH_PCM038		PCM038			1551 +sg310			MACH_SG310		SG310			1564  ts209			MACH_TS209		TS209			1565  at91cap9adk		MACH_AT91CAP9ADK	AT91CAP9ADK		1566  mx31moboard		MACH_MX31MOBOARD	MX31MOBOARD		1574 @@ -371,7 +380,6 @@ pcm043			MACH_PCM043		PCM043			2072  sheevaplug		MACH_SHEEVAPLUG		SHEEVAPLUG		2097  avengers_lite		MACH_AVENGERS_LITE	AVENGERS_LITE		2104  mx51_babbage		MACH_MX51_BABBAGE	MX51_BABBAGE		2125 -tx37			MACH_TX37		TX37			2127  rd78x00_masa		MACH_RD78X00_MASA	RD78X00_MASA		2135  dm355_leopard		MACH_DM355_LEOPARD	DM355_LEOPARD		2138  ts219			MACH_TS219		TS219			2139 @@ -380,12 +388,12 @@ davinci_da850_evm	MACH_DAVINCI_DA850_EVM	DAVINCI_DA850_EVM	2157  at91sam9g10ek		MACH_AT91SAM9G10EK	AT91SAM9G10EK		2159  omap_4430sdp		MACH_OMAP_4430SDP	OMAP_4430SDP		2160  magx_zn5		MACH_MAGX_ZN5		MAGX_ZN5		2162 -tx25			MACH_TX25		TX25			2177  omap3_torpedo		MACH_OMAP3_TORPEDO	OMAP3_TORPEDO		2178  anw6410			MACH_ANW6410		ANW6410			2183  imx27_visstrim_m10	MACH_IMX27_VISSTRIM_M10	IMX27_VISSTRIM_M10	2187  portuxg20		MACH_PORTUXG20		PORTUXG20		2191  smdkc110		MACH_SMDKC110		SMDKC110		2193 +cabespresso		MACH_CABESPRESSO	CABESPRESSO		2194  omap3517evm		MACH_OMAP3517EVM	OMAP3517EVM		2200  netspace_v2		MACH_NETSPACE_V2	NETSPACE_V2		2201  netspace_max_v2		MACH_NETSPACE_MAX_V2	NETSPACE_MAX_V2		2202 @@ -404,6 +412,7 @@ bigdisk			MACH_BIGDISK		BIGDISK			2283  at91sam9g20ek_2mmc	MACH_AT91SAM9G20EK_2MMC	AT91SAM9G20EK_2MMC	2288  bcmring			MACH_BCMRING		BCMRING			2289  mahimahi		MACH_MAHIMAHI		MAHIMAHI		2304 +cerebric		MACH_CEREBRIC		CEREBRIC		2311  smdk6442		MACH_SMDK6442		SMDK6442		2324  openrd_base		MACH_OPENRD_BASE	OPENRD_BASE		2325  devkit8000		MACH_DEVKIT8000		DEVKIT8000		2330 @@ -423,10 +432,10 @@ raumfeld_rc		MACH_RAUMFELD_RC	RAUMFELD_RC		2413  raumfeld_connector	MACH_RAUMFELD_CONNECTOR	RAUMFELD_CONNECTOR	2414  raumfeld_speaker	MACH_RAUMFELD_SPEAKER	RAUMFELD_SPEAKER	2415  tnetv107x		MACH_TNETV107X		TNETV107X		2418 -mx51_m2id		MACH_MX51_M2ID		MX51_M2ID		2428  smdkv210		MACH_SMDKV210		SMDKV210		2456  omap_zoom3		MACH_OMAP_ZOOM3		OMAP_ZOOM3		2464  omap_3630sdp		MACH_OMAP_3630SDP	OMAP_3630SDP		2465 +cybook2440		MACH_CYBOOK2440		CYBOOK2440		2466  smartq7			MACH_SMARTQ7		SMARTQ7			2479  watson_efm_plugin	MACH_WATSON_EFM_PLUGIN	WATSON_EFM_PLUGIN	2491  g4evm			MACH_G4EVM		G4EVM			2493 @@ -434,12 +443,10 @@ omapl138_hawkboard	MACH_OMAPL138_HAWKBOARD	OMAPL138_HAWKBOARD	2495  ts41x			MACH_TS41X		TS41X			2502  phy3250			MACH_PHY3250		PHY3250			2511  mini6410		MACH_MINI6410		MINI6410		2520 -tx51			MACH_TX51		TX51			2529  mx28evk			MACH_MX28EVK		MX28EVK			2531  smartq5			MACH_SMARTQ5		SMARTQ5			2534  davinci_dm6467tevm	MACH_DAVINCI_DM6467TEVM	DAVINCI_DM6467TEVM	2548  mxt_td60		MACH_MXT_TD60		MXT_TD60		2550 -pca101			MACH_PCA101		PCA101			2595  capc7117		MACH_CAPC7117		CAPC7117		2612  icontrol		MACH_ICONTROL		ICONTROL		2624  gplugd			MACH_GPLUGD		GPLUGD			2625 @@ -465,6 +472,7 @@ igep0030		MACH_IGEP0030		IGEP0030		2717  sbc3530			MACH_SBC3530		SBC3530			2722  saarb			MACH_SAARB		SAARB			2727  harmony			MACH_HARMONY		HARMONY			2731 +cybook_orizon		MACH_CYBOOK_ORIZON	CYBOOK_ORIZON		2733  msm7x30_fluid		MACH_MSM7X30_FLUID	MSM7X30_FLUID		2741  cm_t3517		MACH_CM_T3517		CM_T3517		2750  wbd222			MACH_WBD222		WBD222			2753 @@ -480,10 +488,8 @@ eukrea_cpuimx35sd	MACH_EUKREA_CPUIMX35SD	EUKREA_CPUIMX35SD	2821  eukrea_cpuimx51sd	MACH_EUKREA_CPUIMX51SD	EUKREA_CPUIMX51SD	2822  eukrea_cpuimx51		MACH_EUKREA_CPUIMX51	EUKREA_CPUIMX51		2823  smdkc210		MACH_SMDKC210		SMDKC210		2838 -pcaal1			MACH_PCAAL1		PCAAL1			2843  t5325			MACH_T5325		T5325			2846  income			MACH_INCOME		INCOME			2849 -mx257sx			MACH_MX257SX		MX257SX			2861  goni			MACH_GONI		GONI			2862  bv07			MACH_BV07		BV07			2882  openrd_ultimate		MACH_OPENRD_ULTIMATE	OPENRD_ULTIMATE		2884 @@ -491,7 +497,6 @@ devixp			MACH_DEVIXP		DEVIXP			2885  miccpt			MACH_MICCPT		MICCPT			2886  mic256			MACH_MIC256		MIC256			2887  u5500			MACH_U5500		U5500			2890 -pov15hd			MACH_POV15HD		POV15HD			2910  linkstation_lschl	MACH_LINKSTATION_LSCHL	LINKSTATION_LSCHL	2913  smdkv310		MACH_SMDKV310		SMDKV310		2925  wm8505_7in_netbook	MACH_WM8505_7IN_NETBOOK	WM8505_7IN_NETBOOK	2928 @@ -518,7 +523,6 @@ prima2_evb		MACH_PRIMA2_EVB		PRIMA2_EVB		3103  paz00			MACH_PAZ00		PAZ00			3128  acmenetusfoxg20		MACH_ACMENETUSFOXG20	ACMENETUSFOXG20		3129  ag5evm			MACH_AG5EVM		AG5EVM			3189 -tsunagi			MACH_TSUNAGI		TSUNAGI			3197  ics_if_voip		MACH_ICS_IF_VOIP	ICS_IF_VOIP		3206  wlf_cragg_6410		MACH_WLF_CRAGG_6410	WLF_CRAGG_6410		3207  trimslice		MACH_TRIMSLICE		TRIMSLICE		3209 @@ -529,8 +533,6 @@ msm8960_sim		MACH_MSM8960_SIM	MSM8960_SIM		3230  msm8960_rumi3		MACH_MSM8960_RUMI3	MSM8960_RUMI3		3231  gsia18s			MACH_GSIA18S		GSIA18S			3234  mx53_loco		MACH_MX53_LOCO		MX53_LOCO		3273 -tx53			MACH_TX53		TX53			3279 -encore			MACH_ENCORE		ENCORE			3284  wario			MACH_WARIO		WARIO			3288  cm_t3730		MACH_CM_T3730		CM_T3730		3290  hrefv60			MACH_HREFV60		HREFV60			3293 @@ -538,603 +540,24 @@ armlex4210		MACH_ARMLEX4210		ARMLEX4210		3361  snowball		MACH_SNOWBALL		SNOWBALL		3363  xilinx_ep107		MACH_XILINX_EP107	XILINX_EP107		3378  nuri			MACH_NURI		NURI			3379 -wtplug			MACH_WTPLUG		WTPLUG			3412 -veridis_a300		MACH_VERIDIS_A300	VERIDIS_A300		3448  origen			MACH_ORIGEN		ORIGEN			3455 -wm8650refboard		MACH_WM8650REFBOARD	WM8650REFBOARD		3472 -xarina			MACH_XARINA		XARINA			3476 -sdvr			MACH_SDVR		SDVR			3478 -acer_maya		MACH_ACER_MAYA		ACER_MAYA		3479 -pico			MACH_PICO		PICO			3480 -cwmx233			MACH_CWMX233		CWMX233			3481 -cwam1808		MACH_CWAM1808		CWAM1808		3482 -cwdm365			MACH_CWDM365		CWDM365			3483 -mx51_moray		MACH_MX51_MORAY		MX51_MORAY		3484 -thales_cbc		MACH_THALES_CBC		THALES_CBC		3485 -bluepoint		MACH_BLUEPOINT		BLUEPOINT		3486 -dir665			MACH_DIR665		DIR665			3487 -acmerover1		MACH_ACMEROVER1		ACMEROVER1		3488 -shooter_ct		MACH_SHOOTER_CT		SHOOTER_CT		3489 -bliss			MACH_BLISS		BLISS			3490 -blissc			MACH_BLISSC		BLISSC			3491 -thales_adc		MACH_THALES_ADC		THALES_ADC		3492 -ubisys_p9d_evp		MACH_UBISYS_P9D_EVP	UBISYS_P9D_EVP		3493 -atdgp318		MACH_ATDGP318		ATDGP318		3494 -dma210u			MACH_DMA210U		DMA210U			3495 -em_t3			MACH_EM_T3		EM_T3			3496 -htx3250			MACH_HTX3250		HTX3250			3497 -g50			MACH_G50		G50			3498 -eco5			MACH_ECO5		ECO5			3499 -wintergrasp		MACH_WINTERGRASP	WINTERGRASP		3500 -puro			MACH_PURO		PURO			3501 -shooter_k		MACH_SHOOTER_K		SHOOTER_K		3502  nspire			MACH_NSPIRE		NSPIRE			3503 -mickxx			MACH_MICKXX		MICKXX			3504 -lxmb			MACH_LXMB		LXMB			3505 -adam			MACH_ADAM		ADAM			3507 -b1004			MACH_B1004		B1004			3508 -oboea			MACH_OBOEA		OBOEA			3509 -a1015			MACH_A1015		A1015			3510 -robin_vbdt30		MACH_ROBIN_VBDT30	ROBIN_VBDT30		3511 -tegra_enterprise	MACH_TEGRA_ENTERPRISE	TEGRA_ENTERPRISE	3512 -rfl108200_mk10		MACH_RFL108200_MK10	RFL108200_MK10		3513 -rfl108300_mk16		MACH_RFL108300_MK16	RFL108300_MK16		3514 -rover_v7		MACH_ROVER_V7		ROVER_V7		3515 -miphone			MACH_MIPHONE		MIPHONE			3516 -femtobts		MACH_FEMTOBTS		FEMTOBTS		3517 -monopoli		MACH_MONOPOLI		MONOPOLI		3518 -boss			MACH_BOSS		BOSS			3519 -davinci_dm368_vtam	MACH_DAVINCI_DM368_VTAM	DAVINCI_DM368_VTAM	3520 -clcon			MACH_CLCON		CLCON			3521  nokia_rm696		MACH_NOKIA_RM696	NOKIA_RM696		3522 -tahiti			MACH_TAHITI		TAHITI			3523 -fighter			MACH_FIGHTER		FIGHTER			3524 -sgh_i710		MACH_SGH_I710		SGH_I710		3525 -integreproscb		MACH_INTEGREPROSCB	INTEGREPROSCB		3526 -monza			MACH_MONZA		MONZA			3527 -calimain		MACH_CALIMAIN		CALIMAIN		3528 -mx6q_sabreauto		MACH_MX6Q_SABREAUTO	MX6Q_SABREAUTO		3529 -gma01x			MACH_GMA01X		GMA01X			3530 -sbc51			MACH_SBC51		SBC51			3531 -fit			MACH_FIT		FIT			3532 -steelhead		MACH_STEELHEAD		STEELHEAD		3533 -panther			MACH_PANTHER		PANTHER			3534 -msm8960_liquid		MACH_MSM8960_LIQUID	MSM8960_LIQUID		3535 -lexikonct		MACH_LEXIKONCT		LEXIKONCT		3536 -ns2816_stb		MACH_NS2816_STB		NS2816_STB		3537 -sei_mm2_lpc3250		MACH_SEI_MM2_LPC3250	SEI_MM2_LPC3250		3538 -cmimx53			MACH_CMIMX53		CMIMX53			3539 -sandwich		MACH_SANDWICH		SANDWICH		3540 -chief			MACH_CHIEF		CHIEF			3541 -pogo_e02		MACH_POGO_E02		POGO_E02		3542  mikrap_x168		MACH_MIKRAP_X168	MIKRAP_X168		3543 -htcmozart		MACH_HTCMOZART		HTCMOZART		3544 -htcgold			MACH_HTCGOLD		HTCGOLD			3545 -mt72xx			MACH_MT72XX		MT72XX			3546 -mx51_ivy		MACH_MX51_IVY		MX51_IVY		3547 -mx51_lvd		MACH_MX51_LVD		MX51_LVD		3548 -omap3_wiser2		MACH_OMAP3_WISER2	OMAP3_WISER2		3549 -dreamplug		MACH_DREAMPLUG		DREAMPLUG		3550 -cobas_c_111		MACH_COBAS_C_111	COBAS_C_111		3551 -cobas_u_411		MACH_COBAS_U_411	COBAS_U_411		3552 -hssd			MACH_HSSD		HSSD			3553 -iom35x			MACH_IOM35X		IOM35X			3554 -psom_omap		MACH_PSOM_OMAP		PSOM_OMAP		3555 -iphone_2g		MACH_IPHONE_2G		IPHONE_2G		3556 -iphone_3g		MACH_IPHONE_3G		IPHONE_3G		3557 -ipod_touch_1g		MACH_IPOD_TOUCH_1G	IPOD_TOUCH_1G		3558 -pharos_tpc		MACH_PHAROS_TPC		PHAROS_TPC		3559 -mx53_hydra		MACH_MX53_HYDRA		MX53_HYDRA		3560 -ns2816_dev_board	MACH_NS2816_DEV_BOARD	NS2816_DEV_BOARD	3561 -iphone_3gs		MACH_IPHONE_3GS		IPHONE_3GS		3562 -iphone_4		MACH_IPHONE_4		IPHONE_4		3563 -ipod_touch_4g		MACH_IPOD_TOUCH_4G	IPOD_TOUCH_4G		3564 -dragon_e1100		MACH_DRAGON_E1100	DRAGON_E1100		3565 -topside			MACH_TOPSIDE		TOPSIDE			3566 -irisiii			MACH_IRISIII		IRISIII			3567  deto_macarm9		MACH_DETO_MACARM9	DETO_MACARM9		3568 -eti_d1			MACH_ETI_D1		ETI_D1			3569 -som3530sdk		MACH_SOM3530SDK		SOM3530SDK		3570 -oc_engine		MACH_OC_ENGINE		OC_ENGINE		3571 -apq8064_sim		MACH_APQ8064_SIM	APQ8064_SIM		3572 -alps			MACH_ALPS		ALPS			3575 -tny_t3730		MACH_TNY_T3730		TNY_T3730		3576 -geryon_nfe		MACH_GERYON_NFE		GERYON_NFE		3577 -ns2816_ref_board	MACH_NS2816_REF_BOARD	NS2816_REF_BOARD	3578 -silverstone		MACH_SILVERSTONE	SILVERSTONE		3579 -mtt2440			MACH_MTT2440		MTT2440			3580 -ynicdb			MACH_YNICDB		YNICDB			3581 -bct			MACH_BCT		BCT			3582 -tuscan			MACH_TUSCAN		TUSCAN			3583 -xbt_sam9g45		MACH_XBT_SAM9G45	XBT_SAM9G45		3584 -enbw_cmc		MACH_ENBW_CMC		ENBW_CMC		3585 -ch104mx257		MACH_CH104MX257		CH104MX257		3587 -openpri			MACH_OPENPRI		OPENPRI			3588 -am335xevm		MACH_AM335XEVM		AM335XEVM		3589 -picodmb			MACH_PICODMB		PICODMB			3590 -waluigi			MACH_WALUIGI		WALUIGI			3591 -punicag7		MACH_PUNICAG7		PUNICAG7		3592 -ipad_1g			MACH_IPAD_1G		IPAD_1G			3593 -appletv_2g		MACH_APPLETV_2G		APPLETV_2G		3594 -mach_ecog45		MACH_MACH_ECOG45	MACH_ECOG45		3595 -ait_cam_enc_4xx		MACH_AIT_CAM_ENC_4XX	AIT_CAM_ENC_4XX		3596 -runnymede		MACH_RUNNYMEDE		RUNNYMEDE		3597 -play			MACH_PLAY		PLAY			3598 -hw90260			MACH_HW90260		HW90260			3599 -tagh			MACH_TAGH		TAGH			3600 -filbert			MACH_FILBERT		FILBERT			3601 -getinge_netcomv3	MACH_GETINGE_NETCOMV3	GETINGE_NETCOMV3	3602 -cw20			MACH_CW20		CW20			3603 -cinema			MACH_CINEMA		CINEMA			3604 -cinema_tea		MACH_CINEMA_TEA		CINEMA_TEA		3605 -cinema_coffee		MACH_CINEMA_COFFEE	CINEMA_COFFEE		3606 -cinema_juice		MACH_CINEMA_JUICE	CINEMA_JUICE		3607 -mx53_mirage2		MACH_MX53_MIRAGE2	MX53_MIRAGE2		3609 -mx53_efikasb		MACH_MX53_EFIKASB	MX53_EFIKASB		3610 -stm_b2000		MACH_STM_B2000		STM_B2000		3612  m28evk			MACH_M28EVK		M28EVK			3613 -pda			MACH_PDA		PDA			3614 -meraki_mr58		MACH_MERAKI_MR58	MERAKI_MR58		3615  kota2			MACH_KOTA2		KOTA2			3616 -letcool			MACH_LETCOOL		LETCOOL			3617 -mx27iat			MACH_MX27IAT		MX27IAT			3618 -apollo_td		MACH_APOLLO_TD		APOLLO_TD		3619 -arena			MACH_ARENA		ARENA			3620 -gsngateway		MACH_GSNGATEWAY		GSNGATEWAY		3621 -lf2000			MACH_LF2000		LF2000			3622  bonito			MACH_BONITO		BONITO			3623 -asymptote		MACH_ASYMPTOTE		ASYMPTOTE		3624 -bst2brd			MACH_BST2BRD		BST2BRD			3625 -tx335s			MACH_TX335S		TX335S			3626 -pelco_tesla		MACH_PELCO_TESLA	PELCO_TESLA		3627 -rrhtestplat		MACH_RRHTESTPLAT	RRHTESTPLAT		3628 -vidtonic_pro		MACH_VIDTONIC_PRO	VIDTONIC_PRO		3629 -pl_apollo		MACH_PL_APOLLO		PL_APOLLO		3630 -pl_phoenix		MACH_PL_PHOENIX		PL_PHOENIX		3631 -m28cu3			MACH_M28CU3		M28CU3			3632 -vvbox_hd		MACH_VVBOX_HD		VVBOX_HD		3633 -coreware_sam9260_	MACH_COREWARE_SAM9260_	COREWARE_SAM9260_	3634 -marmaduke		MACH_MARMADUKE		MARMADUKE		3635 -amg_xlcore_camera	MACH_AMG_XLCORE_CAMERA	AMG_XLCORE_CAMERA	3636  omap3_egf		MACH_OMAP3_EGF		OMAP3_EGF		3637  smdk4212		MACH_SMDK4212		SMDK4212		3638 -dnp9200			MACH_DNP9200		DNP9200			3639 -tf101			MACH_TF101		TF101			3640 -omap3silvio		MACH_OMAP3SILVIO	OMAP3SILVIO		3641 -picasso2		MACH_PICASSO2		PICASSO2		3642 -vangogh2		MACH_VANGOGH2		VANGOGH2		3643 -olpc_xo_1_75		MACH_OLPC_XO_1_75	OLPC_XO_1_75		3644 -gx400			MACH_GX400		GX400			3645 -gs300			MACH_GS300		GS300			3646 -acer_a9			MACH_ACER_A9		ACER_A9			3647 -vivow_evm		MACH_VIVOW_EVM		VIVOW_EVM		3648 -veloce_cxq		MACH_VELOCE_CXQ		VELOCE_CXQ		3649 -veloce_cxm		MACH_VELOCE_CXM		VELOCE_CXM		3650 -p1852			MACH_P1852		P1852			3651 -naxy100			MACH_NAXY100		NAXY100			3652 -taishan			MACH_TAISHAN		TAISHAN			3653 -touchlink		MACH_TOUCHLINK		TOUCHLINK		3654 -stm32f103ze		MACH_STM32F103ZE	STM32F103ZE		3655 -mcx			MACH_MCX		MCX			3656 -stm_nmhdk_fli7610	MACH_STM_NMHDK_FLI7610	STM_NMHDK_FLI7610	3657 -top28x			MACH_TOP28X		TOP28X			3658 -okl4vp_microvisor	MACH_OKL4VP_MICROVISOR	OKL4VP_MICROVISOR	3659 -pop			MACH_POP		POP			3660 -layer			MACH_LAYER		LAYER			3661 -trondheim		MACH_TRONDHEIM		TRONDHEIM		3662 -eva			MACH_EVA		EVA			3663 -trust_taurus		MACH_TRUST_TAURUS	TRUST_TAURUS		3664 -ns2816_huashan		MACH_NS2816_HUASHAN	NS2816_HUASHAN		3665 -ns2816_yangcheng	MACH_NS2816_YANGCHENG	NS2816_YANGCHENG	3666 -p852			MACH_P852		P852			3667 -flea3			MACH_FLEA3		FLEA3			3668 -bowfin			MACH_BOWFIN		BOWFIN			3669 -mv88de3100		MACH_MV88DE3100		MV88DE3100		3670 -pia_am35x		MACH_PIA_AM35X		PIA_AM35X		3671 -cedar			MACH_CEDAR		CEDAR			3672 -picasso_e		MACH_PICASSO_E		PICASSO_E		3673 -samsung_e60		MACH_SAMSUNG_E60	SAMSUNG_E60		3674 -sdvr_mini		MACH_SDVR_MINI		SDVR_MINI		3676 -omap3_ij3k		MACH_OMAP3_IJ3K		OMAP3_IJ3K		3677 -modasmc1		MACH_MODASMC1		MODASMC1		3678 -apq8064_rumi3		MACH_APQ8064_RUMI3	APQ8064_RUMI3		3679 -matrix506		MACH_MATRIX506		MATRIX506		3680 -msm9615_mtp		MACH_MSM9615_MTP	MSM9615_MTP		3681 -dm36x_spawndc		MACH_DM36X_SPAWNDC	DM36X_SPAWNDC		3682 -sff792			MACH_SFF792		SFF792			3683 -am335xiaevm		MACH_AM335XIAEVM	AM335XIAEVM		3684 -g3c2440			MACH_G3C2440		G3C2440			3685 -tion270			MACH_TION270		TION270			3686 -w22q7arm02		MACH_W22Q7ARM02		W22Q7ARM02		3687 -omap_cat		MACH_OMAP_CAT		OMAP_CAT		3688 -at91sam9n12ek		MACH_AT91SAM9N12EK	AT91SAM9N12EK		3689 -morrison		MACH_MORRISON		MORRISON		3690 -svdu			MACH_SVDU		SVDU			3691 -lpp01			MACH_LPP01		LPP01			3692 -ubc283			MACH_UBC283		UBC283			3693 -zeppelin		MACH_ZEPPELIN		ZEPPELIN		3694 -motus			MACH_MOTUS		MOTUS			3695 -neomainboard		MACH_NEOMAINBOARD	NEOMAINBOARD		3696 -devkit3250		MACH_DEVKIT3250		DEVKIT3250		3697 -devkit7000		MACH_DEVKIT7000		DEVKIT7000		3698 -fmc_uic			MACH_FMC_UIC		FMC_UIC			3699 -fmc_dcm			MACH_FMC_DCM		FMC_DCM			3700 -batwm			MACH_BATWM		BATWM			3701 -atlas6cb		MACH_ATLAS6CB		ATLAS6CB		3702 -blue			MACH_BLUE		BLUE			3705 -colorado		MACH_COLORADO		COLORADO		3706 -popc			MACH_POPC		POPC			3707 -promwad_jade		MACH_PROMWAD_JADE	PROMWAD_JADE		3708 -amp			MACH_AMP		AMP			3709 -gnet_amp		MACH_GNET_AMP		GNET_AMP		3710 -toques			MACH_TOQUES		TOQUES			3711  apx4devkit		MACH_APX4DEVKIT		APX4DEVKIT		3712 -dct_storm		MACH_DCT_STORM		DCT_STORM		3713 -owl			MACH_OWL		OWL			3715 -cogent_csb1741		MACH_COGENT_CSB1741	COGENT_CSB1741		3716 -adillustra610		MACH_ADILLUSTRA610	ADILLUSTRA610		3718 -ecafe_na04		MACH_ECAFE_NA04		ECAFE_NA04		3719 -popct			MACH_POPCT		POPCT			3720 -omap3_helena		MACH_OMAP3_HELENA	OMAP3_HELENA		3721 -ach			MACH_ACH		ACH			3722 -module_dtb		MACH_MODULE_DTB		MODULE_DTB		3723 -oslo_elisabeth		MACH_OSLO_ELISABETH	OSLO_ELISABETH		3725 -tt01			MACH_TT01		TT01			3726 -msm8930_cdp		MACH_MSM8930_CDP	MSM8930_CDP		3727 -msm8930_mtp		MACH_MSM8930_MTP	MSM8930_MTP		3728 -msm8930_fluid		MACH_MSM8930_FLUID	MSM8930_FLUID		3729 -ltu11			MACH_LTU11		LTU11			3730 -am1808_spawnco		MACH_AM1808_SPAWNCO	AM1808_SPAWNCO		3731 -flx6410			MACH_FLX6410		FLX6410			3732 -mx6q_qsb		MACH_MX6Q_QSB		MX6Q_QSB		3733 -mx53_plt424		MACH_MX53_PLT424	MX53_PLT424		3734 -jasmine			MACH_JASMINE		JASMINE			3735 -l138_owlboard_plus	MACH_L138_OWLBOARD_PLUS	L138_OWLBOARD_PLUS	3736 -wr21			MACH_WR21		WR21			3737 -peaboy			MACH_PEABOY		PEABOY			3739 -mx28_plato		MACH_MX28_PLATO		MX28_PLATO		3740 -kacom2			MACH_KACOM2		KACOM2			3741 -slco			MACH_SLCO		SLCO			3742 -imx51pico		MACH_IMX51PICO		IMX51PICO		3743 -glink1			MACH_GLINK1		GLINK1			3744 -diamond			MACH_DIAMOND		DIAMOND			3745 -d9000			MACH_D9000		D9000			3746 -w5300e01		MACH_W5300E01		W5300E01		3747 -im6000			MACH_IM6000		IM6000			3748 -mx51_fred51		MACH_MX51_FRED51	MX51_FRED51		3749 -stm32f2			MACH_STM32F2		STM32F2			3750 -ville			MACH_VILLE		VILLE			3751 -ptip_murnau		MACH_PTIP_MURNAU	PTIP_MURNAU		3752 -ptip_classic		MACH_PTIP_CLASSIC	PTIP_CLASSIC		3753 -mx53grb			MACH_MX53GRB		MX53GRB			3754 -gagarin			MACH_GAGARIN		GAGARIN			3755 -nas2big			MACH_NAS2BIG		NAS2BIG			3757 -superfemto		MACH_SUPERFEMTO		SUPERFEMTO		3758 -teufel			MACH_TEUFEL		TEUFEL			3759 -dinara			MACH_DINARA		DINARA			3760 -vanquish		MACH_VANQUISH		VANQUISH		3761 -zipabox1		MACH_ZIPABOX1		ZIPABOX1		3762 -u9540			MACH_U9540		U9540			3763 -jet			MACH_JET		JET			3764  smdk4412		MACH_SMDK4412		SMDK4412		3765 -elite			MACH_ELITE		ELITE			3766 -spear320_hmi		MACH_SPEAR320_HMI	SPEAR320_HMI		3767 -ontario			MACH_ONTARIO		ONTARIO			3768 -mx6q_sabrelite		MACH_MX6Q_SABRELITE	MX6Q_SABRELITE		3769 -vc200			MACH_VC200		VC200			3770 -msm7625a_ffa		MACH_MSM7625A_FFA	MSM7625A_FFA		3771 -msm7625a_surf		MACH_MSM7625A_SURF	MSM7625A_SURF		3772 -benthossbp		MACH_BENTHOSSBP		BENTHOSSBP		3773 -smdk5210		MACH_SMDK5210		SMDK5210		3774 -empq2300		MACH_EMPQ2300		EMPQ2300		3775 -minipos			MACH_MINIPOS		MINIPOS			3776 -omap5_sevm		MACH_OMAP5_SEVM		OMAP5_SEVM		3777 -shelter			MACH_SHELTER		SHELTER			3778 -omap3_devkit8500	MACH_OMAP3_DEVKIT8500	OMAP3_DEVKIT8500	3779 -edgetd			MACH_EDGETD		EDGETD			3780 -copperyard		MACH_COPPERYARD		COPPERYARD		3781 -edge_u			MACH_EDGE_U		EDGE_U			3783 -edge_td			MACH_EDGE_TD		EDGE_TD			3784 -wdss			MACH_WDSS		WDSS			3785 -dl_pb25			MACH_DL_PB25		DL_PB25			3786 -dss11			MACH_DSS11		DSS11			3787 -cpa			MACH_CPA		CPA			3788 -aptp2000		MACH_APTP2000		APTP2000		3789  marzen			MACH_MARZEN		MARZEN			3790 -st_turbine		MACH_ST_TURBINE		ST_TURBINE		3791 -gtl_it3300		MACH_GTL_IT3300		GTL_IT3300		3792 -mx6_mule		MACH_MX6_MULE		MX6_MULE		3793 -v7pxa_dt		MACH_V7PXA_DT		V7PXA_DT		3794 -v7mmp_dt		MACH_V7MMP_DT		V7MMP_DT		3795 -dragon7			MACH_DRAGON7		DRAGON7			3796  krome			MACH_KROME		KROME			3797 -oratisdante		MACH_ORATISDANTE	ORATISDANTE		3798 -fathom			MACH_FATHOM		FATHOM			3799 -dns325			MACH_DNS325		DNS325			3800 -sarnen			MACH_SARNEN		SARNEN			3801 -ubisys_g1		MACH_UBISYS_G1		UBISYS_G1		3802 -mx53_pf1		MACH_MX53_PF1		MX53_PF1		3803 -asanti			MACH_ASANTI		ASANTI			3804 -volta			MACH_VOLTA		VOLTA			3805 -knight			MACH_KNIGHT		KNIGHT			3807 -beaglebone		MACH_BEAGLEBONE		BEAGLEBONE		3808 -becker			MACH_BECKER		BECKER			3809 -fc360			MACH_FC360		FC360			3810 -pmi2_xls		MACH_PMI2_XLS		PMI2_XLS		3811 -taranto			MACH_TARANTO		TARANTO			3812 -plutux			MACH_PLUTUX		PLUTUX			3813 -ipmp_medcom		MACH_IPMP_MEDCOM	IPMP_MEDCOM		3814 -absolut			MACH_ABSOLUT		ABSOLUT			3815 -awpb3			MACH_AWPB3		AWPB3			3816 -nfp32xx_dt		MACH_NFP32XX_DT		NFP32XX_DT		3817 -dl_pb53			MACH_DL_PB53		DL_PB53			3818 -acu_ii			MACH_ACU_II		ACU_II			3819 -avalon			MACH_AVALON		AVALON			3820 -sphinx			MACH_SPHINX		SPHINX			3821 -titan_t			MACH_TITAN_T		TITAN_T			3822 -harvest_boris		MACH_HARVEST_BORIS	HARVEST_BORIS		3823 -mach_msm7x30_m3s	MACH_MACH_MSM7X30_M3S	MACH_MSM7X30_M3S	3824 -smdk5250		MACH_SMDK5250		SMDK5250		3825 -imxt_lite		MACH_IMXT_LITE		IMXT_LITE		3826 -imxt_std		MACH_IMXT_STD		IMXT_STD		3827 -imxt_log		MACH_IMXT_LOG		IMXT_LOG		3828 -imxt_nav		MACH_IMXT_NAV		IMXT_NAV		3829 -imxt_full		MACH_IMXT_FULL		IMXT_FULL		3830 -ag09015			MACH_AG09015		AG09015			3831 -am3517_mt_ventoux	MACH_AM3517_MT_VENTOUX	AM3517_MT_VENTOUX	3832 -dp1arm9			MACH_DP1ARM9		DP1ARM9			3833 -picasso_m		MACH_PICASSO_M		PICASSO_M		3834 -video_gadget		MACH_VIDEO_GADGET	VIDEO_GADGET		3835 -mtt_om3x		MACH_MTT_OM3X		MTT_OM3X		3836 -mx6q_arm2		MACH_MX6Q_ARM2		MX6Q_ARM2		3837 -picosam9g45		MACH_PICOSAM9G45	PICOSAM9G45		3838 -vpm_dm365		MACH_VPM_DM365		VPM_DM365		3839 -bonfire			MACH_BONFIRE		BONFIRE			3840 -mt2p2d			MACH_MT2P2D		MT2P2D			3841 -sigpda01		MACH_SIGPDA01		SIGPDA01		3842 -cn27			MACH_CN27		CN27			3843 -mx25_cwtap		MACH_MX25_CWTAP		MX25_CWTAP		3844 -apf28			MACH_APF28		APF28			3845 -pelco_maxwell		MACH_PELCO_MAXWELL	PELCO_MAXWELL		3846 -ge_phoenix		MACH_GE_PHOENIX		GE_PHOENIX		3847 -empc_a500		MACH_EMPC_A500		EMPC_A500		3848 -ims_arm9		MACH_IMS_ARM9		IMS_ARM9		3849 -mini2416		MACH_MINI2416		MINI2416		3850 -mini2450		MACH_MINI2450		MINI2450		3851 -mini310			MACH_MINI310		MINI310			3852 -spear_hurricane		MACH_SPEAR_HURRICANE	SPEAR_HURRICANE		3853 -mt7208			MACH_MT7208		MT7208			3854 -lpc178x			MACH_LPC178X		LPC178X			3855 -farleys			MACH_FARLEYS		FARLEYS			3856 -efm32gg_dk3750		MACH_EFM32GG_DK3750	EFM32GG_DK3750		3857 -zeus_board		MACH_ZEUS_BOARD		ZEUS_BOARD		3858 -cc51			MACH_CC51		CC51			3859 -fxi_c210		MACH_FXI_C210		FXI_C210		3860 -msm8627_cdp		MACH_MSM8627_CDP	MSM8627_CDP		3861 -msm8627_mtp		MACH_MSM8627_MTP	MSM8627_MTP		3862  armadillo800eva		MACH_ARMADILLO800EVA	ARMADILLO800EVA		3863 -primou			MACH_PRIMOU		PRIMOU			3864 -primoc			MACH_PRIMOC		PRIMOC			3865 -primoct			MACH_PRIMOCT		PRIMOCT			3866 -a9500			MACH_A9500		A9500			3867 -pluto			MACH_PLUTO		PLUTO			3869 -acfx100			MACH_ACFX100		ACFX100			3870 -msm8625_rumi3		MACH_MSM8625_RUMI3	MSM8625_RUMI3		3871 -valente			MACH_VALENTE		VALENTE			3872 -crfs_rfeye		MACH_CRFS_RFEYE		CRFS_RFEYE		3873 -rfeye			MACH_RFEYE		RFEYE			3874 -phidget_sbc3		MACH_PHIDGET_SBC3	PHIDGET_SBC3		3875 -tcw_mika		MACH_TCW_MIKA		TCW_MIKA		3876 -imx28_egf		MACH_IMX28_EGF		IMX28_EGF		3877 -valente_wx		MACH_VALENTE_WX		VALENTE_WX		3878 -huangshans		MACH_HUANGSHANS		HUANGSHANS		3879 -bosphorus1		MACH_BOSPHORUS1		BOSPHORUS1		3880 -prima			MACH_PRIMA		PRIMA			3881 -evita_ulk		MACH_EVITA_ULK		EVITA_ULK		3884 -merisc600		MACH_MERISC600		MERISC600		3885 -dolak			MACH_DOLAK		DOLAK			3886 -sbc53			MACH_SBC53		SBC53			3887 -elite_ulk		MACH_ELITE_ULK		ELITE_ULK		3888 -pov2			MACH_POV2		POV2			3889 -ipod_touch_2g		MACH_IPOD_TOUCH_2G	IPOD_TOUCH_2G		3890 -da850_pqab		MACH_DA850_PQAB		DA850_PQAB		3891 -fermi			MACH_FERMI		FERMI			3892 -ccardwmx28		MACH_CCARDWMX28		CCARDWMX28		3893 -ccardmx28		MACH_CCARDMX28		CCARDMX28		3894 -fs20_fcm2050		MACH_FS20_FCM2050	FS20_FCM2050		3895 -kinetis			MACH_KINETIS		KINETIS			3896 -kai			MACH_KAI		KAI			3897 -bcthb2			MACH_BCTHB2		BCTHB2			3898 -inels3_cu		MACH_INELS3_CU		INELS3_CU		3899 -da850_apollo		MACH_DA850_APOLLO	DA850_APOLLO		3901 -tracnas			MACH_TRACNAS		TRACNAS			3902 -mityarm335x		MACH_MITYARM335X	MITYARM335X		3903 -xcgz7x			MACH_XCGZ7X		XCGZ7X			3904 -cubox			MACH_CUBOX		CUBOX			3905 -terminator		MACH_TERMINATOR		TERMINATOR		3906 -eye03			MACH_EYE03		EYE03			3907 -kota3			MACH_KOTA3		KOTA3			3908 -pscpe			MACH_PSCPE		PSCPE			3910 -akt1100			MACH_AKT1100		AKT1100			3911 -pcaaxl2			MACH_PCAAXL2		PCAAXL2			3912 -primodd_ct		MACH_PRIMODD_CT		PRIMODD_CT		3913 -nsbc			MACH_NSBC		NSBC			3914 -meson2_skt		MACH_MESON2_SKT		MESON2_SKT		3915 -meson2_ref		MACH_MESON2_REF		MESON2_REF		3916 -ccardwmx28js		MACH_CCARDWMX28JS	CCARDWMX28JS		3917 -ccardmx28js		MACH_CCARDMX28JS	CCARDMX28JS		3918 -indico			MACH_INDICO		INDICO			3919 -msm8960dt		MACH_MSM8960DT		MSM8960DT		3920 -primods			MACH_PRIMODS		PRIMODS			3921 -beluga_m1388		MACH_BELUGA_M1388	BELUGA_M1388		3922 -primotd			MACH_PRIMOTD		PRIMOTD			3923 -varan_master		MACH_VARAN_MASTER	VARAN_MASTER		3924 -primodd			MACH_PRIMODD		PRIMODD			3925 -jetduo			MACH_JETDUO		JETDUO			3926  mx53_umobo		MACH_MX53_UMOBO		MX53_UMOBO		3927 -trats			MACH_TRATS		TRATS			3928 -starcraft		MACH_STARCRAFT		STARCRAFT		3929 -qseven_tegra2		MACH_QSEVEN_TEGRA2	QSEVEN_TEGRA2		3930 -lichee_sun4i_devbd	MACH_LICHEE_SUN4I_DEVBD	LICHEE_SUN4I_DEVBD	3931 -movenow			MACH_MOVENOW		MOVENOW			3932 -golf_u			MACH_GOLF_U		GOLF_U			3933 -msm7627a_evb		MACH_MSM7627A_EVB	MSM7627A_EVB		3934 -rambo			MACH_RAMBO		RAMBO			3935 -golfu			MACH_GOLFU		GOLFU			3936 -mango310		MACH_MANGO310		MANGO310		3937 -dns343			MACH_DNS343		DNS343			3938 -var_som_om44		MACH_VAR_SOM_OM44	VAR_SOM_OM44		3939 -naon			MACH_NAON		NAON			3940 -vp4000			MACH_VP4000		VP4000			3941 -impcard			MACH_IMPCARD		IMPCARD			3942 -smoovcam		MACH_SMOOVCAM		SMOOVCAM		3943 -cobham3725		MACH_COBHAM3725		COBHAM3725		3944 -cobham3730		MACH_COBHAM3730		COBHAM3730		3945 -cobham3703		MACH_COBHAM3703		COBHAM3703		3946 -quetzal			MACH_QUETZAL		QUETZAL			3947 -apq8064_cdp		MACH_APQ8064_CDP	APQ8064_CDP		3948 -apq8064_mtp		MACH_APQ8064_MTP	APQ8064_MTP		3949 -apq8064_fluid		MACH_APQ8064_FLUID	APQ8064_FLUID		3950 -apq8064_liquid		MACH_APQ8064_LIQUID	APQ8064_LIQUID		3951 -mango210		MACH_MANGO210		MANGO210		3952 -mango100		MACH_MANGO100		MANGO100		3953 -mango24			MACH_MANGO24		MANGO24			3954 -mango64			MACH_MANGO64		MANGO64			3955 -nsa320			MACH_NSA320		NSA320			3956 -elv_ccu2		MACH_ELV_CCU2		ELV_CCU2		3957 -triton_x00		MACH_TRITON_X00		TRITON_X00		3958 -triton_1500_2000	MACH_TRITON_1500_2000	TRITON_1500_2000	3959 -pogoplugv4		MACH_POGOPLUGV4		POGOPLUGV4		3960 -venus_cl		MACH_VENUS_CL		VENUS_CL		3961 -vulcano_g20		MACH_VULCANO_G20	VULCANO_G20		3962 -sgs_i9100		MACH_SGS_I9100		SGS_I9100		3963 -stsv2			MACH_STSV2		STSV2			3964 -csb1724			MACH_CSB1724		CSB1724			3965 -omapl138_lcdk		MACH_OMAPL138_LCDK	OMAPL138_LCDK		3966 -pvd_mx25		MACH_PVD_MX25		PVD_MX25		3968 -meson6_skt		MACH_MESON6_SKT		MESON6_SKT		3969 -meson6_ref		MACH_MESON6_REF		MESON6_REF		3970 -pxm			MACH_PXM		PXM			3971 -pogoplugv3		MACH_POGOPLUGV3		POGOPLUGV3		3973 -mlp89626		MACH_MLP89626		MLP89626		3974 -iomegahmndce		MACH_IOMEGAHMNDCE	IOMEGAHMNDCE		3975 -pogoplugv3pci		MACH_POGOPLUGV3PCI	POGOPLUGV3PCI		3976 -bntv250			MACH_BNTV250		BNTV250			3977 -mx53_qseven		MACH_MX53_QSEVEN	MX53_QSEVEN		3978 -gtl_it1100		MACH_GTL_IT1100		GTL_IT1100		3979 -mx6q_sabresd		MACH_MX6Q_SABRESD	MX6Q_SABRESD		3980  mt4			MACH_MT4		MT4			3981 -jumbo_d			MACH_JUMBO_D		JUMBO_D			3982 -jumbo_i			MACH_JUMBO_I		JUMBO_I			3983 -fs20_dmp		MACH_FS20_DMP		FS20_DMP		3984 -dns320			MACH_DNS320		DNS320			3985 -mx28bacos		MACH_MX28BACOS		MX28BACOS		3986 -tl80			MACH_TL80		TL80			3987 -polatis_nic_1001	MACH_POLATIS_NIC_1001	POLATIS_NIC_1001	3988 -tely			MACH_TELY		TELY			3989  u8520			MACH_U8520		U8520			3990 -manta			MACH_MANTA		MANTA			3991 -mpq8064_cdp		MACH_MPQ8064_CDP	MPQ8064_CDP		3993 -mpq8064_dtv		MACH_MPQ8064_DTV	MPQ8064_DTV		3995 -dm368som		MACH_DM368SOM		DM368SOM		3996 -gprisb2			MACH_GPRISB2		GPRISB2			3997 -chammid			MACH_CHAMMID		CHAMMID			3998 -seoul2			MACH_SEOUL2		SEOUL2			3999 -omap4_nooktablet	MACH_OMAP4_NOOKTABLET	OMAP4_NOOKTABLET	4000 -aalto			MACH_AALTO		AALTO			4001 -metro			MACH_METRO		METRO			4002 -cydm3730		MACH_CYDM3730		CYDM3730		4003 -tqma53			MACH_TQMA53		TQMA53			4004 -msm7627a_qrd3		MACH_MSM7627A_QRD3	MSM7627A_QRD3		4005 -mx28_canby		MACH_MX28_CANBY		MX28_CANBY		4006 -tiger			MACH_TIGER		TIGER			4007 -pcats_9307_type_a	MACH_PCATS_9307_TYPE_A	PCATS_9307_TYPE_A	4008 -pcats_9307_type_o	MACH_PCATS_9307_TYPE_O	PCATS_9307_TYPE_O	4009 -pcats_9307_type_r	MACH_PCATS_9307_TYPE_R	PCATS_9307_TYPE_R	4010 -streamplug		MACH_STREAMPLUG		STREAMPLUG		4011 -icechicken_dev		MACH_ICECHICKEN_DEV	ICECHICKEN_DEV		4012 -hedgehog		MACH_HEDGEHOG		HEDGEHOG		4013 -yusend_obc		MACH_YUSEND_OBC		YUSEND_OBC		4014 -imxninja		MACH_IMXNINJA		IMXNINJA		4015 -omap4_jarod		MACH_OMAP4_JAROD	OMAP4_JAROD		4016 -eco5_pk			MACH_ECO5_PK		ECO5_PK			4017 -qj2440			MACH_QJ2440		QJ2440			4018 -mx6q_mercury		MACH_MX6Q_MERCURY	MX6Q_MERCURY		4019 -cm6810			MACH_CM6810		CM6810			4020 -omap4_torpedo		MACH_OMAP4_TORPEDO	OMAP4_TORPEDO		4021 -nsa310			MACH_NSA310		NSA310			4022 -tmx536			MACH_TMX536		TMX536			4023 -ktt20			MACH_KTT20		KTT20			4024 -dragonix		MACH_DRAGONIX		DRAGONIX		4025 -lungching		MACH_LUNGCHING		LUNGCHING		4026 -bulogics		MACH_BULOGICS		BULOGICS		4027 -mx535_sx		MACH_MX535_SX		MX535_SX		4028 -ngui3250		MACH_NGUI3250		NGUI3250		4029 -salutec_dac		MACH_SALUTEC_DAC	SALUTEC_DAC		4030 -loco			MACH_LOCO		LOCO			4031 -ctera_plug_usi		MACH_CTERA_PLUG_USI	CTERA_PLUG_USI		4032 -scepter			MACH_SCEPTER		SCEPTER			4033 -sga			MACH_SGA		SGA			4034 -p_81_j5			MACH_P_81_J5		P_81_J5			4035 -p_81_o4			MACH_P_81_O4		P_81_O4			4036 -msm8625_surf		MACH_MSM8625_SURF	MSM8625_SURF		4037 -carallon_shark		MACH_CARALLON_SHARK	CARALLON_SHARK		4038 -ordog			MACH_ORDOG		ORDOG			4040 -puente_io		MACH_PUENTE_IO		PUENTE_IO		4041 -msm8625_evb		MACH_MSM8625_EVB	MSM8625_EVB		4042 -ev_am1707		MACH_EV_AM1707		EV_AM1707		4043 -ev_am1707e2		MACH_EV_AM1707E2	EV_AM1707E2		4044 -ev_am3517e2		MACH_EV_AM3517E2	EV_AM3517E2		4045 -calabria		MACH_CALABRIA		CALABRIA		4046 -ev_imx287		MACH_EV_IMX287		EV_IMX287		4047 -erau			MACH_ERAU		ERAU			4048 -sichuan			MACH_SICHUAN		SICHUAN			4049 -davinci_da850		MACH_DAVINCI_DA850	DAVINCI_DA850		4051 -omap138_trunarc		MACH_OMAP138_TRUNARC	OMAP138_TRUNARC		4052 -bcm4761			MACH_BCM4761		BCM4761			4053 -picasso_e2		MACH_PICASSO_E2		PICASSO_E2		4054 -picasso_mf		MACH_PICASSO_MF		PICASSO_MF		4055 -miro			MACH_MIRO		MIRO			4056 -at91sam9g20ewon3	MACH_AT91SAM9G20EWON3	AT91SAM9G20EWON3	4057 -yoyo			MACH_YOYO		YOYO			4058 -windjkl			MACH_WINDJKL		WINDJKL			4059 -monarudo		MACH_MONARUDO		MONARUDO		4060 -batan			MACH_BATAN		BATAN			4061 -tadao			MACH_TADAO		TADAO			4062 -baso			MACH_BASO		BASO			4063 -mahon			MACH_MAHON		MAHON			4064 -villec2			MACH_VILLEC2		VILLEC2			4065 -asi1230			MACH_ASI1230		ASI1230			4066 -alaska			MACH_ALASKA		ALASKA			4067 -swarco_shdsl2		MACH_SWARCO_SHDSL2	SWARCO_SHDSL2		4068 -oxrtu			MACH_OXRTU		OXRTU			4069 -omap5_panda		MACH_OMAP5_PANDA	OMAP5_PANDA		4070 -c8000			MACH_C8000		C8000			4072 -bje_display3_5		MACH_BJE_DISPLAY3_5	BJE_DISPLAY3_5		4073 -picomod7		MACH_PICOMOD7		PICOMOD7		4074 -picocom5		MACH_PICOCOM5		PICOCOM5		4075 -qblissa8		MACH_QBLISSA8		QBLISSA8		4076 -armstonea8		MACH_ARMSTONEA8		ARMSTONEA8		4077 -netdcu14		MACH_NETDCU14		NETDCU14		4078 -at91sam9x5_epiphan	MACH_AT91SAM9X5_EPIPHAN	AT91SAM9X5_EPIPHAN	4079 -p2u			MACH_P2U		P2U			4080 -doris			MACH_DORIS		DORIS			4081 -j49			MACH_J49		J49			4082 -vdss2e			MACH_VDSS2E		VDSS2E			4083 -vc300			MACH_VC300		VC300			4084 -ns115_pad_test		MACH_NS115_PAD_TEST	NS115_PAD_TEST		4085 -ns115_pad_ref		MACH_NS115_PAD_REF	NS115_PAD_REF		4086 -ns115_phone_test	MACH_NS115_PHONE_TEST	NS115_PHONE_TEST	4087 -ns115_phone_ref		MACH_NS115_PHONE_REF	NS115_PHONE_REF		4088 -golfc			MACH_GOLFC		GOLFC			4089 -xerox_olympus		MACH_XEROX_OLYMPUS	XEROX_OLYMPUS		4090 -mx6sl_arm2		MACH_MX6SL_ARM2		MX6SL_ARM2		4091 -csb1701_csb1726		MACH_CSB1701_CSB1726	CSB1701_CSB1726		4092 -at91sam9xeek		MACH_AT91SAM9XEEK	AT91SAM9XEEK		4093 -ebv210			MACH_EBV210		EBV210			4094 -msm7627a_qrd7		MACH_MSM7627A_QRD7	MSM7627A_QRD7		4095 -svthin			MACH_SVTHIN		SVTHIN			4096 -duovero			MACH_DUOVERO		DUOVERO			4097  chupacabra		MACH_CHUPACABRA		CHUPACABRA		4098  scorpion		MACH_SCORPION		SCORPION		4099  davinci_he_hmi10	MACH_DAVINCI_HE_HMI10	DAVINCI_HE_HMI10	4100 @@ -1157,7 +580,6 @@ tam335x			MACH_TAM335X		TAM335X			4116  grouper			MACH_GROUPER		GROUPER			4117  mpcsa21_9g20		MACH_MPCSA21_9G20	MPCSA21_9G20		4118  m6u_cpu			MACH_M6U_CPU		M6U_CPU			4119 -davinci_dp10		MACH_DAVINCI_DP10	DAVINCI_DP10		4120  ginkgo			MACH_GINKGO		GINKGO			4121  cgt_qmx6		MACH_CGT_QMX6		CGT_QMX6		4122  profpga			MACH_PROFPGA		PROFPGA			4123 @@ -1204,3 +626,384 @@ baileys			MACH_BAILEYS		BAILEYS			4169  familybox		MACH_FAMILYBOX		FAMILYBOX		4170  ensemble_mx35		MACH_ENSEMBLE_MX35	ENSEMBLE_MX35		4171  sc_sps_1		MACH_SC_SPS_1		SC_SPS_1		4172 +ucsimply_sam9260	MACH_UCSIMPLY_SAM9260	UCSIMPLY_SAM9260	4173 +unicorn			MACH_UNICORN		UNICORN			4174 +m9g45a			MACH_M9G45A		M9G45A			4175 +mtwebif			MACH_MTWEBIF		MTWEBIF			4176 +playstone		MACH_PLAYSTONE		PLAYSTONE		4177 +chelsea			MACH_CHELSEA		CHELSEA			4178 +bayern			MACH_BAYERN		BAYERN			4179 +mitwo			MACH_MITWO		MITWO			4180 +mx25_noah		MACH_MX25_NOAH		MX25_NOAH		4181 +stm_b2020		MACH_STM_B2020		STM_B2020		4182 +annax_src		MACH_ANNAX_SRC		ANNAX_SRC		4183 +ionics_stratus		MACH_IONICS_STRATUS	IONICS_STRATUS		4184 +hugo			MACH_HUGO		HUGO			4185 +em300			MACH_EM300		EM300			4186 +mmp3_qseven		MACH_MMP3_QSEVEN	MMP3_QSEVEN		4187 +bosphorus2		MACH_BOSPHORUS2		BOSPHORUS2		4188 +tt2200			MACH_TT2200		TT2200			4189 +ocelot3			MACH_OCELOT3		OCELOT3			4190 +tek_cobra		MACH_TEK_COBRA		TEK_COBRA		4191 +protou			MACH_PROTOU		PROTOU			4192 +msm8625_evt		MACH_MSM8625_EVT	MSM8625_EVT		4193 +mx53_sellwood		MACH_MX53_SELLWOOD	MX53_SELLWOOD		4194 +somiq_am35		MACH_SOMIQ_AM35		SOMIQ_AM35		4195 +somiq_am37		MACH_SOMIQ_AM37		SOMIQ_AM37		4196 +k2_plc_cl		MACH_K2_PLC_CL		K2_PLC_CL		4197 +tc2			MACH_TC2		TC2			4198 +dulex_j			MACH_DULEX_J		DULEX_J			4199 +stm_b2044		MACH_STM_B2044		STM_B2044		4200 +deluxe_j		MACH_DELUXE_J		DELUXE_J		4201 +mango2443		MACH_MANGO2443		MANGO2443		4202 +cp2dcg			MACH_CP2DCG		CP2DCG			4203 +cp2dtg			MACH_CP2DTG		CP2DTG			4204 +cp2dug			MACH_CP2DUG		CP2DUG			4205 +var_som_am33		MACH_VAR_SOM_AM33	VAR_SOM_AM33		4206 +pepper			MACH_PEPPER		PEPPER			4207 +mango2450		MACH_MANGO2450		MANGO2450		4208 +valente_wx_c9		MACH_VALENTE_WX_C9	VALENTE_WX_C9		4209 +minitv			MACH_MINITV		MINITV			4210 +u8540			MACH_U8540		U8540			4211 +iv_atlas_i_z7e		MACH_IV_ATLAS_I_Z7E	IV_ATLAS_I_Z7E		4212 +mach_type_sky		MACH_MACH_TYPE_SKY	MACH_TYPE_SKY		4214 +bluesky			MACH_BLUESKY		BLUESKY			4215 +ngrouter		MACH_NGROUTER		NGROUTER		4216 +mx53_denetim		MACH_MX53_DENETIM	MX53_DENETIM		4217 +opal			MACH_OPAL		OPAL			4218 +gnet_us3gref		MACH_GNET_US3GREF	GNET_US3GREF		4219 +gnet_nc3g		MACH_GNET_NC3G		GNET_NC3G		4220 +gnet_ge3g		MACH_GNET_GE3G		GNET_GE3G		4221 +adp2			MACH_ADP2		ADP2			4222 +tqma28			MACH_TQMA28		TQMA28			4223 +kacom3			MACH_KACOM3		KACOM3			4224 +rrhdemo			MACH_RRHDEMO		RRHDEMO			4225 +protodug		MACH_PROTODUG		PROTODUG		4226 +lago			MACH_LAGO		LAGO			4227 +ktt30			MACH_KTT30		KTT30			4228 +ts43xx			MACH_TS43XX		TS43XX			4229 +mx6q_denso		MACH_MX6Q_DENSO		MX6Q_DENSO		4230 +comsat_gsmumts8		MACH_COMSAT_GSMUMTS8	COMSAT_GSMUMTS8		4231 +dreamx			MACH_DREAMX		DREAMX			4232 +thunderstonem		MACH_THUNDERSTONEM	THUNDERSTONEM		4233 +yoyopad			MACH_YOYOPAD		YOYOPAD			4234 +yoyopatient		MACH_YOYOPATIENT	YOYOPATIENT		4235 +a10l			MACH_A10L		A10L			4236 +mq60			MACH_MQ60		MQ60			4237 +linkstation_lsql	MACH_LINKSTATION_LSQL	LINKSTATION_LSQL	4238 +am3703gateway		MACH_AM3703GATEWAY	AM3703GATEWAY		4239 +accipiter		MACH_ACCIPITER		ACCIPITER		4240 +magnidug		MACH_MAGNIDUG		MAGNIDUG		4242 +hydra			MACH_HYDRA		HYDRA			4243 +sun3i			MACH_SUN3I		SUN3I			4244 +stm_b2078		MACH_STM_B2078		STM_B2078		4245 +at91sam9263deskv2	MACH_AT91SAM9263DESKV2	AT91SAM9263DESKV2	4246 +deluxe_r		MACH_DELUXE_R		DELUXE_R		4247 +p_98_v			MACH_P_98_V		P_98_V			4248 +p_98_c			MACH_P_98_C		P_98_C			4249 +davinci_am18xx_omn	MACH_DAVINCI_AM18XX_OMN	DAVINCI_AM18XX_OMN	4250 +socfpga_cyclone5	MACH_SOCFPGA_CYCLONE5	SOCFPGA_CYCLONE5	4251 +cabatuin		MACH_CABATUIN		CABATUIN		4252 +yoyopad_ft		MACH_YOYOPAD_FT		YOYOPAD_FT		4253 +dan2400evb		MACH_DAN2400EVB		DAN2400EVB		4254 +dan3400evb		MACH_DAN3400EVB		DAN3400EVB		4255 +edm_sf_imx6		MACH_EDM_SF_IMX6	EDM_SF_IMX6		4256 +edm_cf_imx6		MACH_EDM_CF_IMX6	EDM_CF_IMX6		4257 +vpos3xx			MACH_VPOS3XX		VPOS3XX			4258 +vulcano_9x5		MACH_VULCANO_9X5	VULCANO_9X5		4259 +spmp8000		MACH_SPMP8000		SPMP8000		4260 +catalina		MACH_CATALINA		CATALINA		4261 +rd88f5181l_fe		MACH_RD88F5181L_FE	RD88F5181L_FE		4262 +mx535_mx		MACH_MX535_MX		MX535_MX		4263 +armadillo840		MACH_ARMADILLO840	ARMADILLO840		4264 +spc9000baseboard	MACH_SPC9000BASEBOARD	SPC9000BASEBOARD	4265 +iris			MACH_IRIS		IRIS			4266 +protodcg		MACH_PROTODCG		PROTODCG		4267 +palmtree		MACH_PALMTREE		PALMTREE		4268 +novena			MACH_NOVENA		NOVENA			4269 +ma_um			MACH_MA_UM		MA_UM			4270 +ma_am			MACH_MA_AM		MA_AM			4271 +ems348			MACH_EMS348		EMS348			4272 +cm_fx6			MACH_CM_FX6		CM_FX6			4273 +arndale			MACH_ARNDALE		ARNDALE			4274 +q5xr5			MACH_Q5XR5		Q5XR5			4275 +willow			MACH_WILLOW		WILLOW			4276 +omap3621_odyv3		MACH_OMAP3621_ODYV3	OMAP3621_ODYV3		4277 +omapl138_presonus	MACH_OMAPL138_PRESONUS	OMAPL138_PRESONUS	4278 +dvf99			MACH_DVF99		DVF99			4279 +impression_j		MACH_IMPRESSION_J	IMPRESSION_J		4280 +qblissa9		MACH_QBLISSA9		QBLISSA9		4281 +robin_heliview10	MACH_ROBIN_HELIVIEW10	ROBIN_HELIVIEW10	4282 +sun7i			MACH_SUN7I		SUN7I			4283 +mx6q_hdmidongle		MACH_MX6Q_HDMIDONGLE	MX6Q_HDMIDONGLE		4284 +mx6_sid2		MACH_MX6_SID2		MX6_SID2		4285 +helios_v3		MACH_HELIOS_V3		HELIOS_V3		4286 +helios_v4		MACH_HELIOS_V4		HELIOS_V4		4287 +q7_imx6			MACH_Q7_IMX6		Q7_IMX6			4288 +odroidx			MACH_ODROIDX		ODROIDX			4289 +robpro			MACH_ROBPRO		ROBPRO			4290 +research59if_mk1	MACH_RESEARCH59IF_MK1	RESEARCH59IF_MK1	4291 +bobsleigh		MACH_BOBSLEIGH		BOBSLEIGH		4292 +dcshgwt3		MACH_DCSHGWT3		DCSHGWT3		4293 +gld1018			MACH_GLD1018		GLD1018			4294 +ev10			MACH_EV10		EV10			4295 +nitrogen6x		MACH_NITROGEN6X		NITROGEN6X		4296 +p_107_bb		MACH_P_107_BB		P_107_BB		4297 +evita_utl		MACH_EVITA_UTL		EVITA_UTL		4298 +falconwing		MACH_FALCONWING		FALCONWING		4299 +dct3			MACH_DCT3		DCT3			4300 +cpx2e_cell		MACH_CPX2E_CELL		CPX2E_CELL		4301 +amiro			MACH_AMIRO		AMIRO			4302 +mx6q_brassboard		MACH_MX6Q_BRASSBOARD	MX6Q_BRASSBOARD		4303 +dalmore			MACH_DALMORE		DALMORE			4304 +omap3_portal7cp		MACH_OMAP3_PORTAL7CP	OMAP3_PORTAL7CP		4305 +tegra_pluto		MACH_TEGRA_PLUTO	TEGRA_PLUTO		4306 +mx6sl_evk		MACH_MX6SL_EVK		MX6SL_EVK		4307 +m7			MACH_M7			M7			4308 +pxm2			MACH_PXM2		PXM2			4309 +haba_knx_lite		MACH_HABA_KNX_LITE	HABA_KNX_LITE		4310 +tai			MACH_TAI		TAI			4311 +prototd			MACH_PROTOTD		PROTOTD			4312 +dst_tonto		MACH_DST_TONTO		DST_TONTO		4313 +draco			MACH_DRACO		DRACO			4314 +dxr2			MACH_DXR2		DXR2			4315 +rut			MACH_RUT		RUT			4316 +am180x_wsc		MACH_AM180X_WSC		AM180X_WSC		4317 +deluxe_u		MACH_DELUXE_U		DELUXE_U		4318 +deluxe_ul		MACH_DELUXE_UL		DELUXE_UL		4319 +at91sam9260medths	MACH_AT91SAM9260MEDTHS	AT91SAM9260MEDTHS	4320 +matrix516		MACH_MATRIX516		MATRIX516		4321 +vid401x			MACH_VID401X		VID401X			4322 +helios_v5		MACH_HELIOS_V5		HELIOS_V5		4323 +playpaq2		MACH_PLAYPAQ2		PLAYPAQ2		4324 +igam			MACH_IGAM		IGAM			4325 +amico_i			MACH_AMICO_I		AMICO_I			4326 +amico_e			MACH_AMICO_E		AMICO_E			4327 +sentient_mm3_ck		MACH_SENTIENT_MM3_CK	SENTIENT_MM3_CK		4328 +smx6			MACH_SMX6		SMX6			4329 +pango			MACH_PANGO		PANGO			4330 +ns115_stick		MACH_NS115_STICK	NS115_STICK		4331 +bctrm3			MACH_BCTRM3		BCTRM3			4332 +doctorws		MACH_DOCTORWS		DOCTORWS		4333 +m2601			MACH_M2601		M2601			4334 +vgg1111			MACH_VGG1111		VGG1111			4337 +countach		MACH_COUNTACH		COUNTACH		4338 +visstrim_sm20		MACH_VISSTRIM_SM20	VISSTRIM_SM20		4339 +a639			MACH_A639		A639			4340 +spacemonkey		MACH_SPACEMONKEY	SPACEMONKEY		4341 +zpdu_stamp		MACH_ZPDU_STAMP		ZPDU_STAMP		4342 +htc_g7_clone		MACH_HTC_G7_CLONE	HTC_G7_CLONE		4343 +ft2080_corvus		MACH_FT2080_CORVUS	FT2080_CORVUS		4344 +fisland			MACH_FISLAND		FISLAND			4345 +zpdu			MACH_ZPDU		ZPDU			4346 +urt			MACH_URT		URT			4347 +conti_ovip		MACH_CONTI_OVIP		CONTI_OVIP		4348 +omapl138_nagra		MACH_OMAPL138_NAGRA	OMAPL138_NAGRA		4349 +da850_at3kp1		MACH_DA850_AT3KP1	DA850_AT3KP1		4350 +da850_at3kp2		MACH_DA850_AT3KP2	DA850_AT3KP2		4351 +surma			MACH_SURMA		SURMA			4352 +stm_b2092		MACH_STM_B2092		STM_B2092		4353 +mx535_ycr		MACH_MX535_YCR		MX535_YCR		4354 +m7_wl			MACH_M7_WL		M7_WL			4355 +m7_u			MACH_M7_U		M7_U			4356 +omap3_stndt_evm		MACH_OMAP3_STNDT_EVM	OMAP3_STNDT_EVM		4357 +m7_wlv			MACH_M7_WLV		M7_WLV			4358 +xam3517			MACH_XAM3517		XAM3517			4359 +a220			MACH_A220		A220			4360 +aclima_odie		MACH_ACLIMA_ODIE	ACLIMA_ODIE		4361 +vibble			MACH_VIBBLE		VIBBLE			4362 +k2_u			MACH_K2_U		K2_U			4363 +mx53_egf		MACH_MX53_EGF		MX53_EGF		4364 +novpek_imx53		MACH_NOVPEK_IMX53	NOVPEK_IMX53		4365 +novpek_imx6x		MACH_NOVPEK_IMX6X	NOVPEK_IMX6X		4366 +mx25_smartbox		MACH_MX25_SMARTBOX	MX25_SMARTBOX		4367 +eicg6410		MACH_EICG6410		EICG6410		4368 +picasso_e3		MACH_PICASSO_E3		PICASSO_E3		4369 +motonavigator		MACH_MOTONAVIGATOR	MOTONAVIGATOR		4370 +varioconnect2		MACH_VARIOCONNECT2	VARIOCONNECT2		4371 +deluxe_tw		MACH_DELUXE_TW		DELUXE_TW		4372 +kore3			MACH_KORE3		KORE3			4374 +mx6s_drs		MACH_MX6S_DRS		MX6S_DRS		4375 +cmimx6			MACH_CMIMX6		CMIMX6			4376 +roth			MACH_ROTH		ROTH			4377 +eq4ux			MACH_EQ4UX		EQ4UX			4378 +x1plus			MACH_X1PLUS		X1PLUS			4379 +modimx27		MACH_MODIMX27		MODIMX27		4380 +videon_hduac		MACH_VIDEON_HDUAC	VIDEON_HDUAC		4381 +blackbird		MACH_BLACKBIRD		BLACKBIRD		4382 +runmaster		MACH_RUNMASTER		RUNMASTER		4383 +ceres			MACH_CERES		CERES			4384 +nad435			MACH_NAD435		NAD435			4385 +ns115_proto_type	MACH_NS115_PROTO_TYPE	NS115_PROTO_TYPE	4386 +fs20_vcc		MACH_FS20_VCC		FS20_VCC		4387 +meson6tv_skt		MACH_MESON6TV_SKT	MESON6TV_SKT		4389 +keystone		MACH_KEYSTONE		KEYSTONE		4390 +pcm052			MACH_PCM052		PCM052			4391 +qrd_skud_prime		MACH_QRD_SKUD_PRIME	QRD_SKUD_PRIME		4393 +guf_santaro		MACH_GUF_SANTARO	GUF_SANTARO		4395 +sheepshead		MACH_SHEEPSHEAD		SHEEPSHEAD		4396 +mx6_iwg15m_mxm		MACH_MX6_IWG15M_MXM	MX6_IWG15M_MXM		4397 +mx6_iwg15m_q7		MACH_MX6_IWG15M_Q7	MX6_IWG15M_Q7		4398 +at91sam9263if8mic	MACH_AT91SAM9263IF8MIC	AT91SAM9263IF8MIC	4399 +marcopolo		MACH_MARCOPOLO		MARCOPOLO		4401 +mx535_sdcr		MACH_MX535_SDCR		MX535_SDCR		4402 +mx53_csb2733		MACH_MX53_CSB2733	MX53_CSB2733		4403 +diva			MACH_DIVA		DIVA			4404 +ncr_7744		MACH_NCR_7744		NCR_7744		4405 +macallan		MACH_MACALLAN		MACALLAN		4406 +wnr3500			MACH_WNR3500		WNR3500			4407 +pgavrf			MACH_PGAVRF		PGAVRF			4408 +helios_v6		MACH_HELIOS_V6		HELIOS_V6		4409 +lcct			MACH_LCCT		LCCT			4410 +csndug			MACH_CSNDUG		CSNDUG			4411 +wandboard_imx6		MACH_WANDBOARD_IMX6	WANDBOARD_IMX6		4412 +omap4_jet		MACH_OMAP4_JET		OMAP4_JET		4413 +tegra_roth		MACH_TEGRA_ROTH		TEGRA_ROTH		4414 +m7dcg			MACH_M7DCG		M7DCG			4415 +m7dug			MACH_M7DUG		M7DUG			4416 +m7dtg			MACH_M7DTG		M7DTG			4417 +ap42x			MACH_AP42X		AP42X			4418 +var_som_mx6		MACH_VAR_SOM_MX6	VAR_SOM_MX6		4419 +pdlu			MACH_PDLU		PDLU			4420 +hydrogen		MACH_HYDROGEN		HYDROGEN		4421 +npa211e			MACH_NPA211E		NPA211E			4422 +arcadia			MACH_ARCADIA		ARCADIA			4423 +arcadia_l		MACH_ARCADIA_L		ARCADIA_L		4424 +msm8930dt		MACH_MSM8930DT		MSM8930DT		4425 +ktam3874		MACH_KTAM3874		KTAM3874		4426 +cec4			MACH_CEC4		CEC4			4427 +ape6evm			MACH_APE6EVM		APE6EVM			4428 +tx6			MACH_TX6		TX6			4429 +cfa10037		MACH_CFA10037		CFA10037		4431 +ezp1000			MACH_EZP1000		EZP1000			4433 +wgr826v			MACH_WGR826V		WGR826V			4434 +exuma			MACH_EXUMA		EXUMA			4435 +fregate			MACH_FREGATE		FREGATE			4436 +osirisimx508		MACH_OSIRISIMX508	OSIRISIMX508		4437 +st_exigo		MACH_ST_EXIGO		ST_EXIGO		4438 +pismo			MACH_PISMO		PISMO			4439 +atc7			MACH_ATC7		ATC7			4440 +nspireclp		MACH_NSPIRECLP		NSPIRECLP		4441 +nspiretp		MACH_NSPIRETP		NSPIRETP		4442 +nspirecx		MACH_NSPIRECX		NSPIRECX		4443 +maya			MACH_MAYA		MAYA			4444 +wecct			MACH_WECCT		WECCT			4445 +m2s			MACH_M2S		M2S			4446 +msm8625q_evbd		MACH_MSM8625Q_EVBD	MSM8625Q_EVBD		4447 +tiny210			MACH_TINY210		TINY210			4448 +g3			MACH_G3			G3			4449 +hurricane		MACH_HURRICANE		HURRICANE		4450 +mx6_pod			MACH_MX6_POD		MX6_POD			4451 +elondcn			MACH_ELONDCN		ELONDCN			4452 +cwmx535			MACH_CWMX535		CWMX535			4453 +m7_wlj			MACH_M7_WLJ		M7_WLJ			4454 +qsp_arm			MACH_QSP_ARM		QSP_ARM			4455 +msm8625q_skud		MACH_MSM8625Q_SKUD	MSM8625Q_SKUD		4456 +htcmondrian		MACH_HTCMONDRIAN	HTCMONDRIAN		4457 +watson_ead		MACH_WATSON_EAD		WATSON_EAD		4458 +mitwoa			MACH_MITWOA		MITWOA			4459 +omap3_wolverine		MACH_OMAP3_WOLVERINE	OMAP3_WOLVERINE		4460 +mapletree		MACH_MAPLETREE		MAPLETREE		4461 +msm8625_fih_sae		MACH_MSM8625_FIH_SAE	MSM8625_FIH_SAE		4462 +epc35			MACH_EPC35		EPC35			4463 +smartrtu		MACH_SMARTRTU		SMARTRTU		4464 +rcm101			MACH_RCM101		RCM101			4465 +amx_imx53_mxx		MACH_AMX_IMX53_MXX	AMX_IMX53_MXX		4466 +acer_a12		MACH_ACER_A12		ACER_A12		4470 +sbc6x			MACH_SBC6X		SBC6X			4471 +u2			MACH_U2			U2			4472 +smdk4270		MACH_SMDK4270		SMDK4270		4473 +priscillag		MACH_PRISCILLAG		PRISCILLAG		4474 +priscillac		MACH_PRISCILLAC		PRISCILLAC		4475 +priscilla		MACH_PRISCILLA		PRISCILLA		4476 +innova_shpu_v2		MACH_INNOVA_SHPU_V2	INNOVA_SHPU_V2		4477 +mach_type_dep2410	MACH_MACH_TYPE_DEP2410	MACH_TYPE_DEP2410	4479 +bctre3			MACH_BCTRE3		BCTRE3			4480 +omap_m100		MACH_OMAP_M100		OMAP_M100		4481 +flo			MACH_FLO		FLO			4482 +nanobone		MACH_NANOBONE		NANOBONE		4483 +stm_b2105		MACH_STM_B2105		STM_B2105		4484 +omap4_bsc_bap_v3	MACH_OMAP4_BSC_BAP_V3	OMAP4_BSC_BAP_V3	4485 +ss1pam			MACH_SS1PAM		SS1PAM			4486 +primominiu		MACH_PRIMOMINIU		PRIMOMINIU		4488 +mrt_35hd_dualnas_e	MACH_MRT_35HD_DUALNAS_E	MRT_35HD_DUALNAS_E	4489 +kiwi			MACH_KIWI		KIWI			4490 +hw90496			MACH_HW90496		HW90496			4491 +mep2440			MACH_MEP2440		MEP2440			4492 +colibri_t30		MACH_COLIBRI_T30	COLIBRI_T30		4493 +cwv1			MACH_CWV1		CWV1			4494 +nsa325			MACH_NSA325		NSA325			4495 +dpxmtc			MACH_DPXMTC		DPXMTC			4497 +tt_stuttgart		MACH_TT_STUTTGART	TT_STUTTGART		4498 +miranda_apcii		MACH_MIRANDA_APCII	MIRANDA_APCII		4499 +mx6q_moderox		MACH_MX6Q_MODEROX	MX6Q_MODEROX		4500 +mudskipper		MACH_MUDSKIPPER		MUDSKIPPER		4501 +urania			MACH_URANIA		URANIA			4502 +stm_b2112		MACH_STM_B2112		STM_B2112		4503 +mx6q_ats_phoenix	MACH_MX6Q_ATS_PHOENIX	MX6Q_ATS_PHOENIX	4505 +stm_b2116		MACH_STM_B2116		STM_B2116		4506 +mythology		MACH_MYTHOLOGY		MYTHOLOGY		4507 +fc360v1			MACH_FC360V1		FC360V1			4508 +gps_sensor		MACH_GPS_SENSOR		GPS_SENSOR		4509 +gazelle			MACH_GAZELLE		GAZELLE			4510 +mpq8064_dma		MACH_MPQ8064_DMA	MPQ8064_DMA		4511 +wems_asd01		MACH_WEMS_ASD01		WEMS_ASD01		4512 +apalis_t30		MACH_APALIS_T30		APALIS_T30		4513 +armstonea9		MACH_ARMSTONEA9		ARMSTONEA9		4515 +omap_blazetablet	MACH_OMAP_BLAZETABLET	OMAP_BLAZETABLET	4516 +ar6mxq			MACH_AR6MXQ		AR6MXQ			4517 +ar6mxs			MACH_AR6MXS		AR6MXS			4518 +gwventana		MACH_GWVENTANA		GWVENTANA		4520 +igep0033		MACH_IGEP0033		IGEP0033		4521 +h52c1_concerto		MACH_H52C1_CONCERTO	H52C1_CONCERTO		4524 +fcmbrd			MACH_FCMBRD		FCMBRD			4525 +pcaaxs1			MACH_PCAAXS1		PCAAXS1			4526 +ls_orca			MACH_LS_ORCA		LS_ORCA			4527 +pcm051lb		MACH_PCM051LB		PCM051LB		4528 +mx6s_lp507_gvci		MACH_MX6S_LP507_GVCI	MX6S_LP507_GVCI		4529 +dido			MACH_DIDO		DIDO			4530 +swarco_itc3_9g20	MACH_SWARCO_ITC3_9G20	SWARCO_ITC3_9G20	4531 +robo_roady		MACH_ROBO_ROADY		ROBO_ROADY		4532 +rskrza1			MACH_RSKRZA1		RSKRZA1			4533 +swarco_sid		MACH_SWARCO_SID		SWARCO_SID		4534 +mx6_iwg15s_sbc		MACH_MX6_IWG15S_SBC	MX6_IWG15S_SBC		4535 +mx6q_camaro		MACH_MX6Q_CAMARO	MX6Q_CAMARO		4536 +hb6mxs			MACH_HB6MXS		HB6MXS			4537 +lager			MACH_LAGER		LAGER			4538 +lp8x4x			MACH_LP8X4X		LP8X4X			4539 +tegratab7		MACH_TEGRATAB7		TEGRATAB7		4540 +andromeda		MACH_ANDROMEDA		ANDROMEDA		4541 +bootes			MACH_BOOTES		BOOTES			4542 +nethmi			MACH_NETHMI		NETHMI			4543 +tegratab		MACH_TEGRATAB		TEGRATAB		4544 +som5_evb		MACH_SOM5_EVB		SOM5_EVB		4545 +venaticorum		MACH_VENATICORUM	VENATICORUM		4546 +stm_b2110		MACH_STM_B2110		STM_B2110		4547 +elux_hathor		MACH_ELUX_HATHOR	ELUX_HATHOR		4548 +helios_v7		MACH_HELIOS_V7		HELIOS_V7		4549 +xc10v1			MACH_XC10V1		XC10V1			4550 +cp2u			MACH_CP2U		CP2U			4551 +iap_f			MACH_IAP_F		IAP_F			4552 +iap_g			MACH_IAP_G		IAP_G			4553 +aae			MACH_AAE		AAE			4554 +pegasus			MACH_PEGASUS		PEGASUS			4555 +cygnus			MACH_CYGNUS		CYGNUS			4556 +centaurus		MACH_CENTAURUS		CENTAURUS		4557 +msm8930_qrd8930		MACH_MSM8930_QRD8930	MSM8930_QRD8930		4558 +quby_tim		MACH_QUBY_TIM		QUBY_TIM		4559 +zedi3250a		MACH_ZEDI3250A		ZEDI3250A		4560 +grus			MACH_GRUS		GRUS			4561 +apollo3			MACH_APOLLO3		APOLLO3			4562 +cowon_r7		MACH_COWON_R7		COWON_R7		4563 +tonga3			MACH_TONGA3		TONGA3			4564 +p535			MACH_P535		P535			4565 +sa3874i			MACH_SA3874I		SA3874I			4566 +mx6_navico_com		MACH_MX6_NAVICO_COM	MX6_NAVICO_COM		4567 +proxmobil2		MACH_PROXMOBIL2		PROXMOBIL2		4568 +ubinux1			MACH_UBINUX1		UBINUX1			4569 +istos			MACH_ISTOS		ISTOS			4570 +benvolio4		MACH_BENVOLIO4		BENVOLIO4		4571 +eco5_bx2		MACH_ECO5_BX2		ECO5_BX2		4572 +eukrea_cpuimx28sd	MACH_EUKREA_CPUIMX28SD	EUKREA_CPUIMX28SD	4573 +domotab			MACH_DOMOTAB		DOMOTAB			4574 +pfla03			MACH_PFLA03		PFLA03			4575  |