1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * dts file for Xilinx ZynqMP ZCU100 revC
4 *
5 * (C) Copyright 2016 - 2018, Xilinx, Inc.
6 *
7 * Michal Simek <michal.simek@xilinx.com>
8 * Nathalie Chan King Choy
9 */
10
11/dts-v1/;
12
13#include "zynqmp.dtsi"
14#include "zynqmp-clk.dtsi"
15#include <dt-bindings/input/input.h>
16#include <dt-bindings/interrupt-controller/irq.h>
17#include <dt-bindings/gpio/gpio.h>
18#include <dt-bindings/phy/phy.h>
19
20/ {
21	model = "ZynqMP ZCU100 RevC";
22	compatible = "xlnx,zynqmp-zcu100-revC", "xlnx,zynqmp-zcu100", "xlnx,zynqmp";
23
24	aliases {
25		gpio0 = &gpio;
26		i2c0 = &i2c1;
27		rtc0 = &rtc;
28		serial0 = &uart1;
29		serial1 = &uart0;
30		serial2 = &dcc;
31		spi0 = &spi0;
32		spi1 = &spi1;
33		usb0 = &usb0;
34		usb1 = &usb1;
35		mmc0 = &sdhci0;
36		mmc1 = &sdhci1;
37	};
38
39	chosen {
40		bootargs = "earlycon";
41		stdout-path = "serial0:115200n8";
42	};
43
44	memory@0 {
45		device_type = "memory";
46		reg = <0x0 0x0 0x0 0x80000000>;
47	};
48
49	gpio-keys {
50		compatible = "gpio-keys";
51		autorepeat;
52		sw4 {
53			label = "sw4";
54			gpios = <&gpio 23 GPIO_ACTIVE_LOW>;
55			linux,code = <KEY_POWER>;
56			gpio-key,wakeup;
57			autorepeat;
58		};
59	};
60
61	iio-hwmon {
62		compatible = "iio-hwmon";
63		io-channels = <&xilinx_ams 0>, <&xilinx_ams 1>, <&xilinx_ams 2>,
64			      <&xilinx_ams 3>, <&xilinx_ams 4>, <&xilinx_ams 5>,
65			      <&xilinx_ams 6>, <&xilinx_ams 7>, <&xilinx_ams 8>,
66			      <&xilinx_ams 9>, <&xilinx_ams 10>,
67			      <&xilinx_ams 11>, <&xilinx_ams 12>;
68	};
69
70	leds {
71		compatible = "gpio-leds";
72		ds2 {
73			label = "ds2";
74			gpios = <&gpio 20 GPIO_ACTIVE_HIGH>;
75			linux,default-trigger = "heartbeat";
76		};
77
78		ds3 {
79			label = "ds3";
80			gpios = <&gpio 19 GPIO_ACTIVE_HIGH>;
81			linux,default-trigger = "phy0tx"; /* WLAN tx */
82			default-state = "off";
83		};
84
85		ds4 {
86			label = "ds4";
87			gpios = <&gpio 18 GPIO_ACTIVE_HIGH>;
88			linux,default-trigger = "phy0rx"; /* WLAN rx */
89			default-state = "off";
90		};
91
92		ds5 {
93			label = "ds5";
94			gpios = <&gpio 17 GPIO_ACTIVE_HIGH>;
95			linux,default-trigger = "bluetooth-power";
96		};
97
98		vbus_det { /* U5 USB5744 VBUS detection via MIO25 */
99			label = "vbus_det";
100			gpios = <&gpio 25 GPIO_ACTIVE_HIGH>;
101			default-state = "on";
102		};
103	};
104
105	ltc2954: ltc2954 { /* U7 */
106		compatible = "lltc,ltc2954", "lltc,ltc2952";
107		trigger-gpios = <&gpio 26 GPIO_ACTIVE_LOW>; /* INT line - input */
108		/* If there is HW watchdog on mezzanine this signal should be connected there */
109		watchdog-gpios = <&gpio 35 GPIO_ACTIVE_HIGH>; /* MIO on PAD */
110		kill-gpios = <&gpio 34 GPIO_ACTIVE_LOW>; /* KILL signal - output */
111	};
112
113	wmmcsdio_fixed: fixedregulator-mmcsdio {
114		compatible = "regulator-fixed";
115		regulator-name = "wmmcsdio_fixed";
116		regulator-min-microvolt = <3300000>;
117		regulator-max-microvolt = <3300000>;
118		regulator-always-on;
119		regulator-boot-on;
120	};
121
122	sdio_pwrseq: sdio_pwrseq {
123		compatible = "mmc-pwrseq-simple";
124		reset-gpios = <&gpio 7 GPIO_ACTIVE_LOW>; /* WIFI_EN */
125	};
126};
127
128&dcc {
129	status = "okay";
130};
131
132&gpio {
133	status = "okay";
134	gpio-line-names = "UART1_TX", "UART1_RX", "UART0_RX", "UART0_TX", "I2C1_SCL",
135			  "I2C1_SDA", "SPI1_SCLK", "WLAN_EN", "BT_EN", "SPI1_CS",
136			  "SPI1_MISO", "SPI1_MOSI", "I2C_MUX_RESET", "SD0_DAT0", "SD0_DAT1",
137			  "SD0_DAT2", "SD0_DAT3", "PS_LED3", "PS_LED2", "PS_LED1",
138			  "PS_LED0", "SD0_CMD", "SD0_CLK", "GPIO_PB", "SD0_DETECT",
139			  "VBUS_DET", "POWER_INT", "DP_AUX", "DP_HPD", "DP_OE",
140			  "DP_AUX_IN", "INA226_ALERT", "PS_FP_PWR_EN", "PL_PWR_EN", "POWER_KILL",
141			  "", "GPIO-A", "GPIO-B", "SPI0_SCLK", "GPIO-C",
142			  "GPIO-D", "SPI0_CS", "SPI0_MISO", "SPI_MOSI", "GPIO-E",
143			  "GPIO-F", "SD1_D0", "SD1_D1", "SD1_D2", "SD1_D3",
144			  "SD1_CMD", "SD1_CLK", "USB0_CLK", "USB0_DIR", "USB0_DATA2",
145			  "USB0_NXT", "USB0_DATA0", "USB0_DATA1", "USB0_STP", "USB0_DATA3",
146			  "USB0_DATA4", "USB0_DATA5", "USB0_DATA6", "USB0_DATA7", "USB1_CLK",
147			  "USB1_DIR", "USB1_DATA2", "USB1_NXT", "USB1_DATA0", "USB1_DATA1",
148			  "USB1_STP", "USB1_DATA3", "USB1_DATA4", "USB1_DATA5", "USB1_DATA6",
149			  "USB_DATA7", "WLAN_IRQ", "PMIC_IRQ", /* MIO end and EMIO start */
150			  "", "",
151			  "", "", "", "", "", "", "", "", "", "",
152			  "", "", "", "", "", "", "", "", "", "",
153			  "", "", "", "", "", "", "", "", "", "",
154			  "", "", "", "", "", "", "", "", "", "",
155			  "", "", "", "", "", "", "", "", "", "",
156			  "", "", "", "", "", "", "", "", "", "",
157			  "", "", "", "", "", "", "", "", "", "",
158			  "", "", "", "", "", "", "", "", "", "",
159			  "", "", "", "", "", "", "", "", "", "",
160			  "", "", "", "";
161};
162
163&gpu {
164	status = "okay";
165};
166
167&i2c1 {
168	status = "okay";
169	clock-frequency = <100000>;
170	i2c-mux@75 { /* u11 */
171		compatible = "nxp,pca9548";
172		#address-cells = <1>;
173		#size-cells = <0>;
174		reg = <0x75>;
175		i2csw_0: i2c@0 {
176			#address-cells = <1>;
177			#size-cells = <0>;
178			reg = <0>;
179			label = "LS-I2C0";
180		};
181		i2csw_1: i2c@1 {
182			#address-cells = <1>;
183			#size-cells = <0>;
184			reg = <1>;
185			label = "LS-I2C1";
186		};
187		i2csw_2: i2c@2 {
188			#address-cells = <1>;
189			#size-cells = <0>;
190			reg = <2>;
191			label = "HS-I2C2";
192		};
193		i2csw_3: i2c@3 {
194			#address-cells = <1>;
195			#size-cells = <0>;
196			reg = <3>;
197			label = "HS-I2C3";
198		};
199		i2csw_4: i2c@4 {
200			#address-cells = <1>;
201			#size-cells = <0>;
202			reg = <0x4>;
203
204			pmic: pmic@5e { /* Custom TI PMIC u33 */
205				compatible = "ti,tps65086";
206				reg = <0x5e>;
207				interrupt-parent = <&gpio>;
208				interrupts = <77 GPIO_ACTIVE_LOW>;
209				#gpio-cells = <2>;
210				gpio-controller;
211			};
212		};
213		i2csw_5: i2c@5 {
214			#address-cells = <1>;
215			#size-cells = <0>;
216			reg = <5>;
217			/* PS_PMBUS */
218			ina226@40 { /* u35 */
219				compatible = "ti,ina226";
220				reg = <0x40>;
221				shunt-resistor = <10000>;
222				/* MIO31 is alert which should be routed to PMUFW */
223			};
224		};
225		i2csw_6: i2c@6 {
226			#address-cells = <1>;
227			#size-cells = <0>;
228			reg = <6>;
229			/*
230			 * Not Connected
231			 */
232		};
233		i2csw_7: i2c@7 {
234			#address-cells = <1>;
235			#size-cells = <0>;
236			reg = <7>;
237			/*
238			 * usb5744 (DNP) - U5
239			 * 100kHz - this is default freq for us
240			 */
241		};
242	};
243};
244
245&rtc {
246	status = "okay";
247};
248
249/* SD0 only supports 3.3V, no level shifter */
250&sdhci0 {
251	status = "okay";
252	no-1-8-v;
253	disable-wp;
254	xlnx,mio_bank = <0>;
255};
256
257&sdhci1 {
258	status = "okay";
259	bus-width = <0x4>;
260	xlnx,mio_bank = <0>;
261	non-removable;
262	disable-wp;
263	cap-power-off-card;
264	mmc-pwrseq = <&sdio_pwrseq>;
265	vqmmc-supply = <&wmmcsdio_fixed>;
266	#address-cells = <1>;
267	#size-cells = <0>;
268	wlcore: wifi@2 {
269		compatible = "ti,wl1831";
270		reg = <2>;
271		interrupt-parent = <&gpio>;
272		interrupts = <76 IRQ_TYPE_EDGE_RISING>; /* MIO76 WLAN_IRQ 1V8 */
273	};
274};
275
276&serdes {
277	status = "okay";
278};
279
280&spi0 { /* Low Speed connector */
281	status = "okay";
282	label = "LS-SPI0";
283};
284
285&spi1 { /* High Speed connector */
286	status = "okay";
287	label = "HS-SPI1";
288};
289
290&uart0 {
291	status = "okay";
292	bluetooth {
293		compatible = "ti,wl1831-st";
294		enable-gpios = <&gpio 8 GPIO_ACTIVE_HIGH>;
295	};
296
297};
298
299&uart1 {
300	status = "okay";
301
302};
303
304/* ULPI SMSC USB3320 */
305&usb0 {
306	status = "okay";
307};
308
309&dwc3_0 {
310	status = "okay";
311	dr_mode = "peripheral";
312	phy-names = "usb3-phy";
313	phys = <&lane2 PHY_TYPE_USB3 0 0 26000000>;
314	maximum-speed = "super-speed";
315};
316
317/* ULPI SMSC USB3320 */
318&usb1 {
319	status = "okay";
320};
321
322&dwc3_1 {
323	status = "okay";
324	dr_mode = "host";
325	phy-names = "usb3-phy";
326	phys = <&lane3 PHY_TYPE_USB3 1 0 26000000>;
327	maximum-speed = "super-speed";
328};
329
330&watchdog0 {
331	status = "okay";
332	reset-on-timeout;
333};
334
335&xilinx_ams {
336	status = "okay";
337};
338
339&ams_ps {
340	status = "okay";
341};
342