[PATCH v1] thermal: imx: Make trip point offset configurable

Marco Felsch m.felsch at pengutronix.de
Tue May 24 01:35:14 PDT 2022


Hi Francesco,

On 22-05-23, Francesco Dolcini wrote:
> On Wed, May 18, 2022 at 12:10:34PM +0200, Daniel Lezcano wrote:
> > On 18/05/2022 11:49, Francesco Dolcini wrote:
> > > On Wed, May 18, 2022 at 10:55:22AM +0200, Marco Felsch wrote:
> > > > On 22-05-16, Francesco Dolcini wrote:
> > > > > Currently the imx thermal driver has a hardcoded critical temperature
> > > > > value offset of 5 Celsius degrees from the actual SoC maximum
> > > > > temperature.
> > > > > 
> > > > > This affects applications and systems designed to be working on this close
> > > > > to the limit, but yet valid, temperature range.
> > > > > 
> > > > > Given that there is no single value that will fit all the use cases make
> > > > > the critical trip point offset from the max temperature configurable
> > > > > using a newly added trip_offset module parameter, passive trip point is
> > > > > set to 5 Celsius degrees less than the critical. By default the
> > > > > system behaves exactly as before.
> > > > 
> > > > I thought the conclusion of the discussion was to use a dt-property?
> > > > Since it is device and/or environment specific.
> > > 
> > > Daniel proposed to use a module parameter [0], but if you prefer a
> > > dt-property I can change this. I would keep the same semantic (offset
> > > from max temperature to compute the critical trip point).
> > > 
> > > [0] https://lore.kernel.org/all/7f5a919c-2fa1-a463-1f6b-6b531d5ee27d@linaro.org/
> > 
> > 
> > It would have been easier if the imx6/7 platforms were defining the thermal
> > zones in their DT ...

After checking the driver I completely agree with you... But this would
need much more rework.

> Marco, Lucas,
> What about a &tempon { fsl,tempmon-critical-offset=<0>; } dt property?

I would not introduce a special binding for it. Instead I would add the
support to parse the already exisiting bindings so the new-tempmon node
would look like:

tempmon: tempmon {
        compatible = "fsl,imx6q-tempmon";
        interrupt-parent = <&gpc>;
        interrupts = <0 49 IRQ_TYPE_LEVEL_HIGH>;
        fsl,tempmon = <&anatop>;
        nvmem-cells = <&tempmon_calib>, <&tempmon_temp_grade>;
        nvmem-cell-names = "calib", "temp_grade";
        clocks = <&clks IMX6QDL_CLK_PLL3_USB_OTG>;
        #thermal-sensor-cells = <0>;

	commercial-thermal {
		trips {
			commercial_trip_passive: trip-point0 {
				temperature = <85000>;
				type = "passive";
			};
			commercial_trip_crit: trip-point1 {
				temperature = <90000>;
				type = "critical";
			};
		};
	};

	extended-commercial-thermal {
		trips {
			ecommercial_trip_passive: trip-point0 {
				temperature = <95000>;
				type = "passive";
			};
			ecommercial_trip_crit: trip-point1 {
				temperature = <100000>;
				type = "critical";
			};
		};
	};

	industrial-thermal { };
	automotive-thermal { };
};

That way we can reuse the existing dt definitions and if no *-thermal
child device nodes exist we can keep the original logic.

You could than adapt the trip point in your device-tree by:

&ecommercial_trip_crit {
	temperature = <105000>;
};

Regards,
  Marco

> From my point of view this is even a better solution.
> 
> Daniel, would something like that also acceptable from your point of
> view?
> 
> Francesco
> 
> 



More information about the linux-arm-kernel mailing list