/*
 * Copyright (c) 2015-2017, 2019 ARM Limited
 * All rights reserved
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met: redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer;
 * redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution;
 * neither the name of the copyright holders nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/ {
	arm,hbi = <0x0>;
	arm,vexpress,site = <0xf>;
	interrupt-parent = <&gic>;
	#address-cells = <2>;
	#size-cells = <2>;

	gic: interrupt-controller@2c000000 {
		compatible = "arm,gic-v3";
		#interrupt-cells = <0x3>;
		#address-cells = <0x2>;
		ranges;
		interrupt-controller;
		redistributor-stride = <0x0 0x40000>; // 256kB stride
		reg = <0x0 0x2c000000 0x0 0x10000
		       0x0 0x2c010000 0x0 0x2000000 // room for 128 redistributors using 128K each (256K strided...)
		       0x0 0x0 0x0 0x0>;
		interrupts = <1 9 0xf04>;
		#size-cells = <0x2>;
		linux,phandle = <0x1>;
		phandle = <0x1>;

		gic-its@2e010000 {
			compatible = "arm,gic-v3-its";
			msi-controller;
			#msi-cells = <1>;
			reg = <0x0 0x2e010000 0 0x20000>;
		};
	};

	timer {
		compatible = "arm,cortex-a15-timer",
			     "arm,armv7-timer";
		interrupts = <1 13 0xf08>,
		             <1 14 0xf08>,
			     <1 11 0xf08>,
		             <1 10 0xf08>;
		clocks = <&osc_sys>;
		clock-names="apb_pclk";
	};

	pci {
		compatible = "pci-host-ecam-generic";
		device_type = "pci";
		#address-cells = <0x3>;
		#size-cells = <0x2>;
		#interrupt-cells = <0x1>;

		reg = <0x0 0x30000000 0x0 0x10000000>;

		ranges = <0x01000000 0x0 0x00000000  0x0 0x2f000000  0x0 0x00010000>,
		         <0x02000000 0x0 0x40000000  0x0 0x40000000  0x0 0x40000000>;

	/*
	  child unit address, #cells = #address-cells
	  child interrupt specifier, #cells = #interrupt-cells (INTA = 1, INTB = 2, INTC = 3 and INTD = 4)
	  interrupt-parent, phandle
	  parent unit address, #cells = #address-cells@gic
	  parent interrupt specifier, #cells = #interrupt-cells@gic
	*/
	interrupt-map = <0x0    0x0 0x0  0x1  &gic  0x0 0x0  0x0 0x44 0x1
		         0x800  0x0 0x0  0x1  &gic  0x0 0x0  0x0 0x45 0x1
		         0x1000 0x0 0x0  0x1  &gic  0x0 0x0  0x0 0x46 0x1
		         0x1800 0x0 0x0  0x1  &gic  0x0 0x0  0x0 0x47 0x1>;

	interrupt-map-mask = <0x001800 0x0 0x0 0x0>;
	dma-coherent;
	};

	kmi@1c060000 {
		compatible = "arm,pl050", "arm,primecell";
		reg = <0x0 0x1c060000 0x0 0x1000>;
		interrupts = <0 12 4>;
		clocks = <&v2m_clk24mhz>, <&osc_smb>;
		clock-names = "KMIREFCLK", "apb_pclk";
	};

	kmi@1c070000 {
		compatible = "arm,pl050", "arm,primecell";
		reg = <0x0 0x1c070000 0x0 0x1000>;
		interrupts = <0 13 4>;
		clocks = <&v2m_clk24mhz>, <&osc_smb>;
		clock-names = "KMIREFCLK", "apb_pclk";
	};

	uart0: uart@1c090000 {
		compatible = "arm,pl011", "arm,primecell";
		reg = <0x0 0x1c090000 0x0 0x1000>;
		interrupts = <0 5 4>;
		clocks = <&osc_peripheral>, <&osc_smb>;
		clock-names = "uartclk", "apb_pclk";
	};

	rtc@1c170000 {
		compatible = "arm,pl031", "arm,primecell";
		reg = <0x0 0x1c170000 0x0 0x1000>;
		interrupts = <0 4 4>;
		clocks = <&osc_smb>;
		clock-names = "apb_pclk";
	};

	v2m_clk24mhz: clk24mhz {
		compatible = "fixed-clock";
		#clock-cells = <0>;
		clock-frequency = <24000000>;
		clock-output-names = "v2m:clk24mhz";
	};


	v2m_sysreg: sysreg@1c010000 {
		compatible = "arm,vexpress-sysreg";
		reg = <0 0x1c010000 0x0 0x1000>;
		gpio-controller;
		#gpio-cells = <2>;
	};

	vio@1c130000 {
		compatible = "virtio,mmio";
		reg = <0 0x1c130000 0x0 0x1000>;
		interrupts = <0 42 4>;
	};

	vio@1c140000 {
		compatible = "virtio,mmio";
		reg = <0 0x1c140000 0x0 0x1000>;
		interrupts = <0 43 4>;
	};

	dcc {
		compatible = "arm,vexpress,config-bus";
		arm,vexpress,config-bridge = <&v2m_sysreg>;

		osc_pxl: osc@5 {
			compatible = "arm,vexpress-osc";
			arm,vexpress-sysreg,func = <1 5>;
			freq-range = <23750000 1000000000>;
			#clock-cells = <0>;
			clock-output-names = "oscclk5";
		};

		osc_smb: osc@6 {
			compatible = "arm,vexpress-osc";
			arm,vexpress-sysreg,func = <1 6>;
			freq-range = <20000000 50000000>;
			#clock-cells = <0>;
			clock-output-names = "oscclk6";
		};

		osc_sys: osc@7 {
			compatible = "arm,vexpress-osc";
			arm,vexpress-sysreg,func = <1 7>;
			freq-range = <20000000 60000000>;
			#clock-cells = <0>;
			clock-output-names = "oscclk7";
		};
	};


	mcc {
		compatible = "arm,vexpress,config-bus";
		arm,vexpress,config-bridge = <&v2m_sysreg>;
		arm,vexpress,site = <0>;

		osc_peripheral: osc@2 {
			compatible = "arm,vexpress-osc";
			arm,vexpress-sysreg,func = <1 2>;
			freq-range = <24000000 24000000>;
			#clock-cells = <0>;
			clock-output-names = "v2m:oscclk2";
		};
	};
};
