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		#address-cells = <1>;
52		#size-cells = <0>;
53		autorepeat;
54		sw4 {
55			label = "sw4";
56			gpios = <&gpio 23 GPIO_ACTIVE_LOW>;
57			linux,code = <KEY_POWER>;
58			gpio-key,wakeup;
59			autorepeat;
60		};
61	};
62
63	iio-hwmon {
64		compatible = "iio-hwmon";
65		io-channels = <&xilinx_ams 0>, <&xilinx_ams 1>, <&xilinx_ams 2>,
66			      <&xilinx_ams 3>, <&xilinx_ams 4>, <&xilinx_ams 5>,
67			      <&xilinx_ams 6>, <&xilinx_ams 7>, <&xilinx_ams 8>,
68			      <&xilinx_ams 9>, <&xilinx_ams 10>,
69			      <&xilinx_ams 11>, <&xilinx_ams 12>;
70	};
71
72	leds {
73		compatible = "gpio-leds";
74		ds2 {
75			label = "ds2";
76			gpios = <&gpio 20 GPIO_ACTIVE_HIGH>;
77			linux,default-trigger = "heartbeat";
78		};
79
80		ds3 {
81			label = "ds3";
82			gpios = <&gpio 19 GPIO_ACTIVE_HIGH>;
83			linux,default-trigger = "phy0tx"; /* WLAN tx */
84			default-state = "off";
85		};
86
87		ds4 {
88			label = "ds4";
89			gpios = <&gpio 18 GPIO_ACTIVE_HIGH>;
90			linux,default-trigger = "phy0rx"; /* WLAN rx */
91			default-state = "off";
92		};
93
94		ds5 {
95			label = "ds5";
96			gpios = <&gpio 17 GPIO_ACTIVE_HIGH>;
97			linux,default-trigger = "bluetooth-power";
98		};
99
100		vbus_det { /* U5 USB5744 VBUS detection via MIO25 */
101			label = "vbus_det";
102			gpios = <&gpio 25 GPIO_ACTIVE_HIGH>;
103			default-state = "on";
104		};
105	};
106
107	ltc2954: ltc2954 { /* U7 */
108		compatible = "lltc,ltc2954", "lltc,ltc2952";
109		trigger-gpios = <&gpio 26 GPIO_ACTIVE_LOW>; /* INT line - input */
110		/* If there is HW watchdog on mezzanine this signal should be connected there */
111		watchdog-gpios = <&gpio 35 GPIO_ACTIVE_HIGH>; /* MIO on PAD */
112		kill-gpios = <&gpio 34 GPIO_ACTIVE_LOW>; /* KILL signal - output */
113	};
114
115	wmmcsdio_fixed: fixedregulator-mmcsdio {
116		compatible = "regulator-fixed";
117		regulator-name = "wmmcsdio_fixed";
118		regulator-min-microvolt = <3300000>;
119		regulator-max-microvolt = <3300000>;
120		regulator-always-on;
121		regulator-boot-on;
122	};
123
124	sdio_pwrseq: sdio_pwrseq {
125		compatible = "mmc-pwrseq-simple";
126		reset-gpios = <&gpio 7 GPIO_ACTIVE_LOW>; /* WIFI_EN */
127	};
128};
129
130&dcc {
131	status = "okay";
132};
133
134&gpio {
135	status = "okay";
136	gpio-line-names = "UART1_TX", "UART1_RX", "UART0_RX", "UART0_TX", "I2C1_SCL",
137			  "I2C1_SDA", "SPI1_SCLK", "WLAN_EN", "BT_EN", "SPI1_CS",
138			  "SPI1_MISO", "SPI1_MOSI", "I2C_MUX_RESET", "SD0_DAT0", "SD0_DAT1",
139			  "SD0_DAT2", "SD0_DAT3", "PS_LED3", "PS_LED2", "PS_LED1",
140			  "PS_LED0", "SD0_CMD", "SD0_CLK", "GPIO_PB", "SD0_DETECT",
141			  "VBUS_DET", "POWER_INT", "DP_AUX", "DP_HPD", "DP_OE",
142			  "DP_AUX_IN", "INA226_ALERT", "PS_FP_PWR_EN", "PL_PWR_EN", "POWER_KILL",
143			  "", "GPIO-A", "GPIO-B", "SPI0_SCLK", "GPIO-C",
144			  "GPIO-D", "SPI0_CS", "SPI0_MISO", "SPI_MOSI", "GPIO-E",
145			  "GPIO-F", "SD1_D0", "SD1_D1", "SD1_D2", "SD1_D3",
146			  "SD1_CMD", "SD1_CLK", "USB0_CLK", "USB0_DIR", "USB0_DATA2",
147			  "USB0_NXT", "USB0_DATA0", "USB0_DATA1", "USB0_STP", "USB0_DATA3",
148			  "USB0_DATA4", "USB0_DATA5", "USB0_DATA6", "USB0_DATA7", "USB1_CLK",
149			  "USB1_DIR", "USB1_DATA2", "USB1_NXT", "USB1_DATA0", "USB1_DATA1",
150			  "USB1_STP", "USB1_DATA3", "USB1_DATA4", "USB1_DATA5", "USB1_DATA6",
151			  "USB_DATA7", "WLAN_IRQ", "PMIC_IRQ", /* MIO end and EMIO start */
152			  "", "",
153			  "", "", "", "", "", "", "", "", "", "",
154			  "", "", "", "", "", "", "", "", "", "",
155			  "", "", "", "", "", "", "", "", "", "",
156			  "", "", "", "", "", "", "", "", "", "",
157			  "", "", "", "", "", "", "", "", "", "",
158			  "", "", "", "", "", "", "", "", "", "",
159			  "", "", "", "", "", "", "", "", "", "",
160			  "", "", "", "", "", "", "", "", "", "",
161			  "", "", "", "", "", "", "", "", "", "",
162			  "", "", "", "";
163};
164
165&gpu {
166	status = "okay";
167};
168
169&i2c1 {
170	status = "okay";
171	clock-frequency = <100000>;
172	i2c-mux@75 { /* u11 */
173		compatible = "nxp,pca9548";
174		#address-cells = <1>;
175		#size-cells = <0>;
176		reg = <0x75>;
177		i2csw_0: i2c@0 {
178			#address-cells = <1>;
179			#size-cells = <0>;
180			reg = <0>;
181			label = "LS-I2C0";
182		};
183		i2csw_1: i2c@1 {
184			#address-cells = <1>;
185			#size-cells = <0>;
186			reg = <1>;
187			label = "LS-I2C1";
188		};
189		i2csw_2: i2c@2 {
190			#address-cells = <1>;
191			#size-cells = <0>;
192			reg = <2>;
193			label = "HS-I2C2";
194		};
195		i2csw_3: i2c@3 {
196			#address-cells = <1>;
197			#size-cells = <0>;
198			reg = <3>;
199			label = "HS-I2C3";
200		};
201		i2csw_4: i2c@4 {
202			#address-cells = <1>;
203			#size-cells = <0>;
204			reg = <0x4>;
205
206			pmic: pmic@5e { /* Custom TI PMIC u33 */
207				compatible = "ti,tps65086";
208				reg = <0x5e>;
209				interrupt-parent = <&gpio>;
210				interrupts = <77 GPIO_ACTIVE_LOW>;
211				#gpio-cells = <2>;
212				gpio-controller;
213			};
214		};
215		i2csw_5: i2c@5 {
216			#address-cells = <1>;
217			#size-cells = <0>;
218			reg = <5>;
219			/* PS_PMBUS */
220			ina226@40 { /* u35 */
221				compatible = "ti,ina226";
222				reg = <0x40>;
223				shunt-resistor = <10000>;
224				/* MIO31 is alert which should be routed to PMUFW */
225			};
226		};
227		i2csw_6: i2c@6 {
228			#address-cells = <1>;
229			#size-cells = <0>;
230			reg = <6>;
231			/*
232			 * Not Connected
233			 */
234		};
235		i2csw_7: i2c@7 {
236			#address-cells = <1>;
237			#size-cells = <0>;
238			reg = <7>;
239			/*
240			 * usb5744 (DNP) - U5
241			 * 100kHz - this is default freq for us
242			 */
243		};
244	};
245};
246
247&rtc {
248	status = "okay";
249};
250
251/* SD0 only supports 3.3V, no level shifter */
252&sdhci0 {
253	status = "okay";
254	no-1-8-v;
255	disable-wp;
256	xlnx,mio_bank = <0>;
257};
258
259&sdhci1 {
260	status = "okay";
261	bus-width = <0x4>;
262	xlnx,mio_bank = <0>;
263	non-removable;
264	disable-wp;
265	cap-power-off-card;
266	mmc-pwrseq = <&sdio_pwrseq>;
267	vqmmc-supply = <&wmmcsdio_fixed>;
268	#address-cells = <1>;
269	#size-cells = <0>;
270	wlcore: wifi@2 {
271		compatible = "ti,wl1831";
272		reg = <2>;
273		interrupt-parent = <&gpio>;
274		interrupts = <76 IRQ_TYPE_EDGE_RISING>; /* MIO76 WLAN_IRQ 1V8 */
275	};
276};
277
278&serdes {
279	status = "okay";
280};
281
282&spi0 { /* Low Speed connector */
283	status = "okay";
284	label = "LS-SPI0";
285};
286
287&spi1 { /* High Speed connector */
288	status = "okay";
289	label = "HS-SPI1";
290};
291
292&uart0 {
293	status = "okay";
294	bluetooth {
295		compatible = "ti,wl1831-st";
296		enable-gpios = <&gpio 8 GPIO_ACTIVE_HIGH>;
297	};
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	reset-on-timeout;
335};
336
337&xilinx_ams {
338	status = "okay";
339};
340
341&ams_ps {
342	status = "okay";
343};
344