1*7b0b0191SHector Martin// SPDX-License-Identifier: GPL-2.0+ OR MIT
2*7b0b0191SHector Martin/*
3*7b0b0191SHector Martin * Devices used on die 0 on the Apple T6002 "M1 Ultra" SoC and present on
4*7b0b0191SHector Martin * Apple T6000 / T6001 "M1 Pro" / "M1 Max".
5*7b0b0191SHector Martin *
6*7b0b0191SHector Martin * Copyright The Asahi Linux Contributors
7*7b0b0191SHector Martin */
8*7b0b0191SHector Martin
9*7b0b0191SHector Martin
10*7b0b0191SHector Martin	aic: interrupt-controller@28e100000 {
11*7b0b0191SHector Martin		compatible = "apple,t6000-aic", "apple,aic2";
12*7b0b0191SHector Martin		#interrupt-cells = <4>;
13*7b0b0191SHector Martin		interrupt-controller;
14*7b0b0191SHector Martin		reg = <0x2 0x8e100000 0x0 0xc000>,
15*7b0b0191SHector Martin			<0x2 0x8e10c000 0x0 0x4>;
16*7b0b0191SHector Martin		reg-names = "core", "event";
17*7b0b0191SHector Martin		power-domains = <&ps_aic>;
18*7b0b0191SHector Martin	};
19*7b0b0191SHector Martin
20*7b0b0191SHector Martin	pinctrl_smc: pinctrl@290820000 {
21*7b0b0191SHector Martin		compatible = "apple,t6000-pinctrl", "apple,pinctrl";
22*7b0b0191SHector Martin		reg = <0x2 0x90820000 0x0 0x4000>;
23*7b0b0191SHector Martin
24*7b0b0191SHector Martin		gpio-controller;
25*7b0b0191SHector Martin		#gpio-cells = <2>;
26*7b0b0191SHector Martin		gpio-ranges = <&pinctrl_smc 0 0 30>;
27*7b0b0191SHector Martin		apple,npins = <30>;
28*7b0b0191SHector Martin
29*7b0b0191SHector Martin		interrupt-controller;
30*7b0b0191SHector Martin		#interrupt-cells = <2>;
31*7b0b0191SHector Martin		interrupt-parent = <&aic>;
32*7b0b0191SHector Martin		interrupts = <AIC_IRQ 0 743 IRQ_TYPE_LEVEL_HIGH>,
33*7b0b0191SHector Martin				<AIC_IRQ 0 744 IRQ_TYPE_LEVEL_HIGH>,
34*7b0b0191SHector Martin				<AIC_IRQ 0 745 IRQ_TYPE_LEVEL_HIGH>,
35*7b0b0191SHector Martin				<AIC_IRQ 0 746 IRQ_TYPE_LEVEL_HIGH>,
36*7b0b0191SHector Martin				<AIC_IRQ 0 747 IRQ_TYPE_LEVEL_HIGH>,
37*7b0b0191SHector Martin				<AIC_IRQ 0 748 IRQ_TYPE_LEVEL_HIGH>,
38*7b0b0191SHector Martin				<AIC_IRQ 0 749 IRQ_TYPE_LEVEL_HIGH>;
39*7b0b0191SHector Martin	};
40*7b0b0191SHector Martin
41*7b0b0191SHector Martin	wdt: watchdog@2922b0000 {
42*7b0b0191SHector Martin		compatible = "apple,t6000-wdt", "apple,wdt";
43*7b0b0191SHector Martin		reg = <0x2 0x922b0000 0x0 0x4000>;
44*7b0b0191SHector Martin		clocks = <&clkref>;
45*7b0b0191SHector Martin		interrupt-parent = <&aic>;
46*7b0b0191SHector Martin		interrupts = <AIC_IRQ 0 631 IRQ_TYPE_LEVEL_HIGH>;
47*7b0b0191SHector Martin	};
48*7b0b0191SHector Martin
49*7b0b0191SHector Martin	i2c0: i2c@39b040000 {
50*7b0b0191SHector Martin		compatible = "apple,t6000-i2c", "apple,i2c";
51*7b0b0191SHector Martin		reg = <0x3 0x9b040000 0x0 0x4000>;
52*7b0b0191SHector Martin		clocks = <&clkref>;
53*7b0b0191SHector Martin		interrupt-parent = <&aic>;
54*7b0b0191SHector Martin		interrupts = <AIC_IRQ 0 1119 IRQ_TYPE_LEVEL_HIGH>;
55*7b0b0191SHector Martin		pinctrl-0 = <&i2c0_pins>;
56*7b0b0191SHector Martin		pinctrl-names = "default";
57*7b0b0191SHector Martin		power-domains = <&ps_i2c0>;
58*7b0b0191SHector Martin		#address-cells = <0x1>;
59*7b0b0191SHector Martin		#size-cells = <0x0>;
60*7b0b0191SHector Martin	};
61*7b0b0191SHector Martin
62*7b0b0191SHector Martin	i2c1: i2c@39b044000 {
63*7b0b0191SHector Martin		compatible = "apple,t6000-i2c", "apple,i2c";
64*7b0b0191SHector Martin		reg = <0x3 0x9b044000 0x0 0x4000>;
65*7b0b0191SHector Martin		clocks = <&clkref>;
66*7b0b0191SHector Martin		interrupt-parent = <&aic>;
67*7b0b0191SHector Martin		interrupts = <AIC_IRQ 0 1120 IRQ_TYPE_LEVEL_HIGH>;
68*7b0b0191SHector Martin		pinctrl-0 = <&i2c1_pins>;
69*7b0b0191SHector Martin		pinctrl-names = "default";
70*7b0b0191SHector Martin		power-domains = <&ps_i2c1>;
71*7b0b0191SHector Martin		#address-cells = <0x1>;
72*7b0b0191SHector Martin		#size-cells = <0x0>;
73*7b0b0191SHector Martin		status = "disabled";
74*7b0b0191SHector Martin	};
75*7b0b0191SHector Martin
76*7b0b0191SHector Martin	i2c2: i2c@39b048000 {
77*7b0b0191SHector Martin		compatible = "apple,t6000-i2c", "apple,i2c";
78*7b0b0191SHector Martin		reg = <0x3 0x9b048000 0x0 0x4000>;
79*7b0b0191SHector Martin		clocks = <&clkref>;
80*7b0b0191SHector Martin		interrupt-parent = <&aic>;
81*7b0b0191SHector Martin		interrupts = <AIC_IRQ 0 1121 IRQ_TYPE_LEVEL_HIGH>;
82*7b0b0191SHector Martin		pinctrl-0 = <&i2c2_pins>;
83*7b0b0191SHector Martin		pinctrl-names = "default";
84*7b0b0191SHector Martin		power-domains = <&ps_i2c2>;
85*7b0b0191SHector Martin		#address-cells = <0x1>;
86*7b0b0191SHector Martin		#size-cells = <0x0>;
87*7b0b0191SHector Martin		status = "disabled";
88*7b0b0191SHector Martin	};
89*7b0b0191SHector Martin
90*7b0b0191SHector Martin	i2c3: i2c@39b04c000 {
91*7b0b0191SHector Martin		compatible = "apple,t6000-i2c", "apple,i2c";
92*7b0b0191SHector Martin		reg = <0x3 0x9b04c000 0x0 0x4000>;
93*7b0b0191SHector Martin		clocks = <&clkref>;
94*7b0b0191SHector Martin		interrupt-parent = <&aic>;
95*7b0b0191SHector Martin		interrupts = <AIC_IRQ 0 1122 IRQ_TYPE_LEVEL_HIGH>;
96*7b0b0191SHector Martin		pinctrl-0 = <&i2c3_pins>;
97*7b0b0191SHector Martin		pinctrl-names = "default";
98*7b0b0191SHector Martin		power-domains = <&ps_i2c3>;
99*7b0b0191SHector Martin		#address-cells = <0x1>;
100*7b0b0191SHector Martin		#size-cells = <0x0>;
101*7b0b0191SHector Martin		status = "disabled";
102*7b0b0191SHector Martin	};
103*7b0b0191SHector Martin
104*7b0b0191SHector Martin	i2c4: i2c@39b050000 {
105*7b0b0191SHector Martin		compatible = "apple,t6000-i2c", "apple,i2c";
106*7b0b0191SHector Martin		reg = <0x3 0x9b050000 0x0 0x4000>;
107*7b0b0191SHector Martin		clocks = <&clkref>;
108*7b0b0191SHector Martin		interrupt-parent = <&aic>;
109*7b0b0191SHector Martin		interrupts = <AIC_IRQ 0 1123 IRQ_TYPE_LEVEL_HIGH>;
110*7b0b0191SHector Martin		pinctrl-0 = <&i2c4_pins>;
111*7b0b0191SHector Martin		pinctrl-names = "default";
112*7b0b0191SHector Martin		power-domains = <&ps_i2c4>;
113*7b0b0191SHector Martin		#address-cells = <0x1>;
114*7b0b0191SHector Martin		#size-cells = <0x0>;
115*7b0b0191SHector Martin		status = "disabled";
116*7b0b0191SHector Martin	};
117*7b0b0191SHector Martin
118*7b0b0191SHector Martin	i2c5: i2c@39b054000 {
119*7b0b0191SHector Martin		compatible = "apple,t6000-i2c", "apple,i2c";
120*7b0b0191SHector Martin		reg = <0x3 0x9b054000 0x0 0x4000>;
121*7b0b0191SHector Martin		clocks = <&clkref>;
122*7b0b0191SHector Martin		interrupt-parent = <&aic>;
123*7b0b0191SHector Martin		interrupts = <AIC_IRQ 0 1124 IRQ_TYPE_LEVEL_HIGH>;
124*7b0b0191SHector Martin		pinctrl-0 = <&i2c5_pins>;
125*7b0b0191SHector Martin		pinctrl-names = "default";
126*7b0b0191SHector Martin		power-domains = <&ps_i2c5>;
127*7b0b0191SHector Martin		#address-cells = <0x1>;
128*7b0b0191SHector Martin		#size-cells = <0x0>;
129*7b0b0191SHector Martin		status = "disabled";
130*7b0b0191SHector Martin	};
131*7b0b0191SHector Martin
132*7b0b0191SHector Martin	serial0: serial@39b200000 {
133*7b0b0191SHector Martin		compatible = "apple,s5l-uart";
134*7b0b0191SHector Martin		reg = <0x3 0x9b200000 0x0 0x1000>;
135*7b0b0191SHector Martin		reg-io-width = <4>;
136*7b0b0191SHector Martin		interrupt-parent = <&aic>;
137*7b0b0191SHector Martin		interrupts = <AIC_IRQ 0 1097 IRQ_TYPE_LEVEL_HIGH>;
138*7b0b0191SHector Martin		/*
139*7b0b0191SHector Martin		 * TODO: figure out the clocking properly, there may
140*7b0b0191SHector Martin		 * be a third selectable clock.
141*7b0b0191SHector Martin		 */
142*7b0b0191SHector Martin		clocks = <&clkref>, <&clkref>;
143*7b0b0191SHector Martin		clock-names = "uart", "clk_uart_baud0";
144*7b0b0191SHector Martin		power-domains = <&ps_uart0>;
145*7b0b0191SHector Martin		status = "disabled";
146*7b0b0191SHector Martin	};
147*7b0b0191SHector Martin
148*7b0b0191SHector Martin	pcie0_dart_0: dart@581008000 {
149*7b0b0191SHector Martin		compatible = "apple,t6000-dart";
150*7b0b0191SHector Martin		reg = <0x5 0x81008000 0x0 0x4000>;
151*7b0b0191SHector Martin		#iommu-cells = <1>;
152*7b0b0191SHector Martin		interrupt-parent = <&aic>;
153*7b0b0191SHector Martin		interrupts = <AIC_IRQ 0 1271 IRQ_TYPE_LEVEL_HIGH>;
154*7b0b0191SHector Martin		power-domains = <&ps_apcie_gp_sys>;
155*7b0b0191SHector Martin	};
156*7b0b0191SHector Martin
157*7b0b0191SHector Martin	pcie0_dart_1: dart@582008000 {
158*7b0b0191SHector Martin		compatible = "apple,t6000-dart";
159*7b0b0191SHector Martin		reg = <0x5 0x82008000 0x0 0x4000>;
160*7b0b0191SHector Martin		#iommu-cells = <1>;
161*7b0b0191SHector Martin		interrupt-parent = <&aic>;
162*7b0b0191SHector Martin		interrupts = <AIC_IRQ 0 1274 IRQ_TYPE_LEVEL_HIGH>;
163*7b0b0191SHector Martin		power-domains = <&ps_apcie_gp_sys>;
164*7b0b0191SHector Martin	};
165*7b0b0191SHector Martin
166*7b0b0191SHector Martin	pcie0_dart_2: dart@583008000 {
167*7b0b0191SHector Martin		compatible = "apple,t6000-dart";
168*7b0b0191SHector Martin		reg = <0x5 0x83008000 0x0 0x4000>;
169*7b0b0191SHector Martin		#iommu-cells = <1>;
170*7b0b0191SHector Martin		interrupt-parent = <&aic>;
171*7b0b0191SHector Martin		interrupts = <AIC_IRQ 0 1277 IRQ_TYPE_LEVEL_HIGH>;
172*7b0b0191SHector Martin		power-domains = <&ps_apcie_gp_sys>;
173*7b0b0191SHector Martin	};
174*7b0b0191SHector Martin
175*7b0b0191SHector Martin	pcie0_dart_3: dart@584008000 {
176*7b0b0191SHector Martin		compatible = "apple,t6000-dart";
177*7b0b0191SHector Martin		reg = <0x5 0x84008000 0x0 0x4000>;
178*7b0b0191SHector Martin		#iommu-cells = <1>;
179*7b0b0191SHector Martin		interrupt-parent = <&aic>;
180*7b0b0191SHector Martin		interrupts = <AIC_IRQ 0 1280 IRQ_TYPE_LEVEL_HIGH>;
181*7b0b0191SHector Martin		power-domains = <&ps_apcie_gp_sys>;
182*7b0b0191SHector Martin	};
183*7b0b0191SHector Martin
184*7b0b0191SHector Martin	pcie0: pcie@590000000 {
185*7b0b0191SHector Martin		compatible = "apple,t6000-pcie", "apple,pcie";
186*7b0b0191SHector Martin		device_type = "pci";
187*7b0b0191SHector Martin
188*7b0b0191SHector Martin		reg = <0x5 0x90000000 0x0 0x1000000>,
189*7b0b0191SHector Martin			<0x5 0x80000000 0x0 0x100000>,
190*7b0b0191SHector Martin			<0x5 0x81000000 0x0 0x4000>,
191*7b0b0191SHector Martin			<0x5 0x82000000 0x0 0x4000>,
192*7b0b0191SHector Martin			<0x5 0x83000000 0x0 0x4000>,
193*7b0b0191SHector Martin			<0x5 0x84000000 0x0 0x4000>;
194*7b0b0191SHector Martin		reg-names = "config", "rc", "port0", "port1", "port2", "port3";
195*7b0b0191SHector Martin
196*7b0b0191SHector Martin		interrupt-parent = <&aic>;
197*7b0b0191SHector Martin		interrupts = <AIC_IRQ 0 1270 IRQ_TYPE_LEVEL_HIGH>,
198*7b0b0191SHector Martin				<AIC_IRQ 0 1273 IRQ_TYPE_LEVEL_HIGH>,
199*7b0b0191SHector Martin				<AIC_IRQ 0 1276 IRQ_TYPE_LEVEL_HIGH>,
200*7b0b0191SHector Martin				<AIC_IRQ 0 1279 IRQ_TYPE_LEVEL_HIGH>;
201*7b0b0191SHector Martin
202*7b0b0191SHector Martin		msi-controller;
203*7b0b0191SHector Martin		msi-parent = <&pcie0>;
204*7b0b0191SHector Martin		msi-ranges = <&aic AIC_IRQ 0 1581 IRQ_TYPE_EDGE_RISING 32>;
205*7b0b0191SHector Martin
206*7b0b0191SHector Martin
207*7b0b0191SHector Martin		iommu-map = <0x100 &pcie0_dart_0 1 1>,
208*7b0b0191SHector Martin				<0x200 &pcie0_dart_1 1 1>,
209*7b0b0191SHector Martin				<0x300 &pcie0_dart_2 1 1>,
210*7b0b0191SHector Martin				<0x400 &pcie0_dart_3 1 1>;
211*7b0b0191SHector Martin		iommu-map-mask = <0xff00>;
212*7b0b0191SHector Martin
213*7b0b0191SHector Martin		bus-range = <0 4>;
214*7b0b0191SHector Martin		#address-cells = <3>;
215*7b0b0191SHector Martin		#size-cells = <2>;
216*7b0b0191SHector Martin		ranges = <0x43000000 0x5 0xa0000000 0x5 0xa0000000 0x0 0x20000000>,
217*7b0b0191SHector Martin				<0x02000000 0x0 0xc0000000 0x5 0xc0000000 0x0 0x40000000>;
218*7b0b0191SHector Martin
219*7b0b0191SHector Martin		power-domains = <&ps_apcie_gp_sys>;
220*7b0b0191SHector Martin		pinctrl-0 = <&pcie_pins>;
221*7b0b0191SHector Martin		pinctrl-names = "default";
222*7b0b0191SHector Martin
223*7b0b0191SHector Martin		port00: pci@0,0 {
224*7b0b0191SHector Martin			device_type = "pci";
225*7b0b0191SHector Martin			reg = <0x0 0x0 0x0 0x0 0x0>;
226*7b0b0191SHector Martin			reset-gpios = <&pinctrl_ap 4 GPIO_ACTIVE_LOW>;
227*7b0b0191SHector Martin
228*7b0b0191SHector Martin			#address-cells = <3>;
229*7b0b0191SHector Martin			#size-cells = <2>;
230*7b0b0191SHector Martin			ranges;
231*7b0b0191SHector Martin
232*7b0b0191SHector Martin			interrupt-controller;
233*7b0b0191SHector Martin			#interrupt-cells = <1>;
234*7b0b0191SHector Martin
235*7b0b0191SHector Martin			interrupt-map-mask = <0 0 0 7>;
236*7b0b0191SHector Martin			interrupt-map = <0 0 0 1 &port00 0 0 0 0>,
237*7b0b0191SHector Martin					<0 0 0 2 &port00 0 0 0 1>,
238*7b0b0191SHector Martin					<0 0 0 3 &port00 0 0 0 2>,
239*7b0b0191SHector Martin					<0 0 0 4 &port00 0 0 0 3>;
240*7b0b0191SHector Martin		};
241*7b0b0191SHector Martin
242*7b0b0191SHector Martin		port01: pci@1,0 {
243*7b0b0191SHector Martin			device_type = "pci";
244*7b0b0191SHector Martin			reg = <0x800 0x0 0x0 0x0 0x0>;
245*7b0b0191SHector Martin			reset-gpios = <&pinctrl_ap 5 GPIO_ACTIVE_LOW>;
246*7b0b0191SHector Martin
247*7b0b0191SHector Martin			#address-cells = <3>;
248*7b0b0191SHector Martin			#size-cells = <2>;
249*7b0b0191SHector Martin			ranges;
250*7b0b0191SHector Martin
251*7b0b0191SHector Martin			interrupt-controller;
252*7b0b0191SHector Martin			#interrupt-cells = <1>;
253*7b0b0191SHector Martin
254*7b0b0191SHector Martin			interrupt-map-mask = <0 0 0 7>;
255*7b0b0191SHector Martin			interrupt-map = <0 0 0 1 &port01 0 0 0 0>,
256*7b0b0191SHector Martin					<0 0 0 2 &port01 0 0 0 1>,
257*7b0b0191SHector Martin					<0 0 0 3 &port01 0 0 0 2>,
258*7b0b0191SHector Martin					<0 0 0 4 &port01 0 0 0 3>;
259*7b0b0191SHector Martin		};
260*7b0b0191SHector Martin
261*7b0b0191SHector Martin		port02: pci@2,0 {
262*7b0b0191SHector Martin			device_type = "pci";
263*7b0b0191SHector Martin			reg = <0x1000 0x0 0x0 0x0 0x0>;
264*7b0b0191SHector Martin			reset-gpios = <&pinctrl_ap 6 GPIO_ACTIVE_LOW>;
265*7b0b0191SHector Martin
266*7b0b0191SHector Martin			#address-cells = <3>;
267*7b0b0191SHector Martin			#size-cells = <2>;
268*7b0b0191SHector Martin			ranges;
269*7b0b0191SHector Martin
270*7b0b0191SHector Martin			interrupt-controller;
271*7b0b0191SHector Martin			#interrupt-cells = <1>;
272*7b0b0191SHector Martin
273*7b0b0191SHector Martin			interrupt-map-mask = <0 0 0 7>;
274*7b0b0191SHector Martin			interrupt-map = <0 0 0 1 &port02 0 0 0 0>,
275*7b0b0191SHector Martin					<0 0 0 2 &port02 0 0 0 1>,
276*7b0b0191SHector Martin					<0 0 0 3 &port02 0 0 0 2>,
277*7b0b0191SHector Martin					<0 0 0 4 &port02 0 0 0 3>;
278*7b0b0191SHector Martin		};
279*7b0b0191SHector Martin
280*7b0b0191SHector Martin		port03: pci@3,0 {
281*7b0b0191SHector Martin			device_type = "pci";
282*7b0b0191SHector Martin			reg = <0x1800 0x0 0x0 0x0 0x0>;
283*7b0b0191SHector Martin			reset-gpios = <&pinctrl_ap 7 GPIO_ACTIVE_LOW>;
284*7b0b0191SHector Martin
285*7b0b0191SHector Martin			#address-cells = <3>;
286*7b0b0191SHector Martin			#size-cells = <2>;
287*7b0b0191SHector Martin			ranges;
288*7b0b0191SHector Martin
289*7b0b0191SHector Martin			interrupt-controller;
290*7b0b0191SHector Martin			#interrupt-cells = <1>;
291*7b0b0191SHector Martin
292*7b0b0191SHector Martin			interrupt-map-mask = <0 0 0 7>;
293*7b0b0191SHector Martin			interrupt-map = <0 0 0 1 &port03 0 0 0 0>,
294*7b0b0191SHector Martin					<0 0 0 2 &port03 0 0 0 1>,
295*7b0b0191SHector Martin					<0 0 0 3 &port03 0 0 0 2>,
296*7b0b0191SHector Martin					<0 0 0 4 &port03 0 0 0 3>;
297*7b0b0191SHector Martin		};
298*7b0b0191SHector Martin	};
299