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: [V2,2/8] phy: tegra: xusb: t210: add usb3 port fake support From: Thierry Reding Message-Id: <20190425145505.GD24213@ulmo> Date: Thu, 25 Apr 2019 16:55:05 +0200 To: Nagarjuna Kristam Cc: balbi@kernel.org, gregkh@linuxfoundation.org, jonathanh@nvidia.com, linux-tegra@vger.kernel.org, linux-usb@vger.kernel.org List-ID: T24gTW9uLCBNYXIgMTEsIDIwMTkgYXQgMDQ6NDE6NTBQTSArMDUzMCwgTmFnYXJqdW5hIEtyaXN0 YW0gd3JvdGU6Cj4gT24gVGVncmEyMTAsIHVzYjIgb25seSBvdGcvcGVyaXBoZXJhbCBwb3J0cyBk b250IHdvcmsgaW4gZGV2aWNlIG1vZGUuCj4gVGhleSBuZWVkIGFuIGFzc29zY2lhdGVkIHVzYjMg cG9ydCB0byB3b3JrIGluIGRldmljZSBtb2RlLiBJZGVudGlmeQo+IGFuIHVudXNlZCB1c2IzIHBv cnQgYW5kIGFzc2lnbiBpdCBhcyBhIGZha2UgVVNCMyBwb3J0IHRvIFVTQjIgb25seQo+IHBvcnQg d2hvc2UgbW9kZSBpcyBvdGcvcGVyaXBoZXJhbAo+IAo+IEJhc2VkIG9uIHdvcmsgYnkgQkggSHNp ZWggPGJoc2llaEBudmlkaWEuY29tPi4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBOYWdhcmp1bmEgS3Jp c3RhbSA8bmtyaXN0YW1AbnZpZGlhLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9waHkvdGVncmEveHVz Yi10ZWdyYTIxMC5jIHwgNDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gIGRyaXZlcnMvcGh5L3RlZ3JhL3h1c2IuYyAgICAgICAgICB8IDI5ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysKPiAgZHJpdmVycy9waHkvdGVncmEveHVzYi5oICAgICAgICAgIHwgIDYg KysrKysrCj4gIDMgZmlsZXMgY2hhbmdlZCwgNzUgaW5zZXJ0aW9ucygrKQoKSSB0aGluayB0aGlz IGxvb2tzIGEgd2hvbGUgbG90IGJldHRlciB0aGFuIHRoZSBpbml0aWFsIHZlcnNpb24uIE9uZSBv cgp0d28gbWlub3IgY29tbWVudHMgYmVsb3cuCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS90 ZWdyYS94dXNiLXRlZ3JhMjEwLmMgYi9kcml2ZXJzL3BoeS90ZWdyYS94dXNiLXRlZ3JhMjEwLmMK PiBpbmRleCA0YmVlYmNjLi40ODQ3OGJjNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3BoeS90ZWdy YS94dXNiLXRlZ3JhMjEwLmMKPiArKysgYi9kcml2ZXJzL3BoeS90ZWdyYS94dXNiLXRlZ3JhMjEw LmMKPiBAQCAtNTgsNiArNTgsNyBAQAo+ICAjZGVmaW5lIFhVU0JfUEFEQ1RMX1NTX1BPUlRfTUFQ X1BPUlRYX01BUF9TSElGVCh4KSAoKHgpICogNSkKPiAgI2RlZmluZSBYVVNCX1BBRENUTF9TU19Q T1JUX01BUF9QT1JUWF9NQVBfTUFTSyh4KSAoMHg3IDw8ICgoeCkgKiA1KSkKPiAgI2RlZmluZSBY VVNCX1BBRENUTF9TU19QT1JUX01BUF9QT1JUWF9NQVAoeCwgdikgKCgodikgJiAweDcpIDw8ICgo eCkgKiA1KSkKPiArI2RlZmluZSBYVVNCX1BBRENUTF9TU19QT1JUX01BUF9QT1JUX0RJU0FCTEVE IDB4Nwo+ICAKPiAgI2RlZmluZSBYVVNCX1BBRENUTF9FTFBHX1BST0dSQU0xIDB4MDI0Cj4gICNk ZWZpbmUgWFVTQl9QQURDVExfRUxQR19QUk9HUkFNMV9BVVhfTVVYX0xQMF9WQ09SRV9ET1dOICgx IDw8IDMxKQo+IEBAIC05NTIsNiArOTUzLDE1IEBAIHN0YXRpYyBpbnQgdGVncmEyMTBfdXNiMl9w aHlfcG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQo+ICAKPiAgCXByaXYgPSB0b190ZWdyYTIxMF94 dXNiX3BhZGN0bChwYWRjdGwpOwo+ICAKPiArCWlmIChwb3J0LT51c2IzX3BvcnRfZmFrZSAhPSAt MSkgewo+ICsJCXZhbHVlID0gcGFkY3RsX3JlYWRsKHBhZGN0bCwgWFVTQl9QQURDVExfU1NfUE9S VF9NQVApOwo+ICsJCXZhbHVlICY9IH5YVVNCX1BBRENUTF9TU19QT1JUX01BUF9QT1JUWF9NQVBf TUFTSygKPiArCQkJCQlwb3J0LT51c2IzX3BvcnRfZmFrZSk7Cj4gKwkJdmFsdWUgfD0gWFVTQl9Q QURDVExfU1NfUE9SVF9NQVBfUE9SVFhfTUFQKAo+ICsJCQkJCXBvcnQtPnVzYjNfcG9ydF9mYWtl LCBpbmRleCk7Cj4gKwkJcGFkY3RsX3dyaXRlbChwYWRjdGwsIHZhbHVlLCBYVVNCX1BBRENUTF9T U19QT1JUX01BUCk7Cj4gKwl9Cj4gKwo+ICAJdmFsdWUgPSBwYWRjdGxfcmVhZGwocGFkY3RsLCBY VVNCX1BBRENUTF9VU0IyX0JJQVNfUEFEX0NUTDApOwo+ICAJdmFsdWUgJj0gfigoWFVTQl9QQURD VExfVVNCMl9CSUFTX1BBRF9DVEwwX0hTX1NRVUVMQ0hfTEVWRUxfTUFTSyA8PAo+ICAJCSAgICBY VVNCX1BBRENUTF9VU0IyX0JJQVNfUEFEX0NUTDBfSFNfU1FVRUxDSF9MRVZFTF9TSElGVCkgfAo+ IEBAIC0xMDg2LDYgKzEwOTYsMTUgQEAgc3RhdGljIGludCB0ZWdyYTIxMF91c2IyX3BoeV9wb3dl cl9vZmYoc3RydWN0IHBoeSAqcGh5KQo+ICAKPiAgCW11dGV4X2xvY2soJnBhZGN0bC0+bG9jayk7 Cj4gIAo+ICsJaWYgKHBvcnQtPnVzYjNfcG9ydF9mYWtlICE9IC0xKSB7Cj4gKwkJdmFsdWUgPSBw YWRjdGxfcmVhZGwocGFkY3RsLCBYVVNCX1BBRENUTF9TU19QT1JUX01BUCk7Cj4gKwkJdmFsdWUg Jj0gflhVU0JfUEFEQ1RMX1NTX1BPUlRfTUFQX1BPUlRYX01BUF9NQVNLKAo+ICsJCQkJCXBvcnQt PnVzYjNfcG9ydF9mYWtlKTsKPiArCQl2YWx1ZSB8PSBYVVNCX1BBRENUTF9TU19QT1JUX01BUF9Q T1JUWF9NQVAocG9ydC0+dXNiM19wb3J0X2Zha2UsCj4gKwkJCQkJWFVTQl9QQURDVExfU1NfUE9S VF9NQVBfUE9SVF9ESVNBQkxFRCk7Cj4gKwkJcGFkY3RsX3dyaXRlbChwYWRjdGwsIHZhbHVlLCBY VVNCX1BBRENUTF9TU19QT1JUX01BUCk7Cj4gKwl9Cj4gKwo+ICAJaWYgKFdBUk5fT04ocGFkLT5l bmFibGUgPT0gMCkpCj4gIAkJZ290byBvdXQ7Cj4gIAo+IEBAIC0xNzg0LDYgKzE4MDMsMjcgQEAg c3RhdGljIGNvbnN0IHN0cnVjdCB0ZWdyYV94dXNiX3BhZF9zb2MgKiBjb25zdCB0ZWdyYTIxMF9w YWRzW10gPSB7Cj4gIAo+ICBzdGF0aWMgaW50IHRlZ3JhMjEwX3VzYjJfcG9ydF9lbmFibGUoc3Ry dWN0IHRlZ3JhX3h1c2JfcG9ydCAqcG9ydCkKPiAgewo+ICsJc3RydWN0IHRlZ3JhX3h1c2JfdXNi Ml9wb3J0ICp1c2IyID0gdG9fdXNiMl9wb3J0KHBvcnQpOwo+ICsJc3RydWN0IHRlZ3JhX3h1c2Jf cGFkY3RsICpwYWRjdGwgPSBwb3J0LT5wYWRjdGw7Cj4gKwo+ICsJLyogRGlzYWJsZSB1c2IzX3Bv cnRfZmFrZSB1c2FnZSBieSBkZWZhdWx0IGFuZCBhc3NpZ24gaWYgbmVlZGVkICovCj4gKwl1c2Iy LT51c2IzX3BvcnRfZmFrZSA9IC0xOwo+ICsJaWYgKHVzYjIgJiYgKHVzYjItPm1vZGUgPT0gVVNC X0RSX01PREVfT1RHIHx8Cj4gKwkJICAgIHVzYjItPm1vZGUgPT0gVVNCX0RSX01PREVfUEVSSVBI RVJBTCkpIHsKPiArCQlpZiAoIXRlZ3JhX3h1c2JfdXNiM19wb3J0X2hhc19jb21wYW5pb24ocGFk Y3RsLCBwb3J0LT5pbmRleCkpIHsKPiArCQkJaW50IGZha2UgPSB0ZWdyYV94dXNiX2ZpbmRfdW51 c2VkX3VzYjNfcG9ydChwYWRjdGwpOwo+ICsKPiArCQkJaWYgKGZha2UgPj0gMCkgewo+ICsJCQkJ ZGV2X2RiZygmcG9ydC0+ZGV2LCAiRm91bmQgdW51c2VkIHVzYjMgcG9ydDogJWRcbiIsCj4gKwkJ CQkJIGZha2UpOwo+ICsJCQkJdXNiMi0+dXNiM19wb3J0X2Zha2UgPSBmYWtlOwo+ICsJCQl9IGVs c2Ugewo+ICsJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAidXNiMi0ldSBoYXMgbmVpdGhlciBhIGNv bXBhbmlvbiBub3IgYW4gdW51c2VkIHVzYjMgcG9ydCB0byBmYWtlIGl0XG4iLAo+ICsJCQkJCXBv cnQtPmluZGV4KTsKPiArCQkJCXJldHVybiAtRU5PREVWOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfQoK R2VuZXJhbGx5IGl0J3MgcHJlZmVyYWJsZSB0byBjaGVjayBmb3IgZXJyb3JzIGFuZCBkZWFsIHdp dGggc3VjY2VzcyBpbgp0aGUgcmVndWxhciBjb2RlIHBhdGguIFNvIHRoZSBhYm92ZSB3b3VsZCBi ZToKCgkJCWlmIChmYWtlIDwgMCkgewoJCQkJZGV2X2VyciguLi4pOwoJCQkJcmV0dXJuIC1FTk9E RVY7CgkJCX0KCgkJCWRldl9kYmcoLi4uKTsKCQkJLi4uCgpBbHNvLCB0aGUgZXJyb3IgbWVzc2Fn ZSBpcyBzbGlnaHRseSByZWR1bmRhbnQgYmVjYXVzZSAmcG9ydC0+ZGV2IHdpbGwKYWxyZWFkeSBv dXRwdXQgdGhlIHVzYjItJXUgcGFydC4gQWxzbywgcGVyaGFwcyB0cnkgdG8gbWFrZSB0aGF0IG1l c3NhZ2UKYSBsaXR0bGUgc2hvcnRlci4gU29tZXRoaW5nIGxpa2U6CgoJZGV2X2VycigmcG9ydC0+ ZGV2LCAibm8gdW51c2VkIFVTQjMgcG9ydHMgYXZhaWxhYmxlXG4iKTsKCkFsc28sIEkgZG9uJ3Qg dGhpbmsgdGhpcyBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gdGhpcy4gVGhlcmUncyByZWFsbHkK bm8gd2F5IGZvciB0aGUgLT5lbmFibGUoKSBjYWxsYmFja3MgdG8gZmFpbC4gT3IgYXQgbGVhc3Qg ZmFpbHVyZXMgd2lsbApiZSBpZ25vcmVkLCBzbyB0aGVyZSdzIG5vIGNoYW5jZSBmb3IgdGhlIGRy aXZlciB0byBkbyBhbnl0aGluZyBhYm91dCB0aGUKZmFpbHVyZS4gSXQgYWxzbyBsb29rcyBzb21l d2hhdCB0YWNrZWQgb24uCgpCdXQgaG93IGFib3V0IGlmIHdlIGRvIHRoaXMgYXMgcGFydCBvZiB0 ZWdyYV94dXNiX3VzYjNfcG9ydF9wYXJzZV9kdCgpCm9yIHRlZ3JhX3h1c2JfYWRkX3VzYjNfcG9y dCgpIGFscmVhZHk/IFRoZSBmb3JtZXIgaXMgd2hlcmUgd2UgcmVhZCB0aGUKVVNCMiBjb21wYW5p b24gcG9ydCBpbmRleCBmcm9tIERUIHNvIHdlIGtub3cgZXhhY3RseSB3aGljaCBVU0IyIHBvcnQg dG8KYXNzb2NpYXRlIHdpdGggYSBnaXZlbiBVU0IzIHBvcnQuIFNvIGluIHRoZSBsYXR0ZXIgd2Ug Y291bGQgaXRlcmF0ZSBvdmVyCnRoZSBVU0IyIHBvcnRzICh3aGljaCBoYXZlIGFscmVhZHkgYmVl biBzZXQgdXApIGFuZCBlc3RhYmxpc2ggYSBiYWNrbGluawp0byB0aGUgVVNCMyBjb21wYW5pb24u CgpTb21ldGhpbmcgbGlrZSB0aGlzLCBpbiB0ZWdyYV94dXNiX2FkZF91c2IzX3BvcnQoKToKCglz dHJ1Y3QgdGVncmFfeHVzYl91c2IyX3BvcnQgKmNvbXBhbmlvbjsKCglmb3IgKGkgPSAwOyBpIDwg cGFkY3RsLT5zb2MtPnBvcnRzLnVzYjIuY291bnQ7IGkrKykgewoJCWNvbXBhbmlvbiA9IHRlZ3Jh X3h1c2JfZmluZF91c2IyX3BvcnQocGFkY3RsLCBpKTsKCQlpZiAoIWNvbXBhbmlvbikKCQkJY29u dGludWU7CgoJCWlmIChjb21wYW5pb24tPmJhc2UuaW5kZXggPT0gdXNiMy0+cG9ydCkgewoJCQlj b21wYW5pb24tPnBvcnQgPSBpbmRleDsKCQkJYnJlYWs7CgkJfQoJfQoKVGhlbiwgYXMgcGFydCBv ZiB0ZWdyYV94dXNiX3NldHVwX3BvcnRzKCkgd2UgY291bGQgYWRkIGZ1bmN0aW9uYWxpdHkgdG8K aG9vayB1cCBhIGZha2UgcG9ydCBpZiBubyBjb21wYW5pb24gaXMgYXZhaWxhYmxlLCBtdWNoIGxp a2UgeW91J3JlIGRvaW5nCmFib3ZlLiBQZXJoYXBzIHdlIHNob3VsZCBpbnRyb2R1Y2UgYSBuZXcg LT5zZXR1cCgpIGNhbGxiYWNrIHRvIHRoZSBwb3J0Cm9wcyB0byBlbmNhcHN1bGF0ZSB0aGlzLCBv ciBwZXJoYXBzIGFkZCBhIGZsYWcgdG8gdGVncmFfeHVzYl9wYWRjdGxfc29jCnRoYXQgaXMgc2V0 IHRvIHRydWUgb24gU29DIGdlbmVyYXRpb25zIHRoYXQgbmVlZCB0aGUgZmFrZSBVU0IzIHBvcnQu CgpUaGllcnJ5Cgo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv cGh5L3RlZ3JhL3h1c2IuYyBiL2RyaXZlcnMvcGh5L3RlZ3JhL3h1c2IuYwo+IGluZGV4IGM2MTc4 YTAuLmU4OTc0NmQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9waHkvdGVncmEveHVzYi5jCj4gKysr IGIvZHJpdmVycy9waHkvdGVncmEveHVzYi5jCj4gQEAgLTc5OSw2ICs3OTksMzUgQEAgc3RhdGlj IHZvaWQgX190ZWdyYV94dXNiX3JlbW92ZV9wb3J0cyhzdHJ1Y3QgdGVncmFfeHVzYl9wYWRjdGwg KnBhZGN0bCkKPiAgCX0KPiAgfQo+ICAKPiArYm9vbCB0ZWdyYV94dXNiX3VzYjNfcG9ydF9oYXNf Y29tcGFuaW9uKHN0cnVjdCB0ZWdyYV94dXNiX3BhZGN0bCAqcGFkY3RsLAo+ICsJCQkJCQkgICAg ICAgdW5zaWduZWQgaW50IGluZGV4KQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCXN0cnVj dCB0ZWdyYV94dXNiX3VzYjNfcG9ydCAqdXNiMzsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgcGFk Y3RsLT5zb2MtPnBvcnRzLnVzYjMuY291bnQ7IGkrKykgewo+ICsJCXVzYjMgPSB0ZWdyYV94dXNi X2ZpbmRfdXNiM19wb3J0KHBhZGN0bCwgaSk7Cj4gKwkJaWYgKHVzYjMgJiYgdXNiMy0+cG9ydCA9 PSBpbmRleCkKPiArCQkJcmV0dXJuIHRydWU7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ ICt9Cj4gKwo+ICtpbnQgdGVncmFfeHVzYl9maW5kX3VudXNlZF91c2IzX3BvcnQoc3RydWN0IHRl Z3JhX3h1c2JfcGFkY3RsICpwYWRjdGwpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7 Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgcGFkY3RsLT5zb2Mt PnBvcnRzLnVzYjMuY291bnQ7IGkrKykgewo+ICsJCW5wID0gdGVncmFfeHVzYl9maW5kX3BvcnRf bm9kZShwYWRjdGwsICJ1c2IzIiwgaSk7Cj4gKwkJaWYgKCFucCB8fCAhb2ZfZGV2aWNlX2lzX2F2 YWlsYWJsZShucCkpCj4gKwkJCXJldHVybiBpOwo+ICsJfQo+ICsKPiArCXJldHVybiAtRU5PREVW Owo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IHRlZ3JhX3h1c2Jfc2V0dXBfcG9ydHMoc3RydWN0IHRl Z3JhX3h1c2JfcGFkY3RsICpwYWRjdGwpCj4gIHsKPiAgCXN0cnVjdCB0ZWdyYV94dXNiX3BvcnQg KnBvcnQ7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3RlZ3JhL3h1c2IuaCBiL2RyaXZlcnMv cGh5L3RlZ3JhL3h1c2IuaAo+IGluZGV4IDE3Y2M4ZGMuLmIyNjMxNjUgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9waHkvdGVncmEveHVzYi5oCj4gKysrIGIvZHJpdmVycy9waHkvdGVncmEveHVzYi5o Cj4gQEAgLTI3NCw2ICsyNzQsNyBAQCBzdHJ1Y3QgdGVncmFfeHVzYl91c2IyX3BvcnQgewo+ICAJ c3RydWN0IHJlZ3VsYXRvciAqc3VwcGx5Owo+ICAJYm9vbCBpbnRlcm5hbDsKPiAgCWVudW0gdXNi X2RyX21vZGUgbW9kZTsKPiArCWludCB1c2IzX3BvcnRfZmFrZTsKPiAgfTsKPiAgCj4gIHN0YXRp YyBpbmxpbmUgc3RydWN0IHRlZ3JhX3h1c2JfdXNiMl9wb3J0ICoKPiBAQCAtNDEzLDYgKzQxNCwx MSBAQCBzdHJ1Y3QgdGVncmFfeHVzYl9sYW5lICp0ZWdyYV94dXNiX2ZpbmRfbGFuZShzdHJ1Y3Qg dGVncmFfeHVzYl9wYWRjdGwgKnBhZGN0bCwKPiAgCQkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUs Cj4gIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpOwo+ICAKPiArYm9vbCB0ZWdyYV94dXNi X3VzYjNfcG9ydF9oYXNfY29tcGFuaW9uKHN0cnVjdCB0ZWdyYV94dXNiX3BhZGN0bCAqcGFkY3Rs LAo+ICsJCQkJCXVuc2lnbmVkIGludCBpbmRleCk7Cj4gKwo+ICtpbnQgdGVncmFfeHVzYl9maW5k X3VudXNlZF91c2IzX3BvcnQoc3RydWN0IHRlZ3JhX3h1c2JfcGFkY3RsICpwYWRjdGwpOwo+ICsK PiAgI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfVEVHUkFfMTI0X1NPQykgfHwgZGVmaW5lZChDT05G SUdfQVJDSF9URUdSQV8xMzJfU09DKQo+ICBleHRlcm4gY29uc3Qgc3RydWN0IHRlZ3JhX3h1c2Jf cGFkY3RsX3NvYyB0ZWdyYTEyNF94dXNiX3BhZGN0bF9zb2M7Cj4gICNlbmRpZgo+IC0tIAo+IDIu Ny40Cj4K 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.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, 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 2AD06C43219 for ; Thu, 25 Apr 2019 14:55:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2B3B3206BF for ; Thu, 25 Apr 2019 14:55:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ObFei7KN" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727347AbfDYOzK (ORCPT ); Thu, 25 Apr 2019 10:55:10 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:36365 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726155AbfDYOzK (ORCPT ); Thu, 25 Apr 2019 10:55:10 -0400 Received: by mail-wm1-f65.google.com with SMTP id h18so11034595wml.1; Thu, 25 Apr 2019 07:55:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=o0hYzlJZ9De8C2EJk5bqyi6LB/AdqZZzFznD7thA8AA=; b=ObFei7KNBXVXqU5PFYo0IzNr+9bUTvz8GxtYobeIONh/xLI1ea9JPdDCe8mu0nWSzL uBLPtBAea+JyPqGcAT4ENRHxfUvS0Lpi94fW02//gwvfGAvF/SaJjuTlxgsyo+QvW2sR 1qxDVXoL3HBcghVsys99/+MiIYrfE3hNZcrWxlveWSc5/cONq/spXNKPYrHuo8UNxZ6b emZNsnsrTrcvqA/6TVdoJrI+wyOQ8rzHRMWCwdOZGuxa7wCjRR/RbWCf1aZheLsEMRFe 6sVdMzFp7NI6Df/u20E2jstze0YI1pTurBSDT40eB7YCxuNaF0Y5QHAIGSBjVjUn8XFn gUlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=o0hYzlJZ9De8C2EJk5bqyi6LB/AdqZZzFznD7thA8AA=; b=n+aeNcBTNILBg+wVtLu2g1SwrGWelcFVIndzHM6V8sAofbUe2YZCo1rUQAfr3arjc8 Os7cdGeEGI8wq/uA0T+grn7EO/YDtzMPhoBtR2rbuX6vtpyUfotoR2gIsXVRU2uOuioX SFn2RbbbOpbE57KMlBn1OeVYWeqrh44ZB45m+nz5XvK5g9ZrpV3o2BNbU4PIFABb7vcH FgnGehLGc4KjM+BcEdNmfd/igLs8+3tsRxgaajSQ1HpqNez3I9HSd3hHUrt3Pc+9L3/y pZaN/HAU2x6sB+sZ0psJ+FAPZUaBBrDCXMJkJuLdtTKCAs8Eb/9+mw9dAUQho1JMS40s AqJA== X-Gm-Message-State: APjAAAXZ84HHf/TTdTepldiC5tisW8l8fjDOWUHUK9x2J40Xi3KtW+Et xbJj+lW5X/zvxHBeS2JdMoA= X-Google-Smtp-Source: APXvYqxyr1S+ArYrVjOdPmSYt8Uc8V4iSBC7xgBxjWiNWd/suPkwleBsnmy7diVAciHWaJ4C5wwxlg== X-Received: by 2002:a1c:7f10:: with SMTP id a16mr3811781wmd.30.1556204107420; Thu, 25 Apr 2019 07:55:07 -0700 (PDT) Received: from localhost (p2E5BEF36.dip0.t-ipconnect.de. [46.91.239.54]) by smtp.gmail.com with ESMTPSA id z4sm226941wrq.75.2019.04.25.07.55.06 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 25 Apr 2019 07:55:06 -0700 (PDT) Date: Thu, 25 Apr 2019 16:55:05 +0200 From: Thierry Reding To: Nagarjuna Kristam Cc: balbi@kernel.org, gregkh@linuxfoundation.org, jonathanh@nvidia.com, linux-tegra@vger.kernel.org, linux-usb@vger.kernel.org Subject: Re: [PATCH V2 2/8] phy: tegra: xusb: t210: add usb3 port fake support Message-ID: <20190425145505.GD24213@ulmo> References: <1552302716-18554-1-git-send-email-nkristam@nvidia.com> <1552302716-18554-3-git-send-email-nkristam@nvidia.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="11Y7aswkeuHtSBEs" Content-Disposition: inline In-Reply-To: <1552302716-18554-3-git-send-email-nkristam@nvidia.com> User-Agent: Mutt/1.11.4 (2019-03-13) Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Message-ID: <20190425145505._94GqUGcyIBd_SxHP_BZHdI0j_2d2KjEUB3TMsvjHQs@z> --11Y7aswkeuHtSBEs Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Mar 11, 2019 at 04:41:50PM +0530, Nagarjuna Kristam wrote: > On Tegra210, usb2 only otg/peripheral ports dont work in device mode. > They need an assosciated usb3 port to work in device mode. Identify > an unused usb3 port and assign it as a fake USB3 port to USB2 only > port whose mode is otg/peripheral >=20 > Based on work by BH Hsieh . >=20 > Signed-off-by: Nagarjuna Kristam > --- > drivers/phy/tegra/xusb-tegra210.c | 40 +++++++++++++++++++++++++++++++++= ++++++ > drivers/phy/tegra/xusb.c | 29 ++++++++++++++++++++++++++++ > drivers/phy/tegra/xusb.h | 6 ++++++ > 3 files changed, 75 insertions(+) I think this looks a whole lot better than the initial version. One or two minor comments below. > diff --git a/drivers/phy/tegra/xusb-tegra210.c b/drivers/phy/tegra/xusb-t= egra210.c > index 4beebcc..48478bc4 100644 > --- a/drivers/phy/tegra/xusb-tegra210.c > +++ b/drivers/phy/tegra/xusb-tegra210.c > @@ -58,6 +58,7 @@ > #define XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP_SHIFT(x) ((x) * 5) > #define XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP_MASK(x) (0x7 << ((x) * 5)) > #define XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP(x, v) (((v) & 0x7) << ((x) * 5= )) > +#define XUSB_PADCTL_SS_PORT_MAP_PORT_DISABLED 0x7 > =20 > #define XUSB_PADCTL_ELPG_PROGRAM1 0x024 > #define XUSB_PADCTL_ELPG_PROGRAM1_AUX_MUX_LP0_VCORE_DOWN (1 << 31) > @@ -952,6 +953,15 @@ static int tegra210_usb2_phy_power_on(struct phy *ph= y) > =20 > priv =3D to_tegra210_xusb_padctl(padctl); > =20 > + if (port->usb3_port_fake !=3D -1) { > + value =3D padctl_readl(padctl, XUSB_PADCTL_SS_PORT_MAP); > + value &=3D ~XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP_MASK( > + port->usb3_port_fake); > + value |=3D XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP( > + port->usb3_port_fake, index); > + padctl_writel(padctl, value, XUSB_PADCTL_SS_PORT_MAP); > + } > + > value =3D padctl_readl(padctl, XUSB_PADCTL_USB2_BIAS_PAD_CTL0); > value &=3D ~((XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_MASK << > XUSB_PADCTL_USB2_BIAS_PAD_CTL0_HS_SQUELCH_LEVEL_SHIFT) | > @@ -1086,6 +1096,15 @@ static int tegra210_usb2_phy_power_off(struct phy = *phy) > =20 > mutex_lock(&padctl->lock); > =20 > + if (port->usb3_port_fake !=3D -1) { > + value =3D padctl_readl(padctl, XUSB_PADCTL_SS_PORT_MAP); > + value &=3D ~XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP_MASK( > + port->usb3_port_fake); > + value |=3D XUSB_PADCTL_SS_PORT_MAP_PORTX_MAP(port->usb3_port_fake, > + XUSB_PADCTL_SS_PORT_MAP_PORT_DISABLED); > + padctl_writel(padctl, value, XUSB_PADCTL_SS_PORT_MAP); > + } > + > if (WARN_ON(pad->enable =3D=3D 0)) > goto out; > =20 > @@ -1784,6 +1803,27 @@ static const struct tegra_xusb_pad_soc * const teg= ra210_pads[] =3D { > =20 > static int tegra210_usb2_port_enable(struct tegra_xusb_port *port) > { > + struct tegra_xusb_usb2_port *usb2 =3D to_usb2_port(port); > + struct tegra_xusb_padctl *padctl =3D port->padctl; > + > + /* Disable usb3_port_fake usage by default and assign if needed */ > + usb2->usb3_port_fake =3D -1; > + if (usb2 && (usb2->mode =3D=3D USB_DR_MODE_OTG || > + usb2->mode =3D=3D USB_DR_MODE_PERIPHERAL)) { > + if (!tegra_xusb_usb3_port_has_companion(padctl, port->index)) { > + int fake =3D tegra_xusb_find_unused_usb3_port(padctl); > + > + if (fake >=3D 0) { > + dev_dbg(&port->dev, "Found unused usb3 port: %d\n", > + fake); > + usb2->usb3_port_fake =3D fake; > + } else { > + dev_err(&port->dev, "usb2-%u has neither a companion nor an unused u= sb3 port to fake it\n", > + port->index); > + return -ENODEV; > + } > + } > + } Generally it's preferable to check for errors and deal with success in the regular code path. So the above would be: if (fake < 0) { dev_err(...); return -ENODEV; } dev_dbg(...); ... Also, the error message is slightly redundant because &port->dev will already output the usb2-%u part. Also, perhaps try to make that message a little shorter. Something like: dev_err(&port->dev, "no unused USB3 ports available\n"); Also, I don't think this is the right place to do this. There's really no way for the ->enable() callbacks to fail. Or at least failures will be ignored, so there's no chance for the driver to do anything about the failure. It also looks somewhat tacked on. But how about if we do this as part of tegra_xusb_usb3_port_parse_dt() or tegra_xusb_add_usb3_port() already? The former is where we read the USB2 companion port index from DT so we know exactly which USB2 port to associate with a given USB3 port. So in the latter we could iterate over the USB2 ports (which have already been set up) and establish a backlink to the USB3 companion. Something like this, in tegra_xusb_add_usb3_port(): struct tegra_xusb_usb2_port *companion; for (i =3D 0; i < padctl->soc->ports.usb2.count; i++) { companion =3D tegra_xusb_find_usb2_port(padctl, i); if (!companion) continue; if (companion->base.index =3D=3D usb3->port) { companion->port =3D index; break; } } Then, as part of tegra_xusb_setup_ports() we could add functionality to hook up a fake port if no companion is available, much like you're doing above. Perhaps we should introduce a new ->setup() callback to the port ops to encapsulate this, or perhaps add a flag to tegra_xusb_padctl_soc that is set to true on SoC generations that need the fake USB3 port. Thierry > return 0; > } > =20 > diff --git a/drivers/phy/tegra/xusb.c b/drivers/phy/tegra/xusb.c > index c6178a0..e89746d 100644 > --- a/drivers/phy/tegra/xusb.c > +++ b/drivers/phy/tegra/xusb.c > @@ -799,6 +799,35 @@ static void __tegra_xusb_remove_ports(struct tegra_x= usb_padctl *padctl) > } > } > =20 > +bool tegra_xusb_usb3_port_has_companion(struct tegra_xusb_padctl *padctl, > + unsigned int index) > +{ > + unsigned int i; > + struct tegra_xusb_usb3_port *usb3; > + > + for (i =3D 0; i < padctl->soc->ports.usb3.count; i++) { > + usb3 =3D tegra_xusb_find_usb3_port(padctl, i); > + if (usb3 && usb3->port =3D=3D index) > + return true; > + } > + > + return false; > +} > + > +int tegra_xusb_find_unused_usb3_port(struct tegra_xusb_padctl *padctl) > +{ > + struct device_node *np; > + unsigned int i; > + > + for (i =3D 0; i < padctl->soc->ports.usb3.count; i++) { > + np =3D tegra_xusb_find_port_node(padctl, "usb3", i); > + if (!np || !of_device_is_available(np)) > + return i; > + } > + > + return -ENODEV; > +} > + > static int tegra_xusb_setup_ports(struct tegra_xusb_padctl *padctl) > { > struct tegra_xusb_port *port; > diff --git a/drivers/phy/tegra/xusb.h b/drivers/phy/tegra/xusb.h > index 17cc8dc..b263165 100644 > --- a/drivers/phy/tegra/xusb.h > +++ b/drivers/phy/tegra/xusb.h > @@ -274,6 +274,7 @@ struct tegra_xusb_usb2_port { > struct regulator *supply; > bool internal; > enum usb_dr_mode mode; > + int usb3_port_fake; > }; > =20 > static inline struct tegra_xusb_usb2_port * > @@ -413,6 +414,11 @@ struct tegra_xusb_lane *tegra_xusb_find_lane(struct = tegra_xusb_padctl *padctl, > const char *name, > unsigned int index); > =20 > +bool tegra_xusb_usb3_port_has_companion(struct tegra_xusb_padctl *padctl, > + unsigned int index); > + > +int tegra_xusb_find_unused_usb3_port(struct tegra_xusb_padctl *padctl); > + > #if defined(CONFIG_ARCH_TEGRA_124_SOC) || defined(CONFIG_ARCH_TEGRA_132_= SOC) > extern const struct tegra_xusb_padctl_soc tegra124_xusb_padctl_soc; > #endif > --=20 > 2.7.4 >=20 --11Y7aswkeuHtSBEs Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEiOrDCAFJzPfAjcif3SOs138+s6EFAlzBykUACgkQ3SOs138+ s6EQZQ//cWF/8gxVfT6FjrMPgrUwnbJPVrgiHB5HYNsbKGzOJDk98W1IGDEBIUI/ JLUNfFVk2m12sluKZaYXsGq/tSTdOrLC4ySqqPA2z+lRbnEy+SqPs3DGk5CavjX5 6IvU5wijQSwlwMb8g8EKIcjT3XLrkbsmhKkGBU5qaYzlbXLGXGkreFGYuZvVrNl3 5KWXd5PvuMa/LcbPTaENYmhZoYrDewZ5qyophSP24SfJtAIEa/j2yG8XSdKWmYSP lLZWLQEvvNl/qKPB5OuivYVxyOMV+osLheYap5ug8ip8VlVyzOMW8zyLoAecSIGK ud2QH99MEdGNb3kgCvmxU6HZQ922xLeA4Ps7ClrcisgX922DVv3oM8RCFxca5TNU RMVqOOfOZ0dSO49uvEAqjTxZZ17+aRM/vYS3b91T34/ATngo6GWcZutLrqPkkFod pZbCOXRZM6kGgttY3OEErFMHkUZbDxMQVUz4xOF+0qUpINjhKtA6uKpSQvJggQhk b27Or4/zTlx8EKccmwog8nTNXsTt9FhQ43gCibxrpnBXBDCiU4hexDne7z/rR/rD yCrkypFx8Dl+yo2lXXF5KeZ8q83MO/5keuZtzz3iw+vWjo4LJonSlJjJLCNTm17m ZxrISl6NEGdqAgxvLXu2IhafSFt5EDvppu1jRF4X2MBcYsIlOqs= =Ju8O -----END PGP SIGNATURE----- --11Y7aswkeuHtSBEs--