netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff Garzik <jgarzik@pobox.com>
To: Jesse Huang <jesse@icplus.com.tw>
Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, akpm@osdl.org
Subject: Re: [PATCH 2/6] IP100A Fix Tx pause bug
Date: Fri, 18 Aug 2006 07:27:33 -0400	[thread overview]
Message-ID: <44E5A425.8020200@pobox.com> (raw)
In-Reply-To: <1155841445.4532.10.camel@localhost.localdomain>

Jesse Huang wrote:
> @@ -1099,6 +1099,10 @@ reset_tx (struct net_device *dev)
>  	}
>  	np->cur_tx = np->dirty_tx = 0;
>  	np->cur_task = 0;
> +	
> +	np->last_tx=0;

add whitespace, to make it look like all other assignments:
s/=/ = /


> +	iowrite8(127, ioaddr + TxDMAPollPeriod);	
> +	

what does the value 127 represent?


>  	iowrite16 (StatsEnable | RxEnable | TxEnable, ioaddr + MACCtrl1);
>  	return 0;
>  }
> @@ -1156,29 +1160,29 @@ static irqreturn_t intr_handler(int irq,
>  						np->stats.tx_fifo_errors++;
>  					if (tx_status & 0x02)
>  						np->stats.tx_window_errors++;
> -					/*
> -					** This reset has been verified on
> -					** DFE-580TX boards ! phdm@macqel.be.
> -					*/
> -					if (tx_status & 0x10) {	/* TxUnderrun */
> -						unsigned short txthreshold;
> -
> -						txthreshold = ioread16 (ioaddr + TxStartThresh);
> -						/* Restart Tx FIFO and transmitter */
> -						sundance_reset(dev, (NetworkReset|FIFOReset|TxReset) << 16);
> -						iowrite16 (txthreshold, ioaddr + TxStartThresh);
> -						/* No need to reset the Tx pointer here */
> +
> +					/* FIFO ERROR need to be reset tx */
> +					if (tx_status & 0x10) {	/* Reset the Tx. */
> +						spin_lock(&np->lock);
> +						reset_tx(dev);
> +						spin_unlock(&np->lock);
> +					}
> +					if (tx_status & 0x1e) {
> +					/* need to make sure tx enabled */
> +						int i = 10;
> +						do {
> +							iowrite16 (ioread16(ioaddr + MACCtrl1) | TxEnable, ioaddr + MACCtrl1);
> +							if (ioread16(ioaddr + MACCtrl1) & TxEnabled)
> +								break;
> +							mdelay(1);
> +						} while (--i);
>  					}
> -					/* Restart the Tx. */
> -					iowrite16 (TxEnable, ioaddr + MACCtrl1);
>  				}
> -				/* Yup, this is a documentation bug.  It cost me *hours*. */
> +				
>  				iowrite16 (0, ioaddr + TxStatus);
> -				if (tx_cnt < 0) {
> -					iowrite32(5000, ioaddr + DownCounter);
> -					break;
> -				}
>  				tx_status = ioread16 (ioaddr + TxStatus);
> +				if (tx_cnt < 0)
> +					break;
>  			}
>  			hw_frame_id = (tx_status >> 8) & 0xff;
>  		} else 	{
> @@ -1244,6 +1248,9 @@ static irqreturn_t intr_handler(int irq,
>  	if (netif_msg_intr(np))
>  		printk(KERN_DEBUG "%s: exiting interrupt, status=%#4.4x.\n",
>  			   dev->name, ioread16(ioaddr + IntrStatus));
> +			   
> +	iowrite32(5000, ioaddr + DownCounter); 
> +				   
>  	return IRQ_RETVAL(handled);

DownCounter should not be written unconditionally.  Consider shared 
interrupts, where sundance performs no work, and handled==0.

	Jeff



  reply	other threads:[~2006-08-18 11:27 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-17 19:04 [PATCH 2/6] IP100A Fix Tx pause bug Jesse Huang
2006-08-18 11:27 ` Jeff Garzik [this message]
2006-08-22  1:17   ` Jesse Huang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=44E5A425.8020200@pobox.com \
    --to=jgarzik@pobox.com \
    --cc=akpm@osdl.org \
    --cc=jesse@icplus.com.tw \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).