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: <20190212093035.GB12906@redhat.com> Date: Tue, 12 Feb 2019 10:30:36 +0100 To: Lorenzo Bianconi Cc: Alan Stern , Stefan Wahren , Felix Fietkau , Doug Anderson , Minas Harutyunyan , USB list , linux-wireless List-ID: T24gVHVlLCBGZWIgMTIsIDIwMTkgYXQgMDE6MDY6MDBBTSArMDEwMCwgTG9yZW56byBCaWFuY29u aSB3cm90ZToKPiA+Cj4gPiBPbiBNb24sIDExIEZlYiAyMDE5LCBTdGFuaXNsYXcgR3J1c3prYSB3 cm90ZToKPiA+Cj4gPiA+IE9uIE1vbiwgRmViIDExLCAyMDE5IGF0IDEwOjEyOjU3QU0gLTA1MDAs IEFsYW4gU3Rlcm4gd3JvdGU6Cj4gPiA+ID4gT24gTW9uLCAxMSBGZWIgMjAxOSwgTG9yZW56byBC aWFuY29uaSB3cm90ZToKPiA+ID4gPgo+ID4gPiA+ID4gSGVyZSBpdCBpcyBhIGRpZmZlcmVudCBp c3N1ZSByZXNwZWN0IHRvIHRoZSBBTUQgSU9NTVUgb25lLCBkd2MyIGhvc3QgZHJpdmVyCj4gPiA+ ID4gPiBkb2VzIG5vdCBpbXBsZW1lbnQgU0cgSS9PIHNvIHByb2JpbmcgZmFpbHMuIEkgZ3Vlc3Mg aXQgaXMgc3RpbGwgdXNlZnVsIHRvCj4gPiA+ID4gPiBpbXBsZW1lbnQgYSAnbGVnYWN5JyBtb2Rl IHRoYXQgZW5hYmxlIG10NzYgb24gaG9zdCBjb250cm9sbGVycyB0aGF0IGRvIG5vdCBpbXBsZW1l bnQKPiA+ID4gPiA+IFNHIEkvTyAocnBpIGlzIGEgdmVyeSBjb21tb24gZGV2aWNlIHNvIGl0IHdp bGwgYmUgY29vbCB0byBoYXZlIG10NzYgd29ya2luZyBvbgo+ID4gPiA+ID4gaXQpLiBNb3Jlb3Zl ciB3ZSBhcmUgbm90IHJlbW92aW5nIGZ1bmN0aW9uYWxpdGllcywgdXNlciBleHBlcmllbmNlIHdp bGwgcmVtYWluCj4gPiA+ID4gPiB0aGUgc2FtZQo+ID4gPiA+Cj4gPiA+ID4gSGFzIGFueW9uZSBj b25zaWRlcmVkIGFkZGluZyBTRyBzdXBwb3J0IHRvIGR3YzI/ICBJdCBzaG91bGRuJ3QgYmUgdmVy eQo+ID4gPiA+IGRpZmZpY3VsdC4gIFRoZSBjb3JyZXNwb25kaW5nIGNoYW5nZSBmb3IgZWhjaS1o Y2QgcmVxdWlyZWQgYWRkaW5nIG5vCj4gPiA+ID4gbW9yZSB0aGFuIGFib3V0IDMwIGxpbmVzIG9m IGNvZGUuCj4gPiA+Cj4gPiA+IFRoYXQgd291bGQgYmUgY29vbC4gUGVyaGFwcyBzb21lYm9keSB3 aXRoIGR3YzIgaGFyZHdhcmUgY291bGQgZG8gdGhpcy4KPiA+ID4KPiA+ID4gSG93ZXZlciBpbiBt dDc2eDAydSB3ZSBwb3NzaWJseSB3b3VsZCBsaWtlIHRvIHN1cHBvcnQgb3RoZXIgdXNiIGhvc3QK PiA+ID4gZHJpdmVycyB3aXRoIHNnX3RhYmxlc2l6ZSA9IDAgLiBJIHdvdWxkIGxpa2UgdG8gY2xh cmlmeSB3aGF0IGlzIGNvcnJlY3QKPiA+ID4gdG8gZG8gd2l0aCBzdWNoIGRyaXZlcnMuCj4gPiA+ Cj4gPiA+IElzIG9rIHRvIHBhc3MgYnVmZmVyIHZpYSB1cmItPnNnIHdpdGggdXJiLT5udW1fc2dz ID0gMSA/IE9yIG1heWJlCj4gPiA+IHVyYi0+bnVtX3NncyBzaG91bGQgYmUgMCB0byBwYXNzIGJ1 ZmZlciB2aWEgdXJiLT5zZyBvbiBzdWNoIGRyaXZlcnMgPwo+ID4gPiBPciBtYXliZSBub24gb2Yg YWJvdmUgaXMgY29ycmVjdCBhbmQgdGhlIG9ubHkgb3B0aW9uIHRoYXQgd2lsbCB3b3JrCj4gPiA+ IGluIDEwMCUgaXMgcGFzcyBidWZmZXIgdmlhIHVyYi0+dHJhbnNmZXJfYnVmZmVyID8KPiA+Cj4g PiBTZWUgdGhlIGtlcm5lbGRvYyBmb3IgdXNiX3NnX2luaXQoKSwgdXNiX3NnX3dhaXQoKSwgYW5k IHVzYl9zZ19jYW5jZWwoKQo+ID4gaW4gZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMuICBUaGVz ZSByb3V0aW5lcyB3aWxsIGFsd2F5cyBkbyB0aGUgcmlnaHQKPiA+IHRoaW5nIC0tIGhvd2V2ZXIg dXNiX3NnX3dhaXQoKSBtdXN0IGJlIGNhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQuCj4gPgo+ID4g QWxhbiBTdGVybgo+ID4KPiAKPiBIaSBBbGFuLAo+IAo+IEkgYWN0dWFsbHkgdXNlZCB1c2Jfc2df aW5pdCgpL3VzYl9zZ193YWl0KCkgYXMgcmVmZXJlbmNlIHRvIGltcGxlbWVudAo+IG10NzZ1IHt0 eC9yeH0gZGF0YXBhdGgsIGJ1dCBJIHdpbGwgZG91YmxlLWNoZWNrLgo+IEkgZ3Vlc3Mgd2Ugc2hv dWxkIGV2ZW4gY29uc2lkZXIgaWYgdGhlcmUgYXJlIG90aGVyIHVzYiBob3N0IGRyaXZlcnMKPiB0 aGF0IGRvIG5vdCBpbXBsZW1lbnQgU0cgSS9PIGFuZCBpdCBpcyB3b3J0aCB0byBzdXBwb3J0Lgo+ IEkgYW0gd29uZGVyaW5nIGlmIHRoZSByaWdodCBhcHByb2FjaCBpcyB0byBhZGQgU0cgdG8gdGhl IGNvbnRyb2xsZXIKPiBvbmUgYnkgb25lIG9yIGhhdmUgbGVnYWN5IEkvTyBpbiBtdDc2IChub3Qg c3VyZSB3aGF0IGlzIHRoZSAnYmVzdCcKPiBhcHByb2FjaCkKCkluIHVzYl9zZ19pbml0KCkgdXJi LT5udW1fc2dzIGlzIHNldCAwIGZvciBzZ190YWJsZXNpemUgPSAwIGNvbnRyb2xsZXJzLgpJbiBt dDc2IHdlIHNldCB1cmItPm51bV9zZ3MgdG8gMS4gSSB0aG91Z2h0IGl0IGlzIGZpbmUsIGJ1dCBu b3cgSSB0aGluawp0aGlzIGlzIGJ1Zy4gV2UgY2FuIGZpeCB0aGF0IHdpdGhvdXQgY2hhbmdpbmcg YWxsb2NhdGlvbiBtZXRob2QgYW5kCnN0aWxsIHVzZSBTRyBhbGxvY2F0aW9uLiBBdHRhY2hlZCBw YXRjaCBkbyB0aGlzLCBwbGVhc2UgY2hlY2sgaWYgaXQgd29ya3MKb24gcnBpLiBQYXRjaCBpcyBv biB0b3Agb2YgeW91ciBlcnJvciBwYXRoIGZpeGVzLgoKU3RhbmlzbGF3CkZyb20gZjc5YWMwZGY5 NjdkNDA2NTIzZDBhMWMwM2ExMzhkMTM5NGU3NjY1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK RnJvbTogU3RhbmlzbGF3IEdydXN6a2EgPHNncnVzemthQHJlZGhhdC5jb20+CkRhdGU6IFR1ZSwg MTIgRmViIDIwMTkgMTA6MDI6NTMgKzAxMDAKU3ViamVjdDogW1BBVENIXSBtdDc2dXNiOiBkbyBu b3Qgc2V0IHVyYi0+bnVtX3NncyB0byAxIGZvciBub24gU0cgdXNiIGhvc3QKIGRyaXZlcnMKClRy YWNrIG51bWJlciBvZiBzZWdtZW50cyBpbiBtdDc2dV9idWYgc3RydWN0dXJlIGFuZCBkbyBub3QK c3VibWl0IHVyYnMgd2l0aCB1cmItPm51bV9zZ3MgPSAxIGlmIHVzYiBob3N0IGRyaXZlcgpzZ190 YWJsZXNpemUgaXMgemVyby4KClRoaXMgc3VwcG9zZSBmaXggcHJvYmxlbSBvZiBtdDc2IG5vdCB3 b3JraW5nIHdpdGggc29tZSB1c2IKaG9zdCBjb250cm9sbGVycyBsaWtlIGR3YzIuCgpTaWduZWQt b2ZmLWJ5OiBTdGFuaXNsYXcgR3J1c3prYSA8c2dydXN6a2FAcmVkaGF0LmNvbT4KLS0tCiBkcml2 ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYuaCB8ICAxICsKIGRyaXZlcnMvbmV0 L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdXNiLmMgIHwgNTUgKysrKysrKysrKysrKystLS0tLS0t LS0KIDIgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2LmggYi9k cml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzYuaAppbmRleCAyZTViY2IzZmRm ZjcuLmVhZGM5MTNjMzdiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0 ZWsvbXQ3Ni9tdDc2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9t dDc2LmgKQEAgLTg2LDYgKzg2LDcgQEAgc3RydWN0IG10NzZfcXVldWVfYnVmIHsKIHN0cnVjdCBt dDc2dV9idWYgewogCXN0cnVjdCBtdDc2X2RldiAqZGV2OwogCXN0cnVjdCB1cmIgKnVyYjsKKwlp bnQgbnVtX3NnczsKIAlzaXplX3QgbGVuOwogCWJvb2wgZG9uZTsKIH07CmRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3VzYi5jIGIvZHJpdmVycy9uZXQvd2ly ZWxlc3MvbWVkaWF0ZWsvbXQ3Ni91c2IuYwppbmRleCBhMTgxMWMzOTQxNWUuLmQ4MmRlNTllYzZk YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni91c2IuYwor KysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3VzYi5jCkBAIC0yOTksMTQg KzI5OSwxNCBAQCBtdDc2dV9maWxsX3J4X3NnKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qg bXQ3NnVfYnVmICpidWYsCiAJaWYgKGkgPCBuc2dzKSB7CiAJCWludCBqOwogCi0JCWZvciAoaiA9 IG5zZ3M7IGogPCB1cmItPm51bV9zZ3M7IGorKykKKwkJZm9yIChqID0gbnNnczsgaiA8IGJ1Zi0+ bnVtX3NnczsgaisrKQogCQkJc2tiX2ZyZWVfZnJhZyhzZ192aXJ0KCZ1cmItPnNnW2pdKSk7Ci0J CXVyYi0+bnVtX3NncyA9IGk7CisJCWJ1Zi0+bnVtX3NncyA9IGk7CiAJfQogCi0JdXJiLT5udW1f c2dzID0gbWF4X3QoaW50LCBpLCB1cmItPm51bV9zZ3MpOwotCWJ1Zi0+bGVuID0gdXJiLT5udW1f c2dzICogc2dsZW4sCi0Jc2dfaW5pdF9tYXJrZXIodXJiLT5zZywgdXJiLT5udW1fc2dzKTsKKwli dWYtPm51bV9zZ3MgPSBtYXhfdChpbnQsIGksIGJ1Zi0+bnVtX3Nncyk7CisJYnVmLT5sZW4gPSBi dWYtPm51bV9zZ3MgKiBzZ2xlbiwKKwlzZ19pbml0X21hcmtlcih1cmItPnNnLCBidWYtPm51bV9z Z3MpOwogCiAJcmV0dXJuIGkgPyA6IC1FTk9NRU07CiB9CkBAIC0zMjUsNiArMzI1LDcgQEAgaW50 IG10NzZ1X2J1Zl9hbGxvYyhzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IG10NzZ1X2J1ZiAq YnVmLAogCiAJc2dfaW5pdF90YWJsZShidWYtPnVyYi0+c2csIG5zZ3MpOwogCWJ1Zi0+ZGV2ID0g ZGV2OworCWJ1Zi0+bnVtX3NncyA9IG5zZ3M7CiAKIAlyZXR1cm4gbXQ3NnVfZmlsbF9yeF9zZyhk ZXYsIGJ1ZiwgbnNncywgbGVuLCBzZ2xlbik7CiB9CkBAIC0zMzYsNyArMzM3LDcgQEAgdm9pZCBt dDc2dV9idWZfZnJlZShzdHJ1Y3QgbXQ3NnVfYnVmICpidWYpCiAJc3RydWN0IHNjYXR0ZXJsaXN0 ICpzZzsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bV9zZ3M7IGkrKykgewor CWZvciAoaSA9IDA7IGkgPCBidWYtPm51bV9zZ3M7IGkrKykgewogCQlzZyA9ICZ1cmItPnNnW2ld OwogCQlpZiAoIXNnKQogCQkJY29udGludWU7CkBAIC0zNDcsOSArMzQ4LDEwIEBAIHZvaWQgbXQ3 NnVfYnVmX2ZyZWUoc3RydWN0IG10NzZ1X2J1ZiAqYnVmKQogfQogRVhQT1JUX1NZTUJPTF9HUEwo bXQ3NnVfYnVmX2ZyZWUpOwogCi1pbnQgbXQ3NnVfc3VibWl0X2J1ZihzdHJ1Y3QgbXQ3Nl9kZXYg KmRldiwgaW50IGRpciwgaW50IGluZGV4LAotCQkgICAgIHN0cnVjdCBtdDc2dV9idWYgKmJ1Ziwg Z2ZwX3QgZ2ZwLAotCQkgICAgIHVzYl9jb21wbGV0ZV90IGNvbXBsZXRlX2ZuLCB2b2lkICpjb250 ZXh0KQorc3RhdGljIHZvaWQKK210NzZ1X2ZpbGxfYnVsa191cmIoc3RydWN0IG10NzZfZGV2ICpk ZXYsIGludCBkaXIsIGludCBpbmRleCwKKwkJICAgIHN0cnVjdCBtdDc2dV9idWYgKmJ1ZiwgdXNi X2NvbXBsZXRlX3QgY29tcGxldGVfZm4sCisJCSAgICB2b2lkICpjb250ZXh0KQogewogCXN0cnVj dCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYtPmRldik7CiAJc3Ry dWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwpAQCAtMzYw LDkgKzM2MiwyNSBAQCBpbnQgbXQ3NnVfc3VibWl0X2J1ZihzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwg aW50IGRpciwgaW50IGluZGV4LAogCWVsc2UKIAkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZSh1ZGV2 LCBkZXYtPnVzYi5vdXRfZXBbaW5kZXhdKTsKIAotCXVzYl9maWxsX2J1bGtfdXJiKGJ1Zi0+dXJi LCB1ZGV2LCBwaXBlLCBOVUxMLCBidWYtPmxlbiwKLQkJCSAgY29tcGxldGVfZm4sIGNvbnRleHQp OworCXVzYl9maWxsX2J1bGtfdXJiKGJ1Zi0+dXJiLCB1ZGV2LCBwaXBlLCBOVUxMLCBidWYtPmxl biwgY29tcGxldGVfZm4sCisJCQkgIGNvbnRleHQpOworCisJaWYgKHVkZXYtPmJ1cy0+c2dfdGFi bGVzaXplID4gMCkgeworCQlidWYtPnVyYi0+bnVtX3NncyA9IGJ1Zi0+bnVtX3NnczsKKwl9IGVs c2UgeworCQlXQVJOX09OX09OQ0UoYnVmLT5udW1fc2dzICE9IDEpOworCQkvKiBTZWUgdXNiX3Nn X2luaXQoKSAqLworCQlidWYtPnVyYi0+bnVtX3NncyA9IDA7CisJCWlmICghUGFnZUhpZ2hNZW0o c2dfcGFnZShidWYtPnVyYi0+c2cpKSkKKwkJCWJ1Zi0+dXJiLT50cmFuc2Zlcl9idWZmZXIgPSBz Z192aXJ0KGJ1Zi0+dXJiLT5zZyk7CisJfQorfQogCitpbnQgbXQ3NnVfc3VibWl0X2J1ZihzdHJ1 Y3QgbXQ3Nl9kZXYgKmRldiwgaW50IGRpciwgaW50IGluZGV4LAorCQkgICAgIHN0cnVjdCBtdDc2 dV9idWYgKmJ1ZiwgZ2ZwX3QgZ2ZwLAorCQkgICAgIHVzYl9jb21wbGV0ZV90IGNvbXBsZXRlX2Zu LCB2b2lkICpjb250ZXh0KQoreworCW10NzZ1X2ZpbGxfYnVsa191cmIoZGV2LCBkaXIsIGluZGV4 LCBidWYsIGNvbXBsZXRlX2ZuLCBjb250ZXh0KTsKIAlyZXR1cm4gdXNiX3N1Ym1pdF91cmIoYnVm LT51cmIsIGdmcCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtdDc2dV9zdWJtaXRfYnVmKTsKQEAg LTY3MiwxMCArNjkwLDExIEBAIHN0YXRpYyB2b2lkIG10NzZ1X2NvbXBsZXRlX3R4KHN0cnVjdCB1 cmIgKnVyYikKIH0KIAogc3RhdGljIGludAotbXQ3NnVfdHhfYnVpbGRfc2coc3RydWN0IHNrX2J1 ZmYgKnNrYiwgc3RydWN0IHVyYiAqdXJiKQorbXQ3NnVfdHhfYnVpbGRfc2coc3RydWN0IHNrX2J1 ZmYgKnNrYiwgc3RydWN0IG10NzZ1X2J1ZiAqYnVmKQogewogCWludCBuc2dzID0gMSArIHNrYl9z aGluZm8oc2tiKS0+bnJfZnJhZ3M7CiAJc3RydWN0IHNrX2J1ZmYgKml0ZXI7CisJc3RydWN0IHVy YiAqdXJiID0gYnVmLT51cmI7CiAKIAlza2Jfd2Fsa19mcmFncyhza2IsIGl0ZXIpCiAJCW5zZ3Mg Kz0gMSArIHNrYl9zaGluZm8oaXRlciktPm5yX2ZyYWdzOwpAQCAtNjg0LDcgKzcwMyw4IEBAIG10 NzZ1X3R4X2J1aWxkX3NnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1cmIgKnVyYikKIAog CW5zZ3MgPSBtaW5fdChpbnQsIE1UX1NHX01BWF9TSVpFLCBuc2dzKTsKIAlzZ19pbml0X21hcmtl cih1cmItPnNnLCBuc2dzKTsKLQl1cmItPm51bV9zZ3MgPSBuc2dzOworCWJ1Zi0+bnVtX3NncyA9 IG5zZ3M7CisJYnVmLT5sZW4gPSBza2ItPmxlbjsKIAogCXJldHVybiBza2JfdG9fc2d2ZWNfbm9t YXJrKHNrYiwgdXJiLT5zZywgMCwgc2tiLT5sZW4pOwogfQpAQCAtNjk0LDEyICs3MTQsOSBAQCBt dDc2dV90eF9xdWV1ZV9za2Ioc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBtdDc2X3F1ZXVl ICpxLAogCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkLAog CQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQogewotCXN0cnVjdCB1c2JfaW50ZXJmYWNl ICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYtPmRldik7Ci0Jc3RydWN0IHVzYl9kZXZpY2Ug KnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCXU4IGVwID0gcTJlcChxLT5od19p ZHgpOwogCXN0cnVjdCBtdDc2dV9idWYgKmJ1ZjsKIAl1MTYgaWR4ID0gcS0+dGFpbDsKLQl1bnNp Z25lZCBpbnQgcGlwZTsKIAlpbnQgZXJyOwogCiAJaWYgKHEtPnF1ZXVlZCA9PSBxLT5uZGVzYykK QEAgLTcxMiwxMyArNzI5LDExIEBAIG10NzZ1X3R4X3F1ZXVlX3NrYihzdHJ1Y3QgbXQ3Nl9kZXYg KmRldiwgc3RydWN0IG10NzZfcXVldWUgKnEsCiAJYnVmID0gJnEtPmVudHJ5W2lkeF0udWJ1ZjsK IAlidWYtPmRvbmUgPSBmYWxzZTsKIAotCWVyciA9IG10NzZ1X3R4X2J1aWxkX3NnKHNrYiwgYnVm LT51cmIpOworCWVyciA9IG10NzZ1X3R4X2J1aWxkX3NnKHNrYiwgYnVmKTsKIAlpZiAoZXJyIDwg MCkKIAkJcmV0dXJuIGVycjsKIAotCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUodWRldiwgZGV2LT51 c2Iub3V0X2VwW2VwXSk7Ci0JdXNiX2ZpbGxfYnVsa191cmIoYnVmLT51cmIsIHVkZXYsIHBpcGUs IE5VTEwsIHNrYi0+bGVuLAotCQkJICBtdDc2dV9jb21wbGV0ZV90eCwgYnVmKTsKKwltdDc2dV9m aWxsX2J1bGtfdXJiKGRldiwgVVNCX0RJUl9PVVQsIGVwLCBidWYsIG10NzZ1X2NvbXBsZXRlX3R4 LCBidWYpOwogCiAJcS0+dGFpbCA9IChxLT50YWlsICsgMSkgJSBxLT5uZGVzYzsKIAlxLT5lbnRy eVtpZHhdLnNrYiA9IHNrYjsK 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=-8.5 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,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 C3A90C282C4 for ; Tue, 12 Feb 2019 09:30:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 34C10218A3 for ; Tue, 12 Feb 2019 09:30:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728832AbfBLJam (ORCPT ); Tue, 12 Feb 2019 04:30:42 -0500 Received: from mx1.redhat.com ([209.132.183.28]:45150 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726026AbfBLJam (ORCPT ); Tue, 12 Feb 2019 04:30:42 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 37243C05D419; Tue, 12 Feb 2019 09:30:41 +0000 (UTC) Received: from localhost (ovpn-204-125.brq.redhat.com [10.40.204.125]) by smtp.corp.redhat.com (Postfix) with ESMTP id 71B3C62943; Tue, 12 Feb 2019 09:30:37 +0000 (UTC) Date: Tue, 12 Feb 2019 10:30:36 +0100 From: Stanislaw Gruszka To: Lorenzo Bianconi Cc: Alan Stern , Stefan Wahren , Felix Fietkau , Doug Anderson , Minas Harutyunyan , USB list , linux-wireless Subject: Re: [BUG] mt76x0u: Probing issues on Raspberry Pi 3 B+ Message-ID: <20190212093035.GB12906@redhat.com> References: <20190211173315.GE6292@redhat.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="FL5UXtIhxfXey3p5" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.8.3 (2017-05-23) X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Tue, 12 Feb 2019 09:30:41 +0000 (UTC) Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org --FL5UXtIhxfXey3p5 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Tue, Feb 12, 2019 at 01:06:00AM +0100, Lorenzo Bianconi wrote: > > > > On Mon, 11 Feb 2019, Stanislaw Gruszka wrote: > > > > > On Mon, Feb 11, 2019 at 10:12:57AM -0500, Alan Stern wrote: > > > > On Mon, 11 Feb 2019, Lorenzo Bianconi wrote: > > > > > > > > > Here it is a different issue respect to the AMD IOMMU one, dwc2 host driver > > > > > does not implement SG I/O so probing fails. I guess it is still useful to > > > > > implement a 'legacy' mode that enable mt76 on host controllers that do not implement > > > > > SG I/O (rpi is a very common device so it will be cool to have mt76 working on > > > > > it). Moreover we are not removing functionalities, user experience will remain > > > > > the same > > > > > > > > Has anyone considered adding SG support to dwc2? It shouldn't be very > > > > difficult. The corresponding change for ehci-hcd required adding no > > > > more than about 30 lines of code. > > > > > > That would be cool. Perhaps somebody with dwc2 hardware could do this. > > > > > > However in mt76x02u we possibly would like to support other usb host > > > drivers with sg_tablesize = 0 . I would like to clarify what is correct > > > to do with such drivers. > > > > > > Is ok to pass buffer via urb->sg with urb->num_sgs = 1 ? Or maybe > > > urb->num_sgs should be 0 to pass buffer via urb->sg on such drivers ? > > > Or maybe non of above is correct and the only option that will work > > > in 100% is pass buffer via urb->transfer_buffer ? > > > > See the kerneldoc for usb_sg_init(), usb_sg_wait(), and usb_sg_cancel() > > in drivers/usb/core/message.c. These routines will always do the right > > thing -- however usb_sg_wait() must be called in process context. > > > > Alan Stern > > > > Hi Alan, > > I actually used usb_sg_init()/usb_sg_wait() as reference to implement > mt76u {tx/rx} datapath, but I will double-check. > I guess we should even consider if there are other usb host drivers > that do not implement SG I/O and it is worth to support. > I am wondering if the right approach is to add SG to the controller > one by one or have legacy I/O in mt76 (not sure what is the 'best' > approach) 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. Stanislaw --FL5UXtIhxfXey3p5 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 f79ac0df967d406523d0a1c03a138d1394e7665a Mon Sep 17 00:00:00 2001 From: Stanislaw Gruszka Date: Tue, 12 Feb 2019 10:02:53 +0100 Subject: [PATCH] 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 + drivers/net/wireless/mediatek/mt76/usb.c | 55 ++++++++++++++--------- 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h index 2e5bcb3fdff7..eadc913c37b6 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/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c index a1811c39415e..d82de59ec6dc 100644 --- a/drivers/net/wireless/mediatek/mt76/usb.c +++ b/drivers/net/wireless/mediatek/mt76/usb.c @@ -299,14 +299,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; } @@ -325,6 +325,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); } @@ -336,7 +337,7 @@ void mt76u_buf_free(struct mt76u_buf *buf) struct scatterlist *sg; int i; - for (i = 0; i < urb->num_sgs; i++) { + for (i = 0; i < buf->num_sgs; i++) { sg = &urb->sg[i]; if (!sg) continue; @@ -347,9 +348,10 @@ void mt76u_buf_free(struct mt76u_buf *buf) } 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); @@ -360,9 +362,25 @@ 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); + 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); @@ -672,10 +690,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; @@ -684,7 +703,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); } @@ -694,12 +714,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) @@ -712,13 +729,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.19.2 --FL5UXtIhxfXey3p5--