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: [v12,1/2] i2c: buses: add i2c bus driver for NVIDIA GPU From: Ajay Gupta Message-Id: <1536687902-31666-1-git-send-email-ajayg@nvidia.com> Date: Tue, 11 Sep 2018 10:45:01 -0700 To: wsa@the-dreams.de, heikki.krogerus@linux.intel.com Cc: linux-usb@vger.kernel.org, linux-i2c@vger.kernel.org, Ajay Gupta List-ID: TGF0ZXN0IE5WSURJQSBHUFUgY2FyZCBoYXMgVVNCIFR5cGUtQyBpbnRlcmZhY2UuIFRoZXJlIGlz IGEKVHlwZS1DIGNvbnRyb2xsZXIgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkIG92ZXIgSTJDLgoKVGhp cyBkcml2ZXIgYWRkcyBJMkMgYnVzIGRyaXZlciB0byBjb21tdW5pY2F0ZSB3aXRoIFR5cGUtQyBj b250cm9sbGVyLgpJMkMgY2xpZW50IGRyaXZlciB3aWxsIGJlIHBhcnQgb2YgVVNCIFR5cGUtQyBV Q1NJIGRyaXZlci4KClNpZ25lZC1vZmYtYnk6IEFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+ ClJldmlld2VkLWJ5OiBBbmR5IFNoZXZjaGVua28gPGFuZHkuc2hldmNoZW5rb0BnbWFpbC5jb20+ ClJldmlld2VkLWJ5OiBIZWlra2kgS3JvZ2VydXMgPGhlaWtraS5rcm9nZXJ1c0BsaW51eC5pbnRl bC5jb20+Ci0tLQpDaGFuZ2VzIGZyb20gdjEgLT4gdjIKCU5vbmUKQ2hhbmdlcyBmcm9tIHYyIC0+ IHYzCglGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBBbmR5IGFuZCBUaGllcnJ5CglSZW5hbWUg aTJjLWdwdS5jIC0+IGkyYy1udmlkaWEtZ3B1LmMKQ2hhbmdlcyBmcm9tIHYzIC0+IHY0CglGaXhl ZCByZXZpZXcgY29tbWVudHMgZnJvbSBBbmR5CkNoYW5nZXMgZnJvbSB2NCAtPiB2NQoJRml4ZWQg cmV2aWV3IGNvbW1lbnRzIGZyb20gQW5keQpDaGFuZ2VzIGZyb20gdjUgLT4gdjYKCU5vbmUgCkNo YW5nZXMgZnJvbSB2NiAtPiB2NyAtPiB2OAoJRml4ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gUGV0 ZXIgCgktIEFkZCBpbXBsaWNpdCBTVE9QIGZvciBsYXN0IHdyaXRlIG1lc3NhZ2UKCS0gQWRkIGky Y19hZGFwdGVyX3F1aXJrcyB3aXRoIG1heF9yZWFkX2xlbiBhbmQKCSAgSTJDX0FRX0NPTUIgZmxh Z3MKQ2hhbmdlcyBmcm9tIHY4IC0+IHY5CglGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBQZXRl cgoJLSBEcm9wIGRvX3N0YXJ0IGZsYWcKCS0gVXNlIGkyY184Yml0X2FkZHJfZnJvbV9tc2coKQpD aGFuZ2VzIGZyb20gdjkgLT4gdjEwCglGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBQZXRlcgoJ LSBEcm9wcGVkIEkyQ19GVU5DX1NNQlVTX0VNVUwKCS0gRHJvcHBlZCBsb2NhbCBtdXRleApDaGFu Z2VzIGZyb20gdjEwIC0+IHYxMQoJRml4ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gUGV0ZXIKCS0g TW92ZWQgc3RvcCBpbiBtYXN0ZXJfeGZlciBhdCBlbmQgb2YgbWVzc2FnZQoJLSBDaGFuZ2UgaTJj X3JlYWQgd2l0aG91dCBTVE9QCgktIERyb3BwZWQgSTJDX0FDX0NPTUIqIGZsYWdzCkNoYW5nZXMg ZnJvbSB2MTEgLT4gdjEyCglGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBQZXRlcgoJLSBSZW1v dmVkIGNsZWFyaW5nIG9mIGVtcHR5IGJpdHMKCS0gRml4IG1hc3Rlcl94ZmVyIGZvciBjb3JyZWN0 IHN0b3AgdXNlCgkKIERvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdSB8ICAx OCArKwogTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3ICsKIGRy aXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnICAgICAgICAgICAgICB8ICAgOSArCiBkcml2ZXJzL2ky Yy9idXNzZXMvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9pMmMvYnVzc2Vz L2kyYy1udmlkaWEtZ3B1LmMgICAgIHwgMzY4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiA1IGZpbGVzIGNoYW5nZWQsIDQwMyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1udmlkaWEtZ3B1CiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1udmlkaWEtZ3B1LmMKCmRpZmYgLS1naXQgYS9E b2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUgYi9Eb2N1bWVudGF0aW9uL2ky Yy9idXNzZXMvaTJjLW52aWRpYS1ncHUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMzE4ODRkMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9p MmMtbnZpZGlhLWdwdQpAQCAtMCwwICsxLDE4IEBACitLZXJuZWwgZHJpdmVyIGkyYy1udmlkaWEt Z3B1CisKK0RhdGFzaGVldDogbm90IHB1YmxpY2x5IGF2YWlsYWJsZS4KKworQXV0aG9yczoKKwlB amF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPgorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0K KworaTJjLW52aWRpYS1ncHUgaXMgYSBkcml2ZXIgZm9yIEkyQyBjb250cm9sbGVyIGluY2x1ZGVk IGluIE5WSURJQSBUdXJpbmcKK2FuZCBsYXRlciBHUFVzIGFuZCBpdCBpcyB1c2VkIHRvIGNvbW11 bmljYXRlIHdpdGggVHlwZS1DIGNvbnRyb2xsZXIgb24gR1BVcy4KKworSWYgeW91ciAnbHNwY2kg LXYnIGxpc3Rpbmcgc2hvd3Mgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZywKKworMDE6MDAu MyBTZXJpYWwgYnVzIGNvbnRyb2xsZXIgWzBjODBdOiBOVklESUEgQ29ycG9yYXRpb24gRGV2aWNl IDFhZDkgKHJldiBhMSkKKwordGhlbiB0aGlzIGRyaXZlciBzaG91bGQgc3VwcG9ydCB0aGUgSTJD IGNvbnRyb2xsZXIgb2YgeW91ciBHUFUuCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5U QUlORVJTCmluZGV4IGQ4NzBjYjUuLmI3MWIwYjQgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisr KyBiL01BSU5UQUlORVJTCkBAIC02Nzk4LDYgKzY3OTgsMTMgQEAgTDoJbGludXgtYWNwaUB2Z2Vy Lmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvaTJjL2kyYy1jb3JlLWFjcGku YwogCitJMkMgQ09OVFJPTExFUiBEUklWRVIgRk9SIE5WSURJQSBHUFUKK006CUFqYXkgR3VwdGEg PGFqYXlnQG52aWRpYS5jb20+CitMOglsaW51eC1pMmNAdmdlci5rZXJuZWwub3JnCitTOglNYWlu dGFpbmVkCitGOglEb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUKK0Y6CWRy aXZlcnMvaTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdS5jCisKIEkyQyBNVVhFUwogTToJUGV0ZXIg Um9zaW4gPHBlZGFAYXhlbnRpYS5zZT4KIEw6CWxpbnV4LWkyY0B2Z2VyLmtlcm5lbC5vcmcKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnIGIvZHJpdmVycy9pMmMvYnVzc2Vz L0tjb25maWcKaW5kZXggNDUxZDRhZS4uZWVkODI3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMv YnVzc2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKQEAgLTIyNCw2 ICsyMjQsMTUgQEAgY29uZmlnIEkyQ19ORk9SQ0UyX1M0OTg1CiAJICBUaGlzIGRyaXZlciBjYW4g YWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJl IGNhbGxlZCBpMmMtbmZvcmNlMi1zNDk4NS4KIAorY29uZmlnIEkyQ19OVklESUFfR1BVCisJdHJp c3RhdGUgIk5WSURJQSBHUFUgSTJDIGNvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBQQ0kKKwloZWxw CisJICBJZiB5b3Ugc2F5IHllcyB0byB0aGlzIG9wdGlvbiwgc3VwcG9ydCB3aWxsIGJlIGluY2x1 ZGVkIGZvciB0aGUKKwkgIE5WSURJQSBHUFUgSTJDIGNvbnRyb2xsZXIgd2hpY2ggaXMgdXNlZCB0 byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBHUFUncworCSAgVHlwZS1DIGNvbnRyb2xsZXIuIFRoaXMg ZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlIGNhbGxlZAorCSAgaTJjLW52aWRp YS1ncHUuCisKIGNvbmZpZyBJMkNfU0lTNTU5NQogCXRyaXN0YXRlICJTaVMgNTU5NSIKIAlkZXBl bmRzIG9uIFBDSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlIGIvZHJp dmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCmluZGV4IDE4YjI2YWYuLmQ0OTk4MTMgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMv TWFrZWZpbGUKQEAgLTE0MCw1ICsxNDAsNiBAQCBvYmotJChDT05GSUdfSTJDX1NJQllURSkJKz0g aTJjLXNpYnl0ZS5vCiBvYmotJChDT05GSUdfSTJDX1hHRU5FX1NMSU1QUk8pICs9IGkyYy14Z2Vu ZS1zbGltcHJvLm8KIG9iai0kKENPTkZJR19TQ3gyMDBfQUNCKQkrPSBzY3gyMDBfYWNiLm8KIG9i ai0kKENPTkZJR19JMkNfRlNJKQkJKz0gaTJjLWZzaS5vCitvYmotJChDT05GSUdfSTJDX05WSURJ QV9HUFUpCSs9IGkyYy1udmlkaWEtZ3B1Lm8KIAogY2NmbGFncy0kKENPTkZJR19JMkNfREVCVUdf QlVTKSA6PSAtRERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW52aWRp YS1ncHUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMTZiMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUuYwpAQCAtMCwwICsxLDM2OCBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBOdmlkaWEgR1BVIEkyQyBjb250 cm9sbGVyIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBOVklESUEgQ29ycG9yYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBBdXRob3I6IEFqYXkgR3VwdGEgPGFqYXlnQG52 aWRpYS5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4 L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3Jt X2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVu dGltZS5oPgorCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisvKiBJMkMgZGVmaW5pdGlv bnMgKi8KKyNkZWZpbmUgSTJDX01TVF9DTlRMCQkJCTB4MDAKKyNkZWZpbmUgSTJDX01TVF9DTlRM X0dFTl9TVEFSVAkJCUJJVCgwKQorI2RlZmluZSBJMkNfTVNUX0NOVExfR0VOX1NUT1AJCQlCSVQo MSkKKyNkZWZpbmUgSTJDX01TVF9DTlRMX0NNRF9SRUFECQkJKDEgPDwgMikKKyNkZWZpbmUgSTJD X01TVF9DTlRMX0NNRF9XUklURQkJCSgyIDw8IDIpCisjZGVmaW5lIEkyQ19NU1RfQ05UTF9CVVJT VF9TSVpFX1NISUZUCQk2CisjZGVmaW5lIEkyQ19NU1RfQ05UTF9HRU5fTkFDSwkJCUJJVCgyOCkK KyNkZWZpbmUgSTJDX01TVF9DTlRMX1NUQVRVUwkJCUdFTk1BU0soMzAsIDI5KQorI2RlZmluZSBJ MkNfTVNUX0NOVExfU1RBVFVTX09LQVkJCSgwIDw8IDI5KQorI2RlZmluZSBJMkNfTVNUX0NOVExf U1RBVFVTX05PX0FDSwkJKDEgPDwgMjkpCisjZGVmaW5lIEkyQ19NU1RfQ05UTF9TVEFUVVNfVElN RU9VVAkJKDIgPDwgMjkpCisjZGVmaW5lIEkyQ19NU1RfQ05UTF9TVEFUVVNfQlVTX0JVU1kJCSgz IDw8IDI5KQorI2RlZmluZSBJMkNfTVNUX0NOVExfQ1lDTEVfVFJJR0dFUgkJQklUKDMxKQorCisj ZGVmaW5lIEkyQ19NU1RfQUREUgkJCQkweDA0CisKKyNkZWZpbmUgSTJDX01TVF9JMkMwX1RJTUlO RwkJCQkweDA4CisjZGVmaW5lIEkyQ19NU1RfSTJDMF9USU1JTkdfU0NMX1BFUklPRF8xMDBLSFoJ CTB4MTBlCisjZGVmaW5lIEkyQ19NU1RfSTJDMF9USU1JTkdfVElNRU9VVF9DTEtfQ05UCQkxNgor I2RlZmluZSBJMkNfTVNUX0kyQzBfVElNSU5HX1RJTUVPVVRfQ0xLX0NOVF9NQVgJCTI1NQorI2Rl ZmluZSBJMkNfTVNUX0kyQzBfVElNSU5HX1RJTUVPVVRfQ0hFQ0sJCUJJVCgyNCkKKworI2RlZmlu ZSBJMkNfTVNUX0RBVEEJCQkJCTB4MGMKKworI2RlZmluZSBJMkNfTVNUX0hZQlJJRF9QQURDVEwJ CQkJMHgyMAorI2RlZmluZSBJMkNfTVNUX0hZQlJJRF9QQURDVExfTU9ERV9JMkMJCQlCSVQoMCkK KyNkZWZpbmUgSTJDX01TVF9IWUJSSURfUEFEQ1RMX0kyQ19TQ0xfSU5QVVRfUkNWCQlCSVQoMTQp CisjZGVmaW5lIEkyQ19NU1RfSFlCUklEX1BBRENUTF9JMkNfU0RBX0lOUFVUX1JDVgkJQklUKDE1 KQorCitzdHJ1Y3QgZ3B1X2kyY19kZXYgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl2b2lkIF9f aW9tZW0gKnJlZ3M7CisJc3RydWN0IGkyY19hZGFwdGVyIGFkYXB0ZXI7CisJc3RydWN0IGkyY19i b2FyZF9pbmZvICpncHVfY2NneF91Y3NpOworfTsKKworc3RhdGljIHZvaWQgZ3B1X2VuYWJsZV9p MmNfYnVzKHN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCkKK3sKKwl1MzIgdmFsOworCisJLyogZW5h YmxlIEkyQyAqLworCXZhbCA9IHJlYWRsKGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0hZQlJJRF9QQURD VEwpOworCXZhbCB8PSBJMkNfTVNUX0hZQlJJRF9QQURDVExfTU9ERV9JMkMgfAorCQlJMkNfTVNU X0hZQlJJRF9QQURDVExfSTJDX1NDTF9JTlBVVF9SQ1YgfAorCQlJMkNfTVNUX0hZQlJJRF9QQURD VExfSTJDX1NEQV9JTlBVVF9SQ1Y7CisJd3JpdGVsKHZhbCwgaTJjZC0+cmVncyArIEkyQ19NU1Rf SFlCUklEX1BBRENUTCk7CisKKwkvKiBlbmFibGUgMTAwS0haIG1vZGUgKi8KKwl2YWwgPSBJMkNf TVNUX0kyQzBfVElNSU5HX1NDTF9QRVJJT0RfMTAwS0haOworCXZhbCB8PSAoSTJDX01TVF9JMkMw X1RJTUlOR19USU1FT1VUX0NMS19DTlRfTUFYCisJICAgIDw8IEkyQ19NU1RfSTJDMF9USU1JTkdf VElNRU9VVF9DTEtfQ05UKTsKKwl2YWwgfD0gSTJDX01TVF9JMkMwX1RJTUlOR19USU1FT1VUX0NI RUNLOworCXdyaXRlbCh2YWwsIGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0kyQzBfVElNSU5HKTsKK30K Kworc3RhdGljIGludCBncHVfaTJjX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZ3B1X2kyY19kZXYgKmky Y2QpCit7CisJdW5zaWduZWQgbG9uZyB0YXJnZXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmll cygxMDAwKTsKKwl1MzIgdmFsOworCisJZG8geworCQl2YWwgPSByZWFkbChpMmNkLT5yZWdzICsg STJDX01TVF9DTlRMKTsKKwkJaWYgKCEodmFsICYgSTJDX01TVF9DTlRMX0NZQ0xFX1RSSUdHRVIp KQorCQkJYnJlYWs7CisJCWlmICgodmFsICYgSTJDX01TVF9DTlRMX1NUQVRVUykgIT0KKwkJCQlJ MkNfTVNUX0NOVExfU1RBVFVTX0JVU19CVVNZKQorCQkJYnJlYWs7CisJCXVzbGVlcF9yYW5nZSgx MDAwLCAyMDAwKTsKKwl9IHdoaWxlICh0aW1lX2lzX2FmdGVyX2ppZmZpZXModGFyZ2V0KSk7CisK KwlpZiAodGltZV9pc19iZWZvcmVfamlmZmllcyh0YXJnZXQpKSB7CisJCWRldl9lcnIoaTJjZC0+ ZGV2LCAiaTJjIHRpbWVvdXQgZXJyb3IgJXhcbiIsIHZhbCk7CisJCXJldHVybiAtRVRJTUU7CisJ fQorCisJdmFsID0gcmVhZGwoaTJjZC0+cmVncyArIEkyQ19NU1RfQ05UTCk7CisJc3dpdGNoICh2 YWwgJiBJMkNfTVNUX0NOVExfU1RBVFVTKSB7CisJY2FzZSBJMkNfTVNUX0NOVExfU1RBVFVTX09L QVk6CisJCXJldHVybiAwOworCWNhc2UgSTJDX01TVF9DTlRMX1NUQVRVU19OT19BQ0s6CisJCXJl dHVybiAtRUlPOworCWNhc2UgSTJDX01TVF9DTlRMX1NUQVRVU19USU1FT1VUOgorCQlyZXR1cm4g LUVUSU1FOworCWNhc2UgSTJDX01TVF9DTlRMX1NUQVRVU19CVVNfQlVTWToKKwkJcmV0dXJuIC1F QlVTWTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ3B1X2ky Y19yZWFkKHN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCwgdTggKmRhdGEsIHUxNiBsZW4pCit7CisJ aW50IHN0YXR1czsKKwl1MzIgdmFsOworCisJdmFsID0gSTJDX01TVF9DTlRMX0dFTl9TVEFSVCB8 IEkyQ19NU1RfQ05UTF9DTURfUkVBRCB8CisJCShsZW4gPDwgSTJDX01TVF9DTlRMX0JVUlNUX1NJ WkVfU0hJRlQpIHwKKwkJSTJDX01TVF9DTlRMX0NZQ0xFX1RSSUdHRVIgfCBJMkNfTVNUX0NOVExf R0VOX05BQ0s7CisJd3JpdGVsKHZhbCwgaTJjZC0+cmVncyArIEkyQ19NU1RfQ05UTCk7CisKKwlz dGF0dXMgPSBncHVfaTJjX2NoZWNrX3N0YXR1cyhpMmNkKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJ cmV0dXJuIHN0YXR1czsKKworCXZhbCA9IHJlYWRsKGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0RBVEEp OworCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxOgorCQlkYXRhWzBdID0gdmFsOworCQlicmVhazsK KwljYXNlIDI6CisJCXB1dF91bmFsaWduZWRfYmUxNih2YWwsIGRhdGEpOworCQlicmVhazsKKwlj YXNlIDM6CisJCXB1dF91bmFsaWduZWRfYmUxNih2YWwgPj4gOCwgZGF0YSk7CisJCWRhdGFbMl0g PSB2YWw7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcHV0X3VuYWxpZ25lZF9iZTMyKHZhbCwgZGF0 YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc3RhdHVzOwor fQorCitzdGF0aWMgaW50IGdwdV9pMmNfc3RhcnQoc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkKQor eworCXdyaXRlbChJMkNfTVNUX0NOVExfR0VOX1NUQVJULCBpMmNkLT5yZWdzICsgSTJDX01TVF9D TlRMKTsKKwlyZXR1cm4gZ3B1X2kyY19jaGVja19zdGF0dXMoaTJjZCk7Cit9CisKK3N0YXRpYyBp bnQgZ3B1X2kyY19zdG9wKHN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCkKK3sKKwl3cml0ZWwoSTJD X01TVF9DTlRMX0dFTl9TVE9QLCBpMmNkLT5yZWdzICsgSTJDX01TVF9DTlRMKTsKKwlyZXR1cm4g Z3B1X2kyY19jaGVja19zdGF0dXMoaTJjZCk7Cit9CisKK3N0YXRpYyBpbnQgZ3B1X2kyY193cml0 ZShzdHJ1Y3QgZ3B1X2kyY19kZXYgKmkyY2QsIHU4IGRhdGEpCit7CisJdTMyIHZhbDsKKworCXdy aXRlbChkYXRhLCBpMmNkLT5yZWdzICsgSTJDX01TVF9EQVRBKTsKKworCXZhbCA9IEkyQ19NU1Rf Q05UTF9DTURfV1JJVEUgfCAoMSA8PCBJMkNfTVNUX0NOVExfQlVSU1RfU0laRV9TSElGVCkgfAor CQlJMkNfTVNUX0NOVExfR0VOX05BQ0s7CisJd3JpdGVsKHZhbCwgaTJjZC0+cmVncyArIEkyQ19N U1RfQ05UTCk7CisKKwlyZXR1cm4gZ3B1X2kyY19jaGVja19zdGF0dXMoaTJjZCk7Cit9CisKK3N0 YXRpYyBpbnQgZ3B1X2kyY19tYXN0ZXJfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsCisJ CQkgICAgICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCit7CisJc3RydWN0IGdwdV9p MmNfZGV2ICppMmNkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKKwlpbnQgc3RhdHVzLCBzdGF0 dXMyOworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWlmICht c2dzW2ldLmZsYWdzICYgSTJDX01fUkQpIHsKKwkJCS8qIHByb2dyYW0gY2xpZW50IGFkZHJlc3Mg YmVmb3JlIHN0YXJ0aW5nIHJlYWQgKi8KKwkJCXdyaXRlbChtc2dzW2ldLmFkZHIsIGkyY2QtPnJl Z3MgKyBJMkNfTVNUX0FERFIpOworCQkJLyogZ3B1X2kyY19yZWFkIGhhcyBpbXBsaWNpdCBzdGFy dCAqLworCQkJc3RhdHVzID0gZ3B1X2kyY19yZWFkKGkyY2QsIG1zZ3NbaV0uYnVmLCBtc2dzW2ld Lmxlbik7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCWlmIChpID09IDApCisJCQkJCXJldHVy biBzdGF0dXM7CisJCQkJZ290byBzdG9wOworCQkJfQorCQl9IGVsc2UgeworCQkJdTggYWRkciA9 IGkyY184Yml0X2FkZHJfZnJvbV9tc2cobXNncyArIGkpOworCisJCQlzdGF0dXMgPSBncHVfaTJj X3N0YXJ0KGkyY2QpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlpZiAoaSA9PSAwKQorCQkJ CQlyZXR1cm4gc3RhdHVzOworCQkJCWdvdG8gc3RvcDsKKwkJCX0KKworCQkJc3RhdHVzID0gZ3B1 X2kyY193cml0ZShpMmNkLCBhZGRyKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWdvdG8gc3Rv cDsKKworCQkJZm9yIChqID0gMDsgaiA8IG1zZ3NbaV0ubGVuOyBqKyspIHsKKwkJCQlzdGF0dXMg PSBncHVfaTJjX3dyaXRlKGkyY2QsIG1zZ3NbaV0uYnVmW2pdKTsKKwkJCQlpZiAoc3RhdHVzIDwg MCkKKwkJCQkJZ290byBzdG9wOworCQkJfQorCQl9CisJfQorCXN0YXR1cyA9IGdwdV9pMmNfc3Rv cChpMmNkKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gaTsK K3N0b3A6CisJc3RhdHVzMiA9IGdwdV9pMmNfc3RvcChpMmNkKTsKKwlpZiAoc3RhdHVzMiA8IDAp CisJCWRldl9lcnIoaTJjZC0+ZGV2LCAiaTJjIHN0b3AgZmFpbGVkICVkXG4iLCBzdGF0dXMyKTsK KwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hZGFwdGVyX3F1 aXJrcyBncHVfaTJjX3F1aXJrcyA9IHsKKwkubWF4X3JlYWRfbGVuID0gNCwKK307CisKK3N0YXRp YyB1MzIgZ3B1X2kyY19mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sK KwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGdwdV9pMmNfYWxnb3JpdGhtID0geworCS5tYXN0 ZXJfeGZlcgk9IGdwdV9pMmNfbWFzdGVyX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkJPSBncHVfaTJj X2Z1bmN0aW9uYWxpdHksCit9OworCisvKgorICogVGhpcyBkcml2ZXIgaXMgZm9yIE52aWRpYSBH UFUgY2FyZHMgd2l0aCBVU0IgVHlwZS1DIGludGVyZmFjZS4KKyAqIFdlIHdhbnQgdG8gaWRlbnRp ZnkgdGhlIGNhcmRzIHVzaW5nIHZlbmRvciBJRCBhbmQgY2xhc3MgY29kZSBvbmx5CisgKiB0byBh dm9pZCBkZXBlbmRlbmN5IG9mIGFkZGluZyBwcm9kdWN0IGlkIGZvciBhbnkgbmV3IGNhcmQgd2hp Y2gKKyAqIHJlcXVpcmVzIHRoaXMgZHJpdmVyLgorICogQ3VycmVudGx5IHRoZXJlIGlzIG5vIGNs YXNzIGNvZGUgZGVmaW5lZCBmb3IgVUNTSSBkZXZpY2Ugb3ZlciBQQ0kKKyAqIHNvIHVzaW5nIFVO S05PV04gY2xhc3MgZm9yIG5vdyBhbmQgaXQgd2lsbCBiZSB1cGRhdGVkIHdoZW4gVUNTSQorICog b3ZlciBQQ0kgZ2V0cyBhIGNsYXNzIGNvZGUuCisgKiBUaGVyZSBpcyBubyBvdGhlciBOVklESUEg Y2FyZHMgd2l0aCBVTktOT1dOIGNsYXNzIGNvZGUuIEV2ZW4gaWYgdGhlCisgKiBkcml2ZXIgZ2V0 cyBsb2FkZWQgZm9yIGFuIHVuZGVzaXJlZCBjYXJkIHRoZW4gZXZlbnR1YWxseSBpMmNfcmVhZCgp CisgKiAoaW5pdGlhdGVkIGZyb20gVUNTSSBpMmNfY2xpZW50KSB3aWxsIHRpbWVvdXQgb3IgVUNT SSBjb21tYW5kcyB3aWxsCisgKiB0aW1lb3V0LgorICovCisjZGVmaW5lIFBDSV9DTEFTU19TRVJJ QUxfVU5LTk9XTgkweDBjODAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBncHVf aTJjX2lkc1tdID0geworCXsgUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9BTllfSUQsIFBDSV9B TllfSUQsIFBDSV9BTllfSUQsCisJCVBDSV9DTEFTU19TRVJJQUxfVU5LTk9XTiA8PCA4LCAweGZm ZmZmZjAwfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZ3B1X2kyY19pZHMp OworCitzdGF0aWMgaW50IGdwdV9wb3B1bGF0ZV9jbGllbnQoc3RydWN0IGdwdV9pMmNfZGV2ICpp MmNkLCBpbnQgaXJxKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjY2d4X2NsaWVudDsKKworCWky Y2QtPmdwdV9jY2d4X3Vjc2kgPSBkZXZtX2t6YWxsb2MoaTJjZC0+ZGV2LAorCQkJCQkgICBzaXpl b2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFp MmNkLT5ncHVfY2NneF91Y3NpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN0cmxjcHkoaTJjZC0+ Z3B1X2NjZ3hfdWNzaS0+dHlwZSwgImNjZ3gtdWNzaSIsCisJCXNpemVvZihpMmNkLT5ncHVfY2Nn eF91Y3NpLT50eXBlKSk7CisJaTJjZC0+Z3B1X2NjZ3hfdWNzaS0+YWRkciA9IDB4ODsKKwlpMmNk LT5ncHVfY2NneF91Y3NpLT5pcnEgPSBpcnE7CisJY2NneF9jbGllbnQgPSBpMmNfbmV3X2Rldmlj ZSgmaTJjZC0+YWRhcHRlciwgaTJjZC0+Z3B1X2NjZ3hfdWNzaSk7CisJaWYgKCFjY2d4X2NsaWVu dCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBncHVf aTJjX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9p ZCAqaWQpCit7CisJc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkOworCWludCBzdGF0dXM7CisKKwlp MmNkID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZ3B1X2kyY19kZXYp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWkyY2QpCisJCXJldHVybiAtRU5PTUVNOworCisJaTJjZC0+ ZGV2ID0gJnBkZXYtPmRldjsKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgaTJjZCk7CisK KwlzdGF0dXMgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHN0YXR1cyA8IDApIHsK KwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNpbV9lbmFibGVfZGV2aWNlIGZhaWxlZCAlZFxuIiwg c3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsK KworCWkyY2QtPnJlZ3MgPSBwY2ltX2lvbWFwKHBkZXYsIDAsIDApOworCWlmICghaTJjZC0+cmVn cykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2ltX2lvbWFwIGZhaWxlZFxuIik7CisJCXJl dHVybiAtRU5PTUVNOworCX0KKworCXN0YXR1cyA9IHBjaV9hbGxvY19pcnFfdmVjdG9ycyhwZGV2 LCAxLCAxLCBQQ0lfSVJRX01TSSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGV2X2VycigmcGRl di0+ZGV2LCAicGNpX2FsbG9jX2lycV92ZWN0b3JzIGVyciAlZFxuIiwgc3RhdHVzKTsKKwkJcmV0 dXJuIHN0YXR1czsKKwl9CisKKwlncHVfZW5hYmxlX2kyY19idXMoaTJjZCk7CisKKwlpMmNfc2V0 X2FkYXBkYXRhKCZpMmNkLT5hZGFwdGVyLCBpMmNkKTsKKwlpMmNkLT5hZGFwdGVyLm93bmVyID0g VEhJU19NT0RVTEU7CisJc3RybGNweShpMmNkLT5hZGFwdGVyLm5hbWUsICJOVklESUEgR1BVIEky QyBhZGFwdGVyIiwKKwkJc2l6ZW9mKGkyY2QtPmFkYXB0ZXIubmFtZSkpOworCWkyY2QtPmFkYXB0 ZXIuYWxnbyA9ICZncHVfaTJjX2FsZ29yaXRobTsKKwlpMmNkLT5hZGFwdGVyLnF1aXJrcyA9ICZn cHVfaTJjX3F1aXJrczsKKwlpMmNkLT5hZGFwdGVyLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2Owor CXN0YXR1cyA9IGkyY19hZGRfYWRhcHRlcigmaTJjZC0+YWRhcHRlcik7CisJaWYgKHN0YXR1cyA8 IDApCisJCWdvdG8gZnJlZV9pcnFfdmVjdG9yczsKKworCXN0YXR1cyA9IGdwdV9wb3B1bGF0ZV9j bGllbnQoaTJjZCwgcGRldi0+aXJxKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkZXZfZXJyKCZw ZGV2LT5kZXYsICJncHVfcG9wdWxhdGVfY2xpZW50IGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKKwkJ Z290byBkZWxfYWRhcHRlcjsKKwl9CisKKwlyZXR1cm4gMDsKKworZGVsX2FkYXB0ZXI6CisJaTJj X2RlbF9hZGFwdGVyKCZpMmNkLT5hZGFwdGVyKTsKK2ZyZWVfaXJxX3ZlY3RvcnM6CisJcGNpX2Zy ZWVfaXJxX3ZlY3RvcnMocGRldik7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQg Z3B1X2kyY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGdwdV9pMmNf ZGV2ICppMmNkID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCisJaTJjX2RlbF9hZGFw dGVyKCZpMmNkLT5hZGFwdGVyKTsKKwlwY2lfZnJlZV9pcnFfdmVjdG9ycyhwZGV2KTsKK30KKwor c3RhdGljIGludCBncHVfaTJjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0 IGdwdV9pMmNfZGV2ICppMmNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlncHVfZW5hYmxl X2kyY19idXMoaTJjZCk7CisJcmV0dXJuIDA7Cit9CisKK1VOSVZFUlNBTF9ERVZfUE1fT1BTKGdw dV9pMmNfZHJpdmVyX3BtLCBOVUxMLCBncHVfaTJjX3Jlc3VtZSwgTlVMTCk7CisKK3N0YXRpYyBz dHJ1Y3QgcGNpX2RyaXZlciBncHVfaTJjX2RyaXZlciA9IHsKKwkubmFtZQkJPSAibnZpZGlhLWdw dSIsCisJLmlkX3RhYmxlCT0gZ3B1X2kyY19pZHMsCisJLnByb2JlCQk9IGdwdV9pMmNfcHJvYmUs CisJLnJlbW92ZQkJPSBncHVfaTJjX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLnBtCT0gJmdw dV9pMmNfZHJpdmVyX3BtLAorCX0sCit9OworCittb2R1bGVfcGNpX2RyaXZlcihncHVfaTJjX2Ry aXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+Iik7 CitNT0RVTEVfREVTQ1JJUFRJT04oIk52aWRpYSBHUFUgSTJDIGNvbnRyb2xsZXIgRHJpdmVyIik7 CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cg==