Messages in this thread Patch in this message | | | Date | Sun, 26 Feb 2006 11:42:07 +0100 | From | Willy TARREAU <> | Subject | Re: [2.4.32 - 2.6.15.4] e1000 - Fix mii interface |
| |
Hello Paul,
On Sat, Feb 25, 2006 at 11:08:49AM +0100, Paul Rolland wrote: > Hello, > > This patch is based on Linux 2.4.32, and I've verified the same problem > exists on 2.6.15.4.
it's mangled, tabs have been turned into whitespaces. I fixed it so please use the appended one.
> Working on a machine with a 2.4.32 kernel, I was surprised to see the driver > complaining when setting the speed to 100FD using mii-tool, but accepting > the setting with ethtool. > Digging into the code, I found that there is some confusion with : > - DUPLEX_FULL and FULL_DUPLEX, > - DUPLEX_HALF and HALF_DUPLEX > in the code : > ... > spddplx += (mii_reg & 0x100) > ? FULL_DUPLEX : > HALF_DUPLEX; > retval = e1000_set_spd_dplx(adapter, > spddplx); > ... > and > int > e1000_set_spd_dplx(struct e1000_adapter *adapter, uint16_t spddplx) > { > adapter->hw.autoneg = 0; > > switch(spddplx) { > case SPEED_10 + DUPLEX_HALF: > adapter->hw.forced_speed_duplex = e1000_10_half; > break; > .... > when the constants don't have the same value. > > This patch is simply changing the code in the e1000_set_spd_dplx to use the > same constants as does the caller of the function : FULL_DUPLEX and > HALF_DUPLEX > whose values are not 0, to make sure we have had a successfull init > (DUPLEX_HALF value is 0, and the DUPLEX_xxx are defined in ethtool.h, thus > are probably not meant to be used in the mii interface). > > Signed-off-by: Paul Rolland <rol@as2917.net> > > diff -urN linux-2.4.32-orig/drivers/net/e1000/e1000_main.c > linux-2.4.32/drivers/net/e1000/e1000_main.c > --- linux-2.4.32-orig/drivers/net/e1000/e1000_main.c Mon Apr 4 01:42:19 > 2005 > +++ linux-2.4.32/drivers/net/e1000/e1000_main.c Sat Feb 25 09:36:23 2006 > @@ -2944,23 +2944,23 @@ > adapter->hw.autoneg = 0; > > switch(spddplx) { > - case SPEED_10 + DUPLEX_HALF: > + case SPEED_10 + HALF_DUPLEX: > adapter->hw.forced_speed_duplex = e1000_10_half; > break; > - case SPEED_10 + DUPLEX_FULL: > + case SPEED_10 + FULL_DUPLEX: > adapter->hw.forced_speed_duplex = e1000_10_full; > break; > - case SPEED_100 + DUPLEX_HALF: > + case SPEED_100 + HALF_DUPLEX: > adapter->hw.forced_speed_duplex = e1000_100_half; > break; > - case SPEED_100 + DUPLEX_FULL: > + case SPEED_100 + FULL_DUPLEX: > adapter->hw.forced_speed_duplex = e1000_100_full; > break; > - case SPEED_1000 + DUPLEX_FULL: > + case SPEED_1000 + FULL_DUPLEX: > adapter->hw.autoneg = 1; > adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL; > break; > - case SPEED_1000 + DUPLEX_HALF: /* not supported */ > + case SPEED_1000 + HALF_DUPLEX: /* not supported */ > default: > DPRINTK(PROBE, ERR, > "Unsupported Speed/Duplexity configuration\n"); > > > Paul Rolland, rol(at)as2917.net > ex-AS2917 Network administrator and Peering Coordinator
Regards, Willy
diff -urN linux-2.4.32-orig/drivers/net/e1000/e1000_main.c linux-2.4.32/drivers/net/e1000/e1000_main.c --- linux-2.4.32-orig/drivers/net/e1000/e1000_main.c Mon Apr 4 01:42:19 2005 +++ linux-2.4.32/drivers/net/e1000/e1000_main.c Sat Feb 25 09:36:23 2006 @@ -2944,23 +2944,23 @@ adapter->hw.autoneg = 0; switch(spddplx) { - case SPEED_10 + DUPLEX_HALF: + case SPEED_10 + HALF_DUPLEX: adapter->hw.forced_speed_duplex = e1000_10_half; break; - case SPEED_10 + DUPLEX_FULL: + case SPEED_10 + FULL_DUPLEX: adapter->hw.forced_speed_duplex = e1000_10_full; break; - case SPEED_100 + DUPLEX_HALF: + case SPEED_100 + HALF_DUPLEX: adapter->hw.forced_speed_duplex = e1000_100_half; break; - case SPEED_100 + DUPLEX_FULL: + case SPEED_100 + FULL_DUPLEX: adapter->hw.forced_speed_duplex = e1000_100_full; break; - case SPEED_1000 + DUPLEX_FULL: + case SPEED_1000 + FULL_DUPLEX: adapter->hw.autoneg = 1; adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL; break; - case SPEED_1000 + DUPLEX_HALF: /* not supported */ + case SPEED_1000 + HALF_DUPLEX: /* not supported */ default: DPRINTK(PROBE, ERR, "Unsupported Speed/Duplexity configuration\n");
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |