[U-Boot] [PATCH] thermal: imx_thermal: increase critical temperature threshold

Tim Harvey tharvey at gateworks.com
Thu May 21 17:40:06 CEST 2015


The CPU temperature grade from OTP is now used to define the critical
threshold at which point we busyloop until we are below, however this
threshold is still too low.

Instead of 20C below the max CPU temperature, change it to 5C defined now
by TEMPERATURE_HOT_DETLA for clarity. Rename 'passive' to 'critical'
as that better defines our use case here. Additionally change the output
of the busyloop message to show the max CPU temperature as well as current.

Before:
CPU Temperature is 101 C, too hot to boot, waiting...
CPU Temperature is 101 C, too hot to boot, waiting...

After:
CPU Temperature (101C) too close to max (105C) waiting...
CPU Temperature (101C) too close to max (105C) waiting...

Cc: Stefan Roese <sr at denx.de>
Cc: Eric Nelson <eric.nelson at boundarydevices.com>
Cc: Heiko Schocher <hs at denx.de>
Cc: Nikita Kiryanov <nikita at compulab.co.il>
Cc: Jon Nettleton <jon.nettleton at gmail.com>
Cc: Jason Liu <r64343 at freescale.com>
Cc: Ye Li <b37916 at freescale.com>
Cc: Fabio Estevam <fabio.estevam at freescale.com>
Cc: Christian Gmeiner <christian.gmeiner at gmail.com>
Cc: Markus Niebel <Markus.Niebel at tq-group.com>
Cc: Peng Fan <b51431 at freescale.com>
Signed-off-by: Tim Harvey <tharvey at gateworks.com>
---
 drivers/thermal/imx_thermal.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/thermal/imx_thermal.c b/drivers/thermal/imx_thermal.c
index b5dab63..0d893c9 100644
--- a/drivers/thermal/imx_thermal.c
+++ b/drivers/thermal/imx_thermal.c
@@ -19,6 +19,8 @@
 #include <thermal.h>
 #include <imx_thermal.h>
 
+/* board will busyloop until this many degrees C below CPU max temperature */
+#define TEMPERATURE_HOT_DELTA   5 /* CPU maxT - 5C */
 #define FACTOR0			10000000
 #define FACTOR1			15976
 #define FACTOR2			4297157
@@ -34,7 +36,7 @@
 
 struct thermal_data {
 	unsigned int fuse;
-	int passive;
+	int critical;
 	int minc;
 	int maxc;
 };
@@ -129,9 +131,10 @@ int imx_thermal_get_temp(struct udevice *dev, int *temp)
 
 	cpu_tmp = read_cpu_temperature(dev);
 	while (cpu_tmp > priv->minc && cpu_tmp < priv->maxc) {
-		if (cpu_tmp >= priv->passive) {
-			printf("CPU Temperature is %d C, too hot to boot, waiting...\n",
-			       cpu_tmp);
+		if (cpu_tmp >= priv->critical) {
+			printf("CPU Temperature (%dC) too close to max (%dC)",
+			       cpu_tmp, priv->maxc);
+			puts(" waiting...\n");
 			udelay(5000000);
 			cpu_tmp = read_cpu_temperature(dev);
 		} else {
@@ -164,9 +167,9 @@ static int imx_thermal_probe(struct udevice *dev)
 		return -EPERM;
 	}
 
-	/* set passive cooling temp to max - 20C */
+	/* set critical cooling temp */
 	get_cpu_temp_grade(&priv->minc, &priv->maxc);
-	priv->passive = priv->maxc - 20;
+	priv->critical = priv->maxc - TEMPERATURE_HOT_DELTA;
 	priv->fuse = fuse;
 
 	enable_thermal_clk();
-- 
1.9.1



More information about the U-Boot mailing list