/* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

&soc {
	qcom,lpm-levels {
		compatible = "qcom,lpm-levels";
		#address-cells = <1>;
		#size-cells = <0>;

		qcom,pm-cluster@0 {
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;
			label = "L3";
			qcom,psci-mode-shift = <4>;
			qcom,psci-mode-mask = <0xfff>;

			qcom,pm-cluster-level@0 { /* D1 */
				reg = <0>;
				label = "l3-wfi";
				qcom,psci-mode = <0x1>;
				qcom,latency-us = <51>;
				qcom,ss-power = <452>;
				qcom,energy-overhead = <69355>;
				qcom,time-overhead = <99>;
			};

			qcom,pm-cluster-level@1 { /* LLCC off, AOSS sleep */
				reg = <1>;
				label = "llcc-off";
				qcom,psci-mode = <0xC24>;
				qcom,latency-us = <6562>;
				qcom,ss-power = <108>;
				qcom,energy-overhead = <4000000>;
				qcom,time-overhead = <5000>;
				qcom,min-child-idx = <2>;
				qcom,is-reset;
				qcom,notify-rpm;
			};

			qcom,pm-cpu@0 {
				#address-cells = <1>;
				#size-cells = <0>;
				qcom,psci-mode-shift = <0>;
				qcom,psci-mode-mask = <0xf>;
				qcom,use-prediction;
				qcom,cpu = <&CPU0 &CPU1 &CPU2 &CPU3>;

				qcom,pm-cpu-level@0 { /* C1 */
					reg = <0>;
					label = "wfi";
					qcom,psci-cpu-mode = <0x1>;
					qcom,latency-us = <43>;
					qcom,ss-power = <150>;
					qcom,energy-overhead = <10000>;
					qcom,time-overhead = <100>;
				};

				qcom,pm-cpu-level@1 {  /* C3 */
					reg = <1>;
					label = "pc";
					qcom,psci-cpu-mode = <0x3>;
					qcom,latency-us = <461>;
					qcom,ss-power = <100>;
					qcom,energy-overhead = <400000>;
					qcom,time-overhead = <500>;
					qcom,is-reset;
					qcom,use-broadcast-timer;
				};

				qcom,pm-cpu-level@2 {  /* C4 */
					reg = <2>;
					label = "rail-pc";
					qcom,psci-cpu-mode = <0x4>;
					qcom,latency-us = <531>;
					qcom,ss-power = <73>;
					qcom,energy-overhead = <500000>;
					qcom,time-overhead = <600>;
					qcom,is-reset;
					qcom,use-broadcast-timer;
				};
			};

			qcom,pm-cpu@1 {
				#address-cells = <1>;
				#size-cells = <0>;
				qcom,psci-mode-shift = <0>;
				qcom,psci-mode-mask = <0xf>;
				qcom,cpu = <&CPU4 &CPU5 &CPU6 &CPU7>;

				qcom,pm-cpu-level@0 { /* C1 */
					reg = <0>;
					label = "wfi";
					qcom,psci-cpu-mode = <0x1>;
					qcom,latency-us = <43>;
					qcom,ss-power = <454>;
					qcom,energy-overhead = <38639>;
					qcom,time-overhead = <83>;
				};

				qcom,pm-cpu-level@1 {  /* C3 */
					reg = <1>;
					label = "pc";
					qcom,psci-cpu-mode = <0x3>;
					qcom,latency-us = <621>;
					qcom,ss-power = <436>;
					qcom,energy-overhead = <418225>;
					qcom,time-overhead = <885>;
					qcom,is-reset;
					qcom,use-broadcast-timer;
				};

				qcom,pm-cpu-level@2 {  /* C4 */
					reg = <2>;
					label = "rail-pc";
					qcom,psci-cpu-mode = <0x4>;
					qcom,latency-us = <1061>;
					qcom,ss-power = <400>;
					qcom,energy-overhead = <428225>;
					qcom,time-overhead = <1000>;
					qcom,is-reset;
					qcom,use-broadcast-timer;
				};
			};
		};
	};

	qcom,rpm-stats@c300000 {
		compatible = "qcom,rpm-stats";
		reg = <0xC300000 0x1000>, <0xC3F0004 0x4>;
		reg-names = "phys_addr_base", "offset_addr";
	};

	pdc: interrupt-controller@0xb220000{
		compatible = "qcom,pdc-sdm845";
		reg = <0xb220000 0x400>;
		#interrupt-cells = <3>;
		interrupt-parent = <&intc>;
		interrupt-controller;
	};
};
