All of lore.kernel.org
 help / color / mirror / Atom feed
* (no subject)
@ 2020-10-07  7:54 ` Michael Kao
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Kao @ 2020-10-07  7:54 UTC (permalink / raw)
  To: Zhang Rui, Daniel Lezcano, linux-pm, srv_heupstream
  Cc: Eduardo Valentin, Rob Herring, Mark Rutland, Matthias Brugger,
	hsinyi, devicetree, linux-kernel, linux-arm-kernel,
	linux-mediatek

m 308d530ee9c28c7c729a5020073405522d27e091 Mon Sep 17 00:00:00 2001
From: Michael Kao <michael.kao@mediatek.com>
Date: Wed, 7 Oct 2020 15:42:57 +0800
Subject: [v5 0/2] Add Mediatek thermal dirver and dtsi
This patchset supports for MT8183 chip to mtk_thermal.c.
Add thermal zone of all the thermal sensor in SoC for
another get temperatrue. They don't need to thermal throttle.
And we bind coolers for thermal zone nodes of cpu_thermal.

Rebase to kernel-5.9-rc1.

Update content:

    - Remove the [v4,7/7] thermal: mediatek: use spinlock to protect PTPCORESEL

[2/2]
    - Add the judgement to the version of raw_to_mcelsius.

Michael Kao (1):
  arm64: dts: mt8183: add thermal zone node
  thermal: mediatek: add another get_temp ops for thermal sensors

 arch/arm64/boot/dts/mediatek/mt8183.dtsi | 84 ++++++++++++++++++++++++
 drivers/thermal/mtk_thermal.c            | 77 ++++++++++++++++++++--
 2 files changed, 154 insertions(+), 7 deletions(-)

--


^ permalink raw reply	[flat|nested] 14+ messages in thread

* (no subject)
@ 2020-10-07  7:54 ` Michael Kao
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Kao @ 2020-10-07  7:54 UTC (permalink / raw)
  To: Zhang Rui, Daniel Lezcano, linux-pm, srv_heupstream
  Cc: Mark Rutland, devicetree, linux-kernel, Eduardo Valentin,
	Rob Herring, linux-mediatek, hsinyi, Matthias Brugger,
	linux-arm-kernel

m 308d530ee9c28c7c729a5020073405522d27e091 Mon Sep 17 00:00:00 2001
From: Michael Kao <michael.kao@mediatek.com>
Date: Wed, 7 Oct 2020 15:42:57 +0800
Subject: [v5 0/2] Add Mediatek thermal dirver and dtsi
This patchset supports for MT8183 chip to mtk_thermal.c.
Add thermal zone of all the thermal sensor in SoC for
another get temperatrue. They don't need to thermal throttle.
And we bind coolers for thermal zone nodes of cpu_thermal.

Rebase to kernel-5.9-rc1.

Update content:

    - Remove the [v4,7/7] thermal: mediatek: use spinlock to protect PTPCORESEL

[2/2]
    - Add the judgement to the version of raw_to_mcelsius.

Michael Kao (1):
  arm64: dts: mt8183: add thermal zone node
  thermal: mediatek: add another get_temp ops for thermal sensors

 arch/arm64/boot/dts/mediatek/mt8183.dtsi | 84 ++++++++++++++++++++++++
 drivers/thermal/mtk_thermal.c            | 77 ++++++++++++++++++++--
 2 files changed, 154 insertions(+), 7 deletions(-)

--

_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

^ permalink raw reply	[flat|nested] 14+ messages in thread

* (no subject)
@ 2020-10-07  7:54 ` Michael Kao
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Kao @ 2020-10-07  7:54 UTC (permalink / raw)
  To: Zhang Rui, Daniel Lezcano, linux-pm, srv_heupstream
  Cc: Mark Rutland, devicetree, linux-kernel, Eduardo Valentin,
	Rob Herring, linux-mediatek, hsinyi, Matthias Brugger,
	linux-arm-kernel

m 308d530ee9c28c7c729a5020073405522d27e091 Mon Sep 17 00:00:00 2001
From: Michael Kao <michael.kao@mediatek.com>
Date: Wed, 7 Oct 2020 15:42:57 +0800
Subject: [v5 0/2] Add Mediatek thermal dirver and dtsi
This patchset supports for MT8183 chip to mtk_thermal.c.
Add thermal zone of all the thermal sensor in SoC for
another get temperatrue. They don't need to thermal throttle.
And we bind coolers for thermal zone nodes of cpu_thermal.

Rebase to kernel-5.9-rc1.

Update content:

    - Remove the [v4,7/7] thermal: mediatek: use spinlock to protect PTPCORESEL

[2/2]
    - Add the judgement to the version of raw_to_mcelsius.

Michael Kao (1):
  arm64: dts: mt8183: add thermal zone node
  thermal: mediatek: add another get_temp ops for thermal sensors

 arch/arm64/boot/dts/mediatek/mt8183.dtsi | 84 ++++++++++++++++++++++++
 drivers/thermal/mtk_thermal.c            | 77 ++++++++++++++++++++--
 2 files changed, 154 insertions(+), 7 deletions(-)

--

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [v5 0/2] Add Mediatek thermal dirver and dtsi
  2020-10-07  7:54 ` Michael Kao
  (?)
