summaryrefslogtreecommitdiff
path: root/sys/dev/ic
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 /sys/dev/ic
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!
Diffstat (limited to 'sys/dev/ic')
-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 */