/* Copyright (c) 2012-2014, 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,spm@f9009000 {
		compatible = "qcom,spm-v2";
		#address-cells = <1>;
		#size-cells = <1>;
		reg = <0xf9009000 0x1000>;
		qcom,core-id = <0>;
		qcom,saw2-ver-reg = <0xfd0>;
		qcom,saw2-cfg = <0x101>;
		qcom,saw2-spm-dly= <0>;
		qcom,saw2-spm-ctl = <0x1>;
		qcom,saw2-spm-cmd-wfi = [04 03 04 0f];
		qcom,saw2-spm-cmd-spc = [34 04 44 14 24 54 03 54 44 14 04 24
		3e 0f];
		qcom,saw2-spm-cmd-pc = [34 04 44 14 24 54 07 54 44 14 04 24
		3e 0f];
	};

	lpm_levels: qcom,lpm-levels {
		compatible = "qcom,lpm-levels";
		qcom,no-l2-saw;
		#address-cells = <1>;
		#size-cells = <0>;

		qcom,lpm-level@0 {
			reg = <0x0>;
			qcom,mode = "wfi";
			qcom,l2 = "l2_cache_active";
			qcom,latency-us = <100>;
			qcom,ss-power = <8000>;
			qcom,energy-overhead = <100000>;
			qcom,time-overhead = <1>;
		};

		qcom,lpm-level@1 {
			reg = <0x1>;
			qcom,mode = "standalone_pc";
			qcom,l2 = "l2_cache_active";
			qcom,latency-us = <2000>;
			qcom,ss-power = <5000>;
			qcom,energy-overhead = <60100000>;
			qcom,time-overhead = <3000>;
		};

		qcom,lpm-level@2 {
			reg = <0x2>;
			qcom,mode = "pc";
			qcom,l2 = "l2_cache_gdhs";
			qcom,latency-us = <20000>;
			qcom,ss-power = <5000>;
			qcom,energy-overhead = <60350000>;
			qcom,time-overhead = <6300>;
		};

		qcom,lpm-level@3 {
			reg = <0x3>;
			qcom,mode = "pc";
			qcom,l2 = "l2_cache_pc";
			qcom,latency-us = <30000>;
			qcom,ss-power = <5000>;
			qcom,energy-overhead = <60350000>;
			qcom,time-overhead = <7300>;
		};
	};

	qcom,pm-boot {
		compatible = "qcom,pm-boot";
		qcom,mode = "tz";
	};

	qcom,mpm@fc4281d0 {
		compatible = "qcom,mpm-v2";
		reg = <0xfc4281d0 0x1000>, /* MSM_RPM_MPM_BASE 4K */
		    <0xf9011008 0x4>;   /* MSM_APCS_GCC_BASE 4K */
		reg-names = "vmpm", "ipc";
		interrupts = <0 171 1>;

		qcom,ipc-bit-offset = <1>;

		qcom,gic-parent = <&intc>;
		qcom,gic-map = <2 216>, /* tsens_upper_lower_int */
			<47 172>, /* usb2_hsic_async_wakeup_irq */
			<41 180>,   /* usb_async_wakeup_irq */
			<62 222>,   /* ee0_krait_hlos_spmi_periph_irq */
			<0xff 57>,  /* mss_to_apps_irq(0) */
			<0xff 58>,  /* mss_to_apps_irq(1) */
			<0xff 59>,  /* mss_to_apps_irq(2) */
			<0xff 60>,  /* mss_to_apps_irq(3) */
			<0xff 173>, /* o_wcss_apss_smd_hi */
			<0xff 174>, /* o_wcss_apss_smd_med */
			<0xff 175>, /* o_wcss_apss_smd_lo */
			<0xff 176>, /* o_wcss_apss_smsm_irq */
			<0xff 177>, /* o_wcss_apss_wlan_data_xfer_done */
			<0xff 178>, /* o_wcss_apss_wlan_rx_data_avail */
			<0xff 179>, /* o_wcss_apss_asic_intr */
			<0xff 188>, /* q6ss_irq_out(4) */
			<0xff 189>, /* q6ss_irq_out(5) */
			<0xff 190>, /* q6ss_irq_out(6) */
			<0xff 191>, /* q6ss_irq_out(7) */
			<0xff 192>, /* audio_out0_irq */
			<0xff 193>, /* midi_arm_irq */
			<0xff 194>, /* q6ss_wdog_exp_irq */
			<0xff 195>, /* slimbus_core_ee1_irq */
			<0xff 196>, /* bam_irq(1) */
			<0xff 197>, /* qdss_irq_out(7) */
			<0xff 200>, /* rpm_ipc(4) */
			<0xff 201>, /* rpm_ipc(5) */
			<0xff 202>, /* rpm_ipc(6) */
			<0xff 203>, /* rpm_ipc(7)   */
			<0xff 204>, /* rpm_ipc(24)   */
			<0xff 205>, /* rpm_ipc(25)   */
			<0xff 206>, /* rpm_ipc(26)   */
			<0xff 207>, /* rpm_ipc(27)   */
			<0xff 240>; /* summary_irq_kpss */

		qcom,gpio-parent = <&msmgpio>;
		qcom,gpio-map = <4 0>,
			<5 1>,
			<6 2>,
			<7 3>,
			<8 4>,
			<9 5>,
			<10 6>,
			<11 7>,
			<12 8>,
			<13 9>,
			<14 10>,
			<15 11>,
			<16 12>,
			<17 13>,
			<18 14>,
			<19 15>,
			<20 16>,
			<21 17>,
			<22 18>,
			<23 19>,
			<24 20>,
			<25 21>,
			<26 24>,
			<27 25>,
			<28 51>,
			<29 61>,
			<30 62>,
			<31 63>,
			<32 64>,
			<33 65>,
			<34 66>,
			<35 67>,
			<36 69>,
			<37 71>;
	};

	qcom,pm-8x60@fe805664 {
		compatible = "qcom,pm-8x60";
		reg = <0xfe805664 0x40>;
		qcom,pc-mode = "tz_l2_ext";
		qcom,use-sync-timer;
		qcom,lpm-levels = <&lpm_levels>;
	};

	qcom,rpm-log@fc19dc00 {
		compatible = "qcom,rpm-log";
		reg = <0xfc19dc00 0x4000>;
		qcom,rpm-addr-phys = <0xfc000000>;
		qcom,offset-version = <4>;
		qcom,offset-page-buffer-addr = <36>;
		qcom,offset-log-len = <40>;
		qcom,offset-log-len-mask = <44>;
		qcom,offset-page-indices = <56>;
	};

	qcom,rpm-stats@fc19dba0 {
		compatible = "qcom,rpm-stats";
		reg = <0xfc19dba0 0x1000>;
		reg-names = "phys_addr_base";
		qcom,sleep-stats-version = <2>;
	};

	qcom,rpm-rbcpr-stats@fc000000 {
		compatible = "qcom,rpmrbcpr-stats";
		reg = <0xfc000000 0x1a0000>;
		qcom,start-offset = <0x190010>;
	};

	qcom,rpm-master-stats@fc428150 {
		compatible = "qcom,rpm-master-stats";
		reg = <0xfc428150 0x3200>;
		qcom,masters = "APSS", "MPSS", "LPSS";
		qcom,master-stats-version = <2>;
		qcom,master-offset = <2560>;
	};
};
