diff mbox series

[3/3] arm64: dts: qcom: Add X1E78100 ThinkPad T14s Gen 6

Message ID 20240719-topic-t14s_upstream-v1-3-d7d97fdebb28@linaro.org (mailing list archive)
State Changes Requested
Headers show
Series ThinkPad T14s Gen 6 support | expand

Commit Message

Konrad Dybcio July 19, 2024, 8:16 p.m. UTC
Add support for the aforementioned laptop. That includes:

- input methods, incl. lid switch (keyboard needs the pdc
  wakeup-parent removal hack..)
- NVMe, WiFi
- USB-C ports
- GPU, display
- DSPs

Notably, the USB-A ports on the side are depenedent on the USB
multiport controller making it upstream.

At least one of the eDP panels used (non-touchscreen) identifies as
BOE 0x0b66.

See below for the hardware description from the OEM.

Link: https://www.lenovo.com/us/en/p/laptops/thinkpad/thinkpadt/lenovo-thinkpad-t14s-gen-6-(14-inch-snapdragon)/len101t0099
Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
---
 arch/arm64/boot/dts/qcom/Makefile                  |   1 +
 .../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts     | 792 +++++++++++++++++++++
 2 files changed, 793 insertions(+)

Comments

Abel Vesa July 21, 2024, 4:40 p.m. UTC | #1
On 24-07-19 22:16:38, Konrad Dybcio wrote:
> Add support for the aforementioned laptop. That includes:
> 
> - input methods, incl. lid switch (keyboard needs the pdc
>   wakeup-parent removal hack..)
> - NVMe, WiFi
> - USB-C ports
> - GPU, display
> - DSPs
> 
> Notably, the USB-A ports on the side are depenedent on the USB
> multiport controller making it upstream.
> 
> At least one of the eDP panels used (non-touchscreen) identifies as
> BOE 0x0b66.
> 
> See below for the hardware description from the OEM.
> 
> Link: https://www.lenovo.com/us/en/p/laptops/thinkpad/thinkpadt/lenovo-thinkpad-t14s-gen-6-(14-inch-snapdragon)/len101t0099
> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Few comments below. Otherwise, LGTM.

Reviewed-by: Abel Vesa <abel.vesa@linaro.org>

> ---
>  arch/arm64/boot/dts/qcom/Makefile                  |   1 +
>  .../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts     | 792 +++++++++++++++++++++
>  2 files changed, 793 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> index 0e5c810304fb..734a05e04c4a 100644
> --- a/arch/arm64/boot/dts/qcom/Makefile
> +++ b/arch/arm64/boot/dts/qcom/Makefile
> @@ -261,6 +261,7 @@ dtb-$(CONFIG_ARCH_QCOM)	+= sm8650-hdk-display-card.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8650-hdk.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8650-mtp.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8650-qrd.dtb
> +dtb-$(CONFIG_ARCH_QCOM)	+= x1e78100-lenovo-thinkpad-t14s.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= x1e80100-asus-vivobook-s15.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= x1e80100-crd.dtb
>  dtb-$(CONFIG_ARCH_QCOM)	+= x1e80100-lenovo-yoga-slim7x.dtb
> diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts

So what happens for SKUs of this model wil have x1e80100 ?

Maybe we should stick to x1e80100 ?

> new file mode 100644
> index 000000000000..b12953267505
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts
> @@ -0,0 +1,792 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> +/*
> + * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
> + * Copyright (c) 2024, Linaro Limited
> + */
> +
> +/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 = "Lenovo ThinkPad T14s Gen 6";
> +	compatible = "lenovo,thinkpad-t14s", "qcom,x1e78100", "qcom,x1e80100";
> +
> +	aliases {
> +		serial0 = &uart21;
> +	};
> +
> +	chosen {
> +		stdout-path = "serial0:115200n8";
> +	};
> +

[...]

> +
> +	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-always-on;

Drop this.

> +		regulator-boot-on;
> +	};
> +

[...]

