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