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

Pull ARM SoC fixes from Arnd Bergmann:
"There is a fairly large number of bug fixes for Qualcomm platforms,
most of them addressing issues with the devicetree files for the newly
added Snapdragon X1 based laptops to make them more reliable.

The Qualcomm driver changes address a few build-time issues as well as
runtime problems in the tzmem and scm firmware, the USB Type-C driver,
and the cmd-db and pmic_glink soc drivers.

The NXP i.MX usually gets a bunch of devicetree fixes that is
proportional to the number of supported machines. This includes both
warning fixes and correctness for the 64-bit i.MX9, i.MX8 and
layerscape platforms, as well as a single fix for a 32-bit i.MX6 based
board.

The other changes are the usual minor changes, including an update to
the MAINTAINERS file, an omap3 dts file and a SoC driver for mpfs
(risc-v)"

* tag 'arm-fixes-6.11-2' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (50 commits)
firmware: microchip: fix incorrect error report of programming:timeout on success
soc: qcom: pd-mapper: Fix singleton refcount
firmware: qcom: tzmem: disable sdm670 platform
soc: qcom: pmic_glink: Actually communicate when remote goes down
usb: typec: ucsi: Move unregister out of atomic section
soc: qcom: pmic_glink: Fix race during initialization
firmware: qcom: qseecom: remove unused functions
firmware: qcom: tzmem: fix virtual-to-physical address conversion
firmware: qcom: scm: Mark get_wq_ctx() as atomic call
arm64: dts: qcom: x1e80100: Fix Adreno SMMU global interrupt
arm64: dts: qcom: disable GPU on x1e80100 by default
arm64: dts: imx8mm-phygate: fix typo pinctrcl-0
arm64: dts: imx95: correct L3Cache cache-sets
arm64: dts: imx95: correct a55 power-domains
arm64: dts: freescale: imx93-tqma9352-mba93xxla: fix typo
arm64: dts: freescale: imx93-tqma9352: fix CMA alloc-ranges
ARM: dts: imx6dl-yapp43: Increase LED current to match the yapp4 HW design
arm64: dts: imx93: update default value for snps,clk-csr
arm64: dts: freescale: tqma9352: Fix watchdog reset
arm64: dts: imx8mp-beacon-kit: Fix Stereo Audio on WM8962
...

