]> git.karo-electronics.de Git - karo-tx-uboot.git/commit
net: rtl8169: fix switching between adapters
authorStephen Warren <swarren@nvidia.com>
Tue, 26 Apr 2016 21:29:00 +0000 (15:29 -0600)
committerJoe Hershberger <joe.hershberger@ni.com>
Tue, 21 Jun 2016 22:01:51 +0000 (17:01 -0500)
commitdad7b74045929ff10d93ec1dd60d0fd36fd9a527
tree737e93fcc221aff1373ef362751f731f528c2838
parent9f823615af919c6b89f0b80197f009f78299dcde
net: rtl8169: fix switching between adapters

The rtl8169 driver uses a global variable to store the register address
of the adapter being operated upon. This is updated to point at the
correct adapter when sending or receiving a packet, or shutting down the
adapter, but not when initializing the adapter. Consequently, switching
between different adapters within the same U-Boot runtime does not work
correctly since the driver programs the wrong registers during
rtl8169_eth_start() -> rtl8169_common_start() -> rtl8169_hw_start().

Note that since rtl8169_eth_stop() does set the global variable, the
second consecutive attempt to use the "new" adapter did work even before
this patch, because each time network usage is shut down, the network
core calls stop, which sets the variable so that the next start does
actually initialize the hardware, and the adapter works.

Equally, rtl8169_eth_probe() calls rtl_init() which sets the global, so
if using only a single device, or if picking the "right" device (based on
probe order) when multiple devices are present, ioaddr will already be set
correctly from the get-go, so the issue does not occur.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
drivers/net/rtl8169.c