@ 2020-10-07  7:54   ` Michael Kao
  -1 siblings, 0 replies; 14+ messages in thread
From: Michael Kao @ 2020-10-07  7:54 UTC (permalink / raw)
  To: Zhang Rui, Daniel Lezcano, linux-pm, srv_heupstream
  Cc: Eduardo Valentin, Rob Herring, Mark Rutland, Matthias Brugger,
	hsinyi, devicetree, linux-kernel, linux-arm-kernel,
	linux-mediatek, Michael Kao

Rebase to kernel-5.9-rc1.

Update content:

    - Remove the [v4,7/7] thermal: mediatek: use spinlock to protect PTPCORESEL

[2/2]
    - Add the judgement to the version of raw_to_mcelsius.

Michael Kao (1):
  arm64: dts: mt8183: add thermal zone node
  thermal: mediatek: add another get_temp ops for thermal sensors

 arch/arm64/boot/dts/mediatek/mt8183.dtsi | 84 ++++++++++++++++++++++++
 drivers/thermal/mtk_thermal.c            | 77 ++++++++++++++++++++--
 2 files changed, 154 insertions(+), 7 deletions(-)

-- 
2.18.0

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [v5 0/2] Add Mediatek thermal dirver and dtsi
@ 2020-10-07  7:54   ` Michael Kao
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Kao @ 2020-10-07  7:54 UTC (permalink / raw)
  To: Zhang Rui, Daniel Lezcano, linux-pm, srv_heupstream
  Cc: Mark Rutland, devicetree, linux-kernel, Michael Kao,
	Eduardo Valentin, Rob Herring, linux-mediatek, hsinyi,
	Matthias Brugger, linux-arm-kernel

Rebase to kernel-5.9-rc1.

Update content:

    - Remove the [v4,7/7] thermal: mediatek: use spinlock to protect PTPCORESEL

[2/2]
    - Add the judgement to the version of raw_to_mcelsius.

Michael Kao (1):
  arm64: dts: mt8183: add thermal zone node
  thermal: mediatek: add another get_temp ops for thermal sensors

 arch/arm64/boot/dts/mediatek/mt8183.dtsi | 84 ++++++++++++++++++++++++
 drivers/thermal/mtk_thermal.c            | 77 ++++++++++++++++++++--
 2 files changed, 154 insertions(+), 7 deletions(-)

-- 
2.18.0
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [v5 0/2] Add Mediatek thermal dirver and dtsi
@ 2020-10-07  7:54   ` Michael Kao
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Kao @ 2020-10-07  7:54 UTC (permalink / raw)
  To: Zhang Rui, Daniel Lezcano, linux-pm, srv_heupstream
  Cc: Mark Rutland, devicetree, linux-kernel, Michael Kao,
	Eduardo Valentin, Rob Herring, linux-mediatek, hsinyi,
	Matthias Brugger, linux-arm-kernel

Rebase to kernel-5.9-rc1.

Update content:

    - Remove the [v4,7/7] thermal: mediatek: use spinlock to protect PTPCORESEL

[2/2]
    - Add the judgement to the version of raw_to_mcelsius.

Michael Kao (1):
  arm64: dts: mt8183: add thermal zone node
  thermal: mediatek: add another get_temp ops for thermal sensors

 arch/arm64/boot/dts/mediatek/mt8183.dtsi | 84 ++++++++++++++++++++++++
 drivers/thermal/mtk_thermal.c            | 77 ++++++++++++++++++++--
 2 files changed, 154 insertions(+), 7 deletions(-)

-- 
2.18.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 1/2] arm64: dts: mt8183: add thermal zone node
  2020-10-07  7:54 ` Michael Kao
