Add thermal-sensor and thermal-zone support.
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
changes in v7
- new patch
---
arch/arm64/boot/dts/freescale/imx91.dtsi | 58 ++++++++++++++++++++++++++++++++
1 file changed, 58 insertions(+)
diff --git a/arch/arm64/boot/dts/freescale/imx91.dtsi b/arch/arm64/boot/dts/freescale/imx91.dtsi
index 4d8300b2a7bca33bd0613db9e79d2fba6b40c052..f075592bfc01f1eb94d2a2bd8eea907cc2aed090 100644
--- a/arch/arm64/boot/dts/freescale/imx91.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx91.dtsi
@@ -6,6 +6,54 @@
#include "imx91-pinfunc.h"
#include "imx91_93_common.dtsi"
+/{
+ thermal-zones {
+ cpu-thermal {
+ polling-delay-passive = <250>;
+ polling-delay = <2000>;
+ thermal-sensors = <&tmu 0>;
+
+ trips {
+ cpu_alert: cpu-alert {
+ temperature = <80000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ cpu_crit: cpu-crit {
+ temperature = <90000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+
+ cooling-maps {
+ map0 {
+ trip = <&cpu_alert>;
+ cooling-device =
+ <&A55_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+ };
+ };
+};
+
+&aips1 {
+ tmu: thermal-sensor@44482000 {
+ compatible = "fsl,imx91-tmu";
+ reg = <0x44482000 0x1000>;
+ #thermal-sensor-cells = <0>;
+ clocks = <&clk IMX93_CLK_TMC_GATE>;
+ interrupt-parent = <&gic>;
+ interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "thr1", "thr2", "ready";
+ nvmem-cells = <&tmu_trim1>, <&tmu_trim2>;
+ nvmem-cell-names = "trim1", "trim2";
+ };
+};
+
&clk {
compatible = "fsl,imx91-ccm";
};
@@ -69,3 +117,13 @@ &media_blk_ctrl {
clock-names = "apb", "axi", "nic", "disp", "cam",
"lcdif", "isi", "csi";
};
+
+&ocotp {
+ tmu_trim1: tmu-trim@a0 {
+ reg = <0xa0 0x4>;
+ };
+
+ tmu_trim2: tmu-trim@a4 {
+ reg = <0xa4 0x4>;
+ };
+};
--
2.34.1
On Mon, Oct 20, 2025 at 03:00:42PM -0400, Frank Li wrote:
> Add thermal-sensor and thermal-zone support.
>
> Signed-off-by: Frank Li <Frank.Li@nxp.com>
> ---
> changes in v7
> - new patch
> ---
> arch/arm64/boot/dts/freescale/imx91.dtsi | 58 ++++++++++++++++++++++++++++++++
> 1 file changed, 58 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/freescale/imx91.dtsi b/arch/arm64/boot/dts/freescale/imx91.dtsi
> index 4d8300b2a7bca33bd0613db9e79d2fba6b40c052..f075592bfc01f1eb94d2a2bd8eea907cc2aed090 100644
> --- a/arch/arm64/boot/dts/freescale/imx91.dtsi
> +++ b/arch/arm64/boot/dts/freescale/imx91.dtsi
> @@ -6,6 +6,54 @@
> #include "imx91-pinfunc.h"
> #include "imx91_93_common.dtsi"
>
> +/{
> + thermal-zones {
> + cpu-thermal {
> + polling-delay-passive = <250>;
> + polling-delay = <2000>;
> + thermal-sensors = <&tmu 0>;
> +
> + trips {
> + cpu_alert: cpu-alert {
> + temperature = <80000>;
> + hysteresis = <2000>;
> + type = "passive";
> + };
> +
> + cpu_crit: cpu-crit {
> + temperature = <90000>;
> + hysteresis = <2000>;
> + type = "critical";
> + };
> + };
> +
> + cooling-maps {
> + map0 {
> + trip = <&cpu_alert>;
> + cooling-device =
> + <&A55_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
> + };
> + };
> + };
> + };
> +};
Here you define cooling-maps with passive and critical trip points.
I was trying test that by enabling CONFIG_THERMAL_EMULATION and setting
the emulated temp via
echo 85000 > /sys/class/thermal/thermal_zone0/emul_temp
By checking with mhz (from lmbench Yocto recipe) command I was expecting that the 91 start
throttling but is not the case, Am I missing something?
Thanks,
Alberto
On Wed, Oct 22, 2025 at 12:56:22PM +0200, Alberto Merciai wrote:
> On Mon, Oct 20, 2025 at 03:00:42PM -0400, Frank Li wrote:
> > Add thermal-sensor and thermal-zone support.
> >
> > Signed-off-by: Frank Li <Frank.Li@nxp.com>
> > ---
> > changes in v7
> > - new patch
> > ---
> > arch/arm64/boot/dts/freescale/imx91.dtsi | 58 ++++++++++++++++++++++++++++++++
> > 1 file changed, 58 insertions(+)
> >
> > diff --git a/arch/arm64/boot/dts/freescale/imx91.dtsi b/arch/arm64/boot/dts/freescale/imx91.dtsi
> > index 4d8300b2a7bca33bd0613db9e79d2fba6b40c052..f075592bfc01f1eb94d2a2bd8eea907cc2aed090 100644
> > --- a/arch/arm64/boot/dts/freescale/imx91.dtsi
> > +++ b/arch/arm64/boot/dts/freescale/imx91.dtsi
> > @@ -6,6 +6,54 @@
> > #include "imx91-pinfunc.h"
> > #include "imx91_93_common.dtsi"
> >
> > +/{
> > + thermal-zones {
> > + cpu-thermal {
> > + polling-delay-passive = <250>;
> > + polling-delay = <2000>;
> > + thermal-sensors = <&tmu 0>;
> > +
> > + trips {
> > + cpu_alert: cpu-alert {
> > + temperature = <80000>;
> > + hysteresis = <2000>;
> > + type = "passive";
> > + };
> > +
> > + cpu_crit: cpu-crit {
> > + temperature = <90000>;
> > + hysteresis = <2000>;
> > + type = "critical";
> > + };
> > + };
> > +
> > + cooling-maps {
> > + map0 {
> > + trip = <&cpu_alert>;
> > + cooling-device =
> > + <&A55_0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
> > + };
> > + };
> > + };
> > + };
> > +};
>
> Here you define cooling-maps with passive and critical trip points.
>
> I was trying test that by enabling CONFIG_THERMAL_EMULATION and setting
> the emulated temp via
>
> echo 85000 > /sys/class/thermal/thermal_zone0/emul_temp
>
> By checking with mhz (from lmbench Yocto recipe) command I was expecting that the 91 start
> throttling but is not the case, Am I missing something?
CPUfreq driver have not been implemented in upstream kernel. This don't
affect tmu driver, tmu driver focus on read CPU tempature.
Frank
>
> Thanks,
> Alberto
© 2016 - 2025 Red Hat, Inc.