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: [1/2] usb: xhci: Make it possible to not have a secondary HCD (3.0) From: Nicolas Boichat Message-Id: <20190502045631.229386-1-drinkcat@chromium.org> Date: Thu, 2 May 2019 12:56:29 +0800 To: Greg Kroah-Hartman Cc: Mathias Nyman , Matthias Brugger , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, Khuong Dinh , Hoan Tran List-ID: U29tZSBYSENJIGNvbnRyb2xsZXJzIG1heSBub3QgaGF2ZSBhbnkgVVNCIDMuMCBwb3J0LCBpbiB0 aGlzIGNhc2UsIGl0CmlzIG5vdCB1c2VmdWwgdG8gY3JlYXRlIGFkZCBoY2QtPnNoYXJlZF9oY2Qs IHdoaWNoIGhhcyAyIG1haW4KZG93bnNpZGVzOgogLSBBIHVzZWxlc3MgVVNCIDMuMCByb290IGh1 YiBpcyBjcmVhdGVkLgogLSBBIHdhcm5pbmcgaXMgdGhyb3duIG9uIGJvb3Q6Cmh1YiAyLTA6MS4w OiBjb25maWcgZmFpbGVkLCBodWIgZG9lc24ndCBoYXZlIGFueSBwb3J0cyEgKGVyciAtMTkpCgpU aGUgY2hhbmdlIGlzIG1vc3RseSBhYm91dCBjaGVja2luZyBpZiBoY2QtPnNoYXJlZF9oY2QgaXMg TlVMTCBiZWZvcmUKYWNjZXNzaW5nIGl0LiBUaGUgb25lIHNwZWNpYWwgY2FzZSBpcyBpbiB4aGNp X3J1biwgd2hlcmUgd2UgbmVlZCB0bwpjYWxsIHhoY2lfcnVuX2ZpbmlzaGVkIGltbWVkaWF0ZWx5 LCBpZiB0aGVyZSBpcyBubyBzZWNvbmRhcnkgaGNkLgoKU2lnbmVkLW9mZi1ieTogTmljb2xhcyBC b2ljaGF0IDxkcmlua2NhdEBjaHJvbWl1bS5vcmc+Ci0tLQoKVGhpcyBpcyBhIHJlc3BpbiBvZiBo dHRwczovL2xvcmUua2VybmVsLm9yZy9wYXRjaHdvcmsvcGF0Y2gvODYzOTkzLywKaG9wZWZ1bGx5 IGFkZHJlc3NpbmcgdGhlIGNvbW1lbnRzIHRoZXJlLiBOb3RlIHRoYXQgSSBkcm9wcGVkIHRoZSBj aGFuZ2UKaW4geGhjaS1wbGF0LmMsIGFzIEkgZG8gbm90IGhhdmUgYSBkZXZpY2UgdG8gdGVzdCBp dCwgYnV0IG1hZGUgYQpzaW1pbGFyIGNoYW5nZSBpbiB4aGNpLW10ay5jLCBpbiB0aGUgbmV4dCBw YXRjaC4KCih0aGUgQGFwbS5jb20gYWRkcmVzc2VzIHNlZW0gdG8gYm91bmNlLCBzbyBJIGFkZGVk IHNvbWUKQGFtcGVyZWNvbXB1dGluZy5jb20gaW5zdGVhZCwgaWYgc29tZWJvZHkgdGhlcmUgY2Fu IHRyYWNrIGJhY2sgdGhlCm9yaWdpbmFsIGlzc3VlLCBJJ20gaGFwcHkgdG8gcHJvdmlkZSBhIHBh dGNoIGZvciB4aGNpLXBsYXQuYyBhcyB3ZWxsKQoKZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5j IHwgIDcgKysrKy0tCiBkcml2ZXJzL3VzYi9ob3N0L3hoY2kuYyAgICAgfCA0NSArKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDM4IGluc2VydGlv bnMoKyksIDE0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhj aS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYwppbmRleCAzYWJlNzBmZjFiMWUy YWYuLjlhOWM1YTYzYWU1N2M2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWh1 Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYwpAQCAtNjI3LDggKzYyNywxMSBA QCBzdGF0aWMgaW50IHhoY2lfZW50ZXJfdGVzdF9tb2RlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwK IAkvKiBQdXQgYWxsIHBvcnRzIHRvIHRoZSBEaXNhYmxlIHN0YXRlIGJ5IGNsZWFyIFBQICovCiAJ eGhjaV9kYmcoeGhjaSwgIkRpc2FibGUgYWxsIHBvcnQgKFBQID0gMClcbiIpOwogCS8qIFBvd2Vy IG9mZiBVU0IzIHBvcnRzKi8KLQlmb3IgKGkgPSAwOyBpIDwgeGhjaS0+dXNiM19yaHViLm51bV9w b3J0czsgaSsrKQotCQl4aGNpX3NldF9wb3J0X3Bvd2VyKHhoY2ksIHhoY2ktPnNoYXJlZF9oY2Qs IGksIGZhbHNlLCBmbGFncyk7CisJaWYgKHhoY2ktPnNoYXJlZF9oY2QpIHsKKwkJZm9yIChpID0g MDsgaSA8IHhoY2ktPnVzYjNfcmh1Yi5udW1fcG9ydHM7IGkrKykKKwkJCXhoY2lfc2V0X3BvcnRf cG93ZXIoeGhjaSwgeGhjaS0+c2hhcmVkX2hjZCwgaSwgZmFsc2UsCisJCQkJCWZsYWdzKTsKKwl9 CiAJLyogUG93ZXIgb2ZmIFVTQjIgcG9ydHMqLwogCWZvciAoaSA9IDA7IGkgPCB4aGNpLT51c2Iy X3JodWIubnVtX3BvcnRzOyBpKyspCiAJCXhoY2lfc2V0X3BvcnRfcG93ZXIoeGhjaSwgeGhjaS0+ bWFpbl9oY2QsIGksIGZhbHNlLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0 L3hoY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCmluZGV4IGE5YmI3OTY3OTRlMzkzNy4u YTJjZjcxNWM1M2YyMTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYworKysg Yi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwpAQCAtNTIzLDYgKzUyMywxMCBAQCBzdGF0aWMgdm9p ZCBjb21wbGlhbmNlX21vZGVfcmVjb3Zlcnkoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAgKi8KIHN0 YXRpYyB2b2lkIGNvbXBsaWFuY2VfbW9kZV9yZWNvdmVyeV90aW1lcl9pbml0KHN0cnVjdCB4aGNp X2hjZCAqeGhjaSkKIHsKKwkvKiBObyBjb21wbGlhbmNlIG1vZGUgcmVjb3ZlcnkgbmVlZGVkIGlm IHRoZXJlIGlzIG5vIFVTQiAzLjAgaGNkLiAqLworCWlmICgheGhjaS0+c2hhcmVkX2hjZCkKKwkJ cmV0dXJuOworCiAJeGhjaS0+cG9ydF9zdGF0dXNfdTAgPSAwOwogCXRpbWVyX3NldHVwKCZ4aGNp LT5jb21wX21vZGVfcmVjb3ZlcnlfdGltZXIsIGNvbXBsaWFuY2VfbW9kZV9yZWNvdmVyeSwKIAkJ ICAgIDApOwpAQCAtNjEwLDcgKzYxNCw4IEBAIHN0YXRpYyBpbnQgeGhjaV9ydW5fZmluaXNoZWQo c3RydWN0IHhoY2lfaGNkICp4aGNpKQogCQl4aGNpX2hhbHQoeGhjaSk7CiAJCXJldHVybiAtRU5P REVWOwogCX0KLQl4aGNpLT5zaGFyZWRfaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisJ aWYgKHhoY2ktPnNoYXJlZF9oY2QpCisJCXhoY2ktPnNoYXJlZF9oY2QtPnN0YXRlID0gSENfU1RB VEVfUlVOTklORzsKIAl4aGNpLT5jbWRfcmluZ19zdGF0ZSA9IENNRF9SSU5HX1NUQVRFX1JVTk5J Tkc7CiAKIAlpZiAoeGhjaS0+cXVpcmtzICYgWEhDSV9ORUNfSE9TVCkKQEAgLTY5OCw2ICs3MDMs MTAgQEAgaW50IHhoY2lfcnVuKHN0cnVjdCB1c2JfaGNkICpoY2QpCiAKIAl4aGNpX2RlYnVnZnNf aW5pdCh4aGNpKTsKIAorCS8qIFRoZXJlIGlzIG5vIHNlY29uZGFyeSBIQ0QsIHN0YXJ0IHRoZSBo b3N0IGNvbnRyb2xsZXIgaW1tZWRpYXRlbHkuICovCisJaWYgKCF4aGNpLT5zaGFyZWRfaGNkKQor CQlyZXR1cm4geGhjaV9ydW5fZmluaXNoZWQoeGhjaSk7CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9S VF9TWU1CT0xfR1BMKHhoY2lfcnVuKTsKQEAgLTk4NCw3ICs5OTMsOCBAQCBpbnQgeGhjaV9zdXNw ZW5kKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgYm9vbCBkb193YWtldXApCiAJCXJldHVybiAwOwog CiAJaWYgKGhjZC0+c3RhdGUgIT0gSENfU1RBVEVfU1VTUEVOREVEIHx8Ci0JCQl4aGNpLT5zaGFy ZWRfaGNkLT5zdGF0ZSAhPSBIQ19TVEFURV9TVVNQRU5ERUQpCisJCQkoeGhjaS0+c2hhcmVkX2hj ZCAmJgorCQkJCXhoY2ktPnNoYXJlZF9oY2QtPnN0YXRlICE9IEhDX1NUQVRFX1NVU1BFTkRFRCkp CiAJCXJldHVybiAtRUlOVkFMOwogCiAJeGhjaV9kYmNfc3VzcGVuZCh4aGNpKTsKQEAgLTk5Nywx NSArMTAwNywxOCBAQCBpbnQgeGhjaV9zdXNwZW5kKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgYm9v bCBkb193YWtldXApCiAJeGhjaV9kYmcoeGhjaSwgIiVzOiBzdG9wcGluZyBwb3J0IHBvbGxpbmcu XG4iLCBfX2Z1bmNfXyk7CiAJY2xlYXJfYml0KEhDRF9GTEFHX1BPTExfUkgsICZoY2QtPmZsYWdz KTsKIAlkZWxfdGltZXJfc3luYygmaGNkLT5yaF90aW1lcik7Ci0JY2xlYXJfYml0KEhDRF9GTEFH X1BPTExfUkgsICZ4aGNpLT5zaGFyZWRfaGNkLT5mbGFncyk7Ci0JZGVsX3RpbWVyX3N5bmMoJnho Y2ktPnNoYXJlZF9oY2QtPnJoX3RpbWVyKTsKKwlpZiAoeGhjaS0+c2hhcmVkX2hjZCkgeworCQlj bGVhcl9iaXQoSENEX0ZMQUdfUE9MTF9SSCwgJnhoY2ktPnNoYXJlZF9oY2QtPmZsYWdzKTsKKwkJ ZGVsX3RpbWVyX3N5bmMoJnhoY2ktPnNoYXJlZF9oY2QtPnJoX3RpbWVyKTsKKwl9CiAKIAlpZiAo eGhjaS0+cXVpcmtzICYgWEhDSV9TVVNQRU5EX0RFTEFZKQogCQl1c2xlZXBfcmFuZ2UoMTAwMCwg MTUwMCk7CiAKIAlzcGluX2xvY2tfaXJxKCZ4aGNpLT5sb2NrKTsKIAljbGVhcl9iaXQoSENEX0ZM QUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOwotCWNsZWFyX2JpdChIQ0RfRkxBR19IV19B Q0NFU1NJQkxFLCAmeGhjaS0+c2hhcmVkX2hjZC0+ZmxhZ3MpOworCWlmICh4aGNpLT5zaGFyZWRf aGNkKQorCQljbGVhcl9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJnhoY2ktPnNoYXJlZF9o Y2QtPmZsYWdzKTsKIAkvKiBzdGVwIDE6IHN0b3AgZW5kcG9pbnQgKi8KIAkvKiBza2lwcGVkIGFz c3VtaW5nIHRoYXQgcG9ydCBzdXNwZW5kIGhhcyBkb25lICovCiAKQEAgLTExMDMsNyArMTExNiw4 IEBAIGludCB4aGNpX3Jlc3VtZShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGJvb2wgaGliZXJuYXRl ZCkKIAkJbXNsZWVwKDEwMCk7CiAKIAlzZXRfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZo Y2QtPmZsYWdzKTsKLQlzZXRfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZ4aGNpLT5zaGFy ZWRfaGNkLT5mbGFncyk7CisJaWYgKHhoY2ktPnNoYXJlZF9oY2QpCisJCXNldF9iaXQoSENEX0ZM QUdfSFdfQUNDRVNTSUJMRSwgJnhoY2ktPnNoYXJlZF9oY2QtPmZsYWdzKTsKIAogCXNwaW5fbG9j a19pcnEoJnhoY2ktPmxvY2spOwogCWlmICgoeGhjaS0+cXVpcmtzICYgWEhDSV9SRVNFVF9PTl9S RVNVTUUpIHx8IHhoY2ktPmJyb2tlbl9zdXNwZW5kKQpAQCAtMTE0NSw3ICsxMTU5LDkgQEAgaW50 IHhoY2lfcmVzdW1lKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgYm9vbCBoaWJlcm5hdGVkKQogCiAJ CS8qIExldCB0aGUgVVNCIGNvcmUga25vdyBfYm90aF8gcm9vdGh1YnMgbG9zdCBwb3dlci4gKi8K IAkJdXNiX3Jvb3RfaHViX2xvc3RfcG93ZXIoeGhjaS0+bWFpbl9oY2QtPnNlbGYucm9vdF9odWIp OwotCQl1c2Jfcm9vdF9odWJfbG9zdF9wb3dlcih4aGNpLT5zaGFyZWRfaGNkLT5zZWxmLnJvb3Rf aHViKTsKKwkJaWYgKHhoY2ktPnNoYXJlZF9oY2QpCisJCQl1c2Jfcm9vdF9odWJfbG9zdF9wb3dl cigKKwkJCQkJeGhjaS0+c2hhcmVkX2hjZC0+c2VsZi5yb290X2h1Yik7CiAKIAkJeGhjaV9kYmco eGhjaSwgIlN0b3AgSENEXG4iKTsKIAkJeGhjaV9oYWx0KHhoY2kpOwpAQCAtMTE4NSwxMCArMTIw MSwxMiBAQCBpbnQgeGhjaV9yZXN1bWUoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBib29sIGhpYmVy bmF0ZWQpCiAJCXJldHZhbCA9IHhoY2lfcnVuKGhjZC0+cHJpbWFyeV9oY2QpOwogCQlpZiAoIXJl dHZhbCkgewogCQkJeGhjaV9kYmcoeGhjaSwgIlN0YXJ0IHRoZSBzZWNvbmRhcnkgSENEXG4iKTsK LQkJCXJldHZhbCA9IHhoY2lfcnVuKHNlY29uZGFyeV9oY2QpOworCQkJaWYgKHNlY29uZGFyeV9o Y2QpCisJCQkJcmV0dmFsID0geGhjaV9ydW4oc2Vjb25kYXJ5X2hjZCk7CiAJCX0KIAkJaGNkLT5z dGF0ZSA9IEhDX1NUQVRFX1NVU1BFTkRFRDsKLQkJeGhjaS0+c2hhcmVkX2hjZC0+c3RhdGUgPSBI Q19TVEFURV9TVVNQRU5ERUQ7CisJCWlmICh4aGNpLT5zaGFyZWRfaGNkKQorCQkJeGhjaS0+c2hh cmVkX2hjZC0+c3RhdGUgPSBIQ19TVEFURV9TVVNQRU5ERUQ7CiAJCWdvdG8gZG9uZTsKIAl9CiAK QEAgLTEyMTYsNyArMTIzNCw4IEBAIGludCB4aGNpX3Jlc3VtZShzdHJ1Y3QgeGhjaV9oY2QgKnho Y2ksIGJvb2wgaGliZXJuYXRlZCkKIAlpZiAocmV0dmFsID09IDApIHsKIAkJLyogUmVzdW1lIHJv b3QgaHVicyBvbmx5IHdoZW4gaGF2ZSBwZW5kaW5nIGV2ZW50cy4gKi8KIAkJaWYgKHhoY2lfcGVu ZGluZ19wb3J0ZXZlbnQoeGhjaSkpIHsKLQkJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHhoY2kt PnNoYXJlZF9oY2QpOworCQkJaWYgKHhoY2ktPnNoYXJlZF9oY2QpCisJCQkJdXNiX2hjZF9yZXN1 bWVfcm9vdF9odWIoeGhjaS0+c2hhcmVkX2hjZCk7CiAJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1 YihoY2QpOwogCQl9CiAJfQpAQCAtMTIzNSw4ICsxMjU0LDEwIEBAIGludCB4aGNpX3Jlc3VtZShz dHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGJvb2wgaGliZXJuYXRlZCkKIAogCS8qIFJlLWVuYWJsZSBw b3J0IHBvbGxpbmcuICovCiAJeGhjaV9kYmcoeGhjaSwgIiVzOiBzdGFydGluZyBwb3J0IHBvbGxp bmcuXG4iLCBfX2Z1bmNfXyk7Ci0Jc2V0X2JpdChIQ0RfRkxBR19QT0xMX1JILCAmeGhjaS0+c2hh cmVkX2hjZC0+ZmxhZ3MpOwotCXVzYl9oY2RfcG9sbF9yaF9zdGF0dXMoeGhjaS0+c2hhcmVkX2hj ZCk7CisJaWYgKHhoY2ktPnNoYXJlZF9oY2QpIHsKKwkJc2V0X2JpdChIQ0RfRkxBR19QT0xMX1JI LCAmeGhjaS0+c2hhcmVkX2hjZC0+ZmxhZ3MpOworCQl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKHho Y2ktPnNoYXJlZF9oY2QpOworCX0KIAlzZXRfYml0KEhDRF9GTEFHX1BPTExfUkgsICZoY2QtPmZs YWdzKTsKIAl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKGhjZCk7CiAK 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=-9.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,T_DKIMWL_WL_HIGH,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable 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 37DD1C43219 for ; Thu, 2 May 2019 04:56:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id EBA272075E for ; Thu, 2 May 2019 04:56:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="ijpGbk6l" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725730AbfEBE4h (ORCPT ); Thu, 2 May 2019 00:56:37 -0400 Received: from mail-pf1-f193.google.com ([209.85.210.193]:45694 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725601AbfEBE4h (ORCPT ); Thu, 2 May 2019 00:56:37 -0400 Received: by mail-pf1-f193.google.com with SMTP id e24so508709pfi.12 for ; Wed, 01 May 2019 21:56:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=IkrMCqEn9oBcjz0/CtfAqnhPX22uydzYRgGmzuCpAEU=; b=ijpGbk6l9KiByD4XFUJqq6IgByHkJAUD7Ag93JRuA50qIy0MK1NCQ5ppXmY5UBmBTf MWbNrREJQi7ySq4aHqLTApAXTjP5OJaK4AoWHSzmW09GxwJ4N/fTuXH//QGN1C+vwv+m MmX8RhXDGST3fCcYjYXjf6r3RNY4rfTMozMEc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=IkrMCqEn9oBcjz0/CtfAqnhPX22uydzYRgGmzuCpAEU=; b=q+fgL25Ac7HwWM0VDUbqjd6OlPTl26in+ukuSFDeLA691bUq3ADwexxs/mGOzmrvhI CjsbBbOwrmc0BiqepGVa6RE/k1lCWX8GlzYvSLLY5Wh7itIW1i6WQnLG7IaWdSmLA82y dXGbH4Wfa/1w48P8sqOb1mSaKBNGs+EHkkvM9Lqn0t+IprV31izqRjTi64DnhT8z5EyH 9sxYtb2Rh6zfl9Y29WSe2nnc/m0lQSsRvm5MYPu+e97YBlidQjdUGM7JMw6H91ymRjKZ LWLeeAB4n43NRr/XkfHJ0JFm8NQUbpCotlYBSvqxaJksl3JEglxEo4+61oHAtpEG48xm PAXA== X-Gm-Message-State: APjAAAUzwsthE4uVVBGgqzDRs2OqieimLnvEwi0aXsHhjotgVqma/UTq nogbdPdFXlClzOVHfvkj9ojZlSVoqCw= X-Google-Smtp-Source: APXvYqw1sDUyzzDiU3Vy5sYFPwzI+iVL9D0QGXxIHbzqHHaXqc3ZpHKtv4ApVsNNmAUr61R578y0sw== X-Received: by 2002:a62:6842:: with SMTP id d63mr1875558pfc.9.1556772996219; Wed, 01 May 2019 21:56:36 -0700 (PDT) Received: from drinkcat2.tpe.corp.google.com ([2401:fa00:1:b:d8b7:33af:adcb:b648]) by smtp.gmail.com with ESMTPSA id a6sm64239470pfn.181.2019.05.01.21.56.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 21:56:35 -0700 (PDT) From: Nicolas Boichat To: Greg Kroah-Hartman Cc: Mathias Nyman , Matthias Brugger , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, Khuong Dinh , Hoan Tran Subject: [PATCH 1/2] usb: xhci: Make it possible to not have a secondary HCD (3.0) Date: Thu, 2 May 2019 12:56:29 +0800 Message-Id: <20190502045631.229386-1-drinkcat@chromium.org> X-Mailer: git-send-email 2.21.0.593.g511ec345e18-goog MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Message-ID: <20190502045629.D_N8TfzG_h3VaLUv7XLKHUC91039jx7vthbbxCO8otI@z> Some XHCI controllers may not have any USB 3.0 port, in this case, it is not useful to create add hcd->shared_hcd, which has 2 main downsides: - A useless USB 3.0 root hub is created. - A warning is thrown on boot: hub 2-0:1.0: config failed, hub doesn't have any ports! (err -19) The change is mostly about checking if hcd->shared_hcd is NULL before accessing it. The one special case is in xhci_run, where we need to call xhci_run_finished immediately, if there is no secondary hcd. Signed-off-by: Nicolas Boichat --- This is a respin of https://lore.kernel.org/patchwork/patch/863993/, hopefully addressing the comments there. Note that I dropped the change in xhci-plat.c, as I do not have a device to test it, but made a similar change in xhci-mtk.c, in the next patch. (the @apm.com addresses seem to bounce, so I added some @amperecomputing.com instead, if somebody there can track back the original issue, I'm happy to provide a patch for xhci-plat.c as well) drivers/usb/host/xhci-hub.c | 7 ++++-- drivers/usb/host/xhci.c | 45 +++++++++++++++++++++++++++---------- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c index 3abe70ff1b1e2af..9a9c5a63ae57c6d 100644 --- a/drivers/usb/host/xhci-hub.c +++ b/drivers/usb/host/xhci-hub.c @@ -627,8 +627,11 @@ static int xhci_enter_test_mode(struct xhci_hcd *xhci, /* Put all ports to the Disable state by clear PP */ xhci_dbg(xhci, "Disable all port (PP = 0)\n"); /* Power off USB3 ports*/ - for (i = 0; i < xhci->usb3_rhub.num_ports; i++) - xhci_set_port_power(xhci, xhci->shared_hcd, i, false, flags); + if (xhci->shared_hcd) { + for (i = 0; i < xhci->usb3_rhub.num_ports; i++) + xhci_set_port_power(xhci, xhci->shared_hcd, i, false, + flags); + } /* Power off USB2 ports*/ for (i = 0; i < xhci->usb2_rhub.num_ports; i++) xhci_set_port_power(xhci, xhci->main_hcd, i, false, flags); diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index a9bb796794e3937..a2cf715c53f2164 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -523,6 +523,10 @@ static void compliance_mode_recovery(struct timer_list *t) */ static void compliance_mode_recovery_timer_init(struct xhci_hcd *xhci) { + /* No compliance mode recovery needed if there is no USB 3.0 hcd. */ + if (!xhci->shared_hcd) + return; + xhci->port_status_u0 = 0; timer_setup(&xhci->comp_mode_recovery_timer, compliance_mode_recovery, 0); @@ -610,7 +614,8 @@ static int xhci_run_finished(struct xhci_hcd *xhci) xhci_halt(xhci); return -ENODEV; } - xhci->shared_hcd->state = HC_STATE_RUNNING; + if (xhci->shared_hcd) + xhci->shared_hcd->state = HC_STATE_RUNNING; xhci->cmd_ring_state = CMD_RING_STATE_RUNNING; if (xhci->quirks & XHCI_NEC_HOST) @@ -698,6 +703,10 @@ int xhci_run(struct usb_hcd *hcd) xhci_debugfs_init(xhci); + /* There is no secondary HCD, start the host controller immediately. */ + if (!xhci->shared_hcd) + return xhci_run_finished(xhci); + return 0; } EXPORT_SYMBOL_GPL(xhci_run); @@ -984,7 +993,8 @@ int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup) return 0; if (hcd->state != HC_STATE_SUSPENDED || - xhci->shared_hcd->state != HC_STATE_SUSPENDED) + (xhci->shared_hcd && + xhci->shared_hcd->state != HC_STATE_SUSPENDED)) return -EINVAL; xhci_dbc_suspend(xhci); @@ -997,15 +1007,18 @@ int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup) xhci_dbg(xhci, "%s: stopping port polling.\n", __func__); clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); del_timer_sync(&hcd->rh_timer); - clear_bit(HCD_FLAG_POLL_RH, &xhci->shared_hcd->flags); - del_timer_sync(&xhci->shared_hcd->rh_timer); + if (xhci->shared_hcd) { + clear_bit(HCD_FLAG_POLL_RH, &xhci->shared_hcd->flags); + del_timer_sync(&xhci->shared_hcd->rh_timer); + } if (xhci->quirks & XHCI_SUSPEND_DELAY) usleep_range(1000, 1500); spin_lock_irq(&xhci->lock); clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); - clear_bit(HCD_FLAG_HW_ACCESSIBLE, &xhci->shared_hcd->flags); + if (xhci->shared_hcd) + clear_bit(HCD_FLAG_HW_ACCESSIBLE, &xhci->shared_hcd->flags); /* step 1: stop endpoint */ /* skipped assuming that port suspend has done */ @@ -1103,7 +1116,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) msleep(100); set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); - set_bit(HCD_FLAG_HW_ACCESSIBLE, &xhci->shared_hcd->flags); + if (xhci->shared_hcd) + set_bit(HCD_FLAG_HW_ACCESSIBLE, &xhci->shared_hcd->flags); spin_lock_irq(&xhci->lock); if ((xhci->quirks & XHCI_RESET_ON_RESUME) || xhci->broken_suspend) @@ -1145,7 +1159,9 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) /* Let the USB core know _both_ roothubs lost power. */ usb_root_hub_lost_power(xhci->main_hcd->self.root_hub); - usb_root_hub_lost_power(xhci->shared_hcd->self.root_hub); + if (xhci->shared_hcd) + usb_root_hub_lost_power( + xhci->shared_hcd->self.root_hub); xhci_dbg(xhci, "Stop HCD\n"); xhci_halt(xhci); @@ -1185,10 +1201,12 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) retval = xhci_run(hcd->primary_hcd); if (!retval) { xhci_dbg(xhci, "Start the secondary HCD\n"); - retval = xhci_run(secondary_hcd); + if (secondary_hcd) + retval = xhci_run(secondary_hcd); } hcd->state = HC_STATE_SUSPENDED; - xhci->shared_hcd->state = HC_STATE_SUSPENDED; + if (xhci->shared_hcd) + xhci->shared_hcd->state = HC_STATE_SUSPENDED; goto done; } @@ -1216,7 +1234,8 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) if (retval == 0) { /* Resume root hubs only when have pending events. */ if (xhci_pending_portevent(xhci)) { - usb_hcd_resume_root_hub(xhci->shared_hcd); + if (xhci->shared_hcd) + usb_hcd_resume_root_hub(xhci->shared_hcd); usb_hcd_resume_root_hub(hcd); } } @@ -1235,8 +1254,10 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) /* Re-enable port polling. */ xhci_dbg(xhci, "%s: starting port polling.\n", __func__); - set_bit(HCD_FLAG_POLL_RH, &xhci->shared_hcd->flags); - usb_hcd_poll_rh_status(xhci->shared_hcd); + if (xhci->shared_hcd) { + set_bit(HCD_FLAG_POLL_RH, &xhci->shared_hcd->flags); + usb_hcd_poll_rh_status(xhci->shared_hcd); + } set_bit(HCD_FLAG_POLL_RH, &hcd->flags); usb_hcd_poll_rh_status(hcd); -- 2.21.0.593.g511ec345e18-goog