* [PATCH 0/9] Microsoft Surface Pro 11 support @ 2025-07-14 17:35 Dale Whinham 2025-07-14 17:35 ` [PATCH 1/9] dt-bindings: arm: qcom: Document Microsoft Surface Pro 11 Dale Whinham ` (4 more replies) 0 siblings, 5 replies; 16+ messages in thread From: Dale Whinham @ 2025-07-14 17:35 UTC (permalink / raw) To: Jessica Zhang, Sean Paul, Marijn Suijten, Bjorn Andersson, Douglas Anderson, Jeff Johnson, linux-arm-msm, devicetree, linux-kernel, dri-devel, linux-wireless, ath12k, freedreno, platform-driver-x86 Cc: Jérôme de Bretagne, Dale Whinham, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Neil Armstrong, David Airlie, Simona Vetter, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, Johannes Berg, Jeff Johnson, Rob Clark, Abhinav Kumar, Dmitry Baryshkov, Maximilian Luz, Hans de Goede, Ilpo Järvinen This series brings support for the X1E80100/X1P64100-based Microsoft Surface Pro 11. Patches 7 to 9 are included as RFC as we are unsure of how best to achieve the required functionality, however the implementation is functional. Dale Whinham (6): dt-bindings: display: panel: samsung,atna30dw01: document ATNA30DW01 firmware: qcom: scm: allow QSEECOM on Surface Pro 11 platform/surface: aggregator_registry: Add Surface Pro 11 arm64: dts: qcom: Add support for Surface Pro 11 wifi: ath12k: Add support for disabling rfkill via devicetree arm64: dts: qcom: x1e80100-denali: Disable rfkill for wifi0 Jérôme de Bretagne (3): dt-bindings: arm: qcom: Document Microsoft Surface Pro 11 drm/msm/dp: Work around bogus maximum link rate dt-bindings: wireless: ath12k: Add disable-rfkill property .../devicetree/bindings/arm/qcom.yaml | 1 + .../display/panel/samsung,atna33xc20.yaml | 2 + .../bindings/net/wireless/qcom,ath12k.yaml | 3 + arch/arm64/boot/dts/qcom/Makefile | 1 + .../dts/qcom/x1e80100-microsoft-denali.dts | 1341 +++++++++++++++++ drivers/firmware/qcom/qcom_scm.c | 1 + drivers/gpu/drm/msm/dp/dp_panel.c | 13 + drivers/net/wireless/ath/ath12k/core.c | 3 + .../surface/surface_aggregator_registry.c | 18 + 9 files changed, 1383 insertions(+) create mode 100644 arch/arm64/boot/dts/qcom/x1e80100-microsoft-denali.dts -- 2.50.1 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 1/9] dt-bindings: arm: qcom: Document Microsoft Surface Pro 11 2025-07-14 17:35 [PATCH 0/9] Microsoft Surface Pro 11 support Dale Whinham @ 2025-07-14 17:35 ` Dale Whinham 2025-07-15 3:58 ` Rob Herring (Arm) 2025-07-14 17:35 ` [PATCH 3/9] firmware: qcom: scm: allow QSEECOM on " Dale Whinham ` (3 subsequent siblings) 4 siblings, 1 reply; 16+ messages in thread From: Dale Whinham @ 2025-07-14 17:35 UTC (permalink / raw) To: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Conor Dooley Cc: Jérôme de Bretagne, Dale Whinham, linux-arm-msm, devicetree, linux-kernel From: Jérôme de Bretagne <jerome.debretagne@gmail.com> Add the compatible for the Qualcomm X1-based Microsoft Surface Pro 11, using its Denali codename. Signed-off-by: Jérôme de Bretagne <jerome.debretagne@gmail.com> Signed-off-by: Dale Whinham <daleyo@gmail.com> --- Documentation/devicetree/bindings/arm/qcom.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/devicetree/bindings/arm/qcom.yaml b/Documentation/devicetree/bindings/arm/qcom.yaml index 6260839fe972..2b02619e665f 100644 --- a/Documentation/devicetree/bindings/arm/qcom.yaml +++ b/Documentation/devicetree/bindings/arm/qcom.yaml @@ -1135,6 +1135,7 @@ properties: - dell,xps13-9345 - hp,omnibook-x14 - lenovo,yoga-slim7x + - microsoft,denali - microsoft,romulus13 - microsoft,romulus15 - qcom,x1e80100-crd -- 2.50.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 1/9] dt-bindings: arm: qcom: Document Microsoft Surface Pro 11 2025-07-14 17:35 ` [PATCH 1/9] dt-bindings: arm: qcom: Document Microsoft Surface Pro 11 Dale Whinham @ 2025-07-15 3:58 ` Rob Herring (Arm) 0 siblings, 0 replies; 16+ messages in thread From: Rob Herring (Arm) @ 2025-07-15 3:58 UTC (permalink / raw) To: Dale Whinham Cc: devicetree, Krzysztof Kozlowski, linux-kernel, Bjorn Andersson, linux-arm-msm, Jérôme de Bretagne, Konrad Dybcio, Conor Dooley On Mon, 14 Jul 2025 18:35:37 +0100, Dale Whinham wrote: > From: Jérôme de Bretagne <jerome.debretagne@gmail.com> > > Add the compatible for the Qualcomm X1-based Microsoft Surface Pro 11, > using its Denali codename. > > Signed-off-by: Jérôme de Bretagne <jerome.debretagne@gmail.com> > Signed-off-by: Dale Whinham <daleyo@gmail.com> > --- > Documentation/devicetree/bindings/arm/qcom.yaml | 1 + > 1 file changed, 1 insertion(+) > Acked-by: Rob Herring (Arm) <robh@kernel.org> ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 3/9] firmware: qcom: scm: allow QSEECOM on Surface Pro 11 2025-07-14 17:35 [PATCH 0/9] Microsoft Surface Pro 11 support Dale Whinham 2025-07-14 17:35 ` [PATCH 1/9] dt-bindings: arm: qcom: Document Microsoft Surface Pro 11 Dale Whinham @ 2025-07-14 17:35 ` Dale Whinham 2025-07-14 17:35 ` [PATCH 5/9] arm64: dts: qcom: Add support for " Dale Whinham ` (2 subsequent siblings) 4 siblings, 0 replies; 16+ messages in thread From: Dale Whinham @ 2025-07-14 17:35 UTC (permalink / raw) To: Bjorn Andersson, Konrad Dybcio Cc: Jérôme de Bretagne, Dale Whinham, linux-arm-msm, linux-kernel Enables access to EFI variables on this machine. Tested-by: Jérôme de Bretagne <jerome.debretagne@gmail.com> Signed-off-by: Dale Whinham <daleyo@gmail.com> --- drivers/firmware/qcom/qcom_scm.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index fc4d67e4c4a6..595c9c100af1 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -1995,6 +1995,7 @@ static const struct of_device_id qcom_scm_qseecom_allowlist[] __maybe_unused = { { .compatible = "lenovo,yoga-slim7x" }, { .compatible = "microsoft,arcata", }, { .compatible = "microsoft,blackrock" }, + { .compatible = "microsoft,denali", }, { .compatible = "microsoft,romulus13", }, { .compatible = "microsoft,romulus15", }, { .compatible = "qcom,sc8180x-primus" }, -- 2.50.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 5/9] arm64: dts: qcom: Add support for Surface Pro 11 2025-07-14 17:35 [PATCH 0/9] Microsoft Surface Pro 11 support Dale Whinham 2025-07-14 17:35 ` [PATCH 1/9] dt-bindings: arm: qcom: Document Microsoft Surface Pro 11 Dale Whinham 2025-07-14 17:35 ` [PATCH 3/9] firmware: qcom: scm: allow QSEECOM on " Dale Whinham @ 2025-07-14 17:35 ` Dale Whinham 2025-07-14 17:35 ` [PATCH 6/9] drm/msm/dp: Work around bogus maximum link rate Dale Whinham 2025-07-14 17:35 ` [PATCH 9/9 RFC] arm64: dts: qcom: x1e80100-denali: Disable rfkill for wifi0 Dale Whinham 4 siblings, 0 replies; 16+ messages in thread From: Dale Whinham @ 2025-07-14 17:35 UTC (permalink / raw) To: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Conor Dooley Cc: Jérôme de Bretagne, Dale Whinham, linux-arm-msm, devicetree, linux-kernel Add a device tree for the Qualcomm X1E-based Microsoft Surface Pro 11 (codenamed 'Denali'). This device is very similar to the Surface Laptop 7 ('Romulus'). Hardware support is similar to other X1E machines. The most notable features missing are: - Touchscreen and pen - Cameras (and status LEDs) Tested-by: Jérôme de Bretagne <jerome.debretagne@gmail.com> Signed-off-by: Dale Whinham <daleyo@gmail.com> --- arch/arm64/boot/dts/qcom/Makefile | 1 + .../dts/qcom/x1e80100-microsoft-denali.dts | 1339 +++++++++++++++++ 2 files changed, 1340 insertions(+) create mode 100644 arch/arm64/boot/dts/qcom/x1e80100-microsoft-denali.dts diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile index 710879d94c00..98707a3e86e7 100644 --- a/arch/arm64/boot/dts/qcom/Makefile +++ b/arch/arm64/boot/dts/qcom/Makefile @@ -296,6 +296,7 @@ dtb-$(CONFIG_ARCH_QCOM) += x1e80100-crd.dtb dtb-$(CONFIG_ARCH_QCOM) += x1e80100-dell-xps13-9345.dtb dtb-$(CONFIG_ARCH_QCOM) += x1e80100-hp-omnibook-x14.dtb dtb-$(CONFIG_ARCH_QCOM) += x1e80100-lenovo-yoga-slim7x.dtb +dtb-$(CONFIG_ARCH_QCOM) += x1e80100-microsoft-denali.dtb dtb-$(CONFIG_ARCH_QCOM) += x1e80100-microsoft-romulus13.dtb dtb-$(CONFIG_ARCH_QCOM) += x1e80100-microsoft-romulus15.dtb dtb-$(CONFIG_ARCH_QCOM) += x1e80100-qcp.dtb diff --git a/arch/arm64/boot/dts/qcom/x1e80100-microsoft-denali.dts b/arch/arm64/boot/dts/qcom/x1e80100-microsoft-denali.dts new file mode 100644 index 000000000000..8bc3959537ab --- /dev/null +++ b/arch/arm64/boot/dts/qcom/x1e80100-microsoft-denali.dts @@ -0,0 +1,1339 @@ +// SPDX-License-Identifier: BSD-3-Clause +/* + * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2025 Dale Whinham <daleyo@gmail.com> + */ + +/dts-v1/; + +#include <dt-bindings/gpio/gpio.h> +#include <dt-bindings/input/gpio-keys.h> +#include <dt-bindings/input/input.h> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h> + +#include "x1e80100.dtsi" +#include "x1e80100-pmics.dtsi" + +/ { + model = "Microsoft Surface Pro 11th Edition"; + compatible = "microsoft,denali", "qcom,x1e80100"; + + aliases { + serial0 = &uart2; + serial1 = &uart14; + }; + + gpio-keys { + compatible = "gpio-keys"; + + pinctrl-0 = <&hall_int_n_default>; + pinctrl-names = "default"; + + switch-lid { + gpios = <&tlmm 2 GPIO_ACTIVE_LOW>; + linux,input-type = <EV_SW>; + linux,code = <SW_LID>; + wakeup-source; + wakeup-event-action = <EV_ACT_DEASSERTED>; + }; + }; + + pmic-glink { + compatible = "qcom,x1e80100-pmic-glink", + "qcom,sm8550-pmic-glink", + "qcom,pmic-glink"; + #address-cells = <1>; + #size-cells = <0>; + orientation-gpios = <&tlmm 121 GPIO_ACTIVE_HIGH>, + <&tlmm 123 GPIO_ACTIVE_HIGH>; + + /* Left-side rear port */ + connector@0 { + compatible = "usb-c-connector"; + reg = <0>; + power-role = "dual"; + data-role = "dual"; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + + pmic_glink_ss0_hs_in: endpoint { + remote-endpoint = <&usb_1_ss0_dwc3_hs>; + }; + }; + + port@1 { + reg = <1>; + + pmic_glink_ss0_ss_in: endpoint { + remote-endpoint = <&retimer_ss0_ss_out>; + }; + }; + + port@2 { + reg = <2>; + + pmic_glink_ss0_con_sbu_in: endpoint { + remote-endpoint = <&retimer_ss0_con_sbu_out>; + }; + }; + }; + }; + + /* Left-side front port */ + connector@1 { + compatible = "usb-c-connector"; + reg = <1>; + power-role = "dual"; + data-role = "dual"; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + + pmic_glink_ss1_hs_in: endpoint { + remote-endpoint = <&usb_1_ss1_dwc3_hs>; + }; + }; + + port@1 { + reg = <1>; + + pmic_glink_ss1_ss_in: endpoint { + remote-endpoint = <&retimer_ss1_ss_out>; + }; + }; + + port@2 { + reg = <2>; + + pmic_glink_ss1_con_sbu_in: endpoint { + remote-endpoint = <&retimer_ss1_con_sbu_out>; + }; + }; + }; + }; + }; + + reserved-memory { + linux,cma { + compatible = "shared-dma-pool"; + size = <0x0 0x8000000>; + reusable; + linux,cma-default; + }; + }; + + vreg_edp_3p3: regulator-edp-3p3 { + compatible = "regulator-fixed"; + + regulator-name = "VREG_EDP_3P3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + + gpio = <&tlmm 70 GPIO_ACTIVE_HIGH>; + enable-active-high; + + pinctrl-0 = <&edp_reg_en>; + pinctrl-names = "default"; + + regulator-boot-on; + }; + + vreg_rtmr0_1p15: regulator-rtmr0-1p15 { + compatible = "regulator-fixed"; + + regulator-name = "VREG_RTMR0_1P15"; + + regulator-min-microvolt = <1150000>; + regulator-max-microvolt = <1150000>; + + gpio = <&pmc8380_5_gpios 8 GPIO_ACTIVE_HIGH>; + enable-active-high; + + pinctrl-0 = <&rtmr0_1p15_reg_en>; + pinctrl-names = "default"; + + regulator-boot-on; + }; + + vreg_rtmr0_1p8: regulator-rtmr0-1p8 { + compatible = "regulator-fixed"; + + regulator-name = "VREG_RTMR0_1P8"; + + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + + gpio = <&pm8550ve_9_gpios 8 GPIO_ACTIVE_HIGH>; + enable-active-high; + + pinctrl-0 = <&rtmr0_1p8_reg_en>; + pinctrl-names = "default"; + + regulator-boot-on; + }; + + vreg_rtmr0_3p3: regulator-rtmr0-3p3 { + compatible = "regulator-fixed"; + + regulator-name = "VREG_RTMR0_3P3"; + + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + + gpio = <&pm8550_gpios 11 GPIO_ACTIVE_HIGH>; + enable-active-high; + + pinctrl-0 = <&rtmr0_3p3_reg_en>; + pinctrl-names = "default"; + + regulator-boot-on; + }; + + vreg_rtmr1_1p15: regulator-rtmr1-1p15 { + compatible = "regulator-fixed"; + + regulator-name = "VREG_RTMR1_1P15"; + + regulator-min-microvolt = <1150000>; + regulator-max-microvolt = <1150000>; + + gpio = <&tlmm 188 GPIO_ACTIVE_HIGH>; + enable-active-high; + + pinctrl-0 = <&rtmr1_1p15_reg_en>; + pinctrl-names = "default"; + + regulator-boot-on; + }; + + vreg_rtmr1_1p8: regulator-rtmr1-1p8 { + compatible = "regulator-fixed"; + + regulator-name = "VREG_RTMR1_1P8"; + + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + + gpio = <&tlmm 175 GPIO_ACTIVE_HIGH>; + enable-active-high; + + pinctrl-0 = <&rtmr1_1p8_reg_en>; + pinctrl-names = "default"; + + regulator-boot-on; + }; + + vreg_rtmr1_3p3: regulator-rtmr1-3p3 { + compatible = "regulator-fixed"; + + regulator-name = "VREG_RTMR1_3P3"; + + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + + gpio = <&tlmm 186 GPIO_ACTIVE_HIGH>; + enable-active-high; + + pinctrl-0 = <&rtmr1_3p3_reg_en>; + pinctrl-names = "default"; + + regulator-boot-on; + }; + + vreg_nvme: regulator-nvme { + compatible = "regulator-fixed"; + + regulator-name = "VREG_NVME_3P3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + + gpio = <&tlmm 18 GPIO_ACTIVE_HIGH>; + enable-active-high; + + pinctrl-0 = <&nvme_reg_en>; + pinctrl-names = "default"; + + regulator-boot-on; + }; + + vph_pwr: regulator-vph-pwr { + compatible = "regulator-fixed"; + + regulator-name = "vph_pwr"; + regulator-min-microvolt = <3700000>; + regulator-max-microvolt = <3700000>; + + regulator-always-on; + regulator-boot-on; + }; + + vreg_wcn_3p3: regulator-wcn-3p3 { + compatible = "regulator-fixed"; + + regulator-name = "VREG_WCN_3P3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + + gpio = <&tlmm 214 GPIO_ACTIVE_HIGH>; + enable-active-high; + + pinctrl-0 = <&wcn_sw_en>; + pinctrl-names = "default"; + + regulator-boot-on; + }; + + /* + * TODO: These two regulators are actually part of the removable M.2 + * card and not the CRD mainboard. Need to describe this differently. + * Functionally it works correctly, because all we need to do is to + * turn on the actual 3.3V supply above. + */ + vreg_wcn_0p95: regulator-wcn-0p95 { + compatible = "regulator-fixed"; + + regulator-name = "VREG_WCN_0P95"; + regulator-min-microvolt = <950000>; + regulator-max-microvolt = <950000>; + + vin-supply = <&vreg_wcn_3p3>; + }; + + vreg_wcn_1p9: regulator-wcn-1p9 { + compatible = "regulator-fixed"; + + regulator-name = "VREG_WCN_1P9"; + regulator-min-microvolt = <1900000>; + regulator-max-microvolt = <1900000>; + + vin-supply = <&vreg_wcn_3p3>; + }; + + sound { + compatible = "qcom,x1e80100-sndcard"; + model = "X1E80100-Microsoft-Surface-Pro-11"; + audio-routing = "SpkrLeft IN", "WSA WSA_SPK1 OUT", + "SpkrRight IN", "WSA WSA_SPK2 OUT"; + //"IN1_HPHL", "HPHL_OUT", + //"IN2_HPHR", "HPHR_OUT", + //"AMIC2", "MIC BIAS2", + // "VA DMIC0", "MIC BIAS1", + // "VA DMIC1", "MIC BIAS1", + // "VA DMIC0", "VA MIC BIAS1", + // "VA DMIC1", "VA MIC BIAS1", + // "TX SWR_INPUT1", "ADC2_OUTPUT"; + + wsa-dai-link { + link-name = "WSA Playback"; + + cpu { + sound-dai = <&q6apmbedai WSA_CODEC_DMA_RX_0>; + }; + + codec { + sound-dai = <&left_spkr>, <&right_spkr>, <&swr0 0>, <&lpass_wsamacro 0>; + }; + + platform { + sound-dai = <&q6apm>; + }; + }; + + va-dai-link { + link-name = "VA Capture"; + + cpu { + sound-dai = <&q6apmbedai VA_CODEC_DMA_TX_0>; + }; + + codec { + sound-dai = <&lpass_vamacro 0>; + }; + + platform { + sound-dai = <&q6apm>; + }; + }; + }; + + wcn7850-pmu { + compatible = "qcom,wcn7850-pmu"; + + vdd-supply = <&vreg_wcn_0p95>; + vddio-supply = <&vreg_l15b_1p8>; + vddaon-supply = <&vreg_wcn_0p95>; + vdddig-supply = <&vreg_wcn_0p95>; + vddrfa1p2-supply = <&vreg_wcn_1p9>; + vddrfa1p8-supply = <&vreg_wcn_1p9>; + + wlan-enable-gpios = <&tlmm 117 GPIO_ACTIVE_HIGH>; + bt-enable-gpios = <&tlmm 116 GPIO_ACTIVE_HIGH>; + + pinctrl-0 = <&wcn_wlan_bt_en>; + pinctrl-names = "default"; + + regulators { + vreg_pmu_rfa_cmn: ldo0 { + regulator-name = "vreg_pmu_rfa_cmn"; + }; + + vreg_pmu_aon_0p59: ldo1 { + regulator-name = "vreg_pmu_aon_0p59"; + }; + + vreg_pmu_wlcx_0p8: ldo2 { + regulator-name = "vreg_pmu_wlcx_0p8"; + }; + + vreg_pmu_wlmx_0p85: ldo3 { + regulator-name = "vreg_pmu_wlmx_0p85"; + }; + + vreg_pmu_btcmx_0p85: ldo4 { + regulator-name = "vreg_pmu_btcmx_0p85"; + }; + + vreg_pmu_rfa_0p8: ldo5 { + regulator-name = "vreg_pmu_rfa_0p8"; + }; + + vreg_pmu_rfa_1p2: ldo6 { + regulator-name = "vreg_pmu_rfa_1p2"; + }; + + vreg_pmu_rfa_1p8: ldo7 { + regulator-name = "vreg_pmu_rfa_1p8"; + }; + + vreg_pmu_pcie_0p9: ldo8 { + regulator-name = "vreg_pmu_pcie_0p9"; + }; + + vreg_pmu_pcie_1p8: ldo9 { + regulator-name = "vreg_pmu_pcie_1p8"; + }; + }; + }; +}; + +&apps_rsc { + regulators-0 { + compatible = "qcom,pm8550-rpmh-regulators"; + qcom,pmic-id = "b"; + + vdd-bob1-supply = <&vph_pwr>; + vdd-bob2-supply = <&vph_pwr>; + vdd-l1-l4-l10-supply = <&vreg_s4c_1p8>; + vdd-l2-l13-l14-supply = <&vreg_bob1>; + vdd-l5-l16-supply = <&vreg_bob1>; + vdd-l6-l7-supply = <&vreg_bob2>; + vdd-l8-l9-supply = <&vreg_bob1>; + vdd-l12-supply = <&vreg_s5j_1p2>; + vdd-l15-supply = <&vreg_s4c_1p8>; + vdd-l17-supply = <&vreg_bob2>; + + vreg_bob1: bob1 { + regulator-name = "vreg_bob1"; + regulator-min-microvolt = <3008000>; + regulator-max-microvolt = <3960000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_bob2: bob2 { + regulator-name = "vreg_bob2"; + regulator-min-microvolt = <2504000>; + regulator-max-microvolt = <3008000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l1b_1p8: ldo1 { + regulator-name = "vreg_l1b_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l2b_3p0: ldo2 { + regulator-name = "vreg_l2b_3p0"; + regulator-min-microvolt = <3072000>; + regulator-max-microvolt = <3072000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l4b_1p8: ldo4 { + regulator-name = "vreg_l4b_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l6b_1p8: ldo6 { + regulator-name = "vreg_l6b_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <2960000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l8b_3p0: ldo8 { + regulator-name = "vreg_l8b_3p0"; + regulator-min-microvolt = <3072000>; + regulator-max-microvolt = <3072000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l9b_2p9: ldo9 { + regulator-name = "vreg_l9b_2p9"; + regulator-min-microvolt = <2960000>; + regulator-max-microvolt = <2960000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l10b_1p8: ldo10 { + regulator-name = "vreg_l10b_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l12b_1p2: ldo12 { + regulator-name = "vreg_l12b_1p2"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l13b_3p0: ldo13 { + regulator-name = "vreg_l13b_3p0"; + regulator-min-microvolt = <3072000>; + regulator-max-microvolt = <3072000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l14b_3p0: ldo14 { + regulator-name = "vreg_l14b_3p0"; + regulator-min-microvolt = <3072000>; + regulator-max-microvolt = <3072000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l15b_1p8: ldo15 { + regulator-name = "vreg_l15b_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l17b_2p5: ldo17 { + regulator-name = "vreg_l17b_2p5"; + regulator-min-microvolt = <2504000>; + regulator-max-microvolt = <2504000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + }; + + regulators-1 { + compatible = "qcom,pm8550ve-rpmh-regulators"; + qcom,pmic-id = "c"; + + vdd-l1-supply = <&vreg_s5j_1p2>; + vdd-l2-supply = <&vreg_s1f_0p7>; + vdd-l3-supply = <&vreg_s1f_0p7>; + vdd-s4-supply = <&vph_pwr>; + + vreg_s4c_1p8: smps4 { + regulator-name = "vreg_s4c_1p8"; + regulator-min-microvolt = <1856000>; + regulator-max-microvolt = <2000000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l1c_1p2: ldo1 { + regulator-name = "vreg_l1c_1p2"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l2c_0p8: ldo2 { + regulator-name = "vreg_l2c_0p8"; + regulator-min-microvolt = <880000>; + regulator-max-microvolt = <880000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l3c_0p8: ldo3 { + regulator-name = "vreg_l3c_0p8"; + regulator-min-microvolt = <912000>; + regulator-max-microvolt = <912000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + }; + + regulators-2 { + compatible = "qcom,pmc8380-rpmh-regulators"; + qcom,pmic-id = "d"; + + vdd-l1-supply = <&vreg_s1f_0p7>; + vdd-l2-supply = <&vreg_s1f_0p7>; + vdd-l3-supply = <&vreg_s4c_1p8>; + vdd-s1-supply = <&vph_pwr>; + + vreg_l1d_0p8: ldo1 { + regulator-name = "vreg_l1d_0p8"; + regulator-min-microvolt = <880000>; + regulator-max-microvolt = <880000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l2d_0p9: ldo2 { + regulator-name = "vreg_l2d_0p9"; + regulator-min-microvolt = <912000>; + regulator-max-microvolt = <912000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l3d_1p8: ldo3 { + regulator-name = "vreg_l3d_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + }; + + regulators-3 { + compatible = "qcom,pmc8380-rpmh-regulators"; + qcom,pmic-id = "e"; + + vdd-l2-supply = <&vreg_s1f_0p7>; + vdd-l3-supply = <&vreg_s5j_1p2>; + + vreg_l2e_0p8: ldo2 { + regulator-name = "vreg_l2e_0p8"; + regulator-min-microvolt = <880000>; + regulator-max-microvolt = <880000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l3e_1p2: ldo3 { + regulator-name = "vreg_l3e_1p2"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + }; + + regulators-4 { + compatible = "qcom,pmc8380-rpmh-regulators"; + qcom,pmic-id = "f"; + + vdd-l1-supply = <&vreg_s5j_1p2>; + vdd-l2-supply = <&vreg_s5j_1p2>; + vdd-l3-supply = <&vreg_s5j_1p2>; + vdd-s1-supply = <&vph_pwr>; + + vreg_s1f_0p7: smps1 { + regulator-name = "vreg_s1f_0p7"; + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <1100000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + }; + + regulators-6 { + compatible = "qcom,pm8550ve-rpmh-regulators"; + qcom,pmic-id = "i"; + + vdd-l1-supply = <&vreg_s4c_1p8>; + vdd-l2-supply = <&vreg_s5j_1p2>; + vdd-l3-supply = <&vreg_s1f_0p7>; + vdd-s1-supply = <&vph_pwr>; + vdd-s2-supply = <&vph_pwr>; + + vreg_s1i_0p9: smps1 { + regulator-name = "vreg_s1i_0p9"; + regulator-min-microvolt = <900000>; + regulator-max-microvolt = <920000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_s2i_1p0: smps2 { + regulator-name = "vreg_s2i_1p0"; + regulator-min-microvolt = <1000000>; + regulator-max-microvolt = <1100000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l1i_1p8: ldo1 { + regulator-name = "vreg_l1i_1p8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l2i_1p2: ldo2 { + regulator-name = "vreg_l2i_1p2"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l3i_0p8: ldo3 { + regulator-name = "vreg_l3i_0p8"; + regulator-min-microvolt = <880000>; + regulator-max-microvolt = <880000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + }; + + regulators-7 { + compatible = "qcom,pm8550ve-rpmh-regulators"; + qcom,pmic-id = "j"; + + vdd-l1-supply = <&vreg_s1f_0p7>; + vdd-l2-supply = <&vreg_s5j_1p2>; + vdd-l3-supply = <&vreg_s1f_0p7>; + vdd-s5-supply = <&vph_pwr>; + + vreg_s5j_1p2: smps5 { + regulator-name = "vreg_s5j_1p2"; + regulator-min-microvolt = <1256000>; + regulator-max-microvolt = <1304000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l1j_0p8: ldo1 { + regulator-name = "vreg_l1j_0p8"; + regulator-min-microvolt = <912000>; + regulator-max-microvolt = <912000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l2j_1p2: ldo2 { + regulator-name = "vreg_l2j_1p2"; + regulator-min-microvolt = <1256000>; + regulator-max-microvolt = <1256000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + + vreg_l3j_0p8: ldo3 { + regulator-name = "vreg_l3j_0p8"; + regulator-min-microvolt = <880000>; + regulator-max-microvolt = <880000>; + regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; + }; + }; +}; + +&gpu { + status = "okay"; + + zap-shader { + memory-region = <&gpu_microcode_mem>; + firmware-name = "qcom/x1e80100/microsoft/qcdxkmsuc8380.mbn"; + }; +}; + +&i2c0 { + clock-frequency = <400000>; + status = "disabled"; +}; + +&i2c3 { + clock-frequency = <400000>; + status = "okay"; + + /* Left-side rear port */ + typec-mux@8 { + compatible = "parade,ps8830"; + reg = <0x8>; + + reset-gpios = <&pm8550_gpios 10 GPIO_ACTIVE_LOW>; + + clocks = <&rpmhcc RPMH_RF_CLK3>; + + vdd-supply = <&vreg_rtmr0_1p15>; + vdd33-supply = <&vreg_rtmr0_3p3>; + vdd33-cap-supply = <&vreg_rtmr0_3p3>; + vddar-supply = <&vreg_rtmr0_1p15>; + vddat-supply = <&vreg_rtmr0_1p15>; + vddio-supply = <&vreg_rtmr0_1p8>; + + pinctrl-0 = <&rtmr0_default>; + pinctrl-names = "default"; + + retimer-switch; + orientation-switch; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + + retimer_ss0_ss_out: endpoint { + remote-endpoint = <&pmic_glink_ss0_ss_in>; + }; + }; + + port@1 { + reg = <1>; + + retimer_ss0_ss_in: endpoint { + remote-endpoint = <&usb_1_ss0_qmpphy_out>; + }; + }; + + port@2 { + reg = <2>; + + retimer_ss0_con_sbu_out: endpoint { + remote-endpoint = <&pmic_glink_ss0_con_sbu_in>; + }; + }; + }; + }; +}; + +&i2c4 { + clock-frequency = <400000>; + status = "disabled"; +}; + +&i2c5 { + clock-frequency = <400000>; + status = "disabled"; +}; + +&i2c7 { + clock-frequency = <400000>; + status = "okay"; + + /* Left-side front port */ + typec-mux@8 { + compatible = "parade,ps8830"; + reg = <0x8>; + + reset-gpios = <&tlmm 176 GPIO_ACTIVE_LOW>; + + clocks = <&rpmhcc RPMH_RF_CLK4>; + + vdd-supply = <&vreg_rtmr1_1p15>; + vdd33-supply = <&vreg_rtmr1_3p3>; + vdd33-cap-supply = <&vreg_rtmr1_3p3>; + vddar-supply = <&vreg_rtmr1_1p15>; + vddat-supply = <&vreg_rtmr1_1p15>; + vddio-supply = <&vreg_rtmr1_1p8>; + + retimer-switch; + orientation-switch; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + + retimer_ss1_ss_out: endpoint { + remote-endpoint = <&pmic_glink_ss1_ss_in>; + }; + }; + + port@1 { + reg = <1>; + + retimer_ss1_ss_in: endpoint { + remote-endpoint = <&usb_1_ss1_qmpphy_out>; + }; + }; + + port@2 { + reg = <2>; + + retimer_ss1_con_sbu_out: endpoint { + remote-endpoint = <&pmic_glink_ss1_con_sbu_in>; + }; + }; + }; + }; +}; + +&lpass_tlmm { + spkr_01_sd_n_active: spkr-01-sd-n-active-state { + pins = "gpio12"; + function = "gpio"; + drive-strength = <16>; + bias-disable; + output-low; + }; +}; + +&lpass_vamacro { + pinctrl-0 = <&dmic01_default>; + pinctrl-names = "default"; + + vdd-micb-supply = <&vreg_l1b_1p8>; + qcom,dmic-sample-rate = <4800000>; +}; + +&mdss { + status = "okay"; +}; + +&mdss_dp0 { + status = "okay"; +}; + +&mdss_dp0_out { + data-lanes = <0 1>; + link-frequencies = /bits/ 64 <1620000000 2700000000 5400000000 8100000000>; +}; + +&mdss_dp1 { + status = "okay"; +}; + +&mdss_dp1_out { + data-lanes = <0 1>; + link-frequencies = /bits/ 64 <1620000000 2700000000 5400000000 8100000000>; +}; + +&mdss_dp3 { + compatible = "qcom,x1e80100-dp"; + /delete-property/ #sound-dai-cells; + + status = "okay"; + + aux-bus { + panel { + compatible = "samsung,atna30dw01", "samsung,atna33xc20"; + enable-gpios = <&pmc8380_3_gpios 4 GPIO_ACTIVE_HIGH>; + power-supply = <&vreg_edp_3p3>; + + pinctrl-0 = <&edp_bl_en>; + pinctrl-names = "default"; + + port { + edp_panel_in: endpoint { + remote-endpoint = <&mdss_dp3_out>; + }; + }; + }; + }; + + ports { + port@1 { + reg = <1>; + + mdss_dp3_out: endpoint { + data-lanes = <0 1 2 3>; + link-frequencies = /bits/ 64 <1620000000 2700000000 5400000000 8100000000>; + + remote-endpoint = <&edp_panel_in>; + }; + }; + }; +}; + +&mdss_dp3_phy { + vdda-phy-supply = <&vreg_l3j_0p8>; + vdda-pll-supply = <&vreg_l2j_1p2>; + + status = "okay"; +}; + +&pcie4 { + status = "okay"; +}; + +&pcie4_phy { + vdda-phy-supply = <&vreg_l3i_0p8>; + vdda-pll-supply = <&vreg_l3e_1p2>; + + status = "okay"; +}; + +&pcie4_port0 { + wifi@0 { + compatible = "pci17cb,1107"; + reg = <0x10000 0x0 0x0 0x0 0x0>; + + vddaon-supply = <&vreg_pmu_aon_0p59>; + vddwlcx-supply = <&vreg_pmu_wlcx_0p8>; + vddwlmx-supply = <&vreg_pmu_wlmx_0p85>; + vddrfacmn-supply = <&vreg_pmu_rfa_cmn>; + vddrfa0p8-supply = <&vreg_pmu_rfa_0p8>; + vddrfa1p2-supply = <&vreg_pmu_rfa_1p2>; + vddrfa1p8-supply = <&vreg_pmu_rfa_1p8>; + vddpcie0p9-supply = <&vreg_pmu_pcie_0p9>; + vddpcie1p8-supply = <&vreg_pmu_pcie_1p8>; + }; +}; + +&pcie6a { + perst-gpios = <&tlmm 152 GPIO_ACTIVE_LOW>; + wake-gpios = <&tlmm 154 GPIO_ACTIVE_LOW>; + + vddpe-3v3-supply = <&vreg_nvme>; + + pinctrl-0 = <&pcie6a_default>; + pinctrl-names = "default"; + + status = "okay"; +}; + +&pcie6a_phy { + vdda-phy-supply = <&vreg_l1d_0p8>; + vdda-pll-supply = <&vreg_l2j_1p2>; + + status = "okay"; +}; + +&pm8550_gpios { + rtmr0_default: rtmr0-reset-n-active-state { + pins = "gpio10"; + function = "normal"; + power-source = <1>; /* 1.8V */ + }; + + rtmr0_3p3_reg_en: rtmr0-3p3-reg-en-state { + pins = "gpio11"; + function = "normal"; + power-source = <1>; /* 1.8V */ + }; +}; + +&pm8550ve_9_gpios { + rtmr0_1p8_reg_en: rtmr0-1p8-reg-en-state { + pins = "gpio8"; + function = "normal"; + power-source = <1>; /* 1.8V */ + }; +}; + +&pmc8380_3_gpios { + edp_bl_en: edp-bl-en-state { + pins = "gpio4"; + function = "normal"; + power-source = <1>; /* 1.8V */ + input-disable; + output-enable; + }; +}; + +&pmc8380_5_gpios { + rtmr0_1p15_reg_en: rtmr0-1p15-reg-en-state { + pins = "gpio8"; + function = "normal"; + power-source = <1>; /* 1.8V */ + }; +}; + +&qupv3_0 { + status = "okay"; +}; + +&qupv3_1 { + status = "okay"; +}; + +&qupv3_2 { + status = "okay"; +}; + +&remoteproc_adsp { + firmware-name = "qcom/x1e80100/microsoft/Denali/qcadsp8380.mbn", + "qcom/x1e80100/microsoft/Denali/adsp_dtb.mbn"; + + status = "okay"; +}; + +&remoteproc_cdsp { + firmware-name = "qcom/x1e80100/microsoft/Denali/qccdsp8380.mbn", + "qcom/x1e80100/microsoft/Denali/cdsp_dtb.mbn"; + + status = "okay"; +}; + +&smb2360_0 { + status = "okay"; +}; + +&smb2360_0_eusb2_repeater { + vdd18-supply = <&vreg_l3d_1p8>; + vdd3-supply = <&vreg_l2b_3p0>; +}; + +&smb2360_1 { + status = "okay"; +}; + +&smb2360_1_eusb2_repeater { + vdd18-supply = <&vreg_l3d_1p8>; + vdd3-supply = <&vreg_l14b_3p0>; +}; + +&smb2360_2 { + status = "okay"; +}; + +&smb2360_2_eusb2_repeater { + vdd18-supply = <&vreg_l3d_1p8>; + vdd3-supply = <&vreg_l8b_3p0>; +}; + +&swr0 { + status = "okay"; + + pinctrl-0 = <&wsa_swr_active>, <&spkr_01_sd_n_active>; + pinctrl-names = "default"; + + /* WSA8845, Left Speaker */ + left_spkr: speaker@0,0 { + compatible = "sdw20217020400"; + reg = <0 0>; + reset-gpios = <&lpass_tlmm 12 GPIO_ACTIVE_LOW>; + #sound-dai-cells = <0>; + sound-name-prefix = "SpkrLeft"; + vdd-1p8-supply = <&vreg_l15b_1p8>; + vdd-io-supply = <&vreg_l12b_1p2>; + qcom,port-mapping = <1 2 3 7 10 13>; + }; + + /* WSA8845, Right Speaker */ + right_spkr: speaker@0,1 { + compatible = "sdw20217020400"; + reg = <0 1>; + reset-gpios = <&lpass_tlmm 12 GPIO_ACTIVE_LOW>; + #sound-dai-cells = <0>; + sound-name-prefix = "SpkrRight"; + vdd-1p8-supply = <&vreg_l15b_1p8>; + vdd-io-supply = <&vreg_l12b_1p2>; + qcom,port-mapping = <4 5 6 7 11 13>; + }; +}; + +&tlmm { + gpio-reserved-ranges = <44 4>, /* SPI (TPM) */ + <238 1>; /* UFS Reset */ + + hall_int_n_default: hall-int-n-state { + pins = "gpio2"; + function = "gpio"; + bias-disable; + }; + + nvme_reg_en: nvme-reg-en-state { + pins = "gpio18"; + function = "gpio"; + drive-strength = <2>; + bias-disable; + }; + + edp_reg_en: edp-reg-en-state { + pins = "gpio70"; + function = "gpio"; + drive-strength = <16>; + bias-disable; + }; + + ssam_state: ssam-state-state { + pins = "gpio91"; + function = "gpio"; + bias-disable; + }; + + pcie4_default: pcie4-default-state { + clkreq-n-pins { + pins = "gpio147"; + function = "pcie4_clk"; + drive-strength = <2>; + bias-pull-up; + }; + + perst-n-pins { + pins = "gpio146"; + function = "gpio"; + drive-strength = <2>; + bias-disable; + }; + + wake-n-pins { + pins = "gpio148"; + function = "gpio"; + drive-strength = <2>; + bias-pull-up; + }; + }; + + pcie6a_default: pcie6a-default-state { + perst-n-pins { + pins = "gpio152"; + function = "gpio"; + drive-strength = <2>; + bias-disable; + }; + + clkreq-n-pins { + pins = "gpio153"; + function = "pcie6a_clk"; + drive-strength = <2>; + bias-pull-up; + }; + + wake-n-pins { + pins = "gpio154"; + function = "gpio"; + drive-strength = <2>; + bias-pull-up; + }; + }; + + rtmr1_1p8_reg_en: rtmr1-1p8-reg-en-state { + pins = "gpio175"; + function = "gpio"; + drive-strength = <2>; + bias-disable; + }; + + rtmr1_3p3_reg_en: rtmr1-3p3-reg-en-state { + pins = "gpio186"; + function = "gpio"; + drive-strength = <2>; + bias-disable; + }; + + rtmr1_1p15_reg_en: rtmr1-1p15-reg-en-state { + pins = "gpio188"; + function = "gpio"; + drive-strength = <2>; + bias-disable; + }; + + cam_indicator_en: cam-indicator-en-state { + pins = "gpio225"; + function = "gpio"; + drive-strength = <2>; + bias-disable; + }; + + wcn_sw_en: wcn-sw-en-state { + pins = "gpio214"; + function = "gpio"; + drive-strength = <2>; + bias-disable; + }; + + wcn_wlan_bt_en: wcn-wlan-bt-en-state { + pins = "gpio116", "gpio117"; + function = "gpio"; + drive-strength = <2>; + bias-disable; + }; +}; + +&uart2 { + status = "okay"; + + embedded-controller { + compatible = "microsoft,surface-sam"; + + interrupts-extended = <&tlmm 91 IRQ_TYPE_EDGE_RISING>; + + current-speed = <4000000>; + + pinctrl-0 = <&ssam_state>; + pinctrl-names = "default"; + }; +}; + +&uart14 { + status = "okay"; + + bluetooth { + compatible = "qcom,wcn7850-bt"; + max-speed = <3200000>; + + vddaon-supply = <&vreg_pmu_aon_0p59>; + vddwlcx-supply = <&vreg_pmu_wlcx_0p8>; + vddwlmx-supply = <&vreg_pmu_wlmx_0p85>; + vddrfacmn-supply = <&vreg_pmu_rfa_cmn>; + vddrfa0p8-supply = <&vreg_pmu_rfa_0p8>; + vddrfa1p2-supply = <&vreg_pmu_rfa_1p2>; + vddrfa1p8-supply = <&vreg_pmu_rfa_1p8>; + }; +}; + +&usb_1_ss0_hsphy { + vdd-supply = <&vreg_l3j_0p8>; + vdda12-supply = <&vreg_l2j_1p2>; + + phys = <&smb2360_0_eusb2_repeater>; + + status = "okay"; +}; + +&usb_1_ss0_qmpphy { + vdda-phy-supply = <&vreg_l2j_1p2>; + vdda-pll-supply = <&vreg_l1j_0p8>; + + status = "okay"; +}; + +&usb_1_ss0 { + status = "okay"; +}; + +&usb_1_ss0_dwc3 { + dr_mode = "host"; +}; + +&usb_1_ss0_dwc3_hs { + remote-endpoint = <&pmic_glink_ss0_hs_in>; +}; + +&usb_1_ss0_qmpphy_out { + remote-endpoint = <&retimer_ss0_ss_in>; +}; + +&usb_1_ss1_hsphy { + vdd-supply = <&vreg_l3j_0p8>; + vdda12-supply = <&vreg_l2j_1p2>; + + phys = <&smb2360_1_eusb2_repeater>; + + status = "okay"; +}; + +&usb_1_ss1_qmpphy { + vdda-phy-supply = <&vreg_l2j_1p2>; + vdda-pll-supply = <&vreg_l2d_0p9>; + + status = "okay"; +}; + +&usb_1_ss1 { + status = "okay"; +}; + +&usb_1_ss1_dwc3 { + dr_mode = "host"; +}; + +&usb_1_ss1_dwc3_hs { + remote-endpoint = <&pmic_glink_ss1_hs_in>; +}; + +&usb_1_ss1_qmpphy_out { + remote-endpoint = <&retimer_ss1_ss_in>; +}; -- 2.50.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 6/9] drm/msm/dp: Work around bogus maximum link rate 2025-07-14 17:35 [PATCH 0/9] Microsoft Surface Pro 11 support Dale Whinham ` (2 preceding siblings ...) 2025-07-14 17:35 ` [PATCH 5/9] arm64: dts: qcom: Add support for " Dale Whinham @ 2025-07-14 17:35 ` Dale Whinham 2025-07-14 19:50 ` Rob Clark 2025-07-17 2:21 ` Xilin Wu 2025-07-14 17:35 ` [PATCH 9/9 RFC] arm64: dts: qcom: x1e80100-denali: Disable rfkill for wifi0 Dale Whinham 4 siblings, 2 replies; 16+ messages in thread From: Dale Whinham @ 2025-07-14 17:35 UTC (permalink / raw) To: Rob Clark, Abhinav Kumar, Dmitry Baryshkov, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter Cc: Jérôme de Bretagne, Dale Whinham, linux-arm-msm, dri-devel, freedreno, linux-kernel From: Jérôme de Bretagne <jerome.debretagne@gmail.com> The OLED display in the Surface Pro 11 reports a maximum link rate of zero in its DPCD, causing it to fail to probe correctly. The Surface Pro 11's DSDT table contains some XML with an "EDPOverrideDPCDCaps" block that defines the max link rate as 0x1E (8.1Gbps/HBR3). Add a quirk to conditionally override the max link rate if its value is zero specifically for this model. Signed-off-by: Jérôme de Bretagne <jerome.debretagne@gmail.com> Signed-off-by: Dale Whinham <daleyo@gmail.com> --- drivers/gpu/drm/msm/dp/dp_panel.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/gpu/drm/msm/dp/dp_panel.c b/drivers/gpu/drm/msm/dp/dp_panel.c index 4e8ab75c771b..b2e65b987c05 100644 --- a/drivers/gpu/drm/msm/dp/dp_panel.c +++ b/drivers/gpu/drm/msm/dp/dp_panel.c @@ -11,6 +11,8 @@ #include <drm/drm_of.h> #include <drm/drm_print.h> +#include <linux/dmi.h> + #define DP_MAX_NUM_DP_LANES 4 #define DP_LINK_RATE_HBR2 540000 /* kbytes */ @@ -58,6 +60,17 @@ static int msm_dp_panel_read_dpcd(struct msm_dp_panel *msm_dp_panel) if (rc) return rc; + /* + * for some reason the ATNA30DW01-1 OLED panel in the Surface Pro 11 + * reports a max link rate of 0 in the DPCD. Fix it to match the + * EDPOverrideDPCDCaps string found in the ACPI DSDT + */ + if (dpcd[DP_MAX_LINK_RATE] == 0 && + dmi_match(DMI_SYS_VENDOR, "Microsoft Corporation") && + dmi_match(DMI_PRODUCT_NAME, "Microsoft Surface Pro, 11th Edition")) { + dpcd[1] = DP_LINK_BW_8_1; + } + msm_dp_panel->vsc_sdp_supported = drm_dp_vsc_sdp_supported(panel->aux, dpcd); link_info = &msm_dp_panel->link_info; link_info->revision = dpcd[DP_DPCD_REV]; -- 2.50.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 6/9] drm/msm/dp: Work around bogus maximum link rate 2025-07-14 17:35 ` [PATCH 6/9] drm/msm/dp: Work around bogus maximum link rate Dale Whinham @ 2025-07-14 19:50 ` Rob Clark 2025-07-15 22:52 ` Jérôme de Bretagne 2025-07-17 2:21 ` Xilin Wu 1 sibling, 1 reply; 16+ messages in thread From: Rob Clark @ 2025-07-14 19:50 UTC (permalink / raw) To: Dale Whinham Cc: Rob Clark, Abhinav Kumar, Dmitry Baryshkov, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter, Jérôme de Bretagne, linux-arm-msm, dri-devel, freedreno, linux-kernel On Mon, Jul 14, 2025 at 10:36 AM Dale Whinham <daleyo@gmail.com> wrote: > > From: Jérôme de Bretagne <jerome.debretagne@gmail.com> > > The OLED display in the Surface Pro 11 reports a maximum link rate of > zero in its DPCD, causing it to fail to probe correctly. > > The Surface Pro 11's DSDT table contains some XML with an > "EDPOverrideDPCDCaps" block that defines the max link rate as 0x1E > (8.1Gbps/HBR3). > > Add a quirk to conditionally override the max link rate if its value > is zero specifically for this model. > > Signed-off-by: Jérôme de Bretagne <jerome.debretagne@gmail.com> > Signed-off-by: Dale Whinham <daleyo@gmail.com> > --- > drivers/gpu/drm/msm/dp/dp_panel.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/drivers/gpu/drm/msm/dp/dp_panel.c b/drivers/gpu/drm/msm/dp/dp_panel.c > index 4e8ab75c771b..b2e65b987c05 100644 > --- a/drivers/gpu/drm/msm/dp/dp_panel.c > +++ b/drivers/gpu/drm/msm/dp/dp_panel.c > @@ -11,6 +11,8 @@ > #include <drm/drm_of.h> > #include <drm/drm_print.h> > > +#include <linux/dmi.h> > + > #define DP_MAX_NUM_DP_LANES 4 > #define DP_LINK_RATE_HBR2 540000 /* kbytes */ > > @@ -58,6 +60,17 @@ static int msm_dp_panel_read_dpcd(struct msm_dp_panel *msm_dp_panel) > if (rc) > return rc; > > + /* > + * for some reason the ATNA30DW01-1 OLED panel in the Surface Pro 11 > + * reports a max link rate of 0 in the DPCD. Fix it to match the > + * EDPOverrideDPCDCaps string found in the ACPI DSDT > + */ > + if (dpcd[DP_MAX_LINK_RATE] == 0 && > + dmi_match(DMI_SYS_VENDOR, "Microsoft Corporation") && > + dmi_match(DMI_PRODUCT_NAME, "Microsoft Surface Pro, 11th Edition")) { > + dpcd[1] = DP_LINK_BW_8_1; > + } Not a dp expert myself, but.. In drm_dp_helpers.c there is dpcd_quirk_list[].. which applies quirks based on the oui ("Organizational Unique ID") of the dp sink. I think this would be the correct way to handle this. Although I guess you'll need to add a new quirk for this. Idk if the surface pro 11 has multiple different panel options. If so you defn wouldn't want to match on the DMI. BR, -R > + > msm_dp_panel->vsc_sdp_supported = drm_dp_vsc_sdp_supported(panel->aux, dpcd); > link_info = &msm_dp_panel->link_info; > link_info->revision = dpcd[DP_DPCD_REV]; > -- > 2.50.1 > ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 6/9] drm/msm/dp: Work around bogus maximum link rate 2025-07-14 19:50 ` Rob Clark @ 2025-07-15 22:52 ` Jérôme de Bretagne 0 siblings, 0 replies; 16+ messages in thread From: Jérôme de Bretagne @ 2025-07-15 22:52 UTC (permalink / raw) To: rob.clark Cc: Dale Whinham, Rob Clark, Abhinav Kumar, Dmitry Baryshkov, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter, linux-arm-msm, dri-devel, freedreno, linux-kernel On Mon, Jul 14, 2025 at 21:51, Rob Clark <rob.clark@oss.qualcomm.com> wrote: > > On Mon, Jul 14, 2025 at 10:36 AM Dale Whinham <daleyo@gmail.com> wrote: > > > > From: Jérôme de Bretagne <jerome.debretagne@gmail.com> > > > > The OLED display in the Surface Pro 11 reports a maximum link rate of > > zero in its DPCD, causing it to fail to probe correctly. > > > > The Surface Pro 11's DSDT table contains some XML with an > > "EDPOverrideDPCDCaps" block that defines the max link rate as 0x1E > > (8.1Gbps/HBR3). > > > > Add a quirk to conditionally override the max link rate if its value > > is zero specifically for this model. > > > > Signed-off-by: Jérôme de Bretagne <jerome.debretagne@gmail.com> > > Signed-off-by: Dale Whinham <daleyo@gmail.com> > > --- > > drivers/gpu/drm/msm/dp/dp_panel.c | 13 +++++++++++++ > > 1 file changed, 13 insertions(+) > > > > diff --git a/drivers/gpu/drm/msm/dp/dp_panel.c b/drivers/gpu/drm/msm/dp/dp_panel.c > > index 4e8ab75c771b..b2e65b987c05 100644 > > --- a/drivers/gpu/drm/msm/dp/dp_panel.c > > +++ b/drivers/gpu/drm/msm/dp/dp_panel.c > > @@ -11,6 +11,8 @@ > > #include <drm/drm_of.h> > > #include <drm/drm_print.h> > > > > +#include <linux/dmi.h> > > + > > #define DP_MAX_NUM_DP_LANES 4 > > #define DP_LINK_RATE_HBR2 540000 /* kbytes */ > > > > @@ -58,6 +60,17 @@ static int msm_dp_panel_read_dpcd(struct msm_dp_panel *msm_dp_panel) > > if (rc) > > return rc; > > > > + /* > > + * for some reason the ATNA30DW01-1 OLED panel in the Surface Pro 11 > > + * reports a max link rate of 0 in the DPCD. Fix it to match the > > + * EDPOverrideDPCDCaps string found in the ACPI DSDT > > + */ > > + if (dpcd[DP_MAX_LINK_RATE] == 0 && > > + dmi_match(DMI_SYS_VENDOR, "Microsoft Corporation") && > > + dmi_match(DMI_PRODUCT_NAME, "Microsoft Surface Pro, 11th Edition")) { > > + dpcd[1] = DP_LINK_BW_8_1; > > + } > > Not a dp expert myself, but.. > > In drm_dp_helpers.c there is dpcd_quirk_list[].. which applies quirks > based on the oui ("Organizational Unique ID") of the dp sink. I think > this would be the correct way to handle this. Although I guess you'll > need to add a new quirk for this. > > Idk if the surface pro 11 has multiple different panel options. If so > you defn wouldn't want to match on the DMI. > > BR, > -R Thanks Rob for the feedback, I have a working implementation based on your suggestion with a new quirk, we will switch to it in V2. Best, Jérôme > > + > > msm_dp_panel->vsc_sdp_supported = drm_dp_vsc_sdp_supported(panel->aux, dpcd); > > link_info = &msm_dp_panel->link_info; > > link_info->revision = dpcd[DP_DPCD_REV]; > > -- > > 2.50.1 > > ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 6/9] drm/msm/dp: Work around bogus maximum link rate 2025-07-14 17:35 ` [PATCH 6/9] drm/msm/dp: Work around bogus maximum link rate Dale Whinham 2025-07-14 19:50 ` Rob Clark @ 2025-07-17 2:21 ` Xilin Wu 2025-07-17 20:27 ` Jérôme de Bretagne 1 sibling, 1 reply; 16+ messages in thread From: Xilin Wu @ 2025-07-17 2:21 UTC (permalink / raw) To: Dale Whinham, Rob Clark, Abhinav Kumar, Dmitry Baryshkov, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter Cc: Jérôme de Bretagne, linux-arm-msm, dri-devel, freedreno, linux-kernel On 2025/7/15 01:35:42, Dale Whinham wrote: > From: Jérôme de Bretagne <jerome.debretagne@gmail.com> > > The OLED display in the Surface Pro 11 reports a maximum link rate of > zero in its DPCD, causing it to fail to probe correctly. > > The Surface Pro 11's DSDT table contains some XML with an > "EDPOverrideDPCDCaps" block that defines the max link rate as 0x1E > (8.1Gbps/HBR3). > > Add a quirk to conditionally override the max link rate if its value > is zero specifically for this model. > > Signed-off-by: Jérôme de Bretagne <jerome.debretagne@gmail.com> > Signed-off-by: Dale Whinham <daleyo@gmail.com> > --- > drivers/gpu/drm/msm/dp/dp_panel.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/drivers/gpu/drm/msm/dp/dp_panel.c b/drivers/gpu/drm/msm/dp/dp_panel.c > index 4e8ab75c771b..b2e65b987c05 100644 > --- a/drivers/gpu/drm/msm/dp/dp_panel.c > +++ b/drivers/gpu/drm/msm/dp/dp_panel.c > @@ -11,6 +11,8 @@ > #include <drm/drm_of.h> > #include <drm/drm_print.h> > > +#include <linux/dmi.h> > + > #define DP_MAX_NUM_DP_LANES 4 > #define DP_LINK_RATE_HBR2 540000 /* kbytes */ > > @@ -58,6 +60,17 @@ static int msm_dp_panel_read_dpcd(struct msm_dp_panel *msm_dp_panel) > if (rc) > return rc; > > + /* > + * for some reason the ATNA30DW01-1 OLED panel in the Surface Pro 11 > + * reports a max link rate of 0 in the DPCD. Fix it to match the > + * EDPOverrideDPCDCaps string found in the ACPI DSDT > + */ > + if (dpcd[DP_MAX_LINK_RATE] == 0 && > + dmi_match(DMI_SYS_VENDOR, "Microsoft Corporation") && > + dmi_match(DMI_PRODUCT_NAME, "Microsoft Surface Pro, 11th Edition")) { > + dpcd[1] = DP_LINK_BW_8_1; > + } > + My Galaxy Book4 Edge with the ATNA60CL07-0 panel also reports a max link rate of 0. But I think eDP v1.4 panels need a different way to retrieve supported links rates, which could be found in the amdgpu [1], i915 [2] and nouveau [3] drivers. [1]: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c#n2098 [2]: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/gpu/drm/i915/display/intel_dp.c#n4281 [3]: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/gpu/drm/nouveau/nouveau_dp.c#n101 > msm_dp_panel->vsc_sdp_supported = drm_dp_vsc_sdp_supported(panel->aux, dpcd); > link_info = &msm_dp_panel->link_info; > link_info->revision = dpcd[DP_DPCD_REV]; -- Best regards, Xilin Wu <sophon@radxa.com> ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 6/9] drm/msm/dp: Work around bogus maximum link rate 2025-07-17 2:21 ` Xilin Wu @ 2025-07-17 20:27 ` Jérôme de Bretagne 2025-07-17 21:10 ` Konrad Dybcio 0 siblings, 1 reply; 16+ messages in thread From: Jérôme de Bretagne @ 2025-07-17 20:27 UTC (permalink / raw) To: Xilin Wu Cc: Dale Whinham, Rob Clark, Abhinav Kumar, Dmitry Baryshkov, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter, linux-arm-msm, dri-devel, freedreno, linux-kernel On 2025/7/17 04:21, Xilin Wu <sophon@radxa.com> wrote : > > On 2025/7/15 01:35:42, Dale Whinham wrote: > > From: Jérôme de Bretagne <jerome.debretagne@gmail.com> > > > > The OLED display in the Surface Pro 11 reports a maximum link rate of > > zero in its DPCD, causing it to fail to probe correctly. > > > > The Surface Pro 11's DSDT table contains some XML with an > > "EDPOverrideDPCDCaps" block that defines the max link rate as 0x1E > > (8.1Gbps/HBR3). > > > > Add a quirk to conditionally override the max link rate if its value > > is zero specifically for this model. > > > > Signed-off-by: Jérôme de Bretagne <jerome.debretagne@gmail.com> > > Signed-off-by: Dale Whinham <daleyo@gmail.com> > > --- > > drivers/gpu/drm/msm/dp/dp_panel.c | 13 +++++++++++++ > > 1 file changed, 13 insertions(+) > > > > diff --git a/drivers/gpu/drm/msm/dp/dp_panel.c b/drivers/gpu/drm/msm/dp/dp_panel.c > > index 4e8ab75c771b..b2e65b987c05 100644 > > --- a/drivers/gpu/drm/msm/dp/dp_panel.c > > +++ b/drivers/gpu/drm/msm/dp/dp_panel.c > > @@ -11,6 +11,8 @@ > > #include <drm/drm_of.h> > > #include <drm/drm_print.h> > > > > +#include <linux/dmi.h> > > + > > #define DP_MAX_NUM_DP_LANES 4 > > #define DP_LINK_RATE_HBR2 540000 /* kbytes */ > > > > @@ -58,6 +60,17 @@ static int msm_dp_panel_read_dpcd(struct msm_dp_panel *msm_dp_panel) > > if (rc) > > return rc; > > > > + /* > > + * for some reason the ATNA30DW01-1 OLED panel in the Surface Pro 11 > > + * reports a max link rate of 0 in the DPCD. Fix it to match the > > + * EDPOverrideDPCDCaps string found in the ACPI DSDT > > + */ > > + if (dpcd[DP_MAX_LINK_RATE] == 0 && > > + dmi_match(DMI_SYS_VENDOR, "Microsoft Corporation") && > > + dmi_match(DMI_PRODUCT_NAME, "Microsoft Surface Pro, 11th Edition")) { > > + dpcd[1] = DP_LINK_BW_8_1; > > + } > > + > > My Galaxy Book4 Edge with the ATNA60CL07-0 panel also reports a max link > rate of 0. But I think eDP v1.4 panels need a different way to retrieve > supported links rates, which could be found in the amdgpu [1], i915 [2] > and nouveau [3] drivers. Thanks Xilin for the sharing and pointers into 3 other drivers, that would explain the current limitation for Adreno GPUs. Fixing it would require a big contribution independent of the actual SP11 enablement. Is it a feature planned in the short-medium term within the MSM driver? If not, would a quirk like [4] be acceptable upstream in the meanwhile? [4] https://github.com/JeromeDeBretagne/linux-surface-pro-11/commit/d265cfb Thanks a lot, Jérôme > [1]: > https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c#n2098 > [2]: > https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/gpu/drm/i915/display/intel_dp.c#n4281 > [3]: > https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/gpu/drm/nouveau/nouveau_dp.c#n101 > > > > msm_dp_panel->vsc_sdp_supported = drm_dp_vsc_sdp_supported(panel->aux, dpcd); > > link_info = &msm_dp_panel->link_info; > > link_info->revision = dpcd[DP_DPCD_REV]; > > > -- > Best regards, > Xilin Wu <sophon@radxa.com> ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 6/9] drm/msm/dp: Work around bogus maximum link rate 2025-07-17 20:27 ` Jérôme de Bretagne @ 2025-07-17 21:10 ` Konrad Dybcio 2025-07-17 21:36 ` Jérôme de Bretagne 0 siblings, 1 reply; 16+ messages in thread From: Konrad Dybcio @ 2025-07-17 21:10 UTC (permalink / raw) To: Jérôme de Bretagne, Xilin Wu Cc: Dale Whinham, Rob Clark, Abhinav Kumar, Dmitry Baryshkov, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter, linux-arm-msm, dri-devel, freedreno, linux-kernel On 7/17/25 10:27 PM, Jérôme de Bretagne wrote: > On 2025/7/17 04:21, Xilin Wu <sophon@radxa.com> wrote : >> >> On 2025/7/15 01:35:42, Dale Whinham wrote: >>> From: Jérôme de Bretagne <jerome.debretagne@gmail.com> >>> >>> The OLED display in the Surface Pro 11 reports a maximum link rate of >>> zero in its DPCD, causing it to fail to probe correctly. >>> >>> The Surface Pro 11's DSDT table contains some XML with an >>> "EDPOverrideDPCDCaps" block that defines the max link rate as 0x1E >>> (8.1Gbps/HBR3). >>> >>> Add a quirk to conditionally override the max link rate if its value >>> is zero specifically for this model. >>> >>> Signed-off-by: Jérôme de Bretagne <jerome.debretagne@gmail.com> >>> Signed-off-by: Dale Whinham <daleyo@gmail.com> >>> --- >>> drivers/gpu/drm/msm/dp/dp_panel.c | 13 +++++++++++++ >>> 1 file changed, 13 insertions(+) >>> >>> diff --git a/drivers/gpu/drm/msm/dp/dp_panel.c b/drivers/gpu/drm/msm/dp/dp_panel.c >>> index 4e8ab75c771b..b2e65b987c05 100644 >>> --- a/drivers/gpu/drm/msm/dp/dp_panel.c >>> +++ b/drivers/gpu/drm/msm/dp/dp_panel.c >>> @@ -11,6 +11,8 @@ >>> #include <drm/drm_of.h> >>> #include <drm/drm_print.h> >>> >>> +#include <linux/dmi.h> >>> + >>> #define DP_MAX_NUM_DP_LANES 4 >>> #define DP_LINK_RATE_HBR2 540000 /* kbytes */ >>> >>> @@ -58,6 +60,17 @@ static int msm_dp_panel_read_dpcd(struct msm_dp_panel *msm_dp_panel) >>> if (rc) >>> return rc; >>> >>> + /* >>> + * for some reason the ATNA30DW01-1 OLED panel in the Surface Pro 11 >>> + * reports a max link rate of 0 in the DPCD. Fix it to match the >>> + * EDPOverrideDPCDCaps string found in the ACPI DSDT >>> + */ >>> + if (dpcd[DP_MAX_LINK_RATE] == 0 && >>> + dmi_match(DMI_SYS_VENDOR, "Microsoft Corporation") && >>> + dmi_match(DMI_PRODUCT_NAME, "Microsoft Surface Pro, 11th Edition")) { >>> + dpcd[1] = DP_LINK_BW_8_1; >>> + } >>> + >> >> My Galaxy Book4 Edge with the ATNA60CL07-0 panel also reports a max link >> rate of 0. But I think eDP v1.4 panels need a different way to retrieve >> supported links rates, which could be found in the amdgpu [1], i915 [2] >> and nouveau [3] drivers. > > Thanks Xilin for the sharing and pointers into 3 other drivers, that > would explain the current limitation for Adreno GPUs. Fixing it would > require a big contribution independent of the actual SP11 enablement. FWIW Adreno is a wholly separate (from DPU - the display engine) block > > Is it a feature planned in the short-medium term within the MSM driver? > If not, would a quirk like [4] be acceptable upstream in the meanwhile? I'm not a display guy, but this looks like yet another block of code begging to be commonized across DP drivers, so I wouldn't expect it to be a big blocker. Adding a panel quirk doesn't seem in order, as the panel is /probably/ very much in spec, and it's the driver bit that's missing. Konrad > > [4] https://github.com/JeromeDeBretagne/linux-surface-pro-11/commit/d265cfb > > Thanks a lot, > Jérôme > > > >> [1]: >> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c#n2098 >> [2]: >> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/gpu/drm/i915/display/intel_dp.c#n4281 >> [3]: >> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/gpu/drm/nouveau/nouveau_dp.c#n101 >> >> >>> msm_dp_panel->vsc_sdp_supported = drm_dp_vsc_sdp_supported(panel->aux, dpcd); >>> link_info = &msm_dp_panel->link_info; >>> link_info->revision = dpcd[DP_DPCD_REV]; >> >> >> -- >> Best regards, >> Xilin Wu <sophon@radxa.com> > ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 6/9] drm/msm/dp: Work around bogus maximum link rate 2025-07-17 21:10 ` Konrad Dybcio @ 2025-07-17 21:36 ` Jérôme de Bretagne 2025-07-18 10:52 ` Dmitry Baryshkov 0 siblings, 1 reply; 16+ messages in thread From: Jérôme de Bretagne @ 2025-07-17 21:36 UTC (permalink / raw) To: Konrad Dybcio Cc: Xilin Wu, Dale Whinham, Rob Clark, Abhinav Kumar, Dmitry Baryshkov, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter, linux-arm-msm, dri-devel, freedreno, linux-kernel Le jeu. 17 juil. 2025 à 23:10, Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> a écrit : > > On 7/17/25 10:27 PM, Jérôme de Bretagne wrote: > > On 2025/7/17 04:21, Xilin Wu <sophon@radxa.com> wrote : > >> > >> On 2025/7/15 01:35:42, Dale Whinham wrote: > >>> From: Jérôme de Bretagne <jerome.debretagne@gmail.com> > >>> > >>> The OLED display in the Surface Pro 11 reports a maximum link rate of > >>> zero in its DPCD, causing it to fail to probe correctly. > >>> > >>> The Surface Pro 11's DSDT table contains some XML with an > >>> "EDPOverrideDPCDCaps" block that defines the max link rate as 0x1E > >>> (8.1Gbps/HBR3). > >>> > >>> Add a quirk to conditionally override the max link rate if its value > >>> is zero specifically for this model. > >>> > >>> Signed-off-by: Jérôme de Bretagne <jerome.debretagne@gmail.com> > >>> Signed-off-by: Dale Whinham <daleyo@gmail.com> > >>> --- > >>> drivers/gpu/drm/msm/dp/dp_panel.c | 13 +++++++++++++ > >>> 1 file changed, 13 insertions(+) > >>> > >>> diff --git a/drivers/gpu/drm/msm/dp/dp_panel.c b/drivers/gpu/drm/msm/dp/dp_panel.c > >>> index 4e8ab75c771b..b2e65b987c05 100644 > >>> --- a/drivers/gpu/drm/msm/dp/dp_panel.c > >>> +++ b/drivers/gpu/drm/msm/dp/dp_panel.c > >>> @@ -11,6 +11,8 @@ > >>> #include <drm/drm_of.h> > >>> #include <drm/drm_print.h> > >>> > >>> +#include <linux/dmi.h> > >>> + > >>> #define DP_MAX_NUM_DP_LANES 4 > >>> #define DP_LINK_RATE_HBR2 540000 /* kbytes */ > >>> > >>> @@ -58,6 +60,17 @@ static int msm_dp_panel_read_dpcd(struct msm_dp_panel *msm_dp_panel) > >>> if (rc) > >>> return rc; > >>> > >>> + /* > >>> + * for some reason the ATNA30DW01-1 OLED panel in the Surface Pro 11 > >>> + * reports a max link rate of 0 in the DPCD. Fix it to match the > >>> + * EDPOverrideDPCDCaps string found in the ACPI DSDT > >>> + */ > >>> + if (dpcd[DP_MAX_LINK_RATE] == 0 && > >>> + dmi_match(DMI_SYS_VENDOR, "Microsoft Corporation") && > >>> + dmi_match(DMI_PRODUCT_NAME, "Microsoft Surface Pro, 11th Edition")) { > >>> + dpcd[1] = DP_LINK_BW_8_1; > >>> + } > >>> + > >> > >> My Galaxy Book4 Edge with the ATNA60CL07-0 panel also reports a max link > >> rate of 0. But I think eDP v1.4 panels need a different way to retrieve > >> supported links rates, which could be found in the amdgpu [1], i915 [2] > >> and nouveau [3] drivers. > > > > Thanks Xilin for the sharing and pointers into 3 other drivers, that > > would explain the current limitation for Adreno GPUs. Fixing it would > > require a big contribution independent of the actual SP11 enablement. > > FWIW Adreno is a wholly separate (from DPU - the display engine) block Thanks Konrad, indeed I should have referred to the display engine. > > > > Is it a feature planned in the short-medium term within the MSM driver? > > If not, would a quirk like [4] be acceptable upstream in the meanwhile? > > I'm not a display guy, but this looks like yet another block of code > begging to be commonized across DP drivers, I agree 100% in principle, but the 3 implementations are different today. > so I wouldn't expect it to be a big blocker. Well, it is for me :) > Adding a panel quirk doesn't seem in order, as the panel is /probably/ > very much in spec, and it's the driver bit that's missing. I agree that a quirk shouldn't be needed. I guess we'll work on upstreaming everything else and keep an out-of-tree patch for this issue for the moment That's a bit sad as this will block regular users from easily installing / testing via the Ubuntu Concept ISO for instance. Or could the quirk be accepted temporarily with good comments then reverted when the driver adds the missing support? I guess it would depend on the time scale of this support landing. Cheers, Jérôme > Konrad > > > > > [4] https://github.com/JeromeDeBretagne/linux-surface-pro-11/commit/d265cfb > > > > Thanks a lot, > > Jérôme > > > > > > > >> [1]: > >> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c#n2098 > >> [2]: > >> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/gpu/drm/i915/display/intel_dp.c#n4281 > >> [3]: > >> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/gpu/drm/nouveau/nouveau_dp.c#n101 > >> > >> > >>> msm_dp_panel->vsc_sdp_supported = drm_dp_vsc_sdp_supported(panel->aux, dpcd); > >>> link_info = &msm_dp_panel->link_info; > >>> link_info->revision = dpcd[DP_DPCD_REV]; > >> > >> > >> -- > >> Best regards, > >> Xilin Wu <sophon@radxa.com> > > ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 6/9] drm/msm/dp: Work around bogus maximum link rate 2025-07-17 21:36 ` Jérôme de Bretagne @ 2025-07-18 10:52 ` Dmitry Baryshkov 2025-07-18 18:26 ` Jérôme de Bretagne 0 siblings, 1 reply; 16+ messages in thread From: Dmitry Baryshkov @ 2025-07-18 10:52 UTC (permalink / raw) To: Jérôme de Bretagne Cc: Konrad Dybcio, Xilin Wu, Dale Whinham, Rob Clark, Abhinav Kumar, Dmitry Baryshkov, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter, linux-arm-msm, dri-devel, freedreno, linux-kernel On Thu, Jul 17, 2025 at 11:36:38PM +0200, Jérôme de Bretagne wrote: > Le jeu. 17 juil. 2025 à 23:10, Konrad Dybcio > <konrad.dybcio@oss.qualcomm.com> a écrit : > > > > On 7/17/25 10:27 PM, Jérôme de Bretagne wrote: > > > On 2025/7/17 04:21, Xilin Wu <sophon@radxa.com> wrote : > > >> > > >> On 2025/7/15 01:35:42, Dale Whinham wrote: > > >>> From: Jérôme de Bretagne <jerome.debretagne@gmail.com> > > >>> > > >>> The OLED display in the Surface Pro 11 reports a maximum link rate of > > >>> zero in its DPCD, causing it to fail to probe correctly. > > >>> > > >>> The Surface Pro 11's DSDT table contains some XML with an > > >>> "EDPOverrideDPCDCaps" block that defines the max link rate as 0x1E > > >>> (8.1Gbps/HBR3). > > >>> > > >>> Add a quirk to conditionally override the max link rate if its value > > >>> is zero specifically for this model. > > >>> > > >>> Signed-off-by: Jérôme de Bretagne <jerome.debretagne@gmail.com> > > >>> Signed-off-by: Dale Whinham <daleyo@gmail.com> > > >>> --- > > >>> drivers/gpu/drm/msm/dp/dp_panel.c | 13 +++++++++++++ > > >>> 1 file changed, 13 insertions(+) > > >>> [...] > > > > > > > Is it a feature planned in the short-medium term within the MSM driver? > > > If not, would a quirk like [4] be acceptable upstream in the meanwhile? > > > > I'm not a display guy, but this looks like yet another block of code > > begging to be commonized across DP drivers, > > I agree 100% in principle, but the 3 implementations are different today. > > > so I wouldn't expect it to be a big blocker. > > Well, it is for me :) > > > Adding a panel quirk doesn't seem in order, as the panel is /probably/ > > very much in spec, and it's the driver bit that's missing. > > I agree that a quirk shouldn't be needed. I guess we'll work on > upstreaming everything else and keep an out-of-tree patch for this > issue for the moment That's a bit sad as this will block regular > users from easily installing / testing via the Ubuntu Concept ISO > for instance. > > Or could the quirk be accepted temporarily with good comments > then reverted when the driver adds the missing support? I guess > it would depend on the time scale of this support landing. Unforutunately, there is more than that. We should also be writing the LINK_RATE_SET register. So, just setting the max_bw is not enough. -- With best wishes Dmitry ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 6/9] drm/msm/dp: Work around bogus maximum link rate 2025-07-18 10:52 ` Dmitry Baryshkov @ 2025-07-18 18:26 ` Jérôme de Bretagne 2025-07-18 18:30 ` Dmitry Baryshkov 0 siblings, 1 reply; 16+ messages in thread From: Jérôme de Bretagne @ 2025-07-18 18:26 UTC (permalink / raw) To: Dmitry Baryshkov Cc: Konrad Dybcio, Xilin Wu, Dale Whinham, Rob Clark, Abhinav Kumar, Dmitry Baryshkov, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter, linux-arm-msm, dri-devel, freedreno, linux-kernel On Friday, Jul 18, 2025, Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> wrote: > > On Thu, Jul 17, 2025 at 11:36:38PM +0200, Jérôme de Bretagne wrote: > > Le jeu. 17 juil. 2025 à 23:10, Konrad Dybcio > > <konrad.dybcio@oss.qualcomm.com> a écrit : > > > > > > On 7/17/25 10:27 PM, Jérôme de Bretagne wrote: > > > > On 2025/7/17 04:21, Xilin Wu <sophon@radxa.com> wrote : > > > >> > > > >> On 2025/7/15 01:35:42, Dale Whinham wrote: > > > >>> From: Jérôme de Bretagne <jerome.debretagne@gmail.com> > > > >>> > > > >>> The OLED display in the Surface Pro 11 reports a maximum link rate of > > > >>> zero in its DPCD, causing it to fail to probe correctly. > > > >>> > > > >>> The Surface Pro 11's DSDT table contains some XML with an > > > >>> "EDPOverrideDPCDCaps" block that defines the max link rate as 0x1E > > > >>> (8.1Gbps/HBR3). > > > >>> > > > >>> Add a quirk to conditionally override the max link rate if its value > > > >>> is zero specifically for this model. > > > >>> > > > >>> Signed-off-by: Jérôme de Bretagne <jerome.debretagne@gmail.com> > > > >>> Signed-off-by: Dale Whinham <daleyo@gmail.com> > > > >>> --- > > > >>> drivers/gpu/drm/msm/dp/dp_panel.c | 13 +++++++++++++ > > > >>> 1 file changed, 13 insertions(+) > > > >>> > > [...] > > > > > > > > > > > Is it a feature planned in the short-medium term within the MSM driver? > > > > If not, would a quirk like [4] be acceptable upstream in the meanwhile? > > > > > > I'm not a display guy, but this looks like yet another block of code > > > begging to be commonized across DP drivers, > > > > I agree 100% in principle, but the 3 implementations are different today. > > > > > so I wouldn't expect it to be a big blocker. > > > > Well, it is for me :) > > > > > Adding a panel quirk doesn't seem in order, as the panel is /probably/ > > > very much in spec, and it's the driver bit that's missing. > > > > I agree that a quirk shouldn't be needed. I guess we'll work on > > upstreaming everything else and keep an out-of-tree patch for this > > issue for the moment That's a bit sad as this will block regular > > users from easily installing / testing via the Ubuntu Concept ISO > > for instance. > > > > Or could the quirk be accepted temporarily with good comments > > then reverted when the driver adds the missing support? I guess > > it would depend on the time scale of this support landing. > > Unforutunately, there is more than that. We should also be writing the > LINK_RATE_SET register. So, just setting the max_bw is not enough. Maybe I've misunderstood. When you say max_bw is not enough, are you talking about some future driver changes or about a potential shorter-term fix? I can confirm that this initial simple patch (and also the updated one reusing the quirk list [4]) is enough to get the SP11 OLED display working whereas it doesn't probe and remains off without such a fix. Thanks, Jérôme [4] https://github.com/JeromeDeBretagne/linux-surface-pro-11/commit/d265cfb > -- > With best wishes > Dmitry ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 6/9] drm/msm/dp: Work around bogus maximum link rate 2025-07-18 18:26 ` Jérôme de Bretagne @ 2025-07-18 18:30 ` Dmitry Baryshkov 0 siblings, 0 replies; 16+ messages in thread From: Dmitry Baryshkov @ 2025-07-18 18:30 UTC (permalink / raw) To: Jérôme de Bretagne Cc: Konrad Dybcio, Xilin Wu, Dale Whinham, Rob Clark, Abhinav Kumar, Dmitry Baryshkov, Sean Paul, Marijn Suijten, David Airlie, Simona Vetter, linux-arm-msm, dri-devel, freedreno, linux-kernel On 18/07/2025 21:26, Jérôme de Bretagne wrote: > On Friday, Jul 18, 2025, Dmitry Baryshkov > <dmitry.baryshkov@oss.qualcomm.com> wrote: >> >> On Thu, Jul 17, 2025 at 11:36:38PM +0200, Jérôme de Bretagne wrote: >>> Le jeu. 17 juil. 2025 à 23:10, Konrad Dybcio >>> <konrad.dybcio@oss.qualcomm.com> a écrit : >>>> >>>> On 7/17/25 10:27 PM, Jérôme de Bretagne wrote: >>>>> On 2025/7/17 04:21, Xilin Wu <sophon@radxa.com> wrote : >>>>>> >>>>>> On 2025/7/15 01:35:42, Dale Whinham wrote: >>>>>>> From: Jérôme de Bretagne <jerome.debretagne@gmail.com> >>>>>>> >>>>>>> The OLED display in the Surface Pro 11 reports a maximum link rate of >>>>>>> zero in its DPCD, causing it to fail to probe correctly. >>>>>>> >>>>>>> The Surface Pro 11's DSDT table contains some XML with an >>>>>>> "EDPOverrideDPCDCaps" block that defines the max link rate as 0x1E >>>>>>> (8.1Gbps/HBR3). >>>>>>> >>>>>>> Add a quirk to conditionally override the max link rate if its value >>>>>>> is zero specifically for this model. >>>>>>> >>>>>>> Signed-off-by: Jérôme de Bretagne <jerome.debretagne@gmail.com> >>>>>>> Signed-off-by: Dale Whinham <daleyo@gmail.com> >>>>>>> --- >>>>>>> drivers/gpu/drm/msm/dp/dp_panel.c | 13 +++++++++++++ >>>>>>> 1 file changed, 13 insertions(+) >>>>>>> >> >> [...] >> >>> >>>>> >>>>> Is it a feature planned in the short-medium term within the MSM driver? >>>>> If not, would a quirk like [4] be acceptable upstream in the meanwhile? >>>> >>>> I'm not a display guy, but this looks like yet another block of code >>>> begging to be commonized across DP drivers, >>> >>> I agree 100% in principle, but the 3 implementations are different today. >>> >>>> so I wouldn't expect it to be a big blocker. >>> >>> Well, it is for me :) >>> >>>> Adding a panel quirk doesn't seem in order, as the panel is /probably/ >>>> very much in spec, and it's the driver bit that's missing. >>> >>> I agree that a quirk shouldn't be needed. I guess we'll work on >>> upstreaming everything else and keep an out-of-tree patch for this >>> issue for the moment That's a bit sad as this will block regular >>> users from easily installing / testing via the Ubuntu Concept ISO >>> for instance. >>> >>> Or could the quirk be accepted temporarily with good comments >>> then reverted when the driver adds the missing support? I guess >>> it would depend on the time scale of this support landing. >> >> Unforutunately, there is more than that. We should also be writing the >> LINK_RATE_SET register. So, just setting the max_bw is not enough. > > Maybe I've misunderstood. When you say max_bw is not enough, > are you talking about some future driver changes or about a potential > shorter-term fix? > > I can confirm that this initial simple patch (and also the updated one > reusing the quirk list [4]) is enough to get the SP11 OLED display > working whereas it doesn't probe and remains off without such a fix. These parts were changed in eDP 1.4 and then 1.5, but basically, if MAX_LINK_RATE is 0, the driver should also write LINK_RATE_SET register. See how it's handled by the intel or AMD drivers. > > Thanks, > Jérôme > > [4] https://github.com/JeromeDeBretagne/linux-surface-pro-11/commit/d265cfb >> -- >> With best wishes >> Dmitry -- With best wishes Dmitry ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 9/9 RFC] arm64: dts: qcom: x1e80100-denali: Disable rfkill for wifi0 2025-07-14 17:35 [PATCH 0/9] Microsoft Surface Pro 11 support Dale Whinham ` (3 preceding siblings ...) 2025-07-14 17:35 ` [PATCH 6/9] drm/msm/dp: Work around bogus maximum link rate Dale Whinham @ 2025-07-14 17:35 ` Dale Whinham 4 siblings, 0 replies; 16+ messages in thread From: Dale Whinham @ 2025-07-14 17:35 UTC (permalink / raw) To: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Conor Dooley Cc: Jérôme de Bretagne, Dale Whinham, linux-arm-msm, devicetree, linux-kernel Use the devicetree mechanism for disabling rfkill to do so for Microsoft Surface Pro 11. Tested-by: Jérôme de Bretagne <jerome.debretagne@gmail.com> Signed-off-by: Dale Whinham <daleyo@gmail.com> --- arch/arm64/boot/dts/qcom/x1e80100-microsoft-denali.dts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/x1e80100-microsoft-denali.dts b/arch/arm64/boot/dts/qcom/x1e80100-microsoft-denali.dts index 8bc3959537ab..18ca83ab637f 100644 --- a/arch/arm64/boot/dts/qcom/x1e80100-microsoft-denali.dts +++ b/arch/arm64/boot/dts/qcom/x1e80100-microsoft-denali.dts @@ -977,6 +977,8 @@ wifi@0 { vddrfa1p8-supply = <&vreg_pmu_rfa_1p8>; vddpcie0p9-supply = <&vreg_pmu_pcie_0p9>; vddpcie1p8-supply = <&vreg_pmu_pcie_1p8>; + + disable-rfkill; }; }; -- 2.50.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
end of thread, other threads:[~2025-07-18 18:30 UTC | newest] Thread overview: 16+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-07-14 17:35 [PATCH 0/9] Microsoft Surface Pro 11 support Dale Whinham 2025-07-14 17:35 ` [PATCH 1/9] dt-bindings: arm: qcom: Document Microsoft Surface Pro 11 Dale Whinham 2025-07-15 3:58 ` Rob Herring (Arm) 2025-07-14 17:35 ` [PATCH 3/9] firmware: qcom: scm: allow QSEECOM on " Dale Whinham 2025-07-14 17:35 ` [PATCH 5/9] arm64: dts: qcom: Add support for " Dale Whinham 2025-07-14 17:35 ` [PATCH 6/9] drm/msm/dp: Work around bogus maximum link rate Dale Whinham 2025-07-14 19:50 ` Rob Clark 2025-07-15 22:52 ` Jérôme de Bretagne 2025-07-17 2:21 ` Xilin Wu 2025-07-17 20:27 ` Jérôme de Bretagne 2025-07-17 21:10 ` Konrad Dybcio 2025-07-17 21:36 ` Jérôme de Bretagne 2025-07-18 10:52 ` Dmitry Baryshkov 2025-07-18 18:26 ` Jérôme de Bretagne 2025-07-18 18:30 ` Dmitry Baryshkov 2025-07-14 17:35 ` [PATCH 9/9 RFC] arm64: dts: qcom: x1e80100-denali: Disable rfkill for wifi0 Dale Whinham
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).