Messages in this thread Patch in this message | | | Subject | Re: Sun GEM card looses TX on x86 32bit PCI | From | Beezly <> | Date | 11 Mar 2002 21:23:34 +0000 |
| |
David,
I've been looking some more at what my changes did.... it might be best to completely ignore them ;) I had no clue what I was doing!
Cheers,
Beezly
On Mon, 2002-03-11 at 21:11, Beezly wrote: > Hi David, > > It seems I fubar'd. I recompiled the module and run it through the test > again... no hang. It looks like I forgot to copy the new module into my > /lib/modules/<blah>. Apologies for messing up there. > > Anyway... the new driver still drops packets after the initial RX > overflow, so I had a poke around with it and I've seen some definate > improvement by forcing the whole chip to reset when the RX overflows. > > My modifications to the driver are evil and I only intend them to be a > test, but it helps to shed some extra light on what's going on. > > When the chip does a full reset I loose a whole load of packets, but I'm > guessing this is normal :( > > Also, I can't remember where I read it, but the Extreme Summit 48 is > supposed to support *receiving* the xon/xoff Pause stuff (I'm no expert > in this area, so I could be talking complete twaddle!), no transmit > capability though. > > Here's what I get out of the module when it resets (with my limit=5000 > mod); > > eth0: RX buffer overflowed - running rxmac_reset > eth0: RX MAC resetting > eth0: RX MAC *ONLY* reset > eth0: RX MAC reset ok? > eth0: RX MAC will not disable, resetting whole chip. > eth0: PCS AutoNEG complete. > eth0: PCS link is now up. > > Without the limit=5000, it appears that the module detects the RX > section is "un-hung" when it isn't. > > Cheers, > > Beezly > > On Mon, 2002-03-11 at 19:02, David S. Miller wrote: > > From: Beezly <beezly@beezly.org.uk> > > Date: 11 Mar 2002 18:35:01 +0000 > > > > Sorry it took so long for me to get back to you. Sadly it also hung with > > this patch ;) I was unable to get an oops out of it (machine was > > completely hosed and in X so I couldn't even note the oops on paper :( > > ). > > > > So rerun the test not under X please? > > ---- >
> --- sungem.c Mon Mar 11 20:37:57 2002 > +++ sungem.c.testing Mon Mar 11 20:31:12 2002 > @@ -302,14 +302,23 @@ > u64 desc_dma; > u32 val; > > + printk(KERN_ERR "%s: RX MAC resetting\n", dev->name); > /* First, reset MAC RX. */ > writel(gp->mac_rx_cfg & ~MAC_RXCFG_ENAB, > gp->regs + MAC_RXCFG); > + printk(KERN_ERR "%s: RX MAC *ONLY* reset\n", dev->name); > + > for (limit = 0; limit < 5000; limit++) { > - if (!(readl(gp->regs + MAC_RXCFG) & MAC_RXCFG_ENAB)) > + if (!(readl(gp->regs + MAC_RXCFG) & MAC_RXCFG_ENAB)) { > + printk(KERN_ERR "%s: RX MAC reset ok?\n", dev->name); > break; > + } > udelay(10); > } > + > + /* RX MAC reset doesn't appear to work so I force a whole reset */ > + limit = 5000; > + > if (limit == 5000) { > printk(KERN_ERR "%s: RX MAC will not disable, resetting whole " > "chip.\n", dev->name); > @@ -323,6 +332,9 @@ > break; > udelay(10); > } > + > + limit=5000; > + > if (limit == 5000) { > printk(KERN_ERR "%s: RX DMA will not disable, resetting whole " > "chip.\n", dev->name); > @@ -399,6 +411,8 @@ > if (rxmac_stat & MAC_RXSTAT_OFLW) { > gp->net_stats.rx_over_errors++; > gp->net_stats.rx_fifo_errors++; > + printk(KERN_DEBUG "%s: RX buffer overflowed - running rxmac_reset\n", > + gp->dev->name); > > ret = gem_rxmac_reset(gp); > }
[unhandled content-type:application/pgp-signature] | |