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