| /* | 
 |  * Copyright (c) 2021 Katsuhiro Suzuki | 
 |  * | 
 |  * SPDX-License-Identifier: Apache-2.0 | 
 |  */ | 
 |  | 
 | #include <zephyr/dt-bindings/gpio/gpio.h> | 
 | #include <freq.h> | 
 |  | 
 | / { | 
 | 	#address-cells = <1>; | 
 | 	#size-cells = <1>; | 
 | 	compatible = "sifive,FU540-C000", "fu540-dev", "sifive-dev"; | 
 | 	model = "sifive,FU540"; | 
 |  | 
 | 	clocks { | 
 | 		coreclk: core-clk { | 
 | 			#clock-cells = <0>; | 
 | 			compatible = "fixed-clock"; | 
 | 			clock-frequency = <DT_FREQ_M(1000)>; | 
 | 		}; | 
 |  | 
 | 		tlclk: tl-clk { | 
 | 			#clock-cells = <0>; | 
 | 			compatible = "fixed-factor-clock"; | 
 | 			clocks = <&coreclk>; | 
 | 			clock-div = <2>; | 
 | 		}; | 
 | 	}; | 
 |  | 
 | 	cpus { | 
 | 		#address-cells = <1>; | 
 | 		#size-cells = <0>; | 
 |  | 
 | 		cpu@0 { | 
 | 			compatible = "sifive,e51", "riscv"; | 
 | 			device_type = "cpu"; | 
 | 			i-cache-line-size = <0x4000>; | 
 | 			reg = <0x0>; | 
 | 			riscv,isa = "rv64imac_zicsr_zifencei"; | 
 | 			hlic0: interrupt-controller { | 
 | 				compatible = "riscv,cpu-intc"; | 
 | 				#address-cells = <0>; | 
 | 				#interrupt-cells = <1>; | 
 | 				interrupt-controller; | 
 | 			}; | 
 | 		}; | 
 |  | 
 | 		cpu@1 { | 
 | 			compatible = "sifive,u54", "riscv"; | 
 | 			device_type = "cpu"; | 
 | 			mmu-type = "riscv,sv39"; | 
 | 			i-cache-line-size = <0x8000>; | 
 | 			d-cache-line-size = <0x8000>; | 
 | 			reg = <0x1>; | 
 | 			riscv,isa = "rv64gc"; | 
 | 			hlic1: interrupt-controller { | 
 | 				compatible = "riscv,cpu-intc"; | 
 | 				#address-cells = <0>; | 
 | 				#interrupt-cells = <1>; | 
 | 				interrupt-controller; | 
 | 			}; | 
 | 		}; | 
 |  | 
 | 		cpu@2 { | 
 | 			clock-frequency = <0>; | 
 | 			compatible = "sifive,u54", "riscv"; | 
 | 			device_type = "cpu"; | 
 | 			mmu-type = "riscv,sv39"; | 
 | 			i-cache-line-size = <0x8000>; | 
 | 			d-cache-line-size = <0x8000>; | 
 | 			reg = <0x2>; | 
 | 			riscv,isa = "rv64gc"; | 
 | 			hlic2: interrupt-controller { | 
 | 				compatible = "riscv,cpu-intc"; | 
 | 				#address-cells = <0>; | 
 | 				#interrupt-cells = <1>; | 
 | 				interrupt-controller; | 
 | 			}; | 
 | 		}; | 
 |  | 
 | 		cpu@3 { | 
 | 			clock-frequency = <0>; | 
 | 			compatible = "sifive,u54", "riscv"; | 
 | 			device_type = "cpu"; | 
 | 			mmu-type = "riscv,sv39"; | 
 | 			i-cache-line-size = <0x8000>; | 
 | 			d-cache-line-size = <0x8000>; | 
 | 			reg = <0x3>; | 
 | 			riscv,isa = "rv64gc"; | 
 | 			hlic3: interrupt-controller { | 
 | 				compatible = "riscv,cpu-intc"; | 
 | 				#address-cells = <0>; | 
 | 				#interrupt-cells = <1>; | 
 | 				interrupt-controller; | 
 | 			}; | 
 | 		}; | 
 |  | 
 | 		cpu@4 { | 
 | 			clock-frequency = <0>; | 
 | 			compatible = "sifive,u54", "riscv"; | 
 | 			device_type = "cpu"; | 
 | 			mmu-type = "riscv,sv39"; | 
 | 			i-cache-line-size = <0x8000>; | 
 | 			d-cache-line-size = <0x8000>; | 
 | 			reg = <0x4>; | 
 | 			riscv,isa = "rv64gc"; | 
 | 			hlic4: interrupt-controller { | 
 | 				compatible = "riscv,cpu-intc"; | 
 | 				#address-cells = <0>; | 
 | 				#interrupt-cells = <1>; | 
 | 				interrupt-controller; | 
 | 			}; | 
 | 		}; | 
 | 	}; | 
 |  | 
 | 	soc { | 
 | 		#address-cells = <1>; | 
 | 		#size-cells = <1>; | 
 | 		compatible = "fu540-soc", "sifive-soc", "simple-bus"; | 
 | 		ranges; | 
 |  | 
 | 		modeselect: rom@1000 { | 
 | 			compatible = "sifive,modeselect0"; | 
 | 			reg = <0x1000 0x1000>; | 
 | 			reg-names = "mem"; | 
 | 		}; | 
 |  | 
 | 		maskrom: rom@10000 { | 
 | 			compatible = "sifive,maskrom0"; | 
 | 			reg = <0x10000 0x8000>; | 
 | 			reg-names = "mem"; | 
 | 		}; | 
 |  | 
 | 		dtim: dtim@1000000 { | 
 | 			compatible = "sifive,dtim0"; | 
 | 			reg = <0x1000000 0x2000>; | 
 | 			reg-names = "mem"; | 
 | 		}; | 
 |  | 
 | 		itim0: itim0@1800000 { | 
 | 			compatible = "sifive,itim0"; | 
 | 			reg = <0x1800000 0x2000>; | 
 | 			reg-names = "mem"; | 
 | 		}; | 
 |  | 
 | 		itim1: itim1@1808000 { | 
 | 			compatible = "sifive,itim0"; | 
 | 			reg = <0x1808000 0x7000>; | 
 | 			reg-names = "mem"; | 
 | 		}; | 
 |  | 
 | 		itim2: itim2@1810000 { | 
 | 			compatible = "sifive,itim0"; | 
 | 			reg = <0x1810000 0x7000>; | 
 | 			reg-names = "mem"; | 
 | 		}; | 
 |  | 
 | 		itim3: itim3@1818000 { | 
 | 			compatible = "sifive,itim0"; | 
 | 			reg = <0x1818000 0x7000>; | 
 | 			reg-names = "mem"; | 
 | 		}; | 
 |  | 
 | 		itim4: itim4@1820000 { | 
 | 			compatible = "sifive,itim0"; | 
 | 			reg = <0x1820000 0x7000>; | 
 | 			reg-names = "mem"; | 
 | 		}; | 
 |  | 
 |  | 
 | 		clint: clint@2000000 { | 
 | 			compatible = "sifive,clint0"; | 
 | 			interrupts-extended = <&hlic0 3 &hlic0 7 | 
 | 							&hlic1 3 &hlic1 7 | 
 | 							&hlic2 3 &hlic2 7 | 
 | 							&hlic3 3 &hlic3 7 | 
 | 							&hlic4 3 &hlic4 7>; | 
 | 			interrupt-names = "soft0", "timer0", "soft1", "timer1", | 
 | 							"soft2", "timer2", "soft3", "timer3", | 
 | 							"soft4", "timer4"; | 
 | 			reg = <0x2000000 0x10000>; | 
 | 		}; | 
 |  | 
 | 		mtimer: timer@200bff8 { | 
 | 			compatible = "riscv,machine-timer"; | 
 | 			interrupts-extended = <&hlic0 7 | 
 | 						&hlic1 7 | 
 | 						&hlic2 7 | 
 | 						&hlic3 7 | 
 | 						&hlic4 7>; | 
 | 			reg = <0x200bff8 0x8 0x2004000 0x8>; | 
 | 			reg-names = "mtime", "mtimecmp"; | 
 | 		}; | 
 |  | 
 | 		l2lim: l2lim@8000000 { | 
 | 			compatible = "sifive,l2lim0"; | 
 | 			reg = <0x8000000 0x2000000>; | 
 | 			reg-names = "mem"; | 
 | 		}; | 
 |  | 
 | 		plic: interrupt-controller@c000000 { | 
 | 			compatible = "sifive,plic-1.0.0"; | 
 | 			#interrupt-cells = <2>; | 
 | 			#address-cells = <1>; | 
 | 			interrupt-controller; | 
 | 			interrupts-extended = <&hlic0 11 | 
 | 							&hlic1 11 &hlic1 9 | 
 | 							&hlic2 11 &hlic2 9 | 
 | 							&hlic3 11 &hlic3 9 | 
 | 							&hlic4 11 &hlic4 9>; | 
 | 			reg = <0x0c000000 0x04000000>; | 
 | 			riscv,max-priority = <7>; | 
 | 			riscv,ndev = <52>; | 
 | 		}; | 
 |  | 
 | 		uart0: serial@10010000 { | 
 | 			compatible = "sifive,uart0"; | 
 | 			interrupt-parent = <&plic>; | 
 | 			interrupts = <4 1>; | 
 | 			reg = <0x10010000 0x1000>; | 
 | 			reg-names = "control"; | 
 | 			status = "disabled"; | 
 | 		}; | 
 |  | 
 | 		uart1: serial@10011000 { | 
 | 			compatible = "sifive,uart0"; | 
 | 			interrupt-parent = <&plic>; | 
 | 			interrupts = <5 1>; | 
 | 			reg = <0x10011000 0x1000>; | 
 | 			reg-names = "control"; | 
 | 			status = "disabled"; | 
 | 		}; | 
 |  | 
 | 		spi0: spi@10040000 { | 
 | 			compatible = "sifive,spi0"; | 
 | 			interrupt-parent = <&plic>; | 
 | 			interrupts = <51 1>; | 
 | 			reg = <0x10040000 0x1000 0x20000000 0x10000000>; | 
 | 			reg-names = "control", "mem"; | 
 | 			status = "disabled"; | 
 | 			#address-cells = <1>; | 
 | 			#size-cells = <0>; | 
 | 		}; | 
 |  | 
 | 		spi1: spi@10041000 { | 
 | 			compatible = "sifive,spi0"; | 
 | 			interrupt-parent = <&plic>; | 
 | 			interrupts = <52 1>; | 
 | 			reg = <0x10041000 0x1000>; | 
 | 			reg-names = "control"; | 
 | 			status = "disabled"; | 
 | 			#address-cells = <1>; | 
 | 			#size-cells = <0>; | 
 | 		}; | 
 |  | 
 | 		spi2: spi@10050000 { | 
 | 			compatible = "sifive,spi0"; | 
 | 			interrupt-parent = <&plic>; | 
 | 			interrupts = <6 1>; | 
 | 			reg = <0x10050000 0x1000>; | 
 | 			reg-names = "control"; | 
 | 			status = "disabled"; | 
 | 			#address-cells = <1>; | 
 | 			#size-cells = <0>; | 
 | 		}; | 
 |  | 
 | 		gpio0: gpio@10060000 { | 
 | 			compatible = "sifive,gpio0"; | 
 | 			gpio-controller; | 
 | 			ngpios = <16>; | 
 | 			interrupt-parent = <&plic>; | 
 | 			interrupts = <7 1>, <8 1>, <9 1>, <10 1>, | 
 | 				<11 1>, <12 1>, <13 1>, <14 1>, | 
 | 				<15 1>, <16 1>, <17 1>, <18 1>, | 
 | 				<19 1>, <20 1>, <21 1>, <22 1>; | 
 | 			reg = <0x10060000 0x1000>; | 
 | 			reg-names = "control"; | 
 | 			status = "disabled"; | 
 | 			#gpio-cells = <2>; | 
 |  | 
 | 			#address-cells = <1>; | 
 | 			#size-cells = <1>; | 
 | 			ranges; | 
 | 		}; | 
 | 	}; | 
 | }; |