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

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

Pull ARM SoC fixes from Arnd Bergmann:
"There are not a lot of important fixes for the soc tree yet this time,
but it's time to upstream what I got so far:

- DT Fixes for Arm Juno and ST-Ericsson Ux500 to add missing critical
temperature points

- A number of fixes for the Arm SCMI firmware, addressing correctness
issues in the code, in particular error handling and resource
leaks.

- One error handling fix for the new i.MX93 power domain driver

- Several devicetree fixes for NXP i.MX6/8/9 and Layerscape chips,
fixing incorrect or missing DT properties for MDIO controller
nodes, CPLD, USB and regulators for various boards, as well as some
fixes for DT schema checks.

- MAINTAINERS file updates for HiSilicon LPC Bus and Broadcom git
URLs"

* tag 'soc-fixes-6.1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (26 commits)
arm64: dts: juno: Add thermal critical trip points
firmware: arm_scmi: Fix deferred_tx_wq release on error paths
firmware: arm_scmi: Fix devres allocation device in virtio transport
firmware: arm_scmi: Make Rx chan_setup fail on memory errors
firmware: arm_scmi: Make tx_prepare time out eventually
firmware: arm_scmi: Suppress the driver's bind attributes
firmware: arm_scmi: Cleanup the core driver removal callback
MAINTAINERS: Update HiSilicon LPC BUS Driver maintainer
ARM: dts: ux500: Add trips to battery thermal zones
arm64: dts: ls208xa: specify clock frequencies for the MDIO controllers
arm64: dts: ls1088a: specify clock frequencies for the MDIO controllers
arm64: dts: lx2160a: specify clock frequencies for the MDIO controllers
soc: imx: imx93-pd: Fix the error handling path of imx93_pd_probe()
arm64: dts: imx93: correct gpio-ranges
arm64: dts: imx93: correct s4mu interrupt names
dt-bindings: power: gpcv2: add power-domains property
arm64: dts: imx8: correct clock order
ARM: dts: imx6dl-yapp4: Do not allow PM to switch PU regulator off on Q/QP
ARM: dts: imx6qdl-gw59{10,13}: fix user pushbutton GPIO offset
arm64: dts: imx8mn: Correct the usb power domain
...

