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 | |
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!
-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 */ |