[PATCH v3 4/8] thermal: amlogic: Add support for secure monitor calibration readout
Daniel Lezcano
daniel.lezcano at oss.qualcomm.com
Thu Apr 23 08:17:13 PDT 2026
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()
More information about the linux-amlogic
mailing list