@ 2020-10-07  7:54   ` Michael Kao
  -1 siblings, 0 replies; 14+ messages in thread
From: Michael Kao @ 2020-10-07  7:54 UTC (permalink / raw)
  To: Zhang Rui, Daniel Lezcano, linux-pm, srv_heupstream
  Cc: Mark Rutland, devicetree, linux-kernel, michael.kao,
	Eduardo Valentin, Rob Herring, linux-mediatek, hsinyi,
	Matthias Brugger, Matthias Kaehlcke, linux-arm-kernel

From: "michael.kao" <michael.kao@mediatek.com>

Add thermal zone node to Mediatek MT8183 dts file.

Evaluate the thermal zone every 500ms while not cooling
and every 100ms when passive cooling is performed.

Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
Signed-off-by: Michael Kao <michael.kao@mediatek.com>
---
 arch/arm64/boot/dts/mediatek/mt8183.dtsi | 84 ++++++++++++++++++++++++
 1 file changed, 84 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8183.dtsi b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
index 8fed72bb35d7..1cd093cf33f3 100644
--- a/arch/arm64/boot/dts/mediatek/mt8183.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
@@ -430,6 +430,86 @@
 			status = "disabled";
 		};
 
+		thermal: thermal@1100b000 {
+			#thermal-sensor-cells = <1>;
+			compatible = "mediatek,mt8183-thermal";
+			reg = <0 0x1100b000 0 0x1000>;
+			clocks = <&infracfg CLK_INFRA_THERM>,
+				 <&infracfg CLK_INFRA_AUXADC>;
+			clock-names = "therm", "auxadc";
+			resets = <&infracfg  MT8183_INFRACFG_AO_THERM_SW_RST>;
+			mediatek,auxadc = <&auxadc>;
+			mediatek,apmixedsys = <&apmixedsys>;
+			nvmem-cells = <&thermal_calibration>;
+			nvmem-cell-names = "calibration-data";
+		};
+
+		thermal-zones {
+			cpu_thermal: cpu_thermal {
+				polling-delay-passive = <100>;
+				polling-delay = <500>;
+				thermal-sensors = <&thermal 0>;
+				sustainable-power = <5000>;
+			};
+
+			/* The tzts1 ~ tzts6 don't need to polling */
+			/* The tzts1 ~ tzts6 don't need to thermal throttle */
+
+			tzts1: tzts1 {
+				polling-delay-passive = <0>;
+				polling-delay = <0>;
+				thermal-sensors = <&thermal 1>;
+				sustainable-power = <5000>;
+				trips {};
+				cooling-maps {};
+			};
+
+			tzts2: tzts2 {
+				polling-delay-passive = <0>;
+				polling-delay = <0>;
+				thermal-sensors = <&thermal 2>;
+				sustainable-power = <5000>;
+				trips {};
+				cooling-maps {};
+			};
+
+			tzts3: tzts3 {
+				polling-delay-passive = <0>;
+				polling-delay = <0>;
+				thermal-sensors = <&thermal 3>;
+				sustainable-power = <5000>;
+				trips {};
+				cooling-maps {};
+			};
+
+			tzts4: tzts4 {
+				polling-delay-passive = <0>;
+				polling-delay = <0>;
+				thermal-sensors = <&thermal 4>;
+				sustainable-power = <5000>;
+				trips {};
+				cooling-maps {};
+			};
+
+			tzts5: tzts5 {
+				polling-delay-passive = <0>;
+				polling-delay = <0>;
+				thermal-sensors = <&thermal 5>;
+				sustainable-power = <5000>;
+				trips {};
+				cooling-maps {};
+			};
+
+			tztsABB: tztsABB {
+				polling-delay-passive = <0>;
+				polling-delay = <0>;
+				thermal-sensors = <&thermal 6>;
+				sustainable-power = <5000>;
+				trips {};
+				cooling-maps {};
+			};
+		};
+
 		i2c3: i2c@1100f000 {
 			compatible = "mediatek,mt8183-i2c";
 			reg = <0 0x1100f000 0 0x1000>,
@@ -675,6 +755,10 @@
 			compatible = "mediatek,mt8183-efuse",
 				     "mediatek,efuse";
 			reg = <0 0x11f10000 0 0x1000>;
+
+			thermal_calibration: calib@180 {
+				reg = <0x180 0xc>;
+			};
 		};
 
 		u3phy: usb-phy@11f40000 {
-- 
2.18.0
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 1/2] arm64: dts: mt8183: add thermal zone node
@ 2020-10-07  7:54   ` Michael Kao
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Kao @ 2020-10-07  7:54 UTC (permalink / raw)
  To: Zhang Rui, Daniel Lezcano, linux-pm, srv_heupstream
  Cc: Mark Rutland, devicetree, linux-kernel, michael.kao,
	Eduardo Valentin, Rob Herring, linux-mediatek, hsinyi,
	Matthias Brugger, Matthias Kaehlcke, linux-arm-kernel

From: "michael.kao" <michael.kao@mediatek.com>

Add thermal zone node to Mediatek MT8183 dts file.

Evaluate the thermal zone every 500ms while not cooling
and every 100ms when passive cooling is performed.

Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
Signed-off-by: Michael Kao <michael.kao@mediatek.com>
---
 arch/arm64/boot/dts/mediatek/mt8183.dtsi | 84 ++++++++++++++++++++++++
 1 file changed, 84 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8183.dtsi b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
index 8fed72bb35d7..1cd093cf33f3 100644
--- a/arch/arm64/boot/dts/mediatek/mt8183.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8183.dtsi
@@ -430,6 +430,86 @@
 			status = "disabled";
 		};
 
