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

/ {
	cpus {
		/delete-node/ cpu@200;
		/delete-node/ cpu@300;
		/delete-node/ cpu@400;
		/delete-node/ cpu@500;

		cpu-map {
			cluster0 {
				/delete-node/ core2;
				/delete-node/ core3;
				/delete-node/ core4;
				/delete-node/ core5;
			};
		};
	};


};

&soc {
	/delete-node/ jtagmm@7240000;
	/delete-node/ jtagmm@7340000;
	/delete-node/ jtagmm@7440000;
	/delete-node/ jtagmm@7540000;
	/delete-node/ cti@7220000;
	/delete-node/ cti@7320000;
	/delete-node/ cti@7420000;
	/delete-node/ cti@7520000;
	/delete-node/ etm@7240000;
	/delete-node/ etm@7340000;
	/delete-node/ etm@7440000;
	/delete-node/ etm@7540000;
	cpuss_dump {
		/delete-node/ qcom,l1_i_cache200;
		/delete-node/ qcom,l1_i_cache300;
		/delete-node/ qcom,l1_i_cache400;
		/delete-node/ qcom,l1_i_cache500;
		/delete-node/ qcom,l1_d_cache200;
		/delete-node/ qcom,l1_d_cache300;
		/delete-node/ qcom,l1_d_cache400;
		/delete-node/ qcom,l1_d_cache500;
		/delete-node/ qcom,l1_tlb_dump200;
		/delete-node/ qcom,l1_tlb_dump300;
		/delete-node/ qcom,l1_tlb_dump400;
		/delete-node/ qcom,l1_tlb_dump500;
	};

	devfreq_memlat_0: qcom,cpu0-memlat-mon {
		qcom,cpulist = <&CPU0 &CPU1>;
	};

	devfreq_l3lat_0: qcom,cpu0-l3lat-mon {
		qcom,cpulist = <&CPU0 &CPU1>;
	};
	devfreq_compute0: qcom,devfreq-compute0 {
		qcom,cpulist = <&CPU0 &CPU1>;
	};

	funnel_apss: funnel@7800000 {
		ports {
			/delete-node/ port@3;
			/delete-node/ port@4;
			/delete-node/ port@5;
			/delete-node/ port@6;
		};
	};

	qcom,lpm-levels {
		qcom,pm-cluster@0 {
			qcom,pm-cpu@0 {
				qcom,cpu = <&CPU0 &CPU1>;
			};
		};
	};
};

&pm660_temp_alarm {
	cooling-maps {
		/delete-node/ trip0_cpu2;
		/delete-node/ trip0_cpu3;
		/delete-node/ trip0_cpu4;
		/delete-node/ trip0_cpu5;
		/delete-node/ trip1_cpu2;
		/delete-node/ trip1_cpu3;
		/delete-node/ trip1_cpu4;
		/delete-node/ trip1_cpu5;
	};
};

&thermal_zones {

	xo-therm-cpu-step {
		cooling-maps {
			/delete-node/ skin_cpu2;
			/delete-node/ skin_cpu3;
			/delete-node/ skin_cpu4;
			/delete-node/ skin_cpu5;
		};
	};
};
