Thread (10 messages) 10 messages, 3 authors, 2010-11-01

Re: regression: b43-sdio: probe of mmc0:0001:1 failed with error -16

From: Arnd Hannemann <hidden>
Date: 2010-11-01 14:22:08
Also in: linux-mmc, lkml

Am 01.11.2010 10:02, schrieb Ohad Ben-Cohen:
On Mon, Nov 1, 2010 at 10:05 AM, Arnd Hannemann [off-list ref] wrote:
quoted
No, actually mmc_sdio_init_card() is called _before_ sdio_bus_probe
Yes, it is called once at boot while the card is mmc_rescan()ed.

But that's not interesting, because the card is then powered down, and
will only be powered on again when it is probed with a driver.
quoted
Also mmd_sdio_resume is not called at all.
Sorry, I meant mmc_sdio_restore_host.

You should see something like this:

sdio_bus_probe - >
    ... (runtime PM function calls) ... ->
           mmc_power_restore_host ->
                 mmc_sdio_power_restore ->
                        mmc_sdio_init_card -> ...

We have 1 report where the latter mmc_sdio_init_card fails at this
point, and I'm interested to know whether it fails for you, too (and
if yes, where). If it is not even called, I'd appreciate if you can
check out where does this flow break in your case.
It looks like this:

root@ap4evb:~# modprobe b43
[   36.023437] cfg80211: Calling CRDA to update world regulatory domain
[   36.460937] sdio_bus_probe()
[   36.468750] sdio_bus_probe() calling pm_runtime_get_sync()
[   36.468750] mmc_power_restore_host() begin
[   36.570312] mmc_sdio_power_restore() begin
[   36.570312] mmc_sdio_init_card()
[   36.578125] mmc_sdio_init_card() mmc_send_io_op_cond ret=-110
[   36.585937] mmc_sdio_power_restore() end ret=-110
[   36.593750] mmc_power_restore_host() end ret=-110
[   36.593750] sdio_bus_probe() pm_runtime_get_sync ret=-16
[   36.601562] b43-sdio: probe of mmc0:0001:1 failed with error -16

So it seems to fail in mmc_sdio_init_card at the mmc_send_io_op_cond()
call.
quoted
No mmc_send_relative_addr() does _not_ return -110, actually it
is not called at all.
OK.
quoted
I inserted a WARN_ON() in sdio_bus_probe, and here is the backtrace I get:
The interesting part is actually what happens after sdio_bus_probe(),
not before it.
Actually nothing special happens after sdio_bus_probe()
Is mmc_power_restore_host being called ? mmc_sdio_power_restore ?
mmc_sdio_init_card ? etc...

I'm also attaching a patch that requires hosts to explicitly indicate
whether they support powering off/on their cards after boot (which
would prevent SDIO core from powering off you card after boot since
your host doesn't indicate that capability).

Can you please see if the problem goes away with it ?
With your patch the problem goes away, thanks.

Regards,
Arnd
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help