+267 -82
+3
Documentation/devicetree/bindings/power/fsl,imx-gpcv2.yaml
··· 81 81 82 82 power-supply: true 83 83 84 + power-domains: 85 + maxItems: 1 86 + 84 87 resets: 85 88 description: | 86 89 A number of phandles to resets that need to be asserted during
+8 -8
MAINTAINERS
··· 3984 3984 R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3985 3985 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 3986 3986 S: Maintained 3987 - T: git git://github.com/broadcom/stblinux.git 3987 + T: git https://github.com/broadcom/stblinux.git 3988 3988 F: Documentation/devicetree/bindings/arm/bcm/brcm,bcmbca.yaml 3989 3989 F: arch/arm64/boot/dts/broadcom/bcmbca/* 3990 3990 N: bcmbca ··· 4009 4009 L: linux-rpi-kernel@lists.infradead.org (moderated for non-subscribers) 4010 4010 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 4011 4011 S: Maintained 4012 - T: git git://github.com/broadcom/stblinux.git 4012 + T: git https://github.com/broadcom/stblinux.git 4013 4013 F: Documentation/devicetree/bindings/pci/brcm,stb-pcie.yaml 4014 4014 F: drivers/pci/controller/pcie-brcmstb.c 4015 4015 F: drivers/staging/vc04_services ··· 4023 4023 M: Scott Branden <sbranden@broadcom.com> 4024 4024 R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4025 4025 S: Maintained 4026 - T: git git://github.com/broadcom/mach-bcm 4026 + T: git https://github.com/broadcom/mach-bcm 4027 4027 F: arch/arm/mach-bcm/ 4028 4028 N: bcm281* 4029 4029 N: bcm113* ··· 4088 4088 R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4089 4089 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 4090 4090 S: Maintained 4091 - T: git git://github.com/broadcom/stblinux.git 4091 + T: git https://github.com/broadcom/stblinux.git 4092 4092 F: Documentation/devicetree/bindings/pci/brcm,stb-pcie.yaml 4093 4093 F: arch/arm/boot/dts/bcm7*.dts* 4094 4094 F: arch/arm/include/asm/hardware/cache-b15-rac.h ··· 4121 4121 R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4122 4122 L: linux-mips@vger.kernel.org 4123 4123 S: Maintained 4124 - T: git git://github.com/broadcom/stblinux.git 4124 + T: git https://github.com/broadcom/stblinux.git 4125 4125 F: arch/mips/bmips/* 4126 4126 F: arch/mips/boot/dts/brcm/bcm*.dts* 4127 4127 F: arch/mips/include/asm/mach-bmips/* ··· 4262 4262 R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4263 4263 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 4264 4264 S: Maintained 4265 - T: git git://github.com/broadcom/stblinux.git 4265 + T: git https://github.com/broadcom/stblinux.git 4266 4266 F: arch/arm64/boot/dts/broadcom/northstar2/* 4267 4267 F: arch/arm64/boot/dts/broadcom/stingray/* 4268 4268 F: drivers/clk/bcm/clk-ns* ··· 4332 4332 R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 4333 4333 L: linux-pm@vger.kernel.org 4334 4334 S: Maintained 4335 - T: git git://github.com/broadcom/stblinux.git 4335 + T: git https://github.com/broadcom/stblinux.git 4336 4336 F: drivers/soc/bcm/bcm63xx/bcm-pmb.c 4337 4337 F: include/dt-bindings/soc/bcm-pmb.h 4338 4338 ··· 9217 9217 F: drivers/i2c/busses/i2c-hisi.c 9218 9218 9219 9219 HISILICON LPC BUS DRIVER 9220 - M: john.garry@huawei.com 9220 + M: Jay Fang <f.fangjian@huawei.com> 9221 9221 S: Maintained 9222 9222 W: http://www.hisilicon.com 9223 9223 F: Documentation/devicetree/bindings/arm/hisilicon/low-pin-count.yaml
+4
arch/arm/boot/dts/imx6q-yapp4-crux.dts
··· 33 33 status = "okay"; 34 34 }; 35 35 36 + &reg_pu { 37 + regulator-always-on; 38 + }; 39 + 36 40 &reg_usb_h1_vbus { 37 41 status = "okay"; 38 42 };
+1 -1
arch/arm/boot/dts/imx6qdl-gw5910.dtsi
··· 29 29 30 30 user-pb { 31 31 label = "user_pb"; 32 - gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>; 32 + gpios = <&gsc_gpio 2 GPIO_ACTIVE_LOW>; 33 33 linux,code = <BTN_0>; 34 34 }; 35 35
+1 -1
arch/arm/boot/dts/imx6qdl-gw5913.dtsi
··· 26 26 27 27 user-pb { 28 28 label = "user_pb"; 29 - gpios = <&gsc_gpio 0 GPIO_ACTIVE_LOW>; 29 + gpios = <&gsc_gpio 2 GPIO_ACTIVE_LOW>; 30 30 linux,code = <BTN_0>; 31 31 }; 32 32
+4
arch/arm/boot/dts/imx6qp-yapp4-crux-plus.dts
··· 33 33 status = "okay"; 34 34 }; 35 35 36 + &reg_pu { 37 + regulator-always-on; 38 + }; 39 + 36 40 &reg_usb_h1_vbus { 37 41 status = "okay"; 38 42 };
+8
arch/arm/boot/dts/ste-href.dtsi
··· 24 24 polling-delay = <0>; 25 25 polling-delay-passive = <0>; 26 26 thermal-sensors = <&bat_therm>; 27 + 28 + trips { 29 + battery-crit-hi { 30 + temperature = <70000>; 31 + hysteresis = <2000>; 32 + type = "critical"; 33 + }; 34 + }; 27 35 }; 28 36 }; 29 37
+8
arch/arm/boot/dts/ste-snowball.dts
··· 28 28 polling-delay = <0>; 29 29 polling-delay-passive = <0>; 30 30 thermal-sensors = <&bat_therm>; 31 + 32 + trips { 33 + battery-crit-hi { 34 + temperature = <70000>; 35 + hysteresis = <2000>; 36 + type = "critical"; 37 + }; 38 + }; 31 39 }; 32 40 }; 33 41
+8
arch/arm/boot/dts/ste-ux500-samsung-codina-tmo.dts
··· 44 44 polling-delay = <0>; 45 45 polling-delay-passive = <0>; 46 46 thermal-sensors = <&bat_therm>; 47 + 48 + trips { 49 + battery-crit-hi { 50 + temperature = <70000>; 51 + hysteresis = <2000>; 52 + type = "critical"; 53 + }; 54 + }; 47 55 }; 48 56 }; 49 57
+8
arch/arm/boot/dts/ste-ux500-samsung-codina.dts
··· 57 57 polling-delay = <0>; 58 58 polling-delay-passive = <0>; 59 59 thermal-sensors = <&bat_therm>; 60 + 61 + trips { 62 + battery-crit-hi { 63 + temperature = <70000>; 64 + hysteresis = <2000>; 65 + type = "critical"; 66 + }; 67 + }; 60 68 }; 61 69 }; 62 70
+8
arch/arm/boot/dts/ste-ux500-samsung-gavini.dts
··· 30 30 polling-delay = <0>; 31 31 polling-delay-passive = <0>; 32 32 thermal-sensors = <&bat_therm>; 33 + 34 + trips { 35 + battery-crit-hi { 36 + temperature = <70000>; 37 + hysteresis = <2000>; 38 + type = "critical"; 39 + }; 40 + }; 33 41 }; 34 42 }; 35 43
+8
arch/arm/boot/dts/ste-ux500-samsung-golden.dts
··· 35 35 polling-delay = <0>; 36 36 polling-delay-passive = <0>; 37 37 thermal-sensors = <&bat_therm>; 38 + 39 + trips { 40 + battery-crit-hi { 41 + temperature = <70000>; 42 + hysteresis = <2000>; 43 + type = "critical"; 44 + }; 45 + }; 38 46 }; 39 47 }; 40 48
+8
arch/arm/boot/dts/ste-ux500-samsung-janice.dts
··· 30 30 polling-delay = <0>; 31 31 polling-delay-passive = <0>; 32 32 thermal-sensors = <&bat_therm>; 33 + 34 + trips { 35 + battery-crit-hi { 36 + temperature = <70000>; 37 + hysteresis = <2000>; 38 + type = "critical"; 39 + }; 40 + }; 33 41 }; 34 42 }; 35 43
+8
arch/arm/boot/dts/ste-ux500-samsung-kyle.dts
··· 34 34 polling-delay = <0>; 35 35 polling-delay-passive = <0>; 36 36 thermal-sensors = <&bat_therm>; 37 + 38 + trips { 39 + battery-crit-hi { 40 + temperature = <70000>; 41 + hysteresis = <2000>; 42 + type = "critical"; 43 + }; 44 + }; 37 45 }; 38 46 }; 39 47
+8
arch/arm/boot/dts/ste-ux500-samsung-skomer.dts
··· 30 30 polling-delay = <0>; 31 31 polling-delay-passive = <0>; 32 32 thermal-sensors = <&bat_therm>; 33 + 34 + trips { 35 + battery-crit-hi { 36 + temperature = <70000>; 37 + hysteresis = <2000>; 38 + type = "critical"; 39 + }; 40 + }; 33 41 }; 34 42 }; 35 43
+14
arch/arm64/boot/dts/arm/juno-base.dtsi
··· 751 751 polling-delay = <1000>; 752 752 polling-delay-passive = <100>; 753 753 thermal-sensors = <&scpi_sensors0 0>; 754 + trips { 755 + pmic_crit0: trip0 { 756 + temperature = <90000>; 757 + hysteresis = <2000>; 758 + type = "critical"; 759 + }; 760 + }; 754 761 }; 755 762 756 763 soc { 757 764 polling-delay = <1000>; 758 765 polling-delay-passive = <100>; 759 766 thermal-sensors = <&scpi_sensors0 3>; 767 + trips { 768 + soc_crit0: trip0 { 769 + temperature = <80000>; 770 + hysteresis = <2000>; 771 + type = "critical"; 772 + }; 773 + }; 760 774 }; 761 775 762 776 big_cluster_thermal_zone: big-cluster {
+6
arch/arm64/boot/dts/freescale/fsl-ls1088a.dtsi
··· 779 779 little-endian; 780 780 #address-cells = <1>; 781 781 #size-cells = <0>; 782 + clock-frequency = <2500000>; 783 + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL 784 + QORIQ_CLK_PLL_DIV(1)>; 782 785 status = "disabled"; 783 786 }; 784 787 ··· 791 788 little-endian; 792 789 #address-cells = <1>; 793 790 #size-cells = <0>; 791 + clock-frequency = <2500000>; 792 + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL 793 + QORIQ_CLK_PLL_DIV(1)>; 794 794 status = "disabled"; 795 795 }; 796 796
+6
arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi
··· 532 532 little-endian; 533 533 #address-cells = <1>; 534 534 #size-cells = <0>; 535 + clock-frequency = <2500000>; 536 + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL 537 + QORIQ_CLK_PLL_DIV(2)>; 535 538 status = "disabled"; 536 539 }; 537 540 ··· 544 541 little-endian; 545 542 #address-cells = <1>; 546 543 #size-cells = <0>; 544 + clock-frequency = <2500000>; 545 + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL 546 + QORIQ_CLK_PLL_DIV(2)>; 547 547 status = "disabled"; 548 548 }; 549 549
+6
arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi
··· 1385 1385 #address-cells = <1>; 1386 1386 #size-cells = <0>; 1387 1387 little-endian; 1388 + clock-frequency = <2500000>; 1389 + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL 1390 + QORIQ_CLK_PLL_DIV(2)>; 1388 1391 status = "disabled"; 1389 1392 }; 1390 1393 ··· 1398 1395 little-endian; 1399 1396 #address-cells = <1>; 1400 1397 #size-cells = <0>; 1398 + clock-frequency = <2500000>; 1399 + clocks = <&clockgen QORIQ_CLK_PLATFORM_PLL 1400 + QORIQ_CLK_PLL_DIV(2)>; 1401 1401 status = "disabled"; 1402 1402 }; 1403 1403
+9 -9
arch/arm64/boot/dts/freescale/imx8-ss-conn.dtsi
··· 38 38 interrupts = <GIC_SPI 232 IRQ_TYPE_LEVEL_HIGH>; 39 39 reg = <0x5b010000 0x10000>; 40 40 clocks = <&sdhc0_lpcg IMX_LPCG_CLK_4>, 41 - <&sdhc0_lpcg IMX_LPCG_CLK_5>, 42 - <&sdhc0_lpcg IMX_LPCG_CLK_0>; 43 - clock-names = "ipg", "per", "ahb"; 41 + <&sdhc0_lpcg IMX_LPCG_CLK_0>, 42 + <&sdhc0_lpcg IMX_LPCG_CLK_5>; 43 + clock-names = "ipg", "ahb", "per"; 44 44 power-domains = <&pd IMX_SC_R_SDHC_0>; 45 45 status = "disabled"; 46 46 }; ··· 49 49 interrupts = <GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH>; 50 50 reg = <0x5b020000 0x10000>; 51 51 clocks = <&sdhc1_lpcg IMX_LPCG_CLK_4>, 52 - <&sdhc1_lpcg IMX_LPCG_CLK_5>, 53 - <&sdhc1_lpcg IMX_LPCG_CLK_0>; 54 - clock-names = "ipg", "per", "ahb"; 52 + <&sdhc1_lpcg IMX_LPCG_CLK_0>, 53 + <&sdhc1_lpcg IMX_LPCG_CLK_5>; 54 + clock-names = "ipg", "ahb", "per"; 55 55 power-domains = <&pd IMX_SC_R_SDHC_1>; 56 56 fsl,tuning-start-tap = <20>; 57 57 fsl,tuning-step = <2>; ··· 62 62 interrupts = <GIC_SPI 234 IRQ_TYPE_LEVEL_HIGH>; 63 63 reg = <0x5b030000 0x10000>; 64 64 clocks = <&sdhc2_lpcg IMX_LPCG_CLK_4>, 65 - <&sdhc2_lpcg IMX_LPCG_CLK_5>, 66 - <&sdhc2_lpcg IMX_LPCG_CLK_0>; 67 - clock-names = "ipg", "per", "ahb"; 65 + <&sdhc2_lpcg IMX_LPCG_CLK_0>, 66 + <&sdhc2_lpcg IMX_LPCG_CLK_5>; 67 + clock-names = "ipg", "ahb", "per"; 68 68 power-domains = <&pd IMX_SC_R_SDHC_2>; 69 69 status = "disabled"; 70 70 };
+8 -8
arch/arm64/boot/dts/freescale/imx8mm-mx8menlo.dts
··· 250 250 /* SODIMM 96 */ 251 251 MX8MM_IOMUXC_SAI1_RXD2_GPIO4_IO4 0x1c4 252 252 /* CPLD_D[7] */ 253 - MX8MM_IOMUXC_SAI1_RXD3_GPIO4_IO5 0x1c4 253 + MX8MM_IOMUXC_SAI1_RXD3_GPIO4_IO5 0x184 254 254 /* CPLD_D[6] */ 255 - MX8MM_IOMUXC_SAI1_RXFS_GPIO4_IO0 0x1c4 255 + MX8MM_IOMUXC_SAI1_RXFS_GPIO4_IO0 0x184 256 256 /* CPLD_D[5] */ 257 - MX8MM_IOMUXC_SAI1_TXC_GPIO4_IO11 0x1c4 257 + MX8MM_IOMUXC_SAI1_TXC_GPIO4_IO11 0x184 258 258 /* CPLD_D[4] */ 259 - MX8MM_IOMUXC_SAI1_TXD0_GPIO4_IO12 0x1c4 259 + MX8MM_IOMUXC_SAI1_TXD0_GPIO4_IO12 0x184 260 260 /* CPLD_D[3] */ 261 - MX8MM_IOMUXC_SAI1_TXD1_GPIO4_IO13 0x1c4 261 + MX8MM_IOMUXC_SAI1_TXD1_GPIO4_IO13 0x184 262 262 /* CPLD_D[2] */ 263 - MX8MM_IOMUXC_SAI1_TXD2_GPIO4_IO14 0x1c4 263 + MX8MM_IOMUXC_SAI1_TXD2_GPIO4_IO14 0x184 264 264 /* CPLD_D[1] */ 265 - MX8MM_IOMUXC_SAI1_TXD3_GPIO4_IO15 0x1c4 265 + MX8MM_IOMUXC_SAI1_TXD3_GPIO4_IO15 0x184 266 266 /* CPLD_D[0] */ 267 - MX8MM_IOMUXC_SAI1_TXD4_GPIO4_IO16 0x1c4 267 + MX8MM_IOMUXC_SAI1_TXD4_GPIO4_IO16 0x184 268 268 /* KBD_intK */ 269 269 MX8MM_IOMUXC_SAI2_MCLK_GPIO4_IO27 0x1c4 270 270 /* DISP_reset */
+4 -4
arch/arm64/boot/dts/freescale/imx8mm.dtsi
··· 276 276 assigned-clocks = <&clk IMX8MM_CLK_USB_PHY_REF>; 277 277 assigned-clock-parents = <&clk IMX8MM_SYS_PLL1_100M>; 278 278 clock-names = "main_clk"; 279 + power-domains = <&pgc_otg1>; 279 280 }; 280 281 281 282 usbphynop2: usbphynop2 { ··· 286 285 assigned-clocks = <&clk IMX8MM_CLK_USB_PHY_REF>; 287 286 assigned-clock-parents = <&clk IMX8MM_SYS_PLL1_100M>; 288 287 clock-names = "main_clk"; 288 + power-domains = <&pgc_otg2>; 289 289 }; 290 290 291 291 soc: soc@0 { ··· 676 674 pgc_otg1: power-domain@2 { 677 675 #power-domain-cells = <0>; 678 676 reg = <IMX8MM_POWER_DOMAIN_OTG1>; 679 - power-domains = <&pgc_hsiomix>; 680 677 }; 681 678 682 679 pgc_otg2: power-domain@3 { 683 680 #power-domain-cells = <0>; 684 681 reg = <IMX8MM_POWER_DOMAIN_OTG2>; 685 - power-domains = <&pgc_hsiomix>; 686 682 }; 687 683 688 684 pgc_gpumix: power-domain@4 { ··· 1186 1186 assigned-clock-parents = <&clk IMX8MM_SYS_PLL2_500M>; 1187 1187 phys = <&usbphynop1>; 1188 1188 fsl,usbmisc = <&usbmisc1 0>; 1189 - power-domains = <&pgc_otg1>; 1189 + power-domains = <&pgc_hsiomix>; 1190 1190 status = "disabled"; 1191 1191 }; 1192 1192 ··· 1206 1206 assigned-clock-parents = <&clk IMX8MM_SYS_PLL2_500M>; 1207 1207 phys = <&usbphynop2>; 1208 1208 fsl,usbmisc = <&usbmisc2 0>; 1209 - power-domains = <&pgc_otg2>; 1209 + power-domains = <&pgc_hsiomix>; 1210 1210 status = "disabled"; 1211 1211 }; 1212 1212
+2 -2
arch/arm64/boot/dts/freescale/imx8mn.dtsi
··· 662 662 pgc_otg1: power-domain@1 { 663 663 #power-domain-cells = <0>; 664 664 reg = <IMX8MN_POWER_DOMAIN_OTG1>; 665 - power-domains = <&pgc_hsiomix>; 666 665 }; 667 666 668 667 pgc_gpumix: power-domain@2 { ··· 1075 1076 assigned-clock-parents = <&clk IMX8MN_SYS_PLL2_500M>; 1076 1077 phys = <&usbphynop1>; 1077 1078 fsl,usbmisc = <&usbmisc1 0>; 1078 - power-domains = <&pgc_otg1>; 1079 + power-domains = <&pgc_hsiomix>; 1079 1080 status = "disabled"; 1080 1081 }; 1081 1082 ··· 1174 1175 assigned-clocks = <&clk IMX8MN_CLK_USB_PHY_REF>; 1175 1176 assigned-clock-parents = <&clk IMX8MN_SYS_PLL1_100M>; 1176 1177 clock-names = "main_clk"; 1178 + power-domains = <&pgc_otg1>; 1177 1179 }; 1178 1180 };
+10 -10
arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
··· 354 354 "SODIMM_82", 355 355 "SODIMM_70", 356 356 "SODIMM_72"; 357 - 358 - ctrl-sleep-moci-hog { 359 - gpio-hog; 360 - /* Verdin CTRL_SLEEP_MOCI# (SODIMM 256) */ 361 - gpios = <29 GPIO_ACTIVE_HIGH>; 362 - line-name = "CTRL_SLEEP_MOCI#"; 363 - output-high; 364 - pinctrl-names = "default"; 365 - pinctrl-0 = <&pinctrl_ctrl_sleep_moci>; 366 - }; 367 357 }; 368 358 369 359 &gpio3 { ··· 422 432 "SODIMM_256", 423 433 "SODIMM_48", 424 434 "SODIMM_44"; 435 + 436 + ctrl-sleep-moci-hog { 437 + gpio-hog; 438 + /* Verdin CTRL_SLEEP_MOCI# (SODIMM 256) */ 439 + gpios = <29 GPIO_ACTIVE_HIGH>; 440 + line-name = "CTRL_SLEEP_MOCI#"; 441 + output-high; 442 + pinctrl-names = "default"; 443 + pinctrl-0 = <&pinctrl_ctrl_sleep_moci>; 444 + }; 425 445 }; 426 446 427 447 /* On-module I2C */
+6 -5
arch/arm64/boot/dts/freescale/imx93.dtsi
··· 451 451 clocks = <&clk IMX93_CLK_GPIO2_GATE>, 452 452 <&clk IMX93_CLK_GPIO2_GATE>; 453 453 clock-names = "gpio", "port"; 454 - gpio-ranges = <&iomuxc 0 32 32>; 454 + gpio-ranges = <&iomuxc 0 4 30>; 455 455 }; 456 456 457 457 gpio3: gpio@43820080 { ··· 465 465 clocks = <&clk IMX93_CLK_GPIO3_GATE>, 466 466 <&clk IMX93_CLK_GPIO3_GATE>; 467 467 clock-names = "gpio", "port"; 468 - gpio-ranges = <&iomuxc 0 64 32>; 468 + gpio-ranges = <&iomuxc 0 84 8>, <&iomuxc 8 66 18>, 469 + <&iomuxc 26 34 2>, <&iomuxc 28 0 4>; 469 470 }; 470 471 471 472 gpio4: gpio@43830080 { ··· 480 479 clocks = <&clk IMX93_CLK_GPIO4_GATE>, 481 480 <&clk IMX93_CLK_GPIO4_GATE>; 482 481 clock-names = "gpio", "port"; 483 - gpio-ranges = <&iomuxc 0 96 32>; 482 + gpio-ranges = <&iomuxc 0 38 28>, <&iomuxc 28 36 2>; 484 483 }; 485 484 486 485 gpio1: gpio@47400080 { ··· 494 493 clocks = <&clk IMX93_CLK_GPIO1_GATE>, 495 494 <&clk IMX93_CLK_GPIO1_GATE>; 496 495 clock-names = "gpio", "port"; 497 - gpio-ranges = <&iomuxc 0 0 32>; 496 + gpio-ranges = <&iomuxc 0 92 16>; 498 497 }; 499 498 500 499 s4muap: mailbox@47520000 { ··· 502 501 reg = <0x47520000 0x10000>; 503 502 interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>, 504 503 <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>; 505 - interrupt-names = "txirq", "rxirq"; 504 + interrupt-names = "tx", "rx"; 506 505 #mbox-cells = <2>; 507 506 }; 508 507
+11
drivers/firmware/arm_scmi/bus.c
··· 216 216 device_unregister(&scmi_dev->dev); 217 217 } 218 218 219 + void scmi_device_link_add(struct device *consumer, struct device *supplier) 220 + { 221 + struct device_link *link; 222 + 223 + link = device_link_add(consumer, supplier, DL_FLAG_AUTOREMOVE_CONSUMER); 224 + 225 + WARN_ON(!link); 226 + } 227 + 219 228 void scmi_set_handle(struct scmi_device *scmi_dev) 220 229 { 221 230 scmi_dev->handle = scmi_handle_get(&scmi_dev->dev); 231 + if (scmi_dev->handle) 232 + scmi_device_link_add(&scmi_dev->dev, scmi_dev->handle->dev); 222 233 } 223 234 224 235 int scmi_protocol_register(const struct scmi_protocol *proto)
+4 -1
drivers/firmware/arm_scmi/common.h
··· 97 97 struct scmi_revision_info * 98 98 scmi_revision_area_get(const struct scmi_protocol_handle *ph); 99 99 int scmi_handle_put(const struct scmi_handle *handle); 100 + void scmi_device_link_add(struct device *consumer, struct device *supplier); 100 101 struct scmi_handle *scmi_handle_get(struct device *dev); 101 102 void scmi_set_handle(struct scmi_device *scmi_dev); 102 103 void scmi_setup_protocol_implemented(const struct scmi_protocol_handle *ph, ··· 118 117 * 119 118 * @dev: Reference to device in the SCMI hierarchy corresponding to this 120 119 * channel 120 + * @rx_timeout_ms: The configured RX timeout in milliseconds. 121 121 * @handle: Pointer to SCMI entity handle 122 122 * @no_completion_irq: Flag to indicate that this channel has no completion 123 123 * interrupt mechanism for synchronous commands. ··· 128 126 */ 129 127 struct scmi_chan_info { 130 128 struct device *dev; 129 + unsigned int rx_timeout_ms; 131 130 struct scmi_handle *handle; 132 131 bool no_completion_irq; 133 132 void *transport_info; ··· 235 232 struct scmi_shared_mem; 236 233 237 234 void shmem_tx_prepare(struct scmi_shared_mem __iomem *shmem, 238 - struct scmi_xfer *xfer); 235 + struct scmi_xfer *xfer, struct scmi_chan_info *cinfo); 239 236 u32 shmem_read_header(struct scmi_shared_mem __iomem *shmem); 240 237 void shmem_fetch_response(struct scmi_shared_mem __iomem *shmem, 241 238 struct scmi_xfer *xfer);
+27 -14
drivers/firmware/arm_scmi/driver.c
··· 2013 2013 return -ENOMEM; 2014 2014 2015 2015 cinfo->dev = dev; 2016 + cinfo->rx_timeout_ms = info->desc->max_rx_timeout_ms; 2016 2017 2017 2018 ret = info->desc->ops->chan_setup(cinfo, info->dev, tx); 2018 2019 if (ret) ··· 2045 2044 { 2046 2045 int ret = scmi_chan_setup(info, dev, prot_id, true); 2047 2046 2048 - if (!ret) /* Rx is optional, hence no error check */ 2049 - scmi_chan_setup(info, dev, prot_id, false); 2047 + if (!ret) { 2048 + /* Rx is optional, report only memory errors */ 2049 + ret = scmi_chan_setup(info, dev, prot_id, false); 2050 + if (ret && ret != -ENOMEM) 2051 + ret = 0; 2052 + } 2050 2053 2051 2054 return ret; 2052 2055 } ··· 2278 2273 sdev = scmi_get_protocol_device(child, info, 2279 2274 id_table->protocol_id, 2280 2275 id_table->name); 2281 - /* Set handle if not already set: device existed */ 2282 - if (sdev && !sdev->handle) 2283 - sdev->handle = 2284 - scmi_handle_get_from_info_unlocked(info); 2276 + if (sdev) { 2277 + /* Set handle if not already set: device existed */ 2278 + if (!sdev->handle) 2279 + sdev->handle = 2280 + scmi_handle_get_from_info_unlocked(info); 2281 + /* Relink consumer and suppliers */ 2282 + if (sdev->handle) 2283 + scmi_device_link_add(&sdev->dev, 2284 + sdev->handle->dev); 2285 + } 2285 2286 } else { 2286 2287 dev_err(info->dev, 2287 2288 "Failed. SCMI protocol %d not active.\n", ··· 2486 2475 2487 2476 static int scmi_remove(struct platform_device *pdev) 2488 2477 { 2489 - int ret = 0, id; 2478 + int ret, id; 2490 2479 struct scmi_info *info = platform_get_drvdata(pdev); 2491 2480 struct device_node *child; 2492 2481 2493 2482 mutex_lock(&scmi_list_mutex); 2494 2483 if (info->users) 2495 - ret = -EBUSY; 2496 - else 2497 - list_del(&info->node); 2484 + dev_warn(&pdev->dev, 2485 + "Still active SCMI users will be forcibly unbound.\n"); 2486 + list_del(&info->node); 2498 2487 mutex_unlock(&scmi_list_mutex); 2499 - 2500 - if (ret) 2501 - return ret; 2502 2488 2503 2489 scmi_notification_exit(&info->handle); 2504 2490 ··· 2508 2500 idr_destroy(&info->active_protocols); 2509 2501 2510 2502 /* Safe to free channels since no more users */ 2511 - return scmi_cleanup_txrx_channels(info); 2503 + ret = scmi_cleanup_txrx_channels(info); 2504 + if (ret) 2505 + dev_warn(&pdev->dev, "Failed to cleanup SCMI channels.\n"); 2506 + 2507 + return 0; 2512 2508 } 2513 2509 2514 2510 static ssize_t protocol_version_show(struct device *dev, ··· 2583 2571 static struct platform_driver scmi_driver = { 2584 2572 .driver = { 2585 2573 .name = "arm-scmi", 2574 + .suppress_bind_attrs = true, 2586 2575 .of_match_table = scmi_of_match, 2587 2576 .dev_groups = versions_groups, 2588 2577 },
+1 -1
drivers/firmware/arm_scmi/mailbox.c
··· 36 36 { 37 37 struct scmi_mailbox *smbox = client_to_scmi_mailbox(cl); 38 38 39 - shmem_tx_prepare(smbox->shmem, m); 39 + shmem_tx_prepare(smbox->shmem, m, smbox->cinfo); 40 40 } 41 41 42 42 static void rx_callback(struct mbox_client *cl, void *m)
+1 -1
drivers/firmware/arm_scmi/optee.c
··· 498 498 msg_tx_prepare(channel->req.msg, xfer); 499 499 ret = invoke_process_msg_channel(channel, msg_command_size(xfer)); 500 500 } else { 501 - shmem_tx_prepare(channel->req.shmem, xfer); 501 + shmem_tx_prepare(channel->req.shmem, xfer, cinfo); 502 502 ret = invoke_process_smt_channel(channel); 503 503 } 504 504
+27 -4
drivers/firmware/arm_scmi/shmem.c
··· 5 5 * Copyright (C) 2019 ARM Ltd. 6 6 */ 7 7 8 + #include <linux/ktime.h> 8 9 #include <linux/io.h> 9 10 #include <linux/processor.h> 10 11 #include <linux/types.h> 12 + 13 + #include <asm-generic/bug.h> 11 14 12 15 #include "common.h" 13 16 ··· 33 30 }; 34 31 35 32 void shmem_tx_prepare(struct scmi_shared_mem __iomem *shmem, 36 - struct scmi_xfer *xfer) 33 + struct scmi_xfer *xfer, struct scmi_chan_info *cinfo) 37 34 { 35 + ktime_t stop; 36 + 38 37 /* 39 38 * Ideally channel must be free by now unless OS timeout last 40 39 * request and platform continued to process the same, wait 41 40 * until it releases the shared memory, otherwise we may endup 42 - * overwriting its response with new message payload or vice-versa 41 + * overwriting its response with new message payload or vice-versa. 42 + * Giving up anyway after twice the expected channel timeout so as 43 + * not to bail-out on intermittent issues where the platform is 44 + * occasionally a bit slower to answer. 45 + * 46 + * Note that after a timeout is detected we bail-out and carry on but 47 + * the transport functionality is probably permanently compromised: 48 + * this is just to ease debugging and avoid complete hangs on boot 49 + * due to a misbehaving SCMI firmware. 43 50 */ 44 - spin_until_cond(ioread32(&shmem->channel_status) & 45 - SCMI_SHMEM_CHAN_STAT_CHANNEL_FREE); 51 + stop = ktime_add_ms(ktime_get(), 2 * cinfo->rx_timeout_ms); 52 + spin_until_cond((ioread32(&shmem->channel_status) & 53 + SCMI_SHMEM_CHAN_STAT_CHANNEL_FREE) || 54 + ktime_after(ktime_get(), stop)); 55 + if (!(ioread32(&shmem->channel_status) & 56 + SCMI_SHMEM_CHAN_STAT_CHANNEL_FREE)) { 57 + WARN_ON_ONCE(1); 58 + dev_err(cinfo->dev, 59 + "Timeout waiting for a free TX channel !\n"); 60 + return; 61 + } 62 + 46 63 /* Mark channel busy + clear error */ 47 64 iowrite32(0x0, &shmem->channel_status); 48 65 iowrite32(xfer->hdr.poll_completion ? 0 : SCMI_SHMEM_FLAG_INTR_ENABLED,
+1 -1
drivers/firmware/arm_scmi/smc.c
··· 188 188 */ 189 189 smc_channel_lock_acquire(scmi_info, xfer); 190 190 191 - shmem_tx_prepare(scmi_info->shmem, xfer); 191 + shmem_tx_prepare(scmi_info->shmem, xfer, cinfo); 192 192 193 193 arm_smccc_1_1_invoke(scmi_info->func_id, 0, 0, 0, 0, 0, 0, 0, &res); 194 194
+16 -10
drivers/firmware/arm_scmi/virtio.c
··· 148 148 { 149 149 unsigned long flags; 150 150 DECLARE_COMPLETION_ONSTACK(vioch_shutdown_done); 151 - void *deferred_wq = NULL; 152 151 153 152 /* 154 153 * Prepare to wait for the last release if not already released ··· 161 162 162 163 vioch->shutdown_done = &vioch_shutdown_done; 163 164 virtio_break_device(vioch->vqueue->vdev); 164 - if (!vioch->is_rx && vioch->deferred_tx_wq) { 165 - deferred_wq = vioch->deferred_tx_wq; 165 + if (!vioch->is_rx && vioch->deferred_tx_wq) 166 166 /* Cannot be kicked anymore after this...*/ 167 167 vioch->deferred_tx_wq = NULL; 168 - } 169 168 spin_unlock_irqrestore(&vioch->lock, flags); 170 - 171 - if (deferred_wq) 172 - destroy_workqueue(deferred_wq); 173 169 174 170 scmi_vio_channel_release(vioch); 175 171 ··· 410 416 return vioch && !vioch->cinfo; 411 417 } 412 418 419 + static void scmi_destroy_tx_workqueue(void *deferred_tx_wq) 420 + { 421 + destroy_workqueue(deferred_tx_wq); 422 + } 423 + 413 424 static int virtio_chan_setup(struct scmi_chan_info *cinfo, struct device *dev, 414 425 bool tx) 415 426 { ··· 429 430 430 431 /* Setup a deferred worker for polling. */ 431 432 if (tx && !vioch->deferred_tx_wq) { 433 + int ret; 434 + 432 435 vioch->deferred_tx_wq = 433 436 alloc_workqueue(dev_name(&scmi_vdev->dev), 434 437 WQ_UNBOUND | WQ_FREEZABLE | WQ_SYSFS, 435 438 0); 436 439 if (!vioch->deferred_tx_wq) 437 440 return -ENOMEM; 441 + 442 + ret = devm_add_action_or_reset(dev, scmi_destroy_tx_workqueue, 443 + vioch->deferred_tx_wq); 444 + if (ret) 445 + return ret; 438 446 439 447 INIT_WORK(&vioch->deferred_tx_work, 440 448 scmi_vio_deferred_tx_worker); ··· 450 444 for (i = 0; i < vioch->max_msg; i++) { 451 445 struct scmi_vio_msg *msg; 452 446 453 - msg = devm_kzalloc(cinfo->dev, sizeof(*msg), GFP_KERNEL); 447 + msg = devm_kzalloc(dev, sizeof(*msg), GFP_KERNEL); 454 448 if (!msg) 455 449 return -ENOMEM; 456 450 457 451 if (tx) { 458 - msg->request = devm_kzalloc(cinfo->dev, 452 + msg->request = devm_kzalloc(dev, 459 453 VIRTIO_SCMI_MAX_PDU_SIZE, 460 454 GFP_KERNEL); 461 455 if (!msg->request) ··· 464 458 refcount_set(&msg->users, 1); 465 459 } 466 460 467 - msg->input = devm_kzalloc(cinfo->dev, VIRTIO_SCMI_MAX_PDU_SIZE, 461 + msg->input = devm_kzalloc(dev, VIRTIO_SCMI_MAX_PDU_SIZE, 468 462 GFP_KERNEL); 469 463 if (!msg->input) 470 464 return -ENOMEM;
+15 -2
drivers/soc/imx/imx93-pd.c
··· 135 135 136 136 ret = pm_genpd_init(&domain->genpd, NULL, domain->init_off); 137 137 if (ret) 138 - return ret; 138 + goto err_clk_unprepare; 139 139 140 140 platform_set_drvdata(pdev, domain); 141 141 142 - return of_genpd_add_provider_simple(np, &domain->genpd); 142 + ret = of_genpd_add_provider_simple(np, &domain->genpd); 143 + if (ret) 144 + goto err_genpd_remove; 145 + 146 + return 0; 147 + 148 + err_genpd_remove: 149 + pm_genpd_remove(&domain->genpd); 150 + 151 + err_clk_unprepare: 152 + if (!domain->init_off) 153 + clk_bulk_disable_unprepare(domain->num_clks, domain->clks); 154 + 155 + return ret; 143 156 } 144 157 145 158 static const struct of_device_id imx93_pd_ids[] = {