Re: [PATCH] check_duplex bug causes HD operation, carrier errors

Donald Becker <[email protected]> Fri, 28 Jun 2002 14:23:40 -0400 (EDT)
Newsgroups gmane.linux.drivers.tulip.bugs
Message-ID <Pine.LNX.4.33.0206281213070.1095-100000@presario>
On Thu, 27 Jun 2002, Bhavesh P. Davda wrote:

> Subject: [tulip-bug] [PATCH] check_duplex bug causes HD operation,
>      carrier errors
>
> Finally was able to track this bug down to a fairly simple set of
> operations:

Errrmm, this patch stops the transmitter to change the duplex every
timer tick.

I'm not seeing the bug that this fixes.
It appears to fix a problem where the 'tp->full_duplex' variable is
initially set, but the chip has not been put in full duplex mode.  Since
the driver thinks the duplex setting is fine, it is never updated.

This mismatch should be pretty clearly shown with tulip-diag.

> diff -Naur orig/tulip.c new/tulip.c
> --- orig/tulip.c	Thu Jun 27 15:37:41 2002
> +++ new/tulip.c	Thu Jun 27 15:39:05 2002
> @@ -1916,21 +1916,18 @@
>  	duplex = ((negotiated & 0x0300) == 0x0100
>  			  || (negotiated & 0x00C0) == 0x0040);
>  	/* 100baseTx-FD  or  10T-FD, but not 100-HD */
> -	if (tp->full_duplex != duplex) {
> -		tp->full_duplex = duplex;
> -		if (negotiated & 0x0380)	/* 100mbps. */
> -			tp->csr6 &= ~0x00400000;
> -		if (tp->full_duplex) tp->csr6 |= FullDuplex;
> -		else				 tp->csr6 &= ~FullDuplex;
> -		outl(tp->csr6 | RxOn, ioaddr + CSR6);
> -		outl(tp->csr6 | TxOn | RxOn, ioaddr + CSR6);
> -		if (tp->msg_level & NETIF_MSG_LINK)
> -			printk(KERN_INFO "%s: Setting %s-duplex based on MII "
> -				   "#%d link partner capability of %4.4x.\n",
> -				   dev->name, tp->full_duplex ? "full" : "half",
> -				   tp->phys[0], mii_reg5);
> -		return 1;
> -	}
> +	tp->full_duplex = duplex;
> +	if (negotiated & 0x0380)	/* 100mbps. */
> +		tp->csr6 &= ~0x00400000;
> +	if (tp->full_duplex) tp->csr6 |= FullDuplex;
> +	else				 tp->csr6 &= ~FullDuplex;
> +	outl(tp->csr6 | RxOn, ioaddr + CSR6);
> +	outl(tp->csr6 | TxOn | RxOn, ioaddr + CSR6);
> +	if (tp->msg_level & NETIF_MSG_LINK)
> +		printk(KERN_INFO "%s: Setting %s-duplex based on MII "
> +			   "#%d link partner capability of %4.4x.\n",
> +			   dev->name, tp->full_duplex ? "full" : "half",
> +			   tp->phys[0], mii_reg5);
>  	return 0;
>  }
>
>

-- 
Donald Becker				[email protected]
Scyld Computing Corporation		http://www.scyld.com
410 Severn Ave. Suite 210		Second Generation Beowulf Clusters
Annapolis MD 21403			410-990-9993


_______________________________________________
tulip-bug mailing list, [email protected]
To change to digest mode or unsubscribe visit
http://www.scyld.com/mailman/listinfo/tulip-bug