]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
arm64: dts: apple: t8103: Add nodes for integrated USB Type-C ports
authorHector Martin <marcan@marcan.st>
Fri, 9 Jan 2026 14:07:04 +0000 (15:07 +0100)
committerSven Peter <sven@kernel.org>
Tue, 13 Jan 2026 07:03:03 +0000 (08:03 +0100)
Add device nodes and connections to support USB 3.x on the SoC's
integrated USB-C ports of M1-based devices.
Each Type-C port has an Apple Type-C PHY for USB 2.0, USB 3.x,
USB4/Thunderbolt, and DisplayPort, a Synopsys Designware USB 3.x
controller, two DART iommu instances and a CD321x USB PD controller.
The iMac variant with four USB-C ports has two SoC integrated USB-C
ports and two additional USB-C ports driven by an AsMedia PCIe USB
controller. The latter ports are not covered by this change.
The port labels use Apple's established naming scheme for the ports.

Signed-off-by: Hector Martin <marcan@marcan.st>
Co-developed-by: Sven Peter <sven@kernel.org>
Signed-off-by: Janne Grunau <j@jannau.net>
Tested-by: Sven Peter <sven@kernel.org> # M1 mac mini and macbook air
Reviewed-by: Sven Peter <sven@kernel.org>
Reviewed-by: Neal Gompa <neal@gompa.dev>
Link: https://patch.msgid.link/20260109-apple-dt-usb-c-atc-dwc3-v1-1-ce0e92c1a016@jannau.net
Signed-off-by: Sven Peter <sven@kernel.org>
arch/arm64/boot/dts/apple/t8103-j274.dts
arch/arm64/boot/dts/apple/t8103-j293.dts
arch/arm64/boot/dts/apple/t8103-j313.dts
arch/arm64/boot/dts/apple/t8103-j456.dts
arch/arm64/boot/dts/apple/t8103-j457.dts
arch/arm64/boot/dts/apple/t8103-jxxx.dtsi
arch/arm64/boot/dts/apple/t8103.dtsi

index 1c3e37f86d46d7b5d733717b47c4b57dc55e1201..968fe22163d4431fe5e7049854687e61e0ec50f1 100644 (file)
        brcm,board-type = "apple,atlantisb";
 };
 
+/*
+ * Provide labels for the USB type C ports.
+ */
+
+&typec0 {
+       label = "USB-C Back-left";
+};
+
+&typec1 {
+       label = "USB-C Back-right";
+};
+
 /*
  * Force the bus number assignments so that we can declare some of the
  * on-board devices and properties that are populated by the bootloader
index 5b3c42e9f0e6776241bf746d3458766e44e3639a..678f89c3d47fbf2d0705b46bb8feba3fa018ca7a 100644 (file)
        brcm,board-type = "apple,honshu";
 };
 
+/*
+ * Provide labels for the USB type C ports.
+ */
+
+&typec0 {
+       label = "USB-C Left-back";
+};
+
+&typec1 {
+       label = "USB-C Left-front";
+};
+
 &i2c2 {
        status = "okay";
 };
index 97a4344d8dca685708aff136af92a1b316f3c3dd..bce9b911009e2b0caa9d8b2222cd1e8c3215f3b9 100644 (file)
 &fpwm1 {
        status = "okay";
 };
+
+/*
+ * Provide labels for the USB type C ports.
+ */
+
+&typec0 {
+       label = "USB-C Left-back";
+};
+
+&typec1 {
+       label = "USB-C Left-front";
+};
index 58c8e43789b4861544e20c717124ede3327be010..9983e11cacdf19d0a92ede108ceac21b7a02d5da 100644 (file)
        };
 };
 
