diff mbox

[v3,2/2] ARM: qcom: dts: Add tsens thermal data

Message ID 1424760442-12564-3-git-send-email-nrajan@codeaurora.org (mailing list archive)
State New, archived
Headers show

Commit Message

Narendran Rajan Feb. 24, 2015, 6:47 a.m. UTC
This patch adds dtsi file to contain thermal data for
tsens sensors present in qcom A family chipsets (msm8660,
ipq8064 etc). The data enables cooling with CPUfreq cooling
device at 60C and thermal shutdown at 100C

This thermal data can be resued across qcom A family chipsets

Signed-off-by: Narendran Rajan <nrajan@codeaurora.org>
---
 arch/arm/boot/dts/qcom-ipq8064.dtsi | 27 +++++++++++++++++++--
 arch/arm/boot/dts/qcom-msm8660.dtsi | 27 +++++++++++++++++++--
 arch/arm/boot/dts/qcom-msm8960.dtsi | 28 ++++++++++++++++++++--
 arch/arm/boot/dts/qcom-thermal.dtsi | 47 +++++++++++++++++++++++++++++++++++++
 4 files changed, 123 insertions(+), 6 deletions(-)
 create mode 100644 arch/arm/boot/dts/qcom-thermal.dtsi

Comments

Eduardo Valentin Feb. 25, 2015, 7:45 p.m. UTC | #1
On Mon, Feb 23, 2015 at 10:47:22PM -0800, Narendran Rajan wrote:
> This patch adds dtsi file to contain thermal data for
> tsens sensors present in qcom A family chipsets (msm8660,
> ipq8064 etc). The data enables cooling with CPUfreq cooling
> device at 60C and thermal shutdown at 100C
> 
> This thermal data can be resued across qcom A family chipsets
> 
> Signed-off-by: Narendran Rajan <nrajan@codeaurora.org>
> ---
>  arch/arm/boot/dts/qcom-ipq8064.dtsi | 27 +++++++++++++++++++--
>  arch/arm/boot/dts/qcom-msm8660.dtsi | 27 +++++++++++++++++++--
>  arch/arm/boot/dts/qcom-msm8960.dtsi | 28 ++++++++++++++++++++--
>  arch/arm/boot/dts/qcom-thermal.dtsi | 47 +++++++++++++++++++++++++++++++++++++
>  4 files changed, 123 insertions(+), 6 deletions(-)
>  create mode 100644 arch/arm/boot/dts/qcom-thermal.dtsi
> 
> diff --git a/arch/arm/boot/dts/qcom-ipq8064.dtsi b/arch/arm/boot/dts/qcom-ipq8064.dtsi
> index cb225da..661ed46 100644
> --- a/arch/arm/boot/dts/qcom-ipq8064.dtsi
> +++ b/arch/arm/boot/dts/qcom-ipq8064.dtsi
> @@ -13,7 +13,7 @@
>  		#address-cells = <1>;
>  		#size-cells = <0>;
>  
> -		cpu@0 {
> +		cpu0: cpu@0 {
>  			compatible = "qcom,krait";
>  			enable-method = "qcom,kpss-acc-v1";
>  			device_type = "cpu";
> @@ -23,7 +23,7 @@
>  			qcom,saw = <&saw0>;
>  		};
>  
> -		cpu@1 {
> +		cpu1: cpu@1 {
>  			compatible = "qcom,krait";
>  			enable-method = "qcom,kpss-acc-v1";
>  			device_type = "cpu";
> @@ -273,11 +273,34 @@
>  			qcom,controller-type = "pmic-arbiter";
>  		};
>  
> +		imem: memory@700000 {
> +			compatible = "qcom,qfprom", "syscon";
> +			reg = <0x00700000 0x1000>;
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +			stride = <1>;
> +			ranges = <0x0 0x00700000 0x1000>;
> +		};
> +
> +		thermal-zones {
> +			#include "qcom-thermal.dtsi"
> +		};
> +
>  		gcc: clock-controller@900000 {
>  			compatible = "qcom,gcc-ipq8064";
>  			reg = <0x00900000 0x4000>;
>  			#clock-cells = <1>;
>  			#reset-cells = <1>;
> +			tsens: tsens-ipq8064 {
> +				compatible = "qcom,qcom-tsens";
> +				qcom,calib-offsets = <0x400 0x410>;
> +				qcom,tsens-slopes = <1176 1176 1154 1176 1111
> +						     1132 1132 1199 1132 1199
> +						     1132>;
> +				qcom,qfprom = <&imem 0x400 11>, <&imem 0x410 11>;
> +				qcom,qfprom-names = "calib", "backup_calib";
> +				#thermal-sensor-cells = <1>;
> +			};
>  		};
>  	};
>  };
> diff --git a/arch/arm/boot/dts/qcom-msm8660.dtsi b/arch/arm/boot/dts/qcom-msm8660.dtsi
> index 0affd61..4eb002c 100644
> --- a/arch/arm/boot/dts/qcom-msm8660.dtsi
> +++ b/arch/arm/boot/dts/qcom-msm8660.dtsi
> @@ -15,7 +15,7 @@
>  		#address-cells = <1>;
>  		#size-cells = <0>;
>  
> -		cpu@0 {
> +		cpu0: cpu@0 {
>  			compatible = "qcom,scorpion";
>  			enable-method = "qcom,gcc-msm8660";
>  			device_type = "cpu";
> @@ -23,7 +23,7 @@
>  			next-level-cache = <&L2>;
>  		};
>  
> -		cpu@1 {
> +		cpu1: cpu@1 {
>  			compatible = "qcom,scorpion";
>  			enable-method = "qcom,gcc-msm8660";
>  			device_type = "cpu";
> @@ -73,11 +73,34 @@
>  			#interrupt-cells = <2>;
>  		};
>  
> +		imem: memory@700000 {
> +			compatible = "qcom,qfprom", "syscon";
> +			reg = <0x00700000 0x1000>;
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +			stride = <1>;
> +			ranges = <0x0 0x00700000 0x1000>;
> +		};
> +
> +		thermal-zones {
> +			#include "qcom-thermal.dtsi"
> +		};
> +
>  		gcc: clock-controller@900000 {
>  			compatible = "qcom,gcc-msm8660";
>  			#clock-cells = <1>;
>  			#reset-cells = <1>;
>  			reg = <0x900000 0x4000>;
> +			tsens: tsens-msm8660 {
> +				compatible = "qcom,qcom-tsens";
> +				qcom,calib-offsets = <0x400 0x410>;
> +				qcom,tsens-slopes = <1176 1176 1154 1176 1111
> +						     1132 1132 1199 1132 1199
> +						     1132>;

This may be moved to coefficients thermal zone properties.

> +				qcom,qfprom = <&imem 0x400 11>, <&imem 0x410 11>;
> +				qcom,qfprom-names = "calib", "backup_calib";
> +				#thermal-sensor-cells = <1>;
> +			};
>  		};
>  
>  		gsbi12: gsbi@19c00000 {
> diff --git a/arch/arm/boot/dts/qcom-msm8960.dtsi b/arch/arm/boot/dts/qcom-msm8960.dtsi
> index e1b0d5c..3722816 100644
> --- a/arch/arm/boot/dts/qcom-msm8960.dtsi
> +++ b/arch/arm/boot/dts/qcom-msm8960.dtsi
> @@ -16,7 +16,7 @@
>  		#size-cells = <0>;
>  		interrupts = <1 14 0x304>;
>  
> -		cpu@0 {
> +		cpu0: cpu@0 {
>  			compatible = "qcom,krait";
>  			enable-method = "qcom,kpss-acc-v1";
>  			device_type = "cpu";
> @@ -26,7 +26,7 @@
>  			qcom,saw = <&saw0>;
>  		};
>  
> -		cpu@1 {
> +		cpu1: cpu@1 {
>  			compatible = "qcom,krait";
>  			enable-method = "qcom,kpss-acc-v1";
>  			device_type = "cpu";
> @@ -84,11 +84,35 @@
>  			reg = <0x800000 0x4000>;
>  		};
>  
> +		imem: memory@700000 {
> +			compatible = "qcom,qfprom", "syscon";
> +			reg = <0x00700000 0x1000>;
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +			stride = <1>;
> +			ranges = <0x0 0x00700000 0x1000>;
> +		};
> +
> +		thermal-zones {
> +			#include "qcom-thermal.dtsi"
> +		};
> +
>  		gcc: clock-controller@900000 {
>  			compatible = "qcom,gcc-msm8960";
>  			#clock-cells = <1>;
>  			#reset-cells = <1>;
>  			reg = <0x900000 0x4000>;
> +
> +			tsens: tsens-msm8960 {
> +				compatible = "qcom,qcom-tsens";
> +				qcom,calib-offsets = <0x400 0x410>;
> +				qcom,tsens-slopes = <1176 1176 1154 1176 1111
> +						     1132 1132 1199 1132 1199
> +						     1132>;
> +				qcom,qfprom = <&imem 0x400 11>, <&imem 0x410 11>;
> +				qcom,qfprom-names = "calib", "backup_calib";
> +				#thermal-sensor-cells = <1>;
> +			};
>  		};
>  
>  		clock-controller@4000000 {
> diff --git a/arch/arm/boot/dts/qcom-thermal.dtsi b/arch/arm/boot/dts/qcom-thermal.dtsi
> new file mode 100644
> index 0000000..963a597
> --- /dev/null
> +++ b/arch/arm/boot/dts/qcom-thermal.dtsi
> @@ -0,0 +1,47 @@
> +/*
> + * Device Tree Source for ipq8064 SoC thermal
> + *
> + * Copyright (c) 2015 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.
> + *
> + */
> +
> +#include <dt-bindings/thermal/thermal.h>
> +
> +cpu_thermal0: cpu_thermal0 {
> +	polling-delay-passive = <2000>; /* milliseconds */
> +	polling-delay = <5000>; /* milliseconds */
> +
> +			/* sensor	ID */
> +	thermal-sensors = <&tsens	0>;
> +	linux,hwmon;
> +
> +	trips {
> +		thermal0_cpu_alert: thermal0_cpu_alert {
> +			temperature = <60000>; /* millicelsius */
> +			hysteresis = <2000>; /* millicelsius */
> +			type = "passive";
> +		};
> +		thermal0_cpu_crit: thermal0_cpu_crit {
> +			temperature = <100000>; /* millicelsius */
> +			hysteresis = <2000>; /* millicelsius */
> +			type = "critical";
> +		};
> +	};
> +
> +	cooling-maps {
> +			map0 {
> +				trip = <&thermal0_cpu_alert>;
> +				cooling-device =
> +					<&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
> +			};
> +	};
> +};
> -- 
> Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
>
Narendran Rajan Feb. 26, 2015, 4:52 a.m. UTC | #2
> -----Original Message-----
> From: linux-arm-msm-owner@vger.kernel.org [mailto:linux-arm-msm-
> owner@vger.kernel.org] On Behalf Of Eduardo Valentin
> Sent: Wednesday, February 25, 2015 11:45 AM
> To: Narendran Rajan
> Cc: Zhang Rui; Linux ARM MSM; Linux PM
> Subject: Re: [v3 2/2] ARM: qcom: dts: Add tsens thermal data
> 
> On Mon, Feb 23, 2015 at 10:47:22PM -0800, Narendran Rajan wrote:
> > This patch adds dtsi file to contain thermal data for tsens sensors
> > present in qcom A family chipsets (msm8660,
> > ipq8064 etc). The data enables cooling with CPUfreq cooling device at
> > 60C and thermal shutdown at 100C
> >
> > This thermal data can be resued across qcom A family chipsets
> >
> > Signed-off-by: Narendran Rajan <nrajan@codeaurora.org>
> > ---
> >  arch/arm/boot/dts/qcom-ipq8064.dtsi | 27 +++++++++++++++++++--
> > arch/arm/boot/dts/qcom-msm8660.dtsi | 27 +++++++++++++++++++--
> > arch/arm/boot/dts/qcom-msm8960.dtsi | 28 ++++++++++++++++++++--
> > arch/arm/boot/dts/qcom-thermal.dtsi | 47
> > +++++++++++++++++++++++++++++++++++++
> >  4 files changed, 123 insertions(+), 6 deletions(-)  create mode
> > 100644 arch/arm/boot/dts/qcom-thermal.dtsi
> >
> > diff --git a/arch/arm/boot/dts/qcom-ipq8064.dtsi
> > b/arch/arm/boot/dts/qcom-ipq8064.dtsi
> > index cb225da..661ed46 100644
> > --- a/arch/arm/boot/dts/qcom-ipq8064.dtsi
> > +++ b/arch/arm/boot/dts/qcom-ipq8064.dtsi
> > @@ -13,7 +13,7 @@
> >  		#address-cells = <1>;
> >  		#size-cells = <0>;
> >
> > -		cpu@0 {
> > +		cpu0: cpu@0 {
> >  			compatible = "qcom,krait";
> >  			enable-method = "qcom,kpss-acc-v1";
> >  			device_type = "cpu";
> > @@ -23,7 +23,7 @@
> >  			qcom,saw = <&saw0>;
> >  		};
> >
> > -		cpu@1 {
> > +		cpu1: cpu@1 {
> >  			compatible = "qcom,krait";
> >  			enable-method = "qcom,kpss-acc-v1";
> >  			device_type = "cpu";
> > @@ -273,11 +273,34 @@
> >  			qcom,controller-type = "pmic-arbiter";
> >  		};
> >
> > +		imem: memory@700000 {
> > +			compatible = "qcom,qfprom", "syscon";
> > +			reg = <0x00700000 0x1000>;
> > +			#address-cells = <1>;
> > +			#size-cells = <1>;
> > +			stride = <1>;
> > +			ranges = <0x0 0x00700000 0x1000>;
> > +		};
> > +
> > +		thermal-zones {
> > +			#include "qcom-thermal.dtsi"
> > +		};
> > +
> >  		gcc: clock-controller@900000 {
> >  			compatible = "qcom,gcc-ipq8064";
> >  			reg = <0x00900000 0x4000>;
> >  			#clock-cells = <1>;
> >  			#reset-cells = <1>;
> > +			tsens: tsens-ipq8064 {
> > +				compatible = "qcom,qcom-tsens";
> > +				qcom,calib-offsets = <0x400 0x410>;
> > +				qcom,tsens-slopes = <1176 1176 1154 1176
> 1111
> > +						     1132 1132 1199 1132
1199
> > +						     1132>;
> > +				qcom,qfprom = <&imem 0x400 11>, <&imem
> 0x410 11>;
> > +				qcom,qfprom-names = "calib",
> "backup_calib";
> > +				#thermal-sensor-cells = <1>;
> > +			};
> >  		};
> >  	};
> >  };
> > diff --git a/arch/arm/boot/dts/qcom-msm8660.dtsi
> > b/arch/arm/boot/dts/qcom-msm8660.dtsi
> > index 0affd61..4eb002c 100644
> > --- a/arch/arm/boot/dts/qcom-msm8660.dtsi
> > +++ b/arch/arm/boot/dts/qcom-msm8660.dtsi
> > @@ -15,7 +15,7 @@
> >  		#address-cells = <1>;
> >  		#size-cells = <0>;
> >
> > -		cpu@0 {
> > +		cpu0: cpu@0 {
> >  			compatible = "qcom,scorpion";
> >  			enable-method = "qcom,gcc-msm8660";
> >  			device_type = "cpu";
> > @@ -23,7 +23,7 @@
> >  			next-level-cache = <&L2>;
> >  		};
> >
> > -		cpu@1 {
> > +		cpu1: cpu@1 {
> >  			compatible = "qcom,scorpion";
> >  			enable-method = "qcom,gcc-msm8660";
> >  			device_type = "cpu";
> > @@ -73,11 +73,34 @@
> >  			#interrupt-cells = <2>;
> >  		};
> >
> > +		imem: memory@700000 {
> > +			compatible = "qcom,qfprom", "syscon";
> > +			reg = <0x00700000 0x1000>;
> > +			#address-cells = <1>;
> > +			#size-cells = <1>;
> > +			stride = <1>;
> > +			ranges = <0x0 0x00700000 0x1000>;
> > +		};
> > +
> > +		thermal-zones {
> > +			#include "qcom-thermal.dtsi"
> > +		};
> > +
> >  		gcc: clock-controller@900000 {
> >  			compatible = "qcom,gcc-msm8660";
> >  			#clock-cells = <1>;
> >  			#reset-cells = <1>;
> >  			reg = <0x900000 0x4000>;
> > +			tsens: tsens-msm8660 {
> > +				compatible = "qcom,qcom-tsens";
> > +				qcom,calib-offsets = <0x400 0x410>;
> > +				qcom,tsens-slopes = <1176 1176 1154 1176
> 1111
> > +						     1132 1132 1199 1132
1199
> > +						     1132>;
> 
> This may be moved to coefficients thermal zone properties.

I read the documentation on coefficient parameter and it's not clear what
the intent is..
My interpretation was this is meant to be a way to provide a weightage
factor to each sensor.
Did I interpret it wrong ? Also no references to this in existing source
code.
 
(from thermal.txt)
-----snip------
"An array of integers (one signed cell) containing
coefficients to compose a linear relation between
the sensors listed in the thermal-sensors property.
Coefficients defaults to 1, in case this property
is not specified"
-----snip------

> 
> > +				qcom,qfprom = <&imem 0x400 11>, <&imem
> 0x410 11>;
> > +				qcom,qfprom-names = "calib",
> "backup_calib";
> > +				#thermal-sensor-cells = <1>;
> > +			};
> >  		};
> >
> >  		gsbi12: gsbi@19c00000 {
> > diff --git a/arch/arm/boot/dts/qcom-msm8960.dtsi
> > b/arch/arm/boot/dts/qcom-msm8960.dtsi
> > index e1b0d5c..3722816 100644
> > --- a/arch/arm/boot/dts/qcom-msm8960.dtsi
> > +++ b/arch/arm/boot/dts/qcom-msm8960.dtsi
> > @@ -16,7 +16,7 @@
> >  		#size-cells = <0>;
> >  		interrupts = <1 14 0x304>;
> >
> > -		cpu@0 {
> > +		cpu0: cpu@0 {
> >  			compatible = "qcom,krait";
> >  			enable-method = "qcom,kpss-acc-v1";
> >  			device_type = "cpu";
> > @@ -26,7 +26,7 @@
> >  			qcom,saw = <&saw0>;
> >  		};
> >
> > -		cpu@1 {
> > +		cpu1: cpu@1 {
> >  			compatible = "qcom,krait";
> >  			enable-method = "qcom,kpss-acc-v1";
> >  			device_type = "cpu";
> > @@ -84,11 +84,35 @@
> >  			reg = <0x800000 0x4000>;
> >  		};
> >
> > +		imem: memory@700000 {
> > +			compatible = "qcom,qfprom", "syscon";
> > +			reg = <0x00700000 0x1000>;
> > +			#address-cells = <1>;
> > +			#size-cells = <1>;
> > +			stride = <1>;
> > +			ranges = <0x0 0x00700000 0x1000>;
> > +		};
> > +
> > +		thermal-zones {
> > +			#include "qcom-thermal.dtsi"
> > +		};
> > +
> >  		gcc: clock-controller@900000 {
> >  			compatible = "qcom,gcc-msm8960";
> >  			#clock-cells = <1>;
> >  			#reset-cells = <1>;
> >  			reg = <0x900000 0x4000>;
> > +
> > +			tsens: tsens-msm8960 {
> > +				compatible = "qcom,qcom-tsens";
> > +				qcom,calib-offsets = <0x400 0x410>;
> > +				qcom,tsens-slopes = <1176 1176 1154 1176
> 1111
> > +						     1132 1132 1199 1132
1199
> > +						     1132>;
> > +				qcom,qfprom = <&imem 0x400 11>, <&imem
> 0x410 11>;
> > +				qcom,qfprom-names = "calib",
> "backup_calib";
> > +				#thermal-sensor-cells = <1>;
> > +			};
> >  		};
> >
> >  		clock-controller@4000000 {
> > diff --git a/arch/arm/boot/dts/qcom-thermal.dtsi
> > b/arch/arm/boot/dts/qcom-thermal.dtsi
> > new file mode 100644
> > index 0000000..963a597
> > --- /dev/null
> > +++ b/arch/arm/boot/dts/qcom-thermal.dtsi
> > @@ -0,0 +1,47 @@
> > +/*
> > + * Device Tree Source for ipq8064 SoC thermal
> > + *
> > + * Copyright (c) 2015 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.
> > + *
> > + */
> > +
> > +#include <dt-bindings/thermal/thermal.h>
> > +
> > +cpu_thermal0: cpu_thermal0 {
> > +	polling-delay-passive = <2000>; /* milliseconds */
> > +	polling-delay = <5000>; /* milliseconds */
> > +
> > +			/* sensor	ID */
> > +	thermal-sensors = <&tsens	0>;
> > +	linux,hwmon;
> > +
> > +	trips {
> > +		thermal0_cpu_alert: thermal0_cpu_alert {
> > +			temperature = <60000>; /* millicelsius */
> > +			hysteresis = <2000>; /* millicelsius */
> > +			type = "passive";
> > +		};
> > +		thermal0_cpu_crit: thermal0_cpu_crit {
> > +			temperature = <100000>; /* millicelsius */
> > +			hysteresis = <2000>; /* millicelsius */
> > +			type = "critical";
> > +		};
> > +	};
> > +
> > +	cooling-maps {
> > +			map0 {
> > +				trip = <&thermal0_cpu_alert>;
> > +				cooling-device =
> > +					<&cpu0 THERMAL_NO_LIMIT
> THERMAL_NO_LIMIT>;
> > +			};
> > +	};
> > +};
> > --
> > Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc.
> > is a member of the Code Aurora Forum, a Linux Foundation Collaborative
> > Project
> >

Thx, Naren

--
To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/arm/boot/dts/qcom-ipq8064.dtsi b/arch/arm/boot/dts/qcom-ipq8064.dtsi
index cb225da..661ed46 100644
--- a/arch/arm/boot/dts/qcom-ipq8064.dtsi
+++ b/arch/arm/boot/dts/qcom-ipq8064.dtsi
@@ -13,7 +13,7 @@ 
 		#address-cells = <1>;
 		#size-cells = <0>;
 
-		cpu@0 {
+		cpu0: cpu@0 {
 			compatible = "qcom,krait";
 			enable-method = "qcom,kpss-acc-v1";
 			device_type = "cpu";
@@ -23,7 +23,7 @@ 
 			qcom,saw = <&saw0>;
 		};
 
-		cpu@1 {
+		cpu1: cpu@1 {
 			compatible = "qcom,krait";
 			enable-method = "qcom,kpss-acc-v1";
 			device_type = "cpu";
@@ -273,11 +273,34 @@ 
 			qcom,controller-type = "pmic-arbiter";
 		};
 
+		imem: memory@700000 {
+			compatible = "qcom,qfprom", "syscon";
+			reg = <0x00700000 0x1000>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+			stride = <1>;
+			ranges = <0x0 0x00700000 0x1000>;
+		};
+
+		thermal-zones {
+			#include "qcom-thermal.dtsi"
+		};
+
 		gcc: clock-controller@900000 {
 			compatible = "qcom,gcc-ipq8064";
 			reg = <0x00900000 0x4000>;
 			#clock-cells = <1>;
 			#reset-cells = <1>;
+			tsens: tsens-ipq8064 {
+				compatible = "qcom,qcom-tsens";
+				qcom,calib-offsets = <0x400 0x410>;
+				qcom,tsens-slopes = <1176 1176 1154 1176 1111
+						     1132 1132 1199 1132 1199
+						     1132>;
+				qcom,qfprom = <&imem 0x400 11>, <&imem 0x410 11>;
+				qcom,qfprom-names = "calib", "backup_calib";
+				#thermal-sensor-cells = <1>;
+			};
 		};
 	};
 };
diff --git a/arch/arm/boot/dts/qcom-msm8660.dtsi b/arch/arm/boot/dts/qcom-msm8660.dtsi
index 0affd61..4eb002c 100644
--- a/arch/arm/boot/dts/qcom-msm8660.dtsi
+++ b/arch/arm/boot/dts/qcom-msm8660.dtsi
@@ -15,7 +15,7 @@ 
 		#address-cells = <1>;
 		#size-cells = <0>;
 
-		cpu@0 {
+		cpu0: cpu@0 {
 			compatible = "qcom,scorpion";
 			enable-method = "qcom,gcc-msm8660";
 			device_type = "cpu";
@@ -23,7 +23,7 @@ 
 			next-level-cache = <&L2>;
 		};
 
-		cpu@1 {
+		cpu1: cpu@1 {
 			compatible = "qcom,scorpion";
 			enable-method = "qcom,gcc-msm8660";
 			device_type = "cpu";
@@ -73,11 +73,34 @@ 
 			#interrupt-cells = <2>;
 		};
 
+		imem: memory@700000 {
+			compatible = "qcom,qfprom", "syscon";
+			reg = <0x00700000 0x1000>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+			stride = <1>;
+			ranges = <0x0 0x00700000 0x1000>;
+		};
+
+		thermal-zones {
+			#include "qcom-thermal.dtsi"
+		};
+
 		gcc: clock-controller@900000 {
 			compatible = "qcom,gcc-msm8660";
 			#clock-cells = <1>;
 			#reset-cells = <1>;
 			reg = <0x900000 0x4000>;
+			tsens: tsens-msm8660 {
+				compatible = "qcom,qcom-tsens";
+				qcom,calib-offsets = <0x400 0x410>;
+				qcom,tsens-slopes = <1176 1176 1154 1176 1111
+						     1132 1132 1199 1132 1199
+						     1132>;
+				qcom,qfprom = <&imem 0x400 11>, <&imem 0x410 11>;
+				qcom,qfprom-names = "calib", "backup_calib";
+				#thermal-sensor-cells = <1>;
+			};
 		};
 
 		gsbi12: gsbi@19c00000 {
diff --git a/arch/arm/boot/dts/qcom-msm8960.dtsi b/arch/arm/boot/dts/qcom-msm8960.dtsi
index e1b0d5c..3722816 100644
--- a/arch/arm/boot/dts/qcom-msm8960.dtsi
+++ b/arch/arm/boot/dts/qcom-msm8960.dtsi
@@ -16,7 +16,7 @@ 
 		#size-cells = <0>;
 		interrupts = <1 14 0x304>;
 
-		cpu@0 {
+		cpu0: cpu@0 {
 			compatible = "qcom,krait";
 			enable-method = "qcom,kpss-acc-v1";
 			device_type = "cpu";
@@ -26,7 +26,7 @@ 
 			qcom,saw = <&saw0>;
 		};
 
-		cpu@1 {
+		cpu1: cpu@1 {
 			compatible = "qcom,krait";
 			enable-method = "qcom,kpss-acc-v1";
 			device_type = "cpu";
@@ -84,11 +84,35 @@ 
 			reg = <0x800000 0x4000>;
 		};
 
+		imem: memory@700000 {
+			compatible = "qcom,qfprom", "syscon";
+			reg = <0x00700000 0x1000>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+			stride = <1>;
+			ranges = <0x0 0x00700000 0x1000>;
+		};
+
+		thermal-zones {
+			#include "qcom-thermal.dtsi"
+		};
+
 		gcc: clock-controller@900000 {
 			compatible = "qcom,gcc-msm8960";
 			#clock-cells = <1>;
 			#reset-cells = <1>;
 			reg = <0x900000 0x4000>;
+
+			tsens: tsens-msm8960 {
+				compatible = "qcom,qcom-tsens";
+				qcom,calib-offsets = <0x400 0x410>;
+				qcom,tsens-slopes = <1176 1176 1154 1176 1111
+						     1132 1132 1199 1132 1199
+						     1132>;
+				qcom,qfprom = <&imem 0x400 11>, <&imem 0x410 11>;
+				qcom,qfprom-names = "calib", "backup_calib";
+				#thermal-sensor-cells = <1>;
+			};
 		};
 
 		clock-controller@4000000 {
diff --git a/arch/arm/boot/dts/qcom-thermal.dtsi b/arch/arm/boot/dts/qcom-thermal.dtsi
new file mode 100644
index 0000000..963a597
--- /dev/null
+++ b/arch/arm/boot/dts/qcom-thermal.dtsi
@@ -0,0 +1,47 @@ 
+/*
+ * Device Tree Source for ipq8064 SoC thermal
+ *
+ * Copyright (c) 2015 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.
+ *
+ */
+
+#include <dt-bindings/thermal/thermal.h>
+
+cpu_thermal0: cpu_thermal0 {
+	polling-delay-passive = <2000>; /* milliseconds */
+	polling-delay = <5000>; /* milliseconds */
+
+			/* sensor	ID */
+	thermal-sensors = <&tsens	0>;
+	linux,hwmon;
+
+	trips {
+		thermal0_cpu_alert: thermal0_cpu_alert {
+			temperature = <60000>; /* millicelsius */
+			hysteresis = <2000>; /* millicelsius */
+			type = "passive";
+		};
+		thermal0_cpu_crit: thermal0_cpu_crit {
+			temperature = <100000>; /* millicelsius */
+			hysteresis = <2000>; /* millicelsius */
+			type = "critical";
+		};
+	};
+
+	cooling-maps {
+			map0 {
+				trip = <&thermal0_cpu_alert>;
+				cooling-device =
+					<&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+			};
+	};
+};