thermal/drivers/imx8mm_thermal: Validate temperature range
authorMarcus Folkesson <marcus.folkesson@gmail.com>
Fri, 14 Oct 2022 07:35:07 +0000 (09:35 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 31 Dec 2022 12:14:31 +0000 (13:14 +0100)
[ Upstream commit d37edc7370273306d8747097fafa62436c1cfe16 ]

Check against the upper temperature limit (125 degrees C) before
consider the temperature valid.

Fixes: 5eed800a6811 ("thermal: imx8mm: Add support for i.MX8MM thermal monitoring unit")
Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com>
Reviewed-by: Jacky Bai <ping.bai@nxp.com>
Link: https://lore.kernel.org/r/20221014073507.1594844-1-marcus.folkesson@gmail.com
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/thermal/imx8mm_thermal.c

index af666bd..c5cd873 100644 (file)
@@ -65,8 +65,14 @@ static int imx8mm_tmu_get_temp(void *data, int *temp)
        u32 val;
 
        val = readl_relaxed(tmu->base + TRITSR) & TRITSR_TEMP0_VAL_MASK;
+
+       /*
+        * Do not validate against the V bit (bit 31) due to errata
+        * ERR051272: TMU: Bit 31 of registers TMU_TSCR/TMU_TRITSR/TMU_TRATSR invalid
+        */
+
        *temp = val * 1000;
-       if (*temp < VER1_TEMP_LOW_LIMIT)
+       if (*temp < VER1_TEMP_LOW_LIMIT || *temp > VER2_TEMP_HIGH_LIMIT)
                return -EAGAIN;
 
        return 0;