Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'arm-omap-fixes-5.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc

Pull ARM OMAP fixes from Arnd Bergmann:
"The OMAP developers are particularly active at hunting down
regressions, so this is a separate branch with OMAP specific
fixes for v5.8:

As Tony explains
"The recent display subsystem (DSS) related platform data changes
caused display related regressions for suspend and resume. Looks
like I only tested suspend and resume before dropping the legacy
platform data, and forgot to test it after dropping it. Turns out
the main issue was that we no longer have platform code calling
pm_runtime_suspend for DSS like we did for the legacy platform data
case, and that fix is still being discussed on the dri-devel list
and will get merged separately. The DSS related testing exposed a
pile other other display related issues that also need fixing
though":

- Fix ti-sysc optional clock handling and reset status checks for
devices that reset automatically in idle like DSS

- Ignore ti-sysc clockactivity bit unless separately requested to
avoid unexpected performance issues

- Init ti-sysc framedonetv_irq to true and disable for am4

- Avoid duplicate DSS reset for legacy mode with dts data

- Remove LCD timings for am4 as they cause warnings now that we're
using generic panels

Other OMAP changes from Tony include:

- Fix omap_prm reset deassert as we still have drivers setting the
pm_runtime_irq_safe() flag

- Flush posted write for ti-sysc enable and disable

- Fix droid4 spi related errors with spi flags

- Fix am335x USB range and a typo for softreset

- Fix dra7 timer nodes for clocks for IPU and DSP

- Drop duplicate mailboxes after mismerge for dra7

- Prevent pocketgeagle header line signal from accidentally setting
micro-SD write protection signal by removing the default mux

- Fix NFSroot flakeyness after resume for duover by switching the
smsc911x gpio interrupt to back to level sensitive

- Fix regression for omap4 clockevent source after recent system
timer changes

- Yet another ethernet regression fix for the "rgmii" vs "rgmii-rxid"
phy-mode

- One patch to convert am3/am4 DT files to use the regular sdhci-omap
driver instead of the old hsmmc driver, this was meant for the
merge window but got lost in the process"

* tag 'arm-omap-fixes-5.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (21 commits)
ARM: dts: am5729: beaglebone-ai: fix rgmii phy-mode
ARM: dts: Fix omap4 system timer source clocks
ARM: dts: Fix duovero smsc interrupt for suspend
ARM: dts: am335x-pocketbeagle: Fix mmc0 Write Protect
Revert "bus: ti-sysc: Increase max softreset wait"
ARM: dts: am437x-epos-evm: remove lcd timings
ARM: dts: am437x-gp-evm: remove lcd timings
ARM: dts: am437x-sk-evm: remove lcd timings
ARM: dts: dra7-evm-common: Fix duplicate mailbox nodes
ARM: dts: dra7: Fix timer nodes properly for timer_sys_ck clocks
ARM: dts: Fix am33xx.dtsi ti,sysc-mask wrong softreset flag
ARM: dts: Fix am33xx.dtsi USB ranges length
bus: ti-sysc: Increase max softreset wait
ARM: OMAP2+: Fix legacy mode dss_reset
bus: ti-sysc: Fix uninitialized framedonetv_irq
bus: ti-sysc: Ignore clockactivity unless specified as a quirk
bus: ti-sysc: Use optional clocks on for enable and wait for softreset bit
ARM: dts: omap4-droid4: Fix spi configuration and increase rate
bus: ti-sysc: Flush posted write on enable and disable
soc: ti: omap-prm: use atomic iopoll instead of sleeping one
...

