Re: regression: b43-sdio: probe of mmc0:0001:1 failed with error-16
From: Arnd Hannemann
Date: Sun Oct 31 2010 - 17:52:21 EST
Hi Ohad,
Am 31.10.2010 20:14, schrieb Ohad Ben-Cohen:
> On Sun, Oct 31, 2010 at 7:16 PM, Arnd Hannemann <arnd@xxxxxxxxxx> wrote:
>> b43-sdio: probe of mmc0:0001:1 failed with error -16
>
> It's exactly what Daniel is experiencing with the XO-1.5.
>
> In Daniel's scenario, mmc_sdio_init_card() fails because
> mmc_send_relative_addr() returns -110.
>
> Can you please check out if that's the same thing you have too ?
No, it seems to be the pm_runtime_get_sync in sdio_bus.c::sdio_bus_probe().
If I test with CONFIG_PM_RUNTIME=y and the attached modifications,
then I get this as output:
root@ap4evb:~# modprobe b43
[ 29.859375] cfg80211: Calling CRDA to update world regulatory domain
[ 30.226562] pm_runtime_get_sync: -16
[ 30.234375] b43-sdio: probe of mmc0:0001:1 failed with error -16
[ 30.242187] Broadcom 43xx driver loaded [ Features: LS, Firmware-ID: FW13 ]
If CONFIG_PM_RUNTIME is not set in .config, the problem goes away.
Regards,
Arnd
diff --git a/drivers/mmc/core/sd_ops.c b/drivers/mmc/core/sd_ops.c
index 797cdb5..57b6dd4 100644
--- a/drivers/mmc/core/sd_ops.c
+++ b/drivers/mmc/core/sd_ops.c
@@ -237,8 +237,10 @@ int mmc_send_relative_addr(struct mmc_host *host, unsigned int *rca)
cmd.flags = MMC_RSP_R6 | MMC_CMD_BCR;
err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
- if (err)
+ if (err) {
+ printk(KERN_INFO "%s(): %d\n", __func__, err);
return err;
+ }
*rca = cmd.resp[0] >> 16;
diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c
index 2716c7a..102c163 100644
--- a/drivers/mmc/core/sdio_bus.c
+++ b/drivers/mmc/core/sdio_bus.c
@@ -133,8 +133,10 @@ static int sdio_bus_probe(struct device *dev)
* pm_runtime_get_noresume() in its remove routine.
*/
ret = pm_runtime_get_sync(dev);
- if (ret < 0)
+ if (ret < 0) {
+ printk(KERN_INFO "pm_runtime_get_sync: %d\n", ret);
goto out;
+ }
/* Set the default block size so the driver is sure it's something
* sensible. */