Subject: Re: dead network on JS21 with tg3 driver after flowcontrol changes

From: "Michael Chan" <[email-masked]>
Date: Thu, 15 May 2008 12:51:18 -0700

On Thu, 2008-05-15 at 10:15 -0700, Matt Carlson wrote:
> If you were to start with the original file, does the following patch
> fix the problem?
> 
> 
> diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
> index 07b3f77..4c248d7 100644
> --- a/drivers/net/tg3.c
> +++ b/drivers/net/tg3.c
> @@ -3168,8 +3168,7 @@ static int tg3_setup_fiber_mii_phy(struct tg3 *tp, int force_reset)
>  	err |= tg3_readphy(tp, MII_BMCR, &bmcr);
>  
>  	if ((tp->link_config.autoneg == AUTONEG_ENABLE) && !force_reset &&
> -	    (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT) &&
> -	     tp->link_config.flowctrl == tp->link_config.active_flowctrl) {
> +	    (tp->tg3_flags2 & TG3_FLG2_PARALLEL_DETECT)) {
>  		/* do nothing, just check for link up at the end */
>  	} else if (tp->link_config.autoneg == AUTONEG_ENABLE) {
>  		u32 adv, new_adv;
> 

Matt, I think that's very likely the problem.  If we are trying to
establish link in parallel detect mode, the flow control settings may
not match.  If we do not enter the if statement to do nothing, we will
keep autonegotiating forever and never establish link.