libertas sdio on bf548 w/ uclinux
Dan Williams
dcbw at redhat.com
Tue Apr 22 14:28:36 EDT 2008
On Tue, 2008-04-22 at 13:04 -0500, Nick Moszer wrote:
> As a follow up to this, here is the libertas debug info right before it
> bombs.
Probably need to get Pierre's input here... I'm not sure how the SDIO
stack is supposed to interact with controllers that have certain
padding/alignment constraints.
Pierre?
Dan
> .......
> libertas thread: sending 512 bytes (512 bytes)
> chunk
> libertas thread: firmware wants 16
> bytes
> libertas thread: sending 16 bytes (32 bytes)
> chunk
> libertas thread: firmware wants 512
> bytes
> libertas thread: sending 512 bytes (512 bytes)
> chunk
> libertas thread: firmware wants 16
> bytes
> libertas thread: sending 16 bytes (32 bytes)
> chunk
> libertas thread: firmware wants 512
> bytes
> libertas thread: sending 512 bytes (512 bytes)
> chunk
> libertas thread: firmware wants 16
> bytes
> libertas thread: sending 16 bytes (32 bytes)
> chunk
> libertas thread: firmware wants 512
> bytes
> libertas thread: sending 512 bytes (512 bytes)
> chunk
> libertas thread: firmware wants 16
> bytes
> libertas thread: sending 16 bytes (32 bytes)
> chunk
> libertas thread: firmware wants 512
> bytes
> libertas thread: sending 512 bytes (512 bytes)
> chunk
> libertas thread: firmware wants 16
> bytes
> libertas thread: sending 16 bytes (32 bytes)
> chunk
> libertas thread: firmware wants 96
> bytes
> libertas thread: sending 96 bytes (96 bytes)
> chunk
> libertas thread: firmware wants 16
> bytes
> libertas thread: sending 16 bytes (32 bytes)
> chunk
> libertas thread: waiting for firmware to
> boot...
> libertas leave: if_sdio_prog_real():689, ret
> 0
> libertas leave: if_sdio_prog_firmware():725, ret
> 0
> libertas enter:
> libertas_allocate_cmd_buffer():1460
> libertas enter:
> cleanup_cmdnode():1585
> libertas leave:
> cleanup_cmdnode():1599
> libertas enter:
> cleanup_cmdnode():1585
> libertas leave:
> cleanup_cmdnode():1599
> libertas enter:
> cleanup_cmdnode():1585
> libertas leave:
> cleanup_cmdnode():1599
> libertas enter:
> cleanup_cmdnode():1585
> libertas leave:
> cleanup_cmdnode():1599
> libertas enter:
> cleanup_cmdnode():1585
> libertas leave:
> cleanup_cmdnode():1599
> libertas enter:
> cleanup_cmdnode():1585
> libertas leave:
> cleanup_cmdnode():1599
> libertas enter:
> cleanup_cmdnode():1585
> libertas leave:
> cleanup_cmdnode():1599
> libertas enter:
> cleanup_cmdnode():1585
> libertas leave:
> cleanup_cmdnode():1599
> libertas enter:
> cleanup_cmdnode():1585
> libertas leave:
> cleanup_cmdnode():1599
> libertas enter:
> cleanup_cmdnode():1585
> libertas leave:
> cleanup_cmdnode():1599
> libertas leave: libertas_allocate_cmd_buffer():1493, ret
> 0
> libertas enter:
> libertas_start_card():1255
> libertas enter:
> wlan_setup_firmware():930
> libertas enter:
> libertas_prepare_and_send_command():1137
> libertas enter:
> libertas_get_free_cmd_ctrl_node():1553
> libertas enter:
> cleanup_cmdnode():1585
> libertas leave:
> cleanup_cmdnode():1599
> libertas leave:
> libertas_get_free_cmd_ctrl_node():1573
> libertas enter:
> libertas_set_cmd_ctrl_node():1616
> libertas leave:
> libertas_set_cmd_ctrl_node():1625
> libertas host: PREP_CMD: command
> 0x0003
> libertas enter:
> wlan_cmd_hw_spec():44
> libertas leave:
> wlan_cmd_hw_spec():50
> libertas enter:
> libertas_queue_cmd():924
> libertas host: QUEUE_CMD: inserted command 0x0003 into
> cmdpendingq
> libertas leave:
> libertas_queue_cmd():961
> libertas host: PREP_CMD: wait for
> response
> libertas host: EXEC_NEXT_CMD: sending command
> 0x0003
> libertas enter:
> DownloadcommandToStation():981
> libertas host: DNLD_CMD: command 0x0003, size 46, jiffies
> 4294908268
> libertas enter: if_sdio_host_to_card(type 1, bytes
> 46):742
> libertas leave: if_sdio_host_to_card():831, ret
> 0
> libertas cmd: DNLD_CMD: sent command 0x0003, jiffies
> 4294908271
> libertas leave: DownloadcommandToStation():1037, ret
> 0
> libertas enter:
> if_sdio_host_to_card_worker():390
> BUG: failure at
> drivers/mmc/host/bfin_sdh.c:122/sdh_setup_data()!
> Kernel panic - not syncing: BUG!
>
> So it appears it is getting past the full firmware load.
>
>
> Nick Moszer wrote:
> > The scripts seem to solve that problem. Thanks!
> > I was wondering if you guys know what is typical for block sizes when
> > loading the firmware.
> > I am able to load the helper firmware just fine, once I get to the main
> > firmware a little debug shows:
> >
> > (a whole mess of alternating 1, 16 block numbers like below)
> > sdh_setup_data enter flags:0x100 numblocks:1
> > blksize:32
> > sdh_setup_data enter flags:0x100 numblocks:16
> > blksize:32
> > sdh_setup_data enter flags:0x100 numblocks:1
> > blksize:32
> > sdh_setup_data enter flags:0x100 numblocks:16
> > blksize:32
> > sdh_setup_data enter flags:0x100 numblocks:1
> > blksize:32
> > sdh_setup_data enter flags:0x100 numblocks:3
> > blksize:32
> > sdh_setup_data enter flags:0x100 numblocks:1
> > blksize:32
> > sdh_setup_data enter flags:0x100 numblocks:1 blksize:52
> >
> > Then the oddball at the end. It was 50 until I added the "round to a
> > multiple of 4" code in if_sdio.c.
> > My host controller driver does not like anything that isn't a power of 2.
> > Meaning they wrote the driver on this blackfin so that anything not a
> > power of 2 will call BUG_ON and cause a panic.
> >
> > Is this normal behavior for the block size to change when loading like
> > that?
> >
> > Thanks!
> >
> >
> > Dan Williams wrote:
> >
> >> On Mon, 2008-04-14 at 22:17 +0200, Julien Boibessot wrote:
> >>
> >>
> >>> Dan Williams a écrit :
> >>>
> >>>
> >>>> That's all handled by udev these days on most systems, unfortunately I'm
> >>>> not so up-to-date on the details of udev. Might be best to ask around
> >>>> the udev lists. Do you have any other drivers in your kernel that use
> >>>> request_firmware(), and do they work?
> >>>>
> >>>>
> >>>>
> >>> On my ARM9 system, with a Buildroot made Rootfs (without udev),
> >>> following script is working to load helper firmware (save it as
> >>> /sbin/hotplug):
> >>>
> >>> #!/bin/sh
> >>> if [ "$FIRMWARE" != "" ]; then
> >>> HOTPLUG_FW_DIR=/lib/firmware/
> >>> echo 1 > /sys/$DEVPATH/loading
> >>> cat $HOTPLUG_FW_DIR/$FIRMWARE > /sys/$DEVPATH/data
> >>> echo 0 > /sys/$DEVPATH/loading
> >>> fi
> >>>
> >>>
> >>> If it can help...
> >>>
> >>>
> >> Most likely yes, since there are cases where you don't want the
> >> complexity that udev drags along :)
> >>
> >> Thanks,
> >> Dan
> >>
> >>
> >>
> >> _______________________________________________
> >> libertas-dev mailing list
> >> libertas-dev at lists.infradead.org
> >> http://lists.infradead.org/mailman/listinfo/libertas-dev
> >>
> >>
> >
> >
> >
> >
> > _______________________________________________
> > 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