Browse Source

Merge tag 'arm-perf-4.1' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux into next/drivers

Merge "arm-cci PMU updates for 4.1" from Will Deacon:

CCI-400 PMU updates

This series reworks some of the CCI-400 PMU code so that it can be used
on both ARM and ARM64-based systems, without the need to boot in secure
mode on the latter. This paves the way for CCI-500 support in future.

* tag 'arm-perf-4.1' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux:
  arm-cci: Fix CCI PMU event validation
  arm-cci: Split the code for PMU vs driver support
  arm-cci: Get rid of secure transactions for PMU driver
  arm-cci: Abstract the CCI400 PMU specific definitions
  arm-cci: Rearrange code for splitting PMU vs driver code
  drivers: cci: reject groups spanning multiple HW PMUs
  + Linux 4.0-rc4

Signed-off-by: Olof Johansson <olof@lixom.net>
Olof Johansson 10 years ago
parent
commit
47f36e4921
100 changed files with 1207 additions and 253 deletions
  1. 27 0
      Documentation/CodeOfConflict
  2. 5 2
      Documentation/devicetree/bindings/arm/cci.txt
  3. 2 0
      Documentation/devicetree/bindings/arm/exynos/power_domain.txt
  4. 4 0
      Documentation/devicetree/bindings/arm/sti.txt
  5. 1 0
      Documentation/devicetree/bindings/i2c/i2c-imx.txt
  6. 4 0
      Documentation/devicetree/bindings/net/amd-xgbe-phy.txt
  7. 4 1
      Documentation/devicetree/bindings/net/apm-xgene-enet.txt
  8. 29 0
      Documentation/devicetree/bindings/power/power_domain.txt
  9. 0 0
      Documentation/devicetree/bindings/serial/8250.txt
  10. 19 0
      Documentation/devicetree/bindings/serial/axis,etraxfs-uart.txt
  11. 16 0
      Documentation/devicetree/bindings/serial/snps-dw-apb-uart.txt
  12. 3 0
      Documentation/devicetree/bindings/submitting-patches.txt
  13. 2 0
      Documentation/devicetree/bindings/vendor-prefixes.txt
  14. 17 5
      Documentation/power/suspend-and-interrupts.txt
  15. 23 4
      MAINTAINERS
  16. 1 1
      Makefile
  17. 7 7
      arch/arc/include/asm/processor.h
  18. 37 0
      arch/arc/include/asm/stacktrace.h
  19. 0 23
      arch/arc/kernel/process.c
  20. 17 4
      arch/arc/kernel/stacktrace.c
  21. 2 0
      arch/arc/kernel/unaligned.c
  22. 10 2
      arch/arc/mm/fault.c
  23. 1 0
      arch/arm/Makefile
  24. 8 0
      arch/arm/boot/dts/am335x-bone-common.dtsi
  25. 0 8
      arch/arm/boot/dts/am335x-bone.dts
  26. 4 0
      arch/arm/boot/dts/am335x-lxm.dts
  27. 3 3
      arch/arm/boot/dts/am33xx-clocks.dtsi
  28. 6 6
      arch/arm/boot/dts/am43xx-clocks.dtsi
  29. 4 6
      arch/arm/boot/dts/dra7-evm.dts
  30. 4 6
      arch/arm/boot/dts/dra72-evm.dts
  31. 81 9
      arch/arm/boot/dts/dra7xx-clocks.dtsi
  32. 2 0
      arch/arm/boot/dts/exynos3250.dtsi
  33. 52 0
      arch/arm/boot/dts/exynos4-cpu-thermal.dtsi
  34. 45 0
      arch/arm/boot/dts/exynos4.dtsi
  35. 19 0
      arch/arm/boot/dts/exynos4210-trats.dts
  36. 57 0
      arch/arm/boot/dts/exynos4210-universal_c210.dts
  37. 36 2
      arch/arm/boot/dts/exynos4210.dtsi
  38. 4 1
      arch/arm/boot/dts/exynos4212.dtsi
  39. 64 0
      arch/arm/boot/dts/exynos4412-odroid-common.dtsi
  40. 24 0
      arch/arm/boot/dts/exynos4412-tmu-sensor-conf.dtsi
  41. 15 0
      arch/arm/boot/dts/exynos4412-trats2.dts
  42. 4 1
      arch/arm/boot/dts/exynos4412.dtsi
  43. 12 0
      arch/arm/boot/dts/exynos4x12.dtsi
  44. 39 5
      arch/arm/boot/dts/exynos5250.dtsi
  45. 35 0
      arch/arm/boot/dts/exynos5420-trip-points.dtsi
  46. 31 2
      arch/arm/boot/dts/exynos5420.dtsi
  47. 24 0
      arch/arm/boot/dts/exynos5440-tmu-sensor-conf.dtsi
  48. 25 0
      arch/arm/boot/dts/exynos5440-trip-points.dtsi
  49. 18 0
      arch/arm/boot/dts/exynos5440.dtsi
  50. 2 0
      arch/arm/boot/dts/imx6qdl-sabresd.dtsi
  51. 2 0
      arch/arm/boot/dts/imx6sl-evk.dts
  52. 1 1
      arch/arm/boot/dts/omap5-core-thermal.dtsi
  53. 1 1
      arch/arm/boot/dts/omap5-gpu-thermal.dtsi
  54. 4 0
      arch/arm/boot/dts/omap5.dtsi
  55. 37 4
      arch/arm/boot/dts/omap54xx-clocks.dtsi
  56. 6 0
      arch/arm/boot/dts/socfpga.dtsi
  57. 1 1
      arch/arm/configs/multi_v7_defconfig
  58. 1 0
      arch/arm/configs/omap2plus_defconfig
  59. 1 0
      arch/arm/configs/sunxi_defconfig
  60. 1 1
      arch/arm/configs/vexpress_defconfig
  61. 42 0
      arch/arm/include/asm/arm-cci.h
  62. 1 1
      arch/arm/include/asm/kvm_mmu.h
  63. 1 1
      arch/arm/kvm/arm.c
  64. 7 3
      arch/arm/kvm/trace.h
  65. 1 1
      arch/arm/mach-exynos/Kconfig
  66. 1 2
      arch/arm/mach-exynos/platsmp.c
  67. 28 0
      arch/arm/mach-exynos/pm_domains.c
  68. 2 2
      arch/arm/mach-exynos/suspend.c
  69. 3 2
      arch/arm/mach-imx/mach-imx6q.c
  70. 7 1
      arch/arm/mach-msm/board-halibut.c
  71. 7 1
      arch/arm/mach-msm/board-qsd8x50.c
  72. 5 5
      arch/arm/mach-omap2/omap_hwmod.c
  73. 1 0
      arch/arm/mach-omap2/omap_hwmod.h
  74. 24 79
      arch/arm/mach-omap2/omap_hwmod_7xx_data.c
  75. 1 0
      arch/arm/mach-omap2/pdata-quirks.c
  76. 2 2
      arch/arm/mach-omap2/prm44xx.c
  77. 6 0
      arch/arm/mach-pxa/idp.c
  78. 7 1
      arch/arm/mach-pxa/lpd270.c
  79. 7 0
      arch/arm/mach-realview/core.c
  80. 1 1
      arch/arm/mach-realview/realview_eb.c
  81. 6 0
      arch/arm/mach-sa1100/neponset.c
  82. 7 0
      arch/arm/mach-sa1100/pleb.c
  83. 1 1
      arch/arm/mach-socfpga/core.h
  84. 5 0
      arch/arm/mach-socfpga/socfpga.c
  85. 1 0
      arch/arm/mach-sti/board-dt.c
  86. 2 2
      arch/arm/mach-vexpress/Kconfig
  87. 2 2
      arch/arm64/boot/dts/apm/apm-storm.dtsi
  88. 27 0
      arch/arm64/include/asm/arm-cci.h
  89. 3 0
      arch/arm64/include/asm/tlb.h
  90. 13 0
      arch/arm64/include/asm/tlbflush.h
  91. 9 0
      arch/arm64/kernel/efi.c
  92. 1 1
      arch/arm64/kernel/head.S
  93. 8 0
      arch/arm64/kernel/process.c
  94. 4 1
      arch/arm64/mm/pageattr.c
  95. 5 0
      arch/c6x/include/asm/pgtable.h
  96. 4 3
      arch/microblaze/kernel/entry.S
  97. 1 0
      arch/mips/kvm/tlb.c
  98. 3 3
      arch/mips/kvm/trace.h
  99. 47 0
      arch/nios2/include/asm/ptrace.h
  100. 0 32
      arch/nios2/include/asm/ucontext.h

+ 27 - 0
Documentation/CodeOfConflict

@@ -0,0 +1,27 @@
+Code of Conflict
+----------------
+
+The Linux kernel development effort is a very personal process compared
+to "traditional" ways of developing software.  Your code and ideas
+behind it will be carefully reviewed, often resulting in critique and
+criticism.  The review will almost always require improvements to the
+code before it can be included in the kernel.  Know that this happens
+because everyone involved wants to see the best possible solution for
+the overall success of Linux.  This development process has been proven
+to create the most robust operating system kernel ever, and we do not
+want to do anything to cause the quality of submission and eventual
+result to ever decrease.
+
+If however, anyone feels personally abused, threatened, or otherwise
+uncomfortable due to this process, that is not acceptable.  If so,
+please contact the Linux Foundation's Technical Advisory Board at
+<tab@lists.linux-foundation.org>, or the individual members, and they
+will work to resolve the issue to the best of their ability.  For more
+information on who is on the Technical Advisory Board and what their
+role is, please see:
+	http://www.linuxfoundation.org/programs/advisory-councils/tab
+
+As a reviewer of code, please strive to keep things civil and focused on
+the technical issues involved.  We are all humans, and frustrations can
+be high on both sides of the process.  Try to keep in mind the immortal
+words of Bill and Ted, "Be excellent to each other."

+ 5 - 2
Documentation/devicetree/bindings/arm/cci.txt

@@ -94,8 +94,11 @@ specific to ARM.
 		- compatible
 		- compatible
 			Usage: required
 			Usage: required
 			Value type: <string>
 			Value type: <string>
-			Definition: must be "arm,cci-400-pmu"
-
+			Definition: Must contain one of:
+				 "arm,cci-400-pmu,r0"
+				 "arm,cci-400-pmu,r1"
+				 "arm,cci-400-pmu"  - DEPRECATED, permitted only where OS has
+						      secure acces to CCI registers
 		- reg:
 		- reg:
 			Usage: required
 			Usage: required
 			Value type: Integer cells. A register entry, expressed
 			Value type: Integer cells. A register entry, expressed

+ 2 - 0
Documentation/devicetree/bindings/arm/exynos/power_domain.txt

@@ -22,6 +22,8 @@ Optional Properties:
 	- pclkN, clkN: Pairs of parent of input clock and input clock to the
 	- pclkN, clkN: Pairs of parent of input clock and input clock to the
 		devices in this power domain. Maximum of 4 pairs (N = 0 to 3)
 		devices in this power domain. Maximum of 4 pairs (N = 0 to 3)
 		are supported currently.
 		are supported currently.
+- power-domains: phandle pointing to the parent power domain, for more details
+		 see Documentation/devicetree/bindings/power/power_domain.txt
 
 
 Node of a device using power domains must have a power-domains property
 Node of a device using power domains must have a power-domains property
 defined with a phandle to respective power domain.
 defined with a phandle to respective power domain.

+ 4 - 0
Documentation/devicetree/bindings/arm/sti.txt

@@ -13,6 +13,10 @@ Boards with the ST STiH407 SoC shall have the following properties:
 Required root node property:
 Required root node property:
 compatible = "st,stih407";
 compatible = "st,stih407";
 
 
+Boards with the ST STiH410 SoC shall have the following properties:
+Required root node property:
+compatible = "st,stih410";
+
 Boards with the ST STiH418 SoC shall have the following properties:
 Boards with the ST STiH418 SoC shall have the following properties:
 Required root node property:
 Required root node property:
 compatible = "st,stih418";
 compatible = "st,stih418";

+ 1 - 0
Documentation/devicetree/bindings/i2c/i2c-imx.txt

@@ -7,6 +7,7 @@ Required properties:
   - "fsl,vf610-i2c" for I2C compatible with the one integrated on Vybrid vf610 SoC
   - "fsl,vf610-i2c" for I2C compatible with the one integrated on Vybrid vf610 SoC
 - reg : Should contain I2C/HS-I2C registers location and length
 - reg : Should contain I2C/HS-I2C registers location and length
 - interrupts : Should contain I2C/HS-I2C interrupt
 - interrupts : Should contain I2C/HS-I2C interrupt
+- clocks : Should contain the I2C/HS-I2C clock specifier
 
 
 Optional properties:
 Optional properties:
 - clock-frequency : Constains desired I2C/HS-I2C bus clock frequency in Hz.
 - clock-frequency : Constains desired I2C/HS-I2C bus clock frequency in Hz.

+ 4 - 0
Documentation/devicetree/bindings/net/amd-xgbe-phy.txt

@@ -27,6 +27,8 @@ property is used.
 - amd,serdes-cdr-rate: CDR rate speed selection
 - amd,serdes-cdr-rate: CDR rate speed selection
 - amd,serdes-pq-skew: PQ (data sampling) skew
 - amd,serdes-pq-skew: PQ (data sampling) skew
 - amd,serdes-tx-amp: TX amplitude boost
 - amd,serdes-tx-amp: TX amplitude boost
+- amd,serdes-dfe-tap-config: DFE taps available to run
+- amd,serdes-dfe-tap-enable: DFE taps to enable
 
 
 Example:
 Example:
 	xgbe_phy@e1240800 {
 	xgbe_phy@e1240800 {
@@ -41,4 +43,6 @@ Example:
 		amd,serdes-cdr-rate = <2>, <2>, <7>;
 		amd,serdes-cdr-rate = <2>, <2>, <7>;
 		amd,serdes-pq-skew = <10>, <10>, <30>;
 		amd,serdes-pq-skew = <10>, <10>, <30>;
 		amd,serdes-tx-amp = <15>, <15>, <10>;
 		amd,serdes-tx-amp = <15>, <15>, <10>;
+		amd,serdes-dfe-tap-config = <3>, <3>, <1>;
+		amd,serdes-dfe-tap-enable = <0>, <0>, <127>;
 	};
 	};

+ 4 - 1
Documentation/devicetree/bindings/net/apm-xgene-enet.txt

@@ -4,7 +4,10 @@ Ethernet nodes are defined to describe on-chip ethernet interfaces in
 APM X-Gene SoC.
 APM X-Gene SoC.
 
 
 Required properties for all the ethernet interfaces:
 Required properties for all the ethernet interfaces:
-- compatible: Should be "apm,xgene-enet"
+- compatible: Should state binding information from the following list,
+  - "apm,xgene-enet":    RGMII based 1G interface
+  - "apm,xgene1-sgenet": SGMII based 1G interface
+  - "apm,xgene1-xgenet": XFI based 10G interface
 - reg: Address and length of the register set for the device. It contains the
 - reg: Address and length of the register set for the device. It contains the
   information of registers in the same order as described by reg-names
   information of registers in the same order as described by reg-names
 - reg-names: Should contain the register set names
 - reg-names: Should contain the register set names

+ 29 - 0
Documentation/devicetree/bindings/power/power_domain.txt

@@ -19,6 +19,16 @@ Required properties:
    providing multiple PM domains (e.g. power controllers), but can be any value
    providing multiple PM domains (e.g. power controllers), but can be any value
    as specified by device tree binding documentation of particular provider.
    as specified by device tree binding documentation of particular provider.
 
 
+Optional properties:
+ - power-domains : A phandle and PM domain specifier as defined by bindings of
+                   the power controller specified by phandle.
+   Some power domains might be powered from another power domain (or have
+   other hardware specific dependencies). For representing such dependency
+   a standard PM domain consumer binding is used. When provided, all domains
+   created by the given provider should be subdomains of the domain
+   specified by this binding. More details about power domain specifier are
+   available in the next section.
+
 Example:
 Example:
 
 
 	power: power-controller@12340000 {
 	power: power-controller@12340000 {
@@ -30,6 +40,25 @@ Example:
 The node above defines a power controller that is a PM domain provider and
 The node above defines a power controller that is a PM domain provider and
 expects one cell as its phandle argument.
 expects one cell as its phandle argument.
 
 
+Example 2:
+
+	parent: power-controller@12340000 {
+		compatible = "foo,power-controller";
+		reg = <0x12340000 0x1000>;
+		#power-domain-cells = <1>;
+	};
+
+	child: power-controller@12340000 {
+		compatible = "foo,power-controller";
+		reg = <0x12341000 0x1000>;
+		power-domains = <&parent 0>;
+		#power-domain-cells = <1>;
+	};
+
+The nodes above define two power controllers: 'parent' and 'child'.
+Domains created by the 'child' power controller are subdomains of '0' power
+domain provided by the 'parent' power controller.
+
 ==PM domain consumers==
 ==PM domain consumers==
 
 
 Required properties:
 Required properties:

+ 0 - 0
Documentation/devicetree/bindings/serial/of-serial.txt → Documentation/devicetree/bindings/serial/8250.txt


+ 19 - 0
Documentation/devicetree/bindings/serial/axis,etraxfs-uart.txt

@@ -0,0 +1,19 @@
+ETRAX FS UART
+
+Required properties:
+- compatible : "axis,etraxfs-uart"
+- reg: offset and length of the register set for the device.
+- interrupts: device interrupt
+
+Optional properties:
+- {dtr,dsr,ri,cd}-gpios: specify a GPIO for DTR/DSR/RI/CD
+  line respectively.
+
+Example:
+
+serial@b00260000 {
+	compatible = "axis,etraxfs-uart";
+	reg = <0xb0026000 0x1000>;
+	interrupts = <68>;
+	status = "disabled";
+};

+ 16 - 0
Documentation/devicetree/bindings/serial/snps-dw-apb-uart.txt

@@ -21,6 +21,18 @@ Optional properties:
 - reg-io-width : the size (in bytes) of the IO accesses that should be
 - reg-io-width : the size (in bytes) of the IO accesses that should be
   performed on the device.  If this property is not present then single byte
   performed on the device.  If this property is not present then single byte
   accesses are used.
   accesses are used.
+- dcd-override : Override the DCD modem status signal. This signal will always
+  be reported as active instead of being obtained from the modem status
+  register. Define this if your serial port does not use this pin.
+- dsr-override : Override the DTS modem status signal. This signal will always
+  be reported as active instead of being obtained from the modem status
+  register. Define this if your serial port does not use this pin.
+- cts-override : Override the CTS modem status signal. This signal will always
+  be reported as active instead of being obtained from the modem status
+  register. Define this if your serial port does not use this pin.
+- ri-override : Override the RI modem status signal. This signal will always be
+  reported as inactive instead of being obtained from the modem status register.
+  Define this if your serial port does not use this pin.
 
 
 Example:
 Example:
 
 
@@ -31,6 +43,10 @@ Example:
 		interrupts = <10>;
 		interrupts = <10>;
 		reg-shift = <2>;
 		reg-shift = <2>;
 		reg-io-width = <4>;
 		reg-io-width = <4>;
+		dcd-override;
+		dsr-override;
+		cts-override;
+		ri-override;
 	};
 	};
 
 
 Example with one clock:
 Example with one clock:

+ 3 - 0
Documentation/devicetree/bindings/submitting-patches.txt

@@ -12,6 +12,9 @@ I. For patch submitters
 
 
        devicetree@vger.kernel.org
        devicetree@vger.kernel.org
 
 
+     and Cc: the DT maintainers. Use scripts/get_maintainer.pl to identify
+     all of the DT maintainers.
+
   3) The Documentation/ portion of the patch should come in the series before
   3) The Documentation/ portion of the patch should come in the series before
      the code implementing the binding.
      the code implementing the binding.
 
 

