--- 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); }