summaryrefslogtreecommitdiffstats
path: root/drivers/net/sonic.c
diff options
context:
space:
mode:
authorFinn Thain <fthain@telegraphics.com.au>2007-05-01 22:33:02 +0200
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-04 17:59:08 -0700
commitd74472f0b2553e59eafb7feee0ff9558136a17e0 (patch)
tree38d85faf098e7c5b1e41dc23ea6c9044f8ae3e91 /drivers/net/sonic.c
parent8b6aaab8c8bdbe011aac79af218dd1e657984bab (diff)
downloadop-kernel-dev-d74472f0b2553e59eafb7feee0ff9558136a17e0.zip
op-kernel-dev-d74472f0b2553e59eafb7feee0ff9558136a17e0.tar.gz
SONIC: small fix and cleanup
Fix a potential problem in the timeout handling: don't free the DMA buffers before resetting the chip. Also a trivial cleanup. Bring macsonic and jazzsonic into sync. Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
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 c6320c7..687c141 100644
--- a/drivers/net/sonic.c
+++ b/drivers/net/sonic.c
@@ -178,8 +178,13 @@ static void sonic_tx_timeout(struct net_device *dev)
{
struct sonic_local *lp = netdev_priv(dev);
int i;
- /* Stop the interrupts for this */
+ /*
+ * put the Sonic into software-reset mode and
+ * disable all interrupts before releasing DMA buffers
+ */
SONIC_WRITE(SONIC_IMR, 0);
+ SONIC_WRITE(SONIC_ISR, 0x7fff);
+ SONIC_WRITE(SONIC_CMD, SONIC_CR_RST);
/* We could resend the original skbs. Easier to re-initialise. */
for (i = 0; i < SONIC_NUM_TDS; i++) {
if(lp->tx_laddr[i]) {
OpenPOWER on IntegriCloud