Winbond W83L528G-A SDIO controller support

Shawn Rutledge shawn.t.rutledge at gmail.com
Fri Feb 6 12:30:57 EST 2009


I tried adding most of the existing "quirks" in various combinations, like

static const struct sdhci_pci_fixes sdhci_winbond = {
	.quirks		= SDHCI_QUIRK_SINGLE_POWER_WRITE |
			  SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS |
			  SDHCI_QUIRK_BROKEN_DMA,
};

It didn't change the short-term behavior at all, as far as I can tell:
the Marvell SDIO WLAN card works fine most of the time, and sometimes
there are timeouts.  However if I use a flash memory card it doesn't
work at all.

With the quirks as shown above, I left it running a script which will
iwlist scan, find a different ad-hoc peer than the last one chosen,
connect in ad-hoc mode, ifconfig the IP address and do 3 pings, in an
infinite loop.  (When it's working, the 3 pings get responses.)  This
morning the script had hung (I'm guessing iwconfig hung, maybe while
trying to set the ESSID), and dmesg has this:

<7>sdhci [sdhci_irq()]: *** mmc1 got interrupt: 0x0000000b
<7>mmc1: req done (CMD53): 0: 00002000 00000000 00000000 00000000
<7>mmc1:     20 bytes transferred: 0
<0>------------[ cut here ]------------
<2>Kernel BUG at f8b380a5 [verbose debug info unavailable]
<0>invalid opcode: 0000 [#1] PREEMPT
<0>last sysfs file: /sys/devices/pci0000:00/0000:00:1d.0/modalias
<4>Modules linked in: libertas_sdio libertas firmware_class mmc_block
sdhci_pci sdhci mmc_core snd_mixer_oss evdev snd_pcm snd_timer snd
soundcore snd_page_alloc fat loop net2280 usb_storage cdc_acm usblp
pciehp pci_hotplug ieee80211_crypt_wep ieee80211_crypt_ccmp ieee80211
ieee80211_crypt xfrm6_mode_tunnel xfrm6_mode_transport xfrm6_tunnel
ip6_tunnel ah6 esp6 tunnel6 tcp_veno xfrm4_mode_transport tcp_vegas
tcp_cubic tcp_westwood tcp_scalable xfrm4_mode_tunnel ah4 tcp_diag
inet_diag esp4 xfrm4_tunnel tcp_highspeed ip_gre tcp_hybla tcp_htcp
tcp_lp deflate md5 zlib_deflate zlib_inflate crc16 crc_ccitt libcrc32c
nls_cp437 nls_ascii nls_base ipv6 usbhid ECDrv [last unloaded:
mmc_core]
<4>
<4>Pid: 18358, comm: ksdioirqd/mmc1 Not tainted (2.6.28.1 #1) Alviso &
ICH6M Chipset
<4>EIP: 0060:[<f8b380a5>] EFLAGS: 00010006 CPU: 0
<4>EAX: ee4a2000 EBX: 00000010 ECX: ee41c380 EDX: 00000000
<4>ESI: ee41c380 EDI: 00000014 EBP: 00000283 ESP: ee4a3f80
<4> DS: 007b ES: 007b FS: 0000 GS: 0000 SS: 0068
<0>Process ksdioirqd/mmc1 (pid: 18358, ti=ee4a2000 task=f78ffb00
task.ti=ee4a2000)
<0>Stack:
<4> f3ce0000 ee41c380 00000001 00000000 00000000 00000000 00000000 ee474800
<0> f7b3c000 f8cb6b48 ee4749bc f7b3c090 ee474890 7fffffff 00000001 00000001
<0> 00000001 02000000 ee474800 f8cb6a4a 00000000 00000000 c0126131 c01260fb
<0>Call Trace:
<0> [<f8cb6b48>] 0xf8cb6b48
<0> [<f8cb6a4a>] 0xf8cb6a4a
<0> [<c0126131>] 0xc0126131
<0> [<c01260fb>] 0xc01260fb
<0> [<c0103927>] 0xc0103927
<0>Code: c4 0c eb 7f 9c 5d fa 89 e0 25 00 e0 ff ff ff 40 14 8b 74 24
04 31 d2 80 be 40 0b 00 00 00 0f 94 c2 83 bc 96 54 1d 00 00 00 74 04
<0f> 0b eb fe 8b 44 24 04 89 9c 90 54 1d 00 00 89 d9 c1 e9 02 69
<0>EIP: [<f8b380a5>]  SS:ESP 0068:ee4a3f80
<4>---[ end trace f311adf51c8845e1 ]---
<6>note: ksdioirqd/mmc1[18358] exited with preempt_count 1
<6>libertas: command 0x001f timed out
<6>libertas: requeueing command 0x001f due to timeout (#1)
<6>libertas: command 0x001f timed out
<6>libertas: requeueing command 0x001f due to timeout (#2)
<6>libertas: command 0x001f timed out
<6>libertas: requeueing command 0x001f due to timeout (#3)
<4>------------[ cut here ]------------
<4>WARNING: at net/sched/sch_generic.c:226 ()
<6>NETDEV WATCHDOG: eth1 (libertas_sdio): transmit timed out
<4>Modules linked in: libertas_sdio libertas firmware_class mmc_block
sdhci_pci sdhci mmc_core snd_mixer_oss evdev snd_pcm snd_timer snd
soundcore snd_page_alloc fat loop net2280 usb_storage cdc_acm usblp
pciehp pci_hotplug ieee80211_crypt_wep ieee80211_crypt_ccmp ieee80211
ieee80211_crypt xfrm6_mode_tunnel xfrm6_mode_transport xfrm6_tunnel
ip6_tunnel ah6 esp6 tunnel6 tcp_veno xfrm4_mode_transport tcp_vegas
tcp_cubic tcp_westwood tcp_scalable xfrm4_mode_tunnel ah4 tcp_diag
inet_diag esp4 xfrm4_tunnel tcp_highspeed ip_gre tcp_hybla tcp_htcp
tcp_lp deflate md5 zlib_deflate zlib_inflate crc16 crc_ccitt libcrc32c
nls_cp437 nls_ascii nls_base ipv6 usbhid ECDrv [last unloaded:
mmc_core]
<4>Pid: 0, comm: swapper Tainted: G      D    2.6.28.1 #1
<4>Call Trace:
<4> [<c0117822>] 0xc0117822
<4> [<c0113c8a>] 0xc0113c8a
<4> [<c0113355>] 0xc0113355
<4> [<c01133e5>] 0xc01133e5
<4> [<c0106e00>] 0xc0106e00
<4> [<c012aa3e>] 0xc012aa3e
<4> [<c0106e00>] 0xc0106e00
<4> [<c012aa3e>] 0xc012aa3e
<4> [<c010df97>] 0xc010df97
<4> [<c012c98a>] 0xc012c98a
<4> [<c026772d>] 0xc026772d
<4> [<c012d6f7>] 0xc012d6f7
<4> [<c012a8b8>] 0xc012a8b8
<4> [<c0106e00>] 0xc0106e00
<4> [<c01bf8c8>] 0xc01bf8c8
<4> [<c012aa3e>] 0xc012aa3e
<4> [<c02a3425>] 0xc02a3425
<4> [<c0106e00>] 0xc0106e00
<4> [<c012aa3e>] 0xc012aa3e
<4> [<c010df97>] 0xc010df97
<4> [<c012c98a>] 0xc012c98a
<4> [<c011e580>] 0xc011e580
<4> [<c011b10c>] 0xc011b10c
<4> [<c011b1a0>] 0xc011b1a0
<4> [<c011b38b>] 0xc011b38b
<4> [<c010e607>] 0xc010e607
<4> [<c010380c>] 0xc010380c
<4> [<c0107a69>] 0xc0107a69
<4> [<c0101a28>] 0xc0101a28
<4>---[ end trace f311adf51c8845e1 ]---
<3>libertas: tx watch dog timeout
<6>libertas: command 0x001f timed out
<6>libertas: Excessive timeouts submitting command 0x001f
<7>eth1: no IPv6 routers present
<3>libertas: tx watch dog timeout
<6>libertas: command 0x0010 timed out
<6>libertas: requeueing command 0x0010 due to timeout (#1)
<6>libertas: command 0x0010 timed out
<6>libertas: requeueing command 0x0010 due to timeout (#2)
<3>BUG: scheduling while atomic: iwconfig/29300/0x00000002
<4>Modules linked in: libertas_sdio libertas firmware_class mmc_block
sdhci_pci sdhci mmc_core snd_mixer_oss evdev snd_pcm snd_timer snd
soundcore snd_page_alloc fat loop net2280 usb_storage cdc_acm usblp
pciehp pci_hotplug ieee80211_crypt_wep ieee80211_crypt_ccmp ieee80211
ieee80211_crypt xfrm6_mode_tunnel xfrm6_mode_transport xfrm6_tunnel
ip6_tunnel ah6 esp6 tunnel6 tcp_veno xfrm4_mode_transport tcp_vegas
tcp_cubic tcp_westwood tcp_scalable xfrm4_mode_tunnel ah4 tcp_diag
inet_diag esp4 xfrm4_tunnel tcp_highspeed ip_gre tcp_hybla tcp_htcp
tcp_lp deflate md5 zlib_deflate zlib_inflate crc16 crc_ccitt libcrc32c
nls_cp437 nls_ascii nls_base ipv6 usbhid ECDrv [last unloaded:
mmc_core]
<4>Pid: 29300, comm: iwconfig Tainted: G      D W  2.6.28.1 #1
<4>Call Trace:
<4> [<c0303a41>] 0xc0303a41
<4> [<f8b92d5c>] 0xf8b92d5c
<4> [<c01261e6>] 0xc01261e6
<4> [<f8b8f650>] 0xf8b8f650
<4> [<f8b93e92>] 0xf8b93e92
<4> [<c02e5683>] 0xc02e5683
<4> [<c02e6077>] 0xc02e6077
<4> [<c0168b81>] 0xc0168b81
<4> [<c016899a>] 0xc016899a
<4> [<c017f055>] 0xc017f055
<4> [<c017efd9>] 0xc017efd9
<4> [<c015662a>] 0xc015662a
<4> [<c01568fe>] 0xc01568fe
<4> [<c0102d1a>] 0xc0102d1a
<6>libertas: command 0x0010 timed out
<6>libertas: requeueing command 0x0010 due to timeout (#3)
<6>libertas: command 0x0010 timed out
<6>libertas: Excessive timeouts submitting command 0x0010

First time I've seen that type type of bug.  (The timeouts happen
often enough though.)

I spent some time reading the SD specs yesterday but not enough
reading the driver source yet.  I could still use some help from
anyone to troubleshoot the typical timeouts that are occurring.  Maybe
it's better to start with the memory card, because that failure is
100% reproduceable, but my end goal is for SDIO to be reliable.

I'm on the IRC channel #libertas if anybody has any clues.



More information about the libertas-dev mailing list