linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/2] Add thermal management support for STi platform
@ 2024-07-16 17:34 Raphael Gallais-Pou
  2024-07-16 17:34 ` [PATCH v4 1/2] thermal: st: switch from CONFIG_PM_SLEEP guards to pm_sleep_ptr() Raphael Gallais-Pou
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Raphael Gallais-Pou @ 2024-07-16 17:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba,
	Maxime Coquelin, Alexandre Torgue, Patrice Chotard, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley
  Cc: linux-pm, linux-kernel, linux-stm32, linux-arm-kernel, devicetree

This patch series enhances the st_thermal driver in order to enable
support for thermal zones. The changes include:

1. Replace deprecated PM runtime macros with their updated counterparts.
2. Implementing devm_* based thermal of zone functions within the driver.
3. Updating the stih418 device-tree.

The device-tree patch depends on an earlier patch sent to the mailing
list [1].

As it is currently implemented, an alert threshold of 85°C is set to
trigger the CPU throttling, and when the temperature exceeds the
critical threshold of 95°C, the system shuts down. There is for now no
active cooling device on the platform, which explains the use of the
cpufreq framework.

[1] https://lore.kernel.org/lkml/20240320-thermal-v3-2-700296694c4a@gmail.com

Signed-off-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
---
Changes in v4:
- [2/2] optimize dependencies
- [2/2] do not return devm_* exit code
- Link to v3: https://lore.kernel.org/r/20240714-thermal-v3-0-88f2489ef7d5@gmail.com

Changes in v3:
- Fix unmet dependency in [2/2]
- Remove no more used variable in [2/2]
- Remove already merged patch in soc tree
- Link to v2: https://lore.kernel.org/r/20240625-thermal-v2-0-bf8354ed51ee@gmail.com

Changes in v2:
- Add Patrice's R-b
- Edit patch [2/3] to remove unused struct
- Link to v1: https://lore.kernel.org/r/20240518-thermal-v1-0-7dfca3ed454b@gmail.com

---
Raphael Gallais-Pou (2):
      thermal: st: switch from CONFIG_PM_SLEEP guards to pm_sleep_ptr()
      thermal: sti: depend on THERMAL_OF subsystem

 drivers/thermal/Kconfig                |  2 +-
 drivers/thermal/st/st_thermal.c        | 32 ++++++++++++--------------------
 drivers/thermal/st/st_thermal_memmap.c |  2 +-
 drivers/thermal/st/stm_thermal.c       |  8 +++-----
 4 files changed, 17 insertions(+), 27 deletions(-)
---
base-commit: 4f40be61af99a67d5580c1448acd9b74c0376389
change-id: 20240518-thermal-8f625428acf9

Best regards,
-- 
Raphael Gallais-Pou <rgallaispou@gmail.com>



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

* [PATCH v4 1/2] thermal: st: switch from CONFIG_PM_SLEEP guards to pm_sleep_ptr()
  2024-07-16 17:34 [PATCH v4 0/2] Add thermal management support for STi platform Raphael Gallais-Pou
@ 2024-07-16 17:34 ` Raphael Gallais-Pou
  2024-07-16 17:34 ` [PATCH v4 2/2] thermal: sti: depend on THERMAL_OF subsystem Raphael Gallais-Pou
  2024-08-19 20:21 ` [PATCH v4 0/2] Add thermal management support for STi platform Raphaël Gallais-Pou
  2 siblings, 0 replies; 5+ messages in thread
From: Raphael Gallais-Pou @ 2024-07-16 17:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba,
	Maxime Coquelin, Alexandre Torgue, Patrice Chotard, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley
  Cc: linux-pm, linux-kernel, linux-stm32, linux-arm-kernel, devicetree

Letting the compiler remove these functions when the kernel is built
without CONFIG_PM_SLEEP support is simpler and less error prone than the
use of #ifdef based kernel configuration guards.