+/*
+ * Provide labels for the USB type C ports.
+ */
+
+&typec0 {
+       label = "USB-C Back-right";
+};
+
+&typec1 {
+       label = "USB-C Back-right-middle";
+};
+
 /*
  * Force the bus number assignments so that we can declare some of the
  * on-board devices and properties that are populated by the bootloader
index 7089ccf3ce55661f3f83810496daed40c8199189..6703f4a3d3db4c51a4897b77948eba13489b1e43 100644 (file)
        brcm,board-type = "apple,santorini";
 };
 
+/*
+ * Provide labels for the USB type C ports.
+ */
+
+&typec0 {
+       label = "USB-C Back-right";
+};
+
+&typec1 {
+       label = "USB-C Back-left";
+};
+
 /*
  * Force the bus number assignments so that we can declare some of the
  * on-board devices and properties that are populated by the bootloader
index 0c8206156bfefda8a32c869787b2e0c8e67a9d17..686fb1dd215d2d11e736826a254e17b6eab27c3e 100644 (file)
@@ -15,6 +15,8 @@
                serial0 = &serial0;
                serial2 = &serial2;
                wifi0 = &wifi0;
+               atcphy0 = &atcphy0;
+               atcphy1 = &atcphy1;
        };
 
        chosen {
                interrupt-parent = <&pinctrl_ap>;
                interrupts = <106 IRQ_TYPE_LEVEL_LOW>;
                interrupt-names = "irq";
+
+               typec0: connector {
+                       compatible = "usb-c-connector";
+                       power-role = "dual";
+                       data-role = "dual";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               port@0 {
+                                       reg = <0>;
+                                       typec0_connector_hs: endpoint {
+                                               remote-endpoint = <&dwc3_0_hs>;
+                                       };
+                               };
+                               port@1 {
+                                       reg = <1>;
+                                       typec0_connector_ss: endpoint {
+                                               remote-endpoint = <&atcphy0_typec_lanes>;
+                                       };
+                               };
+                       };
+               };
        };
 
        hpm1: usb-pd@3f {
                interrupt-parent = <&pinctrl_ap>;
                interrupts = <106 IRQ_TYPE_LEVEL_LOW>;
                interrupt-names = "irq";
+
+               typec1: connector {
+                       compatible = "usb-c-connector";
+                       power-role = "dual";
+                       data-role = "dual";
+
+                       ports {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               port@0 {
+                                       reg = <0>;
+                                       typec1_connector_hs: endpoint {
+                                               remote-endpoint = <&dwc3_1_hs>;
+                                       };
+                               };
+                               port@1 {
+                                       reg = <1>;
+                                       typec1_connector_ss: endpoint {
+                                               remote-endpoint = <&atcphy1_typec_lanes>;
+                                       };
+                               };
+                       };
+               };
+       };
+};
+
+/* USB controllers */
+&dwc3_0 {
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@0 {
+                       reg = <0>;
+                       dwc3_0_hs: endpoint {
+                               remote-endpoint = <&typec0_connector_hs>;
+                       };
+               };
+
+               port@1 {
+                       reg = <1>;
+                       dwc3_0_ss: endpoint {
+                               remote-endpoint = <&atcphy0_usb3>;
+                       };
+               };
+       };
+};
+
+&dwc3_1 {
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@0 {
+                       reg = <0>;
+                       dwc3_1_hs: endpoint {
+                               remote-endpoint = <&typec1_connector_hs>;
+                       };
+               };
+
+               port@1 {
+                       reg = <1>;
+                       dwc3_1_ss: endpoint {
+                               remote-endpoint = <&atcphy1_usb3>;
+                       };
+               };
+       };
+};
+
+/* Type-C PHYs */
+&atcphy0 {
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@0 {
+                       reg = <0>;
+                       atcphy0_typec_lanes: endpoint {
+                               remote-endpoint = <&typec0_connector_ss>;
+                       };
+               };
+
+               port@1 {
+                       reg = <1>;
+                       atcphy0_usb3: endpoint {
+                               remote-endpoint = <&dwc3_0_ss>;
+                       };
+               };
+       };
+};
+
+&atcphy1 {
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@0 {
+                       reg = <0>;
+                       atcphy1_typec_lanes: endpoint {
+                               remote-endpoint = <&typec1_connector_ss>;
+                       };
+               };
+
+               port@1 {
+                       reg = <1>;
+                       atcphy1_usb3: endpoint {
+                               remote-endpoint = <&dwc3_1_ss>;
+                       };
+               };
        };
 };
 
index 8b7b27887968741b745651e5133dffa7d8d20f6d..c48b10ac65efcc9c5211c3cdb0a5be63bf60a859 100644 (file)
@@ -12,6 +12,7 @@
 #include <dt-bindings/interrupt-controller/irq.h>
 #include <dt-bindings/pinctrl/apple.h>
 #include <dt-bindings/spmi/spmi.h>
+#include <dt-bindings/phy/phy.h>
 
 / {
        compatible = "apple,t8103", "apple,arm-platform";
                        resets = <&ps_ans2>;
                };
 