+125 -148
+1 -1
arch/arm/boot/dts/am335x-baltos.dtsi
··· 369 369 &mmc2 { 370 370 status = "okay"; 371 371 vmmc-supply = <&wl12xx_vmmc>; 372 - ti,non-removable; 372 + non-removable; 373 373 bus-width = <4>; 374 374 cap-power-off-card; 375 375 pinctrl-names = "default";
+1
arch/arm/boot/dts/am335x-boneblack-common.dtsi
··· 22 22 pinctrl-0 = <&emmc_pins>; 23 23 bus-width = <8>; 24 24 status = "okay"; 25 + non-removable; 25 26 }; 26 27 27 28 &am33xx_pinmux {
-1
arch/arm/boot/dts/am335x-boneblack-wireless.dts
··· 75 75 bus-width = <4>; 76 76 non-removable; 77 77 cap-power-off-card; 78 - ti,needs-special-hs-handling; 79 78 keep-power-in-suspend; 80 79 pinctrl-names = "default"; 81 80 pinctrl-0 = <&mmc3_pins &wl18xx_pins>;
-1
arch/arm/boot/dts/am335x-boneblue.dts
··· 367 367 bus-width = <4>; 368 368 non-removable; 369 369 cap-power-off-card; 370 - ti,needs-special-hs-handling; 371 370 keep-power-in-suspend; 372 371 pinctrl-names = "default"; 373 372 pinctrl-0 = <&mmc3_pins &wl18xx_pins>;
-1
arch/arm/boot/dts/am335x-bonegreen-wireless.dts
··· 75 75 bus-width = <4>; 76 76 non-removable; 77 77 cap-power-off-card; 78 - ti,needs-special-hs-handling; 79 78 keep-power-in-suspend; 80 79 pinctrl-names = "default"; 81 80 pinctrl-0 = <&mmc3_pins &wl18xx_pins>;
+1 -2
arch/arm/boot/dts/am335x-evm.dts
··· 743 743 bus-width = <4>; 744 744 pinctrl-names = "default"; 745 745 pinctrl-0 = <&mmc3_pins &wlan_pins>; 746 - ti,non-removable; 747 - ti,needs-special-hs-handling; 746 + non-removable; 748 747 cap-power-off-card; 749 748 keep-power-in-suspend; 750 749
+1 -1
arch/arm/boot/dts/am335x-evmsk.dts
··· 655 655 &mmc2 { 656 656 status = "okay"; 657 657 vmmc-supply = <&wl12xx_vmmc>; 658 - ti,non-removable; 658 + non-removable; 659 659 bus-width = <4>; 660 660 cap-power-off-card; 661 661 keep-power-in-suspend;
+1 -1
arch/arm/boot/dts/am335x-lxm.dts
··· 339 339 pinctrl-0 = <&emmc_pins>; 340 340 vmmc-supply = <&vmmcsd_fixed>; 341 341 bus-width = <8>; 342 - ti,non-removable; 342 + non-removable; 343 343 status = "okay"; 344 344 }; 345 345
+1 -1
arch/arm/boot/dts/am335x-moxa-uc-2100-common.dtsi
··· 159 159 vmmc-supply = <&vmmcsd_fixed>; 160 160 bus-width = <8>; 161 161 pinctrl-0 = <&mmc1_pins_default>; 162 - ti,non-removable; 162 + non-removable; 163 163 status = "okay"; 164 164 }; 165 165
+1 -1
arch/arm/boot/dts/am335x-moxa-uc-8100-me-t.dts
··· 451 451 vmmc-supply = <&vmmcsd_fixed>; 452 452 bus-width = <8>; 453 453 pinctrl-0 = <&mmc2_pins_default>; 454 - ti,non-removable; 454 + non-removable; 455 455 status = "okay"; 456 456 }; 457 457
+2 -2
arch/arm/boot/dts/am335x-pepper.dts
··· 341 341 pinctrl-0 = <&emmc_pins>; 342 342 vmmc-supply = <&ldo3_reg>; 343 343 bus-width = <8>; 344 - ti,non-removable; 344 + non-removable; 345 345 }; 346 346 347 347 &mmc3 { ··· 351 351 pinctrl-0 = <&wireless_pins>; 352 352 vmmmc-supply = <&v3v3c_reg>; 353 353 bus-width = <4>; 354 - ti,non-removable; 354 + non-removable; 355 355 dmas = <&edma_xbar 12 0 1 356 356 &edma_xbar 13 0 2>; 357 357 dma-names = "tx", "rx";
+1 -1
arch/arm/boot/dts/am335x-phycore-som.dtsi
··· 69 69 pinctrl-0 = <&emmc_pins>; 70 70 vmmc-supply = <&vmmc_reg>; 71 71 bus-width = <8>; 72 - ti,non-removable; 72 + non-removable; 73 73 status = "disabled"; 74 74 }; 75 75
-1
arch/arm/boot/dts/am335x-pocketbeagle.dts
··· 88 88 AM33XX_PADCONF(AM335X_PIN_MMC0_DAT3, PIN_INPUT_PULLUP, MUX_MODE0) 89 89 AM33XX_PADCONF(AM335X_PIN_MMC0_CMD, PIN_INPUT_PULLUP, MUX_MODE0) 90 90 AM33XX_PADCONF(AM335X_PIN_MMC0_CLK, PIN_INPUT_PULLUP, MUX_MODE0) 91 - AM33XX_PADCONF(AM335X_PIN_MCASP0_ACLKR, PIN_INPUT, MUX_MODE4) /* (B12) mcasp0_aclkr.mmc0_sdwp */ 92 91 >; 93 92 }; 94 93
+2 -4
arch/arm/boot/dts/am33xx-l4.dtsi
··· 1335 1335 ranges = <0x0 0x60000 0x1000>; 1336 1336 1337 1337 mmc1: mmc@0 { 1338 - compatible = "ti,omap4-hsmmc"; 1339 - ti,dual-volt; 1338 + compatible = "ti,am335-sdhci"; 1340 1339 ti,needs-special-reset; 1341 - ti,needs-special-hs-handling; 1342 1340 dmas = <&edma_xbar 24 0 0 1343 1341 &edma_xbar 25 0 0>; 1344 1342 dma-names = "tx", "rx"; ··· 1814 1816 ranges = <0x0 0xd8000 0x1000>; 1815 1817 1816 1818 mmc2: mmc@0 { 1817 - compatible = "ti,omap4-hsmmc"; 1819 + compatible = "ti,am335-sdhci"; 1818 1820 ti,needs-special-reset; 1819 1821 dmas = <&edma 2 0 1820 1822 &edma 3 0>;
+4 -3
arch/arm/boot/dts/am33xx.dtsi
··· 322 322 ranges = <0x0 0x47810000 0x1000>; 323 323 324 324 mmc3: mmc@0 { 325 - compatible = "ti,omap4-hsmmc"; 325 + compatible = "ti,am335-sdhci"; 326 326 ti,needs-special-reset; 327 327 interrupts = <29>; 328 328 reg = <0x0 0x1000>; 329 + status = "disabled"; 329 330 }; 330 331 }; 331 332 ··· 336 335 <0x47400010 0x4>; 337 336 reg-names = "rev", "sysc"; 338 337 ti,sysc-mask = <(SYSC_OMAP4_FREEEMU | 339 - SYSC_OMAP2_SOFTRESET)>; 338 + SYSC_OMAP4_SOFTRESET)>; 340 339 ti,sysc-midle = <SYSC_IDLE_FORCE>, 341 340 <SYSC_IDLE_NO>, 342 341 <SYSC_IDLE_SMART>; ··· 348 347 clock-names = "fck"; 349 348 #address-cells = <1>; 350 349 #size-cells = <1>; 351 - ranges = <0x0 0x47400000 0x5000>; 350 + ranges = <0x0 0x47400000 0x8000>; 352 351 353 352 usb0_phy: usb-phy@1300 { 354 353 compatible = "ti,am335x-usb-phy";
+2 -1
arch/arm/boot/dts/am4372.dtsi
··· 316 316 ranges = <0x0 0x47810000 0x1000>; 317 317 318 318 mmc3: mmc@0 { 319 - compatible = "ti,omap4-hsmmc"; 319 + compatible = "ti,am437-sdhci"; 320 320 ti,needs-special-reset; 321 321 interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>; 322 322 reg = <0x0 0x1000>; 323 + status = "disabled"; 323 324 }; 324 325 }; 325 326
+1 -1
arch/arm/boot/dts/am437x-cm-t43.dts
··· 291 291 pinctrl-0 = <&emmc_pins>; 292 292 vmmc-supply = <&vmmc_3v3>; 293 293 bus-width = <8>; 294 - ti,non-removable; 294 + non-removable; 295 295 }; 296 296 297 297 &spi0 {
+2 -18
arch/arm/boot/dts/am437x-gp-evm.dts
··· 91 91 92 92 backlight = <&lcd_bl>; 93 93 94 - panel-timing { 95 - clock-frequency = <33000000>; 96 - hactive = <800>; 97 - vactive = <480>; 98 - hfront-porch = <210>; 99 - hback-porch = <16>; 100 - hsync-len = <30>; 101 - vback-porch = <10>; 102 - vfront-porch = <22>; 103 - vsync-len = <13>; 104 - hsync-active = <0>; 105 - vsync-active = <0>; 106 - de-active = <1>; 107 - pixelclk-active = <1>; 108 - }; 109 - 110 94 port { 111 95 lcd_in: endpoint { 112 96 remote-endpoint = <&dpi_out>; ··· 853 869 pinctrl-names = "default", "sleep"; 854 870 pinctrl-0 = <&emmc_pins_default>; 855 871 pinctrl-1 = <&emmc_pins_sleep>; 856 - ti,non-removable; 872 + non-removable; 857 873 }; 858 874 859 875 &mmc3 { ··· 870 886 pinctrl-1 = <&mmc3_pins_sleep>; 871 887 cap-power-off-card; 872 888 keep-power-in-suspend; 873 - ti,non-removable; 889 + non-removable; 874 890 875 891 #address-cells = <1>; 876 892 #size-cells = <0>;
+2 -3
arch/arm/boot/dts/am437x-l4.dtsi
··· 1083 1083 ranges = <0x0 0x60000 0x1000>; 1084 1084 1085 1085 mmc1: mmc@0 { 1086 - compatible = "ti,omap4-hsmmc"; 1086 + compatible = "ti,am437-sdhci"; 1087 1087 reg = <0x0 0x1000>; 1088 - ti,dual-volt; 1089 1088 ti,needs-special-reset; 1090 1089 dmas = <&edma 24 0>, 1091 1090 <&edma 25 0>; ··· 1597 1598 ranges = <0x0 0xd8000 0x1000>; 1598 1599 1599 1600 mmc2: mmc@0 { 1600 - compatible = "ti,omap4-hsmmc"; 1601 + compatible = "ti,am437-sdhci"; 1601 1602 reg = <0x0 0x1000>; 1602 1603 ti,needs-special-reset; 1603 1604 dmas = <&edma 2 0>,
+1 -17
arch/arm/boot/dts/am437x-sk-evm.dts
··· 134 134 135 135 enable-gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>; 136 136 137 - panel-timing { 138 - clock-frequency = <9000000>; 139 - hactive = <480>; 140 - vactive = <272>; 141 - hfront-porch = <2>; 142 - hback-porch = <2>; 143 - hsync-len = <41>; 144 - vfront-porch = <2>; 145 - vback-porch = <2>; 146 - vsync-len = <10>; 147 - hsync-active = <0>; 148 - vsync-active = <0>; 149 - de-active = <1>; 150 - pixelclk-active = <1>; 151 - }; 152 - 153 137 port { 154 138 lcd_in: endpoint { 155 139 remote-endpoint = <&dpi_out>; ··· 703 719 pinctrl-1 = <&mmc3_pins_sleep>; 704 720 cap-power-off-card; 705 721 keep-power-in-suspend; 706 - ti,non-removable; 722 + non-removable; 707 723 708 724 #address-cells = <1>; 709 725 #size-cells = <0>;
-16
arch/arm/boot/dts/am43x-epos-evm.dts
··· 47 47 48 48 backlight = <&lcd_bl>; 49 49 50 - panel-timing { 51 - clock-frequency = <33000000>; 52 - hactive = <800>; 53 - vactive = <480>; 54 - hfront-porch = <210>; 55 - hback-porch = <16>; 56 - hsync-len = <30>; 57 - vback-porch = <10>; 58 - vfront-porch = <22>; 59 - vsync-len = <13>; 60 - hsync-active = <0>; 61 - vsync-active = <0>; 62 - de-active = <1>; 63 - pixelclk-active = <1>; 64 - }; 65 - 66 50 port { 67 51 lcd_in: endpoint { 68 52 remote-endpoint = <&dpi_out>;
+1 -1
arch/arm/boot/dts/am5729-beagleboneai.dts
··· 505 505 506 506 &cpsw_emac0 { 507 507 phy-handle = <&phy0>; 508 - phy-mode = "rgmii"; 508 + phy-mode = "rgmii-rxid"; 509 509 }; 510 510 511 511 &ocp {
-20
arch/arm/boot/dts/dra7-evm-common.dtsi
··· 245 245 rx-num-evt = <32>; 246 246 }; 247 247 248 - &mailbox5 { 249 - status = "okay"; 250 - mbox_ipu1_ipc3x: mbox_ipu1_ipc3x { 251 - status = "okay"; 252 - }; 253 - mbox_dsp1_ipc3x: mbox_dsp1_ipc3x { 254 - status = "okay"; 255 - }; 256 - }; 257 - 258 - &mailbox6 { 259 - status = "okay"; 260 - mbox_ipu2_ipc3x: mbox_ipu2_ipc3x { 261 - status = "okay"; 262 - }; 263 - mbox_dsp2_ipc3x: mbox_dsp2_ipc3x { 264 - status = "okay"; 265 - }; 266 - }; 267 - 268 248 &pcie1_rc { 269 249 status = "okay"; 270 250 };
+16 -18
arch/arm/boot/dts/dra7-l4.dtsi
··· 1207 1207 <SYSC_IDLE_SMART>, 1208 1208 <SYSC_IDLE_SMART_WKUP>; 1209 1209 /* Domains (P, C): l4per_pwrdm, l4per_clkdm */ 1210 - clocks = <&l4per_clkctrl DRA7_L4PER_TIMER4_CLKCTRL 0>, 1211 - <&timer_sys_clk_div>; 1212 - clock-names = "fck", "timer_sys_ck"; 1210 + clocks = <&l4per_clkctrl DRA7_L4PER_TIMER4_CLKCTRL 0>; 1211 + clock-names = "fck"; 1213 1212 #address-cells = <1>; 1214 1213 #size-cells = <1>; 1215 1214 ranges = <0x0 0x36000 0x1000>; ··· 3351 3352 <SYSC_IDLE_SMART>, 3352 3353 <SYSC_IDLE_SMART_WKUP>; 3353 3354 /* Domains (P, C): ipu_pwrdm, ipu_clkdm */ 3354 - clocks = <&ipu_clkctrl DRA7_IPU_TIMER5_CLKCTRL 0>, <&timer_sys_clk_div>; 3355 - clock-names = "fck", "timer_sys_ck"; 3355 + clocks = <&ipu_clkctrl DRA7_IPU_TIMER5_CLKCTRL 0>; 3356 + clock-names = "fck"; 3356 3357 #address-cells = <1>; 3357 3358 #size-cells = <1>; 3358 3359 ranges = <0x0 0x20000 0x1000>; ··· 3360 3361 timer5: timer@0 { 3361 3362 compatible = "ti,omap5430-timer"; 3362 3363 reg = <0x0 0x80>; 3363 - clocks = <&ipu_clkctrl DRA7_IPU_TIMER5_CLKCTRL 24>; 3364 - clock-names = "fck"; 3364 + clocks = <&ipu_clkctrl DRA7_IPU_TIMER5_CLKCTRL 24>, <&timer_sys_clk_div>; 3365 + clock-names = "fck", "timer_sys_ck"; 3365 3366 interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>; 3366 3367 }; 3367 3368 }; ··· 3378 3379 <SYSC_IDLE_SMART>, 3379 3380 <SYSC_IDLE_SMART_WKUP>; 3380 3381 /* Domains (P, C): ipu_pwrdm, ipu_clkdm */ 3381 - clocks = <&ipu_clkctrl DRA7_IPU_TIMER6_CLKCTRL 0>, 3382 - <&timer_sys_clk_div>; 3383 - clock-names = "fck", "timer_sys_ck"; 3382 + clocks = <&ipu_clkctrl DRA7_IPU_TIMER6_CLKCTRL 0>; 3383 + clock-names = "fck"; 3384 3384 #address-cells = <1>; 3385 3385 #size-cells = <1>; 3386 3386 ranges = <0x0 0x22000 0x1000>; ··· 3387 3389 timer6: timer@0 { 3388 3390 compatible = "ti,omap5430-timer"; 3389 3391 reg = <0x0 0x80>; 3390 - clocks = <&ipu_clkctrl DRA7_IPU_TIMER6_CLKCTRL 24>; 3391 - clock-names = "fck"; 3392 + clocks = <&ipu_clkctrl DRA7_IPU_TIMER6_CLKCTRL 24>, <&timer_sys_clk_div>; 3393 + clock-names = "fck", "timer_sys_ck"; 3392 3394 interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>; 3393 3395 }; 3394 3396 }; ··· 3496 3498 timer14: timer@0 { 3497 3499 compatible = "ti,omap5430-timer"; 3498 3500 reg = <0x0 0x80>; 3499 - clocks = <&l4per3_clkctrl DRA7_L4PER3_TIMER14_CLKCTRL 24>; 3500 - clock-names = "fck"; 3501 + clocks = <&l4per3_clkctrl DRA7_L4PER3_TIMER14_CLKCTRL 24>, <&timer_sys_clk_div>; 3502 + clock-names = "fck", "timer_sys_ck"; 3501 3503 interrupts = <GIC_SPI 340 IRQ_TYPE_LEVEL_HIGH>; 3502 3504 ti,timer-pwm; 3503 3505 }; ··· 3524 3526 timer15: timer@0 { 3525 3527 compatible = "ti,omap5430-timer"; 3526 3528 reg = <0x0 0x80>; 3527 - clocks = <&l4per3_clkctrl DRA7_L4PER3_TIMER15_CLKCTRL 24>; 3528 - clock-names = "fck"; 3529 + clocks = <&l4per3_clkctrl DRA7_L4PER3_TIMER15_CLKCTRL 24>, <&timer_sys_clk_div>; 3530 + clock-names = "fck", "timer_sys_ck"; 3529 3531 interrupts = <GIC_SPI 341 IRQ_TYPE_LEVEL_HIGH>; 3530 3532 ti,timer-pwm; 3531 3533 }; ··· 3552 3554 timer16: timer@0 { 3553 3555 compatible = "ti,omap5430-timer"; 3554 3556 reg = <0x0 0x80>; 3555 - clocks = <&l4per3_clkctrl DRA7_L4PER3_TIMER16_CLKCTRL 24>; 3556 - clock-names = "fck"; 3557 + clocks = <&l4per3_clkctrl DRA7_L4PER3_TIMER16_CLKCTRL 24>, <&timer_sys_clk_div>; 3558 + clock-names = "fck", "timer_sys_ck"; 3557 3559 interrupts = <GIC_SPI 342 IRQ_TYPE_LEVEL_HIGH>; 3558 3560 ti,timer-pwm; 3559 3561 };
+3 -1
arch/arm/boot/dts/motorola-cpcap-mapphone.dtsi
··· 13 13 #interrupt-cells = <2>; 14 14 #address-cells = <1>; 15 15 #size-cells = <0>; 16 - spi-max-frequency = <3000000>; 16 + spi-max-frequency = <9600000>; 17 17 spi-cs-high; 18 + spi-cpol; 19 + spi-cpha; 18 20 19 21 cpcap_adc: adc { 20 22 compatible = "motorola,mapphone-cpcap-adc";
+1 -1
arch/arm/boot/dts/omap4-duovero-parlor.dts
··· 139 139 ethernet@gpmc { 140 140 reg = <5 0 0xff>; 141 141 interrupt-parent = <&gpio2>; 142 - interrupts = <12 IRQ_TYPE_EDGE_FALLING>; /* gpio_44 */ 142 + interrupts = <12 IRQ_TYPE_LEVEL_LOW>; /* gpio_44 */ 143 143 144 144 phy-mode = "mii"; 145 145
+1 -1
arch/arm/boot/dts/omap4.dtsi
··· 662 662 ti,no-idle; 663 663 timer@0 { 664 664 assigned-clocks = <&l4_wkup_clkctrl OMAP4_TIMER1_CLKCTRL 24>; 665 - assigned-clock-parents = <&sys_clkin_ck>; 665 + assigned-clock-parents = <&sys_32k_ck>; 666 666 }; 667 667 };
+1 -1
arch/arm/mach-omap2/omap_hwmod.c
··· 3489 3489 }; 3490 3490 3491 3491 static const struct omap_hwmod_reset omap_reset_quirks[] = { 3492 - { .match = "dss", .len = 3, .reset = omap_dss_reset, }, 3492 + { .match = "dss_core", .len = 8, .reset = omap_dss_reset, }, 3493 3493 { .match = "hdq1w", .len = 5, .reset = omap_hdq1w_reset, }, 3494 3494 { .match = "i2c", .len = 3, .reset = omap_i2c_reset, }, 3495 3495 { .match = "wd_timer", .len = 8, .reset = omap2_wd_timer_reset, },
+74 -24
drivers/bus/ti-sysc.c
··· 221 221 return sysc_read(ddata, offset); 222 222 } 223 223 224 + /* Poll on reset status */ 225 + static int sysc_wait_softreset(struct sysc *ddata) 226 + { 227 + u32 sysc_mask, syss_done, rstval; 228 + int syss_offset, error = 0; 229 + 230 + syss_offset = ddata->offsets[SYSC_SYSSTATUS]; 231 + sysc_mask = BIT(ddata->cap->regbits->srst_shift); 232 + 233 + if (ddata->cfg.quirks & SYSS_QUIRK_RESETDONE_INVERTED) 234 + syss_done = 0; 235 + else 236 + syss_done = ddata->cfg.syss_mask; 237 + 238 + if (syss_offset >= 0) { 239 + error = readx_poll_timeout(sysc_read_sysstatus, ddata, rstval, 240 + (rstval & ddata->cfg.syss_mask) == 241 + syss_done, 242 + 100, MAX_MODULE_SOFTRESET_WAIT); 243 + 244 + } else if (ddata->cfg.quirks & SYSC_QUIRK_RESET_STATUS) { 245 + error = readx_poll_timeout(sysc_read_sysconfig, ddata, rstval, 246 + !(rstval & sysc_mask), 247 + 100, MAX_MODULE_SOFTRESET_WAIT); 248 + } 249 + 250 + return error; 251 + } 252 + 224 253 static int sysc_add_named_clock_from_child(struct sysc *ddata, 225 254 const char *name, 226 255 const char *optfck_name) ··· 954 925 struct sysc *ddata; 955 926 const struct sysc_regbits *regbits; 956 927 u32 reg, idlemodes, best_mode; 928 + int error; 957 929 958 930 ddata = dev_get_drvdata(dev); 931 + 932 + /* 933 + * Some modules like DSS reset automatically on idle. Enable optional 934 + * reset clocks and wait for OCP softreset to complete. 935 + */ 936 + if (ddata->cfg.quirks & SYSC_QUIRK_OPT_CLKS_IN_RESET) { 937 + error = sysc_enable_opt_clocks(ddata); 938 + if (error) { 939 + dev_err(ddata->dev, 940 + "Optional clocks failed for enable: %i\n", 941 + error); 942 + return error; 943 + } 944 + } 945 + error = sysc_wait_softreset(ddata); 946 + if (error) 947 + dev_warn(ddata->dev, "OCP softreset timed out\n"); 948 + if (ddata->cfg.quirks & SYSC_QUIRK_OPT_CLKS_IN_RESET) 949 + sysc_disable_opt_clocks(ddata); 950 + 951 + /* 952 + * Some subsystem private interconnects, like DSS top level module, 953 + * need only the automatic OCP softreset handling with no sysconfig 954 + * register bits to configure. 955 + */ 959 956 if (ddata->offsets[SYSC_SYSCONFIG] == -ENODEV) 960 957 return 0; 961 958 962 959 regbits = ddata->cap->regbits; 963 960 reg = sysc_read(ddata, ddata->offsets[SYSC_SYSCONFIG]); 964 961 965 - /* Set CLOCKACTIVITY, we only use it for ick */ 962 + /* 963 + * Set CLOCKACTIVITY, we only use it for ick. And we only configure it 964 + * based on the SYSC_QUIRK_USE_CLOCKACT flag, not based on the hardware 965 + * capabilities. See the old HWMOD_SET_DEFAULT_CLOCKACT flag. 966 + */ 966 967 if (regbits->clkact_shift >= 0 && 967 - (ddata->cfg.quirks & SYSC_QUIRK_USE_CLOCKACT || 968 - ddata->cfg.sysc_val & BIT(regbits->clkact_shift))) 968 + (ddata->cfg.quirks & SYSC_QUIRK_USE_CLOCKACT)) 969 969 reg |= SYSC_CLOCACT_ICK << regbits->clkact_shift; 970 970 971 971 /* Set SIDLE mode */ ··· 1048 990 reg |= 1 << regbits->autoidle_shift; 1049 991 sysc_write_sysconfig(ddata, reg); 1050 992 } 993 + 994 + /* Flush posted write */ 995 + sysc_read(ddata, ddata->offsets[SYSC_SYSCONFIG]); 1051 996 1052 997 if (ddata->module_enable_quirk) 1053 998 ddata->module_enable_quirk(ddata); ··· 1131 1070 ddata->cfg.sysc_val & BIT(regbits->autoidle_shift)) 1132 1071 reg |= 1 << regbits->autoidle_shift; 1133 1072 sysc_write_sysconfig(ddata, reg); 1073 + 1074 + /* Flush posted write */ 1075 + sysc_read(ddata, ddata->offsets[SYSC_SYSCONFIG]); 1134 1076 1135 1077 return 0; 1136 1078 } ··· 1552 1488 bool lcd_en, digit_en, lcd2_en = false, lcd3_en = false; 1553 1489 const int lcd_en_mask = BIT(0), digit_en_mask = BIT(1); 1554 1490 int manager_count; 1555 - bool framedonetv_irq; 1491 + bool framedonetv_irq = true; 1556 1492 u32 val, irq_mask = 0; 1557 1493 1558 1494 switch (sysc_soc->soc) { ··· 1569 1505 break; 1570 1506 case SOC_AM4: 1571 1507 manager_count = 1; 1508 + framedonetv_irq = false; 1572 1509 break; 1573 1510 case SOC_UNKNOWN: 1574 1511 default: ··· 1887 1822 */ 1888 1823 static int sysc_reset(struct sysc *ddata) 1889 1824 { 1890 - int sysc_offset, syss_offset, sysc_val, rstval, error = 0; 1891 - u32 sysc_mask, syss_done; 1825 + int sysc_offset, sysc_val, error; 1826 + u32 sysc_mask; 1892 1827 1893 1828 sysc_offset = ddata->offsets[SYSC_SYSCONFIG]; 1894 - syss_offset = ddata->offsets[SYSC_SYSSTATUS]; 1895 1829 1896 1830 if (ddata->legacy_mode || 1897 1831 ddata->cap->regbits->srst_shift < 0 || ··· 1898 1834 return 0; 1899 1835 1900 1836 sysc_mask = BIT(ddata->cap->regbits->srst_shift); 1901 - 1902 - if (ddata->cfg.quirks & SYSS_QUIRK_RESETDONE_INVERTED) 1903 - syss_done = 0; 1904 - else 1905 - syss_done = ddata->cfg.syss_mask; 1906 1837 1907 1838 if (ddata->pre_reset_quirk) 1908 1839 ddata->pre_reset_quirk(ddata); ··· 1915 1856 if (ddata->post_reset_quirk) 1916 1857 ddata->post_reset_quirk(ddata); 1917 1858 1918 - /* Poll on reset status */ 1919 - if (syss_offset >= 0) { 1920 - error = readx_poll_timeout(sysc_read_sysstatus, ddata, rstval, 1921 - (rstval & ddata->cfg.syss_mask) == 1922 - syss_done, 1923 - 100, MAX_MODULE_SOFTRESET_WAIT); 1924 - 1925 - } else if (ddata->cfg.quirks & SYSC_QUIRK_RESET_STATUS) { 1926 - error = readx_poll_timeout(sysc_read_sysconfig, ddata, rstval, 1927 - !(rstval & sysc_mask), 1928 - 100, MAX_MODULE_SOFTRESET_WAIT); 1929 - } 1859 + error = sysc_wait_softreset(ddata); 1860 + if (error) 1861 + dev_warn(ddata->dev, "OCP softreset timed out\n"); 1930 1862 1931 1863 if (ddata->reset_done_quirk) 1932 1864 ddata->reset_done_quirk(ddata);
+4 -4
drivers/soc/ti/omap_prm.c
··· 256 256 goto exit; 257 257 258 258 /* wait for the status to be set */ 259 - ret = readl_relaxed_poll_timeout(reset->prm->base + 260 - reset->prm->data->rstst, 261 - v, v & BIT(st_bit), 1, 262 - OMAP_RESET_MAX_WAIT); 259 + ret = readl_relaxed_poll_timeout_atomic(reset->prm->base + 260 + reset->prm->data->rstst, 261 + v, v & BIT(st_bit), 1, 262 + OMAP_RESET_MAX_WAIT); 263 263 if (ret) 264 264 pr_err("%s: timedout waiting for %s:%lu\n", __func__, 265 265 reset->prm->data->name, id);