xref: /linux/Documentation/devicetree/bindings/phy/apple,atcphy.yaml (revision 1fd1dc41724319406b0aff221a352a400b0ddfc5)
1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/phy/apple,atcphy.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Apple Type-C PHY (ATCPHY)
8
9maintainers:
10  - Sven Peter <sven@kernel.org>
11
12description: >
13  The Apple Type-C PHY (ATCPHY) is a combined PHY for USB 2.0, USB 3.x,
14  USB4/Thunderbolt, and DisplayPort connectivity via Type-C ports found in
15  Apple Silicon SoCs.
16
17  The PHY handles muxing between these different protocols and also provides the
18  reset controller for the attached DWC3 USB controller.
19
20  It is designed for USB4 operation and does not handle individual differential
21  pairs as distinct DisplayPort lanes. Any reference to lane in this binding
22  hence refers to two differential pairs (RX and TX) as used in USB terminology.
23
24  In order to correctly setup these lanes for the various modes calibration
25  values copied from Apple's firmware and converted to the format described
26  below by our bootloader m1n1 are required. Without these only USB2 operation
27  is possible.
28
29allOf:
30  - $ref: /schemas/usb/usb-switch.yaml#
31
32$defs:
33  apple,tunable:
34    $ref: /schemas/types.yaml#/definitions/uint32-matrix
35    items:
36      items:
37        - description: Register offset
38        - description: Mask to be applied to the register value
39        - description: Bits to be set after applying the mask
40    description: >
41      List of (register offset, mask, value) tuples copied from Apple's Device
42      Tree by our bootloader m1n1 and used to configure the PHY. These values
43      even vary for a single product/device and likely contain calibration
44      values determined by Apple at manufacturing time.
45      Unless otherwise noted these tunables are always applied to the core
46      register region.
47
48properties:
49  compatible:
50    oneOf:
51      - items:
52          - enum:
53              - apple,t6000-atcphy
54              - apple,t6020-atcphy
55              - apple,t8112-atcphy
56          - const: apple,t8103-atcphy
57      - const: apple,t8103-atcphy
58
59  reg:
60    items:
61      - description: Common controls for all PHYs (USB2/3/4, DisplayPort, TBT)
62      - description: DisplayPort Alternate Mode PHY specific controls
63      - description: Type-C PHY AXI to Apple Fabric interconnect controls
64      - description: USB2 PHY specific controls
65      - description: USB3 PIPE interface controls
66
67  reg-names:
68    items:
69      - const: core
70      - const: lpdptx
71      - const: axi2af
72      - const: usb2phy
73      - const: pipehandler
74
75  "#phy-cells":
76    const: 1
77
78  "#reset-cells":
79    const: 0
80
81  mode-switch: true
82  orientation-switch: true
83
84  power-domains:
85    maxItems: 1
86
87  ports:
88    $ref: /schemas/graph.yaml#/properties/ports
89    properties:
90      port@0:
91        $ref: /schemas/graph.yaml#/properties/port
92        description: Outgoing connection to the SS port of the Type-C connector.
93
94      port@1:
95        $ref: /schemas/graph.yaml#/properties/port
96        description: Incoming endpoint from the USB3 controller.
97
98      port@2:
99        $ref: /schemas/graph.yaml#/properties/port
100        description: Incoming endpoint from the DisplayPort controller.
101
102      port@3:
103        $ref: /schemas/graph.yaml#/properties/port
104        description: Incoming endpoint from the USB4/Thunderbolt controller.
105
106  apple,tunable-common-a:
107    $ref: "#/$defs/apple,tunable"
108    description: >
109      Common tunables required for all modes, applied before tunable-axi2af.
110
111  apple,tunable-axi2af:
112    $ref: "#/$defs/apple,tunable"
113    description: >
114      AXI to Apple Fabric tunables, required for all modes. Unlike all other
115      tunables these are applied to the axi2af region.
116
117  apple,tunable-common-b:
118    $ref: "#/$defs/apple,tunable"
119    description: >
120      Common tunables required for all modes, applied after tunable-axi2af.
121
122  apple,tunable-lane0-usb:
123    $ref: "#/$defs/apple,tunable"
124    description: USB3 tunables for lane 0.
125
126  apple,tunable-lane1-usb:
127    $ref: "#/$defs/apple,tunable"
128    description: USB3 tunables for lane 1.
129
130  apple,tunable-lane0-cio:
131    $ref: "#/$defs/apple,tunable"
132    description: USB4/Thunderbolt ("Converged IO") tunables for lane 0.
133
134  apple,tunable-lane1-cio:
135    $ref: "#/$defs/apple,tunable"
136    description: USB4/Thunderbolt ("Converged IO") tunables for lane 1.
137
138  apple,tunable-lane0-dp:
139    $ref: "#/$defs/apple,tunable"
140    description: >
141      DisplayPort tunables for lane 0.
142
143      Note that lane here refers to a USB RX and TX pair re-used for DisplayPort
144      and not to an individual DisplayPort differential lane.
145
146  apple,tunable-lane1-dp:
147    $ref: "#/$defs/apple,tunable"
148    description: >
149      DisplayPort tunables for lane 1.
150
151      Note that lane here refers to a USB RX and TX pair re-used for DisplayPort
152      and not to an individual DisplayPort differential lane.
153
154required:
155  - compatible
156  - reg
157  - reg-names
158  - "#phy-cells"
159  - "#reset-cells"
160  - orientation-switch
161  - mode-switch
162  - power-domains
163  - ports
164
165additionalProperties: false
166
167examples:
168  - |
169    phy@83000000 {
170      compatible = "apple,t8103-atcphy";
171      reg = <0x83000000 0x4c000>,
172            <0x83050000 0x8000>,
173            <0x80000000 0x4000>,
174            <0x82a90000 0x4000>,
175            <0x82a84000 0x4000>;
176      reg-names = "core", "lpdptx", "axi2af", "usb2phy",
177                  "pipehandler";
178
179      #phy-cells = <1>;
180      #reset-cells = <0>;
181
182      orientation-switch;
183      mode-switch;
184      power-domains = <&ps_atc0_usb>;
185
186      ports {
187        #address-cells = <1>;
188        #size-cells = <0>;
189
190        port@0 {
191          reg = <0>;
192
193          endpoint {
194            remote-endpoint = <&typec_connector_ss>;
195          };
196        };
197
198        port@1 {
199          reg = <1>;
200
201          endpoint {
202            remote-endpoint = <&dwc3_ss_out>;
203          };
204        };
205
206        port@2 {
207          reg = <2>;
208
209          endpoint {
210            remote-endpoint = <&dcp_dp_out>;
211          };
212        };
213
214        port@3 {
215          reg = <3>;
216
217          endpoint {
218            remote-endpoint = <&acio_tbt_out>;
219          };
220        };
221      };
222    };
223