xref: /OK3568_Linux_fs/kernel/arch/riscv/boot/dts/sifive/fu540-c000.dtsi (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun// SPDX-License-Identifier: (GPL-2.0 OR MIT)
2*4882a593Smuzhiyun/* Copyright (c) 2018-2019 SiFive, Inc */
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun/dts-v1/;
5*4882a593Smuzhiyun
6*4882a593Smuzhiyun#include <dt-bindings/clock/sifive-fu540-prci.h>
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun/ {
9*4882a593Smuzhiyun	#address-cells = <2>;
10*4882a593Smuzhiyun	#size-cells = <2>;
11*4882a593Smuzhiyun	compatible = "sifive,fu540-c000", "sifive,fu540";
12*4882a593Smuzhiyun
13*4882a593Smuzhiyun	aliases {
14*4882a593Smuzhiyun		serial0 = &uart0;
15*4882a593Smuzhiyun		serial1 = &uart1;
16*4882a593Smuzhiyun		ethernet0 = &eth0;
17*4882a593Smuzhiyun	};
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun	chosen {
20*4882a593Smuzhiyun	};
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun	cpus {
23*4882a593Smuzhiyun		#address-cells = <1>;
24*4882a593Smuzhiyun		#size-cells = <0>;
25*4882a593Smuzhiyun		cpu0: cpu@0 {
26*4882a593Smuzhiyun			compatible = "sifive,e51", "sifive,rocket0", "riscv";
27*4882a593Smuzhiyun			device_type = "cpu";
28*4882a593Smuzhiyun			i-cache-block-size = <64>;
29*4882a593Smuzhiyun			i-cache-sets = <128>;
30*4882a593Smuzhiyun			i-cache-size = <16384>;
31*4882a593Smuzhiyun			reg = <0>;
32*4882a593Smuzhiyun			riscv,isa = "rv64imac";
33*4882a593Smuzhiyun			status = "disabled";
34*4882a593Smuzhiyun			cpu0_intc: interrupt-controller {
35*4882a593Smuzhiyun				#interrupt-cells = <1>;
36*4882a593Smuzhiyun				compatible = "riscv,cpu-intc";
37*4882a593Smuzhiyun				interrupt-controller;
38*4882a593Smuzhiyun			};
39*4882a593Smuzhiyun		};
40*4882a593Smuzhiyun		cpu1: cpu@1 {
41*4882a593Smuzhiyun			compatible = "sifive,u54-mc", "sifive,rocket0", "riscv";
42*4882a593Smuzhiyun			d-cache-block-size = <64>;
43*4882a593Smuzhiyun			d-cache-sets = <64>;
44*4882a593Smuzhiyun			d-cache-size = <32768>;
45*4882a593Smuzhiyun			d-tlb-sets = <1>;
46*4882a593Smuzhiyun			d-tlb-size = <32>;
47*4882a593Smuzhiyun			device_type = "cpu";
48*4882a593Smuzhiyun			i-cache-block-size = <64>;
49*4882a593Smuzhiyun			i-cache-sets = <64>;
50*4882a593Smuzhiyun			i-cache-size = <32768>;
51*4882a593Smuzhiyun			i-tlb-sets = <1>;
52*4882a593Smuzhiyun			i-tlb-size = <32>;
53*4882a593Smuzhiyun			mmu-type = "riscv,sv39";
54*4882a593Smuzhiyun			reg = <1>;
55*4882a593Smuzhiyun			riscv,isa = "rv64imafdc";
56*4882a593Smuzhiyun			tlb-split;
57*4882a593Smuzhiyun			next-level-cache = <&l2cache>;
58*4882a593Smuzhiyun			cpu1_intc: interrupt-controller {
59*4882a593Smuzhiyun				#interrupt-cells = <1>;
60*4882a593Smuzhiyun				compatible = "riscv,cpu-intc";
61*4882a593Smuzhiyun				interrupt-controller;
62*4882a593Smuzhiyun			};
63*4882a593Smuzhiyun		};
64*4882a593Smuzhiyun		cpu2: cpu@2 {
65*4882a593Smuzhiyun			compatible = "sifive,u54-mc", "sifive,rocket0", "riscv";
66*4882a593Smuzhiyun			d-cache-block-size = <64>;
67*4882a593Smuzhiyun			d-cache-sets = <64>;
68*4882a593Smuzhiyun			d-cache-size = <32768>;
69*4882a593Smuzhiyun			d-tlb-sets = <1>;
70*4882a593Smuzhiyun			d-tlb-size = <32>;
71*4882a593Smuzhiyun			device_type = "cpu";
72*4882a593Smuzhiyun			i-cache-block-size = <64>;
73*4882a593Smuzhiyun			i-cache-sets = <64>;
74*4882a593Smuzhiyun			i-cache-size = <32768>;
75*4882a593Smuzhiyun			i-tlb-sets = <1>;
76*4882a593Smuzhiyun			i-tlb-size = <32>;
77*4882a593Smuzhiyun			mmu-type = "riscv,sv39";
78*4882a593Smuzhiyun			reg = <2>;
79*4882a593Smuzhiyun			riscv,isa = "rv64imafdc";
80*4882a593Smuzhiyun			tlb-split;
81*4882a593Smuzhiyun			next-level-cache = <&l2cache>;
82*4882a593Smuzhiyun			cpu2_intc: interrupt-controller {
83*4882a593Smuzhiyun				#interrupt-cells = <1>;
84*4882a593Smuzhiyun				compatible = "riscv,cpu-intc";
85*4882a593Smuzhiyun				interrupt-controller;
86*4882a593Smuzhiyun			};
87*4882a593Smuzhiyun		};
88*4882a593Smuzhiyun		cpu3: cpu@3 {
89*4882a593Smuzhiyun			compatible = "sifive,u54-mc", "sifive,rocket0", "riscv";
90*4882a593Smuzhiyun			d-cache-block-size = <64>;
91*4882a593Smuzhiyun			d-cache-sets = <64>;
92*4882a593Smuzhiyun			d-cache-size = <32768>;
93*4882a593Smuzhiyun			d-tlb-sets = <1>;
94*4882a593Smuzhiyun			d-tlb-size = <32>;
95*4882a593Smuzhiyun			device_type = "cpu";
96*4882a593Smuzhiyun			i-cache-block-size = <64>;
97*4882a593Smuzhiyun			i-cache-sets = <64>;
98*4882a593Smuzhiyun			i-cache-size = <32768>;
99*4882a593Smuzhiyun			i-tlb-sets = <1>;
100*4882a593Smuzhiyun			i-tlb-size = <32>;
101*4882a593Smuzhiyun			mmu-type = "riscv,sv39";
102*4882a593Smuzhiyun			reg = <3>;
103*4882a593Smuzhiyun			riscv,isa = "rv64imafdc";
104*4882a593Smuzhiyun			tlb-split;
105*4882a593Smuzhiyun			next-level-cache = <&l2cache>;
106*4882a593Smuzhiyun			cpu3_intc: interrupt-controller {
107*4882a593Smuzhiyun				#interrupt-cells = <1>;
108*4882a593Smuzhiyun				compatible = "riscv,cpu-intc";
109*4882a593Smuzhiyun				interrupt-controller;
110*4882a593Smuzhiyun			};
111*4882a593Smuzhiyun		};
112*4882a593Smuzhiyun		cpu4: cpu@4 {
113*4882a593Smuzhiyun			compatible = "sifive,u54-mc", "sifive,rocket0", "riscv";
114*4882a593Smuzhiyun			d-cache-block-size = <64>;
115*4882a593Smuzhiyun			d-cache-sets = <64>;
116*4882a593Smuzhiyun			d-cache-size = <32768>;
117*4882a593Smuzhiyun			d-tlb-sets = <1>;
118*4882a593Smuzhiyun			d-tlb-size = <32>;
119*4882a593Smuzhiyun			device_type = "cpu";
120*4882a593Smuzhiyun			i-cache-block-size = <64>;
121*4882a593Smuzhiyun			i-cache-sets = <64>;
122*4882a593Smuzhiyun			i-cache-size = <32768>;
123*4882a593Smuzhiyun			i-tlb-sets = <1>;
124*4882a593Smuzhiyun			i-tlb-size = <32>;
125*4882a593Smuzhiyun			mmu-type = "riscv,sv39";
126*4882a593Smuzhiyun			reg = <4>;
127*4882a593Smuzhiyun			riscv,isa = "rv64imafdc";
128*4882a593Smuzhiyun			tlb-split;
129*4882a593Smuzhiyun			next-level-cache = <&l2cache>;
130*4882a593Smuzhiyun			cpu4_intc: interrupt-controller {
131*4882a593Smuzhiyun				#interrupt-cells = <1>;
132*4882a593Smuzhiyun				compatible = "riscv,cpu-intc";
133*4882a593Smuzhiyun				interrupt-controller;
134*4882a593Smuzhiyun			};
135*4882a593Smuzhiyun		};
136*4882a593Smuzhiyun	};
137*4882a593Smuzhiyun	soc {
138*4882a593Smuzhiyun		#address-cells = <2>;
139*4882a593Smuzhiyun		#size-cells = <2>;
140*4882a593Smuzhiyun		compatible = "sifive,fu540-c000", "sifive,fu540", "simple-bus";
141*4882a593Smuzhiyun		ranges;
142*4882a593Smuzhiyun		plic0: interrupt-controller@c000000 {
143*4882a593Smuzhiyun			#interrupt-cells = <1>;
144*4882a593Smuzhiyun			compatible = "sifive,plic-1.0.0";
145*4882a593Smuzhiyun			reg = <0x0 0xc000000 0x0 0x4000000>;
146*4882a593Smuzhiyun			riscv,ndev = <53>;
147*4882a593Smuzhiyun			interrupt-controller;
148*4882a593Smuzhiyun			interrupts-extended = <
149*4882a593Smuzhiyun				&cpu0_intc 0xffffffff
150*4882a593Smuzhiyun				&cpu1_intc 0xffffffff &cpu1_intc 9
151*4882a593Smuzhiyun				&cpu2_intc 0xffffffff &cpu2_intc 9
152*4882a593Smuzhiyun				&cpu3_intc 0xffffffff &cpu3_intc 9
153*4882a593Smuzhiyun				&cpu4_intc 0xffffffff &cpu4_intc 9>;
154*4882a593Smuzhiyun		};
155*4882a593Smuzhiyun		prci: clock-controller@10000000 {
156*4882a593Smuzhiyun			compatible = "sifive,fu540-c000-prci";
157*4882a593Smuzhiyun			reg = <0x0 0x10000000 0x0 0x1000>;
158*4882a593Smuzhiyun			clocks = <&hfclk>, <&rtcclk>;
159*4882a593Smuzhiyun			#clock-cells = <1>;
160*4882a593Smuzhiyun		};
161*4882a593Smuzhiyun		uart0: serial@10010000 {
162*4882a593Smuzhiyun			compatible = "sifive,fu540-c000-uart", "sifive,uart0";
163*4882a593Smuzhiyun			reg = <0x0 0x10010000 0x0 0x1000>;
164*4882a593Smuzhiyun			interrupt-parent = <&plic0>;
165*4882a593Smuzhiyun			interrupts = <4>;
166*4882a593Smuzhiyun			clocks = <&prci PRCI_CLK_TLCLK>;
167*4882a593Smuzhiyun			status = "disabled";
168*4882a593Smuzhiyun		};
169*4882a593Smuzhiyun		dma: dma-controller@3000000 {
170*4882a593Smuzhiyun			compatible = "sifive,fu540-c000-pdma";
171*4882a593Smuzhiyun			reg = <0x0 0x3000000 0x0 0x8000>;
172*4882a593Smuzhiyun			interrupt-parent = <&plic0>;
173*4882a593Smuzhiyun			interrupts = <23 24 25 26 27 28 29 30>;
174*4882a593Smuzhiyun			#dma-cells = <1>;
175*4882a593Smuzhiyun		};
176*4882a593Smuzhiyun		uart1: serial@10011000 {
177*4882a593Smuzhiyun			compatible = "sifive,fu540-c000-uart", "sifive,uart0";
178*4882a593Smuzhiyun			reg = <0x0 0x10011000 0x0 0x1000>;
179*4882a593Smuzhiyun			interrupt-parent = <&plic0>;
180*4882a593Smuzhiyun			interrupts = <5>;
181*4882a593Smuzhiyun			clocks = <&prci PRCI_CLK_TLCLK>;
182*4882a593Smuzhiyun			status = "disabled";
183*4882a593Smuzhiyun		};
184*4882a593Smuzhiyun		i2c0: i2c@10030000 {
185*4882a593Smuzhiyun			compatible = "sifive,fu540-c000-i2c", "sifive,i2c0";
186*4882a593Smuzhiyun			reg = <0x0 0x10030000 0x0 0x1000>;
187*4882a593Smuzhiyun			interrupt-parent = <&plic0>;
188*4882a593Smuzhiyun			interrupts = <50>;
189*4882a593Smuzhiyun			clocks = <&prci PRCI_CLK_TLCLK>;
190*4882a593Smuzhiyun			reg-shift = <2>;
191*4882a593Smuzhiyun			reg-io-width = <1>;
192*4882a593Smuzhiyun			#address-cells = <1>;
193*4882a593Smuzhiyun			#size-cells = <0>;
194*4882a593Smuzhiyun			status = "disabled";
195*4882a593Smuzhiyun		};
196*4882a593Smuzhiyun		qspi0: spi@10040000 {
197*4882a593Smuzhiyun			compatible = "sifive,fu540-c000-spi", "sifive,spi0";
198*4882a593Smuzhiyun			reg = <0x0 0x10040000 0x0 0x1000
199*4882a593Smuzhiyun			       0x0 0x20000000 0x0 0x10000000>;
200*4882a593Smuzhiyun			interrupt-parent = <&plic0>;
201*4882a593Smuzhiyun			interrupts = <51>;
202*4882a593Smuzhiyun			clocks = <&prci PRCI_CLK_TLCLK>;
203*4882a593Smuzhiyun			#address-cells = <1>;
204*4882a593Smuzhiyun			#size-cells = <0>;
205*4882a593Smuzhiyun			status = "disabled";
206*4882a593Smuzhiyun		};
207*4882a593Smuzhiyun		qspi1: spi@10041000 {
208*4882a593Smuzhiyun			compatible = "sifive,fu540-c000-spi", "sifive,spi0";
209*4882a593Smuzhiyun			reg = <0x0 0x10041000 0x0 0x1000
210*4882a593Smuzhiyun			       0x0 0x30000000 0x0 0x10000000>;
211*4882a593Smuzhiyun			interrupt-parent = <&plic0>;
212*4882a593Smuzhiyun			interrupts = <52>;
213*4882a593Smuzhiyun			clocks = <&prci PRCI_CLK_TLCLK>;
214*4882a593Smuzhiyun			#address-cells = <1>;
215*4882a593Smuzhiyun			#size-cells = <0>;
216*4882a593Smuzhiyun			status = "disabled";
217*4882a593Smuzhiyun		};
218*4882a593Smuzhiyun		qspi2: spi@10050000 {
219*4882a593Smuzhiyun			compatible = "sifive,fu540-c000-spi", "sifive,spi0";
220*4882a593Smuzhiyun			reg = <0x0 0x10050000 0x0 0x1000>;
221*4882a593Smuzhiyun			interrupt-parent = <&plic0>;
222*4882a593Smuzhiyun			interrupts = <6>;
223*4882a593Smuzhiyun			clocks = <&prci PRCI_CLK_TLCLK>;
224*4882a593Smuzhiyun			#address-cells = <1>;
225*4882a593Smuzhiyun			#size-cells = <0>;
226*4882a593Smuzhiyun			status = "disabled";
227*4882a593Smuzhiyun		};
228*4882a593Smuzhiyun		eth0: ethernet@10090000 {
229*4882a593Smuzhiyun			compatible = "sifive,fu540-c000-gem";
230*4882a593Smuzhiyun			interrupt-parent = <&plic0>;
231*4882a593Smuzhiyun			interrupts = <53>;
232*4882a593Smuzhiyun			reg = <0x0 0x10090000 0x0 0x2000
233*4882a593Smuzhiyun			       0x0 0x100a0000 0x0 0x1000>;
234*4882a593Smuzhiyun			local-mac-address = [00 00 00 00 00 00];
235*4882a593Smuzhiyun			clock-names = "pclk", "hclk";
236*4882a593Smuzhiyun			clocks = <&prci PRCI_CLK_GEMGXLPLL>,
237*4882a593Smuzhiyun				 <&prci PRCI_CLK_GEMGXLPLL>;
238*4882a593Smuzhiyun			#address-cells = <1>;
239*4882a593Smuzhiyun			#size-cells = <0>;
240*4882a593Smuzhiyun			status = "disabled";
241*4882a593Smuzhiyun		};
242*4882a593Smuzhiyun		pwm0: pwm@10020000 {
243*4882a593Smuzhiyun			compatible = "sifive,fu540-c000-pwm", "sifive,pwm0";
244*4882a593Smuzhiyun			reg = <0x0 0x10020000 0x0 0x1000>;
245*4882a593Smuzhiyun			interrupt-parent = <&plic0>;
246*4882a593Smuzhiyun			interrupts = <42 43 44 45>;
247*4882a593Smuzhiyun			clocks = <&prci PRCI_CLK_TLCLK>;
248*4882a593Smuzhiyun			#pwm-cells = <3>;
249*4882a593Smuzhiyun			status = "disabled";
250*4882a593Smuzhiyun		};
251*4882a593Smuzhiyun		pwm1: pwm@10021000 {
252*4882a593Smuzhiyun			compatible = "sifive,fu540-c000-pwm", "sifive,pwm0";
253*4882a593Smuzhiyun			reg = <0x0 0x10021000 0x0 0x1000>;
254*4882a593Smuzhiyun			interrupt-parent = <&plic0>;
255*4882a593Smuzhiyun			interrupts = <46 47 48 49>;
256*4882a593Smuzhiyun			clocks = <&prci PRCI_CLK_TLCLK>;
257*4882a593Smuzhiyun			#pwm-cells = <3>;
258*4882a593Smuzhiyun			status = "disabled";
259*4882a593Smuzhiyun		};
260*4882a593Smuzhiyun		l2cache: cache-controller@2010000 {
261*4882a593Smuzhiyun			compatible = "sifive,fu540-c000-ccache", "cache";
262*4882a593Smuzhiyun			cache-block-size = <64>;
263*4882a593Smuzhiyun			cache-level = <2>;
264*4882a593Smuzhiyun			cache-sets = <1024>;
265*4882a593Smuzhiyun			cache-size = <2097152>;
266*4882a593Smuzhiyun			cache-unified;
267*4882a593Smuzhiyun			interrupt-parent = <&plic0>;
268*4882a593Smuzhiyun			interrupts = <1 2 3>;
269*4882a593Smuzhiyun			reg = <0x0 0x2010000 0x0 0x1000>;
270*4882a593Smuzhiyun		};
271*4882a593Smuzhiyun		gpio: gpio@10060000 {
272*4882a593Smuzhiyun			compatible = "sifive,fu540-c000-gpio", "sifive,gpio0";
273*4882a593Smuzhiyun			interrupt-parent = <&plic0>;
274*4882a593Smuzhiyun			interrupts = <7>, <8>, <9>, <10>, <11>, <12>, <13>,
275*4882a593Smuzhiyun				     <14>, <15>, <16>, <17>, <18>, <19>, <20>,
276*4882a593Smuzhiyun				     <21>, <22>;
277*4882a593Smuzhiyun			reg = <0x0 0x10060000 0x0 0x1000>;
278*4882a593Smuzhiyun			gpio-controller;
279*4882a593Smuzhiyun			#gpio-cells = <2>;
280*4882a593Smuzhiyun			interrupt-controller;
281*4882a593Smuzhiyun			#interrupt-cells = <2>;
282*4882a593Smuzhiyun			clocks = <&prci PRCI_CLK_TLCLK>;
283*4882a593Smuzhiyun			status = "disabled";
284*4882a593Smuzhiyun		};
285*4882a593Smuzhiyun	};
286*4882a593Smuzhiyun};
287