+ 2 - 0
Documentation/devicetree/bindings/vendor-prefixes.txt

@@ -20,6 +20,7 @@ amlogic	Amlogic, Inc.
 ams	AMS AG
 ams	AMS AG
 amstaos	AMS-Taos Inc.
 amstaos	AMS-Taos Inc.
 apm	Applied Micro Circuits Corporation (APM)
 apm	Applied Micro Circuits Corporation (APM)
+arasan	Arasan Chip Systems
 arm	ARM Ltd.
 arm	ARM Ltd.
 armadeus	ARMadeus Systems SARL
 armadeus	ARMadeus Systems SARL
 asahi-kasei	Asahi Kasei Corp.
 asahi-kasei	Asahi Kasei Corp.
@@ -27,6 +28,7 @@ atmel	Atmel Corporation
 auo	AU Optronics Corporation
 auo	AU Optronics Corporation
 avago	Avago Technologies
 avago	Avago Technologies
 avic	Shanghai AVIC Optoelectronics Co., Ltd.
 avic	Shanghai AVIC Optoelectronics Co., Ltd.
+axis	Axis Communications AB
 bosch	Bosch Sensortec GmbH
 bosch	Bosch Sensortec GmbH
 brcm	Broadcom Corporation
 brcm	Broadcom Corporation
 buffalo	Buffalo, Inc.
 buffalo	Buffalo, Inc.

+ 17 - 5
Documentation/power/suspend-and-interrupts.txt

@@ -40,8 +40,10 @@ but also to IPIs and to some other special-purpose interrupts.
 
 
 The IRQF_NO_SUSPEND flag is used to indicate that to the IRQ subsystem when
 The IRQF_NO_SUSPEND flag is used to indicate that to the IRQ subsystem when
 requesting a special-purpose interrupt.  It causes suspend_device_irqs() to
 requesting a special-purpose interrupt.  It causes suspend_device_irqs() to
-leave the corresponding IRQ enabled so as to allow the interrupt to work all
-the time as expected.
+leave the corresponding IRQ enabled so as to allow the interrupt to work as
+expected during the suspend-resume cycle, but does not guarantee that the
+interrupt will wake the system from a suspended state -- for such cases it is
+necessary to use enable_irq_wake().
 
 
 Note that the IRQF_NO_SUSPEND flag affects the entire IRQ and not just one
 Note that the IRQF_NO_SUSPEND flag affects the entire IRQ and not just one
 user of it.  Thus, if the IRQ is shared, all of the interrupt handlers installed
 user of it.  Thus, if the IRQ is shared, all of the interrupt handlers installed
@@ -110,8 +112,9 @@ any special interrupt handling logic for it to work.
 IRQF_NO_SUSPEND and enable_irq_wake()
 IRQF_NO_SUSPEND and enable_irq_wake()
 -------------------------------------
 -------------------------------------
 
 
-There are no valid reasons to use both enable_irq_wake() and the IRQF_NO_SUSPEND
-flag on the same IRQ.
+There are very few valid reasons to use both enable_irq_wake() and the
+IRQF_NO_SUSPEND flag on the same IRQ, and it is never valid to use both for the
+same device.
 
 
 First of all, if the IRQ is not shared, the rules for handling IRQF_NO_SUSPEND
 First of all, if the IRQ is not shared, the rules for handling IRQF_NO_SUSPEND
 interrupts (interrupt handlers are invoked after suspend_device_irqs()) are
 interrupts (interrupt handlers are invoked after suspend_device_irqs()) are
@@ -120,4 +123,13 @@ handlers are not invoked after suspend_device_irqs()).
 
 
 Second, both enable_irq_wake() and IRQF_NO_SUSPEND apply to entire IRQs and not
 Second, both enable_irq_wake() and IRQF_NO_SUSPEND apply to entire IRQs and not
 to individual interrupt handlers, so sharing an IRQ between a system wakeup
 to individual interrupt handlers, so sharing an IRQ between a system wakeup
-interrupt source and an IRQF_NO_SUSPEND interrupt source does not make sense.
+interrupt source and an IRQF_NO_SUSPEND interrupt source does not generally
+make sense.
+
+In rare cases an IRQ can be shared between a wakeup device driver and an
+IRQF_NO_SUSPEND user. In order for this to be safe, the wakeup device driver
+must be able to discern spurious IRQs from genuine wakeup events (signalling
+the latter to the core with pm_system_wakeup()), must use enable_irq_wake() to
+ensure that the IRQ will function as a wakeup source, and must request the IRQ
+with IRQF_COND_SUSPEND to tell the core that it meets these requirements. If
+these requirements are not met, it is not valid to use IRQF_COND_SUSPEND.

+ 23 - 4
MAINTAINERS

@@ -1030,6 +1030,16 @@ F:	arch/arm/mach-mxs/
 F:	arch/arm/boot/dts/imx*
 F:	arch/arm/boot/dts/imx*
 F:	arch/arm/configs/imx*_defconfig
 F:	arch/arm/configs/imx*_defconfig
 
 
+ARM/FREESCALE VYBRID ARM ARCHITECTURE
+M:	Shawn Guo <shawn.guo@linaro.org>
+M:	Sascha Hauer <kernel@pengutronix.de>
+R:	Stefan Agner <stefan@agner.ch>
+L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
+S:	Maintained
+T:	git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git
+F:	arch/arm/mach-imx/*vf610*
+F:	arch/arm/boot/dts/vf*
+
 ARM/GLOMATION GESBC9312SX MACHINE SUPPORT
 ARM/GLOMATION GESBC9312SX MACHINE SUPPORT
 M:	Lennert Buytenhek <kernel@wantstofly.org>
 M:	Lennert Buytenhek <kernel@wantstofly.org>
 L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@ -1188,6 +1198,7 @@ ARM/Marvell Dove/MV78xx0/Orion SOC support
 M:	Jason Cooper <jason@lakedaemon.net>
 M:	Jason Cooper <jason@lakedaemon.net>
 M:	Andrew Lunn <andrew@lunn.ch>
 M:	Andrew Lunn <andrew@lunn.ch>
 M:	Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
 M:	Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
+M:	Gregory Clement <gregory.clement@free-electrons.com>
 L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 L:	linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 S:	Maintained
 S:	Maintained
 F:	arch/arm/mach-dove/
 F:	arch/arm/mach-dove/
@@ -2066,7 +2077,7 @@ F:	include/net/bluetooth/
 BONDING DRIVER
 BONDING DRIVER
 M:	Jay Vosburgh <j.vosburgh@gmail.com>
 M:	Jay Vosburgh <j.vosburgh@gmail.com>
 M:	Veaceslav Falico <vfalico@gmail.com>
 M:	Veaceslav Falico <vfalico@gmail.com>
-M:	Andy Gospodarek <andy@greyhouse.net>
+M:	Andy Gospodarek <gospo@cumulusnetworks.com>
 L:	netdev@vger.kernel.org
 L:	netdev@vger.kernel.org
 W:	http://sourceforge.net/projects/bonding/
 W:	http://sourceforge.net/projects/bonding/
 S:	Supported
 S:	Supported
@@ -2108,7 +2119,6 @@ F:	drivers/net/ethernet/broadcom/bnx2x/
 
 
 BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITECTURE
 BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITECTURE
 M:	Christian Daudt <bcm@fixthebug.org>
 M:	Christian Daudt <bcm@fixthebug.org>
-M:	Matt Porter <mporter@linaro.org>
 M:	Florian Fainelli <f.fainelli@gmail.com>
 M:	Florian Fainelli <f.fainelli@gmail.com>
 L:	bcm-kernel-feedback-list@broadcom.com
 L:	bcm-kernel-feedback-list@broadcom.com
 T:	git git://github.com/broadcom/mach-bcm
 T:	git git://github.com/broadcom/mach-bcm
@@ -2370,8 +2380,9 @@ F:	arch/x86/include/asm/tce.h
 
 
 CAN NETWORK LAYER
 CAN NETWORK LAYER
 M:	Oliver Hartkopp <socketcan@hartkopp.net>
 M:	Oliver Hartkopp <socketcan@hartkopp.net>
+M:	Marc Kleine-Budde <mkl@pengutronix.de>
 L:	linux-can@vger.kernel.org
 L:	linux-can@vger.kernel.org
-W:	http://gitorious.org/linux-can
+W:	https://github.com/linux-can
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git
 S:	Maintained
 S:	Maintained
@@ -2387,7 +2398,7 @@ CAN NETWORK DRIVERS
 M:	Wolfgang Grandegger <wg@grandegger.com>
 M:	Wolfgang Grandegger <wg@grandegger.com>
 M:	Marc Kleine-Budde <mkl@pengutronix.de>
 M:	Marc Kleine-Budde <mkl@pengutronix.de>
 L:	linux-can@vger.kernel.org
 L:	linux-can@vger.kernel.org
-W:	http://gitorious.org/linux-can
+W:	https://github.com/linux-can
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can.git
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git
 S:	Maintained
 S:	Maintained
@@ -8481,6 +8492,14 @@ S:	Supported
 L:	netdev@vger.kernel.org
 L:	netdev@vger.kernel.org
 F:	drivers/net/ethernet/samsung/sxgbe/
 F:	drivers/net/ethernet/samsung/sxgbe/
 
 
+SAMSUNG THERMAL DRIVER
+M:	Lukasz Majewski <l.majewski@samsung.com>
+L:	linux-pm@vger.kernel.org
+L:	linux-samsung-soc@vger.kernel.org
+S:	Supported
+T:	https://github.com/lmajewski/linux-samsung-thermal.git
+F:	drivers/thermal/samsung/
+
 SAMSUNG USB2 PHY DRIVER
 SAMSUNG USB2 PHY DRIVER
 M:	Kamil Debski <k.debski@samsung.com>
 M:	Kamil Debski <k.debski@samsung.com>
 L:	linux-kernel@vger.kernel.org
 L:	linux-kernel@vger.kernel.org

+ 1 - 1
Makefile

@@ -1,7 +1,7 @@
 VERSION = 4
 VERSION = 4
 PATCHLEVEL = 0
 PATCHLEVEL = 0
 SUBLEVEL = 0
 SUBLEVEL = 0
-EXTRAVERSION = -rc2
+EXTRAVERSION = -rc4
 NAME = Hurr durr I'ma sheep
 NAME = Hurr durr I'ma sheep
 
 
 # *DOCUMENTATION*
 # *DOCUMENTATION*

+ 7 - 7
arch/arc/include/asm/processor.h

@@ -47,9 +47,6 @@ struct thread_struct {
 /* Forward declaration, a strange C thing */
 /* Forward declaration, a strange C thing */
 struct task_struct;
 struct task_struct;
 
 
-/* Return saved PC of a blocked thread  */
-unsigned long thread_saved_pc(struct task_struct *t);
-
 #define task_pt_regs(p) \
 #define task_pt_regs(p) \
 	((struct pt_regs *)(THREAD_SIZE + (void *)task_stack_page(p)) - 1)
 	((struct pt_regs *)(THREAD_SIZE + (void *)task_stack_page(p)) - 1)
 
 
@@ -72,18 +69,21 @@ unsigned long thread_saved_pc(struct task_struct *t);
 #define release_segments(mm)        do { } while (0)
 #define release_segments(mm)        do { } while (0)
 
 
 #define KSTK_EIP(tsk)   (task_pt_regs(tsk)->ret)
 #define KSTK_EIP(tsk)   (task_pt_regs(tsk)->ret)
+#define KSTK_ESP(tsk)   (task_pt_regs(tsk)->sp)
 
 
 /*
 /*
  * Where abouts of Task's sp, fp, blink when it was last seen in kernel mode.
  * Where abouts of Task's sp, fp, blink when it was last seen in kernel mode.
  * Look in process.c for details of kernel stack layout
  * Look in process.c for details of kernel stack layout
  */
  */
-#define KSTK_ESP(tsk)   (tsk->thread.ksp)
+#define TSK_K_ESP(tsk)		(tsk->thread.ksp)
 
 
-#define KSTK_REG(tsk, off)	(*((unsigned int *)(KSTK_ESP(tsk) + \
+#define TSK_K_REG(tsk, off)	(*((unsigned int *)(TSK_K_ESP(tsk) + \
 					sizeof(struct callee_regs) + off)))
 					sizeof(struct callee_regs) + off)))
 
 
-#define KSTK_BLINK(tsk) KSTK_REG(tsk, 4)
-#define KSTK_FP(tsk)    KSTK_REG(tsk, 0)
+#define TSK_K_BLINK(tsk)	TSK_K_REG(tsk, 4)
+#define TSK_K_FP(tsk)		TSK_K_REG(tsk, 0)
+
+#define thread_saved_pc(tsk)	TSK_K_BLINK(tsk)
 
 
 extern void start_thread(struct pt_regs * regs, unsigned long pc,
 extern void start_thread(struct pt_regs * regs, unsigned long pc,
 			 unsigned long usp);
 			 unsigned long usp);

+ 37 - 0
arch/arc/include/asm/stacktrace.h

@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2014-15 Synopsys, Inc. (www.synopsys.com)
+ * Copyright (C) 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __ASM_STACKTRACE_H
+#define __ASM_STACKTRACE_H
+
+#include <linux/sched.h>
+
+/**
+ * arc_unwind_core - Unwind the kernel mode stack for an execution context
+ * @tsk:		NULL for current task, specific task otherwise
+ * @regs:		pt_regs used to seed the unwinder {SP, FP, BLINK, PC}
+ * 			If NULL, use pt_regs of @tsk (if !NULL) otherwise
+ * 			use the current values of {SP, FP, BLINK, PC}
+ * @consumer_fn:	Callback invoked for each frame unwound
+ * 			Returns 0 to continue unwinding, -1 to stop
+ * @arg:		Arg to callback
+ *
+ * Returns the address of first function in stack
+ *
+ * Semantics:
+ *  - synchronous unwinding (e.g. dump_stack): @tsk  NULL, @regs  NULL
+ *  - Asynchronous unwinding of sleeping task: @tsk !NULL, @regs  NULL
+ *  - Asynchronous unwinding of intr/excp etc: @tsk !NULL, @regs !NULL
+ */
+notrace noinline unsigned int arc_unwind_core(
+	struct task_struct *tsk, struct pt_regs *regs,
+	int (*consumer_fn) (unsigned int, void *),
+	void *arg);
+
+#endif /* __ASM_STACKTRACE_H */

+ 0 - 23
arch/arc/kernel/process.c

@@ -192,29 +192,6 @@ int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu)
 	return 0;
 	return 0;
 }
 }
 
 
