diff options
Diffstat (limited to 'arch')
71 files changed, 289 insertions, 294 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 diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h index 07fea290d7c..fe32c0e4ac0 100644 --- a/arch/arm64/include/asm/elf.h +++ b/arch/arm64/include/asm/elf.h @@ -26,7 +26,10 @@  typedef unsigned long elf_greg_t; -#define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t)) +#define ELF_NGREG (sizeof(struct user_pt_regs) / sizeof(elf_greg_t)) +#define ELF_CORE_COPY_REGS(dest, regs)	\ +	*(struct user_pt_regs *)&(dest) = (regs)->user_regs; +  typedef elf_greg_t elf_gregset_t[ELF_NGREG];  typedef struct user_fpsimd_state elf_fpregset_t; diff --git a/arch/ia64/kernel/ptrace.c b/arch/ia64/kernel/ptrace.c index 4265ff64219..b7a5fffe092 100644 --- a/arch/ia64/kernel/ptrace.c +++ b/arch/ia64/kernel/ptrace.c @@ -672,33 +672,6 @@ ptrace_attach_sync_user_rbs (struct task_struct *child)  	read_unlock(&tasklist_lock);  } -static inline int -thread_matches (struct task_struct *thread, unsigned long addr) -{ -	unsigned long thread_rbs_end; -	struct pt_regs *thread_regs; - -	if (ptrace_check_attach(thread, 0) < 0) -		/* -		 * If the thread is not in an attachable state, we'll -		 * ignore it.  The net effect is that if ADDR happens -		 * to overlap with the portion of the thread's -		 * register backing store that is currently residing -		 * on the thread's kernel stack, then ptrace() may end -		 * up accessing a stale value.  But if the thread -		 * isn't stopped, that's a problem anyhow, so we're -		 * doing as well as we can... -		 */ -		return 0; - -	thread_regs = task_pt_regs(thread); -	thread_rbs_end = ia64_get_user_rbs_end(thread, thread_regs, NULL); -	if (!on_kernel_rbs(addr, thread_regs->ar_bspstore, thread_rbs_end)) -		return 0; - -	return 1;	/* looks like we've got a winner */ -} -  /*   * Write f32-f127 back to task->thread.fph if it has been modified.   */ diff --git a/arch/m68k/include/asm/dma-mapping.h b/arch/m68k/include/asm/dma-mapping.h index 17f7a45948e..3e6b8445af6 100644 --- a/arch/m68k/include/asm/dma-mapping.h +++ b/arch/m68k/include/asm/dma-mapping.h @@ -21,6 +21,22 @@ extern void *dma_alloc_coherent(struct device *, size_t,  extern void dma_free_coherent(struct device *, size_t,  			      void *, dma_addr_t); +static inline void *dma_alloc_attrs(struct device *dev, size_t size, +				    dma_addr_t *dma_handle, gfp_t flag, +				    struct dma_attrs *attrs) +{ +	/* attrs is not supported and ignored */ +	return dma_alloc_coherent(dev, size, dma_handle, flag); +} + +static inline void dma_free_attrs(struct device *dev, size_t size, +				  void *cpu_addr, dma_addr_t dma_handle, +				  struct dma_attrs *attrs) +{ +	/* attrs is not supported and ignored */ +	dma_free_coherent(dev, size, cpu_addr, dma_handle); +} +  static inline void *dma_alloc_noncoherent(struct device *dev, size_t size,  					  dma_addr_t *handle, gfp_t flag)  { diff --git a/arch/m68k/include/asm/pgtable_no.h b/arch/m68k/include/asm/pgtable_no.h index bf86b29fe64..037028f4ab7 100644 --- a/arch/m68k/include/asm/pgtable_no.h +++ b/arch/m68k/include/asm/pgtable_no.h @@ -64,6 +64,8 @@ extern unsigned int kobjsize(const void *objp);   */  #define	VMALLOC_START	0  #define	VMALLOC_END	0xffffffff +#define	KMAP_START	0 +#define	KMAP_END	0xffffffff  #include <asm-generic/pgtable.h> diff --git a/arch/m68k/include/asm/unistd.h b/arch/m68k/include/asm/unistd.h index 847994ce680..f9337f61466 100644 --- a/arch/m68k/include/asm/unistd.h +++ b/arch/m68k/include/asm/unistd.h @@ -4,7 +4,7 @@  #include <uapi/asm/unistd.h> -#define NR_syscalls		348 +#define NR_syscalls		349  #define __ARCH_WANT_OLD_READDIR  #define __ARCH_WANT_OLD_STAT diff --git a/arch/m68k/include/uapi/asm/unistd.h b/arch/m68k/include/uapi/asm/unistd.h index b94bfbf9070..625f321001d 100644 --- a/arch/m68k/include/uapi/asm/unistd.h +++ b/arch/m68k/include/uapi/asm/unistd.h @@ -353,5 +353,6 @@  #define __NR_process_vm_readv	345  #define __NR_process_vm_writev	346  #define __NR_kcmp		347 +#define __NR_finit_module	348  #endif /* _UAPI_ASM_M68K_UNISTD_H_ */ diff --git a/arch/m68k/kernel/syscalltable.S b/arch/m68k/kernel/syscalltable.S index c30da5b3f2d..3f04ea0ab80 100644 --- a/arch/m68k/kernel/syscalltable.S +++ b/arch/m68k/kernel/syscalltable.S @@ -368,4 +368,5 @@ ENTRY(sys_call_table)  	.long sys_process_vm_readv	/* 345 */  	.long sys_process_vm_writev  	.long sys_kcmp +	.long sys_finit_module diff --git a/arch/m68k/mm/init.c b/arch/m68k/mm/init.c index f0e05bce92f..afd8106fd83 100644 --- a/arch/m68k/mm/init.c +++ b/arch/m68k/mm/init.c @@ -39,6 +39,11 @@  void *empty_zero_page;  EXPORT_SYMBOL(empty_zero_page); +#if !defined(CONFIG_SUN3) && !defined(CONFIG_COLDFIRE) +extern void init_pointer_table(unsigned long ptable); +extern pmd_t *zero_pgtable; +#endif +  #ifdef CONFIG_MMU  pg_data_t pg_data_map[MAX_NUMNODES]; @@ -69,9 +74,6 @@ void __init m68k_setup_node(int node)  	node_set_online(node);  } -extern void init_pointer_table(unsigned long ptable); -extern pmd_t *zero_pgtable; -  #else /* CONFIG_MMU */  /* diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S index bfb44247d7a..eb7850b46c2 100644 --- a/arch/parisc/kernel/entry.S +++ b/arch/parisc/kernel/entry.S @@ -1865,7 +1865,7 @@ syscall_restore:  	/* Are we being ptraced? */  	ldw	TASK_FLAGS(%r1),%r19 -	ldi	(_TIF_SINGLESTEP|_TIF_BLOCKSTEP),%r2 +	ldi	_TIF_SYSCALL_TRACE_MASK,%r2  	and,COND(=)	%r19,%r2,%r0  	b,n	syscall_restore_rfi @@ -1978,15 +1978,23 @@ syscall_restore_rfi:  	/* sr2 should be set to zero for userspace syscalls */  	STREG	%r0,TASK_PT_SR2(%r1) -pt_regs_ok:  	LDREG	TASK_PT_GR31(%r1),%r2 -	depi	3,31,2,%r2			   /* ensure return to user mode. */ -	STREG	%r2,TASK_PT_IAOQ0(%r1) +	depi	3,31,2,%r2		   /* ensure return to user mode. */ +	STREG   %r2,TASK_PT_IAOQ0(%r1)  	ldo	4(%r2),%r2  	STREG	%r2,TASK_PT_IAOQ1(%r1) +	b	intr_restore  	copy	%r25,%r16 + +pt_regs_ok: +	LDREG	TASK_PT_IAOQ0(%r1),%r2 +	depi	3,31,2,%r2		   /* ensure return to user mode. */ +	STREG	%r2,TASK_PT_IAOQ0(%r1) +	LDREG	TASK_PT_IAOQ1(%r1),%r2 +	depi	3,31,2,%r2 +	STREG	%r2,TASK_PT_IAOQ1(%r1)  	b	intr_restore -	nop +	copy	%r25,%r16  	.import schedule,code  syscall_do_resched: diff --git a/arch/parisc/kernel/irq.c b/arch/parisc/kernel/irq.c index c0b1affc06a..0299d63cd11 100644 --- a/arch/parisc/kernel/irq.c +++ b/arch/parisc/kernel/irq.c @@ -410,11 +410,13 @@ void __init init_IRQ(void)  {  	local_irq_disable();	/* PARANOID - should already be disabled */  	mtctl(~0UL, 23);	/* EIRR : clear all pending external intr */ -	claim_cpu_irqs();  #ifdef CONFIG_SMP -	if (!cpu_eiem) +	if (!cpu_eiem) { +		claim_cpu_irqs();  		cpu_eiem = EIEM_MASK(IPI_IRQ) | EIEM_MASK(TIMER_IRQ); +	}  #else +	claim_cpu_irqs();  	cpu_eiem = EIEM_MASK(TIMER_IRQ);  #endif          set_eiem(cpu_eiem);	/* EIEM : enable all external intr */ diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c index 857c2f54547..534abd4936e 100644 --- a/arch/parisc/kernel/ptrace.c +++ b/arch/parisc/kernel/ptrace.c @@ -26,7 +26,7 @@  #include <asm/asm-offsets.h>  /* PSW bits we allow the debugger to modify */ -#define USER_PSW_BITS	(PSW_N | PSW_V | PSW_CB) +#define USER_PSW_BITS	(PSW_N | PSW_B | PSW_V | PSW_CB)  /*   * Called by kernel/ptrace.c when detaching.. diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c index 53799695599..fd051705a40 100644 --- a/arch/parisc/kernel/signal.c +++ b/arch/parisc/kernel/signal.c @@ -190,8 +190,10 @@ get_sigframe(struct k_sigaction *ka, unsigned long sp, size_t frame_size)  	DBG(1,"get_sigframe: ka = %#lx, sp = %#lx, frame_size = %#lx\n",  			(unsigned long)ka, sp, frame_size); +	/* Align alternate stack and reserve 64 bytes for the signal +	   handler's frame marker.  */  	if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && ! sas_ss_flags(sp)) -		sp = current->sas_ss_sp; /* Stacks grow up! */ +		sp = (current->sas_ss_sp + 0x7f) & ~0x3f; /* Stacks grow up! */  	DBG(1,"get_sigframe: Returning sp = %#lx\n", (unsigned long)sp);  	return (void __user *) sp; /* Stacks grow up.  Fun. */ diff --git a/arch/parisc/math-emu/cnv_float.h b/arch/parisc/math-emu/cnv_float.h index 9071e093164..933423fa514 100644 --- a/arch/parisc/math-emu/cnv_float.h +++ b/arch/parisc/math-emu/cnv_float.h @@ -347,16 +347,15 @@      Sgl_isinexact_to_fix(sgl_value,exponent)  #define Duint_from_sgl_mantissa(sgl_value,exponent,dresultA,dresultB)	\ -  {Sall(sgl_value) <<= SGL_EXP_LENGTH;  /*  left-justify  */		\ +  {unsigned int val = Sall(sgl_value) << SGL_EXP_LENGTH;		\      if (exponent <= 31) {						\ -    	Dintp1(dresultA) = 0;						\ -    	Dintp2(dresultB) = (unsigned)Sall(sgl_value) >> (31 - exponent); \ +	Dintp1(dresultA) = 0;						\ +	Dintp2(dresultB) = val >> (31 - exponent);			\      }									\      else {								\ -    	Dintp1(dresultA) = Sall(sgl_value) >> (63 - exponent);		\ -    	Dintp2(dresultB) = Sall(sgl_value) << (exponent - 31);		\ +	Dintp1(dresultA) = val >> (63 - exponent);			\ +	Dintp2(dresultB) = exponent <= 62 ? val << (exponent - 31) : 0;	\      }									\ -    Sall(sgl_value) >>= SGL_EXP_LENGTH;  /* return to original */	\    }  #define Duint_setzero(dresultA,dresultB) 	\ diff --git a/arch/powerpc/kvm/emulate.c b/arch/powerpc/kvm/emulate.c index b0855e5d890..9d9cddc5b34 100644 --- a/arch/powerpc/kvm/emulate.c +++ b/arch/powerpc/kvm/emulate.c @@ -39,6 +39,7 @@  #define OP_31_XOP_TRAP      4  #define OP_31_XOP_LWZX      23  #define OP_31_XOP_TRAP_64   68 +#define OP_31_XOP_DCBF      86  #define OP_31_XOP_LBZX      87  #define OP_31_XOP_STWX      151  #define OP_31_XOP_STBX      215 @@ -374,6 +375,7 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)  			emulated = kvmppc_emulate_mtspr(vcpu, sprn, rs);  			break; +		case OP_31_XOP_DCBF:  		case OP_31_XOP_DCBI:  			/* Do nothing. The guest is performing dcbi because  			 * hardware DMA is not snooped by the dcache, but diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c index 4428fd178bc..6774c17a557 100644 --- a/arch/x86/kernel/cpu/perf_event.c +++ b/arch/x86/kernel/cpu/perf_event.c @@ -340,9 +340,6 @@ int x86_setup_perfctr(struct perf_event *event)  		/* BTS is currently only allowed for user-mode. */  		if (!attr->exclude_kernel)  			return -EOPNOTSUPP; - -		if (!attr->exclude_guest) -			return -EOPNOTSUPP;  	}  	hwc->config |= config; @@ -385,9 +382,6 @@ int x86_pmu_hw_config(struct perf_event *event)  	if (event->attr.precise_ip) {  		int precise = 0; -		if (!event->attr.exclude_guest) -			return -EOPNOTSUPP; -  		/* Support for constant skid */  		if (x86_pmu.pebs_active && !x86_pmu.pebs_broken) {  			precise++; diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index ff84d5469d7..6ed91d9980e 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S @@ -1065,7 +1065,6 @@ ENTRY(xen_failsafe_callback)  	lea 16(%esp),%esp  	CFI_ADJUST_CFA_OFFSET -16  	jz 5f -	addl $16,%esp  	jmp iret_exc  5:	pushl_cfi $-1 /* orig_ax = -1 => not a system call */  	SAVE_ALL diff --git a/arch/x86/kernel/step.c b/arch/x86/kernel/step.c index cd3b2438a98..9b4d51d0c0d 100644 --- a/arch/x86/kernel/step.c +++ b/arch/x86/kernel/step.c @@ -165,10 +165,11 @@ void set_task_blockstep(struct task_struct *task, bool on)  	 * Ensure irq/preemption can't change debugctl in between.  	 * Note also that both TIF_BLOCKSTEP and debugctl should  	 * be changed atomically wrt preemption. -	 * FIXME: this means that set/clear TIF_BLOCKSTEP is simply -	 * wrong if task != current, SIGKILL can wakeup the stopped -	 * tracee and set/clear can play with the running task, this -	 * can confuse the next __switch_to_xtra(). +	 * +	 * NOTE: this means that set/clear TIF_BLOCKSTEP is only safe if +	 * task is current or it can't be running, otherwise we can race +	 * with __switch_to_xtra(). We rely on ptrace_freeze_traced() but +	 * PTRACE_KILL is not safe.  	 */  	local_irq_disable();  	debugctl = get_debugctlmsr(); diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index 4f7d2599b48..34bc4cee888 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c @@ -432,13 +432,6 @@ static void __cpuinit xen_play_dead(void) /* used only with HOTPLUG_CPU */  	play_dead_common();  	HYPERVISOR_vcpu_op(VCPUOP_down, smp_processor_id(), NULL);  	cpu_bringup(); -	/* -	 * Balance out the preempt calls - as we are running in cpu_idle -	 * loop which has been called at bootup from cpu_bringup_and_idle. -	 * The cpucpu_bringup_and_idle called cpu_bringup which made a -	 * preempt_disable() So this preempt_enable will balance it out. -	 */ -	preempt_enable();  }  #else /* !CONFIG_HOTPLUG_CPU */  |