浏览代码

Merge 4.9-rc7 into usb-next

We want the USB fixes in here as well.

Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Greg Kroah-Hartman 8 年之前
父节点
当前提交
0edbf9e552
共有 100 个文件被更改,包括 549 次插入351 次删除
  1. 2 2
      Documentation/devicetree/bindings/ipmi/aspeed,ast2400-ibt-bmc.txt
  2. 1 1
      Documentation/devicetree/bindings/sound/omap-abe-twl6040.txt
  3. 2 2
      Documentation/i2c/i2c-topology
  4. 2 1
      Documentation/networking/dsa/dsa.txt
  5. 11 0
      Documentation/virtual/kvm/api.txt
  6. 12 0
      MAINTAINERS
  7. 4 3
      Makefile
  8. 7 7
      arch/arm/boot/dts/imx53-qsb.dts
  9. 5 0
      arch/arm/boot/dts/logicpd-som-lv.dtsi
  10. 2 2
      arch/arm/boot/dts/logicpd-torpedo-som.dtsi
  11. 4 3
      arch/arm/boot/dts/omap5-board-common.dtsi
  12. 1 1
      arch/arm/boot/dts/stih410-b2260.dts
  13. 4 0
      arch/arm/boot/dts/sun8i-a23-a33.dtsi
  14. 0 1
      arch/arm/include/asm/Kbuild
  15. 1 1
      arch/arm/kernel/Makefile
  16. 183 0
      arch/arm/kernel/armksyms.c
  17. 0 3
      arch/arm/kernel/entry-ftrace.S
  18. 0 3
      arch/arm/kernel/head.S
  19. 0 3
      arch/arm/kernel/smccc-call.S
  20. 20 0
      arch/arm/kernel/traps.c
  21. 5 0
      arch/arm/kernel/vmlinux-xip.lds.S
  22. 0 3
      arch/arm/lib/ashldi3.S
  23. 0 3
      arch/arm/lib/ashrdi3.S
  24. 3 34
      arch/arm/lib/backtrace.S
  25. 0 5
      arch/arm/lib/bitops.h
  26. 0 3
      arch/arm/lib/bswapsdi2.S
  27. 0 4
      arch/arm/lib/clear_user.S
  28. 0 2
      arch/arm/lib/copy_from_user.S
  29. 0 2
      arch/arm/lib/copy_page.S
  30. 0 4
      arch/arm/lib/copy_to_user.S
  31. 1 2
      arch/arm/lib/csumipv6.S
  32. 0 2
      arch/arm/lib/csumpartial.S
  33. 0 1
      arch/arm/lib/csumpartialcopy.S
  34. 0 2
      arch/arm/lib/csumpartialcopygeneric.S
  35. 0 1
      arch/arm/lib/csumpartialcopyuser.S
  36. 0 2
      arch/arm/lib/delay.c
  37. 0 2
      arch/arm/lib/div64.S
  38. 0 9
      arch/arm/lib/findbit.S
  39. 0 9
      arch/arm/lib/getuser.S
  40. 0 2
      arch/arm/lib/io-readsb.S
  41. 0 2
      arch/arm/lib/io-readsl.S
  42. 1 2
      arch/arm/lib/io-readsw-armv3.S
  43. 0 2
      arch/arm/lib/io-readsw-armv4.S
  44. 0 2
      arch/arm/lib/io-writesb.S
  45. 0 2
      arch/arm/lib/io-writesl.S
  46. 0 2
      arch/arm/lib/io-writesw-armv3.S
  47. 0 2
      arch/arm/lib/io-writesw-armv4.S
  48. 0 9
      arch/arm/lib/lib1funcs.S
  49. 0 3
      arch/arm/lib/lshrdi3.S
  50. 0 2
      arch/arm/lib/memchr.S
  51. 0 3
      arch/arm/lib/memcpy.S
  52. 0 2
      arch/arm/lib/memmove.S
  53. 0 3
      arch/arm/lib/memset.S
  54. 0 2
      arch/arm/lib/memzero.S
  55. 0 3
      arch/arm/lib/muldi3.S
  56. 0 5
      arch/arm/lib/putuser.S
  57. 0 2
      arch/arm/lib/strchr.S
  58. 0 2
      arch/arm/lib/strrchr.S
  59. 0 3
      arch/arm/lib/uaccess_with_memcpy.c
  60. 0 3
      arch/arm/lib/ucmpdi2.S
  61. 1 0
      arch/arm/mach-imx/Makefile
  62. 20 0
      arch/arm/mach-imx/ssi-fiq-ksym.c
  63. 1 6
      arch/arm/mach-imx/ssi-fiq.S
  64. 1 0
      arch/arm/mach-omap2/Kconfig
  65. 11 5
      arch/arm/mach-omap2/id.c
  66. 3 0
      arch/arm/mach-omap2/prm3xxx.c
  67. 6 0
      arch/arm/mach-omap2/voltage.c
  68. 1 1
      arch/arm/mm/dma-mapping.c
  69. 1 1
      arch/arm/mm/proc-v7m.S
  70. 2 2
      arch/arm64/boot/dts/marvell/armada-37xx.dtsi
  71. 3 3
      arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi
  72. 9 1
      arch/arm64/include/asm/perf_event.h
  73. 1 9
      arch/arm64/kernel/perf_event.c
  74. 8 2
      arch/arm64/kvm/sys_regs.c
  75. 6 0
      arch/mips/include/asm/mipsregs.h
  76. 13 0
      arch/mips/include/asm/tlb.h
  77. 5 4
      arch/mips/mm/fault.c
  78. 2 2
      arch/mips/mm/init.c
  79. 3 3
      arch/mips/mm/tlb-r4k.c
  80. 3 1
      arch/parisc/Kconfig
  81. 12 19
      arch/parisc/kernel/cache.c
  82. 4 4
      arch/parisc/kernel/inventory.c
  83. 22 15
      arch/parisc/kernel/pacache.S
  84. 1 1
      arch/parisc/kernel/pci-dma.c
  85. 4 0
      arch/parisc/kernel/setup.c
  86. 11 46
      arch/parisc/kernel/time.c
  87. 6 2
      arch/powerpc/boot/main.c
  88. 13 0
      arch/powerpc/boot/opal-calls.S
  89. 11 0
      arch/powerpc/boot/opal.c
  90. 1 0
      arch/powerpc/boot/ops.h
  91. 12 0
      arch/powerpc/include/asm/asm-prototypes.h
  92. 12 3
      arch/powerpc/include/asm/exception-64s.h
  93. 10 4
      arch/powerpc/include/asm/mmu.h
  94. 1 0
      arch/powerpc/include/asm/ppc-opcode.h
  95. 1 0
      arch/powerpc/include/asm/reg.h
  96. 4 4
      arch/powerpc/kernel/cpu_setup_power.S
  97. 8 3
      arch/powerpc/kernel/exceptions-64s.S
  98. 21 21
      arch/powerpc/kernel/process.c
  99. 14 6
      arch/powerpc/kernel/setup_64.c
  100. 10 2
      arch/powerpc/mm/hash_utils_64.c

+ 2 - 2
Documentation/devicetree/bindings/ipmi/aspeed,ast2400-bt-bmc.txt → Documentation/devicetree/bindings/ipmi/aspeed,ast2400-ibt-bmc.txt

@@ -6,7 +6,7 @@ perform in-band IPMI communication with their host.
 
 
 Required properties:
 Required properties:
 
 
-- compatible : should be "aspeed,ast2400-bt-bmc"
+- compatible : should be "aspeed,ast2400-ibt-bmc"
 - reg: physical address and size of the registers
 - reg: physical address and size of the registers
 
 
 Optional properties:
 Optional properties:
@@ -17,7 +17,7 @@ Optional properties:
 Example:
 Example:
 
 
 	ibt@1e789140 {
 	ibt@1e789140 {
-		compatible = "aspeed,ast2400-bt-bmc";
+		compatible = "aspeed,ast2400-ibt-bmc";
 		reg = <0x1e789140 0x18>;
 		reg = <0x1e789140 0x18>;
 		interrupts = <8>;
 		interrupts = <8>;
 	};
 	};

+ 1 - 1
Documentation/devicetree/bindings/sound/omap-abe-twl6040.txt

@@ -12,7 +12,7 @@ Required properties:
 
 
 Optional properties:
 Optional properties:
 - ti,dmic: phandle for the OMAP dmic node if the machine have it connected
 - ti,dmic: phandle for the OMAP dmic node if the machine have it connected
-- ti,jack_detection: Need to be present if the board capable to detect jack
+- ti,jack-detection: Need to be present if the board capable to detect jack
   insertion, removal.
   insertion, removal.
 
 
 Available audio endpoints for the audio-routing table:
 Available audio endpoints for the audio-routing table:

+ 2 - 2
Documentation/i2c/i2c-topology

@@ -326,7 +326,7 @@ Two parent-locked sibling muxes
 
 
 This is a good topology.
 This is a good topology.
 
 
-                                   .--------.
+                                    .--------.
                    .----------.  .--| dev D1 |
                    .----------.  .--| dev D1 |
                    |  parent- |--'  '--------'
                    |  parent- |--'  '--------'
                 .--|  locked  |     .--------.
                 .--|  locked  |     .--------.
@@ -350,7 +350,7 @@ Mux-locked and parent-locked sibling muxes
 
 
 This is a good topology.
 This is a good topology.
 
 
-                                   .--------.
+                                    .--------.
                    .----------.  .--| dev D1 |
                    .----------.  .--| dev D1 |
                    |   mux-   |--'  '--------'
                    |   mux-   |--'  '--------'
                 .--|  locked  |     .--------.
                 .--|  locked  |     .--------.

+ 2 - 1
Documentation/networking/dsa/dsa.txt

@@ -67,13 +67,14 @@ Note that DSA does not currently create network interfaces for the "cpu" and
 Switch tagging protocols
 Switch tagging protocols
 ------------------------
 ------------------------
 
 
-DSA currently supports 4 different tagging protocols, and a tag-less mode as
+DSA currently supports 5 different tagging protocols, and a tag-less mode as
 well. The different protocols are implemented in:
 well. The different protocols are implemented in:
 
 
 net/dsa/tag_trailer.c: Marvell's 4 trailer tag mode (legacy)
 net/dsa/tag_trailer.c: Marvell's 4 trailer tag mode (legacy)
 net/dsa/tag_dsa.c: Marvell's original DSA tag
 net/dsa/tag_dsa.c: Marvell's original DSA tag
 net/dsa/tag_edsa.c: Marvell's enhanced DSA tag
 net/dsa/tag_edsa.c: Marvell's enhanced DSA tag
 net/dsa/tag_brcm.c: Broadcom's 4 bytes tag
 net/dsa/tag_brcm.c: Broadcom's 4 bytes tag
+net/dsa/tag_qca.c: Qualcomm's 2 bytes tag
 
 
 The exact format of the tag protocol is vendor specific, but in general, they
 The exact format of the tag protocol is vendor specific, but in general, they
 all contain something which:
 all contain something which:

+ 11 - 0
Documentation/virtual/kvm/api.txt

@@ -777,6 +777,17 @@ Gets the current timestamp of kvmclock as seen by the current guest. In
 conjunction with KVM_SET_CLOCK, it is used to ensure monotonicity on scenarios
 conjunction with KVM_SET_CLOCK, it is used to ensure monotonicity on scenarios
 such as migration.
 such as migration.
 
 
+When KVM_CAP_ADJUST_CLOCK is passed to KVM_CHECK_EXTENSION, it returns the
+set of bits that KVM can return in struct kvm_clock_data's flag member.
+
+The only flag defined now is KVM_CLOCK_TSC_STABLE.  If set, the returned
+value is the exact kvmclock value seen by all VCPUs at the instant
+when KVM_GET_CLOCK was called.  If clear, the returned value is simply
+CLOCK_MONOTONIC plus a constant offset; the offset can be modified
+with KVM_SET_CLOCK.  KVM will try to make all VCPUs follow this clock,
+but the exact value read by each VCPU could differ, because the host
+TSC is not stable.
+
 struct kvm_clock_data {
 struct kvm_clock_data {
 	__u64 clock;  /* kvmclock current value */
 	__u64 clock;  /* kvmclock current value */
 	__u32 flags;
 	__u32 flags;

+ 12 - 0
MAINTAINERS

@@ -77,6 +77,7 @@ Descriptions of section entries:
 	Q: Patchwork web based patch tracking system site
 	Q: Patchwork web based patch tracking system site
 	T: SCM tree type and location.
 	T: SCM tree type and location.
 	   Type is one of: git, hg, quilt, stgit, topgit
 	   Type is one of: git, hg, quilt, stgit, topgit
+	B: Bug tracking system location.
 	S: Status, one of the following:
 	S: Status, one of the following:
 	   Supported:	Someone is actually paid to look after this.
 	   Supported:	Someone is actually paid to look after this.
 	   Maintained:	Someone actually looks after it.
 	   Maintained:	Someone actually looks after it.
@@ -281,6 +282,7 @@ L:	linux-acpi@vger.kernel.org
 W:	https://01.org/linux-acpi
 W:	https://01.org/linux-acpi
 Q:	https://patchwork.kernel.org/project/linux-acpi/list/
 Q:	https://patchwork.kernel.org/project/linux-acpi/list/
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
+B:	https://bugzilla.kernel.org
 S:	Supported
 S:	Supported
 F:	drivers/acpi/
 F:	drivers/acpi/
 F:	drivers/pnp/pnpacpi/
 F:	drivers/pnp/pnpacpi/
@@ -304,6 +306,8 @@ W:	https://acpica.org/
 W:	https://github.com/acpica/acpica/
 W:	https://github.com/acpica/acpica/
 Q:	https://patchwork.kernel.org/project/linux-acpi/list/
 Q:	https://patchwork.kernel.org/project/linux-acpi/list/
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
+B:	https://bugzilla.kernel.org
+B:	https://bugs.acpica.org
 S:	Supported
 S:	Supported
 F:	drivers/acpi/acpica/
 F:	drivers/acpi/acpica/
 F:	include/acpi/
 F:	include/acpi/
@@ -313,6 +317,7 @@ ACPI FAN DRIVER
 M:	Zhang Rui <rui.zhang@intel.com>
 M:	Zhang Rui <rui.zhang@intel.com>
 L:	linux-acpi@vger.kernel.org
 L:	linux-acpi@vger.kernel.org
 W:	https://01.org/linux-acpi
 W:	https://01.org/linux-acpi
+B:	https://bugzilla.kernel.org
 S:	Supported
 S:	Supported
 F:	drivers/acpi/fan.c
 F:	drivers/acpi/fan.c
 
 
@@ -328,6 +333,7 @@ ACPI THERMAL DRIVER
 M:	Zhang Rui <rui.zhang@intel.com>
 M:	Zhang Rui <rui.zhang@intel.com>
 L:	linux-acpi@vger.kernel.org
 L:	linux-acpi@vger.kernel.org
 W:	https://01.org/linux-acpi
 W:	https://01.org/linux-acpi
+B:	https://bugzilla.kernel.org
 S:	Supported
 S:	Supported
 F:	drivers/acpi/*thermal*
 F:	drivers/acpi/*thermal*
 
 
@@ -335,6 +341,7 @@ ACPI VIDEO DRIVER
 M:	Zhang Rui <rui.zhang@intel.com>
 M:	Zhang Rui <rui.zhang@intel.com>
 L:	linux-acpi@vger.kernel.org
 L:	linux-acpi@vger.kernel.org
 W:	https://01.org/linux-acpi
 W:	https://01.org/linux-acpi
+B:	https://bugzilla.kernel.org
 S:	Supported
 S:	Supported
 F:	drivers/acpi/acpi_video.c
 F:	drivers/acpi/acpi_video.c
 
 
@@ -5663,6 +5670,7 @@ HIBERNATION (aka Software Suspend, aka swsusp)
 M:	"Rafael J. Wysocki" <rjw@rjwysocki.net>
 M:	"Rafael J. Wysocki" <rjw@rjwysocki.net>
 M:	Pavel Machek <pavel@ucw.cz>
 M:	Pavel Machek <pavel@ucw.cz>
 L:	linux-pm@vger.kernel.org
 L:	linux-pm@vger.kernel.org
+B:	https://bugzilla.kernel.org
 S:	Supported
 S:	Supported
 F:	arch/x86/power/
 F:	arch/x86/power/
 F:	drivers/base/power/
 F:	drivers/base/power/
@@ -7084,6 +7092,7 @@ F:	drivers/scsi/53c700*
 LED SUBSYSTEM
 LED SUBSYSTEM
 M:	Richard Purdie <rpurdie@rpsys.net>
 M:	Richard Purdie <rpurdie@rpsys.net>
 M:	Jacek Anaszewski <j.anaszewski@samsung.com>
 M:	Jacek Anaszewski <j.anaszewski@samsung.com>
+M:	Pavel Machek <pavel@ucw.cz>
 L:	linux-leds@vger.kernel.org
 L:	linux-leds@vger.kernel.org
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds.git
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds.git
 S:	Maintained
 S:	Maintained
@@ -8057,6 +8066,7 @@ F:	drivers/infiniband/hw/mlx4/
 F:	include/linux/mlx4/
 F:	include/linux/mlx4/
 
 
 MELLANOX MLX5 core VPI driver
 MELLANOX MLX5 core VPI driver
+M:	Saeed Mahameed <saeedm@mellanox.com>
 M:	Matan Barak <matanb@mellanox.com>
 M:	Matan Barak <matanb@mellanox.com>
 M:	Leon Romanovsky <leonro@mellanox.com>
 M:	Leon Romanovsky <leonro@mellanox.com>
 L:	netdev@vger.kernel.org
 L:	netdev@vger.kernel.org
@@ -9622,6 +9632,7 @@ POWER MANAGEMENT CORE
 M:	"Rafael J. Wysocki" <rjw@rjwysocki.net>
 M:	"Rafael J. Wysocki" <rjw@rjwysocki.net>
 L:	linux-pm@vger.kernel.org
 L:	linux-pm@vger.kernel.org
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
+B:	https://bugzilla.kernel.org
 S:	Supported
 S:	Supported
 F:	drivers/base/power/
 F:	drivers/base/power/
 F:	include/linux/pm.h
 F:	include/linux/pm.h
@@ -11611,6 +11622,7 @@ M:	"Rafael J. Wysocki" <rjw@rjwysocki.net>
 M:	Len Brown <len.brown@intel.com>
 M:	Len Brown <len.brown@intel.com>
 M:	Pavel Machek <pavel@ucw.cz>
 M:	Pavel Machek <pavel@ucw.cz>
 L:	linux-pm@vger.kernel.org
 L:	linux-pm@vger.kernel.org
+B:	https://bugzilla.kernel.org
 S:	Supported
 S:	Supported
 F:	Documentation/power/
 F:	Documentation/power/
 F:	arch/x86/kernel/acpi/
 F:	arch/x86/kernel/acpi/

+ 4 - 3
Makefile

@@ -1,7 +1,7 @@
 VERSION = 4
 VERSION = 4
 PATCHLEVEL = 9
 PATCHLEVEL = 9
 SUBLEVEL = 0
 SUBLEVEL = 0
-EXTRAVERSION = -rc5
+EXTRAVERSION = -rc7
 NAME = Psychotic Stoned Sheep
 NAME = Psychotic Stoned Sheep
 
 
 # *DOCUMENTATION*
 # *DOCUMENTATION*
@@ -399,11 +399,12 @@ KBUILD_CFLAGS   := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
 		   -fno-strict-aliasing -fno-common \
 		   -fno-strict-aliasing -fno-common \
 		   -Werror-implicit-function-declaration \
 		   -Werror-implicit-function-declaration \
 		   -Wno-format-security \
 		   -Wno-format-security \
-		   -std=gnu89
+		   -std=gnu89 $(call cc-option,-fno-PIE)
+
 
 
 KBUILD_AFLAGS_KERNEL :=
 KBUILD_AFLAGS_KERNEL :=
 KBUILD_CFLAGS_KERNEL :=
 KBUILD_CFLAGS_KERNEL :=
-KBUILD_AFLAGS   := -D__ASSEMBLY__
+KBUILD_AFLAGS   := -D__ASSEMBLY__ $(call cc-option,-fno-PIE)
 KBUILD_AFLAGS_MODULE  := -DMODULE
 KBUILD_AFLAGS_MODULE  := -DMODULE
 KBUILD_CFLAGS_MODULE  := -DMODULE
 KBUILD_CFLAGS_MODULE  := -DMODULE
 KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
 KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds

+ 7 - 7
arch/arm/boot/dts/imx53-qsb.dts

@@ -64,8 +64,8 @@
 			};
 			};
 
 
 			ldo3_reg: ldo3 {
 			ldo3_reg: ldo3 {
-				regulator-min-microvolt = <600000>;
-				regulator-max-microvolt = <1800000>;
+				regulator-min-microvolt = <1725000>;
+				regulator-max-microvolt = <3300000>;
 				regulator-always-on;
 				regulator-always-on;
 			};
 			};
 
 
@@ -76,8 +76,8 @@
 			};
 			};
 
 
 			ldo5_reg: ldo5 {
 			ldo5_reg: ldo5 {
-				regulator-min-microvolt = <1725000>;
-				regulator-max-microvolt = <3300000>;
+				regulator-min-microvolt = <1200000>;
+				regulator-max-microvolt = <3600000>;
 				regulator-always-on;
 				regulator-always-on;
 			};
 			};
 
 
@@ -100,14 +100,14 @@
 			};
 			};
 
 
 			ldo9_reg: ldo9 {
 			ldo9_reg: ldo9 {
-				regulator-min-microvolt = <1200000>;
+				regulator-min-microvolt = <1250000>;
 				regulator-max-microvolt = <3600000>;
 				regulator-max-microvolt = <3600000>;
 				regulator-always-on;
 				regulator-always-on;
 			};
 			};
 
 
 			ldo10_reg: ldo10 {
 			ldo10_reg: ldo10 {
-				regulator-min-microvolt = <1250000>;
-				regulator-max-microvolt = <3650000>;
+				regulator-min-microvolt = <1200000>;
+				regulator-max-microvolt = <3600000>;
 				regulator-always-on;
 				regulator-always-on;
 			};
 			};
 		};
 		};

+ 5 - 0
arch/arm/boot/dts/logicpd-som-lv.dtsi

@@ -13,6 +13,11 @@
 		};
 		};
 	};
 	};
 
 
+	memory@80000000 {
+		device_type = "memory";
+		reg = <0x80000000 0>;
+	};
+
 	wl12xx_vmmc: wl12xx_vmmc {
 	wl12xx_vmmc: wl12xx_vmmc {
 		compatible = "regulator-fixed";
 		compatible = "regulator-fixed";
 		regulator-name = "vwl1271";
 		regulator-name = "vwl1271";

+ 2 - 2
arch/arm/boot/dts/logicpd-torpedo-som.dtsi

@@ -13,9 +13,9 @@
 		};
 		};
 	};
 	};
 
 
-	memory@0 {
+	memory@80000000 {
 		device_type = "memory";
 		device_type = "memory";
-		reg = <0 0>;
+		reg = <0x80000000 0>;
 	};
 	};
 
 
 	leds {
 	leds {

+ 4 - 3
arch/arm/boot/dts/omap5-board-common.dtsi

@@ -124,6 +124,7 @@
 		compatible = "ti,abe-twl6040";
 		compatible = "ti,abe-twl6040";
 		ti,model = "omap5-uevm";
 		ti,model = "omap5-uevm";
 
 
+		ti,jack-detection;
 		ti,mclk-freq = <19200000>;
 		ti,mclk-freq = <19200000>;
 
 
 		ti,mcpdm = <&mcpdm>;
 		ti,mcpdm = <&mcpdm>;
@@ -415,7 +416,7 @@
 			ti,backup-battery-charge-high-current;
 			ti,backup-battery-charge-high-current;
 		};
 		};
 
 
-		gpadc {
+		gpadc: gpadc {
 			compatible = "ti,palmas-gpadc";
 			compatible = "ti,palmas-gpadc";
 			interrupts = <18 0
 			interrupts = <18 0
 				      16 0
 				      16 0
@@ -475,8 +476,8 @@
 				smps6_reg: smps6 {
 				smps6_reg: smps6 {
 					/* VDD_DDR3 - over VDD_SMPS6 */
 					/* VDD_DDR3 - over VDD_SMPS6 */
 					regulator-name = "smps6";
 					regulator-name = "smps6";
-					regulator-min-microvolt = <1200000>;
-					regulator-max-microvolt = <1200000>;
+					regulator-min-microvolt = <1350000>;
+					regulator-max-microvolt = <1350000>;
 					regulator-always-on;
 					regulator-always-on;
 					regulator-boot-on;
 					regulator-boot-on;
 				};
 				};

+ 1 - 1
arch/arm/boot/dts/stih410-b2260.dts

@@ -74,7 +74,7 @@
 		/* Low speed expansion connector */
 		/* Low speed expansion connector */
 		spi0: spi@9844000 {
 		spi0: spi@9844000 {
 			label = "LS-SPI0";
 			label = "LS-SPI0";
-			cs-gpio = <&pio30 3 0>;
+			cs-gpios = <&pio30 3 0>;
 			status = "okay";
 			status = "okay";
 		};
 		};
 
 

+ 4 - 0
arch/arm/boot/dts/sun8i-a23-a33.dtsi

@@ -282,11 +282,15 @@
 			uart1_pins_a: uart1@0 {
 			uart1_pins_a: uart1@0 {
 				allwinner,pins = "PG6", "PG7";
 				allwinner,pins = "PG6", "PG7";
 				allwinner,function = "uart1";
 				allwinner,function = "uart1";
+				allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+				allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
 			};
 			};
 
 
 			uart1_pins_cts_rts_a: uart1-cts-rts@0 {
 			uart1_pins_cts_rts_a: uart1-cts-rts@0 {
 				allwinner,pins = "PG8", "PG9";
 				allwinner,pins = "PG8", "PG9";
 				allwinner,function = "uart1";
 				allwinner,function = "uart1";
+				allwinner,drive = <SUN4I_PINCTRL_10_MA>;
+				allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
 			};
 			};
 
 
 			mmc0_pins_a: mmc0@0 {
 			mmc0_pins_a: mmc0@0 {

+ 0 - 1
arch/arm/include/asm/Kbuild

@@ -8,7 +8,6 @@ generic-y += early_ioremap.h
 generic-y += emergency-restart.h
 generic-y += emergency-restart.h
 generic-y += errno.h
 generic-y += errno.h
 generic-y += exec.h
 generic-y += exec.h
-generic-y += export.h
 generic-y += ioctl.h
 generic-y += ioctl.h
 generic-y += ipcbuf.h
 generic-y += ipcbuf.h
 generic-y += irq_regs.h
 generic-y += irq_regs.h

+ 1 - 1
arch/arm/kernel/Makefile

@@ -33,7 +33,7 @@ endif
 obj-$(CONFIG_CPU_IDLE)		+= cpuidle.o
 obj-$(CONFIG_CPU_IDLE)		+= cpuidle.o
 obj-$(CONFIG_ISA_DMA_API)	+= dma.o
 obj-$(CONFIG_ISA_DMA_API)	+= dma.o
 obj-$(CONFIG_FIQ)		+= fiq.o fiqasm.o
 obj-$(CONFIG_FIQ)		+= fiq.o fiqasm.o
-obj-$(CONFIG_MODULES)		+= module.o
+obj-$(CONFIG_MODULES)		+= armksyms.o module.o
 obj-$(CONFIG_ARM_MODULE_PLTS)	+= module-plts.o
 obj-$(CONFIG_ARM_MODULE_PLTS)	+= module-plts.o
 obj-$(CONFIG_ISA_DMA)		+= dma-isa.o
 obj-$(CONFIG_ISA_DMA)		+= dma-isa.o
 obj-$(CONFIG_PCI)		+= bios32.o isa.o
 obj-$(CONFIG_PCI)		+= bios32.o isa.o

+ 183 - 0
arch/arm/kernel/armksyms.c

@@ -0,0 +1,183 @@
+/*
+ *  linux/arch/arm/kernel/armksyms.c
+ *
+ *  Copyright (C) 2000 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/export.h>
+#include <linux/sched.h>
+#include <linux/string.h>
+#include <linux/cryptohash.h>
+#include <linux/delay.h>
+#include <linux/in6.h>
+#include <linux/syscalls.h>
+#include <linux/uaccess.h>
+#include <linux/io.h>
+#include <linux/arm-smccc.h>
+
+#include <asm/checksum.h>
+#include <asm/ftrace.h>
+
+/*
+ * libgcc functions - functions that are used internally by the
+ * compiler...  (prototypes are not correct though, but that
+ * doesn't really matter since they're not versioned).
+ */
+extern void __ashldi3(void);
+extern void __ashrdi3(void);
+extern void __divsi3(void);
+extern void __lshrdi3(void);
+extern void __modsi3(void);
+extern void __muldi3(void);
+extern void __ucmpdi2(void);
+extern void __udivsi3(void);
+extern void __umodsi3(void);
+extern void __do_div64(void);
+extern void __bswapsi2(void);
+extern void __bswapdi2(void);
+
+extern void __aeabi_idiv(void);
+extern void __aeabi_idivmod(void);
+extern void __aeabi_lasr(void);
+extern void __aeabi_llsl(void);
+extern void __aeabi_llsr(void);
+extern void __aeabi_lmul(void);
+extern void __aeabi_uidiv(void);
+extern void __aeabi_uidivmod(void);
+extern void __aeabi_ulcmp(void);
+
+extern void fpundefinstr(void);
+
+void mmioset(void *, unsigned int, size_t);
+void mmiocpy(void *, const void *, size_t);
+
+	/* platform dependent support */
+EXPORT_SYMBOL(arm_delay_ops);
+
+	/* networking */
+EXPORT_SYMBOL(csum_partial);
+EXPORT_SYMBOL(csum_partial_copy_from_user);
+EXPORT_SYMBOL(csum_partial_copy_nocheck);
+EXPORT_SYMBOL(__csum_ipv6_magic);
+
+	/* io */
+#ifndef __raw_readsb
+EXPORT_SYMBOL(__raw_readsb);
+#endif
+#ifndef __raw_readsw
+EXPORT_SYMBOL(__raw_readsw);
+#endif
+#ifndef __raw_readsl
+EXPORT_SYMBOL(__raw_readsl);
+#endif
+#ifndef __raw_writesb
+EXPORT_SYMBOL(__raw_writesb);
+#endif
+#ifndef __raw_writesw
+EXPORT_SYMBOL(__raw_writesw);
+#endif
+#ifndef __raw_writesl
+EXPORT_SYMBOL(__raw_writesl);
+#endif
+
+	/* string / mem functions */
+EXPORT_SYMBOL(strchr);
+EXPORT_SYMBOL(strrchr);
+EXPORT_SYMBOL(memset);
+EXPORT_SYMBOL(memcpy);
+EXPORT_SYMBOL(memmove);
+EXPORT_SYMBOL(memchr);
+EXPORT_SYMBOL(__memzero);
+
+EXPORT_SYMBOL(mmioset);
+EXPORT_SYMBOL(mmiocpy);
+
+#ifdef CONFIG_MMU
+EXPORT_SYMBOL(copy_page);
+
+EXPORT_SYMBOL(arm_copy_from_user);
+EXPORT_SYMBOL(arm_copy_to_user);
+EXPORT_SYMBOL(arm_clear_user);
+
+EXPORT_SYMBOL(__get_user_1);
+EXPORT_SYMBOL(__get_user_2);
+EXPORT_SYMBOL(__get_user_4);
+EXPORT_SYMBOL(__get_user_8);
+
+#ifdef __ARMEB__
+EXPORT_SYMBOL(__get_user_64t_1);
+EXPORT_SYMBOL(__get_user_64t_2);
+EXPORT_SYMBOL(__get_user_64t_4);
+EXPORT_SYMBOL(__get_user_32t_8);
+#endif
+
+EXPORT_SYMBOL(__put_user_1);
+EXPORT_SYMBOL(__put_user_2);
+EXPORT_SYMBOL(__put_user_4);
+EXPORT_SYMBOL(__put_user_8);
+#endif
+
+	/* gcc lib functions */
+EXPORT_SYMBOL(__ashldi3);
+EXPORT_SYMBOL(__ashrdi3);
+EXPORT_SYMBOL(__divsi3);
+EXPORT_SYMBOL(__lshrdi3);
+EXPORT_SYMBOL(__modsi3);
+EXPORT_SYMBOL(__muldi3);
+EXPORT_SYMBOL(__ucmpdi2);
+EXPORT_SYMBOL(__udivsi3);
+EXPORT_SYMBOL(__umodsi3);
+EXPORT_SYMBOL(__do_div64);
+EXPORT_SYMBOL(__bswapsi2);
+EXPORT_SYMBOL(__bswapdi2);
+
+#ifdef CONFIG_AEABI
+EXPORT_SYMBOL(__aeabi_idiv);
+EXPORT_SYMBOL(__aeabi_idivmod);
+EXPORT_SYMBOL(__aeabi_lasr);
+EXPORT_SYMBOL(__aeabi_llsl);
+EXPORT_SYMBOL(__aeabi_llsr);
+EXPORT_SYMBOL(__aeabi_lmul);
+EXPORT_SYMBOL(__aeabi_uidiv);
+EXPORT_SYMBOL(__aeabi_uidivmod);
+EXPORT_SYMBOL(__aeabi_ulcmp);
+#endif
+
+	/* bitops */
+EXPORT_SYMBOL(_set_bit);
+EXPORT_SYMBOL(_test_and_set_bit);
+EXPORT_SYMBOL(_clear_bit);
+EXPORT_SYMBOL(_test_and_clear_bit);
+EXPORT_SYMBOL(_change_bit);
+EXPORT_SYMBOL(_test_and_change_bit);
+EXPORT_SYMBOL(_find_first_zero_bit_le);
+EXPORT_SYMBOL(_find_next_zero_bit_le);
+EXPORT_SYMBOL(_find_first_bit_le);
+EXPORT_SYMBOL(_find_next_bit_le);
+
+#ifdef __ARMEB__
+EXPORT_SYMBOL(_find_first_zero_bit_be);
+EXPORT_SYMBOL(_find_next_zero_bit_be);
+EXPORT_SYMBOL(_find_first_bit_be);
+EXPORT_SYMBOL(_find_next_bit_be);
+#endif
+
+#ifdef CONFIG_FUNCTION_TRACER
+#ifdef CONFIG_OLD_MCOUNT
+EXPORT_SYMBOL(mcount);
+#endif
+EXPORT_SYMBOL(__gnu_mcount_nc);
+#endif
+
+#ifdef CONFIG_ARM_PATCH_PHYS_VIRT
+EXPORT_SYMBOL(__pv_phys_pfn_offset);
+EXPORT_SYMBOL(__pv_offset);
+#endif
+
+#ifdef CONFIG_HAVE_ARM_SMCCC
+EXPORT_SYMBOL(arm_smccc_smc);
+EXPORT_SYMBOL(arm_smccc_hvc);
+#endif

+ 0 - 3
arch/arm/kernel/entry-ftrace.S

@@ -7,7 +7,6 @@
 #include <asm/assembler.h>
 #include <asm/assembler.h>
 #include <asm/ftrace.h>
 #include <asm/ftrace.h>
 #include <asm/unwind.h>
 #include <asm/unwind.h>
-#include <asm/export.h>
 
 
 #include "entry-header.S"
 #include "entry-header.S"
 
 
@@ -154,7 +153,6 @@ ENTRY(mcount)
 	__mcount _old
 	__mcount _old
 #endif
 #endif
 ENDPROC(mcount)
 ENDPROC(mcount)
-EXPORT_SYMBOL(mcount)
 
 
 #ifdef CONFIG_DYNAMIC_FTRACE
 #ifdef CONFIG_DYNAMIC_FTRACE
 ENTRY(ftrace_caller_old)
 ENTRY(ftrace_caller_old)
@@ -207,7 +205,6 @@ UNWIND(.fnstart)
 #endif
 #endif
 UNWIND(.fnend)
 UNWIND(.fnend)
 ENDPROC(__gnu_mcount_nc)
 ENDPROC(__gnu_mcount_nc)
-EXPORT_SYMBOL(__gnu_mcount_nc)
 
 
 #ifdef CONFIG_DYNAMIC_FTRACE
 #ifdef CONFIG_DYNAMIC_FTRACE
 ENTRY(ftrace_caller)
 ENTRY(ftrace_caller)

+ 0 - 3
arch/arm/kernel/head.S

@@ -22,7 +22,6 @@
 #include <asm/memory.h>
 #include <asm/memory.h>
 #include <asm/thread_info.h>
 #include <asm/thread_info.h>
 #include <asm/pgtable.h>
 #include <asm/pgtable.h>
-#include <asm/export.h>
 
 
 #if defined(CONFIG_DEBUG_LL) && !defined(CONFIG_DEBUG_SEMIHOSTING)
 #if defined(CONFIG_DEBUG_LL) && !defined(CONFIG_DEBUG_SEMIHOSTING)
 #include CONFIG_DEBUG_LL_INCLUDE
 #include CONFIG_DEBUG_LL_INCLUDE
@@ -728,8 +727,6 @@ __pv_phys_pfn_offset:
 __pv_offset:
 __pv_offset:
 	.quad	0
 	.quad	0
 	.size	__pv_offset, . -__pv_offset
 	.size	__pv_offset, . -__pv_offset
-EXPORT_SYMBOL(__pv_phys_pfn_offset)
-EXPORT_SYMBOL(__pv_offset)
 #endif
 #endif
 
 
 #include "head-common.S"
 #include "head-common.S"

+ 0 - 3
arch/arm/kernel/smccc-call.S

@@ -16,7 +16,6 @@
 #include <asm/opcodes-sec.h>
 #include <asm/opcodes-sec.h>
 #include <asm/opcodes-virt.h>
 #include <asm/opcodes-virt.h>
 #include <asm/unwind.h>
 #include <asm/unwind.h>
-#include <asm/export.h>
 
 
 	/*
 	/*
 	 * Wrap c macros in asm macros to delay expansion until after the
 	 * Wrap c macros in asm macros to delay expansion until after the
@@ -52,7 +51,6 @@ UNWIND(	.fnend)
 ENTRY(arm_smccc_smc)
 ENTRY(arm_smccc_smc)
 	SMCCC SMCCC_SMC
 	SMCCC SMCCC_SMC
 ENDPROC(arm_smccc_smc)
 ENDPROC(arm_smccc_smc)
-EXPORT_SYMBOL(arm_smccc_smc)
 
 
 /*
 /*
  * void smccc_hvc(unsigned long a0, unsigned long a1, unsigned long a2,
  * void smccc_hvc(unsigned long a0, unsigned long a1, unsigned long a2,
@@ -62,4 +60,3 @@ EXPORT_SYMBOL(arm_smccc_smc)
 ENTRY(arm_smccc_hvc)
 ENTRY(arm_smccc_hvc)
 	SMCCC SMCCC_HVC
 	SMCCC SMCCC_HVC
 ENDPROC(arm_smccc_hvc)
 ENDPROC(arm_smccc_hvc)
-EXPORT_SYMBOL(arm_smccc_hvc)

+ 20 - 0
arch/arm/kernel/traps.c

@@ -74,6 +74,26 @@ void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long
 		dump_mem("", "Exception stack", frame + 4, frame + 4 + sizeof(struct pt_regs));
 		dump_mem("", "Exception stack", frame + 4, frame + 4 + sizeof(struct pt_regs));
 }
 }
 
 
+void dump_backtrace_stm(u32 *stack, u32 instruction)
+{
+	char str[80], *p;
+	unsigned int x;
+	int reg;
+
+	for (reg = 10, x = 0, p = str; reg >= 0; reg--) {
+		if (instruction & BIT(reg)) {
+			p += sprintf(p, " r%d:%08x", reg, *stack--);
+			if (++x == 6) {
+				x = 0;
+				p = str;
+				printk("%s\n", str);
+			}
+		}
+	}
+	if (p != str)
+		printk("%s\n", str);
+}
+
 #ifndef CONFIG_ARM_UNWIND
 #ifndef CONFIG_ARM_UNWIND
 /*
 /*
  * Stack pointers should always be within the kernels view of
  * Stack pointers should always be within the kernels view of

+ 5 - 0
arch/arm/kernel/vmlinux-xip.lds.S

@@ -3,6 +3,9 @@
  * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
  * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
  */
  */
 
 
+/* No __ro_after_init data in the .rodata section - which will always be ro */
+#define RO_AFTER_INIT_DATA
+
 #include <asm-generic/vmlinux.lds.h>
 #include <asm-generic/vmlinux.lds.h>
 #include <asm/cache.h>
 #include <asm/cache.h>
 #include <asm/thread_info.h>
 #include <asm/thread_info.h>
@@ -223,6 +226,8 @@ SECTIONS
 		. = ALIGN(PAGE_SIZE);
 		. = ALIGN(PAGE_SIZE);
 		__init_end = .;
 		__init_end = .;
 
 
+		*(.data..ro_after_init)
+
 		NOSAVE_DATA
 		NOSAVE_DATA
 		CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES)
 		CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES)
 		READ_MOSTLY_DATA(L1_CACHE_BYTES)
 		READ_MOSTLY_DATA(L1_CACHE_BYTES)

