forcedeth: recover error support
Subsystems (2)
PATCH 4/5 forcedeth: recover error support
This patch adds another type of recoverable error to the driver. It also modifies the sequence for recovery to include a mac reset and clearing of interrupts.
Signed-off-by Ayaz Abdulla <[email protected]>
drivers/net/forcedeth.c +10 -3
@@ -102,7 +102,7 @@enum { NvRegIrqStatus =0x000 , #define NVREG_IRQSTAT_MIIEVENT 0x040 -#define NVREG_IRQSTAT_MASK 0x81ff +#define NVREG_IRQSTAT_MASK 0x83ff NvRegIrqMask =0x004 ,#define NVREG_IRQ_RX_ERROR 0x0001 #define NVREG_IRQ_RX 0x0002
@@ -113,7 +113,7 @@#define NVREG_IRQ_LINK 0x0040#define NVREG_IRQ_RX_FORCED 0x0080#define NVREG_IRQ_TX_FORCED 0x0100 -#define NVREG_IRQ_RECOVER_ERROR 0x8000 +#define NVREG_IRQ_RECOVER_ERROR 0x8200#define NVREG_IRQMASK_THROUGHPUT 0x00df#define NVREG_IRQMASK_CPU 0x0060#define NVREG_IRQ_TX_ALL (NVREG_IRQ_TX_ERR|NVREG_IRQ_TX_OK|NVREG_IRQ_TX_FORCED)
@@ -4064,13 +4064,15 @@if (np->recover_error) { np->recover_error =0 ; -printk (KERN_INFO "forcedeth: MAC in recoverable error state\n" ); +printk (KERN_INFO "%s: MAC in recoverable error state\n" , dev->name);if (netif_running (dev)) {netif_tx_lock_bh (dev);netif_addr_lock (dev);spin_lock (&np->lock);/* stop engines */ nv_stop_rxtx (dev); +if (np->driver_data &DEV_HAS_POWER_CNTRL ) +nv_mac_reset (dev);nv_txrx_reset (dev);/* drain rx queue */ nv_drain_rxtx (dev);
@@ -4088,6 +4090,11 @@pci_push (base);writel (NVREG_TXRXCTL_KICK |np->txrxctl_bits,get_hwbase (dev) + NvRegTxRxControl);pci_push (base); +/* clear interrupts */ +if (!(np->msi_flags &NV_MSI_X_ENABLED )) +writel (NVREG_IRQSTAT_MASK , base + NvRegIrqStatus); +else +writel (NVREG_IRQSTAT_MASK , base + NvRegMSIXIrqStatus);/* restart rx engine */ nv_start_rxtx (dev);