mirror of https://lore.kernel.org/linux-amlogic/
 help / color / mirror / Atom feed
From: Ronald Claveau <linux-kernel-dev@aliel.fr>
To: Daniel Lezcano <daniel.lezcano@oss.qualcomm.com>
Cc: linux-pm@vger.kernel.org, linux-amlogic@lists.infradead.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Guillaume La Roque <glaroque@baylibre.com>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Daniel Lezcano <daniel.lezcano@kernel.org>,
	Zhang Rui <rui.zhang@intel.com>,
	Lukasz Luba <lukasz.luba@arm.com>, Rob Herring <robh@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Neil Armstrong <neil.armstrong@linaro.org>,
	Kevin Hilman <khilman@baylibre.com>,
	Jerome Brunet <jbrunet@baylibre.com>,
	Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Subject: Re: [PATCH v3 4/8] thermal: amlogic: Add support for secure monitor calibration readout
Date: Thu, 23 Apr 2026 17:09:41 +0200	[thread overview]
Message-ID: <19d70883-21db-4963-841d-7c00505e0d9e@aliel.fr> (raw)
In-Reply-To: <7aaa7873-9274-48d8-a6fe-cff4239b03b4@oss.qualcomm.com>

Hi Daniel,

Thanks for your feedback.

On 4/23/26 12:25 PM, Daniel Lezcano wrote:
> 
> Hi Ronald,
> 
> On 4/21/26 09:19, Ronald Claveau wrote:
>> Some SoCs (e.g. T7) expose thermal calibration data through the secure
>> monitor rather than a directly accessible eFuse register. Add a use_sm
>> flag to amlogic_thermal_data to select this path, and retrieve the
>> firmware handle and tsensor_id from the "amlogic,secure-monitor" DT
>> phandle with one fixed argument.
>>
>> Also introduce the amlogic,t7-thermal compatible using this new path.
>>
>> Signed-off-by: Ronald Claveau <linux-kernel-dev@aliel.fr>
>> ---
>>   drivers/thermal/amlogic_thermal.c | 58 +++++++++++++++++++++++++++++
>> ++++++----
>>   1 file changed, 53 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/thermal/amlogic_thermal.c b/drivers/thermal/
>> amlogic_thermal.c
>> index 5448d772db12a..11e3948cc0669 100644
>> --- a/drivers/thermal/amlogic_thermal.c
>> +++ b/drivers/thermal/amlogic_thermal.c
>> @@ -25,6 +25,7 @@
>>   #include <linux/platform_device.h>
>>   #include <linux/regmap.h>
>>   #include <linux/thermal.h>
>> +#include <linux/firmware/meson/meson_sm.h>
>>     #include "thermal_hwmon.h"
>>   @@ -84,12 +85,14 @@ struct amlogic_thermal_soc_calib_data {
>>    * @u_efuse_off: register offset to read fused calibration value
>>    * @calibration_parameters: calibration parameters structure pointer
>>    * @regmap_config: regmap config for the device
>> + * @use_sm: read data from secure monitor instead of efuse
>>    * This structure is required for configuration of amlogic thermal
>> driver.
>>    */
>>   struct amlogic_thermal_data {
>>       int u_efuse_off;
>>       const struct amlogic_thermal_soc_calib_data
>> *calibration_parameters;
>>       const struct regmap_config *regmap_config;
>> +    bool use_sm;
>>   };
>>     struct amlogic_thermal {
>> @@ -100,6 +103,8 @@ struct amlogic_thermal {
>>       struct clk *clk;
>>       struct thermal_zone_device *tzd;
>>       u32 trim_info;
>> +    struct meson_sm_firmware *sm_fw;
>> +    u32 tsensor_id;
>>   };
>>     /*
>> @@ -138,6 +143,12 @@ static int amlogic_thermal_initialize(struct
>> amlogic_thermal *pdata)
>>       int ret = 0;
>>       int ver;
>>   +    if (pdata->data->use_sm) {
>> +        return meson_sm_get_thermal_calib(pdata->sm_fw,
>> +                          &pdata->trim_info,
>> +                          pdata->tsensor_id);
>> +    }
>> +
>>       regmap_read(pdata->sec_ao_map, pdata->data->u_efuse_off,
>>               &pdata->trim_info);
>>   @@ -226,6 +237,12 @@ static const struct amlogic_thermal_data
>> amlogic_thermal_a1_cpu_param = {
>>       .regmap_config = &amlogic_thermal_regmap_config_g12a,
>>   };
>>   +static const struct amlogic_thermal_data amlogic_thermal_t7_param = {
>> +    .use_sm            = true,
>> +    .calibration_parameters    = &amlogic_thermal_g12a,
>> +    .regmap_config        = &amlogic_thermal_regmap_config_g12a,
>> +};
>> +
>>   static const struct of_device_id of_amlogic_thermal_match[] = {
>>       {
>>           .compatible = "amlogic,g12a-ddr-thermal",
>> @@ -239,6 +256,10 @@ static const struct of_device_id
>> of_amlogic_thermal_match[] = {
>>           .compatible = "amlogic,a1-cpu-thermal",
>>           .data = &amlogic_thermal_a1_cpu_param,
>>       },
>> +    {
>> +        .compatible = "amlogic,t7-thermal",
>> +        .data = &amlogic_thermal_t7_param,
>> +    },
>>       { /* sentinel */ }
>>   };
>>   MODULE_DEVICE_TABLE(of, of_amlogic_thermal_match);
>> @@ -271,11 +292,38 @@ static int amlogic_thermal_probe(struct
>> platform_device *pdev)
>>       if (IS_ERR(pdata->clk))
>>           return dev_err_probe(dev, PTR_ERR(pdata->clk), "failed to
>> get clock\n");
>>   -    pdata->sec_ao_map = syscon_regmap_lookup_by_phandle
>> -        (pdev->dev.of_node, "amlogic,ao-secure");
>> -    if (IS_ERR(pdata->sec_ao_map)) {
>> -        dev_err(dev, "syscon regmap lookup failed.\n");
>> -        return PTR_ERR(pdata->sec_ao_map);
>> +    if (pdata->data->use_sm) {
>> +        struct device_node *sm_np;
>> +        struct of_phandle_args ph_args;
>> +
>> +        ret = of_parse_phandle_with_fixed_args(pdev->dev.of_node,
>> +                               "amlogic,secure-monitor",
>> +                               1, 0, &ph_args);
>> +        if (ret)
>> +            return ret;
>> +
>> +        sm_np = ph_args.np;
>> +        if (!sm_np) {
>> +            dev_err(dev,
>> +                "Failed to parse secure monitor phandle\n");
>> +            return -ENODEV;
>> +        }
>> +
>> +        pdata->sm_fw = meson_sm_get(sm_np);
>> +        of_node_put(sm_np);
>> +        if (!pdata->sm_fw) {
>> +            dev_err(dev, "Failed to get secure monitor firmware\n");
>> +            return -EPROBE_DEFER;
>> +        }
>> +
>> +        pdata->tsensor_id = ph_args.args[0];
>> +    } else {
>> +        pdata->sec_ao_map = syscon_regmap_lookup_by_phandle
>> +            (pdev->dev.of_node, "amlogic,ao-secure");
>> +        if (IS_ERR(pdata->sec_ao_map)) {
>> +            dev_err(dev, "syscon regmap lookup failed.\n");
>> +            return PTR_ERR(pdata->sec_ao_map);
>> +        }
>>       }
> 
> I suggest to separate these two routines into functions. That will help
> the readability.
> 

Sure, I will do that.

>>       pdata->tzd = devm_thermal_of_zone_register(&pdev->dev
> 
> The thermal zone is registered before calling
> amlogic_thermal_initialize(), thus pdata->trim_info is not initialized.
> When a thermal zone is registered the thermal framework reads the
> temperature, so it reads an invalid value because:
> 
> devm_thermal_of_zone_register()
>  -> thermal_of_zone_register()
>    -> thermal_zone_device_register_with_trips()
>    -> thermal_zone_device_enable()
>       -> __thermal_zone_device_update()
>         -> __thermal_zone_get_temp()
>           -> amlogic_thermal_get_temp()
>              -> amlogic_thermal_code_to_millicelsius()
>                  [ Use of uninitialized pdata->trim_info ]
> 
> Right ?
> 

Yes, I will move the initialize before the register.

> IIUC, amlogic_thermal_initialize() can be also split and moved the
> corresponding blocks to the functions to be created in the comment above.
> 

The SM and syscon setup will be extracted into two functions.
amlogic_thermal_initialize() itself is kept as-is but moved before
devm_thermal_of_zone_register().
Let me know if you'd prefer a different approach.

> 
>>
> 


-- 
Best regards,
Ronald

_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic

  reply	other threads:[~2026-04-23 15:10 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-21  7:19 [PATCH v3 0/8] arm64: amlogic: T7 thermal support Ronald Claveau
2026-04-21  7:19 ` [PATCH v3 1/8] dt-bindings: thermal: amlogic: Add support for T7 Ronald Claveau
2026-04-21 17:05   ` Conor Dooley
2026-04-21  7:19 ` [PATCH v3 2/8] firmware: meson: sm: Thermal calibration read via secure monitor Ronald Claveau
2026-04-21  7:19 ` [PATCH v3 3/8] firmware: meson: sm: Add thermal calibration SMC call Ronald Claveau
2026-04-21  7:19 ` [PATCH v3 4/8] thermal: amlogic: Add support for secure monitor calibration readout Ronald Claveau
2026-04-23 10:25   ` Daniel Lezcano
2026-04-23 15:09     ` Ronald Claveau [this message]
2026-04-23 15:17       ` Daniel Lezcano
2026-04-23 15:29         ` Ronald Claveau
2026-04-21  7:19 ` [PATCH v3 5/8] arm64: dts: amlogic: t7: Add cooling cells to all CPUs Ronald Claveau
2026-04-21  7:19 ` [PATCH v3 6/8] arm64: dts: amlogic: t7: Add thermal sensor nodes Ronald Claveau
2026-04-21  7:19 ` [PATCH v3 7/8] arm64: dts: amlogic: t7: Add thermal zones Ronald Claveau
2026-04-21  7:19 ` [PATCH v3 8/8] arm64: dts: amlogic: t7: khadas-vim4: Add fan cooling to " Ronald Claveau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=19d70883-21db-4963-841d-7c00505e0d9e@aliel.fr \
    --to=linux-kernel-dev@aliel.fr \
    --cc=conor+dt@kernel.org \
    --cc=daniel.lezcano@kernel.org \
    --cc=daniel.lezcano@oss.qualcomm.com \
    --cc=devicetree@vger.kernel.org \
    --cc=glaroque@baylibre.com \
    --cc=jbrunet@baylibre.com \
    --cc=khilman@baylibre.com \
    --cc=krzk+dt@kernel.org \
    --cc=linux-amlogic@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=lukasz.luba@arm.com \
    --cc=martin.blumenstingl@googlemail.com \
    --cc=neil.armstrong@linaro.org \
    --cc=rafael@kernel.org \
    --cc=robh@kernel.org \
    --cc=rui.zhang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®