Re: Correction: 2.6.16-git12 killed networking -- 3c900 card

From: Pete Clements
Date: Thu Mar 30 2006 - 11:00:22 EST


Quoting Steffen Klassert
>
> On Thu, Mar 30, 2006 at 08:46:54AM -0500, Pete Clements wrote:
> >
> > Looks like that is the case until -git12, which Steffen has identified.
> > Tested on git18 (with git12 fix) and looks good.
>
> This Patch is a candidate for the final fix to make 10base2 work again.
> Could you please try this together with Andrews
> 3c59x-collision-statistics-fix-fix.patch?
>
> Steffen
>
> --- linux-2.6.16-git12/drivers/net/3c59x.c 2006-03-30 14:16:23.000000000 +0200
> +++ linux-2.6.16-git12-sk/drivers/net/3c59x.c 2006-03-30 15:27:13.000000000 +0200
> @@ -788,7 +788,7 @@
> int options; /* User-settable misc. driver options. */
> unsigned int media_override:4, /* Passed-in media type. */
> default_media:4, /* Read from the EEPROM/Wn3_Config. */
> - full_duplex:1, force_fd:1, autoselect:1,
> + full_duplex:1, autoselect:1,
> bus_master:1, /* Vortex can only do a fragment bus-m. */
> full_bus_master_tx:1, full_bus_master_rx:2, /* Boomerang */
> flow_ctrl:1, /* Use 802.3x flow control (PAUSE only) */
> @@ -1633,12 +1633,6 @@
> ((vp->full_duplex && vp->flow_ctrl && vp->partner_flow_ctrl) ?
> 0x100 : 0),
> ioaddr + Wn3_MAC_Ctrl);
> -
> - issue_and_wait(dev, TxReset);
> - /*
> - * Don't reset the PHY - that upsets autonegotiation during DHCP operations.
> - */
> - issue_and_wait(dev, RxReset|0x04);
> }
>
> static void vortex_check_media(struct net_device *dev, unsigned int init)
> @@ -1663,7 +1657,7 @@
> struct vortex_private *vp = netdev_priv(dev);
> void __iomem *ioaddr = vp->ioaddr;
> unsigned int config;
> - int i;
> + int i, mii_reg1, mii_reg5;
>
> if (VORTEX_PCI(vp)) {
> pci_set_power_state(VORTEX_PCI(vp), PCI_D0); /* Go active */
> @@ -1723,14 +1717,23 @@
> printk(KERN_DEBUG "vortex_up(): writing 0x%x to InternalConfig\n", config);
> iowrite32(config, ioaddr + Wn3_Config);
>
> - netif_carrier_off(dev);
> if (dev->if_port == XCVR_MII || dev->if_port == XCVR_NWAY) {
> EL3WINDOW(4);
> + mii_reg1 = mdio_read(dev, vp->phys[0], MII_BMSR);
> + mii_reg5 = mdio_read(dev, vp->phys[0], MII_LPA);
> + vp->partner_flow_ctrl = ((mii_reg5 & 0x0400) != 0);
> +
> vortex_check_media(dev, 1);
> }
> else
> vortex_set_duplex(dev);
>
> + issue_and_wait(dev, TxReset);
> + /*
> + * Don't reset the PHY - that upsets autonegotiation during DHCP operations.
> + */
> + issue_and_wait(dev, RxReset|0x04);
> +
>
> iowrite16(SetStatusEnb | 0x00, ioaddr + EL3_CMD);
>
>

Applied to a fresh git18, all looks good.

--
Pete Clements
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/