Browse Source

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net

Conflicts:
	drivers/net/usb/qmi_wwan.c
	include/net/dst.h

Trivial merge conflicts, both were overlapping changes.

Signed-off-by: David S. Miller <davem@davemloft.net>
David S. Miller 11 years ago
parent
commit
c3fa32b976
100 changed files with 720 additions and 479 deletions
  1. 4 4
      Documentation/ABI/stable/sysfs-bus-usb
  2. 16 16
      Documentation/ABI/testing/sysfs-devices-power
  3. 11 11
      Documentation/ABI/testing/sysfs-power
  4. 1 1
      Documentation/acpi/dsdt-override.txt
  5. 0 168
      Documentation/devicetree/bindings/memory.txt
  6. 10 7
      Documentation/devicetree/bindings/mmc/tmio_mmc.txt
  7. 1 0
      Documentation/sound/alsa/HD-Audio-Models.txt
  8. 40 14
      MAINTAINERS
  9. 1 1
      Makefile
  10. 1 1
      arch/arc/kernel/ptrace.c
  11. 13 12
      arch/arc/kernel/signal.c
  12. 7 2
      arch/arm/Makefile
  13. 8 8
      arch/arm/boot/Makefile
  14. 2 0
      arch/arm/boot/dts/Makefile
  15. 32 17
      arch/arm/boot/dts/armada-370-netgear-rn102.dts
  16. 11 0
      arch/arm/boot/dts/armada-xp.dtsi
  17. 4 2
      arch/arm/boot/dts/at91sam9x5.dtsi
  18. 12 0
      arch/arm/boot/dts/atlas6.dtsi
  19. 5 0
      arch/arm/boot/dts/exynos5250.dtsi
  20. 2 1
      arch/arm/boot/dts/kirkwood.dtsi
  21. 1 1
      arch/arm/boot/dts/omap3-beagle-xm.dts
  22. 2 2
      arch/arm/boot/dts/omap3.dtsi
  23. 23 4
      arch/arm/boot/dts/prima2.dtsi
  24. 3 3
      arch/arm/boot/dts/r8a73a4.dtsi
  25. 0 1
      arch/arm/boot/dts/r8a7778.dtsi
  26. 0 1
      arch/arm/boot/dts/r8a7779.dtsi
  27. 4 5
      arch/arm/boot/dts/r8a7790.dtsi
  28. 3 3
      arch/arm/boot/dts/sh73a0.dtsi
  29. 14 0
      arch/arm/boot/install.sh
  30. 31 7
      arch/arm/common/edma.c
  31. 4 2
      arch/arm/common/mcpm_entry.c
  32. 4 1
      arch/arm/common/sharpsl_param.c
  33. 1 0
      arch/arm/configs/multi_v7_defconfig
  34. 0 1
      arch/arm/include/asm/Kbuild
  35. 1 1
      arch/arm/include/asm/jump_label.h
  36. 10 4
      arch/arm/include/asm/mcpm.h
  37. 6 0
      arch/arm/include/asm/syscall.h
  38. 20 1
      arch/arm/kernel/head.S
  39. 1 1
      arch/arm/mach-at91/at91rm9200_time.c
  40. 1 1
      arch/arm/mach-at91/at91sam926x_time.c
  41. 8 0
      arch/arm/mach-at91/at91sam9g45_reset.S
  42. 1 1
      arch/arm/mach-at91/at91x40_time.c
  43. 1 1
      arch/arm/mach-davinci/board-dm365-evm.c
  44. 2 2
      arch/arm/mach-davinci/include/mach/serial.h
  45. 7 0
      arch/arm/mach-integrator/pci_v3.h
  46. 7 1
      arch/arm/mach-mvebu/coherency.c
  47. 1 0
      arch/arm/mach-mvebu/pmsu.c
  48. 1 0
      arch/arm/mach-mvebu/system-controller.c
  49. 18 0
      arch/arm/mach-omap2/board-generic.c
  50. 9 0
      arch/arm/mach-omap2/board-rx51-peripherals.c
  51. 11 1
      arch/arm/mach-omap2/gpmc-onenand.c
  52. 1 3
      arch/arm/mach-omap2/mux.h
  53. 2 2
      arch/arm/mach-omap2/timer.c
  54. 2 2
      arch/arm/mach-shmobile/board-armadillo800eva.c
  55. 26 1
      arch/arm/mach-shmobile/board-lager.c
  56. 10 1
      arch/arm/mach-vexpress/tc2_pm.c
  57. 28 15
      arch/arm/mm/dma-mapping.c
  58. 0 3
      arch/arm/mm/init.c
  59. 0 7
      arch/arm64/Kconfig.debug
  60. 4 1
      arch/arm64/configs/defconfig
  61. 6 4
      arch/arm64/include/asm/uaccess.h
  62. 2 0
      arch/arm64/kernel/fpsimd.c
  63. 1 1
      arch/arm64/mm/tlb.S
  64. 1 1
      arch/mips/alchemy/board-mtx1.c
  65. 1 1
      arch/mips/include/asm/jump_label.h
  66. 1 1
      arch/mips/kernel/octeon_switch.S
  67. 1 1
      arch/mips/kernel/r2300_switch.S
  68. 1 1
      arch/mips/kernel/r4k_switch.S
  69. 2 0
      arch/mips/mm/c-r4k.c
  70. 2 0
      arch/parisc/configs/712_defconfig
  71. 2 0
      arch/parisc/configs/a500_defconfig
  72. 3 0
      arch/parisc/configs/b180_defconfig
  73. 3 0
      arch/parisc/configs/c3000_defconfig
  74. 2 0
      arch/parisc/configs/c8000_defconfig
  75. 2 0
      arch/parisc/configs/default_defconfig
  76. 1 1
      arch/parisc/include/asm/traps.h
  77. 1 7
      arch/parisc/kernel/smp.c
  78. 3 8
      arch/parisc/kernel/traps.c
  79. 14 1
      arch/parisc/lib/memcpy.c
  80. 10 5
      arch/parisc/mm/fault.c
  81. 1 1
      arch/powerpc/include/asm/jump_label.h
  82. 1 1
      arch/powerpc/kernel/iommu.c
  83. 3 2
      arch/powerpc/kernel/irq.c
  84. 16 2
      arch/powerpc/kernel/sysfs.c
  85. 64 31
      arch/powerpc/kernel/tm.S
  86. 8 4
      arch/powerpc/kernel/vio.c
  87. 1 1
      arch/powerpc/kvm/book3s_hv_rmhandlers.S
  88. 17 1
      arch/powerpc/kvm/e500_mmu_host.c
  89. 42 16
      arch/powerpc/lib/checksum_64.S
  90. 4 0
      arch/powerpc/mm/init_64.c
  91. 9 0
      arch/powerpc/mm/mem.c
  92. 3 2
      arch/powerpc/perf/power8-pmu.c
  93. 1 1
      arch/s390/include/asm/jump_label.h
  94. 3 1
      arch/s390/include/asm/pgtable.h
  95. 14 14
      arch/s390/include/asm/timex.h
  96. 2 2
      arch/s390/kernel/compat_signal.c
  97. 20 22
      arch/s390/kernel/crash_dump.c
  98. 1 1
      arch/s390/kernel/debug.c
  99. 1 0
      arch/s390/kernel/entry.S
  100. 1 0
      arch/s390/kernel/entry64.S

+ 4 - 4
Documentation/ABI/stable/sysfs-bus-usb

@@ -37,8 +37,8 @@ Description:
 		that the USB device has been connected to the machine.  This
 		that the USB device has been connected to the machine.  This
 		file is read-only.
 		file is read-only.
 Users:
 Users:
-		PowerTOP <power@bughost.org>
-		http://www.lesswatts.org/projects/powertop/
+		PowerTOP <powertop@lists.01.org>
+		https://01.org/powertop/
 
 
 What:		/sys/bus/usb/device/.../power/active_duration
 What:		/sys/bus/usb/device/.../power/active_duration
 Date:		January 2008
 Date:		January 2008
@@ -57,8 +57,8 @@ Description:
 		will give an integer percentage.  Note that this does not
 		will give an integer percentage.  Note that this does not
 		account for counter wrap.
 		account for counter wrap.
 Users:
 Users:
-		PowerTOP <power@bughost.org>
-		http://www.lesswatts.org/projects/powertop/
+		PowerTOP <powertop@lists.01.org>
+		https://01.org/powertop/
 
 
 What:		/sys/bus/usb/devices/<busnum>-<port[.port]>...:<config num>-<interface num>/supports_autosuspend
 What:		/sys/bus/usb/devices/<busnum>-<port[.port]>...:<config num>-<interface num>/supports_autosuspend
 Date:		January 2008
 Date:		January 2008

+ 16 - 16
Documentation/ABI/testing/sysfs-devices-power

@@ -1,6 +1,6 @@
 What:		/sys/devices/.../power/
 What:		/sys/devices/.../power/
 Date:		January 2009
 Date:		January 2009
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/devices/.../power directory contains attributes
 		The /sys/devices/.../power directory contains attributes
 		allowing the user space to check and modify some power
 		allowing the user space to check and modify some power
@@ -8,7 +8,7 @@ Description:
 
 
 What:		/sys/devices/.../power/wakeup
 What:		/sys/devices/.../power/wakeup
 Date:		January 2009
 Date:		January 2009
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/devices/.../power/wakeup attribute allows the user
 		The /sys/devices/.../power/wakeup attribute allows the user
 		space to check if the device is enabled to wake up the system
 		space to check if the device is enabled to wake up the system
@@ -34,7 +34,7 @@ Description:
 
 
 What:		/sys/devices/.../power/control
 What:		/sys/devices/.../power/control
 Date:		January 2009
 Date:		January 2009
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/devices/.../power/control attribute allows the user
 		The /sys/devices/.../power/control attribute allows the user
 		space to control the run-time power management of the device.
 		space to control the run-time power management of the device.
@@ -53,7 +53,7 @@ Description:
 
 
 What:		/sys/devices/.../power/async
 What:		/sys/devices/.../power/async
 Date:		January 2009
 Date:		January 2009
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/devices/.../async attribute allows the user space to
 		The /sys/devices/.../async attribute allows the user space to
 		enable or diasble the device's suspend and resume callbacks to
 		enable or diasble the device's suspend and resume callbacks to
@@ -79,7 +79,7 @@ Description:
 
 
 What:		/sys/devices/.../power/wakeup_count
 What:		/sys/devices/.../power/wakeup_count
 Date:		September 2010
 Date:		September 2010
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/devices/.../wakeup_count attribute contains the number
 		The /sys/devices/.../wakeup_count attribute contains the number
 		of signaled wakeup events associated with the device.  This
 		of signaled wakeup events associated with the device.  This
@@ -88,7 +88,7 @@ Description:
 
 
 What:		/sys/devices/.../power/wakeup_active_count
 What:		/sys/devices/.../power/wakeup_active_count
 Date:		September 2010
 Date:		September 2010
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/devices/.../wakeup_active_count attribute contains the
 		The /sys/devices/.../wakeup_active_count attribute contains the
 		number of times the processing of wakeup events associated with
 		number of times the processing of wakeup events associated with
@@ -98,7 +98,7 @@ Description:
 
 
 What:		/sys/devices/.../power/wakeup_abort_count
 What:		/sys/devices/.../power/wakeup_abort_count
 Date:		February 2012
 Date:		February 2012
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/devices/.../wakeup_abort_count attribute contains the
 		The /sys/devices/.../wakeup_abort_count attribute contains the
 		number of times the processing of a wakeup event associated with
 		number of times the processing of a wakeup event associated with
@@ -109,7 +109,7 @@ Description:
 
 
 What:		/sys/devices/.../power/wakeup_expire_count
 What:		/sys/devices/.../power/wakeup_expire_count
 Date:		February 2012
 Date:		February 2012
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/devices/.../wakeup_expire_count attribute contains the
 		The /sys/devices/.../wakeup_expire_count attribute contains the
 		number of times a wakeup event associated with the device has
 		number of times a wakeup event associated with the device has
@@ -119,7 +119,7 @@ Description:
 
 
 What:		/sys/devices/.../power/wakeup_active
 What:		/sys/devices/.../power/wakeup_active
 Date:		September 2010
 Date:		September 2010
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/devices/.../wakeup_active attribute contains either 1,
 		The /sys/devices/.../wakeup_active attribute contains either 1,
 		or 0, depending on whether or not a wakeup event associated with
 		or 0, depending on whether or not a wakeup event associated with
@@ -129,7 +129,7 @@ Description:
 
 
 What:		/sys/devices/.../power/wakeup_total_time_ms
 What:		/sys/devices/.../power/wakeup_total_time_ms
 Date:		September 2010
 Date:		September 2010
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/devices/.../wakeup_total_time_ms attribute contains
 		The /sys/devices/.../wakeup_total_time_ms attribute contains
 		the total time of processing wakeup events associated with the
 		the total time of processing wakeup events associated with the
@@ -139,7 +139,7 @@ Description:
 
 
 What:		/sys/devices/.../power/wakeup_max_time_ms
 What:		/sys/devices/.../power/wakeup_max_time_ms
 Date:		September 2010
 Date:		September 2010
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/devices/.../wakeup_max_time_ms attribute contains
 		The /sys/devices/.../wakeup_max_time_ms attribute contains
 		the maximum time of processing a single wakeup event associated
 		the maximum time of processing a single wakeup event associated
@@ -149,7 +149,7 @@ Description:
 
 
 What:		/sys/devices/.../power/wakeup_last_time_ms
 What:		/sys/devices/.../power/wakeup_last_time_ms
 Date:		September 2010
 Date:		September 2010
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/devices/.../wakeup_last_time_ms attribute contains
 		The /sys/devices/.../wakeup_last_time_ms attribute contains
 		the value of the monotonic clock corresponding to the time of
 		the value of the monotonic clock corresponding to the time of
@@ -160,7 +160,7 @@ Description:
 
 
 What:		/sys/devices/.../power/wakeup_prevent_sleep_time_ms
 What:		/sys/devices/.../power/wakeup_prevent_sleep_time_ms
 Date:		February 2012
 Date:		February 2012
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/devices/.../wakeup_prevent_sleep_time_ms attribute
 		The /sys/devices/.../wakeup_prevent_sleep_time_ms attribute
 		contains the total time the device has been preventing
 		contains the total time the device has been preventing
@@ -189,7 +189,7 @@ Description:
 
 
 What:		/sys/devices/.../power/pm_qos_latency_us
 What:		/sys/devices/.../power/pm_qos_latency_us
 Date:		March 2012
 Date:		March 2012
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/devices/.../power/pm_qos_resume_latency_us attribute
 		The /sys/devices/.../power/pm_qos_resume_latency_us attribute
 		contains the PM QoS resume latency limit for the given device,
 		contains the PM QoS resume latency limit for the given device,
@@ -207,7 +207,7 @@ Description:
 
 
 What:		/sys/devices/.../power/pm_qos_no_power_off
 What:		/sys/devices/.../power/pm_qos_no_power_off
 Date:		September 2012
 Date:		September 2012
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/devices/.../power/pm_qos_no_power_off attribute
 		The /sys/devices/.../power/pm_qos_no_power_off attribute
 		is used for manipulating the PM QoS "no power off" flag.  If
 		is used for manipulating the PM QoS "no power off" flag.  If
@@ -222,7 +222,7 @@ Description:
 
 
 What:		/sys/devices/.../power/pm_qos_remote_wakeup
 What:		/sys/devices/.../power/pm_qos_remote_wakeup
 Date:		September 2012
 Date:		September 2012
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/devices/.../power/pm_qos_remote_wakeup attribute
 		The /sys/devices/.../power/pm_qos_remote_wakeup attribute
 		is used for manipulating the PM QoS "remote wakeup required"
 		is used for manipulating the PM QoS "remote wakeup required"

+ 11 - 11
Documentation/ABI/testing/sysfs-power

@@ -1,6 +1,6 @@
 What:		/sys/power/
 What:		/sys/power/
 Date:		August 2006
 Date:		August 2006
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/power directory will contain files that will
 		The /sys/power directory will contain files that will
 		provide a unified interface to the power management
 		provide a unified interface to the power management
@@ -8,7 +8,7 @@ Description:
 
 
 What:		/sys/power/state
 What:		/sys/power/state
 Date:		August 2006
 Date:		August 2006
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/power/state file controls the system power state.
 		The /sys/power/state file controls the system power state.
 		Reading from this file returns what states are supported,
 		Reading from this file returns what states are supported,
@@ -22,7 +22,7 @@ Description:
 
 
 What:		/sys/power/disk
 What:		/sys/power/disk
 Date:		September 2006
 Date:		September 2006
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/power/disk file controls the operating mode of the
 		The /sys/power/disk file controls the operating mode of the
 		suspend-to-disk mechanism.  Reading from this file returns
 		suspend-to-disk mechanism.  Reading from this file returns
@@ -67,7 +67,7 @@ Description:
 
 
 What:		/sys/power/image_size
 What:		/sys/power/image_size
 Date:		August 2006
 Date:		August 2006
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/power/image_size file controls the size of the image
 		The /sys/power/image_size file controls the size of the image
 		created by the suspend-to-disk mechanism.  It can be written a
 		created by the suspend-to-disk mechanism.  It can be written a
@@ -84,7 +84,7 @@ Description:
 
 
 What:		/sys/power/pm_trace
 What:		/sys/power/pm_trace
 Date:		August 2006
 Date:		August 2006
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/power/pm_trace file controls the code which saves the
 		The /sys/power/pm_trace file controls the code which saves the
 		last PM event point in the RTC across reboots, so that you can
 		last PM event point in the RTC across reboots, so that you can
@@ -133,7 +133,7 @@ Description:
 
 
 What:		/sys/power/pm_async
 What:		/sys/power/pm_async
 Date:		January 2009
 Date:		January 2009
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/power/pm_async file controls the switch allowing the
 		The /sys/power/pm_async file controls the switch allowing the
 		user space to enable or disable asynchronous suspend and resume
 		user space to enable or disable asynchronous suspend and resume
@@ -146,7 +146,7 @@ Description:
 
 
 What:		/sys/power/wakeup_count
 What:		/sys/power/wakeup_count
 Date:		July 2010
 Date:		July 2010
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/power/wakeup_count file allows user space to put the
 		The /sys/power/wakeup_count file allows user space to put the
 		system into a sleep state while taking into account the
 		system into a sleep state while taking into account the
@@ -161,7 +161,7 @@ Description:
 
 
 What:		/sys/power/reserved_size
 What:		/sys/power/reserved_size
 Date:		May 2011
 Date:		May 2011
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/power/reserved_size file allows user space to control
 		The /sys/power/reserved_size file allows user space to control
 		the amount of memory reserved for allocations made by device
 		the amount of memory reserved for allocations made by device
@@ -175,7 +175,7 @@ Description:
 
 
 What:		/sys/power/autosleep
 What:		/sys/power/autosleep
 Date:		April 2012
 Date:		April 2012
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/power/autosleep file can be written one of the strings
 		The /sys/power/autosleep file can be written one of the strings
 		returned by reads from /sys/power/state.  If that happens, a
 		returned by reads from /sys/power/state.  If that happens, a