+		thermal: thermal@1100b000 {
+			#thermal-sensor-cells = <1>;
+			compatible = "mediatek,mt8183-thermal";
+			reg = <0 0x1100b000 0 0x1000>;
+			clocks = <&infracfg CLK_INFRA_THERM>,
+				 <&infracfg CLK_INFRA_AUXADC>;
+			clock-names = "therm", "auxadc";
+			resets = <&infracfg  MT8183_INFRACFG_AO_THERM_SW_RST>;
+			mediatek,auxadc = <&auxadc>;
+			mediatek,apmixedsys = <&apmixedsys>;
+			nvmem-cells = <&thermal_calibration>;
+			nvmem-cell-names = "calibration-data";
+		};
+
+		thermal-zones {
+			cpu_thermal: cpu_thermal {
+				polling-delay-passive = <100>;
+				polling-delay = <500>;
+				thermal-sensors = <&thermal 0>;
+				sustainable-power = <5000>;
+			};
+
+			/* The tzts1 ~ tzts6 don't need to polling */
+			/* The tzts1 ~ tzts6 don't need to thermal throttle */
+
+			tzts1: tzts1 {
+				polling-delay-passive = <0>;
+				polling-delay = <0>;
+				thermal-sensors = <&thermal 1>;
+				sustainable-power = <5000>;
+				trips {};
+				cooling-maps {};
+			};
+
+			tzts2: tzts2 {
+				polling-delay-passive = <0>;
+				polling-delay = <0>;
+				thermal-sensors = <&thermal 2>;
+				sustainable-power = <5000>;
+				trips {};
+				cooling-maps {};
+			};
+
+			tzts3: tzts3 {
+				polling-delay-passive = <0>;
+				polling-delay = <0>;
+				thermal-sensors = <&thermal 3>;
+				sustainable-power = <5000>;
+				trips {};
+				cooling-maps {};
+			};
+
+			tzts4: tzts4 {
+				polling-delay-passive = <0>;
+				polling-delay = <0>;
+				thermal-sensors = <&thermal 4>;
+				sustainable-power = <5000>;
+				trips {};
+				cooling-maps {};
+			};
+
+			tzts5: tzts5 {
+				polling-delay-passive = <0>;
+				polling-delay = <0>;
+				thermal-sensors = <&thermal 5>;
+				sustainable-power = <5000>;
+				trips {};
+				cooling-maps {};
+			};
+
+			tztsABB: tztsABB {
+				polling-delay-passive = <0>;
+				polling-delay = <0>;
+				thermal-sensors = <&thermal 6>;
+				sustainable-power = <5000>;
+				trips {};
+				cooling-maps {};
+			};
+		};
+
 		i2c3: i2c@1100f000 {
 			compatible = "mediatek,mt8183-i2c";
 			reg = <0 0x1100f000 0 0x1000>,
@@ -675,6 +755,10 @@
 			compatible = "mediatek,mt8183-efuse",
 				     "mediatek,efuse";
 			reg = <0 0x11f10000 0 0x1000>;
+
+			thermal_calibration: calib@180 {
+				reg = <0x180 0xc>;
+			};
 		};
 
 		u3phy: usb-phy@11f40000 {
-- 
2.18.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 2/2] thermal: mediatek: add another get_temp ops for thermal sensors
  2020-10-07  7:54 ` Michael Kao
  (?)
@ 2020-10-07  7:54   ` Michael Kao
  -1 siblings, 0 replies; 14+ messages in thread
From: Michael Kao @ 2020-10-07  7:54 UTC (permalink / raw)
  To: Zhang Rui, Daniel Lezcano, linux-pm, srv_heupstream
  Cc: Eduardo Valentin, Rob Herring, Mark Rutland, Matthias Brugger,
	hsinyi, devicetree, linux-kernel, linux-arm-kernel,
	linux-mediatek, Michael Kao

Provide thermal zone to read thermal sensor
in the SoC. We can read all the thermal sensors
value in the SoC by the node /sys/class/thermal/

In mtk_thermal_bank_temperature, return -EAGAIN instead of -EACCESS
on the first read of sensor that often are bogus values.
This can avoid following warning on boot:

  thermal thermal_zone6: failed to read out thermal zone (-13)

Signed-off-by: Michael Kao <michael.kao@mediatek.com>
Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org>
---
 drivers/thermal/mtk_thermal.c | 77 +++++++++++++++++++++++++++++++----
 1 file changed, 70 insertions(+), 7 deletions(-)

diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
index 0bd7aa564bc2..c638a69ba632 100644
--- a/drivers/thermal/mtk_thermal.c
+++ b/drivers/thermal/mtk_thermal.c
@@ -245,6 +245,11 @@ enum mtk_thermal_version {
 
 struct mtk_thermal;
 
+struct mtk_thermal_zone {
+	struct mtk_thermal *mt;
+	int id;
+};
+
 struct thermal_bank_cfg {
 	unsigned int num_sensors;
 	const int *sensors;
@@ -668,7 +673,7 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
 		 * not immediately shut down.
 		 */
 		if (temp > 200000)
-			temp = 0;
+			temp = -EAGAIN;
 
 		if (temp > max)
 			max = temp;
@@ -679,7 +684,8 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
 
 static int mtk_read_temp(void *data, int *temperature)
 {
-	struct mtk_thermal *mt = data;
+	struct mtk_thermal_zone *tz = data;
+	struct mtk_thermal *mt = tz->mt;
 	int i;
 	int tempmax = INT_MIN;
 
@@ -698,10 +704,47 @@ static int mtk_read_temp(void *data, int *temperature)
 	return 0;
 }
 
+static int mtk_read_sensor_temp(void *data, int *temperature)
+{
+	struct mtk_thermal_zone *tz = data;
+	struct mtk_thermal *mt = tz->mt;
+	const struct mtk_thermal_data *conf = mt->conf;
+	int id = tz->id - 1;
+	int temp = INT_MIN;
+	u32 raw;
+
+	if (id < 0)
+		return  -EACCES;
+
+	raw = readl(mt->thermal_base + conf->msr[id]);
+
+	if (mt->conf->version == MTK_THERMAL_V1)
+		temp = raw_to_mcelsius_v1(mt, id, raw);
+	else
+		temp = raw_to_mcelsius_v2(mt, id, raw);
+
+	/*
+	 * The first read of a sensor often contains very high bogus
+	 * temperature value. Filter these out so that the system does
+	 * not immediately shut down.
+	 */
+
+	if (temp > 200000)
+		return  -EAGAIN;
+
+	*temperature = temp;
+
+	return 0;
+}
+
 static const struct thermal_zone_of_device_ops mtk_thermal_ops = {
 	.get_temp = mtk_read_temp,
 };
 
+static const struct thermal_zone_of_device_ops mtk_thermal_sensor_ops = {
+	.get_temp = mtk_read_sensor_temp,
+};
+
 static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
 				  u32 apmixed_phys_base, u32 auxadc_phys_base,
 				  int ctrl_id)
@@ -992,6 +1035,7 @@ static int mtk_thermal_probe(struct platform_device *pdev)
 	u64 auxadc_phys_base, apmixed_phys_base;
 	struct thermal_zone_device *tzdev;
 	void __iomem *apmixed_base, *auxadc_base;
+	struct mtk_thermal_zone *tz;
 
 	mt = devm_kzalloc(&pdev->dev, sizeof(*mt), GFP_KERNEL);
 	if (!mt)
@@ -1080,11 +1124,30 @@ static int mtk_thermal_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, mt);
 