+ 0 - 3
arch/arm/lib/ashldi3.S

@@ -28,7 +28,6 @@ Boston, MA 02110-1301, USA.  */
 
 
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 #ifdef __ARMEB__
 #ifdef __ARMEB__
 #define al r1
 #define al r1
@@ -53,5 +52,3 @@ ENTRY(__aeabi_llsl)
 
 
 ENDPROC(__ashldi3)
 ENDPROC(__ashldi3)
 ENDPROC(__aeabi_llsl)
 ENDPROC(__aeabi_llsl)
-EXPORT_SYMBOL(__ashldi3)
-EXPORT_SYMBOL(__aeabi_llsl)

+ 0 - 3
arch/arm/lib/ashrdi3.S

@@ -28,7 +28,6 @@ Boston, MA 02110-1301, USA.  */
 
 
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 #ifdef __ARMEB__
 #ifdef __ARMEB__
 #define al r1
 #define al r1
@@ -53,5 +52,3 @@ ENTRY(__aeabi_lasr)
 
 
 ENDPROC(__ashrdi3)
 ENDPROC(__ashrdi3)
 ENDPROC(__aeabi_lasr)
 ENDPROC(__aeabi_lasr)
-EXPORT_SYMBOL(__ashrdi3)
-EXPORT_SYMBOL(__aeabi_lasr)

+ 3 - 34
arch/arm/lib/backtrace.S

@@ -10,6 +10,7 @@
  * 27/03/03 Ian Molton Clean up CONFIG_CPU
  * 27/03/03 Ian Molton Clean up CONFIG_CPU
  *
  *
  */
  */
+#include <linux/kern_levels.h>
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
 		.text
 		.text
