diff mbox series

thermal: imx_scu_thermal: prevent boot hang with zero pdata

Message ID 20200520082153.20765-1-agust@denx.de
State Accepted
Commit 4e7413a998ba5666aa4ee0b4f49789f52b1281b1
Delegated to: Stefano Babic
Headers show
Series thermal: imx_scu_thermal: prevent boot hang with zero pdata | expand

Commit Message

Anatolij Gustschin May 20, 2020, 8:21 a.m. UTC
Should initialization of pdata values have failed for some reason,
we end up in endless loop when getting the CPU temperature value
and can not boot. Check alert value in pdata and only retry reading
temperature if alert value is not zero. Also shorten the temperature
info string.

Signed-off-by: Anatolij Gustschin <agust@denx.de>
---
 drivers/thermal/imx_scu_thermal.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Anatolij Gustschin May 22, 2020, 9:15 p.m. UTC | #1
On Wed, 20 May 2020 10:21:53 +0200
Anatolij Gustschin agust@denx.de wrote:

> Should initialization of pdata values have failed for some reason,
> we end up in endless loop when getting the CPU temperature value
> and can not boot. Check alert value in pdata and only retry reading
> temperature if alert value is not zero. Also shorten the temperature
> info string.
> 
> Signed-off-by: Anatolij Gustschin <agust@denx.de>
> ---
>  drivers/thermal/imx_scu_thermal.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)

Applied.

--
Anatolij
diff mbox series

Patch

diff --git a/drivers/thermal/imx_scu_thermal.c b/drivers/thermal/imx_scu_thermal.c
index 321f905e3a..83ec753802 100644
--- a/drivers/thermal/imx_scu_thermal.c
+++ b/drivers/thermal/imx_scu_thermal.c
@@ -61,13 +61,15 @@  int imx_sc_thermal_get_temp(struct udevice *dev, int *temp)
 		return ret;
 
 	while (cpu_temp >= pdata->alert) {
-		printf("CPU Temperature (%dC) has beyond alert (%dC), close to critical (%dC)",
+		printf("CPU Temperature (%dC) beyond alert (%dC), close to critical (%dC)",
 		       cpu_temp, pdata->alert, pdata->critical);
 		puts(" waiting...\n");
 		mdelay(pdata->polling_delay);
 		ret = read_temperature(dev, &cpu_temp);
 		if (ret)
 			return ret;
+		if (cpu_temp >= pdata->alert && !pdata->alert)
+			break;
 	}
 
 	*temp = cpu_temp / 1000;