@@ -192,7 +192,7 @@ Description:
 
 
 What:		/sys/power/wake_lock
 What:		/sys/power/wake_lock
 Date:		February 2012
 Date:		February 2012
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/power/wake_lock file allows user space to create
 		The /sys/power/wake_lock file allows user space to create
 		wakeup source objects and activate them on demand (if one of
 		wakeup source objects and activate them on demand (if one of
@@ -219,7 +219,7 @@ Description:
 
 
 What:		/sys/power/wake_unlock
 What:		/sys/power/wake_unlock
 Date:		February 2012
 Date:		February 2012
-Contact:	Rafael J. Wysocki <rjw@sisk.pl>
+Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
 Description:
 Description:
 		The /sys/power/wake_unlock file allows user space to deactivate
 		The /sys/power/wake_unlock file allows user space to deactivate
 		wakeup sources created with the help of /sys/power/wake_lock.
 		wakeup sources created with the help of /sys/power/wake_lock.

+ 1 - 1
Documentation/acpi/dsdt-override.txt

@@ -4,4 +4,4 @@ CONFIG_ACPI_CUSTOM_DSDT builds the image into the kernel.
 
 
 When to use this method is described in detail on the
 When to use this method is described in detail on the
 Linux/ACPI home page:
 Linux/ACPI home page:
-http://www.lesswatts.org/projects/acpi/overridingDSDT.php
+https://01.org/linux-acpi/documentation/overriding-dsdt

+ 0 - 168
Documentation/devicetree/bindings/memory.txt

@@ -1,168 +0,0 @@
-*** Memory binding ***
-
-The /memory node provides basic information about the address and size
-of the physical memory. This node is usually filled or updated by the
-bootloader, depending on the actual memory configuration of the given
-hardware.
-
-The memory layout is described by the following node:
-
-/ {
-	#address-cells = <(n)>;
-	#size-cells = <(m)>;
-	memory {
-		device_type = "memory";
-		reg =  <(baseaddr1) (size1)
-			(baseaddr2) (size2)
-			...
-			(baseaddrN) (sizeN)>;
-	};
-	...
-};
-
-A memory node follows the typical device tree rules for "reg" property:
-n:		number of cells used to store base address value
-m:		number of cells used to store size value
-baseaddrX:	defines a base address of the defined memory bank
-sizeX:		the size of the defined memory bank
-
-
-More than one memory bank can be defined.
-
-
-*** Reserved memory regions ***
-
-In /memory/reserved-memory node one can create child nodes describing
-particular reserved (excluded from normal use) memory regions. Such
-memory regions are usually designed for the special usage by various
-device drivers. A good example are contiguous memory allocations or
-memory sharing with other operating system on the same hardware board.
-Those special memory regions might depend on the board configuration and
-devices used on the target system.
-
-Parameters for each memory region can be encoded into the device tree
-with the following convention:
-
-[(label):] (name) {
-	compatible = "linux,contiguous-memory-region", "reserved-memory-region";
-	reg = <(address) (size)>;
-	(linux,default-contiguous-region);
-};
-
-compatible:	one or more of:
-	- "linux,contiguous-memory-region" - enables binding of this
-	  region to Contiguous Memory Allocator (special region for
-	  contiguous memory allocations, shared with movable system
-	  memory, Linux kernel-specific).
-	- "reserved-memory-region" - compatibility is defined, given
-	  region is assigned for exclusive usage for by the respective
-	  devices.
-
-reg:	standard property defining the base address and size of
-	the memory region
-
-linux,default-contiguous-region: property indicating that the region
-	is the default region for all contiguous memory
-	allocations, Linux specific (optional)
-
-It is optional to specify the base address, so if one wants to use
-autoconfiguration of the base address, '0' can be specified as a base
-address in the 'reg' property.
-
-The /memory/reserved-memory node must contain the same #address-cells
-and #size-cells value as the root node.
-
-
-*** Device node's properties ***
-
-Once regions in the /memory/reserved-memory node have been defined, they
-may be referenced by other device nodes. Bindings that wish to reference
-memory regions should explicitly document their use of the following
-property:
-
-memory-region = <&phandle_to_defined_region>;
-
-This property indicates that the device driver should use the memory
-region pointed by the given phandle.
-
-
-*** Example ***
-
-This example defines a memory consisting of 4 memory banks. 3 contiguous
-regions are defined for Linux kernel, one default of all device drivers
-(named contig_mem, placed at 0x72000000, 64MiB), one dedicated to the
-framebuffer device (labelled display_mem, placed at 0x78000000, 8MiB)
-and one for multimedia processing (labelled multimedia_mem, placed at
-0x77000000, 64MiB). 'display_mem' region is then assigned to fb@12300000
-device for DMA memory allocations (Linux kernel drivers will use CMA is
-available or dma-exclusive usage otherwise). 'multimedia_mem' is
-assigned to scaler@12500000 and codec@12600000 devices for contiguous
-memory allocations when CMA driver is enabled.
-
-The reason for creating a separate region for framebuffer device is to
-match the framebuffer base address to the one configured by bootloader,
-so once Linux kernel drivers starts no glitches on the displayed boot
-logo appears. Scaller and codec drivers should share the memory
-allocations.
-
-/ {
-	#address-cells = <1>;
-	#size-cells = <1>;
-
-	/* ... */
-
-	memory {
-		reg =  <0x40000000 0x10000000
-			0x50000000 0x10000000
-			0x60000000 0x10000000
-			0x70000000 0x10000000>;
-
-		reserved-memory {
-			#address-cells = <1>;
-			#size-cells = <1>;
-
-			/*
-			 * global autoconfigured region for contiguous allocations
-			 * (used only with Contiguous Memory Allocator)
-			 */
-			contig_region@0 {
-				compatible = "linux,contiguous-memory-region";
-				reg = <0x0 0x4000000>;
-				linux,default-contiguous-region;
-			};
-
-			/*
-			 * special region for framebuffer
-			 */
-			display_region: region@78000000 {
-				compatible = "linux,contiguous-memory-region", "reserved-memory-region";
-				reg = <0x78000000 0x800000>;
-			};
-
-			/*
-			 * special region for multimedia processing devices
-			 */
-			multimedia_region: region@77000000 {
-				compatible = "linux,contiguous-memory-region";
-				reg = <0x77000000 0x4000000>;
-			};
-		};
-	};
-
-	/* ... */
-
-	fb0: fb@12300000 {
-		status = "okay";
-		memory-region = <&display_region>;
-	};
-
-	scaler: scaler@12500000 {
-		status = "okay";
-		memory-region = <&multimedia_region>;
-	};
-
-	codec: codec@12600000 {
-		status = "okay";
-		memory-region = <&multimedia_region>;
-	};
-};

+ 10 - 7
Documentation/devicetree/bindings/mmc/tmio_mmc.txt

@@ -9,12 +9,15 @@ compulsory and any optional properties, common to all SD/MMC drivers, as
 described in mmc.txt, can be used. Additionally the following tmio_mmc-specific
 described in mmc.txt, can be used. Additionally the following tmio_mmc-specific
 optional bindings can be used.
 optional bindings can be used.
 
 
+Required properties:
+- compatible:	"renesas,sdhi-shmobile" - a generic sh-mobile SDHI unit
+		"renesas,sdhi-sh7372" - SDHI IP on SH7372 SoC
+		"renesas,sdhi-sh73a0" - SDHI IP on SH73A0 SoC
+		"renesas,sdhi-r8a73a4" - SDHI IP on R8A73A4 SoC
+		"renesas,sdhi-r8a7740" - SDHI IP on R8A7740 SoC
+		"renesas,sdhi-r8a7778" - SDHI IP on R8A7778 SoC
+		"renesas,sdhi-r8a7779" - SDHI IP on R8A7779 SoC
+		"renesas,sdhi-r8a7790" - SDHI IP on R8A7790 SoC
+
 Optional properties:
 Optional properties:
 - toshiba,mmc-wrprotect-disable: write-protect detection is unavailable
 - toshiba,mmc-wrprotect-disable: write-protect detection is unavailable
-
-When used with Renesas SDHI hardware, the following compatibility strings
-configure various model-specific properties:
-
-"renesas,sh7372-sdhi":	(default) compatible with SH7372
-"renesas,r8a7740-sdhi":	compatible with R8A7740: certain MMC/SD commands have to
-			wait for the interface to become idle.

+ 1 - 0
Documentation/sound/alsa/HD-Audio-Models.txt

@@ -28,6 +28,7 @@ ALC269/270/275/276/28x/29x
   alc269-dmic		Enable ALC269(VA) digital mic workaround
   alc269-dmic		Enable ALC269(VA) digital mic workaround
   alc271-dmic		Enable ALC271X digital mic workaround
   alc271-dmic		Enable ALC271X digital mic workaround
   inv-dmic		Inverted internal mic workaround
   inv-dmic		Inverted internal mic workaround
+  headset-mic		Indicates a combined headset (headphone+mic) jack
   lenovo-dock   	Enables docking station I/O for some Lenovos
   lenovo-dock   	Enables docking station I/O for some Lenovos
   dell-headset-multi	Headset jack, which can also be used as mic-in
   dell-headset-multi	Headset jack, which can also be used as mic-in
   dell-headset-dock	Headset jack (without mic-in), and also dock I/O
   dell-headset-dock	Headset jack (without mic-in), and also dock I/O

+ 40 - 14
MAINTAINERS

@@ -237,11 +237,11 @@ F:	drivers/platform/x86/acer-wmi.c
 
 
 ACPI
 ACPI
 M:	Len Brown <lenb@kernel.org>
 M:	Len Brown <lenb@kernel.org>
-M:	Rafael J. Wysocki <rjw@sisk.pl>
+M:	Rafael J. Wysocki <rjw@rjwysocki.net>
 L:	linux-acpi@vger.kernel.org
 L:	linux-acpi@vger.kernel.org
-W:	http://www.lesswatts.org/projects/acpi/
-Q:	http://patchwork.kernel.org/project/linux-acpi/list/
-T:	git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux
+W:	https://01.org/linux-acpi
+Q:	https://patchwork.kernel.org/project/linux-acpi/list/
+T:	git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
 S:	Supported
 S:	Supported
 F:	drivers/acpi/
 F:	drivers/acpi/
 F:	drivers/pnp/pnpacpi/
 F:	drivers/pnp/pnpacpi/
@@ -256,21 +256,21 @@ F:	drivers/pci/*/*/*acpi*
 ACPI FAN DRIVER
 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:	http://www.lesswatts.org/projects/acpi/
+W:	https://01.org/linux-acpi
 S:	Supported
 S:	Supported
 F:	drivers/acpi/fan.c
 F:	drivers/acpi/fan.c
 
 
 ACPI THERMAL DRIVER
 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:	http://www.lesswatts.org/projects/acpi/
+W:	https://01.org/linux-acpi
 S:	Supported
 S:	Supported
 F:	drivers/acpi/*thermal*
 F:	drivers/acpi/*thermal*
 
 
 ACPI VIDEO DRIVER
 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:	http://www.lesswatts.org/projects/acpi/
+W:	https://01.org/linux-acpi
 S:	Supported
 S:	Supported
 F:	drivers/acpi/video.c
 F:	drivers/acpi/video.c
 
 
@@ -824,15 +824,21 @@ S:	Maintained
 F:	arch/arm/mach-gemini/
 F:	arch/arm/mach-gemini/
 
 
 ARM/CSR SIRFPRIMA2 MACHINE SUPPORT
 ARM/CSR SIRFPRIMA2 MACHINE SUPPORT
-M:	Barry Song <baohua.song@csr.com>
+M:	Barry Song <baohua@kernel.org>
 L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/baohua/linux.git
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/baohua/linux.git
 S:	Maintained
 S:	Maintained
 F:	arch/arm/mach-prima2/
 F:	arch/arm/mach-prima2/
+F:	drivers/clk/clk-prima2.c
+F:	drivers/clocksource/timer-prima2.c
+F:	drivers/clocksource/timer-marco.c
 F:	drivers/dma/sirf-dma.c
 F:	drivers/dma/sirf-dma.c
 F:	drivers/i2c/busses/i2c-sirf.c
 F:	drivers/i2c/busses/i2c-sirf.c
+F:	drivers/input/misc/sirfsoc-onkey.c
+F:	drivers/irqchip/irq-sirfsoc.c
 F:	drivers/mmc/host/sdhci-sirf.c
 F:	drivers/mmc/host/sdhci-sirf.c
 F:	drivers/pinctrl/sirf/
 F:	drivers/pinctrl/sirf/
+F:	drivers/rtc/rtc-sirfsoc.c
 F:	drivers/spi/spi-sirf.c
 F:	drivers/spi/spi-sirf.c
 
 
 ARM/EBSA110 MACHINE SUPPORT
 ARM/EBSA110 MACHINE SUPPORT
@@ -2295,7 +2301,7 @@ S:	Maintained
 F:	drivers/net/ethernet/ti/cpmac.c
 F:	drivers/net/ethernet/ti/cpmac.c
 
 
 CPU FREQUENCY DRIVERS
 CPU FREQUENCY DRIVERS
-M:	Rafael J. Wysocki <rjw@sisk.pl>
+M:	Rafael J. Wysocki <rjw@rjwysocki.net>
 M:	Viresh Kumar <viresh.kumar@linaro.org>
 M:	Viresh Kumar <viresh.kumar@linaro.org>
 L:	cpufreq@vger.kernel.org
 L:	cpufreq@vger.kernel.org
 L:	linux-pm@vger.kernel.org
 L:	linux-pm@vger.kernel.org
@@ -2326,7 +2332,7 @@ S:      Maintained
 F:      drivers/cpuidle/cpuidle-big_little.c
 F:      drivers/cpuidle/cpuidle-big_little.c
 
 
 CPUIDLE DRIVERS
 CPUIDLE DRIVERS
-M:	Rafael J. Wysocki <rjw@sisk.pl>
+M:	Rafael J. Wysocki <rjw@rjwysocki.net>
 M:	Daniel Lezcano <daniel.lezcano@linaro.org>
 M:	Daniel Lezcano <daniel.lezcano@linaro.org>
 L:	linux-pm@vger.kernel.org
 L:	linux-pm@vger.kernel.org
 S:	Maintained
 S:	Maintained
@@ -3548,7 +3554,7 @@ F:	fs/freevxfs/
 
 
 FREEZER
 FREEZER
 M:	Pavel Machek <pavel@ucw.cz>
 M:	Pavel Machek <pavel@ucw.cz>
-M:	"Rafael J. Wysocki" <rjw@sisk.pl>
+M:	"Rafael J. Wysocki" <rjw@rjwysocki.net>
 L:	linux-pm@vger.kernel.org
 L:	linux-pm@vger.kernel.org
 S:	Supported
 S:	Supported
 F:	Documentation/power/freezing-of-tasks.txt
 F:	Documentation/power/freezing-of-tasks.txt
@@ -3619,6 +3625,12 @@ L:	linux-scsi@vger.kernel.org
 S:	Odd Fixes (e.g., new signatures)
 S:	Odd Fixes (e.g., new signatures)
 F:	drivers/scsi/fdomain.*
 F:	drivers/scsi/fdomain.*
 
 
+GCOV BASED KERNEL PROFILING
+M:	Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
+S:	Maintained
+F:	kernel/gcov/
+F:	Documentation/gcov.txt
+
 GDT SCSI DISK ARRAY CONTROLLER DRIVER
 GDT SCSI DISK ARRAY CONTROLLER DRIVER
 M:	Achim Leubner <achim_leubner@adaptec.com>
 M:	Achim Leubner <achim_leubner@adaptec.com>
 L:	linux-scsi@vger.kernel.org
 L:	linux-scsi@vger.kernel.org
@@ -3884,7 +3896,7 @@ F:	drivers/video/hgafb.c
 
 
 HIBERNATION (aka Software Suspend, aka swsusp)
 HIBERNATION (aka Software Suspend, aka swsusp)
 M:	Pavel Machek <pavel@ucw.cz>
 M:	Pavel Machek <pavel@ucw.cz>
-M:	"Rafael J. Wysocki" <rjw@sisk.pl>
+M:	"Rafael J. Wysocki" <rjw@rjwysocki.net>
 L:	linux-pm@vger.kernel.org
 L:	linux-pm@vger.kernel.org
 S:	Supported
 S:	Supported
 F:	arch/x86/power/
 F:	arch/x86/power/
@@ -4334,7 +4346,7 @@ F:	drivers/video/i810/
 INTEL MENLOW THERMAL DRIVER
 INTEL MENLOW THERMAL DRIVER
 M:	Sujith Thomas <sujith.thomas@intel.com>
 M:	Sujith Thomas <sujith.thomas@intel.com>
 L:	platform-driver-x86@vger.kernel.org
 L:	platform-driver-x86@vger.kernel.org
-W:	http://www.lesswatts.org/projects/acpi/
+W:	https://01.org/linux-acpi
 S:	Supported
 S:	Supported
 F:	drivers/platform/x86/intel_menlow.c
 F:	drivers/platform/x86/intel_menlow.c
 
 
@@ -4471,6 +4483,13 @@ L:	linux-serial@vger.kernel.org
 S:	Maintained
 S:	Maintained
 F:	drivers/tty/serial/ioc3_serial.c
 F:	drivers/tty/serial/ioc3_serial.c
 
 
+IOMMU DRIVERS
+M:	Joerg Roedel <joro@8bytes.org>
+L:	iommu@lists.linux-foundation.org
+T:	git git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git
+S:	Maintained
+F:	drivers/iommu/
+
 IP MASQUERADING
 IP MASQUERADING
 M:	Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar>
 M:	Juanjo Ciarlante <jjciarla@raiz.uncu.edu.ar>
 S:	Maintained
 S:	Maintained
@@ -7812,6 +7831,13 @@ F:	Documentation/sound/alsa/soc/
 F:	sound/soc/
 F:	sound/soc/
 F:	include/sound/soc*
 F:	include/sound/soc*
 
 
+SOUND - DMAENGINE HELPERS
+M:	Lars-Peter Clausen <lars@metafoo.de>
+S:	Supported
+F:	include/sound/dmaengine_pcm.h
+F:	sound/core/pcm_dmaengine.c
+F:	sound/soc/soc-generic-dmaengine-pcm.c
+
 SPARC + UltraSPARC (sparc/sparc64)
 SPARC + UltraSPARC (sparc/sparc64)
 M:	"David S. Miller" <davem@davemloft.net>
 M:	"David S. Miller" <davem@davemloft.net>
 L:	sparclinux@vger.kernel.org
 L:	sparclinux@vger.kernel.org
@@ -8091,7 +8117,7 @@ F:	drivers/sh/
 SUSPEND TO RAM
 SUSPEND TO RAM
 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>
-M:	"Rafael J. Wysocki" <rjw@sisk.pl>
+M:	"Rafael J. Wysocki" <rjw@rjwysocki.net>
 L:	linux-pm@vger.kernel.org
 L:	linux-pm@vger.kernel.org
 S:	Supported
 S:	Supported
 F:	Documentation/power/
 F:	Documentation/power/

+ 1 - 1
Makefile

@@ -1,7 +1,7 @@
 VERSION = 3
 VERSION = 3
 PATCHLEVEL = 12
 PATCHLEVEL = 12
 SUBLEVEL = 0
 SUBLEVEL = 0
-EXTRAVERSION = -rc3
+EXTRAVERSION = -rc6
 NAME = One Giant Leap for Frogkind
 NAME = One Giant Leap for Frogkind
 
 
 # *DOCUMENTATION*
 # *DOCUMENTATION*

+ 1 - 1
arch/arc/kernel/ptrace.c

@@ -102,7 +102,7 @@ static int genregs_set(struct task_struct *target,
 	REG_IGNORE_ONE(pad2);
 	REG_IGNORE_ONE(pad2);
 	REG_IN_CHUNK(callee, efa, cregs);	/* callee_regs[r25..r13] */
 	REG_IN_CHUNK(callee, efa, cregs);	/* callee_regs[r25..r13] */
 	REG_IGNORE_ONE(efa);			/* efa update invalid */
 	REG_IGNORE_ONE(efa);			/* efa update invalid */
-	REG_IN_ONE(stop_pc, &ptregs->ret);	/* stop_pc: PC update */
+	REG_IGNORE_ONE(stop_pc);			/* PC updated via @ret */
 
 
 	return ret;
 	return ret;
 }
 }

+ 13 - 12
arch/arc/kernel/signal.c