-	tzdev = devm_thermal_zone_of_sensor_register(&pdev->dev, 0, mt,
-						     &mtk_thermal_ops);
-	if (IS_ERR(tzdev)) {
-		ret = PTR_ERR(tzdev);
-		goto err_disable_clk_peri_therm;
+	for (i = 0; i < mt->conf->num_sensors + 1; i++) {
+		tz = kmalloc(sizeof(*tz), GFP_KERNEL);
+		if (!tz)
+			return -ENOMEM;
+
+		tz->mt = mt;
+		tz->id = i;
+
+		tzdev = devm_thermal_zone_of_sensor_register(&pdev->dev, i,
+							     tz, (i == 0) ?
+				&mtk_thermal_ops : &mtk_thermal_sensor_ops);
+
+		if (IS_ERR(tzdev)) {
+			if (PTR_ERR(tzdev) == -ENODEV) {
+				dev_warn(&pdev->dev,
+					 "sensor %d not registered in thermal zone in dt\n",
+					 i);
+				continue;
+			}
+			if (PTR_ERR(tzdev) == -EACCES) {
+				ret = PTR_ERR(tzdev);
+				goto err_disable_clk_peri_therm;
+			}
+		}
 	}
 
 	return 0;
-- 
2.18.0

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 2/2] thermal: mediatek: add another get_temp ops for thermal sensors
@ 2020-10-07  7:54   ` Michael Kao
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Kao @ 2020-10-07  7:54 UTC (permalink / raw)
  To: Zhang Rui, Daniel Lezcano, linux-pm, srv_heupstream
  Cc: Mark Rutland, devicetree, linux-kernel, Michael Kao,
	Eduardo Valentin, Rob Herring, linux-mediatek, hsinyi,
	Matthias Brugger, linux-arm-kernel

Provide thermal zone to read thermal sensor
in the SoC. We can read all the thermal sensors
value in the SoC by the node /sys/class/thermal/

In mtk_thermal_bank_temperature, return -EAGAIN instead of -EACCESS
on the first read of sensor that often are bogus values.
This can avoid following warning on boot:

  thermal thermal_zone6: failed to read out thermal zone (-13)

Signed-off-by: Michael Kao <michael.kao@mediatek.com>
Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org>
---
 drivers/thermal/mtk_thermal.c | 77 +++++++++++++++++++++++++++++++----
 1 file changed, 70 insertions(+), 7 deletions(-)

diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
index 0bd7aa564bc2..c638a69ba632 100644
--- a/drivers/thermal/mtk_thermal.c
+++ b/drivers/thermal/mtk_thermal.c
@@ -245,6 +245,11 @@ enum mtk_thermal_version {
 
 struct mtk_thermal;
 
+struct mtk_thermal_zone {
+	struct mtk_thermal *mt;
+	int id;
+};
+
 struct thermal_bank_cfg {
 	unsigned int num_sensors;
 	const int *sensors;
@@ -668,7 +673,7 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
 		 * not immediately shut down.
 		 */
 		if (temp > 200000)
-			temp = 0;
+			temp = -EAGAIN;
 
 		if (temp > max)
 			max = temp;
@@ -679,7 +684,8 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
 
 static int mtk_read_temp(void *data, int *temperature)
 {
-	struct mtk_thermal *mt = data;
+	struct mtk_thermal_zone *tz = data;
+	struct mtk_thermal *mt = tz->mt;
 	int i;
 	int tempmax = INT_MIN;
 
@@ -698,10 +704,47 @@ static int mtk_read_temp(void *data, int *temperature)
 	return 0;
 }
 
+static int mtk_read_sensor_temp(void *data, int *temperature)
+{
+	struct mtk_thermal_zone *tz = data;
+	struct mtk_thermal *mt = tz->mt;
+	const struct mtk_thermal_data *conf = mt->conf;
+	int id = tz->id - 1;
+	int temp = INT_MIN;
+	u32 raw;
+
+	if (id < 0)
+		return  -EACCES;
+
+	raw = readl(mt->thermal_base + conf->msr[id]);
+
+	if (mt->conf->version == MTK_THERMAL_V1)
+		temp = raw_to_mcelsius_v1(mt, id, raw);
+	else
+		temp = raw_to_mcelsius_v2(mt, id, raw);
+
+	/*
+	 * The first read of a sensor often contains very high bogus
+	 * temperature value. Filter these out so that the system does
+	 * not immediately shut down.
+	 */
+
+	if (temp > 200000)
+		return  -EAGAIN;
+
+	*temperature = temp;
+
+	return 0;
+}
+
 static const struct thermal_zone_of_device_ops mtk_thermal_ops = {
 	.get_temp = mtk_read_temp,
 };
 
+static const struct thermal_zone_of_device_ops mtk_thermal_sensor_ops = {
+	.get_temp = mtk_read_sensor_temp,
+};
+
 static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
 				  u32 apmixed_phys_base, u32 auxadc_phys_base,
 				  int ctrl_id)
@@ -992,6 +1035,7 @@ static int mtk_thermal_probe(struct platform_device *pdev)
 	u64 auxadc_phys_base, apmixed_phys_base;
 	struct thermal_zone_device *tzdev;
 	void __iomem *apmixed_base, *auxadc_base;
+	struct mtk_thermal_zone *tz;
 
 	mt = devm_kzalloc(&pdev->dev, sizeof(*mt), GFP_KERNEL);
 	if (!mt)
@@ -1080,11 +1124,30 @@ static int mtk_thermal_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, mt);
 
-	tzdev = devm_thermal_zone_of_sensor_register(&pdev->dev, 0, mt,
-						     &mtk_thermal_ops);
-	if (IS_ERR(tzdev)) {
-		ret = PTR_ERR(tzdev);
-		goto err_disable_clk_peri_therm;
+	for (i = 0; i < mt->conf->num_sensors + 1; i++) {
+		tz = kmalloc(sizeof(*tz), GFP_KERNEL);
+		if (!tz)
+			return -ENOMEM;
+
+		tz->mt = mt;
+		tz->id = i;
+
+		tzdev = devm_thermal_zone_of_sensor_register(&pdev->dev, i,
+							     tz, (i == 0) ?
+				&mtk_thermal_ops : &mtk_thermal_sensor_ops);
+
+		if (IS_ERR(tzdev)) {
+			if (PTR_ERR(tzdev) == -ENODEV) {
+				dev_warn(&pdev->dev,
+					 "sensor %d not registered in thermal zone in dt\n",
+					 i);
+				continue;
+			}
+			if (PTR_ERR(tzdev) == -EACCES) {
+				ret = PTR_ERR(tzdev);
+				goto err_disable_clk_peri_therm;
+			}
+		}
 	}
 
 	return 0;
-- 
2.18.0
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 2/2] thermal: mediatek: add another get_temp ops for thermal sensors
@ 2020-10-07  7:54   ` Michael Kao
  0 siblings, 0 replies; 14+ messages in thread