Remove those guards on every ST thermal related drivers.

Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
Signed-off-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
---
 drivers/thermal/st/st_thermal.c        | 4 +---
 drivers/thermal/st/st_thermal_memmap.c | 2 +-
 drivers/thermal/st/stm_thermal.c       | 8 +++-----
 3 files changed, 5 insertions(+), 9 deletions(-)

diff --git a/drivers/thermal/st/st_thermal.c b/drivers/thermal/st/st_thermal.c
index 2a105409864e..5f33543a3a54 100644
--- a/drivers/thermal/st/st_thermal.c
+++ b/drivers/thermal/st/st_thermal.c
@@ -236,7 +236,6 @@ void st_thermal_unregister(struct platform_device *pdev)
 }
 EXPORT_SYMBOL_GPL(st_thermal_unregister);
 
-#ifdef CONFIG_PM_SLEEP
 static int st_thermal_suspend(struct device *dev)
 {
 	struct st_thermal_sensor *sensor = dev_get_drvdata(dev);
@@ -265,9 +264,8 @@ static int st_thermal_resume(struct device *dev)
 
 	return 0;
 }
-#endif
 
-SIMPLE_DEV_PM_OPS(st_thermal_pm_ops, st_thermal_suspend, st_thermal_resume);
+DEFINE_SIMPLE_DEV_PM_OPS(st_thermal_pm_ops, st_thermal_suspend, st_thermal_resume);
 EXPORT_SYMBOL_GPL(st_thermal_pm_ops);
 
 MODULE_AUTHOR("STMicroelectronics (R&D) Limited <ajitpal.singh@st.com>");
diff --git a/drivers/thermal/st/st_thermal_memmap.c b/drivers/thermal/st/st_thermal_memmap.c
index e427117381a4..97493d2b2f49 100644
--- a/drivers/thermal/st/st_thermal_memmap.c
+++ b/drivers/thermal/st/st_thermal_memmap.c
@@ -170,7 +170,7 @@ static void st_mmap_remove(struct platform_device *pdev)
 static struct platform_driver st_mmap_thermal_driver = {
 	.driver = {
 		.name	= "st_thermal_mmap",
-		.pm     = &st_thermal_pm_ops,
+		.pm     = pm_sleep_ptr(&st_thermal_pm_ops),
 		.of_match_table = st_mmap_thermal_of_match,
 	},
 	.probe		= st_mmap_probe,
diff --git a/drivers/thermal/st/stm_thermal.c b/drivers/thermal/st/stm_thermal.c
index 34785b9276fc..ffd988600ed6 100644
--- a/drivers/thermal/st/stm_thermal.c
+++ b/drivers/thermal/st/stm_thermal.c
@@ -440,7 +440,6 @@ static int stm_thermal_prepare(struct stm_thermal_sensor *sensor)
 	return ret;
 }
 
-#ifdef CONFIG_PM_SLEEP
 static int stm_thermal_suspend(struct device *dev)
 {
 	struct stm_thermal_sensor *sensor = dev_get_drvdata(dev);
@@ -466,10 +465,9 @@ static int stm_thermal_resume(struct device *dev)
 
 	return 0;
 }
-#endif /* CONFIG_PM_SLEEP */
 
