[U-Boot] [RFC PATCH] net: rtl8169: allow multiple devices

Stephen Warren swarren at wwwdotorg.org
Tue Apr 26 19:14:06 CEST 2016


On 04/26/2016 10:53 AM, Stephen Warren wrote:
> On 04/25/2016 11:08 AM, Joe Hershberger wrote:
>> Hi Stephen,
>>
>> On Wed, Apr 20, 2016 at 6:31 PM, Stephen Warren
>> <swarren at wwwdotorg.org> wrote:
>>> From: Stephen Warren <swarren at nvidia.com>
>>>
>>> Currently, if multiple rtl8169 devices exist on the PCI bus, they all
>>> get the same name, which prevents the user from selecting which to use
>>> via the ethact environment variable. Port the auto-naming code from the
>>> e1000 driver to solve this.
>
> ... (issues with ethprime/ethact)
>>> Equally,
>>> simply running e.g. "dhcp zImage" twice in a row doesn't seem to work;
>>> perhaps the subsequent attempts perform another lookup by name from
>>> ethact
>>> rather than just using the same device pointer from before?
>>
>> I believe it does work in general. Are you saying that it doesn't work
>> on your board without this patch?
>
> Ah. The problem is that modifying ethprime after it's been used the
> first time has no effect. So, the following work:
>
> pci enum
> setenv ethprime 'RTL8169#0'
> dhcp zImage
>
> or:
>
> pci enum
> setenv ethprime 'RTL8169#1'
> dhcp zImage
>
> but this doesn't:
>
> pci enum
> setenv ethprime 'RTL8169#0'
> dhcp zImage
> # Move Ethernet cable
> setenv ethprime 'RTL8169#1'
> dhcp zImage
>
> I guess that makes sense given how ethprime is supposed to work, but was
> a bit confusing when I wasn't aware.

There is one problematic case in the current code-base, without this 
patch, again because there can be multiple Ethernet adapters with the 
same name.

eth-uclass.c's eth_get_dev_by_name() allows devices to be looked up 
either by name, or via string "ethN" which will find the Nth adapter. 
That enables the user to select between even identically-named adapters. 
However, eth_current_changed() then over-writes ethact to the adapter 
name, which potentially causes a different adapter to be found next 
time, which likely causes failures, e.g. if the user only plugged a 
cable into one of the two.

 > pci enum
 > setenv ethact eth1
 > dhcp zImage
<<succeeds>
 > echo $ethact
eth_rtl8169
 > dhcp zImage
<<fails>>

This patches solves that problem too, since the value in the 
over-written ethact is unique so everything works.


More information about the U-Boot mailing list