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

Pull ARM SoC fixes from Arnd Bergmann:
"A number of fixes have accumulated, but they are largely for harmless
issues:

- Several OF node leak fixes

- A fix to the Exynos7885 UART clock description

- DTS fixes to prevent boot failures on TI AM64 and J721s2

- Bus probe error handling fixes for Baikal-T1

- A fixup to the way STM32 SoCs use separate dts files for different
firmware stacks

- Multiple code fixes for Arm SCMI firmware, all dealing with
robustness of the implementation

- Multiple NXP i.MX devicetree fixes, addressing incorrect data in DT
nodes

- Three updates to the MAINTAINERS file, including Florian Fainelli
taking over BCM283x/BCM2711 (Raspberry Pi) from Nicolas Saenz
Julienne"

* tag 'soc-fixes-5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (29 commits)
ARM: dts: aspeed: nuvia: rename vendor nuvia to qcom
arm: mach-spear: Add missing of_node_put() in time.c
ARM: cns3xxx: Fix refcount leak in cns3xxx_init
MAINTAINERS: Update email address
arm64: dts: ti: k3-am64-main: Remove support for HS400 speed mode
arm64: dts: ti: k3-j721s2: Fix overlapping GICD memory region
ARM: dts: bcm2711-rpi-400: Fix GPIO line names
bus: bt1-axi: Don't print error on -EPROBE_DEFER
bus: bt1-apb: Don't print error on -EPROBE_DEFER
ARM: Fix refcount leak in axxia_boot_secondary
ARM: dts: stm32: move SCMI related nodes in a dedicated file for stm32mp15
soc: imx: imx8m-blk-ctrl: fix display clock for LCDIF2 power domain
ARM: dts: imx6qdl-colibri: Fix capacitive touch reset polarity
ARM: dts: imx6qdl: correct PU regulator ramp delay
firmware: arm_scmi: Fix incorrect error propagation in scmi_voltage_descriptors_get
firmware: arm_scmi: Avoid using extended string-buffers sizes if not necessary
firmware: arm_scmi: Fix SENSOR_AXIS_NAME_GET behaviour when unsupported
ARM: dts: imx7: Move hsic_phy power domain to HSIC PHY node
soc: bcm: brcmstb: pm: pm-arm: Fix refcount leak in brcmstb_pm_probe
MAINTAINERS: Update BCM2711/BCM2835 maintainer
...

+5 -4
MAINTAINERS
··· 2469 2469 M: Chester Lin <clin@suse.com> 2470 2470 R: Andreas Färber <afaerber@suse.de> 2471 2471 R: Matthias Brugger <mbrugger@suse.com> 2472 + R: NXP S32 Linux Team <s32@nxp.com> 2472 2473 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 2473 2474 S: Maintained 2474 2475 F: arch/arm64/boot/dts/freescale/s32g*.dts* ··· 3813 3812 N: bcm[9]?47622 3814 3813 3815 3814 BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE 3816 - M: Nicolas Saenz Julienne <nsaenz@kernel.org> 3815 + M: Florian Fainelli <f.fainelli@gmail.com> 3817 3816 R: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com> 3818 3817 L: linux-rpi-kernel@lists.infradead.org (moderated for non-subscribers) 3819 3818 L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) 3820 3819 S: Maintained 3821 - T: git git://git.kernel.org/pub/scm/linux/kernel/git/nsaenz/linux-rpi.git 3820 + T: git git://github.com/broadcom/stblinux.git 3822 3821 F: Documentation/devicetree/bindings/pci/brcm,stb-pcie.yaml 3823 3822 F: drivers/pci/controller/pcie-brcmstb.c 3824 3823 F: drivers/staging/vc04_services ··· 16537 16536 F: drivers/cpufreq/qcom-cpufreq-nvmem.c 16538 16537 16539 16538 QUALCOMM CRYPTO DRIVERS 16540 - M: Thara Gopinath <thara.gopinath@linaro.org> 16539 + M: Thara Gopinath <thara.gopinath@gmail.com> 16541 16540 L: linux-crypto@vger.kernel.org 16542 16541 L: linux-arm-msm@vger.kernel.org 16543 16542 S: Maintained ··· 16648 16647 16649 16648 QUALCOMM TSENS THERMAL DRIVER 16650 16649 M: Amit Kucheria <amitk@kernel.org> 16651 - M: Thara Gopinath <thara.gopinath@linaro.org> 16650 + M: Thara Gopinath <thara.gopinath@gmail.com> 16652 16651 L: linux-pm@vger.kernel.org 16653 16652 L: linux-arm-msm@vger.kernel.org 16654 16653 S: Maintained
+1 -1
arch/arm/boot/dts/Makefile
··· 1586 1586 aspeed-bmc-lenovo-hr630.dtb \ 1587 1587 aspeed-bmc-lenovo-hr855xg2.dtb \ 1588 1588 aspeed-bmc-microsoft-olympus.dtb \ 1589 - aspeed-bmc-nuvia-dc-scm.dtb \ 1590 1589 aspeed-bmc-opp-lanyang.dtb \ 1591 1590 aspeed-bmc-opp-mihawk.dtb \ 1592 1591 aspeed-bmc-opp-mowgli.dtb \ ··· 1598 1599 aspeed-bmc-opp-witherspoon.dtb \ 1599 1600 aspeed-bmc-opp-zaius.dtb \ 1600 1601 aspeed-bmc-portwell-neptune.dtb \ 1602 + aspeed-bmc-qcom-dc-scm-v1.dtb \ 1601 1603 aspeed-bmc-quanta-q71l.dtb \ 1602 1604 aspeed-bmc-quanta-s6q.dtb \ 1603 1605 aspeed-bmc-supermicro-x11spi.dtb \
+2 -2
arch/arm/boot/dts/aspeed-bmc-nuvia-dc-scm.dts arch/arm/boot/dts/aspeed-bmc-qcom-dc-scm-v1.dts
··· 6 6 #include "aspeed-g6.dtsi" 7 7 8 8 / { 9 - model = "Nuvia DC-SCM BMC"; 10 - compatible = "nuvia,dc-scm-bmc", "aspeed,ast2600"; 9 + model = "Qualcomm DC-SCM V1 BMC"; 10 + compatible = "qcom,dc-scm-v1-bmc", "aspeed,ast2600"; 11 11 12 12 aliases { 13 13 serial4 = &uart5;
+3 -3
arch/arm/boot/dts/bcm2711-rpi-400.dts
··· 28 28 &expgpio { 29 29 gpio-line-names = "BT_ON", 30 30 "WL_ON", 31 - "", 31 + "PWR_LED_OFF", 32 32 "GLOBAL_RESET", 33 33 "VDD_SD_IO_SEL", 34 - "CAM_GPIO", 34 + "GLOBAL_SHUTDOWN", 35 35 "SD_PWR_ON", 36 - "SD_OC_N"; 36 + "SHUTDOWN_REQUEST"; 37 37 }; 38 38 39 39 &genet_mdio {
+1 -1
arch/arm/boot/dts/imx6qdl-colibri.dtsi
··· 593 593 pinctrl-names = "default"; 594 594 pinctrl-0 = <&pinctrl_atmel_conn>; 595 595 reg = <0x4a>; 596 - reset-gpios = <&gpio1 14 GPIO_ACTIVE_HIGH>; /* SODIMM 106 */ 596 + reset-gpios = <&gpio1 14 GPIO_ACTIVE_LOW>; /* SODIMM 106 */ 597 597 status = "disabled"; 598 598 }; 599 599 };
+1 -1
arch/arm/boot/dts/imx6qdl.dtsi
··· 762 762 regulator-name = "vddpu"; 763 763 regulator-min-microvolt = <725000>; 764 764 regulator-max-microvolt = <1450000>; 765 - regulator-enable-ramp-delay = <150>; 765 + regulator-enable-ramp-delay = <380>; 766 766 anatop-reg-offset = <0x140>; 767 767 anatop-vol-bit-shift = <9>; 768 768 anatop-vol-bit-width = <5>;
+1 -1
arch/arm/boot/dts/imx7s.dtsi
··· 120 120 compatible = "usb-nop-xceiv"; 121 121 clocks = <&clks IMX7D_USB_HSIC_ROOT_CLK>; 122 122 clock-names = "main_clk"; 123 + power-domains = <&pgc_hsic_phy>; 123 124 #phy-cells = <0>; 124 125 }; 125 126 ··· 1154 1153 compatible = "fsl,imx7d-usb", "fsl,imx27-usb"; 1155 1154 reg = <0x30b30000 0x200>; 1156 1155 interrupts = <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>; 1157 - power-domains = <&pgc_hsic_phy>; 1158 1156 clocks = <&clks IMX7D_USB_CTRL_CLK>; 1159 1157 fsl,usbphy = <&usbphynop3>; 1160 1158 fsl,usbmisc = <&usbmisc3 0>;
+47
arch/arm/boot/dts/stm32mp15-scmi.dtsi
··· 1 + // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) 2 + /* 3 + * Copyright (C) STMicroelectronics 2022 - All Rights Reserved 4 + * Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics. 5 + */ 6 + 7 + / { 8 + firmware { 9 + optee: optee { 10 + compatible = "linaro,optee-tz"; 11 + method = "smc"; 12 + }; 13 + 14 + scmi: scmi { 15 + compatible = "linaro,scmi-optee"; 16 + #address-cells = <1>; 17 + #size-cells = <0>; 18 + linaro,optee-channel-id = <0>; 19 + shmem = <&scmi_shm>; 20 + 21 + scmi_clk: protocol@14 { 22 + reg = <0x14>; 23 + #clock-cells = <1>; 24 + }; 25 + 26 + scmi_reset: protocol@16 { 27 + reg = <0x16>; 28 + #reset-cells = <1>; 29 + }; 30 + }; 31 + }; 32 + 33 + soc { 34 + scmi_sram: sram@2ffff000 { 35 + compatible = "mmio-sram"; 36 + reg = <0x2ffff000 0x1000>; 37 + #address-cells = <1>; 38 + #size-cells = <1>; 39 + ranges = <0 0x2ffff000 0x1000>; 40 + 41 + scmi_shm: scmi-sram@0 { 42 + compatible = "arm,scmi-shmem"; 43 + reg = <0 0x80>; 44 + }; 45 + }; 46 + }; 47 + };
-41
arch/arm/boot/dts/stm32mp151.dtsi
··· 115 115 status = "disabled"; 116 116 }; 117 117 118 - firmware { 119 - optee: optee { 120 - compatible = "linaro,optee-tz"; 121 - method = "smc"; 122 - status = "disabled"; 123 - }; 124 - 125 - scmi: scmi { 126 - compatible = "linaro,scmi-optee"; 127 - #address-cells = <1>; 128 - #size-cells = <0>; 129 - linaro,optee-channel-id = <0>; 130 - shmem = <&scmi_shm>; 131 - status = "disabled"; 132 - 133 - scmi_clk: protocol@14 { 134 - reg = <0x14>; 135 - #clock-cells = <1>; 136 - }; 137 - 138 - scmi_reset: protocol@16 { 139 - reg = <0x16>; 140 - #reset-cells = <1>; 141 - }; 142 - }; 143 - }; 144 - 145 118 soc { 146 119 compatible = "simple-bus"; 147 120 #address-cells = <1>; 148 121 #size-cells = <1>; 149 122 interrupt-parent = <&intc>; 150 123 ranges; 151 - 152 - scmi_sram: sram@2ffff000 { 153 - compatible = "mmio-sram"; 154 - reg = <0x2ffff000 0x1000>; 155 - #address-cells = <1>; 156 - #size-cells = <1>; 157 - ranges = <0 0x2ffff000 0x1000>; 158 - 159 - scmi_shm: scmi-sram@0 { 160 - compatible = "arm,scmi-shmem"; 161 - reg = <0 0x80>; 162 - status = "disabled"; 163 - }; 164 - }; 165 124 166 125 timers2: timer@40000000 { 167 126 #address-cells = <1>;
+1 -12
arch/arm/boot/dts/stm32mp157a-dk1-scmi.dts
··· 7 7 /dts-v1/; 8 8 9 9 #include "stm32mp157a-dk1.dts" 10 + #include "stm32mp15-scmi.dtsi" 10 11 11 12 / { 12 13 model = "STMicroelectronics STM32MP157A-DK1 SCMI Discovery Board"; ··· 55 54 resets = <&scmi_reset RST_SCMI_MCU>; 56 55 }; 57 56 58 - &optee { 59 - status = "okay"; 60 - }; 61 - 62 57 &rcc { 63 58 compatible = "st,stm32mp1-rcc-secure", "syscon"; 64 59 clock-names = "hse", "hsi", "csi", "lse", "lsi"; ··· 72 75 73 76 &rtc { 74 77 clocks = <&scmi_clk CK_SCMI_RTCAPB>, <&scmi_clk CK_SCMI_RTC>; 75 - }; 76 - 77 - &scmi { 78 - status = "okay"; 79 - }; 80 - 81 - &scmi_shm { 82 - status = "okay"; 83 78 };
+1 -12
arch/arm/boot/dts/stm32mp157c-dk2-scmi.dts
··· 7 7 /dts-v1/; 8 8 9 9 #include "stm32mp157c-dk2.dts" 10 + #include "stm32mp15-scmi.dtsi" 10 11 11 12 / { 12 13 model = "STMicroelectronics STM32MP157C-DK2 SCMI Discovery Board"; ··· 64 63 resets = <&scmi_reset RST_SCMI_MCU>; 65 64 }; 66 65 67 - &optee { 68 - status = "okay"; 69 - }; 70 - 71 66 &rcc { 72 67 compatible = "st,stm32mp1-rcc-secure", "syscon"; 73 68 clock-names = "hse", "hsi", "csi", "lse", "lsi"; ··· 81 84 82 85 &rtc { 83 86 clocks = <&scmi_clk CK_SCMI_RTCAPB>, <&scmi_clk CK_SCMI_RTC>; 84 - }; 85 - 86 - &scmi { 87 - status = "okay"; 88 - }; 89 - 90 - &scmi_shm { 91 - status = "okay"; 92 87 };
+1 -12
arch/arm/boot/dts/stm32mp157c-ed1-scmi.dts
··· 7 7 /dts-v1/; 8 8 9 9 #include "stm32mp157c-ed1.dts" 10 + #include "stm32mp15-scmi.dtsi" 10 11 11 12 / { 12 13 model = "STMicroelectronics STM32MP157C-ED1 SCMI eval daughter"; ··· 60 59 resets = <&scmi_reset RST_SCMI_MCU>; 61 60 }; 62 61 63 - &optee { 64 - status = "okay"; 65 - }; 66 - 67 62 &rcc { 68 63 compatible = "st,stm32mp1-rcc-secure", "syscon"; 69 64 clock-names = "hse", "hsi", "csi", "lse", "lsi"; ··· 77 80 78 81 &rtc { 79 82 clocks = <&scmi_clk CK_SCMI_RTCAPB>, <&scmi_clk CK_SCMI_RTC>; 80 - }; 81 - 82 - &scmi { 83 - status = "okay"; 84 - }; 85 - 86 - &scmi_shm { 87 - status = "okay"; 88 83 };
+1 -12
arch/arm/boot/dts/stm32mp157c-ev1-scmi.dts
··· 7 7 /dts-v1/; 8 8 9 9 #include "stm32mp157c-ev1.dts" 10 + #include "stm32mp15-scmi.dtsi" 10 11 11 12 / { 12 13 model = "STMicroelectronics STM32MP157C-EV1 SCMI eval daughter on eval mother"; ··· 69 68 resets = <&scmi_reset RST_SCMI_MCU>; 70 69 }; 71 70 72 - &optee { 73 - status = "okay"; 74 - }; 75 - 76 71 &rcc { 77 72 compatible = "st,stm32mp1-rcc-secure", "syscon"; 78 73 clock-names = "hse", "hsi", "csi", "lse", "lsi"; ··· 86 89 87 90 &rtc { 88 91 clocks = <&scmi_clk CK_SCMI_RTCAPB>, <&scmi_clk CK_SCMI_RTC>; 89 - }; 90 - 91 - &scmi { 92 - status = "okay"; 93 - }; 94 - 95 - &scmi_shm { 96 - status = "okay"; 97 92 };
+1
arch/arm/mach-axxia/platsmp.c
··· 39 39 return -ENOENT; 40 40 41 41 syscon = of_iomap(syscon_np, 0); 42 + of_node_put(syscon_np); 42 43 if (!syscon) 43 44 return -ENOMEM; 44 45
+2
arch/arm/mach-cns3xxx/core.c
··· 372 372 /* De-Asscer SATA Reset */ 373 373 cns3xxx_pwr_soft_rst(CNS3XXX_PWR_SOFTWARE_RST(SATA)); 374 374 } 375 + of_node_put(dn); 375 376 376 377 dn = of_find_compatible_node(NULL, NULL, "cavium,cns3420-sdhci"); 377 378 if (of_device_is_available(dn)) { ··· 386 385 cns3xxx_pwr_clk_en(CNS3XXX_PWR_CLK_EN(SDIO)); 387 386 cns3xxx_pwr_soft_rst(CNS3XXX_PWR_SOFTWARE_RST(SDIO)); 388 387 } 388 + of_node_put(dn); 389 389 390 390 pm_power_off = cns3xxx_power_off; 391 391
+1
arch/arm/mach-exynos/exynos.c
··· 149 149 np = of_find_matching_node(NULL, exynos_dt_pmu_match); 150 150 if (np) 151 151 pmu_base_addr = of_iomap(np, 0); 152 + of_node_put(np); 152 153 } 153 154 154 155 static void __init exynos_init_irq(void)
+6 -2
arch/arm/mach-spear/time.c
··· 218 218 irq = irq_of_parse_and_map(np, 0); 219 219 if (!irq) { 220 220 pr_err("%s: No irq passed for timer via DT\n", __func__); 221 - return; 221 + goto err_put_np; 222 222 } 223 223 224 224 gpt_base = of_iomap(np, 0); 225 225 if (!gpt_base) { 226 226 pr_err("%s: of iomap failed\n", __func__); 227 - return; 227 + goto err_put_np; 228 228 } 229 229 230 230 gpt_clk = clk_get_sys("gpt0", NULL); ··· 239 239 goto err_prepare_enable_clk; 240 240 } 241 241 242 + of_node_put(np); 243 + 242 244 spear_clockevent_init(irq); 243 245 spear_clocksource_init(); 244 246 ··· 250 248 clk_put(gpt_clk); 251 249 err_iomap: 252 250 iounmap(gpt_base); 251 + err_put_np: 252 + of_node_put(np); 253 253 }
+6 -6
arch/arm64/boot/dts/exynos/exynos7885.dtsi
··· 280 280 interrupts = <GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>; 281 281 pinctrl-names = "default"; 282 282 pinctrl-0 = <&uart0_bus>; 283 - clocks = <&cmu_peri CLK_GOUT_UART0_EXT_UCLK>, 284 - <&cmu_peri CLK_GOUT_UART0_PCLK>; 283 + clocks = <&cmu_peri CLK_GOUT_UART0_PCLK>, 284 + <&cmu_peri CLK_GOUT_UART0_EXT_UCLK>; 285 285 clock-names = "uart", "clk_uart_baud0"; 286 286 samsung,uart-fifosize = <64>; 287 287 status = "disabled"; ··· 293 293 interrupts = <GIC_SPI 247 IRQ_TYPE_LEVEL_HIGH>; 294 294 pinctrl-names = "default"; 295 295 pinctrl-0 = <&uart1_bus>; 296 - clocks = <&cmu_peri CLK_GOUT_UART1_EXT_UCLK>, 297 - <&cmu_peri CLK_GOUT_UART1_PCLK>; 296 + clocks = <&cmu_peri CLK_GOUT_UART1_PCLK>, 297 + <&cmu_peri CLK_GOUT_UART1_EXT_UCLK>; 298 298 clock-names = "uart", "clk_uart_baud0"; 299 299 samsung,uart-fifosize = <256>; 300 300 status = "disabled"; ··· 306 306 interrupts = <GIC_SPI 279 IRQ_TYPE_LEVEL_HIGH>; 307 307 pinctrl-names = "default"; 308 308 pinctrl-0 = <&uart2_bus>; 309 - clocks = <&cmu_peri CLK_GOUT_UART2_EXT_UCLK>, 310 - <&cmu_peri CLK_GOUT_UART2_PCLK>; 309 + clocks = <&cmu_peri CLK_GOUT_UART2_PCLK>, 310 + <&cmu_peri CLK_GOUT_UART2_EXT_UCLK>; 311 311 clock-names = "uart", "clk_uart_baud0"; 312 312 samsung,uart-fifosize = <256>; 313 313 status = "disabled";
+1 -1
arch/arm64/boot/dts/freescale/s32g2.dtsi
··· 79 79 }; 80 80 }; 81 81 82 - soc { 82 + soc@0 { 83 83 compatible = "simple-bus"; 84 84 #address-cells = <1>; 85 85 #size-cells = <1>;
-2
arch/arm64/boot/dts/ti/k3-am64-main.dtsi
··· 456 456 clock-names = "clk_ahb", "clk_xin"; 457 457 mmc-ddr-1_8v; 458 458 mmc-hs200-1_8v; 459 - mmc-hs400-1_8v; 460 459 ti,trm-icp = <0x2>; 461 460 ti,otap-del-sel-legacy = <0x0>; 462 461 ti,otap-del-sel-mmc-hs = <0x0>; 463 462 ti,otap-del-sel-ddr52 = <0x6>; 464 463 ti,otap-del-sel-hs200 = <0x7>; 465 - ti,otap-del-sel-hs400 = <0x4>; 466 464 }; 467 465 468 466 sdhci1: mmc@fa00000 {
+1 -1
arch/arm64/boot/dts/ti/k3-j721s2-main.dtsi
··· 33 33 ranges; 34 34 #interrupt-cells = <3>; 35 35 interrupt-controller; 36 - reg = <0x00 0x01800000 0x00 0x200000>, /* GICD */ 36 + reg = <0x00 0x01800000 0x00 0x100000>, /* GICD */ 37 37 <0x00 0x01900000 0x00 0x100000>, /* GICR */ 38 38 <0x00 0x6f000000 0x00 0x2000>, /* GICC */ 39 39 <0x00 0x6f010000 0x00 0x1000>, /* GICH */
+6 -8
drivers/bus/bt1-apb.c
··· 175 175 int ret; 176 176 177 177 apb->prst = devm_reset_control_get_optional_exclusive(apb->dev, "prst"); 178 - if (IS_ERR(apb->prst)) { 179 - dev_warn(apb->dev, "Couldn't get reset control line\n"); 180 - return PTR_ERR(apb->prst); 181 - } 178 + if (IS_ERR(apb->prst)) 179 + return dev_err_probe(apb->dev, PTR_ERR(apb->prst), 180 + "Couldn't get reset control line\n"); 182 181 183 182 ret = reset_control_deassert(apb->prst); 184 183 if (ret) ··· 198 199 int ret; 199 200 200 201 apb->pclk = devm_clk_get(apb->dev, "pclk"); 201 - if (IS_ERR(apb->pclk)) { 202 - dev_err(apb->dev, "Couldn't get APB clock descriptor\n"); 203 - return PTR_ERR(apb->pclk); 204 - } 202 + if (IS_ERR(apb->pclk)) 203 + return dev_err_probe(apb->dev, PTR_ERR(apb->pclk), 204 + "Couldn't get APB clock descriptor\n"); 205 205 206 206 ret = clk_prepare_enable(apb->pclk); 207 207 if (ret) {
+6 -8
drivers/bus/bt1-axi.c
··· 135 135 int ret; 136 136 137 137 axi->arst = devm_reset_control_get_optional_exclusive(axi->dev, "arst"); 138 - if (IS_ERR(axi->arst)) { 139 - dev_warn(axi->dev, "Couldn't get reset control line\n"); 140 - return PTR_ERR(axi->arst); 141 - } 138 + if (IS_ERR(axi->arst)) 139 + return dev_err_probe(axi->dev, PTR_ERR(axi->arst), 140 + "Couldn't get reset control line\n"); 142 141 143 142 ret = reset_control_deassert(axi->arst); 144 143 if (ret) ··· 158 159 int ret; 159 160 160 161 axi->aclk = devm_clk_get(axi->dev, "aclk"); 161 - if (IS_ERR(axi->aclk)) { 162 - dev_err(axi->dev, "Couldn't get AXI Interconnect clock\n"); 163 - return PTR_ERR(axi->aclk); 164 - } 162 + if (IS_ERR(axi->aclk)) 163 + return dev_err_probe(axi->dev, PTR_ERR(axi->aclk), 164 + "Couldn't get AXI Interconnect clock\n"); 165 165 166 166 ret = clk_prepare_enable(axi->aclk); 167 167 if (ret) {
+15 -9
drivers/firmware/arm_scmi/base.c
··· 36 36 37 37 struct scmi_msg_resp_base_discover_agent { 38 38 __le32 agent_id; 39 - u8 name[SCMI_MAX_STR_SIZE]; 39 + u8 name[SCMI_SHORT_NAME_MAX_SIZE]; 40 40 }; 41 41 42 42 ··· 119 119 120 120 ret = ph->xops->do_xfer(ph, t); 121 121 if (!ret) 122 - memcpy(vendor_id, t->rx.buf, size); 122 + strscpy(vendor_id, t->rx.buf, size); 123 123 124 124 ph->xops->xfer_put(ph, t); 125 125 ··· 221 221 calc_list_sz = (1 + (loop_num_ret - 1) / sizeof(u32)) * 222 222 sizeof(u32); 223 223 if (calc_list_sz != real_list_sz) { 224 - dev_err(dev, 225 - "Malformed reply - real_sz:%zd calc_sz:%u\n", 226 - real_list_sz, calc_list_sz); 227 - ret = -EPROTO; 228 - break; 224 + dev_warn(dev, 225 + "Malformed reply - real_sz:%zd calc_sz:%u (loop_num_ret:%d)\n", 226 + real_list_sz, calc_list_sz, loop_num_ret); 227 + /* 228 + * Bail out if the expected list size is bigger than the 229 + * total payload size of the received reply. 230 + */ 231 + if (calc_list_sz > real_list_sz) { 232 + ret = -EPROTO; 233 + break; 234 + } 229 235 } 230 236 231 237 for (loop = 0; loop < loop_num_ret; loop++) ··· 276 270 ret = ph->xops->do_xfer(ph, t); 277 271 if (!ret) { 278 272 agent_info = t->rx.buf; 279 - strlcpy(name, agent_info->name, SCMI_MAX_STR_SIZE); 273 + strscpy(name, agent_info->name, SCMI_SHORT_NAME_MAX_SIZE); 280 274 } 281 275 282 276 ph->xops->xfer_put(ph, t); ··· 375 369 int id, ret; 376 370 u8 *prot_imp; 377 371 u32 version; 378 - char name[SCMI_MAX_STR_SIZE]; 372 + char name[SCMI_SHORT_NAME_MAX_SIZE]; 379 373 struct device *dev = ph->dev; 380 374 struct scmi_revision_info *rev = scmi_revision_area_get(ph); 381 375
+3 -4
drivers/firmware/arm_scmi/clock.c
··· 153 153 if (!ret) { 154 154 u32 latency = 0; 155 155 attributes = le32_to_cpu(attr->attributes); 156 - strlcpy(clk->name, attr->name, SCMI_MAX_STR_SIZE); 156 + strscpy(clk->name, attr->name, SCMI_SHORT_NAME_MAX_SIZE); 157 157 /* clock_enable_latency field is present only since SCMI v3.1 */ 158 158 if (PROTOCOL_REV_MAJOR(version) >= 0x2) 159 159 latency = le32_to_cpu(attr->clock_enable_latency); ··· 266 266 struct scmi_clock_info *clk) 267 267 { 268 268 int ret; 269 - 270 269 void *iter; 271 - struct scmi_msg_clock_describe_rates *msg; 272 270 struct scmi_iterator_ops ops = { 273 271 .prepare_message = iter_clk_describe_prepare_message, 274 272 .update_state = iter_clk_describe_update_state, ··· 279 281 280 282 iter = ph->hops->iter_response_init(ph, &ops, SCMI_MAX_NUM_RATES, 281 283 CLOCK_DESCRIBE_RATES, 282 - sizeof(*msg), &cpriv); 284 + sizeof(struct scmi_msg_clock_describe_rates), 285 + &cpriv); 283 286 if (IS_ERR(iter)) 284 287 return PTR_ERR(iter); 285 288
+3 -3
drivers/firmware/arm_scmi/perf.c
··· 252 252 dom_info->mult_factor = 253 253 (dom_info->sustained_freq_khz * 1000) / 254 254 dom_info->sustained_perf_level; 255 - strlcpy(dom_info->name, attr->name, SCMI_MAX_STR_SIZE); 255 + strscpy(dom_info->name, attr->name, SCMI_SHORT_NAME_MAX_SIZE); 256 256 } 257 257 258 258 ph->xops->xfer_put(ph, t); ··· 332 332 { 333 333 int ret; 334 334 void *iter; 335 - struct scmi_msg_perf_describe_levels *msg; 336 335 struct scmi_iterator_ops ops = { 337 336 .prepare_message = iter_perf_levels_prepare_message, 338 337 .update_state = iter_perf_levels_update_state, ··· 344 345 345 346 iter = ph->hops->iter_response_init(ph, &ops, MAX_OPPS, 346 347 PERF_DESCRIBE_LEVELS, 347 - sizeof(*msg), &ppriv); 348 + sizeof(struct scmi_msg_perf_describe_levels), 349 + &ppriv); 348 350 if (IS_ERR(iter)) 349 351 return PTR_ERR(iter); 350 352
+1 -1
drivers/firmware/arm_scmi/power.c
··· 122 122 dom_info->state_set_notify = SUPPORTS_STATE_SET_NOTIFY(flags); 123 123 dom_info->state_set_async = SUPPORTS_STATE_SET_ASYNC(flags); 124 124 dom_info->state_set_sync = SUPPORTS_STATE_SET_SYNC(flags); 125 - strlcpy(dom_info->name, attr->name, SCMI_MAX_STR_SIZE); 125 + strscpy(dom_info->name, attr->name, SCMI_SHORT_NAME_MAX_SIZE); 126 126 } 127 127 ph->xops->xfer_put(ph, t); 128 128
-2
drivers/firmware/arm_scmi/protocols.h
··· 24 24 25 25 #include <asm/unaligned.h> 26 26 27 - #define SCMI_SHORT_NAME_MAX_SIZE 16 28 - 29 27 #define PROTOCOL_REV_MINOR_MASK GENMASK(15, 0) 30 28 #define PROTOCOL_REV_MAJOR_MASK GENMASK(31, 16) 31 29 #define PROTOCOL_REV_MAJOR(x) ((u16)(FIELD_GET(PROTOCOL_REV_MAJOR_MASK, (x))))
+1 -1
drivers/firmware/arm_scmi/reset.c
··· 116 116 dom_info->latency_us = le32_to_cpu(attr->latency); 117 117 if (dom_info->latency_us == U32_MAX) 118 118 dom_info->latency_us = 0; 119 - strlcpy(dom_info->name, attr->name, SCMI_MAX_STR_SIZE); 119 + strscpy(dom_info->name, attr->name, SCMI_SHORT_NAME_MAX_SIZE); 120 120 } 121 121 122 122 ph->xops->xfer_put(ph, t);
+52 -16
drivers/firmware/arm_scmi/sensors.c
··· 338 338 struct scmi_sensor_info *s) 339 339 { 340 340 void *iter; 341 - struct scmi_msg_sensor_list_update_intervals *msg; 342 341 struct scmi_iterator_ops ops = { 343 342 .prepare_message = iter_intervals_prepare_message, 344 343 .update_state = iter_intervals_update_state, ··· 350 351 351 352 iter = ph->hops->iter_response_init(ph, &ops, s->intervals.count, 352 353 SENSOR_LIST_UPDATE_INTERVALS, 353 - sizeof(*msg), &upriv); 354 + sizeof(struct scmi_msg_sensor_list_update_intervals), 355 + &upriv); 354 356 if (IS_ERR(iter)) 355 357 return PTR_ERR(iter); 356 358 357 359 return ph->hops->iter_response_run(iter); 358 360 } 359 361 362 + struct scmi_apriv { 363 + bool any_axes_support_extended_names; 364 + struct scmi_sensor_info *s; 365 + }; 366 + 360 367 static void iter_axes_desc_prepare_message(void *message, 361 368 const unsigned int desc_index, 362 369 const void *priv) 363 370 { 364 371 struct scmi_msg_sensor_axis_description_get *msg = message; 365 - const struct scmi_sensor_info *s = priv; 372 + const struct scmi_apriv *apriv = priv; 366 373 367 374 /* Set the number of sensors to be skipped/already read */ 368 - msg->id = cpu_to_le32(s->id); 375 + msg->id = cpu_to_le32(apriv->s->id); 369 376 msg->axis_desc_index = cpu_to_le32(desc_index); 370 377 } 371 378 ··· 398 393 u32 attrh, attrl; 399 394 struct scmi_sensor_axis_info *a; 400 395 size_t dsize = SCMI_MSG_RESP_AXIS_DESCR_BASE_SZ; 401 - struct scmi_sensor_info *s = priv; 396 + struct scmi_apriv *apriv = priv; 402 397 const struct scmi_axis_descriptor *adesc = st->priv; 403 398 404 399 attrl = le32_to_cpu(adesc->attributes_low); 400 + if (SUPPORTS_EXTENDED_AXIS_NAMES(attrl)) 401 + apriv->any_axes_support_extended_names = true; 405 402 406 - a = &s->axis[st->desc_index + st->loop_idx]; 403 + a = &apriv->s->axis[st->desc_index + st->loop_idx]; 407 404 a->id = le32_to_cpu(adesc->id); 408 405 a->extended_attrs = SUPPORTS_EXTEND_ATTRS(attrl); 409 406 410 407 attrh = le32_to_cpu(adesc->attributes_high); 411 408 a->scale = S32_EXT(SENSOR_SCALE(attrh)); 412 409 a->type = SENSOR_TYPE(attrh); 413 - strscpy(a->name, adesc->name, SCMI_MAX_STR_SIZE); 410 + strscpy(a->name, adesc->name, SCMI_SHORT_NAME_MAX_SIZE); 414 411 415 412 if (a->extended_attrs) { 416 413 unsigned int ares = le32_to_cpu(adesc->resolution); ··· 451 444 void *priv) 452 445 { 453 446 struct scmi_sensor_axis_info *a; 454 - const struct scmi_sensor_info *s = priv; 447 + const struct scmi_apriv *apriv = priv; 455 448 struct scmi_sensor_axis_name_descriptor *adesc = st->priv; 449 + u32 axis_id = le32_to_cpu(adesc->axis_id); 456 450 457 - a = &s->axis[st->desc_index + st->loop_idx]; 451 + if (axis_id >= st->max_resources) 452 + return -EPROTO; 453 + 454 + /* 455 + * Pick the corresponding descriptor based on the axis_id embedded 456 + * in the reply since the list of axes supporting extended names 457 + * can be a subset of all the axes. 458 + */ 459 + a = &apriv->s->axis[axis_id]; 458 460 strscpy(a->name, adesc->name, SCMI_MAX_STR_SIZE); 459 461 st->priv = ++adesc; 460 462 ··· 474 458 scmi_sensor_axis_extended_names_get(const struct scmi_protocol_handle *ph, 475 459 struct scmi_sensor_info *s) 476 460 { 461 + int ret; 477 462 void *iter; 478 - struct scmi_msg_sensor_axis_description_get *msg; 479 463 struct scmi_iterator_ops ops = { 480 464 .prepare_message = iter_axes_desc_prepare_message, 481 465 .update_state = iter_axes_extended_name_update_state, 482 466 .process_response = iter_axes_extended_name_process_response, 483 467 }; 468 + struct scmi_apriv apriv = { 469 + .any_axes_support_extended_names = false, 470 + .s = s, 471 + }; 484 472 485 473 iter = ph->hops->iter_response_init(ph, &ops, s->num_axis, 486 474 SENSOR_AXIS_NAME_GET, 487 - sizeof(*msg), s); 475 + sizeof(struct scmi_msg_sensor_axis_description_get), 476 + &apriv); 488 477 if (IS_ERR(iter)) 489 478 return PTR_ERR(iter); 490 479 491 - return ph->hops->iter_response_run(iter); 480 + /* 481 + * Do not cause whole protocol initialization failure when failing to 482 + * get extended names for axes. 483 + */ 484 + ret = ph->hops->iter_response_run(iter); 485 + if (ret) 486 + dev_warn(ph->dev, 487 + "Failed to get axes extended names for %s (ret:%d).\n", 488 + s->name, ret); 489 + 490 + return 0; 492 491 } 493 492 494 493 static int scmi_sensor_axis_description(const struct scmi_protocol_handle *ph, ··· 512 481 { 513 482 int ret; 514 483 void *iter; 515 - struct scmi_msg_sensor_axis_description_get *msg; 516 484 struct scmi_iterator_ops ops = { 517 485 .prepare_message = iter_axes_desc_prepare_message, 518 486 .update_state = iter_axes_desc_update_state, 519 487 .process_response = iter_axes_desc_process_response, 488 + }; 489 + struct scmi_apriv apriv = { 490 + .any_axes_support_extended_names = false, 491 + .s = s, 520 492 }; 521 493 522 494 s->axis = devm_kcalloc(ph->dev, s->num_axis, ··· 529 495 530 496 iter = ph->hops->iter_response_init(ph, &ops, s->num_axis, 531 497 SENSOR_AXIS_DESCRIPTION_GET, 532 - sizeof(*msg), s); 498 + sizeof(struct scmi_msg_sensor_axis_description_get), 499 + &apriv); 533 500 if (IS_ERR(iter)) 534 501 return PTR_ERR(iter); 535 502 ··· 538 503 if (ret) 539 504 return ret; 540 505 541 - if (PROTOCOL_REV_MAJOR(version) >= 0x3) 506 + if (PROTOCOL_REV_MAJOR(version) >= 0x3 && 507 + apriv.any_axes_support_extended_names) 542 508 ret = scmi_sensor_axis_extended_names_get(ph, s); 543 509 544 510 return ret; ··· 634 598 SUPPORTS_AXIS(attrh) ? 635 599 SENSOR_AXIS_NUMBER(attrh) : 0, 636 600 SCMI_MAX_NUM_SENSOR_AXIS); 637 - strscpy(s->name, sdesc->name, SCMI_MAX_STR_SIZE); 601 + strscpy(s->name, sdesc->name, SCMI_SHORT_NAME_MAX_SIZE); 638 602 639 603 /* 640 604 * If supported overwrite short name with the extended
+5 -10
drivers/firmware/arm_scmi/voltage.c
··· 180 180 { 181 181 int ret; 182 182 void *iter; 183 - struct scmi_msg_cmd_describe_levels *msg; 184 183 struct scmi_iterator_ops ops = { 185 184 .prepare_message = iter_volt_levels_prepare_message, 186 185 .update_state = iter_volt_levels_update_state, ··· 192 193 193 194 iter = ph->hops->iter_response_init(ph, &ops, v->num_levels, 194 195 VOLTAGE_DESCRIBE_LEVELS, 195 - sizeof(*msg), &vpriv); 196 + sizeof(struct scmi_msg_cmd_describe_levels), 197 + &vpriv); 196 198 if (IS_ERR(iter)) 197 199 return PTR_ERR(iter); 198 200 ··· 225 225 226 226 /* Retrieve domain attributes at first ... */ 227 227 put_unaligned_le32(dom, td->tx.buf); 228 - ret = ph->xops->do_xfer(ph, td); 229 228 /* Skip domain on comms error */ 230 - if (ret) 229 + if (ph->xops->do_xfer(ph, td)) 231 230 continue; 232 231 233 232 v = vinfo->domains + dom; 234 233 v->id = dom; 235 234 attributes = le32_to_cpu(resp_dom->attr); 236 - strlcpy(v->name, resp_dom->name, SCMI_MAX_STR_SIZE); 235 + strscpy(v->name, resp_dom->name, SCMI_SHORT_NAME_MAX_SIZE); 237 236 238 237 /* 239 238 * If supported overwrite short name with the extended one; ··· 248 249 v->async_level_set = true; 249 250 } 250 251 251 - ret = scmi_voltage_levels_get(ph, v); 252 252 /* Skip invalid voltage descriptors */ 253 - if (ret) 254 - continue; 255 - 256 - ph->xops->reset_rx_to_maxsz(ph, td); 253 + scmi_voltage_levels_get(ph, v); 257 254 } 258 255 259 256 ph->xops->xfer_put(ph, td);
+1
drivers/memory/Kconfig
··· 105 105 config OMAP_GPMC 106 106 tristate "Texas Instruments OMAP SoC GPMC driver" 107 107 depends on OF_ADDRESS 108 + depends on ARCH_OMAP2PLUS || ARCH_KEYSTONE || ARCH_K3 || COMPILE_TEST 108 109 select GPIOLIB 109 110 help 110 111 This driver is for the General Purpose Memory Controller (GPMC)
+4 -1
drivers/memory/mtk-smi.c
··· 404 404 of_node_put(smi_com_node); 405 405 if (smi_com_pdev) { 406 406 /* smi common is the supplier, Make sure it is ready before */ 407 - if (!platform_get_drvdata(smi_com_pdev)) 407 + if (!platform_get_drvdata(smi_com_pdev)) { 408 + put_device(&smi_com_pdev->dev); 408 409 return -EPROBE_DEFER; 410 + } 409 411 smi_com_dev = &smi_com_pdev->dev; 410 412 link = device_link_add(dev, smi_com_dev, 411 413 DL_FLAG_PM_RUNTIME | DL_FLAG_STATELESS); 412 414 if (!link) { 413 415 dev_err(dev, "Unable to link smi-common dev\n"); 416 + put_device(&smi_com_pdev->dev); 414 417 return -ENODEV; 415 418 } 416 419 *com_dev = smi_com_dev;
+18 -11
drivers/memory/samsung/exynos5422-dmc.c
··· 1187 1187 1188 1188 dmc->timing_row = devm_kmalloc_array(dmc->dev, TIMING_COUNT, 1189 1189 sizeof(u32), GFP_KERNEL); 1190 - if (!dmc->timing_row) 1191 - return -ENOMEM; 1190 + if (!dmc->timing_row) { 1191 + ret = -ENOMEM; 1192 + goto put_node; 1193 + } 1192 1194 1193 1195 dmc->timing_data = devm_kmalloc_array(dmc->dev, TIMING_COUNT, 1194 1196 sizeof(u32), GFP_KERNEL); 1195 - if (!dmc->timing_data) 1196 - return -ENOMEM; 1197 + if (!dmc->timing_data) { 1198 + ret = -ENOMEM; 1199 + goto put_node; 1200 + } 1197 1201 1198 1202 dmc->timing_power = devm_kmalloc_array(dmc->dev, TIMING_COUNT, 1199 1203 sizeof(u32), GFP_KERNEL); 1200 - if (!dmc->timing_power) 1201 - return -ENOMEM; 1204 + if (!dmc->timing_power) { 1205 + ret = -ENOMEM; 1206 + goto put_node; 1207 + } 1202 1208 1203 1209 dmc->timings = of_lpddr3_get_ddr_timings(np_ddr, dmc->dev, 1204 1210 DDR_TYPE_LPDDR3, 1205 1211 &dmc->timings_arr_size); 1206 1212 if (!dmc->timings) { 1207 - of_node_put(np_ddr); 1208 1213 dev_warn(dmc->dev, "could not get timings from DT\n"); 1209 - return -EINVAL; 1214 + ret = -EINVAL; 1215 + goto put_node; 1210 1216 } 1211 1217 1212 1218 dmc->min_tck = of_lpddr3_get_min_tck(np_ddr, dmc->dev); 1213 1219 if (!dmc->min_tck) { 1214 - of_node_put(np_ddr); 1215 1220 dev_warn(dmc->dev, "could not get tck from DT\n"); 1216 - return -EINVAL; 1221 + ret = -EINVAL; 1222 + goto put_node; 1217 1223 } 1218 1224 1219 1225 /* Sorted array of OPPs with frequency ascending */ ··· 1233 1227 clk_period_ps); 1234 1228 } 1235 1229 1236 - of_node_put(np_ddr); 1237 1230 1238 1231 /* Take the highest frequency's timings as 'bypass' */ 1239 1232 dmc->bypass_timing_row = dmc->timing_row[idx - 1]; 1240 1233 dmc->bypass_timing_data = dmc->timing_data[idx - 1]; 1241 1234 dmc->bypass_timing_power = dmc->timing_power[idx - 1]; 1242 1235 1236 + put_node: 1237 + of_node_put(np_ddr); 1243 1238 return ret; 1244 1239 } 1245 1240
+1
drivers/soc/bcm/brcmstb/pm/pm-arm.c
··· 783 783 } 784 784 785 785 ret = brcmstb_init_sram(dn); 786 + of_node_put(dn); 786 787 if (ret) { 787 788 pr_err("error setting up SRAM for PM\n"); 788 789 return ret;
+1 -1
drivers/soc/imx/imx8m-blk-ctrl.c
··· 667 667 }, 668 668 [IMX8MP_MEDIABLK_PD_LCDIF_2] = { 669 669 .name = "mediablk-lcdif-2", 670 - .clk_names = (const char *[]){ "disp1", "apb", "axi", }, 670 + .clk_names = (const char *[]){ "disp2", "apb", "axi", }, 671 671 .num_clks = 3, 672 672 .gpc_name = "lcdif2", 673 673 .rst_mask = BIT(11) | BIT(12) | BIT(24),
+5 -4
include/linux/scmi_protocol.h
··· 13 13 #include <linux/notifier.h> 14 14 #include <linux/types.h> 15 15 16 - #define SCMI_MAX_STR_SIZE 64 17 - #define SCMI_MAX_NUM_RATES 16 16 + #define SCMI_MAX_STR_SIZE 64 17 + #define SCMI_SHORT_NAME_MAX_SIZE 16 18 + #define SCMI_MAX_NUM_RATES 16 18 19 19 20 /** 20 21 * struct scmi_revision_info - version information structure ··· 37 36 u8 num_protocols; 38 37 u8 num_agents; 39 38 u32 impl_ver; 40 - char vendor_id[SCMI_MAX_STR_SIZE]; 41 - char sub_vendor_id[SCMI_MAX_STR_SIZE]; 39 + char vendor_id[SCMI_SHORT_NAME_MAX_SIZE]; 40 + char sub_vendor_id[SCMI_SHORT_NAME_MAX_SIZE]; 42 41 }; 43 42 44 43 struct scmi_clock_info {