@@ -101,7 +101,6 @@ SYSCALL_DEFINE0(rt_sigreturn)
 {
 {
 	struct rt_sigframe __user *sf;
 	struct rt_sigframe __user *sf;
 	unsigned int magic;
 	unsigned int magic;
-	int err;
 	struct pt_regs *regs = current_pt_regs();
 	struct pt_regs *regs = current_pt_regs();
 
 
 	/* Always make any pending restarted system calls return -EINTR */
 	/* Always make any pending restarted system calls return -EINTR */
@@ -119,15 +118,16 @@ SYSCALL_DEFINE0(rt_sigreturn)
 	if (!access_ok(VERIFY_READ, sf, sizeof(*sf)))
 	if (!access_ok(VERIFY_READ, sf, sizeof(*sf)))
 		goto badframe;
 		goto badframe;
 
 
-	err = restore_usr_regs(regs, sf);
-	err |= __get_user(magic, &sf->sigret_magic);
-	if (err)
+	if (__get_user(magic, &sf->sigret_magic))
 		goto badframe;
 		goto badframe;
 
 
 	if (unlikely(is_do_ss_needed(magic)))
 	if (unlikely(is_do_ss_needed(magic)))
 		if (restore_altstack(&sf->uc.uc_stack))
 		if (restore_altstack(&sf->uc.uc_stack))
 			goto badframe;
 			goto badframe;
 
 
+	if (restore_usr_regs(regs, sf))
+		goto badframe;
+
 	/* Don't restart from sigreturn */
 	/* Don't restart from sigreturn */
 	syscall_wont_restart(regs);
 	syscall_wont_restart(regs);
 
 
@@ -190,6 +190,15 @@ setup_rt_frame(int signo, struct k_sigaction *ka, siginfo_t *info,
 	if (!sf)
 	if (!sf)
 		return 1;
 		return 1;
 
 
+	/*
+	 * w/o SA_SIGINFO, struct ucontext is partially populated (only
+	 * uc_mcontext/uc_sigmask) for kernel's normal user state preservation
+	 * during signal handler execution. This works for SA_SIGINFO as well
+	 * although the semantics are now overloaded (the same reg state can be
+	 * inspected by userland: but are they allowed to fiddle with it ?
+	 */
+	err |= stash_usr_regs(sf, regs, set);
+
 	/*
 	/*
 	 * SA_SIGINFO requires 3 args to signal handler:
 	 * SA_SIGINFO requires 3 args to signal handler:
 	 *  #1: sig-no (common to any handler)
 	 *  #1: sig-no (common to any handler)
@@ -213,14 +222,6 @@ setup_rt_frame(int signo, struct k_sigaction *ka, siginfo_t *info,
 		magic = MAGIC_SIGALTSTK;
 		magic = MAGIC_SIGALTSTK;
 	}
 	}
 
 
-	/*
-	 * w/o SA_SIGINFO, struct ucontext is partially populated (only
-	 * uc_mcontext/uc_sigmask) for kernel's normal user state preservation
-	 * during signal handler execution. This works for SA_SIGINFO as well
-	 * although the semantics are now overloaded (the same reg state can be
-	 * inspected by userland: but are they allowed to fiddle with it ?
-	 */
-	err |= stash_usr_regs(sf, regs, set);
 	err |= __put_user(magic, &sf->sigret_magic);
 	err |= __put_user(magic, &sf->sigret_magic);
 	if (err)
 	if (err)
 		return err;
 		return err;

+ 7 - 2
arch/arm/Makefile

@@ -296,10 +296,15 @@ archprepare:
 # Convert bzImage to zImage
 # Convert bzImage to zImage
 bzImage: zImage
 bzImage: zImage
 
 
-zImage Image xipImage bootpImage uImage: vmlinux
+BOOT_TARGETS	= zImage Image xipImage bootpImage uImage
+INSTALL_TARGETS	= zinstall uinstall install
+
+PHONY += bzImage $(BOOT_TARGETS) $(INSTALL_TARGETS)
+
+$(BOOT_TARGETS): vmlinux
 	$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
 	$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
 
 
-zinstall uinstall install: vmlinux
+$(INSTALL_TARGETS):
 	$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@
 	$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@
 
 
 %.dtb: | scripts
 %.dtb: | scripts

+ 8 - 8
arch/arm/boot/Makefile

@@ -95,24 +95,24 @@ initrd:
 	@test "$(INITRD)" != "" || \
 	@test "$(INITRD)" != "" || \
 	(echo You must specify INITRD; exit -1)
 	(echo You must specify INITRD; exit -1)
 
 
-install: $(obj)/Image
-	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
+install:
+	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
 	$(obj)/Image System.map "$(INSTALL_PATH)"
 	$(obj)/Image System.map "$(INSTALL_PATH)"
 
 
-zinstall: $(obj)/zImage
-	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
+zinstall:
+	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
 	$(obj)/zImage System.map "$(INSTALL_PATH)"
 	$(obj)/zImage System.map "$(INSTALL_PATH)"
 
 
-uinstall: $(obj)/uImage
-	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
+uinstall:
+	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
 	$(obj)/uImage System.map "$(INSTALL_PATH)"
 	$(obj)/uImage System.map "$(INSTALL_PATH)"
 
 
 zi:
 zi:
-	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
+	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
 	$(obj)/zImage System.map "$(INSTALL_PATH)"
 	$(obj)/zImage System.map "$(INSTALL_PATH)"
 
 
 i:
 i:
-	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \
+	$(CONFIG_SHELL) $(srctree)/$(src)/install.sh "$(KERNELRELEASE)" \
 	$(obj)/Image System.map "$(INSTALL_PATH)"
 	$(obj)/Image System.map "$(INSTALL_PATH)"
 
 
 subdir-	    := bootp compressed dts
 subdir-	    := bootp compressed dts

+ 2 - 0
arch/arm/boot/dts/Makefile

@@ -41,6 +41,8 @@ dtb-$(CONFIG_ARCH_AT91)	+= sama5d33ek.dtb
 dtb-$(CONFIG_ARCH_AT91)	+= sama5d34ek.dtb
 dtb-$(CONFIG_ARCH_AT91)	+= sama5d34ek.dtb
 dtb-$(CONFIG_ARCH_AT91)	+= sama5d35ek.dtb
 dtb-$(CONFIG_ARCH_AT91)	+= sama5d35ek.dtb
 
 
+dtb-$(CONFIG_ARCH_ATLAS6) += atlas6-evb.dtb
+
 dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb
 dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb
 dtb-$(CONFIG_ARCH_BCM) += bcm11351-brt.dtb \
 dtb-$(CONFIG_ARCH_BCM) += bcm11351-brt.dtb \
 	bcm28155-ap.dtb
 	bcm28155-ap.dtb

+ 32 - 17
arch/arm/boot/dts/armada-370-netgear-rn102.dts

@@ -27,6 +27,25 @@
 	};
 	};
 
 
 	soc {
 	soc {
+		ranges = <MBUS_ID(0xf0, 0x01) 0 0xd0000000 0x100000
+			  MBUS_ID(0x01, 0xe0) 0 0xfff00000 0x100000>;
+
+		pcie-controller {
+			status = "okay";
+
+			/* Connected to Marvell SATA controller */
+			pcie@1,0 {
+				/* Port 0, Lane 0 */
+				status = "okay";
+			};
+
+			/* Connected to FL1009 USB 3.0 controller */
+			pcie@2,0 {
+				/* Port 1, Lane 0 */
+				status = "okay";
+			};
+		};
+
 		internal-regs {
 		internal-regs {
 			serial@12000 {
 			serial@12000 {
 				clock-frequency = <200000000>;
 				clock-frequency = <200000000>;
@@ -57,6 +76,11 @@
 					marvell,pins = "mpp56";
 					marvell,pins = "mpp56";
 					marvell,function = "gpio";
 					marvell,function = "gpio";
 				};
 				};
+
+				poweroff: poweroff {
+					marvell,pins = "mpp8";
+					marvell,function = "gpio";
+				};
 			};
 			};
 
 
 			mdio {
 			mdio {
@@ -89,22 +113,6 @@
 					pwm_polarity = <0>;
 					pwm_polarity = <0>;
 				};
 				};
 			};
 			};
-
-			pcie-controller {
-				status = "okay";
-
-				/* Connected to Marvell SATA controller */
-				pcie@1,0 {
-					/* Port 0, Lane 0 */
-					status = "okay";
-				};
-
-				/* Connected to FL1009 USB 3.0 controller */
-				pcie@2,0 {
-					/* Port 1, Lane 0 */
-					status = "okay";
-				};
-			};
 		};
 		};
 	};
 	};
 
 
@@ -160,7 +168,7 @@
 		button@1 {
 		button@1 {
 			label = "Power Button";
 			label = "Power Button";
 			linux,code = <116>;     /* KEY_POWER */
 			linux,code = <116>;     /* KEY_POWER */
-			gpios = <&gpio1 30 1>;
+			gpios = <&gpio1 30 0>;
 		};
 		};
 
 
 		button@2 {
 		button@2 {
@@ -176,4 +184,11 @@
 		};
 		};
 	};
 	};
 
 
+	gpio_poweroff {
+		compatible = "gpio-poweroff";
+		pinctrl-0 = <&poweroff>;
+		pinctrl-names = "default";
+		gpios = <&gpio0 8 1>;
+	};
+
 };
 };

+ 11 - 0
arch/arm/boot/dts/armada-xp.dtsi

@@ -70,6 +70,8 @@
 
 
 			timer@20300 {
 			timer@20300 {
 				compatible = "marvell,armada-xp-timer";
 				compatible = "marvell,armada-xp-timer";
+				clocks = <&coreclk 2>, <&refclk>;
+				clock-names = "nbclk", "fixed";
 			};
 			};
 
 
 			coreclk: mvebu-sar@18230 {
 			coreclk: mvebu-sar@18230 {
@@ -169,4 +171,13 @@
 			};
 			};
 		};
 		};
 	};
 	};
+
+	clocks {
+		/* 25 MHz reference crystal */
+		refclk: oscillator {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <25000000>;
+		};
+	};
 };
 };

+ 4 - 2
arch/arm/boot/dts/at91sam9x5.dtsi

@@ -190,12 +190,12 @@
 							 AT91_PIOA 8 AT91_PERIPH_A AT91_PINCTRL_NONE>;	/* PA8 periph A */
 							 AT91_PIOA 8 AT91_PERIPH_A AT91_PINCTRL_NONE>;	/* PA8 periph A */
 					};
 					};
 
 
-					pinctrl_uart2_rts: uart2_rts-0 {
+					pinctrl_usart2_rts: usart2_rts-0 {
 						atmel,pins =
 						atmel,pins =
 							<AT91_PIOB 0 AT91_PERIPH_B AT91_PINCTRL_NONE>;	/* PB0 periph B */
 							<AT91_PIOB 0 AT91_PERIPH_B AT91_PINCTRL_NONE>;	/* PB0 periph B */
 					};
 					};
 
 
-					pinctrl_uart2_cts: uart2_cts-0 {
+					pinctrl_usart2_cts: usart2_cts-0 {
 						atmel,pins =
 						atmel,pins =
 							<AT91_PIOB 1 AT91_PERIPH_B AT91_PINCTRL_NONE>;	/* PB1 periph B */
 							<AT91_PIOB 1 AT91_PERIPH_B AT91_PINCTRL_NONE>;	/* PB1 periph B */
 					};
 					};
@@ -556,6 +556,7 @@
 				interrupts = <12 IRQ_TYPE_LEVEL_HIGH 0>;
 				interrupts = <12 IRQ_TYPE_LEVEL_HIGH 0>;
 				dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(0)>;
 				dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(0)>;
 				dma-names = "rxtx";
 				dma-names = "rxtx";
+				pinctrl-names = "default";
 				#address-cells = <1>;
 				#address-cells = <1>;
 				#size-cells = <0>;
 				#size-cells = <0>;
 				status = "disabled";
 				status = "disabled";
@@ -567,6 +568,7 @@
 				interrupts = <26 IRQ_TYPE_LEVEL_HIGH 0>;
 				interrupts = <26 IRQ_TYPE_LEVEL_HIGH 0>;
 				dmas = <&dma1 1 AT91_DMA_CFG_PER_ID(0)>;
 				dmas = <&dma1 1 AT91_DMA_CFG_PER_ID(0)>;
 				dma-names = "rxtx";
 				dma-names = "rxtx";
+				pinctrl-names = "default";
 				#address-cells = <1>;
 				#address-cells = <1>;
 				#size-cells = <0>;
 				#size-cells = <0>;
 				status = "disabled";
 				status = "disabled";

+ 12 - 0
arch/arm/boot/dts/atlas6.dtsi

@@ -181,6 +181,8 @@
 				interrupts = <17>;
 				interrupts = <17>;
 				fifosize = <128>;
 				fifosize = <128>;
 				clocks = <&clks 13>;
 				clocks = <&clks 13>;