From: Michael Kao @ 2020-10-07  7:54 UTC (permalink / raw)
  To: Zhang Rui, Daniel Lezcano, linux-pm, srv_heupstream
  Cc: Mark Rutland, devicetree, linux-kernel, Michael Kao,
	Eduardo Valentin, Rob Herring, linux-mediatek, hsinyi,
	Matthias Brugger, linux-arm-kernel

Provide thermal zone to read thermal sensor
in the SoC. We can read all the thermal sensors
value in the SoC by the node /sys/class/thermal/

In mtk_thermal_bank_temperature, return -EAGAIN instead of -EACCESS
on the first read of sensor that often are bogus values.
This can avoid following warning on boot:

  thermal thermal_zone6: failed to read out thermal zone (-13)

Signed-off-by: Michael Kao <michael.kao@mediatek.com>
Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org>
---
 drivers/thermal/mtk_thermal.c | 77 +++++++++++++++++++++++++++++++----
 1 file changed, 70 insertions(+), 7 deletions(-)

diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
index 0bd7aa564bc2..c638a69ba632 100644
--- a/drivers/thermal/mtk_thermal.c
+++ b/drivers/thermal/mtk_thermal.c
@@ -245,6 +245,11 @@ enum mtk_thermal_version {
 
 struct mtk_thermal;
 
+struct mtk_thermal_zone {
+	struct mtk_thermal *mt;
+	int id;
+};
+
 struct thermal_bank_cfg {
 	unsigned int num_sensors;
 	const int *sensors;
@@ -668,7 +673,7 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
 		 * not immediately shut down.
 		 */
 		if (temp > 200000)
-			temp = 0;
+			temp = -EAGAIN;
 
 		if (temp > max)
 			max = temp;
@@ -679,7 +684,8 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
 
 static int mtk_read_temp(void *data, int *temperature)
 {
-	struct mtk_thermal *mt = data;
+	struct mtk_thermal_zone *tz = data;
+	struct mtk_thermal *mt = tz->mt;
 	int i;
 	int tempmax = INT_MIN;
 
@@ -698,10 +704,47 @@ static int mtk_read_temp(void *data, int *temperature)
 	return 0;
 }
 
+static int mtk_read_sensor_temp(void *data, int *temperature)
+{
+	struct mtk_thermal_zone *tz = data;
+	struct mtk_thermal *mt = tz->mt;
+	const struct mtk_thermal_data *conf = mt->conf;
+	int id = tz->id - 1;
+	int temp = INT_MIN;
+	u32 raw;
+
+	if (id < 0)
+		return  -EACCES;
+
+	raw = readl(mt->thermal_base + conf->msr[id]);
+
+	if (mt->conf->version == MTK_THERMAL_V1)
+		temp = raw_to_mcelsius_v1(mt, id, raw);
+	else
+		temp = raw_to_mcelsius_v2(mt, id, raw);
+
+	/*
+	 * The first read of a sensor often contains very high bogus
+	 * temperature value. Filter these out so that the system does
+	 * not immediately shut down.
+	 */
+
+	if (temp > 200000)
+		return  -EAGAIN;
+
+	*temperature = temp;
+
+	return 0;
+}
+
 static const struct thermal_zone_of_device_ops mtk_thermal_ops = {
 	.get_temp = mtk_read_temp,
 };
 
+static const struct thermal_zone_of_device_ops mtk_thermal_sensor_ops = {
+	.get_temp = mtk_read_sensor_temp,
+};
+
 static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
 				  u32 apmixed_phys_base, u32 auxadc_phys_base,
 				  int ctrl_id)
@@ -992,6 +1035,7 @@ static int mtk_thermal_probe(struct platform_device *pdev)
 	u64 auxadc_phys_base, apmixed_phys_base;
 	struct thermal_zone_device *tzdev;
 	void __iomem *apmixed_base, *auxadc_base;
+	struct mtk_thermal_zone *tz;
 
 	mt = devm_kzalloc(&pdev->dev, sizeof(*mt), GFP_KERNEL);
 	if (!mt)
@@ -1080,11 +1124,30 @@ static int mtk_thermal_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, mt);
 
