Kernel freeze while firmware helper loading
Dan Williams
dcbw at redhat.com
Thu Dec 4 12:48:04 EST 2008
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:
Dan
More information about the libertas-dev
mailing list