Kernel freeze while firmware helper loading

Dan Williams dcbw at redhat.com
Thu Dec 4 12:49:08 EST 2008


On Thu, 2008-12-04 at 12:48 -0500, Dan Williams wrote:
> On Thu, 2008-12-04 at 17:59 +0100, Cyril HAENEL wrote:
> > Hi all,
> > 
> > I have a small problem and I don't know from where it can come from.
> > I work on a AT91SAM9260 processor based custom board (arm9), with kernel 
> > 2.6.27 and associated patches.
> > I activated the compact flash libertas driver, and the wifi board is 
> > correctly detected at boot up.
> > 
> > But when I try to load the firmware_helper the kernel freeze after some 
> > calls to the ioread8() function. I put some debug messages in if_cs.c to 
> > locate exactly the problem.
> > 
> > Kernel messages at boot up :
> > 
> > [...]
> > at91_cf: irqs det #64, io #81
> > [...]
> > pccard: PCMCIA card inserted into slot 0
> > pcmcia: registering new device pcmcia0.0
> > [...]
> > firmware: requesting libertas_cs_helper.fw
> > [...]
> > 
> > Atfer I try to load the firmware helper :
> > 
> > echo 1 > /sys/class/firmware/0.0/loading
> > cat libertas_cs_helper.fw > /sys/class/firmware/0.0/data
> > echo 0 > /sys/class/firmware/0.0/loading
> > 
> > And I have :
> > 
> > cyril : firmware is in memory (2132 bytes), going to load it
> > 
> > cyril : sending 256 byte
> > begin write 16
> > outw 00000018>0100
> > end write 16
> > begin write 16 rep
> > outsw 0000001a>(0x80 words)
> > end write 16 rep
> > begin write 8
> > outb 00000000>04
> > end write 8
> > begin write 16
> > outw 00000002>0004
> > end write 16
> > cyril : 1 bytes sent, going to poll status register
> > begin read 8
> > inb 00000020<04
> > end read 8
> > 
> > [1, 2, 3 times, sometime more]
> > 
> > cyril : sending 256 byte
> > begin write 16
> > outw 00000018>0100
> > end write 16
> > begin write 16 rep
> > outsw 0000001a>(0x80 words)
> > end write 16 rep
> > begin write 8
> > outb 00000000>04
> > end write 8
> > begin write 16
> > outw 00000002>0004
> > end write 16
> > cyril : 1 bytes sent, going to poll status register
> > begin read 8
> > 
> > The kernel freeze here, when it call the ioread8(card->iobase + reg) 
> > function, in if_cs_read8() function.
> > 
> > Any idea of where can come from this freeze ?
> 
> Could be the controller, the card, anything actually.  How are you
> grabbing the debug output, via serial line or something?  Also, is it a
> real freeze or a panic?  If you can do sysrq, maybe we can get a
> stacktrace or something, but sysrq might well be x86 only.
> 
> It looks like on ARM that ioread8() decomposes down to a direct memory
> access:

#define __raw_readb(a)          (__chk_io_ptr(a), *(volatile unsigned char __force  *)(a))

if I traced it down correctly.  Any chance you can check the hardware
state of the host machine and see if some exception or interrupt
occurred?

Dan




More information about the libertas-dev mailing list