1// SPDX-License-Identifier: (GPL-2.0 OR MIT)
2/* Copyright (c) 2020-2021 SiFive, Inc */
3
4/dts-v1/;
5
6#include <dt-bindings/clock/sifive-fu740-prci.h>
7#include <dt-bindings/reset/sifive-fu740-prci.h>
8
9/ {
10	#address-cells = <2>;
11	#size-cells = <2>;
12	compatible = "sifive,fu740-c000", "sifive,fu740";
13
14	aliases {
15		serial0 = &uart0;
16		serial1 = &uart1;
17		ethernet0 = &eth0;
18	};
19
20	chosen {
21	};
22
23	cpus {
24		#address-cells = <1>;
25		#size-cells = <0>;
26		cpu0: cpu@0 {
27			compatible = "sifive,bullet0", "riscv";
28			device_type = "cpu";
29			i-cache-block-size = <64>;
30			i-cache-sets = <128>;
31			i-cache-size = <16384>;
32			next-level-cache = <&ccache>;
33			reg = <0x0>;
34			riscv,isa = "rv64imac";
35			status = "disabled";
36			cpu0_intc: interrupt-controller {
37				#interrupt-cells = <1>;
38				compatible = "riscv,cpu-intc";
39				interrupt-controller;
40			};
41		};
42		cpu1: cpu@1 {
43			compatible = "sifive,bullet0", "riscv";
44			d-cache-block-size = <64>;
45			d-cache-sets = <64>;
46			d-cache-size = <32768>;
47			d-tlb-sets = <1>;
48			d-tlb-size = <40>;
49			device_type = "cpu";
50			i-cache-block-size = <64>;
51			i-cache-sets = <128>;
52			i-cache-size = <32768>;
53			i-tlb-sets = <1>;
54			i-tlb-size = <40>;
55			mmu-type = "riscv,sv39";
56			next-level-cache = <&ccache>;
57			reg = <0x1>;
58			riscv,isa = "rv64imafdc";
59			tlb-split;
60			cpu1_intc: interrupt-controller {
61				#interrupt-cells = <1>;
62				compatible = "riscv,cpu-intc";
63				interrupt-controller;
64			};
65		};
66		cpu2: cpu@2 {
67			compatible = "sifive,bullet0", "riscv";
68			d-cache-block-size = <64>;
69			d-cache-sets = <64>;
70			d-cache-size = <32768>;
71			d-tlb-sets = <1>;
72			d-tlb-size = <40>;
73			device_type = "cpu";
74			i-cache-block-size = <64>;
75			i-cache-sets = <128>;
76			i-cache-size = <32768>;
77			i-tlb-sets = <1>;
78			i-tlb-size = <40>;
79			mmu-type = "riscv,sv39";
80			next-level-cache = <&ccache>;
81			reg = <0x2>;
82			riscv,isa = "rv64imafdc";
83			tlb-split;
84			cpu2_intc: interrupt-controller {
85				#interrupt-cells = <1>;
86				compatible = "riscv,cpu-intc";
87				interrupt-controller;
88			};
89		};
90		cpu3: cpu@3 {
91			compatible = "sifive,bullet0", "riscv";
92			d-cache-block-size = <64>;
93			d-cache-sets = <64>;
94			d-cache-size = <32768>;
95			d-tlb-sets = <1>;
96			d-tlb-size = <40>;
97			device_type = "cpu";
98			i-cache-block-size = <64>;
99			i-cache-sets = <128>;
100			i-cache-size = <32768>;
101			i-tlb-sets = <1>;
102			i-tlb-size = <40>;
103			mmu-type = "riscv,sv39";
104			next-level-cache = <&ccache>;
105			reg = <0x3>;
106			riscv,isa = "rv64imafdc";
107			tlb-split;
108			cpu3_intc: interrupt-controller {
109				#interrupt-cells = <1>;
110				compatible = "riscv,cpu-intc";
111				interrupt-controller;
112			};
113		};
114		cpu4: cpu@4 {
115			compatible = "sifive,bullet0", "riscv";
116			d-cache-block-size = <64>;
117			d-cache-sets = <64>;
118			d-cache-size = <32768>;
119			d-tlb-sets = <1>;
120			d-tlb-size = <40>;
121			device_type = "cpu";
122			i-cache-block-size = <64>;
123			i-cache-sets = <128>;
124			i-cache-size = <32768>;
125			i-tlb-sets = <1>;
126			i-tlb-size = <40>;
127			mmu-type = "riscv,sv39";
128			next-level-cache = <&ccache>;
129			reg = <0x4>;
130			riscv,isa = "rv64imafdc";
131			tlb-split;
132			cpu4_intc: interrupt-controller {
133				#interrupt-cells = <1>;
134				compatible = "riscv,cpu-intc";
135				interrupt-controller;
136			};
137		};
138	};
139	soc {
140		#address-cells = <2>;
141		#size-cells = <2>;
142		compatible = "sifive,fu740-c000", "sifive,fu740", "simple-bus";
143		ranges;
144		plic0: interrupt-controller@c000000 {
145			#interrupt-cells = <1>;
146			compatible = "sifive,plic-1.0.0";
147			reg = <0x0 0xc000000 0x0 0x4000000>;
148			riscv,ndev = <69>;
149			interrupt-controller;
150			interrupts-extended = <
151				&cpu0_intc 0xffffffff
152				&cpu1_intc 0xffffffff &cpu1_intc 9
153				&cpu2_intc 0xffffffff &cpu2_intc 9
154				&cpu3_intc 0xffffffff &cpu3_intc 9
155				&cpu4_intc 0xffffffff &cpu4_intc 9>;
156		};
157		prci: clock-controller@10000000 {
158			compatible = "sifive,fu740-c000-prci";
159			reg = <0x0 0x10000000 0x0 0x1000>;
160			clocks = <&hfclk>, <&rtcclk>;
161			#clock-cells = <1>;
162			#reset-cells = <1>;
163		};
164		uart0: serial@10010000 {
165			compatible = "sifive,fu740-c000-uart", "sifive,uart0";
166			reg = <0x0 0x10010000 0x0 0x1000>;
167			interrupt-parent = <&plic0>;
168			interrupts = <39>;
169			clocks = <&prci PRCI_CLK_PCLK>;
170			status = "disabled";
171		};
172		uart1: serial@10011000 {
173			compatible = "sifive,fu740-c000-uart", "sifive,uart0";
174			reg = <0x0 0x10011000 0x0 0x1000>;
175			interrupt-parent = <&plic0>;
176			interrupts = <40>;
177			clocks = <&prci PRCI_CLK_PCLK>;
178			status = "disabled";
179		};
180		i2c0: i2c@10030000 {
181			compatible = "sifive,fu740-c000-i2c", "sifive,i2c0";
182			reg = <0x0 0x10030000 0x0 0x1000>;
183			interrupt-parent = <&plic0>;
184			interrupts = <52>;
185			clocks = <&prci PRCI_CLK_PCLK>;
186			reg-shift = <2>;
187			reg-io-width = <1>;
188			#address-cells = <1>;
189			#size-cells = <0>;
190			status = "disabled";
191		};
192		i2c1: i2c@10031000 {
193			compatible = "sifive,fu740-c000-i2c", "sifive,i2c0";
194			reg = <0x0 0x10031000 0x0 0x1000>;
195			interrupt-parent = <&plic0>;
196			interrupts = <53>;
197			clocks = <&prci PRCI_CLK_PCLK>;
198			reg-shift = <2>;
199			reg-io-width = <1>;
200			#address-cells = <1>;
201			#size-cells = <0>;
202			status = "disabled";
203		};
204		qspi0: spi@10040000 {
205			compatible = "sifive,fu740-c000-spi", "sifive,spi0";
206			reg = <0x0 0x10040000 0x0 0x1000
207			       0x0 0x20000000 0x0 0x10000000>;
208			interrupt-parent = <&plic0>;
209			interrupts = <41>;
210			clocks = <&prci PRCI_CLK_PCLK>;
211			#address-cells = <1>;
212			#size-cells = <0>;
213			status = "disabled";
214		};
215		qspi1: spi@10041000 {
216			compatible = "sifive,fu740-c000-spi", "sifive,spi0";
217			reg = <0x0 0x10041000 0x0 0x1000
218			       0x0 0x30000000 0x0 0x10000000>;
219			interrupt-parent = <&plic0>;
220			interrupts = <42>;
221			clocks = <&prci PRCI_CLK_PCLK>;
222			#address-cells = <1>;
223			#size-cells = <0>;
224			status = "disabled";
225		};
226		spi0: spi@10050000 {
227			compatible = "sifive,fu740-c000-spi", "sifive,spi0";
228			reg = <0x0 0x10050000 0x0 0x1000>;
229			interrupt-parent = <&plic0>;
230			interrupts = <43>;
231			clocks = <&prci PRCI_CLK_PCLK>;
232			#address-cells = <1>;
233			#size-cells = <0>;
234			status = "disabled";
235		};
236		eth0: ethernet@10090000 {
237			compatible = "sifive,fu540-c000-gem";
238			interrupt-parent = <&plic0>;
239			interrupts = <55>;
240			reg = <0x0 0x10090000 0x0 0x2000
241			       0x0 0x100a0000 0x0 0x1000>;
242			local-mac-address = [00 00 00 00 00 00];
243			clock-names = "pclk", "hclk";
244			clocks = <&prci PRCI_CLK_GEMGXLPLL>,
245				 <&prci PRCI_CLK_GEMGXLPLL>;
246			#address-cells = <1>;
247			#size-cells = <0>;
248			status = "disabled";
249		};
250		pwm0: pwm@10020000 {
251			compatible = "sifive,fu740-c000-pwm", "sifive,pwm0";
252			reg = <0x0 0x10020000 0x0 0x1000>;
253			interrupt-parent = <&plic0>;
254			interrupts = <44 45 46 47>;
255			clocks = <&prci PRCI_CLK_PCLK>;
256			#pwm-cells = <3>;
257			status = "disabled";
258		};
259		pwm1: pwm@10021000 {
260			compatible = "sifive,fu740-c000-pwm", "sifive,pwm0";
261			reg = <0x0 0x10021000 0x0 0x1000>;
262			interrupt-parent = <&plic0>;
263			interrupts = <48 49 50 51>;
264			clocks = <&prci PRCI_CLK_PCLK>;
265			#pwm-cells = <3>;
266			status = "disabled";
267		};
268		ccache: cache-controller@2010000 {
269			compatible = "sifive,fu740-c000-ccache", "cache";
270			cache-block-size = <64>;
271			cache-level = <2>;
272			cache-sets = <2048>;
273			cache-size = <2097152>;
274			cache-unified;
275			interrupt-parent = <&plic0>;
276			interrupts = <19 21 22 20>;
277			reg = <0x0 0x2010000 0x0 0x1000>;
278		};
279		gpio: gpio@10060000 {
280			compatible = "sifive,fu740-c000-gpio", "sifive,gpio0";
281			interrupt-parent = <&plic0>;
282			interrupts = <23>, <24>, <25>, <26>, <27>, <28>, <29>,
283				     <30>, <31>, <32>, <33>, <34>, <35>, <36>,
284				     <37>, <38>;
285			reg = <0x0 0x10060000 0x0 0x1000>;
286			gpio-controller;
287			#gpio-cells = <2>;
288			interrupt-controller;
289			#interrupt-cells = <2>;
290			clocks = <&prci PRCI_CLK_PCLK>;
291			status = "disabled";
292		};
293		pcie@e00000000 {
294			#address-cells = <3>;
295			#interrupt-cells = <1>;
296			#num-lanes = <8>;
297			#size-cells = <2>;
298			compatible = "sifive,fu740-pcie";
299			reg = <0xe 0x00000000 0x1 0x0
300			       0xd 0xf0000000 0x0 0x10000000
301			       0x0 0x100d0000 0x0 0x1000>;
302			reg-names = "dbi", "config", "mgmt";
303			device_type = "pci";
304			dma-coherent;
305			bus-range = <0x0 0xff>;
306			ranges = <0x81000000  0x0 0x60080000  0x0 0x60080000 0x0 0x10000
307				  0x82000000  0x0 0x60090000  0x0 0x60090000 0x0 0xff70000
308				  0x82000000  0x0 0x70000000  0x0 0x70000000 0x0 0x1000000
309				  0xc3000000 0x20 0x00000000 0x20 0x00000000 0x20 0x00000000>;
310			num-lanes = <0x8>;
311			interrupts = <56 57 58 59 60 61 62 63 64>;
312			interrupt-names = "msi", "inta", "intb", "intc", "intd";
313			interrupt-parent = <&plic0>;
314			interrupt-map-mask = <0x0 0x0 0x0 0x7>;
315			interrupt-map = <0x0 0x0 0x0 0x1 &plic0 57>,
316					<0x0 0x0 0x0 0x2 &plic0 58>,
317					<0x0 0x0 0x0 0x3 &plic0 59>,
318					<0x0 0x0 0x0 0x4 &plic0 60>;
319			pwren-gpios = <&gpio 5 0>;
320			reset-gpios = <&gpio 8 0>;
321			clocks = <&prci PRCI_CLK_PCIEAUX>;
322			clock-names = "pcieaux";
323			resets = <&prci PRCI_RST_PCIE_POWER_UP_N>;
324			reset-names = "rst_n";
325
326			status = "okay";
327		};
328	};
329};
330