-/*
- * API: expected by schedular Code: If thread is sleeping where is that.
- * What is this good for? it will be always the scheduler or ret_from_fork.
- * So we hard code that anyways.
- */
-unsigned long thread_saved_pc(struct task_struct *t)
-{
-	struct pt_regs *regs = task_pt_regs(t);
-	unsigned long blink = 0;
-
-	/*
-	 * If the thread being queried for in not itself calling this, then it
-	 * implies it is not executing, which in turn implies it is sleeping,
-	 * which in turn implies it got switched OUT by the schedular.
-	 * In that case, it's kernel mode blink can reliably retrieved as per
-	 * the picture above (right above pt_regs).
-	 */
-	if (t != current && t->state != TASK_RUNNING)
-		blink = *((unsigned int *)regs - 1);
-
-	return blink;
-}
-
 int elf_check_arch(const struct elf32_hdr *x)
 int elf_check_arch(const struct elf32_hdr *x)
 {
 {
 	unsigned int eflags;
 	unsigned int eflags;

+ 17 - 4
arch/arc/kernel/stacktrace.c

@@ -43,6 +43,10 @@ static void seed_unwind_frame_info(struct task_struct *tsk,
 				   struct pt_regs *regs,
 				   struct pt_regs *regs,
 				   struct unwind_frame_info *frame_info)
 				   struct unwind_frame_info *frame_info)
 {
 {
+	/*
+	 * synchronous unwinding (e.g. dump_stack)
+	 *  - uses current values of SP and friends
+	 */
 	if (tsk == NULL && regs == NULL) {
 	if (tsk == NULL && regs == NULL) {
 		unsigned long fp, sp, blink, ret;
 		unsigned long fp, sp, blink, ret;
 		frame_info->task = current;
 		frame_info->task = current;
@@ -61,12 +65,17 @@ static void seed_unwind_frame_info(struct task_struct *tsk,
 		frame_info->regs.r63 = ret;
 		frame_info->regs.r63 = ret;
 		frame_info->call_frame = 0;
 		frame_info->call_frame = 0;
 	} else if (regs == NULL) {
 	} else if (regs == NULL) {
+		/*
+		 * Asynchronous unwinding of sleeping task
+		 *  - Gets SP etc from task's pt_regs (saved bottom of kernel
+		 *    mode stack of task)
+		 */
 
 
 		frame_info->task = tsk;
 		frame_info->task = tsk;
 
 
-		frame_info->regs.r27 = KSTK_FP(tsk);
-		frame_info->regs.r28 = KSTK_ESP(tsk);
-		frame_info->regs.r31 = KSTK_BLINK(tsk);
+		frame_info->regs.r27 = TSK_K_FP(tsk);
+		frame_info->regs.r28 = TSK_K_ESP(tsk);
+		frame_info->regs.r31 = TSK_K_BLINK(tsk);
 		frame_info->regs.r63 = (unsigned int)__switch_to;
 		frame_info->regs.r63 = (unsigned int)__switch_to;
 
 
 		/* In the prologue of __switch_to, first FP is saved on stack
 		/* In the prologue of __switch_to, first FP is saved on stack
@@ -83,6 +92,10 @@ static void seed_unwind_frame_info(struct task_struct *tsk,
 		frame_info->call_frame = 0;
 		frame_info->call_frame = 0;
 
 
 	} else {
 	} else {
+		/*
+		 * Asynchronous unwinding of intr/exception
+		 *  - Just uses the pt_regs passed
+		 */
 		frame_info->task = tsk;
 		frame_info->task = tsk;
 
 
 		frame_info->regs.r27 = regs->fp;
 		frame_info->regs.r27 = regs->fp;
@@ -95,7 +108,7 @@ static void seed_unwind_frame_info(struct task_struct *tsk,
 
 
 #endif
 #endif
 
 
-static noinline unsigned int
+notrace noinline unsigned int
 arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,
 arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs,
 		int (*consumer_fn) (unsigned int, void *), void *arg)
 		int (*consumer_fn) (unsigned int, void *), void *arg)
 {
 {

+ 2 - 0
arch/arc/kernel/unaligned.c

@@ -12,6 +12,7 @@
  */
  */
 
 
 #include <linux/types.h>
 #include <linux/types.h>
+#include <linux/perf_event.h>
 #include <linux/ptrace.h>
 #include <linux/ptrace.h>
 #include <linux/uaccess.h>
 #include <linux/uaccess.h>
 #include <asm/disasm.h>
 #include <asm/disasm.h>
@@ -253,6 +254,7 @@ int misaligned_fixup(unsigned long address, struct pt_regs *regs,
 		}
 		}
 	}
 	}
 
 
+	perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, regs, address);
 	return 0;
 	return 0;
 
 
 fault:
 fault:

+ 10 - 2
arch/arc/mm/fault.c

@@ -14,6 +14,7 @@
 #include <linux/ptrace.h>
 #include <linux/ptrace.h>
 #include <linux/uaccess.h>
 #include <linux/uaccess.h>
 #include <linux/kdebug.h>
 #include <linux/kdebug.h>
+#include <linux/perf_event.h>
 #include <asm/pgalloc.h>
 #include <asm/pgalloc.h>
 #include <asm/mmu.h>
 #include <asm/mmu.h>
 
 
@@ -139,13 +140,20 @@ good_area:
 			return;
 			return;
 	}
 	}
 
 
+	perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
+
 	if (likely(!(fault & VM_FAULT_ERROR))) {
 	if (likely(!(fault & VM_FAULT_ERROR))) {
 		if (flags & FAULT_FLAG_ALLOW_RETRY) {
 		if (flags & FAULT_FLAG_ALLOW_RETRY) {
 			/* To avoid updating stats twice for retry case */
 			/* To avoid updating stats twice for retry case */
-			if (fault & VM_FAULT_MAJOR)
+			if (fault & VM_FAULT_MAJOR) {
 				tsk->maj_flt++;
 				tsk->maj_flt++;
-			else
+				perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1,
+					      regs, address);
+			} else {
 				tsk->min_flt++;
 				tsk->min_flt++;
+				perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1,
+					      regs, address);
+			}
 
 
 			if (fault & VM_FAULT_RETRY) {
 			if (fault & VM_FAULT_RETRY) {
 				flags &= ~FAULT_FLAG_ALLOW_RETRY;
 				flags &= ~FAULT_FLAG_ALLOW_RETRY;

+ 1 - 0
arch/arm/Makefile

@@ -150,6 +150,7 @@ machine-$(CONFIG_ARCH_BERLIN)		+= berlin
 machine-$(CONFIG_ARCH_CLPS711X)		+= clps711x
 machine-$(CONFIG_ARCH_CLPS711X)		+= clps711x
 machine-$(CONFIG_ARCH_CNS3XXX)		+= cns3xxx
 machine-$(CONFIG_ARCH_CNS3XXX)		+= cns3xxx
 machine-$(CONFIG_ARCH_DAVINCI)		+= davinci
 machine-$(CONFIG_ARCH_DAVINCI)		+= davinci
+machine-$(CONFIG_ARCH_DIGICOLOR)	+= digicolor
 machine-$(CONFIG_ARCH_DOVE)		+= dove
 machine-$(CONFIG_ARCH_DOVE)		+= dove
 machine-$(CONFIG_ARCH_EBSA110)		+= ebsa110
 machine-$(CONFIG_ARCH_EBSA110)		+= ebsa110
 machine-$(CONFIG_ARCH_EFM32)		+= efm32
 machine-$(CONFIG_ARCH_EFM32)		+= efm32

+ 8 - 0
arch/arm/boot/dts/am335x-bone-common.dtsi

@@ -301,3 +301,11 @@
 	cd-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
 	cd-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
 	cd-inverted;
 	cd-inverted;
 };
 };
+
+&aes {
+	status = "okay";
+};
+
+&sham {
+	status = "okay";
+};

+ 0 - 8
arch/arm/boot/dts/am335x-bone.dts

@@ -24,11 +24,3 @@
 &mmc1 {
 &mmc1 {
 	vmmc-supply = <&ldo3_reg>;
 	vmmc-supply = <&ldo3_reg>;
 };
 };
-
-&sham {
-	status = "okay";
-};
-
-&aes {
-	status = "okay";
-};

+ 4 - 0
arch/arm/boot/dts/am335x-lxm.dts

@@ -328,6 +328,10 @@
 	dual_emac_res_vlan = <3>;
 	dual_emac_res_vlan = <3>;
 };
 };
 
 
+&phy_sel {
+	rmii-clock-ext;
+};
+
 &mac {
 &mac {
 	pinctrl-names = "default", "sleep";
 	pinctrl-names = "default", "sleep";
 	pinctrl-0 = <&cpsw_default>;
 	pinctrl-0 = <&cpsw_default>;

+ 3 - 3
arch/arm/boot/dts/am33xx-clocks.dtsi

@@ -99,7 +99,7 @@
 	ehrpwm0_tbclk: ehrpwm0_tbclk@44e10664 {
 	ehrpwm0_tbclk: ehrpwm0_tbclk@44e10664 {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,gate-clock";
 		compatible = "ti,gate-clock";
-		clocks = <&dpll_per_m2_ck>;
+		clocks = <&l4ls_gclk>;
 		ti,bit-shift = <0>;
 		ti,bit-shift = <0>;
 		reg = <0x0664>;
 		reg = <0x0664>;
 	};
 	};
@@ -107,7 +107,7 @@
 	ehrpwm1_tbclk: ehrpwm1_tbclk@44e10664 {
 	ehrpwm1_tbclk: ehrpwm1_tbclk@44e10664 {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,gate-clock";
 		compatible = "ti,gate-clock";
-		clocks = <&dpll_per_m2_ck>;
+		clocks = <&l4ls_gclk>;
 		ti,bit-shift = <1>;
 		ti,bit-shift = <1>;
 		reg = <0x0664>;
 		reg = <0x0664>;
 	};
 	};
@@ -115,7 +115,7 @@
 	ehrpwm2_tbclk: ehrpwm2_tbclk@44e10664 {
 	ehrpwm2_tbclk: ehrpwm2_tbclk@44e10664 {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,gate-clock";
 		compatible = "ti,gate-clock";
-		clocks = <&dpll_per_m2_ck>;
+		clocks = <&l4ls_gclk>;
 		ti,bit-shift = <2>;
 		ti,bit-shift = <2>;
 		reg = <0x0664>;
 		reg = <0x0664>;
 	};
 	};

+ 6 - 6
arch/arm/boot/dts/am43xx-clocks.dtsi

@@ -107,7 +107,7 @@
 	ehrpwm0_tbclk: ehrpwm0_tbclk {
 	ehrpwm0_tbclk: ehrpwm0_tbclk {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,gate-clock";
 		compatible = "ti,gate-clock";
-		clocks = <&dpll_per_m2_ck>;
+		clocks = <&l4ls_gclk>;
 		ti,bit-shift = <0>;
 		ti,bit-shift = <0>;
 		reg = <0x0664>;
 		reg = <0x0664>;
 	};
 	};
@@ -115,7 +115,7 @@
 	ehrpwm1_tbclk: ehrpwm1_tbclk {
 	ehrpwm1_tbclk: ehrpwm1_tbclk {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,gate-clock";
 		compatible = "ti,gate-clock";
-		clocks = <&dpll_per_m2_ck>;
+		clocks = <&l4ls_gclk>;
 		ti,bit-shift = <1>;
 		ti,bit-shift = <1>;
 		reg = <0x0664>;
 		reg = <0x0664>;
 	};
 	};
@@ -123,7 +123,7 @@
 	ehrpwm2_tbclk: ehrpwm2_tbclk {
 	ehrpwm2_tbclk: ehrpwm2_tbclk {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,gate-clock";
 		compatible = "ti,gate-clock";
-		clocks = <&dpll_per_m2_ck>;
+		clocks = <&l4ls_gclk>;
 		ti,bit-shift = <2>;
 		ti,bit-shift = <2>;
 		reg = <0x0664>;
 		reg = <0x0664>;
 	};
 	};
@@ -131,7 +131,7 @@
 	ehrpwm3_tbclk: ehrpwm3_tbclk {
 	ehrpwm3_tbclk: ehrpwm3_tbclk {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,gate-clock";
 		compatible = "ti,gate-clock";
-		clocks = <&dpll_per_m2_ck>;
+		clocks = <&l4ls_gclk>;
 		ti,bit-shift = <4>;
 		ti,bit-shift = <4>;
 		reg = <0x0664>;
 		reg = <0x0664>;
 	};
 	};
@@ -139,7 +139,7 @@
 	ehrpwm4_tbclk: ehrpwm4_tbclk {
 	ehrpwm4_tbclk: ehrpwm4_tbclk {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,gate-clock";
 		compatible = "ti,gate-clock";
-		clocks = <&dpll_per_m2_ck>;
+		clocks = <&l4ls_gclk>;
 		ti,bit-shift = <5>;
 		ti,bit-shift = <5>;
 		reg = <0x0664>;
 		reg = <0x0664>;
 	};
 	};
@@ -147,7 +147,7 @@
 	ehrpwm5_tbclk: ehrpwm5_tbclk {
 	ehrpwm5_tbclk: ehrpwm5_tbclk {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,gate-clock";
 		compatible = "ti,gate-clock";
-		clocks = <&dpll_per_m2_ck>;
+		clocks = <&l4ls_gclk>;
 		ti,bit-shift = <6>;
 		ti,bit-shift = <6>;
 		reg = <0x0664>;
 		reg = <0x0664>;
 	};
 	};

+ 4 - 6
arch/arm/boot/dts/dra7-evm.dts

@@ -263,17 +263,15 @@
 
 
 	dcan1_pins_default: dcan1_pins_default {
 	dcan1_pins_default: dcan1_pins_default {
 		pinctrl-single,pins = <
 		pinctrl-single,pins = <
-			0x3d0   (PIN_OUTPUT | MUX_MODE0) /* dcan1_tx */
-			0x3d4   (MUX_MODE15)		/* dcan1_rx.off */
-			0x418   (PULL_DIS | MUX_MODE1) /* wakeup0.dcan1_rx */
+			0x3d0   (PIN_OUTPUT_PULLUP | MUX_MODE0) /* dcan1_tx */
+			0x418   (PULL_UP | MUX_MODE1) /* wakeup0.dcan1_rx */
 		>;
 		>;
 	};
 	};
 
 
 	dcan1_pins_sleep: dcan1_pins_sleep {
 	dcan1_pins_sleep: dcan1_pins_sleep {
 		pinctrl-single,pins = <
 		pinctrl-single,pins = <
-			0x3d0   (MUX_MODE15)	/* dcan1_tx.off */
-			0x3d4   (MUX_MODE15)	/* dcan1_rx.off */
-			0x418   (MUX_MODE15)	/* wakeup0.off */
+			0x3d0   (MUX_MODE15 | PULL_UP)	/* dcan1_tx.off */
+			0x418   (MUX_MODE15 | PULL_UP)	/* wakeup0.off */
 		>;
 		>;
 	};
 	};
 };
 };

+ 4 - 6
arch/arm/boot/dts/dra72-evm.dts

@@ -119,17 +119,15 @@
 
 
 	dcan1_pins_default: dcan1_pins_default {
 	dcan1_pins_default: dcan1_pins_default {
 		pinctrl-single,pins = <
 		pinctrl-single,pins = <
-			0x3d0   (PIN_OUTPUT | MUX_MODE0) /* dcan1_tx */
-			0x3d4   (MUX_MODE15)		/* dcan1_rx.off */
-			0x418   (PULL_DIS | MUX_MODE1) /* wakeup0.dcan1_rx */
+			0x3d0   (PIN_OUTPUT_PULLUP | MUX_MODE0) /* dcan1_tx */
+			0x418   (PULL_UP | MUX_MODE1)	/* wakeup0.dcan1_rx */
 		>;
 		>;
 	};
 	};
 
 
 	dcan1_pins_sleep: dcan1_pins_sleep {
 	dcan1_pins_sleep: dcan1_pins_sleep {
 		pinctrl-single,pins = <
 		pinctrl-single,pins = <
-			0x3d0   (MUX_MODE15)	/* dcan1_tx.off */
-			0x3d4   (MUX_MODE15)	/* dcan1_rx.off */
-			0x418   (MUX_MODE15)	/* wakeup0.off */
+			0x3d0   (MUX_MODE15 | PULL_UP)	/* dcan1_tx.off */
+			0x418   (MUX_MODE15 | PULL_UP)	/* wakeup0.off */
 		>;
 		>;
 	};
 	};
 
 

+ 81 - 9
arch/arm/boot/dts/dra7xx-clocks.dtsi

@@ -243,10 +243,18 @@
 		ti,invert-autoidle-bit;
 		ti,invert-autoidle-bit;
 	};
 	};
 
 
+	dpll_core_byp_mux: dpll_core_byp_mux {
+		#clock-cells = <0>;
+		compatible = "ti,mux-clock";
+		clocks = <&sys_clkin1>, <&dpll_abe_m3x2_ck>;
+		ti,bit-shift = <23>;
+		reg = <0x012c>;
+	};
+
 	dpll_core_ck: dpll_core_ck {
 	dpll_core_ck: dpll_core_ck {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,omap4-dpll-core-clock";
 		compatible = "ti,omap4-dpll-core-clock";
-		clocks = <&sys_clkin1>, <&dpll_abe_m3x2_ck>;
+		clocks = <&sys_clkin1>, <&dpll_core_byp_mux>;
 		reg = <0x0120>, <0x0124>, <0x012c>, <0x0128>;
 		reg = <0x0120>, <0x0124>, <0x012c>, <0x0128>;
 	};
 	};
 
 
@@ -309,10 +317,18 @@
 		clock-div = <1>;
 		clock-div = <1>;
 	};
 	};
 
 
+	dpll_dsp_byp_mux: dpll_dsp_byp_mux {
+		#clock-cells = <0>;
+		compatible = "ti,mux-clock";
+		clocks = <&sys_clkin1>, <&dsp_dpll_hs_clk_div>;
+		ti,bit-shift = <23>;
+		reg = <0x0240>;
+	};
+
 	dpll_dsp_ck: dpll_dsp_ck {
 	dpll_dsp_ck: dpll_dsp_ck {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,omap4-dpll-clock";
 		compatible = "ti,omap4-dpll-clock";
-		clocks = <&sys_clkin1>, <&dsp_dpll_hs_clk_div>;
+		clocks = <&sys_clkin1>, <&dpll_dsp_byp_mux>;
 		reg = <0x0234>, <0x0238>, <0x0240>, <0x023c>;
 		reg = <0x0234>, <0x0238>, <0x0240>, <0x023c>;
 	};
 	};
 
 
@@ -335,10 +351,18 @@
 		clock-div = <1>;
 		clock-div = <1>;
 	};
 	};
 
 
+	dpll_iva_byp_mux: dpll_iva_byp_mux {
+		#clock-cells = <0>;
+		compatible = "ti,mux-clock";
+		clocks = <&sys_clkin1>, <&iva_dpll_hs_clk_div>;
+		ti,bit-shift = <23>;
+		reg = <0x01ac>;
+	};
+
 	dpll_iva_ck: dpll_iva_ck {
 	dpll_iva_ck: dpll_iva_ck {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,omap4-dpll-clock";
 		compatible = "ti,omap4-dpll-clock";
-		clocks = <&sys_clkin1>, <&iva_dpll_hs_clk_div>;
+		clocks = <&sys_clkin1>, <&dpll_iva_byp_mux>;
 		reg = <0x01a0>, <0x01a4>, <0x01ac>, <0x01a8>;
 		reg = <0x01a0>, <0x01a4>, <0x01ac>, <0x01a8>;
 	};
 	};
 
 
@@ -361,10 +385,18 @@
 		clock-div = <1>;
 		clock-div = <1>;
 	};
 	};
 
 
+	dpll_gpu_byp_mux: dpll_gpu_byp_mux {
+		#clock-cells = <0>;
+		compatible = "ti,mux-clock";
+		clocks = <&sys_clkin1>, <&dpll_abe_m3x2_ck>;
+		ti,bit-shift = <23>;
+		reg = <0x02e4>;
+	};
+
 	dpll_gpu_ck: dpll_gpu_ck {
 	dpll_gpu_ck: dpll_gpu_ck {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,omap4-dpll-clock";
 		compatible = "ti,omap4-dpll-clock";
-		clocks = <&sys_clkin1>, <&dpll_abe_m3x2_ck>;
+		clocks = <&sys_clkin1>, <&dpll_gpu_byp_mux>;
 		reg = <0x02d8>, <0x02dc>, <0x02e4>, <0x02e0>;
 		reg = <0x02d8>, <0x02dc>, <0x02e4>, <0x02e0>;
 	};
 	};
 
 
@@ -398,10 +430,18 @@
 		clock-div = <1>;
 		clock-div = <1>;
 	};
 	};
 
 
+	dpll_ddr_byp_mux: dpll_ddr_byp_mux {
+		#clock-cells = <0>;
+		compatible = "ti,mux-clock";
+		clocks = <&sys_clkin1>, <&dpll_abe_m3x2_ck>;
+		ti,bit-shift = <23>;
+		reg = <0x021c>;
+	};
+
 	dpll_ddr_ck: dpll_ddr_ck {
 	dpll_ddr_ck: dpll_ddr_ck {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,omap4-dpll-clock";
 		compatible = "ti,omap4-dpll-clock";
-		clocks = <&sys_clkin1>, <&dpll_abe_m3x2_ck>;
+		clocks = <&sys_clkin1>, <&dpll_ddr_byp_mux>;
 		reg = <0x0210>, <0x0214>, <0x021c>, <0x0218>;
 		reg = <0x0210>, <0x0214>, <0x021c>, <0x0218>;
 	};
 	};
 
 
@@ -416,10 +456,18 @@
 		ti,invert-autoidle-bit;
 		ti,invert-autoidle-bit;
 	};
 	};
 
 
+	dpll_gmac_byp_mux: dpll_gmac_byp_mux {
+		#clock-cells = <0>;
+		compatible = "ti,mux-clock";
+		clocks = <&sys_clkin1>, <&dpll_abe_m3x2_ck>;
+		ti,bit-shift = <23>;
+		reg = <0x02b4>;
+	};
+
 	dpll_gmac_ck: dpll_gmac_ck {
 	dpll_gmac_ck: dpll_gmac_ck {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,omap4-dpll-clock";
 		compatible = "ti,omap4-dpll-clock";
-		clocks = <&sys_clkin1>, <&dpll_abe_m3x2_ck>;
+		clocks = <&sys_clkin1>, <&dpll_gmac_byp_mux>;
 		reg = <0x02a8>, <0x02ac>, <0x02b4>, <0x02b0>;
 		reg = <0x02a8>, <0x02ac>, <0x02b4>, <0x02b0>;
 	};
 	};
 
 
@@ -482,10 +530,18 @@
 		clock-div = <1>;
 		clock-div = <1>;
 	};
 	};
 
 
+	dpll_eve_byp_mux: dpll_eve_byp_mux {
+		#clock-cells = <0>;
+		compatible = "ti,mux-clock";
+		clocks = <&sys_clkin1>, <&eve_dpll_hs_clk_div>;
+		ti,bit-shift = <23>;
+		reg = <0x0290>;
+	};
+
 	dpll_eve_ck: dpll_eve_ck {
 	dpll_eve_ck: dpll_eve_ck {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,omap4-dpll-clock";
 		compatible = "ti,omap4-dpll-clock";
-		clocks = <&sys_clkin1>, <&eve_dpll_hs_clk_div>;
+		clocks = <&sys_clkin1>, <&dpll_eve_byp_mux>;
 		reg = <0x0284>, <0x0288>, <0x0290>, <0x028c>;
 		reg = <0x0284>, <0x0288>, <0x0290>, <0x028c>;
 	};
 	};
 
 
@@ -1249,10 +1305,18 @@
 		clock-div = <1>;
 		clock-div = <1>;
 	};
 	};
 
 
+	dpll_per_byp_mux: dpll_per_byp_mux {
+		#clock-cells = <0>;
+		compatible = "ti,mux-clock";
+		clocks = <&sys_clkin1>, <&per_dpll_hs_clk_div>;
+		ti,bit-shift = <23>;
+		reg = <0x014c>;
+	};
+
 	dpll_per_ck: dpll_per_ck {
 	dpll_per_ck: dpll_per_ck {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,omap4-dpll-clock";
 		compatible = "ti,omap4-dpll-clock";
-		clocks = <&sys_clkin1>, <&per_dpll_hs_clk_div>;
+		clocks = <&sys_clkin1>, <&dpll_per_byp_mux>;
 		reg = <0x0140>, <0x0144>, <0x014c>, <0x0148>;
 		reg = <0x0140>, <0x0144>, <0x014c>, <0x0148>;
 	};
 	};
 
 
@@ -1275,10 +1339,18 @@
 		clock-div = <1>;
 		clock-div = <1>;
 	};
 	};
 
 
