[v3] thermal: imx8mm_thermal: validate temperature range

Message ID 20221014073507.1594844-1-marcus.folkesson@gmail.com
State New
Headers
Series [v3] thermal: imx8mm_thermal: validate temperature range |

Commit Message

Marcus Folkesson Oct. 14, 2022, 7:35 a.m. UTC
  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>
---

Notes:
    v2: Also invalidate if temperature > max (125 degrees C)
    v3: Only check temperature range as the valid bit is invalid.

 drivers/thermal/imx8mm_thermal.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
  

Comments

Jacky Bai Oct. 14, 2022, 7:56 a.m. UTC | #1
> Subject: [PATCH v3] thermal: imx8mm_thermal: validate temperature range
> 
> 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>
> ---
> 
> Notes:
>     v2: Also invalidate if temperature > max (125 degrees C)
>     v3: Only check temperature range as the valid bit is invalid.
> 
>  drivers/thermal/imx8mm_thermal.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/thermal/imx8mm_thermal.c
> b/drivers/thermal/imx8mm_thermal.c
> index af666bd9e8d4..c5cd873c6e01 100644
> --- a/drivers/thermal/imx8mm_thermal.c
> +++ b/drivers/thermal/imx8mm_thermal.c
> @@ -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)

Don't remember the reason why I only add low limit check before. Should be
ok to check the high limit.

Reviewed-by: Jacky Bai <ping.bai@nxp.com>

BR
>  		return -EAGAIN;
> 
>  	return 0;
> --
> 2.37.1
  
Daniel Lezcano Oct. 17, 2022, 7:25 a.m. UTC | #2
On 14/10/2022 09:35, Marcus Folkesson wrote:
> 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>
> ---

Applied, thanks
  
Peng Fan (OSS) Oct. 17, 2022, 8:06 a.m. UTC | #3
On 10/14/2022 3:35 PM, Marcus Folkesson wrote:
> 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>
> ---
> 
> Notes:
>      v2: Also invalidate if temperature > max (125 degrees C)
>      v3: Only check temperature range as the valid bit is invalid.
> 
>   drivers/thermal/imx8mm_thermal.c | 8 +++++++-
>   1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/thermal/imx8mm_thermal.c b/drivers/thermal/imx8mm_thermal.c
> index af666bd9e8d4..c5cd873c6e01 100644
> --- a/drivers/thermal/imx8mm_thermal.c
> +++ b/drivers/thermal/imx8mm_thermal.c
> @@ -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;

Reviewed-by: Peng Fan <peng.fan@nxp.com>
  

Patch

diff --git a/drivers/thermal/imx8mm_thermal.c b/drivers/thermal/imx8mm_thermal.c
index af666bd9e8d4..c5cd873c6e01 100644
--- a/drivers/thermal/imx8mm_thermal.c
+++ b/drivers/thermal/imx8mm_thermal.c
@@ -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;