@@ -83,13 +84,13 @@ for_each_frame:	tst	frame, mask		@ Check for address exceptions
 		teq	r3, r1, lsr #11
 		teq	r3, r1, lsr #11
 		ldreq	r0, [frame, #-8]	@ get sp
 		ldreq	r0, [frame, #-8]	@ get sp
 		subeq	r0, r0, #4		@ point at the last arg
 		subeq	r0, r0, #4		@ point at the last arg
-		bleq	.Ldumpstm		@ dump saved registers
+		bleq	dump_backtrace_stm	@ dump saved registers
 
 
 1004:		ldr	r1, [sv_pc, #0]		@ if stmfd sp!, {..., fp, ip, lr, pc}
 1004:		ldr	r1, [sv_pc, #0]		@ if stmfd sp!, {..., fp, ip, lr, pc}
 		ldr	r3, .Ldsi		@ instruction exists,
 		ldr	r3, .Ldsi		@ instruction exists,
 		teq	r3, r1, lsr #11
 		teq	r3, r1, lsr #11
 		subeq	r0, frame, #16
 		subeq	r0, frame, #16
-		bleq	.Ldumpstm		@ dump saved registers
+		bleq	dump_backtrace_stm	@ dump saved registers
 
 
 		teq	sv_fp, #0		@ zero saved fp means
 		teq	sv_fp, #0		@ zero saved fp means
 		beq	no_frame		@ no further frames
 		beq	no_frame		@ no further frames
@@ -112,38 +113,6 @@ ENDPROC(c_backtrace)
 		.long	1004b, 1006b
 		.long	1004b, 1006b
 		.popsection
 		.popsection
 
 
-#define instr r4
-#define reg   r5
-#define stack r6
-
-.Ldumpstm:	stmfd	sp!, {instr, reg, stack, r7, lr}
-		mov	stack, r0
-		mov	instr, r1
-		mov	reg, #10
-		mov	r7, #0
-1:		mov	r3, #1
- ARM(		tst	instr, r3, lsl reg	)
- THUMB(		lsl	r3, reg			)
- THUMB(		tst	instr, r3		)
-		beq	2f
-		add	r7, r7, #1
-		teq	r7, #6
-		moveq	r7, #0
-		adr	r3, .Lcr
-		addne	r3, r3, #1		@ skip newline
-		ldr	r2, [stack], #-4
-		mov	r1, reg
-		adr	r0, .Lfp
-		bl	printk
-2:		subs	reg, reg, #1
-		bpl	1b
-		teq	r7, #0
-		adrne	r0, .Lcr
-		blne	printk
-		ldmfd	sp!, {instr, reg, stack, r7, pc}
-
-.Lfp:		.asciz	" r%d:%08x%s"
-.Lcr:		.asciz	"\n"
 .Lbad:		.asciz	"Backtrace aborted due to bad frame pointer <%p>\n"
 .Lbad:		.asciz	"Backtrace aborted due to bad frame pointer <%p>\n"
 		.align
 		.align
 .Ldsi:		.word	0xe92dd800 >> 11	@ stmfd sp!, {... fp, ip, lr, pc}
 .Ldsi:		.word	0xe92dd800 >> 11	@ stmfd sp!, {... fp, ip, lr, pc}

+ 0 - 5
arch/arm/lib/bitops.h

@@ -1,6 +1,5 @@
 #include <asm/assembler.h>
 #include <asm/assembler.h>
 #include <asm/unwind.h>
 #include <asm/unwind.h>
-#include <asm/export.h>
 
 
 #if __LINUX_ARM_ARCH__ >= 6
 #if __LINUX_ARM_ARCH__ >= 6
 	.macro	bitop, name, instr
 	.macro	bitop, name, instr
@@ -26,7 +25,6 @@ UNWIND(	.fnstart	)
 	bx	lr
 	bx	lr
 UNWIND(	.fnend		)
 UNWIND(	.fnend		)
 ENDPROC(\name		)
 ENDPROC(\name		)
-EXPORT_SYMBOL(\name	)
 	.endm
 	.endm
 
 
 	.macro	testop, name, instr, store
 	.macro	testop, name, instr, store
@@ -57,7 +55,6 @@ UNWIND(	.fnstart	)
 2:	bx	lr
 2:	bx	lr
 UNWIND(	.fnend		)
 UNWIND(	.fnend		)
 ENDPROC(\name		)
 ENDPROC(\name		)
-EXPORT_SYMBOL(\name	)
 	.endm
 	.endm
 #else
 #else
 	.macro	bitop, name, instr
 	.macro	bitop, name, instr
@@ -77,7 +74,6 @@ UNWIND(	.fnstart	)
 	ret	lr
 	ret	lr
 UNWIND(	.fnend		)
 UNWIND(	.fnend		)
 ENDPROC(\name		)
 ENDPROC(\name		)
-EXPORT_SYMBOL(\name	)
 	.endm
 	.endm
 
 
 /**
 /**
@@ -106,6 +102,5 @@ UNWIND(	.fnstart	)
 	ret	lr
 	ret	lr
 UNWIND(	.fnend		)
 UNWIND(	.fnend		)
 ENDPROC(\name		)
 ENDPROC(\name		)
-EXPORT_SYMBOL(\name	)
 	.endm
 	.endm
 #endif
 #endif

+ 0 - 3
arch/arm/lib/bswapsdi2.S

@@ -1,6 +1,5 @@
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 #if __LINUX_ARM_ARCH__ >= 6
 #if __LINUX_ARM_ARCH__ >= 6
 ENTRY(__bswapsi2)
 ENTRY(__bswapsi2)
@@ -36,5 +35,3 @@ ENTRY(__bswapdi2)
 	ret lr
 	ret lr
 ENDPROC(__bswapdi2)
 ENDPROC(__bswapdi2)
 #endif
 #endif
-EXPORT_SYMBOL(__bswapsi2)
-EXPORT_SYMBOL(__bswapdi2)

+ 0 - 4
arch/arm/lib/clear_user.S

@@ -10,7 +10,6 @@
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
 #include <asm/unwind.h>
 #include <asm/unwind.h>
-#include <asm/export.h>
 
 
 		.text
 		.text
 
 
@@ -51,9 +50,6 @@ USER(		strnebt	r2, [r0])
 UNWIND(.fnend)
 UNWIND(.fnend)
 ENDPROC(arm_clear_user)
 ENDPROC(arm_clear_user)
 ENDPROC(__clear_user_std)
 ENDPROC(__clear_user_std)
-#ifndef CONFIG_UACCESS_WITH_MEMCPY
-EXPORT_SYMBOL(arm_clear_user)
-#endif
 
 
 		.pushsection .text.fixup,"ax"
 		.pushsection .text.fixup,"ax"
 		.align	0
 		.align	0

+ 0 - 2
arch/arm/lib/copy_from_user.S

@@ -13,7 +13,6 @@
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
 #include <asm/unwind.h>
 #include <asm/unwind.h>
-#include <asm/export.h>
 
 
 /*
 /*
  * Prototype:
  * Prototype:
@@ -95,7 +94,6 @@ ENTRY(arm_copy_from_user)
 #include "copy_template.S"
 #include "copy_template.S"
 
 
 ENDPROC(arm_copy_from_user)
 ENDPROC(arm_copy_from_user)
-EXPORT_SYMBOL(arm_copy_from_user)
 
 
 	.pushsection .fixup,"ax"
 	.pushsection .fixup,"ax"
 	.align 0
 	.align 0

+ 0 - 2
arch/arm/lib/copy_page.S

@@ -13,7 +13,6 @@
 #include <asm/assembler.h>
 #include <asm/assembler.h>
 #include <asm/asm-offsets.h>
 #include <asm/asm-offsets.h>
 #include <asm/cache.h>
 #include <asm/cache.h>
-#include <asm/export.h>
 
 
 #define COPY_COUNT (PAGE_SZ / (2 * L1_CACHE_BYTES) PLD( -1 ))
 #define COPY_COUNT (PAGE_SZ / (2 * L1_CACHE_BYTES) PLD( -1 ))
 
 
@@ -46,4 +45,3 @@ ENTRY(copy_page)
 	PLD(	beq	2b			)
 	PLD(	beq	2b			)
 		ldmfd	sp!, {r4, pc}			@	3
 		ldmfd	sp!, {r4, pc}			@	3
 ENDPROC(copy_page)
 ENDPROC(copy_page)
-EXPORT_SYMBOL(copy_page)

+ 0 - 4
arch/arm/lib/copy_to_user.S

@@ -13,7 +13,6 @@
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
 #include <asm/unwind.h>
 #include <asm/unwind.h>
-#include <asm/export.h>
 
 
 /*
 /*
  * Prototype:
  * Prototype:
@@ -100,9 +99,6 @@ WEAK(arm_copy_to_user)
 
 
 ENDPROC(arm_copy_to_user)
 ENDPROC(arm_copy_to_user)
 ENDPROC(__copy_to_user_std)
 ENDPROC(__copy_to_user_std)
-#ifndef CONFIG_UACCESS_WITH_MEMCPY
-EXPORT_SYMBOL(arm_copy_to_user)
-#endif
 
 
 	.pushsection .text.fixup,"ax"
 	.pushsection .text.fixup,"ax"
 	.align 0
 	.align 0

+ 1 - 2
arch/arm/lib/csumipv6.S

@@ -9,7 +9,6 @@
  */
  */
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 		.text
 		.text
 
 
@@ -31,4 +30,4 @@ ENTRY(__csum_ipv6_magic)
 		adcs	r0, r0, #0
 		adcs	r0, r0, #0
 		ldmfd	sp!, {pc}
 		ldmfd	sp!, {pc}
 ENDPROC(__csum_ipv6_magic)
 ENDPROC(__csum_ipv6_magic)
-EXPORT_SYMBOL(__csum_ipv6_magic)
+

+ 0 - 2
arch/arm/lib/csumpartial.S

@@ -9,7 +9,6 @@
  */
  */
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 		.text
 		.text
 
 
@@ -141,4 +140,3 @@ ENTRY(csum_partial)
 		bne	4b
 		bne	4b
 		b	.Lless4
 		b	.Lless4
 ENDPROC(csum_partial)
 ENDPROC(csum_partial)
-EXPORT_SYMBOL(csum_partial)

+ 0 - 1
arch/arm/lib/csumpartialcopy.S

@@ -49,6 +49,5 @@
 
 
 #define FN_ENTRY	ENTRY(csum_partial_copy_nocheck)
 #define FN_ENTRY	ENTRY(csum_partial_copy_nocheck)
 #define FN_EXIT		ENDPROC(csum_partial_copy_nocheck)
 #define FN_EXIT		ENDPROC(csum_partial_copy_nocheck)
-#define FN_EXPORT	EXPORT_SYMBOL(csum_partial_copy_nocheck)
 
 
 #include "csumpartialcopygeneric.S"
 #include "csumpartialcopygeneric.S"

+ 0 - 2
arch/arm/lib/csumpartialcopygeneric.S

@@ -8,7 +8,6 @@
  * published by the Free Software Foundation.
  * published by the Free Software Foundation.
  */
  */
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 /*
 /*
  * unsigned int
  * unsigned int
@@ -332,4 +331,3 @@ FN_ENTRY
 		mov	r5, r4, get_byte_1
 		mov	r5, r4, get_byte_1
 		b	.Lexit
 		b	.Lexit
 FN_EXIT
 FN_EXIT
-FN_EXPORT

+ 0 - 1
arch/arm/lib/csumpartialcopyuser.S

@@ -73,7 +73,6 @@
 
 
 #define FN_ENTRY	ENTRY(csum_partial_copy_from_user)
 #define FN_ENTRY	ENTRY(csum_partial_copy_from_user)
 #define FN_EXIT		ENDPROC(csum_partial_copy_from_user)
 #define FN_EXIT		ENDPROC(csum_partial_copy_from_user)
-#define FN_EXPORT	EXPORT_SYMBOL(csum_partial_copy_from_user)
 
 
 #include "csumpartialcopygeneric.S"
 #include "csumpartialcopygeneric.S"
 
 

+ 0 - 2
arch/arm/lib/delay.c

@@ -24,7 +24,6 @@
 #include <linux/init.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/module.h>
-#include <linux/export.h>
 #include <linux/timex.h>
 #include <linux/timex.h>
 
 
 /*
 /*
@@ -35,7 +34,6 @@ struct arm_delay_ops arm_delay_ops __ro_after_init = {
 	.const_udelay	= __loop_const_udelay,
 	.const_udelay	= __loop_const_udelay,
 	.udelay		= __loop_udelay,
 	.udelay		= __loop_udelay,
 };
 };
-EXPORT_SYMBOL(arm_delay_ops);
 
 
 static const struct delay_timer *delay_timer;
 static const struct delay_timer *delay_timer;
 static bool delay_calibrated;
 static bool delay_calibrated;

+ 0 - 2
arch/arm/lib/div64.S

@@ -15,7 +15,6 @@
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
 #include <asm/unwind.h>
 #include <asm/unwind.h>
-#include <asm/export.h>
 
 
 #ifdef __ARMEB__
 #ifdef __ARMEB__
 #define xh r0
 #define xh r0
@@ -211,4 +210,3 @@ Ldiv0_64:
 
 
 UNWIND(.fnend)
 UNWIND(.fnend)
 ENDPROC(__do_div64)
 ENDPROC(__do_div64)
-EXPORT_SYMBOL(__do_div64)

+ 0 - 9
arch/arm/lib/findbit.S

@@ -15,7 +15,6 @@
  */
  */
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
                 .text
                 .text
 
 
 /*
 /*
@@ -38,7 +37,6 @@ ENTRY(_find_first_zero_bit_le)
 3:		mov	r0, r1			@ no free bits
 3:		mov	r0, r1			@ no free bits
 		ret	lr
 		ret	lr
 ENDPROC(_find_first_zero_bit_le)
 ENDPROC(_find_first_zero_bit_le)
-EXPORT_SYMBOL(_find_first_zero_bit_le)
 
 
 /*
 /*
  * Purpose  : Find next 'zero' bit
  * Purpose  : Find next 'zero' bit
@@ -59,7 +57,6 @@ ENTRY(_find_next_zero_bit_le)
 		add	r2, r2, #1		@ align bit pointer
 		add	r2, r2, #1		@ align bit pointer
 		b	2b			@ loop for next bit
 		b	2b			@ loop for next bit
 ENDPROC(_find_next_zero_bit_le)
 ENDPROC(_find_next_zero_bit_le)
-EXPORT_SYMBOL(_find_next_zero_bit_le)
 
 
 /*
 /*
  * Purpose  : Find a 'one' bit
  * Purpose  : Find a 'one' bit
@@ -81,7 +78,6 @@ ENTRY(_find_first_bit_le)
 3:		mov	r0, r1			@ no free bits
 3:		mov	r0, r1			@ no free bits
 		ret	lr
 		ret	lr
 ENDPROC(_find_first_bit_le)
 ENDPROC(_find_first_bit_le)
-EXPORT_SYMBOL(_find_first_bit_le)
 
 
 /*
 /*
  * Purpose  : Find next 'one' bit
  * Purpose  : Find next 'one' bit
@@ -101,7 +97,6 @@ ENTRY(_find_next_bit_le)
 		add	r2, r2, #1		@ align bit pointer
 		add	r2, r2, #1		@ align bit pointer
 		b	2b			@ loop for next bit
 		b	2b			@ loop for next bit
 ENDPROC(_find_next_bit_le)
 ENDPROC(_find_next_bit_le)
-EXPORT_SYMBOL(_find_next_bit_le)
 
 
 #ifdef __ARMEB__
 #ifdef __ARMEB__
 
 
@@ -121,7 +116,6 @@ ENTRY(_find_first_zero_bit_be)
 3:		mov	r0, r1			@ no free bits
 3:		mov	r0, r1			@ no free bits
 		ret	lr
 		ret	lr
 ENDPROC(_find_first_zero_bit_be)
 ENDPROC(_find_first_zero_bit_be)
-EXPORT_SYMBOL(_find_first_zero_bit_be)
 
 
 ENTRY(_find_next_zero_bit_be)
 ENTRY(_find_next_zero_bit_be)
 		teq	r1, #0
 		teq	r1, #0
@@ -139,7 +133,6 @@ ENTRY(_find_next_zero_bit_be)
 		add	r2, r2, #1		@ align bit pointer
 		add	r2, r2, #1		@ align bit pointer
 		b	2b			@ loop for next bit
 		b	2b			@ loop for next bit
 ENDPROC(_find_next_zero_bit_be)
 ENDPROC(_find_next_zero_bit_be)
-EXPORT_SYMBOL(_find_next_zero_bit_be)
 
 
 ENTRY(_find_first_bit_be)
 ENTRY(_find_first_bit_be)
 		teq	r1, #0
 		teq	r1, #0
@@ -157,7 +150,6 @@ ENTRY(_find_first_bit_be)
 3:		mov	r0, r1			@ no free bits
 3:		mov	r0, r1			@ no free bits
 		ret	lr
 		ret	lr
 ENDPROC(_find_first_bit_be)
 ENDPROC(_find_first_bit_be)
-EXPORT_SYMBOL(_find_first_bit_be)
 
 
 ENTRY(_find_next_bit_be)
 ENTRY(_find_next_bit_be)
 		teq	r1, #0
 		teq	r1, #0
@@ -174,7 +166,6 @@ ENTRY(_find_next_bit_be)
 		add	r2, r2, #1		@ align bit pointer
 		add	r2, r2, #1		@ align bit pointer
 		b	2b			@ loop for next bit
 		b	2b			@ loop for next bit
 ENDPROC(_find_next_bit_be)
 ENDPROC(_find_next_bit_be)
-EXPORT_SYMBOL(_find_next_bit_be)
 
 
 #endif
 #endif
 
 

+ 0 - 9
arch/arm/lib/getuser.S

@@ -31,7 +31,6 @@
 #include <asm/assembler.h>
 #include <asm/assembler.h>
 #include <asm/errno.h>
 #include <asm/errno.h>
 #include <asm/domain.h>
 #include <asm/domain.h>
-#include <asm/export.h>
 
 
 ENTRY(__get_user_1)
 ENTRY(__get_user_1)
 	check_uaccess r0, 1, r1, r2, __get_user_bad
 	check_uaccess r0, 1, r1, r2, __get_user_bad
@@ -39,7 +38,6 @@ ENTRY(__get_user_1)
 	mov	r0, #0
 	mov	r0, #0
 	ret	lr
 	ret	lr
 ENDPROC(__get_user_1)
 ENDPROC(__get_user_1)
-EXPORT_SYMBOL(__get_user_1)
 
 
 ENTRY(__get_user_2)
 ENTRY(__get_user_2)
 	check_uaccess r0, 2, r1, r2, __get_user_bad
 	check_uaccess r0, 2, r1, r2, __get_user_bad
@@ -60,7 +58,6 @@ rb	.req	r0
 	mov	r0, #0
 	mov	r0, #0
 	ret	lr
 	ret	lr
 ENDPROC(__get_user_2)
 ENDPROC(__get_user_2)
-EXPORT_SYMBOL(__get_user_2)
 
 
 ENTRY(__get_user_4)
 ENTRY(__get_user_4)
 	check_uaccess r0, 4, r1, r2, __get_user_bad
 	check_uaccess r0, 4, r1, r2, __get_user_bad
@@ -68,7 +65,6 @@ ENTRY(__get_user_4)
 	mov	r0, #0
 	mov	r0, #0
 	ret	lr
 	ret	lr
 ENDPROC(__get_user_4)
 ENDPROC(__get_user_4)
-EXPORT_SYMBOL(__get_user_4)
 
 
 ENTRY(__get_user_8)
 ENTRY(__get_user_8)
 	check_uaccess r0, 8, r1, r2, __get_user_bad
 	check_uaccess r0, 8, r1, r2, __get_user_bad
@@ -82,7 +78,6 @@ ENTRY(__get_user_8)
 	mov	r0, #0
 	mov	r0, #0
 	ret	lr
 	ret	lr
 ENDPROC(__get_user_8)
 ENDPROC(__get_user_8)
-EXPORT_SYMBOL(__get_user_8)
 
 
 #ifdef __ARMEB__
 #ifdef __ARMEB__
 ENTRY(__get_user_32t_8)
 ENTRY(__get_user_32t_8)
@@ -96,7 +91,6 @@ ENTRY(__get_user_32t_8)
 	mov	r0, #0
 	mov	r0, #0
 	ret	lr
 	ret	lr
 ENDPROC(__get_user_32t_8)
 ENDPROC(__get_user_32t_8)
-EXPORT_SYMBOL(__get_user_32t_8)
 
 
 ENTRY(__get_user_64t_1)
 ENTRY(__get_user_64t_1)
 	check_uaccess r0, 1, r1, r2, __get_user_bad8
 	check_uaccess r0, 1, r1, r2, __get_user_bad8
@@ -104,7 +98,6 @@ ENTRY(__get_user_64t_1)
 	mov	r0, #0
 	mov	r0, #0
 	ret	lr
 	ret	lr
 ENDPROC(__get_user_64t_1)
 ENDPROC(__get_user_64t_1)
-EXPORT_SYMBOL(__get_user_64t_1)
 
 
 ENTRY(__get_user_64t_2)
 ENTRY(__get_user_64t_2)
 	check_uaccess r0, 2, r1, r2, __get_user_bad8
 	check_uaccess r0, 2, r1, r2, __get_user_bad8
@@ -121,7 +114,6 @@ rb	.req	r0
 	mov	r0, #0
 	mov	r0, #0
 	ret	lr
 	ret	lr
 ENDPROC(__get_user_64t_2)
 ENDPROC(__get_user_64t_2)
-EXPORT_SYMBOL(__get_user_64t_2)
 
 
 ENTRY(__get_user_64t_4)
 ENTRY(__get_user_64t_4)
 	check_uaccess r0, 4, r1, r2, __get_user_bad8
 	check_uaccess r0, 4, r1, r2, __get_user_bad8
@@ -129,7 +121,6 @@ ENTRY(__get_user_64t_4)
 	mov	r0, #0
 	mov	r0, #0
 	ret	lr
 	ret	lr
 ENDPROC(__get_user_64t_4)
 ENDPROC(__get_user_64t_4)
-EXPORT_SYMBOL(__get_user_64t_4)
 #endif
 #endif
 
 
 __get_user_bad8:
 __get_user_bad8:

+ 0 - 2
arch/arm/lib/io-readsb.S

@@ -9,7 +9,6 @@
  */
  */
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 .Linsb_align:	rsb	ip, ip, #4
 .Linsb_align:	rsb	ip, ip, #4
 		cmp	ip, r2
 		cmp	ip, r2
@@ -122,4 +121,3 @@ ENTRY(__raw_readsb)
 
 
 		ldmfd	sp!, {r4 - r6, pc}
 		ldmfd	sp!, {r4 - r6, pc}
 ENDPROC(__raw_readsb)
 ENDPROC(__raw_readsb)
-EXPORT_SYMBOL(__raw_readsb)

+ 0 - 2
arch/arm/lib/io-readsl.S

@@ -9,7 +9,6 @@
  */
  */
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 ENTRY(__raw_readsl)
 ENTRY(__raw_readsl)
 		teq	r2, #0		@ do we have to check for the zero len?
 		teq	r2, #0		@ do we have to check for the zero len?
@@ -78,4 +77,3 @@ ENTRY(__raw_readsl)
 		strb	r3, [r1, #0]
 		strb	r3, [r1, #0]
 		ret	lr
 		ret	lr
 ENDPROC(__raw_readsl)
 ENDPROC(__raw_readsl)
-EXPORT_SYMBOL(__raw_readsl)

+ 1 - 2
arch/arm/lib/io-readsw-armv3.S

@@ -9,7 +9,6 @@
  */
  */
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 .Linsw_bad_alignment:
 .Linsw_bad_alignment:
 		adr	r0, .Linsw_bad_align_msg
 		adr	r0, .Linsw_bad_align_msg
@@ -104,4 +103,4 @@ ENTRY(__raw_readsw)
 
 
 		ldmfd	sp!, {r4, r5, r6, pc}
 		ldmfd	sp!, {r4, r5, r6, pc}
 
 
-EXPORT_SYMBOL(__raw_readsw)
+

+ 0 - 2
arch/arm/lib/io-readsw-armv4.S

@@ -9,7 +9,6 @@
  */
  */
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 		.macro	pack, rd, hw1, hw2
 		.macro	pack, rd, hw1, hw2
 #ifndef __ARMEB__
 #ifndef __ARMEB__
@@ -130,4 +129,3 @@ ENTRY(__raw_readsw)
 		strneb	ip, [r1]
 		strneb	ip, [r1]
 		ldmfd	sp!, {r4, pc}
 		ldmfd	sp!, {r4, pc}
 ENDPROC(__raw_readsw)
 ENDPROC(__raw_readsw)
-EXPORT_SYMBOL(__raw_readsw)

+ 0 - 2
arch/arm/lib/io-writesb.S

@@ -9,7 +9,6 @@
  */
  */
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 		.macro	outword, rd
 		.macro	outword, rd
 #ifndef __ARMEB__
 #ifndef __ARMEB__
@@ -93,4 +92,3 @@ ENTRY(__raw_writesb)
 
 
 		ldmfd	sp!, {r4, r5, pc}
 		ldmfd	sp!, {r4, r5, pc}
 ENDPROC(__raw_writesb)
 ENDPROC(__raw_writesb)
-EXPORT_SYMBOL(__raw_writesb)

+ 0 - 2
arch/arm/lib/io-writesl.S

@@ -9,7 +9,6 @@
  */
  */
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 ENTRY(__raw_writesl)
 ENTRY(__raw_writesl)
 		teq	r2, #0		@ do we have to check for the zero len?
 		teq	r2, #0		@ do we have to check for the zero len?
@@ -66,4 +65,3 @@ ENTRY(__raw_writesl)
 		bne	6b
 		bne	6b
 		ret	lr
 		ret	lr
 ENDPROC(__raw_writesl)
 ENDPROC(__raw_writesl)
-EXPORT_SYMBOL(__raw_writesl)

+ 0 - 2
arch/arm/lib/io-writesw-armv3.S

@@ -9,7 +9,6 @@
  */
  */
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 .Loutsw_bad_alignment:
 .Loutsw_bad_alignment:
 		adr	r0, .Loutsw_bad_align_msg
 		adr	r0, .Loutsw_bad_align_msg
@@ -125,4 +124,3 @@ ENTRY(__raw_writesw)
 		strne	ip, [r0]
 		strne	ip, [r0]
 
 
 		ldmfd	sp!, {r4, r5, r6, pc}
 		ldmfd	sp!, {r4, r5, r6, pc}
-EXPORT_SYMBOL(__raw_writesw)

+ 0 - 2
arch/arm/lib/io-writesw-armv4.S

@@ -9,7 +9,6 @@
  */
  */
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 		.macro	outword, rd
 		.macro	outword, rd
 #ifndef __ARMEB__
 #ifndef __ARMEB__
@@ -99,4 +98,3 @@ ENTRY(__raw_writesw)
 		strneh	ip, [r0]
 		strneh	ip, [r0]
 		ret	lr
 		ret	lr
 ENDPROC(__raw_writesw)
 ENDPROC(__raw_writesw)
-EXPORT_SYMBOL(__raw_writesw)

+ 0 - 9
arch/arm/lib/lib1funcs.S

@@ -36,7 +36,6 @@ Boston, MA 02111-1307, USA.  */
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
 #include <asm/unwind.h>
 #include <asm/unwind.h>
-#include <asm/export.h>
 
 
 .macro ARM_DIV_BODY dividend, divisor, result, curbit
 .macro ARM_DIV_BODY dividend, divisor, result, curbit
 
 
@@ -239,8 +238,6 @@ UNWIND(.fnstart)
 UNWIND(.fnend)
 UNWIND(.fnend)
 ENDPROC(__udivsi3)
 ENDPROC(__udivsi3)
 ENDPROC(__aeabi_uidiv)
 ENDPROC(__aeabi_uidiv)
-EXPORT_SYMBOL(__udivsi3)
-EXPORT_SYMBOL(__aeabi_uidiv)
 
 
 ENTRY(__umodsi3)
 ENTRY(__umodsi3)
 UNWIND(.fnstart)
 UNWIND(.fnstart)
@@ -259,7 +256,6 @@ UNWIND(.fnstart)
 
 
 UNWIND(.fnend)
 UNWIND(.fnend)
 ENDPROC(__umodsi3)
 ENDPROC(__umodsi3)
-EXPORT_SYMBOL(__umodsi3)
 
 
 #ifdef CONFIG_ARM_PATCH_IDIV
 #ifdef CONFIG_ARM_PATCH_IDIV
 	.align 3
 	.align 3
@@ -307,8 +303,6 @@ UNWIND(.fnstart)
 UNWIND(.fnend)
 UNWIND(.fnend)
 ENDPROC(__divsi3)
 ENDPROC(__divsi3)
 ENDPROC(__aeabi_idiv)
 ENDPROC(__aeabi_idiv)
-EXPORT_SYMBOL(__divsi3)
-EXPORT_SYMBOL(__aeabi_idiv)
 
 
 ENTRY(__modsi3)
 ENTRY(__modsi3)
 UNWIND(.fnstart)
 UNWIND(.fnstart)
@@ -333,7 +327,6 @@ UNWIND(.fnstart)
 
 
 UNWIND(.fnend)
 UNWIND(.fnend)
 ENDPROC(__modsi3)
 ENDPROC(__modsi3)
-EXPORT_SYMBOL(__modsi3)
 
 
 #ifdef CONFIG_AEABI
 #ifdef CONFIG_AEABI
 
 
@@ -350,7 +343,6 @@ UNWIND(.save {r0, r1, ip, lr}	)
 
 
 UNWIND(.fnend)
 UNWIND(.fnend)
 ENDPROC(__aeabi_uidivmod)
 ENDPROC(__aeabi_uidivmod)
-EXPORT_SYMBOL(__aeabi_uidivmod)
 
 
 ENTRY(__aeabi_idivmod)
 ENTRY(__aeabi_idivmod)
 UNWIND(.fnstart)
 UNWIND(.fnstart)
@@ -364,7 +356,6 @@ UNWIND(.save {r0, r1, ip, lr}	)
 
 
 UNWIND(.fnend)
 UNWIND(.fnend)
 ENDPROC(__aeabi_idivmod)
 ENDPROC(__aeabi_idivmod)
-EXPORT_SYMBOL(__aeabi_idivmod)
 
 
 #endif
 #endif
 
 

+ 0 - 3
arch/arm/lib/lshrdi3.S

@@ -28,7 +28,6 @@ Boston, MA 02110-1301, USA.  */
 
 
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 #ifdef __ARMEB__
 #ifdef __ARMEB__
 #define al r1
 #define al r1
@@ -53,5 +52,3 @@ ENTRY(__aeabi_llsr)
 
 
 ENDPROC(__lshrdi3)
 ENDPROC(__lshrdi3)
 ENDPROC(__aeabi_llsr)
 ENDPROC(__aeabi_llsr)
-EXPORT_SYMBOL(__lshrdi3)
-EXPORT_SYMBOL(__aeabi_llsr)

+ 0 - 2
arch/arm/lib/memchr.S

@@ -11,7 +11,6 @@
  */
  */
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 	.text
 	.text
 	.align	5
 	.align	5
@@ -25,4 +24,3 @@ ENTRY(memchr)
 2:	movne	r0, #0
 2:	movne	r0, #0
 	ret	lr
 	ret	lr
 ENDPROC(memchr)
 ENDPROC(memchr)
-EXPORT_SYMBOL(memchr)

+ 0 - 3
arch/arm/lib/memcpy.S

@@ -13,7 +13,6 @@
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
 #include <asm/unwind.h>
 #include <asm/unwind.h>
-#include <asm/export.h>
 
 
 #define LDR1W_SHIFT	0
 #define LDR1W_SHIFT	0
 #define STR1W_SHIFT	0
 #define STR1W_SHIFT	0
@@ -69,5 +68,3 @@ ENTRY(memcpy)
 
 
 ENDPROC(memcpy)
 ENDPROC(memcpy)
 ENDPROC(mmiocpy)
 ENDPROC(mmiocpy)
-EXPORT_SYMBOL(memcpy)
-EXPORT_SYMBOL(mmiocpy)

+ 0 - 2
arch/arm/lib/memmove.S

@@ -13,7 +13,6 @@
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
 #include <asm/unwind.h>
 #include <asm/unwind.h>
-#include <asm/export.h>
 
 
 		.text
 		.text
 
 
@@ -226,4 +225,3 @@ ENTRY(memmove)
 18:		backward_copy_shift	push=24	pull=8
 18:		backward_copy_shift	push=24	pull=8
 
 
 ENDPROC(memmove)
 ENDPROC(memmove)
-EXPORT_SYMBOL(memmove)

+ 0 - 3
arch/arm/lib/memset.S

@@ -12,7 +12,6 @@
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
 #include <asm/unwind.h>
 #include <asm/unwind.h>
-#include <asm/export.h>
 
 
 	.text
 	.text
 	.align	5
 	.align	5
@@ -136,5 +135,3 @@ UNWIND( .fnstart            )
 UNWIND( .fnend   )
 UNWIND( .fnend   )
 ENDPROC(memset)
 ENDPROC(memset)
 ENDPROC(mmioset)
 ENDPROC(mmioset)
-EXPORT_SYMBOL(memset)
-EXPORT_SYMBOL(mmioset)

+ 0 - 2
arch/arm/lib/memzero.S

@@ -10,7 +10,6 @@
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
 #include <asm/unwind.h>
 #include <asm/unwind.h>
-#include <asm/export.h>
 
 
 	.text
 	.text
 	.align	5
 	.align	5
@@ -136,4 +135,3 @@ UNWIND(	.fnstart			)
 	ret	lr			@ 1
 	ret	lr			@ 1
 UNWIND(	.fnend				)
 UNWIND(	.fnend				)
 ENDPROC(__memzero)
 ENDPROC(__memzero)
-EXPORT_SYMBOL(__memzero)

+ 0 - 3
arch/arm/lib/muldi3.S

@@ -12,7 +12,6 @@
 
 
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 #ifdef __ARMEB__
 #ifdef __ARMEB__
 #define xh r0
 #define xh r0
@@ -47,5 +46,3 @@ ENTRY(__aeabi_lmul)
 
 
 ENDPROC(__muldi3)
 ENDPROC(__muldi3)
 ENDPROC(__aeabi_lmul)
 ENDPROC(__aeabi_lmul)
-EXPORT_SYMBOL(__muldi3)
-EXPORT_SYMBOL(__aeabi_lmul)

+ 0 - 5
arch/arm/lib/putuser.S

@@ -31,7 +31,6 @@
 #include <asm/assembler.h>
 #include <asm/assembler.h>
 #include <asm/errno.h>
 #include <asm/errno.h>
 #include <asm/domain.h>
 #include <asm/domain.h>
-#include <asm/export.h>
 
 
 ENTRY(__put_user_1)
 ENTRY(__put_user_1)
 	check_uaccess r0, 1, r1, ip, __put_user_bad
 	check_uaccess r0, 1, r1, ip, __put_user_bad
@@ -39,7 +38,6 @@ ENTRY(__put_user_1)
 	mov	r0, #0
 	mov	r0, #0
 	ret	lr
 	ret	lr
 ENDPROC(__put_user_1)
 ENDPROC(__put_user_1)
-EXPORT_SYMBOL(__put_user_1)
 
 
 ENTRY(__put_user_2)
 ENTRY(__put_user_2)
 	check_uaccess r0, 2, r1, ip, __put_user_bad
 	check_uaccess r0, 2, r1, ip, __put_user_bad
@@ -64,7 +62,6 @@ ENTRY(__put_user_2)
 	mov	r0, #0
 	mov	r0, #0
 	ret	lr
 	ret	lr
 ENDPROC(__put_user_2)
 ENDPROC(__put_user_2)
-EXPORT_SYMBOL(__put_user_2)
 
 
 ENTRY(__put_user_4)
 ENTRY(__put_user_4)
 	check_uaccess r0, 4, r1, ip, __put_user_bad
 	check_uaccess r0, 4, r1, ip, __put_user_bad
@@ -72,7 +69,6 @@ ENTRY(__put_user_4)
 	mov	r0, #0
 	mov	r0, #0
 	ret	lr
 	ret	lr
 ENDPROC(__put_user_4)
 ENDPROC(__put_user_4)
-EXPORT_SYMBOL(__put_user_4)
 
 
 ENTRY(__put_user_8)
 ENTRY(__put_user_8)
 	check_uaccess r0, 8, r1, ip, __put_user_bad
 	check_uaccess r0, 8, r1, ip, __put_user_bad
@@ -86,7 +82,6 @@ ENTRY(__put_user_8)
 	mov	r0, #0
 	mov	r0, #0
 	ret	lr
 	ret	lr
 ENDPROC(__put_user_8)
 ENDPROC(__put_user_8)
-EXPORT_SYMBOL(__put_user_8)
 
 
 __put_user_bad:
 __put_user_bad:
 	mov	r0, #-EFAULT
 	mov	r0, #-EFAULT

+ 0 - 2
arch/arm/lib/strchr.S

@@ -11,7 +11,6 @@
  */
  */
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 		.text
 		.text
 		.align	5
 		.align	5
@@ -26,4 +25,3 @@ ENTRY(strchr)
 		subeq	r0, r0, #1
 		subeq	r0, r0, #1
 		ret	lr
 		ret	lr
 ENDPROC(strchr)
 ENDPROC(strchr)
-EXPORT_SYMBOL(strchr)

+ 0 - 2
arch/arm/lib/strrchr.S

@@ -11,7 +11,6 @@
  */
  */
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 		.text
 		.text
 		.align	5
 		.align	5
@@ -25,4 +24,3 @@ ENTRY(strrchr)
 		mov	r0, r3
 		mov	r0, r3
 		ret	lr
 		ret	lr
 ENDPROC(strrchr)
 ENDPROC(strrchr)
-EXPORT_SYMBOL(strrchr)

+ 0 - 3
arch/arm/lib/uaccess_with_memcpy.c

@@ -19,7 +19,6 @@
 #include <linux/gfp.h>
 #include <linux/gfp.h>
 #include <linux/highmem.h>
 #include <linux/highmem.h>
 #include <linux/hugetlb.h>
 #include <linux/hugetlb.h>
-#include <linux/export.h>
 #include <asm/current.h>
 #include <asm/current.h>
 #include <asm/page.h>
 #include <asm/page.h>
 
 
@@ -157,7 +156,6 @@ arm_copy_to_user(void __user *to, const void *from, unsigned long n)
 	}
 	}
 	return n;
 	return n;
 }
 }
-EXPORT_SYMBOL(arm_copy_to_user);
 	
 	
 static unsigned long noinline
 static unsigned long noinline
 __clear_user_memset(void __user *addr, unsigned long n)
 __clear_user_memset(void __user *addr, unsigned long n)
@@ -215,7 +213,6 @@ unsigned long arm_clear_user(void __user *addr, unsigned long n)
 	}
 	}
 	return n;
 	return n;
 }
 }
-EXPORT_SYMBOL(arm_clear_user);
 
 
 #if 0
 #if 0
 
 

+ 0 - 3
arch/arm/lib/ucmpdi2.S

@@ -12,7 +12,6 @@
 
 
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 #ifdef __ARMEB__
 #ifdef __ARMEB__
 #define xh r0
 #define xh r0
@@ -36,7 +35,6 @@ ENTRY(__ucmpdi2)
 	ret	lr
 	ret	lr
 
 
 ENDPROC(__ucmpdi2)
 ENDPROC(__ucmpdi2)
-EXPORT_SYMBOL(__ucmpdi2)
 
 
 #ifdef CONFIG_AEABI
 #ifdef CONFIG_AEABI
 
 
@@ -50,7 +48,6 @@ ENTRY(__aeabi_ulcmp)
 	ret	lr
 	ret	lr
 
 
 ENDPROC(__aeabi_ulcmp)
 ENDPROC(__aeabi_ulcmp)
-EXPORT_SYMBOL(__aeabi_ulcmp)
 
 
 #endif
 #endif
 
 

+ 1 - 0
arch/arm/mach-imx/Makefile

@@ -32,6 +32,7 @@ endif
 
 
 ifdef CONFIG_SND_IMX_SOC
 ifdef CONFIG_SND_IMX_SOC
 obj-y += ssi-fiq.o
 obj-y += ssi-fiq.o
+obj-y += ssi-fiq-ksym.o
 endif
 endif
 
 
 # i.MX21 based machines
 # i.MX21 based machines

+ 20 - 0
arch/arm/mach-imx/ssi-fiq-ksym.c

@@ -0,0 +1,20 @@
+/*
+ * Exported ksyms for the SSI FIQ handler
+ *
+ * Copyright (C) 2009, Sascha Hauer <s.hauer@pengutronix.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/module.h>
+
+#include <linux/platform_data/asoc-imx-ssi.h>
+
+EXPORT_SYMBOL(imx_ssi_fiq_tx_buffer);
+EXPORT_SYMBOL(imx_ssi_fiq_rx_buffer);
+EXPORT_SYMBOL(imx_ssi_fiq_start);
+EXPORT_SYMBOL(imx_ssi_fiq_end);
+EXPORT_SYMBOL(imx_ssi_fiq_base);
+

+ 1 - 6
arch/arm/mach-imx/ssi-fiq.S

@@ -8,7 +8,6 @@
 
 
 #include <linux/linkage.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 #include <asm/assembler.h>
-#include <asm/export.h>
 
 
 /*
 /*
  * r8  = bit 0-15: tx offset, bit 16-31: tx buffer size
  * r8  = bit 0-15: tx offset, bit 16-31: tx buffer size
@@ -145,8 +144,4 @@ imx_ssi_fiq_tx_buffer:
 		.word 0x0
 		.word 0x0
 .L_imx_ssi_fiq_end:
 .L_imx_ssi_fiq_end:
 imx_ssi_fiq_end:
 imx_ssi_fiq_end:
-EXPORT_SYMBOL(imx_ssi_fiq_tx_buffer)
-EXPORT_SYMBOL(imx_ssi_fiq_rx_buffer)
-EXPORT_SYMBOL(imx_ssi_fiq_start)
-EXPORT_SYMBOL(imx_ssi_fiq_end)
-EXPORT_SYMBOL(imx_ssi_fiq_base)
+

+ 1 - 0
arch/arm/mach-omap2/Kconfig

@@ -71,6 +71,7 @@ config SOC_AM43XX
 	select HAVE_ARM_TWD
 	select HAVE_ARM_TWD
 	select ARM_ERRATA_754322
 	select ARM_ERRATA_754322
 	select ARM_ERRATA_775420
 	select ARM_ERRATA_775420
+	select OMAP_INTERCONNECT
 
 
 config SOC_DRA7XX
 config SOC_DRA7XX
 	bool "TI DRA7XX"
 	bool "TI DRA7XX"

+ 11 - 5
arch/arm/mach-omap2/id.c

@@ -205,11 +205,15 @@ void __init omap2xxx_check_revision(void)
 
 
 #define OMAP3_SHOW_FEATURE(feat)		\
 #define OMAP3_SHOW_FEATURE(feat)		\
 	if (omap3_has_ ##feat())		\
 	if (omap3_has_ ##feat())		\
-		printk(#feat" ");
+		n += scnprintf(buf + n, sizeof(buf) - n, #feat " ");
 
 
 static void __init omap3_cpuinfo(void)
 static void __init omap3_cpuinfo(void)
 {
 {
 	const char *cpu_name;
 	const char *cpu_name;
+	char buf[64];
+	int n = 0;
+
+	memset(buf, 0, sizeof(buf));
 
 
 	/*
 	/*
 	 * OMAP3430 and OMAP3530 are assumed to be same.
 	 * OMAP3430 and OMAP3530 are assumed to be same.
@@ -241,10 +245,10 @@ static void __init omap3_cpuinfo(void)
 		cpu_name = "OMAP3503";
 		cpu_name = "OMAP3503";
 	}
 	}
 
 
-	sprintf(soc_name, "%s", cpu_name);
+	scnprintf(soc_name, sizeof(soc_name), "%s", cpu_name);
 
 
 	/* Print verbose information */
 	/* Print verbose information */
-	pr_info("%s %s (", soc_name, soc_rev);
+	n += scnprintf(buf, sizeof(buf) - n, "%s %s (", soc_name, soc_rev);
 
 
 	OMAP3_SHOW_FEATURE(l2cache);
 	OMAP3_SHOW_FEATURE(l2cache);
 	OMAP3_SHOW_FEATURE(iva);
 	OMAP3_SHOW_FEATURE(iva);
@@ -252,8 +256,10 @@ static void __init omap3_cpuinfo(void)
 	OMAP3_SHOW_FEATURE(neon);
 	OMAP3_SHOW_FEATURE(neon);
 	OMAP3_SHOW_FEATURE(isp);
 	OMAP3_SHOW_FEATURE(isp);
 	OMAP3_SHOW_FEATURE(192mhz_clk);
 	OMAP3_SHOW_FEATURE(192mhz_clk);
-
-	printk(")\n");
+	if (*(buf + n - 1) == ' ')
+		n--;
+	n += scnprintf(buf + n, sizeof(buf) - n, ")\n");
+	pr_info("%s", buf);
 }
 }
 
 
 #define OMAP3_CHECK_FEATURE(status,feat)				\
 #define OMAP3_CHECK_FEATURE(status,feat)				\

+ 3 - 0
arch/arm/mach-omap2/prm3xxx.c

@@ -319,6 +319,9 @@ void __init omap3_prm_init_pm(bool has_uart4, bool has_iva)
 	if (has_uart4) {
 	if (has_uart4) {
 		en_uart4_mask = OMAP3630_EN_UART4_MASK;
 		en_uart4_mask = OMAP3630_EN_UART4_MASK;
 		grpsel_uart4_mask = OMAP3630_GRPSEL_UART4_MASK;
 		grpsel_uart4_mask = OMAP3630_GRPSEL_UART4_MASK;
+	} else {
+		en_uart4_mask = 0;
+		grpsel_uart4_mask = 0;
 	}
 	}
 
 
 	/* Enable wakeups in PER */
 	/* Enable wakeups in PER */

+ 6 - 0
arch/arm/mach-omap2/voltage.c

@@ -87,6 +87,12 @@ int voltdm_scale(struct voltagedomain *voltdm,
 		return -ENODATA;
 		return -ENODATA;
 	}
 	}
 
 
+	if (!voltdm->volt_data) {
+		pr_err("%s: No voltage data defined for vdd_%s\n",
+			__func__, voltdm->name);
+		return -ENODATA;
+	}
+
 	/* Adjust voltage to the exact voltage from the OPP table */
 	/* Adjust voltage to the exact voltage from the OPP table */
 	for (i = 0; voltdm->volt_data[i].volt_nominal != 0; i++) {
 	for (i = 0; voltdm->volt_data[i].volt_nominal != 0; i++) {
 		if (voltdm->volt_data[i].volt_nominal >= target_volt) {
 		if (voltdm->volt_data[i].volt_nominal >= target_volt) {

+ 1 - 1
arch/arm/mm/dma-mapping.c

@@ -1167,7 +1167,7 @@ static int __init dma_debug_do_init(void)
 	dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
 	dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES);
 	return 0;
 	return 0;
 }
 }
-fs_initcall(dma_debug_do_init);
+core_initcall(dma_debug_do_init);
 
 
 #ifdef CONFIG_ARM_DMA_USE_IOMMU
 #ifdef CONFIG_ARM_DMA_USE_IOMMU
 
 

+ 1 - 1
arch/arm/mm/proc-v7m.S

@@ -96,7 +96,7 @@ ENTRY(cpu_cm7_proc_fin)
 	ret	lr
 	ret	lr
 ENDPROC(cpu_cm7_proc_fin)
 ENDPROC(cpu_cm7_proc_fin)
 
 
-	.section ".text.init", #alloc, #execinstr
+	.section ".init.text", #alloc, #execinstr
 
 
 __v7m_cm7_setup:
 __v7m_cm7_setup:
 	mov	r8, #(V7M_SCB_CCR_DC | V7M_SCB_CCR_IC| V7M_SCB_CCR_BP)
 	mov	r8, #(V7M_SCB_CCR_DC | V7M_SCB_CCR_IC| V7M_SCB_CCR_BP)

+ 2 - 2
arch/arm64/boot/dts/marvell/armada-37xx.dtsi

@@ -105,7 +105,7 @@
 				status = "disabled";
 				status = "disabled";
 			};
 			};
 
 
-			nb_perih_clk: nb-periph-clk@13000{
+			nb_periph_clk: nb-periph-clk@13000 {
 				compatible = "marvell,armada-3700-periph-clock-nb";
 				compatible = "marvell,armada-3700-periph-clock-nb";
 				reg = <0x13000 0x100>;
 				reg = <0x13000 0x100>;
 				clocks = <&tbg 0>, <&tbg 1>, <&tbg 2>,
 				clocks = <&tbg 0>, <&tbg 1>, <&tbg 2>,
@@ -113,7 +113,7 @@
 				#clock-cells = <1>;
 				#clock-cells = <1>;
 			};
 			};
 
 
-			sb_perih_clk: sb-periph-clk@18000{
+			sb_periph_clk: sb-periph-clk@18000 {
 				compatible = "marvell,armada-3700-periph-clock-sb";
 				compatible = "marvell,armada-3700-periph-clock-sb";
 				reg = <0x18000 0x100>;
 				reg = <0x18000 0x100>;
 				clocks = <&tbg 0>, <&tbg 1>, <&tbg 2>,
 				clocks = <&tbg 0>, <&tbg 1>, <&tbg 2>,

+ 3 - 3
arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi

@@ -130,8 +130,8 @@
 				reg = <0x700600 0x50>;
 				reg = <0x700600 0x50>;
 				#address-cells = <0x1>;
 				#address-cells = <0x1>;
 				#size-cells = <0x0>;
 				#size-cells = <0x0>;
-				cell-index = <1>;
-				clocks = <&cps_syscon0 0 3>;
+				cell-index = <3>;
+				clocks = <&cps_syscon0 1 21>;
 				status = "disabled";
 				status = "disabled";
 			};
 			};
 
 
@@ -140,7 +140,7 @@
 				reg = <0x700680 0x50>;
 				reg = <0x700680 0x50>;
 				#address-cells = <1>;
 				#address-cells = <1>;
 				#size-cells = <0>;
 				#size-cells = <0>;
-				cell-index = <2>;
+				cell-index = <4>;
 				clocks = <&cps_syscon0 1 21>;
 				clocks = <&cps_syscon0 1 21>;
 				status = "disabled";
 				status = "disabled";
 			};
 			};

+ 9 - 1
arch/arm64/include/asm/perf_event.h

@@ -46,7 +46,15 @@
 #define	ARMV8_PMU_EVTYPE_MASK	0xc800ffff	/* Mask for writable bits */
 #define	ARMV8_PMU_EVTYPE_MASK	0xc800ffff	/* Mask for writable bits */
 #define	ARMV8_PMU_EVTYPE_EVENT	0xffff		/* Mask for EVENT bits */
 #define	ARMV8_PMU_EVTYPE_EVENT	0xffff		/* Mask for EVENT bits */
 
 
-#define ARMV8_PMU_EVTYPE_EVENT_SW_INCR	0	/* Software increment event */
+/*
+ * PMUv3 event types: required events
+ */
+#define ARMV8_PMUV3_PERFCTR_SW_INCR				0x00
+#define ARMV8_PMUV3_PERFCTR_L1D_CACHE_REFILL			0x03
+#define ARMV8_PMUV3_PERFCTR_L1D_CACHE				0x04
+#define ARMV8_PMUV3_PERFCTR_BR_MIS_PRED				0x10
+#define ARMV8_PMUV3_PERFCTR_CPU_CYCLES				0x11
+#define ARMV8_PMUV3_PERFCTR_BR_PRED				0x12
 
 
 /*
 /*
  * Event filters for PMUv3
  * Event filters for PMUv3

+ 1 - 9
arch/arm64/kernel/perf_event.c

@@ -31,17 +31,9 @@
 
 
 /*
 /*
  * ARMv8 PMUv3 Performance Events handling code.
  * ARMv8 PMUv3 Performance Events handling code.
- * Common event types.
+ * Common event types (some are defined in asm/perf_event.h).
  */
  */
 
 
