diff options
496 files changed, 4714 insertions, 4087 deletions
diff --git a/Documentation/devicetree/bindings/arm/arm-boards b/Documentation/devicetree/bindings/arm/arm-boards index fc81a7d6b0f..db5858e32d3 100644 --- a/Documentation/devicetree/bindings/arm/arm-boards +++ b/Documentation/devicetree/bindings/arm/arm-boards @@ -9,6 +9,10 @@ Required properties (in root node):  FPGA type interrupt controllers, see the versatile-fpga-irq binding doc. +In the root node the Integrator/CP must have a /cpcon node pointing +to the CP control registers, and the Integrator/AP must have a +/syscon node pointing to the Integrator/AP system controller. +  ARM Versatile Application and Platform Baseboards  ------------------------------------------------- diff --git a/Documentation/devicetree/bindings/arm/omap/counter.txt b/Documentation/devicetree/bindings/arm/omap/counter.txt new file mode 100644 index 00000000000..5bd8aa09131 --- /dev/null +++ b/Documentation/devicetree/bindings/arm/omap/counter.txt @@ -0,0 +1,15 @@ +OMAP Counter-32K bindings + +Required properties: +- compatible:	Must be "ti,omap-counter32k" for OMAP controllers +- reg:		Contains timer register address range (base address and length) +- ti,hwmods:	Name of the hwmod associated to the counter, which is typically +		"counter_32k" + +Example: + +counter32k: counter@4a304000 { +	compatible = "ti,omap-counter32k"; +	reg = <0x4a304000 0x20>; +	ti,hwmods = "counter_32k"; +}; diff --git a/Documentation/devicetree/bindings/arm/omap/timer.txt b/Documentation/devicetree/bindings/arm/omap/timer.txt new file mode 100644 index 00000000000..8732d4d41f8 --- /dev/null +++ b/Documentation/devicetree/bindings/arm/omap/timer.txt @@ -0,0 +1,31 @@ +OMAP Timer bindings + +Required properties: +- compatible:		Must be "ti,omap2-timer" for OMAP2+ controllers. +- reg:			Contains timer register address range (base address and +			length). +- interrupts: 		Contains the interrupt information for the timer. The +			format is being dependent on which interrupt controller +			the OMAP device uses. +- ti,hwmods:		Name of the hwmod associated to the timer, "timer<X>", +			where <X> is the instance number of the timer from the +			HW spec. + +Optional properties: +- ti,timer-alwon:	Indicates the timer is in an alway-on power domain. +- ti,timer-dsp:		Indicates the timer can interrupt the on-chip DSP in +			addition to the ARM CPU. +- ti,timer-pwm: 	Indicates the timer can generate a PWM output. +- ti,timer-secure: 	Indicates the timer is reserved on a secure OMAP device +			and therefore cannot be used by the kernel. + +Example: + +timer12: timer@48304000 { +	compatible = "ti,omap2-timer"; +	reg = <0x48304000 0x400>; +	interrupts = <95>; +	ti,hwmods = "timer12" +	ti,timer-alwon; +	ti,timer-secure; +}; diff --git a/Documentation/devicetree/bindings/bus/omap-ocp2scp.txt b/Documentation/devicetree/bindings/bus/omap-ocp2scp.txt index d2fe064a828..63dd8051521 100644 --- a/Documentation/devicetree/bindings/bus/omap-ocp2scp.txt +++ b/Documentation/devicetree/bindings/bus/omap-ocp2scp.txt @@ -2,9 +2,27 @@  properties:  - compatible : Should be "ti,omap-ocp2scp" +- reg : Address and length of the register set for the device  - #address-cells, #size-cells : Must be present if the device has sub-nodes  - ranges : the child address space are mapped 1:1 onto the parent address space  - ti,hwmods : must be "ocp2scp_usb_phy"  Sub-nodes:  All the devices connected to ocp2scp are described using sub-node to ocp2scp + +ocp2scp@4a0ad000 { +	compatible = "ti,omap-ocp2scp"; +	reg = <0x4a0ad000 0x1f>; +	#address-cells = <1>; +	#size-cells = <1>; +	ranges; +	ti,hwmods = "ocp2scp_usb_phy"; + +	subnode1 { +	... +	}; + +	subnode2 { +	... +	}; +}; diff --git a/Documentation/devicetree/bindings/i2c/i2c-imx.txt b/Documentation/devicetree/bindings/i2c/i2c-imx.txt index f3cf43b66f7..3614242e773 100644 --- a/Documentation/devicetree/bindings/i2c/i2c-imx.txt +++ b/Documentation/devicetree/bindings/i2c/i2c-imx.txt @@ -12,13 +12,13 @@ Optional properties:  Examples:  i2c@83fc4000 { /* I2C2 on i.MX51 */ -	compatible = "fsl,imx51-i2c", "fsl,imx1-i2c"; +	compatible = "fsl,imx51-i2c", "fsl,imx21-i2c";  	reg = <0x83fc4000 0x4000>;  	interrupts = <63>;  };  i2c@70038000 { /* HS-I2C on i.MX51 */ -	compatible = "fsl,imx51-i2c", "fsl,imx1-i2c"; +	compatible = "fsl,imx51-i2c", "fsl,imx21-i2c";  	reg = <0x70038000 0x4000>;  	interrupts = <64>;  	clock-frequency = <400000>; diff --git a/Documentation/devicetree/bindings/i2c/trivial-devices.txt b/Documentation/devicetree/bindings/i2c/trivial-devices.txt index 2f5322b119e..446859fcdca 100644 --- a/Documentation/devicetree/bindings/i2c/trivial-devices.txt +++ b/Documentation/devicetree/bindings/i2c/trivial-devices.txt @@ -55,5 +55,7 @@ st-micro,24c256		i2c serial eeprom  (24cxx)  stm,m41t00		Serial Access TIMEKEEPER  stm,m41t62		Serial real-time clock (RTC) with alarm  stm,m41t80		M41T80 - SERIAL ACCESS RTC WITH ALARMS +taos,tsl2550		Ambient Light Sensor with SMBUS/Two Wire Serial Interface  ti,tsc2003		I2C Touch-Screen Controller  ti,tmp102		Low Power Digital Temperature Sensor with SMBUS/Two Wire Serial Interface +ti,tmp275		Digital Temperature Sensor diff --git a/Documentation/devicetree/bindings/usb/am33xx-usb.txt b/Documentation/devicetree/bindings/usb/am33xx-usb.txt index a92250512a4..ea840f7f925 100644 --- a/Documentation/devicetree/bindings/usb/am33xx-usb.txt +++ b/Documentation/devicetree/bindings/usb/am33xx-usb.txt @@ -1,5 +1,7 @@  AM33XX MUSB GLUE   - compatible : Should be "ti,musb-am33xx" + - reg : offset and length of register sets, first usbss, then for musb instances + - interrupts : usbss, musb instance interrupts in order   - ti,hwmods : must be "usb_otg_hs"   - multipoint : Should be "1" indicating the musb controller supports     multipoint. This is a MUSB configuration-specific setting. @@ -12,3 +14,22 @@ AM33XX MUSB GLUE     represents PERIPHERAL.   - power : Should be "250". This signifies the controller can supply upto     500mA when operating in host mode. + +Example: + +usb@47400000  { +	compatible = "ti,musb-am33xx"; +	reg = <0x47400000 0x1000	/* usbss */ +	       0x47401000 0x800		/* musb instance 0 */ +	       0x47401800 0x800>;	/* musb instance 1 */ +	interrupts = <17		/* usbss */ +		      18		/* musb instance 0 */ +		      19>;		/* musb instance 1 */ +	multipoint = <1>; +	num-eps = <16>; +	ram-bits = <12>; +	port0-mode = <3>; +	port1-mode = <3>; +	power = <250>; +	ti,hwmods = "usb_otg_hs"; +}; diff --git a/MAINTAINERS b/MAINTAINERS index 8959cec4436..e624aa2fc3d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -797,7 +797,6 @@ L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)  S:	Maintained  T:	git git://git.pengutronix.de/git/imx/linux-2.6.git  F:	arch/arm/mach-imx/ -F:	arch/arm/plat-mxc/  F:	arch/arm/configs/imx*_defconfig  ARM/FREESCALE IMX6 diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index f24e0763077..03e0460d506 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -438,19 +438,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_MXC -	bool "Freescale MXC/iMX-based" -	select ARCH_REQUIRE_GPIOLIB -	select CLKDEV_LOOKUP -	select CLKSRC_MMIO -	select GENERIC_CLOCKEVENTS -	select GENERIC_IRQ_CHIP -	select MULTI_IRQ_HANDLER -	select SPARSE_IRQ -	select USE_OF -	help -	  Support for Freescale MXC/iMX-based family of processors -  config ARCH_MXS  	bool "Freescale MXS-based"  	select ARCH_REQUIRE_GPIOLIB @@ -966,7 +953,6 @@ config ARCH_ZYNQ  	bool "Xilinx Zynq ARM Cortex A9 Platform"  	select ARM_AMBA  	select ARM_GIC -	select CLKDEV_LOOKUP  	select CPU_V7  	select GENERIC_CLOCKEVENTS  	select ICST @@ -1065,7 +1051,7 @@ source "arch/arm/mach-msm/Kconfig"  source "arch/arm/mach-mv78xx0/Kconfig" -source "arch/arm/plat-mxc/Kconfig" +source "arch/arm/mach-imx/Kconfig"  source "arch/arm/mach-mxs/Kconfig" @@ -1175,7 +1161,7 @@ config ARM_NR_BANKS  config IWMMXT  	bool "Enable iWMMXt support"  	depends on CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_PJ4 -	default y if PXA27x || PXA3xx || PXA95x || ARCH_MMP +	default y if PXA27x || PXA3xx || ARCH_MMP  	help  	  Enable support for iWMMXt context switching at run time if  	  running on a CPU that supports it. diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index b0f3857b3a4..5566520686a 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug @@ -412,6 +412,14 @@ endchoice  config DEBUG_LL_INCLUDE  	string  	default "debug/icedcc.S" if DEBUG_ICEDCC +	default "debug/imx.S" if DEBUG_IMX1_UART || \ +				 DEBUG_IMX25_UART || \ +				 DEBUG_IMX21_IMX27_UART || \ +				 DEBUG_IMX31_IMX35_UART || \ +				 DEBUG_IMX51_UART || \ +				 DEBUG_IMX50_IMX53_UART ||\ +				 DEBUG_IMX6Q_UART2 || \ +				 DEBUG_IMX6Q_UART4  	default "debug/highbank.S" if DEBUG_HIGHBANK_UART  	default "debug/mvebu.S" if DEBUG_MVEBU_UART  	default "debug/picoxcell.S" if DEBUG_PICOXCELL_UART diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 45096a1ee0a..20d295aca51 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -197,10 +197,8 @@ machine-$(CONFIG_ARCH_ZYNQ)		+= zynq  # Platform directory name.  This list is sorted alphanumerically  # by CONFIG_* macro name. -plat-$(CONFIG_ARCH_MXC)		+= mxc  plat-$(CONFIG_ARCH_OMAP)	+= omap  plat-$(CONFIG_ARCH_S3C64XX)	+= samsung -plat-$(CONFIG_ARCH_ZYNQ)	+= versatile  plat-$(CONFIG_PLAT_IOP)		+= iop  plat-$(CONFIG_PLAT_NOMADIK)	+= nomadik  plat-$(CONFIG_PLAT_ORION)	+= orion diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile index a517153a13e..537208f22e5 100644 --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile @@ -54,10 +54,6 @@ ifeq ($(CONFIG_ARCH_SA1100),y)  OBJS		+= head-sa1100.o  endif -ifeq ($(CONFIG_ARCH_VT8500),y) -OBJS		+= head-vt8500.o -endif -  ifeq ($(CONFIG_CPU_XSCALE),y)  OBJS		+= head-xscale.o  endif diff --git a/arch/arm/boot/compressed/head-vt8500.S b/arch/arm/boot/compressed/head-vt8500.S deleted file mode 100644 index 1dc1e21a3be..00000000000 --- a/arch/arm/boot/compressed/head-vt8500.S +++ /dev/null @@ -1,46 +0,0 @@ -/* - * linux/arch/arm/boot/compressed/head-vt8500.S - * - * Copyright (C) 2010 Alexey Charkov <alchark@gmail.com> - * - * VIA VT8500 specific tweaks. This is merged into head.S by the linker. - * - */ - -#include <linux/linkage.h> -#include <asm/mach-types.h> - -		.section        ".start", "ax" - -__VT8500_start: -	@ Compare the SCC ID register against a list of known values -	ldr	r1, .SCCID -	ldr	r3, [r1] - -	@ VT8500 override -	ldr	r4, .VT8500SCC -	cmp	r3, r4 -	ldreq	r7, .ID_BV07 -	beq	.Lendvt8500 - -	@ WM8505 override -	ldr	r4, .WM8505SCC -	cmp	r3, r4 -	ldreq	r7, .ID_8505 -	beq	.Lendvt8500 - -	@ Otherwise, leave the bootloader's machine id untouched - -.SCCID: -	.word	0xd8120000 -.VT8500SCC: -	.word	0x34000102 -.WM8505SCC: -	.word	0x34260103 - -.ID_BV07: -	.word	MACH_TYPE_BV07 -.ID_8505: -	.word	MACH_TYPE_WM8505_7IN_NETBOOK - -.Lendvt8500: diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 26249375223..5e98094a3e1 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -79,15 +79,17 @@ dtb-$(CONFIG_ARCH_MXS) += imx23-evk.dtb \  	imx28-m28evk.dtb \  	imx28-tx28.dtb  dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \ +	omap3-beagle.dtb \  	omap3-beagle-xm.dtb \  	omap3-evm.dtb \  	omap3-tobi.dtb \  	omap4-panda.dtb \ -	omap4-pandaES.dtb \ -	omap4-var_som.dtb \ +	omap4-panda-es.dtb \ +	omap4-var-som.dtb \  	omap4-sdp.dtb \  	omap5-evm.dtb \  	am335x-evm.dtb \ +	am335x-evmsk.dtb \  	am335x-bone.dtb  dtb-$(CONFIG_ARCH_PRIMA2) += prima2-evb.dtb  dtb-$(CONFIG_ARCH_U8500) += snowball.dtb diff --git a/arch/arm/boot/dts/am335x-bone.dts b/arch/arm/boot/dts/am335x-bone.dts index c634f87e230..2c338889df1 100644 --- a/arch/arm/boot/dts/am335x-bone.dts +++ b/arch/arm/boot/dts/am335x-bone.dts @@ -13,11 +13,31 @@  	model = "TI AM335x BeagleBone";  	compatible = "ti,am335x-bone", "ti,am33xx"; +	cpus { +		cpu@0 { +			cpu0-supply = <&dcdc2_reg>; +		}; +	}; +  	memory {  		device_type = "memory";  		reg = <0x80000000 0x10000000>; /* 256 MB */  	}; +	am33xx_pinmux: pinmux@44e10800 { +		pinctrl-names = "default"; +		pinctrl-0 = <&user_leds_s0>; + +		user_leds_s0: user_leds_s0 { +			pinctrl-single,pins = < +				0x54 0x7	/* gpmc_a5.gpio1_21, OUTPUT | MODE7 */ +				0x58 0x17	/* gpmc_a6.gpio1_22, OUTPUT_PULLUP | MODE7 */ +				0x5c 0x7	/* gpmc_a7.gpio1_23, OUTPUT | MODE7 */ +				0x60 0x17	/* gpmc_a8.gpio1_24, OUTPUT_PULLUP | MODE7 */ +			>; +		}; +	}; +  	ocp {  		uart1: serial@44e09000 {  			status = "okay"; @@ -33,6 +53,36 @@  		};  	}; + +	leds { +		compatible = "gpio-leds"; + +		led@2 { +			label = "beaglebone:green:heartbeat"; +			gpios = <&gpio2 21 0>; +			linux,default-trigger = "heartbeat"; +			default-state = "off"; +		}; + +		led@3 { +			label = "beaglebone:green:mmc0"; +			gpios = <&gpio2 22 0>; +			linux,default-trigger = "mmc0"; +			default-state = "off"; +		}; + +		led@4 { +			label = "beaglebone:green:usr2"; +			gpios = <&gpio2 23 0>; +			default-state = "off"; +		}; + +		led@5 { +			label = "beaglebone:green:usr3"; +			gpios = <&gpio2 24 0>; +			default-state = "off"; +		}; +	};  };  /include/ "tps65217.dtsi" diff --git a/arch/arm/boot/dts/am335x-evm.dts b/arch/arm/boot/dts/am335x-evm.dts index 185d6325a45..9f65f17ebdf 100644 --- a/arch/arm/boot/dts/am335x-evm.dts +++ b/arch/arm/boot/dts/am335x-evm.dts @@ -13,11 +13,39 @@  	model = "TI AM335x EVM";  	compatible = "ti,am335x-evm", "ti,am33xx"; +	cpus { +		cpu@0 { +			cpu0-supply = <&vdd1_reg>; +		}; +	}; +  	memory {  		device_type = "memory";  		reg = <0x80000000 0x10000000>; /* 256 MB */  	}; +	am33xx_pinmux: pinmux@44e10800 { +		pinctrl-names = "default"; +		pinctrl-0 = <&matrix_keypad_s0 &volume_keys_s0>; + +		matrix_keypad_s0: matrix_keypad_s0 { +			pinctrl-single,pins = < +				0x54 0x7	/* gpmc_a5.gpio1_21, OUTPUT | MODE7 */ +				0x58 0x7	/* gpmc_a6.gpio1_22, OUTPUT | MODE7 */ +				0x64 0x27	/* gpmc_a9.gpio1_25, INPUT | MODE7 */ +				0x68 0x27	/* gpmc_a10.gpio1_26, INPUT | MODE7 */ +				0x6c 0x27	/* gpmc_a11.gpio1_27, INPUT | MODE7 */ +			>; +		}; + +		volume_keys_s0: volume_keys_s0 { +			pinctrl-single,pins = < +				0x150 0x27	/* spi0_sclk.gpio0_2, INPUT | MODE7 */ +				0x154 0x27	/* spi0_d0.gpio0_3, INPUT | MODE7 */ +			>; +		}; +	}; +  	ocp {  		uart1: serial@44e09000 {  			status = "okay"; @@ -31,6 +59,49 @@  				reg = <0x2d>;  			};  		}; + +		i2c2: i2c@4802a000 { +			status = "okay"; +			clock-frequency = <100000>; + +			lis331dlh: lis331dlh@18 { +				compatible = "st,lis331dlh", "st,lis3lv02d"; +				reg = <0x18>; +				Vdd-supply = <&lis3_reg>; +				Vdd_IO-supply = <&lis3_reg>; + +				st,click-single-x; +				st,click-single-y; +				st,click-single-z; +				st,click-thresh-x = <10>; +				st,click-thresh-y = <10>; +				st,click-thresh-z = <10>; +				st,irq1-click; +				st,irq2-click; +				st,wakeup-x-lo; +				st,wakeup-x-hi; +				st,wakeup-y-lo; +				st,wakeup-y-hi; +				st,wakeup-z-lo; +				st,wakeup-z-hi; +				st,min-limit-x = <120>; +				st,min-limit-y = <120>; +				st,min-limit-z = <140>; +				st,max-limit-x = <550>; +				st,max-limit-y = <550>; +				st,max-limit-z = <750>; +			}; + +			tsl2550: tsl2550@39 { +				compatible = "taos,tsl2550"; +				reg = <0x39>; +			}; + +			tmp275: tmp275@48 { +				compatible = "ti,tmp275"; +				reg = <0x48>; +			}; +		};  	};  	vbat: fixedregulator@0 { @@ -40,6 +111,53 @@  		regulator-max-microvolt = <5000000>;  		regulator-boot-on;  	}; + +	lis3_reg: fixedregulator@1 { +		compatible = "regulator-fixed"; +		regulator-name = "lis3_reg"; +		regulator-boot-on; +	}; + +	matrix_keypad: matrix_keypad@0 { +		compatible = "gpio-matrix-keypad"; +		debounce-delay-ms = <5>; +		col-scan-delay-us = <2>; + +		row-gpios = <&gpio2 25 0	/* Bank1, pin25 */ +			     &gpio2 26 0	/* Bank1, pin26 */ +			     &gpio2 27 0>;	/* Bank1, pin27 */ + +		col-gpios = <&gpio2 21 0	/* Bank1, pin21 */ +			     &gpio2 22 0>;	/* Bank1, pin22 */ + +		linux,keymap = <0x0000008b	/* MENU */ +				0x0100009e	/* BACK */ +				0x02000069	/* LEFT */ +				0x0001006a	/* RIGHT */ +				0x0101001c	/* ENTER */ +				0x0201006c>;	/* DOWN */ +	}; + +	gpio_keys: volume_keys@0 { +		compatible = "gpio-keys"; +		#address-cells = <1>; +		#size-cells = <0>; +		autorepeat; + +		switch@9 { +			label = "volume-up"; +			linux,code = <115>; +			gpios = <&gpio1 2 1>; +			gpio-key,wakeup; +		}; + +		switch@10 { +			label = "volume-down"; +			linux,code = <114>; +			gpios = <&gpio1 3 1>; +			gpio-key,wakeup; +		}; +	};  };  /include/ "tps65910.dtsi" diff --git a/arch/arm/boot/dts/am335x-evmsk.dts b/arch/arm/boot/dts/am335x-evmsk.dts new file mode 100644 index 00000000000..f5a6162a4ff --- /dev/null +++ b/arch/arm/boot/dts/am335x-evmsk.dts @@ -0,0 +1,250 @@ +/* + * Copyright (C) 2012 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. + */ + +/* + * AM335x Starter Kit + * http://www.ti.com/tool/tmdssk3358 + */ + +/dts-v1/; + +/include/ "am33xx.dtsi" + +/ { +	model = "TI AM335x EVM-SK"; +	compatible = "ti,am335x-evmsk", "ti,am33xx"; + +	cpus { +		cpu@0 { +			cpu0-supply = <&vdd1_reg>; +		}; +	}; + +	memory { +		device_type = "memory"; +		reg = <0x80000000 0x10000000>; /* 256 MB */ +	}; + +	am33xx_pinmux: pinmux@44e10800 { +		pinctrl-names = "default"; +		pinctrl-0 = <&user_leds_s0 &gpio_keys_s0>; + +		user_leds_s0: user_leds_s0 { +			pinctrl-single,pins = < +				0x10 0x7	/* gpmc_ad4.gpio1_4, OUTPUT | MODE7 */ +				0x14 0x7	/* gpmc_ad5.gpio1_5, OUTPUT | MODE7 */ +				0x18 0x7	/* gpmc_ad6.gpio1_6, OUTPUT | MODE7 */ +				0x1c 0x7	/* gpmc_ad7.gpio1_7, OUTPUT | MODE7 */ +			>; +		}; + +		gpio_keys_s0: gpio_keys_s0 { +			pinctrl-single,pins = < +				0x94 0x27	/* gpmc_oen_ren.gpio2_3, INPUT | MODE7 */ +				0x90 0x27	/* gpmc_advn_ale.gpio2_2, INPUT | MODE7 */ +				0x70 0x27	/* gpmc_wait0.gpio0_30, INPUT | MODE7 */ +				0x9c 0x27	/* gpmc_ben0_cle.gpio2_5, INPUT | MODE7 */ +			>; +		}; +	}; + +	ocp { +		uart1: serial@44e09000 { +			status = "okay"; +		}; + +		i2c1: i2c@44e0b000 { +			status = "okay"; +			clock-frequency = <400000>; + +			tps: tps@2d { +				reg = <0x2d>; +			}; + +			lis331dlh: lis331dlh@18 { +				compatible = "st,lis331dlh", "st,lis3lv02d"; +				reg = <0x18>; +				Vdd-supply = <&lis3_reg>; +				Vdd_IO-supply = <&lis3_reg>; + +				st,click-single-x; +				st,click-single-y; +				st,click-single-z; +				st,click-thresh-x = <10>; +				st,click-thresh-y = <10>; +				st,click-thresh-z = <10>; +				st,irq1-click; +				st,irq2-click; +				st,wakeup-x-lo; +				st,wakeup-x-hi; +				st,wakeup-y-lo; +				st,wakeup-y-hi; +				st,wakeup-z-lo; +				st,wakeup-z-hi; +				st,min-limit-x = <120>; +				st,min-limit-y = <120>; +				st,min-limit-z = <140>; +				st,max-limit-x = <550>; +				st,max-limit-y = <550>; +				st,max-limit-z = <750>; +			}; +		}; +	}; + +	vbat: fixedregulator@0 { +		compatible = "regulator-fixed"; +		regulator-name = "vbat"; +		regulator-min-microvolt = <5000000>; +		regulator-max-microvolt = <5000000>; +		regulator-boot-on; +	}; + +	lis3_reg: fixedregulator@1 { +		compatible = "regulator-fixed"; +		regulator-name = "lis3_reg"; +		regulator-boot-on; +	}; + +	leds { +		compatible = "gpio-leds"; + +		led@1 { +			label = "evmsk:green:usr0"; +			gpios = <&gpio2 4 0>; +			default-state = "off"; +		}; + +		led@2 { +			label = "evmsk:green:usr1"; +			gpios = <&gpio2 5 0>; +			default-state = "off"; +		}; + +		led@3 { +			label = "evmsk:green:mmc0"; +			gpios = <&gpio2 6 0>; +			linux,default-trigger = "mmc0"; +			default-state = "off"; +		}; + +		led@4 { +			label = "evmsk:green:heartbeat"; +			gpios = <&gpio2 7 0>; +			linux,default-trigger = "heartbeat"; +			default-state = "off"; +		}; +	}; + +	gpio_buttons: gpio_buttons@0 { +		compatible = "gpio-keys"; +		#address-cells = <1>; +		#size-cells = <0>; + +		switch@1 { +			label = "button0"; +			linux,code = <0x100>; +			gpios = <&gpio3 3 0>; +		}; + +		switch@2 { +			label = "button1"; +			linux,code = <0x101>; +			gpios = <&gpio3 2 0>; +		}; + +		switch@3 { +			label = "button2"; +			linux,code = <0x102>; +			gpios = <&gpio1 30 0>; +			gpio-key,wakeup; +		}; + +		switch@4 { +			label = "button3"; +			linux,code = <0x103>; +			gpios = <&gpio3 5 0>; +		}; +	}; +}; + +/include/ "tps65910.dtsi" + +&tps { +	vcc1-supply = <&vbat>; +	vcc2-supply = <&vbat>; +	vcc3-supply = <&vbat>; +	vcc4-supply = <&vbat>; +	vcc5-supply = <&vbat>; +	vcc6-supply = <&vbat>; +	vcc7-supply = <&vbat>; +	vccio-supply = <&vbat>; + +	regulators { +		vrtc_reg: regulator@0 { +			regulator-always-on; +		}; + +		vio_reg: regulator@1 { +			regulator-always-on; +		}; + +		vdd1_reg: regulator@2 { +			/* VDD_MPU voltage limits 0.95V - 1.26V with +/-4% tolerance */ +			regulator-name = "vdd_mpu"; +			regulator-min-microvolt = <912500>; +			regulator-max-microvolt = <1312500>; +			regulator-boot-on; +			regulator-always-on; +		}; + +		vdd2_reg: regulator@3 { +			/* VDD_CORE voltage limits 0.95V - 1.1V with +/-4% tolerance */ +			regulator-name = "vdd_core"; +			regulator-min-microvolt = <912500>; +			regulator-max-microvolt = <1150000>; +			regulator-boot-on; +			regulator-always-on; +		}; + +		vdd3_reg: regulator@4 { +			regulator-always-on; +		}; + +		vdig1_reg: regulator@5 { +			regulator-always-on; +		}; + +		vdig2_reg: regulator@6 { +			regulator-always-on; +		}; + +		vpll_reg: regulator@7 { +			regulator-always-on; +		}; + +		vdac_reg: regulator@8 { +			regulator-always-on; +		}; + +		vaux1_reg: regulator@9 { +			regulator-always-on; +		}; + +		vaux2_reg: regulator@10 { +			regulator-always-on; +		}; + +		vaux33_reg: regulator@11 { +			regulator-always-on; +		}; + +		vmmc_reg: regulator@12 { +			regulator-always-on; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi index bb31bff0199..20a3f29a6bf 100644 --- a/arch/arm/boot/dts/am33xx.dtsi +++ b/arch/arm/boot/dts/am33xx.dtsi @@ -12,6 +12,7 @@  / {  	compatible = "ti,am33xx"; +	interrupt-parent = <&intc>;  	aliases {  		serial0 = &uart1; @@ -25,6 +26,21 @@  	cpus {  		cpu@0 {  			compatible = "arm,cortex-a8"; + +			/* +			 * To consider voltage drop between PMIC and SoC, +			 * tolerance value is reduced to 2% from 4% and +			 * voltage value is increased as a precaution. +			 */ +			operating-points = < +				/* kHz    uV */ +				720000  1285000 +				600000  1225000 +				500000  1125000 +				275000  1125000 +			>; +			voltage-tolerance = <2>; /* 2 percentage */ +			clock-latency = <300000>; /* From omap-cpufreq driver */  		};  	}; @@ -40,6 +56,15 @@  		};  	}; +	am33xx_pinmux: pinmux@44e10800 { +		compatible = "pinctrl-single"; +		reg = <0x44e10800 0x0238>; +		#address-cells = <1>; +		#size-cells = <0>; +		pinctrl-single,register-width = <32>; +		pinctrl-single,function-mask = <0x7f>; +	}; +  	/*  	 * XXX: Use a flat representation of the AM33XX interconnect.  	 * The real AM33XX interconnect network is quite complex.Since @@ -70,7 +95,6 @@  			interrupt-controller;  			#interrupt-cells = <1>;  			reg = <0x44e07000 0x1000>; -			interrupt-parent = <&intc>;  			interrupts = <96>;  		}; @@ -82,7 +106,6 @@  			interrupt-controller;  			#interrupt-cells = <1>;  			reg = <0x4804c000 0x1000>; -			interrupt-parent = <&intc>;  			interrupts = <98>;  		}; @@ -94,7 +117,6 @@  			interrupt-controller;  			#interrupt-cells = <1>;  			reg = <0x481ac000 0x1000>; -			interrupt-parent = <&intc>;  			interrupts = <32>;  		}; @@ -106,7 +128,6 @@  			interrupt-controller;  			#interrupt-cells = <1>;  			reg = <0x481ae000 0x1000>; -			interrupt-parent = <&intc>;  			interrupts = <62>;  		}; @@ -115,7 +136,6 @@  			ti,hwmods = "uart1";  			clock-frequency = <48000000>;  			reg = <0x44e09000 0x2000>; -			interrupt-parent = <&intc>;  			interrupts = <72>;  			status = "disabled";  		}; @@ -125,7 +145,6 @@  			ti,hwmods = "uart2";  			clock-frequency = <48000000>;  			reg = <0x48022000 0x2000>; -			interrupt-parent = <&intc>;  			interrupts = <73>;  			status = "disabled";  		}; @@ -135,7 +154,6 @@  			ti,hwmods = "uart3";  			clock-frequency = <48000000>;  			reg = <0x48024000 0x2000>; -			interrupt-parent = <&intc>;  			interrupts = <74>;  			status = "disabled";  		}; @@ -145,7 +163,6 @@  			ti,hwmods = "uart4";  			clock-frequency = <48000000>;  			reg = <0x481a6000 0x2000>; -			interrupt-parent = <&intc>;  			interrupts = <44>;  			status = "disabled";  		}; @@ -155,7 +172,6 @@  			ti,hwmods = "uart5";  			clock-frequency = <48000000>;  			reg = <0x481a8000 0x2000>; -			interrupt-parent = <&intc>;  			interrupts = <45>;  			status = "disabled";  		}; @@ -165,7 +181,6 @@  			ti,hwmods = "uart6";  			clock-frequency = <48000000>;  			reg = <0x481aa000 0x2000>; -			interrupt-parent = <&intc>;  			interrupts = <46>;  			status = "disabled";  		}; @@ -176,7 +191,6 @@  			#size-cells = <0>;  			ti,hwmods = "i2c1";  			reg = <0x44e0b000 0x1000>; -			interrupt-parent = <&intc>;  			interrupts = <70>;  			status = "disabled";  		}; @@ -187,7 +201,6 @@  			#size-cells = <0>;  			ti,hwmods = "i2c2";  			reg = <0x4802a000 0x1000>; -			interrupt-parent = <&intc>;  			interrupts = <71>;  			status = "disabled";  		}; @@ -198,7 +211,6 @@  			#size-cells = <0>;  			ti,hwmods = "i2c3";  			reg = <0x4819c000 0x1000>; -			interrupt-parent = <&intc>;  			interrupts = <30>;  			status = "disabled";  		}; @@ -207,8 +219,124 @@  			compatible = "ti,omap3-wdt";  			ti,hwmods = "wd_timer2";  			reg = <0x44e35000 0x1000>; -			interrupt-parent = <&intc>;  			interrupts = <91>;  		}; + +		dcan0: d_can@481cc000 { +			compatible = "bosch,d_can"; +			ti,hwmods = "d_can0"; +			reg = <0x481cc000 0x2000>; +			interrupts = <52>; +			status = "disabled"; +		}; + +		dcan1: d_can@481d0000 { +			compatible = "bosch,d_can"; +			ti,hwmods = "d_can1"; +			reg = <0x481d0000 0x2000>; +			interrupts = <55>; +			status = "disabled"; +		}; + +		timer1: timer@44e31000 { +			compatible = "ti,omap2-timer"; +			reg = <0x44e31000 0x400>; +			interrupts = <67>; +			ti,hwmods = "timer1"; +			ti,timer-alwon; +		}; + +		timer2: timer@48040000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48040000 0x400>; +			interrupts = <68>; +			ti,hwmods = "timer2"; +		}; + +		timer3: timer@48042000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48042000 0x400>; +			interrupts = <69>; +			ti,hwmods = "timer3"; +		}; + +		timer4: timer@48044000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48044000 0x400>; +			interrupts = <92>; +			ti,hwmods = "timer4"; +			ti,timer-pwm; +		}; + +		timer5: timer@48046000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48046000 0x400>; +			interrupts = <93>; +			ti,hwmods = "timer5"; +			ti,timer-pwm; +		}; + +		timer6: timer@48048000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48048000 0x400>; +			interrupts = <94>; +			ti,hwmods = "timer6"; +			ti,timer-pwm; +		}; + +		timer7: timer@4804a000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4804a000 0x400>; +			interrupts = <95>; +			ti,hwmods = "timer7"; +			ti,timer-pwm; +		}; + +		rtc@44e3e000 { +			compatible = "ti,da830-rtc"; +			reg = <0x44e3e000 0x1000>; +			interrupts = <75 +				      76>; +			ti,hwmods = "rtc"; +		}; + +		spi0: spi@48030000 { +			compatible = "ti,omap4-mcspi"; +			#address-cells = <1>; +			#size-cells = <0>; +			reg = <0x48030000 0x400>; +			interrupt = <65>; +			ti,spi-num-cs = <2>; +			ti,hwmods = "spi0"; +			status = "disabled"; +		}; + +		spi1: spi@481a0000 { +			compatible = "ti,omap4-mcspi"; +			#address-cells = <1>; +			#size-cells = <0>; +			reg = <0x481a0000 0x400>; +			interrupt = <125>; +			ti,spi-num-cs = <2>; +			ti,hwmods = "spi1"; +			status = "disabled"; +		}; + +		usb@47400000 { +			compatible = "ti,musb-am33xx"; +			reg = <0x47400000 0x1000	/* usbss */ +			       0x47401000 0x800		/* musb instance 0 */ +			       0x47401800 0x800>;	/* musb instance 1 */ +			interrupts = <17		/* usbss */ +				      18		/* musb instance 0 */ +				      19>;		/* musb instance 1 */ +			multipoint = <1>; +			num-eps = <16>; +			ram-bits = <12>; +			port0-mode = <3>; +			port1-mode = <3>; +			power = <250>; +			ti,hwmods = "usb_otg_hs"; +		};  	};  }; diff --git a/arch/arm/boot/dts/imx27.dtsi b/arch/arm/boot/dts/imx27.dtsi index 3e54f149884..67d672792b0 100644 --- a/arch/arm/boot/dts/imx27.dtsi +++ b/arch/arm/boot/dts/imx27.dtsi @@ -113,7 +113,7 @@  			i2c1: i2c@10012000 {  				#address-cells = <1>;  				#size-cells = <0>; -				compatible = "fsl,imx27-i2c", "fsl,imx1-i2c"; +				compatible = "fsl,imx27-i2c", "fsl,imx21-i2c";  				reg = <0x10012000 0x1000>;  				interrupts = <12>;  				status = "disabled"; @@ -205,7 +205,7 @@  			i2c2: i2c@1001d000 {  				#address-cells = <1>;  				#size-cells = <0>; -				compatible = "fsl,imx27-i2c", "fsl,imx1-i2c"; +				compatible = "fsl,imx27-i2c", "fsl,imx21-i2c";  				reg = <0x1001d000 0x1000>;  				interrupts = <1>;  				status = "disabled"; diff --git a/arch/arm/boot/dts/imx51.dtsi b/arch/arm/boot/dts/imx51.dtsi index 75d069fcf89..54aea74769a 100644 --- a/arch/arm/boot/dts/imx51.dtsi +++ b/arch/arm/boot/dts/imx51.dtsi @@ -377,7 +377,7 @@  			i2c@83fc4000 { /* I2C2 */  				#address-cells = <1>;  				#size-cells = <0>; -				compatible = "fsl,imx51-i2c", "fsl,imx1-i2c"; +				compatible = "fsl,imx51-i2c", "fsl,imx21-i2c";  				reg = <0x83fc4000 0x4000>;  				interrupts = <63>;  				status = "disabled"; @@ -386,7 +386,7 @@  			i2c@83fc8000 { /* I2C1 */  				#address-cells = <1>;  				#size-cells = <0>; -				compatible = "fsl,imx51-i2c", "fsl,imx1-i2c"; +				compatible = "fsl,imx51-i2c", "fsl,imx21-i2c";  				reg = <0x83fc8000 0x4000>;  				interrupts = <62>;  				status = "disabled"; diff --git a/arch/arm/boot/dts/imx53.dtsi b/arch/arm/boot/dts/imx53.dtsi index 76ebb1ad267..caf09ff73f1 100644 --- a/arch/arm/boot/dts/imx53.dtsi +++ b/arch/arm/boot/dts/imx53.dtsi @@ -432,7 +432,7 @@  			i2c@53fec000 { /* I2C3 */  				#address-cells = <1>;  				#size-cells = <0>; -				compatible = "fsl,imx53-i2c", "fsl,imx1-i2c"; +				compatible = "fsl,imx53-i2c", "fsl,imx21-i2c";  				reg = <0x53fec000 0x4000>;  				interrupts = <64>;  				status = "disabled"; @@ -488,7 +488,7 @@  			i2c@63fc4000 { /* I2C2 */  				#address-cells = <1>;  				#size-cells = <0>; -				compatible = "fsl,imx53-i2c", "fsl,imx1-i2c"; +				compatible = "fsl,imx53-i2c", "fsl,imx21-i2c";  				reg = <0x63fc4000 0x4000>;  				interrupts = <63>;  				status = "disabled"; @@ -497,7 +497,7 @@  			i2c@63fc8000 { /* I2C1 */  				#address-cells = <1>;  				#size-cells = <0>; -				compatible = "fsl,imx53-i2c", "fsl,imx1-i2c"; +				compatible = "fsl,imx53-i2c", "fsl,imx21-i2c";  				reg = <0x63fc8000 0x4000>;  				interrupts = <62>;  				status = "disabled"; diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi index f3990b04fec..f604a44a5c6 100644 --- a/arch/arm/boot/dts/imx6q.dtsi +++ b/arch/arm/boot/dts/imx6q.dtsi @@ -882,7 +882,7 @@  			i2c@021a0000 { /* I2C1 */  				#address-cells = <1>;  				#size-cells = <0>; -				compatible = "fsl,imx6q-i2c", "fsl,imx1-i2c"; +				compatible = "fsl,imx6q-i2c", "fsl,imx21-i2c";  				reg = <0x021a0000 0x4000>;  				interrupts = <0 36 0x04>;  				clocks = <&clks 125>; @@ -892,7 +892,7 @@  			i2c@021a4000 { /* I2C2 */  				#address-cells = <1>;  				#size-cells = <0>; -				compatible = "fsl,imx6q-i2c", "fsl,imx1-i2c"; +				compatible = "fsl,imx6q-i2c", "fsl,imx21-i2c";  				reg = <0x021a4000 0x4000>;  				interrupts = <0 37 0x04>;  				clocks = <&clks 126>; @@ -902,7 +902,7 @@  			i2c@021a8000 { /* I2C3 */  				#address-cells = <1>;  				#size-cells = <0>; -				compatible = "fsl,imx6q-i2c", "fsl,imx1-i2c"; +				compatible = "fsl,imx6q-i2c", "fsl,imx21-i2c";  				reg = <0x021a8000 0x4000>;  				interrupts = <0 38 0x04>;  				clocks = <&clks 127>; diff --git a/arch/arm/boot/dts/integratorap.dts b/arch/arm/boot/dts/integratorap.dts index 61767757b50..c9c3fa34464 100644 --- a/arch/arm/boot/dts/integratorap.dts +++ b/arch/arm/boot/dts/integratorap.dts @@ -18,6 +18,11 @@  		bootargs = "root=/dev/ram0 console=ttyAM0,38400n8 earlyprintk";  	}; +	syscon { +		/* AP system controller registers */ +		reg = <0x11000000 0x100>; +	}; +  	timer0: timer@13000000 {  		compatible = "arm,integrator-timer";  	}; diff --git a/arch/arm/boot/dts/integratorcp.dts b/arch/arm/boot/dts/integratorcp.dts index 2dd5e4e4848..8b119399025 100644 --- a/arch/arm/boot/dts/integratorcp.dts +++ b/arch/arm/boot/dts/integratorcp.dts @@ -18,6 +18,11 @@  		bootargs = "root=/dev/ram0 console=ttyAMA0,38400n8 earlyprintk";  	}; +	cpcon { +		/* CP controller registers */ +		reg = <0xcb000000 0x100>; +	}; +  	timer0: timer@13000000 {  		compatible = "arm,sp804", "arm,primecell";  	}; diff --git a/arch/arm/boot/dts/omap2.dtsi b/arch/arm/boot/dts/omap2.dtsi index 581cb081cb0..761c4b69b25 100644 --- a/arch/arm/boot/dts/omap2.dtsi +++ b/arch/arm/boot/dts/omap2.dtsi @@ -12,6 +12,7 @@  / {  	compatible = "ti,omap2430", "ti,omap2420", "ti,omap2"; +	interrupt-parent = <&intc>;  	aliases {  		serial0 = &uart1; @@ -65,5 +66,90 @@  			ti,hwmods = "uart3";  			clock-frequency = <48000000>;  		}; + +		timer2: timer@4802a000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4802a000 0x400>; +			interrupts = <38>; +			ti,hwmods = "timer2"; +		}; + +		timer3: timer@48078000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48078000 0x400>; +			interrupts = <39>; +			ti,hwmods = "timer3"; +		}; + +		timer4: timer@4807a000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4807a000 0x400>; +			interrupts = <40>; +			ti,hwmods = "timer4"; +		}; + +		timer5: timer@4807c000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4807c000 0x400>; +			interrupts = <41>; +			ti,hwmods = "timer5"; +			ti,timer-dsp; +		}; + +		timer6: timer@4807e000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4807e000 0x400>; +			interrupts = <42>; +			ti,hwmods = "timer6"; +			ti,timer-dsp; +		}; + +		timer7: timer@48080000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48080000 0x400>; +			interrupts = <43>; +			ti,hwmods = "timer7"; +			ti,timer-dsp; +		}; + +		timer8: timer@48082000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48082000 0x400>; +			interrupts = <44>; +			ti,hwmods = "timer8"; +			ti,timer-dsp; +		}; + +		timer9: timer@48084000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48084000 0x400>; +			interrupts = <45>; +			ti,hwmods = "timer9"; +			ti,timer-pwm; +		}; + +		timer10: timer@48086000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48086000 0x400>; +			interrupts = <46>; +			ti,hwmods = "timer10"; +			ti,timer-pwm; +		}; + +		timer11: timer@48088000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48088000 0x400>; +			interrupts = <47>; +			ti,hwmods = "timer11"; +			ti,timer-pwm; +		}; + +		timer12: timer@4808a000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4808a000 0x400>; +			interrupts = <48>; +			ti,hwmods = "timer12"; +			ti,timer-pwm; +		};  	};  }; diff --git a/arch/arm/boot/dts/omap2420.dtsi b/arch/arm/boot/dts/omap2420.dtsi index bfd76b4a0dd..af656090890 100644 --- a/arch/arm/boot/dts/omap2420.dtsi +++ b/arch/arm/boot/dts/omap2420.dtsi @@ -14,6 +14,12 @@  	compatible = "ti,omap2420", "ti,omap2";  	ocp { +		counter32k: counter@48004000 { +			compatible = "ti,omap-counter32k"; +			reg = <0x48004000 0x20>; +			ti,hwmods = "counter_32k"; +		}; +  		omap2420_pmx: pinmux@48000030 {  			compatible = "ti,omap2420-padconf", "pinctrl-single";  			reg = <0x48000030 0x0113>; @@ -30,7 +36,6 @@  			interrupts = <59>, /* TX interrupt */  				     <60>; /* RX interrupt */  			interrupt-names = "tx", "rx"; -			interrupt-parent = <&intc>;  			ti,hwmods = "mcbsp1";  		}; @@ -41,8 +46,15 @@  			interrupts = <62>, /* TX interrupt */  				     <63>; /* RX interrupt */  			interrupt-names = "tx", "rx"; -			interrupt-parent = <&intc>;  			ti,hwmods = "mcbsp2";  		}; + +		timer1: timer@48028000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48028000 0x400>; +			interrupts = <37>; +			ti,hwmods = "timer1"; +			ti,timer-alwon; +		};  	};  }; diff --git a/arch/arm/boot/dts/omap2430.dtsi b/arch/arm/boot/dts/omap2430.dtsi index 4565d9750f4..c3924457c9b 100644 --- a/arch/arm/boot/dts/omap2430.dtsi +++ b/arch/arm/boot/dts/omap2430.dtsi @@ -14,6 +14,12 @@  	compatible = "ti,omap2430", "ti,omap2";  	ocp { +		counter32k: counter@49020000 { +			compatible = "ti,omap-counter32k"; +			reg = <0x49020000 0x20>; +			ti,hwmods = "counter_32k"; +		}; +  		omap2430_pmx: pinmux@49002030 {  			compatible = "ti,omap2430-padconf", "pinctrl-single";  			reg = <0x49002030 0x0154>; @@ -32,7 +38,6 @@  				     <60>, /* RX interrupt */  				     <61>; /* RX overflow interrupt */  			interrupt-names = "common", "tx", "rx", "rx_overflow"; -			interrupt-parent = <&intc>;  			ti,buffer-size = <128>;  			ti,hwmods = "mcbsp1";  		}; @@ -45,7 +50,6 @@  				     <62>, /* TX interrupt */  				     <63>; /* RX interrupt */  			interrupt-names = "common", "tx", "rx"; -			interrupt-parent = <&intc>;  			ti,buffer-size = <128>;  			ti,hwmods = "mcbsp2";  		}; @@ -58,7 +62,6 @@  				     <89>, /* TX interrupt */  				     <90>; /* RX interrupt */  			interrupt-names = "common", "tx", "rx"; -			interrupt-parent = <&intc>;  			ti,buffer-size = <128>;  			ti,hwmods = "mcbsp3";  		}; @@ -71,7 +74,6 @@  				     <54>, /* TX interrupt */  				     <55>; /* RX interrupt */  			interrupt-names = "common", "tx", "rx"; -			interrupt-parent = <&intc>;  			ti,buffer-size = <128>;  			ti,hwmods = "mcbsp4";  		}; @@ -84,9 +86,16 @@  				     <81>, /* TX interrupt */  				     <82>; /* RX interrupt */  			interrupt-names = "common", "tx", "rx"; -			interrupt-parent = <&intc>;  			ti,buffer-size = <128>;  			ti,hwmods = "mcbsp5";  		}; + +		timer1: timer@49018000 { +			compatible = "ti,omap2-timer"; +			reg = <0x49018000 0x400>; +			interrupts = <37>; +			ti,hwmods = "timer1"; +			ti,timer-alwon; +		};  	};  }; diff --git a/arch/arm/boot/dts/omap3-beagle-xm.dts b/arch/arm/boot/dts/omap3-beagle-xm.dts index c38cf76df81..3705a81c1fc 100644 --- a/arch/arm/boot/dts/omap3-beagle-xm.dts +++ b/arch/arm/boot/dts/omap3-beagle-xm.dts @@ -55,12 +55,6 @@  		interrupts = <7>; /* SYS_NIRQ cascaded to intc */  		interrupt-parent = <&intc>; -		vsim: regulator-vsim { -			compatible = "ti,twl4030-vsim"; -			regulator-min-microvolt = <1800000>; -			regulator-max-microvolt = <3000000>; -		}; -  		twl_audio: audio {  			compatible = "ti,twl4030-audio";  			codec { diff --git a/arch/arm/boot/dts/omap3-beagle.dts b/arch/arm/boot/dts/omap3-beagle.dts new file mode 100644 index 00000000000..f624dc85d44 --- /dev/null +++ b/arch/arm/boot/dts/omap3-beagle.dts @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2012 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. + */ +/dts-v1/; + +/include/ "omap3.dtsi" + +/ { +	model = "TI OMAP3 BeagleBoard"; +	compatible = "ti,omap3-beagle", "ti,omap3"; + +	memory { +		device_type = "memory"; +		reg = <0x80000000 0x10000000>; /* 256 MB */ +	}; + +	leds { +		compatible = "gpio-leds"; +		pmu_stat { +			label = "beagleboard::pmu_stat"; +			gpios = <&twl_gpio 19 0>; /* LEDB */ +		}; + +		heartbeat { +			label = "beagleboard::usr0"; +			gpios = <&gpio5 22 0>; /* 150 -> D6 LED */ +			linux,default-trigger = "heartbeat"; +		}; + +		mmc { +			label = "beagleboard::usr1"; +			gpios = <&gpio5 21 0>; /* 149 -> D7 LED */ +			linux,default-trigger = "mmc0"; +		}; +	}; + +}; + +&i2c1 { +	clock-frequency = <2600000>; + +	twl: twl@48 { +		reg = <0x48>; +		interrupts = <7>; /* SYS_NIRQ cascaded to intc */ +		interrupt-parent = <&intc>; +	}; +}; + +/include/ "twl4030.dtsi" + +&mmc1 { +	vmmc-supply = <&vmmc1>; +	vmmc_aux-supply = <&vsim>; +	bus-width = <8>; +}; + +&mmc2 { +	status = "disabled"; +}; + +&mmc3 { +	status = "disabled"; +}; diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi index 696e929d030..1acc26148ff 100644 --- a/arch/arm/boot/dts/omap3.dtsi +++ b/arch/arm/boot/dts/omap3.dtsi @@ -12,6 +12,7 @@  / {  	compatible = "ti,omap3430", "ti,omap3"; +	interrupt-parent = <&intc>;  	aliases {  		serial0 = &uart1; @@ -60,6 +61,12 @@  		ranges;  		ti,hwmods = "l3_main"; +		counter32k: counter@48320000 { +			compatible = "ti,omap-counter32k"; +			reg = <0x48320000 0x20>; +			ti,hwmods = "counter_32k"; +		}; +  		intc: interrupt-controller@48200000 {  			compatible = "ti,omap2-intc";  			interrupt-controller; @@ -240,7 +247,6 @@  				     <59>, /* TX interrupt */  				     <60>; /* RX interrupt */  			interrupt-names = "common", "tx", "rx"; -			interrupt-parent = <&intc>;  			ti,buffer-size = <128>;  			ti,hwmods = "mcbsp1";  		}; @@ -255,7 +261,6 @@  				     <63>, /* RX interrupt */  				     <4>;  /* Sidetone */  			interrupt-names = "common", "tx", "rx", "sidetone"; -			interrupt-parent = <&intc>;  			ti,buffer-size = <1280>;  			ti,hwmods = "mcbsp2", "mcbsp2_sidetone";  		}; @@ -270,7 +275,6 @@  				     <90>, /* RX interrupt */  				     <5>;  /* Sidetone */  			interrupt-names = "common", "tx", "rx", "sidetone"; -			interrupt-parent = <&intc>;  			ti,buffer-size = <128>;  			ti,hwmods = "mcbsp3", "mcbsp3_sidetone";  		}; @@ -283,7 +287,6 @@  				     <54>, /* TX interrupt */  				     <55>; /* RX interrupt */  			interrupt-names = "common", "tx", "rx"; -			interrupt-parent = <&intc>;  			ti,buffer-size = <128>;  			ti,hwmods = "mcbsp4";  		}; @@ -296,9 +299,103 @@  				     <81>, /* TX interrupt */  				     <82>; /* RX interrupt */  			interrupt-names = "common", "tx", "rx"; -			interrupt-parent = <&intc>;  			ti,buffer-size = <128>;  			ti,hwmods = "mcbsp5";  		}; + +		timer1: timer@48318000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48318000 0x400>; +			interrupts = <37>; +			ti,hwmods = "timer1"; +			ti,timer-alwon; +		}; + +		timer2: timer@49032000 { +			compatible = "ti,omap2-timer"; +			reg = <0x49032000 0x400>; +			interrupts = <38>; +			ti,hwmods = "timer2"; +		}; + +		timer3: timer@49034000 { +			compatible = "ti,omap2-timer"; +			reg = <0x49034000 0x400>; +			interrupts = <39>; +			ti,hwmods = "timer3"; +		}; + +		timer4: timer@49036000 { +			compatible = "ti,omap2-timer"; +			reg = <0x49036000 0x400>; +			interrupts = <40>; +			ti,hwmods = "timer4"; +		}; + +		timer5: timer@49038000 { +			compatible = "ti,omap2-timer"; +			reg = <0x49038000 0x400>; +			interrupts = <41>; +			ti,hwmods = "timer5"; +			ti,timer-dsp; +		}; + +		timer6: timer@4903a000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4903a000 0x400>; +			interrupts = <42>; +			ti,hwmods = "timer6"; +			ti,timer-dsp; +		}; + +		timer7: timer@4903c000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4903c000 0x400>; +			interrupts = <43>; +			ti,hwmods = "timer7"; +			ti,timer-dsp; +		}; + +		timer8: timer@4903e000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4903e000 0x400>; +			interrupts = <44>; +			ti,hwmods = "timer8"; +			ti,timer-pwm; +			ti,timer-dsp; +		}; + +		timer9: timer@49040000 { +			compatible = "ti,omap2-timer"; +			reg = <0x49040000 0x400>; +			interrupts = <45>; +			ti,hwmods = "timer9"; +			ti,timer-pwm; +		}; + +		timer10: timer@48086000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48086000 0x400>; +			interrupts = <46>; +			ti,hwmods = "timer10"; +			ti,timer-pwm; +		}; + +		timer11: timer@48088000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48088000 0x400>; +			interrupts = <47>; +			ti,hwmods = "timer11"; +			ti,timer-pwm; +		}; + +		timer12: timer@48304000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48304000 0x400>; +			interrupts = <95>; +			ti,hwmods = "timer12"; +			ti,timer-alwon; +			ti,timer-secure; +		};  	};  }; diff --git a/arch/arm/boot/dts/omap4-panda-a4.dts b/arch/arm/boot/dts/omap4-panda-a4.dts new file mode 100644 index 00000000000..75466d2abfb --- /dev/null +++ b/arch/arm/boot/dts/omap4-panda-a4.dts @@ -0,0 +1,17 @@ +/* + * Copyright (C) 2012 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. + */ +/include/ "omap4-panda.dts" + +/* Pandaboard Rev A4+ have external pullups on SCL & SDA */ +&dss_hdmi_pins { +	pinctrl-single,pins = < +		0x5a 0x118	/* hdmi_cec.hdmi_cec INPUT PULLUP | MODE 0 */ +		0x5c 0x100	/* hdmi_scl.hdmi_scl INPUT | MODE 0 */ +		0x5e 0x100	/* hdmi_sda.hdmi_sda INPUT | MODE 0 */ +		>; +}; diff --git a/arch/arm/boot/dts/omap4-pandaES.dts b/arch/arm/boot/dts/omap4-panda-es.dts index d4ba43a48d9..73bc1a67e44 100644 --- a/arch/arm/boot/dts/omap4-pandaES.dts +++ b/arch/arm/boot/dts/omap4-panda-es.dts @@ -22,3 +22,12 @@  		"AFML", "Line In",  		"AFMR", "Line In";  }; + +/* PandaboardES has external pullups on SCL & SDA */ +&dss_hdmi_pins { +	pinctrl-single,pins = < +		0x5a 0x118	/* hdmi_cec.hdmi_cec INPUT PULLUP | MODE 0 */ +		0x5c 0x100	/* hdmi_scl.hdmi_scl INPUT | MODE 0 */ +		0x5e 0x100	/* hdmi_sda.hdmi_sda INPUT | MODE 0 */ +		>; +}; diff --git a/arch/arm/boot/dts/omap4-panda.dts b/arch/arm/boot/dts/omap4-panda.dts index e8f927cbb37..4122efe31cf 100644 --- a/arch/arm/boot/dts/omap4-panda.dts +++ b/arch/arm/boot/dts/omap4-panda.dts @@ -65,6 +65,8 @@  			&twl6040_pins  			&mcpdm_pins  			&mcbsp1_pins +			&dss_hdmi_pins +			&tpd12s015_pins  	>;  	twl6040_pins: pinmux_twl6040_pins { @@ -92,6 +94,22 @@  			0xc4 0x100	/* abe_mcbsp1_fsx.abe_mcbsp1_fsx INPUT | MODE0 */  		>;  	}; + +	dss_hdmi_pins: pinmux_dss_hdmi_pins { +		pinctrl-single,pins = < +			0x5a 0x118	/* hdmi_cec.hdmi_cec INPUT PULLUP | MODE 0 */ +			0x5c 0x118	/* hdmi_scl.hdmi_scl INPUT PULLUP | MODE 0 */ +			0x5e 0x118	/* hdmi_sda.hdmi_sda INPUT PULLUP | MODE 0 */ +		>; +	}; + +	tpd12s015_pins: pinmux_tpd12s015_pins { +		pinctrl-single,pins = < +			0x22 0x3	/* gpmc_a17.gpio_41 OUTPUT | MODE3 */ +			0x48 0x3	/* gpmc_nbe1.gpio_60 OUTPUT | MODE3 */ +			0x58 0x10b	/* hdmi_hpd.gpio_63 INPUT PULLDOWN | MODE3 */ +		>; +	};  };  &i2c1 { @@ -184,3 +202,7 @@  &dmic {  	status = "disabled";  }; + +&twl_usb_comparator { +	usb-supply = <&vusb>; +}; diff --git a/arch/arm/boot/dts/omap4-sdp-es23plus.dts b/arch/arm/boot/dts/omap4-sdp-es23plus.dts new file mode 100644 index 00000000000..b4a40ffbce3 --- /dev/null +++ b/arch/arm/boot/dts/omap4-sdp-es23plus.dts @@ -0,0 +1,17 @@ +/* + * Copyright (C) 2012 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. + */ +/include/ "omap4-sdp.dts" + +/* SDP boards with 4430 ES2.3+ or 4460 have external pullups on SCL & SDA */ +&dss_hdmi_pins { +	pinctrl-single,pins = < +		0x5a 0x118	/* hdmi_cec.hdmi_cec INPUT PULLUP | MODE 0 */ +		0x5c 0x100	/* hdmi_scl.hdmi_scl INPUT | MODE 0 */ +		0x5e 0x100	/* hdmi_sda.hdmi_sda INPUT | MODE 0 */ +		>; +}; diff --git a/arch/arm/boot/dts/omap4-sdp.dts b/arch/arm/boot/dts/omap4-sdp.dts index 5b7e04fbff5..43e5258a937 100644 --- a/arch/arm/boot/dts/omap4-sdp.dts +++ b/arch/arm/boot/dts/omap4-sdp.dts @@ -124,6 +124,8 @@  			&dmic_pins  			&mcbsp1_pins  			&mcbsp2_pins +			&dss_hdmi_pins +			&tpd12s015_pins  	>;  	uart2_pins: pinmux_uart2_pins { @@ -194,6 +196,22 @@  			0xbc 0x100	/* abe_mcbsp2_fsx.abe_mcbsp2_fsx INPUT | MODE0 */  		>;  	}; + +	dss_hdmi_pins: pinmux_dss_hdmi_pins { +		pinctrl-single,pins = < +			0x5a 0x118	/* hdmi_cec.hdmi_cec INPUT PULLUP | MODE 0 */ +			0x5c 0x118	/* hdmi_scl.hdmi_scl INPUT PULLUP | MODE 0 */ +			0x5e 0x118	/* hdmi_sda.hdmi_sda INPUT PULLUP | MODE 0 */ +		>; +	}; + +	tpd12s015_pins: pinmux_tpd12s015_pins { +		pinctrl-single,pins = < +			0x22 0x3	/* gpmc_a17.gpio_41 OUTPUT | MODE3 */ +			0x48 0x3	/* gpmc_nbe1.gpio_60 OUTPUT | MODE3 */ +			0x58 0x10b	/* hdmi_hpd.gpio_63 INPUT PULLDOWN | MODE3 */ +		>; +	};  };  &i2c1 { @@ -406,3 +424,7 @@  &mcbsp3 {  	status = "disabled";  }; + +&twl_usb_comparator { +	usb-supply = <&vusb>; +}; diff --git a/arch/arm/boot/dts/omap4-var_som.dts b/arch/arm/boot/dts/omap4-var-som.dts index 6601e6af609..6601e6af609 100644 --- a/arch/arm/boot/dts/omap4-var_som.dts +++ b/arch/arm/boot/dts/omap4-var-som.dts diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi index 3883f94fdbd..739bb79e410 100644 --- a/arch/arm/boot/dts/omap4.dtsi +++ b/arch/arm/boot/dts/omap4.dtsi @@ -95,6 +95,12 @@  		ranges;  		ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3"; +		counter32k: counter@4a304000 { +			compatible = "ti,omap-counter32k"; +			reg = <0x4a304000 0x20>; +			ti,hwmods = "counter_32k"; +		}; +  		omap4_pmx_core: pinmux@4a100040 {  			compatible = "ti,omap4-padconf", "pinctrl-single";  			reg = <0x4a100040 0x0196>; @@ -340,7 +346,6 @@  			      <0x49032000 0x7f>; /* L3 Interconnect */  			reg-names = "mpu", "dma";  			interrupts = <0 112 0x4>; -			interrupt-parent = <&gic>;  			ti,hwmods = "mcpdm";  		}; @@ -350,7 +355,6 @@  			      <0x4902e000 0x7f>; /* L3 Interconnect */  			reg-names = "mpu", "dma";  			interrupts = <0 114 0x4>; -			interrupt-parent = <&gic>;  			ti,hwmods = "dmic";  		}; @@ -361,7 +365,6 @@  			reg-names = "mpu", "dma";  			interrupts = <0 17 0x4>;  			interrupt-names = "common"; -			interrupt-parent = <&gic>;  			ti,buffer-size = <128>;  			ti,hwmods = "mcbsp1";  		}; @@ -373,7 +376,6 @@  			reg-names = "mpu", "dma";  			interrupts = <0 22 0x4>;  			interrupt-names = "common"; -			interrupt-parent = <&gic>;  			ti,buffer-size = <128>;  			ti,hwmods = "mcbsp2";  		}; @@ -385,7 +387,6 @@  			reg-names = "mpu", "dma";  			interrupts = <0 23 0x4>;  			interrupt-names = "common"; -			interrupt-parent = <&gic>;  			ti,buffer-size = <128>;  			ti,hwmods = "mcbsp3";  		}; @@ -396,7 +397,6 @@  			reg-names = "mpu";  			interrupts = <0 16 0x4>;  			interrupt-names = "common"; -			interrupt-parent = <&gic>;  			ti,buffer-size = <128>;  			ti,hwmods = "mcbsp4";  		}; @@ -431,12 +431,103 @@  			hw-caps-temp-alert;  		}; -		ocp2scp { +		ocp2scp@4a0ad000 {  			compatible = "ti,omap-ocp2scp"; +			reg = <0x4a0ad000 0x1f>;  			#address-cells = <1>;  			#size-cells = <1>;  			ranges;  			ti,hwmods = "ocp2scp_usb_phy";  		}; + +		timer1: timer@4a318000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4a318000 0x80>; +			interrupts = <0 37 0x4>; +			ti,hwmods = "timer1"; +			ti,timer-alwon; +		}; + +		timer2: timer@48032000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48032000 0x80>; +			interrupts = <0 38 0x4>; +			ti,hwmods = "timer2"; +		}; + +		timer3: timer@48034000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48034000 0x80>; +			interrupts = <0 39 0x4>; +			ti,hwmods = "timer3"; +		}; + +		timer4: timer@48036000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48036000 0x80>; +			interrupts = <0 40 0x4>; +			ti,hwmods = "timer4"; +		}; + +		timer5: timer@40138000 { +			compatible = "ti,omap2-timer"; +			reg = <0x40138000 0x80>, +			      <0x49038000 0x80>; +			interrupts = <0 41 0x4>; +			ti,hwmods = "timer5"; +			ti,timer-dsp; +		}; + +		timer6: timer@4013a000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4013a000 0x80>, +			      <0x4903a000 0x80>; +			interrupts = <0 42 0x4>; +			ti,hwmods = "timer6"; +			ti,timer-dsp; +		}; + +		timer7: timer@4013c000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4013c000 0x80>, +			      <0x4903c000 0x80>; +			interrupts = <0 43 0x4>; +			ti,hwmods = "timer7"; +			ti,timer-dsp; +		}; + +		timer8: timer@4013e000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4013e000 0x80>, +			      <0x4903e000 0x80>; +			interrupts = <0 44 0x4>; +			ti,hwmods = "timer8"; +			ti,timer-pwm; +			ti,timer-dsp; +		}; + +		timer9: timer@4803e000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4803e000 0x80>; +			interrupts = <0 45 0x4>; +			ti,hwmods = "timer9"; +			ti,timer-pwm; +		}; + +		timer10: timer@48086000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48086000 0x80>; +			interrupts = <0 46 0x4>; +			ti,hwmods = "timer10"; +			ti,timer-pwm; +		}; + +		timer11: timer@48088000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48088000 0x80>; +			interrupts = <0 47 0x4>; +			ti,hwmods = "timer11"; +			ti,timer-pwm; +		};  	};  }; diff --git a/arch/arm/boot/dts/omap5-evm.dts b/arch/arm/boot/dts/omap5-evm.dts index c663eba7316..8722c15bbba 100644 --- a/arch/arm/boot/dts/omap5-evm.dts +++ b/arch/arm/boot/dts/omap5-evm.dts @@ -8,6 +8,7 @@  /dts-v1/;  /include/ "omap5.dtsi" +/include/ "samsung_k3pe0e000b.dtsi"  / {  	model = "TI OMAP5 EVM board"; @@ -15,7 +16,7 @@  	memory {  		device_type = "memory"; -		reg = <0x80000000 0x40000000>; /* 1 GB */ +		reg = <0x80000000 0x80000000>; /* 2 GB */  	};  	vmmcsd_fixed: fixedregulator-mmcsd { @@ -140,3 +141,13 @@  &mcbsp3 {  	status = "disabled";  }; + +&emif1 { +	cs1-used; +	device-handle = <&samsung_K3PE0E000B>; +}; + +&emif2 { +	cs1-used; +	device-handle = <&samsung_K3PE0E000B>; +}; diff --git a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/omap5.dtsi index 42c78beb4fd..790bb2a4b34 100644 --- a/arch/arm/boot/dts/omap5.dtsi +++ b/arch/arm/boot/dts/omap5.dtsi @@ -77,6 +77,12 @@  		ranges;  		ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3"; +		counter32k: counter@4ae04000 { +			compatible = "ti,omap-counter32k"; +			reg = <0x4ae04000 0x40>; +			ti,hwmods = "counter_32k"; +		}; +  		omap5_pmx_core: pinmux@4a002840 {  			compatible = "ti,omap4-padconf", "pinctrl-single";  			reg = <0x4a002840 0x01b6>; @@ -104,6 +110,8 @@  		gpio1: gpio@4ae10000 {  			compatible = "ti,omap4-gpio"; +			reg = <0x4ae10000 0x200>; +			interrupts = <0 29 0x4>;  			ti,hwmods = "gpio1";  			gpio-controller;  			#gpio-cells = <2>; @@ -113,6 +121,8 @@  		gpio2: gpio@48055000 {  			compatible = "ti,omap4-gpio"; +			reg = <0x48055000 0x200>; +			interrupts = <0 30 0x4>;  			ti,hwmods = "gpio2";  			gpio-controller;  			#gpio-cells = <2>; @@ -122,6 +132,8 @@  		gpio3: gpio@48057000 {  			compatible = "ti,omap4-gpio"; +			reg = <0x48057000 0x200>; +			interrupts = <0 31 0x4>;  			ti,hwmods = "gpio3";  			gpio-controller;  			#gpio-cells = <2>; @@ -131,6 +143,8 @@  		gpio4: gpio@48059000 {  			compatible = "ti,omap4-gpio"; +			reg = <0x48059000 0x200>; +			interrupts = <0 32 0x4>;  			ti,hwmods = "gpio4";  			gpio-controller;  			#gpio-cells = <2>; @@ -140,6 +154,8 @@  		gpio5: gpio@4805b000 {  			compatible = "ti,omap4-gpio"; +			reg = <0x4805b000 0x200>; +			interrupts = <0 33 0x4>;  			ti,hwmods = "gpio5";  			gpio-controller;  			#gpio-cells = <2>; @@ -149,6 +165,8 @@  		gpio6: gpio@4805d000 {  			compatible = "ti,omap4-gpio"; +			reg = <0x4805d000 0x200>; +			interrupts = <0 34 0x4>;  			ti,hwmods = "gpio6";  			gpio-controller;  			#gpio-cells = <2>; @@ -158,6 +176,8 @@  		gpio7: gpio@48051000 {  			compatible = "ti,omap4-gpio"; +			reg = <0x48051000 0x200>; +			interrupts = <0 35 0x4>;  			ti,hwmods = "gpio7";  			gpio-controller;  			#gpio-cells = <2>; @@ -167,6 +187,8 @@  		gpio8: gpio@48053000 {  			compatible = "ti,omap4-gpio"; +			reg = <0x48053000 0x200>; +			interrupts = <0 121 0x4>;  			ti,hwmods = "gpio8";  			gpio-controller;  			#gpio-cells = <2>; @@ -176,6 +198,8 @@  		i2c1: i2c@48070000 {  			compatible = "ti,omap4-i2c"; +			reg = <0x48070000 0x100>; +			interrupts = <0 56 0x4>;  			#address-cells = <1>;  			#size-cells = <0>;  			ti,hwmods = "i2c1"; @@ -183,6 +207,8 @@  		i2c2: i2c@48072000 {  			compatible = "ti,omap4-i2c"; +			reg = <0x48072000 0x100>; +			interrupts = <0 57 0x4>;  			#address-cells = <1>;  			#size-cells = <0>;  			ti,hwmods = "i2c2"; @@ -190,20 +216,26 @@  		i2c3: i2c@48060000 {  			compatible = "ti,omap4-i2c"; +			reg = <0x48060000 0x100>; +			interrupts = <0 61 0x4>;  			#address-cells = <1>;  			#size-cells = <0>;  			ti,hwmods = "i2c3";  		}; -		i2c4: i2c@4807A000 { +		i2c4: i2c@4807a000 {  			compatible = "ti,omap4-i2c"; +			reg = <0x4807a000 0x100>; +			interrupts = <0 62 0x4>;  			#address-cells = <1>;  			#size-cells = <0>;  			ti,hwmods = "i2c4";  		}; -		i2c5: i2c@4807C000 { +		i2c5: i2c@4807c000 {  			compatible = "ti,omap4-i2c"; +			reg = <0x4807c000 0x100>; +			interrupts = <0 60 0x4>;  			#address-cells = <1>;  			#size-cells = <0>;  			ti,hwmods = "i2c5"; @@ -211,42 +243,56 @@  		uart1: serial@4806a000 {  			compatible = "ti,omap4-uart"; +			reg = <0x4806a000 0x100>; +			interrupts = <0 72 0x4>;  			ti,hwmods = "uart1";  			clock-frequency = <48000000>;  		};  		uart2: serial@4806c000 {  			compatible = "ti,omap4-uart"; +			reg = <0x4806c000 0x100>; +			interrupts = <0 73 0x4>;  			ti,hwmods = "uart2";  			clock-frequency = <48000000>;  		};  		uart3: serial@48020000 {  			compatible = "ti,omap4-uart"; +			reg = <0x48020000 0x100>; +			interrupts = <0 74 0x4>;  			ti,hwmods = "uart3";  			clock-frequency = <48000000>;  		};  		uart4: serial@4806e000 {  			compatible = "ti,omap4-uart"; +			reg = <0x4806e000 0x100>; +			interrupts = <0 70 0x4>;  			ti,hwmods = "uart4";  			clock-frequency = <48000000>;  		};  		uart5: serial@48066000 { -			compatible = "ti,omap5-uart"; +			compatible = "ti,omap4-uart"; +			reg = <0x48066000 0x100>; +			interrupts = <0 105 0x4>;  			ti,hwmods = "uart5";  			clock-frequency = <48000000>;  		};  		uart6: serial@48068000 { -			compatible = "ti,omap6-uart"; +			compatible = "ti,omap4-uart"; +			reg = <0x48068000 0x100>; +			interrupts = <0 106 0x4>;  			ti,hwmods = "uart6";  			clock-frequency = <48000000>;  		};  		mmc1: mmc@4809c000 {  			compatible = "ti,omap4-hsmmc"; +			reg = <0x4809c000 0x400>; +			interrupts = <0 83 0x4>;  			ti,hwmods = "mmc1";  			ti,dual-volt;  			ti,needs-special-reset; @@ -254,24 +300,32 @@  		mmc2: mmc@480b4000 {  			compatible = "ti,omap4-hsmmc"; +			reg = <0x480b4000 0x400>; +			interrupts = <0 86 0x4>;  			ti,hwmods = "mmc2";  			ti,needs-special-reset;  		};  		mmc3: mmc@480ad000 {  			compatible = "ti,omap4-hsmmc"; +			reg = <0x480ad000 0x400>; +			interrupts = <0 94 0x4>;  			ti,hwmods = "mmc3";  			ti,needs-special-reset;  		};  		mmc4: mmc@480d1000 {  			compatible = "ti,omap4-hsmmc"; +			reg = <0x480d1000 0x400>; +			interrupts = <0 96 0x4>;  			ti,hwmods = "mmc4";  			ti,needs-special-reset;  		};  		mmc5: mmc@480d5000 {  			compatible = "ti,omap4-hsmmc"; +			reg = <0x480d5000 0x400>; +			interrupts = <0 59 0x4>;  			ti,hwmods = "mmc5";  			ti,needs-special-reset;  		}; @@ -287,7 +341,6 @@  			      <0x49032000 0x7f>; /* L3 Interconnect */  			reg-names = "mpu", "dma";  			interrupts = <0 112 0x4>; -			interrupt-parent = <&gic>;  			ti,hwmods = "mcpdm";  		}; @@ -297,7 +350,6 @@  			      <0x4902e000 0x7f>; /* L3 Interconnect */  			reg-names = "mpu", "dma";  			interrupts = <0 114 0x4>; -			interrupt-parent = <&gic>;  			ti,hwmods = "dmic";  		}; @@ -308,7 +360,6 @@  			reg-names = "mpu", "dma";  			interrupts = <0 17 0x4>;  			interrupt-names = "common"; -			interrupt-parent = <&gic>;  			ti,buffer-size = <128>;  			ti,hwmods = "mcbsp1";  		}; @@ -320,7 +371,6 @@  			reg-names = "mpu", "dma";  			interrupts = <0 22 0x4>;  			interrupt-names = "common"; -			interrupt-parent = <&gic>;  			ti,buffer-size = <128>;  			ti,hwmods = "mcbsp2";  		}; @@ -332,9 +382,119 @@  			reg-names = "mpu", "dma";  			interrupts = <0 23 0x4>;  			interrupt-names = "common"; -			interrupt-parent = <&gic>;  			ti,buffer-size = <128>;  			ti,hwmods = "mcbsp3";  		}; + +		timer1: timer@4ae18000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4ae18000 0x80>; +			interrupts = <0 37 0x4>; +			ti,hwmods = "timer1"; +			ti,timer-alwon; +		}; + +		timer2: timer@48032000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48032000 0x80>; +			interrupts = <0 38 0x4>; +			ti,hwmods = "timer2"; +		}; + +		timer3: timer@48034000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48034000 0x80>; +			interrupts = <0 39 0x4>; +			ti,hwmods = "timer3"; +		}; + +		timer4: timer@48036000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48036000 0x80>; +			interrupts = <0 40 0x4>; +			ti,hwmods = "timer4"; +		}; + +		timer5: timer@40138000 { +			compatible = "ti,omap2-timer"; +			reg = <0x40138000 0x80>, +			      <0x49038000 0x80>; +			interrupts = <0 41 0x4>; +			ti,hwmods = "timer5"; +			ti,timer-dsp; +		}; + +		timer6: timer@4013a000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4013a000 0x80>, +			      <0x4903a000 0x80>; +			interrupts = <0 42 0x4>; +			ti,hwmods = "timer6"; +			ti,timer-dsp; +			ti,timer-pwm; +		}; + +		timer7: timer@4013c000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4013c000 0x80>, +			      <0x4903c000 0x80>; +			interrupts = <0 43 0x4>; +			ti,hwmods = "timer7"; +			ti,timer-dsp; +		}; + +		timer8: timer@4013e000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4013e000 0x80>, +			      <0x4903e000 0x80>; +			interrupts = <0 44 0x4>; +			ti,hwmods = "timer8"; +			ti,timer-dsp; +			ti,timer-pwm; +		}; + +		timer9: timer@4803e000 { +			compatible = "ti,omap2-timer"; +			reg = <0x4803e000 0x80>; +			interrupts = <0 45 0x4>; +			ti,hwmods = "timer9"; +		}; + +		timer10: timer@48086000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48086000 0x80>; +			interrupts = <0 46 0x4>; +			ti,hwmods = "timer10"; +		}; + +		timer11: timer@48088000 { +			compatible = "ti,omap2-timer"; +			reg = <0x48088000 0x80>; +			interrupts = <0 47 0x4>; +			ti,hwmods = "timer11"; +			ti,timer-pwm; +		}; + +		emif1: emif@0x4c000000 { +			compatible	= "ti,emif-4d5"; +			ti,hwmods	= "emif1"; +			phy-type	= <2>; /* DDR PHY type: Intelli PHY */ +			reg = <0x4c000000 0x400>; +			interrupts = <0 110 0x4>; +			hw-caps-read-idle-ctrl; +			hw-caps-ll-interface; +			hw-caps-temp-alert; +		}; + +		emif2: emif@0x4d000000 { +			compatible	= "ti,emif-4d5"; +			ti,hwmods	= "emif2"; +			phy-type	= <2>; /* DDR PHY type: Intelli PHY */ +			reg = <0x4d000000 0x400>; +			interrupts = <0 111 0x4>; +			hw-caps-read-idle-ctrl; +			hw-caps-ll-interface; +			hw-caps-temp-alert; +		};  	};  }; diff --git a/arch/arm/boot/dts/samsung_k3pe0e000b.dtsi b/arch/arm/boot/dts/samsung_k3pe0e000b.dtsi new file mode 100644 index 00000000000..9657a5cbc3a --- /dev/null +++ b/arch/arm/boot/dts/samsung_k3pe0e000b.dtsi @@ -0,0 +1,67 @@ +/* + * Timings and Geometry for Samsung K3PE0E000B memory part + */ + +/ { +	samsung_K3PE0E000B: lpddr2 { +		compatible	= "Samsung,K3PE0E000B","jedec,lpddr2-s4"; +		density		= <4096>; +		io-width	= <32>; + +		tRPab-min-tck	= <3>; +		tRCD-min-tck	= <3>; +		tWR-min-tck	= <3>; +		tRASmin-min-tck	= <3>; +		tRRD-min-tck	= <2>; +		tWTR-min-tck	= <2>; +		tXP-min-tck	= <2>; +		tRTP-min-tck	= <2>; +		tCKE-min-tck	= <3>; +		tCKESR-min-tck	= <3>; +		tFAW-min-tck	= <8>; + +		timings_samsung_K3PE0E000B_533MHz: lpddr2-timings@0 { +			compatible	= "jedec,lpddr2-timings"; +			min-freq	= <10000000>; +			max-freq	= <533333333>; +			tRPab		= <21000>; +			tRCD		= <18000>; +			tWR		= <15000>; +			tRAS-min	= <42000>; +			tRRD		= <10000>; +			tWTR		= <7500>; +			tXP		= <7500>; +			tRTP		= <7500>; +			tCKESR		= <15000>; +			tDQSCK-max	= <5500>; +			tFAW		= <50000>; +			tZQCS		= <90000>; +			tZQCL		= <360000>; +			tZQinit		= <1000000>; +			tRAS-max-ns	= <70000>; +			tDQSCK-max-derated = <6000>; +		}; + +		timings_samsung_K3PE0E000B_266MHz: lpddr2-timings@1 { +			compatible	= "jedec,lpddr2-timings"; +			min-freq	= <10000000>; +			max-freq	= <266666666>; +			tRPab		= <21000>; +			tRCD		= <18000>; +			tWR		= <15000>; +			tRAS-min	= <42000>; +			tRRD		= <10000>; +			tWTR		= <7500>; +			tXP		= <7500>; +			tRTP		= <7500>; +			tCKESR		= <15000>; +			tDQSCK-max	= <5500>; +			tFAW		= <50000>; +			tZQCS		= <90000>; +			tZQCL		= <360000>; +			tZQinit		= <1000000>; +			tRAS-max-ns	= <70000>; +			tDQSCK-max-derated = <6000>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/tegra20-harmony.dts b/arch/arm/boot/dts/tegra20-harmony.dts index c3ef1ad26b6..74b8a47adf9 100644 --- a/arch/arm/boot/dts/tegra20-harmony.dts +++ b/arch/arm/boot/dts/tegra20-harmony.dts @@ -297,131 +297,98 @@  			vinldo9-supply = <&sm2_reg>;  			regulators { -				#address-cells = <1>; -				#size-cells = <0>; - -				sys_reg: regulator@0 { -					reg = <0>; -					regulator-compatible = "sys"; +				sys_reg: sys {  					regulator-name = "vdd_sys";  					regulator-always-on;  				}; -				regulator@1 { -					reg = <1>; -					regulator-compatible = "sm0"; +				sm0 {  					regulator-name = "vdd_sm0,vdd_core";  					regulator-min-microvolt = <1200000>;  					regulator-max-microvolt = <1200000>;  					regulator-always-on;  				}; -				regulator@2 { -					reg = <2>; -					regulator-compatible = "sm1"; +				sm1 {  					regulator-name = "vdd_sm1,vdd_cpu";  					regulator-min-microvolt = <1000000>;  					regulator-max-microvolt = <1000000>;  					regulator-always-on;  				}; -				sm2_reg: regulator@3 { -					reg = <3>; -					regulator-compatible = "sm2"; +				sm2_reg: sm2 {  					regulator-name = "vdd_sm2,vin_ldo*";  					regulator-min-microvolt = <3700000>;  					regulator-max-microvolt = <3700000>;  					regulator-always-on;  				}; -				regulator@4 { -					reg = <4>; -					regulator-compatible = "ldo0"; +				ldo0 {  					regulator-name = "vdd_ldo0,vddio_pex_clk";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  				}; -				regulator@5 { -					reg = <5>; -					regulator-compatible = "ldo1"; +				ldo1 {  					regulator-name = "vdd_ldo1,avdd_pll*";  					regulator-min-microvolt = <1100000>;  					regulator-max-microvolt = <1100000>;  					regulator-always-on;  				}; -				regulator@6 { -					reg = <6>; -					regulator-compatible = "ldo2"; +				ldo2 {  					regulator-name = "vdd_ldo2,vdd_rtc";  					regulator-min-microvolt = <1200000>;  					regulator-max-microvolt = <1200000>;  				}; -				regulator@7 { -					reg = <7>; -					regulator-compatible = "ldo3"; +				ldo3 {  					regulator-name = "vdd_ldo3,avdd_usb*";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  					regulator-always-on;  				}; -				regulator@8 { -					reg = <8>; -					regulator-compatible = "ldo4"; +				ldo4 {  					regulator-name = "vdd_ldo4,avdd_osc,vddio_sys";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  					regulator-always-on;  				}; -				regulator@9 { -					reg = <9>; -					regulator-compatible = "ldo5"; +				ldo5 {  					regulator-name = "vdd_ldo5,vcore_mmc";  					regulator-min-microvolt = <2850000>;  					regulator-max-microvolt = <2850000>;  					regulator-always-on;  				}; -				regulator@10 { -					reg = <10>; -					regulator-compatible = "ldo6"; +				ldo6 {  					regulator-name = "vdd_ldo6,avdd_vdac";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  				}; -				regulator@11 { -					reg = <11>; -					regulator-compatible = "ldo7"; +				ldo7 {  					regulator-name = "vdd_ldo7,avdd_hdmi";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  				}; -				regulator@12 { -					reg = <12>; -					regulator-compatible = "ldo8"; +				ldo8 {  					regulator-name = "vdd_ldo8,avdd_hdmi_pll";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  				}; -				regulator@13 { -					reg = <13>; -					regulator-compatible = "ldo9"; +				ldo9 {  					regulator-name = "vdd_ldo9,avdd_2v85,vdd_ddr_rx";  					regulator-min-microvolt = <2850000>;  					regulator-max-microvolt = <2850000>;  					regulator-always-on;  				}; -				regulator@14 { -					reg = <14>; -					regulator-compatible = "ldo_rtc"; +				ldo_rtc {  					regulator-name = "vdd_rtc_out,vdd_cell";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>; diff --git a/arch/arm/boot/dts/tegra20-paz00.dts b/arch/arm/boot/dts/tegra20-paz00.dts index ddf287f52d4..6a93d1404c7 100644 --- a/arch/arm/boot/dts/tegra20-paz00.dts +++ b/arch/arm/boot/dts/tegra20-paz00.dts @@ -291,37 +291,26 @@  			vinldo9-supply = <&sm2_reg>;  			regulators { -				#address-cells = <1>; -				#size-cells = <0>; - -				sys_reg: regulator@0 { -					reg = <0>; -					regulator-compatible = "sys"; +				sys_reg: sys {  					regulator-name = "vdd_sys";  					regulator-always-on;  				}; -				regulator@1 { -					reg = <1>; -					regulator-compatible = "sm0"; +				sm0 {  					regulator-name = "+1.2vs_sm0,vdd_core";  					regulator-min-microvolt = <1200000>;  					regulator-max-microvolt = <1200000>;  					regulator-always-on;  				}; -				regulator@2 { -					reg = <2>; -					regulator-compatible = "sm1"; +				sm1 {  					regulator-name = "+1.0vs_sm1,vdd_cpu";  					regulator-min-microvolt = <1000000>;  					regulator-max-microvolt = <1000000>;  					regulator-always-on;  				}; -				sm2_reg: regulator@3 { -					reg = <3>; -					regulator-compatible = "sm2"; +				sm2_reg: sm2 {  					regulator-name = "+3.7vs_sm2,vin_ldo*";  					regulator-min-microvolt = <3700000>;  					regulator-max-microvolt = <3700000>; @@ -330,53 +319,41 @@  				/* LDO0 is not connected to anything */ -				regulator@5 { -					reg = <5>; -					regulator-compatible = "ldo1"; +				ldo1 {  					regulator-name = "+1.1vs_ldo1,avdd_pll*";  					regulator-min-microvolt = <1100000>;  					regulator-max-microvolt = <1100000>;  					regulator-always-on;  				}; -				regulator@6 { -					reg = <6>; -					regulator-compatible = "ldo2"; +				ldo2 {  					regulator-name = "+1.2vs_ldo2,vdd_rtc";  					regulator-min-microvolt = <1200000>;  					regulator-max-microvolt = <1200000>;  				}; -				regulator@7 { -					reg = <7>; -					regulator-compatible = "ldo3"; +				ldo3 {  					regulator-name = "+3.3vs_ldo3,avdd_usb*";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  					regulator-always-on;  				}; -				regulator@8 { -					reg = <8>; -					regulator-compatible = "ldo4"; +				ldo4 {  					regulator-name = "+1.8vs_ldo4,avdd_osc,vddio_sys";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  					regulator-always-on;  				}; -				regulator@9 { -					reg = <9>; -					regulator-compatible = "ldo5"; +				ldo5 {  					regulator-name = "+2.85vs_ldo5,vcore_mmc";  					regulator-min-microvolt = <2850000>;  					regulator-max-microvolt = <2850000>;  					regulator-always-on;  				}; -				regulator@10 { -					reg = <10>; -					regulator-compatible = "ldo6"; +				ldo6 {  					/*  					 * Research indicates this should be  					 * 1.8v; other boards that use this @@ -390,34 +367,26 @@  					regulator-max-microvolt = <1800000>;  				}; -				regulator@11 { -					reg = <11>; -					regulator-compatible = "ldo7"; +				ldo7 {  					regulator-name = "+3.3vs_ldo7,avdd_hdmi";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  				}; -				regulator@12 { -					reg = <12>; -					regulator-compatible = "ldo8"; +				ldo8 {  					regulator-name = "+1.8vs_ldo8,avdd_hdmi_pll";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  				}; -				regulator@13 { -					reg = <13>; -					regulator-compatible = "ldo9"; +				ldo9 {  					regulator-name = "+2.85vs_ldo9,vdd_ddr_rx";  					regulator-min-microvolt = <2850000>;  					regulator-max-microvolt = <2850000>;  					regulator-always-on;  				}; -				regulator@14 { -					reg = <14>; -					regulator-compatible = "ldo_rtc"; +				ldo_rtc {  					regulator-name = "+3.3vs_rtc";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>; diff --git a/arch/arm/boot/dts/tegra20-seaboard.dts b/arch/arm/boot/dts/tegra20-seaboard.dts index a20d4ff3fb3..e58a0e60f71 100644 --- a/arch/arm/boot/dts/tegra20-seaboard.dts +++ b/arch/arm/boot/dts/tegra20-seaboard.dts @@ -395,37 +395,26 @@  			vinldo9-supply = <&sm2_reg>;  			regulators { -				#address-cells = <1>; -				#size-cells = <0>; - -				sys_reg: regulator@0 { -					reg = <0>; -					regulator-compatible = "sys"; +				sys_reg: sys {  					regulator-name = "vdd_sys";  					regulator-always-on;  				}; -				regulator@1 { -					reg = <1>; -					regulator-compatible = "sm0"; +				sm0 {  					regulator-name = "vdd_sm0,vdd_core";  					regulator-min-microvolt = <1300000>;  					regulator-max-microvolt = <1300000>;  					regulator-always-on;  				}; -				regulator@2 { -					reg = <2>; -					regulator-compatible = "sm1"; +				sm1 {  					regulator-name = "vdd_sm1,vdd_cpu";  					regulator-min-microvolt = <1125000>;  					regulator-max-microvolt = <1125000>;  					regulator-always-on;  				}; -				sm2_reg: regulator@3 { -					reg = <3>; -					regulator-compatible = "sm2"; +				sm2_reg: sm2 {  					regulator-name = "vdd_sm2,vin_ldo*";  					regulator-min-microvolt = <3700000>;  					regulator-max-microvolt = <3700000>; @@ -434,86 +423,66 @@  				/* LDO0 is not connected to anything */ -				regulator@5 { -					reg = <5>; -					regulator-compatible = "ldo1"; +				ldo1 {  					regulator-name = "vdd_ldo1,avdd_pll*";  					regulator-min-microvolt = <1100000>;  					regulator-max-microvolt = <1100000>;  					regulator-always-on;  				}; -				regulator@6 { -					reg = <6>; -					regulator-compatible = "ldo2"; +				ldo2 {  					regulator-name = "vdd_ldo2,vdd_rtc";  					regulator-min-microvolt = <1200000>;  					regulator-max-microvolt = <1200000>;  				}; -				regulator@7 { -					reg = <7>; -					regulator-compatible = "ldo3"; +				ldo3 {  					regulator-name = "vdd_ldo3,avdd_usb*";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  					regulator-always-on;  				}; -				regulator@8 { -					reg = <8>; -					regulator-compatible = "ldo4"; +				ldo4 {  					regulator-name = "vdd_ldo4,avdd_osc,vddio_sys";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  					regulator-always-on;  				}; -				regulator@9 { -					reg = <9>; -					regulator-compatible = "ldo5"; +				ldo5 {  					regulator-name = "vdd_ldo5,vcore_mmc";  					regulator-min-microvolt = <2850000>;  					regulator-max-microvolt = <2850000>;  					regulator-always-on;  				}; -				regulator@10 { -					reg = <10>; -					regulator-compatible = "ldo6"; +				ldo6 {  					regulator-name = "vdd_ldo6,avdd_vdac,vddio_vi,vddio_cam";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  				}; -				regulator@11 { -					reg = <11>; -					regulator-compatible = "ldo7"; +				ldo7 {  					regulator-name = "vdd_ldo7,avdd_hdmi,vdd_fuse";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  				}; -				regulator@12 { -					reg = <12>; -					regulator-compatible = "ldo8"; +				ldo8 {  					regulator-name = "vdd_ldo8,avdd_hdmi_pll";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  				}; -				regulator@13 { -					reg = <13>; -					regulator-compatible = "ldo9"; +				ldo9 {  					regulator-name = "vdd_ldo9,avdd_2v85,vdd_ddr_rx";  					regulator-min-microvolt = <2850000>;  					regulator-max-microvolt = <2850000>;  					regulator-always-on;  				}; -				regulator@14 { -					reg = <14>; -					regulator-compatible = "ldo_rtc"; +				ldo_rtc {  					regulator-name = "vdd_rtc_out,vdd_cell";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>; diff --git a/arch/arm/boot/dts/tegra20-tamonten.dtsi b/arch/arm/boot/dts/tegra20-tamonten.dtsi index f18cec9f6a7..5b3d8b157b3 100644 --- a/arch/arm/boot/dts/tegra20-tamonten.dtsi +++ b/arch/arm/boot/dts/tegra20-tamonten.dtsi @@ -271,97 +271,72 @@  			vinldo9-supply = <&sm2_reg>;  			regulators { -				#address-cells = <1>; -				#size-cells = <0>; - -				sys_reg: regulator@0 { -					reg = <0>; -					regulator-compatible = "sys"; +				sys_reg: sys {  					regulator-name = "vdd_sys";  					regulator-always-on;  				}; -				regulator@1 { -					reg = <1>; -					regulator-compatible = "sm0"; +				sm0 {  					regulator-name = "vdd_sys_sm0,vdd_core";  					regulator-min-microvolt = <1200000>;  					regulator-max-microvolt = <1200000>;  					regulator-always-on;  				}; -				regulator@2 { -					reg = <2>; -					regulator-compatible = "sm1"; +				sm1 {  					regulator-name = "vdd_sys_sm1,vdd_cpu";  					regulator-min-microvolt = <1000000>;  					regulator-max-microvolt = <1000000>;  					regulator-always-on;  				}; -				sm2_reg: regulator@3 { -					reg = <3>; -					regulator-compatible = "sm2"; +				sm2_reg: sm2 {  					regulator-name = "vdd_sys_sm2,vin_ldo*";  					regulator-min-microvolt = <3700000>;  					regulator-max-microvolt = <3700000>;  					regulator-always-on;  				}; -				regulator@4 { -					reg = <4>; -					regulator-compatible = "ldo0"; +				ldo0 {  					regulator-name = "vdd_ldo0,vddio_pex_clk";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  				}; -				regulator@5 { -					reg = <5>; -					regulator-compatible = "ldo1"; +				ldo1 {  					regulator-name = "vdd_ldo1,avdd_pll*";  					regulator-min-microvolt = <1100000>;  					regulator-max-microvolt = <1100000>;  					regulator-always-on;  				}; -				regulator@6 { -					reg = <6>; -					regulator-compatible = "ldo2"; +				ldo2 {  					regulator-name = "vdd_ldo2,vdd_rtc";  					regulator-min-microvolt = <1200000>;  					regulator-max-microvolt = <1200000>;  				}; -				regulator@7 { -					reg = <7>; -					regulator-compatible = "ldo3"; +				ldo3 {  					regulator-name = "vdd_ldo3,avdd_usb*";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  					regulator-always-on;  				}; -				regulator@8 { -					reg = <8>; -					regulator-compatible = "ldo4"; +				ldo4 {  					regulator-name = "vdd_ldo4,avdd_osc,vddio_sys";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  					regulator-always-on;  				}; -				regulator@9 { -					reg = <9>; -					regulator-compatible = "ldo5"; +				ldo5 {  					regulator-name = "vdd_ldo5,vcore_mmc";  					regulator-min-microvolt = <2850000>;  					regulator-max-microvolt = <2850000>;  				}; -				regulator@10 { -					reg = <10>; -					regulator-compatible = "ldo6"; +				ldo6 {  					regulator-name = "vdd_ldo6,avdd_vdac";  					/*  					 * According to the Tegra 2 Automotive @@ -373,25 +348,19 @@  					regulator-max-microvolt = <2850000>;  				}; -				regulator@11 { -					reg = <11>; -					regulator-compatible = "ldo7"; +				ldo7 {  					regulator-name = "vdd_ldo7,avdd_hdmi";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  				}; -				regulator@12 { -					reg = <12>; -					regulator-compatible = "ldo8"; +				ldo8 {  					regulator-name = "vdd_ldo8,avdd_hdmi_pll";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  				}; -				regulator@13 { -					reg = <13>; -					regulator-compatible = "ldo9"; +				ldo9 {  					regulator-name = "vdd_ldo9,vdd_ddr_rx,avdd_cam";  					/*  					 * According to the Tegra 2 Automotive @@ -404,9 +373,7 @@  					regulator-always-on;  				}; -				regulator@14 { -					reg = <14>; -					regulator-compatible = "ldo_rtc"; +				ldo_rtc {  					regulator-name = "vdd_rtc_out";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>; diff --git a/arch/arm/boot/dts/tegra20-ventana.dts b/arch/arm/boot/dts/tegra20-ventana.dts index 3e5952fcfbc..86854f1abd5 100644 --- a/arch/arm/boot/dts/tegra20-ventana.dts +++ b/arch/arm/boot/dts/tegra20-ventana.dts @@ -311,37 +311,26 @@  			vinldo9-supply = <&sm2_reg>;  			regulators { -				#address-cells = <1>; -				#size-cells = <0>; - -				sys_reg: regulator@0 { -					reg = <0>; -					regulator-compatible = "sys"; +				sys_reg: sys {  					regulator-name = "vdd_sys";  					regulator-always-on;  				}; -				regulator@1 { -					reg = <1>; -					regulator-compatible = "sm0"; +				sm0 {  					regulator-name = "vdd_sm0,vdd_core";  					regulator-min-microvolt = <1200000>;  					regulator-max-microvolt = <1200000>;  					regulator-always-on;  				}; -				regulator@2 { -					reg = <2>; -					regulator-compatible = "sm1"; +				sm1 {  					regulator-name = "vdd_sm1,vdd_cpu";  					regulator-min-microvolt = <1000000>;  					regulator-max-microvolt = <1000000>;  					regulator-always-on;  				}; -				sm2_reg: regulator@3 { -					reg = <3>; -					regulator-compatible = "sm2"; +				sm2_reg: sm2 {  					regulator-name = "vdd_sm2,vin_ldo*";  					regulator-min-microvolt = <3700000>;  					regulator-max-microvolt = <3700000>; @@ -350,86 +339,66 @@  				/* LDO0 is not connected to anything */ -				regulator@5 { -					reg = <5>; -					regulator-compatible = "ldo1"; +				ldo1 {  					regulator-name = "vdd_ldo1,avdd_pll*";  					regulator-min-microvolt = <1100000>;  					regulator-max-microvolt = <1100000>;  					regulator-always-on;  				}; -				regulator@6 { -					reg = <6>; -					regulator-compatible = "ldo2"; +				ldo2 {  					regulator-name = "vdd_ldo2,vdd_rtc";  					regulator-min-microvolt = <1200000>;  					regulator-max-microvolt = <1200000>;  				}; -				regulator@7 { -					reg = <7>; -					regulator-compatible = "ldo3"; +				ldo3 {  					regulator-name = "vdd_ldo3,avdd_usb*";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  					regulator-always-on;  				}; -				regulator@8 { -					reg = <8>; -					regulator-compatible = "ldo4"; +				ldo4 {  					regulator-name = "vdd_ldo4,avdd_osc,vddio_sys";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  					regulator-always-on;  				}; -				regulator@9 { -					reg = <9>; -					regulator-compatible = "ldo5"; +				ldo5 {  					regulator-name = "vdd_ldo5,vcore_mmc";  					regulator-min-microvolt = <2850000>;  					regulator-max-microvolt = <2850000>;  					regulator-always-on;  				}; -				regulator@10 { -					reg = <10>; -					regulator-compatible = "ldo6"; +				ldo6 {  					regulator-name = "vdd_ldo6,avdd_vdac";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  				}; -				regulator@11 { -					reg = <11>; -					regulator-compatible = "ldo7"; +				ldo7 {  					regulator-name = "vdd_ldo7,avdd_hdmi,vdd_fuse";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  				}; -				regulator@12 { -					reg = <12>; -					regulator-compatible = "ldo8"; +				ldo8 {  					regulator-name = "vdd_ldo8,avdd_hdmi_pll";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  				}; -				regulator@13 { -					reg = <13>; -					regulator-compatible = "ldo9"; +				ldo9 {  					regulator-name = "vdd_ldo9,avdd_2v85,vdd_ddr_rx";  					regulator-min-microvolt = <2850000>;  					regulator-max-microvolt = <2850000>;  					regulator-always-on;  				}; -				regulator@14 { -					reg = <14>; -					regulator-compatible = "ldo_rtc"; +				ldo_rtc {  					regulator-name = "vdd_rtc_out,vdd_cell";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>; diff --git a/arch/arm/boot/dts/tegra20-whistler.dts b/arch/arm/boot/dts/tegra20-whistler.dts index c636d002d6d..94a71c91beb 100644 --- a/arch/arm/boot/dts/tegra20-whistler.dts +++ b/arch/arm/boot/dts/tegra20-whistler.dts @@ -295,243 +295,182 @@  			in20-supply = <&mbatt_reg>;  			regulators { -				#address-cells = <1>; -				#size-cells = <0>; - -				mbatt_reg: regulator@0 { -					reg = <0>; -					regulator-compatible = "mbatt"; +				mbatt_reg: mbatt {  					regulator-name = "vbat_pmu";  					regulator-always-on;  				}; -				regulator@1 { -					reg = <1>; -					regulator-compatible = "sd1"; +				sd1 {  					regulator-name = "nvvdd_sv1,vdd_cpu_pmu";  					regulator-min-microvolt = <1000000>;  					regulator-max-microvolt = <1000000>;  					regulator-always-on;  				}; -				regulator@2 { -					reg = <2>; -					regulator-compatible = "sd2"; +				sd2 {  					regulator-name = "nvvdd_sv2,vdd_core";  					regulator-min-microvolt = <1200000>;  					regulator-max-microvolt = <1200000>;  					regulator-always-on;  				}; -				nvvdd_sv3_reg: regulator@3 { -					reg = <3>; -					regulator-compatible = "sd3"; +				nvvdd_sv3_reg: sd3 {  					regulator-name = "nvvdd_sv3";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  					regulator-always-on;  				}; -				regulator@4 { -					reg = <4>; -					regulator-compatible = "ldo1"; +				ldo1 {  					regulator-name = "nvvdd_ldo1,vddio_rx_ddr,vcore_acc";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  					regulator-always-on;  				}; -				regulator@5 { -					reg = <5>; -					regulator-compatible = "ldo2"; +				ldo2 {  					regulator-name = "nvvdd_ldo2,avdd_pll*";  					regulator-min-microvolt = <1100000>;  					regulator-max-microvolt = <1100000>;  					regulator-always-on;  				}; -				regulator@6 { -					reg = <6>; -					regulator-compatible = "ldo3"; +				ldo3 {  					regulator-name = "nvvdd_ldo3,vcom_1v8b";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  					regulator-always-on;  				}; -				regulator@7 { -					reg = <7>; -					regulator-compatible = "ldo4"; +				ldo4 {  					regulator-name = "nvvdd_ldo4,avdd_usb*";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  					regulator-always-on;  				}; -				regulator@8 { -					reg = <8>; -					regulator-compatible = "ldo5"; +				ldo5 {  					regulator-name = "nvvdd_ldo5,vcore_mmc,avdd_lcd1,vddio_1wire";  					regulator-min-microvolt = <2800000>;  					regulator-max-microvolt = <2800000>;  					regulator-always-on;  				}; -				regulator@9 { -					reg = <9>; -					regulator-compatible = "ldo6"; +				ldo6 {  					regulator-name = "nvvdd_ldo6,avdd_hdmi_pll";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  				}; -				regulator@10 { -					reg = <10>; -					regulator-compatible = "ldo7"; +				ldo7 {  					regulator-name = "nvvdd_ldo7,avddio_audio";  					regulator-min-microvolt = <2800000>;  					regulator-max-microvolt = <2800000>;  					regulator-always-on;  				}; -				regulator@11 { -					reg = <11>; -					regulator-compatible = "ldo8"; +				ldo8 {  					regulator-name = "nvvdd_ldo8,vcom_3v0,vcore_cmps";  					regulator-min-microvolt = <3000000>;  					regulator-max-microvolt = <3000000>;  				}; -				regulator@12 { -					reg = <12>; -					regulator-compatible = "ldo9"; +				ldo9 {  					regulator-name = "nvvdd_ldo9,avdd_cam*";  					regulator-min-microvolt = <2800000>;  					regulator-max-microvolt = <2800000>;  				}; -				regulator@13 { -					reg = <13>; -					regulator-compatible = "ldo10"; +				ldo10 {  					regulator-name = "nvvdd_ldo10,avdd_usb_ic_3v0";  					regulator-min-microvolt = <3000000>;  					regulator-max-microvolt = <3000000>;  					regulator-always-on;  				}; -				regulator@14 { -					reg = <14>; -					regulator-compatible = "ldo11"; +				ldo11 {  					regulator-name = "nvvdd_ldo11,vddio_pex_clk,vcom_33,avdd_hdmi";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  				}; -				regulator@15 { -					reg = <15>; -					regulator-compatible = "ldo12"; +				ldo12 {  					regulator-name = "nvvdd_ldo12,vddio_sdio";  					regulator-min-microvolt = <2800000>;  					regulator-max-microvolt = <2800000>;  					regulator-always-on;  				}; -				regulator@16 { -					reg = <16>; -					regulator-compatible = "ldo13"; +				ldo13 {  					regulator-name = "nvvdd_ldo13,vcore_phtn,vdd_af";  					regulator-min-microvolt = <2800000>;  					regulator-max-microvolt = <2800000>;  				}; -				regulator@17 { -					reg = <17>; -					regulator-compatible = "ldo14"; +				ldo14 {  					regulator-name = "nvvdd_ldo14,avdd_vdac";  					regulator-min-microvolt = <2800000>;  					regulator-max-microvolt = <2800000>;  				}; -				regulator@18 { -					reg = <18>; -					regulator-compatible = "ldo15"; +				ldo15 {  					regulator-name = "nvvdd_ldo15,vcore_temp,vddio_hdcp";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  				}; -				regulator@19 { -					reg = <19>; -					regulator-compatible = "ldo16"; +				ldo16 {  					regulator-name = "nvvdd_ldo16,vdd_dbrtr";  					regulator-min-microvolt = <1300000>;  					regulator-max-microvolt = <1300000>;  				}; -				regulator@20 { -					reg = <20>; -					regulator-compatible = "ldo17"; +				ldo17 {  					regulator-name = "nvvdd_ldo17,vddio_mipi";  					regulator-min-microvolt = <1200000>;  					regulator-max-microvolt = <1200000>;  				}; -				regulator@21 { -					reg = <21>; -					regulator-compatible = "ldo18"; +				ldo18 {  					regulator-name = "nvvdd_ldo18,vddio_vi,vcore_cam*";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  				}; -				regulator@22 { -					reg = <22>; -					regulator-compatible = "ldo19"; +				ldo19 {  					regulator-name = "nvvdd_ldo19,avdd_lcd2,vddio_lx";  					regulator-min-microvolt = <2800000>;  					regulator-max-microvolt = <2800000>;  				}; -				regulator@23 { -					reg = <23>; -					regulator-compatible = "ldo20"; +				ldo20 {  					regulator-name = "nvvdd_ldo20,vddio_ddr_1v2,vddio_hsic,vcom_1v2";  					regulator-min-microvolt = <1200000>;  					regulator-max-microvolt = <1200000>;  					regulator-always-on;  				}; -				regulator@24 { -					reg = <24>; -					regulator-compatible = "out5v"; +				out5v {  					regulator-name = "usb0_vbus_reg";  				}; -				regulator@25 { -					reg = <25>; -					regulator-compatible = "out33v"; +				out33v {  					regulator-name = "pmu_out3v3";  				}; -				regulator@26 { -					reg = <26>; -					regulator-compatible = "bbat"; +				bbat {  					regulator-name = "pmu_bbat";  					regulator-min-microvolt = <2400000>;  					regulator-max-microvolt = <2400000>;  					regulator-always-on;  				}; -				regulator@27 { -					reg = <27>; -					regulator-compatible = "sdby"; +				sdby {  					regulator-name = "vdd_aon";  					regulator-always-on;  				}; -				regulator@28 { -					reg = <28>; -					regulator-compatible = "vrtc"; +				vrtc {  					regulator-name = "vrtc,pmu_vccadc";  					regulator-always-on;  				}; diff --git a/arch/arm/boot/dts/tegra30-cardhu.dtsi b/arch/arm/boot/dts/tegra30-cardhu.dtsi index d10c9c5a360..b1271a89432 100644 --- a/arch/arm/boot/dts/tegra30-cardhu.dtsi +++ b/arch/arm/boot/dts/tegra30-cardhu.dtsi @@ -171,56 +171,41 @@  			vccio-supply = <&vdd_ac_bat_reg>;  			regulators { -				#address-cells = <1>; -				#size-cells = <0>; - -				vdd1_reg: regulator@0 { -					reg = <0>; -					regulator-compatible = "vdd1"; +				vdd1_reg: vdd1 {  					regulator-name = "vddio_ddr_1v2";  					regulator-min-microvolt = <1200000>;  					regulator-max-microvolt = <1200000>;  					regulator-always-on;  				}; -				vdd2_reg: regulator@1 { -					reg = <1>; -					regulator-compatible = "vdd2"; +				vdd2_reg: vdd2 {  					regulator-name = "vdd_1v5_gen";  					regulator-min-microvolt = <1500000>;  					regulator-max-microvolt = <1500000>;  					regulator-always-on;  				}; -				vddctrl_reg: regulator@2 { -					reg = <2>; -					regulator-compatible = "vddctrl"; +				vddctrl_reg: vddctrl {  					regulator-name = "vdd_cpu,vdd_sys";  					regulator-min-microvolt = <1000000>;  					regulator-max-microvolt = <1000000>;  					regulator-always-on;  				}; -				vio_reg: regulator@3 { -					reg = <3>; -					regulator-compatible = "vio"; +				vio_reg: vio {  					regulator-name = "vdd_1v8_gen";  					regulator-min-microvolt = <1800000>;  					regulator-max-microvolt = <1800000>;  					regulator-always-on;  				}; -				ldo1_reg: regulator@4 { -					reg = <4>; -					regulator-compatible = "ldo1"; +				ldo1_reg: ldo1 {  					regulator-name = "vdd_pexa,vdd_pexb";  					regulator-min-microvolt = <1050000>;  					regulator-max-microvolt = <1050000>;  				}; -				ldo2_reg: regulator@5 { -					reg = <5>; -					regulator-compatible = "ldo2"; +				ldo2_reg: ldo2 {  					regulator-name = "vdd_sata,avdd_plle";  					regulator-min-microvolt = <1050000>;  					regulator-max-microvolt = <1050000>; @@ -228,44 +213,34 @@  				/* LDO3 is not connected to anything */ -				ldo4_reg: regulator@7 { -					reg = <7>; -					regulator-compatible = "ldo4"; +				ldo4_reg: ldo4 {  					regulator-name = "vdd_rtc";  					regulator-min-microvolt = <1200000>;  					regulator-max-microvolt = <1200000>;  					regulator-always-on;  				}; -				ldo5_reg: regulator@8 { -					reg = <8>; -					regulator-compatible = "ldo5"; +				ldo5_reg: ldo5 {  					regulator-name = "vddio_sdmmc,avdd_vdac";  					regulator-min-microvolt = <3300000>;  					regulator-max-microvolt = <3300000>;  					regulator-always-on;  				}; -				ldo6_reg: regulator@9 { -					reg = <9>; -					regulator-compatible = "ldo6"; +				ldo6_reg: ldo6 {  					regulator-name = "avdd_dsi_csi,pwrdet_mipi";  					regulator-min-microvolt = <1200000>;  					regulator-max-microvolt = <1200000>;  				}; -				ldo7_reg: regulator@10 { -					reg = <10>; -					regulator-compatible = "ldo7"; +				ldo7_reg: ldo7 {  					regulator-name = "vdd_pllm,x,u,a_p_c_s";  					regulator-min-microvolt = <1200000>;  					regulator-max-microvolt = <1200000>;  					regulator-always-on;  				}; -				ldo8_reg: regulator@11 { -					reg = <11>; -					regulator-compatible = "ldo8"; +				ldo8_reg: ldo8 {  					regulator-name = "vdd_ddr_hs";  					regulator-min-microvolt = <1000000>;  					regulator-max-microvolt = <1000000>; diff --git a/arch/arm/boot/dts/twl4030.dtsi b/arch/arm/boot/dts/twl4030.dtsi index ff000172c93..63411b03693 100644 --- a/arch/arm/boot/dts/twl4030.dtsi +++ b/arch/arm/boot/dts/twl4030.dtsi @@ -37,6 +37,24 @@  		regulator-max-microvolt = <3150000>;  	}; +	vusb1v5: regulator-vusb1v5 { +		compatible = "ti,twl4030-vusb1v5"; +	}; + +	vusb1v8: regulator-vusb1v8 { +		compatible = "ti,twl4030-vusb1v8"; +	}; + +	vusb3v1: regulator-vusb3v1 { +		compatible = "ti,twl4030-vusb3v1"; +	}; + +	vsim: regulator-vsim { +		compatible = "ti,twl4030-vsim"; +		regulator-min-microvolt = <1800000>; +		regulator-max-microvolt = <3000000>; +	}; +  	twl_gpio: gpio {  		compatible = "ti,twl4030-gpio";  		gpio-controller; @@ -44,4 +62,13 @@  		interrupt-controller;  		#interrupt-cells = <1>;  	}; + +	twl4030-usb { +		compatible = "ti,twl4030-usb"; +		interrupts = <10>, <4>; +		usb1v5-supply = <&vusb1v5>; +		usb1v8-supply = <&vusb1v8>; +		usb3v1-supply = <&vusb3v1>; +		usb_mode = <1>; +	};  }; diff --git a/arch/arm/boot/dts/twl6030.dtsi b/arch/arm/boot/dts/twl6030.dtsi index 123e2c40218..9996cfc5ee8 100644 --- a/arch/arm/boot/dts/twl6030.dtsi +++ b/arch/arm/boot/dts/twl6030.dtsi @@ -86,4 +86,9 @@  	clk32kg: regulator-clk32kg {  		compatible = "ti,twl6030-clk32kg";  	}; + +	twl_usb_comparator: usb-comparator { +		compatible = "ti,twl6030-usb"; +		interrupts = <4>, <10>; +	};  }; diff --git a/arch/arm/boot/dts/zynq-ep107.dts b/arch/arm/boot/dts/zynq-ep107.dts index 37ca192fb19..574bc044f57 100644 --- a/arch/arm/boot/dts/zynq-ep107.dts +++ b/arch/arm/boot/dts/zynq-ep107.dts @@ -36,16 +36,27 @@  		ranges;  		intc: interrupt-controller@f8f01000 { +			compatible = "arm,cortex-a9-gic"; +			#interrupt-cells = <3>; +			#address-cells = <1>;  			interrupt-controller; -			compatible = "arm,gic"; -			reg = <0xF8F01000 0x1000>; -			#interrupt-cells = <2>; +			reg = <0xF8F01000 0x1000>, +			      <0xF8F00100 0x100>; +		}; + +		L2: cache-controller { +			compatible = "arm,pl310-cache"; +			reg = <0xF8F02000 0x1000>; +			arm,data-latency = <2 3 2>; +			arm,tag-latency = <2 3 2>; +			cache-unified; +			cache-level = <2>;  		};  		uart0: uart@e0000000 {  			compatible = "xlnx,xuartps";  			reg = <0xE0000000 0x1000>; -			interrupts = <59 0>; +			interrupts = <0 27 4>;  			clock = <50000000>;  		};  	}; diff --git a/arch/arm/configs/imx_v4_v5_defconfig b/arch/arm/configs/imx_v4_v5_defconfig index 78ed575feb1..f71302c3ac3 100644 --- a/arch/arm/configs/imx_v4_v5_defconfig +++ b/arch/arm/configs/imx_v4_v5_defconfig @@ -18,7 +18,9 @@ CONFIG_MODULE_UNLOAD=y  # CONFIG_IOSCHED_DEADLINE is not set  # CONFIG_IOSCHED_CFQ is not set  CONFIG_ARCH_MXC=y -CONFIG_ARCH_IMX_V4_V5=y +CONFIG_ARCH_MULTI_V4T=y +CONFIG_ARCH_MULTI_V5=y +# CONFIG_ARCH_MULTI_V7 is not set  CONFIG_ARCH_MX1ADS=y  CONFIG_MACH_SCB9328=y  CONFIG_MACH_APF9328=y diff --git a/arch/arm/configs/imx_v6_v7_defconfig b/arch/arm/configs/imx_v6_v7_defconfig index 394ded624e3..44f117aab52 100644 --- a/arch/arm/configs/imx_v6_v7_defconfig +++ b/arch/arm/configs/imx_v6_v7_defconfig @@ -17,6 +17,8 @@ CONFIG_MODVERSIONS=y  CONFIG_MODULE_SRCVERSION_ALL=y  # CONFIG_BLK_DEV_BSG is not set  CONFIG_ARCH_MXC=y +CONFIG_ARCH_MULTI_V6=y +CONFIG_ARCH_MULTI_V7=y  CONFIG_MACH_MX31LILLY=y  CONFIG_MACH_MX31LITE=y  CONFIG_MACH_PCM037=y diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h index 23004847bb0..8ea02ac3ec1 100644 --- a/arch/arm/include/asm/dma-mapping.h +++ b/arch/arm/include/asm/dma-mapping.h @@ -211,13 +211,6 @@ static inline void dma_free_writecombine(struct device *dev, size_t size,  extern void __init init_dma_coherent_pool_size(unsigned long size);  /* - * This can be called during boot to increase the size of the consistent - * DMA region above it's default value of 2MB. It must be called before the - * memory allocator is initialised, i.e. before any core_initcall. - */ -static inline void init_consistent_dma_size(unsigned long size) { } - -/*   * For SA-1111, IXP425, and ADI systems  the dma-mapping functions are "magic"   * and utilize bounce buffers as needed to work around limited DMA windows.   * diff --git a/arch/arm/plat-mxc/include/mach/debug-macro.S b/arch/arm/include/debug/imx.S index 761e45f9456..0b65d792f66 100644 --- a/arch/arm/plat-mxc/include/mach/debug-macro.S +++ b/arch/arm/include/debug/imx.S @@ -10,27 +10,38 @@   * published by the Free Software Foundation.   *   */ -#include <mach/hardware.h> -  #ifdef CONFIG_DEBUG_IMX1_UART -#define UART_PADDR	MX1_UART1_BASE_ADDR +#define UART_PADDR	0x00206000  #elif defined (CONFIG_DEBUG_IMX25_UART) -#define UART_PADDR	MX25_UART1_BASE_ADDR +#define UART_PADDR	0x43f90000  #elif defined (CONFIG_DEBUG_IMX21_IMX27_UART) -#define UART_PADDR	MX2x_UART1_BASE_ADDR +#define UART_PADDR	0x1000a000  #elif defined (CONFIG_DEBUG_IMX31_IMX35_UART) -#define UART_PADDR	MX3x_UART1_BASE_ADDR +#define UART_PADDR	0x43f90000  #elif defined (CONFIG_DEBUG_IMX51_UART) -#define UART_PADDR	MX51_UART1_BASE_ADDR +#define UART_PADDR	0x73fbc000  #elif defined (CONFIG_DEBUG_IMX50_IMX53_UART) -#define UART_PADDR	MX53_UART1_BASE_ADDR +#define UART_PADDR	0x53fbc000  #elif defined (CONFIG_DEBUG_IMX6Q_UART2) -#define UART_PADDR	MX6Q_UART2_BASE_ADDR +#define UART_PADDR	0x021e8000  #elif defined (CONFIG_DEBUG_IMX6Q_UART4) -#define UART_PADDR	MX6Q_UART4_BASE_ADDR +#define UART_PADDR	0x021f0000  #endif -#define UART_VADDR	IMX_IO_ADDRESS(UART_PADDR) +/* + * FIXME: This is a copy of IMX_IO_P2V in hardware.h, and needs to + * stay sync with that.  It's hard to maintain, and should be fixed + * globally for multi-platform build to use a fixed virtual address + * for low-level debug uart port across platforms. + */ +#define IMX_IO_P2V(x)	(						\ +			(((x) & 0x80000000) >> 7) |			\ +			(0xf4000000 +					\ +			(((x) & 0x50000000) >> 6) +			\ +			(((x) & 0x0b000000) >> 4) +			\ +			(((x) & 0x000fffff)))) + +#define UART_VADDR	IMX_IO_P2V(UART_PADDR)  		.macro	addruart, rp, rv, tmp  		ldr	\rp, =UART_PADDR	@ physical diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c index c754b75ffc2..45d753d473f 100644 --- a/arch/arm/mach-at91/at91sam9g45.c +++ b/arch/arm/mach-at91/at91sam9g45.c @@ -351,7 +351,6 @@ static struct at91_gpio_bank at91sam9g45_gpio[] __initdata = {  static void __init at91sam9g45_map_io(void)  {  	at91_init_sram(0, AT91SAM9G45_SRAM_BASE, AT91SAM9G45_SRAM_SIZE); -	init_consistent_dma_size(SZ_4M);  }  static void __init at91sam9g45_ioremap_registers(void) diff --git a/arch/arm/mach-at91/include/mach/atmel-mci.h b/arch/arm/mach-at91/include/mach/atmel-mci.h index cd580a12e90..3069e413557 100644 --- a/arch/arm/mach-at91/include/mach/atmel-mci.h +++ b/arch/arm/mach-at91/include/mach/atmel-mci.h @@ -14,11 +14,4 @@ struct mci_dma_data {  #define	slave_data_ptr(s)	(&(s)->sdata)  #define find_slave_dev(s)	((s)->sdata.dma_dev) -#define	setup_dma_addr(s, t, r)	do {		\ -	if (s) {				\ -		(s)->sdata.tx_reg = (t);	\ -		(s)->sdata.rx_reg = (r);	\ -	}					\ -} while (0) -  #endif /* __MACH_ATMEL_MCI_H */ diff --git a/arch/arm/mach-bcm2835/Makefile.boot b/arch/arm/mach-bcm2835/Makefile.boot index 2d30e17f5b6..b3271754e9f 100644 --- a/arch/arm/mach-bcm2835/Makefile.boot +++ b/arch/arm/mach-bcm2835/Makefile.boot @@ -1,3 +1 @@ -   zreladdr-y := 0x00008000 -params_phys-y := 0x00000100 -initrd_phys-y := 0x00800000 +zreladdr-y := 0x00008000 diff --git a/arch/arm/mach-bcm2835/bcm2835.c b/arch/arm/mach-bcm2835/bcm2835.c index f6fea493357..53e3842c933 100644 --- a/arch/arm/mach-bcm2835/bcm2835.c +++ b/arch/arm/mach-bcm2835/bcm2835.c @@ -30,12 +30,12 @@ static struct map_desc io_map __initdata = {  	.type = MT_DEVICE  }; -void __init bcm2835_map_io(void) +static void __init bcm2835_map_io(void)  {  	iotable_init(&io_map, 1);  } -void __init bcm2835_init(void) +static void __init bcm2835_init(void)  {  	int ret; diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c b/arch/arm/mach-davinci/board-dm646x-evm.c index 1dbf85beed1..9211e8800c7 100644 --- a/arch/arm/mach-davinci/board-dm646x-evm.c +++ b/arch/arm/mach-davinci/board-dm646x-evm.c @@ -194,7 +194,7 @@ static int evm_led_setup(struct i2c_client *client, int gpio,  	while (ngpio--) {  		leds->gpio = gpio++;  		leds++; -	}; +	}  	evm_led_dev = platform_device_alloc("leds-gpio", 0);  	platform_device_add_data(evm_led_dev, &evm_led_data, diff --git a/arch/arm/mach-davinci/common.c b/arch/arm/mach-davinci/common.c index 64b0f65a863..a794f6d9d44 100644 --- a/arch/arm/mach-davinci/common.c +++ b/arch/arm/mach-davinci/common.c @@ -87,8 +87,6 @@ void __init davinci_common_init(struct davinci_soc_info *soc_info)  		iotable_init(davinci_soc_info.io_desc,  				davinci_soc_info.io_desc_num); -	init_consistent_dma_size(14 << 20); -  	/*  	 * Normally devicemaps_init() would flush caches and tlb after  	 * mdesc->map_io(), but we must also do it here because of the CPU diff --git a/arch/arm/mach-davinci/usb.c b/arch/arm/mach-davinci/usb.c index f77b95336e2..34509ffba22 100644 --- a/arch/arm/mach-davinci/usb.c +++ b/arch/arm/mach-davinci/usb.c @@ -42,14 +42,8 @@ static struct musb_hdrc_config musb_config = {  };  static struct musb_hdrc_platform_data usb_data = { -#if defined(CONFIG_USB_MUSB_OTG)  	/* OTG requires a Mini-AB connector */  	.mode           = MUSB_OTG, -#elif defined(CONFIG_USB_MUSB_PERIPHERAL) -	.mode           = MUSB_PERIPHERAL, -#elif defined(CONFIG_USB_MUSB_HOST) -	.mode           = MUSB_HOST, -#endif  	.clock		= "usb",  	.config		= &musb_config,  }; diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig index da55107033d..69d10373a41 100644 --- a/arch/arm/mach-exynos/Kconfig +++ b/arch/arm/mach-exynos/Kconfig @@ -98,11 +98,6 @@ config EXYNOS_DEV_SYSMMU  	help  	  Common setup code for SYSTEM MMU in EXYNOS platforms -config EXYNOS4_DEV_DWMCI -	bool -	help -	  Compile in platform device definitions for DWMCI -  config EXYNOS4_DEV_USB_OHCI  	bool  	help diff --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefile index 9b58024f7d4..0c74bdc6b69 100644 --- a/arch/arm/mach-exynos/Makefile +++ b/arch/arm/mach-exynos/Makefile @@ -50,7 +50,6 @@ obj-$(CONFIG_MACH_EXYNOS5_DT)		+= mach-exynos5-dt.o  obj-y					+= dev-uart.o  obj-$(CONFIG_ARCH_EXYNOS4)		+= dev-audio.o  obj-$(CONFIG_EXYNOS4_DEV_AHCI)		+= dev-ahci.o -obj-$(CONFIG_EXYNOS4_DEV_DWMCI)		+= dev-dwmci.o  obj-$(CONFIG_EXYNOS_DEV_DMA)		+= dma.o  obj-$(CONFIG_EXYNOS4_DEV_USB_OHCI)	+= dev-ohci.o  obj-$(CONFIG_EXYNOS_DEV_DRM)		+= dev-drm.o diff --git a/arch/arm/mach-exynos/clock-exynos4.c b/arch/arm/mach-exynos/clock-exynos4.c index 6a45c9a9abe..fa8a13405c9 100644 --- a/arch/arm/mach-exynos/clock-exynos4.c +++ b/arch/arm/mach-exynos/clock-exynos4.c @@ -613,11 +613,6 @@ static struct clk exynos4_init_clocks_off[] = {  		.ctrlbit	= (1 << 18),  	}, {  		.name		= "iis", -		.devname	= "samsung-i2s.0", -		.enable		= exynos4_clk_ip_peril_ctrl, -		.ctrlbit	= (1 << 19), -	}, { -		.name		= "iis",  		.devname	= "samsung-i2s.1",  		.enable		= exynos4_clk_ip_peril_ctrl,  		.ctrlbit	= (1 << 20), diff --git a/arch/arm/mach-exynos/clock-exynos5.c b/arch/arm/mach-exynos/clock-exynos5.c index c44ca1ee1b8..4478757b930 100644 --- a/arch/arm/mach-exynos/clock-exynos5.c +++ b/arch/arm/mach-exynos/clock-exynos5.c @@ -292,7 +292,7 @@ static struct clksrc_sources exynos5_clk_src_mpll = {  	.nr_sources	= ARRAY_SIZE(exynos5_clk_src_mpll_list),  }; -struct clksrc_clk exynos5_clk_mout_mpll = { +static struct clksrc_clk exynos5_clk_mout_mpll = {  	.clk = {  		.name		= "mout_mpll",  	}, @@ -467,12 +467,12 @@ static struct clksrc_clk exynos5_clk_pclk_acp = {  /* Core list of CMU_TOP side */ -struct clk *exynos5_clkset_aclk_top_list[] = { +static struct clk *exynos5_clkset_aclk_top_list[] = {  	[0] = &exynos5_clk_mout_mpll_user.clk,  	[1] = &exynos5_clk_mout_bpll_user.clk,  }; -struct clksrc_sources exynos5_clkset_aclk = { +static struct clksrc_sources exynos5_clkset_aclk = {  	.sources	= exynos5_clkset_aclk_top_list,  	.nr_sources	= ARRAY_SIZE(exynos5_clkset_aclk_top_list),  }; @@ -486,12 +486,12 @@ static struct clksrc_clk exynos5_clk_aclk_400 = {  	.reg_div = { .reg = EXYNOS5_CLKDIV_TOP0, .shift = 24, .size = 3 },  }; -struct clk *exynos5_clkset_aclk_333_166_list[] = { +static struct clk *exynos5_clkset_aclk_333_166_list[] = {  	[0] = &exynos5_clk_mout_cpll.clk,  	[1] = &exynos5_clk_mout_mpll_user.clk,  }; -struct clksrc_sources exynos5_clkset_aclk_333_166 = { +static struct clksrc_sources exynos5_clkset_aclk_333_166 = {  	.sources	= exynos5_clkset_aclk_333_166_list,  	.nr_sources	= ARRAY_SIZE(exynos5_clkset_aclk_333_166_list),  }; @@ -966,7 +966,7 @@ static struct clk exynos5_clk_fimd1 = {  	.ctrlbit	= (1 << 0),  }; -struct clk *exynos5_clkset_group_list[] = { +static struct clk *exynos5_clkset_group_list[] = {  	[0] = &clk_ext_xtal_mux,  	[1] = NULL,  	[2] = &exynos5_clk_sclk_hdmi24m, @@ -979,7 +979,7 @@ struct clk *exynos5_clkset_group_list[] = {  	[9] = &exynos5_clk_mout_cpll.clk,  }; -struct clksrc_sources exynos5_clkset_group = { +static struct clksrc_sources exynos5_clkset_group = {  	.sources	= exynos5_clkset_group_list,  	.nr_sources	= ARRAY_SIZE(exynos5_clkset_group_list),  }; @@ -1195,7 +1195,7 @@ static struct clksrc_clk exynos5_clk_sclk_spi2 = {  	.reg_div = { .reg = EXYNOS5_CLKDIV_PERIC2, .shift = 8, .size = 8 },  }; -struct clksrc_clk exynos5_clk_sclk_fimd1 = { +static struct clksrc_clk exynos5_clk_sclk_fimd1 = {  	.clk	= {  		.name		= "sclk_fimd",  		.devname	= "exynos5-fb.1", @@ -1476,7 +1476,7 @@ static void exynos5_clock_resume(void)  #define exynos5_clock_resume NULL  #endif -struct syscore_ops exynos5_clock_syscore_ops = { +static struct syscore_ops exynos5_clock_syscore_ops = {  	.suspend	= exynos5_clock_suspend,  	.resume		= exynos5_clock_resume,  }; diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c index 1947be8e5f5..0dbee7fef9b 100644 --- a/arch/arm/mach-exynos/common.c +++ b/arch/arm/mach-exynos/common.c @@ -63,7 +63,7 @@ static void exynos4_map_io(void);  static void exynos5_map_io(void);  static void exynos4_init_clocks(int xtal);  static void exynos5_init_clocks(int xtal); -static void exynos_init_uarts(struct s3c2410_uartcfg *cfg, int no); +static void exynos4_init_uarts(struct s3c2410_uartcfg *cfg, int no);  static int exynos_init(void);  static struct cpu_table cpu_ids[] __initdata = { @@ -72,7 +72,7 @@ static struct cpu_table cpu_ids[] __initdata = {  		.idmask		= EXYNOS4_CPU_MASK,  		.map_io		= exynos4_map_io,  		.init_clocks	= exynos4_init_clocks, -		.init_uarts	= exynos_init_uarts, +		.init_uarts	= exynos4_init_uarts,  		.init		= exynos_init,  		.name		= name_exynos4210,  	}, { @@ -80,7 +80,7 @@ static struct cpu_table cpu_ids[] __initdata = {  		.idmask		= EXYNOS4_CPU_MASK,  		.map_io		= exynos4_map_io,  		.init_clocks	= exynos4_init_clocks, -		.init_uarts	= exynos_init_uarts, +		.init_uarts	= exynos4_init_uarts,  		.init		= exynos_init,  		.name		= name_exynos4212,  	}, { @@ -88,7 +88,7 @@ static struct cpu_table cpu_ids[] __initdata = {  		.idmask		= EXYNOS4_CPU_MASK,  		.map_io		= exynos4_map_io,  		.init_clocks	= exynos4_init_clocks, -		.init_uarts	= exynos_init_uarts, +		.init_uarts	= exynos4_init_uarts,  		.init		= exynos_init,  		.name		= name_exynos4412,  	}, { @@ -96,7 +96,6 @@ static struct cpu_table cpu_ids[] __initdata = {  		.idmask		= EXYNOS5_SOC_MASK,  		.map_io		= exynos5_map_io,  		.init_clocks	= exynos5_init_clocks, -		.init_uarts	= exynos_init_uarts,  		.init		= exynos_init,  		.name		= name_exynos5250,  	}, @@ -257,25 +256,10 @@ static struct map_desc exynos5_iodesc[] __initdata = {  		.length		= SZ_64K,  		.type		= MT_DEVICE,  	}, { -		.virtual	= (unsigned long)S5P_VA_COMBINER_BASE, -		.pfn		= __phys_to_pfn(EXYNOS5_PA_COMBINER), -		.length		= SZ_4K, -		.type		= MT_DEVICE, -	}, {  		.virtual	= (unsigned long)S3C_VA_UART,  		.pfn		= __phys_to_pfn(EXYNOS5_PA_UART),  		.length		= SZ_512K,  		.type		= MT_DEVICE, -	}, { -		.virtual	= (unsigned long)S5P_VA_GIC_CPU, -		.pfn		= __phys_to_pfn(EXYNOS5_PA_GIC_CPU), -		.length		= SZ_8K, -		.type		= MT_DEVICE, -	}, { -		.virtual	= (unsigned long)S5P_VA_GIC_DIST, -		.pfn		= __phys_to_pfn(EXYNOS5_PA_GIC_DIST), -		.length		= SZ_4K, -		.type		= MT_DEVICE,  	},  }; @@ -354,23 +338,6 @@ static void __init exynos4_map_io(void)  static void __init exynos5_map_io(void)  {  	iotable_init(exynos5_iodesc, ARRAY_SIZE(exynos5_iodesc)); - -	s3c_device_i2c0.resource[0].start = EXYNOS5_PA_IIC(0); -	s3c_device_i2c0.resource[0].end   = EXYNOS5_PA_IIC(0) + SZ_4K - 1; -	s3c_device_i2c0.resource[1].start = EXYNOS5_IRQ_IIC; -	s3c_device_i2c0.resource[1].end   = EXYNOS5_IRQ_IIC; - -	s3c_sdhci_setname(0, "exynos4-sdhci"); -	s3c_sdhci_setname(1, "exynos4-sdhci"); -	s3c_sdhci_setname(2, "exynos4-sdhci"); -	s3c_sdhci_setname(3, "exynos4-sdhci"); - -	/* The I2C bus controllers are directly compatible with s3c2440 */ -	s3c_i2c0_setname("s3c2440-i2c"); -	s3c_i2c1_setname("s3c2440-i2c"); -	s3c_i2c2_setname("s3c2440-i2c"); - -	s3c64xx_spi_setname("exynos4210-spi");  }  static void __init exynos4_init_clocks(int xtal) @@ -589,7 +556,8 @@ static void __init combiner_init(void __iomem *combiner_base,  }  #ifdef CONFIG_OF -int __init combiner_of_init(struct device_node *np, struct device_node *parent) +static int __init combiner_of_init(struct device_node *np, +				   struct device_node *parent)  {  	void __iomem *combiner_base; @@ -727,7 +695,7 @@ static int __init exynos_init(void)  /* uart registration process */ -static void __init exynos_init_uarts(struct s3c2410_uartcfg *cfg, int no) +static void __init exynos4_init_uarts(struct s3c2410_uartcfg *cfg, int no)  {  	struct s3c2410_uartcfg *tcfg = cfg;  	u32 ucnt; @@ -735,10 +703,7 @@ static void __init exynos_init_uarts(struct s3c2410_uartcfg *cfg, int no)  	for (ucnt = 0; ucnt < no; ucnt++, tcfg++)  		tcfg->has_fracval = 1; -	if (soc_is_exynos5250()) -		s3c24xx_init_uartdevs("exynos4210-uart", exynos5_uart_resources, cfg, no); -	else -		s3c24xx_init_uartdevs("exynos4210-uart", exynos4_uart_resources, cfg, no); +	s3c24xx_init_uartdevs("exynos4210-uart", exynos4_uart_resources, cfg, no);  }  static void __iomem *exynos_eint_base; @@ -970,14 +935,7 @@ static void exynos_irq_eint0_15(unsigned int irq, struct irq_desc *desc)  	struct irq_chip *chip = irq_get_chip(irq);  	chained_irq_enter(chip, desc); -	chip->irq_mask(&desc->irq_data); - -	if (chip->irq_ack) -		chip->irq_ack(&desc->irq_data); -  	generic_handle_irq(*irq_data); - -	chip->irq_unmask(&desc->irq_data);  	chained_irq_exit(chip, desc);  } diff --git a/arch/arm/mach-exynos/dev-audio.c b/arch/arm/mach-exynos/dev-audio.c index ae321c7cb15..a1cb42c3959 100644 --- a/arch/arm/mach-exynos/dev-audio.c +++ b/arch/arm/mach-exynos/dev-audio.c @@ -14,9 +14,9 @@  #include <linux/platform_device.h>  #include <linux/dma-mapping.h>  #include <linux/gpio.h> +#include <linux/platform_data/asoc-s3c.h>  #include <plat/gpio-cfg.h> -#include <linux/platform_data/asoc-s3c.h>  #include <mach/map.h>  #include <mach/dma.h> diff --git a/arch/arm/mach-exynos/dev-dwmci.c b/arch/arm/mach-exynos/dev-dwmci.c deleted file mode 100644 index 79035018fb7..00000000000 --- a/arch/arm/mach-exynos/dev-dwmci.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * linux/arch/arm/mach-exynos4/dev-dwmci.c - * - * Copyright (c) 2011 Samsung Electronics Co., Ltd. - *		http://www.samsung.com - * - * Platform device for Synopsys DesignWare Mobile Storage IP - * - * 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/dma-mapping.h> -#include <linux/platform_device.h> -#include <linux/interrupt.h> -#include <linux/ioport.h> -#include <linux/mmc/dw_mmc.h> - -#include <plat/devs.h> - -#include <mach/map.h> - -static int exynos4_dwmci_get_bus_wd(u32 slot_id) -{ -	return 4; -} - -static int exynos4_dwmci_init(u32 slot_id, irq_handler_t handler, void *data) -{ -	return 0; -} - -static struct resource exynos4_dwmci_resource[] = { -	[0] = DEFINE_RES_MEM(EXYNOS4_PA_DWMCI, SZ_4K), -	[1] = DEFINE_RES_IRQ(EXYNOS4_IRQ_DWMCI), -}; - -static struct dw_mci_board exynos4_dwci_pdata = { -	.num_slots			= 1, -	.quirks				= DW_MCI_QUIRK_BROKEN_CARD_DETECTION, -	.bus_hz				= 80 * 1000 * 1000, -	.detect_delay_ms	= 200, -	.init				= exynos4_dwmci_init, -	.get_bus_wd			= exynos4_dwmci_get_bus_wd, -}; - -static u64 exynos4_dwmci_dmamask = DMA_BIT_MASK(32); - -struct platform_device exynos4_device_dwmci = { -	.name		= "dw_mmc", -	.id		= -1, -	.num_resources	= ARRAY_SIZE(exynos4_dwmci_resource), -	.resource	= exynos4_dwmci_resource, -	.dev		= { -		.dma_mask		= &exynos4_dwmci_dmamask, -		.coherent_dma_mask	= DMA_BIT_MASK(32), -		.platform_data	= &exynos4_dwci_pdata, -	}, -}; - -void __init exynos4_dwmci_set_platdata(struct dw_mci_board *pd) -{ -	struct dw_mci_board *npd; - -	npd = s3c_set_platdata(pd, sizeof(struct dw_mci_board), -			&exynos4_device_dwmci); - -	if (!npd->init) -		npd->init = exynos4_dwmci_init; -	if (!npd->get_bus_wd) -		npd->get_bus_wd = exynos4_dwmci_get_bus_wd; -} diff --git a/arch/arm/mach-exynos/dev-ohci.c b/arch/arm/mach-exynos/dev-ohci.c index 14ed7951a2c..4244d02dafb 100644 --- a/arch/arm/mach-exynos/dev-ohci.c +++ b/arch/arm/mach-exynos/dev-ohci.c @@ -12,10 +12,10 @@  #include <linux/dma-mapping.h>  #include <linux/platform_device.h> +#include <linux/platform_data/usb-exynos.h>  #include <mach/irqs.h>  #include <mach/map.h> -#include <linux/platform_data/usb-exynos.h>  #include <plat/devs.h>  #include <plat/usb-phy.h> diff --git a/arch/arm/mach-exynos/dev-uart.c b/arch/arm/mach-exynos/dev-uart.c index 2e85c022fd1..7c42f4b7c8b 100644 --- a/arch/arm/mach-exynos/dev-uart.c +++ b/arch/arm/mach-exynos/dev-uart.c @@ -52,27 +52,3 @@ struct s3c24xx_uart_resources exynos4_uart_resources[] __initdata = {  		.nr_resources	= ARRAY_SIZE(exynos4_uart3_resource),  	},  }; - -EXYNOS_UART_RESOURCE(5, 0) -EXYNOS_UART_RESOURCE(5, 1) -EXYNOS_UART_RESOURCE(5, 2) -EXYNOS_UART_RESOURCE(5, 3) - -struct s3c24xx_uart_resources exynos5_uart_resources[] __initdata = { -	[0] = { -		.resources	= exynos5_uart0_resource, -		.nr_resources	= ARRAY_SIZE(exynos5_uart0_resource), -	}, -	[1] = { -		.resources	= exynos5_uart1_resource, -		.nr_resources	= ARRAY_SIZE(exynos5_uart0_resource), -	}, -	[2] = { -		.resources	= exynos5_uart2_resource, -		.nr_resources	= ARRAY_SIZE(exynos5_uart2_resource), -	}, -	[3] = { -		.resources	= exynos5_uart3_resource, -		.nr_resources	= ARRAY_SIZE(exynos5_uart3_resource), -	}, -}; diff --git a/arch/arm/mach-exynos/include/mach/dwmci.h b/arch/arm/mach-exynos/include/mach/dwmci.h deleted file mode 100644 index 7ce657459cc..00000000000 --- a/arch/arm/mach-exynos/include/mach/dwmci.h +++ /dev/null @@ -1,20 +0,0 @@ -/* linux/arch/arm/mach-exynos4/include/mach/dwmci.h - * - * Copyright (c) 2011 Samsung Electronics Co., Ltd. - *		http://www.samsung.com/ - * - * Synopsys DesignWare Mobile Storage for EXYNOS4210 - * - * 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_ARM_ARCH_DWMCI_H -#define __ASM_ARM_ARCH_DWMCI_H __FILE__ - -#include <linux/mmc/dw_mmc.h> - -extern void exynos4_dwmci_set_platdata(struct dw_mci_board *pd); - -#endif /* __ASM_ARM_ARCH_DWMCI_H */ diff --git a/arch/arm/mach-exynos/include/mach/irqs.h b/arch/arm/mach-exynos/include/mach/irqs.h index 35bced6f909..6da31152de3 100644 --- a/arch/arm/mach-exynos/include/mach/irqs.h +++ b/arch/arm/mach-exynos/include/mach/irqs.h @@ -259,11 +259,6 @@  #define EXYNOS5_IRQ_IEM_IEC		IRQ_SPI(48)  #define EXYNOS5_IRQ_IEM_APC		IRQ_SPI(49)  #define EXYNOS5_IRQ_GPIO_C2C		IRQ_SPI(50) -#define EXYNOS5_IRQ_UART0		IRQ_SPI(51) -#define EXYNOS5_IRQ_UART1		IRQ_SPI(52) -#define EXYNOS5_IRQ_UART2		IRQ_SPI(53) -#define EXYNOS5_IRQ_UART3		IRQ_SPI(54) -#define EXYNOS5_IRQ_UART4		IRQ_SPI(55)  #define EXYNOS5_IRQ_IIC			IRQ_SPI(56)  #define EXYNOS5_IRQ_IIC1		IRQ_SPI(57)  #define EXYNOS5_IRQ_IIC2		IRQ_SPI(58) diff --git a/arch/arm/mach-exynos/include/mach/map.h b/arch/arm/mach-exynos/include/mach/map.h index ed4da4544cd..872840b2ff4 100644 --- a/arch/arm/mach-exynos/include/mach/map.h +++ b/arch/arm/mach-exynos/include/mach/map.h @@ -280,7 +280,6 @@  #define EXYNOS5_PA_UART1		0x12C10000  #define EXYNOS5_PA_UART2		0x12C20000  #define EXYNOS5_PA_UART3		0x12C30000 -#define EXYNOS5_SZ_UART			SZ_256  #define S3C_VA_UARTx(x)			(S3C_VA_UART + ((x) * S3C_UART_OFFSET)) diff --git a/arch/arm/mach-exynos/include/mach/regs-mem.h b/arch/arm/mach-exynos/include/mach/regs-mem.h deleted file mode 100644 index 0368b5a2725..00000000000 --- a/arch/arm/mach-exynos/include/mach/regs-mem.h +++ /dev/null @@ -1,23 +0,0 @@ -/* linux/arch/arm/mach-exynos4/include/mach/regs-mem.h - * - * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. - *		http://www.samsung.com - * - * EXYNOS4 - SROMC and DMC register definitions - * - * 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_REGS_MEM_H -#define __ASM_ARCH_REGS_MEM_H __FILE__ - -#include <mach/map.h> - -#define S5P_DMC0_MEMCON_OFFSET		0x04 - -#define S5P_DMC0_MEMTYPE_SHIFT		8 -#define S5P_DMC0_MEMTYPE_MASK		0xF - -#endif /* __ASM_ARCH_REGS_MEM_H */ diff --git a/arch/arm/mach-exynos/include/mach/regs-pmu.h b/arch/arm/mach-exynos/include/mach/regs-pmu.h index d4e392b811a..70b2795f528 100644 --- a/arch/arm/mach-exynos/include/mach/regs-pmu.h +++ b/arch/arm/mach-exynos/include/mach/regs-pmu.h @@ -230,8 +230,6 @@  /* For EXYNOS5 */ -#define EXYNOS5_USB_CFG						S5P_PMUREG(0x0230) -  #define EXYNOS5_AUTO_WDTRESET_DISABLE				S5P_PMUREG(0x0408)  #define EXYNOS5_MASK_WDTRESET_REQUEST				S5P_PMUREG(0x040C) diff --git a/arch/arm/mach-exynos/mach-nuri.c b/arch/arm/mach-exynos/mach-nuri.c index c05d7aa8403..69359a0c8a1 100644 --- a/arch/arm/mach-exynos/mach-nuri.c +++ b/arch/arm/mach-exynos/mach-nuri.c @@ -25,7 +25,10 @@  #include <linux/mmc/host.h>  #include <linux/fb.h>  #include <linux/pwm_backlight.h> +#include <linux/platform_data/i2c-s3c2410.h> +#include <linux/platform_data/mipi-csis.h>  #include <linux/platform_data/s3c-hsotg.h> +#include <linux/platform_data/usb-ehci-s5p.h>  #include <drm/exynos_drm.h>  #include <video/platform_lcd.h> @@ -45,14 +48,11 @@  #include <plat/devs.h>  #include <plat/fb.h>  #include <plat/sdhci.h> -#include <linux/platform_data/usb-ehci-s5p.h>  #include <plat/clock.h>  #include <plat/gpio-cfg.h> -#include <linux/platform_data/i2c-s3c2410.h>  #include <plat/mfc.h>  #include <plat/fimc-core.h>  #include <plat/camport.h> -#include <linux/platform_data/mipi-csis.h>  #include <mach/map.h> @@ -113,7 +113,6 @@ static struct s3c_sdhci_platdata nuri_hsmmc0_data __initdata = {  	.host_caps		= (MMC_CAP_8_BIT_DATA | MMC_CAP_4_BIT_DATA |  				MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED |  				MMC_CAP_ERASE), -	.host_caps2		= MMC_CAP2_BROKEN_VOLTAGE,  	.cd_type		= S3C_SDHCI_CD_PERMANENT,  }; diff --git a/arch/arm/mach-exynos/mach-origen.c b/arch/arm/mach-exynos/mach-origen.c index 9adf491674e..485ce6c477f 100644 --- a/arch/arm/mach-exynos/mach-origen.c +++ b/arch/arm/mach-exynos/mach-origen.c @@ -23,7 +23,10 @@  #include <linux/mfd/max8997.h>  #include <linux/lcd.h>  #include <linux/rfkill-gpio.h> +#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 <asm/mach/arch.h>  #include <asm/hardware/gic.h> @@ -36,8 +39,6 @@  #include <plat/cpu.h>  #include <plat/devs.h>  #include <plat/sdhci.h> -#include <linux/platform_data/i2c-s3c2410.h> -#include <linux/platform_data/usb-ehci-s5p.h>  #include <plat/clock.h>  #include <plat/gpio-cfg.h>  #include <plat/backlight.h> @@ -45,7 +46,6 @@  #include <plat/mfc.h>  #include <plat/hdmi.h> -#include <linux/platform_data/usb-exynos.h>  #include <mach/map.h>  #include <drm/exynos_drm.h> diff --git a/arch/arm/mach-exynos/mach-smdk4x12.c b/arch/arm/mach-exynos/mach-smdk4x12.c index 730f1ac6592..ddb92631252 100644 --- a/arch/arm/mach-exynos/mach-smdk4x12.c +++ b/arch/arm/mach-exynos/mach-smdk4x12.c @@ -21,6 +21,7 @@  #include <linux/pwm_backlight.h>  #include <linux/regulator/machine.h>  #include <linux/serial_core.h> +#include <linux/platform_data/i2c-s3c2410.h>  #include <linux/platform_data/s3c-hsotg.h>  #include <asm/mach/arch.h> @@ -34,7 +35,6 @@  #include <plat/devs.h>  #include <plat/fb.h>  #include <plat/gpio-cfg.h> -#include <linux/platform_data/i2c-s3c2410.h>  #include <plat/keypad.h>  #include <plat/mfc.h>  #include <plat/regs-serial.h> diff --git a/arch/arm/mach-exynos/mach-smdkv310.c b/arch/arm/mach-exynos/mach-smdkv310.c index ee4fb1a9cb7..8dd6a1e8030 100644 --- a/arch/arm/mach-exynos/mach-smdkv310.c +++ b/arch/arm/mach-exynos/mach-smdkv310.c @@ -20,7 +20,10 @@  #include <linux/input.h>  #include <linux/pwm.h>  #include <linux/pwm_backlight.h> +#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 <asm/mach/arch.h>  #include <asm/hardware/gic.h> @@ -35,16 +38,13 @@  #include <plat/fb.h>  #include <plat/keypad.h>  #include <plat/sdhci.h> -#include <linux/platform_data/i2c-s3c2410.h>  #include <plat/gpio-cfg.h>  #include <plat/backlight.h>  #include <plat/mfc.h> -#include <linux/platform_data/usb-ehci-s5p.h>  #include <plat/clock.h>  #include <plat/hdmi.h>  #include <mach/map.h> -#include <linux/platform_data/usb-exynos.h>  #include <drm/exynos_drm.h>  #include "common.h" diff --git a/arch/arm/mach-exynos/mach-universal_c210.c b/arch/arm/mach-exynos/mach-universal_c210.c index ebc9dd339a3..2d6bc83d5c9 100644 --- a/arch/arm/mach-exynos/mach-universal_c210.c +++ b/arch/arm/mach-exynos/mach-universal_c210.c @@ -23,6 +23,8 @@  #include <linux/i2c-gpio.h>  #include <linux/i2c/mcs.h>  #include <linux/i2c/atmel_mxt_ts.h> +#include <linux/platform_data/i2c-s3c2410.h> +#include <linux/platform_data/mipi-csis.h>  #include <linux/platform_data/s3c-hsotg.h>  #include <drm/exynos_drm.h> @@ -35,7 +37,6 @@  #include <plat/clock.h>  #include <plat/cpu.h>  #include <plat/devs.h> -#include <linux/platform_data/i2c-s3c2410.h>  #include <plat/gpio-cfg.h>  #include <plat/fb.h>  #include <plat/mfc.h> @@ -43,7 +44,6 @@  #include <plat/fimc-core.h>  #include <plat/s5p-time.h>  #include <plat/camport.h> -#include <linux/platform_data/mipi-csis.h>  #include <mach/map.h> @@ -754,7 +754,6 @@ static struct s3c_sdhci_platdata universal_hsmmc0_data __initdata = {  	.max_width		= 8,  	.host_caps		= (MMC_CAP_8_BIT_DATA | MMC_CAP_4_BIT_DATA |  				MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED), -	.host_caps2		= MMC_CAP2_BROKEN_VOLTAGE,  	.cd_type		= S3C_SDHCI_CD_PERMANENT,  }; diff --git a/arch/arm/plat-mxc/3ds_debugboard.c b/arch/arm/mach-imx/3ds_debugboard.c index 5c10ad05df7..13437735296 100644 --- a/arch/arm/plat-mxc/3ds_debugboard.c +++ b/arch/arm/mach-imx/3ds_debugboard.c @@ -21,7 +21,7 @@  #include <linux/regulator/machine.h>  #include <linux/regulator/fixed.h> -#include <mach/hardware.h> +#include "hardware.h"  /* LAN9217 ethernet base address */  #define LAN9217_BASE_ADDR(n)	(n + 0x0) diff --git a/arch/arm/plat-mxc/include/mach/3ds_debugboard.h b/arch/arm/mach-imx/3ds_debugboard.h index 9fd6cb3f8fa..9fd6cb3f8fa 100644 --- a/arch/arm/plat-mxc/include/mach/3ds_debugboard.h +++ b/arch/arm/mach-imx/3ds_debugboard.h diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index 8d276584650..f1bf610e290 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -1,3 +1,70 @@ +config ARCH_MXC +	bool "Freescale i.MX family" if ARCH_MULTI_V4_V5 || ARCH_MULTI_V6_V7 +	select ARCH_REQUIRE_GPIOLIB +	select ARM_PATCH_PHYS_VIRT +	select AUTO_ZRELADDR if !ZBOOT_ROM +	select CLKDEV_LOOKUP +	select CLKSRC_MMIO +	select GENERIC_CLOCKEVENTS +	select GENERIC_IRQ_CHIP +	select MULTI_IRQ_HANDLER +	select SPARSE_IRQ +	select USE_OF +	help +	  Support for Freescale MXC/iMX-based family of processors + +menu "Freescale i.MX support" +	depends on ARCH_MXC + +config MXC_IRQ_PRIOR +	bool "Use IRQ priority" +	help +	  Select this if you want to use prioritized IRQ handling. +	  This feature prevents higher priority ISR to be interrupted +	  by lower priority IRQ even IRQF_DISABLED flag is not set. +	  This may be useful in embedded applications, where are strong +	  requirements for timing. +	  Say N here, unless you have a specialized requirement. + +config MXC_TZIC +	bool + +config MXC_AVIC +	bool + +config MXC_DEBUG_BOARD +	bool "Enable MXC debug board(for 3-stack)" +	help +	  The debug board is an integral part of the MXC 3-stack(PDK) +	  platforms, it can be attached or removed from the peripheral +	  board. On debug board, several debug devices(ethernet, UART, +	  buttons, LEDs and JTAG) are implemented. Between the MCU and +	  these devices, a CPLD is added as a bridge which performs +	  data/address de-multiplexing and decode, signal level shift, +	  interrupt control and various board functions. + +config HAVE_EPIT +	bool + +config MXC_USE_EPIT +	bool "Use EPIT instead of GPT" +	depends on HAVE_EPIT +	help +	  Use EPIT as the system timer on systems that have it. Normally you +	  don't have a reason to do so as the EPIT has the same features and +	  uses the same clocks as the GPT. Anyway, on some systems the GPT +	  may be in use for other purposes. + +config MXC_ULPI +	bool + +config ARCH_HAS_RNGA +	bool + +config IRAM_ALLOC +	bool +	select GENERIC_ALLOCATOR +  config HAVE_IMX_GPC  	bool @@ -5,6 +72,12 @@ config HAVE_IMX_MMDC  	bool  config HAVE_IMX_SRC +	def_bool y if SMP + +config IMX_HAVE_IOMUX_V1 +	bool + +config ARCH_MXC_IOMUX_V3  	bool  config ARCH_MX1 @@ -104,7 +177,7 @@ config	SOC_IMX51  	select PINCTRL_IMX51  	select SOC_IMX5 -if ARCH_IMX_V4_V5 +if ARCH_MULTI_V4T  comment "MX1 platforms:"  config MACH_MXLADS @@ -133,6 +206,10 @@ config MACH_APF9328  	help  	  Say Yes here if you are using the Armadeus APF9328 development board +endif + +if ARCH_MULTI_V5 +  comment "MX21 platforms:"  config MACH_MX21ADS @@ -384,7 +461,7 @@ config MACH_IMX27_DT  endif -if ARCH_IMX_V6_V7 +if ARCH_MULTI_V6  comment "MX31 platforms:" @@ -649,6 +726,10 @@ config MACH_VPR200  	  Include support for VPR200 platform. This includes specific  	  configurations for the board and its peripherals. +endif + +if ARCH_MULTI_V7 +  comment "i.MX5 platforms:"  config MACH_MX50_RDP @@ -756,7 +837,6 @@ config SOC_IMX6Q  	select HAVE_CAN_FLEXCAN if CAN  	select HAVE_IMX_GPC  	select HAVE_IMX_MMDC -	select HAVE_IMX_SRC  	select HAVE_SMP  	select MFD_SYSCON  	select PINCTRL @@ -766,3 +846,7 @@ config SOC_IMX6Q  	  This enables support for Freescale i.MX6 Quad processor.  endif + +source "arch/arm/mach-imx/devices/Kconfig" + +endmenu diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile index 895754aeb4f..fe47b71469c 100644 --- a/arch/arm/mach-imx/Makefile +++ b/arch/arm/mach-imx/Makefile @@ -1,3 +1,5 @@ +obj-y := time.o cpu.o system.o irq-common.o +  obj-$(CONFIG_SOC_IMX1) += clk-imx1.o mm-imx1.o  obj-$(CONFIG_SOC_IMX21) += clk-imx21.o mm-imx21.o @@ -15,6 +17,24 @@ obj-$(CONFIG_SOC_IMX5) += cpu-imx5.o mm-imx5.o clk-imx51-imx53.o ehci-imx5.o $(i  obj-$(CONFIG_COMMON_CLK) += clk-pllv1.o clk-pllv2.o clk-pllv3.o clk-gate2.o \  			    clk-pfd.o clk-busy.o clk.o +obj-$(CONFIG_IMX_HAVE_IOMUX_V1) += iomux-v1.o +obj-$(CONFIG_ARCH_MXC_IOMUX_V3) += iomux-v3.o + +obj-$(CONFIG_MXC_TZIC) += tzic.o +obj-$(CONFIG_MXC_AVIC) += avic.o + +obj-$(CONFIG_IRAM_ALLOC) += iram_alloc.o +obj-$(CONFIG_MXC_ULPI) += ulpi.o +obj-$(CONFIG_MXC_USE_EPIT) += epit.o +obj-$(CONFIG_MXC_DEBUG_BOARD) += 3ds_debugboard.o +obj-$(CONFIG_CPU_FREQ_IMX)    += cpufreq.o +obj-$(CONFIG_CPU_IDLE) += cpuidle.o + +ifdef CONFIG_SND_IMX_SOC +obj-y += ssi-fiq.o +obj-y += ssi-fiq-ksym.o +endif +  # Support for CMOS sensor interface  obj-$(CONFIG_MX1_VIDEO) += mx1-camera-fiq.o mx1-camera-fiq-ksym.o @@ -89,3 +109,5 @@ obj-$(CONFIG_MACH_MX50_RDP) += mach-mx50_rdp.o  obj-$(CONFIG_MACH_IMX51_DT) += imx51-dt.o  obj-$(CONFIG_SOC_IMX53) += mach-imx53.o + +obj-y += devices/ diff --git a/arch/arm/plat-mxc/avic.c b/arch/arm/mach-imx/avic.c index cbd55c36def..0eff23ed92b 100644 --- a/arch/arm/plat-mxc/avic.c +++ b/arch/arm/mach-imx/avic.c @@ -22,12 +22,11 @@  #include <linux/irqdomain.h>  #include <linux/io.h>  #include <linux/of.h> -#include <mach/common.h>  #include <asm/mach/irq.h>  #include <asm/exception.h> -#include <mach/hardware.h> -#include <mach/irqs.h> +#include "common.h" +#include "hardware.h"  #include "irq-common.h"  #define AVIC_INTCNTL		0x00	/* int control reg */ diff --git a/arch/arm/plat-mxc/include/mach/board-mx31lilly.h b/arch/arm/mach-imx/board-mx31lilly.h index 0df71bfefbb..0df71bfefbb 100644 --- a/arch/arm/plat-mxc/include/mach/board-mx31lilly.h +++ b/arch/arm/mach-imx/board-mx31lilly.h diff --git a/arch/arm/plat-mxc/include/mach/board-mx31lite.h b/arch/arm/mach-imx/board-mx31lite.h index c1ad0ae807c..c1ad0ae807c 100644 --- a/arch/arm/plat-mxc/include/mach/board-mx31lite.h +++ b/arch/arm/mach-imx/board-mx31lite.h diff --git a/arch/arm/plat-mxc/include/mach/board-mx31moboard.h b/arch/arm/mach-imx/board-mx31moboard.h index de14543891c..de14543891c 100644 --- a/arch/arm/plat-mxc/include/mach/board-mx31moboard.h +++ b/arch/arm/mach-imx/board-mx31moboard.h diff --git a/arch/arm/plat-mxc/include/mach/board-pcm038.h b/arch/arm/mach-imx/board-pcm038.h index 6f371e35753..6f371e35753 100644 --- a/arch/arm/plat-mxc/include/mach/board-pcm038.h +++ b/arch/arm/mach-imx/board-pcm038.h diff --git a/arch/arm/mach-imx/clk-imx1.c b/arch/arm/mach-imx/clk-imx1.c index 516ddee1948..15f9d223cf0 100644 --- a/arch/arm/mach-imx/clk-imx1.c +++ b/arch/arm/mach-imx/clk-imx1.c @@ -22,9 +22,9 @@  #include <linux/clkdev.h>  #include <linux/err.h> -#include <mach/hardware.h> -#include <mach/common.h>  #include "clk.h" +#include "common.h" +#include "hardware.h"  /* CCM register addresses */  #define IO_ADDR_CCM(off)	(MX1_IO_ADDRESS(MX1_CCM_BASE_ADDR + (off))) @@ -82,7 +82,8 @@ int __init mx1_clocks_init(unsigned long fref)  			pr_err("imx1 clk %d: register failed with %ld\n",  				i, PTR_ERR(clk[i])); -	clk_register_clkdev(clk[dma_gate], "ahb", "imx-dma"); +	clk_register_clkdev(clk[dma_gate], "ahb", "imx1-dma"); +	clk_register_clkdev(clk[hclk], "ipg", "imx1-dma");  	clk_register_clkdev(clk[csi_gate], NULL, "mx1-camera.0");  	clk_register_clkdev(clk[mma_gate], "mma", NULL);  	clk_register_clkdev(clk[usbd_gate], NULL, "imx_udc.0"); @@ -94,18 +95,18 @@ int __init mx1_clocks_init(unsigned long fref)  	clk_register_clkdev(clk[hclk], "ipg", "imx1-uart.1");  	clk_register_clkdev(clk[per1], "per", "imx1-uart.2");  	clk_register_clkdev(clk[hclk], "ipg", "imx1-uart.2"); -	clk_register_clkdev(clk[hclk], NULL, "imx-i2c.0"); +	clk_register_clkdev(clk[hclk], NULL, "imx1-i2c.0");  	clk_register_clkdev(clk[per2], "per", "imx1-cspi.0");  	clk_register_clkdev(clk[dummy], "ipg", "imx1-cspi.0");  	clk_register_clkdev(clk[per2], "per", "imx1-cspi.1");  	clk_register_clkdev(clk[dummy], "ipg", "imx1-cspi.1");  	clk_register_clkdev(clk[per2], NULL, "imx-mmc.0"); -	clk_register_clkdev(clk[per2], "per", "imx-fb.0"); -	clk_register_clkdev(clk[dummy], "ipg", "imx-fb.0"); -	clk_register_clkdev(clk[dummy], "ahb", "imx-fb.0"); +	clk_register_clkdev(clk[per2], "per", "imx1-fb.0"); +	clk_register_clkdev(clk[dummy], "ipg", "imx1-fb.0"); +	clk_register_clkdev(clk[dummy], "ahb", "imx1-fb.0");  	clk_register_clkdev(clk[hclk], "mshc", NULL);  	clk_register_clkdev(clk[per3], "ssi", NULL); -	clk_register_clkdev(clk[clk32], NULL, "mxc_rtc.0"); +	clk_register_clkdev(clk[clk32], NULL, "imx1-rtc.0");  	clk_register_clkdev(clk[clko], "clko", NULL);  	mxc_timer_init(MX1_IO_ADDRESS(MX1_TIM1_BASE_ADDR), MX1_TIM1_INT); diff --git a/arch/arm/mach-imx/clk-imx21.c b/arch/arm/mach-imx/clk-imx21.c index cf65148bc51..d7ed66091a2 100644 --- a/arch/arm/mach-imx/clk-imx21.c +++ b/arch/arm/mach-imx/clk-imx21.c @@ -25,9 +25,9 @@  #include <linux/module.h>  #include <linux/err.h> -#include <mach/hardware.h> -#include <mach/common.h>  #include "clk.h" +#include "common.h" +#include "hardware.h"  #define IO_ADDR_CCM(off)	(MX21_IO_ADDRESS(MX21_CCM_BASE_ADDR + (off))) @@ -156,16 +156,16 @@ int __init mx21_clocks_init(unsigned long lref, unsigned long href)  	clk_register_clkdev(clk[cspi2_ipg_gate], "ipg", "imx21-cspi.1");  	clk_register_clkdev(clk[per2], "per", "imx21-cspi.2");  	clk_register_clkdev(clk[cspi3_ipg_gate], "ipg", "imx21-cspi.2"); -	clk_register_clkdev(clk[per3], "per", "imx-fb.0"); -	clk_register_clkdev(clk[lcdc_ipg_gate], "ipg", "imx-fb.0"); -	clk_register_clkdev(clk[lcdc_hclk_gate], "ahb", "imx-fb.0"); +	clk_register_clkdev(clk[per3], "per", "imx21-fb.0"); +	clk_register_clkdev(clk[lcdc_ipg_gate], "ipg", "imx21-fb.0"); +	clk_register_clkdev(clk[lcdc_hclk_gate], "ahb", "imx21-fb.0");  	clk_register_clkdev(clk[usb_gate], "per", "imx21-hcd.0");  	clk_register_clkdev(clk[usb_hclk_gate], "ahb", "imx21-hcd.0"); -	clk_register_clkdev(clk[nfc_gate], NULL, "mxc_nand.0"); -	clk_register_clkdev(clk[dma_hclk_gate], "ahb", "imx-dma"); -	clk_register_clkdev(clk[dma_gate], "ipg", "imx-dma"); +	clk_register_clkdev(clk[nfc_gate], NULL, "imx21-nand.0"); +	clk_register_clkdev(clk[dma_hclk_gate], "ahb", "imx21-dma"); +	clk_register_clkdev(clk[dma_gate], "ipg", "imx21-dma");  	clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0"); -	clk_register_clkdev(clk[i2c_gate], NULL, "imx-i2c.0"); +	clk_register_clkdev(clk[i2c_gate], NULL, "imx21-i2c.0");  	clk_register_clkdev(clk[kpp_gate], NULL, "mxc-keypad");  	clk_register_clkdev(clk[owire_gate], NULL, "mxc_w1.0");  	clk_register_clkdev(clk[brom_gate], "brom", NULL); diff --git a/arch/arm/mach-imx/clk-imx25.c b/arch/arm/mach-imx/clk-imx25.c index 01e2f843bf2..bc885801cd6 100644 --- a/arch/arm/mach-imx/clk-imx25.c +++ b/arch/arm/mach-imx/clk-imx25.c @@ -24,10 +24,10 @@  #include <linux/clkdev.h>  #include <linux/err.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/mx25.h>  #include "clk.h" +#include "common.h" +#include "hardware.h" +#include "mx25.h"  #define CRM_BASE	MX25_IO_ADDRESS(MX25_CRM_BASE_ADDR) @@ -197,7 +197,7 @@ int __init mx25_clocks_init(void)  	clk_register_clkdev(clk[ipg], "ipg", "fsl-usb2-udc");  	clk_register_clkdev(clk[usbotg_ahb], "ahb", "fsl-usb2-udc");  	clk_register_clkdev(clk[usb_div], "per", "fsl-usb2-udc"); -	clk_register_clkdev(clk[nfc_ipg_per], NULL, "mxc_nand.0"); +	clk_register_clkdev(clk[nfc_ipg_per], NULL, "imx25-nand.0");  	/* i.mx25 has the i.mx35 type cspi */  	clk_register_clkdev(clk[cspi1_ipg], NULL, "imx35-cspi.0");  	clk_register_clkdev(clk[cspi2_ipg], NULL, "imx35-cspi.1"); @@ -212,15 +212,15 @@ int __init mx25_clocks_init(void)  	clk_register_clkdev(clk[per10], "per", "mxc_pwm.3");  	clk_register_clkdev(clk[kpp_ipg], NULL, "imx-keypad");  	clk_register_clkdev(clk[tsc_ipg], NULL, "mx25-adc"); -	clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx-i2c.0"); -	clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx-i2c.1"); -	clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx-i2c.2"); +	clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx21-i2c.0"); +	clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx21-i2c.1"); +	clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx21-i2c.2");  	clk_register_clkdev(clk[fec_ipg], "ipg", "imx25-fec.0");  	clk_register_clkdev(clk[fec_ahb], "ahb", "imx25-fec.0");  	clk_register_clkdev(clk[dryice_ipg], NULL, "imxdi_rtc.0"); -	clk_register_clkdev(clk[lcdc_ipg_per], "per", "imx-fb.0"); -	clk_register_clkdev(clk[lcdc_ipg], "ipg", "imx-fb.0"); -	clk_register_clkdev(clk[lcdc_ahb], "ahb", "imx-fb.0"); +	clk_register_clkdev(clk[lcdc_ipg_per], "per", "imx21-fb.0"); +	clk_register_clkdev(clk[lcdc_ipg], "ipg", "imx21-fb.0"); +	clk_register_clkdev(clk[lcdc_ahb], "ahb", "imx21-fb.0");  	clk_register_clkdev(clk[wdt_ipg], NULL, "imx2-wdt.0");  	clk_register_clkdev(clk[ssi1_ipg], NULL, "imx-ssi.0");  	clk_register_clkdev(clk[ssi2_ipg], NULL, "imx-ssi.1"); @@ -230,9 +230,9 @@ int __init mx25_clocks_init(void)  	clk_register_clkdev(clk[esdhc2_ipg_per], "per", "sdhci-esdhc-imx25.1");  	clk_register_clkdev(clk[esdhc2_ipg], "ipg", "sdhci-esdhc-imx25.1");  	clk_register_clkdev(clk[esdhc2_ahb], "ahb", "sdhci-esdhc-imx25.1"); -	clk_register_clkdev(clk[csi_ipg_per], "per", "mx2-camera.0"); -	clk_register_clkdev(clk[csi_ipg], "ipg", "mx2-camera.0"); -	clk_register_clkdev(clk[csi_ahb], "ahb", "mx2-camera.0"); +	clk_register_clkdev(clk[csi_ipg_per], "per", "imx25-camera.0"); +	clk_register_clkdev(clk[csi_ipg], "ipg", "imx25-camera.0"); +	clk_register_clkdev(clk[csi_ahb], "ahb", "imx25-camera.0");  	clk_register_clkdev(clk[dummy], "audmux", NULL);  	clk_register_clkdev(clk[can1_ipg], NULL, "flexcan.0");  	clk_register_clkdev(clk[can2_ipg], NULL, "flexcan.1"); diff --git a/arch/arm/mach-imx/clk-imx27.c b/arch/arm/mach-imx/clk-imx27.c index 366e5d59d88..585ab256c58 100644 --- a/arch/arm/mach-imx/clk-imx27.c +++ b/arch/arm/mach-imx/clk-imx27.c @@ -6,9 +6,9 @@  #include <linux/clk-provider.h>  #include <linux/of.h> -#include <mach/common.h> -#include <mach/hardware.h>  #include "clk.h" +#include "common.h" +#include "hardware.h"  #define IO_ADDR_CCM(off)	(MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR + (off))) @@ -211,19 +211,19 @@ int __init mx27_clocks_init(unsigned long fref)  	clk_register_clkdev(clk[gpt6_ipg_gate], "ipg", "imx-gpt.5");  	clk_register_clkdev(clk[per1_gate], "per", "imx-gpt.5");  	clk_register_clkdev(clk[pwm_ipg_gate], NULL, "mxc_pwm.0"); -	clk_register_clkdev(clk[per2_gate], "per", "mxc-mmc.0"); -	clk_register_clkdev(clk[sdhc1_ipg_gate], "ipg", "mxc-mmc.0"); -	clk_register_clkdev(clk[per2_gate], "per", "mxc-mmc.1"); -	clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "mxc-mmc.1"); -	clk_register_clkdev(clk[per2_gate], "per", "mxc-mmc.2"); -	clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "mxc-mmc.2"); +	clk_register_clkdev(clk[per2_gate], "per", "imx21-mmc.0"); +	clk_register_clkdev(clk[sdhc1_ipg_gate], "ipg", "imx21-mmc.0"); +	clk_register_clkdev(clk[per2_gate], "per", "imx21-mmc.1"); +	clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "imx21-mmc.1"); +	clk_register_clkdev(clk[per2_gate], "per", "imx21-mmc.2"); +	clk_register_clkdev(clk[sdhc2_ipg_gate], "ipg", "imx21-mmc.2");  	clk_register_clkdev(clk[cspi1_ipg_gate], NULL, "imx27-cspi.0");  	clk_register_clkdev(clk[cspi2_ipg_gate], NULL, "imx27-cspi.1");  	clk_register_clkdev(clk[cspi3_ipg_gate], NULL, "imx27-cspi.2"); -	clk_register_clkdev(clk[per3_gate], "per", "imx-fb.0"); -	clk_register_clkdev(clk[lcdc_ipg_gate], "ipg", "imx-fb.0"); -	clk_register_clkdev(clk[lcdc_ahb_gate], "ahb", "imx-fb.0"); -	clk_register_clkdev(clk[csi_ahb_gate], "ahb", "mx2-camera.0"); +	clk_register_clkdev(clk[per3_gate], "per", "imx21-fb.0"); +	clk_register_clkdev(clk[lcdc_ipg_gate], "ipg", "imx21-fb.0"); +	clk_register_clkdev(clk[lcdc_ahb_gate], "ahb", "imx21-fb.0"); +	clk_register_clkdev(clk[csi_ahb_gate], "ahb", "imx27-camera.0");  	clk_register_clkdev(clk[usb_div], "per", "fsl-usb2-udc");  	clk_register_clkdev(clk[usb_ipg_gate], "ipg", "fsl-usb2-udc");  	clk_register_clkdev(clk[usb_ahb_gate], "ahb", "fsl-usb2-udc"); @@ -238,27 +238,27 @@ int __init mx27_clocks_init(unsigned long fref)  	clk_register_clkdev(clk[usb_ahb_gate], "ahb", "mxc-ehci.2");  	clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "imx-ssi.0");  	clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1"); -	clk_register_clkdev(clk[nfc_baud_gate], NULL, "mxc_nand.0"); +	clk_register_clkdev(clk[nfc_baud_gate], NULL, "imx27-nand.0");  	clk_register_clkdev(clk[vpu_baud_gate], "per", "coda-imx27.0");  	clk_register_clkdev(clk[vpu_ahb_gate], "ahb", "coda-imx27.0"); -	clk_register_clkdev(clk[dma_ahb_gate], "ahb", "imx-dma"); -	clk_register_clkdev(clk[dma_ipg_gate], "ipg", "imx-dma"); +	clk_register_clkdev(clk[dma_ahb_gate], "ahb", "imx27-dma"); +	clk_register_clkdev(clk[dma_ipg_gate], "ipg", "imx27-dma");  	clk_register_clkdev(clk[fec_ipg_gate], "ipg", "imx27-fec.0");  	clk_register_clkdev(clk[fec_ahb_gate], "ahb", "imx27-fec.0");  	clk_register_clkdev(clk[wdog_ipg_gate], NULL, "imx2-wdt.0"); -	clk_register_clkdev(clk[i2c1_ipg_gate], NULL, "imx-i2c.0"); -	clk_register_clkdev(clk[i2c2_ipg_gate], NULL, "imx-i2c.1"); +	clk_register_clkdev(clk[i2c1_ipg_gate], NULL, "imx21-i2c.0"); +	clk_register_clkdev(clk[i2c2_ipg_gate], NULL, "imx21-i2c.1");  	clk_register_clkdev(clk[owire_ipg_gate], NULL, "mxc_w1.0");  	clk_register_clkdev(clk[kpp_ipg_gate], NULL, "imx-keypad"); -	clk_register_clkdev(clk[emma_ahb_gate], "emma-ahb", "mx2-camera.0"); -	clk_register_clkdev(clk[emma_ipg_gate], "emma-ipg", "mx2-camera.0"); +	clk_register_clkdev(clk[emma_ahb_gate], "emma-ahb", "imx27-camera.0"); +	clk_register_clkdev(clk[emma_ipg_gate], "emma-ipg", "imx27-camera.0");  	clk_register_clkdev(clk[emma_ahb_gate], "ahb", "m2m-emmaprp.0");  	clk_register_clkdev(clk[emma_ipg_gate], "ipg", "m2m-emmaprp.0");  	clk_register_clkdev(clk[iim_ipg_gate], "iim", NULL);  	clk_register_clkdev(clk[gpio_ipg_gate], "gpio", NULL);  	clk_register_clkdev(clk[brom_ahb_gate], "brom", NULL);  	clk_register_clkdev(clk[ata_ahb_gate], "ata", NULL); -	clk_register_clkdev(clk[rtc_ipg_gate], NULL, "mxc_rtc"); +	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[emi_ahb_gate], "emi_ahb" , NULL); diff --git a/arch/arm/mach-imx/clk-imx31.c b/arch/arm/mach-imx/clk-imx31.c index 1253af2d997..8be64e0a4ac 100644 --- a/arch/arm/mach-imx/clk-imx31.c +++ b/arch/arm/mach-imx/clk-imx31.c @@ -22,12 +22,11 @@  #include <linux/err.h>  #include <linux/of.h> -#include <mach/hardware.h> -#include <mach/mx31.h> -#include <mach/common.h> -  #include "clk.h" +#include "common.h"  #include "crmregs-imx3.h" +#include "hardware.h" +#include "mx31.h"  static const char *mcu_main_sel[] = { "spll", "mpll", };  static const char *per_sel[] = { "per_div", "ipg", }; @@ -124,10 +123,10 @@ int __init mx31_clocks_init(unsigned long fref)  	clk_register_clkdev(clk[cspi3_gate], NULL, "imx31-cspi.2");  	clk_register_clkdev(clk[pwm_gate], "pwm", NULL);  	clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0"); -	clk_register_clkdev(clk[rtc_gate], NULL, "mxc_rtc"); +	clk_register_clkdev(clk[rtc_gate], NULL, "imx21-rtc");  	clk_register_clkdev(clk[epit1_gate], "epit", NULL);  	clk_register_clkdev(clk[epit2_gate], "epit", NULL); -	clk_register_clkdev(clk[nfc], NULL, "mxc_nand.0"); +	clk_register_clkdev(clk[nfc], NULL, "imx27-nand.0");  	clk_register_clkdev(clk[ipu_gate], NULL, "ipu-core");  	clk_register_clkdev(clk[ipu_gate], NULL, "mx3_sdc_fb");  	clk_register_clkdev(clk[kpp_gate], NULL, "imx-keypad"); @@ -155,12 +154,12 @@ int __init mx31_clocks_init(unsigned long fref)  	clk_register_clkdev(clk[ipg], "ipg", "imx21-uart.3");  	clk_register_clkdev(clk[uart5_gate], "per", "imx21-uart.4");  	clk_register_clkdev(clk[ipg], "ipg", "imx21-uart.4"); -	clk_register_clkdev(clk[i2c1_gate], NULL, "imx-i2c.0"); -	clk_register_clkdev(clk[i2c2_gate], NULL, "imx-i2c.1"); -	clk_register_clkdev(clk[i2c3_gate], NULL, "imx-i2c.2"); +	clk_register_clkdev(clk[i2c1_gate], NULL, "imx21-i2c.0"); +	clk_register_clkdev(clk[i2c2_gate], NULL, "imx21-i2c.1"); +	clk_register_clkdev(clk[i2c3_gate], NULL, "imx21-i2c.2");  	clk_register_clkdev(clk[owire_gate], NULL, "mxc_w1.0"); -	clk_register_clkdev(clk[sdhc1_gate], NULL, "mxc-mmc.0"); -	clk_register_clkdev(clk[sdhc2_gate], NULL, "mxc-mmc.1"); +	clk_register_clkdev(clk[sdhc1_gate], NULL, "imx31-mmc.0"); +	clk_register_clkdev(clk[sdhc2_gate], NULL, "imx31-mmc.1");  	clk_register_clkdev(clk[ssi1_gate], NULL, "imx-ssi.0");  	clk_register_clkdev(clk[ssi2_gate], NULL, "imx-ssi.1");  	clk_register_clkdev(clk[firi_gate], "firi", NULL); diff --git a/arch/arm/mach-imx/clk-imx35.c b/arch/arm/mach-imx/clk-imx35.c index 177259b523c..66f3d65ea27 100644 --- a/arch/arm/mach-imx/clk-imx35.c +++ b/arch/arm/mach-imx/clk-imx35.c @@ -14,11 +14,10 @@  #include <linux/of.h>  #include <linux/err.h> -#include <mach/hardware.h> -#include <mach/common.h> -  #include "crmregs-imx3.h"  #include "clk.h" +#include "common.h" +#include "hardware.h"  struct arm_ahb_div {  	unsigned char arm, ahb, sel; @@ -226,9 +225,9 @@ int __init mx35_clocks_init()  	clk_register_clkdev(clk[fec_gate], NULL, "imx27-fec.0");  	clk_register_clkdev(clk[gpt_gate], "per", "imx-gpt.0");  	clk_register_clkdev(clk[ipg], "ipg", "imx-gpt.0"); -	clk_register_clkdev(clk[i2c1_gate], NULL, "imx-i2c.0"); -	clk_register_clkdev(clk[i2c2_gate], NULL, "imx-i2c.1"); -	clk_register_clkdev(clk[i2c3_gate], NULL, "imx-i2c.2"); +	clk_register_clkdev(clk[i2c1_gate], NULL, "imx21-i2c.0"); +	clk_register_clkdev(clk[i2c2_gate], NULL, "imx21-i2c.1"); +	clk_register_clkdev(clk[i2c3_gate], NULL, "imx21-i2c.2");  	clk_register_clkdev(clk[ipu_gate], NULL, "ipu-core");  	clk_register_clkdev(clk[ipu_gate], NULL, "mx3_sdc_fb");  	clk_register_clkdev(clk[kpp_gate], NULL, "imx-keypad"); @@ -256,7 +255,7 @@ int __init mx35_clocks_init()  	clk_register_clkdev(clk[ipg], "ipg", "fsl-usb2-udc");  	clk_register_clkdev(clk[usbotg_gate], "ahb", "fsl-usb2-udc");  	clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0"); -	clk_register_clkdev(clk[nfc_div], NULL, "mxc_nand.0"); +	clk_register_clkdev(clk[nfc_div], NULL, "imx25-nand.0");  	clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0");  	clk_prepare_enable(clk[spba_gate]); diff --git a/arch/arm/mach-imx/clk-imx51-imx53.c b/arch/arm/mach-imx/clk-imx51-imx53.c index a0bf84803ea..abb71f6b4d6 100644 --- a/arch/arm/mach-imx/clk-imx51-imx53.c +++ b/arch/arm/mach-imx/clk-imx51-imx53.c @@ -14,11 +14,10 @@  #include <linux/of.h>  #include <linux/err.h> -#include <mach/hardware.h> -#include <mach/common.h> -  #include "crm-regs-imx5.h"  #include "clk.h" +#include "common.h" +#include "hardware.h"  /* Low-power Audio Playback Mode clock */  static const char *lp_apm_sel[] = { "osc", }; @@ -258,8 +257,8 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil,  	clk_register_clkdev(clk[cspi_ipg_gate], NULL, "imx35-cspi.2");  	clk_register_clkdev(clk[pwm1_ipg_gate], "pwm", "mxc_pwm.0");  	clk_register_clkdev(clk[pwm2_ipg_gate], "pwm", "mxc_pwm.1"); -	clk_register_clkdev(clk[i2c1_gate], NULL, "imx-i2c.0"); -	clk_register_clkdev(clk[i2c2_gate], NULL, "imx-i2c.1"); +	clk_register_clkdev(clk[i2c1_gate], NULL, "imx21-i2c.0"); +	clk_register_clkdev(clk[i2c2_gate], NULL, "imx21-i2c.1");  	clk_register_clkdev(clk[usboh3_per_gate], "per", "mxc-ehci.0");  	clk_register_clkdev(clk[usboh3_gate], "ipg", "mxc-ehci.0");  	clk_register_clkdev(clk[usboh3_gate], "ahb", "mxc-ehci.0"); @@ -272,7 +271,7 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil,  	clk_register_clkdev(clk[usboh3_per_gate], "per", "fsl-usb2-udc");  	clk_register_clkdev(clk[usboh3_gate], "ipg", "fsl-usb2-udc");  	clk_register_clkdev(clk[usboh3_gate], "ahb", "fsl-usb2-udc"); -	clk_register_clkdev(clk[nfc_gate], NULL, "mxc_nand"); +	clk_register_clkdev(clk[nfc_gate], NULL, "imx51-nand");  	clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "imx-ssi.0");  	clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1");  	clk_register_clkdev(clk[ssi3_ipg_gate], NULL, "imx-ssi.2"); @@ -345,7 +344,7 @@ int __init mx51_clocks_init(unsigned long rate_ckil, unsigned long rate_osc,  	mx5_clocks_common_init(rate_ckil, rate_osc, rate_ckih1, rate_ckih2); -	clk_register_clkdev(clk[hsi2c_gate], NULL, "imx-i2c.2"); +	clk_register_clkdev(clk[hsi2c_gate], NULL, "imx21-i2c.2");  	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"); @@ -440,7 +439,7 @@ int __init mx53_clocks_init(unsigned long rate_ckil, unsigned long rate_osc,  	mx5_clocks_common_init(rate_ckil, rate_osc, rate_ckih1, rate_ckih2);  	clk_register_clkdev(clk[vpu_gate], NULL, "imx53-vpu.0"); -	clk_register_clkdev(clk[i2c3_gate], NULL, "imx-i2c.2"); +	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", "imx53-ipu");  	clk_register_clkdev(clk[ipu_di0_gate], "di0", "imx53-ipu"); diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index 3ec242f3341..e5a82bb95b5 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c @@ -19,8 +19,9 @@  #include <linux/of.h>  #include <linux/of_address.h>  #include <linux/of_irq.h> -#include <mach/common.h> +  #include "clk.h" +#include "common.h"  #define CCGR0				0x68  #define CCGR1				0x6c diff --git a/arch/arm/mach-imx/clk-pllv1.c b/arch/arm/mach-imx/clk-pllv1.c index 02be7317891..abff350ba24 100644 --- a/arch/arm/mach-imx/clk-pllv1.c +++ b/arch/arm/mach-imx/clk-pllv1.c @@ -4,10 +4,10 @@  #include <linux/slab.h>  #include <linux/kernel.h>  #include <linux/err.h> -#include <mach/common.h> -#include <mach/hardware.h>  #include "clk.h" +#include "common.h" +#include "hardware.h"  /**   * pll v1 diff --git a/arch/arm/plat-mxc/include/mach/common.h b/arch/arm/mach-imx/common.h index ead901814c0..ef8db6b3484 100644 --- a/arch/arm/plat-mxc/include/mach/common.h +++ b/arch/arm/mach-imx/common.h @@ -79,6 +79,7 @@ extern void mxc_arch_reset_init(void __iomem *);  extern int mx53_revision(void);  extern int mx53_display_revision(void);  extern void imx_set_aips(void __iomem *); +extern int mxc_device_init(void);  enum mxc_cpu_pwr_mode {  	WAIT_CLOCKED,		/* wfi only */ diff --git a/arch/arm/mach-imx/cpu-imx25.c b/arch/arm/mach-imx/cpu-imx25.c index 6914bcbf84e..96ec64b5ff7 100644 --- a/arch/arm/mach-imx/cpu-imx25.c +++ b/arch/arm/mach-imx/cpu-imx25.c @@ -11,8 +11,9 @@   */  #include <linux/module.h>  #include <linux/io.h> -#include <mach/hardware.h> -#include <mach/iim.h> + +#include "iim.h" +#include "hardware.h"  static int mx25_cpu_rev = -1; diff --git a/arch/arm/mach-imx/cpu-imx27.c b/arch/arm/mach-imx/cpu-imx27.c index ff38e1505f6..fe8d36f7e30 100644 --- a/arch/arm/mach-imx/cpu-imx27.c +++ b/arch/arm/mach-imx/cpu-imx27.c @@ -24,7 +24,7 @@  #include <linux/io.h>  #include <linux/module.h> -#include <mach/hardware.h> +#include "hardware.h"  static int mx27_cpu_rev = -1;  static int mx27_cpu_partnumber; diff --git a/arch/arm/mach-imx/cpu-imx31.c b/arch/arm/mach-imx/cpu-imx31.c index 3f2345f0cda..fde1860a252 100644 --- a/arch/arm/mach-imx/cpu-imx31.c +++ b/arch/arm/mach-imx/cpu-imx31.c @@ -11,9 +11,10 @@  #include <linux/module.h>  #include <linux/io.h> -#include <mach/hardware.h> -#include <mach/iim.h> -#include <mach/common.h> + +#include "common.h" +#include "hardware.h" +#include "iim.h"  static int mx31_cpu_rev = -1; diff --git a/arch/arm/mach-imx/cpu-imx35.c b/arch/arm/mach-imx/cpu-imx35.c index 846e46eb8cb..ec3aaa098c1 100644 --- a/arch/arm/mach-imx/cpu-imx35.c +++ b/arch/arm/mach-imx/cpu-imx35.c @@ -10,8 +10,9 @@   */  #include <linux/module.h>  #include <linux/io.h> -#include <mach/hardware.h> -#include <mach/iim.h> + +#include "hardware.h" +#include "iim.h"  static int mx35_cpu_rev = -1; diff --git a/arch/arm/mach-imx/cpu-imx5.c b/arch/arm/mach-imx/cpu-imx5.c index 8eb15a2fcaf..d88760014ff 100644 --- a/arch/arm/mach-imx/cpu-imx5.c +++ b/arch/arm/mach-imx/cpu-imx5.c @@ -15,9 +15,10 @@  #include <linux/kernel.h>  #include <linux/init.h>  #include <linux/module.h> -#include <mach/hardware.h>  #include <linux/io.h> +#include "hardware.h" +  static int mx5_cpu_rev = -1;  #define IIM_SREV 0x24 diff --git a/arch/arm/plat-mxc/cpu.c b/arch/arm/mach-imx/cpu.c index 220dd6f9312..03fcbd08259 100644 --- a/arch/arm/plat-mxc/cpu.c +++ b/arch/arm/mach-imx/cpu.c @@ -1,7 +1,8 @@  #include <linux/module.h>  #include <linux/io.h> -#include <mach/hardware.h> + +#include "hardware.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 index 7b92cd6da6d..b9ef692b61a 100644 --- a/arch/arm/mach-imx/cpu_op-mx51.c +++ b/arch/arm/mach-imx/cpu_op-mx51.c @@ -13,9 +13,10 @@  #include <linux/bug.h>  #include <linux/types.h> -#include <mach/hardware.h>  #include <linux/kernel.h> +#include "hardware.h" +  static struct cpu_op mx51_cpu_op[] = {  	{  	.cpu_rate = 160000000,}, diff --git a/arch/arm/plat-mxc/cpufreq.c b/arch/arm/mach-imx/cpufreq.c index b5b6f808313..36e8b399447 100644 --- a/arch/arm/plat-mxc/cpufreq.c +++ b/arch/arm/mach-imx/cpufreq.c @@ -22,7 +22,8 @@  #include <linux/clk.h>  #include <linux/err.h>  #include <linux/slab.h> -#include <mach/hardware.h> + +#include "hardware.h"  #define CLK32_FREQ	32768  #define NANOSECOND	(1000 * 1000 * 1000) diff --git a/arch/arm/plat-mxc/cpuidle.c b/arch/arm/mach-imx/cpuidle.c index d4cb511a44a..d4cb511a44a 100644 --- a/arch/arm/plat-mxc/cpuidle.c +++ b/arch/arm/mach-imx/cpuidle.c diff --git a/arch/arm/plat-mxc/include/mach/cpuidle.h b/arch/arm/mach-imx/cpuidle.h index bc932d1af37..bc932d1af37 100644 --- a/arch/arm/plat-mxc/include/mach/cpuidle.h +++ b/arch/arm/mach-imx/cpuidle.h diff --git a/arch/arm/mach-imx/devices-imx1.h b/arch/arm/mach-imx/devices-imx1.h index 3aad1e70de9..f9b5afc6bcd 100644 --- a/arch/arm/mach-imx/devices-imx1.h +++ b/arch/arm/mach-imx/devices-imx1.h @@ -6,8 +6,7 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/mx1.h> -#include <mach/devices-common.h> +#include "devices/devices-common.h"  extern const struct imx_imx_fb_data imx1_imx_fb_data;  #define imx1_add_imx_fb(pdata) \ diff --git a/arch/arm/mach-imx/devices-imx21.h b/arch/arm/mach-imx/devices-imx21.h index 93ece55f75d..bd939328015 100644 --- a/arch/arm/mach-imx/devices-imx21.h +++ b/arch/arm/mach-imx/devices-imx21.h @@ -6,8 +6,7 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/mx21.h> -#include <mach/devices-common.h> +#include "devices/devices-common.h"  extern const struct imx_imx21_hcd_data imx21_imx21_hcd_data;  #define imx21_add_imx21_hcd(pdata)	\ diff --git a/arch/arm/mach-imx/devices-imx25.h b/arch/arm/mach-imx/devices-imx25.h index f8e03dd1f11..0d2922bc575 100644 --- a/arch/arm/mach-imx/devices-imx25.h +++ b/arch/arm/mach-imx/devices-imx25.h @@ -6,8 +6,7 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/mx25.h> -#include <mach/devices-common.h> +#include "devices/devices-common.h"  extern const struct imx_fec_data imx25_fec_data;  #define imx25_add_fec(pdata)	\ diff --git a/arch/arm/mach-imx/devices-imx27.h b/arch/arm/mach-imx/devices-imx27.h index 04822932cdd..8a1ad7972d4 100644 --- a/arch/arm/mach-imx/devices-imx27.h +++ b/arch/arm/mach-imx/devices-imx27.h @@ -6,8 +6,7 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/mx27.h> -#include <mach/devices-common.h> +#include "devices/devices-common.h"  extern const struct imx_fec_data imx27_fec_data;  #define imx27_add_fec(pdata)	\ diff --git a/arch/arm/mach-imx/devices-imx31.h b/arch/arm/mach-imx/devices-imx31.h index 8b2ceb45bb8..e8d1611bbc8 100644 --- a/arch/arm/mach-imx/devices-imx31.h +++ b/arch/arm/mach-imx/devices-imx31.h @@ -6,8 +6,7 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/mx31.h> -#include <mach/devices-common.h> +#include "devices/devices-common.h"  extern const struct imx_fsl_usb2_udc_data imx31_fsl_usb2_udc_data;  #define imx31_add_fsl_usb2_udc(pdata)	\ diff --git a/arch/arm/mach-imx/devices-imx35.h b/arch/arm/mach-imx/devices-imx35.h index c3e9f206ac2..e2675f1b141 100644 --- a/arch/arm/mach-imx/devices-imx35.h +++ b/arch/arm/mach-imx/devices-imx35.h @@ -6,8 +6,7 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/mx35.h> -#include <mach/devices-common.h> +#include "devices/devices-common.h"  extern const struct imx_fec_data imx35_fec_data;  #define imx35_add_fec(pdata)	\ diff --git a/arch/arm/mach-imx/devices-imx50.h b/arch/arm/mach-imx/devices-imx50.h index 7216667eaaf..2c290391f29 100644 --- a/arch/arm/mach-imx/devices-imx50.h +++ b/arch/arm/mach-imx/devices-imx50.h @@ -18,8 +18,7 @@   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.   */ -#include <mach/mx50.h> -#include <mach/devices-common.h> +#include "devices/devices-common.h"  extern const struct imx_imx_uart_1irq_data imx50_imx_uart_data[];  #define imx50_add_imx_uart(id, pdata)	\ diff --git a/arch/arm/mach-imx/devices-imx51.h b/arch/arm/mach-imx/devices-imx51.h index 9f171872519..deee5baee88 100644 --- a/arch/arm/mach-imx/devices-imx51.h +++ b/arch/arm/mach-imx/devices-imx51.h @@ -6,8 +6,7 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/mx51.h> -#include <mach/devices-common.h> +#include "devices/devices-common.h"  extern const struct imx_fec_data imx51_fec_data;  #define imx51_add_fec(pdata)	\ diff --git a/arch/arm/plat-mxc/devices/Kconfig b/arch/arm/mach-imx/devices/Kconfig index a35d9841f49..a35d9841f49 100644 --- a/arch/arm/plat-mxc/devices/Kconfig +++ b/arch/arm/mach-imx/devices/Kconfig diff --git a/arch/arm/plat-mxc/devices/Makefile b/arch/arm/mach-imx/devices/Makefile index 76f3195475d..2abe2a5144d 100644 --- a/arch/arm/plat-mxc/devices/Makefile +++ b/arch/arm/mach-imx/devices/Makefile @@ -1,3 +1,5 @@ +obj-y := devices.o +  obj-$(CONFIG_IMX_HAVE_PLATFORM_FEC) += platform-fec.o  obj-$(CONFIG_IMX_HAVE_PLATFORM_FLEXCAN) += platform-flexcan.o  obj-$(CONFIG_IMX_HAVE_PLATFORM_FSL_USB2_UDC) += platform-fsl-usb2-udc.o diff --git a/arch/arm/plat-mxc/include/mach/devices-common.h b/arch/arm/mach-imx/devices/devices-common.h index eaf79d220c9..e4b790b9e2a 100644 --- a/arch/arm/plat-mxc/include/mach/devices-common.h +++ b/arch/arm/mach-imx/devices/devices-common.h @@ -108,6 +108,7 @@ struct platform_device *__init imx_add_imxdi_rtc(  #include <linux/platform_data/video-imxfb.h>  struct imx_imx_fb_data { +	const char *devid;  	resource_size_t iobase;  	resource_size_t iosize;  	resource_size_t irq; @@ -118,6 +119,7 @@ struct platform_device *__init imx_add_imx_fb(  #include <linux/platform_data/i2c-imx.h>  struct imx_imx_i2c_data { +	const char *devid;  	int id;  	resource_size_t iobase;  	resource_size_t iosize; @@ -219,6 +221,7 @@ struct platform_device *__init imx_add_mx1_camera(  #include <linux/platform_data/camera-mx2.h>  struct imx_mx2_camera_data { +	const char *devid;  	resource_size_t iobasecsi;  	resource_size_t iosizecsi;  	resource_size_t irqcsi; @@ -244,6 +247,7 @@ struct platform_device *__init imx_add_mxc_ehci(  #include <linux/platform_data/mmc-mxcmmc.h>  struct imx_mxc_mmc_data { +	const char *devid;  	int id;  	resource_size_t iobase;  	resource_size_t iosize; @@ -256,6 +260,7 @@ struct platform_device *__init imx_add_mxc_mmc(  #include <linux/platform_data/mtd-mxc_nand.h>  struct imx_mxc_nand_data { +	const char *devid;  	/*  	 * id is traditionally 0, but -1 is more appropriate.  We use -1 for new  	 * machines but don't change existing devices as the nand device usually @@ -290,6 +295,7 @@ struct platform_device *__init imx_add_mxc_pwm(  /* mxc_rtc */  struct imx_mxc_rtc_data { +	const char *devid;  	resource_size_t iobase;  	resource_size_t irq;  }; @@ -326,7 +332,8 @@ struct platform_device *__init imx_add_spi_imx(  		const struct imx_spi_imx_data *data,  		const struct spi_imx_master *pdata); -struct platform_device *imx_add_imx_dma(void); +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); diff --git a/arch/arm/plat-mxc/devices.c b/arch/arm/mach-imx/devices/devices.c index 4d55a7a26e9..1b37482407f 100644 --- a/arch/arm/plat-mxc/devices.c +++ b/arch/arm/mach-imx/devices/devices.c @@ -21,7 +21,6 @@  #include <linux/init.h>  #include <linux/err.h>  #include <linux/platform_device.h> -#include <mach/common.h>  struct device mxc_aips_bus = {  	.init_name	= "mxc_aips", @@ -33,7 +32,7 @@ struct device mxc_ahb_bus = {  	.parent		= &platform_bus,  }; -static int __init mxc_device_init(void) +int __init mxc_device_init(void)  {  	int ret; @@ -46,4 +45,3 @@ static int __init mxc_device_init(void)  done:  	return ret;  } -core_initcall(mxc_device_init); diff --git a/arch/arm/plat-mxc/devices/platform-ahci-imx.c b/arch/arm/mach-imx/devices/platform-ahci-imx.c index ade4a1c4e2a..3d87dd9c284 100644 --- a/arch/arm/plat-mxc/devices/platform-ahci-imx.c +++ b/arch/arm/mach-imx/devices/platform-ahci-imx.c @@ -24,8 +24,9 @@  #include <linux/device.h>  #include <linux/dma-mapping.h>  #include <asm/sizes.h> -#include <mach/hardware.h> -#include <mach/devices-common.h> + +#include "../hardware.h" +#include "devices-common.h"  #define imx_ahci_imx_data_entry_single(soc, _devid)		\  	{								\ diff --git a/arch/arm/plat-mxc/devices/platform-fec.c b/arch/arm/mach-imx/devices/platform-fec.c index 0bae44e890d..2cb188ad9a0 100644 --- a/arch/arm/plat-mxc/devices/platform-fec.c +++ b/arch/arm/mach-imx/devices/platform-fec.c @@ -8,8 +8,9 @@   */  #include <linux/dma-mapping.h>  #include <asm/sizes.h> -#include <mach/hardware.h> -#include <mach/devices-common.h> + +#include "../hardware.h" +#include "devices-common.h"  #define imx_fec_data_entry_single(soc, _devid)				\  	{								\ diff --git a/arch/arm/plat-mxc/devices/platform-flexcan.c b/arch/arm/mach-imx/devices/platform-flexcan.c index 4e8497af2eb..1078bf0a94e 100644 --- a/arch/arm/plat-mxc/devices/platform-flexcan.c +++ b/arch/arm/mach-imx/devices/platform-flexcan.c @@ -5,8 +5,8 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h> +#include "../hardware.h" +#include "devices-common.h"  #define imx_flexcan_data_entry_single(soc, _id, _hwid, _size)		\  	{								\ diff --git a/arch/arm/plat-mxc/devices/platform-fsl-usb2-udc.c b/arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c index 848038f301f..37e44398197 100644 --- a/arch/arm/plat-mxc/devices/platform-fsl-usb2-udc.c +++ b/arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c @@ -7,8 +7,9 @@   * Free Software Foundation.   */  #include <linux/dma-mapping.h> -#include <mach/hardware.h> -#include <mach/devices-common.h> + +#include "../hardware.h" +#include "devices-common.h"  #define imx_fsl_usb2_udc_data_entry_single(soc)				\  	{								\ diff --git a/arch/arm/plat-mxc/devices/platform-gpio-mxc.c b/arch/arm/mach-imx/devices/platform-gpio-mxc.c index a7919a24103..26483fa94b7 100644 --- a/arch/arm/plat-mxc/devices/platform-gpio-mxc.c +++ b/arch/arm/mach-imx/devices/platform-gpio-mxc.c @@ -6,7 +6,7 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/devices-common.h> +#include "devices-common.h"  struct platform_device *__init mxc_register_gpio(char *name, int id,  	resource_size_t iobase, resource_size_t iosize, int irq, int irq_high) diff --git a/arch/arm/plat-mxc/devices/platform-gpio_keys.c b/arch/arm/mach-imx/devices/platform-gpio_keys.c index 1c53a532ea0..486282539c7 100644 --- a/arch/arm/plat-mxc/devices/platform-gpio_keys.c +++ b/arch/arm/mach-imx/devices/platform-gpio_keys.c @@ -16,8 +16,9 @@   * Boston, MA  02110-1301, USA.   */  #include <asm/sizes.h> -#include <mach/hardware.h> -#include <mach/devices-common.h> + +#include "../hardware.h" +#include "devices-common.h"  struct platform_device *__init imx_add_gpio_keys(  		const struct gpio_keys_platform_data *pdata) diff --git a/arch/arm/plat-mxc/devices/platform-imx-dma.c b/arch/arm/mach-imx/devices/platform-imx-dma.c index 7fa7e9c9246..ccdb5dc4ddb 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-dma.c +++ b/arch/arm/mach-imx/devices/platform-imx-dma.c @@ -6,12 +6,29 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/devices-common.h> +#include "devices-common.h" -struct platform_device __init __maybe_unused *imx_add_imx_dma(void) +struct platform_device __init __maybe_unused *imx_add_imx_dma(char *name, +	resource_size_t iobase, int irq, int irq_err)  { +	struct resource res[] = { +		{ +			.start = iobase, +			.end = iobase + SZ_4K - 1, +			.flags = IORESOURCE_MEM, +		}, { +			.start = irq, +			.end = irq, +			.flags = IORESOURCE_IRQ, +		}, { +			.start = irq_err, +			.end = irq_err, +			.flags = IORESOURCE_IRQ, +		}, +	}; +  	return platform_device_register_resndata(&mxc_ahb_bus, -			"imx-dma", -1, NULL, 0, NULL, 0); +			name, -1, res, ARRAY_SIZE(res), NULL, 0);  }  struct platform_device __init __maybe_unused *imx_add_imx_sdma(char *name, diff --git a/arch/arm/plat-mxc/devices/platform-imx-fb.c b/arch/arm/mach-imx/devices/platform-imx-fb.c index 2b0b5e0aa99..10b0ed39f07 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-fb.c +++ b/arch/arm/mach-imx/devices/platform-imx-fb.c @@ -7,11 +7,13 @@   * Free Software Foundation.   */  #include <linux/dma-mapping.h> -#include <mach/hardware.h> -#include <mach/devices-common.h> -#define imx_imx_fb_data_entry_single(soc, _size)			\ +#include "../hardware.h" +#include "devices-common.h" + +#define imx_imx_fb_data_entry_single(soc, _devid, _size)		\  	{								\ +		.devid = _devid,					\  		.iobase = soc ## _LCDC_BASE_ADDR,			\  		.iosize = _size,					\  		.irq = soc ## _INT_LCDC,				\ @@ -19,22 +21,22 @@  #ifdef CONFIG_SOC_IMX1  const struct imx_imx_fb_data imx1_imx_fb_data __initconst = -	imx_imx_fb_data_entry_single(MX1, SZ_4K); +	imx_imx_fb_data_entry_single(MX1, "imx1-fb", SZ_4K);  #endif /* ifdef CONFIG_SOC_IMX1 */  #ifdef CONFIG_SOC_IMX21  const struct imx_imx_fb_data imx21_imx_fb_data __initconst = -	imx_imx_fb_data_entry_single(MX21, SZ_4K); +	imx_imx_fb_data_entry_single(MX21, "imx21-fb", SZ_4K);  #endif /* ifdef CONFIG_SOC_IMX21 */  #ifdef CONFIG_SOC_IMX25  const struct imx_imx_fb_data imx25_imx_fb_data __initconst = -	imx_imx_fb_data_entry_single(MX25, SZ_16K); +	imx_imx_fb_data_entry_single(MX25, "imx21-fb", SZ_16K);  #endif /* ifdef CONFIG_SOC_IMX25 */  #ifdef CONFIG_SOC_IMX27  const struct imx_imx_fb_data imx27_imx_fb_data __initconst = -	imx_imx_fb_data_entry_single(MX27, SZ_4K); +	imx_imx_fb_data_entry_single(MX27, "imx21-fb", SZ_4K);  #endif /* ifdef CONFIG_SOC_IMX27 */  struct platform_device *__init imx_add_imx_fb( diff --git a/arch/arm/plat-mxc/devices/platform-imx-i2c.c b/arch/arm/mach-imx/devices/platform-imx-i2c.c index 19ad580c0be..8e30e5703cd 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-i2c.c +++ b/arch/arm/mach-imx/devices/platform-imx-i2c.c @@ -6,34 +6,35 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h> +#include "../hardware.h" +#include "devices-common.h" -#define imx_imx_i2c_data_entry_single(soc, _id, _hwid, _size)		\ +#define imx_imx_i2c_data_entry_single(soc, _devid, _id, _hwid, _size)	\  	{								\ +		.devid = _devid,					\  		.id = _id,						\  		.iobase = soc ## _I2C ## _hwid ## _BASE_ADDR,		\  		.iosize = _size,					\  		.irq = soc ## _INT_I2C ## _hwid,			\  	} -#define imx_imx_i2c_data_entry(soc, _id, _hwid, _size)			\ -	[_id] = imx_imx_i2c_data_entry_single(soc, _id, _hwid, _size) +#define imx_imx_i2c_data_entry(soc, _devid, _id, _hwid, _size)		\ +	[_id] = imx_imx_i2c_data_entry_single(soc, _devid, _id, _hwid, _size)  #ifdef CONFIG_SOC_IMX1  const struct imx_imx_i2c_data imx1_imx_i2c_data __initconst = -	imx_imx_i2c_data_entry_single(MX1, 0, , SZ_4K); +	imx_imx_i2c_data_entry_single(MX1, "imx1-i2c", 0, , SZ_4K);  #endif /* ifdef CONFIG_SOC_IMX1 */  #ifdef CONFIG_SOC_IMX21  const struct imx_imx_i2c_data imx21_imx_i2c_data __initconst = -	imx_imx_i2c_data_entry_single(MX21, 0, , SZ_4K); +	imx_imx_i2c_data_entry_single(MX21, "imx21-i2c", 0, , SZ_4K);  #endif /* ifdef CONFIG_SOC_IMX21 */  #ifdef CONFIG_SOC_IMX25  const struct imx_imx_i2c_data imx25_imx_i2c_data[] __initconst = {  #define imx25_imx_i2c_data_entry(_id, _hwid)				\ -	imx_imx_i2c_data_entry(MX25, _id, _hwid, SZ_16K) +	imx_imx_i2c_data_entry(MX25, "imx21-i2c", _id, _hwid, SZ_16K)  	imx25_imx_i2c_data_entry(0, 1),  	imx25_imx_i2c_data_entry(1, 2),  	imx25_imx_i2c_data_entry(2, 3), @@ -43,7 +44,7 @@ const struct imx_imx_i2c_data imx25_imx_i2c_data[] __initconst = {  #ifdef CONFIG_SOC_IMX27  const struct imx_imx_i2c_data imx27_imx_i2c_data[] __initconst = {  #define imx27_imx_i2c_data_entry(_id, _hwid)				\ -	imx_imx_i2c_data_entry(MX27, _id, _hwid, SZ_4K) +	imx_imx_i2c_data_entry(MX27, "imx21-i2c", _id, _hwid, SZ_4K)  	imx27_imx_i2c_data_entry(0, 1),  	imx27_imx_i2c_data_entry(1, 2),  }; @@ -52,7 +53,7 @@ const struct imx_imx_i2c_data imx27_imx_i2c_data[] __initconst = {  #ifdef CONFIG_SOC_IMX31  const struct imx_imx_i2c_data imx31_imx_i2c_data[] __initconst = {  #define imx31_imx_i2c_data_entry(_id, _hwid)				\ -	imx_imx_i2c_data_entry(MX31, _id, _hwid, SZ_4K) +	imx_imx_i2c_data_entry(MX31, "imx21-i2c", _id, _hwid, SZ_4K)  	imx31_imx_i2c_data_entry(0, 1),  	imx31_imx_i2c_data_entry(1, 2),  	imx31_imx_i2c_data_entry(2, 3), @@ -62,7 +63,7 @@ const struct imx_imx_i2c_data imx31_imx_i2c_data[] __initconst = {  #ifdef CONFIG_SOC_IMX35  const struct imx_imx_i2c_data imx35_imx_i2c_data[] __initconst = {  #define imx35_imx_i2c_data_entry(_id, _hwid)				\ -	imx_imx_i2c_data_entry(MX35, _id, _hwid, SZ_4K) +	imx_imx_i2c_data_entry(MX35, "imx21-i2c", _id, _hwid, SZ_4K)  	imx35_imx_i2c_data_entry(0, 1),  	imx35_imx_i2c_data_entry(1, 2),  	imx35_imx_i2c_data_entry(2, 3), @@ -72,7 +73,7 @@ const struct imx_imx_i2c_data imx35_imx_i2c_data[] __initconst = {  #ifdef CONFIG_SOC_IMX50  const struct imx_imx_i2c_data imx50_imx_i2c_data[] __initconst = {  #define imx50_imx_i2c_data_entry(_id, _hwid)				\ -	imx_imx_i2c_data_entry(MX50, _id, _hwid, SZ_4K) +	imx_imx_i2c_data_entry(MX50, "imx21-i2c", _id, _hwid, SZ_4K)  	imx50_imx_i2c_data_entry(0, 1),  	imx50_imx_i2c_data_entry(1, 2),  	imx50_imx_i2c_data_entry(2, 3), @@ -82,10 +83,11 @@ const struct imx_imx_i2c_data imx50_imx_i2c_data[] __initconst = {  #ifdef CONFIG_SOC_IMX51  const struct imx_imx_i2c_data imx51_imx_i2c_data[] __initconst = {  #define imx51_imx_i2c_data_entry(_id, _hwid)				\ -	imx_imx_i2c_data_entry(MX51, _id, _hwid, SZ_4K) +	imx_imx_i2c_data_entry(MX51, "imx21-i2c", _id, _hwid, SZ_4K)  	imx51_imx_i2c_data_entry(0, 1),  	imx51_imx_i2c_data_entry(1, 2),  	{ +		.devid = "imx21-i2c",  		.id = 2,  		.iobase = MX51_HSI2C_DMA_BASE_ADDR,  		.iosize = SZ_16K, @@ -97,7 +99,7 @@ const struct imx_imx_i2c_data imx51_imx_i2c_data[] __initconst = {  #ifdef CONFIG_SOC_IMX53  const struct imx_imx_i2c_data imx53_imx_i2c_data[] __initconst = {  #define imx53_imx_i2c_data_entry(_id, _hwid)				\ -	imx_imx_i2c_data_entry(MX53, _id, _hwid, SZ_4K) +	imx_imx_i2c_data_entry(MX53, "imx21-i2c", _id, _hwid, SZ_4K)  	imx53_imx_i2c_data_entry(0, 1),  	imx53_imx_i2c_data_entry(1, 2),  	imx53_imx_i2c_data_entry(2, 3), @@ -120,7 +122,7 @@ struct platform_device *__init imx_add_imx_i2c(  		},  	}; -	return imx_add_platform_device("imx-i2c", data->id, +	return imx_add_platform_device(data->devid, data->id,  			res, ARRAY_SIZE(res),  			pdata, sizeof(*pdata));  } diff --git a/arch/arm/plat-mxc/devices/platform-imx-keypad.c b/arch/arm/mach-imx/devices/platform-imx-keypad.c index 479c3e9f771..8f22a4c98a4 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-keypad.c +++ b/arch/arm/mach-imx/devices/platform-imx-keypad.c @@ -6,8 +6,8 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h> +#include "../hardware.h" +#include "devices-common.h"  #define imx_imx_keypad_data_entry_single(soc, _size)			\  	{								\ diff --git a/arch/arm/plat-mxc/devices/platform-imx-ssi.c b/arch/arm/mach-imx/devices/platform-imx-ssi.c index 21c6f30e101..bfcb8f3dfa8 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-ssi.c +++ b/arch/arm/mach-imx/devices/platform-imx-ssi.c @@ -6,8 +6,8 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h> +#include "../hardware.h" +#include "devices-common.h"  #define imx_imx_ssi_data_entry(soc, _id, _hwid, _size)			\  	[_id] = {							\ diff --git a/arch/arm/plat-mxc/devices/platform-imx-uart.c b/arch/arm/mach-imx/devices/platform-imx-uart.c index d390f00bd29..67bf866a2cb 100644 --- a/arch/arm/plat-mxc/devices/platform-imx-uart.c +++ b/arch/arm/mach-imx/devices/platform-imx-uart.c @@ -6,8 +6,8 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h> +#include "../hardware.h" +#include "devices-common.h"  #define imx_imx_uart_3irq_data_entry(soc, _id, _hwid, _size)		\  	[_id] = {							\ diff --git a/arch/arm/plat-mxc/devices/platform-imx2-wdt.c b/arch/arm/mach-imx/devices/platform-imx2-wdt.c index 5e07ef2bf1c..ec75d641368 100644 --- a/arch/arm/plat-mxc/devices/platform-imx2-wdt.c +++ b/arch/arm/mach-imx/devices/platform-imx2-wdt.c @@ -7,8 +7,9 @@   * Free Software Foundation.   */  #include <asm/sizes.h> -#include <mach/hardware.h> -#include <mach/devices-common.h> + +#include "../hardware.h" +#include "devices-common.h"  #define imx_imx2_wdt_data_entry_single(soc, _id, _hwid, _size)		\  	{								\ diff --git a/arch/arm/plat-mxc/devices/platform-imx21-hcd.c b/arch/arm/mach-imx/devices/platform-imx21-hcd.c index 5770a42f33b..30c81616a9a 100644 --- a/arch/arm/plat-mxc/devices/platform-imx21-hcd.c +++ b/arch/arm/mach-imx/devices/platform-imx21-hcd.c @@ -6,8 +6,8 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h> +#include "../hardware.h" +#include "devices-common.h"  #define imx_imx21_hcd_data_entry_single(soc)				\  	{								\ diff --git a/arch/arm/plat-mxc/devices/platform-imx27-coda.c b/arch/arm/mach-imx/devices/platform-imx27-coda.c index 8b12aacdf39..25bebc29e54 100644 --- a/arch/arm/plat-mxc/devices/platform-imx27-coda.c +++ b/arch/arm/mach-imx/devices/platform-imx27-coda.c @@ -7,8 +7,8 @@   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h> +#include "../hardware.h" +#include "devices-common.h"  #ifdef CONFIG_SOC_IMX27  const struct imx_imx27_coda_data imx27_coda_data __initconst = { diff --git a/arch/arm/plat-mxc/devices/platform-imx_udc.c b/arch/arm/mach-imx/devices/platform-imx_udc.c index 6fd675dfce1..5ced7e4e2c7 100644 --- a/arch/arm/plat-mxc/devices/platform-imx_udc.c +++ b/arch/arm/mach-imx/devices/platform-imx_udc.c @@ -6,8 +6,8 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h> +#include "../hardware.h" +#include "devices-common.h"  #define imx_imx_udc_data_entry_single(soc, _size)			\  	{								\ diff --git a/arch/arm/plat-mxc/devices/platform-imxdi_rtc.c b/arch/arm/mach-imx/devices/platform-imxdi_rtc.c index 805336fdc25..5bb490d556e 100644 --- a/arch/arm/plat-mxc/devices/platform-imxdi_rtc.c +++ b/arch/arm/mach-imx/devices/platform-imxdi_rtc.c @@ -7,8 +7,9 @@   * Free Software Foundation.   */  #include <asm/sizes.h> -#include <mach/hardware.h> -#include <mach/devices-common.h> + +#include "../hardware.h" +#include "devices-common.h"  #define imx_imxdi_rtc_data_entry_single(soc)				\  	{								\ diff --git a/arch/arm/plat-mxc/devices/platform-ipu-core.c b/arch/arm/mach-imx/devices/platform-ipu-core.c index d1e33cc6f12..fc4dd7cedc1 100644 --- a/arch/arm/plat-mxc/devices/platform-ipu-core.c +++ b/arch/arm/mach-imx/devices/platform-ipu-core.c @@ -7,8 +7,9 @@   * Free Software Foundation.   */  #include <linux/dma-mapping.h> -#include <mach/hardware.h> -#include <mach/devices-common.h> + +#include "../hardware.h" +#include "devices-common.h"  #define imx_ipu_core_entry_single(soc)					\  {									\ diff --git a/arch/arm/plat-mxc/devices/platform-mx1-camera.c b/arch/arm/mach-imx/devices/platform-mx1-camera.c index edcc581a30a..2c678813108 100644 --- a/arch/arm/plat-mxc/devices/platform-mx1-camera.c +++ b/arch/arm/mach-imx/devices/platform-mx1-camera.c @@ -6,8 +6,8 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h> +#include "../hardware.h" +#include "devices-common.h"  #define imx_mx1_camera_data_entry_single(soc, _size)			\  	{								\ diff --git a/arch/arm/plat-mxc/devices/platform-mx2-camera.c b/arch/arm/mach-imx/devices/platform-mx2-camera.c index 11eace953a0..f4910160346 100644 --- a/arch/arm/plat-mxc/devices/platform-mx2-camera.c +++ b/arch/arm/mach-imx/devices/platform-mx2-camera.c @@ -6,17 +6,19 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h> +#include "../hardware.h" +#include "devices-common.h" -#define imx_mx2_camera_data_entry_single(soc)				\ +#define imx_mx2_camera_data_entry_single(soc, _devid)			\  	{								\ +		.devid = _devid,					\  		.iobasecsi = soc ## _CSI_BASE_ADDR,			\  		.iosizecsi = SZ_4K,					\  		.irqcsi = soc ## _INT_CSI,				\  	} -#define imx_mx2_camera_data_entry_single_emma(soc)			\ +#define imx_mx2_camera_data_entry_single_emma(soc, _devid)		\  	{								\ +		.devid = _devid,					\  		.iobasecsi = soc ## _CSI_BASE_ADDR,			\  		.iosizecsi = SZ_32,					\  		.irqcsi = soc ## _INT_CSI,				\ @@ -27,12 +29,12 @@  #ifdef CONFIG_SOC_IMX25  const struct imx_mx2_camera_data imx25_mx2_camera_data __initconst = -	imx_mx2_camera_data_entry_single(MX25); +	imx_mx2_camera_data_entry_single(MX25, "imx25-camera");  #endif /* ifdef CONFIG_SOC_IMX25 */  #ifdef CONFIG_SOC_IMX27  const struct imx_mx2_camera_data imx27_mx2_camera_data __initconst = -	imx_mx2_camera_data_entry_single_emma(MX27); +	imx_mx2_camera_data_entry_single_emma(MX27, "imx27-camera");  #endif /* ifdef CONFIG_SOC_IMX27 */  struct platform_device *__init imx_add_mx2_camera( @@ -58,7 +60,7 @@ struct platform_device *__init imx_add_mx2_camera(  			.flags = IORESOURCE_IRQ,  		},  	}; -	return imx_add_platform_device_dmamask("mx2-camera", 0, +	return imx_add_platform_device_dmamask(data->devid, 0,  			res, data->iobaseemmaprp ? 4 : 2,  			pdata, sizeof(*pdata), DMA_BIT_MASK(32));  } diff --git a/arch/arm/plat-mxc/devices/platform-mxc-ehci.c b/arch/arm/mach-imx/devices/platform-mxc-ehci.c index 35851d889ac..5d4bbbfde64 100644 --- a/arch/arm/plat-mxc/devices/platform-mxc-ehci.c +++ b/arch/arm/mach-imx/devices/platform-mxc-ehci.c @@ -7,8 +7,9 @@   * Free Software Foundation.   */  #include <linux/dma-mapping.h> -#include <mach/hardware.h> -#include <mach/devices-common.h> + +#include "../hardware.h" +#include "devices-common.h"  #define imx_mxc_ehci_data_entry_single(soc, _id, hs)			\  	{								\ diff --git a/arch/arm/plat-mxc/devices/platform-mxc-mmc.c b/arch/arm/mach-imx/devices/platform-mxc-mmc.c index e7b920b5867..b8203c760c8 100644 --- a/arch/arm/plat-mxc/devices/platform-mxc-mmc.c +++ b/arch/arm/mach-imx/devices/platform-mxc-mmc.c @@ -7,24 +7,26 @@   * Free Software Foundation.   */  #include <linux/dma-mapping.h> -#include <mach/hardware.h> -#include <mach/devices-common.h> -#define imx_mxc_mmc_data_entry_single(soc, _id, _hwid, _size)		\ +#include "../hardware.h" +#include "devices-common.h" + +#define imx_mxc_mmc_data_entry_single(soc, _devid, _id, _hwid, _size)	\  	{								\ +		.devid = _devid,					\  		.id = _id,						\  		.iobase = soc ## _SDHC ## _hwid ## _BASE_ADDR,		\  		.iosize = _size,					\  		.irq = soc ## _INT_SDHC ## _hwid,			\  		.dmareq = soc ## _DMA_REQ_SDHC ## _hwid,		\  	} -#define imx_mxc_mmc_data_entry(soc, _id, _hwid, _size)			\ -	[_id] = imx_mxc_mmc_data_entry_single(soc, _id, _hwid, _size) +#define imx_mxc_mmc_data_entry(soc, _devid, _id, _hwid, _size)		\ +	[_id] = imx_mxc_mmc_data_entry_single(soc, _devid, _id, _hwid, _size)  #ifdef CONFIG_SOC_IMX21  const struct imx_mxc_mmc_data imx21_mxc_mmc_data[] __initconst = {  #define imx21_mxc_mmc_data_entry(_id, _hwid)				\ -	imx_mxc_mmc_data_entry(MX21, _id, _hwid, SZ_4K) +	imx_mxc_mmc_data_entry(MX21, "imx21-mmc", _id, _hwid, SZ_4K)  	imx21_mxc_mmc_data_entry(0, 1),  	imx21_mxc_mmc_data_entry(1, 2),  }; @@ -33,7 +35,7 @@ const struct imx_mxc_mmc_data imx21_mxc_mmc_data[] __initconst = {  #ifdef CONFIG_SOC_IMX27  const struct imx_mxc_mmc_data imx27_mxc_mmc_data[] __initconst = {  #define imx27_mxc_mmc_data_entry(_id, _hwid)				\ -	imx_mxc_mmc_data_entry(MX27, _id, _hwid, SZ_4K) +	imx_mxc_mmc_data_entry(MX27, "imx21-mmc", _id, _hwid, SZ_4K)  	imx27_mxc_mmc_data_entry(0, 1),  	imx27_mxc_mmc_data_entry(1, 2),  }; @@ -42,7 +44,7 @@ const struct imx_mxc_mmc_data imx27_mxc_mmc_data[] __initconst = {  #ifdef CONFIG_SOC_IMX31  const struct imx_mxc_mmc_data imx31_mxc_mmc_data[] __initconst = {  #define imx31_mxc_mmc_data_entry(_id, _hwid)				\ -	imx_mxc_mmc_data_entry(MX31, _id, _hwid, SZ_16K) +	imx_mxc_mmc_data_entry(MX31, "imx31-mmc", _id, _hwid, SZ_16K)  	imx31_mxc_mmc_data_entry(0, 1),  	imx31_mxc_mmc_data_entry(1, 2),  }; @@ -67,7 +69,7 @@ struct platform_device *__init imx_add_mxc_mmc(  			.flags = IORESOURCE_DMA,  		},  	}; -	return imx_add_platform_device_dmamask("mxc-mmc", data->id, +	return imx_add_platform_device_dmamask(data->devid, data->id,  			res, ARRAY_SIZE(res),  			pdata, sizeof(*pdata), DMA_BIT_MASK(32));  } diff --git a/arch/arm/plat-mxc/devices/platform-mxc_nand.c b/arch/arm/mach-imx/devices/platform-mxc_nand.c index 95b75cc7051..7af1c53e42b 100644 --- a/arch/arm/plat-mxc/devices/platform-mxc_nand.c +++ b/arch/arm/mach-imx/devices/platform-mxc_nand.c @@ -7,18 +7,21 @@   * Free Software Foundation.   */  #include <asm/sizes.h> -#include <mach/hardware.h> -#include <mach/devices-common.h> -#define imx_mxc_nand_data_entry_single(soc, _size)			\ +#include "../hardware.h" +#include "devices-common.h" + +#define imx_mxc_nand_data_entry_single(soc, _devid, _size)		\  	{								\ +		.devid = _devid,					\  		.iobase = soc ## _NFC_BASE_ADDR,			\  		.iosize = _size,					\  		.irq = soc ## _INT_NFC					\  	} -#define imx_mxc_nandv3_data_entry_single(soc, _size)			\ +#define imx_mxc_nandv3_data_entry_single(soc, _devid, _size)		\  	{								\ +		.devid = _devid,					\  		.id = -1,						\  		.iobase = soc ## _NFC_BASE_ADDR,			\  		.iosize = _size,					\ @@ -28,32 +31,32 @@  #ifdef CONFIG_SOC_IMX21  const struct imx_mxc_nand_data imx21_mxc_nand_data __initconst = -	imx_mxc_nand_data_entry_single(MX21, SZ_4K); +	imx_mxc_nand_data_entry_single(MX21, "imx21-nand", SZ_4K);  #endif /* ifdef CONFIG_SOC_IMX21 */  #ifdef CONFIG_SOC_IMX25  const struct imx_mxc_nand_data imx25_mxc_nand_data __initconst = -	imx_mxc_nand_data_entry_single(MX25, SZ_8K); +	imx_mxc_nand_data_entry_single(MX25, "imx25-nand", SZ_8K);  #endif /* ifdef CONFIG_SOC_IMX25 */  #ifdef CONFIG_SOC_IMX27  const struct imx_mxc_nand_data imx27_mxc_nand_data __initconst = -	imx_mxc_nand_data_entry_single(MX27, SZ_4K); +	imx_mxc_nand_data_entry_single(MX27, "imx27-nand", SZ_4K);  #endif /* ifdef CONFIG_SOC_IMX27 */  #ifdef CONFIG_SOC_IMX31  const struct imx_mxc_nand_data imx31_mxc_nand_data __initconst = -	imx_mxc_nand_data_entry_single(MX31, SZ_4K); +	imx_mxc_nand_data_entry_single(MX31, "imx27-nand", SZ_4K);  #endif  #ifdef CONFIG_SOC_IMX35  const struct imx_mxc_nand_data imx35_mxc_nand_data __initconst = -	imx_mxc_nand_data_entry_single(MX35, SZ_8K); +	imx_mxc_nand_data_entry_single(MX35, "imx25-nand", SZ_8K);  #endif  #ifdef CONFIG_SOC_IMX51  const struct imx_mxc_nand_data imx51_mxc_nand_data __initconst = -	imx_mxc_nandv3_data_entry_single(MX51, SZ_16K); +	imx_mxc_nandv3_data_entry_single(MX51, "imx51-nand", SZ_16K);  #endif  struct platform_device *__init imx_add_mxc_nand( @@ -76,7 +79,7 @@ struct platform_device *__init imx_add_mxc_nand(  			.flags = IORESOURCE_MEM,  		},  	}; -	return imx_add_platform_device("mxc_nand", data->id, +	return imx_add_platform_device(data->devid, data->id,  			res, ARRAY_SIZE(res) - !data->axibase,  			pdata, sizeof(*pdata));  } diff --git a/arch/arm/plat-mxc/devices/platform-mxc_pwm.c b/arch/arm/mach-imx/devices/platform-mxc_pwm.c index b0c4ae29811..dcd28977768 100644 --- a/arch/arm/plat-mxc/devices/platform-mxc_pwm.c +++ b/arch/arm/mach-imx/devices/platform-mxc_pwm.c @@ -6,8 +6,8 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h> +#include "../hardware.h" +#include "devices-common.h"  #define imx_mxc_pwm_data_entry_single(soc, _id, _hwid, _size)		\  	{								\ diff --git a/arch/arm/plat-mxc/devices/platform-mxc_rnga.c b/arch/arm/mach-imx/devices/platform-mxc_rnga.c index b4b7612b6e1..c58404badb5 100644 --- a/arch/arm/plat-mxc/devices/platform-mxc_rnga.c +++ b/arch/arm/mach-imx/devices/platform-mxc_rnga.c @@ -6,8 +6,8 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h> +#include "../hardware.h" +#include "devices-common.h"  struct imx_mxc_rnga_data {  	resource_size_t iobase; diff --git a/arch/arm/plat-mxc/devices/platform-mxc_rtc.c b/arch/arm/mach-imx/devices/platform-mxc_rtc.c index a5c9ad5721c..c7fffaadf84 100644 --- a/arch/arm/plat-mxc/devices/platform-mxc_rtc.c +++ b/arch/arm/mach-imx/devices/platform-mxc_rtc.c @@ -6,23 +6,24 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h> +#include "../hardware.h" +#include "devices-common.h" -#define imx_mxc_rtc_data_entry_single(soc)				\ +#define imx_mxc_rtc_data_entry_single(soc, _devid)			\  	{								\ +		.devid = _devid,					\  		.iobase = soc ## _RTC_BASE_ADDR,			\  		.irq = soc ## _INT_RTC,					\  	}  #ifdef CONFIG_SOC_IMX31  const struct imx_mxc_rtc_data imx31_mxc_rtc_data __initconst = -	imx_mxc_rtc_data_entry_single(MX31); +	imx_mxc_rtc_data_entry_single(MX31, "imx21-rtc");  #endif /* ifdef CONFIG_SOC_IMX31 */  #ifdef CONFIG_SOC_IMX35  const struct imx_mxc_rtc_data imx35_mxc_rtc_data __initconst = -	imx_mxc_rtc_data_entry_single(MX35); +	imx_mxc_rtc_data_entry_single(MX35, "imx21-rtc");  #endif /* ifdef CONFIG_SOC_IMX35 */  struct platform_device *__init imx_add_mxc_rtc( @@ -40,6 +41,6 @@ struct platform_device *__init imx_add_mxc_rtc(  		},  	}; -	return imx_add_platform_device("mxc_rtc", -1, +	return imx_add_platform_device(data->devid, -1,  			res, ARRAY_SIZE(res), NULL, 0);  } diff --git a/arch/arm/plat-mxc/devices/platform-mxc_w1.c b/arch/arm/mach-imx/devices/platform-mxc_w1.c index 96fa5ea91fe..88c18b720d6 100644 --- a/arch/arm/plat-mxc/devices/platform-mxc_w1.c +++ b/arch/arm/mach-imx/devices/platform-mxc_w1.c @@ -6,8 +6,8 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h> +#include "../hardware.h" +#include "devices-common.h"  #define imx_mxc_w1_data_entry_single(soc)				\  	{								\ diff --git a/arch/arm/plat-mxc/devices/platform-pata_imx.c b/arch/arm/mach-imx/devices/platform-pata_imx.c index 70e2f2a4471..e4ec11c8ce5 100644 --- a/arch/arm/plat-mxc/devices/platform-pata_imx.c +++ b/arch/arm/mach-imx/devices/platform-pata_imx.c @@ -3,8 +3,8 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h> +#include "../hardware.h" +#include "devices-common.h"  #define imx_pata_imx_data_entry_single(soc, _size)			\  	{								\ diff --git a/arch/arm/plat-mxc/devices/platform-sdhci-esdhc-imx.c b/arch/arm/mach-imx/devices/platform-sdhci-esdhc-imx.c index 3793e475cd9..e66a4e31631 100644 --- a/arch/arm/plat-mxc/devices/platform-sdhci-esdhc-imx.c +++ b/arch/arm/mach-imx/devices/platform-sdhci-esdhc-imx.c @@ -6,10 +6,11 @@   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h>  #include <linux/platform_data/mmc-esdhc-imx.h> +#include "../hardware.h" +#include "devices-common.h" +  #define imx_sdhci_esdhc_imx_data_entry_single(soc, _devid, _id, hwid) \  	{								\  		.devid = _devid,					\ diff --git a/arch/arm/plat-mxc/devices/platform-spi_imx.c b/arch/arm/mach-imx/devices/platform-spi_imx.c index 9c50c14c8f9..8880bcb11e0 100644 --- a/arch/arm/plat-mxc/devices/platform-spi_imx.c +++ b/arch/arm/mach-imx/devices/platform-spi_imx.c @@ -6,8 +6,8 @@   * the terms of the GNU General Public License version 2 as published by the   * Free Software Foundation.   */ -#include <mach/hardware.h> -#include <mach/devices-common.h> +#include "../hardware.h" +#include "devices-common.h"  #define imx_spi_imx_data_entry_single(soc, type, _devid, _id, hwid, _size) \  	{								\ diff --git a/arch/arm/mach-imx/ehci-imx25.c b/arch/arm/mach-imx/ehci-imx25.c index 576af744695..134c190e300 100644 --- a/arch/arm/mach-imx/ehci-imx25.c +++ b/arch/arm/mach-imx/ehci-imx25.c @@ -15,10 +15,10 @@  #include <linux/platform_device.h>  #include <linux/io.h> - -#include <mach/hardware.h>  #include <linux/platform_data/usb-ehci-mxc.h> +#include "hardware.h" +  #define USBCTRL_OTGBASE_OFFSET	0x600  #define MX25_OTG_SIC_SHIFT	29 diff --git a/arch/arm/mach-imx/ehci-imx27.c b/arch/arm/mach-imx/ehci-imx27.c index cd6e1f81508..448d9115539 100644 --- a/arch/arm/mach-imx/ehci-imx27.c +++ b/arch/arm/mach-imx/ehci-imx27.c @@ -15,10 +15,10 @@  #include <linux/platform_device.h>  #include <linux/io.h> - -#include <mach/hardware.h>  #include <linux/platform_data/usb-ehci-mxc.h> +#include "hardware.h" +  #define USBCTRL_OTGBASE_OFFSET	0x600  #define MX27_OTG_SIC_SHIFT	29 diff --git a/arch/arm/mach-imx/ehci-imx31.c b/arch/arm/mach-imx/ehci-imx31.c index 9a880c78af3..05de4e1e39d 100644 --- a/arch/arm/mach-imx/ehci-imx31.c +++ b/arch/arm/mach-imx/ehci-imx31.c @@ -15,10 +15,10 @@  #include <linux/platform_device.h>  #include <linux/io.h> - -#include <mach/hardware.h>  #include <linux/platform_data/usb-ehci-mxc.h> +#include "hardware.h" +  #define USBCTRL_OTGBASE_OFFSET	0x600  #define MX31_OTG_SIC_SHIFT	29 diff --git a/arch/arm/mach-imx/ehci-imx35.c b/arch/arm/mach-imx/ehci-imx35.c index 293397852e4..554e7cccff5 100644 --- a/arch/arm/mach-imx/ehci-imx35.c +++ b/arch/arm/mach-imx/ehci-imx35.c @@ -15,10 +15,10 @@  #include <linux/platform_device.h>  #include <linux/io.h> - -#include <mach/hardware.h>  #include <linux/platform_data/usb-ehci-mxc.h> +#include "hardware.h" +  #define USBCTRL_OTGBASE_OFFSET	0x600  #define MX35_OTG_SIC_SHIFT	29 diff --git a/arch/arm/mach-imx/ehci-imx5.c b/arch/arm/mach-imx/ehci-imx5.c index cf8d00e5cce..e49710b10c6 100644 --- a/arch/arm/mach-imx/ehci-imx5.c +++ b/arch/arm/mach-imx/ehci-imx5.c @@ -15,10 +15,10 @@  #include <linux/platform_device.h>  #include <linux/io.h> - -#include <mach/hardware.h>  #include <linux/platform_data/usb-ehci-mxc.h> +#include "hardware.h" +  #define MXC_OTG_OFFSET			0  #define MXC_H1_OFFSET			0x200  #define MXC_H2_OFFSET			0x400 diff --git a/arch/arm/plat-mxc/epit.c b/arch/arm/mach-imx/epit.c index 88726f4dbbf..04a5961beea 100644 --- a/arch/arm/plat-mxc/epit.c +++ b/arch/arm/mach-imx/epit.c @@ -51,10 +51,10 @@  #include <linux/clockchips.h>  #include <linux/clk.h>  #include <linux/err.h> - -#include <mach/hardware.h>  #include <asm/mach/time.h> -#include <mach/common.h> + +#include "common.h" +#include "hardware.h"  static struct clock_event_device clockevent_epit;  static enum clock_event_mode clockevent_mode = CLOCK_EVT_MODE_UNUSED; diff --git a/arch/arm/plat-mxc/include/mach/eukrea-baseboards.h b/arch/arm/mach-imx/eukrea-baseboards.h index a21d3313f99..a21d3313f99 100644 --- a/arch/arm/plat-mxc/include/mach/eukrea-baseboards.h +++ b/arch/arm/mach-imx/eukrea-baseboards.h diff --git a/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c b/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c index 98aef571b9f..b4c70028d35 100644 --- a/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c +++ b/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c @@ -29,11 +29,10 @@  #include <asm/mach/arch.h> -#include <mach/common.h> -#include <mach/iomux-mx27.h> -#include <mach/hardware.h> - +#include "common.h"  #include "devices-imx27.h" +#include "hardware.h" +#include "iomux-mx27.h"  static const int eukrea_mbimx27_pins[] __initconst = {  	/* UART2 */ diff --git a/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c b/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c index 0b84666792f..e2b70f4c1a2 100644 --- a/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c +++ b/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c @@ -26,14 +26,14 @@  #include <linux/spi/spi.h>  #include <video/platform_lcd.h> -#include <mach/hardware.h> -#include <mach/iomux-mx25.h> -#include <mach/common.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> -#include <mach/mx25.h> +#include "common.h"  #include "devices-imx25.h" +#include "hardware.h" +#include "iomux-mx25.h" +#include "mx25.h"  static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = {  	/* LCD */ diff --git a/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c b/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c index c6532a007d4..5a2d5ef12dd 100644 --- a/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c +++ b/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c @@ -36,11 +36,10 @@  #include <asm/mach/time.h>  #include <asm/mach/map.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/iomux-mx35.h> - +#include "common.h"  #include "devices-imx35.h" +#include "hardware.h" +#include "iomux-mx35.h"  static const struct fb_videomode fb_modedb[] = {  	{ diff --git a/arch/arm/mach-imx/eukrea_mbimxsd51-baseboard.c b/arch/arm/mach-imx/eukrea_mbimxsd51-baseboard.c index 8b0de30d7a3..9be6c1e69d6 100644 --- a/arch/arm/mach-imx/eukrea_mbimxsd51-baseboard.c +++ b/arch/arm/mach-imx/eukrea_mbimxsd51-baseboard.c @@ -36,11 +36,10 @@  #include <asm/mach/time.h>  #include <asm/mach/map.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/iomux-mx51.h> - +#include "common.h"  #include "devices-imx51.h" +#include "hardware.h" +#include "iomux-mx51.h"  static iomux_v3_cfg_t eukrea_mbimxsd51_pads[] = {  	/* LED */ diff --git a/arch/arm/plat-mxc/include/mach/hardware.h b/arch/arm/mach-imx/hardware.h index ebf10654bb4..3ce7fa3bd43 100644 --- a/arch/arm/plat-mxc/include/mach/hardware.h +++ b/arch/arm/mach-imx/hardware.h @@ -105,20 +105,20 @@  #define IMX_IO_ADDRESS(x)	IOMEM(IMX_IO_P2V(x)) -#include <mach/mxc.h> +#include "mxc.h" -#include <mach/mx6q.h> -#include <mach/mx50.h> -#include <mach/mx51.h> -#include <mach/mx53.h> -#include <mach/mx3x.h> -#include <mach/mx31.h> -#include <mach/mx35.h> -#include <mach/mx2x.h> -#include <mach/mx21.h> -#include <mach/mx27.h> -#include <mach/mx1.h> -#include <mach/mx25.h> +#include "mx6q.h" +#include "mx50.h" +#include "mx51.h" +#include "mx53.h" +#include "mx3x.h" +#include "mx31.h" +#include "mx35.h" +#include "mx2x.h" +#include "mx21.h" +#include "mx27.h" +#include "mx1.h" +#include "mx25.h"  #define imx_map_entry(soc, name, _type)	{				\  	.virtual = soc ## _IO_P2V(soc ## _ ## name ## _BASE_ADDR),	\ diff --git a/arch/arm/mach-imx/hotplug.c b/arch/arm/mach-imx/hotplug.c index b07b778dc9a..3dec962b077 100644 --- a/arch/arm/mach-imx/hotplug.c +++ b/arch/arm/mach-imx/hotplug.c @@ -13,7 +13,8 @@  #include <linux/errno.h>  #include <asm/cacheflush.h>  #include <asm/cp15.h> -#include <mach/common.h> + +#include "common.h"  static inline void cpu_enter_lowpower(void)  { diff --git a/arch/arm/plat-mxc/include/mach/iim.h b/arch/arm/mach-imx/iim.h index 315bffadafd..315bffadafd 100644 --- a/arch/arm/plat-mxc/include/mach/iim.h +++ b/arch/arm/mach-imx/iim.h diff --git a/arch/arm/mach-imx/imx27-dt.c b/arch/arm/mach-imx/imx27-dt.c index e80d5235dac..ebfae96543c 100644 --- a/arch/arm/mach-imx/imx27-dt.c +++ b/arch/arm/mach-imx/imx27-dt.c @@ -14,21 +14,22 @@  #include <linux/of_platform.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h> -#include <mach/common.h> -#include <mach/mx27.h> + +#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, "imx-i2c.0", NULL), -	OF_DEV_AUXDATA("fsl,imx27-i2c", MX27_I2C2_BASE_ADDR, "imx-i2c.1", 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, "mxc_nand.0", NULL), +	OF_DEV_AUXDATA("fsl,imx27-nand", MX27_NFC_BASE_ADDR, "imx27-nand.0", NULL),  	{ /* sentinel */ }  }; diff --git a/arch/arm/mach-imx/imx31-dt.c b/arch/arm/mach-imx/imx31-dt.c index a68ba207b2b..af476de2570 100644 --- a/arch/arm/mach-imx/imx31-dt.c +++ b/arch/arm/mach-imx/imx31-dt.c @@ -14,8 +14,9 @@  #include <linux/of_platform.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h> -#include <mach/common.h> -#include <mach/mx31.h> + +#include "common.h" +#include "mx31.h"  static const struct of_dev_auxdata imx31_auxdata_lookup[] __initconst = {  	OF_DEV_AUXDATA("fsl,imx31-uart", MX31_UART1_BASE_ADDR, diff --git a/arch/arm/mach-imx/imx51-dt.c b/arch/arm/mach-imx/imx51-dt.c index f233b4bb234..50742990a13 100644 --- a/arch/arm/mach-imx/imx51-dt.c +++ b/arch/arm/mach-imx/imx51-dt.c @@ -15,8 +15,9 @@  #include <linux/of_platform.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h> -#include <mach/common.h> -#include <mach/mx51.h> + +#include "common.h" +#include "mx51.h"  /*   * Lookup table for attaching a specific name and platform_data pointer to @@ -36,8 +37,8 @@ static const struct of_dev_auxdata imx51_auxdata_lookup[] __initconst = {  	OF_DEV_AUXDATA("fsl,imx51-ecspi", MX51_ECSPI1_BASE_ADDR, "imx51-ecspi.0", NULL),  	OF_DEV_AUXDATA("fsl,imx51-ecspi", MX51_ECSPI2_BASE_ADDR, "imx51-ecspi.1", NULL),  	OF_DEV_AUXDATA("fsl,imx51-cspi", MX51_CSPI_BASE_ADDR, "imx35-cspi.0", NULL), -	OF_DEV_AUXDATA("fsl,imx51-i2c", MX51_I2C1_BASE_ADDR, "imx-i2c.0", NULL), -	OF_DEV_AUXDATA("fsl,imx51-i2c", MX51_I2C2_BASE_ADDR, "imx-i2c.1", NULL), +	OF_DEV_AUXDATA("fsl,imx51-i2c", MX51_I2C1_BASE_ADDR, "imx21-i2c.0", NULL), +	OF_DEV_AUXDATA("fsl,imx51-i2c", MX51_I2C2_BASE_ADDR, "imx21-i2c.1", NULL),  	OF_DEV_AUXDATA("fsl,imx51-sdma", MX51_SDMA_BASE_ADDR, "imx35-sdma", NULL),  	OF_DEV_AUXDATA("fsl,imx51-wdt", MX51_WDOG1_BASE_ADDR, "imx2-wdt.0", NULL),  	{ /* sentinel */ } diff --git a/arch/arm/mach-imx/include/mach/dma-mx1-mx2.h b/arch/arm/mach-imx/include/mach/dma-mx1-mx2.h deleted file mode 100644 index df5f522da6b..00000000000 --- a/arch/arm/mach-imx/include/mach/dma-mx1-mx2.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef __MACH_DMA_MX1_MX2_H__ -#define __MACH_DMA_MX1_MX2_H__ -/* - * Don't use this header in new code, it will go away when all users are - * converted to mach/dma-v1.h - */ - -#include <mach/dma-v1.h> - -#endif /* ifndef __MACH_DMA_MX1_MX2_H__ */ diff --git a/arch/arm/mach-imx/iomux-imx31.c b/arch/arm/mach-imx/iomux-imx31.c index 82bd4403b45..cabefbc5e7c 100644 --- a/arch/arm/mach-imx/iomux-imx31.c +++ b/arch/arm/mach-imx/iomux-imx31.c @@ -22,8 +22,9 @@  #include <linux/spinlock.h>  #include <linux/io.h>  #include <linux/kernel.h> -#include <mach/hardware.h> -#include <mach/iomux-mx3.h> + +#include "hardware.h" +#include "iomux-mx3.h"  /*   * IOMUX register (base) addresses diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx1.h b/arch/arm/mach-imx/iomux-mx1.h index 6b1507cf378..95f4681d85d 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx1.h +++ b/arch/arm/mach-imx/iomux-mx1.h @@ -18,7 +18,7 @@  #ifndef __MACH_IOMUX_MX1_H__  #define __MACH_IOMUX_MX1_H__ -#include <mach/iomux-v1.h> +#include "iomux-v1.h"  #define PA0_AIN_SPI2_CLK	(GPIO_PORTA | GPIO_AIN | GPIO_OUT | 0)  #define PA0_AF_ETMTRACESYNC	(GPIO_PORTA | GPIO_AF | 0) diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx21.h b/arch/arm/mach-imx/iomux-mx21.h index 1495dfda783..a70cffceb08 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx21.h +++ b/arch/arm/mach-imx/iomux-mx21.h @@ -18,8 +18,8 @@  #ifndef __MACH_IOMUX_MX21_H__  #define __MACH_IOMUX_MX21_H__ -#include <mach/iomux-mx2x.h> -#include <mach/iomux-v1.h> +#include "iomux-mx2x.h" +#include "iomux-v1.h"  /* Primary GPIO pin functions */ diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx25.h b/arch/arm/mach-imx/iomux-mx25.h index c61ec0fc10d..be51e838375 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx25.h +++ b/arch/arm/mach-imx/iomux-mx25.h @@ -19,7 +19,7 @@  #ifndef __MACH_IOMUX_MX25_H__  #define __MACH_IOMUX_MX25_H__ -#include <mach/iomux-v3.h> +#include "iomux-v3.h"  /*   * IOMUX/PAD Bit field definitions diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx27.h b/arch/arm/mach-imx/iomux-mx27.h index d9f9a6e32d8..218e99e89e8 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx27.h +++ b/arch/arm/mach-imx/iomux-mx27.h @@ -19,8 +19,8 @@  #ifndef __MACH_IOMUX_MX27_H__  #define __MACH_IOMUX_MX27_H__ -#include <mach/iomux-mx2x.h> -#include <mach/iomux-v1.h> +#include "iomux-mx2x.h" +#include "iomux-v1.h"  /* Primary GPIO pin functions */ diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx2x.h b/arch/arm/mach-imx/iomux-mx2x.h index 7a9b20abda0..7a9b20abda0 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx2x.h +++ b/arch/arm/mach-imx/iomux-mx2x.h diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx3.h b/arch/arm/mach-imx/iomux-mx3.h index f79f78a1c0e..f79f78a1c0e 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx3.h +++ b/arch/arm/mach-imx/iomux-mx3.h diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx35.h b/arch/arm/mach-imx/iomux-mx35.h index 3117c18bbbd..90bfa6b5be6 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx35.h +++ b/arch/arm/mach-imx/iomux-mx35.h @@ -19,7 +19,7 @@  #ifndef __MACH_IOMUX_MX35_H__  #define __MACH_IOMUX_MX35_H__ -#include <mach/iomux-v3.h> +#include "iomux-v3.h"  /*   * The naming convention for the pad modes is MX35_PAD_<padname>__<padmode> diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx50.h b/arch/arm/mach-imx/iomux-mx50.h index 98e7fd0b908..00f56e0e800 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx50.h +++ b/arch/arm/mach-imx/iomux-mx50.h @@ -19,7 +19,7 @@  #ifndef __MACH_IOMUX_MX50_H__  #define __MACH_IOMUX_MX50_H__ -#include <mach/iomux-v3.h> +#include "iomux-v3.h"  #define MX50_ELCDIF_PAD_CTRL	(PAD_CTL_PKE | PAD_CTL_DSE_HIGH) diff --git a/arch/arm/plat-mxc/include/mach/iomux-mx51.h b/arch/arm/mach-imx/iomux-mx51.h index 2623e7a2e19..75bbcc4aa2d 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-mx51.h +++ b/arch/arm/mach-imx/iomux-mx51.h @@ -13,7 +13,7 @@  #ifndef __MACH_IOMUX_MX51_H__  #define __MACH_IOMUX_MX51_H__ -#include <mach/iomux-v3.h> +#include "iomux-v3.h"  #define __NA_	0x000 diff --git a/arch/arm/plat-mxc/iomux-v1.c b/arch/arm/mach-imx/iomux-v1.c index 1f73963bc13..2b156d1d9e2 100644 --- a/arch/arm/plat-mxc/iomux-v1.c +++ b/arch/arm/mach-imx/iomux-v1.c @@ -28,9 +28,10 @@  #include <linux/string.h>  #include <linux/gpio.h> -#include <mach/hardware.h>  #include <asm/mach/map.h> -#include <mach/iomux-v1.h> + +#include "hardware.h" +#include "iomux-v1.h"  static void __iomem *imx_iomuxv1_baseaddr;  static unsigned imx_iomuxv1_numports; diff --git a/arch/arm/plat-mxc/include/mach/iomux-v1.h b/arch/arm/mach-imx/iomux-v1.h index 02651a40fe2..02651a40fe2 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-v1.h +++ b/arch/arm/mach-imx/iomux-v1.h diff --git a/arch/arm/plat-mxc/iomux-v3.c b/arch/arm/mach-imx/iomux-v3.c index 99a9cdb9d6b..9dae74bf47f 100644 --- a/arch/arm/plat-mxc/iomux-v3.c +++ b/arch/arm/mach-imx/iomux-v3.c @@ -25,9 +25,10 @@  #include <linux/string.h>  #include <linux/gpio.h> -#include <mach/hardware.h>  #include <asm/mach/map.h> -#include <mach/iomux-v3.h> + +#include "hardware.h" +#include "iomux-v3.h"  static void __iomem *base; diff --git a/arch/arm/plat-mxc/include/mach/iomux-v3.h b/arch/arm/mach-imx/iomux-v3.h index 2fa3b543010..2fa3b543010 100644 --- a/arch/arm/plat-mxc/include/mach/iomux-v3.h +++ b/arch/arm/mach-imx/iomux-v3.h diff --git a/arch/arm/plat-mxc/include/mach/iram.h b/arch/arm/mach-imx/iram.h index 022690c3370..022690c3370 100644 --- a/arch/arm/plat-mxc/include/mach/iram.h +++ b/arch/arm/mach-imx/iram.h diff --git a/arch/arm/plat-mxc/iram_alloc.c b/arch/arm/mach-imx/iram_alloc.c index 074c3869626..6c80424f678 100644 --- a/arch/arm/plat-mxc/iram_alloc.c +++ b/arch/arm/mach-imx/iram_alloc.c @@ -22,7 +22,8 @@  #include <linux/module.h>  #include <linux/spinlock.h>  #include <linux/genalloc.h> -#include <mach/iram.h> + +#include "iram.h"  static unsigned long iram_phys_base;  static void __iomem *iram_virt_base; diff --git a/arch/arm/plat-mxc/irq-common.c b/arch/arm/mach-imx/irq-common.c index b6e11458e5a..b6e11458e5a 100644 --- a/arch/arm/plat-mxc/irq-common.c +++ b/arch/arm/mach-imx/irq-common.c diff --git a/arch/arm/plat-mxc/irq-common.h b/arch/arm/mach-imx/irq-common.h index 6ccb3a14c69..5b2dabba330 100644 --- a/arch/arm/plat-mxc/irq-common.h +++ b/arch/arm/mach-imx/irq-common.h @@ -19,6 +19,9 @@  #ifndef __PLAT_MXC_IRQ_COMMON_H__  #define __PLAT_MXC_IRQ_COMMON_H__ +/* all normal IRQs can be FIQs */ +#define FIQ_START	0 +  struct mxc_extra_irq  {  	int (*set_priority)(unsigned char irq, unsigned char prio); diff --git a/arch/arm/mach-imx/lluart.c b/arch/arm/mach-imx/lluart.c index c40a34c0048..5f1510363ee 100644 --- a/arch/arm/mach-imx/lluart.c +++ b/arch/arm/mach-imx/lluart.c @@ -14,7 +14,8 @@  #include <asm/page.h>  #include <asm/sizes.h>  #include <asm/mach/map.h> -#include <mach/hardware.h> + +#include "hardware.h"  static struct map_desc imx_lluart_desc = {  #ifdef CONFIG_DEBUG_IMX6Q_UART2 diff --git a/arch/arm/mach-imx/mach-apf9328.c b/arch/arm/mach-imx/mach-apf9328.c index 7b99a79722b..5c9bd2c66e6 100644 --- a/arch/arm/mach-imx/mach-apf9328.c +++ b/arch/arm/mach-imx/mach-apf9328.c @@ -25,11 +25,10 @@  #include <asm/mach/arch.h>  #include <asm/mach/time.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/iomux-mx1.h> - +#include "common.h"  #include "devices-imx1.h" +#include "hardware.h" +#include "iomux-mx1.h"  static const int apf9328_pins[] __initconst = {  	/* UART1 */ diff --git a/arch/arm/mach-imx/mach-armadillo5x0.c b/arch/arm/mach-imx/mach-armadillo5x0.c index 5985ed1b8c9..59bd6b06a6b 100644 --- a/arch/arm/mach-imx/mach-armadillo5x0.c +++ b/arch/arm/mach-imx/mach-armadillo5x0.c @@ -41,19 +41,18 @@  #include <linux/regulator/machine.h>  #include <linux/regulator/fixed.h> -#include <mach/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h>  #include <asm/memory.h>  #include <asm/mach/map.h> -#include <mach/common.h> -#include <mach/iomux-mx3.h> -#include <mach/ulpi.h> - +#include "common.h"  #include "devices-imx31.h"  #include "crmregs-imx3.h" +#include "hardware.h" +#include "iomux-mx3.h" +#include "ulpi.h"  static int armadillo5x0_pins[] = {  	/* UART1 */ diff --git a/arch/arm/mach-imx/mach-bug.c b/arch/arm/mach-imx/mach-bug.c index 9a9897749dd..3a39d5aec07 100644 --- a/arch/arm/mach-imx/mach-bug.c +++ b/arch/arm/mach-imx/mach-bug.c @@ -19,15 +19,14 @@  #include <linux/init.h>  #include <linux/platform_device.h> -#include <mach/iomux-mx3.h> -#include <mach/hardware.h> -#include <mach/common.h> -  #include <asm/mach/time.h>  #include <asm/mach/arch.h>  #include <asm/mach-types.h> +#include "common.h"  #include "devices-imx31.h" +#include "hardware.h" +#include "iomux-mx3.h"  static const struct imxuart_platform_data uart_pdata __initconst = {  	.flags = IMXUART_HAVE_RTSCTS, diff --git a/arch/arm/mach-imx/mach-cpuimx27.c b/arch/arm/mach-imx/mach-cpuimx27.c index 2bb9e18d9ee..12a370646b4 100644 --- a/arch/arm/mach-imx/mach-cpuimx27.c +++ b/arch/arm/mach-imx/mach-cpuimx27.c @@ -34,13 +34,12 @@  #include <asm/mach/time.h>  #include <asm/mach/map.h> -#include <mach/eukrea-baseboards.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/iomux-mx27.h> -#include <mach/ulpi.h> - +#include "common.h"  #include "devices-imx27.h" +#include "eukrea-baseboards.h" +#include "hardware.h" +#include "iomux-mx27.h" +#include "ulpi.h"  static const int eukrea_cpuimx27_pins[] __initconst = {  	/* UART1 */ diff --git a/arch/arm/mach-imx/mach-cpuimx35.c b/arch/arm/mach-imx/mach-cpuimx35.c index d49b0ec6bde..5a31bf8c8f4 100644 --- a/arch/arm/mach-imx/mach-cpuimx35.c +++ b/arch/arm/mach-imx/mach-cpuimx35.c @@ -37,12 +37,11 @@  #include <asm/mach/time.h>  #include <asm/mach/map.h> -#include <mach/eukrea-baseboards.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/iomux-mx35.h> - +#include "common.h"  #include "devices-imx35.h" +#include "eukrea-baseboards.h" +#include "hardware.h" +#include "iomux-mx35.h"  static const struct imxuart_platform_data uart_pdata __initconst = {  	.flags = IMXUART_HAVE_RTSCTS, diff --git a/arch/arm/mach-imx/mach-cpuimx51sd.c b/arch/arm/mach-imx/mach-cpuimx51sd.c index b87cc49ab1e..b727de029c8 100644 --- a/arch/arm/mach-imx/mach-cpuimx51sd.c +++ b/arch/arm/mach-imx/mach-cpuimx51sd.c @@ -26,18 +26,17 @@  #include <linux/spi/spi.h>  #include <linux/can/platform/mcp251x.h> -#include <mach/eukrea-baseboards.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/iomux-mx51.h> -  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h> +#include "common.h"  #include "devices-imx51.h"  #include "cpu_op-mx51.h" +#include "eukrea-baseboards.h" +#include "hardware.h" +#include "iomux-mx51.h"  #define USBH1_RST		IMX_GPIO_NR(2, 28)  #define ETH_RST			IMX_GPIO_NR(2, 31) diff --git a/arch/arm/mach-imx/mach-eukrea_cpuimx25.c b/arch/arm/mach-imx/mach-eukrea_cpuimx25.c index 017bbb70ea4..75027a5ad8b 100644 --- a/arch/arm/mach-imx/mach-eukrea_cpuimx25.c +++ b/arch/arm/mach-imx/mach-eukrea_cpuimx25.c @@ -27,18 +27,18 @@  #include <linux/usb/otg.h>  #include <linux/usb/ulpi.h> -#include <mach/eukrea-baseboards.h> -#include <mach/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h>  #include <asm/memory.h>  #include <asm/mach/map.h> -#include <mach/common.h> -#include <mach/mx25.h> -#include <mach/iomux-mx25.h> +#include "common.h"  #include "devices-imx25.h" +#include "eukrea-baseboards.h" +#include "hardware.h" +#include "iomux-mx25.h" +#include "mx25.h"  static const struct imxuart_platform_data uart_pdata __initconst = {  	.flags = IMXUART_HAVE_RTSCTS, diff --git a/arch/arm/mach-imx/mach-imx27_visstrim_m10.c b/arch/arm/mach-imx/mach-imx27_visstrim_m10.c index 141756f00ae..b7442267912 100644 --- a/arch/arm/mach-imx/mach-imx27_visstrim_m10.c +++ b/arch/arm/mach-imx/mach-imx27_visstrim_m10.c @@ -40,11 +40,11 @@  #include <asm/mach/time.h>  #include <asm/system_info.h>  #include <asm/memblock.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/iomux-mx27.h> +#include "common.h"  #include "devices-imx27.h" +#include "hardware.h" +#include "iomux-mx27.h"  #define TVP5150_RSTN (GPIO_PORTC + 18)  #define TVP5150_PWDN (GPIO_PORTC + 19) diff --git a/arch/arm/mach-imx/mach-imx27ipcam.c b/arch/arm/mach-imx/mach-imx27ipcam.c index 7381387a890..53a86011293 100644 --- a/arch/arm/mach-imx/mach-imx27ipcam.c +++ b/arch/arm/mach-imx/mach-imx27ipcam.c @@ -17,11 +17,11 @@  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/iomux-mx27.h> +#include "hardware.h" +#include "common.h"  #include "devices-imx27.h" +#include "iomux-mx27.h"  static const int mx27ipcam_pins[] __initconst = {  	/* UART1 */ diff --git a/arch/arm/mach-imx/mach-imx27lite.c b/arch/arm/mach-imx/mach-imx27lite.c index 1f45b918922..fc8dce93137 100644 --- a/arch/arm/mach-imx/mach-imx27lite.c +++ b/arch/arm/mach-imx/mach-imx27lite.c @@ -20,11 +20,11 @@  #include <asm/mach/arch.h>  #include <asm/mach/time.h>  #include <asm/mach/map.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/iomux-mx27.h> +#include "common.h"  #include "devices-imx27.h" +#include "hardware.h" +#include "iomux-mx27.h"  static const int mx27lite_pins[] __initconst = {  	/* UART1 */ diff --git a/arch/arm/mach-imx/mach-imx53.c b/arch/arm/mach-imx/mach-imx53.c index 29711e95579..e71e62610eb 100644 --- a/arch/arm/mach-imx/mach-imx53.c +++ b/arch/arm/mach-imx/mach-imx53.c @@ -19,8 +19,9 @@  #include <linux/of_platform.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h> -#include <mach/common.h> -#include <mach/mx53.h> + +#include "common.h" +#include "mx53.h"  /*   * Lookup table for attaching a specific name and platform_data pointer to @@ -42,9 +43,9 @@ static const struct of_dev_auxdata imx53_auxdata_lookup[] __initconst = {  	OF_DEV_AUXDATA("fsl,imx53-ecspi", MX53_ECSPI1_BASE_ADDR, "imx51-ecspi.0", NULL),  	OF_DEV_AUXDATA("fsl,imx53-ecspi", MX53_ECSPI2_BASE_ADDR, "imx51-ecspi.1", NULL),  	OF_DEV_AUXDATA("fsl,imx53-cspi", MX53_CSPI_BASE_ADDR, "imx35-cspi.0", NULL), -	OF_DEV_AUXDATA("fsl,imx53-i2c", MX53_I2C1_BASE_ADDR, "imx-i2c.0", NULL), -	OF_DEV_AUXDATA("fsl,imx53-i2c", MX53_I2C2_BASE_ADDR, "imx-i2c.1", NULL), -	OF_DEV_AUXDATA("fsl,imx53-i2c", MX53_I2C3_BASE_ADDR, "imx-i2c.2", NULL), +	OF_DEV_AUXDATA("fsl,imx53-i2c", MX53_I2C1_BASE_ADDR, "imx21-i2c.0", NULL), +	OF_DEV_AUXDATA("fsl,imx53-i2c", MX53_I2C2_BASE_ADDR, "imx21-i2c.1", NULL), +	OF_DEV_AUXDATA("fsl,imx53-i2c", MX53_I2C3_BASE_ADDR, "imx21-i2c.2", NULL),  	OF_DEV_AUXDATA("fsl,imx53-sdma", MX53_SDMA_BASE_ADDR, "imx35-sdma", NULL),  	OF_DEV_AUXDATA("fsl,imx53-wdt", MX53_WDOG1_BASE_ADDR, "imx2-wdt.0", NULL),  	{ /* sentinel */ } diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c index 47c91f7185d..978b6dd00de 100644 --- a/arch/arm/mach-imx/mach-imx6q.c +++ b/arch/arm/mach-imx/mach-imx6q.c @@ -33,10 +33,10 @@  #include <asm/mach/arch.h>  #include <asm/mach/time.h>  #include <asm/system_misc.h> -#include <mach/common.h> -#include <mach/cpuidle.h> -#include <mach/hardware.h> +#include "common.h" +#include "cpuidle.h" +#include "hardware.h"  void imx6q_restart(char mode, const char *cmd)  { diff --git a/arch/arm/mach-imx/mach-kzm_arm11_01.c b/arch/arm/mach-imx/mach-kzm_arm11_01.c index 0330078ff78..2e536ea5344 100644 --- a/arch/arm/mach-imx/mach-kzm_arm11_01.c +++ b/arch/arm/mach-imx/mach-kzm_arm11_01.c @@ -36,11 +36,10 @@  #include <asm/mach/map.h>  #include <asm/mach/time.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/iomux-mx3.h> - +#include "common.h"  #include "devices-imx31.h" +#include "hardware.h" +#include "iomux-mx3.h"  #define KZM_ARM11_IO_ADDRESS(x) (IOMEM(					\  	IMX_IO_P2V_MODULE(x, MX31_CS4) ?:				\ diff --git a/arch/arm/mach-imx/mach-mx1ads.c b/arch/arm/mach-imx/mach-mx1ads.c index 667f359a2e8..06b483783e6 100644 --- a/arch/arm/mach-imx/mach-mx1ads.c +++ b/arch/arm/mach-imx/mach-mx1ads.c @@ -23,11 +23,10 @@  #include <asm/mach/arch.h>  #include <asm/mach/time.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/iomux-mx1.h> - +#include "common.h"  #include "devices-imx1.h" +#include "hardware.h" +#include "iomux-mx1.h"  static const int mx1ads_pins[] __initconst = {  	/* UART1 */ diff --git a/arch/arm/mach-imx/mach-mx21ads.c b/arch/arm/mach-imx/mach-mx21ads.c index ed22e3fe6ec..6adb3136bb0 100644 --- a/arch/arm/mach-imx/mach-mx21ads.c +++ b/arch/arm/mach-imx/mach-mx21ads.c @@ -18,15 +18,15 @@  #include <linux/mtd/mtd.h>  #include <linux/mtd/physmap.h>  #include <linux/gpio.h> -#include <mach/common.h> -#include <mach/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h>  #include <asm/mach/map.h> -#include <mach/iomux-mx21.h> +#include "common.h"  #include "devices-imx21.h" +#include "hardware.h" +#include "iomux-mx21.h"  /*   * Memory-mapped I/O on MX21ADS base board diff --git a/arch/arm/mach-imx/mach-mx25_3ds.c b/arch/arm/mach-imx/mach-mx25_3ds.c index ce247fd1269..b1b03aa55bb 100644 --- a/arch/arm/mach-imx/mach-mx25_3ds.c +++ b/arch/arm/mach-imx/mach-mx25_3ds.c @@ -31,17 +31,17 @@  #include <linux/platform_device.h>  #include <linux/usb/otg.h> -#include <mach/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h>  #include <asm/memory.h>  #include <asm/mach/map.h> -#include <mach/common.h> -#include <mach/mx25.h> -#include <mach/iomux-mx25.h> +#include "common.h"  #include "devices-imx25.h" +#include "hardware.h" +#include "iomux-mx25.h" +#include "mx25.h"  #define MX25PDK_CAN_PWDN	IMX_GPIO_NR(4, 6) diff --git a/arch/arm/mach-imx/mach-mx27_3ds.c b/arch/arm/mach-imx/mach-mx27_3ds.c index 05996f39005..d0e547fa925 100644 --- a/arch/arm/mach-imx/mach-mx27_3ds.c +++ b/arch/arm/mach-imx/mach-mx27_3ds.c @@ -36,13 +36,13 @@  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/iomux-mx27.h> -#include <mach/ulpi.h> -#include <mach/3ds_debugboard.h> +#include "3ds_debugboard.h" +#include "common.h"  #include "devices-imx27.h" +#include "hardware.h" +#include "iomux-mx27.h" +#include "ulpi.h"  #define SD1_EN_GPIO		IMX_GPIO_NR(2, 25)  #define OTG_PHY_RESET_GPIO	IMX_GPIO_NR(2, 23) diff --git a/arch/arm/mach-imx/mach-mx27ads.c b/arch/arm/mach-imx/mach-mx27ads.c index 7dc59bac0e5..3d036f57f0e 100644 --- a/arch/arm/mach-imx/mach-mx27ads.c +++ b/arch/arm/mach-imx/mach-mx27ads.c @@ -21,15 +21,15 @@  #include <linux/mtd/physmap.h>  #include <linux/i2c.h>  #include <linux/irq.h> -#include <mach/common.h> -#include <mach/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h>  #include <asm/mach/map.h> -#include <mach/iomux-mx27.h> +#include "common.h"  #include "devices-imx27.h" +#include "hardware.h" +#include "iomux-mx27.h"  /*   * Base address of PBC controller, CS4 diff --git a/arch/arm/mach-imx/mach-mx31_3ds.c b/arch/arm/mach-imx/mach-mx31_3ds.c index 8915f937b7d..bc301befdd0 100644 --- a/arch/arm/mach-imx/mach-mx31_3ds.c +++ b/arch/arm/mach-imx/mach-mx31_3ds.c @@ -30,19 +30,19 @@  #include <media/soc_camera.h> -#include <mach/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h>  #include <asm/memory.h>  #include <asm/mach/map.h>  #include <asm/memblock.h> -#include <mach/common.h> -#include <mach/iomux-mx3.h> -#include <mach/3ds_debugboard.h> -#include <mach/ulpi.h> +#include "3ds_debugboard.h" +#include "common.h"  #include "devices-imx31.h" +#include "hardware.h" +#include "iomux-mx3.h" +#include "ulpi.h"  static int mx31_3ds_pins[] = {  	/* UART1 */ @@ -393,7 +393,7 @@ static struct regulator_init_data gpo_init = {  };  static struct regulator_consumer_supply vmmc2_consumers[] = { -	REGULATOR_SUPPLY("vmmc", "mxc-mmc.0"), +	REGULATOR_SUPPLY("vmmc", "imx31-mmc.0"),  };  static struct regulator_init_data vmmc2_init = { diff --git a/arch/arm/mach-imx/mach-mx31ads.c b/arch/arm/mach-imx/mach-mx31ads.c index e774b07f48d..8b56f8883f3 100644 --- a/arch/arm/mach-imx/mach-mx31ads.c +++ b/arch/arm/mach-imx/mach-mx31ads.c @@ -28,8 +28,6 @@  #include <asm/mach/time.h>  #include <asm/memory.h>  #include <asm/mach/map.h> -#include <mach/common.h> -#include <mach/iomux-mx3.h>  #ifdef CONFIG_MACH_MX31ADS_WM1133_EV1  #include <linux/mfd/wm8350/audio.h> @@ -37,7 +35,10 @@  #include <linux/mfd/wm8350/pmic.h>  #endif +#include "common.h"  #include "devices-imx31.h" +#include "hardware.h" +#include "iomux-mx3.h"  /* Base address of PBC controller */  #define PBC_BASE_ADDRESS	MX31_CS4_BASE_ADDR_VIRT diff --git a/arch/arm/mach-imx/mach-mx31lilly.c b/arch/arm/mach-imx/mach-mx31lilly.c index 34b9bf075da..08b9965c8b3 100644 --- a/arch/arm/mach-imx/mach-mx31lilly.c +++ b/arch/arm/mach-imx/mach-mx31lilly.c @@ -42,13 +42,12 @@  #include <asm/mach/time.h>  #include <asm/mach/map.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/iomux-mx3.h> -#include <mach/board-mx31lilly.h> -#include <mach/ulpi.h> - +#include "board-mx31lilly.h" +#include "common.h"  #include "devices-imx31.h" +#include "hardware.h" +#include "iomux-mx3.h" +#include "ulpi.h"  /*   * This file contains module-specific initialization routines for LILLY-1131. diff --git a/arch/arm/mach-imx/mach-mx31lite.c b/arch/arm/mach-imx/mach-mx31lite.c index ef57cff5abf..bdcd92e5951 100644 --- a/arch/arm/mach-imx/mach-mx31lite.c +++ b/arch/arm/mach-imx/mach-mx31lite.c @@ -39,13 +39,12 @@  #include <asm/page.h>  #include <asm/setup.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/board-mx31lite.h> -#include <mach/iomux-mx3.h> -#include <mach/ulpi.h> - +#include "board-mx31lite.h" +#include "common.h"  #include "devices-imx31.h" +#include "hardware.h" +#include "iomux-mx3.h" +#include "ulpi.h"  /*   * This file contains the module-specific initialization routines. diff --git a/arch/arm/mach-imx/mach-mx31moboard.c b/arch/arm/mach-imx/mach-mx31moboard.c index 459e754ef8c..2517cfa9f26 100644 --- a/arch/arm/mach-imx/mach-mx31moboard.c +++ b/arch/arm/mach-imx/mach-mx31moboard.c @@ -42,14 +42,14 @@  #include <asm/mach/time.h>  #include <asm/mach/map.h>  #include <asm/memblock.h> -#include <mach/board-mx31moboard.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/iomux-mx3.h> -#include <mach/ulpi.h>  #include <linux/platform_data/asoc-imx-ssi.h> +#include "board-mx31moboard.h" +#include "common.h"  #include "devices-imx31.h" +#include "hardware.h" +#include "iomux-mx3.h" +#include "ulpi.h"  static unsigned int moboard_pins[] = {  	/* UART0 */ @@ -175,11 +175,11 @@ static const struct spi_imx_master moboard_spi1_pdata __initconst = {  static struct regulator_consumer_supply sdhc_consumers[] = {  	{ -		.dev_name = "mxc-mmc.0", +		.dev_name = "imx31-mmc.0",  		.supply	= "sdhc0_vcc",  	},  	{ -		.dev_name = "mxc-mmc.1", +		.dev_name = "imx31-mmc.1",  		.supply	= "sdhc1_vcc",  	},  }; diff --git a/arch/arm/mach-imx/mach-mx35_3ds.c b/arch/arm/mach-imx/mach-mx35_3ds.c index 504983c68aa..5277da45d60 100644 --- a/arch/arm/mach-imx/mach-mx35_3ds.c +++ b/arch/arm/mach-imx/mach-mx35_3ds.c @@ -43,15 +43,15 @@  #include <asm/mach/map.h>  #include <asm/memblock.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/iomux-mx35.h> -#include <mach/3ds_debugboard.h>  #include <video/platform_lcd.h>  #include <media/soc_camera.h> +#include "3ds_debugboard.h" +#include "common.h"  #include "devices-imx35.h" +#include "hardware.h" +#include "iomux-mx35.h"  #define GPIO_MC9S08DZ60_GPS_ENABLE 0  #define GPIO_MC9S08DZ60_HDD_ENABLE 4 diff --git a/arch/arm/mach-imx/mach-mx50_rdp.c b/arch/arm/mach-imx/mach-mx50_rdp.c index 42b66e8d961..0c1f88a80bd 100644 --- a/arch/arm/mach-imx/mach-mx50_rdp.c +++ b/arch/arm/mach-imx/mach-mx50_rdp.c @@ -24,17 +24,16 @@  #include <linux/delay.h>  #include <linux/io.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/iomux-mx50.h> -  #include <asm/irq.h>  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h> +#include "common.h"  #include "devices-imx50.h" +#include "hardware.h" +#include "iomux-mx50.h"  #define FEC_EN		IMX_GPIO_NR(6, 23)  #define FEC_RESET_B	IMX_GPIO_NR(4, 12) diff --git a/arch/arm/mach-imx/mach-mx51_3ds.c b/arch/arm/mach-imx/mach-mx51_3ds.c index 9ee84a4af63..abc25bd1107 100644 --- a/arch/arm/mach-imx/mach-mx51_3ds.c +++ b/arch/arm/mach-imx/mach-mx51_3ds.c @@ -19,12 +19,11 @@  #include <asm/mach/arch.h>  #include <asm/mach/time.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/iomux-mx51.h> -#include <mach/3ds_debugboard.h> - +#include "3ds_debugboard.h" +#include "common.h"  #include "devices-imx51.h" +#include "hardware.h" +#include "iomux-mx51.h"  #define MX51_3DS_ECSPI2_CS	(GPIO_PORTC + 28) diff --git a/arch/arm/mach-imx/mach-mx51_babbage.c b/arch/arm/mach-imx/mach-mx51_babbage.c index 7b31cbde877..d9a84ca2199 100644 --- a/arch/arm/mach-imx/mach-mx51_babbage.c +++ b/arch/arm/mach-imx/mach-mx51_babbage.c @@ -20,17 +20,16 @@  #include <linux/spi/flash.h>  #include <linux/spi/spi.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/iomux-mx51.h> -  #include <asm/setup.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h> +#include "common.h"  #include "devices-imx51.h"  #include "cpu_op-mx51.h" +#include "hardware.h" +#include "iomux-mx51.h"  #define BABBAGE_USB_HUB_RESET	IMX_GPIO_NR(1, 7)  #define BABBAGE_USBH1_STP	IMX_GPIO_NR(1, 27) diff --git a/arch/arm/mach-imx/mach-mxt_td60.c b/arch/arm/mach-imx/mach-mxt_td60.c index 0bf6d30aa32..f4a8c7e108e 100644 --- a/arch/arm/mach-imx/mach-mxt_td60.c +++ b/arch/arm/mach-imx/mach-mxt_td60.c @@ -21,17 +21,17 @@  #include <linux/mtd/physmap.h>  #include <linux/i2c.h>  #include <linux/irq.h> -#include <mach/common.h> -#include <mach/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h>  #include <asm/mach/map.h>  #include <linux/gpio.h> -#include <mach/iomux-mx27.h>  #include <linux/i2c/pca953x.h> +#include "common.h"  #include "devices-imx27.h" +#include "hardware.h" +#include "iomux-mx27.h"  static const int mxt_td60_pins[] __initconst = {  	/* UART0 */ diff --git a/arch/arm/mach-imx/mach-pca100.c b/arch/arm/mach-imx/mach-pca100.c index de8516b7d69..eee369fa94a 100644 --- a/arch/arm/mach-imx/mach-pca100.c +++ b/arch/arm/mach-imx/mach-pca100.c @@ -32,13 +32,13 @@  #include <asm/mach/arch.h>  #include <asm/mach-types.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/iomux-mx27.h>  #include <asm/mach/time.h> -#include <mach/ulpi.h> +#include "common.h"  #include "devices-imx27.h" +#include "hardware.h" +#include "iomux-mx27.h" +#include "ulpi.h"  #define OTG_PHY_CS_GPIO (GPIO_PORTB + 23)  #define USBH2_PHY_CS_GPIO (GPIO_PORTB + 24) diff --git a/arch/arm/mach-imx/mach-pcm037.c b/arch/arm/mach-imx/mach-pcm037.c index e3c45130fb3..547fef133f6 100644 --- a/arch/arm/mach-imx/mach-pcm037.c +++ b/arch/arm/mach-imx/mach-pcm037.c @@ -42,13 +42,13 @@  #include <asm/mach/time.h>  #include <asm/mach/map.h>  #include <asm/memblock.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/iomux-mx3.h> -#include <mach/ulpi.h> +#include "common.h"  #include "devices-imx31.h" +#include "hardware.h" +#include "iomux-mx3.h"  #include "pcm037.h" +#include "ulpi.h"  static enum pcm037_board_variant pcm037_instance = PCM037_PCM970; diff --git a/arch/arm/mach-imx/mach-pcm037_eet.c b/arch/arm/mach-imx/mach-pcm037_eet.c index 11ffa81ad17..8fd8255068e 100644 --- a/arch/arm/mach-imx/mach-pcm037_eet.c +++ b/arch/arm/mach-imx/mach-pcm037_eet.c @@ -11,13 +11,12 @@  #include <linux/platform_device.h>  #include <linux/spi/spi.h> -#include <mach/common.h> -#include <mach/iomux-mx3.h> -  #include <asm/mach-types.h>  #include "pcm037.h" +#include "common.h"  #include "devices-imx31.h" +#include "iomux-mx3.h"  static unsigned int pcm037_eet_pins[] = {  	/* Reserve and hardwire GPIO 57 high - S6E63D6 chipselect */ diff --git a/arch/arm/mach-imx/mach-pcm038.c b/arch/arm/mach-imx/mach-pcm038.c index 95f49d936fd..4aa0d079860 100644 --- a/arch/arm/mach-imx/mach-pcm038.c +++ b/arch/arm/mach-imx/mach-pcm038.c @@ -33,13 +33,12 @@  #include <asm/mach/arch.h>  #include <asm/mach/time.h> -#include <mach/board-pcm038.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/iomux-mx27.h> -#include <mach/ulpi.h> - +#include "board-pcm038.h" +#include "common.h"  #include "devices-imx27.h" +#include "hardware.h" +#include "iomux-mx27.h" +#include "ulpi.h"  static const int pcm038_pins[] __initconst = {  	/* UART1 */ @@ -212,7 +211,7 @@ static const struct spi_imx_master pcm038_spi0_data __initconst = {  static struct regulator_consumer_supply sdhc1_consumers[] = {  	{ -		.dev_name = "mxc-mmc.1", +		.dev_name = "imx21-mmc.1",  		.supply	= "sdhc_vcc",  	},  }; diff --git a/arch/arm/mach-imx/mach-pcm043.c b/arch/arm/mach-imx/mach-pcm043.c index e4bd4387e34..92445440221 100644 --- a/arch/arm/mach-imx/mach-pcm043.c +++ b/arch/arm/mach-imx/mach-pcm043.c @@ -33,12 +33,11 @@  #include <asm/mach/time.h>  #include <asm/mach/map.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/iomux-mx35.h> -#include <mach/ulpi.h> - +#include "common.h"  #include "devices-imx35.h" +#include "hardware.h" +#include "iomux-mx35.h" +#include "ulpi.h"  static const struct fb_videomode fb_modedb[] = {  	{ diff --git a/arch/arm/mach-imx/mach-qong.c b/arch/arm/mach-imx/mach-qong.c index fb25fbd3122..96d9a91f8a3 100644 --- a/arch/arm/mach-imx/mach-qong.c +++ b/arch/arm/mach-imx/mach-qong.c @@ -21,17 +21,17 @@  #include <linux/mtd/nand.h>  #include <linux/gpio.h> -#include <mach/hardware.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/time.h>  #include <asm/mach/map.h> -#include <mach/common.h>  #include <asm/page.h>  #include <asm/setup.h> -#include <mach/iomux-mx3.h> +#include "common.h"  #include "devices-imx31.h" +#include "hardware.h" +#include "iomux-mx3.h"  /* FPGA defines */  #define QONG_FPGA_VERSION(major, minor, rev)	\ diff --git a/arch/arm/mach-imx/mach-scb9328.c b/arch/arm/mach-imx/mach-scb9328.c index 67ff38e9a3c..fc970409dba 100644 --- a/arch/arm/mach-imx/mach-scb9328.c +++ b/arch/arm/mach-imx/mach-scb9328.c @@ -20,11 +20,10 @@  #include <asm/mach/arch.h>  #include <asm/mach/time.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/iomux-mx1.h> - +#include "common.h"  #include "devices-imx1.h" +#include "hardware.h" +#include "iomux-mx1.h"  /*   * This scb9328 has a 32MiB flash diff --git a/arch/arm/mach-imx/mach-vpr200.c b/arch/arm/mach-imx/mach-vpr200.c index 39eb7960e2a..3aecf91e428 100644 --- a/arch/arm/mach-imx/mach-vpr200.c +++ b/arch/arm/mach-imx/mach-vpr200.c @@ -28,15 +28,14 @@  #include <asm/mach/arch.h>  #include <asm/mach/time.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/iomux-mx35.h> -  #include <linux/i2c.h>  #include <linux/i2c/at24.h>  #include <linux/mfd/mc13xxx.h> +#include "common.h"  #include "devices-imx35.h" +#include "hardware.h" +#include "iomux-mx35.h"  #define GPIO_LCDPWR	IMX_GPIO_NR(1, 2)  #define GPIO_PMIC_INT	IMX_GPIO_NR(2, 0) diff --git a/arch/arm/mach-imx/mm-imx1.c b/arch/arm/mach-imx/mm-imx1.c index 6d60d51868b..7a146671e65 100644 --- a/arch/arm/mach-imx/mm-imx1.c +++ b/arch/arm/mach-imx/mm-imx1.c @@ -22,9 +22,10 @@  #include <asm/mach/map.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/iomux-v1.h> +#include "common.h" +#include "devices/devices-common.h" +#include "hardware.h" +#include "iomux-v1.h"  static struct map_desc imx_io_desc[] __initdata = {  	imx_map_entry(MX1, IO, MT_DEVICE), @@ -58,5 +59,7 @@ void __init imx1_soc_init(void)  						MX1_GPIO_INT_PORTC, 0);  	mxc_register_gpio("imx1-gpio", 3, MX1_GPIO4_BASE_ADDR, SZ_256,  						MX1_GPIO_INT_PORTD, 0); +	imx_add_imx_dma("imx1-dma", MX1_DMA_BASE_ADDR, +			MX1_DMA_INT, MX1_DMA_ERR);  	pinctrl_provide_dummies();  } diff --git a/arch/arm/mach-imx/mm-imx21.c b/arch/arm/mach-imx/mm-imx21.c index d056dad0940..d8ccd3a8ec5 100644 --- a/arch/arm/mach-imx/mm-imx21.c +++ b/arch/arm/mach-imx/mm-imx21.c @@ -21,12 +21,13 @@  #include <linux/mm.h>  #include <linux/init.h>  #include <linux/pinctrl/machine.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/devices-common.h>  #include <asm/pgtable.h>  #include <asm/mach/map.h> -#include <mach/iomux-v1.h> + +#include "common.h" +#include "devices/devices-common.h" +#include "hardware.h" +#include "iomux-v1.h"  /* MX21 memory map definition */  static struct map_desc imx21_io_desc[] __initdata = { @@ -81,6 +82,8 @@ static const struct resource imx21_audmux_res[] __initconst = {  void __init imx21_soc_init(void)  { +	mxc_device_init(); +  	mxc_register_gpio("imx21-gpio", 0, MX21_GPIO1_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0);  	mxc_register_gpio("imx21-gpio", 1, MX21_GPIO2_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0);  	mxc_register_gpio("imx21-gpio", 2, MX21_GPIO3_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0); @@ -89,7 +92,8 @@ void __init imx21_soc_init(void)  	mxc_register_gpio("imx21-gpio", 5, MX21_GPIO6_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0);  	pinctrl_provide_dummies(); -	imx_add_imx_dma(); +	imx_add_imx_dma("imx21-dma", MX21_DMA_BASE_ADDR, +			MX21_INT_DMACH0, 0); /* No ERR irq */  	platform_device_register_simple("imx21-audmux", 0, imx21_audmux_res,  					ARRAY_SIZE(imx21_audmux_res));  } diff --git a/arch/arm/mach-imx/mm-imx25.c b/arch/arm/mach-imx/mm-imx25.c index f3f5c6542ab..9357707bb7a 100644 --- a/arch/arm/mach-imx/mm-imx25.c +++ b/arch/arm/mach-imx/mm-imx25.c @@ -24,11 +24,11 @@  #include <asm/pgtable.h>  #include <asm/mach/map.h> -#include <mach/common.h> -#include <mach/devices-common.h> -#include <mach/hardware.h> -#include <mach/mx25.h> -#include <mach/iomux-v3.h> +#include "common.h" +#include "devices/devices-common.h" +#include "hardware.h" +#include "iomux-v3.h" +#include "mx25.h"  /*   * This table defines static virtual address mappings for I/O regions. @@ -89,6 +89,8 @@ static const struct resource imx25_audmux_res[] __initconst = {  void __init imx25_soc_init(void)  { +	mxc_device_init(); +  	/* i.mx25 has the i.mx35 type gpio */  	mxc_register_gpio("imx35-gpio", 0, MX25_GPIO1_BASE_ADDR, SZ_16K, MX25_INT_GPIO1, 0);  	mxc_register_gpio("imx35-gpio", 1, MX25_GPIO2_BASE_ADDR, SZ_16K, MX25_INT_GPIO2, 0); diff --git a/arch/arm/mach-imx/mm-imx27.c b/arch/arm/mach-imx/mm-imx27.c index e7e24afc45e..4f1be65a7b5 100644 --- a/arch/arm/mach-imx/mm-imx27.c +++ b/arch/arm/mach-imx/mm-imx27.c @@ -21,12 +21,13 @@  #include <linux/mm.h>  #include <linux/init.h>  #include <linux/pinctrl/machine.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/devices-common.h>  #include <asm/pgtable.h>  #include <asm/mach/map.h> -#include <mach/iomux-v1.h> + +#include "common.h" +#include "devices/devices-common.h" +#include "hardware.h" +#include "iomux-v1.h"  /* MX27 memory map definition */  static struct map_desc imx27_io_desc[] __initdata = { @@ -81,6 +82,8 @@ static const struct resource imx27_audmux_res[] __initconst = {  void __init imx27_soc_init(void)  { +	mxc_device_init(); +  	/* i.mx27 has the i.mx21 type gpio */  	mxc_register_gpio("imx21-gpio", 0, MX27_GPIO1_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);  	mxc_register_gpio("imx21-gpio", 1, MX27_GPIO2_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0); @@ -90,7 +93,8 @@ void __init imx27_soc_init(void)  	mxc_register_gpio("imx21-gpio", 5, MX27_GPIO6_BASE_ADDR, SZ_256, MX27_INT_GPIO, 0);  	pinctrl_provide_dummies(); -	imx_add_imx_dma(); +	imx_add_imx_dma("imx27-dma", MX27_DMA_BASE_ADDR, +			MX27_INT_DMACH0, 0); /* No ERR irq */  	/* imx27 has the imx21 type audmux */  	platform_device_register_simple("imx21-audmux", 0, imx27_audmux_res,  					ARRAY_SIZE(imx27_audmux_res)); diff --git a/arch/arm/mach-imx/mm-imx3.c b/arch/arm/mach-imx/mm-imx3.c index b5deb055455..cefa047c405 100644 --- a/arch/arm/mach-imx/mm-imx3.c +++ b/arch/arm/mach-imx/mm-imx3.c @@ -26,12 +26,11 @@  #include <asm/hardware/cache-l2x0.h>  #include <asm/mach/map.h> -#include <mach/common.h> -#include <mach/devices-common.h> -#include <mach/hardware.h> -#include <mach/iomux-v3.h> - +#include "common.h"  #include "crmregs-imx3.h" +#include "devices/devices-common.h" +#include "hardware.h" +#include "iomux-v3.h"  void __iomem *mx3_ccm_base; @@ -175,6 +174,8 @@ void __init imx31_soc_init(void)  	imx3_init_l2x0(); +	mxc_device_init(); +  	mxc_register_gpio("imx31-gpio", 0, MX31_GPIO1_BASE_ADDR, SZ_16K, MX31_INT_GPIO1, 0);  	mxc_register_gpio("imx31-gpio", 1, MX31_GPIO2_BASE_ADDR, SZ_16K, MX31_INT_GPIO2, 0);  	mxc_register_gpio("imx31-gpio", 2, MX31_GPIO3_BASE_ADDR, SZ_16K, MX31_INT_GPIO3, 0); @@ -271,6 +272,8 @@ void __init imx35_soc_init(void)  	imx3_init_l2x0(); +	mxc_device_init(); +  	mxc_register_gpio("imx35-gpio", 0, MX35_GPIO1_BASE_ADDR, SZ_16K, MX35_INT_GPIO1, 0);  	mxc_register_gpio("imx35-gpio", 1, MX35_GPIO2_BASE_ADDR, SZ_16K, MX35_INT_GPIO2, 0);  	mxc_register_gpio("imx35-gpio", 2, MX35_GPIO3_BASE_ADDR, SZ_16K, MX35_INT_GPIO3, 0); diff --git a/arch/arm/mach-imx/mm-imx5.c b/arch/arm/mach-imx/mm-imx5.c index acb0aadb425..f92caf1b30b 100644 --- a/arch/arm/mach-imx/mm-imx5.c +++ b/arch/arm/mach-imx/mm-imx5.c @@ -18,10 +18,10 @@  #include <asm/mach/map.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/devices-common.h> -#include <mach/iomux-v3.h> +#include "common.h" +#include "devices/devices-common.h" +#include "hardware.h" +#include "iomux-v3.h"  /*   * Define the MX50 memory map. @@ -138,6 +138,8 @@ static const struct resource imx51_audmux_res[] __initconst = {  void __init imx50_soc_init(void)  { +	mxc_device_init(); +  	/* i.mx50 has the i.mx35 type gpio */  	mxc_register_gpio("imx35-gpio", 0, MX50_GPIO1_BASE_ADDR, SZ_16K, MX50_INT_GPIO1_LOW, MX50_INT_GPIO1_HIGH);  	mxc_register_gpio("imx35-gpio", 1, MX50_GPIO2_BASE_ADDR, SZ_16K, MX50_INT_GPIO2_LOW, MX50_INT_GPIO2_HIGH); @@ -153,6 +155,8 @@ void __init imx50_soc_init(void)  void __init imx51_soc_init(void)  { +	mxc_device_init(); +  	/* i.mx51 has the i.mx35 type gpio */  	mxc_register_gpio("imx35-gpio", 0, MX51_GPIO1_BASE_ADDR, SZ_16K, MX51_INT_GPIO1_LOW, MX51_INT_GPIO1_HIGH);  	mxc_register_gpio("imx35-gpio", 1, MX51_GPIO2_BASE_ADDR, SZ_16K, MX51_INT_GPIO2_LOW, MX51_INT_GPIO2_HIGH); diff --git a/arch/arm/plat-mxc/include/mach/mx1.h b/arch/arm/mach-imx/mx1.h index 45bd31cc34d..45bd31cc34d 100644 --- a/arch/arm/plat-mxc/include/mach/mx1.h +++ b/arch/arm/mach-imx/mx1.h diff --git a/arch/arm/plat-mxc/include/mach/mx21.h b/arch/arm/mach-imx/mx21.h index 468738aa997..468738aa997 100644 --- a/arch/arm/plat-mxc/include/mach/mx21.h +++ b/arch/arm/mach-imx/mx21.h diff --git a/arch/arm/plat-mxc/include/mach/mx25.h b/arch/arm/mach-imx/mx25.h index ec466400a20..ec466400a20 100644 --- a/arch/arm/plat-mxc/include/mach/mx25.h +++ b/arch/arm/mach-imx/mx25.h diff --git a/arch/arm/plat-mxc/include/mach/mx27.h b/arch/arm/mach-imx/mx27.h index e074616d54c..e074616d54c 100644 --- a/arch/arm/plat-mxc/include/mach/mx27.h +++ b/arch/arm/mach-imx/mx27.h diff --git a/arch/arm/plat-mxc/include/mach/mx2x.h b/arch/arm/mach-imx/mx2x.h index 11642f5b224..11642f5b224 100644 --- a/arch/arm/plat-mxc/include/mach/mx2x.h +++ b/arch/arm/mach-imx/mx2x.h diff --git a/arch/arm/plat-mxc/include/mach/mx31.h b/arch/arm/mach-imx/mx31.h index ee9b1f9215d..ee9b1f9215d 100644 --- a/arch/arm/plat-mxc/include/mach/mx31.h +++ b/arch/arm/mach-imx/mx31.h diff --git a/arch/arm/mach-imx/mx31lilly-db.c b/arch/arm/mach-imx/mx31lilly-db.c index 29e890f9205..d4361b80c5f 100644 --- a/arch/arm/mach-imx/mx31lilly-db.c +++ b/arch/arm/mach-imx/mx31lilly-db.c @@ -30,12 +30,11 @@  #include <asm/mach/arch.h>  #include <asm/mach/map.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/iomux-mx3.h> -#include <mach/board-mx31lilly.h> - +#include "board-mx31lilly.h" +#include "common.h"  #include "devices-imx31.h" +#include "hardware.h" +#include "iomux-mx3.h"  /*   * This file contains board-specific initialization routines for the diff --git a/arch/arm/mach-imx/mx31lite-db.c b/arch/arm/mach-imx/mx31lite-db.c index 83d17d9e0bc..5a160b7e4fc 100644 --- a/arch/arm/mach-imx/mx31lite-db.c +++ b/arch/arm/mach-imx/mx31lite-db.c @@ -31,12 +31,11 @@  #include <asm/mach/arch.h>  #include <asm/mach/map.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/iomux-mx3.h> -#include <mach/board-mx31lite.h> - +#include "board-mx31lite.h" +#include "common.h"  #include "devices-imx31.h" +#include "hardware.h" +#include "iomux-mx3.h"  /*   * This file contains board-specific initialization routines for the diff --git a/arch/arm/mach-imx/mx31moboard-devboard.c b/arch/arm/mach-imx/mx31moboard-devboard.c index cc285e50728..52d5b157472 100644 --- a/arch/arm/mach-imx/mx31moboard-devboard.c +++ b/arch/arm/mach-imx/mx31moboard-devboard.c @@ -22,12 +22,11 @@  #include <linux/usb/otg.h> -#include <mach/common.h> -#include <mach/iomux-mx3.h> -#include <mach/hardware.h> -#include <mach/ulpi.h> - +#include "common.h"  #include "devices-imx31.h" +#include "hardware.h" +#include "iomux-mx3.h" +#include "ulpi.h"  static unsigned int devboard_pins[] = {  	/* UART1 */ diff --git a/arch/arm/mach-imx/mx31moboard-marxbot.c b/arch/arm/mach-imx/mx31moboard-marxbot.c index 135c90e3a45..a4f43e90f3c 100644 --- a/arch/arm/mach-imx/mx31moboard-marxbot.c +++ b/arch/arm/mach-imx/mx31moboard-marxbot.c @@ -24,14 +24,13 @@  #include <linux/usb/otg.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/iomux-mx3.h> -#include <mach/ulpi.h> -  #include <media/soc_camera.h> +#include "common.h"  #include "devices-imx31.h" +#include "hardware.h" +#include "iomux-mx3.h" +#include "ulpi.h"  static unsigned int marxbot_pins[] = {  	/* SDHC2 */ diff --git a/arch/arm/mach-imx/mx31moboard-smartbot.c b/arch/arm/mach-imx/mx31moboard-smartbot.c index fabb801e799..04ae45dbfaa 100644 --- a/arch/arm/mach-imx/mx31moboard-smartbot.c +++ b/arch/arm/mach-imx/mx31moboard-smartbot.c @@ -23,15 +23,14 @@  #include <linux/usb/otg.h>  #include <linux/usb/ulpi.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/iomux-mx3.h> -#include <mach/board-mx31moboard.h> -#include <mach/ulpi.h> -  #include <media/soc_camera.h> +#include "board-mx31moboard.h" +#include "common.h"  #include "devices-imx31.h" +#include "hardware.h" +#include "iomux-mx3.h" +#include "ulpi.h"  static unsigned int smartbot_pins[] = {  	/* UART1 */ diff --git a/arch/arm/plat-mxc/include/mach/mx35.h b/arch/arm/mach-imx/mx35.h index 2af5d3a699c..2af5d3a699c 100644 --- a/arch/arm/plat-mxc/include/mach/mx35.h +++ b/arch/arm/mach-imx/mx35.h diff --git a/arch/arm/plat-mxc/include/mach/mx3x.h b/arch/arm/mach-imx/mx3x.h index 96fb4fbc8ad..96fb4fbc8ad 100644 --- a/arch/arm/plat-mxc/include/mach/mx3x.h +++ b/arch/arm/mach-imx/mx3x.h diff --git a/arch/arm/plat-mxc/include/mach/mx50.h b/arch/arm/mach-imx/mx50.h index 09ac19c1570..09ac19c1570 100644 --- a/arch/arm/plat-mxc/include/mach/mx50.h +++ b/arch/arm/mach-imx/mx50.h diff --git a/arch/arm/plat-mxc/include/mach/mx51.h b/arch/arm/mach-imx/mx51.h index af844f76261..af844f76261 100644 --- a/arch/arm/plat-mxc/include/mach/mx51.h +++ b/arch/arm/mach-imx/mx51.h diff --git a/arch/arm/plat-mxc/include/mach/mx53.h b/arch/arm/mach-imx/mx53.h index f829d1c2250..f829d1c2250 100644 --- a/arch/arm/plat-mxc/include/mach/mx53.h +++ b/arch/arm/mach-imx/mx53.h diff --git a/arch/arm/plat-mxc/include/mach/mx6q.h b/arch/arm/mach-imx/mx6q.h index f7e7dbac8f4..f7e7dbac8f4 100644 --- a/arch/arm/plat-mxc/include/mach/mx6q.h +++ b/arch/arm/mach-imx/mx6q.h diff --git a/arch/arm/plat-mxc/include/mach/mxc.h b/arch/arm/mach-imx/mxc.h index d78298366a9..d78298366a9 100644 --- a/arch/arm/plat-mxc/include/mach/mxc.h +++ b/arch/arm/mach-imx/mxc.h diff --git a/arch/arm/mach-imx/pcm970-baseboard.c b/arch/arm/mach-imx/pcm970-baseboard.c index 9917e2ff51d..51c60823408 100644 --- a/arch/arm/mach-imx/pcm970-baseboard.c +++ b/arch/arm/mach-imx/pcm970-baseboard.c @@ -23,11 +23,10 @@  #include <asm/mach/arch.h> -#include <mach/common.h> -#include <mach/iomux-mx27.h> -#include <mach/hardware.h> - +#include "common.h"  #include "devices-imx27.h" +#include "hardware.h" +#include "iomux-mx27.h"  static const int pcm970_pins[] __initconst = {  	/* SDHC */ diff --git a/arch/arm/mach-imx/platsmp.c b/arch/arm/mach-imx/platsmp.c index 2ac43e1a2df..3777b805b76 100644 --- a/arch/arm/mach-imx/platsmp.c +++ b/arch/arm/mach-imx/platsmp.c @@ -16,8 +16,9 @@  #include <asm/smp_scu.h>  #include <asm/hardware/gic.h>  #include <asm/mach/map.h> -#include <mach/common.h> -#include <mach/hardware.h> + +#include "common.h" +#include "hardware.h"  static void __iomem *scu_base; diff --git a/arch/arm/mach-imx/pm-imx27.c b/arch/arm/mach-imx/pm-imx27.c index 6fcffa7db97..56d02d064fb 100644 --- a/arch/arm/mach-imx/pm-imx27.c +++ b/arch/arm/mach-imx/pm-imx27.c @@ -10,7 +10,8 @@  #include <linux/kernel.h>  #include <linux/suspend.h>  #include <linux/io.h> -#include <mach/hardware.h> + +#include "hardware.h"  static int mx27_suspend_enter(suspend_state_t state)  { diff --git a/arch/arm/mach-imx/pm-imx3.c b/arch/arm/mach-imx/pm-imx3.c index 822103bdb70..6a07006ff0f 100644 --- a/arch/arm/mach-imx/pm-imx3.c +++ b/arch/arm/mach-imx/pm-imx3.c @@ -9,10 +9,11 @@   * http://www.gnu.org/copyleft/gpl.html   */  #include <linux/io.h> -#include <mach/common.h> -#include <mach/hardware.h> -#include <mach/devices-common.h> + +#include "common.h"  #include "crmregs-imx3.h" +#include "devices/devices-common.h" +#include "hardware.h"  /*   * Set cpu low power mode before WFI instruction. This function is called diff --git a/arch/arm/mach-imx/pm-imx5.c b/arch/arm/mach-imx/pm-imx5.c index 19621ed1ffa..2e063c2deb9 100644 --- a/arch/arm/mach-imx/pm-imx5.c +++ b/arch/arm/mach-imx/pm-imx5.c @@ -16,10 +16,11 @@  #include <asm/cacheflush.h>  #include <asm/system_misc.h>  #include <asm/tlbflush.h> -#include <mach/common.h> -#include <mach/cpuidle.h> -#include <mach/hardware.h> + +#include "common.h" +#include "cpuidle.h"  #include "crm-regs-imx5.h" +#include "hardware.h"  /*   * The WAIT_UNCLOCKED_POWER_OFF state only requires <= 500ns to exit. diff --git a/arch/arm/mach-imx/pm-imx6q.c b/arch/arm/mach-imx/pm-imx6q.c index f7b0c2b1b90..a17543da602 100644 --- a/arch/arm/mach-imx/pm-imx6q.c +++ b/arch/arm/mach-imx/pm-imx6q.c @@ -18,8 +18,9 @@  #include <asm/proc-fns.h>  #include <asm/suspend.h>  #include <asm/hardware/cache-l2x0.h> -#include <mach/common.h> -#include <mach/hardware.h> + +#include "common.h" +#include "hardware.h"  extern unsigned long phys_l2x0_saved_regs; diff --git a/arch/arm/plat-mxc/ssi-fiq-ksym.c b/arch/arm/mach-imx/ssi-fiq-ksym.c index 792090f9a03..792090f9a03 100644 --- a/arch/arm/plat-mxc/ssi-fiq-ksym.c +++ b/arch/arm/mach-imx/ssi-fiq-ksym.c diff --git a/arch/arm/plat-mxc/ssi-fiq.S b/arch/arm/mach-imx/ssi-fiq.S index a8b93c5f29b..a8b93c5f29b 100644 --- a/arch/arm/plat-mxc/ssi-fiq.S +++ b/arch/arm/mach-imx/ssi-fiq.S diff --git a/arch/arm/plat-mxc/system.c b/arch/arm/mach-imx/system.c index 3da78cfc5a9..695e0d73bf8 100644 --- a/arch/arm/plat-mxc/system.c +++ b/arch/arm/mach-imx/system.c @@ -22,12 +22,13 @@  #include <linux/err.h>  #include <linux/delay.h> -#include <mach/hardware.h> -#include <mach/common.h>  #include <asm/system_misc.h>  #include <asm/proc-fns.h>  #include <asm/mach-types.h> +#include "common.h" +#include "hardware.h" +  static void __iomem *wdog_base;  /* diff --git a/arch/arm/plat-mxc/time.c b/arch/arm/mach-imx/time.c index a17abcf9832..f017302f6d0 100644 --- a/arch/arm/plat-mxc/time.c +++ b/arch/arm/mach-imx/time.c @@ -27,10 +27,11 @@  #include <linux/clk.h>  #include <linux/err.h> -#include <mach/hardware.h>  #include <asm/sched_clock.h>  #include <asm/mach/time.h> -#include <mach/common.h> + +#include "common.h" +#include "hardware.h"  /*   * There are 2 versions of the timer hardware on Freescale MXC hardware. diff --git a/arch/arm/plat-mxc/tzic.c b/arch/arm/mach-imx/tzic.c index 3ed1adbc09f..9721161f208 100644 --- a/arch/arm/plat-mxc/tzic.c +++ b/arch/arm/mach-imx/tzic.c @@ -21,10 +21,8 @@  #include <asm/mach/irq.h>  #include <asm/exception.h> -#include <mach/hardware.h> -#include <mach/common.h> -#include <mach/irqs.h> - +#include "common.h" +#include "hardware.h"  #include "irq-common.h"  /* diff --git a/arch/arm/plat-mxc/ulpi.c b/arch/arm/mach-imx/ulpi.c index d2963427184..0f051957d10 100644 --- a/arch/arm/plat-mxc/ulpi.c +++ b/arch/arm/mach-imx/ulpi.c @@ -24,7 +24,7 @@  #include <linux/usb/otg.h>  #include <linux/usb/ulpi.h> -#include <mach/ulpi.h> +#include "ulpi.h"  /* ULPIVIEW register bits */  #define ULPIVW_WU		(1 << 31)	/* Wakeup */ diff --git a/arch/arm/plat-mxc/include/mach/ulpi.h b/arch/arm/mach-imx/ulpi.h index 42bdaca6d7d..42bdaca6d7d 100644 --- a/arch/arm/plat-mxc/include/mach/ulpi.h +++ b/arch/arm/mach-imx/ulpi.h diff --git a/arch/arm/mach-integrator/Kconfig b/arch/arm/mach-integrator/Kconfig index 350e26636a0..abeff25532a 100644 --- a/arch/arm/mach-integrator/Kconfig +++ b/arch/arm/mach-integrator/Kconfig @@ -8,6 +8,7 @@ config ARCH_INTEGRATOR_AP  	select MIGHT_HAVE_PCI  	select SERIAL_AMBA_PL010  	select SERIAL_AMBA_PL010_CONSOLE +	select SOC_BUS  	help  	  Include support for the ARM(R) Integrator/AP and  	  Integrator/PP2 platforms. @@ -19,6 +20,7 @@ config ARCH_INTEGRATOR_CP  	select PLAT_VERSATILE_CLCD  	select SERIAL_AMBA_PL011  	select SERIAL_AMBA_PL011_CONSOLE +	select SOC_BUS  	help  	  Include support for the ARM(R) Integrator CP platform. diff --git a/arch/arm/mach-integrator/common.h b/arch/arm/mach-integrator/common.h index c3ff21b5ea2..79197d8b34a 100644 --- a/arch/arm/mach-integrator/common.h +++ b/arch/arm/mach-integrator/common.h @@ -1,6 +1,12 @@  #include <linux/amba/serial.h> -extern struct amba_pl010_data integrator_uart_data; +#ifdef CONFIG_ARCH_INTEGRATOR_AP +extern struct amba_pl010_data ap_uart_data; +#else +/* Not used without Integrator/AP support anyway */ +struct amba_pl010_data ap_uart_data {}; +#endif  void integrator_init_early(void);  int integrator_init(bool is_cp);  void integrator_reserve(void);  void integrator_restart(char, const char *); +void integrator_init_sysfs(struct device *parent, u32 id); diff --git a/arch/arm/mach-integrator/core.c b/arch/arm/mach-integrator/core.c index ea22a17246d..39c060f75e4 100644 --- a/arch/arm/mach-integrator/core.c +++ b/arch/arm/mach-integrator/core.c @@ -18,10 +18,10 @@  #include <linux/memblock.h>  #include <linux/sched.h>  #include <linux/smp.h> -#include <linux/termios.h>  #include <linux/amba/bus.h>  #include <linux/amba/serial.h>  #include <linux/io.h> +#include <linux/stat.h>  #include <mach/hardware.h>  #include <mach/platform.h> @@ -46,10 +46,10 @@ static AMBA_APB_DEVICE(rtc, "rtc", 0,  	INTEGRATOR_RTC_BASE, INTEGRATOR_RTC_IRQ, NULL);  static AMBA_APB_DEVICE(uart0, "uart0", 0, -	INTEGRATOR_UART0_BASE, INTEGRATOR_UART0_IRQ, &integrator_uart_data); +	INTEGRATOR_UART0_BASE, INTEGRATOR_UART0_IRQ, NULL);  static AMBA_APB_DEVICE(uart1, "uart1", 0, -	INTEGRATOR_UART1_BASE, INTEGRATOR_UART1_IRQ, &integrator_uart_data); +	INTEGRATOR_UART1_BASE, INTEGRATOR_UART1_IRQ, NULL);  static AMBA_APB_DEVICE(kmi0, "kmi0", 0, KMI0_BASE, KMI0_IRQ, NULL);  static AMBA_APB_DEVICE(kmi1, "kmi1", 0, KMI1_BASE, KMI1_IRQ, NULL); @@ -77,6 +77,8 @@ int __init integrator_init(bool is_cp)  		uart1_device.periphid	= 0x00041010;  		kmi0_device.periphid	= 0x00041050;  		kmi1_device.periphid	= 0x00041050; +		uart0_device.dev.platform_data = &ap_uart_data; +		uart1_device.dev.platform_data = &ap_uart_data;  	}  	for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { @@ -89,49 +91,6 @@ int __init integrator_init(bool is_cp)  #endif -/* - * On the Integrator platform, the port RTS and DTR are provided by - * bits in the following SC_CTRLS register bits: - *        RTS  DTR - *  UART0  7    6 - *  UART1  5    4 - */ -#define SC_CTRLC	__io_address(INTEGRATOR_SC_CTRLC) -#define SC_CTRLS	__io_address(INTEGRATOR_SC_CTRLS) - -static void integrator_uart_set_mctrl(struct amba_device *dev, void __iomem *base, unsigned int mctrl) -{ -	unsigned int ctrls = 0, ctrlc = 0, rts_mask, dtr_mask; -	u32 phybase = dev->res.start; - -	if (phybase == INTEGRATOR_UART0_BASE) { -		/* UART0 */ -		rts_mask = 1 << 4; -		dtr_mask = 1 << 5; -	} else { -		/* UART1 */ -		rts_mask = 1 << 6; -		dtr_mask = 1 << 7; -	} - -	if (mctrl & TIOCM_RTS) -		ctrlc |= rts_mask; -	else -		ctrls |= rts_mask; - -	if (mctrl & TIOCM_DTR) -		ctrlc |= dtr_mask; -	else -		ctrls |= dtr_mask; - -	__raw_writel(ctrls, SC_CTRLS); -	__raw_writel(ctrlc, SC_CTRLC); -} - -struct amba_pl010_data integrator_uart_data = { -	.set_mctrl = integrator_uart_set_mctrl, -}; -  static DEFINE_RAW_SPINLOCK(cm_lock);  /** @@ -169,3 +128,93 @@ void integrator_restart(char mode, const char *cmd)  {  	cm_control(CM_CTRL_RESET, CM_CTRL_RESET);  } + +static u32 integrator_id; + +static ssize_t intcp_get_manf(struct device *dev, +			      struct device_attribute *attr, +			      char *buf) +{ +	return sprintf(buf, "%02x\n", integrator_id >> 24); +} + +static struct device_attribute intcp_manf_attr = +	__ATTR(manufacturer,  S_IRUGO, intcp_get_manf,  NULL); + +static ssize_t intcp_get_arch(struct device *dev, +			      struct device_attribute *attr, +			      char *buf) +{ +	const char *arch; + +	switch ((integrator_id >> 16) & 0xff) { +	case 0x00: +		arch = "ASB little-endian"; +		break; +	case 0x01: +		arch = "AHB little-endian"; +		break; +	case 0x03: +		arch = "AHB-Lite system bus, bi-endian"; +		break; +	case 0x04: +		arch = "AHB"; +		break; +	default: +		arch = "Unknown"; +		break; +	} + +	return sprintf(buf, "%s\n", arch); +} + +static struct device_attribute intcp_arch_attr = +	__ATTR(architecture,  S_IRUGO, intcp_get_arch,  NULL); + +static ssize_t intcp_get_fpga(struct device *dev, +			      struct device_attribute *attr, +			      char *buf) +{ +	const char *fpga; + +	switch ((integrator_id >> 12) & 0xf) { +	case 0x01: +		fpga = "XC4062"; +		break; +	case 0x02: +		fpga = "XC4085"; +		break; +	case 0x04: +		fpga = "EPM7256AE (Altera PLD)"; +		break; +	default: +		fpga = "Unknown"; +		break; +	} + +	return sprintf(buf, "%s\n", fpga); +} + +static struct device_attribute intcp_fpga_attr = +	__ATTR(fpga,  S_IRUGO, intcp_get_fpga,  NULL); + +static ssize_t intcp_get_build(struct device *dev, +			       struct device_attribute *attr, +			       char *buf) +{ +	return sprintf(buf, "%02x\n", (integrator_id >> 4) & 0xFF); +} + +static struct device_attribute intcp_build_attr = +	__ATTR(build,  S_IRUGO, intcp_get_build,  NULL); + + + +void integrator_init_sysfs(struct device *parent, u32 id) +{ +	integrator_id = id; +	device_create_file(parent, &intcp_manf_attr); +	device_create_file(parent, &intcp_arch_attr); +	device_create_file(parent, &intcp_fpga_attr); +	device_create_file(parent, &intcp_build_attr); +} diff --git a/arch/arm/mach-integrator/include/mach/platform.h b/arch/arm/mach-integrator/include/mach/platform.h index efeac5d0bc9..be5859efe10 100644 --- a/arch/arm/mach-integrator/include/mach/platform.h +++ b/arch/arm/mach-integrator/include/mach/platform.h @@ -190,7 +190,6 @@  #define INTEGRATOR_SC_CTRLC_OFFSET      0x0C  #define INTEGRATOR_SC_DEC_OFFSET        0x10  #define INTEGRATOR_SC_ARB_OFFSET        0x14 -#define INTEGRATOR_SC_PCIENABLE_OFFSET  0x18  #define INTEGRATOR_SC_LOCK_OFFSET       0x1C  #define INTEGRATOR_SC_BASE              0x11000000 diff --git a/arch/arm/mach-integrator/integrator_ap.c b/arch/arm/mach-integrator/integrator_ap.c index e6617c134fa..a0a7cbbb7a7 100644 --- a/arch/arm/mach-integrator/integrator_ap.c +++ b/arch/arm/mach-integrator/integrator_ap.c @@ -37,6 +37,9 @@  #include <linux/of_irq.h>  #include <linux/of_address.h>  #include <linux/of_platform.h> +#include <linux/stat.h> +#include <linux/sys_soc.h> +#include <linux/termios.h>  #include <video/vga.h>  #include <mach/hardware.h> @@ -60,7 +63,10 @@  #include "common.h" -/*  +/* Base address to the AP system controller */ +void __iomem *ap_syscon_base; + +/*   * All IO addresses are mapped onto VA 0xFFFx.xxxx, where x.xxxx   * is the (PA >> 12).   * @@ -68,7 +74,6 @@   * just for now).   */  #define VA_IC_BASE	__io_address(INTEGRATOR_IC_BASE) -#define VA_SC_BASE	__io_address(INTEGRATOR_SC_BASE)  #define VA_EBI_BASE	__io_address(INTEGRATOR_EBI_BASE)  #define VA_CMIC_BASE	__io_address(INTEGRATOR_HDR_IC) @@ -97,11 +102,6 @@ static struct map_desc ap_io_desc[] __initdata = {  		.length		= SZ_4K,  		.type		= MT_DEVICE  	}, { -		.virtual	= IO_ADDRESS(INTEGRATOR_SC_BASE), -		.pfn		= __phys_to_pfn(INTEGRATOR_SC_BASE), -		.length		= SZ_4K, -		.type		= MT_DEVICE -	}, {  		.virtual	= IO_ADDRESS(INTEGRATOR_EBI_BASE),  		.pfn		= __phys_to_pfn(INTEGRATOR_EBI_BASE),  		.length		= SZ_4K, @@ -122,11 +122,6 @@ static struct map_desc ap_io_desc[] __initdata = {  		.length		= SZ_4K,  		.type		= MT_DEVICE  	}, { -		.virtual	= IO_ADDRESS(INTEGRATOR_UART1_BASE), -		.pfn		= __phys_to_pfn(INTEGRATOR_UART1_BASE), -		.length		= SZ_4K, -		.type		= MT_DEVICE -	}, {  		.virtual	= IO_ADDRESS(INTEGRATOR_DBG_BASE),  		.pfn		= __phys_to_pfn(INTEGRATOR_DBG_BASE),  		.length		= SZ_4K, @@ -201,8 +196,6 @@ device_initcall(irq_syscore_init);  /*   * Flash handling.   */ -#define SC_CTRLC (VA_SC_BASE + INTEGRATOR_SC_CTRLC_OFFSET) -#define SC_CTRLS (VA_SC_BASE + INTEGRATOR_SC_CTRLS_OFFSET)  #define EBI_CSR1 (VA_EBI_BASE + INTEGRATOR_EBI_CSR1_OFFSET)  #define EBI_LOCK (VA_EBI_BASE + INTEGRATOR_EBI_LOCK_OFFSET) @@ -210,7 +203,8 @@ static int ap_flash_init(struct platform_device *dev)  {  	u32 tmp; -	writel(INTEGRATOR_SC_CTRL_nFLVPPEN | INTEGRATOR_SC_CTRL_nFLWP, SC_CTRLC); +	writel(INTEGRATOR_SC_CTRL_nFLVPPEN | INTEGRATOR_SC_CTRL_nFLWP, +	       ap_syscon_base + INTEGRATOR_SC_CTRLC_OFFSET);  	tmp = readl(EBI_CSR1) | INTEGRATOR_EBI_WRITE_ENABLE;  	writel(tmp, EBI_CSR1); @@ -227,7 +221,8 @@ static void ap_flash_exit(struct platform_device *dev)  {  	u32 tmp; -	writel(INTEGRATOR_SC_CTRL_nFLVPPEN | INTEGRATOR_SC_CTRL_nFLWP, SC_CTRLC); +	writel(INTEGRATOR_SC_CTRL_nFLVPPEN | INTEGRATOR_SC_CTRL_nFLWP, +	       ap_syscon_base + INTEGRATOR_SC_CTRLC_OFFSET);  	tmp = readl(EBI_CSR1) & ~INTEGRATOR_EBI_WRITE_ENABLE;  	writel(tmp, EBI_CSR1); @@ -241,9 +236,12 @@ static void ap_flash_exit(struct platform_device *dev)  static void ap_flash_set_vpp(struct platform_device *pdev, int on)  { -	void __iomem *reg = on ? SC_CTRLS : SC_CTRLC; - -	writel(INTEGRATOR_SC_CTRL_nFLVPPEN, reg); +	if (on) +		writel(INTEGRATOR_SC_CTRL_nFLVPPEN, +		       ap_syscon_base + INTEGRATOR_SC_CTRLS_OFFSET); +	else +		writel(INTEGRATOR_SC_CTRL_nFLVPPEN, +		       ap_syscon_base + INTEGRATOR_SC_CTRLC_OFFSET);  }  static struct physmap_flash_data ap_flash_data = { @@ -254,6 +252,45 @@ static struct physmap_flash_data ap_flash_data = {  };  /* + * For the PL010 found in the Integrator/AP some of the UART control is + * implemented in the system controller and accessed using a callback + * from the driver. + */ +static void integrator_uart_set_mctrl(struct amba_device *dev, +				void __iomem *base, unsigned int mctrl) +{ +	unsigned int ctrls = 0, ctrlc = 0, rts_mask, dtr_mask; +	u32 phybase = dev->res.start; + +	if (phybase == INTEGRATOR_UART0_BASE) { +		/* UART0 */ +		rts_mask = 1 << 4; +		dtr_mask = 1 << 5; +	} else { +		/* UART1 */ +		rts_mask = 1 << 6; +		dtr_mask = 1 << 7; +	} + +	if (mctrl & TIOCM_RTS) +		ctrlc |= rts_mask; +	else +		ctrls |= rts_mask; + +	if (mctrl & TIOCM_DTR) +		ctrlc |= dtr_mask; +	else +		ctrls |= dtr_mask; + +	__raw_writel(ctrls, ap_syscon_base + INTEGRATOR_SC_CTRLS_OFFSET); +	__raw_writel(ctrlc, ap_syscon_base + INTEGRATOR_SC_CTRLC_OFFSET); +} + +struct amba_pl010_data ap_uart_data = { +	.set_mctrl = integrator_uart_set_mctrl, +}; + +/*   * Where is the timer (VA)?   */  #define TIMER0_VA_BASE __io_address(INTEGRATOR_TIMER0_BASE) @@ -450,9 +487,9 @@ static struct of_dev_auxdata ap_auxdata_lookup[] __initdata = {  	OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_RTC_BASE,  		"rtc", NULL),  	OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_UART0_BASE, -		"uart0", &integrator_uart_data), +		"uart0", &ap_uart_data),  	OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_UART1_BASE, -		"uart1", &integrator_uart_data), +		"uart1", &ap_uart_data),  	OF_DEV_AUXDATA("arm,primecell", KMI0_BASE,  		"kmi0", NULL),  	OF_DEV_AUXDATA("arm,primecell", KMI1_BASE, @@ -465,12 +502,60 @@ static struct of_dev_auxdata ap_auxdata_lookup[] __initdata = {  static void __init ap_init_of(void)  {  	unsigned long sc_dec; +	struct device_node *root; +	struct device_node *syscon; +	struct device *parent; +	struct soc_device *soc_dev; +	struct soc_device_attribute *soc_dev_attr; +	u32 ap_sc_id; +	int err;  	int i; -	of_platform_populate(NULL, of_default_bus_match_table, -			ap_auxdata_lookup, NULL); +	/* Here we create an SoC device for the root node */ +	root = of_find_node_by_path("/"); +	if (!root) +		return; +	syscon = of_find_node_by_path("/syscon"); +	if (!syscon) +		return; + +	ap_syscon_base = of_iomap(syscon, 0); +	if (!ap_syscon_base) +		return; -	sc_dec = readl(VA_SC_BASE + INTEGRATOR_SC_DEC_OFFSET); +	ap_sc_id = readl(ap_syscon_base); + +	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL); +	if (!soc_dev_attr) +		return; + +	err = of_property_read_string(root, "compatible", +				      &soc_dev_attr->soc_id); +	if (err) +		return; +	err = of_property_read_string(root, "model", &soc_dev_attr->machine); +	if (err) +		return; +	soc_dev_attr->family = "Integrator"; +	soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%c", +					   'A' + (ap_sc_id & 0x0f)); + +	soc_dev = soc_device_register(soc_dev_attr); +	if (IS_ERR_OR_NULL(soc_dev)) { +		kfree(soc_dev_attr->revision); +		kfree(soc_dev_attr); +		return; +	} + +	parent = soc_device_to_device(soc_dev); + +	if (!IS_ERR_OR_NULL(parent)) +		integrator_init_sysfs(parent, ap_sc_id); + +	of_platform_populate(root, of_default_bus_match_table, +			ap_auxdata_lookup, parent); + +	sc_dec = readl(ap_syscon_base + INTEGRATOR_SC_DEC_OFFSET);  	for (i = 0; i < 4; i++) {  		struct lm_device *lmdev; @@ -514,6 +599,27 @@ MACHINE_END  #ifdef CONFIG_ATAGS  /* + * For the ATAG boot some static mappings are needed. This will + * go away with the ATAG support down the road. + */ + +static struct map_desc ap_io_desc_atag[] __initdata = { +	{ +		.virtual	= IO_ADDRESS(INTEGRATOR_SC_BASE), +		.pfn		= __phys_to_pfn(INTEGRATOR_SC_BASE), +		.length		= SZ_4K, +		.type		= MT_DEVICE +	}, +}; + +static void __init ap_map_io_atag(void) +{ +	iotable_init(ap_io_desc_atag, ARRAY_SIZE(ap_io_desc_atag)); +	ap_syscon_base = __io_address(INTEGRATOR_SC_BASE); +	ap_map_io(); +} + +/*   * This is where non-devicetree initialization code is collected and stashed   * for eventual deletion.   */ @@ -581,7 +687,7 @@ static void __init ap_init(void)  	platform_device_register(&cfi_flash_device); -	sc_dec = readl(VA_SC_BASE + INTEGRATOR_SC_DEC_OFFSET); +	sc_dec = readl(ap_syscon_base + INTEGRATOR_SC_DEC_OFFSET);  	for (i = 0; i < 4; i++) {  		struct lm_device *lmdev; @@ -608,7 +714,7 @@ MACHINE_START(INTEGRATOR, "ARM-Integrator")  	/* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */  	.atag_offset	= 0x100,  	.reserve	= integrator_reserve, -	.map_io		= ap_map_io, +	.map_io		= ap_map_io_atag,  	.nr_irqs	= NR_IRQS_INTEGRATOR_AP,  	.init_early	= ap_init_early,  	.init_irq	= ap_init_irq, diff --git a/arch/arm/mach-integrator/integrator_cp.c b/arch/arm/mach-integrator/integrator_cp.c index 5b08e8e4cc8..29df06b35d0 100644 --- a/arch/arm/mach-integrator/integrator_cp.c +++ b/arch/arm/mach-integrator/integrator_cp.c @@ -26,6 +26,7 @@  #include <linux/of_irq.h>  #include <linux/of_address.h>  #include <linux/of_platform.h> +#include <linux/sys_soc.h>  #include <mach/hardware.h>  #include <mach/platform.h> @@ -51,11 +52,13 @@  #include "common.h" +/* Base address to the CP controller */ +static void __iomem *intcp_con_base; +  #define INTCP_PA_FLASH_BASE		0x24000000  #define INTCP_PA_CLCD_BASE		0xc0000000 -#define INTCP_VA_CTRL_BASE		__io_address(INTEGRATOR_CP_CTL_BASE)  #define INTCP_FLASHPROG			0x04  #define CINTEGRATOR_FLASHPROG_FLVPPEN	(1 << 0)  #define CINTEGRATOR_FLASHPROG_FLWREN	(1 << 1) @@ -82,11 +85,6 @@ static struct map_desc intcp_io_desc[] __initdata = {  		.length		= SZ_4K,  		.type		= MT_DEVICE  	}, { -		.virtual	= IO_ADDRESS(INTEGRATOR_SC_BASE), -		.pfn		= __phys_to_pfn(INTEGRATOR_SC_BASE), -		.length		= SZ_4K, -		.type		= MT_DEVICE -	}, {  		.virtual	= IO_ADDRESS(INTEGRATOR_EBI_BASE),  		.pfn		= __phys_to_pfn(INTEGRATOR_EBI_BASE),  		.length		= SZ_4K, @@ -107,11 +105,6 @@ static struct map_desc intcp_io_desc[] __initdata = {  		.length		= SZ_4K,  		.type		= MT_DEVICE  	}, { -		.virtual	= IO_ADDRESS(INTEGRATOR_UART1_BASE), -		.pfn		= __phys_to_pfn(INTEGRATOR_UART1_BASE), -		.length		= SZ_4K, -		.type		= MT_DEVICE -	}, {  		.virtual	= IO_ADDRESS(INTEGRATOR_DBG_BASE),  		.pfn		= __phys_to_pfn(INTEGRATOR_DBG_BASE),  		.length		= SZ_4K, @@ -126,11 +119,6 @@ static struct map_desc intcp_io_desc[] __initdata = {  		.pfn		= __phys_to_pfn(INTEGRATOR_CP_SIC_BASE),  		.length		= SZ_4K,  		.type		= MT_DEVICE -	}, { -		.virtual	= IO_ADDRESS(INTEGRATOR_CP_CTL_BASE), -		.pfn		= __phys_to_pfn(INTEGRATOR_CP_CTL_BASE), -		.length		= SZ_4K, -		.type		= MT_DEVICE  	}  }; @@ -146,9 +134,9 @@ static int intcp_flash_init(struct platform_device *dev)  {  	u32 val; -	val = readl(INTCP_VA_CTRL_BASE + INTCP_FLASHPROG); +	val = readl(intcp_con_base + INTCP_FLASHPROG);  	val |= CINTEGRATOR_FLASHPROG_FLWREN; -	writel(val, INTCP_VA_CTRL_BASE + INTCP_FLASHPROG); +	writel(val, intcp_con_base + INTCP_FLASHPROG);  	return 0;  } @@ -157,21 +145,21 @@ static void intcp_flash_exit(struct platform_device *dev)  {  	u32 val; -	val = readl(INTCP_VA_CTRL_BASE + INTCP_FLASHPROG); +	val = readl(intcp_con_base + INTCP_FLASHPROG);  	val &= ~(CINTEGRATOR_FLASHPROG_FLVPPEN|CINTEGRATOR_FLASHPROG_FLWREN); -	writel(val, INTCP_VA_CTRL_BASE + INTCP_FLASHPROG); +	writel(val, intcp_con_base + INTCP_FLASHPROG);  }  static void intcp_flash_set_vpp(struct platform_device *pdev, int on)  {  	u32 val; -	val = readl(INTCP_VA_CTRL_BASE + INTCP_FLASHPROG); +	val = readl(intcp_con_base + INTCP_FLASHPROG);  	if (on)  		val |= CINTEGRATOR_FLASHPROG_FLVPPEN;  	else  		val &= ~CINTEGRATOR_FLASHPROG_FLVPPEN; -	writel(val, INTCP_VA_CTRL_BASE + INTCP_FLASHPROG); +	writel(val, intcp_con_base + INTCP_FLASHPROG);  }  static struct physmap_flash_data intcp_flash_data = { @@ -190,7 +178,7 @@ static struct physmap_flash_data intcp_flash_data = {  static unsigned int mmc_status(struct device *dev)  {  	unsigned int status = readl(__io_address(0xca000000 + 4)); -	writel(8, __io_address(INTEGRATOR_CP_CTL_BASE + 8)); +	writel(8, intcp_con_base + 8);  	return status & 8;  } @@ -318,9 +306,9 @@ static struct of_dev_auxdata intcp_auxdata_lookup[] __initdata = {  	OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_RTC_BASE,  		"rtc", NULL),  	OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_UART0_BASE, -		"uart0", &integrator_uart_data), +		"uart0", NULL),  	OF_DEV_AUXDATA("arm,primecell", INTEGRATOR_UART1_BASE, -		"uart1", &integrator_uart_data), +		"uart1", NULL),  	OF_DEV_AUXDATA("arm,primecell", KMI0_BASE,  		"kmi0", NULL),  	OF_DEV_AUXDATA("arm,primecell", KMI1_BASE, @@ -338,8 +326,57 @@ static struct of_dev_auxdata intcp_auxdata_lookup[] __initdata = {  static void __init intcp_init_of(void)  { -	of_platform_populate(NULL, of_default_bus_match_table, -			intcp_auxdata_lookup, NULL); +	struct device_node *root; +	struct device_node *cpcon; +	struct device *parent; +	struct soc_device *soc_dev; +	struct soc_device_attribute *soc_dev_attr; +	u32 intcp_sc_id; +	int err; + +	/* Here we create an SoC device for the root node */ +	root = of_find_node_by_path("/"); +	if (!root) +		return; +	cpcon = of_find_node_by_path("/cpcon"); +	if (!cpcon) +		return; + +	intcp_con_base = of_iomap(cpcon, 0); +	if (!intcp_con_base) +		return; + +	intcp_sc_id = readl(intcp_con_base); + +	soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL); +	if (!soc_dev_attr) +		return; + +	err = of_property_read_string(root, "compatible", +				      &soc_dev_attr->soc_id); +	if (err) +		return; +	err = of_property_read_string(root, "model", &soc_dev_attr->machine); +	if (err) +		return; +	soc_dev_attr->family = "Integrator"; +	soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%c", +					   'A' + (intcp_sc_id & 0x0f)); + +	soc_dev = soc_device_register(soc_dev_attr); +	if (IS_ERR_OR_NULL(soc_dev)) { +		kfree(soc_dev_attr->revision); +		kfree(soc_dev_attr); +		return; +	} + +	parent = soc_device_to_device(soc_dev); + +	if (!IS_ERR_OR_NULL(parent)) +		integrator_init_sysfs(parent, intcp_sc_id); + +	of_platform_populate(root, of_default_bus_match_table, +			intcp_auxdata_lookup, parent);  }  static const char * intcp_dt_board_compat[] = { @@ -365,6 +402,28 @@ MACHINE_END  #ifdef CONFIG_ATAGS  /* + * For the ATAG boot some static mappings are needed. This will + * go away with the ATAG support down the road. + */ + +static struct map_desc intcp_io_desc_atag[] __initdata = { +	{ +		.virtual	= IO_ADDRESS(INTEGRATOR_CP_CTL_BASE), +		.pfn		= __phys_to_pfn(INTEGRATOR_CP_CTL_BASE), +		.length		= SZ_4K, +		.type		= MT_DEVICE +	}, +}; + +static void __init intcp_map_io_atag(void) +{ +	iotable_init(intcp_io_desc_atag, ARRAY_SIZE(intcp_io_desc_atag)); +	intcp_con_base = __io_address(INTEGRATOR_CP_CTL_BASE); +	intcp_map_io(); +} + + +/*   * This is where non-devicetree initialization code is collected and stashed   * for eventual deletion.   */ @@ -503,7 +562,7 @@ MACHINE_START(CINTEGRATOR, "ARM-IntegratorCP")  	/* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */  	.atag_offset	= 0x100,  	.reserve	= integrator_reserve, -	.map_io		= intcp_map_io, +	.map_io		= intcp_map_io_atag,  	.nr_irqs	= NR_IRQS_INTEGRATOR_CP,  	.init_early	= intcp_init_early,  	.init_irq	= intcp_init_irq, diff --git a/arch/arm/mach-integrator/pci_v3.c b/arch/arm/mach-integrator/pci_v3.c index bbeca59df66..be50e795536 100644 --- a/arch/arm/mach-integrator/pci_v3.c +++ b/arch/arm/mach-integrator/pci_v3.c @@ -191,12 +191,9 @@ static void __iomem *v3_open_config_window(struct pci_bus *bus,  	/*  	 * Trap out illegal values  	 */ -	if (offset > 255) -		BUG(); -	if (busnr > 255) -		BUG(); -	if (devfn > 255) -		BUG(); +	BUG_ON(offset > 255); +	BUG_ON(busnr > 255); +	BUG_ON(devfn > 255);  	if (busnr == 0) {  		int slot = PCI_SLOT(devfn); @@ -388,9 +385,10 @@ static int __init pci_v3_setup_resources(struct pci_sys_data *sys)   * means I can't get additional information on the reason for the pm2fb   * problems.  I suppose I'll just have to mind-meld with the machine. ;)   */ -#define SC_PCI     __io_address(INTEGRATOR_SC_PCIENABLE) -#define SC_LBFADDR __io_address(INTEGRATOR_SC_BASE + 0x20) -#define SC_LBFCODE __io_address(INTEGRATOR_SC_BASE + 0x24) +static void __iomem *ap_syscon_base; +#define INTEGRATOR_SC_PCIENABLE_OFFSET	0x18 +#define INTEGRATOR_SC_LBFADDR_OFFSET	0x20 +#define INTEGRATOR_SC_LBFCODE_OFFSET	0x24  static int  v3_pci_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs) @@ -401,13 +399,13 @@ v3_pci_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)  	char buf[128];  	sprintf(buf, "V3 fault: addr 0x%08lx, FSR 0x%03x, PC 0x%08lx [%08lx] LBFADDR=%08x LBFCODE=%02x ISTAT=%02x\n", -		addr, fsr, pc, instr, __raw_readl(SC_LBFADDR), __raw_readl(SC_LBFCODE) & 255, +		addr, fsr, pc, instr, __raw_readl(ap_syscon_base + INTEGRATOR_SC_LBFADDR_OFFSET), __raw_readl(ap_syscon_base + INTEGRATOR_SC_LBFCODE_OFFSET) & 255,  		v3_readb(V3_LB_ISTAT));  	printk(KERN_DEBUG "%s", buf);  #endif  	v3_writeb(V3_LB_ISTAT, 0); -	__raw_writel(3, SC_PCI); +	__raw_writel(3, ap_syscon_base + INTEGRATOR_SC_PCIENABLE_OFFSET);  	/*  	 * If the instruction being executed was a read, @@ -449,15 +447,15 @@ static irqreturn_t v3_irq(int dummy, void *devid)  	sprintf(buf, "V3 int %d: pc=0x%08lx [%08lx] LBFADDR=%08x LBFCODE=%02x "  		"ISTAT=%02x\n", IRQ_AP_V3INT, pc, instr, -		__raw_readl(SC_LBFADDR), -		__raw_readl(SC_LBFCODE) & 255, +		__raw_readl(ap_syscon_base + INTEGRATOR_SC_LBFADDR_OFFSET), +		__raw_readl(ap_syscon_base + INTEGRATOR_SC_LBFCODE_OFFSET) & 255,  		v3_readb(V3_LB_ISTAT));  	printascii(buf);  #endif  	v3_writew(V3_PCI_STAT, 0xf000);  	v3_writeb(V3_LB_ISTAT, 0); -	__raw_writel(3, SC_PCI); +	__raw_writel(3, ap_syscon_base + INTEGRATOR_SC_PCIENABLE_OFFSET);  #ifdef CONFIG_DEBUG_LL  	/* @@ -480,6 +478,10 @@ int __init pci_v3_setup(int nr, struct pci_sys_data *sys)  	if (nr == 0) {  		sys->mem_offset = PHYS_PCI_MEM_BASE;  		ret = pci_v3_setup_resources(sys); +		/* Remap the Integrator system controller */ +		ap_syscon_base = ioremap(INTEGRATOR_SC_BASE, 0x100); +		if (!ap_syscon_base) +			return -EINVAL;  	}  	return ret; @@ -568,7 +570,7 @@ void __init pci_v3_preinit(void)  	v3_writeb(V3_LB_ISTAT, 0);  	v3_writew(V3_LB_CFG, v3_readw(V3_LB_CFG) | (1 << 10));  	v3_writeb(V3_LB_IMASK, 0x28); -	__raw_writel(3, SC_PCI); +	__raw_writel(3, ap_syscon_base + INTEGRATOR_SC_PCIENABLE_OFFSET);  	/*  	 * Grab the PCI error interrupt. diff --git a/arch/arm/mach-kirkwood/board-dockstar.c b/arch/arm/mach-kirkwood/board-dockstar.c index f2fbb023e67..6912882b0aa 100644 --- a/arch/arm/mach-kirkwood/board-dockstar.c +++ b/arch/arm/mach-kirkwood/board-dockstar.c @@ -16,21 +16,8 @@  #include <linux/kernel.h>  #include <linux/init.h> -#include <linux/platform_device.h> -#include <linux/ata_platform.h>  #include <linux/mv643xx_eth.h> -#include <linux/of.h> -#include <linux/of_address.h> -#include <linux/of_fdt.h> -#include <linux/of_irq.h> -#include <linux/of_platform.h>  #include <linux/gpio.h> -#include <asm/mach-types.h> -#include <asm/mach/arch.h> -#include <asm/mach/map.h> -#include <mach/kirkwood.h> -#include <mach/bridge-regs.h> -#include <linux/platform_data/mmc-mvsdio.h>  #include "common.h"  #include "mpp.h" diff --git a/arch/arm/mach-kirkwood/board-dreamplug.c b/arch/arm/mach-kirkwood/board-dreamplug.c index 20af53a56c0..8a8ebe09e51 100644 --- a/arch/arm/mach-kirkwood/board-dreamplug.c +++ b/arch/arm/mach-kirkwood/board-dreamplug.c @@ -13,23 +13,8 @@  #include <linux/kernel.h>  #include <linux/init.h> -#include <linux/platform_device.h> -#include <linux/ata_platform.h>  #include <linux/mv643xx_eth.h> -#include <linux/of.h> -#include <linux/of_address.h> -#include <linux/of_fdt.h> -#include <linux/of_irq.h> -#include <linux/of_platform.h>  #include <linux/gpio.h> -#include <linux/mtd/physmap.h> -#include <linux/spi/flash.h> -#include <linux/spi/spi.h> -#include <asm/mach-types.h> -#include <asm/mach/arch.h> -#include <asm/mach/map.h> -#include <mach/kirkwood.h> -#include <mach/bridge-regs.h>  #include <linux/platform_data/mmc-mvsdio.h>  #include "common.h"  #include "mpp.h" diff --git a/arch/arm/mach-kirkwood/board-dt.c b/arch/arm/mach-kirkwood/board-dt.c index d94872fed8c..e75fbdb533d 100644 --- a/arch/arm/mach-kirkwood/board-dt.c +++ b/arch/arm/mach-kirkwood/board-dt.c @@ -26,7 +26,7 @@ static struct of_device_id kirkwood_dt_match_table[] __initdata = {  	{ }  }; -struct of_dev_auxdata kirkwood_auxdata_lookup[] __initdata = { +static struct of_dev_auxdata kirkwood_auxdata_lookup[] __initdata = {  	OF_DEV_AUXDATA("marvell,orion-spi", 0xf1010600, "orion_spi.0", NULL),  	OF_DEV_AUXDATA("marvell,mv64xxx-i2c", 0xf1011000, "mv64xxx_i2c.0",  		       NULL), @@ -98,7 +98,7 @@ static void __init kirkwood_dt_init(void)  			     kirkwood_auxdata_lookup, NULL);  } -static const char *kirkwood_dt_board_compat[] = { +static const char * const kirkwood_dt_board_compat[] = {  	"globalscale,dreamplug",  	"dlink,dns-320",  	"dlink,dns-325", diff --git a/arch/arm/mach-kirkwood/board-goflexnet.c b/arch/arm/mach-kirkwood/board-goflexnet.c index 001ca8c9698..5dcd0d62aa4 100644 --- a/arch/arm/mach-kirkwood/board-goflexnet.c +++ b/arch/arm/mach-kirkwood/board-goflexnet.c @@ -18,21 +18,8 @@  #include <linux/kernel.h>  #include <linux/init.h> -#include <linux/platform_device.h> -#include <linux/ata_platform.h>  #include <linux/mv643xx_eth.h> -#include <linux/of.h> -#include <linux/of_address.h> -#include <linux/of_fdt.h> -#include <linux/of_irq.h> -#include <linux/of_platform.h>  #include <linux/gpio.h> -#include <asm/mach-types.h> -#include <asm/mach/arch.h> -#include <asm/mach/map.h> -#include <mach/kirkwood.h> -#include <mach/bridge-regs.h> -#include <linux/platform_data/mmc-mvsdio.h>  #include "common.h"  #include "mpp.h" diff --git a/arch/arm/mach-kirkwood/board-ib62x0.c b/arch/arm/mach-kirkwood/board-ib62x0.c index cfc47f80e73..6d3a5642114 100644 --- a/arch/arm/mach-kirkwood/board-ib62x0.c +++ b/arch/arm/mach-kirkwood/board-ib62x0.c @@ -13,15 +13,9 @@  #include <linux/kernel.h>  #include <linux/init.h> -#include <linux/platform_device.h> -#include <linux/mtd/partitions.h> -#include <linux/ata_platform.h>  #include <linux/mv643xx_eth.h>  #include <linux/gpio.h>  #include <linux/input.h> -#include <asm/mach-types.h> -#include <asm/mach/arch.h> -#include <mach/kirkwood.h>  #include "common.h"  #include "mpp.h" diff --git a/arch/arm/mach-kirkwood/board-iconnect.c b/arch/arm/mach-kirkwood/board-iconnect.c index d084b1e2943..24f5aa7f698 100644 --- a/arch/arm/mach-kirkwood/board-iconnect.c +++ b/arch/arm/mach-kirkwood/board-iconnect.c @@ -10,16 +10,8 @@  #include <linux/kernel.h>  #include <linux/init.h> -#include <linux/platform_device.h>  #include <linux/of.h> -#include <linux/of_address.h> -#include <linux/of_fdt.h> -#include <linux/of_irq.h> -#include <linux/of_platform.h>  #include <linux/mv643xx_eth.h> -#include <linux/gpio.h> -#include <asm/mach/arch.h> -#include <mach/kirkwood.h>  #include "common.h"  #include "mpp.h" diff --git a/arch/arm/mach-kirkwood/board-iomega_ix2_200.c b/arch/arm/mach-kirkwood/board-iomega_ix2_200.c index 158fb97d039..e4ed62c28f5 100644 --- a/arch/arm/mach-kirkwood/board-iomega_ix2_200.c +++ b/arch/arm/mach-kirkwood/board-iomega_ix2_200.c @@ -10,10 +10,8 @@  #include <linux/kernel.h>  #include <linux/init.h> -#include <linux/platform_device.h>  #include <linux/mv643xx_eth.h>  #include <linux/ethtool.h> -#include <mach/kirkwood.h>  #include "common.h"  #include "mpp.h" diff --git a/arch/arm/mach-kirkwood/board-lsxl.c b/arch/arm/mach-kirkwood/board-lsxl.c index 83d8975592f..64e5cc6b6d5 100644 --- a/arch/arm/mach-kirkwood/board-lsxl.c +++ b/arch/arm/mach-kirkwood/board-lsxl.c @@ -14,17 +14,9 @@  #include <linux/kernel.h>  #include <linux/init.h>  #include <linux/platform_device.h> -#include <linux/mtd/partitions.h> -#include <linux/ata_platform.h> -#include <linux/spi/flash.h> -#include <linux/spi/spi.h>  #include <linux/mv643xx_eth.h>  #include <linux/gpio.h>  #include <linux/gpio-fan.h> -#include <linux/input.h> -#include <asm/mach-types.h> -#include <asm/mach/arch.h> -#include <mach/kirkwood.h>  #include "common.h"  #include "mpp.h" diff --git a/arch/arm/mach-kirkwood/board-ts219.c b/arch/arm/mach-kirkwood/board-ts219.c index 1750e68506c..f3bfedae3a2 100644 --- a/arch/arm/mach-kirkwood/board-ts219.c +++ b/arch/arm/mach-kirkwood/board-ts219.c @@ -19,9 +19,6 @@  #include <linux/init.h>  #include <linux/platform_device.h>  #include <linux/mv643xx_eth.h> -#include <linux/ata_platform.h> -#include <linux/gpio_keys.h> -#include <linux/input.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <mach/kirkwood.h> diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c index 2c6c218fb79..f0fc25bd3ff 100644 --- a/arch/arm/mach-kirkwood/common.c +++ b/arch/arm/mach-kirkwood/common.c @@ -18,10 +18,10 @@  #include <linux/clk-provider.h>  #include <linux/spinlock.h>  #include <linux/mv643xx_i2c.h> +#include <linux/timex.h> +#include <linux/kexec.h>  #include <net/dsa.h>  #include <asm/page.h> -#include <asm/timex.h> -#include <asm/kexec.h>  #include <asm/mach/map.h>  #include <asm/mach/time.h>  #include <mach/kirkwood.h> @@ -425,7 +425,7 @@ void __init kirkwood_sdio_init(struct mvsdio_platform_data *mvsdio_data)  /*****************************************************************************   * SPI   ****************************************************************************/ -void __init kirkwood_spi_init() +void __init kirkwood_spi_init(void)  {  	orion_spi_init(SPI_PHYS_BASE);  } @@ -646,8 +646,7 @@ void __init kirkwood_l2_init(void)  void __init kirkwood_init(void)  { -	printk(KERN_INFO "Kirkwood: %s, TCLK=%d.\n", -		kirkwood_id(), kirkwood_tclk); +	pr_info("Kirkwood: %s, TCLK=%d.\n", kirkwood_id(), kirkwood_tclk);  	/*  	 * Disable propagation of mbus errors to the CPU local bus, @@ -671,7 +670,7 @@ void __init kirkwood_init(void)  	kirkwood_xor1_init();  	kirkwood_crypto_init(); -#ifdef CONFIG_KEXEC  +#ifdef CONFIG_KEXEC  	kexec_reinit = kirkwood_enable_pcie;  #endif  } diff --git a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach-kirkwood/common.h index bcffd7ca1ca..6088e922788 100644 --- a/arch/arm/mach-kirkwood/common.h +++ b/arch/arm/mach-kirkwood/common.h @@ -47,7 +47,8 @@ void kirkwood_i2c_init(void);  void kirkwood_uart0_init(void);  void kirkwood_uart1_init(void);  void kirkwood_nand_init(struct mtd_partition *parts, int nr_parts, int delay); -void kirkwood_nand_init_rnb(struct mtd_partition *parts, int nr_parts, int (*dev_ready)(struct mtd_info *)); +void kirkwood_nand_init_rnb(struct mtd_partition *parts, int nr_parts, +			    int (*dev_ready)(struct mtd_info *));  void kirkwood_audio_init(void);  void kirkwood_restart(char, const char *);  void kirkwood_clk_init(void); diff --git a/arch/arm/mach-kirkwood/cpuidle.c b/arch/arm/mach-kirkwood/cpuidle.c index 0f171094187..f7304670f2f 100644 --- a/arch/arm/mach-kirkwood/cpuidle.c +++ b/arch/arm/mach-kirkwood/cpuidle.c @@ -64,7 +64,7 @@ static int kirkwood_init_cpuidle(void)  	cpuidle_register_driver(&kirkwood_idle_driver);  	if (cpuidle_register_device(device)) { -		printk(KERN_ERR "kirkwood_init_cpuidle: Failed registering\n"); +		pr_err("kirkwood_init_cpuidle: Failed registering\n");  		return -EIO;  	}  	return 0; diff --git a/arch/arm/mach-kirkwood/dockstar-setup.c b/arch/arm/mach-kirkwood/dockstar-setup.c index 23dcb19cc2a..791a98fafa2 100644 --- a/arch/arm/mach-kirkwood/dockstar-setup.c +++ b/arch/arm/mach-kirkwood/dockstar-setup.c @@ -93,7 +93,7 @@ static void __init dockstar_init(void)  	if (gpio_request(29, "USB Power Enable") != 0 ||  	    gpio_direction_output(29, 1) != 0) -		printk(KERN_ERR "can't set up GPIO 29 (USB Power Enable)\n"); +		pr_err("can't set up GPIO 29 (USB Power Enable)\n");  	kirkwood_ehci_init();  	kirkwood_ge00_init(&dockstar_ge00_data); diff --git a/arch/arm/mach-kirkwood/irq.c b/arch/arm/mach-kirkwood/irq.c index 884703535a0..2a97a2e4163 100644 --- a/arch/arm/mach-kirkwood/irq.c +++ b/arch/arm/mach-kirkwood/irq.c @@ -14,6 +14,7 @@  #include <mach/bridge-regs.h>  #include <plat/orion-gpio.h>  #include <plat/irq.h> +#include "common.h"  static int __initdata gpio0_irqs[4] = {  	IRQ_KIRKWOOD_GPIO_LOW_0_7, diff --git a/arch/arm/mach-kirkwood/lacie_v2-common.c b/arch/arm/mach-kirkwood/lacie_v2-common.c index 285edab776e..489495976fc 100644 --- a/arch/arm/mach-kirkwood/lacie_v2-common.c +++ b/arch/arm/mach-kirkwood/lacie_v2-common.c @@ -19,6 +19,7 @@  #include <mach/irqs.h>  #include <plat/time.h>  #include "common.h" +#include "lacie_v2-common.h"  /*****************************************************************************   * 512KB SPI Flash on Boot Device (MACRONIX MX25L4005) diff --git a/arch/arm/mach-kirkwood/mpp.c b/arch/arm/mach-kirkwood/mpp.c index 0c6ad63f10c..827cde42414 100644 --- a/arch/arm/mach-kirkwood/mpp.c +++ b/arch/arm/mach-kirkwood/mpp.c @@ -30,8 +30,8 @@ static unsigned int __init kirkwood_variant(void)  	if (dev == MV88F6180_DEV_ID)  		return MPP_F6180_MASK; -	printk(KERN_ERR "MPP setup: unknown kirkwood variant " -			"(dev %#x rev %#x)\n", dev, rev); +	pr_err("MPP setup: unknown kirkwood variant (dev %#x rev %#x)\n", +	       dev, rev);  	return 0;  } diff --git a/arch/arm/mach-kirkwood/netspace_v2-setup.c b/arch/arm/mach-kirkwood/netspace_v2-setup.c index 88b0788baca..728e86d33f0 100644 --- a/arch/arm/mach-kirkwood/netspace_v2-setup.c +++ b/arch/arm/mach-kirkwood/netspace_v2-setup.c @@ -79,7 +79,7 @@ static struct platform_device netspace_v2_gpio_buttons = {  	.name		= "gpio-keys",  	.id		= -1,  	.dev		= { -		.platform_data 	= &netspace_v2_button_data, +		.platform_data	= &netspace_v2_button_data,  	},  }; @@ -211,7 +211,7 @@ static unsigned int netspace_v2_mpp_config[] __initdata = {  	MPP29_GPIO,		/* Blue led (slow register) */  	MPP30_GPIO,		/* Blue led (command register) */  	MPP31_GPIO,		/* Board power off */ -	MPP32_GPIO, 		/* Power button (0 = Released, 1 = Pushed) */ +	MPP32_GPIO,		/* Power button (0 = Released, 1 = Pushed) */  	MPP33_GPO,		/* Fan speed (bit 2) */  	0  }; diff --git a/arch/arm/mach-kirkwood/openrd-setup.c b/arch/arm/mach-kirkwood/openrd-setup.c index 134ef50d58f..7e81e9b586b 100644 --- a/arch/arm/mach-kirkwood/openrd-setup.c +++ b/arch/arm/mach-kirkwood/openrd-setup.c @@ -121,14 +121,12 @@ static int __init uart1_mpp_config(void)  	kirkwood_mpp_conf(openrd_uart1_mpp_config);  	if (gpio_request(34, "SD_UART1_SEL")) { -		printk(KERN_ERR "GPIO request failed for SD/UART1 selection" -				", gpio: 34\n"); +		pr_err("GPIO request 34 failed for SD/UART1 selection\n");  		return -EIO;  	}  	if (gpio_request(28, "RS232_RS485_SEL")) { -		printk(KERN_ERR "GPIO request failed for RS232/RS485 selection" -				", gpio# 28\n"); +		pr_err("GPIO request 28 failed for RS232/RS485 selection\n");  		gpio_free(34);  		return -EIO;  	} @@ -185,15 +183,13 @@ static void __init openrd_init(void)  	if (uart1 <= 0) {  		if (uart1 < 0) -			printk(KERN_ERR "Invalid kernel parameter to select " -				"UART1. Defaulting to SD. ERROR CODE: %d\n", -				uart1); +			pr_err("Invalid kernel parameter to select UART1. Defaulting to SD. ERROR CODE: %d\n", +			       uart1);  		/* Select SD  		 * Pin # 34: 0 => UART1, 1 => SD */  		if (gpio_request(34, "SD_UART1_SEL")) { -			printk(KERN_ERR "GPIO request failed for SD/UART1 " -					"selection, gpio: 34\n"); +			pr_err("GPIO request 34 failed for SD/UART1 selection\n");  		} else {  			gpio_direction_output(34, 1); diff --git a/arch/arm/mach-kirkwood/pcie.c b/arch/arm/mach-kirkwood/pcie.c index 74fc5a074fc..ef102646ba9 100644 --- a/arch/arm/mach-kirkwood/pcie.c +++ b/arch/arm/mach-kirkwood/pcie.c @@ -26,7 +26,7 @@ static void kirkwood_enable_pcie_clk(const char *port)  	clk = clk_get_sys("pcie", port);  	if (IS_ERR(clk)) { -		printk(KERN_ERR "PCIE clock %s missing\n", port); +		pr_err("PCIE clock %s missing\n", port);  		return;  	}  	clk_prepare_enable(clk); @@ -168,7 +168,7 @@ static int __init kirkwood_pcie_setup(int nr, struct pci_sys_data *sys)  		return 0;  	index = pcie_port_map[nr]; -	printk(KERN_INFO "PCI: bus%d uses PCIe port %d\n", sys->busnr, index); +	pr_info("PCI: bus%d uses PCIe port %d\n", sys->busnr, index);  	pp = kzalloc(sizeof(*pp), GFP_KERNEL);  	if (!pp) @@ -186,7 +186,8 @@ static int __init kirkwood_pcie_setup(int nr, struct pci_sys_data *sys)  	case 1:  		kirkwood_enable_pcie_clk("1");  		pcie1_ioresources_init(pp); -		pci_ioremap_io(SZ_64K * sys->busnr, KIRKWOOD_PCIE1_IO_PHYS_BASE); +		pci_ioremap_io(SZ_64K * sys->busnr, +			       KIRKWOOD_PCIE1_IO_PHYS_BASE);  		break;  	default:  		panic("PCIe setup: invalid controller %d", index); @@ -229,22 +230,6 @@ static void __devinit rc_pci_fixup(struct pci_dev *dev)  }  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL, PCI_ANY_ID, rc_pci_fixup); -static struct pci_bus __init * -kirkwood_pcie_scan_bus(int nr, struct pci_sys_data *sys) -{ -	struct pci_bus *bus; - -	if (nr < num_pcie_ports) { -		bus = pci_scan_root_bus(NULL, sys->busnr, &pcie_ops, sys, -					&sys->resources); -	} else { -		bus = NULL; -		BUG(); -	} - -	return bus; -} -  static int __init kirkwood_pcie_map_irq(const struct pci_dev *dev, u8 slot,  	u8 pin)  { @@ -256,19 +241,19 @@ static int __init kirkwood_pcie_map_irq(const struct pci_dev *dev, u8 slot,  static struct hw_pci kirkwood_pci __initdata = {  	.setup		= kirkwood_pcie_setup, -	.scan		= kirkwood_pcie_scan_bus,  	.map_irq	= kirkwood_pcie_map_irq, +	.ops            = &pcie_ops,  };  static void __init add_pcie_port(int index, void __iomem *base)  { -	printk(KERN_INFO "Kirkwood PCIe port %d: ", index); +	pr_info("Kirkwood PCIe port %d: ", index);  	if (orion_pcie_link_up(base)) { -		printk(KERN_INFO "link up\n"); +		pr_info("link up\n");  		pcie_port_map[num_pcie_ports++] = index;  	} else -		printk(KERN_INFO "link down, ignoring\n"); +		pr_info("link down, ignoring\n");  }  void __init kirkwood_pcie_init(unsigned int portmask) diff --git a/arch/arm/mach-kirkwood/sheevaplug-setup.c b/arch/arm/mach-kirkwood/sheevaplug-setup.c index 28d0abaf4bd..8a175948b28 100644 --- a/arch/arm/mach-kirkwood/sheevaplug-setup.c +++ b/arch/arm/mach-kirkwood/sheevaplug-setup.c @@ -117,7 +117,7 @@ static void __init sheevaplug_init(void)  	if (gpio_request(29, "USB Power Enable") != 0 ||  	    gpio_direction_output(29, 1) != 0) -		printk(KERN_ERR "can't set up GPIO 29 (USB Power Enable)\n"); +		pr_err("can't set up GPIO 29 (USB Power Enable)\n");  	kirkwood_ehci_init();  	kirkwood_ge00_init(&sheevaplug_ge00_data); diff --git a/arch/arm/mach-kirkwood/t5325-setup.c b/arch/arm/mach-kirkwood/t5325-setup.c index bad738e4404..f2daf711e72 100644 --- a/arch/arm/mach-kirkwood/t5325-setup.c +++ b/arch/arm/mach-kirkwood/t5325-setup.c @@ -29,7 +29,7 @@  #include "common.h"  #include "mpp.h" -struct mtd_partition hp_t5325_partitions[] = { +static struct mtd_partition hp_t5325_partitions[] = {  	{  		.name		= "u-boot env",  		.size		= SZ_64K, @@ -59,14 +59,14 @@ struct mtd_partition hp_t5325_partitions[] = {  	},  }; -const struct flash_platform_data hp_t5325_flash = { +static const struct flash_platform_data hp_t5325_flash = {  	.type		= "mx25l8005",  	.name		= "spi_flash",  	.parts		= hp_t5325_partitions,  	.nr_parts	= ARRAY_SIZE(hp_t5325_partitions),  }; -struct spi_board_info __initdata hp_t5325_spi_slave_info[] = { +static struct spi_board_info __initdata hp_t5325_spi_slave_info[] = {  	{  		.modalias	= "m25p80",  		.platform_data	= &hp_t5325_flash, diff --git a/arch/arm/mach-kirkwood/ts41x-setup.c b/arch/arm/mach-kirkwood/ts41x-setup.c index 367a9400f53..e4c61279ea8 100644 --- a/arch/arm/mach-kirkwood/ts41x-setup.c +++ b/arch/arm/mach-kirkwood/ts41x-setup.c @@ -170,8 +170,7 @@ static int __init ts41x_pci_init(void)  		else  			kirkwood_pcie_init(KW_PCIE0);  	} - -   return 0; +	return 0;  }  subsys_initcall(ts41x_pci_init); diff --git a/arch/arm/mach-kirkwood/tsx1x-common.c b/arch/arm/mach-kirkwood/tsx1x-common.c index 8943ede29b4..cec87cef76c 100644 --- a/arch/arm/mach-kirkwood/tsx1x-common.c +++ b/arch/arm/mach-kirkwood/tsx1x-common.c @@ -7,6 +7,7 @@  #include <linux/serial_reg.h>  #include <mach/kirkwood.h>  #include "common.h" +#include "tsx1x-common.h"  /*   * QNAP TS-x1x Boards flash @@ -29,7 +30,7 @@   *   ***************************************************************************/ -struct mtd_partition qnap_tsx1x_partitions[] = { +static struct mtd_partition qnap_tsx1x_partitions[] = {  	{  		.name		= "U-Boot",  		.size		= 0x00080000, @@ -58,14 +59,14 @@ struct mtd_partition qnap_tsx1x_partitions[] = {  	},  }; -const struct flash_platform_data qnap_tsx1x_flash = { +static const struct flash_platform_data qnap_tsx1x_flash = {  	.type		= "m25p128",  	.name		= "spi_flash",  	.parts		= qnap_tsx1x_partitions,  	.nr_parts	= ARRAY_SIZE(qnap_tsx1x_partitions),  }; -struct spi_board_info __initdata qnap_tsx1x_spi_slave_info[] = { +static struct spi_board_info __initdata qnap_tsx1x_spi_slave_info[] = {  	{  		.modalias	= "m25p80",  		.platform_data	= &qnap_tsx1x_flash, diff --git a/arch/arm/mach-omap1/common.h b/arch/arm/mach-omap1/common.h index dab2e102b9d..b53e0854422 100644 --- a/arch/arm/mach-omap1/common.h +++ b/arch/arm/mach-omap1/common.h @@ -93,6 +93,6 @@ extern int ocpi_enable(void);  static inline int ocpi_enable(void) { return 0; }  #endif -extern int omap1_get_reset_sources(void); +extern u32 omap1_get_reset_sources(void);  #endif /* __ARCH_ARM_MACH_OMAP1_COMMON_H */ diff --git a/arch/arm/mach-omap1/devices.c b/arch/arm/mach-omap1/devices.c index 7155ed8b97f..0af635205e8 100644 --- a/arch/arm/mach-omap1/devices.c +++ b/arch/arm/mach-omap1/devices.c @@ -17,6 +17,8 @@  #include <linux/platform_device.h>  #include <linux/spi/spi.h> +#include <linux/platform_data/omap-wd-timer.h> +  #include <asm/mach/map.h>  #include <mach/tc.h> @@ -447,18 +449,31 @@ static struct resource wdt_resources[] = {  };  static struct platform_device omap_wdt_device = { -	.name	   = "omap_wdt", -	.id	     = -1, +	.name		= "omap_wdt", +	.id		= -1,  	.num_resources	= ARRAY_SIZE(wdt_resources),  	.resource	= wdt_resources,  };  static int __init omap_init_wdt(void)  { +	struct omap_wd_timer_platform_data pdata; +	int ret; +  	if (!cpu_is_omap16xx())  		return -ENODEV; -	return platform_device_register(&omap_wdt_device); +	pdata.read_reset_sources = omap1_get_reset_sources; + +	ret = platform_device_register(&omap_wdt_device); +	if (!ret) { +		ret = platform_device_add_data(&omap_wdt_device, &pdata, +					       sizeof(pdata)); +		if (ret) +			platform_device_del(&omap_wdt_device); +	} + +	return ret;  }  subsys_initcall(omap_init_wdt);  #endif diff --git a/arch/arm/mach-omap1/reset.c b/arch/arm/mach-omap1/reset.c index a0a9f97772e..5eebd7e889d 100644 --- a/arch/arm/mach-omap1/reset.c +++ b/arch/arm/mach-omap1/reset.c @@ -4,10 +4,9 @@  #include <linux/kernel.h>  #include <linux/io.h> -#include <plat/prcm.h> -  #include <mach/hardware.h> +#include "iomap.h"  #include "common.h"  /* ARM_SYSST bit shifts related to SoC reset sources */ @@ -43,12 +42,12 @@ void omap1_restart(char mode, const char *cmd)   * Returns bits that represent the last reset source for the SoC.  The   * format is standardized across OMAPs for use by the OMAP watchdog.   */ -int omap1_get_reset_sources(void) +u32 omap1_get_reset_sources(void)  { -	int ret = 0; +	u32 ret = 0;  	u16 rs; -	rs = __raw_readw(ARM_SYSST); +	rs = __raw_readw(OMAP1_IO_ADDRESS(ARM_SYSST));  	if (rs & (1 << ARM_SYSST_POR_SHIFT))  		ret |= 1 << OMAP_GLOBAL_COLD_RST_SRC_ID_SHIFT; diff --git a/arch/arm/mach-omap1/timer.c b/arch/arm/mach-omap1/timer.c index cdeb9d3ef64..bde7a35e500 100644 --- a/arch/arm/mach-omap1/timer.c +++ b/arch/arm/mach-omap1/timer.c @@ -25,6 +25,7 @@  #include <linux/err.h>  #include <linux/slab.h>  #include <linux/platform_device.h> +#include <linux/platform_data/dmtimer-omap.h>  #include <mach/irqs.h> diff --git a/arch/arm/mach-omap1/timer32k.c b/arch/arm/mach-omap1/timer32k.c index 89368195bf0..41152fadd4c 100644 --- a/arch/arm/mach-omap1/timer32k.c +++ b/arch/arm/mach-omap1/timer32k.c @@ -51,7 +51,6 @@  #include <asm/mach/time.h>  #include <plat/counter-32k.h> -#include <plat/dmtimer.h>  #include <mach/hardware.h> diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index d5e834a9075..11c57af01a8 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile @@ -50,6 +50,11 @@ AFLAGS_sram242x.o			:=-Wa,-march=armv6  AFLAGS_sram243x.o			:=-Wa,-march=armv6  AFLAGS_sram34xx.o			:=-Wa,-march=armv7-a +# Restart code (OMAP4/5 currently in omap4-common.c) +obj-$(CONFIG_SOC_OMAP2420)		+= omap2-restart.o +obj-$(CONFIG_SOC_OMAP2430)		+= omap2-restart.o +obj-$(CONFIG_ARCH_OMAP3)		+= omap3-restart.o +  # Pin multiplexing  obj-$(CONFIG_SOC_OMAP2420)		+= mux2420.o  obj-$(CONFIG_SOC_OMAP2430)		+= mux2430.o @@ -68,6 +73,8 @@ obj-$(CONFIG_ARCH_OMAP4)		+= opp4xxx_data.o  endif  # Power Management +obj-$(CONFIG_OMAP_PM_NOOP)		+= omap-pm-noop.o +  ifeq ($(CONFIG_PM),y)  obj-$(CONFIG_ARCH_OMAP2)		+= pm24xx.o  obj-$(CONFIG_ARCH_OMAP2)		+= sleep24xx.o @@ -75,7 +82,6 @@ obj-$(CONFIG_ARCH_OMAP3)		+= pm34xx.o sleep34xx.o  obj-$(CONFIG_ARCH_OMAP4)		+= pm44xx.o omap-mpuss-lowpower.o  obj-$(CONFIG_SOC_OMAP5)			+= omap-mpuss-lowpower.o  obj-$(CONFIG_PM_DEBUG)			+= pm-debug.o -obj-$(CONFIG_OMAP_PM_NOOP)		+= omap-pm-noop.o  obj-$(CONFIG_POWER_AVS_OMAP)		+= sr_device.o  obj-$(CONFIG_POWER_AVS_OMAP_CLASS3)    += smartreflex-class3.o @@ -95,7 +101,7 @@ obj-$(CONFIG_ARCH_OMAP4)                += cpuidle44xx.o  endif  # PRCM -obj-y					+= prcm.o prm_common.o cm_common.o +obj-y					+= prm_common.o cm_common.o  obj-$(CONFIG_ARCH_OMAP2)		+= prm2xxx_3xxx.o prm2xxx.o cm2xxx.o  obj-$(CONFIG_ARCH_OMAP3)		+= prm2xxx_3xxx.o prm3xxx.o cm3xxx.o  obj-$(CONFIG_ARCH_OMAP3)		+= vc3xxx_data.o vp3xxx_data.o diff --git a/arch/arm/mach-omap2/am33xx.h b/arch/arm/mach-omap2/am33xx.h index 06c19bb7bca..43296c1af9e 100644 --- a/arch/arm/mach-omap2/am33xx.h +++ b/arch/arm/mach-omap2/am33xx.h @@ -21,5 +21,6 @@  #define AM33XX_SCM_BASE		0x44E10000  #define AM33XX_CTRL_BASE	AM33XX_SCM_BASE  #define AM33XX_PRCM_BASE	0x44E00000 +#define AM33XX_TAP_BASE		(AM33XX_CTRL_BASE + 0x3FC)  #endif /* __ASM_ARCH_AM33XX_H */ diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c index d1c01625fe5..4815ea6f8f5 100644 --- a/arch/arm/mach-omap2/board-2430sdp.c +++ b/arch/arm/mach-omap2/board-2430sdp.c @@ -285,5 +285,5 @@ MACHINE_START(OMAP_2430SDP, "OMAP2430 sdp2430 board")  	.init_machine	= omap_2430sdp_init,  	.init_late	= omap2430_init_late,  	.timer		= &omap2_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap2xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c index 79fd9048fd7..6601754f951 100644 --- a/arch/arm/mach-omap2/board-3430sdp.c +++ b/arch/arm/mach-omap2/board-3430sdp.c @@ -597,5 +597,5 @@ MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board")  	.init_machine	= omap_3430sdp_init,  	.init_late	= omap3430_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-3630sdp.c b/arch/arm/mach-omap2/board-3630sdp.c index 81871b1c735..050aaa77125 100644 --- a/arch/arm/mach-omap2/board-3630sdp.c +++ b/arch/arm/mach-omap2/board-3630sdp.c @@ -212,5 +212,5 @@ MACHINE_START(OMAP_3630SDP, "OMAP 3630SDP board")  	.init_machine	= omap_sdp_init,  	.init_late	= omap3630_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c index fd80d976872..85dfa71e0dc 100644 --- a/arch/arm/mach-omap2/board-4430sdp.c +++ b/arch/arm/mach-omap2/board-4430sdp.c @@ -881,5 +881,5 @@ MACHINE_START(OMAP_4430SDP, "OMAP4430 4430SDP board")  	.init_machine	= omap_4430sdp_init,  	.init_late	= omap4430_init_late,  	.timer		= &omap4_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap44xx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-am3517crane.c b/arch/arm/mach-omap2/board-am3517crane.c index 603503c587b..51b96a1206d 100644 --- a/arch/arm/mach-omap2/board-am3517crane.c +++ b/arch/arm/mach-omap2/board-am3517crane.c @@ -93,5 +93,5 @@ MACHINE_START(CRANEBOARD, "AM3517/05 CRANEBOARD")  	.init_machine	= am3517_crane_init,  	.init_late	= am35xx_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c index 96d6c5ab5d4..4be58fd071f 100644 --- a/arch/arm/mach-omap2/board-am3517evm.c +++ b/arch/arm/mach-omap2/board-am3517evm.c @@ -393,5 +393,5 @@ MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM")  	.init_machine	= am3517_evm_init,  	.init_late	= am35xx_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-apollon.c b/arch/arm/mach-omap2/board-apollon.c index 64cf1bde0f3..5d0a61f5416 100644 --- a/arch/arm/mach-omap2/board-apollon.c +++ b/arch/arm/mach-omap2/board-apollon.c @@ -338,5 +338,5 @@ MACHINE_START(OMAP_APOLLON, "OMAP24xx Apollon")  	.init_machine	= omap_apollon_init,  	.init_late	= omap2420_init_late,  	.timer		= &omap2_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap2xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c index a8cad2237a2..c8e37dc0089 100644 --- a/arch/arm/mach-omap2/board-cm-t35.c +++ b/arch/arm/mach-omap2/board-cm-t35.c @@ -751,18 +751,18 @@ MACHINE_START(CM_T35, "Compulab CM-T35")  	.init_machine	= cm_t35_init,  	.init_late	= omap35xx_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END  MACHINE_START(CM_T3730, "Compulab CM-T3730") -	.atag_offset    = 0x100, -	.reserve        = omap_reserve, -	.map_io         = omap3_map_io, -	.init_early     = omap3630_init_early, -	.init_irq       = omap3_init_irq, +	.atag_offset	= 0x100, +	.reserve	= omap_reserve, +	.map_io		= omap3_map_io, +	.init_early	= omap3630_init_early, +	.init_irq	= omap3_init_irq,  	.handle_irq	= omap3_intc_handle_irq, -	.init_machine   = cm_t3730_init, +	.init_machine	= cm_t3730_init,  	.init_late     = omap3630_init_late, -	.timer          = &omap3_timer, -	.restart	= omap_prcm_restart, +	.timer		= &omap3_timer, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-cm-t3517.c b/arch/arm/mach-omap2/board-cm-t3517.c index 278664731d2..ebbc2adb499 100644 --- a/arch/arm/mach-omap2/board-cm-t3517.c +++ b/arch/arm/mach-omap2/board-cm-t3517.c @@ -297,6 +297,6 @@ MACHINE_START(CM_T3517, "Compulab CM-T3517")  	.handle_irq	= omap3_intc_handle_irq,  	.init_machine	= cm_t3517_init,  	.init_late	= am35xx_init_late, -	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.timer		= &omap3_gp_timer, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index 933479e3673..7667eb74952 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c @@ -643,5 +643,5 @@ MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000")  	.init_machine	= devkit8000_init,  	.init_late	= omap35xx_init_late,  	.timer		= &omap3_secure_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index 601ecdfb1cf..f0715a369c4 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c @@ -57,7 +57,7 @@ DT_MACHINE_START(OMAP242X_DT, "Generic OMAP2420 (Flattened Device Tree)")  	.init_machine	= omap_generic_init,  	.timer		= &omap2_timer,  	.dt_compat	= omap242x_boards_compat, -	.restart	= omap_prcm_restart, +	.restart	= omap2xxx_restart,  MACHINE_END  #endif @@ -76,7 +76,7 @@ DT_MACHINE_START(OMAP243X_DT, "Generic OMAP2430 (Flattened Device Tree)")  	.init_machine	= omap_generic_init,  	.timer		= &omap2_timer,  	.dt_compat	= omap243x_boards_compat, -	.restart	= omap_prcm_restart, +	.restart	= omap2xxx_restart,  MACHINE_END  #endif @@ -95,7 +95,24 @@ DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)")  	.init_machine	= omap_generic_init,  	.timer		= &omap3_timer,  	.dt_compat	= omap3_boards_compat, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart, +MACHINE_END + +static const char *omap3_gp_boards_compat[] __initdata = { +	"ti,omap3-beagle", +	NULL, +}; + +DT_MACHINE_START(OMAP3_GP_DT, "Generic OMAP3-GP (Flattened Device Tree)") +	.reserve	= omap_reserve, +	.map_io		= omap3_map_io, +	.init_early	= omap3430_init_early, +	.init_irq	= omap_intc_of_init, +	.handle_irq	= omap3_intc_handle_irq, +	.init_machine	= omap_generic_init, +	.timer		= &omap3_secure_timer, +	.dt_compat	= omap3_gp_boards_compat, +	.restart	= omap3xxx_restart,  MACHINE_END  #endif @@ -134,7 +151,7 @@ DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)")  	.init_late	= omap4430_init_late,  	.timer		= &omap4_timer,  	.dt_compat	= omap4_boards_compat, -	.restart	= omap_prcm_restart, +	.restart	= omap44xx_restart,  MACHINE_END  #endif @@ -154,6 +171,6 @@ DT_MACHINE_START(OMAP5_DT, "Generic OMAP5 (Flattened Device Tree)")  	.init_machine	= omap_generic_init,  	.timer		= &omap5_timer,  	.dt_compat	= omap5_boards_compat, -	.restart	= omap_prcm_restart, +	.restart	= omap44xx_restart,  MACHINE_END  #endif diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c index 8668c72ee81..b626dbe6f7b 100644 --- a/arch/arm/mach-omap2/board-h4.c +++ b/arch/arm/mach-omap2/board-h4.c @@ -386,5 +386,5 @@ MACHINE_START(OMAP_H4, "OMAP2420 H4 board")  	.init_machine	= omap_h4_init,  	.init_late	= omap2420_init_late,  	.timer		= &omap2_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap2xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c index 549080c8446..0f24cb84ba5 100644 --- a/arch/arm/mach-omap2/board-igep0020.c +++ b/arch/arm/mach-omap2/board-igep0020.c @@ -656,7 +656,7 @@ MACHINE_START(IGEP0020, "IGEP v2 board")  	.init_machine	= igep_init,  	.init_late	= omap35xx_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END  MACHINE_START(IGEP0030, "IGEP OMAP3 module") @@ -669,5 +669,5 @@ MACHINE_START(IGEP0030, "IGEP OMAP3 module")  	.init_machine	= igep_init,  	.init_late	= omap35xx_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c index 1164b106103..0869f4f3d3e 100644 --- a/arch/arm/mach-omap2/board-ldp.c +++ b/arch/arm/mach-omap2/board-ldp.c @@ -436,5 +436,5 @@ MACHINE_START(OMAP_LDP, "OMAP LDP board")  	.init_machine	= omap_ldp_init,  	.init_late	= omap3430_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c index e3efcb88cb3..a4e167c55c1 100644 --- a/arch/arm/mach-omap2/board-n8x0.c +++ b/arch/arm/mach-omap2/board-n8x0.c @@ -690,7 +690,7 @@ MACHINE_START(NOKIA_N800, "Nokia N800")  	.init_machine	= n8x0_init_machine,  	.init_late	= omap2420_init_late,  	.timer		= &omap2_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap2xxx_restart,  MACHINE_END  MACHINE_START(NOKIA_N810, "Nokia N810") @@ -703,7 +703,7 @@ MACHINE_START(NOKIA_N810, "Nokia N810")  	.init_machine	= n8x0_init_machine,  	.init_late	= omap2420_init_late,  	.timer		= &omap2_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap2xxx_restart,  MACHINE_END  MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX") @@ -716,5 +716,5 @@ MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX")  	.init_machine	= n8x0_init_machine,  	.init_late	= omap2420_init_late,  	.timer		= &omap2_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap2xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 5a3800da903..22c483d5dfa 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -545,5 +545,5 @@ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")  	.init_machine	= omap3_beagle_init,  	.init_late	= omap3_init_late,  	.timer		= &omap3_secure_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c index 3c0b9a90f3b..54647d6286b 100644 --- a/arch/arm/mach-omap2/board-omap3evm.c +++ b/arch/arm/mach-omap2/board-omap3evm.c @@ -757,5 +757,5 @@ MACHINE_START(OMAP3EVM, "OMAP3 EVM")  	.init_machine	= omap3_evm_init,  	.init_late	= omap35xx_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-omap3logic.c b/arch/arm/mach-omap2/board-omap3logic.c index e84e2a87537..2a065ba6eb5 100644 --- a/arch/arm/mach-omap2/board-omap3logic.c +++ b/arch/arm/mach-omap2/board-omap3logic.c @@ -232,7 +232,7 @@ MACHINE_START(OMAP3_TORPEDO, "Logic OMAP3 Torpedo board")  	.init_machine	= omap3logic_init,  	.init_late	= omap35xx_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END  MACHINE_START(OMAP3530_LV_SOM, "OMAP Logic 3530 LV SOM board") @@ -245,5 +245,5 @@ MACHINE_START(OMAP3530_LV_SOM, "OMAP Logic 3530 LV SOM board")  	.init_machine	= omap3logic_init,  	.init_late	= omap35xx_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c index ce31bd329f3..a53a6683c1b 100644 --- a/arch/arm/mach-omap2/board-omap3pandora.c +++ b/arch/arm/mach-omap2/board-omap3pandora.c @@ -619,5 +619,5 @@ MACHINE_START(OMAP3_PANDORA, "Pandora Handheld Console")  	.init_machine	= omap3pandora_init,  	.init_late	= omap35xx_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c index ba1124538b9..d8638b3b4f9 100644 --- a/arch/arm/mach-omap2/board-omap3stalker.c +++ b/arch/arm/mach-omap2/board-omap3stalker.c @@ -427,5 +427,5 @@ MACHINE_START(SBC3530, "OMAP3 STALKER")  	.init_machine		= omap3_stalker_init,  	.init_late		= omap35xx_init_late,  	.timer			= &omap3_secure_timer, -	.restart		= omap_prcm_restart, +	.restart		= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-omap3touchbook.c b/arch/arm/mach-omap2/board-omap3touchbook.c index a225d819633..263cb9cfbf3 100644 --- a/arch/arm/mach-omap2/board-omap3touchbook.c +++ b/arch/arm/mach-omap2/board-omap3touchbook.c @@ -387,5 +387,5 @@ MACHINE_START(TOUCHBOOK, "OMAP3 touchbook Board")  	.init_machine	= omap3_touchbook_init,  	.init_late	= omap3430_init_late,  	.timer		= &omap3_secure_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c index 8c00b99cd2a..12a3a24d5bb 100644 --- a/arch/arm/mach-omap2/board-omap4panda.c +++ b/arch/arm/mach-omap2/board-omap4panda.c @@ -524,5 +524,5 @@ MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board")  	.init_machine	= omap4_panda_init,  	.init_late	= omap4430_init_late,  	.timer		= &omap4_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap44xx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c index f5ba43fa040..c8fde3e5644 100644 --- a/arch/arm/mach-omap2/board-overo.c +++ b/arch/arm/mach-omap2/board-overo.c @@ -552,5 +552,5 @@ MACHINE_START(OVERO, "Gumstix Overo")  	.init_machine	= overo_init,  	.init_late	= omap35xx_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-rm680.c b/arch/arm/mach-omap2/board-rm680.c index 1997e0e722a..cbcb1b2dc31 100644 --- a/arch/arm/mach-omap2/board-rm680.c +++ b/arch/arm/mach-omap2/board-rm680.c @@ -148,7 +148,7 @@ MACHINE_START(NOKIA_RM680, "Nokia RM-680 board")  	.init_machine	= rm680_init,  	.init_late	= omap3630_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END  MACHINE_START(NOKIA_RM696, "Nokia RM-696 board") @@ -161,5 +161,5 @@ MACHINE_START(NOKIA_RM696, "Nokia RM-696 board")  	.init_machine	= rm680_init,  	.init_late	= omap3630_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c index c388aec1479..bf8f74b0ce3 100644 --- a/arch/arm/mach-omap2/board-rx51.c +++ b/arch/arm/mach-omap2/board-rx51.c @@ -127,5 +127,5 @@ MACHINE_START(NOKIA_RX51, "Nokia RX-51 board")  	.init_machine	= rx51_init,  	.init_late	= omap3430_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-ti8168evm.c b/arch/arm/mach-omap2/board-ti8168evm.c index 5e672c2b6a4..1a3e056d63a 100644 --- a/arch/arm/mach-omap2/board-ti8168evm.c +++ b/arch/arm/mach-omap2/board-ti8168evm.c @@ -46,7 +46,7 @@ MACHINE_START(TI8168EVM, "ti8168evm")  	.timer		= &omap3_timer,  	.init_machine	= ti81xx_evm_init,  	.init_late	= ti81xx_init_late, -	.restart	= omap_prcm_restart, +	.restart	= omap44xx_restart,  MACHINE_END  MACHINE_START(TI8148EVM, "ti8148evm") @@ -58,5 +58,5 @@ MACHINE_START(TI8148EVM, "ti8148evm")  	.timer		= &omap3_timer,  	.init_machine	= ti81xx_evm_init,  	.init_late	= ti81xx_init_late, -	.restart	= omap_prcm_restart, +	.restart	= omap44xx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/board-zoom.c b/arch/arm/mach-omap2/board-zoom.c index 8feb4d99b96..d7fa31e6723 100644 --- a/arch/arm/mach-omap2/board-zoom.c +++ b/arch/arm/mach-omap2/board-zoom.c @@ -138,7 +138,7 @@ MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 board")  	.init_machine	= omap_zoom_init,  	.init_late	= omap3430_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END  MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board") @@ -151,5 +151,5 @@ MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board")  	.init_machine	= omap_zoom_init,  	.init_late	= omap3630_init_late,  	.timer		= &omap3_timer, -	.restart	= omap_prcm_restart, +	.restart	= omap3xxx_restart,  MACHINE_END diff --git a/arch/arm/mach-omap2/clkt2xxx_apll.c b/arch/arm/mach-omap2/clkt2xxx_apll.c index e3f0c1e262a..8c5b13e7ee6 100644 --- a/arch/arm/mach-omap2/clkt2xxx_apll.c +++ b/arch/arm/mach-omap2/clkt2xxx_apll.c @@ -21,7 +21,6 @@  #include <linux/clk.h>  #include <linux/io.h> -#include <plat/prcm.h>  #include "clock.h"  #include "clock2xxx.h" @@ -37,44 +36,16 @@  #define APLLS_CLKIN_13MHZ		2  #define APLLS_CLKIN_12MHZ		3 -void __iomem *cm_idlest_pll; -  /* Private functions */ -/* Enable an APLL if off */ -static int omap2_clk_apll_enable(struct clk *clk, u32 status_mask) -{ -	u32 cval, apll_mask; - -	apll_mask = EN_APLL_LOCKED << clk->enable_bit; - -	cval = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKEN); - -	if ((cval & apll_mask) == apll_mask) -		return 0;   /* apll already enabled */ - -	cval &= ~apll_mask; -	cval |= apll_mask; -	omap2_cm_write_mod_reg(cval, PLL_MOD, CM_CLKEN); - -	omap2_cm_wait_idlest(cm_idlest_pll, status_mask, -			     OMAP24XX_CM_IDLEST_VAL, __clk_get_name(clk)); - -	/* -	 * REVISIT: Should we return an error code if omap2_wait_clock_ready() -	 * fails? -	 */ -	return 0; -} - -static int omap2_clk_apll96_enable(struct clk *clk) +static int _apll96_enable(struct clk *clk)  { -	return omap2_clk_apll_enable(clk, OMAP24XX_ST_96M_APLL_MASK); +	return omap2xxx_cm_apll96_enable();  } -static int omap2_clk_apll54_enable(struct clk *clk) +static int _apll54_enable(struct clk *clk)  { -	return omap2_clk_apll_enable(clk, OMAP24XX_ST_54M_APLL_MASK); +	return omap2xxx_cm_apll54_enable();  }  static void _apll96_allow_idle(struct clk *clk) @@ -97,28 +68,28 @@ static void _apll54_deny_idle(struct clk *clk)  	omap2xxx_cm_set_apll54_disable_autoidle();  } -/* Stop APLL */ -static void omap2_clk_apll_disable(struct clk *clk) +static void _apll96_disable(struct clk *clk)  { -	u32 cval; +	omap2xxx_cm_apll96_disable(); +} -	cval = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKEN); -	cval &= ~(EN_APLL_LOCKED << clk->enable_bit); -	omap2_cm_write_mod_reg(cval, PLL_MOD, CM_CLKEN); +static void _apll54_disable(struct clk *clk) +{ +	omap2xxx_cm_apll54_disable();  }  /* Public data */  const struct clkops clkops_apll96 = { -	.enable		= omap2_clk_apll96_enable, -	.disable	= omap2_clk_apll_disable, +	.enable		= _apll96_enable, +	.disable	= _apll96_disable,  	.allow_idle	= _apll96_allow_idle,  	.deny_idle	= _apll96_deny_idle,  };  const struct clkops clkops_apll54 = { -	.enable		= omap2_clk_apll54_enable, -	.disable	= omap2_clk_apll_disable, +	.enable		= _apll54_enable, +	.disable	= _apll54_disable,  	.allow_idle	= _apll54_allow_idle,  	.deny_idle	= _apll54_deny_idle,  }; diff --git a/arch/arm/mach-omap2/clkt2xxx_dpllcore.c b/arch/arm/mach-omap2/clkt2xxx_dpllcore.c index 0d2f14c2dcc..825e44cdf1c 100644 --- a/arch/arm/mach-omap2/clkt2xxx_dpllcore.c +++ b/arch/arm/mach-omap2/clkt2xxx_dpllcore.c @@ -28,16 +28,22 @@  #include "clock.h"  #include "clock2xxx.h"  #include "opp2xxx.h" -#include "cm2xxx_3xxx.h" +#include "cm2xxx.h"  #include "cm-regbits-24xx.h"  #include "sdrc.h"  #include "sram.h"  /* #define DOWN_VARIABLE_DPLL 1 */		/* Experimental */ +/* + * dpll_core_ck: pointer to the combined dpll_ck + core_ck on OMAP2xxx + * (currently defined as "dpll_ck" in the OMAP2xxx clock tree).  Set + * during dpll_ck init and used later by omap2xxx_clk_get_core_rate(). + */ +static struct clk *dpll_core_ck; +  /**   * omap2xxx_clk_get_core_rate - return the CORE_CLK rate - * @clk: pointer to the combined dpll_ck + core_ck (currently "dpll_ck")   *   * Returns the CORE_CLK rate.  CORE_CLK can have one of three rate   * sources on OMAP2xxx: the DPLL CLKOUT rate, DPLL CLKOUTX2, or 32KHz @@ -45,12 +51,14 @@   * struct clk *dpll_ck, which is a composite clock of dpll_ck and   * core_ck.   */ -unsigned long omap2xxx_clk_get_core_rate(struct clk *clk) +unsigned long omap2xxx_clk_get_core_rate(void)  {  	long long core_clk;  	u32 v; -	core_clk = omap2_get_dpll_rate(clk); +	WARN_ON(!dpll_core_ck); + +	core_clk = omap2_get_dpll_rate(dpll_core_ck);  	v = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKSEL2);  	v &= OMAP24XX_CORE_CLK_SRC_MASK; @@ -98,7 +106,7 @@ static long omap2_dpllcore_round_rate(unsigned long target_rate)  unsigned long omap2_dpllcore_recalc(struct clk *clk)  { -	return omap2xxx_clk_get_core_rate(clk); +	return omap2xxx_clk_get_core_rate();  }  int omap2_reprogram_dpllcore(struct clk *clk, unsigned long rate) @@ -108,7 +116,7 @@ int omap2_reprogram_dpllcore(struct clk *clk, unsigned long rate)  	struct prcm_config tmpset;  	const struct dpll_data *dd; -	cur_rate = omap2xxx_clk_get_core_rate(dclk); +	cur_rate = omap2xxx_clk_get_core_rate();  	mult = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKSEL2);  	mult &= OMAP24XX_CORE_CLK_SRC_MASK; @@ -169,3 +177,19 @@ int omap2_reprogram_dpllcore(struct clk *clk, unsigned long rate)  	return 0;  } +/** + * omap2xxx_clkt_dpllcore_init - clk init function for dpll_ck + * @clk: struct clk *dpll_ck + * + * Store a local copy of @clk in dpll_core_ck so other code can query + * the core rate without having to clk_get(), which can sleep.  Must + * only be called once.  No return value.  XXX If the clock + * registration process is ever changed such that dpll_ck is no longer + * statically defined, this code may need to change to increment some + * kind of use count on dpll_ck. + */ +void omap2xxx_clkt_dpllcore_init(struct clk *clk) +{ +	WARN(dpll_core_ck, "dpll_core_ck already set - should never happen"); +	dpll_core_ck = clk; +} diff --git a/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c b/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c index a38ebb20972..1c2041fbd71 100644 --- a/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c +++ b/arch/arm/mach-omap2/clkt2xxx_virt_prcm_set.c @@ -1,7 +1,7 @@  /*   * OMAP2xxx DVFS virtual clock functions   * - * Copyright (C) 2005-2008 Texas Instruments, Inc. + * Copyright (C) 2005-2008, 2012 Texas Instruments, Inc.   * Copyright (C) 2004-2010 Nokia Corporation   *   * Contacts: @@ -37,7 +37,7 @@  #include "clock.h"  #include "clock2xxx.h"  #include "opp2xxx.h" -#include "cm2xxx_3xxx.h" +#include "cm2xxx.h"  #include "cm-regbits-24xx.h"  #include "sdrc.h"  #include "sram.h" @@ -45,6 +45,13 @@  const struct prcm_config *curr_prcm_set;  const struct prcm_config *rate_table; +/* + * sys_ck_rate: the rate of the external high-frequency clock + * oscillator on the board.  Set by the SoC-specific clock init code. + * Once set during a boot, will not change. + */ +static unsigned long sys_ck_rate; +  /**   * omap2_table_mpu_recalc - just return the MPU speed   * @clk: virt_prcm_set struct clk @@ -66,15 +73,14 @@ unsigned long omap2_table_mpu_recalc(struct clk *clk)  long omap2_round_to_table_rate(struct clk *clk, unsigned long rate)  {  	const struct prcm_config *ptr; -	long highest_rate, sys_clk_rate; +	long highest_rate;  	highest_rate = -EINVAL; -	sys_clk_rate = __clk_get_rate(sclk);  	for (ptr = rate_table; ptr->mpu_speed; ptr++) {  		if (!(ptr->flags & cpu_mask))  			continue; -		if (ptr->xtal_speed != sys_clk_rate) +		if (ptr->xtal_speed != sys_ck_rate)  			continue;  		highest_rate = ptr->mpu_speed; @@ -93,15 +99,12 @@ int omap2_select_table_rate(struct clk *clk, unsigned long rate)  	const struct prcm_config *prcm;  	unsigned long found_speed = 0;  	unsigned long flags; -	long sys_clk_rate; - -	sys_clk_rate = __clk_get_rate(sclk);  	for (prcm = rate_table; prcm->mpu_speed; prcm++) {  		if (!(prcm->flags & cpu_mask))  			continue; -		if (prcm->xtal_speed != sys_clk_rate) +		if (prcm->xtal_speed != sys_ck_rate)  			continue;  		if (prcm->mpu_speed <= rate) { @@ -117,7 +120,7 @@ int omap2_select_table_rate(struct clk *clk, unsigned long rate)  	}  	curr_prcm_set = prcm; -	cur_rate = omap2xxx_clk_get_core_rate(dclk); +	cur_rate = omap2xxx_clk_get_core_rate();  	if (prcm->dpll_speed == cur_rate / 2) {  		omap2xxx_sdrc_reprogram(CORE_CLK_SRC_DPLL, 1); @@ -167,3 +170,50 @@ int omap2_select_table_rate(struct clk *clk, unsigned long rate)  	return 0;  } + +/** + * omap2xxx_clkt_vps_check_bootloader_rate - determine which of the rate + * table sets matches the current CORE DPLL hardware rate + * + * Check the MPU rate set by bootloader.  Sets the 'curr_prcm_set' + * global to point to the active rate set when found; otherwise, sets + * it to NULL.  No return value; + */ +void omap2xxx_clkt_vps_check_bootloader_rates(void) +{ +	const struct prcm_config *prcm = NULL; +	unsigned long rate; + +	rate = omap2xxx_clk_get_core_rate(); +	for (prcm = rate_table; prcm->mpu_speed; prcm++) { +		if (!(prcm->flags & cpu_mask)) +			continue; +		if (prcm->xtal_speed != sys_ck_rate) +			continue; +		if (prcm->dpll_speed <= rate) +			break; +	} +	curr_prcm_set = prcm; +} + +/** + * omap2xxx_clkt_vps_late_init - store a copy of the sys_ck rate + * + * Store a copy of the sys_ck rate for later use by the OMAP2xxx DVFS + * code.  (The sys_ck rate does not -- or rather, must not -- change + * during kernel runtime.)  Must be called after we have a valid + * sys_ck rate, but before the virt_prcm_set clock rate is + * recalculated.  No return value. + */ +void omap2xxx_clkt_vps_late_init(void) +{ +	struct clk *c; + +	c = clk_get(NULL, "sys_ck"); +	if (IS_ERR(c)) { +		WARN(1, "could not locate sys_ck\n"); +	} else { +		sys_ck_rate = clk_get_rate(c); +		clk_put(c); +	} +} diff --git a/arch/arm/mach-omap2/clkt_iclk.c b/arch/arm/mach-omap2/clkt_iclk.c index 7c8d41e4983..fe774a09dd0 100644 --- a/arch/arm/mach-omap2/clkt_iclk.c +++ b/arch/arm/mach-omap2/clkt_iclk.c @@ -14,7 +14,6 @@  #include <linux/clk.h>  #include <linux/io.h> -#include <plat/prcm.h>  #include "clock.h"  #include "clock2xxx.h" diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c index 9205ea7d8dd..e381d991092 100644 --- a/arch/arm/mach-omap2/clock.c +++ b/arch/arm/mach-omap2/clock.c @@ -26,17 +26,24 @@  #include <asm/cpu.h> -#include <plat/prcm.h>  #include <trace/events/power.h>  #include "soc.h"  #include "clockdomain.h"  #include "clock.h" +#include "cm.h"  #include "cm2xxx.h"  #include "cm3xxx.h"  #include "cm-regbits-24xx.h"  #include "cm-regbits-34xx.h" +#include "common.h" + +/* + * MAX_MODULE_ENABLE_WAIT: maximum of number of microseconds to wait + * for a module to indicate that it is no longer in idle + */ +#define MAX_MODULE_ENABLE_WAIT		100000  u16 cpu_mask; @@ -58,6 +65,40 @@ static DEFINE_SPINLOCK(clockfw_lock);  /* Private functions */ + +/** + * _wait_idlest_generic - wait for a module to leave the idle state + * @reg: virtual address of module IDLEST register + * @mask: value to mask against to determine if the module is active + * @idlest: idle state indicator (0 or 1) for the clock + * @name: name of the clock (for printk) + * + * Wait for a module to leave idle, where its idle-status register is + * not inside the CM module.  Returns 1 if the module left idle + * promptly, or 0 if the module did not leave idle before the timeout + * elapsed.  XXX Deprecated - should be moved into drivers for the + * individual IP block that the IDLEST register exists in. + */ +static int _wait_idlest_generic(void __iomem *reg, u32 mask, u8 idlest, +				const char *name) +{ +	int i = 0, ena = 0; + +	ena = (idlest) ? 0 : mask; + +	omap_test_timeout(((__raw_readl(reg) & mask) == ena), +			  MAX_MODULE_ENABLE_WAIT, i); + +	if (i < MAX_MODULE_ENABLE_WAIT) +		pr_debug("omap clock: module associated with clock %s ready after %d loops\n", +			 name, i); +	else +		pr_err("omap clock: module associated with clock %s didn't enable in %d tries\n", +		       name, MAX_MODULE_ENABLE_WAIT); + +	return (i < MAX_MODULE_ENABLE_WAIT) ? 1 : 0; +}; +  /**   * _omap2_module_wait_ready - wait for an OMAP module to leave IDLE   * @clk: struct clk * belonging to the module @@ -71,7 +112,9 @@ static DEFINE_SPINLOCK(clockfw_lock);  static void _omap2_module_wait_ready(struct clk *clk)  {  	void __iomem *companion_reg, *idlest_reg; -	u8 other_bit, idlest_bit, idlest_val; +	u8 other_bit, idlest_bit, idlest_val, idlest_reg_id; +	s16 prcm_mod; +	int r;  	/* Not all modules have multiple clocks that their IDLEST depends on */  	if (clk->ops->find_companion) { @@ -82,8 +125,14 @@ static void _omap2_module_wait_ready(struct clk *clk)  	clk->ops->find_idlest(clk, &idlest_reg, &idlest_bit, &idlest_val); -	omap2_cm_wait_idlest(idlest_reg, (1 << idlest_bit), idlest_val, -			     __clk_get_name(clk)); +	r = cm_split_idlest_reg(idlest_reg, &prcm_mod, &idlest_reg_id); +	if (r) { +		/* IDLEST register not in the CM module */ +		_wait_idlest_generic(idlest_reg, (1 << idlest_bit), idlest_val, +				     clk->name); +	} else { +		cm_wait_module_ready(prcm_mod, idlest_reg_id, idlest_bit); +	};  }  /* Public functions */ diff --git a/arch/arm/mach-omap2/clock.h b/arch/arm/mach-omap2/clock.h index cfba1ffe5cc..ff9789bc0fd 100644 --- a/arch/arm/mach-omap2/clock.h +++ b/arch/arm/mach-omap2/clock.h @@ -409,33 +409,6 @@ extern void omap2_clkt_iclk_deny_idle(struct clk *clk);  u32 omap2_get_dpll_rate(struct clk *clk);  void omap2_init_dpll_parent(struct clk *clk); -int omap2_wait_clock_ready(void __iomem *reg, u32 cval, const char *name); - - -#ifdef CONFIG_ARCH_OMAP2 -void omap2xxx_clk_prepare_for_reboot(void); -#else -static inline void omap2xxx_clk_prepare_for_reboot(void) -{ -} -#endif - -#ifdef CONFIG_ARCH_OMAP3 -void omap3_clk_prepare_for_reboot(void); -#else -static inline void omap3_clk_prepare_for_reboot(void) -{ -} -#endif - -#ifdef CONFIG_ARCH_OMAP4 -void omap4_clk_prepare_for_reboot(void); -#else -static inline void omap4_clk_prepare_for_reboot(void) -{ -} -#endif -  int omap2_dflt_clk_enable(struct clk *clk);  void omap2_dflt_clk_disable(struct clk *clk);  void omap2_clk_dflt_find_companion(struct clk *clk, void __iomem **other_reg, @@ -454,7 +427,6 @@ extern const struct clkops clkops_dummy;  extern const struct clkops clkops_omap2_dflt;  extern struct clk_functions omap2_clk_functions; -extern struct clk *vclk, *sclk;  extern const struct clksel_rate gpt_32k_rates[];  extern const struct clksel_rate gpt_sys_rates[]; diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c index da1e388f22f..608874b651e 100644 --- a/arch/arm/mach-omap2/clock2420_data.c +++ b/arch/arm/mach-omap2/clock2420_data.c @@ -1,7 +1,7 @@  /*   * OMAP2420 clock data   * - * Copyright (C) 2005-2009 Texas Instruments, Inc. + * Copyright (C) 2005-2009, 2012 Texas Instruments, Inc.   * Copyright (C) 2004-2011 Nokia Corporation   *   * Contacts: @@ -124,6 +124,7 @@ static struct clk dpll_ck = {  	.name		= "dpll_ck",  	.ops		= &clkops_omap2xxx_dpll_ops,  	.parent		= &sys_ck,		/* Can be func_32k also */ +	.init		= &omap2xxx_clkt_dpllcore_init,  	.dpll_data	= &dpll_dd,  	.clkdm_name	= "wkup_clkdm",  	.recalc		= &omap2_dpllcore_recalc, @@ -1924,12 +1925,9 @@ static struct omap_clk omap2420_clks[] = {  int __init omap2420_clk_init(void)  { -	const struct prcm_config *prcm;  	struct omap_clk *c; -	u32 clkrate;  	prcm_clksrc_ctrl = OMAP2420_PRCM_CLKSRC_CTRL; -	cm_idlest_pll = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST);  	cpu_mask = RATE_IN_242X;  	rate_table = omap2420_rate_table; @@ -1949,20 +1947,13 @@ int __init omap2420_clk_init(void)  		omap2_init_clk_clkdm(c->lk.clk);  	} +	omap2xxx_clkt_vps_late_init(); +  	/* Disable autoidle on all clocks; let the PM code enable it later */  	omap_clk_disable_autoidle_all(); -	/* Check the MPU rate set by bootloader */ -	clkrate = omap2xxx_clk_get_core_rate(&dpll_ck); -	for (prcm = rate_table; prcm->mpu_speed; prcm++) { -		if (!(prcm->flags & cpu_mask)) -			continue; -		if (prcm->xtal_speed != sys_ck.rate) -			continue; -		if (prcm->dpll_speed <= clkrate) -			break; -	} -	curr_prcm_set = prcm; +	/* XXX Can this be done from the virt_prcm_set clk init function? */ +	omap2xxx_clkt_vps_check_bootloader_rates();  	recalculate_root_clocks(); @@ -1976,11 +1967,6 @@ int __init omap2420_clk_init(void)  	 */  	clk_enable_init_clocks(); -	/* Avoid sleeping sleeping during omap2_clk_prepare_for_reboot() */ -	vclk = clk_get(NULL, "virt_prcm_set"); -	sclk = clk_get(NULL, "sys_ck"); -	dclk = clk_get(NULL, "dpll_ck"); -  	return 0;  } diff --git a/arch/arm/mach-omap2/clock2430_data.c b/arch/arm/mach-omap2/clock2430_data.c index c97dafef894..b179b6ef432 100644 --- a/arch/arm/mach-omap2/clock2430_data.c +++ b/arch/arm/mach-omap2/clock2430_data.c @@ -1,7 +1,7 @@  /*   * OMAP2430 clock data   * - * Copyright (C) 2005-2009 Texas Instruments, Inc. + * Copyright (C) 2005-2009, 2012 Texas Instruments, Inc.   * Copyright (C) 2004-2011 Nokia Corporation   *   * Contacts: @@ -123,6 +123,7 @@ static struct clk dpll_ck = {  	.name		= "dpll_ck",  	.ops		= &clkops_omap2xxx_dpll_ops,  	.parent		= &sys_ck,		/* Can be func_32k also */ +	.init		= &omap2xxx_clkt_dpllcore_init,  	.dpll_data	= &dpll_dd,  	.clkdm_name	= "wkup_clkdm",  	.recalc		= &omap2_dpllcore_recalc, @@ -2023,12 +2024,9 @@ static struct omap_clk omap2430_clks[] = {  int __init omap2430_clk_init(void)  { -	const struct prcm_config *prcm;  	struct omap_clk *c; -	u32 clkrate;  	prcm_clksrc_ctrl = OMAP2430_PRCM_CLKSRC_CTRL; -	cm_idlest_pll = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST);  	cpu_mask = RATE_IN_243X;  	rate_table = omap2430_rate_table; @@ -2048,20 +2046,13 @@ int __init omap2430_clk_init(void)  		omap2_init_clk_clkdm(c->lk.clk);  	} +	omap2xxx_clkt_vps_late_init(); +  	/* Disable autoidle on all clocks; let the PM code enable it later */  	omap_clk_disable_autoidle_all(); -	/* Check the MPU rate set by bootloader */ -	clkrate = omap2xxx_clk_get_core_rate(&dpll_ck); -	for (prcm = rate_table; prcm->mpu_speed; prcm++) { -		if (!(prcm->flags & cpu_mask)) -			continue; -		if (prcm->xtal_speed != sys_ck.rate) -			continue; -		if (prcm->dpll_speed <= clkrate) -			break; -	} -	curr_prcm_set = prcm; +	/* XXX Can this be done from the virt_prcm_set clk init function? */ +	omap2xxx_clkt_vps_check_bootloader_rates();  	recalculate_root_clocks(); @@ -2075,11 +2066,6 @@ int __init omap2430_clk_init(void)  	 */  	clk_enable_init_clocks(); -	/* Avoid sleeping sleeping during omap2_clk_prepare_for_reboot() */ -	vclk = clk_get(NULL, "virt_prcm_set"); -	sclk = clk_get(NULL, "sys_ck"); -	dclk = clk_get(NULL, "dpll_ck"); -  	return 0;  } diff --git a/arch/arm/mach-omap2/clock2xxx.c b/arch/arm/mach-omap2/clock2xxx.c index 5feee16fee0..5f7faeb4c19 100644 --- a/arch/arm/mach-omap2/clock2xxx.c +++ b/arch/arm/mach-omap2/clock2xxx.c @@ -28,27 +28,11 @@  #include "cm.h"  #include "cm-regbits-24xx.h" -struct clk *vclk, *sclk, *dclk; -  /*   * Omap24xx specific clock functions   */  /* - * Set clocks for bypass mode for reboot to work. - */ -void omap2xxx_clk_prepare_for_reboot(void) -{ -	u32 rate; - -	if (vclk == NULL || sclk == NULL) -		return; - -	rate = clk_get_rate(sclk); -	clk_set_rate(vclk, rate); -} - -/*   * Switch the MPU rate if specified on cmdline.  We cannot do this   * early until cmdline is parsed.  XXX This should be removed from the   * clock code and handled by the OPP layer code in the near future. diff --git a/arch/arm/mach-omap2/clock2xxx.h b/arch/arm/mach-omap2/clock2xxx.h index cb6df8ca9e4..ce809c913b6 100644 --- a/arch/arm/mach-omap2/clock2xxx.h +++ b/arch/arm/mach-omap2/clock2xxx.h @@ -15,10 +15,13 @@ unsigned long omap2xxx_sys_clk_recalc(struct clk *clk);  unsigned long omap2_osc_clk_recalc(struct clk *clk);  unsigned long omap2_dpllcore_recalc(struct clk *clk);  int omap2_reprogram_dpllcore(struct clk *clk, unsigned long rate); -unsigned long omap2xxx_clk_get_core_rate(struct clk *clk); +unsigned long omap2xxx_clk_get_core_rate(void);  u32 omap2xxx_get_apll_clkin(void);  u32 omap2xxx_get_sysclkdiv(void);  void omap2xxx_clk_prepare_for_reboot(void); +void omap2xxx_clkt_dpllcore_init(struct clk *clk); +void omap2xxx_clkt_vps_check_bootloader_rates(void); +void omap2xxx_clkt_vps_late_init(void);  #ifdef CONFIG_SOC_OMAP2420  int omap2420_clk_init(void); @@ -32,9 +35,7 @@ int omap2430_clk_init(void);  #define omap2430_clk_init()	do { } while(0)  #endif -extern void __iomem *prcm_clksrc_ctrl, *cm_idlest_pll; - -extern struct clk *dclk; +extern void __iomem *prcm_clksrc_ctrl;  extern const struct clkops clkops_omap2430_i2chs_wait;  extern const struct clkops clkops_oscck; diff --git a/arch/arm/mach-omap2/cm-regbits-24xx.h b/arch/arm/mach-omap2/cm-regbits-24xx.h index 68629043756..11eaf16880c 100644 --- a/arch/arm/mach-omap2/cm-regbits-24xx.h +++ b/arch/arm/mach-omap2/cm-regbits-24xx.h @@ -333,7 +333,9 @@  #define OMAP24XX_EN_DPLL_MASK				(0x3 << 0)  /* CM_IDLEST_CKGEN */ +#define OMAP24XX_ST_54M_APLL_SHIFT			9  #define OMAP24XX_ST_54M_APLL_MASK			(1 << 9) +#define OMAP24XX_ST_96M_APLL_SHIFT			8  #define OMAP24XX_ST_96M_APLL_MASK			(1 << 8)  #define OMAP24XX_ST_54M_CLK_MASK			(1 << 6)  #define OMAP24XX_ST_12M_CLK_MASK			(1 << 5) diff --git a/arch/arm/mach-omap2/cm.h b/arch/arm/mach-omap2/cm.h index b3cee913dd6..93473f9a551 100644 --- a/arch/arm/mach-omap2/cm.h +++ b/arch/arm/mach-omap2/cm.h @@ -1,7 +1,7 @@  /*   * OMAP2+ Clock Management prototypes   * - * Copyright (C) 2007-2009 Texas Instruments, Inc. + * Copyright (C) 2007-2009, 2012 Texas Instruments, Inc.   * Copyright (C) 2007-2009 Nokia Corporation   *   * Written by Paul Walmsley @@ -22,6 +22,12 @@   */  #define MAX_MODULE_READY_TIME		2000 +# ifndef __ASSEMBLER__ +extern void __iomem *cm_base; +extern void __iomem *cm2_base; +extern void omap2_set_globals_cm(void __iomem *cm, void __iomem *cm2); +# endif +  /*   * MAX_MODULE_DISABLE_TIME: max duration in microseconds to wait for   * the PRCM to request that a module enter the inactive state in the @@ -37,8 +43,18 @@  /**   * struct cm_ll_data - fn ptrs to per-SoC CM function implementations + * @split_idlest_reg: ptr to the SoC CM-specific split_idlest_reg impl + * @wait_module_ready: ptr to the SoC CM-specific wait_module_ready impl   */ -struct cm_ll_data {}; +struct cm_ll_data { +	int (*split_idlest_reg)(void __iomem *idlest_reg, s16 *prcm_inst, +				u8 *idlest_reg_id); +	int (*wait_module_ready)(s16 prcm_mod, u8 idlest_id, u8 idlest_shift); +}; + +extern int cm_split_idlest_reg(void __iomem *idlest_reg, s16 *prcm_inst, +			       u8 *idlest_reg_id); +extern int cm_wait_module_ready(s16 prcm_mod, u8 idlest_id, u8 idlest_shift);  extern int cm_register(struct cm_ll_data *cld);  extern int cm_unregister(struct cm_ll_data *cld); diff --git a/arch/arm/mach-omap2/cm2xxx.c b/arch/arm/mach-omap2/cm2xxx.c index 64165013daf..db650690e9d 100644 --- a/arch/arm/mach-omap2/cm2xxx.c +++ b/arch/arm/mach-omap2/cm2xxx.c @@ -35,6 +35,9 @@  #define OMAP2XXX_APLL_AUTOIDLE_DISABLE			0x0  #define OMAP2XXX_APLL_AUTOIDLE_LOW_POWER_STOP		0x3 +/* CM_IDLEST_PLL bit value offset for APLLs (OMAP2xxx only) */ +#define EN_APLL_LOCKED					3 +  static const u8 omap2xxx_cm_idlest_offs[] = {  	CM_IDLEST1, CM_IDLEST2, OMAP2430_CM_IDLEST3, OMAP24XX_CM_IDLEST4  }; @@ -99,7 +102,7 @@ void omap2xxx_cm_set_dpll_auto_low_power_stop(void)  }  /* - * APLL autoidle control + * APLL control   */  static void _omap2xxx_set_apll_autoidle(u8 m, u32 mask) @@ -136,6 +139,102 @@ void omap2xxx_cm_set_apll96_auto_low_power_stop(void)  				    OMAP24XX_AUTO_96M_MASK);  } +/* Enable an APLL if off */ +static int _omap2xxx_apll_enable(u8 enable_bit, u8 status_bit) +{ +	u32 v, m; + +	m = EN_APLL_LOCKED << enable_bit; + +	v = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKEN); +	if (v & m) +		return 0;   /* apll already enabled */ + +	v |= m; +	omap2_cm_write_mod_reg(v, PLL_MOD, CM_CLKEN); + +	omap2xxx_cm_wait_module_ready(PLL_MOD, 1, status_bit); + +	/* +	 * REVISIT: Should we return an error code if +	 * omap2xxx_cm_wait_module_ready() fails? +	 */ +	return 0; +} + +/* Stop APLL */ +static void _omap2xxx_apll_disable(u8 enable_bit) +{ +	u32 v; + +	v = omap2_cm_read_mod_reg(PLL_MOD, CM_CLKEN); +	v &= ~(EN_APLL_LOCKED << enable_bit); +	omap2_cm_write_mod_reg(v, PLL_MOD, CM_CLKEN); +} + +/* Enable an APLL if off */ +int omap2xxx_cm_apll54_enable(void) +{ +	return _omap2xxx_apll_enable(OMAP24XX_EN_54M_PLL_SHIFT, +				     OMAP24XX_ST_54M_APLL_SHIFT); +} + +/* Enable an APLL if off */ +int omap2xxx_cm_apll96_enable(void) +{ +	return _omap2xxx_apll_enable(OMAP24XX_EN_96M_PLL_SHIFT, +				     OMAP24XX_ST_96M_APLL_SHIFT); +} + +/* Stop APLL */ +void omap2xxx_cm_apll54_disable(void) +{ +	_omap2xxx_apll_disable(OMAP24XX_EN_54M_PLL_SHIFT); +} + +/* Stop APLL */ +void omap2xxx_cm_apll96_disable(void) +{ +	_omap2xxx_apll_disable(OMAP24XX_EN_96M_PLL_SHIFT); +} + +/** + * omap2xxx_cm_split_idlest_reg - split CM_IDLEST reg addr into its components + * @idlest_reg: CM_IDLEST* virtual address + * @prcm_inst: pointer to an s16 to return the PRCM instance offset + * @idlest_reg_id: pointer to a u8 to return the CM_IDLESTx register ID + * + * XXX This function is only needed until absolute register addresses are + * removed from the OMAP struct clk records. + */ +int omap2xxx_cm_split_idlest_reg(void __iomem *idlest_reg, s16 *prcm_inst, +				 u8 *idlest_reg_id) +{ +	unsigned long offs; +	u8 idlest_offs; +	int i; + +	if (idlest_reg < cm_base || idlest_reg > (cm_base + 0x0fff)) +		return -EINVAL; + +	idlest_offs = (unsigned long)idlest_reg & 0xff; +	for (i = 0; i < ARRAY_SIZE(omap2xxx_cm_idlest_offs); i++) { +		if (idlest_offs == omap2xxx_cm_idlest_offs[i]) { +			*idlest_reg_id = i + 1; +			break; +		} +	} + +	if (i == ARRAY_SIZE(omap2xxx_cm_idlest_offs)) +		return -EINVAL; + +	offs = idlest_reg - cm_base; +	offs &= 0xff00; +	*prcm_inst = offs; + +	return 0; +} +  /*   *   */ @@ -253,3 +352,30 @@ struct clkdm_ops omap2_clkdm_operations = {  	.clkdm_clk_disable	= omap2xxx_clkdm_clk_disable,  }; +/* + * + */ + +static struct cm_ll_data omap2xxx_cm_ll_data = { +	.split_idlest_reg	= &omap2xxx_cm_split_idlest_reg, +	.wait_module_ready	= &omap2xxx_cm_wait_module_ready, +}; + +int __init omap2xxx_cm_init(void) +{ +	if (!cpu_is_omap24xx()) +		return 0; + +	return cm_register(&omap2xxx_cm_ll_data); +} + +static void __exit omap2xxx_cm_exit(void) +{ +	if (!cpu_is_omap24xx()) +		return; + +	/* Should never happen */ +	WARN(cm_unregister(&omap2xxx_cm_ll_data), +	     "%s: cm_ll_data function pointer mismatch\n", __func__); +} +__exitcall(omap2xxx_cm_exit); diff --git a/arch/arm/mach-omap2/cm2xxx.h b/arch/arm/mach-omap2/cm2xxx.h index bce3c4be6d1..4cbb39b051d 100644 --- a/arch/arm/mach-omap2/cm2xxx.h +++ b/arch/arm/mach-omap2/cm2xxx.h @@ -60,6 +60,10 @@ extern void omap2xxx_cm_set_apll96_auto_low_power_stop(void);  extern bool omap2xxx_cm_is_clkdm_in_hwsup(s16 module, u32 mask);  extern int omap2xxx_cm_wait_module_ready(s16 prcm_mod, u8 idlest_id,  					 u8 idlest_shift); +extern int omap2xxx_cm_split_idlest_reg(void __iomem *idlest_reg, +					s16 *prcm_inst, u8 *idlest_reg_id); + +extern int __init omap2xxx_cm_init(void);  #endif diff --git a/arch/arm/mach-omap2/cm2xxx_3xxx.h b/arch/arm/mach-omap2/cm2xxx_3xxx.h index 0e26bb1bf7e..98e6b3c9cd9 100644 --- a/arch/arm/mach-omap2/cm2xxx_3xxx.h +++ b/arch/arm/mach-omap2/cm2xxx_3xxx.h @@ -16,7 +16,7 @@  #ifndef __ARCH_ASM_MACH_OMAP2_CM2XXX_3XXX_H  #define __ARCH_ASM_MACH_OMAP2_CM2XXX_3XXX_H -#include "prcm-common.h" +#include "cm.h"  /*   * Module specific CM register offsets from CM_BASE + domain offset @@ -96,6 +96,11 @@ static inline u32 omap2_cm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx)  	return omap2_cm_rmw_mod_reg_bits(bits, 0x0, module, idx);  } +extern int omap2xxx_cm_apll54_enable(void); +extern void omap2xxx_cm_apll54_disable(void); +extern int omap2xxx_cm_apll96_enable(void); +extern void omap2xxx_cm_apll96_disable(void); +  #endif  /* CM register bits shared between 24XX and 3430 */ @@ -111,5 +116,4 @@ static inline u32 omap2_cm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx)  /* CM_IDLEST_GFX */  #define OMAP_ST_GFX_MASK				(1 << 0) -  #endif diff --git a/arch/arm/mach-omap2/cm3xxx.c b/arch/arm/mach-omap2/cm3xxx.c index 8b03ec2f439..c2086f2e86b 100644 --- a/arch/arm/mach-omap2/cm3xxx.c +++ b/arch/arm/mach-omap2/cm3xxx.c @@ -110,6 +110,44 @@ int omap3xxx_cm_wait_module_ready(s16 prcm_mod, u8 idlest_id, u8 idlest_shift)  	return (i < MAX_MODULE_READY_TIME) ? 0 : -EBUSY;  } +/** + * omap3xxx_cm_split_idlest_reg - split CM_IDLEST reg addr into its components + * @idlest_reg: CM_IDLEST* virtual address + * @prcm_inst: pointer to an s16 to return the PRCM instance offset + * @idlest_reg_id: pointer to a u8 to return the CM_IDLESTx register ID + * + * XXX This function is only needed until absolute register addresses are + * removed from the OMAP struct clk records. + */ +int omap3xxx_cm_split_idlest_reg(void __iomem *idlest_reg, s16 *prcm_inst, +				 u8 *idlest_reg_id) +{ +	unsigned long offs; +	u8 idlest_offs; +	int i; + +	if (idlest_reg < (cm_base + OMAP3430_IVA2_MOD) || +	    idlest_reg > (cm_base + 0x1ffff)) +		return -EINVAL; + +	idlest_offs = (unsigned long)idlest_reg & 0xff; +	for (i = 0; i < ARRAY_SIZE(omap3xxx_cm_idlest_offs); i++) { +		if (idlest_offs == omap3xxx_cm_idlest_offs[i]) { +			*idlest_reg_id = i + 1; +			break; +		} +	} + +	if (i == ARRAY_SIZE(omap3xxx_cm_idlest_offs)) +		return -EINVAL; + +	offs = idlest_reg - cm_base; +	offs &= 0xff00; +	*prcm_inst = offs; + +	return 0; +} +  /* Clockdomain low-level operations */  static int omap3xxx_clkdm_add_sleepdep(struct clockdomain *clkdm1, @@ -597,3 +635,31 @@ void omap3_cm_restore_context(void)  	omap2_cm_write_mod_reg(cm_context.cm_clkout_ctrl, OMAP3430_CCR_MOD,  			       OMAP3_CM_CLKOUT_CTRL_OFFSET);  } + +/* + * + */ + +static struct cm_ll_data omap3xxx_cm_ll_data = { +	.split_idlest_reg	= &omap3xxx_cm_split_idlest_reg, +	.wait_module_ready	= &omap3xxx_cm_wait_module_ready, +}; + +int __init omap3xxx_cm_init(void) +{ +	if (!cpu_is_omap34xx()) +		return 0; + +	return cm_register(&omap3xxx_cm_ll_data); +} + +static void __exit omap3xxx_cm_exit(void) +{ +	if (!cpu_is_omap34xx()) +		return; + +	/* Should never happen */ +	WARN(cm_unregister(&omap3xxx_cm_ll_data), +	     "%s: cm_ll_data function pointer mismatch\n", __func__); +} +__exitcall(omap3xxx_cm_exit); diff --git a/arch/arm/mach-omap2/cm3xxx.h b/arch/arm/mach-omap2/cm3xxx.h index 4a6ac812edf..e8e146f4a43 100644 --- a/arch/arm/mach-omap2/cm3xxx.h +++ b/arch/arm/mach-omap2/cm3xxx.h @@ -78,9 +78,14 @@ extern bool omap3xxx_cm_is_clkdm_in_hwsup(s16 module, u32 mask);  extern int omap3xxx_cm_wait_module_ready(s16 prcm_mod, u8 idlest_id,  					 u8 idlest_shift); +extern int omap3xxx_cm_split_idlest_reg(void __iomem *idlest_reg, +					s16 *prcm_inst, u8 *idlest_reg_id); +  extern void omap3_cm_save_context(void);  extern void omap3_cm_restore_context(void); +extern int __init omap3xxx_cm_init(void); +  #endif  #endif diff --git a/arch/arm/mach-omap2/cm_common.c b/arch/arm/mach-omap2/cm_common.c index 3246cef151d..40b3b5a8445 100644 --- a/arch/arm/mach-omap2/cm_common.c +++ b/arch/arm/mach-omap2/cm_common.c @@ -2,7 +2,7 @@   * OMAP2+ common Clock Management (CM) IP block functions   *   * Copyright (C) 2012 Texas Instruments, Inc. - * Paul Walmsley <paul@pwsan.com> + * Paul Walmsley   *   * 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 @@ -13,10 +13,12 @@  #include <linux/kernel.h>  #include <linux/init.h> +#include <linux/errno.h>  #include "cm2xxx.h"  #include "cm3xxx.h"  #include "cm44xx.h" +#include "common.h"  /*   * cm_ll_data: function pointers to SoC-specific implementations of @@ -25,6 +27,73 @@  static struct cm_ll_data null_cm_ll_data;  static struct cm_ll_data *cm_ll_data = &null_cm_ll_data; +/* cm_base: base virtual address of the CM IP block */ +void __iomem *cm_base; + +/* cm2_base: base virtual address of the CM2 IP block (OMAP44xx only) */ +void __iomem *cm2_base; + +/** + * omap2_set_globals_cm - set the CM/CM2 base addresses (for early use) + * @cm: CM base virtual address + * @cm2: CM2 base virtual address (if present on the booted SoC) + * + * XXX Will be replaced when the PRM/CM drivers are completed. + */ +void __init omap2_set_globals_cm(void __iomem *cm, void __iomem *cm2) +{ +	cm_base = cm; +	cm2_base = cm2; +} + +/** + * cm_split_idlest_reg - split CM_IDLEST reg addr into its components + * @idlest_reg: CM_IDLEST* virtual address + * @prcm_inst: pointer to an s16 to return the PRCM instance offset + * @idlest_reg_id: pointer to a u8 to return the CM_IDLESTx register ID + * + * Given an absolute CM_IDLEST register address @idlest_reg, passes + * the PRCM instance offset and IDLEST register ID back to the caller + * via the @prcm_inst and @idlest_reg_id.  Returns -EINVAL upon error, + * or 0 upon success.  XXX This function is only needed until absolute + * register addresses are removed from the OMAP struct clk records. + */ +int cm_split_idlest_reg(void __iomem *idlest_reg, s16 *prcm_inst, +			u8 *idlest_reg_id) +{ +	if (!cm_ll_data->split_idlest_reg) { +		WARN_ONCE(1, "cm: %s: no low-level function defined\n", +			  __func__); +		return -EINVAL; +	} + +	return cm_ll_data->split_idlest_reg(idlest_reg, prcm_inst, +					   idlest_reg_id); +} + +/** + * cm_wait_module_ready - wait for a module to leave idle or standby + * @prcm_mod: PRCM module offset + * @idlest_id: CM_IDLESTx register ID (i.e., x = 1, 2, 3) + * @idlest_shift: shift of the bit in the CM_IDLEST* register to check + * + * Wait for the PRCM to indicate that the module identified by + * (@prcm_mod, @idlest_id, @idlest_shift) is clocked.  Return 0 upon + * success, -EBUSY if the module doesn't enable in time, or -EINVAL if + * no per-SoC wait_module_ready() function pointer has been registered + * or if the idlest register is unknown on the SoC. + */ +int cm_wait_module_ready(s16 prcm_mod, u8 idlest_id, u8 idlest_shift) +{ +	if (!cm_ll_data->wait_module_ready) { +		WARN_ONCE(1, "cm: %s: no low-level function defined\n", +			  __func__); +		return -EINVAL; +	} + +	return cm_ll_data->wait_module_ready(prcm_mod, idlest_id, idlest_shift); +} +  /**   * cm_register - register per-SoC low-level data with the CM   * @cld: low-level per-SoC OMAP CM data & function pointers to register diff --git a/arch/arm/mach-omap2/cminst44xx.h b/arch/arm/mach-omap2/cminst44xx.h index d69fdefef98..bd7bab88974 100644 --- a/arch/arm/mach-omap2/cminst44xx.h +++ b/arch/arm/mach-omap2/cminst44xx.h @@ -38,4 +38,6 @@ extern u32 omap4_cminst_clear_inst_reg_bits(u32 bits, u8 part, s16 inst,  extern u32 omap4_cminst_read_inst_reg_bits(u8 part, u16 inst, s16 idx,  					   u32 mask); +extern void omap_cm_base_init(void); +  #endif diff --git a/arch/arm/mach-omap2/common.c b/arch/arm/mach-omap2/common.c index 34fb5b95859..5c2fd4863b2 100644 --- a/arch/arm/mach-omap2/common.c +++ b/arch/arm/mach-omap2/common.c @@ -14,196 +14,13 @@   */  #include <linux/kernel.h>  #include <linux/init.h> -#include <linux/clk.h> -#include <linux/io.h>  #include <linux/platform_data/dsp-omap.h>  #include <plat/vram.h> -#include "soc.h" -#include "iomap.h"  #include "common.h" -#include "clock.h" -#include "sdrc.h" -#include "control.h"  #include "omap-secure.h" -/* Global address base setup code */ - -static void __init __omap2_set_globals(struct omap_globals *omap2_globals) -{ -	omap2_set_globals_tap(omap2_globals); -	omap2_set_globals_sdrc(omap2_globals); -	omap2_set_globals_control(omap2_globals); -	omap2_set_globals_prcm(omap2_globals); -} - -#if defined(CONFIG_SOC_OMAP2420) - -static struct omap_globals omap242x_globals = { -	.class	= OMAP242X_CLASS, -	.tap	= OMAP2_L4_IO_ADDRESS(0x48014000), -	.sdrc	= OMAP2_L3_IO_ADDRESS(OMAP2420_SDRC_BASE), -	.sms	= OMAP2_L3_IO_ADDRESS(OMAP2420_SMS_BASE), -	.ctrl	= OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE), -	.prm	= OMAP2_L4_IO_ADDRESS(OMAP2420_PRM_BASE), -	.cm	= OMAP2_L4_IO_ADDRESS(OMAP2420_CM_BASE), -}; - -void __init omap2_set_globals_242x(void) -{ -	__omap2_set_globals(&omap242x_globals); -} - -void __init omap242x_map_io(void) -{ -	omap242x_map_common_io(); -} -#endif - -#if defined(CONFIG_SOC_OMAP2430) - -static struct omap_globals omap243x_globals = { -	.class	= OMAP243X_CLASS, -	.tap	= OMAP2_L4_IO_ADDRESS(0x4900a000), -	.sdrc	= OMAP2_L3_IO_ADDRESS(OMAP243X_SDRC_BASE), -	.sms	= OMAP2_L3_IO_ADDRESS(OMAP243X_SMS_BASE), -	.ctrl	= OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE), -	.prm	= OMAP2_L4_IO_ADDRESS(OMAP2430_PRM_BASE), -	.cm	= OMAP2_L4_IO_ADDRESS(OMAP2430_CM_BASE), -}; - -void __init omap2_set_globals_243x(void) -{ -	__omap2_set_globals(&omap243x_globals); -} - -void __init omap243x_map_io(void) -{ -	omap243x_map_common_io(); -} -#endif - -#if defined(CONFIG_ARCH_OMAP3) - -static struct omap_globals omap3_globals = { -	.class	= OMAP343X_CLASS, -	.tap	= OMAP2_L4_IO_ADDRESS(0x4830A000), -	.sdrc	= OMAP2_L3_IO_ADDRESS(OMAP343X_SDRC_BASE), -	.sms	= OMAP2_L3_IO_ADDRESS(OMAP343X_SMS_BASE), -	.ctrl	= OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE), -	.prm	= OMAP2_L4_IO_ADDRESS(OMAP3430_PRM_BASE), -	.cm	= OMAP2_L4_IO_ADDRESS(OMAP3430_CM_BASE), -}; - -void __init omap2_set_globals_3xxx(void) -{ -	__omap2_set_globals(&omap3_globals); -} - -void __init omap3_map_io(void) -{ -	omap34xx_map_common_io(); -} - -/* - * Adjust TAP register base such that omap3_check_revision accesses the correct - * TI81XX register for checking device ID (it adds 0x204 to tap base while - * TI81XX DEVICE ID register is at offset 0x600 from control base). - */ -#define TI81XX_TAP_BASE		(TI81XX_CTRL_BASE + \ -				TI81XX_CONTROL_DEVICE_ID - 0x204) - -static struct omap_globals ti81xx_globals = { -	.class  = OMAP343X_CLASS, -	.tap    = OMAP2_L4_IO_ADDRESS(TI81XX_TAP_BASE), -	.ctrl   = OMAP2_L4_IO_ADDRESS(TI81XX_CTRL_BASE), -	.prm    = OMAP2_L4_IO_ADDRESS(TI81XX_PRCM_BASE), -	.cm     = OMAP2_L4_IO_ADDRESS(TI81XX_PRCM_BASE), -}; - -void __init omap2_set_globals_ti81xx(void) -{ -	__omap2_set_globals(&ti81xx_globals); -} - -void __init ti81xx_map_io(void) -{ -	omapti81xx_map_common_io(); -} -#endif - -#if defined(CONFIG_SOC_AM33XX) -#define AM33XX_TAP_BASE		(AM33XX_CTRL_BASE + \ -				TI81XX_CONTROL_DEVICE_ID - 0x204) - -static struct omap_globals am33xx_globals = { -	.class  = AM335X_CLASS, -	.tap    = AM33XX_L4_WK_IO_ADDRESS(AM33XX_TAP_BASE), -	.ctrl   = AM33XX_L4_WK_IO_ADDRESS(AM33XX_CTRL_BASE), -	.prm    = AM33XX_L4_WK_IO_ADDRESS(AM33XX_PRCM_BASE), -	.cm     = AM33XX_L4_WK_IO_ADDRESS(AM33XX_PRCM_BASE), -}; - -void __init omap2_set_globals_am33xx(void) -{ -	__omap2_set_globals(&am33xx_globals); -} - -void __init am33xx_map_io(void) -{ -	omapam33xx_map_common_io(); -} -#endif - -#if defined(CONFIG_ARCH_OMAP4) -static struct omap_globals omap4_globals = { -	.class	= OMAP443X_CLASS, -	.tap	= OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE), -	.ctrl	= OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE), -	.ctrl_pad	= OMAP2_L4_IO_ADDRESS(OMAP443X_CTRL_BASE), -	.prm	= OMAP2_L4_IO_ADDRESS(OMAP4430_PRM_BASE), -	.cm	= OMAP2_L4_IO_ADDRESS(OMAP4430_CM_BASE), -	.cm2	= OMAP2_L4_IO_ADDRESS(OMAP4430_CM2_BASE), -	.prcm_mpu	= OMAP2_L4_IO_ADDRESS(OMAP4430_PRCM_MPU_BASE), -}; - -void __init omap2_set_globals_443x(void) -{ -	__omap2_set_globals(&omap4_globals); -} - -void __init omap4_map_io(void) -{ -	omap44xx_map_common_io(); -} -#endif - -#if defined(CONFIG_SOC_OMAP5) -static struct omap_globals omap5_globals = { -	.class	= OMAP54XX_CLASS, -	.tap	= OMAP2_L4_IO_ADDRESS(OMAP54XX_SCM_BASE), -	.ctrl	= OMAP2_L4_IO_ADDRESS(OMAP54XX_SCM_BASE), -	.ctrl_pad	= OMAP2_L4_IO_ADDRESS(OMAP54XX_CTRL_BASE), -	.prm	= OMAP2_L4_IO_ADDRESS(OMAP54XX_PRM_BASE), -	.cm	= OMAP2_L4_IO_ADDRESS(OMAP54XX_CM_CORE_AON_BASE), -	.cm2	= OMAP2_L4_IO_ADDRESS(OMAP54XX_CM_CORE_BASE), -	.prcm_mpu = OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE), -}; - -void __init omap2_set_globals_5xxx(void) -{ -	omap2_set_globals_tap(&omap5_globals); -	omap2_set_globals_control(&omap5_globals); -	omap2_set_globals_prcm(&omap5_globals); -} - -void __init omap5_map_io(void) -{ -	omap5_map_common_io(); -} -#endif -  /*   * Stub function for OMAP2 so that common files   * continue to build when custom builds are used diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h index fd97f317de2..948bcaa82eb 100644 --- a/arch/arm/mach-omap2/common.h +++ b/arch/arm/mach-omap2/common.h @@ -41,54 +41,6 @@  #define OMAP_INTC_START		NR_IRQS -#ifdef CONFIG_SOC_OMAP2420 -extern void omap242x_map_common_io(void); -#else -static inline void omap242x_map_common_io(void) -{ -} -#endif - -#ifdef CONFIG_SOC_OMAP2430 -extern void omap243x_map_common_io(void); -#else -static inline void omap243x_map_common_io(void) -{ -} -#endif - -#ifdef CONFIG_ARCH_OMAP3 -extern void omap34xx_map_common_io(void); -#else -static inline void omap34xx_map_common_io(void) -{ -} -#endif - -#ifdef CONFIG_SOC_TI81XX -extern void omapti81xx_map_common_io(void); -#else -static inline void omapti81xx_map_common_io(void) -{ -} -#endif - -#ifdef CONFIG_SOC_AM33XX -extern void omapam33xx_map_common_io(void); -#else -static inline void omapam33xx_map_common_io(void) -{ -} -#endif - -#ifdef CONFIG_ARCH_OMAP4 -extern void omap44xx_map_common_io(void); -#else -static inline void omap44xx_map_common_io(void) -{ -} -#endif -  #if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP2)  int omap2_pm_init(void);  #else @@ -125,19 +77,12 @@ static inline int omap_mux_late_init(void)  }  #endif -#ifdef CONFIG_SOC_OMAP5 -extern void omap5_map_common_io(void); -#else -static inline void omap5_map_common_io(void) -{ -} -#endif -  extern void omap2_init_common_infrastructure(void);  extern struct sys_timer omap2_timer;  extern struct sys_timer omap3_timer;  extern struct sys_timer omap3_secure_timer; +extern struct sys_timer omap3_gp_timer;  extern struct sys_timer omap3_am33xx_timer;  extern struct sys_timer omap4_timer;  extern struct sys_timer omap5_timer; @@ -165,52 +110,43 @@ void am35xx_init_late(void);  void ti81xx_init_late(void);  void omap4430_init_late(void);  int omap2_common_pm_late_init(void); -void omap_prcm_restart(char, const char *); -/* - * IO bases for various OMAP processors - * Except the tap base, rest all the io bases - * listed are physical addresses. - */ -struct omap_globals { -	u32		class;		/* OMAP class to detect */ -	void __iomem	*tap;		/* Control module ID code */ -	void __iomem	*sdrc;           /* SDRAM Controller */ -	void __iomem	*sms;            /* SDRAM Memory Scheduler */ -	void __iomem	*ctrl;           /* System Control Module */ -	void __iomem	*ctrl_pad;	/* PAD Control Module */ -	void __iomem	*prm;            /* Power and Reset Management */ -	void __iomem	*cm;             /* Clock Management */ -	void __iomem	*cm2; -	void __iomem	*prcm_mpu; -}; +#if defined(CONFIG_SOC_OMAP2420) || defined(CONFIG_SOC_OMAP2430) +void omap2xxx_restart(char mode, const char *cmd); +#else +static inline void omap2xxx_restart(char mode, const char *cmd) +{ +} +#endif -void omap2_set_globals_242x(void); -void omap2_set_globals_243x(void); -void omap2_set_globals_3xxx(void); -void omap2_set_globals_443x(void); -void omap2_set_globals_5xxx(void); -void omap2_set_globals_ti81xx(void); -void omap2_set_globals_am33xx(void); +#ifdef CONFIG_ARCH_OMAP3 +void omap3xxx_restart(char mode, const char *cmd); +#else +static inline void omap3xxx_restart(char mode, const char *cmd) +{ +} +#endif -/* These get called from omap2_set_globals_xxxx(), do not call these */ -void omap2_set_globals_tap(struct omap_globals *); -#if defined(CONFIG_SOC_HAS_OMAP2_SDRC) -void omap2_set_globals_sdrc(struct omap_globals *); +#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) +void omap44xx_restart(char mode, const char *cmd);  #else -static inline void omap2_set_globals_sdrc(struct omap_globals *omap2_globals) -{ } +static inline void omap44xx_restart(char mode, const char *cmd) +{ +}  #endif -void omap2_set_globals_control(struct omap_globals *); -void omap2_set_globals_prcm(struct omap_globals *); -void omap242x_map_io(void); -void omap243x_map_io(void); -void omap3_map_io(void); -void am33xx_map_io(void); -void omap4_map_io(void); -void omap5_map_io(void); -void ti81xx_map_io(void); +/* This gets called from mach-omap2/io.c, do not call this */ +void __init omap2_set_globals_tap(u32 class, void __iomem *tap); + +void __init omap242x_map_io(void); +void __init omap243x_map_io(void); +void __init omap3_map_io(void); +void __init am33xx_map_io(void); +void __init omap4_map_io(void); +void __init omap5_map_io(void); +void __init ti81xx_map_io(void); + +/* omap_barriers_init() is OMAP4 only */  void omap_barriers_init(void);  /** diff --git a/arch/arm/mach-omap2/control.c b/arch/arm/mach-omap2/control.c index 06375ad2091..2adb2683f07 100644 --- a/arch/arm/mach-omap2/control.c +++ b/arch/arm/mach-omap2/control.c @@ -147,13 +147,11 @@ static struct omap3_control_regs control_context;  #define OMAP_CTRL_REGADDR(reg)		(omap2_ctrl_base + (reg))  #define OMAP4_CTRL_PAD_REGADDR(reg)	(omap4_ctrl_pad_base + (reg)) -void __init omap2_set_globals_control(struct omap_globals *omap2_globals) +void __init omap2_set_globals_control(void __iomem *ctrl, +				      void __iomem *ctrl_pad)  { -	if (omap2_globals->ctrl) -		omap2_ctrl_base = omap2_globals->ctrl; - -	if (omap2_globals->ctrl_pad) -		omap4_ctrl_pad_base = omap2_globals->ctrl_pad; +	omap2_ctrl_base = ctrl; +	omap4_ctrl_pad_base = ctrl_pad;  }  void __iomem *omap_ctrl_base_get(void) diff --git a/arch/arm/mach-omap2/control.h b/arch/arm/mach-omap2/control.h index a89e8256fd0..4ca8747b3cc 100644 --- a/arch/arm/mach-omap2/control.h +++ b/arch/arm/mach-omap2/control.h @@ -414,6 +414,8 @@ extern void omap_ctrl_write_dsp_boot_addr(u32 bootaddr);  extern void omap_ctrl_write_dsp_boot_mode(u8 bootmode);  extern void omap3630_ctrl_disable_rta(void);  extern int omap3_ctrl_save_padconf(void); +extern void omap2_set_globals_control(void __iomem *ctrl, +				      void __iomem *ctrl_pad);  #else  #define omap_ctrl_base_get()		0  #define omap_ctrl_readb(x)		0 diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c index bc2756959be..bca7a888570 100644 --- a/arch/arm/mach-omap2/cpuidle34xx.c +++ b/arch/arm/mach-omap2/cpuidle34xx.c @@ -27,7 +27,6 @@  #include <linux/export.h>  #include <linux/cpu_pm.h> -#include <plat/prcm.h>  #include "powerdomain.h"  #include "clockdomain.h" diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index 738ae0d7b5b..3cff7dc514d 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c @@ -725,29 +725,3 @@ static int __init omap2_init_devices(void)  	return 0;  }  arch_initcall(omap2_init_devices); - -#if defined(CONFIG_OMAP_WATCHDOG) || defined(CONFIG_OMAP_WATCHDOG_MODULE) -static int __init omap_init_wdt(void) -{ -	int id = -1; -	struct platform_device *pdev; -	struct omap_hwmod *oh; -	char *oh_name = "wd_timer2"; -	char *dev_name = "omap_wdt"; - -	if (!cpu_class_is_omap2() || of_have_populated_dt()) -		return 0; - -	oh = omap_hwmod_lookup(oh_name); -	if (!oh) { -		pr_err("Could not look up wd_timer%d hwmod\n", id); -		return -EINVAL; -	} - -	pdev = omap_device_build(dev_name, id, oh, NULL, 0, NULL, 0, 0); -	WARN(IS_ERR(pdev), "Can't build omap_device for %s:%s.\n", -				dev_name, oh->name); -	return 0; -} -subsys_initcall(omap_init_wdt); -#endif diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c index 89c57129357..38ba58c9762 100644 --- a/arch/arm/mach-omap2/display.c +++ b/arch/arm/mach-omap2/display.c @@ -35,6 +35,7 @@  #include "mux.h"  #include "control.h"  #include "display.h" +#include "prm.h"  #define DISPC_CONTROL		0x0040  #define DISPC_CONTROL2		0x0238 @@ -512,7 +513,6 @@ static void dispc_disable_outputs(void)  	}  } -#define MAX_MODULE_SOFTRESET_WAIT	10000  int omap_dss_reset(struct omap_hwmod *oh)  {  	struct omap_hwmod_opt_clk *oc; diff --git a/arch/arm/mach-omap2/hdq1w.c b/arch/arm/mach-omap2/hdq1w.c index 3da8900598c..ab7bf181a10 100644 --- a/arch/arm/mach-omap2/hdq1w.c +++ b/arch/arm/mach-omap2/hdq1w.c @@ -31,11 +31,9 @@  #include "omap_device.h"  #include "hdq1w.h" +#include "prm.h"  #include "common.h" -/* Maximum microseconds to wait for OMAP module to softreset */ -#define MAX_MODULE_SOFTRESET_WAIT	10000 -  /**   * omap_hdq1w_reset - reset the OMAP HDQ1W module   * @oh: struct omap_hwmod * diff --git a/arch/arm/mach-omap2/i2c.c b/arch/arm/mach-omap2/i2c.c index 4e63097e3cd..fbb9b152cd5 100644 --- a/arch/arm/mach-omap2/i2c.c +++ b/arch/arm/mach-omap2/i2c.c @@ -20,10 +20,11 @@   */  #include "soc.h" -#include "common.h"  #include "omap_hwmod.h"  #include "omap_device.h" +#include "prm.h" +#include "common.h"  #include "mux.h"  #include "i2c.h" @@ -32,9 +33,6 @@  #define OMAP2_I2C_CON_OFFSET			0x24  #define OMAP4_I2C_CON_OFFSET			0xA4 -/* Maximum microseconds to wait for OMAP module to softreset */ -#define MAX_MODULE_SOFTRESET_WAIT	10000 -  #define MAX_OMAP_I2C_HWMOD_NAME_LEN	16  static void __init omap2_i2c_mux_pins(int bus_id) diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c index cf2362ccb23..45cc7ed4dd5 100644 --- a/arch/arm/mach-omap2/id.c +++ b/arch/arm/mach-omap2/id.c @@ -28,6 +28,9 @@  #include "soc.h"  #include "control.h" +#define OMAP4_SILICON_TYPE_STANDARD		0x01 +#define OMAP4_SILICON_TYPE_PERFORMANCE		0x02 +  static unsigned int omap_revision;  static const char *cpu_rev;  u32 omap_features; @@ -273,25 +276,11 @@ void __init omap4xxx_check_features(void)  {  	u32 si_type; -	if (cpu_is_omap443x()) -		omap_features |= OMAP4_HAS_MPU_1GHZ; - +	si_type = +	(read_tap_reg(OMAP4_CTRL_MODULE_CORE_STD_FUSE_PROD_ID_1) >> 16) & 0x03; -	if (cpu_is_omap446x()) { -		si_type = -			read_tap_reg(OMAP4_CTRL_MODULE_CORE_STD_FUSE_PROD_ID_1); -		switch ((si_type & (3 << 16)) >> 16) { -		case 2: -			/* High performance device */ -			omap_features |= OMAP4_HAS_MPU_1_5GHZ; -			break; -		case 1: -		default: -			/* Standard device */ -			omap_features |= OMAP4_HAS_MPU_1_2GHZ; -			break; -		} -	} +	if (si_type == OMAP4_SILICON_TYPE_PERFORMANCE) +		omap_features = OMAP4_HAS_PERF_SILICON;  }  void __init ti81xx_check_features(void) @@ -559,11 +548,12 @@ void __init omap5xxx_check_revision(void)   * detect the exact revision later on in omap2_detect_revision() once map_io   * is done.   */ -void __init omap2_set_globals_tap(struct omap_globals *omap2_globals) +void __init omap2_set_globals_tap(u32 class, void __iomem *tap)  { -	omap_revision = omap2_globals->class; -	tap_base = omap2_globals->tap; +	omap_revision = class; +	tap_base = tap; +	/* XXX What is this intended to do? */  	if (cpu_is_omap34xx())  		tap_prod_id = 0x0210;  	else diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index 807b8d919f8..9df757644cc 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c @@ -40,8 +40,16 @@  #include "clock44xx.h"  #include "omap-pm.h"  #include "sdrc.h" +#include "control.h"  #include "serial.h"  #include "sram.h" +#include "cm2xxx.h" +#include "cm3xxx.h" +#include "prm.h" +#include "cm.h" +#include "prcm_mpu44xx.h" +#include "prminst44xx.h" +#include "cminst44xx.h"  /*   * The machine specific code may provide the extra mapping besides the @@ -264,7 +272,7 @@ static struct map_desc omap54xx_io_desc[] __initdata = {  #endif  #ifdef CONFIG_SOC_OMAP2420 -void __init omap242x_map_common_io(void) +void __init omap242x_map_io(void)  {  	iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc));  	iotable_init(omap242x_io_desc, ARRAY_SIZE(omap242x_io_desc)); @@ -272,7 +280,7 @@ void __init omap242x_map_common_io(void)  #endif  #ifdef CONFIG_SOC_OMAP2430 -void __init omap243x_map_common_io(void) +void __init omap243x_map_io(void)  {  	iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc));  	iotable_init(omap243x_io_desc, ARRAY_SIZE(omap243x_io_desc)); @@ -280,28 +288,28 @@ void __init omap243x_map_common_io(void)  #endif  #ifdef CONFIG_ARCH_OMAP3 -void __init omap34xx_map_common_io(void) +void __init omap3_map_io(void)  {  	iotable_init(omap34xx_io_desc, ARRAY_SIZE(omap34xx_io_desc));  }  #endif  #ifdef CONFIG_SOC_TI81XX -void __init omapti81xx_map_common_io(void) +void __init ti81xx_map_io(void)  {  	iotable_init(omapti81xx_io_desc, ARRAY_SIZE(omapti81xx_io_desc));  }  #endif  #ifdef CONFIG_SOC_AM33XX -void __init omapam33xx_map_common_io(void) +void __init am33xx_map_io(void)  {  	iotable_init(omapam33xx_io_desc, ARRAY_SIZE(omapam33xx_io_desc));  }  #endif  #ifdef CONFIG_ARCH_OMAP4 -void __init omap44xx_map_common_io(void) +void __init omap4_map_io(void)  {  	iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc));  	omap_barriers_init(); @@ -309,7 +317,7 @@ void __init omap44xx_map_common_io(void)  #endif  #ifdef CONFIG_SOC_OMAP5 -void __init omap5_map_common_io(void) +void __init omap5_map_io(void)  {  	iotable_init(omap54xx_io_desc, ARRAY_SIZE(omap54xx_io_desc));  } @@ -371,8 +379,15 @@ static void __init omap_hwmod_init_postsetup(void)  #ifdef CONFIG_SOC_OMAP2420  void __init omap2420_init_early(void)  { -	omap2_set_globals_242x(); +	omap2_set_globals_tap(OMAP242X_CLASS, OMAP2_L4_IO_ADDRESS(0x48014000)); +	omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP2420_SDRC_BASE), +			       OMAP2_L3_IO_ADDRESS(OMAP2420_SMS_BASE)); +	omap2_set_globals_control(OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE), +				  NULL); +	omap2_set_globals_prm(OMAP2_L4_IO_ADDRESS(OMAP2420_PRM_BASE)); +	omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(OMAP2420_CM_BASE), NULL);  	omap2xxx_check_revision(); +	omap2xxx_cm_init();  	omap2xxx_voltagedomains_init();  	omap242x_powerdomains_init();  	omap242x_clockdomains_init(); @@ -392,8 +407,15 @@ void __init omap2420_init_late(void)  #ifdef CONFIG_SOC_OMAP2430  void __init omap2430_init_early(void)  { -	omap2_set_globals_243x(); +	omap2_set_globals_tap(OMAP243X_CLASS, OMAP2_L4_IO_ADDRESS(0x4900a000)); +	omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP243X_SDRC_BASE), +			       OMAP2_L3_IO_ADDRESS(OMAP243X_SMS_BASE)); +	omap2_set_globals_control(OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE), +				  NULL); +	omap2_set_globals_prm(OMAP2_L4_IO_ADDRESS(OMAP2430_PRM_BASE)); +	omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(OMAP2430_CM_BASE), NULL);  	omap2xxx_check_revision(); +	omap2xxx_cm_init();  	omap2xxx_voltagedomains_init();  	omap243x_powerdomains_init();  	omap243x_clockdomains_init(); @@ -417,9 +439,16 @@ void __init omap2430_init_late(void)  #ifdef CONFIG_ARCH_OMAP3  void __init omap3_init_early(void)  { -	omap2_set_globals_3xxx(); +	omap2_set_globals_tap(OMAP343X_CLASS, OMAP2_L4_IO_ADDRESS(0x4830A000)); +	omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP343X_SDRC_BASE), +			       OMAP2_L3_IO_ADDRESS(OMAP343X_SMS_BASE)); +	omap2_set_globals_control(OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE), +				  NULL); +	omap2_set_globals_prm(OMAP2_L4_IO_ADDRESS(OMAP3430_PRM_BASE)); +	omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(OMAP3430_CM_BASE), NULL);  	omap3xxx_check_revision();  	omap3xxx_check_features(); +	omap3xxx_cm_init();  	omap3xxx_voltagedomains_init();  	omap3xxx_powerdomains_init();  	omap3xxx_clockdomains_init(); @@ -450,7 +479,12 @@ void __init am35xx_init_early(void)  void __init ti81xx_init_early(void)  { -	omap2_set_globals_ti81xx(); +	omap2_set_globals_tap(OMAP343X_CLASS, +			      OMAP2_L4_IO_ADDRESS(TI81XX_TAP_BASE)); +	omap2_set_globals_control(OMAP2_L4_IO_ADDRESS(TI81XX_CTRL_BASE), +				  NULL); +	omap2_set_globals_prm(OMAP2_L4_IO_ADDRESS(TI81XX_PRCM_BASE)); +	omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(TI81XX_PRCM_BASE), NULL);  	omap3xxx_check_revision();  	ti81xx_check_features();  	omap3xxx_voltagedomains_init(); @@ -507,7 +541,12 @@ void __init ti81xx_init_late(void)  #ifdef CONFIG_SOC_AM33XX  void __init am33xx_init_early(void)  { -	omap2_set_globals_am33xx(); +	omap2_set_globals_tap(AM335X_CLASS, +			      AM33XX_L4_WK_IO_ADDRESS(AM33XX_TAP_BASE)); +	omap2_set_globals_control(AM33XX_L4_WK_IO_ADDRESS(AM33XX_CTRL_BASE), +				  NULL); +	omap2_set_globals_prm(AM33XX_L4_WK_IO_ADDRESS(AM33XX_PRCM_BASE)); +	omap2_set_globals_cm(AM33XX_L4_WK_IO_ADDRESS(AM33XX_PRCM_BASE), NULL);  	omap3xxx_check_revision();  	ti81xx_check_features();  	am33xx_voltagedomains_init(); @@ -522,7 +561,16 @@ void __init am33xx_init_early(void)  #ifdef CONFIG_ARCH_OMAP4  void __init omap4430_init_early(void)  { -	omap2_set_globals_443x(); +	omap2_set_globals_tap(OMAP443X_CLASS, +			      OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE)); +	omap2_set_globals_control(OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE), +				  OMAP2_L4_IO_ADDRESS(OMAP443X_CTRL_BASE)); +	omap2_set_globals_prm(OMAP2_L4_IO_ADDRESS(OMAP4430_PRM_BASE)); +	omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(OMAP4430_CM_BASE), +			     OMAP2_L4_IO_ADDRESS(OMAP4430_CM2_BASE)); +	omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP4430_PRCM_MPU_BASE)); +	omap_prm_base_init(); +	omap_cm_base_init();  	omap4xxx_check_revision();  	omap4xxx_check_features();  	omap44xx_voltagedomains_init(); @@ -544,7 +592,16 @@ void __init omap4430_init_late(void)  #ifdef CONFIG_SOC_OMAP5  void __init omap5_init_early(void)  { -	omap2_set_globals_5xxx(); +	omap2_set_globals_tap(OMAP54XX_CLASS, +			      OMAP2_L4_IO_ADDRESS(OMAP54XX_SCM_BASE)); +	omap2_set_globals_control(OMAP2_L4_IO_ADDRESS(OMAP54XX_SCM_BASE), +				  OMAP2_L4_IO_ADDRESS(OMAP54XX_CTRL_BASE)); +	omap2_set_globals_prm(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRM_BASE)); +	omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(OMAP54XX_CM_CORE_AON_BASE), +			     OMAP2_L4_IO_ADDRESS(OMAP54XX_CM_CORE_BASE)); +	omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE)); +	omap_prm_base_init(); +	omap_cm_base_init();  	omap5xxx_check_revision();  }  #endif diff --git a/arch/arm/mach-omap2/mcbsp.c b/arch/arm/mach-omap2/mcbsp.c index a106c75c533..bf496510eb5 100644 --- a/arch/arm/mach-omap2/mcbsp.c +++ b/arch/arm/mach-omap2/mcbsp.c @@ -29,7 +29,7 @@   * FIXME: Find a mechanism to enable/disable runtime the McBSP ICLK autoidle.   * Sidetone needs non-gated ICLK and sidetone autoidle is broken.   */ -#include "cm2xxx_3xxx.h" +#include "cm3xxx.h"  #include "cm-regbits-34xx.h"  static int omap3_enable_st_clock(unsigned int id, bool enable) diff --git a/arch/arm/mach-omap2/msdi.c b/arch/arm/mach-omap2/msdi.c index 627e97e3074..aafdd4ca9f4 100644 --- a/arch/arm/mach-omap2/msdi.c +++ b/arch/arm/mach-omap2/msdi.c @@ -25,6 +25,7 @@  #include <linux/err.h>  #include <linux/platform_data/gpio-omap.h> +#include "prm.h"  #include "common.h"  #include "control.h"  #include "omap_hwmod.h" @@ -43,9 +44,6 @@  #define MSDI_CON_CLKD_MASK			(0x3f << 0)  #define MSDI_CON_CLKD_SHIFT			0 -/* Maximum microseconds to wait for OMAP module to softreset */ -#define MAX_MODULE_SOFTRESET_WAIT	10000 -  /* MSDI_TARGET_RESET_CLKD: clock divisor to use throughout the reset */  #define MSDI_TARGET_RESET_CLKD		0x3ff diff --git a/arch/arm/mach-omap2/omap2-restart.c b/arch/arm/mach-omap2/omap2-restart.c new file mode 100644 index 00000000000..be6bc89ab1e --- /dev/null +++ b/arch/arm/mach-omap2/omap2-restart.c @@ -0,0 +1,65 @@ +/* + * omap2-restart.c - code common to all OMAP2xxx machines. + * + * Copyright (C) 2012 Texas Instruments + * Paul Walmsley + * + * 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/clk.h> +#include <linux/io.h> + +#include "common.h" +#include "prm2xxx.h" + +/* + * reset_virt_prcm_set_ck, reset_sys_ck: pointers to the virt_prcm_set + * clock and the sys_ck.  Used during the reset process + */ +static struct clk *reset_virt_prcm_set_ck, *reset_sys_ck; + +/* Reboot handling */ + +/** + * omap2xxx_restart - Set DPLL to bypass mode for reboot to work + * + * Set the DPLL to bypass so that reboot completes successfully.  No + * return value. + */ +void omap2xxx_restart(char mode, const char *cmd) +{ +	u32 rate; + +	rate = clk_get_rate(reset_sys_ck); +	clk_set_rate(reset_virt_prcm_set_ck, rate); + +	/* XXX Should save the cmd argument for use after the reboot */ + +	omap2xxx_prm_dpll_reset(); /* never returns */ +	while (1); +} + +/** + * omap2xxx_common_look_up_clks_for_reset - look up clocks needed for restart + * + * Some clocks need to be looked up in advance for the SoC restart + * operation to work - see omap2xxx_restart().  Returns -EINVAL upon + * error or 0 upon success. + */ +static int __init omap2xxx_common_look_up_clks_for_reset(void) +{ +	reset_virt_prcm_set_ck = clk_get(NULL, "virt_prcm_set"); +	if (IS_ERR(reset_virt_prcm_set_ck)) +		return -EINVAL; + +	reset_sys_ck = clk_get(NULL, "sys_ck"); +	if (IS_ERR(reset_sys_ck)) +		return -EINVAL; + +	return 0; +} +core_initcall(omap2xxx_common_look_up_clks_for_reset); diff --git a/arch/arm/mach-omap2/omap3-restart.c b/arch/arm/mach-omap2/omap3-restart.c new file mode 100644 index 00000000000..923c582189e --- /dev/null +++ b/arch/arm/mach-omap2/omap3-restart.c @@ -0,0 +1,36 @@ +/* + * omap3-restart.c - Code common to all OMAP3xxx machines. + * + * Copyright (C) 2009, 2012 Texas Instruments + * Copyright (C) 2010 Nokia Corporation + * Tony Lindgren <tony@atomide.com> + * Santosh Shilimkar <santosh.shilimkar@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/kernel.h> +#include <linux/init.h> + +#include "iomap.h" +#include "common.h" +#include "control.h" +#include "prm3xxx.h" + +/* Global address base setup code */ + +/** + * omap3xxx_restart - trigger a software restart of the SoC + * @mode: the "reboot mode", see arch/arm/kernel/{setup,process}.c + * @cmd: passed from the userspace program rebooting the system (if provided) + * + * Resets the SoC.  For @cmd, see the 'reboot' syscall in + * kernel/sys.c.  No return value. + */ +void omap3xxx_restart(char mode, const char *cmd) +{ +	omap3_ctrl_write_boot_mode((cmd ? (u8)*cmd : 0)); +	omap3xxx_prm_dpll3_reset(); /* never returns */ +	while (1); +} diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c index eda316abbff..6897ae21bb8 100644 --- a/arch/arm/mach-omap2/omap4-common.c +++ b/arch/arm/mach-omap2/omap4-common.c @@ -29,9 +29,12 @@  #include "omap-wakeupgen.h"  #include "soc.h" +#include "iomap.h"  #include "common.h"  #include "mmc.h"  #include "hsmmc.h" +#include "prminst44xx.h" +#include "prcm_mpu44xx.h"  #include "omap4-sar-layout.h"  #include "omap-secure.h"  #include "sram.h" @@ -319,3 +322,19 @@ int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers)  	return 0;  }  #endif + +/** + * omap44xx_restart - trigger a software restart of the SoC + * @mode: the "reboot mode", see arch/arm/kernel/{setup,process}.c + * @cmd: passed from the userspace program rebooting the system (if provided) + * + * Resets the SoC.  For @cmd, see the 'reboot' syscall in + * kernel/sys.c.  No return value. + */ +void omap44xx_restart(char mode, const char *cmd) +{ +	/* XXX Should save 'cmd' into scratchpad for use after reboot */ +	omap4_prminst_global_warm_sw_reset(); /* never returns */ +	while (1); +} + diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 437fbc59eb0..b3b00f43dd7 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c @@ -141,7 +141,6 @@  #include "clock.h"  #include "omap_hwmod.h" -#include <plat/prcm.h>  #include "soc.h"  #include "common.h" @@ -151,6 +150,7 @@  #include "cm3xxx.h"  #include "cminst44xx.h"  #include "cm33xx.h" +#include "prm.h"  #include "prm3xxx.h"  #include "prm44xx.h"  #include "prm33xx.h" @@ -158,9 +158,6 @@  #include "mux.h"  #include "pm.h" -/* Maximum microseconds to wait for OMAP module to softreset */ -#define MAX_MODULE_SOFTRESET_WAIT	10000 -  /* Name of the OMAP hwmod for the MPU */  #define MPU_INITIATOR_NAME		"mpu" @@ -2096,7 +2093,8 @@ static int _enable(struct omap_hwmod *oh)  			_enable_sysc(oh);  		}  	} else { -		_omap4_disable_module(oh); +		if (soc_ops.disable_module) +			soc_ops.disable_module(oh);  		_disable_clocks(oh);  		pr_debug("omap_hwmod: %s: _wait_target_ready: %d\n",  			 oh->name, r); diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c index a8b3368dca3..e8efe3d1da6 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c @@ -17,7 +17,6 @@  #include <linux/platform_data/spi-omap2-mcspi.h>  #include <plat-omap/dma-omap.h> -#include <plat/dmtimer.h>  #include "omap_hwmod.h"  #include "l3_2xxx.h" diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c index dc768c50e52..32d17e3fd72 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c @@ -18,7 +18,6 @@  #include <linux/platform_data/spi-omap2-mcspi.h>  #include <plat-omap/dma-omap.h> -#include <plat/dmtimer.h>  #include "omap_hwmod.h"  #include "mmc.h" 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 a0116d08cf4..0db8f450bad 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c @@ -58,8 +58,9 @@ static struct omap_hwmod_class_sysconfig omap2xxx_timer_sysc = {  	.syss_offs	= 0x0014,  	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |  			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | -			   SYSC_HAS_AUTOIDLE), +			   SYSC_HAS_AUTOIDLE | SYSS_HAS_RESET_STATUS),  	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), +	.clockact       = CLOCKACT_TEST_ICLK,  	.sysc_fields	= &omap_hwmod_sysc_type1,  }; @@ -268,6 +269,7 @@ struct omap_hwmod omap2xxx_timer1_hwmod = {  	},  	.dev_attr	= &capability_alwon_dev_attr,  	.class		= &omap2xxx_timer_hwmod_class, +	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer2 */ @@ -286,6 +288,7 @@ struct omap_hwmod omap2xxx_timer2_hwmod = {  		},  	},  	.class		= &omap2xxx_timer_hwmod_class, +	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer3 */ @@ -304,6 +307,7 @@ struct omap_hwmod omap2xxx_timer3_hwmod = {  		},  	},  	.class		= &omap2xxx_timer_hwmod_class, +	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer4 */ @@ -322,6 +326,7 @@ struct omap_hwmod omap2xxx_timer4_hwmod = {  		},  	},  	.class		= &omap2xxx_timer_hwmod_class, +	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer5 */ @@ -341,6 +346,7 @@ struct omap_hwmod omap2xxx_timer5_hwmod = {  	},  	.dev_attr	= &capability_dsp_dev_attr,  	.class		= &omap2xxx_timer_hwmod_class, +	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer6 */ @@ -360,6 +366,7 @@ struct omap_hwmod omap2xxx_timer6_hwmod = {  	},  	.dev_attr	= &capability_dsp_dev_attr,  	.class		= &omap2xxx_timer_hwmod_class, +	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer7 */ @@ -379,6 +386,7 @@ struct omap_hwmod omap2xxx_timer7_hwmod = {  	},  	.dev_attr	= &capability_dsp_dev_attr,  	.class		= &omap2xxx_timer_hwmod_class, +	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer8 */ @@ -398,6 +406,7 @@ struct omap_hwmod omap2xxx_timer8_hwmod = {  	},  	.dev_attr	= &capability_dsp_dev_attr,  	.class		= &omap2xxx_timer_hwmod_class, +	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer9 */ @@ -417,6 +426,7 @@ struct omap_hwmod omap2xxx_timer9_hwmod = {  	},  	.dev_attr	= &capability_pwm_dev_attr,  	.class		= &omap2xxx_timer_hwmod_class, +	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer10 */ @@ -436,6 +446,7 @@ struct omap_hwmod omap2xxx_timer10_hwmod = {  	},  	.dev_attr	= &capability_pwm_dev_attr,  	.class		= &omap2xxx_timer_hwmod_class, +	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer11 */ @@ -455,6 +466,7 @@ struct omap_hwmod omap2xxx_timer11_hwmod = {  	},  	.dev_attr	= &capability_pwm_dev_attr,  	.class		= &omap2xxx_timer_hwmod_class, +	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer12 */ @@ -474,6 +486,7 @@ struct omap_hwmod omap2xxx_timer12_hwmod = {  	},  	.dev_attr	= &capability_pwm_dev_attr,  	.class		= &omap2xxx_timer_hwmod_class, +	.flags          = HWMOD_SET_DEFAULT_CLOCKACT,  };  /* wd_timer2 */ diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index 1150f823f24..7f73f2132ac 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c @@ -153,29 +153,16 @@ static struct omap_hwmod omap3xxx_debugss_hwmod = {  };  /* timer class */ -static struct omap_hwmod_class_sysconfig omap3xxx_timer_1ms_sysc = { -	.rev_offs	= 0x0000, -	.sysc_offs	= 0x0010, -	.syss_offs	= 0x0014, -	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY | -				SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | -				SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE), -	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), -	.sysc_fields	= &omap_hwmod_sysc_type1, -}; - -static struct omap_hwmod_class omap3xxx_timer_1ms_hwmod_class = { -	.name = "timer", -	.sysc = &omap3xxx_timer_1ms_sysc, -}; -  static struct omap_hwmod_class_sysconfig omap3xxx_timer_sysc = {  	.rev_offs	= 0x0000,  	.sysc_offs	= 0x0010,  	.syss_offs	= 0x0014, -	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_ENAWAKEUP | -			   SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE), +	.sysc_flags	= (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY | +			   SYSC_HAS_ENAWAKEUP | SYSC_HAS_SOFTRESET | +			   SYSC_HAS_EMUFREE | SYSC_HAS_AUTOIDLE | +			   SYSS_HAS_RESET_STATUS),  	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), +	.clockact	= CLOCKACT_TEST_ICLK,  	.sysc_fields	= &omap_hwmod_sysc_type1,  }; @@ -224,7 +211,8 @@ static struct omap_hwmod omap3xxx_timer1_hwmod = {  		},  	},  	.dev_attr	= &capability_alwon_dev_attr, -	.class		= &omap3xxx_timer_1ms_hwmod_class, +	.class		= &omap3xxx_timer_hwmod_class, +	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer2 */ @@ -241,7 +229,8 @@ static struct omap_hwmod omap3xxx_timer2_hwmod = {  			.idlest_idle_bit = OMAP3430_ST_GPT2_SHIFT,  		},  	}, -	.class		= &omap3xxx_timer_1ms_hwmod_class, +	.class		= &omap3xxx_timer_hwmod_class, +	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer3 */ @@ -259,6 +248,7 @@ static struct omap_hwmod omap3xxx_timer3_hwmod = {  		},  	},  	.class		= &omap3xxx_timer_hwmod_class, +	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer4 */ @@ -276,6 +266,7 @@ static struct omap_hwmod omap3xxx_timer4_hwmod = {  		},  	},  	.class		= &omap3xxx_timer_hwmod_class, +	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer5 */ @@ -294,6 +285,7 @@ static struct omap_hwmod omap3xxx_timer5_hwmod = {  	},  	.dev_attr	= &capability_dsp_dev_attr,  	.class		= &omap3xxx_timer_hwmod_class, +	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer6 */ @@ -312,6 +304,7 @@ static struct omap_hwmod omap3xxx_timer6_hwmod = {  	},  	.dev_attr	= &capability_dsp_dev_attr,  	.class		= &omap3xxx_timer_hwmod_class, +	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer7 */ @@ -330,6 +323,7 @@ static struct omap_hwmod omap3xxx_timer7_hwmod = {  	},  	.dev_attr	= &capability_dsp_dev_attr,  	.class		= &omap3xxx_timer_hwmod_class, +	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer8 */ @@ -348,6 +342,7 @@ static struct omap_hwmod omap3xxx_timer8_hwmod = {  	},  	.dev_attr	= &capability_dsp_pwm_dev_attr,  	.class		= &omap3xxx_timer_hwmod_class, +	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer9 */ @@ -366,6 +361,7 @@ static struct omap_hwmod omap3xxx_timer9_hwmod = {  	},  	.dev_attr	= &capability_pwm_dev_attr,  	.class		= &omap3xxx_timer_hwmod_class, +	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer10 */ @@ -383,7 +379,8 @@ static struct omap_hwmod omap3xxx_timer10_hwmod = {  		},  	},  	.dev_attr	= &capability_pwm_dev_attr, -	.class		= &omap3xxx_timer_1ms_hwmod_class, +	.class		= &omap3xxx_timer_hwmod_class, +	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer11 */ @@ -402,6 +399,7 @@ static struct omap_hwmod omap3xxx_timer11_hwmod = {  	},  	.dev_attr	= &capability_pwm_dev_attr,  	.class		= &omap3xxx_timer_hwmod_class, +	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,  };  /* timer12 */ @@ -425,6 +423,7 @@ static struct omap_hwmod omap3xxx_timer12_hwmod = {  	},  	.dev_attr	= &capability_secure_dev_attr,  	.class		= &omap3xxx_timer_hwmod_class, +	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,  };  /* diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c index caf946dfd4a..26f8e9f1819 100644 --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c @@ -21,11 +21,11 @@  #include <linux/io.h>  #include <linux/platform_data/gpio-omap.h>  #include <linux/power/smartreflex.h> -#include <linux/platform_data/omap_ocp2scp.h>  #include <linux/i2c-omap.h>  #include <plat-omap/dma-omap.h> +#include <linux/platform_data/omap_ocp2scp.h>  #include <linux/platform_data/spi-omap2-mcspi.h>  #include <linux/platform_data/asoc-ti-mcbsp.h>  #include <linux/platform_data/iommu-omap.h> @@ -3103,6 +3103,7 @@ static struct omap_hwmod_class_sysconfig omap44xx_timer_1ms_sysc = {  			   SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |  			   SYSS_HAS_RESET_STATUS),  	.idlemodes	= (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), +	.clockact	= CLOCKACT_TEST_ICLK,  	.sysc_fields	= &omap_hwmod_sysc_type1,  }; @@ -3156,6 +3157,7 @@ static struct omap_hwmod omap44xx_timer1_hwmod = {  	.name		= "timer1",  	.class		= &omap44xx_timer_1ms_hwmod_class,  	.clkdm_name	= "l4_wkup_clkdm", +	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,  	.mpu_irqs	= omap44xx_timer1_irqs,  	.main_clk	= "timer1_fck",  	.prcm = { @@ -3178,6 +3180,7 @@ static struct omap_hwmod omap44xx_timer2_hwmod = {  	.name		= "timer2",  	.class		= &omap44xx_timer_1ms_hwmod_class,  	.clkdm_name	= "l4_per_clkdm", +	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,  	.mpu_irqs	= omap44xx_timer2_irqs,  	.main_clk	= "timer2_fck",  	.prcm = { @@ -3352,6 +3355,7 @@ static struct omap_hwmod omap44xx_timer10_hwmod = {  	.name		= "timer10",  	.class		= &omap44xx_timer_1ms_hwmod_class,  	.clkdm_name	= "l4_per_clkdm", +	.flags		= HWMOD_SET_DEFAULT_CLOCKACT,  	.mpu_irqs	= omap44xx_timer10_irqs,  	.main_clk	= "timer10_fck",  	.prcm = { diff --git a/arch/arm/mach-omap2/pm-debug.c b/arch/arm/mach-omap2/pm-debug.c index 3cf4fdfd7ab..e2c291f52f9 100644 --- a/arch/arm/mach-omap2/pm-debug.c +++ b/arch/arm/mach-omap2/pm-debug.c @@ -30,7 +30,6 @@  #include "clock.h"  #include "powerdomain.h"  #include "clockdomain.h" -#include <plat/dmtimer.h>  #include "omap-pm.h"  #include "soc.h" diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index a8b43da0b6f..77032006142 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c @@ -38,7 +38,6 @@  #include "clockdomain.h"  #include "powerdomain.h" -#include <plat/prcm.h>  #include <plat-omap/dma-omap.h>  #include "soc.h" diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c index 1678a328423..dea62a9aad0 100644 --- a/arch/arm/mach-omap2/powerdomain.c +++ b/arch/arm/mach-omap2/powerdomain.c @@ -29,8 +29,6 @@  #include <asm/cpu.h> -#include <plat/prcm.h> -  #include "powerdomain.h"  #include "clockdomain.h" diff --git a/arch/arm/mach-omap2/prcm-common.h b/arch/arm/mach-omap2/prcm-common.h index 72df97482cc..c7d355fafd2 100644 --- a/arch/arm/mach-omap2/prcm-common.h +++ b/arch/arm/mach-omap2/prcm-common.h @@ -406,11 +406,6 @@  #define OMAP3430_EN_CORE_MASK				(1 << 0) -/* - * MAX_MODULE_HARDRESET_WAIT: Maximum microseconds to wait for an OMAP - * submodule to exit hardreset - */ -#define MAX_MODULE_HARDRESET_WAIT		10000  /*   * Maximum time(us) it takes to output the signal WUCLKOUT of the last @@ -419,24 +414,7 @@   * microseconds on OMAP4, so this timeout may be too high.   */  #define MAX_IOPAD_LATCH_TIME			100 -  # ifndef __ASSEMBLER__ -extern void __iomem *prm_base; -extern void __iomem *cm_base; -extern void __iomem *cm2_base; -extern void __iomem *prcm_mpu_base; - -#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) -extern void omap_prm_base_init(void); -extern void omap_cm_base_init(void); -#else -static inline void omap_prm_base_init(void) -{ -} -static inline void omap_cm_base_init(void) -{ -} -#endif  /**   * struct omap_prcm_irq - describes a PRCM interrupt bit diff --git a/arch/arm/mach-omap2/prcm.c b/arch/arm/mach-omap2/prcm.c deleted file mode 100644 index cff270a178c..00000000000 --- a/arch/arm/mach-omap2/prcm.c +++ /dev/null @@ -1,189 +0,0 @@ -/* - * linux/arch/arm/mach-omap2/prcm.c - * - * OMAP 24xx Power Reset and Clock Management (PRCM) functions - * - * Copyright (C) 2005 Nokia Corporation - * - * Written by Tony Lindgren <tony.lindgren@nokia.com> - * - * Copyright (C) 2007 Texas Instruments, Inc. - * Rajendra Nayak <rnayak@ti.com> - * - * Some pieces of code Copyright (C) 2005 Texas Instruments, Inc. - * Upgraded with OMAP4 support by Abhijit Pagare <abhijitpagare@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/kernel.h> -#include <linux/init.h> -#include <linux/clk.h> -#include <linux/io.h> -#include <linux/delay.h> -#include <linux/export.h> - -#include "common.h" -#include <plat/prcm.h> - -#include "soc.h" -#include "clock.h" -#include "clock2xxx.h" -#include "cm2xxx_3xxx.h" -#include "prm2xxx_3xxx.h" -#include "prm44xx.h" -#include "prminst44xx.h" -#include "cminst44xx.h" -#include "prm-regbits-24xx.h" -#include "prm-regbits-44xx.h" -#include "control.h" - -void __iomem *prm_base; -void __iomem *cm_base; -void __iomem *cm2_base; -void __iomem *prcm_mpu_base; - -#define MAX_MODULE_ENABLE_WAIT		100000 - -u32 omap_prcm_get_reset_sources(void) -{ -	/* XXX This presumably needs modification for 34XX */ -	if (cpu_is_omap24xx() || cpu_is_omap34xx()) -		return omap2_prm_read_mod_reg(WKUP_MOD, OMAP2_RM_RSTST) & 0x7f; -	if (cpu_is_omap44xx()) -		return omap2_prm_read_mod_reg(WKUP_MOD, OMAP4_RM_RSTST) & 0x7f; - -	return 0; -} -EXPORT_SYMBOL(omap_prcm_get_reset_sources); - -/* Resets clock rates and reboots the system. Only called from system.h */ -void omap_prcm_restart(char mode, const char *cmd) -{ -	s16 prcm_offs = 0; - -	if (cpu_is_omap24xx()) { -		omap2xxx_clk_prepare_for_reboot(); - -		prcm_offs = WKUP_MOD; -	} else if (cpu_is_omap34xx()) { -		prcm_offs = OMAP3430_GR_MOD; -		omap3_ctrl_write_boot_mode((cmd ? (u8)*cmd : 0)); -	} else if (cpu_is_omap44xx()) { -		omap4_prminst_global_warm_sw_reset(); /* never returns */ -	} else { -		WARN_ON(1); -	} - -	/* -	 * As per Errata i520, in some cases, user will not be able to -	 * access DDR memory after warm-reset. -	 * This situation occurs while the warm-reset happens during a read -	 * access to DDR memory. In that particular condition, DDR memory -	 * does not respond to a corrupted read command due to the warm -	 * reset occurrence but SDRC is waiting for read completion. -	 * SDRC is not sensitive to the warm reset, but the interconnect is -	 * reset on the fly, thus causing a misalignment between SDRC logic, -	 * interconnect logic and DDR memory state. -	 * WORKAROUND: -	 * Steps to perform before a Warm reset is trigged: -	 * 1. enable self-refresh on idle request -	 * 2. put SDRC in idle -	 * 3. wait until SDRC goes to idle -	 * 4. generate SW reset (Global SW reset) -	 * -	 * Steps to be performed after warm reset occurs (in bootloader): -	 * if HW warm reset is the source, apply below steps before any -	 * accesses to SDRAM: -	 * 1. Reset SMS and SDRC and wait till reset is complete -	 * 2. Re-initialize SMS, SDRC and memory -	 * -	 * NOTE: Above work around is required only if arch reset is implemented -	 * using Global SW reset(GLOBAL_SW_RST). DPLL3 reset does not need -	 * the WA since it resets SDRC as well as part of cold reset. -	 */ - -	/* XXX should be moved to some OMAP2/3 specific code */ -	omap2_prm_set_mod_reg_bits(OMAP_RST_DPLL3_MASK, prcm_offs, -				   OMAP2_RM_RSTCTRL); -	omap2_prm_read_mod_reg(prcm_offs, OMAP2_RM_RSTCTRL); /* OCP barrier */ -} - -/** - * omap2_cm_wait_idlest - wait for IDLEST bit to indicate module readiness - * @reg: physical address of module IDLEST register - * @mask: value to mask against to determine if the module is active - * @idlest: idle state indicator (0 or 1) for the clock - * @name: name of the clock (for printk) - * - * Returns 1 if the module indicated readiness in time, or 0 if it - * failed to enable in roughly MAX_MODULE_ENABLE_WAIT microseconds. - * - * XXX This function is deprecated.  It should be removed once the - * hwmod conversion is complete. - */ -int omap2_cm_wait_idlest(void __iomem *reg, u32 mask, u8 idlest, -				const char *name) -{ -	int i = 0; -	int ena = 0; - -	if (idlest) -		ena = 0; -	else -		ena = mask; - -	/* Wait for lock */ -	omap_test_timeout(((__raw_readl(reg) & mask) == ena), -			  MAX_MODULE_ENABLE_WAIT, i); - -	if (i < MAX_MODULE_ENABLE_WAIT) -		pr_debug("cm: Module associated with clock %s ready after %d loops\n", -			 name, i); -	else -		pr_err("cm: Module associated with clock %s didn't enable in %d tries\n", -		       name, MAX_MODULE_ENABLE_WAIT); - -	return (i < MAX_MODULE_ENABLE_WAIT) ? 1 : 0; -}; - -void __init omap2_set_globals_prcm(struct omap_globals *omap2_globals) -{ -	if (omap2_globals->prm) -		prm_base = omap2_globals->prm; -	if (omap2_globals->cm) -		cm_base = omap2_globals->cm; -	if (omap2_globals->cm2) -		cm2_base = omap2_globals->cm2; -	if (omap2_globals->prcm_mpu) -		prcm_mpu_base = omap2_globals->prcm_mpu; - -	if (cpu_is_omap44xx() || soc_is_omap54xx()) { -		omap_prm_base_init(); -		omap_cm_base_init(); -	} -} - -/* - * Stubbed functions so that common files continue to build when - * custom builds are used - * XXX These are temporary and should be removed at the earliest possible - * opportunity - */ -int __weak omap4_cminst_wait_module_idle(u8 part, u16 inst, s16 cdoffs, -					u16 clkctrl_offs) -{ -	return 0; -} - -void __weak omap4_cminst_module_enable(u8 mode, u8 part, u16 inst, -				s16 cdoffs, u16 clkctrl_offs) -{ -} - -void __weak omap4_cminst_module_disable(u8 part, u16 inst, s16 cdoffs, -				 u16 clkctrl_offs) -{ -} diff --git a/arch/arm/mach-omap2/prcm_mpu44xx.c b/arch/arm/mach-omap2/prcm_mpu44xx.c index 928dbd4f20e..c30e44a7fab 100644 --- a/arch/arm/mach-omap2/prcm_mpu44xx.c +++ b/arch/arm/mach-omap2/prcm_mpu44xx.c @@ -20,6 +20,12 @@  #include "prcm_mpu44xx.h"  #include "cm-regbits-44xx.h" +/* + * prcm_mpu_base: the virtual address of the start of the PRCM_MPU IP + *   block registers + */ +void __iomem *prcm_mpu_base; +  /* PRCM_MPU low-level functions */  u32 omap4_prcm_mpu_read_inst_reg(s16 inst, u16 reg) @@ -43,3 +49,14 @@ u32 omap4_prcm_mpu_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 reg)  	return v;  } + +/** + * omap2_set_globals_prcm_mpu - set the MPU PRCM base address (for early use) + * @prcm_mpu: PRCM_MPU base virtual address + * + * XXX Will be replaced when the PRM/CM drivers are completed. + */ +void __init omap2_set_globals_prcm_mpu(void __iomem *prcm_mpu) +{ +	prcm_mpu_base = prcm_mpu; +} diff --git a/arch/arm/mach-omap2/prcm_mpu44xx.h b/arch/arm/mach-omap2/prcm_mpu44xx.h index 8a6e250f04b..884af7bb4af 100644 --- a/arch/arm/mach-omap2/prcm_mpu44xx.h +++ b/arch/arm/mach-omap2/prcm_mpu44xx.h @@ -1,7 +1,7 @@  /*   * OMAP44xx PRCM MPU instance offset macros   * - * Copyright (C) 2010 Texas Instruments, Inc. + * Copyright (C) 2010, 2012 Texas Instruments, Inc.   * Copyright (C) 2010 Nokia Corporation   *   * Paul Walmsley (paul@pwsan.com) @@ -25,6 +25,12 @@  #ifndef __ARCH_ARM_MACH_OMAP2_PRCM_MPU44XX_H  #define __ARCH_ARM_MACH_OMAP2_PRCM_MPU44XX_H +#include "common.h" + +# ifndef __ASSEMBLER__ +extern void __iomem *prcm_mpu_base; +# endif +  #define OMAP4430_PRCM_MPU_BASE			0x48243000  #define OMAP44XX_PRCM_MPU_REGADDR(inst, reg)				\ @@ -98,6 +104,7 @@ extern u32 omap4_prcm_mpu_read_inst_reg(s16 inst, u16 idx);  extern void omap4_prcm_mpu_write_inst_reg(u32 val, s16 inst, u16 idx);  extern u32 omap4_prcm_mpu_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst,  					    s16 idx); +extern void __init omap2_set_globals_prcm_mpu(void __iomem *prcm_mpu);  # endif  #endif diff --git a/arch/arm/mach-omap2/prm.h b/arch/arm/mach-omap2/prm.h index c30ab5de8d1..a1a266ce90d 100644 --- a/arch/arm/mach-omap2/prm.h +++ b/arch/arm/mach-omap2/prm.h @@ -1,7 +1,7 @@  /*   * OMAP2/3/4 Power/Reset Management (PRM) bitfield definitions   * - * Copyright (C) 2007-2009 Texas Instruments, Inc. + * Copyright (C) 2007-2009, 2012 Texas Instruments, Inc.   * Copyright (C) 2010 Nokia Corporation   *   * Paul Walmsley @@ -15,6 +15,28 @@  #include "prcm-common.h" +# ifndef __ASSEMBLER__ +extern void __iomem *prm_base; +extern void omap2_set_globals_prm(void __iomem *prm); +# endif + + +/* + * MAX_MODULE_SOFTRESET_WAIT: Maximum microseconds to wait for OMAP + * module to softreset + */ +#define MAX_MODULE_SOFTRESET_WAIT		10000 + +/* + * MAX_MODULE_HARDRESET_WAIT: Maximum microseconds to wait for an OMAP + * submodule to exit hardreset + */ +#define MAX_MODULE_HARDRESET_WAIT		10000 + +/* + * Register bitfields + */ +  /*   * 24XX: PM_PWSTST_CORE, PM_PWSTST_GFX, PM_PWSTST_MPU, PM_PWSTST_DSP   * diff --git a/arch/arm/mach-omap2/prm2xxx.c b/arch/arm/mach-omap2/prm2xxx.c index e2860f9c111..bf24fc47603 100644 --- a/arch/arm/mach-omap2/prm2xxx.c +++ b/arch/arm/mach-omap2/prm2xxx.c @@ -20,7 +20,6 @@  #include "common.h"  #include <plat/cpu.h> -#include <plat/prcm.h>  #include "vp.h"  #include "powerdomain.h" @@ -69,6 +68,20 @@ static u32 omap2xxx_prm_read_reset_sources(void)  	return r;  } +/** + * omap2xxx_prm_dpll_reset - use DPLL reset to reboot the OMAP SoC + * + * Set the DPLL reset bit, which should reboot the SoC.  This is the + * recommended way to restart the SoC.  No return value. + */ +void omap2xxx_prm_dpll_reset(void) +{ +	omap2_prm_set_mod_reg_bits(OMAP_RST_DPLL3_MASK, WKUP_MOD, +				   OMAP2_RM_RSTCTRL); +	/* OCP barrier */ +	omap2_prm_read_mod_reg(WKUP_MOD, OMAP2_RM_RSTCTRL); +} +  int omap2xxx_clkdm_sleep(struct clockdomain *clkdm)  {  	omap2_prm_set_mod_reg_bits(OMAP24XX_FORCESTATE_MASK, diff --git a/arch/arm/mach-omap2/prm2xxx.h b/arch/arm/mach-omap2/prm2xxx.h index 1d97112524f..fe8a14f190a 100644 --- a/arch/arm/mach-omap2/prm2xxx.h +++ b/arch/arm/mach-omap2/prm2xxx.h @@ -124,6 +124,8 @@  extern int omap2xxx_clkdm_sleep(struct clockdomain *clkdm);  extern int omap2xxx_clkdm_wakeup(struct clockdomain *clkdm); +extern void omap2xxx_prm_dpll_reset(void); +  extern int __init prm2xxx_init(void);  extern int __exit prm2xxx_exit(void); diff --git a/arch/arm/mach-omap2/prm2xxx_3xxx.h b/arch/arm/mach-omap2/prm2xxx_3xxx.h index 3330b1bf789..78532d6fecd 100644 --- a/arch/arm/mach-omap2/prm2xxx_3xxx.h +++ b/arch/arm/mach-omap2/prm2xxx_3xxx.h @@ -241,11 +241,4 @@ extern int omap2_clkdm_clear_all_wkdeps(struct clockdomain *clkdm);  #define OMAP_LOGICRETSTATE_MASK				(1 << 2) -/* - * MAX_MODULE_HARDRESET_WAIT: Maximum microseconds to wait for an OMAP - * submodule to exit hardreset - */ -#define MAX_MODULE_HARDRESET_WAIT		10000 - -  #endif diff --git a/arch/arm/mach-omap2/prm3xxx.c b/arch/arm/mach-omap2/prm3xxx.c index 1fea656b2ca..b86116cf0db 100644 --- a/arch/arm/mach-omap2/prm3xxx.c +++ b/arch/arm/mach-omap2/prm3xxx.c @@ -20,7 +20,6 @@  #include "common.h"  #include <plat/cpu.h> -#include <plat/prcm.h>  #include "vp.h"  #include "powerdomain.h" @@ -123,6 +122,21 @@ u32 omap3_prm_vcvp_rmw(u32 mask, u32 bits, u8 offset)  }  /** + * omap3xxx_prm_dpll3_reset - use DPLL3 reset to reboot the OMAP SoC + * + * Set the DPLL3 reset bit, which should reboot the SoC.  This is the + * recommended way to restart the SoC, considering Errata i520.  No + * return value. + */ +void omap3xxx_prm_dpll3_reset(void) +{ +	omap2_prm_set_mod_reg_bits(OMAP_RST_DPLL3_MASK, OMAP3430_GR_MOD, +				   OMAP2_RM_RSTCTRL); +	/* OCP barrier */ +	omap2_prm_read_mod_reg(OMAP3430_GR_MOD, OMAP2_RM_RSTCTRL); +} + +/**   * omap3xxx_prm_read_pending_irqs - read pending PRM MPU IRQs into @events   * @events: ptr to a u32, preallocated by caller   * diff --git a/arch/arm/mach-omap2/prm3xxx.h b/arch/arm/mach-omap2/prm3xxx.h index a3c28a87541..10cd41a8129 100644 --- a/arch/arm/mach-omap2/prm3xxx.h +++ b/arch/arm/mach-omap2/prm3xxx.h @@ -152,6 +152,8 @@ extern void omap3xxx_prm_ocp_barrier(void);  extern void omap3xxx_prm_save_and_clear_irqen(u32 *saved_mask);  extern void omap3xxx_prm_restore_irqen(u32 *saved_mask); +extern void omap3xxx_prm_dpll3_reset(void); +  extern u32 omap3xxx_prm_get_reset_sources(void);  #endif /* __ASSEMBLER */ diff --git a/arch/arm/mach-omap2/prm44xx.c b/arch/arm/mach-omap2/prm44xx.c index a799e9552fb..6d3467af205 100644 --- a/arch/arm/mach-omap2/prm44xx.c +++ b/arch/arm/mach-omap2/prm44xx.c @@ -18,7 +18,6 @@  #include <linux/err.h>  #include <linux/io.h> -#include <plat/prcm.h>  #include "soc.h"  #include "iomap.h" diff --git a/arch/arm/mach-omap2/prm_common.c b/arch/arm/mach-omap2/prm_common.c index 945b4ad6ab8..f596e1e91ff 100644 --- a/arch/arm/mach-omap2/prm_common.c +++ b/arch/arm/mach-omap2/prm_common.c @@ -24,12 +24,11 @@  #include <linux/interrupt.h>  #include <linux/slab.h> -#include <plat/prcm.h> -  #include "prm2xxx_3xxx.h"  #include "prm2xxx.h"  #include "prm3xxx.h"  #include "prm44xx.h" +#include "common.h"  /*   * OMAP_PRCM_MAX_NR_PENDING_REG: maximum number of PRM_IRQ*_MPU regs @@ -54,6 +53,9 @@ static struct irq_chip_generic **prcm_irq_chips;   */  static struct omap_prcm_irq_setup *prcm_irq_setup; +/* prm_base: base virtual address of the PRM IP block */ +void __iomem *prm_base; +  /*   * prm_ll_data: function pointers to SoC-specific implementations of   * common PRM functions @@ -328,6 +330,17 @@ err:  }  /** + * omap2_set_globals_prm - set the PRM base address (for early use) + * @prm: PRM base virtual address + * + * XXX Will be replaced when the PRM/CM drivers are completed. + */ +void __init omap2_set_globals_prm(void __iomem *prm) +{ +	prm_base = prm; +} + +/**   * prm_read_reset_sources - return the sources of the SoC's last reset   *   * Return a u32 bitmask representing the reset sources that caused the diff --git a/arch/arm/mach-omap2/prminst44xx.h b/arch/arm/mach-omap2/prminst44xx.h index 46f2efb3659..a2ede2d6548 100644 --- a/arch/arm/mach-omap2/prminst44xx.h +++ b/arch/arm/mach-omap2/prminst44xx.h @@ -30,4 +30,6 @@ extern int omap4_prminst_assert_hardreset(u8 shift, u8 part, s16 inst,  extern int omap4_prminst_deassert_hardreset(u8 shift, u8 part, s16 inst,  					    u16 rstctrl_offs); +extern void omap_prm_base_init(void); +  #endif diff --git a/arch/arm/mach-omap2/sdrc.c b/arch/arm/mach-omap2/sdrc.c index c64ee1904be..dae7e4804a4 100644 --- a/arch/arm/mach-omap2/sdrc.c +++ b/arch/arm/mach-omap2/sdrc.c @@ -112,12 +112,10 @@ int omap2_sdrc_get_params(unsigned long r,  } -void __init omap2_set_globals_sdrc(struct omap_globals *omap2_globals) +void __init omap2_set_globals_sdrc(void __iomem *sdrc, void __iomem *sms)  { -	if (omap2_globals->sdrc) -		omap2_sdrc_base = omap2_globals->sdrc; -	if (omap2_globals->sms) -		omap2_sms_base = omap2_globals->sms; +	omap2_sdrc_base = sdrc; +	omap2_sms_base = sms;  }  /** diff --git a/arch/arm/mach-omap2/sdrc.h b/arch/arm/mach-omap2/sdrc.h index 69c4b329452..446aa13511f 100644 --- a/arch/arm/mach-omap2/sdrc.h +++ b/arch/arm/mach-omap2/sdrc.h @@ -51,6 +51,8 @@ static inline u32 sms_read_reg(u16 reg)  	return __raw_readl(OMAP_SMS_REGADDR(reg));  } +extern void omap2_set_globals_sdrc(void __iomem *sdrc, void __iomem *sms); +  /**   * struct omap_sdrc_params - SDRC parameters for a given SDRC clock rate diff --git a/arch/arm/mach-omap2/soc.h b/arch/arm/mach-omap2/soc.h index 070096496e2..f31d90774de 100644 --- a/arch/arm/mach-omap2/soc.h +++ b/arch/arm/mach-omap2/soc.h @@ -435,9 +435,7 @@ extern u32 omap_features;  #define OMAP3_HAS_IO_WAKEUP		BIT(6)  #define OMAP3_HAS_SDRC			BIT(7)  #define OMAP3_HAS_IO_CHAIN_CTRL		BIT(8) -#define OMAP4_HAS_MPU_1GHZ		BIT(9) -#define OMAP4_HAS_MPU_1_2GHZ		BIT(10) -#define OMAP4_HAS_MPU_1_5GHZ		BIT(11) +#define OMAP4_HAS_PERF_SILICON		BIT(9)  #define OMAP3_HAS_FEATURE(feat,flag)			\ @@ -465,9 +463,7 @@ static inline unsigned int omap4_has_ ##feat(void)	\  	return omap_features & OMAP4_HAS_ ##flag;	\  }							\ -OMAP4_HAS_FEATURE(mpu_1ghz, MPU_1GHZ) -OMAP4_HAS_FEATURE(mpu_1_2ghz, MPU_1_2GHZ) -OMAP4_HAS_FEATURE(mpu_1_5ghz, MPU_1_5GHZ) +OMAP4_HAS_FEATURE(perf_silicon, PERF_SILICON)  #endif	/* __ASSEMBLY__ */ diff --git a/arch/arm/mach-omap2/ti81xx.h b/arch/arm/mach-omap2/ti81xx.h index 8f9843f7842..a1e6caf0dba 100644 --- a/arch/arm/mach-omap2/ti81xx.h +++ b/arch/arm/mach-omap2/ti81xx.h @@ -22,6 +22,15 @@  #define TI81XX_CTRL_BASE	TI81XX_SCM_BASE  #define TI81XX_PRCM_BASE	0x48180000 +/* + * Adjust TAP register base such that omap3_check_revision accesses the correct + * TI81XX register for checking device ID (it adds 0x204 to tap base while + * TI81XX DEVICE ID register is at offset 0x600 from control base). + */ +#define TI81XX_TAP_BASE		(TI81XX_CTRL_BASE + \ +				 TI81XX_CONTROL_DEVICE_ID - 0x204) + +  #define TI81XX_ARM_INTC_BASE	0x48200000  #endif /* __ASM_ARCH_TI81XX_H */ diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c index c5bc2cb4d8d..7016637b531 100644 --- a/arch/arm/mach-omap2/timer.c +++ b/arch/arm/mach-omap2/timer.c @@ -37,6 +37,10 @@  #include <linux/clockchips.h>  #include <linux/slab.h>  #include <linux/of.h> +#include <linux/of_address.h> +#include <linux/of_irq.h> +#include <linux/platform_device.h> +#include <linux/platform_data/dmtimer-omap.h>  #include <asm/mach/time.h>  #include <asm/smp_twd.h> @@ -62,18 +66,6 @@  #define OMAP3_32K_SOURCE	"omap_32k_fck"  #define OMAP4_32K_SOURCE	"sys_32k_ck" -#ifdef CONFIG_OMAP_32K_TIMER -#define OMAP2_CLKEV_SOURCE	OMAP2_32K_SOURCE -#define OMAP3_CLKEV_SOURCE	OMAP3_32K_SOURCE -#define OMAP4_CLKEV_SOURCE	OMAP4_32K_SOURCE -#define OMAP3_SECURE_TIMER	12 -#else -#define OMAP2_CLKEV_SOURCE	OMAP2_MPU_SOURCE -#define OMAP3_CLKEV_SOURCE	OMAP3_MPU_SOURCE -#define OMAP4_CLKEV_SOURCE	OMAP4_MPU_SOURCE -#define OMAP3_SECURE_TIMER	1 -#endif -  #define REALTIME_COUNTER_BASE				0x48243200  #define INCREMENTER_NUMERATOR_OFFSET			0x10  #define INCREMENTER_DENUMERATOR_RELOAD_OFFSET		0x14 @@ -104,7 +96,7 @@ static int omap2_gp_timer_set_next_event(unsigned long cycles,  					 struct clock_event_device *evt)  {  	__omap_dm_timer_load_start(&clkev, OMAP_TIMER_CTRL_ST, -						0xffffffff - cycles, 1); +				   0xffffffff - cycles, OMAP_TIMER_POSTED);  	return 0;  } @@ -114,7 +106,7 @@ static void omap2_gp_timer_set_mode(enum clock_event_mode mode,  {  	u32 period; -	__omap_dm_timer_stop(&clkev, 1, clkev.rate); +	__omap_dm_timer_stop(&clkev, OMAP_TIMER_POSTED, clkev.rate);  	switch (mode) {  	case CLOCK_EVT_MODE_PERIODIC: @@ -122,10 +114,10 @@ static void omap2_gp_timer_set_mode(enum clock_event_mode mode,  		period -= 1;  		/* Looks like we need to first set the load value separately */  		__omap_dm_timer_write(&clkev, OMAP_TIMER_LOAD_REG, -					0xffffffff - period, 1); +				      0xffffffff - period, OMAP_TIMER_POSTED);  		__omap_dm_timer_load_start(&clkev,  					OMAP_TIMER_CTRL_AR | OMAP_TIMER_CTRL_ST, -						0xffffffff - period, 1); +					0xffffffff - period, OMAP_TIMER_POSTED);  		break;  	case CLOCK_EVT_MODE_ONESHOT:  		break; @@ -145,36 +137,144 @@ static struct clock_event_device clockevent_gpt = {  	.set_mode	= omap2_gp_timer_set_mode,  }; +static struct property device_disabled = { +	.name = "status", +	.length = sizeof("disabled"), +	.value = "disabled", +}; + +static struct of_device_id omap_timer_match[] __initdata = { +	{ .compatible = "ti,omap2-timer", }, +	{ } +}; + +/** + * omap_get_timer_dt - get a timer using device-tree + * @match	- device-tree match structure for matching a device type + * @property	- optional timer property to match + * + * Helper function to get a timer during early boot using device-tree for use + * as kernel system timer. Optionally, the property argument can be used to + * select a timer with a specific property. Once a timer is found then mark + * the timer node in device-tree as disabled, to prevent the kernel from + * registering this timer as a platform device and so no one else can use it. + */ +static struct device_node * __init omap_get_timer_dt(struct of_device_id *match, +						     const char *property) +{ +	struct device_node *np; + +	for_each_matching_node(np, match) { +		if (!of_device_is_available(np)) { +			of_node_put(np); +			continue; +		} + +		if (property && !of_get_property(np, property, NULL)) { +			of_node_put(np); +			continue; +		} + +		prom_add_property(np, &device_disabled); +		return np; +	} + +	return NULL; +} + +/** + * omap_dmtimer_init - initialisation function when device tree is used + * + * For secure OMAP3 devices, timers with device type "timer-secure" cannot + * be used by the kernel as they are reserved. Therefore, to prevent the + * kernel registering these devices remove them dynamically from the device + * tree on boot. + */ +void __init omap_dmtimer_init(void) +{ +	struct device_node *np; + +	if (!cpu_is_omap34xx()) +		return; + +	/* If we are a secure device, remove any secure timer nodes */ +	if ((omap_type() != OMAP2_DEVICE_TYPE_GP)) { +		np = omap_get_timer_dt(omap_timer_match, "ti,timer-secure"); +		if (np) +			of_node_put(np); +	} +} + +/** + * omap_dm_timer_get_errata - get errata flags for a timer + * + * Get the timer errata flags that are specific to the OMAP device being used. + */ +u32 __init omap_dm_timer_get_errata(void) +{ +	if (cpu_is_omap24xx()) +		return 0; + +	return OMAP_TIMER_ERRATA_I103_I767; +} +  static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,  						int gptimer_id, -						const char *fck_source) +						const char *fck_source, +						const char *property, +						int posted)  {  	char name[10]; /* 10 = sizeof("gptXX_Xck0") */ +	const char *oh_name; +	struct device_node *np;  	struct omap_hwmod *oh; -	struct resource irq_rsrc, mem_rsrc; -	size_t size; -	int res = 0; -	int r; +	struct resource irq, mem; +	int r = 0; -	sprintf(name, "timer%d", gptimer_id); -	omap_hwmod_setup_one(name); -	oh = omap_hwmod_lookup(name); +	if (of_have_populated_dt()) { +		np = omap_get_timer_dt(omap_timer_match, NULL); +		if (!np) +			return -ENODEV; + +		of_property_read_string_index(np, "ti,hwmods", 0, &oh_name); +		if (!oh_name) +			return -ENODEV; + +		timer->irq = irq_of_parse_and_map(np, 0); +		if (!timer->irq) +			return -ENXIO; + +		timer->io_base = of_iomap(np, 0); + +		of_node_put(np); +	} else { +		if (omap_dm_timer_reserve_systimer(gptimer_id)) +			return -ENODEV; + +		sprintf(name, "timer%d", gptimer_id); +		oh_name = name; +	} + +	oh = omap_hwmod_lookup(oh_name);  	if (!oh)  		return -ENODEV; -	r = omap_hwmod_get_resource_byname(oh, IORESOURCE_IRQ, NULL, &irq_rsrc); -	if (r) -		return -ENXIO; -	timer->irq = irq_rsrc.start; +	if (!of_have_populated_dt()) { +		r = omap_hwmod_get_resource_byname(oh, IORESOURCE_IRQ, NULL, +						   &irq); +		if (r) +			return -ENXIO; +		timer->irq = irq.start; -	r = omap_hwmod_get_resource_byname(oh, IORESOURCE_MEM, NULL, &mem_rsrc); -	if (r) -		return -ENXIO; -	timer->phys_base = mem_rsrc.start; -	size = mem_rsrc.end - mem_rsrc.start; +		r = omap_hwmod_get_resource_byname(oh, IORESOURCE_MEM, NULL, +						   &mem); +		if (r) +			return -ENXIO; + +		/* Static mapping, never released */ +		timer->io_base = ioremap(mem.start, mem.end - mem.start); +	} -	/* Static mapping, never released */ -	timer->io_base = ioremap(timer->phys_base, size);  	if (!timer->io_base)  		return -ENXIO; @@ -183,42 +283,56 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,  	if (IS_ERR(timer->fclk))  		return -ENODEV; -	omap_hwmod_enable(oh); - -	if (omap_dm_timer_reserve_systimer(gptimer_id)) -		return -ENODEV; - +	/* FIXME: Need to remove hard-coded test on timer ID */  	if (gptimer_id != 12) {  		struct clk *src;  		src = clk_get(NULL, fck_source);  		if (IS_ERR(src)) { -			res = -EINVAL; +			r = -EINVAL;  		} else { -			res = __omap_dm_timer_set_source(timer->fclk, src); -			if (IS_ERR_VALUE(res)) -				pr_warning("%s: timer%i cannot set source\n", -						__func__, gptimer_id); +			r = clk_set_parent(timer->fclk, src); +			if (IS_ERR_VALUE(r)) +				pr_warn("%s: %s cannot set source\n", +					__func__, oh->name);  			clk_put(src);  		}  	} + +	omap_hwmod_setup_one(oh_name); +	omap_hwmod_enable(oh);  	__omap_dm_timer_init_regs(timer); -	__omap_dm_timer_reset(timer, 1, 1); -	timer->posted = 1; -	timer->rate = clk_get_rate(timer->fclk); +	if (posted) +		__omap_dm_timer_enable_posted(timer); +	/* Check that the intended posted configuration matches the actual */ +	if (posted != timer->posted) +		return -EINVAL; + +	timer->rate = clk_get_rate(timer->fclk);  	timer->reserved = 1; -	return res; +	return r;  }  static void __init omap2_gp_clockevent_init(int gptimer_id, -						const char *fck_source) +						const char *fck_source, +						const char *property)  {  	int res; -	res = omap_dm_timer_init_one(&clkev, gptimer_id, fck_source); +	clkev.errata = omap_dm_timer_get_errata(); + +	/* +	 * For clock-event timers we never read the timer counter and +	 * so we are not impacted by errata i103 and i767. Therefore, +	 * we can safely ignore this errata for clock-event timers. +	 */ +	__omap_dm_timer_override_errata(&clkev, OMAP_TIMER_ERRATA_I103_I767); + +	res = omap_dm_timer_init_one(&clkev, gptimer_id, fck_source, property, +				     OMAP_TIMER_POSTED);  	BUG_ON(res);  	omap2_gp_timer_irq.dev_id = &clkev; @@ -251,7 +365,8 @@ static bool use_gptimer_clksrc;   */  static cycle_t clocksource_read_cycles(struct clocksource *cs)  { -	return (cycle_t)__omap_dm_timer_read_counter(&clksrc, 1); +	return (cycle_t)__omap_dm_timer_read_counter(&clksrc, +						     OMAP_TIMER_NONPOSTED);  }  static struct clocksource clocksource_gpt = { @@ -265,21 +380,41 @@ static struct clocksource clocksource_gpt = {  static u32 notrace dmtimer_read_sched_clock(void)  {  	if (clksrc.reserved) -		return __omap_dm_timer_read_counter(&clksrc, 1); +		return __omap_dm_timer_read_counter(&clksrc, +						    OMAP_TIMER_NONPOSTED);  	return 0;  } -#ifdef CONFIG_OMAP_32K_TIMER +static struct of_device_id omap_counter_match[] __initdata = { +	{ .compatible = "ti,omap-counter32k", }, +	{ } +}; +  /* Setup free-running counter for clocksource */  static int __init omap2_sync32k_clocksource_init(void)  {  	int ret; +	struct device_node *np = NULL;  	struct omap_hwmod *oh;  	void __iomem *vbase;  	const char *oh_name = "counter_32k";  	/* +	 * If device-tree is present, then search the DT blob +	 * to see if the 32kHz counter is supported. +	 */ +	if (of_have_populated_dt()) { +		np = omap_get_timer_dt(omap_counter_match, NULL); +		if (!np) +			return -ENODEV; + +		of_property_read_string_index(np, "ti,hwmods", 0, &oh_name); +		if (!oh_name) +			return -ENODEV; +	} + +	/*  	 * First check hwmod data is available for sync32k counter  	 */  	oh = omap_hwmod_lookup(oh_name); @@ -288,7 +423,13 @@ static int __init omap2_sync32k_clocksource_init(void)  	omap_hwmod_setup_one(oh_name); -	vbase = omap_hwmod_get_mpu_rt_va(oh); +	if (np) { +		vbase = of_iomap(np, 0); +		of_node_put(np); +	} else { +		vbase = omap_hwmod_get_mpu_rt_va(oh); +	} +  	if (!vbase) {  		pr_warn("%s: failed to get counter_32k resource\n", __func__);  		return -ENXIO; @@ -310,23 +451,21 @@ static int __init omap2_sync32k_clocksource_init(void)  	return ret;  } -#else -static inline int omap2_sync32k_clocksource_init(void) -{ -	return -ENODEV; -} -#endif  static void __init omap2_gptimer_clocksource_init(int gptimer_id,  						const char *fck_source)  {  	int res; -	res = omap_dm_timer_init_one(&clksrc, gptimer_id, fck_source); +	clksrc.errata = omap_dm_timer_get_errata(); + +	res = omap_dm_timer_init_one(&clksrc, gptimer_id, fck_source, NULL, +				     OMAP_TIMER_NONPOSTED);  	BUG_ON(res);  	__omap_dm_timer_load_start(&clksrc, -			OMAP_TIMER_CTRL_ST | OMAP_TIMER_CTRL_AR, 0, 1); +				   OMAP_TIMER_CTRL_ST | OMAP_TIMER_CTRL_AR, 0, +				   OMAP_TIMER_NONPOSTED);  	setup_sched_clock(dmtimer_read_sched_clock, 32, clksrc.rate);  	if (clocksource_register_hz(&clocksource_gpt, clksrc.rate)) @@ -337,25 +476,6 @@ static void __init omap2_gptimer_clocksource_init(int gptimer_id,  			gptimer_id, clksrc.rate);  } -static void __init omap2_clocksource_init(int gptimer_id, -						const char *fck_source) -{ -	/* -	 * First give preference to kernel parameter configuration -	 * by user (clocksource="gp_timer"). -	 * -	 * In case of missing kernel parameter for clocksource, -	 * first check for availability for 32k-sync timer, in case -	 * of failure in finding 32k_counter module or registering -	 * it as clocksource, execution will fallback to gp-timer. -	 */ -	if (use_gptimer_clksrc == true) -		omap2_gptimer_clocksource_init(gptimer_id, fck_source); -	else if (omap2_sync32k_clocksource_init()) -		/* Fall back to gp-timer code */ -		omap2_gptimer_clocksource_init(gptimer_id, fck_source); -} -  #ifdef CONFIG_SOC_HAS_REALTIME_COUNTER  /*   * The realtime counter also called master counter, is a free-running @@ -434,48 +554,65 @@ static inline void __init realtime_counter_init(void)  {}  #endif -#define OMAP_SYS_TIMER_INIT(name, clkev_nr, clkev_src,			\ +#define OMAP_SYS_GP_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop,	\ +			       clksrc_nr, clksrc_src)			\ +static void __init omap##name##_gptimer_timer_init(void)		\ +{									\ +	omap_dmtimer_init();						\ +	omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop);	\ +	omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src);	\ +} + +#define OMAP_SYS_32K_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop,	\  				clksrc_nr, clksrc_src)			\ -static void __init omap##name##_timer_init(void)			\ +static void __init omap##name##_sync32k_timer_init(void)		\  {									\ -	omap2_gp_clockevent_init((clkev_nr), clkev_src);		\ -	omap2_clocksource_init((clksrc_nr), clksrc_src);		\ +	omap_dmtimer_init();						\ +	omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop);	\ +	/* Enable the use of clocksource="gp_timer" kernel parameter */	\ +	if (use_gptimer_clksrc)						\ +		omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src);\ +	else								\ +		omap2_sync32k_clocksource_init();			\  } -#define OMAP_SYS_TIMER(name)						\ +#define OMAP_SYS_TIMER(name, clksrc)					\  struct sys_timer omap##name##_timer = {					\ -	.init	= omap##name##_timer_init,				\ +	.init	= omap##name##_##clksrc##_timer_init,			\  };  #ifdef CONFIG_ARCH_OMAP2 -OMAP_SYS_TIMER_INIT(2, 1, OMAP2_CLKEV_SOURCE, 2, OMAP2_MPU_SOURCE) -OMAP_SYS_TIMER(2) -#endif +OMAP_SYS_32K_TIMER_INIT(2, 1, OMAP2_32K_SOURCE, "ti,timer-alwon", +			2, OMAP2_MPU_SOURCE); +OMAP_SYS_TIMER(2, sync32k); +#endif /* CONFIG_ARCH_OMAP2 */  #ifdef CONFIG_ARCH_OMAP3 -OMAP_SYS_TIMER_INIT(3, 1, OMAP3_CLKEV_SOURCE, 2, OMAP3_MPU_SOURCE) -OMAP_SYS_TIMER(3) -OMAP_SYS_TIMER_INIT(3_secure, OMAP3_SECURE_TIMER, OMAP3_CLKEV_SOURCE, -			2, OMAP3_MPU_SOURCE) -OMAP_SYS_TIMER(3_secure) -#endif +OMAP_SYS_32K_TIMER_INIT(3, 1, OMAP3_32K_SOURCE, "ti,timer-alwon", +			2, OMAP3_MPU_SOURCE); +OMAP_SYS_TIMER(3, sync32k); +OMAP_SYS_32K_TIMER_INIT(3_secure, 12, OMAP3_32K_SOURCE, "ti,timer-secure", +			2, OMAP3_MPU_SOURCE); +OMAP_SYS_TIMER(3_secure, sync32k); +OMAP_SYS_GP_TIMER_INIT(3_gp, 1, OMAP3_MPU_SOURCE, "ti,timer-alwon", +		       2, OMAP3_MPU_SOURCE); +OMAP_SYS_TIMER(3_gp, gptimer); +#endif /* CONFIG_ARCH_OMAP3 */  #ifdef CONFIG_SOC_AM33XX -OMAP_SYS_TIMER_INIT(3_am33xx, 1, OMAP4_MPU_SOURCE, 2, OMAP4_MPU_SOURCE) -OMAP_SYS_TIMER(3_am33xx) -#endif +OMAP_SYS_GP_TIMER_INIT(3_am33xx, 1, OMAP4_MPU_SOURCE, "ti,timer-alwon", +		       2, OMAP4_MPU_SOURCE); +OMAP_SYS_TIMER(3_am33xx, gptimer); +#endif /* CONFIG_SOC_AM33XX */  #ifdef CONFIG_ARCH_OMAP4 +OMAP_SYS_32K_TIMER_INIT(4, 1, OMAP4_32K_SOURCE, "ti,timer-alwon", +			2, OMAP4_MPU_SOURCE);  #ifdef CONFIG_LOCAL_TIMERS -static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, -			      OMAP44XX_LOCAL_TWD_BASE, 29); -#endif - -static void __init omap4_timer_init(void) +static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, OMAP44XX_LOCAL_TWD_BASE, 29); +static void __init omap4_local_timer_init(void)  { -	omap2_gp_clockevent_init(1, OMAP4_CLKEV_SOURCE); -	omap2_clocksource_init(2, OMAP4_MPU_SOURCE); -#ifdef CONFIG_LOCAL_TIMERS +	omap4_sync32k_timer_init();  	/* Local timers are not supprted on OMAP4430 ES1.0 */  	if (omap_rev() != OMAP4430_REV_ES1_0) {  		int err; @@ -489,26 +626,32 @@ static void __init omap4_timer_init(void)  		if (err)  			pr_err("twd_local_timer_register failed %d\n", err);  	} -#endif  } -OMAP_SYS_TIMER(4) -#endif +#else /* CONFIG_LOCAL_TIMERS */ +static void __init omap4_local_timer_init(void) +{ +	omap4_sync32k_timer_init(); +} +#endif /* CONFIG_LOCAL_TIMERS */ +OMAP_SYS_TIMER(4, local); +#endif /* CONFIG_ARCH_OMAP4 */  #ifdef CONFIG_SOC_OMAP5 -static void __init omap5_timer_init(void) +OMAP_SYS_32K_TIMER_INIT(5, 1, OMAP4_32K_SOURCE, "ti,timer-alwon", +			2, OMAP4_MPU_SOURCE); +static void __init omap5_realtime_timer_init(void)  {  	int err; -	omap2_gp_clockevent_init(1, OMAP4_CLKEV_SOURCE); -	omap2_clocksource_init(2, OMAP4_MPU_SOURCE); +	omap5_sync32k_timer_init();  	realtime_counter_init();  	err = arch_timer_of_register();  	if (err)  		pr_err("%s: arch_timer_register failed %d\n", __func__, err);  } -OMAP_SYS_TIMER(5) -#endif +OMAP_SYS_TIMER(5, realtime); +#endif /* CONFIG_SOC_OMAP5 */  /**   * omap_timer_init - build and register timer device with an @@ -560,6 +703,7 @@ static int __init omap_timer_init(struct omap_hwmod *oh, void *unused)  	if (timer_dev_attr)  		pdata->timer_capability = timer_dev_attr->timer_capability; +	pdata->timer_errata = omap_dm_timer_get_errata();  	pdata->get_context_loss_count = omap_pm_get_dev_context_loss_count;  	pdev = omap_device_build(name, id, oh, pdata, sizeof(*pdata), @@ -586,6 +730,10 @@ static int __init omap2_dm_timer_init(void)  {  	int ret; +	/* If dtb is there, the devices will be created dynamically */ +	if (of_have_populated_dt()) +		return -ENODEV; +  	ret = omap_hwmod_for_each_by_class("timer", omap_timer_init, NULL);  	if (unlikely(ret)) {  		pr_err("%s: device registration failed.\n", __func__); diff --git a/arch/arm/mach-omap2/wd_timer.c b/arch/arm/mach-omap2/wd_timer.c index f6b6c37ac3f..7c2b4ed38f0 100644 --- a/arch/arm/mach-omap2/wd_timer.c +++ b/arch/arm/mach-omap2/wd_timer.c @@ -1,6 +1,8 @@  /*   * OMAP2+ MPU WD_TIMER-specific code   * + * Copyright (C) 2012 Texas Instruments, Inc. + *   * 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 @@ -11,10 +13,14 @@  #include <linux/io.h>  #include <linux/err.h> -#include "omap_hwmod.h" +#include <linux/platform_data/omap-wd-timer.h> +#include "omap_hwmod.h" +#include "omap_device.h"  #include "wd_timer.h"  #include "common.h" +#include "prm.h" +#include "soc.h"  /*   * In order to avoid any assumptions from bootloader regarding WDT @@ -26,9 +32,6 @@  #define OMAP_WDT_WPS		0x34  #define OMAP_WDT_SPR		0x48 -/* Maximum microseconds to wait for OMAP module to softreset */ -#define MAX_MODULE_SOFTRESET_WAIT	10000 -  int omap2_wd_timer_disable(struct omap_hwmod *oh)  {  	void __iomem *base; @@ -99,3 +102,32 @@ int omap2_wd_timer_reset(struct omap_hwmod *oh)  	return (c == MAX_MODULE_SOFTRESET_WAIT) ? -ETIMEDOUT :  		omap2_wd_timer_disable(oh);  } + +static int __init omap_init_wdt(void) +{ +	int id = -1; +	struct platform_device *pdev; +	struct omap_hwmod *oh; +	char *oh_name = "wd_timer2"; +	char *dev_name = "omap_wdt"; +	struct omap_wd_timer_platform_data pdata; + +	if (!cpu_class_is_omap2() || of_have_populated_dt()) +		return 0; + +	oh = omap_hwmod_lookup(oh_name); +	if (!oh) { +		pr_err("Could not look up wd_timer%d hwmod\n", id); +		return -EINVAL; +	} + +	pdata.read_reset_sources = prm_read_reset_sources; + +	pdev = omap_device_build(dev_name, id, oh, &pdata, +				 sizeof(struct omap_wd_timer_platform_data), +				 NULL, 0, 0); +	WARN(IS_ERR(pdev), "Can't build omap_device for %s:%s.\n", +	     dev_name, oh->name); +	return 0; +} +subsys_initcall(omap_init_wdt); diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig index 11aa7399dc0..86eec4159cb 100644 --- a/arch/arm/mach-pxa/Kconfig +++ b/arch/arm/mach-pxa/Kconfig @@ -2,27 +2,6 @@ if ARCH_PXA  menu "Intel PXA2xx/PXA3xx Implementations" -config ARCH_PXA_V7 -	bool "ARMv7 (PXA95x) based systems" - -if ARCH_PXA_V7 -comment "Marvell Dev Platforms (sorted by hardware release time)" -config MACH_TAVOREVB3 -	bool "PXA95x Development Platform (aka TavorEVB III)" -	select CPU_PXA955 - -config MACH_SAARB -	bool "PXA955 Handheld Platform (aka SAARB)" -	select CPU_PXA955 -endif - -config PXA_V7_MACH_AUTO -	def_bool y -	depends on ARCH_PXA_V7 -	depends on !MACH_SAARB -	select MACH_TAVOREVB3 - -if !ARCH_PXA_V7  comment "Intel/Marvell Dev Platforms (sorted by hardware release time)"  config MACH_PXA3XX_DT @@ -630,7 +609,6 @@ config MACH_ZIPIT2  	bool "Zipit Z2 Handheld"  	select HAVE_PWM  	select PXA27x -endif  endmenu  config PXA25x @@ -688,18 +666,6 @@ config CPU_PXA935  	help  	  PXA935 (codename Tavor-P65) -config PXA95x -	bool -	select CPU_PJ4 -	help -	  Select code specific to PXA95x variants - -config CPU_PXA955 -	bool -	select PXA95x -	help -	  PXA950 (codename MG1) -  config PXA_SHARP_C7xx  	bool  	select SHARPSL_PM diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile index ee88d6eae64..12c50055838 100644 --- a/arch/arm/mach-pxa/Makefile +++ b/arch/arm/mach-pxa/Makefile @@ -19,7 +19,6 @@ endif  obj-$(CONFIG_PXA25x)		+= mfp-pxa2xx.o clock-pxa2xx.o pxa2xx.o pxa25x.o  obj-$(CONFIG_PXA27x)		+= mfp-pxa2xx.o clock-pxa2xx.o pxa2xx.o pxa27x.o  obj-$(CONFIG_PXA3xx)		+= mfp-pxa3xx.o clock-pxa3xx.o pxa3xx.o smemc.o pxa3xx-ulpi.o -obj-$(CONFIG_PXA95x)		+= mfp-pxa3xx.o clock-pxa3xx.o pxa3xx.o pxa95x.o smemc.o  obj-$(CONFIG_CPU_PXA300)	+= pxa300.o  obj-$(CONFIG_CPU_PXA320)	+= pxa320.o  obj-$(CONFIG_CPU_PXA930)	+= pxa930.o @@ -36,9 +35,7 @@ obj-$(CONFIG_MACH_ZYLONITE300)	+= zylonite.o zylonite_pxa300.o  obj-$(CONFIG_MACH_ZYLONITE320)	+= zylonite.o zylonite_pxa320.o  obj-$(CONFIG_MACH_LITTLETON)	+= littleton.o  obj-$(CONFIG_MACH_TAVOREVB)	+= tavorevb.o -obj-$(CONFIG_MACH_TAVOREVB3)	+= tavorevb3.o  obj-$(CONFIG_MACH_SAAR)		+= saar.o -obj-$(CONFIG_MACH_SAARB)	+= saarb.o  # 3rd Party Dev Platforms  obj-$(CONFIG_ARCH_PXA_IDP)	+= idp.o diff --git a/arch/arm/mach-pxa/clock.h b/arch/arm/mach-pxa/clock.h index 3a258b1bf1a..1f65d32c8d5 100644 --- a/arch/arm/mach-pxa/clock.h +++ b/arch/arm/mach-pxa/clock.h @@ -57,7 +57,7 @@ void clk_pxa2xx_cken_disable(struct clk *clk);  extern struct syscore_ops pxa2xx_clock_syscore_ops; -#if defined(CONFIG_PXA3xx) || defined(CONFIG_PXA95x) +#if defined(CONFIG_PXA3xx)  #define DEFINE_PXA3_CKEN(_name, _cken, _rate, _delay)	\  struct clk clk_##_name = {				\  		.ops	= &clk_pxa3xx_cken_ops,		\ diff --git a/arch/arm/mach-pxa/devices.c b/arch/arm/mach-pxa/devices.c index ddaa04de8e2..daa86d39ed9 100644 --- a/arch/arm/mach-pxa/devices.c +++ b/arch/arm/mach-pxa/devices.c @@ -703,7 +703,7 @@ void __init pxa_set_ohci_info(struct pxaohci_platform_data *info)  }  #endif /* CONFIG_PXA27x || CONFIG_PXA3xx */ -#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx) || defined(CONFIG_PXA95x) +#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)  static struct resource pxa27x_resource_keypad[] = {  	[0] = {  		.start	= 0x41500000, @@ -872,7 +872,7 @@ struct platform_device pxa27x_device_pwm1 = {  	.resource	= pxa27x_resource_pwm1,  	.num_resources	= ARRAY_SIZE(pxa27x_resource_pwm1),  }; -#endif /* CONFIG_PXA27x || CONFIG_PXA3xx || CONFIG_PXA95x*/ +#endif /* CONFIG_PXA27x || CONFIG_PXA3xx */  #ifdef CONFIG_PXA3xx  static struct resource pxa3xx_resources_mci2[] = { @@ -981,7 +981,7 @@ struct platform_device pxa3xx_device_gcu = {  #endif /* CONFIG_PXA3xx */ -#if defined(CONFIG_PXA3xx) || defined(CONFIG_PXA95x) +#if defined(CONFIG_PXA3xx)  static struct resource pxa3xx_resources_i2c_power[] = {  	{  		.start  = 0x40f500c0, @@ -1082,7 +1082,7 @@ struct platform_device pxa3xx_device_ssp4 = {  	.resource	= pxa3xx_resource_ssp4,  	.num_resources	= ARRAY_SIZE(pxa3xx_resource_ssp4),  }; -#endif /* CONFIG_PXA3xx || CONFIG_PXA95x */ +#endif /* CONFIG_PXA3xx */  struct resource pxa_resource_gpio[] = {  	{ diff --git a/arch/arm/mach-pxa/include/mach/hardware.h b/arch/arm/mach-pxa/include/mach/hardware.h index 56d92e5cad8..ccb06e48552 100644 --- a/arch/arm/mach-pxa/include/mach/hardware.h +++ b/arch/arm/mach-pxa/include/mach/hardware.h @@ -194,17 +194,6 @@  #define __cpu_is_pxa935(id)	(0)  #endif -#ifdef CONFIG_CPU_PXA955 -#define __cpu_is_pxa955(id)				\ -	({						\ -		unsigned int _id = (id) >> 4 & 0xfff;	\ -		_id == 0x581 || _id == 0xc08		\ -			|| _id == 0xb76;		\ -	}) -#else -#define __cpu_is_pxa955(id)	(0) -#endif -  #define cpu_is_pxa210()					\  	({						\  		__cpu_is_pxa210(read_cpuid_id());	\ @@ -255,10 +244,6 @@  		__cpu_is_pxa935(read_cpuid_id());	\  	 }) -#define cpu_is_pxa955()					\ -	({						\ -		__cpu_is_pxa955(read_cpuid_id());	\ -	})  /* @@ -297,15 +282,6 @@  #define __cpu_is_pxa93x(id)	(0)  #endif -#ifdef CONFIG_PXA95x -#define __cpu_is_pxa95x(id)				\ -	({						\ -		__cpu_is_pxa955(id);			\ -	}) -#else -#define __cpu_is_pxa95x(id)	(0) -#endif -  #define cpu_is_pxa2xx()					\  	({						\  		__cpu_is_pxa2xx(read_cpuid_id());	\ @@ -321,10 +297,6 @@  		__cpu_is_pxa93x(read_cpuid_id());	\  	 }) -#define cpu_is_pxa95x()					\ -	({						\ -		__cpu_is_pxa95x(read_cpuid_id());	\ -	})  /*   * return current memory and LCD clock frequency in units of 10kHz diff --git a/arch/arm/mach-pxa/include/mach/irqs.h b/arch/arm/mach-pxa/include/mach/irqs.h index 8765782dd95..48c2fd85168 100644 --- a/arch/arm/mach-pxa/include/mach/irqs.h +++ b/arch/arm/mach-pxa/include/mach/irqs.h @@ -84,7 +84,6 @@  #define IRQ_PXA935_MMC0	PXA_IRQ(72)	/* MMC0 Controller (PXA935) */  #define IRQ_PXA935_MMC1	PXA_IRQ(73)	/* MMC1 Controller (PXA935) */  #define IRQ_PXA935_MMC2	PXA_IRQ(74)	/* MMC2 Controller (PXA935) */ -#define IRQ_PXA955_MMC3	PXA_IRQ(75)	/* MMC3 Controller (PXA955) */  #define IRQ_U2P		PXA_IRQ(93)	/* USB PHY D+/D- Lines (PXA935) */  #define PXA_GPIO_IRQ_BASE	PXA_IRQ(96) diff --git a/arch/arm/mach-pxa/include/mach/pxa3xx.h b/arch/arm/mach-pxa/include/mach/pxa3xx.h index cd3e57f4268..6dd7fa163e2 100644 --- a/arch/arm/mach-pxa/include/mach/pxa3xx.h +++ b/arch/arm/mach-pxa/include/mach/pxa3xx.h @@ -7,7 +7,6 @@  extern void __init pxa3xx_map_io(void);  extern void __init pxa3xx_init_irq(void); -extern void __init pxa95x_init_irq(void);  #define pxa3xx_handle_irq	ichp_handle_irq diff --git a/arch/arm/mach-pxa/include/mach/pxa95x.h b/arch/arm/mach-pxa/include/mach/pxa95x.h deleted file mode 100644 index cbb097c4cb1..00000000000 --- a/arch/arm/mach-pxa/include/mach/pxa95x.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef __MACH_PXA95X_H -#define __MACH_PXA95X_H - -#include <mach/pxa3xx.h> -#include <mach/mfp-pxa930.h> - -#endif /* __MACH_PXA95X_H */ diff --git a/arch/arm/mach-pxa/pxa3xx-ulpi.c b/arch/arm/mach-pxa/pxa3xx-ulpi.c index 7dbe3ccf199..e329ccefd36 100644 --- a/arch/arm/mach-pxa/pxa3xx-ulpi.c +++ b/arch/arm/mach-pxa/pxa3xx-ulpi.c @@ -384,18 +384,7 @@ static struct platform_driver pxa3xx_u2d_ulpi_driver = {          .probe          = pxa3xx_u2d_probe,          .remove         = pxa3xx_u2d_remove,  }; - -static int pxa3xx_u2d_ulpi_init(void) -{ -	return platform_driver_register(&pxa3xx_u2d_ulpi_driver); -} -module_init(pxa3xx_u2d_ulpi_init); - -static void __exit pxa3xx_u2d_ulpi_exit(void) -{ -	platform_driver_unregister(&pxa3xx_u2d_ulpi_driver); -} -module_exit(pxa3xx_u2d_ulpi_exit); +module_platform_driver(pxa3xx_u2d_ulpi_driver);  MODULE_DESCRIPTION("PXA3xx U2D ULPI driver");  MODULE_AUTHOR("Igor Grinberg"); diff --git a/arch/arm/mach-pxa/pxa95x.c b/arch/arm/mach-pxa/pxa95x.c deleted file mode 100644 index 47601f80e6e..00000000000 --- a/arch/arm/mach-pxa/pxa95x.c +++ /dev/null @@ -1,295 +0,0 @@ -/* - * linux/arch/arm/mach-pxa/pxa95x.c - * - * code specific to PXA95x aka MGx - * - * Copyright (C) 2009-2010 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 version 2 as - * published by the Free Software Foundation. - */ -#include <linux/module.h> -#include <linux/kernel.h> -#include <linux/init.h> -#include <linux/pm.h> -#include <linux/platform_device.h> -#include <linux/i2c/pxa-i2c.h> -#include <linux/irq.h> -#include <linux/io.h> -#include <linux/syscore_ops.h> - -#include <mach/hardware.h> -#include <mach/pxa3xx-regs.h> -#include <mach/pxa930.h> -#include <mach/reset.h> -#include <mach/pm.h> -#include <mach/dma.h> - -#include "generic.h" -#include "devices.h" -#include "clock.h" - -static struct mfp_addr_map pxa95x_mfp_addr_map[] __initdata = { - -	MFP_ADDR(GPIO0, 0x02e0), -	MFP_ADDR(GPIO1, 0x02dc), -	MFP_ADDR(GPIO2, 0x02e8), -	MFP_ADDR(GPIO3, 0x02d8), -	MFP_ADDR(GPIO4, 0x02e4), -	MFP_ADDR(GPIO5, 0x02ec), -	MFP_ADDR(GPIO6, 0x02f8), -	MFP_ADDR(GPIO7, 0x02fc), -	MFP_ADDR(GPIO8, 0x0300), -	MFP_ADDR(GPIO9, 0x02d4), -	MFP_ADDR(GPIO10, 0x02f4), -	MFP_ADDR(GPIO11, 0x02f0), -	MFP_ADDR(GPIO12, 0x0304), -	MFP_ADDR(GPIO13, 0x0310), -	MFP_ADDR(GPIO14, 0x0308), -	MFP_ADDR(GPIO15, 0x030c), -	MFP_ADDR(GPIO16, 0x04e8), -	MFP_ADDR(GPIO17, 0x04f4), -	MFP_ADDR(GPIO18, 0x04f8), -	MFP_ADDR(GPIO19, 0x04fc), -	MFP_ADDR(GPIO20, 0x0518), -	MFP_ADDR(GPIO21, 0x051c), -	MFP_ADDR(GPIO22, 0x04ec), -	MFP_ADDR(GPIO23, 0x0500), -	MFP_ADDR(GPIO24, 0x04f0), -	MFP_ADDR(GPIO25, 0x0504), -	MFP_ADDR(GPIO26, 0x0510), -	MFP_ADDR(GPIO27, 0x0514), -	MFP_ADDR(GPIO28, 0x0520), -	MFP_ADDR(GPIO29, 0x0600), -	MFP_ADDR(GPIO30, 0x0618), -	MFP_ADDR(GPIO31, 0x0610), -	MFP_ADDR(GPIO32, 0x060c), -	MFP_ADDR(GPIO33, 0x061c), -	MFP_ADDR(GPIO34, 0x0620), -	MFP_ADDR(GPIO35, 0x0628), -	MFP_ADDR(GPIO36, 0x062c), -	MFP_ADDR(GPIO37, 0x0630), -	MFP_ADDR(GPIO38, 0x0634), -	MFP_ADDR(GPIO39, 0x0638), -	MFP_ADDR(GPIO40, 0x063c), -	MFP_ADDR(GPIO41, 0x0614), -	MFP_ADDR(GPIO42, 0x0624), -	MFP_ADDR(GPIO43, 0x0608), -	MFP_ADDR(GPIO44, 0x0604), -	MFP_ADDR(GPIO45, 0x050c), -	MFP_ADDR(GPIO46, 0x0508), -	MFP_ADDR(GPIO47, 0x02bc), -	MFP_ADDR(GPIO48, 0x02b4), -	MFP_ADDR(GPIO49, 0x02b8), -	MFP_ADDR(GPIO50, 0x02c8), -	MFP_ADDR(GPIO51, 0x02c0), -	MFP_ADDR(GPIO52, 0x02c4), -	MFP_ADDR(GPIO53, 0x02d0), -	MFP_ADDR(GPIO54, 0x02cc), -	MFP_ADDR(GPIO55, 0x029c), -	MFP_ADDR(GPIO56, 0x02a0), -	MFP_ADDR(GPIO57, 0x0294), -	MFP_ADDR(GPIO58, 0x0298), -	MFP_ADDR(GPIO59, 0x02a4), -	MFP_ADDR(GPIO60, 0x02a8), -	MFP_ADDR(GPIO61, 0x02b0), -	MFP_ADDR(GPIO62, 0x02ac), -	MFP_ADDR(GPIO63, 0x0640), -	MFP_ADDR(GPIO64, 0x065c), -	MFP_ADDR(GPIO65, 0x0648), -	MFP_ADDR(GPIO66, 0x0644), -	MFP_ADDR(GPIO67, 0x0674), -	MFP_ADDR(GPIO68, 0x0658), -	MFP_ADDR(GPIO69, 0x0654), -	MFP_ADDR(GPIO70, 0x0660), -	MFP_ADDR(GPIO71, 0x0668), -	MFP_ADDR(GPIO72, 0x0664), -	MFP_ADDR(GPIO73, 0x0650), -	MFP_ADDR(GPIO74, 0x066c), -	MFP_ADDR(GPIO75, 0x064c), -	MFP_ADDR(GPIO76, 0x0670), -	MFP_ADDR(GPIO77, 0x0678), -	MFP_ADDR(GPIO78, 0x067c), -	MFP_ADDR(GPIO79, 0x0694), -	MFP_ADDR(GPIO80, 0x069c), -	MFP_ADDR(GPIO81, 0x06a0), -	MFP_ADDR(GPIO82, 0x06a4), -	MFP_ADDR(GPIO83, 0x0698), -	MFP_ADDR(GPIO84, 0x06bc), -	MFP_ADDR(GPIO85, 0x06b4), -	MFP_ADDR(GPIO86, 0x06b0), -	MFP_ADDR(GPIO87, 0x06c0), -	MFP_ADDR(GPIO88, 0x06c4), -	MFP_ADDR(GPIO89, 0x06ac), -	MFP_ADDR(GPIO90, 0x0680), -	MFP_ADDR(GPIO91, 0x0684), -	MFP_ADDR(GPIO92, 0x0688), -	MFP_ADDR(GPIO93, 0x0690), -	MFP_ADDR(GPIO94, 0x068c), -	MFP_ADDR(GPIO95, 0x06a8), -	MFP_ADDR(GPIO96, 0x06b8), -	MFP_ADDR(GPIO97, 0x0410), -	MFP_ADDR(GPIO98, 0x0418), -	MFP_ADDR(GPIO99, 0x041c), -	MFP_ADDR(GPIO100, 0x0414), -	MFP_ADDR(GPIO101, 0x0408), -	MFP_ADDR(GPIO102, 0x0324), -	MFP_ADDR(GPIO103, 0x040c), -	MFP_ADDR(GPIO104, 0x0400), -	MFP_ADDR(GPIO105, 0x0328), -	MFP_ADDR(GPIO106, 0x0404), - -	MFP_ADDR(GPIO159, 0x0524), -	MFP_ADDR(GPIO163, 0x0534), -	MFP_ADDR(GPIO167, 0x0544), -	MFP_ADDR(GPIO168, 0x0548), -	MFP_ADDR(GPIO169, 0x054c), -	MFP_ADDR(GPIO170, 0x0550), -	MFP_ADDR(GPIO171, 0x0554), -	MFP_ADDR(GPIO172, 0x0558), -	MFP_ADDR(GPIO173, 0x055c), - -	MFP_ADDR(nXCVREN, 0x0204), -	MFP_ADDR(DF_CLE_nOE, 0x020c), -	MFP_ADDR(DF_nADV1_ALE, 0x0218), -	MFP_ADDR(DF_SCLK_E, 0x0214), -	MFP_ADDR(DF_SCLK_S, 0x0210), -	MFP_ADDR(nBE0, 0x021c), -	MFP_ADDR(nBE1, 0x0220), -	MFP_ADDR(DF_nADV2_ALE, 0x0224), -	MFP_ADDR(DF_INT_RnB, 0x0228), -	MFP_ADDR(DF_nCS0, 0x022c), -	MFP_ADDR(DF_nCS1, 0x0230), -	MFP_ADDR(nLUA, 0x0254), -	MFP_ADDR(nLLA, 0x0258), -	MFP_ADDR(DF_nWE, 0x0234), -	MFP_ADDR(DF_nRE_nOE, 0x0238), -	MFP_ADDR(DF_ADDR0, 0x024c), -	MFP_ADDR(DF_ADDR1, 0x0250), -	MFP_ADDR(DF_ADDR2, 0x025c), -	MFP_ADDR(DF_ADDR3, 0x0260), -	MFP_ADDR(DF_IO0, 0x023c), -	MFP_ADDR(DF_IO1, 0x0240), -	MFP_ADDR(DF_IO2, 0x0244), -	MFP_ADDR(DF_IO3, 0x0248), -	MFP_ADDR(DF_IO4, 0x0264), -	MFP_ADDR(DF_IO5, 0x0268), -	MFP_ADDR(DF_IO6, 0x026c), -	MFP_ADDR(DF_IO7, 0x0270), -	MFP_ADDR(DF_IO8, 0x0274), -	MFP_ADDR(DF_IO9, 0x0278), -	MFP_ADDR(DF_IO10, 0x027c), -	MFP_ADDR(DF_IO11, 0x0280), -	MFP_ADDR(DF_IO12, 0x0284), -	MFP_ADDR(DF_IO13, 0x0288), -	MFP_ADDR(DF_IO14, 0x028c), -	MFP_ADDR(DF_IO15, 0x0290), - -	MFP_ADDR(GSIM_UIO, 0x0314), -	MFP_ADDR(GSIM_UCLK, 0x0318), -	MFP_ADDR(GSIM_UDET, 0x031c), -	MFP_ADDR(GSIM_nURST, 0x0320), - -	MFP_ADDR(PMIC_INT, 0x06c8), - -	MFP_ADDR(RDY, 0x0200), - -	MFP_ADDR_END, -}; - -static DEFINE_CK(pxa95x_lcd, LCD, &clk_pxa3xx_hsio_ops); -static DEFINE_CLK(pxa95x_pout, &clk_pxa3xx_pout_ops, 13000000, 70); -static DEFINE_PXA3_CKEN(pxa95x_ffuart, FFUART, 14857000, 1); -static DEFINE_PXA3_CKEN(pxa95x_btuart, BTUART, 14857000, 1); -static DEFINE_PXA3_CKEN(pxa95x_stuart, STUART, 14857000, 1); -static DEFINE_PXA3_CKEN(pxa95x_i2c, I2C, 32842000, 0); -static DEFINE_PXA3_CKEN(pxa95x_keypad, KEYPAD, 32768, 0); -static DEFINE_PXA3_CKEN(pxa95x_ssp1, SSP1, 13000000, 0); -static DEFINE_PXA3_CKEN(pxa95x_ssp2, SSP2, 13000000, 0); -static DEFINE_PXA3_CKEN(pxa95x_ssp3, SSP3, 13000000, 0); -static DEFINE_PXA3_CKEN(pxa95x_ssp4, SSP4, 13000000, 0); -static DEFINE_PXA3_CKEN(pxa95x_pwm0, PWM0, 13000000, 0); -static DEFINE_PXA3_CKEN(pxa95x_pwm1, PWM1, 13000000, 0); -static DEFINE_PXA3_CKEN(pxa95x_gpio, GPIO, 13000000, 0); - -static struct clk_lookup pxa95x_clkregs[] = { -	INIT_CLKREG(&clk_pxa95x_pout, NULL, "CLK_POUT"), -	/* Power I2C clock is always on */ -	INIT_CLKREG(&clk_dummy, "pxa3xx-pwri2c.1", NULL), -	INIT_CLKREG(&clk_pxa95x_lcd, "pxa2xx-fb", NULL), -	INIT_CLKREG(&clk_pxa95x_ffuart, "pxa2xx-uart.0", NULL), -	INIT_CLKREG(&clk_pxa95x_btuart, "pxa2xx-uart.1", NULL), -	INIT_CLKREG(&clk_pxa95x_stuart, "pxa2xx-uart.2", NULL), -	INIT_CLKREG(&clk_pxa95x_stuart, "pxa2xx-ir", "UARTCLK"), -	INIT_CLKREG(&clk_pxa95x_i2c, "pxa2xx-i2c.0", NULL), -	INIT_CLKREG(&clk_pxa95x_keypad, "pxa27x-keypad", NULL), -	INIT_CLKREG(&clk_pxa95x_ssp1, "pxa27x-ssp.0", NULL), -	INIT_CLKREG(&clk_pxa95x_ssp2, "pxa27x-ssp.1", NULL), -	INIT_CLKREG(&clk_pxa95x_ssp3, "pxa27x-ssp.2", NULL), -	INIT_CLKREG(&clk_pxa95x_ssp4, "pxa27x-ssp.3", NULL), -	INIT_CLKREG(&clk_pxa95x_pwm0, "pxa27x-pwm.0", NULL), -	INIT_CLKREG(&clk_pxa95x_pwm1, "pxa27x-pwm.1", NULL), -	INIT_CLKREG(&clk_pxa95x_gpio, "pxa-gpio", NULL), -	INIT_CLKREG(&clk_dummy, "sa1100-rtc", NULL), -}; - -void __init pxa95x_init_irq(void) -{ -	pxa_init_irq(96, NULL); -} - -/* - * device registration specific to PXA93x. - */ - -void __init pxa95x_set_i2c_power_info(struct i2c_pxa_platform_data *info) -{ -	pxa_register_device(&pxa3xx_device_i2c_power, info); -} - -static struct platform_device *devices[] __initdata = { -	&pxa_device_gpio, -	&sa1100_device_rtc, -	&pxa_device_rtc, -	&pxa27x_device_ssp1, -	&pxa27x_device_ssp2, -	&pxa27x_device_ssp3, -	&pxa3xx_device_ssp4, -	&pxa27x_device_pwm0, -	&pxa27x_device_pwm1, -}; - -static int __init pxa95x_init(void) -{ -	int ret = 0, i; - -	if (cpu_is_pxa95x()) { -		mfp_init_base(io_p2v(MFPR_BASE)); -		mfp_init_addr(pxa95x_mfp_addr_map); - -		reset_status = ARSR; - -		/* -		 * clear RDH bit every time after reset -		 * -		 * Note: the last 3 bits DxS are write-1-to-clear so carefully -		 * preserve them here in case they will be referenced later -		 */ -		ASCR &= ~(ASCR_RDH | ASCR_D1S | ASCR_D2S | ASCR_D3S); - -		clkdev_add_table(pxa95x_clkregs, ARRAY_SIZE(pxa95x_clkregs)); - -		if ((ret = pxa_init_dma(IRQ_DMA, 32))) -			return ret; - -		register_syscore_ops(&pxa_irq_syscore_ops); -		register_syscore_ops(&pxa3xx_clock_syscore_ops); - -		ret = platform_add_devices(devices, ARRAY_SIZE(devices)); -	} - -	return ret; -} - -postcore_initcall(pxa95x_init); diff --git a/arch/arm/mach-pxa/saarb.c b/arch/arm/mach-pxa/saarb.c deleted file mode 100644 index 5aded5e6148..00000000000 --- a/arch/arm/mach-pxa/saarb.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - *  linux/arch/arm/mach-pxa/saarb.c - * - *  Support for the Marvell Handheld Platform (aka SAARB) - * - *  Copyright (C) 2007-2010 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 version 2 as - *  publishhed by the Free Software Foundation. - */ -#include <linux/gpio.h> -#include <linux/init.h> -#include <linux/kernel.h> -#include <linux/i2c.h> -#include <linux/i2c/pxa-i2c.h> -#include <linux/mfd/88pm860x.h> - -#include <asm/mach-types.h> -#include <asm/mach/arch.h> - -#include <mach/irqs.h> -#include <mach/hardware.h> -#include <mach/mfp.h> -#include <mach/mfp-pxa930.h> -#include <mach/pxa95x.h> - -#include "generic.h" - -#define SAARB_NR_IRQS	(IRQ_BOARD_START + 40) - -static struct pm860x_touch_pdata saarb_touch = { -	.gpadc_prebias	= 1, -	.slot_cycle	= 1, -	.tsi_prebias	= 6, -	.pen_prebias	= 16, -	.pen_prechg	= 2, -	.res_x		= 300, -}; - -static struct pm860x_backlight_pdata saarb_backlight[] = { -	{ -		.id	= PM8606_ID_BACKLIGHT, -		.iset	= PM8606_WLED_CURRENT(24), -		.flags	= PM8606_BACKLIGHT1, -	}, -	{}, -}; - -static struct pm860x_led_pdata saarb_led[] = { -	{ -		.id	= PM8606_ID_LED, -		.iset	= PM8606_LED_CURRENT(12), -		.flags	= PM8606_LED1_RED, -	}, { -		.id	= PM8606_ID_LED, -		.iset	= PM8606_LED_CURRENT(12), -		.flags	= PM8606_LED1_GREEN, -	}, { -		.id	= PM8606_ID_LED, -		.iset	= PM8606_LED_CURRENT(12), -		.flags	= PM8606_LED1_BLUE, -	}, { -		.id	= PM8606_ID_LED, -		.iset	= PM8606_LED_CURRENT(12), -		.flags	= PM8606_LED2_RED, -	}, { -		.id	= PM8606_ID_LED, -		.iset	= PM8606_LED_CURRENT(12), -		.flags	= PM8606_LED2_GREEN, -	}, { -		.id	= PM8606_ID_LED, -		.iset	= PM8606_LED_CURRENT(12), -		.flags	= PM8606_LED2_BLUE, -	}, -}; - -static struct pm860x_platform_data saarb_pm8607_info = { -	.touch		= &saarb_touch, -	.backlight	= &saarb_backlight[0], -	.led		= &saarb_led[0], -	.companion_addr	= 0x10, -	.irq_mode	= 0, -	.irq_base	= IRQ_BOARD_START, - -	.i2c_port	= GI2C_PORT, -}; - -static struct i2c_board_info saarb_i2c_info[] = { -	{ -		.type		= "88PM860x", -		.addr		= 0x34, -		.platform_data	= &saarb_pm8607_info, -		.irq		= PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO83)), -	}, -}; - -static void __init saarb_init(void) -{ -	pxa_set_ffuart_info(NULL); -	pxa_set_i2c_info(NULL); -	i2c_register_board_info(0, ARRAY_AND_SIZE(saarb_i2c_info)); -} - -MACHINE_START(SAARB, "PXA955 Handheld Platform (aka SAARB)") -	.atag_offset    = 0x100, -	.map_io         = pxa3xx_map_io, -	.nr_irqs	= SAARB_NR_IRQS, -	.init_irq       = pxa95x_init_irq, -	.handle_irq	= pxa3xx_handle_irq, -	.timer          = &pxa_timer, -	.init_machine   = saarb_init, -	.restart	= pxa_restart, -MACHINE_END - diff --git a/arch/arm/mach-pxa/tavorevb3.c b/arch/arm/mach-pxa/tavorevb3.c deleted file mode 100644 index f7d9305cfd7..00000000000 --- a/arch/arm/mach-pxa/tavorevb3.c +++ /dev/null @@ -1,136 +0,0 @@ -/* - *  linux/arch/arm/mach-pxa/tavorevb3.c - * - *  Support for the Marvell EVB3 Development Platform. - * - *  Copyright:  (C) Copyright 2008-2010 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 version 2 as - *  publishhed by the Free Software Foundation. - */ - -#include <linux/init.h> -#include <linux/kernel.h> -#include <linux/platform_device.h> -#include <linux/interrupt.h> -#include <linux/i2c.h> -#include <linux/i2c/pxa-i2c.h> -#include <linux/gpio.h> -#include <linux/mfd/88pm860x.h> - -#include <asm/mach-types.h> -#include <asm/mach/arch.h> - -#include <mach/pxa930.h> - -#include "devices.h" -#include "generic.h" - -#define TAVOREVB3_NR_IRQS	(IRQ_BOARD_START + 24) - -static mfp_cfg_t evb3_mfp_cfg[] __initdata = { -	/* UART */ -	GPIO53_UART1_TXD, -	GPIO54_UART1_RXD, - -	/* PMIC */ -	PMIC_INT_GPIO83, -}; - -#if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE) -static struct pm860x_touch_pdata evb3_touch = { -	.gpadc_prebias	= 1, -	.slot_cycle	= 1, -	.tsi_prebias	= 6, -	.pen_prebias	= 16, -	.pen_prechg	= 2, -	.res_x		= 300, -}; - -static struct pm860x_backlight_pdata evb3_backlight[] = { -	{ -		.id	= PM8606_ID_BACKLIGHT, -		.iset	= PM8606_WLED_CURRENT(24), -		.flags	= PM8606_BACKLIGHT1, -	}, -	{}, -}; - -static struct pm860x_led_pdata evb3_led[] = { -	{ -		.id	= PM8606_ID_LED, -		.iset	= PM8606_LED_CURRENT(12), -		.flags	= PM8606_LED1_RED, -	}, { -		.id	= PM8606_ID_LED, -		.iset	= PM8606_LED_CURRENT(12), -		.flags	= PM8606_LED1_GREEN, -	}, { -		.id	= PM8606_ID_LED, -		.iset	= PM8606_LED_CURRENT(12), -		.flags	= PM8606_LED1_BLUE, -	}, { -		.id	= PM8606_ID_LED, -		.iset	= PM8606_LED_CURRENT(12), -		.flags	= PM8606_LED2_RED, -	}, { -		.id	= PM8606_ID_LED, -		.iset	= PM8606_LED_CURRENT(12), -		.flags	= PM8606_LED2_GREEN, -	}, { -		.id	= PM8606_ID_LED, -		.iset	= PM8606_LED_CURRENT(12), -		.flags	= PM8606_LED2_BLUE, -	}, -}; - -static struct pm860x_platform_data evb3_pm8607_info = { -	.touch				= &evb3_touch, -	.backlight			= &evb3_backlight[0], -	.led				= &evb3_led[0], -	.companion_addr			= 0x10, -	.irq_mode			= 0, -	.irq_base			= IRQ_BOARD_START, - -	.i2c_port			= GI2C_PORT, -}; - -static struct i2c_board_info evb3_i2c_info[] = { -	{ -		.type		= "88PM860x", -		.addr		= 0x34, -		.platform_data	= &evb3_pm8607_info, -		.irq		= PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO83)), -	}, -}; - -static void __init evb3_init_i2c(void) -{ -	pxa_set_i2c_info(NULL); -	i2c_register_board_info(0, ARRAY_AND_SIZE(evb3_i2c_info)); -} -#else -static inline void evb3_init_i2c(void) {} -#endif - -static void __init evb3_init(void) -{ -	/* initialize MFP configurations */ -	pxa3xx_mfp_config(ARRAY_AND_SIZE(evb3_mfp_cfg)); - -	pxa_set_ffuart_info(NULL); - -	evb3_init_i2c(); -} - -MACHINE_START(TAVOREVB3, "PXA950 Evaluation Board (aka TavorEVB3)") -	.atag_offset	= 0x100, -	.map_io         = pxa3xx_map_io, -	.nr_irqs	= TAVOREVB3_NR_IRQS, -	.init_irq       = pxa3xx_init_irq, -	.handle_irq       = pxa3xx_handle_irq, -	.timer          = &pxa_timer, -	.init_machine   = evb3_init, -	.restart	= pxa_restart, -MACHINE_END diff --git a/arch/arm/mach-s3c24xx/clock-s3c2443.c b/arch/arm/mach-s3c24xx/clock-s3c2443.c index 7f689ce1be6..bdaba59b42d 100644 --- a/arch/arm/mach-s3c24xx/clock-s3c2443.c +++ b/arch/arm/mach-s3c24xx/clock-s3c2443.c @@ -158,12 +158,6 @@ static struct clk init_clocks_off[] = {  		.devname	= "s3c2410-spi.0",  		.parent		= &clk_p,  		.enable		= s3c2443_clkcon_enable_p, -		.ctrlbit	= S3C2443_PCLKCON_SPI0, -	}, { -		.name		= "spi", -		.devname	= "s3c2410-spi.1", -		.parent		= &clk_p, -		.enable		= s3c2443_clkcon_enable_p,  		.ctrlbit	= S3C2443_PCLKCON_SPI1,  	}  }; diff --git a/arch/arm/mach-s3c64xx/clock.c b/arch/arm/mach-s3c64xx/clock.c index 28041e83dc8..1a6f8577744 100644 --- a/arch/arm/mach-s3c64xx/clock.c +++ b/arch/arm/mach-s3c64xx/clock.c @@ -138,11 +138,7 @@ static struct clk init_clocks_off[] = {  		.ctrlbit	= S3C_CLKCON_PCLK_TSADC,  	}, {  		.name		= "i2c", -#ifdef CONFIG_S3C_DEV_I2C1  		.devname        = "s3c2440-i2c.0", -#else -		.devname	= "s3c2440-i2c", -#endif  		.parent		= &clk_p,  		.enable		= s3c64xx_pclk_ctrl,  		.ctrlbit	= S3C_CLKCON_PCLK_IIC, @@ -319,10 +315,6 @@ static struct clk init_clocks_off[] = {  		.enable		= s3c64xx_sclk_ctrl,  		.ctrlbit	= S3C_CLKCON_SCLK_MFC,  	}, { -		.name		= "cam", -		.enable		= s3c64xx_sclk_ctrl, -		.ctrlbit	= S3C_CLKCON_SCLK_CAM, -	}, {  		.name		= "sclk_jpeg",  		.enable		= s3c64xx_sclk_ctrl,  		.ctrlbit	= S3C_CLKCON_SCLK_JPEG, @@ -681,15 +673,6 @@ static struct clksrc_sources clkset_audio2 = {  	.nr_sources	= ARRAY_SIZE(clkset_audio2_list),  }; -static struct clk *clkset_camif_list[] = { -	&clk_h2, -}; - -static struct clksrc_sources clkset_camif = { -	.sources	= clkset_camif_list, -	.nr_sources	= ARRAY_SIZE(clkset_camif_list), -}; -  static struct clksrc_clk clksrcs[] = {  	{  		.clk	= { @@ -744,10 +727,9 @@ static struct clksrc_clk clksrcs[] = {  			.name		= "camera",  			.ctrlbit        = S3C_CLKCON_SCLK_CAM,  			.enable		= s3c64xx_sclk_ctrl, +			.parent		= &clk_h2,  		},  		.reg_div	= { .reg = S3C_CLK_DIV0, .shift = 20, .size = 4  }, -		.reg_src	= { .reg = NULL, .shift = 0, .size = 0  }, -		.sources	= &clkset_camif,  	},  }; diff --git a/arch/arm/mach-s3c64xx/common.c b/arch/arm/mach-s3c64xx/common.c index be746e33e86..aef303b8997 100644 --- a/arch/arm/mach-s3c64xx/common.c +++ b/arch/arm/mach-s3c64xx/common.c @@ -155,7 +155,6 @@ void __init s3c64xx_init_io(struct map_desc *mach_desc, int size)  	/* initialise the io descriptors we need for initialisation */  	iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc));  	iotable_init(mach_desc, size); -	init_consistent_dma_size(SZ_8M);  	/* detect cpu id */  	s3c64xx_init_cpu(); diff --git a/arch/arm/mach-s5p64x0/common.c b/arch/arm/mach-s5p64x0/common.c index 111e404a81f..8ae5800e807 100644 --- a/arch/arm/mach-s5p64x0/common.c +++ b/arch/arm/mach-s5p64x0/common.c @@ -187,7 +187,6 @@ void __init s5p6440_map_io(void)  	s5p6440_default_sdhci2();  	iotable_init(s5p6440_iodesc, ARRAY_SIZE(s5p6440_iodesc)); -	init_consistent_dma_size(SZ_8M);  }  void __init s5p6450_map_io(void) @@ -202,7 +201,6 @@ void __init s5p6450_map_io(void)  	s5p6450_default_sdhci2();  	iotable_init(s5p6450_iodesc, ARRAY_SIZE(s5p6450_iodesc)); -	init_consistent_dma_size(SZ_8M);  }  /* diff --git a/arch/arm/mach-s5pv210/common.c b/arch/arm/mach-s5pv210/common.c index a0c50efe814..9dfe93e2624 100644 --- a/arch/arm/mach-s5pv210/common.c +++ b/arch/arm/mach-s5pv210/common.c @@ -169,8 +169,6 @@ void __init s5pv210_init_io(struct map_desc *mach_desc, int size)  void __init s5pv210_map_io(void)  { -	init_consistent_dma_size(14 << 20); -  	/* initialise device information early */  	s5pv210_default_sdhci0();  	s5pv210_default_sdhci1(); diff --git a/arch/arm/mach-s5pv210/mach-goni.c b/arch/arm/mach-s5pv210/mach-goni.c index 55e1dba4ffd..c72b31078c9 100644 --- a/arch/arm/mach-s5pv210/mach-goni.c +++ b/arch/arm/mach-s5pv210/mach-goni.c @@ -774,7 +774,6 @@ static void __init goni_pmic_init(void)  /* MoviNAND */  static struct s3c_sdhci_platdata goni_hsmmc0_data __initdata = {  	.max_width		= 4, -	.host_caps2		= MMC_CAP2_BROKEN_VOLTAGE,  	.cd_type		= S3C_SDHCI_CD_PERMANENT,  }; diff --git a/arch/arm/mach-shmobile/setup-r8a7740.c b/arch/arm/mach-shmobile/setup-r8a7740.c index 11bb1d98419..96f11394c7c 100644 --- a/arch/arm/mach-shmobile/setup-r8a7740.c +++ b/arch/arm/mach-shmobile/setup-r8a7740.c @@ -66,12 +66,6 @@ static struct map_desc r8a7740_io_desc[] __initdata = {  void __init r8a7740_map_io(void)  {  	iotable_init(r8a7740_io_desc, ARRAY_SIZE(r8a7740_io_desc)); - -	/* -	 * DMA memory at 0xff200000 - 0xffdfffff. The default 2MB size isn't -	 * enough to allocate the frame buffer memory. -	 */ -	init_consistent_dma_size(12 << 20);  }  /* SCIFA0 */ diff --git a/arch/arm/mach-shmobile/setup-sh7372.c b/arch/arm/mach-shmobile/setup-sh7372.c index a07954fbcd2..be6f746c97f 100644 --- a/arch/arm/mach-shmobile/setup-sh7372.c +++ b/arch/arm/mach-shmobile/setup-sh7372.c @@ -58,12 +58,6 @@ static struct map_desc sh7372_io_desc[] __initdata = {  void __init sh7372_map_io(void)  {  	iotable_init(sh7372_io_desc, ARRAY_SIZE(sh7372_io_desc)); - -	/* -	 * DMA memory at 0xff200000 - 0xffdfffff. The default 2MB size isn't -	 * enough to allocate the frame buffer memory. -	 */ -	init_consistent_dma_size(12 << 20);  }  /* SCIFA0 */ diff --git a/arch/arm/mach-tegra/apbio.c b/arch/arm/mach-tegra/apbio.c index b5015d0f191..d091675ba37 100644 --- a/arch/arm/mach-tegra/apbio.c +++ b/arch/arm/mach-tegra/apbio.c @@ -15,7 +15,6 @@  #include <linux/kernel.h>  #include <linux/io.h> -#include <mach/iomap.h>  #include <linux/of.h>  #include <linux/dmaengine.h>  #include <linux/dma-mapping.h> @@ -24,9 +23,8 @@  #include <linux/sched.h>  #include <linux/mutex.h> -#include <mach/dma.h> -  #include "apbio.h" +#include "iomap.h"  #if defined(CONFIG_TEGRA20_APB_DMA)  static DEFINE_MUTEX(tegra_apb_dma_lock); @@ -71,7 +69,6 @@ bool tegra_apb_dma_init(void)  	dma_sconfig.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;  	dma_sconfig.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; -	dma_sconfig.slave_id = TEGRA_DMA_REQ_SEL_CNTR;  	dma_sconfig.src_maxburst = 1;  	dma_sconfig.dst_maxburst = 1; diff --git a/arch/arm/mach-tegra/board-dt-tegra20.c b/arch/arm/mach-tegra/board-dt-tegra20.c index aa5325cd1c4..71569c01afd 100644 --- a/arch/arm/mach-tegra/board-dt-tegra20.c +++ b/arch/arm/mach-tegra/board-dt-tegra20.c @@ -40,12 +40,10 @@  #include <asm/mach/time.h>  #include <asm/setup.h> -#include <mach/iomap.h> -#include <mach/irqs.h> -  #include "board.h"  #include "clock.h"  #include "common.h" +#include "iomap.h"  struct tegra_ehci_platform_data tegra_ehci1_pdata = {  	.operating_mode = TEGRA_USB_OTG, diff --git a/arch/arm/mach-tegra/board-dt-tegra30.c b/arch/arm/mach-tegra/board-dt-tegra30.c index 5e92a81f9a2..e56170393a5 100644 --- a/arch/arm/mach-tegra/board-dt-tegra30.c +++ b/arch/arm/mach-tegra/board-dt-tegra30.c @@ -33,11 +33,10 @@  #include <asm/mach/arch.h>  #include <asm/hardware/gic.h> -#include <mach/iomap.h> -  #include "board.h"  #include "clock.h"  #include "common.h" +#include "iomap.h"  struct of_dev_auxdata tegra30_auxdata_lookup[] __initdata = {  	OF_DEV_AUXDATA("nvidia,tegra20-sdhci", 0x78000000, "sdhci-tegra.0", NULL), diff --git a/arch/arm/mach-tegra/clock.c b/arch/arm/mach-tegra/clock.c index fd82085eca5..867bf8bf556 100644 --- a/arch/arm/mach-tegra/clock.c +++ b/arch/arm/mach-tegra/clock.c @@ -27,8 +27,6 @@  #include <linux/seq_file.h>  #include <linux/slab.h> -#include <mach/clk.h> -  #include "board.h"  #include "clock.h"  #include "tegra_cpu_car.h" diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c index 0b0a5f556d3..f688daa7497 100644 --- a/arch/arm/mach-tegra/common.c +++ b/arch/arm/mach-tegra/common.c @@ -26,13 +26,13 @@  #include <asm/hardware/cache-l2x0.h>  #include <asm/hardware/gic.h> -#include <mach/iomap.h>  #include <mach/powergate.h>  #include "board.h"  #include "clock.h"  #include "common.h"  #include "fuse.h" +#include "iomap.h"  #include "pmc.h"  #include "apbio.h"  #include "sleep.h" diff --git a/arch/arm/mach-tegra/cpu-tegra.c b/arch/arm/mach-tegra/cpu-tegra.c index 627bf0f4262..a74d3c7d2e2 100644 --- a/arch/arm/mach-tegra/cpu-tegra.c +++ b/arch/arm/mach-tegra/cpu-tegra.c @@ -30,9 +30,6 @@  #include <linux/io.h>  #include <linux/suspend.h> - -#include <mach/clk.h> -  /* Frequency table index must be sequential starting at 0 */  static struct cpufreq_frequency_table freq_table[] = {  	{ 0, 216000 }, diff --git a/arch/arm/mach-tegra/cpuidle.c b/arch/arm/mach-tegra/cpuidle.c index 566e2f88899..9a6f051b382 100644 --- a/arch/arm/mach-tegra/cpuidle.c +++ b/arch/arm/mach-tegra/cpuidle.c @@ -29,8 +29,6 @@  #include <asm/proc-fns.h> -#include <mach/iomap.h> -  static int tegra_idle_enter_lp3(struct cpuidle_device *dev,  				struct cpuidle_driver *drv, int index); diff --git a/arch/arm/mach-tegra/flowctrl.c b/arch/arm/mach-tegra/flowctrl.c index f07488e0bd3..ffaa286a71e 100644 --- a/arch/arm/mach-tegra/flowctrl.c +++ b/arch/arm/mach-tegra/flowctrl.c @@ -22,9 +22,8 @@  #include <linux/kernel.h>  #include <linux/io.h> -#include <mach/iomap.h> -  #include "flowctrl.h" +#include "iomap.h"  u8 flowctrl_offset_halt_cpu[] = {  	FLOW_CTRL_HALT_CPU0_EVENTS, diff --git a/arch/arm/mach-tegra/fuse.c b/arch/arm/mach-tegra/fuse.c index 0b7db174a5d..6c752e8f1f0 100644 --- a/arch/arm/mach-tegra/fuse.c +++ b/arch/arm/mach-tegra/fuse.c @@ -21,9 +21,8 @@  #include <linux/io.h>  #include <linux/export.h> -#include <mach/iomap.h> -  #include "fuse.h" +#include "iomap.h"  #include "apbio.h"  #define FUSE_UID_LOW		0x108 diff --git a/arch/arm/mach-tegra/headsmp.S b/arch/arm/mach-tegra/headsmp.S index 6addc78cb6b..93f0370cc95 100644 --- a/arch/arm/mach-tegra/headsmp.S +++ b/arch/arm/mach-tegra/headsmp.S @@ -3,9 +3,8 @@  #include <asm/cache.h> -#include <mach/iomap.h> -  #include "flowctrl.h" +#include "iomap.h"  #include "reset.h"  #include "sleep.h" diff --git a/arch/arm/mach-tegra/include/mach/debug-macro.S b/arch/arm/mach-tegra/include/mach/debug-macro.S index 8ce0661b8a3..44ca7b1d8b8 100644 --- a/arch/arm/mach-tegra/include/mach/debug-macro.S +++ b/arch/arm/mach-tegra/include/mach/debug-macro.S @@ -26,8 +26,8 @@  #include <linux/serial_reg.h> -#include <mach/iomap.h> -#include <mach/irammap.h> +#include "../../iomap.h" +#include "../../irammap.h"  		.macro  addruart, rp, rv, tmp  		adr	\rp, 99f		@ actual addr of 99f diff --git a/arch/arm/mach-tegra/include/mach/dma.h b/arch/arm/mach-tegra/include/mach/dma.h deleted file mode 100644 index 3081cc6dda3..00000000000 --- a/arch/arm/mach-tegra/include/mach/dma.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * arch/arm/mach-tegra/include/mach/dma.h - * - * Copyright (c) 2008-2009, NVIDIA Corporation. - * - * 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_TEGRA_DMA_H -#define __MACH_TEGRA_DMA_H - -#include <linux/list.h> - -#define TEGRA_DMA_REQ_SEL_CNTR			0 -#define TEGRA_DMA_REQ_SEL_I2S_2			1 -#define TEGRA_DMA_REQ_SEL_I2S_1			2 -#define TEGRA_DMA_REQ_SEL_SPD_I			3 -#define TEGRA_DMA_REQ_SEL_UI_I			4 -#define TEGRA_DMA_REQ_SEL_MIPI			5 -#define TEGRA_DMA_REQ_SEL_I2S2_2		6 -#define TEGRA_DMA_REQ_SEL_I2S2_1		7 -#define TEGRA_DMA_REQ_SEL_UARTA			8 -#define TEGRA_DMA_REQ_SEL_UARTB			9 -#define TEGRA_DMA_REQ_SEL_UARTC			10 -#define TEGRA_DMA_REQ_SEL_SPI			11 -#define TEGRA_DMA_REQ_SEL_AC97			12 -#define TEGRA_DMA_REQ_SEL_ACMODEM		13 -#define TEGRA_DMA_REQ_SEL_SL4B			14 -#define TEGRA_DMA_REQ_SEL_SL2B1			15 -#define TEGRA_DMA_REQ_SEL_SL2B2			16 -#define TEGRA_DMA_REQ_SEL_SL2B3			17 -#define TEGRA_DMA_REQ_SEL_SL2B4			18 -#define TEGRA_DMA_REQ_SEL_UARTD			19 -#define TEGRA_DMA_REQ_SEL_UARTE			20 -#define TEGRA_DMA_REQ_SEL_I2C			21 -#define TEGRA_DMA_REQ_SEL_I2C2			22 -#define TEGRA_DMA_REQ_SEL_I2C3			23 -#define TEGRA_DMA_REQ_SEL_DVC_I2C		24 -#define TEGRA_DMA_REQ_SEL_OWR			25 -#define TEGRA_DMA_REQ_SEL_INVALID		31 - -#endif diff --git a/arch/arm/mach-tegra/include/mach/powergate.h b/arch/arm/mach-tegra/include/mach/powergate.h index 4752b1a68f3..06763fe7529 100644 --- a/arch/arm/mach-tegra/include/mach/powergate.h +++ b/arch/arm/mach-tegra/include/mach/powergate.h @@ -20,6 +20,8 @@  #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 diff --git a/arch/arm/mach-tegra/include/mach/uncompress.h b/arch/arm/mach-tegra/include/mach/uncompress.h index 937c4c50219..27725750ca3 100644 --- a/arch/arm/mach-tegra/include/mach/uncompress.h +++ b/arch/arm/mach-tegra/include/mach/uncompress.h @@ -28,8 +28,8 @@  #include <linux/types.h>  #include <linux/serial_reg.h> -#include <mach/iomap.h> -#include <mach/irammap.h> +#include "../../iomap.h" +#include "../../irammap.h"  #define BIT(x) (1 << (x))  #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) diff --git a/arch/arm/mach-tegra/io.c b/arch/arm/mach-tegra/io.c index 58b4baf9c48..7d09f301b3a 100644 --- a/arch/arm/mach-tegra/io.c +++ b/arch/arm/mach-tegra/io.c @@ -26,9 +26,9 @@  #include <asm/page.h>  #include <asm/mach/map.h> -#include <mach/iomap.h>  #include "board.h" +#include "iomap.h"  static struct map_desc tegra_io_desc[] __initdata = {  	{ diff --git a/arch/arm/mach-tegra/include/mach/iomap.h b/arch/arm/mach-tegra/iomap.h index fee3a94c454..53151030a07 100644 --- a/arch/arm/mach-tegra/include/mach/iomap.h +++ b/arch/arm/mach-tegra/iomap.h @@ -1,6 +1,4 @@  /* - * arch/arm/mach-tegra/include/mach/iomap.h - *   * Copyright (C) 2010 Google, Inc.   *   * Author: diff --git a/arch/arm/mach-tegra/include/mach/irammap.h b/arch/arm/mach-tegra/irammap.h index 0cbe6326185..0cbe6326185 100644 --- a/arch/arm/mach-tegra/include/mach/irammap.h +++ b/arch/arm/mach-tegra/irammap.h diff --git a/arch/arm/mach-tegra/irq.c b/arch/arm/mach-tegra/irq.c index 2f5bd2db8e1..b7886f18351 100644 --- a/arch/arm/mach-tegra/irq.c +++ b/arch/arm/mach-tegra/irq.c @@ -25,9 +25,8 @@  #include <asm/hardware/gic.h> -#include <mach/iomap.h> -  #include "board.h" +#include "iomap.h"  #define ICTLR_CPU_IEP_VFIQ	0x08  #define ICTLR_CPU_IEP_FIR	0x14 diff --git a/arch/arm/mach-tegra/pcie.c b/arch/arm/mach-tegra/pcie.c index a8dba6489c9..f18fc3ab4e5 100644 --- a/arch/arm/mach-tegra/pcie.c +++ b/arch/arm/mach-tegra/pcie.c @@ -37,11 +37,11 @@  #include <asm/sizes.h>  #include <asm/mach/pci.h> -#include <mach/iomap.h>  #include <mach/clk.h>  #include <mach/powergate.h>  #include "board.h" +#include "iomap.h"  /* register definitions */  #define AFI_OFFSET	0x3800 diff --git a/arch/arm/mach-tegra/platsmp.c b/arch/arm/mach-tegra/platsmp.c index 81cb26591ac..1b926df99c4 100644 --- a/arch/arm/mach-tegra/platsmp.c +++ b/arch/arm/mach-tegra/platsmp.c @@ -24,8 +24,6 @@  #include <asm/mach-types.h>  #include <asm/smp_scu.h> -#include <mach/clk.h> -#include <mach/iomap.h>  #include <mach/powergate.h>  #include "fuse.h" @@ -34,6 +32,7 @@  #include "tegra_cpu_car.h"  #include "common.h" +#include "iomap.h"  extern void tegra_secondary_startup(void); diff --git a/arch/arm/mach-tegra/pmc.c b/arch/arm/mach-tegra/pmc.c index 7af6a54404b..d4fdb5fcec2 100644 --- a/arch/arm/mach-tegra/pmc.c +++ b/arch/arm/mach-tegra/pmc.c @@ -19,7 +19,7 @@  #include <linux/io.h>  #include <linux/of.h> -#include <mach/iomap.h> +#include "iomap.h"  #define PMC_CTRL		0x0  #define PMC_CTRL_INTR_LOW	(1 << 17) diff --git a/arch/arm/mach-tegra/powergate.c b/arch/arm/mach-tegra/powergate.c index de0662de28a..2cc1185d902 100644 --- a/arch/arm/mach-tegra/powergate.c +++ b/arch/arm/mach-tegra/powergate.c @@ -28,10 +28,10 @@  #include <linux/spinlock.h>  #include <mach/clk.h> -#include <mach/iomap.h>  #include <mach/powergate.h>  #include "fuse.h" +#include "iomap.h"  #define PWRGATE_TOGGLE		0x30  #define  PWRGATE_TOGGLE_START	(1 << 8) diff --git a/arch/arm/mach-tegra/reset.c b/arch/arm/mach-tegra/reset.c index 5beb7ebe294..e05da7d10c3 100644 --- a/arch/arm/mach-tegra/reset.c +++ b/arch/arm/mach-tegra/reset.c @@ -22,9 +22,8 @@  #include <asm/cacheflush.h>  #include <asm/hardware/cache-l2x0.h> -#include <mach/iomap.h> -#include <mach/irammap.h> - +#include "iomap.h" +#include "irammap.h"  #include "reset.h"  #include "fuse.h" diff --git a/arch/arm/mach-tegra/sleep-t20.S b/arch/arm/mach-tegra/sleep-t20.S index a36ae413e2b..72ce709799d 100644 --- a/arch/arm/mach-tegra/sleep-t20.S +++ b/arch/arm/mach-tegra/sleep-t20.S @@ -22,8 +22,6 @@  #include <asm/assembler.h> -#include <mach/iomap.h> -  #include "sleep.h"  #include "flowctrl.h" diff --git a/arch/arm/mach-tegra/sleep-t30.S b/arch/arm/mach-tegra/sleep-t30.S index 777d9cee8b9..be7614b7c5c 100644 --- a/arch/arm/mach-tegra/sleep-t30.S +++ b/arch/arm/mach-tegra/sleep-t30.S @@ -18,8 +18,6 @@  #include <asm/assembler.h> -#include <mach/iomap.h> -  #include "sleep.h"  #include "flowctrl.h" diff --git a/arch/arm/mach-tegra/sleep.S b/arch/arm/mach-tegra/sleep.S index ea81554c483..08e9481c049 100644 --- a/arch/arm/mach-tegra/sleep.S +++ b/arch/arm/mach-tegra/sleep.S @@ -26,7 +26,7 @@  #include <asm/assembler.h> -#include <mach/iomap.h> +#include "iomap.h"  #include "flowctrl.h"  #include "sleep.h" diff --git a/arch/arm/mach-tegra/sleep.h b/arch/arm/mach-tegra/sleep.h index e25a7cd703d..4889b281c5f 100644 --- a/arch/arm/mach-tegra/sleep.h +++ b/arch/arm/mach-tegra/sleep.h @@ -17,7 +17,7 @@  #ifndef __MACH_TEGRA_SLEEP_H  #define __MACH_TEGRA_SLEEP_H -#include <mach/iomap.h> +#include "iomap.h"  #define TEGRA_ARM_PERIF_VIRT (TEGRA_ARM_PERIF_BASE - IO_CPU_PHYS \  					+ IO_CPU_VIRT) diff --git a/arch/arm/mach-tegra/tegra20_clocks.c b/arch/arm/mach-tegra/tegra20_clocks.c index deb873fb12b..4eb6bc81a87 100644 --- a/arch/arm/mach-tegra/tegra20_clocks.c +++ b/arch/arm/mach-tegra/tegra20_clocks.c @@ -27,10 +27,9 @@  #include <linux/clkdev.h>  #include <linux/clk.h> -#include <mach/iomap.h> -  #include "clock.h"  #include "fuse.h" +#include "iomap.h"  #include "tegra2_emc.h"  #include "tegra_cpu_car.h" diff --git a/arch/arm/mach-tegra/tegra20_clocks_data.c b/arch/arm/mach-tegra/tegra20_clocks_data.c index 8d398a33adf..9615ee39c35 100644 --- a/arch/arm/mach-tegra/tegra20_clocks_data.c +++ b/arch/arm/mach-tegra/tegra20_clocks_data.c @@ -27,8 +27,6 @@  #include <linux/io.h>  #include <linux/clk.h> -#include <mach/iomap.h> -  #include "clock.h"  #include "fuse.h"  #include "tegra2_emc.h" diff --git a/arch/arm/mach-tegra/tegra2_emc.c b/arch/arm/mach-tegra/tegra2_emc.c index 5070d833bdd..837c7b9ea63 100644 --- a/arch/arm/mach-tegra/tegra2_emc.c +++ b/arch/arm/mach-tegra/tegra2_emc.c @@ -25,8 +25,6 @@  #include <linux/platform_device.h>  #include <linux/platform_data/tegra_emc.h> -#include <mach/iomap.h> -  #include "tegra2_emc.h"  #include "fuse.h" diff --git a/arch/arm/mach-tegra/tegra30_clocks.c b/arch/arm/mach-tegra/tegra30_clocks.c index e9de5dfd94e..000239d6839 100644 --- a/arch/arm/mach-tegra/tegra30_clocks.c +++ b/arch/arm/mach-tegra/tegra30_clocks.c @@ -31,10 +31,9 @@  #include <asm/clkdev.h> -#include <mach/iomap.h> -  #include "clock.h"  #include "fuse.h" +#include "iomap.h"  #include "tegra_cpu_car.h"  #define USE_PLL_LOCK_BITS 0 diff --git a/arch/arm/mach-tegra/timer.c b/arch/arm/mach-tegra/timer.c index d3b8c8e7368..6ff50353651 100644 --- a/arch/arm/mach-tegra/timer.c +++ b/arch/arm/mach-tegra/timer.c @@ -31,11 +31,11 @@  #include <asm/smp_twd.h>  #include <asm/sched_clock.h> -#include <mach/iomap.h>  #include <mach/irqs.h>  #include "board.h"  #include "clock.h" +#include "iomap.h"  #define RTC_SECONDS            0x08  #define RTC_SHADOW_SECONDS     0x0c diff --git a/arch/arm/mach-u300/core.c b/arch/arm/mach-u300/core.c index ece8a2dfb81..12f3994c43d 100644 --- a/arch/arm/mach-u300/core.c +++ b/arch/arm/mach-u300/core.c @@ -82,8 +82,6 @@ static struct map_desc u300_io_desc[] __initdata = {  static void __init u300_map_io(void)  {  	iotable_init(u300_io_desc, ARRAY_SIZE(u300_io_desc)); -	/* We enable a real big DMA buffer if need be. */ -	init_consistent_dma_size(SZ_4M);  }  /* diff --git a/arch/arm/mach-vt8500/include/mach/hardware.h b/arch/arm/mach-vt8500/include/mach/hardware.h deleted file mode 100644 index db4163f72c3..00000000000 --- a/arch/arm/mach-vt8500/include/mach/hardware.h +++ /dev/null @@ -1,12 +0,0 @@ -/* arch/arm/mach-vt8500/include/mach/hardware.h - * - * 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. - * - */ diff --git a/arch/arm/mach-vt8500/include/mach/i8042.h b/arch/arm/mach-vt8500/include/mach/i8042.h deleted file mode 100644 index cd7143cad6f..00000000000 --- a/arch/arm/mach-vt8500/include/mach/i8042.h +++ /dev/null @@ -1,18 +0,0 @@ -/* arch/arm/mach-vt8500/include/mach/i8042.h - * - * Copyright (C) 2010 Alexey Charkov <alchark@gmail.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. - * - */ - -extern unsigned long wmt_i8042_base __initdata; -extern int wmt_i8042_kbd_irq; -extern int wmt_i8042_aux_irq; diff --git a/arch/arm/mach-vt8500/include/mach/restart.h b/arch/arm/mach-vt8500/include/mach/restart.h deleted file mode 100644 index 738979518ac..00000000000 --- a/arch/arm/mach-vt8500/include/mach/restart.h +++ /dev/null @@ -1,17 +0,0 @@ -/* linux/arch/arm/mach-vt8500/restart.h - * - * Copyright (C) 2012 Tony Prisk <linux@prisktech.co.nz> - * - * 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. - * - */ - -void vt8500_setup_restart(void); -void vt8500_restart(char mode, const char *cmd); diff --git a/arch/arm/mach-vt8500/timer.c b/arch/arm/mach-vt8500/timer.c index 050e1833f2d..3dd21a47881 100644 --- a/arch/arm/mach-vt8500/timer.c +++ b/arch/arm/mach-vt8500/timer.c @@ -1,5 +1,5 @@  /* - *  arch/arm/mach-vt8500/timer_dt.c + *  arch/arm/mach-vt8500/timer.c   *   *  Copyright (C) 2012 Tony Prisk <linux@prisktech.co.nz>   *  Copyright (C) 2010 Alexey Charkov <alchark@gmail.com> diff --git a/arch/arm/mach-vt8500/vt8500.c b/arch/arm/mach-vt8500/vt8500.c index 8d3871f110a..a5bd28692b0 100644 --- a/arch/arm/mach-vt8500/vt8500.c +++ b/arch/arm/mach-vt8500/vt8500.c @@ -31,8 +31,6 @@  #include <linux/of_irq.h>  #include <linux/of_platform.h> -#include <mach/restart.h> -  #include "common.h"  #define LEGACY_GPIO_BASE	0xD8110000 diff --git a/arch/arm/mach-zynq/common.c b/arch/arm/mach-zynq/common.c index ab5cfddc0d7..ba8d14f78d4 100644 --- a/arch/arm/mach-zynq/common.c +++ b/arch/arm/mach-zynq/common.c @@ -31,7 +31,6 @@  #include <asm/hardware/cache-l2x0.h>  #include <mach/zynq_soc.h> -#include <mach/clkdev.h>  #include "common.h"  static struct of_device_id zynq_of_bus_ids[] __initdata = { @@ -45,22 +44,25 @@ static struct of_device_id zynq_of_bus_ids[] __initdata = {   */  static void __init xilinx_init_machine(void)  { -#ifdef CONFIG_CACHE_L2X0  	/*  	 * 64KB way size, 8-way associativity, parity disabled  	 */ -	l2x0_init(PL310_L2CC_BASE, 0x02060000, 0xF0F0FFFF); -#endif +	l2x0_of_init(0x02060000, 0xF0F0FFFF);  	of_platform_bus_probe(NULL, zynq_of_bus_ids, NULL);  } +static struct of_device_id irq_match[] __initdata = { +	{ .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, +	{ } +}; +  /**   * xilinx_irq_init() - Interrupt controller initialization for the GIC.   */  static void __init xilinx_irq_init(void)  { -	gic_init(0, 29, SCU_GIC_DIST_BASE, SCU_GIC_CPU_BASE); +	of_irq_init(irq_match);  }  /* The minimum devices needed to be mapped before the VM system is up and @@ -71,17 +73,12 @@ static struct map_desc io_desc[] __initdata = {  	{  		.virtual	= TTC0_VIRT,  		.pfn		= __phys_to_pfn(TTC0_PHYS), -		.length		= SZ_4K, +		.length		= TTC0_SIZE,  		.type		= MT_DEVICE,  	}, {  		.virtual	= SCU_PERIPH_VIRT,  		.pfn		= __phys_to_pfn(SCU_PERIPH_PHYS), -		.length		= SZ_8K, -		.type		= MT_DEVICE, -	}, { -		.virtual	= PL310_L2CC_VIRT, -		.pfn		= __phys_to_pfn(PL310_L2CC_PHYS), -		.length		= SZ_4K, +		.length		= SCU_PERIPH_SIZE,  		.type		= MT_DEVICE,  	}, @@ -89,7 +86,7 @@ static struct map_desc io_desc[] __initdata = {  	{  		.virtual	= UART0_VIRT,  		.pfn		= __phys_to_pfn(UART0_PHYS), -		.length		= SZ_4K, +		.length		= UART0_SIZE,  		.type		= MT_DEVICE,  	},  #endif diff --git a/arch/arm/mach-zynq/include/mach/clkdev.h b/arch/arm/mach-zynq/include/mach/clkdev.h deleted file mode 100644 index c6e73d81a45..00000000000 --- a/arch/arm/mach-zynq/include/mach/clkdev.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * arch/arm/mach-zynq/include/mach/clkdev.h - * - *  Copyright (C) 2011 Xilinx, Inc. - * - * 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_CLKDEV_H__ -#define __MACH_CLKDEV_H__ - -#include <plat/clock.h> - -struct clk { -	unsigned long		rate; -	const struct clk_ops	*ops; -	const struct icst_params *params; -	void __iomem		*vcoreg; -}; - -#define __clk_get(clk) ({ 1; }) -#define __clk_put(clk) do { } while (0) - -#endif diff --git a/arch/arm/mach-zynq/include/mach/zynq_soc.h b/arch/arm/mach-zynq/include/mach/zynq_soc.h index d0d3f8fb06d..1b8bf0ecbcb 100644 --- a/arch/arm/mach-zynq/include/mach/zynq_soc.h +++ b/arch/arm/mach-zynq/include/mach/zynq_soc.h @@ -15,33 +15,32 @@  #ifndef __MACH_XILINX_SOC_H__  #define __MACH_XILINX_SOC_H__ +#include <asm/pgtable.h> +  #define PERIPHERAL_CLOCK_RATE		2500000 -/* For now, all mappings are flat (physical = virtual) +/* Static peripheral mappings are mapped at the top of the vmalloc region.  The + * early uart mapping causes intermediate problems/failure at certain + * addresses, including the very top of the vmalloc region.  Map it at an + * address that is known to work.   */ -#define UART0_PHYS			0xE0000000 -#define UART0_VIRT			UART0_PHYS - -#define TTC0_PHYS			0xF8001000 -#define TTC0_VIRT			TTC0_PHYS +#define UART0_PHYS		0xE0000000 +#define UART0_SIZE		SZ_4K +#define UART0_VIRT		0xF0001000 -#define PL310_L2CC_PHYS			0xF8F02000 -#define PL310_L2CC_VIRT			PL310_L2CC_PHYS +#define TTC0_PHYS		0xF8001000 +#define TTC0_SIZE		SZ_4K +#define TTC0_VIRT		(VMALLOC_END - TTC0_SIZE) -#define SCU_PERIPH_PHYS			0xF8F00000 -#define SCU_PERIPH_VIRT			SCU_PERIPH_PHYS +#define SCU_PERIPH_PHYS		0xF8F00000 +#define SCU_PERIPH_SIZE		SZ_8K +#define SCU_PERIPH_VIRT		(TTC0_VIRT - SCU_PERIPH_SIZE)  /* The following are intended for the devices that are mapped early */  #define TTC0_BASE			IOMEM(TTC0_VIRT)  #define SCU_PERIPH_BASE			IOMEM(SCU_PERIPH_VIRT) -#define SCU_GIC_CPU_BASE		(SCU_PERIPH_BASE + 0x100) -#define SCU_GIC_DIST_BASE		(SCU_PERIPH_BASE + 0x1000) -#define PL310_L2CC_BASE			IOMEM(PL310_L2CC_VIRT) -/* - * Mandatory for CONFIG_LL_DEBUG, UART is mapped virtual = physical - */  #define LL_UART_PADDR	UART0_PHYS  #define LL_UART_VADDR	UART0_VIRT diff --git a/arch/arm/plat-mxc/Kconfig b/arch/arm/plat-mxc/Kconfig deleted file mode 100644 index 88e1e2e7a20..00000000000 --- a/arch/arm/plat-mxc/Kconfig +++ /dev/null @@ -1,89 +0,0 @@ -if ARCH_MXC - -source "arch/arm/plat-mxc/devices/Kconfig" - -menu "Freescale MXC Implementations" - -choice -	prompt "Freescale CPU family:" -	default ARCH_IMX_V6_V7 - -config ARCH_IMX_V4_V5 -	bool "i.MX1, i.MX21, i.MX25, i.MX27" -	select ARM_PATCH_PHYS_VIRT -	select AUTO_ZRELADDR if !ZBOOT_ROM -	help -	  This enables support for systems based on the Freescale i.MX ARMv4 -	  and ARMv5 SoCs - -config ARCH_IMX_V6_V7 -	bool "i.MX3, i.MX5, i.MX6" -	select ARM_PATCH_PHYS_VIRT -	select AUTO_ZRELADDR if !ZBOOT_ROM -	select MIGHT_HAVE_CACHE_L2X0 -	help -	  This enables support for systems based on the Freescale i.MX3, i.MX5 -	  and i.MX6 family. - -endchoice - -source "arch/arm/mach-imx/Kconfig" - -endmenu - -config MXC_IRQ_PRIOR -	bool "Use IRQ priority" -	help -	  Select this if you want to use prioritized IRQ handling. -	  This feature prevents higher priority ISR to be interrupted -	  by lower priority IRQ even IRQF_DISABLED flag is not set. -	  This may be useful in embedded applications, where are strong -	  requirements for timing. -	  Say N here, unless you have a specialized requirement. - -config MXC_TZIC -	bool - -config MXC_AVIC -	bool - -config MXC_DEBUG_BOARD -	bool "Enable MXC debug board(for 3-stack)" -	help -	  The debug board is an integral part of the MXC 3-stack(PDK) -	  platforms, it can be attached or removed from the peripheral -	  board. On debug board, several debug devices(ethernet, UART, -	  buttons, LEDs and JTAG) are implemented. Between the MCU and -	  these devices, a CPLD is added as a bridge which performs -	  data/address de-multiplexing and decode, signal level shift, -	  interrupt control and various board functions. - -config HAVE_EPIT -	bool - -config MXC_USE_EPIT -	bool "Use EPIT instead of GPT" -	depends on HAVE_EPIT -	help -	  Use EPIT as the system timer on systems that have it. Normally you -	  don't have a reason to do so as the EPIT has the same features and -	  uses the same clocks as the GPT. Anyway, on some systems the GPT -	  may be in use for other purposes. - -config MXC_ULPI -	bool - -config ARCH_HAS_RNGA -	bool - -config IMX_HAVE_IOMUX_V1 -	bool - -config ARCH_MXC_IOMUX_V3 -	bool - -config IRAM_ALLOC -	bool -	select GENERIC_ALLOCATOR - -endif diff --git a/arch/arm/plat-mxc/Makefile b/arch/arm/plat-mxc/Makefile deleted file mode 100644 index 149237e2485..00000000000 --- a/arch/arm/plat-mxc/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -# -# Makefile for the linux kernel. -# - -# Common support -obj-y := time.o devices.o cpu.o system.o irq-common.o - -obj-$(CONFIG_MXC_TZIC) += tzic.o -obj-$(CONFIG_MXC_AVIC) += avic.o - -obj-$(CONFIG_IMX_HAVE_IOMUX_V1) += iomux-v1.o -obj-$(CONFIG_ARCH_MXC_IOMUX_V3) += iomux-v3.o -obj-$(CONFIG_IRAM_ALLOC) += iram_alloc.o -obj-$(CONFIG_MXC_ULPI) += ulpi.o -obj-$(CONFIG_MXC_USE_EPIT) += epit.o -obj-$(CONFIG_MXC_DEBUG_BOARD) += 3ds_debugboard.o -obj-$(CONFIG_CPU_FREQ_IMX)    += cpufreq.o -obj-$(CONFIG_CPU_IDLE) += cpuidle.o -ifdef CONFIG_SND_IMX_SOC -obj-y += ssi-fiq.o -obj-y += ssi-fiq-ksym.o -endif - -obj-y += devices/ diff --git a/arch/arm/plat-mxc/include/mach/irqs.h b/arch/arm/plat-mxc/include/mach/irqs.h deleted file mode 100644 index d73f5e8ea9c..00000000000 --- a/arch/arm/plat-mxc/include/mach/irqs.h +++ /dev/null @@ -1,21 +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 __ASM_ARCH_MXC_IRQS_H__ -#define __ASM_ARCH_MXC_IRQS_H__ - -extern int imx_irq_set_priority(unsigned char irq, unsigned char prio); - -/* all normal IRQs can be FIQs */ -#define FIQ_START	0 -/* switch between IRQ and FIQ */ -extern int mxc_set_irq_fiq(unsigned int irq, unsigned int type); - -#endif /* __ASM_ARCH_MXC_IRQS_H__ */ diff --git a/arch/arm/plat-mxc/include/mach/timex.h b/arch/arm/plat-mxc/include/mach/timex.h deleted file mode 100644 index 10343d1f87e..00000000000 --- a/arch/arm/plat-mxc/include/mach/timex.h +++ /dev/null @@ -1,22 +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 __ASM_ARCH_MXC_TIMEX_H__ -#define __ASM_ARCH_MXC_TIMEX_H__ - -/* Bogus value */ -#define CLOCK_TICK_RATE	12345678 - -#endif				/* __ASM_ARCH_MXC_TIMEX_H__ */ diff --git a/arch/arm/plat-mxc/include/mach/uncompress.h b/arch/arm/plat-mxc/include/mach/uncompress.h deleted file mode 100644 index 477971b0093..00000000000 --- a/arch/arm/plat-mxc/include/mach/uncompress.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - *  arch/arm/plat-mxc/include/mach/uncompress.h - * - *  Copyright (C) 1999 ARM Limited - *  Copyright (C) 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. - */ -#ifndef __ASM_ARCH_MXC_UNCOMPRESS_H__ -#define __ASM_ARCH_MXC_UNCOMPRESS_H__ - -#define __MXC_BOOT_UNCOMPRESS - -#include <asm/mach-types.h> - -unsigned long uart_base; - -#define UART(x) (*(volatile unsigned long *)(uart_base + (x))) - -#define USR2 0x98 -#define USR2_TXFE (1<<14) -#define TXR  0x40 -#define UCR1 0x80 -#define UCR1_UARTEN 1 - -/* - * The following code assumes the serial port has already been - * initialized by the bootloader.  We search for the first enabled - * port in the most probable order.  If you didn't setup a port in - * your bootloader then nothing will appear (which might be desired). - * - * This does not append a newline - */ - -static void putc(int ch) -{ -	if (!uart_base) -		return; -	if (!(UART(UCR1) & UCR1_UARTEN)) -		return; - -	while (!(UART(USR2) & USR2_TXFE)) -		barrier(); - -	UART(TXR) = ch; -} - -static inline void flush(void) -{ -} - -#define MX1_UART1_BASE_ADDR	0x00206000 -#define MX25_UART1_BASE_ADDR	0x43f90000 -#define MX2X_UART1_BASE_ADDR	0x1000a000 -#define MX3X_UART1_BASE_ADDR	0x43F90000 -#define MX3X_UART2_BASE_ADDR	0x43F94000 -#define MX3X_UART5_BASE_ADDR	0x43FB4000 -#define MX51_UART1_BASE_ADDR	0x73fbc000 -#define MX50_UART1_BASE_ADDR	0x53fbc000 -#define MX53_UART1_BASE_ADDR	0x53fbc000 - -static __inline__ void __arch_decomp_setup(unsigned long arch_id) -{ -	switch (arch_id) { -	case MACH_TYPE_MX1ADS: -	case MACH_TYPE_SCB9328: -		uart_base = MX1_UART1_BASE_ADDR; -		break; -	case MACH_TYPE_MX25_3DS: -		uart_base = MX25_UART1_BASE_ADDR; -		break; -	case MACH_TYPE_IMX27LITE: -	case MACH_TYPE_MX27_3DS: -	case MACH_TYPE_MX27ADS: -	case MACH_TYPE_PCM038: -	case MACH_TYPE_MX21ADS: -	case MACH_TYPE_PCA100: -	case MACH_TYPE_MXT_TD60: -	case MACH_TYPE_IMX27IPCAM: -		uart_base = MX2X_UART1_BASE_ADDR; -		break; -	case MACH_TYPE_MX31LITE: -	case MACH_TYPE_ARMADILLO5X0: -	case MACH_TYPE_MX31MOBOARD: -	case MACH_TYPE_QONG: -	case MACH_TYPE_MX31_3DS: -	case MACH_TYPE_PCM037: -	case MACH_TYPE_MX31ADS: -	case MACH_TYPE_MX35_3DS: -	case MACH_TYPE_PCM043: -	case MACH_TYPE_LILLY1131: -	case MACH_TYPE_VPR200: -	case MACH_TYPE_EUKREA_CPUIMX35SD: -		uart_base = MX3X_UART1_BASE_ADDR; -		break; -	case MACH_TYPE_MAGX_ZN5: -		uart_base = MX3X_UART2_BASE_ADDR; -		break; -	case MACH_TYPE_BUG: -		uart_base = MX3X_UART5_BASE_ADDR; -		break; -	case MACH_TYPE_MX51_BABBAGE: -	case MACH_TYPE_EUKREA_CPUIMX51SD: -	case MACH_TYPE_MX51_3DS: -		uart_base = MX51_UART1_BASE_ADDR; -		break; -	case MACH_TYPE_MX50_RDP: -		uart_base = MX50_UART1_BASE_ADDR; -		break; -	case MACH_TYPE_MX53_EVK: -	case MACH_TYPE_MX53_LOCO: -	case MACH_TYPE_MX53_SMD: -	case MACH_TYPE_MX53_ARD: -		uart_base = MX53_UART1_BASE_ADDR; -		break; -	default: -		break; -	} -} - -#define arch_decomp_setup()	__arch_decomp_setup(arch_id) -#define arch_decomp_wdog() - -#endif				/* __ASM_ARCH_MXC_UNCOMPRESS_H__ */ diff --git a/arch/arm/plat-omap/Kconfig b/arch/arm/plat-omap/Kconfig index 82fcb206b5b..665870dce3c 100644 --- a/arch/arm/plat-omap/Kconfig +++ b/arch/arm/plat-omap/Kconfig @@ -154,6 +154,12 @@ config OMAP_32K_TIMER  	  intra-tick resolution than OMAP_MPU_TIMER. The 32KHz timer is  	  currently only available for OMAP16XX, 24XX, 34XX and OMAP4/5. +	  On OMAP2PLUS this value is only used for CONFIG_HZ and +	  CLOCK_TICK_RATE compile time calculation. +	  The actual timer selection is done in the board file +	  through the (DT_)MACHINE_START structure. + +  config OMAP3_L2_AUX_SECURE_SAVE_RESTORE  	bool "OMAP3 HS/EMU save and restore for L2 AUX control register"  	depends on ARCH_OMAP3 && PM diff --git a/arch/arm/plat-omap/debug-leds.c b/arch/arm/plat-omap/debug-leds.c index c43ea21f33b..aa7ebc6bcd6 100644 --- a/arch/arm/plat-omap/debug-leds.c +++ b/arch/arm/plat-omap/debug-leds.c @@ -111,7 +111,7 @@ static int fpga_probe(struct platform_device *pdev)  	if (!iomem)  		return -ENODEV; -	fpga = ioremap(iomem->start, H2P2_DBG_FPGA_SIZE); +	fpga = ioremap(iomem->start, resource_size(iomem));  	__raw_writew(0xff, &fpga->leds);  	for (i = 0; i < ARRAY_SIZE(dbg_leds); i++) { diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c index 82231a75abd..89585c29355 100644 --- a/arch/arm/plat-omap/dmtimer.c +++ b/arch/arm/plat-omap/dmtimer.c @@ -35,11 +35,16 @@   * 675 Mass Ave, Cambridge, MA 02139, USA.   */ +#include <linux/clk.h>  #include <linux/module.h>  #include <linux/io.h>  #include <linux/device.h>  #include <linux/err.h>  #include <linux/pm_runtime.h> +#include <linux/of.h> +#include <linux/of_device.h> +#include <linux/platform_device.h> +#include <linux/platform_data/dmtimer-omap.h>  #include <plat/dmtimer.h> @@ -81,10 +86,6 @@ static void omap_dm_timer_write_reg(struct omap_dm_timer *timer, u32 reg,  static void omap_timer_restore_context(struct omap_dm_timer *timer)  { -	if (timer->revision == 1) -		__raw_writel(timer->context.tistat, timer->sys_stat); - -	__raw_writel(timer->context.tisr, timer->irq_stat);  	omap_dm_timer_write_reg(timer, OMAP_TIMER_WAKEUP_EN_REG,  				timer->context.twer);  	omap_dm_timer_write_reg(timer, OMAP_TIMER_COUNTER_REG, @@ -100,39 +101,38 @@ static void omap_timer_restore_context(struct omap_dm_timer *timer)  				timer->context.tclr);  } -static void omap_dm_timer_wait_for_reset(struct omap_dm_timer *timer) +static int omap_dm_timer_reset(struct omap_dm_timer *timer)  { -	int c; +	u32 l, timeout = 100000; -	if (!timer->sys_stat) -		return; +	if (timer->revision != 1) +		return -EINVAL; -	c = 0; -	while (!(__raw_readl(timer->sys_stat) & 1)) { -		c++; -		if (c > 100000) { -			printk(KERN_ERR "Timer failed to reset\n"); -			return; -		} -	} -} +	omap_dm_timer_write_reg(timer, OMAP_TIMER_IF_CTRL_REG, 0x06); -static void omap_dm_timer_reset(struct omap_dm_timer *timer) -{ -	omap_dm_timer_enable(timer); -	if (timer->pdev->id != 1) { -		omap_dm_timer_write_reg(timer, OMAP_TIMER_IF_CTRL_REG, 0x06); -		omap_dm_timer_wait_for_reset(timer); +	do { +		l = __omap_dm_timer_read(timer, +					 OMAP_TIMER_V1_SYS_STAT_OFFSET, 0); +	} while (!l && timeout--); + +	if (!timeout) { +		dev_err(&timer->pdev->dev, "Timer failed to reset\n"); +		return -ETIMEDOUT;  	} -	__omap_dm_timer_reset(timer, 0, 0); -	omap_dm_timer_disable(timer); -	timer->posted = 1; +	/* Configure timer for smart-idle mode */ +	l = __omap_dm_timer_read(timer, OMAP_TIMER_OCP_CFG_OFFSET, 0); +	l |= 0x2 << 0x3; +	__omap_dm_timer_write(timer, OMAP_TIMER_OCP_CFG_OFFSET, l, 0); + +	timer->posted = 0; + +	return 0;  } -int omap_dm_timer_prepare(struct omap_dm_timer *timer) +static int omap_dm_timer_prepare(struct omap_dm_timer *timer)  { -	int ret; +	int rc;  	/*  	 * FIXME: OMAP1 devices do not use the clock framework for dmtimers so @@ -147,13 +147,20 @@ int omap_dm_timer_prepare(struct omap_dm_timer *timer)  		}  	} -	if (timer->capability & OMAP_TIMER_NEEDS_RESET) -		omap_dm_timer_reset(timer); +	omap_dm_timer_enable(timer); + +	if (timer->capability & OMAP_TIMER_NEEDS_RESET) { +		rc = omap_dm_timer_reset(timer); +		if (rc) { +			omap_dm_timer_disable(timer); +			return rc; +		} +	} -	ret = omap_dm_timer_set_source(timer, OMAP_TIMER_SRC_32_KHZ); +	__omap_dm_timer_enable_posted(timer); +	omap_dm_timer_disable(timer); -	timer->posted = 1; -	return ret; +	return omap_dm_timer_set_source(timer, OMAP_TIMER_SRC_32_KHZ);  }  static inline u32 omap_dm_timer_reserved_systimer(int id) @@ -209,6 +216,13 @@ struct omap_dm_timer *omap_dm_timer_request_specific(int id)  	unsigned long flags;  	int ret = 0; +	/* Requesting timer by ID is not supported when device tree is used */ +	if (of_have_populated_dt()) { +		pr_warn("%s: Please use omap_dm_timer_request_by_cap()\n", +			__func__); +		return NULL; +	} +  	spin_lock_irqsave(&dm_timer_lock, flags);  	list_for_each_entry(t, &omap_timer_list, node) {  		if (t->pdev->id == id && !t->reserved) { @@ -234,6 +248,58 @@ struct omap_dm_timer *omap_dm_timer_request_specific(int id)  }  EXPORT_SYMBOL_GPL(omap_dm_timer_request_specific); +/** + * omap_dm_timer_request_by_cap - Request a timer by capability + * @cap:	Bit mask of capabilities to match + * + * Find a timer based upon capabilities bit mask. Callers of this function + * should use the definitions found in the plat/dmtimer.h file under the + * comment "timer capabilities used in hwmod database". Returns pointer to + * timer handle on success and a NULL pointer on failure. + */ +struct omap_dm_timer *omap_dm_timer_request_by_cap(u32 cap) +{ +	struct omap_dm_timer *timer = NULL, *t; +	unsigned long flags; + +	if (!cap) +		return NULL; + +	spin_lock_irqsave(&dm_timer_lock, flags); +	list_for_each_entry(t, &omap_timer_list, node) { +		if ((!t->reserved) && ((t->capability & cap) == cap)) { +			/* +			 * If timer is not NULL, we have already found one timer +			 * but it was not an exact match because it had more +			 * capabilites that what was required. Therefore, +			 * unreserve the last timer found and see if this one +			 * is a better match. +			 */ +			if (timer) +				timer->reserved = 0; + +			timer = t; +			timer->reserved = 1; + +			/* Exit loop early if we find an exact match */ +			if (t->capability == cap) +				break; +		} +	} +	spin_unlock_irqrestore(&dm_timer_lock, flags); + +	if (timer && omap_dm_timer_prepare(timer)) { +		timer->reserved = 0; +		timer = NULL; +	} + +	if (!timer) +		pr_debug("%s: timer request failed!\n", __func__); + +	return timer; +} +EXPORT_SYMBOL_GPL(omap_dm_timer_request_by_cap); +  int omap_dm_timer_free(struct omap_dm_timer *timer)  {  	if (unlikely(!timer)) @@ -388,7 +454,6 @@ int omap_dm_timer_stop(struct omap_dm_timer *timer)  	 */  	timer->context.tclr =  			omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG); -	timer->context.tisr = __raw_readl(timer->irq_stat);  	omap_dm_timer_disable(timer);  	return 0;  } @@ -398,7 +463,7 @@ int omap_dm_timer_set_source(struct omap_dm_timer *timer, int source)  {  	int ret;  	char *parent_name = NULL; -	struct clk *fclk, *parent; +	struct clk *parent;  	struct dmtimer_platform_data *pdata;  	if (unlikely(!timer)) @@ -414,14 +479,11 @@ int omap_dm_timer_set_source(struct omap_dm_timer *timer, int source)  	 * use the clock framework to set the parent clock. To be removed  	 * once OMAP1 migrated to using clock framework for dmtimers  	 */ -	if (pdata->set_timer_src) +	if (pdata && pdata->set_timer_src)  		return pdata->set_timer_src(timer->pdev, source); -	fclk = clk_get(&timer->pdev->dev, "fck"); -	if (IS_ERR_OR_NULL(fclk)) { -		pr_err("%s: fck not found\n", __func__); +	if (!timer->fclk)  		return -EINVAL; -	}  	switch (source) {  	case OMAP_TIMER_SRC_SYS_CLK: @@ -440,18 +502,15 @@ int omap_dm_timer_set_source(struct omap_dm_timer *timer, int source)  	parent = clk_get(&timer->pdev->dev, parent_name);  	if (IS_ERR_OR_NULL(parent)) {  		pr_err("%s: %s not found\n", __func__, parent_name); -		ret = -EINVAL; -		goto out; +		return -EINVAL;  	} -	ret = clk_set_parent(fclk, parent); +	ret = clk_set_parent(timer->fclk, parent);  	if (IS_ERR_VALUE(ret))  		pr_err("%s: failed to set %s as parent\n", __func__,  			parent_name);  	clk_put(parent); -out: -	clk_put(fclk);  	return ret;  } @@ -534,8 +593,8 @@ int omap_dm_timer_set_match(struct omap_dm_timer *timer, int enable,  		l |= OMAP_TIMER_CTRL_CE;  	else  		l &= ~OMAP_TIMER_CTRL_CE; -	omap_dm_timer_write_reg(timer, OMAP_TIMER_CTRL_REG, l);  	omap_dm_timer_write_reg(timer, OMAP_TIMER_MATCH_REG, match); +	omap_dm_timer_write_reg(timer, OMAP_TIMER_CTRL_REG, l);  	/* Save the context */  	timer->context.tclr = l; @@ -611,6 +670,37 @@ int omap_dm_timer_set_int_enable(struct omap_dm_timer *timer,  }  EXPORT_SYMBOL_GPL(omap_dm_timer_set_int_enable); +/** + * omap_dm_timer_set_int_disable - disable timer interrupts + * @timer:	pointer to timer handle + * @mask:	bit mask of interrupts to be disabled + * + * Disables the specified timer interrupts for a timer. + */ +int omap_dm_timer_set_int_disable(struct omap_dm_timer *timer, u32 mask) +{ +	u32 l = mask; + +	if (unlikely(!timer)) +		return -EINVAL; + +	omap_dm_timer_enable(timer); + +	if (timer->revision == 1) +		l = __raw_readl(timer->irq_ena) & ~mask; + +	__raw_writel(l, timer->irq_dis); +	l = omap_dm_timer_read_reg(timer, OMAP_TIMER_WAKEUP_EN_REG) & ~mask; +	omap_dm_timer_write_reg(timer, OMAP_TIMER_WAKEUP_EN_REG, l); + +	/* Save the context */ +	timer->context.tier &= ~mask; +	timer->context.twer &= ~mask; +	omap_dm_timer_disable(timer); +	return 0; +} +EXPORT_SYMBOL_GPL(omap_dm_timer_set_int_disable); +  unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer)  {  	unsigned int l; @@ -632,8 +722,7 @@ int omap_dm_timer_write_status(struct omap_dm_timer *timer, unsigned int value)  		return -EINVAL;  	__omap_dm_timer_write_status(timer, value); -	/* Save the context */ -	timer->context.tisr = value; +  	return 0;  }  EXPORT_SYMBOL_GPL(omap_dm_timer_write_status); @@ -696,7 +785,7 @@ static int __devinit omap_dm_timer_probe(struct platform_device *pdev)  	struct device *dev = &pdev->dev;  	struct dmtimer_platform_data *pdata = pdev->dev.platform_data; -	if (!pdata) { +	if (!pdata && !dev->of_node) {  		dev_err(dev, "%s: no platform data.\n", __func__);  		return -ENODEV;  	} @@ -725,12 +814,25 @@ static int __devinit omap_dm_timer_probe(struct platform_device *pdev)  		return -ENOMEM;  	} -	timer->id = pdev->id; +	if (dev->of_node) { +		if (of_find_property(dev->of_node, "ti,timer-alwon", NULL)) +			timer->capability |= OMAP_TIMER_ALWON; +		if (of_find_property(dev->of_node, "ti,timer-dsp", NULL)) +			timer->capability |= OMAP_TIMER_HAS_DSP_IRQ; +		if (of_find_property(dev->of_node, "ti,timer-pwm", NULL)) +			timer->capability |= OMAP_TIMER_HAS_PWM; +		if (of_find_property(dev->of_node, "ti,timer-secure", NULL)) +			timer->capability |= OMAP_TIMER_SECURE; +	} else { +		timer->id = pdev->id; +		timer->errata = pdata->timer_errata; +		timer->capability = pdata->timer_capability; +		timer->reserved = omap_dm_timer_reserved_systimer(timer->id); +		timer->get_context_loss_count = pdata->get_context_loss_count; +	} +  	timer->irq = irq->start; -	timer->reserved = omap_dm_timer_reserved_systimer(timer->id);  	timer->pdev = pdev; -	timer->capability = pdata->timer_capability; -	timer->get_context_loss_count = pdata->get_context_loss_count;  	/* Skip pm_runtime_enable for OMAP1 */  	if (!(timer->capability & OMAP_TIMER_NEEDS_RESET)) { @@ -770,7 +872,8 @@ static int __devexit omap_dm_timer_remove(struct platform_device *pdev)  	spin_lock_irqsave(&dm_timer_lock, flags);  	list_for_each_entry(timer, &omap_timer_list, node) -		if (timer->pdev->id == pdev->id) { +		if (!strcmp(dev_name(&timer->pdev->dev), +			    dev_name(&pdev->dev))) {  			list_del(&timer->node);  			ret = 0;  			break; @@ -780,11 +883,18 @@ static int __devexit omap_dm_timer_remove(struct platform_device *pdev)  	return ret;  } +static const struct of_device_id omap_timer_match[] = { +	{ .compatible = "ti,omap2-timer", }, +	{}, +}; +MODULE_DEVICE_TABLE(of, omap_timer_match); +  static struct platform_driver omap_dm_timer_driver = {  	.probe  = omap_dm_timer_probe,  	.remove = __devexit_p(omap_dm_timer_remove),  	.driver = {  		.name   = "omap_timer", +		.of_match_table = of_match_ptr(omap_timer_match),  	},  }; diff --git a/arch/arm/plat-omap/include/plat/dmtimer.h b/arch/arm/plat-omap/include/plat/dmtimer.h index 3f5b9cfd9c0..a3fbc48c332 100644 --- a/arch/arm/plat-omap/include/plat/dmtimer.h +++ b/arch/arm/plat-omap/include/plat/dmtimer.h @@ -32,7 +32,6 @@   * 675 Mass Ave, Cambridge, MA 02139, USA.   */ -#include <linux/clk.h>  #include <linux/delay.h>  #include <linux/io.h>  #include <linux/platform_device.h> @@ -55,6 +54,10 @@  #define OMAP_TIMER_TRIGGER_OVERFLOW		0x01  #define OMAP_TIMER_TRIGGER_OVERFLOW_AND_COMPARE	0x02 +/* posted mode types */ +#define OMAP_TIMER_NONPOSTED			0x00 +#define OMAP_TIMER_POSTED			0x01 +  /* timer capabilities used in hwmod database */  #define OMAP_TIMER_SECURE				0x80000000  #define OMAP_TIMER_ALWON				0x40000000 @@ -62,16 +65,22 @@  #define OMAP_TIMER_NEEDS_RESET				0x10000000  #define OMAP_TIMER_HAS_DSP_IRQ				0x08000000 +/* + * timer errata flags + * + * Errata i103/i767 impacts all OMAP3/4/5 devices including AM33xx. This + * errata prevents us from using posted mode on these devices, unless the + * timer counter register is never read. For more details please refer to + * the OMAP3/4/5 errata documents. + */ +#define OMAP_TIMER_ERRATA_I103_I767			0x80000000 +  struct omap_timer_capability_dev_attr {  	u32 timer_capability;  }; -struct omap_dm_timer; -  struct timer_regs {  	u32 tidr; -	u32 tistat; -	u32 tisr;  	u32 tier;  	u32 twer;  	u32 tclr; @@ -90,16 +99,35 @@ struct timer_regs {  	u32 towr;  }; -struct dmtimer_platform_data { -	/* set_timer_src - Only used for OMAP1 devices */ -	int (*set_timer_src)(struct platform_device *pdev, int source); -	u32 timer_capability; +struct omap_dm_timer { +	int id; +	int irq; +	struct clk *fclk; + +	void __iomem	*io_base; +	void __iomem	*irq_stat;	/* TISR/IRQSTATUS interrupt status */ +	void __iomem	*irq_ena;	/* irq enable */ +	void __iomem	*irq_dis;	/* irq disable, only on v2 ip */ +	void __iomem	*pend;		/* write pending */ +	void __iomem	*func_base;	/* function register base */ + +	unsigned long rate; +	unsigned reserved:1; +	unsigned posted:1; +	struct timer_regs context;  	int (*get_context_loss_count)(struct device *); +	int ctx_loss_count; +	int revision; +	u32 capability; +	u32 errata; +	struct platform_device *pdev; +	struct list_head node;  };  int omap_dm_timer_reserve_systimer(int id);  struct omap_dm_timer *omap_dm_timer_request(void);  struct omap_dm_timer *omap_dm_timer_request_specific(int timer_id); +struct omap_dm_timer *omap_dm_timer_request_by_cap(u32 cap);  int omap_dm_timer_free(struct omap_dm_timer *timer);  void omap_dm_timer_enable(struct omap_dm_timer *timer);  void omap_dm_timer_disable(struct omap_dm_timer *timer); @@ -121,6 +149,7 @@ int omap_dm_timer_set_pwm(struct omap_dm_timer *timer, int def_on, int toggle, i  int omap_dm_timer_set_prescaler(struct omap_dm_timer *timer, int prescaler);  int omap_dm_timer_set_int_enable(struct omap_dm_timer *timer, unsigned int value); +int omap_dm_timer_set_int_disable(struct omap_dm_timer *timer, u32 mask);  unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer);  int omap_dm_timer_write_status(struct omap_dm_timer *timer, unsigned int value); @@ -246,34 +275,6 @@ int omap_dm_timers_active(void);  #define OMAP_TIMER_TICK_INT_MASK_COUNT_REG				\  		(_OMAP_TIMER_TICK_INT_MASK_COUNT_OFFSET | (WP_TOWR << WPSHIFT)) -struct omap_dm_timer { -	unsigned long phys_base; -	int id; -	int irq; -	struct clk *fclk; - -	void __iomem	*io_base; -	void __iomem	*sys_stat;	/* TISTAT timer status */ -	void __iomem	*irq_stat;	/* TISR/IRQSTATUS interrupt status */ -	void __iomem	*irq_ena;	/* irq enable */ -	void __iomem	*irq_dis;	/* irq disable, only on v2 ip */ -	void __iomem	*pend;		/* write pending */ -	void __iomem	*func_base;	/* function register base */ - -	unsigned long rate; -	unsigned reserved:1; -	unsigned posted:1; -	struct timer_regs context; -	int (*get_context_loss_count)(struct device *); -	int ctx_loss_count; -	int revision; -	u32 capability; -	struct platform_device *pdev; -	struct list_head node; -}; - -int omap_dm_timer_prepare(struct omap_dm_timer *timer); -  static inline u32 __omap_dm_timer_read(struct omap_dm_timer *timer, u32 reg,  						int posted)  { @@ -302,16 +303,13 @@ static inline void __omap_dm_timer_init_regs(struct omap_dm_timer *timer)  	tidr = __raw_readl(timer->io_base);  	if (!(tidr >> 16)) {  		timer->revision = 1; -		timer->sys_stat = timer->io_base + -				OMAP_TIMER_V1_SYS_STAT_OFFSET;  		timer->irq_stat = timer->io_base + OMAP_TIMER_V1_STAT_OFFSET;  		timer->irq_ena = timer->io_base + OMAP_TIMER_V1_INT_EN_OFFSET; -		timer->irq_dis = NULL; +		timer->irq_dis = timer->io_base + OMAP_TIMER_V1_INT_EN_OFFSET;  		timer->pend = timer->io_base + _OMAP_TIMER_WRITE_PEND_OFFSET;  		timer->func_base = timer->io_base;  	} else {  		timer->revision = 2; -		timer->sys_stat = NULL;  		timer->irq_stat = timer->io_base + OMAP_TIMER_V2_IRQSTATUS;  		timer->irq_ena = timer->io_base + OMAP_TIMER_V2_IRQENABLE_SET;  		timer->irq_dis = timer->io_base + OMAP_TIMER_V2_IRQENABLE_CLR; @@ -322,45 +320,44 @@ static inline void __omap_dm_timer_init_regs(struct omap_dm_timer *timer)  	}  } -/* Assumes the source clock has been set by caller */ -static inline void __omap_dm_timer_reset(struct omap_dm_timer *timer, -					int autoidle, int wakeup) +/* + * __omap_dm_timer_enable_posted - enables write posted mode + * @timer:      pointer to timer instance handle + * + * Enables the write posted mode for the timer. When posted mode is enabled + * writes to certain timer registers are immediately acknowledged by the + * internal bus and hence prevents stalling the CPU waiting for the write to + * complete. Enabling this feature can improve performance for writing to the + * timer registers. + */ +static inline void __omap_dm_timer_enable_posted(struct omap_dm_timer *timer)  { -	u32 l; +	if (timer->posted) +		return; -	l = __raw_readl(timer->io_base + OMAP_TIMER_OCP_CFG_OFFSET); -	l |= 0x02 << 3;  /* Set to smart-idle mode */ -	l |= 0x2 << 8;   /* Set clock activity to perserve f-clock on idle */ +	if (timer->errata & OMAP_TIMER_ERRATA_I103_I767) +		return; -	if (autoidle) -		l |= 0x1 << 0; - -	if (wakeup) -		l |= 1 << 2; - -	__raw_writel(l, timer->io_base + OMAP_TIMER_OCP_CFG_OFFSET); - -	/* Match hardware reset default of posted mode */  	__omap_dm_timer_write(timer, OMAP_TIMER_IF_CTRL_REG, -					OMAP_TIMER_CTRL_POSTED, 0); +			      OMAP_TIMER_CTRL_POSTED, 0); +	timer->context.tsicr = OMAP_TIMER_CTRL_POSTED; +	timer->posted = OMAP_TIMER_POSTED;  } -static inline int __omap_dm_timer_set_source(struct clk *timer_fck, -						struct clk *parent) +/** + * __omap_dm_timer_override_errata - override errata flags for a timer + * @timer:      pointer to timer handle + * @errata:	errata flags to be ignored + * + * For a given timer, override a timer errata by clearing the flags + * specified by the errata argument. A specific erratum should only be + * overridden for a timer if the timer is used in such a way the erratum + * has no impact. + */ +static inline void __omap_dm_timer_override_errata(struct omap_dm_timer *timer, +						   u32 errata)  { -	int ret; - -	clk_disable(timer_fck); -	ret = clk_set_parent(timer_fck, parent); -	clk_enable(timer_fck); - -	/* -	 * When the functional clock disappears, too quick writes seem -	 * to cause an abort. XXX Is this still necessary? -	 */ -	__delay(300000); - -	return ret; +	timer->errata &= ~errata;  }  static inline void __omap_dm_timer_stop(struct omap_dm_timer *timer, diff --git a/arch/arm/plat-omap/include/plat/prcm.h b/arch/arm/plat-omap/include/plat/prcm.h deleted file mode 100644 index 267f43bb2a4..00000000000 --- a/arch/arm/plat-omap/include/plat/prcm.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * arch/arm/plat-omap/include/mach/prcm.h - * - * Access definations for use in OMAP24XX clock and power management - * - * Copyright (C) 2005 Texas Instruments, Inc. - * - * 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 - * - * XXX This file is deprecated.  The PRCM is an OMAP2+-only subsystem, - * so this file doesn't belong in plat-omap/include/plat.  Please - * do not add anything new to this file. - */ - -#ifndef __ASM_ARM_ARCH_OMAP_PRCM_H -#define __ASM_ARM_ARCH_OMAP_PRCM_H - -u32 omap_prcm_get_reset_sources(void); -int omap2_cm_wait_idlest(void __iomem *reg, u32 mask, u8 idlest, -			 const char *name); - -#endif - - - diff --git a/arch/arm/plat-pxa/Makefile b/arch/arm/plat-pxa/Makefile index af8e484001e..1fc94194491 100644 --- a/arch/arm/plat-pxa/Makefile +++ b/arch/arm/plat-pxa/Makefile @@ -5,7 +5,6 @@  obj-y	:= dma.o  obj-$(CONFIG_PXA3xx)		+= mfp.o -obj-$(CONFIG_PXA95x)		+= mfp.o  obj-$(CONFIG_ARCH_MMP)		+= mfp.o  obj-$(CONFIG_PXA_SSP)		+= ssp.o diff --git a/arch/arm/plat-pxa/include/plat/mfp.h b/arch/arm/plat-pxa/include/plat/mfp.h index 5c79c29f283..10bc4f3757d 100644 --- a/arch/arm/plat-pxa/include/plat/mfp.h +++ b/arch/arm/plat-pxa/include/plat/mfp.h @@ -423,7 +423,7 @@ typedef unsigned long mfp_cfg_t;  	((MFP_CFG_DEFAULT & ~(MFP_AF_MASK | MFP_DS_MASK | MFP_LPM_STATE_MASK)) |\  	 (MFP_PIN(MFP_PIN_##pin) | MFP_##af | MFP_##drv | MFP_LPM_##lpm)) -#if defined(CONFIG_PXA3xx) || defined(CONFIG_PXA95x) || defined(CONFIG_ARCH_MMP) +#if defined(CONFIG_PXA3xx) || defined(CONFIG_ARCH_MMP)  /*   * each MFP pin will have a MFPR register, since the offset of the   * register varies between processors, the processor specific code @@ -470,6 +470,6 @@ void mfp_write(int mfp, unsigned long mfpr_val);  void mfp_config(unsigned long *mfp_cfgs, int num);  void mfp_config_run(void);  void mfp_config_lpm(void); -#endif /* CONFIG_PXA3xx || CONFIG_PXA95x || CONFIG_ARCH_MMP */ +#endif /* CONFIG_PXA3xx || CONFIG_ARCH_MMP */  #endif /* __ASM_PLAT_MFP_H */ diff --git a/arch/arm/plat-samsung/adc.c b/arch/arm/plat-samsung/adc.c index b1e05ccff3a..37542c2689a 100644 --- a/arch/arm/plat-samsung/adc.c +++ b/arch/arm/plat-samsung/adc.c @@ -344,7 +344,7 @@ static int s3c_adc_probe(struct platform_device *pdev)  	int ret;  	unsigned tmp; -	adc = kzalloc(sizeof(struct adc_device), GFP_KERNEL); +	adc = devm_kzalloc(dev, sizeof(struct adc_device), GFP_KERNEL);  	if (adc == NULL) {  		dev_err(dev, "failed to allocate adc_device\n");  		return -ENOMEM; @@ -355,50 +355,46 @@ static int s3c_adc_probe(struct platform_device *pdev)  	adc->pdev = pdev;  	adc->prescale = S3C2410_ADCCON_PRSCVL(49); -	adc->vdd = regulator_get(dev, "vdd"); +	adc->vdd = devm_regulator_get(dev, "vdd");  	if (IS_ERR(adc->vdd)) {  		dev_err(dev, "operating without regulator \"vdd\" .\n"); -		ret = PTR_ERR(adc->vdd); -		goto err_alloc; +		return PTR_ERR(adc->vdd);  	}  	adc->irq = platform_get_irq(pdev, 1);  	if (adc->irq <= 0) {  		dev_err(dev, "failed to get adc irq\n"); -		ret = -ENOENT; -		goto err_reg; +		return -ENOENT;  	} -	ret = request_irq(adc->irq, s3c_adc_irq, 0, dev_name(dev), adc); +	ret = devm_request_irq(dev, adc->irq, s3c_adc_irq, 0, dev_name(dev), +				adc);  	if (ret < 0) {  		dev_err(dev, "failed to attach adc irq\n"); -		goto err_reg; +		return ret;  	} -	adc->clk = clk_get(dev, "adc"); +	adc->clk = devm_clk_get(dev, "adc");  	if (IS_ERR(adc->clk)) {  		dev_err(dev, "failed to get adc clock\n"); -		ret = PTR_ERR(adc->clk); -		goto err_irq; +		return PTR_ERR(adc->clk);  	}  	regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);  	if (!regs) {  		dev_err(dev, "failed to find registers\n"); -		ret = -ENXIO; -		goto err_clk; +		return -ENXIO;  	} -	adc->regs = ioremap(regs->start, resource_size(regs)); +	adc->regs = devm_request_and_ioremap(dev, regs);  	if (!adc->regs) {  		dev_err(dev, "failed to map registers\n"); -		ret = -ENXIO; -		goto err_clk; +		return -ENXIO;  	}  	ret = regulator_enable(adc->vdd);  	if (ret) -		goto err_ioremap; +		return ret;  	clk_enable(adc->clk); @@ -418,32 +414,14 @@ static int s3c_adc_probe(struct platform_device *pdev)  	adc_dev = adc;  	return 0; - - err_ioremap: -	iounmap(adc->regs); - err_clk: -	clk_put(adc->clk); - - err_irq: -	free_irq(adc->irq, adc); - err_reg: -	regulator_put(adc->vdd); - err_alloc: -	kfree(adc); -	return ret;  }  static int __devexit s3c_adc_remove(struct platform_device *pdev)  {  	struct adc_device *adc = platform_get_drvdata(pdev); -	iounmap(adc->regs); -	free_irq(adc->irq, adc);  	clk_disable(adc->clk);  	regulator_disable(adc->vdd); -	regulator_put(adc->vdd); -	clk_put(adc->clk); -	kfree(adc);  	return 0;  } diff --git a/arch/arm/plat-samsung/devs.c b/arch/arm/plat-samsung/devs.c index 03f654d55ef..a17d7b3e372 100644 --- a/arch/arm/plat-samsung/devs.c +++ b/arch/arm/plat-samsung/devs.c @@ -486,11 +486,7 @@ static struct resource s3c_i2c0_resource[] = {  struct platform_device s3c_device_i2c0 = {  	.name		= "s3c2410-i2c", -#ifdef CONFIG_S3C_DEV_I2C1  	.id		= 0, -#else -	.id		= -1, -#endif  	.num_resources	= ARRAY_SIZE(s3c_i2c0_resource),  	.resource	= s3c_i2c0_resource,  }; diff --git a/arch/arm/plat-samsung/include/plat/devs.h b/arch/arm/plat-samsung/include/plat/devs.h index 5da4b4f38f4..a9b8096b825 100644 --- a/arch/arm/plat-samsung/include/plat/devs.h +++ b/arch/arm/plat-samsung/include/plat/devs.h @@ -123,7 +123,6 @@ extern struct platform_device s5pv210_device_spdif;  extern struct platform_device exynos4_device_ac97;  extern struct platform_device exynos4_device_ahci; -extern struct platform_device exynos4_device_dwmci;  extern struct platform_device exynos4_device_i2s0;  extern struct platform_device exynos4_device_i2s1;  extern struct platform_device exynos4_device_i2s2; diff --git a/drivers/amba/tegra-ahb.c b/drivers/amba/tegra-ahb.c index 0b6f0b28a48..bd5de08ad6f 100644 --- a/drivers/amba/tegra-ahb.c +++ b/drivers/amba/tegra-ahb.c @@ -24,6 +24,7 @@  #include <linux/module.h>  #include <linux/platform_device.h>  #include <linux/io.h> +#include <linux/tegra-ahb.h>  #define DRV_NAME "tegra-ahb" diff --git a/drivers/clk/clk-bcm2835.c b/drivers/clk/clk-bcm2835.c index b61ee2c5af8..e69991aab43 100644 --- a/drivers/clk/clk-bcm2835.c +++ b/drivers/clk/clk-bcm2835.c @@ -55,5 +55,5 @@ void __init bcm2835_init_clocks(void)  		pr_err("uart1_pclk not registered\n");  	ret = clk_register_clkdev(clk, NULL, "20215000.uart");  	if (ret) -		pr_err("uart0_pclk alias not registered\n"); +		pr_err("uart1_pclk alias not registered\n");  } diff --git a/drivers/crypto/tegra-aes.c b/drivers/crypto/tegra-aes.c index 37185e6630c..e69f3bc473b 100644 --- a/drivers/crypto/tegra-aes.c +++ b/drivers/crypto/tegra-aes.c @@ -41,8 +41,6 @@  #include <linux/completion.h>  #include <linux/workqueue.h> -#include <mach/clk.h> -  #include <crypto/scatterwalk.h>  #include <crypto/aes.h>  #include <crypto/internal/rng.h> diff --git a/drivers/dma/imx-dma.c b/drivers/dma/imx-dma.c index 7d9554cc497..dbf0e6f8de8 100644 --- a/drivers/dma/imx-dma.c +++ b/drivers/dma/imx-dma.c @@ -29,7 +29,6 @@  #include <asm/irq.h>  #include <linux/platform_data/dma-imx.h> -#include <mach/hardware.h>  #include "dmaengine.h"  #define IMXDMA_MAX_CHAN_DESCRIPTORS	16 @@ -167,6 +166,12 @@ struct imxdma_channel {  	int				slot_2d;  }; +enum imx_dma_type { +	IMX1_DMA, +	IMX21_DMA, +	IMX27_DMA, +}; +  struct imxdma_engine {  	struct device			*dev;  	struct device_dma_parameters	dma_parms; @@ -177,7 +182,39 @@ struct imxdma_engine {  	spinlock_t			lock;  	struct imx_dma_2d_config	slots_2d[IMX_DMA_2D_SLOTS];  	struct imxdma_channel		channel[IMX_DMA_CHANNELS]; +	enum imx_dma_type		devtype; +}; + +static struct platform_device_id imx_dma_devtype[] = { +	{ +		.name = "imx1-dma", +		.driver_data = IMX1_DMA, +	}, { +		.name = "imx21-dma", +		.driver_data = IMX21_DMA, +	}, { +		.name = "imx27-dma", +		.driver_data = IMX27_DMA, +	}, { +		/* sentinel */ +	}  }; +MODULE_DEVICE_TABLE(platform, imx_dma_devtype); + +static inline int is_imx1_dma(struct imxdma_engine *imxdma) +{ +	return imxdma->devtype == IMX1_DMA; +} + +static inline int is_imx21_dma(struct imxdma_engine *imxdma) +{ +	return imxdma->devtype == IMX21_DMA; +} + +static inline int is_imx27_dma(struct imxdma_engine *imxdma) +{ +	return imxdma->devtype == IMX27_DMA; +}  static struct imxdma_channel *to_imxdma_chan(struct dma_chan *chan)  { @@ -212,7 +249,9 @@ static unsigned imx_dmav1_readl(struct imxdma_engine *imxdma, unsigned offset)  static int imxdma_hw_chain(struct imxdma_channel *imxdmac)  { -	if (cpu_is_mx27()) +	struct imxdma_engine *imxdma = imxdmac->imxdma; + +	if (is_imx27_dma(imxdma))  		return imxdmac->hw_chaining;  	else  		return 0; @@ -267,7 +306,7 @@ static void imxdma_enable_hw(struct imxdma_desc *d)  	imx_dmav1_writel(imxdma, imx_dmav1_readl(imxdma, DMA_CCR(channel)) |  			 CCR_CEN | CCR_ACRPT, DMA_CCR(channel)); -	if ((cpu_is_mx21() || cpu_is_mx27()) && +	if (!is_imx1_dma(imxdma) &&  			d->sg && imxdma_hw_chain(imxdmac)) {  		d->sg = sg_next(d->sg);  		if (d->sg) { @@ -436,7 +475,7 @@ static irqreturn_t dma_irq_handler(int irq, void *dev_id)  	struct imxdma_engine *imxdma = dev_id;  	int i, disr; -	if (cpu_is_mx21() || cpu_is_mx27()) +	if (!is_imx1_dma(imxdma))  		imxdma_err_handler(irq, dev_id);  	disr = imx_dmav1_readl(imxdma, DMA_DISR); @@ -961,35 +1000,32 @@ static void imxdma_issue_pending(struct dma_chan *chan)  static int __init imxdma_probe(struct platform_device *pdev)  	{  	struct imxdma_engine *imxdma; +	struct resource *res;  	int ret, i; +	int irq, irq_err; - -	imxdma = kzalloc(sizeof(*imxdma), GFP_KERNEL); +	imxdma = devm_kzalloc(&pdev->dev, sizeof(*imxdma), GFP_KERNEL);  	if (!imxdma)  		return -ENOMEM; -	if (cpu_is_mx1()) { -		imxdma->base = MX1_IO_ADDRESS(MX1_DMA_BASE_ADDR); -	} else if (cpu_is_mx21()) { -		imxdma->base = MX21_IO_ADDRESS(MX21_DMA_BASE_ADDR); -	} else if (cpu_is_mx27()) { -		imxdma->base = MX27_IO_ADDRESS(MX27_DMA_BASE_ADDR); -	} else { -		kfree(imxdma); -		return 0; -	} +	imxdma->devtype = pdev->id_entry->driver_data; + +	res = platform_get_resource(pdev, IORESOURCE_MEM, 0); +	imxdma->base = devm_request_and_ioremap(&pdev->dev, res); +	if (!imxdma->base) +		return -EADDRNOTAVAIL; + +	irq = platform_get_irq(pdev, 0); +	if (irq < 0) +		return irq;  	imxdma->dma_ipg = devm_clk_get(&pdev->dev, "ipg"); -	if (IS_ERR(imxdma->dma_ipg)) { -		ret = PTR_ERR(imxdma->dma_ipg); -		goto err_clk; -	} +	if (IS_ERR(imxdma->dma_ipg)) +		return PTR_ERR(imxdma->dma_ipg);  	imxdma->dma_ahb = devm_clk_get(&pdev->dev, "ahb"); -	if (IS_ERR(imxdma->dma_ahb)) { -		ret = PTR_ERR(imxdma->dma_ahb); -		goto err_clk; -	} +	if (IS_ERR(imxdma->dma_ahb)) +		return PTR_ERR(imxdma->dma_ahb);  	clk_prepare_enable(imxdma->dma_ipg);  	clk_prepare_enable(imxdma->dma_ahb); @@ -997,18 +1033,25 @@ static int __init imxdma_probe(struct platform_device *pdev)  	/* reset DMA module */  	imx_dmav1_writel(imxdma, DCR_DRST, DMA_DCR); -	if (cpu_is_mx1()) { -		ret = request_irq(MX1_DMA_INT, dma_irq_handler, 0, "DMA", imxdma); +	if (is_imx1_dma(imxdma)) { +		ret = devm_request_irq(&pdev->dev, irq, +				       dma_irq_handler, 0, "DMA", imxdma);  		if (ret) {  			dev_warn(imxdma->dev, "Can't register IRQ for DMA\n"); -			goto err_enable; +			goto err; +		} + +		irq_err = platform_get_irq(pdev, 1); +		if (irq_err < 0) { +			ret = irq_err; +			goto err;  		} -		ret = request_irq(MX1_DMA_ERR, imxdma_err_handler, 0, "DMA", imxdma); +		ret = devm_request_irq(&pdev->dev, irq_err, +				       imxdma_err_handler, 0, "DMA", imxdma);  		if (ret) {  			dev_warn(imxdma->dev, "Can't register ERRIRQ for DMA\n"); -			free_irq(MX1_DMA_INT, NULL); -			goto err_enable; +			goto err;  		}  	} @@ -1038,14 +1081,14 @@ static int __init imxdma_probe(struct platform_device *pdev)  	for (i = 0; i < IMX_DMA_CHANNELS; i++) {  		struct imxdma_channel *imxdmac = &imxdma->channel[i]; -		if (cpu_is_mx21() || cpu_is_mx27()) { -			ret = request_irq(MX2x_INT_DMACH0 + i, +		if (!is_imx1_dma(imxdma)) { +			ret = devm_request_irq(&pdev->dev, irq + i,  					dma_irq_handler, 0, "DMA", imxdma);  			if (ret) {  				dev_warn(imxdma->dev, "Can't register IRQ %d "  					 "for DMA channel %d\n", -					 MX2x_INT_DMACH0 + i, i); -				goto err_init; +					 irq + i, i); +				goto err;  			}  			init_timer(&imxdmac->watchdog);  			imxdmac->watchdog.function = &imxdma_watchdog; @@ -1091,46 +1134,25 @@ static int __init imxdma_probe(struct platform_device *pdev)  	ret = dma_async_device_register(&imxdma->dma_device);  	if (ret) {  		dev_err(&pdev->dev, "unable to register\n"); -		goto err_init; +		goto err;  	}  	return 0; -err_init: - -	if (cpu_is_mx21() || cpu_is_mx27()) { -		while (--i >= 0) -			free_irq(MX2x_INT_DMACH0 + i, NULL); -	} else if cpu_is_mx1() { -		free_irq(MX1_DMA_INT, NULL); -		free_irq(MX1_DMA_ERR, NULL); -	} -err_enable: +err:  	clk_disable_unprepare(imxdma->dma_ipg);  	clk_disable_unprepare(imxdma->dma_ahb); -err_clk: -	kfree(imxdma);  	return ret;  }  static int __exit imxdma_remove(struct platform_device *pdev)  {  	struct imxdma_engine *imxdma = platform_get_drvdata(pdev); -	int i;          dma_async_device_unregister(&imxdma->dma_device); -	if (cpu_is_mx21() || cpu_is_mx27()) { -		for (i = 0; i < IMX_DMA_CHANNELS; i++) -			free_irq(MX2x_INT_DMACH0 + i, NULL); -	} else if cpu_is_mx1() { -		free_irq(MX1_DMA_INT, NULL); -		free_irq(MX1_DMA_ERR, NULL); -	} -  	clk_disable_unprepare(imxdma->dma_ipg);  	clk_disable_unprepare(imxdma->dma_ahb); -	kfree(imxdma);          return 0;  } @@ -1139,6 +1161,7 @@ static struct platform_driver imxdma_driver = {  	.driver		= {  		.name	= "imx-dma",  	}, +	.id_table	= imx_dma_devtype,  	.remove		= __exit_p(imxdma_remove),  }; diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index c099ca0846f..f082aa3a918 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -40,7 +40,6 @@  #include <asm/irq.h>  #include <linux/platform_data/dma-imx-sdma.h>  #include <linux/platform_data/dma-imx.h> -#include <mach/hardware.h>  #include "dmaengine.h" diff --git a/drivers/dma/ipu/ipu_idmac.c b/drivers/dma/ipu/ipu_idmac.c index c7573e50aa1..65855373cee 100644 --- a/drivers/dma/ipu/ipu_idmac.c +++ b/drivers/dma/ipu/ipu_idmac.c @@ -22,8 +22,7 @@  #include <linux/interrupt.h>  #include <linux/io.h>  #include <linux/module.h> - -#include <mach/ipu.h> +#include <linux/dma/ipu-dma.h>  #include "../dmaengine.h"  #include "ipu_intern.h" diff --git a/drivers/dma/ipu/ipu_irq.c b/drivers/dma/ipu/ipu_irq.c index fa95bcc3de1..a5ee37d5320 100644 --- a/drivers/dma/ipu/ipu_irq.c +++ b/drivers/dma/ipu/ipu_irq.c @@ -15,8 +15,7 @@  #include <linux/irq.h>  #include <linux/io.h>  #include <linux/module.h> - -#include <mach/ipu.h> +#include <linux/dma/ipu-dma.h>  #include "ipu_intern.h" diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c index 3e35243c136..8325f580c0f 100644 --- a/drivers/gpio/gpio-pxa.c +++ b/drivers/gpio/gpio-pxa.c @@ -448,7 +448,7 @@ static int pxa_gpio_nums(void)  	} else if (cpu_is_pxa27x()) {  		count = 120;  		gpio_type = PXA27X_GPIO; -	} else if (cpu_is_pxa93x() || cpu_is_pxa95x()) { +	} else if (cpu_is_pxa93x()) {  		count = 191;  		gpio_type = PXA93X_GPIO;  	} else if (cpu_is_pxa3xx()) { diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c index 2ef162d148c..b9734747d61 100644 --- a/drivers/i2c/busses/i2c-imx.c +++ b/drivers/i2c/busses/i2c-imx.c @@ -52,8 +52,6 @@  #include <linux/of_device.h>  #include <linux/of_i2c.h>  #include <linux/pinctrl/consumer.h> - -#include <mach/hardware.h>  #include <linux/platform_data/i2c-imx.h>  /** Defines ******************************************************************** @@ -115,6 +113,11 @@ static u16 __initdata i2c_clk_div[50][2] = {  	{ 3072,	0x1E }, { 3840,	0x1F }  }; +enum imx_i2c_type { +	IMX1_I2C, +	IMX21_I2C, +}; +  struct imx_i2c_struct {  	struct i2c_adapter	adapter;  	struct clk		*clk; @@ -124,13 +127,33 @@ struct imx_i2c_struct {  	unsigned int 		disable_delay;  	int			stopped;  	unsigned int		ifdr; /* IMX_I2C_IFDR */ +	enum imx_i2c_type	devtype; +}; + +static struct platform_device_id imx_i2c_devtype[] = { +	{ +		.name = "imx1-i2c", +		.driver_data = IMX1_I2C, +	}, { +		.name = "imx21-i2c", +		.driver_data = IMX21_I2C, +	}, { +		/* sentinel */ +	}  }; +MODULE_DEVICE_TABLE(platform, imx_i2c_devtype);  static const struct of_device_id i2c_imx_dt_ids[] = { -	{ .compatible = "fsl,imx1-i2c", }, +	{ .compatible = "fsl,imx1-i2c", .data = &imx_i2c_devtype[IMX1_I2C], }, +	{ .compatible = "fsl,imx21-i2c", .data = &imx_i2c_devtype[IMX21_I2C], },  	{ /* sentinel */ }  }; +static inline int is_imx1_i2c(struct imx_i2c_struct *i2c_imx) +{ +	return i2c_imx->devtype == IMX1_I2C; +} +  /** Functions for IMX I2C adapter driver ***************************************  *******************************************************************************/ @@ -223,7 +246,7 @@ static void i2c_imx_stop(struct imx_i2c_struct *i2c_imx)  		temp &= ~(I2CR_MSTA | I2CR_MTX);  		writeb(temp, i2c_imx->base + IMX_I2C_I2CR);  	} -	if (cpu_is_mx1()) { +	if (is_imx1_i2c(i2c_imx)) {  		/*  		 * This delay caused by an i.MXL hardware bug.  		 * If no (or too short) delay, no "STOP" bit will be generated. @@ -465,6 +488,8 @@ static struct i2c_algorithm i2c_imx_algo = {  static int __init i2c_imx_probe(struct platform_device *pdev)  { +	const struct of_device_id *of_id = of_match_device(i2c_imx_dt_ids, +							   &pdev->dev);  	struct imx_i2c_struct *i2c_imx;  	struct resource *res;  	struct imxi2c_platform_data *pdata = pdev->dev.platform_data; @@ -497,6 +522,10 @@ static int __init i2c_imx_probe(struct platform_device *pdev)  		return -ENOMEM;  	} +	if (of_id) +		pdev->id_entry = of_id->data; +	i2c_imx->devtype = pdev->id_entry->driver_data; +  	/* Setup i2c_imx driver structure */  	strlcpy(i2c_imx->adapter.name, pdev->name, sizeof(i2c_imx->adapter.name));  	i2c_imx->adapter.owner		= THIS_MODULE; @@ -593,7 +622,8 @@ static struct platform_driver i2c_imx_driver = {  		.name	= DRIVER_NAME,  		.owner	= THIS_MODULE,  		.of_match_table = i2c_imx_dt_ids, -	} +	}, +	.id_table	= imx_i2c_devtype,  };  static int __init i2c_adap_imx_init(void) diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c index c0f7a426626..4252d743963 100644 --- a/drivers/iommu/tegra-smmu.c +++ b/drivers/iommu/tegra-smmu.c @@ -34,13 +34,11 @@  #include <linux/of_iommu.h>  #include <linux/debugfs.h>  #include <linux/seq_file.h> +#include <linux/tegra-ahb.h>  #include <asm/page.h>  #include <asm/cacheflush.h> -#include <mach/iomap.h> -#include <mach/tegra-ahb.h> -  enum smmu_hwgrp {  	HWGRP_AFI,  	HWGRP_AVPC, diff --git a/drivers/media/platform/soc_camera/mx2_camera.c b/drivers/media/platform/soc_camera/mx2_camera.c index 9a55f4c4c7f..8ac9b72b5ec 100644 --- a/drivers/media/platform/soc_camera/mx2_camera.c +++ b/drivers/media/platform/soc_camera/mx2_camera.c @@ -41,7 +41,6 @@  #include <linux/videodev2.h>  #include <linux/platform_data/camera-mx2.h> -#include <mach/hardware.h>  #include <asm/dma.h> @@ -121,11 +120,13 @@  #define CSICR1			0x00  #define CSICR2			0x04 -#define CSISR			(cpu_is_mx27() ? 0x08 : 0x18) +#define CSISR_IMX25		0x18 +#define CSISR_IMX27		0x08  #define CSISTATFIFO		0x0c  #define CSIRFIFO		0x10  #define CSIRXCNT		0x14 -#define CSICR3			(cpu_is_mx27() ? 0x1C : 0x08) +#define CSICR3_IMX25		0x08 +#define CSICR3_IMX27		0x1c  #define CSIDMASA_STATFIFO	0x20  #define CSIDMATA_STATFIFO	0x24  #define CSIDMASA_FB1		0x28 @@ -268,6 +269,11 @@ struct mx2_buffer {  	struct mx2_buf_internal		internal;  }; +enum mx2_camera_type { +	IMX25_CAMERA, +	IMX27_CAMERA, +}; +  struct mx2_camera_dev {  	struct device		*dev;  	struct soc_camera_host	soc_host; @@ -291,6 +297,9 @@ struct mx2_camera_dev {  	struct mx2_buffer	*fb2_active;  	u32			csicr1; +	u32			reg_csisr; +	u32			reg_csicr3; +	enum mx2_camera_type	devtype;  	struct mx2_buf_internal buf_discard[2];  	void			*discard_buffer; @@ -303,6 +312,29 @@ struct mx2_camera_dev {  	struct vb2_alloc_ctx	*alloc_ctx;  }; +static struct platform_device_id mx2_camera_devtype[] = { +	{ +		.name = "imx25-camera", +		.driver_data = IMX25_CAMERA, +	}, { +		.name = "imx27-camera", +		.driver_data = IMX27_CAMERA, +	}, { +		/* sentinel */ +	} +}; +MODULE_DEVICE_TABLE(platform, mx2_camera_devtype); + +static inline int is_imx25_camera(struct mx2_camera_dev *pcdev) +{ +	return pcdev->devtype == IMX25_CAMERA; +} + +static inline int is_imx27_camera(struct mx2_camera_dev *pcdev) +{ +	return pcdev->devtype == IMX27_CAMERA; +} +  static struct mx2_buffer *mx2_ibuf_to_buf(struct mx2_buf_internal *int_buf)  {  	return container_of(int_buf, struct mx2_buffer, internal); @@ -434,9 +466,9 @@ static void mx2_camera_deactivate(struct mx2_camera_dev *pcdev)  	clk_disable_unprepare(pcdev->clk_csi);  	writel(0, pcdev->base_csi + CSICR1); -	if (cpu_is_mx27()) { +	if (is_imx27_camera(pcdev)) {  		writel(0, pcdev->base_emma + PRP_CNTL); -	} else if (cpu_is_mx25()) { +	} else if (is_imx25_camera(pcdev)) {  		spin_lock_irqsave(&pcdev->lock, flags);  		pcdev->fb1_active = NULL;  		pcdev->fb2_active = NULL; @@ -466,7 +498,7 @@ static int mx2_camera_add_device(struct soc_camera_device *icd)  	csicr1 = CSICR1_MCLKEN; -	if (cpu_is_mx27()) +	if (is_imx27_camera(pcdev))  		csicr1 |= CSICR1_PRP_IF_EN | CSICR1_FCC |  			CSICR1_RXFF_LEVEL(0); @@ -542,7 +574,7 @@ out:  static irqreturn_t mx25_camera_irq(int irq_csi, void *data)  {  	struct mx2_camera_dev *pcdev = data; -	u32 status = readl(pcdev->base_csi + CSISR); +	u32 status = readl(pcdev->base_csi + pcdev->reg_csisr);  	if (status & CSISR_DMA_TSF_FB1_INT)  		mx25_camera_frame_done(pcdev, 1, MX2_STATE_DONE); @@ -551,7 +583,7 @@ static irqreturn_t mx25_camera_irq(int irq_csi, void *data)  	/* FIXME: handle CSISR_RFF_OR_INT */ -	writel(status, pcdev->base_csi + CSISR); +	writel(status, pcdev->base_csi + pcdev->reg_csisr);  	return IRQ_HANDLED;  } @@ -636,7 +668,7 @@ static void mx2_videobuf_queue(struct vb2_buffer *vb)  	buf->state = MX2_STATE_QUEUED;  	list_add_tail(&buf->internal.queue, &pcdev->capture); -	if (cpu_is_mx25()) { +	if (is_imx25_camera(pcdev)) {  		u32 csicr3, dma_inten = 0;  		if (pcdev->fb1_active == NULL) { @@ -655,20 +687,20 @@ static void mx2_videobuf_queue(struct vb2_buffer *vb)  			list_del(&buf->internal.queue);  			buf->state = MX2_STATE_ACTIVE; -			csicr3 = readl(pcdev->base_csi + CSICR3); +			csicr3 = readl(pcdev->base_csi + pcdev->reg_csicr3);  			/* Reflash DMA */  			writel(csicr3 | CSICR3_DMA_REFLASH_RFF, -					pcdev->base_csi + CSICR3); +					pcdev->base_csi + pcdev->reg_csicr3);  			/* clear & enable interrupts */ -			writel(dma_inten, pcdev->base_csi + CSISR); +			writel(dma_inten, pcdev->base_csi + pcdev->reg_csisr);  			pcdev->csicr1 |= dma_inten;  			writel(pcdev->csicr1, pcdev->base_csi + CSICR1);  			/* enable DMA */  			csicr3 |= CSICR3_DMA_REQ_EN_RFF | CSICR3_RXFF_LEVEL(1); -			writel(csicr3, pcdev->base_csi + CSICR3); +			writel(csicr3, pcdev->base_csi + pcdev->reg_csicr3);  		}  	} @@ -712,7 +744,7 @@ static void mx2_videobuf_release(struct vb2_buffer *vb)  	 */  	spin_lock_irqsave(&pcdev->lock, flags); -	if (cpu_is_mx25() && buf->state == MX2_STATE_ACTIVE) { +	if (is_imx25_camera(pcdev) && buf->state == MX2_STATE_ACTIVE) {  		if (pcdev->fb1_active == buf) {  			pcdev->csicr1 &= ~CSICR1_FB1_DMA_INTEN;  			writel(0, pcdev->base_csi + CSIDMASA_FB1); @@ -835,7 +867,7 @@ static int mx2_start_streaming(struct vb2_queue *q, unsigned int count)  	unsigned long phys;  	int bytesperline; -	if (cpu_is_mx27()) { +	if (is_imx27_camera(pcdev)) {  		unsigned long flags;  		if (count < 2)  			return -EINVAL; @@ -934,7 +966,7 @@ static int mx2_stop_streaming(struct vb2_queue *q)  	void *b;  	u32 cntl; -	if (cpu_is_mx27()) { +	if (is_imx27_camera(pcdev)) {  		spin_lock_irqsave(&pcdev->lock, flags);  		cntl = readl(pcdev->base_emma + PRP_CNTL); @@ -1086,11 +1118,11 @@ static int mx2_camera_set_bus_param(struct soc_camera_device *icd)  	if (bytesperline < 0)  		return bytesperline; -	if (cpu_is_mx27()) { +	if (is_imx27_camera(pcdev)) {  		ret = mx27_camera_emma_prp_reset(pcdev);  		if (ret)  			return ret; -	} else if (cpu_is_mx25()) { +	} else if (is_imx25_camera(pcdev)) {  		writel((bytesperline * icd->user_height) >> 2,  				pcdev->base_csi + CSIRXCNT);  		writel((bytesperline << 16) | icd->user_height, @@ -1397,7 +1429,7 @@ static int mx2_camera_try_fmt(struct soc_camera_device *icd,  	/* FIXME: implement MX27 limits */  	/* limit to MX25 hardware capabilities */ -	if (cpu_is_mx25()) { +	if (is_imx25_camera(pcdev)) {  		if (xlate->host_fmt->bits_per_sample <= 8)  			width_limit = 0xffff * 4;  		else @@ -1731,6 +1763,20 @@ static int __devinit mx2_camera_probe(struct platform_device *pdev)  		goto exit;  	} +	pcdev->devtype = pdev->id_entry->driver_data; +	switch (pcdev->devtype) { +	case IMX25_CAMERA: +		pcdev->reg_csisr = CSISR_IMX25; +		pcdev->reg_csicr3 = CSICR3_IMX25; +		break; +	case IMX27_CAMERA: +		pcdev->reg_csisr = CSISR_IMX27; +		pcdev->reg_csicr3 = CSICR3_IMX27; +		break; +	default: +		break; +	} +  	pcdev->clk_csi = devm_clk_get(&pdev->dev, "ahb");  	if (IS_ERR(pcdev->clk_csi)) {  		dev_err(&pdev->dev, "Could not get csi clock\n"); @@ -1768,7 +1814,7 @@ static int __devinit mx2_camera_probe(struct platform_device *pdev)  	pcdev->dev = &pdev->dev;  	platform_set_drvdata(pdev, pcdev); -	if (cpu_is_mx25()) { +	if (is_imx25_camera(pcdev)) {  		err = devm_request_irq(&pdev->dev, irq_csi, mx25_camera_irq, 0,  				       MX2_CAM_DRV_NAME, pcdev);  		if (err) { @@ -1777,7 +1823,7 @@ static int __devinit mx2_camera_probe(struct platform_device *pdev)  		}  	} -	if (cpu_is_mx27()) { +	if (is_imx27_camera(pcdev)) {  		err = mx27_camera_emma_init(pdev);  		if (err)  			goto exit; @@ -1794,7 +1840,7 @@ static int __devinit mx2_camera_probe(struct platform_device *pdev)  	pcdev->soc_host.priv		= pcdev;  	pcdev->soc_host.v4l2_dev.dev	= &pdev->dev;  	pcdev->soc_host.nr		= pdev->id; -	if (cpu_is_mx25()) +	if (is_imx25_camera(pcdev))  		pcdev->soc_host.capabilities = SOCAM_HOST_CAP_STRIDE;  	pcdev->alloc_ctx = vb2_dma_contig_init_ctx(&pdev->dev); @@ -1814,7 +1860,7 @@ static int __devinit mx2_camera_probe(struct platform_device *pdev)  exit_free_emma:  	vb2_dma_contig_cleanup_ctx(pcdev->alloc_ctx);  eallocctx: -	if (cpu_is_mx27()) { +	if (is_imx27_camera(pcdev)) {  		clk_disable_unprepare(pcdev->clk_emma_ipg);  		clk_disable_unprepare(pcdev->clk_emma_ahb);  	} @@ -1832,7 +1878,7 @@ static int __devexit mx2_camera_remove(struct platform_device *pdev)  	vb2_dma_contig_cleanup_ctx(pcdev->alloc_ctx); -	if (cpu_is_mx27()) { +	if (is_imx27_camera(pcdev)) {  		clk_disable_unprepare(pcdev->clk_emma_ipg);  		clk_disable_unprepare(pcdev->clk_emma_ahb);  	} @@ -1846,6 +1892,7 @@ static struct platform_driver mx2_camera_driver = {  	.driver 	= {  		.name	= MX2_CAM_DRV_NAME,  	}, +	.id_table	= mx2_camera_devtype,  	.remove		= __devexit_p(mx2_camera_remove),  }; diff --git a/drivers/media/platform/soc_camera/mx3_camera.c b/drivers/media/platform/soc_camera/mx3_camera.c index 261f6e9e1b1..06d16de7637 100644 --- a/drivers/media/platform/soc_camera/mx3_camera.c +++ b/drivers/media/platform/soc_camera/mx3_camera.c @@ -17,6 +17,7 @@  #include <linux/vmalloc.h>  #include <linux/interrupt.h>  #include <linux/sched.h> +#include <linux/dma/ipu-dma.h>  #include <media/v4l2-common.h>  #include <media/v4l2-dev.h> @@ -24,7 +25,6 @@  #include <media/soc_camera.h>  #include <media/soc_mediabus.h> -#include <mach/ipu.h>  #include <linux/platform_data/camera-mx3.h>  #include <linux/platform_data/dma-imx.h> diff --git a/drivers/mmc/host/mxcmmc.c b/drivers/mmc/host/mxcmmc.c index 29e680f193a..a72936eea6f 100644 --- a/drivers/mmc/host/mxcmmc.c +++ b/drivers/mmc/host/mxcmmc.c @@ -41,7 +41,6 @@  #include <linux/platform_data/mmc-mxcmmc.h>  #include <linux/platform_data/dma-imx.h> -#include <mach/hardware.h>  #define DRIVER_NAME "mxc-mmc"  #define MXCMCI_TIMEOUT_MS 10000 @@ -113,6 +112,11 @@  #define INT_WRITE_OP_DONE_EN		(1 << 1)  #define INT_READ_OP_EN			(1 << 0) +enum mxcmci_type { +	IMX21_MMC, +	IMX31_MMC, +}; +  struct mxcmci_host {  	struct mmc_host		*mmc;  	struct resource		*res; @@ -153,7 +157,26 @@ struct mxcmci_host {  	struct imx_dma_data	dma_data;  	struct timer_list	watchdog; +	enum mxcmci_type	devtype; +}; + +static struct platform_device_id mxcmci_devtype[] = { +	{ +		.name = "imx21-mmc", +		.driver_data = IMX21_MMC, +	}, { +		.name = "imx31-mmc", +		.driver_data = IMX31_MMC, +	}, { +		/* sentinel */ +	}  }; +MODULE_DEVICE_TABLE(platform, mxcmci_devtype); + +static inline int is_imx31_mmc(struct mxcmci_host *host) +{ +	return host->devtype == IMX31_MMC; +}  static void mxcmci_set_clk_rate(struct mxcmci_host *host, unsigned int clk_ios); @@ -843,6 +866,8 @@ static void mxcmci_enable_sdio_irq(struct mmc_host *mmc, int enable)  static void mxcmci_init_card(struct mmc_host *host, struct mmc_card *card)  { +	struct mxcmci_host *mxcmci = mmc_priv(host); +  	/*  	 * MX3 SoCs have a silicon bug which corrupts CRC calculation of  	 * multi-block transfers when connected SDIO peripheral doesn't @@ -850,7 +875,7 @@ static void mxcmci_init_card(struct mmc_host *host, struct mmc_card *card)  	 * One way to prevent this is to only allow 1-bit transfers.  	 */ -	if (cpu_is_mx3() && card->type == MMC_TYPE_SDIO) +	if (is_imx31_mmc(mxcmci) && card->type == MMC_TYPE_SDIO)  		host->caps &= ~MMC_CAP_4_BIT_DATA;  	else  		host->caps |= MMC_CAP_4_BIT_DATA; @@ -948,6 +973,7 @@ static int mxcmci_probe(struct platform_device *pdev)  	host->mmc = mmc;  	host->pdata = pdev->dev.platform_data; +	host->devtype = pdev->id_entry->driver_data;  	spin_lock_init(&host->lock);  	mxcmci_init_ocr(host); @@ -1120,6 +1146,7 @@ static const struct dev_pm_ops mxcmci_pm_ops = {  static struct platform_driver mxcmci_driver = {  	.probe		= mxcmci_probe,  	.remove		= mxcmci_remove, +	.id_table	= mxcmci_devtype,  	.driver		= {  		.name		= DRIVER_NAME,  		.owner		= THIS_MODULE, diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c index 72e31d86030..022dcdc256f 100644 --- a/drivers/mtd/nand/mxc_nand.c +++ b/drivers/mtd/nand/mxc_nand.c @@ -37,15 +37,9 @@  #include <asm/mach/flash.h>  #include <linux/platform_data/mtd-mxc_nand.h> -#include <mach/hardware.h>  #define DRIVER_NAME "mxc_nand" -#define nfc_is_v21()		(cpu_is_mx25() || cpu_is_mx35()) -#define nfc_is_v1()		(cpu_is_mx31() || cpu_is_mx27() || cpu_is_mx21()) -#define nfc_is_v3_2a()		cpu_is_mx51() -#define nfc_is_v3_2b()		cpu_is_mx53() -  /* Addresses for NFC registers */  #define NFC_V1_V2_BUF_SIZE		(host->regs + 0x00)  #define NFC_V1_V2_BUF_ADDR		(host->regs + 0x04) @@ -1283,6 +1277,53 @@ static const struct mxc_nand_devtype_data imx53_nand_devtype_data = {  	.ppb_shift = 8,  }; +static inline int is_imx21_nfc(struct mxc_nand_host *host) +{ +	return host->devtype_data == &imx21_nand_devtype_data; +} + +static inline int is_imx27_nfc(struct mxc_nand_host *host) +{ +	return host->devtype_data == &imx27_nand_devtype_data; +} + +static inline int is_imx25_nfc(struct mxc_nand_host *host) +{ +	return host->devtype_data == &imx25_nand_devtype_data; +} + +static inline int is_imx51_nfc(struct mxc_nand_host *host) +{ +	return host->devtype_data == &imx51_nand_devtype_data; +} + +static inline int is_imx53_nfc(struct mxc_nand_host *host) +{ +	return host->devtype_data == &imx53_nand_devtype_data; +} + +static struct platform_device_id mxcnd_devtype[] = { +	{ +		.name = "imx21-nand", +		.driver_data = (kernel_ulong_t) &imx21_nand_devtype_data, +	}, { +		.name = "imx27-nand", +		.driver_data = (kernel_ulong_t) &imx27_nand_devtype_data, +	}, { +		.name = "imx25-nand", +		.driver_data = (kernel_ulong_t) &imx25_nand_devtype_data, +	}, { +		.name = "imx51-nand", +		.driver_data = (kernel_ulong_t) &imx51_nand_devtype_data, +	}, { +		.name = "imx53-nand", +		.driver_data = (kernel_ulong_t) &imx53_nand_devtype_data, +	}, { +		/* sentinel */ +	} +}; +MODULE_DEVICE_TABLE(platform, mxcnd_devtype); +  #ifdef CONFIG_OF_MTD  static const struct of_device_id mxcnd_dt_ids[] = {  	{ @@ -1337,32 +1378,6 @@ static int __init mxcnd_probe_dt(struct mxc_nand_host *host)  }  #endif -static int __init mxcnd_probe_pdata(struct mxc_nand_host *host) -{ -	struct mxc_nand_platform_data *pdata = host->dev->platform_data; - -	if (!pdata) -		return -ENODEV; - -	host->pdata = *pdata; - -	if (nfc_is_v1()) { -		if (cpu_is_mx21()) -			host->devtype_data = &imx21_nand_devtype_data; -		else -			host->devtype_data = &imx27_nand_devtype_data; -	} else if (nfc_is_v21()) { -		host->devtype_data = &imx25_nand_devtype_data; -	} else if (nfc_is_v3_2a()) { -		host->devtype_data = &imx51_nand_devtype_data; -	} else if (nfc_is_v3_2b()) { -		host->devtype_data = &imx53_nand_devtype_data; -	} else -		BUG(); - -	return 0; -} -  static int __devinit mxcnd_probe(struct platform_device *pdev)  {  	struct nand_chip *this; @@ -1404,8 +1419,16 @@ static int __devinit mxcnd_probe(struct platform_device *pdev)  		return PTR_ERR(host->clk);  	err = mxcnd_probe_dt(host); -	if (err > 0) -		err = mxcnd_probe_pdata(host); +	if (err > 0) { +		struct mxc_nand_platform_data *pdata = pdev->dev.platform_data; +		if (pdata) { +			host->pdata = *pdata; +			host->devtype_data = (struct mxc_nand_devtype_data *) +						pdev->id_entry->driver_data; +		} else { +			err = -ENODEV; +		} +	}  	if (err < 0)  		return err; @@ -1494,7 +1517,7 @@ static int __devinit mxcnd_probe(struct platform_device *pdev)  	}  	/* first scan to find the device and get the page size */ -	if (nand_scan_ident(mtd, nfc_is_v21() ? 4 : 1, NULL)) { +	if (nand_scan_ident(mtd, is_imx25_nfc(host) ? 4 : 1, NULL)) {  		err = -ENXIO;  		goto escan;  	} @@ -1508,7 +1531,7 @@ static int __devinit mxcnd_probe(struct platform_device *pdev)  		this->ecc.layout = host->devtype_data->ecclayout_4k;  	if (this->ecc.mode == NAND_ECC_HW) { -		if (nfc_is_v1()) +		if (is_imx21_nfc(host) || is_imx27_nfc(host))  			this->ecc.strength = 1;  		else  			this->ecc.strength = (host->eccsize == 4) ? 4 : 8; @@ -1555,6 +1578,7 @@ static struct platform_driver mxcnd_driver = {  		   .owner = THIS_MODULE,  		   .of_match_table = of_match_ptr(mxcnd_dt_ids),  	}, +	.id_table = mxcnd_devtype,  	.probe = mxcnd_probe,  	.remove = __devexit_p(mxcnd_remove),  }; diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c index cd0106293a4..7304139934a 100644 --- a/drivers/rtc/rtc-mxc.c +++ b/drivers/rtc/rtc-mxc.c @@ -17,8 +17,6 @@  #include <linux/platform_device.h>  #include <linux/clk.h> -#include <mach/hardware.h> -  #define RTC_INPUT_CLK_32768HZ	(0x00 << 5)  #define RTC_INPUT_CLK_32000HZ	(0x01 << 5)  #define RTC_INPUT_CLK_38400HZ	(0x02 << 5) @@ -72,14 +70,38 @@ static const u32 PIE_BIT_DEF[MAX_PIE_NUM][2] = {  #define RTC_TEST2	0x2C	/*  32bit rtc test reg 2 */  #define RTC_TEST3	0x30	/*  32bit rtc test reg 3 */ +enum imx_rtc_type { +	IMX1_RTC, +	IMX21_RTC, +}; +  struct rtc_plat_data {  	struct rtc_device *rtc;  	void __iomem *ioaddr;  	int irq;  	struct clk *clk;  	struct rtc_time g_rtc_alarm; +	enum imx_rtc_type devtype;  }; +static struct platform_device_id imx_rtc_devtype[] = { +	{ +		.name = "imx1-rtc", +		.driver_data = IMX1_RTC, +	}, { +		.name = "imx21-rtc", +		.driver_data = IMX21_RTC, +	}, { +		/* sentinel */ +	} +}; +MODULE_DEVICE_TABLE(platform, imx_rtc_devtype); + +static inline int is_imx1_rtc(struct rtc_plat_data *data) +{ +	return data->devtype == IMX1_RTC; +} +  /*   * This function is used to obtain the RTC time or the alarm value in   * second. @@ -278,10 +300,13 @@ static int mxc_rtc_read_time(struct device *dev, struct rtc_time *tm)   */  static int mxc_rtc_set_mmss(struct device *dev, unsigned long time)  { +	struct platform_device *pdev = to_platform_device(dev); +	struct rtc_plat_data *pdata = platform_get_drvdata(pdev); +  	/*  	 * TTC_DAYR register is 9-bit in MX1 SoC, save time and day of year only  	 */ -	if (cpu_is_mx1()) { +	if (is_imx1_rtc(pdata)) {  		struct rtc_time tm;  		rtc_time_to_tm(time, &tm); @@ -360,6 +385,8 @@ static int __devinit mxc_rtc_probe(struct platform_device *pdev)  	if (!pdata)  		return -ENOMEM; +	pdata->devtype = pdev->id_entry->driver_data; +  	if (!devm_request_mem_region(&pdev->dev, res->start,  				     resource_size(res), pdev->name))  		return -EBUSY; @@ -480,6 +507,7 @@ static struct platform_driver mxc_rtc_driver = {  #endif  		   .owner	= THIS_MODULE,  	}, +	.id_table = imx_rtc_devtype,  	.probe = mxc_rtc_probe,  	.remove = __devexit_p(mxc_rtc_remove),  }; diff --git a/drivers/staging/nvec/nvec.c b/drivers/staging/nvec/nvec.c index c59b7b299d3..2830946860d 100644 --- a/drivers/staging/nvec/nvec.c +++ b/drivers/staging/nvec/nvec.c @@ -39,7 +39,6 @@  #include <linux/workqueue.h>  #include <mach/clk.h> -#include <mach/iomap.h>  #include "nvec.h" diff --git a/drivers/staging/tidspbridge/core/ue_deh.c b/drivers/staging/tidspbridge/core/ue_deh.c index 3d28b2345fb..6aea6f1b498 100644 --- a/drivers/staging/tidspbridge/core/ue_deh.c +++ b/drivers/staging/tidspbridge/core/ue_deh.c @@ -19,7 +19,6 @@  #include <linux/kernel.h>  #include <linux/interrupt.h> -#include <plat/dmtimer.h>  #include <dspbridge/dbdefs.h>  #include <dspbridge/dspdeh.h> diff --git a/drivers/usb/host/ehci-mxc.c b/drivers/usb/host/ehci-mxc.c index 8804f74689d..ec7f5d2c90d 100644 --- a/drivers/usb/host/ehci-mxc.c +++ b/drivers/usb/host/ehci-mxc.c @@ -24,7 +24,6 @@  #include <linux/usb/ulpi.h>  #include <linux/slab.h> -#include <mach/hardware.h>  #include <linux/platform_data/usb-ehci-mxc.h>  #include <asm/mach-types.h> diff --git a/drivers/video/imxfb.c b/drivers/video/imxfb.c index cf2688de083..e501dbc966b 100644 --- a/drivers/video/imxfb.c +++ b/drivers/video/imxfb.c @@ -33,7 +33,6 @@  #include <linux/math64.h>  #include <linux/platform_data/video-imxfb.h> -#include <mach/hardware.h>  /*   * Complain if VAR is out of range. @@ -53,8 +52,8 @@  #define LCDC_SIZE	0x04  #define SIZE_XMAX(x)	((((x) >> 4) & 0x3f) << 20) -#define YMAX_MASK       (cpu_is_mx1() ? 0x1ff : 0x3ff) -#define SIZE_YMAX(y)	((y) & YMAX_MASK) +#define YMAX_MASK_IMX1	0x1ff +#define YMAX_MASK_IMX21	0x3ff  #define LCDC_VPW	0x08  #define VPW_VPW(x)	((x) & 0x3ff) @@ -128,12 +127,18 @@ struct imxfb_rgb {  	struct fb_bitfield	transp;  }; +enum imxfb_type { +	IMX1_FB, +	IMX21_FB, +}; +  struct imxfb_info {  	struct platform_device  *pdev;  	void __iomem		*regs;  	struct clk		*clk_ipg;  	struct clk		*clk_ahb;  	struct clk		*clk_per; +	enum imxfb_type		devtype;  	/*  	 * These are the addresses we mapped @@ -168,6 +173,24 @@ struct imxfb_info {  	void (*backlight_power)(int);  }; +static struct platform_device_id imxfb_devtype[] = { +	{ +		.name = "imx1-fb", +		.driver_data = IMX1_FB, +	}, { +		.name = "imx21-fb", +		.driver_data = IMX21_FB, +	}, { +		/* sentinel */ +	} +}; +MODULE_DEVICE_TABLE(platform, imxfb_devtype); + +static inline int is_imx1_fb(struct imxfb_info *fbi) +{ +	return fbi->devtype == IMX1_FB; +} +  #define IMX_NAME	"IMX"  /* @@ -366,7 +389,7 @@ static int imxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)  		break;  	case 16:  	default: -		if (cpu_is_mx1()) +		if (is_imx1_fb(fbi))  			pcr |= PCR_BPIX_12;  		else  			pcr |= PCR_BPIX_16; @@ -596,6 +619,7 @@ static struct fb_ops imxfb_ops = {  static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *info)  {  	struct imxfb_info *fbi = info->par; +	u32 ymax_mask = is_imx1_fb(fbi) ? YMAX_MASK_IMX1 : YMAX_MASK_IMX21;  	pr_debug("var: xres=%d hslen=%d lm=%d rm=%d\n",  		var->xres, var->hsync_len, @@ -617,7 +641,7 @@ static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *inf  	if (var->right_margin > 255)  		printk(KERN_ERR "%s: invalid right_margin %d\n",  			info->fix.id, var->right_margin); -	if (var->yres < 1 || var->yres > YMAX_MASK) +	if (var->yres < 1 || var->yres > ymax_mask)  		printk(KERN_ERR "%s: invalid yres %d\n",  			info->fix.id, var->yres);  	if (var->vsync_len > 100) @@ -645,7 +669,7 @@ static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *inf  		VCR_V_WAIT_2(var->upper_margin),  		fbi->regs + LCDC_VCR); -	writel(SIZE_XMAX(var->xres) | SIZE_YMAX(var->yres), +	writel(SIZE_XMAX(var->xres) | (var->yres & ymax_mask),  			fbi->regs + LCDC_SIZE);  	writel(fbi->pcr, fbi->regs + LCDC_PCR); @@ -765,6 +789,7 @@ static int __init imxfb_probe(struct platform_device *pdev)  		return -ENOMEM;  	fbi = info->par; +	fbi->devtype = pdev->id_entry->driver_data;  	if (!fb_mode)  		fb_mode = pdata->mode[0].mode.name; @@ -939,6 +964,7 @@ static struct platform_driver imxfb_driver = {  	.driver		= {  		.name	= DRIVER_NAME,  	}, +	.id_table	= imxfb_devtype,  };  static int imxfb_setup(void) diff --git a/drivers/video/mx3fb.c b/drivers/video/mx3fb.c index ce1d452464e..73688720857 100644 --- a/drivers/video/mx3fb.c +++ b/drivers/video/mx3fb.c @@ -26,10 +26,9 @@  #include <linux/console.h>  #include <linux/clk.h>  #include <linux/mutex.h> +#include <linux/dma/ipu-dma.h>  #include <linux/platform_data/dma-imx.h> -#include <mach/hardware.h> -#include <mach/ipu.h>  #include <linux/platform_data/video-mx3fb.h>  #include <asm/io.h> diff --git a/drivers/watchdog/imx2_wdt.c b/drivers/watchdog/imx2_wdt.c index bcfab2b00ad..9a45d0294cf 100644 --- a/drivers/watchdog/imx2_wdt.c +++ b/drivers/watchdog/imx2_wdt.c @@ -33,7 +33,6 @@  #include <linux/uaccess.h>  #include <linux/timer.h>  #include <linux/jiffies.h> -#include <mach/hardware.h>  #define DRIVER_NAME "imx2-wdt" diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c index d8da5162f0d..43cc1a1e25d 100644 --- a/drivers/watchdog/omap_wdt.c +++ b/drivers/watchdog/omap_wdt.c @@ -46,8 +46,8 @@  #include <linux/slab.h>  #include <linux/pm_runtime.h>  #include <mach/hardware.h> -#include <plat/cpu.h> -#include <plat/prcm.h> + +#include <linux/platform_data/omap-wd-timer.h>  #include "omap_wdt.h" @@ -202,8 +202,10 @@ static ssize_t omap_wdt_write(struct file *file, const char __user *data,  static long omap_wdt_ioctl(struct file *file, unsigned int cmd,  						unsigned long arg)  { +	struct omap_wd_timer_platform_data *pdata;  	struct omap_wdt_dev *wdev; -	int new_margin; +	u32 rs; +	int new_margin, bs;  	static const struct watchdog_info ident = {  		.identity = "OMAP Watchdog",  		.options = WDIOF_SETTIMEOUT, @@ -211,6 +213,7 @@ static long omap_wdt_ioctl(struct file *file, unsigned int cmd,  	};  	wdev = file->private_data; +	pdata = wdev->dev->platform_data;  	switch (cmd) {  	case WDIOC_GETSUPPORT: @@ -219,17 +222,12 @@ static long omap_wdt_ioctl(struct file *file, unsigned int cmd,  	case WDIOC_GETSTATUS:  		return put_user(0, (int __user *)arg);  	case WDIOC_GETBOOTSTATUS: -#ifdef CONFIG_ARCH_OMAP1 -		if (cpu_is_omap16xx()) -			return put_user(__raw_readw(ARM_SYSST), -					(int __user *)arg); -#endif -#ifdef CONFIG_ARCH_OMAP2PLUS -		if (cpu_is_omap24xx()) -			return put_user(omap_prcm_get_reset_sources(), -					(int __user *)arg); -#endif -		return put_user(0, (int __user *)arg); +		if (!pdata || !pdata->read_reset_sources) +			return put_user(0, (int __user *)arg); +		rs = pdata->read_reset_sources(); +		bs = (rs & (1 << OMAP_MPU_WD_RST_SRC_ID_SHIFT)) ? +			WDIOF_CARDRESET : 0; +		return put_user(bs, (int __user *)arg);  	case WDIOC_KEEPALIVE:  		spin_lock(&wdt_lock);  		omap_wdt_ping(wdev); diff --git a/arch/arm/plat-mxc/include/mach/ipu.h b/include/linux/dma/ipu-dma.h index 539e559d18b..18031115c66 100644 --- a/arch/arm/plat-mxc/include/mach/ipu.h +++ b/include/linux/dma/ipu-dma.h @@ -9,8 +9,8 @@   * published by the Free Software Foundation.   */ -#ifndef _IPU_H_ -#define _IPU_H_ +#ifndef __LINUX_DMA_IPU_DMA_H +#define __LINUX_DMA_IPU_DMA_H  #include <linux/types.h>  #include <linux/dmaengine.h> @@ -174,4 +174,4 @@ struct idmac_channel {  #define to_tx_desc(tx) container_of(tx, struct idmac_tx_desc, txd)  #define to_idmac_chan(c) container_of(c, struct idmac_channel, dma_chan) -#endif +#endif /* __LINUX_DMA_IPU_DMA_H */ diff --git a/include/linux/platform_data/asoc-imx-ssi.h b/include/linux/platform_data/asoc-imx-ssi.h index 63f3c280423..92c7fd72f63 100644 --- a/include/linux/platform_data/asoc-imx-ssi.h +++ b/include/linux/platform_data/asoc-imx-ssi.h @@ -17,5 +17,7 @@ struct imx_ssi_platform_data {  	void (*ac97_warm_reset)(struct snd_ac97 *ac97);  }; +extern int mxc_set_irq_fiq(unsigned int irq, unsigned int type); +  #endif /* __MACH_SSI_H */ diff --git a/include/linux/platform_data/dma-imx.h b/include/linux/platform_data/dma-imx.h index 1b9080385b4..f6d30cc1cb7 100644 --- a/include/linux/platform_data/dma-imx.h +++ b/include/linux/platform_data/dma-imx.h @@ -61,7 +61,9 @@ static inline int imx_dma_is_ipu(struct dma_chan *chan)  static inline int imx_dma_is_general_purpose(struct dma_chan *chan)  {  	return strstr(dev_name(chan->device->dev), "sdma") || -		!strcmp(dev_name(chan->device->dev), "imx-dma"); +		!strcmp(dev_name(chan->device->dev), "imx1-dma") || +		!strcmp(dev_name(chan->device->dev), "imx21-dma") || +		!strcmp(dev_name(chan->device->dev), "imx27-dma");  }  #endif diff --git a/include/linux/platform_data/dmtimer-omap.h b/include/linux/platform_data/dmtimer-omap.h new file mode 100644 index 00000000000..a19b78d826e --- /dev/null +++ b/include/linux/platform_data/dmtimer-omap.h @@ -0,0 +1,31 @@ +/* + * DMTIMER platform data for TI OMAP platforms + * + * Copyright (C) 2012 Texas Instruments + * Author: Jon Hunter <jon-hunter@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. + * + * 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, see <http://www.gnu.org/licenses/>. + */ + +#ifndef __PLATFORM_DATA_DMTIMER_OMAP_H__ +#define __PLATFORM_DATA_DMTIMER_OMAP_H__ + +struct dmtimer_platform_data { +	/* set_timer_src - Only used for OMAP1 devices */ +	int (*set_timer_src)(struct platform_device *pdev, int source); +	u32 timer_capability; +	u32 timer_errata; +	int (*get_context_loss_count)(struct device *); +}; + +#endif /* __PLATFORM_DATA_DMTIMER_OMAP_H__ */ diff --git a/include/linux/platform_data/omap-wd-timer.h b/include/linux/platform_data/omap-wd-timer.h new file mode 100644 index 00000000000..d75f5f802d9 --- /dev/null +++ b/include/linux/platform_data/omap-wd-timer.h @@ -0,0 +1,38 @@ +/* + * OMAP2+ WDTIMER-specific function prototypes + * + * Copyright (C) 2012 Texas Instruments, Inc. + * Paul Walmsley + * + * 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. + */ + +#ifndef __LINUX_PLATFORM_DATA_OMAP_WD_TIMER_H +#define __LINUX_PLATFORM_DATA_OMAP_WD_TIMER_H + +#include <linux/types.h> + +/* + * Standardized OMAP reset source bits + * + * This is a subset of the ones listed in arch/arm/mach-omap2/prm.h + * and are the only ones needed in the watchdog driver. + */ +#define OMAP_MPU_WD_RST_SRC_ID_SHIFT				3 + +/** + * struct omap_wd_timer_platform_data - WDTIMER integration to the host SoC + * @read_reset_sources - fn ptr for the SoC to indicate the last reset cause + * + * The function pointed to by @read_reset_sources must return its data + * in a standard format - search for RST_SRC_ID_SHIFT in + * arch/arm/mach-omap2 + */ +struct omap_wd_timer_platform_data { +	u32 (*read_reset_sources)(void); +}; + +#endif diff --git a/arch/arm/mach-tegra/include/mach/tegra-ahb.h b/include/linux/tegra-ahb.h index e0f8c84b1d8..f1cd075ceee 100644 --- a/arch/arm/mach-tegra/include/mach/tegra-ahb.h +++ b/include/linux/tegra-ahb.h @@ -11,9 +11,9 @@   * more details.   */ -#ifndef __MACH_TEGRA_AHB_H__ -#define __MACH_TEGRA_AHB_H__ +#ifndef __LINUX_AHB_H__ +#define __LINUX_AHB_H__  extern int tegra_ahb_enable_smmu(struct device_node *ahb); -#endif	/* __MACH_TEGRA_AHB_H__ */ +#endif	/* __LINUX_AHB_H__ */ diff --git a/sound/soc/fsl/imx-pcm-fiq.c b/sound/soc/fsl/imx-pcm-fiq.c index 22c6130957b..9ffc9e66308 100644 --- a/sound/soc/fsl/imx-pcm-fiq.c +++ b/sound/soc/fsl/imx-pcm-fiq.c @@ -29,7 +29,6 @@  #include <asm/fiq.h> -#include <mach/irqs.h>  #include <linux/platform_data/asoc-imx-ssi.h>  #include "imx-ssi.h" diff --git a/sound/soc/fsl/imx-ssi.c b/sound/soc/fsl/imx-ssi.c index 006f7d465ed..dd566444e3c 100644 --- a/sound/soc/fsl/imx-ssi.c +++ b/sound/soc/fsl/imx-ssi.c @@ -48,7 +48,6 @@  #include <sound/soc.h>  #include <linux/platform_data/asoc-imx-ssi.h> -#include <mach/hardware.h>  #include "imx-ssi.h" diff --git a/sound/soc/tegra/tegra30_ahub.c b/sound/soc/tegra/tegra30_ahub.c index bf5610122c7..64b67a30919 100644 --- a/sound/soc/tegra/tegra30_ahub.c +++ b/sound/soc/tegra/tegra30_ahub.c @@ -26,7 +26,6 @@  #include <linux/regmap.h>  #include <linux/slab.h>  #include <mach/clk.h> -#include <mach/dma.h>  #include <sound/soc.h>  #include "tegra30_ahub.h" diff --git a/sound/soc/tegra/tegra_pcm.h b/sound/soc/tegra/tegra_pcm.h index b40279b9f41..bc8b46af928 100644 --- a/sound/soc/tegra/tegra_pcm.h +++ b/sound/soc/tegra/tegra_pcm.h @@ -31,8 +31,6 @@  #ifndef __TEGRA_PCM_H__  #define __TEGRA_PCM_H__ -#include <mach/dma.h> -  struct tegra_pcm_dma_params {  	unsigned long addr;  	unsigned long wrap;  |