aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/sonic.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/sonic.c')
-rw-r--r--drivers/net/sonic.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/net/sonic.c b/drivers/net/sonic.c
index c6320c719931..687c1413c4ee 100644
--- a/drivers/net/sonic.c
+++ b/drivers/net/sonic.c
@@ -178,8 +178,13 @@ static void sonic_tx_timeout(struct net_device *dev)
178{ 178{
179 struct sonic_local *lp = netdev_priv(dev); 179 struct sonic_local *lp = netdev_priv(dev);
180 int i; 180 int i;
181 /* Stop the interrupts for this */ 181 /*
182 * put the Sonic into software-reset mode and
183 * disable all interrupts before releasing DMA buffers
184 */
182 SONIC_WRITE(SONIC_IMR, 0); 185 SONIC_WRITE(SONIC_IMR, 0);
186 SONIC_WRITE(SONIC_ISR, 0x7fff);
187 SONIC_WRITE(SONIC_CMD, SONIC_CR_RST);
183 /* We could resend the original skbs. Easier to re-initialise. */ 188 /* We could resend the original skbs. Easier to re-initialise. */
184 for (i = 0; i < SONIC_NUM_TDS; i++) { 189 for (i = 0; i < SONIC_NUM_TDS; i++) {
185 if(lp->tx_laddr[i]) { 190 if(lp->tx_laddr[i]) {