aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-08-04 18:12:15 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-08-04 18:12:15 -0400
commit65f4740e72991fd565791b86b6cf8725fc8eb5bc (patch)
treeb34b68b99096ab66d83319b12f9850a3142a7445
parentb3c6858fb172512f63838523ae7817ae8adec564 (diff)
parent41c454fa0e86e3d186abfe1598645ead667da4ac (diff)
Merge tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC fixes from Arnd Bergmann: "This comes a bit later than I planned, and as a consequence is a larger than it should be. Most of the changes are devicetree fixes, across lots of platforms: Renesas, Samsung Exynos, Marvell EBU, TI OMAP, Rockchips, Amlogic Meson, Sigma Desings Tango, Allwinner SUNxi and TI Davinci. Also across many platforms, I applied an older series of simple randconfig build fixes. This includes making the CONFIG_MTD_XIP option compile again, which had been broken for many years and probably has not been missed, but it felt wrong to just remove it completely. The only other changes are: - We enable HWSPINLOCK in defconfig to get some Qualcomm boards to work out of the box. - A few regression fixes for Texas Instruments OMAP2+. - A boot regression fix for the Renesas regulator quirk. - A suspend/resume fix for Uniphier SoCs, fixing the resume of the system bus" * tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (43 commits) ARM: dts: tango4: Request RGMII RX and TX clock delays bus: uniphier-system-bus: set up registers when resuming ARM64: dts: marvell: armada-37xx: Fix the number of GPIO on south bridge ARM: shmobile: rcar-gen2: Fix deadlock in regulator quirk arm64: defconfig: enable missing HWSPINLOCK ARM: pxa: select both FB and FB_W100 for eseries ARM: ixp4xx: fix ioport_unmap definition ARM: ep93xx: use ARM_PATCH_PHYS_VIRT correctly ARM: mmp: mark usb_dma_mask as __maybe_unused ARM: omap2: mark unused functions as __maybe_unused ARM: omap1: avoid unused variable warning ARM: sirf: mark sirfsoc_init_late as __maybe_unused ARM: ixp4xx: use normal prototype for {read,write}s{b,w,l} ARM: omap1/ams-delta: warn about failed regulator enable ARM: rpc: rename RAM_SIZE macro ARM: w90x900: normalize clk API ARM: ep93xx: normalize clk API ARM: dts: sun8i: a83t: Switch to CCU device tree binding macros arm64: allwinner: sun50i-a64: Correct emac register size ARM: dts: sunxi: h3/h5: Correct emac register size ...
-rw-r--r--Documentation/devicetree/bindings/gpu/arm,mali-midgard.txt2
-rw-r--r--arch/arm/Kconfig2
-rw-r--r--arch/arm/boot/dts/armada-388-gp.dts4
-rw-r--r--arch/arm/boot/dts/da850-evm.dts21
-rw-r--r--arch/arm/boot/dts/da850-lcdk.dts7
-rw-r--r--arch/arm/boot/dts/dm8168-evm.dts34
-rw-r--r--arch/arm/boot/dts/dm816x.dtsi2
-rw-r--r--arch/arm/boot/dts/dra71-evm.dts4
-rw-r--r--arch/arm/boot/dts/exynos4.dtsi3
-rw-r--r--arch/arm/boot/dts/rk3288.dtsi4
-rw-r--r--arch/arm/boot/dts/sun8i-a83t.dtsi16
-rw-r--r--arch/arm/boot/dts/sunxi-h3-h5.dtsi2
-rw-r--r--arch/arm/boot/dts/tango4-vantage-1172.dts2
-rw-r--r--arch/arm/mach-davinci/board-da850-evm.c4
-rw-r--r--arch/arm/mach-davinci/clock.c9
-rw-r--r--arch/arm/mach-ep93xx/clock.c20
-rw-r--r--arch/arm/mach-ixp4xx/include/mach/io.h34
-rw-r--r--arch/arm/mach-mmp/devices.c2
-rw-r--r--arch/arm/mach-mvebu/platsmp.c2
-rw-r--r--arch/arm/mach-omap1/board-ams-delta.c12
-rw-r--r--arch/arm/mach-omap1/board-osk.c4
-rw-r--r--arch/arm/mach-omap2/board-generic.c2
-rw-r--r--arch/arm/mach-omap2/io.c2
-rw-r--r--arch/arm/mach-omap2/pm34xx.c1
-rw-r--r--arch/arm/mach-omap2/prm3xxx.c7
-rw-r--r--arch/arm/mach-omap2/prm44xx.c55
-rw-r--r--arch/arm/mach-prima2/common.c2
-rw-r--r--arch/arm/mach-pxa/Kconfig1
-rw-r--r--arch/arm/mach-pxa/include/mach/mtd-xip.h10
-rw-r--r--arch/arm/mach-rpc/include/mach/hardware.h4
-rw-r--r--arch/arm/mach-sa1100/clock.c25
-rw-r--r--arch/arm/mach-sa1100/include/mach/mtd-xip.h4
-rw-r--r--arch/arm/mach-shmobile/regulator-quirk-rcar-gen2.c6
-rw-r--r--arch/arm/mach-w90x900/clock.c29
-rw-r--r--arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi2
-rw-r--r--arch/arm64/boot/dts/amlogic/meson-gx.dtsi2
-rw-r--r--arch/arm64/boot/dts/amlogic/meson-gxl-s905x-khadas-vim.dts4
-rw-r--r--arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts103
-rw-r--r--arch/arm64/boot/dts/marvell/armada-37xx.dtsi2
-rw-r--r--arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi1
-rw-r--r--arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi3
-rw-r--r--arch/arm64/boot/dts/renesas/salvator-common.dtsi2
-rw-r--r--arch/arm64/boot/dts/renesas/ulcb.dtsi2
-rw-r--r--arch/arm64/configs/defconfig1
-rw-r--r--drivers/bus/uniphier-system-bus.c14
-rw-r--r--drivers/soc/zte/Kconfig1
46 files changed, 372 insertions, 103 deletions
diff --git a/Documentation/devicetree/bindings/gpu/arm,mali-midgard.txt b/Documentation/devicetree/bindings/gpu/arm,mali-midgard.txt
index d3b6e1a4713a..5aa5926029ee 100644
--- a/Documentation/devicetree/bindings/gpu/arm,mali-midgard.txt
+++ b/Documentation/devicetree/bindings/gpu/arm,mali-midgard.txt
@@ -40,7 +40,7 @@ Optional properties:
40Example for a Mali-T760: 40Example for a Mali-T760:
41 41
42gpu@ffa30000 { 42gpu@ffa30000 {
43 compatible = "rockchip,rk3288-mali", "arm,mali-t760", "arm,mali-midgard"; 43 compatible = "rockchip,rk3288-mali", "arm,mali-t760";
44 reg = <0xffa30000 0x10000>; 44 reg = <0xffa30000 0x10000>;
45 interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>, 45 interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
46 <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>, 46 <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index a208bfe367b5..61a0cb15067e 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -380,7 +380,7 @@ config ARCH_EP93XX
380 bool "EP93xx-based" 380 bool "EP93xx-based"
381 select ARCH_HAS_HOLES_MEMORYMODEL 381 select ARCH_HAS_HOLES_MEMORYMODEL
382 select ARM_AMBA 382 select ARM_AMBA
383 select ARM_PATCH_PHYS_VIRT 383 imply ARM_PATCH_PHYS_VIRT
384 select ARM_VIC 384 select ARM_VIC
385 select AUTO_ZRELADDR 385 select AUTO_ZRELADDR
386 select CLKDEV_LOOKUP 386 select CLKDEV_LOOKUP
diff --git a/arch/arm/boot/dts/armada-388-gp.dts b/arch/arm/boot/dts/armada-388-gp.dts
index 895fa6cfa15a..563901e0ec07 100644
--- a/arch/arm/boot/dts/armada-388-gp.dts
+++ b/arch/arm/boot/dts/armada-388-gp.dts
@@ -75,7 +75,7 @@
75 pinctrl-names = "default"; 75 pinctrl-names = "default";
76 pinctrl-0 = <&pca0_pins>; 76 pinctrl-0 = <&pca0_pins>;
77 interrupt-parent = <&gpio0>; 77 interrupt-parent = <&gpio0>;
78 interrupts = <18 IRQ_TYPE_EDGE_FALLING>; 78 interrupts = <18 IRQ_TYPE_LEVEL_LOW>;
79 gpio-controller; 79 gpio-controller;
80 #gpio-cells = <2>; 80 #gpio-cells = <2>;
81 interrupt-controller; 81 interrupt-controller;
@@ -87,7 +87,7 @@
87 compatible = "nxp,pca9555"; 87 compatible = "nxp,pca9555";
88 pinctrl-names = "default"; 88 pinctrl-names = "default";
89 interrupt-parent = <&gpio0>; 89 interrupt-parent = <&gpio0>;
90 interrupts = <18 IRQ_TYPE_EDGE_FALLING>; 90 interrupts = <18 IRQ_TYPE_LEVEL_LOW>;
91 gpio-controller; 91 gpio-controller;
92 #gpio-cells = <2>; 92 #gpio-cells = <2>;
93 interrupt-controller; 93 interrupt-controller;
diff --git a/arch/arm/boot/dts/da850-evm.dts b/arch/arm/boot/dts/da850-evm.dts
index a423e8ebfb37..67e72bc72e80 100644
--- a/arch/arm/boot/dts/da850-evm.dts
+++ b/arch/arm/boot/dts/da850-evm.dts
@@ -301,25 +301,4 @@
301 pinctrl-names = "default"; 301 pinctrl-names = "default";
302 pinctrl-0 = <&vpif_capture_pins>, <&vpif_display_pins>; 302 pinctrl-0 = <&vpif_capture_pins>, <&vpif_display_pins>;
303 status = "okay"; 303 status = "okay";
304
305 /* VPIF capture port */
306 port@0 {
307 vpif_input_ch0: endpoint@0 {
308 reg = <0>;
309 bus-width = <8>;
310 };
311
312 vpif_input_ch1: endpoint@1 {
313 reg = <1>;
314 bus-width = <8>;
315 data-shift = <8>;
316 };
317 };
318
319 /* VPIF display port */
320 port@1 {
321 vpif_output_ch0: endpoint {
322 bus-width = <8>;
323 };
324 };
325}; 304};
diff --git a/arch/arm/boot/dts/da850-lcdk.dts b/arch/arm/boot/dts/da850-lcdk.dts
index b837fec70eec..a0f0916156e6 100644
--- a/arch/arm/boot/dts/da850-lcdk.dts
+++ b/arch/arm/boot/dts/da850-lcdk.dts
@@ -318,11 +318,4 @@
318 pinctrl-names = "default"; 318 pinctrl-names = "default";
319 pinctrl-0 = <&vpif_capture_pins>; 319 pinctrl-0 = <&vpif_capture_pins>;
320 status = "okay"; 320 status = "okay";
321
322 /* VPIF capture port */
323 port {
324 vpif_ch0: endpoint {
325 bus-width = <8>;
326 };
327 };
328}; 321};
diff --git a/arch/arm/boot/dts/dm8168-evm.dts b/arch/arm/boot/dts/dm8168-evm.dts
index 1865976db5f9..c72a2132aa82 100644
--- a/arch/arm/boot/dts/dm8168-evm.dts
+++ b/arch/arm/boot/dts/dm8168-evm.dts
@@ -68,6 +68,34 @@
68 DM816X_IOPAD(0x0d08, MUX_MODE0) /* USB1_DRVVBUS */ 68 DM816X_IOPAD(0x0d08, MUX_MODE0) /* USB1_DRVVBUS */
69 >; 69 >;
70 }; 70 };
71
72 nandflash_pins: nandflash_pins {
73 pinctrl-single,pins = <
74 DM816X_IOPAD(0x0b38, PULL_UP | MUX_MODE0) /* PINCTRL207 GPMC_CS0*/
75 DM816X_IOPAD(0x0b60, PULL_ENA | MUX_MODE0) /* PINCTRL217 GPMC_ADV_ALE */
76 DM816X_IOPAD(0x0b54, PULL_UP | PULL_ENA | MUX_MODE0) /* PINCTRL214 GPMC_OE_RE */
77 DM816X_IOPAD(0x0b58, PULL_ENA | MUX_MODE0) /* PINCTRL215 GPMC_BE0_CLE */
78 DM816X_IOPAD(0x0b50, PULL_UP | MUX_MODE0) /* PINCTRL213 GPMC_WE */
79 DM816X_IOPAD(0x0b6c, MUX_MODE0) /* PINCTRL220 GPMC_WAIT */
80 DM816X_IOPAD(0x0be4, PULL_ENA | MUX_MODE0) /* PINCTRL250 GPMC_CLK */
81 DM816X_IOPAD(0x0ba4, MUX_MODE0) /* PINCTRL234 GPMC_D0 */
82 DM816X_IOPAD(0x0ba8, MUX_MODE0) /* PINCTRL234 GPMC_D1 */
83 DM816X_IOPAD(0x0bac, MUX_MODE0) /* PINCTRL234 GPMC_D2 */
84 DM816X_IOPAD(0x0bb0, MUX_MODE0) /* PINCTRL234 GPMC_D3 */
85 DM816X_IOPAD(0x0bb4, MUX_MODE0) /* PINCTRL234 GPMC_D4 */
86 DM816X_IOPAD(0x0bb8, MUX_MODE0) /* PINCTRL234 GPMC_D5 */
87 DM816X_IOPAD(0x0bbc, MUX_MODE0) /* PINCTRL234 GPMC_D6 */
88 DM816X_IOPAD(0x0bc0, MUX_MODE0) /* PINCTRL234 GPMC_D7 */
89 DM816X_IOPAD(0x0bc4, MUX_MODE0) /* PINCTRL234 GPMC_D8 */
90 DM816X_IOPAD(0x0bc8, MUX_MODE0) /* PINCTRL234 GPMC_D9 */
91 DM816X_IOPAD(0x0bcc, MUX_MODE0) /* PINCTRL234 GPMC_D10 */
92 DM816X_IOPAD(0x0bd0, MUX_MODE0) /* PINCTRL234 GPMC_D11 */
93 DM816X_IOPAD(0x0bd4, MUX_MODE0) /* PINCTRL234 GPMC_D12 */
94 DM816X_IOPAD(0x0bd8, MUX_MODE0) /* PINCTRL234 GPMC_D13 */
95 DM816X_IOPAD(0x0bdc, MUX_MODE0) /* PINCTRL234 GPMC_D14 */
96 DM816X_IOPAD(0x0be0, MUX_MODE0) /* PINCTRL234 GPMC_D15 */
97 >;
98 };
71}; 99};
72 100
73&i2c1 { 101&i2c1 {
@@ -90,6 +118,8 @@
90 118
91&gpmc { 119&gpmc {
92 ranges = <0 0 0x04000000 0x01000000>; /* CS0: 16MB for NAND */ 120 ranges = <0 0 0x04000000 0x01000000>; /* CS0: 16MB for NAND */
121 pinctrl-names = "default";
122 pinctrl-0 = <&nandflash_pins>;
93 123
94 nand@0,0 { 124 nand@0,0 {
95 compatible = "ti,omap2-nand"; 125 compatible = "ti,omap2-nand";
@@ -98,9 +128,11 @@
98 interrupt-parent = <&gpmc>; 128 interrupt-parent = <&gpmc>;
99 interrupts = <0 IRQ_TYPE_NONE>, /* fifoevent */ 129 interrupts = <0 IRQ_TYPE_NONE>, /* fifoevent */
100 <1 IRQ_TYPE_NONE>; /* termcount */ 130 <1 IRQ_TYPE_NONE>; /* termcount */
131 rb-gpios = <&gpmc 0 GPIO_ACTIVE_HIGH>; /* gpmc_wait0 */
101 #address-cells = <1>; 132 #address-cells = <1>;
102 #size-cells = <1>; 133 #size-cells = <1>;
103 ti,nand-ecc-opt = "bch8"; 134 ti,nand-ecc-opt = "bch8";
135 ti,elm-id = <&elm>;
104 nand-bus-width = <16>; 136 nand-bus-width = <16>;
105 gpmc,device-width = <2>; 137 gpmc,device-width = <2>;
106 gpmc,sync-clk-ps = <0>; 138 gpmc,sync-clk-ps = <0>;
@@ -164,7 +196,7 @@
164 vmmc-supply = <&vmmcsd_fixed>; 196 vmmc-supply = <&vmmcsd_fixed>;
165 bus-width = <4>; 197 bus-width = <4>;
166 cd-gpios = <&gpio2 7 GPIO_ACTIVE_LOW>; 198 cd-gpios = <&gpio2 7 GPIO_ACTIVE_LOW>;
167 wp-gpios = <&gpio2 8 GPIO_ACTIVE_LOW>; 199 wp-gpios = <&gpio2 8 GPIO_ACTIVE_HIGH>;
168}; 200};
169 201
170/* At least dm8168-evm rev c won't support multipoint, later may */ 202/* At least dm8168-evm rev c won't support multipoint, later may */
diff --git a/arch/arm/boot/dts/dm816x.dtsi b/arch/arm/boot/dts/dm816x.dtsi
index 59cbf958fcc3..566b2a8c8b96 100644
--- a/arch/arm/boot/dts/dm816x.dtsi
+++ b/arch/arm/boot/dts/dm816x.dtsi
@@ -145,7 +145,7 @@
145 }; 145 };
146 146
147 elm: elm@48080000 { 147 elm: elm@48080000 {
148 compatible = "ti,816-elm"; 148 compatible = "ti,am3352-elm";
149 ti,hwmods = "elm"; 149 ti,hwmods = "elm";
150 reg = <0x48080000 0x2000>; 150 reg = <0x48080000 0x2000>;
151 interrupts = <4>; 151 interrupts = <4>;
diff --git a/arch/arm/boot/dts/dra71-evm.dts b/arch/arm/boot/dts/dra71-evm.dts
index 4d57a55473af..a6298eb56978 100644
--- a/arch/arm/boot/dts/dra71-evm.dts
+++ b/arch/arm/boot/dts/dra71-evm.dts
@@ -190,7 +190,7 @@
190 ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_25_NS>; 190 ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_25_NS>;
191 ti,tx-internal-delay = <DP83867_RGMIIDCTL_250_PS>; 191 ti,tx-internal-delay = <DP83867_RGMIIDCTL_250_PS>;
192 ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_8_B_NIB>; 192 ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_8_B_NIB>;
193 ti,impedance-control = <0x1f>; 193 ti,min-output-impedance;
194 }; 194 };
195 195
196 dp83867_1: ethernet-phy@3 { 196 dp83867_1: ethernet-phy@3 {
@@ -198,7 +198,7 @@
198 ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_25_NS>; 198 ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_25_NS>;
199 ti,tx-internal-delay = <DP83867_RGMIIDCTL_250_PS>; 199 ti,tx-internal-delay = <DP83867_RGMIIDCTL_250_PS>;
200 ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_8_B_NIB>; 200 ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_8_B_NIB>;
201 ti,impedance-control = <0x1f>; 201 ti,min-output-impedance;
202 }; 202 };
203}; 203};
204 204
diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi
index 497a9470c888..5739389f5bb8 100644
--- a/arch/arm/boot/dts/exynos4.dtsi
+++ b/arch/arm/boot/dts/exynos4.dtsi
@@ -59,6 +59,9 @@
59 compatible = "samsung,exynos4210-audss-clock"; 59 compatible = "samsung,exynos4210-audss-clock";
60 reg = <0x03810000 0x0C>; 60 reg = <0x03810000 0x0C>;
61 #clock-cells = <1>; 61 #clock-cells = <1>;
62 clocks = <&clock CLK_FIN_PLL>, <&clock CLK_FOUT_EPLL>,
63 <&clock CLK_SCLK_AUDIO0>, <&clock CLK_SCLK_AUDIO0>;
64 clock-names = "pll_ref", "pll_in", "sclk_audio", "sclk_pcm_in";
62 }; 65 };
63 66
64 i2s0: i2s@03830000 { 67 i2s0: i2s@03830000 {
diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
index 2484f11761ea..858e1fed762a 100644
--- a/arch/arm/boot/dts/rk3288.dtsi
+++ b/arch/arm/boot/dts/rk3288.dtsi
@@ -1126,8 +1126,8 @@
1126 }; 1126 };
1127 }; 1127 };
1128 1128
1129 gpu: mali@ffa30000 { 1129 gpu: gpu@ffa30000 {
1130 compatible = "rockchip,rk3288-mali", "arm,mali-t760", "arm,mali-midgard"; 1130 compatible = "rockchip,rk3288-mali", "arm,mali-t760";
1131 reg = <0xffa30000 0x10000>; 1131 reg = <0xffa30000 0x10000>;
1132 interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>, 1132 interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
1133 <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>, 1133 <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
diff --git a/arch/arm/boot/dts/sun8i-a83t.dtsi b/arch/arm/boot/dts/sun8i-a83t.dtsi
index 8923ba625b76..19a8f4fcfab5 100644
--- a/arch/arm/boot/dts/sun8i-a83t.dtsi
+++ b/arch/arm/boot/dts/sun8i-a83t.dtsi
@@ -44,7 +44,9 @@
44 44
45#include <dt-bindings/interrupt-controller/arm-gic.h> 45#include <dt-bindings/interrupt-controller/arm-gic.h>
46 46
47#include <dt-bindings/clock/sun8i-a83t-ccu.h>
47#include <dt-bindings/clock/sun8i-r-ccu.h> 48#include <dt-bindings/clock/sun8i-r-ccu.h>
49#include <dt-bindings/reset/sun8i-a83t-ccu.h>
48 50
49/ { 51/ {
50 interrupt-parent = <&gic>; 52 interrupt-parent = <&gic>;
@@ -175,8 +177,8 @@
175 compatible = "allwinner,sun8i-a83t-dma"; 177 compatible = "allwinner,sun8i-a83t-dma";
176 reg = <0x01c02000 0x1000>; 178 reg = <0x01c02000 0x1000>;
177 interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>; 179 interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
178 clocks = <&ccu 21>; 180 clocks = <&ccu CLK_BUS_DMA>;
179 resets = <&ccu 7>; 181 resets = <&ccu RST_BUS_DMA>;
180 #dma-cells = <1>; 182 #dma-cells = <1>;
181 }; 183 };
182 184
@@ -195,7 +197,7 @@
195 <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>, 197 <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>,
196 <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>; 198 <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
197 reg = <0x01c20800 0x400>; 199 reg = <0x01c20800 0x400>;
198 clocks = <&ccu 45>, <&osc24M>, <&osc16Md512>; 200 clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc16Md512>;
199 clock-names = "apb", "hosc", "losc"; 201 clock-names = "apb", "hosc", "losc";
200 gpio-controller; 202 gpio-controller;
201 interrupt-controller; 203 interrupt-controller;
@@ -247,8 +249,8 @@
247 "allwinner,sun8i-h3-spdif"; 249 "allwinner,sun8i-h3-spdif";
248 reg = <0x01c21000 0x400>; 250 reg = <0x01c21000 0x400>;
249 interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>; 251 interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
250 clocks = <&ccu 44>, <&ccu 76>; 252 clocks = <&ccu CLK_BUS_SPDIF>, <&ccu CLK_SPDIF>;
251 resets = <&ccu 32>; 253 resets = <&ccu RST_BUS_SPDIF>;
252 clock-names = "apb", "spdif"; 254 clock-names = "apb", "spdif";
253 dmas = <&dma 2>; 255 dmas = <&dma 2>;
254 dma-names = "tx"; 256 dma-names = "tx";
@@ -263,8 +265,8 @@
263 interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>; 265 interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>;
264 reg-shift = <2>; 266 reg-shift = <2>;
265 reg-io-width = <4>; 267 reg-io-width = <4>;
266 clocks = <&ccu 53>; 268 clocks = <&ccu CLK_BUS_UART0>;
267 resets = <&ccu 40>; 269 resets = <&ccu RST_BUS_UART0>;
268 status = "disabled"; 270 status = "disabled";
269 }; 271 };
270 272
diff --git a/arch/arm/boot/dts/sunxi-h3-h5.dtsi b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
index 6f2162608006..d38282b9e5d4 100644
--- a/arch/arm/boot/dts/sunxi-h3-h5.dtsi
+++ b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
@@ -394,7 +394,7 @@
394 emac: ethernet@1c30000 { 394 emac: ethernet@1c30000 {
395 compatible = "allwinner,sun8i-h3-emac"; 395 compatible = "allwinner,sun8i-h3-emac";
396 syscon = <&syscon>; 396 syscon = <&syscon>;
397 reg = <0x01c30000 0x104>; 397 reg = <0x01c30000 0x10000>;
398 interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>; 398 interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
399 interrupt-names = "macirq"; 399 interrupt-names = "macirq";
400 resets = <&ccu RST_BUS_EMAC>; 400 resets = <&ccu RST_BUS_EMAC>;
diff --git a/arch/arm/boot/dts/tango4-vantage-1172.dts b/arch/arm/boot/dts/tango4-vantage-1172.dts
index 86d8df98802f..13bcc460bcb2 100644
--- a/arch/arm/boot/dts/tango4-vantage-1172.dts
+++ b/arch/arm/boot/dts/tango4-vantage-1172.dts
@@ -22,7 +22,7 @@
22}; 22};
23 23
24&eth0 { 24&eth0 {
25 phy-connection-type = "rgmii"; 25 phy-connection-type = "rgmii-id";
26 phy-handle = <&eth0_phy>; 26 phy-handle = <&eth0_phy>;
27 #address-cells = <1>; 27 #address-cells = <1>;
28 #size-cells = <0>; 28 #size-cells = <0>;
diff --git a/arch/arm/mach-davinci/board-da850-evm.c b/arch/arm/mach-davinci/board-da850-evm.c
index b5625d009288..e568c8c6f69c 100644
--- a/arch/arm/mach-davinci/board-da850-evm.c
+++ b/arch/arm/mach-davinci/board-da850-evm.c
@@ -1166,7 +1166,7 @@ static struct tvp514x_platform_data tvp5146_pdata = {
1166 1166
1167#define TVP514X_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL) 1167#define TVP514X_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL)
1168 1168
1169static const struct vpif_input da850_ch0_inputs[] = { 1169static struct vpif_input da850_ch0_inputs[] = {
1170 { 1170 {
1171 .input = { 1171 .input = {
1172 .index = 0, 1172 .index = 0,
@@ -1181,7 +1181,7 @@ static const struct vpif_input da850_ch0_inputs[] = {
1181 }, 1181 },
1182}; 1182};
1183 1183
1184static const struct vpif_input da850_ch1_inputs[] = { 1184static struct vpif_input da850_ch1_inputs[] = {
1185 { 1185 {
1186 .input = { 1186 .input = {
1187 .index = 0, 1187 .index = 0,
diff --git a/arch/arm/mach-davinci/clock.c b/arch/arm/mach-davinci/clock.c
index f5dce9b4e617..f77a4f766050 100644
--- a/arch/arm/mach-davinci/clock.c
+++ b/arch/arm/mach-davinci/clock.c
@@ -218,6 +218,15 @@ int clk_set_parent(struct clk *clk, struct clk *parent)
218} 218}
219EXPORT_SYMBOL(clk_set_parent); 219EXPORT_SYMBOL(clk_set_parent);
220 220
221struct clk *clk_get_parent(struct clk *clk)
222{
223 if (!clk)
224 return NULL;
225
226 return clk->parent;
227}
228EXPORT_SYMBOL(clk_get_parent);
229
221int clk_register(struct clk *clk) 230int clk_register(struct clk *clk)
222{ 231{
223 if (clk == NULL || IS_ERR(clk)) 232 if (clk == NULL || IS_ERR(clk))
diff --git a/arch/arm/mach-ep93xx/clock.c b/arch/arm/mach-ep93xx/clock.c
index 39ef3b613912..beec5f16443a 100644
--- a/arch/arm/mach-ep93xx/clock.c
+++ b/arch/arm/mach-ep93xx/clock.c
@@ -475,6 +475,26 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
475} 475}
476EXPORT_SYMBOL(clk_set_rate); 476EXPORT_SYMBOL(clk_set_rate);
477 477
478long clk_round_rate(struct clk *clk, unsigned long rate)
479{
480 WARN_ON(clk);
481 return 0;
482}
483EXPORT_SYMBOL(clk_round_rate);
484
485int clk_set_parent(struct clk *clk, struct clk *parent)
486{
487 WARN_ON(clk);
488 return 0;
489}
490EXPORT_SYMBOL(clk_set_parent);
491
492struct clk *clk_get_parent(struct clk *clk)
493{
494 return clk->parent;
495}
496EXPORT_SYMBOL(clk_get_parent);
497
478 498
479static char fclk_divisors[] = { 1, 2, 4, 8, 16, 1, 1, 1 }; 499static char fclk_divisors[] = { 1, 2, 4, 8, 16, 1, 1, 1 };
480static char hclk_divisors[] = { 1, 2, 4, 5, 6, 8, 16, 32 }; 500static char hclk_divisors[] = { 1, 2, 4, 5, 6, 8, 16, 32 };
diff --git a/arch/arm/mach-ixp4xx/include/mach/io.h b/arch/arm/mach-ixp4xx/include/mach/io.h
index 7a0c13bf4269..844e8ac593e2 100644
--- a/arch/arm/mach-ixp4xx/include/mach/io.h
+++ b/arch/arm/mach-ixp4xx/include/mach/io.h
@@ -95,8 +95,10 @@ static inline void __indirect_writeb(u8 value, volatile void __iomem *p)
95} 95}
96 96
97static inline void __indirect_writesb(volatile void __iomem *bus_addr, 97static inline void __indirect_writesb(volatile void __iomem *bus_addr,
98 const u8 *vaddr, int count) 98 const void *p, int count)
99{ 99{
100 const u8 *vaddr = p;
101
100 while (count--) 102 while (count--)
101 writeb(*vaddr++, bus_addr); 103 writeb(*vaddr++, bus_addr);
102} 104}
@@ -118,8 +120,10 @@ static inline void __indirect_writew(u16 value, volatile void __iomem *p)
118} 120}
119 121
120static inline void __indirect_writesw(volatile void __iomem *bus_addr, 122static inline void __indirect_writesw(volatile void __iomem *bus_addr,
121 const u16 *vaddr, int count) 123 const void *p, int count)
122{ 124{
125 const u16 *vaddr = p;
126
123 while (count--) 127 while (count--)
124 writew(*vaddr++, bus_addr); 128 writew(*vaddr++, bus_addr);
125} 129}
@@ -137,8 +141,9 @@ static inline void __indirect_writel(u32 value, volatile void __iomem *p)
137} 141}
138 142
139static inline void __indirect_writesl(volatile void __iomem *bus_addr, 143static inline void __indirect_writesl(volatile void __iomem *bus_addr,
140 const u32 *vaddr, int count) 144 const void *p, int count)
141{ 145{
146 const u32 *vaddr = p;
142 while (count--) 147 while (count--)
143 writel(*vaddr++, bus_addr); 148 writel(*vaddr++, bus_addr);
144} 149}
@@ -160,8 +165,10 @@ static inline u8 __indirect_readb(const volatile void __iomem *p)
160} 165}
161 166
162static inline void __indirect_readsb(const volatile void __iomem *bus_addr, 167static inline void __indirect_readsb(const volatile void __iomem *bus_addr,
163 u8 *vaddr, u32 count) 168 void *p, u32 count)
164{ 169{
170 u8 *vaddr = p;
171
165 while (count--) 172 while (count--)
166 *vaddr++ = readb(bus_addr); 173 *vaddr++ = readb(bus_addr);
167} 174}
@@ -183,8 +190,10 @@ static inline u16 __indirect_readw(const volatile void __iomem *p)
183} 190}
184 191
185static inline void __indirect_readsw(const volatile void __iomem *bus_addr, 192static inline void __indirect_readsw(const volatile void __iomem *bus_addr,
186 u16 *vaddr, u32 count) 193 void *p, u32 count)
187{ 194{
195 u16 *vaddr = p;
196
188 while (count--) 197 while (count--)
189 *vaddr++ = readw(bus_addr); 198 *vaddr++ = readw(bus_addr);
190} 199}
@@ -204,8 +213,10 @@ static inline u32 __indirect_readl(const volatile void __iomem *p)
204} 213}
205 214
206static inline void __indirect_readsl(const volatile void __iomem *bus_addr, 215static inline void __indirect_readsl(const volatile void __iomem *bus_addr,
207 u32 *vaddr, u32 count) 216 void *p, u32 count)
208{ 217{
218 u32 *vaddr = p;
219
209 while (count--) 220 while (count--)
210 *vaddr++ = readl(bus_addr); 221 *vaddr++ = readl(bus_addr);
211} 222}
@@ -523,8 +534,15 @@ static inline void iowrite32_rep(void __iomem *addr, const void *vaddr,
523#endif 534#endif
524} 535}
525 536
526#define ioport_map(port, nr) ((void __iomem*)(port + PIO_OFFSET)) 537#define ioport_map(port, nr) ioport_map(port, nr)
527#define ioport_unmap(addr) 538static inline void __iomem *ioport_map(unsigned long port, unsigned int nr)
539{
540 return ((void __iomem*)((port) + PIO_OFFSET));
541}
542#define ioport_unmap(addr) ioport_unmap(addr)
543static inline void ioport_unmap(void __iomem *addr)
544{
545}
528#endif /* CONFIG_PCI */ 546#endif /* CONFIG_PCI */
529 547
530#endif /* __ASM_ARM_ARCH_IO_H */ 548#endif /* __ASM_ARM_ARCH_IO_H */
diff --git a/arch/arm/mach-mmp/devices.c b/arch/arm/mach-mmp/devices.c
index 3330ac7cfbef..671c7a09ab3d 100644
--- a/arch/arm/mach-mmp/devices.c
+++ b/arch/arm/mach-mmp/devices.c
@@ -238,7 +238,7 @@ void pxa_usb_phy_deinit(void __iomem *phy_reg)
238#endif 238#endif
239 239
240#if IS_ENABLED(CONFIG_USB_SUPPORT) 240#if IS_ENABLED(CONFIG_USB_SUPPORT)
241static u64 usb_dma_mask = ~(u32)0; 241static u64 __maybe_unused usb_dma_mask = ~(u32)0;
242 242
243#if IS_ENABLED(CONFIG_USB_MV_UDC) 243#if IS_ENABLED(CONFIG_USB_MV_UDC)
244struct resource pxa168_u2o_resources[] = { 244struct resource pxa168_u2o_resources[] = {
diff --git a/arch/arm/mach-mvebu/platsmp.c b/arch/arm/mach-mvebu/platsmp.c
index e62273aacb43..4ffbbd217e82 100644
--- a/arch/arm/mach-mvebu/platsmp.c
+++ b/arch/arm/mach-mvebu/platsmp.c
@@ -211,7 +211,7 @@ static int mv98dx3236_resume_set_cpu_boot_addr(int hw_cpu, void *boot_addr)
211 return PTR_ERR(base); 211 return PTR_ERR(base);
212 212
213 writel(0, base + MV98DX3236_CPU_RESUME_CTRL_REG); 213 writel(0, base + MV98DX3236_CPU_RESUME_CTRL_REG);
214 writel(virt_to_phys(boot_addr), base + MV98DX3236_CPU_RESUME_ADDR_REG); 214 writel(__pa_symbol(boot_addr), base + MV98DX3236_CPU_RESUME_ADDR_REG);
215 215
216 iounmap(base); 216 iounmap(base);
217 217
diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c
index 6613a6ff5dbc..6cbc69c92913 100644
--- a/arch/arm/mach-omap1/board-ams-delta.c
+++ b/arch/arm/mach-omap1/board-ams-delta.c
@@ -510,6 +510,7 @@ static void __init ams_delta_init(void)
510static void modem_pm(struct uart_port *port, unsigned int state, unsigned old) 510static void modem_pm(struct uart_port *port, unsigned int state, unsigned old)
511{ 511{
512 struct modem_private_data *priv = port->private_data; 512 struct modem_private_data *priv = port->private_data;
513 int ret;
513 514
514 if (IS_ERR(priv->regulator)) 515 if (IS_ERR(priv->regulator))
515 return; 516 return;
@@ -518,9 +519,16 @@ static void modem_pm(struct uart_port *port, unsigned int state, unsigned old)
518 return; 519 return;
519 520
520 if (state == 0) 521 if (state == 0)
521 regulator_enable(priv->regulator); 522 ret = regulator_enable(priv->regulator);
522 else if (old == 0) 523 else if (old == 0)
523 regulator_disable(priv->regulator); 524 ret = regulator_disable(priv->regulator);
525 else
526 ret = 0;
527
528 if (ret)
529 dev_warn(port->dev,
530 "ams_delta modem_pm: failed to %sable regulator: %d\n",
531 state ? "dis" : "en", ret);
524} 532}
525 533
526static struct plat_serial8250_port ams_delta_modem_ports[] = { 534static struct plat_serial8250_port ams_delta_modem_ports[] = {
diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c
index 4dfb99504810..95ac1929aede 100644
--- a/arch/arm/mach-omap1/board-osk.c
+++ b/arch/arm/mach-omap1/board-osk.c
@@ -441,13 +441,11 @@ static struct spi_board_info __initdata mistral_boardinfo[] = { {
441 .chip_select = 0, 441 .chip_select = 0,
442} }; 442} };
443 443
444#ifdef CONFIG_PM
445static irqreturn_t 444static irqreturn_t
446osk_mistral_wake_interrupt(int irq, void *ignored) 445osk_mistral_wake_interrupt(int irq, void *ignored)
447{ 446{
448 return IRQ_HANDLED; 447 return IRQ_HANDLED;
449} 448}
450#endif
451 449
452static void __init osk_mistral_init(void) 450static void __init osk_mistral_init(void)
453{ 451{
@@ -515,7 +513,6 @@ static void __init osk_mistral_init(void)
515 513
516 gpio_direction_input(OMAP_MPUIO(2)); 514 gpio_direction_input(OMAP_MPUIO(2));
517 irq_set_irq_type(irq, IRQ_TYPE_EDGE_RISING); 515 irq_set_irq_type(irq, IRQ_TYPE_EDGE_RISING);
518#ifdef CONFIG_PM
519 /* share the IRQ in case someone wants to use the 516 /* share the IRQ in case someone wants to use the
520 * button for more than wakeup from system sleep. 517 * button for more than wakeup from system sleep.
521 */ 518 */
@@ -529,7 +526,6 @@ static void __init osk_mistral_init(void)
529 ret); 526 ret);
530 } else 527 } else
531 enable_irq_wake(irq); 528 enable_irq_wake(irq);
532#endif
533 } else 529 } else
534 printk(KERN_ERR "OSK+Mistral: wakeup button is awol\n"); 530 printk(KERN_ERR "OSK+Mistral: wakeup button is awol\n");
535 531
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
index dc9e34e670a2..b1e661bb5521 100644
--- a/arch/arm/mach-omap2/board-generic.c
+++ b/arch/arm/mach-omap2/board-generic.c
@@ -28,7 +28,7 @@ static const struct of_device_id omap_dt_match_table[] __initconst = {
28 { } 28 { }
29}; 29};
30 30
31static void __init omap_generic_init(void) 31static void __init __maybe_unused omap_generic_init(void)
32{ 32{
33 pdata_quirks_init(omap_dt_match_table); 33 pdata_quirks_init(omap_dt_match_table);
34 34
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c
index 1d739d1a0a65..1cd20e4d56b0 100644
--- a/arch/arm/mach-omap2/io.c
+++ b/arch/arm/mach-omap2/io.c
@@ -410,7 +410,7 @@ static int _set_hwmod_postsetup_state(struct omap_hwmod *oh, void *data)
410 return omap_hwmod_set_postsetup_state(oh, *(u8 *)data); 410 return omap_hwmod_set_postsetup_state(oh, *(u8 *)data);
411} 411}
412 412
413static void __init omap_hwmod_init_postsetup(void) 413static void __init __maybe_unused omap_hwmod_init_postsetup(void)
414{ 414{
415 u8 postsetup_state; 415 u8 postsetup_state;
416 416
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index d44e0e2f1106..841ba19d64a6 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -486,7 +486,6 @@ int __init omap3_pm_init(void)
486 ret = request_irq(omap_prcm_event_to_irq("io"), 486 ret = request_irq(omap_prcm_event_to_irq("io"),
487 _prcm_int_handle_io, IRQF_SHARED | IRQF_NO_SUSPEND, "pm_io", 487 _prcm_int_handle_io, IRQF_SHARED | IRQF_NO_SUSPEND, "pm_io",
488 omap3_pm_init); 488 omap3_pm_init);
489 enable_irq(omap_prcm_event_to_irq("io"));
490 489
491 if (ret) { 490 if (ret) {
492 pr_err("pm: Failed to request pm_io irq\n"); 491 pr_err("pm: Failed to request pm_io irq\n");
diff --git a/arch/arm/mach-omap2/prm3xxx.c b/arch/arm/mach-omap2/prm3xxx.c
index 382e236fbfd9..64f6451499a7 100644
--- a/arch/arm/mach-omap2/prm3xxx.c
+++ b/arch/arm/mach-omap2/prm3xxx.c
@@ -692,7 +692,6 @@ static int omap3xxx_prm_late_init(void)
692{ 692{
693 struct device_node *np; 693 struct device_node *np;
694 int irq_num; 694 int irq_num;
695 int ret;
696 695
697 if (!(prm_features & PRM_HAS_IO_WAKEUP)) 696 if (!(prm_features & PRM_HAS_IO_WAKEUP))
698 return 0; 697 return 0;
@@ -712,12 +711,8 @@ static int omap3xxx_prm_late_init(void)
712 } 711 }
713 712
714 omap3xxx_prm_enable_io_wakeup(); 713 omap3xxx_prm_enable_io_wakeup();
715 ret = omap_prcm_register_chain_handler(&omap3_prcm_irq_setup);
716 if (!ret)
717 irq_set_status_flags(omap_prcm_event_to_irq("io"),
718 IRQ_NOAUTOEN);
719 714
720 return ret; 715 return omap_prcm_register_chain_handler(&omap3_prcm_irq_setup);
721} 716}
722 717
723static void __exit omap3xxx_prm_exit(void) 718static void __exit omap3xxx_prm_exit(void)
diff --git a/arch/arm/mach-omap2/prm44xx.c b/arch/arm/mach-omap2/prm44xx.c
index 87e86a4a9ead..3ab5df1ce900 100644
--- a/arch/arm/mach-omap2/prm44xx.c
+++ b/arch/arm/mach-omap2/prm44xx.c
@@ -337,6 +337,27 @@ static void omap44xx_prm_reconfigure_io_chain(void)
337} 337}
338 338
339/** 339/**
340 * omap44xx_prm_enable_io_wakeup - enable wakeup events from I/O wakeup latches
341 *
342 * Activates the I/O wakeup event latches and allows events logged by
343 * those latches to signal a wakeup event to the PRCM. For I/O wakeups
344 * to occur, WAKEUPENABLE bits must be set in the pad mux registers, and
345 * omap44xx_prm_reconfigure_io_chain() must be called. No return value.
346 */
347static void __init omap44xx_prm_enable_io_wakeup(void)
348{
349 s32 inst = omap4_prmst_get_prm_dev_inst();
350
351 if (inst == PRM_INSTANCE_UNKNOWN)
352 return;
353
354 omap4_prm_rmw_inst_reg_bits(OMAP4430_GLOBAL_WUEN_MASK,
355 OMAP4430_GLOBAL_WUEN_MASK,
356 inst,
357 omap4_prcm_irq_setup.pm_ctrl);
358}
359
360/**
340 * omap44xx_prm_read_reset_sources - return the last SoC reset source 361 * omap44xx_prm_read_reset_sources - return the last SoC reset source
341 * 362 *
342 * Return a u32 representing the last reset sources of the SoC. The 363 * Return a u32 representing the last reset sources of the SoC. The
@@ -668,6 +689,8 @@ struct pwrdm_ops omap4_pwrdm_operations = {
668 .pwrdm_has_voltdm = omap4_check_vcvp, 689 .pwrdm_has_voltdm = omap4_check_vcvp,
669}; 690};
670 691
692static int omap44xx_prm_late_init(void);
693
671/* 694/*
672 * XXX document 695 * XXX document
673 */ 696 */
@@ -675,6 +698,7 @@ static struct prm_ll_data omap44xx_prm_ll_data = {
675 .read_reset_sources = &omap44xx_prm_read_reset_sources, 698 .read_reset_sources = &omap44xx_prm_read_reset_sources,
676 .was_any_context_lost_old = &omap44xx_prm_was_any_context_lost_old, 699 .was_any_context_lost_old = &omap44xx_prm_was_any_context_lost_old,
677 .clear_context_loss_flags_old = &omap44xx_prm_clear_context_loss_flags_old, 700 .clear_context_loss_flags_old = &omap44xx_prm_clear_context_loss_flags_old,
701 .late_init = &omap44xx_prm_late_init,
678 .assert_hardreset = omap4_prminst_assert_hardreset, 702 .assert_hardreset = omap4_prminst_assert_hardreset,
679 .deassert_hardreset = omap4_prminst_deassert_hardreset, 703 .deassert_hardreset = omap4_prminst_deassert_hardreset,
680 .is_hardreset_asserted = omap4_prminst_is_hardreset_asserted, 704 .is_hardreset_asserted = omap4_prminst_is_hardreset_asserted,
@@ -711,6 +735,37 @@ int __init omap44xx_prm_init(const struct omap_prcm_init_data *data)
711 return prm_register(&omap44xx_prm_ll_data); 735 return prm_register(&omap44xx_prm_ll_data);
712} 736}
713 737
738static int omap44xx_prm_late_init(void)
739{
740 int irq_num;
741
742 if (!(prm_features & PRM_HAS_IO_WAKEUP))
743 return 0;
744
745 irq_num = of_irq_get(prm_init_data->np, 0);
746 /*
747 * Already have OMAP4 IRQ num. For all other platforms, we need
748 * IRQ numbers from DT
749 */
750 if (irq_num < 0 && !(prm_init_data->flags & PRM_IRQ_DEFAULT)) {
751 if (irq_num == -EPROBE_DEFER)
752 return irq_num;
753
754 /* Have nothing to do */
755 return 0;
756 }
757
758 /* Once OMAP4 DT is filled as well */
759 if (irq_num >= 0) {
760 omap4_prcm_irq_setup.irq = irq_num;
761 omap4_prcm_irq_setup.xlate_irq = NULL;
762 }
763
764 omap44xx_prm_enable_io_wakeup();
765
766 return omap_prcm_register_chain_handler(&omap4_prcm_irq_setup);
767}
768
714static void __exit omap44xx_prm_exit(void) 769static void __exit omap44xx_prm_exit(void)
715{ 770{
716 prm_unregister(&omap44xx_prm_ll_data); 771 prm_unregister(&omap44xx_prm_ll_data);
diff --git a/arch/arm/mach-prima2/common.c b/arch/arm/mach-prima2/common.c
index 8cadb302a7d2..ffe05c27087e 100644
--- a/arch/arm/mach-prima2/common.c
+++ b/arch/arm/mach-prima2/common.c
@@ -15,7 +15,7 @@
15#include <linux/of_platform.h> 15#include <linux/of_platform.h>
16#include "common.h" 16#include "common.h"
17 17
18static void __init sirfsoc_init_late(void) 18static void __init __maybe_unused sirfsoc_init_late(void)
19{ 19{
20 sirfsoc_pm_init(); 20 sirfsoc_pm_init();
21} 21}
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
index 76fbc115ec33..ce7d97babb0f 100644
--- a/arch/arm/mach-pxa/Kconfig
+++ b/arch/arm/mach-pxa/Kconfig
@@ -566,6 +566,7 @@ config MACH_ICONTROL
566config ARCH_PXA_ESERIES 566config ARCH_PXA_ESERIES
567 bool "PXA based Toshiba e-series PDAs" 567 bool "PXA based Toshiba e-series PDAs"
568 select FB_W100 568 select FB_W100
569 select FB
569 select PXA25x 570 select PXA25x
570 571
571config MACH_E330 572config MACH_E330
diff --git a/arch/arm/mach-pxa/include/mach/mtd-xip.h b/arch/arm/mach-pxa/include/mach/mtd-xip.h
index 990d2bf2fb45..9bf4ea6a6f74 100644
--- a/arch/arm/mach-pxa/include/mach/mtd-xip.h
+++ b/arch/arm/mach-pxa/include/mach/mtd-xip.h
@@ -17,11 +17,15 @@
17 17
18#include <mach/regs-ost.h> 18#include <mach/regs-ost.h>
19 19
20#define xip_irqpending() (ICIP & ICMR) 20/* restored July 2017, this did not build since 2011! */
21
22#define ICIP io_p2v(0x40d00000)
23#define ICMR io_p2v(0x40d00004)
24#define xip_irqpending() (readl(ICIP) & readl(ICMR))
21 25
22/* we sample OSCR and convert desired delta to usec (1/4 ~= 1000000/3686400) */ 26/* we sample OSCR and convert desired delta to usec (1/4 ~= 1000000/3686400) */
23#define xip_currtime() (OSCR) 27#define xip_currtime() readl(OSCR)
24#define xip_elapsed_since(x) (signed)((OSCR - (x)) / 4) 28#define xip_elapsed_since(x) (signed)((readl(OSCR) - (x)) / 4)
25 29
26/* 30/*
27 * xip_cpu_idle() is used when waiting for a delay equal or larger than 31 * xip_cpu_idle() is used when waiting for a delay equal or larger than
diff --git a/arch/arm/mach-rpc/include/mach/hardware.h b/arch/arm/mach-rpc/include/mach/hardware.h
index aa79fa47373a..622d4e5df029 100644
--- a/arch/arm/mach-rpc/include/mach/hardware.h
+++ b/arch/arm/mach-rpc/include/mach/hardware.h
@@ -25,8 +25,8 @@
25 * *_SIZE is the size of the region 25 * *_SIZE is the size of the region
26 * *_BASE is the virtual address 26 * *_BASE is the virtual address
27 */ 27 */
28#define RAM_SIZE 0x10000000 28#define RPC_RAM_SIZE 0x10000000
29#define RAM_START 0x10000000 29#define RPC_RAM_START 0x10000000
30 30
31#define EASI_SIZE 0x08000000 /* EASI I/O */ 31#define EASI_SIZE 0x08000000 /* EASI I/O */
32#define EASI_START 0x08000000 32#define EASI_START 0x08000000
diff --git a/arch/arm/mach-sa1100/clock.c b/arch/arm/mach-sa1100/clock.c
index 0db46895c82a..7d52cd97d96e 100644
--- a/arch/arm/mach-sa1100/clock.c
+++ b/arch/arm/mach-sa1100/clock.c
@@ -35,6 +35,31 @@ struct clk clk_##_name = { \
35 35
36static DEFINE_SPINLOCK(clocks_lock); 36static DEFINE_SPINLOCK(clocks_lock);
37 37
38/* Dummy clk routine to build generic kernel parts that may be using them */
39long clk_round_rate(struct clk *clk, unsigned long rate)
40{
41 return clk_get_rate(clk);
42}
43EXPORT_SYMBOL(clk_round_rate);
44
45int clk_set_rate(struct clk *clk, unsigned long rate)
46{
47 return 0;
48}
49EXPORT_SYMBOL(clk_set_rate);
50
51int clk_set_parent(struct clk *clk, struct clk *parent)
52{
53 return 0;
54}
55EXPORT_SYMBOL(clk_set_parent);
56
57struct clk *clk_get_parent(struct clk *clk)
58{
59 return NULL;
60}
61EXPORT_SYMBOL(clk_get_parent);
62
38static void clk_gpio27_enable(struct clk *clk) 63static void clk_gpio27_enable(struct clk *clk)
39{ 64{
40 /* 65 /*
diff --git a/arch/arm/mach-sa1100/include/mach/mtd-xip.h b/arch/arm/mach-sa1100/include/mach/mtd-xip.h
index b3d684098fbf..cb76096a2e36 100644
--- a/arch/arm/mach-sa1100/include/mach/mtd-xip.h
+++ b/arch/arm/mach-sa1100/include/mach/mtd-xip.h
@@ -20,7 +20,7 @@
20#define xip_irqpending() (ICIP & ICMR) 20#define xip_irqpending() (ICIP & ICMR)
21 21
22/* we sample OSCR and convert desired delta to usec (1/4 ~= 1000000/3686400) */ 22/* we sample OSCR and convert desired delta to usec (1/4 ~= 1000000/3686400) */
23#define xip_currtime() (OSCR) 23#define xip_currtime() readl_relaxed(OSCR)
24#define xip_elapsed_since(x) (signed)((OSCR - (x)) / 4) 24#define xip_elapsed_since(x) (signed)((readl_relaxed(OSCR) - (x)) / 4)
25 25
26#endif /* __ARCH_SA1100_MTD_XIP_H__ */ 26#endif /* __ARCH_SA1100_MTD_XIP_H__ */
diff --git a/arch/arm/mach-shmobile/regulator-quirk-rcar-gen2.c b/arch/arm/mach-shmobile/regulator-quirk-rcar-gen2.c
index 73e3adbc1330..44438f344dc8 100644
--- a/arch/arm/mach-shmobile/regulator-quirk-rcar-gen2.c
+++ b/arch/arm/mach-shmobile/regulator-quirk-rcar-gen2.c
@@ -67,8 +67,12 @@ static int regulator_quirk_notify(struct notifier_block *nb,
67{ 67{
68 struct device *dev = data; 68 struct device *dev = data;
69 struct i2c_client *client; 69 struct i2c_client *client;
70 static bool done;
70 u32 mon; 71 u32 mon;
71 72
73 if (done)
74 return 0;
75
72 mon = ioread32(irqc + IRQC_MONITOR); 76 mon = ioread32(irqc + IRQC_MONITOR);
73 dev_dbg(dev, "%s: %ld, IRQC_MONITOR = 0x%x\n", __func__, action, mon); 77 dev_dbg(dev, "%s: %ld, IRQC_MONITOR = 0x%x\n", __func__, action, mon);
74 if (mon & REGULATOR_IRQ_MASK) 78 if (mon & REGULATOR_IRQ_MASK)
@@ -99,7 +103,7 @@ static int regulator_quirk_notify(struct notifier_block *nb,
99remove: 103remove:
100 dev_info(dev, "IRQ2 is not asserted, removing quirk\n"); 104 dev_info(dev, "IRQ2 is not asserted, removing quirk\n");
101 105
102 bus_unregister_notifier(&i2c_bus_type, nb); 106 done = true;
103 iounmap(irqc); 107 iounmap(irqc);
104 return 0; 108 return 0;
105} 109}
diff --git a/arch/arm/mach-w90x900/clock.c b/arch/arm/mach-w90x900/clock.c
index ac6fd1a2cb59..3f93fac98d97 100644
--- a/arch/arm/mach-w90x900/clock.c
+++ b/arch/arm/mach-w90x900/clock.c
@@ -93,3 +93,32 @@ void nuc900_subclk_enable(struct clk *clk, int enable)
93 93
94 __raw_writel(clken, W90X900_VA_CLKPWR + SUBCLK); 94 __raw_writel(clken, W90X900_VA_CLKPWR + SUBCLK);
95} 95}
96
97/* dummy functions, should not be called */
98long clk_round_rate(struct clk *clk, unsigned long rate)
99{
100 WARN_ON(clk);
101 return 0;
102}
103EXPORT_SYMBOL(clk_round_rate);
104
105int clk_set_rate(struct clk *clk, unsigned long rate)
106{
107 WARN_ON(clk);
108 return 0;
109}
110EXPORT_SYMBOL(clk_set_rate);
111
112int clk_set_parent(struct clk *clk, struct clk *parent)
113{
114 WARN_ON(clk);
115 return 0;
116}
117EXPORT_SYMBOL(clk_set_parent);
118
119struct clk *clk_get_parent(struct clk *clk)
120{
121 WARN_ON(clk);
122 return NULL;
123}
124EXPORT_SYMBOL(clk_get_parent);
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
index 9d00622ce845..bd0f33b77f57 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
@@ -452,7 +452,7 @@
452 emac: ethernet@1c30000 { 452 emac: ethernet@1c30000 {
453 compatible = "allwinner,sun50i-a64-emac"; 453 compatible = "allwinner,sun50i-a64-emac";
454 syscon = <&syscon>; 454 syscon = <&syscon>;
455 reg = <0x01c30000 0x100>; 455 reg = <0x01c30000 0x10000>;
456 interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>; 456 interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
457 interrupt-names = "macirq"; 457 interrupt-names = "macirq";
458 resets = <&ccu RST_BUS_EMAC>; 458 resets = <&ccu RST_BUS_EMAC>;
diff --git a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
index 35b8c88c3220..738ed689ff69 100644
--- a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
@@ -400,7 +400,7 @@
400 }; 400 };
401 401
402 pwm_AO_ab: pwm@550 { 402 pwm_AO_ab: pwm@550 {
403 compatible = "amlogic,meson-gx-pwm", "amlogic,meson-gxbb-pwm"; 403 compatible = "amlogic,meson-gx-ao-pwm", "amlogic,meson-gxbb-ao-pwm";
404 reg = <0x0 0x00550 0x0 0x10>; 404 reg = <0x0 0x00550 0x0 0x10>;
405 #pwm-cells = <3>; 405 #pwm-cells = <3>;
406 status = "disabled"; 406 status = "disabled";
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-khadas-vim.dts b/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-khadas-vim.dts
index 72c5a9f64ca8..94567eb17875 100644
--- a/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-khadas-vim.dts
+++ b/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-khadas-vim.dts
@@ -109,8 +109,8 @@
109 status = "okay"; 109 status = "okay";
110 pinctrl-0 = <&pwm_ao_a_3_pins>, <&pwm_ao_b_pins>; 110 pinctrl-0 = <&pwm_ao_a_3_pins>, <&pwm_ao_b_pins>;
111 pinctrl-names = "default"; 111 pinctrl-names = "default";
112 clocks = <&clkc CLKID_FCLK_DIV4>; 112 clocks = <&xtal> , <&xtal>;
113 clock-names = "clkin0"; 113 clock-names = "clkin0", "clkin1" ;
114}; 114};
115 115
116&pwm_ef { 116&pwm_ef {
diff --git a/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts b/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts
index 890821d6e52b..266fbcf3e47f 100644
--- a/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts
+++ b/arch/arm64/boot/dts/amlogic/meson-gxl-s905x-libretech-cc.dts
@@ -10,12 +10,20 @@
10 10
11#include <dt-bindings/input/input.h> 11#include <dt-bindings/input/input.h>
12 12
13#include "meson-gxl-s905x-p212.dtsi" 13#include "meson-gxl-s905x.dtsi"
14 14
15/ { 15/ {
16 compatible = "libretech,cc", "amlogic,s905x", "amlogic,meson-gxl"; 16 compatible = "libretech,cc", "amlogic,s905x", "amlogic,meson-gxl";
17 model = "Libre Technology CC"; 17 model = "Libre Technology CC";
18 18
19 aliases {
20 serial0 = &uart_AO;
21 };
22
23 chosen {
24 stdout-path = "serial0:115200n8";
25 };
26
19 cvbs-connector { 27 cvbs-connector {
20 compatible = "composite-video-connector"; 28 compatible = "composite-video-connector";
21 29
@@ -26,6 +34,11 @@
26 }; 34 };
27 }; 35 };
28 36
37 emmc_pwrseq: emmc-pwrseq {
38 compatible = "mmc-pwrseq-emmc";
39 reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
40 };
41
29 hdmi-connector { 42 hdmi-connector {
30 compatible = "hdmi-connector"; 43 compatible = "hdmi-connector";
31 type = "a"; 44 type = "a";
@@ -53,6 +66,39 @@
53 linux,default-trigger = "heartbeat"; 66 linux,default-trigger = "heartbeat";
54 }; 67 };
55 }; 68 };
69
70 memory@0 {
71 device_type = "memory";
72 reg = <0x0 0x0 0x0 0x80000000>;
73 };
74
75 vcc_3v3: regulator-vcc_3v3 {
76 compatible = "regulator-fixed";
77 regulator-name = "VCC_3V3";
78 regulator-min-microvolt = <3300000>;
79 regulator-max-microvolt = <3300000>;
80 };
81
82 vcc_card: regulator-vcc-card {
83 compatible = "regulator-gpio";
84
85 regulator-name = "VCC_CARD";
86 regulator-min-microvolt = <1800000>;
87 regulator-max-microvolt = <3300000>;
88
89 gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_HIGH>;
90 gpios-states = <0>;
91
92 states = <3300000 0>,
93 <1800000 1>;
94 };
95
96 vddio_boot: regulator-vddio_boot {
97 compatible = "regulator-fixed";
98 regulator-name = "VDDIO_BOOT";
99 regulator-min-microvolt = <3300000>;
100 regulator-max-microvolt = <3300000>;
101 };
56}; 102};
57 103
58&cvbs_vdac_port { 104&cvbs_vdac_port {
@@ -61,6 +107,16 @@
61 }; 107 };
62}; 108};
63 109
110&ethmac {
111 status = "okay";
112};
113
114&ir {
115 status = "okay";
116 pinctrl-0 = <&remote_input_ao_pins>;
117 pinctrl-names = "default";
118};
119
64&hdmi_tx { 120&hdmi_tx {
65 status = "okay"; 121 status = "okay";
66 pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>; 122 pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
@@ -73,20 +129,43 @@
73 }; 129 };
74}; 130};
75 131
76/* 132/* SD card */
77 * The following devices exists but are exposed on the general 133&sd_emmc_b {
78 * purpose GPIO header. End user may well decide to use those pins 134 status = "okay";
79 * for another purpose 135 pinctrl-0 = <&sdcard_pins>;
80 */ 136 pinctrl-names = "default";
137
138 bus-width = <4>;
139 cap-sd-highspeed;
140 max-frequency = <100000000>;
141 disable-wp;
142
143 cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_HIGH>;
144 cd-inverted;
81 145
82&sd_emmc_a { 146 vmmc-supply = <&vcc_3v3>;
83 status = "disabled"; 147 vqmmc-supply = <&vcc_card>;
84}; 148};
85 149
86&uart_A { 150/* eMMC */
87 status = "disabled"; 151&sd_emmc_c {
152 status = "okay";
153 pinctrl-0 = <&emmc_pins>;
154 pinctrl-names = "default";
155
156 bus-width = <8>;
157 cap-mmc-highspeed;
158 max-frequency = <50000000>;
159 non-removable;
160 disable-wp;
161
162 mmc-pwrseq = <&emmc_pwrseq>;
163 vmmc-supply = <&vcc_3v3>;
164 vqmmc-supply = <&vddio_boot>;
88}; 165};
89 166
90&wifi32k { 167&uart_AO {
91 status = "disabled"; 168 status = "okay";
169 pinctrl-0 = <&uart_ao_a_pins>;
170 pinctrl-names = "default";
92}; 171};
diff --git a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
index dbcc3d4e2ed5..51763d674050 100644
--- a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
+++ b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
@@ -219,7 +219,7 @@
219 reg = <0x18800 0x100>, <0x18C00 0x20>; 219 reg = <0x18800 0x100>, <0x18C00 0x20>;
220 gpiosb: gpio { 220 gpiosb: gpio {
221 #gpio-cells = <2>; 221 #gpio-cells = <2>;
222 gpio-ranges = <&pinctrl_sb 0 0 29>; 222 gpio-ranges = <&pinctrl_sb 0 0 30>;
223 gpio-controller; 223 gpio-controller;
224 interrupts = 224 interrupts =
225 <GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>, 225 <GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>,
diff --git a/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi b/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi
index 726528ce54e9..4c68605675a8 100644
--- a/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi
+++ b/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi
@@ -270,6 +270,7 @@
270 interrupt-names = "mem", "ring0", "ring1", 270 interrupt-names = "mem", "ring0", "ring1",
271 "ring2", "ring3", "eip"; 271 "ring2", "ring3", "eip";
272 clocks = <&cpm_clk 1 26>; 272 clocks = <&cpm_clk 1 26>;
273 dma-coherent;
273 }; 274 };
274 }; 275 };
275 276
diff --git a/arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi b/arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi
index 95f8e5f607f6..923f354b02f0 100644
--- a/arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi
+++ b/arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi
@@ -64,7 +64,7 @@
64 compatible = "marvell,armada-8k-rtc"; 64 compatible = "marvell,armada-8k-rtc";
65 reg = <0x284000 0x20>, <0x284080 0x24>; 65 reg = <0x284000 0x20>, <0x284080 0x24>;
66 reg-names = "rtc", "rtc-soc"; 66 reg-names = "rtc", "rtc-soc";
67 interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>; 67 interrupts = <ICU_GRP_NSR 77 IRQ_TYPE_LEVEL_HIGH>;
68 }; 68 };
69 69
70 cps_ethernet: ethernet@0 { 70 cps_ethernet: ethernet@0 {
@@ -261,6 +261,7 @@
261 interrupt-names = "mem", "ring0", "ring1", 261 interrupt-names = "mem", "ring0", "ring1",
262 "ring2", "ring3", "eip"; 262 "ring2", "ring3", "eip";
263 clocks = <&cps_clk 1 26>; 263 clocks = <&cps_clk 1 26>;
264 dma-coherent;
264 /* 265 /*
265 * The cryptographic engine found on the cp110 266 * The cryptographic engine found on the cp110
266 * master is enabled by default at the SoC 267 * master is enabled by default at the SoC
diff --git a/arch/arm64/boot/dts/renesas/salvator-common.dtsi b/arch/arm64/boot/dts/renesas/salvator-common.dtsi
index aef35e0b685a..a451996f590a 100644
--- a/arch/arm64/boot/dts/renesas/salvator-common.dtsi
+++ b/arch/arm64/boot/dts/renesas/salvator-common.dtsi
@@ -508,7 +508,7 @@
508 508
509 /* audio_clkout0/1/2/3 */ 509 /* audio_clkout0/1/2/3 */
510 #clock-cells = <1>; 510 #clock-cells = <1>;
511 clock-frequency = <11289600 12288000>; 511 clock-frequency = <12288000 11289600>;
512 512
513 status = "okay"; 513 status = "okay";
514 514
diff --git a/arch/arm64/boot/dts/renesas/ulcb.dtsi b/arch/arm64/boot/dts/renesas/ulcb.dtsi
index b5c6ee07d7f9..d1a3f3b7a0ab 100644
--- a/arch/arm64/boot/dts/renesas/ulcb.dtsi
+++ b/arch/arm64/boot/dts/renesas/ulcb.dtsi
@@ -281,7 +281,7 @@
281 281
282 /* audio_clkout0/1/2/3 */ 282 /* audio_clkout0/1/2/3 */
283 #clock-cells = <1>; 283 #clock-cells = <1>;
284 clock-frequency = <11289600 12288000>; 284 clock-frequency = <12288000 11289600>;
285 285
286 status = "okay"; 286 status = "okay";
287 287
diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
index 6c7d147eed54..b4ca115b3be1 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@ -476,6 +476,7 @@ CONFIG_QCOM_CLK_SMD_RPM=y
476CONFIG_MSM_GCC_8916=y 476CONFIG_MSM_GCC_8916=y
477CONFIG_MSM_GCC_8994=y 477CONFIG_MSM_GCC_8994=y
478CONFIG_MSM_MMCC_8996=y 478CONFIG_MSM_MMCC_8996=y
479CONFIG_HWSPINLOCK=y
479CONFIG_HWSPINLOCK_QCOM=y 480CONFIG_HWSPINLOCK_QCOM=y
480CONFIG_ARM_MHU=y 481CONFIG_ARM_MHU=y
481CONFIG_PLATFORM_MHU=y 482CONFIG_PLATFORM_MHU=y
diff --git a/drivers/bus/uniphier-system-bus.c b/drivers/bus/uniphier-system-bus.c
index 1e6e0269edcc..f76be6bd6eb3 100644
--- a/drivers/bus/uniphier-system-bus.c
+++ b/drivers/bus/uniphier-system-bus.c
@@ -256,10 +256,23 @@ static int uniphier_system_bus_probe(struct platform_device *pdev)
256 256
257 uniphier_system_bus_set_reg(priv); 257 uniphier_system_bus_set_reg(priv);
258 258
259 platform_set_drvdata(pdev, priv);
260
259 /* Now, the bus is configured. Populate platform_devices below it */ 261 /* Now, the bus is configured. Populate platform_devices below it */
260 return of_platform_default_populate(dev->of_node, NULL, dev); 262 return of_platform_default_populate(dev->of_node, NULL, dev);
261} 263}
262 264
265static int __maybe_unused uniphier_system_bus_resume(struct device *dev)
266{
267 uniphier_system_bus_set_reg(dev_get_drvdata(dev));
268
269 return 0;
270}
271
272static const struct dev_pm_ops uniphier_system_bus_pm_ops = {
273 SET_SYSTEM_SLEEP_PM_OPS(NULL, uniphier_system_bus_resume)
274};
275
263static const struct of_device_id uniphier_system_bus_match[] = { 276static const struct of_device_id uniphier_system_bus_match[] = {
264 { .compatible = "socionext,uniphier-system-bus" }, 277 { .compatible = "socionext,uniphier-system-bus" },
265 { /* sentinel */ } 278 { /* sentinel */ }
@@ -271,6 +284,7 @@ static struct platform_driver uniphier_system_bus_driver = {
271 .driver = { 284 .driver = {
272 .name = "uniphier-system-bus", 285 .name = "uniphier-system-bus",
273 .of_match_table = uniphier_system_bus_match, 286 .of_match_table = uniphier_system_bus_match,
287 .pm = &uniphier_system_bus_pm_ops,
274 }, 288 },
275}; 289};
276module_platform_driver(uniphier_system_bus_driver); 290module_platform_driver(uniphier_system_bus_driver);
diff --git a/drivers/soc/zte/Kconfig b/drivers/soc/zte/Kconfig
index 20bde38ce2f9..e9d750c510cd 100644
--- a/drivers/soc/zte/Kconfig
+++ b/drivers/soc/zte/Kconfig
@@ -2,6 +2,7 @@
2# ZTE SoC drivers 2# ZTE SoC drivers
3# 3#
4menuconfig SOC_ZTE 4menuconfig SOC_ZTE
5 depends on ARCH_ZX || COMPILE_TEST
5 bool "ZTE SoC driver support" 6 bool "ZTE SoC driver support"
6 7
7if SOC_ZTE 8if SOC_ZTE