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: Ajay Gupta Message-Id: <1535146416-11754-1-git-send-email-ajayg@nvidia.com> Date: Fri, 24 Aug 2018 14:33:35 -0700 To: linux-usb@vger.kernel.org, linux-i2c@vger.kernel.org Cc: wsa@the-dreams.de, heikki.krogerus@linux.intel.com, Ajay Gupta List-ID: TGF0ZXN0IE5WSURJQSBHUFUgY2FyZCBoYXMgVVNCIFR5cGUtQyBpbnRlcmZhY2UuIFRoZXJlIGlz IGEKVHlwZS1DIGNvbnRyb2xsZXIgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkIG92ZXIgSTJDLgoKVGhp cyBkcml2ZXIgYWRkIEkyQyBidXMgZHJpdmVyIHRvIGNvbW11bmljYXRlIHdpdGggVHlwZS1DIGNv bnRyb2xsZXIuCkkyQyBjbGllbnQgZHJpdmVyIHdpbGwgYmUgcGFydCBvZiBVU0IgVHlwZS1DIFVD U0kgZHJpdmVyLgoKU2lnbmVkLW9mZi1ieTogQWpheSBHdXB0YSA8YWpheWdAbnZpZGlhLmNvbT4K LS0tCkNoYW5nZXMgZnJvbSB2MSAtPiB2MjogTm9uZQoKIERvY3VtZW50YXRpb24vaTJjL2J1c3Nl cy9pMmMtZ3B1IHwgIDE4ICsrCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICB8ICAg NyArCiBkcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyAgICAgICB8ICAgOSArCiBkcml2ZXJzL2ky Yy9idXNzZXMvTWFrZWZpbGUgICAgICB8ICAgMSArCiBkcml2ZXJzL2kyYy9idXNzZXMvaTJjLWdw dS5jICAgICB8IDQ5MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDUg ZmlsZXMgY2hhbmdlZCwgNTI4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1 bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWdwdQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv aTJjL2J1c3Nlcy9pMmMtZ3B1LmMKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNz ZXMvaTJjLWdwdSBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtZ3B1Cm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3M2JhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1 bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWdwdQpAQCAtMCwwICsxLDE4IEBACitLZXJuZWwgZHJp dmVyIGkyYy1ncHUKKworRGF0YXNoZWV0OiBub3QgcHVibGljbHkgYXZhaWxhYmxlLgorCitBdXRo b3JzOgorCUFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+CisKK0Rlc2NyaXB0aW9uCistLS0t LS0tLS0tLQorCitpMmMtZ3B1IGlzIGEgZHJpdmVyIGZvciBJMkMgY29udHJvbGxlciBpbmNsdWRl ZCBpbiBOVklESUEgVHVyaW5nIGFuZCBsYXRlcgorR1BVcyBhbmQgaXQgaXMgdXNlZCB0byBjb21t dW5pY2F0ZSB3aXRoIFR5cGUtQyBjb250cm9sbGVyIG9uIEdQVXMuCisKK0lmIHlvdXIgJ2xzcGNp IC12JyBsaXN0aW5nIHNob3dzIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcsCisKKzAxOjAw LjMgU2VyaWFsIGJ1cyBjb250cm9sbGVyIFswYzgwXTogTlZJRElBIENvcnBvcmF0aW9uIERldmlj ZSAxYWQ5IChyZXYgYTEpCisKK3RoZW4gdGhpcyBkcml2ZXIgc2hvdWxkIHN1cHBvcnQgdGhlIEky QyBjb250cm9sbGVyIG9mIHlvdXIgR1BVLgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlO VEFJTkVSUwppbmRleCBiMmZjZDFjLi5lOTlmOGEyIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwor KysgYi9NQUlOVEFJTkVSUwpAQCAtNjc5Niw2ICs2Nzk2LDEzIEBAIEw6CWxpbnV4LWFjcGlAdmdl ci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2kyYy9pMmMtY29yZS1hY3Bp LmMKIAorSTJDIENPTlRST0xMRVIgRFJJVkVSIEZPUiBOVklESUEgR1BVCitNOglBamF5IEd1cHRh IDxhamF5Z0BudmlkaWEuY29tPgorTDoJbGludXgtaTJjQHZnZXIua2VybmVsLm9yZworUzoJTWFp bnRhaW5lZAorRjoJRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1ncHUKK0Y6CWRyaXZlcnMv aTJjL2J1c3Nlcy9pMmMtZ3B1LmMKKwogSTJDIE1VWEVTCiBNOglQZXRlciBSb3NpbiA8cGVkYUBh eGVudGlhLnNlPgogTDoJbGludXgtaTJjQHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9pMmMvYnVzc2VzL0tjb25maWcgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwppbmRl eCA0NTFkNGFlLi5mZjhiMmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZp ZworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwpAQCAtMjI0LDYgKzIyNCwxNSBAQCBj b25maWcgSTJDX05GT1JDRTJfUzQ5ODUKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0 IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1u Zm9yY2UyLXM0OTg1LgogCitjb25maWcgSTJDX0dQVQorCXRyaXN0YXRlICJOVklESUEgR1BVIEky QyBjb250cm9sbGVyIgorCWRlcGVuZHMgb24gUENJCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMg dG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBmb3IgdGhlCisJICBOVklE SUEgR1BVIEkyQyBjb250cm9sbGVyIHdoaWNoIGlzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0 aGUgR1BVJ3MKKwkgIFR5cGUtQyBjb250cm9sbGVyLiBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBi dWlsdCBhcyBhIG1vZHVsZSBjYWxsZWQKKwkgIGkyYy1ncHUua28uCisKIGNvbmZpZyBJMkNfU0lT NTU5NQogCXRyaXN0YXRlICJTaVMgNTU5NSIKIAlkZXBlbmRzIG9uIFBDSQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxl CmluZGV4IDE4YjI2YWYuLjE1ZDI4OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9N YWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKQEAgLTE0MCw1ICsxNDAs NiBAQCBvYmotJChDT05GSUdfSTJDX1NJQllURSkJKz0gaTJjLXNpYnl0ZS5vCiBvYmotJChDT05G SUdfSTJDX1hHRU5FX1NMSU1QUk8pICs9IGkyYy14Z2VuZS1zbGltcHJvLm8KIG9iai0kKENPTkZJ R19TQ3gyMDBfQUNCKQkrPSBzY3gyMDBfYWNiLm8KIG9iai0kKENPTkZJR19JMkNfRlNJKQkJKz0g aTJjLWZzaS5vCitvYmotJChDT05GSUdfSTJDX0dQVSkgICAgICAgICAgKz0gaTJjLWdwdS5vCiAK IGNjZmxhZ3MtJChDT05GSUdfSTJDX0RFQlVHX0JVUykgOj0gLURERUJVRwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1ncHUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZ3B1 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZkMjk0NAotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZ3B1LmMKQEAgLTAsMCArMSw0OTMgQEAK Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogTnZpZGlhIEdQVSBJ MkMgY29udHJvbGxlciBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTlZJRElBIENv cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQXV0aG9yOiBBamF5IEd1cHRhIDxh amF5Z0BudmlkaWEuY29tPgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5j bHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVk ZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGlu dXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxs aW51eC9wbV9ydW50aW1lLmg+CisKKy8qIFNUQVRVUyBkZWZpbml0aW9ucyAgKi8KKyNkZWZpbmUg U1RBVFVTX1NVQ0NFU1MJCQkwCisjZGVmaW5lIFNUQVRVU19VTlNVQ0NFU1NGVUwJCTB4ODAwMDAw MDBVTAorI2RlZmluZSBTVEFUVVNfVElNRU9VVAkJCTB4ODAwMDAwMDFVTAorI2RlZmluZSBTVEFU VVNfSU9fREVWSUNFX0VSUk9SCQkweDgwMDAwMDAyVUwKKyNkZWZpbmUgU1RBVFVTX0lPX1RJTUVP VVQJCTB4ODAwMDAwMDRVTAorI2RlZmluZSBTVEFUVVNfSU9fUFJFRU1QVEVECQkweDgwMDAwMDA4 VUwKKworLyogQ3lwcmVzcyBUeXBlLUMgY29udHJvbGxlcnMgKENDR3gpIGRldmljZSAqLworI2Rl ZmluZSBDQ0dYX0kyQ19ERVZfQUREUkVTUwkJMHgwOAorCisvKiBJMkMgZGVmaW5pdGlvbnMgKi8K KyNkZWZpbmUgSTJDX01TVF9DTlRMCQkJCTB4MDAKKyNkZWZpbmUgSTJDX01TVF9DTlRMX0dFTl9T VEFSVAkJCSgxIDw8IDApCisjZGVmaW5lIEkyQ19NU1RfQ05UTF9HRU5fU1RPUAkJCSgxIDw8IDEp CisjZGVmaW5lIEkyQ19NU1RfQ05UTF9DTURfTk9ORQkJCSgwIDw8IDIpCisjZGVmaW5lIEkyQ19N U1RfQ05UTF9DTURfUkVBRAkJCSgxIDw8IDIpCisjZGVmaW5lIEkyQ19NU1RfQ05UTF9DTURfV1JJ VEUJCQkoMiA8PCAyKQorI2RlZmluZSBJMkNfTVNUX0NOVExfQ01EX1JFU0VUCQkJKDMgPDwgMikK KyNkZWZpbmUgSTJDX01TVF9DTlRMX0dFTl9SQUIJCQkoMSA8PCA0KQorI2RlZmluZSBJMkNfTVNU X0NOVExfQlVSU1RfU0laRV9TSElGVAkJKDYpCisjZGVmaW5lIEkyQ19NU1RfQ05UTF9HRU5fTkFD SwkJCSgxIDw8IDI4KQorI2RlZmluZSBJMkNfTVNUX0NOVExfU1RBVFVTCQkJKDMgPDwgMjkpCisj ZGVmaW5lIEkyQ19NU1RfQ05UTF9TVEFUVVNfT0tBWQkJKDAgPDwgMjkpCisjZGVmaW5lIEkyQ19N U1RfQ05UTF9TVEFUVVNfTk9fQUNLCQkoMSA8PCAyOSkKKyNkZWZpbmUgSTJDX01TVF9DTlRMX1NU QVRVU19USU1FT1VUCQkoMiA8PCAyOSkKKyNkZWZpbmUgSTJDX01TVF9DTlRMX1NUQVRVU19CVVNf QlVTWQkJKDMgPDwgMjkpCisjZGVmaW5lIEkyQ19NU1RfQ05UTF9DWUNMRV9UUklHR0VSCQkoMSA8 PCAzMSkKKworI2RlZmluZSBJMkNfTVNUX0FERFIJCQkJMHgwNAorI2RlZmluZSBJMkNfTVNUX0FE RFJfREFCCQkJMAorCisjZGVmaW5lIEkyQ19NU1RfSTJDMF9USU1JTkcJCQkJMHgwOAorI2RlZmlu ZSBJMkNfTVNUX0kyQzBfVElNSU5HX1NDTF9QRVJJT0RfMTAwS0haCQkoMHgxMGUgPDwgMCkKKyNk ZWZpbmUgSTJDX01TVF9JMkMwX1RJTUlOR19TQ0xfUEVSSU9EXzIwMEtIWgkJKDB4MDg3IDw8IDAp CisjZGVmaW5lIEkyQ19NU1RfSTJDMF9USU1JTkdfVElNRU9VVF9DTEtfQ05UCQkxNgorI2RlZmlu ZSBJMkNfTVNUX0kyQzBfVElNSU5HX1RJTUVPVVRfQ0xLX0NOVF9NQVgJCTI1NQorI2RlZmluZSBJ MkNfTVNUX0kyQzBfVElNSU5HX1RJTUVPVVRfQ0hFQ0sJCSgxIDw8IDI0KQorCisjZGVmaW5lIEky Q19NU1RfREFUQQkJCQkJMHgwYworCisjZGVmaW5lIEkyQ19NU1RfSFlCUklEX1BBRENUTAkJCQkw eDIwCisjZGVmaW5lIEkyQ19NU1RfSFlCUklEX1BBRENUTF9NT0RFX0kyQwkJCSgxIDw8IDApCisj ZGVmaW5lIEkyQ19NU1RfSFlCUklEX1BBRENUTF9JMkNfU0NMX0lOUFVUX1JDVgkJKDEgPDwgMTQp CisjZGVmaW5lIEkyQ19NU1RfSFlCUklEX1BBRENUTF9JMkNfU0RBX0lOUFVUX1JDVgkJKDEgPDwg MTUpCisKKy8qIFBDSSBkcml2ZXIgZGF0YSAqLworc3RydWN0IGdwdV9pMmNfZGV2IHsKKwlzdHJ1 Y3QgcGNpX2RldiAqcGNpX2RldjsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IGkyY19h ZGFwdGVyIGFkYXB0ZXI7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgbXV0 ZXggbXV0ZXg7CisJYm9vbCBkb19zdGFydDsKK307CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9pMmNf YnVzKHN0cnVjdCBncHVfaTJjX2RldiAqZ2RldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm Z2Rldi0+cGNpX2Rldi0+ZGV2OworCXUzMiB2YWw7CisKKwkvKiBlbmFibGUgSTJDICovCisJdmFs ID0gcmVhZGwoZ2Rldi0+cmVncyArIEkyQ19NU1RfSFlCUklEX1BBRENUTCk7CisJdmFsIHw9IEky Q19NU1RfSFlCUklEX1BBRENUTF9NT0RFX0kyQyB8CisJCUkyQ19NU1RfSFlCUklEX1BBRENUTF9J MkNfU0NMX0lOUFVUX1JDViB8CisJCUkyQ19NU1RfSFlCUklEX1BBRENUTF9JMkNfU0RBX0lOUFVU X1JDVjsKKworCWRldl9kYmcoZGV2LCAiJXM6ICVwIChJMkNfTVNUX0hZQlJJRF9QQURDVEwpIDwt ICUwOHgiLCBfX2Z1bmNfXywKKwkJKGdkZXYtPnJlZ3MgKyBJMkNfTVNUX0hZQlJJRF9QQURDVEwp LCB2YWwpOworCisJd3JpdGVsKHZhbCwgZ2Rldi0+cmVncyArIEkyQ19NU1RfSFlCUklEX1BBRENU TCk7CisKKwkvKiBlbmFibGUgMTAwS0haIG1vZGUgKi8KKwl2YWwgPSAwOworCXZhbCB8PSBJMkNf TVNUX0kyQzBfVElNSU5HX1NDTF9QRVJJT0RfMTAwS0haOworCXZhbCB8PSAoSTJDX01TVF9JMkMw X1RJTUlOR19USU1FT1VUX0NMS19DTlRfTUFYCisJICAgIDw8IEkyQ19NU1RfSTJDMF9USU1JTkdf VElNRU9VVF9DTEtfQ05UKTsKKwl2YWwgfD0gSTJDX01TVF9JMkMwX1RJTUlOR19USU1FT1VUX0NI RUNLOworCisJZGV2X2RiZyhkZXYsICIlczogJXAgKEkyQ19NU1RfSTJDMF9USU1JTkcpIDwtICUw OHgiLCBfX2Z1bmNfXywKKwkJZ2Rldi0+cmVncyArIEkyQ19NU1RfSTJDMF9USU1JTkcsIHZhbCk7 CisJd3JpdGVsKHZhbCwgZ2Rldi0+cmVncyArIEkyQ19NU1RfSTJDMF9USU1JTkcpOworfQorCitz dGF0aWMgdTMyIGkyY19jaGVja19zdGF0dXMoc3RydWN0IGdwdV9pMmNfZGV2ICpnZGV2KQorewor CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZnZGV2LT5wY2lfZGV2LT5kZXY7CisJdW5zaWduZWQgbG9u ZyB0YXJnZXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKTsKKwl1MzIgc3RhdHVz ID0gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKwl1MzIgdmFsOworCisJd2hpbGUgKHRpbWVfaXNfYWZ0 ZXJfamlmZmllcyh0YXJnZXQpKSB7CisJCXZhbCA9IHJlYWRsKGdkZXYtPnJlZ3MgKyBJMkNfTVNU X0NOVEwpOworCQlpZiAoKHZhbCAmIEkyQ19NU1RfQ05UTF9DWUNMRV9UUklHR0VSKSAhPQorCQkJ CUkyQ19NU1RfQ05UTF9DWUNMRV9UUklHR0VSKQorCQkJYnJlYWs7CisJCWlmICgodmFsICYgSTJD X01TVF9DTlRMX1NUQVRVUykgIT0KKwkJCQlJMkNfTVNUX0NOVExfU1RBVFVTX0JVU19CVVNZKQor CQkJYnJlYWs7CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKKwl9CisKKwlpZiAodGltZV9p c19iZWZvcmVfamlmZmllcyh0YXJnZXQpKSB7CisJCWRldl9lcnIoZGV2LCAiJXNpMmMgdGltZW91 dCIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwl2YWwgPSByZWFkbChnZGV2 LT5yZWdzICsgSTJDX01TVF9DTlRMKTsKKwlzd2l0Y2ggKHZhbCAmIEkyQ19NU1RfQ05UTF9TVEFU VVMpIHsKKwljYXNlIEkyQ19NU1RfQ05UTF9TVEFUVVNfT0tBWToKKwkJc3RhdHVzID0gU1RBVFVT X1NVQ0NFU1M7CisJCWJyZWFrOworCWNhc2UgSTJDX01TVF9DTlRMX1NUQVRVU19OT19BQ0s6CisJ CXN0YXR1cyA9IFNUQVRVU19JT19ERVZJQ0VfRVJST1I7CisJCWJyZWFrOworCWNhc2UgSTJDX01T VF9DTlRMX1NUQVRVU19USU1FT1VUOgorCQlzdGF0dXMgPSBTVEFUVVNfSU9fVElNRU9VVDsKKwkJ YnJlYWs7CisJY2FzZSBJMkNfTVNUX0NOVExfU1RBVFVTX0JVU19CVVNZOgorCQlzdGF0dXMgPSBT VEFUVVNfSU9fUFJFRU1QVEVEOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJ cmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHUzMiBpMmNfcmVhZChzdHJ1Y3QgZ3B1X2kyY19k ZXYgKmdkZXYsIHU4ICpkYXRhLCB1MTYgbGVuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZn ZGV2LT5wY2lfZGV2LT5kZXY7CisJdTMyIHN0YXR1czsKKwl1MzIgdmFsID0gMDsKKworCXZhbCB8 PSBJMkNfTVNUX0NOVExfR0VOX1NUQVJUIHwgSTJDX01TVF9DTlRMX0dFTl9TVE9QIHwKKwkJSTJD X01TVF9DTlRMX0NNRF9SRUFEIHwgKGxlbiA8PCBJMkNfTVNUX0NOVExfQlVSU1RfU0laRV9TSElG VCkgfAorCQlJMkNfTVNUX0NOVExfQ1lDTEVfVFJJR0dFUiB8IEkyQ19NU1RfQ05UTF9HRU5fTkFD SzsKKwl2YWwgJj0gfkkyQ19NU1RfQ05UTF9HRU5fUkFCOworCXdyaXRlbCh2YWwsIGdkZXYtPnJl Z3MgKyBJMkNfTVNUX0NOVEwpOworCisJc3RhdHVzID0gaTJjX2NoZWNrX3N0YXR1cyhnZGV2KTsK KwlpZiAoc3RhdHVzID09IFNUQVRVU19VTlNVQ0NFU1NGVUwpIHsKKwkJZGV2X2VycihkZXYsICIl cyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwl2YWwgPSBy ZWFkbChnZGV2LT5yZWdzICsgSTJDX01TVF9EQVRBKTsKKwlzd2l0Y2ggKGxlbikgeworCWNhc2Ug MToKKwkJZGF0YVswXSA9ICh2YWwgPj4gMCkgJiAweGZmOworCQlicmVhazsKKwljYXNlIDI6CisJ CWRhdGFbMF0gPSAodmFsID4+IDgpICYgMHhmZjsKKwkJZGF0YVsxXSA9ICh2YWwgPj4gMCkgJiAw eGZmOworCQlicmVhazsKKwljYXNlIDM6CisJCWRhdGFbMF0gPSAodmFsID4+IDE2KSAmIDB4ZmY7 CisJCWRhdGFbMV0gPSAodmFsID4+IDgpICYgMHhmZjsKKwkJZGF0YVsyXSA9ICh2YWwgPj4gMCkg JiAweGZmOworCQlicmVhazsKKwljYXNlIDQ6CisJCWRhdGFbMF0gPSAodmFsID4+IDI0KSAmIDB4 ZmY7CisJCWRhdGFbMV0gPSAodmFsID4+IDE2KSAmIDB4ZmY7CisJCWRhdGFbMl0gPSAodmFsID4+ IDgpICYgMHhmZjsKKwkJZGF0YVszXSA9ICh2YWwgPj4gMCkgJiAweGZmOworCQlicmVhazsKKwlk ZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHUzMiBp MmNfbWFudWFsX3N0YXJ0KHN0cnVjdCBncHVfaTJjX2RldiAqZ2RldiwgdTE2IGFkZHIpCit7CisJ dTMyIHZhbCA9IDA7CisKKwl2YWwgPSBhZGRyIDw8IEkyQ19NU1RfQUREUl9EQUI7CisJd3JpdGVs KHZhbCwgZ2Rldi0+cmVncyArIEkyQ19NU1RfQUREUik7CisKKwl2YWwgPSAwOworCXZhbCB8PSBJ MkNfTVNUX0NOVExfR0VOX1NUQVJUIHwgSTJDX01TVF9DTlRMX0NNRF9OT05FIHwKKwkJSTJDX01T VF9DTlRMX0dFTl9OQUNLOworCXZhbCAmPSB+KEkyQ19NU1RfQ05UTF9HRU5fU1RPUCB8IEkyQ19N U1RfQ05UTF9HRU5fUkFCKTsKKwl3cml0ZWwodmFsLCBnZGV2LT5yZWdzICsgSTJDX01TVF9DTlRM KTsKKworCXJldHVybiBpMmNfY2hlY2tfc3RhdHVzKGdkZXYpOworfQorCitzdGF0aWMgdTMyIGky Y19tYW51YWxfc3RvcChzdHJ1Y3QgZ3B1X2kyY19kZXYgKmdkZXYpCit7CisJdTMyIHZhbCA9IDA7 CisKKwl2YWwgfD0gSTJDX01TVF9DTlRMX0dFTl9TVE9QIHwgSTJDX01TVF9DTlRMX0NNRF9OT05F IHwKKwkJSTJDX01TVF9DTlRMX0dFTl9OQUNLOworCXZhbCAmPSB+KEkyQ19NU1RfQ05UTF9HRU5f U1RBUlQgfCBJMkNfTVNUX0NOVExfR0VOX1JBQik7CisJd3JpdGVsKHZhbCwgZ2Rldi0+cmVncyAr IEkyQ19NU1RfQ05UTCk7CisKKwlyZXR1cm4gaTJjX2NoZWNrX3N0YXR1cyhnZGV2KTsKK30KKwor c3RhdGljIHUzMiBpMmNfbWFudWFsX3dyaXRlKHN0cnVjdCBncHVfaTJjX2RldiAqZ2RldiwgdTgg ZGF0YSkKK3sKKwl1MzIgdmFsID0gMDsKKworCXdyaXRlbChkYXRhLCBnZGV2LT5yZWdzICsgSTJD X01TVF9EQVRBKTsKKworCXZhbCB8PSBJMkNfTVNUX0NOVExfQ01EX1dSSVRFIHwgKDEgPDwgSTJD X01TVF9DTlRMX0JVUlNUX1NJWkVfU0hJRlQpIHwKKwkJSTJDX01TVF9DTlRMX0dFTl9OQUNLOwor CXZhbCAmPSB+KEkyQ19NU1RfQ05UTF9HRU5fU1RBUlQgfCBJMkNfTVNUX0NOVExfR0VOX1NUT1AK KwkJfCBJMkNfTVNUX0NOVExfR0VOX1JBQik7CisJd3JpdGVsKHZhbCwgZ2Rldi0+cmVncyArIEky Q19NU1RfQ05UTCk7CisKKwlyZXR1cm4gaTJjX2NoZWNrX3N0YXR1cyhnZGV2KTsKK30KKworLyog Z2RldiBpMmMgYWRhcHRlciAqLworc3RhdGljIGludCBncHVfaTJjX21hc3Rlcl94ZmVyKHN0cnVj dCBpMmNfYWRhcHRlciAqYWRhcCwKKwlzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKK3sK KwlzdHJ1Y3QgZ3B1X2kyY19kZXYgKmdkZXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZnZGV2LT5wY2lfZGV2LT5kZXY7CisJaW50IHJldHJ5MWIgPSAx MDsKKwl1MzIgc3RhdHVzOworCWludCBpLCBqOworCisJZGV2X2RiZyhkZXYsICIlczogYWRhcCAl cCBtc2dzICVwIG51bSAlZFxuIiwgX19mdW5jX18sIGFkYXAsIG1zZ3MsIG51bSk7CisKKwltdXRl eF9sb2NrKCZnZGV2LT5tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJ aWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgeworcmV0cnkyOgorCQkJc3RhdHVzID0gaTJj X3JlYWQoZ2RldiwgbXNnc1tpXS5idWYsIG1zZ3NbaV0ubGVuKTsKKwkJCWlmIChzdGF0dXMgIT0g U1RBVFVTX1NVQ0NFU1MpIHsKKwkJCQlkZXZfZXJyKGRldiwKKwkJCQkiJXM6JWQgaTJjX3JlYWQg ZmFpbGVkICUwOGx4IiwgX19mdW5jX18sCisJCQkJX19MSU5FX18sICh1bnNpZ25lZCBsb25nKXN0 YXR1cyk7CisKKwkJCQlpZiAoLS1yZXRyeTFiID4gMCkgeworCQkJCQl1c2xlZXBfcmFuZ2UoMTAw MDAsIDExMDAwKTsKKwkJCQkJZ290byByZXRyeTI7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQor CQkJZ2Rldi0+ZG9fc3RhcnQgPSB0cnVlOworCQl9IGVsc2UgaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJ MkNfTV9TVE9QKSB7CisJCQlzdGF0dXMgPSBpMmNfbWFudWFsX3N0b3AoZ2Rldik7CisJCQlpZiAo c3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCQkJZGV2X2VycihkZXYsCisJCQkJIiVzOiVk IGkyY19tYW51YWxfc3RvcCBmYWlsZWQgJTA4bHgiLCBfX2Z1bmNfXywKKwkJCQlfX0xJTkVfXywg KHVuc2lnbmVkIGxvbmcpc3RhdHVzKTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCQlnZGV2LT5k b19zdGFydCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKGRldiwgIiFJMkNfTV9SRCBz dGFydCAlZCBsZW4gJWRcbiIsCisJCQkJZ2Rldi0+ZG9fc3RhcnQsIG1zZ3NbaV0ubGVuKTsKKwkJ CWlmIChnZGV2LT5kb19zdGFydCkgeworCQkJCXN0YXR1cyA9IGkyY19tYW51YWxfc3RhcnQoZ2Rl diwgbXNnc1tpXS5hZGRyKTsKKwkJCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7CisJ CQkJCWRldl9lcnIoZGV2LAorCQkJCQkiJXM6JWQgaTJjX21hbnVhbF9zdGFydCBmYWlsZWQgJTA4 bHgiLAorCQkJCQkJX19mdW5jX18sIF9fTElORV9fLAorCQkJCQkJKHVuc2lnbmVkIGxvbmcpc3Rh dHVzKTsKKwkJCQkJZ290byBleGl0OworCQkJCX0KKwkJCQlzdGF0dXMgPSBpMmNfbWFudWFsX3dy aXRlKGdkZXYsCisJCQkJCQltc2dzW2ldLmFkZHIgPDwgMSk7CisJCQkJaWYgKHN0YXR1cyAhPSBT VEFUVVNfU1VDQ0VTUykgeworCQkJCQlkZXZfZXJyKGRldiwKKwkJCQkJIiVzOiVkIGkyY19tYW51 YWxfd3JpdGUgZmFpbGVkICUwOGx4IiwKKwkJCQkJCV9fZnVuY19fLCBfX0xJTkVfXywKKwkJCQkJ CSh1bnNpZ25lZCBsb25nKXN0YXR1cyk7CisJCQkJCWdvdG8gZXhpdF9zdG9wOworCQkJCX0KKwkJ CQlnZGV2LT5kb19zdGFydCA9IGZhbHNlOworCQkJfQorCQkJZm9yIChqID0gMDsgaiA8IG1zZ3Nb aV0ubGVuOyBqKyspIHsKKwkJCQlzdGF0dXMgPSBpMmNfbWFudWFsX3dyaXRlKGdkZXYsCisJCQkJ CQkqKG1zZ3NbaV0uYnVmICsgaikpOworCQkJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1Mp IHsKKwkJCQkJZGV2X2VycihkZXYsCisJCQkJCSIlczolZCBpMmNfbWFudWFsX3dyaXRlIGZhaWxl ZCAlMDhseCIsCisJCQkJCQlfX2Z1bmNfXywgX19MSU5FX18sCisJCQkJCQkodW5zaWduZWQgbG9u ZylzdGF0dXMpOworCQkJCQlnb3RvIGV4aXRfc3RvcDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJ Z290byBleGl0OworZXhpdF9zdG9wOgorCXN0YXR1cyA9IGkyY19tYW51YWxfc3RvcChnZGV2KTsK KwlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQorCQlkZXZfZXJyKGRldiwgImkyY19tYW51 YWxfc3RvcCBmYWlsZWQgJXgiLCBzdGF0dXMpOworZXhpdDoKKwltdXRleF91bmxvY2soJmdkZXYt Pm11dGV4KTsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHUzMiBncHVfaTJjX2Z1bmN0aW9uYWxp dHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJ MkNfRlVOQ19TTUJVU19FTVVMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0 aG0gZ3B1X2kyY19hbGdvcml0aG0gPSB7CisJLm1hc3Rlcl94ZmVyCT0gZ3B1X2kyY19tYXN0ZXJf eGZlciwKKwkuZnVuY3Rpb25hbGl0eQk9IGdwdV9pMmNfZnVuY3Rpb25hbGl0eSwKK307CisKK3N0 YXRpYyBpbnQgZ3B1X2kyY19kZXZfaW5pdChzdHJ1Y3QgZ3B1X2kyY19kZXYgKmdkZXYpCit7CisJ Z2Rldi0+ZG9fc3RhcnQgPSB0cnVlOworCisJLyogaW5pdGlhbGl6ZSBtdXRleCAqLworCW11dGV4 X2luaXQoJmdkZXYtPm11dGV4KTsKKworCS8qIGluaXRpYWxpemUgaTJjICovCisJZW5hYmxlX2ky Y19idXMoZ2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGkyY19ib2FyZF9pbmZvIGdw dV9pMmNfdWNzaV9ib2FyZF9pbmZvID0geworCUkyQ19CT0FSRF9JTkZPKCJpMmMtZ3B1LXVjc2ki LCBDQ0dYX0kyQ19ERVZfQUREUkVTUyksCit9OworCisjZGVmaW5lIFBDSV9DTEFTU19TRVJJQUxf VU5LTk9XTgkweDBjODAKKy8qIHBjaSBkcml2ZXIgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNp X2RldmljZV9pZCBncHVfaTJjX2lkc1tdID0geworCXsgUENJX1ZFTkRPUl9JRF9OVklESUEsIFBD SV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCVBDSV9DTEFTU19TRVJJQUxfVU5L Tk9XTiA8PCA4LCAweGZmZmZmZjAwfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShw Y2ksIGdwdV9pMmNfaWRzKTsKKworc3RhdGljIGludCBncHVfaTJjX3Byb2JlKHN0cnVjdCBwY2lf ZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZ3B1 X2kyY19kZXYgKmdkZXY7CisJaW50IHN0YXR1czsKKworCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJ ImRldiAlcCBpZCAlMDh4ICUwOHggc3ViICUwOHggJTA4eCBjbGFzcyAlMDh4ICUwOHhcbiIsCisJ CWRldiwgaWQtPnZlbmRvciwgaWQtPmRldmljZSwgaWQtPnN1YnZlbmRvciwgaWQtPnN1YmRldmlj ZSwKKwkJaWQtPmNsYXNzLCBpZC0+Y2xhc3NfbWFzayk7CisKKwlnZGV2ID0gZGV2bV9remFsbG9j KCZkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBncHVfaTJjX2RldiksIEdGUF9LRVJORUwpOworCWlm ICghZ2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlnZGV2LT5wY2lfZGV2ID0gZGV2OworCXBj aV9zZXRfZHJ2ZGF0YShkZXYsIGdkZXYpOworCisJc3RhdHVzID0gcGNpX2VuYWJsZV9kZXZpY2Uo ZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgInBjaV9lbmFi bGVfZGV2aWNlIGZhaWxlZCAtICVkXG4iLCBzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzOworCX0K KworCXBjaV9zZXRfbWFzdGVyKGRldik7CisKKwlnZGV2LT5yZWdzID0gcGNpX2lvbWFwKGRldiwg MCwgMCk7CisJaWYgKCFnZGV2LT5yZWdzKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAicGNpX2lv bWFwIGZhaWxlZFxuIik7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gaW9tYXBfZXJyOwor CX0KKworCXN0YXR1cyA9IHBjaV9lbmFibGVfbXNpKGRldik7CisJaWYgKHN0YXR1cyA8IDApIHsK KwkJZGV2X2VycigmZGV2LT5kZXYsICJwY2lfZW5hYmxlX21zaSBmYWlsZWQgLSAlZFxuIiwgc3Rh dHVzKTsKKwkJZ290byBlbmFibGVfbXNpX2VycjsKKwl9CisKKwlzdGF0dXMgPSBncHVfaTJjX2Rl dl9pbml0KGdkZXYpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAi Z3B1X2kyY19kZXZfaW5pdCBmYWlsZWQgLSAlZFxuIiwgc3RhdHVzKTsKKwkJZ290byBpMmNfaW5p dF9lcnI7CisJfQorCisJaTJjX3NldF9hZGFwZGF0YSgmZ2Rldi0+YWRhcHRlciwgZ2Rldik7CisJ Z2Rldi0+YWRhcHRlci5vd25lciA9IFRISVNfTU9EVUxFOworCXN0cmxjcHkoZ2Rldi0+YWRhcHRl ci5uYW1lLCAiTlZJRElBIEdQVSBJMkMgYWRhcHRlciIsCisJCXNpemVvZihnZGV2LT5hZGFwdGVy Lm5hbWUpKTsKKwlnZGV2LT5hZGFwdGVyLmFsZ28gPSAmZ3B1X2kyY19hbGdvcml0aG07CisJZ2Rl di0+YWRhcHRlci5kZXYucGFyZW50ID0gJmRldi0+ZGV2OworCXN0YXR1cyA9IGkyY19hZGRfYWRh cHRlcigmZ2Rldi0+YWRhcHRlcik7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGV2X2VycigmZGV2 LT5kZXYsICJpMmNfYWRkX2FkYXB0ZXIgZmFpbGVkIC0gJWRcbiIsIHN0YXR1cyk7CisJCWdvdG8g YWRkX2FkYXB0ZXJfZXJyOworCX0KKworCWdwdV9pMmNfdWNzaV9ib2FyZF9pbmZvLmlycSA9IGRl di0+aXJxOworCWdkZXYtPmNsaWVudCA9IGkyY19uZXdfZGV2aWNlKCZnZGV2LT5hZGFwdGVyLAor CQkJJmdwdV9pMmNfdWNzaV9ib2FyZF9pbmZvKTsKKworCWlmICghZ2Rldi0+Y2xpZW50KSB7CisJ CWRldl9lcnIoJmRldi0+ZGV2LCAiaTJjX25ld19kZXZpY2UgZmFpbGVkIC0gJWRcbiIsIHN0YXR1 cyk7CisJCXN0YXR1cyA9IC1FTk9ERVY7CisJCWdvdG8gYWRkX2FkYXB0ZXJfZXJyOworCX0KKwor CWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGdkZXYpOworCXBtX3J1bnRpbWVfcHV0X25vaWRs ZSgmZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfYWxsb3coJmRldi0+ZGV2KTsKKworCXJldHVybiAw OworCithZGRfYWRhcHRlcl9lcnI6CisJaTJjX2RlbF9hZGFwdGVyKCZnZGV2LT5hZGFwdGVyKTsK K2kyY19pbml0X2VycjoKKwlwY2lfZGlzYWJsZV9tc2koZGV2KTsKK2VuYWJsZV9tc2lfZXJyOgor CXBjaV9pb3VubWFwKGRldiwgZ2Rldi0+cmVncyk7Citpb21hcF9lcnI6CisJcGNpX2Rpc2FibGVf ZGV2aWNlKGRldik7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgZ3B1X2kyY19y ZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZ3B1X2kyY19kZXYgKmdkZXYg PSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKworCWkyY19kZWxfYWRhcHRlcigmZ2Rldi0+YWRhcHRl cik7CisJcGNpX2Rpc2FibGVfbXNpKGRldik7CisJcGNpX2lvdW5tYXAoZGV2LCBnZGV2LT5yZWdz KTsKK30KKworc3RhdGljIGludCBncHVfaTJjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQor eworCWRldl9kYmcoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGdwdV9pMmNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qg Z3B1X2kyY19kZXYgKmdkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRldl9kYmcoZGV2 LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCWVuYWJsZV9pMmNfYnVzKGdkZXYpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgZ3B1X2kyY19pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sK KwlzdHJ1Y3QgZ3B1X2kyY19kZXYgKmdkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlm ICghbXV0ZXhfdHJ5bG9jaygmZ2Rldi0+bXV0ZXgpKSB7CisJCWRldl9pbmZvKGRldiwgIiVzOiAt RUJVU1lcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJbXV0ZXhfdW5sb2Nr KCZnZGV2LT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworVU5JVkVSU0FMX0RFVl9QTV9PUFMo Z3B1X2kyY19kcml2ZXJfcG0sIGdwdV9pMmNfc3VzcGVuZCwgZ3B1X2kyY19yZXN1bWUsCisJZ3B1 X2kyY19pZGxlKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGdwdV9pMmNfZHJpdmVyID0g eworCS5uYW1lCQk9ICJncHVfaTJjX2RyaXZlciIsCisJLmlkX3RhYmxlCT0gZ3B1X2kyY19pZHMs CisJLnByb2JlCQk9IGdwdV9pMmNfcHJvYmUsCisJLnJlbW92ZQkJPSBncHVfaTJjX3JlbW92ZSwK KwkuZHJpdmVyCQk9IHsKKwkJLnBtCT0gJmdwdV9pMmNfZHJpdmVyX3BtLAorCX0sCit9OworCitt b2R1bGVfcGNpX2RyaXZlcihncHVfaTJjX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkFqYXkg R3VwdGEgPGFqYXlnQG52aWRpYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk52aWRpYSBH UFUgSTJDIGNvbnRyb2xsZXIgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cg==