libertas: fix crash for SD8688
For SD8688, FUNC_INIT command is queued before fw_ready flag is
set. This causes the following crash as lbs_thread blocks any
command if fw_ready is not set.
[ 209.338953] [<
c0502248>] (__schedule+0x610/0x764) from [<
bf20ae24>] (__lbs_cmd+0xb8/0x130 [libertas])
[ 209.348340] [<
bf20ae24>] (__lbs_cmd+0xb8/0x130 [libertas]) from [<
bf222474>] (if_sdio_finish_power_on+0xec/0x1b0 [libertas_sdio])
[ 209.360136] [<
bf222474>] (if_sdio_finish_power_on+0xec/0x1b0 [libertas_sdio]) from [<
bf2226c4>] (if_sdio_power_on+0x18c/0x20c [libertas_sdio])
[ 209.373052] [<
bf2226c4>] (if_sdio_power_on+0x18c/0x20c [libertas_sdio]) from [<
bf222944>] (if_sdio_probe+0x200/0x31c [libertas_sdio])
[ 209.385316] [<
bf222944>] (if_sdio_probe+0x200/0x31c [libertas_sdio]) from [<
bf01d820>] (sdio_bus_probe+0x94/0xfc [mmc_core])
[ 209.396748] [<
bf01d820>] (sdio_bus_probe+0x94/0xfc [mmc_core]) from [<
c02e729c>] (driver_probe_device+0x12c/0x348)
[ 209.407214] [<
c02e729c>] (driver_probe_device+0x12c/0x348) from [<
c02e7530>] (__driver_attach+0x78/0x9c)
[ 209.416798] [<
c02e7530>] (__driver_attach+0x78/0x9c) from [<
c02e5658>] (bus_for_each_dev+0x50/0x88)
[ 209.425946] [<
c02e5658>] (bus_for_each_dev+0x50/0x88) from [<
c02e6810>] (bus_add_driver+0x108/0x268)
[ 209.435180] [<
c02e6810>] (bus_add_driver+0x108/0x268) from [<
c02e782c>] (driver_register+0xa4/0x134)
[ 209.444426] [<
c02e782c>] (driver_register+0xa4/0x134) from [<
bf22601c>] (if_sdio_init_module+0x1c/0x3c [libertas_sdio])
[ 209.455339] [<
bf22601c>] (if_sdio_init_module+0x1c/0x3c [libertas_sdio]) from [<
c00085b8>] (do_one_initcall+0x98/0x174)
[ 209.466236] [<
c00085b8>] (do_one_initcall+0x98/0x174) from [<
c0076504>] (load_module+0x1c5c/0x1f80)
[ 209.475390] [<
c0076504>] (load_module+0x1c5c/0x1f80) from [<
c007692c>] (sys_init_module+0x104/0x128)
[ 209.484632] [<
c007692c>] (sys_init_module+0x104/0x128) from [<
c0008c40>] (ret_fast_syscall+0x0/0x38)
Fix it by setting fw_ready flag prior to queuing FUNC_INIT command.
Cc: <stable@vger.kernel.org> # 3.5+
Reported-by: Lubomir Rintel <lkundrak@v3.sk>
Tested-by: Lubomir Rintel <lkundrak@v3.sk>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>