SDIO stability [was Re: SDIO Performance once again]

Dan Williams dcbw at redhat.com
Tue Feb 10 15:24:42 EST 2009


On Tue, 2009-02-10 at 18:41 +0100, Sven Neumann wrote:
> 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

^^^ this is interesting

can you add some debugging prints (just using "printk(KERN_INFO...") to
if_sdio_card_to_host() in if_sdio.c to figure out what's making 'ret' be
non-zero at function exit?

dan

> 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
> 
> 
> 
> _______________________________________________
> libertas-dev mailing list
> libertas-dev at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/libertas-dev




More information about the libertas-dev mailing list