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

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

Pull SoC fixes from Arnd Bergmann:
"Where the last set of fixes was mostly drivers, this time the
devicetree changes all come at once, targeting mostly the Rockchips,
Qualcomm and NXP platforms.

The Qualcomm bugfixes target the Snapdragon X Elite laptops,
specifically problems with PCIe and NVMe support to improve
reliability, and a boot regresion on msm8939.

Also for Snapdragon platforms, there are a number of correctness
changes in the several platform specific device drivers, but none of
these are as impactful.

On the NXP i.MX platform, the fixes are all for 64-bit i.MX8 variants,
correcting individual entries in the devicetree that were incorrect
and causing the media, video, mmc and spi drivers to misbehave in
minor ways.

The Arm SCMI firmware driver gets fixes for a use-after-free bug and
for correctly parsing firmware information.

On the RISC-V side, there are three minor devicetree fixes for
starfive and sophgo, again addressing only minor mistakes. One device
driver patch fixes a problem with spurious interrupt handling"

* tag 'arm-fixes-6.12-2' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (63 commits)
firmware: arm_scmi: Use vendor string in max-rx-timeout-ms
dt-bindings: firmware: arm,scmi: Add missing vendor string
riscv: dts: Replace deprecated snps,nr-gpios property for snps,dw-apb-gpio-port devices
arm64: dts: rockchip: Correct GPIO polarity on brcm BT nodes
arm64: dts: rockchip: Drop invalid clock-names from es8388 codec nodes
ARM: dts: rockchip: Fix the realtek audio codec on rk3036-kylin
ARM: dts: rockchip: Fix the spi controller on rk3036
ARM: dts: rockchip: drop grf reference from rk3036 hdmi
ARM: dts: rockchip: fix rk3036 acodec node
arm64: dts: rockchip: remove orphaned pinctrl-names from pinephone pro
soc: qcom: pmic_glink: Handle GLINK intent allocation rejections
rpmsg: glink: Handle rejected intent request better
arm64: dts: qcom: x1e80100: fix PCIe5 interconnect
arm64: dts: qcom: x1e80100: fix PCIe4 interconnect
arm64: dts: qcom: x1e80100: Fix up BAR spaces
MAINTAINERS: invert Misc RISC-V SoC Support's pattern
soc: qcom: socinfo: fix revision check in qcom_socinfo_probe()
arm64: dts: qcom: x1e80100-qcp: fix nvme regulator boot glitch
arm64: dts: qcom: x1e80100-microsoft-romulus: fix nvme regulator boot glitch
arm64: dts: qcom: x1e80100-yoga-slim7x: fix nvme regulator boot glitch
...