-/* Required events. */
-#define ARMV8_PMUV3_PERFCTR_SW_INCR				0x00
-#define ARMV8_PMUV3_PERFCTR_L1D_CACHE_REFILL			0x03
-#define ARMV8_PMUV3_PERFCTR_L1D_CACHE				0x04
-#define ARMV8_PMUV3_PERFCTR_BR_MIS_PRED				0x10
-#define ARMV8_PMUV3_PERFCTR_CPU_CYCLES				0x11
-#define ARMV8_PMUV3_PERFCTR_BR_PRED				0x12
-
 /* At least one of the following is required. */
 /* At least one of the following is required. */
 #define ARMV8_PMUV3_PERFCTR_INST_RETIRED			0x08
 #define ARMV8_PMUV3_PERFCTR_INST_RETIRED			0x08
 #define ARMV8_PMUV3_PERFCTR_INST_SPEC				0x1B
 #define ARMV8_PMUV3_PERFCTR_INST_SPEC				0x1B

+ 8 - 2
arch/arm64/kvm/sys_regs.c

@@ -597,8 +597,14 @@ static bool access_pmu_evcntr(struct kvm_vcpu *vcpu,
 
 
 			idx = ARMV8_PMU_CYCLE_IDX;
 			idx = ARMV8_PMU_CYCLE_IDX;
 		} else {
 		} else {
-			BUG();
+			return false;
 		}
 		}
+	} else if (r->CRn == 0 && r->CRm == 9) {
+		/* PMCCNTR */
+		if (pmu_access_event_counter_el0_disabled(vcpu))
+			return false;
+
+		idx = ARMV8_PMU_CYCLE_IDX;
 	} else if (r->CRn == 14 && (r->CRm & 12) == 8) {
 	} else if (r->CRn == 14 && (r->CRm & 12) == 8) {
 		/* PMEVCNTRn_EL0 */
 		/* PMEVCNTRn_EL0 */
 		if (pmu_access_event_counter_el0_disabled(vcpu))
 		if (pmu_access_event_counter_el0_disabled(vcpu))
@@ -606,7 +612,7 @@ static bool access_pmu_evcntr(struct kvm_vcpu *vcpu,
 
 
 		idx = ((r->CRm & 3) << 3) | (r->Op2 & 7);
 		idx = ((r->CRm & 3) << 3) | (r->Op2 & 7);
 	} else {
 	} else {
-		BUG();
+		return false;
 	}
 	}
 
 
 	if (!pmu_counter_idx_valid(vcpu, idx))
 	if (!pmu_counter_idx_valid(vcpu, idx))

+ 6 - 0
arch/mips/include/asm/mipsregs.h

@@ -214,6 +214,12 @@
 #error Bad page size configuration for hugetlbfs!
 #error Bad page size configuration for hugetlbfs!
 #endif
 #endif
 
 
+/*
+ * Wired register bits
+ */
+#define MIPSR6_WIRED_LIMIT	(_ULCAST_(0xffff) << 16)
+#define MIPSR6_WIRED_WIRED	(_ULCAST_(0xffff) << 0)
+
 /*
 /*
  * Values used for computation of new tlb entries
  * Values used for computation of new tlb entries
  */
  */

+ 13 - 0
arch/mips/include/asm/tlb.h

@@ -1,6 +1,9 @@
 #ifndef __ASM_TLB_H
 #ifndef __ASM_TLB_H
 #define __ASM_TLB_H
 #define __ASM_TLB_H
 
 
+#include <asm/cpu-features.h>
+#include <asm/mipsregs.h>
+
 /*
 /*
  * MIPS doesn't need any special per-pte or per-vma handling, except
  * MIPS doesn't need any special per-pte or per-vma handling, except
  * we need to flush cache for area to be unmapped.
  * we need to flush cache for area to be unmapped.
@@ -22,6 +25,16 @@
 		((CKSEG0 + ((idx) << (PAGE_SHIFT + 1))) |		\
 		((CKSEG0 + ((idx) << (PAGE_SHIFT + 1))) |		\
 		 (cpu_has_tlbinv ? MIPS_ENTRYHI_EHINV : 0))
 		 (cpu_has_tlbinv ? MIPS_ENTRYHI_EHINV : 0))
 
 
+static inline unsigned int num_wired_entries(void)
+{
+	unsigned int wired = read_c0_wired();
+
+	if (cpu_has_mips_r6)
+		wired &= MIPSR6_WIRED_WIRED;
+
+	return wired;
+}
+
 #include <asm-generic/tlb.h>
 #include <asm-generic/tlb.h>
 
 
 #endif /* __ASM_TLB_H */
 #endif /* __ASM_TLB_H */

+ 5 - 4
arch/mips/mm/fault.c

@@ -209,17 +209,18 @@ bad_area_nosemaphore:
 		if (show_unhandled_signals &&
 		if (show_unhandled_signals &&
 		    unhandled_signal(tsk, SIGSEGV) &&
 		    unhandled_signal(tsk, SIGSEGV) &&
 		    __ratelimit(&ratelimit_state)) {
 		    __ratelimit(&ratelimit_state)) {
-			pr_info("\ndo_page_fault(): sending SIGSEGV to %s for invalid %s %0*lx",
+			pr_info("do_page_fault(): sending SIGSEGV to %s for invalid %s %0*lx\n",
 				tsk->comm,
 				tsk->comm,
 				write ? "write access to" : "read access from",
 				write ? "write access to" : "read access from",
 				field, address);
 				field, address);
 			pr_info("epc = %0*lx in", field,
 			pr_info("epc = %0*lx in", field,
 				(unsigned long) regs->cp0_epc);
 				(unsigned long) regs->cp0_epc);
-			print_vma_addr(" ", regs->cp0_epc);
+			print_vma_addr(KERN_CONT " ", regs->cp0_epc);
+			pr_cont("\n");
 			pr_info("ra  = %0*lx in", field,
 			pr_info("ra  = %0*lx in", field,
 				(unsigned long) regs->regs[31]);
 				(unsigned long) regs->regs[31]);
-			print_vma_addr(" ", regs->regs[31]);
-			pr_info("\n");
+			print_vma_addr(KERN_CONT " ", regs->regs[31]);
+			pr_cont("\n");
 		}
 		}
 		current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f;
 		current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f;
 		info.si_signo = SIGSEGV;
 		info.si_signo = SIGSEGV;

+ 2 - 2
arch/mips/mm/init.c

@@ -118,7 +118,7 @@ static void *__kmap_pgprot(struct page *page, unsigned long addr, pgprot_t prot)
 		writex_c0_entrylo1(entrylo);
 		writex_c0_entrylo1(entrylo);
 	}
 	}
 #endif
 #endif
-	tlbidx = read_c0_wired();
+	tlbidx = num_wired_entries();
 	write_c0_wired(tlbidx + 1);
 	write_c0_wired(tlbidx + 1);
 	write_c0_index(tlbidx);
 	write_c0_index(tlbidx);
 	mtc0_tlbw_hazard();
 	mtc0_tlbw_hazard();
@@ -147,7 +147,7 @@ void kunmap_coherent(void)
 
 
 	local_irq_save(flags);
 	local_irq_save(flags);
 	old_ctx = read_c0_entryhi();
 	old_ctx = read_c0_entryhi();
-	wired = read_c0_wired() - 1;
+	wired = num_wired_entries() - 1;
 	write_c0_wired(wired);
 	write_c0_wired(wired);
 	write_c0_index(wired);
 	write_c0_index(wired);
 	write_c0_entryhi(UNIQUE_ENTRYHI(wired));
 	write_c0_entryhi(UNIQUE_ENTRYHI(wired));

+ 3 - 3
arch/mips/mm/tlb-r4k.c

@@ -65,7 +65,7 @@ void local_flush_tlb_all(void)
 	write_c0_entrylo0(0);
 	write_c0_entrylo0(0);
 	write_c0_entrylo1(0);
 	write_c0_entrylo1(0);
 
 
-	entry = read_c0_wired();
+	entry = num_wired_entries();
 
 
 	/*
 	/*
 	 * Blast 'em all away.
 	 * Blast 'em all away.
@@ -385,7 +385,7 @@ void add_wired_entry(unsigned long entrylo0, unsigned long entrylo1,
 	old_ctx = read_c0_entryhi();
 	old_ctx = read_c0_entryhi();
 	htw_stop();
 	htw_stop();
 	old_pagemask = read_c0_pagemask();
 	old_pagemask = read_c0_pagemask();
-	wired = read_c0_wired();
+	wired = num_wired_entries();
 	write_c0_wired(wired + 1);
 	write_c0_wired(wired + 1);
 	write_c0_index(wired);
 	write_c0_index(wired);
 	tlbw_use_hazard();	/* What is the hazard here? */
 	tlbw_use_hazard();	/* What is the hazard here? */
