[U-Boot] [PATCH] net: eth-uclass: call stop only for active devices

Keerthy a0393675 at ti.com
Wed Feb 27 05:47:02 UTC 2019



On 22/02/19 12:08 AM, Joe Hershberger wrote:
> On Wed, Feb 20, 2019 at 6:33 AM Keerthy <j-keerthy at ti.com> wrote:
>>
>> Currently stop is being called unconditionally without even
>> checking if start is called. In case of multiple instances eth
>> being present many devices might just be initialized without
>> a start call in such cases stop might lead unpredictable behaviors
>> including aborts and crashes. Hence add a check before calling stop.
>>
>> Signed-off-by: Keerthy <j-keerthy at ti.com>
>> ---
>>   net/eth-uclass.c | 3 ++-
>>   1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/net/eth-uclass.c b/net/eth-uclass.c
>> index 2ef20df192..26f7e0b8cd 100644
>> --- a/net/eth-uclass.c
>> +++ b/net/eth-uclass.c
>> @@ -531,7 +531,8 @@ static int eth_pre_remove(struct udevice *dev)
>>   {
>>          struct eth_pdata *pdata = dev->platdata;
>>
>> -       eth_get_ops(dev)->stop(dev);
>> +       if (eth_is_active(dev))
>> +               eth_get_ops(dev)->stop(dev);
> 
> This seems reasonable... What was the case that provoked an issue?
> Which driver was having trouble?

I am trying to implement pru based ethernet driver(multiple instances) 
with cpsw driver on top on am654-evm. I observed that even though i had 
not started
a particular instance of my pru based device stop was getting called and 
it was crashing right at the end.

> 
>>
>>          /* clear the MAC address */
>>          memset(pdata->enetaddr, 0, ARP_HLEN);
>> --
>> 2.17.1
>>
>> _______________________________________________
>> U-Boot mailing list
>> U-Boot at lists.denx.de
>> https://lists.denx.de/listinfo/u-boot


More information about the U-Boot mailing list