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: [v9,2/2] usb: typec: ucsi: add support for Cypress CCGx From: Ajay Gupta Message-Id: <1c2fbff3a43149cabe3f4eb883b46d80@bgmail101.nvidia.com> Date: Fri, 7 Sep 2018 17:28:27 +0000 To: Peter Rosin , "wsa@the-dreams.de" , "heikki.krogerus@linux.intel.com" Cc: "linux-usb@vger.kernel.org" , "linux-i2c@vger.kernel.org" List-ID: SGkgUGV0ZXIsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUGV0ZXIg Um9zaW4gPHBlZGFAYXhlbnRpYS5zZT4NCj4gU2VudDogRnJpZGF5LCBTZXB0ZW1iZXIgNywgMjAx OCAyOjEzIEFNDQo+IFRvOiBBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPjsgd3NhQHRoZS1k cmVhbXMuZGU7DQo+IGhlaWtraS5rcm9nZXJ1c0BsaW51eC5pbnRlbC5jb20NCj4gQ2M6IGxpbnV4 LXVzYkB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWkyY0B2Z2VyLmtlcm5lbC5vcmcNCj4gU3ViamVj dDogUmU6IFtQQVRDSCB2OSAyLzJdIHVzYjogdHlwZWM6IHVjc2k6IGFkZCBzdXBwb3J0IGZvciBD eXByZXNzIENDR3gNCj4gDQo+IE9uIDIwMTgtMDktMDcgMDE6NTYsIEFqYXkgR3VwdGEgd3JvdGU6 DQo+ID4gTGF0ZXN0IE5WSURJQSBHUFUgY2FyZHMgaGF2ZSBhIEN5cHJlc3MgQ0NHeCBUeXBlLUMg Y29udHJvbGxlciBvdmVyIEkyQw0KPiA+IGludGVyZmFjZS4NCj4gPg0KPiA+IFRoaXMgVUNTSSBJ MkMgZHJpdmVyIHVzZXMgSTJDIGJ1cyBkcml2ZXIgaW50ZXJmYWNlIGZvciBjb21tdW5pY2F0aW5n DQo+ID4gd2l0aCBUeXBlLUMgY29udHJvbGxlci4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEFq YXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+DQo+ID4gUmV2aWV3ZWQtYnk6IEFuZHkgU2hldmNo ZW5rbyA8YW5keS5zaGV2Y2hlbmtvQGdtYWlsLmNvbT4NCj4gPiBBY2tlZC1ieTogSGVpa2tpIEty b2dlcnVzIDxoZWlra2kua3JvZ2VydXNAbGludXguaW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+IENo YW5nZXMgZnJvbSB2MSAtPiB2Mg0KPiA+IAlGaXhlZCBpZGVudGF0aW9uIGluIGRyaXZlcnMvdXNi L3R5cGVjL3Vjc2kvS2NvbmZpZyBDaGFuZ2VzIGZyb20gdjIgLT4NCj4gPiB2Mw0KPiA+IAlGaXhl ZCBtb3N0IG9mIGNvbW1lbnRzIGZyb20gSGVpa2tpDQo+ID4gCVJlbmFtZSB1Y3NpX2kyY19jY2cu YyAtPiB1Y3NpX2NjZy5jDQo+ID4gQ2hhbmdlcyBmcm9tIHYzIC0+IHY0DQo+ID4gCUZpeGVkIGNv bW1lbnRzIGZyb20gQW5keQ0KPiA+IENoYW5nZXMgZnJvbSB2NCAtPiB2NQ0KPiA+IAlGaXhlZCBj b21tZW50cyBmcm9tIEFuZHkNCj4gPiBDaGFuZ2VzIGZyb20gdjUgLT4gdjYNCj4gPiAJRml4ZWQg cmV2aWV3IGNvbW1lbnRzIGZyb20gR3JlZw0KPiA+IENoYW5nZXMgZnJvbSB2NiAtPiB2Nw0KPiA+ IAlOb25lDQo+ID4gQ2hhbmdlcyBmcm9tIHY3IC0+IHY4DQo+ID4gCUZpeGVkIHJldmlldyBjb21t ZW50cyBmcm9tIFBldGVyDQo+ID4gCS0gUmVtb3ZlZCBlbXB0eSBTVE9QIG1lc3NhZ2UNCj4gPiAJ LSBVc2luZyBzdGFjayBtZW1vcnkgZm9yIGkyY190cmFuc2ZlcigpIENoYW5nZXMgZnJvbSB2OCAt PiB2OQ0KPiA+IAlOb25lDQo+ID4NCj4gPiAgZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmln ICAgIHwgIDEwICsrDQo+ID4gIGRyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvTWFrZWZpbGUgICB8ICAg MiArDQo+ID4gIGRyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNzaV9jY2cuYyB8IDMzNQ0KPiA+ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gIDMgZmlsZXMgY2hhbmdl ZCwgMzQ3IGluc2VydGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNi L3R5cGVjL3Vjc2kvdWNzaV9jY2cuYw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNi L3R5cGVjL3Vjc2kvS2NvbmZpZw0KPiA+IGIvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmln IGluZGV4IGUzNmQ2YzcuLjc4MTE4ODggMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy91c2IvdHlw ZWMvdWNzaS9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmln DQo+ID4gQEAgLTIzLDYgKzIzLDE2IEBAIGNvbmZpZyBUWVBFQ19VQ1NJDQo+ID4NCj4gPiAgaWYg VFlQRUNfVUNTSQ0KPiA+DQo+ID4gK2NvbmZpZyBVQ1NJX0NDRw0KPiA+ICsJdHJpc3RhdGUgIlVD U0kgSW50ZXJmYWNlIERyaXZlciBmb3IgQ3lwcmVzcyBDQ0d4Ig0KPiA+ICsJZGVwZW5kcyBvbiBJ MkMNCj4gPiArCWhlbHANCj4gPiArCSAgVGhpcyBkcml2ZXIgZW5hYmxlcyBVQ1NJIHN1cHBvcnQg b24gcGxhdGZvcm1zIHRoYXQgZXhwb3NlIGENCj4gPiArCSAgQ3lwcmVzcyBDQ0d4IFR5cGUtQyBj b250cm9sbGVyIG92ZXIgSTJDIGludGVyZmFjZS4NCj4gPiArDQo+ID4gKwkgIFRvIGNvbXBpbGUg dGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsDQo+ IGJlDQo+ID4gKwkgIGNhbGxlZCB1Y3NpX2NjZy4NCj4gPiArDQo+ID4gIGNvbmZpZyBVQ1NJX0FD UEkNCj4gPiAgCXRyaXN0YXRlICJVQ1NJIEFDUEkgSW50ZXJmYWNlIERyaXZlciINCj4gPiAgCWRl cGVuZHMgb24gQUNQSQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL01h a2VmaWxlDQo+ID4gYi9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL01ha2VmaWxlIGluZGV4IDdhZmJl YTUuLjJmNDkwMGIgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9NYWtl ZmlsZQ0KPiA+ICsrKyBiL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvTWFrZWZpbGUNCj4gPiBAQCAt OCwzICs4LDUgQEAgdHlwZWNfdWNzaS15CQkJOj0gdWNzaS5vDQo+ID4gIHR5cGVjX3Vjc2ktJChD T05GSUdfVFJBQ0lORykJKz0gdHJhY2Uubw0KPiA+DQo+ID4gIG9iai0kKENPTkZJR19VQ1NJX0FD UEkpCQkrPSB1Y3NpX2FjcGkubw0KPiA+ICsNCj4gPiArb2JqLSQoQ09ORklHX1VDU0lfQ0NHKQkJ Kz0gdWNzaV9jY2cubw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vj c2lfY2NnLmMNCj4gPiBiL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNzaV9jY2cuYw0KPiA+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uMzg3YjZmZA0KPiA+IC0tLSAv ZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2lfY2NnLmMNCj4g PiBAQCAtMCwwICsxLDMzNSBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMA0KPiA+ICsvKg0KPiA+ICsgKiBVQ1NJIGRyaXZlciBmb3IgQ3lwcmVzcyBDQ0d4IFR5cGUt QyBjb250cm9sbGVyDQo+ID4gKyAqDQo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IE5W SURJQSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPiArICogQXV0aG9yOiBB amF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPg0KPiA+ICsgKg0KPiA+ICsgKiBTb21lIGNvZGUg Ym9ycm93ZWQgZnJvbSBkcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2lfYWNwaS5jDQo+ID4gKyAq Lw0KPiA+ICsjaW5jbHVkZSA8bGludXgvYWNwaS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVs YXkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2kyYy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGFzbS91bmFsaWdu ZWQuaD4NCj4gPiArI2luY2x1ZGUgInVjc2kuaCINCj4gPiArDQo+ID4gK3N0cnVjdCB1Y3NpX2Nj ZyB7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ID4gKwlzdHJ1Y3QgdWNzaSAqdWNzaTsN Cj4gPiArCXN0cnVjdCB1Y3NpX3BwbSBwcG07DQo+ID4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xp ZW50Ow0KPiA+ICsJaW50IGlycTsNCj4gPiArfTsNCj4gPiArDQo+ID4gKyNkZWZpbmUgQ0NHWF9J MkNfUkFCX0RFVklDRV9NT0RFCQkJMHgwMA0KPiA+ICsjZGVmaW5lIENDR1hfSTJDX1JBQl9SRUFE X1NJTElDT05fSUQJCQkweDINCj4gPiArI2RlZmluZSBDQ0dYX0kyQ19SQUJfSU5UUl9SRUcJCQkJ MHgwNg0KPiA+ICsjZGVmaW5lIENDR1hfSTJDX1JBQl9GVzFfVkVSU0lPTgkJCTB4MjgNCj4gPiAr I2RlZmluZSBDQ0dYX0kyQ19SQUJfRlcyX1ZFUlNJT04JCQkweDIwDQo+ID4gKyNkZWZpbmUgQ0NH WF9JMkNfUkFCX1VDU0lfQ09OVFJPTAkJCTB4MzkNCj4gPiArI2RlZmluZSBDQ0dYX0kyQ19SQUJf VUNTSV9DT05UUk9MX1NUQVJUCQkJQklUKDApDQo+ID4gKyNkZWZpbmUgQ0NHWF9JMkNfUkFCX1VD U0lfQ09OVFJPTF9TVE9QCQkJQklUKDEpDQo+ID4gKyNkZWZpbmUgQ0NHWF9JMkNfUkFCX1JFU1BP TlNFX1JFRwkJCTB4N0UNCj4gPiArI2RlZmluZSBDQ0dYX0kyQ19SQUJfVUNTSV9EQVRBX0JMT0NL CQkJMHhmMDAwDQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGNjZ19yZWFkKHN0cnVjdCB1Y3NpX2Nj ZyAqdWMsIHUxNiByYWIsIHU4ICpkYXRhLCB1MzIgbGVuKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qg aTJjX2NsaWVudCAqY2xpZW50ID0gdWMtPmNsaWVudDsNCj4gPiArCXVuc2lnbmVkIGNoYXIgYnVm WzJdOw0KPiA+ICsJc3RydWN0IGkyY19tc2cgbXNnc1tdID0gew0KPiA+ICsJCXsNCj4gPiArCQkJ LmFkZHIJPSBjbGllbnQtPmFkZHIsDQo+ID4gKwkJCS5mbGFncyAgPSAweDAsDQo+ID4gKwkJCS5s ZW4JPSAweDIsDQo+ID4gKwkJCS5idWYJPSBidWYsDQo+ID4gKwkJfSwNCj4gPiArCQl7DQo+ID4g KwkJCS5hZGRyCT0gY2xpZW50LT5hZGRyLA0KPiA+ICsJCQkuZmxhZ3MgID0gSTJDX01fUkQsDQo+ ID4gKwkJCS5idWYJPSBkYXRhLA0KPiA+ICsJCX0sDQo+ID4gKwl9Ow0KPiA+ICsJdTMyIHJsZW4s IHJlbV9sZW4gPSBsZW47DQo+ID4gKwlpbnQgc3RhdHVzOw0KPiA+ICsNCj4gPiArCXdoaWxlIChy ZW1fbGVuID4gMCkgew0KPiA+ICsJCW1zZ3NbMV0uYnVmID0gJmRhdGFbbGVuIC0gcmVtX2xlbl07 DQo+ID4gKwkJcmxlbiA9IG1pbl90KHUxNiwgcmVtX2xlbiwgNCk7DQo+ID4gKwkJbXNnc1sxXS5s ZW4gPSBybGVuOw0KPiA+ICsJCXB1dF91bmFsaWduZWRfbGUxNihyYWIsIGJ1Zik7DQo+IA0KPiBX aHkgbm90IHNpbXBseSBkbyB3aGljaGV2ZXIgaXMgY29ycmVjdCBvZg0KPiANCj4gCWJ1ZlswXSA9 IHJhYiA+PiA4Ow0KPiAJYnVmWzFdID0gcmFiOw0KPiANCj4gYW5kDQo+IA0KPiAJYnVmWzBdID0g cmFiOw0KPiAJYnVmWzFdID0gcmFiID4+IDg7DQo+IA0KPiBhbmQgZmVlZCByYWIgYXMgYSBjcHUt bmF0aXZlIHZhbHVlIGFuZCBnZXQgcmlkIG9mIHRoZSBlbmRpYW5lc3MgY3JhcC4NCkl0IHdhcyBs aWtlIHRoYXQgYnV0IHdhcyBjaGFuZ2VkIHRvIHB1dF91bmFsaWduZWRfbGUxNigpIGluIG9uZSBv Zg0KcmV2aWV3IGNvbW1lbnRzIGZyb20gQW5keSBhdA0KaHR0cHM6Ly9tYXJjLmluZm8vP2w9bGlu dXgtdXNiJm09MTUzNTYxNjg5NDE4Njk2Jnc9Mg0KDQpJIHdvdWxkIHJhdGhlciBzdGF5IHdpdGgg cHV0X3VuYWxpZ25lZF9sZTE2KCkgd2hpY2ggbG9va3MgYmV0dGVyIHRvIG1lDQphbmQgaXMgc2lt aWxhciB0byB5b3VyIHN1Z2dlc3Rpb24gb2YgdXNpbmcgaTJjXzhiaXRfYWRkcl9mcm9tX21zZygp IGluIDEvMiANCnBhdGNoIG9mIHNlcmllcy4NCiANCj4gPiArCQlzdGF0dXMgPSBpMmNfdHJhbnNm ZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLA0KPiBBUlJBWV9TSVpFKG1zZ3MpKTsNCj4gPiArCQlp ZiAoc3RhdHVzIDwgMCkgew0KPiA+ICsJCQlkZXZfZXJyKHVjLT5kZXYsICJpMmNfdHJhbnNmZXIg ZmFpbGVkICVkXG4iLCBzdGF0dXMpOw0KPiA+ICsJCQlyZXR1cm4gc3RhdHVzOw0KPiA+ICsJCX0N Cj4gPiArCQlyYWIgKz0gcmxlbjsNCj4gPiArCQlyZW1fbGVuIC09IHJsZW47DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgY2Nn X3dyaXRlKHN0cnVjdCB1Y3NpX2NjZyAqdWMsIHUxNiByYWIsIHU4ICpkYXRhLCB1MzIgbGVuKQ0K PiA+ICt7DQo+ID4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdWMtPmNsaWVudDsNCj4g PiArCXVuc2lnbmVkIGNoYXIgYnVmWzJdOw0KPiA+ICsJc3RydWN0IGkyY19tc2cgbXNnc1tdID0g ew0KPiA+ICsJCXsNCj4gPiArCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsDQo+ID4gKwkJCS5mbGFn cyAgPSAweDAsDQo+ID4gKwkJCS5sZW4JPSAweDIsDQo+ID4gKwkJCS5idWYJPSBidWYsDQo+ID4g KwkJfSwNCj4gPiArCQl7DQo+ID4gKwkJCS5hZGRyCT0gY2xpZW50LT5hZGRyLA0KPiA+ICsJCQku ZmxhZ3MgID0gMHgwLA0KPiA+ICsJCQkuYnVmCT0gZGF0YSwNCj4gPiArCQkJLmxlbgk9IGxlbiwN Cj4gPiArCQl9LA0KPiA+ICsJfTsNCj4gPiArCWludCBzdGF0dXM7DQo+ID4gKw0KPiA+ICsJcHV0 X3VuYWxpZ25lZF9sZTE2KHJhYiwgYnVmKTsNCj4gDQo+IERpdG8uDQpTZWUgYWJvdmUuDQo+IA0K PiA+ICsJc3RhdHVzID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgQVJSQVlf U0laRShtc2dzKSk7DQo+ID4gKwlpZiAoc3RhdHVzIDwgMCkgew0KPiA+ICsJCWRldl9lcnIodWMt PmRldiwgImkyY190cmFuc2ZlciBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7DQo+ID4gKwkJcmV0dXJu IHN0YXR1czsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGludCB1Y3NpX2NjZ19pbml0KHN0cnVjdCB1Y3NpX2NjZyAqdWMpIHsNCj4g PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVjLT5kZXY7DQo+ID4gKwl1bnNpZ25lZCBpbnQgY291 bnQgPSAxMDsNCj4gPiArCXU4IGRhdGFbNjRdOw0KPiA+ICsJaW50IHN0YXR1czsNCj4gPiArDQo+ ID4gKwkvKg0KPiA+ICsJICogU2VsZWN0aXZlbHkgaXNzdWUgZGV2aWNlIHJlc2V0DQo+ID4gKwkg KiAtIGlmIFJFU1BPTlNFIHJlZ2lzdGVyIGlzIFJFU0VUX0NPTVBMRVRFLCBkbyBub3QgaXNzdWUg ZGV2aWNlDQo+IHJlc2V0DQo+ID4gKwkgKiAgICh3aWxsIGNhdXNlIHVzYiBkZXZpY2UgZGlzY29u bmVjdCAvIHJlY29ubmVjdCkNCj4gPiArCSAqIC0gaWYgUkVTUE9OU0UgcmVnaXN0ZXIgaXMgbm90 IFJFU0VUX0NPTVBMRVRFLCBpc3N1ZSBkZXZpY2UgcmVzZXQNCj4gPiArCSAqICAgKGNhdXNlcyBQ UEMgdG8gcmVzeW5jIGRldmljZSBjb25uZWN0IHN0YXRlIGJ5IHJlLWlzc3VpbmcNCj4gPiArCSAq ICAgc2V0IG11eCBjb21tYW5kKQ0KPiA+ICsJICovDQo+ID4gKwlkYXRhWzBdID0gMHgwMDsNCj4g PiArCWRhdGFbMV0gPSAweDAwOw0KPiANCj4gV2h5IGRvIHlvdSBuZWVkIHRoZXNlIGFzc2lnbWVu dHM/IFdpbGwgbm90IGNjZ19yZWFkIGp1c3Qgb3ZlcndyaXRlIHRoaXMNCj4gYW55d2F5Pw0Kb2sN Cj4gDQo+ID4gKw0KPiA+ICsJc3RhdHVzID0gY2NnX3JlYWQodWMsIENDR1hfSTJDX1JBQl9SRVNQ T05TRV9SRUcsIGRhdGEsIDB4Mik7DQo+ID4gKwlpZiAoc3RhdHVzIDwgMCkNCj4gPiArCQlyZXR1 cm4gc3RhdHVzOw0KPiA+ICsNCj4gPiArCW1lbXNldChkYXRhLCAwLCBzaXplb2YoZGF0YSkpOw0K PiANCj4gRGl0by4NCm9rDQo+IA0KPiA+ICsJc3RhdHVzID0gY2NnX3JlYWQodWMsIENDR1hfSTJD X1JBQl9ERVZJQ0VfTU9ERSwgZGF0YSwNCj4gc2l6ZW9mKGRhdGEpKTsNCj4gPiArCWlmIChzdGF0 dXMgPCAwKQ0KPiA+ICsJCXJldHVybiBzdGF0dXM7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhkZXYs ICJTaWxpY29uIGlkICUycGgiLCBkYXRhICsNCj4gQ0NHWF9JMkNfUkFCX1JFQURfU0lMSUNPTl9J RCk7DQo+ID4gKwlkZXZfZGJnKGRldiwgIkZXMSB2ZXJzaW9uICU4cGhcbiIsIGRhdGEgKw0KPiBD Q0dYX0kyQ19SQUJfRlcxX1ZFUlNJT04pOw0KPiA+ICsJZGV2X2RiZyhkZXYsICJGVzIgdmVyc2lv biAlOHBoXG4iLCBkYXRhICsNCj4gQ0NHWF9JMkNfUkFCX0ZXMl9WRVJTSU9OKTsNCj4gPiArDQo+ ID4gKwlkYXRhWzBdID0gMHgwOw0KPiA+ICsJZGF0YVsxXSA9IDB4MDsNCj4gDQo+IERpdG8uDQpv aw0KPiANCj4gPiArCXN0YXR1cyA9IGNjZ19yZWFkKHVjLCBDQ0dYX0kyQ19SQUJfUkVTUE9OU0Vf UkVHLCBkYXRhLCAweDIpOw0KPiA+ICsJaWYgKHN0YXR1cyA8IDApDQo+ID4gKwkJcmV0dXJuIHN0 YXR1czsNCj4gPiArDQo+ID4gKwlkYXRhWzBdID0gQ0NHWF9JMkNfUkFCX1VDU0lfQ09OVFJPTF9T VE9QOw0KPiA+ICsJc3RhdHVzID0gY2NnX3dyaXRlKHVjLCBDQ0dYX0kyQ19SQUJfVUNTSV9DT05U Uk9MLCBkYXRhLCAweDEpOw0KPiA+ICsJaWYgKHN0YXR1cyA8IDApDQo+ID4gKwkJcmV0dXJuIHN0 YXR1czsNCj4gPiArDQo+ID4gKwlkYXRhWzBdID0gQ0NHWF9JMkNfUkFCX1VDU0lfQ09OVFJPTF9T VEFSVDsNCj4gPiArCXN0YXR1cyA9IGNjZ193cml0ZSh1YywgQ0NHWF9JMkNfUkFCX1VDU0lfQ09O VFJPTCwgZGF0YSwgMHgxKTsNCj4gPiArCWlmIChzdGF0dXMgPCAwKQ0KPiA+ICsJCXJldHVybiBz dGF0dXM7DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIEZsdXNoIENDR3ggUkVTUE9OU0UgcXVl dWUgYnkgYWNraW5nIGludGVycnVwdHMNCj4gPiArCSAqIC0gYWJvdmUgdWNzaSBjb250cm9sIHJl Z2lzdGVyIHdyaXRlIHdpbGwgcHVzaCByZXNwb25zZQ0KPiA+ICsJICogd2hpY2ggbXVzdCBiZSBm bHVzaGVkDQo+ID4gKwkgKiAtIGFmZmVjdHMgZi93IHVwZGF0ZSB3aGljaCByZWFkcyByZXNwb25z ZSByZWdpc3Rlcg0KPiA+ICsJICovDQo+ID4gKwlkYXRhWzBdID0gMHhmZjsNCj4gPiArCWRvIHsN Cj4gPiArCQlzdGF0dXMgPSBjY2dfd3JpdGUodWMsIENDR1hfSTJDX1JBQl9JTlRSX1JFRywgZGF0 YSwgMHgxKTsNCj4gPiArCQlpZiAoc3RhdHVzIDwgMCkNCj4gPiArCQkJcmV0dXJuIHN0YXR1czsN Cj4gPiArDQo+ID4gKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMTAwMCk7DQo+ID4gKw0KPiA+ICsJ CXN0YXR1cyA9IGNjZ19yZWFkKHVjLCBDQ0dYX0kyQ19SQUJfSU5UUl9SRUcsIGRhdGEsIDB4MSk7 DQo+ID4gKwkJaWYgKHN0YXR1cyA8IDApDQo+ID4gKwkJCXJldHVybiBzdGF0dXM7DQo+ID4gKwl9 IHdoaWxlICgoZGF0YVswXSAhPSAweDAwKSAmJiBjb3VudC0tKTsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB1Y3NpX2NjZ19zZW5kX2RhdGEo c3RydWN0IHVjc2lfY2NnICp1Yykgew0KPiA+ICsJaW50IHN0YXR1czsNCj4gPiArCXVuc2lnbmVk IGNoYXIgYnVmWzRdID0gew0KPiA+ICsJCTB4MjAsIENDR1hfSTJDX1JBQl9VQ1NJX0RBVEFfQkxP Q0sgPj4gOCwNCj4gPiArCQkweDgsIENDR1hfSTJDX1JBQl9VQ1NJX0RBVEFfQkxPQ0sgPj4gOCwN Cj4gPiArCX07DQo+ID4gKwl1bnNpZ25lZCBjaGFyIGJ1ZjFbMTZdOw0KPiA+ICsJdW5zaWduZWQg Y2hhciBidWYyWzhdOw0KPiA+ICsNCj4gPiArCW1lbWNweShidWYxLCAoKGNvbnN0IHZvaWQgKil1 Yy0+cHBtLmRhdGEpICsgMHgyMCwgc2l6ZW9mKGJ1ZjEpKTsNCj4gPiArCW1lbWNweShidWYyLCAo KGNvbnN0IHZvaWQgKil1Yy0+cHBtLmRhdGEpICsgMHg4LCBzaXplb2YoYnVmMikpOw0KPiA+ICsN Cj4gPiArCXN0YXR1cyA9IGNjZ193cml0ZSh1YywgKih1MTYgKilidWYsIGJ1ZjEsIHNpemVvZihi dWYxKSk7DQo+IA0KPiBUaGlzIHNlZW1zIHRvIGJlIGVuZGlhbi1kZXBlbmRlbnQuIE1heSBJIHN1 Z2dlc3QgdGhhdCB5b3UgZG8gYXMgc3VnZ2VzdGVkDQo+IGFib3ZlIGZvciBjY2dfcmVhZCwgYW5k IHRoZW4gc29tdGhpbmcgbGlrZQ0KPiANCj4gI2RlZmluZSBDQ0dYX0kyQ19SQUJfVVNDSV9EQVRB X0JMT0NLKHh4eCkgKDB4ZjAwMCB8ICgoeHh4KSAmIDxtYXNrPikpDQo+IA0KPiB3aGVyZSB5b3Ug b2YgY291cnNlIHVzZSBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBmb3IgPG1hc2s+IChwZXJoYXBzIDB4 ZmYsIG9yDQo+IDB4ZmZmLCB3aGF0IGRvIEkga25vdykgYW5kIGEgYmV0dGVyIG5hbWUgZm9yIHRo ZSBmaWVsZCB0aGFuIHh4eCAocGVyaGFwcyBsZW4sDQo+IHdoYXQgZG8gSSBrbm93KSwgYW5kIHRo ZW4gZmluYWxseSBkbw0KPiANCj4gCXN0YXR1cyA9IGNjZ193cml0ZSh1YywgQ0NHWF9JMkNfUkFC X1VTQ0lfREFUQV9CTE9DSygweDIwKSwgLi4uDQo+IA0KPiBBbHNvLCB0aGUgMHgyMCBhbmQgMHg4 IGFyZSByZXBlYXRlZCBhbmQgYXJlIHNvbWUgbWFnaWMgbnVtYmVycyB0aGF0IHJlYWxseQ0KPiBz aG91bGQgYmUgZ2l2ZW4gYSBuYW1lIG9yIHNvbWUgZXhwbGFuYXRpb24uIFRoZXkgYXBwZWFyIHRv IGJlIGRhdGEgbGVuZ3RocywNCj4gYnV0IGFnYWluLCB3aGF0IGRvIEkga25vdz8NCkkgd2lsbCBj aGVjayBvbiB0aGlzLg0KDQo+ID4gKwlpZiAoc3RhdHVzIDwgMCkNCj4gPiArCQlyZXR1cm4gc3Rh dHVzOw0KPiA+ICsNCj4gPiArCXJldHVybiBjY2dfd3JpdGUodWMsICoodTE2ICopKGJ1ZiArIDIp LCBidWYyLCBzaXplb2YoYnVmMikpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHVjc2lfY2Nn X3JlY3ZfZGF0YShzdHJ1Y3QgdWNzaV9jY2cgKnVjKSB7DQo+ID4gKwl1OCAqcHBtID0gKHU4ICop dWMtPnBwbS5kYXRhOw0KPiA+ICsJaW50IHN0YXR1czsNCj4gPiArCXVuc2lnbmVkIGNoYXIgYnVm WzZdID0gew0KPiA+ICsJCTB4MCwgQ0NHWF9JMkNfUkFCX1VDU0lfREFUQV9CTE9DSyA+PiA4LA0K PiA+ICsJCTB4NCwgQ0NHWF9JMkNfUkFCX1VDU0lfREFUQV9CTE9DSyA+PiA4LA0KPiA+ICsJCTB4 MTAsIENDR1hfSTJDX1JBQl9VQ1NJX0RBVEFfQkxPQ0sgPj4gOCwNCj4gPiArCX07DQo+ID4gKw0K PiA+ICsJc3RhdHVzID0gY2NnX3JlYWQodWMsICoodTE2ICopYnVmLCBwcG0sIDB4Mik7DQo+IA0K PiBUaGVyZSBhcmUgcGxlbnR5IG1hZ2ljIG51bWJlcnMsIGJ1dCB0aGlzIGNhbGwgZG9lcyBub3Qg Zm9sbG93IHRoZSBwYXR0ZXJuLg0KPiBTaG91bGQgcGVyaGFwcyBidWZbMF0gYmUgMHgyLCBvciBz aG91bGQgcGVyaGFwcyB0aGUgbGFzdCAweDIgYXJndW1lbnQgYmUNCj4gMHgwPyBBbGwgb3RoZXIg Li4uREFUQV9CTE9DSyBjYWxscyBzZWVtIHRvIGhhdmUgdGhlIGxlbiBpbiB0aGUgb3RoZXIgYnl0 ZSBvZg0KPiB0aGUgcmFiIGFyZ3VtZW50LiBXaHkgZG9lcyB0aGlzIGNhbGwgbm90IGZvbGxvdyB0 aGUgcGF0dGVybj8NCldlIGFyZSByZWFkaW5nIG1lc3NhZ2UgSU4gZGF0YSBmcm9tIFR5cGUtQyBj b250cm9sbGVyIGluIHJlc3BvbnNlIHRvIGENClVDU0kgY29tbWFuZC4gWW91IGNhbiBmaW5kIGRl dGFpbHMgYXQNCmh0dHBzOi8vd3d3LmludGVsLmNvbS9jb250ZW50L2RhbS93d3cvcHVibGljL3Vz L2VuL2RvY3VtZW50cy90ZWNobmljYWwtc3BlY2lmaWNhdGlvbnMvdXNiLXR5cGUtYy11Y3NpLXNw ZWMucGRmDQogDQo+ID4gKwlpZiAoc3RhdHVzIDwgMCkNCj4gPiArCQlyZXR1cm4gc3RhdHVzOw0K PiA+ICsNCj4gPiArCXN0YXR1cyA9IGNjZ19yZWFkKHVjLCAqKHUxNiAqKShidWYgKyAyKSwgcHBt ICsgMHg0LCAweDQpOw0KPiA+ICsJaWYgKHN0YXR1cyA8IDApDQo+ID4gKwkJcmV0dXJuIHN0YXR1 czsNCj4gPiArDQo+ID4gKwlyZXR1cm4gY2NnX3JlYWQodWMsICoodTE2ICopKGJ1ZiArIDQpLCBw cG0gKyAweDEwLCAweDEwKTsgfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB1Y3NpX2NjZ19hY2tf aW50ZXJydXB0KHN0cnVjdCB1Y3NpX2NjZyAqdWMpIHsNCj4gPiArCWludCBzdGF0dXM7DQo+ID4g Kwl1bnNpZ25lZCBjaGFyIGJ1ZlsyXSA9IHsNCj4gPiArCQlDQ0dYX0kyQ19SQUJfSU5UUl9SRUcs IENDR1hfSTJDX1JBQl9JTlRSX1JFRyA+PiA4fTsNCj4gPiArCXVuc2lnbmVkIGNoYXIgYnVmMlsx XSA9IHsweDB9Ow0KPiA+ICsNCj4gPiArCXN0YXR1cyA9IGNjZ19yZWFkKHVjLCAqKHUxNiAqKWJ1 ZiwgYnVmMiwgMHgxKTsNCj4gDQo+IFRoaXMgYmVjb21lcw0KPiAJc3RhdHVzID0gY2NnX3JlYWQo dWMsIENDR1hfSTJDX1JBQl9JTlRSX1JFRywgYnVmMiwgMHgxKTsgYW5kIHlvdQ0KPiBjYW4gZHJv cCB0aGUgYnVmIHZhcmlhYmxlIChvciBwZXJoYXBzIHJlbmFtZSBidWYyIHRvIGJ1ZikNCj4gDQo+ IFt0aW1lIHBhc3Nlc10NCj4gDQo+IEhtbSwgeW91IGFscmVhZHkgZG8gaXQgbGlrZSB0aGF0IGlu IHVjc2lfY2NnX2luaXQsIHNvIHRoaXMgZnVuY3Rpb24gY2FuIGJlDQo+IGNsZWFuZWQgdXAgcmVn YXJkbGVzcyBvZiBhbnkgZW5kaWFuIGNsZWFudXAuDQpPaw0KDQpUaGFua3MNCkFqYXkNCi0tDQpu dnB1YmxpYw0KLS0NCj4gDQo+IENoZWVycywNCj4gUGV0ZXINCj4gDQo+ID4gKwlpZiAoc3RhdHVz IDwgMCkNCj4gPiArCQlyZXR1cm4gc3RhdHVzOw0KPiA+ICsNCj4gPiArCXJldHVybiBjY2dfd3Jp dGUodWMsICoodTE2ICopYnVmLCBidWYyLCAweDEpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50 IHVjc2lfY2NnX3N5bmMoc3RydWN0IHVjc2lfcHBtICpwcG0pIHsNCj4gPiArCXN0cnVjdCB1Y3Np X2NjZyAqdWMgPSBjb250YWluZXJfb2YocHBtLCBzdHJ1Y3QgdWNzaV9jY2csIHBwbSk7DQo+ID4g KwlpbnQgc3RhdHVzOw0KPiA+ICsNCj4gPiArCXN0YXR1cyA9IHVjc2lfY2NnX3JlY3ZfZGF0YSh1 Yyk7DQo+ID4gKwlpZiAoc3RhdHVzIDwgMCkNCj4gPiArCQlyZXR1cm4gc3RhdHVzOw0KPiA+ICsN Cj4gPiArCS8qIGFjayBpbnRlcnJ1cHQgdG8gYWxsb3cgbmV4dCBjb21tYW5kIHRvIHJ1biAqLw0K PiA+ICsJcmV0dXJuIHVjc2lfY2NnX2Fja19pbnRlcnJ1cHQodWMpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50IHVjc2lfY2NnX2NtZChzdHJ1Y3QgdWNzaV9wcG0gKnBwbSwgc3RydWN0 IHVjc2lfY29udHJvbA0KPiA+ICsqY3RybCkgew0KPiA+ICsJc3RydWN0IHVjc2lfY2NnICp1YyA9 IGNvbnRhaW5lcl9vZihwcG0sIHN0cnVjdCB1Y3NpX2NjZywgcHBtKTsNCj4gPiArDQo+ID4gKwlw cG0tPmRhdGEtPmN0cmwucmF3X2NtZCA9IGN0cmwtPnJhd19jbWQ7DQo+ID4gKwlyZXR1cm4gdWNz aV9jY2dfc2VuZF9kYXRhKHVjKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlycXJldHVy bl90IGNjZ19pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKSB7DQo+ID4gKwlzdHJ1Y3Qg dWNzaV9jY2cgKnVjID0gZGF0YTsNCj4gPiArDQo+ID4gKwl1Y3NpX25vdGlmeSh1Yy0+dWNzaSk7 DQo+ID4gKw0KPiA+ICsJcmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgaW50IHVjc2lfY2NnX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsDQo+ID4g KwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7DQo+ID4gKwlzdHJ1Y3QgdWNzaV9jY2cgKnVj Ow0KPiA+ICsJaW50IHN0YXR1czsNCj4gPiArDQo+ID4gKwl1YyA9IGRldm1fa3phbGxvYyhkZXYs IHNpemVvZigqdWMpLCBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICghdWMpDQo+ID4gKwkJcmV0dXJu IC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJdWMtPnBwbS5kYXRhID0gZGV2bV9remFsbG9jKGRldiwg c2l6ZW9mKHN0cnVjdCB1Y3NpX2RhdGEpLA0KPiBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICghdWMt PnBwbS5kYXRhKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCXVjLT5wcG0u Y21kID0gdWNzaV9jY2dfY21kOw0KPiA+ICsJdWMtPnBwbS5zeW5jID0gdWNzaV9jY2dfc3luYzsN Cj4gPiArCXVjLT5kZXYgPSBkZXY7DQo+ID4gKwl1Yy0+Y2xpZW50ID0gY2xpZW50Ow0KPiA+ICsN Cj4gPiArCS8qIHJlc2V0IGNjZyBkZXZpY2UgYW5kIGluaXRpYWxpemUgdWNzaSAqLw0KPiA+ICsJ c3RhdHVzID0gdWNzaV9jY2dfaW5pdCh1Yyk7DQo+ID4gKwlpZiAoc3RhdHVzIDwgMCkgew0KPiA+ ICsJCWRldl9lcnIodWMtPmRldiwgInVjc2lfY2NnX2luaXQgZmFpbGVkIC0gJWRcbiIsIHN0YXR1 cyk7DQo+ID4gKwkJcmV0dXJuIHN0YXR1czsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwl1Yy0+aXJx ID0gY2xpZW50LT5pcnE7DQo+ID4gKw0KPiA+ICsJc3RhdHVzID0gZGV2bV9yZXF1ZXN0X3RocmVh ZGVkX2lycShkZXYsIHVjLT5pcnEsIE5VTEwsDQo+IGNjZ19pcnFfaGFuZGxlciwNCj4gPiArCQkJ CQkgICBJUlFGX09ORVNIT1QgfA0KPiBJUlFGX1RSSUdHRVJfSElHSCwNCj4gPiArCQkJCQkgICBk ZXZfbmFtZShkZXYpLCB1Yyk7DQo+ID4gKwlpZiAoc3RhdHVzIDwgMCkgew0KPiA+ICsJCWRldl9l cnIodWMtPmRldiwgInJlcXVlc3RfdGhyZWFkZWRfaXJxIGZhaWxlZCAtICVkXG4iLA0KPiBzdGF0 dXMpOw0KPiA+ICsJCXJldHVybiBzdGF0dXM7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJdWMtPnVj c2kgPSB1Y3NpX3JlZ2lzdGVyX3BwbShkZXYsICZ1Yy0+cHBtKTsNCj4gPiArCWlmIChJU19FUlIo dWMtPnVjc2kpKSB7DQo+ID4gKwkJZGV2X2Vycih1Yy0+ZGV2LCAidWNzaV9yZWdpc3Rlcl9wcG0g ZmFpbGVkXG4iKTsNCj4gPiArCQlyZXR1cm4gUFRSX0VSUih1Yy0+dWNzaSk7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdWMpOw0KPiA+ICsJcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdWNzaV9jY2dfcmVtb3ZlKHN0cnVj dCBpMmNfY2xpZW50ICpjbGllbnQpIHsNCj4gPiArCXN0cnVjdCB1Y3NpX2NjZyAqdWMgPSBpMmNf Z2V0X2NsaWVudGRhdGEoY2xpZW50KTsNCj4gPiArDQo+ID4gKwl1Y3NpX3VucmVnaXN0ZXJfcHBt KHVjLT51Y3NpKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHVjc2lfY2NnX2RldmljZV9pZFtdID0g ew0KPiA+ICsJeyJjY2d4LXVjc2kiLCAwfSwNCj4gPiArCXt9DQo+ID4gK307DQo+ID4gK01PRFVM RV9ERVZJQ0VfVEFCTEUoaTJjLCB1Y3NpX2NjZ19kZXZpY2VfaWQpOw0KPiA+ICsNCj4gPiArc3Rh dGljIHN0cnVjdCBpMmNfZHJpdmVyIHVjc2lfY2NnX2RyaXZlciA9IHsNCj4gPiArCS5kcml2ZXIg PSB7DQo+ID4gKwkJLm5hbWUgPSAidWNzaV9jY2ciLA0KPiA+ICsJfSwNCj4gPiArCS5wcm9iZSA9 IHVjc2lfY2NnX3Byb2JlLA0KPiA+ICsJLnJlbW92ZSA9IHVjc2lfY2NnX3JlbW92ZSwNCj4gPiAr CS5pZF90YWJsZSA9IHVjc2lfY2NnX2RldmljZV9pZCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK21v ZHVsZV9pMmNfZHJpdmVyKHVjc2lfY2NnX2RyaXZlcik7DQo+ID4gKw0KPiA+ICtNT0RVTEVfQVVU SE9SKCJBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPiIpOw0KPiA+ICtNT0RVTEVfREVTQ1JJ UFRJT04oIlVDU0kgZHJpdmVyIGZvciBDeXByZXNzIENDR3ggVHlwZS1DIGNvbnRyb2xsZXIiKTsN Cj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPiA+Cg==