/*
 * Copyright (c) 2019 Carlo Caione <ccaione@baylibre.com>
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/*
 * Derived from DTS extracted with:
 *
 *   qemu-system-aarch64 -machine virt -cpu cortex-a53 -nographic
 *         -machine dumpdtb=virt.dtb
 *
 *   dtc -I dtb -O dts virt.dtb
 */

#include <mem.h>
#include <arm64/armv8-a.dtsi>
#include <zephyr/dt-bindings/interrupt-controller/arm-gic.h>
#include <zephyr/dt-bindings/pcie/pcie.h>

/ {
	#address-cells = <2>;
	#size-cells = <2>;

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;

		cpu@0 {
			device_type = "cpu";
			compatible = "arm,cortex-a53";
			reg = <0>;
		};

		cpu@1 {
			device_type = "cpu";
			compatible = "arm,cortex-a53";
			reg = <1>;
		};
	};

	timer {
		compatible = "arm,armv8-timer";
		interrupt-parent = <&gic>;
		interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL
			      IRQ_DEFAULT_PRIORITY>,
			     <GIC_PPI 14 IRQ_TYPE_LEVEL
			      IRQ_DEFAULT_PRIORITY>,
			     <GIC_PPI 11 IRQ_TYPE_LEVEL
			      IRQ_DEFAULT_PRIORITY>,
			     <GIC_PPI 10 IRQ_TYPE_LEVEL
			      IRQ_DEFAULT_PRIORITY>;
	};

	uartclk: apb-pclk {
		compatible = "fixed-clock";
		clock-frequency = <24000000>;
		#clock-cells = <0>;
	};

	soc {
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;

		interrupt-parent = <&gic>;

		gic: interrupt-controller@8000000 {
			compatible = "arm,gic-v3", "arm,gic";
			reg = <0x00 0x8000000 0x00 0x010000>,
			      <0x00 0x80a0000 0x00 0xf60000>;
			interrupt-controller;
			#interrupt-cells = <4>;
			status = "okay";
			#size-cells = <0x02>;
			#address-cells = <0x02>;

			its: its@8080000 {
				compatible = "arm,gic-v3-its";
				reg = <0x00 0x8080000 0x00 0x20000>;
				msi-controller;
			};
		};

		uart0: uart@9000000 {
			compatible = "arm,pl011";
			reg = <0x00 0x9000000 0x00 0x1000>;
			status = "disabled";
			interrupts = <GIC_SPI 1 IRQ_TYPE_LEVEL 0>;
			interrupt-names = "irq_0";
			clocks = <&uartclk>;
		};

		flash0: flash@0 {
			compatible = "cfi-flash";
			bank-width = <4>;
			/* As this is pointed to by zephyr,flash we can only handle
			 * one value in the reg property, so we comment out the
			 * second flash bank for now
			 */
			reg = <0x0 0x0 0x0 DT_SIZE_M(64) /* 0x4000000 DT_SIZE_M(64) */>;
		};

		pcie: pcie@4010000000 {
			compatible = "pci-host-ecam-generic";
			device_type = "pci";
			reg = <0x40 0x10000000 0x00 0x10000000>;
			#size-cells = <0x02>;
			#address-cells = <0x03>;
			ranges = <0x1000000 0x00 0x00        0x00 0x3eff0000  0x00 0x10000
				  0x2000000 0x00 0x10000000  0x00 0x10000000  0x00 0x2eff0000
				  0x3000000 0x80 0x00        0x80 0x00        0x80 0x00>;
			#interrupt-cells = <0x01>;
			interrupt-map-mask = <0x1800 0x00 0x00 0x07>;
			interrupt-map = <0x00   0x00 0x00 1 &gic 0 0 GIC_SPI
					 0x03 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY
					 0x00   0x00 0x00 2 &gic 0 0 GIC_SPI
					 0x04 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY
					 0x00   0x00 0x00 3 &gic 0 0 GIC_SPI
					 0x05 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY
					 0x00   0x00 0x00 4 &gic 0 0 GIC_SPI
					 0x06 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY

					 0x800  0x00 0x00 1 &gic 0 0 GIC_SPI
					 0x04 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY
					 0x800  0x00 0x00 2 &gic 0 0 GIC_SPI
					 0x05 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY
					 0x800  0x00 0x00 3 &gic 0 0 GIC_SPI
					 0x06 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY
					 0x800  0x00 0x00 4 &gic 0 0 GIC_SPI
					 0x03 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY

					 0x1000 0x00 0x00 1 &gic 0 0 GIC_SPI
					 0x05 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY
					 0x1000 0x00 0x00 2 &gic 0 0 GIC_SPI
					 0x06 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY
					 0x1000 0x00 0x00 3 &gic 0 0 GIC_SPI
					 0x03 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY
					 0x1000 0x00 0x00 4 &gic 0 0 GIC_SPI
					 0x04 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY

					 0x1800 0x00 0x00 1 &gic 0 0 GIC_SPI
					 0x06 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY
					 0x1800 0x00 0x00 2 &gic 0 0 GIC_SPI
					 0x03 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY
					 0x1800 0x00 0x00 3 &gic 0 0 GIC_SPI
					 0x04 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY
					 0x1800 0x00 0x00 4 &gic 0 0 GIC_SPI
					 0x05 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY>;
			msi-parent = <&its>;
			bus-range = <0x00 0xff>;
		};
	};
};
