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: [v10,2/2] usb: typec: ucsi: add support for Cypress CCGx From: Peter Rosin Message-Id: <7be15a6a-cf5a-a0d1-75c9-550572fb5a2d@axentia.se> Date: Sat, 8 Sep 2018 08:37:26 +0200 To: Ajay Gupta , wsa@the-dreams.de, heikki.krogerus@linux.intel.com Cc: linux-usb@vger.kernel.org, linux-i2c@vger.kernel.org List-ID: T24gMjAxOC0wOS0wOCAwMjowOSwgQWpheSBHdXB0YSB3cm90ZToKPiBMYXRlc3QgTlZJRElBIEdQ VSBjYXJkcyBoYXZlIGEgQ3lwcmVzcyBDQ0d4IFR5cGUtQyBjb250cm9sbGVyCj4gb3ZlciBJMkMg aW50ZXJmYWNlLgo+IAo+IFRoaXMgVUNTSSBJMkMgZHJpdmVyIHVzZXMgSTJDIGJ1cyBkcml2ZXIg aW50ZXJmYWNlIGZvciBjb21tdW5pY2F0aW5nCj4gd2l0aCBUeXBlLUMgY29udHJvbGxlci4KPiAK PiBTaWduZWQtb2ZmLWJ5OiBBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPgo+IFJldmlld2Vk LWJ5OiBBbmR5IFNoZXZjaGVua28gPGFuZHkuc2hldmNoZW5rb0BnbWFpbC5jb20+Cj4gQWNrZWQt Ynk6IEhlaWtraSBLcm9nZXJ1cyA8aGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVsLmNvbT4KPiAt LS0KPiBDaGFuZ2VzIGZyb20gdjEgLT4gdjIKPiAJRml4ZWQgaWRlbnRhdGlvbiBpbiBkcml2ZXJz L3VzYi90eXBlYy91Y3NpL0tjb25maWcKPiBDaGFuZ2VzIGZyb20gdjIgLT4gdjMKPiAJRml4ZWQg bW9zdCBvZiBjb21tZW50cyBmcm9tIEhlaWtraQo+IAlSZW5hbWUgdWNzaV9pMmNfY2NnLmMgLT4g dWNzaV9jY2cuYwo+IENoYW5nZXMgZnJvbSB2MyAtPiB2NAo+IAlGaXhlZCBjb21tZW50cyBmcm9t IEFuZHkKPiBDaGFuZ2VzIGZyb20gdjQgLT4gdjUKPiAJRml4ZWQgY29tbWVudHMgZnJvbSBBbmR5 Cj4gQ2hhbmdlcyBmcm9tIHY1IC0+IHY2Cj4gCUZpeGVkIHJldmlldyBjb21tZW50cyBmcm9tIEdy ZWcgCj4gQ2hhbmdlcyBmcm9tIHY2IC0+IHY3Cj4gCU5vbmUKPiBDaGFuZ2VzIGZyb20gdjcgLT4g djgKPiAJRml4ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gUGV0ZXIgCj4gCS0gUmVtb3ZlZCBlbXB0 eSBTVE9QIG1lc3NhZ2UKPiAJLSBVc2luZyBzdGFjayBtZW1vcnkgZm9yIGkyY190cmFuc2Zlcigp Cj4gQ2hhbmdlcyBmcm9tIHY4IC0+IHY5Cj4gCU5vbmUKPiBDaGFuZ2VzIGZyb20gdjkgLT4gdjEw Cj4gCUZpeGVkIHJldmlldyBjb21tZW50cyBmcm9tIFBldGVyIAo+IAktIFVzZSBVQ1NJIG1hY3Jv cwo+IAktIENsZWFudXBzCj4gCj4gIGRyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvS2NvbmZpZyAgICB8 ICAxMCArKwo+ICBkcml2ZXJzL3VzYi90eXBlYy91Y3NpL01ha2VmaWxlICAgfCAgIDIgKwo+ICBk cml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2lfY2NnLmMgfCAzMjQgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFuZ2VkLCAzMzYgaW5zZXJ0aW9ucygr KQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvdHlwZWMvdWNzaS91Y3NpX2NjZy5j Cj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvS2NvbmZpZyBiL2RyaXZl cnMvdXNiL3R5cGVjL3Vjc2kvS2NvbmZpZwo+IGluZGV4IGUzNmQ2YzcuLjc4MTE4ODggMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmlnCj4gKysrIGIvZHJpdmVycy91 c2IvdHlwZWMvdWNzaS9LY29uZmlnCj4gQEAgLTIzLDYgKzIzLDE2IEBAIGNvbmZpZyBUWVBFQ19V Q1NJCj4gIAo+ICBpZiBUWVBFQ19VQ1NJCj4gIAo+ICtjb25maWcgVUNTSV9DQ0cKPiArCXRyaXN0 YXRlICJVQ1NJIEludGVyZmFjZSBEcml2ZXIgZm9yIEN5cHJlc3MgQ0NHeCIKPiArCWRlcGVuZHMg b24gSTJDCj4gKwloZWxwCj4gKwkgIFRoaXMgZHJpdmVyIGVuYWJsZXMgVUNTSSBzdXBwb3J0IG9u IHBsYXRmb3JtcyB0aGF0IGV4cG9zZSBhCj4gKwkgIEN5cHJlc3MgQ0NHeCBUeXBlLUMgY29udHJv bGxlciBvdmVyIEkyQyBpbnRlcmZhY2UuCj4gKwo+ICsJICBUbyBjb21waWxlIHRoZSBkcml2ZXIg YXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQo+ICsJICBjYWxs ZWQgdWNzaV9jY2cuCj4gKwo+ICBjb25maWcgVUNTSV9BQ1BJCj4gIAl0cmlzdGF0ZSAiVUNTSSBB Q1BJIEludGVyZmFjZSBEcml2ZXIiCj4gIAlkZXBlbmRzIG9uIEFDUEkKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy91c2IvdHlwZWMvdWNzaS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kv TWFrZWZpbGUKPiBpbmRleCA3YWZiZWE1Li4yZjQ5MDBiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv dXNiL3R5cGVjL3Vjc2kvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL01h a2VmaWxlCj4gQEAgLTgsMyArOCw1IEBAIHR5cGVjX3Vjc2kteQkJCTo9IHVjc2kubwo+ICB0eXBl Y191Y3NpLSQoQ09ORklHX1RSQUNJTkcpCSs9IHRyYWNlLm8KPiAgCj4gIG9iai0kKENPTkZJR19V Q1NJX0FDUEkpCQkrPSB1Y3NpX2FjcGkubwo+ICsKPiArb2JqLSQoQ09ORklHX1VDU0lfQ0NHKQkJ Kz0gdWNzaV9jY2cubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2lf Y2NnLmMgYi9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2lfY2NnLmMKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmMzNDZlNmEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv ZHJpdmVycy91c2IvdHlwZWMvdWNzaS91Y3NpX2NjZy5jCj4gQEAgLTAsMCArMSwzMjQgQEAKPiAr Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogVUNTSSBkcml2 ZXIgZm9yIEN5cHJlc3MgQ0NHeCBUeXBlLUMgY29udHJvbGxlcgo+ICsgKgo+ICsgKiBDb3B5cmln aHQgKEMpIDIwMTctMjAxOCBOVklESUEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu Cj4gKyAqIEF1dGhvcjogQWpheSBHdXB0YSA8YWpheWdAbnZpZGlhLmNvbT4KPiArICoKPiArICog U29tZSBjb2RlIGJvcnJvd2VkIGZyb20gZHJpdmVycy91c2IvdHlwZWMvdWNzaS91Y3NpX2FjcGku Ywo+ICsgKi8KPiArI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Rl bGF5Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KPiArCj4gKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+Cj4gKyNpbmNsdWRl ICJ1Y3NpLmgiCj4gKwo+ICtzdHJ1Y3QgdWNzaV9jY2cgewo+ICsJc3RydWN0IGRldmljZSAqZGV2 Owo+ICsJc3RydWN0IHVjc2kgKnVjc2k7Cj4gKwlzdHJ1Y3QgdWNzaV9wcG0gcHBtOwo+ICsJc3Ry dWN0IGkyY19jbGllbnQgKmNsaWVudDsKPiArCWludCBpcnE7Cj4gK307Cj4gKwo+ICsjZGVmaW5l IENDR1hfSTJDX1JBQl9ERVZJQ0VfTU9ERQkJCTB4MDAKPiArI2RlZmluZSBDQ0dYX0kyQ19SQUJf UkVBRF9TSUxJQ09OX0lECQkJMHgyCj4gKyNkZWZpbmUgQ0NHWF9JMkNfUkFCX0lOVFJfUkVHCQkJ CTB4MDYKPiArI2RlZmluZSBDQ0dYX0kyQ19SQUJfRlcxX1ZFUlNJT04JCQkweDI4Cj4gKyNkZWZp bmUgQ0NHWF9JMkNfUkFCX0ZXMl9WRVJTSU9OCQkJMHgyMAo+ICsjZGVmaW5lIENDR1hfSTJDX1JB Ql9VQ1NJX0NPTlRST0wJCQkweDM5Cj4gKyNkZWZpbmUgQ0NHWF9JMkNfUkFCX1VDU0lfQ09OVFJP TF9TVEFSVAkJCUJJVCgwKQo+ICsjZGVmaW5lIENDR1hfSTJDX1JBQl9VQ1NJX0NPTlRST0xfU1RP UAkJCUJJVCgxKQo+ICsjZGVmaW5lIENDR1hfSTJDX1JBQl9SRVNQT05TRV9SRUcJCQkweDdFCj4g KyNkZWZpbmUgQ0NHWF9JMkNfUkFCX1VDU0lfREFUQV9CTE9DSyhvZmZzZXQpCSgweGYwMDAgfCAo KG9mZnNldCkgJiAweGZmKSkKPiArCj4gKyNkZWZpbmUgVVNCQ19WRVJTSU9OX09GRlNFVAkoMHgw KQo+ICsjZGVmaW5lIFVTQkNfVkVSU0lPTl9TSVpFCSgyKQo+ICsjZGVmaW5lIFVTQkNfQ0NJX09G RlNFVAkJKDB4NCkKPiArI2RlZmluZSBVU0JDX0NDSV9TSVpFCQkoNCkKPiArI2RlZmluZSBVU0JD X0NPTlRST0xfT0ZGU0VUCSgweDgpCj4gKyNkZWZpbmUgVVNCQ19DT05UUk9MX1NJWkUJKDgpCj4g KyNkZWZpbmUgVVNCQ19NU0dfSU5fT0ZGU0VUCSgweDEwKQo+ICsjZGVmaW5lIFVTQkNfTVNHX0lO X1NJWkUJKDE2KQo+ICsjZGVmaW5lIFVTQkNfTVNHX09VVF9PRkZTRVQJKDB4MjApCj4gKyNkZWZp bmUgVVNCQ19NU0dfT1VUX1NJWkUJKDE2KQo+ICsKPiArc3RhdGljIGludCBjY2dfcmVhZChzdHJ1 Y3QgdWNzaV9jY2cgKnVjLCB1MTYgcmFiLCB1OCAqZGF0YSwgdTMyIGxlbikKPiArewo+ICsJc3Ry dWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHVjLT5jbGllbnQ7Cj4gKwl1bnNpZ25lZCBjaGFyIGJ1 ZlsyXTsKPiArCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKPiArCQl7Cj4gKwkJCS5hZGRyCT0g Y2xpZW50LT5hZGRyLAo+ICsJCQkuZmxhZ3MgID0gMHgwLAo+ICsJCQkubGVuCT0gMHgyLAoKc2l6 ZW9mKGJ1Zik/Cgo+ICsJCQkuYnVmCT0gYnVmLAo+ICsJCX0sCj4gKwkJewo+ICsJCQkuYWRkcgk9 IGNsaWVudC0+YWRkciwKPiArCQkJLmZsYWdzICA9IEkyQ19NX1JELAo+ICsJCQkuYnVmCT0gZGF0 YSwKPiArCQl9LAo+ICsJfTsKPiArCXUzMiBybGVuLCByZW1fbGVuID0gbGVuOwo+ICsJaW50IHN0 YXR1czsKPiArCgpJZiB5b3VyIHRhcmdldCBJMkMgYWRhcHRlciBoYWQgc3VwcG9ydGVkIGxhcmdl ciByZWFkcywgdGhpcyB3b3VsZCBoYXZlCmJlZW4gYSBzaW5nbGUgeGZlciBpbnN0ZWFkIG9mIHRo ZSBsb29wLCBjb3JyZWN0PyBJIHRoaW5rIHRoaXMgZGVzZXJ2ZXMKYSBjb21tZW50LCBhbmQgcGVy aGFwcyBlLmcuIHRoZSBlZXByb20gZHJpdmVycyBzaG91bGQgYmUgZXhhbWluZWQgdG8Kc2VlIGhv dyB0aGV5IGhhbmRsZSBkZWZpY2llbnQgSTJDIGFkYXB0ZXJzICh0aGVyZSBpcyBhIG1vZHVsZV9w YXJhbQpuYW1lZCBpb19saW1pdCBpbiB0aGUgYXQyNCBkcml2ZXIpLiBCZWNhdXNlIGl0IGlzIGEg bGl0dGxlIGJpdCBzYWQgdG8KcGVuYWxpc2UgYWxsIHVzZXJzIGp1c3QgYmVjYXVzZSB5b3UgaGF2 ZSBhbiBhZGFwdGVyIHdpdGggbGltaXRhdGlvbnMuCk9yIGlzIHRoaXMgZHJpdmVyIHRpZWQgdG8g dGhhdCBhZGFwdGVyPwoKQW55d2F5LCBJJ20gc2F0aXNmaWVkIHdpdGggYSBjb21tZW50LCBhcyBJ IGRvbid0IGNhcmUgYWxsIHRoYXQgbXVjaC4KCj4gKwl3aGlsZSAocmVtX2xlbiA+IDApIHsKPiAr CQltc2dzWzFdLmJ1ZiA9ICZkYXRhW2xlbiAtIHJlbV9sZW5dOwo+ICsJCXJsZW4gPSBtaW5fdCh1 MTYsIHJlbV9sZW4sIDQpOwo+ICsJCW1zZ3NbMV0ubGVuID0gcmxlbjsKPiArCQlwdXRfdW5hbGln bmVkX2xlMTYocmFiLCBidWYpOwo+ICsJCXN0YXR1cyA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFk YXB0ZXIsIG1zZ3MsIEFSUkFZX1NJWkUobXNncykpOwo+ICsJCWlmIChzdGF0dXMgPCAwKSB7Cj4g KwkJCWRldl9lcnIodWMtPmRldiwgImkyY190cmFuc2ZlciBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7 Cj4gKwkJCXJldHVybiBzdGF0dXM7Cj4gKwkJfQo+ICsJCXJhYiArPSBybGVuOwo+ICsJCXJlbV9s ZW4gLT0gcmxlbjsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBjY2dfd3JpdGUoc3RydWN0IHVjc2lfY2NnICp1YywgdTE2IHJhYiwgdTggKmRhdGEsIHUzMiBs ZW4pCj4gK3sKPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB1Yy0+Y2xpZW50Owo+ICsJ dW5zaWduZWQgY2hhciBidWZbMl07Cj4gKwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7Cj4gKwkJ ewo+ICsJCQkuYWRkcgk9IGNsaWVudC0+YWRkciwKPiArCQkJLmZsYWdzICA9IDB4MCwKPiArCQkJ Lmxlbgk9IDB4MiwKCnNpemVvZihidWYpPwoKPiArCQkJLmJ1Zgk9IGJ1ZiwKPiArCQl9LAo+ICsJ CXsKPiArCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCj4gKwkJCS5mbGFncyAgPSAweDAsCj4gKwkJ CS5idWYJPSBkYXRhLAo+ICsJCQkubGVuCT0gbGVuLAo+ICsJCX0sCj4gKwl9Owo+ICsJaW50IHN0 YXR1czsKPiArCj4gKwlwdXRfdW5hbGlnbmVkX2xlMTYocmFiLCBidWYpOwo+ICsJc3RhdHVzID0g aTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgQVJSQVlfU0laRShtc2dzKSk7Cj4g KwlpZiAoc3RhdHVzIDwgMCkgewo+ICsJCWRldl9lcnIodWMtPmRldiwgImkyY190cmFuc2ZlciBm YWlsZWQgJWRcbiIsIHN0YXR1cyk7Cj4gKwkJcmV0dXJuIHN0YXR1czsKPiArCX0KPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB1Y3NpX2NjZ19pbml0KHN0cnVjdCB1Y3Np X2NjZyAqdWMpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVjLT5kZXY7Cj4gKwl1bnNp Z25lZCBpbnQgY291bnQgPSAxMDsKPiArCXU4IGRhdGFbNjRdOwo+ICsJaW50IHN0YXR1czsKPiAr Cj4gKwlzdGF0dXMgPSBjY2dfcmVhZCh1YywgQ0NHWF9JMkNfUkFCX0RFVklDRV9NT0RFLCBkYXRh LCBzaXplb2YoZGF0YSkpOwo+ICsJaWYgKHN0YXR1cyA8IDApCj4gKwkJcmV0dXJuIHN0YXR1czsK PiArCj4gKwlkZXZfZGJnKGRldiwgIlNpbGljb24gaWQgJTJwaCIsIGRhdGEgKyBDQ0dYX0kyQ19S QUJfUkVBRF9TSUxJQ09OX0lEKTsKPiArCWRldl9kYmcoZGV2LCAiRlcxIHZlcnNpb24gJThwaFxu IiwgZGF0YSArIENDR1hfSTJDX1JBQl9GVzFfVkVSU0lPTik7Cj4gKwlkZXZfZGJnKGRldiwgIkZX MiB2ZXJzaW9uICU4cGhcbiIsIGRhdGEgKyBDQ0dYX0kyQ19SQUJfRlcyX1ZFUlNJT04pOwo+ICsK PiArCWRhdGFbMF0gPSBDQ0dYX0kyQ19SQUJfVUNTSV9DT05UUk9MX1NUT1A7Cj4gKwlzdGF0dXMg PSBjY2dfd3JpdGUodWMsIENDR1hfSTJDX1JBQl9VQ1NJX0NPTlRST0wsIGRhdGEsIDB4MSk7Cj4g KwlpZiAoc3RhdHVzIDwgMCkKPiArCQlyZXR1cm4gc3RhdHVzOwo+ICsKPiArCWRhdGFbMF0gPSBD Q0dYX0kyQ19SQUJfVUNTSV9DT05UUk9MX1NUQVJUOwo+ICsJc3RhdHVzID0gY2NnX3dyaXRlKHVj LCBDQ0dYX0kyQ19SQUJfVUNTSV9DT05UUk9MLCBkYXRhLCAweDEpOwo+ICsJaWYgKHN0YXR1cyA8 IDApCj4gKwkJcmV0dXJuIHN0YXR1czsKPiArCj4gKwkvKgo+ICsJICogRmx1c2ggQ0NHeCBSRVNQ T05TRSBxdWV1ZSBieSBhY2tpbmcgaW50ZXJydXB0cwo+ICsJICogLSBhYm92ZSB1Y3NpIGNvbnRy b2wgcmVnaXN0ZXIgd3JpdGUgd2lsbCBwdXNoIHJlc3BvbnNlCj4gKwkgKiB3aGljaCBtdXN0IGJl IGZsdXNoZWQKPiArCSAqIC0gYWZmZWN0cyBmL3cgdXBkYXRlIHdoaWNoIHJlYWRzIHJlc3BvbnNl IHJlZ2lzdGVyCj4gKwkgKi8KPiArCWRhdGFbMF0gPSAweGZmOwo+ICsJZG8gewo+ICsJCXN0YXR1 cyA9IGNjZ193cml0ZSh1YywgQ0NHWF9JMkNfUkFCX0lOVFJfUkVHLCBkYXRhLCAweDEpOwo+ICsJ CWlmIChzdGF0dXMgPCAwKQo+ICsJCQlyZXR1cm4gc3RhdHVzOwo+ICsKPiArCQl1c2xlZXBfcmFu Z2UoMTAwMDAsIDExMDAwKTsKPiArCj4gKwkJc3RhdHVzID0gY2NnX3JlYWQodWMsIENDR1hfSTJD X1JBQl9JTlRSX1JFRywgZGF0YSwgMHgxKTsKPiArCQlpZiAoc3RhdHVzIDwgMCkKPiArCQkJcmV0 dXJuIHN0YXR1czsKPiArCX0gd2hpbGUgKChkYXRhWzBdICE9IDB4MDApICYmIGNvdW50LS0pOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHVjc2lfY2NnX3NlbmRfZGF0 YShzdHJ1Y3QgdWNzaV9jY2cgKnVjKQo+ICt7Cj4gKwl1bnNpZ25lZCBjaGFyIGJ1ZjFbVVNCQ19N U0dfT1VUX1NJWkVdOwo+ICsJdW5zaWduZWQgY2hhciBidWYyW1VTQkNfQ09OVFJPTF9TSVpFXTsK PiArCWludCBzdGF0dXM7Cj4gKwl1MTYgcmFiOwo+ICsKPiArCW1lbWNweShidWYxLCAodTggKiko dWMtPnBwbS5kYXRhKSArIFVTQkNfTVNHX09VVF9PRkZTRVQsIHNpemVvZihidWYxKSk7Cj4gKwlt ZW1jcHkoYnVmMiwgKHU4ICopKHVjLT5wcG0uZGF0YSkgKyBVU0JDX0NPTlRST0xfT0ZGU0VULCBz aXplb2YoYnVmMikpOwoKSG1tLCBub3cgdGhhdCBJIHNlZSB3aGF0IHRoaXMgZnVuY3Rpb24gZG9l cywgaW5zdGVhZCBvZiBqdXN0IHNlZWluZyBhIGJ1bmNoCm9mIG1hZ2ljIG51bWJlcnMsIEkgd29u ZGVyIHdoeSB5b3UgbWFrZSBjb3BpZXMgaW5zdGVhZCBvZiBmZWVkaW5nIHRoZSBjb3JyZWN0CnNl Y3Rpb24gb2YgdGhlIHBwbS5kYXRhIGJ1ZmZlciBkaXJlY3RseSB0byBjY2dfd3JpdGUsIGxpa2Ug eW91IGRvIGJlbG93IGZvcgpyZWN2PwoKPiArCj4gKwlyYWIgPSBDQ0dYX0kyQ19SQUJfVUNTSV9E QVRBX0JMT0NLKFVTQkNfTVNHX09VVF9PRkZTRVQpOwo+ICsJc3RhdHVzID0gY2NnX3dyaXRlKHVj LCByYWIsIGJ1ZjEsIHNpemVvZihidWYxKSk7Cj4gKwlpZiAoc3RhdHVzIDwgMCkKPiArCQlyZXR1 cm4gc3RhdHVzOwo+ICsKPiArCXJhYiA9IENDR1hfSTJDX1JBQl9VQ1NJX0RBVEFfQkxPQ0soVVNC Q19DT05UUk9MX09GRlNFVCk7Cj4gKwlyZXR1cm4gY2NnX3dyaXRlKHVjLCByYWIsIGJ1ZjIsIHNp emVvZihidWYyKSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdWNzaV9jY2dfcmVjdl9kYXRhKHN0 cnVjdCB1Y3NpX2NjZyAqdWMpCj4gK3sKPiArCXU4ICpwcG0gPSAodTggKil1Yy0+cHBtLmRhdGE7 Cj4gKwlpbnQgc3RhdHVzOwo+ICsJdTE2IHJhYjsKPiArCj4gKwlyYWIgPSBDQ0dYX0kyQ19SQUJf VUNTSV9EQVRBX0JMT0NLKFVTQkNfQ0NJX09GRlNFVCk7Cj4gKwlzdGF0dXMgPSBjY2dfcmVhZCh1 YywgcmFiLCBwcG0gKyBVU0JDX0NDSV9PRkZTRVQsIFVTQkNfQ0NJX1NJWkUpOwo+ICsJaWYgKHN0 YXR1cyA8IDApCj4gKwkJcmV0dXJuIHN0YXR1czsKPiArCj4gKwlyYWIgPSBDQ0dYX0kyQ19SQUJf VUNTSV9EQVRBX0JMT0NLKFVTQkNfTVNHX0lOX09GRlNFVCk7Cj4gKwlyZXR1cm4gY2NnX3JlYWQo dWMsIHJhYiwgcHBtICsgVVNCQ19NU0dfSU5fT0ZGU0VULCBVU0JDX01TR19JTl9TSVpFKTsKPiAr fQo+ICsKPiArc3RhdGljIGludCB1Y3NpX2NjZ19hY2tfaW50ZXJydXB0KHN0cnVjdCB1Y3NpX2Nj ZyAqdWMpCj4gK3sKPiArCWludCBzdGF0dXM7Cj4gKwl1bnNpZ25lZCBjaGFyIGJ1ZlsxXSA9IHsw eDB9OwoKVGhlIGluaXRpYWxpemVyIGNhbiBiZSBkcm9wcGVkLgoKPiArCj4gKwlzdGF0dXMgPSBj Y2dfcmVhZCh1YywgQ0NHWF9JMkNfUkFCX0lOVFJfUkVHLCBidWYsIDB4MSk7CgpzaXplb2YoYnVm KT8KCj4gKwlpZiAoc3RhdHVzIDwgMCkKPiArCQlyZXR1cm4gc3RhdHVzOwo+ICsKPiArCXJldHVy biBjY2dfd3JpdGUodWMsIENDR1hfSTJDX1JBQl9JTlRSX1JFRywgYnVmLCAweDEpOwoKc2l6ZW9m KGJ1Zik/Cgo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHVjc2lfY2NnX3N5bmMoc3RydWN0IHVjc2lf cHBtICpwcG0pCj4gK3sKPiArCXN0cnVjdCB1Y3NpX2NjZyAqdWMgPSBjb250YWluZXJfb2YocHBt LCBzdHJ1Y3QgdWNzaV9jY2csIHBwbSk7Cj4gKwlpbnQgc3RhdHVzOwo+ICsKPiArCXN0YXR1cyA9 IHVjc2lfY2NnX3JlY3ZfZGF0YSh1Yyk7Cj4gKwlpZiAoc3RhdHVzIDwgMCkKPiArCQlyZXR1cm4g c3RhdHVzOwo+ICsKPiArCS8qIGFjayBpbnRlcnJ1cHQgdG8gYWxsb3cgbmV4dCBjb21tYW5kIHRv IHJ1biAqLwo+ICsJcmV0dXJuIHVjc2lfY2NnX2Fja19pbnRlcnJ1cHQodWMpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHVjc2lfY2NnX2NtZChzdHJ1Y3QgdWNzaV9wcG0gKnBwbSwgc3RydWN0IHVj c2lfY29udHJvbCAqY3RybCkKPiArewo+ICsJc3RydWN0IHVjc2lfY2NnICp1YyA9IGNvbnRhaW5l cl9vZihwcG0sIHN0cnVjdCB1Y3NpX2NjZywgcHBtKTsKPiArCj4gKwlwcG0tPmRhdGEtPmN0cmwu cmF3X2NtZCA9IGN0cmwtPnJhd19jbWQ7Cj4gKwlyZXR1cm4gdWNzaV9jY2dfc2VuZF9kYXRhKHVj KTsKPiArfQo+ICsKPiArc3RhdGljIGlycXJldHVybl90IGNjZ19pcnFfaGFuZGxlcihpbnQgaXJx LCB2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgdWNzaV9jY2cgKnVjID0gZGF0YTsKPiArCj4g Kwl1Y3NpX25vdGlmeSh1Yy0+dWNzaSk7Cj4gKwo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IHVjc2lfY2NnX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGll bnQsCj4gKwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQo+ICt7Cj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7Cj4gKwlzdHJ1Y3QgdWNzaV9jY2cgKnVjOwo+ ICsJaW50IHN0YXR1czsKPiArCXUxNiByYWI7Cj4gKwo+ICsJdWMgPSBkZXZtX2t6YWxsb2MoZGV2 LCBzaXplb2YoKnVjKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXVjKQo+ICsJCXJldHVybiAtRU5P TUVNOwo+ICsKPiArCXVjLT5wcG0uZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1 Y3QgdWNzaV9kYXRhKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXVjLT5wcG0uZGF0YSkKPiArCQly ZXR1cm4gLUVOT01FTTsKCldhaXQgYSBtaW51dGUsIHBwbS5kYXRhIGlzIGFsbG9jYXRlZCBhcyBh IHN0cnVjdD8gQW5kIGl0J3MgX19wYWNrZWQhIFNvLCBpdCdzCmNsZWFybHkgaW50ZW5kZWQgdG8g bWF0Y2ggc29tZXRoaW5nIHJlYWwuIEkgZGlkbid0IG5vdGljZSB0aGF0IGJlZm9yZSwKYnV0IHRo YXQgbWVhbnMgdGhhdCBhbGwgdGhlIG5ldyBvZmZzZXRzIGFuZCBzaXplcyBkZWZpbmVkIGluIHYx MCBhcmUgYXZhaWxhYmxlCndpdGggb2Zmc2V0b2YoKSBhbmQgc2l6ZW9mKCkgd2hpY2ggd291bGQg YmUgbXVjaCBuZWF0ZXIgdGhhbiBhIGJ1bmNoIG9mCmRlZmluZXMuIFNvcnJ5IGZvciBub3QgY2F0 Y2hpbmcgdGhpcyBlYXJsaWVyIQoKU2VlIGJlbG93IGZvciBhbiBleGFtcGxlLgoKPiArCj4gKwl1 Yy0+cHBtLmNtZCA9IHVjc2lfY2NnX2NtZDsKPiArCXVjLT5wcG0uc3luYyA9IHVjc2lfY2NnX3N5 bmM7Cj4gKwl1Yy0+ZGV2ID0gZGV2Owo+ICsJdWMtPmNsaWVudCA9IGNsaWVudDsKPiArCj4gKwkv KiByZXNldCBjY2cgZGV2aWNlIGFuZCBpbml0aWFsaXplIHVjc2kgKi8KPiArCXN0YXR1cyA9IHVj c2lfY2NnX2luaXQodWMpOwo+ICsJaWYgKHN0YXR1cyA8IDApIHsKPiArCQlkZXZfZXJyKHVjLT5k ZXYsICJ1Y3NpX2NjZ19pbml0IGZhaWxlZCAtICVkXG4iLCBzdGF0dXMpOwo+ICsJCXJldHVybiBz dGF0dXM7Cj4gKwl9Cj4gKwo+ICsJdWMtPmlycSA9IGNsaWVudC0+aXJxOwo+ICsKPiArCXN0YXR1 cyA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCB1Yy0+aXJxLCBOVUxMLCBjY2dfaXJx X2hhbmRsZXIsCj4gKwkJCQkJICAgSVJRRl9PTkVTSE9UIHwgSVJRRl9UUklHR0VSX0hJR0gsCj4g KwkJCQkJICAgZGV2X25hbWUoZGV2KSwgdWMpOwo+ICsJaWYgKHN0YXR1cyA8IDApIHsKPiArCQlk ZXZfZXJyKHVjLT5kZXYsICJyZXF1ZXN0X3RocmVhZGVkX2lycSBmYWlsZWQgLSAlZFxuIiwgc3Rh dHVzKTsKPiArCQlyZXR1cm4gc3RhdHVzOwo+ICsJfQo+ICsKPiArCXVjLT51Y3NpID0gdWNzaV9y ZWdpc3Rlcl9wcG0oZGV2LCAmdWMtPnBwbSk7Cj4gKwlpZiAoSVNfRVJSKHVjLT51Y3NpKSkgewo+ ICsJCWRldl9lcnIodWMtPmRldiwgInVjc2lfcmVnaXN0ZXJfcHBtIGZhaWxlZFxuIik7Cj4gKwkJ cmV0dXJuIFBUUl9FUlIodWMtPnVjc2kpOwo+ICsJfQo+ICsKPiArCXJhYiA9IENDR1hfSTJDX1JB Ql9VQ1NJX0RBVEFfQkxPQ0soVVNCQ19WRVJTSU9OX09GRlNFVCk7Cj4gKwlzdGF0dXMgPSBjY2df cmVhZCh1YywgcmFiLCAodTggKikodWMtPnBwbS5kYXRhKSArIFVTQkNfVkVSU0lPTl9PRkZTRVQs Cj4gKwkJCSAgVVNCQ19WRVJTSU9OX1NJWkUpOwoKRS5nLgoJcmFiID0gQ0NHWF9JMkNfUkFCX1VD U0lfREFUQV9CTE9DSyhvZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLCB2ZXJzaW9uKSk7CglzdGF0 dXMgPSBjY2dfcmVhZCh1YywgcmFiLCAodTggKikmdWMtPnBwbS5kYXRhLT52ZXJzaW9uLAoJCQkg IHNpemVvZih1Yy0+cHBtLmRhdGEtPnZlcnNpb24pKTsKCkhtbSwgYnV0IHRoaXMgaGlnaGxpZ2h0 cyB0aGF0IHlvdSBhcmUgbm90IGRvaW5nIGFueSBlbmRpYW4gY29udmVyc2lvbiBvZgp0aGUgZmll bGRzIGluIHRoYXQgc3RydWN0IGFzIHlvdSByZWFkL3dyaXRlIGl0LiBEbyB5b3UgbmVlZCB0byBp biBjYXNlCnlvdSBoYXZlIGFuIGVuZGlhbiBtaXNtYXRjaD8KCkNoZWVycywKUGV0ZXIKCj4gKwlp ZiAoc3RhdHVzIDwgMCkgewo+ICsJCXVjc2lfdW5yZWdpc3Rlcl9wcG0odWMtPnVjc2kpOwo+ICsJ CXJldHVybiBzdGF0dXM7Cj4gKwl9Cj4gKwo+ICsJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwg dWMpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdWNzaV9jY2dfcmVtb3Zl KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCj4gK3sKPiArCXN0cnVjdCB1Y3NpX2NjZyAqdWMg PSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKPiArCj4gKwl1Y3NpX3VucmVnaXN0ZXJfcHBt KHVjLT51Y3NpKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBpMmNfZGV2aWNlX2lkIHVjc2lfY2NnX2RldmljZV9pZFtdID0gewo+ICsJeyJjY2d4LXVj c2kiLCAwfSwKPiArCXt9Cj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB1Y3NpX2Nj Z19kZXZpY2VfaWQpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHVjc2lfY2NnX2Ry aXZlciA9IHsKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUgPSAidWNzaV9jY2ciLAo+ICsJfSwK PiArCS5wcm9iZSA9IHVjc2lfY2NnX3Byb2JlLAo+ICsJLnJlbW92ZSA9IHVjc2lfY2NnX3JlbW92 ZSwKPiArCS5pZF90YWJsZSA9IHVjc2lfY2NnX2RldmljZV9pZCwKPiArfTsKPiArCj4gK21vZHVs ZV9pMmNfZHJpdmVyKHVjc2lfY2NnX2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJBamF5 IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPiIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlVDU0kg ZHJpdmVyIGZvciBDeXByZXNzIENDR3ggVHlwZS1DIGNvbnRyb2xsZXIiKTsKPiArTU9EVUxFX0xJ Q0VOU0UoIkdQTCB2MiIpOwo+Cg==