@@ -449,7 +449,7 @@ __init int add_temporary_entry(unsigned long entrylo0, unsigned long entrylo1,
 	htw_stop();
 	htw_stop();
 	old_ctx = read_c0_entryhi();
 	old_ctx = read_c0_entryhi();
 	old_pagemask = read_c0_pagemask();
 	old_pagemask = read_c0_pagemask();
-	wired = read_c0_wired();
+	wired = num_wired_entries();
 	if (--temp_tlb_entry < wired) {
 	if (--temp_tlb_entry < wired) {
 		printk(KERN_WARNING
 		printk(KERN_WARNING
 		       "No TLB space left for add_temporary_entry\n");
 		       "No TLB space left for add_temporary_entry\n");

+ 3 - 1
arch/parisc/Kconfig

@@ -34,7 +34,9 @@ config PARISC
 	select HAVE_ARCH_HASH
 	select HAVE_ARCH_HASH
 	select HAVE_ARCH_SECCOMP_FILTER
 	select HAVE_ARCH_SECCOMP_FILTER
 	select HAVE_ARCH_TRACEHOOK
 	select HAVE_ARCH_TRACEHOOK
-	select HAVE_UNSTABLE_SCHED_CLOCK if (SMP || !64BIT)
+	select GENERIC_SCHED_CLOCK
+	select HAVE_UNSTABLE_SCHED_CLOCK if SMP
+	select GENERIC_CLOCKEVENTS
 	select ARCH_NO_COHERENT_DMA_MMAP
 	select ARCH_NO_COHERENT_DMA_MMAP
 	select CPU_NO_EFFICIENT_FFS
 	select CPU_NO_EFFICIENT_FFS
 
 

+ 12 - 19
arch/parisc/kernel/cache.c

@@ -369,6 +369,7 @@ void __init parisc_setup_cache_timing(void)
 {
 {
 	unsigned long rangetime, alltime;
 	unsigned long rangetime, alltime;
 	unsigned long size, start;
 	unsigned long size, start;
+	unsigned long threshold;
 
 
 	alltime = mfctl(16);
 	alltime = mfctl(16);
 	flush_data_cache();
 	flush_data_cache();
@@ -382,17 +383,12 @@ void __init parisc_setup_cache_timing(void)
 	printk(KERN_DEBUG "Whole cache flush %lu cycles, flushing %lu bytes %lu cycles\n",
 	printk(KERN_DEBUG "Whole cache flush %lu cycles, flushing %lu bytes %lu cycles\n",
 		alltime, size, rangetime);
 		alltime, size, rangetime);
 
 
-	/* Racy, but if we see an intermediate value, it's ok too... */
-	parisc_cache_flush_threshold = size * alltime / rangetime;
-
-	parisc_cache_flush_threshold = L1_CACHE_ALIGN(parisc_cache_flush_threshold);
-	if (!parisc_cache_flush_threshold)
-		parisc_cache_flush_threshold = FLUSH_THRESHOLD;
-
-	if (parisc_cache_flush_threshold > cache_info.dc_size)
-		parisc_cache_flush_threshold = cache_info.dc_size;
-
-	printk(KERN_INFO "Setting cache flush threshold to %lu kB\n",
+	threshold = L1_CACHE_ALIGN(size * alltime / rangetime);
+	if (threshold > cache_info.dc_size)
+		threshold = cache_info.dc_size;
+	if (threshold)
+		parisc_cache_flush_threshold = threshold;
+	printk(KERN_INFO "Cache flush threshold set to %lu KiB\n",
 		parisc_cache_flush_threshold/1024);
 		parisc_cache_flush_threshold/1024);
 
 
 	/* calculate TLB flush threshold */
 	/* calculate TLB flush threshold */
@@ -401,7 +397,7 @@ void __init parisc_setup_cache_timing(void)
 	flush_tlb_all();
 	flush_tlb_all();
 	alltime = mfctl(16) - alltime;
 	alltime = mfctl(16) - alltime;
 
 
-	size = PAGE_SIZE;
+	size = 0;
 	start = (unsigned long) _text;
 	start = (unsigned long) _text;
 	rangetime = mfctl(16);
 	rangetime = mfctl(16);
 	while (start < (unsigned long) _end) {
 	while (start < (unsigned long) _end) {
@@ -414,13 +410,10 @@ void __init parisc_setup_cache_timing(void)
 	printk(KERN_DEBUG "Whole TLB flush %lu cycles, flushing %lu bytes %lu cycles\n",
 	printk(KERN_DEBUG "Whole TLB flush %lu cycles, flushing %lu bytes %lu cycles\n",
 		alltime, size, rangetime);
 		alltime, size, rangetime);
 
 
-	parisc_tlb_flush_threshold = size * alltime / rangetime;
-	parisc_tlb_flush_threshold *= num_online_cpus();
-	parisc_tlb_flush_threshold = PAGE_ALIGN(parisc_tlb_flush_threshold);
-	if (!parisc_tlb_flush_threshold)
-		parisc_tlb_flush_threshold = FLUSH_TLB_THRESHOLD;
-
-	printk(KERN_INFO "Setting TLB flush threshold to %lu kB\n",
+	threshold = PAGE_ALIGN(num_online_cpus() * size * alltime / rangetime);
+	if (threshold)
+		parisc_tlb_flush_threshold = threshold;
+	printk(KERN_INFO "TLB flush threshold set to %lu KiB\n",
 		parisc_tlb_flush_threshold/1024);
 		parisc_tlb_flush_threshold/1024);
 }
 }
 
 

+ 4 - 4
arch/parisc/kernel/inventory.c

@@ -58,7 +58,7 @@ void __init setup_pdc(void)
 	status = pdc_system_map_find_mods(&module_result, &module_path, 0);
 	status = pdc_system_map_find_mods(&module_result, &module_path, 0);
 	if (status == PDC_OK) {
 	if (status == PDC_OK) {
 		pdc_type = PDC_TYPE_SYSTEM_MAP;
 		pdc_type = PDC_TYPE_SYSTEM_MAP;
-		printk("System Map.\n");
+		pr_cont("System Map.\n");
 		return;
 		return;
 	}
 	}
 
 
@@ -77,7 +77,7 @@ void __init setup_pdc(void)
 	status = pdc_pat_cell_get_number(&cell_info);
 	status = pdc_pat_cell_get_number(&cell_info);
 	if (status == PDC_OK) {
 	if (status == PDC_OK) {
 		pdc_type = PDC_TYPE_PAT;
 		pdc_type = PDC_TYPE_PAT;
-		printk("64 bit PAT.\n");
+		pr_cont("64 bit PAT.\n");
 		return;
 		return;
 	}
 	}
 #endif
 #endif
@@ -97,12 +97,12 @@ void __init setup_pdc(void)
 	case 0xC:		/* 715/64, at least */
 	case 0xC:		/* 715/64, at least */
 
 
 		pdc_type = PDC_TYPE_SNAKE;
 		pdc_type = PDC_TYPE_SNAKE;
-		printk("Snake.\n");
+		pr_cont("Snake.\n");
 		return;
 		return;
 
 
 	default:		/* Everything else */
 	default:		/* Everything else */
 
 
-		printk("Unsupported.\n");
+		pr_cont("Unsupported.\n");
 		panic("If this is a 64-bit machine, please try a 64-bit kernel.\n");
 		panic("If this is a 64-bit machine, please try a 64-bit kernel.\n");
 	}
 	}
 }
 }

+ 22 - 15
arch/parisc/kernel/pacache.S

@@ -96,7 +96,7 @@ fitmanyloop:					/* Loop if LOOP >= 2 */
 
 
 fitmanymiddle:					/* Loop if LOOP >= 2 */
 fitmanymiddle:					/* Loop if LOOP >= 2 */
 	addib,COND(>)		-1, %r31, fitmanymiddle	/* Adjusted inner loop decr */
 	addib,COND(>)		-1, %r31, fitmanymiddle	/* Adjusted inner loop decr */
-	pitlbe		0(%sr1, %r28)
+	pitlbe		%r0(%sr1, %r28)
 	pitlbe,m	%arg1(%sr1, %r28)	/* Last pitlbe and addr adjust */
 	pitlbe,m	%arg1(%sr1, %r28)	/* Last pitlbe and addr adjust */
 	addib,COND(>)		-1, %r29, fitmanymiddle	/* Middle loop decr */
 	addib,COND(>)		-1, %r29, fitmanymiddle	/* Middle loop decr */
 	copy		%arg3, %r31		/* Re-init inner loop count */
 	copy		%arg3, %r31		/* Re-init inner loop count */
@@ -139,7 +139,7 @@ fdtmanyloop:					/* Loop if LOOP >= 2 */
 
 
 fdtmanymiddle:					/* Loop if LOOP >= 2 */
 fdtmanymiddle:					/* Loop if LOOP >= 2 */
 	addib,COND(>)		-1, %r31, fdtmanymiddle	/* Adjusted inner loop decr */
 	addib,COND(>)		-1, %r31, fdtmanymiddle	/* Adjusted inner loop decr */
-	pdtlbe		0(%sr1, %r28)
+	pdtlbe		%r0(%sr1, %r28)
 	pdtlbe,m	%arg1(%sr1, %r28)	/* Last pdtlbe and addr adjust */
 	pdtlbe,m	%arg1(%sr1, %r28)	/* Last pdtlbe and addr adjust */
 	addib,COND(>)		-1, %r29, fdtmanymiddle	/* Middle loop decr */
 	addib,COND(>)		-1, %r29, fdtmanymiddle	/* Middle loop decr */
 	copy		%arg3, %r31		/* Re-init inner loop count */
 	copy		%arg3, %r31		/* Re-init inner loop count */
@@ -626,12 +626,12 @@ ENTRY_CFI(copy_user_page_asm)
 	/* Purge any old translations */
 	/* Purge any old translations */
 
 
 #ifdef CONFIG_PA20
 #ifdef CONFIG_PA20
-	pdtlb,l		0(%r28)
-	pdtlb,l		0(%r29)
+	pdtlb,l		%r0(%r28)
+	pdtlb,l		%r0(%r29)
 #else
 #else
 	tlb_lock	%r20,%r21,%r22
 	tlb_lock	%r20,%r21,%r22
-	pdtlb		0(%r28)
-	pdtlb		0(%r29)
+	pdtlb		%r0(%r28)
+	pdtlb		%r0(%r29)
 	tlb_unlock	%r20,%r21,%r22
 	tlb_unlock	%r20,%r21,%r22
 #endif
 #endif
 
 
@@ -774,10 +774,10 @@ ENTRY_CFI(clear_user_page_asm)
 	/* Purge any old translation */
 	/* Purge any old translation */
 
 
 #ifdef CONFIG_PA20
 #ifdef CONFIG_PA20
-	pdtlb,l		0(%r28)
+	pdtlb,l		%r0(%r28)
 #else
 #else
 	tlb_lock	%r20,%r21,%r22
 	tlb_lock	%r20,%r21,%r22
-	pdtlb		0(%r28)
+	pdtlb		%r0(%r28)
 	tlb_unlock	%r20,%r21,%r22
 	tlb_unlock	%r20,%r21,%r22
 #endif
 #endif
 
 
@@ -858,10 +858,10 @@ ENTRY_CFI(flush_dcache_page_asm)
 	/* Purge any old translation */
 	/* Purge any old translation */
 
 
 #ifdef CONFIG_PA20
 #ifdef CONFIG_PA20
-	pdtlb,l		0(%r28)
+	pdtlb,l		%r0(%r28)
 #else
 #else
 	tlb_lock	%r20,%r21,%r22
 	tlb_lock	%r20,%r21,%r22
-	pdtlb		0(%r28)
+	pdtlb		%r0(%r28)
 	tlb_unlock	%r20,%r21,%r22
 	tlb_unlock	%r20,%r21,%r22
 #endif
 #endif
 
 
@@ -898,10 +898,10 @@ ENTRY_CFI(flush_dcache_page_asm)
 	sync
 	sync
 
 
 #ifdef CONFIG_PA20
 #ifdef CONFIG_PA20
-	pdtlb,l		0(%r25)
+	pdtlb,l		%r0(%r25)
 #else
 #else
 	tlb_lock	%r20,%r21,%r22
 	tlb_lock	%r20,%r21,%r22
-	pdtlb		0(%r25)
+	pdtlb		%r0(%r25)
 	tlb_unlock	%r20,%r21,%r22
 	tlb_unlock	%r20,%r21,%r22
 #endif
 #endif
 
 
@@ -931,13 +931,18 @@ ENTRY_CFI(flush_icache_page_asm)
 	depwi		0, 31,PAGE_SHIFT, %r28	/* Clear any offset bits */
 	depwi		0, 31,PAGE_SHIFT, %r28	/* Clear any offset bits */
 #endif
 #endif
 
 
-	/* Purge any old translation */
+	/* Purge any old translation.  Note that the FIC instruction
+	 * may use either the instruction or data TLB.  Given that we
+	 * have a flat address space, it's not clear which TLB will be
+	 * used.  So, we purge both entries.  */
 
 
 #ifdef CONFIG_PA20
 #ifdef CONFIG_PA20
+	pdtlb,l		%r0(%r28)
 	pitlb,l         %r0(%sr4,%r28)
 	pitlb,l         %r0(%sr4,%r28)
 #else
 #else
 	tlb_lock        %r20,%r21,%r22
 	tlb_lock        %r20,%r21,%r22
-	pitlb           (%sr4,%r28)
+	pdtlb		%r0(%r28)
+	pitlb           %r0(%sr4,%r28)
 	tlb_unlock      %r20,%r21,%r22
 	tlb_unlock      %r20,%r21,%r22
 #endif
 #endif
 
 
@@ -976,10 +981,12 @@ ENTRY_CFI(flush_icache_page_asm)
 	sync
 	sync
 
 
 #ifdef CONFIG_PA20
 #ifdef CONFIG_PA20
+	pdtlb,l		%r0(%r28)
 	pitlb,l         %r0(%sr4,%r25)
 	pitlb,l         %r0(%sr4,%r25)
 #else
 #else
 	tlb_lock        %r20,%r21,%r22
 	tlb_lock        %r20,%r21,%r22
-	pitlb           (%sr4,%r25)
+	pdtlb		%r0(%r28)
+	pitlb           %r0(%sr4,%r25)
 	tlb_unlock      %r20,%r21,%r22
 	tlb_unlock      %r20,%r21,%r22
 #endif
 #endif
 
 

+ 1 - 1
arch/parisc/kernel/pci-dma.c

@@ -95,8 +95,8 @@ static inline int map_pte_uncached(pte_t * pte,
 
 
 		if (!pte_none(*pte))
 		if (!pte_none(*pte))
 			printk(KERN_ERR "map_pte_uncached: page already exists\n");
 			printk(KERN_ERR "map_pte_uncached: page already exists\n");
-		set_pte(pte, __mk_pte(*paddr_ptr, PAGE_KERNEL_UNC));
 		purge_tlb_start(flags);
 		purge_tlb_start(flags);
+		set_pte(pte, __mk_pte(*paddr_ptr, PAGE_KERNEL_UNC));
 		pdtlb_kernel(orig_vaddr);
 		pdtlb_kernel(orig_vaddr);
 		purge_tlb_end(flags);
 		purge_tlb_end(flags);
 		vaddr += PAGE_SIZE;
 		vaddr += PAGE_SIZE;

+ 4 - 0
arch/parisc/kernel/setup.c

@@ -334,6 +334,10 @@ static int __init parisc_init(void)
 	/* tell PDC we're Linux. Nevermind failure. */
 	/* tell PDC we're Linux. Nevermind failure. */
 	pdc_stable_write(0x40, &osid, sizeof(osid));
 	pdc_stable_write(0x40, &osid, sizeof(osid));
 	
 	
+	/* start with known state */
+	flush_cache_all_local();
+	flush_tlb_all_local(NULL);
+
 	processor_init();
 	processor_init();
 #ifdef CONFIG_SMP
 #ifdef CONFIG_SMP
 	pr_info("CPU(s): %d out of %d %s at %d.%06d MHz online\n",
 	pr_info("CPU(s): %d out of %d %s at %d.%06d MHz online\n",

+ 11 - 46
arch/parisc/kernel/time.c

@@ -14,6 +14,7 @@
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/rtc.h>
 #include <linux/rtc.h>
 #include <linux/sched.h>
 #include <linux/sched.h>
+#include <linux/sched_clock.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/param.h>
 #include <linux/param.h>
 #include <linux/string.h>
 #include <linux/string.h>
@@ -39,18 +40,6 @@
 
 
 static unsigned long clocktick __read_mostly;	/* timer cycles per tick */
 static unsigned long clocktick __read_mostly;	/* timer cycles per tick */
 
 
-#ifndef CONFIG_64BIT
-/*
- * The processor-internal cycle counter (Control Register 16) is used as time
- * source for the sched_clock() function.  This register is 64bit wide on a
- * 64-bit kernel and 32bit on a 32-bit kernel. Since sched_clock() always
- * requires a 64bit counter we emulate on the 32-bit kernel the higher 32bits
- * with a per-cpu variable which we increase every time the counter
- * wraps-around (which happens every ~4 secounds).
- */
-static DEFINE_PER_CPU(unsigned long, cr16_high_32_bits);
-#endif
-
 /*
 /*
  * We keep time on PA-RISC Linux by using the Interval Timer which is
  * We keep time on PA-RISC Linux by using the Interval Timer which is
  * a pair of registers; one is read-only and one is write-only; both
  * a pair of registers; one is read-only and one is write-only; both
@@ -121,12 +110,6 @@ irqreturn_t __irq_entry timer_interrupt(int irq, void *dev_id)
 	 */
 	 */
 	mtctl(next_tick, 16);
 	mtctl(next_tick, 16);
 
 
-#if !defined(CONFIG_64BIT)
-	/* check for overflow on a 32bit kernel (every ~4 seconds). */
-	if (unlikely(next_tick < now))
-		this_cpu_inc(cr16_high_32_bits);
-#endif
-
 	/* Skip one clocktick on purpose if we missed next_tick.
 	/* Skip one clocktick on purpose if we missed next_tick.
 	 * The new CR16 must be "later" than current CR16 otherwise
 	 * The new CR16 must be "later" than current CR16 otherwise
 	 * itimer would not fire until CR16 wrapped - e.g 4 seconds
 	 * itimer would not fire until CR16 wrapped - e.g 4 seconds
@@ -208,7 +191,7 @@ EXPORT_SYMBOL(profile_pc);
 
 
 /* clock source code */
 /* clock source code */
 
 
-static cycle_t read_cr16(struct clocksource *cs)
+static cycle_t notrace read_cr16(struct clocksource *cs)
 {
 {
 	return get_cycles();
 	return get_cycles();
 }
 }
@@ -287,26 +270,9 @@ void read_persistent_clock(struct timespec *ts)
 }
 }
 
 
 
 
-/*
- * sched_clock() framework
- */
-
-static u32 cyc2ns_mul __read_mostly;
-static u32 cyc2ns_shift __read_mostly;
-
-u64 sched_clock(void)
+static u64 notrace read_cr16_sched_clock(void)
 {
 {
-	u64 now;
-
-	/* Get current cycle counter (Control Register 16). */
-#ifdef CONFIG_64BIT
-	now = mfctl(16);
-#else
-	now = mfctl(16) + (((u64) this_cpu_read(cr16_high_32_bits)) << 32);
-#endif
-
-	/* return the value in ns (cycles_2_ns) */
-	return mul_u64_u32_shr(now, cyc2ns_mul, cyc2ns_shift);
+	return get_cycles();
 }
 }
 
 
 
 
@@ -316,17 +282,16 @@ u64 sched_clock(void)
 
 
 void __init time_init(void)
 void __init time_init(void)
 {
 {
-	unsigned long current_cr16_khz;
+	unsigned long cr16_hz;
 
 
-	current_cr16_khz = PAGE0->mem_10msec/10;  /* kHz */
 	clocktick = (100 * PAGE0->mem_10msec) / HZ;
 	clocktick = (100 * PAGE0->mem_10msec) / HZ;
-
-	/* calculate mult/shift values for cr16 */
-	clocks_calc_mult_shift(&cyc2ns_mul, &cyc2ns_shift, current_cr16_khz,
-				NSEC_PER_MSEC, 0);
-
 	start_cpu_itimer();	/* get CPU 0 started */
 	start_cpu_itimer();	/* get CPU 0 started */
 
 
+	cr16_hz = 100 * PAGE0->mem_10msec;  /* Hz */
+
 	/* register at clocksource framework */
 	/* register at clocksource framework */
-	clocksource_register_khz(&clocksource_cr16, current_cr16_khz);
+	clocksource_register_hz(&clocksource_cr16, cr16_hz);
+
+	/* register as sched_clock source */
+	sched_clock_register(read_cr16_sched_clock, BITS_PER_LONG, cr16_hz);
 }
 }

+ 6 - 2
arch/powerpc/boot/main.c

@@ -232,8 +232,12 @@ void start(void)
 		console_ops.close();
 		console_ops.close();
 
 
 	kentry = (kernel_entry_t) vmlinux.addr;
 	kentry = (kernel_entry_t) vmlinux.addr;
-	if (ft_addr)
-		kentry(ft_addr, 0, NULL);
+	if (ft_addr) {
+		if(platform_ops.kentry)
+			platform_ops.kentry(ft_addr, vmlinux.addr);
+		else
+			kentry(ft_addr, 0, NULL);
+	}
 	else
 	else
 		kentry((unsigned long)initrd.addr, initrd.size,
 		kentry((unsigned long)initrd.addr, initrd.size,
 		       loader_info.promptr);
 		       loader_info.promptr);

+ 13 - 0
arch/powerpc/boot/opal-calls.S

@@ -12,6 +12,19 @@
 
 
 	.text
 	.text
 
 
+	.globl opal_kentry
+opal_kentry:
+	/* r3 is the fdt ptr */
+	mtctr r4
+	li	r4, 0
+	li	r5, 0
+	li	r6, 0
+	li	r7, 0
+	ld	r11,opal@got(r2)
+	ld	r8,0(r11)
+	ld	r9,8(r11)
+	bctr
+
 #define OPAL_CALL(name, token)				\
 #define OPAL_CALL(name, token)				\
 	.globl name;					\
 	.globl name;					\
 name:							\
 name:							\

+ 11 - 0
arch/powerpc/boot/opal.c

@@ -23,14 +23,25 @@ struct opal {
 
 
 static u32 opal_con_id;
 static u32 opal_con_id;
 
 
+/* see opal-wrappers.S */
 int64_t opal_console_write(int64_t term_number, u64 *length, const u8 *buffer);
 int64_t opal_console_write(int64_t term_number, u64 *length, const u8 *buffer);
 int64_t opal_console_read(int64_t term_number, uint64_t *length, u8 *buffer);
 int64_t opal_console_read(int64_t term_number, uint64_t *length, u8 *buffer);
 int64_t opal_console_write_buffer_space(uint64_t term_number, uint64_t *length);
 int64_t opal_console_write_buffer_space(uint64_t term_number, uint64_t *length);
 int64_t opal_console_flush(uint64_t term_number);
 int64_t opal_console_flush(uint64_t term_number);
 int64_t opal_poll_events(uint64_t *outstanding_event_mask);
 int64_t opal_poll_events(uint64_t *outstanding_event_mask);
 
 
+void opal_kentry(unsigned long fdt_addr, void *vmlinux_addr);
+
 static int opal_con_open(void)
 static int opal_con_open(void)
 {
 {
+	/*
+	 * When OPAL loads the boot kernel it stashes the OPAL base and entry
+	 * address in r8 and r9 so the kernel can use the OPAL console
+	 * before unflattening the devicetree. While executing the wrapper will
+	 * probably trash r8 and r9 so this kentry hook restores them before
+	 * entering the decompressed kernel.
+	 */
+	platform_ops.kentry = opal_kentry;
 	return 0;
 	return 0;
 }
 }
 
 

+ 1 - 0
arch/powerpc/boot/ops.h

@@ -30,6 +30,7 @@ struct platform_ops {
 	void *	(*realloc)(void *ptr, unsigned long size);
 	void *	(*realloc)(void *ptr, unsigned long size);
 	void	(*exit)(void);
 	void	(*exit)(void);
 	void *	(*vmlinux_alloc)(unsigned long size);
 	void *	(*vmlinux_alloc)(unsigned long size);
+	void  	(*kentry)(unsigned long fdt_addr, void *vmlinux_addr);
 };
 };
 extern struct platform_ops platform_ops;
 extern struct platform_ops platform_ops;
 
 

+ 12 - 0
arch/powerpc/include/asm/asm-prototypes.h

@@ -14,6 +14,10 @@
 
 
 #include <linux/threads.h>
 #include <linux/threads.h>
 #include <linux/kprobes.h>
 #include <linux/kprobes.h>
+#include <asm/cacheflush.h>
+#include <asm/checksum.h>
+#include <asm/uaccess.h>
+#include <asm/epapr_hcalls.h>
 
 
 #include <uapi/asm/ucontext.h>
 #include <uapi/asm/ucontext.h>
 
 
@@ -109,4 +113,12 @@ void early_setup_secondary(void);
 /* time */
 /* time */
 void accumulate_stolen_time(void);
 void accumulate_stolen_time(void);
 
 
+/* misc runtime */
+extern u64 __bswapdi2(u64);
+extern s64 __lshrdi3(s64, int);
+extern s64 __ashldi3(s64, int);
+extern s64 __ashrdi3(s64, int);
+extern int __cmpdi2(s64, s64);
+extern int __ucmpdi2(u64, u64);
+
 #endif /* _ASM_POWERPC_ASM_PROTOTYPES_H */
 #endif /* _ASM_POWERPC_ASM_PROTOTYPES_H */

+ 12 - 3
arch/powerpc/include/asm/exception-64s.h

@@ -91,7 +91,7 @@
  */
  */
 #define LOAD_HANDLER(reg, label)					\
 #define LOAD_HANDLER(reg, label)					\
 	ld	reg,PACAKBASE(r13);	/* get high part of &label */	\
 	ld	reg,PACAKBASE(r13);	/* get high part of &label */	\
-	ori	reg,reg,(FIXED_SYMBOL_ABS_ADDR(label))@l;
+	ori	reg,reg,FIXED_SYMBOL_ABS_ADDR(label);
 
 
 #define __LOAD_HANDLER(reg, label)					\
 #define __LOAD_HANDLER(reg, label)					\
 	ld	reg,PACAKBASE(r13);					\
 	ld	reg,PACAKBASE(r13);					\
@@ -158,14 +158,17 @@ BEGIN_FTR_SECTION_NESTED(943)						\
 	std	ra,offset(r13);						\
 	std	ra,offset(r13);						\
 END_FTR_SECTION_NESTED(ftr,ftr,943)
 END_FTR_SECTION_NESTED(ftr,ftr,943)
 
 
-#define EXCEPTION_PROLOG_0(area)					\
-	GET_PACA(r13);							\
+#define EXCEPTION_PROLOG_0_PACA(area)					\
 	std	r9,area+EX_R9(r13);	/* save r9 */			\
 	std	r9,area+EX_R9(r13);	/* save r9 */			\
 	OPT_GET_SPR(r9, SPRN_PPR, CPU_FTR_HAS_PPR);			\
 	OPT_GET_SPR(r9, SPRN_PPR, CPU_FTR_HAS_PPR);			\
 	HMT_MEDIUM;							\
 	HMT_MEDIUM;							\
 	std	r10,area+EX_R10(r13);	/* save r10 - r12 */		\
 	std	r10,area+EX_R10(r13);	/* save r10 - r12 */		\
 	OPT_GET_SPR(r10, SPRN_CFAR, CPU_FTR_CFAR)
 	OPT_GET_SPR(r10, SPRN_CFAR, CPU_FTR_CFAR)
 
 
+#define EXCEPTION_PROLOG_0(area)					\
+	GET_PACA(r13);							\
+	EXCEPTION_PROLOG_0_PACA(area)
+
 #define __EXCEPTION_PROLOG_1(area, extra, vec)				\
 #define __EXCEPTION_PROLOG_1(area, extra, vec)				\
 	OPT_SAVE_REG_TO_PACA(area+EX_PPR, r9, CPU_FTR_HAS_PPR);		\
 	OPT_SAVE_REG_TO_PACA(area+EX_PPR, r9, CPU_FTR_HAS_PPR);		\
 	OPT_SAVE_REG_TO_PACA(area+EX_CFAR, r10, CPU_FTR_CFAR);		\
 	OPT_SAVE_REG_TO_PACA(area+EX_CFAR, r10, CPU_FTR_CFAR);		\
@@ -196,6 +199,12 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
 	EXCEPTION_PROLOG_1(area, extra, vec);				\
 	EXCEPTION_PROLOG_1(area, extra, vec);				\
 	EXCEPTION_PROLOG_PSERIES_1(label, h);
 	EXCEPTION_PROLOG_PSERIES_1(label, h);
 
 
+/* Have the PACA in r13 already */
+#define EXCEPTION_PROLOG_PSERIES_PACA(area, label, h, extra, vec)	\
+	EXCEPTION_PROLOG_0_PACA(area);					\
+	EXCEPTION_PROLOG_1(area, extra, vec);				\
+	EXCEPTION_PROLOG_PSERIES_1(label, h);
+
 #define __KVMTEST(h, n)							\
 #define __KVMTEST(h, n)							\
 	lbz	r10,HSTATE_IN_GUEST(r13);				\
 	lbz	r10,HSTATE_IN_GUEST(r13);				\
 	cmpwi	r10,0;							\
 	cmpwi	r10,0;							\

+ 10 - 4
arch/powerpc/include/asm/mmu.h

@@ -28,6 +28,12 @@
  * Individual features below.
  * Individual features below.
  */
  */
 
 
+/*
+ * Kernel read only support.
+ * We added the ppp value 0b110 in ISA 2.04.
+ */
+#define MMU_FTR_KERNEL_RO		ASM_CONST(0x00004000)
+
 /*
 /*
  * We need to clear top 16bits of va (from the remaining 64 bits )in
  * We need to clear top 16bits of va (from the remaining 64 bits )in
  * tlbie* instructions
  * tlbie* instructions
@@ -103,10 +109,10 @@
 #define MMU_FTRS_POWER4		MMU_FTRS_DEFAULT_HPTE_ARCH_V2
 #define MMU_FTRS_POWER4		MMU_FTRS_DEFAULT_HPTE_ARCH_V2
 #define MMU_FTRS_PPC970		MMU_FTRS_POWER4 | MMU_FTR_TLBIE_CROP_VA
 #define MMU_FTRS_PPC970		MMU_FTRS_POWER4 | MMU_FTR_TLBIE_CROP_VA
 #define MMU_FTRS_POWER5		MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
 #define MMU_FTRS_POWER5		MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
-#define MMU_FTRS_POWER6		MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
-#define MMU_FTRS_POWER7		MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
-#define MMU_FTRS_POWER8		MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
-#define MMU_FTRS_POWER9		MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE
+#define MMU_FTRS_POWER6		MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE | MMU_FTR_KERNEL_RO
+#define MMU_FTRS_POWER7		MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE | MMU_FTR_KERNEL_RO
+#define MMU_FTRS_POWER8		MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE | MMU_FTR_KERNEL_RO
+#define MMU_FTRS_POWER9		MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE | MMU_FTR_KERNEL_RO
 #define MMU_FTRS_CELL		MMU_FTRS_DEFAULT_HPTE_ARCH_V2 | \
 #define MMU_FTRS_CELL		MMU_FTRS_DEFAULT_HPTE_ARCH_V2 | \
 				MMU_FTR_CI_LARGE_PAGE
 				MMU_FTR_CI_LARGE_PAGE
 #define MMU_FTRS_PA6T		MMU_FTRS_DEFAULT_HPTE_ARCH_V2 | \
 #define MMU_FTRS_PA6T		MMU_FTRS_DEFAULT_HPTE_ARCH_V2 | \

+ 1 - 0
arch/powerpc/include/asm/ppc-opcode.h

@@ -460,5 +460,6 @@
 
 
 #define PPC_SLBIA(IH)	stringify_in_c(.long PPC_INST_SLBIA | \
 #define PPC_SLBIA(IH)	stringify_in_c(.long PPC_INST_SLBIA | \
 				       ((IH & 0x7) << 21))
 				       ((IH & 0x7) << 21))
+#define PPC_INVALIDATE_ERAT	PPC_SLBIA(7)
 
 
 #endif /* _ASM_POWERPC_PPC_OPCODE_H */
 #endif /* _ASM_POWERPC_PPC_OPCODE_H */

+ 1 - 0
arch/powerpc/include/asm/reg.h

@@ -355,6 +355,7 @@
 #define     LPCR_PECE0		ASM_CONST(0x0000000000004000)	/* ext. exceptions can cause exit */
 #define     LPCR_PECE0		ASM_CONST(0x0000000000004000)	/* ext. exceptions can cause exit */
 #define     LPCR_PECE1		ASM_CONST(0x0000000000002000)	/* decrementer can cause exit */
 #define     LPCR_PECE1		ASM_CONST(0x0000000000002000)	/* decrementer can cause exit */
 #define     LPCR_PECE2		ASM_CONST(0x0000000000001000)	/* machine check etc can cause exit */
 #define     LPCR_PECE2		ASM_CONST(0x0000000000001000)	/* machine check etc can cause exit */
+#define     LPCR_PECE_HVEE	ASM_CONST(0x0000400000000000)	/* P9 Wakeup on HV interrupts */
 #define   LPCR_MER		ASM_CONST(0x0000000000000800)	/* Mediated External Exception */
 #define   LPCR_MER		ASM_CONST(0x0000000000000800)	/* Mediated External Exception */
 #define   LPCR_MER_SH		11
 #define   LPCR_MER_SH		11
 #define   LPCR_TC		ASM_CONST(0x0000000000000200)	/* Translation control */
 #define   LPCR_TC		ASM_CONST(0x0000000000000200)	/* Translation control */

+ 4 - 4
arch/powerpc/kernel/cpu_setup_power.S

@@ -98,8 +98,8 @@ _GLOBAL(__setup_cpu_power9)
 	li	r0,0
 	li	r0,0
 	mtspr	SPRN_LPID,r0
 	mtspr	SPRN_LPID,r0
 	mfspr	r3,SPRN_LPCR
 	mfspr	r3,SPRN_LPCR
-	ori	r3, r3, LPCR_PECEDH
-	ori	r3, r3, LPCR_HVICE
+	LOAD_REG_IMMEDIATE(r4, LPCR_PECEDH | LPCR_PECE_HVEE | LPCR_HVICE)
+	or	r3, r3, r4
 	bl	__init_LPCR
 	bl	__init_LPCR
 	bl	__init_HFSCR
 	bl	__init_HFSCR
 	bl	__init_tlb_power9
 	bl	__init_tlb_power9
@@ -118,8 +118,8 @@ _GLOBAL(__restore_cpu_power9)
 	li	r0,0
 	li	r0,0
 	mtspr	SPRN_LPID,r0
 	mtspr	SPRN_LPID,r0
 	mfspr   r3,SPRN_LPCR
 	mfspr   r3,SPRN_LPCR
-	ori	r3, r3, LPCR_PECEDH
-	ori	r3, r3, LPCR_HVICE
+	LOAD_REG_IMMEDIATE(r4, LPCR_PECEDH | LPCR_PECE_HVEE | LPCR_HVICE)
+	or	r3, r3, r4
 	bl	__init_LPCR
 	bl	__init_LPCR
 	bl	__init_HFSCR
 	bl	__init_HFSCR
 	bl	__init_tlb_power9
 	bl	__init_tlb_power9

+ 8 - 3
arch/powerpc/kernel/exceptions-64s.S

@@ -116,7 +116,9 @@ EXC_VIRT_NONE(0x4000, 0x4100)
 
 
 EXC_REAL_BEGIN(system_reset, 0x100, 0x200)
 EXC_REAL_BEGIN(system_reset, 0x100, 0x200)
 	SET_SCRATCH0(r13)
 	SET_SCRATCH0(r13)
-	EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common, EXC_STD,
+	GET_PACA(r13)
+	clrrdi	r13,r13,1 /* Last bit of HSPRG0 is set if waking from winkle */
+	EXCEPTION_PROLOG_PSERIES_PACA(PACA_EXGEN, system_reset_common, EXC_STD,
 				 IDLETEST, 0x100)
 				 IDLETEST, 0x100)
 
 
 EXC_REAL_END(system_reset, 0x100, 0x200)
 EXC_REAL_END(system_reset, 0x100, 0x200)
@@ -124,6 +126,9 @@ EXC_VIRT_NONE(0x4100, 0x4200)
 
 
 #ifdef CONFIG_PPC_P7_NAP
 #ifdef CONFIG_PPC_P7_NAP
 EXC_COMMON_BEGIN(system_reset_idle_common)
 EXC_COMMON_BEGIN(system_reset_idle_common)
+BEGIN_FTR_SECTION
+	GET_PACA(r13) /* Restore HSPRG0 to get the winkle bit in r13 */
+END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
 	bl	pnv_restore_hyp_resource
 	bl	pnv_restore_hyp_resource
 
 
 	li	r0,PNV_THREAD_RUNNING
 	li	r0,PNV_THREAD_RUNNING
@@ -169,7 +174,7 @@ EXC_REAL_BEGIN(machine_check, 0x200, 0x300)
 	SET_SCRATCH0(r13)		/* save r13 */
 	SET_SCRATCH0(r13)		/* save r13 */
 	/*
 	/*
 	 * Running native on arch 2.06 or later, we may wakeup from winkle
 	 * Running native on arch 2.06 or later, we may wakeup from winkle
-	 * inside machine check. If yes, then last bit of HSPGR0 would be set
+	 * inside machine check. If yes, then last bit of HSPRG0 would be set
 	 * to 1. Hence clear it unconditionally.
 	 * to 1. Hence clear it unconditionally.
 	 */
 	 */
 	GET_PACA(r13)
 	GET_PACA(r13)
@@ -388,7 +393,7 @@ EXC_COMMON_BEGIN(machine_check_handle_early)
 	/*
 	/*
 	 * Go back to winkle. Please note that this thread was woken up in
 	 * Go back to winkle. Please note that this thread was woken up in
 	 * machine check from winkle and have not restored the per-subcore
 	 * machine check from winkle and have not restored the per-subcore
-	 * state. Hence before going back to winkle, set last bit of HSPGR0
+	 * state. Hence before going back to winkle, set last bit of HSPRG0
 	 * to 1. This will make sure that if this thread gets woken up
 	 * to 1. This will make sure that if this thread gets woken up
 	 * again at reset vector 0x100 then it will get chance to restore
 	 * again at reset vector 0x100 then it will get chance to restore
 	 * the subcore state.
 	 * the subcore state.

+ 21 - 21
arch/powerpc/kernel/process.c

@@ -1215,7 +1215,7 @@ static void show_instructions(struct pt_regs *regs)
 		int instr;
 		int instr;
 
 
 		if (!(i % 8))
 		if (!(i % 8))
-			printk("\n");
+			pr_cont("\n");
 
 
 #if !defined(CONFIG_BOOKE)
 #if !defined(CONFIG_BOOKE)
 		/* If executing with the IMMU off, adjust pc rather
 		/* If executing with the IMMU off, adjust pc rather
@@ -1227,18 +1227,18 @@ static void show_instructions(struct pt_regs *regs)
 
 
 		if (!__kernel_text_address(pc) ||
 		if (!__kernel_text_address(pc) ||
 		     probe_kernel_address((unsigned int __user *)pc, instr)) {
 		     probe_kernel_address((unsigned int __user *)pc, instr)) {
-			printk(KERN_CONT "XXXXXXXX ");
+			pr_cont("XXXXXXXX ");
 		} else {
 		} else {
 			if (regs->nip == pc)
 			if (regs->nip == pc)
-				printk(KERN_CONT "<%08x> ", instr);
+				pr_cont("<%08x> ", instr);
 			else
 			else
-				printk(KERN_CONT "%08x ", instr);
+				pr_cont("%08x ", instr);
 		}
 		}
 
 
 		pc += sizeof(int);
 		pc += sizeof(int);
 	}
 	}
 
 
-	printk("\n");
+	pr_cont("\n");
 }
 }
 
 
 struct regbit {
 struct regbit {
@@ -1282,7 +1282,7 @@ static void print_bits(unsigned long val, struct regbit *bits, const char *sep)
 
 
 	for (; bits->bit; ++bits)
 	for (; bits->bit; ++bits)
 		if (val & bits->bit) {
 		if (val & bits->bit) {
-			printk("%s%s", s, bits->name);
+			pr_cont("%s%s", s, bits->name);
 			s = sep;
 			s = sep;
 		}
 		}
 }
 }
@@ -1305,9 +1305,9 @@ static void print_tm_bits(unsigned long val)
  *   T: Transactional	(bit 34)
  *   T: Transactional	(bit 34)
  */
  */
 	if (val & (MSR_TM | MSR_TS_S | MSR_TS_T)) {
 	if (val & (MSR_TM | MSR_TS_S | MSR_TS_T)) {
-		printk(",TM[");
+		pr_cont(",TM[");
 		print_bits(val, msr_tm_bits, "");
 		print_bits(val, msr_tm_bits, "");
-		printk("]");
+		pr_cont("]");
 	}
 	}
 }
 }
 #else
 #else