+	dpll_usb_byp_mux: dpll_usb_byp_mux {
+		#clock-cells = <0>;
+		compatible = "ti,mux-clock";
+		clocks = <&sys_clkin1>, <&usb_dpll_hs_clk_div>;
+		ti,bit-shift = <23>;
+		reg = <0x018c>;
+	};
+
 	dpll_usb_ck: dpll_usb_ck {
 	dpll_usb_ck: dpll_usb_ck {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,omap4-dpll-j-type-clock";
 		compatible = "ti,omap4-dpll-j-type-clock";
-		clocks = <&sys_clkin1>, <&usb_dpll_hs_clk_div>;
+		clocks = <&sys_clkin1>, <&dpll_usb_byp_mux>;
 		reg = <0x0180>, <0x0184>, <0x018c>, <0x0188>;
 		reg = <0x0180>, <0x0184>, <0x018c>, <0x0188>;
 	};
 	};
 
 

+ 2 - 0
arch/arm/boot/dts/exynos3250.dtsi

@@ -18,6 +18,7 @@
  */
  */
 
 
 #include "skeleton.dtsi"
 #include "skeleton.dtsi"
+#include "exynos4-cpu-thermal.dtsi"
 #include <dt-bindings/clock/exynos3250.h>
 #include <dt-bindings/clock/exynos3250.h>
 
 
 / {
 / {
@@ -193,6 +194,7 @@
 			interrupts = <0 216 0>;
 			interrupts = <0 216 0>;
 			clocks = <&cmu CLK_TMU_APBIF>;
 			clocks = <&cmu CLK_TMU_APBIF>;
 			clock-names = "tmu_apbif";
 			clock-names = "tmu_apbif";
+			#include "exynos4412-tmu-sensor-conf.dtsi"
 			status = "disabled";
 			status = "disabled";
 		};
 		};
 
 

+ 52 - 0
arch/arm/boot/dts/exynos4-cpu-thermal.dtsi

@@ -0,0 +1,52 @@
+/*
+ * Device tree sources for Exynos4 thermal zone
+ *
+ * Copyright (c) 2014 Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <dt-bindings/thermal/thermal.h>
+
+/ {
+thermal-zones {
+	cpu_thermal: cpu-thermal {
+		thermal-sensors = <&tmu 0>;
+		polling-delay-passive = <0>;
+		polling-delay = <0>;
+		trips {
+			cpu_alert0: cpu-alert-0 {
+				temperature = <70000>; /* millicelsius */
+				hysteresis = <10000>; /* millicelsius */
+				type = "active";
+			};
+			cpu_alert1: cpu-alert-1 {
+				temperature = <95000>; /* millicelsius */
+				hysteresis = <10000>; /* millicelsius */
+				type = "active";
+			};
+			cpu_alert2: cpu-alert-2 {
+				temperature = <110000>; /* millicelsius */
+				hysteresis = <10000>; /* millicelsius */
+				type = "active";
+			};
+			cpu_crit0: cpu-crit-0 {
+				temperature = <120000>; /* millicelsius */
+				hysteresis = <0>; /* millicelsius */
+				type = "critical";
+			};
+		};
+		cooling-maps {
+			map0 {
+				trip = <&cpu_alert0>;
+			};
+			map1 {
+				trip = <&cpu_alert1>;
+			};
+		};
+	};
+};
+};

+ 45 - 0
arch/arm/boot/dts/exynos4.dtsi

@@ -38,6 +38,7 @@
 		i2c5 = &i2c_5;
 		i2c5 = &i2c_5;
 		i2c6 = &i2c_6;
 		i2c6 = &i2c_6;
 		i2c7 = &i2c_7;
 		i2c7 = &i2c_7;
+		i2c8 = &i2c_8;
 		csis0 = &csis_0;
 		csis0 = &csis_0;
 		csis1 = &csis_1;
 		csis1 = &csis_1;
 		fimc0 = &fimc_0;
 		fimc0 = &fimc_0;
@@ -104,6 +105,7 @@
 		compatible = "samsung,exynos4210-pd";
 		compatible = "samsung,exynos4210-pd";
 		reg = <0x10023C20 0x20>;
 		reg = <0x10023C20 0x20>;
 		#power-domain-cells = <0>;
 		#power-domain-cells = <0>;
+		power-domains = <&pd_lcd0>;
 	};
 	};
 
 
 	pd_cam: cam-power-domain@10023C00 {
 	pd_cam: cam-power-domain@10023C00 {
@@ -554,6 +556,22 @@
 		status = "disabled";
 		status = "disabled";
 	};
 	};
 
 
+	i2c_8: i2c@138E0000 {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		compatible = "samsung,s3c2440-hdmiphy-i2c";
+		reg = <0x138E0000 0x100>;
+		interrupts = <0 93 0>;
+		clocks = <&clock CLK_I2C_HDMI>;
+		clock-names = "i2c";
+		status = "disabled";
+
+		hdmi_i2c_phy: hdmiphy@38 {
+			compatible = "exynos4210-hdmiphy";
+			reg = <0x38>;
+		};
+	};
+
 	spi_0: spi@13920000 {
 	spi_0: spi@13920000 {
 		compatible = "samsung,exynos4210-spi";
 		compatible = "samsung,exynos4210-spi";
 		reg = <0x13920000 0x100>;
 		reg = <0x13920000 0x100>;
@@ -663,6 +681,33 @@
 		status = "disabled";
 		status = "disabled";
 	};
 	};
 
 
+	tmu: tmu@100C0000 {
+		#include "exynos4412-tmu-sensor-conf.dtsi"
+	};
+
+	hdmi: hdmi@12D00000 {
+		compatible = "samsung,exynos4210-hdmi";
+		reg = <0x12D00000 0x70000>;
+		interrupts = <0 92 0>;
+		clock-names = "hdmi", "sclk_hdmi", "sclk_pixel", "sclk_hdmiphy",
+			"mout_hdmi";
+		clocks = <&clock CLK_HDMI>, <&clock CLK_SCLK_HDMI>,
+			<&clock CLK_SCLK_PIXEL>, <&clock CLK_SCLK_HDMIPHY>,
+			<&clock CLK_MOUT_HDMI>;
+		phy = <&hdmi_i2c_phy>;
+		power-domains = <&pd_tv>;
+		samsung,syscon-phandle = <&pmu_system_controller>;
+		status = "disabled";
+	};
+
+	mixer: mixer@12C10000 {
+		compatible = "samsung,exynos4210-mixer";
+		interrupts = <0 91 0>;
+		reg = <0x12C10000 0x2100>, <0x12c00000 0x300>;
+		power-domains = <&pd_tv>;
+		status = "disabled";
+	};
+
 	ppmu_dmc0: ppmu_dmc0@106a0000 {
 	ppmu_dmc0: ppmu_dmc0@106a0000 {
 		compatible = "samsung,exynos-ppmu";
 		compatible = "samsung,exynos-ppmu";
 		reg = <0x106a0000 0x2000>;
 		reg = <0x106a0000 0x2000>;

+ 19 - 0
arch/arm/boot/dts/exynos4210-trats.dts

@@ -426,6 +426,25 @@
 		status = "okay";
 		status = "okay";
 	};
 	};
 
 
+	tmu@100C0000 {
+		status = "okay";
+	};
+
+	thermal-zones {
+		cpu_thermal: cpu-thermal {
+			cooling-maps {
+				map0 {
+				     /* Corresponds to 800MHz at freq_table */
+				     cooling-device = <&cpu0 2 2>;
+				};
+				map1 {
+				     /* Corresponds to 200MHz at freq_table */
+				     cooling-device = <&cpu0 4 4>;
+			       };
+		       };
+		};
+	};
+
 	camera {
 	camera {
 		pinctrl-names = "default";
 		pinctrl-names = "default";
 		pinctrl-0 = <>;
 		pinctrl-0 = <>;

+ 57 - 0
arch/arm/boot/dts/exynos4210-universal_c210.dts

@@ -505,6 +505,63 @@
 			assigned-clock-rates = <0>, <160000000>;
 			assigned-clock-rates = <0>, <160000000>;
 		};
 		};
 	};
 	};
+
+	hdmi_en: voltage-regulator-hdmi-5v {
+		compatible = "regulator-fixed";
+		regulator-name = "HDMI_5V";
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		gpio = <&gpe0 1 0>;
+		enable-active-high;
+	};
+
+	hdmi_ddc: i2c-ddc {
+		compatible = "i2c-gpio";
+		gpios = <&gpe4 2 0 &gpe4 3 0>;
+		i2c-gpio,delay-us = <100>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		pinctrl-0 = <&i2c_ddc_bus>;
+		pinctrl-names = "default";
+		status = "okay";
+	};
+
+	mixer@12C10000 {
+		status = "okay";
+	};
+
+	hdmi@12D00000 {
+		hpd-gpio = <&gpx3 7 0>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&hdmi_hpd>;
+		hdmi-en-supply = <&hdmi_en>;
+		vdd-supply = <&ldo3_reg>;
+		vdd_osc-supply = <&ldo4_reg>;
+		vdd_pll-supply = <&ldo3_reg>;
+		ddc = <&hdmi_ddc>;
+		status = "okay";
+	};
+
+	i2c@138E0000 {
+		status = "okay";
+	};
+};
+
+&pinctrl_1 {
+	hdmi_hpd: hdmi-hpd {
+		samsung,pins = "gpx3-7";
+		samsung,pin-pud = <0>;
+	};
+};
+
+&pinctrl_0 {
+	i2c_ddc_bus: i2c-ddc-bus {
+		samsung,pins = "gpe4-2", "gpe4-3";
+		samsung,pin-function = <2>;
+		samsung,pin-pud = <3>;
+		samsung,pin-drv = <0>;
+	};
 };
 };
 
 
 &mdma1 {
 &mdma1 {

+ 36 - 2
arch/arm/boot/dts/exynos4210.dtsi

@@ -21,6 +21,7 @@
 
 
 #include "exynos4.dtsi"
 #include "exynos4.dtsi"
 #include "exynos4210-pinctrl.dtsi"
 #include "exynos4210-pinctrl.dtsi"
+#include "exynos4-cpu-thermal.dtsi"
 
 
 / {
 / {
 	compatible = "samsung,exynos4210", "samsung,exynos4";
 	compatible = "samsung,exynos4210", "samsung,exynos4";
@@ -35,10 +36,13 @@
 		#address-cells = <1>;
 		#address-cells = <1>;
 		#size-cells = <0>;
 		#size-cells = <0>;
 
 
-		cpu@900 {
+		cpu0: cpu@900 {
 			device_type = "cpu";
 			device_type = "cpu";
 			compatible = "arm,cortex-a9";
 			compatible = "arm,cortex-a9";
 			reg = <0x900>;
 			reg = <0x900>;
+			cooling-min-level = <4>;
+			cooling-max-level = <2>;
+			#cooling-cells = <2>; /* min followed by max */
 		};
 		};
 
 
 		cpu@901 {
 		cpu@901 {
@@ -153,16 +157,38 @@
 		reg = <0x03860000 0x1000>;
 		reg = <0x03860000 0x1000>;
 	};
 	};
 
 
-	tmu@100C0000 {
+	tmu: tmu@100C0000 {
 		compatible = "samsung,exynos4210-tmu";
 		compatible = "samsung,exynos4210-tmu";
 		interrupt-parent = <&combiner>;
 		interrupt-parent = <&combiner>;
 		reg = <0x100C0000 0x100>;
 		reg = <0x100C0000 0x100>;
 		interrupts = <2 4>;
 		interrupts = <2 4>;
 		clocks = <&clock CLK_TMU_APBIF>;
 		clocks = <&clock CLK_TMU_APBIF>;
 		clock-names = "tmu_apbif";
 		clock-names = "tmu_apbif";
+		samsung,tmu_gain = <15>;
+		samsung,tmu_reference_voltage = <7>;
 		status = "disabled";
 		status = "disabled";
 	};
 	};
 
 
+	thermal-zones {
+		cpu_thermal: cpu-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tmu 0>;
+
+			trips {
+			      cpu_alert0: cpu-alert-0 {
+				      temperature = <85000>; /* millicelsius */
+			      };
+			      cpu_alert1: cpu-alert-1 {
+				      temperature = <100000>; /* millicelsius */
+			      };
+			      cpu_alert2: cpu-alert-2 {
+				      temperature = <110000>; /* millicelsius */
+			      };
+			};
+		};
+	};
+
 	g2d@12800000 {
 	g2d@12800000 {
 		compatible = "samsung,s5pv210-g2d";
 		compatible = "samsung,s5pv210-g2d";
 		reg = <0x12800000 0x1000>;
 		reg = <0x12800000 0x1000>;
@@ -203,6 +229,14 @@
 		};
 		};
 	};
 	};
 
 
+	mixer: mixer@12C10000 {
+		clock-names = "mixer", "hdmi", "sclk_hdmi", "vp", "mout_mixer",
+			"sclk_mixer";
+		clocks = <&clock CLK_MIXER>, <&clock CLK_HDMI>,
+			<&clock CLK_SCLK_HDMI>, <&clock CLK_VP>,
+			<&clock CLK_MOUT_MIXER>, <&clock CLK_SCLK_MIXER>;
+	};
+
 	ppmu_lcd1: ppmu_lcd1@12240000 {
 	ppmu_lcd1: ppmu_lcd1@12240000 {
 		compatible = "samsung,exynos-ppmu";
 		compatible = "samsung,exynos-ppmu";
 		reg = <0x12240000 0x2000>;
 		reg = <0x12240000 0x2000>;

+ 4 - 1
arch/arm/boot/dts/exynos4212.dtsi

@@ -26,10 +26,13 @@
 		#address-cells = <1>;
 		#address-cells = <1>;
 		#size-cells = <0>;
 		#size-cells = <0>;
 
 
-		cpu@A00 {
+		cpu0: cpu@A00 {
 			device_type = "cpu";
 			device_type = "cpu";
 			compatible = "arm,cortex-a9";
 			compatible = "arm,cortex-a9";
 			reg = <0xA00>;
 			reg = <0xA00>;
+			cooling-min-level = <13>;
+			cooling-max-level = <7>;
+			#cooling-cells = <2>; /* min followed by max */
 		};
 		};
 
 
 		cpu@A01 {
 		cpu@A01 {

+ 64 - 0
arch/arm/boot/dts/exynos4412-odroid-common.dtsi

@@ -249,6 +249,20 @@
 					regulator-always-on;
 					regulator-always-on;
 				};
 				};
 
 
+				ldo8_reg: ldo@8 {
+					regulator-compatible = "LDO8";
+					regulator-name = "VDD10_HDMI_1.0V";
+					regulator-min-microvolt = <1000000>;
+					regulator-max-microvolt = <1000000>;
+				};
+
+				ldo10_reg: ldo@10 {
+					regulator-compatible = "LDO10";
+					regulator-name = "VDDQ_MIPIHSI_1.8V";
+					regulator-min-microvolt = <1800000>;
+					regulator-max-microvolt = <1800000>;
+				};
+
 				ldo11_reg: LDO11 {
 				ldo11_reg: LDO11 {
 					regulator-name = "VDD18_ABB1_1.8V";
 					regulator-name = "VDD18_ABB1_1.8V";
 					regulator-min-microvolt = <1800000>;
 					regulator-min-microvolt = <1800000>;
@@ -411,6 +425,51 @@
 	ehci: ehci@12580000 {
 	ehci: ehci@12580000 {
 		status = "okay";
 		status = "okay";
 	};
 	};
+
+	tmu@100C0000 {
+		vtmu-supply = <&ldo10_reg>;
+		status = "okay";
+	};
+
+	thermal-zones {
+		cpu_thermal: cpu-thermal {
+			cooling-maps {
+				map0 {
+				     /* Corresponds to 800MHz at freq_table */
+				     cooling-device = <&cpu0 7 7>;
+				};
+				map1 {
+				     /* Corresponds to 200MHz at freq_table */
+				     cooling-device = <&cpu0 13 13>;
+			       };
+		       };
+		};
+	};
+
+	mixer: mixer@12C10000 {
+		status = "okay";
+	};
+
+	hdmi@12D00000 {
+		hpd-gpio = <&gpx3 7 0>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&hdmi_hpd>;
+		vdd-supply = <&ldo8_reg>;
+		vdd_osc-supply = <&ldo10_reg>;
+		vdd_pll-supply = <&ldo8_reg>;
+		ddc = <&hdmi_ddc>;
+		status = "okay";
+	};
+
+	hdmi_ddc: i2c@13880000 {
+		status = "okay";
+		pinctrl-names = "default";
+		pinctrl-0 = <&i2c2_bus>;
+	};
+
+	i2c@138E0000 {
+		status = "okay";
+	};
 };
 };
 
 
 &pinctrl_1 {
 &pinctrl_1 {
@@ -425,4 +484,9 @@
 		samsung,pin-pud = <0>;
 		samsung,pin-pud = <0>;
 		samsung,pin-drv = <0>;
 		samsung,pin-drv = <0>;
 	};
 	};
+
+	hdmi_hpd: hdmi-hpd {
+		samsung,pins = "gpx3-7";
+		samsung,pin-pud = <1>;
+	};
 };
 };

+ 24 - 0
arch/arm/boot/dts/exynos4412-tmu-sensor-conf.dtsi

@@ -0,0 +1,24 @@
+/*
+ * Device tree sources for Exynos4412 TMU sensor configuration
+ *
+ * Copyright (c) 2014 Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <dt-bindings/thermal/thermal_exynos.h>
+
+#thermal-sensor-cells = <0>;
+samsung,tmu_gain = <8>;
+samsung,tmu_reference_voltage = <16>;
+samsung,tmu_noise_cancel_mode = <4>;
+samsung,tmu_efuse_value = <55>;
+samsung,tmu_min_efuse_value = <40>;
+samsung,tmu_max_efuse_value = <100>;
+samsung,tmu_first_point_trim = <25>;
+samsung,tmu_second_point_trim = <85>;
+samsung,tmu_default_temp_offset = <50>;
+samsung,tmu_cal_type = <TYPE_ONE_POINT_TRIMMING>;

+ 15 - 0
arch/arm/boot/dts/exynos4412-trats2.dts

@@ -927,6 +927,21 @@
 		pulldown-ohm = <100000>; /* 100K */
 		pulldown-ohm = <100000>; /* 100K */
 		io-channels = <&adc 2>;  /* Battery temperature */
 		io-channels = <&adc 2>;  /* Battery temperature */
 	};
 	};
