diff options
author | Damien Bergamini <damien@cvs.openbsd.org> | 2005-04-02 08:48:16 +0000 |
---|---|---|
committer | Damien Bergamini <damien@cvs.openbsd.org> | 2005-04-02 08:48:16 +0000 |
commit | 89975c69fbe41c789ccf48ff29a8048b681eb3e4 (patch) | |
tree | ca62285734fa2fccf8b310ece97fc9bf64dadd92 /sys/dev/ic | |
parent | b1fc6c5ae5729dfc1bdc6059456f110f51eef44c (diff) |
Damn it! I spent hours fixing that "device timeout" bug!
It turned out that priority ring base address must be set before atim ring.
This was not documented anywhere. Stupid hardware!
Diffstat (limited to 'sys/dev/ic')
-rw-r--r-- | sys/dev/ic/ral.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/sys/dev/ic/ral.c b/sys/dev/ic/ral.c index 1ea7c27ec01..de5ba908af0 100644 --- a/sys/dev/ic/ral.c +++ b/sys/dev/ic/ral.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ral.c,v 1.44 2005/04/01 11:21:28 damien Exp $ */ +/* $OpenBSD: ral.c,v 1.45 2005/04/02 08:48:15 damien Exp $ */ /*- * Copyright (c) 2005 @@ -2632,10 +2632,11 @@ ral_init(struct ifnet *ifp) RAL_TX_RING_COUNT << 8 | RAL_TX_DESC_SIZE; + /* rings _must_ be initialized in this _exact_ order! */ RAL_WRITE(sc, RAL_TXCSR2, tmp); RAL_WRITE(sc, RAL_TXCSR3, sc->txq.physaddr); - RAL_WRITE(sc, RAL_TXCSR4, sc->atimq.physaddr); RAL_WRITE(sc, RAL_TXCSR5, sc->prioq.physaddr); + RAL_WRITE(sc, RAL_TXCSR4, sc->atimq.physaddr); RAL_WRITE(sc, RAL_TXCSR6, sc->bcnq.physaddr); /* setup rx ring */ |