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

Merge tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc

Pull ARM SoC fixes from Arnd Bergmann:
"The majority of the fixes this time are for OMAP hardware, here is a
breakdown of the significant changes:

Various device tree bug fixes:
- TI am57xx boards need a voltage level fix to avoid damaging SD
cards
- vf610-bk4 fails to detect its flash due to an incorrect description
- meson-g12a USB phy configuration fails
- meson-g12b reboot should not power off the SD card
- Some corrections for apparently harmless differences from the
documentation.

Regression fixes:
- ams-delta FIQ interrupts broke in 5.3
- TI am3/am4 mmc controllers broke in 5.2

The logic_pio driver (used on some Huawei ARM servers) got a few bug
fixes for reliability.

And a couple of compile-time warning fixes"

* tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (26 commits)
soc: ixp4xx: Protect IXP4xx SoC drivers by ARCH_IXP4XX || COMPILE_TEST
soc: ti: pm33xx: Make two symbols static
soc: ti: pm33xx: Fix static checker warnings
ARM: OMAP: dma: Mark expected switch fall-throughs
ARM: dts: Fix incomplete dts data for am3 and am4 mmc
bus: ti-sysc: Simplify cleanup upon failures in sysc_probe()
ARM: OMAP1: ams-delta-fiq: Fix missing irq_ack
ARM: dts: dra74x: Fix iodelay configuration for mmc3
ARM: dts: am335x: Fix UARTs length
ARM: OMAP2+: Fix omap4 errata warning on other SoCs
bus: hisi_lpc: Add .remove method to avoid driver unbind crash
bus: hisi_lpc: Unregister logical PIO range to avoid potential use-after-free
lib: logic_pio: Add logic_pio_unregister_range()
lib: logic_pio: Avoid possible overlap for unregistering regions
lib: logic_pio: Fix RCU usage
arm64: dts: amlogic: odroid-n2: keep SD card regulator always on
arm64: dts: meson-g12a-sei510: enable IR controller
arm64: dts: meson-g12a: add missing dwc2 phy-names
ARM: dts: vf610-bk4: Fix qspi node description
ARM: dts: Fix incorrect dcan register mapping for am3, am4 and dra7
...

+250 -135
+2
.mailmap
··· 160 160 Matt Ranostay <mranostay@gmail.com> <matt.ranostay@intel.com> 161 161 Matt Ranostay <matt.ranostay@konsulko.com> <matt@ranostay.consulting> 162 162 Matt Redfearn <matt.redfearn@mips.com> <matt.redfearn@imgtec.com> 163 + Maxime Ripard <mripard@kernel.org> <maxime.ripard@bootlin.com> 164 + Maxime Ripard <mripard@kernel.org> <maxime.ripard@free-electrons.com> 163 165 Mayuresh Janorkar <mayur@ti.com> 164 166 Michael Buesch <m@bues.ch> 165 167 Michel Dänzer <michel@tungstengraphics.com>
+5 -5
MAINTAINERS
··· 683 683 F: drivers/crypto/sunxi-ss/ 684 684 685 685 ALLWINNER VPU DRIVER 686 - M: Maxime Ripard <maxime.ripard@bootlin.com> 686 + M: Maxime Ripard <mripard@kernel.org> 687 687 M: Paul Kocialkowski <paul.kocialkowski@bootlin.com> 688 688 L: linux-media@vger.kernel.org 689 689 S: Maintained ··· 1408 1408 F: drivers/clk/sunxi/ 1409 1409 1410 1410 ARM/Allwinner sunXi SoC support 1411 - M: Maxime Ripard <maxime.ripard@bootlin.com> 1411 + M: Maxime Ripard <mripard@kernel.org> 1412 1412 M: Chen-Yu Tsai <wens@csie.org> 1413 1413 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 1414 1414 S: Maintained ··· 3577 3577 F: fs/cachefiles/ 3578 3578 3579 3579 CADENCE MIPI-CSI2 BRIDGES 3580 - M: Maxime Ripard <maxime.ripard@bootlin.com> 3580 + M: Maxime Ripard <mripard@kernel.org> 3581 3581 L: linux-media@vger.kernel.org 3582 3582 S: Maintained 3583 3583 F: Documentation/devicetree/bindings/media/cdns,*.txt ··· 5295 5295 5296 5296 DRM DRIVERS AND MISC GPU PATCHES 5297 5297 M: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> 5298 - M: Maxime Ripard <maxime.ripard@bootlin.com> 5298 + M: Maxime Ripard <mripard@kernel.org> 5299 5299 M: Sean Paul <sean@poorly.run> 5300 5300 W: https://01.org/linuxgraphics/gfx-docs/maintainer-tools/drm-misc.html 5301 5301 S: Maintained ··· 5308 5308 F: include/linux/vga* 5309 5309 5310 5310 DRM DRIVERS FOR ALLWINNER A10 5311 - M: Maxime Ripard <maxime.ripard@bootlin.com> 5311 + M: Maxime Ripard <mripard@kernel.org> 5312 5312 L: dri-devel@lists.freedesktop.org 5313 5313 S: Supported 5314 5314 F: drivers/gpu/drm/sun4i/
+10 -6
arch/arm/boot/dts/am33xx-l4.dtsi
··· 185 185 uart0: serial@0 { 186 186 compatible = "ti,am3352-uart", "ti,omap3-uart"; 187 187 clock-frequency = <48000000>; 188 - reg = <0x0 0x2000>; 188 + reg = <0x0 0x1000>; 189 189 interrupts = <72>; 190 190 status = "disabled"; 191 191 dmas = <&edma 26 0>, <&edma 27 0>; ··· 934 934 uart1: serial@0 { 935 935 compatible = "ti,am3352-uart", "ti,omap3-uart"; 936 936 clock-frequency = <48000000>; 937 - reg = <0x0 0x2000>; 937 + reg = <0x0 0x1000>; 938 938 interrupts = <73>; 939 939 status = "disabled"; 940 940 dmas = <&edma 28 0>, <&edma 29 0>; ··· 966 966 uart2: serial@0 { 967 967 compatible = "ti,am3352-uart", "ti,omap3-uart"; 968 968 clock-frequency = <48000000>; 969 - reg = <0x0 0x2000>; 969 + reg = <0x0 0x1000>; 970 970 interrupts = <74>; 971 971 status = "disabled"; 972 972 dmas = <&edma 30 0>, <&edma 31 0>; ··· 1614 1614 uart3: serial@0 { 1615 1615 compatible = "ti,am3352-uart", "ti,omap3-uart"; 1616 1616 clock-frequency = <48000000>; 1617 - reg = <0x0 0x2000>; 1617 + reg = <0x0 0x1000>; 1618 1618 interrupts = <44>; 1619 1619 status = "disabled"; 1620 1620 }; ··· 1644 1644 uart4: serial@0 { 1645 1645 compatible = "ti,am3352-uart", "ti,omap3-uart"; 1646 1646 clock-frequency = <48000000>; 1647 - reg = <0x0 0x2000>; 1647 + reg = <0x0 0x1000>; 1648 1648 interrupts = <45>; 1649 1649 status = "disabled"; 1650 1650 }; ··· 1674 1674 uart5: serial@0 { 1675 1675 compatible = "ti,am3352-uart", "ti,omap3-uart"; 1676 1676 clock-frequency = <48000000>; 1677 - reg = <0x0 0x2000>; 1677 + reg = <0x0 0x1000>; 1678 1678 interrupts = <46>; 1679 1679 status = "disabled"; 1680 1680 }; ··· 1758 1758 1759 1759 target-module@cc000 { /* 0x481cc000, ap 60 46.0 */ 1760 1760 compatible = "ti,sysc-omap4", "ti,sysc"; 1761 + reg = <0xcc020 0x4>; 1762 + reg-names = "rev"; 1761 1763 ti,hwmods = "d_can0"; 1762 1764 /* Domains (P, C): per_pwrdm, l4ls_clkdm */ 1763 1765 clocks = <&l4ls_clkctrl AM3_L4LS_D_CAN0_CLKCTRL 0>, ··· 1782 1780 1783 1781 target-module@d0000 { /* 0x481d0000, ap 62 42.0 */ 1784 1782 compatible = "ti,sysc-omap4", "ti,sysc"; 1783 + reg = <0xd0020 0x4>; 1784 + reg-names = "rev"; 1785 1785 ti,hwmods = "d_can1"; 1786 1786 /* Domains (P, C): per_pwrdm, l4ls_clkdm */ 1787 1787 clocks = <&l4ls_clkctrl AM3_L4LS_D_CAN1_CLKCTRL 0>,
+26 -6
arch/arm/boot/dts/am33xx.dtsi
··· 234 234 interrupt-names = "edma3_tcerrint"; 235 235 }; 236 236 237 - mmc3: mmc@47810000 { 238 - compatible = "ti,omap4-hsmmc"; 237 + target-module@47810000 { 238 + compatible = "ti,sysc-omap2", "ti,sysc"; 239 239 ti,hwmods = "mmc3"; 240 - ti,needs-special-reset; 241 - interrupts = <29>; 242 - reg = <0x47810000 0x1000>; 243 - status = "disabled"; 240 + reg = <0x478102fc 0x4>, 241 + <0x47810110 0x4>, 242 + <0x47810114 0x4>; 243 + reg-names = "rev", "sysc", "syss"; 244 + ti,sysc-mask = <(SYSC_OMAP2_CLOCKACTIVITY | 245 + SYSC_OMAP2_ENAWAKEUP | 246 + SYSC_OMAP2_SOFTRESET | 247 + SYSC_OMAP2_AUTOIDLE)>; 248 + ti,sysc-sidle = <SYSC_IDLE_FORCE>, 249 + <SYSC_IDLE_NO>, 250 + <SYSC_IDLE_SMART>; 251 + ti,syss-mask = <1>; 252 + clocks = <&l3s_clkctrl AM3_L3S_MMC3_CLKCTRL 0>; 253 + clock-names = "fck"; 254 + #address-cells = <1>; 255 + #size-cells = <1>; 256 + ranges = <0x0 0x47810000 0x1000>; 257 + 258 + mmc3: mmc@0 { 259 + compatible = "ti,omap4-hsmmc"; 260 + ti,needs-special-reset; 261 + interrupts = <29>; 262 + reg = <0x0 0x1000>; 263 + }; 244 264 }; 245 265 246 266 usb: usb@47400000 {
+26 -6
arch/arm/boot/dts/am4372.dtsi
··· 228 228 interrupt-names = "edma3_tcerrint"; 229 229 }; 230 230 231 - mmc3: mmc@47810000 { 232 - compatible = "ti,omap4-hsmmc"; 233 - reg = <0x47810000 0x1000>; 231 + target-module@47810000 { 232 + compatible = "ti,sysc-omap2", "ti,sysc"; 234 233 ti,hwmods = "mmc3"; 235 - ti,needs-special-reset; 236 - interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>; 237 - status = "disabled"; 234 + reg = <0x478102fc 0x4>, 235 + <0x47810110 0x4>, 236 + <0x47810114 0x4>; 237 + reg-names = "rev", "sysc", "syss"; 238 + ti,sysc-mask = <(SYSC_OMAP2_CLOCKACTIVITY | 239 + SYSC_OMAP2_ENAWAKEUP | 240 + SYSC_OMAP2_SOFTRESET | 241 + SYSC_OMAP2_AUTOIDLE)>; 242 + ti,sysc-sidle = <SYSC_IDLE_FORCE>, 243 + <SYSC_IDLE_NO>, 244 + <SYSC_IDLE_SMART>; 245 + ti,syss-mask = <1>; 246 + clocks = <&l3s_clkctrl AM4_L3S_MMC3_CLKCTRL 0>; 247 + clock-names = "fck"; 248 + #address-cells = <1>; 249 + #size-cells = <1>; 250 + ranges = <0x0 0x47810000 0x1000>; 251 + 252 + mmc3: mmc@0 { 253 + compatible = "ti,omap4-hsmmc"; 254 + ti,needs-special-reset; 255 + interrupts = <GIC_SPI 29 IRQ_TYPE_LEVEL_HIGH>; 256 + reg = <0x0 0x1000>; 257 + }; 238 258 }; 239 259 240 260 sham: sham@53100000 {
+4
arch/arm/boot/dts/am437x-l4.dtsi
··· 1574 1574 1575 1575 target-module@cc000 { /* 0x481cc000, ap 50 46.0 */ 1576 1576 compatible = "ti,sysc-omap4", "ti,sysc"; 1577 + reg = <0xcc020 0x4>; 1578 + reg-names = "rev"; 1577 1579 ti,hwmods = "d_can0"; 1578 1580 /* Domains (P, C): per_pwrdm, l4ls_clkdm */ 1579 1581 clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN0_CLKCTRL 0>; ··· 1595 1593 1596 1594 target-module@d0000 { /* 0x481d0000, ap 52 3a.0 */ 1597 1595 compatible = "ti,sysc-omap4", "ti,sysc"; 1596 + reg = <0xd0020 0x4>; 1597 + reg-names = "rev"; 1598 1598 ti,hwmods = "d_can1"; 1599 1599 /* Domains (P, C): per_pwrdm, l4ls_clkdm */ 1600 1600 clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN1_CLKCTRL 0>;
+1 -6
arch/arm/boot/dts/am571x-idk.dts
··· 175 175 }; 176 176 177 177 &mmc1 { 178 - pinctrl-names = "default", "hs", "sdr12", "sdr25", "sdr50", "ddr50", "sdr104"; 178 + pinctrl-names = "default", "hs"; 179 179 pinctrl-0 = <&mmc1_pins_default_no_clk_pu>; 180 180 pinctrl-1 = <&mmc1_pins_hs>; 181 - pinctrl-2 = <&mmc1_pins_sdr12>; 182 - pinctrl-3 = <&mmc1_pins_sdr25>; 183 - pinctrl-4 = <&mmc1_pins_sdr50>; 184 - pinctrl-5 = <&mmc1_pins_ddr50_rev20 &mmc1_iodelay_ddr50_conf>; 185 - pinctrl-6 = <&mmc1_pins_sdr104 &mmc1_iodelay_sdr104_rev20_conf>; 186 181 }; 187 182 188 183 &mmc2 {
+1 -6
arch/arm/boot/dts/am572x-idk.dts
··· 16 16 }; 17 17 18 18 &mmc1 { 19 - pinctrl-names = "default", "hs", "sdr12", "sdr25", "sdr50", "ddr50", "sdr104"; 19 + pinctrl-names = "default", "hs"; 20 20 pinctrl-0 = <&mmc1_pins_default_no_clk_pu>; 21 21 pinctrl-1 = <&mmc1_pins_hs>; 22 - pinctrl-2 = <&mmc1_pins_sdr12>; 23 - pinctrl-3 = <&mmc1_pins_sdr25>; 24 - pinctrl-4 = <&mmc1_pins_sdr50>; 25 - pinctrl-5 = <&mmc1_pins_ddr50 &mmc1_iodelay_ddr_rev20_conf>; 26 - pinctrl-6 = <&mmc1_pins_sdr104 &mmc1_iodelay_sdr104_rev20_conf>; 27 22 }; 28 23 29 24 &mmc2 {
+1 -6
arch/arm/boot/dts/am574x-idk.dts
··· 24 24 }; 25 25 26 26 &mmc1 { 27 - pinctrl-names = "default", "hs", "sdr12", "sdr25", "sdr50", "ddr50", "sdr104"; 27 + pinctrl-names = "default", "hs"; 28 28 pinctrl-0 = <&mmc1_pins_default_no_clk_pu>; 29 29 pinctrl-1 = <&mmc1_pins_hs>; 30 - pinctrl-2 = <&mmc1_pins_default>; 31 - pinctrl-3 = <&mmc1_pins_hs>; 32 - pinctrl-4 = <&mmc1_pins_sdr50>; 33 - pinctrl-5 = <&mmc1_pins_ddr50 &mmc1_iodelay_ddr_conf>; 34 - pinctrl-6 = <&mmc1_pins_ddr50 &mmc1_iodelay_sdr104_conf>; 35 30 }; 36 31 37 32 &mmc2 {
+2 -1
arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi
··· 379 379 }; 380 380 }; 381 381 382 - &gpio7 { 382 + &gpio7_target { 383 383 ti,no-reset-on-init; 384 384 ti,no-idle-on-init; 385 385 }; ··· 430 430 431 431 bus-width = <4>; 432 432 cd-gpios = <&gpio6 27 GPIO_ACTIVE_LOW>; /* gpio 219 */ 433 + no-1-8-v; 433 434 }; 434 435 435 436 &mmc2 {
+1 -6
arch/arm/boot/dts/am57xx-beagle-x15-revb1.dts
··· 16 16 }; 17 17 18 18 &mmc1 { 19 - pinctrl-names = "default", "hs", "sdr12", "sdr25", "sdr50", "ddr50", "sdr104"; 19 + pinctrl-names = "default", "hs"; 20 20 pinctrl-0 = <&mmc1_pins_default>; 21 21 pinctrl-1 = <&mmc1_pins_hs>; 22 - pinctrl-2 = <&mmc1_pins_sdr12>; 23 - pinctrl-3 = <&mmc1_pins_sdr25>; 24 - pinctrl-4 = <&mmc1_pins_sdr50>; 25 - pinctrl-5 = <&mmc1_pins_ddr50 &mmc1_iodelay_ddr_rev11_conf>; 26 - pinctrl-6 = <&mmc1_pins_sdr104 &mmc1_iodelay_sdr104_rev11_conf>; 27 22 vmmc-supply = <&vdd_3v3>; 28 23 vqmmc-supply = <&ldo1_reg>; 29 24 };
+1 -6
arch/arm/boot/dts/am57xx-beagle-x15-revc.dts
··· 16 16 }; 17 17 18 18 &mmc1 { 19 - pinctrl-names = "default", "hs", "sdr12", "sdr25", "sdr50", "ddr50", "sdr104"; 19 + pinctrl-names = "default", "hs"; 20 20 pinctrl-0 = <&mmc1_pins_default>; 21 21 pinctrl-1 = <&mmc1_pins_hs>; 22 - pinctrl-2 = <&mmc1_pins_sdr12>; 23 - pinctrl-3 = <&mmc1_pins_sdr25>; 24 - pinctrl-4 = <&mmc1_pins_sdr50>; 25 - pinctrl-5 = <&mmc1_pins_ddr50 &mmc1_iodelay_ddr_rev20_conf>; 26 - pinctrl-6 = <&mmc1_pins_sdr104 &mmc1_iodelay_sdr104_rev20_conf>; 27 22 vmmc-supply = <&vdd_3v3>; 28 23 vqmmc-supply = <&ldo1_reg>; 29 24 };
+1 -1
arch/arm/boot/dts/dra7-evm.dts
··· 498 498 phy-supply = <&ldousb_reg>; 499 499 }; 500 500 501 - &gpio7 { 501 + &gpio7_target { 502 502 ti,no-reset-on-init; 503 503 ti,no-idle-on-init; 504 504 };
+3 -3
arch/arm/boot/dts/dra7-l4.dtsi
··· 1261 1261 }; 1262 1262 }; 1263 1263 1264 - target-module@51000 { /* 0x48051000, ap 45 2e.0 */ 1264 + gpio7_target: target-module@51000 { /* 0x48051000, ap 45 2e.0 */ 1265 1265 compatible = "ti,sysc-omap2", "ti,sysc"; 1266 1266 ti,hwmods = "gpio7"; 1267 1267 reg = <0x51000 0x4>, ··· 3025 3025 3026 3026 target-module@80000 { /* 0x48480000, ap 31 16.0 */ 3027 3027 compatible = "ti,sysc-omap4", "ti,sysc"; 3028 - reg = <0x80000 0x4>; 3028 + reg = <0x80020 0x4>; 3029 3029 reg-names = "rev"; 3030 3030 clocks = <&l4per2_clkctrl DRA7_L4PER2_DCAN2_CLKCTRL 0>; 3031 3031 clock-names = "fck"; ··· 4577 4577 4578 4578 target-module@c000 { /* 0x4ae3c000, ap 30 04.0 */ 4579 4579 compatible = "ti,sysc-omap4", "ti,sysc"; 4580 - reg = <0xc000 0x4>; 4580 + reg = <0xc020 0x4>; 4581 4581 reg-names = "rev"; 4582 4582 clocks = <&wkupaon_clkctrl DRA7_WKUPAON_DCAN1_CLKCTRL 0>; 4583 4583 clock-names = "fck";
+25 -25
arch/arm/boot/dts/dra74x-mmc-iodelay.dtsi
··· 32 32 * 33 33 * Datamanual Revisions: 34 34 * 35 - * AM572x Silicon Revision 2.0: SPRS953B, Revised November 2016 35 + * AM572x Silicon Revision 2.0: SPRS953F, Revised May 2019 36 36 * AM572x Silicon Revision 1.1: SPRS915R, Revised November 2016 37 37 * 38 38 */ ··· 229 229 230 230 mmc3_pins_default: mmc3_pins_default { 231 231 pinctrl-single,pins = < 232 - DRA7XX_CORE_IOPAD(0x377c, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_clk.mmc3_clk */ 233 - DRA7XX_CORE_IOPAD(0x3780, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_cmd.mmc3_cmd */ 234 - DRA7XX_CORE_IOPAD(0x3784, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_dat0.mmc3_dat0 */ 235 - DRA7XX_CORE_IOPAD(0x3788, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_dat1.mmc3_dat1 */ 236 - DRA7XX_CORE_IOPAD(0x378c, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_dat2.mmc3_dat2 */ 237 - DRA7XX_CORE_IOPAD(0x3790, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_dat3.mmc3_dat3 */ 232 + DRA7XX_CORE_IOPAD(0x377c, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_clk.mmc3_clk */ 233 + DRA7XX_CORE_IOPAD(0x3780, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_cmd.mmc3_cmd */ 234 + DRA7XX_CORE_IOPAD(0x3784, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_dat0.mmc3_dat0 */ 235 + DRA7XX_CORE_IOPAD(0x3788, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_dat1.mmc3_dat1 */ 236 + DRA7XX_CORE_IOPAD(0x378c, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_dat2.mmc3_dat2 */ 237 + DRA7XX_CORE_IOPAD(0x3790, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_dat3.mmc3_dat3 */ 238 238 >; 239 239 }; 240 240 241 241 mmc3_pins_hs: mmc3_pins_hs { 242 242 pinctrl-single,pins = < 243 - DRA7XX_CORE_IOPAD(0x377c, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_clk.mmc3_clk */ 244 - DRA7XX_CORE_IOPAD(0x3780, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_cmd.mmc3_cmd */ 245 - DRA7XX_CORE_IOPAD(0x3784, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_dat0.mmc3_dat0 */ 246 - DRA7XX_CORE_IOPAD(0x3788, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_dat1.mmc3_dat1 */ 247 - DRA7XX_CORE_IOPAD(0x378c, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_dat2.mmc3_dat2 */ 248 - DRA7XX_CORE_IOPAD(0x3790, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_dat3.mmc3_dat3 */ 243 + DRA7XX_CORE_IOPAD(0x377c, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_clk.mmc3_clk */ 244 + DRA7XX_CORE_IOPAD(0x3780, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_cmd.mmc3_cmd */ 245 + DRA7XX_CORE_IOPAD(0x3784, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_dat0.mmc3_dat0 */ 246 + DRA7XX_CORE_IOPAD(0x3788, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_dat1.mmc3_dat1 */ 247 + DRA7XX_CORE_IOPAD(0x378c, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_dat2.mmc3_dat2 */ 248 + DRA7XX_CORE_IOPAD(0x3790, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_dat3.mmc3_dat3 */ 249 249 >; 250 250 }; 251 251 252 252 mmc3_pins_sdr12: mmc3_pins_sdr12 { 253 253 pinctrl-single,pins = < 254 - DRA7XX_CORE_IOPAD(0x377c, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_clk.mmc3_clk */ 255 - DRA7XX_CORE_IOPAD(0x3780, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_cmd.mmc3_cmd */ 256 - DRA7XX_CORE_IOPAD(0x3784, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_dat0.mmc3_dat0 */ 257 - DRA7XX_CORE_IOPAD(0x3788, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_dat1.mmc3_dat1 */ 258 - DRA7XX_CORE_IOPAD(0x378c, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_dat2.mmc3_dat2 */ 259 - DRA7XX_CORE_IOPAD(0x3790, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_dat3.mmc3_dat3 */ 254 + DRA7XX_CORE_IOPAD(0x377c, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_clk.mmc3_clk */ 255 + DRA7XX_CORE_IOPAD(0x3780, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_cmd.mmc3_cmd */ 256 + DRA7XX_CORE_IOPAD(0x3784, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_dat0.mmc3_dat0 */ 257 + DRA7XX_CORE_IOPAD(0x3788, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_dat1.mmc3_dat1 */ 258 + DRA7XX_CORE_IOPAD(0x378c, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_dat2.mmc3_dat2 */ 259 + DRA7XX_CORE_IOPAD(0x3790, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_dat3.mmc3_dat3 */ 260 260 >; 261 261 }; 262 262 263 263 mmc3_pins_sdr25: mmc3_pins_sdr25 { 264 264 pinctrl-single,pins = < 265 - DRA7XX_CORE_IOPAD(0x377c, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_clk.mmc3_clk */ 266 - DRA7XX_CORE_IOPAD(0x3780, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_cmd.mmc3_cmd */ 267 - DRA7XX_CORE_IOPAD(0x3784, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_dat0.mmc3_dat0 */ 268 - DRA7XX_CORE_IOPAD(0x3788, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_dat1.mmc3_dat1 */ 269 - DRA7XX_CORE_IOPAD(0x378c, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_dat2.mmc3_dat2 */ 270 - DRA7XX_CORE_IOPAD(0x3790, (PIN_INPUT_PULLUP | MUX_MODE0)) /* mmc3_dat3.mmc3_dat3 */ 265 + DRA7XX_CORE_IOPAD(0x377c, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_clk.mmc3_clk */ 266 + DRA7XX_CORE_IOPAD(0x3780, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_cmd.mmc3_cmd */ 267 + DRA7XX_CORE_IOPAD(0x3784, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_dat0.mmc3_dat0 */ 268 + DRA7XX_CORE_IOPAD(0x3788, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_dat1.mmc3_dat1 */ 269 + DRA7XX_CORE_IOPAD(0x378c, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_dat2.mmc3_dat2 */ 270 + DRA7XX_CORE_IOPAD(0x3790, (PIN_INPUT_PULLUP | MODE_SELECT | MUX_MODE0)) /* mmc3_dat3.mmc3_dat3 */ 271 271 >; 272 272 }; 273 273
+2 -2
arch/arm/boot/dts/vf610-bk4.dts
··· 246 246 reg = <0>; 247 247 }; 248 248 249 - n25q128a13_2: flash@1 { 249 + n25q128a13_2: flash@2 { 250 250 compatible = "n25q128a13", "jedec,spi-nor"; 251 251 #address-cells = <1>; 252 252 #size-cells = <1>; 253 253 spi-max-frequency = <66000000>; 254 254 spi-rx-bus-width = <2>; 255 - reg = <1>; 255 + reg = <2>; 256 256 }; 257 257 }; 258 258
+2 -1
arch/arm/mach-omap1/ams-delta-fiq-handler.S
··· 126 126 orr r11, r11, r13 @ mask all requested interrupts 127 127 str r11, [r12, #OMAP1510_GPIO_INT_MASK] 128 128 129 + str r13, [r12, #OMAP1510_GPIO_INT_STATUS] @ ack all requested interrupts 130 + 129 131 ands r10, r13, #KEYBRD_CLK_MASK @ extract keyboard status - set? 130 132 beq hksw @ no - try next source 131 133 ··· 135 133 @@@@@@@@@@@@@@@@@@@@@@ 136 134 @ Keyboard clock FIQ mode interrupt handler 137 135 @ r10 now contains KEYBRD_CLK_MASK, use it 138 - str r10, [r12, #OMAP1510_GPIO_INT_STATUS] @ ack the interrupt 139 136 bic r11, r11, r10 @ unmask it 140 137 str r11, [r12, #OMAP1510_GPIO_INT_MASK] 141 138
+1 -3
arch/arm/mach-omap1/ams-delta-fiq.c
··· 70 70 * interrupts default to since commit 80ac93c27441 71 71 * requires interrupt already acked and unmasked. 72 72 */ 73 - if (irq_chip->irq_ack) 74 - irq_chip->irq_ack(d); 75 - if (irq_chip->irq_unmask) 73 + if (!WARN_ON_ONCE(!irq_chip->irq_unmask)) 76 74 irq_chip->irq_unmask(d); 77 75 } 78 76 for (; irq_counter[gpio] < fiq_count; irq_counter[gpio]++)
+3
arch/arm/mach-omap2/omap4-common.c
··· 127 127 struct device_node *np; 128 128 struct gen_pool *sram_pool; 129 129 130 + if (!soc_is_omap44xx() && !soc_is_omap54xx()) 131 + return 0; 132 + 130 133 np = of_find_compatible_node(NULL, NULL, "ti,omap4-mpu"); 131 134 if (!np) 132 135 pr_warn("%s:Unable to allocate sram needed to handle errata I688\n",
+2 -1
arch/arm/mach-omap2/omap_hwmod_7xx_data.c
··· 379 379 static struct omap_hwmod_class_sysconfig dra7xx_epwmss_sysc = { 380 380 .rev_offs = 0x0, 381 381 .sysc_offs = 0x4, 382 - .sysc_flags = SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET, 382 + .sysc_flags = SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET | 383 + SYSC_HAS_RESET_STATUS, 383 384 .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART), 384 385 .sysc_fields = &omap_hwmod_sysc_type2, 385 386 };
+6
arch/arm64/boot/dts/amlogic/meson-g12a-sei510.dts
··· 339 339 pinctrl-names = "default"; 340 340 }; 341 341 342 + &ir { 343 + status = "okay"; 344 + pinctrl-0 = <&remote_input_ao_pins>; 345 + pinctrl-names = "default"; 346 + }; 347 + 342 348 &pwm_ef { 343 349 status = "okay"; 344 350 pinctrl-0 = <&pwm_e_pins>;
+1
arch/arm64/boot/dts/amlogic/meson-g12a.dtsi
··· 2386 2386 clocks = <&clkc CLKID_USB1_DDR_BRIDGE>; 2387 2387 clock-names = "ddr"; 2388 2388 phys = <&usb2_phy1>; 2389 + phy-names = "usb2-phy"; 2389 2390 dr_mode = "peripheral"; 2390 2391 g-rx-fifo-size = <192>; 2391 2392 g-np-tx-fifo-size = <128>;
+1
arch/arm64/boot/dts/amlogic/meson-g12b-odroid-n2.dts
··· 53 53 54 54 gpio = <&gpio_ao GPIOAO_8 GPIO_ACTIVE_HIGH>; 55 55 enable-active-high; 56 + regulator-always-on; 56 57 }; 57 58 58 59 tf_io: gpio-regulator-tf_io {
+41 -6
drivers/bus/hisi_lpc.c
··· 456 456 size_t pdata_size; 457 457 }; 458 458 459 + static void hisi_lpc_acpi_remove(struct device *hostdev) 460 + { 461 + struct acpi_device *adev = ACPI_COMPANION(hostdev); 462 + struct acpi_device *child; 463 + 464 + device_for_each_child(hostdev, NULL, hisi_lpc_acpi_remove_subdev); 465 + 466 + list_for_each_entry(child, &adev->children, node) 467 + acpi_device_clear_enumerated(child); 468 + } 469 + 459 470 /* 460 471 * hisi_lpc_acpi_probe - probe children for ACPI FW 461 472 * @hostdev: LPC host device pointer ··· 566 555 return 0; 567 556 568 557 fail: 569 - device_for_each_child(hostdev, NULL, 570 - hisi_lpc_acpi_remove_subdev); 558 + hisi_lpc_acpi_remove(hostdev); 571 559 return ret; 572 560 } 573 561 ··· 578 568 static int hisi_lpc_acpi_probe(struct device *dev) 579 569 { 580 570 return -ENODEV; 571 + } 572 + 573 + static void hisi_lpc_acpi_remove(struct device *hostdev) 574 + { 581 575 } 582 576 #endif // CONFIG_ACPI 583 577 ··· 620 606 range->fwnode = dev->fwnode; 621 607 range->flags = LOGIC_PIO_INDIRECT; 622 608 range->size = PIO_INDIRECT_SIZE; 609 + range->hostdata = lpcdev; 610 + range->ops = &hisi_lpc_ops; 611 + lpcdev->io_host = range; 623 612 624 613 ret = logic_pio_register_range(range); 625 614 if (ret) { 626 615 dev_err(dev, "register IO range failed (%d)!\n", ret); 627 616 return ret; 628 617 } 629 - lpcdev->io_host = range; 630 618 631 619 /* register the LPC host PIO resources */ 632 620 if (acpi_device) 633 621 ret = hisi_lpc_acpi_probe(dev); 634 622 else 635 623 ret = of_platform_populate(dev->of_node, NULL, NULL, dev); 636 - if (ret) 624 + if (ret) { 625 + logic_pio_unregister_range(range); 637 626 return ret; 627 + } 638 628 639 - lpcdev->io_host->hostdata = lpcdev; 640 - lpcdev->io_host->ops = &hisi_lpc_ops; 629 + dev_set_drvdata(dev, lpcdev); 641 630 642 631 io_end = lpcdev->io_host->io_start + lpcdev->io_host->size; 643 632 dev_info(dev, "registered range [%pa - %pa]\n", 644 633 &lpcdev->io_host->io_start, &io_end); 645 634 646 635 return ret; 636 + } 637 + 638 + static int hisi_lpc_remove(struct platform_device *pdev) 639 + { 640 + struct device *dev = &pdev->dev; 641 + struct acpi_device *acpi_device = ACPI_COMPANION(dev); 642 + struct hisi_lpc_dev *lpcdev = dev_get_drvdata(dev); 643 + struct logic_pio_hwaddr *range = lpcdev->io_host; 644 + 645 + if (acpi_device) 646 + hisi_lpc_acpi_remove(dev); 647 + else 648 + of_platform_depopulate(dev); 649 + 650 + logic_pio_unregister_range(range); 651 + 652 + return 0; 647 653 } 648 654 649 655 static const struct of_device_id hisi_lpc_of_match[] = { ··· 679 645 .acpi_match_table = ACPI_PTR(hisi_lpc_acpi_match), 680 646 }, 681 647 .probe = hisi_lpc_probe, 648 + .remove = hisi_lpc_remove, 682 649 }; 683 650 builtin_platform_driver(hisi_lpc_driver);
+11 -13
drivers/bus/ti-sysc.c
··· 949 949 *best_mode = SYSC_IDLE_SMART_WKUP; 950 950 else if (idlemodes & BIT(SYSC_IDLE_SMART)) 951 951 *best_mode = SYSC_IDLE_SMART; 952 - else if (idlemodes & SYSC_IDLE_FORCE) 952 + else if (idlemodes & BIT(SYSC_IDLE_FORCE)) 953 953 *best_mode = SYSC_IDLE_FORCE; 954 954 else 955 955 return -EINVAL; ··· 1267 1267 SYSC_QUIRK("control", 0, 0, 0x10, -1, 0x40000900, 0xffffffff, 0), 1268 1268 SYSC_QUIRK("cpgmac", 0, 0x1200, 0x1208, 0x1204, 0x4edb1902, 1269 1269 0xffff00f0, 0), 1270 - SYSC_QUIRK("dcan", 0, 0, -1, -1, 0xffffffff, 0xffffffff, 0), 1270 + SYSC_QUIRK("dcan", 0, 0x20, -1, -1, 0xa3170504, 0xffffffff, 0), 1271 + SYSC_QUIRK("dcan", 0, 0x20, -1, -1, 0x4edb1902, 0xffffffff, 0), 1271 1272 SYSC_QUIRK("dmic", 0, 0, 0x10, -1, 0x50010000, 0xffffffff, 0), 1272 1273 SYSC_QUIRK("dwc3", 0, 0, 0x10, -1, 0x500a0200, 0xffffffff, 0), 1273 1274 SYSC_QUIRK("epwmss", 0, 0, 0x4, -1, 0x47400001, 0xffffffff, 0), ··· 1693 1692 if (error) 1694 1693 return 0; 1695 1694 1696 - if (val) 1697 - ddata->cfg.sysc_val = val & ddata->cap->sysc_mask; 1698 - else 1699 - ddata->cfg.sysc_val = ddata->cap->sysc_mask; 1695 + ddata->cfg.sysc_val = val & ddata->cap->sysc_mask; 1700 1696 1701 1697 return 0; 1702 1698 } ··· 2383 2385 2384 2386 error = sysc_init_dts_quirks(ddata); 2385 2387 if (error) 2386 - goto unprepare; 2388 + return error; 2387 2389 2388 2390 error = sysc_map_and_check_registers(ddata); 2389 2391 if (error) 2390 - goto unprepare; 2392 + return error; 2391 2393 2392 2394 error = sysc_init_sysc_mask(ddata); 2393 2395 if (error) 2394 - goto unprepare; 2396 + return error; 2395 2397 2396 2398 error = sysc_init_idlemodes(ddata); 2397 2399 if (error) 2398 - goto unprepare; 2400 + return error; 2399 2401 2400 2402 error = sysc_init_syss_mask(ddata); 2401 2403 if (error) 2402 - goto unprepare; 2404 + return error; 2403 2405 2404 2406 error = sysc_init_pdata(ddata); 2405 2407 if (error) 2406 - goto unprepare; 2408 + return error; 2407 2409 2408 2410 sysc_init_early_quirks(ddata); 2409 2411 ··· 2413 2415 2414 2416 error = sysc_init_resets(ddata); 2415 2417 if (error) 2416 - return error; 2418 + goto unprepare; 2417 2419 2418 2420 error = sysc_init_module(ddata); 2419 2421 if (error)
+4
drivers/soc/ixp4xx/Kconfig
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 + if ARCH_IXP4XX || COMPILE_TEST 3 + 2 4 menu "IXP4xx SoC drivers" 3 5 4 6 config IXP4XX_QMGR ··· 17 15 and is automatically selected by Ethernet and HSS drivers. 18 16 19 17 endmenu 18 + 19 + endif
+12 -7
drivers/soc/ti/pm33xx.c
··· 141 141 } 142 142 143 143 #ifdef CONFIG_SUSPEND 144 - struct wkup_m3_wakeup_src rtc_wake_src(void) 144 + static struct wkup_m3_wakeup_src rtc_wake_src(void) 145 145 { 146 146 u32 i; 147 147 ··· 157 157 return rtc_ext_wakeup; 158 158 } 159 159 160 - int am33xx_rtc_only_idle(unsigned long wfi_flags) 160 + static int am33xx_rtc_only_idle(unsigned long wfi_flags) 161 161 { 162 162 omap_rtc_power_off_program(&omap_rtc->dev); 163 163 am33xx_do_wfi_sram(wfi_flags); ··· 252 252 if (state == PM_SUSPEND_MEM && pm_ops->check_off_mode_enable()) { 253 253 nvmem = devm_nvmem_device_get(&omap_rtc->dev, 254 254 "omap_rtc_scratch0"); 255 - if (nvmem) 255 + if (!IS_ERR(nvmem)) 256 256 nvmem_device_write(nvmem, RTC_SCRATCH_MAGIC_REG * 4, 4, 257 257 (void *)&rtc_magic_val); 258 258 rtc_only_idle = 1; ··· 278 278 struct nvmem_device *nvmem; 279 279 280 280 nvmem = devm_nvmem_device_get(&omap_rtc->dev, "omap_rtc_scratch0"); 281 + if (IS_ERR(nvmem)) 282 + return; 283 + 281 284 m3_ipc->ops->finish_low_power(m3_ipc); 282 285 if (rtc_only_idle) { 283 - if (retrigger_irq) 286 + if (retrigger_irq) { 284 287 /* 285 288 * 32 bits of Interrupt Set-Pending correspond to 32 286 289 * 32 interrupts. Compute the bit offset of the ··· 294 291 writel_relaxed(1 << (retrigger_irq & 31), 295 292 gic_dist_base + GIC_INT_SET_PENDING_BASE 296 293 + retrigger_irq / 32 * 4); 297 - nvmem_device_write(nvmem, RTC_SCRATCH_MAGIC_REG * 4, 4, 298 - (void *)&val); 294 + } 295 + 296 + nvmem_device_write(nvmem, RTC_SCRATCH_MAGIC_REG * 4, 4, 297 + (void *)&val); 299 298 } 300 299 301 300 rtc_only_idle = 0; ··· 420 415 421 416 nvmem = devm_nvmem_device_get(&omap_rtc->dev, 422 417 "omap_rtc_scratch0"); 423 - if (nvmem) { 418 + if (!IS_ERR(nvmem)) { 424 419 nvmem_device_read(nvmem, RTC_SCRATCH_MAGIC_REG * 4, 425 420 4, (void *)&rtc_magic_val); 426 421 if ((rtc_magic_val & 0xffff) != RTC_REG_BOOT_MAGIC)
+1
include/linux/logic_pio.h
··· 117 117 unsigned long logic_pio_trans_hwaddr(struct fwnode_handle *fwnode, 118 118 resource_size_t hw_addr, resource_size_t size); 119 119 int logic_pio_register_range(struct logic_pio_hwaddr *newrange); 120 + void logic_pio_unregister_range(struct logic_pio_hwaddr *range); 120 121 resource_size_t logic_pio_to_hwaddr(unsigned long pio); 121 122 unsigned long logic_pio_trans_cpuaddr(resource_size_t hw_addr); 122 123
+54 -19
lib/logic_pio.c
··· 35 35 struct logic_pio_hwaddr *range; 36 36 resource_size_t start; 37 37 resource_size_t end; 38 - resource_size_t mmio_sz = 0; 38 + resource_size_t mmio_end = 0; 39 39 resource_size_t iio_sz = MMIO_UPPER_LIMIT; 40 40 int ret = 0; 41 41 ··· 46 46 end = new_range->hw_start + new_range->size; 47 47 48 48 mutex_lock(&io_range_mutex); 49 - list_for_each_entry_rcu(range, &io_range_list, list) { 49 + list_for_each_entry(range, &io_range_list, list) { 50 50 if (range->fwnode == new_range->fwnode) { 51 51 /* range already there */ 52 52 goto end_register; ··· 56 56 /* for MMIO ranges we need to check for overlap */ 57 57 if (start >= range->hw_start + range->size || 58 58 end < range->hw_start) { 59 - mmio_sz += range->size; 59 + mmio_end = range->io_start + range->size; 60 60 } else { 61 61 ret = -EFAULT; 62 62 goto end_register; ··· 69 69 70 70 /* range not registered yet, check for available space */ 71 71 if (new_range->flags == LOGIC_PIO_CPU_MMIO) { 72 - if (mmio_sz + new_range->size - 1 > MMIO_UPPER_LIMIT) { 72 + if (mmio_end + new_range->size - 1 > MMIO_UPPER_LIMIT) { 73 73 /* if it's too big check if 64K space can be reserved */ 74 - if (mmio_sz + SZ_64K - 1 > MMIO_UPPER_LIMIT) { 74 + if (mmio_end + SZ_64K - 1 > MMIO_UPPER_LIMIT) { 75 75 ret = -E2BIG; 76 76 goto end_register; 77 77 } 78 78 new_range->size = SZ_64K; 79 79 pr_warn("Requested IO range too big, new size set to 64K\n"); 80 80 } 81 - new_range->io_start = mmio_sz; 81 + new_range->io_start = mmio_end; 82 82 } else if (new_range->flags == LOGIC_PIO_INDIRECT) { 83 83 if (iio_sz + new_range->size - 1 > IO_SPACE_LIMIT) { 84 84 ret = -E2BIG; ··· 99 99 } 100 100 101 101 /** 102 + * logic_pio_unregister_range - unregister a logical PIO range for a host 103 + * @range: pointer to the IO range which has been already registered. 104 + * 105 + * Unregister a previously-registered IO range node. 106 + */ 107 + void logic_pio_unregister_range(struct logic_pio_hwaddr *range) 108 + { 109 + mutex_lock(&io_range_mutex); 110 + list_del_rcu(&range->list); 111 + mutex_unlock(&io_range_mutex); 112 + synchronize_rcu(); 113 + } 114 + 115 + /** 102 116 * find_io_range_by_fwnode - find logical PIO range for given FW node 103 117 * @fwnode: FW node handle associated with logical PIO range 104 118 * ··· 122 108 */ 123 109 struct logic_pio_hwaddr *find_io_range_by_fwnode(struct fwnode_handle *fwnode) 124 110 { 125 - struct logic_pio_hwaddr *range; 111 + struct logic_pio_hwaddr *range, *found_range = NULL; 126 112 113 + rcu_read_lock(); 127 114 list_for_each_entry_rcu(range, &io_range_list, list) { 128 - if (range->fwnode == fwnode) 129 - return range; 115 + if (range->fwnode == fwnode) { 116 + found_range = range; 117 + break; 118 + } 130 119 } 131 - return NULL; 120 + rcu_read_unlock(); 121 + 122 + return found_range; 132 123 } 133 124 134 125 /* Return a registered range given an input PIO token */ 135 126 static struct logic_pio_hwaddr *find_io_range(unsigned long pio) 136 127 { 137 - struct logic_pio_hwaddr *range; 128 + struct logic_pio_hwaddr *range, *found_range = NULL; 138 129 130 + rcu_read_lock(); 139 131 list_for_each_entry_rcu(range, &io_range_list, list) { 140 - if (in_range(pio, range->io_start, range->size)) 141 - return range; 132 + if (in_range(pio, range->io_start, range->size)) { 133 + found_range = range; 134 + break; 135 + } 142 136 } 143 - pr_err("PIO entry token %lx invalid\n", pio); 144 - return NULL; 137 + rcu_read_unlock(); 138 + 139 + if (!found_range) 140 + pr_err("PIO entry token 0x%lx invalid\n", pio); 141 + 142 + return found_range; 145 143 } 146 144 147 145 /** ··· 206 180 { 207 181 struct logic_pio_hwaddr *range; 208 182 183 + rcu_read_lock(); 209 184 list_for_each_entry_rcu(range, &io_range_list, list) { 210 185 if (range->flags != LOGIC_PIO_CPU_MMIO) 211 186 continue; 212 - if (in_range(addr, range->hw_start, range->size)) 213 - return addr - range->hw_start + range->io_start; 187 + if (in_range(addr, range->hw_start, range->size)) { 188 + unsigned long cpuaddr; 189 + 190 + cpuaddr = addr - range->hw_start + range->io_start; 191 + 192 + rcu_read_unlock(); 193 + return cpuaddr; 194 + } 214 195 } 215 - pr_err("addr %llx not registered in io_range_list\n", 216 - (unsigned long long) addr); 196 + rcu_read_unlock(); 197 + 198 + pr_err("addr %pa not registered in io_range_list\n", &addr); 199 + 217 200 return ~0UL; 218 201 } 219 202