+
+	thermal-zones {
+		cpu_thermal: cpu-thermal {
+			cooling-maps {
+				map0 {
+				     /* Corresponds to 800MHz at freq_table */
+				     cooling-device = <&cpu0 7 7>;
+				};
+				map1 {
+				     /* Corresponds to 200MHz at freq_table */
+				     cooling-device = <&cpu0 13 13>;
+			       };
+		       };
+		};
+	};
 };
 };
 
 
 &pmu_system_controller {
 &pmu_system_controller {

+ 4 - 1
arch/arm/boot/dts/exynos4412.dtsi

@@ -26,10 +26,13 @@
 		#address-cells = <1>;
 		#address-cells = <1>;
 		#size-cells = <0>;
 		#size-cells = <0>;
 
 
-		cpu@A00 {
+		cpu0: cpu@A00 {
 			device_type = "cpu";
 			device_type = "cpu";
 			compatible = "arm,cortex-a9";
 			compatible = "arm,cortex-a9";
 			reg = <0xA00>;
 			reg = <0xA00>;
+			cooling-min-level = <13>;
+			cooling-max-level = <7>;
+			#cooling-cells = <2>; /* min followed by max */
 		};
 		};
 
 
 		cpu@A01 {
 		cpu@A01 {

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

@@ -19,6 +19,7 @@
 
 
 #include "exynos4.dtsi"
 #include "exynos4.dtsi"
 #include "exynos4x12-pinctrl.dtsi"
 #include "exynos4x12-pinctrl.dtsi"
+#include "exynos4-cpu-thermal.dtsi"
 
 
 / {
 / {
 	aliases {
 	aliases {
@@ -297,4 +298,15 @@
 		clock-names = "tmu_apbif";
 		clock-names = "tmu_apbif";
 		status = "disabled";
 		status = "disabled";
 	};
 	};
+
+	hdmi: hdmi@12D00000 {
+		compatible = "samsung,exynos4212-hdmi";
+	};
+
+	mixer: mixer@12C10000 {
+		compatible = "samsung,exynos4212-mixer";
+		clock-names = "mixer", "hdmi", "sclk_hdmi", "vp";
+		clocks = <&clock CLK_MIXER>, <&clock CLK_HDMI>,
+			 <&clock CLK_SCLK_HDMI>, <&clock CLK_VP>;
+	};
 };
 };

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

@@ -20,7 +20,7 @@
 #include <dt-bindings/clock/exynos5250.h>
 #include <dt-bindings/clock/exynos5250.h>
 #include "exynos5.dtsi"
 #include "exynos5.dtsi"
 #include "exynos5250-pinctrl.dtsi"
 #include "exynos5250-pinctrl.dtsi"
-
+#include "exynos4-cpu-thermal.dtsi"
 #include <dt-bindings/clock/exynos-audss-clk.h>
 #include <dt-bindings/clock/exynos-audss-clk.h>
 
 
 / {
 / {
@@ -58,11 +58,14 @@
 		#address-cells = <1>;
 		#address-cells = <1>;
 		#size-cells = <0>;
 		#size-cells = <0>;
 
 
-		cpu@0 {
+		cpu0: cpu@0 {
 			device_type = "cpu";
 			device_type = "cpu";
 			compatible = "arm,cortex-a15";
 			compatible = "arm,cortex-a15";
 			reg = <0>;
 			reg = <0>;
 			clock-frequency = <1700000000>;
 			clock-frequency = <1700000000>;
+			cooling-min-level = <15>;
+			cooling-max-level = <9>;
+			#cooling-cells = <2>; /* min followed by max */
 		};
 		};
 		cpu@1 {
 		cpu@1 {
 			device_type = "cpu";
 			device_type = "cpu";
@@ -102,6 +105,12 @@
 		#power-domain-cells = <0>;
 		#power-domain-cells = <0>;
 	};
 	};
 
 
+	pd_disp1: disp1-power-domain@100440A0 {
+		compatible = "samsung,exynos4210-pd";
+		reg = <0x100440A0 0x20>;
+		#power-domain-cells = <0>;
+	};
+
 	clock: clock-controller@10010000 {
 	clock: clock-controller@10010000 {
 		compatible = "samsung,exynos5250-clock";
 		compatible = "samsung,exynos5250-clock";
 		reg = <0x10010000 0x30000>;
 		reg = <0x10010000 0x30000>;
@@ -235,12 +244,32 @@
 		status = "disabled";
 		status = "disabled";
 	};
 	};
 
 
-	tmu@10060000 {
+	tmu: tmu@10060000 {
 		compatible = "samsung,exynos5250-tmu";
 		compatible = "samsung,exynos5250-tmu";
 		reg = <0x10060000 0x100>;
 		reg = <0x10060000 0x100>;
 		interrupts = <0 65 0>;
 		interrupts = <0 65 0>;
 		clocks = <&clock CLK_TMU>;
 		clocks = <&clock CLK_TMU>;
 		clock-names = "tmu_apbif";
 		clock-names = "tmu_apbif";
+		#include "exynos4412-tmu-sensor-conf.dtsi"
+	};
+
+	thermal-zones {
+		cpu_thermal: cpu-thermal {
+			polling-delay-passive = <0>;
+			polling-delay = <0>;
+			thermal-sensors = <&tmu 0>;
+
+			cooling-maps {
+				map0 {
+				     /* Corresponds to 800MHz at freq_table */
+				     cooling-device = <&cpu0 9 9>;
+				};
+				map1 {
+				     /* Corresponds to 200MHz at freq_table */
+				     cooling-device = <&cpu0 15 15>;
+			       };
+		       };
+		};
 	};
 	};
 
 
 	serial@12C00000 {
 	serial@12C00000 {
@@ -719,6 +748,7 @@
 	hdmi: hdmi {
 	hdmi: hdmi {
 		compatible = "samsung,exynos4212-hdmi";
 		compatible = "samsung,exynos4212-hdmi";
 		reg = <0x14530000 0x70000>;
 		reg = <0x14530000 0x70000>;
+		power-domains = <&pd_disp1>;
 		interrupts = <0 95 0>;
 		interrupts = <0 95 0>;
 		clocks = <&clock CLK_HDMI>, <&clock CLK_SCLK_HDMI>,
 		clocks = <&clock CLK_HDMI>, <&clock CLK_SCLK_HDMI>,
 			 <&clock CLK_SCLK_PIXEL>, <&clock CLK_SCLK_HDMIPHY>,
 			 <&clock CLK_SCLK_PIXEL>, <&clock CLK_SCLK_HDMIPHY>,
@@ -731,9 +761,11 @@
 	mixer {
 	mixer {
 		compatible = "samsung,exynos5250-mixer";
 		compatible = "samsung,exynos5250-mixer";
 		reg = <0x14450000 0x10000>;
 		reg = <0x14450000 0x10000>;
+		power-domains = <&pd_disp1>;
 		interrupts = <0 94 0>;
 		interrupts = <0 94 0>;
-		clocks = <&clock CLK_MIXER>, <&clock CLK_SCLK_HDMI>;
-		clock-names = "mixer", "sclk_hdmi";
+		clocks = <&clock CLK_MIXER>, <&clock CLK_HDMI>,
+			 <&clock CLK_SCLK_HDMI>;
+		clock-names = "mixer", "hdmi", "sclk_hdmi";
 	};
 	};
 
 
 	dp_phy: video-phy@10040720 {
 	dp_phy: video-phy@10040720 {
@@ -743,6 +775,7 @@
 	};
 	};
 
 
 	dp: dp-controller@145B0000 {
 	dp: dp-controller@145B0000 {
+		power-domains = <&pd_disp1>;
 		clocks = <&clock CLK_DP>;
 		clocks = <&clock CLK_DP>;
 		clock-names = "dp";
 		clock-names = "dp";
 		phys = <&dp_phy>;
 		phys = <&dp_phy>;
@@ -750,6 +783,7 @@
 	};
 	};
 
 
 	fimd: fimd@14400000 {
 	fimd: fimd@14400000 {
+		power-domains = <&pd_disp1>;
 		clocks = <&clock CLK_SCLK_FIMD1>, <&clock CLK_FIMD1>;
 		clocks = <&clock CLK_SCLK_FIMD1>, <&clock CLK_FIMD1>;
 		clock-names = "sclk_fimd", "fimd";
 		clock-names = "sclk_fimd", "fimd";
 	};
 	};

+ 35 - 0
arch/arm/boot/dts/exynos5420-trip-points.dtsi

@@ -0,0 +1,35 @@
+/*
+ * Device tree sources for default Exynos5420 thermal zone definition
+ *
+ * Copyright (c) 2014 Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+polling-delay-passive = <0>;
+polling-delay = <0>;
+trips {
+	cpu-alert-0 {
+		temperature = <85000>; /* millicelsius */
+		hysteresis = <10000>; /* millicelsius */
+		type = "active";
+	};
+	cpu-alert-1 {
+		temperature = <103000>; /* millicelsius */
+		hysteresis = <10000>; /* millicelsius */
+		type = "active";
+	};
+	cpu-alert-2 {
+		temperature = <110000>; /* millicelsius */
+		hysteresis = <10000>; /* millicelsius */
+		type = "active";
+	};
+	cpu-crit-0 {
+		temperature = <1200000>; /* millicelsius */
+		hysteresis = <0>; /* millicelsius */
+		type = "critical";
+	};
+};

+ 31 - 2
arch/arm/boot/dts/exynos5420.dtsi

@@ -740,8 +740,9 @@
 		compatible = "samsung,exynos5420-mixer";
 		compatible = "samsung,exynos5420-mixer";
 		reg = <0x14450000 0x10000>;
 		reg = <0x14450000 0x10000>;
 		interrupts = <0 94 0>;
 		interrupts = <0 94 0>;
-		clocks = <&clock CLK_MIXER>, <&clock CLK_SCLK_HDMI>;
-		clock-names = "mixer", "sclk_hdmi";
+		clocks = <&clock CLK_MIXER>, <&clock CLK_HDMI>,
+			 <&clock CLK_SCLK_HDMI>;
+		clock-names = "mixer", "hdmi", "sclk_hdmi";
 		power-domains = <&disp_pd>;
 		power-domains = <&disp_pd>;
 	};
 	};
 
 
@@ -782,6 +783,7 @@
 		interrupts = <0 65 0>;
 		interrupts = <0 65 0>;
 		clocks = <&clock CLK_TMU>;
 		clocks = <&clock CLK_TMU>;
 		clock-names = "tmu_apbif";
 		clock-names = "tmu_apbif";
+		#include "exynos4412-tmu-sensor-conf.dtsi"
 	};
 	};
 
 
 	tmu_cpu1: tmu@10064000 {
 	tmu_cpu1: tmu@10064000 {
@@ -790,6 +792,7 @@
 		interrupts = <0 183 0>;
 		interrupts = <0 183 0>;
 		clocks = <&clock CLK_TMU>;
 		clocks = <&clock CLK_TMU>;
 		clock-names = "tmu_apbif";
 		clock-names = "tmu_apbif";
+		#include "exynos4412-tmu-sensor-conf.dtsi"
 	};
 	};
 
 
 	tmu_cpu2: tmu@10068000 {
 	tmu_cpu2: tmu@10068000 {
@@ -798,6 +801,7 @@
 		interrupts = <0 184 0>;
 		interrupts = <0 184 0>;
 		clocks = <&clock CLK_TMU>, <&clock CLK_TMU>;
 		clocks = <&clock CLK_TMU>, <&clock CLK_TMU>;
 		clock-names = "tmu_apbif", "tmu_triminfo_apbif";
 		clock-names = "tmu_apbif", "tmu_triminfo_apbif";
+		#include "exynos4412-tmu-sensor-conf.dtsi"
 	};
 	};
 
 
 	tmu_cpu3: tmu@1006c000 {
 	tmu_cpu3: tmu@1006c000 {
@@ -806,6 +810,7 @@
 		interrupts = <0 185 0>;
 		interrupts = <0 185 0>;
 		clocks = <&clock CLK_TMU>, <&clock CLK_TMU_GPU>;
 		clocks = <&clock CLK_TMU>, <&clock CLK_TMU_GPU>;
 		clock-names = "tmu_apbif", "tmu_triminfo_apbif";
 		clock-names = "tmu_apbif", "tmu_triminfo_apbif";
+		#include "exynos4412-tmu-sensor-conf.dtsi"
 	};
 	};
 
 
 	tmu_gpu: tmu@100a0000 {
 	tmu_gpu: tmu@100a0000 {
@@ -814,6 +819,30 @@
 		interrupts = <0 215 0>;
 		interrupts = <0 215 0>;
 		clocks = <&clock CLK_TMU_GPU>, <&clock CLK_TMU>;
 		clocks = <&clock CLK_TMU_GPU>, <&clock CLK_TMU>;
 		clock-names = "tmu_apbif", "tmu_triminfo_apbif";
 		clock-names = "tmu_apbif", "tmu_triminfo_apbif";
+		#include "exynos4412-tmu-sensor-conf.dtsi"
+	};
+
+	thermal-zones {
+		cpu0_thermal: cpu0-thermal {
+			thermal-sensors = <&tmu_cpu0>;
+			#include "exynos5420-trip-points.dtsi"
+		};
+		cpu1_thermal: cpu1-thermal {
+		       thermal-sensors = <&tmu_cpu1>;
+		       #include "exynos5420-trip-points.dtsi"
+		};
+		cpu2_thermal: cpu2-thermal {
+		       thermal-sensors = <&tmu_cpu2>;
+		       #include "exynos5420-trip-points.dtsi"
+		};
+		cpu3_thermal: cpu3-thermal {
+		       thermal-sensors = <&tmu_cpu3>;
+		       #include "exynos5420-trip-points.dtsi"
+		};
+		gpu_thermal: gpu-thermal {
+		       thermal-sensors = <&tmu_gpu>;
+		       #include "exynos5420-trip-points.dtsi"
+		};
 	};
 	};
 
 
         watchdog: watchdog@101D0000 {
         watchdog: watchdog@101D0000 {

+ 24 - 0
arch/arm/boot/dts/exynos5440-tmu-sensor-conf.dtsi

@@ -0,0 +1,24 @@
+/*
+ * Device tree sources for Exynos5440 TMU sensor configuration
+ *
+ * Copyright (c) 2014 Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <dt-bindings/thermal/thermal_exynos.h>
+
+#thermal-sensor-cells = <0>;
+samsung,tmu_gain = <5>;
+samsung,tmu_reference_voltage = <16>;
+samsung,tmu_noise_cancel_mode = <4>;
+samsung,tmu_efuse_value = <0x5d2d>;
+samsung,tmu_min_efuse_value = <16>;
+samsung,tmu_max_efuse_value = <76>;
+samsung,tmu_first_point_trim = <25>;
+samsung,tmu_second_point_trim = <70>;
+samsung,tmu_default_temp_offset = <25>;
+samsung,tmu_cal_type = <TYPE_ONE_POINT_TRIMMING>;

+ 25 - 0
arch/arm/boot/dts/exynos5440-trip-points.dtsi

@@ -0,0 +1,25 @@
+/*
+ * Device tree sources for default Exynos5440 thermal zone definition
+ *
+ * Copyright (c) 2014 Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+polling-delay-passive = <0>;
+polling-delay = <0>;
+trips {
+	cpu-alert-0 {
+		temperature = <100000>; /* millicelsius */
+		hysteresis = <0>; /* millicelsius */
+		type = "active";
+	};
+	cpu-crit-0 {
+		temperature = <1050000>; /* millicelsius */
+		hysteresis = <0>; /* millicelsius */
+		type = "critical";
+	};
+};

+ 18 - 0
arch/arm/boot/dts/exynos5440.dtsi

@@ -219,6 +219,7 @@
 		interrupts = <0 58 0>;
 		interrupts = <0 58 0>;
 		clocks = <&clock CLK_B_125>;
 		clocks = <&clock CLK_B_125>;
 		clock-names = "tmu_apbif";
 		clock-names = "tmu_apbif";
+		#include "exynos5440-tmu-sensor-conf.dtsi"
 	};
 	};
 
 
 	tmuctrl_1: tmuctrl@16011C {
 	tmuctrl_1: tmuctrl@16011C {
@@ -227,6 +228,7 @@
 		interrupts = <0 58 0>;
 		interrupts = <0 58 0>;
 		clocks = <&clock CLK_B_125>;
 		clocks = <&clock CLK_B_125>;
 		clock-names = "tmu_apbif";
 		clock-names = "tmu_apbif";
+		#include "exynos5440-tmu-sensor-conf.dtsi"
 	};
 	};
 
 
 	tmuctrl_2: tmuctrl@160120 {
 	tmuctrl_2: tmuctrl@160120 {
@@ -235,6 +237,22 @@
 		interrupts = <0 58 0>;
 		interrupts = <0 58 0>;
 		clocks = <&clock CLK_B_125>;
 		clocks = <&clock CLK_B_125>;
 		clock-names = "tmu_apbif";
 		clock-names = "tmu_apbif";
+		#include "exynos5440-tmu-sensor-conf.dtsi"
+	};
+
+	thermal-zones {
+		cpu0_thermal: cpu0-thermal {
+			thermal-sensors = <&tmuctrl_0>;
+			#include "exynos5440-trip-points.dtsi"
+		};
+		cpu1_thermal: cpu1-thermal {
+		       thermal-sensors = <&tmuctrl_1>;
+		       #include "exynos5440-trip-points.dtsi"
+		};
+		cpu2_thermal: cpu2-thermal {
+		       thermal-sensors = <&tmuctrl_2>;
+		       #include "exynos5440-trip-points.dtsi"
+		};
 	};
 	};
 
 
 	sata@210000 {
 	sata@210000 {

+ 2 - 0
arch/arm/boot/dts/imx6qdl-sabresd.dtsi

@@ -35,6 +35,7 @@
 			regulator-max-microvolt = <5000000>;
 			regulator-max-microvolt = <5000000>;
 			gpio = <&gpio3 22 0>;
 			gpio = <&gpio3 22 0>;
 			enable-active-high;
 			enable-active-high;
+			vin-supply = <&swbst_reg>;
 		};
 		};
 
 
 		reg_usb_h1_vbus: regulator@1 {
 		reg_usb_h1_vbus: regulator@1 {
@@ -45,6 +46,7 @@
 			regulator-max-microvolt = <5000000>;
 			regulator-max-microvolt = <5000000>;
 			gpio = <&gpio1 29 0>;
 			gpio = <&gpio1 29 0>;
 			enable-active-high;
 			enable-active-high;
+			vin-supply = <&swbst_reg>;
 		};
 		};
 
 
 		reg_audio: regulator@2 {
 		reg_audio: regulator@2 {

+ 2 - 0
arch/arm/boot/dts/imx6sl-evk.dts

@@ -52,6 +52,7 @@
 			regulator-max-microvolt = <5000000>;
 			regulator-max-microvolt = <5000000>;
 			gpio = <&gpio4 0 0>;
 			gpio = <&gpio4 0 0>;
 			enable-active-high;
 			enable-active-high;
+			vin-supply = <&swbst_reg>;
 		};
 		};
 
 
 		reg_usb_otg2_vbus: regulator@1 {
 		reg_usb_otg2_vbus: regulator@1 {
@@ -62,6 +63,7 @@
 			regulator-max-microvolt = <5000000>;
 			regulator-max-microvolt = <5000000>;
 			gpio = <&gpio4 2 0>;
 			gpio = <&gpio4 2 0>;
 			enable-active-high;
 			enable-active-high;
+			vin-supply = <&swbst_reg>;
 		};
 		};
 
 
 		reg_aud3v: regulator@2 {
 		reg_aud3v: regulator@2 {

+ 1 - 1
arch/arm/boot/dts/omap5-core-thermal.dtsi

@@ -13,7 +13,7 @@
 
 
 core_thermal: core_thermal {
 core_thermal: core_thermal {
 	polling-delay-passive = <250>; /* milliseconds */
 	polling-delay-passive = <250>; /* milliseconds */
-	polling-delay = <1000>; /* milliseconds */
+	polling-delay = <500>; /* milliseconds */
 
 
 			/* sensor       ID */
 			/* sensor       ID */
 	thermal-sensors = <&bandgap     2>;
 	thermal-sensors = <&bandgap     2>;

+ 1 - 1
arch/arm/boot/dts/omap5-gpu-thermal.dtsi

@@ -13,7 +13,7 @@
 
 
 gpu_thermal: gpu_thermal {
 gpu_thermal: gpu_thermal {
 	polling-delay-passive = <250>; /* milliseconds */
 	polling-delay-passive = <250>; /* milliseconds */
-	polling-delay = <1000>; /* milliseconds */
+	polling-delay = <500>; /* milliseconds */
 
 
 			/* sensor       ID */
 			/* sensor       ID */
 	thermal-sensors = <&bandgap     1>;
 	thermal-sensors = <&bandgap     1>;

+ 4 - 0
arch/arm/boot/dts/omap5.dtsi

@@ -1079,4 +1079,8 @@
 	};
 	};
 };
 };
 
 
+&cpu_thermal {
+	polling-delay = <500>; /* milliseconds */
+};
+
 /include/ "omap54xx-clocks.dtsi"
 /include/ "omap54xx-clocks.dtsi"

+ 37 - 4
arch/arm/boot/dts/omap54xx-clocks.dtsi

@@ -167,10 +167,18 @@
 		ti,index-starts-at-one;
 		ti,index-starts-at-one;
 	};
 	};
 
 
+	dpll_core_byp_mux: dpll_core_byp_mux {
+		#clock-cells = <0>;
+		compatible = "ti,mux-clock";
+		clocks = <&sys_clkin>, <&dpll_abe_m3x2_ck>;
+		ti,bit-shift = <23>;
+		reg = <0x012c>;
+	};
+
 	dpll_core_ck: dpll_core_ck {
 	dpll_core_ck: dpll_core_ck {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,omap4-dpll-core-clock";
 		compatible = "ti,omap4-dpll-core-clock";
-		clocks = <&sys_clkin>, <&dpll_abe_m3x2_ck>;
+		clocks = <&sys_clkin>, <&dpll_core_byp_mux>;
 		reg = <0x0120>, <0x0124>, <0x012c>, <0x0128>;
 		reg = <0x0120>, <0x0124>, <0x012c>, <0x0128>;
 	};
 	};
 
 
@@ -294,10 +302,18 @@
 		clock-div = <1>;
 		clock-div = <1>;
 	};
 	};
 
 
