Message ID | 1358493883-28433-1-git-send-email-lkundrak@v3.sk (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
Hi Lubomir, > It actually times out on a 8688 present in GuruPlug with sd8688.bin > (md5=7233401e9687f8c880da547beed4324e) firmware (that's present in > linux-firmware tree), but the adapter works fine. > > For that firmware times out with libertas_uap [1] as well, though it succeeds > with sd8688_ap.bin (md5=52cd8f8296b9a7e1d3835d57416256b2) that was originally > shipped with GuruPlug. That firmware is not in linux-firmware tree and btmrvl > driver might win the race programming the 8688 with sd8688.bin anyway. > > [1] https://github.com/lkundrak/linux/tree/libertas_uap > --- > drivers/net/wireless/libertas/if_sdio.c | 14 -------------- > 1 files changed, 0 insertions(+), 14 deletions(-) > > diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c > index 2ecab49..3c4c555 100644 > --- a/drivers/net/wireless/libertas/if_sdio.c > +++ b/drivers/net/wireless/libertas/if_sdio.c > @@ -825,20 +825,6 @@ static void if_sdio_finish_power_on(struct if_sdio_card *card) > > sdio_release_host(func); > > - /* > - * FUNC_INIT is required for SD8688 WLAN/BT multiple functions > - */ > - if (card->model == MODEL_8688) { > - struct cmd_header cmd; > - > - memset(&cmd, 0, sizeof(cmd)); > - > - lbs_deb_sdio("send function INIT command\n"); > - if (__lbs_cmd(priv, CMD_FUNC_INIT, &cmd, sizeof(cmd), > - lbs_cmd_copyback, (unsigned long) &cmd)) > - netdev_alert(priv->dev, "CMD_FUNC_INIT cmd failed\n"); > - } > - Removing FUNC_INIT could break things in some scenarios. Could you please test the following case? 1. insmod liberates -> download firmware, send FUNC_INIT, ... 2. rmmod libertas -> send FUNC_SHUTDOWN command to firmware; BT is still working. 3. insmod libertas -> skip firmware downloading, send FUNC_INIT, ... If FUNC_INIT is removed, I don't expect step 3 to work. Thanks, Bing > priv->fw_ready = 1; > wake_up(&card->pwron_waitq); > > -- > 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, Jan 18, 2013 at 12:28:17PM -0800, Bing Zhao wrote: > Hi Lubomir, > > > It actually times out on a 8688 present in GuruPlug with sd8688.bin > > (md5=7233401e9687f8c880da547beed4324e) firmware (that's present in > > linux-firmware tree), but the adapter works fine. > > > > For that firmware times out with libertas_uap [1] as well, though it succeeds > > with sd8688_ap.bin (md5=52cd8f8296b9a7e1d3835d57416256b2) that was originally > > shipped with GuruPlug. That firmware is not in linux-firmware tree and btmrvl > > driver might win the race programming the 8688 with sd8688.bin anyway. > > > > [1] https://github.com/lkundrak/linux/tree/libertas_uap > > --- > > drivers/net/wireless/libertas/if_sdio.c | 14 -------------- > > 1 files changed, 0 insertions(+), 14 deletions(-) > > > > diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c > > index 2ecab49..3c4c555 100644 > > --- a/drivers/net/wireless/libertas/if_sdio.c > > +++ b/drivers/net/wireless/libertas/if_sdio.c > > @@ -825,20 +825,6 @@ static void if_sdio_finish_power_on(struct if_sdio_card *card) > > > > sdio_release_host(func); > > > > - /* > > - * FUNC_INIT is required for SD8688 WLAN/BT multiple functions > > - */ > > - if (card->model == MODEL_8688) { > > - struct cmd_header cmd; > > - > > - memset(&cmd, 0, sizeof(cmd)); > > - > > - lbs_deb_sdio("send function INIT command\n"); > > - if (__lbs_cmd(priv, CMD_FUNC_INIT, &cmd, sizeof(cmd), > > - lbs_cmd_copyback, (unsigned long) &cmd)) > > - netdev_alert(priv->dev, "CMD_FUNC_INIT cmd failed\n"); > > - } > > - > > Removing FUNC_INIT could break things in some scenarios. > Could you please test the following case? > > 1. insmod liberates -> download firmware, send FUNC_INIT, ... > 2. rmmod libertas -> send FUNC_SHUTDOWN command to firmware; BT is still working. > 3. insmod libertas -> skip firmware downloading, send FUNC_INIT, ... > > If FUNC_INIT is removed, I don't expect step 3 to work. > > Thanks, > Bing > > > priv->fw_ready = 1; > > wake_up(&card->pwron_waitq); > > > > -- > > 1.7.1 > Lubomir, any reply? Should I drop this one?
On Fri, 2013-01-18 at 12:28 -0800, Bing Zhao wrote: > Hi Lubomir, > > > It actually times out on a 8688 present in GuruPlug with sd8688.bin > > (md5=7233401e9687f8c880da547beed4324e) firmware (that's present in > > linux-firmware tree), but the adapter works fine. > > > > For that firmware times out with libertas_uap [1] as well, though it succeeds > > with sd8688_ap.bin (md5=52cd8f8296b9a7e1d3835d57416256b2) that was originally > > shipped with GuruPlug. That firmware is not in linux-firmware tree and btmrvl > > driver might win the race programming the 8688 with sd8688.bin anyway. > > > > [1] https://github.com/lkundrak/linux/tree/libertas_uap > > --- > > drivers/net/wireless/libertas/if_sdio.c | 14 -------------- > > 1 files changed, 0 insertions(+), 14 deletions(-) > > > > diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c > > index 2ecab49..3c4c555 100644 > > --- a/drivers/net/wireless/libertas/if_sdio.c > > +++ b/drivers/net/wireless/libertas/if_sdio.c > > @@ -825,20 +825,6 @@ static void if_sdio_finish_power_on(struct if_sdio_card *card) > > > > sdio_release_host(func); > > > > - /* > > - * FUNC_INIT is required for SD8688 WLAN/BT multiple functions > > - */ > > - if (card->model == MODEL_8688) { > > - struct cmd_header cmd; > > - > > - memset(&cmd, 0, sizeof(cmd)); > > - > > - lbs_deb_sdio("send function INIT command\n"); > > - if (__lbs_cmd(priv, CMD_FUNC_INIT, &cmd, sizeof(cmd), > > - lbs_cmd_copyback, (unsigned long) &cmd)) > > - netdev_alert(priv->dev, "CMD_FUNC_INIT cmd failed\n"); > > - } > > - > > Removing FUNC_INIT could break things in some scenarios. > Could you please test the following case? > > 1. insmod liberates -> download firmware, send FUNC_INIT, ... > 2. rmmod libertas -> send FUNC_SHUTDOWN command to firmware; BT is still working. > 3. insmod libertas -> skip firmware downloading, send FUNC_INIT, ... > > If FUNC_INIT is removed, I don't expect step 3 to work. In case btmrvl_sdio is loaded, the driver always locks up in FUNC_INIT upon probe time, thus I'm not able to proceed to further steps. [ 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) In case btmrvl_sdio is _not_ loaded, insmod returns, but driver locks up waiting for FUNC_INIT to finish: [ 300.538859] [<c0502248>] (__schedule+0x610/0x764) from [<bf1fae24>] (__lbs_cmd+0xb8/0x130 [libertas]) [ 300.548600] [<bf1fae24>] (__lbs_cmd+0xb8/0x130 [libertas]) from [<bf212474>] (if_sdio_finish_power_on+0xec/0x1b0 [libertas_sdio]) [ 300.560398] [<bf212474>] (if_sdio_finish_power_on+0xec/0x1b0 [libertas_sdio]) from [<bf213230>] (if_sdio_do_prog_firmware+0x414/0x454 [libertas_sdio]) [ 300.574052] [<bf213230>] (if_sdio_do_prog_firmware+0x414/0x454 [libertas_sdio]) from [<bf1fffbc>] (lbs_fw_loaded+0x24/0x58 [libertas]) [ 300.586907] [<bf1fffbc>] (lbs_fw_loaded+0x24/0x58 [libertas]) from [<c02f02c0>] (request_firmware_work_func+0xb0/0xf4) [ 300.597746] [<c02f02c0>] (request_firmware_work_func+0xb0/0xf4) from [<c003ae0c>] (process_one_work+0x348/0x6a8) [ 300.608288] [<c003ae0c>] (process_one_work+0x348/0x6a8) from [<c003b408>] (worker_thread+0x268/0x390) [ 300.617630] [<c003b408>] (worker_thread+0x268/0x390) from [<c00414b0>] (kthread+0xc0/0xd4) [ 300.625947] [<c00414b0>] (kthread+0xc0/0xd4) from [<c0008ce8>] (ret_from_fork+0x14/0x20) [ 300.634135] 2 locks held by kworker/0:1/19: [ 300.638383] #0: (events){.+.+.+}, at: [<c003accc>] process_one_work+0x208/0x6a8 [ 300.646512] #1: ((&fw_work->work)){+.+.+.}, at: [<c003accc>] process_one_work+0x208/0x6a8 If I remove the FUNC_INIT call, wifi works fine, but bluetooth stops working after a network scan: [root@megalodon lkundrak]# iwlist scan >/dev/null 2>&1 [root@megalodon lkundrak]# hcitool scan --flush Device is not available: No such device [root@megalodon lkundrak]# > > Thanks, > Bing > > > priv->fw_ready = 1; > > wake_up(&card->pwron_waitq); > > > > -- > > 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
SGkgTHVib21pciwNCg0KPiA+ID4gQEAgLTgyNSwyMCArODI1LDYgQEAgc3RhdGljIHZvaWQgaWZf c2Rpb19maW5pc2hfcG93ZXJfb24oc3RydWN0IGlmX3NkaW9fY2FyZCAqY2FyZCkNCj4gPiA+DQo+ ID4gPiAgCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOw0KPiA+ID4NCj4gPiA+IC0JLyoNCj4gPiA+ IC0JICogRlVOQ19JTklUIGlzIHJlcXVpcmVkIGZvciBTRDg2ODggV0xBTi9CVCBtdWx0aXBsZSBm dW5jdGlvbnMNCj4gPiA+IC0JICovDQo+ID4gPiAtCWlmIChjYXJkLT5tb2RlbCA9PSBNT0RFTF84 Njg4KSB7DQo+ID4gPiAtCQlzdHJ1Y3QgY21kX2hlYWRlciBjbWQ7DQo+ID4gPiAtDQo+ID4gPiAt CQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOw0KPiA+ID4gLQ0KPiA+ID4gLQkJbGJzX2Rl Yl9zZGlvKCJzZW5kIGZ1bmN0aW9uIElOSVQgY29tbWFuZFxuIik7DQo+ID4gPiAtCQlpZiAoX19s YnNfY21kKHByaXYsIENNRF9GVU5DX0lOSVQsICZjbWQsIHNpemVvZihjbWQpLA0KPiA+ID4gLQkJ CQlsYnNfY21kX2NvcHliYWNrLCAodW5zaWduZWQgbG9uZykgJmNtZCkpDQo+ID4gPiAtCQkJbmV0 ZGV2X2FsZXJ0KHByaXYtPmRldiwgIkNNRF9GVU5DX0lOSVQgY21kIGZhaWxlZFxuIik7DQo+ID4g PiAtCX0NCj4gPiA+IC0NCj4gPg0KPiA+IFJlbW92aW5nIEZVTkNfSU5JVCBjb3VsZCBicmVhayB0 aGluZ3MgaW4gc29tZSBzY2VuYXJpb3MuDQo+ID4gQ291bGQgeW91IHBsZWFzZSB0ZXN0IHRoZSBm b2xsb3dpbmcgY2FzZT8NCj4gPg0KPiA+IDEuIGluc21vZCBsaWJlcmF0ZXMgLT4gZG93bmxvYWQg ZmlybXdhcmUsIHNlbmQgRlVOQ19JTklULCAuLi4NCj4gPiAyLiBybW1vZCBsaWJlcnRhcyAtPiBz ZW5kIEZVTkNfU0hVVERPV04gY29tbWFuZCB0byBmaXJtd2FyZTsgQlQgaXMgc3RpbGwgd29ya2lu Zy4NCj4gPiAzLiBpbnNtb2QgbGliZXJ0YXMgLT4gc2tpcCBmaXJtd2FyZSBkb3dubG9hZGluZywg c2VuZCBGVU5DX0lOSVQsIC4uLg0KPiA+DQo+ID4gSWYgRlVOQ19JTklUIGlzIHJlbW92ZWQsIEkg ZG9uJ3QgZXhwZWN0IHN0ZXAgMyB0byB3b3JrLg0KPiANCj4gSW4gY2FzZSBidG1ydmxfc2RpbyBp cyBsb2FkZWQsIHRoZSBkcml2ZXIgYWx3YXlzIGxvY2tzIHVwIGluIEZVTkNfSU5JVA0KPiB1cG9u IHByb2JlIHRpbWUsIHRodXMgSSdtIG5vdCBhYmxlIHRvIHByb2NlZWQgdG8gZnVydGhlciBzdGVw cy4NCj4gDQo+IFsgIDIwOS4zMzg5NTNdIFs8YzA1MDIyNDg+XSAoX19zY2hlZHVsZSsweDYxMC8w eDc2NCkgZnJvbSBbPGJmMjBhZTI0Pl0gKF9fbGJzX2NtZCsweGI4LzB4MTMwDQo+IFtsaWJlcnRh c10pDQo+IFsgIDIwOS4zNDgzNDBdIFs8YmYyMGFlMjQ+XSAoX19sYnNfY21kKzB4YjgvMHgxMzAg W2xpYmVydGFzXSkgZnJvbSBbPGJmMjIyNDc0Pl0NCj4gKGlmX3NkaW9fZmluaXNoX3Bvd2VyX29u KzB4ZWMvMHgxYjAgW2xpYmVydGFzX3NkaW9dKQ0KPiBbICAyMDkuMzYwMTM2XSBbPGJmMjIyNDc0 Pl0gKGlmX3NkaW9fZmluaXNoX3Bvd2VyX29uKzB4ZWMvMHgxYjAgW2xpYmVydGFzX3NkaW9dKSBm cm9tIFs8YmYyMjI2YzQ+XQ0KPiAoaWZfc2Rpb19wb3dlcl9vbisweDE4Yy8weDIwYyBbbGliZXJ0 YXNfc2Rpb10pDQo+IFsgIDIwOS4zNzMwNTJdIFs8YmYyMjI2YzQ+XSAoaWZfc2Rpb19wb3dlcl9v bisweDE4Yy8weDIwYyBbbGliZXJ0YXNfc2Rpb10pIGZyb20gWzxiZjIyMjk0ND5dDQo+IChpZl9z ZGlvX3Byb2JlKzB4MjAwLzB4MzFjIFtsaWJlcnRhc19zZGlvXSkNCj4gWyAgMjA5LjM4NTMxNl0g WzxiZjIyMjk0ND5dIChpZl9zZGlvX3Byb2JlKzB4MjAwLzB4MzFjIFtsaWJlcnRhc19zZGlvXSkg ZnJvbSBbPGJmMDFkODIwPl0NCj4gKHNkaW9fYnVzX3Byb2JlKzB4OTQvMHhmYyBbbW1jX2NvcmVd KQ0KPiBbICAyMDkuMzk2NzQ4XSBbPGJmMDFkODIwPl0gKHNkaW9fYnVzX3Byb2JlKzB4OTQvMHhm YyBbbW1jX2NvcmVdKSBmcm9tIFs8YzAyZTcyOWM+XQ0KPiAoZHJpdmVyX3Byb2JlX2RldmljZSsw eDEyYy8weDM0OCkNCj4gWyAgMjA5LjQwNzIxNF0gWzxjMDJlNzI5Yz5dIChkcml2ZXJfcHJvYmVf ZGV2aWNlKzB4MTJjLzB4MzQ4KSBmcm9tIFs8YzAyZTc1MzA+XQ0KPiAoX19kcml2ZXJfYXR0YWNo KzB4NzgvMHg5YykNCj4gWyAgMjA5LjQxNjc5OF0gWzxjMDJlNzUzMD5dIChfX2RyaXZlcl9hdHRh Y2grMHg3OC8weDljKSBmcm9tIFs8YzAyZTU2NTg+XSAoYnVzX2Zvcl9lYWNoX2RldisweDUwLzB4 ODgpDQo+IFsgIDIwOS40MjU5NDZdIFs8YzAyZTU2NTg+XSAoYnVzX2Zvcl9lYWNoX2RldisweDUw LzB4ODgpIGZyb20gWzxjMDJlNjgxMD5dDQo+IChidXNfYWRkX2RyaXZlcisweDEwOC8weDI2OCkN Cj4gWyAgMjA5LjQzNTE4MF0gWzxjMDJlNjgxMD5dIChidXNfYWRkX2RyaXZlcisweDEwOC8weDI2 OCkgZnJvbSBbPGMwMmU3ODJjPl0NCj4gKGRyaXZlcl9yZWdpc3RlcisweGE0LzB4MTM0KQ0KPiBb ICAyMDkuNDQ0NDI2XSBbPGMwMmU3ODJjPl0gKGRyaXZlcl9yZWdpc3RlcisweGE0LzB4MTM0KSBm cm9tIFs8YmYyMjYwMWM+XQ0KPiAoaWZfc2Rpb19pbml0X21vZHVsZSsweDFjLzB4M2MgW2xpYmVy dGFzX3NkaW9dKQ0KPiBbICAyMDkuNDU1MzM5XSBbPGJmMjI2MDFjPl0gKGlmX3NkaW9faW5pdF9t b2R1bGUrMHgxYy8weDNjIFtsaWJlcnRhc19zZGlvXSkgZnJvbSBbPGMwMDA4NWI4Pl0NCj4gKGRv X29uZV9pbml0Y2FsbCsweDk4LzB4MTc0KQ0KPiBbICAyMDkuNDY2MjM2XSBbPGMwMDA4NWI4Pl0g KGRvX29uZV9pbml0Y2FsbCsweDk4LzB4MTc0KSBmcm9tIFs8YzAwNzY1MDQ+XSAobG9hZF9tb2R1 bGUrMHgxYzVjLzB4MWY4MCkNCj4gWyAgMjA5LjQ3NTM5MF0gWzxjMDA3NjUwND5dIChsb2FkX21v ZHVsZSsweDFjNWMvMHgxZjgwKSBmcm9tIFs8YzAwNzY5MmM+XQ0KPiAoc3lzX2luaXRfbW9kdWxl KzB4MTA0LzB4MTI4KQ0KPiBbICAyMDkuNDg0NjMyXSBbPGMwMDc2OTJjPl0gKHN5c19pbml0X21v ZHVsZSsweDEwNC8weDEyOCkgZnJvbSBbPGMwMDA4YzQwPl0NCj4gKHJldF9mYXN0X3N5c2NhbGwr MHgwLzB4MzgpDQo+IA0KPiBJbiBjYXNlIGJ0bXJ2bF9zZGlvIGlzIF9ub3RfIGxvYWRlZCwgaW5z bW9kIHJldHVybnMsIGJ1dCBkcml2ZXIgbG9ja3MgdXANCj4gd2FpdGluZyBmb3IgRlVOQ19JTklU IHRvIGZpbmlzaDoNCj4gDQo+IFsgIDMwMC41Mzg4NTldIFs8YzA1MDIyNDg+XSAoX19zY2hlZHVs ZSsweDYxMC8weDc2NCkgZnJvbSBbPGJmMWZhZTI0Pl0gKF9fbGJzX2NtZCsweGI4LzB4MTMwDQo+ IFtsaWJlcnRhc10pDQo+IFsgIDMwMC41NDg2MDBdIFs8YmYxZmFlMjQ+XSAoX19sYnNfY21kKzB4 YjgvMHgxMzAgW2xpYmVydGFzXSkgZnJvbSBbPGJmMjEyNDc0Pl0NCj4gKGlmX3NkaW9fZmluaXNo X3Bvd2VyX29uKzB4ZWMvMHgxYjAgW2xpYmVydGFzX3NkaW9dKQ0KPiBbICAzMDAuNTYwMzk4XSBb PGJmMjEyNDc0Pl0gKGlmX3NkaW9fZmluaXNoX3Bvd2VyX29uKzB4ZWMvMHgxYjAgW2xpYmVydGFz X3NkaW9dKSBmcm9tIFs8YmYyMTMyMzA+XQ0KPiAoaWZfc2Rpb19kb19wcm9nX2Zpcm13YXJlKzB4 NDE0LzB4NDU0IFtsaWJlcnRhc19zZGlvXSkNCj4gWyAgMzAwLjU3NDA1Ml0gWzxiZjIxMzIzMD5d IChpZl9zZGlvX2RvX3Byb2dfZmlybXdhcmUrMHg0MTQvMHg0NTQgW2xpYmVydGFzX3NkaW9dKSBm cm9tIFs8YmYxZmZmYmM+XQ0KPiAobGJzX2Z3X2xvYWRlZCsweDI0LzB4NTggW2xpYmVydGFzXSkN Cj4gWyAgMzAwLjU4NjkwN10gWzxiZjFmZmZiYz5dIChsYnNfZndfbG9hZGVkKzB4MjQvMHg1OCBb bGliZXJ0YXNdKSBmcm9tIFs8YzAyZjAyYzA+XQ0KPiAocmVxdWVzdF9maXJtd2FyZV93b3JrX2Z1 bmMrMHhiMC8weGY0KQ0KPiBbICAzMDAuNTk3NzQ2XSBbPGMwMmYwMmMwPl0gKHJlcXVlc3RfZmly bXdhcmVfd29ya19mdW5jKzB4YjAvMHhmNCkgZnJvbSBbPGMwMDNhZTBjPl0NCj4gKHByb2Nlc3Nf b25lX3dvcmsrMHgzNDgvMHg2YTgpDQo+IFsgIDMwMC42MDgyODhdIFs8YzAwM2FlMGM+XSAocHJv Y2Vzc19vbmVfd29yaysweDM0OC8weDZhOCkgZnJvbSBbPGMwMDNiNDA4Pl0NCj4gKHdvcmtlcl90 aHJlYWQrMHgyNjgvMHgzOTApDQo+IFsgIDMwMC42MTc2MzBdIFs8YzAwM2I0MDg+XSAod29ya2Vy X3RocmVhZCsweDI2OC8weDM5MCkgZnJvbSBbPGMwMDQxNGIwPl0gKGt0aHJlYWQrMHhjMC8weGQ0 KQ0KPiBbICAzMDAuNjI1OTQ3XSBbPGMwMDQxNGIwPl0gKGt0aHJlYWQrMHhjMC8weGQ0KSBmcm9t IFs8YzAwMDhjZTg+XSAocmV0X2Zyb21fZm9yaysweDE0LzB4MjApDQo+IFsgIDMwMC42MzQxMzVd IDIgbG9ja3MgaGVsZCBieSBrd29ya2VyLzA6MS8xOToNCj4gWyAgMzAwLjYzODM4M10gICMwOiAg KGV2ZW50cyl7LisuKy4rfSwgYXQ6IFs8YzAwM2FjY2M+XSBwcm9jZXNzX29uZV93b3JrKzB4MjA4 LzB4NmE4DQo+IFsgIDMwMC42NDY1MTJdICAjMTogICgoJmZ3X3dvcmstPndvcmspKXsrLisuKy59 LCBhdDogWzxjMDAzYWNjYz5dIHByb2Nlc3Nfb25lX3dvcmsrMHgyMDgvMHg2YTgNCg0KVGhlcmUg c2VlbXMgdG8gYmUgYSByYWNlIGNvbmRpdGlvbiBpbiBsYnNfdGhyZWFkKCkuDQoNCkF0IGxpbmUg NTgyOg0KIDU4MiAgICAgICAgICAgICAgICAgaWYgKCFwcml2LT5md19yZWFkeSkNCiA1ODMgICAg ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQoNClRoZSBmd19yZWFkeSBpcyAwLCBzbyB5 b3UgbmV2ZXIgZ2V0IHRoZSBjaGFuY2UgdG8gZXhlY3V0ZSB0aGUgRlVOQ19JTklUIGNvbW1hbmQu DQoNCiA2MTcgICAgICAgICAgICAgICAgIC8qIEV4ZWN1dGUgdGhlIG5leHQgY29tbWFuZCAqLw0K IDYxOCAgICAgICAgICAgICAgICAgaWYgKCFwcml2LT5kbmxkX3NlbnQgJiYgIXByaXYtPmN1cl9j bWQpDQogNjE5ICAgICAgICAgICAgICAgICAgICAgICAgIGxic19leGVjdXRlX25leHRfY29tbWFu ZChwcml2KTsNCg0KDQpDb3VsZCB5b3UgdHJ5IHRoZSBmb2xsb3dpbmcgY2hhbmdlPw0KDQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jIGIvZHJpdmVy cy9uZXQvd2lyZWxlc3MvbGliZQ0KaW5kZXggNzM5MzA5ZS4uOGY1ZDk3NyAxMDA2NDQNCi0tLSBh L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYw0KKysrIGIvZHJpdmVycy9u ZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jDQpAQCAtODI1LDYgKzgyNSw4IEBAIHN0YXRp YyB2b2lkIGlmX3NkaW9fZmluaXNoX3Bvd2VyX29uKHN0cnVjdCBpZl9zZGlvX2NhcmQgKmNhcg0K DQogICAgICAgIHNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOw0KDQorICAgICAgIHByaXYtPmZ3X3Jl YWR5ID0gMTsNCisNCiAgICAgICAgLyoNCiAgICAgICAgICogRlVOQ19JTklUIGlzIHJlcXVpcmVk IGZvciBTRDg2ODggV0xBTi9CVCBtdWx0aXBsZSBmdW5jdGlvbnMNCiAgICAgICAgICovDQpAQCAt ODM5LDcgKzg0MSw2IEBAIHN0YXRpYyB2b2lkIGlmX3NkaW9fZmluaXNoX3Bvd2VyX29uKHN0cnVj dCBpZl9zZGlvX2NhcmQgKmNhcg0KICAgICAgICAgICAgICAgICAgICAgICAgbmV0ZGV2X2FsZXJ0 KHByaXYtPmRldiwgIkNNRF9GVU5DX0lOSVQgY21kIGZhaWxlZFxuIik7DQogICAgICAgIH0NCg0K LSAgICAgICBwcml2LT5md19yZWFkeSA9IDE7DQogICAgICAgIHdha2VfdXAoJmNhcmQtPnB3cm9u X3dhaXRxKTsNCg0KICAgICAgICBpZiAoIWNhcmQtPnN0YXJ0ZWQpIHsNCg0KVGhhbmtzLA0KQmlu Zw0KDQo+IA0KPiBJZiBJIHJlbW92ZSB0aGUgRlVOQ19JTklUIGNhbGwsIHdpZmkgd29ya3MgZmlu ZSwgYnV0IGJsdWV0b290aCBzdG9wcw0KPiB3b3JraW5nIGFmdGVyIGEgbmV0d29yayBzY2FuOg0K PiANCj4gW3Jvb3RAbWVnYWxvZG9uIGxrdW5kcmFrXSMgaXdsaXN0IHNjYW4gPi9kZXYvbnVsbCAy PiYxDQo+IFtyb290QG1lZ2Fsb2RvbiBsa3VuZHJha10jIGhjaXRvb2wgc2NhbiAtLWZsdXNoDQo+ IERldmljZSBpcyBub3QgYXZhaWxhYmxlOiBObyBzdWNoIGRldmljZQ0KPiBbcm9vdEBtZWdhbG9k b24gbGt1bmRyYWtdIw0K -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wed, 2013-02-20 at 17:59 -0800, Bing Zhao wrote: > Hi Lubomir, > > > > > @@ -825,20 +825,6 @@ static void if_sdio_finish_power_on(struct if_sdio_card *card) > > > > > > > > sdio_release_host(func); > > > > > > > > - /* > > > > - * FUNC_INIT is required for SD8688 WLAN/BT multiple functions > > > > - */ > > > > - if (card->model == MODEL_8688) { > > > > - struct cmd_header cmd; > > > > - > > > > - memset(&cmd, 0, sizeof(cmd)); > > > > - > > > > - lbs_deb_sdio("send function INIT command\n"); > > > > - if (__lbs_cmd(priv, CMD_FUNC_INIT, &cmd, sizeof(cmd), > > > > - lbs_cmd_copyback, (unsigned long) &cmd)) > > > > - netdev_alert(priv->dev, "CMD_FUNC_INIT cmd failed\n"); > > > > - } > > > > - > > > > > > Removing FUNC_INIT could break things in some scenarios. > > > Could you please test the following case? > > > > > > 1. insmod liberates -> download firmware, send FUNC_INIT, ... > > > 2. rmmod libertas -> send FUNC_SHUTDOWN command to firmware; BT is still working. > > > 3. insmod libertas -> skip firmware downloading, send FUNC_INIT, ... > > > > > > If FUNC_INIT is removed, I don't expect step 3 to work. > > > > In case btmrvl_sdio is loaded, the driver always locks up in FUNC_INIT > > upon probe time, thus I'm not able to proceed to further steps. > > > > [ 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) > > > > In case btmrvl_sdio is _not_ loaded, insmod returns, but driver locks up > > waiting for FUNC_INIT to finish: > > > > [ 300.538859] [<c0502248>] (__schedule+0x610/0x764) from [<bf1fae24>] (__lbs_cmd+0xb8/0x130 > > [libertas]) > > [ 300.548600] [<bf1fae24>] (__lbs_cmd+0xb8/0x130 [libertas]) from [<bf212474>] > > (if_sdio_finish_power_on+0xec/0x1b0 [libertas_sdio]) > > [ 300.560398] [<bf212474>] (if_sdio_finish_power_on+0xec/0x1b0 [libertas_sdio]) from [<bf213230>] > > (if_sdio_do_prog_firmware+0x414/0x454 [libertas_sdio]) > > [ 300.574052] [<bf213230>] (if_sdio_do_prog_firmware+0x414/0x454 [libertas_sdio]) from [<bf1fffbc>] > > (lbs_fw_loaded+0x24/0x58 [libertas]) > > [ 300.586907] [<bf1fffbc>] (lbs_fw_loaded+0x24/0x58 [libertas]) from [<c02f02c0>] > > (request_firmware_work_func+0xb0/0xf4) > > [ 300.597746] [<c02f02c0>] (request_firmware_work_func+0xb0/0xf4) from [<c003ae0c>] > > (process_one_work+0x348/0x6a8) > > [ 300.608288] [<c003ae0c>] (process_one_work+0x348/0x6a8) from [<c003b408>] > > (worker_thread+0x268/0x390) > > [ 300.617630] [<c003b408>] (worker_thread+0x268/0x390) from [<c00414b0>] (kthread+0xc0/0xd4) > > [ 300.625947] [<c00414b0>] (kthread+0xc0/0xd4) from [<c0008ce8>] (ret_from_fork+0x14/0x20) > > [ 300.634135] 2 locks held by kworker/0:1/19: > > [ 300.638383] #0: (events){.+.+.+}, at: [<c003accc>] process_one_work+0x208/0x6a8 > > [ 300.646512] #1: ((&fw_work->work)){+.+.+.}, at: [<c003accc>] process_one_work+0x208/0x6a8 > > There seems to be a race condition in lbs_thread(). > > At line 582: > 582 if (!priv->fw_ready) > 583 continue; > > The fw_ready is 0, so you never get the chance to execute the FUNC_INIT command. > > 617 /* Execute the next command */ > 618 if (!priv->dnld_sent && !priv->cur_cmd) > 619 lbs_execute_next_command(priv); > > > Could you try the following change? > > diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libe > index 739309e..8f5d977 100644 > --- a/drivers/net/wireless/libertas/if_sdio.c > +++ b/drivers/net/wireless/libertas/if_sdio.c > @@ -825,6 +825,8 @@ static void if_sdio_finish_power_on(struct if_sdio_card *car > > sdio_release_host(func); > > + priv->fw_ready = 1; > + > /* > * FUNC_INIT is required for SD8688 WLAN/BT multiple functions > */ > @@ -839,7 +841,6 @@ static void if_sdio_finish_power_on(struct if_sdio_card *car > netdev_alert(priv->dev, "CMD_FUNC_INIT cmd failed\n"); > } > > - priv->fw_ready = 1; > wake_up(&card->pwron_waitq); > > if (!card->started) { Thank you. Everything seem to work fine for me with the patch applied. Regards, -- Lubo -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Daniel, > > There seems to be a race condition in lbs_thread(). > > > > At line 582: > > 582 if (!priv->fw_ready) > > 583 continue; > > > > The fw_ready is 0, so you never get the chance to execute the FUNC_INIT command. > > > > 617 /* Execute the next command */ > > 618 if (!priv->dnld_sent && !priv->cur_cmd) > > 619 lbs_execute_next_command(priv); > > > > > > Could you try the following change? > > > > diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libe > > index 739309e..8f5d977 100644 > > --- a/drivers/net/wireless/libertas/if_sdio.c > > +++ b/drivers/net/wireless/libertas/if_sdio.c > > @@ -825,6 +825,8 @@ static void if_sdio_finish_power_on(struct if_sdio_card *car > > > > sdio_release_host(func); > > > > + priv->fw_ready = 1; > > + > > /* > > * FUNC_INIT is required for SD8688 WLAN/BT multiple functions > > */ > > @@ -839,7 +841,6 @@ static void if_sdio_finish_power_on(struct if_sdio_card *car > > netdev_alert(priv->dev, "CMD_FUNC_INIT cmd failed\n"); > > } > > > > - priv->fw_ready = 1; > > wake_up(&card->pwron_waitq); > > > > if (!card->started) { > > Thank you. > Everything seem to work fine for me with the patch applied. Do you have any concern for OLPC platforms with above change? If it doesn't seem to break OLPC I will send a patch to the list. Thanks, Bing
On Mon, Feb 25, 2013 at 5:21 PM, Bing Zhao <bzhao@marvell.com> wrote:
> Do you have any concern for OLPC platforms with above change? If it doesn't seem to break OLPC I will send a patch to the list.
Looks fine to me. Thanks for investigating.
Daniel
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Daniel, > > Do you have any concern for OLPC platforms with above change? If it doesn't seem to break OLPC I > will send a patch to the list. > > Looks fine to me. Thanks for investigating. Thanks. I've just sent the patch. Regards, Bing -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c index 2ecab49..3c4c555 100644 --- a/drivers/net/wireless/libertas/if_sdio.c +++ b/drivers/net/wireless/libertas/if_sdio.c @@ -825,20 +825,6 @@ static void if_sdio_finish_power_on(struct if_sdio_card *card) sdio_release_host(func); - /* - * FUNC_INIT is required for SD8688 WLAN/BT multiple functions - */ - if (card->model == MODEL_8688) { - struct cmd_header cmd; - - memset(&cmd, 0, sizeof(cmd)); - - lbs_deb_sdio("send function INIT command\n"); - if (__lbs_cmd(priv, CMD_FUNC_INIT, &cmd, sizeof(cmd), - lbs_cmd_copyback, (unsigned long) &cmd)) - netdev_alert(priv->dev, "CMD_FUNC_INIT cmd failed\n"); - } - priv->fw_ready = 1; wake_up(&card->pwron_waitq);