-static SIMPLE_DEV_PM_OPS(stm_thermal_pm_ops,
-			 stm_thermal_suspend, stm_thermal_resume);
+static DEFINE_SIMPLE_DEV_PM_OPS(stm_thermal_pm_ops,
+				stm_thermal_suspend, stm_thermal_resume);
 
 static const struct thermal_zone_device_ops stm_tz_ops = {
 	.get_temp	= stm_thermal_get_temp,
@@ -580,7 +578,7 @@ static void stm_thermal_remove(struct platform_device *pdev)
 static struct platform_driver stm_thermal_driver = {
 	.driver = {
 		.name	= "stm_thermal",
-		.pm     = &stm_thermal_pm_ops,
+		.pm     = pm_sleep_ptr(&stm_thermal_pm_ops),
 		.of_match_table = stm_thermal_of_match,
 	},
 	.probe		= stm_thermal_probe,

-- 
2.45.2



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

* [PATCH v4 2/2] thermal: sti: depend on THERMAL_OF subsystem
  2024-07-16 17:34 [PATCH v4 0/2] Add thermal management support for STi platform Raphael Gallais-Pou
  2024-07-16 17:34 ` [PATCH v4 1/2] thermal: st: switch from CONFIG_PM_SLEEP guards to pm_sleep_ptr() Raphael Gallais-Pou
@ 2024-07-16 17:34 ` Raphael Gallais-Pou
  2024-08-19 20:21 ` [PATCH v4 0/2] Add thermal management support for STi platform Raphaël Gallais-Pou
  2 siblings, 0 replies; 5+ messages in thread
From: Raphael Gallais-Pou @ 2024-07-16 17:34 UTC (permalink / raw)
  To: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba,
	Maxime Coquelin, Alexandre Torgue, Patrice Chotard, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley
  Cc: linux-pm, linux-kernel, linux-stm32, linux-arm-kernel, devicetree

Switch to thermal_of_zone to handle thermal-zones. Replace
thermal_zone_device_register() by devm_thermal_of_zone_register() and
remove ops st_thermal_get_trip_type, st_thermal_get_trip_temp.

Signed-off-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
---
Changes in v4:
- Optimize dependencies
- Do not return devm_* exit code
Changes in v3:
- Fix unmet dependency when building with ARM64 compiler
  https://lore.kernel.org/lkml/202406270605.qodaWd4n-lkp@intel.com/
- Remove no more used polling_delay variable detected by kernel robot
  https://lore.kernel.org/lkml/202406270530.kN5wIswi-lkp@intel.com/
Changes in v2:
- Remove unused struct thermal_trip trip
---
 drivers/thermal/Kconfig         |  2 +-
 drivers/thermal/st/st_thermal.c | 28 +++++++++++-----------------
 2 files changed, 12 insertions(+), 18 deletions(-)

diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index ed16897584b4..b6b916e7e294 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -429,7 +429,7 @@ source "drivers/thermal/samsung/Kconfig"
 endmenu
 
 menu "STMicroelectronics thermal drivers"
-depends on (ARCH_STI || ARCH_STM32) && OF
+depends on (ARCH_STI || ARCH_STM32) && THERMAL_OF
 source "drivers/thermal/st/Kconfig"
 endmenu
 
diff --git a/drivers/thermal/st/st_thermal.c b/drivers/thermal/st/st_thermal.c
index 5f33543a3a54..a14a37d54698 100644
--- a/drivers/thermal/st/st_thermal.c
+++ b/drivers/thermal/st/st_thermal.c
@@ -12,6 +12,7 @@
 #include <linux/of_device.h>
 
 #include "st_thermal.h"
+#include "../thermal_hwmon.h"
 
 /* The Thermal Framework expects millidegrees */
 #define mcelsius(temp)			((temp) * 1000)
@@ -135,8 +136,6 @@ static struct thermal_zone_device_ops st_tz_ops = {
 	.get_temp	= st_thermal_get_temp,
 };
 
-static struct thermal_trip trip;
-
 int st_thermal_register(struct platform_device *pdev,
 			const struct of_device_id *st_thermal_of_match)
 {
@@ -145,7 +144,6 @@ int st_thermal_register(struct platform_device *pdev,
 	struct device_node *np = dev->of_node;
 	const struct of_device_id *match;
 
-	int polling_delay;
 	int ret;
 
 	if (!np) {
@@ -197,29 +195,24 @@ int st_thermal_register(struct platform_device *pdev,
 	if (ret)
 		goto sensor_off;
 
-	polling_delay = sensor->ops->register_enable_irq ? 0 : 1000;
-
-	trip.temperature = sensor->cdata->crit_temp;
-	trip.type = THERMAL_TRIP_CRITICAL;
-
 	sensor->thermal_dev =
-		thermal_zone_device_register_with_trips(dev_name(dev), &trip, 1, sensor,
-							&st_tz_ops, NULL, 0, polling_delay);
+		devm_thermal_of_zone_register(dev, 0, sensor, &st_tz_ops);
 	if (IS_ERR(sensor->thermal_dev)) {
-		dev_err(dev, "failed to register thermal zone device\n");
+		dev_err(dev, "failed to register thermal of zone\n");
 		ret = PTR_ERR(sensor->thermal_dev);
 		goto sensor_off;
 	}
-	ret = thermal_zone_device_enable(sensor->thermal_dev);
-	if (ret)
-		goto tzd_unregister;
 
 	platform_set_drvdata(pdev, sensor);
 
+	/*
+	 * devm_thermal_of_zone_register() doesn't enable hwmon by default
+	 * Enable it here
+	 */
+	devm_thermal_add_hwmon_sysfs(dev, sensor->thermal_dev);
+
 	return 0;
 
-tzd_unregister:
-	thermal_zone_device_unregister(sensor->thermal_dev);
 sensor_off:
 	st_thermal_sensor_off(sensor);
 
@@ -232,7 +225,8 @@ void st_thermal_unregister(struct platform_device *pdev)
 	struct st_thermal_sensor *sensor = platform_get_drvdata(pdev);
 
 	st_thermal_sensor_off(sensor);
-	thermal_zone_device_unregister(sensor->thermal_dev);
+	thermal_remove_hwmon_sysfs(sensor->thermal_dev);
+	devm_thermal_of_zone_unregister(sensor->dev, sensor->thermal_dev);
 }
 EXPORT_SYMBOL_GPL(st_thermal_unregister);
 

-- 
2.45.2



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

* Re: [PATCH v4 0/2] Add thermal management support for STi platform
  2024-07-16 17:34 [PATCH v4 0/2] Add thermal management support for STi platform Raphael Gallais-Pou
  2024-07-16 17:34 ` [PATCH v4 1/2] thermal: st: switch from CONFIG_PM_SLEEP guards to pm_sleep_ptr() Raphael Gallais-Pou
  2024-07-16 17:34 ` [PATCH v4 2/2] thermal: sti: depend on THERMAL_OF subsystem Raphael Gallais-Pou
@ 2024-08-19 20:21 ` Raphaël Gallais-Pou
  2024-08-20  8:05   ` Daniel Lezcano
  2 siblings, 1 reply; 5+ messages in thread
From: Raphaël Gallais-Pou @ 2024-08-19 20:21 UTC (permalink / raw)
  To: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba,
	Maxime Coquelin, Alexandre Torgue, Patrice Chotard, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley
  Cc: linux-pm, linux-kernel, linux-stm32, linux-arm-kernel, devicetree

Hello,

Le 16/07/2024 à 19:34, Raphael Gallais-Pou a écrit :
> This patch series enhances the st_thermal driver in order to enable
> support for thermal zones. The changes include:
> 
> 1. Replace deprecated PM runtime macros with their updated counterparts.
> 2. Implementing devm_* based thermal of zone functions within the driver.
> 3. Updating the stih418 device-tree.
> 
> The device-tree patch depends on an earlier patch sent to the mailing
> list [1].
> 
> As it is currently implemented, an alert threshold of 85°C is set to
> trigger the CPU throttling, and when the temperature exceeds the
> critical threshold of 95°C, the system shuts down. There is for now no
> active cooling device on the platform, which explains the use of the
> cpufreq framework.
> 
> [1] https://lore.kernel.org/lkml/20240320-thermal-v3-2-700296694c4a@gmail.com
> 
> Signed-off-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
> ---
> Changes in v4:
> - [2/2] optimize dependencies
> - [2/2] do not return devm_* exit code
> - Link to v3: https://lore.kernel.org/r/20240714-thermal-v3-0-88f2489ef7d5@gmail.com

Gentle ping on this serie :)

Thanks for your time,

Regards,
Raphaël

> 
> Changes in v3:
> - Fix unmet dependency in [2/2]
> - Remove no more used variable in [2/2]
> - Remove already merged patch in soc tree
> - Link to v2: https://lore.kernel.org/r/20240625-thermal-v2-0-bf8354ed51ee@gmail.com
> 
> Changes in v2:
> - Add Patrice's R-b
> - Edit patch [2/3] to remove unused struct
> - Link to v1: https://lore.kernel.org/r/20240518-thermal-v1-0-7dfca3ed454b@gmail.com
> 
> ---
> Raphael Gallais-Pou (2):
>        thermal: st: switch from CONFIG_PM_SLEEP guards to pm_sleep_ptr()
>        thermal: sti: depend on THERMAL_OF subsystem
> 
>   drivers/thermal/Kconfig                |  2 +-
>   drivers/thermal/st/st_thermal.c        | 32 ++++++++++++--------------------
>   drivers/thermal/st/st_thermal_memmap.c |  2 +-
>   drivers/thermal/st/stm_thermal.c       |  8 +++-----
>   4 files changed, 17 insertions(+), 27 deletions(-)
> ---
> base-commit: 4f40be61af99a67d5580c1448acd9b74c0376389
> change-id: 20240518-thermal-8f625428acf9
> 
> Best regards,


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

* Re: [PATCH v4 0/2] Add thermal management support for STi platform
  2024-08-19 20:21 ` [PATCH v4 0/2] Add thermal management support for STi platform Raphaël Gallais-Pou
@ 2024-08-20  8:05   ` Daniel Lezcano
  0 siblings, 0 replies; 5+ messages in thread
From: Daniel Lezcano @ 2024-08-20  8:05 UTC (permalink / raw)
  To: Raphaël Gallais-Pou, Rafael J. Wysocki, Zhang Rui,
	Lukasz Luba, Maxime Coquelin, Alexandre Torgue, Patrice Chotard,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley
  Cc: linux-pm, linux-kernel, linux-stm32, linux-arm-kernel, devicetree

On 19/08/2024 22:21, Raphaël Gallais-Pou wrote:
> Hello,
> 
> Le 16/07/2024 à 19:34, Raphael Gallais-Pou a écrit :
>> This patch series enhances the st_thermal driver in order to enable
>> support for thermal zones. The changes include:
>>
>> 1. Replace deprecated PM runtime macros with their updated counterparts.
>> 2. Implementing devm_* based thermal of zone functions within the driver.
>> 3. Updating the stih418 device-tree.
>>
>> The device-tree patch depends on an earlier patch sent to the mailing
>> list [1].
>>
>> As it is currently implemented, an alert threshold of 85°C is set to
>> trigger the CPU throttling, and when the temperature exceeds the
>> critical threshold of 95°C, the system shuts down. There is for now no
>> active cooling device on the platform, which explains the use of the
>> cpufreq framework.
>>
>> [1] https://lore.kernel.org/lkml/20240320-thermal- 
>> v3-2-700296694c4a@gmail.com
>>
>> Signed-off-by: Raphael Gallais-Pou <rgallaispou@gmail.com>
>> ---
>> Changes in v4:
>> - [2/2] optimize dependencies
>> - [2/2] do not return devm_* exit code
>> - Link to v3: https://lore.kernel.org/r/20240714-thermal- 
>> v3-0-88f2489ef7d5@gmail.com
> 
> Gentle ping on this serie :)
> 
> Thanks for your time,

Applied, thanks

Thanks for the patch 2/2 ;)

-- 
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog


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

end of thread, other threads:[~2024-08-20  8:06 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-16 17:34 [PATCH v4 0/2] Add thermal management support for STi platform Raphael Gallais-Pou
2024-07-16 17:34 ` [PATCH v4 1/2] thermal: st: switch from CONFIG_PM_SLEEP guards to pm_sleep_ptr() Raphael Gallais-Pou
2024-07-16 17:34 ` [PATCH v4 2/2] thermal: sti: depend on THERMAL_OF subsystem Raphael Gallais-Pou
2024-08-19 20:21 ` [PATCH v4 0/2] Add thermal management support for STi platform Raphaël Gallais-Pou
2024-08-20  8:05   ` Daniel Lezcano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).