[Letux-kernel] [Gta04-owner] no wifi today (cannot load helper firmware)

Andreas Kemnade andreas at kemnade.info
Thu May 5 19:02:13 CEST 2016


On Mon, 2016-04-25 at 00:04 +0200, Andreas Kemnade wrote: 
> Hi,
> 
> On Sun, 24 Apr 2016 11:56:26 +0200
> "H. Nikolaus Schaller" <hns at goldelico.com> wrote:
> 
> > Hi,
> > 
> > > Am 23.04.2016 um 21:26 schrieb Andreas Kemnade <andreas at kemnade.info>:
> > > 
> > > Hi,
> > > 
> > > today my wifi fails. Does not matter which partition I boot from.
> > 
> > :(
> > 
> I even tried the last production image on a new sd:
> export SERVER=http://download.goldelico.com/gta04/20140521-GTA04-Production-3.12.7-wheezy-7.5/
> DEV=/dev/sdb ./makesd
> 
> on a fresh sd
> So no 3.7, no 3.12.7, no 4.5, no 4.6rc4 works.
> Having it unpowered for some hours does not help.
> 
> > > It does even work on partitions I do no experiments with.
> > > It does not work with the 3.7 kernel.
> > > 
> > > Bluetooth works.
> > > 
> > > [  672.540863] libertas_sdio: failed to load helper firmware                    
> > > [  672.548522] libertas_sdio: probe of mmc1:0001:1 failed with error -84
> > > 
> > > I have seen this -84 somewhere...
> > > EILSEQ
> > 
> > http://lxr.free-electrons.com/source/include/uapi/asm-generic/errno.h#L66
> > 
> > Hm. Illegal byte sequence... Strange.
> > 
> > > 
> > > EILSEQ=EILLPHONE?
> > > 
> > > Does anyone else have this error and recovered from it?
> > > Is it some funny race condition popping up only at some phases of the moon?
> > 
> > Yes. And especially in April.
> > 
> I analyzed various timestamps and logs.
> I had the problem once between Apr 1 and Apr 11.
> But then it was only with one kernel. I just reverted the change I made
> and everything was fine.
> 
> Last known time it works was on Apr 18. 
> 
> > > @hns: If I remember correctly you had this error with some 4.x? Did you recover
> > > from it?
> > 
> > I have not checked for a while.
> > 
> > The worst thing could be that there was something broken in SDIO firmware download
> > for a while which allowed to execute dangerous code in the WiFi controller (it has its
> > own ARM subsystem) and has damaged it so that it now fails with any kernel or setup.
> > 
> The worst thing would be some damaged pads at the Wifi chip.
> Or the DM3730... But I do not notice any obvious other problems...
> 
> > But let's assume the best case...
> > 
> > As far as I can see the important occurrences of EILSEQ in WiFi related code are here:
> > 
> > http://lxr.free-electrons.com/source/net/wireless/util.c#L1194
> > http://lxr.free-electrons.com/source/drivers/net/wireless/marvell/libertas/cfg.c#L503
> > http://lxr.free-electrons.com/source/drivers/mmc/host/mmc_spi.c#L262 (but I think we don't use mmc-spi)
> > 
> Interesting is also EILSEQ 
> in omap_hsmmc.c.
> 
> I tried also with libertas_tf.
> 
Hmm, I tried letux-4.6rc6.
No changes.
I tried to change the bus width to 1bit via dtb.
Now I get further:
[  320.668182] libertas leave: __lbs_cleanup_and_insert_cmd()
[  320.674926] libertas enter: __lbs_cleanup_and_insert_cmd()
[  320.680725] libertas leave: __lbs_cleanup_and_insert_cmd()
[  320.687469] libertas leave: lbs_allocate_cmd_buffer(), ret 0
[  320.693634] libertas leave: lbs_init_adapter(), ret 0
[  320.699920] libertas thread: Starting main thread...
[  320.708709] libertas enter: lbs_thread()
[  320.713165] libertas thread: 1: currenttxskb   (null), dnld_sent 0
[  320.720611] libertas thread: sleeping, connect_status 1, psmode 0,
psstate 0
[  320.728240] libertas leave: lbs_add_card(), priv dd540600
[  320.735382] libertas enter: if_sdio_prog_firmware()
[  320.740997] libertas sdio: firmware status = 0x0
[  320.746643] libertas sdio: scratch ret = 0
[  320.750976] libertas fw: Starting async firmware load
[  320.757080] libertas fw: Requesting libertas/sd8686_v9_helper.bin
[  320.763702] libertas leave: if_sdio_prog_firmware(), ret 0
[  320.770294] libertas leave: if_sdio_probe(), ret 0
[  320.779510] libertas fw: Requesting libertas/sd8686_v9.bin
[  320.787231] libertas fw: firmware load complete, code 0
[  320.792999] libertas enter: if_sdio_prog_helper()
[  320.894561] libertas sdio: waiting for helper to boot...
[  320.900482] libertas leave: if_sdio_prog_helper(), ret 0
[  320.907012] libertas sdio: Helper firmware loaded
[  320.912170] libertas enter: if_sdio_prog_real()
[  321.251220] libertas sdio: waiting for firmware to boot...
[  321.338592] libertas leave: if_sdio_prog_real(), ret 0
[  321.349517] libertas sdio: Firmware loaded
[  321.371093] libertas enter: lbs_start_card()
[  321.375610] libertas enter: lbs_setup_firmware()
[  321.389312] libertas enter: lbs_update_hw_spec()
[  321.394409] libertas enter: __lbs_cmd()
[  321.399505] libertas enter: __lbs_cmd_async()
[  321.404296] libertas enter: lbs_get_free_cmd_node()
[  321.410614] libertas leave: lbs_get_free_cmd_node()
[  321.415924] libertas host: PREP_CMD: command 0x0003
[  321.421997] libertas enter: lbs_queue_cmd()
[  321.427307] libertas host: QUEUE_CMD: inserted command 0x0003 into
cmdpendingq
[  321.435028] libertas leave: lbs_queue_cmd()
[  321.440460] libertas thread: 2: currenttxskb   (null), dnld_send 0
[  321.447723] libertas leave: __lbs_cmd_async(), ret de728400
[  321.453796] libertas thread: 3: currenttxskb   (null), dnld_sent 0
[  321.461425] libertas thread: 4: currenttxskb   (null), dnld_sent 0
[  321.468719] libertas enter: lbs_execute_next_command()
[  321.474273] libertas host: EXEC_NEXT_CMD: sending command 0x0003
[  321.483001] libertas enter: lbs_submit_command()
[  321.489105] libertas cmd: DNLD_CMD: command 0x0003, seq 1, size 46
[  321.495788] libertas DNLD_CMD: 03 00 2e 00 01 00 00 00 00 00 00 00 00
00 00 00 
[  321.504516] libertas DNLD_CMD: ff ff ff ff ff ff 00 00 00 00 00 00 00
00 00 00 
[  321.513092] libertas DNLD_CMD: 00 00 00 00 00 00 00 00 00 00 00 00 00
00 
[  321.521087] libertas enter: if_sdio_host_to_card(type 1, bytes 46)
[  321.528594] libertas enter: if_sdio_host_to_card_worker()
[  321.534454] libertas leave: if_sdio_host_to_card(), ret 0
[  321.534484] libertas leave: lbs_submit_command()
[  321.534484] libertas leave: lbs_execute_next_command()
[  321.534484] libertas thread: 1: currenttxskb   (null), dnld_sent 2
[  321.534515] libertas thread: sleeping, connect_status 1, psmode 0,
psstate 0
[  321.566162] libertas leave: if_sdio_host_to_card_worker()



reverting 9dc0754ccfc1aaa2b8cd38b2d1579ac902b8bbc0
than makes wifi work at least slowly and with much current consumption.

I am still wondering whether this is a hardware error on my gta04
since I do not find any kernel which works now. Both measures (1bit mode
and no sdio-irq reduce the pins used. So if some of them have a
problem...

Is there any hw with libertas available so that I might at least
upstream the libertas stuff?

Regards,
Andreas



More information about the Letux-kernel mailing list