SDIO stability [was Re: SDIO Performance once again]

Sven Neumann s.neumann at phase-zero.de
Tue Feb 10 12:41:03 EST 2009


Hi,

On Tue, 2009-02-10 at 10:41 -0500, Dan Williams wrote:
> On Tue, 2009-02-10 at 16:26 +0100, Sven Neumann wrote:
> > Hi,
> > 
> > On Tue, 2009-02-10 at 10:14 -0500, Dan Williams wrote:
> > 
> > > You'd see error messages and MMC/SD host register dumps if stuff starts
> > > going wrong.  If you don't see anything that looks suspicious, then it
> > > may not be the host controller.
> > 
> > I guess we can rule that out then as I don't see anything suspicious in
> > the MMC debug output. I could still try if I can get the SD card slot to
> > work in order to stress test the SDIO layer some more. But to me it
> > looks like the problem is more likely in the libertas module. How would
> > I go about increasing the command timeouts?
> 
> cmd.c, lbs_submit_command(), the "timeo" variable.  Might as well double
> the values (it uses 3 by default, but 5 for ASSOC and SCAN).

Difficult to tell if this helped or not. I had the impression that the
driver lasted a little longer with the increased timeouts. But in the
end it failed to fetch a packet and stopped working...

I have enabled some debug output in the driver now (ENTER, LEAVE, MAIN,
HOST, CMD, SDIO). Here's the (hopefully) relevant snippet from the log
file. The first interrupt is handled correctly, then there's an error
thrown from if_sdio_read_scratch():

user.debug kernel: libertas sdio: interrupt: 0x1
user.debug kernel: libertas enter: if_sdio_card_to_host()
user.debug kernel: libertas enter: if_sdio_host_to_card_worker()
user.debug kernel: libertas sdio: packet of type 0 and size 98 bytes
user.debug kernel: libertas enter: if_sdio_handle_data()
user.debug kernel: libertas leave: if_sdio_card_to_host(), ret 0
user.debug kernel: libertas leave: if_sdio_host_to_card_worker()
user.debug kernel: libertas enter: if_sdio_interrupt()
user.debug kernel: libertas leave: if_sdio_interrupt(), ret 0
user.debug kernel: libertas enter: if_sdio_host_to_card(type 0, bytes 1538)
user.debug kernel: libertas enter: if_sdio_host_to_card_worker()
user.debug kernel: libertas leave: if_sdio_host_to_card_worker()
user.debug kernel: libertas enter: if_sdio_interrupt()
user.debug kernel: libertas leave: if_sdio_interrupt(), ret 0
user.debug kernel: libertas leave: if_sdio_host_to_card(), ret 0
user.debug kernel: libertas enter: if_sdio_host_to_card_worker()
user.debug kernel: libertas leave: if_sdio_host_to_card_worker()
user.debug kernel: libertas sdio: interrupt: 0x1
user.debug kernel: libertas enter: if_sdio_card_to_host()
user.err kernel: libertas: problem fetching packet from firmware
user.debug kernel: libertas leave: if_sdio_interrupt(), ret -110
user.debug kernel: libertas sdio: interrupt: 0x2
user.debug kernel: libertas leave: if_sdio_interrupt(), ret 0
user.debug kernel: libertas enter: if_sdio_host_to_card(type 0, bytes 1538)
user.debug kernel: libertas leave: if_sdio_host_to_card(), ret 0
user.debug kernel: libertas enter: if_sdio_host_to_card_worker()
user.debug kernel: libertas leave: if_sdio_host_to_card_worker()
user.debug kernel: libertas enter: if_sdio_interrupt()


Any ideas, anyone?

Sven





More information about the libertas-dev mailing list