arch/arm64/boot/dts/qcom/Makefile | 1 + .../qcom/x1e80100-tuxedo-elite-14-gen1.dts | 798 ++++++++++++++++++ 2 files changed, 799 insertions(+) create mode 100644
Initial support for TUXEDO Elite 14 Gen1 based on Qualcomm Snapdragon X
Elite SoC (X1E78100).
Working:
* Touchpad
* Keyboard
* eDP (no brightness control yet)
* NVMe
* USB Type-C port
* WiFi (WiFi 7 untested)
* GPU (software rendering)
Not working:
* GPU (WIP: firmware loading but output is jerky)
* USB Type-A (WIP)
* Suspend with substantial energy saving
* Audio, Speakers, Microphones
* Camera
* Fingerprint Reader
Signed-off-by: Georg Gottleuber <ggo@tuxedocomputers.com>
---
arch/arm64/boot/dts/qcom/Makefile | 1 +
.../qcom/x1e80100-tuxedo-elite-14-gen1.dts | 798 ++++++++++++++++++
2 files changed, 799 insertions(+)
create mode 100644
arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
index 140b0b2abfb5..f0a9d677d957 100644
--- a/arch/arm64/boot/dts/qcom/Makefile
+++ b/arch/arm64/boot/dts/qcom/Makefile
@@ -298,3 +298,4 @@ dtb-$(CONFIG_ARCH_QCOM) += x1e80100-lenovo-yoga-slim7x.dtb
dtb-$(CONFIG_ARCH_QCOM) += x1e80100-microsoft-romulus13.dtb
dtb-$(CONFIG_ARCH_QCOM) += x1e80100-microsoft-romulus15.dtb
dtb-$(CONFIG_ARCH_QCOM) += x1e80100-qcp.dtb
+dtb-$(CONFIG_ARCH_QCOM) += x1e80100-tuxedo-elite-14-gen1.dtb
diff --git a/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
new file mode 100644
index 000000000000..86bdec4a2dd8
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
@@ -0,0 +1,798 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2025 TUXEDO Computers GmbH
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
+
+#include "x1e80100.dtsi"
+#include "x1e80100-pmics.dtsi"
+
+/ {
+ model = "TUXEDO Elite 14 Gen1";
+ compatible = "tuxedo,elite14gen1", "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;
+ };
+ };
+
+ pmic-glink {
+ compatible = "qcom,x1e80100-pmic-glink",
+ "qcom,sm8550-pmic-glink",
+ "qcom,pmic-glink";
+ orientation-gpios = <&tlmm 121 GPIO_ACTIVE_HIGH>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ /* 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 = <&usb_1_ss0_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>;
+
+ // EDP_VDD_EN_GPIO54
+ gpio = <&tlmm 54 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>;
+
+ // NVME_REG_EN_GPIO18
+ 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;
+ };
+};
+
+&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_l7b_2p8: ldo7 {
+ regulator-name = "vreg_l7b_2p8";
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <2800000>;
+ 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_l16b_2p8: ldo16 {
+ regulator-name = "vreg_l16b_2p8";
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <2800000>;
+ 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_0p9: ldo3 {
+ regulator-name = "vreg_l3c_0p9";
+ regulator-min-microvolt = <920000>;
+ regulator-max-microvolt = <920000>;
+ 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_0p9: ldo1 {
+ regulator-name = "vreg_l1j_0p9";
+ 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/a740_zap.mbn";
+ };
+};
+
+&i2c0 {
+ clock-frequency = <400000>;
+
+ status = "okay";
+
+ touchpad@2c {
+ compatible = "hid-over-i2c";
+ reg = <0x2c>;
+
+ hid-descr-addr = <0x20>;
+ interrupts-extended = <&tlmm 3 IRQ_TYPE_LEVEL_LOW>;
+
+ pinctrl-0 = <&tpad_default>;
+ pinctrl-names = "default";
+
+ wakeup-source;
+ };
+
+ 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;
+ };
+};
+
+&i2c5 {
+ clock-frequency = <400000>;
+
+ status = "okay";
+
+ eusb3_repeater: redriver@47 {
+ compatible = "nxp,ptn3222";
+ reg = <0x47>;
+ #phy-cells = <0>;
+
+ vdd1v8-supply = <&vreg_l4b_1p8>;
+ vdd3v3-supply = <&vreg_l13b_3p0>;
+
+ reset-gpios = <&tlmm 124 GPIO_ACTIVE_LOW>;
+
+ pinctrl-0 = <&eusb3_reset_n>;
+ pinctrl-names = "default";
+ };
+
+ eusb5_repeater: redriver@43 {
+ compatible = "nxp,ptn3222";
+ reg = <0x43>;
+ #phy-cells = <0>;
+
+ vdd1v8-supply = <&vreg_l4b_1p8>;
+ vdd3v3-supply = <&vreg_l13b_3p0>;
+
+ reset-gpios = <&tlmm 184 GPIO_ACTIVE_LOW>;
+
+ pinctrl-0 = <&eusb6_reset_n>;
+ pinctrl-names = "default";
+ };
+
+ eusb6_repeater: redriver@4f {
+ compatible = "nxp,ptn3222";
+ reg = <0x4f>;
+ #phy-cells = <0>;
+
+ vdd1v8-supply = <&vreg_l4b_1p8>;
+ vdd3v3-supply = <&vreg_l13b_3p0>;
+
+ reset-gpios = <&tlmm 111 GPIO_ACTIVE_LOW>;
+
+ pinctrl-0 = <&eusb6_reset_n>;
+ pinctrl-names = "default";
+ };
+
+};
+
+&mdss {
+ status = "okay";
+};
+
+&mdss_dp3 {
+ compatible = "qcom,x1e80100-dp";
+ /delete-property/ #sound-dai-cells;
+
+ status = "okay";
+
+ aux-bus {
+ panel {
+ compatible = "edp-panel";
+ power-supply = <&vreg_edp_3p3>;
+
+ 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";
+};
+
+&qupv3_0 {
+ status = "okay";
+};
+
+&qupv3_1 {
+ status = "okay";
+};
+
+&qupv3_2 {
+ status = "okay";
+};
+
+&remoteproc_adsp {
+ firmware-name = "qcom/x1e80100/adsp.mbn",
+ "qcom/x1e80100/adsp_dtb.mbn";
+
+ status = "okay";
+};
+
+&remoteproc_cdsp {
+ firmware-name = "qcom/x1e80100/cdsp.mbn",
+ "qcom/x1e80100/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";
+};
+
+&tlmm {
+ gpio-reserved-ranges = <28 4>, /* Unused */
+ <44 4>, /* SPI (TPM) */
+ <238 1>; /* UFS Reset */
+
+ kybd_default: kybd-default-state {
+ pins = "gpio67";
+ function = "gpio";
+ bias-disable;
+ };
+
+ edp_reg_en: edp-reg-en-state {
+ pins = "gpio54";
+ function = "gpio";
+ drive-strength = <16>;
+ bias-pull-up;
+ };
+
+ nvme_reg_en: nvme-reg-en-state {
+ pins = "gpio18";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ };
+
+ hall_int_n_default: hall-int-n-state {
+ pins = "gpio92";
+ function = "gpio";
+ bias-disable;
+ };
+
+ eusb3_reset_n: eusb3-reset-n-state {
+ pins = "gpio124";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ output-low;
+ };
+
+ eusb6_reset_n: eusb6-reset-n-state {
+ pins = "gpio111";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ output-low;
+ };
+
+ eusb5_reset_n: eusb5-reset-n-state {
+ pins = "gpio184";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ output-low;
+ };
+
+ pcie4_default: pcie4-default-state {
+ perst-n-pins {
+ pins = "gpio146";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-down;
+ };
+
+ clkreq-n-pins {
+ pins = "gpio147";
+ function = "pcie4_clk";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+
+ 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-pull-down;
+ };
+
+ 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;
+ };
+ };
+
+ tpad_default: tpad-default-state {
+ pins = "gpio3";
+ function = "gpio";
+ bias-disable;
+ };
+
+ wcd_default: wcd-reset-n-active-state {
+ pins = "gpio191";
+ function = "gpio";
+ drive-strength = <16>;
+ bias-disable;
+ output-low;
+ };
+};
+
+&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_0p9>;
+
+ 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>;
+};
+
--
2.47.2
On 6.03.2025 1:25 PM, Georg Gottleuber wrote:
> Initial support for TUXEDO Elite 14 Gen1 based on Qualcomm Snapdragon X
> Elite SoC (X1E78100).
>
> Working:
> * Touchpad
> * Keyboard
> * eDP (no brightness control yet)
in case your panel as a PWM backlight, you will need to set the PWM
output pin function explicitly, see x1e80100-microsoft-romulus.dtsi
> * NVMe
> * USB Type-C port
> * WiFi (WiFi 7 untested)
> * GPU (software rendering)
>
> Not working:
> * GPU (WIP: firmware loading but output is jerky)
Please tell us more
> * USB Type-A (WIP)
> * Suspend with substantial energy saving
> * Audio, Speakers, Microphones
> * Camera
> * Fingerprint Reader
If it's connected to the multiport controller, you should be able to
just enable it, like on the T14s, similarly to the Type-A port
[...]
> Signed-off-by: Georg Gottleuber <ggo@tuxedocomputers.com>
> ---
> arch/arm64/boot/dts/qcom/Makefile | 1 +
> .../qcom/x1e80100-tuxedo-elite-14-gen1.dts | 798 ++++++++++++++++++
> 2 files changed, 799 insertions(+)
> create mode 100644
> arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
>
> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> index 140b0b2abfb5..f0a9d677d957 100644
> --- a/arch/arm64/boot/dts/qcom/Makefile
> +++ b/arch/arm64/boot/dts/qcom/Makefile
> @@ -298,3 +298,4 @@ dtb-$(CONFIG_ARCH_QCOM) += x1e80100-lenovo-yoga-slim7x.dtb
> dtb-$(CONFIG_ARCH_QCOM) += x1e80100-microsoft-romulus13.dtb
> dtb-$(CONFIG_ARCH_QCOM) += x1e80100-microsoft-romulus15.dtb
> dtb-$(CONFIG_ARCH_QCOM) += x1e80100-qcp.dtb
> +dtb-$(CONFIG_ARCH_QCOM) += x1e80100-tuxedo-elite-14-gen1.dtb
> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
> new file mode 100644
> index 000000000000..86bdec4a2dd8
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
> @@ -0,0 +1,798 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> +/*
> + * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
> + * Copyright (c) 2025 TUXEDO Computers GmbH
> + */
> +
> +/dts-v1/;
> +
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
> +
> +#include "x1e80100.dtsi"
> +#include "x1e80100-pmics.dtsi"
> +
> +/ {
> + model = "TUXEDO Elite 14 Gen1";
Please use 8-wide tabs instead of spaces
> + compatible = "tuxedo,elite14gen1", "qcom,x1e80100";
You'll need to define a new vendor in:
Documentation/devicetree/bindings/vendor-prefixes.yaml
[...]
> + vreg_edp_3p3: regulator-edp-3p3 {
> + compatible = "regulator-fixed";
> +
> + regulator-name = "VREG_EDP_3P3";
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> +
> + // EDP_VDD_EN_GPIO54
C-style (/* foo */) comments are preferred, but these ones can be
removed, as they repeat what the code says
[...]
> +&gpu {
> + status = "okay";
> +
> + zap-shader {
> + firmware-name = "qcom/a740_zap.mbn";
Are the laptop's OEM key/security fuses not blown?
Konrad
On Thu, Mar 06, 2025 at 01:50:56PM +0100, Konrad Dybcio wrote:
> On 6.03.2025 1:25 PM, Georg Gottleuber wrote:
> > Initial support for TUXEDO Elite 14 Gen1 based on Qualcomm Snapdragon X
> > Elite SoC (X1E78100).
> >
> > Working:
> > * Touchpad
> > * Keyboard
> > * eDP (no brightness control yet)
>
> in case your panel as a PWM backlight, you will need to set the PWM
> output pin function explicitly, see x1e80100-microsoft-romulus.dtsi
>
> > * NVMe
> > * USB Type-C port
> > * WiFi (WiFi 7 untested)
> > * GPU (software rendering)
> >
> > Not working:
> > * GPU (WIP: firmware loading but output is jerky)
>
> Please tell us more
>
> > * USB Type-A (WIP)
> > * Suspend with substantial energy saving
> > * Audio, Speakers, Microphones
> > * Camera
> > * Fingerprint Reader
>
> If it's connected to the multiport controller, you should be able to
> just enable it, like on the T14s, similarly to the Type-A port
>
> [...]
>
> > Signed-off-by: Georg Gottleuber <ggo@tuxedocomputers.com>
> > ---
> > arch/arm64/boot/dts/qcom/Makefile | 1 +
> > .../qcom/x1e80100-tuxedo-elite-14-gen1.dts | 798 ++++++++++++++++++
> > 2 files changed, 799 insertions(+)
> > create mode 100644
> > arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
> >
> > diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> > index 140b0b2abfb5..f0a9d677d957 100644
> > --- a/arch/arm64/boot/dts/qcom/Makefile
> > +++ b/arch/arm64/boot/dts/qcom/Makefile
> > @@ -298,3 +298,4 @@ dtb-$(CONFIG_ARCH_QCOM) += x1e80100-lenovo-yoga-slim7x.dtb
> > dtb-$(CONFIG_ARCH_QCOM) += x1e80100-microsoft-romulus13.dtb
> > dtb-$(CONFIG_ARCH_QCOM) += x1e80100-microsoft-romulus15.dtb
> > dtb-$(CONFIG_ARCH_QCOM) += x1e80100-qcp.dtb
> > +dtb-$(CONFIG_ARCH_QCOM) += x1e80100-tuxedo-elite-14-gen1.dtb
> > diff --git a/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
> > new file mode 100644
> > index 000000000000..86bdec4a2dd8
> > --- /dev/null
> > +++ b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
>
> > +&gpu {
> > + status = "okay";
> > +
> > + zap-shader {
> > + firmware-name = "qcom/a740_zap.mbn";
>
> Are the laptop's OEM key/security fuses not blown?
Can this laptop use "qcom/x1e80100/gen70500_zap.mbn" which is already a
part of linux-firmware?
--
With best wishes
Dmitry
Am 07.03.25 um 07:45 schrieb Dmitry Baryshkov:
[...]
>>> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
>>> new file mode 100644
>>> index 000000000000..86bdec4a2dd8
>>> --- /dev/null
>>> +++ b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
>>
>>> +&gpu {
>>> + status = "okay";
>>> +
>>> + zap-shader {
>>> + firmware-name = "qcom/a740_zap.mbn";
>>
>> Are the laptop's OEM key/security fuses not blown?
>
> Can this laptop use "qcom/x1e80100/gen70500_zap.mbn" which is already a
> part of linux-firmware?
It seems so.
Because there were no logs about loading zap.mbn, I activated dyndbg
(dyndbg="file drivers/base/firmware_loader/main.c +fmp"). See attachment
for dmesg output. But GUI freezes after sddm login.
Best regards,
Georg
On Tue, Mar 18, 2025 at 04:24:27PM +0100, Georg Gottleuber wrote:
> Am 07.03.25 um 07:45 schrieb Dmitry Baryshkov:
> [...]
> >>> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
> >>> new file mode 100644
> >>> index 000000000000..86bdec4a2dd8
> >>> --- /dev/null
> >>> +++ b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
> >>
> >>> +&gpu {
> >>> + status = "okay";
> >>> +
> >>> + zap-shader {
> >>> + firmware-name = "qcom/a740_zap.mbn";
> >>
> >> Are the laptop's OEM key/security fuses not blown?
> >
> > Can this laptop use "qcom/x1e80100/gen70500_zap.mbn" which is already a
> > part of linux-firmware?
>
> It seems so.
>
> Because there were no logs about loading zap.mbn, I activated dyndbg
> (dyndbg="file drivers/base/firmware_loader/main.c +fmp"). See attachment
> for dmesg output. But GUI freezes after sddm login.
Does it happen only with this ZAP or does it happen with the ZAP from
WIndows too? Can you run some simple GPU workload, like kmscube from the
console?
>
> Best regards,
> Georg
--
With best wishes
Dmitry
Hi Dmitry,
On Tue, Mar 18, 2025 at 11:36:32PM +0200, Dmitry Baryshkov wrote:
> On Tue, Mar 18, 2025 at 04:24:27PM +0100, Georg Gottleuber wrote:
> > Am 07.03.25 um 07:45 schrieb Dmitry Baryshkov:
> > [...]
> > >>> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
> > >>> new file mode 100644
> > >>> index 000000000000..86bdec4a2dd8
> > >>> --- /dev/null
> > >>> +++ b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
> > >>
> > >>> +&gpu {
> > >>> + status = "okay";
> > >>> +
> > >>> + zap-shader {
> > >>> + firmware-name = "qcom/a740_zap.mbn";
> > >>
> > >> Are the laptop's OEM key/security fuses not blown?
> > >
> > > Can this laptop use "qcom/x1e80100/gen70500_zap.mbn" which is already a
> > > part of linux-firmware?
> >
> > It seems so.
> >
> > Because there were no logs about loading zap.mbn, I activated dyndbg
> > (dyndbg="file drivers/base/firmware_loader/main.c +fmp"). See attachment
> > for dmesg output. But GUI freezes after sddm login.
>
> Does it happen only with this ZAP or does it happen with the ZAP from
> WIndows too? Can you run some simple GPU workload, like kmscube from the
> console?
>
It seems to work fine changing the `firmware-name` property to
"qcom/x1e80100/gen70500_zap.mbn" and updating to latest mesa on Debian
Sid (25.0.1).
Also tried with linux-firmware binary blob.
--
Best Regards,
Ettore
On Fri, 21 Mar 2025 at 17:49, Ettore Chimenti
<ettore.chimenti@linaro.org> wrote:
>
> Hi Dmitry,
>
> On Tue, Mar 18, 2025 at 11:36:32PM +0200, Dmitry Baryshkov wrote:
> > On Tue, Mar 18, 2025 at 04:24:27PM +0100, Georg Gottleuber wrote:
> > > Am 07.03.25 um 07:45 schrieb Dmitry Baryshkov:
> > > [...]
> > > >>> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
> > > >>> new file mode 100644
> > > >>> index 000000000000..86bdec4a2dd8
> > > >>> --- /dev/null
> > > >>> +++ b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
> > > >>
> > > >>> +&gpu {
> > > >>> + status = "okay";
> > > >>> +
> > > >>> + zap-shader {
> > > >>> + firmware-name = "qcom/a740_zap.mbn";
> > > >>
> > > >> Are the laptop's OEM key/security fuses not blown?
> > > >
> > > > Can this laptop use "qcom/x1e80100/gen70500_zap.mbn" which is already a
> > > > part of linux-firmware?
> > >
> > > It seems so.
> > >
> > > Because there were no logs about loading zap.mbn, I activated dyndbg
> > > (dyndbg="file drivers/base/firmware_loader/main.c +fmp"). See attachment
> > > for dmesg output. But GUI freezes after sddm login.
> >
> > Does it happen only with this ZAP or does it happen with the ZAP from
> > WIndows too? Can you run some simple GPU workload, like kmscube from the
> > console?
> >
>
> It seems to work fine changing the `firmware-name` property to
> "qcom/x1e80100/gen70500_zap.mbn" and updating to latest mesa on Debian
> Sid (25.0.1).
>
> Also tried with linux-firmware binary blob.
Then please post an updated patch, using firmware & ZAP from linux-firmware.
--
With best wishes
Dmitry
Am 21.03.25 um 16:51 schrieb Dmitry Baryshkov:
> On Fri, 21 Mar 2025 at 17:49, Ettore Chimenti
> <ettore.chimenti@linaro.org> wrote:
>>
>> Hi Dmitry,
>>
>> On Tue, Mar 18, 2025 at 11:36:32PM +0200, Dmitry Baryshkov wrote:
>>> On Tue, Mar 18, 2025 at 04:24:27PM +0100, Georg Gottleuber wrote:
>>>> Am 07.03.25 um 07:45 schrieb Dmitry Baryshkov:
>>>> [...]
>>>>>>> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
>>>>>>> new file mode 100644
>>>>>>> index 000000000000..86bdec4a2dd8
>>>>>>> --- /dev/null
>>>>>>> +++ b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
>>>>>>
>>>>>>> +&gpu {
>>>>>>> + status = "okay";
>>>>>>> +
>>>>>>> + zap-shader {
>>>>>>> + firmware-name = "qcom/a740_zap.mbn";
>>>>>>
>>>>>> Are the laptop's OEM key/security fuses not blown?
>>>>>
>>>>> Can this laptop use "qcom/x1e80100/gen70500_zap.mbn" which is already a
>>>>> part of linux-firmware?
>>>>
>>>> It seems so.
>>>>
>>>> Because there were no logs about loading zap.mbn, I activated dyndbg
>>>> (dyndbg="file drivers/base/firmware_loader/main.c +fmp"). See attachment
>>>> for dmesg output. But GUI freezes after sddm login.
>>>
>>> Does it happen only with this ZAP or does it happen with the ZAP from
>>> WIndows too? Can you run some simple GPU workload, like kmscube from the
>>> console?
>>>
>>
>> It seems to work fine changing the `firmware-name` property to
>> "qcom/x1e80100/gen70500_zap.mbn" and updating to latest mesa on Debian
>> Sid (25.0.1).
>>
>> Also tried with linux-firmware binary blob.
>
> Then please post an updated patch, using firmware & ZAP from linux-firmware.
I'm sorry, all our devices are engineering examples (including Ettores).
The mass production devices will be fused.
On Fri, Mar 28, 2025 at 12:34:43PM +0100, Georg Gottleuber wrote:
>
>
> Am 21.03.25 um 16:51 schrieb Dmitry Baryshkov:
> > On Fri, 21 Mar 2025 at 17:49, Ettore Chimenti
> > <ettore.chimenti@linaro.org> wrote:
> >>
> >> Hi Dmitry,
> >>
> >> On Tue, Mar 18, 2025 at 11:36:32PM +0200, Dmitry Baryshkov wrote:
> >>> On Tue, Mar 18, 2025 at 04:24:27PM +0100, Georg Gottleuber wrote:
> >>>> Am 07.03.25 um 07:45 schrieb Dmitry Baryshkov:
> >>>> [...]
> >>>>>>> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
> >>>>>>> new file mode 100644
> >>>>>>> index 000000000000..86bdec4a2dd8
> >>>>>>> --- /dev/null
> >>>>>>> +++ b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
> >>>>>>
> >>>>>>> +&gpu {
> >>>>>>> + status = "okay";
> >>>>>>> +
> >>>>>>> + zap-shader {
> >>>>>>> + firmware-name = "qcom/a740_zap.mbn";
> >>>>>>
> >>>>>> Are the laptop's OEM key/security fuses not blown?
> >>>>>
> >>>>> Can this laptop use "qcom/x1e80100/gen70500_zap.mbn" which is already a
> >>>>> part of linux-firmware?
> >>>>
> >>>> It seems so.
> >>>>
> >>>> Because there were no logs about loading zap.mbn, I activated dyndbg
> >>>> (dyndbg="file drivers/base/firmware_loader/main.c +fmp"). See attachment
> >>>> for dmesg output. But GUI freezes after sddm login.
> >>>
> >>> Does it happen only with this ZAP or does it happen with the ZAP from
> >>> WIndows too? Can you run some simple GPU workload, like kmscube from the
> >>> console?
> >>>
> >>
> >> It seems to work fine changing the `firmware-name` property to
> >> "qcom/x1e80100/gen70500_zap.mbn" and updating to latest mesa on Debian
> >> Sid (25.0.1).
> >>
> >> Also tried with linux-firmware binary blob.
> >
> > Then please post an updated patch, using firmware & ZAP from linux-firmware.
>
> I'm sorry, all our devices are engineering examples (including Ettores).
> The mass production devices will be fused.
Then all the firmware names should be adjusted accordingly. Please see
the names used by Lenovo T14s as an example.
Also we'd really appreciate the firmware being contributed to
linux-firmware repo (again, see Lenovo example).
--
With best wishes
Dmitry
On Tue, Mar 18, 2025 at 8:28 AM Georg Gottleuber
<g.gottleuber@tuxedocomputers.com> wrote:
>
> Am 07.03.25 um 07:45 schrieb Dmitry Baryshkov:
> [...]
> >>> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
> >>> new file mode 100644
> >>> index 000000000000..86bdec4a2dd8
> >>> --- /dev/null
> >>> +++ b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
> >>
> >>> +&gpu {
> >>> + status = "okay";
> >>> +
> >>> + zap-shader {
> >>> + firmware-name = "qcom/a740_zap.mbn";
> >>
> >> Are the laptop's OEM key/security fuses not blown?
> >
> > Can this laptop use "qcom/x1e80100/gen70500_zap.mbn" which is already a
> > part of linux-firmware?
>
> It seems so.
>
> Because there were no logs about loading zap.mbn, I activated dyndbg
> (dyndbg="file drivers/base/firmware_loader/main.c +fmp"). See attachment
> for dmesg output. But GUI freezes after sddm login.
Hmm, if zap were incorrectly signed, the error would come after
firmware_loader. You should see something with "Unable to authorize
the image" (`dmesg | grep drm` would show it).
As Konrad mentioned, make sure you have mesa v24.3 or later, v24.2 is
missing some needed fixes
BR,
-R
On 3/18/25 4:24 PM, Georg Gottleuber wrote:
> Am 07.03.25 um 07:45 schrieb Dmitry Baryshkov:
> [...]
>>>> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
>>>> new file mode 100644
>>>> index 000000000000..86bdec4a2dd8
>>>> --- /dev/null
>>>> +++ b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
>>>
>>>> +&gpu {
>>>> + status = "okay";
>>>> +
>>>> + zap-shader {
>>>> + firmware-name = "qcom/a740_zap.mbn";
>>>
>>> Are the laptop's OEM key/security fuses not blown?
>>
>> Can this laptop use "qcom/x1e80100/gen70500_zap.mbn" which is already a
>> part of linux-firmware?
>
> It seems so.
>
> Because there were no logs about loading zap.mbn, I activated dyndbg
> (dyndbg="file drivers/base/firmware_loader/main.c +fmp"). See attachment
> for dmesg output. But GUI freezes after sddm login.
Okay, have you updated mesa to something recent? Try the current state of
main branch
Konrad
Am 06.03.25 um 13:50 schrieb Konrad Dybcio:
> On 6.03.2025 1:25 PM, Georg Gottleuber wrote:
>> Initial support for TUXEDO Elite 14 Gen1 based on Qualcomm Snapdragon X
>> Elite SoC (X1E78100).
>>
>> Working:
>> * Touchpad
>> * Keyboard
>> * eDP (no brightness control yet)
>
> in case your panel as a PWM backlight, you will need to set the PWM
> output pin function explicitly, see x1e80100-microsoft-romulus.dtsi
Thank you, will check this.
>> * NVMe
>> * USB Type-C port
>> * WiFi (WiFi 7 untested)
>> * GPU (software rendering)
>>
>> Not working:
>> * GPU (WIP: firmware loading but output is jerky)
>
> Please tell us more
Oh, this is already an older thing: with kernel 6.10 loading
gen70500_gmu.bin and gen70500_sqe.fw leading to partly slow and
stuttering video output. Sometimes it rendered black edges / borders to
KDE menus. Surely I did something wrong.
I have just tried to reproduce the same setup, but I couldn't get it to
work just now. If you are interested, I can try it again with a
new/current kernel. (which is preferred? linux? linux-next?)
>> * USB Type-A (WIP)
>> * Suspend with substantial energy saving
>> * Audio, Speakers, Microphones
>> * Camera
>> * Fingerprint Reader
>
> If it's connected to the multiport controller, you should be able to
> just enable it, like on the T14s, similarly to the Type-A port
sounds promising
> [...]
>
>> Signed-off-by: Georg Gottleuber <ggo@tuxedocomputers.com>
>> ---
>> arch/arm64/boot/dts/qcom/Makefile | 1 +
>> .../qcom/x1e80100-tuxedo-elite-14-gen1.dts | 798 ++++++++++++++++++
>> 2 files changed, 799 insertions(+)
>> create mode 100644
>> arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
>>
>> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
>> index 140b0b2abfb5..f0a9d677d957 100644
>> --- a/arch/arm64/boot/dts/qcom/Makefile
>> +++ b/arch/arm64/boot/dts/qcom/Makefile
>> @@ -298,3 +298,4 @@ dtb-$(CONFIG_ARCH_QCOM) += x1e80100-lenovo-yoga-slim7x.dtb
>> dtb-$(CONFIG_ARCH_QCOM) += x1e80100-microsoft-romulus13.dtb
>> dtb-$(CONFIG_ARCH_QCOM) += x1e80100-microsoft-romulus15.dtb
>> dtb-$(CONFIG_ARCH_QCOM) += x1e80100-qcp.dtb
>> +dtb-$(CONFIG_ARCH_QCOM) += x1e80100-tuxedo-elite-14-gen1.dtb
>> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
>> new file mode 100644
>> index 000000000000..86bdec4a2dd8
>> --- /dev/null
>> +++ b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
>> @@ -0,0 +1,798 @@
>> +// SPDX-License-Identifier: BSD-3-Clause
>> +/*
>> + * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
>> + * Copyright (c) 2025 TUXEDO Computers GmbH
>> + */
>> +
>> +/dts-v1/;
>> +
>> +#include <dt-bindings/gpio/gpio.h>
>> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
>> +
>> +#include "x1e80100.dtsi"
>> +#include "x1e80100-pmics.dtsi"
>> +
>> +/ {
>> + model = "TUXEDO Elite 14 Gen1";
>
> Please use 8-wide tabs instead of spaces
Sorry.
>> + compatible = "tuxedo,elite14gen1", "qcom,x1e80100";
>
> You'll need to define a new vendor in:
>
> Documentation/devicetree/bindings/vendor-prefixes.yaml
>
> [...]
>
>> + vreg_edp_3p3: regulator-edp-3p3 {
>> + compatible = "regulator-fixed";
>> +
>> + regulator-name = "VREG_EDP_3P3";
>> + regulator-min-microvolt = <3300000>;
>> + regulator-max-microvolt = <3300000>;
>> +
>> + // EDP_VDD_EN_GPIO54
>
> C-style (/* foo */) comments are preferred, but these ones can be
> removed, as they repeat what the code says
I have overlooked this. Sorry.
> [...]
>
>> +&gpu {
>> + status = "okay";
>> +
>> + zap-shader {
>> + firmware-name = "qcom/a740_zap.mbn";
>
> Are the laptop's OEM key/security fuses not blown?
I'm not sure. How can I verify this?
Regards,
Georg
On 6.03.2025 4:22 PM, Georg Gottleuber wrote:
>
>
> Am 06.03.25 um 13:50 schrieb Konrad Dybcio:
>> On 6.03.2025 1:25 PM, Georg Gottleuber wrote:
>>> Initial support for TUXEDO Elite 14 Gen1 based on Qualcomm Snapdragon X
>>> Elite SoC (X1E78100).
>>>
>>> Working:
>>> * Touchpad
>>> * Keyboard
>>> * eDP (no brightness control yet)
>>
>> in case your panel as a PWM backlight, you will need to set the PWM
>> output pin function explicitly, see x1e80100-microsoft-romulus.dtsi
>
> Thank you, will check this.
>
>>> * NVMe
>>> * USB Type-C port
>>> * WiFi (WiFi 7 untested)
>>> * GPU (software rendering)
>>>
>>> Not working:
>>> * GPU (WIP: firmware loading but output is jerky)
>>
>> Please tell us more
>
> Oh, this is already an older thing: with kernel 6.10 loading
> gen70500_gmu.bin and gen70500_sqe.fw leading to partly slow and
> stuttering video output. Sometimes it rendered black edges / borders to
> KDE menus. Surely I did something wrong.
>
> I have just tried to reproduce the same setup, but I couldn't get it to
> work just now. If you are interested, I can try it again with a
> new/current kernel. (which is preferred? linux? linux-next?)
linux-next/master is good
[...]
>>> +&gpu {
>>> + status = "okay";
>>> +
>>> + zap-shader {
>>> + firmware-name = "qcom/a740_zap.mbn";
>>
>> Are the laptop's OEM key/security fuses not blown?
>
> I'm not sure. How can I verify this?
If you took the ZAP file from linux-firmware and it loaded, they are
not blown.. meaning secure boot (not to be confused with UEFI secure
boot) is not there and anyone can replace the entire secure firmware
stack with what they please
Konrad
On 06. 03. 25 19:15, Konrad Dybcio wrote:
> On 6.03.2025 4:22 PM, Georg Gottleuber wrote:
>>
>> Am 06.03.25 um 13:50 schrieb Konrad Dybcio:
>>> On 6.03.2025 1:25 PM, Georg Gottleuber wrote:
>>>> Initial support for TUXEDO Elite 14 Gen1 based on Qualcomm Snapdragon X
>>>> Elite SoC (X1E78100).
>>>>
>>>> Working:
>>>> * Touchpad
>>>> * Keyboard
>>>> * eDP (no brightness control yet)
>>> in case your panel as a PWM backlight, you will need to set the PWM
>>> output pin function explicitly, see x1e80100-microsoft-romulus.dtsi
>> Thank you, will check this.
>>
>>>> * NVMe
>>>> * USB Type-C port
>>>> * WiFi (WiFi 7 untested)
>>>> * GPU (software rendering)
>>>>
>>>> Not working:
>>>> * GPU (WIP: firmware loading but output is jerky)
>>> Please tell us more
>> Oh, this is already an older thing: with kernel 6.10 loading
>> gen70500_gmu.bin and gen70500_sqe.fw leading to partly slow and
>> stuttering video output. Sometimes it rendered black edges / borders to
>> KDE menus. Surely I did something wrong.
>>
>> I have just tried to reproduce the same setup, but I couldn't get it to
>> work just now. If you are interested, I can try it again with a
>> new/current kernel. (which is preferred? linux? linux-next?)
> linux-next/master is good
>
> [...]
>
>>>> +&gpu {
>>>> + status = "okay";
>>>> +
>>>> + zap-shader {
>>>> + firmware-name = "qcom/a740_zap.mbn";
>>> Are the laptop's OEM key/security fuses not blown?
>> I'm not sure. How can I verify this?
> If you took the ZAP file from linux-firmware and it loaded, they are
> not blown.. meaning secure boot (not to be confused with UEFI secure
> boot) is not there and anyone can replace the entire secure firmware
> stack with what they please
>
> Konrad
>
Which to be clear is probably something Tuxedo would want, because it's by far the simplest way to ensure that the person who buys the device can do that. Even without the SPI flash being write protected and requiring physical access to unprotect (which I believe is what google went with for chromebooks), afaik Linux can't access the spi flash in the default configuration so it would still not be particularly feasible for someone without physical access to abuse this.
Although I'm a bit confused here, because to my knowledge being able to replace the "entire secure firmware stack" before it even has a chance to run (which is what anyone wanting to replace it would presumably intend to do) is considered a privilege escalation CVE by qualcomm and is not something you are supposed to be able to do without their blessing. I suppose they may be a bit more lax about allowing the OEM (and therefore the user if the OEM graciously doesn't lock the device down) to skip XBL_SEC (or whatever it's called now) with TME now being the first core to boot, which would certainly be nice even if it's literally "you can have it as long as it is no longer equivalent to full control over your hw, which is what you wanted in the first place"
On 06/03/2025 13:25, Georg Gottleuber wrote:
> Initial support for TUXEDO Elite 14 Gen1 based on Qualcomm Snapdragon X
> Elite SoC (X1E78100).
>
> Working:
> * Touchpad
> * Keyboard
> * eDP (no brightness control yet)
> * NVMe
> * USB Type-C port
> * WiFi (WiFi 7 untested)
> * GPU (software rendering)
>
> Not working:
> * GPU (WIP: firmware loading but output is jerky)
> * USB Type-A (WIP)
> * Suspend with substantial energy saving
> * Audio, Speakers, Microphones
> * Camera
> * Fingerprint Reader
>
> Signed-off-by: Georg Gottleuber <ggo@tuxedocomputers.com>
> ---
> arch/arm64/boot/dts/qcom/Makefile | 1 +
> .../qcom/x1e80100-tuxedo-elite-14-gen1.dts | 798 ++++++++++++++++++
> 2 files changed, 799 insertions(+)
> create mode 100644
> arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
>
> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> index 140b0b2abfb5..f0a9d677d957 100644
> --- a/arch/arm64/boot/dts/qcom/Makefile
> +++ b/arch/arm64/boot/dts/qcom/Makefile
> @@ -298,3 +298,4 @@ dtb-$(CONFIG_ARCH_QCOM) += x1e80100-lenovo-yoga-slim7x.dtb
> dtb-$(CONFIG_ARCH_QCOM) += x1e80100-microsoft-romulus13.dtb
> dtb-$(CONFIG_ARCH_QCOM) += x1e80100-microsoft-romulus15.dtb
> dtb-$(CONFIG_ARCH_QCOM) += x1e80100-qcp.dtb
> +dtb-$(CONFIG_ARCH_QCOM) += x1e80100-tuxedo-elite-14-gen1.dtb
> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
> new file mode 100644
> index 000000000000..86bdec4a2dd8
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/x1e80100-tuxedo-elite-14-gen1.dts
> @@ -0,0 +1,798 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> +/*
> + * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
> + * Copyright (c) 2025 TUXEDO Computers GmbH
> + */
> +
> +/dts-v1/;
> +
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
> +
> +#include "x1e80100.dtsi"
> +#include "x1e80100-pmics.dtsi"
> +
> +/ {
> + model = "TUXEDO Elite 14 Gen1";
> + compatible = "tuxedo,elite14gen1", "qcom,x1e80100";
Please run scripts/checkpatch.pl and fix reported warnings. After that,
run also `scripts/checkpatch.pl --strict` and (probably) fix more
warnings. Some warnings can be ignored, especially from --strict run,
but the code here looks like it needs a fix. Feel free to get in touch
if the warning is not clear.
It does not look like you tested the DTS against bindings. Please run
`make dtbs_check W=1` (see
Documentation/devicetree/bindings/writing-schema.rst or
https://www.linaro.org/blog/tips-and-tricks-for-validating-devicetree-sources-with-the-devicetree-schema/
for instructions).
Maybe you need to update your dtschema and yamllint. Don't rely on
distro packages for dtschema and be sure you are using the latest
released dtschema.
...
> +
> + eusb3_repeater: redriver@47 {
> + compatible = "nxp,ptn3222";
> + reg = <0x47>;
> + #phy-cells = <0>;
> +
> + vdd1v8-supply = <&vreg_l4b_1p8>;
> + vdd3v3-supply = <&vreg_l13b_3p0>;
> +
> + reset-gpios = <&tlmm 124 GPIO_ACTIVE_LOW>;
> +
> + pinctrl-0 = <&eusb3_reset_n>;
> + pinctrl-names = "default";
No graph? Isn't it needed?
> + };
> +
> + eusb5_repeater: redriver@43 {
> + compatible = "nxp,ptn3222";
> + reg = <0x43>;
> + #phy-cells = <0>;
> +
> + vdd1v8-supply = <&vreg_l4b_1p8>;
> + vdd3v3-supply = <&vreg_l13b_3p0>;
> +
> + reset-gpios = <&tlmm 184 GPIO_ACTIVE_LOW>;
> +
> + pinctrl-0 = <&eusb6_reset_n>;
> + pinctrl-names = "default";
> + };
> +
> + eusb6_repeater: redriver@4f {
> + compatible = "nxp,ptn3222";
> + reg = <0x4f>;
> + #phy-cells = <0>;
> +
> + vdd1v8-supply = <&vreg_l4b_1p8>;
> + vdd3v3-supply = <&vreg_l13b_3p0>;
> +
> + reset-gpios = <&tlmm 111 GPIO_ACTIVE_LOW>;
> +
> + pinctrl-0 = <&eusb6_reset_n>;
> + pinctrl-names = "default";
> + };
> +
Stray blank line
> +};
> +
> +&mdss {
> + status = "okay";
> +};
> +
> +
> +&usb_1_ss0_dwc3_hs {
> + remote-endpoint = <&pmic_glink_ss0_hs_in>;
> +};
> +
> +&usb_1_ss0_qmpphy_out {
> + remote-endpoint = <&pmic_glink_ss0_ss_in>;
> +};
> +
Here as well
Best regards,
Krzysztof
Am 06.03.25 um 13:41 schrieb Krzysztof Kozlowski:
...
>
> Please run scripts/checkpatch.pl and fix reported warnings. After that,
> run also `scripts/checkpatch.pl --strict` and (probably) fix more
> warnings. Some warnings can be ignored, especially from --strict run,
> but the code here looks like it needs a fix. Feel free to get in touch
> if the warning is not clear.
>
> It does not look like you tested the DTS against bindings. Please run
> `make dtbs_check W=1` (see
> Documentation/devicetree/bindings/writing-schema.rst or
> https://www.linaro.org/blog/tips-and-tricks-for-validating-devicetree-sources-with-the-devicetree-schema/
> for instructions).
> Maybe you need to update your dtschema and yamllint. Don't rely on
> distro packages for dtschema and be sure you are using the latest
> released dtschema.
Thank you for the advice and the offer to answer further questions.
Didn't know that dtb_check exists.
> ...
>
>> +
>> + eusb3_repeater: redriver@47 {
>> + compatible = "nxp,ptn3222";
>> + reg = <0x47>;
>> + #phy-cells = <0>;
>> +
>> + vdd1v8-supply = <&vreg_l4b_1p8>;
>> + vdd3v3-supply = <&vreg_l13b_3p0>;
>> +
>> + reset-gpios = <&tlmm 124 GPIO_ACTIVE_LOW>;
>> +
>> + pinctrl-0 = <&eusb3_reset_n>;
>> + pinctrl-names = "default";
>
> No graph? Isn't it needed?
What do you mean by ‘no graph’?
>> + };
>> +
>> + eusb5_repeater: redriver@43 {
>> + compatible = "nxp,ptn3222";
>> + reg = <0x43>;
>> + #phy-cells = <0>;
>> +
>> + vdd1v8-supply = <&vreg_l4b_1p8>;
>> + vdd3v3-supply = <&vreg_l13b_3p0>;
>> +
>> + reset-gpios = <&tlmm 184 GPIO_ACTIVE_LOW>;
>> +
>> + pinctrl-0 = <&eusb6_reset_n>;
>> + pinctrl-names = "default";
>> + };
>> +
>> + eusb6_repeater: redriver@4f {
>> + compatible = "nxp,ptn3222";
>> + reg = <0x4f>;
>> + #phy-cells = <0>;
>> +
>> + vdd1v8-supply = <&vreg_l4b_1p8>;
>> + vdd3v3-supply = <&vreg_l13b_3p0>;
>> +
>> + reset-gpios = <&tlmm 111 GPIO_ACTIVE_LOW>;
>> +
>> + pinctrl-0 = <&eusb6_reset_n>;
>> + pinctrl-names = "default";
>> + };
>> +
>
> Stray blank line
Sorry. Will fix this.
>> +};
>> +
>> +&mdss {
>> + status = "okay";
>> +};
>> +
>
>
>> +
>> +&usb_1_ss0_dwc3_hs {
>> + remote-endpoint = <&pmic_glink_ss0_hs_in>;
>> +};
>> +
>> +&usb_1_ss0_qmpphy_out {
>> + remote-endpoint = <&pmic_glink_ss0_ss_in>;
>> +};
>> +
>
> Here as well
Same here.
Regards,
Georg
On 06/03/2025 14:56, Georg Gottleuber wrote:
>
>> ...
>>
>>> +
>>> + eusb3_repeater: redriver@47 {
>>> + compatible = "nxp,ptn3222";
>>> + reg = <0x47>;
>>> + #phy-cells = <0>;
>>> +
>>> + vdd1v8-supply = <&vreg_l4b_1p8>;
>>> + vdd3v3-supply = <&vreg_l13b_3p0>;
>>> +
>>> + reset-gpios = <&tlmm 124 GPIO_ACTIVE_LOW>;
>>> +
>>> + pinctrl-0 = <&eusb3_reset_n>;
>>> + pinctrl-names = "default";
>>
>> No graph? Isn't it needed?
>
> What do you mean by ‘no graph’?
ports connecting this within USB graph between controller and connector.
Just like other devices with redriver.
Best regards,
Krzysztof
On Thu, Mar 06, 2025 at 03:03:32PM +0100, Krzysztof Kozlowski wrote:
> On 06/03/2025 14:56, Georg Gottleuber wrote:
> >
> >> ...
> >>
> >>> +
> >>> + eusb3_repeater: redriver@47 {
> >>> + compatible = "nxp,ptn3222";
> >>> + reg = <0x47>;
> >>> + #phy-cells = <0>;
> >>> +
> >>> + vdd1v8-supply = <&vreg_l4b_1p8>;
> >>> + vdd3v3-supply = <&vreg_l13b_3p0>;
> >>> +
> >>> + reset-gpios = <&tlmm 124 GPIO_ACTIVE_LOW>;
> >>> +
> >>> + pinctrl-0 = <&eusb3_reset_n>;
> >>> + pinctrl-names = "default";
> >>
> >> No graph? Isn't it needed?
> >
> > What do you mean by ‘no graph’?
>
> ports connecting this within USB graph between controller and connector.
> Just like other devices with redriver.
No, eUSB2 redrivers don't need (and don't use) OF graph, they are
basic PHYs. See Documentation/devicetree/bindings/phy/nxp,ptn3222.yaml
So this one is correct.
--
With best wishes
Dmitry
© 2016 - 2026 Red Hat, Inc.