| /* | 
 |  * Copyright (c) 2020 Cobham Gaisler AB | 
 |  * | 
 |  * SPDX-License-Identifier: Apache-2.0 | 
 |  */ | 
 |  | 
 | /* | 
 |  * This file is based on: | 
 |  *   qemu-system-riscv32 -machine virt,dumpdtb=virt.dtb -smp 8 -m 256 | 
 |  *   dtc virt.dtb > virt.dtsi | 
 |  */ | 
 |  | 
 | /dts-v1/; | 
 |  | 
 | / { | 
 | 	#address-cells = < 0x01 >; | 
 | 	#size-cells = < 0x01 >; | 
 | 	compatible = "riscv-virtio"; | 
 | 	model = "riscv-virtio,qemu"; | 
 |  | 
 | 	flash@20000000 { | 
 | 		bank-width = < 0x04 >; | 
 | 		reg = < 0x20000000 0x2000000 0x22000000 0x2000000 >; | 
 | 		compatible = "cfi-flash"; | 
 | 	}; | 
 |  | 
 | 	uart0: uart@10000000 { | 
 | 		interrupts = < 0x0a 1 >; | 
 | 		interrupt-parent = < &plic >; | 
 | 		clock-frequency = < 0x384000 >; | 
 | 		reg = < 0x10000000 0x100 >; | 
 | 		compatible = "ns16550"; | 
 | 		reg-shift = < 0 >; | 
 | 	}; | 
 |  | 
 | 	cpus { | 
 | 		#address-cells = < 0x01 >; | 
 | 		#size-cells = < 0x00 >; | 
 |  | 
 | 		cpu@0 { | 
 | 			device_type = "cpu"; | 
 | 			reg = < 0x00 >; | 
 | 			status = "okay"; | 
 | 			compatible = "qemu,riscv-virt", "riscv"; | 
 |  | 
 | 			hlic0: interrupt-controller { | 
 | 				compatible = "riscv,cpu-intc"; | 
 | 				#address-cells = <0>; | 
 | 				#interrupt-cells = < 0x01 >; | 
 | 				interrupt-controller; | 
 | 			}; | 
 | 		}; | 
 |  | 
 | 		cpu@1 { | 
 | 			device_type = "cpu"; | 
 | 			reg = < 0x01 >; | 
 | 			status = "okay"; | 
 | 			compatible = "qemu,riscv-virt", "riscv"; | 
 |  | 
 | 			hlic1: interrupt-controller { | 
 | 				compatible = "riscv,cpu-intc"; | 
 | 				#address-cells = <0>; | 
 | 				#interrupt-cells = < 0x01 >; | 
 | 				interrupt-controller; | 
 | 			}; | 
 | 		}; | 
 |  | 
 | 		cpu@2 { | 
 | 			device_type = "cpu"; | 
 | 			reg = < 0x02 >; | 
 | 			status = "okay"; | 
 | 			compatible = "qemu,riscv-virt", "riscv"; | 
 |  | 
 | 			hlic2: interrupt-controller { | 
 | 				compatible = "riscv,cpu-intc"; | 
 | 				#address-cells = <0>; | 
 | 				#interrupt-cells = < 0x01 >; | 
 | 				interrupt-controller; | 
 | 			}; | 
 | 		}; | 
 |  | 
 | 		cpu@3 { | 
 | 			device_type = "cpu"; | 
 | 			reg = < 0x03 >; | 
 | 			status = "okay"; | 
 | 			compatible = "qemu,riscv-virt", "riscv"; | 
 |  | 
 | 			hlic3: interrupt-controller { | 
 | 				compatible = "riscv,cpu-intc"; | 
 | 				#address-cells = <0>; | 
 | 				#interrupt-cells = < 0x01 >; | 
 | 				interrupt-controller; | 
 | 			}; | 
 | 		}; | 
 |  | 
 | 		cpu@4 { | 
 | 			device_type = "cpu"; | 
 | 			reg = < 0x04 >; | 
 | 			status = "okay"; | 
 | 			compatible = "qemu,riscv-virt", "riscv"; | 
 |  | 
 | 			hlic4: interrupt-controller { | 
 | 				compatible = "riscv,cpu-intc"; | 
 | 				#address-cells = <0>; | 
 | 				#interrupt-cells = < 0x01 >; | 
 | 				interrupt-controller; | 
 | 			}; | 
 | 		}; | 
 |  | 
 | 		cpu@5 { | 
 | 			device_type = "cpu"; | 
 | 			reg = < 0x05 >; | 
 | 			status = "okay"; | 
 | 			compatible = "qemu,riscv-virt", "riscv"; | 
 |  | 
 | 			hlic5: interrupt-controller { | 
 | 				compatible = "riscv,cpu-intc"; | 
 | 				#address-cells = <0>; | 
 | 				#interrupt-cells = < 0x01 >; | 
 | 				interrupt-controller; | 
 | 			}; | 
 | 		}; | 
 |  | 
 | 		cpu@6 { | 
 | 			device_type = "cpu"; | 
 | 			reg = < 0x06 >; | 
 | 			status = "okay"; | 
 | 			compatible = "qemu,riscv-virt", "riscv"; | 
 |  | 
 | 			hlic6: interrupt-controller { | 
 | 				compatible = "riscv,cpu-intc"; | 
 | 				#address-cells = <0>; | 
 | 				#interrupt-cells = < 0x01 >; | 
 | 				interrupt-controller; | 
 | 			}; | 
 | 		}; | 
 |  | 
 | 		cpu@7 { | 
 | 			device_type = "cpu"; | 
 | 			reg = < 0x07 >; | 
 | 			status = "okay"; | 
 | 			compatible = "qemu,riscv-virt", "riscv"; | 
 |  | 
 | 			hlic7: interrupt-controller { | 
 | 				compatible = "riscv,cpu-intc"; | 
 | 				#address-cells = <0>; | 
 | 				#interrupt-cells = < 0x01 >; | 
 | 				interrupt-controller; | 
 | 			}; | 
 | 		}; | 
 | 	}; | 
 |  | 
 | 	ram0: memory@80000000 { | 
 | 		device_type = "memory"; | 
 | 		reg = < 0x80000000 0x10000000 >; | 
 | 	}; | 
 |  | 
 | 	soc { | 
 | 		#address-cells = < 0x01 >; | 
 | 		#size-cells = < 0x01 >; | 
 | 		compatible = "simple-bus"; | 
 | 		ranges; | 
 |  | 
 | 		plic: interrupt-controller@c000000 { | 
 | 			riscv,max-priority = <7>; | 
 | 			riscv,ndev = < 1024 >; | 
 | 			reg = <0x0c000000 0x04000000>; | 
 | 			interrupts-extended = < | 
 | 				&hlic0 0x0b &hlic0 0x09 | 
 | 				&hlic1 0x0b &hlic1 0x09 | 
 | 				&hlic2 0x0b &hlic2 0x09 | 
 | 				&hlic3 0x0b &hlic3 0x09 | 
 | 				&hlic4 0x0b &hlic4 0x09 | 
 | 				&hlic5 0x0b &hlic5 0x09 | 
 | 				&hlic6 0x0b &hlic6 0x09 | 
 | 				&hlic7 0x0b &hlic7 0x09 | 
 | 			>; | 
 | 			interrupt-controller; | 
 | 			compatible = "sifive,plic-1.0.0"; | 
 | 			#address-cells = < 0x00 >; | 
 | 			#interrupt-cells = < 0x02 >; | 
 | 		}; | 
 |  | 
 | 		clint: clint@2000000 { | 
 | 			compatible = "sifive,clint0"; | 
 | 			reg = <0x2000000 0x10000>; | 
 | 			interrupts-extended = <&hlic0 0x03 &hlic0 0x07 | 
 | 					       &hlic1 0x03 &hlic1 0x07 | 
 | 					       &hlic2 0x03 &hlic2 0x07 | 
 | 					       &hlic3 0x03 &hlic3 0x07 | 
 | 					       &hlic4 0x03 &hlic4 0x07 | 
 | 					       &hlic5 0x03 &hlic5 0x07 | 
 | 					       &hlic6 0x03 &hlic6 0x07 | 
 | 					       &hlic7 0x03 &hlic7 0x07>; | 
 | 		}; | 
 |  | 
 | 		mtimer: timer@200bff8 { | 
 | 			compatible = "riscv,machine-timer"; | 
 | 			interrupts-extended = <&hlic0 7 | 
 | 						&hlic1 7 | 
 | 						&hlic2 7 | 
 | 						&hlic3 7 | 
 | 						&hlic4 7 | 
 | 						&hlic5 7 | 
 | 						&hlic6 7 | 
 | 						&hlic7 7>; | 
 | 			reg = <0x200bff8 0x8 0x2004000 0x8>; | 
 | 			reg-names = "mtime", "mtimecmp"; | 
 | 		}; | 
 | 	}; | 
 | }; |