summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Bergamini <damien@cvs.openbsd.org>2005-04-02 08:48:16 +0000
committerDamien Bergamini <damien@cvs.openbsd.org>2005-04-02 08:48:16 +0000
commit89975c69fbe41c789ccf48ff29a8048b681eb3e4 (patch)
treeca62285734fa2fccf8b310ece97fc9bf64dadd92
parentb1fc6c5ae5729dfc1bdc6059456f110f51eef44c (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.c5
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 */