[PATCH] usb: onboard-hub: Update the bind function based on "peer_hub" property

Marek Vasut marex at denx.de
Wed Dec 4 00:39:08 CET 2024


On 12/3/24 6:02 PM, Michal Simek wrote:
> 
> 
> On 12/3/24 17:24, Marek Vasut wrote:
>> On 12/3/24 2:44 PM, Michal Simek wrote:
>>>
>>>
>>> On 12/3/24 05:49, Venkatesh Yadav Abbarapu wrote:
>>>> Add the bool variable "peer_hub" and set this only for the
>>>> hubs which have the "peer-hub" property in their DT nodes.
>>>> Skip the bind function for usb hubs which don't have "peer-hub"
>>>> property.
>>>>
>>>> Fixes: 57e30b09fc ("usb: onboard-hub: Bail out if peer hub is 
>>>> already probed")
>>>> Signed-off-by: Venkatesh Yadav Abbarapu <venkatesh.abbarapu at amd.com>
>>>> ---
>>>>   common/usb_onboard_hub.c | 8 ++++++++
>>>>   1 file changed, 8 insertions(+)
>>>>
>>>> diff --git a/common/usb_onboard_hub.c b/common/usb_onboard_hub.c
>>>> index 6f28036e09..0a8fac38ee 100644
>>>> --- a/common/usb_onboard_hub.c
>>>> +++ b/common/usb_onboard_hub.c
>>>> @@ -26,6 +26,7 @@ struct onboard_hub {
>>>>   struct onboard_hub_data {
>>>>       unsigned long reset_us;
>>>> +    bool peer_hub;
>>>>       unsigned long power_on_delay_us;
>>>>       int (*init)(struct udevice *dev);
>>>>   };
>>>> @@ -178,10 +179,15 @@ err:
>>>>   static int usb_onboard_hub_bind(struct udevice *dev)
>>>>   {
>>>> +    struct onboard_hub_data *data =
>>>> +        (struct onboard_hub_data *)dev_get_driver_data(dev);
>>>>       struct ofnode_phandle_args phandle;
>>>>       const void *fdt = gd->fdt_blob;
>>>>       int ret, off;
>>>> +    if (!data->peer_hub)
>>>> +        return 0;
>>>> +
>>>>       ret = dev_read_phandle_with_args(dev, "peer-hub", NULL, 0, 0, 
>>>> &phandle);
>>>>       if (ret)  {
>>>>           dev_err(dev, "peer-hub not specified\n");
>>>> @@ -212,12 +218,14 @@ static int usb_onboard_hub_remove(struct 
>>>> udevice *dev)
>>>>   }
>>>>   static const struct onboard_hub_data usb2514_data = {
>>>> +    .peer_hub = false,
>>>>       .power_on_delay_us = 500,
>>>>       .reset_us = 1,
>>>>   };
>>>>   static const struct onboard_hub_data usb5744_data = {
>>>>       .init = usb5744_i2c_init,
>>>> +    .peer_hub = true,
>>>>       .power_on_delay_us = 1000,
>>>>       .reset_us = 5,
>>>>   };
>>>
>>> I don't think this is correct solution. I think if optional property 
>>> peer-hub is not present in DT bind should return 0 and that should 
>>> fix issue on stm board where only one hub is present.
>> Shouldn't the 'peer-hub' property be mandatory for this hub ?
> 
> You can use this hub with usb2.0 only or with usb3.0 only. It means 
> peer-hub is correctly optional property. It is just saying when it is 
> there hub should be configured only once not twice.
> 
> It means right fix is when peer-hub property is missing bind should just 
> pass because it is just hub which don't use another ID.
OK


More information about the U-Boot mailing list