+366 -176
+2
.mailmap
··· 354 Kiran Gunda <quic_kgunda@quicinc.com> <kgunda@codeaurora.org> 355 Kirill Tkhai <tkhai@ya.ru> <ktkhai@virtuozzo.com> 356 Kishon Vijay Abraham I <kishon@kernel.org> <kishon@ti.com> 357 Konstantin Khlebnikov <koct9i@gmail.com> <khlebnikov@yandex-team.ru> 358 Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com> 359 Koushik <raghavendra.koushik@neterion.com>
··· 354 Kiran Gunda <quic_kgunda@quicinc.com> <kgunda@codeaurora.org> 355 Kirill Tkhai <tkhai@ya.ru> <ktkhai@virtuozzo.com> 356 Kishon Vijay Abraham I <kishon@kernel.org> <kishon@ti.com> 357 + Konrad Dybcio <konradybcio@kernel.org> <konrad.dybcio@linaro.org> 358 + Konrad Dybcio <konradybcio@kernel.org> <konrad.dybcio@somainline.org> 359 Konstantin Khlebnikov <koct9i@gmail.com> <khlebnikov@yandex-team.ru> 360 Konstantin Khlebnikov <koct9i@gmail.com> <k.khlebnikov@samsung.com> 361 Koushik <raghavendra.koushik@neterion.com>
+4 -5
MAINTAINERS
··· 2539 S: Supported 2540 W: http://www.linux4sam.org 2541 T: git git://git.kernel.org/pub/scm/linux/kernel/git/at91/linux.git 2542 - F: arch/arm/boot/dts/microchip/at91* 2543 - F: arch/arm/boot/dts/microchip/sama* 2544 F: arch/arm/include/debug/at91.S 2545 F: arch/arm/mach-at91/ 2546 F: drivers/memory/atmel* ··· 2748 2749 ARM/QUALCOMM SUPPORT 2750 M: Bjorn Andersson <andersson@kernel.org> 2751 - M: Konrad Dybcio <konrad.dybcio@linaro.org> 2752 L: linux-arm-msm@vger.kernel.org 2753 S: Maintained 2754 T: git git://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux.git ··· 7111 DRM DRIVER for Qualcomm Adreno GPUs 7112 M: Rob Clark <robdclark@gmail.com> 7113 R: Sean Paul <sean@poorly.run> 7114 - R: Konrad Dybcio <konrad.dybcio@linaro.org> 7115 L: linux-arm-msm@vger.kernel.org 7116 L: dri-devel@lists.freedesktop.org 7117 L: freedreno@lists.freedesktop.org ··· 18799 18800 QUALCOMM CORE POWER REDUCTION (CPR) AVS DRIVER 18801 M: Bjorn Andersson <andersson@kernel.org> 18802 - M: Konrad Dybcio <konrad.dybcio@linaro.org> 18803 L: linux-pm@vger.kernel.org 18804 L: linux-arm-msm@vger.kernel.org 18805 S: Maintained
··· 2539 S: Supported 2540 W: http://www.linux4sam.org 2541 T: git git://git.kernel.org/pub/scm/linux/kernel/git/at91/linux.git 2542 + F: arch/arm/boot/dts/microchip/ 2543 F: arch/arm/include/debug/at91.S 2544 F: arch/arm/mach-at91/ 2545 F: drivers/memory/atmel* ··· 2749 2750 ARM/QUALCOMM SUPPORT 2751 M: Bjorn Andersson <andersson@kernel.org> 2752 + M: Konrad Dybcio <konradybcio@kernel.org> 2753 L: linux-arm-msm@vger.kernel.org 2754 S: Maintained 2755 T: git git://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux.git ··· 7112 DRM DRIVER for Qualcomm Adreno GPUs 7113 M: Rob Clark <robdclark@gmail.com> 7114 R: Sean Paul <sean@poorly.run> 7115 + R: Konrad Dybcio <konradybcio@kernel.org> 7116 L: linux-arm-msm@vger.kernel.org 7117 L: dri-devel@lists.freedesktop.org 7118 L: freedreno@lists.freedesktop.org ··· 18800 18801 QUALCOMM CORE POWER REDUCTION (CPR) AVS DRIVER 18802 M: Bjorn Andersson <andersson@kernel.org> 18803 + M: Konrad Dybcio <konradybcio@kernel.org> 18804 L: linux-pm@vger.kernel.org 18805 L: linux-arm-msm@vger.kernel.org 18806 S: Maintained
+6 -6
arch/arm/boot/dts/nxp/imx/imx6dl-yapp43-common.dtsi
··· 274 275 led@0 { 276 chan-name = "R"; 277 - led-cur = /bits/ 8 <0x20>; 278 - max-cur = /bits/ 8 <0x60>; 279 reg = <0>; 280 color = <LED_COLOR_ID_RED>; 281 }; 282 283 led@1 { 284 chan-name = "G"; 285 - led-cur = /bits/ 8 <0x20>; 286 - max-cur = /bits/ 8 <0x60>; 287 reg = <1>; 288 color = <LED_COLOR_ID_GREEN>; 289 }; 290 291 led@2 { 292 chan-name = "B"; 293 - led-cur = /bits/ 8 <0x20>; 294 - max-cur = /bits/ 8 <0x60>; 295 reg = <2>; 296 color = <LED_COLOR_ID_BLUE>; 297 };
··· 274 275 led@0 { 276 chan-name = "R"; 277 + led-cur = /bits/ 8 <0x6e>; 278 + max-cur = /bits/ 8 <0xc8>; 279 reg = <0>; 280 color = <LED_COLOR_ID_RED>; 281 }; 282 283 led@1 { 284 chan-name = "G"; 285 + led-cur = /bits/ 8 <0xbe>; 286 + max-cur = /bits/ 8 <0xc8>; 287 reg = <1>; 288 color = <LED_COLOR_ID_GREEN>; 289 }; 290 291 led@2 { 292 chan-name = "B"; 293 + led-cur = /bits/ 8 <0xbe>; 294 + max-cur = /bits/ 8 <0xc8>; 295 reg = <2>; 296 color = <LED_COLOR_ID_BLUE>; 297 };
+1 -1
arch/arm/boot/dts/ti/omap/omap3-n900.dts
··· 781 782 mount-matrix = "-1", "0", "0", 783 "0", "1", "0", 784 - "0", "0", "1"; 785 }; 786 787 cam1: camera@3e {
··· 781 782 mount-matrix = "-1", "0", "0", 783 "0", "1", "0", 784 + "0", "0", "-1"; 785 }; 786 787 cam1: camera@3e {
+1 -1
arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi
··· 175 }; 176 }; 177 178 - core-cluster-thermal { 179 polling-delay-passive = <1000>; 180 polling-delay = <5000>; 181 thermal-sensors = <&tmu 1>;
··· 175 }; 176 }; 177 178 + cluster-thermal { 179 polling-delay-passive = <1000>; 180 polling-delay = <5000>; 181 thermal-sensors = <&tmu 1>;
+1 -1
arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi
··· 214 }; 215 }; 216 217 - core-cluster-thermal { 218 polling-delay-passive = <1000>; 219 polling-delay = <5000>; 220 thermal-sensors = <&tmu 3>;
··· 214 }; 215 }; 216 217 + cluster-thermal { 218 polling-delay-passive = <1000>; 219 polling-delay = <5000>; 220 thermal-sensors = <&tmu 3>;
+1 -1
arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi
··· 182 }; 183 }; 184 185 - core-cluster-thermal { 186 polling-delay-passive = <1000>; 187 polling-delay = <5000>; 188 thermal-sensors = <&tmu 3>;
··· 182 }; 183 }; 184 185 + cluster-thermal { 186 polling-delay-passive = <1000>; 187 polling-delay = <5000>; 188 thermal-sensors = <&tmu 3>;
+1 -1
arch/arm64/boot/dts/freescale/fsl-ls1088a.dtsi
··· 131 }; 132 133 thermal-zones { 134 - core-cluster-thermal { 135 polling-delay-passive = <1000>; 136 polling-delay = <5000>; 137 thermal-sensors = <&tmu 0>;
··· 131 }; 132 133 thermal-zones { 134 + cluster-thermal { 135 polling-delay-passive = <1000>; 136 polling-delay = <5000>; 137 thermal-sensors = <&tmu 0>;
+4 -4
arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi
··· 122 }; 123 }; 124 125 - core-cluster1-thermal { 126 polling-delay-passive = <1000>; 127 polling-delay = <5000>; 128 thermal-sensors = <&tmu 4>; ··· 151 }; 152 }; 153 154 - core-cluster2-thermal { 155 polling-delay-passive = <1000>; 156 polling-delay = <5000>; 157 thermal-sensors = <&tmu 5>; ··· 180 }; 181 }; 182 183 - core-cluster3-thermal { 184 polling-delay-passive = <1000>; 185 polling-delay = <5000>; 186 thermal-sensors = <&tmu 6>; ··· 209 }; 210 }; 211 212 - core-cluster4-thermal { 213 polling-delay-passive = <1000>; 214 polling-delay = <5000>; 215 thermal-sensors = <&tmu 7>;
··· 122 }; 123 }; 124 125 + cluster1-thermal { 126 polling-delay-passive = <1000>; 127 polling-delay = <5000>; 128 thermal-sensors = <&tmu 4>; ··· 151 }; 152 }; 153 154 + cluster2-thermal { 155 polling-delay-passive = <1000>; 156 polling-delay = <5000>; 157 thermal-sensors = <&tmu 5>; ··· 180 }; 181 }; 182 183 + cluster3-thermal { 184 polling-delay-passive = <1000>; 185 polling-delay = <5000>; 186 thermal-sensors = <&tmu 6>; ··· 209 }; 210 }; 211 212 + cluster4-thermal { 213 polling-delay-passive = <1000>; 214 polling-delay = <5000>; 215 thermal-sensors = <&tmu 7>;
+1 -1
arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi
··· 492 }; 493 }; 494 495 - ddr-cluster5-thermal { 496 polling-delay-passive = <1000>; 497 polling-delay = <5000>; 498 thermal-sensors = <&tmu 1>;
··· 492 }; 493 }; 494 495 + ddr-ctrl5-thermal { 496 polling-delay-passive = <1000>; 497 polling-delay = <5000>; 498 thermal-sensors = <&tmu 1>;
+1 -1
arch/arm64/boot/dts/freescale/imx8mm-phygate-tauri-l-rs232-rs232.dtso
··· 21 22 &gpio3 { 23 pinctrl-names = "default"; 24 - pinctrcl-0 = <&pinctrl_gpio3_hog>; 25 26 uart4_rs485_en { 27 gpio-hog;
··· 21 22 &gpio3 { 23 pinctrl-names = "default"; 24 + pinctrl-0 = <&pinctrl_gpio3_hog>; 25 26 uart4_rs485_en { 27 gpio-hog;
+1 -1
arch/arm64/boot/dts/freescale/imx8mm-phygate-tauri-l-rs232-rs485.dtso
··· 22 23 &gpio3 { 24 pinctrl-names = "default"; 25 - pinctrcl-0 = <&pinctrl_gpio3_hog>; 26 27 uart4_rs485_en { 28 gpio-hog;
··· 22 23 &gpio3 { 24 pinctrl-names = "default"; 25 + pinctrl-0 = <&pinctrl_gpio3_hog>; 26 27 uart4_rs485_en { 28 gpio-hog;
+5 -7
arch/arm64/boot/dts/freescale/imx8mp-beacon-kit.dts
··· 211 212 simple-audio-card,cpu { 213 sound-dai = <&sai3>; 214 }; 215 216 simple-audio-card,codec { 217 sound-dai = <&wm8962>; 218 - clocks = <&clk IMX8MP_CLK_IPP_DO_CLKO1>; 219 - frame-master; 220 - bitclock-master; 221 }; 222 }; 223 }; ··· 506 &sai3 { 507 pinctrl-names = "default"; 508 pinctrl-0 = <&pinctrl_sai3>; 509 - assigned-clocks = <&clk IMX8MP_CLK_SAI3>, 510 - <&clk IMX8MP_AUDIO_PLL2> ; 511 - assigned-clock-parents = <&clk IMX8MP_AUDIO_PLL2_OUT>; 512 - assigned-clock-rates = <12288000>, <361267200>; 513 fsl,sai-mclk-direction-output; 514 status = "okay"; 515 };
··· 211 212 simple-audio-card,cpu { 213 sound-dai = <&sai3>; 214 + frame-master; 215 + bitclock-master; 216 }; 217 218 simple-audio-card,codec { 219 sound-dai = <&wm8962>; 220 }; 221 }; 222 }; ··· 507 &sai3 { 508 pinctrl-names = "default"; 509 pinctrl-0 = <&pinctrl_sai3>; 510 + assigned-clocks = <&clk IMX8MP_CLK_SAI3>; 511 + assigned-clock-parents = <&clk IMX8MP_AUDIO_PLL1_OUT>; 512 + assigned-clock-rates = <12288000>; 513 fsl,sai-mclk-direction-output; 514 status = "okay"; 515 };
+1 -1
arch/arm64/boot/dts/freescale/imx93-tqma9352-mba93xxla.dts
··· 499 pinctrl-0 = <&pinctrl_usdhc2_hs>, <&pinctrl_usdhc2_gpio>; 500 pinctrl-1 = <&pinctrl_usdhc2_uhs>, <&pinctrl_usdhc2_gpio>; 501 pinctrl-2 = <&pinctrl_usdhc2_uhs>, <&pinctrl_usdhc2_gpio>; 502 - cd-gpios = <&gpio3 00 GPIO_ACTIVE_LOW>; 503 vmmc-supply = <&reg_usdhc2_vmmc>; 504 bus-width = <4>; 505 no-sdio;
··· 499 pinctrl-0 = <&pinctrl_usdhc2_hs>, <&pinctrl_usdhc2_gpio>; 500 pinctrl-1 = <&pinctrl_usdhc2_uhs>, <&pinctrl_usdhc2_gpio>; 501 pinctrl-2 = <&pinctrl_usdhc2_uhs>, <&pinctrl_usdhc2_gpio>; 502 + cd-gpios = <&gpio3 0 GPIO_ACTIVE_LOW>; 503 vmmc-supply = <&reg_usdhc2_vmmc>; 504 bus-width = <4>; 505 no-sdio;
+2 -1
arch/arm64/boot/dts/freescale/imx93-tqma9352.dtsi
··· 19 linux,cma { 20 compatible = "shared-dma-pool"; 21 reusable; 22 - alloc-ranges = <0 0x60000000 0 0x40000000>; 23 size = <0 0x10000000>; 24 linux,cma-default; 25 }; ··· 156 &wdog3 { 157 pinctrl-names = "default"; 158 pinctrl-0 = <&pinctrl_wdog>; 159 status = "okay"; 160 }; 161
··· 19 linux,cma { 20 compatible = "shared-dma-pool"; 21 reusable; 22 + alloc-ranges = <0 0x80000000 0 0x40000000>; 23 size = <0 0x10000000>; 24 linux,cma-default; 25 }; ··· 156 &wdog3 { 157 pinctrl-names = "default"; 158 pinctrl-0 = <&pinctrl_wdog>; 159 + fsl,ext-reset-output; 160 status = "okay"; 161 }; 162
+1 -1
arch/arm64/boot/dts/freescale/imx93.dtsi
··· 1105 <&clk IMX93_CLK_SYS_PLL_PFD0_DIV2>; 1106 assigned-clock-rates = <100000000>, <250000000>; 1107 intf_mode = <&wakeupmix_gpr 0x28>; 1108 - snps,clk-csr = <0>; 1109 nvmem-cells = <&eth_mac2>; 1110 nvmem-cell-names = "mac-address"; 1111 status = "disabled";
··· 1105 <&clk IMX93_CLK_SYS_PLL_PFD0_DIV2>; 1106 assigned-clock-rates = <100000000>, <250000000>; 1107 intf_mode = <&wakeupmix_gpr 0x28>; 1108 + snps,clk-csr = <6>; 1109 nvmem-cells = <&eth_mac2>; 1110 nvmem-cell-names = "mac-address"; 1111 status = "disabled";
+7 -7
arch/arm64/boot/dts/freescale/imx95.dtsi
··· 27 reg = <0x0>; 28 enable-method = "psci"; 29 #cooling-cells = <2>; 30 - power-domains = <&scmi_devpd IMX95_PERF_A55>; 31 power-domain-names = "perf"; 32 i-cache-size = <32768>; 33 i-cache-line-size = <64>; ··· 44 reg = <0x100>; 45 enable-method = "psci"; 46 #cooling-cells = <2>; 47 - power-domains = <&scmi_devpd IMX95_PERF_A55>; 48 power-domain-names = "perf"; 49 i-cache-size = <32768>; 50 i-cache-line-size = <64>; ··· 61 reg = <0x200>; 62 enable-method = "psci"; 63 #cooling-cells = <2>; 64 - power-domains = <&scmi_devpd IMX95_PERF_A55>; 65 power-domain-names = "perf"; 66 i-cache-size = <32768>; 67 i-cache-line-size = <64>; ··· 78 reg = <0x300>; 79 enable-method = "psci"; 80 #cooling-cells = <2>; 81 - power-domains = <&scmi_devpd IMX95_PERF_A55>; 82 power-domain-names = "perf"; 83 i-cache-size = <32768>; 84 i-cache-line-size = <64>; ··· 93 device_type = "cpu"; 94 compatible = "arm,cortex-a55"; 95 reg = <0x400>; 96 - power-domains = <&scmi_devpd IMX95_PERF_A55>; 97 power-domain-names = "perf"; 98 enable-method = "psci"; 99 #cooling-cells = <2>; ··· 110 device_type = "cpu"; 111 compatible = "arm,cortex-a55"; 112 reg = <0x500>; 113 - power-domains = <&scmi_devpd IMX95_PERF_A55>; 114 power-domain-names = "perf"; 115 enable-method = "psci"; 116 #cooling-cells = <2>; ··· 187 compatible = "cache"; 188 cache-size = <524288>; 189 cache-line-size = <64>; 190 - cache-sets = <1024>; 191 cache-level = <3>; 192 cache-unified; 193 };
··· 27 reg = <0x0>; 28 enable-method = "psci"; 29 #cooling-cells = <2>; 30 + power-domains = <&scmi_perf IMX95_PERF_A55>; 31 power-domain-names = "perf"; 32 i-cache-size = <32768>; 33 i-cache-line-size = <64>; ··· 44 reg = <0x100>; 45 enable-method = "psci"; 46 #cooling-cells = <2>; 47 + power-domains = <&scmi_perf IMX95_PERF_A55>; 48 power-domain-names = "perf"; 49 i-cache-size = <32768>; 50 i-cache-line-size = <64>; ··· 61 reg = <0x200>; 62 enable-method = "psci"; 63 #cooling-cells = <2>; 64 + power-domains = <&scmi_perf IMX95_PERF_A55>; 65 power-domain-names = "perf"; 66 i-cache-size = <32768>; 67 i-cache-line-size = <64>; ··· 78 reg = <0x300>; 79 enable-method = "psci"; 80 #cooling-cells = <2>; 81 + power-domains = <&scmi_perf IMX95_PERF_A55>; 82 power-domain-names = "perf"; 83 i-cache-size = <32768>; 84 i-cache-line-size = <64>; ··· 93 device_type = "cpu"; 94 compatible = "arm,cortex-a55"; 95 reg = <0x400>; 96 + power-domains = <&scmi_perf IMX95_PERF_A55>; 97 power-domain-names = "perf"; 98 enable-method = "psci"; 99 #cooling-cells = <2>; ··· 110 device_type = "cpu"; 111 compatible = "arm,cortex-a55"; 112 reg = <0x500>; 113 + power-domains = <&scmi_perf IMX95_PERF_A55>; 114 power-domain-names = "perf"; 115 enable-method = "psci"; 116 #cooling-cells = <2>; ··· 187 compatible = "cache"; 188 cache-size = <524288>; 189 cache-line-size = <64>; 190 + cache-sets = <512>; 191 cache-level = <3>; 192 cache-unified; 193 };
+2 -2
arch/arm64/boot/dts/qcom/ipq5332.dtsi
··· 320 reg = <0x08af8800 0x400>; 321 322 interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>, 323 - <GIC_SPI 53 IRQ_TYPE_EDGE_BOTH>, 324 - <GIC_SPI 52 IRQ_TYPE_EDGE_BOTH>; 325 interrupt-names = "pwr_event", 326 "dp_hs_phy_irq", 327 "dm_hs_phy_irq";
··· 320 reg = <0x08af8800 0x400>; 321 322 interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>, 323 + <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>, 324 + <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>; 325 interrupt-names = "pwr_event", 326 "dp_hs_phy_irq", 327 "dm_hs_phy_irq";
+39 -3
arch/arm64/boot/dts/qcom/x1e80100-asus-vivobook-s15.dts
··· 278 vdd-l3-supply = <&vreg_s1f_0p7>; 279 vdd-s1-supply = <&vph_pwr>; 280 vdd-s2-supply = <&vph_pwr>; 281 }; 282 283 regulators-7 { ··· 430 }; 431 432 &pcie4 { 433 status = "okay"; 434 }; 435 436 &pcie4_phy { 437 - vdda-phy-supply = <&vreg_l3j_0p8>; 438 vdda-pll-supply = <&vreg_l3e_1p2>; 439 440 status = "okay"; ··· 530 bias-disable; 531 }; 532 533 - pcie6a_default: pcie2a-default-state { 534 clkreq-n-pins { 535 pins = "gpio153"; 536 function = "pcie6a_clk"; ··· 565 pins = "gpio152"; 566 function = "gpio"; 567 drive-strength = <2>; 568 - bias-pull-down; 569 }; 570 571 wake-n-pins {
··· 278 vdd-l3-supply = <&vreg_s1f_0p7>; 279 vdd-s1-supply = <&vph_pwr>; 280 vdd-s2-supply = <&vph_pwr>; 281 + 282 + vreg_l3i_0p8: ldo3 { 283 + regulator-name = "vreg_l3i_0p8"; 284 + regulator-min-microvolt = <880000>; 285 + regulator-max-microvolt = <920000>; 286 + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 287 + }; 288 }; 289 290 regulators-7 { ··· 423 }; 424 425 &pcie4 { 426 + perst-gpios = <&tlmm 146 GPIO_ACTIVE_LOW>; 427 + wake-gpios = <&tlmm 148 GPIO_ACTIVE_LOW>; 428 + 429 + pinctrl-0 = <&pcie4_default>; 430 + pinctrl-names = "default"; 431 + 432 status = "okay"; 433 }; 434 435 &pcie4_phy { 436 + vdda-phy-supply = <&vreg_l3i_0p8>; 437 vdda-pll-supply = <&vreg_l3e_1p2>; 438 439 status = "okay"; ··· 517 bias-disable; 518 }; 519 520 + pcie4_default: pcie4-default-state { 521 + clkreq-n-pins { 522 + pins = "gpio147"; 523 + function = "pcie4_clk"; 524 + drive-strength = <2>; 525 + bias-pull-up; 526 + }; 527 + 528 + perst-n-pins { 529 + pins = "gpio146"; 530 + function = "gpio"; 531 + drive-strength = <2>; 532 + bias-disable; 533 + }; 534 + 535 + wake-n-pins { 536 + pins = "gpio148"; 537 + function = "gpio"; 538 + drive-strength = <2>; 539 + bias-pull-up; 540 + }; 541 + }; 542 + 543 + pcie6a_default: pcie6a-default-state { 544 clkreq-n-pins { 545 pins = "gpio153"; 546 function = "pcie6a_clk"; ··· 529 pins = "gpio152"; 530 function = "gpio"; 531 drive-strength = <2>; 532 + bias-disable; 533 }; 534 535 wake-n-pins {
+60 -10
arch/arm64/boot/dts/qcom/x1e80100-crd.dts
··· 268 pinctrl-0 = <&edp_reg_en>; 269 pinctrl-names = "default"; 270 271 - regulator-always-on; 272 regulator-boot-on; 273 }; 274 ··· 636 }; 637 }; 638 639 &i2c0 { 640 clock-frequency = <400000>; 641 ··· 731 732 aux-bus { 733 panel { 734 - compatible = "edp-panel"; 735 power-supply = <&vreg_edp_3p3>; 736 737 port { 738 edp_panel_in: endpoint { ··· 767 }; 768 769 &pcie4 { 770 status = "okay"; 771 }; 772 773 &pcie4_phy { 774 - vdda-phy-supply = <&vreg_l3j_0p8>; 775 vdda-pll-supply = <&vreg_l3e_1p2>; 776 777 status = "okay"; ··· 800 vdda-pll-supply = <&vreg_l2j_1p2>; 801 802 status = "okay"; 803 }; 804 805 &qupv3_0 { ··· 958 bias-disable; 959 }; 960 961 - pcie6a_default: pcie2a-default-state { 962 clkreq-n-pins { 963 pins = "gpio153"; 964 function = "pcie6a_clk"; ··· 993 pins = "gpio152"; 994 function = "gpio"; 995 drive-strength = <2>; 996 - bias-pull-down; 997 }; 998 999 wake-n-pins { 1000 - pins = "gpio154"; 1001 - function = "gpio"; 1002 - drive-strength = <2>; 1003 - bias-pull-up; 1004 - }; 1005 }; 1006 1007 tpad_default: tpad-default-state {
··· 268 pinctrl-0 = <&edp_reg_en>; 269 pinctrl-names = "default"; 270 271 regulator-boot-on; 272 }; 273 ··· 637 }; 638 }; 639 640 + &gpu { 641 + status = "okay"; 642 + 643 + zap-shader { 644 + firmware-name = "qcom/x1e80100/gen70500_zap.mbn"; 645 + }; 646 + }; 647 + 648 &i2c0 { 649 clock-frequency = <400000>; 650 ··· 724 725 aux-bus { 726 panel { 727 + compatible = "samsung,atna45af01", "samsung,atna33xc20"; 728 + enable-gpios = <&pmc8380_3_gpios 4 GPIO_ACTIVE_HIGH>; 729 power-supply = <&vreg_edp_3p3>; 730 + 731 + pinctrl-0 = <&edp_bl_en>; 732 + pinctrl-names = "default"; 733 734 port { 735 edp_panel_in: endpoint { ··· 756 }; 757 758 &pcie4 { 759 + perst-gpios = <&tlmm 146 GPIO_ACTIVE_LOW>; 760 + wake-gpios = <&tlmm 148 GPIO_ACTIVE_LOW>; 761 + 762 + pinctrl-0 = <&pcie4_default>; 763 + pinctrl-names = "default"; 764 + 765 status = "okay"; 766 }; 767 768 &pcie4_phy { 769 + vdda-phy-supply = <&vreg_l3i_0p8>; 770 vdda-pll-supply = <&vreg_l3e_1p2>; 771 772 status = "okay"; ··· 783 vdda-pll-supply = <&vreg_l2j_1p2>; 784 785 status = "okay"; 786 + }; 787 + 788 + &pmc8380_3_gpios { 789 + edp_bl_en: edp-bl-en-state { 790 + pins = "gpio4"; 791 + function = "normal"; 792 + power-source = <1>; /* 1.8V */ 793 + input-disable; 794 + output-enable; 795 + }; 796 }; 797 798 &qupv3_0 { ··· 931 bias-disable; 932 }; 933 934 + pcie4_default: pcie4-default-state { 935 + clkreq-n-pins { 936 + pins = "gpio147"; 937 + function = "pcie4_clk"; 938 + drive-strength = <2>; 939 + bias-pull-up; 940 + }; 941 + 942 + perst-n-pins { 943 + pins = "gpio146"; 944 + function = "gpio"; 945 + drive-strength = <2>; 946 + bias-disable; 947 + }; 948 + 949 + wake-n-pins { 950 + pins = "gpio148"; 951 + function = "gpio"; 952 + drive-strength = <2>; 953 + bias-pull-up; 954 + }; 955 + }; 956 + 957 + pcie6a_default: pcie6a-default-state { 958 clkreq-n-pins { 959 pins = "gpio153"; 960 function = "pcie6a_clk"; ··· 943 pins = "gpio152"; 944 function = "gpio"; 945 drive-strength = <2>; 946 + bias-disable; 947 }; 948 949 wake-n-pins { 950 + pins = "gpio154"; 951 + function = "gpio"; 952 + drive-strength = <2>; 953 + bias-pull-up; 954 + }; 955 }; 956 957 tpad_default: tpad-default-state {
+46 -8
arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
··· 625 }; 626 627 &pcie4 { 628 status = "okay"; 629 }; 630 631 &pcie4_phy { 632 - vdda-phy-supply = <&vreg_l3j_0p8>; 633 vdda-pll-supply = <&vreg_l3e_1p2>; 634 635 status = "okay"; 636 }; 637 638 &pcie6a { ··· 797 bias-disable; 798 }; 799 800 - pcie6a_default: pcie2a-default-state { 801 clkreq-n-pins { 802 pins = "gpio153"; 803 function = "pcie6a_clk"; ··· 832 pins = "gpio152"; 833 function = "gpio"; 834 drive-strength = <2>; 835 - bias-pull-down; 836 }; 837 838 wake-n-pins { 839 - pins = "gpio154"; 840 - function = "gpio"; 841 - drive-strength = <2>; 842 - bias-pull-up; 843 - }; 844 }; 845 846 tpad_default: tpad-default-state {
··· 625 }; 626 627 &pcie4 { 628 + perst-gpios = <&tlmm 146 GPIO_ACTIVE_LOW>; 629 + wake-gpios = <&tlmm 148 GPIO_ACTIVE_LOW>; 630 + 631 + pinctrl-0 = <&pcie4_default>; 632 + pinctrl-names = "default"; 633 + 634 status = "okay"; 635 }; 636 637 &pcie4_phy { 638 + vdda-phy-supply = <&vreg_l3i_0p8>; 639 vdda-pll-supply = <&vreg_l3e_1p2>; 640 641 status = "okay"; 642 + }; 643 + 644 + &pcie4_port0 { 645 + wifi@0 { 646 + compatible = "pci17cb,1107"; 647 + reg = <0x10000 0x0 0x0 0x0 0x0>; 648 + 649 + qcom,ath12k-calibration-variant = "LES790"; 650 + }; 651 }; 652 653 &pcie6a { ··· 782 bias-disable; 783 }; 784 785 + pcie4_default: pcie4-default-state { 786 + clkreq-n-pins { 787 + pins = "gpio147"; 788 + function = "pcie4_clk"; 789 + drive-strength = <2>; 790 + bias-pull-up; 791 + }; 792 + 793 + perst-n-pins { 794 + pins = "gpio146"; 795 + function = "gpio"; 796 + drive-strength = <2>; 797 + bias-disable; 798 + }; 799 + 800 + wake-n-pins { 801 + pins = "gpio148"; 802 + function = "gpio"; 803 + drive-strength = <2>; 804 + bias-pull-up; 805 + }; 806 + }; 807 + 808 + pcie6a_default: pcie6a-default-state { 809 clkreq-n-pins { 810 pins = "gpio153"; 811 function = "pcie6a_clk"; ··· 794 pins = "gpio152"; 795 function = "gpio"; 796 drive-strength = <2>; 797 + bias-disable; 798 }; 799 800 wake-n-pins { 801 + pins = "gpio154"; 802 + function = "gpio"; 803 + drive-strength = <2>; 804 + bias-pull-up; 805 + }; 806 }; 807 808 tpad_default: tpad-default-state {
+45 -8
arch/arm64/boot/dts/qcom/x1e80100-qcp.dts
··· 606 }; 607 }; 608 609 &lpass_tlmm { 610 spkr_01_sd_n_active: spkr-01-sd-n-active-state { 611 pins = "gpio12"; ··· 668 }; 669 670 &pcie4 { 671 status = "okay"; 672 }; 673 674 &pcie4_phy { 675 - vdda-phy-supply = <&vreg_l3j_0p8>; 676 vdda-pll-supply = <&vreg_l3e_1p2>; 677 678 status = "okay"; ··· 818 bias-disable; 819 }; 820 821 - pcie6a_default: pcie2a-default-state { 822 clkreq-n-pins { 823 pins = "gpio153"; 824 function = "pcie6a_clk"; ··· 853 pins = "gpio152"; 854 function = "gpio"; 855 drive-strength = <2>; 856 - bias-pull-down; 857 }; 858 859 wake-n-pins { 860 - pins = "gpio154"; 861 - function = "gpio"; 862 - drive-strength = <2>; 863 - bias-pull-up; 864 - }; 865 }; 866 867 wcd_default: wcd-reset-n-active-state {
··· 606 }; 607 }; 608 609 + &gpu { 610 + status = "okay"; 611 + 612 + zap-shader { 613 + firmware-name = "qcom/x1e80100/gen70500_zap.mbn"; 614 + }; 615 + }; 616 + 617 &lpass_tlmm { 618 spkr_01_sd_n_active: spkr-01-sd-n-active-state { 619 pins = "gpio12"; ··· 660 }; 661 662 &pcie4 { 663 + perst-gpios = <&tlmm 146 GPIO_ACTIVE_LOW>; 664 + wake-gpios = <&tlmm 148 GPIO_ACTIVE_LOW>; 665 + 666 + pinctrl-0 = <&pcie4_default>; 667 + pinctrl-names = "default"; 668 + 669 status = "okay"; 670 }; 671 672 &pcie4_phy { 673 + vdda-phy-supply = <&vreg_l3i_0p8>; 674 vdda-pll-supply = <&vreg_l3e_1p2>; 675 676 status = "okay"; ··· 804 bias-disable; 805 }; 806 807 + pcie4_default: pcie4-default-state { 808 + clkreq-n-pins { 809 + pins = "gpio147"; 810 + function = "pcie4_clk"; 811 + drive-strength = <2>; 812 + bias-pull-up; 813 + }; 814 + 815 + perst-n-pins { 816 + pins = "gpio146"; 817 + function = "gpio"; 818 + drive-strength = <2>; 819 + bias-disable; 820 + }; 821 + 822 + wake-n-pins { 823 + pins = "gpio148"; 824 + function = "gpio"; 825 + drive-strength = <2>; 826 + bias-pull-up; 827 + }; 828 + }; 829 + 830 + pcie6a_default: pcie6a-default-state { 831 clkreq-n-pins { 832 pins = "gpio153"; 833 function = "pcie6a_clk"; ··· 816 pins = "gpio152"; 817 function = "gpio"; 818 drive-strength = <2>; 819 + bias-disable; 820 }; 821 822 wake-n-pins { 823 + pins = "gpio154"; 824 + function = "gpio"; 825 + drive-strength = <2>; 826 + bias-pull-up; 827 + }; 828 }; 829 830 wcd_default: wcd-reset-n-active-state {
+17 -4
arch/arm64/boot/dts/qcom/x1e80100.dtsi
··· 2901 2902 dma-coherent; 2903 2904 - linux,pci-domain = <7>; 2905 num-lanes = <2>; 2906 2907 interrupts = <GIC_SPI 773 IRQ_TYPE_LEVEL_HIGH>, ··· 2959 "link_down"; 2960 2961 power-domains = <&gcc GCC_PCIE_6A_GDSC>; 2962 2963 phys = <&pcie6a_phy>; 2964 phy-names = "pciephy"; ··· 3023 3024 dma-coherent; 3025 3026 - linux,pci-domain = <5>; 3027 num-lanes = <2>; 3028 3029 interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>, ··· 3081 "link_down"; 3082 3083 power-domains = <&gcc GCC_PCIE_4_GDSC>; 3084 3085 phys = <&pcie4_phy>; 3086 phy-names = "pciephy"; 3087 3088 status = "disabled"; 3089 }; 3090 3091 pcie4_phy: phy@1c0e000 { ··· 3167 interconnects = <&gem_noc MASTER_GFX3D 0 &mc_virt SLAVE_EBI1 0>; 3168 interconnect-names = "gfx-mem"; 3169 3170 zap-shader { 3171 memory-region = <&gpu_microcode_mem>; 3172 - firmware-name = "qcom/gen70500_zap.mbn"; 3173 }; 3174 3175 gpu_opp_table: opp-table { ··· 3301 reg = <0x0 0x03da0000 0x0 0x40000>; 3302 #iommu-cells = <2>; 3303 #global-interrupts = <1>; 3304 - interrupts = <GIC_SPI 673 IRQ_TYPE_LEVEL_HIGH>, 3305 <GIC_SPI 678 IRQ_TYPE_LEVEL_HIGH>, 3306 <GIC_SPI 679 IRQ_TYPE_LEVEL_HIGH>, 3307 <GIC_SPI 680 IRQ_TYPE_LEVEL_HIGH>,
··· 2901 2902 dma-coherent; 2903 2904 + linux,pci-domain = <6>; 2905 num-lanes = <2>; 2906 2907 interrupts = <GIC_SPI 773 IRQ_TYPE_LEVEL_HIGH>, ··· 2959 "link_down"; 2960 2961 power-domains = <&gcc GCC_PCIE_6A_GDSC>; 2962 + required-opps = <&rpmhpd_opp_nom>; 2963 2964 phys = <&pcie6a_phy>; 2965 phy-names = "pciephy"; ··· 3022 3023 dma-coherent; 3024 3025 + linux,pci-domain = <4>; 3026 num-lanes = <2>; 3027 3028 interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>, ··· 3080 "link_down"; 3081 3082 power-domains = <&gcc GCC_PCIE_4_GDSC>; 3083 + required-opps = <&rpmhpd_opp_nom>; 3084 3085 phys = <&pcie4_phy>; 3086 phy-names = "pciephy"; 3087 3088 status = "disabled"; 3089 + 3090 + pcie4_port0: pcie@0 { 3091 + device_type = "pci"; 3092 + reg = <0x0 0x0 0x0 0x0 0x0>; 3093 + bus-range = <0x01 0xff>; 3094 + 3095 + #address-cells = <3>; 3096 + #size-cells = <2>; 3097 + ranges; 3098 + }; 3099 }; 3100 3101 pcie4_phy: phy@1c0e000 { ··· 3155 interconnects = <&gem_noc MASTER_GFX3D 0 &mc_virt SLAVE_EBI1 0>; 3156 interconnect-names = "gfx-mem"; 3157 3158 + status = "disabled"; 3159 + 3160 zap-shader { 3161 memory-region = <&gpu_microcode_mem>; 3162 }; 3163 3164 gpu_opp_table: opp-table { ··· 3288 reg = <0x0 0x03da0000 0x0 0x40000>; 3289 #iommu-cells = <2>; 3290 #global-interrupts = <1>; 3291 + interrupts = <GIC_SPI 674 IRQ_TYPE_LEVEL_HIGH>, 3292 <GIC_SPI 678 IRQ_TYPE_LEVEL_HIGH>, 3293 <GIC_SPI 679 IRQ_TYPE_LEVEL_HIGH>, 3294 <GIC_SPI 680 IRQ_TYPE_LEVEL_HIGH>,
+1
arch/arm64/configs/defconfig
··· 887 CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m 888 CONFIG_DRM_PANEL_NOVATEK_NT36672E=m 889 CONFIG_DRM_PANEL_RAYDIUM_RM67191=m 890 CONFIG_DRM_PANEL_SITRONIX_ST7703=m 891 CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m 892 CONFIG_DRM_PANEL_VISIONOX_VTDR6130=m
··· 887 CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=m 888 CONFIG_DRM_PANEL_NOVATEK_NT36672E=m 889 CONFIG_DRM_PANEL_RAYDIUM_RM67191=m 890 + CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=m 891 CONFIG_DRM_PANEL_SITRONIX_ST7703=m 892 CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=m 893 CONFIG_DRM_PANEL_VISIONOX_VTDR6130=m
+1 -1
drivers/firmware/microchip/mpfs-auto-update.c
··· 166 */ 167 ret = wait_for_completion_timeout(&priv->programming_complete, 168 msecs_to_jiffies(AUTO_UPDATE_TIMEOUT_MS)); 169 - if (ret) 170 return FW_UPLOAD_ERR_TIMEOUT; 171 172 return FW_UPLOAD_ERR_NONE;
··· 166 */ 167 ret = wait_for_completion_timeout(&priv->programming_complete, 168 msecs_to_jiffies(AUTO_UPDATE_TIMEOUT_MS)); 169 + if (!ret) 170 return FW_UPLOAD_ERR_TIMEOUT; 171 172 return FW_UPLOAD_ERR_NONE;
+1 -1
drivers/firmware/qcom/qcom_scm-smc.c
··· 73 struct arm_smccc_res get_wq_res; 74 struct arm_smccc_args get_wq_ctx = {0}; 75 76 - get_wq_ctx.args[0] = ARM_SMCCC_CALL_VAL(ARM_SMCCC_STD_CALL, 77 ARM_SMCCC_SMC_64, ARM_SMCCC_OWNER_SIP, 78 SCM_SMC_FNID(QCOM_SCM_SVC_WAITQ, QCOM_SCM_WAITQ_GET_WQ_CTX)); 79
··· 73 struct arm_smccc_res get_wq_res; 74 struct arm_smccc_args get_wq_ctx = {0}; 75 76 + get_wq_ctx.args[0] = ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, 77 ARM_SMCCC_SMC_64, ARM_SMCCC_OWNER_SIP, 78 SCM_SMC_FNID(QCOM_SCM_SVC_WAITQ, QCOM_SCM_WAITQ_GET_WQ_CTX)); 79
+22 -11
drivers/firmware/qcom/qcom_tzmem.c
··· 40 }; 41 42 struct qcom_tzmem_chunk { 43 - phys_addr_t paddr; 44 size_t size; 45 struct qcom_tzmem_pool *owner; 46 }; ··· 77 /* List of machines that are known to not support SHM bridge correctly. */ 78 static const char *const qcom_tzmem_blacklist[] = { 79 "qcom,sc8180x", 80 "qcom,sdm845", /* reset in rmtfs memory assignment */ 81 "qcom,sm8150", /* reset in rmtfs memory assignment */ 82 NULL ··· 385 return NULL; 386 } 387 388 - chunk->paddr = gen_pool_virt_to_phys(pool->genpool, vaddr); 389 chunk->size = size; 390 chunk->owner = pool; 391 ··· 430 EXPORT_SYMBOL_GPL(qcom_tzmem_free); 431 432 /** 433 - * qcom_tzmem_to_phys() - Map the virtual address of a TZ buffer to physical. 434 - * @vaddr: Virtual address of the buffer allocated from a TZ memory pool. 435 * 436 - * Can be used in any context. The address must have been returned by a call 437 - * to qcom_tzmem_alloc(). 438 * 439 - * Returns: Physical address of the buffer. 440 */ 441 phys_addr_t qcom_tzmem_to_phys(void *vaddr) 442 { 443 struct qcom_tzmem_chunk *chunk; 444 445 guard(spinlock_irqsave)(&qcom_tzmem_chunks_lock); 446 447 - chunk = radix_tree_lookup(&qcom_tzmem_chunks, (unsigned long)vaddr); 448 - if (!chunk) 449 - return 0; 450 451 - return chunk->paddr; 452 } 453 EXPORT_SYMBOL_GPL(qcom_tzmem_to_phys); 454
··· 40 }; 41 42 struct qcom_tzmem_chunk { 43 size_t size; 44 struct qcom_tzmem_pool *owner; 45 }; ··· 78 /* List of machines that are known to not support SHM bridge correctly. */ 79 static const char *const qcom_tzmem_blacklist[] = { 80 "qcom,sc8180x", 81 + "qcom,sdm670", /* failure in GPU firmware loading */ 82 "qcom,sdm845", /* reset in rmtfs memory assignment */ 83 "qcom,sm8150", /* reset in rmtfs memory assignment */ 84 NULL ··· 385 return NULL; 386 } 387 388 chunk->size = size; 389 chunk->owner = pool; 390 ··· 431 EXPORT_SYMBOL_GPL(qcom_tzmem_free); 432 433 /** 434 + * qcom_tzmem_to_phys() - Map the virtual address of TZ memory to physical. 435 + * @vaddr: Virtual address of memory allocated from a TZ memory pool. 436 * 437 + * Can be used in any context. The address must point to memory allocated 438 + * using qcom_tzmem_alloc(). 439 * 440 + * Returns: 441 + * Physical address mapped from the virtual or 0 if the mapping failed. 442 */ 443 phys_addr_t qcom_tzmem_to_phys(void *vaddr) 444 { 445 struct qcom_tzmem_chunk *chunk; 446 + struct radix_tree_iter iter; 447 + void __rcu **slot; 448 + phys_addr_t ret; 449 450 guard(spinlock_irqsave)(&qcom_tzmem_chunks_lock); 451 452 + radix_tree_for_each_slot(slot, &qcom_tzmem_chunks, &iter, 0) { 453 + chunk = radix_tree_deref_slot_protected(slot, 454 + &qcom_tzmem_chunks_lock); 455 456 + ret = gen_pool_virt_to_phys(chunk->owner->genpool, 457 + (unsigned long)vaddr); 458 + if (ret == -1) 459 + continue; 460 + 461 + return ret; 462 + } 463 + 464 + return 0; 465 } 466 EXPORT_SYMBOL_GPL(qcom_tzmem_to_phys); 467
+10 -6
drivers/power/supply/qcom_battmgr.c
··· 1387 "failed to register wireless charing power supply\n"); 1388 } 1389 1390 - battmgr->client = devm_pmic_glink_register_client(dev, 1391 - PMIC_GLINK_OWNER_BATTMGR, 1392 - qcom_battmgr_callback, 1393 - qcom_battmgr_pdr_notify, 1394 - battmgr); 1395 - return PTR_ERR_OR_ZERO(battmgr->client); 1396 } 1397 1398 static const struct auxiliary_device_id qcom_battmgr_id_table[] = {
··· 1387 "failed to register wireless charing power supply\n"); 1388 } 1389 1390 + battmgr->client = devm_pmic_glink_client_alloc(dev, PMIC_GLINK_OWNER_BATTMGR, 1391 + qcom_battmgr_callback, 1392 + qcom_battmgr_pdr_notify, 1393 + battmgr); 1394 + if (IS_ERR(battmgr->client)) 1395 + return PTR_ERR(battmgr->client); 1396 + 1397 + pmic_glink_client_register(battmgr->client); 1398 + 1399 + return 0; 1400 } 1401 1402 static const struct auxiliary_device_id qcom_battmgr_id_table[] = {
+1 -1
drivers/soc/qcom/Kconfig
··· 77 select QCOM_QMI_HELPERS 78 select QCOM_PDR_MSG 79 select AUXILIARY_BUS 80 - depends on NET && QRTR 81 default QCOM_RPROC_COMMON 82 help 83 The Protection Domain Mapper maps registered services to the domains
··· 77 select QCOM_QMI_HELPERS 78 select QCOM_PDR_MSG 79 select AUXILIARY_BUS 80 + depends on NET && QRTR && (ARCH_QCOM || COMPILE_TEST) 81 default QCOM_RPROC_COMMON 82 help 83 The Protection Domain Mapper maps registered services to the domains
+1 -1
drivers/soc/qcom/cmd-db.c
··· 349 return -EINVAL; 350 } 351 352 - cmd_db_header = memremap(rmem->base, rmem->size, MEMREMAP_WB); 353 if (!cmd_db_header) { 354 ret = -ENOMEM; 355 cmd_db_header = NULL;
··· 349 return -EINVAL; 350 } 351 352 + cmd_db_header = memremap(rmem->base, rmem->size, MEMREMAP_WC); 353 if (!cmd_db_header) { 354 ret = -ENOMEM; 355 cmd_db_header = NULL;
+28 -12
drivers/soc/qcom/pmic_glink.c
··· 66 spin_unlock_irqrestore(&pg->client_lock, flags); 67 } 68 69 - struct pmic_glink_client *devm_pmic_glink_register_client(struct device *dev, 70 - unsigned int id, 71 - void (*cb)(const void *, size_t, void *), 72 - void (*pdr)(void *, int), 73 - void *priv) 74 { 75 struct pmic_glink_client *client; 76 struct pmic_glink *pg = dev_get_drvdata(dev->parent); 77 - unsigned long flags; 78 79 client = devres_alloc(_devm_pmic_glink_release_client, sizeof(*client), GFP_KERNEL); 80 if (!client) ··· 84 client->cb = cb; 85 client->pdr_notify = pdr; 86 client->priv = priv; 87 88 mutex_lock(&pg->state_lock); 89 spin_lock_irqsave(&pg->client_lock, flags); ··· 106 spin_unlock_irqrestore(&pg->client_lock, flags); 107 mutex_unlock(&pg->state_lock); 108 109 - devres_add(dev, client); 110 - 111 - return client; 112 } 113 - EXPORT_SYMBOL_GPL(devm_pmic_glink_register_client); 114 115 int pmic_glink_send(struct pmic_glink_client *client, void *data, size_t len) 116 { 117 struct pmic_glink *pg = client->pg; 118 119 - return rpmsg_send(pg->ept, data, len); 120 } 121 EXPORT_SYMBOL_GPL(pmic_glink_send); 122 ··· 191 if (pg->pdr_state == SERVREG_SERVICE_STATE_UP && pg->ept) 192 new_state = SERVREG_SERVICE_STATE_UP; 193 } else { 194 - if (pg->pdr_state == SERVREG_SERVICE_STATE_UP && pg->ept) 195 new_state = SERVREG_SERVICE_STATE_DOWN; 196 } 197
··· 66 spin_unlock_irqrestore(&pg->client_lock, flags); 67 } 68 69 + struct pmic_glink_client *devm_pmic_glink_client_alloc(struct device *dev, 70 + unsigned int id, 71 + void (*cb)(const void *, size_t, void *), 72 + void (*pdr)(void *, int), 73 + void *priv) 74 { 75 struct pmic_glink_client *client; 76 struct pmic_glink *pg = dev_get_drvdata(dev->parent); 77 78 client = devres_alloc(_devm_pmic_glink_release_client, sizeof(*client), GFP_KERNEL); 79 if (!client) ··· 85 client->cb = cb; 86 client->pdr_notify = pdr; 87 client->priv = priv; 88 + INIT_LIST_HEAD(&client->node); 89 + 90 + devres_add(dev, client); 91 + 92 + return client; 93 + } 94 + EXPORT_SYMBOL_GPL(devm_pmic_glink_client_alloc); 95 + 96 + void pmic_glink_client_register(struct pmic_glink_client *client) 97 + { 98 + struct pmic_glink *pg = client->pg; 99 + unsigned long flags; 100 101 mutex_lock(&pg->state_lock); 102 spin_lock_irqsave(&pg->client_lock, flags); ··· 95 spin_unlock_irqrestore(&pg->client_lock, flags); 96 mutex_unlock(&pg->state_lock); 97 98 } 99 + EXPORT_SYMBOL_GPL(pmic_glink_client_register); 100 101 int pmic_glink_send(struct pmic_glink_client *client, void *data, size_t len) 102 { 103 struct pmic_glink *pg = client->pg; 104 + int ret; 105 106 + mutex_lock(&pg->state_lock); 107 + if (!pg->ept) 108 + ret = -ECONNRESET; 109 + else 110 + ret = rpmsg_send(pg->ept, data, len); 111 + mutex_unlock(&pg->state_lock); 112 + 113 + return ret; 114 } 115 EXPORT_SYMBOL_GPL(pmic_glink_send); 116 ··· 175 if (pg->pdr_state == SERVREG_SERVICE_STATE_UP && pg->ept) 176 new_state = SERVREG_SERVICE_STATE_UP; 177 } else { 178 + if (pg->pdr_state == SERVREG_SERVICE_STATE_DOWN || !pg->ept) 179 new_state = SERVREG_SERVICE_STATE_DOWN; 180 } 181
+3 -1
drivers/soc/qcom/qcom_pd_mapper.c
··· 517 NULL, 518 }; 519 520 - static const struct of_device_id qcom_pdm_domains[] = { 521 { .compatible = "qcom,apq8064", .data = NULL, }, 522 { .compatible = "qcom,apq8074", .data = NULL, }, 523 { .compatible = "qcom,apq8084", .data = NULL, }, ··· 635 ret = PTR_ERR(data); 636 else 637 __qcom_pdm_data = data; 638 } 639 640 auxiliary_set_drvdata(auxdev, __qcom_pdm_data);
··· 517 NULL, 518 }; 519 520 + static const struct of_device_id qcom_pdm_domains[] __maybe_unused = { 521 { .compatible = "qcom,apq8064", .data = NULL, }, 522 { .compatible = "qcom,apq8074", .data = NULL, }, 523 { .compatible = "qcom,apq8084", .data = NULL, }, ··· 635 ret = PTR_ERR(data); 636 else 637 __qcom_pdm_data = data; 638 + } else { 639 + refcount_inc(&__qcom_pdm_data->refcnt); 640 } 641 642 auxiliary_set_drvdata(auxdev, __qcom_pdm_data);
+32 -11
drivers/usb/typec/ucsi/ucsi_glink.c
··· 68 69 struct work_struct notify_work; 70 struct work_struct register_work; 71 72 u8 read_buf[UCSI_BUF_SIZE]; 73 }; ··· 247 static void pmic_glink_ucsi_register(struct work_struct *work) 248 { 249 struct pmic_glink_ucsi *ucsi = container_of(work, struct pmic_glink_ucsi, register_work); 250 251 - ucsi_register(ucsi->ucsi); 252 } 253 254 static void pmic_glink_ucsi_callback(const void *data, size_t len, void *priv) ··· 284 static void pmic_glink_ucsi_pdr_notify(void *priv, int state) 285 { 286 struct pmic_glink_ucsi *ucsi = priv; 287 288 - if (state == SERVREG_SERVICE_STATE_UP) 289 - schedule_work(&ucsi->register_work); 290 - else if (state == SERVREG_SERVICE_STATE_DOWN) 291 - ucsi_unregister(ucsi->ucsi); 292 } 293 294 static void pmic_glink_ucsi_destroy(void *data) ··· 336 INIT_WORK(&ucsi->register_work, pmic_glink_ucsi_register); 337 init_completion(&ucsi->read_ack); 338 init_completion(&ucsi->write_ack); 339 mutex_init(&ucsi->lock); 340 341 ucsi->ucsi = ucsi_create(dev, &pmic_glink_ucsi_ops); ··· 384 ucsi->port_orientation[port] = desc; 385 } 386 387 - ucsi->client = devm_pmic_glink_register_client(dev, 388 - PMIC_GLINK_OWNER_USBC, 389 - pmic_glink_ucsi_callback, 390 - pmic_glink_ucsi_pdr_notify, 391 - ucsi); 392 - return PTR_ERR_OR_ZERO(ucsi->client); 393 } 394 395 static void pmic_glink_ucsi_remove(struct auxiliary_device *adev)
··· 68 69 struct work_struct notify_work; 70 struct work_struct register_work; 71 + spinlock_t state_lock; 72 + bool ucsi_registered; 73 + bool pd_running; 74 75 u8 read_buf[UCSI_BUF_SIZE]; 76 }; ··· 244 static void pmic_glink_ucsi_register(struct work_struct *work) 245 { 246 struct pmic_glink_ucsi *ucsi = container_of(work, struct pmic_glink_ucsi, register_work); 247 + unsigned long flags; 248 + bool pd_running; 249 250 + spin_lock_irqsave(&ucsi->state_lock, flags); 251 + pd_running = ucsi->pd_running; 252 + spin_unlock_irqrestore(&ucsi->state_lock, flags); 253 + 254 + if (!ucsi->ucsi_registered && pd_running) { 255 + ucsi_register(ucsi->ucsi); 256 + ucsi->ucsi_registered = true; 257 + } else if (ucsi->ucsi_registered && !pd_running) { 258 + ucsi_unregister(ucsi->ucsi); 259 + ucsi->ucsi_registered = false; 260 + } 261 } 262 263 static void pmic_glink_ucsi_callback(const void *data, size_t len, void *priv) ··· 269 static void pmic_glink_ucsi_pdr_notify(void *priv, int state) 270 { 271 struct pmic_glink_ucsi *ucsi = priv; 272 + unsigned long flags; 273 274 + spin_lock_irqsave(&ucsi->state_lock, flags); 275 + ucsi->pd_running = (state == SERVREG_SERVICE_STATE_UP); 276 + spin_unlock_irqrestore(&ucsi->state_lock, flags); 277 + schedule_work(&ucsi->register_work); 278 } 279 280 static void pmic_glink_ucsi_destroy(void *data) ··· 320 INIT_WORK(&ucsi->register_work, pmic_glink_ucsi_register); 321 init_completion(&ucsi->read_ack); 322 init_completion(&ucsi->write_ack); 323 + spin_lock_init(&ucsi->state_lock); 324 mutex_init(&ucsi->lock); 325 326 ucsi->ucsi = ucsi_create(dev, &pmic_glink_ucsi_ops); ··· 367 ucsi->port_orientation[port] = desc; 368 } 369 370 + ucsi->client = devm_pmic_glink_client_alloc(dev, PMIC_GLINK_OWNER_USBC, 371 + pmic_glink_ucsi_callback, 372 + pmic_glink_ucsi_pdr_notify, 373 + ucsi); 374 + if (IS_ERR(ucsi->client)) 375 + return PTR_ERR(ucsi->client); 376 + 377 + pmic_glink_client_register(ucsi->client); 378 + 379 + return 0; 380 } 381 382 static void pmic_glink_ucsi_remove(struct auxiliary_device *adev)
-45
include/linux/firmware/qcom/qcom_qseecom.h
··· 26 }; 27 28 /** 29 - * qseecom_scm_dev() - Get the SCM device associated with the QSEECOM client. 30 - * @client: The QSEECOM client device. 31 - * 32 - * Returns the SCM device under which the provided QSEECOM client device 33 - * operates. This function is intended to be used for DMA allocations. 34 - */ 35 - static inline struct device *qseecom_scm_dev(struct qseecom_client *client) 36 - { 37 - return client->aux_dev.dev.parent->parent; 38 - } 39 - 40 - /** 41 - * qseecom_dma_alloc() - Allocate DMA memory for a QSEECOM client. 42 - * @client: The QSEECOM client to allocate the memory for. 43 - * @size: The number of bytes to allocate. 44 - * @dma_handle: Pointer to where the DMA address should be stored. 45 - * @gfp: Allocation flags. 46 - * 47 - * Wrapper function for dma_alloc_coherent(), allocating DMA memory usable for 48 - * TZ/QSEECOM communication. Refer to dma_alloc_coherent() for details. 49 - */ 50 - static inline void *qseecom_dma_alloc(struct qseecom_client *client, size_t size, 51 - dma_addr_t *dma_handle, gfp_t gfp) 52 - { 53 - return dma_alloc_coherent(qseecom_scm_dev(client), size, dma_handle, gfp); 54 - } 55 - 56 - /** 57 - * dma_free_coherent() - Free QSEECOM DMA memory. 58 - * @client: The QSEECOM client for which the memory has been allocated. 59 - * @size: The number of bytes allocated. 60 - * @cpu_addr: Virtual memory address to free. 61 - * @dma_handle: DMA memory address to free. 62 - * 63 - * Wrapper function for dma_free_coherent(), freeing memory previously 64 - * allocated with qseecom_dma_alloc(). Refer to dma_free_coherent() for 65 - * details. 66 - */ 67 - static inline void qseecom_dma_free(struct qseecom_client *client, size_t size, 68 - void *cpu_addr, dma_addr_t dma_handle) 69 - { 70 - return dma_free_coherent(qseecom_scm_dev(client), size, cpu_addr, dma_handle); 71 - } 72 - 73 - /** 74 * qcom_qseecom_app_send() - Send to and receive data from a given QSEE app. 75 * @client: The QSEECOM client associated with the target app. 76 * @req: Request buffer sent to the app (must be TZ memory).
··· 26 }; 27 28 /** 29 * qcom_qseecom_app_send() - Send to and receive data from a given QSEE app. 30 * @client: The QSEECOM client associated with the target app. 31 * @req: Request buffer sent to the app (must be TZ memory).
+6 -5
include/linux/soc/qcom/pmic_glink.h
··· 23 24 int pmic_glink_send(struct pmic_glink_client *client, void *data, size_t len); 25 26 - struct pmic_glink_client *devm_pmic_glink_register_client(struct device *dev, 27 - unsigned int id, 28 - void (*cb)(const void *, size_t, void *), 29 - void (*pdr)(void *, int), 30 - void *priv); 31 32 #endif
··· 23 24 int pmic_glink_send(struct pmic_glink_client *client, void *data, size_t len); 25 26 + struct pmic_glink_client *devm_pmic_glink_client_alloc(struct device *dev, 27 + unsigned int id, 28 + void (*cb)(const void *, size_t, void *), 29 + void (*pdr)(void *, int), 30 + void *priv); 31 + void pmic_glink_client_register(struct pmic_glink_client *client); 32 33 #endif