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