[PATCH v10 0/3] thermal: imx: Add calibration offset support
From: Haoning CHENG via B4 Relay
Date: Sun Jul 19 2026 - 22:24:41 EST
The TEMPMON sensor reading may deviate from the theoretical SoC
junction temperature even at the die level, before any board
influence. This series adds an optional DT property to specify 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. The offset is determined
through thermal characterization by comparing the sensor output
against the calculated junction temperature, and is limited to
±20 °C.
Patch 2 fixes the i.MX7D alarm temperature conversion to use
ceiling division (DIV_ROUND_UP() for non-negative, plain /
for negative) and clamp() to stay within the 9-bit register range.
Patch 3 reads this property in the imx_thermal driver and applies
the offset symmetrically: it is added when reporting temperature to
the thermal framework and subtracted when programming hardware alarm
thresholds (to keep trip point semantics consistent). Out-of-range
values are rejected with -EINVAL at probe time. When the property
is absent, the default offset is 0.
Signed-off-by: Haoning CHENG <Haoning.CHENG@xxxxxxxxxxxx>
---
Changes in v10:
- Rephrase the series to describe the offset as sensor calibration
toward the theoretical junction temperature, reverting the v9
terminology that characterized it as a board-specific die-to-package-
surface conversion. Hardware characterization confirmed the deviation
exists at the die level, independent of board influence.
- dt-bindings: update the property description to state the offset
corrects the TEMPMON sensor reading toward the theoretical junction
temperature
- driver commit message: replace package-surface estimate wording with
calibrated correction toward junction temperature
- Link to v9: https://patch.msgid.link/20260717-b4-symana21-11221-imx-thermal-support-upstream-6-18-v9-0-75f4af8974f4@xxxxxxxxxxxx
Changes in v9:
- Rephrase the series to clarify that the offset converts the internal
TEMPMON reading to a package-surface temperature estimate, rather than
calibrating the sensor for better die temperature accuracy (Frieder)
- dt-bindings: update the property description to explicitly state it is
a board-specific conversion offset, not a sensor calibration
- driver commit message: distinguish die temperature from package-surface
temperature in the symmetric offset mechanism explanation
- Pick up Reviewed-by tags from Frank Li (patches 2,3) and Lukasz Luba
(patches 1,2,3)
- Link to v8: https://patch.msgid.link/20260714-b4-symana21-11221-imx-thermal-support-upstream-6-18-v8-0-d54d8690e16e@xxxxxxxxxxxx
Changes in v8:
- binding: s/behaviour/behavior/ (Lukasz)
- New prep patch: use ceiling division (DIV_ROUND_UP() for non-negative, plain /
for negative) and clamp() for i.MX7D, extracted into a separate patch (Frank)
- driver commit message: add offset mechanism explanation with a +3000 m°C calculation example (Lukasz)
- probe: reject out-of-range offset with -EINVAL instead of silently clamping (Lukasz)
- prep patch: handle negative alarm_temp with plain division (C rounds toward zero)
- Link to v7: https://patch.msgid.link/20260713-b4-symana21-11221-imx-thermal-support-upstream-6-18-v7-0-09b6b7669be1@xxxxxxxxxxxx
Changes in v7:
- Align the author name with the Signed-off-by trailer.
- Link to v6: https://patch.msgid.link/20260713-b4-symana21-11221-imx-thermal-support-upstream-6-18-v6-0-88a378faeca5@xxxxxxxxxxxx
Changes in v6:
- Align the author name with the Signed-off-by trailer.
- Link to v5: https://patch.msgid.link/20260713-b4-symana21-11221-imx-thermal-support-upstream-6-18-v5-0-69405c306c6b@xxxxxxxxxxxx
Changes in v5:
- Move calibration offset application out of c2 initialization, instead
apply it in imx_get_temp(), imx_set_alarm_temp() and imx_set_panic_temp()
for consistent style across i.MX6 and i.MX7D
- Subtract calibration offset from alarm_temp before the if-else block in
imx_set_alarm_temp(), simplifying both SoC branches (Frank's suggestion)
- Link to v4: https://patch.msgid.link/20260710-b4-symana21-11221-imx-thermal-support-upstream-6-18-v4-0-1fef97d1c750@xxxxxxxxxxxx
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@xxxxxxxxxxxx
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@xxxxxxxxxxxx
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@xxxxxxxxxxxx
To: "Rafael J. Wysocki" <rafael@xxxxxxxxxx>
To: Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>
To: Zhang Rui <rui.zhang@xxxxxxxxx>
To: Lukasz Luba <lukasz.luba@xxxxxxx>
To: Rob Herring <robh@xxxxxxxxxx>
To: Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>
To: Conor Dooley <conor+dt@xxxxxxxxxx>
To: Shawn Guo <shawnguo@xxxxxxxxxx>
To: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>
To: Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>
To: Fabio Estevam <festevam@xxxxxxxxx>
Cc: linux-pm@xxxxxxxxxxxxxxx
Cc: devicetree@xxxxxxxxxxxxxxx
Cc: imx@xxxxxxxxxxxxxxx
Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx
---
Haoning CHENG (3):
dt-bindings: thermal: imx: Document calibration offset property
thermal/drivers/imx: Fix rounding and clamp for i.MX7D alarm
thermal/drivers/imx: Add calibration offset support
.../devicetree/bindings/thermal/imx-thermal.yaml | 12 +++++++
drivers/thermal/imx_thermal.c | 39 ++++++++++++++++++++--
2 files changed, 48 insertions(+), 3 deletions(-)
---
base-commit: c50a940dcde35c647e097e89a9150003abd48329
change-id: 20260709-b4-symana21-11221-imx-thermal-support-upstream-6-18-a084984deb76
Best regards,
--
Haoning Cheng <Haoning.CHENG@xxxxxxxxxxxx>