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: [v5,1/5] usb: typec: tcpm: pdo matching optimization From: Guenter Roeck Message-Id: <20180420161446.GA5145@roeck-us.net> Date: Fri, 20 Apr 2018 09:14:46 -0700 To: Heikki Krogerus Cc: Li Jun , gregkh@linuxfoundation.org, robh+dt@kernel.org, hdegoede@redhat.com, rmfrfs@gmail.com, yueyao.zhu@gmail.com, linux-usb@vger.kernel.org, linux-imx@nxp.com List-ID: T24gRnJpLCBBcHIgMjAsIDIwMTggYXQgMDY6MTM6MzBQTSArMDMwMCwgSGVpa2tpIEtyb2dlcnVz IHdyb3RlOgo+IEhpLAo+IAo+IE9uIE1vbiwgQXByIDE2LCAyMDE4IGF0IDAyOjU0OjMzUE0gKzA4 MDAsIExpIEp1biB3cm90ZToKPiA+IFRoaXMgcGF0Y2ggaXMgYSBjb21iaW5hdGlvbiBvZiBjb21t aXQgNTdlNmYwZDdiODA0Cj4gPiAoInR5cGVjOiB0Y3BtOiBPbmx5IHJlcXVlc3QgbWF0Y2hpbmcg cGRvcyIpIGFuZCBzb3VyY2UKPiA+IHBkbyBzZWxlY3Rpb24gb3B0aW1pemF0aW9uIGJhc2VkIG9u IGl0LCBpbnN0ZWFkIG9mIG9ubHkKPiA+IGNvbXBhcmUgYmV0d2VlbiB0aGUgc2FtZSBwZG8gdHlw ZSBvZiBzaW5rIGFuZCBzb3VyY2UsCj4gPiB3ZSBzaG91bGQgY2hlY2sgc291cmNlIHBkbyB2b2x0 YWdlIHJhbmdlIGlzIHdpdGhpbiB0aGUKPiA+IHZvbHRhZ2UgcmFuZ2Ugb2Ygb25lIHNpbmsgcGRv Lgo+ID4gCj4gPiBSZXZpZXdlZC1ieTogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNv bT4KPiA+IFNpZ25lZC1vZmYtYnk6IExpIEp1biA8anVuLmxpQG54cC5jb20+Cj4gCj4gSSBkb24n dCBzZWUgYW55IHByb2JsZW0gd2l0aCB0aGlzLCBidXQgSSBob3BlIEd1ZW50ZXIgaGFzIHRpbWUg dG8KPiBjaGVjayBpdC4KPiAKCkkgZG9uJ3Qgc2VlIGFueXRoaW5nIHdyb25nLCBidXQgdGhlbiB0 aGUgY2hhbmdlcyBhcmUgc28gY29tcGxleCB0aGF0CkkgY2FuIG9ubHkgaG9wZSB0aGV5IHdlcmUg d2VsbCB0ZXN0ZWQuIFVuZm9ydHVuYXRlbHksIEkgd29uJ3QgaGF2ZQp0aW1lIHRvIGRvIHN1Y2gg dGVzdGluZyBteXNlbGYuCgpBY2tlZC1ieTogR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMu bmV0PgoKPiBBY2tlZC1ieTogSGVpa2tpIEtyb2dlcnVzIDxoZWlra2kua3JvZ2VydXNAbGludXgu aW50ZWwuY29tPgo+IAo+ID4gLS0tCj4gPiAgZHJpdmVycy91c2IvdHlwZWMvdGNwbS5jIHwgMTA1 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCj4gPiAgMSBm aWxlIGNoYW5nZWQsIDY3IGluc2VydGlvbnMoKyksIDM4IGRlbGV0aW9ucygtKQo+ID4gCj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdHlwZWMvdGNwbS5jIGIvZHJpdmVycy91c2IvdHlwZWMv dGNwbS5jCj4gPiBpbmRleCA2NzdkMTIxLi4wNDhiOTUzIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVy cy91c2IvdHlwZWMvdGNwbS5jCj4gPiArKysgYi9kcml2ZXJzL3VzYi90eXBlYy90Y3BtLmMKPiA+ IEBAIC0xNzcyLDM5ICsxNzcyLDYzIEBAIHN0YXRpYyBpbnQgdGNwbV9wZF9jaGVja19yZXF1ZXN0 KHN0cnVjdCB0Y3BtX3BvcnQgKnBvcnQpCj4gPiAgCXJldHVybiAwOwo+ID4gIH0KPiA+ICAKPiA+ IC1zdGF0aWMgaW50IHRjcG1fcGRfc2VsZWN0X3BkbyhzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0KQo+ ID4gKyNkZWZpbmUgbWluX3Bvd2VyKHgsIHkpIG1pbihwZG9fbWF4X3Bvd2VyKHgpLCBwZG9fbWF4 X3Bvd2VyKHkpKQo+ID4gKyNkZWZpbmUgbWluX2N1cnJlbnQoeCwgeSkgbWluKHBkb19tYXhfY3Vy cmVudCh4KSwgcGRvX21heF9jdXJyZW50KHkpKQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgdGNwbV9w ZF9zZWxlY3RfcGRvKHN0cnVjdCB0Y3BtX3BvcnQgKnBvcnQsIGludCAqc2lua19wZG8sCj4gPiAr CQkJICAgICAgaW50ICpzcmNfcGRvKQo+ID4gIHsKPiA+IC0JdW5zaWduZWQgaW50IGksIG1heF9t dyA9IDAsIG1heF9tdiA9IDA7Cj4gPiArCXVuc2lnbmVkIGludCBpLCBqLCBtYXhfc3JjX212ID0g MCwgbWluX3NyY19tdiA9IDAsIG1heF9tdyA9IDAsCj4gPiArCQkgICAgIG1heF9tdiA9IDAsIHNy Y19tdyA9IDAsIHNyY19tYSA9IDAsIG1heF9zbmtfbXYgPSAwLAo+ID4gKwkJICAgICBtaW5fc25r X212ID0gMDsKPiAKPiBEb24ndCByZXNlbmQgYmVjYXVzZSBvZiB0aGlzIGNvbW1lbnQsIGJ1dCBq dXN0IGZvciB0aGUgcmVjb3JkLCB5b3UgYXJlCj4gZGVjbGFyaW5nIGhlcmUgc28gbWFueSB2YXJp YWJsZXMgYXQgb25jZSB0aGF0IGl0IGlzIG5vdCBlYXN5IHRvIHNlZQo+IHdoYXQgeW91IGFyZSBp bnRyb2R1Y2luZyAoYXQgbGVhc3QgZm9yIG1lKS4gSXQgaXMgT0sgdG8gZGVjbGFyZSBldmVyeQo+ IHZhcmlhYmxlIGV2ZW4gc2VwYXJhdGVseS4KPiAKPiA+ICAJaW50IHJldCA9IC1FSU5WQUw7Cj4g PiAgCj4gPiAgCS8qCj4gPiAtCSAqIFNlbGVjdCB0aGUgc291cmNlIFBETyBwcm92aWRpbmcgdGhl IG1vc3QgcG93ZXIgd2hpbGUgc3RheWluZyB3aXRoaW4KPiA+IC0JICogdGhlIGJvYXJkJ3Mgdm9s dGFnZSBsaW1pdHMuIFByZWZlciBQRE8gcHJvdmlkaW5nIGV4cAo+ID4gKwkgKiBTZWxlY3QgdGhl IHNvdXJjZSBQRE8gcHJvdmlkaW5nIHRoZSBtb3N0IHBvd2VyIHdoaWNoIGhhcyBhCj4gPiArCSAq IG1hdGNoaWcgc2luayBjYXAuCj4gPiAgCSAqLwo+ID4gIAlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+ bnJfc291cmNlX2NhcHM7IGkrKykgewo+ID4gIAkJdTMyIHBkbyA9IHBvcnQtPnNvdXJjZV9jYXBz W2ldOwo+ID4gIAkJZW51bSBwZF9wZG9fdHlwZSB0eXBlID0gcGRvX3R5cGUocGRvKTsKPiA+IC0J CXVuc2lnbmVkIGludCBtdiwgbWEsIG13Owo+ID4gIAo+ID4gLQkJaWYgKHR5cGUgPT0gUERPX1RZ UEVfRklYRUQpCj4gPiAtCQkJbXYgPSBwZG9fZml4ZWRfdm9sdGFnZShwZG8pOwo+ID4gLQkJZWxz ZQo+ID4gLQkJCW12ID0gcGRvX21pbl92b2x0YWdlKHBkbyk7Cj4gPiArCQlpZiAodHlwZSA9PSBQ RE9fVFlQRV9GSVhFRCkgewo+ID4gKwkJCW1heF9zcmNfbXYgPSBwZG9fZml4ZWRfdm9sdGFnZShw ZG8pOwo+ID4gKwkJCW1pbl9zcmNfbXYgPSBtYXhfc3JjX212Owo+ID4gKwkJfSBlbHNlIHsKPiA+ ICsJCQltYXhfc3JjX212ID0gcGRvX21heF92b2x0YWdlKHBkbyk7Cj4gPiArCQkJbWluX3NyY19t diA9IHBkb19taW5fdm9sdGFnZShwZG8pOwo+ID4gKwkJfQo+ID4gIAo+ID4gIAkJaWYgKHR5cGUg PT0gUERPX1RZUEVfQkFUVCkgewo+ID4gLQkJCW13ID0gcGRvX21heF9wb3dlcihwZG8pOwo+ID4g KwkJCXNyY19tdyA9IHBkb19tYXhfcG93ZXIocGRvKTsKPiA+ICAJCX0gZWxzZSB7Cj4gPiAtCQkJ bWEgPSBtaW4ocGRvX21heF9jdXJyZW50KHBkbyksCj4gPiAtCQkJCSBwb3J0LT5tYXhfc25rX21h KTsKPiA+IC0JCQltdyA9IG1hICogbXYgLyAxMDAwOwo+ID4gKwkJCXNyY19tYSA9IHBkb19tYXhf Y3VycmVudChwZG8pOwo+ID4gKwkJCXNyY19tdyA9IHNyY19tYSAqIG1pbl9zcmNfbXYgLyAxMDAw Owo+ID4gIAkJfQo+ID4gIAo+ID4gLQkJLyogUGVyZmVyIGhpZ2hlciB2b2x0YWdlcyBpZiBhdmFp bGFibGUgKi8KPiA+IC0JCWlmICgobXcgPiBtYXhfbXcgfHwgKG13ID09IG1heF9tdyAmJiBtdiA+ IG1heF9tdikpICYmCj4gPiAtCQkgICAgbXYgPD0gcG9ydC0+bWF4X3Nua19tdikgewo+ID4gLQkJ CXJldCA9IGk7Cj4gPiAtCQkJbWF4X213ID0gbXc7Cj4gPiAtCQkJbWF4X212ID0gbXY7Cj4gPiAr CQlmb3IgKGogPSAwOyBqIDwgcG9ydC0+bnJfc25rX3BkbzsgaisrKSB7Cj4gPiArCQkJcGRvID0g cG9ydC0+c25rX3Bkb1tqXTsKPiA+ICsKPiA+ICsJCQlpZiAocGRvX3R5cGUocGRvKSA9PSBQRE9f VFlQRV9GSVhFRCkgewo+ID4gKwkJCQltaW5fc25rX212ID0gcGRvX2ZpeGVkX3ZvbHRhZ2UocGRv KTsKPiA+ICsJCQkJbWF4X3Nua19tdiA9IHBkb19maXhlZF92b2x0YWdlKHBkbyk7Cj4gPiArCQkJ fSBlbHNlIHsKPiA+ICsJCQkJbWluX3Nua19tdiA9IHBkb19taW5fdm9sdGFnZShwZG8pOwo+ID4g KwkJCQltYXhfc25rX212ID0gcGRvX21heF92b2x0YWdlKHBkbyk7Cj4gPiArCQkJfQo+ID4gKwo+ ID4gKwkJCWlmIChtYXhfc3JjX212IDw9IG1heF9zbmtfbXYgJiYKPiA+ICsJCQkJbWluX3NyY19t diA+PSBtaW5fc25rX212KSB7Cj4gPiArCQkJCS8qIFByZWZlciBoaWdoZXIgdm9sdGFnZXMgaWYg YXZhaWxhYmxlICovCj4gPiArCQkJCWlmICgoc3JjX213ID09IG1heF9tdyAmJiBtaW5fc3JjX212 ID4gbWF4X212KSB8fAo+ID4gKwkJCQkJCQlzcmNfbXcgPiBtYXhfbXcpIHsKPiA+ICsJCQkJCSpz cmNfcGRvID0gaTsKPiA+ICsJCQkJCSpzaW5rX3BkbyA9IGo7Cj4gPiArCQkJCQltYXhfbXcgPSBz cmNfbXc7Cj4gPiArCQkJCQltYXhfbXYgPSBtaW5fc3JjX212Owo+ID4gKwkJCQkJcmV0ID0gMDsK PiA+ICsJCQkJfQo+ID4gKwkJCX0KPiA+ICAJCX0KPiA+ICAJfQo+ID4gIAo+ID4gQEAgLTE4MTYs MTMgKzE4NDAsMTYgQEAgc3RhdGljIGludCB0Y3BtX3BkX2J1aWxkX3JlcXVlc3Qoc3RydWN0IHRj cG1fcG9ydCAqcG9ydCwgdTMyICpyZG8pCj4gPiAgCXVuc2lnbmVkIGludCBtdiwgbWEsIG13LCBm bGFnczsKPiA+ICAJdW5zaWduZWQgaW50IG1heF9tYSwgbWF4X213Owo+ID4gIAllbnVtIHBkX3Bk b190eXBlIHR5cGU7Cj4gPiAtCWludCBpbmRleDsKPiA+IC0JdTMyIHBkbzsKPiA+ICsJaW50IHNy Y19wZG9faW5kZXgsIHNua19wZG9faW5kZXg7Cj4gPiArCXUzMiBwZG8sIG1hdGNoaW5nX3Nua19w ZG87Cj4gPiArCWludCByZXQ7Cj4gPiAgCj4gPiAtCWluZGV4ID0gdGNwbV9wZF9zZWxlY3RfcGRv KHBvcnQpOwo+ID4gLQlpZiAoaW5kZXggPCAwKQo+ID4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gPiAt CXBkbyA9IHBvcnQtPnNvdXJjZV9jYXBzW2luZGV4XTsKPiA+ICsJcmV0ID0gdGNwbV9wZF9zZWxl Y3RfcGRvKHBvcnQsICZzbmtfcGRvX2luZGV4LCAmc3JjX3Bkb19pbmRleCk7Cj4gPiArCWlmIChy ZXQgPCAwKQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJcGRvID0gcG9ydC0+c291cmNl X2NhcHNbc3JjX3Bkb19pbmRleF07Cj4gPiArCW1hdGNoaW5nX3Nua19wZG8gPSBwb3J0LT5zbmtf cGRvW3Nua19wZG9faW5kZXhdOwo+ID4gIAl0eXBlID0gcGRvX3R5cGUocGRvKTsKPiA+ICAKPiA+ ICAJaWYgKHR5cGUgPT0gUERPX1RZUEVfRklYRUQpCj4gPiBAQCAtMTgzMCwyNiArMTg1NywyOCBA QCBzdGF0aWMgaW50IHRjcG1fcGRfYnVpbGRfcmVxdWVzdChzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0 LCB1MzIgKnJkbykKPiA+ICAJZWxzZQo+ID4gIAkJbXYgPSBwZG9fbWluX3ZvbHRhZ2UocGRvKTsK PiA+ICAKPiA+IC0JLyogU2VsZWN0IG1heGltdW0gYXZhaWxhYmxlIGN1cnJlbnQgd2l0aGluIHRo ZSBib2FyZCdzIHBvd2VyIGxpbWl0ICovCj4gPiArCS8qIFNlbGVjdCBtYXhpbXVtIGF2YWlsYWJs ZSBjdXJyZW50IHdpdGhpbiB0aGUgc2luayBwZG8ncyBsaW1pdCAqLwo+ID4gIAlpZiAodHlwZSA9 PSBQRE9fVFlQRV9CQVRUKSB7Cj4gPiAtCQltdyA9IHBkb19tYXhfcG93ZXIocGRvKTsKPiA+IC0J CW1hID0gMTAwMCAqIG1pbihtdywgcG9ydC0+bWF4X3Nua19tdykgLyBtdjsKPiA+ICsJCW13ID0g bWluX3Bvd2VyKHBkbywgbWF0Y2hpbmdfc25rX3Bkbyk7Cj4gPiArCQltYSA9IDEwMDAgKiBtdyAv IG12Owo+ID4gIAl9IGVsc2Ugewo+ID4gLQkJbWEgPSBtaW4ocGRvX21heF9jdXJyZW50KHBkbyks Cj4gPiAtCQkJIDEwMDAgKiBwb3J0LT5tYXhfc25rX213IC8gbXYpOwo+ID4gKwkJbWEgPSBtaW5f Y3VycmVudChwZG8sIG1hdGNoaW5nX3Nua19wZG8pOwo+ID4gKwkJbXcgPSBtYSAqIG12IC8gMTAw MDsKPiA+ICAJfQo+ID4gLQltYSA9IG1pbihtYSwgcG9ydC0+bWF4X3Nua19tYSk7Cj4gPiAgCj4g PiAgCWZsYWdzID0gUkRPX1VTQl9DT01NIHwgUkRPX05PX1NVU1BFTkQ7Cj4gPiAgCj4gPiAgCS8q IFNldCBtaXNtYXRjaCBiaXQgaWYgb2ZmZXJlZCBwb3dlciBpcyBsZXNzIHRoYW4gb3BlcmF0aW5n IHBvd2VyICovCj4gPiAtCW13ID0gbWEgKiBtdiAvIDEwMDA7Cj4gPiAgCW1heF9tYSA9IG1hOwo+ ID4gIAltYXhfbXcgPSBtdzsKPiA+ICAJaWYgKG13IDwgcG9ydC0+b3BlcmF0aW5nX3Nua19tdykg ewo+ID4gIAkJZmxhZ3MgfD0gUkRPX0NBUF9NSVNNQVRDSDsKPiA+IC0JCW1heF9tdyA9IHBvcnQt Pm9wZXJhdGluZ19zbmtfbXc7Cj4gPiAtCQltYXhfbWEgPSBtYXhfbXcgKiAxMDAwIC8gbXY7Cj4g PiArCQlpZiAodHlwZSA9PSBQRE9fVFlQRV9CQVRUICYmCj4gPiArCQkgICAgKHBkb19tYXhfcG93 ZXIobWF0Y2hpbmdfc25rX3BkbykgPiBwZG9fbWF4X3Bvd2VyKHBkbykpKQo+ID4gKwkJCW1heF9t dyA9IHBkb19tYXhfcG93ZXIobWF0Y2hpbmdfc25rX3Bkbyk7Cj4gPiArCQllbHNlIGlmIChwZG9f bWF4X2N1cnJlbnQobWF0Y2hpbmdfc25rX3BkbykgPgo+ID4gKwkJCSBwZG9fbWF4X2N1cnJlbnQo cGRvKSkKPiA+ICsJCQltYXhfbWEgPSBwZG9fbWF4X2N1cnJlbnQobWF0Y2hpbmdfc25rX3Bkbyk7 Cj4gPiAgCX0KPiA+ICAKPiA+ICAJdGNwbV9sb2cocG9ydCwgImNjPSVkIGNjMT0lZCBjYzI9JWQg dmJ1cz0lZCB2Y29ubj0lcyBwb2xhcml0eT0lZCIsCj4gPiBAQCAtMTg1OCwxNiArMTg4NywxNiBA QCBzdGF0aWMgaW50IHRjcG1fcGRfYnVpbGRfcmVxdWVzdChzdHJ1Y3QgdGNwbV9wb3J0ICpwb3J0 LCB1MzIgKnJkbykKPiA+ICAJCSBwb3J0LT5wb2xhcml0eSk7Cj4gPiAgCj4gPiAgCWlmICh0eXBl ID09IFBET19UWVBFX0JBVFQpIHsKPiA+IC0JCSpyZG8gPSBSRE9fQkFUVChpbmRleCArIDEsIG13 LCBtYXhfbXcsIGZsYWdzKTsKPiA+ICsJCSpyZG8gPSBSRE9fQkFUVChzcmNfcGRvX2luZGV4ICsg MSwgbXcsIG1heF9tdywgZmxhZ3MpOwo+ID4gIAo+ID4gIAkJdGNwbV9sb2cocG9ydCwgIlJlcXVl c3RpbmcgUERPICVkOiAldSBtViwgJXUgbVclcyIsCj4gPiAtCQkJIGluZGV4LCBtdiwgbXcsCj4g PiArCQkJIHNyY19wZG9faW5kZXgsIG12LCBtdywKPiA+ICAJCQkgZmxhZ3MgJiBSRE9fQ0FQX01J U01BVENIID8gIiBbbWlzbWF0Y2hdIiA6ICIiKTsKPiA+ICAJfSBlbHNlIHsKPiA+IC0JCSpyZG8g PSBSRE9fRklYRUQoaW5kZXggKyAxLCBtYSwgbWF4X21hLCBmbGFncyk7Cj4gPiArCQkqcmRvID0g UkRPX0ZJWEVEKHNyY19wZG9faW5kZXggKyAxLCBtYSwgbWF4X21hLCBmbGFncyk7Cj4gPiAgCj4g PiAgCQl0Y3BtX2xvZyhwb3J0LCAiUmVxdWVzdGluZyBQRE8gJWQ6ICV1IG1WLCAldSBtQSVzIiwK PiA+IC0JCQkgaW5kZXgsIG12LCBtYSwKPiA+ICsJCQkgc3JjX3Bkb19pbmRleCwgbXYsIG1hLAo+ ID4gIAkJCSBmbGFncyAmIFJET19DQVBfTUlTTUFUQ0ggPyAiIFttaXNtYXRjaF0iIDogIiIpOwo+ ID4gIAl9Cj4gPiAgCj4gPiAtLSAKPiA+IDIuNy40Cj4gCj4gLS0gCj4gaGVpa2tpCi0tLQpUbyB1 bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGlu dXgtdXNiIiBpbgp0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVs Lm9yZwpNb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9y ZG9tby1pbmZvLmh0bWwK