+               dwc3_0: usb@382280000 {
+                       compatible = "apple,t8103-dwc3";
+                       reg = <0x3 0x82280000 0x0 0xcd00>, <0x3 0x8228cd00 0x0 0x3200>;
+                       reg-names = "dwc3-core", "dwc3-apple";
+                       interrupt-parent = <&aic>;
+                       interrupts = <AIC_IRQ 777 IRQ_TYPE_LEVEL_HIGH>;
+                       dr_mode = "otg";
+                       usb-role-switch;
+                       role-switch-default-mode = "host";
+                       iommus = <&dwc3_0_dart_0 0>, <&dwc3_0_dart_1 1>;
+                       power-domains = <&ps_atc0_usb>;
+                       resets = <&atcphy0>;
+                       phys = <&atcphy0 PHY_TYPE_USB2>, <&atcphy0 PHY_TYPE_USB3>;
+                       phy-names = "usb2-phy", "usb3-phy";
+               };
+
+               dwc3_0_dart_0: iommu@382f00000 {
+                       compatible = "apple,t8103-dart";
+                       reg = <0x3 0x82f00000 0x0 0x4000>;
+                       interrupt-parent = <&aic>;
+                       interrupts = <AIC_IRQ 781 IRQ_TYPE_LEVEL_HIGH>;
+                       #iommu-cells = <1>;
+                       power-domains = <&ps_atc0_usb>;
+               };
+
+               dwc3_0_dart_1: iommu@382f80000 {
+                       compatible = "apple,t8103-dart";
+                       reg = <0x3 0x82f80000 0x0 0x4000>;
+                       interrupt-parent = <&aic>;
+                       interrupts = <AIC_IRQ 781 IRQ_TYPE_LEVEL_HIGH>;
+                       #iommu-cells = <1>;
+                       power-domains = <&ps_atc0_usb>;
+               };
+
+               atcphy0: phy@383000000 {
+                       compatible = "apple,t8103-atcphy";
+                       reg = <0x3 0x83000000 0x0 0x4c000>,
+                               <0x3 0x83050000 0x0 0x8000>,
+                               <0x3 0x80000000 0x0 0x4000>,
+                               <0x3 0x82a90000 0x0 0x4000>,
+                               <0x3 0x82a84000 0x0 0x4000>;
+                       reg-names = "core", "lpdptx", "axi2af", "usb2phy",
+                               "pipehandler";
+
+                       #phy-cells = <1>;
+                       #reset-cells = <0>;
+
+                       orientation-switch;
+                       mode-switch;
+                       power-domains = <&ps_atc0_usb>;
+               };
+
+               dwc3_1: usb@502280000 {
+                       compatible = "apple,t8103-dwc3";
+                       reg = <0x5 0x02280000 0x0 0xcd00>, <0x5 0x0228cd00 0x0 0x3200>;
+                       reg-names = "dwc3-core", "dwc3-apple";
+                       interrupt-parent = <&aic>;
+                       interrupts = <AIC_IRQ 857 IRQ_TYPE_LEVEL_HIGH>;
+                       dr_mode = "otg";
+                       usb-role-switch;
+                       role-switch-default-mode = "host";
+                       iommus = <&dwc3_1_dart_0 0>, <&dwc3_1_dart_1 1>;
+                       power-domains = <&ps_atc1_usb>;
+                       resets = <&atcphy1>;
+                       phys = <&atcphy1 PHY_TYPE_USB2>, <&atcphy1 PHY_TYPE_USB3>;
+                       phy-names = "usb2-phy", "usb3-phy";
+               };
+
+               dwc3_1_dart_0: iommu@502f00000 {
+                       compatible = "apple,t8103-dart";
+                       reg = <0x5 0x02f00000 0x0 0x4000>;
+                       interrupt-parent = <&aic>;
+                       interrupts = <AIC_IRQ 861 IRQ_TYPE_LEVEL_HIGH>;
+                       #iommu-cells = <1>;
+                       power-domains = <&ps_atc1_usb>;
+               };
+
+               dwc3_1_dart_1: iommu@502f80000 {
+                       compatible = "apple,t8103-dart";
+                       reg = <0x5 0x02f80000 0x0 0x4000>;
+                       interrupt-parent = <&aic>;
+                       interrupts = <AIC_IRQ 861 IRQ_TYPE_LEVEL_HIGH>;
+                       #iommu-cells = <1>;
+                       power-domains = <&ps_atc1_usb>;
+               };
+
+               atcphy1: phy@503000000 {
+                       compatible = "apple,t8103-atcphy";
+                       reg = <0x5 0x03000000 0x0 0x4c000>,
+                               <0x5 0x03050000 0x0 0x8000>,
+                               <0x5 0x0 0x0 0x4000>,
+                               <0x5 0x02a90000 0x0 0x4000>,
+                               <0x5 0x02a84000 0x0 0x4000>;
+                       reg-names = "core", "lpdptx", "axi2af", "usb2phy",
+                               "pipehandler";
+
+                       #phy-cells = <1>;
+                       #reset-cells = <0>;
+
+                       orientation-switch;
+                       mode-switch;
+                       power-domains = <&ps_atc1_usb>;
+               };
+
                pcie0_dart_0: iommu@681008000 {
                        compatible = "apple,t8103-dart";
                        reg = <0x6 0x81008000 0x0 0x4000>;