2.4.27: fixes for 8xx fec.c
PATCH 1/1 2.4.27: fixes for 8xx fec.c
Hi
I found two problems concerning the fast ethernet driver for ppc 8xx processors (fec.c) in linux kernel version 2.4.26/27 and I think in the 2.6 series as well (not confirmed).
First problem is only when CONFIG_USE_MDIO is __not__ set.
How to reproduce:
start the system with fec ethernet, everything works,
issue a ifconfig ethX down and ifconfig ethX up and ethernet is not working anymore. Fix (or at least a workaround). In fec_enet_open() add a fec_restart() at the end if CONFIG_USE_MDIO is not set.
2nd problem is with CONFIG_USE_MDIO set:
The promiscuous mode/multicast settings are getting lost if link status changes occurs How to reproduce:
build a bridge with the fec device. Then simply unplug and replug the ethernet cable. fec_restart() is called which idles all promiscuous mode/multicast settings. The bridge will then only forward broadcast frames because the promiscuous setting is lost.
Fix: call set_multicast_list(dev) at the end of fec_restart() before ethernet is reenabled.
If there are more questions please write back.
Please CC me as I'm not subscribed to the lists
Regards
Harald
Here are the fixes:
arch/ppc/8xx_io/fec.c +8 -0
@@ -1466,6 +1466,11 @@return -ENODEV ;/* No PHY we understand */ #else fep->link =1 ; + +#ifndef CONFIG_USE_MDIO +fec_restart (dev,0 ); +#endif +netif_start_queue (dev);return 0 ;/* Success */ #endif /* CONFIG_USE_MDIO */
@@ -2049,6 +2054,9 @@ fecp->fec_imask = (FEC_ENET_TXF |FEC_ENET_TXB |FEC_ENET_RXF |FEC_ENET_RXB |FEC_ENET_MII ); +/* set old promiscuous/multicast settings which are lost above */ +set_multicast_list (dev); +/* And last, enable the transmit and receive processing. */ fecp->fec_ecntrl =FEC_ECNTRL_PINMUX |FEC_ECNTRL_ETHER_EN ;
Hi,
Quoted 10 lines
arch/ppc/8xx_io/fec.c +5
-0+ +#ifndef CONFIG_USE_MDIO +fec_restart (dev,0 ); +#endif +netif_start_queue(dev); return 0; /* Success */#endif /*
CONFIG_USE_MDIO*/
Just a minor hint: you don't need the #ifndef CONFIG_USE_MDIO guard since you're already in the non MDIO branch (see #endif comment).
Greetings,
Florian