+	dpll_iva_byp_mux: dpll_iva_byp_mux {
+		#clock-cells = <0>;
+		compatible = "ti,mux-clock";
+		clocks = <&sys_clkin>, <&iva_dpll_hs_clk_div>;
+		ti,bit-shift = <23>;
+		reg = <0x01ac>;
+	};
+
 	dpll_iva_ck: dpll_iva_ck {
 	dpll_iva_ck: dpll_iva_ck {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,omap4-dpll-clock";
 		compatible = "ti,omap4-dpll-clock";
-		clocks = <&sys_clkin>, <&iva_dpll_hs_clk_div>;
+		clocks = <&sys_clkin>, <&dpll_iva_byp_mux>;
 		reg = <0x01a0>, <0x01a4>, <0x01ac>, <0x01a8>;
 		reg = <0x01a0>, <0x01a4>, <0x01ac>, <0x01a8>;
 	};
 	};
 
 
@@ -599,10 +615,19 @@
 	};
 	};
 };
 };
 &cm_core_clocks {
 &cm_core_clocks {
+
+	dpll_per_byp_mux: dpll_per_byp_mux {
+		#clock-cells = <0>;
+		compatible = "ti,mux-clock";
+		clocks = <&sys_clkin>, <&per_dpll_hs_clk_div>;
+		ti,bit-shift = <23>;
+		reg = <0x014c>;
+	};
+
 	dpll_per_ck: dpll_per_ck {
 	dpll_per_ck: dpll_per_ck {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,omap4-dpll-clock";
 		compatible = "ti,omap4-dpll-clock";
-		clocks = <&sys_clkin>, <&per_dpll_hs_clk_div>;
+		clocks = <&sys_clkin>, <&dpll_per_byp_mux>;
 		reg = <0x0140>, <0x0144>, <0x014c>, <0x0148>;
 		reg = <0x0140>, <0x0144>, <0x014c>, <0x0148>;
 	};
 	};
 
 
@@ -714,10 +739,18 @@
 		ti,index-starts-at-one;
 		ti,index-starts-at-one;
 	};
 	};
 
 
+	dpll_usb_byp_mux: dpll_usb_byp_mux {
+		#clock-cells = <0>;
+		compatible = "ti,mux-clock";
+		clocks = <&sys_clkin>, <&usb_dpll_hs_clk_div>;
+		ti,bit-shift = <23>;
+		reg = <0x018c>;
+	};
+
 	dpll_usb_ck: dpll_usb_ck {
 	dpll_usb_ck: dpll_usb_ck {
 		#clock-cells = <0>;
 		#clock-cells = <0>;
 		compatible = "ti,omap4-dpll-j-type-clock";
 		compatible = "ti,omap4-dpll-j-type-clock";
-		clocks = <&sys_clkin>, <&usb_dpll_hs_clk_div>;
+		clocks = <&sys_clkin>, <&dpll_usb_byp_mux>;
 		reg = <0x0180>, <0x0184>, <0x018c>, <0x0188>;
 		reg = <0x0180>, <0x0184>, <0x018c>, <0x0188>;
 	};
 	};
 
 

+ 6 - 0
arch/arm/boot/dts/socfpga.dtsi

@@ -713,6 +713,9 @@
 			reg-shift = <2>;
 			reg-shift = <2>;
 			reg-io-width = <4>;
 			reg-io-width = <4>;
 			clocks = <&l4_sp_clk>;
 			clocks = <&l4_sp_clk>;
