Libetas can not reload modules
dcbw at redhat.com
Tue Jun 16 15:45:40 EDT 2009
On Tue, 2009-06-16 at 01:03 +0800, Dongas wrote:
> 2009/6/15 Jonathan Cameron <jic23 at cam.ac.uk>:
> >> 2009/6/13 Jonathan Cameron <jic23 at cam.ac.uk>:
> >>> Dongas wrote:
> >>>> Dear ALL,
> >>>> The issue i encounterred is that libertas modules can not be reloaed.
> >>>> (It works well when i first insmod them)
> >>>> I want to rmmod them and do the re-insmod, but the error message is
> >>>> shown as follows:
> >>>> # insmod libertas_sdio.ko
> >>>> libertas_sdio: Libertas SDIO driver
> >>>> libertas_sdio: Copyright Pierre Ossman
> >>>> ……
> >>>> libertas: failed to load helper firmware
> >>>> libertas leave: if_sdio_prog_helper(), ret -110
> >>>> After digging in the code, i found that the libertas driver will check
> >>>> IF_SDIO_IO_RDY and IF_SDIO_DL_RDY bit in IF_SDIO_STATUS register for
> >>>> the firmware downloading(CMD53 write) operation.
> >>>> However, the SDIO status read back of mine card indicated that the
> >>>> card IF_SDIO_DL_RDY bit was alway not set during the module reload
> >>>> operation.Then the timeout happened with '-ETIMEDOUT' returned.
> >>>> Is there any body know why?
> >>> This turns up on the mailing list from time to time.
> >>> I think the firmware still still doesn't play ball.
> >> Jonathan , thanks for your reply.
> >> (I havn't searched out many related mails failed by this issue in the maillist.)
> >> Could you please clarify a bit more?
> > I think the last discussion about this was the one following on from...
> > http://lists.infradead.org/pipermail/libertas-dev/2008-September/001928.html
> >> Why the firmware still still doesn't play ball?
> > Don't know. Unfortunately I wasn't in a position to run Marvell's driver and find
> > out whether their reset code actually works, but we never managed to replicate it
> > using the in kernel code.
> >> Is there any way to fix this issue?
> > We never really managed to isolate the cause I'm afraid.
> I also tried two methods in the thread you mentioned, a)
> enable/disable function and b) CMD_802_11_RESET command, but they
> didn't work as you experienced.
> From the discussion in that thread, it seems this issue has some
> relationship with HW errata of Marvell WiFi chip , right?
> I wonder did you find a work around solution for this issue at last?
> Since i'm using libertas driver in kernel 2.6.25, i'd also like to
> know if this issue still exists in kernel 2.6.29?
It probably does. If you're using an embedded system, you might be able
to hook up a GPIO to kill power to the card like the OLPC USB driver
does. But at this time, there is no known way of fully resetting the
device other than cutting power to the 8686/8688 device.
We'd need some insight into the firmware and bus-level stuff to figure
out why the card doesn't reset itself from CMD_802_11_RESET. Maybe we
should investigate that again; the v10 docs still say CMD_802_11_RESET
is the correct method to return the card to a clean state.
The sd8688 has additional commands that could also help here, Bing Zhao
has been adding support for those to 2.6.31 and later. But I assume
you're using 8686 and thus those commands aren't supported.
More information about the libertas-dev