> +
> +&tlmm {
> +	gpio-reserved-ranges = <34 2>, /* Unused */
> +			       <44 4>, /* SPI (TPM) */
> +			       <72 2>, /* Secure EC I2C connection (?) */
> +			       <238 1>; /* UFS Reset */
> +
> +	tpad_default: tpad-default-state {
> +		pins = "gpio3";
> +		function = "gpio";
> +		bias-pull-up;
> +	};
> +
> +	nvme_reg_en: nvme-reg-en-state {
> +		pins = "gpio18";
> +		function = "gpio";
> +		drive-strength = <2>;
> +		bias-disable;
> +	};
> +
> +	ts0_default: ts0-default-state {
> +		reset-n-pins {
> +			pins = "gpio48";
> +			function = "gpio";
> +			output-high;
> +			drive-strength = <16>;
> +		};
> +
> +		int-n-pins {
> +			pins = "gpio51";
> +			function = "gpio";
> +			bias-disable;
> +		};
> +	};
> +
> +	kybd_default: kybd-default-state {
> +		pins = "gpio67";
> +		function = "gpio";
> +		bias-disable;
> +	};
> +
> +	edp_reg_en: edp-reg-en-state {
> +		pins = "gpio70";
> +		function = "gpio";
> +		drive-strength = <16>;
> +		bias-pull-up;

bias-disable, maybe ?

> +	};
> +
> +	hall_int_n_default: hall-int-n-state {
> +		pins = "gpio92";
> +		function = "gpio";
> +		bias-disable;
> +	};
> +

[...]

> 
> -- 
> 2.45.2
>
Konrad Dybcio July 22, 2024, 8:42 a.m. UTC | #2
On 21.07.2024 6:40 PM, Abel Vesa wrote:
> On 24-07-19 22:16:38, Konrad Dybcio wrote:
>> Add support for the aforementioned laptop. That includes:
>>
>> - input methods, incl. lid switch (keyboard needs the pdc
>>   wakeup-parent removal hack..)
>> - NVMe, WiFi
>> - USB-C ports
>> - GPU, display
>> - DSPs
>>
>> Notably, the USB-A ports on the side are depenedent on the USB
>> multiport controller making it upstream.
>>
>> At least one of the eDP panels used (non-touchscreen) identifies as
>> BOE 0x0b66.
>>
>> See below for the hardware description from the OEM.
>>
>> Link: https://www.lenovo.com/us/en/p/laptops/thinkpad/thinkpadt/lenovo-thinkpad-t14s-gen-6-(14-inch-snapdragon)/len101t0099
>> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
> 
> Few comments below. Otherwise, LGTM.
> 
> Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
> 
>> ---
>>  arch/arm64/boot/dts/qcom/Makefile                  |   1 +
>>  .../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts     | 792 +++++++++++++++++++++
>>  2 files changed, 793 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
>> index 0e5c810304fb..734a05e04c4a 100644
>> --- a/arch/arm64/boot/dts/qcom/Makefile
>> +++ b/arch/arm64/boot/dts/qcom/Makefile
>> @@ -261,6 +261,7 @@ dtb-$(CONFIG_ARCH_QCOM)	+= sm8650-hdk-display-card.dtb
>>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8650-hdk.dtb
>>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8650-mtp.dtb
>>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8650-qrd.dtb
>> +dtb-$(CONFIG_ARCH_QCOM)	+= x1e78100-lenovo-thinkpad-t14s.dtb
>>  dtb-$(CONFIG_ARCH_QCOM)	+= x1e80100-asus-vivobook-s15.dtb
>>  dtb-$(CONFIG_ARCH_QCOM)	+= x1e80100-crd.dtb
>>  dtb-$(CONFIG_ARCH_QCOM)	+= x1e80100-lenovo-yoga-slim7x.dtb
>> diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts
> 
> So what happens for SKUs of this model wil have x1e80100 ?
> 
> Maybe we should stick to x1e80100 ?

This one only ships with 78100

[...]

>> +	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-always-on;
> 
> Drop this.

Oops!

[...]

>> +
>> +	edp_reg_en: edp-reg-en-state {
>> +		pins = "gpio70";
>> +		function = "gpio";
>> +		drive-strength = <16>;
>> +		bias-pull-up;
> 
> bias-disable, maybe ?

Yeah, probably

Konrad
Johan Hovold July 22, 2024, 10:04 a.m. UTC | #3
On Fri, Jul 19, 2024 at 10:16:38PM +0200, Konrad Dybcio wrote:

> +/ {
> +	model = "Lenovo ThinkPad T14s Gen 6";
> +	compatible = "lenovo,thinkpad-t14s", "qcom,x1e78100", "qcom,x1e80100";
> +
> +	aliases {
> +		serial0 = &uart21;
> +	};
> +
> +	chosen {
> +		stdout-path = "serial0:115200n8";
> +	};

I don't think this machine has a serial console.

> +&pcie4 {

Missing perst and wake gpios and pin configuration.

> +	status = "okay";
> +};
> +
> +&pcie4_phy {
> +	vdda-phy-supply = <&vreg_l3j_0p8>;

This should most likely be vreg_l3i as on the CRD reference design.

> +	vdda-pll-supply = <&vreg_l3e_1p2>;
> +
> +	status = "okay";
> +};

> +	pcie6a_default: pcie2a-default-state {

copy-pasta: pcie6a-default-state

> +		clkreq-n-pins {
> +			pins = "gpio153";
> +			function = "pcie6a_clk";
> +			drive-strength = <2>;
> +			bias-pull-up;
> +		};
> +
> +		perst-n-pins {
> +			pins = "gpio152";
> +			function = "gpio";
> +			drive-strength = <2>;
> +			bias-pull-down;

bias-disable

> +		};
> +
> +		wake-n-pins {
> +			pins = "gpio154";
> +			function = "gpio";
> +			drive-strength = <2>;
> +			bias-pull-up;
> +		};
> +	};

> +&uart21 {
> +	compatible = "qcom,geni-debug-uart";
> +
> +	status = "okay";
> +};

Likely not present / accessible so no need to slow down boot by printing
logs at 115200.

Johan
Abel Vesa July 22, 2024, 10:08 a.m. UTC | #4
On 24-07-22 10:42:57, Konrad Dybcio wrote:
> On 21.07.2024 6:40 PM, Abel Vesa wrote:
> > On 24-07-19 22:16:38, Konrad Dybcio wrote:
> >> Add support for the aforementioned laptop. That includes:
> >>
> >> - input methods, incl. lid switch (keyboard needs the pdc
> >>   wakeup-parent removal hack..)
> >> - NVMe, WiFi
> >> - USB-C ports
> >> - GPU, display
> >> - DSPs
> >>
> >> Notably, the USB-A ports on the side are depenedent on the USB
> >> multiport controller making it upstream.
> >>
> >> At least one of the eDP panels used (non-touchscreen) identifies as
> >> BOE 0x0b66.
> >>
> >> See below for the hardware description from the OEM.
> >>
> >> Link: https://www.lenovo.com/us/en/p/laptops/thinkpad/thinkpadt/lenovo-thinkpad-t14s-gen-6-(14-inch-snapdragon)/len101t0099
> >> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
> > 
> > Few comments below. Otherwise, LGTM.
> > 
> > Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
> > 
> >> ---
> >>  arch/arm64/boot/dts/qcom/Makefile                  |   1 +
> >>  .../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts     | 792 +++++++++++++++++++++
> >>  2 files changed, 793 insertions(+)
> >>
> >> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> >> index 0e5c810304fb..734a05e04c4a 100644
> >> --- a/arch/arm64/boot/dts/qcom/Makefile
> >> +++ b/arch/arm64/boot/dts/qcom/Makefile
> >> @@ -261,6 +261,7 @@ dtb-$(CONFIG_ARCH_QCOM)	+= sm8650-hdk-display-card.dtb
> >>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8650-hdk.dtb
> >>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8650-mtp.dtb
> >>  dtb-$(CONFIG_ARCH_QCOM)	+= sm8650-qrd.dtb
> >> +dtb-$(CONFIG_ARCH_QCOM)	+= x1e78100-lenovo-thinkpad-t14s.dtb
> >>  dtb-$(CONFIG_ARCH_QCOM)	+= x1e80100-asus-vivobook-s15.dtb
> >>  dtb-$(CONFIG_ARCH_QCOM)	+= x1e80100-crd.dtb
> >>  dtb-$(CONFIG_ARCH_QCOM)	+= x1e80100-lenovo-yoga-slim7x.dtb
> >> diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts
> > 
> > So what happens for SKUs of this model wil have x1e80100 ?
> > 
> > Maybe we should stick to x1e80100 ?
> 
> This one only ships with 78100
> 

Sure, but then in upstream we only have 80100. Plus, it is included in
this file as well.

I don't know what's the right thing to do here. But I think it keeps
things more simple if we keep everything under the x1e80100 umbrella.

> [...]
> 
> >> +	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-always-on;
> > 
> > Drop this.
> 
> Oops!
> 
> [...]
> 
> >> +
> >> +	edp_reg_en: edp-reg-en-state {
> >> +		pins = "gpio70";
> >> +		function = "gpio";
> >> +		drive-strength = <16>;
> >> +		bias-pull-up;
> > 
> > bias-disable, maybe ?
> 
> Yeah, probably
> 
> Konrad
>
Rob Clark July 22, 2024, 3 p.m. UTC | #5
On Mon, Jul 22, 2024 at 3:11 AM Abel Vesa <abel.vesa@linaro.org> wrote:
>
> On 24-07-22 10:42:57, Konrad Dybcio wrote:
> > On 21.07.2024 6:40 PM, Abel Vesa wrote:
> > > On 24-07-19 22:16:38, Konrad Dybcio wrote:
> > >> Add support for the aforementioned laptop. That includes:
> > >>
> > >> - input methods, incl. lid switch (keyboard needs the pdc
> > >>   wakeup-parent removal hack..)
> > >> - NVMe, WiFi
> > >> - USB-C ports
> > >> - GPU, display
> > >> - DSPs
> > >>
> > >> Notably, the USB-A ports on the side are depenedent on the USB
> > >> multiport controller making it upstream.
> > >>
> > >> At least one of the eDP panels used (non-touchscreen) identifies as
> > >> BOE 0x0b66.
> > >>
> > >> See below for the hardware description from the OEM.
> > >>
> > >> Link: https://www.lenovo.com/us/en/p/laptops/thinkpad/thinkpadt/lenovo-thinkpad-t14s-gen-6-(14-inch-snapdragon)/len101t0099
> > >> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
> > >
> > > Few comments below. Otherwise, LGTM.
> > >
> > > Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
> > >
> > >> ---
> > >>  arch/arm64/boot/dts/qcom/Makefile                  |   1 +
> > >>  .../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts     | 792 +++++++++++++++++++++
> > >>  2 files changed, 793 insertions(+)
> > >>
> > >> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> > >> index 0e5c810304fb..734a05e04c4a 100644
> > >> --- a/arch/arm64/boot/dts/qcom/Makefile
> > >> +++ b/arch/arm64/boot/dts/qcom/Makefile
> > >> @@ -261,6 +261,7 @@ dtb-$(CONFIG_ARCH_QCOM)        += sm8650-hdk-display-card.dtb
> > >>  dtb-$(CONFIG_ARCH_QCOM)   += sm8650-hdk.dtb
> > >>  dtb-$(CONFIG_ARCH_QCOM)   += sm8650-mtp.dtb
> > >>  dtb-$(CONFIG_ARCH_QCOM)   += sm8650-qrd.dtb
> > >> +dtb-$(CONFIG_ARCH_QCOM)   += x1e78100-lenovo-thinkpad-t14s.dtb
> > >>  dtb-$(CONFIG_ARCH_QCOM)   += x1e80100-asus-vivobook-s15.dtb
> > >>  dtb-$(CONFIG_ARCH_QCOM)   += x1e80100-crd.dtb
> > >>  dtb-$(CONFIG_ARCH_QCOM)   += x1e80100-lenovo-yoga-slim7x.dtb
> > >> diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts
> > >
> > > So what happens for SKUs of this model wil have x1e80100 ?
> > >
> > > Maybe we should stick to x1e80100 ?
> >
> > This one only ships with 78100
> >
>
> Sure, but then in upstream we only have 80100. Plus, it is included in
> this file as well.
>
> I don't know what's the right thing to do here. But I think it keeps
> things more simple if we keep everything under the x1e80100 umbrella.

plus sticking to x1e80100 will avoid angering tab completion :-P

BR,
-R

> > [...]
> >
> > >> +  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-always-on;
> > >
> > > Drop this.
> >
> > Oops!
> >
> > [...]
> >
> > >> +
> > >> +  edp_reg_en: edp-reg-en-state {
> > >> +          pins = "gpio70";
> > >> +          function = "gpio";
> > >> +          drive-strength = <16>;
> > >> +          bias-pull-up;
> > >
> > > bias-disable, maybe ?
> >
> > Yeah, probably
> >
> > Konrad
> >
>
Dmitry Baryshkov July 22, 2024, 4:03 p.m. UTC | #6
On Mon, Jul 22, 2024 at 08:00:19AM GMT, Rob Clark wrote:
> On Mon, Jul 22, 2024 at 3:11 AM Abel Vesa <abel.vesa@linaro.org> wrote:
> >
> > On 24-07-22 10:42:57, Konrad Dybcio wrote:
> > > On 21.07.2024 6:40 PM, Abel Vesa wrote:
> > > > On 24-07-19 22:16:38, Konrad Dybcio wrote:
> > > >> Add support for the aforementioned laptop. That includes:
> > > >>
> > > >> - input methods, incl. lid switch (keyboard needs the pdc
> > > >>   wakeup-parent removal hack..)
> > > >> - NVMe, WiFi
> > > >> - USB-C ports
> > > >> - GPU, display
> > > >> - DSPs
> > > >>
> > > >> Notably, the USB-A ports on the side are depenedent on the USB
> > > >> multiport controller making it upstream.
> > > >>
> > > >> At least one of the eDP panels used (non-touchscreen) identifies as
> > > >> BOE 0x0b66.
> > > >>
> > > >> See below for the hardware description from the OEM.
> > > >>
> > > >> Link: https://www.lenovo.com/us/en/p/laptops/thinkpad/thinkpadt/lenovo-thinkpad-t14s-gen-6-(14-inch-snapdragon)/len101t0099
> > > >> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
> > > >
> > > > Few comments below. Otherwise, LGTM.
> > > >
> > > > Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
> > > >
> > > >> ---
> > > >>  arch/arm64/boot/dts/qcom/Makefile                  |   1 +
> > > >>  .../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts     | 792 +++++++++++++++++++++
> > > >>  2 files changed, 793 insertions(+)
> > > >>
> > > >> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> > > >> index 0e5c810304fb..734a05e04c4a 100644
> > > >> --- a/arch/arm64/boot/dts/qcom/Makefile
> > > >> +++ b/arch/arm64/boot/dts/qcom/Makefile
> > > >> @@ -261,6 +261,7 @@ dtb-$(CONFIG_ARCH_QCOM)        += sm8650-hdk-display-card.dtb
> > > >>  dtb-$(CONFIG_ARCH_QCOM)   += sm8650-hdk.dtb
> > > >>  dtb-$(CONFIG_ARCH_QCOM)   += sm8650-mtp.dtb
> > > >>  dtb-$(CONFIG_ARCH_QCOM)   += sm8650-qrd.dtb
> > > >> +dtb-$(CONFIG_ARCH_QCOM)   += x1e78100-lenovo-thinkpad-t14s.dtb
> > > >>  dtb-$(CONFIG_ARCH_QCOM)   += x1e80100-asus-vivobook-s15.dtb
> > > >>  dtb-$(CONFIG_ARCH_QCOM)   += x1e80100-crd.dtb
> > > >>  dtb-$(CONFIG_ARCH_QCOM)   += x1e80100-lenovo-yoga-slim7x.dtb
> > > >> diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts
> > > >
> > > > So what happens for SKUs of this model wil have x1e80100 ?
> > > >
> > > > Maybe we should stick to x1e80100 ?
> > >
> > > This one only ships with 78100
> > >
> >
> > Sure, but then in upstream we only have 80100. Plus, it is included in
> > this file as well.
> >
> > I don't know what's the right thing to do here. But I think it keeps
> > things more simple if we keep everything under the x1e80100 umbrella.
> 
> plus sticking to x1e80100 will avoid angering tab completion :-P

This is an old argument, with no clear answer. For some devices we
choose to use correct SoC name (sda660-inforce-ifc6560). For other we
didn't (sdm845-db845c, which really is SDA845). However for most of the
devices the goal is to be accurate (think about all the qcs vs qcm
stories). So my 2c. would go to x1e78100.
Bjorn Andersson July 23, 2024, 6:55 p.m. UTC | #7
On Mon, Jul 22, 2024 at 07:03:43PM GMT, Dmitry Baryshkov wrote:
> On Mon, Jul 22, 2024 at 08:00:19AM GMT, Rob Clark wrote:
> > On Mon, Jul 22, 2024 at 3:11 AM Abel Vesa <abel.vesa@linaro.org> wrote:
> > >
> > > On 24-07-22 10:42:57, Konrad Dybcio wrote:
> > > > On 21.07.2024 6:40 PM, Abel Vesa wrote:
> > > > > On 24-07-19 22:16:38, Konrad Dybcio wrote:
> > > > >> Add support for the aforementioned laptop. That includes:
> > > > >>
> > > > >> - input methods, incl. lid switch (keyboard needs the pdc
> > > > >>   wakeup-parent removal hack..)
> > > > >> - NVMe, WiFi
> > > > >> - USB-C ports
> > > > >> - GPU, display
> > > > >> - DSPs
> > > > >>
> > > > >> Notably, the USB-A ports on the side are depenedent on the USB
> > > > >> multiport controller making it upstream.
> > > > >>
> > > > >> At least one of the eDP panels used (non-touchscreen) identifies as
> > > > >> BOE 0x0b66.
> > > > >>
> > > > >> See below for the hardware description from the OEM.
> > > > >>
> > > > >> Link: https://www.lenovo.com/us/en/p/laptops/thinkpad/thinkpadt/lenovo-thinkpad-t14s-gen-6-(14-inch-snapdragon)/len101t0099
> > > > >> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
> > > > >
> > > > > Few comments below. Otherwise, LGTM.
> > > > >
> > > > > Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
> > > > >
> > > > >> ---
> > > > >>  arch/arm64/boot/dts/qcom/Makefile                  |   1 +
> > > > >>  .../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts     | 792 +++++++++++++++++++++
> > > > >>  2 files changed, 793 insertions(+)
> > > > >>
> > > > >> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> > > > >> index 0e5c810304fb..734a05e04c4a 100644
> > > > >> --- a/arch/arm64/boot/dts/qcom/Makefile
> > > > >> +++ b/arch/arm64/boot/dts/qcom/Makefile
> > > > >> @@ -261,6 +261,7 @@ dtb-$(CONFIG_ARCH_QCOM)        += sm8650-hdk-display-card.dtb
> > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += sm8650-hdk.dtb
> > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += sm8650-mtp.dtb
> > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += sm8650-qrd.dtb
> > > > >> +dtb-$(CONFIG_ARCH_QCOM)   += x1e78100-lenovo-thinkpad-t14s.dtb
> > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += x1e80100-asus-vivobook-s15.dtb
> > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += x1e80100-crd.dtb
> > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += x1e80100-lenovo-yoga-slim7x.dtb
> > > > >> diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts
> > > > >
> > > > > So what happens for SKUs of this model wil have x1e80100 ?
> > > > >
> > > > > Maybe we should stick to x1e80100 ?
> > > >
> > > > This one only ships with 78100
> > > >
> > >
> > > Sure, but then in upstream we only have 80100. Plus, it is included in
> > > this file as well.
> > >
> > > I don't know what's the right thing to do here. But I think it keeps
> > > things more simple if we keep everything under the x1e80100 umbrella.
> > 
> > plus sticking to x1e80100 will avoid angering tab completion :-P
> 
> This is an old argument, with no clear answer. For some devices we
> choose to use correct SoC name (sda660-inforce-ifc6560). For other we
> didn't (sdm845-db845c, which really is SDA845). However for most of the
> devices the goal is to be accurate (think about all the qcs vs qcm
> stories). So my 2c. would go to x1e78100.
> 

I agree, x1e78100 follows the naming scheme we have agreed upon - for
better or worse.

Regards,
Bjorn

> -- 
> With best wishes
> Dmitry
Mark Kettenis July 23, 2024, 9:28 p.m. UTC | #8
> Date: Tue, 23 Jul 2024 13:55:20 -0500
> From: Bjorn Andersson <andersson@kernel.org>
> 
> On Mon, Jul 22, 2024 at 07:03:43PM GMT, Dmitry Baryshkov wrote:
> > On Mon, Jul 22, 2024 at 08:00:19AM GMT, Rob Clark wrote:
> > > On Mon, Jul 22, 2024 at 3:11 AM Abel Vesa <abel.vesa@linaro.org> wrote:
> > > >
> > > > On 24-07-22 10:42:57, Konrad Dybcio wrote:
> > > > > On 21.07.2024 6:40 PM, Abel Vesa wrote:
> > > > > > On 24-07-19 22:16:38, Konrad Dybcio wrote:
> > > > > >> Add support for the aforementioned laptop. That includes:
> > > > > >>
> > > > > >> - input methods, incl. lid switch (keyboard needs the pdc
> > > > > >>   wakeup-parent removal hack..)
> > > > > >> - NVMe, WiFi
> > > > > >> - USB-C ports
> > > > > >> - GPU, display
> > > > > >> - DSPs
> > > > > >>
> > > > > >> Notably, the USB-A ports on the side are depenedent on the USB
> > > > > >> multiport controller making it upstream.
> > > > > >>
> > > > > >> At least one of the eDP panels used (non-touchscreen) identifies as
> > > > > >> BOE 0x0b66.
> > > > > >>
> > > > > >> See below for the hardware description from the OEM.
> > > > > >>
> > > > > >> Link: https://www.lenovo.com/us/en/p/laptops/thinkpad/thinkpadt/lenovo-thinkpad-t14s-gen-6-(14-inch-snapdragon)/len101t0099
> > > > > >> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
> > > > > >
> > > > > > Few comments below. Otherwise, LGTM.
> > > > > >
> > > > > > Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
> > > > > >
> > > > > >> ---
> > > > > >>  arch/arm64/boot/dts/qcom/Makefile                  |   1 +
> > > > > >>  .../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts     | 792 +++++++++++++++++++++
> > > > > >>  2 files changed, 793 insertions(+)
> > > > > >>
> > > > > >> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> > > > > >> index 0e5c810304fb..734a05e04c4a 100644
> > > > > >> --- a/arch/arm64/boot/dts/qcom/Makefile
> > > > > >> +++ b/arch/arm64/boot/dts/qcom/Makefile
> > > > > >> @@ -261,6 +261,7 @@ dtb-$(CONFIG_ARCH_QCOM)        += sm8650-hdk-display-card.dtb
> > > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += sm8650-hdk.dtb
> > > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += sm8650-mtp.dtb
> > > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += sm8650-qrd.dtb
> > > > > >> +dtb-$(CONFIG_ARCH_QCOM)   += x1e78100-lenovo-thinkpad-t14s.dtb
> > > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += x1e80100-asus-vivobook-s15.dtb
> > > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += x1e80100-crd.dtb
> > > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += x1e80100-lenovo-yoga-slim7x.dtb
> > > > > >> diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts
> > > > > >
> > > > > > So what happens for SKUs of this model wil have x1e80100 ?
> > > > > >
> > > > > > Maybe we should stick to x1e80100 ?
> > > > >
> > > > > This one only ships with 78100
> > > > >
> > > >
> > > > Sure, but then in upstream we only have 80100. Plus, it is included in
> > > > this file as well.
> > > >
> > > > I don't know what's the right thing to do here. But I think it keeps
> > > > things more simple if we keep everything under the x1e80100 umbrella.
> > > 
> > > plus sticking to x1e80100 will avoid angering tab completion :-P
> > 
> > This is an old argument, with no clear answer. For some devices we
> > choose to use correct SoC name (sda660-inforce-ifc6560). For other we
> > didn't (sdm845-db845c, which really is SDA845). However for most of the
> > devices the goal is to be accurate (think about all the qcs vs qcm
> > stories). So my 2c. would go to x1e78100.
> > 
> 
> I agree, x1e78100 follows the naming scheme we have agreed upon - for
> better or worse.

So should the device trees for the Asus Vivobook S15 and the Lenovo
Yoga Slim 7x be renamed then?  Since those also (only) ship with
X1E-78-100 variants of the SoC.

There is supposed to be a variant of the Vivobook with the X1P-64-100
(I haven't seen it actually for sale yet).  Since that one has only 10
CPU cores, should that one gets its own device tree?  That may not be
possible.  I have a strong suspicion that all the variants are just
binned versions of the same SoC, where the X1P just has two of the
cores disabled.  If Qualcomm, like Apple, attempts to increase the
yield by binning SoCs with broken or badly performing cores as X1P it
might be a lottery which of the 12 cores get disabled.

And for the vendors that do offer models with different X1E variants,
are there going to multiple device trees, one for each variant?

I'm asking because on OpenBSD we load the device trees in our
bootloader and map SMBIOS vendor and product names to a device tree
name.  So a consistent naming scheme for the device trees is
desirable.

Thanks,

Mark

> Regards,
> Bjorn
> 
> > -- 
> > With best wishes
> > Dmitry
>
Rob Clark July 29, 2024, 8:42 p.m. UTC | #9
On Tue, Jul 23, 2024 at 2:28 PM Mark Kettenis <mark.kettenis@xs4all.nl> wrote:
>
> > Date: Tue, 23 Jul 2024 13:55:20 -0500
> > From: Bjorn Andersson <andersson@kernel.org>
> >
> > On Mon, Jul 22, 2024 at 07:03:43PM GMT, Dmitry Baryshkov wrote:
> > > On Mon, Jul 22, 2024 at 08:00:19AM GMT, Rob Clark wrote:
> > > > On Mon, Jul 22, 2024 at 3:11 AM Abel Vesa <abel.vesa@linaro.org> wrote:
> > > > >
> > > > > On 24-07-22 10:42:57, Konrad Dybcio wrote:
> > > > > > On 21.07.2024 6:40 PM, Abel Vesa wrote:
> > > > > > > On 24-07-19 22:16:38, Konrad Dybcio wrote:
> > > > > > >> Add support for the aforementioned laptop. That includes:
> > > > > > >>
> > > > > > >> - input methods, incl. lid switch (keyboard needs the pdc
> > > > > > >>   wakeup-parent removal hack..)
> > > > > > >> - NVMe, WiFi
> > > > > > >> - USB-C ports
> > > > > > >> - GPU, display
> > > > > > >> - DSPs
> > > > > > >>
> > > > > > >> Notably, the USB-A ports on the side are depenedent on the USB
> > > > > > >> multiport controller making it upstream.
> > > > > > >>
> > > > > > >> At least one of the eDP panels used (non-touchscreen) identifies as
> > > > > > >> BOE 0x0b66.
> > > > > > >>
> > > > > > >> See below for the hardware description from the OEM.
> > > > > > >>
> > > > > > >> Link: https://www.lenovo.com/us/en/p/laptops/thinkpad/thinkpadt/lenovo-thinkpad-t14s-gen-6-(14-inch-snapdragon)/len101t0099
> > > > > > >> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
> > > > > > >
> > > > > > > Few comments below. Otherwise, LGTM.
> > > > > > >
> > > > > > > Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
> > > > > > >
> > > > > > >> ---
> > > > > > >>  arch/arm64/boot/dts/qcom/Makefile                  |   1 +
> > > > > > >>  .../dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts     | 792 +++++++++++++++++++++
> > > > > > >>  2 files changed, 793 insertions(+)
> > > > > > >>
> > > > > > >> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> > > > > > >> index 0e5c810304fb..734a05e04c4a 100644
> > > > > > >> --- a/arch/arm64/boot/dts/qcom/Makefile
> > > > > > >> +++ b/arch/arm64/boot/dts/qcom/Makefile
> > > > > > >> @@ -261,6 +261,7 @@ dtb-$(CONFIG_ARCH_QCOM)        += sm8650-hdk-display-card.dtb
> > > > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += sm8650-hdk.dtb
> > > > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += sm8650-mtp.dtb
> > > > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += sm8650-qrd.dtb
> > > > > > >> +dtb-$(CONFIG_ARCH_QCOM)   += x1e78100-lenovo-thinkpad-t14s.dtb
> > > > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += x1e80100-asus-vivobook-s15.dtb
> > > > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += x1e80100-crd.dtb
> > > > > > >>  dtb-$(CONFIG_ARCH_QCOM)   += x1e80100-lenovo-yoga-slim7x.dtb
> > > > > > >> diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts
> > > > > > >
> > > > > > > So what happens for SKUs of this model wil have x1e80100 ?
> > > > > > >
> > > > > > > Maybe we should stick to x1e80100 ?
> > > > > >
> > > > > > This one only ships with 78100
> > > > > >
> > > > >
> > > > > Sure, but then in upstream we only have 80100. Plus, it is included in
> > > > > this file as well.
> > > > >
> > > > > I don't know what's the right thing to do here. But I think it keeps
> > > > > things more simple if we keep everything under the x1e80100 umbrella.
> > > >
> > > > plus sticking to x1e80100 will avoid angering tab completion :-P
> > >
> > > This is an old argument, with no clear answer. For some devices we
> > > choose to use correct SoC name (sda660-inforce-ifc6560). For other we
> > > didn't (sdm845-db845c, which really is SDA845). However for most of the
> > > devices the goal is to be accurate (think about all the qcs vs qcm
> > > stories). So my 2c. would go to x1e78100.
> > >
> >
> > I agree, x1e78100 follows the naming scheme we have agreed upon - for
> > better or worse.
>
> So should the device trees for the Asus Vivobook S15 and the Lenovo
> Yoga Slim 7x be renamed then?  Since those also (only) ship with
> X1E-78-100 variants of the SoC.
>
> There is supposed to be a variant of the Vivobook with the X1P-64-100
> (I haven't seen it actually for sale yet).  Since that one has only 10
> CPU cores, should that one gets its own device tree?  That may not be
> possible.  I have a strong suspicion that all the variants are just
> binned versions of the same SoC, where the X1P just has two of the
> cores disabled.  If Qualcomm, like Apple, attempts to increase the
> yield by binning SoCs with broken or badly performing cores as X1P it
> might be a lottery which of the 12 cores get disabled.
>
> And for the vendors that do offer models with different X1E variants,
> are there going to multiple device trees, one for each variant?
>
> I'm asking because on OpenBSD we load the device trees in our
> bootloader and map SMBIOS vendor and product names to a device tree
> name.  So a consistent naming scheme for the device trees is
> desirable.

multi-sku laptops are going to make this a mess..  We really should
just reconsider.. or maybe sidestep the issue and call them all
"x1-crd.dts", "x1-lenovo-yoga-7x.dts", etc

BR,
-R

> Thanks,
>
> Mark
>
> > Regards,
> > Bjorn
> >
> > > --
> > > With best wishes
> > > Dmitry
> >
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
index 0e5c810304fb..734a05e04c4a 100644
--- a/arch/arm64/boot/dts/qcom/Makefile
+++ b/arch/arm64/boot/dts/qcom/Makefile
@@ -261,6 +261,7 @@  dtb-$(CONFIG_ARCH_QCOM)	+= sm8650-hdk-display-card.dtb
 dtb-$(CONFIG_ARCH_QCOM)	+= sm8650-hdk.dtb
 dtb-$(CONFIG_ARCH_QCOM)	+= sm8650-mtp.dtb
 dtb-$(CONFIG_ARCH_QCOM)	+= sm8650-qrd.dtb
+dtb-$(CONFIG_ARCH_QCOM)	+= x1e78100-lenovo-thinkpad-t14s.dtb
 dtb-$(CONFIG_ARCH_QCOM)	+= x1e80100-asus-vivobook-s15.dtb
 dtb-$(CONFIG_ARCH_QCOM)	+= x1e80100-crd.dtb
 dtb-$(CONFIG_ARCH_QCOM)	+= x1e80100-lenovo-yoga-slim7x.dtb
diff --git a/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts
new file mode 100644
index 000000000000..b12953267505
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/x1e78100-lenovo-thinkpad-t14s.dts
@@ -0,0 +1,792 @@ 
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2024, Linaro Limited
+ */
+
+/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 = "Lenovo ThinkPad T14s Gen 6";
+	compatible = "lenovo,thinkpad-t14s", "qcom,x1e78100", "qcom,x1e80100";
+
+	aliases {
+		serial0 = &uart21;
+	};
+
+	chosen {
+		stdout-path = "serial0:115200n8";
+	};
+
+	gpio-keys {
+		compatible = "gpio-keys";
+
+		pinctrl-0 = <&hall_int_n_default>;
+		pinctrl-names = "default";
+
+		switch-lid {
+			gpios = <&tlmm 92 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";
+		orientation-gpios = <&tlmm 121 GPIO_ACTIVE_HIGH>,
+				    <&tlmm 123 GPIO_ACTIVE_HIGH>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		/* Display-adjacent 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 = <&usb_1_ss0_qmpphy_out>;
+					};
+				};
+			};
+		};
+
+		/* User-adjacent 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 = <&usb_1_ss1_qmpphy_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-always-on;
+		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";
+	};
+
+	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;
+	};
+};
+
+&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_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_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 {
+		firmware-name = "qcom/x1e80100/LENOVO/21N1/qcdxkmsuc8380.mbn";
+	};
+};
+
+&i2c0 {
+	clock-frequency = <400000>;
+
+	status = "okay";
+
+	/* ELAN06E2 or ELAN06E3 */
+	touchpad@15 {
+		compatible = "hid-over-i2c";
+		reg = <0x15>;
+
+		hid-descr-addr = <0x1>;
+		interrupts-extended = <&tlmm 3 IRQ_TYPE_LEVEL_LOW>;
+
+		pinctrl-0 = <&tpad_default>;
+		pinctrl-names = "default";
+
+		wakeup-source;
+	};
+
+	/* TODO: second-sourced SYNA8022 or SYNA8024 touchpad @ 0x2c */
+
+	/* ELAN06F1 or SYNA06F2 */
+	keyboard@3a {
+		compatible = "hid-over-i2c";
+		reg = <0x3a>;
+
+		hid-descr-addr = <0x1>;
+		interrupts-extended = <&tlmm 67 IRQ_TYPE_LEVEL_LOW>;
+
+		pinctrl-0 = <&kybd_default>;
+		pinctrl-names = "default";
+
+		wakeup-source;
+	};
+};
+
+&i2c8 {
+	clock-frequency = <400000>;
+
+	status = "okay";
+
+	/* ILIT2911 or GTCH1563 */
+	touchscreen@10 {
+		compatible = "hid-over-i2c";
+		reg = <0x10>;
+
+		hid-descr-addr = <0x1>;
+		interrupts-extended = <&tlmm 51 IRQ_TYPE_LEVEL_LOW>;
+
+		pinctrl-0 = <&ts0_default>;
+		pinctrl-names = "default";
+	};
+
+	/* TODO: second-sourced touchscreen @ 0x41 */
+};
+
+&mdss {
+	status = "okay";
+};
+
+&mdss_dp3 {
+	compatible = "qcom,x1e80100-dp";
+	/delete-property/ #sound-dai-cells;
+
+	status = "okay";
+
+	aux-bus {
+		panel {
+			compatible = "edp-panel";
+			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_l3j_0p8>;
+	vdda-pll-supply = <&vreg_l3e_1p2>;
+
+	status = "okay";
+};
+
+&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";
+};
+
+&pmc8380_3_gpios {
+	edp_bl_en: edp-bl-en-state {
+		pins = "gpio4";
+		function = "normal";
+		power-source = <1>;
+		input-disable;
+		output-enable;
+	};
+};
+
+&qupv3_0 {
+	status = "okay";
+};
+
+&qupv3_1 {
+	status = "okay";
+};
+
+&qupv3_2 {
+	status = "okay";
+};
+
+&remoteproc_adsp {
+	firmware-name = "qcom/x1e80100/LENOVO/21N1/qcadsp8380.mbn",
+			"qcom/x1e80100/LENOVO/21N1/adsp_dtbs.elf";
+
+	status = "okay";
+};
+
+&remoteproc_cdsp {
+	firmware-name = "qcom/x1e80100/LENOVO/21N1/qccdsp8380.mbn",
+			"qcom/x1e80100/LENOVO/21N1/cdsp_dtbs.elf";
+
+	status = "okay";
+};
+
+&smb2360_0_eusb2_repeater {
+	vdd18-supply = <&vreg_l3d_1p8>;
+	vdd3-supply = <&vreg_l2b_3p0>;
+};
+
+&smb2360_1_eusb2_repeater {
+	vdd18-supply = <&vreg_l3d_1p8>;
+	vdd3-supply = <&vreg_l14b_3p0>;
+};
+
+&tlmm {
+	gpio-reserved-ranges = <34 2>, /* Unused */
+			       <44 4>, /* SPI (TPM) */
+			       <72 2>, /* Secure EC I2C connection (?) */
+			       <238 1>; /* UFS Reset */
+
+	tpad_default: tpad-default-state {
+		pins = "gpio3";
+		function = "gpio";
+		bias-pull-up;
+	};
+
+	nvme_reg_en: nvme-reg-en-state {
+		pins = "gpio18";
+		function = "gpio";
+		drive-strength = <2>;
+		bias-disable;
+	};
+
+	ts0_default: ts0-default-state {
+		reset-n-pins {
+			pins = "gpio48";
+			function = "gpio";
+			output-high;
+			drive-strength = <16>;
+		};
+
+		int-n-pins {
+			pins = "gpio51";
+			function = "gpio";
+			bias-disable;
+		};
+	};
+
+	kybd_default: kybd-default-state {
+		pins = "gpio67";
+		function = "gpio";
+		bias-disable;
+	};
+
+	edp_reg_en: edp-reg-en-state {
+		pins = "gpio70";
+		function = "gpio";
+		drive-strength = <16>;
+		bias-pull-up;
+	};
+
+	hall_int_n_default: hall-int-n-state {
+		pins = "gpio92";
+		function = "gpio";
+		bias-disable;
+	};
+
+	pcie6a_default: pcie2a-default-state {
+		clkreq-n-pins {
+			pins = "gpio153";
+			function = "pcie6a_clk";
+			drive-strength = <2>;
+			bias-pull-up;
+		};
+
+		perst-n-pins {
+			pins = "gpio152";
+			function = "gpio";
+			drive-strength = <2>;
+			bias-pull-down;
+		};
+
+		wake-n-pins {
+			pins = "gpio154";
+			function = "gpio";
+			drive-strength = <2>;
+			bias-pull-up;
+		};
+	};
+
+	wcd_default: wcd-reset-n-active-state {
+		pins = "gpio191";
+		function = "gpio";
+		drive-strength = <16>;
+		bias-disable;
+		output-low;
+	};
+};
+
+&uart21 {
+	compatible = "qcom,geni-debug-uart";
+
+	status = "okay";
+};
+
+&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_l3e_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 = <&pmic_glink_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_l3e_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 = <&pmic_glink_ss1_ss_in>;
+};