+			dmas = <&pdma 28>,
+			       <&pdma 29>;
+			dma-names = "tx", "rx";
 		};
 		};
 
 
 		uart1: serial1@ffc03000 {
 		uart1: serial1@ffc03000 {
@@ -722,6 +725,9 @@
 			reg-shift = <2>;
 			reg-shift = <2>;
 			reg-io-width = <4>;
 			reg-io-width = <4>;
 			clocks = <&l4_sp_clk>;
 			clocks = <&l4_sp_clk>;
+			dmas = <&pdma 30>,
+			       <&pdma 31>;
+			dma-names = "tx", "rx";
 		};
 		};
 
 
 		rst: rstmgr@ffd05000 {
 		rst: rstmgr@ffd05000 {

+ 1 - 1
arch/arm/configs/multi_v7_defconfig

@@ -99,7 +99,7 @@ CONFIG_PCI_RCAR_GEN2=y
 CONFIG_PCI_RCAR_GEN2_PCIE=y
 CONFIG_PCI_RCAR_GEN2_PCIE=y
 CONFIG_PCIEPORTBUS=y
 CONFIG_PCIEPORTBUS=y
 CONFIG_SMP=y
 CONFIG_SMP=y
-CONFIG_NR_CPUS=8
+CONFIG_NR_CPUS=16
 CONFIG_HIGHPTE=y
 CONFIG_HIGHPTE=y
 CONFIG_CMA=y
 CONFIG_CMA=y
 CONFIG_ARM_APPENDED_DTB=y
 CONFIG_ARM_APPENDED_DTB=y

+ 1 - 0
arch/arm/configs/omap2plus_defconfig

@@ -377,6 +377,7 @@ CONFIG_PWM_TWL=m
 CONFIG_PWM_TWL_LED=m
 CONFIG_PWM_TWL_LED=m
 CONFIG_OMAP_USB2=m
 CONFIG_OMAP_USB2=m
 CONFIG_TI_PIPE3=y
 CONFIG_TI_PIPE3=y
+CONFIG_TWL4030_USB=m
 CONFIG_EXT2_FS=y
 CONFIG_EXT2_FS=y
 CONFIG_EXT3_FS=y
 CONFIG_EXT3_FS=y
 # CONFIG_EXT3_FS_XATTR is not set
 # CONFIG_EXT3_FS_XATTR is not set

+ 1 - 0
arch/arm/configs/sunxi_defconfig

@@ -4,6 +4,7 @@ CONFIG_BLK_DEV_INITRD=y
 CONFIG_PERF_EVENTS=y
 CONFIG_PERF_EVENTS=y
 CONFIG_ARCH_SUNXI=y
 CONFIG_ARCH_SUNXI=y
 CONFIG_SMP=y
 CONFIG_SMP=y
+CONFIG_NR_CPUS=8
 CONFIG_AEABI=y
 CONFIG_AEABI=y
 CONFIG_HIGHMEM=y
 CONFIG_HIGHMEM=y
 CONFIG_HIGHPTE=y
 CONFIG_HIGHPTE=y

+ 1 - 1
arch/arm/configs/vexpress_defconfig

@@ -118,8 +118,8 @@ CONFIG_HID_ZEROPLUS=y
 CONFIG_USB=y
 CONFIG_USB=y
 CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
 CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
 CONFIG_USB_MON=y
 CONFIG_USB_MON=y
-CONFIG_USB_ISP1760_HCD=y
 CONFIG_USB_STORAGE=y
 CONFIG_USB_STORAGE=y
+CONFIG_USB_ISP1760=y
 CONFIG_MMC=y
 CONFIG_MMC=y
 CONFIG_MMC_ARMMMCI=y
 CONFIG_MMC_ARMMMCI=y
 CONFIG_NEW_LEDS=y
 CONFIG_NEW_LEDS=y

+ 42 - 0
arch/arm/include/asm/arm-cci.h

@@ -0,0 +1,42 @@
+/*
+ * arch/arm/include/asm/arm-cci.h
+ *
+ * Copyright (C) 2015 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __ASM_ARM_CCI_H
+#define __ASM_ARM_CCI_H
+
+#ifdef CONFIG_MCPM
+#include <asm/mcpm.h>
+
+/*
+ * We don't have a reliable way of detecting whether,
+ * if we have access to secure-only registers, unless
+ * mcpm is registered.
+ */
+static inline bool platform_has_secure_cci_access(void)
+{
+	return mcpm_is_available();
+}
+
+#else
+static inline bool platform_has_secure_cci_access(void)
+{
+	return false;
+}
+#endif
+
+#endif

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

@@ -207,7 +207,7 @@ static inline void __coherent_cache_guest_page(struct kvm_vcpu *vcpu, pfn_t pfn,
 
 
 	bool need_flush = !vcpu_has_cache_enabled(vcpu) || ipa_uncached;
 	bool need_flush = !vcpu_has_cache_enabled(vcpu) || ipa_uncached;
 
 
-	VM_BUG_ON(size & PAGE_MASK);
+	VM_BUG_ON(size & ~PAGE_MASK);
 
 
 	if (!need_flush && !icache_is_pipt())
 	if (!need_flush && !icache_is_pipt())
 		goto vipt_cache;
 		goto vipt_cache;

+ 1 - 1
arch/arm/kvm/arm.c

@@ -540,7 +540,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
 
 
 		vcpu->mode = OUTSIDE_GUEST_MODE;
 		vcpu->mode = OUTSIDE_GUEST_MODE;
 		kvm_guest_exit();
 		kvm_guest_exit();
-		trace_kvm_exit(*vcpu_pc(vcpu));
+		trace_kvm_exit(kvm_vcpu_trap_get_class(vcpu), *vcpu_pc(vcpu));
 		/*
 		/*
 		 * We may have taken a host interrupt in HYP mode (ie
 		 * We may have taken a host interrupt in HYP mode (ie
 		 * while executing the guest). This interrupt is still
 		 * while executing the guest). This interrupt is still

+ 7 - 3
arch/arm/kvm/trace.h

@@ -25,18 +25,22 @@ TRACE_EVENT(kvm_entry,
 );
 );
 
 
 TRACE_EVENT(kvm_exit,
 TRACE_EVENT(kvm_exit,
-	TP_PROTO(unsigned long vcpu_pc),
-	TP_ARGS(vcpu_pc),
+	TP_PROTO(unsigned int exit_reason, unsigned long vcpu_pc),
+	TP_ARGS(exit_reason, vcpu_pc),
 
 
 	TP_STRUCT__entry(
 	TP_STRUCT__entry(
+		__field(	unsigned int,	exit_reason	)
 		__field(	unsigned long,	vcpu_pc		)
 		__field(	unsigned long,	vcpu_pc		)
 	),
 	),
 
 
 	TP_fast_assign(
 	TP_fast_assign(
+		__entry->exit_reason		= exit_reason;
 		__entry->vcpu_pc		= vcpu_pc;
 		__entry->vcpu_pc		= vcpu_pc;
 	),
 	),
 
 
-	TP_printk("PC: 0x%08lx", __entry->vcpu_pc)
+	TP_printk("HSR_EC: 0x%04x, PC: 0x%08lx",
+		  __entry->exit_reason,
+		  __entry->vcpu_pc)
 );
 );
 
 
 TRACE_EVENT(kvm_guest_fault,
 TRACE_EVENT(kvm_guest_fault,

+ 1 - 1
arch/arm/mach-exynos/Kconfig

@@ -123,7 +123,7 @@ config SOC_EXYNOS5800
 config EXYNOS5420_MCPM
 config EXYNOS5420_MCPM
 	bool "Exynos5420 Multi-Cluster PM support"
 	bool "Exynos5420 Multi-Cluster PM support"
 	depends on MCPM && SOC_EXYNOS5420
 	depends on MCPM && SOC_EXYNOS5420
-	select ARM_CCI
+	select ARM_CCI400_PORT_CTRL
 	select ARM_CPU_SUSPEND
 	select ARM_CPU_SUSPEND
 	help
 	help
 	  This is needed to provide CPU and cluster power management
 	  This is needed to provide CPU and cluster power management

+ 1 - 2
arch/arm/mach-exynos/platsmp.c

@@ -126,8 +126,7 @@ static inline void platform_do_lowpower(unsigned int cpu, int *spurious)
  */
  */
 void exynos_cpu_power_down(int cpu)
 void exynos_cpu_power_down(int cpu)
 {
 {
-	if (cpu == 0 && (of_machine_is_compatible("samsung,exynos5420") ||
-		of_machine_is_compatible("samsung,exynos5800"))) {
+	if (cpu == 0 && (soc_is_exynos5420() || soc_is_exynos5800())) {
 		/*
 		/*
 		 * Bypass power down for CPU0 during suspend. Check for
 		 * Bypass power down for CPU0 during suspend. Check for
 		 * the SYS_PWR_REG value to decide if we are suspending
 		 * the SYS_PWR_REG value to decide if we are suspending

+ 28 - 0
arch/arm/mach-exynos/pm_domains.c

@@ -161,6 +161,34 @@ no_clk:
 		of_genpd_add_provider_simple(np, &pd->pd);
 		of_genpd_add_provider_simple(np, &pd->pd);
 	}
 	}
 
 
+	/* Assign the child power domains to their parents */
+	for_each_compatible_node(np, NULL, "samsung,exynos4210-pd") {
+		struct generic_pm_domain *child_domain, *parent_domain;
+		struct of_phandle_args args;
+
+		args.np = np;
+		args.args_count = 0;
+		child_domain = of_genpd_get_from_provider(&args);
+		if (!child_domain)
+			continue;
+
+		if (of_parse_phandle_with_args(np, "power-domains",
+					 "#power-domain-cells", 0, &args) != 0)
+			continue;
+
+		parent_domain = of_genpd_get_from_provider(&args);
+		if (!parent_domain)
+			continue;
+
+		if (pm_genpd_add_subdomain(parent_domain, child_domain))
+			pr_warn("%s failed to add subdomain: %s\n",
+				parent_domain->name, child_domain->name);
+		else
+			pr_info("%s has as child subdomain: %s.\n",
+				parent_domain->name, child_domain->name);
+		of_node_put(np);
+	}
+
 	return 0;
 	return 0;
 }
 }
 arch_initcall(exynos4_pm_init_power_domain);
 arch_initcall(exynos4_pm_init_power_domain);

+ 2 - 2
arch/arm/mach-exynos/suspend.c

@@ -87,8 +87,8 @@ static unsigned int exynos_pmu_spare3;
 static u32 exynos_irqwake_intmask = 0xffffffff;
 static u32 exynos_irqwake_intmask = 0xffffffff;
 
 
 static const struct exynos_wkup_irq exynos3250_wkup_irq[] = {
 static const struct exynos_wkup_irq exynos3250_wkup_irq[] = {
-	{ 73, BIT(1) }, /* RTC alarm */
-	{ 74, BIT(2) }, /* RTC tick */
+	{ 105, BIT(1) }, /* RTC alarm */
+	{ 106, BIT(2) }, /* RTC tick */
 	{ /* sentinel */ },
 	{ /* sentinel */ },
 };
 };
 
 

+ 3 - 2
arch/arm/mach-imx/mach-imx6q.c

@@ -211,8 +211,9 @@ static void __init imx6q_1588_init(void)
 	 * set bit IOMUXC_GPR1[21].  Or the PTP clock must be from pad
 	 * set bit IOMUXC_GPR1[21].  Or the PTP clock must be from pad
 	 * (external OSC), and we need to clear the bit.
 	 * (external OSC), and we need to clear the bit.
 	 */
 	 */
-	clksel = ptp_clk == enet_ref ? IMX6Q_GPR1_ENET_CLK_SEL_ANATOP :
-				       IMX6Q_GPR1_ENET_CLK_SEL_PAD;
+	clksel = clk_is_match(ptp_clk, enet_ref) ?
+				IMX6Q_GPR1_ENET_CLK_SEL_ANATOP :
+				IMX6Q_GPR1_ENET_CLK_SEL_PAD;
 	gpr = syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr");
 	gpr = syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr");
 	if (!IS_ERR(gpr))
 	if (!IS_ERR(gpr))
 		regmap_update_bits(gpr, IOMUXC_GPR1,
 		regmap_update_bits(gpr, IOMUXC_GPR1,

+ 7 - 1
arch/arm/mach-msm/board-halibut.c

@@ -20,6 +20,7 @@
 #include <linux/input.h>
 #include <linux/input.h>
 #include <linux/io.h>
 #include <linux/io.h>
 #include <linux/delay.h>
 #include <linux/delay.h>
+#include <linux/smc91x.h>
 
 
 #include <mach/hardware.h>
 #include <mach/hardware.h>
 #include <asm/mach-types.h>
 #include <asm/mach-types.h>
@@ -46,15 +47,20 @@ static struct resource smc91x_resources[] = {
 	[1] = {
 	[1] = {
 		.start	= MSM_GPIO_TO_INT(49),
 		.start	= MSM_GPIO_TO_INT(49),
 		.end	= MSM_GPIO_TO_INT(49),
 		.end	= MSM_GPIO_TO_INT(49),
-		.flags	= IORESOURCE_IRQ,
+		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
 	},
 	},
 };
 };
 
 
+static struct smc91x_platdata smc91x_platdata = {
+	.flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
+};
+
 static struct platform_device smc91x_device = {
 static struct platform_device smc91x_device = {
 	.name		= "smc91x",
 	.name		= "smc91x",
 	.id		= 0,
 	.id		= 0,
 	.num_resources	= ARRAY_SIZE(smc91x_resources),
 	.num_resources	= ARRAY_SIZE(smc91x_resources),
 	.resource	= smc91x_resources,
 	.resource	= smc91x_resources,
+	.dev.platform_data = &smc91x_platdata,
 };
 };
 
 
 static struct platform_device *devices[] __initdata = {
 static struct platform_device *devices[] __initdata = {

+ 7 - 1
arch/arm/mach-msm/board-qsd8x50.c

@@ -22,6 +22,7 @@
 #include <linux/usb/msm_hsusb.h>
 #include <linux/usb/msm_hsusb.h>
 #include <linux/err.h>
 #include <linux/err.h>
 #include <linux/clkdev.h>
 #include <linux/clkdev.h>
+#include <linux/smc91x.h>
 
 
 #include <asm/mach-types.h>
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/arch.h>
@@ -49,15 +50,20 @@ static struct resource smc91x_resources[] = {
 		.flags = IORESOURCE_MEM,
 		.flags = IORESOURCE_MEM,
 	},
 	},
 	[1] = {
 	[1] = {
-		.flags = IORESOURCE_IRQ,
+		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
 	},
 	},
 };
 };
 
 
+static struct smc91x_platdata smc91x_platdata = {
+	.flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
+};
+
 static struct platform_device smc91x_device = {
 static struct platform_device smc91x_device = {
 	.name           = "smc91x",
 	.name           = "smc91x",
 	.id             = 0,
 	.id             = 0,
 	.num_resources  = ARRAY_SIZE(smc91x_resources),
 	.num_resources  = ARRAY_SIZE(smc91x_resources),
 	.resource       = smc91x_resources,
 	.resource       = smc91x_resources,
+	.dev.platform_data = &smc91x_platdata,
 };
 };
 
 
 static int __init msm_init_smc91x(void)
 static int __init msm_init_smc91x(void)

+ 5 - 5
arch/arm/mach-omap2/omap_hwmod.c

@@ -1692,16 +1692,15 @@ static int _deassert_hardreset(struct omap_hwmod *oh, const char *name)
 	if (ret == -EBUSY)
 	if (ret == -EBUSY)
 		pr_warn("omap_hwmod: %s: failed to hardreset\n", oh->name);
 		pr_warn("omap_hwmod: %s: failed to hardreset\n", oh->name);
 
 
-	if (!ret) {
+	if (oh->clkdm) {
 		/*
 		/*
 		 * Set the clockdomain to HW_AUTO, assuming that the
 		 * Set the clockdomain to HW_AUTO, assuming that the
 		 * previous state was HW_AUTO.
 		 * previous state was HW_AUTO.
 		 */
 		 */
-		if (oh->clkdm && hwsup)
+		if (hwsup)
 			clkdm_allow_idle(oh->clkdm);
 			clkdm_allow_idle(oh->clkdm);
-	} else {
-		if (oh->clkdm)
-			clkdm_hwmod_disable(oh->clkdm, oh);
+
+		clkdm_hwmod_disable(oh->clkdm, oh);
 	}
 	}
 
 
 	return ret;
 	return ret;
@@ -2698,6 +2697,7 @@ static int __init _register(struct omap_hwmod *oh)
 	INIT_LIST_HEAD(&oh->master_ports);
 	INIT_LIST_HEAD(&oh->master_ports);
 	INIT_LIST_HEAD(&oh->slave_ports);
 	INIT_LIST_HEAD(&oh->slave_ports);
 	spin_lock_init(&oh->_lock);
 	spin_lock_init(&oh->_lock);
+	lockdep_set_class(&oh->_lock, &oh->hwmod_key);
 
 
 	oh->_state = _HWMOD_STATE_REGISTERED;
 	oh->_state = _HWMOD_STATE_REGISTERED;
 
 

+ 1 - 0
arch/arm/mach-omap2/omap_hwmod.h

@@ -674,6 +674,7 @@ struct omap_hwmod {
 	u32				_sysc_cache;
 	u32				_sysc_cache;
 	void __iomem			*_mpu_rt_va;
 	void __iomem			*_mpu_rt_va;
 	spinlock_t			_lock;
 	spinlock_t			_lock;
+	struct lock_class_key		hwmod_key; /* unique lock class */
 	struct list_head		node;
 	struct list_head		node;
 	struct omap_hwmod_ocp_if	*_mpu_port;
 	struct omap_hwmod_ocp_if	*_mpu_port;
 	unsigned int			(*xlate_irq)(unsigned int);
 	unsigned int			(*xlate_irq)(unsigned int);

+ 24 - 79
arch/arm/mach-omap2/omap_hwmod_7xx_data.c

@@ -1466,53 +1466,16 @@ static struct omap_hwmod dra7xx_ocp2scp3_hwmod = {
  *
  *
  */
  */
 
 
-static struct omap_hwmod_class dra7xx_pcie_hwmod_class = {
+static struct omap_hwmod_class dra7xx_pciess_hwmod_class = {
 	.name	= "pcie",
 	.name	= "pcie",
 };
 };
 
 
 /* pcie1 */
 /* pcie1 */
-static struct omap_hwmod dra7xx_pcie1_hwmod = {
+static struct omap_hwmod dra7xx_pciess1_hwmod = {
 	.name		= "pcie1",
 	.name		= "pcie1",
-	.class		= &dra7xx_pcie_hwmod_class,
+	.class		= &dra7xx_pciess_hwmod_class,
 	.clkdm_name	= "pcie_clkdm",
 	.clkdm_name	= "pcie_clkdm",
 	.main_clk	= "l4_root_clk_div",
 	.main_clk	= "l4_root_clk_div",
-	.prcm = {
-		.omap4 = {
-			.clkctrl_offs	= DRA7XX_CM_PCIE_CLKSTCTRL_OFFSET,
-			.modulemode	= MODULEMODE_SWCTRL,
-		},
-	},
-};
-
-/* pcie2 */
-static struct omap_hwmod dra7xx_pcie2_hwmod = {
-	.name		= "pcie2",
-	.class		= &dra7xx_pcie_hwmod_class,
-	.clkdm_name	= "pcie_clkdm",
-	.main_clk	= "l4_root_clk_div",
-	.prcm = {
-		.omap4 = {
-			.clkctrl_offs = DRA7XX_CM_PCIE_CLKSTCTRL_OFFSET,
-			.modulemode   = MODULEMODE_SWCTRL,
-		},
-	},
-};
-
-/*
- * 'PCIE PHY' class
- *
- */
-
-static struct omap_hwmod_class dra7xx_pcie_phy_hwmod_class = {
-	.name	= "pcie-phy",
-};
-
-/* pcie1 phy */
-static struct omap_hwmod dra7xx_pcie1_phy_hwmod = {
-	.name		= "pcie1-phy",
-	.class		= &dra7xx_pcie_phy_hwmod_class,
-	.clkdm_name	= "l3init_clkdm",
-	.main_clk	= "l4_root_clk_div",
 	.prcm = {
 	.prcm = {
 		.omap4 = {
 		.omap4 = {
 			.clkctrl_offs = DRA7XX_CM_L3INIT_PCIESS1_CLKCTRL_OFFSET,
 			.clkctrl_offs = DRA7XX_CM_L3INIT_PCIESS1_CLKCTRL_OFFSET,
@@ -1522,11 +1485,11 @@ static struct omap_hwmod dra7xx_pcie1_phy_hwmod = {
 	},
 	},
 };
 };
 
 
-/* pcie2 phy */
-static struct omap_hwmod dra7xx_pcie2_phy_hwmod = {
-	.name		= "pcie2-phy",
-	.class		= &dra7xx_pcie_phy_hwmod_class,
-	.clkdm_name	= "l3init_clkdm",
+/* pcie2 */
+static struct omap_hwmod dra7xx_pciess2_hwmod = {
+	.name		= "pcie2",
+	.class		= &dra7xx_pciess_hwmod_class,
+	.clkdm_name	= "pcie_clkdm",
 	.main_clk	= "l4_root_clk_div",
 	.main_clk	= "l4_root_clk_div",
 	.prcm = {
 	.prcm = {
 		.omap4 = {
 		.omap4 = {
@@ -2877,50 +2840,34 @@ static struct omap_hwmod_ocp_if dra7xx_l4_cfg__ocp2scp3 = {
 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 };
 };
 
 
-/* l3_main_1 -> pcie1 */
-static struct omap_hwmod_ocp_if dra7xx_l3_main_1__pcie1 = {
+/* l3_main_1 -> pciess1 */
+static struct omap_hwmod_ocp_if dra7xx_l3_main_1__pciess1 = {
 	.master		= &dra7xx_l3_main_1_hwmod,
 	.master		= &dra7xx_l3_main_1_hwmod,
-	.slave		= &dra7xx_pcie1_hwmod,
+	.slave		= &dra7xx_pciess1_hwmod,
 	.clk		= "l3_iclk_div",
 	.clk		= "l3_iclk_div",
 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 };
 };
 
 
-/* l4_cfg -> pcie1 */
-static struct omap_hwmod_ocp_if dra7xx_l4_cfg__pcie1 = {
+/* l4_cfg -> pciess1 */
+static struct omap_hwmod_ocp_if dra7xx_l4_cfg__pciess1 = {
 	.master		= &dra7xx_l4_cfg_hwmod,
 	.master		= &dra7xx_l4_cfg_hwmod,
-	.slave		= &dra7xx_pcie1_hwmod,
+	.slave		= &dra7xx_pciess1_hwmod,
 	.clk		= "l4_root_clk_div",
 	.clk		= "l4_root_clk_div",
 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 };
 };
 
 
-/* l3_main_1 -> pcie2 */
-static struct omap_hwmod_ocp_if dra7xx_l3_main_1__pcie2 = {
+/* l3_main_1 -> pciess2 */
+static struct omap_hwmod_ocp_if dra7xx_l3_main_1__pciess2 = {
 	.master		= &dra7xx_l3_main_1_hwmod,
 	.master		= &dra7xx_l3_main_1_hwmod,
-	.slave		= &dra7xx_pcie2_hwmod,
+	.slave		= &dra7xx_pciess2_hwmod,
 	.clk		= "l3_iclk_div",
 	.clk		= "l3_iclk_div",
 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 };
 };
 
 
-/* l4_cfg -> pcie2 */
-static struct omap_hwmod_ocp_if dra7xx_l4_cfg__pcie2 = {
-	.master		= &dra7xx_l4_cfg_hwmod,
-	.slave		= &dra7xx_pcie2_hwmod,
-	.clk		= "l4_root_clk_div",
-	.user		= OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-/* l4_cfg -> pcie1 phy */
-static struct omap_hwmod_ocp_if dra7xx_l4_cfg__pcie1_phy = {
-	.master		= &dra7xx_l4_cfg_hwmod,
-	.slave		= &dra7xx_pcie1_phy_hwmod,
-	.clk		= "l4_root_clk_div",
-	.user		= OCP_USER_MPU | OCP_USER_SDMA,
-};
-
-/* l4_cfg -> pcie2 phy */
-static struct omap_hwmod_ocp_if dra7xx_l4_cfg__pcie2_phy = {
+/* l4_cfg -> pciess2 */
+static struct omap_hwmod_ocp_if dra7xx_l4_cfg__pciess2 = {
 	.master		= &dra7xx_l4_cfg_hwmod,
 	.master		= &dra7xx_l4_cfg_hwmod,
-	.slave		= &dra7xx_pcie2_phy_hwmod,
+	.slave		= &dra7xx_pciess2_hwmod,
 	.clk		= "l4_root_clk_div",
 	.clk		= "l4_root_clk_div",
 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
 };
 };
@@ -3327,12 +3274,10 @@ static struct omap_hwmod_ocp_if *dra7xx_hwmod_ocp_ifs[] __initdata = {
 	&dra7xx_l4_cfg__mpu,
 	&dra7xx_l4_cfg__mpu,
 	&dra7xx_l4_cfg__ocp2scp1,
 	&dra7xx_l4_cfg__ocp2scp1,
 	&dra7xx_l4_cfg__ocp2scp3,
 	&dra7xx_l4_cfg__ocp2scp3,
-	&dra7xx_l3_main_1__pcie1,
-	&dra7xx_l4_cfg__pcie1,
-	&dra7xx_l3_main_1__pcie2,
-	&dra7xx_l4_cfg__pcie2,
-	&dra7xx_l4_cfg__pcie1_phy,
-	&dra7xx_l4_cfg__pcie2_phy,
+	&dra7xx_l3_main_1__pciess1,
+	&dra7xx_l4_cfg__pciess1,
+	&dra7xx_l3_main_1__pciess2,
+	&dra7xx_l4_cfg__pciess2,
 	&dra7xx_l3_main_1__qspi,
 	&dra7xx_l3_main_1__qspi,
 	&dra7xx_l4_per3__rtcss,
 	&dra7xx_l4_per3__rtcss,
 	&dra7xx_l4_cfg__sata,
 	&dra7xx_l4_cfg__sata,

+ 1 - 0
arch/arm/mach-omap2/pdata-quirks.c

@@ -173,6 +173,7 @@ static void __init omap3_igep0030_rev_g_legacy_init(void)
 
 
 static void __init omap3_evm_legacy_init(void)
 static void __init omap3_evm_legacy_init(void)
 {
 {
+	hsmmc2_internal_input_clk();
 	legacy_init_wl12xx(WL12XX_REFCLOCK_38, 0, 149);
 	legacy_init_wl12xx(WL12XX_REFCLOCK_38, 0, 149);
 }
 }
 
 

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

@@ -252,10 +252,10 @@ static void omap44xx_prm_save_and_clear_irqen(u32 *saved_mask)
 {
 {
 	saved_mask[0] =
 	saved_mask[0] =
 		omap4_prm_read_inst_reg(OMAP4430_PRM_OCP_SOCKET_INST,
 		omap4_prm_read_inst_reg(OMAP4430_PRM_OCP_SOCKET_INST,
-					OMAP4_PRM_IRQSTATUS_MPU_OFFSET);
+					OMAP4_PRM_IRQENABLE_MPU_OFFSET);
 	saved_mask[1] =
 	saved_mask[1] =
 		omap4_prm_read_inst_reg(OMAP4430_PRM_OCP_SOCKET_INST,
 		omap4_prm_read_inst_reg(OMAP4430_PRM_OCP_SOCKET_INST,
-					OMAP4_PRM_IRQSTATUS_MPU_2_OFFSET);
+					OMAP4_PRM_IRQENABLE_MPU_2_OFFSET);
 
 
 	omap4_prm_write_inst_reg(0, OMAP4430_PRM_OCP_SOCKET_INST,
 	omap4_prm_write_inst_reg(0, OMAP4430_PRM_OCP_SOCKET_INST,
 				 OMAP4_PRM_IRQENABLE_MPU_OFFSET);
 				 OMAP4_PRM_IRQENABLE_MPU_OFFSET);

+ 6 - 0
arch/arm/mach-pxa/idp.c

@@ -36,6 +36,7 @@
 #include <linux/platform_data/video-pxafb.h>
 #include <linux/platform_data/video-pxafb.h>
 #include <mach/bitfield.h>
 #include <mach/bitfield.h>
 #include <linux/platform_data/mmc-pxamci.h>
 #include <linux/platform_data/mmc-pxamci.h>
+#include <linux/smc91x.h>
 
 
 #include "generic.h"
 #include "generic.h"
 #include "devices.h"
 #include "devices.h"
@@ -81,11 +82,16 @@ static struct resource smc91x_resources[] = {
 	}
 	}
 };
 };
 
 
+static struct smc91x_platdata smc91x_platdata = {
+	.flags = SMC91X_USE_32BIT | SMC91X_USE_DMA | SMC91X_NOWAIT,
+};
+
 static struct platform_device smc91x_device = {
 static struct platform_device smc91x_device = {
 	.name		= "smc91x",
 	.name		= "smc91x",
 	.id		= 0,
 	.id		= 0,
 	.num_resources	= ARRAY_SIZE(smc91x_resources),
 	.num_resources	= ARRAY_SIZE(smc91x_resources),
 	.resource	= smc91x_resources,
 	.resource	= smc91x_resources,
+	.dev.platform_data = &smc91x_platdata,
 };
 };
 
 
 static void idp_backlight_power(int on)
 static void idp_backlight_power(int on)

+ 7 - 1
arch/arm/mach-pxa/lpd270.c

@@ -24,6 +24,7 @@
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/partitions.h>
 #include <linux/pwm_backlight.h>
 #include <linux/pwm_backlight.h>
+#include <linux/smc91x.h>
 
 
 #include <asm/types.h>
 #include <asm/types.h>
 #include <asm/setup.h>
 #include <asm/setup.h>
@@ -189,15 +190,20 @@ static struct resource smc91x_resources[] = {
 	[1] = {
 	[1] = {
 		.start	= LPD270_ETHERNET_IRQ,
 		.start	= LPD270_ETHERNET_IRQ,
 		.end	= LPD270_ETHERNET_IRQ,
 		.end	= LPD270_ETHERNET_IRQ,
-		.flags	= IORESOURCE_IRQ,
+		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
 	},
 	},
 };
 };
 
 
+struct smc91x_platdata smc91x_platdata = {
+	.flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
+};
+
 static struct platform_device smc91x_device = {
 static struct platform_device smc91x_device = {
 	.name		= "smc91x",
 	.name		= "smc91x",
 	.id		= 0,
 	.id		= 0,
 	.num_resources	= ARRAY_SIZE(smc91x_resources),
 	.num_resources	= ARRAY_SIZE(smc91x_resources),
 	.resource	= smc91x_resources,
 	.resource	= smc91x_resources,
+	.dev.platform_data = &smc91x_platdata,
 };
 };
 
 
 static struct resource lpd270_flash_resources[] = {
 static struct resource lpd270_flash_resources[] = {

+ 7 - 0
arch/arm/mach-realview/core.c

@@ -28,6 +28,7 @@
 #include <linux/platform_data/video-clcd-versatile.h>
 #include <linux/platform_data/video-clcd-versatile.h>
 #include <linux/io.h>
 #include <linux/io.h>
 #include <linux/smsc911x.h>
 #include <linux/smsc911x.h>
+#include <linux/smc91x.h>
 #include <linux/ata_platform.h>
 #include <linux/ata_platform.h>
 #include <linux/amba/mmci.h>
 #include <linux/amba/mmci.h>
 #include <linux/gfp.h>
 #include <linux/gfp.h>
@@ -94,6 +95,10 @@ static struct smsc911x_platform_config smsc911x_config = {
 	.phy_interface	= PHY_INTERFACE_MODE_MII,
 	.phy_interface	= PHY_INTERFACE_MODE_MII,
 };
 };
 
 
+static struct smc91x_platdata smc91x_platdata = {
+	.flags = SMC91X_USE_32BIT | SMC91X_NOWAIT,
+};
+
 static struct platform_device realview_eth_device = {
 static struct platform_device realview_eth_device = {
 	.name		= "smsc911x",
 	.name		= "smsc911x",
 	.id		= 0,
 	.id		= 0,
@@ -107,6 +112,8 @@ int realview_eth_register(const char *name, struct resource *res)
 	realview_eth_device.resource = res;
 	realview_eth_device.resource = res;
 	if (strcmp(realview_eth_device.name, "smsc911x") == 0)
 	if (strcmp(realview_eth_device.name, "smsc911x") == 0)
 		realview_eth_device.dev.platform_data = &smsc911x_config;
 		realview_eth_device.dev.platform_data = &smsc911x_config;
+	else
+		realview_eth_device.dev.platform_data = &smc91x_platdata;
 
 
 	return platform_device_register(&realview_eth_device);
 	return platform_device_register(&realview_eth_device);
 }
 }

+ 1 - 1
arch/arm/mach-realview/realview_eb.c

@@ -234,7 +234,7 @@ static struct resource realview_eb_eth_resources[] = {
 	[1] = {
 	[1] = {
 		.start		= IRQ_EB_ETH,
 		.start		= IRQ_EB_ETH,
 		.end		= IRQ_EB_ETH,
 		.end		= IRQ_EB_ETH,
-		.flags		= IORESOURCE_IRQ,
+		.flags		= IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
 	},
 	},
 };
 };
 
 

+ 6 - 0
arch/arm/mach-sa1100/neponset.c

@@ -12,6 +12,7 @@
 #include <linux/pm.h>
 #include <linux/pm.h>
 #include <linux/serial_core.h>
 #include <linux/serial_core.h>
 #include <linux/slab.h>
 #include <linux/slab.h>
+#include <linux/smc91x.h>
 
 
 #include <asm/mach-types.h>
 #include <asm/mach-types.h>
 #include <asm/mach/map.h>
 #include <asm/mach/map.h>
@@ -258,12 +259,17 @@ static int neponset_probe(struct platform_device *dev)
 			0x02000000, "smc91x-attrib"),
 			0x02000000, "smc91x-attrib"),
 		{ .flags = IORESOURCE_IRQ },
 		{ .flags = IORESOURCE_IRQ },
 	};
 	};
+	struct smc91x_platdata smc91x_platdata = {
+		.flags = SMC91X_USE_8BIT | SMC91X_IO_SHIFT_2 | SMC91X_NOWAIT,
+	};
 	struct platform_device_info smc91x_devinfo = {
 	struct platform_device_info smc91x_devinfo = {
 		.parent = &dev->dev,
 		.parent = &dev->dev,
 		.name = "smc91x",
 		.name = "smc91x",
 		.id = 0,
 		.id = 0,
 		.res = smc91x_resources,
 		.res = smc91x_resources,
 		.num_res = ARRAY_SIZE(smc91x_resources),
 		.num_res = ARRAY_SIZE(smc91x_resources),
+		.data = &smc91x_platdata,
+		.size_data = sizeof(smc91x_platdata),
 	};
 	};
 	int ret, irq;
 	int ret, irq;
 
 

+ 7 - 0
arch/arm/mach-sa1100/pleb.c

@@ -11,6 +11,7 @@
 #include <linux/irq.h>
 #include <linux/irq.h>
 #include <linux/io.h>
 #include <linux/io.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/partitions.h>
+#include <linux/smc91x.h>
 
 
 #include <mach/hardware.h>
 #include <mach/hardware.h>
 #include <asm/setup.h>
 #include <asm/setup.h>
@@ -43,12 +44,18 @@ static struct resource smc91x_resources[] = {
 #endif
 #endif
 };
 };
 
 
+static struct smc91x_platdata smc91x_platdata = {
+	.flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
+};
 
 
 static struct platform_device smc91x_device = {
 static struct platform_device smc91x_device = {
 	.name		= "smc91x",
 	.name		= "smc91x",
 	.id		= 0,
 	.id		= 0,
 	.num_resources	= ARRAY_SIZE(smc91x_resources),
 	.num_resources	= ARRAY_SIZE(smc91x_resources),
 	.resource	= smc91x_resources,
 	.resource	= smc91x_resources,
+	.dev = {
+		.platform_data  = &smc91x_platdata,
+	},
 };
 };
 
 
 static struct platform_device *devices[] __initdata = {
 static struct platform_device *devices[] __initdata = {

+ 1 - 1
arch/arm/mach-socfpga/core.h

@@ -45,6 +45,6 @@ extern char secondary_trampoline, secondary_trampoline_end;
 
 
 extern unsigned long socfpga_cpu1start_addr;
 extern unsigned long socfpga_cpu1start_addr;
 
 
-#define SOCFPGA_SCU_VIRT_BASE   0xfffec000
+#define SOCFPGA_SCU_VIRT_BASE   0xfee00000
 
 
 #endif
 #endif

+ 5 - 0
arch/arm/mach-socfpga/socfpga.c

@@ -23,6 +23,7 @@
 #include <asm/hardware/cache-l2x0.h>
 #include <asm/hardware/cache-l2x0.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
 #include <asm/mach/map.h>
+#include <asm/cacheflush.h>
 
 
 #include "core.h"
 #include "core.h"
 
 
@@ -73,6 +74,10 @@ void __init socfpga_sysmgr_init(void)
 			(u32 *) &socfpga_cpu1start_addr))
 			(u32 *) &socfpga_cpu1start_addr))
 		pr_err("SMP: Need cpu1-start-addr in device tree.\n");
 		pr_err("SMP: Need cpu1-start-addr in device tree.\n");
 
 
+	/* Ensure that socfpga_cpu1start_addr is visible to other CPUs */
+	smp_wmb();
+	sync_cache_w(&socfpga_cpu1start_addr);
+
 	sys_manager_base_addr = of_iomap(np, 0);
 	sys_manager_base_addr = of_iomap(np, 0);
 
 
 	np = of_find_compatible_node(NULL, NULL, "altr,rst-mgr");
 	np = of_find_compatible_node(NULL, NULL, "altr,rst-mgr");

+ 1 - 0
arch/arm/mach-sti/board-dt.c

@@ -18,6 +18,7 @@ static const char *stih41x_dt_match[] __initdata = {
 	"st,stih415",
 	"st,stih415",
 	"st,stih416",
 	"st,stih416",
 	"st,stih407",
 	"st,stih407",
+	"st,stih410",
 	"st,stih418",
 	"st,stih418",
 	NULL
 	NULL
 };
 };

+ 2 - 2
arch/arm/mach-vexpress/Kconfig

@@ -53,7 +53,7 @@ config ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA
 config ARCH_VEXPRESS_DCSCB
 config ARCH_VEXPRESS_DCSCB
 	bool "Dual Cluster System Control Block (DCSCB) support"
 	bool "Dual Cluster System Control Block (DCSCB) support"
 	depends on MCPM
 	depends on MCPM
-	select ARM_CCI
+	select ARM_CCI400_PORT_CTRL
 	help
 	help
 	  Support for the Dual Cluster System Configuration Block (DCSCB).
 	  Support for the Dual Cluster System Configuration Block (DCSCB).
 	  This is needed to provide CPU and cluster power management
 	  This is needed to provide CPU and cluster power management
@@ -71,7 +71,7 @@ config ARCH_VEXPRESS_SPC
 config ARCH_VEXPRESS_TC2_PM
 config ARCH_VEXPRESS_TC2_PM
 	bool "Versatile Express TC2 power management"
 	bool "Versatile Express TC2 power management"
 	depends on MCPM
 	depends on MCPM
-	select ARM_CCI
+	select ARM_CCI400_PORT_CTRL
 	select ARCH_VEXPRESS_SPC
 	select ARCH_VEXPRESS_SPC
 	select ARM_CPU_SUSPEND
 	select ARM_CPU_SUSPEND
 	help
 	help

+ 2 - 2
arch/arm64/boot/dts/apm/apm-storm.dtsi

@@ -622,7 +622,7 @@
 		};
 		};
 
 
 		sgenet0: ethernet@1f210000 {
 		sgenet0: ethernet@1f210000 {
-			compatible = "apm,xgene-enet";
+			compatible = "apm,xgene1-sgenet";
 			status = "disabled";
 			status = "disabled";
 			reg = <0x0 0x1f210000 0x0 0xd100>,
 			reg = <0x0 0x1f210000 0x0 0xd100>,
 			      <0x0 0x1f200000 0x0 0Xc300>,
 			      <0x0 0x1f200000 0x0 0Xc300>,
@@ -636,7 +636,7 @@
 		};
 		};
 
 
 		xgenet: ethernet@1f610000 {
 		xgenet: ethernet@1f610000 {
-			compatible = "apm,xgene-enet";
+			compatible = "apm,xgene1-xgenet";
 			status = "disabled";
 			status = "disabled";
 			reg = <0x0 0x1f610000 0x0 0xd100>,
 			reg = <0x0 0x1f610000 0x0 0xd100>,
 			      <0x0 0x1f600000 0x0 0Xc300>,
 			      <0x0 0x1f600000 0x0 0Xc300>,

+ 27 - 0
arch/arm64/include/asm/arm-cci.h

@@ -0,0 +1,27 @@
+/*
+ * arch/arm64/include/asm/arm-cci.h
+ *
+ * Copyright (C) 2015 ARM Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __ASM_ARM_CCI_H
+#define __ASM_ARM_CCI_H
+
+static inline bool platform_has_secure_cci_access(void)
+{
+	return false;
+}
+
+#endif

+ 3 - 0
arch/arm64/include/asm/tlb.h

@@ -48,6 +48,7 @@ static inline void tlb_flush(struct mmu_gather *tlb)
 static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte,
 static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte,
 				  unsigned long addr)
 				  unsigned long addr)
 {
 {
+	__flush_tlb_pgtable(tlb->mm, addr);
 	pgtable_page_dtor(pte);
 	pgtable_page_dtor(pte);
 	tlb_remove_entry(tlb, pte);
 	tlb_remove_entry(tlb, pte);
 }
 }
@@ -56,6 +57,7 @@ static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte,
 static inline void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmdp,
 static inline void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmdp,
 				  unsigned long addr)
 				  unsigned long addr)
 {
 {
+	__flush_tlb_pgtable(tlb->mm, addr);
 	tlb_remove_entry(tlb, virt_to_page(pmdp));
 	tlb_remove_entry(tlb, virt_to_page(pmdp));
 }
 }
 #endif
 #endif
@@ -64,6 +66,7 @@ static inline void __pmd_free_tlb(struct mmu_gather *tlb, pmd_t *pmdp,
 static inline void __pud_free_tlb(struct mmu_gather *tlb, pud_t *pudp,
 static inline void __pud_free_tlb(struct mmu_gather *tlb, pud_t *pudp,
 				  unsigned long addr)
 				  unsigned long addr)
 {
 {
+	__flush_tlb_pgtable(tlb->mm, addr);
 	tlb_remove_entry(tlb, virt_to_page(pudp));
 	tlb_remove_entry(tlb, virt_to_page(pudp));
 }
 }
 #endif
 #endif

+ 13 - 0
arch/arm64/include/asm/tlbflush.h

@@ -143,6 +143,19 @@ static inline void flush_tlb_kernel_range(unsigned long start, unsigned long end
 		flush_tlb_all();
 		flush_tlb_all();
 }
 }
 
 
+/*
+ * Used to invalidate the TLB (walk caches) corresponding to intermediate page
+ * table levels (pgd/pud/pmd).
+ */
+static inline void __flush_tlb_pgtable(struct mm_struct *mm,
+				       unsigned long uaddr)
+{
+	unsigned long addr = uaddr >> 12 | ((unsigned long)ASID(mm) << 48);
+
+	dsb(ishst);
+	asm("tlbi	vae1is, %0" : : "r" (addr));
+	dsb(ish);
+}
 /*
 /*
  * On AArch64, the cache coherency is handled via the set_pte_at() function.
  * On AArch64, the cache coherency is handled via the set_pte_at() function.
  */
  */

+ 9 - 0
arch/arm64/kernel/efi.c

@@ -354,3 +354,12 @@ void efi_virtmap_unload(void)
 	efi_set_pgd(current->active_mm);
 	efi_set_pgd(current->active_mm);
 	preempt_enable();
 	preempt_enable();
 }
 }
+
+/*
+ * UpdateCapsule() depends on the system being shutdown via
+ * ResetSystem().
+ */
+bool efi_poweroff_required(void)
+{
+	return efi_enabled(EFI_RUNTIME_SERVICES);
+}

+ 1 - 1
arch/arm64/kernel/head.S

@@ -585,8 +585,8 @@ ENDPROC(set_cpu_boot_mode_flag)
  * zeroing of .bss would clobber it.
  * zeroing of .bss would clobber it.
  */
  */
 	.pushsection	.data..cacheline_aligned
 	.pushsection	.data..cacheline_aligned
-ENTRY(__boot_cpu_mode)
 	.align	L1_CACHE_SHIFT
 	.align	L1_CACHE_SHIFT
+ENTRY(__boot_cpu_mode)
 	.long	BOOT_CPU_MODE_EL2
 	.long	BOOT_CPU_MODE_EL2
 	.long	0
 	.long	0
 	.popsection
 	.popsection

+ 8 - 0
arch/arm64/kernel/process.c

@@ -21,6 +21,7 @@
 #include <stdarg.h>
 #include <stdarg.h>
 
 
 #include <linux/compat.h>
 #include <linux/compat.h>
+#include <linux/efi.h>
 #include <linux/export.h>
 #include <linux/export.h>
 #include <linux/sched.h>
 #include <linux/sched.h>
 #include <linux/kernel.h>
 #include <linux/kernel.h>
@@ -150,6 +151,13 @@ void machine_restart(char *cmd)
 	local_irq_disable();
 	local_irq_disable();
 	smp_send_stop();
 	smp_send_stop();
 
 
+	/*
+	 * UpdateCapsule() depends on the system being reset via
+	 * ResetSystem().
+	 */
+	if (efi_enabled(EFI_RUNTIME_SERVICES))
+		efi_reboot(reboot_mode, NULL);
+
 	/* Now call the architecture specific reboot code. */
 	/* Now call the architecture specific reboot code. */
 	if (arm_pm_restart)
 	if (arm_pm_restart)
 		arm_pm_restart(reboot_mode, cmd);
 		arm_pm_restart(reboot_mode, cmd);

+ 4 - 1
arch/arm64/mm/pageattr.c

@@ -51,7 +51,10 @@ static int change_memory_common(unsigned long addr, int numpages,
 		WARN_ON_ONCE(1);
 		WARN_ON_ONCE(1);
 	}
 	}
 
 
-	if (!is_module_address(start) || !is_module_address(end - 1))
+	if (start < MODULES_VADDR || start >= MODULES_END)
+		return -EINVAL;
+
+	if (end < MODULES_VADDR || end >= MODULES_END)
 		return -EINVAL;
 		return -EINVAL;
 
 
 	data.set_mask = set_mask;
 	data.set_mask = set_mask;

+ 5 - 0
arch/c6x/include/asm/pgtable.h

@@ -67,6 +67,11 @@ extern unsigned long empty_zero_page;
  */
  */
 #define pgtable_cache_init()   do { } while (0)
 #define pgtable_cache_init()   do { } while (0)
 
 
+/*
+ * c6x is !MMU, so define the simpliest implementation
+ */
+#define pgprot_writecombine pgprot_noncached
+
 #include <asm-generic/pgtable.h>
 #include <asm-generic/pgtable.h>
 
 
 #endif /* _ASM_C6X_PGTABLE_H */
 #endif /* _ASM_C6X_PGTABLE_H */

+ 4 - 3
arch/microblaze/kernel/entry.S

@@ -348,8 +348,9 @@ C_ENTRY(_user_exception):
  * The LP register should point to the location where the called function
  * The LP register should point to the location where the called function
  * should return.  [note that MAKE_SYS_CALL uses label 1] */
  * should return.  [note that MAKE_SYS_CALL uses label 1] */
 	/* See if the system call number is valid */
 	/* See if the system call number is valid */
+	blti	r12, 5f
 	addi	r11, r12, -__NR_syscalls;
 	addi	r11, r12, -__NR_syscalls;
-	bgei	r11,5f;
+	bgei	r11, 5f;
 	/* Figure out which function to use for this system call.  */
 	/* Figure out which function to use for this system call.  */
 	/* Note Microblaze barrel shift is optional, so don't rely on it */
 	/* Note Microblaze barrel shift is optional, so don't rely on it */
 	add	r12, r12, r12;			/* convert num -> ptr */
 	add	r12, r12, r12;			/* convert num -> ptr */
@@ -375,7 +376,7 @@ C_ENTRY(_user_exception):
 
 
 	/* The syscall number is invalid, return an error.  */
 	/* The syscall number is invalid, return an error.  */
 5:
 5:
-	rtsd	r15, 8;		/* looks like a normal subroutine return */
+	braid	ret_from_trap
 	addi	r3, r0, -ENOSYS;
 	addi	r3, r0, -ENOSYS;
 
 
 /* Entry point used to return from a syscall/trap */
 /* Entry point used to return from a syscall/trap */
@@ -411,7 +412,7 @@ C_ENTRY(ret_from_trap):
 	bri	1b
 	bri	1b
 
 
 	/* Maybe handle a signal */
 	/* Maybe handle a signal */
-5:	
+5:
 	andi	r11, r19, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME;
 	andi	r11, r19, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME;
 	beqi	r11, 4f;		/* Signals to handle, handle them */
 	beqi	r11, 4f;		/* Signals to handle, handle them */
 
 

+ 1 - 0
arch/mips/kvm/tlb.c

@@ -216,6 +216,7 @@ int kvm_mips_host_tlb_write(struct kvm_vcpu *vcpu, unsigned long entryhi,
 	if (idx > current_cpu_data.tlbsize) {
 	if (idx > current_cpu_data.tlbsize) {
 		kvm_err("%s: Invalid Index: %d\n", __func__, idx);
 		kvm_err("%s: Invalid Index: %d\n", __func__, idx);
 		kvm_mips_dump_host_tlbs();
 		kvm_mips_dump_host_tlbs();
+		local_irq_restore(flags);
 		return -1;
 		return -1;
 	}
 	}
 
 

+ 3 - 3
arch/mips/kvm/trace.h

@@ -24,18 +24,18 @@ TRACE_EVENT(kvm_exit,
 	    TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
 	    TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
 	    TP_ARGS(vcpu, reason),
 	    TP_ARGS(vcpu, reason),
 	    TP_STRUCT__entry(
 	    TP_STRUCT__entry(
-			__field(struct kvm_vcpu *, vcpu)
+			__field(unsigned long, pc)
 			__field(unsigned int, reason)
 			__field(unsigned int, reason)
 	    ),
 	    ),
 
 
 	    TP_fast_assign(
 	    TP_fast_assign(
-			__entry->vcpu = vcpu;
+			__entry->pc = vcpu->arch.pc;
 			__entry->reason = reason;
 			__entry->reason = reason;
 	    ),
 	    ),
 
 
 	    TP_printk("[%s]PC: 0x%08lx",
 	    TP_printk("[%s]PC: 0x%08lx",
 		      kvm_mips_exit_types_str[__entry->reason],
 		      kvm_mips_exit_types_str[__entry->reason],
-		      __entry->vcpu->arch.pc)
+		      __entry->pc)
 );
 );
 
 
 #endif /* _TRACE_KVM_H */
 #endif /* _TRACE_KVM_H */

+ 47 - 0
arch/nios2/include/asm/ptrace.h

@@ -15,7 +15,54 @@
 
 
 #include <uapi/asm/ptrace.h>
 #include <uapi/asm/ptrace.h>
 
 
+/* This struct defines the way the registers are stored on the
+   stack during a system call.  */
+
 #ifndef __ASSEMBLY__
 #ifndef __ASSEMBLY__
+struct pt_regs {
+	unsigned long  r8;	/* r8-r15 Caller-saved GP registers */
+	unsigned long  r9;
+	unsigned long  r10;
+	unsigned long  r11;
+	unsigned long  r12;
+	unsigned long  r13;
+	unsigned long  r14;
+	unsigned long  r15;
+	unsigned long  r1;	/* Assembler temporary */
+	unsigned long  r2;	/* Retval LS 32bits */
+	unsigned long  r3;	/* Retval MS 32bits */
+	unsigned long  r4;	/* r4-r7 Register arguments */
+	unsigned long  r5;
+	unsigned long  r6;
+	unsigned long  r7;
+	unsigned long  orig_r2;	/* Copy of r2 ?? */
+	unsigned long  ra;	/* Return address */
+	unsigned long  fp;	/* Frame pointer */
+	unsigned long  sp;	/* Stack pointer */
+	unsigned long  gp;	/* Global pointer */
+	unsigned long  estatus;
+	unsigned long  ea;	/* Exception return address (pc) */
+	unsigned long  orig_r7;
+};
+
+/*
+ * This is the extended stack used by signal handlers and the context
+ * switcher: it's pushed after the normal "struct pt_regs".
+ */
+struct switch_stack {
+	unsigned long  r16;	/* r16-r23 Callee-saved GP registers */
+	unsigned long  r17;
+	unsigned long  r18;
+	unsigned long  r19;
+	unsigned long  r20;
+	unsigned long  r21;
+	unsigned long  r22;
+	unsigned long  r23;
+	unsigned long  fp;
+	unsigned long  gp;
+	unsigned long  ra;
+};
+
 #define user_mode(regs)	(((regs)->estatus & ESTATUS_EU))
 #define user_mode(regs)	(((regs)->estatus & ESTATUS_EU))
 
 
 #define instruction_pointer(regs)	((regs)->ra)
 #define instruction_pointer(regs)	((regs)->ra)

+ 0 - 32
arch/nios2/include/asm/ucontext.h

@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2010 Tobias Klauser <tklauser@distanz.ch>
- * Copyright (C) 2004 Microtronix Datacom Ltd
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file "COPYING" in the main directory of this archive
- * for more details.
- */
-
-#ifndef _ASM_NIOS2_UCONTEXT_H
-#define _ASM_NIOS2_UCONTEXT_H
-
-typedef int greg_t;
-#define NGREG 32
-typedef greg_t gregset_t[NGREG];
-
-struct mcontext {
-	int version;
-	gregset_t gregs;
-};
-
-#define MCONTEXT_VERSION 2
-
-struct ucontext {
-	unsigned long	  uc_flags;
-	struct ucontext  *uc_link;
-	stack_t		  uc_stack;
-	struct mcontext	  uc_mcontext;
-	sigset_t	  uc_sigmask;	/* mask last for extensibility */
-};
-
-#endif

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