From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [BUG] mt76x0u: Probing issues on Raspberry Pi 3 B+ From: Stanislaw Gruszka Message-Id: <20190214092530.GA17273@redhat.com> Date: Thu, 14 Feb 2019 10:25:32 +0100 To: Stefan Wahren Cc: Lorenzo Bianconi , Alan Stern , Felix Fietkau , Doug Anderson , Minas Harutyunyan , USB list , linux-wireless List-ID: T24gVGh1LCBGZWIgMTQsIDIwMTkgYXQgMDc6NDk6NTdBTSArMDEwMCwgU3RlZmFuIFdhaHJlbiB3 cm90ZToKPiBIaSBTdGFuaXNsYXcsCj4gCj4gPiBTdGFuaXNsYXcgR3J1c3prYSA8c2dydXN6a2FA cmVkaGF0LmNvbT4gaGF0IGFtIDEyLiBGZWJydWFyIDIwMTkgdW0gMTA6MzAgZ2VzY2hyaWViZW46 Cj4gPiAKPiA+IAo+ID4gCj4gPiBJbiB1c2Jfc2dfaW5pdCgpIHVyYi0+bnVtX3NncyBpcyBzZXQg MCBmb3Igc2dfdGFibGVzaXplID0gMCBjb250cm9sbGVycy4KPiA+IEluIG10NzYgd2Ugc2V0IHVy Yi0+bnVtX3NncyB0byAxLiBJIHRob3VnaHQgaXQgaXMgZmluZSwgYnV0IG5vdyBJIHRoaW5rCj4g PiB0aGlzIGlzIGJ1Zy4gV2UgY2FuIGZpeCB0aGF0IHdpdGhvdXQgY2hhbmdpbmcgYWxsb2NhdGlv biBtZXRob2QgYW5kCj4gPiBzdGlsbCB1c2UgU0cgYWxsb2NhdGlvbi4gQXR0YWNoZWQgcGF0Y2gg ZG8gdGhpcywgcGxlYXNlIGNoZWNrIGlmIGl0IHdvcmtzCj4gPiBvbiBycGkuIFBhdGNoIGlzIG9u IHRvcCBvZiB5b3VyIGVycm9yIHBhdGggZml4ZXMuCj4gCj4geW91ciBwYXRjaCBkaWRuJ3QgYXBw bHkgY2xlYW5seSB0byB5ZXN0ZXJkYXlzIG5leHQuIEFmdGVyIHNvbWUgbWlub3IgbWFudWFsIGZp eHVwLCBpIHdhcyBhYmxlIHRvIGJ1aWxkIHRoZW0gYW5kIGhlcmUgYXJlIHRoZSByZXN1bHRzIHN0 YXJ0aW5nIGZyb20gYm9vdCAocGxlYXNlIGlnbm9yZSB0aGUgaW52YWxpZCB0aW1lIGluIHRoZSBr ZXJuZWwgbG9nKToKPiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9sYXRlZ29vZGJ5ZS8zM2JkNWJj NzViOWZjOTM1ZmFhMjMxYmM0NzJkZWZhOAoKSSB0aGluayB0aGlzIGlzIGR1ZSB0byB1cmItPnRy YW5zZmVyX2xlbmd0aCBhbmQgc2dbMF0tPmxlbmd0aCBtaXNtYXRjaCwKd2hpY2ggc2hvdWxkIGJl IGFkZHJlc3NlZCBieSBteSBvdGhlciBwYXRjaC4gSSdtIGF0dGFjaGluZyB0aGUgcGF0Y2gKcmVi YXNlZCBvbiAtbmV4dCB3aXRoIHRoaXMgbGluZSBpbnRlZ3JhdGVkLCBwbGVhc2UgdGVzdC4gCgpC dXQgdGhlcmUgY291bGQgYmUgb3RoZXIgYnVnJ3MgaW4gbXQ3Ni11c2IgU0cgY29kZS4KCj4gVXNp bmcgbXVsdGlfdjdfZGVmY29uZmlnIGknbSBnZXR0aW5nIGEgd2FybmluZyBvbiB0aGUgZmlyc3Qg Y29ubmVjdCBhbmQgYWx3YXlzIHRoaXMgZmxvb2Qgb2YgcnggdXJiIGZhaWxlZCBvbiBkaXNjb25u ZWN0LiBUaGUgZHJpdmVyIHNlZW1zIHRvIHByb2JlIGJ1dCBpc24ndCBmdW5jdGlvbmFsIGV2ZW4g YWZ0ZXIgMiB0cmllcy4KPiAKPiBVc2luZyBhcm02NF9kZWZjb25maWcgaSBkb24ndCBnZXQgYW55 IHdhcm5pbmcuIEJ1dCBleGNlcHQgb2YgdGhpcyBpJ20gZ2V0dGluZyBzaW1pbGlhciByZXN1bHRz IHRvIG11bHRpX3Y3X2RlZmNvbmZpZy4KPiAKPiBTbyBpbiBjb21wYXJpc29uLCBMb3JlbnpvJ3Mg d29ya2Fyb3VuZCBiZWhhdmVzIGJldHRlci4KCkknbSBwcmV0dHkgc3VyZSBwcm9ibGVtIGlzIG10 NzZ4MHUgNC4xOSAtPiA0LjIwIHJlZ3Jlc3Npb24gaW50cmR1Y2VkIGJ5CmludGVncmF0aW5nIG10 NzZ4MHUgaW4gbXQ3Ni11c2IgKHRoaW5ncyBkbyBub3Qgd29yayBmcm9tIGRheSAwCmZvciBtdDc2 eDJ1KS4gV2Ugc2hvdWxkIGZpbmQgZml4KGVzKSB0aGF0IHdpbGwgYmUgcHJvcGVyIGZvciAtc3Rh YmxlLgoKU3RhbmlzbGF3CkZyb20gMmIyMDA1NGZjNDI0ZTBiYjMzOTYyYmJiMDU1MDlhN2NhMTZk MDFiYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogU3RhbmlzbGF3IEdydXN6a2EgPHNn cnVzemthQHJlZGhhdC5jb20+CkRhdGU6IFRodSwgMTQgRmViIDIwMTkgMTA6MDE6MDYgKzAxMDAK U3ViamVjdDogW1BBVENIIHY1XSBtdDc2dXNiOiBkbyBub3Qgc2V0IHVyYi0+bnVtX3NncyB0byAx IGZvciBub24gU0cgdXNiIGhvc3QKIGRyaXZlcnMKClRyYWNrIG51bWJlciBvZiBzZWdtZW50cyBp biBtdDc2dV9idWYgc3RydWN0dXJlIGFuZCBkbyBub3QKc3VibWl0IHVyYnMgd2l0aCB1cmItPm51 bV9zZ3MgPSAxIGlmIHVzYiBob3N0IGRyaXZlcgpzZ190YWJsZXNpemUgaXMgemVyby4KClRoaXMg c3VwcG9zZSBmaXggcHJvYmxlbSBvZiBtdDc2IG5vdCB3b3JraW5nIHdpdGggc29tZSB1c2IKaG9z dCBjb250cm9sbGVycyBsaWtlIGR3YzIuCgpTaWduZWQtb2ZmLWJ5OiBTdGFuaXNsYXcgR3J1c3pr YSA8c2dydXN6a2FAcmVkaGF0LmNvbT4KLS0tCiBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRl ay9tdDc2L210NzYuaCAgICAgICAgICB8ICAxICsKIC4uLi9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsv bXQ3Ni9tdDc2eDAyX3VzYl9tY3UuYyAgIHwgIDEgKwogZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVk aWF0ZWsvbXQ3Ni91c2IuYyAgICAgICAgICAgfCA1NyArKysrKysrKysrKysrKy0tLS0tLS0tCiAz IGZpbGVzIGNoYW5nZWQsIDM4IGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Ni5oIGIvZHJpdmVy cy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2LmgKaW5kZXggMmJiOWRiNGVkODBhLi45 N2FkMDI3MGY4YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210 NzYvbXQ3Ni5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3Ni5o CkBAIC04Niw2ICs4Niw3IEBAIHN0cnVjdCBtdDc2X3F1ZXVlX2J1ZiB7CiBzdHJ1Y3QgbXQ3NnVf YnVmIHsKIAlzdHJ1Y3QgbXQ3Nl9kZXYgKmRldjsKIAlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IG51 bV9zZ3M7CiAJc2l6ZV90IGxlbjsKIAlib29sIGRvbmU7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2eDAyX3VzYl9tY3UuYyBiL2RyaXZlcnMv bmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngwMl91c2JfbWN1LmMKaW5kZXggNmRiNzg5 ZjkwMjY5Li44MGEyNTllMWU5MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21l ZGlhdGVrL210NzYvbXQ3NngwMl91c2JfbWN1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mv bWVkaWF0ZWsvbXQ3Ni9tdDc2eDAyX3VzYl9tY3UuYwpAQCAtMjkyLDYgKzI5Miw3IEBAIF9fbXQ3 NngwMnVfbWN1X2Z3X3NlbmRfZGF0YShzdHJ1Y3QgbXQ3NngwMl9kZXYgKmRldiwgc3RydWN0IG10 NzZ1X2J1ZiAqYnVmLAogCQkJTVRfRkNFX0RNQV9MRU4sIGxlbiA8PCAxNik7CiAKIAlidWYtPmxl biA9IE1UX0NNRF9IRFJfTEVOICsgbGVuICsgc2l6ZW9mKGluZm8pOworCWJ1Zi0+dXJiLT5zZ1sw XS5sZW5ndGggPSBidWYtPmxlbjsKIAllcnIgPSBtdDc2dV9zdWJtaXRfYnVmKCZkZXYtPm10NzYs IFVTQl9ESVJfT1VULAogCQkJICAgICAgIE1UX0VQX09VVF9JTkJBTkRfQ01ELAogCQkJICAgICAg IGJ1ZiwgR0ZQX0tFUk5FTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlh dGVrL210NzYvdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3VzYi5j CmluZGV4IDZhMjUwNzUyNGM2Yy4uNGY5MjczMjUwNmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25l dC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNz L21lZGlhdGVrL210NzYvdXNiLmMKQEAgLTI5NywxNCArMjk3LDE0IEBAIG10NzZ1X2ZpbGxfcnhf c2coc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBtdDc2dV9idWYgKmJ1ZiwKIAlpZiAoaSA8 IG5zZ3MpIHsKIAkJaW50IGo7CiAKLQkJZm9yIChqID0gbnNnczsgaiA8IHVyYi0+bnVtX3Nnczsg aisrKQorCQlmb3IgKGogPSBuc2dzOyBqIDwgYnVmLT5udW1fc2dzOyBqKyspCiAJCQlza2JfZnJl ZV9mcmFnKHNnX3ZpcnQoJnVyYi0+c2dbal0pKTsKLQkJdXJiLT5udW1fc2dzID0gaTsKKwkJYnVm LT5udW1fc2dzID0gaTsKIAl9CiAKLQl1cmItPm51bV9zZ3MgPSBtYXhfdChpbnQsIGksIHVyYi0+ bnVtX3Nncyk7Ci0JYnVmLT5sZW4gPSB1cmItPm51bV9zZ3MgKiBzZ2xlbiwKLQlzZ19pbml0X21h cmtlcih1cmItPnNnLCB1cmItPm51bV9zZ3MpOworCWJ1Zi0+bnVtX3NncyA9IG1heF90KGludCwg aSwgYnVmLT5udW1fc2dzKTsKKwlidWYtPmxlbiA9IGJ1Zi0+bnVtX3NncyAqIHNnbGVuLAorCXNn X2luaXRfbWFya2VyKHVyYi0+c2csIGJ1Zi0+bnVtX3Nncyk7CiAKIAlyZXR1cm4gaSA/IDogLUVO T01FTTsKIH0KQEAgLTMyMyw2ICszMjMsNyBAQCBpbnQgbXQ3NnVfYnVmX2FsbG9jKHN0cnVjdCBt dDc2X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3NnVfYnVmICpidWYsCiAKIAlzZ19pbml0X3RhYmxlKGJ1 Zi0+dXJiLT5zZywgbnNncyk7CiAJYnVmLT5kZXYgPSBkZXY7CisJYnVmLT5udW1fc2dzID0gbnNn czsKIAogCXJldHVybiBtdDc2dV9maWxsX3J4X3NnKGRldiwgYnVmLCBuc2dzLCBsZW4sIHNnbGVu KTsKIH0KQEAgLTMzMywxNSArMzM0LDE2IEBAIHZvaWQgbXQ3NnVfYnVmX2ZyZWUoc3RydWN0IG10 NzZ1X2J1ZiAqYnVmKQogCXN0cnVjdCB1cmIgKnVyYiA9IGJ1Zi0+dXJiOwogCWludCBpOwogCi0J Zm9yIChpID0gMDsgaSA8IHVyYi0+bnVtX3NnczsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBidWYt Pm51bV9zZ3M7IGkrKykKIAkJc2tiX2ZyZWVfZnJhZyhzZ192aXJ0KCZ1cmItPnNnW2ldKSk7CiAJ dXNiX2ZyZWVfdXJiKGJ1Zi0+dXJiKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG10NzZ1X2J1Zl9m cmVlKTsKIAotaW50IG10NzZ1X3N1Ym1pdF9idWYoc3RydWN0IG10NzZfZGV2ICpkZXYsIGludCBk aXIsIGludCBpbmRleCwKLQkJICAgICBzdHJ1Y3QgbXQ3NnVfYnVmICpidWYsIGdmcF90IGdmcCwK LQkJICAgICB1c2JfY29tcGxldGVfdCBjb21wbGV0ZV9mbiwgdm9pZCAqY29udGV4dCkKK3N0YXRp YyB2b2lkCittdDc2dV9maWxsX2J1bGtfdXJiKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBpbnQgZGly LCBpbnQgaW5kZXgsCisJCSAgICBzdHJ1Y3QgbXQ3NnVfYnVmICpidWYsIHVzYl9jb21wbGV0ZV90 IGNvbXBsZXRlX2ZuLAorCQkgICAgdm9pZCAqY29udGV4dCkKIHsKIAlzdHJ1Y3QgdXNiX2ludGVy ZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2LT5kZXYpOwogCXN0cnVjdCB1c2JfZGV2 aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKQEAgLTM1MiwxMiArMzU0LDI4 IEBAIGludCBtdDc2dV9zdWJtaXRfYnVmKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBpbnQgZGlyLCBp bnQgaW5kZXgsCiAJZWxzZQogCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIGRldi0+dXNi Lm91dF9lcFtpbmRleF0pOwogCi0JdXNiX2ZpbGxfYnVsa191cmIoYnVmLT51cmIsIHVkZXYsIHBp cGUsIE5VTEwsIGJ1Zi0+bGVuLAotCQkJICBjb21wbGV0ZV9mbiwgY29udGV4dCk7Ci0JdHJhY2Vf c3VibWl0X3VyYihkZXYsIGJ1Zi0+dXJiKTsKKwl1c2JfZmlsbF9idWxrX3VyYihidWYtPnVyYiwg dWRldiwgcGlwZSwgTlVMTCwgYnVmLT5sZW4sIGNvbXBsZXRlX2ZuLAorCQkJICBjb250ZXh0KTsK KworCWlmICh1ZGV2LT5idXMtPnNnX3RhYmxlc2l6ZSA+IDApIHsKKwkJYnVmLT51cmItPm51bV9z Z3MgPSBidWYtPm51bV9zZ3M7CisJfSBlbHNlIHsKKwkJV0FSTl9PTl9PTkNFKGJ1Zi0+bnVtX3Nn cyAhPSAxKTsKKwkJLyogU2VlIHVzYl9zZ19pbml0KCkgKi8KKwkJYnVmLT51cmItPm51bV9zZ3Mg PSAwOworCQlpZiAoIVBhZ2VIaWdoTWVtKHNnX3BhZ2UoYnVmLT51cmItPnNnKSkpCisJCQlidWYt PnVyYi0+dHJhbnNmZXJfYnVmZmVyID0gc2dfdmlydChidWYtPnVyYi0+c2cpOworCX0KK30KIAor aW50IG10NzZ1X3N1Ym1pdF9idWYoc3RydWN0IG10NzZfZGV2ICpkZXYsIGludCBkaXIsIGludCBp bmRleCwKKwkJICAgICBzdHJ1Y3QgbXQ3NnVfYnVmICpidWYsIGdmcF90IGdmcCwKKwkJICAgICB1 c2JfY29tcGxldGVfdCBjb21wbGV0ZV9mbiwgdm9pZCAqY29udGV4dCkKK3sKKwltdDc2dV9maWxs X2J1bGtfdXJiKGRldiwgZGlyLCBpbmRleCwgYnVmLCBjb21wbGV0ZV9mbiwgY29udGV4dCk7CiAJ cmV0dXJuIHVzYl9zdWJtaXRfdXJiKGJ1Zi0+dXJiLCBnZnApOwogfQorCiBFWFBPUlRfU1lNQk9M X0dQTChtdDc2dV9zdWJtaXRfYnVmKTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbXQ3NnVfYnVm CkBAIC02NjcsMTAgKzY4NSwxMSBAQCBzdGF0aWMgdm9pZCBtdDc2dV9jb21wbGV0ZV90eChzdHJ1 Y3QgdXJiICp1cmIpCiB9CiAKIHN0YXRpYyBpbnQKLW10NzZ1X3R4X2J1aWxkX3NnKHN0cnVjdCBz a19idWZmICpza2IsIHN0cnVjdCB1cmIgKnVyYikKK210NzZ1X3R4X2J1aWxkX3NnKHN0cnVjdCBz a19idWZmICpza2IsIHN0cnVjdCBtdDc2dV9idWYgKmJ1ZikKIHsKIAlpbnQgbnNncyA9IDEgKyBz a2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwogCXN0cnVjdCBza19idWZmICppdGVyOworCXN0cnVj dCB1cmIgKnVyYiA9IGJ1Zi0+dXJiOwogCiAJc2tiX3dhbGtfZnJhZ3Moc2tiLCBpdGVyKQogCQlu c2dzICs9IDEgKyBza2Jfc2hpbmZvKGl0ZXIpLT5ucl9mcmFnczsKQEAgLTY3OSw3ICs2OTgsOCBA QCBtdDc2dV90eF9idWlsZF9zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdXJiICp1cmIp CiAKIAluc2dzID0gbWluX3QoaW50LCBNVF9TR19NQVhfU0laRSwgbnNncyk7CiAJc2dfaW5pdF9t YXJrZXIodXJiLT5zZywgbnNncyk7Ci0JdXJiLT5udW1fc2dzID0gbnNnczsKKwlidWYtPm51bV9z Z3MgPSBuc2dzOworCWJ1Zi0+bGVuID0gc2tiLT5sZW47CiAKIAlyZXR1cm4gc2tiX3RvX3NndmVj X25vbWFyayhza2IsIHVyYi0+c2csIDAsIHNrYi0+bGVuKTsKIH0KQEAgLTY4OSwxMiArNzA5LDkg QEAgbXQ3NnVfdHhfcXVldWVfc2tiKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3Nl9x dWV1ZSAqcSwKIAkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG10NzZfd2NpZCAqd2Np ZCwKIAkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKLQlzdHJ1Y3QgdXNiX2ludGVy ZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2LT5kZXYpOwotCXN0cnVjdCB1c2JfZGV2 aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAl1OCBlcCA9IHEyZXAocS0+ aHdfaWR4KTsKIAlzdHJ1Y3QgbXQ3NnVfYnVmICpidWY7CiAJdTE2IGlkeCA9IHEtPnRhaWw7Ci0J dW5zaWduZWQgaW50IHBpcGU7CiAJaW50IGVycjsKIAogCWlmIChxLT5xdWV1ZWQgPT0gcS0+bmRl c2MpCkBAIC03MDgsMTMgKzcyNSwxMSBAQCBtdDc2dV90eF9xdWV1ZV9za2Ioc3RydWN0IG10NzZf ZGV2ICpkZXYsIHN0cnVjdCBtdDc2X3F1ZXVlICpxLAogCWJ1ZiA9ICZxLT5lbnRyeVtpZHhdLnVi dWY7CiAJYnVmLT5kb25lID0gZmFsc2U7CiAKLQllcnIgPSBtdDc2dV90eF9idWlsZF9zZyhza2Is IGJ1Zi0+dXJiKTsKKwllcnIgPSBtdDc2dV90eF9idWlsZF9zZyhza2IsIGJ1Zik7CiAJaWYgKGVy ciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIGRl di0+dXNiLm91dF9lcFtlcF0pOwotCXVzYl9maWxsX2J1bGtfdXJiKGJ1Zi0+dXJiLCB1ZGV2LCBw aXBlLCBOVUxMLCBza2ItPmxlbiwKLQkJCSAgbXQ3NnVfY29tcGxldGVfdHgsIGJ1Zik7CisJbXQ3 NnVfZmlsbF9idWxrX3VyYihkZXYsIFVTQl9ESVJfT1VULCBlcCwgYnVmLCBtdDc2dV9jb21wbGV0 ZV90eCwgYnVmKTsKIAogCXEtPnRhaWwgPSAocS0+dGFpbCArIDEpICUgcS0+bmRlc2M7CiAJcS0+ ZW50cnlbaWR4XS5za2IgPSBza2I7Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.5 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_PASS,USER_AGENT_MUTT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B94DAC43381 for ; Thu, 14 Feb 2019 09:25:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 855312229F for ; Thu, 14 Feb 2019 09:25:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2437025AbfBNJZh (ORCPT ); Thu, 14 Feb 2019 04:25:37 -0500 Received: from mx1.redhat.com ([209.132.183.28]:53592 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390125AbfBNJZh (ORCPT ); Thu, 14 Feb 2019 04:25:37 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id ABB5713A42; Thu, 14 Feb 2019 09:25:36 +0000 (UTC) Received: from localhost (ovpn-204-123.brq.redhat.com [10.40.204.123]) by smtp.corp.redhat.com (Postfix) with ESMTP id EFBE560C62; Thu, 14 Feb 2019 09:25:32 +0000 (UTC) Date: Thu, 14 Feb 2019 10:25:32 +0100 From: Stanislaw Gruszka To: Stefan Wahren Cc: Lorenzo Bianconi , Alan Stern , Felix Fietkau , Doug Anderson , Minas Harutyunyan , USB list , linux-wireless Subject: Re: [BUG] mt76x0u: Probing issues on Raspberry Pi 3 B+ Message-ID: <20190214092530.GA17273@redhat.com> References: <20190211173315.GE6292@redhat.com> <20190212093035.GB12906@redhat.com> <404607590.373282.1550126997144@email.ionos.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="ZGiS0Q5IWpPtfppv" Content-Disposition: inline In-Reply-To: <404607590.373282.1550126997144@email.ionos.de> User-Agent: Mutt/1.8.3 (2017-05-23) X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Thu, 14 Feb 2019 09:25:36 +0000 (UTC) Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org --ZGiS0Q5IWpPtfppv Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Thu, Feb 14, 2019 at 07:49:57AM +0100, Stefan Wahren wrote: > Hi Stanislaw, > > > Stanislaw Gruszka hat am 12. Februar 2019 um 10:30 geschrieben: > > > > > > > > In usb_sg_init() urb->num_sgs is set 0 for sg_tablesize = 0 controllers. > > In mt76 we set urb->num_sgs to 1. I thought it is fine, but now I think > > this is bug. We can fix that without changing allocation method and > > still use SG allocation. Attached patch do this, please check if it works > > on rpi. Patch is on top of your error path fixes. > > your patch didn't apply cleanly to yesterdays next. After some minor manual fixup, i was able to build them and here are the results starting from boot (please ignore the invalid time in the kernel log): > https://gist.github.com/lategoodbye/33bd5bc75b9fc935faa231bc472defa8 I think this is due to urb->transfer_length and sg[0]->length mismatch, which should be addressed by my other patch. I'm attaching the patch rebased on -next with this line integrated, please test. But there could be other bug's in mt76-usb SG code. > Using multi_v7_defconfig i'm getting a warning on the first connect and always this flood of rx urb failed on disconnect. The driver seems to probe but isn't functional even after 2 tries. > > Using arm64_defconfig i don't get any warning. But except of this i'm getting similiar results to multi_v7_defconfig. > > So in comparison, Lorenzo's workaround behaves better. I'm pretty sure problem is mt76x0u 4.19 -> 4.20 regression intrduced by integrating mt76x0u in mt76-usb (things do not work from day 0 for mt76x2u). We should find fix(es) that will be proper for -stable. Stanislaw --ZGiS0Q5IWpPtfppv Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="0001-mt76usb-do-not-set-urb-num_sgs-to-1-for-non-SG-usb-h.patch" >From 2b20054fc424e0bb33962bbb05509a7ca16d01bc Mon Sep 17 00:00:00 2001 From: Stanislaw Gruszka Date: Thu, 14 Feb 2019 10:01:06 +0100 Subject: [PATCH v5] mt76usb: do not set urb->num_sgs to 1 for non SG usb host drivers Track number of segments in mt76u_buf structure and do not submit urbs with urb->num_sgs = 1 if usb host driver sg_tablesize is zero. This suppose fix problem of mt76 not working with some usb host controllers like dwc2. Signed-off-by: Stanislaw Gruszka --- drivers/net/wireless/mediatek/mt76/mt76.h | 1 + .../net/wireless/mediatek/mt76/mt76x02_usb_mcu.c | 1 + drivers/net/wireless/mediatek/mt76/usb.c | 57 ++++++++++++++-------- 3 files changed, 38 insertions(+), 21 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h index 2bb9db4ed80a..97ad0270f8a6 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76.h +++ b/drivers/net/wireless/mediatek/mt76/mt76.h @@ -86,6 +86,7 @@ struct mt76_queue_buf { struct mt76u_buf { struct mt76_dev *dev; struct urb *urb; + int num_sgs; size_t len; bool done; }; diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_usb_mcu.c b/drivers/net/wireless/mediatek/mt76/mt76x02_usb_mcu.c index 6db789f90269..80a259e1e931 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76x02_usb_mcu.c +++ b/drivers/net/wireless/mediatek/mt76/mt76x02_usb_mcu.c @@ -292,6 +292,7 @@ __mt76x02u_mcu_fw_send_data(struct mt76x02_dev *dev, struct mt76u_buf *buf, MT_FCE_DMA_LEN, len << 16); buf->len = MT_CMD_HDR_LEN + len + sizeof(info); + buf->urb->sg[0].length = buf->len; err = mt76u_submit_buf(&dev->mt76, USB_DIR_OUT, MT_EP_OUT_INBAND_CMD, buf, GFP_KERNEL, diff --git a/drivers/net/wireless/mediatek/mt76/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c index 6a2507524c6c..4f92732506cc 100644 --- a/drivers/net/wireless/mediatek/mt76/usb.c +++ b/drivers/net/wireless/mediatek/mt76/usb.c @@ -297,14 +297,14 @@ mt76u_fill_rx_sg(struct mt76_dev *dev, struct mt76u_buf *buf, if (i < nsgs) { int j; - for (j = nsgs; j < urb->num_sgs; j++) + for (j = nsgs; j < buf->num_sgs; j++) skb_free_frag(sg_virt(&urb->sg[j])); - urb->num_sgs = i; + buf->num_sgs = i; } - urb->num_sgs = max_t(int, i, urb->num_sgs); - buf->len = urb->num_sgs * sglen, - sg_init_marker(urb->sg, urb->num_sgs); + buf->num_sgs = max_t(int, i, buf->num_sgs); + buf->len = buf->num_sgs * sglen, + sg_init_marker(urb->sg, buf->num_sgs); return i ? : -ENOMEM; } @@ -323,6 +323,7 @@ int mt76u_buf_alloc(struct mt76_dev *dev, struct mt76u_buf *buf, sg_init_table(buf->urb->sg, nsgs); buf->dev = dev; + buf->num_sgs = nsgs; return mt76u_fill_rx_sg(dev, buf, nsgs, len, sglen); } @@ -333,15 +334,16 @@ void mt76u_buf_free(struct mt76u_buf *buf) struct urb *urb = buf->urb; int i; - for (i = 0; i < urb->num_sgs; i++) + for (i = 0; i < buf->num_sgs; i++) skb_free_frag(sg_virt(&urb->sg[i])); usb_free_urb(buf->urb); } EXPORT_SYMBOL_GPL(mt76u_buf_free); -int mt76u_submit_buf(struct mt76_dev *dev, int dir, int index, - struct mt76u_buf *buf, gfp_t gfp, - usb_complete_t complete_fn, void *context) +static void +mt76u_fill_bulk_urb(struct mt76_dev *dev, int dir, int index, + struct mt76u_buf *buf, usb_complete_t complete_fn, + void *context) { struct usb_interface *intf = to_usb_interface(dev->dev); struct usb_device *udev = interface_to_usbdev(intf); @@ -352,12 +354,28 @@ int mt76u_submit_buf(struct mt76_dev *dev, int dir, int index, else pipe = usb_sndbulkpipe(udev, dev->usb.out_ep[index]); - usb_fill_bulk_urb(buf->urb, udev, pipe, NULL, buf->len, - complete_fn, context); - trace_submit_urb(dev, buf->urb); + usb_fill_bulk_urb(buf->urb, udev, pipe, NULL, buf->len, complete_fn, + context); + + if (udev->bus->sg_tablesize > 0) { + buf->urb->num_sgs = buf->num_sgs; + } else { + WARN_ON_ONCE(buf->num_sgs != 1); + /* See usb_sg_init() */ + buf->urb->num_sgs = 0; + if (!PageHighMem(sg_page(buf->urb->sg))) + buf->urb->transfer_buffer = sg_virt(buf->urb->sg); + } +} +int mt76u_submit_buf(struct mt76_dev *dev, int dir, int index, + struct mt76u_buf *buf, gfp_t gfp, + usb_complete_t complete_fn, void *context) +{ + mt76u_fill_bulk_urb(dev, dir, index, buf, complete_fn, context); return usb_submit_urb(buf->urb, gfp); } + EXPORT_SYMBOL_GPL(mt76u_submit_buf); static inline struct mt76u_buf @@ -667,10 +685,11 @@ static void mt76u_complete_tx(struct urb *urb) } static int -mt76u_tx_build_sg(struct sk_buff *skb, struct urb *urb) +mt76u_tx_build_sg(struct sk_buff *skb, struct mt76u_buf *buf) { int nsgs = 1 + skb_shinfo(skb)->nr_frags; struct sk_buff *iter; + struct urb *urb = buf->urb; skb_walk_frags(skb, iter) nsgs += 1 + skb_shinfo(iter)->nr_frags; @@ -679,7 +698,8 @@ mt76u_tx_build_sg(struct sk_buff *skb, struct urb *urb) nsgs = min_t(int, MT_SG_MAX_SIZE, nsgs); sg_init_marker(urb->sg, nsgs); - urb->num_sgs = nsgs; + buf->num_sgs = nsgs; + buf->len = skb->len; return skb_to_sgvec_nomark(skb, urb->sg, 0, skb->len); } @@ -689,12 +709,9 @@ mt76u_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q, struct sk_buff *skb, struct mt76_wcid *wcid, struct ieee80211_sta *sta) { - struct usb_interface *intf = to_usb_interface(dev->dev); - struct usb_device *udev = interface_to_usbdev(intf); u8 ep = q2ep(q->hw_idx); struct mt76u_buf *buf; u16 idx = q->tail; - unsigned int pipe; int err; if (q->queued == q->ndesc) @@ -708,13 +725,11 @@ mt76u_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q, buf = &q->entry[idx].ubuf; buf->done = false; - err = mt76u_tx_build_sg(skb, buf->urb); + err = mt76u_tx_build_sg(skb, buf); if (err < 0) return err; - pipe = usb_sndbulkpipe(udev, dev->usb.out_ep[ep]); - usb_fill_bulk_urb(buf->urb, udev, pipe, NULL, skb->len, - mt76u_complete_tx, buf); + mt76u_fill_bulk_urb(dev, USB_DIR_OUT, ep, buf, mt76u_complete_tx, buf); q->tail = (q->tail + 1) % q->ndesc; q->entry[idx].skb = skb; -- 2.7.5 --ZGiS0Q5IWpPtfppv--