diff options
Diffstat (limited to 'arch/arm')
53 files changed, 226 insertions, 229 deletions
diff --git a/arch/arm/boot/dts/armada-370-db.dts b/arch/arm/boot/dts/armada-370-db.dts index 00044026ef1..9b82facb256 100644 --- a/arch/arm/boot/dts/armada-370-db.dts +++ b/arch/arm/boot/dts/armada-370-db.dts @@ -26,7 +26,7 @@  	memory {  		device_type = "memory"; -		reg = <0x00000000 0x20000000>; /* 512 MB */ +		reg = <0x00000000 0x40000000>; /* 1 GB */  	};  	soc { diff --git a/arch/arm/boot/dts/armada-xp-mv78230.dtsi b/arch/arm/boot/dts/armada-xp-mv78230.dtsi index 271855a6e22..e041f42ed71 100644 --- a/arch/arm/boot/dts/armada-xp-mv78230.dtsi +++ b/arch/arm/boot/dts/armada-xp-mv78230.dtsi @@ -50,27 +50,25 @@  		};  		gpio0: gpio@d0018100 { -			compatible = "marvell,armadaxp-gpio"; -			reg = <0xd0018100 0x40>, -			    <0xd0018800 0x30>; +			compatible = "marvell,orion-gpio"; +			reg = <0xd0018100 0x40>;  			ngpios = <32>;  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupts-cells = <2>; -			interrupts = <16>, <17>, <18>, <19>; +			interrupts = <82>, <83>, <84>, <85>;  		};  		gpio1: gpio@d0018140 { -			compatible = "marvell,armadaxp-gpio"; -			reg = <0xd0018140 0x40>, -			    <0xd0018840 0x30>; +			compatible = "marvell,orion-gpio"; +			reg = <0xd0018140 0x40>;  			ngpios = <17>;  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupts-cells = <2>; -			interrupts = <20>, <21>, <22>; +			interrupts = <87>, <88>, <89>;  		};  	};  }; diff --git a/arch/arm/boot/dts/armada-xp-mv78260.dtsi b/arch/arm/boot/dts/armada-xp-mv78260.dtsi index 1c1937dbce7..9e23bd8c953 100644 --- a/arch/arm/boot/dts/armada-xp-mv78260.dtsi +++ b/arch/arm/boot/dts/armada-xp-mv78260.dtsi @@ -51,39 +51,36 @@  		};  		gpio0: gpio@d0018100 { -			compatible = "marvell,armadaxp-gpio"; -			reg = <0xd0018100 0x40>, -			    <0xd0018800 0x30>; +			compatible = "marvell,orion-gpio"; +			reg = <0xd0018100 0x40>;  			ngpios = <32>;  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupts-cells = <2>; -			interrupts = <16>, <17>, <18>, <19>; +			interrupts = <82>, <83>, <84>, <85>;  		};  		gpio1: gpio@d0018140 { -			compatible = "marvell,armadaxp-gpio"; -			reg = <0xd0018140 0x40>, -			    <0xd0018840 0x30>; +			compatible = "marvell,orion-gpio"; +			reg = <0xd0018140 0x40>;  			ngpios = <32>;  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupts-cells = <2>; -			interrupts = <20>, <21>, <22>, <23>; +			interrupts = <87>, <88>, <89>, <90>;  		};  		gpio2: gpio@d0018180 { -			compatible = "marvell,armadaxp-gpio"; -			reg = <0xd0018180 0x40>, -			    <0xd0018870 0x30>; +			compatible = "marvell,orion-gpio"; +			reg = <0xd0018180 0x40>;  			ngpios = <3>;  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupts-cells = <2>; -			interrupts = <24>; +			interrupts = <91>;  		};  		ethernet@d0034000 { diff --git a/arch/arm/boot/dts/armada-xp-mv78460.dtsi b/arch/arm/boot/dts/armada-xp-mv78460.dtsi index 4905cf3a5ef..965966110e3 100644 --- a/arch/arm/boot/dts/armada-xp-mv78460.dtsi +++ b/arch/arm/boot/dts/armada-xp-mv78460.dtsi @@ -66,39 +66,36 @@  		};  		gpio0: gpio@d0018100 { -			compatible = "marvell,armadaxp-gpio"; -			reg = <0xd0018100 0x40>, -			    <0xd0018800 0x30>; +			compatible = "marvell,orion-gpio"; +			reg = <0xd0018100 0x40>;  			ngpios = <32>;  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupts-cells = <2>; -			interrupts = <16>, <17>, <18>, <19>; +			interrupts = <82>, <83>, <84>, <85>;  		};  		gpio1: gpio@d0018140 { -			compatible = "marvell,armadaxp-gpio"; -			reg = <0xd0018140 0x40>, -			    <0xd0018840 0x30>; +			compatible = "marvell,orion-gpio"; +			reg = <0xd0018140 0x40>;  			ngpios = <32>;  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupts-cells = <2>; -			interrupts = <20>, <21>, <22>, <23>; +			interrupts = <87>, <88>, <89>, <90>;  		};  		gpio2: gpio@d0018180 { -			compatible = "marvell,armadaxp-gpio"; -			reg = <0xd0018180 0x40>, -			    <0xd0018870 0x30>; +			compatible = "marvell,orion-gpio"; +			reg = <0xd0018180 0x40>;  			ngpios = <3>;  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupts-cells = <2>; -			interrupts = <24>; +			interrupts = <91>;  		};  		ethernet@d0034000 { diff --git a/arch/arm/boot/dts/at91rm9200.dtsi b/arch/arm/boot/dts/at91rm9200.dtsi index e154f242c68..222047f1ece 100644 --- a/arch/arm/boot/dts/at91rm9200.dtsi +++ b/arch/arm/boot/dts/at91rm9200.dtsi @@ -336,8 +336,8 @@  	i2c@0 {  		compatible = "i2c-gpio"; -		gpios = <&pioA 23 0 /* sda */ -			 &pioA 24 0 /* scl */ +		gpios = <&pioA 25 0 /* sda */ +			 &pioA 26 0 /* scl */  			>;  		i2c-gpio,sda-open-drain;  		i2c-gpio,scl-open-drain; diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi index 3a47cf95214..8ecca6948d8 100644 --- a/arch/arm/boot/dts/at91sam9x5.dtsi +++ b/arch/arm/boot/dts/at91sam9x5.dtsi @@ -143,6 +143,11 @@  						atmel,pins =  							<0 3 0x1 0x0>;	/* PA3 periph A */  					}; + +					pinctrl_usart0_sck: usart0_sck-0 { +						atmel,pins = +							<0 4 0x1 0x0>;	/* PA4 periph A */ +					};  				};  				usart1 { @@ -154,12 +159,17 @@  					pinctrl_usart1_rts: usart1_rts-0 {  						atmel,pins = -							<3 27 0x3 0x0>;	/* PC27 periph C */ +							<2 27 0x3 0x0>;	/* PC27 periph C */  					};  					pinctrl_usart1_cts: usart1_cts-0 {  						atmel,pins = -							<3 28 0x3 0x0>;	/* PC28 periph C */ +							<2 28 0x3 0x0>;	/* PC28 periph C */ +					}; + +					pinctrl_usart1_sck: usart1_sck-0 { +						atmel,pins = +							<2 28 0x3 0x0>;	/* PC29 periph C */  					};  				}; @@ -172,46 +182,56 @@  					pinctrl_uart2_rts: uart2_rts-0 {  						atmel,pins = -							<0 0 0x2 0x0>;	/* PB0 periph B */ +							<1 0 0x2 0x0>;	/* PB0 periph B */  					};  					pinctrl_uart2_cts: uart2_cts-0 {  						atmel,pins = -							<0 1 0x2 0x0>;	/* PB1 periph B */ +							<1 1 0x2 0x0>;	/* PB1 periph B */ +					}; + +					pinctrl_usart2_sck: usart2_sck-0 { +						atmel,pins = +							<1 2 0x2 0x0>;	/* PB2 periph B */  					};  				};  				usart3 {  					pinctrl_uart3: usart3-0 {  						atmel,pins = -							<3 23 0x2 0x1	/* PC22 periph B with pullup */ -							 3 23 0x2 0x0>;	/* PC23 periph B */ +							<2 23 0x2 0x1	/* PC22 periph B with pullup */ +							 2 23 0x2 0x0>;	/* PC23 periph B */  					};  					pinctrl_usart3_rts: usart3_rts-0 {  						atmel,pins = -							<3 24 0x2 0x0>;	/* PC24 periph B */ +							<2 24 0x2 0x0>;	/* PC24 periph B */  					};  					pinctrl_usart3_cts: usart3_cts-0 {  						atmel,pins = -							<3 25 0x2 0x0>;	/* PC25 periph B */ +							<2 25 0x2 0x0>;	/* PC25 periph B */ +					}; + +					pinctrl_usart3_sck: usart3_sck-0 { +						atmel,pins = +							<2 26 0x2 0x0>;	/* PC26 periph B */  					};  				};  				uart0 {  					pinctrl_uart0: uart0-0 {  						atmel,pins = -							<3 8 0x3 0x0	/* PC8 periph C */ -							 3 9 0x3 0x1>;	/* PC9 periph C with pullup */ +							<2 8 0x3 0x0	/* PC8 periph C */ +							 2 9 0x3 0x1>;	/* PC9 periph C with pullup */  					};  				};  				uart1 {  					pinctrl_uart1: uart1-0 {  						atmel,pins = -							<3 16 0x3 0x0	/* PC16 periph C */ -							 3 17 0x3 0x1>;	/* PC17 periph C with pullup */ +							<2 16 0x3 0x0	/* PC16 periph C */ +							 2 17 0x3 0x1>;	/* PC17 periph C with pullup */  					};  				}; @@ -240,14 +260,14 @@  					pinctrl_macb0_rmii_mii: macb0_rmii_mii-0 {  						atmel,pins = -							<1 8 0x1 0x0	/* PA8 periph A */ -							 1 11 0x1 0x0	/* PA11 periph A */ -							 1 12 0x1 0x0	/* PA12 periph A */ -							 1 13 0x1 0x0	/* PA13 periph A */ -							 1 14 0x1 0x0	/* PA14 periph A */ -							 1 15 0x1 0x0	/* PA15 periph A */ -							 1 16 0x1 0x0	/* PA16 periph A */ -							 1 17 0x1 0x0>;	/* PA17 periph A */ +							<1 8 0x1 0x0	/* PB8 periph A */ +							 1 11 0x1 0x0	/* PB11 periph A */ +							 1 12 0x1 0x0	/* PB12 periph A */ +							 1 13 0x1 0x0	/* PB13 periph A */ +							 1 14 0x1 0x0	/* PB14 periph A */ +							 1 15 0x1 0x0	/* PB15 periph A */ +							 1 16 0x1 0x0	/* PB16 periph A */ +							 1 17 0x1 0x0>;	/* PB17 periph A */  					};  				}; diff --git a/arch/arm/boot/dts/cros5250-common.dtsi b/arch/arm/boot/dts/cros5250-common.dtsi index fddd1741743..46c09801703 100644 --- a/arch/arm/boot/dts/cros5250-common.dtsi +++ b/arch/arm/boot/dts/cros5250-common.dtsi @@ -96,8 +96,8 @@  		fifo-depth = <0x80>;  		card-detect-delay = <200>;  		samsung,dw-mshc-ciu-div = <3>; -		samsung,dw-mshc-sdr-timing = <2 3 3>; -		samsung,dw-mshc-ddr-timing = <1 2 3>; +		samsung,dw-mshc-sdr-timing = <2 3>; +		samsung,dw-mshc-ddr-timing = <1 2>;  		slot@0 {  			reg = <0>; @@ -120,8 +120,8 @@  		fifo-depth = <0x80>;  		card-detect-delay = <200>;  		samsung,dw-mshc-ciu-div = <3>; -		samsung,dw-mshc-sdr-timing = <2 3 3>; -		samsung,dw-mshc-ddr-timing = <1 2 3>; +		samsung,dw-mshc-sdr-timing = <2 3>; +		samsung,dw-mshc-ddr-timing = <1 2>;  		slot@0 {  			reg = <0>; @@ -141,8 +141,8 @@  		fifo-depth = <0x80>;  		card-detect-delay = <200>;  		samsung,dw-mshc-ciu-div = <3>; -		samsung,dw-mshc-sdr-timing = <2 3 3>; -		samsung,dw-mshc-ddr-timing = <1 2 3>; +		samsung,dw-mshc-sdr-timing = <2 3>; +		samsung,dw-mshc-ddr-timing = <1 2>;  		slot@0 {  			reg = <0>; diff --git a/arch/arm/boot/dts/dove-cubox.dts b/arch/arm/boot/dts/dove-cubox.dts index fed7d3f9f43..cdee96fca6e 100644 --- a/arch/arm/boot/dts/dove-cubox.dts +++ b/arch/arm/boot/dts/dove-cubox.dts @@ -26,10 +26,15 @@  };  &uart0 { status = "okay"; }; -&sdio0 { status = "okay"; };  &sata0 { status = "okay"; };  &i2c0 { status = "okay"; }; +&sdio0 { +	status = "okay"; +	/* sdio0 card detect is connected to wrong pin on CuBox */ +	cd-gpios = <&gpio0 12 1>; +}; +  &spi0 {  	status = "okay"; @@ -42,9 +47,14 @@  };  &pinctrl { -	pinctrl-0 = <&pmx_gpio_18>; +	pinctrl-0 = <&pmx_gpio_12 &pmx_gpio_18>;  	pinctrl-names = "default"; +	pmx_gpio_12: pmx-gpio-12 { +		marvell,pins = "mpp12"; +		marvell,function = "gpio"; +	}; +  	pmx_gpio_18: pmx-gpio-18 {  		marvell,pins = "mpp18";  		marvell,function = "gpio"; diff --git a/arch/arm/boot/dts/exynos5250-smdk5250.dts b/arch/arm/boot/dts/exynos5250-smdk5250.dts index 942d5761ca9..e05b18f3c33 100644 --- a/arch/arm/boot/dts/exynos5250-smdk5250.dts +++ b/arch/arm/boot/dts/exynos5250-smdk5250.dts @@ -115,8 +115,8 @@  		fifo-depth = <0x80>;  		card-detect-delay = <200>;  		samsung,dw-mshc-ciu-div = <3>; -		samsung,dw-mshc-sdr-timing = <2 3 3>; -		samsung,dw-mshc-ddr-timing = <1 2 3>; +		samsung,dw-mshc-sdr-timing = <2 3>; +		samsung,dw-mshc-ddr-timing = <1 2>;  		slot@0 {  			reg = <0>; @@ -139,8 +139,8 @@  		fifo-depth = <0x80>;  		card-detect-delay = <200>;  		samsung,dw-mshc-ciu-div = <3>; -		samsung,dw-mshc-sdr-timing = <2 3 3>; -		samsung,dw-mshc-ddr-timing = <1 2 3>; +		samsung,dw-mshc-sdr-timing = <2 3>; +		samsung,dw-mshc-ddr-timing = <1 2>;  		slot@0 {  			reg = <0>; diff --git a/arch/arm/boot/dts/kirkwood-ns2-common.dtsi b/arch/arm/boot/dts/kirkwood-ns2-common.dtsi index 9bc6785ad22..77d21abfcdf 100644 --- a/arch/arm/boot/dts/kirkwood-ns2-common.dtsi +++ b/arch/arm/boot/dts/kirkwood-ns2-common.dtsi @@ -1,4 +1,5 @@  /include/ "kirkwood.dtsi" +/include/ "kirkwood-6281.dtsi"  / {  	chosen { @@ -6,6 +7,21 @@  	};  	ocp@f1000000 { +		pinctrl: pinctrl@10000 { +			pinctrl-0 = < &pmx_spi &pmx_twsi0 &pmx_uart0 +					&pmx_ns2_sata0 &pmx_ns2_sata1>; +			pinctrl-names = "default"; + +			pmx_ns2_sata0: pmx-ns2-sata0 { +				marvell,pins = "mpp21"; +				marvell,function = "sata0"; +			}; +			pmx_ns2_sata1: pmx-ns2-sata1 { +				marvell,pins = "mpp20"; +				marvell,function = "sata1"; +			}; +		}; +  		serial@12000 {  			clock-frequency = <166666667>;  			status = "okay"; diff --git a/arch/arm/boot/dts/kirkwood.dtsi b/arch/arm/boot/dts/kirkwood.dtsi index 110d6cbb795..d6ab442b701 100644 --- a/arch/arm/boot/dts/kirkwood.dtsi +++ b/arch/arm/boot/dts/kirkwood.dtsi @@ -36,6 +36,7 @@  			reg = <0x10100 0x40>;  			ngpios = <32>;  			interrupt-controller; +			#interrupt-cells = <2>;  			interrupts = <35>, <36>, <37>, <38>;  		}; @@ -46,6 +47,7 @@  			reg = <0x10140 0x40>;  			ngpios = <18>;  			interrupt-controller; +			#interrupt-cells = <2>;  			interrupts = <39>, <40>, <41>;  		}; diff --git a/arch/arm/boot/dts/kizbox.dts b/arch/arm/boot/dts/kizbox.dts index e8814fe0e27..b4dc3ed9a3e 100644 --- a/arch/arm/boot/dts/kizbox.dts +++ b/arch/arm/boot/dts/kizbox.dts @@ -48,6 +48,8 @@  			macb0: ethernet@fffc4000 {  				phy-mode = "mii"; +				pinctrl-0 = <&pinctrl_macb_rmii +				             &pinctrl_macb_rmii_mii_alt>;  				status = "okay";  			}; diff --git a/arch/arm/boot/dts/sunxi.dtsi b/arch/arm/boot/dts/sunxi.dtsi index 8bbc2bfef22..8b36abea9f2 100644 --- a/arch/arm/boot/dts/sunxi.dtsi +++ b/arch/arm/boot/dts/sunxi.dtsi @@ -60,19 +60,21 @@  		};  		uart0: uart@01c28000 { -			compatible = "ns8250"; +			compatible = "snps,dw-apb-uart";  			reg = <0x01c28000 0x400>;  			interrupts = <1>;  			reg-shift = <2>; +			reg-io-width = <4>;  			clock-frequency = <24000000>;  			status = "disabled";  		};  		uart1: uart@01c28400 { -			compatible = "ns8250"; +			compatible = "snps,dw-apb-uart";  			reg = <0x01c28400 0x400>;  			interrupts = <2>;  			reg-shift = <2>; +			reg-io-width = <4>;  			clock-frequency = <24000000>;  			status = "disabled";  		}; diff --git a/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts b/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts index 1fc405a9ecf..cf8071ad22d 100644 --- a/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts +++ b/arch/arm/boot/dts/vexpress-v2p-ca15_a7.dts @@ -45,7 +45,6 @@  			reg = <1>;  		}; -/* A7s disabled till big.LITTLE patches are available...  		cpu2: cpu@2 {  			device_type = "cpu";  			compatible = "arm,cortex-a7"; @@ -63,7 +62,6 @@  			compatible = "arm,cortex-a7";  			reg = <0x102>;  		}; -*/  	};  	memory@80000000 { diff --git a/arch/arm/configs/at91_dt_defconfig b/arch/arm/configs/at91_dt_defconfig index b175577d7ab..1ea959019fc 100644 --- a/arch/arm/configs/at91_dt_defconfig +++ b/arch/arm/configs/at91_dt_defconfig @@ -19,6 +19,7 @@ CONFIG_SOC_AT91SAM9260=y  CONFIG_SOC_AT91SAM9263=y  CONFIG_SOC_AT91SAM9G45=y  CONFIG_SOC_AT91SAM9X5=y +CONFIG_SOC_AT91SAM9N12=y  CONFIG_MACH_AT91SAM_DT=y  CONFIG_AT91_PROGRAMMABLE_CLOCKS=y  CONFIG_AT91_TIMER_HZ=128 @@ -31,7 +32,7 @@ CONFIG_ZBOOT_ROM_TEXT=0x0  CONFIG_ZBOOT_ROM_BSS=0x0  CONFIG_ARM_APPENDED_DTB=y  CONFIG_ARM_ATAG_DTB_COMPAT=y -CONFIG_CMDLINE="mem=128M console=ttyS0,115200 initrd=0x21100000,25165824 root=/dev/ram0 rw" +CONFIG_CMDLINE="console=ttyS0,115200 initrd=0x21100000,25165824 root=/dev/ram0 rw"  CONFIG_KEXEC=y  CONFIG_AUTO_ZRELADDR=y  # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set diff --git a/arch/arm/kernel/debug.S b/arch/arm/kernel/debug.S index 6809200c31f..14f7c3b1463 100644 --- a/arch/arm/kernel/debug.S +++ b/arch/arm/kernel/debug.S @@ -100,12 +100,14 @@ ENTRY(printch)  		b	1b  ENDPROC(printch) +#ifdef CONFIG_MMU  ENTRY(debug_ll_addr)  		addruart r2, r3, ip  		str	r2, [r0]  		str	r3, [r1]  		mov	pc, lr  ENDPROC(debug_ll_addr) +#endif  #else diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index 4eee351f466..486a15ae901 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S @@ -246,6 +246,7 @@ __create_page_tables:  	/*  	 * Then map boot params address in r2 if specified. +	 * We map 2 sections in case the ATAGs/DTB crosses a section boundary.  	 */  	mov	r0, r2, lsr #SECTION_SHIFT  	movs	r0, r0, lsl #SECTION_SHIFT @@ -253,6 +254,8 @@ __create_page_tables:  	addne	r3, r3, #PAGE_OFFSET  	addne	r3, r4, r3, lsr #(SECTION_SHIFT - PMD_ORDER)  	orrne	r6, r7, r0 +	strne	r6, [r3], #1 << PMD_ORDER +	addne	r6, r6, #1 << SECTION_SHIFT  	strne	r6, [r3]  #ifdef CONFIG_DEBUG_LL @@ -331,7 +334,7 @@ ENTRY(secondary_startup)  	 * as it has already been validated by the primary processor.  	 */  #ifdef CONFIG_ARM_VIRT_EXT -	bl	__hyp_stub_install +	bl	__hyp_stub_install_secondary  #endif  	safe_svcmode_maskall r9 diff --git a/arch/arm/kernel/hyp-stub.S b/arch/arm/kernel/hyp-stub.S index 65b2417aebc..1315c4ccfa5 100644 --- a/arch/arm/kernel/hyp-stub.S +++ b/arch/arm/kernel/hyp-stub.S @@ -99,7 +99,7 @@ ENTRY(__hyp_stub_install_secondary)  	 * immediately.  	 */  	compare_cpu_mode_with_primary	r4, r5, r6, r7 -	bxne	lr +	movne	pc, lr  	/*  	 * Once we have given up on one CPU, we do not try to install the @@ -111,7 +111,7 @@ ENTRY(__hyp_stub_install_secondary)  	 */  	cmp	r4, #HYP_MODE -	bxne	lr			@ give up if the CPU is not in HYP mode +	movne	pc, lr			@ give up if the CPU is not in HYP mode  /*   * Configure HSCTLR to set correct exception endianness/instruction set @@ -120,7 +120,8 @@ ENTRY(__hyp_stub_install_secondary)   * Eventually, CPU-specific code might be needed -- assume not for now   *   * This code relies on the "eret" instruction to synchronize the - * various coprocessor accesses. + * various coprocessor accesses. This is done when we switch to SVC + * (see safe_svcmode_maskall).   */  	@ Now install the hypervisor stub:  	adr	r7, __hyp_stub_vectors @@ -155,14 +156,7 @@ THUMB(	orr	r7, #(1 << 30)	)	@ HSCTLR.TE  1:  #endif -	bic	r7, r4, #MODE_MASK -	orr	r7, r7, #SVC_MODE -THUMB(	orr	r7, r7, #PSR_T_BIT	) -	msr	spsr_cxsf, r7		@ This is SPSR_hyp. - -	__MSR_ELR_HYP(14)		@ msr elr_hyp, lr -	__ERET				@ return, switching to SVC mode -					@ The boot CPU mode is left in r4. +	bx	lr			@ The boot CPU mode is left in r4.  ENDPROC(__hyp_stub_install_secondary)  __hyp_stub_do_trap: @@ -200,7 +194,7 @@ ENDPROC(__hyp_get_vectors)  	@ fall through  ENTRY(__hyp_set_vectors)  	__HVC(0) -	bx	lr +	mov	pc, lr  ENDPROC(__hyp_set_vectors)  #ifndef ZIMAGE diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c index 9ee866ce047..4b678478cf9 100644 --- a/arch/arm/mach-at91/setup.c +++ b/arch/arm/mach-at91/setup.c @@ -105,6 +105,8 @@ static void __init soc_detect(u32 dbgu_base)  	switch (socid) {  	case ARCH_ID_AT91RM9200:  		at91_soc_initdata.type = AT91_SOC_RM9200; +		if (at91_soc_initdata.subtype == AT91_SOC_SUBTYPE_NONE) +			at91_soc_initdata.subtype = AT91_SOC_RM9200_BGA;  		at91_boot_soc = at91rm9200_soc;  		break; diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index 3e628fd7a67..0a2349dc701 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -851,6 +851,7 @@ 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 diff --git a/arch/arm/mach-imx/clk-imx25.c b/arch/arm/mach-imx/clk-imx25.c index b197aa73dc4..2c570cdaae7 100644 --- a/arch/arm/mach-imx/clk-imx25.c +++ b/arch/arm/mach-imx/clk-imx25.c @@ -254,9 +254,9 @@ int __init mx25_clocks_init(void)  	clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.2");  	clk_register_clkdev(clk[usbotg_ahb], "ahb", "mxc-ehci.2");  	clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.2"); -	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[ipg], "ipg", "imx-udc-mx27"); +	clk_register_clkdev(clk[usbotg_ahb], "ahb", "imx-udc-mx27"); +	clk_register_clkdev(clk[usb_div], "per", "imx-udc-mx27");  	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"); diff --git a/arch/arm/mach-imx/clk-imx27.c b/arch/arm/mach-imx/clk-imx27.c index 4c1d1e4efc7..1ffe3b534e5 100644 --- a/arch/arm/mach-imx/clk-imx27.c +++ b/arch/arm/mach-imx/clk-imx27.c @@ -236,9 +236,9 @@ int __init mx27_clocks_init(unsigned long fref)  	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[per4_gate], "per", "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"); +	clk_register_clkdev(clk[usb_div], "per", "imx-udc-mx27"); +	clk_register_clkdev(clk[usb_ipg_gate], "ipg", "imx-udc-mx27"); +	clk_register_clkdev(clk[usb_ahb_gate], "ahb", "imx-udc-mx27");  	clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.0");  	clk_register_clkdev(clk[usb_ipg_gate], "ipg", "mxc-ehci.0");  	clk_register_clkdev(clk[usb_ahb_gate], "ahb", "mxc-ehci.0"); diff --git a/arch/arm/mach-imx/clk-imx31.c b/arch/arm/mach-imx/clk-imx31.c index 8be64e0a4ac..16ccbd41dea 100644 --- a/arch/arm/mach-imx/clk-imx31.c +++ b/arch/arm/mach-imx/clk-imx31.c @@ -139,9 +139,9 @@ int __init mx31_clocks_init(unsigned long fref)  	clk_register_clkdev(clk[usb_div_post], "per", "mxc-ehci.2");  	clk_register_clkdev(clk[usb_gate], "ahb", "mxc-ehci.2");  	clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.2"); -	clk_register_clkdev(clk[usb_div_post], "per", "fsl-usb2-udc"); -	clk_register_clkdev(clk[usb_gate], "ahb", "fsl-usb2-udc"); -	clk_register_clkdev(clk[ipg], "ipg", "fsl-usb2-udc"); +	clk_register_clkdev(clk[usb_div_post], "per", "imx-udc-mx27"); +	clk_register_clkdev(clk[usb_gate], "ahb", "imx-udc-mx27"); +	clk_register_clkdev(clk[ipg], "ipg", "imx-udc-mx27");  	clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0");  	/* i.mx31 has the i.mx21 type uart */  	clk_register_clkdev(clk[uart1_gate], "per", "imx21-uart.0"); diff --git a/arch/arm/mach-imx/clk-imx35.c b/arch/arm/mach-imx/clk-imx35.c index 66f3d65ea27..f0727e80815 100644 --- a/arch/arm/mach-imx/clk-imx35.c +++ b/arch/arm/mach-imx/clk-imx35.c @@ -251,9 +251,9 @@ int __init mx35_clocks_init()  	clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.2");  	clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.2");  	clk_register_clkdev(clk[usbotg_gate], "ahb", "mxc-ehci.2"); -	clk_register_clkdev(clk[usb_div], "per", "fsl-usb2-udc"); -	clk_register_clkdev(clk[ipg], "ipg", "fsl-usb2-udc"); -	clk_register_clkdev(clk[usbotg_gate], "ahb", "fsl-usb2-udc"); +	clk_register_clkdev(clk[usb_div], "per", "imx-udc-mx27"); +	clk_register_clkdev(clk[ipg], "ipg", "imx-udc-mx27"); +	clk_register_clkdev(clk[usbotg_gate], "ahb", "imx-udc-mx27");  	clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0");  	clk_register_clkdev(clk[nfc_div], NULL, "imx25-nand.0");  	clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0"); diff --git a/arch/arm/mach-imx/clk-imx51-imx53.c b/arch/arm/mach-imx/clk-imx51-imx53.c index 579023f59dc..fb7cb841b64 100644 --- a/arch/arm/mach-imx/clk-imx51-imx53.c +++ b/arch/arm/mach-imx/clk-imx51-imx53.c @@ -269,9 +269,9 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil,  	clk_register_clkdev(clk[usboh3_per_gate], "per", "mxc-ehci.2");  	clk_register_clkdev(clk[usboh3_gate], "ipg", "mxc-ehci.2");  	clk_register_clkdev(clk[usboh3_gate], "ahb", "mxc-ehci.2"); -	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[usboh3_per_gate], "per", "imx-udc-mx51"); +	clk_register_clkdev(clk[usboh3_gate], "ipg", "imx-udc-mx51"); +	clk_register_clkdev(clk[usboh3_gate], "ahb", "imx-udc-mx51");  	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"); diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index 7f2c10c7413..c0c4e723b7f 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c @@ -436,6 +436,9 @@ int __init mx6q_clocks_init(void)  	for (i = 0; i < ARRAY_SIZE(clks_init_on); i++)  		clk_prepare_enable(clk[clks_init_on[i]]); +	/* Set initial power mode */ +	imx6q_set_lpm(WAIT_CLOCKED); +  	np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt");  	base = of_iomap(np, 0);  	WARN_ON(!base); diff --git a/arch/arm/mach-imx/common.h b/arch/arm/mach-imx/common.h index 7191ab4434e..fa36fb84ab1 100644 --- a/arch/arm/mach-imx/common.h +++ b/arch/arm/mach-imx/common.h @@ -142,6 +142,7 @@ extern int imx6q_set_lpm(enum mxc_cpu_pwr_mode mode);  extern void imx6q_clock_map_io(void);  extern void imx_cpu_die(unsigned int cpu); +extern int imx_cpu_kill(unsigned int cpu);  #ifdef CONFIG_PM  extern void imx6q_pm_init(void); diff --git a/arch/arm/mach-imx/devices/devices-common.h b/arch/arm/mach-imx/devices/devices-common.h index 6277baf1b7b..9bd5777ff0e 100644 --- a/arch/arm/mach-imx/devices/devices-common.h +++ b/arch/arm/mach-imx/devices/devices-common.h @@ -63,6 +63,7 @@ struct platform_device *__init imx_add_flexcan(  #include <linux/fsl_devices.h>  struct imx_fsl_usb2_udc_data { +	const char *devid;  	resource_size_t iobase;  	resource_size_t irq;  }; diff --git a/arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c b/arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c index 37e44398197..3c06bd96e9c 100644 --- a/arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c +++ b/arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c @@ -11,35 +11,36 @@  #include "../hardware.h"  #include "devices-common.h" -#define imx_fsl_usb2_udc_data_entry_single(soc)				\ +#define imx_fsl_usb2_udc_data_entry_single(soc, _devid)			\  	{								\ +		.devid = _devid,					\  		.iobase = soc ## _USB_OTG_BASE_ADDR,			\  		.irq = soc ## _INT_USB_OTG,				\  	}  #ifdef CONFIG_SOC_IMX25  const struct imx_fsl_usb2_udc_data imx25_fsl_usb2_udc_data __initconst = -	imx_fsl_usb2_udc_data_entry_single(MX25); +	imx_fsl_usb2_udc_data_entry_single(MX25, "imx-udc-mx27");  #endif /* ifdef CONFIG_SOC_IMX25 */  #ifdef CONFIG_SOC_IMX27  const struct imx_fsl_usb2_udc_data imx27_fsl_usb2_udc_data __initconst = -	imx_fsl_usb2_udc_data_entry_single(MX27); +	imx_fsl_usb2_udc_data_entry_single(MX27, "imx-udc-mx27");  #endif /* ifdef CONFIG_SOC_IMX27 */  #ifdef CONFIG_SOC_IMX31  const struct imx_fsl_usb2_udc_data imx31_fsl_usb2_udc_data __initconst = -	imx_fsl_usb2_udc_data_entry_single(MX31); +	imx_fsl_usb2_udc_data_entry_single(MX31, "imx-udc-mx27");  #endif /* ifdef CONFIG_SOC_IMX31 */  #ifdef CONFIG_SOC_IMX35  const struct imx_fsl_usb2_udc_data imx35_fsl_usb2_udc_data __initconst = -	imx_fsl_usb2_udc_data_entry_single(MX35); +	imx_fsl_usb2_udc_data_entry_single(MX35, "imx-udc-mx27");  #endif /* ifdef CONFIG_SOC_IMX35 */  #ifdef CONFIG_SOC_IMX51  const struct imx_fsl_usb2_udc_data imx51_fsl_usb2_udc_data __initconst = -	imx_fsl_usb2_udc_data_entry_single(MX51); +	imx_fsl_usb2_udc_data_entry_single(MX51, "imx-udc-mx51");  #endif  struct platform_device *__init imx_add_fsl_usb2_udc( @@ -57,7 +58,7 @@ struct platform_device *__init imx_add_fsl_usb2_udc(  			.flags = IORESOURCE_IRQ,  		},  	}; -	return imx_add_platform_device_dmamask("fsl-usb2-udc", -1, +	return imx_add_platform_device_dmamask(data->devid, -1,  			res, ARRAY_SIZE(res),  			pdata, sizeof(*pdata), DMA_BIT_MASK(32));  } diff --git a/arch/arm/mach-imx/devices/platform-imx-fb.c b/arch/arm/mach-imx/devices/platform-imx-fb.c index 10b0ed39f07..25a47c616b2 100644 --- a/arch/arm/mach-imx/devices/platform-imx-fb.c +++ b/arch/arm/mach-imx/devices/platform-imx-fb.c @@ -54,7 +54,7 @@ struct platform_device *__init imx_add_imx_fb(  			.flags = IORESOURCE_IRQ,  		},  	}; -	return imx_add_platform_device_dmamask("imx-fb", 0, +	return imx_add_platform_device_dmamask(data->devid, 0,  			res, ARRAY_SIZE(res),  			pdata, sizeof(*pdata), DMA_BIT_MASK(32));  } diff --git a/arch/arm/mach-imx/hotplug.c b/arch/arm/mach-imx/hotplug.c index 3dec962b077..7bc5fe15dda 100644 --- a/arch/arm/mach-imx/hotplug.c +++ b/arch/arm/mach-imx/hotplug.c @@ -46,9 +46,11 @@ static inline void cpu_enter_lowpower(void)  void imx_cpu_die(unsigned int cpu)  {  	cpu_enter_lowpower(); -	imx_enable_cpu(cpu, false); +	cpu_do_idle(); +} -	/* spin here until hardware takes it down */ -	while (1) -		; +int imx_cpu_kill(unsigned int cpu) +{ +	imx_enable_cpu(cpu, false); +	return 1;  } diff --git a/arch/arm/mach-imx/iram.h b/arch/arm/mach-imx/iram.h deleted file mode 100644 index 022690c3370..00000000000 --- a/arch/arm/mach-imx/iram.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2010 Freescale Semiconductor, Inc. All Rights Reserved. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ -#include <linux/errno.h> - -#ifdef CONFIG_IRAM_ALLOC - -int __init iram_init(unsigned long base, unsigned long size); -void __iomem *iram_alloc(unsigned int size, unsigned long *dma_addr); -void iram_free(unsigned long dma_addr, unsigned int size); - -#else - -static inline int __init iram_init(unsigned long base, unsigned long size) -{ -	return -ENOMEM; -} - -static inline void __iomem *iram_alloc(unsigned int size, unsigned long *dma_addr) -{ -	return NULL; -} - -static inline void iram_free(unsigned long base, unsigned long size) {} - -#endif diff --git a/arch/arm/mach-imx/iram_alloc.c b/arch/arm/mach-imx/iram_alloc.c index 6c80424f678..e05cf407db6 100644 --- a/arch/arm/mach-imx/iram_alloc.c +++ b/arch/arm/mach-imx/iram_alloc.c @@ -22,8 +22,7 @@  #include <linux/module.h>  #include <linux/spinlock.h>  #include <linux/genalloc.h> - -#include "iram.h" +#include "linux/platform_data/imx-iram.h"  static unsigned long iram_phys_base;  static void __iomem *iram_virt_base; diff --git a/arch/arm/mach-imx/platsmp.c b/arch/arm/mach-imx/platsmp.c index 3777b805b76..66fae885c84 100644 --- a/arch/arm/mach-imx/platsmp.c +++ b/arch/arm/mach-imx/platsmp.c @@ -92,5 +92,6 @@ struct smp_operations  imx_smp_ops __initdata = {  	.smp_boot_secondary	= imx_boot_secondary,  #ifdef CONFIG_HOTPLUG_CPU  	.cpu_die		= imx_cpu_die, +	.cpu_kill		= imx_cpu_kill,  #endif  }; diff --git a/arch/arm/mach-imx/pm-imx6q.c b/arch/arm/mach-imx/pm-imx6q.c index a17543da602..ee42d20cba1 100644 --- a/arch/arm/mach-imx/pm-imx6q.c +++ b/arch/arm/mach-imx/pm-imx6q.c @@ -41,6 +41,7 @@ static int imx6q_pm_enter(suspend_state_t state)  		cpu_suspend(0, imx6q_suspend_finish);  		imx_smp_prepare();  		imx_gpc_post_resume(); +		imx6q_set_lpm(WAIT_CLOCKED);  		break;  	default:  		return -EINVAL; diff --git a/arch/arm/mach-integrator/pci_v3.c b/arch/arm/mach-integrator/pci_v3.c index be50e795536..e7fcea7f330 100644 --- a/arch/arm/mach-integrator/pci_v3.c +++ b/arch/arm/mach-integrator/pci_v3.c @@ -475,13 +475,12 @@ int __init pci_v3_setup(int nr, struct pci_sys_data *sys)  {  	int ret = 0; +	if (!ap_syscon_base) +		return -EINVAL; +  	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; @@ -497,6 +496,13 @@ void __init pci_v3_preinit(void)  	unsigned int temp;  	int ret; +	/* Remap the Integrator system controller */ +	ap_syscon_base = ioremap(INTEGRATOR_SC_BASE, 0x100); +	if (!ap_syscon_base) { +		pr_err("unable to remap the AP syscon for PCIv3\n"); +		return; +	} +  	pcibios_min_mem = 0x00100000;  	/* diff --git a/arch/arm/mach-kirkwood/board-ns2.c b/arch/arm/mach-kirkwood/board-ns2.c index 8821720ab5a..f4632a809f6 100644 --- a/arch/arm/mach-kirkwood/board-ns2.c +++ b/arch/arm/mach-kirkwood/board-ns2.c @@ -18,47 +18,11 @@  #include <linux/gpio.h>  #include <linux/of.h>  #include "common.h" -#include "mpp.h"  static struct mv643xx_eth_platform_data ns2_ge00_data = {  	.phy_addr	= MV643XX_ETH_PHY_ADDR(8),  }; -static unsigned int ns2_mpp_config[] __initdata = { -	MPP0_SPI_SCn, -	MPP1_SPI_MOSI, -	MPP2_SPI_SCK, -	MPP3_SPI_MISO, -	MPP4_NF_IO6, -	MPP5_NF_IO7, -	MPP6_SYSRST_OUTn, -	MPP7_GPO,		/* Fan speed (bit 1) */ -	MPP8_TW0_SDA, -	MPP9_TW0_SCK, -	MPP10_UART0_TXD, -	MPP11_UART0_RXD, -	MPP12_GPO,		/* Red led */ -	MPP14_GPIO,		/* USB fuse */ -	MPP16_GPIO,		/* SATA 0 power */ -	MPP17_GPIO,		/* SATA 1 power */ -	MPP18_NF_IO0, -	MPP19_NF_IO1, -	MPP20_SATA1_ACTn, -	MPP21_SATA0_ACTn, -	MPP22_GPIO,		/* Fan speed (bit 0) */ -	MPP23_GPIO,		/* Fan power */ -	MPP24_GPIO,		/* USB mode select */ -	MPP25_GPIO,		/* Fan rotation fail */ -	MPP26_GPIO,		/* USB device vbus */ -	MPP28_GPIO,		/* USB enable host vbus */ -	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) */ -	MPP33_GPO,		/* Fan speed (bit 2) */ -	0 -}; -  #define NS2_GPIO_POWER_OFF	31  static void ns2_power_off(void) @@ -71,8 +35,6 @@ void __init ns2_init(void)  	/*  	 * Basic setup. Needs to be called early.  	 */ -	kirkwood_mpp_conf(ns2_mpp_config); -  	if (of_machine_is_compatible("lacie,netspace_lite_v2") ||  	    of_machine_is_compatible("lacie,netspace_mini_v2"))  		ns2_ge00_data.phy_addr = MV643XX_ETH_PHY_ADDR(0); diff --git a/arch/arm/mach-mvebu/Makefile b/arch/arm/mach-mvebu/Makefile index 5dcb369b58a..99df4df680f 100644 --- a/arch/arm/mach-mvebu/Makefile +++ b/arch/arm/mach-mvebu/Makefile @@ -1,6 +1,8 @@  ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \  	-I$(srctree)/arch/arm/plat-orion/include +AFLAGS_coherency_ll.o		:= -Wa,-march=armv7-a +  obj-y += system-controller.o  obj-$(CONFIG_MACH_ARMADA_370_XP) += armada-370-xp.o irq-armada-370-xp.o addr-map.o coherency.o coherency_ll.o pmsu.o  obj-$(CONFIG_SMP)                += platsmp.o headsmp.o diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c index 5c8e9cee2c2..769c1feee1c 100644 --- a/arch/arm/mach-omap2/board-omap4panda.c +++ b/arch/arm/mach-omap2/board-omap4panda.c @@ -397,6 +397,12 @@ static struct omap_board_mux board_mux[] __initdata = {  		  OMAP_PULL_ENA),  	OMAP4_MUX(ABE_MCBSP1_FSX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT), +	/* UART2 - BT/FM/GPS shared transport */ +	OMAP4_MUX(UART2_CTS,	OMAP_PIN_INPUT	| OMAP_MUX_MODE0), +	OMAP4_MUX(UART2_RTS,	OMAP_PIN_OUTPUT	| OMAP_MUX_MODE0), +	OMAP4_MUX(UART2_RX,	OMAP_PIN_INPUT	| OMAP_MUX_MODE0), +	OMAP4_MUX(UART2_TX,	OMAP_PIN_OUTPUT	| OMAP_MUX_MODE0), +  	{ .reg_offset = OMAP_MUX_TERMINATOR },  }; diff --git a/arch/arm/mach-omap2/cclock2420_data.c b/arch/arm/mach-omap2/cclock2420_data.c index 7e5febe456d..ab7e952d207 100644 --- a/arch/arm/mach-omap2/cclock2420_data.c +++ b/arch/arm/mach-omap2/cclock2420_data.c @@ -1935,6 +1935,8 @@ int __init omap2420_clk_init(void)  			omap2_init_clk_hw_omap_clocks(c->lk.clk);  	} +	omap2xxx_clkt_vps_late_init(); +  	omap2_clk_disable_autoidle_all();  	omap2_clk_enable_init_clocks(enable_init_clks, diff --git a/arch/arm/mach-omap2/cclock2430_data.c b/arch/arm/mach-omap2/cclock2430_data.c index eda079b96c6..eb3dab68d53 100644 --- a/arch/arm/mach-omap2/cclock2430_data.c +++ b/arch/arm/mach-omap2/cclock2430_data.c @@ -2050,6 +2050,8 @@ int __init omap2430_clk_init(void)  			omap2_init_clk_hw_omap_clocks(c->lk.clk);  	} +	omap2xxx_clkt_vps_late_init(); +  	omap2_clk_disable_autoidle_all();  	omap2_clk_enable_init_clocks(enable_init_clks, diff --git a/arch/arm/mach-omap2/cclock44xx_data.c b/arch/arm/mach-omap2/cclock44xx_data.c index 5789a5e2556..a2cc046b47f 100644 --- a/arch/arm/mach-omap2/cclock44xx_data.c +++ b/arch/arm/mach-omap2/cclock44xx_data.c @@ -2026,14 +2026,13 @@ int __init omap4xxx_clk_init(void)  	 * On OMAP4460 the ABE DPLL fails to turn on if in idle low-power  	 * state when turning the ABE clock domain. Workaround this by  	 * locking the ABE DPLL on boot. +	 * Lock the ABE DPLL in any case to avoid issues with audio.  	 */ -	if (cpu_is_omap446x()) { -		rc = clk_set_parent(&abe_dpll_refclk_mux_ck, &sys_32k_ck); -		if (!rc) -			rc = clk_set_rate(&dpll_abe_ck, OMAP4_DPLL_ABE_DEFFREQ); -		if (rc) -			pr_err("%s: failed to configure ABE DPLL!\n", __func__); -	} +	rc = clk_set_parent(&abe_dpll_refclk_mux_ck, &sys_32k_ck); +	if (!rc) +		rc = clk_set_rate(&dpll_abe_ck, OMAP4_DPLL_ABE_DEFFREQ); +	if (rc) +		pr_err("%s: failed to configure ABE DPLL!\n", __func__);  	return 0;  } diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index 5e304d0719a..626f3ea3142 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c @@ -639,7 +639,7 @@ static int count_ocp2scp_devices(struct omap_ocp2scp_dev *ocp2scp_dev)  	return cnt;  } -static void omap_init_ocp2scp(void) +static void __init omap_init_ocp2scp(void)  {  	struct omap_hwmod	*oh;  	struct platform_device	*pdev; diff --git a/arch/arm/mach-omap2/drm.c b/arch/arm/mach-omap2/drm.c index 4c7566c7e24..2a2cfa88ddb 100644 --- a/arch/arm/mach-omap2/drm.c +++ b/arch/arm/mach-omap2/drm.c @@ -25,6 +25,7 @@  #include <linux/dma-mapping.h>  #include <linux/platform_data/omap_drm.h> +#include "soc.h"  #include "omap_device.h"  #include "omap_hwmod.h" @@ -56,7 +57,7 @@ static int __init omap_init_drm(void)  			oh->name);  	} -	platform_data.omaprev = GET_OMAP_REVISION(); +	platform_data.omaprev = GET_OMAP_TYPE;  	return platform_device_register(&omap_drm_device); diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c index 129d5081ed1..793f54ac7d1 100644 --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c @@ -2132,8 +2132,12 @@ static struct omap_hwmod omap44xx_mcpdm_hwmod = {  	 * currently reset very early during boot, before I2C is  	 * available, so it doesn't seem that we have any choice in  	 * the kernel other than to avoid resetting it. +	 * +	 * Also, McPDM needs to be configured to NO_IDLE mode when it +	 * is in used otherwise vital clocks will be gated which +	 * results 'slow motion' audio playback.  	 */ -	.flags		= HWMOD_EXT_OPT_MAIN_CLK, +	.flags		= HWMOD_EXT_OPT_MAIN_CLK | HWMOD_SWSUP_SIDLE,  	.mpu_irqs	= omap44xx_mcpdm_irqs,  	.sdma_reqs	= omap44xx_mcpdm_sdma_reqs,  	.main_clk	= "mcpdm_fck", diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c index 691aa674665..b8ad6e632bb 100644 --- a/arch/arm/mach-omap2/timer.c +++ b/arch/arm/mach-omap2/timer.c @@ -165,15 +165,11 @@ static struct device_node * __init omap_get_timer_dt(struct of_device_id *match,  	struct device_node *np;  	for_each_matching_node(np, match) { -		if (!of_device_is_available(np)) { -			of_node_put(np); +		if (!of_device_is_available(np))  			continue; -		} -		if (property && !of_get_property(np, property, NULL)) { -			of_node_put(np); +		if (property && !of_get_property(np, property, NULL))  			continue; -		}  		of_add_property(np, &device_disabled);  		return np; diff --git a/arch/arm/mach-s3c64xx/mach-crag6410-module.c b/arch/arm/mach-s3c64xx/mach-crag6410-module.c index 553059f5184..755c0bb119f 100644 --- a/arch/arm/mach-s3c64xx/mach-crag6410-module.c +++ b/arch/arm/mach-s3c64xx/mach-crag6410-module.c @@ -47,7 +47,7 @@ static struct spi_board_info wm1253_devs[] = {  		.bus_num	= 0,  		.chip_select	= 0,  		.mode		= SPI_MODE_0, -		.irq		= S3C_EINT(5), +		.irq		= S3C_EINT(4),  		.controller_data = &wm0010_spi_csinfo,  		.platform_data = &wm0010_pdata,  	}, diff --git a/arch/arm/mach-s3c64xx/pm.c b/arch/arm/mach-s3c64xx/pm.c index 7feb426fc20..d2e1a16690b 100644 --- a/arch/arm/mach-s3c64xx/pm.c +++ b/arch/arm/mach-s3c64xx/pm.c @@ -338,8 +338,10 @@ int __init s3c64xx_pm_init(void)  	for (i = 0; i < ARRAY_SIZE(s3c64xx_pm_domains); i++)  		pm_genpd_init(&s3c64xx_pm_domains[i]->pd, NULL, false); +#ifdef CONFIG_S3C_DEV_FB  	if (dev_get_platdata(&s3c_device_fb.dev))  		pm_genpd_add_device(&s3c64xx_pm_f.pd, &s3c_device_fb.dev); +#endif  	return 0;  } diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index 6b2fb87c869..076c26d4386 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -774,25 +774,27 @@ static void dma_cache_maint_page(struct page *page, unsigned long offset,  	size_t size, enum dma_data_direction dir,  	void (*op)(const void *, size_t, int))  { +	unsigned long pfn; +	size_t left = size; + +	pfn = page_to_pfn(page) + offset / PAGE_SIZE; +	offset %= PAGE_SIZE; +  	/*  	 * A single sg entry may refer to multiple physically contiguous  	 * pages.  But we still need to process highmem pages individually.  	 * If highmem is not configured then the bulk of this loop gets  	 * optimized out.  	 */ -	size_t left = size;  	do {  		size_t len = left;  		void *vaddr; +		page = pfn_to_page(pfn); +  		if (PageHighMem(page)) { -			if (len + offset > PAGE_SIZE) { -				if (offset >= PAGE_SIZE) { -					page += offset / PAGE_SIZE; -					offset %= PAGE_SIZE; -				} +			if (len + offset > PAGE_SIZE)  				len = PAGE_SIZE - offset; -			}  			vaddr = kmap_high_get(page);  			if (vaddr) {  				vaddr += offset; @@ -809,7 +811,7 @@ static void dma_cache_maint_page(struct page *page, unsigned long offset,  			op(vaddr, len, dir);  		}  		offset = 0; -		page++; +		pfn++;  		left -= len;  	} while (left);  } diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index 9f0610243bd..ce328c7f5c9 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c @@ -283,7 +283,7 @@ static struct mem_type mem_types[] = {  	},  	[MT_MEMORY_SO] = {  		.prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | -				L_PTE_MT_UNCACHED, +				L_PTE_MT_UNCACHED | L_PTE_XN,  		.prot_l1   = PMD_TYPE_TABLE,  		.prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_S |  				PMD_SECT_UNCACHED | PMD_SECT_XN, diff --git a/arch/arm/plat-versatile/headsmp.S b/arch/arm/plat-versatile/headsmp.S index dd703ef09b8..b178d44e9ea 100644 --- a/arch/arm/plat-versatile/headsmp.S +++ b/arch/arm/plat-versatile/headsmp.S @@ -20,7 +20,7 @@   */  ENTRY(versatile_secondary_startup)  	mrc	p15, 0, r0, c0, c0, 5 -	and	r0, r0, #15 +	bic	r0, #0xff000000  	adr	r4, 1f  	ldmia	r4, {r5, r6}  	sub	r4, r4, r5 diff --git a/arch/arm/vfp/entry.S b/arch/arm/vfp/entry.S index cc926c98598..323ce1a62bb 100644 --- a/arch/arm/vfp/entry.S +++ b/arch/arm/vfp/entry.S @@ -22,7 +22,7 @@  @  IRQs disabled.  @  ENTRY(do_vfp) -#ifdef CONFIG_PREEMPT +#ifdef CONFIG_PREEMPT_COUNT  	ldr	r4, [r10, #TI_PREEMPT]	@ get preempt count  	add	r11, r4, #1		@ increment it  	str	r11, [r10, #TI_PREEMPT] @@ -35,7 +35,7 @@ ENTRY(do_vfp)  ENDPROC(do_vfp)  ENTRY(vfp_null_entry) -#ifdef CONFIG_PREEMPT +#ifdef CONFIG_PREEMPT_COUNT  	get_thread_info	r10  	ldr	r4, [r10, #TI_PREEMPT]	@ get preempt count  	sub	r11, r4, #1		@ decrement it @@ -53,7 +53,7 @@ ENDPROC(vfp_null_entry)  	__INIT  ENTRY(vfp_testing_entry) -#ifdef CONFIG_PREEMPT +#ifdef CONFIG_PREEMPT_COUNT  	get_thread_info	r10  	ldr	r4, [r10, #TI_PREEMPT]	@ get preempt count  	sub	r11, r4, #1		@ decrement it diff --git a/arch/arm/vfp/vfphw.S b/arch/arm/vfp/vfphw.S index ea0349f6358..dd5e56f95f3 100644 --- a/arch/arm/vfp/vfphw.S +++ b/arch/arm/vfp/vfphw.S @@ -168,7 +168,7 @@ vfp_hw_state_valid:  					@ else it's one 32-bit instruction, so  					@ always subtract 4 from the following  					@ instruction address. -#ifdef CONFIG_PREEMPT +#ifdef CONFIG_PREEMPT_COUNT  	get_thread_info	r10  	ldr	r4, [r10, #TI_PREEMPT]	@ get preempt count  	sub	r11, r4, #1		@ decrement it @@ -192,7 +192,7 @@ look_for_VFP_exceptions:  	@ not recognised by VFP  	DBGSTR	"not VFP" -#ifdef CONFIG_PREEMPT +#ifdef CONFIG_PREEMPT_COUNT  	get_thread_info	r10  	ldr	r4, [r10, #TI_PREEMPT]	@ get preempt count  	sub	r11, r4, #1		@ decrement it  |