Hi Niklas, On Thu, Mar 7, 2024 at 12:03 PM Niklas Söderlund <niklas.soderlund+renesas@xxxxxxxxxxxx> wrote: > The calculated Tj_T constant is calculated from the PTAT data either > read from the first TSC zone on the device if calibration data is fused, > or from fallback values in the driver itself. The value calculated is > shared among all TSC zones. > > Move the Tj_T constant to the shared private data structure instead of > duplicating it in each TSC private data. This requires adding a pointer > to the shared data to the TSC private data structure. This back pointer > make it easier to curter rework the temperature conversion logic. > > Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@xxxxxxxxxxxx> Thanks for your patch! > --- a/drivers/thermal/rcar_gen3_thermal.c > +++ b/drivers/thermal/rcar_gen3_thermal.c > @@ -81,10 +81,10 @@ struct rcar_thermal_info { > }; > > struct rcar_gen3_thermal_tsc { > + struct rcar_gen3_thermal_priv *priv; I had hoped you could do without this, but I couldn't find a better way. Even the contents of &priv->ops are copied (twice!) inside the thermal core, so you can't go through that... > void __iomem *base; > struct thermal_zone_device *zone; > struct equation_coefs coef; > - int tj_t; > int thcode[3]; > }; > > @@ -92,6 +92,7 @@ struct rcar_gen3_thermal_priv { > struct rcar_gen3_thermal_tsc *tscs[TSC_MAX_NUM]; > struct thermal_zone_device_ops ops; > unsigned int num_tscs; > + int tj_t; Insert below ptat[3], as tj_t is calculated from ptat[3], and to better approach reverse Christmas-tree ordering? > int ptat[3]; > const struct rcar_thermal_info *info; > }; > @@ -146,15 +147,15 @@ static void rcar_gen3_thermal_calc_coefs(struct rcar_gen3_thermal_priv *priv, > * Division is not scaled in BSP and if scaled it might overflow > * the dividend (4095 * 4095 << 14 > INT_MAX) so keep it unscaled > */ > - tsc->tj_t = (FIXPT_INT((priv->ptat[1] - priv->ptat[2]) * (ths_tj_1 - TJ_3)) > - / (priv->ptat[0] - priv->ptat[2])) + FIXPT_INT(TJ_3); > + priv->tj_t = (FIXPT_INT((priv->ptat[1] - priv->ptat[2]) * (ths_tj_1 - TJ_3)) > + / (priv->ptat[0] - priv->ptat[2])) + FIXPT_INT(TJ_3); Please move the calculation of priv->tj_t to rcar_gen3_thermal_probe() or rcar_gen3_thermal_read_fuses(), so it is no longer done multiple times. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds