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: Heikki Krogerus Message-Id: <20180906112626.GC25121@kuha.fi.intel.com> Date: Thu, 6 Sep 2018 14:26:26 +0300 To: Ajay Gupta Cc: wsa@the-dreams.de, linux-usb@vger.kernel.org, linux-i2c@vger.kernel.org List-ID: T24gV2VkLCBTZXAgMDUsIDIwMTggYXQgMDM6MjA6MjFQTSAtMDcwMCwgQWpheSBHdXB0YSB3cm90 ZToKPiBMYXRlc3QgTlZJRElBIEdQVSBjYXJkIGhhcyBVU0IgVHlwZS1DIGludGVyZmFjZS4gVGhl cmUgaXMgYQo+IFR5cGUtQyBjb250cm9sbGVyIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZCBvdmVyIEky Qy4KPiAKPiBUaGlzIGRyaXZlciBhZGRzIEkyQyBidXMgZHJpdmVyIHRvIGNvbW11bmljYXRlIHdp dGggVHlwZS1DIGNvbnRyb2xsZXIuCj4gSTJDIGNsaWVudCBkcml2ZXIgd2lsbCBiZSBwYXJ0IG9m IFVTQiBUeXBlLUMgVUNTSSBkcml2ZXIuCj4gCj4gU2lnbmVkLW9mZi1ieTogQWpheSBHdXB0YSA8 YWpheWdAbnZpZGlhLmNvbT4KCkZXSVc6CgpSZXZpZXdlZC1ieTogSGVpa2tpIEtyb2dlcnVzIDxo ZWlra2kua3JvZ2VydXNAbGludXguaW50ZWwuY29tPgoKPiAtLS0KPiBDaGFuZ2VzIGZyb20gdjEg LT4gdjIKPiAJTm9uZQo+IENoYW5nZXMgZnJvbSB2MiAtPiB2Mwo+IAlGaXhlZCByZXZpZXcgY29t bWVudHMgZnJvbSBBbmR5IGFuZCBUaGllcnJ5Cj4gCVJlbmFtZSBpMmMtZ3B1LmMgLT4gaTJjLW52 aWRpYS1ncHUuYwo+IENoYW5nZXMgZnJvbSB2MyAtPiB2NAo+IAlGaXhlZCByZXZpZXcgY29tbWVu dHMgZnJvbSBBbmR5Cj4gQ2hhbmdlcyBmcm9tIHY0IC0+IHY1Cj4gCUZpeGVkIHJldmlldyBjb21t ZW50cyBmcm9tIEFuZHkKPiBDaGFuZ2VzIGZyb20gdjUgLT4gdjYKPiAJTm9uZSAKPiAKPiAgRG9j dW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1udmlkaWEtZ3B1IHwgIDE4ICsrCj4gIE1BSU5UQUlO RVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNyArCj4gIGRyaXZlcnMvaTJjL2J1 c3Nlcy9LY29uZmlnICAgICAgICAgICAgICB8ICAgOSArCj4gIGRyaXZlcnMvaTJjL2J1c3Nlcy9N YWtlZmlsZSAgICAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbnZp ZGlhLWdwdS5jICAgICB8IDQwNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICA1 IGZpbGVzIGNoYW5nZWQsIDQ0MCBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBE b2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdS5jCj4gCj4gZGlmZiAtLWdpdCBh L0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdSBiL0RvY3VtZW50YXRpb24v aTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMC4uMzE4ODRkMgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9Eb2N1bWVudGF0aW9uL2ky Yy9idXNzZXMvaTJjLW52aWRpYS1ncHUKPiBAQCAtMCwwICsxLDE4IEBACj4gK0tlcm5lbCBkcml2 ZXIgaTJjLW52aWRpYS1ncHUKPiArCj4gK0RhdGFzaGVldDogbm90IHB1YmxpY2x5IGF2YWlsYWJs ZS4KPiArCj4gK0F1dGhvcnM6Cj4gKwlBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPgo+ICsK PiArRGVzY3JpcHRpb24KPiArLS0tLS0tLS0tLS0KPiArCj4gK2kyYy1udmlkaWEtZ3B1IGlzIGEg ZHJpdmVyIGZvciBJMkMgY29udHJvbGxlciBpbmNsdWRlZCBpbiBOVklESUEgVHVyaW5nCj4gK2Fu ZCBsYXRlciBHUFVzIGFuZCBpdCBpcyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggVHlwZS1DIGNv bnRyb2xsZXIgb24gR1BVcy4KPiArCj4gK0lmIHlvdXIgJ2xzcGNpIC12JyBsaXN0aW5nIHNob3dz IHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcsCj4gKwo+ICswMTowMC4zIFNlcmlhbCBidXMg Y29udHJvbGxlciBbMGM4MF06IE5WSURJQSBDb3Jwb3JhdGlvbiBEZXZpY2UgMWFkOSAocmV2IGEx KQo+ICsKPiArdGhlbiB0aGlzIGRyaXZlciBzaG91bGQgc3VwcG9ydCB0aGUgSTJDIGNvbnRyb2xs ZXIgb2YgeW91ciBHUFUuCj4gZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMK PiBpbmRleCA5YWQwNTJhLi4yZDFjNWExIDEwMDY0NAo+IC0tLSBhL01BSU5UQUlORVJTCj4gKysr IGIvTUFJTlRBSU5FUlMKPiBAQCAtNjc5Nyw2ICs2Nzk3LDEzIEBAIEw6CWxpbnV4LWFjcGlAdmdl ci5rZXJuZWwub3JnCj4gIFM6CU1haW50YWluZWQKPiAgRjoJZHJpdmVycy9pMmMvaTJjLWNvcmUt YWNwaS5jCj4gIAo+ICtJMkMgQ09OVFJPTExFUiBEUklWRVIgRk9SIE5WSURJQSBHUFUKPiArTToJ QWpheSBHdXB0YSA8YWpheWdAbnZpZGlhLmNvbT4KPiArTDoJbGludXgtaTJjQHZnZXIua2VybmVs Lm9yZwo+ICtTOglNYWludGFpbmVkCj4gK0Y6CURvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMt bnZpZGlhLWdwdQo+ICtGOglkcml2ZXJzL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUuYwo+ICsK PiAgSTJDIE1VWEVTCj4gIE06CVBldGVyIFJvc2luIDxwZWRhQGF4ZW50aWEuc2U+Cj4gIEw6CWxp bnV4LWkyY0B2Z2VyLmtlcm5lbC5vcmcKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2Vz L0tjb25maWcgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwo+IGluZGV4IDQ1MWQ0YWUuLmVl ZDgyN2IgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKPiArKysgYi9k cml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwo+IEBAIC0yMjQsNiArMjI0LDE1IEBAIGNvbmZpZyBJ MkNfTkZPUkNFMl9TNDk4NQo+ICAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBh IG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCj4gIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1uZm9y Y2UyLXM0OTg1Lgo+ICAKPiArY29uZmlnIEkyQ19OVklESUFfR1BVCj4gKwl0cmlzdGF0ZSAiTlZJ RElBIEdQVSBJMkMgY29udHJvbGxlciIKPiArCWRlcGVuZHMgb24gUENJCj4gKwloZWxwCj4gKwkg IElmIHlvdSBzYXkgeWVzIHRvIHRoaXMgb3B0aW9uLCBzdXBwb3J0IHdpbGwgYmUgaW5jbHVkZWQg Zm9yIHRoZQo+ICsJICBOVklESUEgR1BVIEkyQyBjb250cm9sbGVyIHdoaWNoIGlzIHVzZWQgdG8g Y29tbXVuaWNhdGUgd2l0aCB0aGUgR1BVJ3MKPiArCSAgVHlwZS1DIGNvbnRyb2xsZXIuIFRoaXMg ZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlIGNhbGxlZAo+ICsJICBpMmMtbnZp ZGlhLWdwdS4KPiArCj4gIGNvbmZpZyBJMkNfU0lTNTU5NQo+ICAJdHJpc3RhdGUgIlNpUyA1NTk1 Igo+ICAJZGVwZW5kcyBvbiBQQ0kKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL01h a2VmaWxlIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCj4gaW5kZXggMThiMjZhZi4uZDQ5 OTgxMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKPiArKysgYi9k cml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKPiBAQCAtMTQwLDUgKzE0MCw2IEBAIG9iai0kKENP TkZJR19JMkNfU0lCWVRFKQkrPSBpMmMtc2lieXRlLm8KPiAgb2JqLSQoQ09ORklHX0kyQ19YR0VO RV9TTElNUFJPKSArPSBpMmMteGdlbmUtc2xpbXByby5vCj4gIG9iai0kKENPTkZJR19TQ3gyMDBf QUNCKQkrPSBzY3gyMDBfYWNiLm8KPiAgb2JqLSQoQ09ORklHX0kyQ19GU0kpCQkrPSBpMmMtZnNp Lm8KPiArb2JqLSQoQ09ORklHX0kyQ19OVklESUFfR1BVKQkrPSBpMmMtbnZpZGlhLWdwdS5vCj4g IAo+ICBjY2ZsYWdzLSQoQ09ORklHX0kyQ19ERUJVR19CVVMpIDo9IC1EREVCVUcKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1udmlkaWEtZ3B1LmMgYi9kcml2ZXJzL2kyYy9i dXNzZXMvaTJjLW52aWRpYS1ncHUuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMC4uMmNlNjcwNgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2kyYy9idXNzZXMv aTJjLW52aWRpYS1ncHUuYwo+IEBAIC0wLDAgKzEsNDA1IEBACj4gKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIE52aWRpYSBHUFUgSTJDIGNvbnRyb2xsZXIg RHJpdmVyCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxOCBOVklESUEgQ29ycG9yYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqIEF1dGhvcjogQWpheSBHdXB0YSA8YWpheWdAbnZp ZGlhLmNvbT4KPiArICovCj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsjaW5jbHVkZSA8 bGludXgvaTJjLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiArI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BtLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Cj4gKwo+ICsjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5o Pgo+ICsKPiArLyogSTJDIGRlZmluaXRpb25zICovCj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMCQkJ CTB4MDAKPiArI2RlZmluZSBJMkNfTVNUX0NOVExfR0VOX1NUQVJUCQkJQklUKDApCj4gKyNkZWZp bmUgSTJDX01TVF9DTlRMX0dFTl9TVE9QCQkJQklUKDEpCj4gKyNkZWZpbmUgSTJDX01TVF9DTlRM X0NNRF9OT05FCQkJKDAgPDwgMikKPiArI2RlZmluZSBJMkNfTVNUX0NOVExfQ01EX1JFQUQJCQko MSA8PCAyKQo+ICsjZGVmaW5lIEkyQ19NU1RfQ05UTF9DTURfV1JJVEUJCQkoMiA8PCAyKQo+ICsj ZGVmaW5lIEkyQ19NU1RfQ05UTF9HRU5fUkFCCQkJQklUKDQpCj4gKyNkZWZpbmUgSTJDX01TVF9D TlRMX0JVUlNUX1NJWkVfU0hJRlQJCTYKPiArI2RlZmluZSBJMkNfTVNUX0NOVExfR0VOX05BQ0sJ CQlCSVQoMjgpCj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX1NUQVRVUwkJCUdFTk1BU0soMzAsIDI5 KQo+ICsjZGVmaW5lIEkyQ19NU1RfQ05UTF9TVEFUVVNfT0tBWQkJKDAgPDwgMjkpCj4gKyNkZWZp bmUgSTJDX01TVF9DTlRMX1NUQVRVU19OT19BQ0sJCSgxIDw8IDI5KQo+ICsjZGVmaW5lIEkyQ19N U1RfQ05UTF9TVEFUVVNfVElNRU9VVAkJKDIgPDwgMjkpCj4gKyNkZWZpbmUgSTJDX01TVF9DTlRM X1NUQVRVU19CVVNfQlVTWQkJKDMgPDwgMjkpCj4gKyNkZWZpbmUgSTJDX01TVF9DTlRMX0NZQ0xF X1RSSUdHRVIJCUJJVCgzMSkKPiArCj4gKyNkZWZpbmUgSTJDX01TVF9BRERSCQkJCTB4MDQKPiAr I2RlZmluZSBJMkNfTVNUX0FERFJfREFCCQkJMAo+ICsKPiArI2RlZmluZSBJMkNfTVNUX0kyQzBf VElNSU5HCQkJCTB4MDgKPiArI2RlZmluZSBJMkNfTVNUX0kyQzBfVElNSU5HX1NDTF9QRVJJT0Rf MTAwS0haCQkweDEwZQo+ICsjZGVmaW5lIEkyQ19NU1RfSTJDMF9USU1JTkdfVElNRU9VVF9DTEtf Q05UCQkxNgo+ICsjZGVmaW5lIEkyQ19NU1RfSTJDMF9USU1JTkdfVElNRU9VVF9DTEtfQ05UX01B WAkJMjU1Cj4gKyNkZWZpbmUgSTJDX01TVF9JMkMwX1RJTUlOR19USU1FT1VUX0NIRUNLCQlCSVQo MjQpCj4gKwo+ICsjZGVmaW5lIEkyQ19NU1RfREFUQQkJCQkJMHgwYwo+ICsKPiArI2RlZmluZSBJ MkNfTVNUX0hZQlJJRF9QQURDVEwJCQkJMHgyMAo+ICsjZGVmaW5lIEkyQ19NU1RfSFlCUklEX1BB RENUTF9NT0RFX0kyQwkJCUJJVCgwKQo+ICsjZGVmaW5lIEkyQ19NU1RfSFlCUklEX1BBRENUTF9J MkNfU0NMX0lOUFVUX1JDVgkJQklUKDE0KQo+ICsjZGVmaW5lIEkyQ19NU1RfSFlCUklEX1BBRENU TF9JMkNfU0RBX0lOUFVUX1JDVgkJQklUKDE1KQo+ICsKPiArc3RydWN0IGdwdV9pMmNfZGV2IHsK PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCXZvaWQgX19pb21lbSAqcmVnczsKPiArCXN0cnVj dCBpMmNfYWRhcHRlciBhZGFwdGVyOwo+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKPiAr CXN0cnVjdCBtdXRleCBtdXRleDsJLyogdG8gc3luYyByZWFkL3dyaXRlICovCj4gKwlib29sIGRv X3N0YXJ0Owo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgZW5hYmxlX2kyY19idXMoc3RydWN0IGdw dV9pMmNfZGV2ICppMmNkKQo+ICt7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCS8qIGVuYWJsZSBJMkMg Ki8KPiArCXZhbCA9IHJlYWRsKGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0hZQlJJRF9QQURDVEwpOwo+ ICsJdmFsIHw9IEkyQ19NU1RfSFlCUklEX1BBRENUTF9NT0RFX0kyQyB8Cj4gKwkJSTJDX01TVF9I WUJSSURfUEFEQ1RMX0kyQ19TQ0xfSU5QVVRfUkNWIHwKPiArCQlJMkNfTVNUX0hZQlJJRF9QQURD VExfSTJDX1NEQV9JTlBVVF9SQ1Y7Cj4gKwl3cml0ZWwodmFsLCBpMmNkLT5yZWdzICsgSTJDX01T VF9IWUJSSURfUEFEQ1RMKTsKPiArCj4gKwkvKiBlbmFibGUgMTAwS0haIG1vZGUgKi8KPiArCXZh bCA9IEkyQ19NU1RfSTJDMF9USU1JTkdfU0NMX1BFUklPRF8xMDBLSFo7Cj4gKwl2YWwgfD0gKEky Q19NU1RfSTJDMF9USU1JTkdfVElNRU9VVF9DTEtfQ05UX01BWAo+ICsJICAgIDw8IEkyQ19NU1Rf STJDMF9USU1JTkdfVElNRU9VVF9DTEtfQ05UKTsKPiArCXZhbCB8PSBJMkNfTVNUX0kyQzBfVElN SU5HX1RJTUVPVVRfQ0hFQ0s7Cj4gKwl3cml0ZWwodmFsLCBpMmNkLT5yZWdzICsgSTJDX01TVF9J MkMwX1RJTUlORyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaTJjX2NoZWNrX3N0YXR1cyhzdHJ1 Y3QgZ3B1X2kyY19kZXYgKmkyY2QpCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgdGFyZ2V0ID0gamlm ZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCWRvIHsK PiArCQl2YWwgPSByZWFkbChpMmNkLT5yZWdzICsgSTJDX01TVF9DTlRMKTsKPiArCQlpZiAoISh2 YWwgJiBJMkNfTVNUX0NOVExfQ1lDTEVfVFJJR0dFUikpCj4gKwkJCWJyZWFrOwo+ICsJCWlmICgo dmFsICYgSTJDX01TVF9DTlRMX1NUQVRVUykgIT0KPiArCQkJCUkyQ19NU1RfQ05UTF9TVEFUVVNf QlVTX0JVU1kpCj4gKwkJCWJyZWFrOwo+ICsJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKPiAr CX0gd2hpbGUgKHRpbWVfaXNfYWZ0ZXJfamlmZmllcyh0YXJnZXQpKTsKPiArCWlmICh0aW1lX2lz X2JlZm9yZV9qaWZmaWVzKHRhcmdldCkpCj4gKwkJcmV0dXJuIC1FSU87Cj4gKwo+ICsJdmFsID0g cmVhZGwoaTJjZC0+cmVncyArIEkyQ19NU1RfQ05UTCk7Cj4gKwlzd2l0Y2ggKHZhbCAmIEkyQ19N U1RfQ05UTF9TVEFUVVMpIHsKPiArCWNhc2UgSTJDX01TVF9DTlRMX1NUQVRVU19PS0FZOgo+ICsJ CXJldHVybiAwOwo+ICsJY2FzZSBJMkNfTVNUX0NOVExfU1RBVFVTX05PX0FDSzoKPiArCQlyZXR1 cm4gLUVJTzsKPiArCWNhc2UgSTJDX01TVF9DTlRMX1NUQVRVU19USU1FT1VUOgo+ICsJCXJldHVy biAtRVRJTUU7Cj4gKwljYXNlIEkyQ19NU1RfQ05UTF9TVEFUVVNfQlVTX0JVU1k6Cj4gKwkJcmV0 dXJuIC1FQlVTWTsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgaTJjX3JlYWQoc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkLCB1OCAqZGF0YSwg dTE2IGxlbikKPiArewo+ICsJaW50IHN0YXR1czsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJdmFsID0g STJDX01TVF9DTlRMX0dFTl9TVEFSVCB8IEkyQ19NU1RfQ05UTF9HRU5fU1RPUCB8Cj4gKwkJSTJD X01TVF9DTlRMX0NNRF9SRUFEIHwgKGxlbiA8PCBJMkNfTVNUX0NOVExfQlVSU1RfU0laRV9TSElG VCkgfAo+ICsJCUkyQ19NU1RfQ05UTF9DWUNMRV9UUklHR0VSIHwgSTJDX01TVF9DTlRMX0dFTl9O QUNLOwo+ICsJdmFsICY9IH5JMkNfTVNUX0NOVExfR0VOX1JBQjsKPiArCXdyaXRlbCh2YWwsIGky Y2QtPnJlZ3MgKyBJMkNfTVNUX0NOVEwpOwo+ICsKPiArCXN0YXR1cyA9IGkyY19jaGVja19zdGF0 dXMoaTJjZCk7Cj4gKwlpZiAoc3RhdHVzIDwgMCkKPiArCQlyZXR1cm4gc3RhdHVzOwo+ICsKPiAr CXZhbCA9IHJlYWRsKGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0RBVEEpOwo+ICsJc3dpdGNoIChsZW4p IHsKPiArCWNhc2UgMToKPiArCQlkYXRhWzBdID0gdmFsOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSAy Ogo+ICsJCXB1dF91bmFsaWduZWRfYmUxNih2YWwsIGRhdGEpOwo+ICsJCWJyZWFrOwo+ICsJY2Fz ZSAzOgo+ICsJCXB1dF91bmFsaWduZWRfYmUxNih2YWwgPj4gOCwgZGF0YSk7Cj4gKwkJZGF0YVsy XSA9IHZhbDsKPiArCQlicmVhazsKPiArCWNhc2UgNDoKPiArCQlwdXRfdW5hbGlnbmVkX2JlMzIo dmFsLCBkYXRhKTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4g KwlyZXR1cm4gc3RhdHVzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGkyY19zdGFydChzdHJ1Y3Qg Z3B1X2kyY19kZXYgKmkyY2QsIHUxNiBhZGRyKQo+ICt7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCXZh bCA9IGFkZHIgPDwgSTJDX01TVF9BRERSX0RBQjsKPiArCXdyaXRlbCh2YWwsIGkyY2QtPnJlZ3Mg KyBJMkNfTVNUX0FERFIpOwo+ICsKPiArCXZhbCA9IEkyQ19NU1RfQ05UTF9HRU5fU1RBUlQgfCBJ MkNfTVNUX0NOVExfQ01EX05PTkUgfAo+ICsJCUkyQ19NU1RfQ05UTF9HRU5fTkFDSzsKPiArCXZh bCAmPSB+KEkyQ19NU1RfQ05UTF9HRU5fU1RPUCB8IEkyQ19NU1RfQ05UTF9HRU5fUkFCKTsKPiAr CXdyaXRlbCh2YWwsIGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0NOVEwpOwo+ICsKPiArCXJldHVybiBp MmNfY2hlY2tfc3RhdHVzKGkyY2QpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGkyY19zdG9wKHN0 cnVjdCBncHVfaTJjX2RldiAqaTJjZCkKPiArewo+ICsJdTMyIHZhbDsKPiArCj4gKwl2YWwgPSBJ MkNfTVNUX0NOVExfR0VOX1NUT1AgfCBJMkNfTVNUX0NOVExfQ01EX05PTkUgfAo+ICsJCUkyQ19N U1RfQ05UTF9HRU5fTkFDSzsKPiArCXZhbCAmPSB+KEkyQ19NU1RfQ05UTF9HRU5fU1RBUlQgfCBJ MkNfTVNUX0NOVExfR0VOX1JBQik7Cj4gKwl3cml0ZWwodmFsLCBpMmNkLT5yZWdzICsgSTJDX01T VF9DTlRMKTsKPiArCj4gKwlyZXR1cm4gaTJjX2NoZWNrX3N0YXR1cyhpMmNkKTsKPiArfQo+ICsK PiArc3RhdGljIGludCBpMmNfd3JpdGUoc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkLCB1OCBkYXRh KQo+ICt7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCXdyaXRlbChkYXRhLCBpMmNkLT5yZWdzICsgSTJD X01TVF9EQVRBKTsKPiArCj4gKwl2YWwgPSBJMkNfTVNUX0NOVExfQ01EX1dSSVRFIHwgKDEgPDwg STJDX01TVF9DTlRMX0JVUlNUX1NJWkVfU0hJRlQpIHwKPiArCQlJMkNfTVNUX0NOVExfR0VOX05B Q0s7Cj4gKwl2YWwgJj0gfihJMkNfTVNUX0NOVExfR0VOX1NUQVJUIHwgSTJDX01TVF9DTlRMX0dF Tl9TVE9QIHwKPiArCQkgSTJDX01TVF9DTlRMX0dFTl9SQUIpOwo+ICsJd3JpdGVsKHZhbCwgaTJj ZC0+cmVncyArIEkyQ19NU1RfQ05UTCk7Cj4gKwo+ICsJcmV0dXJuIGkyY19jaGVja19zdGF0dXMo aTJjZCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZ3B1X2kyY19tYXN0ZXJfeGZlcihzdHJ1Y3Qg aTJjX2FkYXB0ZXIgKmFkYXAsCj4gKwkJCSAgICAgICBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50 IG51bSkKPiArewo+ICsJc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkID0gaTJjX2dldF9hZGFwZGF0 YShhZGFwKTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyY2QtPmRldjsKPiArCWludCBzdGF0 dXM7Cj4gKwlpbnQgaSwgajsKPiArCj4gKwltdXRleF9sb2NrKCZpMmNkLT5tdXRleCk7Cj4gKwlm b3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKPiArCQlpZiAobXNnc1tpXS5mbGFncyAmIEkyQ19N X1JEKSB7Cj4gKwkJCXN0YXR1cyA9IGkyY19yZWFkKGkyY2QsIG1zZ3NbaV0uYnVmLCBtc2dzW2ld Lmxlbik7Cj4gKwkJCWlmIChzdGF0dXMgPCAwKSB7Cj4gKwkJCQlkZXZfZXJyKGRldiwgImkyY19y ZWFkIGVycm9yICV4Iiwgc3RhdHVzKTsKPiArCQkJCWdvdG8gdW5sb2NrOwo+ICsJCQl9Cj4gKwkJ CWkyY2QtPmRvX3N0YXJ0ID0gdHJ1ZTsKPiArCQl9IGVsc2UgaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJ MkNfTV9TVE9QKSB7Cj4gKwkJCXN0YXR1cyA9IGkyY19zdG9wKGkyY2QpOwo+ICsJCQlpZiAoc3Rh dHVzIDwgMCkgewo+ICsJCQkJZGV2X2VycihkZXYsICJpMmNfc3RvcCBlcnJvciAleCIsIHN0YXR1 cyk7Cj4gKwkJCQlnb3RvIHVubG9jazsKPiArCQkJfQo+ICsJCQlpMmNkLT5kb19zdGFydCA9IHRy dWU7Cj4gKwkJfSBlbHNlIHsKPiArCQkJaWYgKGkyY2QtPmRvX3N0YXJ0KSB7Cj4gKwkJCQlzdGF0 dXMgPSBpMmNfc3RhcnQoaTJjZCwgbXNnc1tpXS5hZGRyKTsKPiArCQkJCWlmIChzdGF0dXMgPCAw KSB7Cj4gKwkJCQkJZGV2X2VycihkZXYsICJpMmNfc3RhcnQgZXJyb3IgJXgiLAo+ICsJCQkJCQlz dGF0dXMpOwo+ICsJCQkJCWdvdG8gdW5sb2NrOwo+ICsJCQkJfQo+ICsJCQkJc3RhdHVzID0gaTJj X3dyaXRlKGkyY2QsIG1zZ3NbaV0uYWRkciA8PCAxKTsKPiArCQkJCWlmIChzdGF0dXMgPCAwKSB7 Cj4gKwkJCQkJZGV2X2VycihkZXYsICJpMmNfd3JpdGUgZXJyb3IgJXgiLAo+ICsJCQkJCQlzdGF0 dXMpOwo+ICsJCQkJCWdvdG8gc3RvcDsKPiArCQkJCX0KPiArCQkJCWkyY2QtPmRvX3N0YXJ0ID0g ZmFsc2U7Cj4gKwkJCX0KPiArCQkJZm9yIChqID0gMDsgaiA8IG1zZ3NbaV0ubGVuOyBqKyspIHsK PiArCQkJCXN0YXR1cyA9IGkyY193cml0ZShpMmNkLCAqKG1zZ3NbaV0uYnVmICsgaikpOwo+ICsJ CQkJaWYgKHN0YXR1cyA8IDApIHsKPiArCQkJCQlkZXZfZXJyKGRldiwgImkyY193cml0ZSBlcnJv ciAleCIsCj4gKwkJCQkJCXN0YXR1cyk7Cj4gKwkJCQkJZ290byBzdG9wOwo+ICsJCQkJfQo+ICsJ CQl9Cj4gKwkJfQo+ICsJfQo+ICsJc3RhdHVzID0gaTsKPiArCWdvdG8gdW5sb2NrOwo+ICtzdG9w Ogo+ICsJc3RhdHVzID0gaTJjX3N0b3AoaTJjZCk7Cj4gKwlpZiAoc3RhdHVzIDwgMCkKPiArCQlk ZXZfZXJyKGRldiwgImkyY19zdG9wIGVycm9yICV4Iiwgc3RhdHVzKTsKPiArdW5sb2NrOgo+ICsJ bXV0ZXhfdW5sb2NrKCZpMmNkLT5tdXRleCk7Cj4gKwlyZXR1cm4gc3RhdHVzOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdTMyIGdwdV9pMmNfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFk YXApCj4gK3sKPiArCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJVU19FTVVMOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gZ3B1X2kyY19hbGdv cml0aG0gPSB7Cj4gKwkubWFzdGVyX3hmZXIJPSBncHVfaTJjX21hc3Rlcl94ZmVyLAo+ICsJLmZ1 bmN0aW9uYWxpdHkJPSBncHVfaTJjX2Z1bmN0aW9uYWxpdHksCj4gK307Cj4gKwo+ICsvKgo+ICsg KiBUaGlzIGRyaXZlciBpcyBmb3IgTnZpZGlhIEdQVSBjYXJkcyB3aXRoIFVTQiBUeXBlLUMgaW50 ZXJmYWNlLgo+ICsgKiBXZSB3YW50IHRvIGlkZW50aWZ5IHRoZSBjYXJkcyB1c2luZyB2ZW5kb3Ig SUQgYW5kIGNsYXNzIGNvZGUgb25seQo+ICsgKiB0byBhdm9pZCBkZXBlbmRlbmN5IG9mIGFkZGlu ZyBwcm9kdWN0IGlkIGZvciBhbnkgbmV3IGNhcmQgd2hpY2gKPiArICogcmVxdWlyZXMgdGhpcyBk cml2ZXIuCj4gKyAqIEN1cnJlbnRseSB0aGVyZSBpcyBubyBjbGFzcyBjb2RlIGRlZmluZWQgZm9y IFVDU0kgZGV2aWNlIG92ZXIgUENJCj4gKyAqIHNvIHVzaW5nIFVOS05PV04gY2xhc3MgZm9yIG5v dyBhbmQgaXQgd2lsbCBiZSB1cGRhdGVkIHdoZW4gVUNTSQo+ICsgKiBvdmVyIFBDSSBnZXRzIGEg Y2xhc3MgY29kZS4KPiArICogVGhlcmUgaXMgbm8gb3RoZXIgTlZJRElBIGNhcmRzIHdpdGggVU5L Tk9XTiBjbGFzcyBjb2RlLiBFdmVuIGlmIHRoZQo+ICsgKiBkcml2ZXIgZ2V0cyBsb2FkZWQgZm9y IGFuIHVuZGVzaXJlZCBjYXJkIHRoZW4gZXZlbnR1YWxseSBpMmNfcmVhZCgpCj4gKyAqIChpbml0 aWF0ZWQgZnJvbSBVQ1NJIGkyY19jbGllbnQpIHdpbGwgdGltZW91dCBvciBVQ1NJIGNvbW1hbmRz IHdpbGwKPiArICogdGltZW91dC4KPiArICovCj4gKyNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9V TktOT1dOCTB4MGM4MAo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZ3B1X2ky Y19pZHNbXSA9IHsKPiArCXsgUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9BTllfSUQsIFBDSV9B TllfSUQsIFBDSV9BTllfSUQsCj4gKwkJUENJX0NMQVNTX1NFUklBTF9VTktOT1dOIDw8IDgsIDB4 ZmZmZmZmMDB9LAo+ICsJeyB9Cj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBncHVf aTJjX2lkcyk7Cj4gKwo+ICtzdGF0aWMgaW50IGdwdV9wb3B1bGF0ZV9jbGllbnQoc3RydWN0IGdw dV9pMmNfZGV2ICppMmNkLCBpbnQgaXJxKQo+ICt7Cj4gKwlzdGF0aWMgc3RydWN0IGkyY19ib2Fy ZF9pbmZvIGdwdV9jY2d4X3Vjc2kgPSB7Cj4gKwkJSTJDX0JPQVJEX0lORk8oImNjZ3gtdWNzaSIs IDB4OCksCj4gKwl9Owo+ICsKPiArCWdwdV9jY2d4X3Vjc2kuaXJxID0gaXJxOwo+ICsJaTJjZC0+ Y2xpZW50ID0gaTJjX25ld19kZXZpY2UoJmkyY2QtPmFkYXB0ZXIsICZncHVfY2NneF91Y3NpKTsK PiArCWlmICghaTJjZC0+Y2xpZW50KSB7Cj4gKwkJZGV2X2VycihpMmNkLT5kZXYsICJpMmNfbmV3 X2RldmljZSBmYWlsZWRcbiIpOwo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJfQo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZ3B1X2kyY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAq cGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQo+ICt7Cj4gKwlzdHJ1Y3QgZ3B1 X2kyY19kZXYgKmkyY2Q7Cj4gKwlpbnQgc3RhdHVzOwo+ICsKPiArCWkyY2QgPSBkZXZtX2t6YWxs b2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBncHVfaTJjX2RldiksIEdGUF9LRVJORUwpOwo+ ICsJaWYgKCFpMmNkKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWkyY2QtPmRldiA9ICZw ZGV2LT5kZXY7Cj4gKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgaTJjZCk7Cj4gKwo+ICsJ c3RhdHVzID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOwo+ICsJaWYgKHN0YXR1cyA8IDApIHsK PiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2ltX2VuYWJsZV9kZXZpY2UgZmFpbGVkICVkXG4i LCBzdGF0dXMpOwo+ICsJCXJldHVybiBzdGF0dXM7Cj4gKwl9Cj4gKwo+ICsJcGNpX3NldF9tYXN0 ZXIocGRldik7Cj4gKwo+ICsJaTJjZC0+cmVncyA9IHBjaW1faW9tYXAocGRldiwgMCwgMCk7Cj4g KwlpZiAoIWkyY2QtPnJlZ3MpIHsKPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2ltX2lvbWFw IGZhaWxlZFxuIik7Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwl9Cj4gKwo+ICsJc3RhdHVzID0g cGNpX2FsbG9jX2lycV92ZWN0b3JzKHBkZXYsIDEsIDEsIFBDSV9JUlFfTVNJKTsKPiArCWlmIChz dGF0dXMgPCAwKSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNpX2FsbG9jX2lycV92ZWN0 b3JzIGVyciAlZFxuIiwgc3RhdHVzKTsKPiArCQlyZXR1cm4gc3RhdHVzOwo+ICsJfQo+ICsKPiAr CWkyY2QtPmRvX3N0YXJ0ID0gdHJ1ZTsKPiArCW11dGV4X2luaXQoJmkyY2QtPm11dGV4KTsKPiAr CWVuYWJsZV9pMmNfYnVzKGkyY2QpOwo+ICsKPiArCWkyY19zZXRfYWRhcGRhdGEoJmkyY2QtPmFk YXB0ZXIsIGkyY2QpOwo+ICsJaTJjZC0+YWRhcHRlci5vd25lciA9IFRISVNfTU9EVUxFOwo+ICsJ c3RybGNweShpMmNkLT5hZGFwdGVyLm5hbWUsICJOVklESUEgR1BVIEkyQyBhZGFwdGVyIiwKPiAr CQlzaXplb2YoaTJjZC0+YWRhcHRlci5uYW1lKSk7Cj4gKwlpMmNkLT5hZGFwdGVyLmFsZ28gPSAm Z3B1X2kyY19hbGdvcml0aG07Cj4gKwlpMmNkLT5hZGFwdGVyLmRldi5wYXJlbnQgPSAmcGRldi0+ ZGV2Owo+ICsJc3RhdHVzID0gaTJjX2FkZF9hZGFwdGVyKCZpMmNkLT5hZGFwdGVyKTsKPiArCWlm IChzdGF0dXMgPCAwKSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaTJjX2FkZF9hZGFwdGVy IGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKPiArCQlnb3RvIGZyZWVfaXJxX3ZlY3RvcnM7Cj4gKwl9 Cj4gKwo+ICsJc3RhdHVzID0gZ3B1X3BvcHVsYXRlX2NsaWVudChpMmNkLCBwZGV2LT5pcnEpOwo+ ICsJaWYgKHN0YXR1cyA8IDApIHsKPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJncHVfcG9wdWxh dGVfY2xpZW50IGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKPiArCQlnb3RvIGRlbF9hZGFwdGVyOwo+ ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZGVsX2FkYXB0ZXI6Cj4gKwlpMmNfZGVsX2Fk YXB0ZXIoJmkyY2QtPmFkYXB0ZXIpOwo+ICtmcmVlX2lycV92ZWN0b3JzOgo+ICsJcGNpX2ZyZWVf aXJxX3ZlY3RvcnMocGRldik7Cj4gKwlyZXR1cm4gc3RhdHVzOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBncHVfaTJjX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKPiArewo+ICsJc3RydWN0 IGdwdV9pMmNfZGV2ICppMmNkID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwo+ICsKPiAr CWkyY19kZWxfYWRhcHRlcigmaTJjZC0+YWRhcHRlcik7Cj4gKwlwY2lfZnJlZV9pcnFfdmVjdG9y cyhwZGV2KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBncHVfaTJjX3Jlc3VtZShzdHJ1Y3QgZGV2 aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOwo+ICsKPiArCWVuYWJsZV9pMmNfYnVzKGkyY2QpOwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgZ3B1X2kyY19pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKPiAr ewo+ICsJc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4g Kwo+ICsJaWYgKCFtdXRleF90cnlsb2NrKCZpMmNkLT5tdXRleCkpIHsKPiArCQlkZXZfaW5mbyhk ZXYsICItRUJVU1lcbiIpOwo+ICsJCXJldHVybiAtRUJVU1k7Cj4gKwl9Cj4gKwltdXRleF91bmxv Y2soJmkyY2QtPm11dGV4KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArVU5JVkVSU0FM X0RFVl9QTV9PUFMoZ3B1X2kyY19kcml2ZXJfcG0sIE5VTEwsIGdwdV9pMmNfcmVzdW1lLCBncHVf aTJjX2lkbGUpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGdwdV9pMmNfZHJpdmVy ID0gewo+ICsJLm5hbWUJCT0gIm52aWRpYS1ncHUiLAo+ICsJLmlkX3RhYmxlCT0gZ3B1X2kyY19p ZHMsCj4gKwkucHJvYmUJCT0gZ3B1X2kyY19wcm9iZSwKPiArCS5yZW1vdmUJCT0gZ3B1X2kyY19y ZW1vdmUsCj4gKwkuZHJpdmVyCQk9IHsKPiArCQkucG0JPSAmZ3B1X2kyY19kcml2ZXJfcG0sCj4g Kwl9LAo+ICt9Owo+ICsKPiArbW9kdWxlX3BjaV9kcml2ZXIoZ3B1X2kyY19kcml2ZXIpOwo+ICsK PiArTU9EVUxFX0FVVEhPUigiQWpheSBHdXB0YSA8YWpheWdAbnZpZGlhLmNvbT4iKTsKPiArTU9E VUxFX0RFU0NSSVBUSU9OKCJOdmlkaWEgR1BVIEkyQyBjb250cm9sbGVyIERyaXZlciIpOwo+ICtN T0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4gLS0gCj4gMi43LjQK