[U-Boot] [PATCH 01/14] net: eth-uclass: eth_get_dev based on SEQ_ALIAS instead of probe order

keerthy j-keerthy at ti.com
Tue Oct 29 09:56:50 UTC 2019



On 10/29/2019 2:33 PM, Lokesh Vutla wrote:
> 
> 
> On 25/10/19 10:23 PM, keerthy wrote:
>>
>>
>> On 10/25/2019 5:35 PM, Tom Rini wrote:
>>> On Tue, Aug 06, 2019 at 04:08:31PM +0530, Keerthy wrote:
>>>
>>>> In case of multiple eth interfaces currently eth_get_dev
>>>> fetches the device based on the probe order which can be
>>>> random hence try with the alias.
>>>>
>>>> Signed-off-by: Keerthy <j-keerthy at ti.com>
>>>> ---
>>>>    net/eth-uclass.c | 4 ++--
>>>>    1 file changed, 2 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/net/eth-uclass.c b/net/eth-uclass.c
>>>> index 031d558625..f11c307b8c 100644
>>>> --- a/net/eth-uclass.c
>>>> +++ b/net/eth-uclass.c
>>>> @@ -68,8 +68,8 @@ struct udevice *eth_get_dev(void)
>>>>          uc_priv = eth_get_uclass_priv();
>>>>        if (!uc_priv->current)
>>>> -        eth_errno = uclass_first_device(UCLASS_ETH,
>>>> -                    &uc_priv->current);
>>>> +        eth_errno = uclass_get_device_by_seq(UCLASS_ETH,
>>>> +                             0, &uc_priv->current);
>>>>        return uc_priv->current;
>>>>    }
>>>
>>> This breaks networking on qemu_arm / qemu_arm64 and no networking device
>>> is found.
>>
>> Okay. That is pretty strange. So seems like uclass_get_device_by_seq is failing
>> for some reason.
> 
> because not everyone populates aliases. You can do something like below:
> 
> 	eth_errno = uclass_get_device_by_seq(UCLASS_ETH, 0, &uc_priv->current);
> 	if (eth_errno || !uc_priv->current)
> 		 eth_errno = uclass_first_device(UCLASS_ETH, &uc_priv->current);

Thanks Lokesh. I will add that check.

> 
> 
> Thanks and regards,
> Lokesh
> 
>>
>>>


More information about the U-Boot mailing list