1/*
2 * Copyright (c) 2018 - 2020 Antmicro <www.antmicro.com>
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7/ {
8	#address-cells = <1>;
9	#size-cells = <1>;
10	compatible = "litex,vexriscv", "litex-dev";
11	model = "litex,vexriscv";
12
13
14	chosen {
15		zephyr,entropy = &prbs0;
16	};
17
18	cpus {
19		#address-cells = <1>;
20		#size-cells = <0>;
21		cpu@0 {
22			clock-frequency = <100000000>;
23			compatible = "riscv";
24			device_type = "cpu";
25			reg = <0>;
26			riscv,isa = "rv32imac";
27			status = "okay";
28			timebase-frequency = <32768>;
29		};
30	};
31	soc {
32		#address-cells = <1>;
33		#size-cells = <1>;
34		compatible = "litex,vexriscv";
35		ranges;
36		intc0: interrupt-controller@bc0 {
37			compatible = "vexriscv-intc0";
38			#address-cells = <0>;
39			#interrupt-cells = <2>;
40			interrupt-controller;
41			reg = <0xbc0 0x4 0xfc0 0x4>;
42			reg-names = "irq_mask", "irq_pending";
43			riscv,max-priority = <7>;
44		};
45		uart0: serial@e0001800 {
46			compatible = "litex,uart0";
47			interrupt-parent = <&intc0>;
48			interrupts = <2 10>;
49			reg = <0xe0001800 0x4
50				0xe0001804 0x4
51				0xe0001808 0x4
52				0xe000180c 0x4
53				0xe0001810 0x4
54				0xe0001814 0x4
55				0xe0001818 0x4
56				0xe000181c 0x4>;
57			reg-names =
58				"rxtx",
59				"txfull",
60				"rxempty",
61				"ev_status",
62				"ev_pending",
63				"ev_enable",
64				"txempty",
65				"rxfull";
66			status = "disabled";
67		};
68		spi0: spi@e0002000 {
69			compatible = "litex,spi";
70			reg = <0xe0002000 0x4
71				0xe0002004 0x4
72				0xe0002008 0x4
73				0xe000200c 0x4
74				0xe0002010 0x4
75				0xe0002014 0x4>;
76			reg-names = "control",
77				"status",
78				"mosi",
79				"miso",
80				"cs",
81				"loopback";
82			status = "disabled";
83			#address-cells = <1>;
84			#size-cells = <0>;
85		};
86		timer0: timer@e0002800 {
87			compatible = "litex,timer0";
88			interrupt-parent = <&intc0>;
89			interrupts = <1 0>;
90			reg = <0xe0002800 0x4
91				0xe0002804 0x4
92				0xe0002808 0x4
93				0xe000280c 0x4
94				0xe0002810 0x4
95				0xe0002814 0x4
96				0xe0002818 0x4
97				0xe000281c 0x4
98				0xe0002820 0x4
99				0xe0002824 0x8>;
100			reg-names =
101				"load",
102				"reload",
103				"en",
104				"update_value",
105				"value",
106				"ev_status",
107				"ev_pending",
108				"ev_enable",
109				"uptime_latch",
110				"uptime_cycles";
111			status = "disabled";
112		};
113		eth0: ethernet@e0009800 {
114			compatible = "litex,eth0";
115			interrupt-parent = <&intc0>;
116			interrupts = <3 0>;
117			reg = <0xe0009800 0x4
118				0xe0009804 0x4
119				0xe0009808 0x4
120				0xe000980c 0x4
121				0xe0009810 0x4
122				0xe0009814 0x4
123				0xe0009818 0x4
124				0xe000981c 0x4
125				0xe0009820 0x4
126				0xe0009824 0x4
127				0xe0009828 0x4
128				0xe000982c 0x4
129				0xe0009830 0x4
130				0xe0009834 0x4
131				0xb0000000 0x2000>;
132			local-mac-address = [10 e2 d5 00 00 02];
133			reg-names = "rx_slot",
134				"rx_length",
135				"rx_errors",
136				"rx_ev_status",
137				"rx_ev_pending",
138				"rx_ev_enable",
139				"tx_start",
140				"tx_ready",
141				"tx_level",
142				"tx_slot",
143				"tx_length",
144				"tx_ev_status",
145				"tx_ev_pending",
146				"tx_ev_enable",
147				"buffers";
148			status = "disabled";
149		};
150		dna0: dna@e0003800 {
151			compatible = "litex,dna0";
152			/* DNA data is 57-bits long,
153			so it requires 8 bytes.
154			In LiteX each 32-bit register holds
155			only a single byte of meaningful data,
156			hence 8 registers. */
157			reg = <0xe0003800 0x20>;
158			reg-names = "mem";
159			status = "disabled";
160		};
161		i2c0: i2c@e0005000 {
162			compatible = "litex,i2c";
163			reg = <0xe0005000 0x4 0xe0005004 0x4>;
164			reg-names = "write", "read";
165			#address-cells = <1>;
166			#size-cells = <0>;
167			status = "disabled";
168		};
169		gpio_out: gpio@e0005800 {
170			compatible = "litex,gpio";
171			reg = <0xe0005800 0x4>;
172			reg-names = "control";
173			ngpios = <4>;
174			port-is-output;
175			status = "disabled";
176			gpio-controller;
177			#gpio-cells = <2>;
178		};
179		gpio_in: gpio@e0006000 {
180			compatible = "litex,gpio";
181			reg = <0xe0006000 0x4
182				0xe0006004 0x4
183				0xe0006008 0x4
184				0xe0006010 0x4
185				0xe0006014 0x4>;
186			interrupt-parent = <&intc0>;
187			interrupts = <4 2>;
188			reg-names = "base",
189				"irq_mode",
190				"irq_edge",
191				"irq_pend",
192				"irq_en";
193			ngpios = <4>;
194			status = "disabled";
195			gpio-controller;
196			#gpio-cells = <2>;
197		};
198		prbs0: prbs@e0006800 {
199			compatible = "litex,prbs";
200			reg = <0xe0006800 0x4>;
201			reg-names = "status";
202			status = "disabled";
203		};
204		pwm0: pwm@e0007000 {
205			compatible = "litex,pwm";
206			reg = <0xe0007000 0x4 0xe0007004 0x10 0xe0007014 0x10>;
207			reg-names = "enable", "width", "period";
208			status = "disabled";
209			#pwm-cells = <2>;
210		};
211		i2s_rx: i2s_rx@e000a800 {
212			compatible = "litex,i2s";
213			reg = <0xe000a800 0x4
214				0xe000a804 0x4
215				0xe000a808 0x4
216				0xe000a80c 0x4
217				0xe000a810 0x4
218				0xe000a814 0x4
219				0xb1000000 0x40000>;
220			interrupt-parent = <&intc0>;
221			interrupts = <6 2>;
222			#address-cells = <1>;
223			#size-cells = <0>;
224			reg-names = "ev_status",
225				"ev_pending",
226				"ev_enable",
227				"rx_ctl",
228				"rx_stat",
229				"rx_conf",
230				"fifo";
231			fifo_depth = <256>;
232			status = "disabled";
233		};
234		i2s_tx: i2s_tx@e000b000 {
235			compatible = "litex,i2s";
236			reg = <0xe000b000 0x4
237				0xe000b004 0x4
238				0xe000b008 0x4
239				0xe000b00c 0x4
240				0xe000b010 0x4
241				0xe000b014 0x4
242				0xb2000000 0x40000>;
243			interrupt-parent = <&intc0>;
244			interrupts = <7 2>;
245			#address-cells = <1>;
246			#size-cells = <0>;
247			reg-names = "ev_status",
248				"ev_pending",
249				"ev_enable",
250				"tx_ctl",
251				"tx_stat",
252				"tx_conf",
253				"fifo";
254			fifo_depth = <256>;
255			status = "disabled";
256		};
257		clock-outputs {
258			#address-cells = <1>;
259			#size-cells = <0>;
260			clk0: clock-controller@0 {
261				#clock-cells = <1>;
262				reg = <0>;
263				compatible = "litex,clkout";
264				clock-output-names = "CLK_0";
265				litex,clock-frequency = <11289600>;
266				litex,clock-phase = <0>;
267				litex,clock-duty-num = <1>;
268				litex,clock-duty-den = <2>;
269				litex,clock-margin = <1>;
270				litex,clock-margin-exp = <2>;
271				status = "disabled";
272			};
273			clk1: clock-controller@1 {
274				#clock-cells = <1>;
275				reg = <1>;
276				compatible = "litex,clkout";
277				clock-output-names = "CLK_1";
278				litex,clock-frequency = <22579200>;
279				litex,clock-phase = <0>;
280				litex,clock-duty-num = <1>;
281				litex,clock-duty-den = <2>;
282				litex,clock-margin = <1>;
283				litex,clock-margin-exp = <2>;
284				status = "disabled";
285			};
286		};
287		clock0: clock@e0004800 {
288			compatible = "litex,clk";
289			reg = <0xe0004800 0x4
290				0xe0004804 0x4
291				0xe0004808 0x4
292				0xe000480c 0x4
293				0xe0004810 0x4
294				0xe0004814 0x4
295				0xe0004818 0x4
296				0xe000481c 0x4>;
297			reg-names = "drp_reset",
298				"drp_locked",
299				"drp_read",
300				"drp_write",
301				"drp_drdy",
302				"drp_adr",
303				"drp_dat_w",
304				"drp_dat_r";
305			#clock-cells = <1>;
306			clocks = <&clk0 0>, <&clk1 1>;
307			clock-output-names = "CLK_0", "CLK_1";
308			litex,lock-timeout = <10>;
309			litex,drdy-timeout = <10>;
310			litex,sys-clock-frequency = <100000000>;
311			litex,divclk-divide-min = <1>;
312			litex,divclk-divide-max = <107>;
313			litex,clkfbout-mult-min = <2>;
314			litex,clkfbout-mult-max = <65>;
315			litex,vco-freq-min = <600000000>;
316			litex,vco-freq-max = <1200000000>;
317			litex,clkout-divide-min = <1>;
318			litex,clkout-divide-max = <126>;
319			litex,vco-margin = <0>;
320			status = "disabled";
321		};
322	};
323};
324