Date: Sat, 10 Jan 2004 15:11:04 +0100 From: Marko Zec <zec@tel.fer.hr> To: Lorenzo Vicisano <lorenzo@vicisano.net>, freebsd-mobile@freebsd.org Cc: freebsd-net@freebsd.org Subject: Re: prism 2.5 timeout in wi_cmd 0x010b Message-ID: <200401101511.04672.zec@tel.fer.hr> In-Reply-To: <20040109184349.A12711@cisco.com> References: <20040109184349.A12711@cisco.com>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
Hi Lorenzo,
can you try the attached patch, it does seem to help on my ThinkPad X30,
which has an internal mini-PCI Prism2.5 card with the same firmware.
Cheers,
Marko
On Saturday 10 January 2004 03:43, Lorenzo Vicisano wrote:
> Hi,
>
> This is the context:
>
> - Stable as of Jan 9 (FreeBSD 4.9-STABLE #14: Fri Jan 9 15:04:16
> PST 2004) The problem was present since Dec 22.. at least.
>
> - Linksys PCI WMP11/Prism:
>
> wi0: <Intersil Prism2.5> mem 0xf8a02000-0xf8a02fff irq 5 at device
> 11.0 on pci2 wi0: 802.11 address: 00:06:25:09:a7:8f
> wi0: using RF:PRISM2.5 MAC:ISL3874A(Mini-PCI)
> wi0: Intersil Firmware: Primary 1.01.00, Station 1.04.02
>
> acting as a client. The AP is a DLink 614+ (I've tried various
> versions of the firmware).
>
> - High volume of transmitted traffic (ftp-ed a few MBs within the
> WLAN). Either towards the AP or towards other clients (E.g.
> AN350).
>
> And this is the symptom:
>
> wi0: timeout in wi_cmd 0x010b; event status 0x0000
> wi0: xmit failed
>
> after this the NIC is dead.
> Sometimes the box freezes for a few seconds, sometimes it doesn't.
> Most of the times the NIC doesn't resume unless it brought up/down
> (ifconfig down/up).
>
> More messages (after the NIC stops working):
>
> wi0: watchdog timeout
> wi0: timeout in wi_cmd 0x0002; event status 0x0000
> wi0: wi_cmd: busy bit won't clear.
> wi0: wi_cmd: busy bit won't clear.
> wi0: wi_cmd: busy bit won't clear.
> wi0: init failed
> wi0: watchdog timeout
>
> Complete log attached. I'm able to reproduce this consistently ;(
> I can do some debugging and provide more info, if needed.
>
> thanks,
> Lorenzo
[-- Attachment #2 --]
--- if_wi.c.orig Wed Jan 7 15:55:18 2004
+++ if_wi.c Wed Jan 7 16:38:37 2004
@@ -1016,9 +1016,11 @@ wi_cmd(sc, cmd, val0, val1, val2)
* set in the event status register.
*/
s = CSR_READ_2(sc, WI_EVENT_STAT);
+ DELAY(1);
if (s & WI_EV_CMD) {
/* Ack the event and read result code. */
s = CSR_READ_2(sc, WI_STATUS);
+ DELAY(1);
CSR_WRITE_2(sc, WI_EVENT_ACK, WI_EV_CMD);
#ifdef foo
if ((s & WI_CMD_CODE_MASK) != (cmd & WI_CMD_CODE_MASK))
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200401101511.04672.zec>
