aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeng Fan <peng.fan@nxp.com>2020-05-03 22:19:50 +0800
committerStefano Babic <sbabic@denx.de>2020-05-10 20:55:20 +0200
commit951bf19dae2198c7684e4bb3f1eae10ba60d3677 (patch)
tree43b5ebce38795d6275b88c836f98127963776ab1
parentb5447b98f24784459225ea0cc2729b1cdb1e3136 (diff)
downloadu-boot-951bf19dae2198c7684e4bb3f1eae10ba60d3677.zip
u-boot-951bf19dae2198c7684e4bb3f1eae10ba60d3677.tar.gz
u-boot-951bf19dae2198c7684e4bb3f1eae10ba60d3677.tar.bz2
thermal: imx_tmu: Check the TEMP range for iMX8MM
On iMX8MM, the V flag in TRISTR register only reflect the state of SNSR value, not the calibrated TEMP value. So checking this flag is not reliable. Per IC suggestion, change to read the TEMP/AVG_TEMP directly and check whether it in valid range 10-125C. Signed-off-by: Ye Li <ye.li@nxp.com> Signed-off-by: Peng Fan <peng.fan@nxp.com>
-rw-r--r--drivers/thermal/imx_tmu.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/thermal/imx_tmu.c b/drivers/thermal/imx_tmu.c
index 2a08d50..c577b0b 100644
--- a/drivers/thermal/imx_tmu.c
+++ b/drivers/thermal/imx_tmu.c
@@ -106,16 +106,24 @@ static int read_temperature(struct udevice *dev, int *temp)
ulong drv_data = dev_get_driver_data(dev);
u32 val;
u32 retry = 10;
+ u32 valid = 0;
do {
mdelay(100);
retry--;
- if (drv_data & FLAGS_VER2)
+ if (drv_data & FLAGS_VER2) {
val = readl(&pdata->regs->regs_v2.tritsr);
- else
+ /*
+ * Check if TEMP is in valid range, the V bit in TRITSR
+ * only reflects the RAW uncalibrated data
+ */
+ valid = ((val & 0xff) < 10 || (val & 0xff) > 125) ? 0 : 1;
+ } else {
val = readl(&pdata->regs->regs_v1.site[pdata->id].tritsr);
- } while (!(val & 0x80000000) && retry > 0);
+ valid = val & 0x80000000;
+ }
+ } while (!valid && retry > 0);
if (retry > 0)
*temp = (val & 0xff) * 1000;