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

H. Nikolaus Schaller hns at goldelico.com
Sat May 7 14:52:15 CEST 2016


Hi,

> Am 05.05.2016 um 21:26 schrieb Andreas Kemnade <andreas at kemnade.info>:
> 
> Hi,
> 
> On Thu, 2016-05-05 at 19:28 +0200, H. Nikolaus Schaller wrote: 
>> Hi,
>> 
>>>>> 
>>>> Interesting is also EILSEQ 
>>>> in omap_hsmmc.c.
>>>> 
>>>> I tried also with libertas_tf.
>>>> 
>>> Hmm, I tried letux-4.6rc6.
>>> No changes.
>> 
>> It did not work as well on my GTA04A3 which I use for kernel tests.
>> 
>>> 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
>> 
>> ok, that looks better.
>> 
>>> [  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()
>> 
>> Ok!
>> 
> 
> Not ok, I just pasted not enough. The command timed out.
> Probably due to the not-working sdio-irq.
> 
>>> 
>>> 
>>> 
>>> reverting 9dc0754ccfc1aaa2b8cd38b2d1579ac902b8bbc0
>>> than makes wifi work at least slowly and with much current consumption.
>> 
>> Hm. As far as I see that patch doesn't do much except unconditionally enabling
>> 
>> mmc->caps |= MMC_CAP_SDIO_IRQ
>> 
>> and managing power while interrupts are enabled/disabled.
>> 
>>> 
>>> I am still wondering whether this is a hardware error on my gta04
>>> since I do not find any kernel which works now.
>> 
>> I am also not sure if this is hw or sw.
>> 
> Hmm, AFAIK my gta04 was not vapor-phase soldered and I think also
> reworked. And your gta04a3 probably also not. Maybe the soldering
> quality is not so well.

Or has deteriorated over the years. They are now ca. 4-5 years old and
solder joints may break.

> And I also cannot remember when I have last seen
> a working clock after battery removal. Also tested with several kernels.
> So the chances are high that my gta04 has a hw problem.

We can do some tests and compare with the original test report:

http://www.gta04.org/serial.php

> 
>>> 
>>> Both measures (1bit mode
>>> and no sdio-irq reduce the pins used. So if some of them have a
>>> problem...
>> 
>> Well, I think in 1-bit mode there is still CLK, CMD and D0.
>> So we only leave out D1, D2, D3 and D2 is used as SDIO-irq.
> 
>> So essentially you cut only be 50%.
>> 
>> But: is it is possible to damage the level shifter D2 line by incorrectly
>> controlling the sdio-irq? I don't know and assume that it is not possible.
>> 
> At least it seems not to be so easily possible. I have used sdio-irq
> most of the time. Even in the goldelico 2.6.32-hwvalidation kernel
> sdio-irq was enabled. Or should it be something specific to the dt-based
> kernels?
> EILSEQ was in relation to CRC errors...
> 
> The combination 1bit-SDIO + SDIO-irq has some special code in the
> libertas driver and I do not know what the status of that code is.
> 
> 
>> The SN74AVCA406L is explicitly designed for that purpose of interfacing
>> sdio slots to the OMAP3... And I have checked that the output current limit
>> is +/- 50 mA. But I don't think that there will flow that much current if both
>> the WIFi module and the SN74AVCA406L are driving a data line.
>> 
> If there is  mess with that line, then we should have always problems.
> Hmm, can we do some IR temperature measurement on that SN74AVCA406L on
> a device with working wifi:
> 
> 1. download of 100KB/s, wifi with sdio-irq, iwconfig power off
> 2. download of 100KB/s, wifi without sdio-irq, iwconfig power off
> 
> same with 3.7  (which I use most the time)?

Yes, we can try. I will bring the IR camera with me.

> 
>> So it remains a mystery why it does no longer work even with older kernel
>> and kernel binaries.
>> 
>>> 
>>> Is there any hw with libertas available so that I might at least
>>> upstream the libertas stuff?
>> 
>> Yes, there will be some devices available during our hacking weekend.
>> I hope with working wifi chip...
>> 
> The letux 3704?

Ah, yes! They do not have 3G but WiFi :)

I will bring 1 or 2.

BR,
Nikolaus



More information about the Letux-kernel mailing list