[Letux-kernel] [Gta04-owner] no wifi today (cannot load helper firmware)
H. Nikolaus Schaller
hns at goldelico.com
Thu May 5 19:28:11 CEST 2016
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!
>
>
>
> 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.
>
> 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.
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.
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...
BR,
Nikolaus
More information about the Letux-kernel
mailing list