+213 -158
+1 -1
Documentation/devicetree/bindings/firmware/arm,scmi.yaml
··· 124 124 atomic mode of operation, even if requested. 125 125 default: 0 126 126 127 - max-rx-timeout-ms: 127 + arm,max-rx-timeout-ms: 128 128 description: 129 129 An optional time value, expressed in milliseconds, representing the 130 130 transport maximum timeout value for the receive channel. The value should
+5 -7
MAINTAINERS
··· 2852 2852 F: Documentation/devicetree/bindings/bus/qcom* 2853 2853 F: Documentation/devicetree/bindings/cache/qcom,llcc.yaml 2854 2854 F: Documentation/devicetree/bindings/firmware/qcom,scm.yaml 2855 - F: Documentation/devicetree/bindings/reserved-memory/qcom 2855 + F: Documentation/devicetree/bindings/reserved-memory/qcom* 2856 2856 F: Documentation/devicetree/bindings/soc/qcom/ 2857 2857 F: arch/arm/boot/dts/qcom/ 2858 2858 F: arch/arm/configs/qcom_defconfig ··· 19846 19846 S: Maintained 19847 19847 Q: https://patchwork.kernel.org/project/linux-riscv/list/ 19848 19848 T: git https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux.git/ 19849 - F: Documentation/devicetree/bindings/riscv/ 19850 - F: arch/riscv/boot/dts/ 19851 - X: arch/riscv/boot/dts/allwinner/ 19852 - X: arch/riscv/boot/dts/renesas/ 19853 - X: arch/riscv/boot/dts/sophgo/ 19854 - X: arch/riscv/boot/dts/thead/ 19849 + F: arch/riscv/boot/dts/canaan/ 19850 + F: arch/riscv/boot/dts/microchip/ 19851 + F: arch/riscv/boot/dts/sifive/ 19852 + F: arch/riscv/boot/dts/starfive/ 19855 19853 19856 19854 RISC-V PMU DRIVERS 19857 19855 M: Atish Patra <atishp@atishpatra.org>
+2 -2
arch/arm/boot/dts/rockchip/rk3036-kylin.dts
··· 325 325 &i2c2 { 326 326 status = "okay"; 327 327 328 - rt5616: rt5616@1b { 329 - compatible = "rt5616"; 328 + rt5616: audio-codec@1b { 329 + compatible = "realtek,rt5616"; 330 330 reg = <0x1b>; 331 331 clocks = <&cru SCLK_I2S_OUT>; 332 332 clock-names = "mclk";
+7 -7
arch/arm/boot/dts/rockchip/rk3036.dtsi
··· 384 384 }; 385 385 }; 386 386 387 - acodec: acodec-ana@20030000 { 388 - compatible = "rk3036-codec"; 387 + acodec: audio-codec@20030000 { 388 + compatible = "rockchip,rk3036-codec"; 389 389 reg = <0x20030000 0x4000>; 390 - rockchip,grf = <&grf>; 391 390 clock-names = "acodec_pclk"; 392 391 clocks = <&cru PCLK_ACODEC>; 392 + rockchip,grf = <&grf>; 393 + #sound-dai-cells = <0>; 393 394 status = "disabled"; 394 395 }; 395 396 ··· 400 399 interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>; 401 400 clocks = <&cru PCLK_HDMI>; 402 401 clock-names = "pclk"; 403 - rockchip,grf = <&grf>; 404 402 pinctrl-names = "default"; 405 403 pinctrl-0 = <&hdmi_ctl>; 406 404 #sound-dai-cells = <0>; ··· 553 553 }; 554 554 555 555 spi: spi@20074000 { 556 - compatible = "rockchip,rockchip-spi"; 556 + compatible = "rockchip,rk3036-spi"; 557 557 reg = <0x20074000 0x1000>; 558 558 interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>; 559 - clocks = <&cru PCLK_SPI>, <&cru SCLK_SPI>; 560 - clock-names = "apb-pclk","spi_pclk"; 559 + clocks = <&cru SCLK_SPI>, <&cru PCLK_SPI>; 560 + clock-names = "spiclk", "apb_pclk"; 561 561 dmas = <&pdma 8>, <&pdma 9>; 562 562 dma-names = "tx", "rx"; 563 563 pinctrl-names = "default";
+6 -6
arch/arm64/boot/dts/freescale/imx8-ss-lvds0.dtsi
··· 14 14 compatible = "fsl,imx8qxp-lpcg"; 15 15 reg = <0x56243000 0x4>; 16 16 #clock-cells = <1>; 17 - clock-output-names = "mipi1_lis_lpcg_ipg_clk"; 17 + clock-output-names = "lvds0_lis_lpcg_ipg_clk"; 18 18 power-domains = <&pd IMX_SC_R_MIPI_1>; 19 19 }; 20 20 ··· 22 22 compatible = "fsl,imx8qxp-lpcg"; 23 23 reg = <0x5624300c 0x4>; 24 24 #clock-cells = <1>; 25 - clock-output-names = "mipi1_pwm_lpcg_clk", 26 - "mipi1_pwm_lpcg_ipg_clk", 27 - "mipi1_pwm_lpcg_32k_clk"; 25 + clock-output-names = "lvds0_pwm_lpcg_clk", 26 + "lvds0_pwm_lpcg_ipg_clk", 27 + "lvds0_pwm_lpcg_32k_clk"; 28 28 power-domains = <&pd IMX_SC_R_MIPI_1_PWM_0>; 29 29 }; 30 30 ··· 32 32 compatible = "fsl,imx8qxp-lpcg"; 33 33 reg = <0x56243010 0x4>; 34 34 #clock-cells = <1>; 35 - clock-output-names = "mipi1_i2c0_lpcg_clk", 36 - "mipi1_i2c0_lpcg_ipg_clk"; 35 + clock-output-names = "lvds0_i2c0_lpcg_clk", 36 + "lvds0_i2c0_lpcg_ipg_clk"; 37 37 power-domains = <&pd IMX_SC_R_MIPI_1_I2C_0>; 38 38 }; 39 39
+2 -2
arch/arm64/boot/dts/freescale/imx8-ss-vpu.dtsi
··· 15 15 mu_m0: mailbox@2d000000 { 16 16 compatible = "fsl,imx6sx-mu"; 17 17 reg = <0x2d000000 0x20000>; 18 - interrupts = <GIC_SPI 469 IRQ_TYPE_LEVEL_HIGH>; 18 + interrupts = <GIC_SPI 472 IRQ_TYPE_LEVEL_HIGH>; 19 19 #mbox-cells = <2>; 20 20 power-domains = <&pd IMX_SC_R_VPU_MU_0>; 21 21 status = "disabled"; ··· 24 24 mu1_m0: mailbox@2d020000 { 25 25 compatible = "fsl,imx6sx-mu"; 26 26 reg = <0x2d020000 0x20000>; 27 - interrupts = <GIC_SPI 470 IRQ_TYPE_LEVEL_HIGH>; 27 + interrupts = <GIC_SPI 473 IRQ_TYPE_LEVEL_HIGH>; 28 28 #mbox-cells = <2>; 29 29 power-domains = <&pd IMX_SC_R_VPU_MU_1>; 30 30 status = "disabled";
+12
arch/arm64/boot/dts/freescale/imx8mp-phyboard-pollux-rdk.dts
··· 218 218 }; 219 219 }; 220 220 221 + &media_blk_ctrl { 222 + /* 223 + * The LVDS panel on this device uses 72.4 MHz pixel clock, 224 + * set IMX8MP_VIDEO_PLL1 to 72.4 * 7 = 506.8 MHz so the LDB 225 + * serializer and LCDIFv3 scanout engine can reach accurate 226 + * pixel clock of exactly 72.4 MHz. 227 + */ 228 + assigned-clock-rates = <500000000>, <200000000>, 229 + <0>, <0>, <500000000>, 230 + <506800000>; 231 + }; 232 + 221 233 &snvs_pwrkey { 222 234 status = "okay"; 223 235 };
+1
arch/arm64/boot/dts/freescale/imx8mp-skov-revb-mi1010ait-1cp1.dts
··· 71 71 assigned-clock-rates = <500000000>, <200000000>, <0>, 72 72 /* IMX8MP_CLK_MEDIA_DISP2_PIX = pixelclk of lvds panel */ 73 73 <68900000>, 74 + <500000000>, 74 75 /* IMX8MP_VIDEO_PLL1 = IMX8MP_CLK_MEDIA_LDB * 2 */ 75 76 <964600000>; 76 77 };
+3 -3
arch/arm64/boot/dts/freescale/imx8mp.dtsi
··· 1261 1261 compatible = "fsl,imx8mp-usdhc", "fsl,imx8mm-usdhc", "fsl,imx7d-usdhc"; 1262 1262 reg = <0x30b40000 0x10000>; 1263 1263 interrupts = <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>; 1264 - clocks = <&clk IMX8MP_CLK_DUMMY>, 1264 + clocks = <&clk IMX8MP_CLK_IPG_ROOT>, 1265 1265 <&clk IMX8MP_CLK_NAND_USDHC_BUS>, 1266 1266 <&clk IMX8MP_CLK_USDHC1_ROOT>; 1267 1267 clock-names = "ipg", "ahb", "per"; ··· 1275 1275 compatible = "fsl,imx8mp-usdhc", "fsl,imx8mm-usdhc", "fsl,imx7d-usdhc"; 1276 1276 reg = <0x30b50000 0x10000>; 1277 1277 interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>; 1278 - clocks = <&clk IMX8MP_CLK_DUMMY>, 1278 + clocks = <&clk IMX8MP_CLK_IPG_ROOT>, 1279 1279 <&clk IMX8MP_CLK_NAND_USDHC_BUS>, 1280 1280 <&clk IMX8MP_CLK_USDHC2_ROOT>; 1281 1281 clock-names = "ipg", "ahb", "per"; ··· 1289 1289 compatible = "fsl,imx8mp-usdhc", "fsl,imx8mm-usdhc", "fsl,imx7d-usdhc"; 1290 1290 reg = <0x30b60000 0x10000>; 1291 1291 interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>; 1292 - clocks = <&clk IMX8MP_CLK_DUMMY>, 1292 + clocks = <&clk IMX8MP_CLK_IPG_ROOT>, 1293 1293 <&clk IMX8MP_CLK_NAND_USDHC_BUS>, 1294 1294 <&clk IMX8MP_CLK_USDHC3_ROOT>; 1295 1295 clock-names = "ipg", "ahb", "per";
+8
arch/arm64/boot/dts/freescale/imx8qxp-ss-vpu.dtsi
··· 5 5 * Author: Alexander Stein 6 6 */ 7 7 8 + &mu_m0 { 9 + interrupts = <GIC_SPI 469 IRQ_TYPE_LEVEL_HIGH>; 10 + }; 11 + 12 + &mu1_m0 { 13 + interrupts = <GIC_SPI 470 IRQ_TYPE_LEVEL_HIGH>; 14 + }; 15 + 8 16 &vpu_core0 { 9 17 reg = <0x2d040000 0x10000>; 10 18 };
+1 -1
arch/arm64/boot/dts/freescale/imx8ulp.dtsi
··· 384 384 }; 385 385 386 386 flexspi2: spi@29810000 { 387 - compatible = "nxp,imx8mm-fspi"; 387 + compatible = "nxp,imx8ulp-fspi"; 388 388 reg = <0x29810000 0x10000>, <0x60000000 0x10000000>; 389 389 reg-names = "fspi_base", "fspi_mmap"; 390 390 #address-cells = <1>;
+1 -1
arch/arm64/boot/dts/qcom/msm8939.dtsi
··· 248 248 249 249 smd-edge { 250 250 interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>; 251 - mboxes = <&apcs1_mbox 0>; 251 + qcom,ipc = <&apcs1_mbox 8 0>; 252 252 qcom,smd-edge = <15>; 253 253 254 254 rpm_requests: rpm-requests {
+1 -1
arch/arm64/boot/dts/qcom/sm8450.dtsi
··· 1973 1973 1974 1974 clocks = <&gcc GCC_PCIE_1_PIPE_CLK>, 1975 1975 <&gcc GCC_PCIE_1_PIPE_CLK_SRC>, 1976 - <&pcie1_phy>, 1976 + <&pcie1_phy QMP_PCIE_PIPE_CLK>, 1977 1977 <&rpmhcc RPMH_CXO_CLK>, 1978 1978 <&gcc GCC_PCIE_1_AUX_CLK>, 1979 1979 <&gcc GCC_PCIE_1_CFG_AHB_CLK>,
+2
arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts
··· 139 139 140 140 pinctrl-0 = <&nvme_reg_en>; 141 141 pinctrl-names = "default"; 142 + 143 + regulator-boot-on; 142 144 }; 143 145 144 146 vph_pwr: regulator-vph-pwr {
+2
arch/arm64/boot/dts/qcom/x1e80100-asus-vivobook-s15.dts
··· 134 134 135 135 pinctrl-0 = <&nvme_reg_en>; 136 136 pinctrl-names = "default"; 137 + 138 + regulator-boot-on; 137 139 }; 138 140 }; 139 141
+6 -4
arch/arm64/boot/dts/qcom/x1e80100-crd.dts
··· 177 177 compatible = "qcom,x1e80100-sndcard"; 178 178 model = "X1E80100-CRD"; 179 179 audio-routing = "WooferLeft IN", "WSA WSA_SPK1 OUT", 180 - "TwitterLeft IN", "WSA WSA_SPK2 OUT", 180 + "TweeterLeft IN", "WSA WSA_SPK2 OUT", 181 181 "WooferRight IN", "WSA2 WSA_SPK2 OUT", 182 - "TwitterRight IN", "WSA2 WSA_SPK2 OUT", 182 + "TweeterRight IN", "WSA2 WSA_SPK2 OUT", 183 183 "IN1_HPHL", "HPHL_OUT", 184 184 "IN2_HPHR", "HPHR_OUT", 185 185 "AMIC2", "MIC BIAS2", ··· 300 300 301 301 pinctrl-names = "default"; 302 302 pinctrl-0 = <&nvme_reg_en>; 303 + 304 + regulator-boot-on; 303 305 }; 304 306 305 307 vreg_wwan: regulator-wwan { ··· 935 933 reg = <0 1>; 936 934 reset-gpios = <&lpass_tlmm 12 GPIO_ACTIVE_LOW>; 937 935 #sound-dai-cells = <0>; 938 - sound-name-prefix = "TwitterLeft"; 936 + sound-name-prefix = "TweeterLeft"; 939 937 vdd-1p8-supply = <&vreg_l15b_1p8>; 940 938 vdd-io-supply = <&vreg_l12b_1p2>; 941 939 qcom,port-mapping = <4 5 6 7 11 13>; ··· 988 986 reg = <0 1>; 989 987 reset-gpios = <&lpass_tlmm 13 GPIO_ACTIVE_LOW>; 990 988 #sound-dai-cells = <0>; 991 - sound-name-prefix = "TwitterRight"; 989 + sound-name-prefix = "TweeterRight"; 992 990 vdd-1p8-supply = <&vreg_l15b_1p8>; 993 991 vdd-io-supply = <&vreg_l12b_1p2>; 994 992 qcom,port-mapping = <4 5 6 7 11 13>;
+2
arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
··· 205 205 206 206 pinctrl-0 = <&nvme_reg_en>; 207 207 pinctrl-names = "default"; 208 + 209 + regulator-boot-on; 208 210 }; 209 211 }; 210 212
+2
arch/arm64/boot/dts/qcom/x1e80100-microsoft-romulus.dtsi
··· 164 164 165 165 pinctrl-0 = <&nvme_reg_en>; 166 166 pinctrl-names = "default"; 167 + 168 + regulator-boot-on; 167 169 }; 168 170 }; 169 171
+2
arch/arm64/boot/dts/qcom/x1e80100-qcp.dts
··· 253 253 254 254 pinctrl-names = "default"; 255 255 pinctrl-0 = <&nvme_reg_en>; 256 + 257 + regulator-boot-on; 256 258 }; 257 259 }; 258 260
+32 -21
arch/arm64/boot/dts/qcom/x1e80100.dtsi
··· 2924 2924 "mhi"; 2925 2925 #address-cells = <3>; 2926 2926 #size-cells = <2>; 2927 - ranges = <0x01000000 0 0x00000000 0 0x70200000 0 0x100000>, 2928 - <0x02000000 0 0x70300000 0 0x70300000 0 0x3d00000>; 2929 - bus-range = <0 0xff>; 2927 + ranges = <0x01000000 0x0 0x00000000 0x0 0x70200000 0x0 0x100000>, 2928 + <0x02000000 0x0 0x70300000 0x0 0x70300000 0x0 0x1d00000>; 2929 + bus-range = <0x00 0xff>; 2930 2930 2931 2931 dma-coherent; 2932 2932 2933 2933 linux,pci-domain = <6>; 2934 - num-lanes = <2>; 2934 + num-lanes = <4>; 2935 2935 2936 2936 interrupts = <GIC_SPI 773 IRQ_TYPE_LEVEL_HIGH>, 2937 2937 <GIC_SPI 774 IRQ_TYPE_LEVEL_HIGH>, ··· 2997 2997 }; 2998 2998 2999 2999 pcie6a_phy: phy@1bfc000 { 3000 - compatible = "qcom,x1e80100-qmp-gen4x2-pcie-phy"; 3001 - reg = <0 0x01bfc000 0 0x2000>; 3000 + compatible = "qcom,x1e80100-qmp-gen4x4-pcie-phy"; 3001 + reg = <0 0x01bfc000 0 0x2000>, 3002 + <0 0x01bfe000 0 0x2000>; 3002 3003 3003 3004 clocks = <&gcc GCC_PCIE_6A_PHY_AUX_CLK>, 3004 3005 <&gcc GCC_PCIE_6A_CFG_AHB_CLK>, 3005 - <&rpmhcc RPMH_CXO_CLK>, 3006 + <&tcsr TCSR_PCIE_4L_CLKREF_EN>, 3006 3007 <&gcc GCC_PCIE_6A_PHY_RCHNG_CLK>, 3007 - <&gcc GCC_PCIE_6A_PIPE_CLK>; 3008 + <&gcc GCC_PCIE_6A_PIPE_CLK>, 3009 + <&gcc GCC_PCIE_6A_PIPEDIV2_CLK>; 3008 3010 clock-names = "aux", 3009 3011 "cfg_ahb", 3010 3012 "ref", 3011 3013 "rchng", 3012 - "pipe"; 3014 + "pipe", 3015 + "pipediv2"; 3013 3016 3014 3017 resets = <&gcc GCC_PCIE_6A_PHY_BCR>, 3015 3018 <&gcc GCC_PCIE_6A_NOCSR_COM_PHY_BCR>; ··· 3023 3020 assigned-clock-rates = <100000000>; 3024 3021 3025 3022 power-domains = <&gcc GCC_PCIE_6_PHY_GDSC>; 3023 + 3024 + qcom,4ln-config-sel = <&tcsr 0x1a000 0>; 3026 3025 3027 3026 #clock-cells = <0>; 3028 3027 clock-output-names = "pcie6a_pipe_clk"; ··· 3102 3097 assigned-clocks = <&gcc GCC_PCIE_5_AUX_CLK>; 3103 3098 assigned-clock-rates = <19200000>; 3104 3099 3105 - interconnects = <&pcie_south_anoc MASTER_PCIE_5 QCOM_ICC_TAG_ALWAYS 3100 + interconnects = <&pcie_north_anoc MASTER_PCIE_5 QCOM_ICC_TAG_ALWAYS 3106 3101 &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>, 3107 3102 <&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ALWAYS 3108 3103 &cnoc_main SLAVE_PCIE_5 QCOM_ICC_TAG_ALWAYS>; ··· 3129 3124 3130 3125 clocks = <&gcc GCC_PCIE_5_AUX_CLK>, 3131 3126 <&gcc GCC_PCIE_5_CFG_AHB_CLK>, 3132 - <&rpmhcc RPMH_CXO_CLK>, 3127 + <&tcsr TCSR_PCIE_2L_5_CLKREF_EN>, 3133 3128 <&gcc GCC_PCIE_5_PHY_RCHNG_CLK>, 3134 - <&gcc GCC_PCIE_5_PIPE_CLK>; 3129 + <&gcc GCC_PCIE_5_PIPE_CLK>, 3130 + <&gcc GCC_PCIE_5_PIPEDIV2_CLK>; 3135 3131 clock-names = "aux", 3136 3132 "cfg_ahb", 3137 3133 "ref", 3138 3134 "rchng", 3139 - "pipe"; 3135 + "pipe", 3136 + "pipediv2"; 3140 3137 3141 3138 resets = <&gcc GCC_PCIE_5_PHY_BCR>; 3142 3139 reset-names = "phy"; ··· 3173 3166 "mhi"; 3174 3167 #address-cells = <3>; 3175 3168 #size-cells = <2>; 3176 - ranges = <0x01000000 0 0x00000000 0 0x7c200000 0 0x100000>, 3177 - <0x02000000 0 0x7c300000 0 0x7c300000 0 0x3d00000>; 3169 + ranges = <0x01000000 0x0 0x00000000 0x0 0x7c200000 0x0 0x100000>, 3170 + <0x02000000 0x0 0x7c300000 0x0 0x7c300000 0x0 0x1d00000>; 3178 3171 bus-range = <0x00 0xff>; 3179 3172 3180 3173 dma-coherent; ··· 3224 3217 assigned-clocks = <&gcc GCC_PCIE_4_AUX_CLK>; 3225 3218 assigned-clock-rates = <19200000>; 3226 3219 3227 - interconnects = <&pcie_south_anoc MASTER_PCIE_4 QCOM_ICC_TAG_ALWAYS 3220 + interconnects = <&pcie_north_anoc MASTER_PCIE_4 QCOM_ICC_TAG_ALWAYS 3228 3221 &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>, 3229 3222 <&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ALWAYS 3230 3223 &cnoc_main SLAVE_PCIE_4 QCOM_ICC_TAG_ALWAYS>; ··· 3261 3254 3262 3255 clocks = <&gcc GCC_PCIE_4_AUX_CLK>, 3263 3256 <&gcc GCC_PCIE_4_CFG_AHB_CLK>, 3264 - <&rpmhcc RPMH_CXO_CLK>, 3257 + <&tcsr TCSR_PCIE_2L_4_CLKREF_EN>, 3265 3258 <&gcc GCC_PCIE_4_PHY_RCHNG_CLK>, 3266 - <&gcc GCC_PCIE_4_PIPE_CLK>; 3259 + <&gcc GCC_PCIE_4_PIPE_CLK>, 3260 + <&gcc GCC_PCIE_4_PIPEDIV2_CLK>; 3267 3261 clock-names = "aux", 3268 3262 "cfg_ahb", 3269 3263 "ref", 3270 3264 "rchng", 3271 - "pipe"; 3265 + "pipe", 3266 + "pipediv2"; 3272 3267 3273 3268 resets = <&gcc GCC_PCIE_4_PHY_BCR>; 3274 3269 reset-names = "phy"; ··· 6093 6084 <0 0x25a00000 0 0x200000>, 6094 6085 <0 0x25c00000 0 0x200000>, 6095 6086 <0 0x25e00000 0 0x200000>, 6096 - <0 0x26000000 0 0x200000>; 6087 + <0 0x26000000 0 0x200000>, 6088 + <0 0x26200000 0 0x200000>; 6097 6089 reg-names = "llcc0_base", 6098 6090 "llcc1_base", 6099 6091 "llcc2_base", ··· 6103 6093 "llcc5_base", 6104 6094 "llcc6_base", 6105 6095 "llcc7_base", 6106 - "llcc_broadcast_base"; 6096 + "llcc_broadcast_base", 6097 + "llcc_broadcast_and_base"; 6107 6098 interrupts = <GIC_SPI 266 IRQ_TYPE_LEVEL_HIGH>; 6108 6099 }; 6109 6100
-1
arch/arm64/boot/dts/rockchip/px30-ringneck.dtsi
··· 66 66 bus-width = <8>; 67 67 cap-mmc-highspeed; 68 68 mmc-hs200-1_8v; 69 - supports-emmc; 70 69 mmc-pwrseq = <&emmc_pwrseq>; 71 70 non-removable; 72 71 vmmc-supply = <&vcc_3v3>;
+2 -2
arch/arm64/boot/dts/rockchip/rk3308-roc-cc.dts
··· 36 36 37 37 power_led: led-0 { 38 38 label = "firefly:red:power"; 39 - linux,default-trigger = "ir-power-click"; 39 + linux,default-trigger = "default-on"; 40 40 default-state = "on"; 41 41 gpios = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>; 42 42 }; 43 43 44 44 user_led: led-1 { 45 45 label = "firefly:blue:user"; 46 - linux,default-trigger = "ir-user-click"; 46 + linux,default-trigger = "rc-feedback"; 47 47 default-state = "off"; 48 48 gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_HIGH>; 49 49 };
-2
arch/arm64/boot/dts/rockchip/rk3328-nanopi-r2s-plus.dts
··· 24 24 disable-wp; 25 25 mmc-hs200-1_8v; 26 26 non-removable; 27 - num-slots = <1>; 28 27 pinctrl-names = "default"; 29 28 pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_bus8>; 30 - supports-emmc; 31 29 status = "okay"; 32 30 };
+1 -2
arch/arm64/boot/dts/rockchip/rk3328.dtsi
··· 754 754 compatible = "rockchip,rk3328-dw-hdmi"; 755 755 reg = <0x0 0xff3c0000 0x0 0x20000>; 756 756 reg-io-width = <4>; 757 - interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>, 758 - <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>; 757 + interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>; 759 758 clocks = <&cru PCLK_HDMI>, 760 759 <&cru SCLK_HDMI_SFC>, 761 760 <&cru SCLK_RTC32K>;
-1
arch/arm64/boot/dts/rockchip/rk3368-lion.dtsi
··· 61 61 fan: fan@18 { 62 62 compatible = "ti,amc6821"; 63 63 reg = <0x18>; 64 - #cooling-cells = <2>; 65 64 }; 66 65 67 66 rtc_twi: rtc@6f {
+1 -1
arch/arm64/boot/dts/rockchip/rk3399-eaidk-610.dts
··· 541 541 status = "okay"; 542 542 543 543 rt5651: audio-codec@1a { 544 - compatible = "rockchip,rt5651"; 544 + compatible = "realtek,rt5651"; 545 545 reg = <0x1a>; 546 546 clocks = <&cru SCLK_I2S_8CH_OUT>; 547 547 clock-names = "mclk";
-2
arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts
··· 166 166 regulator-max-microvolt = <1800000>; 167 167 vin-supply = <&vcc3v3_sys>; 168 168 gpio = <&gpio3 RK_PA5 GPIO_ACTIVE_HIGH>; 169 - pinctrl-names = "default"; 170 169 }; 171 170 172 171 /* MIPI DSI panel 2.8v supply */ ··· 177 178 regulator-max-microvolt = <2800000>; 178 179 vin-supply = <&vcc3v3_sys>; 179 180 gpio = <&gpio3 RK_PA1 GPIO_ACTIVE_HIGH>; 180 - pinctrl-names = "default"; 181 181 }; 182 182 183 183 vibrator {
-1
arch/arm64/boot/dts/rockchip/rk3399-roc-pc-plus.dts
··· 114 114 es8388: es8388@11 { 115 115 compatible = "everest,es8388"; 116 116 reg = <0x11>; 117 - clock-names = "mclk"; 118 117 clocks = <&cru SCLK_I2S_8CH_OUT>; 119 118 #sound-dai-cells = <0>; 120 119 };
+1 -1
arch/arm64/boot/dts/rockchip/rk3399-rock960.dtsi
··· 576 576 bluetooth { 577 577 compatible = "brcm,bcm43438-bt"; 578 578 clocks = <&rk808 1>; 579 - clock-names = "ext_clock"; 579 + clock-names = "txco"; 580 580 device-wakeup-gpios = <&gpio2 RK_PD3 GPIO_ACTIVE_HIGH>; 581 581 host-wakeup-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_HIGH>; 582 582 shutdown-gpios = <&gpio0 RK_PB1 GPIO_ACTIVE_HIGH>;
+1 -1
arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator.dts
··· 163 163 status = "okay"; 164 164 165 165 rt5651: rt5651@1a { 166 - compatible = "rockchip,rt5651"; 166 + compatible = "realtek,rt5651"; 167 167 reg = <0x1a>; 168 168 clocks = <&cru SCLK_I2S_8CH_OUT>; 169 169 clock-names = "mclk";
+1 -1
arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353p.dts
··· 92 92 }; 93 93 94 94 &i2c2 { 95 - pintctrl-names = "default"; 95 + pinctrl-names = "default"; 96 96 pinctrl-0 = <&i2c2m1_xfer>; 97 97 status = "okay"; 98 98
+1 -1
arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353v.dts
··· 79 79 }; 80 80 81 81 &i2c2 { 82 - pintctrl-names = "default"; 82 + pinctrl-names = "default"; 83 83 pinctrl-0 = <&i2c2m1_xfer>; 84 84 status = "okay"; 85 85
+3 -3
arch/arm64/boot/dts/rockchip/rk3566-box-demo.dts
··· 449 449 bluetooth { 450 450 compatible = "brcm,bcm43438-bt"; 451 451 clocks = <&pmucru CLK_RTC_32K>; 452 - clock-names = "ext_clock"; 453 - device-wake-gpios = <&gpio2 RK_PC1 GPIO_ACTIVE_HIGH>; 454 - host-wake-gpios = <&gpio2 RK_PC0 GPIO_ACTIVE_HIGH>; 452 + clock-names = "txco"; 453 + device-wakeup-gpios = <&gpio2 RK_PC1 GPIO_ACTIVE_HIGH>; 454 + host-wakeup-gpios = <&gpio2 RK_PC0 GPIO_ACTIVE_HIGH>; 455 455 shutdown-gpios = <&gpio2 RK_PB7 GPIO_ACTIVE_HIGH>; 456 456 pinctrl-names = "default"; 457 457 pinctrl-0 = <&bt_host_wake_l &bt_wake_l &bt_enable_h>;
-1
arch/arm64/boot/dts/rockchip/rk3566-lubancat-1.dts
··· 507 507 non-removable; 508 508 pinctrl-names = "default"; 509 509 pinctrl-0 = <&emmc_bus8 &emmc_clk &emmc_cmd>; 510 - supports-emmc; 511 510 status = "okay"; 512 511 }; 513 512
+3 -3
arch/arm64/boot/dts/rockchip/rk3566-pinenote.dtsi
··· 684 684 compatible = "brcm,bcm43438-bt"; 685 685 clocks = <&rk817 1>; 686 686 clock-names = "lpo"; 687 - device-wake-gpios = <&gpio0 RK_PC2 GPIO_ACTIVE_HIGH>; 688 - host-wake-gpios = <&gpio0 RK_PC3 GPIO_ACTIVE_HIGH>; 689 - reset-gpios = <&gpio0 RK_PC4 GPIO_ACTIVE_LOW>; 687 + device-wakeup-gpios = <&gpio0 RK_PC2 GPIO_ACTIVE_HIGH>; 688 + host-wakeup-gpios = <&gpio0 RK_PC3 GPIO_ACTIVE_HIGH>; 690 689 pinctrl-0 = <&bt_enable_h>, <&bt_host_wake_l>, <&bt_wake_h>; 691 690 pinctrl-names = "default"; 691 + shutdown-gpios = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>; 692 692 vbat-supply = <&vcc_wl>; 693 693 vddio-supply = <&vcca_1v8_pmu>; 694 694 };
+1 -1
arch/arm64/boot/dts/rockchip/rk3566-radxa-cm3.dtsi
··· 402 402 clock-names = "lpo"; 403 403 device-wakeup-gpios = <&gpio2 RK_PB2 GPIO_ACTIVE_HIGH>; 404 404 host-wakeup-gpios = <&gpio2 RK_PB1 GPIO_ACTIVE_HIGH>; 405 - reset-gpios = <&gpio2 RK_PC0 GPIO_ACTIVE_LOW>; 406 405 pinctrl-names = "default"; 407 406 pinctrl-0 = <&bt_host_wake_h &bt_reg_on_h &bt_wake_host_h>; 407 + shutdown-gpios = <&gpio2 RK_PC0 GPIO_ACTIVE_HIGH>; 408 408 vbat-supply = <&vcc_3v3>; 409 409 vddio-supply = <&vcc_1v8>; 410 410 };
-1
arch/arm64/boot/dts/rockchip/rk3568-lubancat-2.dts
··· 589 589 non-removable; 590 590 pinctrl-names = "default"; 591 591 pinctrl-0 = <&emmc_bus8 &emmc_clk &emmc_cmd>; 592 - supports-emmc; 593 592 status = "okay"; 594 593 }; 595 594
-3
arch/arm64/boot/dts/rockchip/rk3568-roc-pc.dts
··· 272 272 regulator-name = "vdd_logic"; 273 273 regulator-always-on; 274 274 regulator-boot-on; 275 - regulator-init-microvolt = <900000>; 276 275 regulator-initial-mode = <0x2>; 277 276 regulator-min-microvolt = <500000>; 278 277 regulator-max-microvolt = <1350000>; ··· 284 285 285 286 vdd_gpu: DCDC_REG2 { 286 287 regulator-name = "vdd_gpu"; 287 - regulator-init-microvolt = <900000>; 288 288 regulator-initial-mode = <0x2>; 289 289 regulator-min-microvolt = <500000>; 290 290 regulator-max-microvolt = <1350000>; ··· 307 309 308 310 vdd_npu: DCDC_REG4 { 309 311 regulator-name = "vdd_npu"; 310 - regulator-init-microvolt = <900000>; 311 312 regulator-initial-mode = <0x2>; 312 313 regulator-min-microvolt = <500000>; 313 314 regulator-max-microvolt = <1350000>;
+12 -8
arch/arm64/boot/dts/rockchip/rk3588-base.dtsi
··· 337 337 cache-unified; 338 338 next-level-cache = <&l3_cache>; 339 339 }; 340 + }; 340 341 341 - l3_cache: l3-cache { 342 - compatible = "cache"; 343 - cache-size = <3145728>; 344 - cache-line-size = <64>; 345 - cache-sets = <4096>; 346 - cache-level = <3>; 347 - cache-unified; 348 - }; 342 + /* 343 + * The L3 cache belongs to the DynamIQ Shared Unit (DSU), 344 + * so it's represented here, outside the "cpus" node 345 + */ 346 + l3_cache: l3-cache { 347 + compatible = "cache"; 348 + cache-size = <3145728>; 349 + cache-line-size = <64>; 350 + cache-sets = <4096>; 351 + cache-level = <3>; 352 + cache-unified; 349 353 }; 350 354 351 355 display_subsystem: display-subsystem {
-1
arch/arm64/boot/dts/rockchip/rk3588-orangepi-5-plus.dts
··· 328 328 compatible = "everest,es8388"; 329 329 reg = <0x11>; 330 330 clocks = <&cru I2S0_8CH_MCLKOUT>; 331 - clock-names = "mclk"; 332 331 AVDD-supply = <&vcc_1v8_s0>; 333 332 DVDD-supply = <&vcc_1v8_s0>; 334 333 HPVDD-supply = <&vcc_3v3_s0>;
-1
arch/arm64/boot/dts/rockchip/rk3588-quartzpro64.dts
··· 316 316 assigned-clocks = <&cru I2S0_8CH_MCLKOUT>; 317 317 assigned-clock-rates = <12288000>; 318 318 clocks = <&cru I2S0_8CH_MCLKOUT>; 319 - clock-names = "mclk"; 320 319 AVDD-supply = <&avcc_1v8_codec_s0>; 321 320 DVDD-supply = <&avcc_1v8_codec_s0>; 322 321 HPVDD-supply = <&vcc_3v3_s0>;
+2 -2
arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts
··· 304 304 }; 305 305 306 306 cooling-maps { 307 - map1 { 307 + map0 { 308 308 trip = <&package_fan0>; 309 309 cooling-device = <&fan THERMAL_NO_LIMIT 1>; 310 310 }; 311 311 312 - map2 { 312 + map1 { 313 313 trip = <&package_fan1>; 314 314 cooling-device = <&fan 2 THERMAL_NO_LIMIT>; 315 315 };
-1
arch/arm64/boot/dts/rockchip/rk3588-toybrick-x0.dts
··· 428 428 regulator-boot-on; 429 429 regulator-min-microvolt = <550000>; 430 430 regulator-max-microvolt = <950000>; 431 - regulator-init-microvolt = <750000>; 432 431 regulator-ramp-delay = <12500>; 433 432 434 433 regulator-state-mem {
+1
arch/arm64/boot/dts/rockchip/rk3588-turing-rk1.dtsi
··· 296 296 pinctrl-names = "default"; 297 297 pinctrl-0 = <&pmic_pins>, <&rk806_dvs1_null>, 298 298 <&rk806_dvs2_null>, <&rk806_dvs3_null>; 299 + system-power-controller; 299 300 300 301 vcc1-supply = <&vcc5v0_sys>; 301 302 vcc2-supply = <&vcc5v0_sys>;
-1
arch/arm64/boot/dts/rockchip/rk3588s-indiedroid-nova.dts
··· 377 377 assigned-clock-rates = <12288000>; 378 378 assigned-clocks = <&cru I2S0_8CH_MCLKOUT>; 379 379 AVDD-supply = <&vcc_3v3_s3>; 380 - clock-names = "mclk"; 381 380 clocks = <&cru I2S0_8CH_MCLKOUT>; 382 381 DVDD-supply = <&vcc_1v8_s3>; 383 382 HPVDD-supply = <&vcc_3v3_s3>;
+3 -3
arch/riscv/boot/dts/sophgo/sg2042.dtsi
··· 112 112 compatible = "snps,dw-apb-gpio-port"; 113 113 gpio-controller; 114 114 #gpio-cells = <2>; 115 - snps,nr-gpios = <32>; 115 + ngpios = <32>; 116 116 reg = <0>; 117 117 interrupt-controller; 118 118 #interrupt-cells = <2>; ··· 134 134 compatible = "snps,dw-apb-gpio-port"; 135 135 gpio-controller; 136 136 #gpio-cells = <2>; 137 - snps,nr-gpios = <32>; 137 + ngpios = <32>; 138 138 reg = <0>; 139 139 interrupt-controller; 140 140 #interrupt-cells = <2>; ··· 156 156 compatible = "snps,dw-apb-gpio-port"; 157 157 gpio-controller; 158 158 #gpio-cells = <2>; 159 - snps,nr-gpios = <32>; 159 + ngpios = <32>; 160 160 reg = <0>; 161 161 interrupt-controller; 162 162 #interrupt-cells = <2>;
-2
arch/riscv/boot/dts/starfive/jh7110-common.dtsi
··· 128 128 assigned-clocks = <&ispcrg JH7110_ISPCLK_DOM4_APB_FUNC>, 129 129 <&ispcrg JH7110_ISPCLK_MIPI_RX0_PXL>; 130 130 assigned-clock-rates = <49500000>, <198000000>; 131 - status = "okay"; 132 131 133 132 ports { 134 133 #address-cells = <1>; ··· 150 151 &csi2rx { 151 152 assigned-clocks = <&ispcrg JH7110_ISPCLK_VIN_SYS>; 152 153 assigned-clock-rates = <297000000>; 153 - status = "okay"; 154 154 155 155 ports { 156 156 #address-cells = <1>;
+1 -2
arch/riscv/boot/dts/starfive/jh7110-pine64-star64.dts
··· 44 44 }; 45 45 46 46 &phy0 { 47 - rx-internal-delay-ps = <1900>; 48 - tx-internal-delay-ps = <1500>; 47 + rx-internal-delay-ps = <1500>; 49 48 motorcomm,rx-clk-drv-microamp = <2910>; 50 49 motorcomm,rx-data-drv-microamp = <2910>; 51 50 motorcomm,tx-clk-adj-enabled;
+5 -3
drivers/edac/qcom_edac.c
··· 342 342 int ecc_irq; 343 343 int rc; 344 344 345 - rc = qcom_llcc_core_setup(llcc_driv_data, llcc_driv_data->bcast_regmap); 346 - if (rc) 347 - return rc; 345 + if (!llcc_driv_data->ecc_irq_configured) { 346 + rc = qcom_llcc_core_setup(llcc_driv_data, llcc_driv_data->bcast_regmap); 347 + if (rc) 348 + return rc; 349 + } 348 350 349 351 /* Allocate edac control info */ 350 352 edev_ctl = edac_device_alloc_ctl_info(0, "qcom-llcc", 1, "bank",
+4 -3
drivers/firmware/arm_scmi/bus.c
··· 325 325 326 326 static void scmi_device_release(struct device *dev) 327 327 { 328 - kfree(to_scmi_dev(dev)); 328 + struct scmi_device *scmi_dev = to_scmi_dev(dev); 329 + 330 + kfree_const(scmi_dev->name); 331 + kfree(scmi_dev); 329 332 } 330 333 331 334 static void __scmi_device_destroy(struct scmi_device *scmi_dev) ··· 341 338 if (scmi_dev->protocol_id == SCMI_PROTOCOL_SYSTEM) 342 339 atomic_set(&scmi_syspower_registered, 0); 343 340 344 - kfree_const(scmi_dev->name); 345 341 ida_free(&scmi_bus_id, scmi_dev->id); 346 342 device_unregister(&scmi_dev->dev); 347 343 } ··· 412 410 413 411 return scmi_dev; 414 412 put_dev: 415 - kfree_const(scmi_dev->name); 416 413 put_device(&scmi_dev->dev); 417 414 ida_free(&scmi_bus_id, id); 418 415 return NULL;
+2
drivers/firmware/arm_scmi/common.h
··· 163 163 * used to initialize this channel 164 164 * @dev: Reference to device in the SCMI hierarchy corresponding to this 165 165 * channel 166 + * @is_p2a: A flag to identify a channel as P2A (RX) 166 167 * @rx_timeout_ms: The configured RX timeout in milliseconds. 167 168 * @handle: Pointer to SCMI entity handle 168 169 * @no_completion_irq: Flag to indicate that this channel has no completion ··· 175 174 struct scmi_chan_info { 176 175 int id; 177 176 struct device *dev; 177 + bool is_p2a; 178 178 unsigned int rx_timeout_ms; 179 179 struct scmi_handle *handle; 180 180 bool no_completion_irq;
+8 -2
drivers/firmware/arm_scmi/driver.c
··· 1048 1048 static inline void scmi_clear_channel(struct scmi_info *info, 1049 1049 struct scmi_chan_info *cinfo) 1050 1050 { 1051 + if (!cinfo->is_p2a) { 1052 + dev_warn(cinfo->dev, "Invalid clear on A2P channel !\n"); 1053 + return; 1054 + } 1055 + 1051 1056 if (info->desc->ops->clear_channel) 1052 1057 info->desc->ops->clear_channel(cinfo); 1053 1058 } ··· 2643 2638 if (!cinfo) 2644 2639 return -ENOMEM; 2645 2640 2641 + cinfo->is_p2a = !tx; 2646 2642 cinfo->rx_timeout_ms = info->desc->max_rx_timeout_ms; 2647 2643 2648 2644 /* Create a unique name for this transport device */ ··· 3048 3042 3049 3043 dev_info(dev, "Using %s\n", dev_driver_string(trans->supplier)); 3050 3044 3051 - ret = of_property_read_u32(dev->of_node, "max-rx-timeout-ms", 3045 + ret = of_property_read_u32(dev->of_node, "arm,max-rx-timeout-ms", 3052 3046 &trans->desc->max_rx_timeout_ms); 3053 3047 if (ret && ret != -EINVAL) 3054 - dev_err(dev, "Malformed max-rx-timeout-ms DT property.\n"); 3048 + dev_err(dev, "Malformed arm,max-rx-timeout-ms DT property.\n"); 3055 3049 3056 3050 dev_info(dev, "SCMI max-rx-timeout: %dms\n", 3057 3051 trans->desc->max_rx_timeout_ms);
+7 -35
drivers/firmware/microchip/mpfs-auto-update.c
··· 76 76 #define AUTO_UPDATE_INFO_SIZE SZ_1M 77 77 #define AUTO_UPDATE_BITSTREAM_BASE (AUTO_UPDATE_DIRECTORY_SIZE + AUTO_UPDATE_INFO_SIZE) 78 78 79 - #define AUTO_UPDATE_TIMEOUT_MS 60000 80 - 81 79 struct mpfs_auto_update_priv { 82 80 struct mpfs_sys_controller *sys_controller; 83 81 struct device *dev; 84 82 struct mtd_info *flash; 85 83 struct fw_upload *fw_uploader; 86 - struct completion programming_complete; 87 84 size_t size_per_bitstream; 88 85 bool cancel_request; 89 86 }; ··· 153 156 154 157 static enum fw_upload_err mpfs_auto_update_poll_complete(struct fw_upload *fw_uploader) 155 158 { 156 - struct mpfs_auto_update_priv *priv = fw_uploader->dd_handle; 157 - int ret; 158 - 159 - /* 160 - * There is no meaningful way to get the status of the programming while 161 - * it is in progress, so attempting anything other than waiting for it 162 - * to complete would be misplaced. 163 - */ 164 - ret = wait_for_completion_timeout(&priv->programming_complete, 165 - msecs_to_jiffies(AUTO_UPDATE_TIMEOUT_MS)); 166 - if (!ret) 167 - return FW_UPLOAD_ERR_TIMEOUT; 168 - 169 159 return FW_UPLOAD_ERR_NONE; 170 160 } 171 161 ··· 333 349 u32 offset, u32 size, u32 *written) 334 350 { 335 351 struct mpfs_auto_update_priv *priv = fw_uploader->dd_handle; 336 - enum fw_upload_err err = FW_UPLOAD_ERR_NONE; 337 352 int ret; 338 353 339 - reinit_completion(&priv->programming_complete); 340 - 341 354 ret = mpfs_auto_update_write_bitstream(fw_uploader, data, offset, size, written); 342 - if (ret) { 343 - err = FW_UPLOAD_ERR_RW_ERROR; 344 - goto out; 345 - } 355 + if (ret) 356 + return FW_UPLOAD_ERR_RW_ERROR; 346 357 347 - if (priv->cancel_request) { 348 - err = FW_UPLOAD_ERR_CANCELED; 349 - goto out; 350 - } 358 + if (priv->cancel_request) 359 + return FW_UPLOAD_ERR_CANCELED; 351 360 352 361 if (mpfs_auto_update_is_bitstream_info(data, size)) 353 - goto out; 362 + return FW_UPLOAD_ERR_NONE; 354 363 355 364 ret = mpfs_auto_update_verify_image(fw_uploader); 356 365 if (ret) 357 - err = FW_UPLOAD_ERR_FW_INVALID; 366 + return FW_UPLOAD_ERR_FW_INVALID; 358 367 359 - out: 360 - complete(&priv->programming_complete); 361 - 362 - return err; 368 + return FW_UPLOAD_ERR_NONE; 363 369 } 364 370 365 371 static const struct fw_upload_ops mpfs_auto_update_ops = { ··· 434 460 if (ret) 435 461 return dev_err_probe(dev, ret, 436 462 "The current bitstream does not support auto-update\n"); 437 - 438 - init_completion(&priv->programming_complete); 439 463 440 464 fw_uploader = firmware_upload_register(THIS_MODULE, dev, "mpfs-auto-update", 441 465 &mpfs_auto_update_ops, priv);
+14 -3
drivers/firmware/qcom/qcom_scm.c
··· 112 112 }; 113 113 114 114 #define QSEECOM_MAX_APP_NAME_SIZE 64 115 + #define SHMBRIDGE_RESULT_NOTSUPP 4 115 116 116 117 /* Each bit configures cold/warm boot address for one of the 4 CPUs */ 117 118 static const u8 qcom_scm_cpu_cold_bits[QCOM_SCM_BOOT_MAX_CPUS] = { ··· 217 216 218 217 struct qcom_tzmem_pool *qcom_scm_get_tzmem_pool(void) 219 218 { 220 - return __scm->mempool; 219 + return __scm ? __scm->mempool : NULL; 221 220 } 222 221 223 222 static enum qcom_scm_convention __get_convention(void) ··· 546 545 } else if (__qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_BOOT, 547 546 QCOM_SCM_BOOT_SET_DLOAD_MODE)) { 548 547 ret = __qcom_scm_set_dload_mode(__scm->dev, !!dload_mode); 549 - } else { 548 + } else if (dload_mode) { 550 549 dev_err(__scm->dev, 551 550 "No available mechanism for setting download mode\n"); 552 551 } ··· 1362 1361 1363 1362 int qcom_scm_shm_bridge_enable(void) 1364 1363 { 1364 + int ret; 1365 + 1365 1366 struct qcom_scm_desc desc = { 1366 1367 .svc = QCOM_SCM_SVC_MP, 1367 1368 .cmd = QCOM_SCM_MP_SHM_BRIDGE_ENABLE, ··· 1376 1373 QCOM_SCM_MP_SHM_BRIDGE_ENABLE)) 1377 1374 return -EOPNOTSUPP; 1378 1375 1379 - return qcom_scm_call(__scm->dev, &desc, &res) ?: res.result[0]; 1376 + ret = qcom_scm_call(__scm->dev, &desc, &res); 1377 + 1378 + if (ret) 1379 + return ret; 1380 + 1381 + if (res.result[0] == SHMBRIDGE_RESULT_NOTSUPP) 1382 + return -EOPNOTSUPP; 1383 + 1384 + return res.result[0]; 1380 1385 } 1381 1386 EXPORT_SYMBOL_GPL(qcom_scm_shm_bridge_enable); 1382 1387
+3
drivers/soc/qcom/llcc-qcom.c
··· 139 139 int size; 140 140 bool need_llcc_cfg; 141 141 bool no_edac; 142 + bool irq_configured; 142 143 }; 143 144 144 145 struct qcom_sct_config { ··· 719 718 .need_llcc_cfg = true, 720 719 .reg_offset = llcc_v2_1_reg_offset, 721 720 .edac_reg_offset = &llcc_v2_1_edac_reg_offset, 721 + .irq_configured = true, 722 722 }, 723 723 }; 724 724 ··· 1347 1345 drv_data->cfg = llcc_cfg; 1348 1346 drv_data->cfg_size = sz; 1349 1347 drv_data->edac_reg_offset = cfg->edac_reg_offset; 1348 + drv_data->ecc_irq_configured = cfg->irq_configured; 1350 1349 mutex_init(&drv_data->lock); 1351 1350 platform_set_drvdata(pdev, drv_data); 1352 1351
+22 -3
drivers/soc/qcom/pmic_glink.c
··· 4 4 * Copyright (c) 2022, Linaro Ltd 5 5 */ 6 6 #include <linux/auxiliary_bus.h> 7 + #include <linux/delay.h> 7 8 #include <linux/module.h> 8 9 #include <linux/of.h> 9 10 #include <linux/platform_device.h> ··· 13 12 #include <linux/soc/qcom/pdr.h> 14 13 #include <linux/soc/qcom/pmic_glink.h> 15 14 #include <linux/spinlock.h> 15 + 16 + #define PMIC_GLINK_SEND_TIMEOUT (5 * HZ) 16 17 17 18 enum { 18 19 PMIC_GLINK_CLIENT_BATT = 0, ··· 115 112 int pmic_glink_send(struct pmic_glink_client *client, void *data, size_t len) 116 113 { 117 114 struct pmic_glink *pg = client->pg; 115 + bool timeout_reached = false; 116 + unsigned long start; 118 117 int ret; 119 118 120 119 mutex_lock(&pg->state_lock); 121 - if (!pg->ept) 120 + if (!pg->ept) { 122 121 ret = -ECONNRESET; 123 - else 124 - ret = rpmsg_send(pg->ept, data, len); 122 + } else { 123 + start = jiffies; 124 + for (;;) { 125 + ret = rpmsg_send(pg->ept, data, len); 126 + if (ret != -EAGAIN) 127 + break; 128 + 129 + if (timeout_reached) { 130 + ret = -ETIMEDOUT; 131 + break; 132 + } 133 + 134 + usleep_range(1000, 5000); 135 + timeout_reached = time_after(jiffies, start + PMIC_GLINK_SEND_TIMEOUT); 136 + } 137 + } 125 138 mutex_unlock(&pg->state_lock); 126 139 127 140 return ret;
+7 -1
drivers/soc/qcom/socinfo.c
··· 786 786 qs->attr.revision = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%u.%u", 787 787 SOCINFO_MAJOR(le32_to_cpu(info->ver)), 788 788 SOCINFO_MINOR(le32_to_cpu(info->ver))); 789 - if (offsetof(struct socinfo, serial_num) <= item_size) 789 + if (!qs->attr.soc_id || !qs->attr.revision) 790 + return -ENOMEM; 791 + 792 + if (offsetof(struct socinfo, serial_num) <= item_size) { 790 793 qs->attr.serial_number = devm_kasprintf(&pdev->dev, GFP_KERNEL, 791 794 "%u", 792 795 le32_to_cpu(info->serial_num)); 796 + if (!qs->attr.serial_number) 797 + return -ENOMEM; 798 + } 793 799 794 800 qs->soc_dev = soc_device_register(&qs->attr); 795 801 if (IS_ERR(qs->soc_dev))
+2
include/linux/soc/qcom/llcc-qcom.h
··· 125 125 * @num_banks: Number of llcc banks 126 126 * @bitmap: Bit map to track the active slice ids 127 127 * @ecc_irq: interrupt for llcc cache error detection and reporting 128 + * @ecc_irq_configured: 'True' if firmware has already configured the irq propagation 128 129 * @version: Indicates the LLCC version 129 130 */ 130 131 struct llcc_drv_data { ··· 140 139 u32 num_banks; 141 140 unsigned long *bitmap; 142 141 int ecc_irq; 142 + bool ecc_irq_configured; 143 143 u32 version; 144 144 }; 145 145