* [PATCH v4 0/2] thermal: imx: Add calibration offset support
@ 2026-07-10 3:03 HaoNing Cheng via B4 Relay
2026-07-10 3:03 ` [PATCH v4 1/2] dt-bindings: thermal: imx: Document calibration offset property HaoNing Cheng via B4 Relay
2026-07-10 3:03 ` [PATCH v4 2/2] thermal/drivers/imx: Add calibration offset support HaoNing Cheng via B4 Relay
0 siblings, 2 replies; 6+ messages in thread
From: HaoNing Cheng via B4 Relay @ 2026-07-10 3:03 UTC (permalink / raw)
To: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: linux-pm, devicetree, imx, linux-arm-kernel, linux-kernel,
Haoning CHENG
Some i.MX boards need a small per-design correction to align the
reported CPU temperature with board-level measurements. This series
adds an optional DT property to specify such a calibration offset
and implements the corresponding support in the imx_thermal driver.
Patch 1 documents the new fsl,temp-calibration-offset-millicelsius
property in the i.MX thermal DT binding.
Patch 2 reads this property in the imx_thermal driver and applies
the offset to the i.MX6/6SX/7D calibration formulas. When the
property is absent, the default offset remains 0, preserving the
current behaviour.
Signed-off-by: Haoning CHENG <Haoning.CHENG@cn.bosch.com>
---
Changes in v4:
- dt-bindings: drop maxItems to allow minimum/maximum constraints for
temp-calibration-offset-millicelsius
- Link to v3: https://patch.msgid.link/20260710-b4-symana21-11221-imx-thermal-support-upstream-6-18-v3-0-db9fc2947c55@cn.bosch.com
Changes in v3:
- dt-bindings: add minimum/maximum (-28580/+28580) for
temp-calibration-offset-millicelsius, as suggested by Conor Dooley
- Link to v2: https://patch.msgid.link/20260709-b4-symana21-11221-imx-thermal-support-upstream-6-18-v2-0-00ff72495e24@cn.bosch.com
Changes in v2:
- dt-bindings: Removed explicit `$ref: /schemas/types.yaml#/definitions/int32`
for fsl,temp-calibration-offset-millicelsius; the `-millicelsius` suffix
already resolves to int32-array via property-units.yaml (Rob).
- dt-bindings: Fixed example indentation.
- driver: Replaced C integer division (/) with DIV_ROUND_CLOSEST() in
imx_set_alarm_temp() to prevent off-by-one alarm threshold mismatch that
could cause IRQ storms on i.MX7D.
- driver: Added clamp() bounds check for alarm_value [0, 0x1ff] to avoid
corrupting adjacent register fields (PANIC_ALARM).
- Link to v1: https://patch.msgid.link/20260709-b4-symana21-11221-imx-thermal-support-upstream-6-18-v1-0-00f88f42930b@cn.bosch.com
To: "Rafael J. Wysocki" <rafael@kernel.org>
To: Daniel Lezcano <daniel.lezcano@linaro.org>
To: Zhang Rui <rui.zhang@intel.com>
To: Lukasz Luba <lukasz.luba@arm.com>
To: Rob Herring <robh@kernel.org>
To: Krzysztof Kozlowski <krzk+dt@kernel.org>
To: Conor Dooley <conor+dt@kernel.org>
To: Shawn Guo <shawnguo@kernel.org>
To: Sascha Hauer <s.hauer@pengutronix.de>
To: Pengutronix Kernel Team <kernel@pengutronix.de>
To: Fabio Estevam <festevam@gmail.com>
Cc: linux-pm@vger.kernel.org
Cc: devicetree@vger.kernel.org
Cc: imx@lists.linux.dev
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
---
HaoNing Cheng (2):
dt-bindings: thermal: imx: Document calibration offset property
thermal/drivers/imx: Add calibration offset support
.../devicetree/bindings/thermal/imx-thermal.yaml | 9 +++++++++
drivers/thermal/imx_thermal.c | 18 +++++++++++++-----
2 files changed, 22 insertions(+), 5 deletions(-)
---
base-commit: c50a940dcde35c647e097e89a9150003abd48329
change-id: 20260709-b4-symana21-11221-imx-thermal-support-upstream-6-18-a084984deb76
Best regards,
--
Haoning CHENG <Haoning.CHENG@cn.bosch.com>
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH v4 1/2] dt-bindings: thermal: imx: Document calibration offset property 2026-07-10 3:03 [PATCH v4 0/2] thermal: imx: Add calibration offset support HaoNing Cheng via B4 Relay @ 2026-07-10 3:03 ` HaoNing Cheng via B4 Relay 2026-07-10 7:28 ` Krzysztof Kozlowski 2026-07-10 15:33 ` Frank Li 2026-07-10 3:03 ` [PATCH v4 2/2] thermal/drivers/imx: Add calibration offset support HaoNing Cheng via B4 Relay 1 sibling, 2 replies; 6+ messages in thread From: HaoNing Cheng via B4 Relay @ 2026-07-10 3:03 UTC (permalink / raw) To: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam Cc: linux-pm, devicetree, imx, linux-arm-kernel, linux-kernel, Haoning CHENG From: HaoNing Cheng <Haoning.CHENG@cn.bosch.com> Some boards need a small per-design correction to align the reported CPU temperature with board-level measurements. Document the optional fsl,temp-calibration-offset-millicelsius property, a signed offset in millicelsius that is added to the calculated sensor temperature. The property is optional and the existing behaviour is kept when it is omitted. Update the binding example to show its usage. Signed-off-by: HaoNing Cheng <Haoning.CHENG@cn.bosch.com> --- Documentation/devicetree/bindings/thermal/imx-thermal.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Documentation/devicetree/bindings/thermal/imx-thermal.yaml b/Documentation/devicetree/bindings/thermal/imx-thermal.yaml index 949b154856c5..b9afffd98f84 100644 --- a/Documentation/devicetree/bindings/thermal/imx-thermal.yaml +++ b/Documentation/devicetree/bindings/thermal/imx-thermal.yaml @@ -59,6 +59,14 @@ properties: clocks: maxItems: 1 + fsl,temp-calibration-offset-millicelsius: + minimum: -28580 + maximum: 28580 + description: + A signed calibration offset, in millicelsius, added to the calculated + sensor temperature to compensate for board-level measurement + differences. When absent, no offset is applied. + "#thermal-sensor-cells": const: 0 @@ -109,6 +117,7 @@ examples: nvmem-cells = <&tempmon_calib>, <&tempmon_temp_grade>; nvmem-cell-names = "calib", "temp_grade"; clocks = <&clks IMX6SX_CLK_PLL3_USB_OTG>; + fsl,temp-calibration-offset-millicelsius = <(-6400)>; #thermal-sensor-cells = <0>; }; }; -- 2.43.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v4 1/2] dt-bindings: thermal: imx: Document calibration offset property 2026-07-10 3:03 ` [PATCH v4 1/2] dt-bindings: thermal: imx: Document calibration offset property HaoNing Cheng via B4 Relay @ 2026-07-10 7:28 ` Krzysztof Kozlowski 2026-07-10 15:33 ` Frank Li 1 sibling, 0 replies; 6+ messages in thread From: Krzysztof Kozlowski @ 2026-07-10 7:28 UTC (permalink / raw) To: HaoNing Cheng Cc: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, linux-pm, devicetree, imx, linux-arm-kernel, linux-kernel On Fri, Jul 10, 2026 at 11:03:36AM +0800, HaoNing Cheng wrote: > Some boards need a small per-design correction to align the reported CPU > temperature with board-level measurements. > > Document the optional fsl,temp-calibration-offset-millicelsius property, > a signed offset in millicelsius that is added to the calculated sensor > temperature. The property is optional and the existing behaviour is kept > when it is omitted. Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v4 1/2] dt-bindings: thermal: imx: Document calibration offset property 2026-07-10 3:03 ` [PATCH v4 1/2] dt-bindings: thermal: imx: Document calibration offset property HaoNing Cheng via B4 Relay 2026-07-10 7:28 ` Krzysztof Kozlowski @ 2026-07-10 15:33 ` Frank Li 1 sibling, 0 replies; 6+ messages in thread From: Frank Li @ 2026-07-10 15:33 UTC (permalink / raw) To: Haoning.CHENG Cc: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, linux-pm, devicetree, imx, linux-arm-kernel, linux-kernel On Fri, Jul 10, 2026 at 11:03:36AM +0800, HaoNing Cheng via B4 Relay wrote: > [You don't often get email from devnull+haoning.cheng.cn.bosch.com@kernel.org. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ] > > From: HaoNing Cheng <Haoning.CHENG@cn.bosch.com> > > Some boards need a small per-design correction to align the reported CPU > temperature with board-level measurements. Thanks you for patch, but you have not answer my previous question yet. "why board difference cause such offset, I suppose it is cause by SoC variance. The offset may difference if you change to another chip. another words, if you have 1000 boards, Is this offset the same?" Or did you tune this value for each boards? Frank > > Document the optional fsl,temp-calibration-offset-millicelsius property, > a signed offset in millicelsius that is added to the calculated sensor > temperature. The property is optional and the existing behaviour is kept > when it is omitted. > > Update the binding example to show its usage. > > Signed-off-by: HaoNing Cheng <Haoning.CHENG@cn.bosch.com> > --- > Documentation/devicetree/bindings/thermal/imx-thermal.yaml | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/Documentation/devicetree/bindings/thermal/imx-thermal.yaml b/Documentation/devicetree/bindings/thermal/imx-thermal.yaml > index 949b154856c5..b9afffd98f84 100644 > --- a/Documentation/devicetree/bindings/thermal/imx-thermal.yaml > +++ b/Documentation/devicetree/bindings/thermal/imx-thermal.yaml > @@ -59,6 +59,14 @@ properties: > clocks: > maxItems: 1 > > + fsl,temp-calibration-offset-millicelsius: > + minimum: -28580 > + maximum: 28580 > + description: > + A signed calibration offset, in millicelsius, added to the calculated > + sensor temperature to compensate for board-level measurement > + differences. When absent, no offset is applied. > + > "#thermal-sensor-cells": > const: 0 > > @@ -109,6 +117,7 @@ examples: > nvmem-cells = <&tempmon_calib>, <&tempmon_temp_grade>; > nvmem-cell-names = "calib", "temp_grade"; > clocks = <&clks IMX6SX_CLK_PLL3_USB_OTG>; > + fsl,temp-calibration-offset-millicelsius = <(-6400)>; > #thermal-sensor-cells = <0>; > }; > }; > > -- > 2.43.0 > > > ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v4 2/2] thermal/drivers/imx: Add calibration offset support 2026-07-10 3:03 [PATCH v4 0/2] thermal: imx: Add calibration offset support HaoNing Cheng via B4 Relay 2026-07-10 3:03 ` [PATCH v4 1/2] dt-bindings: thermal: imx: Document calibration offset property HaoNing Cheng via B4 Relay @ 2026-07-10 3:03 ` HaoNing Cheng via B4 Relay 2026-07-10 15:35 ` Frank Li 1 sibling, 1 reply; 6+ messages in thread From: HaoNing Cheng via B4 Relay @ 2026-07-10 3:03 UTC (permalink / raw) To: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam Cc: linux-pm, devicetree, imx, linux-arm-kernel, linux-kernel, Haoning CHENG From: HaoNing Cheng <Haoning.CHENG@cn.bosch.com> Some boards need a small per-design correction to align the reported CPU temperature with board-level measurements. Read the optional fsl,temp-calibration-offset-millicelsius property from DT and apply it to the i.MX6/6SX/7D calibration formulas. When the property is not present, the default offset remains 0, preserving the current behaviour. Signed-off-by: HaoNing Cheng <Haoning.CHENG@cn.bosch.com> --- drivers/thermal/imx_thermal.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/thermal/imx_thermal.c b/drivers/thermal/imx_thermal.c index 38c993d1bcb3..8062d34ffed8 100644 --- a/drivers/thermal/imx_thermal.c +++ b/drivers/thermal/imx_thermal.c @@ -207,6 +207,7 @@ struct imx_thermal_data { struct regmap *tempmon; u32 c1, c2; /* See formula in imx_init_calib() */ int temp_max; + s32 calibration_offset; int alarm_temp; int last_temp; bool irq_enabled; @@ -240,10 +241,13 @@ static void imx_set_alarm_temp(struct imx_thermal_data *data, data->alarm_temp = alarm_temp; - if (data->socdata->version == TEMPMON_IMX7D) - alarm_value = alarm_temp / 1000 + data->c1 - 25; - else + if (data->socdata->version == TEMPMON_IMX7D) { + alarm_value = DIV_ROUND_UP(alarm_temp - data->calibration_offset, + 1000) + data->c1 - 25; + alarm_value = clamp(alarm_value, 0, 0x1ff); + } else { alarm_value = (data->c2 - alarm_temp) / data->c1; + } regmap_write(map, soc_data->high_alarm_ctrl + REG_CLR, soc_data->high_alarm_mask); @@ -274,7 +278,7 @@ static int imx_get_temp(struct thermal_zone_device *tz, int *temp) /* See imx_init_calib() for formula derivation */ if (data->socdata->version == TEMPMON_IMX7D) - *temp = (n_meas - data->c1 + 25) * 1000; + *temp = (n_meas - data->c1 + 25) * 1000 + data->calibration_offset; else *temp = data->c2 - n_meas * data->c1; @@ -413,7 +417,7 @@ static int imx_init_calib(struct platform_device *pdev, u32 ocotp_ana1) temp64 *= 1000; /* to get result in °mC */ do_div(temp64, 15423 * n1 - 4148468); data->c1 = temp64; - data->c2 = n1 * data->c1 + 28581; + data->c2 = n1 * data->c1 + 28581 + data->calibration_offset; return 0; } @@ -629,6 +633,10 @@ static int imx_thermal_probe(struct platform_device *pdev) platform_set_drvdata(pdev, data); + of_property_read_s32(dev->of_node, + "fsl,temp-calibration-offset-millicelsius", + &data->calibration_offset); + if (of_property_present(dev->of_node, "nvmem-cells")) { ret = imx_init_from_nvmem_cells(pdev); if (ret) -- 2.43.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v4 2/2] thermal/drivers/imx: Add calibration offset support 2026-07-10 3:03 ` [PATCH v4 2/2] thermal/drivers/imx: Add calibration offset support HaoNing Cheng via B4 Relay @ 2026-07-10 15:35 ` Frank Li 0 siblings, 0 replies; 6+ messages in thread From: Frank Li @ 2026-07-10 15:35 UTC (permalink / raw) To: Haoning.CHENG Cc: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, linux-pm, devicetree, imx, linux-arm-kernel, linux-kernel On Fri, Jul 10, 2026 at 11:03:37AM +0800, HaoNing Cheng via B4 Relay wrote: > [You don't often get email from devnull+haoning.cheng.cn.bosch.com@kernel.org. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ] > > From: HaoNing Cheng <Haoning.CHENG@cn.bosch.com> > > Some boards need a small per-design correction to align the reported CPU > temperature with board-level measurements. > > Read the optional fsl,temp-calibration-offset-millicelsius property from > DT and apply it to the i.MX6/6SX/7D calibration formulas. When the > property is not present, the default offset remains 0, preserving the > current behaviour. > > Signed-off-by: HaoNing Cheng <Haoning.CHENG@cn.bosch.com> > --- > drivers/thermal/imx_thermal.c | 18 +++++++++++++----- > 1 file changed, 13 insertions(+), 5 deletions(-) > > diff --git a/drivers/thermal/imx_thermal.c b/drivers/thermal/imx_thermal.c > index 38c993d1bcb3..8062d34ffed8 100644 > --- a/drivers/thermal/imx_thermal.c > +++ b/drivers/thermal/imx_thermal.c > @@ -207,6 +207,7 @@ struct imx_thermal_data { > struct regmap *tempmon; > u32 c1, c2; /* See formula in imx_init_calib() */ > int temp_max; > + s32 calibration_offset; > int alarm_temp; > int last_temp; > bool irq_enabled; > @@ -240,10 +241,13 @@ static void imx_set_alarm_temp(struct imx_thermal_data *data, > > data->alarm_temp = alarm_temp; > > - if (data->socdata->version == TEMPMON_IMX7D) > - alarm_value = alarm_temp / 1000 + data->c1 - 25; > - else > + if (data->socdata->version == TEMPMON_IMX7D) { > + alarm_value = DIV_ROUND_UP(alarm_temp - data->calibration_offset, > + 1000) + data->c1 - 25; > + alarm_value = clamp(alarm_value, 0, 0x1ff); > + } else { > alarm_value = (data->c2 - alarm_temp) / data->c1; > + } you can direct change alarm_temp before if block alarm_temp -= data->calibration_offset; which fix for all SoC, not only IMX7D Frank > > regmap_write(map, soc_data->high_alarm_ctrl + REG_CLR, > soc_data->high_alarm_mask); > @@ -274,7 +278,7 @@ static int imx_get_temp(struct thermal_zone_device *tz, int *temp) > > /* See imx_init_calib() for formula derivation */ > if (data->socdata->version == TEMPMON_IMX7D) > - *temp = (n_meas - data->c1 + 25) * 1000; > + *temp = (n_meas - data->c1 + 25) * 1000 + data->calibration_offset; > else > *temp = data->c2 - n_meas * data->c1; > > @@ -413,7 +417,7 @@ static int imx_init_calib(struct platform_device *pdev, u32 ocotp_ana1) > temp64 *= 1000; /* to get result in °mC */ > do_div(temp64, 15423 * n1 - 4148468); > data->c1 = temp64; > - data->c2 = n1 * data->c1 + 28581; > + data->c2 = n1 * data->c1 + 28581 + data->calibration_offset; > > return 0; > } > @@ -629,6 +633,10 @@ static int imx_thermal_probe(struct platform_device *pdev) > > platform_set_drvdata(pdev, data); > > + of_property_read_s32(dev->of_node, > + "fsl,temp-calibration-offset-millicelsius", > + &data->calibration_offset); > + > if (of_property_present(dev->of_node, "nvmem-cells")) { > ret = imx_init_from_nvmem_cells(pdev); > if (ret) > > -- > 2.43.0 > > > ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-07-10 15:35 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-07-10 3:03 [PATCH v4 0/2] thermal: imx: Add calibration offset support HaoNing Cheng via B4 Relay 2026-07-10 3:03 ` [PATCH v4 1/2] dt-bindings: thermal: imx: Document calibration offset property HaoNing Cheng via B4 Relay 2026-07-10 7:28 ` Krzysztof Kozlowski 2026-07-10 15:33 ` Frank Li 2026-07-10 3:03 ` [PATCH v4 2/2] thermal/drivers/imx: Add calibration offset support HaoNing Cheng via B4 Relay 2026-07-10 15:35 ` Frank Li
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox