1 /* SPDX-License-Identifier: GPL-2.0-only */
8 compatible = "sifive,fu740-c000", "sifive,fu740";
23 compatible = "sifive,bullet0", "riscv";
25 i-cache-block-size = <64>;
27 i-cache-size = <16384>;
28 next-level-cache = <&ccache>;
30 riscv,isa = "rv64imac";
31 // the S7 core does not support Supervisor mode and has no FPU
33 cpu0_intc: interrupt-controller {
34 #interrupt-cells = <1>;
35 compatible = "riscv,cpu-intc";
40 compatible = "sifive,bullet0", "riscv";
41 d-cache-block-size = <64>;
43 d-cache-size = <32768>;
47 i-cache-block-size = <64>;
49 i-cache-size = <32768>;
52 mmu-type = "riscv,sv39";
53 next-level-cache = <&ccache>;
55 riscv,isa = "rv64imafdc";
57 cpu1_intc: interrupt-controller {
58 #interrupt-cells = <1>;
59 compatible = "riscv,cpu-intc";
64 compatible = "sifive,bullet0", "riscv";
65 d-cache-block-size = <64>;
67 d-cache-size = <32768>;
71 i-cache-block-size = <64>;
73 i-cache-size = <32768>;
76 mmu-type = "riscv,sv39";
77 next-level-cache = <&ccache>;
79 riscv,isa = "rv64imafdc";
81 cpu2_intc: interrupt-controller {
82 #interrupt-cells = <1>;
83 compatible = "riscv,cpu-intc";
88 compatible = "sifive,bullet0", "riscv";
89 d-cache-block-size = <64>;
91 d-cache-size = <32768>;
95 i-cache-block-size = <64>;
97 i-cache-size = <32768>;
100 mmu-type = "riscv,sv39";
101 next-level-cache = <&ccache>;
103 riscv,isa = "rv64imafdc";
105 cpu3_intc: interrupt-controller {
106 #interrupt-cells = <1>;
107 compatible = "riscv,cpu-intc";
108 interrupt-controller;
112 compatible = "sifive,bullet0", "riscv";
113 d-cache-block-size = <64>;
115 d-cache-size = <32768>;
119 i-cache-block-size = <64>;
120 i-cache-sets = <128>;
121 i-cache-size = <32768>;
124 mmu-type = "riscv,sv39";
125 next-level-cache = <&ccache>;
127 riscv,isa = "rv64imafdc";
129 cpu4_intc: interrupt-controller {
130 #interrupt-cells = <1>;
131 compatible = "riscv,cpu-intc";
132 interrupt-controller;
161 #address-cells = <2>;
163 compatible = "simple-bus";
165 // clint is mainly used by openSBI and not the OS, since interrupts-extended currently only
166 // contains machine mode interrupts which the OS will ignore if not running in machine mode
167 clint: clint@2000000 {
168 compatible = "riscv,clint0";
169 //TODO Add RISCV_M_SOFT_IRQ and RISCV_M_TIME_IRQ macros for better readability
170 interrupts-extended = <&cpu0_intc 3 &cpu0_intc 7
171 &cpu1_intc 3 &cpu1_intc 7
172 &cpu2_intc 3 &cpu2_intc 7
173 &cpu3_intc 3 &cpu3_intc 7
174 &cpu4_intc 3 &cpu4_intc 7>;
175 reg = <0x0 0x2000000 0x0 0x10000>;
177 plic0: interrupt-controller@c000000 {
178 #interrupt-cells = <1>;
179 #address-cells = <0>;
180 compatible = "sifive,fu540-c000-plic", "sifive,plic-1.0.0";
181 reg = <0x0 0xc000000 0x0 0x4000000>;
183 interrupt-controller;
184 interrupts-extended =
185 <&cpu0_intc 0xffffffff>,
186 <&cpu1_intc 0xffffffff>, <&cpu1_intc 9>,
187 <&cpu2_intc 0xffffffff>, <&cpu2_intc 9>,
188 <&cpu3_intc 0xffffffff>, <&cpu3_intc 9>,
189 <&cpu4_intc 0xffffffff>, <&cpu4_intc 9>;
191 prci: clock-controller@10000000 {
192 compatible = "sifive,fu740-c000-prci";
193 reg = <0x0 0x10000000 0x0 0x1000>;
194 clocks = <&hfclk>, <&rtcclk>;
198 uart0: serial@10010000 {
199 compatible = "sifive,fu740-c000-uart", "sifive,uart0";
200 reg = <0x0 0x10010000 0x0 0x1000>;
201 interrupt-parent = <&plic0>;
206 uart1: serial@10011000 {
207 compatible = "sifive,fu740-c000-uart", "sifive,uart0";
208 reg = <0x0 0x10011000 0x0 0x1000>;
209 interrupt-parent = <&plic0>;
215 compatible = "sifive,fu740-c000-i2c", "sifive,i2c0";
216 reg = <0x0 0x10030000 0x0 0x1000>;
217 interrupt-parent = <&plic0>;
222 #address-cells = <1>;
227 compatible = "sifive,fu740-c000-i2c", "sifive,i2c0";
228 reg = <0x0 0x10031000 0x0 0x1000>;
229 interrupt-parent = <&plic0>;
234 #address-cells = <1>;
238 qspi0: spi@10040000 {
239 compatible = "sifive,fu740-c000-spi", "sifive,spi0";
240 reg = <0x0 0x10040000 0x0 0x1000>,
241 <0x0 0x20000000 0x0 0x10000000>;
242 interrupt-parent = <&plic0>;
245 #address-cells = <1>;
249 qspi1: spi@10041000 {
250 compatible = "sifive,fu740-c000-spi", "sifive,spi0";
251 reg = <0x0 0x10041000 0x0 0x1000>,
252 <0x0 0x30000000 0x0 0x10000000>;
253 interrupt-parent = <&plic0>;
256 #address-cells = <1>;
261 compatible = "sifive,fu740-c000-spi", "sifive,spi0";
262 reg = <0x0 0x10050000 0x0 0x1000>;
263 interrupt-parent = <&plic0>;
266 #address-cells = <1>;
270 eth0: ethernet@10090000 {
271 compatible = "sifive,fu540-c000-gem";
272 interrupt-parent = <&plic0>;
274 reg = <0x0 0x10090000 0x0 0x2000>,
275 <0x0 0x100a0000 0x0 0x1000>;
276 local-mac-address = [00 00 00 00 00 00];
277 clock-names = "pclk", "hclk";
280 #address-cells = <1>;
283 phandle = <0x13>; //TODO remove
286 compatible = "sifive,fu740-c000-pwm", "sifive,pwm0";
287 reg = <0x0 0x10020000 0x0 0x1000>;
288 interrupt-parent = <&plic0>;
289 interrupts = <44>, <45>, <46>, <47>;
295 compatible = "sifive,fu740-c000-pwm", "sifive,pwm0";
296 reg = <0x0 0x10021000 0x0 0x1000>;
297 interrupt-parent = <&plic0>;
298 interrupts = <48>, <49>, <50>, <51>;
303 ccache: cache-controller@2010000 {
304 compatible = "sifive,fu740-c000-ccache", "cache";
305 cache-block-size = <64>;
308 cache-size = <2097152>;
310 interrupt-parent = <&plic0>;
311 interrupts = <19>, <21>, <22>, <20>;
312 reg = <0x0 0x2010000 0x0 0x1000>;
314 gpio: gpio@10060000 {
315 compatible = "sifive,fu740-c000-gpio", "sifive,gpio0";
316 interrupt-parent = <&plic0>;
317 interrupts = <23>, <24>, <25>, <26>, <27>, <28>, <29>,
318 <30>, <31>, <32>, <33>, <34>, <35>, <36>,
320 reg = <0x0 0x10060000 0x0 0x1000>;
323 interrupt-controller;
324 #interrupt-cells = <2>;
329 compatible = "sifive,fu740-pcie";
330 #address-cells = <3>;
332 #interrupt-cells = <1>;
333 reg = <0xe 0x00000000 0x0 0x80000000>,
334 <0xd 0xf0000000 0x0 0x10000000>,
335 <0x0 0x100d0000 0x0 0x1000>;
336 reg-names = "dbi", "config", "mgmt";
339 bus-range = <0x0 0xff>;
341 //ranges = <0x81000000 0x0 0x60080000 0x0 0x60080000 0x0 0x10000>, /* I/O */
342 // <0x82000000 0x0 0x60090000 0x0 0x60090000 0x0 0xff70000>, /* mem */
343 // <0x82000000 0x0 0x70000000 0x0 0x70000000 0x0 0x1000000>, /* mem */
344 // <0xc3000000 0x20 0x00000000 0x20 0x00000000 0x20 0x00000000>; /* mem prefetchable */
345 ranges = <0x81000000 0x00 0x60080000 0x00 0x60080000 0x00 0x10000 0x82000000 0x00 0x60090000 0x00 0x60090000 0x00 0xff70000 0x82000000 0x00 0x70000000 0x00 0x70000000 0x00 0x10000000 0xc3000000 0x20 0x00 0x20 0x00 0x20 0x00>;
347 interrupts = <56>, <57>, <58>, <59>, <60>, <61>, <62>, <63>, <64>;
348 interrupt-names = "msi", "inta", "intb", "intc", "intd";
349 interrupt-parent = <&plic0>;
350 interrupt-map-mask = <0x0 0x0 0x0 0x7>;
351 interrupt-map = <0x0 0x0 0x0 0x1 &plic0 57>,
352 <0x0 0x0 0x0 0x2 &plic0 58>,
353 <0x0 0x0 0x0 0x3 &plic0 59>,
354 <0x0 0x0 0x0 0x4 &plic0 60>;
355 clock-names = "pcie_aux";
357 pwren-gpios = <&gpio 5 0>;
358 reset-gpios = <&gpio 8 0>;