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: [v15,1/2] i2c: buses: add i2c bus driver for NVIDIA GPU From: Ajay Gupta Message-Id: <20181026163659.21590-2-ajayg@nvidia.com> Date: Fri, 26 Oct 2018 09:36:58 -0700 To: wsa@the-dreams.de, heikki.krogerus@linux.intel.com, peda@axentia.se, andriy.shevchenko@linux.intel.com Cc: linux-usb@vger.kernel.org, linux-i2c@vger.kernel.org, Ajay Gupta List-ID: TGF0ZXN0IE5WSURJQSBHUFUgY2FyZCBoYXMgVVNCIFR5cGUtQyBpbnRlcmZhY2UuIFRoZXJlIGlz IGEKVHlwZS1DIGNvbnRyb2xsZXIgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkIG92ZXIgSTJDLgoKVGhp cyBkcml2ZXIgYWRkcyBJMkMgYnVzIGRyaXZlciB0byBjb21tdW5pY2F0ZSB3aXRoIFR5cGUtQyBj b250cm9sbGVyLgpJMkMgY2xpZW50IGRyaXZlciB3aWxsIGJlIHBhcnQgb2YgVVNCIFR5cGUtQyBV Q1NJIGRyaXZlci4KClNpZ25lZC1vZmYtYnk6IEFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+ Ci0tLQpDaGFuZ2VzIGZyb20gdjEgLT4gdjIKCU5vbmUKQ2hhbmdlcyBmcm9tIHYyIC0+IHYzCglG aXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBBbmR5IGFuZCBUaGllcnJ5CglSZW5hbWUgaTJjLWdw dS5jIC0+IGkyYy1udmlkaWEtZ3B1LmMKQ2hhbmdlcyBmcm9tIHYzIC0+IHY0CglGaXhlZCByZXZp ZXcgY29tbWVudHMgZnJvbSBBbmR5CkNoYW5nZXMgZnJvbSB2NCAtPiB2NQoJRml4ZWQgcmV2aWV3 IGNvbW1lbnRzIGZyb20gQW5keQpDaGFuZ2VzIGZyb20gdjUgLT4gdjYKCU5vbmUgCkNoYW5nZXMg ZnJvbSB2NiAtPiB2NyAtPiB2OAoJRml4ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gUGV0ZXIgCgkt IEFkZCBpbXBsaWNpdCBTVE9QIGZvciBsYXN0IHdyaXRlIG1lc3NhZ2UKCS0gQWRkIGkyY19hZGFw dGVyX3F1aXJrcyB3aXRoIG1heF9yZWFkX2xlbiBhbmQKCSAgSTJDX0FRX0NPTUIgZmxhZ3MKQ2hh bmdlcyBmcm9tIHY4IC0+IHY5CglGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBQZXRlcgoJLSBE cm9wIGRvX3N0YXJ0IGZsYWcKCS0gVXNlIGkyY184Yml0X2FkZHJfZnJvbV9tc2coKQpDaGFuZ2Vz IGZyb20gdjkgLT4gdjEwCglGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBQZXRlcgoJLSBEcm9w cGVkIEkyQ19GVU5DX1NNQlVTX0VNVUwKCS0gRHJvcHBlZCBsb2NhbCBtdXRleApDaGFuZ2VzIGZy b20gdjEwIC0+IHYxMQoJRml4ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gUGV0ZXIKCS0gTW92ZWQg c3RvcCBpbiBtYXN0ZXJfeGZlciBhdCBlbmQgb2YgbWVzc2FnZQoJLSBDaGFuZ2UgaTJjX3JlYWQg d2l0aG91dCBTVE9QCgktIERyb3BwZWQgSTJDX0FDX0NPTUIqIGZsYWdzCkNoYW5nZXMgZnJvbSB2 MTEgLT4gdjEyCglGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBQZXRlcgoJLSBSZW1vdmVkIGNs ZWFyaW5nIG9mIGVtcHR5IGJpdHMKCS0gRml4IG1hc3Rlcl94ZmVyIGZvciBjb3JyZWN0IHN0b3Ag dXNlCkNoYW5nZXMgZnJvbSB2MTIgLT4gdjEzCglGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBQ ZXRlcgoJLSBBZGRlZCBjb21tZW50cyBvbiA0IGJ5dGUgcmVhZCBsaW1pdGF0aW9uCgktIEFkZGVk IEkyQ19BQ19DT01CKiBmbGFncwpDaGFuZ2VzIGZyb20gdjEzIC0+IHYxNCAtPiB2MTUKCU5vbmUK CiBEb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUgfCAgMTggKysKIE1BSU5U QUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNyArCiBkcml2ZXJzL2kyYy9i dXNzZXMvS2NvbmZpZyAgICAgICAgICAgICAgfCAgIDkgKwogZHJpdmVycy9pMmMvYnVzc2VzL01h a2VmaWxlICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbnZpZGlh LWdwdS5jICAgICB8IDM2OCArKysrKysrKysrKysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdl ZCwgNDAzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2ky Yy9idXNzZXMvaTJjLW52aWRpYS1ncHUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2kyYy9i dXNzZXMvaTJjLW52aWRpYS1ncHUuYwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1 c3Nlcy9pMmMtbnZpZGlhLWdwdSBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbnZpZGlh LWdwdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjMxODg0ZDJiMmVi NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbnZpZGlh LWdwdQpAQCAtMCwwICsxLDE4IEBACitLZXJuZWwgZHJpdmVyIGkyYy1udmlkaWEtZ3B1CisKK0Rh dGFzaGVldDogbm90IHB1YmxpY2x5IGF2YWlsYWJsZS4KKworQXV0aG9yczoKKwlBamF5IEd1cHRh IDxhamF5Z0BudmlkaWEuY29tPgorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworaTJjLW52 aWRpYS1ncHUgaXMgYSBkcml2ZXIgZm9yIEkyQyBjb250cm9sbGVyIGluY2x1ZGVkIGluIE5WSURJ QSBUdXJpbmcKK2FuZCBsYXRlciBHUFVzIGFuZCBpdCBpcyB1c2VkIHRvIGNvbW11bmljYXRlIHdp dGggVHlwZS1DIGNvbnRyb2xsZXIgb24gR1BVcy4KKworSWYgeW91ciAnbHNwY2kgLXYnIGxpc3Rp bmcgc2hvd3Mgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZywKKworMDE6MDAuMyBTZXJpYWwg YnVzIGNvbnRyb2xsZXIgWzBjODBdOiBOVklESUEgQ29ycG9yYXRpb24gRGV2aWNlIDFhZDkgKHJl diBhMSkKKwordGhlbiB0aGlzIGRyaXZlciBzaG91bGQgc3VwcG9ydCB0aGUgSTJDIGNvbnRyb2xs ZXIgb2YgeW91ciBHUFUuCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmlu ZGV4IGJkNzAyYWQ1NmM3Zi4uNTg4NWEwOTMxZGU5IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwor KysgYi9NQUlOVEFJTkVSUwpAQCAtNjg0Myw2ICs2ODQzLDEzIEBAIEw6CWxpbnV4LWFjcGlAdmdl ci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2kyYy9pMmMtY29yZS1hY3Bp LmMKIAorSTJDIENPTlRST0xMRVIgRFJJVkVSIEZPUiBOVklESUEgR1BVCitNOglBamF5IEd1cHRh IDxhamF5Z0BudmlkaWEuY29tPgorTDoJbGludXgtaTJjQHZnZXIua2VybmVsLm9yZworUzoJTWFp bnRhaW5lZAorRjoJRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1udmlkaWEtZ3B1CitGOglk cml2ZXJzL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUuYworCiBJMkMgTVVYRVMKIE06CVBldGVy IFJvc2luIDxwZWRhQGF4ZW50aWEuc2U+CiBMOglsaW51eC1pMmNAdmdlci5rZXJuZWwub3JnCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nl cy9LY29uZmlnCmluZGV4IDQ1MWQ0YWU1MGU2Ni4uZWVkODI3YjQ0MDY4IDEwMDY0NAotLS0gYS9k cml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZp ZwpAQCAtMjI0LDYgKzIyNCwxNSBAQCBjb25maWcgSTJDX05GT1JDRTJfUzQ5ODUKIAkgIFRoaXMg ZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUK IAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1uZm9yY2UyLXM0OTg1LgogCitjb25maWcgSTJDX05WSURJ QV9HUFUKKwl0cmlzdGF0ZSAiTlZJRElBIEdQVSBJMkMgY29udHJvbGxlciIKKwlkZXBlbmRzIG9u IFBDSQorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIHRvIHRoaXMgb3B0aW9uLCBzdXBwb3J0IHdp bGwgYmUgaW5jbHVkZWQgZm9yIHRoZQorCSAgTlZJRElBIEdQVSBJMkMgY29udHJvbGxlciB3aGlj aCBpcyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIEdQVSdzCisJICBUeXBlLUMgY29udHJv bGxlci4gVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUgY2FsbGVkCisJ ICBpMmMtbnZpZGlhLWdwdS4KKwogY29uZmlnIEkyQ19TSVM1NTk1CiAJdHJpc3RhdGUgIlNpUyA1 NTk1IgogCWRlcGVuZHMgb24gUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvTWFr ZWZpbGUgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKaW5kZXggMThiMjZhZjgyYjFjLi5k NDk5ODEzZGYwMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKQEAgLTE0MCw1ICsxNDAsNiBAQCBvYmotJChD T05GSUdfSTJDX1NJQllURSkJKz0gaTJjLXNpYnl0ZS5vCiBvYmotJChDT05GSUdfSTJDX1hHRU5F X1NMSU1QUk8pICs9IGkyYy14Z2VuZS1zbGltcHJvLm8KIG9iai0kKENPTkZJR19TQ3gyMDBfQUNC KQkrPSBzY3gyMDBfYWNiLm8KIG9iai0kKENPTkZJR19JMkNfRlNJKQkJKz0gaTJjLWZzaS5vCitv YmotJChDT05GSUdfSTJDX05WSURJQV9HUFUpCSs9IGkyYy1udmlkaWEtZ3B1Lm8KIAogY2NmbGFn cy0kKENPTkZJR19JMkNfREVCVUdfQlVTKSA6PSAtRERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJz L2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbnZp ZGlhLWdwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzQ0ZjVl NDI2MzZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1udmlkaWEt Z3B1LmMKQEAgLTAsMCArMSwzNjggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wCisvKgorICogTnZpZGlhIEdQVSBJMkMgY29udHJvbGxlciBEcml2ZXIKKyAqCisgKiBDb3B5 cmlnaHQgKEMpIDIwMTggTlZJRElBIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor ICogQXV0aG9yOiBBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPgorICovCisjaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9p bnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9w Y2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51 eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworI2luY2x1ZGUgPGFzbS91 bmFsaWduZWQuaD4KKworLyogSTJDIGRlZmluaXRpb25zICovCisjZGVmaW5lIEkyQ19NU1RfQ05U TAkJCQkweDAwCisjZGVmaW5lIEkyQ19NU1RfQ05UTF9HRU5fU1RBUlQJCQlCSVQoMCkKKyNkZWZp bmUgSTJDX01TVF9DTlRMX0dFTl9TVE9QCQkJQklUKDEpCisjZGVmaW5lIEkyQ19NU1RfQ05UTF9D TURfUkVBRAkJCSgxIDw8IDIpCisjZGVmaW5lIEkyQ19NU1RfQ05UTF9DTURfV1JJVEUJCQkoMiA8 PCAyKQorI2RlZmluZSBJMkNfTVNUX0NOVExfQlVSU1RfU0laRV9TSElGVAkJNgorI2RlZmluZSBJ MkNfTVNUX0NOVExfR0VOX05BQ0sJCQlCSVQoMjgpCisjZGVmaW5lIEkyQ19NU1RfQ05UTF9TVEFU VVMJCQlHRU5NQVNLKDMwLCAyOSkKKyNkZWZpbmUgSTJDX01TVF9DTlRMX1NUQVRVU19PS0FZCQko MCA8PCAyOSkKKyNkZWZpbmUgSTJDX01TVF9DTlRMX1NUQVRVU19OT19BQ0sJCSgxIDw8IDI5KQor I2RlZmluZSBJMkNfTVNUX0NOVExfU1RBVFVTX1RJTUVPVVQJCSgyIDw8IDI5KQorI2RlZmluZSBJ MkNfTVNUX0NOVExfU1RBVFVTX0JVU19CVVNZCQkoMyA8PCAyOSkKKyNkZWZpbmUgSTJDX01TVF9D TlRMX0NZQ0xFX1RSSUdHRVIJCUJJVCgzMSkKKworI2RlZmluZSBJMkNfTVNUX0FERFIJCQkJMHgw NAorCisjZGVmaW5lIEkyQ19NU1RfSTJDMF9USU1JTkcJCQkJMHgwOAorI2RlZmluZSBJMkNfTVNU X0kyQzBfVElNSU5HX1NDTF9QRVJJT0RfMTAwS0haCQkweDEwZQorI2RlZmluZSBJMkNfTVNUX0ky QzBfVElNSU5HX1RJTUVPVVRfQ0xLX0NOVAkJMTYKKyNkZWZpbmUgSTJDX01TVF9JMkMwX1RJTUlO R19USU1FT1VUX0NMS19DTlRfTUFYCQkyNTUKKyNkZWZpbmUgSTJDX01TVF9JMkMwX1RJTUlOR19U SU1FT1VUX0NIRUNLCQlCSVQoMjQpCisKKyNkZWZpbmUgSTJDX01TVF9EQVRBCQkJCQkweDBjCisK KyNkZWZpbmUgSTJDX01TVF9IWUJSSURfUEFEQ1RMCQkJCTB4MjAKKyNkZWZpbmUgSTJDX01TVF9I WUJSSURfUEFEQ1RMX01PREVfSTJDCQkJQklUKDApCisjZGVmaW5lIEkyQ19NU1RfSFlCUklEX1BB RENUTF9JMkNfU0NMX0lOUFVUX1JDVgkJQklUKDE0KQorI2RlZmluZSBJMkNfTVNUX0hZQlJJRF9Q QURDVExfSTJDX1NEQV9JTlBVVF9SQ1YJCUJJVCgxNSkKKworc3RydWN0IGdwdV9pMmNfZGV2IHsK KwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBpMmNf YWRhcHRlciBhZGFwdGVyOworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZ3B1X2NjZ3hfdWNzaTsK K307CisKK3N0YXRpYyB2b2lkIGdwdV9lbmFibGVfaTJjX2J1cyhzdHJ1Y3QgZ3B1X2kyY19kZXYg KmkyY2QpCit7CisJdTMyIHZhbDsKKworCS8qIGVuYWJsZSBJMkMgKi8KKwl2YWwgPSByZWFkbChp MmNkLT5yZWdzICsgSTJDX01TVF9IWUJSSURfUEFEQ1RMKTsKKwl2YWwgfD0gSTJDX01TVF9IWUJS SURfUEFEQ1RMX01PREVfSTJDIHwKKwkJSTJDX01TVF9IWUJSSURfUEFEQ1RMX0kyQ19TQ0xfSU5Q VVRfUkNWIHwKKwkJSTJDX01TVF9IWUJSSURfUEFEQ1RMX0kyQ19TREFfSU5QVVRfUkNWOworCXdy aXRlbCh2YWwsIGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0hZQlJJRF9QQURDVEwpOworCisJLyogZW5h YmxlIDEwMEtIWiBtb2RlICovCisJdmFsID0gSTJDX01TVF9JMkMwX1RJTUlOR19TQ0xfUEVSSU9E XzEwMEtIWjsKKwl2YWwgfD0gKEkyQ19NU1RfSTJDMF9USU1JTkdfVElNRU9VVF9DTEtfQ05UX01B WAorCSAgICA8PCBJMkNfTVNUX0kyQzBfVElNSU5HX1RJTUVPVVRfQ0xLX0NOVCk7CisJdmFsIHw9 IEkyQ19NU1RfSTJDMF9USU1JTkdfVElNRU9VVF9DSEVDSzsKKwl3cml0ZWwodmFsLCBpMmNkLT5y ZWdzICsgSTJDX01TVF9JMkMwX1RJTUlORyk7Cit9CisKK3N0YXRpYyBpbnQgZ3B1X2kyY19jaGVj a19zdGF0dXMoc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkKQoreworCXVuc2lnbmVkIGxvbmcgdGFy Z2V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7CisJdTMyIHZhbDsKKworCWRv IHsKKwkJdmFsID0gcmVhZGwoaTJjZC0+cmVncyArIEkyQ19NU1RfQ05UTCk7CisJCWlmICghKHZh bCAmIEkyQ19NU1RfQ05UTF9DWUNMRV9UUklHR0VSKSkKKwkJCWJyZWFrOworCQlpZiAoKHZhbCAm IEkyQ19NU1RfQ05UTF9TVEFUVVMpICE9CisJCQkJSTJDX01TVF9DTlRMX1NUQVRVU19CVVNfQlVT WSkKKwkJCWJyZWFrOworCQl1c2xlZXBfcmFuZ2UoNTAwLCA2MDApOworCX0gd2hpbGUgKHRpbWVf aXNfYWZ0ZXJfamlmZmllcyh0YXJnZXQpKTsKKworCWlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVz KHRhcmdldCkpIHsKKwkJZGV2X2VycihpMmNkLT5kZXYsICJpMmMgdGltZW91dCBlcnJvciAleFxu IiwgdmFsKTsKKwkJcmV0dXJuIC1FVElNRTsKKwl9CisKKwl2YWwgPSByZWFkbChpMmNkLT5yZWdz ICsgSTJDX01TVF9DTlRMKTsKKwlzd2l0Y2ggKHZhbCAmIEkyQ19NU1RfQ05UTF9TVEFUVVMpIHsK KwljYXNlIEkyQ19NU1RfQ05UTF9TVEFUVVNfT0tBWToKKwkJcmV0dXJuIDA7CisJY2FzZSBJMkNf TVNUX0NOVExfU1RBVFVTX05PX0FDSzoKKwkJcmV0dXJuIC1FSU87CisJY2FzZSBJMkNfTVNUX0NO VExfU1RBVFVTX1RJTUVPVVQ6CisJCXJldHVybiAtRVRJTUU7CisJZGVmYXVsdDoKKwkJcmV0dXJu IDA7CisJfQorfQorCitzdGF0aWMgaW50IGdwdV9pMmNfcmVhZChzdHJ1Y3QgZ3B1X2kyY19kZXYg KmkyY2QsIHU4ICpkYXRhLCB1MTYgbGVuKQoreworCWludCBzdGF0dXM7CisJdTMyIHZhbDsKKwor CXZhbCA9IEkyQ19NU1RfQ05UTF9HRU5fU1RBUlQgfCBJMkNfTVNUX0NOVExfQ01EX1JFQUQgfAor CQkobGVuIDw8IEkyQ19NU1RfQ05UTF9CVVJTVF9TSVpFX1NISUZUKSB8CisJCUkyQ19NU1RfQ05U TF9DWUNMRV9UUklHR0VSIHwgSTJDX01TVF9DTlRMX0dFTl9OQUNLOworCXdyaXRlbCh2YWwsIGky Y2QtPnJlZ3MgKyBJMkNfTVNUX0NOVEwpOworCisJc3RhdHVzID0gZ3B1X2kyY19jaGVja19zdGF0 dXMoaTJjZCk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwl2YWwgPSBy ZWFkbChpMmNkLT5yZWdzICsgSTJDX01TVF9EQVRBKTsKKwlzd2l0Y2ggKGxlbikgeworCWNhc2Ug MToKKwkJZGF0YVswXSA9IHZhbDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwdXRfdW5hbGlnbmVk X2JlMTYodmFsLCBkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwdXRfdW5hbGlnbmVkX2Jl MTYodmFsID4+IDgsIGRhdGEpOworCQlkYXRhWzJdID0gdmFsOworCQlicmVhazsKKwljYXNlIDQ6 CisJCXB1dF91bmFsaWduZWRfYmUzMih2YWwsIGRhdGEpOworCQlicmVhazsKKwlkZWZhdWx0Ogor CQlicmVhazsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBncHVfaTJjX3N0 YXJ0KHN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCkKK3sKKwl3cml0ZWwoSTJDX01TVF9DTlRMX0dF Tl9TVEFSVCwgaTJjZC0+cmVncyArIEkyQ19NU1RfQ05UTCk7CisJcmV0dXJuIGdwdV9pMmNfY2hl Y2tfc3RhdHVzKGkyY2QpOworfQorCitzdGF0aWMgaW50IGdwdV9pMmNfc3RvcChzdHJ1Y3QgZ3B1 X2kyY19kZXYgKmkyY2QpCit7CisJd3JpdGVsKEkyQ19NU1RfQ05UTF9HRU5fU1RPUCwgaTJjZC0+ cmVncyArIEkyQ19NU1RfQ05UTCk7CisJcmV0dXJuIGdwdV9pMmNfY2hlY2tfc3RhdHVzKGkyY2Qp OworfQorCitzdGF0aWMgaW50IGdwdV9pMmNfd3JpdGUoc3RydWN0IGdwdV9pMmNfZGV2ICppMmNk LCB1OCBkYXRhKQoreworCXUzMiB2YWw7CisKKwl3cml0ZWwoZGF0YSwgaTJjZC0+cmVncyArIEky Q19NU1RfREFUQSk7CisKKwl2YWwgPSBJMkNfTVNUX0NOVExfQ01EX1dSSVRFIHwgKDEgPDwgSTJD X01TVF9DTlRMX0JVUlNUX1NJWkVfU0hJRlQpOworCXdyaXRlbCh2YWwsIGkyY2QtPnJlZ3MgKyBJ MkNfTVNUX0NOVEwpOworCisJcmV0dXJuIGdwdV9pMmNfY2hlY2tfc3RhdHVzKGkyY2QpOworfQor CitzdGF0aWMgaW50IGdwdV9pMmNfbWFzdGVyX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFw LAorCQkJICAgICAgIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQoreworCXN0cnVjdCBn cHVfaTJjX2RldiAqaTJjZCA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJaW50IHN0YXR1cywg c3RhdHVzMjsKKwlpbnQgaSwgajsKKworCS8qCisJICogVGhlIGNvbnRyb2xsZXIgc3VwcG9ydHMg bWF4aW11bSA0IGJ5dGUgcmVhZCBkdWUgdG8ga25vd24KKwkgKiBsaW1pdGF0aW9uIG9mIHNlbmRp bmcgU1RPUCBhZnRlciBldmVyeSByZWFkLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBudW07IGkr KykgeworCQlpZiAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQkvKiBwcm9ncmFtIGNs aWVudCBhZGRyZXNzIGJlZm9yZSBzdGFydGluZyByZWFkICovCisJCQl3cml0ZWwobXNnc1tpXS5h ZGRyLCBpMmNkLT5yZWdzICsgSTJDX01TVF9BRERSKTsKKwkJCS8qIGdwdV9pMmNfcmVhZCBoYXMg aW1wbGljaXQgc3RhcnQgKi8KKwkJCXN0YXR1cyA9IGdwdV9pMmNfcmVhZChpMmNkLCBtc2dzW2ld LmJ1ZiwgbXNnc1tpXS5sZW4pOworCQkJaWYgKHN0YXR1cyA8IDApCisJCQkJZ290byBzdG9wOwor CQl9IGVsc2UgeworCQkJdTggYWRkciA9IGkyY184Yml0X2FkZHJfZnJvbV9tc2cobXNncyArIGkp OworCisJCQlzdGF0dXMgPSBncHVfaTJjX3N0YXJ0KGkyY2QpOworCQkJaWYgKHN0YXR1cyA8IDAp IHsKKwkJCQlpZiAoaSA9PSAwKQorCQkJCQlyZXR1cm4gc3RhdHVzOworCQkJCWdvdG8gc3RvcDsK KwkJCX0KKworCQkJc3RhdHVzID0gZ3B1X2kyY193cml0ZShpMmNkLCBhZGRyKTsKKwkJCWlmIChz dGF0dXMgPCAwKQorCQkJCWdvdG8gc3RvcDsKKworCQkJZm9yIChqID0gMDsgaiA8IG1zZ3NbaV0u bGVuOyBqKyspIHsKKwkJCQlzdGF0dXMgPSBncHVfaTJjX3dyaXRlKGkyY2QsIG1zZ3NbaV0uYnVm W2pdKTsKKwkJCQlpZiAoc3RhdHVzIDwgMCkKKwkJCQkJZ290byBzdG9wOworCQkJfQorCQl9CisJ fQorCXN0YXR1cyA9IGdwdV9pMmNfc3RvcChpMmNkKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0 dXJuIHN0YXR1czsKKworCXJldHVybiBpOworc3RvcDoKKwlzdGF0dXMyID0gZ3B1X2kyY19zdG9w KGkyY2QpOworCWlmIChzdGF0dXMyIDwgMCkKKwkJZGV2X2VycihpMmNkLT5kZXYsICJpMmMgc3Rv cCBmYWlsZWQgJWRcbiIsIHN0YXR1czIpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgaTJjX2FkYXB0ZXJfcXVpcmtzIGdwdV9pMmNfcXVpcmtzID0geworCS5tYXhf cmVhZF9sZW4gPSA0LAorCS5mbGFncyA9IEkyQ19BUV9DT01CX1dSSVRFX1RIRU5fUkVBRCwKK307 CisKK3N0YXRpYyB1MzIgZ3B1X2kyY19mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAq YWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGdwdV9pMmNfYWxnb3JpdGhtID0g eworCS5tYXN0ZXJfeGZlcgk9IGdwdV9pMmNfbWFzdGVyX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkJ PSBncHVfaTJjX2Z1bmN0aW9uYWxpdHksCit9OworCisvKgorICogVGhpcyBkcml2ZXIgaXMgZm9y IE52aWRpYSBHUFUgY2FyZHMgd2l0aCBVU0IgVHlwZS1DIGludGVyZmFjZS4KKyAqIFdlIHdhbnQg dG8gaWRlbnRpZnkgdGhlIGNhcmRzIHVzaW5nIHZlbmRvciBJRCBhbmQgY2xhc3MgY29kZSBvbmx5 CisgKiB0byBhdm9pZCBkZXBlbmRlbmN5IG9mIGFkZGluZyBwcm9kdWN0IGlkIGZvciBhbnkgbmV3 IGNhcmQgd2hpY2gKKyAqIHJlcXVpcmVzIHRoaXMgZHJpdmVyLgorICogQ3VycmVudGx5IHRoZXJl IGlzIG5vIGNsYXNzIGNvZGUgZGVmaW5lZCBmb3IgVUNTSSBkZXZpY2Ugb3ZlciBQQ0kKKyAqIHNv IHVzaW5nIFVOS05PV04gY2xhc3MgZm9yIG5vdyBhbmQgaXQgd2lsbCBiZSB1cGRhdGVkIHdoZW4g VUNTSQorICogb3ZlciBQQ0kgZ2V0cyBhIGNsYXNzIGNvZGUuCisgKiBUaGVyZSBpcyBubyBvdGhl ciBOVklESUEgY2FyZHMgd2l0aCBVTktOT1dOIGNsYXNzIGNvZGUuIEV2ZW4gaWYgdGhlCisgKiBk cml2ZXIgZ2V0cyBsb2FkZWQgZm9yIGFuIHVuZGVzaXJlZCBjYXJkIHRoZW4gZXZlbnR1YWxseSBp MmNfcmVhZCgpCisgKiAoaW5pdGlhdGVkIGZyb20gVUNTSSBpMmNfY2xpZW50KSB3aWxsIHRpbWVv dXQgb3IgVUNTSSBjb21tYW5kcyB3aWxsCisgKiB0aW1lb3V0LgorICovCisjZGVmaW5lIFBDSV9D TEFTU19TRVJJQUxfVU5LTk9XTgkweDBjODAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2Rldmlj ZV9pZCBncHVfaTJjX2lkc1tdID0geworCXsgUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9BTllf SUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCVBDSV9DTEFTU19TRVJJQUxfVU5LTk9XTiA8 PCA4LCAweGZmZmZmZjAwfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZ3B1 X2kyY19pZHMpOworCitzdGF0aWMgaW50IGdwdV9wb3B1bGF0ZV9jbGllbnQoc3RydWN0IGdwdV9p MmNfZGV2ICppMmNkLCBpbnQgaXJxKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjY2d4X2NsaWVu dDsKKworCWkyY2QtPmdwdV9jY2d4X3Vjc2kgPSBkZXZtX2t6YWxsb2MoaTJjZC0+ZGV2LAorCQkJ CQkgICBzaXplb2YoKmkyY2QtPmdwdV9jY2d4X3Vjc2kpLAorCQkJCQkgICBHRlBfS0VSTkVMKTsK KwlpZiAoIWkyY2QtPmdwdV9jY2d4X3Vjc2kpCisJCXJldHVybiAtRU5PTUVNOworCisJc3RybGNw eShpMmNkLT5ncHVfY2NneF91Y3NpLT50eXBlLCAiY2NneC11Y3NpIiwKKwkJc2l6ZW9mKGkyY2Qt PmdwdV9jY2d4X3Vjc2ktPnR5cGUpKTsKKwlpMmNkLT5ncHVfY2NneF91Y3NpLT5hZGRyID0gMHg4 OworCWkyY2QtPmdwdV9jY2d4X3Vjc2ktPmlycSA9IGlycTsKKwljY2d4X2NsaWVudCA9IGkyY19u ZXdfZGV2aWNlKCZpMmNkLT5hZGFwdGVyLCBpMmNkLT5ncHVfY2NneF91Y3NpKTsKKwlpZiAoIWNj Z3hfY2xpZW50KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IGdwdV9pMmNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lf ZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZ3B1X2kyY19kZXYgKmkyY2Q7CisJaW50IHN0YXR1 czsKKworCWkyY2QgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCppMmNkKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFpMmNkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyY2QtPmRldiA9 ICZwZGV2LT5kZXY7CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGkyY2QpOworCisJc3Rh dHVzID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRl dl9lcnIoJnBkZXYtPmRldiwgInBjaW1fZW5hYmxlX2RldmljZSBmYWlsZWQgJWRcbiIsIHN0YXR1 cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlp MmNkLT5yZWdzID0gcGNpbV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoIWkyY2QtPnJlZ3MpIHsK KwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNpbV9pb21hcCBmYWlsZWRcbiIpOworCQlyZXR1cm4g LUVOT01FTTsKKwl9CisKKwlzdGF0dXMgPSBwY2lfYWxsb2NfaXJxX3ZlY3RvcnMocGRldiwgMSwg MSwgUENJX0lSUV9NU0kpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRl diwgInBjaV9hbGxvY19pcnFfdmVjdG9ycyBlcnIgJWRcbiIsIHN0YXR1cyk7CisJCXJldHVybiBz dGF0dXM7CisJfQorCisJZ3B1X2VuYWJsZV9pMmNfYnVzKGkyY2QpOworCisJaTJjX3NldF9hZGFw ZGF0YSgmaTJjZC0+YWRhcHRlciwgaTJjZCk7CisJaTJjZC0+YWRhcHRlci5vd25lciA9IFRISVNf TU9EVUxFOworCXN0cmxjcHkoaTJjZC0+YWRhcHRlci5uYW1lLCAiTlZJRElBIEdQVSBJMkMgYWRh cHRlciIsCisJCXNpemVvZihpMmNkLT5hZGFwdGVyLm5hbWUpKTsKKwlpMmNkLT5hZGFwdGVyLmFs Z28gPSAmZ3B1X2kyY19hbGdvcml0aG07CisJaTJjZC0+YWRhcHRlci5xdWlya3MgPSAmZ3B1X2ky Y19xdWlya3M7CisJaTJjZC0+YWRhcHRlci5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwlzdGF0 dXMgPSBpMmNfYWRkX2FkYXB0ZXIoJmkyY2QtPmFkYXB0ZXIpOworCWlmIChzdGF0dXMgPCAwKQor CQlnb3RvIGZyZWVfaXJxX3ZlY3RvcnM7CisKKwlzdGF0dXMgPSBncHVfcG9wdWxhdGVfY2xpZW50 KGkyY2QsIHBkZXYtPmlycSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ ZGV2LCAiZ3B1X3BvcHVsYXRlX2NsaWVudCBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CisJCWdvdG8g ZGVsX2FkYXB0ZXI7CisJfQorCisJcmV0dXJuIDA7CisKK2RlbF9hZGFwdGVyOgorCWkyY19kZWxf YWRhcHRlcigmaTJjZC0+YWRhcHRlcik7CitmcmVlX2lycV92ZWN0b3JzOgorCXBjaV9mcmVlX2ly cV92ZWN0b3JzKHBkZXYpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGdwdV9p MmNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBncHVfaTJjX2RldiAq aTJjZCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKworCWkyY19kZWxfYWRhcHRlcigm aTJjZC0+YWRhcHRlcik7CisJcGNpX2ZyZWVfaXJxX3ZlY3RvcnMocGRldik7Cit9CisKK3N0YXRp YyBpbnQgZ3B1X2kyY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBncHVf aTJjX2RldiAqaTJjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJZ3B1X2VuYWJsZV9pMmNf YnVzKGkyY2QpOworCXJldHVybiAwOworfQorCitVTklWRVJTQUxfREVWX1BNX09QUyhncHVfaTJj X2RyaXZlcl9wbSwgTlVMTCwgZ3B1X2kyY19yZXN1bWUsIE5VTEwpOworCitzdGF0aWMgc3RydWN0 IHBjaV9kcml2ZXIgZ3B1X2kyY19kcml2ZXIgPSB7CisJLm5hbWUJCT0gIm52aWRpYS1ncHUiLAor CS5pZF90YWJsZQk9IGdwdV9pMmNfaWRzLAorCS5wcm9iZQkJPSBncHVfaTJjX3Byb2JlLAorCS5y ZW1vdmUJCT0gZ3B1X2kyY19yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5wbQk9ICZncHVfaTJj X2RyaXZlcl9wbSwKKwl9LAorfTsKKworbW9kdWxlX3BjaV9kcml2ZXIoZ3B1X2kyY19kcml2ZXIp OworCitNT0RVTEVfQVVUSE9SKCJBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPiIpOworTU9E VUxFX0RFU0NSSVBUSU9OKCJOdmlkaWEgR1BVIEkyQyBjb250cm9sbGVyIERyaXZlciIpOworTU9E VUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo=