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 | 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> |
| @@ -683,7 +683,7 @@ S: Maintained · 682 unmodified lines | ||
| 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,7 +1408,7 @@ S: Maintained · 718 unmodified lines | ||
| 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,7 +3577,7 @@ F: Documentation/filesystems/caching/cachefiles.txt · 2162 unmodified lines | ||
| 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,7 +5295,7 @@ F: include/linux/vga* · 1711 unmodified lines | ||
| 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,7 +5308,7 @@ F: include/uapi/drm/drm* · 6 unmodified lines | ||
| 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/ |
| @@ -185,7 +185,7 @@ · 184 unmodified lines | ||
| 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,7 +934,7 @@ · 742 unmodified lines | ||
| 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,7 +966,7 @@ · 25 unmodified lines | ||
| 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,7 +1614,7 @@ · 641 unmodified lines | ||
| 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,7 +1644,7 @@ · 23 unmodified lines | ||
| 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,7 +1674,7 @@ · 23 unmodified lines | ||
| 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,6 +1758,8 @@ · 77 unmodified lines | ||
| 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>, |
| @@ -1780,6 +1782,8 @@ · 16 unmodified lines | ||
| 1780 | 1782 | |
| 1781 | 1783 | target-module@d0000 { /* 0x481d0000, ap 62 42.0 */ |
| 1782 | 1784 | compatible = "ti,sysc-omap4", "ti,sysc"; |
| 1785 | + reg = <0xd0020 0x4>; | |
| 1786 | + reg-names = "rev"; | |
| 1783 | 1787 | ti,hwmods = "d_can1"; |
| 1784 | 1788 | /* Domains (P, C): per_pwrdm, l4ls_clkdm */ |
| 1785 | 1789 | clocks = <&l4ls_clkctrl AM3_L4LS_D_CAN1_CLKCTRL 0>, |
| @@ -234,13 +234,33 @@ · 233 unmodified lines | ||
| 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 { |
| @@ -228,13 +228,33 @@ · 227 unmodified lines | ||
| 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 { |
| @@ -1574,6 +1574,8 @@ · 1573 unmodified lines | ||
| 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>; |
| @@ -1593,6 +1595,8 @@ · 13 unmodified lines | ||
| 1593 | 1595 | |
| 1594 | 1596 | target-module@d0000 { /* 0x481d0000, ap 52 3a.0 */ |
| 1595 | 1597 | compatible = "ti,sysc-omap4", "ti,sysc"; |
| 1598 | + reg = <0xd0020 0x4>; | |
| 1599 | + reg-names = "rev"; | |
| 1596 | 1600 | ti,hwmods = "d_can1"; |
| 1597 | 1601 | /* Domains (P, C): per_pwrdm, l4ls_clkdm */ |
| 1598 | 1602 | clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN1_CLKCTRL 0>; |
| @@ -175,14 +175,9 @@ · 174 unmodified lines | ||
| 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 { |
| @@ -16,14 +16,9 @@ · 15 unmodified lines | ||
| 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 { |
| @@ -24,14 +24,9 @@ · 23 unmodified lines | ||
| 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 { |
| @@ -379,7 +379,7 @@ · 378 unmodified lines | ||
| 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,6 +430,7 @@ · 44 unmodified lines | ||
| 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 { |
| @@ -16,14 +16,9 @@ · 15 unmodified lines | ||
| 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 | }; |
| @@ -16,14 +16,9 @@ · 15 unmodified lines | ||
| 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 | }; |
| @@ -498,7 +498,7 @@ · 497 unmodified lines | ||
| 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 | }; |
| @@ -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 | 1265 | compatible = "ti,sysc-omap2", "ti,sysc"; |
| 1266 | 1266 | ti,hwmods = "gpio7"; |
| 1267 | 1267 | reg = <0x51000 0x4>, |
| @@ -3025,7 +3025,7 @@ · 1757 unmodified lines | ||
| 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,7 +4577,7 @@ · 1545 unmodified lines | ||
| 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"; |
| @@ -32,7 +32,7 @@ · 31 unmodified lines | ||
| 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,45 +229,45 @@ · 190 unmodified lines | ||
| 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 | |
| @@ -246,13 +246,13 @@ · 245 unmodified lines | ||
| 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 | |
| @@ -126,6 +126,8 @@ restart: · 125 unmodified lines | ||
| 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 | |
| @@ -133,7 +135,6 @@ restart: · 1 unmodified line | ||
| 133 | 135 | @@@@@@@@@@@@@@@@@@@@@@ |
| 134 | 136 | @ Keyboard clock FIQ mode interrupt handler |
| 135 | 137 | @ r10 now contains KEYBRD_CLK_MASK, use it |
| 136 | − str r10, [r12, #OMAP1510_GPIO_INT_STATUS] @ ack the interrupt | |
| 137 | 138 | bic r11, r11, r10 @ unmask it |
| 138 | 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 | 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]++) |
| @@ -127,6 +127,9 @@ static int __init omap4_sram_init(void) · 126 unmodified lines | ||
| 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", |
| @@ -379,7 +379,8 @@ static struct omap_hwmod dra7xx_dcan2_hwmod = { · 378 unmodified lines | ||
| 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 | }; |
| @@ -339,6 +339,12 @@ · 338 unmodified lines | ||
| 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>; |
| @@ -2386,6 +2386,7 @@ · 2385 unmodified lines | ||
| 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>; |
| @@ -53,6 +53,7 @@ · 52 unmodified lines | ||
| 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 { |
| @@ -456,6 +456,17 @@ struct hisi_lpc_acpi_cell { · 455 unmodified lines | ||
| 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 |
| @@ -555,8 +566,7 @@ static int hisi_lpc_acpi_probe(struct device *hostdev) · 93 unmodified lines | ||
| 555 | 566 | return 0; |
| 556 | 567 | |
| 557 | 568 | fail: |
| 558 | − device_for_each_child(hostdev, NULL, | |
| 559 | − hisi_lpc_acpi_remove_subdev); | |
| 569 | + hisi_lpc_acpi_remove(hostdev); | |
| 560 | 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 | 580 | return -ENODEV; |
| 571 | 581 | } |
| 582 | + | |
| 583 | +static void hisi_lpc_acpi_remove(struct device *hostdev) | |
| 584 | +{ | |
| 585 | +} | |
| 572 | 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 | 620 | range->fwnode = dev->fwnode; |
| 607 | 621 | range->flags = LOGIC_PIO_INDIRECT; |
| 608 | 622 | range->size = PIO_INDIRECT_SIZE; |
| 623 | + range->hostdata = lpcdev; | |
| 624 | + range->ops = &hisi_lpc_ops; | |
| 625 | + lpcdev->io_host = range; | |
| 609 | 626 | |
| 610 | 627 | ret = logic_pio_register_range(range); |
| 611 | 628 | if (ret) { |
| 612 | 629 | dev_err(dev, "register IO range failed (%d)!\n", ret); |
| 613 | 630 | return ret; |
| 614 | 631 | } |
| 615 | − lpcdev->io_host = range; | |
| 616 | 632 | |
| 617 | 633 | /* register the LPC host PIO resources */ |
| 618 | 634 | if (acpi_device) |
| 619 | 635 | ret = hisi_lpc_acpi_probe(dev); |
| 620 | 636 | else |
| 621 | 637 | ret = of_platform_populate(dev->of_node, NULL, NULL, dev); |
| 622 | − if (ret) | |
| 638 | + if (ret) { | |
| 639 | + logic_pio_unregister_range(range); | |
| 623 | 640 | return ret; |
| 641 | + } | |
| 624 | 642 | |
| 625 | − lpcdev->io_host->hostdata = lpcdev; | |
| 626 | − lpcdev->io_host->ops = &hisi_lpc_ops; | |
| 643 | + dev_set_drvdata(dev, lpcdev); | |
| 627 | 644 | |
| 628 | 645 | io_end = lpcdev->io_host->io_start + lpcdev->io_host->size; |
| 629 | 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 | 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 | 669 | static const struct of_device_id hisi_lpc_of_match[] = { |
| 636 | 670 | { .compatible = "hisilicon,hip06-lpc", }, |
| 637 | 671 | { .compatible = "hisilicon,hip07-lpc", }, |
| @@ -645,5 +679,6 @@ static struct platform_driver hisi_lpc_driver = { · 7 unmodified lines | ||
| 645 | 679 | .acpi_match_table = ACPI_PTR(hisi_lpc_acpi_match), |
| 646 | 680 | }, |
| 647 | 681 | .probe = hisi_lpc_probe, |
| 682 | + .remove = hisi_lpc_remove, | |
| 648 | 683 | }; |
| 649 | 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 | 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,7 +1267,8 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = { · 311 unmodified lines | ||
| 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), |
| @@ -1692,10 +1693,7 @@ static int sysc_init_sysc_mask(struct sysc *ddata) · 418 unmodified lines | ||
| 1692 | 1693 | if (error) |
| 1693 | 1694 | return 0; |
| 1694 | 1695 | |
| 1695 | − if (val) | |
| 1696 | − ddata->cfg.sysc_val = val & ddata->cap->sysc_mask; | |
| 1697 | − else | |
| 1698 | − ddata->cfg.sysc_val = ddata->cap->sysc_mask; | |
| 1696 | + ddata->cfg.sysc_val = val & ddata->cap->sysc_mask; | |
| 1699 | 1697 | |
| 1700 | 1698 | return 0; |
| 1701 | 1699 | } |
| @@ -2385,27 +2383,27 @@ static int sysc_probe(struct platform_device *pdev) · 683 unmodified lines | ||
| 2385 | 2383 | |
| 2386 | 2384 | error = sysc_init_dts_quirks(ddata); |
| 2387 | 2385 | if (error) |
| 2388 | − goto unprepare; | |
| 2386 | + return error; | |
| 2389 | 2387 | |
| 2390 | 2388 | error = sysc_map_and_check_registers(ddata); |
| 2391 | 2389 | if (error) |
| 2392 | − goto unprepare; | |
| 2390 | + return error; | |
| 2393 | 2391 | |
| 2394 | 2392 | error = sysc_init_sysc_mask(ddata); |
| 2395 | 2393 | if (error) |
| 2396 | − goto unprepare; | |
| 2394 | + return error; | |
| 2397 | 2395 | |
| 2398 | 2396 | error = sysc_init_idlemodes(ddata); |
| 2399 | 2397 | if (error) |
| 2400 | − goto unprepare; | |
| 2398 | + return error; | |
| 2401 | 2399 | |
| 2402 | 2400 | error = sysc_init_syss_mask(ddata); |
| 2403 | 2401 | if (error) |
| 2404 | − goto unprepare; | |
| 2402 | + return error; | |
| 2405 | 2403 | |
| 2406 | 2404 | error = sysc_init_pdata(ddata); |
| 2407 | 2405 | if (error) |
| 2408 | − goto unprepare; | |
| 2406 | + return error; | |
| 2409 | 2407 | |
| 2410 | 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 | 2414 | error = sysc_init_resets(ddata); |
| 2417 | 2415 | if (error) |
| 2418 | − return error; | |
| 2416 | + goto unprepare; | |
| 2419 | 2417 | |
| 2420 | 2418 | error = sysc_init_module(ddata); |
| 2421 | 2419 | if (error) |
| @@ -1,4 +1,6 @@ | ||
| 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 |
| @@ -15,3 +17,5 @@ config IXP4XX_NPE · 10 unmodified lines | ||
| 15 | 17 | and is automatically selected by Ethernet and HSS drivers. |
| 16 | 18 | |
| 17 | 19 | endmenu |
| 20 | + | |
| 21 | +endif | |
| @@ -141,7 +141,7 @@ static int __init am43xx_map_gic(void) · 140 unmodified lines | ||
| 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,7 +157,7 @@ struct wkup_m3_wakeup_src rtc_wake_src(void) · 9 unmodified lines | ||
| 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,7 +252,7 @@ static int am33xx_pm_begin(suspend_state_t state) · 88 unmodified lines | ||
| 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,9 +278,12 @@ static void am33xx_pm_end(void) · 19 unmodified lines | ||
| 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 |
| @@ -291,8 +294,10 @@ static void am33xx_pm_end(void) · 4 unmodified lines | ||
| 291 | 294 | writel_relaxed(1 << (retrigger_irq & 31), |
| 292 | 295 | gic_dist_base + GIC_INT_SET_PENDING_BASE |
| 293 | 296 | + retrigger_irq / 32 * 4); |
| 294 | − nvmem_device_write(nvmem, RTC_SCRATCH_MAGIC_REG * 4, 4, | |
| 295 | − (void *)&val); | |
| 297 | + } | |
| 298 | + | |
| 299 | + nvmem_device_write(nvmem, RTC_SCRATCH_MAGIC_REG * 4, 4, | |
| 300 | + (void *)&val); | |
| 296 | 301 | } |
| 297 | 302 | |
| 298 | 303 | rtc_only_idle = 0; |
| @@ -415,7 +420,7 @@ static int am33xx_pm_rtc_setup(void) · 116 unmodified lines | ||
| 415 | 420 | |
| 416 | 421 | nvmem = devm_nvmem_device_get(&omap_rtc->dev, |
| 417 | 422 | "omap_rtc_scratch0"); |
| 418 | − if (nvmem) { | |
| 423 | + if (!IS_ERR(nvmem)) { | |
| 419 | 424 | nvmem_device_read(nvmem, RTC_SCRATCH_MAGIC_REG * 4, |
| 420 | 425 | 4, (void *)&rtc_magic_val); |
| 421 | 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 | 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 | |
| @@ -35,7 +35,7 @@ int logic_pio_register_range(struct logic_pio_hwaddr *new_range) · 34 unmodified lines | ||
| 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,7 +46,7 @@ int logic_pio_register_range(struct logic_pio_hwaddr *new_range) · 4 unmodified lines | ||
| 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,7 +56,7 @@ int logic_pio_register_range(struct logic_pio_hwaddr *new_range) · 3 unmodified lines | ||
| 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,16 +69,16 @@ int logic_pio_register_range(struct logic_pio_hwaddr *new_range) · 6 unmodified lines | ||
| 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; |
| @@ -98,6 +98,20 @@ end_register: · 13 unmodified lines | ||
| 98 | 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 | 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 |
| @@ -108,26 +122,38 @@ end_register: · 4 unmodified lines | ||
| 108 | 122 | */ |
| 109 | 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 | 128 | list_for_each_entry_rcu(range, &io_range_list, list) { |
| 114 | − if (range->fwnode == fwnode) | |
| 115 | − return range; | |
| 129 | + if (range->fwnode == fwnode) { | |
| 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 | 139 | /* Return a registered range given an input PIO token */ |
| 121 | 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 | 145 | list_for_each_entry_rcu(range, &io_range_list, list) { |
| 126 | − if (in_range(pio, range->io_start, range->size)) | |
| 127 | − return range; | |
| 146 | + if (in_range(pio, range->io_start, range->size)) { | |
| 147 | + found_range = range; | |
| 148 | + break; | |
| 149 | + } | |
| 128 | 150 | } |
| 129 | − pr_err("PIO entry token %lx invalid\n", pio); | |
| 130 | − return NULL; | |
| 151 | + rcu_read_unlock(); | |
| 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 | 207 | struct logic_pio_hwaddr *range; |
| 182 | 208 | |
| 209 | + rcu_read_lock(); | |
| 183 | 210 | list_for_each_entry_rcu(range, &io_range_list, list) { |
| 184 | 211 | if (range->flags != LOGIC_PIO_CPU_MMIO) |
| 185 | 212 | continue; |
| 186 | − if (in_range(addr, range->hw_start, range->size)) | |
| 187 | − return addr - range->hw_start + range->io_start; | |
| 213 | + if (in_range(addr, range->hw_start, range->size)) { | |
| 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", | |
| 190 | − (unsigned long long) addr); | |
| 222 | + rcu_read_unlock(); | |
| 223 | + | |
| 224 | + pr_err("addr %pa not registered in io_range_list\n", &addr); | |
| 225 | + | |
| 191 | 226 | return ~0UL; |
| 192 | 227 | } |
| 193 | 228 | |