+				sirf,uart-dma-rx-channel = <21>;
+				sirf,uart-dma-tx-channel = <2>;
 			};
 			};
 
 
 			uart1: uart@b0060000 {
 			uart1: uart@b0060000 {
@@ -199,6 +201,8 @@
 				interrupts = <19>;
 				interrupts = <19>;
 				fifosize = <128>;
 				fifosize = <128>;
 				clocks = <&clks 15>;
 				clocks = <&clks 15>;
+				sirf,uart-dma-rx-channel = <6>;
+				sirf,uart-dma-tx-channel = <7>;
 			};
 			};
 
 
 			usp0: usp@b0080000 {
 			usp0: usp@b0080000 {
@@ -206,7 +210,10 @@
 				compatible = "sirf,prima2-usp";
 				compatible = "sirf,prima2-usp";
 				reg = <0xb0080000 0x10000>;
 				reg = <0xb0080000 0x10000>;
 				interrupts = <20>;
 				interrupts = <20>;
+				fifosize = <128>;
 				clocks = <&clks 28>;
 				clocks = <&clks 28>;
+				sirf,usp-dma-rx-channel = <17>;
+				sirf,usp-dma-tx-channel = <18>;
 			};
 			};
 
 
 			usp1: usp@b0090000 {
 			usp1: usp@b0090000 {
@@ -214,7 +221,10 @@
 				compatible = "sirf,prima2-usp";
 				compatible = "sirf,prima2-usp";
 				reg = <0xb0090000 0x10000>;
 				reg = <0xb0090000 0x10000>;
 				interrupts = <21>;
 				interrupts = <21>;
+				fifosize = <128>;
 				clocks = <&clks 29>;
 				clocks = <&clks 29>;
+				sirf,usp-dma-rx-channel = <14>;
+				sirf,usp-dma-tx-channel = <15>;
 			};
 			};
 
 
 			dmac0: dma-controller@b00b0000 {
 			dmac0: dma-controller@b00b0000 {
@@ -237,6 +247,8 @@
 				compatible = "sirf,prima2-vip";
 				compatible = "sirf,prima2-vip";
 				reg = <0xb00C0000 0x10000>;
 				reg = <0xb00C0000 0x10000>;
 				clocks = <&clks 31>;
 				clocks = <&clks 31>;
+				interrupts = <14>;
+				sirf,vip-dma-rx-channel = <16>;
 			};
 			};
 
 
 			spi0: spi@b00d0000 {
 			spi0: spi@b00d0000 {

+ 5 - 0
arch/arm/boot/dts/exynos5250.dtsi

@@ -96,6 +96,11 @@
 			     <1 14 0xf08>,
 			     <1 14 0xf08>,
 			     <1 11 0xf08>,
 			     <1 11 0xf08>,
 			     <1 10 0xf08>;
 			     <1 10 0xf08>;
+		/* Unfortunately we need this since some versions of U-Boot
+		 * on Exynos don't set the CNTFRQ register, so we need the
+		 * value from DT.
+		 */
+		clock-frequency = <24000000>;
 	};
 	};
 
 
 	mct@101C0000 {
 	mct@101C0000 {

+ 2 - 1
arch/arm/boot/dts/kirkwood.dtsi

@@ -13,6 +13,7 @@
 		cpu@0 {
 		cpu@0 {
 			device_type = "cpu";
 			device_type = "cpu";
 			compatible = "marvell,feroceon";
 			compatible = "marvell,feroceon";
+			reg = <0>;
 			clocks = <&core_clk 1>, <&core_clk 3>, <&gate_clk 11>;
 			clocks = <&core_clk 1>, <&core_clk 3>, <&gate_clk 11>;
 			clock-names = "cpu_clk", "ddrclk", "powersave";
 			clock-names = "cpu_clk", "ddrclk", "powersave";
 		};
 		};
@@ -167,7 +168,7 @@
 		xor@60900 {
 		xor@60900 {
 			compatible = "marvell,orion-xor";
 			compatible = "marvell,orion-xor";
 			reg = <0x60900 0x100
 			reg = <0x60900 0x100
-			       0xd0B00 0x100>;
+			       0x60B00 0x100>;
 			status = "okay";
 			status = "okay";
 			clocks = <&gate_clk 16>;
 			clocks = <&gate_clk 16>;
 
 

+ 1 - 1
arch/arm/boot/dts/omap3-beagle-xm.dts

@@ -11,7 +11,7 @@
 
 
 / {
 / {
 	model = "TI OMAP3 BeagleBoard xM";
 	model = "TI OMAP3 BeagleBoard xM";
-	compatible = "ti,omap3-beagle-xm", "ti,omap3-beagle", "ti,omap3";
+	compatible = "ti,omap3-beagle-xm", "ti,omap36xx", "ti,omap3";
 
 
 	cpus {
 	cpus {
 		cpu@0 {
 		cpu@0 {

+ 2 - 2
arch/arm/boot/dts/omap3.dtsi

@@ -108,7 +108,7 @@
 			#address-cells = <1>;
 			#address-cells = <1>;
 			#size-cells = <0>;
 			#size-cells = <0>;
 			pinctrl-single,register-width = <16>;
 			pinctrl-single,register-width = <16>;
-			pinctrl-single,function-mask = <0x7f1f>;
+			pinctrl-single,function-mask = <0xff1f>;
 		};
 		};
 
 
 		omap3_pmx_wkup: pinmux@0x48002a00 {
 		omap3_pmx_wkup: pinmux@0x48002a00 {
@@ -117,7 +117,7 @@
 			#address-cells = <1>;
 			#address-cells = <1>;
 			#size-cells = <0>;
 			#size-cells = <0>;
 			pinctrl-single,register-width = <16>;
 			pinctrl-single,register-width = <16>;
-			pinctrl-single,function-mask = <0x7f1f>;
+			pinctrl-single,function-mask = <0xff1f>;
 		};
 		};
 
 
 		gpio1: gpio@48310000 {
 		gpio1: gpio@48310000 {

+ 23 - 4
arch/arm/boot/dts/prima2.dtsi

@@ -171,7 +171,8 @@
 			compatible = "simple-bus";
 			compatible = "simple-bus";
 			#address-cells = <1>;
 			#address-cells = <1>;
 			#size-cells = <1>;
 			#size-cells = <1>;
-			ranges = <0xb0000000 0xb0000000 0x180000>;
+			ranges = <0xb0000000 0xb0000000 0x180000>,
+			       <0x56000000 0x56000000 0x1b00000>;
 
 
 			timer@b0020000 {
 			timer@b0020000 {
 				compatible = "sirf,prima2-tick";
 				compatible = "sirf,prima2-tick";
@@ -196,25 +197,32 @@
 			uart0: uart@b0050000 {
 			uart0: uart@b0050000 {
 				cell-index = <0>;
 				cell-index = <0>;
 				compatible = "sirf,prima2-uart";
 				compatible = "sirf,prima2-uart";
-				reg = <0xb0050000 0x10000>;
+				reg = <0xb0050000 0x1000>;
 				interrupts = <17>;
 				interrupts = <17>;
+				fifosize = <128>;
 				clocks = <&clks 13>;
 				clocks = <&clks 13>;
+				sirf,uart-dma-rx-channel = <21>;
+				sirf,uart-dma-tx-channel = <2>;
 			};
 			};
 
 
 			uart1: uart@b0060000 {
 			uart1: uart@b0060000 {
 				cell-index = <1>;
 				cell-index = <1>;
 				compatible = "sirf,prima2-uart";
 				compatible = "sirf,prima2-uart";
-				reg = <0xb0060000 0x10000>;
+				reg = <0xb0060000 0x1000>;
 				interrupts = <18>;
 				interrupts = <18>;
+				fifosize = <32>;
 				clocks = <&clks 14>;
 				clocks = <&clks 14>;
 			};
 			};
 
 
 			uart2: uart@b0070000 {
 			uart2: uart@b0070000 {
 				cell-index = <2>;
 				cell-index = <2>;
 				compatible = "sirf,prima2-uart";
 				compatible = "sirf,prima2-uart";
-				reg = <0xb0070000 0x10000>;
+				reg = <0xb0070000 0x1000>;
 				interrupts = <19>;
 				interrupts = <19>;
+				fifosize = <128>;
 				clocks = <&clks 15>;
 				clocks = <&clks 15>;
+				sirf,uart-dma-rx-channel = <6>;
+				sirf,uart-dma-tx-channel = <7>;
 			};
 			};
 
 
 			usp0: usp@b0080000 {
 			usp0: usp@b0080000 {
@@ -222,7 +230,10 @@
 				compatible = "sirf,prima2-usp";
 				compatible = "sirf,prima2-usp";
 				reg = <0xb0080000 0x10000>;
 				reg = <0xb0080000 0x10000>;
 				interrupts = <20>;
 				interrupts = <20>;
+				fifosize = <128>;
 				clocks = <&clks 28>;
 				clocks = <&clks 28>;
+				sirf,usp-dma-rx-channel = <17>;
+				sirf,usp-dma-tx-channel = <18>;
 			};
 			};
 
 
 			usp1: usp@b0090000 {
 			usp1: usp@b0090000 {
@@ -230,7 +241,10 @@
 				compatible = "sirf,prima2-usp";
 				compatible = "sirf,prima2-usp";
 				reg = <0xb0090000 0x10000>;
 				reg = <0xb0090000 0x10000>;
 				interrupts = <21>;
 				interrupts = <21>;
+				fifosize = <128>;
 				clocks = <&clks 29>;
 				clocks = <&clks 29>;
+				sirf,usp-dma-rx-channel = <14>;
+				sirf,usp-dma-tx-channel = <15>;
 			};
 			};
 
 
 			usp2: usp@b00a0000 {
 			usp2: usp@b00a0000 {
@@ -238,7 +252,10 @@
 				compatible = "sirf,prima2-usp";
 				compatible = "sirf,prima2-usp";
 				reg = <0xb00a0000 0x10000>;
 				reg = <0xb00a0000 0x10000>;
 				interrupts = <22>;
 				interrupts = <22>;
+				fifosize = <128>;
 				clocks = <&clks 30>;
 				clocks = <&clks 30>;
+				sirf,usp-dma-rx-channel = <10>;
+				sirf,usp-dma-tx-channel = <11>;
 			};
 			};
 
 
 			dmac0: dma-controller@b00b0000 {
 			dmac0: dma-controller@b00b0000 {
@@ -261,6 +278,8 @@
 				compatible = "sirf,prima2-vip";
 				compatible = "sirf,prima2-vip";
 				reg = <0xb00C0000 0x10000>;
 				reg = <0xb00C0000 0x10000>;
 				clocks = <&clks 31>;
 				clocks = <&clks 31>;
+				interrupts = <14>;
+				sirf,vip-dma-rx-channel = <16>;
 			};
 			};
 
 
 			spi0: spi@b00d0000 {
 			spi0: spi@b00d0000 {

+ 3 - 3
arch/arm/boot/dts/r8a73a4.dtsi

@@ -193,7 +193,7 @@
 	};
 	};
 
 
 	sdhi0: sdhi@ee100000 {
 	sdhi0: sdhi@ee100000 {
-		compatible = "renesas,r8a73a4-sdhi";
+		compatible = "renesas,sdhi-r8a73a4";
 		reg = <0 0xee100000 0 0x100>;
 		reg = <0 0xee100000 0 0x100>;
 		interrupt-parent = <&gic>;
 		interrupt-parent = <&gic>;
 		interrupts = <0 165 4>;
 		interrupts = <0 165 4>;
@@ -202,7 +202,7 @@
 	};
 	};
 
 
 	sdhi1: sdhi@ee120000 {
 	sdhi1: sdhi@ee120000 {
-		compatible = "renesas,r8a73a4-sdhi";
+		compatible = "renesas,sdhi-r8a73a4";
 		reg = <0 0xee120000 0 0x100>;
 		reg = <0 0xee120000 0 0x100>;
 		interrupt-parent = <&gic>;
 		interrupt-parent = <&gic>;
 		interrupts = <0 166 4>;
 		interrupts = <0 166 4>;
@@ -211,7 +211,7 @@
 	};
 	};
 
 
 	sdhi2: sdhi@ee140000 {
 	sdhi2: sdhi@ee140000 {
-		compatible = "renesas,r8a73a4-sdhi";
+		compatible = "renesas,sdhi-r8a73a4";
 		reg = <0 0xee140000 0 0x100>;
 		reg = <0 0xee140000 0 0x100>;
 		interrupt-parent = <&gic>;
 		interrupt-parent = <&gic>;
 		interrupts = <0 167 4>;
 		interrupts = <0 167 4>;

+ 0 - 1
arch/arm/boot/dts/r8a7778.dtsi

@@ -96,6 +96,5 @@
 	pfc: pfc@fffc0000 {
 	pfc: pfc@fffc0000 {
 		compatible = "renesas,pfc-r8a7778";
 		compatible = "renesas,pfc-r8a7778";
 		reg = <0xfffc000 0x118>;
 		reg = <0xfffc000 0x118>;
-		#gpio-range-cells = <3>;
 	};
 	};
 };
 };

+ 0 - 1
arch/arm/boot/dts/r8a7779.dtsi

@@ -188,7 +188,6 @@
 	pfc: pfc@fffc0000 {
 	pfc: pfc@fffc0000 {
 		compatible = "renesas,pfc-r8a7779";
 		compatible = "renesas,pfc-r8a7779";
 		reg = <0xfffc0000 0x23c>;
 		reg = <0xfffc0000 0x23c>;
-		#gpio-range-cells = <3>;
 	};
 	};
 
 
 	thermal@ffc48000 {
 	thermal@ffc48000 {

+ 4 - 5
arch/arm/boot/dts/r8a7790.dtsi

@@ -148,11 +148,10 @@
 	pfc: pfc@e6060000 {
 	pfc: pfc@e6060000 {
 		compatible = "renesas,pfc-r8a7790";
 		compatible = "renesas,pfc-r8a7790";
 		reg = <0 0xe6060000 0 0x250>;
 		reg = <0 0xe6060000 0 0x250>;
-		#gpio-range-cells = <3>;
 	};
 	};
 
 
 	sdhi0: sdhi@ee100000 {
 	sdhi0: sdhi@ee100000 {
-		compatible = "renesas,r8a7790-sdhi";
+		compatible = "renesas,sdhi-r8a7790";
 		reg = <0 0xee100000 0 0x100>;
 		reg = <0 0xee100000 0 0x100>;
 		interrupt-parent = <&gic>;
 		interrupt-parent = <&gic>;
 		interrupts = <0 165 4>;
 		interrupts = <0 165 4>;
@@ -161,7 +160,7 @@
 	};
 	};
 
 
 	sdhi1: sdhi@ee120000 {
 	sdhi1: sdhi@ee120000 {
-		compatible = "renesas,r8a7790-sdhi";
+		compatible = "renesas,sdhi-r8a7790";
 		reg = <0 0xee120000 0 0x100>;
 		reg = <0 0xee120000 0 0x100>;
 		interrupt-parent = <&gic>;
 		interrupt-parent = <&gic>;
 		interrupts = <0 166 4>;
 		interrupts = <0 166 4>;
@@ -170,7 +169,7 @@
 	};
 	};
 
 
 	sdhi2: sdhi@ee140000 {
 	sdhi2: sdhi@ee140000 {
-		compatible = "renesas,r8a7790-sdhi";
+		compatible = "renesas,sdhi-r8a7790";
 		reg = <0 0xee140000 0 0x100>;
 		reg = <0 0xee140000 0 0x100>;
 		interrupt-parent = <&gic>;
 		interrupt-parent = <&gic>;
 		interrupts = <0 167 4>;
 		interrupts = <0 167 4>;
@@ -179,7 +178,7 @@
 	};
 	};
 
 
 	sdhi3: sdhi@ee160000 {
 	sdhi3: sdhi@ee160000 {
-		compatible = "renesas,r8a7790-sdhi";
+		compatible = "renesas,sdhi-r8a7790";
 		reg = <0 0xee160000 0 0x100>;
 		reg = <0 0xee160000 0 0x100>;
 		interrupt-parent = <&gic>;
 		interrupt-parent = <&gic>;
 		interrupts = <0 168 4>;
 		interrupts = <0 168 4>;

+ 3 - 3
arch/arm/boot/dts/sh73a0.dtsi

@@ -196,7 +196,7 @@
 	};
 	};
 
 
 	sdhi0: sdhi@ee100000 {
 	sdhi0: sdhi@ee100000 {
-		compatible = "renesas,r8a7740-sdhi";
+		compatible = "renesas,sdhi-r8a7740";
 		reg = <0xee100000 0x100>;
 		reg = <0xee100000 0x100>;
 		interrupt-parent = <&gic>;
 		interrupt-parent = <&gic>;
 		interrupts = <0 83 4
 		interrupts = <0 83 4
@@ -208,7 +208,7 @@
 
 
 	/* SDHI1 and SDHI2 have no CD pins, no need for CD IRQ */
 	/* SDHI1 and SDHI2 have no CD pins, no need for CD IRQ */
 	sdhi1: sdhi@ee120000 {
 	sdhi1: sdhi@ee120000 {
-		compatible = "renesas,r8a7740-sdhi";
+		compatible = "renesas,sdhi-r8a7740";
 		reg = <0xee120000 0x100>;
 		reg = <0xee120000 0x100>;
 		interrupt-parent = <&gic>;
 		interrupt-parent = <&gic>;
 		interrupts = <0 88 4
 		interrupts = <0 88 4
@@ -219,7 +219,7 @@
 	};
 	};
 
 
 	sdhi2: sdhi@ee140000 {
 	sdhi2: sdhi@ee140000 {
-		compatible = "renesas,r8a7740-sdhi";
+		compatible = "renesas,sdhi-r8a7740";
 		reg = <0xee140000 0x100>;
 		reg = <0xee140000 0x100>;
 		interrupt-parent = <&gic>;
 		interrupt-parent = <&gic>;
 		interrupts = <0 104 4
 		interrupts = <0 104 4

+ 14 - 0
arch/arm/boot/install.sh

@@ -20,6 +20,20 @@
 #   $4 - default install path (blank if root directory)
 #   $4 - default install path (blank if root directory)
 #
 #
 
 
+verify () {
+	if [ ! -f "$1" ]; then
+		echo ""                                                   1>&2
+		echo " *** Missing file: $1"                              1>&2
+		echo ' *** You need to run "make" before "make install".' 1>&2
+		echo ""                                                   1>&2
+		exit 1
+	fi
+}
+
+# Make sure the files actually exist
+verify "$2"
+verify "$3"
+
 # User may have a custom install script
 # User may have a custom install script
 if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
 if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
 if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi
 if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi

+ 31 - 7
arch/arm/common/edma.c

@@ -269,6 +269,11 @@ static const struct edmacc_param dummy_paramset = {
 	.ccnt = 1,
 	.ccnt = 1,
 };
 };
 
 
+static const struct of_device_id edma_of_ids[] = {
+	{ .compatible = "ti,edma3", },
+	{}
+};
+
 /*****************************************************************************/
 /*****************************************************************************/
 
 
 static void map_dmach_queue(unsigned ctlr, unsigned ch_no,
 static void map_dmach_queue(unsigned ctlr, unsigned ch_no,
@@ -560,14 +565,38 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id,
 static int prepare_unused_channel_list(struct device *dev, void *data)
 static int prepare_unused_channel_list(struct device *dev, void *data)
 {
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	struct platform_device *pdev = to_platform_device(dev);
-	int i, ctlr;
+	int i, count, ctlr;
+	struct of_phandle_args  dma_spec;
 
 
+	if (dev->of_node) {
+		count = of_property_count_strings(dev->of_node, "dma-names");
+		if (count < 0)
+			return 0;
+		for (i = 0; i < count; i++) {
+			if (of_parse_phandle_with_args(dev->of_node, "dmas",
+						       "#dma-cells", i,
+						       &dma_spec))
+				continue;
+
+			if (!of_match_node(edma_of_ids, dma_spec.np)) {
+				of_node_put(dma_spec.np);
+				continue;
+			}
+
+			clear_bit(EDMA_CHAN_SLOT(dma_spec.args[0]),
+				  edma_cc[0]->edma_unused);
+			of_node_put(dma_spec.np);
+		}
+		return 0;
+	}
+
+	/* For non-OF case */
 	for (i = 0; i < pdev->num_resources; i++) {
 	for (i = 0; i < pdev->num_resources; i++) {
 		if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
 		if ((pdev->resource[i].flags & IORESOURCE_DMA) &&
 				(int)pdev->resource[i].start >= 0) {
 				(int)pdev->resource[i].start >= 0) {
 			ctlr = EDMA_CTLR(pdev->resource[i].start);
 			ctlr = EDMA_CTLR(pdev->resource[i].start);
 			clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start),
 			clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start),
-					edma_cc[ctlr]->edma_unused);
+				  edma_cc[ctlr]->edma_unused);
 		}
 		}
 	}
 	}
 
 
@@ -1762,11 +1791,6 @@ static int edma_probe(struct platform_device *pdev)
 	return 0;
 	return 0;
 }
 }
 
 
-static const struct of_device_id edma_of_ids[] = {
-	{ .compatible = "ti,edma3", },
-	{}
-};
-
 static struct platform_driver edma_driver = {
 static struct platform_driver edma_driver = {
 	.driver = {
 	.driver = {
 		.name	= "edma",
 		.name	= "edma",

+ 4 - 2
arch/arm/common/mcpm_entry.c

@@ -51,7 +51,8 @@ void mcpm_cpu_power_down(void)
 {
 {
 	phys_reset_t phys_reset;
 	phys_reset_t phys_reset;
 
 
-	BUG_ON(!platform_ops);
+	if (WARN_ON_ONCE(!platform_ops || !platform_ops->power_down))
+		return;
 	BUG_ON(!irqs_disabled());
 	BUG_ON(!irqs_disabled());
 
 
 	/*
 	/*
@@ -93,7 +94,8 @@ void mcpm_cpu_suspend(u64 expected_residency)
 {
 {
 	phys_reset_t phys_reset;
 	phys_reset_t phys_reset;
 
 
-	BUG_ON(!platform_ops);
+	if (WARN_ON_ONCE(!platform_ops || !platform_ops->suspend))
+		return;
 	BUG_ON(!irqs_disabled());
 	BUG_ON(!irqs_disabled());
 
 
 	/* Very similar to mcpm_cpu_power_down() */
 	/* Very similar to mcpm_cpu_power_down() */

+ 4 - 1
arch/arm/common/sharpsl_param.c

@@ -15,6 +15,7 @@
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/string.h>
 #include <linux/string.h>
 #include <asm/mach/sharpsl_param.h>
 #include <asm/mach/sharpsl_param.h>
+#include <asm/memory.h>
 
 
 /*
 /*
  * Certain hardware parameters determined at the time of device manufacture,
  * Certain hardware parameters determined at the time of device manufacture,
@@ -25,8 +26,10 @@
  */
  */
 #ifdef CONFIG_ARCH_SA1100
 #ifdef CONFIG_ARCH_SA1100
 #define PARAM_BASE	0xe8ffc000
 #define PARAM_BASE	0xe8ffc000
+#define param_start(x)	(void *)(x)
 #else
 #else
 #define PARAM_BASE	0xa0000a00
 #define PARAM_BASE	0xa0000a00
+#define param_start(x)	__va(x)
 #endif
 #endif
 #define MAGIC_CHG(a,b,c,d) ( ( d << 24 ) | ( c << 16 )  | ( b << 8 ) | a )
 #define MAGIC_CHG(a,b,c,d) ( ( d << 24 ) | ( c << 16 )  | ( b << 8 ) | a )
 
 
@@ -41,7 +44,7 @@ EXPORT_SYMBOL(sharpsl_param);
 
 
 void sharpsl_save_param(void)
 void sharpsl_save_param(void)
 {
 {
-	memcpy(&sharpsl_param, (void *)PARAM_BASE, sizeof(struct sharpsl_param_info));
+	memcpy(&sharpsl_param, param_start(PARAM_BASE), sizeof(struct sharpsl_param_info));
 
 
 	if (sharpsl_param.comadj_keyword != COMADJ_MAGIC)
 	if (sharpsl_param.comadj_keyword != COMADJ_MAGIC)
 		sharpsl_param.comadj=-1;
 		sharpsl_param.comadj=-1;

+ 1 - 0
arch/arm/configs/multi_v7_defconfig

@@ -135,6 +135,7 @@ CONFIG_MMC=y
 CONFIG_MMC_ARMMMCI=y
 CONFIG_MMC_ARMMMCI=y
 CONFIG_MMC_SDHCI=y
 CONFIG_MMC_SDHCI=y
 CONFIG_MMC_SDHCI_PLTFM=y
 CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_ESDHC_IMX=y
 CONFIG_MMC_SDHCI_TEGRA=y
 CONFIG_MMC_SDHCI_TEGRA=y
 CONFIG_MMC_SDHCI_SPEAR=y
 CONFIG_MMC_SDHCI_SPEAR=y
 CONFIG_MMC_OMAP=y
 CONFIG_MMC_OMAP=y

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

@@ -31,5 +31,4 @@ generic-y += termbits.h
 generic-y += termios.h
 generic-y += termios.h
 generic-y += timex.h
 generic-y += timex.h
 generic-y += trace_clock.h
 generic-y += trace_clock.h
-generic-y += types.h
 generic-y += unaligned.h
 generic-y += unaligned.h

+ 1 - 1
arch/arm/include/asm/jump_label.h

@@ -16,7 +16,7 @@
 
 
 static __always_inline bool arch_static_branch(struct static_key *key)
 static __always_inline bool arch_static_branch(struct static_key *key)
 {
 {
-	asm goto("1:\n\t"
+	asm_volatile_goto("1:\n\t"
 		 JUMP_LABEL_NOP "\n\t"
 		 JUMP_LABEL_NOP "\n\t"
 		 ".pushsection __jump_table,  \"aw\"\n\t"
 		 ".pushsection __jump_table,  \"aw\"\n\t"
 		 ".word 1b, %l[l_yes], %c0\n\t"
 		 ".word 1b, %l[l_yes], %c0\n\t"

+ 10 - 4
arch/arm/include/asm/mcpm.h

@@ -76,8 +76,11 @@ int mcpm_cpu_power_up(unsigned int cpu, unsigned int cluster);
  *
  *
  * This must be called with interrupts disabled.
  * This must be called with interrupts disabled.
  *
  *
- * This does not return.  Re-entry in the kernel is expected via
- * mcpm_entry_point.
+ * On success this does not return.  Re-entry in the kernel is expected
+ * via mcpm_entry_point.
+ *
+ * This will return if mcpm_platform_register() has not been called
+ * previously in which case the caller should take appropriate action.
  */
  */
 void mcpm_cpu_power_down(void);
 void mcpm_cpu_power_down(void);
 
 
@@ -98,8 +101,11 @@ void mcpm_cpu_power_down(void);
  *
  *
  * This must be called with interrupts disabled.
  * This must be called with interrupts disabled.
  *
  *
- * This does not return.  Re-entry in the kernel is expected via
- * mcpm_entry_point.
+ * On success this does not return.  Re-entry in the kernel is expected
+ * via mcpm_entry_point.
+ *
+ * This will return if mcpm_platform_register() has not been called
+ * previously in which case the caller should take appropriate action.
  */
  */
 void mcpm_cpu_suspend(u64 expected_residency);
 void mcpm_cpu_suspend(u64 expected_residency);
 
 

+ 6 - 0
arch/arm/include/asm/syscall.h

@@ -57,6 +57,9 @@ static inline void syscall_get_arguments(struct task_struct *task,
 					 unsigned int i, unsigned int n,
 					 unsigned int i, unsigned int n,
 					 unsigned long *args)
 					 unsigned long *args)
 {
 {
+	if (n == 0)
+		return;
+
 	if (i + n > SYSCALL_MAX_ARGS) {
 	if (i + n > SYSCALL_MAX_ARGS) {
 		unsigned long *args_bad = args + SYSCALL_MAX_ARGS - i;
 		unsigned long *args_bad = args + SYSCALL_MAX_ARGS - i;
 		unsigned int n_bad = n + i - SYSCALL_MAX_ARGS;
 		unsigned int n_bad = n + i - SYSCALL_MAX_ARGS;
@@ -81,6 +84,9 @@ static inline void syscall_set_arguments(struct task_struct *task,
 					 unsigned int i, unsigned int n,
 					 unsigned int i, unsigned int n,
 					 const unsigned long *args)
 					 const unsigned long *args)
 {
 {
+	if (n == 0)
+		return;
+
 	if (i + n > SYSCALL_MAX_ARGS) {
 	if (i + n > SYSCALL_MAX_ARGS) {
 		pr_warning("%s called with max args %d, handling only %d\n",
 		pr_warning("%s called with max args %d, handling only %d\n",
 			   __func__, i + n, SYSCALL_MAX_ARGS);
 			   __func__, i + n, SYSCALL_MAX_ARGS);

+ 20 - 1
arch/arm/kernel/head.S

@@ -487,7 +487,26 @@ __fixup_smp:
 	mrc	p15, 0, r0, c0, c0, 5	@ read MPIDR
 	mrc	p15, 0, r0, c0, c0, 5	@ read MPIDR
 	and	r0, r0, #0xc0000000	@ multiprocessing extensions and
 	and	r0, r0, #0xc0000000	@ multiprocessing extensions and
 	teq	r0, #0x80000000		@ not part of a uniprocessor system?
 	teq	r0, #0x80000000		@ not part of a uniprocessor system?
-	moveq	pc, lr			@ yes, assume SMP
+	bne    __fixup_smp_on_up	@ no, assume UP
+
+	@ Core indicates it is SMP. Check for Aegis SOC where a single
+	@ Cortex-A9 CPU is present but SMP operations fault.
+	mov	r4, #0x41000000
+	orr	r4, r4, #0x0000c000
+	orr	r4, r4, #0x00000090
+	teq	r3, r4			@ Check for ARM Cortex-A9
+	movne	pc, lr			@ Not ARM Cortex-A9,
+
+	@ If a future SoC *does* use 0x0 as the PERIPH_BASE, then the
+	@ below address check will need to be #ifdef'd or equivalent
+	@ for the Aegis platform.
+	mrc	p15, 4, r0, c15, c0	@ get SCU base address
+	teq	r0, #0x0		@ '0' on actual UP A9 hardware
+	beq	__fixup_smp_on_up	@ So its an A9 UP
+	ldr	r0, [r0, #4]		@ read SCU Config
+	and	r0, r0, #0x3		@ number of CPUs
+	teq	r0, #0x0		@ is 1?
+	movne	pc, lr
 
 
 __fixup_smp_on_up:
 __fixup_smp_on_up:
 	adr	r0, 1f
 	adr	r0, 1f

+ 1 - 1
arch/arm/mach-at91/at91rm9200_time.c

@@ -93,7 +93,7 @@ static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id)
 
 
 static struct irqaction at91rm9200_timer_irq = {
 static struct irqaction at91rm9200_timer_irq = {
 	.name		= "at91_tick",
 	.name		= "at91_tick",
-	.flags		= IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,
+	.flags		= IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL,
 	.handler	= at91rm9200_timer_interrupt,
 	.handler	= at91rm9200_timer_interrupt,
 	.irq		= NR_IRQS_LEGACY + AT91_ID_SYS,
 	.irq		= NR_IRQS_LEGACY + AT91_ID_SYS,
 };
 };

+ 1 - 1
arch/arm/mach-at91/at91sam926x_time.c

@@ -171,7 +171,7 @@ static irqreturn_t at91sam926x_pit_interrupt(int irq, void *dev_id)
 
 
 static struct irqaction at91sam926x_pit_irq = {
 static struct irqaction at91sam926x_pit_irq = {
 	.name		= "at91_tick",
 	.name		= "at91_tick",
-	.flags		= IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,
+	.flags		= IRQF_SHARED | IRQF_TIMER | IRQF_IRQPOLL,
 	.handler	= at91sam926x_pit_interrupt,
 	.handler	= at91sam926x_pit_interrupt,
 	.irq		= NR_IRQS_LEGACY + AT91_ID_SYS,
 	.irq		= NR_IRQS_LEGACY + AT91_ID_SYS,
 };
 };

+ 8 - 0
arch/arm/mach-at91/at91sam9g45_reset.S

@@ -16,11 +16,17 @@
 #include "at91_rstc.h"
 #include "at91_rstc.h"
 			.arm
 			.arm
 
 
+/*
+ * at91_ramc_base is an array void*
+ * init at NULL if only one DDR controler is present in or DT
+ */
 			.globl	at91sam9g45_restart
 			.globl	at91sam9g45_restart
 
 
 at91sam9g45_restart:
 at91sam9g45_restart:
 			ldr	r5, =at91_ramc_base		@ preload constants
 			ldr	r5, =at91_ramc_base		@ preload constants
 			ldr	r0, [r5]
 			ldr	r0, [r5]
+			ldr	r5, [r5, #4]			@ ddr1
+			cmp	r5, #0
 			ldr	r4, =at91_rstc_base
 			ldr	r4, =at91_rstc_base
 			ldr	r1, [r4]
 			ldr	r1, [r4]
 
 
@@ -30,6 +36,8 @@ at91sam9g45_restart:
 
 
 			.balign	32				@ align to cache line
 			.balign	32				@ align to cache line
 
 
+			strne	r2, [r5, #AT91_DDRSDRC_RTR]	@ disable DDR1 access
+			strne	r3, [r5, #AT91_DDRSDRC_LPR]	@ power down DDR1
 			str	r2, [r0, #AT91_DDRSDRC_RTR]	@ disable DDR0 access
 			str	r2, [r0, #AT91_DDRSDRC_RTR]	@ disable DDR0 access
 			str	r3, [r0, #AT91_DDRSDRC_LPR]	@ power down DDR0
 			str	r3, [r0, #AT91_DDRSDRC_LPR]	@ power down DDR0
 			str	r4, [r1, #AT91_RSTC_CR]		@ reset processor
 			str	r4, [r1, #AT91_RSTC_CR]		@ reset processor

+ 1 - 1
arch/arm/mach-at91/at91x40_time.c

@@ -57,7 +57,7 @@ static irqreturn_t at91x40_timer_interrupt(int irq, void *dev_id)
 
 
 static struct irqaction at91x40_timer_irq = {
 static struct irqaction at91x40_timer_irq = {
 	.name		= "at91_tick",
 	.name		= "at91_tick",
-	.flags		= IRQF_DISABLED | IRQF_TIMER,
+	.flags		= IRQF_TIMER,
 	.handler	= at91x40_timer_interrupt
 	.handler	= at91x40_timer_interrupt
 };
 };
 
 

+ 1 - 1
arch/arm/mach-davinci/board-dm365-evm.c

@@ -176,7 +176,7 @@ static struct at24_platform_data eeprom_info = {
 	.context	= (void *)0x7f00,
 	.context	= (void *)0x7f00,
 };
 };
 
 
-static struct snd_platform_data dm365_evm_snd_data = {
+static struct snd_platform_data dm365_evm_snd_data __maybe_unused = {
 	.asp_chan_q = EVENTQ_3,
 	.asp_chan_q = EVENTQ_3,
 };
 };
 
 

+ 2 - 2
arch/arm/mach-davinci/include/mach/serial.h

@@ -15,8 +15,6 @@
 
 
 #include <mach/hardware.h>
 #include <mach/hardware.h>
 
 
-#include <linux/platform_device.h>
-
 #define DAVINCI_UART0_BASE	(IO_PHYS + 0x20000)
 #define DAVINCI_UART0_BASE	(IO_PHYS + 0x20000)
 #define DAVINCI_UART1_BASE	(IO_PHYS + 0x20400)
 #define DAVINCI_UART1_BASE	(IO_PHYS + 0x20400)
 #define DAVINCI_UART2_BASE	(IO_PHYS + 0x20800)
 #define DAVINCI_UART2_BASE	(IO_PHYS + 0x20800)
@@ -39,6 +37,8 @@
 #define UART_DM646X_SCR_TX_WATERMARK	0x08
 #define UART_DM646X_SCR_TX_WATERMARK	0x08
 
 
 #ifndef __ASSEMBLY__
 #ifndef __ASSEMBLY__
+#include <linux/platform_device.h>
+
 extern int davinci_serial_init(struct platform_device *);
 extern int davinci_serial_init(struct platform_device *);
 #endif
 #endif
 
 

+ 7 - 0
arch/arm/mach-integrator/pci_v3.h

@@ -1,2 +1,9 @@
 /* Simple oneliner include to the PCIv3 early init */
 /* Simple oneliner include to the PCIv3 early init */
+#ifdef CONFIG_PCI
 extern int pci_v3_early_init(void);
 extern int pci_v3_early_init(void);
+#else
+static inline int pci_v3_early_init(void)
+{
+	return 0;
+}
+#endif

+ 7 - 1
arch/arm/mach-mvebu/coherency.c

@@ -140,6 +140,7 @@ int __init coherency_init(void)
 		coherency_base = of_iomap(np, 0);
 		coherency_base = of_iomap(np, 0);
 		coherency_cpu_base = of_iomap(np, 1);
 		coherency_cpu_base = of_iomap(np, 1);
 		set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0);
 		set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0);
+		of_node_put(np);
 	}
 	}
 
 
 	return 0;
 	return 0;
@@ -147,9 +148,14 @@ int __init coherency_init(void)
 
 
 static int __init coherency_late_init(void)
 static int __init coherency_late_init(void)
 {
 {
-	if (of_find_matching_node(NULL, of_coherency_table))
+	struct device_node *np;
+
+	np = of_find_matching_node(NULL, of_coherency_table);
+	if (np) {
 		bus_register_notifier(&platform_bus_type,
 		bus_register_notifier(&platform_bus_type,
 				      &mvebu_hwcc_platform_nb);
 				      &mvebu_hwcc_platform_nb);
+		of_node_put(np);
+	}
 	return 0;
 	return 0;
 }
 }
 
 

+ 1 - 0
arch/arm/mach-mvebu/pmsu.c

@@ -67,6 +67,7 @@ int __init armada_370_xp_pmsu_init(void)
 		pr_info("Initializing Power Management Service Unit\n");
 		pr_info("Initializing Power Management Service Unit\n");
 		pmsu_mp_base = of_iomap(np, 0);
 		pmsu_mp_base = of_iomap(np, 0);
 		pmsu_reset_base = of_iomap(np, 1);
 		pmsu_reset_base = of_iomap(np, 1);
+		of_node_put(np);
 	}
 	}
 
 
 	return 0;
 	return 0;

+ 1 - 0
arch/arm/mach-mvebu/system-controller.c

@@ -98,6 +98,7 @@ static int __init mvebu_system_controller_init(void)
 		BUG_ON(!match);
 		BUG_ON(!match);
 		system_controller_base = of_iomap(np, 0);
 		system_controller_base = of_iomap(np, 0);
 		mvebu_sc = (struct mvebu_system_controller *)match->data;
 		mvebu_sc = (struct mvebu_system_controller *)match->data;
+		of_node_put(np);
 	}
 	}
 
 
 	return 0;
 	return 0;

+ 18 - 0
arch/arm/mach-omap2/board-generic.c

@@ -129,6 +129,24 @@ DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)")
 	.restart	= omap3xxx_restart,
 	.restart	= omap3xxx_restart,
 MACHINE_END
 MACHINE_END
 
 
+static const char *omap36xx_boards_compat[] __initdata = {
+	"ti,omap36xx",
+	NULL,
+};
+
+DT_MACHINE_START(OMAP36XX_DT, "Generic OMAP36xx (Flattened Device Tree)")
+	.reserve	= omap_reserve,
+	.map_io		= omap3_map_io,
+	.init_early	= omap3630_init_early,
+	.init_irq	= omap_intc_of_init,
+	.handle_irq	= omap3_intc_handle_irq,
+	.init_machine	= omap_generic_init,
+	.init_late	= omap3_init_late,
+	.init_time	= omap3_sync32k_timer_init,
+	.dt_compat	= omap36xx_boards_compat,
+	.restart	= omap3xxx_restart,
+MACHINE_END
+
 static const char *omap3_gp_boards_compat[] __initdata = {
 static const char *omap3_gp_boards_compat[] __initdata = {
 	"ti,omap3-beagle",
 	"ti,omap3-beagle",
 	"timll,omap3-devkit8000",
 	"timll,omap3-devkit8000",

+ 9 - 0
arch/arm/mach-omap2/board-rx51-peripherals.c

@@ -167,38 +167,47 @@ static struct lp55xx_led_config rx51_lp5523_led_config[] = {
 		.name		= "lp5523:kb1",
 		.name		= "lp5523:kb1",
 		.chan_nr	= 0,
 		.chan_nr	= 0,
 		.led_current	= 50,
 		.led_current	= 50,
+		.max_current	= 100,
 	}, {
 	}, {
 		.name		= "lp5523:kb2",
 		.name		= "lp5523:kb2",
 		.chan_nr	= 1,
 		.chan_nr	= 1,
 		.led_current	= 50,
 		.led_current	= 50,
+		.max_current	= 100,
 	}, {
 	}, {
 		.name		= "lp5523:kb3",
 		.name		= "lp5523:kb3",
 		.chan_nr	= 2,
 		.chan_nr	= 2,
 		.led_current	= 50,
 		.led_current	= 50,
+		.max_current	= 100,
 	}, {
 	}, {
 		.name		= "lp5523:kb4",
 		.name		= "lp5523:kb4",
 		.chan_nr	= 3,
 		.chan_nr	= 3,
 		.led_current	= 50,
 		.led_current	= 50,
+		.max_current	= 100,
 	}, {
 	}, {
 		.name		= "lp5523:b",
 		.name		= "lp5523:b",
 		.chan_nr	= 4,
 		.chan_nr	= 4,
 		.led_current	= 50,
 		.led_current	= 50,
+		.max_current	= 100,
 	}, {
 	}, {
 		.name		= "lp5523:g",
 		.name		= "lp5523:g",
 		.chan_nr	= 5,
 		.chan_nr	= 5,
 		.led_current	= 50,
 		.led_current	= 50,
+		.max_current	= 100,
 	}, {
 	}, {
 		.name		= "lp5523:r",
 		.name		= "lp5523:r",
 		.chan_nr	= 6,
 		.chan_nr	= 6,
 		.led_current	= 50,
 		.led_current	= 50,
+		.max_current	= 100,
 	}, {
 	}, {
 		.name		= "lp5523:kb5",
 		.name		= "lp5523:kb5",
 		.chan_nr	= 7,
 		.chan_nr	= 7,
 		.led_current	= 50,
 		.led_current	= 50,
+		.max_current	= 100,
 	}, {
 	}, {
 		.name		= "lp5523:kb6",
 		.name		= "lp5523:kb6",
 		.chan_nr	= 8,
 		.chan_nr	= 8,
 		.led_current	= 50,
 		.led_current	= 50,
+		.max_current	= 100,
 	}
 	}
 };
 };
 
 

+ 11 - 1
arch/arm/mach-omap2/gpmc-onenand.c

@@ -272,9 +272,19 @@ static int omap2_onenand_setup_async(void __iomem *onenand_base)
 	struct gpmc_timings t;
 	struct gpmc_timings t;
 	int ret;
 	int ret;
 
 
-	if (gpmc_onenand_data->of_node)
+	if (gpmc_onenand_data->of_node) {
 		gpmc_read_settings_dt(gpmc_onenand_data->of_node,
 		gpmc_read_settings_dt(gpmc_onenand_data->of_node,
 				      &onenand_async);
 				      &onenand_async);
+		if (onenand_async.sync_read || onenand_async.sync_write) {
+			if (onenand_async.sync_write)
+				gpmc_onenand_data->flags |=
+					ONENAND_SYNC_READWRITE;
+			else
+				gpmc_onenand_data->flags |= ONENAND_SYNC_READ;
+			onenand_async.sync_read = false;
+			onenand_async.sync_write = false;
+		}
+	}
 
 
 	omap2_onenand_set_async_mode(onenand_base);
 	omap2_onenand_set_async_mode(onenand_base);
 
 

+ 1 - 3
arch/arm/mach-omap2/mux.h

@@ -28,7 +28,7 @@
 #define OMAP_PULL_UP			(1 << 4)
 #define OMAP_PULL_UP			(1 << 4)
 #define OMAP_ALTELECTRICALSEL		(1 << 5)
 #define OMAP_ALTELECTRICALSEL		(1 << 5)
 
 
-/* 34xx specific mux bit defines */
+/* omap3/4/5 specific mux bit defines */
 #define OMAP_INPUT_EN			(1 << 8)
 #define OMAP_INPUT_EN			(1 << 8)
 #define OMAP_OFF_EN			(1 << 9)
 #define OMAP_OFF_EN			(1 << 9)
 #define OMAP_OFFOUT_EN			(1 << 10)
 #define OMAP_OFFOUT_EN			(1 << 10)
@@ -36,8 +36,6 @@
 #define OMAP_OFF_PULL_EN		(1 << 12)
 #define OMAP_OFF_PULL_EN		(1 << 12)
 #define OMAP_OFF_PULL_UP		(1 << 13)
 #define OMAP_OFF_PULL_UP		(1 << 13)
 #define OMAP_WAKEUP_EN			(1 << 14)
 #define OMAP_WAKEUP_EN			(1 << 14)
-
-/* 44xx specific mux bit defines */
 #define OMAP_WAKEUP_EVENT		(1 << 15)
 #define OMAP_WAKEUP_EVENT		(1 << 15)
 
 
 /* Active pin states */
 /* Active pin states */

+ 2 - 2
arch/arm/mach-omap2/timer.c

@@ -628,7 +628,7 @@ void __init omap4_local_timer_init(void)
 #endif /* CONFIG_HAVE_ARM_TWD */
 #endif /* CONFIG_HAVE_ARM_TWD */
 #endif /* CONFIG_ARCH_OMAP4 */
 #endif /* CONFIG_ARCH_OMAP4 */
 
 
-#ifdef CONFIG_SOC_OMAP5
+#if defined(CONFIG_SOC_OMAP5) || defined(CONFIG_SOC_DRA7XX)
 void __init omap5_realtime_timer_init(void)
 void __init omap5_realtime_timer_init(void)
 {
 {
 	omap4_sync32k_timer_init();
 	omap4_sync32k_timer_init();
@@ -636,7 +636,7 @@ void __init omap5_realtime_timer_init(void)
 
 
 	clocksource_of_init();
 	clocksource_of_init();
 }
 }
-#endif /* CONFIG_SOC_OMAP5 */
+#endif /* CONFIG_SOC_OMAP5 || CONFIG_SOC_DRA7XX */
 
 
 /**
 /**
  * omap_timer_init - build and register timer device with an
  * omap_timer_init - build and register timer device with an

+ 2 - 2
arch/arm/mach-shmobile/board-armadillo800eva.c

@@ -1108,9 +1108,9 @@ static const struct pinctrl_map eva_pinctrl_map[] = {
 	PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-r8a7740",
 	PIN_MAP_MUX_GROUP_DEFAULT("asoc-simple-card.1", "pfc-r8a7740",
 				  "fsib_mclk_in", "fsib"),
 				  "fsib_mclk_in", "fsib"),
 	/* GETHER */
 	/* GETHER */
-	PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740",
+	PIN_MAP_MUX_GROUP_DEFAULT("r8a7740-gether", "pfc-r8a7740",
 				  "gether_mii", "gether"),
 				  "gether_mii", "gether"),
-	PIN_MAP_MUX_GROUP_DEFAULT("sh-eth", "pfc-r8a7740",
+	PIN_MAP_MUX_GROUP_DEFAULT("r8a7740-gether", "pfc-r8a7740",
 				  "gether_int", "gether"),
 				  "gether_int", "gether"),
 	/* HDMI */
 	/* HDMI */
 	PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-r8a7740",
 	PIN_MAP_MUX_GROUP_DEFAULT("sh-mobile-hdmi", "pfc-r8a7740",

+ 26 - 1
arch/arm/mach-shmobile/board-lager.c

@@ -29,6 +29,7 @@
 #include <linux/pinctrl/machine.h>
 #include <linux/pinctrl/machine.h>
 #include <linux/platform_data/gpio-rcar.h>
 #include <linux/platform_data/gpio-rcar.h>
 #include <linux/platform_device.h>
 #include <linux/platform_device.h>
+#include <linux/phy.h>
 #include <linux/regulator/fixed.h>
 #include <linux/regulator/fixed.h>
 #include <linux/regulator/machine.h>
 #include <linux/regulator/machine.h>
 #include <linux/sh_eth.h>
 #include <linux/sh_eth.h>
@@ -155,6 +156,30 @@ static void __init lager_add_standard_devices(void)
 					  &ether_pdata, sizeof(ether_pdata));
 					  &ether_pdata, sizeof(ether_pdata));
 }
 }
 
 
+/*
+ * Ether LEDs on the Lager board are named LINK and ACTIVE which corresponds
+ * to non-default 01 setting of the Micrel KSZ8041 PHY control register 1 bits
+ * 14-15. We have to set them back to 01 from the default 00 value each time
+ * the PHY is reset. It's also important because the PHY's LED0 signal is
+ * connected to SoC's ETH_LINK signal and in the PHY's default mode it will
+ * bounce on and off after each packet, which we apparently want to avoid.
+ */
+static int lager_ksz8041_fixup(struct phy_device *phydev)
+{
+	u16 phyctrl1 = phy_read(phydev, 0x1e);
+
+	phyctrl1 &= ~0xc000;
+	phyctrl1 |= 0x4000;
+	return phy_write(phydev, 0x1e, phyctrl1);
+}
+
+static void __init lager_init(void)
+{
+	lager_add_standard_devices();
+
+	phy_register_fixup_for_id("r8a7790-ether-ff:01", lager_ksz8041_fixup);
+}
+
 static const char *lager_boards_compat_dt[] __initdata = {
 static const char *lager_boards_compat_dt[] __initdata = {
 	"renesas,lager",
 	"renesas,lager",
 	NULL,
 	NULL,
@@ -163,6 +188,6 @@ static const char *lager_boards_compat_dt[] __initdata = {
 DT_MACHINE_START(LAGER_DT, "lager")
 DT_MACHINE_START(LAGER_DT, "lager")
 	.init_early	= r8a7790_init_delay,
 	.init_early	= r8a7790_init_delay,
 	.init_time	= r8a7790_timer_init,
 	.init_time	= r8a7790_timer_init,
-	.init_machine	= lager_add_standard_devices,
+	.init_machine	= lager_init,
 	.dt_compat	= lager_boards_compat_dt,
 	.dt_compat	= lager_boards_compat_dt,
 MACHINE_END
 MACHINE_END

+ 10 - 1
arch/arm/mach-vexpress/tc2_pm.c

@@ -131,6 +131,16 @@ static void tc2_pm_down(u64 residency)
 	} else
 	} else
 		BUG();
 		BUG();
 
 
+	/*
+	 * If the CPU is committed to power down, make sure
+	 * the power controller will be in charge of waking it
+	 * up upon IRQ, ie IRQ lines are cut from GIC CPU IF
+	 * to the CPU by disabling the GIC CPU IF to prevent wfi
+	 * from completing execution behind power controller back
+	 */
+	if (!skip_wfi)
+		gic_cpu_if_down();
+
 	if (last_man && __mcpm_outbound_enter_critical(cpu, cluster)) {
 	if (last_man && __mcpm_outbound_enter_critical(cpu, cluster)) {
 		arch_spin_unlock(&tc2_pm_lock);
 		arch_spin_unlock(&tc2_pm_lock);
 
 
@@ -231,7 +241,6 @@ static void tc2_pm_suspend(u64 residency)
 	cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);
 	cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);
 	cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);
 	cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1);
 	ve_spc_set_resume_addr(cluster, cpu, virt_to_phys(mcpm_entry_point));
 	ve_spc_set_resume_addr(cluster, cpu, virt_to_phys(mcpm_entry_point));
-	gic_cpu_if_down();
 	tc2_pm_down(residency);
 	tc2_pm_down(residency);
 }
 }
 
 

+ 28 - 15
arch/arm/mm/dma-mapping.c

@@ -1232,7 +1232,8 @@ __iommu_create_mapping(struct device *dev, struct page **pages, size_t size)
 				break;
 				break;
 
 
 		len = (j - i) << PAGE_SHIFT;
 		len = (j - i) << PAGE_SHIFT;
-		ret = iommu_map(mapping->domain, iova, phys, len, 0);
+		ret = iommu_map(mapping->domain, iova, phys, len,
+				IOMMU_READ|IOMMU_WRITE);
 		if (ret < 0)
 		if (ret < 0)
 			goto fail;
 			goto fail;
 		iova += len;
 		iova += len;
@@ -1431,6 +1432,27 @@ static int arm_iommu_get_sgtable(struct device *dev, struct sg_table *sgt,
 					 GFP_KERNEL);
 					 GFP_KERNEL);
 }
 }
 
 
+static int __dma_direction_to_prot(enum dma_data_direction dir)
+{
+	int prot;
+
+	switch (dir) {
+	case DMA_BIDIRECTIONAL:
+		prot = IOMMU_READ | IOMMU_WRITE;
+		break;
+	case DMA_TO_DEVICE:
+		prot = IOMMU_READ;
+		break;
+	case DMA_FROM_DEVICE:
+		prot = IOMMU_WRITE;
+		break;
+	default:
+		prot = 0;
+	}
+
+	return prot;
+}
+
 /*
 /*
  * Map a part of the scatter-gather list into contiguous io address space
  * Map a part of the scatter-gather list into contiguous io address space
  */
  */
@@ -1444,6 +1466,7 @@ static int __map_sg_chunk(struct device *dev, struct scatterlist *sg,
 	int ret = 0;
 	int ret = 0;
 	unsigned int count;
 	unsigned int count;
 	struct scatterlist *s;
 	struct scatterlist *s;
+	int prot;
 
 
 	size = PAGE_ALIGN(size);
 	size = PAGE_ALIGN(size);
 	*handle = DMA_ERROR_CODE;
 	*handle = DMA_ERROR_CODE;
@@ -1460,7 +1483,9 @@ static int __map_sg_chunk(struct device *dev, struct scatterlist *sg,
 			!dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs))
 			!dma_get_attr(DMA_ATTR_SKIP_CPU_SYNC, attrs))
 			__dma_page_cpu_to_dev(sg_page(s), s->offset, s->length, dir);
 			__dma_page_cpu_to_dev(sg_page(s), s->offset, s->length, dir);
 
 
-		ret = iommu_map(mapping->domain, iova, phys, len, 0);
+		prot = __dma_direction_to_prot(dir);
+
+		ret = iommu_map(mapping->domain, iova, phys, len, prot);
 		if (ret < 0)
 		if (ret < 0)
 			goto fail;
 			goto fail;
 		count += len >> PAGE_SHIFT;
 		count += len >> PAGE_SHIFT;
@@ -1665,19 +1690,7 @@ static dma_addr_t arm_coherent_iommu_map_page(struct device *dev, struct page *p
 	if (dma_addr == DMA_ERROR_CODE)
 	if (dma_addr == DMA_ERROR_CODE)
 		return dma_addr;
 		return dma_addr;
 
 
-	switch (dir) {
-	case DMA_BIDIRECTIONAL:
-		prot = IOMMU_READ | IOMMU_WRITE;
-		break;
-	case DMA_TO_DEVICE:
-		prot = IOMMU_READ;
-		break;
-	case DMA_FROM_DEVICE:
-		prot = IOMMU_WRITE;
-		break;
-	default:
-		prot = 0;
-	}
+	prot = __dma_direction_to_prot(dir);
 
 
 	ret = iommu_map(mapping->domain, dma_addr, page_to_phys(page), len, prot);
 	ret = iommu_map(mapping->domain, dma_addr, page_to_phys(page), len, prot);
 	if (ret < 0)
 	if (ret < 0)

+ 0 - 3
arch/arm/mm/init.c

@@ -17,7 +17,6 @@
 #include <linux/nodemask.h>
 #include <linux/nodemask.h>
 #include <linux/initrd.h>
 #include <linux/initrd.h>
 #include <linux/of_fdt.h>
 #include <linux/of_fdt.h>
-#include <linux/of_reserved_mem.h>
 #include <linux/highmem.h>
 #include <linux/highmem.h>
 #include <linux/gfp.h>
 #include <linux/gfp.h>
 #include <linux/memblock.h>
 #include <linux/memblock.h>
@@ -379,8 +378,6 @@ void __init arm_memblock_init(struct meminfo *mi,
 	if (mdesc->reserve)
 	if (mdesc->reserve)
 		mdesc->reserve();
 		mdesc->reserve();
 
 
-	early_init_dt_scan_reserved_mem();
-
 	/*
 	/*
 	 * reserve memory for DMA contigouos allocations,
 	 * reserve memory for DMA contigouos allocations,
 	 * must come from DMA area inside low memory
 	 * must come from DMA area inside low memory

+ 0 - 7
arch/arm64/Kconfig.debug

@@ -6,13 +6,6 @@ config FRAME_POINTER
 	bool
 	bool
 	default y
 	default y
 
 
-config DEBUG_STACK_USAGE
-	bool "Enable stack utilization instrumentation"
-	depends on DEBUG_KERNEL
-	help
-	  Enables the display of the minimum amount of free stack which each
-	  task has ever had available in the sysrq-T output.
-
 config EARLY_PRINTK
 config EARLY_PRINTK
 	bool "Early printk support"
 	bool "Early printk support"
 	default y
 	default y

+ 4 - 1
arch/arm64/configs/defconfig

@@ -42,7 +42,7 @@ CONFIG_IP_PNP_BOOTP=y
 # CONFIG_WIRELESS is not set
 # CONFIG_WIRELESS is not set
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_DEVTMPFS=y
 CONFIG_DEVTMPFS=y
-# CONFIG_BLK_DEV is not set
+CONFIG_BLK_DEV=y
 CONFIG_SCSI=y
 CONFIG_SCSI=y
 # CONFIG_SCSI_PROC_FS is not set
 # CONFIG_SCSI_PROC_FS is not set
 CONFIG_BLK_DEV_SD=y
 CONFIG_BLK_DEV_SD=y
@@ -72,6 +72,7 @@ CONFIG_LOGO=y
 # CONFIG_IOMMU_SUPPORT is not set
 # CONFIG_IOMMU_SUPPORT is not set
 CONFIG_EXT2_FS=y
 CONFIG_EXT2_FS=y
 CONFIG_EXT3_FS=y
 CONFIG_EXT3_FS=y
+CONFIG_EXT4_FS=y
 # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
 # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
 # CONFIG_EXT3_FS_XATTR is not set
 # CONFIG_EXT3_FS_XATTR is not set
 CONFIG_FUSE_FS=y
 CONFIG_FUSE_FS=y
@@ -90,3 +91,5 @@ CONFIG_DEBUG_KERNEL=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_INFO=y
 # CONFIG_FTRACE is not set
 # CONFIG_FTRACE is not set
 CONFIG_ATOMIC64_SELFTEST=y
 CONFIG_ATOMIC64_SELFTEST=y
+CONFIG_VIRTIO_MMIO=y
+CONFIG_VIRTIO_BLK=y

+ 6 - 4
arch/arm64/include/asm/uaccess.h

@@ -166,9 +166,10 @@ do {									\
 
 
 #define get_user(x, ptr)						\
 #define get_user(x, ptr)						\
 ({									\
 ({									\
+	__typeof__(*(ptr)) __user *__p = (ptr);				\
 	might_fault();							\
 	might_fault();							\
-	access_ok(VERIFY_READ, (ptr), sizeof(*(ptr))) ?			\
-		__get_user((x), (ptr)) :				\
+	access_ok(VERIFY_READ, __p, sizeof(*__p)) ?			\
+		__get_user((x), __p) :					\
 		((x) = 0, -EFAULT);					\
 		((x) = 0, -EFAULT);					\
 })
 })
 
 
@@ -227,9 +228,10 @@ do {									\
 
 
 #define put_user(x, ptr)						\
 #define put_user(x, ptr)						\
 ({									\
 ({									\
+	__typeof__(*(ptr)) __user *__p = (ptr);				\
 	might_fault();							\
 	might_fault();							\
-	access_ok(VERIFY_WRITE, (ptr), sizeof(*(ptr))) ?		\
-		__put_user((x), (ptr)) :				\
+	access_ok(VERIFY_WRITE, __p, sizeof(*__p)) ?			\
+		__put_user((x), __p) :					\
 		-EFAULT;						\
 		-EFAULT;						\
 })
 })
 
 

+ 2 - 0
arch/arm64/kernel/fpsimd.c

@@ -80,8 +80,10 @@ void fpsimd_thread_switch(struct task_struct *next)
 
 
 void fpsimd_flush_thread(void)
 void fpsimd_flush_thread(void)
 {
 {
+	preempt_disable();
 	memset(&current->thread.fpsimd_state, 0, sizeof(struct fpsimd_state));
 	memset(&current->thread.fpsimd_state, 0, sizeof(struct fpsimd_state));
 	fpsimd_load_state(&current->thread.fpsimd_state);
 	fpsimd_load_state(&current->thread.fpsimd_state);
+	preempt_enable();
 }
 }
 
 
 #ifdef CONFIG_KERNEL_MODE_NEON
 #ifdef CONFIG_KERNEL_MODE_NEON

+ 1 - 1
arch/arm64/mm/tlb.S

@@ -35,7 +35,7 @@
  */
  */
 ENTRY(__cpu_flush_user_tlb_range)
 ENTRY(__cpu_flush_user_tlb_range)
 	vma_vm_mm x3, x2			// get vma->vm_mm
 	vma_vm_mm x3, x2			// get vma->vm_mm
-	mmid	x3, x3				// get vm_mm->context.id
+	mmid	w3, x3				// get vm_mm->context.id
 	dsb	sy
 	dsb	sy
 	lsr	x0, x0, #12			// align address
 	lsr	x0, x0, #12			// align address
 	lsr	x1, x1, #12
 	lsr	x1, x1, #12

+ 1 - 1
arch/mips/alchemy/board-mtx1.c

@@ -276,7 +276,7 @@ static struct platform_device mtx1_pci_host = {
 	.resource	= alchemy_pci_host_res,
 	.resource	= alchemy_pci_host_res,
 };
 };
 
 
-static struct __initdata platform_device * mtx1_devs[] = {
+static struct platform_device *mtx1_devs[] __initdata = {
 	&mtx1_pci_host,
 	&mtx1_pci_host,
 	&mtx1_gpio_leds,
 	&mtx1_gpio_leds,
 	&mtx1_wdt,
 	&mtx1_wdt,

+ 1 - 1
arch/mips/include/asm/jump_label.h

@@ -22,7 +22,7 @@
 
 
 static __always_inline bool arch_static_branch(struct static_key *key)
 static __always_inline bool arch_static_branch(struct static_key *key)
 {
 {
-	asm goto("1:\tnop\n\t"
+	asm_volatile_goto("1:\tnop\n\t"
 		"nop\n\t"
 		"nop\n\t"
 		".pushsection __jump_table,  \"aw\"\n\t"
 		".pushsection __jump_table,  \"aw\"\n\t"
 		WORD_INSN " 1b, %l[l_yes], %0\n\t"
 		WORD_INSN " 1b, %l[l_yes], %0\n\t"

+ 1 - 1
arch/mips/kernel/octeon_switch.S

@@ -73,7 +73,7 @@
 3:
 3:
 
 
 #if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
 #if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
-	PTR_L	t8, __stack_chk_guard
+	PTR_LA	t8, __stack_chk_guard
 	LONG_L	t9, TASK_STACK_CANARY(a1)
 	LONG_L	t9, TASK_STACK_CANARY(a1)
 	LONG_S	t9, 0(t8)
 	LONG_S	t9, 0(t8)
 #endif
 #endif

+ 1 - 1
arch/mips/kernel/r2300_switch.S

@@ -67,7 +67,7 @@ LEAF(resume)
 1:
 1:
 
 
 #if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
 #if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
-	PTR_L	t8, __stack_chk_guard
+	PTR_LA	t8, __stack_chk_guard
 	LONG_L	t9, TASK_STACK_CANARY(a1)
 	LONG_L	t9, TASK_STACK_CANARY(a1)
 	LONG_S	t9, 0(t8)
 	LONG_S	t9, 0(t8)
 #endif
 #endif

+ 1 - 1
arch/mips/kernel/r4k_switch.S

@@ -69,7 +69,7 @@
 1:
 1:
 
 
 #if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
 #if defined(CONFIG_CC_STACKPROTECTOR) && !defined(CONFIG_SMP)
-	PTR_L	t8, __stack_chk_guard
+	PTR_LA	t8, __stack_chk_guard
 	LONG_L	t9, TASK_STACK_CANARY(a1)
 	LONG_L	t9, TASK_STACK_CANARY(a1)
 	LONG_S	t9, 0(t8)
 	LONG_S	t9, 0(t8)
 #endif
 #endif

+ 2 - 0
arch/mips/mm/c-r4k.c

@@ -609,6 +609,7 @@ static void r4k_dma_cache_wback_inv(unsigned long addr, unsigned long size)
 			r4k_blast_scache();
 			r4k_blast_scache();
 		else
 		else
 			blast_scache_range(addr, addr + size);
 			blast_scache_range(addr, addr + size);
+		preempt_enable();
 		__sync();
 		__sync();
 		return;
 		return;
 	}
 	}
@@ -650,6 +651,7 @@ static void r4k_dma_cache_inv(unsigned long addr, unsigned long size)
 			 */
 			 */
 			blast_inv_scache_range(addr, addr + size);
 			blast_inv_scache_range(addr, addr + size);
 		}
 		}
+		preempt_enable();
 		__sync();
 		__sync();
 		return;
 		return;
 	}
 	}

+ 2 - 0
arch/parisc/configs/712_defconfig

@@ -40,6 +40,8 @@ CONFIG_IP_NF_QUEUE=m
 CONFIG_LLC2=m
 CONFIG_LLC2=m
 CONFIG_NET_PKTGEN=m
 CONFIG_NET_PKTGEN=m
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
 # CONFIG_STANDALONE is not set
 # CONFIG_STANDALONE is not set
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
 CONFIG_PARPORT=y
 CONFIG_PARPORT=y

+ 2 - 0
arch/parisc/configs/a500_defconfig

@@ -79,6 +79,8 @@ CONFIG_IP_DCCP=m
 CONFIG_LLC2=m
 CONFIG_LLC2=m
 CONFIG_NET_PKTGEN=m
 CONFIG_NET_PKTGEN=m
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
 # CONFIG_STANDALONE is not set
 # CONFIG_STANDALONE is not set
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
 CONFIG_BLK_DEV_UMEM=m
 CONFIG_BLK_DEV_UMEM=m

+ 3 - 0
arch/parisc/configs/b180_defconfig

@@ -4,6 +4,7 @@ CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=16
 CONFIG_LOG_BUF_SHIFT=16
 CONFIG_SYSFS_DEPRECATED_V2=y
 CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_BLK_DEV_INITRD=y
 CONFIG_SLAB=y
 CONFIG_SLAB=y
 CONFIG_MODULES=y
 CONFIG_MODULES=y
 CONFIG_MODVERSIONS=y
 CONFIG_MODVERSIONS=y
@@ -27,6 +28,8 @@ CONFIG_IP_PNP_BOOTP=y
 # CONFIG_INET_LRO is not set
 # CONFIG_INET_LRO is not set
 CONFIG_IPV6=y
 CONFIG_IPV6=y
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
 CONFIG_PARPORT=y
 CONFIG_PARPORT=y
 CONFIG_PARPORT_PC=y
 CONFIG_PARPORT_PC=y

+ 3 - 0
arch/parisc/configs/c3000_defconfig

@@ -5,6 +5,7 @@ CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=16
 CONFIG_LOG_BUF_SHIFT=16
 CONFIG_SYSFS_DEPRECATED_V2=y
 CONFIG_SYSFS_DEPRECATED_V2=y
+CONFIG_BLK_DEV_INITRD=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_EXPERT=y
 CONFIG_EXPERT=y
 CONFIG_KALLSYMS_ALL=y
 CONFIG_KALLSYMS_ALL=y
@@ -39,6 +40,8 @@ CONFIG_NETFILTER_DEBUG=y
 CONFIG_IP_NF_QUEUE=m
 CONFIG_IP_NF_QUEUE=m
 CONFIG_NET_PKTGEN=m
 CONFIG_NET_PKTGEN=m
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
 # CONFIG_STANDALONE is not set
 # CONFIG_STANDALONE is not set
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
 CONFIG_BLK_DEV_UMEM=m
 CONFIG_BLK_DEV_UMEM=m

+ 2 - 0
arch/parisc/configs/c8000_defconfig

@@ -62,6 +62,8 @@ CONFIG_TIPC=m
 CONFIG_LLC2=m
 CONFIG_LLC2=m
 CONFIG_DNS_RESOLVER=y
 CONFIG_DNS_RESOLVER=y
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
 # CONFIG_STANDALONE is not set
 # CONFIG_STANDALONE is not set
 CONFIG_PARPORT=y
 CONFIG_PARPORT=y
 CONFIG_PARPORT_PC=y
 CONFIG_PARPORT_PC=y

+ 2 - 0
arch/parisc/configs/default_defconfig

@@ -49,6 +49,8 @@ CONFIG_INET6_ESP=y
 CONFIG_INET6_IPCOMP=y
 CONFIG_INET6_IPCOMP=y
 CONFIG_LLC2=m
 CONFIG_LLC2=m
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
 CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
 # CONFIG_STANDALONE is not set
 # CONFIG_STANDALONE is not set
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
 # CONFIG_PREVENT_FIRMWARE_BUILD is not set
 CONFIG_PARPORT=y
 CONFIG_PARPORT=y

+ 1 - 1
arch/parisc/include/asm/traps.h

@@ -6,7 +6,7 @@ struct pt_regs;
 
 
 /* traps.c */
 /* traps.c */
 void parisc_terminate(char *msg, struct pt_regs *regs,
 void parisc_terminate(char *msg, struct pt_regs *regs,
-		int code, unsigned long offset);
+		int code, unsigned long offset) __noreturn __cold;
 
 
 /* mm/fault.c */
 /* mm/fault.c */
 void do_page_fault(struct pt_regs *regs, unsigned long code,
 void do_page_fault(struct pt_regs *regs, unsigned long code,

+ 1 - 7
arch/parisc/kernel/smp.c

@@ -72,7 +72,6 @@ enum ipi_message_type {
 	IPI_NOP=0,
 	IPI_NOP=0,
 	IPI_RESCHEDULE=1,
 	IPI_RESCHEDULE=1,
 	IPI_CALL_FUNC,
 	IPI_CALL_FUNC,
-	IPI_CALL_FUNC_SINGLE,
 	IPI_CPU_START,
 	IPI_CPU_START,
 	IPI_CPU_STOP,
 	IPI_CPU_STOP,
 	IPI_CPU_TEST
 	IPI_CPU_TEST
@@ -164,11 +163,6 @@ ipi_interrupt(int irq, void *dev_id)
 				generic_smp_call_function_interrupt();
 				generic_smp_call_function_interrupt();
 				break;
 				break;
 
 
-			case IPI_CALL_FUNC_SINGLE:
-				smp_debug(100, KERN_DEBUG "CPU%d IPI_CALL_FUNC_SINGLE\n", this_cpu);
-				generic_smp_call_function_single_interrupt();
-				break;
-
 			case IPI_CPU_START:
 			case IPI_CPU_START:
 				smp_debug(100, KERN_DEBUG "CPU%d IPI_CPU_START\n", this_cpu);
 				smp_debug(100, KERN_DEBUG "CPU%d IPI_CPU_START\n", this_cpu);
 				break;
 				break;
@@ -260,7 +254,7 @@ void arch_send_call_function_ipi_mask(const struct cpumask *mask)
 
 
 void arch_send_call_function_single_ipi(int cpu)
 void arch_send_call_function_single_ipi(int cpu)
 {
 {
-	send_IPI_single(cpu, IPI_CALL_FUNC_SINGLE);
+	send_IPI_single(cpu, IPI_CALL_FUNC);
 }
 }
 
 
 /*
 /*

+ 3 - 8
arch/parisc/kernel/traps.c

@@ -291,11 +291,6 @@ void die_if_kernel(char *str, struct pt_regs *regs, long err)
 	do_exit(SIGSEGV);
 	do_exit(SIGSEGV);
 }
 }
 
 
-int syscall_ipi(int (*syscall) (struct pt_regs *), struct pt_regs *regs)
-{
-	return syscall(regs);
-}
-
 /* gdb uses break 4,8 */
 /* gdb uses break 4,8 */
 #define GDB_BREAK_INSN 0x10004
 #define GDB_BREAK_INSN 0x10004
 static void handle_gdb_break(struct pt_regs *regs, int wot)
 static void handle_gdb_break(struct pt_regs *regs, int wot)
@@ -805,14 +800,14 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
 	else {
 	else {
 
 
 	    /*
 	    /*
-	     * The kernel should never fault on its own address space.
+	     * The kernel should never fault on its own address space,
+	     * unless pagefault_disable() was called before.
 	     */
 	     */
 
 
-	    if (fault_space == 0) 
+	    if (fault_space == 0 && !in_atomic())
 	    {
 	    {
 		pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);
 		pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);
 		parisc_terminate("Kernel Fault", regs, code, fault_address);
 		parisc_terminate("Kernel Fault", regs, code, fault_address);
-	
 	    }
 	    }
 	}
 	}
 
 

+ 14 - 1
arch/parisc/lib/memcpy.c

@@ -56,7 +56,7 @@
 #ifdef __KERNEL__
 #ifdef __KERNEL__
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/compiler.h>
 #include <linux/compiler.h>
-#include <asm/uaccess.h>
+#include <linux/uaccess.h>
 #define s_space "%%sr1"
 #define s_space "%%sr1"
 #define d_space "%%sr2"
 #define d_space "%%sr2"
 #else
 #else
@@ -524,4 +524,17 @@ EXPORT_SYMBOL(copy_to_user);
 EXPORT_SYMBOL(copy_from_user);
 EXPORT_SYMBOL(copy_from_user);
 EXPORT_SYMBOL(copy_in_user);
 EXPORT_SYMBOL(copy_in_user);
 EXPORT_SYMBOL(memcpy);
 EXPORT_SYMBOL(memcpy);
+
+long probe_kernel_read(void *dst, const void *src, size_t size)
+{
+	unsigned long addr = (unsigned long)src;
+
+	if (size < 0 || addr < PAGE_SIZE)
+		return -EFAULT;
+
+	/* check for I/O space F_EXTEND(0xfff00000) access as well? */
+
+	return __probe_kernel_read(dst, src, size);
+}
+
 #endif
 #endif

+ 10 - 5
arch/parisc/mm/fault.c

@@ -171,20 +171,25 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
 			      unsigned long address)
 			      unsigned long address)
 {
 {
 	struct vm_area_struct *vma, *prev_vma;
 	struct vm_area_struct *vma, *prev_vma;
-	struct task_struct *tsk = current;
-	struct mm_struct *mm = tsk->mm;
+	struct task_struct *tsk;
+	struct mm_struct *mm;
 	unsigned long acc_type;
 	unsigned long acc_type;
 	int fault;
 	int fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags;
 
 
-	if (in_atomic() || !mm)
+	if (in_atomic())
 		goto no_context;
 		goto no_context;
 
 
+	tsk = current;
+	mm = tsk->mm;
+	if (!mm)
+		goto no_context;
+
+	flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
 	if (user_mode(regs))
 	if (user_mode(regs))
 		flags |= FAULT_FLAG_USER;
 		flags |= FAULT_FLAG_USER;
 
 
 	acc_type = parisc_acctyp(code, regs->iir);
 	acc_type = parisc_acctyp(code, regs->iir);
-
 	if (acc_type & VM_WRITE)
 	if (acc_type & VM_WRITE)
 		flags |= FAULT_FLAG_WRITE;
 		flags |= FAULT_FLAG_WRITE;
 retry:
 retry:

+ 1 - 1
arch/powerpc/include/asm/jump_label.h

@@ -19,7 +19,7 @@
 
 
 static __always_inline bool arch_static_branch(struct static_key *key)
 static __always_inline bool arch_static_branch(struct static_key *key)
 {
 {
-	asm goto("1:\n\t"
+	asm_volatile_goto("1:\n\t"
 		 "nop\n\t"
 		 "nop\n\t"
 		 ".pushsection __jump_table,  \"aw\"\n\t"
 		 ".pushsection __jump_table,  \"aw\"\n\t"
 		 JUMP_ENTRY_TYPE "1b, %l[l_yes], %c0\n\t"
 		 JUMP_ENTRY_TYPE "1b, %l[l_yes], %c0\n\t"

+ 1 - 1
arch/powerpc/kernel/iommu.c

@@ -661,7 +661,7 @@ struct iommu_table *iommu_init_table(struct iommu_table *tbl, int nid)
 	/* number of bytes needed for the bitmap */
 	/* number of bytes needed for the bitmap */
 	sz = BITS_TO_LONGS(tbl->it_size) * sizeof(unsigned long);
 	sz = BITS_TO_LONGS(tbl->it_size) * sizeof(unsigned long);
 
 
-	page = alloc_pages_node(nid, GFP_ATOMIC, get_order(sz));
+	page = alloc_pages_node(nid, GFP_KERNEL, get_order(sz));
 	if (!page)
 	if (!page)
 		panic("iommu_init_table: Can't allocate %ld bytes\n", sz);
 		panic("iommu_init_table: Can't allocate %ld bytes\n", sz);
 	tbl->it_map = page_address(page);
 	tbl->it_map = page_address(page);

+ 3 - 2
arch/powerpc/kernel/irq.c

@@ -495,14 +495,15 @@ void __do_irq(struct pt_regs *regs)
 void do_IRQ(struct pt_regs *regs)
 void do_IRQ(struct pt_regs *regs)
 {
 {
 	struct pt_regs *old_regs = set_irq_regs(regs);
 	struct pt_regs *old_regs = set_irq_regs(regs);
-	struct thread_info *curtp, *irqtp;
+	struct thread_info *curtp, *irqtp, *sirqtp;
 
 
 	/* Switch to the irq stack to handle this */
 	/* Switch to the irq stack to handle this */
 	curtp = current_thread_info();
 	curtp = current_thread_info();
 	irqtp = hardirq_ctx[raw_smp_processor_id()];
 	irqtp = hardirq_ctx[raw_smp_processor_id()];
+	sirqtp = softirq_ctx[raw_smp_processor_id()];
 
 
 	/* Already there ? */
 	/* Already there ? */
-	if (unlikely(curtp == irqtp)) {
+	if (unlikely(curtp == irqtp || curtp == sirqtp)) {
 		__do_irq(regs);
 		__do_irq(regs);
 		set_irq_regs(old_regs);
 		set_irq_regs(old_regs);
 		return;
 		return;

+ 16 - 2
arch/powerpc/kernel/sysfs.c

@@ -17,6 +17,7 @@
 #include <asm/machdep.h>
 #include <asm/machdep.h>
 #include <asm/smp.h>
 #include <asm/smp.h>
 #include <asm/pmc.h>
 #include <asm/pmc.h>
+#include <asm/firmware.h>
 
 
 #include "cacheinfo.h"
 #include "cacheinfo.h"
 
 
@@ -179,15 +180,25 @@ SYSFS_PMCSETUP(spurr, SPRN_SPURR);
 SYSFS_PMCSETUP(dscr, SPRN_DSCR);
 SYSFS_PMCSETUP(dscr, SPRN_DSCR);
 SYSFS_PMCSETUP(pir, SPRN_PIR);
 SYSFS_PMCSETUP(pir, SPRN_PIR);
 
 
+/*
+  Lets only enable read for phyp resources and
+  enable write when needed with a separate function.
+  Lets be conservative and default to pseries.
+*/
 static DEVICE_ATTR(mmcra, 0600, show_mmcra, store_mmcra);
 static DEVICE_ATTR(mmcra, 0600, show_mmcra, store_mmcra);
 static DEVICE_ATTR(spurr, 0400, show_spurr, NULL);
 static DEVICE_ATTR(spurr, 0400, show_spurr, NULL);
 static DEVICE_ATTR(dscr, 0600, show_dscr, store_dscr);
 static DEVICE_ATTR(dscr, 0600, show_dscr, store_dscr);
-static DEVICE_ATTR(purr, 0600, show_purr, store_purr);
+static DEVICE_ATTR(purr, 0400, show_purr, store_purr);
 static DEVICE_ATTR(pir, 0400, show_pir, NULL);
 static DEVICE_ATTR(pir, 0400, show_pir, NULL);
 
 
 unsigned long dscr_default = 0;
 unsigned long dscr_default = 0;
 EXPORT_SYMBOL(dscr_default);
 EXPORT_SYMBOL(dscr_default);
 
 
+static void add_write_permission_dev_attr(struct device_attribute *attr)
+{
+	attr->attr.mode |= 0200;
+}
+
 static ssize_t show_dscr_default(struct device *dev,
 static ssize_t show_dscr_default(struct device *dev,
 		struct device_attribute *attr, char *buf)
 		struct device_attribute *attr, char *buf)
 {
 {
@@ -394,8 +405,11 @@ static void register_cpu_online(unsigned int cpu)
 	if (cpu_has_feature(CPU_FTR_MMCRA))
 	if (cpu_has_feature(CPU_FTR_MMCRA))
 		device_create_file(s, &dev_attr_mmcra);
 		device_create_file(s, &dev_attr_mmcra);
 
 
-	if (cpu_has_feature(CPU_FTR_PURR))
+	if (cpu_has_feature(CPU_FTR_PURR)) {
+		if (!firmware_has_feature(FW_FEATURE_LPAR))
+			add_write_permission_dev_attr(&dev_attr_purr);
 		device_create_file(s, &dev_attr_purr);
 		device_create_file(s, &dev_attr_purr);
+	}
 
 
 	if (cpu_has_feature(CPU_FTR_SPURR))
 	if (cpu_has_feature(CPU_FTR_SPURR))
 		device_create_file(s, &dev_attr_spurr);
 		device_create_file(s, &dev_attr_spurr);

+ 64 - 31
arch/powerpc/kernel/tm.S

@@ -79,6 +79,11 @@ _GLOBAL(tm_abort)
 	TABORT(R3)
 	TABORT(R3)
 	blr
 	blr
 
 
+	.section	".toc","aw"
+DSCR_DEFAULT:
+	.tc dscr_default[TC],dscr_default
+
+	.section	".text"
 
 
 /* void tm_reclaim(struct thread_struct *thread,
 /* void tm_reclaim(struct thread_struct *thread,
  *                 unsigned long orig_msr,
  *                 unsigned long orig_msr,
@@ -123,6 +128,7 @@ _GLOBAL(tm_reclaim)
 	mr	r15, r14
 	mr	r15, r14
 	ori	r15, r15, MSR_FP
 	ori	r15, r15, MSR_FP
 	li	r16, MSR_RI
 	li	r16, MSR_RI
+	ori	r16, r16, MSR_EE /* IRQs hard off */
 	andc	r15, r15, r16
 	andc	r15, r15, r16
 	oris	r15, r15, MSR_VEC@h
 	oris	r15, r15, MSR_VEC@h
 #ifdef CONFIG_VSX
 #ifdef CONFIG_VSX
@@ -187,11 +193,18 @@ dont_backup_fp:
 	std	r1, PACATMSCRATCH(r13)
 	std	r1, PACATMSCRATCH(r13)
 	ld	r1, PACAR1(r13)
 	ld	r1, PACAR1(r13)
 
 
+	/* Store the PPR in r11 and reset to decent value */
+	std	r11, GPR11(r1)			/* Temporary stash */
+	mfspr	r11, SPRN_PPR
+	HMT_MEDIUM
+
 	/* Now get some more GPRS free */
 	/* Now get some more GPRS free */
 	std	r7, GPR7(r1)			/* Temporary stash */
 	std	r7, GPR7(r1)			/* Temporary stash */
 	std	r12, GPR12(r1)			/* ''   ''    ''   */
 	std	r12, GPR12(r1)			/* ''   ''    ''   */
 	ld	r12, STACK_PARAM(0)(r1)		/* Param 0, thread_struct * */
 	ld	r12, STACK_PARAM(0)(r1)		/* Param 0, thread_struct * */
 
 
+	std	r11, THREAD_TM_PPR(r12)		/* Store PPR and free r11 */
+
 	addi	r7, r12, PT_CKPT_REGS		/* Thread's ckpt_regs */
 	addi	r7, r12, PT_CKPT_REGS		/* Thread's ckpt_regs */
 
 
 	/* Make r7 look like an exception frame so that we
 	/* Make r7 look like an exception frame so that we
@@ -203,15 +216,19 @@ dont_backup_fp:
 	SAVE_GPR(0, r7)				/* user r0 */
 	SAVE_GPR(0, r7)				/* user r0 */
 	SAVE_GPR(2, r7)			/* user r2 */
 	SAVE_GPR(2, r7)			/* user r2 */
 	SAVE_4GPRS(3, r7)			/* user r3-r6 */
 	SAVE_4GPRS(3, r7)			/* user r3-r6 */
-	SAVE_4GPRS(8, r7)			/* user r8-r11 */
+	SAVE_GPR(8, r7)				/* user r8 */
+	SAVE_GPR(9, r7)				/* user r9 */
+	SAVE_GPR(10, r7)			/* user r10 */
 	ld	r3, PACATMSCRATCH(r13)		/* user r1 */
 	ld	r3, PACATMSCRATCH(r13)		/* user r1 */
 	ld	r4, GPR7(r1)			/* user r7 */
 	ld	r4, GPR7(r1)			/* user r7 */
-	ld	r5, GPR12(r1)			/* user r12 */
-	GET_SCRATCH0(6)				/* user r13 */
+	ld	r5, GPR11(r1)			/* user r11 */
+	ld	r6, GPR12(r1)			/* user r12 */
+	GET_SCRATCH0(8)				/* user r13 */
 	std	r3, GPR1(r7)
 	std	r3, GPR1(r7)
 	std	r4, GPR7(r7)
 	std	r4, GPR7(r7)
-	std	r5, GPR12(r7)
-	std	r6, GPR13(r7)
+	std	r5, GPR11(r7)
+	std	r6, GPR12(r7)
+	std	r8, GPR13(r7)
 
 
 	SAVE_NVGPRS(r7)				/* user r14-r31 */
 	SAVE_NVGPRS(r7)				/* user r14-r31 */
 
 
@@ -234,14 +251,12 @@ dont_backup_fp:
 	std	r6, _XER(r7)
 	std	r6, _XER(r7)
 
 
 
 
-	/* ******************** TAR, PPR, DSCR ********** */
+	/* ******************** TAR, DSCR ********** */
 	mfspr	r3, SPRN_TAR
 	mfspr	r3, SPRN_TAR
-	mfspr	r4, SPRN_PPR
-	mfspr	r5, SPRN_DSCR
+	mfspr	r4, SPRN_DSCR
 
 
 	std	r3, THREAD_TM_TAR(r12)
 	std	r3, THREAD_TM_TAR(r12)
-	std	r4, THREAD_TM_PPR(r12)
-	std	r5, THREAD_TM_DSCR(r12)
+	std	r4, THREAD_TM_DSCR(r12)
 
 
 	/* MSR and flags:  We don't change CRs, and we don't need to alter
 	/* MSR and flags:  We don't change CRs, and we don't need to alter
 	 * MSR.
 	 * MSR.
@@ -258,7 +273,7 @@ dont_backup_fp:
 	std	r3, THREAD_TM_TFHAR(r12)
 	std	r3, THREAD_TM_TFHAR(r12)
 	std	r4, THREAD_TM_TFIAR(r12)
 	std	r4, THREAD_TM_TFIAR(r12)
 
 
-	/* AMR and PPR are checkpointed too, but are unsupported by Linux. */
+	/* AMR is checkpointed too, but is unsupported by Linux. */
 
 
 	/* Restore original MSR/IRQ state & clear TM mode */
 	/* Restore original MSR/IRQ state & clear TM mode */
 	ld	r14, TM_FRAME_L0(r1)		/* Orig MSR */
 	ld	r14, TM_FRAME_L0(r1)		/* Orig MSR */
@@ -274,6 +289,12 @@ dont_backup_fp:
 	mtcr	r4
 	mtcr	r4
 	mtlr	r0
 	mtlr	r0
 	ld	r2, 40(r1)
 	ld	r2, 40(r1)
+
+	/* Load system default DSCR */
+	ld	r4, DSCR_DEFAULT@toc(r2)
+	ld	r0, 0(r4)
+	mtspr	SPRN_DSCR, r0
+
 	blr
 	blr
 
 
 
 
@@ -358,25 +379,24 @@ dont_restore_fp:
 
 
 restore_gprs:
 restore_gprs:
 
 
-	/* ******************** TAR, PPR, DSCR ********** */
-	ld	r4, THREAD_TM_TAR(r3)
-	ld	r5, THREAD_TM_PPR(r3)
-	ld	r6, THREAD_TM_DSCR(r3)
+	/* ******************** CR,LR,CCR,MSR ********** */
+	ld	r4, _CTR(r7)
+	ld	r5, _LINK(r7)
+	ld	r6, _CCR(r7)
+	ld	r8, _XER(r7)
 
 
-	mtspr	SPRN_TAR,	r4
-	mtspr	SPRN_PPR,	r5
-	mtspr	SPRN_DSCR,	r6
+	mtctr	r4
+	mtlr	r5
+	mtcr	r6
+	mtxer	r8
 
 
-	/* ******************** CR,LR,CCR,MSR ********** */
-	ld	r3, _CTR(r7)
-	ld	r4, _LINK(r7)
-	ld	r5, _CCR(r7)
-	ld	r6, _XER(r7)
+	/* ******************** TAR ******************** */
+	ld	r4, THREAD_TM_TAR(r3)
+	mtspr	SPRN_TAR,	r4
 
 
-	mtctr	r3
-	mtlr	r4
-	mtcr	r5
-	mtxer	r6
+	/* Load up the PPR and DSCR in GPRs only at this stage */
+	ld	r5, THREAD_TM_DSCR(r3)
+	ld	r6, THREAD_TM_PPR(r3)
 
 
 	/* Clear the MSR RI since we are about to change R1.  EE is already off
 	/* Clear the MSR RI since we are about to change R1.  EE is already off
 	 */
 	 */
@@ -384,19 +404,26 @@ restore_gprs:
 	mtmsrd	r4, 1
 	mtmsrd	r4, 1
 
 
 	REST_4GPRS(0, r7)			/* GPR0-3 */
 	REST_4GPRS(0, r7)			/* GPR0-3 */
-	REST_GPR(4, r7)				/* GPR4-6 */
-	REST_GPR(5, r7)
-	REST_GPR(6, r7)
+	REST_GPR(4, r7)				/* GPR4 */
 	REST_4GPRS(8, r7)			/* GPR8-11 */
 	REST_4GPRS(8, r7)			/* GPR8-11 */
 	REST_2GPRS(12, r7)			/* GPR12-13 */
 	REST_2GPRS(12, r7)			/* GPR12-13 */
 
 
 	REST_NVGPRS(r7)				/* GPR14-31 */
 	REST_NVGPRS(r7)				/* GPR14-31 */
 
 
-	ld	r7, GPR7(r7)			/* GPR7 */
+	/* Load up PPR and DSCR here so we don't run with user values for long
+	 */
+	mtspr	SPRN_DSCR, r5
+	mtspr	SPRN_PPR, r6
+
+	REST_GPR(5, r7)				/* GPR5-7 */
+	REST_GPR(6, r7)
+	ld	r7, GPR7(r7)
 
 
 	/* Commit register state as checkpointed state: */
 	/* Commit register state as checkpointed state: */
 	TRECHKPT
 	TRECHKPT
 
 
+	HMT_MEDIUM
+
 	/* Our transactional state has now changed.
 	/* Our transactional state has now changed.
 	 *
 	 *
 	 * Now just get out of here.  Transactional (current) state will be
 	 * Now just get out of here.  Transactional (current) state will be
@@ -419,6 +446,12 @@ restore_gprs:
 	mtcr	r4
 	mtcr	r4
 	mtlr	r0
 	mtlr	r0
 	ld	r2, 40(r1)
 	ld	r2, 40(r1)
+
+	/* Load system default DSCR */
+	ld	r4, DSCR_DEFAULT@toc(r2)
+	ld	r0, 0(r4)
+	mtspr	SPRN_DSCR, r0
+
 	blr
 	blr
 
 
 	/* ****************************************************************** */
 	/* ****************************************************************** */

+ 8 - 4
arch/powerpc/kernel/vio.c

@@ -1530,11 +1530,15 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
 	const char *cp;
 	const char *cp;
 
 
 	dn = dev->of_node;
 	dn = dev->of_node;
-	if (!dn)
-		return -ENODEV;
+	if (!dn) {
+		strcat(buf, "\n");
+		return strlen(buf);
+	}
 	cp = of_get_property(dn, "compatible", NULL);
 	cp = of_get_property(dn, "compatible", NULL);
-	if (!cp)
-		return -ENODEV;
+	if (!cp) {
+		strcat(buf, "\n");
+		return strlen(buf);
+	}
 
 
 	return sprintf(buf, "vio:T%sS%s\n", vio_dev->type, cp);
 	return sprintf(buf, "vio:T%sS%s\n", vio_dev->type, cp);
 }
 }

+ 1 - 1
arch/powerpc/kvm/book3s_hv_rmhandlers.S

@@ -1066,7 +1066,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206)
 BEGIN_FTR_SECTION
 BEGIN_FTR_SECTION
 	mfspr	r8, SPRN_DSCR
 	mfspr	r8, SPRN_DSCR
 	ld	r7, HSTATE_DSCR(r13)
 	ld	r7, HSTATE_DSCR(r13)
-	std	r8, VCPU_DSCR(r7)
+	std	r8, VCPU_DSCR(r9)
 	mtspr	SPRN_DSCR, r7
 	mtspr	SPRN_DSCR, r7
 END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206)
 END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206)
 
 

+ 17 - 1
arch/powerpc/kvm/e500_mmu_host.c

@@ -332,6 +332,13 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
 	unsigned long hva;
 	unsigned long hva;
 	int pfnmap = 0;
 	int pfnmap = 0;
 	int tsize = BOOK3E_PAGESZ_4K;
 	int tsize = BOOK3E_PAGESZ_4K;
+	int ret = 0;
+	unsigned long mmu_seq;
+	struct kvm *kvm = vcpu_e500->vcpu.kvm;
+
+	/* used to check for invalidations in progress */
+	mmu_seq = kvm->mmu_notifier_seq;
+	smp_rmb();
 
 
 	/*
 	/*
 	 * Translate guest physical to true physical, acquiring
 	 * Translate guest physical to true physical, acquiring
@@ -449,6 +456,12 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
 		gvaddr &= ~((tsize_pages << PAGE_SHIFT) - 1);
 		gvaddr &= ~((tsize_pages << PAGE_SHIFT) - 1);
 	}
 	}
 
 
+	spin_lock(&kvm->mmu_lock);
+	if (mmu_notifier_retry(kvm, mmu_seq)) {
+		ret = -EAGAIN;
+		goto out;
+	}
+
 	kvmppc_e500_ref_setup(ref, gtlbe, pfn);
 	kvmppc_e500_ref_setup(ref, gtlbe, pfn);
 
 
 	kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize,
 	kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize,
@@ -457,10 +470,13 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
 	/* Clear i-cache for new pages */
 	/* Clear i-cache for new pages */
 	kvmppc_mmu_flush_icache(pfn);
 	kvmppc_mmu_flush_icache(pfn);
 
 
+out:
+	spin_unlock(&kvm->mmu_lock);
+
 	/* Drop refcount on page, so that mmu notifiers can clear it */
 	/* Drop refcount on page, so that mmu notifiers can clear it */
 	kvm_release_pfn_clean(pfn);
 	kvm_release_pfn_clean(pfn);
 
 
-	return 0;
+	return ret;
 }
 }
 
 
 /* XXX only map the one-one case, for now use TLB0 */
 /* XXX only map the one-one case, for now use TLB0 */

+ 42 - 16
arch/powerpc/lib/checksum_64.S

@@ -226,19 +226,35 @@ _GLOBAL(csum_partial)
 	blr
 	blr
 
 
 
 
-	.macro source
+	.macro srcnr
 100:
 100:
 	.section __ex_table,"a"
 	.section __ex_table,"a"
 	.align 3
 	.align 3
-	.llong 100b,.Lsrc_error
+	.llong 100b,.Lsrc_error_nr
 	.previous
 	.previous
 	.endm
 	.endm
 
 
-	.macro dest
+	.macro source
+150:
+	.section __ex_table,"a"
+	.align 3
+	.llong 150b,.Lsrc_error
+	.previous
+	.endm
+
+	.macro dstnr
 200:
 200:
 	.section __ex_table,"a"
 	.section __ex_table,"a"
 	.align 3
 	.align 3
-	.llong 200b,.Ldest_error
+	.llong 200b,.Ldest_error_nr
+	.previous
+	.endm
+
+	.macro dest
+250:
+	.section __ex_table,"a"
+	.align 3
+	.llong 250b,.Ldest_error
 	.previous
 	.previous
 	.endm
 	.endm
 
 
@@ -269,16 +285,16 @@ _GLOBAL(csum_partial_copy_generic)
 	rldicl. r6,r3,64-1,64-2		/* r6 = (r3 & 0x3) >> 1 */
 	rldicl. r6,r3,64-1,64-2		/* r6 = (r3 & 0x3) >> 1 */
 	beq	.Lcopy_aligned
 	beq	.Lcopy_aligned
 
 
-	li	r7,4
-	sub	r6,r7,r6
+	li	r9,4
+	sub	r6,r9,r6
 	mtctr	r6
 	mtctr	r6
 
 
 1:
 1:
-source;	lhz	r6,0(r3)		/* align to doubleword */
+srcnr;	lhz	r6,0(r3)		/* align to doubleword */
 	subi	r5,r5,2
 	subi	r5,r5,2
 	addi	r3,r3,2
 	addi	r3,r3,2
 	adde	r0,r0,r6
 	adde	r0,r0,r6
-dest;	sth	r6,0(r4)
+dstnr;	sth	r6,0(r4)
 	addi	r4,r4,2
 	addi	r4,r4,2
 	bdnz	1b
 	bdnz	1b
 
 
@@ -392,10 +408,10 @@ dest;	std	r16,56(r4)
 
 
 	mtctr	r6
 	mtctr	r6
 3:
 3:
-source;	ld	r6,0(r3)
+srcnr;	ld	r6,0(r3)
 	addi	r3,r3,8
 	addi	r3,r3,8
 	adde	r0,r0,r6
 	adde	r0,r0,r6
-dest;	std	r6,0(r4)
+dstnr;	std	r6,0(r4)
 	addi	r4,r4,8
 	addi	r4,r4,8
 	bdnz	3b
 	bdnz	3b
 
 
@@ -405,10 +421,10 @@ dest;	std	r6,0(r4)
 	srdi.	r6,r5,2
 	srdi.	r6,r5,2
 	beq	.Lcopy_tail_halfword
 	beq	.Lcopy_tail_halfword
 
 
-source;	lwz	r6,0(r3)
+srcnr;	lwz	r6,0(r3)
 	addi	r3,r3,4
 	addi	r3,r3,4
 	adde	r0,r0,r6
 	adde	r0,r0,r6
-dest;	stw	r6,0(r4)
+dstnr;	stw	r6,0(r4)
 	addi	r4,r4,4
 	addi	r4,r4,4
 	subi	r5,r5,4
 	subi	r5,r5,4
 
 
@@ -416,10 +432,10 @@ dest;	stw	r6,0(r4)
 	srdi.	r6,r5,1
 	srdi.	r6,r5,1
 	beq	.Lcopy_tail_byte
 	beq	.Lcopy_tail_byte
 
 
-source;	lhz	r6,0(r3)
+srcnr;	lhz	r6,0(r3)
 	addi	r3,r3,2
 	addi	r3,r3,2
 	adde	r0,r0,r6
 	adde	r0,r0,r6
-dest;	sth	r6,0(r4)
+dstnr;	sth	r6,0(r4)
 	addi	r4,r4,2
 	addi	r4,r4,2
 	subi	r5,r5,2
 	subi	r5,r5,2
 
 
@@ -427,10 +443,10 @@ dest;	sth	r6,0(r4)
 	andi.	r6,r5,1
 	andi.	r6,r5,1
 	beq	.Lcopy_finish
 	beq	.Lcopy_finish
 
 
-source;	lbz	r6,0(r3)
+srcnr;	lbz	r6,0(r3)
 	sldi	r9,r6,8			/* Pad the byte out to 16 bits */
 	sldi	r9,r6,8			/* Pad the byte out to 16 bits */
 	adde	r0,r0,r9
 	adde	r0,r0,r9
-dest;	stb	r6,0(r4)
+dstnr;	stb	r6,0(r4)
 
 
 .Lcopy_finish:
 .Lcopy_finish:
 	addze	r0,r0			/* add in final carry */
 	addze	r0,r0			/* add in final carry */
@@ -440,6 +456,11 @@ dest;	stb	r6,0(r4)
 	blr
 	blr
 
 
 .Lsrc_error:
 .Lsrc_error:
+	ld	r14,STK_REG(R14)(r1)
+	ld	r15,STK_REG(R15)(r1)
+	ld	r16,STK_REG(R16)(r1)
+	addi	r1,r1,STACKFRAMESIZE
+.Lsrc_error_nr:
 	cmpdi	0,r7,0
 	cmpdi	0,r7,0
 	beqlr
 	beqlr
 	li	r6,-EFAULT
 	li	r6,-EFAULT
@@ -447,6 +468,11 @@ dest;	stb	r6,0(r4)
 	blr
 	blr
 
 
 .Ldest_error:
 .Ldest_error:
+	ld	r14,STK_REG(R14)(r1)
+	ld	r15,STK_REG(R15)(r1)
+	ld	r16,STK_REG(R16)(r1)
+	addi	r1,r1,STACKFRAMESIZE
+.Ldest_error_nr:
 	cmpdi	0,r8,0
 	cmpdi	0,r8,0
 	beqlr
 	beqlr
 	li	r6,-EFAULT
 	li	r6,-EFAULT

+ 4 - 0
arch/powerpc/mm/init_64.c

@@ -300,5 +300,9 @@ void vmemmap_free(unsigned long start, unsigned long end)
 {
 {
 }
 }
 
 
+void register_page_bootmem_memmap(unsigned long section_nr,
+				  struct page *start_page, unsigned long size)
+{
+}
 #endif /* CONFIG_SPARSEMEM_VMEMMAP */
 #endif /* CONFIG_SPARSEMEM_VMEMMAP */
 
 

+ 9 - 0
arch/powerpc/mm/mem.c

@@ -297,12 +297,21 @@ void __init paging_init(void)
 }
 }
 #endif /* ! CONFIG_NEED_MULTIPLE_NODES */
 #endif /* ! CONFIG_NEED_MULTIPLE_NODES */
 
 
+static void __init register_page_bootmem_info(void)
+{
+	int i;
+
+	for_each_online_node(i)
+		register_page_bootmem_info_node(NODE_DATA(i));
+}
+
 void __init mem_init(void)
 void __init mem_init(void)
 {
 {
 #ifdef CONFIG_SWIOTLB
 #ifdef CONFIG_SWIOTLB
 	swiotlb_init(0);
 	swiotlb_init(0);
 #endif
 #endif
 
 
+	register_page_bootmem_info();
 	high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
 	high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
 	set_max_mapnr(max_pfn);
 	set_max_mapnr(max_pfn);
 	free_all_bootmem();
 	free_all_bootmem();

+ 3 - 2
arch/powerpc/perf/power8-pmu.c

@@ -199,6 +199,7 @@
 #define MMCR1_UNIT_SHIFT(pmc)		(60 - (4 * ((pmc) - 1)))
 #define MMCR1_UNIT_SHIFT(pmc)		(60 - (4 * ((pmc) - 1)))
 #define MMCR1_COMBINE_SHIFT(pmc)	(35 - ((pmc) - 1))
 #define MMCR1_COMBINE_SHIFT(pmc)	(35 - ((pmc) - 1))
 #define MMCR1_PMCSEL_SHIFT(pmc)		(24 - (((pmc) - 1)) * 8)
 #define MMCR1_PMCSEL_SHIFT(pmc)		(24 - (((pmc) - 1)) * 8)
+#define MMCR1_FAB_SHIFT			36
 #define MMCR1_DC_QUAL_SHIFT		47
 #define MMCR1_DC_QUAL_SHIFT		47
 #define MMCR1_IC_QUAL_SHIFT		46
 #define MMCR1_IC_QUAL_SHIFT		46
 
 
@@ -388,8 +389,8 @@ static int power8_compute_mmcr(u64 event[], int n_ev,
 		 * the threshold bits are used for the match value.
 		 * the threshold bits are used for the match value.
 		 */
 		 */
 		if (event_is_fab_match(event[i])) {
 		if (event_is_fab_match(event[i])) {
-			mmcr1 |= (event[i] >> EVENT_THR_CTL_SHIFT) &
-				  EVENT_THR_CTL_MASK;
+			mmcr1 |= ((event[i] >> EVENT_THR_CTL_SHIFT) &
+				  EVENT_THR_CTL_MASK) << MMCR1_FAB_SHIFT;
 		} else {
 		} else {
 			val = (event[i] >> EVENT_THR_CTL_SHIFT) & EVENT_THR_CTL_MASK;
 			val = (event[i] >> EVENT_THR_CTL_SHIFT) & EVENT_THR_CTL_MASK;
 			mmcra |= val << MMCRA_THR_CTL_SHIFT;
 			mmcra |= val << MMCRA_THR_CTL_SHIFT;

+ 1 - 1
arch/s390/include/asm/jump_label.h

@@ -15,7 +15,7 @@
 
 
 static __always_inline bool arch_static_branch(struct static_key *key)
 static __always_inline bool arch_static_branch(struct static_key *key)
 {
 {
-	asm goto("0:	brcl 0,0\n"
+	asm_volatile_goto("0:	brcl 0,0\n"
 		".pushsection __jump_table, \"aw\"\n"
 		".pushsection __jump_table, \"aw\"\n"
 		ASM_ALIGN "\n"
 		ASM_ALIGN "\n"
 		ASM_PTR " 0b, %l[label], %0\n"
 		ASM_PTR " 0b, %l[label], %0\n"

+ 3 - 1
arch/s390/include/asm/pgtable.h

@@ -748,7 +748,9 @@ static inline void pgste_set_key(pte_t *ptep, pgste_t pgste, pte_t entry)
 
 
 static inline void pgste_set_pte(pte_t *ptep, pte_t entry)
 static inline void pgste_set_pte(pte_t *ptep, pte_t entry)
 {
 {
-	if (!MACHINE_HAS_ESOP && (pte_val(entry) & _PAGE_WRITE)) {
+	if (!MACHINE_HAS_ESOP &&
+	    (pte_val(entry) & _PAGE_PRESENT) &&
+	    (pte_val(entry) & _PAGE_WRITE)) {
 		/*
 		/*
 		 * Without enhanced suppression-on-protection force
 		 * Without enhanced suppression-on-protection force
 		 * the dirty bit on for all writable ptes.
 		 * the dirty bit on for all writable ptes.

+ 14 - 14
arch/s390/include/asm/timex.h

@@ -71,30 +71,30 @@ static inline void local_tick_enable(unsigned long long comp)
 
 
 typedef unsigned long long cycles_t;
 typedef unsigned long long cycles_t;
 
 
-static inline unsigned long long get_tod_clock(void)
-{
-	unsigned long long clk;
-
-#ifdef CONFIG_HAVE_MARCH_Z9_109_FEATURES
-	asm volatile(".insn s,0xb27c0000,%0" : "=Q" (clk) : : "cc");
-#else
-	asm volatile("stck %0" : "=Q" (clk) : : "cc");
-#endif
-	return clk;
-}
-
 static inline void get_tod_clock_ext(char *clk)
 static inline void get_tod_clock_ext(char *clk)
 {
 {
 	asm volatile("stcke %0" : "=Q" (*clk) : : "cc");
 	asm volatile("stcke %0" : "=Q" (*clk) : : "cc");
 }
 }
 
 
-static inline unsigned long long get_tod_clock_xt(void)
+static inline unsigned long long get_tod_clock(void)
 {
 {
 	unsigned char clk[16];
 	unsigned char clk[16];
 	get_tod_clock_ext(clk);
 	get_tod_clock_ext(clk);
 	return *((unsigned long long *)&clk[1]);
 	return *((unsigned long long *)&clk[1]);
 }
 }
 
 
+static inline unsigned long long get_tod_clock_fast(void)
+{
+#ifdef CONFIG_HAVE_MARCH_Z9_109_FEATURES
+	unsigned long long clk;
+
+	asm volatile("stckf %0" : "=Q" (clk) : : "cc");
+	return clk;
+#else
+	return get_tod_clock();
+#endif
+}
+
 static inline cycles_t get_cycles(void)
 static inline cycles_t get_cycles(void)
 {
 {
 	return (cycles_t) get_tod_clock() >> 2;
 	return (cycles_t) get_tod_clock() >> 2;
@@ -125,7 +125,7 @@ extern u64 sched_clock_base_cc;
  */
  */
 static inline unsigned long long get_tod_clock_monotonic(void)
 static inline unsigned long long get_tod_clock_monotonic(void)
 {
 {
-	return get_tod_clock_xt() - sched_clock_base_cc;
+	return get_tod_clock() - sched_clock_base_cc;
 }
 }
 
 
 /**
 /**

+ 2 - 2
arch/s390/kernel/compat_signal.c

@@ -99,7 +99,7 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from)
 			break;
 			break;
 		}
 		}
 	}
 	}
-	return err;
+	return err ? -EFAULT : 0;
 }
 }
 
 
 int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from)
 int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from)
@@ -148,7 +148,7 @@ int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from)
 			break;
 			break;
 		}
 		}
 	}
 	}
-	return err;
+	return err ? -EFAULT : 0;
 }
 }
 
 
 static int save_sigregs32(struct pt_regs *regs, _sigregs32 __user *sregs)
 static int save_sigregs32(struct pt_regs *regs, _sigregs32 __user *sregs)

+ 20 - 22
arch/s390/kernel/crash_dump.c

@@ -40,28 +40,26 @@ static inline void *load_real_addr(void *addr)
 }
 }
 
 
 /*
 /*
- * Copy up to one page to vmalloc or real memory
+ * Copy real to virtual or real memory
  */
  */
-static ssize_t copy_page_real(void *buf, void *src, size_t csize)
+static int copy_from_realmem(void *dest, void *src, size_t count)
 {
 {
-	size_t size;
+	unsigned long size;
+	int rc;
 
 
-	if (is_vmalloc_addr(buf)) {
-		BUG_ON(csize >= PAGE_SIZE);
-		/* If buf is not page aligned, copy first part */
-		size = min(roundup(__pa(buf), PAGE_SIZE) - __pa(buf), csize);
-		if (size) {
-			if (memcpy_real(load_real_addr(buf), src, size))
-				return -EFAULT;
-			buf += size;
-			src += size;
-		}
-		/* Copy second part */
-		size = csize - size;
-		return (size) ? memcpy_real(load_real_addr(buf), src, size) : 0;
-	} else {
-		return memcpy_real(buf, src, csize);
-	}
+	if (!count)
+		return 0;
+	if (!is_vmalloc_or_module_addr(dest))
+		return memcpy_real(dest, src, count);
+	do {
+		size = min(count, PAGE_SIZE - (__pa(dest) & ~PAGE_MASK));
+		if (memcpy_real(load_real_addr(dest), src, size))
+			return -EFAULT;
+		count -= size;
+		dest += size;
+		src += size;
+	} while (count);
+	return 0;
 }
 }
 
 
 /*
 /*
@@ -114,7 +112,7 @@ static ssize_t copy_oldmem_page_kdump(char *buf, size_t csize,
 		rc = copy_to_user_real((void __force __user *) buf,
 		rc = copy_to_user_real((void __force __user *) buf,
 				       (void *) src, csize);
 				       (void *) src, csize);
 	else
 	else
-		rc = copy_page_real(buf, (void *) src, csize);
+		rc = copy_from_realmem(buf, (void *) src, csize);
 	return (rc == 0) ? rc : csize;
 	return (rc == 0) ? rc : csize;
 }
 }
 
 
@@ -210,7 +208,7 @@ int copy_from_oldmem(void *dest, void *src, size_t count)
 	if (OLDMEM_BASE) {
 	if (OLDMEM_BASE) {
 		if ((unsigned long) src < OLDMEM_SIZE) {
 		if ((unsigned long) src < OLDMEM_SIZE) {
 			copied = min(count, OLDMEM_SIZE - (unsigned long) src);
 			copied = min(count, OLDMEM_SIZE - (unsigned long) src);
-			rc = memcpy_real(dest, src + OLDMEM_BASE, copied);
+			rc = copy_from_realmem(dest, src + OLDMEM_BASE, copied);
 			if (rc)
 			if (rc)
 				return rc;
 				return rc;
 		}
 		}
@@ -223,7 +221,7 @@ int copy_from_oldmem(void *dest, void *src, size_t count)
 				return rc;
 				return rc;
 		}
 		}
 	}
 	}
-	return memcpy_real(dest + copied, src + copied, count - copied);
+	return copy_from_realmem(dest + copied, src + copied, count - copied);
 }
 }
 
 
 /*
 /*

+ 1 - 1
arch/s390/kernel/debug.c

@@ -867,7 +867,7 @@ static inline void
 debug_finish_entry(debug_info_t * id, debug_entry_t* active, int level,
 debug_finish_entry(debug_info_t * id, debug_entry_t* active, int level,
 			int exception)
 			int exception)
 {
 {
-	active->id.stck = get_tod_clock();
+	active->id.stck = get_tod_clock_fast();
 	active->id.fields.cpuid = smp_processor_id();
 	active->id.fields.cpuid = smp_processor_id();
 	active->caller = __builtin_return_address(0);
 	active->caller = __builtin_return_address(0);
 	active->id.fields.exception = exception;
 	active->id.fields.exception = exception;

+ 1 - 0
arch/s390/kernel/entry.S

@@ -266,6 +266,7 @@ sysc_sigpending:
 	tm	__TI_flags+3(%r12),_TIF_SYSCALL
 	tm	__TI_flags+3(%r12),_TIF_SYSCALL
 	jno	sysc_return
 	jno	sysc_return
 	lm	%r2,%r7,__PT_R2(%r11)	# load svc arguments
 	lm	%r2,%r7,__PT_R2(%r11)	# load svc arguments
+	l	%r10,__TI_sysc_table(%r12)	# 31 bit system call table
 	xr	%r8,%r8			# svc 0 returns -ENOSYS
 	xr	%r8,%r8			# svc 0 returns -ENOSYS
 	clc	__PT_INT_CODE+2(2,%r11),BASED(.Lnr_syscalls+2)
 	clc	__PT_INT_CODE+2(2,%r11),BASED(.Lnr_syscalls+2)
 	jnl	sysc_nr_ok		# invalid svc number -> do svc 0
 	jnl	sysc_nr_ok		# invalid svc number -> do svc 0

+ 1 - 0
arch/s390/kernel/entry64.S

@@ -297,6 +297,7 @@ sysc_sigpending:
 	tm	__TI_flags+7(%r12),_TIF_SYSCALL
 	tm	__TI_flags+7(%r12),_TIF_SYSCALL
 	jno	sysc_return
 	jno	sysc_return
 	lmg	%r2,%r7,__PT_R2(%r11)	# load svc arguments
 	lmg	%r2,%r7,__PT_R2(%r11)	# load svc arguments
+	lg	%r10,__TI_sysc_table(%r12)	# address of system call table
 	lghi	%r8,0			# svc 0 returns -ENOSYS
 	lghi	%r8,0			# svc 0 returns -ENOSYS
 	llgh	%r1,__PT_INT_CODE+2(%r11)	# load new svc number
 	llgh	%r1,__PT_INT_CODE+2(%r11)	# load new svc number
 	cghi	%r1,NR_syscalls
 	cghi	%r1,NR_syscalls

Some files were not shown because too many files changed in this diff