On 01/10/2023 05:00, Fabio Estevam wrote:
From: Fabio Estevam <festevam@xxxxxxx>
Currently, the default mechanism is to trigger a shutdown after the
critical temperature is reached.
In some embedded cases, such behavior does not suit well, as the board may
be unattended in the field and rebooting may be a better approach.
The bootloader may also check the temperature and only allow the boot to
proceed when the temperature is below a certain threshold.
Introduce support for allowing a reboot to be triggered after the
critical temperature is reached.
If the "critical-action" devicetree property is not found, fall back to
the shutdown action to preserve the existing default behavior.
If a custom ops->critical exists, then it takes preference over
critical-actions.
Tested on a i.MX8MM board with the following devicetree changes:
thermal-zones {
cpu-thermal {
critical-action = "reboot";
};
};
Signed-off-by: Fabio Estevam <festevam@xxxxxxx>
---
Sounds good to me
Changes since v8:
- Simplify the logic for calling thermal_zone_device_critical_reboot(). (Daniel).
drivers/thermal/thermal_of.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/thermal/thermal_of.c b/drivers/thermal/thermal_of.c
index 1e0655b63259..4d6c22e0ed85 100644
--- a/drivers/thermal/thermal_of.c
+++ b/drivers/thermal/thermal_of.c
@@ -475,6 +475,7 @@ static struct thermal_zone_device *thermal_of_zone_register(struct device_node *
struct thermal_zone_params tzp = {};
struct thermal_zone_device_ops *of_ops;
struct device_node *np;
+ const char *action;
int delay, pdelay;
int ntrips, mask;
int ret;
@@ -511,6 +512,11 @@ static struct thermal_zone_device *thermal_of_zone_register(struct device_node *
mask = GENMASK_ULL((ntrips) - 1, 0);
+ ret = of_property_read_string(np, "critical-action", &action);
+ if (!ret)
+ if (!of_ops->critical && !strcasecmp(action, "reboot"))
+ of_ops->critical = thermal_zone_device_critical_reboot;
+
tz = thermal_zone_device_register_with_trips(np->name, trips, ntrips,
mask, data, of_ops, &tzp,
pdelay, delay);
--
<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