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,1/2] i2c: buses: add i2c bus driver for NVIDIA GPU From: Thierry Reding Message-Id: <20180827084751.GA11041@ulmo> Date: Mon, 27 Aug 2018 10:47:51 +0200 To: Ajay Gupta Cc: linux-usb@vger.kernel.org, linux-i2c@vger.kernel.org, wsa@the-dreams.de, heikki.krogerus@linux.intel.com List-ID: T24gRnJpLCBBdWcgMjQsIDIwMTggYXQgMDI6MzM6MzVQTSAtMDcwMCwgQWpheSBHdXB0YSB3cm90 ZToKPiBMYXRlc3QgTlZJRElBIEdQVSBjYXJkIGhhcyBVU0IgVHlwZS1DIGludGVyZmFjZS4gVGhl cmUgaXMgYQo+IFR5cGUtQyBjb250cm9sbGVyIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZCBvdmVyIEky Qy4KPiAKPiBUaGlzIGRyaXZlciBhZGQgSTJDIGJ1cyBkcml2ZXIgdG8gY29tbXVuaWNhdGUgd2l0 aCBUeXBlLUMgY29udHJvbGxlci4KPiBJMkMgY2xpZW50IGRyaXZlciB3aWxsIGJlIHBhcnQgb2Yg VVNCIFR5cGUtQyBVQ1NJIGRyaXZlci4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBBamF5IEd1cHRhIDxh amF5Z0BudmlkaWEuY29tPgo+IC0tLQo+IENoYW5nZXMgZnJvbSB2MSAtPiB2MjogTm9uZQo+IAo+ ICBEb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWdwdSB8ICAxOCArKwo+ICBNQUlOVEFJTkVS UyAgICAgICAgICAgICAgICAgICAgICB8ICAgNyArCj4gIGRyaXZlcnMvaTJjL2J1c3Nlcy9LY29u ZmlnICAgICAgIHwgICA5ICsKPiAgZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlICAgICAgfCAg IDEgKwo+ICBkcml2ZXJzL2kyYy9idXNzZXMvaTJjLWdwdS5jICAgICB8IDQ5MyArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgNSBmaWxlcyBjaGFuZ2VkLCA1MjggaW5z ZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2Vz L2kyYy1ncHUKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZ3B1 LmMKCkhpIEFqYXksCgpJIHRoaW5rIHRoaXMgbG9va3MgcHJldHR5IGdvb2QuIEEgY291cGxlIG9m IG1pbm9yLCBtb3N0bHkgbml0LXBpY2t5LApjb21tZW50cyBiZWxvdy4KCj4gCj4gZGlmZiAtLWdp dCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtZ3B1IGIvRG9jdW1lbnRhdGlvbi9pMmMv YnVzc2VzL2kyYy1ncHUKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjg3 M2JhMzQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2ky Yy1ncHUKCkkgdGhpbmsgdGhpcyBpcyB0b28gZ2VuZXJpYy4gTWF5YmUgdXNlIHNvbWV0aGluZyBs aWtlIGkyYy1udmlkaWEtZ3B1CmhlcmUgYW5kIGV2ZXJ5d2hlcmUgZWxzZSwgdG8gbWFrZSBpdCBl eHBsaWNpdCB0aGF0IHRoaXMgaXMgZm9yIE5WSURJQQpHUFVzIHJhdGhlciB0aGFuIEdQVXMgaW4g Z2VuZXJhbC4KCj4gQEAgLTAsMCArMSwxOCBAQAo+ICtLZXJuZWwgZHJpdmVyIGkyYy1ncHUKPiAr Cj4gK0RhdGFzaGVldDogbm90IHB1YmxpY2x5IGF2YWlsYWJsZS4KPiArCj4gK0F1dGhvcnM6Cj4g KwlBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPgo+ICsKPiArRGVzY3JpcHRpb24KPiArLS0t LS0tLS0tLS0KPiArCj4gK2kyYy1ncHUgaXMgYSBkcml2ZXIgZm9yIEkyQyBjb250cm9sbGVyIGlu Y2x1ZGVkIGluIE5WSURJQSBUdXJpbmcgYW5kIGxhdGVyCj4gK0dQVXMgYW5kIGl0IGlzIHVzZWQg dG8gY29tbXVuaWNhdGUgd2l0aCBUeXBlLUMgY29udHJvbGxlciBvbiBHUFVzLgo+ICsKPiArSWYg eW91ciAnbHNwY2kgLXYnIGxpc3Rpbmcgc2hvd3Mgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2lu ZywKPiArCj4gKzAxOjAwLjMgU2VyaWFsIGJ1cyBjb250cm9sbGVyIFswYzgwXTogTlZJRElBIENv cnBvcmF0aW9uIERldmljZSAxYWQ5IChyZXYgYTEpCj4gKwo+ICt0aGVuIHRoaXMgZHJpdmVyIHNo b3VsZCBzdXBwb3J0IHRoZSBJMkMgY29udHJvbGxlciBvZiB5b3VyIEdQVS4KPiBkaWZmIC0tZ2l0 IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwo+IGluZGV4IGIyZmNkMWMuLmU5OWY4YTIgMTAw NjQ0Cj4gLS0tIGEvTUFJTlRBSU5FUlMKPiArKysgYi9NQUlOVEFJTkVSUwo+IEBAIC02Nzk2LDYg KzY3OTYsMTMgQEAgTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKPiAgUzoJTWFpbnRhaW5l ZAo+ICBGOglkcml2ZXJzL2kyYy9pMmMtY29yZS1hY3BpLmMKPiAgCj4gK0kyQyBDT05UUk9MTEVS IERSSVZFUiBGT1IgTlZJRElBIEdQVQo+ICtNOglBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29t Pgo+ICtMOglsaW51eC1pMmNAdmdlci5rZXJuZWwub3JnCj4gK1M6CU1haW50YWluZWQKPiArRjoJ RG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1ncHUKPiArRjoJZHJpdmVycy9pMmMvYnVzc2Vz L2kyYy1ncHUuYwo+ICsKPiAgSTJDIE1VWEVTCj4gIE06CVBldGVyIFJvc2luIDxwZWRhQGF4ZW50 aWEuc2U+Cj4gIEw6CWxpbnV4LWkyY0B2Z2VyLmtlcm5lbC5vcmcKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9pMmMvYnVzc2VzL0tjb25maWcgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwo+IGlu ZGV4IDQ1MWQ0YWUuLmZmOGIyZDQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL0tj b25maWcKPiArKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwo+IEBAIC0yMjQsNiArMjI0 LDE1IEBAIGNvbmZpZyBJMkNfTkZPUkNFMl9TNDk4NQo+ICAJICBUaGlzIGRyaXZlciBjYW4gYWxz byBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCj4gIAkgIHdpbGwgYmUg Y2FsbGVkIGkyYy1uZm9yY2UyLXM0OTg1Lgo+ICAKPiArY29uZmlnIEkyQ19HUFUKPiArCXRyaXN0 YXRlICJOVklESUEgR1BVIEkyQyBjb250cm9sbGVyIgo+ICsJZGVwZW5kcyBvbiBQQ0kKPiArCWhl bHAKPiArCSAgSWYgeW91IHNheSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBiZSBp bmNsdWRlZCBmb3IgdGhlCj4gKwkgIE5WSURJQSBHUFUgSTJDIGNvbnRyb2xsZXIgd2hpY2ggaXMg dXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBHUFUncwo+ICsJICBUeXBlLUMgY29udHJvbGxl ci4gVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUgY2FsbGVkCj4gKwkg IGkyYy1ncHUua28uCj4gKwo+ICBjb25maWcgSTJDX1NJUzU1OTUKPiAgCXRyaXN0YXRlICJTaVMg NTU5NSIKPiAgCWRlcGVuZHMgb24gUENJCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nl cy9NYWtlZmlsZSBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQo+IGluZGV4IDE4YjI2YWYu LjE1ZDI4OTQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCj4gKysr IGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCj4gQEAgLTE0MCw1ICsxNDAsNiBAQCBvYmot JChDT05GSUdfSTJDX1NJQllURSkJKz0gaTJjLXNpYnl0ZS5vCj4gIG9iai0kKENPTkZJR19JMkNf WEdFTkVfU0xJTVBSTykgKz0gaTJjLXhnZW5lLXNsaW1wcm8ubwo+ICBvYmotJChDT05GSUdfU0N4 MjAwX0FDQikJKz0gc2N4MjAwX2FjYi5vCj4gIG9iai0kKENPTkZJR19JMkNfRlNJKQkJKz0gaTJj LWZzaS5vCj4gK29iai0kKENPTkZJR19JMkNfR1BVKSAgICAgICAgICArPSBpMmMtZ3B1Lm8KPiAg Cj4gIGNjZmxhZ3MtJChDT05GSUdfSTJDX0RFQlVHX0JVUykgOj0gLURERUJVRwo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWdwdS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2ky Yy1ncHUuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMGZkMjk0NAo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWdwdS5jCj4gQEAg LTAsMCArMSw0OTMgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiAr LyoKPiArICogTnZpZGlhIEdQVSBJMkMgY29udHJvbGxlciBEcml2ZXIKPiArICoKPiArICogQ29w eXJpZ2h0IChDKSAyMDE4IE5WSURJQSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K PiArICogQXV0aG9yOiBBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPgo+ICsgKgo+ICsgKi8K PiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rl dmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcG0uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1 bnRpbWUuaD4KPiArCj4gKy8qIFNUQVRVUyBkZWZpbml0aW9ucyAgKi8KPiArI2RlZmluZSBTVEFU VVNfU1VDQ0VTUwkJCTAKPiArI2RlZmluZSBTVEFUVVNfVU5TVUNDRVNTRlVMCQkweDgwMDAwMDAw VUwKPiArI2RlZmluZSBTVEFUVVNfVElNRU9VVAkJCTB4ODAwMDAwMDFVTAo+ICsjZGVmaW5lIFNU QVRVU19JT19ERVZJQ0VfRVJST1IJCTB4ODAwMDAwMDJVTAo+ICsjZGVmaW5lIFNUQVRVU19JT19U SU1FT1VUCQkweDgwMDAwMDA0VUwKPiArI2RlZmluZSBTVEFUVVNfSU9fUFJFRU1QVEVECQkweDgw MDAwMDA4VUwKClRoaXMgc2VlbXMgYSBsaXR0bGUgb2RkLiBDYW4gdGhlc2Ugbm90IGJlIGNvbnZl cnRlZCB0byBzdGFuZGFyZCBlcnJubwpjb2Rlcz8gSXQncyBtb3JlIGlkaW9tYXRpYyB0byByZXR1 cm4gMCBvbiBzdWNjZXNzIChsaWtlIHlvdSBkZWZpbmUgaW4KdGhlIGFib3ZlKSBhbmQgYSBuZWdh dGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuIElmIHlvdSB1c2UgdGhhdCBzY2hlbWUsCnRoZXJl J3Mgbm8gbmVlZCB0byBoYXZlIGEgc3ltYm9saWMgbmFtZSBmb3Igc3VjY2VzcyBiZWNhdXNlIGl0 IGlzIHVzZWQKcHJldHR5IG11Y2ggZXZlcnl3aGVyZS4KClNlZSBpbmNsdWRlL3VhcGkvYXNtLWdl bmVyaWMvZXJybm97LC1iYXNlfS5oIGZvciBhIGxpc3Qgb2Ygc3RhbmRhcmQKZXJyb3IgY29kZXMu IEkgdGhpbmsgeW91IHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgYSBtYXRjaCBmb3IgZWFjaCBvZiB0 aGUKYWJvdmUuCgo+ICsvKiBDeXByZXNzIFR5cGUtQyBjb250cm9sbGVycyAoQ0NHeCkgZGV2aWNl ICovCj4gKyNkZWZpbmUgQ0NHWF9JMkNfREVWX0FERFJFU1MJCTB4MDgKCkkgZG9uJ3QgdGhpbmsg dGhlcmUncyBhIG5lZWQgZm9yIHRoZSBkZWZpbmUgaGVyZS4gWW91IG9ubHkgdXNlIHRoZQphZGRy ZXNzIG9uY2UsIGFuZCB0aGF0J3Mgd2hlcmUgdGhlIGNsaWVudCBpcyBkZWZpbmVkLCBzbyB5b3Ug Y2FuIGp1c3QKdXNlIDB4MDggbGl0ZXJhbGx5IGluIHRoYXQgb25lIGxvY2F0aW9uLgoKPiArLyog STJDIGRlZmluaXRpb25zICovCj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMCQkJCTB4MDAKPiArI2Rl ZmluZSBJMkNfTVNUX0NOVExfR0VOX1NUQVJUCQkJKDEgPDwgMCkKPiArI2RlZmluZSBJMkNfTVNU X0NOVExfR0VOX1NUT1AJCQkoMSA8PCAxKQo+ICsjZGVmaW5lIEkyQ19NU1RfQ05UTF9DTURfTk9O RQkJCSgwIDw8IDIpCj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX0NNRF9SRUFECQkJKDEgPDwgMikK PiArI2RlZmluZSBJMkNfTVNUX0NOVExfQ01EX1dSSVRFCQkJKDIgPDwgMikKPiArI2RlZmluZSBJ MkNfTVNUX0NOVExfQ01EX1JFU0VUCQkJKDMgPDwgMikKPiArI2RlZmluZSBJMkNfTVNUX0NOVExf R0VOX1JBQgkJCSgxIDw8IDQpCj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX0JVUlNUX1NJWkVfU0hJ RlQJCSg2KQo+ICsjZGVmaW5lIEkyQ19NU1RfQ05UTF9HRU5fTkFDSwkJCSgxIDw8IDI4KQo+ICsj ZGVmaW5lIEkyQ19NU1RfQ05UTF9TVEFUVVMJCQkoMyA8PCAyOSkKPiArI2RlZmluZSBJMkNfTVNU X0NOVExfU1RBVFVTX09LQVkJCSgwIDw8IDI5KQo+ICsjZGVmaW5lIEkyQ19NU1RfQ05UTF9TVEFU VVNfTk9fQUNLCQkoMSA8PCAyOSkKPiArI2RlZmluZSBJMkNfTVNUX0NOVExfU1RBVFVTX1RJTUVP VVQJCSgyIDw8IDI5KQo+ICsjZGVmaW5lIEkyQ19NU1RfQ05UTF9TVEFUVVNfQlVTX0JVU1kJCSgz IDw8IDI5KQo+ICsjZGVmaW5lIEkyQ19NU1RfQ05UTF9DWUNMRV9UUklHR0VSCQkoMSA8PCAzMSkK PiArCj4gKyNkZWZpbmUgSTJDX01TVF9BRERSCQkJCTB4MDQKPiArI2RlZmluZSBJMkNfTVNUX0FE RFJfREFCCQkJMAo+ICsKPiArI2RlZmluZSBJMkNfTVNUX0kyQzBfVElNSU5HCQkJCTB4MDgKPiAr I2RlZmluZSBJMkNfTVNUX0kyQzBfVElNSU5HX1NDTF9QRVJJT0RfMTAwS0haCQkoMHgxMGUgPDwg MCkKPiArI2RlZmluZSBJMkNfTVNUX0kyQzBfVElNSU5HX1NDTF9QRVJJT0RfMjAwS0haCQkoMHgw ODcgPDwgMCkKPiArI2RlZmluZSBJMkNfTVNUX0kyQzBfVElNSU5HX1RJTUVPVVRfQ0xLX0NOVAkJ MTYKPiArI2RlZmluZSBJMkNfTVNUX0kyQzBfVElNSU5HX1RJTUVPVVRfQ0xLX0NOVF9NQVgJCTI1 NQo+ICsjZGVmaW5lIEkyQ19NU1RfSTJDMF9USU1JTkdfVElNRU9VVF9DSEVDSwkJKDEgPDwgMjQp Cj4gKwo+ICsjZGVmaW5lIEkyQ19NU1RfREFUQQkJCQkJMHgwYwo+ICsKPiArI2RlZmluZSBJMkNf TVNUX0hZQlJJRF9QQURDVEwJCQkJMHgyMAo+ICsjZGVmaW5lIEkyQ19NU1RfSFlCUklEX1BBRENU TF9NT0RFX0kyQwkJCSgxIDw8IDApCj4gKyNkZWZpbmUgSTJDX01TVF9IWUJSSURfUEFEQ1RMX0ky Q19TQ0xfSU5QVVRfUkNWCQkoMSA8PCAxNCkKPiArI2RlZmluZSBJMkNfTVNUX0hZQlJJRF9QQURD VExfSTJDX1NEQV9JTlBVVF9SQ1YJCSgxIDw8IDE1KQo+ICsKPiArLyogUENJIGRyaXZlciBkYXRh ICovCj4gK3N0cnVjdCBncHVfaTJjX2RldiB7Cj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsK PiArCXZvaWQgX19pb21lbSAqcmVnczsKPiArCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwdGVyOwo+ ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKPiArCXN0cnVjdCBtdXRleCBtdXRleDsKPiAr CWJvb2wgZG9fc3RhcnQ7Cj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBlbmFibGVfaTJjX2J1cyhz dHJ1Y3QgZ3B1X2kyY19kZXYgKmdkZXYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZn ZGV2LT5wY2lfZGV2LT5kZXY7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCS8qIGVuYWJsZSBJMkMgKi8K PiArCXZhbCA9IHJlYWRsKGdkZXYtPnJlZ3MgKyBJMkNfTVNUX0hZQlJJRF9QQURDVEwpOwo+ICsJ dmFsIHw9IEkyQ19NU1RfSFlCUklEX1BBRENUTF9NT0RFX0kyQyB8Cj4gKwkJSTJDX01TVF9IWUJS SURfUEFEQ1RMX0kyQ19TQ0xfSU5QVVRfUkNWIHwKPiArCQlJMkNfTVNUX0hZQlJJRF9QQURDVExf STJDX1NEQV9JTlBVVF9SQ1Y7Cj4gKwo+ICsJZGV2X2RiZyhkZXYsICIlczogJXAgKEkyQ19NU1Rf SFlCUklEX1BBRENUTCkgPC0gJTA4eCIsIF9fZnVuY19fLAo+ICsJCShnZGV2LT5yZWdzICsgSTJD X01TVF9IWUJSSURfUEFEQ1RMKSwgdmFsKTsKCkRvIHdlIHJlYWxseSBuZWVkIHRoZXNlIGRlYnVn IG1lc3NhZ2VzPyBOb25lIG9mIHRoZSBjb25maWd1cmF0aW9uIGFib3ZlCmlzIGluIGFueSB3YXkg cGFyYW1ldGVyaXplZCwgc28gdGhlIHZhbHVlcyB0aGF0IGFyZSB3cml0dGVuIGFyZSBwcmV0dHkK ZGV0ZXJtaW5pc3RpYyAodW5sZXNzIG1heWJlIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSByZWdp c3RlciBkaWZmZXJzKS4KCklmIHlvdSByZWFsbHkgd2FudCB0byBrZWVwIHRoZSBkZWJ1ZyBtZXNz YWdlcywgSSB0aGluayB5b3Ugc2hvdWxkIHJlbW92ZQphdCBsZWFzdCB0aGUgcmVnaXN0ZXIgYWRk cmVzcyAoeW91IGFscmVhZHkgcHJpbnQgdGhlIG5hbWUsIHdoaWNoIGlzIG11Y2gKbW9yZSB1c2Vm dWwpLiBBbHRlcm5hdGl2ZWx5LCBoYXZlIHlvdSBjb25zaWRlcmVkIHVzaW5nIGZ0cmFjZSB0byBh bGxvdwp0aGVzZSB0cmFjZXMgdG8gYmUgZHluYW1pY2FsbHkgZW5hYmxlZD8KCj4gKwo+ICsJd3Jp dGVsKHZhbCwgZ2Rldi0+cmVncyArIEkyQ19NU1RfSFlCUklEX1BBRENUTCk7Cj4gKwo+ICsJLyog ZW5hYmxlIDEwMEtIWiBtb2RlICovCj4gKwl2YWwgPSAwOwo+ICsJdmFsIHw9IEkyQ19NU1RfSTJD MF9USU1JTkdfU0NMX1BFUklPRF8xMDBLSFo7Cj4gKwl2YWwgfD0gKEkyQ19NU1RfSTJDMF9USU1J TkdfVElNRU9VVF9DTEtfQ05UX01BWAo+ICsJICAgIDw8IEkyQ19NU1RfSTJDMF9USU1JTkdfVElN RU9VVF9DTEtfQ05UKTsKPiArCXZhbCB8PSBJMkNfTVNUX0kyQzBfVElNSU5HX1RJTUVPVVRfQ0hF Q0s7Cj4gKwo+ICsJZGV2X2RiZyhkZXYsICIlczogJXAgKEkyQ19NU1RfSTJDMF9USU1JTkcpIDwt ICUwOHgiLCBfX2Z1bmNfXywKPiArCQlnZGV2LT5yZWdzICsgSTJDX01TVF9JMkMwX1RJTUlORywg dmFsKTsKPiArCXdyaXRlbCh2YWwsIGdkZXYtPnJlZ3MgKyBJMkNfTVNUX0kyQzBfVElNSU5HKTsK PiArfQo+ICsKPiArc3RhdGljIHUzMiBpMmNfY2hlY2tfc3RhdHVzKHN0cnVjdCBncHVfaTJjX2Rl diAqZ2RldikKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmdkZXYtPnBjaV9kZXYtPmRl djsKPiArCXVuc2lnbmVkIGxvbmcgdGFyZ2V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMo MTAwMCk7Cj4gKwl1MzIgc3RhdHVzID0gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKPiArCXUzMiB2YWw7 Cj4gKwo+ICsJd2hpbGUgKHRpbWVfaXNfYWZ0ZXJfamlmZmllcyh0YXJnZXQpKSB7Cj4gKwkJdmFs ID0gcmVhZGwoZ2Rldi0+cmVncyArIEkyQ19NU1RfQ05UTCk7Cj4gKwkJaWYgKCh2YWwgJiBJMkNf TVNUX0NOVExfQ1lDTEVfVFJJR0dFUikgIT0KPiArCQkJCUkyQ19NU1RfQ05UTF9DWUNMRV9UUklH R0VSKQo+ICsJCQlicmVhazsKPiArCQlpZiAoKHZhbCAmIEkyQ19NU1RfQ05UTF9TVEFUVVMpICE9 Cj4gKwkJCQlJMkNfTVNUX0NOVExfU1RBVFVTX0JVU19CVVNZKQo+ICsJCQlicmVhazsKPiArCQl1 c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7Cj4gKwl9Cj4gKwo+ICsJaWYgKHRpbWVfaXNfYmVmb3Jl X2ppZmZpZXModGFyZ2V0KSkgewo+ICsJCWRldl9lcnIoZGV2LCAiJXNpMmMgdGltZW91dCIsIF9f ZnVuY19fKTsKPiArCQlyZXR1cm4gc3RhdHVzOwoKVGhlIGVycm9yIG1lc3NhZ2UgbG9va3Mgc3Vz cGljaW91cyBoZXJlLiBUaGVyZSBzaG91bGQgYmUgc29tZSBzb3J0IG9mCnNlcGFyYXRvciBiZXR3 ZWVuIHRoZSBmdW5jdGlvbiBuYW1lIGFuZCB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZS4gQWxzbywK ZG8gd2UgcmVhbGx5IG5lZWQgdG8gcHJpbnQgdGhlIGZ1bmN0aW9uIG5hbWU/IFRoYXQncyBub3Qg dmVyeSB1c2VmdWwKdG8gdXNlcnMgKGl0IG1pZ2h0IGFjdHVhbGx5IGJlIGNvbmZ1c2luZyBiZWNh dXNlIHRoZSBmdW5jdGlvbiBuYW1lIGlzCnByZXR0eSBnZW5lcmljLCBzbyBjb3VsZCBiZSBtaXN0 YWtlbiBmb3IgYSBjb3JlIGZ1bmN0aW9uKSBhbmQgdGhpcyBpcwp0aGUgb25seSBwbGFjZSB3aGVy ZSB5b3UgY2hlY2sgZm9yIHRpbWVvdXRzIGFueXdheSwgc28gbm8gbmVlZCB0bwpyZXNvbHZlIGFu eSBhbWJpZ3VpdGllcyBieSBhZGRpbmcgdGhlIGZ1bmN0aW9uIG5hbWUuCgo+ICsJfQo+ICsKPiAr CXZhbCA9IHJlYWRsKGdkZXYtPnJlZ3MgKyBJMkNfTVNUX0NOVEwpOwo+ICsJc3dpdGNoICh2YWwg JiBJMkNfTVNUX0NOVExfU1RBVFVTKSB7Cj4gKwljYXNlIEkyQ19NU1RfQ05UTF9TVEFUVVNfT0tB WToKPiArCQlzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKPiArCQlicmVhazsKPiArCWNhc2UgSTJD X01TVF9DTlRMX1NUQVRVU19OT19BQ0s6Cj4gKwkJc3RhdHVzID0gU1RBVFVTX0lPX0RFVklDRV9F UlJPUjsKPiArCQlicmVhazsKPiArCWNhc2UgSTJDX01TVF9DTlRMX1NUQVRVU19USU1FT1VUOgo+ ICsJCXN0YXR1cyA9IFNUQVRVU19JT19USU1FT1VUOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJMkNf TVNUX0NOVExfU1RBVFVTX0JVU19CVVNZOgo+ICsJCXN0YXR1cyA9IFNUQVRVU19JT19QUkVFTVBU RUQ7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCWJyZWFrOwo+ICsJfQo+ICsJcmV0dXJu IHN0YXR1czsKPiArfQo+ICsKPiArc3RhdGljIHUzMiBpMmNfcmVhZChzdHJ1Y3QgZ3B1X2kyY19k ZXYgKmdkZXYsIHU4ICpkYXRhLCB1MTYgbGVuKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmZ2Rldi0+cGNpX2Rldi0+ZGV2Owo+ICsJdTMyIHN0YXR1czsKPiArCXUzMiB2YWwgPSAwOwo+ ICsKPiArCXZhbCB8PSBJMkNfTVNUX0NOVExfR0VOX1NUQVJUIHwgSTJDX01TVF9DTlRMX0dFTl9T VE9QIHwKPiArCQlJMkNfTVNUX0NOVExfQ01EX1JFQUQgfCAobGVuIDw8IEkyQ19NU1RfQ05UTF9C VVJTVF9TSVpFX1NISUZUKSB8Cj4gKwkJSTJDX01TVF9DTlRMX0NZQ0xFX1RSSUdHRVIgfCBJMkNf TVNUX0NOVExfR0VOX05BQ0s7Cj4gKwl2YWwgJj0gfkkyQ19NU1RfQ05UTF9HRU5fUkFCOwo+ICsJ d3JpdGVsKHZhbCwgZ2Rldi0+cmVncyArIEkyQ19NU1RfQ05UTCk7Cj4gKwo+ICsJc3RhdHVzID0g aTJjX2NoZWNrX3N0YXR1cyhnZGV2KTsKPiArCWlmIChzdGF0dXMgPT0gU1RBVFVTX1VOU1VDQ0VT U0ZVTCkgewo+ICsJCWRldl9lcnIoZGV2LCAiJXMgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Cj4gKwkJ cmV0dXJuIHN0YXR1czsKPiArCX0KClRoZXJlJ3Mgbm8gbmVlZCBmb3IgdGhpcyBlcnJvciBtZXNz YWdlLCBzaW5jZSB0aGUgY2FsbGVyIGFscmVhZHkKcHJvdmlkZXMgb25lLgoKPiArCj4gKwl2YWwg PSByZWFkbChnZGV2LT5yZWdzICsgSTJDX01TVF9EQVRBKTsKPiArCXN3aXRjaCAobGVuKSB7Cj4g KwljYXNlIDE6Cj4gKwkJZGF0YVswXSA9ICh2YWwgPj4gMCkgJiAweGZmOwo+ICsJCWJyZWFrOwo+ ICsJY2FzZSAyOgo+ICsJCWRhdGFbMF0gPSAodmFsID4+IDgpICYgMHhmZjsKPiArCQlkYXRhWzFd ID0gKHZhbCA+PiAwKSAmIDB4ZmY7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDM6Cj4gKwkJZGF0YVsw XSA9ICh2YWwgPj4gMTYpICYgMHhmZjsKPiArCQlkYXRhWzFdID0gKHZhbCA+PiA4KSAmIDB4ZmY7 Cj4gKwkJZGF0YVsyXSA9ICh2YWwgPj4gMCkgJiAweGZmOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSA0 Ogo+ICsJCWRhdGFbMF0gPSAodmFsID4+IDI0KSAmIDB4ZmY7Cj4gKwkJZGF0YVsxXSA9ICh2YWwg Pj4gMTYpICYgMHhmZjsKPiArCQlkYXRhWzJdID0gKHZhbCA+PiA4KSAmIDB4ZmY7Cj4gKwkJZGF0 YVszXSA9ICh2YWwgPj4gMCkgJiAweGZmOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQli cmVhazsKPiArCX0KPiArCXJldHVybiBzdGF0dXM7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIgaTJj X21hbnVhbF9zdGFydChzdHJ1Y3QgZ3B1X2kyY19kZXYgKmdkZXYsIHUxNiBhZGRyKQo+ICt7Cj4g Kwl1MzIgdmFsID0gMDsKPiArCj4gKwl2YWwgPSBhZGRyIDw8IEkyQ19NU1RfQUREUl9EQUI7Cj4g Kwl3cml0ZWwodmFsLCBnZGV2LT5yZWdzICsgSTJDX01TVF9BRERSKTsKPiArCj4gKwl2YWwgPSAw Owo+ICsJdmFsIHw9IEkyQ19NU1RfQ05UTF9HRU5fU1RBUlQgfCBJMkNfTVNUX0NOVExfQ01EX05P TkUgfAo+ICsJCUkyQ19NU1RfQ05UTF9HRU5fTkFDSzsKPiArCXZhbCAmPSB+KEkyQ19NU1RfQ05U TF9HRU5fU1RPUCB8IEkyQ19NU1RfQ05UTF9HRU5fUkFCKTsKPiArCXdyaXRlbCh2YWwsIGdkZXYt PnJlZ3MgKyBJMkNfTVNUX0NOVEwpOwo+ICsKPiArCXJldHVybiBpMmNfY2hlY2tfc3RhdHVzKGdk ZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIGkyY19tYW51YWxfc3RvcChzdHJ1Y3QgZ3B1X2ky Y19kZXYgKmdkZXYpCj4gK3sKPiArCXUzMiB2YWwgPSAwOwo+ICsKPiArCXZhbCB8PSBJMkNfTVNU X0NOVExfR0VOX1NUT1AgfCBJMkNfTVNUX0NOVExfQ01EX05PTkUgfAo+ICsJCUkyQ19NU1RfQ05U TF9HRU5fTkFDSzsKPiArCXZhbCAmPSB+KEkyQ19NU1RfQ05UTF9HRU5fU1RBUlQgfCBJMkNfTVNU X0NOVExfR0VOX1JBQik7Cj4gKwl3cml0ZWwodmFsLCBnZGV2LT5yZWdzICsgSTJDX01TVF9DTlRM KTsKPiArCj4gKwlyZXR1cm4gaTJjX2NoZWNrX3N0YXR1cyhnZGV2KTsKPiArfQo+ICsKPiArc3Rh dGljIHUzMiBpMmNfbWFudWFsX3dyaXRlKHN0cnVjdCBncHVfaTJjX2RldiAqZ2RldiwgdTggZGF0 YSkKPiArewo+ICsJdTMyIHZhbCA9IDA7Cj4gKwo+ICsJd3JpdGVsKGRhdGEsIGdkZXYtPnJlZ3Mg KyBJMkNfTVNUX0RBVEEpOwo+ICsKPiArCXZhbCB8PSBJMkNfTVNUX0NOVExfQ01EX1dSSVRFIHwg KDEgPDwgSTJDX01TVF9DTlRMX0JVUlNUX1NJWkVfU0hJRlQpIHwKPiArCQlJMkNfTVNUX0NOVExf R0VOX05BQ0s7Cj4gKwl2YWwgJj0gfihJMkNfTVNUX0NOVExfR0VOX1NUQVJUIHwgSTJDX01TVF9D TlRMX0dFTl9TVE9QCj4gKwkJfCBJMkNfTVNUX0NOVExfR0VOX1JBQik7Cj4gKwl3cml0ZWwodmFs LCBnZGV2LT5yZWdzICsgSTJDX01TVF9DTlRMKTsKPiArCj4gKwlyZXR1cm4gaTJjX2NoZWNrX3N0 YXR1cyhnZGV2KTsKPiArfQo+ICsKPiArLyogZ2RldiBpMmMgYWRhcHRlciAqLwo+ICtzdGF0aWMg aW50IGdwdV9pMmNfbWFzdGVyX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLAo+ICsJc3Ry dWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCj4gK3sKPiArCXN0cnVjdCBncHVfaTJjX2RldiAq Z2RldiA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm Z2Rldi0+cGNpX2Rldi0+ZGV2Owo+ICsJaW50IHJldHJ5MWIgPSAxMDsKPiArCXUzMiBzdGF0dXM7 Cj4gKwlpbnQgaSwgajsKPiArCj4gKwlkZXZfZGJnKGRldiwgIiVzOiBhZGFwICVwIG1zZ3MgJXAg bnVtICVkXG4iLCBfX2Z1bmNfXywgYWRhcCwgbXNncywgbnVtKTsKClRoZXJlJ3MgYWxyZWFkeSBj b2RlIGluIGRyaXZlcnMvaTJjL2kyYy1jb3JlLWJhc2UuYyB0aGF0IHdpbGwgcHJpbnQKbW9zdGx5 IHRoZSBzYW1lIGluZm9ybWF0aW9uIHdoZW4gREVCVUcgaXMgZW5hYmxlZC4KCj4gKwltdXRleF9s b2NrKCZnZGV2LT5tdXRleCk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Cj4g KwkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgewo+ICtyZXRyeTI6Cj4gKwkJCXN0YXR1 cyA9IGkyY19yZWFkKGdkZXYsIG1zZ3NbaV0uYnVmLCBtc2dzW2ldLmxlbik7Cj4gKwkJCWlmIChz dGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKPiArCQkJCWRldl9lcnIoZGV2LAo+ICsJCQkJIiVz OiVkIGkyY19yZWFkIGZhaWxlZCAlMDhseCIsIF9fZnVuY19fLAo+ICsJCQkJX19MSU5FX18sICh1 bnNpZ25lZCBsb25nKXN0YXR1cyk7CgpBZ2FpbiwgSSdtIG5vdCBzdXJlIGZpbGVuYW1lIGFuZCBs aW5lIG51bWJlciB3aWxsIHByb3ZpZGUgdXNlZnVsCmluZm9ybWF0aW9uLiBJJ2Qgc2ltcGx5IHJl ZmVyIHRvIHRoZSBvcGVyYXRpb24gdGhhdCBmYWlsZWQsIGFsb25nIHRoZQpsaW5lcyBvZjoKCgll cnIgPSBpMmNfcmVhZCguLi4pOwoJaWYgKGVyciA8IDApIHsKCQlkZXZfZXJyKGRldiwgIkkyQyBy ZWFkIGZhaWxlZDogJWRcbiIsIGVycik7CgkJLi4uCgl9Cgo+ICsKPiArCQkJCWlmICgtLXJldHJ5 MWIgPiAwKSB7Cj4gKwkJCQkJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMTAwMCk7Cj4gKwkJCQkJZ290 byByZXRyeTI7Cj4gKwkJCQl9Cj4gKwkJCQlicmVhazsKPiArCQkJfQoKQWxzbywgcGVyaGFwcyB5 b3Ugd2FudCB0byBvbmx5IG91dHB1dCB0aGUgZXJyb3IgcmlnaHQgYmVmb3JlIHRoZSBicmVhawpz byB0aGF0IHlvdSBkb24ndCBwb3RlbnRpYWxseSBnZXQgMTAgaWRlbnRpY2FsIGVycm9yIG1lc3Nh Z2VzPwoKPiArCQkJZ2Rldi0+ZG9fc3RhcnQgPSB0cnVlOwo+ICsJCX0gZWxzZSBpZiAobXNnc1tp XS5mbGFncyAmIEkyQ19NX1NUT1ApIHsKPiArCQkJc3RhdHVzID0gaTJjX21hbnVhbF9zdG9wKGdk ZXYpOwo+ICsJCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Cj4gKwkJCQlkZXZfZXJy KGRldiwKPiArCQkJCSIlczolZCBpMmNfbWFudWFsX3N0b3AgZmFpbGVkICUwOGx4IiwgX19mdW5j X18sCj4gKwkJCQlfX0xJTkVfXywgKHVuc2lnbmVkIGxvbmcpc3RhdHVzKTsKPiArCQkJCWdvdG8g ZXhpdDsKPiArCQkJfQo+ICsJCQlnZGV2LT5kb19zdGFydCA9IHRydWU7Cj4gKwkJfSBlbHNlIHsK PiArCQkJZGV2X2RiZyhkZXYsICIhSTJDX01fUkQgc3RhcnQgJWQgbGVuICVkXG4iLAo+ICsJCQkJ Z2Rldi0+ZG9fc3RhcnQsIG1zZ3NbaV0ubGVuKTsKPiArCQkJaWYgKGdkZXYtPmRvX3N0YXJ0KSB7 Cj4gKwkJCQlzdGF0dXMgPSBpMmNfbWFudWFsX3N0YXJ0KGdkZXYsIG1zZ3NbaV0uYWRkcik7Cj4g KwkJCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Cj4gKwkJCQkJZGV2X2VycihkZXYs Cj4gKwkJCQkJIiVzOiVkIGkyY19tYW51YWxfc3RhcnQgZmFpbGVkICUwOGx4IiwKPiArCQkJCQkJ X19mdW5jX18sIF9fTElORV9fLAo+ICsJCQkJCQkodW5zaWduZWQgbG9uZylzdGF0dXMpOwo+ICsJ CQkJCWdvdG8gZXhpdDsKPiArCQkJCX0KPiArCQkJCXN0YXR1cyA9IGkyY19tYW51YWxfd3JpdGUo Z2RldiwKPiArCQkJCQkJbXNnc1tpXS5hZGRyIDw8IDEpOwo+ICsJCQkJaWYgKHN0YXR1cyAhPSBT VEFUVVNfU1VDQ0VTUykgewo+ICsJCQkJCWRldl9lcnIoZGV2LAo+ICsJCQkJCSIlczolZCBpMmNf bWFudWFsX3dyaXRlIGZhaWxlZCAlMDhseCIsCj4gKwkJCQkJCV9fZnVuY19fLCBfX0xJTkVfXywK PiArCQkJCQkJKHVuc2lnbmVkIGxvbmcpc3RhdHVzKTsKPiArCQkJCQlnb3RvIGV4aXRfc3RvcDsK PiArCQkJCX0KPiArCQkJCWdkZXYtPmRvX3N0YXJ0ID0gZmFsc2U7Cj4gKwkJCX0KPiArCQkJZm9y IChqID0gMDsgaiA8IG1zZ3NbaV0ubGVuOyBqKyspIHsKPiArCQkJCXN0YXR1cyA9IGkyY19tYW51 YWxfd3JpdGUoZ2RldiwKPiArCQkJCQkJKihtc2dzW2ldLmJ1ZiArIGopKTsKPiArCQkJCWlmIChz dGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKPiArCQkJCQlkZXZfZXJyKGRldiwKPiArCQkJCQki JXM6JWQgaTJjX21hbnVhbF93cml0ZSBmYWlsZWQgJTA4bHgiLAo+ICsJCQkJCQlfX2Z1bmNfXywg X19MSU5FX18sCj4gKwkJCQkJCSh1bnNpZ25lZCBsb25nKXN0YXR1cyk7Cj4gKwkJCQkJZ290byBl eGl0X3N0b3A7Cj4gKwkJCQl9Cj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4gKwlnb3RvIGV4aXQ7Cj4g K2V4aXRfc3RvcDoKPiArCXN0YXR1cyA9IGkyY19tYW51YWxfc3RvcChnZGV2KTsKPiArCWlmIChz dGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCj4gKwkJZGV2X2VycihkZXYsICJpMmNfbWFudWFsX3N0 b3AgZmFpbGVkICV4Iiwgc3RhdHVzKTsKPiArZXhpdDoKPiArCW11dGV4X3VubG9jaygmZ2Rldi0+ bXV0ZXgpOwo+ICsJcmV0dXJuIGk7Cj4gK30KCllvdSBtaWdodCB3YW50IHRvIGNvbnNpZGVyIHVz aW5nIG1vcmUgZGVzY3JpcHRpdmUgbmFtZXMgZm9yIHRoZSBsYWJlbHMKdG8gbWFrZSB0aGUgY29k ZSBtb3JlIHJlYWRhYmxlLiBTb21ldGhpbmcgbGlrZToKCgkJLi4uCgkJZ290byBzdG9wOwoJfQoK CWdvdG8gdW5sb2NrOwoKCXN0b3A6CgkJLi4uCgl1bmxvY2s6CgkJLi4uCgpJcyBtb3JlIHJlYWRh YmxlIEkgdGhpbmsuIEFsc28sIEkgdGhpbmsgdGhlIGhpZ2ggbGV2ZWwgb2YgaW5kZW50YXRpb24K bWFrZXMgdGhpcyBmdW5jdGlvbiBoYXJkIHRvIHJlYWQuIFlvdSBtYXkgd2FudCB0byBzcGxpdCBp dCB1cCBpbnRvCnNtYWxsZXIgY2h1bmtzLgoKPiArCj4gK3N0YXRpYyB1MzIgZ3B1X2kyY19mdW5j dGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKPiArewo+ICsJcmV0dXJuIEkyQ19G VU5DX0kyQyB8IEkyQ19GVU5DX1NNQlVTX0VNVUw7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgaTJjX2FsZ29yaXRobSBncHVfaTJjX2FsZ29yaXRobSA9IHsKPiArCS5tYXN0ZXJfeGZl cgk9IGdwdV9pMmNfbWFzdGVyX3hmZXIsCj4gKwkuZnVuY3Rpb25hbGl0eQk9IGdwdV9pMmNfZnVu Y3Rpb25hbGl0eSwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgZ3B1X2kyY19kZXZfaW5pdChzdHJ1 Y3QgZ3B1X2kyY19kZXYgKmdkZXYpCj4gK3sKPiArCWdkZXYtPmRvX3N0YXJ0ID0gdHJ1ZTsKPiAr Cj4gKwkvKiBpbml0aWFsaXplIG11dGV4ICovCj4gKwltdXRleF9pbml0KCZnZGV2LT5tdXRleCk7 Cj4gKwo+ICsJLyogaW5pdGlhbGl6ZSBpMmMgKi8KPiArCWVuYWJsZV9pMmNfYnVzKGdkZXYpOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9CgpZb3UgbWlnaHQgd2FudCB0byBjb25zaWRlciBtb3Zpbmcg dGhpcyBkaXJlY3RseSBpbnRvIHRoZSAtPnByb2JlKCkKaW1wbGVtZW50YXRpb24uIFlvdSBuZXZl ciByZXVzZSB0aGlzIGVsc2V3aGVyZSBhbmQgaXQncyBub3QgYmlnIGVub3VnaAp0byB3YXJyYW50 IHRoZSBzZXBhcmF0ZSBmdW5jdGlvbi4gSW5saW5pbmcgaXQgaW50byAtPnByb2JlKCkgd2lsbCBt YWtlCnRoZSBjb2RlIGVhc2llciB0byBmb2xsb3csIGluIG15IG9waW5pb24uCgo+ICsKPiArc3Ry dWN0IGkyY19ib2FyZF9pbmZvIGdwdV9pMmNfdWNzaV9ib2FyZF9pbmZvID0gewo+ICsJSTJDX0JP QVJEX0lORk8oImkyYy1ncHUtdWNzaSIsIENDR1hfSTJDX0RFVl9BRERSRVNTKSwKPiArfTsKPiAr Cj4gKyNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9VTktOT1dOCTB4MGM4MAo+ICsvKiBwY2kgZHJp dmVyICovCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBncHVfaTJjX2lkc1td ID0gewoKVGhlIGNvbW1lbnQgdGhlcmUgbG9va3Mgb3V0IG9mIHBsYWNlLgoKPiArCXsgUENJX1ZF TkRPUl9JRF9OVklESUEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCj4gKwkJ UENJX0NMQVNTX1NFUklBTF9VTktOT1dOIDw8IDgsIDB4ZmZmZmZmMDB9LAo+ICsJeyB9LAo+ICt9 Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZ3B1X2kyY19pZHMpOwo+ICsKPiArc3RhdGlj IGludCBncHVfaTJjX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lf ZGV2aWNlX2lkICppZCkKPiArewo+ICsJc3RydWN0IGdwdV9pMmNfZGV2ICpnZGV2Owo+ICsJaW50 IHN0YXR1czsKPiArCj4gKwlkZXZfaW5mbygmZGV2LT5kZXYsCj4gKwkJImRldiAlcCBpZCAlMDh4 ICUwOHggc3ViICUwOHggJTA4eCBjbGFzcyAlMDh4ICUwOHhcbiIsCj4gKwkJZGV2LCBpZC0+dmVu ZG9yLCBpZC0+ZGV2aWNlLCBpZC0+c3VidmVuZG9yLCBpZC0+c3ViZGV2aWNlLAo+ICsJCWlkLT5j bGFzcywgaWQtPmNsYXNzX21hc2spOwoKSWYgYXQgYWxsLCB0aGlzIHNob3VsZCBiZSBkZXZfZGJn KCkuIEdlbmVyYWxseSBJIGRvbid0IHRoaW5rIHRoZXJlJ3MgYW55CnJlYXNvbiB0byBtZW50aW9u IHRoaXMgYXQgYWxsLiAtPnByb2JlKCkgc2hvdWxkIGFzc3VtZSB0aGF0IGl0IHdpbGwKc3VjY2Vl ZCwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIGNhc2UsIGFuZCB0aGF0IHNob3VsZCBub3QgcHJvZHVj ZSBhbnkKbWVzc2FnZXMuIEluc3RlYWQgaXQncyBiZXR0ZXIgdG8gbGV0IHRoZSB1c2VyIGtub3cg aWYgc29tZXRoaW5nIGZhaWxlZAp1c2luZyBhbiBlcnJvciBtZXNzYWdlLgoKPiArCj4gKwlnZGV2 ID0gZGV2bV9remFsbG9jKCZkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBncHVfaTJjX2RldiksIEdG UF9LRVJORUwpOwo+ICsJaWYgKCFnZGV2KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWdk ZXYtPnBjaV9kZXYgPSBkZXY7Cj4gKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBnZGV2KTsKPiArCj4g KwlzdGF0dXMgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOwo+ICsJaWYgKHN0YXR1cyA8IDApIHsK PiArCQlkZXZfZXJyKCZkZXYtPmRldiwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCAtICVkXG4i LCBzdGF0dXMpOwo+ICsJCXJldHVybiBzdGF0dXM7Cj4gKwl9Cj4gKwo+ICsJcGNpX3NldF9tYXN0 ZXIoZGV2KTsKPiArCj4gKwlnZGV2LT5yZWdzID0gcGNpX2lvbWFwKGRldiwgMCwgMCk7Cj4gKwlp ZiAoIWdkZXYtPnJlZ3MpIHsKPiArCQlkZXZfZXJyKCZkZXYtPmRldiwgInBjaV9pb21hcCBmYWls ZWRcbiIpOwo+ICsJCXN0YXR1cyA9IC1FTk9NRU07Cj4gKwkJZ290byBpb21hcF9lcnI7Cj4gKwl9 Cj4gKwo+ICsJc3RhdHVzID0gcGNpX2VuYWJsZV9tc2koZGV2KTsKPiArCWlmIChzdGF0dXMgPCAw KSB7Cj4gKwkJZGV2X2VycigmZGV2LT5kZXYsICJwY2lfZW5hYmxlX21zaSBmYWlsZWQgLSAlZFxu Iiwgc3RhdHVzKTsKPiArCQlnb3RvIGVuYWJsZV9tc2lfZXJyOwo+ICsJfQo+ICsKPiArCXN0YXR1 cyA9IGdwdV9pMmNfZGV2X2luaXQoZ2Rldik7Cj4gKwlpZiAoc3RhdHVzIDwgMCkgewo+ICsJCWRl dl9lcnIoJmRldi0+ZGV2LCAiZ3B1X2kyY19kZXZfaW5pdCBmYWlsZWQgLSAlZFxuIiwgc3RhdHVz KTsKPiArCQlnb3RvIGkyY19pbml0X2VycjsKPiArCX0KPiArCj4gKwlpMmNfc2V0X2FkYXBkYXRh KCZnZGV2LT5hZGFwdGVyLCBnZGV2KTsKPiArCWdkZXYtPmFkYXB0ZXIub3duZXIgPSBUSElTX01P RFVMRTsKPiArCXN0cmxjcHkoZ2Rldi0+YWRhcHRlci5uYW1lLCAiTlZJRElBIEdQVSBJMkMgYWRh cHRlciIsCj4gKwkJc2l6ZW9mKGdkZXYtPmFkYXB0ZXIubmFtZSkpOwo+ICsJZ2Rldi0+YWRhcHRl ci5hbGdvID0gJmdwdV9pMmNfYWxnb3JpdGhtOwo+ICsJZ2Rldi0+YWRhcHRlci5kZXYucGFyZW50 ID0gJmRldi0+ZGV2Owo+ICsJc3RhdHVzID0gaTJjX2FkZF9hZGFwdGVyKCZnZGV2LT5hZGFwdGVy KTsKPiArCWlmIChzdGF0dXMgPCAwKSB7Cj4gKwkJZGV2X2VycigmZGV2LT5kZXYsICJpMmNfYWRk X2FkYXB0ZXIgZmFpbGVkIC0gJWRcbiIsIHN0YXR1cyk7Cj4gKwkJZ290byBhZGRfYWRhcHRlcl9l cnI7Cj4gKwl9Cj4gKwo+ICsJZ3B1X2kyY191Y3NpX2JvYXJkX2luZm8uaXJxID0gZGV2LT5pcnE7 Cj4gKwlnZGV2LT5jbGllbnQgPSBpMmNfbmV3X2RldmljZSgmZ2Rldi0+YWRhcHRlciwKPiArCQkJ JmdwdV9pMmNfdWNzaV9ib2FyZF9pbmZvKTsKCkkgdGhpbmsgaXQncyB0ZWNobmljYWxseSBwb3Nz aWJsZSB0aGF0IHRoZSBhYm92ZSB3b3VsZCByYWNlIGJldHdlZW4KbXVsdGlwbGUgaW5zdGFuY2Vz IG9mIHRoaXMgSTJDIGNvbnRyb2xsZXIuIFRoZSBzYWZlciB3YXkgd291bGQgYmUgdG8KbWFrZSBn cHVfaTJjX3Vjc2lfYm9hcmRfaW5mbyB2YXJpYWJsZSBsb2NhbCB0byB0aGlzIGZ1bmN0aW9uLgoK PiArCj4gKwlpZiAoIWdkZXYtPmNsaWVudCkgewo+ICsJCWRldl9lcnIoJmRldi0+ZGV2LCAiaTJj X25ld19kZXZpY2UgZmFpbGVkIC0gJWRcbiIsIHN0YXR1cyk7Cj4gKwkJc3RhdHVzID0gLUVOT0RF VjsKPiArCQlnb3RvIGFkZF9hZGFwdGVyX2VycjsKPiArCX0KPiArCj4gKwlkZXZfc2V0X2RydmRh dGEoJmRldi0+ZGV2LCBnZGV2KTsKCkkgZG9uJ3QgdGhpbmsgeW91IG5lZWQgdGhpcyBoZXJlIHNp bmNlIHlvdSd2ZSBhbHJlYWR5IGNhbGxlZApwY2lfc2V0X2RydmRhdGEoKSBhYm92ZS4KCj4gKwlw bV9ydW50aW1lX3B1dF9ub2lkbGUoJmRldi0+ZGV2KTsKPiArCXBtX3J1bnRpbWVfYWxsb3coJmRl di0+ZGV2KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2FkZF9hZGFwdGVyX2VycjoKPiArCWky Y19kZWxfYWRhcHRlcigmZ2Rldi0+YWRhcHRlcik7Cj4gK2kyY19pbml0X2VycjoKPiArCXBjaV9k aXNhYmxlX21zaShkZXYpOwo+ICtlbmFibGVfbXNpX2VycjoKPiArCXBjaV9pb3VubWFwKGRldiwg Z2Rldi0+cmVncyk7Cj4gK2lvbWFwX2VycjoKPiArCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwo+ ICsJcmV0dXJuIHN0YXR1czsKPiArfQoKSXQncyBnZW5lcmFsbHkgcHJlZmVycmVkIHRvIGhhdmUg bmFtZXMgdGhhdCBkZXNjcmliZSB0aGUgYWN0aW9ucyBvZiB0aGUKbGFiZWwsIGluc3RlYWQgb2Yg ZGVzY3JpYmluZyB3aGVyZSB0aGV5IGZhaWxlZC4gSSB0aGluayB0aGF0IG1ha2VzIGNvZGUKZWFz aWVyIHRvIHJlYWQsIGFuZCBpdCBhbHNvIGhhcyB0aGUgYmVuZWZpdCBvZiBub3QgYmVpbmcgY29u ZnVzaW5nIHdoZW4KeW91IGp1bXAgdG8gYSBsYWJlbCwgc2F5IGFkZF9hZGFwdGVyX2VyciwgZnJv bSBhIGxvY2F0aW9uIHRoYXQgZG9lc24ndApoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggYWRkaW5n IGFuIGFkYXB0ZXIuCgpTb21ldGhpbmcgbGlrZSB0aGlzIHdvdWxkIGJlIGJldHRlciBpbiBteSBv cGluaW9uOgoKCWRlbF9hZGFwdGVyOgoJCS4uLgoJZGlzYWJsZV9tc2k6CgkJLi4uCgl1bm1hcDoK CQkuLi4KCWRpc2FibGU6CgkJLi4uCgo+ICsKPiArc3RhdGljIHZvaWQgZ3B1X2kyY19yZW1vdmUo c3RydWN0IHBjaV9kZXYgKmRldikKPiArewo+ICsJc3RydWN0IGdwdV9pMmNfZGV2ICpnZGV2ID0g cGNpX2dldF9kcnZkYXRhKGRldik7Cj4gKwo+ICsJaTJjX2RlbF9hZGFwdGVyKCZnZGV2LT5hZGFw dGVyKTsKPiArCXBjaV9kaXNhYmxlX21zaShkZXYpOwo+ICsJcGNpX2lvdW5tYXAoZGV2LCBnZGV2 LT5yZWdzKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBncHVfaTJjX3N1c3BlbmQoc3RydWN0IGRl dmljZSAqZGV2KQo+ICt7Cj4gKwlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KCkRvIHdlIG5lZWQgdGhpcyBpZiBpdCBkb2Vzbid0IGRvIGFueXRo aW5nPwoKPiArCj4gK3N0YXRpYyBpbnQgZ3B1X2kyY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2 KQo+ICt7Cj4gKwlzdHJ1Y3QgZ3B1X2kyY19kZXYgKmdkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKPiArCj4gKwlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Cj4gKwo+ICsJZW5hYmxl X2kyY19idXMoZ2Rldik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg Z3B1X2kyY19pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGdwdV9pMmNf ZGV2ICpnZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwo+ICsJaWYgKCFtdXRleF90cnls b2NrKCZnZGV2LT5tdXRleCkpIHsKPiArCQlkZXZfaW5mbyhkZXYsICIlczogLUVCVVNZXG4iLCBf X2Z1bmNfXyk7Cj4gKwkJcmV0dXJuIC1FQlVTWTsKPiArCX0KPiArCW11dGV4X3VubG9jaygmZ2Rl di0+bXV0ZXgpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtVTklWRVJTQUxfREVWX1BN X09QUyhncHVfaTJjX2RyaXZlcl9wbSwgZ3B1X2kyY19zdXNwZW5kLCBncHVfaTJjX3Jlc3VtZSwK PiArCWdwdV9pMmNfaWRsZSk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZ3B1X2ky Y19kcml2ZXIgPSB7Cj4gKwkubmFtZQkJPSAiZ3B1X2kyY19kcml2ZXIiLAoKVGhpcyBuYW1lIGxv b2tzIHVudXN1YWwgZm9yIGEgZHJpdmVyLiBQZXJoYXBzICJpMmMtbnZpZGlhLWdwdSIgdG8gbWF0 Y2gKdGhlIG1vZHVsZSBuYW1lPwoKPiArCS5pZF90YWJsZQk9IGdwdV9pMmNfaWRzLAo+ICsJLnBy b2JlCQk9IGdwdV9pMmNfcHJvYmUsCj4gKwkucmVtb3ZlCQk9IGdwdV9pMmNfcmVtb3ZlLAo+ICsJ LmRyaXZlcgkJPSB7Cj4gKwkJLnBtCT0gJmdwdV9pMmNfZHJpdmVyX3BtLAo+ICsJfSwKPiArfTsK PiArCj4gK21vZHVsZV9wY2lfZHJpdmVyKGdwdV9pMmNfZHJpdmVyKTsKPiArCj4gK01PRFVMRV9B VVRIT1IoIkFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+Iik7Cj4gK01PRFVMRV9ERVNDUklQ VElPTigiTnZpZGlhIEdQVSBJMkMgY29udHJvbGxlciBEcml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VO U0UoIkdQTCB2MiIpOwo=