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