xref: /arm-trusted-firmware/fdts/arm_fpga.dts (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu// SPDX-License-Identifier: (GPL-2.0 or BSD-3-Clause)
2*91f16700Schasinglulu/*
3*91f16700Schasinglulu * Copyright (c) 2020, Arm Limited. All rights reserved.
4*91f16700Schasinglulu *
5*91f16700Schasinglulu * Devicetree for the Arm Ltd. FPGA platform
6*91f16700Schasinglulu * Number and kind of CPU cores differs from image to image, so the
7*91f16700Schasinglulu * topology is auto-detected by BL31, and the /cpus node is created and
8*91f16700Schasinglulu * populated accordingly at runtime.
9*91f16700Schasinglulu */
10*91f16700Schasinglulu
11*91f16700Schasinglulu#include <dt-bindings/interrupt-controller/arm-gic.h>
12*91f16700Schasinglulu
13*91f16700Schasinglulu/dts-v1/;
14*91f16700Schasinglulu
15*91f16700Schasinglulu/ {
16*91f16700Schasinglulu	model = "ARM FPGA";
17*91f16700Schasinglulu	compatible = "arm,fpga", "arm,vexpress";
18*91f16700Schasinglulu	interrupt-parent = <&gic>;
19*91f16700Schasinglulu	#address-cells = <2>;
20*91f16700Schasinglulu	#size-cells = <2>;
21*91f16700Schasinglulu
22*91f16700Schasinglulu	aliases {
23*91f16700Schasinglulu		serial0 = &dbg_uart;
24*91f16700Schasinglulu	};
25*91f16700Schasinglulu
26*91f16700Schasinglulu	chosen {
27*91f16700Schasinglulu		stdout-path = "serial0:38400n8";
28*91f16700Schasinglulu		bootargs = "console=ttyAMA0,38400n8 earlycon";
29*91f16700Schasinglulu		/* Allow to upload a generous 100MB initrd payload. */
30*91f16700Schasinglulu		linux,initrd-start = <0x0 0x84000000>;
31*91f16700Schasinglulu		linux,initrd-end = <0x0 0x8a400000>;
32*91f16700Schasinglulu	};
33*91f16700Schasinglulu
34*91f16700Schasinglulu	/* /cpus node will be added by BL31 at runtime. */
35*91f16700Schasinglulu
36*91f16700Schasinglulu	psci {
37*91f16700Schasinglulu		compatible = "arm,psci-0.2";
38*91f16700Schasinglulu		method = "smc";
39*91f16700Schasinglulu	};
40*91f16700Schasinglulu
41*91f16700Schasinglulu	timer {
42*91f16700Schasinglulu		compatible = "arm,armv8-timer";
43*91f16700Schasinglulu		interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>,
44*91f16700Schasinglulu			     <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>,
45*91f16700Schasinglulu			     <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>,
46*91f16700Schasinglulu			     <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>;
47*91f16700Schasinglulu	};
48*91f16700Schasinglulu
49*91f16700Schasinglulu	pmu {
50*91f16700Schasinglulu		compatible = "arm,armv8-pmuv3";
51*91f16700Schasinglulu		interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH>;
52*91f16700Schasinglulu	};
53*91f16700Schasinglulu
54*91f16700Schasinglulu	/* This node will be removed at runtime on cores without SPE. */
55*91f16700Schasinglulu	spe-pmu {
56*91f16700Schasinglulu		compatible = "arm,statistical-profiling-extension-v1";
57*91f16700Schasinglulu		interrupts = <GIC_PPI 5 IRQ_TYPE_LEVEL_HIGH>;
58*91f16700Schasinglulu	};
59*91f16700Schasinglulu
60*91f16700Schasinglulu	memory@80000000 {
61*91f16700Schasinglulu		device_type = "memory";
62*91f16700Schasinglulu		reg = <0x0 0x80000000 0x0 0x80000000>,
63*91f16700Schasinglulu		      <0x8 0x80000000 0x1 0x80000000>;
64*91f16700Schasinglulu	};
65*91f16700Schasinglulu
66*91f16700Schasinglulu
67*91f16700Schasinglulu	bus_refclk: refclk {
68*91f16700Schasinglulu		compatible = "fixed-clock";
69*91f16700Schasinglulu		#clock-cells = <0>;
70*91f16700Schasinglulu		clock-frequency = <100000000>;
71*91f16700Schasinglulu		clock-output-names = "apb_pclk";
72*91f16700Schasinglulu	};
73*91f16700Schasinglulu
74*91f16700Schasinglulu	uartclk: baudclock {
75*91f16700Schasinglulu		compatible = "fixed-clock";
76*91f16700Schasinglulu		#clock-cells = <0>;
77*91f16700Schasinglulu		clock-frequency = <10000000>;
78*91f16700Schasinglulu		clock-output-names = "uartclk";
79*91f16700Schasinglulu	};
80*91f16700Schasinglulu
81*91f16700Schasinglulu	dbg_uart: serial@7ff80000 {
82*91f16700Schasinglulu		compatible = "arm,pl011", "arm,primecell";
83*91f16700Schasinglulu		reg = <0x0 0x7ff80000 0x0 0x00001000>;
84*91f16700Schasinglulu		interrupts = <GIC_SPI 415 IRQ_TYPE_LEVEL_HIGH>;
85*91f16700Schasinglulu		clocks = <&uartclk>, <&bus_refclk>;
86*91f16700Schasinglulu		clock-names = "uartclk", "apb_pclk";
87*91f16700Schasinglulu	};
88*91f16700Schasinglulu
89*91f16700Schasinglulu	gic: interrupt-controller@30000000 {
90*91f16700Schasinglulu		compatible = "arm,gic-v3";
91*91f16700Schasinglulu		#address-cells = <2>;
92*91f16700Schasinglulu		#interrupt-cells = <3>;
93*91f16700Schasinglulu		#size-cells = <2>;
94*91f16700Schasinglulu		ranges;
95*91f16700Schasinglulu		interrupt-controller;
96*91f16700Schasinglulu		reg = <0x0 0x30000000 0x0 0x00010000>,	/* GICD */
97*91f16700Schasinglulu	/* The GICR size will be adjusted at runtime to match the cores. */
98*91f16700Schasinglulu		      <0x0 0x30040000 0x0 0x00020000>;	/* GICR for one core */
99*91f16700Schasinglulu		interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
100*91f16700Schasinglulu
101*91f16700Schasinglulu		its: msi-controller@30040000 {
102*91f16700Schasinglulu			compatible = "arm,gic-v3-its";
103*91f16700Schasinglulu			reg = <0x0 0x30040000 0x0 0x40000>;
104*91f16700Schasinglulu			#msi-cells = <1>;
105*91f16700Schasinglulu			msi-controller;
106*91f16700Schasinglulu		};
107*91f16700Schasinglulu	};
108*91f16700Schasinglulu};
109