-	tzdev = devm_thermal_zone_of_sensor_register(&pdev->dev, 0, mt,
-						     &mtk_thermal_ops);
-	if (IS_ERR(tzdev)) {
-		ret = PTR_ERR(tzdev);
-		goto err_disable_clk_peri_therm;
+	for (i = 0; i < mt->conf->num_sensors + 1; i++) {
+		tz = kmalloc(sizeof(*tz), GFP_KERNEL);
+		if (!tz)
+			return -ENOMEM;
+
+		tz->mt = mt;
+		tz->id = i;
+
+		tzdev = devm_thermal_zone_of_sensor_register(&pdev->dev, i,
+							     tz, (i == 0) ?
+				&mtk_thermal_ops : &mtk_thermal_sensor_ops);
+
+		if (IS_ERR(tzdev)) {
+			if (PTR_ERR(tzdev) == -ENODEV) {
+				dev_warn(&pdev->dev,
+					 "sensor %d not registered in thermal zone in dt\n",
+					 i);
+				continue;
+			}
+			if (PTR_ERR(tzdev) == -EACCES) {
+				ret = PTR_ERR(tzdev);
+				goto err_disable_clk_peri_therm;
+			}
+		}
 	}
 
 	return 0;
-- 
2.18.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Aw: [v5 0/2] Add Mediatek thermal dirver and dtsi
  2020-10-07  7:54   ` Michael Kao
  (?)
@ 2020-10-07 17:16     ` Frank Wunderlich
  -1 siblings, 0 replies; 14+ messages in thread
From: Frank Wunderlich @ 2020-10-07 17:16 UTC (permalink / raw)
  To: Michael Kao
  Cc: Zhang Rui, Daniel Lezcano, linux-pm, srv_heupstream,
	Mark Rutland, devicetree, linux-kernel, Michael Kao,
	Eduardo Valentin, Rob Herring, linux-mediatek, hsinyi,
	Matthias Brugger, linux-arm-kernel

> Gesendet: Mittwoch, 07. Oktober 2020 um 09:54 Uhr
> Von: "Michael Kao" <michael.kao@mediatek.com>
> Betreff: [v5 0/2] Add Mediatek thermal dirver and dtsi

Hi,

just a small typo "dirver" => driver and coverletter (v5) does not match series (v1/without version),
so it is not linked correctly in patchwork. I guess V1 is the right here...
imho coverletter should also include platform (mt8183). There is already a mtk
thermal driver which you want to extend for a new Chip.

regards Frank

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Aw: [v5 0/2] Add Mediatek thermal dirver and dtsi
@ 2020-10-07 17:16     ` Frank Wunderlich
  0 siblings, 0 replies; 14+ messages in thread
From: Frank Wunderlich @ 2020-10-07 17:16 UTC (permalink / raw)
  To: Michael Kao
  Cc: Mark Rutland, devicetree, srv_heupstream, linux-pm,
	Daniel Lezcano, linux-kernel, Michael Kao, Eduardo Valentin,
	Rob Herring, linux-mediatek, hsinyi, Matthias Brugger, Zhang Rui,
	linux-arm-kernel

> Gesendet: Mittwoch, 07. Oktober 2020 um 09:54 Uhr
> Von: "Michael Kao" <michael.kao@mediatek.com>
> Betreff: [v5 0/2] Add Mediatek thermal dirver and dtsi

Hi,

just a small typo "dirver" => driver and coverletter (v5) does not match series (v1/without version),
so it is not linked correctly in patchwork. I guess V1 is the right here...
imho coverletter should also include platform (mt8183). There is already a mtk
thermal driver which you want to extend for a new Chip.

regards Frank

_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Aw: [v5 0/2] Add Mediatek thermal dirver and dtsi
@ 2020-10-07 17:16     ` Frank Wunderlich
  0 siblings, 0 replies; 14+ messages in thread
From: Frank Wunderlich @ 2020-10-07 17:16 UTC (permalink / raw)
  To: Michael Kao
  Cc: Mark Rutland, devicetree, srv_heupstream, linux-pm,
	Daniel Lezcano, linux-kernel, Michael Kao, Eduardo Valentin,
	Rob Herring, linux-mediatek, hsinyi, Matthias Brugger, Zhang Rui,
	linux-arm-kernel

> Gesendet: Mittwoch, 07. Oktober 2020 um 09:54 Uhr
> Von: "Michael Kao" <michael.kao@mediatek.com>
> Betreff: [v5 0/2] Add Mediatek thermal dirver and dtsi

Hi,

just a small typo "dirver" => driver and coverletter (v5) does not match series (v1/without version),
so it is not linked correctly in patchwork. I guess V1 is the right here...
imho coverletter should also include platform (mt8183). There is already a mtk
thermal driver which you want to extend for a new Chip.

regards Frank

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2020-10-07 17:31 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-07  7:54 Michael Kao
2020-10-07  7:54 ` Michael Kao
2020-10-07  7:54 ` Michael Kao
2020-10-07  7:54 ` [v5 0/2] Add Mediatek thermal dirver and dtsi Michael Kao
2020-10-07  7:54   ` Michael Kao
2020-10-07  7:54   ` Michael Kao
2020-10-07 17:16   ` Aw: " Frank Wunderlich
2020-10-07 17:16     ` Frank Wunderlich
2020-10-07 17:16     ` Frank Wunderlich
2020-10-07  7:54 ` [PATCH 1/2] arm64: dts: mt8183: add thermal zone node Michael Kao
2020-10-07  7:54   ` Michael Kao
2020-10-07  7:54 ` [PATCH 2/2] thermal: mediatek: add another get_temp ops for thermal sensors Michael Kao
2020-10-07  7:54   ` Michael Kao
2020-10-07  7:54   ` Michael Kao

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.