#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/clock/qcom,gcc-waipio.h>
#include <dt-bindings/clock/qcom,rpmh.h>

/ {
	#address-cells = <0x2>;
	#size-cells = <0x2>;
	qcom,msm-id = <457 0x10000>;
	interrupt-parent = <&vgic>;

	chosen {
		bootargs = "nokaslr log_buf_len=256K root=/dev/ram rw init=/init console=hvc0 loglevel=8";
	};

	reserved_memory: reserved-memory {
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;
	};

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

		CPU0: cpu@0 {
			compatible = "arm,armv8";
			reg = <0x0 0x0>;
			device_type = "cpu";
			enable-method = "psci";
			cpu-idle-states = <&CPU_PWR_DWN
					   &CLUSTER_PWR_DWN>;
		};

		CPU1: cpu@100 {
			compatible = "arm,armv8";
			reg = <0x0 0x100>;
			device_type = "cpu";
			enable-method = "psci";
			cpu-idle-states = <&CPU_PWR_DWN
					   &CLUSTER_PWR_DWN>;
		};
	};

	idle-states {
		CPU_PWR_DWN: c4 {  /* Using Gold C4 latencies */
			compatible = "arm,idle-state";
			idle-state-name = "rail-pc";
			entry-latency-us = <369>;
			exit-latency-us = <1502>;
			min-residency-us = <4488>;
			arm,psci-suspend-param = <0x40000004>;
			local-timer-stop;
		};

		CLUSTER_PWR_DWN: d4 { /* C4+D4 */
			compatible = "arm,idle-state";
			idle-state-name = "l3-pc";
			entry-latency-us = <584>;
			exit-latency-us = <2332>;
			min-residency-us = <6118>;
			arm,psci-suspend-param = <0x40000044>;
			local-timer-stop;
		};
	};


	qcom,vm-config {
		compatible = "qcom,vm-1.0";
		vm-type = "aarch64-guest";
		boot-config = "fdt,unified";
		os-type = "linux";
		kernel-entry-segment = "kernel";
		kernel-entry-offset = <0x0 0x0>;
		vendor = "QTI";
		image-name = "qcom,oemvm";
		qcom,pasid = <0x0 0x22>;

		memory {
			#address-cells = <0x2>;
			#size-cells = <0x0>;
			base-address = <0x0 0xbb000000>;
			size-min = <0x0 0x4efc000>;    /* 78 MB */
		};

		segments {
			ramdisk = <2>; /* 8MB */
		};

		vcpus {
			config = "/cpus";
			affinity = "static";
			affinity-map = <0x5 0x6>;
			sched-priority = <0>;       /* relative to PVM */
			sched-timeslice = <2000>;   /* in ms */
		};

		interrupts {
			config = &vgic;
		};

		vdevices {
			generate = "/hypervisor";
			rm-rpc {
				vdevice-type = "rm-rpc";
				generate = "/hypervisor/qcom,resource-mgr";
				console-dev;
				message-size = <0x000000f0>;
				queue-depth = <0x00000008>;
				qcom,label = <0x1>;
			};

			virtio-mmio@0 {
				vdevice-type = "virtio-mmio";
				generate = "/virtio-mmio";
				peer-default;
				vqs-num = <0x1>;
				push-compatible = "virtio,mmio";
				dma-coherent;
				dma_base = <0x0 0x0>;
				memory {
					qcom,label = <0x13>;
					#address-cells = <0x2>;
					base = <0x0 0xFFEFC000>;
				};
			};

			swiotlb-shm {
				vdevice-type = "shm";
				generate = "/swiotlb";
				push-compatible = "swiotlb";
				peer-default;
				dma_base = <0x0 0x4000>;
				memory {
					qcom,label = <0x14>;
					#address-cells = <0x2>;
					base = <0x0 0xFFF00000>;
				};
			};
		};
	};

	soc: soc { };
};

&soc {
	#address-cells = <1>;
	#size-cells = <1>;
	ranges = <0 0 0 0xffffffff>;
	compatible = "simple-bus";

	psci {
		compatible = "arm,psci-1.0";
		method = "smc";
	};

	vgic: interrupt-controller@17100000 {
		compatible = "arm,gic-v3";
		interrupt-controller;
		#interrupt-cells = <0x3>;
		#redistributor-regions = <1>;
		redistributor-stride = <0x0 0x40000>;
		reg = <0x17100000 0x10000>,     /* GICD */
		      <0x17180000 0x100000>;    /* GICR * 8 */
	};

	arch_timer: timer {
		compatible = "arm,armv8-timer";
		always-on;
		interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
			     <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
			     <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
			     <GIC_PPI 12 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>;
		clock-frequency = <19200000>;
	};

};