@@ -1316,10 +1316,10 @@ static void print_tm_bits(unsigned long val) {}
 
 
 static void print_msr_bits(unsigned long val)
 static void print_msr_bits(unsigned long val)
 {
 {
-	printk("<");
+	pr_cont("<");
 	print_bits(val, msr_bits, ",");
 	print_bits(val, msr_bits, ",");
 	print_tm_bits(val);
 	print_tm_bits(val);
-	printk(">");
+	pr_cont(">");
 }
 }
 
 
 #ifdef CONFIG_PPC64
 #ifdef CONFIG_PPC64
@@ -1347,29 +1347,29 @@ void show_regs(struct pt_regs * regs)
 	printk("  CR: %08lx  XER: %08lx\n", regs->ccr, regs->xer);
 	printk("  CR: %08lx  XER: %08lx\n", regs->ccr, regs->xer);
 	trap = TRAP(regs);
 	trap = TRAP(regs);
 	if ((regs->trap != 0xc00) && cpu_has_feature(CPU_FTR_CFAR))
 	if ((regs->trap != 0xc00) && cpu_has_feature(CPU_FTR_CFAR))
-		printk("CFAR: "REG" ", regs->orig_gpr3);
+		pr_cont("CFAR: "REG" ", regs->orig_gpr3);
 	if (trap == 0x200 || trap == 0x300 || trap == 0x600)
 	if (trap == 0x200 || trap == 0x300 || trap == 0x600)
 #if defined(CONFIG_4xx) || defined(CONFIG_BOOKE)
 #if defined(CONFIG_4xx) || defined(CONFIG_BOOKE)
-		printk("DEAR: "REG" ESR: "REG" ", regs->dar, regs->dsisr);
+		pr_cont("DEAR: "REG" ESR: "REG" ", regs->dar, regs->dsisr);
 #else
 #else
-		printk("DAR: "REG" DSISR: %08lx ", regs->dar, regs->dsisr);
+		pr_cont("DAR: "REG" DSISR: %08lx ", regs->dar, regs->dsisr);
 #endif
 #endif
 #ifdef CONFIG_PPC64
 #ifdef CONFIG_PPC64
-	printk("SOFTE: %ld ", regs->softe);
+	pr_cont("SOFTE: %ld ", regs->softe);
 #endif
 #endif
 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
 	if (MSR_TM_ACTIVE(regs->msr))
 	if (MSR_TM_ACTIVE(regs->msr))
-		printk("\nPACATMSCRATCH: %016llx ", get_paca()->tm_scratch);
+		pr_cont("\nPACATMSCRATCH: %016llx ", get_paca()->tm_scratch);
 #endif
 #endif
 
 
 	for (i = 0;  i < 32;  i++) {
 	for (i = 0;  i < 32;  i++) {
 		if ((i % REGS_PER_LINE) == 0)
 		if ((i % REGS_PER_LINE) == 0)
-			printk("\nGPR%02d: ", i);
-		printk(REG " ", regs->gpr[i]);
+			pr_cont("\nGPR%02d: ", i);
+		pr_cont(REG " ", regs->gpr[i]);
 		if (i == LAST_VOLATILE && !FULL_REGS(regs))
 		if (i == LAST_VOLATILE && !FULL_REGS(regs))
 			break;
 			break;
 	}
 	}
-	printk("\n");
+	pr_cont("\n");
 #ifdef CONFIG_KALLSYMS
 #ifdef CONFIG_KALLSYMS
 	/*
 	/*
 	 * Lookup NIP late so we have the best change of getting the
 	 * Lookup NIP late so we have the best change of getting the
@@ -1900,14 +1900,14 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
 			printk("["REG"] ["REG"] %pS", sp, ip, (void *)ip);
 			printk("["REG"] ["REG"] %pS", sp, ip, (void *)ip);
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
 #ifdef CONFIG_FUNCTION_GRAPH_TRACER
 			if ((ip == rth) && curr_frame >= 0) {
 			if ((ip == rth) && curr_frame >= 0) {
-				printk(" (%pS)",
+				pr_cont(" (%pS)",
 				       (void *)current->ret_stack[curr_frame].ret);
 				       (void *)current->ret_stack[curr_frame].ret);
 				curr_frame--;
 				curr_frame--;
 			}
 			}
 #endif
 #endif
 			if (firstframe)
 			if (firstframe)
-				printk(" (unreliable)");
-			printk("\n");
+				pr_cont(" (unreliable)");
+			pr_cont("\n");
 		}
 		}
 		firstframe = 0;
 		firstframe = 0;
 
 

+ 14 - 6
arch/powerpc/kernel/setup_64.c

@@ -226,17 +226,25 @@ static void __init configure_exceptions(void)
 		if (firmware_has_feature(FW_FEATURE_OPAL))
 		if (firmware_has_feature(FW_FEATURE_OPAL))
 			opal_configure_cores();
 			opal_configure_cores();
 
 
-		/* Enable AIL if supported, and we are in hypervisor mode */
-		if (early_cpu_has_feature(CPU_FTR_HVMODE) &&
-		    early_cpu_has_feature(CPU_FTR_ARCH_207S)) {
-			unsigned long lpcr = mfspr(SPRN_LPCR);
-			mtspr(SPRN_LPCR, lpcr | LPCR_AIL_3);
-		}
+		/* AIL on native is done in cpu_ready_for_interrupts() */
 	}
 	}
 }
 }
 
 
 static void cpu_ready_for_interrupts(void)
 static void cpu_ready_for_interrupts(void)
 {
 {
+	/*
+	 * Enable AIL if supported, and we are in hypervisor mode. This
+	 * is called once for every processor.
+	 *
+	 * If we are not in hypervisor mode the job is done once for
+	 * the whole partition in configure_exceptions().
+	 */
+	if (early_cpu_has_feature(CPU_FTR_HVMODE) &&
+	    early_cpu_has_feature(CPU_FTR_ARCH_207S)) {
+		unsigned long lpcr = mfspr(SPRN_LPCR);
+		mtspr(SPRN_LPCR, lpcr | LPCR_AIL_3);
+	}
+
 	/* Set IR and DR in PACA MSR */
 	/* Set IR and DR in PACA MSR */
 	get_paca()->kernel_msr = MSR_KERNEL;
 	get_paca()->kernel_msr = MSR_KERNEL;
 }
 }

+ 10 - 2
arch/powerpc/mm/hash_utils_64.c

@@ -193,8 +193,12 @@ unsigned long htab_convert_pte_flags(unsigned long pteflags)
 		/*
 		/*
 		 * Kernel read only mapped with ppp bits 0b110
 		 * Kernel read only mapped with ppp bits 0b110
 		 */
 		 */
-		if (!(pteflags & _PAGE_WRITE))
-			rflags |= (HPTE_R_PP0 | 0x2);
+		if (!(pteflags & _PAGE_WRITE)) {
+			if (mmu_has_feature(MMU_FTR_KERNEL_RO))
+				rflags |= (HPTE_R_PP0 | 0x2);
+			else
+				rflags |= 0x3;
+		}
 	} else {
 	} else {
 		if (pteflags & _PAGE_RWX)
 		if (pteflags & _PAGE_RWX)
 			rflags |= 0x2;
 			rflags |= 0x2;
@@ -1029,6 +1033,10 @@ void hash__early_init_mmu_secondary(void)
 {
 {
 	/* Initialize hash table for that CPU */
 	/* Initialize hash table for that CPU */
 	if (!firmware_has_feature(FW_FEATURE_LPAR)) {
 	if (!firmware_has_feature(FW_FEATURE_LPAR)) {
+
+		if (cpu_has_feature(CPU_FTR_POWER9_DD1))
+			update_hid_for_hash();
+
 		if (!cpu_has_feature(CPU_FTR_ARCH_300))
 		if (!cpu_has_feature(CPU_FTR_ARCH_300))
 			mtspr(SPRN_SDR1, _SDR1);
 			mtspr(SPRN_SDR1, _SDR1);
 		else
 		else

部分文件因为文件数量过多而无法显示