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		status = "disabled";
108		trigger-gpios = <&gpio 26 GPIO_ACTIVE_LOW>; /* INT line - input */
109		/* If there is HW watchdog on mezzanine this signal should be connected there */
110		watchdog-gpios = <&gpio 35 GPIO_ACTIVE_HIGH>; /* MIO on PAD */
111		kill-gpios = <&gpio 34 GPIO_ACTIVE_LOW>; /* KILL signal - output */
112	};
113
114	wmmcsdio_fixed: fixedregulator-mmcsdio {
115		compatible = "regulator-fixed";
116		regulator-name = "wmmcsdio_fixed";
117		regulator-min-microvolt = <3300000>;
118		regulator-max-microvolt = <3300000>;
119		regulator-always-on;
120		regulator-boot-on;
121	};
122
123	sdio_pwrseq: sdio_pwrseq {
124		compatible = "mmc-pwrseq-simple";
125		reset-gpios = <&gpio 7 GPIO_ACTIVE_LOW>; /* WIFI_EN */
126	};
127};
128
129&dcc {
130	status = "okay";
131};
132
133&gpio {
134	status = "okay";
135	gpio-line-names = "UART1_TX", "UART1_RX", "UART0_RX", "UART0_TX", "I2C1_SCL",
136			  "I2C1_SDA", "SPI1_SCLK", "WLAN_EN", "BT_EN", "SPI1_CS",
137			  "SPI1_MISO", "SPI1_MOSI", "I2C_MUX_RESET", "SD0_DAT0", "SD0_DAT1",
138			  "SD0_DAT2", "SD0_DAT3", "PS_LED3", "PS_LED2", "PS_LED1",
139			  "PS_LED0", "SD0_CMD", "SD0_CLK", "GPIO_PB", "SD0_DETECT",
140			  "VBUS_DET", "POWER_INT", "DP_AUX", "DP_HPD", "DP_OE",
141			  "DP_AUX_IN", "INA226_ALERT", "PS_FP_PWR_EN", "PL_PWR_EN", "POWER_KILL",
142			  "", "GPIO-A", "GPIO-B", "SPI0_SCLK", "GPIO-C",
143			  "GPIO-D", "SPI0_CS", "SPI0_MISO", "SPI_MOSI", "GPIO-E",
144			  "GPIO-F", "SD1_D0", "SD1_D1", "SD1_D2", "SD1_D3",
145			  "SD1_CMD", "SD1_CLK", "USB0_CLK", "USB0_DIR", "USB0_DATA2",
146			  "USB0_NXT", "USB0_DATA0", "USB0_DATA1", "USB0_STP", "USB0_DATA3",
147			  "USB0_DATA4", "USB0_DATA5", "USB0_DATA6", "USB0_DATA7", "USB1_CLK",
148			  "USB1_DIR", "USB1_DATA2", "USB1_NXT", "USB1_DATA0", "USB1_DATA1",
149			  "USB1_STP", "USB1_DATA3", "USB1_DATA4", "USB1_DATA5", "USB1_DATA6",
150			  "USB_DATA7", "WLAN_IRQ", "PMIC_IRQ", /* MIO end and EMIO start */
151			  "", "",
152			  "", "", "", "", "", "", "", "", "", "",
153			  "", "", "", "", "", "", "", "", "", "",
154			  "", "", "", "", "", "", "", "", "", "",
155			  "", "", "", "", "", "", "", "", "", "",
156			  "", "", "", "", "", "", "", "", "", "",
157			  "", "", "", "", "", "", "", "", "", "",
158			  "", "", "", "", "", "", "", "", "", "",
159			  "", "", "", "", "", "", "", "", "", "",
160			  "", "", "", "", "", "", "", "", "", "",
161			  "", "", "", "";
162};
163
164&gpu {
165	status = "okay";
166};
167
168&i2c1 {
169	status = "okay";
170	clock-frequency = <100000>;
171	i2c-mux@75 { /* u11 */
172		compatible = "nxp,pca9548";
173		#address-cells = <1>;
174		#size-cells = <0>;
175		reg = <0x75>;
176		i2csw_0: i2c@0 {
177			#address-cells = <1>;
178			#size-cells = <0>;
179			reg = <0>;
180			label = "LS-I2C0";
181		};
182		i2csw_1: i2c@1 {
183			#address-cells = <1>;
184			#size-cells = <0>;
185			reg = <1>;
186			label = "LS-I2C1";
187		};
188		i2csw_2: i2c@2 {
189			#address-cells = <1>;
190			#size-cells = <0>;
191			reg = <2>;
192			label = "HS-I2C2";
193		};
194		i2csw_3: i2c@3 {
195			#address-cells = <1>;
196			#size-cells = <0>;
197			reg = <3>;
198			label = "HS-I2C3";
199		};
200		i2csw_4: i2c@4 {
201			#address-cells = <1>;
202			#size-cells = <0>;
203			reg = <0x4>;
204
205			pmic: pmic@5e { /* Custom TI PMIC u33 */
206				compatible = "ti,tps65086";
207				reg = <0x5e>;
208				interrupt-parent = <&gpio>;
209				interrupts = <77 GPIO_ACTIVE_LOW>;
210				#gpio-cells = <2>;
211				gpio-controller;
212			};
213		};
214		i2csw_5: i2c@5 {
215			#address-cells = <1>;
216			#size-cells = <0>;
217			reg = <5>;
218			/* PS_PMBUS */
219			ina226@40 { /* u35 */
220				compatible = "ti,ina226";
221				reg = <0x40>;
222				shunt-resistor = <10000>;
223				/* MIO31 is alert which should be routed to PMUFW */
224			};
225		};
226		i2csw_6: i2c@6 {
227			#address-cells = <1>;
228			#size-cells = <0>;
229			reg = <6>;
230			/*
231			 * Not Connected
232			 */
233		};
234		i2csw_7: i2c@7 {
235			#address-cells = <1>;
236			#size-cells = <0>;
237			reg = <7>;
238			/*
239			 * usb5744 (DNP) - U5
240			 * 100kHz - this is default freq for us
241			 */
242		};
243	};
244};
245
246&rtc {
247	status = "okay";
248};
249
250/* SD0 only supports 3.3V, no level shifter */
251&sdhci0 {
252	status = "okay";
253	no-1-8-v;
254	disable-wp;
255	xlnx,mio_bank = <0>;
256};
257
258&sdhci1 {
259	status = "okay";
260	bus-width = <0x4>;
261	xlnx,mio_bank = <0>;
262	non-removable;
263	disable-wp;
264	cap-power-off-card;
265	mmc-pwrseq = <&sdio_pwrseq>;
266	vqmmc-supply = <&wmmcsdio_fixed>;
267	#address-cells = <1>;
268	#size-cells = <0>;
269	wlcore: wifi@2 {
270		compatible = "ti,wl1831";
271		reg = <2>;
272		interrupt-parent = <&gpio>;
273		interrupts = <76 IRQ_TYPE_EDGE_RISING>; /* MIO76 WLAN_IRQ 1V8 */
274	};
275};
276
277&serdes {
278	status = "okay";
279};
280
281&spi0 { /* Low Speed connector */
282	status = "okay";
283	label = "LS-SPI0";
284	num-cs = <1>;
285};
286
287&spi1 { /* High Speed connector */
288	status = "okay";
289	label = "HS-SPI1";
290	num-cs = <1>;
291};
292
293&uart0 {
294	status = "okay";
295	bluetooth {
296		compatible = "ti,wl1831-st";
297		enable-gpios = <&gpio 8 GPIO_ACTIVE_HIGH>;
298	};
299};
300
301&uart1 {
302	status = "okay";
303
304};
305
306/* ULPI SMSC USB3320 */
307&usb0 {
308	status = "okay";
309};
310
311&dwc3_0 {
312	status = "okay";
313	dr_mode = "peripheral";
314	phy-names = "usb3-phy";
315	phys = <&lane2 PHY_TYPE_USB3 0 0 26000000>;
316	maximum-speed = "super-speed";
317};
318
319/* ULPI SMSC USB3320 */
320&usb1 {
321	status = "okay";
322};
323
324&dwc3_1 {
325	status = "okay";
326	dr_mode = "host";
327	phy-names = "usb3-phy";
328	phys = <&lane3 PHY_TYPE_USB3 1 0 26000000>;
329	maximum-speed = "super-speed";
330};
331
332&watchdog0 {
333	status = "okay";
334};
335
336&xilinx_ams {
337	status = "okay";
338};
339
340&ams_ps {
341	status = "okay";
342};
343