/* Copyright (c) 2013-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.
 */

/*
 * As a general rule, only version-specific property overrides should be placed
 * inside this file. However, device definitions should be placed inside the
 * msm8974.dtsi file.
 */

/include/ "msm8974-v2.dtsi"

/* GPU overrides */
&msm_gpu {
	/* Updated chip ID */
	qcom,chipid = <0x03030001>;

	qcom,initial-pwrlevel = <2>;

	/* Updated bus bandwidth requirements */
	qcom,msm-bus,vectors-KBps =
		/* Off */
		<26 512 0 0>, <89 604 0 0>,
		/* Sub-SVS / SVS */
		<26 512 0 1600000>, <89 604 0 3000000>,
		/* SVS */
		<26 512 0 2400000>, <89 604 0 3000000>,
		/* Nominal / SVS */
		<26 512 0 4656000>, <89 604 0 3000000>,
		/* SVS / Nominal */
		<26 512 0 2400000>, <89 604 0 5120000>,
		/* Nominal */
		<26 512 0 4656000>, <89 604 0 5120000>,
		/* Turbo / Nominal */
		<26 512 0 7464000>, <89 604 0 5120000>,
		/* Nominal / Turbo */
		<26 512 0 4656000>, <89 604 0 6400000>,
		/* Turbo */
		<26 512 0 7464000>, <89 604 0 6400000>;

	qcom,gpu-pwrlevels {
		#address-cells = <1>;
		#size-cells = <0>;

		compatible = "qcom,gpu-pwrlevels";

		qcom,gpu-pwrlevel@0 {
			reg = <0>;
			qcom,gpu-freq = <450000000>;
			qcom,bus-freq = <8>;
			qcom,io-fraction = <33>;
		};

		qcom,gpu-pwrlevel@1 {
			reg = <1>;
			qcom,gpu-freq = <389000000>;
			qcom,bus-freq = <5>;
			qcom,io-fraction = <33>;
		};

		qcom,gpu-pwrlevel@2 {
			reg = <2>;
			qcom,gpu-freq = <320000000>;
			qcom,bus-freq = <5>;
			qcom,io-fraction = <66>;
		};

		qcom,gpu-pwrlevel@3 {
			reg = <3>;
			qcom,gpu-freq = <200000000>;
			qcom,bus-freq = <2>;
			qcom,io-fraction = <100>;
		};

		qcom,gpu-pwrlevel@4 {
			reg = <4>;
			qcom,gpu-freq = <27000000>;
			qcom,bus-freq = <0>;
			qcom,io-fraction = <0>;
		};
	};
};

&gdsc_mdss {
	qcom,retain-periph;
	qcom,retain-mem;
};

&gdsc_venus {
	qcom,skip-logic-collapse;
};
