[PATCH v3 4/8] thermal: amlogic: Add support for secure monitor calibration readout

Ronald Claveau linux-kernel-dev at aliel.fr
Thu Apr 23 08:29:43 PDT 2026


On 4/23/26 5:17 PM, Daniel Lezcano wrote:
> On 4/23/26 17:09, Ronald Claveau wrote:
>> Hi Daniel,
>>
>> Thanks for your feedback.
>>
>> On 4/23/26 12:25 PM, Daniel Lezcano wrote:
>>>
>>> Hi Ronald,
>>>
> 
> function1() {
> 
> 
>>>> +    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];
>>>> +    } 
> 
> }
> 
> function2() {
> 
> 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);
>>>> +        }
>>>>        }
> 
> }
> 
>> 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.
> 
> In the initialize function the following chunk is added:
> 
> +    if (pdata->data->use_sm) {
> +        return meson_sm_get_thermal_calib(pdata->sm_fw,
> +                          &pdata->trim_info,
> +                          pdata->tsensor_id);
> +    }
> 
> I was suggesting to move it to function1() and the rest of code from
> initialize in function2()
> 
> That results in amlogic_thermal_initialize() to be dissolved in
> function1() and function2()
> 

Thanks for your answer, that was my second option, I will do that.

-- 
Best regards,
Ronald



More information about the linux-amlogic mailing list