summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-09-30 13:04:28 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-09-30 13:04:28 -0400
commitcef0aa0ce8592f68fb093b2be0d341a568ff9890 (patch)
tree9bd2d26d5f12c81f470c5f61d6fd0345a98362c6
parentcf4f493b102399adea3cf65cdde7161c17fb605c (diff)
parent9bfd7319e8d353b8b81c4cfd4d7eced71adbfbb5 (diff)
Merge tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
Pull ARM SoC fixes from Olof Johansson: "A few fixes that have trickled in through the merge window: - Video fixes for OMAP due to panel-dpi driver removal - Clock fixes for OMAP that broke no-idle quirks + nfsroot on DRA7 - Fixing arch version on ASpeed ast2500 - Two fixes for reset handling on ARM SCMI" * tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: ARM: aspeed: ast2500 is ARMv6K reset: reset-scmi: add missing handle initialisation firmware: arm_scmi: reset: fix reset_state assignment in scmi_domain_reset bus: ti-sysc: Remove unpaired sysc_clkdm_deny_idle() ARM: dts: logicpd-som-lv: Fix i2c2 and i2c3 Pin mux ARM: dts: am3517-evm: Fix missing video ARM: dts: logicpd-torpedo-baseboard: Fix missing video ARM: omap2plus_defconfig: Fix missing video bus: ti-sysc: Fix handling of invalid clocks bus: ti-sysc: Fix clock handling for no-idle quirks
-rw-r--r--arch/arm/boot/dts/am3517-evm.dts23
-rw-r--r--arch/arm/boot/dts/logicpd-som-lv.dtsi26
-rw-r--r--arch/arm/boot/dts/logicpd-torpedo-baseboard.dtsi37
-rw-r--r--arch/arm/configs/omap2plus_defconfig1
-rw-r--r--arch/arm/mach-aspeed/Kconfig1
-rw-r--r--arch/arm/mach-omap2/pdata-quirks.c4
-rw-r--r--drivers/bus/ti-sysc.c52
-rw-r--r--drivers/firmware/arm_scmi/reset.c2
-rw-r--r--drivers/reset/reset-scmi.c1
9 files changed, 66 insertions, 81 deletions
diff --git a/arch/arm/boot/dts/am3517-evm.dts b/arch/arm/boot/dts/am3517-evm.dts
index ebfe28c2f544..a1fd3e63e86e 100644
--- a/arch/arm/boot/dts/am3517-evm.dts
+++ b/arch/arm/boot/dts/am3517-evm.dts
@@ -124,10 +124,11 @@
124 }; 124 };
125 125
126 lcd0: display@0 { 126 lcd0: display@0 {
127 compatible = "panel-dpi"; 127 /* This isn't the exact LCD, but the timings meet spec */
128 /* To make it work, set CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=4 */
129 compatible = "newhaven,nhd-4.3-480272ef-atxl";
128 label = "15"; 130 label = "15";
129 status = "okay"; 131 backlight = <&bl>;
130 pinctrl-names = "default";
131 enable-gpios = <&gpio6 16 GPIO_ACTIVE_HIGH>; /* gpio176, lcd INI */ 132 enable-gpios = <&gpio6 16 GPIO_ACTIVE_HIGH>; /* gpio176, lcd INI */
132 vcc-supply = <&vdd_io_reg>; 133 vcc-supply = <&vdd_io_reg>;
133 134
@@ -136,22 +137,6 @@
136 remote-endpoint = <&dpi_out>; 137 remote-endpoint = <&dpi_out>;
137 }; 138 };
138 }; 139 };
139
140 panel-timing {
141 clock-frequency = <9000000>;
142 hactive = <480>;
143 vactive = <272>;
144 hfront-porch = <3>;
145 hback-porch = <2>;
146 hsync-len = <42>;
147 vback-porch = <3>;
148 vfront-porch = <4>;
149 vsync-len = <11>;
150 hsync-active = <0>;
151 vsync-active = <0>;
152 de-active = <1>;
153 pixelclk-active = <1>;
154 };
155 }; 140 };
156 141
157 bl: backlight { 142 bl: backlight {
diff --git a/arch/arm/boot/dts/logicpd-som-lv.dtsi b/arch/arm/boot/dts/logicpd-som-lv.dtsi
index 5563ee54c960..b56524cc7fe2 100644
--- a/arch/arm/boot/dts/logicpd-som-lv.dtsi
+++ b/arch/arm/boot/dts/logicpd-som-lv.dtsi
@@ -228,6 +228,20 @@
228 >; 228 >;
229 }; 229 };
230 230
231 i2c2_pins: pinmux_i2c2_pins {
232 pinctrl-single,pins = <
233 OMAP3_CORE1_IOPAD(0x21be, PIN_INPUT | MUX_MODE0) /* i2c2_scl */
234 OMAP3_CORE1_IOPAD(0x21c0, PIN_INPUT | MUX_MODE0) /* i2c2_sda */
235 >;
236 };
237
238 i2c3_pins: pinmux_i2c3_pins {
239 pinctrl-single,pins = <
240 OMAP3_CORE1_IOPAD(0x21c2, PIN_INPUT | MUX_MODE0) /* i2c3_scl */
241 OMAP3_CORE1_IOPAD(0x21c4, PIN_INPUT | MUX_MODE0) /* i2c3_sda */
242 >;
243 };
244
231 tsc2004_pins: pinmux_tsc2004_pins { 245 tsc2004_pins: pinmux_tsc2004_pins {
232 pinctrl-single,pins = < 246 pinctrl-single,pins = <
233 OMAP3_CORE1_IOPAD(0x2186, PIN_INPUT | MUX_MODE4) /* mcbsp4_dr.gpio_153 */ 247 OMAP3_CORE1_IOPAD(0x2186, PIN_INPUT | MUX_MODE4) /* mcbsp4_dr.gpio_153 */
@@ -249,18 +263,6 @@
249 OMAP3_WKUP_IOPAD(0x2a0c, PIN_OUTPUT | MUX_MODE4) /* sys_boot1.gpio_3 */ 263 OMAP3_WKUP_IOPAD(0x2a0c, PIN_OUTPUT | MUX_MODE4) /* sys_boot1.gpio_3 */
250 >; 264 >;
251 }; 265 };
252 i2c2_pins: pinmux_i2c2_pins {
253 pinctrl-single,pins = <
254 OMAP3_CORE1_IOPAD(0x21be, PIN_INPUT | MUX_MODE0) /* i2c2_scl */
255 OMAP3_CORE1_IOPAD(0x21c0, PIN_INPUT | MUX_MODE0) /* i2c2_sda */
256 >;
257 };
258 i2c3_pins: pinmux_i2c3_pins {
259 pinctrl-single,pins = <
260 OMAP3_CORE1_IOPAD(0x21c2, PIN_INPUT | MUX_MODE0) /* i2c3_scl */
261 OMAP3_CORE1_IOPAD(0x21c4, PIN_INPUT | MUX_MODE0) /* i2c3_sda */
262 >;
263 };
264}; 266};
265 267
266&omap3_pmx_core2 { 268&omap3_pmx_core2 {
diff --git a/arch/arm/boot/dts/logicpd-torpedo-baseboard.dtsi b/arch/arm/boot/dts/logicpd-torpedo-baseboard.dtsi
index 642e809e757a..449cc7616da6 100644
--- a/arch/arm/boot/dts/logicpd-torpedo-baseboard.dtsi
+++ b/arch/arm/boot/dts/logicpd-torpedo-baseboard.dtsi
@@ -108,7 +108,6 @@
108&dss { 108&dss {
109 status = "ok"; 109 status = "ok";
110 vdds_dsi-supply = <&vpll2>; 110 vdds_dsi-supply = <&vpll2>;
111 vdda_video-supply = <&video_reg>;
112 pinctrl-names = "default"; 111 pinctrl-names = "default";
113 pinctrl-0 = <&dss_dpi_pins1>; 112 pinctrl-0 = <&dss_dpi_pins1>;
114 port { 113 port {
@@ -124,44 +123,20 @@
124 display0 = &lcd0; 123 display0 = &lcd0;
125 }; 124 };
126 125
127 video_reg: video_reg {
128 pinctrl-names = "default";
129 pinctrl-0 = <&panel_pwr_pins>;
130 compatible = "regulator-fixed";
131 regulator-name = "fixed-supply";
132 regulator-min-microvolt = <3300000>;
133 regulator-max-microvolt = <3300000>;
134 gpio = <&gpio5 27 GPIO_ACTIVE_HIGH>; /* gpio155, lcd INI */
135 };
136
137 lcd0: display { 126 lcd0: display {
138 compatible = "panel-dpi"; 127 /* This isn't the exact LCD, but the timings meet spec */
128 /* To make it work, set CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=4 */
129 compatible = "newhaven,nhd-4.3-480272ef-atxl";
139 label = "15"; 130 label = "15";
140 status = "okay";
141 /* default-on; */
142 pinctrl-names = "default"; 131 pinctrl-names = "default";
143 132 pinctrl-0 = <&panel_pwr_pins>;
133 backlight = <&bl>;
134 enable-gpios = <&gpio5 27 GPIO_ACTIVE_HIGH>;
144 port { 135 port {
145 lcd_in: endpoint { 136 lcd_in: endpoint {
146 remote-endpoint = <&dpi_out>; 137 remote-endpoint = <&dpi_out>;
147 }; 138 };
148 }; 139 };
149
150 panel-timing {
151 clock-frequency = <9000000>;
152 hactive = <480>;
153 vactive = <272>;
154 hfront-porch = <3>;
155 hback-porch = <2>;
156 hsync-len = <42>;
157 vback-porch = <3>;
158 vfront-porch = <4>;
159 vsync-len = <11>;
160 hsync-active = <0>;
161 vsync-active = <0>;
162 de-active = <1>;
163 pixelclk-active = <1>;
164 };
165 }; 140 };
166 141
167 bl: backlight { 142 bl: backlight {
diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig
index c7bf9c493646..64eb896907bf 100644
--- a/arch/arm/configs/omap2plus_defconfig
+++ b/arch/arm/configs/omap2plus_defconfig
@@ -363,6 +363,7 @@ CONFIG_DRM_OMAP_PANEL_TPO_TD028TTEC1=m
363CONFIG_DRM_OMAP_PANEL_TPO_TD043MTEA1=m 363CONFIG_DRM_OMAP_PANEL_TPO_TD043MTEA1=m
364CONFIG_DRM_OMAP_PANEL_NEC_NL8048HL11=m 364CONFIG_DRM_OMAP_PANEL_NEC_NL8048HL11=m
365CONFIG_DRM_TILCDC=m 365CONFIG_DRM_TILCDC=m
366CONFIG_DRM_PANEL_SIMPLE=m
366CONFIG_FB=y 367CONFIG_FB=y
367CONFIG_FIRMWARE_EDID=y 368CONFIG_FIRMWARE_EDID=y
368CONFIG_FB_MODE_HELPERS=y 369CONFIG_FB_MODE_HELPERS=y
diff --git a/arch/arm/mach-aspeed/Kconfig b/arch/arm/mach-aspeed/Kconfig
index 56007b0b6120..e8d6e9957d65 100644
--- a/arch/arm/mach-aspeed/Kconfig
+++ b/arch/arm/mach-aspeed/Kconfig
@@ -26,7 +26,6 @@ config MACH_ASPEED_G4
26config MACH_ASPEED_G5 26config MACH_ASPEED_G5
27 bool "Aspeed SoC 5th Generation" 27 bool "Aspeed SoC 5th Generation"
28 depends on ARCH_MULTI_V6 28 depends on ARCH_MULTI_V6
29 select CPU_V6
30 select PINCTRL_ASPEED_G5 29 select PINCTRL_ASPEED_G5
31 select FTTMR010_TIMER 30 select FTTMR010_TIMER
32 help 31 help
diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c
index 6c6f8fce854e..d942a3357090 100644
--- a/arch/arm/mach-omap2/pdata-quirks.c
+++ b/arch/arm/mach-omap2/pdata-quirks.c
@@ -491,11 +491,11 @@ static int ti_sysc_clkdm_init(struct device *dev,
491 struct clk *fck, struct clk *ick, 491 struct clk *fck, struct clk *ick,
492 struct ti_sysc_cookie *cookie) 492 struct ti_sysc_cookie *cookie)
493{ 493{
494 if (fck) 494 if (!IS_ERR(fck))
495 cookie->clkdm = ti_sysc_find_one_clockdomain(fck); 495 cookie->clkdm = ti_sysc_find_one_clockdomain(fck);
496 if (cookie->clkdm) 496 if (cookie->clkdm)
497 return 0; 497 return 0;
498 if (ick) 498 if (!IS_ERR(ick))
499 cookie->clkdm = ti_sysc_find_one_clockdomain(ick); 499 cookie->clkdm = ti_sysc_find_one_clockdomain(ick);
500 if (cookie->clkdm) 500 if (cookie->clkdm)
501 return 0; 501 return 0;
diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c
index 9207ac291341..ad50efb470aa 100644
--- a/drivers/bus/ti-sysc.c
+++ b/drivers/bus/ti-sysc.c
@@ -280,9 +280,6 @@ static int sysc_get_one_clock(struct sysc *ddata, const char *name)
280 280
281 ddata->clocks[index] = devm_clk_get(ddata->dev, name); 281 ddata->clocks[index] = devm_clk_get(ddata->dev, name);
282 if (IS_ERR(ddata->clocks[index])) { 282 if (IS_ERR(ddata->clocks[index])) {
283 if (PTR_ERR(ddata->clocks[index]) == -ENOENT)
284 return 0;
285
286 dev_err(ddata->dev, "clock get error for %s: %li\n", 283 dev_err(ddata->dev, "clock get error for %s: %li\n",
287 name, PTR_ERR(ddata->clocks[index])); 284 name, PTR_ERR(ddata->clocks[index]));
288 285
@@ -357,7 +354,7 @@ static int sysc_get_clocks(struct sysc *ddata)
357 continue; 354 continue;
358 355
359 error = sysc_get_one_clock(ddata, name); 356 error = sysc_get_one_clock(ddata, name);
360 if (error && error != -ENOENT) 357 if (error)
361 return error; 358 return error;
362 } 359 }
363 360
@@ -1632,17 +1629,19 @@ static int sysc_init_module(struct sysc *ddata)
1632 if (error) 1629 if (error)
1633 return error; 1630 return error;
1634 1631
1635 if (manage_clocks) { 1632 sysc_clkdm_deny_idle(ddata);
1636 sysc_clkdm_deny_idle(ddata);
1637 1633
1638 error = sysc_enable_opt_clocks(ddata); 1634 /*
1639 if (error) 1635 * Always enable clocks. The bootloader may or may not have enabled
1640 return error; 1636 * the related clocks.
1637 */
1638 error = sysc_enable_opt_clocks(ddata);
1639 if (error)
1640 return error;
1641 1641
1642 error = sysc_enable_main_clocks(ddata); 1642 error = sysc_enable_main_clocks(ddata);
1643 if (error) 1643 if (error)
1644 goto err_opt_clocks; 1644 goto err_opt_clocks;
1645 }
1646 1645
1647 if (!(ddata->cfg.quirks & SYSC_QUIRK_NO_RESET_ON_INIT)) { 1646 if (!(ddata->cfg.quirks & SYSC_QUIRK_NO_RESET_ON_INIT)) {
1648 error = sysc_rstctrl_reset_deassert(ddata, true); 1647 error = sysc_rstctrl_reset_deassert(ddata, true);
@@ -1660,7 +1659,7 @@ static int sysc_init_module(struct sysc *ddata)
1660 goto err_main_clocks; 1659 goto err_main_clocks;
1661 } 1660 }
1662 1661
1663 if (!ddata->legacy_mode && manage_clocks) { 1662 if (!ddata->legacy_mode) {
1664 error = sysc_enable_module(ddata->dev); 1663 error = sysc_enable_module(ddata->dev);
1665 if (error) 1664 if (error)
1666 goto err_main_clocks; 1665 goto err_main_clocks;
@@ -1677,6 +1676,7 @@ err_main_clocks:
1677 if (manage_clocks) 1676 if (manage_clocks)
1678 sysc_disable_main_clocks(ddata); 1677 sysc_disable_main_clocks(ddata);
1679err_opt_clocks: 1678err_opt_clocks:
1679 /* No re-enable of clockdomain autoidle to prevent module autoidle */
1680 if (manage_clocks) { 1680 if (manage_clocks) {
1681 sysc_disable_opt_clocks(ddata); 1681 sysc_disable_opt_clocks(ddata);
1682 sysc_clkdm_allow_idle(ddata); 1682 sysc_clkdm_allow_idle(ddata);
@@ -2357,6 +2357,27 @@ static void ti_sysc_idle(struct work_struct *work)
2357 2357
2358 ddata = container_of(work, struct sysc, idle_work.work); 2358 ddata = container_of(work, struct sysc, idle_work.work);
2359 2359
2360 /*
2361 * One time decrement of clock usage counts if left on from init.
2362 * Note that we disable opt clocks unconditionally in this case
2363 * as they are enabled unconditionally during init without
2364 * considering sysc_opt_clks_needed() at that point.
2365 */
2366 if (ddata->cfg.quirks & (SYSC_QUIRK_NO_IDLE |
2367 SYSC_QUIRK_NO_IDLE_ON_INIT)) {
2368 sysc_disable_main_clocks(ddata);
2369 sysc_disable_opt_clocks(ddata);
2370 sysc_clkdm_allow_idle(ddata);
2371 }
2372
2373 /* Keep permanent PM runtime usage count for SYSC_QUIRK_NO_IDLE */
2374 if (ddata->cfg.quirks & SYSC_QUIRK_NO_IDLE)
2375 return;
2376
2377 /*
2378 * Decrement PM runtime usage count for SYSC_QUIRK_NO_IDLE_ON_INIT
2379 * and SYSC_QUIRK_NO_RESET_ON_INIT
2380 */
2360 if (pm_runtime_active(ddata->dev)) 2381 if (pm_runtime_active(ddata->dev))
2361 pm_runtime_put_sync(ddata->dev); 2382 pm_runtime_put_sync(ddata->dev);
2362} 2383}
@@ -2445,7 +2466,8 @@ static int sysc_probe(struct platform_device *pdev)
2445 INIT_DELAYED_WORK(&ddata->idle_work, ti_sysc_idle); 2466 INIT_DELAYED_WORK(&ddata->idle_work, ti_sysc_idle);
2446 2467
2447 /* At least earlycon won't survive without deferred idle */ 2468 /* At least earlycon won't survive without deferred idle */
2448 if (ddata->cfg.quirks & (SYSC_QUIRK_NO_IDLE_ON_INIT | 2469 if (ddata->cfg.quirks & (SYSC_QUIRK_NO_IDLE |
2470 SYSC_QUIRK_NO_IDLE_ON_INIT |
2449 SYSC_QUIRK_NO_RESET_ON_INIT)) { 2471 SYSC_QUIRK_NO_RESET_ON_INIT)) {
2450 schedule_delayed_work(&ddata->idle_work, 3000); 2472 schedule_delayed_work(&ddata->idle_work, 3000);
2451 } else { 2473 } else {
diff --git a/drivers/firmware/arm_scmi/reset.c b/drivers/firmware/arm_scmi/reset.c
index 64cc81915581..ab42c21c5517 100644
--- a/drivers/firmware/arm_scmi/reset.c
+++ b/drivers/firmware/arm_scmi/reset.c
@@ -150,7 +150,7 @@ static int scmi_domain_reset(const struct scmi_handle *handle, u32 domain,
150 dom = t->tx.buf; 150 dom = t->tx.buf;
151 dom->domain_id = cpu_to_le32(domain); 151 dom->domain_id = cpu_to_le32(domain);
152 dom->flags = cpu_to_le32(flags); 152 dom->flags = cpu_to_le32(flags);
153 dom->domain_id = cpu_to_le32(state); 153 dom->reset_state = cpu_to_le32(state);
154 154
155 if (rdom->async_reset) 155 if (rdom->async_reset)
156 ret = scmi_do_xfer_with_response(handle, t); 156 ret = scmi_do_xfer_with_response(handle, t);
diff --git a/drivers/reset/reset-scmi.c b/drivers/reset/reset-scmi.c
index c6d3c8427f14..b46df80ec6c3 100644
--- a/drivers/reset/reset-scmi.c
+++ b/drivers/reset/reset-scmi.c
@@ -102,6 +102,7 @@ static int scmi_reset_probe(struct scmi_device *sdev)
102 data->rcdev.owner = THIS_MODULE; 102 data->rcdev.owner = THIS_MODULE;
103 data->rcdev.of_node = np; 103 data->rcdev.of_node = np;
104 data->rcdev.nr_resets = handle->reset_ops->num_domains_get(handle); 104 data->rcdev.nr_resets = handle->reset_ops->num_domains_get(handle);
105 data->handle = handle;
105 106
106 return devm_reset_controller_register(dev, &data->rcdev); 107 return devm_reset_controller_register(dev, &data->rcdev);
107} 108}