diff options
Diffstat (limited to 'arch/arm')
100 files changed, 481 insertions, 396 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 5b714695b01..13b739469c5 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -49,7 +49,6 @@ config ARM  	select HAVE_REGS_AND_STACK_ACCESS_API  	select HAVE_SYSCALL_TRACEPOINTS  	select HAVE_UID16 -	select HAVE_VIRT_TO_BUS  	select KTIME_SCALAR  	select PERF_USE_VMALLOC  	select RTC_LIB @@ -556,7 +555,6 @@ config ARCH_IXP4XX  config ARCH_DOVE  	bool "Marvell Dove"  	select ARCH_REQUIRE_GPIOLIB -	select COMMON_CLK_DOVE  	select CPU_V7  	select GENERIC_CLOCKEVENTS  	select MIGHT_HAVE_PCI @@ -744,6 +742,7 @@ config ARCH_RPC  	select NEED_MACH_IO_H  	select NEED_MACH_MEMORY_H  	select NO_IOPORT +	select VIRT_TO_BUS  	help  	  On the Acorn Risc-PC, Linux can support the internal IDE disk and  	  CD-ROM interface, serial and parallel port, and the floppy drive. @@ -879,6 +878,7 @@ config ARCH_SHARK  	select ISA_DMA  	select NEED_MACH_MEMORY_H  	select PCI +	select VIRT_TO_BUS  	select ZONE_DMA  	help  	  Support for the StrongARM based Digital DNARD machine, also known @@ -1006,12 +1006,12 @@ config ARCH_MULTI_V4_V5  	bool  config ARCH_MULTI_V6 -	bool "ARMv6 based platforms (ARM11, Scorpion, ...)" +	bool "ARMv6 based platforms (ARM11)"  	select ARCH_MULTI_V6_V7  	select CPU_V6  config ARCH_MULTI_V7 -	bool "ARMv7 based platforms (Cortex-A, PJ4, Krait)" +	bool "ARMv7 based platforms (Cortex-A, PJ4, Scorpion, Krait)"  	default y  	select ARCH_MULTI_V6_V7  	select ARCH_VEXPRESS @@ -1462,10 +1462,6 @@ config ISA_DMA  	bool  	select ISA_DMA_API -config ARCH_NO_VIRT_TO_BUS -	def_bool y -	depends on !ARCH_RPC && !ARCH_NETWINDER && !ARCH_SHARK -  # Select ISA DMA interface  config ISA_DMA_API  	bool @@ -1657,13 +1653,16 @@ config LOCAL_TIMERS  	  accounting to be spread across the timer interval, preventing a  	  "thundering herd" at every timer tick. +# The GPIO number here must be sorted by descending number. In case of +# a multiplatform kernel, we just want the highest value required by the +# selected platforms.  config ARCH_NR_GPIO  	int  	default 1024 if ARCH_SHMOBILE || ARCH_TEGRA -	default 355 if ARCH_U8500 -	default 264 if MACH_H4700  	default 512 if SOC_OMAP5 +	default 355 if ARCH_U8500  	default 288 if ARCH_VT8500 || ARCH_SUNXI +	default 264 if MACH_H4700  	default 0  	help  	  Maximum number of GPIOs in the system. @@ -1887,8 +1886,9 @@ config XEN_DOM0  config XEN  	bool "Xen guest support on ARM (EXPERIMENTAL)" -	depends on ARM && OF +	depends on ARM && AEABI && OF  	depends on CPU_V7 && !CPU_V6 +	depends on !GENERIC_ATOMIC64  	help  	  Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index acddddac7ee..9b31f4311ea 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug @@ -492,9 +492,10 @@ config DEBUG_IMX_UART_PORT  						DEBUG_IMX31_UART || \  						DEBUG_IMX35_UART || \  						DEBUG_IMX51_UART || \ -						DEBUG_IMX50_IMX53_UART || \ +						DEBUG_IMX53_UART || \  						DEBUG_IMX6Q_UART  	default 1 +	depends on ARCH_MXC  	help  	  Choose UART port on which kernel low-level debug messages  	  should be output. diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile index 71768b8a1ab..84aa2caf07e 100644 --- a/arch/arm/boot/Makefile +++ b/arch/arm/boot/Makefile @@ -115,4 +115,4 @@ i:  	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \  	$(obj)/Image System.map "$(INSTALL_PATH)" -subdir-	    := bootp compressed +subdir-	    := bootp compressed dts diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile index 5cad8a6dadb..afed28e37ea 100644 --- a/arch/arm/boot/compressed/Makefile +++ b/arch/arm/boot/compressed/Makefile @@ -120,7 +120,7 @@ ORIG_CFLAGS := $(KBUILD_CFLAGS)  KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS))  endif -ccflags-y := -fpic -fno-builtin -I$(obj) +ccflags-y := -fpic -mno-single-pic-base -fno-builtin -I$(obj)  asflags-y := -Wa,-march=all -DZIMAGE  # Supply kernel BSS size to the decompressor via a linker symbol. diff --git a/arch/arm/boot/dts/armada-370-rd.dts b/arch/arm/boot/dts/armada-370-rd.dts index f8e4855bc9a..070bba4f258 100644 --- a/arch/arm/boot/dts/armada-370-rd.dts +++ b/arch/arm/boot/dts/armada-370-rd.dts @@ -64,5 +64,13 @@  			status = "okay";  			/* No CD or WP GPIOs */  		}; + +		usb@d0050000 { +			status = "okay"; +		}; + +		usb@d0051000 { +			status = "okay"; +		};  	};  }; diff --git a/arch/arm/boot/dts/armada-370-xp.dtsi b/arch/arm/boot/dts/armada-370-xp.dtsi index 6f1acc75e15..5b708208b60 100644 --- a/arch/arm/boot/dts/armada-370-xp.dtsi +++ b/arch/arm/boot/dts/armada-370-xp.dtsi @@ -31,7 +31,6 @@  	mpic: interrupt-controller@d0020000 {  	      compatible = "marvell,mpic";  	      #interrupt-cells = <1>; -	      #address-cells = <1>;  	      #size-cells = <1>;  	      interrupt-controller;  	}; @@ -54,7 +53,7 @@  				reg = <0xd0012000 0x100>;  				reg-shift = <2>;  				interrupts = <41>; -				reg-io-width = <4>; +				reg-io-width = <1>;  				status = "disabled";  		};  		serial@d0012100 { @@ -62,7 +61,7 @@  				reg = <0xd0012100 0x100>;  				reg-shift = <2>;  				interrupts = <42>; -				reg-io-width = <4>; +				reg-io-width = <1>;  				status = "disabled";  		}; diff --git a/arch/arm/boot/dts/armada-xp.dtsi b/arch/arm/boot/dts/armada-xp.dtsi index 1443949c165..ca00d8326c8 100644 --- a/arch/arm/boot/dts/armada-xp.dtsi +++ b/arch/arm/boot/dts/armada-xp.dtsi @@ -46,7 +46,7 @@  				reg = <0xd0012200 0x100>;  				reg-shift = <2>;  				interrupts = <43>; -				reg-io-width = <4>; +				reg-io-width = <1>;  				status = "disabled";  		};  		serial@d0012300 { @@ -54,7 +54,7 @@  				reg = <0xd0012300 0x100>;  				reg-shift = <2>;  				interrupts = <44>; -				reg-io-width = <4>; +				reg-io-width = <1>;  				status = "disabled";  		}; diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi index aa98e641931..a98c0d50fbb 100644 --- a/arch/arm/boot/dts/at91sam9x5.dtsi +++ b/arch/arm/boot/dts/at91sam9x5.dtsi @@ -238,8 +238,32 @@  				nand {  					pinctrl_nand: nand-0 {  						atmel,pins = -							<3 4 0x0 0x1	/* PD5 gpio RDY pin pull_up */ -							 3 5 0x0 0x1>;	/* PD4 gpio enable pin pull_up */ +							<3 0 0x1 0x0	/* PD0 periph A Read Enable */ +							 3 1 0x1 0x0	/* PD1 periph A Write Enable */ +							 3 2 0x1 0x0	/* PD2 periph A Address Latch Enable */ +							 3 3 0x1 0x0	/* PD3 periph A Command Latch Enable */ +							 3 4 0x0 0x1	/* PD4 gpio Chip Enable pin pull_up */ +							 3 5 0x0 0x1	/* PD5 gpio RDY/BUSY pin pull_up */ +							 3 6 0x1 0x0	/* PD6 periph A Data bit 0 */ +							 3 7 0x1 0x0	/* PD7 periph A Data bit 1 */ +							 3 8 0x1 0x0	/* PD8 periph A Data bit 2 */ +							 3 9 0x1 0x0	/* PD9 periph A Data bit 3 */ +							 3 10 0x1 0x0	/* PD10 periph A Data bit 4 */ +							 3 11 0x1 0x0	/* PD11 periph A Data bit 5 */ +							 3 12 0x1 0x0	/* PD12 periph A Data bit 6 */ +							 3 13 0x1 0x0>;	/* PD13 periph A Data bit 7 */ +					}; + +					pinctrl_nand_16bits: nand_16bits-0 { +						atmel,pins = +							<3 14 0x1 0x0	/* PD14 periph A Data bit 8 */ +							 3 15 0x1 0x0	/* PD15 periph A Data bit 9 */ +							 3 16 0x1 0x0	/* PD16 periph A Data bit 10 */ +							 3 17 0x1 0x0	/* PD17 periph A Data bit 11 */ +							 3 18 0x1 0x0	/* PD18 periph A Data bit 12 */ +							 3 19 0x1 0x0	/* PD19 periph A Data bit 13 */ +							 3 20 0x1 0x0	/* PD20 periph A Data bit 14 */ +							 3 21 0x1 0x0>;	/* PD21 periph A Data bit 15 */  					};  				}; diff --git a/arch/arm/boot/dts/bcm2835.dtsi b/arch/arm/boot/dts/bcm2835.dtsi index 4bf2a8774aa..7e0481e2441 100644 --- a/arch/arm/boot/dts/bcm2835.dtsi +++ b/arch/arm/boot/dts/bcm2835.dtsi @@ -105,7 +105,7 @@  			compatible = "fixed-clock";  			reg = <1>;  			#clock-cells = <0>; -			clock-frequency = <150000000>; +			clock-frequency = <250000000>;  		};  	};  }; diff --git a/arch/arm/boot/dts/dbx5x0.dtsi b/arch/arm/boot/dts/dbx5x0.dtsi index 69140ba99f4..9de93096601 100644 --- a/arch/arm/boot/dts/dbx5x0.dtsi +++ b/arch/arm/boot/dts/dbx5x0.dtsi @@ -319,9 +319,8 @@  				};  			}; -			ab8500@5 { +			ab8500 {  				compatible = "stericsson,ab8500"; -				reg = <5>; /* mailbox 5 is i2c */  				interrupt-parent = <&intc>;  				interrupts = <0 40 0x4>;  				interrupt-controller; diff --git a/arch/arm/boot/dts/dove.dtsi b/arch/arm/boot/dts/dove.dtsi index 67dbe20868a..f7509cafc37 100644 --- a/arch/arm/boot/dts/dove.dtsi +++ b/arch/arm/boot/dts/dove.dtsi @@ -197,6 +197,11 @@  			status = "disabled";  		}; +		rtc@d8500 { +			compatible = "marvell,orion-rtc"; +			reg = <0xd8500 0x20>; +		}; +  		crypto: crypto@30000 {  			compatible = "marvell,orion-crypto";  			reg = <0x30000 0x10000>, diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi index e1347fceb5b..1a62bcf18aa 100644 --- a/arch/arm/boot/dts/exynos4.dtsi +++ b/arch/arm/boot/dts/exynos4.dtsi @@ -275,18 +275,27 @@  			compatible = "arm,pl330", "arm,primecell";  			reg = <0x12680000 0x1000>;  			interrupts = <0 35 0>; +			#dma-cells = <1>; +			#dma-channels = <8>; +			#dma-requests = <32>;  		};  		pdma1: pdma@12690000 {  			compatible = "arm,pl330", "arm,primecell";  			reg = <0x12690000 0x1000>;  			interrupts = <0 36 0>; +			#dma-cells = <1>; +			#dma-channels = <8>; +			#dma-requests = <32>;  		};  		mdma1: mdma@12850000 {  			compatible = "arm,pl330", "arm,primecell";  			reg = <0x12850000 0x1000>;  			interrupts = <0 34 0>; +			#dma-cells = <1>; +			#dma-channels = <8>; +			#dma-requests = <1>;  		};  	};  }; diff --git a/arch/arm/boot/dts/exynos5440.dtsi b/arch/arm/boot/dts/exynos5440.dtsi index 5f3562ad674..9a99755920c 100644 --- a/arch/arm/boot/dts/exynos5440.dtsi +++ b/arch/arm/boot/dts/exynos5440.dtsi @@ -142,12 +142,18 @@  			compatible = "arm,pl330", "arm,primecell";  			reg = <0x120000 0x1000>;  			interrupts = <0 34 0>; +			#dma-cells = <1>; +			#dma-channels = <8>; +			#dma-requests = <32>;  		};  		pdma1: pdma@121B0000 {  			compatible = "arm,pl330", "arm,primecell";  			reg = <0x121000 0x1000>;  			interrupts = <0 35 0>; +			#dma-cells = <1>; +			#dma-channels = <8>; +			#dma-requests = <32>;  		};  	}; diff --git a/arch/arm/boot/dts/href.dtsi b/arch/arm/boot/dts/href.dtsi index 592fb9dc35b..379128eb9d9 100644 --- a/arch/arm/boot/dts/href.dtsi +++ b/arch/arm/boot/dts/href.dtsi @@ -221,7 +221,7 @@  				};  			}; -			ab8500@5 { +			ab8500 {  				ab8500-regulators {  					ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {  						regulator-name = "V-DISPLAY"; diff --git a/arch/arm/boot/dts/hrefv60plus.dts b/arch/arm/boot/dts/hrefv60plus.dts index 55f4191a626..2b587a74b81 100644 --- a/arch/arm/boot/dts/hrefv60plus.dts +++ b/arch/arm/boot/dts/hrefv60plus.dts @@ -158,7 +158,7 @@  				};  			}; -			ab8500@5 { +			ab8500 {  				ab8500-regulators {  					ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {  						regulator-name = "V-DISPLAY"; diff --git a/arch/arm/boot/dts/imx53-mba53.dts b/arch/arm/boot/dts/imx53-mba53.dts index e54fffd4836..468c0a1d48d 100644 --- a/arch/arm/boot/dts/imx53-mba53.dts +++ b/arch/arm/boot/dts/imx53-mba53.dts @@ -42,10 +42,9 @@  			fsl,pins = <689 0x10000		/* DISP1_DRDY	*/  				    482 0x10000		/* DISP1_HSYNC	*/  				    489 0x10000		/* DISP1_VSYNC	*/ -				    684 0x10000		/* DISP1_DAT_0	*/  				    515 0x10000		/* DISP1_DAT_22	*/  				    523 0x10000		/* DISP1_DAT_23	*/ -				    543 0x10000		/* DISP1_DAT_21	*/ +				    545 0x10000		/* DISP1_DAT_21	*/  				    553 0x10000		/* DISP1_DAT_20	*/  				    558 0x10000		/* DISP1_DAT_19	*/  				    564 0x10000		/* DISP1_DAT_18	*/ diff --git a/arch/arm/boot/dts/kirkwood-dns320.dts b/arch/arm/boot/dts/kirkwood-dns320.dts index 5bb0bf39d3b..c9c44b2f62d 100644 --- a/arch/arm/boot/dts/kirkwood-dns320.dts +++ b/arch/arm/boot/dts/kirkwood-dns320.dts @@ -42,12 +42,10 @@  	ocp@f1000000 {  		serial@12000 { -			clock-frequency = <166666667>;  			status = "okay";  		};  		serial@12100 { -			clock-frequency = <166666667>;  			status = "okay";  		};  	}; diff --git a/arch/arm/boot/dts/kirkwood-dns325.dts b/arch/arm/boot/dts/kirkwood-dns325.dts index d430713ea9b..e4e4930dc5c 100644 --- a/arch/arm/boot/dts/kirkwood-dns325.dts +++ b/arch/arm/boot/dts/kirkwood-dns325.dts @@ -50,7 +50,6 @@  			};  		};  		serial@12000 { -			clock-frequency = <200000000>;  			status = "okay";  		};  	}; diff --git a/arch/arm/boot/dts/kirkwood-dockstar.dts b/arch/arm/boot/dts/kirkwood-dockstar.dts index 2e3dd34e21a..0196cf6b0ef 100644 --- a/arch/arm/boot/dts/kirkwood-dockstar.dts +++ b/arch/arm/boot/dts/kirkwood-dockstar.dts @@ -37,7 +37,6 @@  			};  		};  		serial@12000 { -			clock-frequency = <200000000>;  			status = "ok";  		}; diff --git a/arch/arm/boot/dts/kirkwood-dreamplug.dts b/arch/arm/boot/dts/kirkwood-dreamplug.dts index ef2d8c70570..289e51d8637 100644 --- a/arch/arm/boot/dts/kirkwood-dreamplug.dts +++ b/arch/arm/boot/dts/kirkwood-dreamplug.dts @@ -38,7 +38,6 @@  			};  		};  		serial@12000 { -			clock-frequency = <200000000>;  			status = "ok";  		}; diff --git a/arch/arm/boot/dts/kirkwood-goflexnet.dts b/arch/arm/boot/dts/kirkwood-goflexnet.dts index 1b133e0c566..bd83b8fc7c8 100644 --- a/arch/arm/boot/dts/kirkwood-goflexnet.dts +++ b/arch/arm/boot/dts/kirkwood-goflexnet.dts @@ -73,7 +73,6 @@  			};  		};  		serial@12000 { -			clock-frequency = <200000000>;  			status = "ok";  		}; diff --git a/arch/arm/boot/dts/kirkwood-ib62x0.dts b/arch/arm/boot/dts/kirkwood-ib62x0.dts index 71902da33d6..5335b1aa860 100644 --- a/arch/arm/boot/dts/kirkwood-ib62x0.dts +++ b/arch/arm/boot/dts/kirkwood-ib62x0.dts @@ -51,7 +51,6 @@  			};  		};  		serial@12000 { -			clock-frequency = <200000000>;  			status = "okay";  		}; diff --git a/arch/arm/boot/dts/kirkwood-iconnect.dts b/arch/arm/boot/dts/kirkwood-iconnect.dts index 504f16be8b5..12ccf74ac3c 100644 --- a/arch/arm/boot/dts/kirkwood-iconnect.dts +++ b/arch/arm/boot/dts/kirkwood-iconnect.dts @@ -78,7 +78,6 @@  			};  		};  		serial@12000 { -			clock-frequency = <200000000>;  			status = "ok";  		}; diff --git a/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts b/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts index 6cae4599c4b..93c3afbef9e 100644 --- a/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts +++ b/arch/arm/boot/dts/kirkwood-iomega_ix2_200.dts @@ -115,7 +115,6 @@  		};  		serial@12000 { -			clock-frequency = <200000000>;  			status = "ok";  		}; diff --git a/arch/arm/boot/dts/kirkwood-km_kirkwood.dts b/arch/arm/boot/dts/kirkwood-km_kirkwood.dts index 8db3123ac80..5bbd0542cdd 100644 --- a/arch/arm/boot/dts/kirkwood-km_kirkwood.dts +++ b/arch/arm/boot/dts/kirkwood-km_kirkwood.dts @@ -34,7 +34,6 @@  		};  		serial@12000 { -			clock-frequency = <200000000>;  			status = "ok";  		}; diff --git a/arch/arm/boot/dts/kirkwood-lschlv2.dts b/arch/arm/boot/dts/kirkwood-lschlv2.dts index 9510c9ea666..9f55d95f35f 100644 --- a/arch/arm/boot/dts/kirkwood-lschlv2.dts +++ b/arch/arm/boot/dts/kirkwood-lschlv2.dts @@ -13,7 +13,6 @@  	ocp@f1000000 {  		serial@12000 { -			clock-frequency = <166666667>;  			status = "okay";  		};  	}; diff --git a/arch/arm/boot/dts/kirkwood-lsxhl.dts b/arch/arm/boot/dts/kirkwood-lsxhl.dts index 739019c4cba..5c84c118ed8 100644 --- a/arch/arm/boot/dts/kirkwood-lsxhl.dts +++ b/arch/arm/boot/dts/kirkwood-lsxhl.dts @@ -13,7 +13,6 @@  	ocp@f1000000 {  		serial@12000 { -			clock-frequency = <200000000>;  			status = "okay";  		};  	}; diff --git a/arch/arm/boot/dts/kirkwood-mplcec4.dts b/arch/arm/boot/dts/kirkwood-mplcec4.dts index 662dfd81b1c..758824118a9 100644 --- a/arch/arm/boot/dts/kirkwood-mplcec4.dts +++ b/arch/arm/boot/dts/kirkwood-mplcec4.dts @@ -90,7 +90,6 @@                  };                  serial@12000 { -                        clock-frequency = <200000000>;                          status = "ok";                  }; diff --git a/arch/arm/boot/dts/kirkwood-ns2-common.dtsi b/arch/arm/boot/dts/kirkwood-ns2-common.dtsi index e8e7ecef165..6affd924fe1 100644 --- a/arch/arm/boot/dts/kirkwood-ns2-common.dtsi +++ b/arch/arm/boot/dts/kirkwood-ns2-common.dtsi @@ -23,7 +23,6 @@  		};  		serial@12000 { -			clock-frequency = <166666667>;  			status = "okay";  		}; diff --git a/arch/arm/boot/dts/kirkwood-nsa310.dts b/arch/arm/boot/dts/kirkwood-nsa310.dts index 3a178cf708d..a7412b937a8 100644 --- a/arch/arm/boot/dts/kirkwood-nsa310.dts +++ b/arch/arm/boot/dts/kirkwood-nsa310.dts @@ -117,7 +117,6 @@  		};  		serial@12000 { -			clock-frequency = <200000000>;  			status = "ok";  		}; diff --git a/arch/arm/boot/dts/kirkwood-openblocks_a6.dts b/arch/arm/boot/dts/kirkwood-openblocks_a6.dts index ede7fe0d7a8..d27f7245f8e 100644 --- a/arch/arm/boot/dts/kirkwood-openblocks_a6.dts +++ b/arch/arm/boot/dts/kirkwood-openblocks_a6.dts @@ -18,12 +18,10 @@  	ocp@f1000000 {  		serial@12000 { -			clock-frequency = <200000000>;  			status = "ok";  		};  		serial@12100 { -			clock-frequency = <200000000>;  			status = "ok";  		}; diff --git a/arch/arm/boot/dts/kirkwood-topkick.dts b/arch/arm/boot/dts/kirkwood-topkick.dts index 842ff95d60d..66eb45b00b2 100644 --- a/arch/arm/boot/dts/kirkwood-topkick.dts +++ b/arch/arm/boot/dts/kirkwood-topkick.dts @@ -108,7 +108,6 @@  		};  		serial@12000 { -			clock-frequency = <200000000>;  			status = "ok";  		}; diff --git a/arch/arm/boot/dts/kirkwood.dtsi b/arch/arm/boot/dts/kirkwood.dtsi index 2c738d9dc82..fada7e6d24d 100644 --- a/arch/arm/boot/dts/kirkwood.dtsi +++ b/arch/arm/boot/dts/kirkwood.dtsi @@ -38,6 +38,7 @@  			interrupt-controller;  			#interrupt-cells = <2>;  			interrupts = <35>, <36>, <37>, <38>; +			clocks = <&gate_clk 7>;  		};  		gpio1: gpio@10140 { @@ -49,6 +50,7 @@  			interrupt-controller;  			#interrupt-cells = <2>;  			interrupts = <39>, <40>, <41>; +			clocks = <&gate_clk 7>;  		};  		serial@12000 { @@ -57,7 +59,6 @@  			reg-shift = <2>;  			interrupts = <33>;  			clocks = <&gate_clk 7>; -			/* set clock-frequency in board dts */  			status = "disabled";  		}; @@ -67,7 +68,6 @@  			reg-shift = <2>;  			interrupts = <34>;  			clocks = <&gate_clk 7>; -			/* set clock-frequency in board dts */  			status = "disabled";  		}; @@ -75,6 +75,7 @@  			compatible = "marvell,kirkwood-rtc", "marvell,orion-rtc";  			reg = <0x10300 0x20>;  			interrupts = <53>; +			clocks = <&gate_clk 7>;  		};  		spi@10600 { diff --git a/arch/arm/boot/dts/orion5x-lacie-ethernet-disk-mini-v2.dts b/arch/arm/boot/dts/orion5x-lacie-ethernet-disk-mini-v2.dts index 5a3a58b7e18..0077fc8510b 100644 --- a/arch/arm/boot/dts/orion5x-lacie-ethernet-disk-mini-v2.dts +++ b/arch/arm/boot/dts/orion5x-lacie-ethernet-disk-mini-v2.dts @@ -11,7 +11,7 @@  / {  	model = "LaCie Ethernet Disk mini V2"; -	compatible = "lacie,ethernet-disk-mini-v2", "marvell-orion5x-88f5182", "marvell,orion5x"; +	compatible = "lacie,ethernet-disk-mini-v2", "marvell,orion5x-88f5182", "marvell,orion5x";  	memory {  		reg = <0x00000000 0x4000000>; /* 64 MB */ diff --git a/arch/arm/boot/dts/snowball.dts b/arch/arm/boot/dts/snowball.dts index 27f31a5fa49..d3ec32f6b79 100644 --- a/arch/arm/boot/dts/snowball.dts +++ b/arch/arm/boot/dts/snowball.dts @@ -298,7 +298,7 @@  				};  			}; -			ab8500@5 { +			ab8500 {  				ab8500-regulators {  					ab8500_ldo_aux1_reg: ab8500_ldo_aux1 {  						regulator-name = "V-DISPLAY"; diff --git a/arch/arm/boot/dts/socfpga.dtsi b/arch/arm/boot/dts/socfpga.dtsi index 936d2306e7e..7e8769bd597 100644 --- a/arch/arm/boot/dts/socfpga.dtsi +++ b/arch/arm/boot/dts/socfpga.dtsi @@ -75,6 +75,9 @@  				compatible = "arm,pl330", "arm,primecell";  				reg = <0xffe01000 0x1000>;  				interrupts = <0 180 4>; +				#dma-cells = <1>; +				#dma-channels = <8>; +				#dma-requests = <32>;  			};  		}; diff --git a/arch/arm/boot/dts/tegra20.dtsi b/arch/arm/boot/dts/tegra20.dtsi index 9a428931d04..3d3f64d2111 100644 --- a/arch/arm/boot/dts/tegra20.dtsi +++ b/arch/arm/boot/dts/tegra20.dtsi @@ -118,6 +118,7 @@  		compatible = "arm,cortex-a9-twd-timer";  		reg = <0x50040600 0x20>;  		interrupts = <1 13 0x304>; +		clocks = <&tegra_car 132>;  	};  	intc: interrupt-controller { @@ -384,7 +385,7 @@  	spi@7000d800 {  		compatible = "nvidia,tegra20-slink"; -		reg = <0x7000d480 0x200>; +		reg = <0x7000d800 0x200>;  		interrupts = <0 83 0x04>;  		nvidia,dma-request-selector = <&apbdma 17>;  		#address-cells = <1>; diff --git a/arch/arm/boot/dts/tegra30.dtsi b/arch/arm/boot/dts/tegra30.dtsi index 767803e1fd5..dbf46c27256 100644 --- a/arch/arm/boot/dts/tegra30.dtsi +++ b/arch/arm/boot/dts/tegra30.dtsi @@ -119,6 +119,7 @@  		compatible = "arm,cortex-a9-twd-timer";  		reg = <0x50040600 0x20>;  		interrupts = <1 13 0xf04>; +		clocks = <&tegra_car 214>;  	};  	intc: interrupt-controller { @@ -371,7 +372,7 @@  	spi@7000d800 {  		compatible = "nvidia,tegra30-slink", "nvidia,tegra20-slink"; -		reg = <0x7000d480 0x200>; +		reg = <0x7000d800 0x200>;  		interrupts = <0 83 0x04>;  		nvidia,dma-request-selector = <&apbdma 17>;  		#address-cells = <1>; diff --git a/arch/arm/configs/mxs_defconfig b/arch/arm/configs/mxs_defconfig index fbbc5bb022d..6a99e30f81d 100644 --- a/arch/arm/configs/mxs_defconfig +++ b/arch/arm/configs/mxs_defconfig @@ -116,6 +116,7 @@ CONFIG_SND_SOC=y  CONFIG_SND_MXS_SOC=y  CONFIG_SND_SOC_MXS_SGTL5000=y  CONFIG_USB=y +CONFIG_USB_EHCI_HCD=y  CONFIG_USB_CHIPIDEA=y  CONFIG_USB_CHIPIDEA_HOST=y  CONFIG_USB_STORAGE=y diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig index b16bae2c9a6..bd07864f14a 100644 --- a/arch/arm/configs/omap2plus_defconfig +++ b/arch/arm/configs/omap2plus_defconfig @@ -126,6 +126,8 @@ CONFIG_INPUT_MISC=y  CONFIG_INPUT_TWL4030_PWRBUTTON=y  CONFIG_VT_HW_CONSOLE_BINDING=y  # CONFIG_LEGACY_PTYS is not set +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y  CONFIG_SERIAL_8250_NR_UARTS=32  CONFIG_SERIAL_8250_EXTENDED=y  CONFIG_SERIAL_8250_MANY_PORTS=y diff --git a/arch/arm/include/asm/mmu.h b/arch/arm/include/asm/mmu.h index 9f77e7804f3..e3d55547e75 100644 --- a/arch/arm/include/asm/mmu.h +++ b/arch/arm/include/asm/mmu.h @@ -5,15 +5,15 @@  typedef struct {  #ifdef CONFIG_CPU_HAS_ASID -	u64 id; +	atomic64_t	id;  #endif -	unsigned int vmalloc_seq; +	unsigned int	vmalloc_seq;  } mm_context_t;  #ifdef CONFIG_CPU_HAS_ASID  #define ASID_BITS	8  #define ASID_MASK	((~0ULL) << ASID_BITS) -#define ASID(mm)	((mm)->context.id & ~ASID_MASK) +#define ASID(mm)	((mm)->context.id.counter & ~ASID_MASK)  #else  #define ASID(mm)	(0)  #endif @@ -26,7 +26,7 @@ typedef struct {   *  modified for 2.6 by Hyok S. Choi <hyok.choi@samsung.com>   */  typedef struct { -	unsigned long		end_brk; +	unsigned long	end_brk;  } mm_context_t;  #endif diff --git a/arch/arm/include/asm/mmu_context.h b/arch/arm/include/asm/mmu_context.h index e1f644bc7cc..863a6611323 100644 --- a/arch/arm/include/asm/mmu_context.h +++ b/arch/arm/include/asm/mmu_context.h @@ -25,7 +25,7 @@ void __check_vmalloc_seq(struct mm_struct *mm);  #ifdef CONFIG_CPU_HAS_ASID  void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk); -#define init_new_context(tsk,mm)	({ mm->context.id = 0; }) +#define init_new_context(tsk,mm)	({ atomic64_set(&mm->context.id, 0); 0; })  #else	/* !CONFIG_CPU_HAS_ASID */ diff --git a/arch/arm/include/asm/tlbflush.h b/arch/arm/include/asm/tlbflush.h index 6e924d3a77e..4db8c8820f0 100644 --- a/arch/arm/include/asm/tlbflush.h +++ b/arch/arm/include/asm/tlbflush.h @@ -34,10 +34,13 @@  #define TLB_V6_D_ASID	(1 << 17)  #define TLB_V6_I_ASID	(1 << 18) +#define TLB_V6_BP	(1 << 19) +  /* Unified Inner Shareable TLB operations (ARMv7 MP extensions) */ -#define TLB_V7_UIS_PAGE	(1 << 19) -#define TLB_V7_UIS_FULL (1 << 20) -#define TLB_V7_UIS_ASID (1 << 21) +#define TLB_V7_UIS_PAGE	(1 << 20) +#define TLB_V7_UIS_FULL (1 << 21) +#define TLB_V7_UIS_ASID (1 << 22) +#define TLB_V7_UIS_BP	(1 << 23)  #define TLB_BARRIER	(1 << 28)  #define TLB_L2CLEAN_FR	(1 << 29)		/* Feroceon */ @@ -150,7 +153,8 @@  #define v6wbi_tlb_flags (TLB_WB | TLB_DCLEAN | TLB_BARRIER | \  			 TLB_V6_I_FULL | TLB_V6_D_FULL | \  			 TLB_V6_I_PAGE | TLB_V6_D_PAGE | \ -			 TLB_V6_I_ASID | TLB_V6_D_ASID) +			 TLB_V6_I_ASID | TLB_V6_D_ASID | \ +			 TLB_V6_BP)  #ifdef CONFIG_CPU_TLB_V6  # define v6wbi_possible_flags	v6wbi_tlb_flags @@ -166,9 +170,11 @@  #endif  #define v7wbi_tlb_flags_smp	(TLB_WB | TLB_DCLEAN | TLB_BARRIER | \ -			 TLB_V7_UIS_FULL | TLB_V7_UIS_PAGE | TLB_V7_UIS_ASID) +				 TLB_V7_UIS_FULL | TLB_V7_UIS_PAGE | \ +				 TLB_V7_UIS_ASID | TLB_V7_UIS_BP)  #define v7wbi_tlb_flags_up	(TLB_WB | TLB_DCLEAN | TLB_BARRIER | \ -			 TLB_V6_U_FULL | TLB_V6_U_PAGE | TLB_V6_U_ASID) +				 TLB_V6_U_FULL | TLB_V6_U_PAGE | \ +				 TLB_V6_U_ASID | TLB_V6_BP)  #ifdef CONFIG_CPU_TLB_V7 @@ -430,6 +436,20 @@ static inline void local_flush_tlb_kernel_page(unsigned long kaddr)  	}  } +static inline void local_flush_bp_all(void) +{ +	const int zero = 0; +	const unsigned int __tlb_flag = __cpu_tlb_flags; + +	if (tlb_flag(TLB_V7_UIS_BP)) +		asm("mcr p15, 0, %0, c7, c1, 6" : : "r" (zero)); +	else if (tlb_flag(TLB_V6_BP)) +		asm("mcr p15, 0, %0, c7, c5, 6" : : "r" (zero)); + +	if (tlb_flag(TLB_BARRIER)) +		isb(); +} +  /*   *	flush_pmd_entry   * @@ -480,6 +500,7 @@ static inline void clean_pmd_entry(void *pmd)  #define flush_tlb_kernel_page	local_flush_tlb_kernel_page  #define flush_tlb_range		local_flush_tlb_range  #define flush_tlb_kernel_range	local_flush_tlb_kernel_range +#define flush_bp_all		local_flush_bp_all  #else  extern void flush_tlb_all(void);  extern void flush_tlb_mm(struct mm_struct *mm); @@ -487,6 +508,7 @@ extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr);  extern void flush_tlb_kernel_page(unsigned long kaddr);  extern void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end);  extern void flush_tlb_kernel_range(unsigned long start, unsigned long end); +extern void flush_bp_all(void);  #endif  /* diff --git a/arch/arm/include/asm/xen/events.h b/arch/arm/include/asm/xen/events.h index 5c27696de14..8b1f37bfeee 100644 --- a/arch/arm/include/asm/xen/events.h +++ b/arch/arm/include/asm/xen/events.h @@ -2,6 +2,7 @@  #define _ASM_ARM_XEN_EVENTS_H  #include <asm/ptrace.h> +#include <asm/atomic.h>  enum ipi_vector {  	XEN_PLACEHOLDER_VECTOR, @@ -15,26 +16,8 @@ static inline int xen_irqs_disabled(struct pt_regs *regs)  	return raw_irqs_disabled_flags(regs->ARM_cpsr);  } -/* - * We cannot use xchg because it does not support 8-byte - * values. However it is safe to use {ldr,dtd}exd directly because all - * platforms which Xen can run on support those instructions. - */ -static inline xen_ulong_t xchg_xen_ulong(xen_ulong_t *ptr, xen_ulong_t val) -{ -	xen_ulong_t oldval; -	unsigned int tmp; - -	wmb(); -	asm volatile("@ xchg_xen_ulong\n" -		"1:     ldrexd  %0, %H0, [%3]\n" -		"       strexd  %1, %2, %H2, [%3]\n" -		"       teq     %1, #0\n" -		"       bne     1b" -		: "=&r" (oldval), "=&r" (tmp) -		: "r" (val), "r" (ptr) -		: "memory", "cc"); -	return oldval; -} +#define xchg_xen_ulong(ptr, val) atomic64_xchg(container_of((ptr),	\ +							    atomic64_t,	\ +							    counter), (val))  #endif /* _ASM_ARM_XEN_EVENTS_H */ diff --git a/arch/arm/include/uapi/asm/unistd.h b/arch/arm/include/uapi/asm/unistd.h index 4da7cde70b5..af33b44990e 100644 --- a/arch/arm/include/uapi/asm/unistd.h +++ b/arch/arm/include/uapi/asm/unistd.h @@ -404,7 +404,7 @@  #define __NR_setns			(__NR_SYSCALL_BASE+375)  #define __NR_process_vm_readv		(__NR_SYSCALL_BASE+376)  #define __NR_process_vm_writev		(__NR_SYSCALL_BASE+377) -					/* 378 for kcmp */ +#define __NR_kcmp			(__NR_SYSCALL_BASE+378)  #define __NR_finit_module		(__NR_SYSCALL_BASE+379)  /* diff --git a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c index 5ce738b4350..923eec7105c 100644 --- a/arch/arm/kernel/asm-offsets.c +++ b/arch/arm/kernel/asm-offsets.c @@ -110,7 +110,7 @@ int main(void)    BLANK();  #endif  #ifdef CONFIG_CPU_HAS_ASID -  DEFINE(MM_CONTEXT_ID,		offsetof(struct mm_struct, context.id)); +  DEFINE(MM_CONTEXT_ID,		offsetof(struct mm_struct, context.id.counter));    BLANK();  #endif    DEFINE(VMA_VM_MM,		offsetof(struct vm_area_struct, vm_mm)); diff --git a/arch/arm/kernel/atags_proc.c b/arch/arm/kernel/atags_proc.c index 42a1a1415fa..c7ff8073416 100644 --- a/arch/arm/kernel/atags_proc.c +++ b/arch/arm/kernel/atags_proc.c @@ -9,24 +9,18 @@ struct buffer {  	char data[];  }; -static int -read_buffer(char* page, char** start, off_t off, int count, -	int* eof, void* data) +static ssize_t atags_read(struct file *file, char __user *buf, +			  size_t count, loff_t *ppos)  { -	struct buffer *buffer = (struct buffer *)data; - -	if (off >= buffer->size) { -		*eof = 1; -		return 0; -	} - -	count = min((int) (buffer->size - off), count); - -	memcpy(page, &buffer->data[off], count); - -	return count; +	struct buffer *b = PDE_DATA(file_inode(file)); +	return simple_read_from_buffer(buf, count, ppos, b->data, b->size);  } +static const struct file_operations atags_fops = { +	.read = atags_read, +	.llseek = default_llseek, +}; +  #define BOOT_PARAMS_SIZE 1536  static char __initdata atags_copy[BOOT_PARAMS_SIZE]; @@ -66,9 +60,7 @@ static int __init init_atags_procfs(void)  	b->size = size;  	memcpy(b->data, atags_copy, size); -	tags_entry = create_proc_read_entry("atags", 0400, -			NULL, read_buffer, b); - +	tags_entry = proc_create_data("atags", 0400, NULL, &atags_fops, b);  	if (!tags_entry)  		goto nomem; diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S index 0cc57611fc4..c6ca7e37677 100644 --- a/arch/arm/kernel/calls.S +++ b/arch/arm/kernel/calls.S @@ -387,7 +387,7 @@  /* 375 */	CALL(sys_setns)  		CALL(sys_process_vm_readv)  		CALL(sys_process_vm_writev) -		CALL(sys_ni_syscall)	/* reserved for sys_kcmp */ +		CALL(sys_kcmp)  		CALL(sys_finit_module)  #ifndef syscalls_counted  .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index 486a15ae901..e0eb9a1cae7 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S @@ -184,13 +184,22 @@ __create_page_tables:  	orr	r3, r3, #3			@ PGD block type  	mov	r6, #4				@ PTRS_PER_PGD  	mov	r7, #1 << (55 - 32)		@ L_PGD_SWAPPER -1:	str	r3, [r0], #4			@ set bottom PGD entry bits +1: +#ifdef CONFIG_CPU_ENDIAN_BE8  	str	r7, [r0], #4			@ set top PGD entry bits +	str	r3, [r0], #4			@ set bottom PGD entry bits +#else +	str	r3, [r0], #4			@ set bottom PGD entry bits +	str	r7, [r0], #4			@ set top PGD entry bits +#endif  	add	r3, r3, #0x1000			@ next PMD table  	subs	r6, r6, #1  	bne	1b  	add	r4, r4, #0x1000			@ point to the PMD tables +#ifdef CONFIG_CPU_ENDIAN_BE8 +	add	r4, r4, #4			@ we only write the bottom word +#endif  #endif  	ldr	r7, [r10, #PROCINFO_MM_MMUFLAGS] @ mm_mmuflags @@ -258,6 +267,11 @@ __create_page_tables:  	addne	r6, r6, #1 << SECTION_SHIFT  	strne	r6, [r3] +#if defined(CONFIG_LPAE) && defined(CONFIG_CPU_ENDIAN_BE8) +	sub	r4, r4, #4			@ Fixup page table pointer +						@ for 64-bit descriptors +#endif +  #ifdef CONFIG_DEBUG_LL  #if !defined(CONFIG_DEBUG_ICEDCC) && !defined(CONFIG_DEBUG_SEMIHOSTING)  	/* @@ -276,13 +290,17 @@ __create_page_tables:  	orr	r3, r7, r3, lsl #SECTION_SHIFT  #ifdef CONFIG_ARM_LPAE  	mov	r7, #1 << (54 - 32)		@ XN +#ifdef CONFIG_CPU_ENDIAN_BE8 +	str	r7, [r0], #4 +	str	r3, [r0], #4  #else -	orr	r3, r3, #PMD_SECT_XN -#endif  	str	r3, [r0], #4 -#ifdef CONFIG_ARM_LPAE  	str	r7, [r0], #4  #endif +#else +	orr	r3, r3, #PMD_SECT_XN +	str	r3, [r0], #4 +#endif  #else /* CONFIG_DEBUG_ICEDCC || CONFIG_DEBUG_SEMIHOSTING */  	/* we don't need any serial debugging mappings */ diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c index 5eae53e7a2e..96093b75ab9 100644 --- a/arch/arm/kernel/hw_breakpoint.c +++ b/arch/arm/kernel/hw_breakpoint.c @@ -1023,7 +1023,7 @@ out_mdbgen:  static int __cpuinit dbg_reset_notify(struct notifier_block *self,  				      unsigned long action, void *cpu)  { -	if (action == CPU_ONLINE) +	if ((action & ~CPU_TASKS_FROZEN) == CPU_ONLINE)  		smp_call_function_single((int)cpu, reset_ctrl_regs, NULL, 1);  	return NOTIFY_OK; diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index 31e0eb353cd..146157dfe27 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c @@ -400,7 +400,7 @@ __hw_perf_event_init(struct perf_event *event)  	}  	if (event->group_leader != event) { -		if (validate_group(event) != 0); +		if (validate_group(event) != 0)  			return -EINVAL;  	} @@ -484,7 +484,7 @@ const struct dev_pm_ops armpmu_dev_pm_ops = {  	SET_RUNTIME_PM_OPS(armpmu_runtime_suspend, armpmu_runtime_resume, NULL)  }; -static void __init armpmu_init(struct arm_pmu *armpmu) +static void armpmu_init(struct arm_pmu *armpmu)  {  	atomic_set(&armpmu->active_events, 0);  	mutex_init(&armpmu->reserve_mutex); diff --git a/arch/arm/kernel/perf_event_v7.c b/arch/arm/kernel/perf_event_v7.c index 8c79a9e70b8..039cffb053a 100644 --- a/arch/arm/kernel/perf_event_v7.c +++ b/arch/arm/kernel/perf_event_v7.c @@ -774,7 +774,7 @@ static const unsigned armv7_a7_perf_cache_map[PERF_COUNT_HW_CACHE_MAX]  /*   * PMXEVTYPER: Event selection reg   */ -#define	ARMV7_EVTYPE_MASK	0xc00000ff	/* Mask for writable bits */ +#define	ARMV7_EVTYPE_MASK	0xc80000ff	/* Mask for writable bits */  #define	ARMV7_EVTYPE_EVENT	0xff		/* Mask for EVENT bits */  /* diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 1bdfd87c8e4..79078edbb9b 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c @@ -285,6 +285,7 @@ asmlinkage void __cpuinit secondary_start_kernel(void)  	 * switch away from it before attempting any exclusive accesses.  	 */  	cpu_switch_mm(mm->pgd, mm); +	local_flush_bp_all();  	enter_lazy_tlb(mm, current);  	local_flush_tlb_all(); @@ -479,7 +480,7 @@ static void __cpuinit broadcast_timer_setup(struct clock_event_device *evt)  	evt->features	= CLOCK_EVT_FEAT_ONESHOT |  			  CLOCK_EVT_FEAT_PERIODIC |  			  CLOCK_EVT_FEAT_DUMMY; -	evt->rating	= 400; +	evt->rating	= 100;  	evt->mult	= 1;  	evt->set_mode	= broadcast_timer_set_mode; diff --git a/arch/arm/kernel/smp_tlb.c b/arch/arm/kernel/smp_tlb.c index 02c5d2ce23b..bd030053139 100644 --- a/arch/arm/kernel/smp_tlb.c +++ b/arch/arm/kernel/smp_tlb.c @@ -64,6 +64,11 @@ static inline void ipi_flush_tlb_kernel_range(void *arg)  	local_flush_tlb_kernel_range(ta->ta_start, ta->ta_end);  } +static inline void ipi_flush_bp_all(void *ignored) +{ +	local_flush_bp_all(); +} +  void flush_tlb_all(void)  {  	if (tlb_ops_need_broadcast()) @@ -127,3 +132,10 @@ void flush_tlb_kernel_range(unsigned long start, unsigned long end)  		local_flush_tlb_kernel_range(start, end);  } +void flush_bp_all(void) +{ +	if (tlb_ops_need_broadcast()) +		on_each_cpu(ipi_flush_bp_all, NULL, 1); +	else +		local_flush_bp_all(); +} diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c index c092115d903..3f256503748 100644 --- a/arch/arm/kernel/smp_twd.c +++ b/arch/arm/kernel/smp_twd.c @@ -22,6 +22,7 @@  #include <linux/of_irq.h>  #include <linux/of_address.h> +#include <asm/smp_plat.h>  #include <asm/smp_twd.h>  #include <asm/localtimer.h> @@ -373,6 +374,9 @@ void __init twd_local_timer_of_register(void)  	struct device_node *np;  	int err; +	if (!is_smp() || !setup_max_cpus) +		return; +  	np = of_find_matching_node(NULL, twd_of_match);  	if (!np)  		return; diff --git a/arch/arm/kernel/suspend.c b/arch/arm/kernel/suspend.c index 358bca3a995..c59c97ea826 100644 --- a/arch/arm/kernel/suspend.c +++ b/arch/arm/kernel/suspend.c @@ -68,6 +68,7 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long))  	ret = __cpu_suspend(arg, fn);  	if (ret == 0) {  		cpu_switch_mm(mm->pgd, mm); +		local_flush_bp_all();  		local_flush_tlb_all();  	} diff --git a/arch/arm/kernel/swp_emulate.c b/arch/arm/kernel/swp_emulate.c index ab1017bd166..087fc321e9e 100644 --- a/arch/arm/kernel/swp_emulate.c +++ b/arch/arm/kernel/swp_emulate.c @@ -21,6 +21,7 @@  #include <linux/init.h>  #include <linux/kernel.h>  #include <linux/proc_fs.h> +#include <linux/seq_file.h>  #include <linux/sched.h>  #include <linux/syscalls.h>  #include <linux/perf_event.h> @@ -79,27 +80,27 @@ static unsigned long abtcounter;  static pid_t         previous_pid;  #ifdef CONFIG_PROC_FS -static int proc_read_status(char *page, char **start, off_t off, int count, -			    int *eof, void *data) +static int proc_status_show(struct seq_file *m, void *v)  { -	char *p = page; -	int len; - -	p += sprintf(p, "Emulated SWP:\t\t%lu\n", swpcounter); -	p += sprintf(p, "Emulated SWPB:\t\t%lu\n", swpbcounter); -	p += sprintf(p, "Aborted SWP{B}:\t\t%lu\n", abtcounter); +	seq_printf(m, "Emulated SWP:\t\t%lu\n", swpcounter); +	seq_printf(m, "Emulated SWPB:\t\t%lu\n", swpbcounter); +	seq_printf(m, "Aborted SWP{B}:\t\t%lu\n", abtcounter);  	if (previous_pid != 0) -		p += sprintf(p, "Last process:\t\t%d\n", previous_pid); - -	len = (p - page) - off; -	if (len < 0) -		len = 0; - -	*eof = (len <= count) ? 1 : 0; -	*start = page + off; +		seq_printf(m, "Last process:\t\t%d\n", previous_pid); +	return 0; +} -	return len; +static int proc_status_open(struct inode *inode, struct file *file) +{ +	return single_open(file, proc_status_show, PDE_DATA(inode));  } + +static const struct file_operations proc_status_fops = { +	.open		= proc_status_open, +	.read		= seq_read, +	.llseek		= seq_lseek, +	.release	= seq_release, +};  #endif  /* @@ -266,14 +267,8 @@ static struct undef_hook swp_hook = {  static int __init swp_emulation_init(void)  {  #ifdef CONFIG_PROC_FS -	struct proc_dir_entry *res; - -	res = create_proc_entry("cpu/swp_emulation", S_IRUGO, NULL); - -	if (!res) +	if (!proc_create("cpu/swp_emulation", S_IRUGO, NULL, &proc_status_fops))  		return -ENOMEM; - -	res->read_proc = proc_read_status;  #endif /* CONFIG_PROC_FS */  	printk(KERN_NOTICE "Registering SWP/SWPB emulation handler\n"); diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S index 650d5923ab8..94b0650ea98 100644 --- a/arch/arm/lib/memset.S +++ b/arch/arm/lib/memset.S @@ -14,27 +14,15 @@  	.text  	.align	5 -	.word	0 - -1:	subs	r2, r2, #4		@ 1 do we have enough -	blt	5f			@ 1 bytes to align with? -	cmp	r3, #2			@ 1 -	strltb	r1, [r0], #1		@ 1 -	strleb	r1, [r0], #1		@ 1 -	strb	r1, [r0], #1		@ 1 -	add	r2, r2, r3		@ 1 (r2 = r2 - (4 - r3)) -/* - * The pointer is now aligned and the length is adjusted.  Try doing the - * memset again. - */  ENTRY(memset)  	ands	r3, r0, #3		@ 1 unaligned? -	bne	1b			@ 1 +	mov	ip, r0			@ preserve r0 as return value +	bne	6f			@ 1  /* - * we know that the pointer in r0 is aligned to a word boundary. + * we know that the pointer in ip is aligned to a word boundary.   */ -	orr	r1, r1, r1, lsl #8 +1:	orr	r1, r1, r1, lsl #8  	orr	r1, r1, r1, lsl #16  	mov	r3, r1  	cmp	r2, #16 @@ -43,29 +31,28 @@ ENTRY(memset)  #if ! CALGN(1)+0  /* - * We need an extra register for this loop - save the return address and - * use the LR + * We need 2 extra registers for this loop - use r8 and the LR   */ -	str	lr, [sp, #-4]! -	mov	ip, r1 +	stmfd	sp!, {r8, lr} +	mov	r8, r1  	mov	lr, r1  2:	subs	r2, r2, #64 -	stmgeia	r0!, {r1, r3, ip, lr}	@ 64 bytes at a time. -	stmgeia	r0!, {r1, r3, ip, lr} -	stmgeia	r0!, {r1, r3, ip, lr} -	stmgeia	r0!, {r1, r3, ip, lr} +	stmgeia	ip!, {r1, r3, r8, lr}	@ 64 bytes at a time. +	stmgeia	ip!, {r1, r3, r8, lr} +	stmgeia	ip!, {r1, r3, r8, lr} +	stmgeia	ip!, {r1, r3, r8, lr}  	bgt	2b -	ldmeqfd	sp!, {pc}		@ Now <64 bytes to go. +	ldmeqfd	sp!, {r8, pc}		@ Now <64 bytes to go.  /*   * No need to correct the count; we're only testing bits from now on   */  	tst	r2, #32 -	stmneia	r0!, {r1, r3, ip, lr} -	stmneia	r0!, {r1, r3, ip, lr} +	stmneia	ip!, {r1, r3, r8, lr} +	stmneia	ip!, {r1, r3, r8, lr}  	tst	r2, #16 -	stmneia	r0!, {r1, r3, ip, lr} -	ldr	lr, [sp], #4 +	stmneia	ip!, {r1, r3, r8, lr} +	ldmfd	sp!, {r8, lr}  #else @@ -74,54 +61,63 @@ ENTRY(memset)   * whole cache lines at once.   */ -	stmfd	sp!, {r4-r7, lr} +	stmfd	sp!, {r4-r8, lr}  	mov	r4, r1  	mov	r5, r1  	mov	r6, r1  	mov	r7, r1 -	mov	ip, r1 +	mov	r8, r1  	mov	lr, r1  	cmp	r2, #96 -	tstgt	r0, #31 +	tstgt	ip, #31  	ble	3f -	and	ip, r0, #31 -	rsb	ip, ip, #32 -	sub	r2, r2, ip -	movs	ip, ip, lsl #(32 - 4) -	stmcsia	r0!, {r4, r5, r6, r7} -	stmmiia	r0!, {r4, r5} -	tst	ip, #(1 << 30) -	mov	ip, r1 -	strne	r1, [r0], #4 +	and	r8, ip, #31 +	rsb	r8, r8, #32 +	sub	r2, r2, r8 +	movs	r8, r8, lsl #(32 - 4) +	stmcsia	ip!, {r4, r5, r6, r7} +	stmmiia	ip!, {r4, r5} +	tst	r8, #(1 << 30) +	mov	r8, r1 +	strne	r1, [ip], #4  3:	subs	r2, r2, #64 -	stmgeia	r0!, {r1, r3-r7, ip, lr} -	stmgeia	r0!, {r1, r3-r7, ip, lr} +	stmgeia	ip!, {r1, r3-r8, lr} +	stmgeia	ip!, {r1, r3-r8, lr}  	bgt	3b -	ldmeqfd	sp!, {r4-r7, pc} +	ldmeqfd	sp!, {r4-r8, pc}  	tst	r2, #32 -	stmneia	r0!, {r1, r3-r7, ip, lr} +	stmneia	ip!, {r1, r3-r8, lr}  	tst	r2, #16 -	stmneia	r0!, {r4-r7} -	ldmfd	sp!, {r4-r7, lr} +	stmneia	ip!, {r4-r7} +	ldmfd	sp!, {r4-r8, lr}  #endif  4:	tst	r2, #8 -	stmneia	r0!, {r1, r3} +	stmneia	ip!, {r1, r3}  	tst	r2, #4 -	strne	r1, [r0], #4 +	strne	r1, [ip], #4  /*   * When we get here, we've got less than 4 bytes to zero.  We   * may have an unaligned pointer as well.   */  5:	tst	r2, #2 -	strneb	r1, [r0], #1 -	strneb	r1, [r0], #1 +	strneb	r1, [ip], #1 +	strneb	r1, [ip], #1  	tst	r2, #1 -	strneb	r1, [r0], #1 +	strneb	r1, [ip], #1  	mov	pc, lr + +6:	subs	r2, r2, #4		@ 1 do we have enough +	blt	5b			@ 1 bytes to align with? +	cmp	r3, #2			@ 1 +	strltb	r1, [ip], #1		@ 1 +	strleb	r1, [ip], #1		@ 1 +	strb	r1, [ip], #1		@ 1 +	add	r2, r2, r3		@ 1 (r2 = r2 - (4 - r3)) +	b	1b  ENDPROC(memset) diff --git a/arch/arm/mach-at91/board-foxg20.c b/arch/arm/mach-at91/board-foxg20.c index 2ea7059b840..c20a870ea9c 100644 --- a/arch/arm/mach-at91/board-foxg20.c +++ b/arch/arm/mach-at91/board-foxg20.c @@ -176,6 +176,7 @@ static struct w1_gpio_platform_data w1_gpio_pdata = {  	/* If you choose to use a pin other than PB16 it needs to be 3.3V */  	.pin		= AT91_PIN_PB16,  	.is_open_drain  = 1, +	.ext_pullup_enable_pin	= -EINVAL,  };  static struct platform_device w1_device = { diff --git a/arch/arm/mach-at91/board-stamp9g20.c b/arch/arm/mach-at91/board-stamp9g20.c index a033b8df9fb..869cbecf00b 100644 --- a/arch/arm/mach-at91/board-stamp9g20.c +++ b/arch/arm/mach-at91/board-stamp9g20.c @@ -188,6 +188,7 @@ static struct spi_board_info portuxg20_spi_devices[] = {  static struct w1_gpio_platform_data w1_gpio_pdata = {  	.pin		= AT91_PIN_PA29,  	.is_open_drain	= 1, +	.ext_pullup_enable_pin	= -EINVAL,  };  static struct platform_device w1_device = { diff --git a/arch/arm/mach-at91/include/mach/gpio.h b/arch/arm/mach-at91/include/mach/gpio.h index eed465ab0dd..5fc23771c15 100644 --- a/arch/arm/mach-at91/include/mach/gpio.h +++ b/arch/arm/mach-at91/include/mach/gpio.h @@ -209,6 +209,14 @@ extern int at91_get_gpio_value(unsigned pin);  extern void at91_gpio_suspend(void);  extern void at91_gpio_resume(void); +#ifdef CONFIG_PINCTRL_AT91 +extern void at91_pinctrl_gpio_suspend(void); +extern void at91_pinctrl_gpio_resume(void); +#else +static inline void at91_pinctrl_gpio_suspend(void) {} +static inline void at91_pinctrl_gpio_resume(void) {} +#endif +  #endif	/* __ASSEMBLY__ */  #endif diff --git a/arch/arm/mach-at91/irq.c b/arch/arm/mach-at91/irq.c index 8e210262aee..e0ca5917102 100644 --- a/arch/arm/mach-at91/irq.c +++ b/arch/arm/mach-at91/irq.c @@ -92,23 +92,21 @@ static int at91_aic_set_wake(struct irq_data *d, unsigned value)  void at91_irq_suspend(void)  { -	int i = 0, bit; +	int bit = -1;  	if (has_aic5()) {  		/* disable enabled irqs */ -		while ((bit = find_next_bit(backups, n_irqs, i)) < n_irqs) { +		while ((bit = find_next_bit(backups, n_irqs, bit + 1)) < n_irqs) {  			at91_aic_write(AT91_AIC5_SSR,  				       bit & AT91_AIC5_INTSEL_MSK);  			at91_aic_write(AT91_AIC5_IDCR, 1); -			i = bit;  		}  		/* enable wakeup irqs */ -		i = 0; -		while ((bit = find_next_bit(wakeups, n_irqs, i)) < n_irqs) { +		bit = -1; +		while ((bit = find_next_bit(wakeups, n_irqs, bit + 1)) < n_irqs) {  			at91_aic_write(AT91_AIC5_SSR,  				       bit & AT91_AIC5_INTSEL_MSK);  			at91_aic_write(AT91_AIC5_IECR, 1); -			i = bit;  		}  	} else {  		at91_aic_write(AT91_AIC_IDCR, *backups); @@ -118,23 +116,21 @@ void at91_irq_suspend(void)  void at91_irq_resume(void)  { -	int i = 0, bit; +	int bit = -1;  	if (has_aic5()) {  		/* disable wakeup irqs */ -		while ((bit = find_next_bit(wakeups, n_irqs, i)) < n_irqs) { +		while ((bit = find_next_bit(wakeups, n_irqs, bit + 1)) < n_irqs) {  			at91_aic_write(AT91_AIC5_SSR,  				       bit & AT91_AIC5_INTSEL_MSK);  			at91_aic_write(AT91_AIC5_IDCR, 1); -			i = bit;  		}  		/* enable irqs disabled for suspend */ -		i = 0; -		while ((bit = find_next_bit(backups, n_irqs, i)) < n_irqs) { +		bit = -1; +		while ((bit = find_next_bit(backups, n_irqs, bit + 1)) < n_irqs) {  			at91_aic_write(AT91_AIC5_SSR,  				       bit & AT91_AIC5_INTSEL_MSK);  			at91_aic_write(AT91_AIC5_IECR, 1); -			i = bit;  		}  	} else {  		at91_aic_write(AT91_AIC_IDCR, *wakeups); diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c index adb6db888a1..73f1f250403 100644 --- a/arch/arm/mach-at91/pm.c +++ b/arch/arm/mach-at91/pm.c @@ -201,7 +201,10 @@ extern u32 at91_slow_clock_sz;  static int at91_pm_enter(suspend_state_t state)  { -	at91_gpio_suspend(); +	if (of_have_populated_dt()) +		at91_pinctrl_gpio_suspend(); +	else +		at91_gpio_suspend();  	at91_irq_suspend();  	pr_debug("AT91: PM - wake mask %08x, pm state %d\n", @@ -286,7 +289,10 @@ static int at91_pm_enter(suspend_state_t state)  error:  	target_state = PM_SUSPEND_ON;  	at91_irq_resume(); -	at91_gpio_resume(); +	if (of_have_populated_dt()) +		at91_pinctrl_gpio_resume(); +	else +		at91_gpio_resume();  	return 0;  } diff --git a/arch/arm/mach-davinci/dma.c b/arch/arm/mach-davinci/dma.c index a685e9706b7..45b7c71d9cc 100644 --- a/arch/arm/mach-davinci/dma.c +++ b/arch/arm/mach-davinci/dma.c @@ -743,6 +743,9 @@ EXPORT_SYMBOL(edma_free_channel);   */  int edma_alloc_slot(unsigned ctlr, int slot)  { +	if (!edma_cc[ctlr]) +		return -EINVAL; +  	if (slot >= 0)  		slot = EDMA_CHAN_SLOT(slot); diff --git a/arch/arm/mach-footbridge/Kconfig b/arch/arm/mach-footbridge/Kconfig index abda5a18a66..0f2111a1131 100644 --- a/arch/arm/mach-footbridge/Kconfig +++ b/arch/arm/mach-footbridge/Kconfig @@ -67,6 +67,7 @@ config ARCH_NETWINDER  	select ISA  	select ISA_DMA  	select PCI +	select VIRT_TO_BUS  	help  	  Say Y here if you intend to run this kernel on the Rebel.COM  	  NetWinder.  Information about this machine can be found at: diff --git a/arch/arm/mach-imx/clk-imx35.c b/arch/arm/mach-imx/clk-imx35.c index 74e3a34d78b..e13a8fa5e62 100644 --- a/arch/arm/mach-imx/clk-imx35.c +++ b/arch/arm/mach-imx/clk-imx35.c @@ -264,6 +264,7 @@ int __init mx35_clocks_init(void)  	clk_prepare_enable(clk[gpio3_gate]);  	clk_prepare_enable(clk[iim_gate]);  	clk_prepare_enable(clk[emi_gate]); +	clk_prepare_enable(clk[max_gate]);  	/*  	 * SCC is needed to boot via mmc after a watchdog reset. The clock code diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index 7b025ee528a..2f9ff93a4e6 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c @@ -172,7 +172,7 @@ static struct clk *clk[clk_max];  static struct clk_onecell_data clk_data;  static enum mx6q_clks const clks_init_on[] __initconst = { -	mmdc_ch0_axi, rom, +	mmdc_ch0_axi, rom, pll1_sys,  };  static struct clk_div_table clk_enet_ref_table[] = { diff --git a/arch/arm/mach-imx/headsmp.S b/arch/arm/mach-imx/headsmp.S index 921fc155585..a58c8b0527c 100644 --- a/arch/arm/mach-imx/headsmp.S +++ b/arch/arm/mach-imx/headsmp.S @@ -26,16 +26,16 @@ ENDPROC(v7_secondary_startup)  #ifdef CONFIG_PM  /* - * The following code is located into the .data section.  This is to - * allow phys_l2x0_saved_regs to be accessed with a relative load - * as we are running on physical address here. + * The following code must assume it is running from physical address + * where absolute virtual addresses to the data section have to be + * turned into relative ones.   */ -	.data -	.align  #ifdef CONFIG_CACHE_L2X0  	.macro	pl310_resume -	ldr	r2, phys_l2x0_saved_regs +	adr	r0, l2x0_saved_regs_offset +	ldr	r2, [r0] +	add	r2, r2, r0  	ldr	r0, [r2, #L2X0_R_PHY_BASE]	@ get physical base of l2x0  	ldr	r1, [r2, #L2X0_R_AUX_CTRL]	@ get aux_ctrl value  	str	r1, [r0, #L2X0_AUX_CTRL]	@ restore aux_ctrl @@ -43,9 +43,9 @@ ENDPROC(v7_secondary_startup)  	str	r1, [r0, #L2X0_CTRL]		@ re-enable L2  	.endm -	.globl	phys_l2x0_saved_regs -phys_l2x0_saved_regs: -        .long   0 +l2x0_saved_regs_offset: +	.word	l2x0_saved_regs - . +  #else  	.macro	pl310_resume  	.endm diff --git a/arch/arm/mach-imx/imx25-dt.c b/arch/arm/mach-imx/imx25-dt.c index 03b65e5ea54..82348391582 100644 --- a/arch/arm/mach-imx/imx25-dt.c +++ b/arch/arm/mach-imx/imx25-dt.c @@ -27,6 +27,11 @@ static const char * const imx25_dt_board_compat[] __initconst = {  	NULL  }; +static void __init imx25_timer_init(void) +{ +	mx25_clocks_init_dt(); +} +  DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)")  	.map_io		= mx25_map_io,  	.init_early	= imx25_init_early, diff --git a/arch/arm/mach-imx/pm-imx6q.c b/arch/arm/mach-imx/pm-imx6q.c index ee42d20cba1..5faba7a3c95 100644 --- a/arch/arm/mach-imx/pm-imx6q.c +++ b/arch/arm/mach-imx/pm-imx6q.c @@ -22,8 +22,6 @@  #include "common.h"  #include "hardware.h" -extern unsigned long phys_l2x0_saved_regs; -  static int imx6q_suspend_finish(unsigned long val)  {  	cpu_do_idle(); @@ -57,18 +55,5 @@ static const struct platform_suspend_ops imx6q_pm_ops = {  void __init imx6q_pm_init(void)  { -	/* -	 * The l2x0 core code provides an infrastucture to save and restore -	 * l2x0 registers across suspend/resume cycle.  But because imx6q -	 * retains L2 content during suspend and needs to resume L2 before -	 * MMU is enabled, it can only utilize register saving support and -	 * have to take care of restoring on its own.  So we save physical -	 * address of the data structure used by l2x0 core to save registers, -	 * and later restore the necessary ones in imx6q resume entry. -	 */ -#ifdef CONFIG_CACHE_L2X0 -	phys_l2x0_saved_regs = __pa(&l2x0_saved_regs); -#endif -  	suspend_set_ops(&imx6q_pm_ops);  } diff --git a/arch/arm/mach-ixp4xx/vulcan-setup.c b/arch/arm/mach-ixp4xx/vulcan-setup.c index d42730a1d4a..d599e354ca5 100644 --- a/arch/arm/mach-ixp4xx/vulcan-setup.c +++ b/arch/arm/mach-ixp4xx/vulcan-setup.c @@ -163,6 +163,7 @@ static struct platform_device vulcan_max6369 = {  static struct w1_gpio_platform_data vulcan_w1_gpio_pdata = {  	.pin			= 14, +	.ext_pullup_enable_pin	= -EINVAL,  };  static struct platform_device vulcan_w1_gpio = { diff --git a/arch/arm/mach-kirkwood/board-dt.c b/arch/arm/mach-kirkwood/board-dt.c index 2e73e9d53f7..d367aa6b47b 100644 --- a/arch/arm/mach-kirkwood/board-dt.c +++ b/arch/arm/mach-kirkwood/board-dt.c @@ -41,16 +41,12 @@ static void __init kirkwood_legacy_clk_init(void)  	struct device_node *np = of_find_compatible_node(  		NULL, NULL, "marvell,kirkwood-gating-clock"); -  	struct of_phandle_args clkspec; +	struct clk *clk;  	clkspec.np = np;  	clkspec.args_count = 1; -	clkspec.args[0] = CGC_BIT_GE0; -	orion_clkdev_add(NULL, "mv643xx_eth_port.0", -			 of_clk_get_from_provider(&clkspec)); -  	clkspec.args[0] = CGC_BIT_PEX0;  	orion_clkdev_add("0", "pcie",  			 of_clk_get_from_provider(&clkspec)); @@ -59,9 +55,24 @@ static void __init kirkwood_legacy_clk_init(void)  	orion_clkdev_add("1", "pcie",  			 of_clk_get_from_provider(&clkspec)); -	clkspec.args[0] = CGC_BIT_GE1; -	orion_clkdev_add(NULL, "mv643xx_eth_port.1", +	clkspec.args[0] = CGC_BIT_SDIO; +	orion_clkdev_add(NULL, "mvsdio",  			 of_clk_get_from_provider(&clkspec)); + +	/* +	 * The ethernet interfaces forget the MAC address assigned by +	 * u-boot if the clocks are turned off. Until proper DT support +	 * is available we always enable them for now. +	 */ +	clkspec.args[0] = CGC_BIT_GE0; +	clk = of_clk_get_from_provider(&clkspec); +	orion_clkdev_add(NULL, "mv643xx_eth_port.0", clk); +	clk_prepare_enable(clk); + +	clkspec.args[0] = CGC_BIT_GE1; +	clk = of_clk_get_from_provider(&clkspec); +	orion_clkdev_add(NULL, "mv643xx_eth_port.1", clk); +	clk_prepare_enable(clk);  }  static void __init kirkwood_of_clk_init(void) diff --git a/arch/arm/mach-mmp/gplugd.c b/arch/arm/mach-mmp/gplugd.c index d1e2d595e79..f62b68d926f 100644 --- a/arch/arm/mach-mmp/gplugd.c +++ b/arch/arm/mach-mmp/gplugd.c @@ -9,6 +9,7 @@   */  #include <linux/init.h> +#include <linux/platform_device.h>  #include <linux/gpio.h>  #include <asm/mach/arch.h> diff --git a/arch/arm/mach-msm/last_radio_log.c b/arch/arm/mach-msm/last_radio_log.c index 1e243f46a96..7777767ee89 100644 --- a/arch/arm/mach-msm/last_radio_log.c +++ b/arch/arm/mach-msm/last_radio_log.c @@ -31,20 +31,8 @@ extern void *smem_item(unsigned id, unsigned *size);  static ssize_t last_radio_log_read(struct file *file, char __user *buf,  			size_t len, loff_t *offset)  { -	loff_t pos = *offset; -	ssize_t count; - -	if (pos >= radio_log_size) -		return 0; - -	count = min(len, (size_t)(radio_log_size - pos)); -	if (copy_to_user(buf, radio_log_base + pos, count)) { -		pr_err("%s: copy to user failed\n", __func__); -		return -EFAULT; -	} - -	*offset += count; -	return count; +	return simple_read_from_buffer(buf, len, offset, +				radio_log_base, radio_log_size);  }  static struct file_operations last_radio_log_fops = { @@ -67,7 +55,8 @@ void msm_init_last_radio_log(struct module *owner)  		return;  	} -	entry = create_proc_entry("last_radio_log", S_IFREG | S_IRUGO, NULL); +	entry = proc_create("last_radio_log", S_IRUGO, NULL, +				&last_radio_log_fops);  	if (!entry) {  		pr_err("%s: could not create proc entry for radio log\n",  				__func__); @@ -77,7 +66,6 @@ void msm_init_last_radio_log(struct module *owner)  	pr_err("%s: last radio log is %d bytes long\n", __func__,  		radio_log_size);  	last_radio_log_fops.owner = owner; -	entry->proc_fops = &last_radio_log_fops;  	entry->size = radio_log_size;  }  EXPORT_SYMBOL(msm_init_last_radio_log); diff --git a/arch/arm/mach-mxs/icoll.c b/arch/arm/mach-mxs/icoll.c index 8fb23af154b..e26eeba4659 100644 --- a/arch/arm/mach-mxs/icoll.c +++ b/arch/arm/mach-mxs/icoll.c @@ -100,7 +100,7 @@ static struct irq_domain_ops icoll_irq_domain_ops = {  	.xlate = irq_domain_xlate_onecell,  }; -void __init icoll_of_init(struct device_node *np, +static void __init icoll_of_init(struct device_node *np,  			  struct device_node *interrupt_parent)  {  	/* diff --git a/arch/arm/mach-mxs/mach-mxs.c b/arch/arm/mach-mxs/mach-mxs.c index 05218671334..e7b781d3788 100644 --- a/arch/arm/mach-mxs/mach-mxs.c +++ b/arch/arm/mach-mxs/mach-mxs.c @@ -41,8 +41,6 @@ static struct fb_videomode mx23evk_video_modes[] = {  		.lower_margin	= 4,  		.hsync_len	= 1,  		.vsync_len	= 1, -		.sync		= FB_SYNC_DATA_ENABLE_HIGH_ACT | -				  FB_SYNC_DOTCLK_FAILING_ACT,  	},  }; @@ -59,8 +57,6 @@ static struct fb_videomode mx28evk_video_modes[] = {  		.lower_margin	= 10,  		.hsync_len	= 10,  		.vsync_len	= 10, -		.sync		= FB_SYNC_DATA_ENABLE_HIGH_ACT | -				  FB_SYNC_DOTCLK_FAILING_ACT,  	},  }; @@ -77,7 +73,6 @@ static struct fb_videomode m28evk_video_modes[] = {  		.lower_margin	= 45,  		.hsync_len	= 1,  		.vsync_len	= 1, -		.sync		= FB_SYNC_DATA_ENABLE_HIGH_ACT,  	},  }; @@ -94,9 +89,7 @@ static struct fb_videomode apx4devkit_video_modes[] = {  		.lower_margin	= 13,  		.hsync_len	= 48,  		.vsync_len	= 3, -		.sync		= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT | -				  FB_SYNC_DATA_ENABLE_HIGH_ACT | -				  FB_SYNC_DOTCLK_FAILING_ACT, +		.sync		= FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,  	},  }; @@ -113,9 +106,7 @@ static struct fb_videomode apf28dev_video_modes[] = {  		.lower_margin = 0x15,  		.hsync_len = 64,  		.vsync_len = 4, -		.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT | -				FB_SYNC_DATA_ENABLE_HIGH_ACT | -				FB_SYNC_DOTCLK_FAILING_ACT, +		.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,  	},  }; @@ -132,7 +123,6 @@ static struct fb_videomode cfa10049_video_modes[] = {  		.lower_margin	= 2,  		.hsync_len	= 15,  		.vsync_len	= 15, -		.sync		= FB_SYNC_DATA_ENABLE_HIGH_ACT  	},  }; @@ -259,6 +249,8 @@ static void __init imx23_evk_init(void)  	mxsfb_pdata.mode_count = ARRAY_SIZE(mx23evk_video_modes);  	mxsfb_pdata.default_bpp = 32;  	mxsfb_pdata.ld_intf_width = STMLCDIF_24BIT; +	mxsfb_pdata.sync = MXSFB_SYNC_DATA_ENABLE_HIGH_ACT | +				MXSFB_SYNC_DOTCLK_FAILING_ACT;  }  static inline void enable_clk_enet_out(void) @@ -278,6 +270,8 @@ static void __init imx28_evk_init(void)  	mxsfb_pdata.mode_count = ARRAY_SIZE(mx28evk_video_modes);  	mxsfb_pdata.default_bpp = 32;  	mxsfb_pdata.ld_intf_width = STMLCDIF_24BIT; +	mxsfb_pdata.sync = MXSFB_SYNC_DATA_ENABLE_HIGH_ACT | +				MXSFB_SYNC_DOTCLK_FAILING_ACT;  	mxs_saif_clkmux_select(MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR0);  } @@ -297,6 +291,7 @@ static void __init m28evk_init(void)  	mxsfb_pdata.mode_count = ARRAY_SIZE(m28evk_video_modes);  	mxsfb_pdata.default_bpp = 16;  	mxsfb_pdata.ld_intf_width = STMLCDIF_18BIT; +	mxsfb_pdata.sync = MXSFB_SYNC_DATA_ENABLE_HIGH_ACT;  }  static void __init sc_sps1_init(void) @@ -322,6 +317,8 @@ static void __init apx4devkit_init(void)  	mxsfb_pdata.mode_count = ARRAY_SIZE(apx4devkit_video_modes);  	mxsfb_pdata.default_bpp = 32;  	mxsfb_pdata.ld_intf_width = STMLCDIF_24BIT; +	mxsfb_pdata.sync = MXSFB_SYNC_DATA_ENABLE_HIGH_ACT | +				MXSFB_SYNC_DOTCLK_FAILING_ACT;  }  #define ENET0_MDC__GPIO_4_0	MXS_GPIO_NR(4, 0) @@ -402,17 +399,18 @@ static void __init cfa10049_init(void)  {  	enable_clk_enet_out();  	update_fec_mac_prop(OUI_CRYSTALFONTZ); + +	mxsfb_pdata.mode_list = cfa10049_video_modes; +	mxsfb_pdata.mode_count = ARRAY_SIZE(cfa10049_video_modes); +	mxsfb_pdata.default_bpp = 32; +	mxsfb_pdata.ld_intf_width = STMLCDIF_18BIT; +	mxsfb_pdata.sync = MXSFB_SYNC_DATA_ENABLE_HIGH_ACT;  }  static void __init cfa10037_init(void)  {  	enable_clk_enet_out();  	update_fec_mac_prop(OUI_CRYSTALFONTZ); - -	mxsfb_pdata.mode_list = cfa10049_video_modes; -	mxsfb_pdata.mode_count = ARRAY_SIZE(cfa10049_video_modes); -	mxsfb_pdata.default_bpp = 32; -	mxsfb_pdata.ld_intf_width = STMLCDIF_18BIT;  }  static void __init apf28_init(void) @@ -423,6 +421,8 @@ static void __init apf28_init(void)  	mxsfb_pdata.mode_count = ARRAY_SIZE(apf28dev_video_modes);  	mxsfb_pdata.default_bpp = 16;  	mxsfb_pdata.ld_intf_width = STMLCDIF_16BIT; +	mxsfb_pdata.sync = MXSFB_SYNC_DATA_ENABLE_HIGH_ACT | +				MXSFB_SYNC_DOTCLK_FAILING_ACT;  }  static void __init mxs_machine_init(void) diff --git a/arch/arm/mach-mxs/mm.c b/arch/arm/mach-mxs/mm.c index a4294aa9f30..e63b7d87acb 100644 --- a/arch/arm/mach-mxs/mm.c +++ b/arch/arm/mach-mxs/mm.c @@ -18,6 +18,7 @@  #include <mach/mx23.h>  #include <mach/mx28.h> +#include <mach/common.h>  /*   * Define the MX23 memory map. diff --git a/arch/arm/mach-mxs/ocotp.c b/arch/arm/mach-mxs/ocotp.c index 54add60f94c..1dff4670375 100644 --- a/arch/arm/mach-mxs/ocotp.c +++ b/arch/arm/mach-mxs/ocotp.c @@ -19,6 +19,7 @@  #include <asm/processor.h>	/* for cpu_relax() */  #include <mach/mxs.h> +#include <mach/common.h>  #define OCOTP_WORD_OFFSET		0x20  #define OCOTP_WORD_COUNT		0x20 diff --git a/arch/arm/mach-netx/generic.c b/arch/arm/mach-netx/generic.c index 27c2cb7ab81..1504b68f4c6 100644 --- a/arch/arm/mach-netx/generic.c +++ b/arch/arm/mach-netx/generic.c @@ -168,7 +168,7 @@ void __init netx_init_irq(void)  {  	int irq; -	vic_init(io_p2v(NETX_PA_VIC), 0, ~0, 0); +	vic_init(io_p2v(NETX_PA_VIC), NETX_IRQ_VIC_START, ~0, 0);  	for (irq = NETX_IRQ_HIF_CHAINED(0); irq <= NETX_IRQ_HIF_LAST; irq++) {  		irq_set_chip_and_handler(irq, &netx_hif_chip, diff --git a/arch/arm/mach-netx/include/mach/irqs.h b/arch/arm/mach-netx/include/mach/irqs.h index 6ce914d54a3..8f74a844a77 100644 --- a/arch/arm/mach-netx/include/mach/irqs.h +++ b/arch/arm/mach-netx/include/mach/irqs.h @@ -17,42 +17,42 @@   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   */ -#define NETX_IRQ_VIC_START   0 -#define NETX_IRQ_SOFTINT     0 -#define NETX_IRQ_TIMER0      1 -#define NETX_IRQ_TIMER1      2 -#define NETX_IRQ_TIMER2      3 -#define NETX_IRQ_SYSTIME_NS  4 -#define NETX_IRQ_SYSTIME_S   5 -#define NETX_IRQ_GPIO_15     6 -#define NETX_IRQ_WATCHDOG    7 -#define NETX_IRQ_UART0       8 -#define NETX_IRQ_UART1       9 -#define NETX_IRQ_UART2      10 -#define NETX_IRQ_USB        11 -#define NETX_IRQ_SPI        12 -#define NETX_IRQ_I2C        13 -#define NETX_IRQ_LCD        14 -#define NETX_IRQ_HIF        15 -#define NETX_IRQ_GPIO_0_14  16 -#define NETX_IRQ_XPEC0      17 -#define NETX_IRQ_XPEC1      18 -#define NETX_IRQ_XPEC2      19 -#define NETX_IRQ_XPEC3      20 -#define NETX_IRQ_XPEC(no)   (17 + (no)) -#define NETX_IRQ_MSYNC0     21 -#define NETX_IRQ_MSYNC1     22 -#define NETX_IRQ_MSYNC2     23 -#define NETX_IRQ_MSYNC3     24 -#define NETX_IRQ_IRQ_PHY    25 -#define NETX_IRQ_ISO_AREA   26 +#define NETX_IRQ_VIC_START	64 +#define NETX_IRQ_SOFTINT	(NETX_IRQ_VIC_START + 0) +#define NETX_IRQ_TIMER0		(NETX_IRQ_VIC_START + 1) +#define NETX_IRQ_TIMER1		(NETX_IRQ_VIC_START + 2) +#define NETX_IRQ_TIMER2		(NETX_IRQ_VIC_START + 3) +#define NETX_IRQ_SYSTIME_NS	(NETX_IRQ_VIC_START + 4) +#define NETX_IRQ_SYSTIME_S	(NETX_IRQ_VIC_START + 5) +#define NETX_IRQ_GPIO_15	(NETX_IRQ_VIC_START + 6) +#define NETX_IRQ_WATCHDOG	(NETX_IRQ_VIC_START + 7) +#define NETX_IRQ_UART0		(NETX_IRQ_VIC_START + 8) +#define NETX_IRQ_UART1		(NETX_IRQ_VIC_START + 9) +#define NETX_IRQ_UART2		(NETX_IRQ_VIC_START + 10) +#define NETX_IRQ_USB		(NETX_IRQ_VIC_START + 11) +#define NETX_IRQ_SPI		(NETX_IRQ_VIC_START + 12) +#define NETX_IRQ_I2C		(NETX_IRQ_VIC_START + 13) +#define NETX_IRQ_LCD		(NETX_IRQ_VIC_START + 14) +#define NETX_IRQ_HIF		(NETX_IRQ_VIC_START + 15) +#define NETX_IRQ_GPIO_0_14	(NETX_IRQ_VIC_START + 16) +#define NETX_IRQ_XPEC0		(NETX_IRQ_VIC_START + 17) +#define NETX_IRQ_XPEC1		(NETX_IRQ_VIC_START + 18) +#define NETX_IRQ_XPEC2		(NETX_IRQ_VIC_START + 19) +#define NETX_IRQ_XPEC3		(NETX_IRQ_VIC_START + 20) +#define NETX_IRQ_XPEC(no)	(NETX_IRQ_VIC_START + 17 + (no)) +#define NETX_IRQ_MSYNC0		(NETX_IRQ_VIC_START + 21) +#define NETX_IRQ_MSYNC1		(NETX_IRQ_VIC_START + 22) +#define NETX_IRQ_MSYNC2		(NETX_IRQ_VIC_START + 23) +#define NETX_IRQ_MSYNC3		(NETX_IRQ_VIC_START + 24) +#define NETX_IRQ_IRQ_PHY	(NETX_IRQ_VIC_START + 25) +#define NETX_IRQ_ISO_AREA	(NETX_IRQ_VIC_START + 26)  /* int 27 is reserved */  /* int 28 is reserved */ -#define NETX_IRQ_TIMER3     29 -#define NETX_IRQ_TIMER4     30 +#define NETX_IRQ_TIMER3		(NETX_IRQ_VIC_START + 29) +#define NETX_IRQ_TIMER4		(NETX_IRQ_VIC_START + 30)  /* int 31 is reserved */ -#define NETX_IRQS 32 +#define NETX_IRQS 		(NETX_IRQ_VIC_START + 32)  /* for multiplexed irqs on gpio 0..14 */  #define NETX_IRQ_GPIO(x) (NETX_IRQS + (x)) diff --git a/arch/arm/mach-omap1/common.h b/arch/arm/mach-omap1/common.h index fb18831e88a..14f7e992047 100644 --- a/arch/arm/mach-omap1/common.h +++ b/arch/arm/mach-omap1/common.h @@ -31,6 +31,8 @@  #include <plat/i2c.h> +#include <mach/irqs.h> +  #if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)  void omap7xx_map_io(void);  #else diff --git a/arch/arm/mach-omap1/pm.c b/arch/arm/mach-omap1/pm.c index 7a7690ab6cb..ff72d297a17 100644 --- a/arch/arm/mach-omap1/pm.c +++ b/arch/arm/mach-omap1/pm.c @@ -37,7 +37,8 @@  #include <linux/suspend.h>  #include <linux/sched.h> -#include <linux/proc_fs.h> +#include <linux/debugfs.h> +#include <linux/seq_file.h>  #include <linux/interrupt.h>  #include <linux/sysfs.h>  #include <linux/module.h> @@ -422,23 +423,12 @@ void omap1_pm_suspend(void)  		omap_rev());  } -#if defined(DEBUG) && defined(CONFIG_PROC_FS) -static int g_read_completed; - +#ifdef CONFIG_DEBUG_FS  /*   * Read system PM registers for debugging   */ -static int omap_pm_read_proc( -	char *page_buffer, -	char **my_first_byte, -	off_t virtual_start, -	int length, -	int *eof, -	void *data) +static int omap_pm_debug_show(struct seq_file *m, void *v)  { -	int my_buffer_offset = 0; -	char * const my_base = page_buffer; -  	ARM_SAVE(ARM_CKCTL);  	ARM_SAVE(ARM_IDLECT1);  	ARM_SAVE(ARM_IDLECT2); @@ -479,10 +469,7 @@ static int omap_pm_read_proc(  		MPUI1610_SAVE(EMIFS_CONFIG);  	} -	if (virtual_start == 0) { -		g_read_completed = 0; - -		my_buffer_offset += sprintf(my_base + my_buffer_offset, +	seq_printf(m,  		   "ARM_CKCTL_REG:            0x%-8x     \n"  		   "ARM_IDLECT1_REG:          0x%-8x     \n"  		   "ARM_IDLECT2_REG:          0x%-8x     \n" @@ -512,8 +499,8 @@ static int omap_pm_read_proc(  		   ULPD_SHOW(ULPD_STATUS_REQ),  		   ULPD_SHOW(ULPD_POWER_CTRL)); -		if (cpu_is_omap7xx()) { -			my_buffer_offset += sprintf(my_base + my_buffer_offset, +	if (cpu_is_omap7xx()) { +		seq_printf(m,  			   "MPUI7XX_CTRL_REG	     0x%-8x \n"  			   "MPUI7XX_DSP_STATUS_REG:      0x%-8x \n"  			   "MPUI7XX_DSP_BOOT_CONFIG_REG: 0x%-8x \n" @@ -526,8 +513,8 @@ static int omap_pm_read_proc(  			   MPUI7XX_SHOW(MPUI_DSP_API_CONFIG),  			   MPUI7XX_SHOW(EMIFF_SDRAM_CONFIG),  			   MPUI7XX_SHOW(EMIFS_CONFIG)); -		} else if (cpu_is_omap15xx()) { -			my_buffer_offset += sprintf(my_base + my_buffer_offset, +	} else if (cpu_is_omap15xx()) { +		seq_printf(m,  			   "MPUI1510_CTRL_REG             0x%-8x \n"  			   "MPUI1510_DSP_STATUS_REG:      0x%-8x \n"  			   "MPUI1510_DSP_BOOT_CONFIG_REG: 0x%-8x \n" @@ -540,8 +527,8 @@ static int omap_pm_read_proc(  			   MPUI1510_SHOW(MPUI_DSP_API_CONFIG),  			   MPUI1510_SHOW(EMIFF_SDRAM_CONFIG),  			   MPUI1510_SHOW(EMIFS_CONFIG)); -		} else if (cpu_is_omap16xx()) { -			my_buffer_offset += sprintf(my_base + my_buffer_offset, +	} else if (cpu_is_omap16xx()) { +		seq_printf(m,  			   "MPUI1610_CTRL_REG             0x%-8x \n"  			   "MPUI1610_DSP_STATUS_REG:      0x%-8x \n"  			   "MPUI1610_DSP_BOOT_CONFIG_REG: 0x%-8x \n" @@ -554,28 +541,37 @@ static int omap_pm_read_proc(  			   MPUI1610_SHOW(MPUI_DSP_API_CONFIG),  			   MPUI1610_SHOW(EMIFF_SDRAM_CONFIG),  			   MPUI1610_SHOW(EMIFS_CONFIG)); -		} - -		g_read_completed++; -	} else if (g_read_completed >= 1) { -		 *eof = 1; -		 return 0;  	} -	g_read_completed++; -	*my_first_byte = page_buffer; -	return  my_buffer_offset; +	return 0; +} + +static int omap_pm_debug_open(struct inode *inode, struct file *file) +{ +	return single_open(file, omap_pm_debug_show, +				&inode->i_private);  } -static void omap_pm_init_proc(void) +static const struct file_operations omap_pm_debug_fops = { +	.open		= omap_pm_debug_open, +	.read		= seq_read, +	.llseek		= seq_lseek, +	.release	= seq_release, +}; + +static void omap_pm_init_debugfs(void)  { -	/* XXX Appears to leak memory */ -	create_proc_read_entry("driver/omap_pm", -			       S_IWUSR | S_IRUGO, NULL, -			       omap_pm_read_proc, NULL); +	struct dentry *d; + +	d = debugfs_create_dir("pm_debug", NULL); +	if (!d) +		return; + +	(void) debugfs_create_file("omap_pm", S_IWUSR | S_IRUGO, +					d, NULL, &omap_pm_debug_fops);  } -#endif /* DEBUG && CONFIG_PROC_FS */ +#endif /* CONFIG_DEBUG_FS */  /*   *	omap_pm_prepare - Do preliminary suspend work. @@ -701,8 +697,8 @@ static int __init omap_pm_init(void)  	suspend_set_ops(&omap_pm_ops); -#if defined(DEBUG) && defined(CONFIG_PROC_FS) -	omap_pm_init_proc(); +#ifdef CONFIG_DEBUG_FS +	omap_pm_init_debugfs();  #endif  #ifdef CONFIG_OMAP_32K_TIMER diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 49ac3dfebef..8111cd9ff3e 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@ -311,9 +311,6 @@ config MACH_OMAP_ZOOM2  	default y  	select OMAP_PACKAGE_CBB  	select REGULATOR_FIXED_VOLTAGE if REGULATOR -	select SERIAL_8250 -	select SERIAL_8250_CONSOLE -	select SERIAL_CORE_CONSOLE  config MACH_OMAP_ZOOM3  	bool "OMAP3630 Zoom3 board" @@ -321,9 +318,6 @@ config MACH_OMAP_ZOOM3  	default y  	select OMAP_PACKAGE_CBP  	select REGULATOR_FIXED_VOLTAGE if REGULATOR -	select SERIAL_8250 -	select SERIAL_8250_CONSOLE -	select SERIAL_CORE_CONSOLE  config MACH_CM_T35  	bool "CompuLab CM-T35/CM-T3730 modules" diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index 0274ff7a2a2..e54a4806019 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c @@ -102,6 +102,7 @@ DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)")  	.init_irq	= omap_intc_of_init,  	.handle_irq	= omap3_intc_handle_irq,  	.init_machine	= omap_generic_init, +	.init_late	= omap3_init_late,  	.init_time	= omap3_sync32k_timer_init,  	.dt_compat	= omap3_boards_compat,  	.restart	= omap3xxx_restart, @@ -119,6 +120,7 @@ DT_MACHINE_START(OMAP3_GP_DT, "Generic OMAP3-GP (Flattened Device Tree)")  	.init_irq	= omap_intc_of_init,  	.handle_irq	= omap3_intc_handle_irq,  	.init_machine	= omap_generic_init, +	.init_late	= omap3_init_late,  	.init_time	= omap3_secure_sync32k_timer_init,  	.dt_compat	= omap3_gp_boards_compat,  	.restart	= omap3xxx_restart, diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c index f7c4616cbb6..d2ea68ea678 100644 --- a/arch/arm/mach-omap2/board-rx51.c +++ b/arch/arm/mach-omap2/board-rx51.c @@ -17,6 +17,7 @@  #include <linux/io.h>  #include <linux/gpio.h>  #include <linux/leds.h> +#include <linux/usb/phy.h>  #include <linux/usb/musb.h>  #include <linux/platform_data/spi-omap2-mcspi.h> @@ -98,6 +99,7 @@ static void __init rx51_init(void)  	sdrc_params = nokia_get_sdram_timings();  	omap_sdrc_init(sdrc_params, sdrc_params); +	usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");  	usb_musb_init(&musb_board_data);  	rx51_peripherals_init(); diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h index 0a6b9c7a63d..40f4a03d728 100644 --- a/arch/arm/mach-omap2/common.h +++ b/arch/arm/mach-omap2/common.h @@ -108,7 +108,6 @@ void omap35xx_init_late(void);  void omap3630_init_late(void);  void am35xx_init_late(void);  void ti81xx_init_late(void); -void omap4430_init_late(void);  int omap2_common_pm_late_init(void);  #if defined(CONFIG_SOC_OMAP2420) || defined(CONFIG_SOC_OMAP2430) diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index e4b16c8efe8..410e1bac781 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c @@ -1122,9 +1122,6 @@ int gpmc_calc_timings(struct gpmc_timings *gpmc_t,  	/* TODO: remove, see function definition */  	gpmc_convert_ps_to_ns(gpmc_t); -	/* Now the GPMC is initialised, unreserve the chip-selects */ -	gpmc_cs_map = 0; -  	return 0;  } @@ -1383,6 +1380,9 @@ static int gpmc_probe(struct platform_device *pdev)  	if (IS_ERR_VALUE(gpmc_setup_irq()))  		dev_warn(gpmc_dev, "gpmc_setup_irq failed\n"); +	/* Now the GPMC is initialised, unreserve the chip-selects */ +	gpmc_cs_map = 0; +  	rc = gpmc_probe_dt(pdev);  	if (rc < 0) {  		clk_disable_unprepare(gpmc_l3_clk); diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c index 6a217c98db5..f82cf878d6a 100644 --- a/arch/arm/mach-omap2/mux.c +++ b/arch/arm/mach-omap2/mux.c @@ -211,8 +211,6 @@ static int __init _omap_mux_get_by_name(struct omap_mux_partition *partition,  		return -EINVAL;  	} -	pr_err("%s: Could not find signal %s\n", __func__, muxname); -  	return -ENODEV;  } @@ -234,6 +232,8 @@ int __init omap_mux_get_by_name(const char *muxname,  		return mux_mode;  	} +	pr_err("%s: Could not find signal %s\n", __func__, muxname); +  	return -ENODEV;  } @@ -739,8 +739,9 @@ static void __init omap_mux_dbg_create_entry(  	list_for_each_entry(e, &partition->muxmodes, node) {  		struct omap_mux *m = &e->mux; -		(void)debugfs_create_file(m->muxnames[0], S_IWUSR, mux_dbg_dir, -					  m, &omap_mux_dbg_signal_fops); +		(void)debugfs_create_file(m->muxnames[0], S_IWUSR | S_IRUGO, +					  mux_dbg_dir, m, +					  &omap_mux_dbg_signal_fops);  	}  } diff --git a/arch/arm/mach-pxa/raumfeld.c b/arch/arm/mach-pxa/raumfeld.c index af41888acbd..969b0ba7fa7 100644 --- a/arch/arm/mach-pxa/raumfeld.c +++ b/arch/arm/mach-pxa/raumfeld.c @@ -505,6 +505,7 @@ static struct w1_gpio_platform_data w1_gpio_platform_data = {  	.pin			= GPIO_ONE_WIRE,  	.is_open_drain		= 0,  	.enable_external_pullup	= w1_enable_external_pullup, +	.ext_pullup_enable_pin	= -EINVAL,  };  struct platform_device raumfeld_w1_gpio_device = { diff --git a/arch/arm/mach-s5pv210/clock.c b/arch/arm/mach-s5pv210/clock.c index fcdf52dbcc4..f051f53e35b 100644 --- a/arch/arm/mach-s5pv210/clock.c +++ b/arch/arm/mach-s5pv210/clock.c @@ -214,11 +214,6 @@ static struct clk clk_pcmcdclk2 = {  	.name		= "pcmcdclk",  }; -static struct clk dummy_apb_pclk = { -	.name		= "apb_pclk", -	.id		= -1, -}; -  static struct clk *clkset_vpllsrc_list[] = {  	[0] = &clk_fin_vpll,  	[1] = &clk_sclk_hdmi27m, @@ -305,18 +300,6 @@ static struct clk_ops clk_fout_apll_ops = {  static struct clk init_clocks_off[] = {  	{ -		.name		= "dma", -		.devname	= "dma-pl330.0", -		.parent		= &clk_hclk_psys.clk, -		.enable		= s5pv210_clk_ip0_ctrl, -		.ctrlbit	= (1 << 3), -	}, { -		.name		= "dma", -		.devname	= "dma-pl330.1", -		.parent		= &clk_hclk_psys.clk, -		.enable		= s5pv210_clk_ip0_ctrl, -		.ctrlbit	= (1 << 4), -	}, {  		.name		= "rot",  		.parent		= &clk_hclk_dsys.clk,  		.enable		= s5pv210_clk_ip0_ctrl, @@ -573,6 +556,20 @@ static struct clk clk_hsmmc3 = {  	.ctrlbit	= (1<<19),  }; +static struct clk clk_pdma0 = { +	.name		= "pdma0", +	.parent		= &clk_hclk_psys.clk, +	.enable		= s5pv210_clk_ip0_ctrl, +	.ctrlbit	= (1 << 3), +}; + +static struct clk clk_pdma1 = { +	.name		= "pdma1", +	.parent		= &clk_hclk_psys.clk, +	.enable		= s5pv210_clk_ip0_ctrl, +	.ctrlbit	= (1 << 4), +}; +  static struct clk *clkset_uart_list[] = {  	[6] = &clk_mout_mpll.clk,  	[7] = &clk_mout_epll.clk, @@ -1075,6 +1072,8 @@ static struct clk *clk_cdev[] = {  	&clk_hsmmc1,  	&clk_hsmmc2,  	&clk_hsmmc3, +	&clk_pdma0, +	&clk_pdma1,  };  /* Clock initialisation code */ @@ -1333,6 +1332,8 @@ static struct clk_lookup s5pv210_clk_lookup[] = {  	CLKDEV_INIT(NULL, "spi_busclk0", &clk_p),  	CLKDEV_INIT("s5pv210-spi.0", "spi_busclk1", &clk_sclk_spi0.clk),  	CLKDEV_INIT("s5pv210-spi.1", "spi_busclk1", &clk_sclk_spi1.clk), +	CLKDEV_INIT("dma-pl330.0", "apb_pclk", &clk_pdma0), +	CLKDEV_INIT("dma-pl330.1", "apb_pclk", &clk_pdma1),  };  void __init s5pv210_register_clocks(void) @@ -1361,6 +1362,5 @@ void __init s5pv210_register_clocks(void)  	for (ptr = 0; ptr < ARRAY_SIZE(clk_cdev); ptr++)  		s3c_disable_clocks(clk_cdev[ptr], 1); -	s3c24xx_register_clock(&dummy_apb_pclk);  	s3c_pwmclk_init();  } diff --git a/arch/arm/mach-s5pv210/mach-goni.c b/arch/arm/mach-s5pv210/mach-goni.c index 3a38f7b34b9..e373de44a8b 100644 --- a/arch/arm/mach-s5pv210/mach-goni.c +++ b/arch/arm/mach-s5pv210/mach-goni.c @@ -845,7 +845,7 @@ static struct fimc_source_info goni_camera_sensors[] = {  		.mux_id		= 0,  		.flags		= V4L2_MBUS_PCLK_SAMPLE_FALLING |  				  V4L2_MBUS_VSYNC_ACTIVE_LOW, -		.bus_type	= FIMC_BUS_TYPE_ITU_601, +		.fimc_bus_type	= FIMC_BUS_TYPE_ITU_601,  		.board_info	= &noon010pc30_board_info,  		.i2c_bus_num	= 0,  		.clk_frequency	= 16000000UL, diff --git a/arch/arm/mach-shmobile/board-marzen.c b/arch/arm/mach-shmobile/board-marzen.c index cdcb799e802..fec49ebc359 100644 --- a/arch/arm/mach-shmobile/board-marzen.c +++ b/arch/arm/mach-shmobile/board-marzen.c @@ -32,6 +32,7 @@  #include <linux/smsc911x.h>  #include <linux/spi/spi.h>  #include <linux/spi/sh_hspi.h> +#include <linux/mmc/host.h>  #include <linux/mmc/sh_mobile_sdhi.h>  #include <linux/mfd/tmio.h>  #include <linux/usb/otg.h> diff --git a/arch/arm/mach-spear3xx/spear3xx.c b/arch/arm/mach-spear3xx/spear3xx.c index f9d754f90c5..d2b3937c401 100644 --- a/arch/arm/mach-spear3xx/spear3xx.c +++ b/arch/arm/mach-spear3xx/spear3xx.c @@ -14,7 +14,7 @@  #define pr_fmt(fmt) "SPEAr3xx: " fmt  #include <linux/amba/pl022.h> -#include <linux/amba/pl08x.h> +#include <linux/amba/pl080.h>  #include <linux/io.h>  #include <plat/pl080.h>  #include <mach/generic.h> diff --git a/arch/arm/mm/context.c b/arch/arm/mm/context.c index 7a0511191f6..a5a4b2bc42b 100644 --- a/arch/arm/mm/context.c +++ b/arch/arm/mm/context.c @@ -152,9 +152,9 @@ static int is_reserved_asid(u64 asid)  	return 0;  } -static void new_context(struct mm_struct *mm, unsigned int cpu) +static u64 new_context(struct mm_struct *mm, unsigned int cpu)  { -	u64 asid = mm->context.id; +	u64 asid = atomic64_read(&mm->context.id);  	u64 generation = atomic64_read(&asid_generation);  	if (asid != 0 && is_reserved_asid(asid)) { @@ -181,13 +181,14 @@ static void new_context(struct mm_struct *mm, unsigned int cpu)  		cpumask_clear(mm_cpumask(mm));  	} -	mm->context.id = asid; +	return asid;  }  void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk)  {  	unsigned long flags;  	unsigned int cpu = smp_processor_id(); +	u64 asid;  	if (unlikely(mm->context.vmalloc_seq != init_mm.context.vmalloc_seq))  		__check_vmalloc_seq(mm); @@ -198,20 +199,26 @@ void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk)  	 */  	cpu_set_reserved_ttbr0(); -	if (!((mm->context.id ^ atomic64_read(&asid_generation)) >> ASID_BITS) -	    && atomic64_xchg(&per_cpu(active_asids, cpu), mm->context.id)) +	asid = atomic64_read(&mm->context.id); +	if (!((asid ^ atomic64_read(&asid_generation)) >> ASID_BITS) +	    && atomic64_xchg(&per_cpu(active_asids, cpu), asid))  		goto switch_mm_fastpath;  	raw_spin_lock_irqsave(&cpu_asid_lock, flags);  	/* Check that our ASID belongs to the current generation. */ -	if ((mm->context.id ^ atomic64_read(&asid_generation)) >> ASID_BITS) -		new_context(mm, cpu); - -	atomic64_set(&per_cpu(active_asids, cpu), mm->context.id); -	cpumask_set_cpu(cpu, mm_cpumask(mm)); +	asid = atomic64_read(&mm->context.id); +	if ((asid ^ atomic64_read(&asid_generation)) >> ASID_BITS) { +		asid = new_context(mm, cpu); +		atomic64_set(&mm->context.id, asid); +	} -	if (cpumask_test_and_clear_cpu(cpu, &tlb_flush_pending)) +	if (cpumask_test_and_clear_cpu(cpu, &tlb_flush_pending)) { +		local_flush_bp_all();  		local_flush_tlb_all(); +	} + +	atomic64_set(&per_cpu(active_asids, cpu), asid); +	cpumask_set_cpu(cpu, mm_cpumask(mm));  	raw_spin_unlock_irqrestore(&cpu_asid_lock, flags);  switch_mm_fastpath: diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index c7e3759f16d..e9db6b4bf65 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -342,6 +342,7 @@ static int __init atomic_pool_init(void)  {  	struct dma_pool *pool = &atomic_pool;  	pgprot_t prot = pgprot_dmacoherent(pgprot_kernel); +	gfp_t gfp = GFP_KERNEL | GFP_DMA;  	unsigned long nr_pages = pool->size >> PAGE_SHIFT;  	unsigned long *bitmap;  	struct page *page; @@ -361,8 +362,8 @@ static int __init atomic_pool_init(void)  		ptr = __alloc_from_contiguous(NULL, pool->size, prot, &page,  					      atomic_pool_init);  	else -		ptr = __alloc_remap_buffer(NULL, pool->size, GFP_KERNEL, prot, -					   &page, atomic_pool_init); +		ptr = __alloc_remap_buffer(NULL, pool->size, gfp, prot, &page, +					   atomic_pool_init);  	if (ptr) {  		int i; diff --git a/arch/arm/mm/idmap.c b/arch/arm/mm/idmap.c index 2dffc010cc4..5ee505c937d 100644 --- a/arch/arm/mm/idmap.c +++ b/arch/arm/mm/idmap.c @@ -141,6 +141,7 @@ void setup_mm_for_reboot(void)  {  	/* Switch to the identity mapping. */  	cpu_switch_mm(idmap_pgd, &init_mm); +	local_flush_bp_all();  #ifdef CONFIG_CPU_HAS_ASID  	/* diff --git a/arch/arm/mm/proc-v7-3level.S b/arch/arm/mm/proc-v7-3level.S index 50bf1dafc9e..6ffd78c0f9a 100644 --- a/arch/arm/mm/proc-v7-3level.S +++ b/arch/arm/mm/proc-v7-3level.S @@ -48,7 +48,7 @@  ENTRY(cpu_v7_switch_mm)  #ifdef CONFIG_MMU  	mmid	r1, r1				@ get mm->context.id -	and	r3, r1, #0xff +	asid	r3, r1  	mov	r3, r3, lsl #(48 - 32)		@ ASID  	mcrr	p15, 0, r0, r3, c2		@ set TTB 0  	isb diff --git a/arch/arm/net/bpf_jit_32.c b/arch/arm/net/bpf_jit_32.c index 6828ef6ce80..a0bd8a755bd 100644 --- a/arch/arm/net/bpf_jit_32.c +++ b/arch/arm/net/bpf_jit_32.c @@ -576,7 +576,7 @@ load_ind:  			/* x = ((*(frame + k)) & 0xf) << 2; */  			ctx->seen |= SEEN_X | SEEN_DATA | SEEN_CALL;  			/* the interpreter should deal with the negative K */ -			if (k < 0) +			if ((int)k < 0)  				return -1;  			/* offset in r1: we might have to take the slow path */  			emit_mov_i(r_off, k, ctx); diff --git a/arch/arm/plat-orion/addr-map.c b/arch/arm/plat-orion/addr-map.c index febe3862873..807ac8e5cbc 100644 --- a/arch/arm/plat-orion/addr-map.c +++ b/arch/arm/plat-orion/addr-map.c @@ -157,9 +157,12 @@ void __init orion_setup_cpu_mbus_target(const struct orion_addr_map_cfg *cfg,  		u32 size = readl(ddr_window_cpu_base + DDR_SIZE_CS_OFF(i));  		/* -		 * Chip select enabled? +		 * We only take care of entries for which the chip +		 * select is enabled, and that don't have high base +		 * address bits set (devices can only access the first +		 * 32 bits of the memory).  		 */ -		if (size & 1) { +		if ((size & 1) && !(base & 0xF)) {  			struct mbus_dram_window *w;  			w = &orion_mbus_dram_info.cs[cs++]; diff --git a/arch/arm/plat-spear/Kconfig b/arch/arm/plat-spear/Kconfig index 739d016eb27..8a08c31b5e2 100644 --- a/arch/arm/plat-spear/Kconfig +++ b/arch/arm/plat-spear/Kconfig @@ -10,7 +10,7 @@ choice  config ARCH_SPEAR13XX  	bool "ST SPEAr13xx with Device Tree" -	select ARCH_HAVE_CPUFREQ +	select ARCH_HAS_CPUFREQ  	select ARM_GIC  	select CPU_V7  	select GPIO_SPEAR_SPICS  |