[PATCH 1/2] firmware: zynqmp: Mask expected and show unexpected warning

Stefan Herbrechtsmeier stefan.herbrechtsmeier-oss at weidmueller.com
Fri Apr 21 11:56:41 CEST 2023


Hi Michal,

Am 20.04.2023 um 14:39 schrieb Michal Simek:

> On 4/20/23 14:30, Stefan Herbrechtsmeier wrote:
>> Am 20.04.2023 um 14:11 schrieb Michal Simek:
>>> On 4/20/23 14:03, Stefan Herbrechtsmeier wrote:
>>>> Hi Michal,
>>>>
>>>> Am 20.04.2023 um 13:06 schrieb Michal Simek:
>>>>> Hi,
>>>>>
>>>>> On 4/19/23 09:58, Stefan Herbrechtsmeier wrote:
>>>>>> Hi Michal,
>>>>>>
>>>>>> Am 17.04.2023 um 12:16 schrieb Michal Simek:
>>>>>>
>>>>>>> On 4/3/23 15:34, Stefan Herbrechtsmeier wrote:
>>>>>>>> From: Stefan Herbrechtsmeier
>>>>>>>> <stefan.herbrechtsmeier at weidmueller.com>
>>>>>>>>
>>>>>>>> Mask the expected and show the unexpected warning "No 
>>>>>>>> permission to
>>>>>>>> change config object" for NODE_OCM_BANK_0 because this node is
>>>>>>>> used to
>>>>>>>> detect if further zynqmp_pmufw_node function calls should be
>>>>>>>> skipped.
>>>>>>>>
>>>>>>>> Signed-off-by: Stefan Herbrechtsmeier
>>>>>>>> <stefan.herbrechtsmeier at weidmueller.com>
>>>>>>>> ---
>>>>>>>>
>>>>>>>>   drivers/firmware/firmware-zynqmp.c | 2 +-
>>>>>>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>>>>
>>>>>>>> diff --git a/drivers/firmware/firmware-zynqmp.c
>>>>>>>> b/drivers/firmware/firmware-zynqmp.c
>>>>>>>> index dc8e3ad2b9..8435b58ef9 100644
>>>>>>>> --- a/drivers/firmware/firmware-zynqmp.c
>>>>>>>> +++ b/drivers/firmware/firmware-zynqmp.c
>>>>>>>> @@ -251,7 +251,7 @@ int zynqmp_pmufw_load_config_object(const void
>>>>>>>> *cfg_obj, size_t size)
>>>>>>>>          err = xilinx_pm_request(PM_SET_CONFIGURATION,
>>>>>>>> (u32)(u64)cfg_obj, 0, 0,
>>>>>>>>                                  0, ret_payload);
>>>>>>>>          if (err == XST_PM_NO_ACCESS) {
>>>>>>>> -               if (((u32 *)cfg_obj)[NODE_ID_LOCATION] ==
>>>>>>>> NODE_OCM_BANK_0) {
>>>>>>>> +               if (((u32 *)cfg_obj)[NODE_ID_LOCATION] !=
>>>>>>>> NODE_OCM_BANK_0) {
>>>>>>>>                          printf("PMUFW:  No permission to change
>>>>>>>> config object\n");
>>>>>>>>                          return err;
>>>>>>>>                  }
>>>>>>>
>>>>>>> First of all we should very likely create a macro for 
>>>>>>> NODE_OCM_BANK_0
>>>>>>> to cover that dependency that it is used in 3 different locations
>>>>>>> which have to match.
>>>>>>
>>>>>> Okay, I will add a PMUFW_CFG_OBJ_SUPPORT_NODE macro.
>>>>>>
>>>>>>> The second is the change you have in 2/2 should be the part of this
>>>>>>> patch because when only 1/2 is applied you change behavior.
>>>>>>
>>>>>> The patches should be independent, and the behavior change is
>>>>>> intended.
>>>>>> The message should be printed if you don’t heave the permission 
>>>>>> for a
>>>>>> specific config object and not if the driver checks for support of
>>>>>> config objects. The NODE_OCM_BANK_0 call should never fail if 
>>>>>> load of
>>>>>> config objects is supported.
>>>>>>
>>>>>>> And changes in 2/2 makes sense.
>>>>>>>
>>>>>>> I would be even fine to move skip_config out of zynqmp_pmufw_node()
>>>>>>
>>>>>> The zynqmp_pmufw_node() function doesn't return an error and the
>>>>>> skip_config variable is static inside the function.
>>>>>>
>>>>>>> and setting up skip_config value directly in 
>>>>>>> zynqmp_power_probe() not
>>>>>>> to check in every call.
>>>>>>
>>>>>> We still need to check the skip_config variable inside
>>>>>> zynqmp_pmufw_node
>>>>>> to skip the load of the config object if the pmufw doesn't 
>>>>>> support it.
>>>>>>
>>>>>>>
>>>>>>>  85         if (ret == XST_PM_NO_ACCESS && id == NODE_OCM_BANK_0)
>>>>>>>  86                 skip_config = true;
>>>>>
>>>>> Without testing on HW I though to change it like this that 
>>>>> skip_config
>>>>> is configured and checked only once at probe time.
>>>>>
>>>>> What do you think?
>>>>
>>>> Patch looks okay except the printf. Is this really necessary? Could we
>>>> use a debug instead?
>>>
>>> It is feature which you need to explicitly enable in PMUFW to work.
>>
>> Is this information really necessary for a production build?
>
> For production build no. But there are other messages which are likely 
> not needed. Like a silicon version (production is only one version) 
> for example.

Could we use log_info instead of printf?

>>> It means having information in boot log is quite worth.
>>
>> Either we should print a message in any case or only if the feature is
>> disabled because in this case the zynqmp_pmufw_node() is a nop.
>
> By default that feature should be disabled in standard pmufw build.
> I don't have a preference but I want to see that message only once, 
> disabled or enabled.

Is it possible to call the zynqmp_pmufw_node() in the probe() for the 
other platforms?

>>> Actually maybe even we should create variable based on it to be able
>>> to use it in scripts.
>>> Because it is everybody decision if you want to let OS to send that
>>> config fragments to PMUFW or just close that doors (right now you can
>>> do it via command).
>>>
>>> Also thinking that by default that skip_config should be false by
>>> default and only enable it before calling that OCM. Or just change the
>>> name to enable_config to be able to place it to bss section.
>>
>> The skip_config is false by default and the function is called by the
>> probe as first user.
>
> It should be but question is if it is in all cases. At least you can 
> disable power domain driver and then first call can be via command.

We should call the zynqmp_pmufw_node() in probe() for all platforms to 
enable / disable the feature.

I have test your changes and they works.

Regards
   Stefan



More information about the U-Boot mailing list