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: [v6,1/2] i2c: buses: add i2c bus driver for NVIDIA GPU From: Ajay Gupta Message-Id: Date: Thu, 6 Sep 2018 17:39:01 +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: SGkgUGV0ZXIsDQoNCj4gPiBMYXRlc3QgTlZJRElBIEdQVSBjYXJkIGhhcyBVU0IgVHlwZS1DIGlu dGVyZmFjZS4gVGhlcmUgaXMgYSBUeXBlLUMNCj4gPiBjb250cm9sbGVyIHdoaWNoIGNhbiBiZSBh Y2Nlc3NlZCBvdmVyIEkyQy4NCj4gPg0KPiA+IFRoaXMgZHJpdmVyIGFkZHMgSTJDIGJ1cyBkcml2 ZXIgdG8gY29tbXVuaWNhdGUgd2l0aCBUeXBlLUMgY29udHJvbGxlci4NCj4gPiBJMkMgY2xpZW50 IGRyaXZlciB3aWxsIGJlIHBhcnQgb2YgVVNCIFR5cGUtQyBVQ1NJIGRyaXZlci4NCj4gPg0KPiA+ IFNpZ25lZC1vZmYtYnk6IEFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+DQoNCj4gPiArc3Rh dGljIHZvaWQgZW5hYmxlX2kyY19idXMoc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkKQ0KPiANCj4g UGxlYXNlIHByZWZpeCBhbGwgeW91ciBmdW5jdGlvbnMgd2l0aCBncHVfLCBvciBudmlkaWFfZ3B1 XyBvciBzb21ldGhpbmcgbGlrZQ0KPiB0aGF0IChiZWNhdXNlIGdwdSBzb3VuZHMgbGlrZSBhIHNv bWV0aGluZyBncmFwaGljcywgbm90IHRoYXQgbnZpZGlhX2dwdSBoZWxwcw0KPiB3aXRoIHRoYXQg cHJvYmxlbSB0aG91Z2guLi4pDQpPaywgd2lsbCBwcmVmaXggdGhlbS4NCiANCj4gPiArew0KPiA+ ICsJdTMyIHZhbDsNCj4gPiArDQo+ID4gKwkvKiBlbmFibGUgSTJDICovDQo+ID4gKwl2YWwgPSBy ZWFkbChpMmNkLT5yZWdzICsgSTJDX01TVF9IWUJSSURfUEFEQ1RMKTsNCj4gPiArCXZhbCB8PSBJ MkNfTVNUX0hZQlJJRF9QQURDVExfTU9ERV9JMkMgfA0KPiA+ICsJCUkyQ19NU1RfSFlCUklEX1BB RENUTF9JMkNfU0NMX0lOUFVUX1JDViB8DQo+ID4gKwkJSTJDX01TVF9IWUJSSURfUEFEQ1RMX0ky Q19TREFfSU5QVVRfUkNWOw0KPiA+ICsJd3JpdGVsKHZhbCwgaTJjZC0+cmVncyArIEkyQ19NU1Rf SFlCUklEX1BBRENUTCk7DQo+ID4gKw0KPiA+ICsJLyogZW5hYmxlIDEwMEtIWiBtb2RlICovDQo+ ID4gKwl2YWwgPSBJMkNfTVNUX0kyQzBfVElNSU5HX1NDTF9QRVJJT0RfMTAwS0haOw0KPiA+ICsJ dmFsIHw9IChJMkNfTVNUX0kyQzBfVElNSU5HX1RJTUVPVVRfQ0xLX0NOVF9NQVgNCj4gPiArCSAg ICA8PCBJMkNfTVNUX0kyQzBfVElNSU5HX1RJTUVPVVRfQ0xLX0NOVCk7DQo+ID4gKwl2YWwgfD0g STJDX01TVF9JMkMwX1RJTUlOR19USU1FT1VUX0NIRUNLOw0KPiA+ICsJd3JpdGVsKHZhbCwgaTJj ZC0+cmVncyArIEkyQ19NU1RfSTJDMF9USU1JTkcpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50 IGkyY19jaGVja19zdGF0dXMoc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkKSB7DQo+ID4gKwl1bnNp Z25lZCBsb25nIHRhcmdldCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApOw0KPiA+ ICsJdTMyIHZhbDsNCj4gPiArDQo+ID4gKwlkbyB7DQo+ID4gKwkJdmFsID0gcmVhZGwoaTJjZC0+ cmVncyArIEkyQ19NU1RfQ05UTCk7DQo+ID4gKwkJaWYgKCEodmFsICYgSTJDX01TVF9DTlRMX0NZ Q0xFX1RSSUdHRVIpKQ0KPiA+ICsJCQlicmVhazsNCj4gPiArCQlpZiAoKHZhbCAmIEkyQ19NU1Rf Q05UTF9TVEFUVVMpICE9DQo+ID4gKwkJCQlJMkNfTVNUX0NOVExfU1RBVFVTX0JVU19CVVNZKQ0K PiA+ICsJCQlicmVhazsNCj4gPiArCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7DQo+ID4gKwl9 IHdoaWxlICh0aW1lX2lzX2FmdGVyX2ppZmZpZXModGFyZ2V0KSk7DQo+ID4gKwlpZiAodGltZV9p c19iZWZvcmVfamlmZmllcyh0YXJnZXQpKQ0KPiA+ICsJCXJldHVybiAtRUlPOw0KPiA+ICsNCj4g PiArCXZhbCA9IHJlYWRsKGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0NOVEwpOw0KPiA+ICsJc3dpdGNo ICh2YWwgJiBJMkNfTVNUX0NOVExfU1RBVFVTKSB7DQo+ID4gKwljYXNlIEkyQ19NU1RfQ05UTF9T VEFUVVNfT0tBWToNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArCWNhc2UgSTJDX01TVF9DTlRMX1NU QVRVU19OT19BQ0s6DQo+ID4gKwkJcmV0dXJuIC1FSU87DQo+ID4gKwljYXNlIEkyQ19NU1RfQ05U TF9TVEFUVVNfVElNRU9VVDoNCj4gPiArCQlyZXR1cm4gLUVUSU1FOw0KPiA+ICsJY2FzZSBJMkNf TVNUX0NOVExfU1RBVFVTX0JVU19CVVNZOg0KPiA+ICsJCXJldHVybiAtRUJVU1k7DQo+ID4gKwlk ZWZhdWx0Og0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgaW50IGkyY19yZWFkKHN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCwgdTggKmRhdGEsIHUx NiBsZW4pIHsNCj4gPiArCWludCBzdGF0dXM7DQo+ID4gKwl1MzIgdmFsOw0KPiA+ICsNCj4gPiAr CXZhbCA9IEkyQ19NU1RfQ05UTF9HRU5fU1RBUlQgfCBJMkNfTVNUX0NOVExfR0VOX1NUT1AgfA0K PiA+ICsJCUkyQ19NU1RfQ05UTF9DTURfUkVBRCB8IChsZW4gPDwNCj4gSTJDX01TVF9DTlRMX0JV UlNUX1NJWkVfU0hJRlQpIHwNCj4gPiArCQlJMkNfTVNUX0NOVExfQ1lDTEVfVFJJR0dFUiB8DQo+ IEkyQ19NU1RfQ05UTF9HRU5fTkFDSzsNCj4gPiArCXZhbCAmPSB+STJDX01TVF9DTlRMX0dFTl9S QUI7DQo+ID4gKwl3cml0ZWwodmFsLCBpMmNkLT5yZWdzICsgSTJDX01TVF9DTlRMKTsNCj4gPiAr DQo+ID4gKwlzdGF0dXMgPSBpMmNfY2hlY2tfc3RhdHVzKGkyY2QpOw0KPiA+ICsJaWYgKHN0YXR1 cyA8IDApDQo+ID4gKwkJcmV0dXJuIHN0YXR1czsNCj4gPiArDQo+ID4gKwl2YWwgPSByZWFkbChp MmNkLT5yZWdzICsgSTJDX01TVF9EQVRBKTsNCj4gPiArCXN3aXRjaCAobGVuKSB7DQo+ID4gKwlj YXNlIDE6DQo+ID4gKwkJZGF0YVswXSA9IHZhbDsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2Ug MjoNCj4gPiArCQlwdXRfdW5hbGlnbmVkX2JlMTYodmFsLCBkYXRhKTsNCj4gPiArCQlicmVhazsN Cj4gPiArCWNhc2UgMzoNCj4gPiArCQlwdXRfdW5hbGlnbmVkX2JlMTYodmFsID4+IDgsIGRhdGEp Ow0KPiA+ICsJCWRhdGFbMl0gPSB2YWw7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIDQ6DQo+ ID4gKwkJcHV0X3VuYWxpZ25lZF9iZTMyKHZhbCwgZGF0YSk7DQo+ID4gKwkJYnJlYWs7DQo+ID4g KwlkZWZhdWx0Og0KPiANCj4gVGhpcyBzZWVtcyB0byBiZWhhdmUgcmF0aGVyIHN0cmFuZ2UgZm9y IGxlbiA+IDQsIGFuZCBJIGRvIG5vdCBzZWUgYW55dGhpbmcNCj4gcHJldmVudGluZyB0aGF0IGZy b20gaGFwcGVuaW5nLg0KQWN0dWFsbHkgdGhlIGNoZWNrIGlzIGluIGNjZ19yZWFkKCkgb2YgdGhl IA0KY2xpZW50IGRyaXZlciBhdCBodHRwczovL21hcmMuaW5mby8/bD1saW51eC11c2ImbT0xNTM2 MTg2MDgzMDEyMDYmdz0yIA0KDQo+IEFtIEkgbWlzc2luZyBzb21ldGhpbmcsIG9yIGRvIHlvdSBu ZWVkIHRvIGFkZCBhIHF1aXJrIGZvciBtYXhfcmVhZF9sZW4/DQpJIHdpbGwgYWRkIGEgY2hlY2sg aW4gdGhpcyBmdW5jdGlvbiBhcyB3ZWxsLg0KDQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4g KwlyZXR1cm4gc3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGkyY19zdGFy dChzdHJ1Y3QgZ3B1X2kyY19kZXYgKmkyY2QsIHUxNiBhZGRyKSB7DQo+ID4gKwl1MzIgdmFsOw0K PiA+ICsNCj4gPiArCXZhbCA9IGFkZHIgPDwgSTJDX01TVF9BRERSX0RBQjsNCj4gPiArCXdyaXRl bCh2YWwsIGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0FERFIpOw0KPiA+ICsNCj4gPiArCXZhbCA9IEky Q19NU1RfQ05UTF9HRU5fU1RBUlQgfCBJMkNfTVNUX0NOVExfQ01EX05PTkUgfA0KPiA+ICsJCUky Q19NU1RfQ05UTF9HRU5fTkFDSzsNCj4gPiArCXZhbCAmPSB+KEkyQ19NU1RfQ05UTF9HRU5fU1RP UCB8IEkyQ19NU1RfQ05UTF9HRU5fUkFCKTsNCj4gPiArCXdyaXRlbCh2YWwsIGkyY2QtPnJlZ3Mg KyBJMkNfTVNUX0NOVEwpOw0KPiA+ICsNCj4gPiArCXJldHVybiBpMmNfY2hlY2tfc3RhdHVzKGky Y2QpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGkyY19zdG9wKHN0cnVjdCBncHVf aTJjX2RldiAqaTJjZCkgew0KPiA+ICsJdTMyIHZhbDsNCj4gPiArDQo+ID4gKwl2YWwgPSBJMkNf TVNUX0NOVExfR0VOX1NUT1AgfCBJMkNfTVNUX0NOVExfQ01EX05PTkUgfA0KPiA+ICsJCUkyQ19N U1RfQ05UTF9HRU5fTkFDSzsNCj4gPiArCXZhbCAmPSB+KEkyQ19NU1RfQ05UTF9HRU5fU1RBUlQg fCBJMkNfTVNUX0NOVExfR0VOX1JBQik7DQo+ID4gKwl3cml0ZWwodmFsLCBpMmNkLT5yZWdzICsg STJDX01TVF9DTlRMKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gaTJjX2NoZWNrX3N0YXR1cyhpMmNk KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBpMmNfd3JpdGUoc3RydWN0IGdwdV9p MmNfZGV2ICppMmNkLCB1OCBkYXRhKSB7DQo+ID4gKwl1MzIgdmFsOw0KPiA+ICsNCj4gPiArCXdy aXRlbChkYXRhLCBpMmNkLT5yZWdzICsgSTJDX01TVF9EQVRBKTsNCj4gPiArDQo+ID4gKwl2YWwg PSBJMkNfTVNUX0NOVExfQ01EX1dSSVRFIHwgKDEgPDwNCj4gSTJDX01TVF9DTlRMX0JVUlNUX1NJ WkVfU0hJRlQpIHwNCj4gPiArCQlJMkNfTVNUX0NOVExfR0VOX05BQ0s7DQo+ID4gKwl2YWwgJj0g fihJMkNfTVNUX0NOVExfR0VOX1NUQVJUIHwgSTJDX01TVF9DTlRMX0dFTl9TVE9QIHwNCj4gPiAr CQkgSTJDX01TVF9DTlRMX0dFTl9SQUIpOw0KPiA+ICsJd3JpdGVsKHZhbCwgaTJjZC0+cmVncyAr IEkyQ19NU1RfQ05UTCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGkyY19jaGVja19zdGF0dXMoaTJj ZCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZ3B1X2kyY19tYXN0ZXJfeGZlcihz dHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsDQo+ID4gKwkJCSAgICAgICBzdHJ1Y3QgaTJjX21zZyAq bXNncywgaW50IG51bSkgew0KPiA+ICsJc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkID0gaTJjX2dl dF9hZGFwZGF0YShhZGFwKTsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyY2QtPmRldjsN Cj4gPiArCWludCBzdGF0dXM7DQo+ID4gKwlpbnQgaSwgajsNCj4gPiArDQo+ID4gKwltdXRleF9s b2NrKCZpMmNkLT5tdXRleCk7DQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsNCj4g DQo+IEkgZG9uJ3QgZ2V0IGhvdyB0aGlzIGxvb3Agd29ya3MuIFlvdSBkbyBub3Qgc2VlbSB0byBh bHdheXMgc3RhcnQgd2l0aCBhIHN0YXJ0Lg0KPiBFLmcuLCBpZiB0aGUgZmlyc3QgbWVzc2FnZSBp cyBJMkNfTV9SRCwgaTJjX3JlYWQoKSBpcyBjYWxsZWQgYmVmb3JlIGkyY19zdGFydCgpLiBJcw0K PiB0aGF0IGNvcnJlY3Q/DQpUaGF04oCZcyBjb3JyZWN0IGFuZCBpdCBpcyBiZWNhdXNlIGkyX3Jl YWQoKSBpdHNlbGYgZG9lcyB0aGUgU1RBUlQgYW5kIFNUT1AuDQogDQo+IEFsc28sIGlmIGEgbWVz c2FnZSBoYXMgSTJDX01fU1RPUCBidXQgbm90IEkyQ19NX1JELCB0aGUgY2FsbCB0byBpMmNfc3Rv cCgpDQo+IGhhcHBlbnMgYmVmb3JlIHRoZSBjYWxsIHRoZSBpMmNfd3JpdGUoKS4gV2hhdCdzIHVw IHdpdGggdGhhdD8NCkNsaWVudCBkcml2ZXIgc2VuZHMgSTJDX01fU1RPUCBhbG9uZyB3aXRoIGV2 ZXJ5IHdyaXRlIG1lc3NhZ2UuDQogDQo+IEkgd291bGQgZXhwZWN0IGFuIGkyY19zdGFydCgpIGJl Zm9yZSB0aGUgbG9vcCBvciBmaXJzdCBpbiB0aGUgbG9vcCwgYW5kIGENCj4gaTJjX3N0b3AoKSBh ZnRlciB0aGUgbG9vcC4NCkkyY19yZWFkKCkgZnVuY3Rpb24gaXRzZWxmIHRha2VzIGNhcmUgb2Yg aXQuDQoNCj4gQXMgaXMsIHRoZSBzdG9wIGFmdGVyIHRoZSBsb29wIGlzIG9ubHkgY2FsbGVkIG9u IGVycm9yLg0KVG8gYmUgZXhhY3QsIHdoZW5ldmVyIHRoZXJlIGlzIGVycm9yIGluIGkyY193cml0 ZSgpLg0KDQo+IEluIGFkZGl0aW9uLCBJIHdvdWxkIGV4cGVjdCBtZXNzYWdlcyB0aGF0IGhhdmUg STJDX01fU1RPUCB0byB0cmlnZ2VyIGFuDQo+IGkyY19zdG9wKCkgY2FsbCAqYWZ0ZXIqIHRoZSBt ZXNzYWdlLCBldmVuIGlmIHRoZSBtZXNzYWdlIGlzIG5vdCBsYXN0IGluIHRoZSBsb29wLg0KWWVz LCBpdHMgbGlrZSB0aGF0IGZvciBhbGwgd3JpdGUgbWVzc2FnZXMuIA0KIA0KPiBXaGF0IGFtIEkg bWlzc2luZz8NCj4gDQo+ID4gKwkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgew0KPiA+ ICsJCQlzdGF0dXMgPSBpMmNfcmVhZChpMmNkLCBtc2dzW2ldLmJ1ZiwgbXNnc1tpXS5sZW4pOw0K PiA+ICsJCQlpZiAoc3RhdHVzIDwgMCkgew0KPiA+ICsJCQkJZGV2X2VycihkZXYsICJpMmNfcmVh ZCBlcnJvciAleCIsIHN0YXR1cyk7DQo+ID4gKwkJCQlnb3RvIHVubG9jazsNCj4gPiArCQkJfQ0K PiA+ICsJCQlpMmNkLT5kb19zdGFydCA9IHRydWU7DQo+ID4gKwkJfSBlbHNlIGlmIChtc2dzW2ld LmZsYWdzICYgSTJDX01fU1RPUCkgew0KPiA+ICsJCQlzdGF0dXMgPSBpMmNfc3RvcChpMmNkKTsN Cj4gPiArCQkJaWYgKHN0YXR1cyA8IDApIHsNCj4gPiArCQkJCWRldl9lcnIoZGV2LCAiaTJjX3N0 b3AgZXJyb3IgJXgiLCBzdGF0dXMpOw0KPiA+ICsJCQkJZ290byB1bmxvY2s7DQo+ID4gKwkJCX0N Cj4gPiArCQkJaTJjZC0+ZG9fc3RhcnQgPSB0cnVlOw0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJ CWlmIChpMmNkLT5kb19zdGFydCkgew0KPiA+ICsJCQkJc3RhdHVzID0gaTJjX3N0YXJ0KGkyY2Qs IG1zZ3NbaV0uYWRkcik7DQo+ID4gKwkJCQlpZiAoc3RhdHVzIDwgMCkgew0KPiA+ICsJCQkJCWRl dl9lcnIoZGV2LCAiaTJjX3N0YXJ0IGVycm9yICV4IiwNCj4gPiArCQkJCQkJc3RhdHVzKTsNCj4g PiArCQkJCQlnb3RvIHVubG9jazsNCj4gPiArCQkJCX0NCj4gPiArCQkJCXN0YXR1cyA9IGkyY193 cml0ZShpMmNkLCBtc2dzW2ldLmFkZHIgPDwgMSk7DQo+ID4gKwkJCQlpZiAoc3RhdHVzIDwgMCkg ew0KPiA+ICsJCQkJCWRldl9lcnIoZGV2LCAiaTJjX3dyaXRlIGVycm9yICV4IiwNCj4gPiArCQkJ CQkJc3RhdHVzKTsNCj4gPiArCQkJCQlnb3RvIHN0b3A7DQo+ID4gKwkJCQl9DQo+ID4gKwkJCQlp MmNkLT5kb19zdGFydCA9IGZhbHNlOw0KPiA+ICsJCQl9DQo+ID4gKwkJCWZvciAoaiA9IDA7IGog PCBtc2dzW2ldLmxlbjsgaisrKSB7DQo+ID4gKwkJCQlzdGF0dXMgPSBpMmNfd3JpdGUoaTJjZCwg Kihtc2dzW2ldLmJ1ZiArIGopKTsNCj4gPiArCQkJCWlmIChzdGF0dXMgPCAwKSB7DQo+ID4gKwkJ CQkJZGV2X2VycihkZXYsICJpMmNfd3JpdGUgZXJyb3IgJXgiLA0KPiA+ICsJCQkJCQlzdGF0dXMp Ow0KPiA+ICsJCQkJCWdvdG8gc3RvcDsNCj4gPiArCQkJCX0NCj4gPiArCQkJfQ0KPiA+ICsJCX0N Cj4gPiArCX0NCj4gPiArCXN0YXR1cyA9IGk7DQo+ID4gKwlnb3RvIHVubG9jazsNCjxoZXJlPg0K DQo+ID4gK3N0b3A6DQo+ID4gKwlzdGF0dXMgPSBpMmNfc3RvcChpMmNkKTsNCj4gPiArCWlmIChz dGF0dXMgPCAwKQ0KPiA+ICsJCWRldl9lcnIoZGV2LCAiaTJjX3N0b3AgZXJyb3IgJXgiLCBzdGF0 dXMpOw0KPiANCj4gSG1tLCBldmVyeSB0aW1lIHlvdSBjYWxsIG9uZSBvZiBpMmNfc3RhcnQsIGky Y19yZWFkLCBpMmNfd3JpdGUgb3IgaTJjX3N0b3AgeW91DQo+IGNoZWNrIGZvciBlcnJvciBhbmQg aXNzdWUgYSBnZW5lcmljIGRldl9lcnIgbWVzc2FnZS4gSSB0aGluayB5b3Ugc2hvdWxkIG1vdmUN Cj4gdGhlc2UgZXJyb3IgbWVzc2FnZXMgaW50byB0aGUgZnVuY3Rpb25zIGluc3RlYWQgb3IgcmVw ZWF0aW5nIHRoZW0gZm9yIGV2ZXJ5DQo+IHVzZS4NCk9rLCB3aWxsIGZpeC4NCiANCj4gPiArdW5s b2NrOg0KPiA+ICsJbXV0ZXhfdW5sb2NrKCZpMmNkLT5tdXRleCk7DQo+ID4gKwlyZXR1cm4gc3Rh dHVzOw0KPiANCj4gSGVyZSB5b3UgcmV0dXJuIHN0YXR1cywgd2hpY2ggc2VlbXMgdG8gYmUgemVy byB3aGVuIGV2ZXJ5dGhpbmcgaXMgZmluZS4NCj4gVGhhdCBpcyBpbmNvcnJlY3QgZm9yIHN1cmU7 IHlvdSBzaG91bGQgcmV0dXJuIG51bSBvbiBzdWNjZXNzLg0KV2hlbiBldmVyeXRoaW5nIGlzIGZp bmUgdGhlbiBzdGF0dXMgaXMgd3JpdHRlbiB3aXRoIG51bWJlciBvZiBtZXNzYWdlcw0KImkiLiBQ bGVhc2Ugc2VlIGFib3ZlLg0KDQpUaGFua3MNCkFqYXkNCg0KLS0NCm52cHVibGljDQotLQ0KIA0K PiBDaGVlcnMsDQo+IFBldGVyDQo+IA0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdTMyIGdw dV9pMmNfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApIHsNCj4gPiArCXJl dHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJVU19FTVVMOyB9DQo+ID4gKw0KPiA+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gZ3B1X2kyY19hbGdvcml0aG0gPSB7DQo+ ID4gKwkubWFzdGVyX3hmZXIJPSBncHVfaTJjX21hc3Rlcl94ZmVyLA0KPiA+ICsJLmZ1bmN0aW9u YWxpdHkJPSBncHVfaTJjX2Z1bmN0aW9uYWxpdHksDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKg0K PiA+ICsgKiBUaGlzIGRyaXZlciBpcyBmb3IgTnZpZGlhIEdQVSBjYXJkcyB3aXRoIFVTQiBUeXBl LUMgaW50ZXJmYWNlLg0KPiA+ICsgKiBXZSB3YW50IHRvIGlkZW50aWZ5IHRoZSBjYXJkcyB1c2lu ZyB2ZW5kb3IgSUQgYW5kIGNsYXNzIGNvZGUgb25seQ0KPiA+ICsgKiB0byBhdm9pZCBkZXBlbmRl bmN5IG9mIGFkZGluZyBwcm9kdWN0IGlkIGZvciBhbnkgbmV3IGNhcmQgd2hpY2gNCj4gPiArICog cmVxdWlyZXMgdGhpcyBkcml2ZXIuDQo+ID4gKyAqIEN1cnJlbnRseSB0aGVyZSBpcyBubyBjbGFz cyBjb2RlIGRlZmluZWQgZm9yIFVDU0kgZGV2aWNlIG92ZXIgUENJDQo+ID4gKyAqIHNvIHVzaW5n IFVOS05PV04gY2xhc3MgZm9yIG5vdyBhbmQgaXQgd2lsbCBiZSB1cGRhdGVkIHdoZW4gVUNTSQ0K PiA+ICsgKiBvdmVyIFBDSSBnZXRzIGEgY2xhc3MgY29kZS4NCj4gPiArICogVGhlcmUgaXMgbm8g b3RoZXIgTlZJRElBIGNhcmRzIHdpdGggVU5LTk9XTiBjbGFzcyBjb2RlLiBFdmVuIGlmDQo+ID4g K3RoZQ0KPiA+ICsgKiBkcml2ZXIgZ2V0cyBsb2FkZWQgZm9yIGFuIHVuZGVzaXJlZCBjYXJkIHRo ZW4gZXZlbnR1YWxseQ0KPiA+ICtpMmNfcmVhZCgpDQo+ID4gKyAqIChpbml0aWF0ZWQgZnJvbSBV Q1NJIGkyY19jbGllbnQpIHdpbGwgdGltZW91dCBvciBVQ1NJIGNvbW1hbmRzDQo+ID4gK3dpbGwN Cj4gPiArICogdGltZW91dC4NCj4gPiArICovDQo+ID4gKyNkZWZpbmUgUENJX0NMQVNTX1NFUklB TF9VTktOT1dOCTB4MGM4MA0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQg Z3B1X2kyY19pZHNbXSA9IHsNCj4gPiArCXsgUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9BTllf SUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsDQo+ID4gKwkJUENJX0NMQVNTX1NFUklBTF9VTktO T1dOIDw8IDgsIDB4ZmZmZmZmMDB9LA0KPiA+ICsJeyB9DQo+ID4gK307DQo+ID4gK01PRFVMRV9E RVZJQ0VfVEFCTEUocGNpLCBncHVfaTJjX2lkcyk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGdw dV9wb3B1bGF0ZV9jbGllbnQoc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkLCBpbnQgaXJxKSB7DQo+ ID4gKwlzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGdwdV9jY2d4X3Vjc2kgPSB7DQo+ID4g KwkJSTJDX0JPQVJEX0lORk8oImNjZ3gtdWNzaSIsIDB4OCksDQo+ID4gKwl9Ow0KPiA+ICsNCj4g PiArCWdwdV9jY2d4X3Vjc2kuaXJxID0gaXJxOw0KPiA+ICsJaTJjZC0+Y2xpZW50ID0gaTJjX25l d19kZXZpY2UoJmkyY2QtPmFkYXB0ZXIsICZncHVfY2NneF91Y3NpKTsNCj4gPiArCWlmICghaTJj ZC0+Y2xpZW50KSB7DQo+ID4gKwkJZGV2X2VycihpMmNkLT5kZXYsICJpMmNfbmV3X2RldmljZSBm YWlsZWRcbiIpOw0KPiA+ICsJCXJldHVybiAtRU5PREVWOw0KPiA+ICsJfQ0KPiA+ICsJcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZ3B1X2kyY19wcm9iZShzdHJ1Y3Qg cGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0DQo+ID4gK3BjaV9kZXZpY2VfaWQgKmlkKSB7DQo+ ID4gKwlzdHJ1Y3QgZ3B1X2kyY19kZXYgKmkyY2Q7DQo+ID4gKwlpbnQgc3RhdHVzOw0KPiA+ICsN Cj4gPiArCWkyY2QgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBncHVf aTJjX2RldiksDQo+IEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFpMmNkKQ0KPiA+ICsJCXJldHVy biAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCWkyY2QtPmRldiA9ICZwZGV2LT5kZXY7DQo+ID4gKwlk ZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgaTJjZCk7DQo+ID4gKw0KPiA+ICsJc3RhdHVzID0g cGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOw0KPiA+ICsJaWYgKHN0YXR1cyA8IDApIHsNCj4gPiAr CQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2ltX2VuYWJsZV9kZXZpY2UgZmFpbGVkICVkXG4iLA0K PiBzdGF0dXMpOw0KPiA+ICsJCXJldHVybiBzdGF0dXM7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ cGNpX3NldF9tYXN0ZXIocGRldik7DQo+ID4gKw0KPiA+ICsJaTJjZC0+cmVncyA9IHBjaW1faW9t YXAocGRldiwgMCwgMCk7DQo+ID4gKwlpZiAoIWkyY2QtPnJlZ3MpIHsNCj4gPiArCQlkZXZfZXJy KCZwZGV2LT5kZXYsICJwY2ltX2lvbWFwIGZhaWxlZFxuIik7DQo+ID4gKwkJcmV0dXJuIC1FTk9N RU07DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJc3RhdHVzID0gcGNpX2FsbG9jX2lycV92ZWN0b3Jz KHBkZXYsIDEsIDEsIFBDSV9JUlFfTVNJKTsNCj4gPiArCWlmIChzdGF0dXMgPCAwKSB7DQo+ID4g KwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNpX2FsbG9jX2lycV92ZWN0b3JzIGVyciAlZFxuIiwN Cj4gc3RhdHVzKTsNCj4gPiArCQlyZXR1cm4gc3RhdHVzOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CWkyY2QtPmRvX3N0YXJ0ID0gdHJ1ZTsNCj4gPiArCW11dGV4X2luaXQoJmkyY2QtPm11dGV4KTsN Cj4gPiArCWVuYWJsZV9pMmNfYnVzKGkyY2QpOw0KPiA+ICsNCj4gPiArCWkyY19zZXRfYWRhcGRh dGEoJmkyY2QtPmFkYXB0ZXIsIGkyY2QpOw0KPiA+ICsJaTJjZC0+YWRhcHRlci5vd25lciA9IFRI SVNfTU9EVUxFOw0KPiA+ICsJc3RybGNweShpMmNkLT5hZGFwdGVyLm5hbWUsICJOVklESUEgR1BV IEkyQyBhZGFwdGVyIiwNCj4gPiArCQlzaXplb2YoaTJjZC0+YWRhcHRlci5uYW1lKSk7DQo+ID4g KwlpMmNkLT5hZGFwdGVyLmFsZ28gPSAmZ3B1X2kyY19hbGdvcml0aG07DQo+ID4gKwlpMmNkLT5h ZGFwdGVyLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2Ow0KPiA+ICsJc3RhdHVzID0gaTJjX2FkZF9h ZGFwdGVyKCZpMmNkLT5hZGFwdGVyKTsNCj4gPiArCWlmIChzdGF0dXMgPCAwKSB7DQo+ID4gKwkJ ZGV2X2VycigmcGRldi0+ZGV2LCAiaTJjX2FkZF9hZGFwdGVyIGZhaWxlZCAlZFxuIiwgc3RhdHVz KTsNCj4gPiArCQlnb3RvIGZyZWVfaXJxX3ZlY3RvcnM7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ c3RhdHVzID0gZ3B1X3BvcHVsYXRlX2NsaWVudChpMmNkLCBwZGV2LT5pcnEpOw0KPiA+ICsJaWYg KHN0YXR1cyA8IDApIHsNCj4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJncHVfcG9wdWxhdGVf Y2xpZW50IGZhaWxlZCAlZFxuIiwNCj4gc3RhdHVzKTsNCj4gPiArCQlnb3RvIGRlbF9hZGFwdGVy Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICsNCj4gPiArZGVsX2FkYXB0 ZXI6DQo+ID4gKwlpMmNfZGVsX2FkYXB0ZXIoJmkyY2QtPmFkYXB0ZXIpOw0KPiA+ICtmcmVlX2ly cV92ZWN0b3JzOg0KPiA+ICsJcGNpX2ZyZWVfaXJxX3ZlY3RvcnMocGRldik7DQo+ID4gKwlyZXR1 cm4gc3RhdHVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBncHVfaTJjX3JlbW92 ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikgew0KPiA+ICsJc3RydWN0IGdwdV9pMmNfZGV2ICppMmNk ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOw0KPiA+ICsNCj4gPiArCWkyY19kZWxfYWRh cHRlcigmaTJjZC0+YWRhcHRlcik7DQo+ID4gKwlwY2lfZnJlZV9pcnFfdmVjdG9ycyhwZGV2KTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBncHVfaTJjX3Jlc3VtZShzdHJ1Y3QgZGV2 aWNlICpkZXYpIHsNCj4gPiArCXN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOw0KPiA+ICsNCj4gPiArCWVuYWJsZV9pMmNfYnVzKGkyY2QpOw0KPiA+ICsJcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZ3B1X2kyY19pZGxlKHN0cnVj dCBkZXZpY2UgKmRldikgew0KPiA+ICsJc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkID0gZGV2X2dl dF9kcnZkYXRhKGRldik7DQo+ID4gKw0KPiA+ICsJaWYgKCFtdXRleF90cnlsb2NrKCZpMmNkLT5t dXRleCkpIHsNCj4gPiArCQlkZXZfaW5mbyhkZXYsICItRUJVU1lcbiIpOw0KPiA+ICsJCXJldHVy biAtRUJVU1k7DQo+ID4gKwl9DQo+ID4gKwltdXRleF91bmxvY2soJmkyY2QtPm11dGV4KTsNCj4g PiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArVU5JVkVSU0FMX0RFVl9Q TV9PUFMoZ3B1X2kyY19kcml2ZXJfcG0sIE5VTEwsIGdwdV9pMmNfcmVzdW1lLA0KPiA+ICtncHVf aTJjX2lkbGUpOw0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGdwdV9pMmNf ZHJpdmVyID0gew0KPiA+ICsJLm5hbWUJCT0gIm52aWRpYS1ncHUiLA0KPiA+ICsJLmlkX3RhYmxl CT0gZ3B1X2kyY19pZHMsDQo+ID4gKwkucHJvYmUJCT0gZ3B1X2kyY19wcm9iZSwNCj4gPiArCS5y ZW1vdmUJCT0gZ3B1X2kyY19yZW1vdmUsDQo+ID4gKwkuZHJpdmVyCQk9IHsNCj4gPiArCQkucG0J PSAmZ3B1X2kyY19kcml2ZXJfcG0sDQo+ID4gKwl9LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArbW9k dWxlX3BjaV9kcml2ZXIoZ3B1X2kyY19kcml2ZXIpOw0KPiA+ICsNCj4gPiArTU9EVUxFX0FVVEhP UigiQWpheSBHdXB0YSA8YWpheWdAbnZpZGlhLmNvbT4iKTsNCj4gPiArTU9EVUxFX0RFU0NSSVBU SU9OKCJOdmlkaWEgR1BVIEkyQyBjb250cm9sbGVyIERyaXZlciIpOw0KPiA+ICtNT0RVTEVfTElD RU5TRSgiR1BMIHYyIik7DQo+ID4K