From owner-freebsd-stable@FreeBSD.ORG Sat Oct 4 15:38:26 2008 Return-Path: Delivered-To: freebsd-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 48AB11065687; Sat, 4 Oct 2008 15:38:26 +0000 (UTC) (envelope-from bu7cher@yandex.ru) Received: from webmail38.yandex.ru (webmail38.yandex.ru [77.88.60.17]) by mx1.freebsd.org (Postfix) with ESMTP id 224138FC0C; Sat, 4 Oct 2008 15:38:23 +0000 (UTC) (envelope-from bu7cher@yandex.ru) Received: from YAMAIL (webmail38) by mail.yandex.ru id S7045171AbYJDPiJ for (+ 2 others); Sat, 4 Oct 2008 19:38:09 +0400 X-Yandex-Spam: 1 Received: from [77.72.136.71] ([77.72.136.71]) by mail.yandex.ru with HTTP; Sat, 04 Oct 2008 19:38:09 +0400 From: "Andrey V. Elsukov" To: freebsd-stable@freebsd.org MIME-Version: 1.0 Message-Id: <676151223134689@webmail38.yandex.ru> Date: Sat, 04 Oct 2008 19:38:09 +0400 X-Mailer: Yamail [ http://yandex.ru ] 5.0 Content-Type: multipart/mixed; boundary="----==--bound.67616.webmail38.yandex.ru" X-Mailman-Approved-At: Sat, 04 Oct 2008 15:47:26 +0000 Cc: kib@freebsd.org, sos@freebsd.org Subject: Request for testing: ata(4) MFC X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 04 Oct 2008 15:38:26 -0000 ------==--bound.67616.webmail38.yandex.ru Content-Transfer-Encoding: 7bit Content-Type: text/plain Hi, All. I prepared patch to make MFC of ata(4) driver into RELENG_7 before 7.1-RELEASE. Depending on results of the testing patch will be commited or not (if some regressions will be detected). So if you want or just can test it, please try and report here. -- WBR, Andrey V. Elsukov ------==--bound.67616.webmail38.yandex.ru Content-Disposition: attachment; filename="ata.diff" Content-Transfer-Encoding: base64 Content-Type: application/octet-stream; name="ata.diff" LS0tIHNyYy9zeXMvZGV2L2F0YS9hdGEtYWxsLmMJMjAwOC0wOS0yOSAyMzo1NDozOC4wMDAwMDAw MDAgKzA0MDAKKysrIHNyYy9zeXMvZGV2L2F0YS9hdGEtYWxsLmMJMjAwOC0wOC0xNSAxNDo1NTox MS4wMDAwMDAwMDAgKzA0MDAKQEAgLTEsNSArMSw1IEBACiAvKi0KLSAqIENvcHlyaWdodCAoYykg MTk5OCAtIDIwMDcgU/hyZW4gU2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgorICogQ29weXJpZ2h0 IChjKSAxOTk4IC0gMjAwOCBT+HJlbiBTY2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CiAgKiBBbGwg cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjIsNyArNjIsNiBAQCBzdGF0 aWMgc3RydWN0IGNkZXZzdyBhdGFfY2RldnN3ID0gewogLyogcHJvdG90eXBlcyAqLwogc3RhdGlj IHZvaWQgYXRhX2Jvb3RfYXR0YWNoKHZvaWQpOwogc3RhdGljIGRldmljZV90IGF0YV9hZGRfY2hp bGQoZGV2aWNlX3QsIHN0cnVjdCBhdGFfZGV2aWNlICosIGludCk7Ci1zdGF0aWMgaW50IGF0YV9n ZXRwYXJhbShzdHJ1Y3QgYXRhX2RldmljZSAqLCBpbnQpOwogc3RhdGljIHZvaWQgYnN3YXAoaW50 OF90ICosIGludCk7CiBzdGF0aWMgdm9pZCBidHJpbShpbnQ4X3QgKiwgaW50KTsKIHN0YXRpYyB2 b2lkIGJwYWNrKGludDhfdCAqLCBpbnQ4X3QgKiwgaW50KTsKQEAgLTc1LDYgKzc0LDcgQEAgZGV2 Y2xhc3NfdCBhdGFfZGV2Y2xhc3M7CiB1bWFfem9uZV90IGF0YV9yZXF1ZXN0X3pvbmU7CiB1bWFf em9uZV90IGF0YV9jb21wb3NpdGVfem9uZTsKIGludCBhdGFfd2MgPSAxOworaW50IGF0YV9zZXRt YXggPSAwOwogaW50IGF0YV9kbWFfY2hlY2tfODBwaW4gPSAxOwogCiAvKiBsb2NhbCB2YXJzICov CkBAIC05Niw2ICs5Niw5IEBAIFNZU0NUTF9JTlQoX2h3X2F0YSwgT0lEX0FVVE8sIGF0YXBpX2Rt YSwKIFRVTkFCTEVfSU5UKCJody5hdGEud2MiLCAmYXRhX3djKTsKIFNZU0NUTF9JTlQoX2h3X2F0 YSwgT0lEX0FVVE8sIHdjLCBDVExGTEFHX1JEVFVOLCAmYXRhX3djLCAwLAogCSAgICJBVEEgZGlz ayB3cml0ZSBjYWNoaW5nIik7CitUVU5BQkxFX0lOVCgiaHcuYXRhLnNldG1heCIsICZhdGFfc2V0 bWF4KTsKK1NZU0NUTF9JTlQoX2h3X2F0YSwgT0lEX0FVVE8sIHNldG1heCwgQ1RMRkxBR19SRFRV TiwgJmF0YV9zZXRtYXgsIDAsCisJICAgIkFUQSBkaXNrIHNldCBtYXggbmF0aXZlIGFkZHJlc3Mi KTsKIAogLyoKICAqIG5ld2J1cyBkZXZpY2UgaW50ZXJmYWNlIHJlbGF0ZWQgZnVuY3Rpb25zCkBA IC0xMzEsNiArMTM0LDEwIEBAIGF0YV9hdHRhY2goZGV2aWNlX3QgZGV2KQogICAgIEFUQV9SRVNF VChkZXYpOwogICAgIEFUQV9MT0NLSU5HKGRldiwgQVRBX0xGX1VOTE9DSyk7CiAKKyAgICAvKiBh bGxvY2F0ZSBETUEgcmVzb3VyY2VzIGlmIERNQSBIVyBwcmVzZW50Ki8KKyAgICBpZiAoY2gtPmRt YS5hbGxvYykKKwljaC0+ZG1hLmFsbG9jKGRldik7CisKICAgICAvKiBzZXR1cCBpbnRlcnJ1cHQg ZGVsaXZlcnkgKi8KICAgICByaWQgPSBBVEFfSVJRX1JJRDsKICAgICBjaC0+cl9pcnEgPSBidXNf YWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19JUlEsICZyaWQsCkBAIC00MDksMTMgKzQx NiwxMyBAQCBhdGFfaW9jdGwoc3RydWN0IGNkZXYgKmRldiwgdV9sb25nIGNtZCwgCiAJCWlmIChj aGlsZHJlbltpXSAmJiBkZXZpY2VfaXNfYXR0YWNoZWQoY2hpbGRyZW5baV0pKSB7CiAJCSAgICBz dHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhjaGlsZHJlbltpXSk7 CiAKLQkJICAgIGlmIChhdGFkZXYtPnVuaXQgPT0gQVRBX01BU1RFUikgeworCQkgICAgaWYgKGF0 YWRldi0+dW5pdCA9PSBBVEFfTUFTVEVSKSB7IC8qIFhYWCBTT1MgUE0gKi8KIAkJCXN0cm5jcHko ZGV2aWNlcy0+bmFtZVswXSwKIAkJCQlkZXZpY2VfZ2V0X25hbWV1bml0KGNoaWxkcmVuW2ldKSwg MzIpOwogCQkJYmNvcHkoJmF0YWRldi0+cGFyYW0sICZkZXZpY2VzLT5wYXJhbXNbMF0sCiAJCQkg ICAgICBzaXplb2Yoc3RydWN0IGF0YV9wYXJhbXMpKTsKIAkJICAgIH0KLQkJICAgIGlmIChhdGFk ZXYtPnVuaXQgPT0gQVRBX1NMQVZFKSB7CisJCSAgICBpZiAoYXRhZGV2LT51bml0ID09IEFUQV9T TEFWRSkgeyAvKiBYWFggU09TIFBNICovCiAJCQlzdHJuY3B5KGRldmljZXMtPm5hbWVbMV0sCiAJ CQkJZGV2aWNlX2dldF9uYW1ldW5pdChjaGlsZHJlbltpXSksIDMyKTsKIAkJCWJjb3B5KCZhdGFk ZXYtPnBhcmFtLCAmZGV2aWNlcy0+cGFyYW1zWzFdLApAQCAtNDU3LDYgKzQ2NCw3IEBAIGF0YV9k ZXZpY2VfaW9jdGwoZGV2aWNlX3QgZGV2LCB1X2xvbmcgY20KIAkgICAgZnJlZShidWYsIE1fQVRB KTsKIAkgICAgcmV0dXJuICBFTk9NRU07CiAJfQorCXJlcXVlc3QtPmRldiA9IGF0YWRldi0+ZGV2 OwogCWlmIChpb2NfcmVxdWVzdC0+ZmxhZ3MgJiBBVEFfQ01EX1dSSVRFKSB7CiAJICAgIGVycm9y ID0gY29weWluKGlvY19yZXF1ZXN0LT5kYXRhLCBidWYsIGlvY19yZXF1ZXN0LT5jb3VudCk7CiAJ ICAgIGlmIChlcnJvcikgewpAQCAtNDY1LDcgKzQ3Myw2IEBAIGF0YV9kZXZpY2VfaW9jdGwoZGV2 aWNlX3QgZGV2LCB1X2xvbmcgY20KIAkJcmV0dXJuIGVycm9yOwogCSAgICB9CiAJfQotCXJlcXVl c3QtPmRldiA9IGRldjsKIAlpZiAoaW9jX3JlcXVlc3QtPmZsYWdzICYgQVRBX0NNRF9BVEFQSSkg ewogCSAgICByZXF1ZXN0LT5mbGFncyA9IEFUQV9SX0FUQVBJOwogCSAgICBiY29weShpb2NfcmVx dWVzdC0+dS5hdGFwaS5jY2IsIHJlcXVlc3QtPnUuYXRhcGkuY2NiLCAxNik7CkBAIC01NzQsNyAr NTgxLDcgQEAgYXRhX2FkZF9jaGlsZChkZXZpY2VfdCBwYXJlbnQsIHN0cnVjdCBhdAogICAgIHJl dHVybiBjaGlsZDsKIH0KIAotc3RhdGljIGludAoraW50CiBhdGFfZ2V0cGFyYW0oc3RydWN0IGF0 YV9kZXZpY2UgKmF0YWRldiwgaW50IGluaXQpCiB7CiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpj aCA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoYXRhZGV2LT5kZXYpKTsKQEAg LTU4MiwxMSArNTg5LDkgQEAgYXRhX2dldHBhcmFtKHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYs IAogICAgIHVfaW50OF90IGNvbW1hbmQgPSAwOwogICAgIGludCBlcnJvciA9IEVOT01FTSwgcmV0 cmllcyA9IDI7CiAKLSAgICBpZiAoY2gtPmRldmljZXMgJgotCShhdGFkZXYtPnVuaXQgPT0gQVRB X01BU1RFUiA/IEFUQV9BVEFfTUFTVEVSIDogQVRBX0FUQV9TTEFWRSkpCisgICAgaWYgKGNoLT5k ZXZpY2VzICYgKEFUQV9BVEFfTUFTVEVSIDw8IGF0YWRldi0+dW5pdCkpCiAJY29tbWFuZCA9IEFU QV9BVEFfSURFTlRJRlk7Ci0gICAgaWYgKGNoLT5kZXZpY2VzICYKLQkoYXRhZGV2LT51bml0ID09 IEFUQV9NQVNURVIgPyBBVEFfQVRBUElfTUFTVEVSIDogQVRBX0FUQVBJX1NMQVZFKSkKKyAgICBp ZiAoY2gtPmRldmljZXMgJiAoQVRBX0FUQVBJX01BU1RFUiA8PCBhdGFkZXYtPnVuaXQpKQogCWNv bW1hbmQgPSBBVEFfQVRBUElfSURFTlRJRlk7CiAgICAgaWYgKCFjb21tYW5kKQogCXJldHVybiBF TlhJTzsKQEAgLTYzNiw3ICs2NDEsNyBAQCBhdGFfZ2V0cGFyYW0oc3RydWN0IGF0YV9kZXZpY2Ug KmF0YWRldiwgCiAJaWYgKGJvb3R2ZXJib3NlKQogCSAgICBwcmludGYoImF0YSVkLSVzOiBwaW89 JXMgd2RtYT0lcyB1ZG1hPSVzIGNhYmxlPSVzIHdpcmVcbiIsCiAJCSAgIGRldmljZV9nZXRfdW5p dChjaC0+ZGV2KSwKLQkJICAgYXRhZGV2LT51bml0ID09IEFUQV9NQVNURVIgPyAibWFzdGVyIiA6 ICJzbGF2ZSIsCisJCSAgIGF0YV91bml0MnN0cihhdGFkZXYpLAogCQkgICBhdGFfbW9kZTJzdHIo YXRhX3Btb2RlKGF0YWNhcCkpLAogCQkgICBhdGFfbW9kZTJzdHIoYXRhX3dtb2RlKGF0YWNhcCkp LAogCQkgICBhdGFfbW9kZTJzdHIoYXRhX3Vtb2RlKGF0YWNhcCkpLApAQCAtNjQ4LDEzICs2NTMs MTMgQEAgYXRhX2dldHBhcmFtKHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYsIAogCSAgICBpZiAo KGF0YWRldi0+cGFyYW0uY29uZmlnICYgQVRBX1BST1RPX0FUQVBJKSAmJgogCQkoYXRhZGV2LT5w YXJhbS5jb25maWcgIT0gQVRBX0NGQV9NQUdJQzEpICYmCiAJCShhdGFkZXYtPnBhcmFtLmNvbmZp ZyAhPSBBVEFfQ0ZBX01BR0lDMikpIHsKLQkJaWYgKGF0YXBpX2RtYSAmJiBjaC0+ZG1hICYmCisJ CWlmIChhdGFwaV9kbWEgJiYKIAkJICAgIChhdGFkZXYtPnBhcmFtLmNvbmZpZyAmIEFUQV9EUlFf TUFTSykgIT0gQVRBX0RSUV9JTlRSICYmCiAJCSAgICBhdGFfdW1vZGUoJmF0YWRldi0+cGFyYW0p ID49IEFUQV9VRE1BMikKIAkJICAgIGF0YWRldi0+bW9kZSA9IEFUQV9ETUFfTUFYOwogCSAgICB9 CiAJICAgIGVsc2UgewotCQlpZiAoYXRhX2RtYSAmJiBjaC0+ZG1hICYmCisJCWlmIChhdGFfZG1h ICYmCiAJCSAgICAoYXRhX3Vtb2RlKCZhdGFkZXYtPnBhcmFtKSA+IDAgfHwKIAkJICAgICBhdGFf d21vZGUoJmF0YWRldi0+cGFyYW0pID4gMCkpCiAJCSAgICBhdGFkZXYtPm1vZGUgPSBBVEFfRE1B X01BWDsKQEAgLTY3Miw1MiArNjc3LDQyIEBAIGludAogYXRhX2lkZW50aWZ5KGRldmljZV90IGRl dikKIHsKICAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYp OwotICAgIHN0cnVjdCBhdGFfZGV2aWNlICptYXN0ZXIgPSBOVUxMLCAqc2xhdmUgPSBOVUxMOwot ICAgIGRldmljZV90IG1hc3Rlcl9jaGlsZCA9IE5VTEwsIHNsYXZlX2NoaWxkID0gTlVMTDsKLSAg ICBpbnQgbWFzdGVyX3VuaXQgPSAtMSwgc2xhdmVfdW5pdCA9IC0xOwotCi0gICAgaWYgKGNoLT5k ZXZpY2VzICYgKEFUQV9BVEFfTUFTVEVSIHwgQVRBX0FUQVBJX01BU1RFUikpIHsKLQlpZiAoISht YXN0ZXIgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdGFfZGV2aWNlKSwKLQkJCSAgICAgIE1fQVRB LCBNX05PV0FJVCB8IE1fWkVSTykpKSB7Ci0JICAgIGRldmljZV9wcmludGYoZGV2LCAib3V0IG9m IG1lbW9yeVxuIik7Ci0JICAgIHJldHVybiBFTk9NRU07Ci0JfQotCW1hc3Rlci0+dW5pdCA9IEFU QV9NQVNURVI7Ci0gICAgfQotICAgIGlmIChjaC0+ZGV2aWNlcyAmIChBVEFfQVRBX1NMQVZFIHwg QVRBX0FUQVBJX1NMQVZFKSkgewotCWlmICghKHNsYXZlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qg YXRhX2RldmljZSksCi0JCQkgICAgIE1fQVRBLCBNX05PV0FJVCB8IE1fWkVSTykpKSB7Ci0JICAg IGZyZWUobWFzdGVyLCBNX0FUQSk7Ci0JICAgIGRldmljZV9wcmludGYoZGV2LCAib3V0IG9mIG1l bW9yeVxuIik7Ci0JICAgIHJldHVybiBFTk9NRU07Ci0JfQotCXNsYXZlLT51bml0ID0gQVRBX1NM QVZFOwotICAgIH0KKyAgICBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2aWNlc1tBVEFfUE1dOworICAg IGRldmljZV90IGNoaWxkZGV2c1tBVEFfUE1dOworICAgIGludCBpOwogCisgICAgaWYgKGJvb3R2 ZXJib3NlKQorCWRldmljZV9wcmludGYoZGV2LCAiaWRlbnRpZnkgY2gtPmRldmljZXM9JTA4eFxu IiwgY2gtPmRldmljZXMpOworCisgICAgZm9yIChpID0gMDsgaSA8IEFUQV9QTTsgKytpKSB7CisJ aWYgKGNoLT5kZXZpY2VzICYgKCgoQVRBX0FUQV9NQVNURVIgfCBBVEFfQVRBUElfTUFTVEVSKSA8 PCBpKSkpIHsKKwkgICAgaW50IHVuaXQgPSAtMTsKKworCSAgICBpZiAoIShkZXZpY2VzW2ldID0g bWFsbG9jKHNpemVvZihzdHJ1Y3QgYXRhX2RldmljZSksCisJCQkJICAgICAgTV9BVEEsIE1fTk9X QUlUIHwgTV9aRVJPKSkpIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJvdXQgb2YgbWVtb3J5XG4i KTsKKwkJcmV0dXJuIEVOT01FTTsKKwkgICAgfQorCSAgICBkZXZpY2VzW2ldLT51bml0ID0gaTsK ICNpZmRlZiBBVEFfU1RBVElDX0lECi0gICAgaWYgKGNoLT5kZXZpY2VzICYgQVRBX0FUQV9NQVNU RVIpCi0JbWFzdGVyX3VuaXQgPSAoZGV2aWNlX2dldF91bml0KGRldikgPDwgMSk7Ci0jZW5kaWYK LSAgICBpZiAobWFzdGVyICYmICEobWFzdGVyX2NoaWxkID0gYXRhX2FkZF9jaGlsZChkZXYsIG1h c3RlciwgbWFzdGVyX3VuaXQpKSkgewotCWZyZWUobWFzdGVyLCBNX0FUQSk7Ci0JbWFzdGVyID0g TlVMTDsKLSAgICB9Ci0jaWZkZWYgQVRBX1NUQVRJQ19JRAotICAgIGlmIChjaC0+ZGV2aWNlcyAm IEFUQV9BVEFfU0xBVkUpCi0Jc2xhdmVfdW5pdCA9IChkZXZpY2VfZ2V0X3VuaXQoZGV2KSA8PCAx KSArIDE7CisJICAgIGlmIChjaC0+ZGV2aWNlcyAmICgoQVRBX0FUQV9NQVNURVIgPDwgaSkpKQor CQl1bml0ID0gKGRldmljZV9nZXRfdW5pdChkZXYpIDw8IDEpICsgaTsKICNlbmRpZgotICAgIGlm IChzbGF2ZSAmJiAhKHNsYXZlX2NoaWxkID0gYXRhX2FkZF9jaGlsZChkZXYsIHNsYXZlLCBzbGF2 ZV91bml0KSkpIHsKLQlmcmVlKHNsYXZlLCBNX0FUQSk7Ci0Jc2xhdmUgPSBOVUxMOwotICAgIH0K LQotICAgIGlmIChzbGF2ZSAmJiBhdGFfZ2V0cGFyYW0oc2xhdmUsIDEpKSB7Ci0JZGV2aWNlX2Rl bGV0ZV9jaGlsZChkZXYsIHNsYXZlX2NoaWxkKTsKLQlmcmVlKHNsYXZlLCBNX0FUQSk7Ci0gICAg fQotICAgIGlmIChtYXN0ZXIgJiYgYXRhX2dldHBhcmFtKG1hc3RlciwgMSkpIHsKLQlkZXZpY2Vf ZGVsZXRlX2NoaWxkKGRldiwgbWFzdGVyX2NoaWxkKTsKLQlmcmVlKG1hc3RlciwgTV9BVEEpOwor CSAgICBpZiAoIShjaGlsZGRldnNbaV0gPSBhdGFfYWRkX2NoaWxkKGRldiwgZGV2aWNlc1tpXSwg dW5pdCkpKSB7CisJCWZyZWUoZGV2aWNlc1tpXSwgTV9BVEEpOworCQlkZXZpY2VzW2ldPU5VTEw7 CisJICAgIH0KKwkgICAgZWxzZSB7CisJCWlmIChhdGFfZ2V0cGFyYW0oZGV2aWNlc1tpXSwgMSkp IHsKKwkJICAgIGRldmljZV9kZWxldGVfY2hpbGQoZGV2LCBjaGlsZGRldnNbaV0pOworCQkgICAg ZnJlZShkZXZpY2VzW2ldLCBNX0FUQSk7CisJCSAgICBjaGlsZGRldnNbaV0gPSBOVUxMOworCQkg ICAgZGV2aWNlc1tpXSA9IE5VTEw7CisJCX0KKwkgICAgfQorCX0KKwlkZXZpY2VzW2ldID0gTlVM TDsKKwljaGlsZGRldnNbaV0gPSBOVUxMOwogICAgIH0KIAogICAgIGJ1c19nZW5lcmljX3Byb2Jl KGRldik7CkBAIC04MTUsOCArODEwLDIzIEBAIGF0YV9tb2RpZnlfaWZfNDhiaXQoc3RydWN0IGF0 YV9yZXF1ZXN0ICoKIAljYXNlIEFUQV9GTFVTSENBQ0hFOgogCSAgICByZXF1ZXN0LT51LmF0YS5j b21tYW5kID0gQVRBX0ZMVVNIQ0FDSEU0ODsKIAkgICAgYnJlYWs7Ci0JY2FzZSBBVEFfUkVBRF9O QVRJVkVfTUFYX0FERERSRVNTOgotCSAgICByZXF1ZXN0LT51LmF0YS5jb21tYW5kID0gQVRBX1JF QURfTkFUSVZFX01BWF9BREREUkVTUzQ4OworCWNhc2UgQVRBX1NFVF9NQVhfQUREUkVTUzoKKwkg ICAgcmVxdWVzdC0+dS5hdGEuY29tbWFuZCA9IEFUQV9TRVRfTUFYX0FERFJFU1M0ODsKKwkgICAg YnJlYWs7CisJZGVmYXVsdDoKKwkgICAgcmV0dXJuOworCX0KKwlhdGFkZXYtPmZsYWdzIHw9IEFU QV9EXzQ4QklUX0FDVElWRTsKKyAgICB9CisgICAgZWxzZSBpZiAoYXRhZGV2LT5wYXJhbS5zdXBw b3J0LmNvbW1hbmQyICYgQVRBX1NVUFBPUlRfQUREUkVTUzQ4KSB7CisKKwkvKiB0cmFuc2xhdGUg Y29tbWFuZCBpbnRvIDQ4Yml0IHZlcnNpb24gKi8KKwlzd2l0Y2ggKHJlcXVlc3QtPnUuYXRhLmNv bW1hbmQpIHsKKwljYXNlIEFUQV9GTFVTSENBQ0hFOgorCSAgICByZXF1ZXN0LT51LmF0YS5jb21t YW5kID0gQVRBX0ZMVVNIQ0FDSEU0ODsKKwkgICAgYnJlYWs7CisJY2FzZSBBVEFfUkVBRF9OQVRJ VkVfTUFYX0FERFJFU1M6CisJICAgIHJlcXVlc3QtPnUuYXRhLmNvbW1hbmQgPSBBVEFfUkVBRF9O QVRJVkVfTUFYX0FERFJFU1M0ODsKIAkgICAgYnJlYWs7CiAJY2FzZSBBVEFfU0VUX01BWF9BRERS RVNTOgogCSAgICByZXF1ZXN0LT51LmF0YS5jb21tYW5kID0gQVRBX1NFVF9NQVhfQUREUkVTUzQ4 OwpAQCAtODM5LDYgKzg0OSwxOSBAQCBhdGFfdWRlbGF5KGludCBpbnRlcnZhbCkKIH0KIAogY2hh ciAqCithdGFfdW5pdDJzdHIoc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldikKK3sKKyAgICBzdHJ1 Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChh dGFkZXYtPmRldikpOworICAgIHN0YXRpYyBjaGFyIHN0cls4XTsKKworICAgIGlmIChjaC0+ZGV2 aWNlcyAmIEFUQV9QT1JUTVVMVElQTElFUikKKwlzcHJpbnRmKHN0ciwgInBvcnQlZCIsIGF0YWRl di0+dW5pdCk7CisgICAgZWxzZQorCXNwcmludGYoc3RyLCAiJXMiLCBhdGFkZXYtPnVuaXQgPT0g QVRBX01BU1RFUiA/ICJtYXN0ZXIiIDogInNsYXZlIik7CisgICAgcmV0dXJuIHN0cjsKK30KKwor Y2hhciAqCiBhdGFfbW9kZTJzdHIoaW50IG1vZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7Ci0t LSBzcmMvc3lzL2Rldi9hdGEvYXRhLWFsbC5oCTIwMDgtMDgtMjIgMTI6MDk6MTMuMDAwMDAwMDAw ICswNDAwCisrKyBzcmMvc3lzL2Rldi9hdGEvYXRhLWFsbC5oCTIwMDgtMDgtMTUgMTQ6NTU6MTEu MDAwMDAwMDAwICswNDAwCkBAIC0xLDUgKzEsNSBAQAogLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5 OTggLSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAo YykgMTk5OCAtIDIwMDggU/hyZW4gU2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgogICogQWxsIHJp Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE0OSw2ICsxNDksNyBAQAogLyog U0FUQSBBSENJIHYxLjAgcmVnaXN0ZXIgZGVmaW5lcyAqLwogI2RlZmluZSBBVEFfQUhDSV9DQVAg ICAgICAgICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgICAgICAgICBBVEFfQUhDSV9OUE1BU0sg ICAgICAgICAweDFmCisjZGVmaW5lCQlBVEFfQUhDSV9DQVBfU1BNCTB4MDAwMjAwMDAKICNkZWZp bmUJCUFUQV9BSENJX0NBUF9DTE8JMHgwMTAwMDAwMAogI2RlZmluZQkJQVRBX0FIQ0lfQ0FQXzY0 QklUCTB4ODAwMDAwMDAKIApAQCAtMjIwLDEzICsyMjEsMTQgQEAKICNkZWZpbmUgQVRBX0FIQ0lf UF9TRVJSICAgICAgICAgICAgICAgICAweDEzMAogI2RlZmluZSBBVEFfQUhDSV9QX1NBQ1QgICAg ICAgICAgICAgICAgIDB4MTM0CiAjZGVmaW5lIEFUQV9BSENJX1BfQ0kgICAgICAgICAgICAgICAg ICAgMHgxMzgKKyNkZWZpbmUgQVRBX0FIQ0lfUF9TTlRGICAgICAgICAgICAgICAgICAweDEzQwor I2RlZmluZSBBVEFfQUhDSV9QX0ZCUyAgICAgICAgICAgICAgICAgIDB4MTQwCiAKICNkZWZpbmUg QVRBX0FIQ0lfQ0xfU0laRSAgICAgICAgICAgICAgICAzMgogI2RlZmluZSBBVEFfQUhDSV9DTF9P RkZTRVQgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQVRBX0FIQ0lfRkJfT0ZGU0VUICAgICAgICAg ICAgICAxMDI0Ci0jZGVmaW5lIEFUQV9BSENJX0NUX09GRlNFVCAgICAgICAgICAgICAgMTAyNCsy NTYKLSNkZWZpbmUgQVRBX0FIQ0lfQ1RfU0dfT0ZGU0VUICAgICAgICAgICAxMjgKLSNkZWZpbmUg QVRBX0FIQ0lfQ1RfU0laRSAgICAgICAgICAgICAgICAyNTYKKyNkZWZpbmUgQVRBX0FIQ0lfRkJf T0ZGU0VUICAgICAgICAgICAgICAoQVRBX0FIQ0lfQ0xfU0laRSAqIDMyKQorI2RlZmluZSBBVEFf QUhDSV9DVF9PRkZTRVQgICAgICAgICAgICAgIChBVEFfQUhDSV9GQl9PRkZTRVQgKyA0MDk2KQor I2RlZmluZSBBVEFfQUhDSV9DVF9TSVpFICAgICAgICAgICAgICAgICgxMDI0ICsgMTI4KQogCiBz dHJ1Y3QgYXRhX2FoY2lfZG1hX3ByZCB7CiAgICAgdV9pbnQ2NF90ICAgICAgICAgICAgICAgICAg IGRiYTsKQEAgLTI0MCwxMSArMjQyLDE5IEBAIHN0cnVjdCBhdGFfYWhjaV9jbWRfdGFiIHsKICAg ICB1X2ludDhfdCAgICAgICAgICAgICAgICAgICAgY2Zpc1s2NF07CiAgICAgdV9pbnQ4X3QgICAg ICAgICAgICAgICAgICAgIGFjbWRbMzJdOwogICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAg ICByZXNlcnZlZFszMl07Ci0gICAgc3RydWN0IGF0YV9haGNpX2RtYV9wcmQgICAgIHByZF90YWJb MTZdOworI2RlZmluZSBBVEFfQUhDSV9ETUFfRU5UUklFUyAgICAgICAgICAgIDY0CisgICAgc3Ry dWN0IGF0YV9haGNpX2RtYV9wcmQgICAgIHByZF90YWJbQVRBX0FIQ0lfRE1BX0VOVFJJRVNdOwog fSBfX3BhY2tlZDsKIAogc3RydWN0IGF0YV9haGNpX2NtZF9saXN0IHsKICAgICB1X2ludDE2X3Qg ICAgICAgICAgICAgICAgICAgY21kX2ZsYWdzOworI2RlZmluZSBBVEFfQUhDSV9DTURfQVRBUEkJ CTB4MDAyMAorI2RlZmluZSBBVEFfQUhDSV9DTURfV1JJVEUJCTB4MDA0MAorI2RlZmluZSBBVEFf QUhDSV9DTURfUFJFRkVUQ0gJCTB4MDA4MAorI2RlZmluZSBBVEFfQUhDSV9DTURfUkVTRVQJCTB4 MDEwMAorI2RlZmluZSBBVEFfQUhDSV9DTURfQklTVAkJMHgwMjAwCisjZGVmaW5lIEFUQV9BSENJ X0NNRF9DTFJfQlVTWQkJMHgwNDAwCisKICAgICB1X2ludDE2X3QgICAgICAgICAgICAgICAgICAg cHJkX2xlbmd0aDsgICAgIC8qIFBSRCBlbnRyaWVzICovCiAgICAgdV9pbnQzMl90ICAgICAgICAg ICAgICAgICAgIGJ5dGVjb3VudDsKICAgICB1X2ludDY0X3QgICAgICAgICAgICAgICAgICAgY21k X3RhYmxlX3BoeXM7IC8qIDEyOGJ5dGUgYWxpZ25lZCAqLwpAQCAtMjkxLDcgKzMwMSw3IEBAIHN0 cnVjdCBhdGFfYWhjaV9jbWRfbGlzdCB7CiAjZGVmaW5lIEFUQV9QQzk4X0NUTEFERFJfUklEICAg ICAgICAgICAgOAogI2RlZmluZSBBVEFfUEM5OF9CQU5LQUREUl9SSUQgICAgICAgICAgIDkKICNk ZWZpbmUgQVRBX0lSUV9SSUQgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIEFUQV9ERVYo ZGV2aWNlKSAgICAgICAgICAgICAgICAgKChkZXZpY2UgPT0gQVRBX01BU1RFUikgPyAwIDogMSkK KyNkZWZpbmUgQVRBX0RFVih1bml0KSAgICAgICAgICAgICAgICAgICAoKHVuaXQgPiAwKSA/IDB4 MTAgOiAwKQogI2RlZmluZSBBVEFfQ0ZBX01BR0lDMSAgICAgICAgICAgICAgICAgIDB4ODQ0QQog I2RlZmluZSBBVEFfQ0ZBX01BR0lDMiAgICAgICAgICAgICAgICAgIDB4ODQ4QQogI2RlZmluZSBB VEFfQ0ZBX01BR0lDMyAgICAgICAgICAgICAgICAgIDB4ODQwMApAQCAtMzQzLDYgKzM1Myw3IEBA IHN0cnVjdCBhdGFfcmVxdWVzdCB7CiAgICAgdV9pbnQzMl90ICAgICAgICAgICAgICAgICAgIGJ5 dGVjb3VudDsgICAgICAvKiBieXRlcyB0byB0cmFuc2ZlciAqLwogICAgIHVfaW50MzJfdCAgICAg ICAgICAgICAgICAgICB0cmFuc2ZlcnNpemU7ICAgLyogYnl0ZXMgcHIgdHJhbnNmZXIgKi8KICAg ICBjYWRkcl90ICAgICAgICAgICAgICAgICAgICAgZGF0YTsgICAgICAgICAgIC8qIHBvaW50ZXIg dG8gZGF0YSBidWYgKi8KKyAgICB1X2ludDMyX3QgICAgICAgICAgICAgICAgICAgdGFnOyAgICAg ICAgICAgIC8qIEhXIHRhZyBvZiB0aGlzIHJlcXVlc3QgKi8KICAgICBpbnQgICAgICAgICAgICAg ICAgICAgICAgICAgZmxhZ3M7CiAjZGVmaW5lICAgICAgICAgQVRBX1JfQ09OVFJPTCAgICAgICAg ICAgMHgwMDAwMDAwMQogI2RlZmluZSAgICAgICAgIEFUQV9SX1JFQUQgICAgICAgICAgICAgIDB4 MDAwMDAwMDIKQEAgLTM2Miw5ICszNzMsOSBAQCBzdHJ1Y3QgYXRhX3JlcXVlc3QgewogI2RlZmlu ZSAgICAgICAgIEFUQV9SX0RBTkdFUjEgICAgICAgICAgIDB4MjAwMDAwMDAKICNkZWZpbmUgICAg ICAgICBBVEFfUl9EQU5HRVIyICAgICAgICAgICAweDQwMDAwMDAwCiAKKyAgICBzdHJ1Y3QgYXRh X2RtYXNsb3QgICAgICAgICAgKmRtYTsgICAgICAgICAgIC8qIERNQSBzbG90IG9mIHRoaXMgcmVx dWVzdCAqLwogICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICBzdGF0dXM7ICAgICAgICAg LyogQVRBIHN0YXR1cyAqLwogICAgIHVfaW50OF90ICAgICAgICAgICAgICAgICAgICBlcnJvcjsg ICAgICAgICAgLyogQVRBIGVycm9yICovCi0gICAgdV9pbnQ4X3QgICAgICAgICAgICAgICAgICAg IGRtYXN0YXQ7ICAgICAgICAvKiBETUEgc3RhdHVzICovCiAgICAgdV9pbnQzMl90ICAgICAgICAg ICAgICAgICAgIGRvbmVjb3VudDsgICAgICAvKiBieXRlcyB0cmFuc2ZlcnJlZCAqLwogICAgIGlu dCAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ7ICAgICAgICAgLyogcmVzdWx0IGVycm9y IGNvZGUgKi8KICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgKCpjYWxsYmFjaykoc3Ry dWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKQEAgLTM5OCw3ICs0MDksOCBAQCBzdHJ1Y3QgYXRh X2RldmljZSB7CiAgICAgZGV2aWNlX3QgICAgICAgICAgICAgICAgICAgIGRldjsgICAgICAgICAg ICAvKiBkZXZpY2UgaGFuZGxlICovCiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHVu aXQ7ICAgICAgICAgICAvKiBwaHlzaWNhbCB1bml0ICovCiAjZGVmaW5lICAgICAgICAgQVRBX01B U1RFUiAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSAgICAgICAgIEFUQV9TTEFWRSAgICAgICAg ICAgICAgIDB4MTAKKyNkZWZpbmUgICAgICAgICBBVEFfU0xBVkUgICAgICAgICAgICAgICAweDAx CisjZGVmaW5lICAgICAgICAgQVRBX1BNICAgICAgICAgICAgICAgICAgMHgwZgogCiAgICAgc3Ry dWN0IGF0YV9wYXJhbXMgICAgICAgICAgIHBhcmFtOyAgICAgICAgICAvKiBhdGEgcGFyYW0gc3Ry dWN0dXJlICovCiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU7ICAgICAgICAg ICAvKiBjdXJyZW50IHRyYW5zZmVybW9kZSAqLwpAQCAtNDI2LDQzICs0MzgsNTAgQEAgc3RydWN0 IGF0YV9kbWFzZXRwcmRfYXJncyB7CiAgICAgaW50IGVycm9yOwogfTsKIAotLyogc3RydWN0dXJl IGhvbGRpbmcgRE1BIHJlbGF0ZWQgaW5mb3JtYXRpb24gKi8KLXN0cnVjdCBhdGFfZG1hIHsKLSAg ICBidXNfZG1hX3RhZ190ICAgICAgICAgICAgICAgZG1hdGFnOyAgICAgICAgIC8qIHBhcmVudCBE TUEgdGFnICovCitzdHJ1Y3QgYXRhX2RtYXNsb3QgeworICAgIHVfaW50OF90ICAgICAgICAgICAg ICAgICAgICBzdGF0dXM7ICAgICAgICAgLyogRE1BIHN0YXR1cyAqLwogICAgIGJ1c19kbWFfdGFn X3QgICAgICAgICAgICAgICBzZ190YWc7ICAgICAgICAgLyogU0cgbGlzdCBETUEgdGFnICovCiAg ICAgYnVzX2RtYW1hcF90ICAgICAgICAgICAgICAgIHNnX21hcDsgICAgICAgICAvKiBTRyBsaXN0 IERNQSBtYXAgKi8KICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgKnNnOyAgICAgICAg ICAgIC8qIERNQSB0cmFuc2ZlciB0YWJsZSAqLwogICAgIGJ1c19hZGRyX3QgICAgICAgICAgICAg ICAgICBzZ19idXM7ICAgICAgICAgLyogYnVzIGFkZHJlc3Mgb2YgZG1hdGFiICovCiAgICAgYnVz X2RtYV90YWdfdCAgICAgICAgICAgICAgIGRhdGFfdGFnOyAgICAgICAvKiBkYXRhIERNQSB0YWcg Ki8KICAgICBidXNfZG1hbWFwX3QgICAgICAgICAgICAgICAgZGF0YV9tYXA7ICAgICAgIC8qIGRh dGEgRE1BIG1hcCAqLworfTsKKworLyogc3RydWN0dXJlIGhvbGRpbmcgRE1BIHJlbGF0ZWQgaW5m b3JtYXRpb24gKi8KK3N0cnVjdCBhdGFfZG1hIHsKKyAgICBidXNfZG1hX3RhZ190ICAgICAgICAg ICAgICAgZG1hdGFnOyAgICAgICAgIC8qIHBhcmVudCBETUEgdGFnICovCiAgICAgYnVzX2RtYV90 YWdfdCAgICAgICAgICAgICAgIHdvcmtfdGFnOyAgICAgICAvKiB3b3Jrc3BhY2UgRE1BIHRhZyAq LwogICAgIGJ1c19kbWFtYXBfdCAgICAgICAgICAgICAgICB3b3JrX21hcDsgICAgICAgLyogd29y a3NwYWNlIERNQSBtYXAgKi8KICAgICB1X2ludDhfdCAgICAgICAgICAgICAgICAgICAgKndvcms7 ICAgICAgICAgIC8qIHdvcmtzcGFjZSAqLwogICAgIGJ1c19hZGRyX3QgICAgICAgICAgICAgICAg ICB3b3JrX2J1czsgICAgICAgLyogYnVzIGFkZHJlc3Mgb2YgZG1hdGFiICovCiAKKyNkZWZpbmUg QVRBX0RNQV9TTE9UUwkJCTMyCisgICAgaW50CQkJCWRtYV9zbG90czsJLyogRE1BIHNsb3RzIGFs bG9jYXRlZCAqLworICAgIHN0cnVjdCBhdGFfZG1hc2xvdAkJc2xvdFtBVEFfRE1BX1NMT1RTXTsK ICAgICB1X2ludDMyX3QgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OyAgICAgIC8qIERNQSBT RyBsaXN0IGFsaWdubWVudCAqLwogICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICBib3Vu ZGFyeTsgICAgICAgLyogRE1BIFNHIGxpc3QgYm91bmRhcnkgKi8KICAgICB1X2ludDMyX3QgICAg ICAgICAgICAgICAgICAgc2Vnc2l6ZTsgICAgICAgIC8qIERNQSBTRyBsaXN0IHNlZ21lbnQgc2l6 ZSAqLwogICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICBtYXhfaW9zaXplOyAgICAgLyog RE1BIGRhdGEgbWF4IElPIHNpemUgKi8KLSAgICB1X2ludDMyX3QgICAgICAgICAgICAgICAgICAg Y3VyX2lvc2l6ZTsgICAgIC8qIERNQSBkYXRhIGN1cnJlbnQgSU8gc2l6ZSAqLwogICAgIHVfaW50 NjRfdCAgICAgICAgICAgICAgICAgICBtYXhfYWRkcmVzczsgICAgLyogaGlnaGVzdCBETUEnYWJs ZSBhZGRyZXNzICovCiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzOwotI2Rl ZmluZSBBVEFfRE1BX1JFQUQgICAgICAgICAgICAgICAgICAgIDB4MDEgICAgLyogdHJhbnNhY3Rp b24gaXMgYSByZWFkICovCi0jZGVmaW5lIEFUQV9ETUFfTE9BREVEICAgICAgICAgICAgICAgICAg MHgwMiAgICAvKiBETUEgdGFibGVzIGV0YyBsb2FkZWQgKi8KLSNkZWZpbmUgQVRBX0RNQV9BQ1RJ VkUgICAgICAgICAgICAgICAgICAweDA0ICAgIC8qIERNQSB0cmFuc2ZlciBpbiBwcm9ncmVzcyAq LworI2RlZmluZSBBVEFfRE1BX0FDVElWRSAgICAgICAgICAgICAgICAgIDB4MDEgICAgLyogRE1B IHRyYW5zZmVyIGluIHByb2dyZXNzICovCiAKICAgICB2b2lkICgqYWxsb2MpKGRldmljZV90IGRl dik7CiAgICAgdm9pZCAoKmZyZWUpKGRldmljZV90IGRldik7CiAgICAgdm9pZCAoKnNldHByZCko dm9pZCAqeHNjLCBidXNfZG1hX3NlZ21lbnRfdCAqc2VncywgaW50IG5zZWdzLCBpbnQgZXJyb3Ip OwotICAgIGludCAoKmxvYWQpKGRldmljZV90IGRldiwgY2FkZHJfdCBkYXRhLCBpbnQzMl90IGNv dW50LCBpbnQgZGlyLCB2b2lkICphZGRyLCBpbnQgKm5zZWdzKTsKLSAgICBpbnQgKCp1bmxvYWQp KGRldmljZV90IGRldik7Ci0gICAgaW50ICgqc3RhcnQpKGRldmljZV90IGRldik7Ci0gICAgaW50 ICgqc3RvcCkoZGV2aWNlX3QgZGV2KTsKKyAgICBpbnQgKCpsb2FkKShzdHJ1Y3QgYXRhX3JlcXVl c3QgKnJlcXVlc3QsIHZvaWQgKmFkZHIsIGludCAqbnNlZ3MpOworICAgIGludCAoKnVubG9hZCko c3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKKyAgICBpbnQgKCpzdGFydCkoc3RydWN0IGF0 YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKKyAgICBpbnQgKCpzdG9wKShzdHJ1Y3QgYXRhX3JlcXVlc3Qg KnJlcXVlc3QpOwogICAgIHZvaWQgKCpyZXNldCkoZGV2aWNlX3QgZGV2KTsKIH07CiAKIC8qIHN0 cnVjdHVyZSBob2xkaW5nIGxvd2xldmVsIGZ1bmN0aW9ucyAqLwogc3RydWN0IGF0YV9sb3dsZXZl bCB7CisgICAgdV9pbnQzMl90ICgqc29mdHJlc2V0KShkZXZpY2VfdCBkZXYsIGludCBwbXBvcnQp OworICAgIGludCAoKnBtX3JlYWQpKGRldmljZV90IGRldiwgaW50IHBvcnQsIGludCByZWcsIHVf aW50MzJfdCAqcmVzdWx0KTsKKyAgICBpbnQgKCpwbV93cml0ZSkoZGV2aWNlX3QgZGV2LCBpbnQg cG9ydCwgaW50IHJlZywgdV9pbnQzMl90IHZhbHVlKTsKICAgICBpbnQgKCpzdGF0dXMpKGRldmlj ZV90IGRldik7CiAgICAgaW50ICgqYmVnaW5fdHJhbnNhY3Rpb24pKHN0cnVjdCBhdGFfcmVxdWVz dCAqcmVxdWVzdCk7CiAgICAgaW50ICgqZW5kX3RyYW5zYWN0aW9uKShzdHJ1Y3QgYXRhX3JlcXVl c3QgKnJlcXVlc3QpOwpAQCAtNDg1LDcgKzUwNCw3IEBAIHN0cnVjdCBhdGFfY2hhbm5lbCB7CiAg ICAgc3RydWN0IHJlc291cmNlICAgICAgICAgICAgICpyX2lycTsgICAgICAgICAvKiBpbnRlcnJ1 cHQgb2YgdGhpcyBjaGFubmVsICovCiAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICpp aDsgICAgICAgICAgICAvKiBpbnRlcnJ1cHQgaGFuZGxlICovCiAgICAgc3RydWN0IGF0YV9sb3ds ZXZlbCAgICAgICAgIGh3OyAgICAgICAgICAgICAvKiBsb3dsZXZlbCBIVyBmdW5jdGlvbnMgKi8K LSAgICBzdHJ1Y3QgYXRhX2RtYSAgICAgICAgICAgICAgKmRtYTsgICAgICAgICAgIC8qIERNQSBk YXRhIC8gZnVuY3Rpb25zICovCisgICAgc3RydWN0IGF0YV9kbWEgICAgICAgICAgICAgIGRtYTsg ICAgICAgICAgICAvKiBETUEgZGF0YSAvIGZ1bmN0aW9ucyAqLwogICAgIGludCAgICAgICAgICAg ICAgICAgICAgICAgICBmbGFnczsgICAgICAgICAgLyogY2hhbm5lbCBmbGFncyAqLwogI2RlZmlu ZSAgICAgICAgIEFUQV9OT19TTEFWRSAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgICAgICAgICBB VEFfVVNFXzE2QklUICAgICAgICAgICAweDAyCkBAIC00OTQsMTEgKzUxMywxMSBAQCBzdHJ1Y3Qg YXRhX2NoYW5uZWwgewogI2RlZmluZSAgICAgICAgIEFUQV9BTFdBWVNfRE1BU1RBVCAgICAgIDB4 MTAKIAogICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VzOyAgICAgICAgLyog d2hhdCBpcyBwcmVzZW50ICovCi0jZGVmaW5lICAgICAgICAgQVRBX0FUQV9NQVNURVIgICAgICAg ICAgMHgwMQotI2RlZmluZSAgICAgICAgIEFUQV9BVEFfU0xBVkUgICAgICAgICAgIDB4MDIKLSNk ZWZpbmUgICAgICAgICBBVEFfQVRBUElfTUFTVEVSICAgICAgICAweDA0Ci0jZGVmaW5lICAgICAg ICAgQVRBX0FUQVBJX1NMQVZFICAgICAgICAgMHgwOAotI2RlZmluZSAgICAgICAgIEFUQV9QT1JU TVVMVElQTElFUiAgICAgIDB4MTAKKyNkZWZpbmUgICAgICAgICBBVEFfQVRBX01BU1RFUiAgICAg ICAgICAweDAwMDAwMDAxCisjZGVmaW5lICAgICAgICAgQVRBX0FUQV9TTEFWRSAgICAgICAgICAg MHgwMDAwMDAwMgorI2RlZmluZSAgICAgICAgIEFUQV9QT1JUTVVMVElQTElFUiAgICAgIDB4MDAw MDgwMDAKKyNkZWZpbmUgICAgICAgICBBVEFfQVRBUElfTUFTVEVSICAgICAgICAweDAwMDEwMDAw CisjZGVmaW5lICAgICAgICAgQVRBX0FUQVBJX1NMQVZFICAgICAgICAgMHgwMDAyMDAwMAogCiAg ICAgc3RydWN0IG10eCAgICAgICAgICAgICAgICAgIHN0YXRlX210eDsgICAgICAvKiBzdGF0ZSBs b2NrICovCiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOyAgICAgICAgICAv KiBBVEEgY2hhbm5lbCBzdGF0ZSAqLwpAQCAtNTI0LDYgKzU0Myw3IEBAIGV4dGVybiBpbnQgKCph dGFfcmFpZF9pb2N0bF9mdW5jKSh1X2xvbmcKIGV4dGVybiBzdHJ1Y3QgaW50cl9jb25maWdfaG9v ayAqYXRhX2RlbGF5ZWRfYXR0YWNoOwogZXh0ZXJuIGRldmNsYXNzX3QgYXRhX2RldmNsYXNzOwog ZXh0ZXJuIGludCBhdGFfd2M7CitleHRlcm4gaW50IGF0YV9zZXRtYXg7CiBleHRlcm4gaW50IGF0 YV9kbWFfY2hlY2tfODBwaW47CiAKIC8qIHB1YmxpYyBwcm90b3R5cGVzICovCkBAIC01MzYsMTAg KzU1NiwxMiBAQCBpbnQgYXRhX3N1c3BlbmQoZGV2aWNlX3QgZGV2KTsKIGludCBhdGFfcmVzdW1l KGRldmljZV90IGRldik7CiBpbnQgYXRhX2ludGVycnVwdCh2b2lkICpkYXRhKTsKIGludCBhdGFf ZGV2aWNlX2lvY3RsKGRldmljZV90IGRldiwgdV9sb25nIGNtZCwgY2FkZHJfdCBkYXRhKTsKK2lu dCBhdGFfZ2V0cGFyYW0oc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiwgaW50IGluaXQpOwogaW50 IGF0YV9pZGVudGlmeShkZXZpY2VfdCBkZXYpOwogdm9pZCBhdGFfZGVmYXVsdF9yZWdpc3RlcnMo ZGV2aWNlX3QgZGV2KTsKIHZvaWQgYXRhX21vZGlmeV9pZl80OGJpdChzdHJ1Y3QgYXRhX3JlcXVl c3QgKnJlcXVlc3QpOwogdm9pZCBhdGFfdWRlbGF5KGludCBpbnRlcnZhbCk7CitjaGFyICphdGFf dW5pdDJzdHIoc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldik7CiBjaGFyICphdGFfbW9kZTJzdHIo aW50IG1vZGUpOwogaW50IGF0YV9wbW9kZShzdHJ1Y3QgYXRhX3BhcmFtcyAqYXApOwogaW50IGF0 YV93bW9kZShzdHJ1Y3QgYXRhX3BhcmFtcyAqYXApOwpAQCAtNTcxLDYgKzU5Myw3IEBAIGV4dGVy biB1bWFfem9uZV90IGF0YV9yZXF1ZXN0X3pvbmU7CiAJaWYgKCEocmVxdWVzdC0+ZmxhZ3MgJiBB VEFfUl9EQU5HRVIyKSkgXAogCSAgICB1bWFfemZyZWUoYXRhX3JlcXVlc3Rfem9uZSwgcmVxdWVz dCk7IFwKIAl9CisKIC8qIG1hY3JvcyBmb3IgYWxsb2MvZnJlZSBvZiBzdHJ1Y3QgYXRhX2NvbXBv c2l0ZSAqLwogZXh0ZXJuIHVtYV96b25lX3QgYXRhX2NvbXBvc2l0ZV96b25lOwogI2RlZmluZSBh dGFfYWxsb2NfY29tcG9zaXRlKCkgdW1hX3phbGxvYyhhdGFfY29tcG9zaXRlX3pvbmUsIE1fTk9X QUlUIHwgTV9aRVJPKQotLS0gc3JjL3N5cy9kZXYvYXRhL2F0YS1jYXJkLmMJMjAwNy0wMi0yMSAy MjowNzoxOC4wMDAwMDAwMDAgKzAzMDAKKysrIHNyYy9zeXMvZGV2L2F0YS9hdGEtY2FyZC5jCTIw MDgtMDQtMTAgMTc6MDU6MDQuMDAwMDAwMDAwICswNDAwCkBAIC0xLDUgKzEsNSBAQAogLyotCi0g KiBDb3B5cmlnaHQgKGMpIDE5OTggLSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNELm9y Zz4KKyAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDggU/hyZW4gU2NobWlkdCA8c29zQEZyZWVC U0Qub3JnPgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS0tIHNy Yy9zeXMvZGV2L2F0YS9hdGEtY2J1cy5jCTIwMDctMDItMjMgMTU6MTg6MzIuMDAwMDAwMDAwICsw MzAwCisrKyBzcmMvc3lzL2Rldi9hdGEvYXRhLWNidXMuYwkyMDA4LTA0LTEwIDE3OjA1OjA1LjAw MDAwMDAwMCArMDQwMApAQCAtMSw1ICsxLDUgQEAKIC8qLQotICogQ29weXJpZ2h0IChjKSAyMDAy IC0gMjAwNyBT+HJlbiBTY2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CisgKiBDb3B5cmlnaHQgKGMp IDIwMDIgLSAyMDA4IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KICAqIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0tLSBzcmMvc3lzL2Rldi9hdGEvYXRhLWNo aXBzZXQuYwkyMDA4LTA5LTEzIDExOjM2OjE2LjAwMDAwMDAwMCArMDQwMAorKysgc3JjL3N5cy9k ZXYvYXRhL2F0YS1jaGlwc2V0LmMJMjAwOC0wOS0yNiAxMToyOTo0OC4wMDAwMDAwMDAgKzA0MDAK QEAgLTEsNSArMSw1IEBACiAvKi0KLSAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDcgU/hyZW4g U2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgorICogQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwOCBT +HJlbiBTY2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgog ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dApAQCAtNjIsMTAgKzYyLDE1IEBAIHN0YXRpYyBpbnQgYXRhX3NhdGFf Y29ubmVjdChzdHJ1Y3QgYXRhX2MKIHN0YXRpYyB2b2lkIGF0YV9zYXRhX3NldG1vZGUoZGV2aWNl X3QgZGV2LCBpbnQgbW9kZSk7CiBzdGF0aWMgaW50IGF0YV9yZXF1ZXN0MmZpc19oMmQoc3RydWN0 IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0LCB1X2ludDhfdCAqZmlzKTsKIHN0YXRpYyBpbnQgYXRhX2Fo Y2lfY2hpcGluaXQoZGV2aWNlX3QgZGV2KTsKK3N0YXRpYyBpbnQgYXRhX2FoY2lfY3Rscl9yZXNl dChkZXZpY2VfdCBkZXYpOworc3RhdGljIGludCBhdGFfYWhjaV9zdXNwZW5kKGRldmljZV90IGRl dik7CiBzdGF0aWMgaW50IGF0YV9haGNpX2FsbG9jYXRlKGRldmljZV90IGRldik7CiBzdGF0aWMg aW50IGF0YV9haGNpX3N0YXR1cyhkZXZpY2VfdCBkZXYpOwogc3RhdGljIGludCBhdGFfYWhjaV9i ZWdpbl90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpOwogc3RhdGljIGlu dCBhdGFfYWhjaV9lbmRfdHJhbnNhY3Rpb24oc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KTsK K3N0YXRpYyBpbnQgYXRhX2FoY2lfcG1fcmVhZChkZXZpY2VfdCBkZXYsIGludCBwb3J0LCBpbnQg cmVnLCB1X2ludDMyX3QgKnJlc3VsdCk7CitzdGF0aWMgaW50IGF0YV9haGNpX3BtX3dyaXRlKGRl dmljZV90IGRldiwgaW50IHBvcnQsIGludCByZWcsIHVfaW50MzJfdCByZXN1bHQpOworc3RhdGlj IHVfaW50MzJfdCBhdGFfYWhjaV9zb2Z0cmVzZXQoZGV2aWNlX3QgZGV2LCBpbnQgcG9ydCk7CiBz dGF0aWMgdm9pZCBhdGFfYWhjaV9yZXNldChkZXZpY2VfdCBkZXYpOwogc3RhdGljIHZvaWQgYXRh X2FoY2lfZG1hc2V0cHJkKHZvaWQgKnhzYywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBu c2VncywgaW50IGVycm9yKTsKIHN0YXRpYyB2b2lkIGF0YV9haGNpX2RtYWluaXQoZGV2aWNlX3Qg ZGV2KTsKQEAgLTEwMiw3ICsxMDcsOCBAQCBzdGF0aWMgaW50IGF0YV9pbnRlbF8zMTI0NF9zdGF0 dXMoZGV2aWNlCiBzdGF0aWMgdm9pZCBhdGFfaW50ZWxfMzEyNDRfdGZfd3JpdGUoc3RydWN0IGF0 YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKIHN0YXRpYyB2b2lkIGF0YV9pbnRlbF8zMTI0NF9yZXNldChk ZXZpY2VfdCBkZXYpOwogc3RhdGljIGludCBhdGFfaXRlX2NoaXBpbml0KGRldmljZV90IGRldik7 Ci1zdGF0aWMgdm9pZCBhdGFfaXRlX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7Citz dGF0aWMgdm9pZCBhdGFfaXRlXzgyMTNfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKTsK K3N0YXRpYyB2b2lkIGF0YV9pdGVfODIxeF9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUp Owogc3RhdGljIGludCBhdGFfam1pY3Jvbl9jaGlwaW5pdChkZXZpY2VfdCBkZXYpOwogc3RhdGlj IGludCBhdGFfam1pY3Jvbl9hbGxvY2F0ZShkZXZpY2VfdCBkZXYpOwogc3RhdGljIHZvaWQgYXRh X2ptaWNyb25fcmVzZXQoZGV2aWNlX3QgZGV2KTsKQEAgLTEzMCw4ICsxMzYsOCBAQCBzdGF0aWMg dm9pZCBhdGFfbnZpZGlhX3Jlc2V0KGRldmljZV90IGRlCiBzdGF0aWMgaW50IGF0YV9wcm9taXNl X2NoaXBpbml0KGRldmljZV90IGRldik7CiBzdGF0aWMgaW50IGF0YV9wcm9taXNlX2FsbG9jYXRl KGRldmljZV90IGRldik7CiBzdGF0aWMgaW50IGF0YV9wcm9taXNlX3N0YXR1cyhkZXZpY2VfdCBk ZXYpOwotc3RhdGljIGludCBhdGFfcHJvbWlzZV9kbWFzdGFydChkZXZpY2VfdCBkZXYpOwotc3Rh dGljIGludCBhdGFfcHJvbWlzZV9kbWFzdG9wKGRldmljZV90IGRldik7CitzdGF0aWMgaW50IGF0 YV9wcm9taXNlX2RtYXN0YXJ0KHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCk7CitzdGF0aWMg aW50IGF0YV9wcm9taXNlX2RtYXN0b3Aoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKIHN0 YXRpYyB2b2lkIGF0YV9wcm9taXNlX2RtYXJlc2V0KGRldmljZV90IGRldik7CiBzdGF0aWMgdm9p ZCBhdGFfcHJvbWlzZV9kbWFpbml0KGRldmljZV90IGRldik7CiBzdGF0aWMgdm9pZCBhdGFfcHJv bWlzZV9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUpOwpAQCAtMTQyLDYgKzE0OCw5IEBA IHN0YXRpYyB2b2lkIGF0YV9wcm9taXNlX21pb19pbnRyKHZvaWQgKmQKIHN0YXRpYyBpbnQgYXRh X3Byb21pc2VfbWlvX3N0YXR1cyhkZXZpY2VfdCBkZXYpOwogc3RhdGljIGludCBhdGFfcHJvbWlz ZV9taW9fY29tbWFuZChzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpOwogc3RhdGljIHZvaWQg YXRhX3Byb21pc2VfbWlvX3Jlc2V0KGRldmljZV90IGRldik7CitzdGF0aWMgaW50IGF0YV9wcm9t aXNlX21pb19wbV9yZWFkKGRldmljZV90IGRldiwgaW50IHBvcnQsIGludCByZWcsIHVfaW50MzJf dCAqcmVzdWx0KTsKK3N0YXRpYyBpbnQgYXRhX3Byb21pc2VfbWlvX3BtX3dyaXRlKGRldmljZV90 IGRldiwgaW50IHBvcnQsIGludCByZWcsIHVfaW50MzJfdCByZXN1bHQpOworc3RhdGljIHVfaW50 MzJfdCBhdGFfcHJvbWlzZV9taW9fc29mdHJlc2V0KGRldmljZV90IGRldiwgaW50IHBvcnQpOwog c3RhdGljIHZvaWQgYXRhX3Byb21pc2VfbWlvX2RtYWluaXQoZGV2aWNlX3QgZGV2KTsKIHN0YXRp YyB2b2lkIGF0YV9wcm9taXNlX21pb19zZXRwcmQodm9pZCAqeHNjLCBidXNfZG1hX3NlZ21lbnRf dCAqc2VncywgaW50IG5zZWdzLCBpbnQgZXJyb3IpOwogc3RhdGljIHZvaWQgYXRhX3Byb21pc2Vf bWlvX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSk7CkBAIC0xNjcsNiArMTc2LDkgQEAg c3RhdGljIGludCBhdGFfc2lpcHJiX2FsbG9jYXRlKGRldmljZV90IAogc3RhdGljIGludCBhdGFf c2lpcHJiX3N0YXR1cyhkZXZpY2VfdCBkZXYpOwogc3RhdGljIGludCBhdGFfc2lpcHJiX2JlZ2lu X3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCk7CiBzdGF0aWMgaW50IGF0 YV9zaWlwcmJfZW5kX3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCk7Citz dGF0aWMgaW50IGF0YV9zaWlwcmJfcG1fcmVhZChkZXZpY2VfdCBkZXYsIGludCBwb3J0LCBpbnQg cmVnLCB1X2ludDMyX3QgKnJlc3VsdCk7CitzdGF0aWMgaW50IGF0YV9zaWlwcmJfcG1fd3JpdGUo ZGV2aWNlX3QgZGV2LCBpbnQgcG9ydCwgaW50IHJlZywgdV9pbnQzMl90IHJlc3VsdCk7CitzdGF0 aWMgdV9pbnQzMl90IGF0YV9zaWlwcmJfc29mdHJlc2V0KGRldmljZV90IGRldiwgaW50IHBvcnQp Owogc3RhdGljIHZvaWQgYXRhX3NpaXByYl9yZXNldChkZXZpY2VfdCBkZXYpOwogc3RhdGljIHZv aWQgYXRhX3NpaXByYl9kbWFzZXRwcmQodm9pZCAqeHNjLCBidXNfZG1hX3NlZ21lbnRfdCAqc2Vn cywgaW50IG5zZWdzLCBpbnQgZXJyb3IpOwogc3RhdGljIHZvaWQgYXRhX3NpaXByYl9kbWFpbml0 KGRldmljZV90IGRldik7CkBAIC0yNjgsMTUgKzI4MCwxNSBAQCBhdGFfc2F0YV9waHlfY2hlY2tf ZXZlbnRzKGRldmljZV90IGRldikKIAkgICAgaWYgKCgoc3RhdHVzICYgQVRBX1NTX0NPTldFTExf TUFTSykgPT0gQVRBX1NTX0NPTldFTExfR0VOMSkgfHwKIAkJKChzdGF0dXMgJiBBVEFfU1NfQ09O V0VMTF9NQVNLKSA9PSBBVEFfU1NfQ09OV0VMTF9HRU4yKSkgewogCQlpZiAoYm9vdHZlcmJvc2Up Ci0JCSAgICBkZXZpY2VfcHJpbnRmKGNoLT5kZXYsICJDT05ORUNUIHJlcXVlc3RlZFxuIik7CisJ CSAgICBkZXZpY2VfcHJpbnRmKGRldiwgIkNPTk5FQ1QgcmVxdWVzdGVkXG4iKTsKIAkJdHAtPmFj dGlvbiA9IEFUQV9DX0FUVEFDSDsKIAkgICAgfQogCSAgICBlbHNlIHsKIAkJaWYgKGJvb3R2ZXJi b3NlKQotCQkgICAgZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiRElTQ09OTkVDVCByZXF1ZXN0ZWRc biIpOworCQkgICAgZGV2aWNlX3ByaW50ZihkZXYsICJESVNDT05ORUNUIHJlcXVlc3RlZFxuIik7 CiAJCXRwLT5hY3Rpb24gPSBBVEFfQ19ERVRBQ0g7CiAJICAgIH0KLQkgICAgdHAtPmRldiA9IGNo LT5kZXY7CisJICAgIHRwLT5kZXYgPSBkZXY7CiAJICAgIFRBU0tfSU5JVCgmdHAtPnRhc2ssIDAs IGF0YV9zYXRhX3BoeV9ldmVudCwgdHApOwogCSAgICB0YXNrcXVldWVfZW5xdWV1ZSh0YXNrcXVl dWVfdGhyZWFkLCAmdHAtPnRhc2spOwogCX0KQEAgLTQwNywxNCArNDE5LDExMiBAQCBhdGFfc2F0 YV9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUpCiAgICAgfQogfQogCitzdGF0aWMgdm9p ZAorYXRhX3BtX2lkZW50aWZ5KGRldmljZV90IGRldikKK3sKKyAgICBzdHJ1Y3QgYXRhX2NoYW5u ZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIHVfaW50MzJfdCBwbV9jaGlwaWQs IHBtX3JldmlzaW9uLCBwbV9wb3J0czsKKyAgICBpbnQgcG9ydDsKKworICAgIC8qIGdldCBQTSB2 ZW5kb3IgJiBwcm9kdWN0IGRhdGEgKi8KKyAgICBpZiAoY2gtPmh3LnBtX3JlYWQoZGV2LCBBVEFf UE0sIDAsICZwbV9jaGlwaWQpKSB7CisJZGV2aWNlX3ByaW50ZihkZXYsICJlcnJvciBnZXR0aW5n IFBNIHZlbmRvciBkYXRhXG4iKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyogZ2V0IFBNIHJl dmlzaW9uIGRhdGEgKi8KKyAgICBpZiAoY2gtPmh3LnBtX3JlYWQoZGV2LCBBVEFfUE0sIDEsICZw bV9yZXZpc2lvbikpIHsKKwlkZXZpY2VfcHJpbnRmKGRldiwgImVycm9yIGdldHRpbmcgUE0gcmV2 aXNvbiBkYXRhXG4iKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyogZ2V0IG51bWJlciBvZiBI VyBwb3J0cyBvbiB0aGUgUE0gKi8KKyAgICBpZiAoY2gtPmh3LnBtX3JlYWQoZGV2LCBBVEFfUE0s IDIsICZwbV9wb3J0cykpIHsKKwlkZXZpY2VfcHJpbnRmKGRldiwgImVycm9yIGdldHRpbmcgUE0g cG9ydCBpbmZvXG4iKTsKKwlyZXR1cm47CisgICAgfQorICAgIHBtX3BvcnRzICY9IDB4MDAwMDAw MGY7CisKKyAgICAvKiBjaGlwIHNwZWNpZmljIHF1aXJrcyAqLworICAgIHN3aXRjaCAocG1fY2hp cGlkKSB7CisgICAgY2FzZSAweDM3MjYxMDk1OgorCS8qIFNvbWUgb2YgdGhlc2UgYm9ndXNseSBy ZXBvcnRzIDYgcG9ydHMgKi8KKwlwbV9wb3J0cyA9IDU7CisJZGV2aWNlX3ByaW50ZihkZXYsICJT aUkgMzcyNiByJXggUG9ydG11bHRpcGxpZXIgd2l0aCAlZCBwb3J0c1xuIiwKKwkJICAgICAgcG1f cmV2aXNpb24sIHBtX3BvcnRzKTsKKwlicmVhazsKKworICAgIGRlZmF1bHQ6CisJZGV2aWNlX3By aW50ZihkZXYsICJQb3J0bXVsdGlwbGllciAoaWQ9JTA4eCByZXY9JXgpIHdpdGggJWQgcG9ydHNc biIsCisJCSAgICAgIHBtX2NoaXBpZCwgcG1fcmV2aXNpb24sIHBtX3BvcnRzKTsKKyAgICB9CisK KyAgICAvKiBpbmZvcm0gZG1hLmFsbG9jKCkgYWJvdXQgbmVlZGVkIERNQSBzbG90cyAqLworICAg IGNoLT5kbWEuZG1hX3Nsb3RzID0gcG1fcG9ydHM7CisKKyAgICAvKiByZXNldCBhbGwgcG9ydHMg YW5kIHJlZ2lzdGVyIGlmIGFueXRoaW5nIGNvbm5lY3RlZCAqLworICAgIGZvciAocG9ydD0wOyBw b3J0IDwgcG1fcG9ydHM7IHBvcnQrKykgeworCXVfaW50MzJfdCBzaWduYXR1cmUsIHN0YXR1czsK KwlpbnQgdGltZW91dDsKKworCWlmIChjaC0+aHcucG1fd3JpdGUoZGV2LCBwb3J0LCAyLCBBVEFf U0NfREVUX1JFU0VUKSkgeworCSAgICBkZXZpY2VfcHJpbnRmKGRldiwgInAlZDogd3JpdGluZyBB VEFfU0NfREVUX1JFU0VUIGZhaWxlZFxuIiwgcG9ydCk7CisJICAgIGNvbnRpbnVlOworCX0KKwor CWF0YV91ZGVsYXkoNTAwMCk7CisKKwlpZiAoY2gtPmh3LnBtX3dyaXRlKGRldiwgcG9ydCwgMiwg QVRBX1NDX0RFVF9JRExFKSkgeworCSAgICBkZXZpY2VfcHJpbnRmKGRldiwgInAlZDogd3JpdGlu ZyBBVEFfU0NfREVUX2lkbGUgZmFpbGVkXG4iLCBwb3J0KTsKKwkgICAgY29udGludWU7CisJfQor CisJYXRhX3VkZWxheSg1MDAwKTsKKworCS8qIHdhaXQgdXAgdG8gMSBzZWNvbmQgZm9yICJjb25u ZWN0IHdlbGwiICovCisJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDEwMCA7IHRpbWVvdXQr KykgeworCSAgICBjaC0+aHcucG1fcmVhZChkZXYsIHBvcnQsIDAsICZzdGF0dXMpOworCSAgICBp ZiAoKHN0YXR1cyAmIEFUQV9TU19DT05XRUxMX01BU0spID09IEFUQV9TU19DT05XRUxMX0dFTjEg fHwKKwkJKHN0YXR1cyAmIEFUQV9TU19DT05XRUxMX01BU0spID09IEFUQV9TU19DT05XRUxMX0dF TjIpCisJCWJyZWFrOworCSAgICBhdGFfdWRlbGF5KDEwMDAwKTsKKwl9CisJaWYgKHRpbWVvdXQg Pj0gMTAwKSB7CisJICAgIGlmIChib290dmVyYm9zZSkKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJw JWQ6IGNvbm5lY3Qgc3RhdHVzPSUwOHhcbiIsIHBvcnQsIHN0YXR1cyk7CisJICAgIGNvbnRpbnVl OworCX0KKwlpZiAoYm9vdHZlcmJvc2UpCisJICAgIGRldmljZV9wcmludGYoZGV2LCAicCVkOiBj b25uZWN0IHRpbWUgJWRtc1xuIiwgcG9ydCwgdGltZW91dCAqIDEwKTsKKworCS8qIGNsZWFyIFNF UlJPUiByZWdpc3RlciAqLworCWNoLT5ody5wbV93cml0ZShkZXYsIHBvcnQsIDEsIDB4ZmZmZmZm ZmYpOworCisJc2lnbmF0dXJlID0gY2gtPmh3LnNvZnRyZXNldChkZXYsIHBvcnQpOworCisJaWYg KGJvb3R2ZXJib3NlKQorCSAgICBkZXZpY2VfcHJpbnRmKGRldiwgInAlZDogU0lHTkFUVVJFPSUw OHhcbiIsIHBvcnQsIHNpZ25hdHVyZSk7CisKKwkvKiBmaWd1cmUgb3V0IHdoYXRzIHRoZXJlICov CisJc3dpdGNoIChzaWduYXR1cmUpIHsKKwljYXNlIDB4MDAwMDAxMDE6CisJICAgIGNoLT5kZXZp Y2VzIHw9IChBVEFfQVRBX01BU1RFUiA8PCBwb3J0KTsKKwkgICAgY29udGludWU7CisJY2FzZSAw eGViMTQwMTAxOgorCSAgICBjaC0+ZGV2aWNlcyB8PSAoQVRBX0FUQVBJX01BU1RFUiA8PCBwb3J0 KTsKKwkgICAgY29udGludWU7CisJfQorICAgIH0KK30KKwogc3RhdGljIGludAogYXRhX3JlcXVl c3QyZmlzX2gyZChzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QsIHVfaW50OF90ICpmaXMpCiB7 CiAgICAgc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRldmljZV9nZXRfc29mdGMocmVxdWVz dC0+ZGV2KTsKIAogICAgIGlmIChyZXF1ZXN0LT5mbGFncyAmIEFUQV9SX0FUQVBJKSB7Ci0JZmlz WzBdID0gMHgyNzsgIC8qIGhvc3QgdG8gZGV2aWNlICovCi0JZmlzWzFdID0gMHg4MDsgIC8qIGNv bW1hbmQgRklTIChub3RlIFBNIGdvZXMgaGVyZSkgKi8KKwlmaXNbMF0gPSAweDI3OyAgCQkvKiBo b3N0IHRvIGRldmljZSAqLworCWZpc1sxXSA9IDB4ODAgfCAoYXRhZGV2LT51bml0ICYgMHgwZik7 CiAJZmlzWzJdID0gQVRBX1BBQ0tFVF9DTUQ7CiAJaWYgKHJlcXVlc3QtPmZsYWdzICYgKEFUQV9S X1JFQUQgfCBBVEFfUl9XUklURSkpCiAJICAgIGZpc1szXSA9IEFUQV9GX0RNQTsKQEAgLTQyMiwy MiArNTMyLDIyIEBAIGF0YV9yZXF1ZXN0MmZpc19oMmQoc3RydWN0IGF0YV9yZXF1ZXN0ICoKIAkg ICAgZmlzWzVdID0gcmVxdWVzdC0+dHJhbnNmZXJzaXplOwogCSAgICBmaXNbNl0gPSByZXF1ZXN0 LT50cmFuc2ZlcnNpemUgPj4gODsKIAl9Ci0JZmlzWzddID0gQVRBX0RfTEJBIHwgYXRhZGV2LT51 bml0OworCWZpc1s3XSA9IEFUQV9EX0xCQTsKIAlmaXNbMTVdID0gQVRBX0FfNEJJVDsKIAlyZXR1 cm4gMjA7CiAgICAgfQogICAgIGVsc2UgewogCWF0YV9tb2RpZnlfaWZfNDhiaXQocmVxdWVzdCk7 Ci0JZmlzWzBdID0gMHgyNzsgIC8qIGhvc3QgdG8gZGV2aWNlICovCi0JZmlzWzFdID0gMHg4MDsg IC8qIGNvbW1hbmQgRklTIChub3RlIFBNIGdvZXMgaGVyZSkgKi8KKwlmaXNbMF0gPSAweDI3OwkJ CS8qIGhvc3QgdG8gZGV2aWNlICovCisJZmlzWzFdID0gMHg4MCB8IChhdGFkZXYtPnVuaXQgJiAw eDBmKTsKIAlmaXNbMl0gPSByZXF1ZXN0LT51LmF0YS5jb21tYW5kOwogCWZpc1szXSA9IHJlcXVl c3QtPnUuYXRhLmZlYXR1cmU7CiAJZmlzWzRdID0gcmVxdWVzdC0+dS5hdGEubGJhOwogCWZpc1s1 XSA9IHJlcXVlc3QtPnUuYXRhLmxiYSA+PiA4OwogCWZpc1s2XSA9IHJlcXVlc3QtPnUuYXRhLmxi YSA+PiAxNjsKLQlmaXNbN10gPSBBVEFfRF9MQkEgfCBhdGFkZXYtPnVuaXQ7CisJZmlzWzddID0g QVRBX0RfTEJBOwogCWlmICghKGF0YWRldi0+ZmxhZ3MgJiBBVEFfRF80OEJJVF9BQ1RJVkUpKQot CSAgICBmaXNbN10gfD0gKHJlcXVlc3QtPnUuYXRhLmxiYSA+PiAyNCAmIDB4MGYpOworCSAgICBm aXNbN10gfD0gKEFUQV9EX0lCTSB8IChyZXF1ZXN0LT51LmF0YS5sYmEgPj4gMjQgJiAweDBmKSk7 CiAJZmlzWzhdID0gcmVxdWVzdC0+dS5hdGEubGJhID4+IDI0OwogCWZpc1s5XSA9IHJlcXVlc3Qt PnUuYXRhLmxiYSA+PiAzMjsgCiAJZmlzWzEwXSA9IHJlcXVlc3QtPnUuYXRhLmxiYSA+PiA0MDsg CkBAIC00OTUsNiArNjA1LDQyIEBAIGF0YV9haGNpX2NoaXBpbml0KGRldmljZV90IGRldikKICAg ICBlbHNlCiAJZGV2aWNlX3ByaW50ZihkZXYsICJBSENJIGNhbGxlZCBmcm9tIHZlbmRvciBzcGVj aWZpYyBkcml2ZXJcbiIpOwogCisgICAgLyogcmVzZXQgY29udHJvbGxlciAqLworICAgIGF0YV9h aGNpX2N0bHJfcmVzZXQoZGV2KTsKKworICAgIC8qIGdldCB0aGUgbnVtYmVyIG9mIEhXIGNoYW5u ZWxzICovCisgICAgY3Rsci0+Y2hhbm5lbHMgPQorCU1BWChmbHNsKEFUQV9JTkwoY3Rsci0+cl9y ZXMyLCBBVEFfQUhDSV9QSSkpLCAKKwkgICAgKEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhD SV9DQVApICYgQVRBX0FIQ0lfTlBNQVNLKSArIDEpOworCisgICAgY3Rsci0+cmVzZXQgPSBhdGFf YWhjaV9yZXNldDsKKyAgICBjdGxyLT5kbWFpbml0ID0gYXRhX2FoY2lfZG1haW5pdDsKKyAgICBj dGxyLT5hbGxvY2F0ZSA9IGF0YV9haGNpX2FsbG9jYXRlOworICAgIGN0bHItPnNldG1vZGUgPSBh dGFfc2F0YV9zZXRtb2RlOworICAgIGN0bHItPnN1c3BlbmQgPSBhdGFfYWhjaV9zdXNwZW5kOwor ICAgIGN0bHItPnJlc3VtZSA9IGF0YV9haGNpX2N0bHJfcmVzZXQ7CisKKyAgICAvKiBlbmFibGUg UENJIGludGVycnVwdCAqLworICAgIHBjaV93cml0ZV9jb25maWcoZGV2LCBQQ0lSX0NPTU1BTkQs CisJCSAgICAgcGNpX3JlYWRfY29uZmlnKGRldiwgUENJUl9DT01NQU5ELCAyKSAmIH4weDA0MDAs IDIpOworCisgICAgLyogYW5ub3VuY2Ugd2Ugc3VwcG9ydCB0aGUgSFcgKi8KKyAgICB2ZXJzaW9u ID0gQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1ZTKTsKKyAgICBkZXZpY2VfcHJpbnRm KGRldiwKKwkJICAiQUhDSSBWZXJzaW9uICV4JXguJXgleCBjb250cm9sbGVyIHdpdGggJWQgcG9y dHMgUE0gJXNcbiIsCisJCSAgKHZlcnNpb24gPj4gMjQpICYgMHhmZiwgKHZlcnNpb24gPj4gMTYp ICYgMHhmZiwKKwkJICAodmVyc2lvbiA+PiA4KSAmIDB4ZmYsIHZlcnNpb24gJiAweGZmLAorCQkg IChBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfQ0FQKSAmIEFUQV9BSENJX05QTUFTSykg KyAxLAorCQkgIChBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfQ0FQKSAmIEFUQV9BSENJ X0NBUF9TUE0pID8KKwkJICAic3VwcG9ydGVkIiA6ICJub3Qgc3VwcG9ydGVkIik7CisgICAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2F0YV9haGNpX2N0bHJfcmVzZXQoZGV2aWNlX3QgZGV2 KQoreworICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3Nv ZnRjKGRldik7CisKICAgICAvKiBlbmFibGUgQUhDSSBtb2RlICovCiAgICAgQVRBX09VVEwoY3Rs ci0+cl9yZXMyLCBBVEFfQUhDSV9HSEMsIEFUQV9BSENJX0dIQ19BRSk7CiAKQEAgLTUxMCwxMSAr NjU2LDYgQEAgYXRhX2FoY2lfY2hpcGluaXQoZGV2aWNlX3QgZGV2KQogICAgIC8qIHJlZW5hYmxl IEFIQ0kgbW9kZSAqLwogICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfR0hDLCBB VEFfQUhDSV9HSENfQUUpOwogCi0gICAgLyogZ2V0IHRoZSBudW1iZXIgb2YgSFcgY2hhbm5lbHMg Ki8KLSAgICBjdGxyLT5jaGFubmVscyA9Ci0JTUFYKGZsc2woQVRBX0lOTChjdGxyLT5yX3JlczIs IEFUQV9BSENJX1BJKSksIAotCSAgICAoQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX0NB UCkgJiBBVEFfQUhDSV9OUE1BU0spICsgMSk7Ci0KICAgICAvKiBjbGVhciBpbnRlcnJ1cHRzICov CiAgICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9JUywgQVRBX0lOTChjdGxyLT5y X3JlczIsIEFUQV9BSENJX0lTKSk7CiAKQEAgLTUyMiwzMSArNjYzLDI2IEBAIGF0YV9haGNpX2No aXBpbml0KGRldmljZV90IGRldikKICAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJ X0dIQywKIAkgICAgIEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9HSEMpIHwgQVRBX0FI Q0lfR0hDX0lFKTsKIAotICAgIGN0bHItPnJlc2V0ID0gYXRhX2FoY2lfcmVzZXQ7Ci0gICAgY3Rs ci0+ZG1haW5pdCA9IGF0YV9haGNpX2RtYWluaXQ7Ci0gICAgY3Rsci0+YWxsb2NhdGUgPSBhdGFf YWhjaV9hbGxvY2F0ZTsKLSAgICBjdGxyLT5zZXRtb2RlID0gYXRhX3NhdGFfc2V0bW9kZTsKKyAg ICByZXR1cm4gMDsKK30KIAotICAgIC8qIGVuYWJsZSBQQ0kgaW50ZXJydXB0ICovCi0gICAgcGNp X3dyaXRlX2NvbmZpZyhkZXYsIFBDSVJfQ09NTUFORCwKLQkJICAgICBwY2lfcmVhZF9jb25maWco ZGV2LCBQQ0lSX0NPTU1BTkQsIDIpICYgfjB4MDQwMCwgMik7CitzdGF0aWMgaW50CithdGFfYWhj aV9zdXNwZW5kKGRldmljZV90IGRldikKK3sKKyAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVy ICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogCi0gICAgLyogYW5ub3VuY2Ugd2Ugc3Vw cG9ydCB0aGUgSFcgKi8KLSAgICB2ZXJzaW9uID0gQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9B SENJX1ZTKTsKLSAgICBkZXZpY2VfcHJpbnRmKGRldiwKLQkJICAiQUhDSSBWZXJzaW9uICV4JXgu JXgleCBjb250cm9sbGVyIHdpdGggJWQgcG9ydHMgZGV0ZWN0ZWRcbiIsCi0JCSAgKHZlcnNpb24g Pj4gMjQpICYgMHhmZiwgKHZlcnNpb24gPj4gMTYpICYgMHhmZiwKLQkJICAodmVyc2lvbiA+PiA4 KSAmIDB4ZmYsIHZlcnNpb24gJiAweGZmLAotCQkgIChBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRB X0FIQ0lfQ0FQKSAmIEFUQV9BSENJX05QTUFTSykgKyAxKTsKKyAgICAvKiBkaXNhYmxlIGludGVy dXB0cyBzbyB0aGUgc3RhdGUgY2hhbmdlKHMpIGRvZXNuJ3QgdHJpZ2dlciAqLworICAgIEFUQV9P VVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfR0hDLAorICAgICAgICAgICAgIEFUQV9JTkwoY3Rs ci0+cl9yZXMyLCBBVEFfQUhDSV9HSEMpICYgKH5BVEFfQUhDSV9HSENfSUUpKTsKICAgICByZXR1 cm4gMDsKIH0KIAorCiBzdGF0aWMgaW50CiBhdGFfYWhjaV9hbGxvY2F0ZShkZXZpY2VfdCBkZXYp CiB7CiAgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29m dGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9 IGRldmljZV9nZXRfc29mdGMoZGV2KTsKLSAgICB1X2ludDY0X3Qgd29yazsKICAgICBpbnQgb2Zm c2V0ID0gY2gtPnVuaXQgPDwgNzsKIAogICAgIC8qIHNldCB0aGUgU0FUQSByZXNvdXJjZXMgKi8K QEAgLTU2MywyOCArNjk5LDEwIEBAIGF0YV9haGNpX2FsbG9jYXRlKGRldmljZV90IGRldikKICAg ICBjaC0+aHcuYmVnaW5fdHJhbnNhY3Rpb24gPSBhdGFfYWhjaV9iZWdpbl90cmFuc2FjdGlvbjsK ICAgICBjaC0+aHcuZW5kX3RyYW5zYWN0aW9uID0gYXRhX2FoY2lfZW5kX3RyYW5zYWN0aW9uOwog ICAgIGNoLT5ody5jb21tYW5kID0gTlVMTDsgICAgICAvKiBub3QgdXNlZCBoZXJlICovCisgICAg Y2gtPmh3LnNvZnRyZXNldCA9IGF0YV9haGNpX3NvZnRyZXNldDsKKyAgICBjaC0+aHcucG1fcmVh ZCA9IGF0YV9haGNpX3BtX3JlYWQ7CisgICAgY2gtPmh3LnBtX3dyaXRlID0gYXRhX2FoY2lfcG1f d3JpdGU7CiAKLSAgICAvKiBzZXR1cCB3b3JrIGFyZWFzICovCi0gICAgd29yayA9IGNoLT5kbWEt PndvcmtfYnVzICsgQVRBX0FIQ0lfQ0xfT0ZGU0VUOwotICAgIEFUQV9PVVRMKGN0bHItPnJfcmVz MiwgQVRBX0FIQ0lfUF9DTEIgKyBvZmZzZXQsIHdvcmsgJiAweGZmZmZmZmZmKTsKLSAgICBBVEFf T1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfQ0xCVSArIG9mZnNldCwgd29yayA+PiAzMik7 Ci0KLSAgICB3b3JrID0gY2gtPmRtYS0+d29ya19idXMgKyBBVEFfQUhDSV9GQl9PRkZTRVQ7Ci0g ICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0ZCICsgb2Zmc2V0LCB3b3JrICYg MHhmZmZmZmZmZik7IAotICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9GQlUg KyBvZmZzZXQsIHdvcmsgPj4gMzIpOwotCi0gICAgLyogZW5hYmxlIHdhbnRlZCBwb3J0IGludGVy cnVwdHMgKi8KLSAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfSUUgKyBvZmZz ZXQsCi0JICAgICAoQVRBX0FIQ0lfUF9JWF9DUEQgfCBBVEFfQUhDSV9QX0lYX1RGRSB8IEFUQV9B SENJX1BfSVhfSEJGIHwKLQkgICAgICBBVEFfQUhDSV9QX0lYX0hCRCB8IEFUQV9BSENJX1BfSVhf SUYgfCBBVEFfQUhDSV9QX0lYX09GIHwKLQkgICAgICBBVEFfQUhDSV9QX0lYX1BSQyB8IEFUQV9B SENJX1BfSVhfUEMgfCBBVEFfQUhDSV9QX0lYX0RQIHwKLQkgICAgICBBVEFfQUhDSV9QX0lYX1VG IHwgQVRBX0FIQ0lfUF9JWF9TREIgfCBBVEFfQUhDSV9QX0lYX0RTIHwKLQkgICAgICBBVEFfQUhD SV9QX0lYX1BTIHwgQVRBX0FIQ0lfUF9JWF9ESFIpKTsKLQotICAgIC8qIHN0YXJ0IG9wZXJhdGlv bnMgb24gdGhpcyBjaGFubmVsICovCi0gICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhD SV9QX0NNRCArIG9mZnNldCwKLQkgICAgIChBVEFfQUhDSV9QX0NNRF9BQ1RJVkUgfCBBVEFfQUhD SV9QX0NNRF9GUkUgfAotCSAgICAgIEFUQV9BSENJX1BfQ01EX1BPRCB8IEFUQV9BSENJX1BfQ01E X1NVRCB8IEFUQV9BSENJX1BfQ01EX1NUKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTU5NSwy MiArNzEzLDI1IEBAIGF0YV9haGNpX3N0YXR1cyhkZXZpY2VfdCBkZXYpCiAgICAgc3RydWN0IGF0 YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgICB1X2ludDMyX3QgYWN0 aW9uID0gQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX0lTKTsKICAgICBpbnQgb2Zmc2V0 ID0gY2gtPnVuaXQgPDwgNzsKLSAgICBpbnQgdGFnID0gMDsKKworI2RlZmluZSBBVEFfQUhDSV9T VEFUQklUUyBcCisJKEFUQV9BSENJX1BfSVhfSUZ8QVRBX0FIQ0lfUF9JWF9IQkR8QVRBX0FIQ0lf UF9JWF9IQkZ8QVRBX0FIQ0lfUF9JWF9URkUpCiAKICAgICBpZiAoYWN0aW9uICYgKDEgPDwgY2gt PnVuaXQpKSB7CiAJdV9pbnQzMl90IGlzdGF0dXMgPSBBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRB X0FIQ0lfUF9JUyArIG9mZnNldCk7CiAJdV9pbnQzMl90IGNzdGF0dXMgPSBBVEFfSU5MKGN0bHIt PnJfcmVzMiwgQVRBX0FIQ0lfUF9DSSArIG9mZnNldCk7CiAKIAkvKiBjbGVhciBpbnRlcnJ1cHQo cykgKi8KLQlBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX0lTLCBhY3Rpb24gJiAoMSA8 PCBjaC0+dW5pdCkpOwogCUFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9JUyArIG9m ZnNldCwgaXN0YXR1cyk7CisJQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9JUywgYWN0 aW9uICYgKDEgPDwgY2gtPnVuaXQpKTsKIAogCS8qIGRvIHdlIGhhdmUgYW55IFBIWSBldmVudHMg PyAqLwotCS8qIFhYWCBTT1MgY2hlY2sgaXN0YXR1cyBwaHkgYml0cyAqLwotCWF0YV9zYXRhX3Bo eV9jaGVja19ldmVudHMoZGV2KTsKKwlpZiAoaXN0YXR1cyAmIChBVEFfQUhDSV9QX0lYX1BSQyB8 IEFUQV9BSENJX1BfSVhfUEMpKQorCSAgICBhdGFfc2F0YV9waHlfY2hlY2tfZXZlbnRzKGRldik7 CiAKIAkvKiBkbyB3ZSBoYXZlIGEgcG90ZW50aWFsbHkgaGFuZ2luZyBlbmdpbmUgdG8gdGFrZSBj YXJlIG9mPyAqLwotCWlmICgoaXN0YXR1cyAmIDB4Nzg0MDAwNTApICYmIChjc3RhdHVzICYgKDEg PDwgdGFnKSkpIHsKKwkvKiBYWFggU09TIHdoYXQgdG9kbyBvbiBOQ1EgKi8KKwlpZiAoKGlzdGF0 dXMgJiBBVEFfQUhDSV9TVEFUQklUUykgJiYgKGNzdGF0dXMgJiAxKSkgewogCiAJICAgIHVfaW50 MzJfdCBjbWQgPSBBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTUQgKyBvZmZzZXQp OwogCSAgICBpbnQgdGltZW91dCA9IDA7CkBAIC02MjIsNyArNzQzLDcgQEAgYXRhX2FoY2lfc3Rh dHVzKGRldmljZV90IGRldikKIAkgICAgLyogWFhYIFNPUyB0aGlzIGlzIG5vdCBlbnRpcmVseSB3 cm9uZyAqLwogCSAgICBkbyB7CiAJCURFTEFZKDEwMDApOwotCQlpZiAodGltZW91dCsrID4gNTAw KSB7CisJCWlmICh0aW1lb3V0KysgPiAxMDAwKSB7CiAJCSAgICBkZXZpY2VfcHJpbnRmKGRldiwg InN0b3BwaW5nIEFIQ0kgZW5naW5lIGZhaWxlZFxuIik7CiAJCSAgICBicmVhazsKIAkJfQpAQCAt NjM2LDcgKzc1Nyw4IEBAIGF0YV9haGNpX3N0YXR1cyhkZXZpY2VfdCBkZXYpCiAJICAgIHJldHVy biAxOwogCX0KIAllbHNlCi0JICAgIHJldHVybiAoIShjc3RhdHVzICYgKDEgPDwgdGFnKSkpOwor CSAgICAvKiBYWFggU09TIHdoYXQgdG9kbyBvbiBOQ1EgKi8KKwkgICAgcmV0dXJuICghKGNzdGF0 dXMgJiAxKSk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtNjQ2LDE2ICs3NjgsMTggQEAg c3RhdGljIGludAogYXRhX2FoY2lfYmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0IGF0YV9yZXF1ZXN0 ICpyZXF1ZXN0KQogewogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHI9ZGV2aWNl X2dldF9zb2Z0YyhHUkFORFBBUkVOVChyZXF1ZXN0LT5kZXYpKTsKLSAgICBzdHJ1Y3QgYXRhX2No YW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChyZXF1ZXN0LT5k ZXYpKTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1 ZXN0LT5wYXJlbnQpOworICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0 X3NvZnRjKHJlcXVlc3QtPmRldik7CiAgICAgc3RydWN0IGF0YV9haGNpX2NtZF90YWIgKmN0cDsK ICAgICBzdHJ1Y3QgYXRhX2FoY2lfY21kX2xpc3QgKmNscDsKICAgICBpbnQgb2Zmc2V0ID0gY2gt PnVuaXQgPDwgNzsKLSAgICBpbnQgdGFnID0gMCwgZW50cmllcyA9IDA7CisgICAgaW50IHBvcnQg PSBhdGFkZXYtPnVuaXQgJiAweDBmOworICAgIGludCBlbnRyaWVzID0gMDsKICAgICBpbnQgZmlz X3NpemU7CiAJCiAgICAgLyogZ2V0IGEgcGllY2Ugb2YgdGhlIHdvcmtzcGFjZSBmb3IgdGhpcyBy ZXF1ZXN0ICovCiAgICAgY3RwID0gKHN0cnVjdCBhdGFfYWhjaV9jbWRfdGFiICopCi0JICAoY2gt PmRtYS0+d29yayArIEFUQV9BSENJX0NUX09GRlNFVCArIChBVEFfQUhDSV9DVF9TSVpFICogdGFn KSk7CisJICAoY2gtPmRtYS53b3JrICsgQVRBX0FIQ0lfQ1RfT0ZGU0VUICsgKEFUQV9BSENJX0NU X1NJWkUqcmVxdWVzdC0+dGFnKSk7CiAKICAgICAvKiBzZXR1cCB0aGUgRklTIGZvciB0aGlzIHJl cXVlc3QgKi8KICAgICBpZiAoIShmaXNfc2l6ZSA9IGF0YV9haGNpX3NldHVwX2ZpcyhjdHAsIHJl cXVlc3QpKSkgewpAQCAtNjY2LDkgKzc5MCw3IEBAIGF0YV9haGNpX2JlZ2luX3RyYW5zYWN0aW9u KHN0cnVjdCBhdGFfcmUKIAogICAgIC8qIGlmIHJlcXVlc3QgbW92ZXMgZGF0YSBzZXR1cCBhbmQg bG9hZCBTRyBsaXN0ICovCiAgICAgaWYgKHJlcXVlc3QtPmZsYWdzICYgKEFUQV9SX1JFQUQgfCBB VEFfUl9XUklURSkpIHsKLQlpZiAoY2gtPmRtYS0+bG9hZChjaC0+ZGV2LCByZXF1ZXN0LT5kYXRh LCByZXF1ZXN0LT5ieXRlY291bnQsCi0JCQkgIHJlcXVlc3QtPmZsYWdzICYgQVRBX1JfUkVBRCwK LQkJCSAgY3RwLT5wcmRfdGFiLCAmZW50cmllcykpIHsKKwlpZiAoY2gtPmRtYS5sb2FkKHJlcXVl c3QsIGN0cC0+cHJkX3RhYiwgJmVudHJpZXMpKSB7CiAJICAgIGRldmljZV9wcmludGYocmVxdWVz dC0+ZGV2LCAic2V0dGluZyB1cCBETUEgZmFpbGVkXG4iKTsKIAkgICAgcmVxdWVzdC0+cmVzdWx0 ID0gRUlPOwogCSAgICByZXR1cm4gQVRBX09QX0ZJTklTSEVEOwpAQCAtNjc3LDE4ICs3OTksMjEg QEAgYXRhX2FoY2lfYmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0IGF0YV9yZQogCiAgICAgLyogc2V0 dXAgdGhlIGNvbW1hbmQgbGlzdCBlbnRyeSAqLwogICAgIGNscCA9IChzdHJ1Y3QgYXRhX2FoY2lf Y21kX2xpc3QgKikKLQkgIChjaC0+ZG1hLT53b3JrICsgQVRBX0FIQ0lfQ0xfT0ZGU0VUICsgKEFU QV9BSENJX0NMX1NJWkUgKiB0YWcpKTsKKwkgIChjaC0+ZG1hLndvcmsgKyBBVEFfQUhDSV9DTF9P RkZTRVQgKyAoQVRBX0FIQ0lfQ0xfU0laRSpyZXF1ZXN0LT50YWcpKTsKIAogICAgIGNscC0+cHJk X2xlbmd0aCA9IGVudHJpZXM7Ci0gICAgY2xwLT5jbWRfZmxhZ3MgPSAocmVxdWVzdC0+ZmxhZ3Mg JiBBVEFfUl9XUklURSA/ICgxPDw2KSA6IDApIHwKLQkJICAgICAocmVxdWVzdC0+ZmxhZ3MgJiBB VEFfUl9BVEFQSSA/ICgoMTw8NSkgfCAoMTw8NykpIDogMCkgfAotCQkgICAgIChmaXNfc2l6ZSAv IHNpemVvZih1X2ludDMyX3QpKTsKKyAgICBjbHAtPmNtZF9mbGFncyA9IChyZXF1ZXN0LT5mbGFn cyAmIEFUQV9SX1dSSVRFID8gQVRBX0FIQ0lfQ01EX1dSSVRFIDogMCkgfAorCQkgICAgIChyZXF1 ZXN0LT5mbGFncyAmIEFUQV9SX0FUQVBJID8KKwkJICAgICAgKEFUQV9BSENJX0NNRF9BVEFQSSB8 IEFUQV9BSENJX0NNRF9QUkVGRVRDSCkgOiAwKSB8CisJCSAgICAgKGZpc19zaXplIC8gc2l6ZW9m KHVfaW50MzJfdCkpIHwKKyAgICAJCSAgICAgKHBvcnQgPDwgMTIpOwogICAgIGNscC0+Ynl0ZWNv dW50ID0gMDsKLSAgICBjbHAtPmNtZF90YWJsZV9waHlzID0gaHRvbGU2NChjaC0+ZG1hLT53b3Jr X2J1cyArIEFUQV9BSENJX0NUX09GRlNFVCArCi0JCQkJICAoQVRBX0FIQ0lfQ1RfU0laRSAqIHRh ZykpOworICAgIGNscC0+Y21kX3RhYmxlX3BoeXMgPSBodG9sZTY0KGNoLT5kbWEud29ya19idXMg KyBBVEFfQUhDSV9DVF9PRkZTRVQgKworCQkJCSAgKEFUQV9BSENJX0NUX1NJWkUgKiByZXF1ZXN0 LT50YWcpKTsKIAogICAgIC8qIGNsZWFyIGV2ZW50dWFsIEFDVElWRSBiaXQgKi8KLSAgICBBVEFf SURYX09VVEwoY2gsIEFUQV9TQUNUSVZFLCBBVEFfSURYX0lOTChjaCwgQVRBX1NBQ1RJVkUpICYg KDEgPDwgdGFnKSk7CisgICAgQVRBX0lEWF9PVVRMKGNoLCBBVEFfU0FDVElWRSwKKwkJIEFUQV9J RFhfSU5MKGNoLCBBVEFfU0FDVElWRSkgJiAoMSA8PCByZXF1ZXN0LT50YWcpKTsKIAogICAgIC8q IHNldCBjb21tYW5kIHR5cGUgYml0ICovCiAgICAgaWYgKHJlcXVlc3QtPmZsYWdzICYgQVRBX1Jf QVRBUEkpCkBAIC03MDAsOCArODI1LDExIEBAIGF0YV9haGNpX2JlZ2luX3RyYW5zYWN0aW9uKHN0 cnVjdCBhdGFfcmUKIAkJIEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NNRCArIG9m ZnNldCkgJgogCQkgfkFUQV9BSENJX1BfQ01EX0FUQVBJKTsKIAorICAgIC8qIHNldCBQTSBwb3J0 IHRvIGFkZHJlc3MgKi8KKyAgICAvL0FUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9G QlMgKyBvZmZzZXQsIChwb3J0IDw8IDgpIHwgMHgwMDAwMDAwMSk7CisKICAgICAvKiBpc3N1ZSBj b21tYW5kIHRvIGNvbnRyb2xsZXIgKi8KLSAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9B SENJX1BfQ0kgKyBvZmZzZXQsICgxIDw8IHRhZykpOworICAgIEFUQV9PVVRMKGN0bHItPnJfcmVz MiwgQVRBX0FIQ0lfUF9DSSArIG9mZnNldCwgKDEgPDwgcmVxdWVzdC0+dGFnKSk7CiAgICAgCiAg ICAgaWYgKCEocmVxdWVzdC0+ZmxhZ3MgJiBBVEFfUl9BVEFQSSkpIHsKIAkvKiBkZXZpY2UgcmVz ZXQgZG9lc24ndCBpbnRlcnJ1cHQgKi8KQEAgLTczNCwxMSArODYyLDEwIEBAIHN0YXRpYyBpbnQK IGF0YV9haGNpX2VuZF90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpCiB7 CiAgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3Rscj1kZXZpY2VfZ2V0X3NvZnRjKEdS QU5EUEFSRU5UKHJlcXVlc3QtPmRldikpOwotICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBk ZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KHJlcXVlc3QtPmRldikpOworICAgIHN0 cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKHJlcXVlc3QtPnBhcmVudCk7 CiAgICAgc3RydWN0IGF0YV9haGNpX2NtZF9saXN0ICpjbHA7CiAgICAgdV9pbnQzMl90IHRmX2Rh dGE7CiAgICAgaW50IG9mZnNldCA9IGNoLT51bml0IDw8IDc7Ci0gICAgaW50IHRhZyA9IDA7CiAK ICAgICAvKiBraWxsIHRoZSB0aW1lb3V0ICovCiAgICAgY2FsbG91dF9zdG9wKCZyZXF1ZXN0LT5j YWxsb3V0KTsKQEAgLTc1MSwzMSArODc4LDE0MCBAQCBhdGFfYWhjaV9lbmRfdHJhbnNhY3Rpb24o c3RydWN0IGF0YV9yZXF1CiAgICAgaWYgKHJlcXVlc3QtPnN0YXR1cyAmIEFUQV9TX0VSUk9SKSAg CiAJcmVxdWVzdC0+ZXJyb3IgPSB0Zl9kYXRhID4+IDg7CiAKKyAgICAvKiBvbiBjb250cm9sIGNv bW1hbmRzIHJlYWQgYmFjayByZWdpc3RlcnMgdG8gdGhlIHJlcXVlc3Qgc3RydWN0ICovCisgICAg aWYgKHJlcXVlc3QtPmZsYWdzICYgQVRBX1JfQ09OVFJPTCkgeworCXN0cnVjdCBhdGFfZGV2aWNl ICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKHJlcXVlc3QtPmRldik7CisJdV9pbnQ4X3QgKmZp cyA9IGNoLT5kbWEud29yayArIEFUQV9BSENJX0ZCX09GRlNFVCArIDB4NDA7CisKKwlyZXF1ZXN0 LT51LmF0YS5jb3VudCA9IGZpc1sxMl0gfCAoKHVfaW50MTZfdClmaXNbMTNdIDw8IDgpOworCXJl cXVlc3QtPnUuYXRhLmxiYSA9IGZpc1s0XSB8ICgodV9pbnQ2NF90KWZpc1s1XSA8PCA4KSB8CisJ CQkgICAgICgodV9pbnQ2NF90KWZpc1s2XSA8PCAxNik7CisJaWYgKGF0YWRldi0+ZmxhZ3MgJiBB VEFfRF80OEJJVF9BQ1RJVkUpCisJICAgIHJlcXVlc3QtPnUuYXRhLmxiYSB8PSAoKHVfaW50NjRf dClmaXNbOF0gPDwgMjQpIHwKKwkJCQkgICgodV9pbnQ2NF90KWZpc1s5XSA8PCAzMikgfAorCQkJ CSAgKCh1X2ludDY0X3QpZmlzWzEwXSA8PCA0MCk7CisJZWxzZQorCSAgICByZXF1ZXN0LT51LmF0 YS5sYmEgfD0gKCh1X2ludDY0X3QpKGZpc1s3XSAmIDB4MGYpIDw8IDI0KTsKKyAgICB9CisKICAg ICAvKiByZWNvcmQgaG93IG11Y2ggZGF0YSB3ZSBhY3R1YWxseSBtb3ZlZCAqLwogICAgIGNscCA9 IChzdHJ1Y3QgYXRhX2FoY2lfY21kX2xpc3QgKikKLQkgIChjaC0+ZG1hLT53b3JrICsgQVRBX0FI Q0lfQ0xfT0ZGU0VUICsgKEFUQV9BSENJX0NMX1NJWkUgKiB0YWcpKTsKKwkgIChjaC0+ZG1hLndv cmsgKyBBVEFfQUhDSV9DTF9PRkZTRVQgKyAoQVRBX0FIQ0lfQ0xfU0laRSpyZXF1ZXN0LT50YWcp KTsKICAgICByZXF1ZXN0LT5kb25lY291bnQgPSBjbHAtPmJ5dGVjb3VudDsKIAogICAgIC8qIHJl bGVhc2UgU0cgbGlzdCBldGMgKi8KLSAgICBjaC0+ZG1hLT51bmxvYWQoY2gtPmRldik7CisgICAg Y2gtPmRtYS51bmxvYWQocmVxdWVzdCk7CiAKICAgICByZXR1cm4gQVRBX09QX0ZJTklTSEVEOwog fQogCi1zdGF0aWMgdm9pZAotYXRhX2FoY2lfcmVzZXQoZGV2aWNlX3QgZGV2KQorc3RhdGljIGlu dAorYXRhX2FoY2lfaXNzdWVfY21kKGRldmljZV90IGRldiwgdV9pbnQxNl90IGZsYWdzLCBpbnQg dGltZW91dCkKIHsKICAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNl X2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAgICBzdHJ1Y3QgYXRhX2NoYW5u ZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwotICAgIHVfaW50MzJfdCBjbWQsIHNpZ25h dHVyZTsKKyAgICBzdHJ1Y3QgYXRhX2FoY2lfY21kX2xpc3QgKmNscCA9CisJKHN0cnVjdCBhdGFf YWhjaV9jbWRfbGlzdCAqKShjaC0+ZG1hLndvcmsgKyBBVEFfQUhDSV9DTF9PRkZTRVQpOworICAg IHN0cnVjdCBhdGFfYWhjaV9jbWRfdGFiICpjdHAgPQorCShzdHJ1Y3QgYXRhX2FoY2lfY21kX3Rh YiAqKShjaC0+ZG1hLndvcmsgKyBBVEFfQUhDSV9DVF9PRkZTRVQpOworICAgIHVfaW50MzJfdCBz dGF0dXMgPSAwOwogICAgIGludCBvZmZzZXQgPSBjaC0+dW5pdCA8PCA3OwotICAgIGludCB0aW1l b3V0OworICAgIGludCBwb3J0ID0gKGN0cC0+Y2Zpc1sxXSAmIDB4MGYpOworICAgIGludCBjb3Vu dDsKIAotICAgIGlmICghKEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QSSkgJiAoMSA8 PCBjaC0+dW5pdCkpKSB7Ci0JZGV2aWNlX3ByaW50ZihkZXYsICJwb3J0IG5vdCBpbXBsZW1lbnRl ZFxuIik7Ci0JcmV0dXJuOworICAgIGNscC0+cHJkX2xlbmd0aCA9IDA7CisgICAgY2xwLT5jbWRf ZmxhZ3MgPSAoMjAgLyBzaXplb2YodV9pbnQzMl90KSkgfCBmbGFncyB8IChwb3J0IDw8IDEyKTsK KyAgICBjbHAtPmJ5dGVjb3VudCA9IDA7CisgICAgY2xwLT5jbWRfdGFibGVfcGh5cyA9IGh0b2xl NjQoY2gtPmRtYS53b3JrX2J1cyArIEFUQV9BSENJX0NUX09GRlNFVCk7CisKKyAgICAvKiBzZXQg UE0gcG9ydCAqLworICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9GQlMgKyBv ZmZzZXQsIChwb3J0IDw8IDgpIHwgMHgwMDAwMDAwMSk7CisKKyAgICAvKiBpc3N1ZSBjb21tYW5k IHRvIGNvbnRyb2xsZXIgKi8KKyAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1Bf Q0kgKyBvZmZzZXQsIDEpOworCisgICAgLyogcG9sbCBmb3IgY29tbWFuZCBmaW5pc2hlZCAqLwor ICAgIGZvciAoY291bnQgPSAwOyBjb3VudCA8IHRpbWVvdXQ7IGNvdW50KyspIHsKKyAgICAgICAg REVMQVkoMTAwMCk7CisgICAgICAgIGlmICghKChzdGF0dXMgPSBBVEFfSU5MKGN0bHItPnJfcmVz MiwgQVRBX0FIQ0lfUF9DSSArIG9mZnNldCkpICYgMSkpCisgICAgICAgICAgICBicmVhazsKKyAg ICB9CisKKyAgICAvKiBjbGVhciBpbnRlcnJ1cHRzICovCisgICAgQVRBX09VVEwoY3Rsci0+cl9y ZXMyLCBBVEFfQUhDSV9QX0lTICsgb2Zmc2V0LAorCSAgICAgQVRBX0lOTChjdGxyLT5yX3JlczIs IEFUQV9BSENJX1BfSVMgKyBvZmZzZXQpKTsKKworICAgIGlmIChib290dmVyYm9zZSkKKwlkZXZp Y2VfcHJpbnRmKGRldiwgImFoY2lfaXNzdWVfY21kIHRpbWU9JWRtcyBjbnQ9JWRtcyBzdGF0dXM9 JTA4eFxuIiwKKwkJICAgICAgdGltZW91dCwgY291bnQsIHN0YXR1cyk7CisgICAgaWYgKHRpbWVv dXQgJiYgKGNvdW50ID49IHRpbWVvdXQpKQorCXJldHVybiBFSU87CisKKyAgICByZXR1cm4gMDsK K30KKworc3RhdGljIGludAorYXRhX2FoY2lfcG1fcmVhZChkZXZpY2VfdCBkZXYsIGludCBwb3J0 LCBpbnQgcmVnLCB1X2ludDMyX3QgKnJlc3VsdCkKK3sKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwg KmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIHN0cnVjdCBhdGFfYWhjaV9jbWRfdGFi ICpjdHAgPQorCShzdHJ1Y3QgYXRhX2FoY2lfY21kX3RhYiAqKShjaC0+ZG1hLndvcmsgKyBBVEFf QUhDSV9DVF9PRkZTRVQpOworICAgIHVfaW50OF90ICpmaXMgPSBjaC0+ZG1hLndvcmsgKyBBVEFf QUhDSV9GQl9PRkZTRVQgKyAweDQwOworCisgICAgYnplcm8oY3RwLT5jZmlzLCA2NCk7CisgICAg Y3RwLT5jZmlzWzBdID0gMHgyNzsJLyogaG9zdCB0byBkZXZpY2UgKi8KKyAgICBjdHAtPmNmaXNb MV0gPSAweDhmOwkvKiBjb21tYW5kIEZJUyB0byBQTSBwb3J0ICovCisgICAgY3RwLT5jZmlzWzJd ID0gQVRBX1JFQURfUE07CisgICAgY3RwLT5jZmlzWzNdID0gcmVnOworICAgIGN0cC0+Y2Zpc1s3 XSA9IHBvcnQgfCBBVEFfRF9MQkE7CisgICAgY3RwLT5jZmlzWzE1XSA9IEFUQV9BXzRCSVQ7CisK KyAgICBpZiAoYXRhX2FoY2lfaXNzdWVfY21kKGRldiwgMCwgMTApKSB7CisJZGV2aWNlX3ByaW50 ZihkZXYsICJlcnJvciByZWFkaW5nIFBNIHBvcnRcbiIpOworCXJldHVybiBFSU87CiAgICAgfQot ICAgIGNoLT5kZXZpY2VzID0gMDsKKworICAgICpyZXN1bHQgPSBmaXNbMTJdIHwgKGZpc1s0XSA8 PCA4KSB8IChmaXNbNV0gPDwgMTYpIHwgKGZpc1s2XSA8PCAyNCk7CisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQKK2F0YV9haGNpX3BtX3dyaXRlKGRldmljZV90IGRldiwgaW50IHBvcnQs IGludCByZWcsIHVfaW50MzJfdCB2YWx1ZSkKK3sKKyAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9s bGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKKyAg ICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIHN0 cnVjdCBhdGFfYWhjaV9jbWRfdGFiICpjdHAgPQorCShzdHJ1Y3QgYXRhX2FoY2lfY21kX3RhYiAq KShjaC0+ZG1hLndvcmsgKyBBVEFfQUhDSV9DVF9PRkZTRVQpOworICAgIGludCBvZmZzZXQgPSBj aC0+dW5pdCA8PCA3OworCisgICAgYnplcm8oY3RwLT5jZmlzLCA2NCk7CisgICAgY3RwLT5jZmlz WzBdID0gMHgyNzsJLyogaG9zdCB0byBkZXZpY2UgKi8KKyAgICBjdHAtPmNmaXNbMV0gPSAweDhm OwkvKiBjb21tYW5kIEZJUyB0byBQTSBwb3J0ICovCisgICAgY3RwLT5jZmlzWzJdID0gQVRBX1dS SVRFX1BNOworICAgIGN0cC0+Y2Zpc1szXSA9IHJlZzsKKyAgICBjdHAtPmNmaXNbN10gPSBwb3J0 IHwgQVRBX0RfTEJBOworICAgIGN0cC0+Y2Zpc1sxMl0gPSB2YWx1ZSAmIDB4ZmY7CisgICAgY3Rw LT5jZmlzWzRdID0gKHZhbHVlID4+IDgpICYgMHhmZjs7CisgICAgY3RwLT5jZmlzWzVdID0gKHZh bHVlID4+IDE2KSAmIDB4ZmY7OworICAgIGN0cC0+Y2Zpc1s2XSA9ICh2YWx1ZSA+PiAyNCkgJiAw eGZmOzsKKyAgICBjdHAtPmNmaXNbMTVdID0gQVRBX0FfNEJJVDsKKworICAgIGlmIChhdGFfYWhj aV9pc3N1ZV9jbWQoZGV2LCAwLCAxMDApKSB7CisJZGV2aWNlX3ByaW50ZihkZXYsICJlcnJvciB3 cml0aW5nIFBNIHBvcnRcbiIpOworCXJldHVybiBBVEFfRV9BQk9SVDsKKyAgICB9CisKKyAgICBy ZXR1cm4gKEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX1RGRCArIG9mZnNldCkgPj4g OCkgJiAweGZmOworfQorCitzdGF0aWMgdm9pZAorYXRhX2FoY2lfcmVzdGFydChkZXZpY2VfdCBk ZXYpCit7CisgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRf c29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CisgICAgc3RydWN0IGF0YV9jaGFubmVsICpj aCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKyAgICB1X2ludDMyX3QgY21kOworICAgIGludCBv ZmZzZXQgPSBjaC0+dW5pdCA8PCA3OworICAgIGludCB0aW1lb3V0OwogCiAgICAgLyoga2lsbCBv ZmYgYWxsIGFjdGl2aXR5IG9uIHRoaXMgY2hhbm5lbCAqLwogICAgIGNtZCA9IEFUQV9JTkwoY3Rs ci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NNRCArIG9mZnNldCk7CkBAIC03ODYsNyArMTAyMiw3IEBA IGF0YV9haGNpX3Jlc2V0KGRldmljZV90IGRldikKICAgICB0aW1lb3V0ID0gMDsKICAgICBkbyB7 CiAJREVMQVkoMTAwMCk7Ci0JaWYgKHRpbWVvdXQrKyA+IDUwMCkgeworCWlmICh0aW1lb3V0Kysg PiAxMDAwKSB7CiAJICAgIGRldmljZV9wcmludGYoZGV2LCAic3RvcHBpbmcgQUhDSSBlbmdpbmUg ZmFpbGVkXG4iKTsKIAkgICAgYnJlYWs7CiAJfQpAQCAtODAxLDcgKzEwMzcsNyBAQCBhdGFfYWhj aV9yZXNldChkZXZpY2VfdCBkZXYpCiAJdGltZW91dCA9IDA7CiAJZG8gewogCSAgICBERUxBWSgx MDAwKTsKLQkgICAgaWYgKHRpbWVvdXQrKyA+IDUwMCkgeworCSAgICBpZiAodGltZW91dCsrID4g MTAwMCkgewogCQlkZXZpY2VfcHJpbnRmKGRldiwgImV4ZWN1dGluZyBDTE8gZmFpbGVkXG4iKTsK IAkJYnJlYWs7CiAJICAgIH0KQEAgLTgwOSw0NSArMTA0NSwxNTEgQEAgYXRhX2FoY2lfcmVzZXQo ZGV2aWNlX3QgZGV2KQogCXdoaWxlIChBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9D TUQrb2Zmc2V0KSZBVEFfQUhDSV9QX0NNRF9DTE8pOwogICAgIH0KIAotICAgIC8qIHJlc2V0IFBI WSBhbmQgZGVjaWRlIHdoYXQgaXMgcHJlc2VudCAqLwotICAgIGlmIChhdGFfc2F0YV9waHlfcmVz ZXQoZGV2KSkgeworICAgIC8qIGNsZWFyIFNBVEEgZXJyb3IgcmVnaXN0ZXIgKi8KKyAgICBBVEFf SURYX09VVEwoY2gsIEFUQV9TRVJST1IsIEFUQV9JRFhfSU5MKGNoLCBBVEFfU0VSUk9SKSk7CisK KyAgICAvKiBjbGVhciBhbnkgaW50ZXJydXB0cyBwZW5kaW5nIG9uIHRoaXMgY2hhbm5lbCAqLwor ICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9JUyArIG9mZnNldCwKKwkgICAg IEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0lTICsgb2Zmc2V0KSk7CisKKyAgICAv KiBzdGFydCBvcGVyYXRpb25zIG9uIHRoaXMgY2hhbm5lbCAqLworICAgIGNtZCA9IEFUQV9JTkwo Y3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NNRCArIG9mZnNldCk7CisgICAgQVRBX09VVEwoY3Rs ci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NNRCArIG9mZnNldCwKKwkgICAgIGNtZCB8IChBVEFfQUhD SV9QX0NNRF9GUkUgfCBBVEFfQUhDSV9QX0NNRF9TVCkgfAorCSAgICAgKGNoLT5kZXZpY2VzICYg QVRBX1BPUlRNVUxUSVBMSUVSID8gQVRBX0FIQ0lfUF9DTURfUE1BIDogMCkpOworfQorCitzdGF0 aWMgdV9pbnQzMl90CithdGFfYWhjaV9zb2Z0cmVzZXQoZGV2aWNlX3QgZGV2LCBpbnQgcG9ydCkK K3sKKyAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0 YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0g ZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIGludCBvZmZzZXQgPSBjaC0+dW5pdCA8PCA3Owor ICAgIGludCB0aW1lb3V0ID0gMDsKKyNpZmRlZiBBSENJX1BNCisgICAgc3RydWN0IGF0YV9haGNp X2NtZF90YWIgKmN0cCA9CisJKHN0cnVjdCBhdGFfYWhjaV9jbWRfdGFiICopKGNoLT5kbWEud29y ayArIEFUQV9BSENJX0NUX09GRlNFVCk7CisKKyAgICAvKiBraWNrIGNvbnRyb2xsZXIgaW50byBz YW5lIHN0YXRlIGlmIG5lZWRlZCAqLworICAgIGF0YV9haGNpX3Jlc3RhcnQoZGV2KTsKKworICAg IC8qIHB1bGwgcmVzZXQgYWN0aXZlICovCisgICAgYnplcm8oY3RwLT5jZmlzLCA2NCk7CisgICAg Y3RwLT5jZmlzWzBdID0gMHgyNzsKKyAgICBjdHAtPmNmaXNbMV0gPSBwb3J0ICYgMHgwZjsKKyAg ICAvL2N0cC0+Y2Zpc1s3XSA9IEFUQV9EX0xCQSB8IEFUQV9EX0lCTTsKKyAgICBjdHAtPmNmaXNb MTVdID0gKEFUQV9BXzRCSVQgfCBBVEFfQV9SRVNFVCk7CisKKyAgICBpZiAoYXRhX2FoY2lfaXNz dWVfY21kKGRldiwgQVRBX0FIQ0lfQ01EX1JFU0VUIHwgQVRBX0FIQ0lfQ01EX0NMUl9CVVNZLDEw MCkpCisJZGV2aWNlX3ByaW50ZihkZXYsICJzZXR0aW5nIFNSU1QgZmFpbGVkID8/XG4iKTsKKwkv L3JldHVybiAtMTsKIAotCS8qIGNsZWFyIGFueSBpbnRlcnJ1cHRzIHBlbmRpbmcgb24gdGhpcyBj aGFubmVsICovCi0JQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0lTICsgb2Zmc2V0 LAotCQkgQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfSVMgKyBvZmZzZXQpKTsKKyAg ICBhdGFfdWRlbGF5KDUwMDApOwogCi0JLyogY2xlYXIgU0FUQSBlcnJvciByZWdpc3RlciAqLwot CUFUQV9JRFhfT1VUTChjaCwgQVRBX1NFUlJPUiwgQVRBX0lEWF9JTkwoY2gsIEFUQV9TRVJST1Ip KTsKKyAgICAvKiBwdWxsIHJlc2V0IGluYWN0aXZlIC0+IGRldmljZSBzb2Z0cmVzZXQgKi8KKyAg ICBiemVybyhjdHAtPmNmaXMsIDY0KTsKKyAgICBjdHAtPmNmaXNbMF0gPSAweDI3OworICAgIGN0 cC0+Y2Zpc1sxXSA9IHBvcnQgJiAweDBmOworICAgIC8vY3RwLT5jZmlzWzddID0gQVRBX0RfTEJB IHwgQVRBX0RfSUJNOworICAgIGN0cC0+Y2Zpc1sxNV0gPSBBVEFfQV80QklUOworICAgIGlmIChh dGFfYWhjaV9pc3N1ZV9jbWQoZGV2LCAwLCAwKSkKKwlyZXR1cm4gLTE7CisKKyAgICBhdGFfdWRl bGF5KDE1MDAwMCk7CisKKyNlbmRpZgorICAgIGRvIHsKKwkgICAgREVMQVkoMTAwMCk7CisJICAg IGlmICh0aW1lb3V0KysgPiAxMDAwKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAic3RpbGwgQlVT WSBhZnRlciBzb2Z0cmVzZXRcbiIpOworCQlicmVhazsKKwkgICAgfQorICAgIH0gd2hpbGUgKEFU QV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX1RGRCArIG9mZnNldCkgJiBBVEFfU19CVVNZ KTsKKyAgICBpZiAoYm9vdHZlcmJvc2UpCisJZGV2aWNlX3ByaW50ZihkZXYsICJCVVNZIHdhaXQg dGltZT0lZG1zXG4iLCB0aW1lb3V0KTsKIAotCS8qIHN0YXJ0IG9wZXJhdGlvbnMgb24gdGhpcyBj aGFubmVsICovCisgICAgcmV0dXJuIEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX1NJ RyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkCithdGFfYWhjaV9yZXNldChkZXZpY2VfdCBk ZXYpCit7CisgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRf c29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CisgICAgc3RydWN0IGF0YV9jaGFubmVsICpj aCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKyAgICB1X2ludDY0X3Qgd29yazsKKyAgICB1X2lu dDMyX3QgY21kLCBzaWduYXR1cmU7CisgICAgaW50IG9mZnNldCA9IGNoLT51bml0IDw8IDc7CisK KyAgICBpZiAoIShBVEFfSU5MKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUEkpICYgKDEgPDwgY2gt PnVuaXQpKSkgeworCWRldmljZV9wcmludGYoZGV2LCAicG9ydCBub3QgaW1wbGVtZW50ZWRcbiIp OworCXJldHVybjsKKyAgICB9CisKKyAgICAvKiBzZXR1cCB3b3JrIGFyZWFzICovCisgICAgd29y ayA9IGNoLT5kbWEud29ya19idXMgKyBBVEFfQUhDSV9DTF9PRkZTRVQ7CisgICAgQVRBX09VVEwo Y3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9QX0NMQiArIG9mZnNldCwgd29yayAmIDB4ZmZmZmZmZmYp OworICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9DTEJVICsgb2Zmc2V0LCB3 b3JrID4+IDMyKTsKKworICAgIHdvcmsgPSBjaC0+ZG1hLndvcmtfYnVzICsgQVRBX0FIQ0lfRkJf T0ZGU0VUOworICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9GQiArIG9mZnNl dCwgd29yayAmIDB4ZmZmZmZmZmYpOyAKKyAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIEFUQV9B SENJX1BfRkJVICsgb2Zmc2V0LCB3b3JrID4+IDMyKTsKKworICAgIC8qIGVuYWJsZSB3YW50ZWQg cG9ydCBpbnRlcnJ1cHRzICovCisgICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCBBVEFfQUhDSV9Q X0lFICsgb2Zmc2V0LAorCSAgICAgKEFUQV9BSENJX1BfSVhfQ1BEIHwgQVRBX0FIQ0lfUF9JWF9U RkUgfCBBVEFfQUhDSV9QX0lYX0hCRiB8CisJICAgICAgQVRBX0FIQ0lfUF9JWF9IQkQgfCBBVEFf QUhDSV9QX0lYX0lGIHwgQVRBX0FIQ0lfUF9JWF9PRiB8CisJICAgICAgQVRBX0FIQ0lfUF9JWF9Q UkMgfCBBVEFfQUhDSV9QX0lYX1BDIHwgQVRBX0FIQ0lfUF9JWF9EUCB8CisJICAgICAgQVRBX0FI Q0lfUF9JWF9VRiB8IEFUQV9BSENJX1BfSVhfU0RCIHwgQVRBX0FIQ0lfUF9JWF9EUyB8CisJICAg ICAgQVRBX0FIQ0lfUF9JWF9QUyB8IEFUQV9BSENJX1BfSVhfREhSKSk7CisKKyAgICAvKiBhY3Rp dmF0ZSB0aGUgY2hhbm5lbCBhbmQgcG93ZXIvc3BpbiB1cCBkZXZpY2UgKi8KKyAgICBBVEFfT1VU TChjdGxyLT5yX3JlczIsIEFUQV9BSENJX1BfQ01EICsgb2Zmc2V0LAorCSAgICAgKEFUQV9BSENJ X1BfQ01EX0FDVElWRSB8IEFUQV9BSENJX1BfQ01EX1BPRCB8IEFUQV9BSENJX1BfQ01EX1NVRCkp OworCisgICAgYXRhX2FoY2lfcmVzdGFydChkZXYpOworCisgICAgLyogZW5hYmxlIEZJUyBiYXNl ZCBzd2l0Y2hpbmcgKi8KKyAgICAvL0FUQV9PVVRMKGN0bHItPnJfcmVzMiwgQVRBX0FIQ0lfUF9G QlMgKyBvZmZzZXQsIDB4MDAwMDAwMDMpOworCisgICAgaWYgKCFhdGFfc2F0YV9waHlfcmVzZXQo ZGV2KSkgeworCWlmIChib290dmVyYm9zZSkKKwkgICAgZGV2aWNlX3ByaW50ZihkZXYsICJwaHkg cmVzZXQgZm91bmQgbm8gZGV2aWNlXG4iKTsKKwljaC0+ZGV2aWNlcyA9IDA7CisKKwkvKiBraWxs IG9mZiBhbGwgYWN0aXZpdHkgb24gdGhpcyBjaGFubmVsICovCisJY21kID0gQVRBX0lOTChjdGxy LT5yX3JlczIsIEFUQV9BSENJX1BfQ01EICsgb2Zmc2V0KTsKIAlBVEFfT1VUTChjdGxyLT5yX3Jl czIsIEFUQV9BSENJX1BfQ01EICsgb2Zmc2V0LAotCQkgKEFUQV9BSENJX1BfQ01EX0FDVElWRSB8 IEFUQV9BSENJX1BfQ01EX0ZSRSB8Ci0JCSAgQVRBX0FIQ0lfUF9DTURfUE9EIHwgQVRBX0FIQ0lf UF9DTURfU1VEIHwgQVRBX0FIQ0lfUF9DTURfU1QpKTsKKwkJIGNtZCAmIH4oQVRBX0FIQ0lfUF9D TURfRlJFIHwgQVRBX0FIQ0lfUF9DTURfU1QpKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgLyog b25seSBwcm9iZSBmb3IgUG9ydE11bHRpcGxpZXIgaWYgSFcgaGFzIHN1cHBvcnQgKi8KKyAgICBp ZiAoQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX0NBUCkgJiBBVEFfQUhDSV9DQVBfU1BN KQorCXNpZ25hdHVyZSA9IGF0YV9haGNpX3NvZnRyZXNldChkZXYsIEFUQV9QTSk7CisgICAgZWxz ZSB7CisJc2lnbmF0dXJlID0gYXRhX2FoY2lfc29mdHJlc2V0KGRldiwgMCk7CisgICAgfQorICAg IGlmIChib290dmVyYm9zZSkKKwlkZXZpY2VfcHJpbnRmKGRldiwgIlNJR05BVFVSRTogJTA4eFxu Iiwgc2lnbmF0dXJlKTsKIAotCXNpZ25hdHVyZSA9IEFUQV9JTkwoY3Rsci0+cl9yZXMyLCBBVEFf QUhDSV9QX1NJRyArIG9mZnNldCk7CisgICAgc3dpdGNoIChzaWduYXR1cmUpIHsKKyAgICBjYXNl IDB4MDAwMDAxMDE6CisJY2gtPmRldmljZXMgPSBBVEFfQVRBX01BU1RFUjsKKwlicmVhazsKKyAg ICBjYXNlIDB4OTY2OTAxMDE6CisJY2gtPmRldmljZXMgPSBBVEFfUE9SVE1VTFRJUExJRVI7CisJ YXRhX3BtX2lkZW50aWZ5KGRldik7CisJYnJlYWs7CisgICAgY2FzZSAweGViMTQwMTAxOgorCWNo LT5kZXZpY2VzID0gQVRBX0FUQVBJX01BU1RFUjsKKwlicmVhazsKKyAgICBkZWZhdWx0OiAvKiBT T1MgWFhYICovCiAJaWYgKGJvb3R2ZXJib3NlKQotCSAgICBkZXZpY2VfcHJpbnRmKGRldiwgIlNJ R05BVFVSRTogJTA4eFxuIiwgc2lnbmF0dXJlKTsKLQlzd2l0Y2ggKHNpZ25hdHVyZSkgewotCWNh c2UgMHgwMDAwMDEwMToKLQkgICAgY2gtPmRldmljZXMgPSBBVEFfQVRBX01BU1RFUjsKLQkgICAg YnJlYWs7Ci0JY2FzZSAweDk2NjkwMTAxOgotCSAgICBjaC0+ZGV2aWNlcyA9IEFUQV9QT1JUTVVM VElQTElFUjsKLQkgICAgZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiUG9ydG11bHRpcGxpZXJzIG5v dCBzdXBwb3J0ZWQgeWV0XG4iKTsKLQkgICAgY2gtPmRldmljZXMgPSAwOwotCSAgICBicmVhazsK LQljYXNlIDB4ZWIxNDAxMDE6Ci0JICAgIGNoLT5kZXZpY2VzID0gQVRBX0FUQVBJX01BU1RFUjsK LQkgICAgYnJlYWs7Ci0JZGVmYXVsdDogLyogU09TIFhYWCAqLwotCSAgICBpZiAoYm9vdHZlcmJv c2UpCi0JCWRldmljZV9wcmludGYoY2gtPmRldiwgIk5vIHNpZ25hdHVyZSwgYXN1bWluZyBkaXNr IGRldmljZVxuIik7Ci0JICAgIGNoLT5kZXZpY2VzID0gQVRBX0FUQV9NQVNURVI7Ci0JfQorCSAg ICBkZXZpY2VfcHJpbnRmKGRldiwgIk5vIHNpZ25hdHVyZSwgYXN1bWluZyBkaXNrIGRldmljZVxu Iik7CisJY2gtPmRldmljZXMgPSBBVEFfQVRBX01BU1RFUjsKICAgICB9CiAgICAgaWYgKGJvb3R2 ZXJib3NlKQotICAgICAgICBkZXZpY2VfcHJpbnRmKGRldiwgImFoY2lfcmVzZXQgZGV2aWNlcz0w eCViXG4iLCBjaC0+ZGV2aWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAiXDIwXDRBVEFQSV9T TEFWRVwzQVRBUElfTUFTVEVSXDJBVEFfU0xBVkVcMUFUQV9NQVNURVIiKTsKKyAgICAgICAgZGV2 aWNlX3ByaW50ZihkZXYsICJhaGNpX3Jlc2V0IGRldmljZXM9JTA4eFxuIiwgY2gtPmRldmljZXMp OwogfQogCiBzdGF0aWMgdm9pZApAQCAtODYzLDcgKzEyMDUsOCBAQCBhdGFfYWhjaV9kbWFzZXRw cmQodm9pZCAqeHNjLCBidXNfZG1hX3NlCiAJICAgIHByZFtpXS5kYmMgPSBodG9sZTMyKChzZWdz W2ldLmRzX2xlbiAtIDEpICYgQVRBX0FIQ0lfUFJEX01BU0spOwogCX0KICAgICB9Ci0gICAgS0FT U0VSVChuc2VncyA8PSBBVEFfRE1BX0VOVFJJRVMsICgidG9vIG1hbnkgRE1BIHNlZ21lbnQgZW50 cmllc1xuIikpOworCisgICAgS0FTU0VSVChuc2VncyA8PSBBVEFfQUhDSV9ETUFfRU5UUklFUywg KCJ0b28gbWFueSBETUEgc2VnbWVudCBlbnRyaWVzXG4iKSk7CiAgICAgYXJncy0+bnNlZ3MgPSBu c2VnczsKIH0KIApAQCAtODc0LDEzICsxMjE3LDExIEBAIGF0YV9haGNpX2RtYWluaXQoZGV2aWNl X3QgZGV2KQogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRl dik7CiAKICAgICBhdGFfZG1haW5pdChkZXYpOwotICAgIGlmIChjaC0+ZG1hKSB7Ci0JLyogbm90 ZSBzdGFydCBhbmQgc3RvcCBhcmUgbm90IHVzZWQgaGVyZSAqLwotCWNoLT5kbWEtPnNldHByZCA9 IGF0YV9haGNpX2RtYXNldHByZDsKLQljaC0+ZG1hLT5tYXhfaW9zaXplID0gODE5MiAqIERFVl9C U0laRTsKLQlpZiAoQVRBX0lOTChjdGxyLT5yX3JlczIsIEFUQV9BSENJX0NBUCkgJiBBVEFfQUhD SV9DQVBfNjRCSVQpCi0JICAgIGNoLT5kbWEtPm1heF9hZGRyZXNzID0gQlVTX1NQQUNFX01BWEFE RFI7Ci0gICAgfQorICAgIC8qIG5vdGUgc3RhcnQgYW5kIHN0b3AgYXJlIG5vdCB1c2VkIGhlcmUg Ki8KKyAgICBjaC0+ZG1hLnNldHByZCA9IGF0YV9haGNpX2RtYXNldHByZDsKKyAgICBjaC0+ZG1h Lm1heF9pb3NpemUgPSA4MTkyICogREVWX0JTSVpFOworICAgIGlmIChBVEFfSU5MKGN0bHItPnJf cmVzMiwgQVRBX0FIQ0lfQ0FQKSAmIEFUQV9BSENJX0NBUF82NEJJVCkKKwljaC0+ZG1hLm1heF9h ZGRyZXNzID0gQlVTX1NQQUNFX01BWEFERFI7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTk1Niw5ICsx Mjk3LDkgQEAgYXRhX2FjYXJkX3N0YXR1cyhkZXZpY2VfdCBkZXYpCiAgICAgc3RydWN0IGF0YV9j aGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKIAogICAgIGlmIChjdGxyLT5jaGlw LT5jZmcxID09IEFUUE9MRCAmJgotCUFUQV9MT0NLSU5HKGNoLT5kZXYsIEFUQV9MRl9XSElDSCkg IT0gY2gtPnVuaXQpCisJQVRBX0xPQ0tJTkcoZGV2LCBBVEFfTEZfV0hJQ0gpICE9IGNoLT51bml0 KQogCSAgICByZXR1cm4gMDsKLSAgICBpZiAoY2gtPmRtYSAmJiAoY2gtPmRtYS0+ZmxhZ3MgJiBB VEFfRE1BX0FDVElWRSkpIHsKKyAgICBpZiAoY2gtPmRtYS5mbGFncyAmIEFUQV9ETUFfQUNUSVZF KSB7CiAJaW50IGJtc3RhdCA9IEFUQV9JRFhfSU5CKGNoLCBBVEFfQk1TVEFUX1BPUlQpICYgQVRB X0JNU1RBVF9NQVNLOwogCiAJaWYgKChibXN0YXQgJiAoQVRBX0JNU1RBVF9BQ1RJVkUgfCBBVEFf Qk1TVEFUX0lOVEVSUlVQVCkpICE9CkBAIC05ODUsNyArMTMyNiw3IEBAIGF0YV9hY2FyZF84NTBf c2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCAKICAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVy ICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhncGFyZW50KTsKICAgICBzdHJ1Y3QgYXRhX2NoYW5u ZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAgICBz dHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwotICAgIGlu dCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIEFUQV9ERVYoYXRhZGV2LT51bml0KTsKKyAgICBp bnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBhdGFkZXYtPnVuaXQ7CiAgICAgaW50IGVycm9y OwogCiAgICAgbW9kZSA9IGF0YV9saW1pdF9tb2RlKGRldiwgbW9kZSwKQEAgLTEwMjEsNyArMTM2 Miw3IEBAIGF0YV9hY2FyZF84Nlhfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCAKICAgICBzdHJ1 Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhncGFyZW50KTsK ICAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0 X3BhcmVudChkZXYpKTsKICAgICBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dl dF9zb2Z0YyhkZXYpOwotICAgIGludCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIEFUQV9ERVYo YXRhZGV2LT51bml0KTsKKyAgICBpbnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBhdGFkZXYt PnVuaXQ7CiAgICAgaW50IGVycm9yOwogCiAKQEAgLTEyMzQsNyArMTU3NSw3IEBAIGF0YV9hbGlf c2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRy b2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGdwYXJlbnQpOwogICAgIHN0cnVjdCBhdGFf Y2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwog ICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0g ICAgaW50IGRldm5vID0gKGNoLT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOwor ICAgIGludCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKICAgICBpbnQg ZXJyb3I7CiAKICAgICBtb2RlID0gYXRhX2xpbWl0X21vZGUoZGV2LCBtb2RlLCBjdGxyLT5jaGlw LT5tYXhfZG1hKTsKQEAgLTEzMjIsMTMgKzE2NjMsMzQgQEAgYXRhX2FtZF9jaGlwaW5pdChkZXZp Y2VfdCBkZXYpCiAgICAgaWYgKGF0YV9zZXR1cF9pbnRlcnJ1cHQoZGV2KSkKIAlyZXR1cm4gRU5Y SU87CiAKLSAgICAvKiBkaXNhYmxlL3NldCBwcmVmZXRjaCwgcG9zdHdyaXRlICovCi0gICAgaWYg KGN0bHItPmNoaXAtPmNmZzIgJiBBTURCVUcpCi0JcGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4NDEs IHBjaV9yZWFkX2NvbmZpZyhkZXYsIDB4NDEsIDEpICYgMHgwZiwgMSk7Ci0gICAgZWxzZQotCXBj aV93cml0ZV9jb25maWcoZGV2LCAweDQxLCBwY2lfcmVhZF9jb25maWcoZGV2LCAweDQxLCAxKSB8 IDB4ZjAsIDEpOworICAgIC8qIGRpc2FibGUvc2V0IHByZWZldGNoLCBwb3N0d3JpdGUgKi8KKyAg ICBpZiAoY3Rsci0+Y2hpcC0+Y2ZnMiAmIEFNREJVRykKKwlwY2lfd3JpdGVfY29uZmlnKGRldiwg MHg0MSwgcGNpX3JlYWRfY29uZmlnKGRldiwgMHg0MSwgMSkgJiAweDBmLCAxKTsKKyAgICBlbHNl CisJcGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4NDEsIHBjaV9yZWFkX2NvbmZpZyhkZXYsIDB4NDEs IDEpIHwgMHhmMCwgMSk7CisKKyAgICBjdGxyLT5zZXRtb2RlID0gYXRhX3ZpYV9mYW1pbHlfc2V0 bW9kZTsKKyAgICByZXR1cm4gMDsKK30KKworCisvKgorICogQWRhcHRlYyBjaGlwc2V0IHN1cHBv cnQgZnVuY3Rpb25zCisgKi8KK2ludAorYXRhX2FkYXB0ZWNfaWRlbnQoZGV2aWNlX3QgZGV2KQor eworICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRj KGRldik7CisgICAgc3RhdGljIHN0cnVjdCBhdGFfY2hpcF9pZCBpZHNbXSA9CisgICAge3sgQVRB X0FEQVBURUNfMTQyMCwgMCwgNCwgTVY2MFhYLCBBVEFfU0EzMDAsICIxNDIwU0EiIH0sCisgICAg IHsgMCwgMCwgMCwgMCwgMCwgMH19OworCisgICAgaWYgKCEoY3Rsci0+Y2hpcCA9IGF0YV9tYXRj aF9jaGlwKGRldiwgaWRzKSkpCisJcmV0dXJuIEVOWElPOworCisgICAgYXRhX3NldF9kZXNjKGRl dik7CisgICAgY3Rsci0+Y2hpcGluaXQgPSBhdGFfbWFydmVsbF9lZG1hX2NoaXBpbml0OwogCi0g ICAgY3Rsci0+c2V0bW9kZSA9IGF0YV92aWFfZmFtaWx5X3NldG1vZGU7CiAgICAgcmV0dXJuIDA7 CiB9CiAKQEAgLTEzOTgsNyArMTc2MCw3IEBAIGF0YV9hdGlfc2V0bW9kZShkZXZpY2VfdCBkZXYs IGludCBtb2RlKQogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2Vf Z2V0X3NvZnRjKGdwYXJlbnQpOwogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf Z2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgIHN0cnVjdCBhdGFfZGV2aWNl ICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0gICAgaW50IGRldm5vID0gKGNoLT51 bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOworICAgIGludCBkZXZubyA9IChjaC0+ dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKICAgICBpbnQgb2Zmc2V0ID0gKGRldm5vIF4gMHgw MSkgPDwgMzsKICAgICBpbnQgZXJyb3I7CiAgICAgdV9pbnQ4X3QgcGlvdGltaW5nc1tdID0geyAw eDVkLCAweDQ3LCAweDM0LCAweDIyLCAweDIwLCAweDM0LCAweDIyLCAweDIwLApAQCAtMTQ5Miwx NSArMTg1NCwxNSBAQCBhdGFfY3lyaXhfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlCiB7 CiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dl dF9wYXJlbnQoZGV2KSk7CiAgICAgc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRldmljZV9n ZXRfc29mdGMoZGV2KTsKLSAgICBpbnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBBVEFfREVW KGF0YWRldi0+dW5pdCk7CisgICAgaW50IGRldm5vID0gKGNoLT51bml0IDw8IDEpICsgYXRhZGV2 LT51bml0OwogICAgIHVfaW50MzJfdCBwaW90aW1pbmdbXSA9IAogCXsgMHgwMDAwOTE3MiwgMHgw MDAxMjE3MSwgMHgwMDAyMDA4MCwgMHgwMDAzMjAxMCwgMHgwMDA0MDAxMCB9OwogICAgIHVfaW50 MzJfdCBkbWF0aW1pbmdbXSA9IHsgMHgwMDA3Nzc3MSwgMHgwMDAxMjEyMSwgMHgwMDAwMjAyMCB9 OwogICAgIHVfaW50MzJfdCB1ZG1hdGltaW5nW10gPSB7IDB4MDA5MjEyNTAsIDB4MDA5MTExNDAs IDB4MDA5MTEwMzAgfTsKICAgICBpbnQgZXJyb3I7CiAKLSAgICBjaC0+ZG1hLT5hbGlnbm1lbnQg PSAxNjsKLSAgICBjaC0+ZG1hLT5tYXhfaW9zaXplID0gMTI2ICogREVWX0JTSVpFOworICAgIGNo LT5kbWEuYWxpZ25tZW50ID0gMTY7CisgICAgY2gtPmRtYS5tYXhfaW9zaXplID0gMTI2ICogREVW X0JTSVpFOwogCiAgICAgbW9kZSA9IGF0YV9saW1pdF9tb2RlKGRldiwgbW9kZSwgQVRBX1VETUEy KTsKIApAQCAtMTY4MSw3ICsyMDQzLDcgQEAgYXRhX2hpZ2hwb2ludF9zZXRtb2RlKGRldmljZV90 IGRldiwgaW50IAogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2Vf Z2V0X3NvZnRjKGdwYXJlbnQpOwogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf Z2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgIHN0cnVjdCBhdGFfZGV2aWNl ICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0gICAgaW50IGRldm5vID0gKGNoLT51 bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOworICAgIGludCBkZXZubyA9IChjaC0+ dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKICAgICBpbnQgZXJyb3I7CiAgICAgdV9pbnQzMl90 IHRpbWluZ3MzM1tdWzRdID0gewogICAgIC8qICAgIEhQVDM2NiAgICAgIEhQVDM3MCAgICAgIEhQ VDM3MiAgICAgIEhQVDM3NCAgICAgICAgICAgICAgIG1vZGUgKi8KQEAgLTE4MDAsNiArMjE2Miw3 IEBAIGF0YV9pbnRlbF9pZGVudChkZXZpY2VfdCBkZXYpCiAgICAgIHsgQVRBX0k2M1hYRVNCMl9S MiwgMCwgQUhDSSwgMHgwMCwgQVRBX1NBMzAwLCAiNjNYWEVTQjIiIH0sCiAgICAgIHsgQVRBX0k4 MjgwMUhCX1MxLCAgMCwgQUhDSSwgMHgwMCwgQVRBX1NBMzAwLCAiSUNIOCIgfSwKICAgICAgeyBB VEFfSTgyODAxSEJfUzIsICAwLCBBSENJLCAweDAwLCBBVEFfU0EzMDAsICJJQ0g4IiB9LAorICAg ICB7IEFUQV9JODI4MDFIQl9SMSwgIDIsIEFIQ0ksIDB4MDAsIEFUQV9TQTMwMCwgIklDSDlSIiB9 LAogICAgICB7IEFUQV9JODI4MDFIQl9SMSwgIDAsIEFIQ0ksIDB4MDAsIEFUQV9TQTMwMCwgIklD SDgiIH0sCiAgICAgIHsgQVRBX0k4MjgwMUhCX0FINCwgMCwgQUhDSSwgMHgwMCwgQVRBX1NBMzAw LCAiSUNIOCIgfSwKICAgICAgeyBBVEFfSTgyODAxSEJfQUg2LCAwLCBBSENJLCAweDAwLCBBVEFf U0EzMDAsICJJQ0g4IiB9LApAQCAtMTk2Myw3ICsyMzI2LDcgQEAgYXRhX2ludGVsX25ld19zZXRt b2RlKGRldmljZV90IGRldiwgaW50IAogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0 bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGdwYXJlbnQpOwogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAq Y2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgIHN0cnVj dCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0gICAgaW50IGRl dm5vID0gKGNoLT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOworICAgIGludCBk ZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKICAgICB1X2ludDMyX3QgcmVn NDAgPSBwY2lfcmVhZF9jb25maWcoZ3BhcmVudCwgMHg0MCwgNCk7CiAgICAgdV9pbnQ4X3QgcmVn NDQgPSBwY2lfcmVhZF9jb25maWcoZ3BhcmVudCwgMHg0NCwgMSk7CiAgICAgdV9pbnQ4X3QgcmVn NDggPSBwY2lfcmVhZF9jb25maWcoZ3BhcmVudCwgMHg0OCwgMSk7CkBAIC0xOTg4LDUyICsyMzUx LDU0IEBAIGF0YV9pbnRlbF9uZXdfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCAKIAlkZXZpY2Vf cHJpbnRmKGRldiwgIiVzc2V0dGluZyAlcyBvbiAlcyBjaGlwXG4iLAogCQkgICAgICAoZXJyb3Ip ID8gIkZBSUxVUkUgIiA6ICIiLAogCQkgICAgICBhdGFfbW9kZTJzdHIobW9kZSksIGN0bHItPmNo aXAtPnRleHQpOwotICAgIGlmIChlcnJvcikKLQlyZXR1cm47CisgICAgaWYgKCFlcnJvcikgewor CWlmIChtb2RlID49IEFUQV9VRE1BMCkgeworCSAgICB1X2ludDhfdCB1dGltaW5nc1tdID0geyAw eDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwIH07CiAKLSAgICBpZiAobW9k ZSA+PSBBVEFfVURNQTApIHsKLQlwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NDgsIHJlZzQ4 IHwgKDB4MDAwMSA8PCBkZXZubyksIDIpOwotCXBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0 YSwKLQkJCSAocmVnNGEgJiB+KDB4MyA8PCAoZGV2bm8gPDwgMikpKSB8Ci0JCQkgKCgweDAxICsg IShtb2RlICYgMHgwMSkpIDw8IChkZXZubyA8PCAyKSksIDIpOwotICAgIH0KLSAgICBlbHNlIHsK LQlwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NDgsIHJlZzQ4ICYgfigweDAwMDEgPDwgZGV2 bm8pLCAyKTsKLQlwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NGEsIChyZWc0YSAmIH4oMHgz IDw8IChkZXZubyA8PCAyKSkpLCAyKTsKLSAgICB9Ci0gICAgcmVnNTQgfD0gMHgwNDAwOwotICAg IGlmIChtb2RlID49IEFUQV9VRE1BMikKLQlwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NTQs IHJlZzU0IHwgKDB4MSA8PCBkZXZubyksIDIpOwotICAgIGVsc2UKLQlwY2lfd3JpdGVfY29uZmln KGdwYXJlbnQsIDB4NTQsIHJlZzU0ICYgfigweDEgPDwgZGV2bm8pLCAyKTsKKwkgICAgcGNpX3dy aXRlX2NvbmZpZyhncGFyZW50LCAweDQ4LCByZWc0OCB8ICgweDAwMDEgPDwgZGV2bm8pLCAyKTsK KwkgICAgcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCAweDRhLAorCQkJICAgICAocmVnNGEgJiB+ KDB4MyA8PCAoZGV2bm8gPDwgMikpKSB8CisJCQkgICAgICh1dGltaW5nc1ttb2RlICYgQVRBX01P REVfTUFTS10gPDwgKGRldm5vPDwyKSksIDIpOworCX0KKwllbHNlIHsKKwkgICAgcGNpX3dyaXRl X2NvbmZpZyhncGFyZW50LCAweDQ4LCByZWc0OCAmIH4oMHgwMDAxIDw8IGRldm5vKSwgMik7CisJ ICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0YSwgKHJlZzRhICYgfigweDMgPDwgKGRl dm5vIDw8IDIpKSksMik7CisJfQorCXJlZzU0IHw9IDB4MDQwMDsKKwlpZiAobW9kZSA+PSBBVEFf VURNQTIpCisJICAgIHJlZzU0IHw9ICgweDEgPDwgZGV2bm8pOworCWVsc2UKKwkgICAgcmVnNTQg Jj0gfigweDEgPDwgZGV2bm8pOworCWlmIChtb2RlID49IEFUQV9VRE1BNSkKKwkgICAgcmVnNTQg fD0gKDB4MTAwMCA8PCBkZXZubyk7CisJZWxzZSAKKwkgICAgcmVnNTQgJj0gfigweDEwMDAgPDwg ZGV2bm8pOwogCi0gICAgaWYgKG1vZGUgPj0gQVRBX1VETUE1KQotCXBjaV93cml0ZV9jb25maWco Z3BhcmVudCwgMHg1NCwgcmVnNTQgfCAoMHgxMDAwIDw8IGRldm5vKSwgMik7Ci0gICAgZWxzZSAK LQlwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NTQsIHJlZzU0ICYgfigweDEwMDAgPDwgZGV2 bm8pLCAyKTsKKwlwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NTQsIHJlZzU0LCAyKTsKIAot ICAgIHJlZzQwICY9IH4weDAwZmYwMGZmOwotICAgIHJlZzQwIHw9IDB4NDA3NzQwNzc7CisJcmVn NDAgJj0gfjB4MDBmZjAwZmY7CisJcmVnNDAgfD0gMHg0MDc3NDA3NzsKIAotICAgIGlmIChhdGFk ZXYtPnVuaXQgPT0gQVRBX01BU1RFUikgewotCW1hc2s0MCA9IDB4MzMwMDsKLQluZXc0MCA9IHRp bWluZ3NbYXRhX21vZGUyaWR4KG1vZGUpXSA8PCA4OwotICAgIH0KLSAgICBlbHNlIHsKLQltYXNr NDQgPSAweDBmOwotCW5ldzQ0ID0gKCh0aW1pbmdzW2F0YV9tb2RlMmlkeChtb2RlKV0gJiAweDMw KSA+PiAyKSB8Ci0JCSh0aW1pbmdzW2F0YV9tb2RlMmlkeChtb2RlKV0gJiAweDAzKTsKLSAgICB9 Ci0gICAgaWYgKGNoLT51bml0KSB7Ci0JbWFzazQwIDw8PSAxNjsKLQluZXc0MCA8PD0gMTY7Ci0J bWFzazQ0IDw8PSA0OwotCW5ldzQ0IDw8PSA0OwotICAgIH0KLSAgICBwY2lfd3JpdGVfY29uZmln KGdwYXJlbnQsIDB4NDAsIChyZWc0MCAmIH5tYXNrNDApIHwgbmV3NDAsIDQpOwotICAgIHBjaV93 cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0NCwgKHJlZzQ0ICYgfm1hc2s0NCkgfCBuZXc0NCwgMSk7 CisJaWYgKGF0YWRldi0+dW5pdCA9PSBBVEFfTUFTVEVSKSB7CisJICAgIG1hc2s0MCA9IDB4MzMw MDsKKwkgICAgbmV3NDAgPSB0aW1pbmdzW2F0YV9tb2RlMmlkeChtb2RlKV0gPDwgODsKKwl9CisJ ZWxzZSB7CisJICAgIG1hc2s0NCA9IDB4MGY7CisJICAgIG5ldzQ0ID0gKCh0aW1pbmdzW2F0YV9t b2RlMmlkeChtb2RlKV0gJiAweDMwKSA+PiAyKSB8CisJCSAgICAodGltaW5nc1thdGFfbW9kZTJp ZHgobW9kZSldICYgMHgwMyk7CisJfQorCWlmIChjaC0+dW5pdCkgeworCSAgICBtYXNrNDAgPDw9 IDE2OworCSAgICBuZXc0MCA8PD0gMTY7CisJICAgIG1hc2s0NCA8PD0gNDsKKwkgICAgbmV3NDQg PDw9IDQ7CisJfQorCXBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0MCwgKHJlZzQwICYgfm1h c2s0MCkgfCBuZXc0MCwgNCk7CisJcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCAweDQ0LCAocmVn NDQgJiB+bWFzazQ0KSB8IG5ldzQ0LCAxKTsKIAotICAgIGF0YWRldi0+bW9kZSA9IG1vZGU7CisJ YXRhZGV2LT5tb2RlID0gbW9kZTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yMDQ1LDcg KzI0MTAsNyBAQCBhdGFfaW50ZWxfc2F0YV9zZXRtb2RlKGRldmljZV90IGRldiwgaW50CiAJYXRh ZGV2LT5wYXJhbS5zYXRhY2FwYWJpbGl0aWVzICE9IDB4ZmZmZikgewogCiAJc3RydWN0IGF0YV9j aGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7Ci0J aW50IGRldm5vID0gKGNoLT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOworCWlu dCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKIAogCS8qIG9uIHNvbWUg ZHJpdmVzIHdlIG5lZWQgdG8gc2V0IHRoZSB0cmFuc2ZlciBtb2RlICovCiAJYXRhX2NvbnRyb2xj bWQoZGV2LCBBVEFfU0VURkVBVFVSRVMsIEFUQV9TRl9TRVRYRkVSLCAwLApAQCAtMjE0MSw3ICsy NTA2LDcgQEAgYXRhX2ludGVsXzMxMjQ0X3RmX3dyaXRlKHN0cnVjdCBhdGFfcmVxdQogCQkJCSAg ICAgICAoKHJlcXVlc3QtPnUuYXRhLmxiYSA+PiA4KSAmIDB4MDBmZikpOwogCUFUQV9JRFhfT1VU VyhjaCwgQVRBX0NZTF9NU0IsICgocmVxdWVzdC0+dS5hdGEubGJhID4+IDMyKSAmIDB4ZmYwMCkg fCAKIAkJCQkgICAgICAgKChyZXF1ZXN0LT51LmF0YS5sYmEgPj4gMTYpICYgMHgwMGZmKSk7Ci0J QVRBX0lEWF9PVVRXKGNoLCBBVEFfRFJJVkUsIEFUQV9EX0xCQSB8IGF0YWRldi0+dW5pdCk7CisJ QVRBX0lEWF9PVVRXKGNoLCBBVEFfRFJJVkUsIEFUQV9EX0xCQSB8IEFUQV9ERVYoYXRhZGV2LT51 bml0KSk7CiAgICAgfQogICAgIGVsc2UgewogCUFUQV9JRFhfT1VUQihjaCwgQVRBX0ZFQVRVUkUs IHJlcXVlc3QtPnUuYXRhLmZlYXR1cmUpOwpAQCAtMjE2Miw3ICsyNTI3LDcgQEAgYXRhX2ludGVs XzMxMjQ0X3RmX3dyaXRlKHN0cnVjdCBhdGFfcmVxdQogCQkJIChyZXF1ZXN0LT51LmF0YS5sYmEg LyAoc2VjdG9ycyAqIGhlYWRzKSkpOwogCSAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9DWUxfTVNC LAogCQkJIChyZXF1ZXN0LT51LmF0YS5sYmEgLyAoc2VjdG9ycyAqIGhlYWRzKSkgPj4gOCk7Ci0J ICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZFLCBBVEFfRF9JQk0gfCBhdGFkZXYtPnVuaXQg fCAKKwkgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfRFJJVkUsIEFUQV9EX0lCTSB8IEFUQV9ERVYo YXRhZGV2LT51bml0KSB8IAogCQkJICgoKHJlcXVlc3QtPnUuYXRhLmxiYSUgKHNlY3RvcnMgKiBo ZWFkcykpIC8KIAkJCSAgIHNlY3RvcnMpICYgMHhmKSk7CiAJfQpAQCAtMjE3MSw3ICsyNTM2LDcg QEAgYXRhX2ludGVsXzMxMjQ0X3RmX3dyaXRlKHN0cnVjdCBhdGFfcmVxdQogCSAgICBBVEFfSURY X09VVEIoY2gsIEFUQV9DWUxfTFNCLCByZXF1ZXN0LT51LmF0YS5sYmEgPj4gOCk7CiAJICAgIEFU QV9JRFhfT1VUQihjaCwgQVRBX0NZTF9NU0IsIHJlcXVlc3QtPnUuYXRhLmxiYSA+PiAxNik7CiAJ ICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZFLAotCQkJIEFUQV9EX0lCTSB8IEFUQV9EX0xC QSB8IGF0YWRldi0+dW5pdCB8CisJCQkgQVRBX0RfSUJNIHwgQVRBX0RfTEJBIHwgQVRBX0RFVihh dGFkZXYtPnVuaXQpIHwKIAkJCSAoKHJlcXVlc3QtPnUuYXRhLmxiYSA+PiAyNCkgJiAweDBmKSk7 CiAJfQogICAgIH0KQEAgLTIxOTMsNyArMjU1OCw4IEBAIGF0YV9pdGVfaWRlbnQoZGV2aWNlX3Qg ZGV2KQogewogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0 X3NvZnRjKGRldik7CiAgICAgc3RhdGljIHN0cnVjdCBhdGFfY2hpcF9pZCBpZHNbXSA9Ci0gICAg e3sgQVRBX0lUODIxMkYsIDB4MDAsIDB4MDAsIDB4MDAsIEFUQV9VRE1BNiwgIklUODIxMkYiIH0s CisgICAge3sgQVRBX0lUODIxM0YsIDB4MDAsIDB4MDAsIDB4MDAsIEFUQV9VRE1BNiwgIklUODIx M0YiIH0sCisgICAgIHsgQVRBX0lUODIxMkYsIDB4MDAsIDB4MDAsIDB4MDAsIEFUQV9VRE1BNiwg IklUODIxMkYiIH0sCiAgICAgIHsgQVRBX0lUODIxMUYsIDB4MDAsIDB4MDAsIDB4MDAsIEFUQV9V RE1BNiwgIklUODIxMUYiIH0sCiAgICAgIHsgMCwgMCwgMCwgMCwgMCwgMH19OwogCkBAIC0yMjEz LDI0ICsyNTc5LDMzIEBAIGF0YV9pdGVfY2hpcGluaXQoZGV2aWNlX3QgZGV2KQogICAgIGlmIChh dGFfc2V0dXBfaW50ZXJydXB0KGRldikpCiAJcmV0dXJuIEVOWElPOwogCi0gICAgY3Rsci0+c2V0 bW9kZSA9IGF0YV9pdGVfc2V0bW9kZTsKKyAgICBpZiAoY3Rsci0+Y2hpcC0+Y2hpcGlkID09IEFU QV9JVDgyMTNGKSB7CisJLyogdGhlIElURSA4MjEzRiBvbmx5IGhhcyBvbmUgY2hhbm5lbCAqLwor CWN0bHItPmNoYW5uZWxzID0gMTsKKworCWN0bHItPnNldG1vZGUgPSBhdGFfaXRlXzgyMTNfc2V0 bW9kZTsKKyAgICB9CisgICAgZWxzZSB7CisJLyogc2V0IFBDSSBtb2RlIGFuZCA2Nk1oeiByZWZl cmVuY2UgY2xvY2sgKi8KKwlwY2lfd3JpdGVfY29uZmlnKGRldiwgMHg1MCwgcGNpX3JlYWRfY29u ZmlnKGRldiwgMHg1MCwgMSkgJiB+MHg4MywgMSk7CiAKLSAgICAvKiBzZXQgUENJIG1vZGUgYW5k IDY2TWh6IHJlZmVyZW5jZSBjbG9jayAqLwotICAgIHBjaV93cml0ZV9jb25maWcoZGV2LCAweDUw LCBwY2lfcmVhZF9jb25maWcoZGV2LCAweDUwLCAxKSAmIH4weDgzLCAxKTsKKwkvKiBzZXQgZGVm YXVsdCBhY3RpdmUgJiByZWNvdmVyIHRpbWluZ3MgKi8KKwlwY2lfd3JpdGVfY29uZmlnKGRldiwg MHg1NCwgMHgzMSwgMSk7CisJcGNpX3dyaXRlX2NvbmZpZyhkZXYsIDB4NTYsIDB4MzEsIDEpOwor CisJY3Rsci0+c2V0bW9kZSA9IGF0YV9pdGVfODIxeF9zZXRtb2RlOworICAgIH0KIAotICAgIC8q IHNldCBkZWZhdWx0IGFjdGl2ZSAmIHJlY292ZXIgdGltaW5ncyAqLwotICAgIHBjaV93cml0ZV9j b25maWcoZGV2LCAweDU0LCAweDMxLCAxKTsKLSAgICBwY2lfd3JpdGVfY29uZmlnKGRldiwgMHg1 NiwgMHgzMSwgMSk7CiAgICAgcmV0dXJuIDA7CiB9CiAgCiBzdGF0aWMgdm9pZAotYXRhX2l0ZV9z ZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUpCithdGFfaXRlXzgyMXhfc2V0bW9kZShkZXZp Y2VfdCBkZXYsIGludCBtb2RlKQogewogICAgIGRldmljZV90IGdwYXJlbnQgPSBHUkFORFBBUkVO VChkZXYpOwogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRl dmljZV9nZXRfcGFyZW50KGRldikpOwogICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBk ZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0gICAgaW50IGRldm5vID0gKGNoLT51bml0IDw8IDEpICsg QVRBX0RFVihhdGFkZXYtPnVuaXQpOworICAgIGludCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSAr IGF0YWRldi0+dW5pdDsKICAgICBpbnQgZXJyb3I7CiAKICAgICAvKiBjb3JyZWN0IHRoZSBtb2Rl IGZvciB3aGF0IHRoZSBIVyBzdXBwb3J0cyAqLwpAQCAtMjI2Myw3ICsyNjM4LDcgQEAgYXRhX2l0 ZV9zZXRtb2RlKGRldmljZV90IGRldiwgaW50IG1vZGUpCiAKIAkgICAgLyogc2V0IFVETUEgdGlt aW5nICovCiAJICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwKLQkJCSAgICAgMHg1NiArIChj aC0+dW5pdCA8PCAyKSArIEFUQV9ERVYoYXRhZGV2LT51bml0KSwKKwkJCSAgICAgMHg1NiArIChj aC0+dW5pdCA8PCAyKSArIGF0YWRldi0+dW5pdCwKIAkJCSAgICAgdWRtYXRpbWluZ1ttb2RlICYg QVRBX01PREVfTUFTS10sIDEpOwogCX0KIAllbHNlIHsKQEAgLTIyODUsNiArMjY2MCw4MCBAQCBh dGFfaXRlX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSkKICAgICB9CiB9CiAKK3N0YXRp YyB2b2lkCithdGFfaXRlXzgyMTNfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQorewor ICAgIGRldmljZV90IGdwYXJlbnQgPSBHUkFORFBBUkVOVChkZXYpOworICAgIHN0cnVjdCBhdGFf cGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGdwYXJlbnQpOworICAgIHN0 cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisgICAgdV9p bnQxNl90IHJlZzQwID0gcGNpX3JlYWRfY29uZmlnKGdwYXJlbnQsIDB4NDAsIDIpOworICAgIHVf aW50OF90IHJlZzQ0ID0gcGNpX3JlYWRfY29uZmlnKGdwYXJlbnQsIDB4NDQsIDEpOworICAgIHVf aW50OF90IHJlZzQ4ID0gcGNpX3JlYWRfY29uZmlnKGdwYXJlbnQsIDB4NDgsIDEpOworICAgIHVf aW50MTZfdCByZWc0YSA9IHBjaV9yZWFkX2NvbmZpZyhncGFyZW50LCAweDRhLCAyKTsKKyAgICB1 X2ludDE2X3QgcmVnNTQgPSBwY2lfcmVhZF9jb25maWcoZ3BhcmVudCwgMHg1NCwgMik7CisgICAg dV9pbnQxNl90IG1hc2s0MCA9IDAsIG5ldzQwID0gMDsKKyAgICB1X2ludDhfdCBtYXNrNDQgPSAw LCBuZXc0NCA9IDA7CisgICAgaW50IGRldm5vID0gYXRhZGV2LT51bml0OworICAgIGludCBlcnJv cjsKKyAgICB1X2ludDhfdCB0aW1pbmdzW10gPSB7IDB4MDAsIDB4MDAsIDB4MTAsIDB4MjEsIDB4 MjMsIDB4MTAsIDB4MjEsIDB4MjMsCisJCQkgICAweDIzLCAweDIzLCAweDIzLCAweDIzLCAweDIz LCAweDIzIH07CisKKyAgICBtb2RlID0gYXRhX2xpbWl0X21vZGUoZGV2LCBtb2RlLCBjdGxyLT5j aGlwLT5tYXhfZG1hKTsKKworICAgIGlmIChtb2RlID4gQVRBX1VETUEyICYmICEocmVnNTQgJiAo MHgxMCA8PCBkZXZubykpKSB7CisJYXRhX3ByaW50X2NhYmxlKGRldiwgImNvbnRyb2xsZXIiKTsK Kwltb2RlID0gQVRBX1VETUEyOworICAgIH0KKworICAgIGVycm9yID0gYXRhX2NvbnRyb2xjbWQo ZGV2LCBBVEFfU0VURkVBVFVSRVMsIEFUQV9TRl9TRVRYRkVSLCAwLCBtb2RlKTsKKworICAgIGlm IChib290dmVyYm9zZSkKKwlkZXZpY2VfcHJpbnRmKGRldiwgIiVzc2V0dGluZyAlcyBvbiAlcyBj aGlwXG4iLAorCQkgICAgICAoZXJyb3IpID8gIkZBSUxVUkUgIiA6ICIiLAorCQkgICAgICBhdGFf bW9kZTJzdHIobW9kZSksIGN0bHItPmNoaXAtPnRleHQpOworICAgIGlmICghZXJyb3IpIHsKKwlp ZiAobW9kZSA+PSBBVEFfVURNQTApIHsKKwkgICAgdV9pbnQ4X3QgdXRpbWluZ3NbXSA9IHsgMHgw MCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCB9OworCisJICAgIHBjaV93cml0 ZV9jb25maWcoZ3BhcmVudCwgMHg0OCwgcmVnNDggfCAoMHgwMDAxIDw8IGRldm5vKSwgMik7CisJ ICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0YSwKKwkJCSAgICAgKHJlZzRhICYgfigw eDMgPDwgKGRldm5vIDw8IDIpKSkgfAorCQkJICAgICAodXRpbWluZ3NbbW9kZSAmIEFUQV9NT0RF X01BU0tdIDw8IChkZXZubzw8MikpLCAyKTsKKwl9CisJZWxzZSB7CisJICAgIHBjaV93cml0ZV9j b25maWcoZ3BhcmVudCwgMHg0OCwgcmVnNDggJiB+KDB4MDAwMSA8PCBkZXZubyksIDIpOworCSAg ICBwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQsIDB4NGEsIChyZWc0YSAmIH4oMHgzIDw8IChkZXZu byA8PCAyKSkpLDIpOworCX0KKwlpZiAobW9kZSA+PSBBVEFfVURNQTIpCisJICAgIHJlZzU0IHw9 ICgweDEgPDwgZGV2bm8pOworCWVsc2UKKwkgICAgcmVnNTQgJj0gfigweDEgPDwgZGV2bm8pOwor CWlmIChtb2RlID49IEFUQV9VRE1BNSkKKwkgICAgcmVnNTQgfD0gKDB4MTAwMCA8PCBkZXZubyk7 CisJZWxzZSAKKwkgICAgcmVnNTQgJj0gfigweDEwMDAgPDwgZGV2bm8pOworCXBjaV93cml0ZV9j b25maWcoZ3BhcmVudCwgMHg1NCwgcmVnNTQsIDIpOworCisJcmVnNDAgJj0gMHhmZjAwOworCXJl ZzQwIHw9IDB4NDAzMzsKKwlpZiAoYXRhZGV2LT51bml0ID09IEFUQV9NQVNURVIpIHsKKwkgICAg cmVnNDAgfD0gKGF0YV9hdGFwaShkZXYpID8gMHgwNCA6IDB4MDApOworCSAgICBtYXNrNDAgPSAw eDMzMDA7CisJICAgIG5ldzQwID0gdGltaW5nc1thdGFfbW9kZTJpZHgobW9kZSldIDw8IDg7CisJ fQorCWVsc2UgeworCSAgICByZWc0MCB8PSAoYXRhX2F0YXBpKGRldikgPyAweDQwIDogMHgwMCk7 CisJICAgIG1hc2s0NCA9IDB4MGY7CisJICAgIG5ldzQ0ID0gKCh0aW1pbmdzW2F0YV9tb2RlMmlk eChtb2RlKV0gJiAweDMwKSA+PiAyKSB8CisJCSAgICAodGltaW5nc1thdGFfbW9kZTJpZHgobW9k ZSldICYgMHgwMyk7CisJfQorCXBjaV93cml0ZV9jb25maWcoZ3BhcmVudCwgMHg0MCwgKHJlZzQw ICYgfm1hc2s0MCkgfCBuZXc0MCwgNCk7CisJcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCAweDQ0 LCAocmVnNDQgJiB+bWFzazQ0KSB8IG5ldzQ0LCAxKTsKKworCWF0YWRldi0+bW9kZSA9IG1vZGU7 CisgICAgfQorfQorCiAKIC8qCiAgKiBKTWljcm9uIGNoaXBzZXQgc3VwcG9ydCBmdW5jdGlvbnMK QEAgLTI1NzMsMTEgKzMwMjIsMTEgQEAgYXRhX21hcnZlbGxfZWRtYV9hbGxvY2F0ZShkZXZpY2Vf dCBkZXYpCiB7CiAgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9n ZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICAgc3RydWN0IGF0YV9jaGFubmVs ICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKLSAgICB1X2ludDY0X3Qgd29yayA9IGNoLT5k bWEtPndvcmtfYnVzOworICAgIHVfaW50NjRfdCB3b3JrID0gY2gtPmRtYS53b3JrX2J1czsKICAg ICBpbnQgaTsKIAogICAgIC8qIGNsZWFyIHdvcmsgYXJlYSAqLwotICAgIGJ6ZXJvKGNoLT5kbWEt PndvcmssIDEwMjQrMjU2KTsKKyAgICBiemVybyhjaC0+ZG1hLndvcmssIDEwMjQrMjU2KTsKIAog ICAgIC8qIHNldCBsZWdhY3kgQVRBIHJlc291cmNlcyAqLwogICAgIGZvciAoaSA9IEFUQV9EQVRB OyBpIDw9IEFUQV9DT01NQU5EOyBpKyspIHsKQEAgLTI2ODQsMTMgKzMxMzMsMTMgQEAgc3RhdGlj IGludAogYXRhX21hcnZlbGxfZWRtYV9iZWdpbl90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVl c3QgKnJlcXVlc3QpCiB7CiAgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3Rscj1kZXZp Y2VfZ2V0X3NvZnRjKEdSQU5EUEFSRU5UKHJlcXVlc3QtPmRldikpOwotICAgIHN0cnVjdCBhdGFf Y2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KHJlcXVlc3Qt PmRldikpOworICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKHJl cXVlc3QtPnBhcmVudCk7CiAgICAgdV9pbnQzMl90IHJlcV9pbjsKICAgICB1X2ludDhfdCAqYnl0 ZXA7CiAgICAgdV9pbnQxNl90ICp3b3JkcDsKICAgICB1X2ludDMyX3QgKnF1YWRwOwotICAgIGlu dCBpLCB0YWcgPSAweDA3OwotICAgIGludCBkdW1teSwgZXJyb3IsIHNsb3Q7CisgICAgaW50IGk7 CisgICAgaW50IGVycm9yLCBzbG90OwogCiAgICAgLyogb25seSBETUEgUi9XIGdvZXMgdGhyb3Vn aCB0aGUgRU1EQSBtYWNoaW5lICovCiAgICAgaWYgKHJlcXVlc3QtPnUuYXRhLmNvbW1hbmQgIT0g QVRBX1JFQURfRE1BICYmCkBAIC0yNzA2LDkgKzMxNTUsNyBAQCBhdGFfbWFydmVsbF9lZG1hX2Jl Z2luX3RyYW5zYWN0aW9uKHN0cnVjCiAgICAgYXRhX21vZGlmeV9pZl80OGJpdChyZXF1ZXN0KTsK IAogICAgIC8qIGNoZWNrIHNhbml0eSwgc2V0dXAgU0cgbGlzdCBhbmQgRE1BIGVuZ2luZSAqLwot ICAgIGlmICgoZXJyb3IgPSBjaC0+ZG1hLT5sb2FkKGNoLT5kZXYsIHJlcXVlc3QtPmRhdGEsIHJl cXVlc3QtPmJ5dGVjb3VudCwKLQkJCSAgICAgICByZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1JFQUQs IGNoLT5kbWEtPnNnLAotCQkJICAgICAgICZkdW1teSkpKSB7CisgICAgaWYgKChlcnJvciA9IGNo LT5kbWEubG9hZChyZXF1ZXN0LCBOVUxMLCBOVUxMKSkpIHsKIAlkZXZpY2VfcHJpbnRmKHJlcXVl c3QtPmRldiwgInNldHRpbmcgdXAgRE1BIGZhaWxlZFxuIik7CiAJcmVxdWVzdC0+cmVzdWx0ID0g ZXJyb3I7CiAJcmV0dXJuIEFUQV9PUF9GSU5JU0hFRDsKQEAgLTI3MTcsMTUgKzMxNjQsMTUgQEAg YXRhX21hcnZlbGxfZWRtYV9iZWdpbl90cmFuc2FjdGlvbihzdHJ1YwogICAgIC8qIGdldCBuZXh0 IGZyZWUgcmVxdWVzdCBxdWV1ZSBzbG90ICovCiAgICAgcmVxX2luID0gQVRBX0lOTChjdGxyLT5y X3JlczEsIDB4MDIwMTQgKyBBVEFfTVZfRURNQV9CQVNFKGNoKSk7CiAgICAgc2xvdCA9ICgoKHJl cV9pbiAmIH4weGZmZmZmYzAwKSA+PiA1KSArIDApICYgMHgxZjsKLSAgICBieXRlcCA9ICh1X2lu dDhfdCAqKShjaC0+ZG1hLT53b3JrKTsKKyAgICBieXRlcCA9ICh1X2ludDhfdCAqKShjaC0+ZG1h LndvcmspOwogICAgIGJ5dGVwICs9IChzbG90IDw8IDUpOwogICAgIHdvcmRwID0gKHVfaW50MTZf dCAqKWJ5dGVwOwogICAgIHF1YWRwID0gKHVfaW50MzJfdCAqKWJ5dGVwOwogCiAgICAgLyogZmls bCBpbiB0aGlzIHJlcXVlc3QgKi8KLSAgICBxdWFkcFswXSA9IChsb25nKWNoLT5kbWEtPnNnX2J1 cyAmIDB4ZmZmZmZmZmY7Ci0gICAgcXVhZHBbMV0gPSAodV9pbnQ2NF90KWNoLT5kbWEtPnNnX2J1 cyA+PiAzMjsKLSAgICB3b3JkcFs0XSA9IChyZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1JFQUQgPyAw eDAxIDogMHgwMCkgfCAodGFnPDwxKTsKKyAgICBxdWFkcFswXSA9IChsb25nKXJlcXVlc3QtPmRt YS0+c2dfYnVzICYgMHhmZmZmZmZmZjsKKyAgICBxdWFkcFsxXSA9ICh1X2ludDY0X3QpcmVxdWVz dC0+ZG1hLT5zZ19idXMgPj4gMzI7CisgICAgd29yZHBbNF0gPSAocmVxdWVzdC0+ZmxhZ3MgJiBB VEFfUl9SRUFEID8gMHgwMSA6IDB4MDApIHwgKHJlcXVlc3QtPnRhZzw8MSk7CiAKICAgICBpID0g MTA7CiAgICAgYnl0ZXBbaSsrXSA9IChyZXF1ZXN0LT51LmF0YS5jb3VudCA+PiA4KSAmIDB4ZmY7 CkBAIC0yNzc2LDcgKzMyMjMsNyBAQCBzdGF0aWMgaW50CiBhdGFfbWFydmVsbF9lZG1hX2VuZF90 cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpCiB7CiAgICAgc3RydWN0IGF0 YV9wY2lfY29udHJvbGxlciAqY3Rscj1kZXZpY2VfZ2V0X3NvZnRjKEdSQU5EUEFSRU5UKHJlcXVl c3QtPmRldikpOwotICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRj KGRldmljZV9nZXRfcGFyZW50KHJlcXVlc3QtPmRldikpOworICAgIHN0cnVjdCBhdGFfY2hhbm5l bCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKHJlcXVlc3QtPnBhcmVudCk7CiAgICAgaW50IG9mZnNl dCA9IChjaC0+dW5pdCA+IDMgPyAweDMwMDE0IDogMHgyMDAxNCk7CiAgICAgdV9pbnQzMl90IGlj ciA9IEFUQV9JTkwoY3Rsci0+cl9yZXMxLCBvZmZzZXQpOwogICAgIGludCByZXM7CkBAIC0yNzk3 LDcgKzMyNDQsNyBAQCBhdGFfbWFydmVsbF9lZG1hX2VuZF90cmFuc2FjdGlvbihzdHJ1Y3QgCiAJ cnNwX291dCAmPSAweGZmZmZmZjAwOwogCXJzcF9vdXQgKz0gKHNsb3QgPDwgMyk7CiAJcmVzcG9u c2UgPSAoc3RydWN0IGF0YV9tYXJ2ZWxsX3Jlc3BvbnNlICopCi0JCSAgIChjaC0+ZG1hLT53b3Jr ICsgMTAyNCArIChzbG90IDw8IDMpKTsKKwkJICAgKGNoLT5kbWEud29yayArIDEwMjQgKyAoc2xv dCA8PCAzKSk7CiAKIAkvKiByZWNvcmQgc3RhdHVzIGZvciB0aGlzIHJlcXVlc3QgKi8KIAlyZXF1 ZXN0LT5zdGF0dXMgPSByZXNwb25zZS0+ZGV2X3N0YXR1czsKQEAgLTI4MTIsNyArMzI1OSw3IEBA IGF0YV9tYXJ2ZWxsX2VkbWFfZW5kX3RyYW5zYWN0aW9uKHN0cnVjdCAKIAkgICAgcmVxdWVzdC0+ ZG9uZWNvdW50ID0gcmVxdWVzdC0+Ynl0ZWNvdW50OwogCiAJLyogdW5sb2FkIFNHIGxpc3QgKi8K LQljaC0+ZG1hLT51bmxvYWQoY2gtPmRldik7CisJY2gtPmRtYS51bmxvYWQocmVxdWVzdCk7CiAK IAlyZXMgPSBBVEFfT1BfRklOSVNIRUQ7CiAgICAgfQpAQCAtMjg4MywxNyArMzMzMCwxNSBAQCBh dGFfbWFydmVsbF9lZG1hX2RtYWluaXQoZGV2aWNlX3QgZGV2KQogICAgIHN0cnVjdCBhdGFfY2hh bm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAKICAgICBhdGFfZG1haW5pdChkZXYp OwotICAgIGlmIChjaC0+ZG1hKSB7Ci0JLyogbm90ZSBzdGFydCBhbmQgc3RvcCBhcmUgbm90IHVz ZWQgaGVyZSAqLwotCWNoLT5kbWEtPnNldHByZCA9IGF0YV9tYXJ2ZWxsX2VkbWFfZG1hc2V0cHJk OworICAgIC8qIG5vdGUgc3RhcnQgYW5kIHN0b3AgYXJlIG5vdCB1c2VkIGhlcmUgKi8KKyAgICBj aC0+ZG1hLnNldHByZCA9IGF0YV9tYXJ2ZWxsX2VkbWFfZG1hc2V0cHJkOwogCQotCS8qIGlmIDY0 Yml0IHN1cHBvcnQgcHJlc2VudCBhZGp1c3QgbWF4IGFkZHJlc3MgdXNlZCAqLwotCWlmIChBVEFf SU5MKGN0bHItPnJfcmVzMSwgMHgwMGQwMCkgJiAweDAwMDAwMDA0KQotCSAgICBjaC0+ZG1hLT5t YXhfYWRkcmVzcyA9IEJVU19TUEFDRV9NQVhBRERSOworICAgIC8qIGlmIDY0Yml0IHN1cHBvcnQg cHJlc2VudCBhZGp1c3QgbWF4IGFkZHJlc3MgdXNlZCAqLworICAgIGlmIChBVEFfSU5MKGN0bHIt PnJfcmVzMSwgMHgwMGQwMCkgJiAweDAwMDAwMDA0KQorCWNoLT5kbWEubWF4X2FkZHJlc3MgPSBC VVNfU1BBQ0VfTUFYQUREUjsKIAotCS8qIGNoaXAgZG9lcyBub3QgcmVsaWFibHkgZG8gNjRLIERN QSB0cmFuc2ZlcnMgKi8KLQljaC0+ZG1hLT5tYXhfaW9zaXplID0gMTI2ICogREVWX0JTSVpFOyAK LSAgICB9CisgICAgLyogY2hpcCBkb2VzIG5vdCByZWxpYWJseSBkbyA2NEsgRE1BIHRyYW5zZmVy cyAqLworICAgIGNoLT5kbWEubWF4X2lvc2l6ZSA9IDEyNiAqIERFVl9CU0laRTsgCiB9CiAKIApA QCAtMjkzMiw3ICszMzc3LDcgQEAgYXRhX25hdGlvbmFsX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBp bnQgbQogICAgIGRldmljZV90IGdwYXJlbnQgPSBHUkFORFBBUkVOVChkZXYpOwogICAgIHN0cnVj dCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRl dikpOwogICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl dik7Ci0gICAgaW50IGRldm5vID0gKGNoLT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVu aXQpOworICAgIGludCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKICAg ICB1X2ludDMyX3QgcGlvdGltaW5nW10gPQogCXsgMHg5MTcyZDEzMiwgMHgyMTcxNzEyMSwgMHgw MDgwMzAyMCwgMHgyMDEwMjAxMCwgMHgwMDEwMDAxMCwKIAkgIDB4MDA4MDMwMjAsIDB4MjAxMDIw MTAsIDB4MDAxMDAwMTAsCkBAIC0yOTQxLDggKzMzODYsOCBAQCBhdGFfbmF0aW9uYWxfc2V0bW9k ZShkZXZpY2VfdCBkZXYsIGludCBtCiAgICAgdV9pbnQzMl90IHVkbWF0aW1pbmdbXSA9IHsgMHg4 MDkyMTI1MCwgMHg4MDkxMTE0MCwgMHg4MDkxMTAzMCB9OwogICAgIGludCBlcnJvcjsKIAotICAg IGNoLT5kbWEtPmFsaWdubWVudCA9IDE2OwotICAgIGNoLT5kbWEtPm1heF9pb3NpemUgPSAxMjYg KiBERVZfQlNJWkU7CisgICAgY2gtPmRtYS5hbGlnbm1lbnQgPSAxNjsKKyAgICBjaC0+ZG1hLm1h eF9pb3NpemUgPSAxMjYgKiBERVZfQlNJWkU7CiAKICAgICBtb2RlID0gYXRhX2xpbWl0X21vZGUo ZGV2LCBtb2RlLCBBVEFfVURNQTIpOwogCkBAIC0zMTUwLDE1ICszNTk1LDIzIEBAIGF0YV9udmlk aWFfc3RhdHVzKGRldmljZV90IGRldikKICAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2 aWNlX2dldF9zb2Z0YyhkZXYpOwogICAgIGludCBvZmZzZXQgPSBjdGxyLT5jaGlwLT5jZmcyICYg TlY0ID8gMHgwNDQwIDogMHgwMDEwOwogICAgIGludCBzaGlmdCA9IGNoLT51bml0IDw8IChjdGxy LT5jaGlwLT5jZmcyICYgTlZRID8gNCA6IDIpOwotICAgIHVfaW50MzJfdCBpc3RhdHVzID0gQVRB X0lOTChjdGxyLT5yX3JlczIsIG9mZnNldCk7CisgICAgdV9pbnQzMl90IGlzdGF0dXM7CisKKyAg ICAvKiBnZXQgaW50ZXJydXB0IHN0YXR1cyAqLworICAgIGlmIChjdGxyLT5jaGlwLT5jZmcyICYg TlZRKQorCWlzdGF0dXMgPSBBVEFfSU5MKGN0bHItPnJfcmVzMiwgb2Zmc2V0KTsKKyAgICBlbHNl CisJaXN0YXR1cyA9IEFUQV9JTkIoY3Rsci0+cl9yZXMyLCBvZmZzZXQpOwogCiAgICAgLyogZG8g d2UgaGF2ZSBhbnkgUEhZIGV2ZW50cyA/ICovCiAgICAgaWYgKGlzdGF0dXMgJiAoMHgwYyA8PCBz aGlmdCkpCiAJYXRhX3NhdGFfcGh5X2NoZWNrX2V2ZW50cyhkZXYpOwogCiAgICAgLyogY2xlYXIg aW50ZXJydXB0KHMpICovCi0gICAgQVRBX09VVEIoY3Rsci0+cl9yZXMyLCBvZmZzZXQsCi0JICAg ICAoMHgwZiA8PCBzaGlmdCkgfCAoY3Rsci0+Y2hpcC0+Y2ZnMiAmIE5WUSA/IDB4MDBmMDAwZjAg OiAwKSk7CisgICAgaWYgKGN0bHItPmNoaXAtPmNmZzIgJiBOVlEpCisJQVRBX09VVEwoY3Rsci0+ cl9yZXMyLCBvZmZzZXQsICgweDBmIDw8IHNoaWZ0KSB8IDB4MDBmMDAwZjApOworICAgIGVsc2UK KwlBVEFfT1VUQihjdGxyLT5yX3JlczIsIG9mZnNldCwgKDB4MGYgPDwgc2hpZnQpKTsKIAogICAg IC8qIGRvIHdlIGhhdmUgYW55IGRldmljZSBhY3Rpb24gPyAqLwogICAgIHJldHVybiAoaXN0YXR1 cyAmICgweDAxIDw8IHNoaWZ0KSk7CkBAIC0zNDA4LDcgKzM4NjEsNyBAQCBzYXRhaWk6CiAJLyog Y2xlYXIgU0FUQSBzdGF0dXMgYW5kIHVubWFzayBpbnRlcnJ1cHRzICovCiAJQVRBX09VVEwoY3Rs ci0+cl9yZXMyLCBzdGF0X3JlZywgMHgwMDAwMDBmZik7CiAKLQkvKiBlbmFibGUgImxvbmcgYnVy c3QgbGVuZ2h0IiBvbiBnZW4yIGNoaXBzICovCisJLyogZW5hYmxlICJsb25nIGJ1cnN0IGxlbmd0 aCIgb24gZ2VuMiBjaGlwcyAqLwogCWlmICgoY3Rsci0+Y2hpcC0+Y2ZnMiA9PSBQUlNBVEEyKSB8 fCAoY3Rsci0+Y2hpcC0+Y2ZnMiA9PSBQUkNNQk8yKSkKIAkgICAgQVRBX09VVEwoY3Rsci0+cl9y ZXMyLCAweDQ0LCBBVEFfSU5MKGN0bHItPnJfcmVzMiwgMHg0NCkgfCAweDIwMDApOwogCkBAIC0z NDUzLDM1ICszOTA2LDM1IEBAIGF0YV9wcm9taXNlX3N0YXR1cyhkZXZpY2VfdCBkZXYpCiB9CiAK IHN0YXRpYyBpbnQKLWF0YV9wcm9taXNlX2RtYXN0YXJ0KGRldmljZV90IGRldikKK2F0YV9wcm9t aXNlX2RtYXN0YXJ0KHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCkKIHsKLSAgICBzdHJ1Y3Qg YXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhHUkFORFBBUkVOVChk ZXYpKTsKLSAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZp Y2VfZ2V0X3BhcmVudChkZXYpKTsKLSAgICBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ICA9IGRl dmljZV9nZXRfc29mdGMoZGV2KTsKKyAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxy PWRldmljZV9nZXRfc29mdGMoR1JBTkRQQVJFTlQocmVxdWVzdC0+ZGV2KSk7CisgICAgc3RydWN0 IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+cGFyZW50KTsKKyAg ICBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ICA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+ ZGV2KTsKIAogICAgIGlmIChhdGFkZXYtPmZsYWdzICYgQVRBX0RfNDhCSVRfQUNUSVZFKSB7CiAJ QVRBX09VVEIoY3Rsci0+cl9yZXMxLCAweDExLAogCQkgQVRBX0lOQihjdGxyLT5yX3JlczEsIDB4 MTEpIHwgKGNoLT51bml0ID8gMHgwOCA6IDB4MDIpKTsKIAlBVEFfT1VUTChjdGxyLT5yX3JlczEs IGNoLT51bml0ID8gMHgyNCA6IDB4MjAsCi0JCSAoKGNoLT5kbWEtPmZsYWdzICYgQVRBX0RNQV9S RUFEKSA/IDB4MDUwMDAwMDAgOiAweDA2MDAwMDAwKSB8Ci0JCSAoY2gtPmRtYS0+Y3VyX2lvc2l6 ZSA+PiAxKSk7CisJCSAoKHJlcXVlc3QtPmZsYWdzICYgQVRBX1JfUkVBRCkgPyAweDA1MDAwMDAw IDogMHgwNjAwMDAwMCkgfAorCQkgKHJlcXVlc3QtPmJ5dGVjb3VudCA+PiAxKSk7CiAgICAgfQog ICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0JNU1RBVF9QT1JULCAoQVRBX0lEWF9JTkIoY2gsIEFU QV9CTVNUQVRfUE9SVCkgfAogCQkgKEFUQV9CTVNUQVRfSU5URVJSVVBUIHwgQVRBX0JNU1RBVF9F UlJPUikpKTsKLSAgICBBVEFfSURYX09VVEwoY2gsIEFUQV9CTURUUF9QT1JULCBjaC0+ZG1hLT5z Z19idXMpOworICAgIEFUQV9JRFhfT1VUTChjaCwgQVRBX0JNRFRQX1BPUlQsIHJlcXVlc3QtPmRt YS0+c2dfYnVzKTsKICAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9CTUNNRF9QT1JULAotCQkgKChj aC0+ZG1hLT5mbGFncyAmIEFUQV9ETUFfUkVBRCkgPyBBVEFfQk1DTURfV1JJVEVfUkVBRCA6IDAp IHwKKwkJICgocmVxdWVzdC0+ZmxhZ3MgJiBBVEFfUl9SRUFEKSA/IEFUQV9CTUNNRF9XUklURV9S RUFEIDogMCkgfAogCQkgQVRBX0JNQ01EX1NUQVJUX1NUT1ApOwotICAgIGNoLT5mbGFncyB8PSBB VEFfRE1BX0FDVElWRTsKKyAgICBjaC0+ZG1hLmZsYWdzIHw9IEFUQV9ETUFfQUNUSVZFOwogICAg IHJldHVybiAwOwogfQogCiBzdGF0aWMgaW50Ci1hdGFfcHJvbWlzZV9kbWFzdG9wKGRldmljZV90 IGRldikKK2F0YV9wcm9taXNlX2RtYXN0b3Aoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KQog ewotICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRj KEdSQU5EUEFSRU5UKGRldikpOwotICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf Z2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwotICAgIHN0cnVjdCBhdGFfZGV2aWNl ICphdGFkZXYgID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIHN0cnVjdCBhdGFfcGNpX2Nv bnRyb2xsZXIgKmN0bHI9ZGV2aWNlX2dldF9zb2Z0YyhHUkFORFBBUkVOVChyZXF1ZXN0LT5kZXYp KTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1ZXN0 LT5wYXJlbnQpOworICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgID0gZGV2aWNlX2dldF9z b2Z0YyhyZXF1ZXN0LT5kZXYpOwogICAgIGludCBlcnJvcjsKIAogICAgIGlmIChhdGFkZXYtPmZs YWdzICYgQVRBX0RfNDhCSVRfQUNUSVZFKSB7CkBAIC0zNDkzLDcgKzM5NDYsNyBAQCBhdGFfcHJv bWlzZV9kbWFzdG9wKGRldmljZV90IGRldikKICAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9CTUNN RF9QT1JULAogCQkgQVRBX0lEWF9JTkIoY2gsIEFUQV9CTUNNRF9QT1JUKSAmIH5BVEFfQk1DTURf U1RBUlRfU1RPUCk7CiAgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfQk1TVEFUX1BPUlQsIEFUQV9C TVNUQVRfSU5URVJSVVBUIHwgQVRBX0JNU1RBVF9FUlJPUik7IAotICAgIGNoLT5mbGFncyAmPSB+ QVRBX0RNQV9BQ1RJVkU7CisgICAgY2gtPmRtYS5mbGFncyAmPSB+QVRBX0RNQV9BQ1RJVkU7CiAg ICAgcmV0dXJuIGVycm9yOwogfQogCkBAIC0zNTE0LDExICszOTY3LDkgQEAgYXRhX3Byb21pc2Vf ZG1haW5pdChkZXZpY2VfdCBkZXYpCiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmlj ZV9nZXRfc29mdGMoZGV2KTsKIAogICAgIGF0YV9kbWFpbml0KGRldik7Ci0gICAgaWYgKGNoLT5k bWEpIHsKLQljaC0+ZG1hLT5zdGFydCA9IGF0YV9wcm9taXNlX2RtYXN0YXJ0OwotCWNoLT5kbWEt PnN0b3AgPSBhdGFfcHJvbWlzZV9kbWFzdG9wOwotCWNoLT5kbWEtPnJlc2V0ID0gYXRhX3Byb21p c2VfZG1hcmVzZXQ7Ci0gICAgfQorICAgIGNoLT5kbWEuc3RhcnQgPSBhdGFfcHJvbWlzZV9kbWFz dGFydDsKKyAgICBjaC0+ZG1hLnN0b3AgPSBhdGFfcHJvbWlzZV9kbWFzdG9wOworICAgIGNoLT5k bWEucmVzZXQgPSBhdGFfcHJvbWlzZV9kbWFyZXNldDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTM1 MjgsNyArMzk3OSw3IEBAIGF0YV9wcm9taXNlX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW8K ICAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0Yyhn cGFyZW50KTsKICAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0Yyhk ZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAgICBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0g ZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwotICAgIGludCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSAr IEFUQV9ERVYoYXRhZGV2LT51bml0KTsKKyAgICBpbnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkg KyBhdGFkZXYtPnVuaXQ7CiAgICAgaW50IGVycm9yOwogICAgIHVfaW50MzJfdCB0aW1pbmdzW11b Ml0gPSB7CiAgICAgLyogICAgUFJPTEQgICAgICAgUFJORVcgICAgICAgICAgICAgICAgbW9kZSAq LwpAQCAtMzY1Niw2ICs0MTA3LDkgQEAgYXRhX3Byb21pc2VfbWlvX2FsbG9jYXRlKGRldmljZV90 IGRldikKICAgICBlbHNlIHsKIAljaC0+aHcuY29tbWFuZCA9IGF0YV9wcm9taXNlX21pb19jb21t YW5kOwogCWNoLT5ody5zdGF0dXMgPSBhdGFfcHJvbWlzZV9taW9fc3RhdHVzOworCWNoLT5ody5z b2Z0cmVzZXQgPSBhdGFfcHJvbWlzZV9taW9fc29mdHJlc2V0OworCWNoLT5ody5wbV9yZWFkID0g YXRhX3Byb21pc2VfbWlvX3BtX3JlYWQ7CisJY2gtPmh3LnBtX3dyaXRlID0gYXRhX3Byb21pc2Vf bWlvX3BtX3dyaXRlOwogICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zNzM3LDkgKzQxOTEs OSBAQCBhdGFfcHJvbWlzZV9taW9fc3RhdHVzKGRldmljZV90IGRldikKIAkJICAgICBNX0FUQSwg TV9OT1dBSVQgfCBNX1pFUk8pKSkgewogCiAJaWYgKGJvb3R2ZXJib3NlKQotCSAgICBkZXZpY2Vf cHJpbnRmKGNoLT5kZXYsICJESVNDT05ORUNUIHJlcXVlc3RlZFxuIik7CisJICAgIGRldmljZV9w cmludGYoZGV2LCAiRElTQ09OTkVDVCByZXF1ZXN0ZWRcbiIpOwogCXRwLT5hY3Rpb24gPSBBVEFf Q19ERVRBQ0g7Ci0JdHAtPmRldiA9IGNoLT5kZXY7CisJdHAtPmRldiA9IGRldjsKIAlUQVNLX0lO SVQoJnRwLT50YXNrLCAwLCBhdGFfc2F0YV9waHlfZXZlbnQsIHRwKTsKIAl0YXNrcXVldWVfZW5x dWV1ZSh0YXNrcXVldWVfdGhyZWFkLCAmdHAtPnRhc2spOwogICAgIH0KQEAgLTM3NTEsOSArNDIw NSw5IEBAIGF0YV9wcm9taXNlX21pb19zdGF0dXMoZGV2aWNlX3QgZGV2KQogCQkgICAgIE1fQVRB LCBNX05PV0FJVCB8IE1fWkVSTykpKSB7CiAKIAlpZiAoYm9vdHZlcmJvc2UpCi0JICAgIGRldmlj ZV9wcmludGYoY2gtPmRldiwgIkNPTk5FQ1QgcmVxdWVzdGVkXG4iKTsKKwkgICAgZGV2aWNlX3By aW50ZihkZXYsICJDT05ORUNUIHJlcXVlc3RlZFxuIik7CiAJdHAtPmFjdGlvbiA9IEFUQV9DX0FU VEFDSDsKLQl0cC0+ZGV2ID0gY2gtPmRldjsKKwl0cC0+ZGV2ID0gZGV2OwogCVRBU0tfSU5JVCgm dHAtPnRhc2ssIDAsIGF0YV9zYXRhX3BoeV9ldmVudCwgdHApOwogCXRhc2txdWV1ZV9lbnF1ZXVl KHRhc2txdWV1ZV90aHJlYWQsICZ0cC0+dGFzayk7CiAgICAgfQpAQCAtMzc2NiwxMSArNDIyMCwx NiBAQCBzdGF0aWMgaW50CiBhdGFfcHJvbWlzZV9taW9fY29tbWFuZChzdHJ1Y3QgYXRhX3JlcXVl c3QgKnJlcXVlc3QpCiB7CiAgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3Rscj1kZXZp Y2VfZ2V0X3NvZnRjKEdSQU5EUEFSRU5UKHJlcXVlc3QtPmRldikpOwotICAgIHN0cnVjdCBhdGFf Y2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KHJlcXVlc3Qt PmRldikpOwotICAgIHVfaW50MzJfdCAqd29yZHAgPSAodV9pbnQzMl90ICopY2gtPmRtYS0+d29y azsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1ZXN0 LT5wYXJlbnQpOworICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3Nv ZnRjKHJlcXVlc3QtPmRldik7CisKKyAgICB1X2ludDMyX3QgKndvcmRwID0gKHVfaW50MzJfdCAq KWNoLT5kbWEud29yazsKIAogICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgKGNoLT51bml0ICsg MSkgPDwgMiwgMHgwMDAwMDAwMSk7CiAKKyAgICAvKiBzZXQgcG9ydG11bHRpcGxpZXIgcG9ydCAq LworICAgIEFUQV9PVVRCKGN0bHItPnJfcmVzMiwgMHg0ZTggKyAoY2gtPnVuaXQgPDwgOCksIGF0 YWRldi0+dW5pdCAmIDB4MGYpOworCiAgICAgLyogWFhYIFNPUyBhZGQgQVRBUEkgY29tbWFuZHMg c3VwcG9ydCBsYXRlciAqLwogICAgIHN3aXRjaCAocmVxdWVzdC0+dS5hdGEuY29tbWFuZCkgewog ICAgIGRlZmF1bHQ6CkBAIC0zNzg2LDExICs0MjQ1LDExIEBAIGF0YV9wcm9taXNlX21pb19jb21t YW5kKHN0cnVjdCBhdGFfcmVxdWUKIAl3b3JkcFswXSA9IGh0b2xlMzIoMHgwMCB8ICgoY2gtPnVu aXQgKyAxKSA8PCAxNikgfCAoMHgwMCA8PCAyNCkpOwogCWJyZWFrOwogICAgIH0KLSAgICB3b3Jk cFsxXSA9IGh0b2xlMzIoY2gtPmRtYS0+c2dfYnVzKTsKKyAgICB3b3JkcFsxXSA9IGh0b2xlMzIo cmVxdWVzdC0+ZG1hLT5zZ19idXMpOwogICAgIHdvcmRwWzJdID0gMDsKICAgICBhdGFfcHJvbWlz ZV9hcGt0KCh1X2ludDhfdCopd29yZHAsIHJlcXVlc3QpOwogCi0gICAgQVRBX09VVEwoY3Rsci0+ cl9yZXMyLCAweDAyNDAgKyAoY2gtPnVuaXQgPDwgNyksIGNoLT5kbWEtPndvcmtfYnVzKTsKKyAg ICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIDB4MDI0MCArIChjaC0+dW5pdCA8PCA3KSwgY2gtPmRt YS53b3JrX2J1cyk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTM4NTksNyArNDMxOCw3IEBAIGF0 YV9wcm9taXNlX21pb19yZXNldChkZXZpY2VfdCBkZXYpCiAJaWYgKChjdGxyLT5jaGlwLT5jZmcy ID09IFBSU0FUQTIpIHx8CiAJICAgICgoY3Rsci0+Y2hpcC0+Y2ZnMiA9PSBQUkNNQk8yKSAmJiAo Y2gtPnVuaXQgPCAyKSkpIHsKIAkgICAgLyogc2V0IHBvcnRtdWx0aXBsaWVyIHBvcnQgKi8KLQkg ICAgQVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweDRlOCArIChjaC0+dW5pdCA8PCA4KSwgMHgwZik7 CisJICAgIC8vQVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweDRlOCArIChjaC0+dW5pdCA8PCA4KSwg MHgwZik7CiAKIAkgICAgLyogbWFzayBwbHVnL3VucGx1ZyBpbnRyICovCiAJICAgIEFUQV9PVVRM KGN0bHItPnJfcmVzMiwgMHgwNjAsICgweDAwMTEwMDAwIDw8IGNoLT51bml0KSk7CkBAIC0zODgw LDEzICs0MzM5LDM5IEBAIGF0YV9wcm9taXNlX21pb19yZXNldChkZXZpY2VfdCBkZXYpCiAJCSAg ICAgKEFUQV9JTkwoY3Rsci0+cl9yZXMyLCAweDQxNCArIChjaC0+dW5pdCA8PCA4KSkgJgogCQkg ICAgIH4weDAwMDAwMDAzKSB8IDB4MDAwMDAwMDEpOwogCi0JICAgIGlmIChhdGFfc2F0YV9waHlf cmVzZXQoZGV2KSkKLQkJYXRhX2dlbmVyaWNfcmVzZXQoZGV2KTsKKwkgICAgaWYgKGF0YV9zYXRh X3BoeV9yZXNldChkZXYpKSB7CisJCXVfaW50MzJfdCBzaWduYXR1cmUgPSBjaC0+aHcuc29mdHJl c2V0KGRldiwgQVRBX1BNKTsKKworCQlpZiAoMSB8IGJvb3R2ZXJib3NlKQorICAgICAgICAJICAg IGRldmljZV9wcmludGYoZGV2LCAiU0lHTkFUVVJFOiAlMDh4XG4iLCBzaWduYXR1cmUpOworCisJ CXN3aXRjaCAoc2lnbmF0dXJlKSB7CisJCWNhc2UgMHgwMDAwMDEwMToKKwkJICAgIGNoLT5kZXZp Y2VzID0gQVRBX0FUQV9NQVNURVI7CisJCSAgICBicmVhazsKKwkJY2FzZSAweDk2NjkwMTAxOgor CQkgICAgY2gtPmRldmljZXMgPSBBVEFfUE9SVE1VTFRJUExJRVI7CisJCSAgICBhdGFfcG1faWRl bnRpZnkoZGV2KTsKKwkJICAgIGJyZWFrOworCQljYXNlIDB4ZWIxNDAxMDE6CisJCSAgICBjaC0+ ZGV2aWNlcyA9IEFUQV9BVEFQSV9NQVNURVI7CisJCSAgICBicmVhazsKKwkJZGVmYXVsdDogLyog U09TIFhYWCAqLworCQkgICAgaWYgKGJvb3R2ZXJib3NlKQorCQkJZGV2aWNlX3ByaW50ZihkZXYs CisJCQkJICAgICAgIk5vIHNpZ25hdHVyZSwgYXN1bWluZyBkaXNrIGRldmljZVxuIik7CisJCSAg ICBjaC0+ZGV2aWNlcyA9IEFUQV9BVEFfTUFTVEVSOworCQl9CisJCWlmIChib290dmVyYm9zZSkK KwkJICAgIGRldmljZV9wcmludGYoZGV2LCAicHJvbWlzZV9taW9fcmVzZXQgZGV2aWNlcz0lMDh4 XG4iLAorCQkgICAgCQkgIGNoLT5kZXZpY2VzKTsKKworCSAgICB9CiAKIAkgICAgLyogcmVzZXQg YW5kIGVuYWJsZSBwbHVnL3VucGx1ZyBpbnRyICovCiAJICAgIEFUQV9PVVRMKGN0bHItPnJfcmVz MiwgMHgwNjAsICgweDAwMDAwMDExIDw8IGNoLT51bml0KSk7CiAKLQkgICAgLyogc2V0IHBvcnRt dWx0aXBsaWVyIHBvcnQgKi8KKwkgICAgLy8vKiBzZXQgcG9ydG11bHRpcGxpZXIgcG9ydCAqLwog CSAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIDB4NGU4ICsgKGNoLT51bml0IDw8IDgpLCAweDAw KTsKIAl9CiAJZWxzZQpAQCAtMzg5NiwxNSArNDM4MSwxMjcgQEAgYXRhX3Byb21pc2VfbWlvX3Jl c2V0KGRldmljZV90IGRldikKICAgICB9CiB9CiAKK3N0YXRpYyBpbnQKK2F0YV9wcm9taXNlX21p b19wbV9yZWFkKGRldmljZV90IGRldiwgaW50IHBvcnQsIGludCByZWcsIHVfaW50MzJfdCAqcmVz dWx0KQoreworICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0 X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOworICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAq Y2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisgICAgaW50IHRpbWVvdXQgPSAwOworCisgICAg Lyogc2V0IHBvcnRtdWx0aXBsaWVyIHBvcnQgKi8KKyAgICBBVEFfT1VUQihjdGxyLT5yX3JlczIs IDB4NGU4ICsgKGNoLT51bml0IDw8IDgpLCAweDBmKTsKKworICAgIEFUQV9JRFhfT1VUQihjaCwg QVRBX0ZFQVRVUkUsIHJlZyk7CisgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfRFJJVkUsIHBvcnQp OworCisgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfQ09NTUFORCwgQVRBX1JFQURfUE0pOworCisg ICAgd2hpbGUgKHRpbWVvdXQgPCAxMDAwMDAwKSB7CisJdV9pbnQ4X3Qgc3RhdHVzID0gQVRBX0lE WF9JTkIoY2gsIEFUQV9TVEFUVVMpOworCWlmICghKHN0YXR1cyAmIEFUQV9TX0JVU1kpKQorCSAg ICBicmVhazsKKwl0aW1lb3V0ICs9IDEwMDA7CisJREVMQVkoMTAwMCk7CisgICAgfQorICAgIGlm ICh0aW1lb3V0ID49IDEwMDAwMDApCisJcmV0dXJuIEFUQV9FX0FCT1JUOworCisgICAgKnJlc3Vs dCA9IEFUQV9JRFhfSU5CKGNoLCBBVEFfQ09VTlQpIHwKKwkgICAgICAoQVRBX0lEWF9JTkIoY2gs IEFUQV9TRUNUT1IpIDw8IDgpIHwKKwkgICAgICAoQVRBX0lEWF9JTkIoY2gsIEFUQV9DWUxfTFNC KSA8PCAxNikgfAorCSAgICAgIChBVEFfSURYX0lOQihjaCwgQVRBX0NZTF9NU0IpIDw8IDI0KTsK KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYXRhX3Byb21pc2VfbWlvX3BtX3dyaXRl KGRldmljZV90IGRldiwgaW50IHBvcnQsIGludCByZWcsIHVfaW50MzJfdCB2YWx1ZSkKK3sKKyAg ICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZp Y2VfZ2V0X3BhcmVudChkZXYpKTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNl X2dldF9zb2Z0YyhkZXYpOworICAgIGludCB0aW1lb3V0ID0gMDsKKworICAgIC8qIHNldCBwb3J0 bXVsdGlwbGllciBwb3J0ICovCisgICAgQVRBX09VVEIoY3Rsci0+cl9yZXMyLCAweDRlOCArIChj aC0+dW5pdCA8PCA4KSwgMHgwZik7CisKKyAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9GRUFUVVJF LCByZWcpOworICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZFLCBwb3J0KTsKKyAgICBBVEFf SURYX09VVEIoY2gsIEFUQV9DT1VOVCwgdmFsdWUgJiAweGZmKTsKKyAgICBBVEFfSURYX09VVEIo Y2gsIEFUQV9TRUNUT1IsICh2YWx1ZSA+PiA4KSAmIDB4ZmYpOworICAgIEFUQV9JRFhfT1VUQihj aCwgQVRBX0NZTF9MU0IsICh2YWx1ZSA+PiAxNikgJiAweGZmKTsKKyAgICBBVEFfSURYX09VVEIo Y2gsIEFUQV9DWUxfTVNCLCAodmFsdWUgPj4gMjQpICYgMHhmZik7CisKKyAgICBBVEFfSURYX09V VEIoY2gsIEFUQV9DT01NQU5ELCBBVEFfV1JJVEVfUE0pOworCisgICAgd2hpbGUgKHRpbWVvdXQg PCAxMDAwMDAwKSB7CisJdV9pbnQ4X3Qgc3RhdHVzID0gQVRBX0lEWF9JTkIoY2gsIEFUQV9TVEFU VVMpOworCWlmICghKHN0YXR1cyAmIEFUQV9TX0JVU1kpKQorCSAgICBicmVhazsKKwl0aW1lb3V0 ICs9IDEwMDA7CisJREVMQVkoMTAwMCk7CisgICAgfQorICAgIGlmICh0aW1lb3V0ID49IDEwMDAw MDApCisJcmV0dXJuIEFUQV9FX0FCT1JUOworCisgICAgcmV0dXJuIEFUQV9JRFhfSU5CKGNoLCBB VEFfRVJST1IpOworfQorCisvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIEFUQSBjaGFubmVsIGxvY2tl ZCBhbmQgc3RhdGVfbXR4IGhlbGQgKi8KK3N0YXRpYyB1X2ludDMyX3QKK2F0YV9wcm9taXNlX21p b19zb2Z0cmVzZXQoZGV2aWNlX3QgZGV2LCBpbnQgcG9ydCkKK3sKKyAgICBzdHJ1Y3QgYXRhX3Bj aV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChk ZXYpKTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYp OworICAgIGludCB0aW1lb3V0OworCisgICAgLyogc2V0IHBvcnRtdWx0aXBsaWVyIHBvcnQgKi8K KyAgICBBVEFfT1VUQihjdGxyLT5yX3JlczIsIDB4NGU4ICsgKGNoLT51bml0IDw8IDgpLCBwb3J0 ICYgMHgwZik7CisKKyAgICAvKiBzb2Z0cmVzZXQgZGV2aWNlIG9uIHRoaXMgY2hhbm5lbCAqLwor ICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZFLCBBVEFfRF9JQk0gfCBBVEFfRF9MQkEgfCBB VEFfREVWKEFUQV9NQVNURVIpKTsKKyAgICBERUxBWSgxMCk7CisgICAgQVRBX0lEWF9PVVRCKGNo LCBBVEFfQ09OVFJPTCwgQVRBX0FfSURTIHwgQVRBX0FfUkVTRVQpOworICAgIGF0YV91ZGVsYXko MTAwMDApOyAKKyAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9DT05UUk9MLCBBVEFfQV9JRFMpOwor ICAgIGF0YV91ZGVsYXkoMTUwMDAwKTsKKyAgICBBVEFfSURYX0lOQihjaCwgQVRBX0VSUk9SKTsK KworICAgIC8qIHdhaXQgZm9yIEJVU1kgdG8gZ28gaW5hY3RpdmUgKi8KKyAgICBmb3IgKHRpbWVv dXQgPSAwOyB0aW1lb3V0IDwgMTAwOyB0aW1lb3V0KyspIHsKKwl1X2ludDhfdCBlcnIsIHN0YXQ7 CisKKwllcnIgPSBBVEFfSURYX0lOQihjaCwgQVRBX0VSUk9SKTsKKwlzdGF0ID0gQVRBX0lEWF9J TkIoY2gsIEFUQV9TVEFUVVMpOworCisJLy9pZiAoc3RhdCA9PSBlcnIgJiYgdGltZW91dCA+IChz dGF0ICYgQVRBX1NfQlVTWSA/IDEwMCA6IDEwKSkKKwkgICAgLy9icmVhazsKKworCWlmICghKHN0 YXQgJiBBVEFfU19CVVNZKSkgeworCSAgICAvL2lmICgoZXJyICYgMHg3ZikgPT0gQVRBX0VfSUxJ KSB7CisJCXJldHVybiBBVEFfSURYX0lOQihjaCwgQVRBX0NPVU5UKSB8CisJCSAgICAgICAoQVRB X0lEWF9JTkIoY2gsIEFUQV9TRUNUT1IpIDw8IDgpIHwKKwkJICAgICAgIChBVEFfSURYX0lOQihj aCwgQVRBX0NZTF9MU0IpIDw8IDE2KSB8CisJCSAgICAgICAoQVRBX0lEWF9JTkIoY2gsIEFUQV9D WUxfTVNCKSA8PCAyNCk7CisJICAgIC8vfQorCSAgICAvL2Vsc2UgaWYgKHN0YXQgJiAweDBmKSB7 CisJCS8vc3RhdCB8PSBBVEFfU19CVVNZOworCSAgICAvL30KKwl9CisKKwlpZiAoIShzdGF0ICYg QVRBX1NfQlVTWSkgfHwgKHN0YXQgPT0gMHhmZiAmJiB0aW1lb3V0ID4gMTApKQorCSAgICBicmVh azsKKwlhdGFfdWRlbGF5KDEwMDAwMCk7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKwogc3Rh dGljIHZvaWQKIGF0YV9wcm9taXNlX21pb19kbWFpbml0KGRldmljZV90IGRldikKIHsKICAgICBz dHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogCi0gICAgLyog bm90ZSBzdGFydCBhbmQgc3RvcCBhcmUgbm90IHVzZWQgaGVyZSAqLwogICAgIGF0YV9kbWFpbml0 KGRldik7Ci0gICAgaWYgKGNoLT5kbWEpIAotCWNoLT5kbWEtPnNldHByZCA9IGF0YV9wcm9taXNl X21pb19zZXRwcmQ7CisgICAgLyogbm90ZSBzdGFydCBhbmQgc3RvcCBhcmUgbm90IHVzZWQgaGVy ZSAqLworICAgIGNoLT5kbWEuc2V0cHJkID0gYXRhX3Byb21pc2VfbWlvX3NldHByZDsKIH0KIAog CkBAIC0zOTkwLDggKzQ1ODcsOCBAQCBhdGFfcHJvbWlzZV9zeDRfY29tbWFuZChzdHJ1Y3QgYXRh X3JlcXVlCiB7CiAgICAgZGV2aWNlX3QgZ3BhcmVudCA9IEdSQU5EUEFSRU5UKHJlcXVlc3QtPmRl dik7CiAgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRfc29m dGMoZ3BhcmVudCk7Ci0gICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29m dGMoZGV2aWNlX2dldF9wYXJlbnQocmVxdWVzdC0+ZGV2KSk7Ci0gICAgc3RydWN0IGF0YV9kbWFf cHJkZW50cnkgKnByZCA9IGNoLT5kbWEtPnNnOworICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2gg PSBkZXZpY2VfZ2V0X3NvZnRjKHJlcXVlc3QtPnBhcmVudCk7CisgICAgc3RydWN0IGF0YV9kbWFf cHJkZW50cnkgKnByZCA9IHJlcXVlc3QtPmRtYS0+c2c7CiAgICAgY2FkZHJfdCB3aW5kb3cgPSBy bWFuX2dldF92aXJ0dWFsKGN0bHItPnJfcmVzMSk7CiAgICAgdV9pbnQzMl90ICp3b3JkcDsKICAg ICBpbnQgaSwgaWR4LCBsZW5ndGggPSAwOwpAQCAtNDA5OCw3ICs0Njk1LDcgQEAgYXRhX3Byb21p c2VfYXBrdCh1X2ludDhfdCAqYnl0ZXAsIHN0cnVjdAogICAgIGludCBpID0gMTI7CiAKICAgICBi eXRlcFtpKytdID0gQVRBX1BEQ18xQiB8IEFUQV9QRENfV1JJVEVfUkVHIHwgQVRBX1BEQ19XQUlU X05CVVNZfEFUQV9EUklWRTsKLSAgICBieXRlcFtpKytdID0gQVRBX0RfSUJNIHwgQVRBX0RfTEJB IHwgYXRhZGV2LT51bml0OworICAgIGJ5dGVwW2krK10gPSBBVEFfRF9JQk0gfCBBVEFfRF9MQkEg fCBBVEFfREVWKGF0YWRldi0+dW5pdCk7CiAgICAgYnl0ZXBbaSsrXSA9IEFUQV9QRENfMUIgfCBB VEFfUERDX1dSSVRFX0NUTDsKICAgICBieXRlcFtpKytdID0gQVRBX0FfNEJJVDsKIApAQCAtNDEx OSw3ICs0NzE2LDcgQEAgYXRhX3Byb21pc2VfYXBrdCh1X2ludDhfdCAqYnl0ZXAsIHN0cnVjdAog CWJ5dGVwW2krK10gPSByZXF1ZXN0LT51LmF0YS5sYmEgPj4gNDA7CiAJYnl0ZXBbaSsrXSA9IHJl cXVlc3QtPnUuYXRhLmxiYSA+PiAxNjsKIAlieXRlcFtpKytdID0gQVRBX1BEQ18xQiB8IEFUQV9Q RENfV1JJVEVfUkVHIHwgQVRBX0RSSVZFOwotCWJ5dGVwW2krK10gPSBBVEFfRF9MQkEgfCBhdGFk ZXYtPnVuaXQ7CisJYnl0ZXBbaSsrXSA9IEFUQV9EX0xCQSB8IEFUQV9ERVYoYXRhZGV2LT51bml0 KTsKICAgICB9CiAgICAgZWxzZSB7CiAJYnl0ZXBbaSsrXSA9IEFUQV9QRENfMUIgfCBBVEFfUERD X1dSSVRFX1JFRyB8IEFUQV9GRUFUVVJFOwpAQCAtNDEzNCw3ICs0NzMxLDggQEAgYXRhX3Byb21p c2VfYXBrdCh1X2ludDhfdCAqYnl0ZXAsIHN0cnVjdAogCWJ5dGVwW2krK10gPSByZXF1ZXN0LT51 LmF0YS5sYmEgPj4gMTY7CiAJYnl0ZXBbaSsrXSA9IEFUQV9QRENfMUIgfCBBVEFfUERDX1dSSVRF X1JFRyB8IEFUQV9EUklWRTsKIAlieXRlcFtpKytdID0gKGF0YWRldi0+ZmxhZ3MgJiBBVEFfRF9V U0VfQ0hTID8gMCA6IEFUQV9EX0xCQSkgfAotCQkgICBBVEFfRF9JQk0gfCBhdGFkZXYtPnVuaXQg fCAoKHJlcXVlc3QtPnUuYXRhLmxiYSA+PiAyNCkmMHhmKTsKKwkJICAgICBBVEFfRF9JQk0gfCBB VEFfREVWKGF0YWRldi0+dW5pdCkgfAorCQkgICAgICgocmVxdWVzdC0+dS5hdGEubGJhID4+IDI0 KSYweGYpOwogICAgIH0KICAgICBieXRlcFtpKytdID0gQVRBX1BEQ18xQiB8IEFUQV9QRENfV1JJ VEVfRU5EIHwgQVRBX0NPTU1BTkQ7CiAgICAgYnl0ZXBbaSsrXSA9IHJlcXVlc3QtPnUuYXRhLmNv bW1hbmQ7CkBAIC00Mjk0LDggKzQ4OTIsNyBAQCBhdGFfc2VydmVyd29ya3NfYWxsb2NhdGUoZGV2 aWNlX3QgZGV2KQogICAgIGNoLT5ody50Zl93cml0ZSA9IGF0YV9zZXJ2ZXJ3b3Jrc190Zl93cml0 ZTsKIAogICAgIC8qIGNoaXAgZG9lcyBub3QgcmVsaWFibHkgZG8gNjRLIERNQSB0cmFuc2ZlcnMg Ki8KLSAgICBpZiAoY2gtPmRtYSkKLQljaC0+ZG1hLT5tYXhfaW9zaXplID0gMTI2ICogREVWX0JT SVpFOworICAgIGNoLT5kbWEubWF4X2lvc2l6ZSA9IDEyNiAqIERFVl9CU0laRTsKIAogICAgIHJl dHVybiAwOwogfQpAQCAtNDMwMyw3ICs0OTAwLDcgQEAgYXRhX3NlcnZlcndvcmtzX2FsbG9jYXRl KGRldmljZV90IGRldikKIHN0YXRpYyB2b2lkCiBhdGFfc2VydmVyd29ya3NfdGZfcmVhZChzdHJ1 Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpCiB7Ci0gICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9 IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQocmVxdWVzdC0+ZGV2KSk7CisgICAg c3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+cGFyZW50 KTsKICAgICBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1 ZXN0LT5kZXYpOwogCiAgICAgaWYgKGF0YWRldi0+ZmxhZ3MgJiBBVEFfRF80OEJJVF9BQ1RJVkUp IHsKQEAgLTQzMzIsNyArNDkyOSw3IEBAIGF0YV9zZXJ2ZXJ3b3Jrc190Zl9yZWFkKHN0cnVjdCBh dGFfcmVxdWUKIHN0YXRpYyB2b2lkCiBhdGFfc2VydmVyd29ya3NfdGZfd3JpdGUoc3RydWN0IGF0 YV9yZXF1ZXN0ICpyZXF1ZXN0KQogewotICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZp Y2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KHJlcXVlc3QtPmRldikpOworICAgIHN0cnVj dCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKHJlcXVlc3QtPnBhcmVudCk7CiAg ICAgc3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+ ZGV2KTsKIAogICAgIGlmIChhdGFkZXYtPmZsYWdzICYgQVRBX0RfNDhCSVRfQUNUSVZFKSB7CkBA IC00MzQ0LDcgKzQ5NDEsNyBAQCBhdGFfc2VydmVyd29ya3NfdGZfd3JpdGUoc3RydWN0IGF0YV9y ZXF1CiAJCQkJICAgICAgICgocmVxdWVzdC0+dS5hdGEubGJhID4+IDgpICYgMHgwMGZmKSk7CiAJ QVRBX0lEWF9PVVRXKGNoLCBBVEFfQ1lMX01TQiwgKChyZXF1ZXN0LT51LmF0YS5sYmEgPj4gMzIp ICYgMHhmZjAwKSB8IAogCQkJCSAgICAgICAoKHJlcXVlc3QtPnUuYXRhLmxiYSA+PiAxNikgJiAw eDAwZmYpKTsKLQlBVEFfSURYX09VVFcoY2gsIEFUQV9EUklWRSwgQVRBX0RfTEJBIHwgYXRhZGV2 LT51bml0KTsKKwlBVEFfSURYX09VVFcoY2gsIEFUQV9EUklWRSwgQVRBX0RfTEJBIHwgQVRBX0RF VihhdGFkZXYtPnVuaXQpKTsKICAgICB9CiAgICAgZWxzZSB7CiAJQVRBX0lEWF9PVVRXKGNoLCBB VEFfRkVBVFVSRSwgcmVxdWVzdC0+dS5hdGEuZmVhdHVyZSk7CkBAIC00MzY1LDcgKzQ5NjIsNyBA QCBhdGFfc2VydmVyd29ya3NfdGZfd3JpdGUoc3RydWN0IGF0YV9yZXF1CiAJCQkgKHJlcXVlc3Qt PnUuYXRhLmxiYSAvIChzZWN0b3JzICogaGVhZHMpKSk7CiAJICAgIEFUQV9JRFhfT1VUVyhjaCwg QVRBX0NZTF9NU0IsCiAJCQkgKHJlcXVlc3QtPnUuYXRhLmxiYSAvIChzZWN0b3JzICogaGVhZHMp KSA+PiA4KTsKLQkgICAgQVRBX0lEWF9PVVRXKGNoLCBBVEFfRFJJVkUsIEFUQV9EX0lCTSB8IGF0 YWRldi0+dW5pdCB8IAorCSAgICBBVEFfSURYX09VVFcoY2gsIEFUQV9EUklWRSwgQVRBX0RfSUJN IHwgQVRBX0RFVihhdGFkZXYtPnVuaXQpIHwgCiAJCQkgKCgocmVxdWVzdC0+dS5hdGEubGJhJSAo c2VjdG9ycyAqIGhlYWRzKSkgLwogCQkJICAgc2VjdG9ycykgJiAweGYpKTsKIAl9CkBAIC00Mzc0 LDcgKzQ5NzEsNyBAQCBhdGFfc2VydmVyd29ya3NfdGZfd3JpdGUoc3RydWN0IGF0YV9yZXF1CiAJ ICAgIEFUQV9JRFhfT1VUVyhjaCwgQVRBX0NZTF9MU0IsIHJlcXVlc3QtPnUuYXRhLmxiYSA+PiA4 KTsKIAkgICAgQVRBX0lEWF9PVVRXKGNoLCBBVEFfQ1lMX01TQiwgcmVxdWVzdC0+dS5hdGEubGJh ID4+IDE2KTsKIAkgICAgQVRBX0lEWF9PVVRXKGNoLCBBVEFfRFJJVkUsCi0JCQkgQVRBX0RfSUJN IHwgQVRBX0RfTEJBIHwgYXRhZGV2LT51bml0IHwKKwkJCSBBVEFfRF9JQk0gfCBBVEFfRF9MQkEg fCBBVEFfREVWKGF0YWRldi0+dW5pdCkgfAogCQkJICgocmVxdWVzdC0+dS5hdGEubGJhID4+IDI0 KSAmIDB4MGYpKTsKIAl9CiAgICAgfQpAQCAtNDM4Nyw3ICs0OTg0LDcgQEAgYXRhX3NlcnZlcndv cmtzX3NldG1vZGUoZGV2aWNlX3QgZGV2LCBpbgogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xs ZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGdwYXJlbnQpOwogICAgIHN0cnVjdCBhdGFfY2hh bm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAg IHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0gICAg aW50IGRldm5vID0gKGNoLT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOworICAg IGludCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKICAgICBpbnQgb2Zm c2V0ID0gKGRldm5vIF4gMHgwMSkgPDwgMzsKICAgICBpbnQgZXJyb3I7CiAgICAgdV9pbnQ4X3Qg cGlvdGltaW5nc1tdID0geyAweDVkLCAweDQ3LCAweDM0LCAweDIyLCAweDIwLCAweDM0LCAweDIy LCAweDIwLApAQCAtNDQ0OSwyMSArNTA0NiwyMSBAQCBhdGFfc2lpX2lkZW50KGRldmljZV90IGRl dikKIHsKICAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9z b2Z0YyhkZXYpOwogICAgIHN0YXRpYyBzdHJ1Y3QgYXRhX2NoaXBfaWQgaWRzW10gPQotICAgIHt7 IEFUQV9TSUkzMTE0LCAgIDB4MDAsIFNJSU1FTUlPLCBTSUk0Q0gsICAgIEFUQV9TQTE1MCwgIlNp SSAzMTE0IiB9LAotICAgICB7IEFUQV9TSUkzNTEyLCAgIDB4MDIsIFNJSU1FTUlPLCAwLCAgICAg ICAgIEFUQV9TQTE1MCwgIlNpSSAzNTEyIiB9LAotICAgICB7IEFUQV9TSUkzMTEyLCAgIDB4MDIs IFNJSU1FTUlPLCAwLCAgICAgICAgIEFUQV9TQTE1MCwgIlNpSSAzMTEyIiB9LAotICAgICB7IEFU QV9TSUkzMTEyXzEsIDB4MDIsIFNJSU1FTUlPLCAwLCAgICAgICAgIEFUQV9TQTE1MCwgIlNpSSAz MTEyIiB9LAotICAgICB7IEFUQV9TSUkzNTEyLCAgIDB4MDAsIFNJSU1FTUlPLCBTSUlCVUcsICAg IEFUQV9TQTE1MCwgIlNpSSAzNTEyIiB9LAotICAgICB7IEFUQV9TSUkzMTEyLCAgIDB4MDAsIFNJ SU1FTUlPLCBTSUlCVUcsICAgIEFUQV9TQTE1MCwgIlNpSSAzMTEyIiB9LAotICAgICB7IEFUQV9T SUkzMTEyXzEsIDB4MDAsIFNJSU1FTUlPLCBTSUlCVUcsICAgIEFUQV9TQTE1MCwgIlNpSSAzMTEy IiB9LAotICAgICB7IEFUQV9TSUkzMTI0LCAgIDB4MDAsIFNJSVBSQklPLCBTSUk0Q0gsICAgIEFU QV9TQTMwMCwgIlNpSSAzMTI0IiB9LAotICAgICB7IEFUQV9TSUkzMTMyLCAgIDB4MDAsIFNJSVBS QklPLCAwLCAgICAgICAgIEFUQV9TQTMwMCwgIlNpSSAzMTMyIiB9LAotICAgICB7IEFUQV9TSUkz MTMyXzEsIDB4MDAsIFNJSVBSQklPLCAwLCAgICAgICAgIEFUQV9TQTMwMCwgIlNpSSAzMTMyIiB9 LAotICAgICB7IEFUQV9TSUkwNjgwLCAgIDB4MDAsIFNJSU1FTUlPLCBTSUlTRVRDTEssIEFUQV9V RE1BNiwgIlNpSSAwNjgwIiB9LAotICAgICB7IEFUQV9DTUQ2NDksICAgIDB4MDAsIDAsICAgICAg ICBTSUlJTlRSLCAgIEFUQV9VRE1BNSwgIkNNRCA2NDkiIH0sCi0gICAgIHsgQVRBX0NNRDY0OCwg ICAgMHgwMCwgMCwgICAgICAgIFNJSUlOVFIsICAgQVRBX1VETUE0LCAiQ01EIDY0OCIgfSwKLSAg ICAgeyBBVEFfQ01ENjQ2LCAgICAweDA3LCAwLCAgICAgICAgMCwgICAgICAgICBBVEFfVURNQTIs ICJDTUQgNjQ2VTIiIH0sCi0gICAgIHsgQVRBX0NNRDY0NiwgICAgMHgwMCwgMCwgICAgICAgIDAs ICAgICAgICAgQVRBX1dETUEyLCAiQ01EIDY0NiIgfSwKKyAgICB7eyBBVEFfU0lJMzExNCwgICAw eDAwLCBTSUlNRU1JTywgU0lJNENILCAgICBBVEFfU0ExNTAsICIzMTE0IiB9LAorICAgICB7IEFU QV9TSUkzNTEyLCAgIDB4MDIsIFNJSU1FTUlPLCAwLCAgICAgICAgIEFUQV9TQTE1MCwgIjM1MTIi IH0sCisgICAgIHsgQVRBX1NJSTMxMTIsICAgMHgwMiwgU0lJTUVNSU8sIDAsICAgICAgICAgQVRB X1NBMTUwLCAiMzExMiIgfSwKKyAgICAgeyBBVEFfU0lJMzExMl8xLCAweDAyLCBTSUlNRU1JTywg MCwgICAgICAgICBBVEFfU0ExNTAsICIzMTEyIiB9LAorICAgICB7IEFUQV9TSUkzNTEyLCAgIDB4 MDAsIFNJSU1FTUlPLCBTSUlCVUcsICAgIEFUQV9TQTE1MCwgIjM1MTIiIH0sCisgICAgIHsgQVRB X1NJSTMxMTIsICAgMHgwMCwgU0lJTUVNSU8sIFNJSUJVRywgICAgQVRBX1NBMTUwLCAiMzExMiIg fSwKKyAgICAgeyBBVEFfU0lJMzExMl8xLCAweDAwLCBTSUlNRU1JTywgU0lJQlVHLCAgICBBVEFf U0ExNTAsICIzMTEyIiB9LAorICAgICB7IEFUQV9TSUkzMTI0LCAgIDB4MDAsIFNJSVBSQklPLCBT SUk0Q0gsICAgIEFUQV9TQTMwMCwgIjMxMjQiIH0sCisgICAgIHsgQVRBX1NJSTMxMzIsICAgMHgw MCwgU0lJUFJCSU8sIDAsICAgICAgICAgQVRBX1NBMzAwLCAiMzEzMiIgfSwKKyAgICAgeyBBVEFf U0lJMzEzMl8xLCAweDAwLCBTSUlQUkJJTywgMCwgICAgICAgICBBVEFfU0EzMDAsICIzMTMyIiB9 LAorICAgICB7IEFUQV9TSUkwNjgwLCAgIDB4MDAsIFNJSU1FTUlPLCBTSUlTRVRDTEssIEFUQV9V RE1BNiwgIjY4MCIgfSwKKyAgICAgeyBBVEFfQ01ENjQ5LCAgICAweDAwLCAwLCAgICAgICAgU0lJ SU5UUiwgICBBVEFfVURNQTUsICIoQ01EKSA2NDkiIH0sCisgICAgIHsgQVRBX0NNRDY0OCwgICAg MHgwMCwgMCwgICAgICAgIFNJSUlOVFIsICAgQVRBX1VETUE0LCAiKENNRCkgNjQ4IiB9LAorICAg ICB7IEFUQV9DTUQ2NDYsICAgIDB4MDcsIDAsICAgICAgICAwLCAgICAgICAgIEFUQV9VRE1BMiwg IihDTUQpIDY0NlUyIiB9LAorICAgICB7IEFUQV9DTUQ2NDYsICAgIDB4MDAsIDAsICAgICAgICAw LCAgICAgICAgIEFUQV9XRE1BMiwgIihDTUQpIDY0NiIgfSwKICAgICAgeyAwLCAwLCAwLCAwLCAw LCAwfX07CiAKICAgICBpZiAoIShjdGxyLT5jaGlwID0gYXRhX21hdGNoX2NoaXAoZGV2LCBpZHMp KSkKQEAgLTQ1MTcsNyArNTExNCw3IEBAIGF0YV9zaWlfY2hpcGluaXQoZGV2aWNlX3QgZGV2KQog CWN0bHItPnJfdHlwZTIgPSBTWVNfUkVTX01FTU9SWTsKIAljdGxyLT5yX3JpZDIgPSBQQ0lSX0JB Uig1KTsKIAlpZiAoIShjdGxyLT5yX3JlczIgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwg Y3Rsci0+cl90eXBlMiwKLQkJCQkJCSAgICAmY3Rsci0+cl9yaWQyLCBSRl9BQ1RJVkUpKSkgewor CQkJCQkJICAgICZjdGxyLT5yX3JpZDIsIFJGX0FDVElWRSkpKXsKIAkgICAgaWYgKGN0bHItPmNo aXAtPmNoaXBpZCAhPSBBVEFfU0lJMDY4MCB8fAogCQkJICAgIChwY2lfcmVhZF9jb25maWcoZGV2 LCAweDhhLCAxKSAmIDEpKQogCQlyZXR1cm4gRU5YSU87CkBAIC00NTk0LDkgKzUxOTEsOSBAQCBh dGFfY21kX3N0YXR1cyhkZXZpY2VfdCBkZXYpCiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9 IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgICB1X2ludDhfdCByZWc3MTsKIAotICAgIGlmICgo KHJlZzcxID0gcGNpX3JlYWRfY29uZmlnKGRldmljZV9nZXRfcGFyZW50KGNoLT5kZXYpLCAweDcx LCAxKSkgJgorICAgIGlmICgoKHJlZzcxID0gcGNpX3JlYWRfY29uZmlnKGRldmljZV9nZXRfcGFy ZW50KGRldiksIDB4NzEsIDEpKSAmCiAJIChjaC0+dW5pdCA/IDB4MDggOiAweDA0KSkpIHsKLQlw Y2lfd3JpdGVfY29uZmlnKGRldmljZV9nZXRfcGFyZW50KGNoLT5kZXYpLCAweDcxLAorCXBjaV93 cml0ZV9jb25maWcoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSwgMHg3MSwKIAkJCSByZWc3MSAmIH4o Y2gtPnVuaXQgPyAweDA0IDogMHgwOCksIDEpOwogCXJldHVybiBhdGFfcGNpX3N0YXR1cyhkZXYp OwogICAgIH0KQEAgLTQ2MTAsNyArNTIwNyw3IEBAIGF0YV9jbWRfc2V0bW9kZShkZXZpY2VfdCBk ZXYsIGludCBtb2RlKQogICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZp Y2VfZ2V0X3NvZnRjKGdwYXJlbnQpOwogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZp Y2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOwogICAgIHN0cnVjdCBhdGFfZGV2 aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0gICAgaW50IGRldm5vID0gKGNo LT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOworICAgIGludCBkZXZubyA9IChj aC0+dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKICAgICBpbnQgZXJyb3I7CiAKICAgICBtb2Rl ID0gYXRhX2xpbWl0X21vZGUoZGV2LCBtb2RlLCBjdGxyLT5jaGlwLT5tYXhfZG1hKTsKQEAgLTQ2 MzUsNyArNTIzMiw3IEBAIGF0YV9jbWRfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQog CSAgICB1X2ludDhfdCB1bW9kZSA9IHBjaV9yZWFkX2NvbmZpZyhncGFyZW50LCB1cmVnLCAxKTsK IAogCSAgICB1bW9kZSAmPSB+KGF0YWRldi0+dW5pdCA9PSBBVEFfTUFTVEVSID8gMHgzNSA6IDB4 Y2EpOwotCSAgICB1bW9kZSB8PSB1ZG1hdGltaW5nc1ttb2RlICYgQVRBX01PREVfTUFTS11bQVRB X0RFVihhdGFkZXYtPnVuaXQpXTsKKwkgICAgdW1vZGUgfD0gdWRtYXRpbWluZ3NbbW9kZSAmIEFU QV9NT0RFX01BU0tdW2F0YWRldi0+dW5pdF07CiAJICAgIHBjaV93cml0ZV9jb25maWcoZ3BhcmVu dCwgdXJlZywgdW1vZGUsIDEpOwogCX0KIAllbHNlIGlmIChtb2RlID49IEFUQV9XRE1BMCkgeyAK QEAgLTQ2OTUsMTAgKzUyOTIsMTAgQEAgYXRhX3NpaV9hbGxvY2F0ZShkZXZpY2VfdCBkZXYpCiAJ QVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweDE0OCArICh1bml0MDEgPDwgNykgKyAodW5pdDEwIDw8 IDgpLCgxIDw8IDE2KSk7CiAgICAgfQogCi0gICAgaWYgKChjdGxyLT5jaGlwLT5jZmcyICYgU0lJ QlVHKSAmJiBjaC0+ZG1hKSB7CisgICAgaWYgKGN0bHItPmNoaXAtPmNmZzIgJiBTSUlCVUcpIHsK IAkvKiB3b3JrIGFyb3VuZCBlcnJhdGEgaW4gZWFybHkgY2hpcHMgKi8KLQljaC0+ZG1hLT5ib3Vu ZGFyeSA9IDgxOTI7Ci0JY2gtPmRtYS0+c2Vnc2l6ZSA9IDE1ICogREVWX0JTSVpFOworCWNoLT5k bWEuYm91bmRhcnkgPSA4MTkyOworCWNoLT5kbWEuc2Vnc2l6ZSA9IDE1ICogREVWX0JTSVpFOwog ICAgIH0KIAogICAgIGF0YV9wY2lfaHcoZGV2KTsKQEAgLTQ3MzksOSArNTMzNiw5IEBAIGF0YV9z aWlfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQogICAgIHN0cnVjdCBhdGFfcGNpX2Nv bnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGdwYXJlbnQpOwogICAgIHN0cnVjdCBh dGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikp OwogICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7 Ci0gICAgaW50IHJlZ28gPSAoY2gtPnVuaXQgPDwgNCkgKyAoQVRBX0RFVihhdGFkZXYtPnVuaXQp IDw8IDEpOworICAgIGludCByZWdvID0gKGNoLT51bml0IDw8IDQpICsgKGF0YWRldi0+dW5pdCA8 PCAxKTsKICAgICBpbnQgbXJlZyA9IGNoLT51bml0ID8gMHg4NCA6IDB4ODA7Ci0gICAgaW50IG1h c2sgPSAweDAzIDw8IChBVEFfREVWKGF0YWRldi0+dW5pdCkgPDwgMik7CisgICAgaW50IG1hc2sg PSAweDAzIDw8IChhdGFkZXYtPnVuaXQgPDwgMik7CiAgICAgaW50IG12YWwgPSBwY2lfcmVhZF9j b25maWcoZ3BhcmVudCwgbXJlZywgMSkgJiB+bWFzazsKICAgICBpbnQgZXJyb3I7CiAKQEAgLTQ3 NzEsNyArNTM2OCw3IEBAIGF0YV9zaWlfc2V0bW9kZShkZXZpY2VfdCBkZXYsIGludCBtb2RlKQog CXVfaW50OF90IHVyZWcgPSAweGFjICsgcmVnbzsKIAogCXBjaV93cml0ZV9jb25maWcoZ3BhcmVu dCwgbXJlZywKLQkJCSBtdmFsIHwgKDB4MDMgPDwgKEFUQV9ERVYoYXRhZGV2LT51bml0KSA8PCAy KSksIDEpOworCQkJIG12YWwgfCAoMHgwMyA8PCAoYXRhZGV2LT51bml0IDw8IDIpKSwgMSk7CiAJ cGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCB1cmVnLCAKIAkJCSAocGNpX3JlYWRfY29uZmlnKGdw YXJlbnQsIHVyZWcsIDEpICYgfjB4M2YpIHwKIAkJCSB1ZG1hdGltaW5nc1ttb2RlICYgQVRBX01P REVfTUFTS10sIDEpOwpAQCAtNDc4Miw3ICs1Mzc5LDcgQEAgYXRhX3NpaV9zZXRtb2RlKGRldmlj ZV90IGRldiwgaW50IG1vZGUpCiAJdV9pbnQxNl90IGRtYXRpbWluZ3NbXSA9IHsgMHgyMjA4LCAw eDEwYzIsIDB4MTBjMSB9OwogCiAJcGNpX3dyaXRlX2NvbmZpZyhncGFyZW50LCBtcmVnLAotCQkJ IG12YWwgfCAoMHgwMiA8PCAoQVRBX0RFVihhdGFkZXYtPnVuaXQpIDw8IDIpKSwgMSk7CisJCQkg bXZhbCB8ICgweDAyIDw8IChhdGFkZXYtPnVuaXQgPDwgMikpLCAxKTsKIAlwY2lfd3JpdGVfY29u ZmlnKGdwYXJlbnQsIGRyZWcsIGRtYXRpbWluZ3NbbW9kZSAmIEFUQV9NT0RFX01BU0tdLCAyKTsK IAogICAgIH0KQEAgLTQ3OTEsNyArNTM4OCw3IEBAIGF0YV9zaWlfc2V0bW9kZShkZXZpY2VfdCBk ZXYsIGludCBtb2RlKQogCXVfaW50MTZfdCBwaW90aW1pbmdzW10gPSB7IDB4MzI4YSwgMHgyMjgz LCAweDExMDQsIDB4MTBjMywgMHgxMGMxIH07CiAKIAlwY2lfd3JpdGVfY29uZmlnKGdwYXJlbnQs IG1yZWcsCi0JCQkgbXZhbCB8ICgweDAxIDw8IChBVEFfREVWKGF0YWRldi0+dW5pdCkgPDwgMikp LCAxKTsKKwkJCSBtdmFsIHwgKDB4MDEgPDwgKGF0YWRldi0+dW5pdCA8PCAyKSksIDEpOwogCXBj aV93cml0ZV9jb25maWcoZ3BhcmVudCwgcHJlZywgcGlvdGltaW5nc1ttb2RlICYgQVRBX01PREVf TUFTS10sIDIpOwogICAgIH0KICAgICBhdGFkZXYtPm1vZGUgPSBtb2RlOwpAQCAtNDgwNCwxMyAr NTQwMSwxNCBAQCBzdHJ1Y3QgYXRhX3NpaXByYl9kbWFfcHJkZW50cnkgewogICAgIHVfaW50MzJf dCBjb250cm9sOwogfSBfX3BhY2tlZDsKIAorI2RlZmluZSBBVEFfU0lJUFJCX0RNQV9FTlRSSUVT CQkxMjUKIHN0cnVjdCBhdGFfc2lpcHJiX2F0YV9jb21tYW5kIHsKLSAgICBzdHJ1Y3QgYXRhX3Np aXByYl9kbWFfcHJkZW50cnkgcHJkWzEyNl07CisgICAgc3RydWN0IGF0YV9zaWlwcmJfZG1hX3By ZGVudHJ5IHByZFtBVEFfU0lJUFJCX0RNQV9FTlRSSUVTXTsKIH0gX19wYWNrZWQ7CiAKIHN0cnVj dCBhdGFfc2lpcHJiX2F0YXBpX2NvbW1hbmQgewogICAgIHVfaW50OF90IGNjYlsxNl07Ci0gICAg c3RydWN0IGF0YV9zaWlwcmJfZG1hX3ByZGVudHJ5IHByZFsxMjVdOworICAgIHN0cnVjdCBhdGFf c2lpcHJiX2RtYV9wcmRlbnRyeSBwcmRbQVRBX1NJSVBSQl9ETUFfRU5UUklFU107CiB9IF9fcGFj a2VkOwogCiBzdHJ1Y3QgYXRhX3NpaXByYl9jb21tYW5kIHsKQEAgLTQ4NDEsMTAgKzU0MzksMTQg QEAgYXRhX3NpaXByYl9hbGxvY2F0ZShkZXZpY2VfdCBkZXYpCiAgICAgY2gtPnJfaW9bQVRBX1NB Q1RJVkVdLnJlcyA9IGN0bHItPnJfcmVzMjsKICAgICBjaC0+cl9pb1tBVEFfU0FDVElWRV0ub2Zm c2V0ID0gMHgxZjBjICsgb2Zmc2V0OwogICAgCisgICAgY2gtPmh3LnN0YXR1cyA9IGF0YV9zaWlw cmJfc3RhdHVzOwogICAgIGNoLT5ody5iZWdpbl90cmFuc2FjdGlvbiA9IGF0YV9zaWlwcmJfYmVn aW5fdHJhbnNhY3Rpb247CiAgICAgY2gtPmh3LmVuZF90cmFuc2FjdGlvbiA9IGF0YV9zaWlwcmJf ZW5kX3RyYW5zYWN0aW9uOwotICAgIGNoLT5ody5zdGF0dXMgPSBhdGFfc2lpcHJiX3N0YXR1czsK ICAgICBjaC0+aHcuY29tbWFuZCA9IE5VTEw7CS8qIG5vdCB1c2VkIGhlcmUgKi8KKyAgICBjaC0+ aHcuc29mdHJlc2V0ID0gYXRhX3NpaXByYl9zb2Z0cmVzZXQ7CisgICAgY2gtPmh3LnBtX3JlYWQg PSBhdGFfc2lpcHJiX3BtX3JlYWQ7CisgICAgY2gtPmh3LnBtX3dyaXRlID0gYXRhX3NpaXByYl9w bV93cml0ZTsKKyAgICAgCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTQ4NzUsMTIgKzU0NzcsMTEg QEAgc3RhdGljIGludAogYXRhX3NpaXByYl9iZWdpbl90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3Jl cXVlc3QgKnJlcXVlc3QpCiB7CiAgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3Rscj1k ZXZpY2VfZ2V0X3NvZnRjKEdSQU5EUEFSRU5UKHJlcXVlc3QtPmRldikpOwotICAgIHN0cnVjdCBh dGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KHJlcXVl c3QtPmRldikpOworICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRj KHJlcXVlc3QtPnBhcmVudCk7CiAgICAgc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCAqcHJiOwog ICAgIHN0cnVjdCBhdGFfc2lpcHJiX2RtYV9wcmRlbnRyeSAqcHJkOwogICAgIGludCBvZmZzZXQg PSBjaC0+dW5pdCAqIDB4MjAwMDsKICAgICB1X2ludDY0X3QgcHJiX2J1czsKLSAgICBpbnQgdGFn ID0gMCwgZHVtbXk7CiAKICAgICAvKiBTT1MgWFhYICovCiAgICAgaWYgKHJlcXVlc3QtPnUuYXRh LmNvbW1hbmQgPT0gQVRBX0RFVklDRV9SRVNFVCkgewpAQCAtNDg4OCwxMiArNTQ4OSw5IEBAIGF0 YV9zaWlwcmJfYmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0IGF0YV8KICAgICAgICAgcmV0dXJuIEFU QV9PUF9GSU5JU0hFRDsKICAgICB9CiAKLSAgICAvKiBjaGVjayBmb3IgNDggYml0IGFjY2VzcyBh bmQgY29udmVydCBpZiBuZWVkZWQgKi8KLSAgICBhdGFfbW9kaWZ5X2lmXzQ4Yml0KHJlcXVlc3Qp OwotCiAgICAgLyogZ2V0IGEgcGllY2Ugb2YgdGhlIHdvcmtzcGFjZSBmb3IgdGhpcyByZXF1ZXN0 ICovCiAgICAgcHJiID0gKHN0cnVjdCBhdGFfc2lpcHJiX2NvbW1hbmQgKikKLQkoY2gtPmRtYS0+ d29yayArIChzaXplb2Yoc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCkgKiB0YWcpKTsKKwkoY2gt PmRtYS53b3JrICsgKHNpemVvZihzdHJ1Y3QgYXRhX3NpaXByYl9jb21tYW5kKSAqIHJlcXVlc3Qt PnRhZykpOwogCiAgICAgLyogc2V0IGJhc2ljIHByZCBvcHRpb25zIGF0YS9hdGFwaSBldGMgZXRj ICovCiAgICAgYnplcm8ocHJiLCBzaXplb2Yoc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCkpOwpA QCAtNDkyNSw4ICs1NTIzLDcgQEAgYXRhX3NpaXByYl9iZWdpbl90cmFuc2FjdGlvbihzdHJ1Y3Qg YXRhXwogCiAgICAgLyogaWYgcmVxdWVzdCBtb3ZlcyBkYXRhIHNldHVwIGFuZCBsb2FkIFNHIGxp c3QgKi8KICAgICBpZiAocmVxdWVzdC0+ZmxhZ3MgJiAoQVRBX1JfUkVBRCB8IEFUQV9SX1dSSVRF KSkgewotCWlmIChjaC0+ZG1hLT5sb2FkKGNoLT5kZXYsIHJlcXVlc3QtPmRhdGEsIHJlcXVlc3Qt PmJ5dGVjb3VudCwKLQkJCSAgcmVxdWVzdC0+ZmxhZ3MgJiBBVEFfUl9SRUFELCBwcmQsICZkdW1t eSkpIHsKKwlpZiAoY2gtPmRtYS5sb2FkKHJlcXVlc3QsIHByZCwgTlVMTCkpIHsKIAkgICAgZGV2 aWNlX3ByaW50ZihyZXF1ZXN0LT5kZXYsICJzZXR0aW5nIHVwIERNQSBmYWlsZWRcbiIpOwogCSAg ICByZXF1ZXN0LT5yZXN1bHQgPSBFSU87CiAJICAgIHJldHVybiBBVEFfT1BfRklOSVNIRUQ7CkBA IC00OTM0LDExICs1NTMxLDEyIEBAIGF0YV9zaWlwcmJfYmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0 IGF0YV8KICAgICB9CiAKICAgICAvKiBhY3RpdmF0ZSB0aGUgcHJiICovCi0gICAgcHJiX2J1cyA9 IGNoLT5kbWEtPndvcmtfYnVzICsgKHNpemVvZihzdHJ1Y3QgYXRhX3NpaXByYl9jb21tYW5kKSAq IHRhZyk7CisgICAgcHJiX2J1cyA9IGNoLT5kbWEud29ya19idXMgKworCSAgICAgIChzaXplb2Yo c3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCkgKiByZXF1ZXN0LT50YWcpOwogICAgIEFUQV9PVVRM KGN0bHItPnJfcmVzMiwKLQkgICAgIDB4MWMwMCArIG9mZnNldCArICh0YWcgKiBzaXplb2YodV9p bnQ2NF90KSksIHByYl9idXMpOworCSAgICAgMHgxYzAwICsgb2Zmc2V0ICsgKHJlcXVlc3QtPnRh ZyAqIHNpemVvZih1X2ludDY0X3QpKSwgcHJiX2J1cyk7CiAgICAgQVRBX09VVEwoY3Rsci0+cl9y ZXMyLAotCSAgICAgMHgxYzA0ICsgb2Zmc2V0ICsgKHRhZyAqIHNpemVvZih1X2ludDY0X3QpKSwg cHJiX2J1cz4+MzIpOworCSAgICAgMHgxYzA0ICsgb2Zmc2V0ICsgKHJlcXVlc3QtPnRhZyAqIHNp emVvZih1X2ludDY0X3QpKSwgcHJiX2J1cz4+MzIpOwogCiAgICAgLyogc3RhcnQgdGhlIHRpbWVv dXQgKi8KICAgICBjYWxsb3V0X3Jlc2V0KCZyZXF1ZXN0LT5jYWxsb3V0LCByZXF1ZXN0LT50aW1l b3V0ICogaHosCkBAIC00OTUwLDE2ICs1NTQ4LDE2IEBAIHN0YXRpYyBpbnQKIGF0YV9zaWlwcmJf ZW5kX3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCkKIHsKICAgICBzdHJ1 Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyPWRldmljZV9nZXRfc29mdGMoR1JBTkRQQVJFTlQo cmVxdWVzdC0+ZGV2KSk7Ci0gICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRf c29mdGMoZGV2aWNlX2dldF9wYXJlbnQocmVxdWVzdC0+ZGV2KSk7CisgICAgc3RydWN0IGF0YV9j aGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+cGFyZW50KTsKICAgICBzdHJ1 Y3QgYXRhX3NpaXByYl9jb21tYW5kICpwcmI7CiAgICAgaW50IG9mZnNldCA9IGNoLT51bml0ICog MHgyMDAwOwotICAgIGludCBlcnJvciwgdGltZW91dCwgdGFnID0gMDsKKyAgICBpbnQgZXJyb3Is IHRpbWVvdXQ7CiAKICAgICAvKiBraWxsIHRoZSB0aW1lb3V0ICovCiAgICAgY2FsbG91dF9zdG9w KCZyZXF1ZXN0LT5jYWxsb3V0KTsKICAgICAKICAgICBwcmIgPSAoc3RydWN0IGF0YV9zaWlwcmJf Y29tbWFuZCAqKQotCSgodV9pbnQ4X3QgKilybWFuX2dldF92aXJ0dWFsKGN0bHItPnJfcmVzMikg KyAodGFnIDw8IDcpICsgb2Zmc2V0KTsKKwkoKHVfaW50OF90ICopcm1hbl9nZXRfdmlydHVhbChj dGxyLT5yX3JlczIpKyhyZXF1ZXN0LT50YWcgPDwgNykrb2Zmc2V0KTsKIAogICAgIC8qIGFueSBj b250cm9sbGVyIGVycm9ycyBmbGFnZ2VkID8gKi8KICAgICBpZiAoKGVycm9yID0gQVRBX0lOTChj dGxyLT5yX3JlczIsIDB4MTAyNCArIG9mZnNldCkpKSB7CkBAIC00OTkzLDYgKzU1OTEsMjEgQEAg YXRhX3NpaXByYl9lbmRfdHJhbnNhY3Rpb24oc3RydWN0IGF0YV9yZQogCX0KICAgICB9CiAKKyAg ICAvKiBvbiBjb250cm9sIGNvbW1hbmRzIHJlYWQgYmFjayByZWdpc3RlcnMgdG8gdGhlIHJlcXVl c3Qgc3RydWN0ICovCisgICAgaWYgKHJlcXVlc3QtPmZsYWdzICYgQVRBX1JfQ09OVFJPTCkgewor ICAgICAgICBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1 ZXN0LT5kZXYpOworCisJcmVxdWVzdC0+dS5hdGEuY291bnQgPSBwcmItPmZpc1sxMl0gfCAoKHVf aW50MTZfdClwcmItPmZpc1sxM10gPDwgOCk7CisJcmVxdWVzdC0+dS5hdGEubGJhID0gcHJiLT5m aXNbNF0gfCAoKHVfaW50NjRfdClwcmItPmZpc1s1XSA8PCA4KSB8CisJCQkgICAgICgodV9pbnQ2 NF90KXByYi0+ZmlzWzZdIDw8IDE2KTsKKwlpZiAoYXRhZGV2LT5mbGFncyAmIEFUQV9EXzQ4QklU X0FDVElWRSkKKwkgICAgcmVxdWVzdC0+dS5hdGEubGJhIHw9ICgodV9pbnQ2NF90KXByYi0+Zmlz WzhdIDw8IDI0KSB8CisJCQkJICAoKHVfaW50NjRfdClwcmItPmZpc1s5XSA8PCAzMikgfAorCQkJ CSAgKCh1X2ludDY0X3QpcHJiLT5maXNbMTBdIDw8IDQwKTsKKwllbHNlCisJICAgIHJlcXVlc3Qt PnUuYXRhLmxiYSB8PSAoKHVfaW50NjRfdCkocHJiLT5maXNbN10gJiAweDBmKSA8PCAyNCk7Cisg ICAgfQorCiAgICAgLyogdXBkYXRlIHByb2dyZXNzICovCiAgICAgaWYgKCEocmVxdWVzdC0+c3Rh dHVzICYgQVRBX1NfRVJST1IpICYmICEocmVxdWVzdC0+ZmxhZ3MgJiBBVEFfUl9USU1FT1VUKSkg ewogCWlmIChyZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1JFQUQpCkBAIC01MDAyLDIxICs1NjE1LDEy NiBAQCBhdGFfc2lpcHJiX2VuZF90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlCiAgICAgfQogCiAg ICAgLyogcmVsZWFzZSBTRyBsaXN0IGV0YyAqLwotICAgIGNoLT5kbWEtPnVubG9hZChjaC0+ZGV2 KTsKKyAgICBjaC0+ZG1hLnVubG9hZChyZXF1ZXN0KTsKIAogICAgIHJldHVybiBBVEFfT1BfRklO SVNIRUQ7CiB9CiAKK3N0YXRpYyBpbnQKK2F0YV9zaWlwcmJfaXNzdWVfY21kKGRldmljZV90IGRl dikKK3sKKyAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9z b2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNo ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworICAgIHVfaW50NjRfdCBwcmJfYnVzID0gY2gtPmRt YS53b3JrX2J1czsKKyAgICB1X2ludDMyX3Qgc3RhdHVzOworICAgIGludCBvZmZzZXQgPSBjaC0+ dW5pdCAqIDB4MjAwMDsKKyAgICBpbnQgdGltZW91dDsKKworICAgIC8qIGlzc3VlIGNvbW1hbmQg dG8gY2hpcCAqLworICAgIEFUQV9PVVRMKGN0bHItPnJfcmVzMiwgMHgxYzAwICsgb2Zmc2V0LCBw cmJfYnVzKTsKKyAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIDB4MWMwNCArIG9mZnNldCwgcHJi X2J1cyA+PiAzMik7CisKKyAgICAvKiBwb2xsIGZvciBjb21tYW5kIGZpbmlzaGVkICovCisgICAg Zm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDEwMDAwOyB0aW1lb3V0KyspIHsKKyAgICAgICAg REVMQVkoMTAwMCk7CisgICAgICAgIGlmICgoc3RhdHVzID0gQVRBX0lOTChjdGxyLT5yX3JlczIs IDB4MTAwOCArIG9mZnNldCkpICYgMHgwMDAxMDAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAg IH0KKyAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIDB4MTAwOCArIG9mZnNldCwgMHgwMDAxMDAw MCk7CisKKyAgICBpZiAodGltZW91dCA+PSAxMDAwKQorCXJldHVybiBFSU87CisKKyAgICBpZiAo Ym9vdHZlcmJvc2UpCisJZGV2aWNlX3ByaW50ZihkZXYsICJzaWlwcmJfaXNzdWVfY21kIHRpbWU9 JWRtcyBzdGF0dXM9JTA4eFxuIiwKKwkJICAgICAgdGltZW91dCwgc3RhdHVzKTsKKyAgICByZXR1 cm4gMDsKK30KKworc3RhdGljIGludAorYXRhX3NpaXByYl9wbV9yZWFkKGRldmljZV90IGRldiwg aW50IHBvcnQsIGludCByZWcsIHVfaW50MzJfdCAqcmVzdWx0KQoreworICAgIHN0cnVjdCBhdGFf cGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50 KGRldikpOworICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRl dik7CisgICAgc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCAqcHJiID0gKHN0cnVjdCBhdGFfc2lp cHJiX2NvbW1hbmQgKiljaC0+ZG1hLndvcms7CisgICAgaW50IG9mZnNldCA9IGNoLT51bml0ICog MHgyMDAwOworCisgICAgYnplcm8ocHJiLCBzaXplb2Yoc3RydWN0IGF0YV9zaWlwcmJfY29tbWFu ZCkpOworICAgIHByYi0+ZmlzWzBdID0gMHgyNzsJLyogaG9zdCB0byBkZXZpY2UgKi8KKyAgICBw cmItPmZpc1sxXSA9IDB4OGY7CS8qIGNvbW1hbmQgRklTIHRvIFBNIHBvcnQgKi8KKyAgICBwcmIt PmZpc1syXSA9IEFUQV9SRUFEX1BNOworICAgIHByYi0+ZmlzWzNdID0gcmVnOworICAgIHByYi0+ ZmlzWzddID0gcG9ydDsKKyAgICBpZiAoYXRhX3NpaXByYl9pc3N1ZV9jbWQoZGV2KSkgeworCWRl dmljZV9wcmludGYoZGV2LCAiZXJyb3IgcmVhZGluZyBQTSBwb3J0XG4iKTsKKwlyZXR1cm4gRUlP OworICAgIH0KKyAgICBwcmIgPSAoc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCAqKQorCSgodV9p bnQ4X3QgKilybWFuX2dldF92aXJ0dWFsKGN0bHItPnJfcmVzMikgKyBvZmZzZXQpOworICAgICpy ZXN1bHQgPSBwcmItPmZpc1sxMl18KHByYi0+ZmlzWzRdPDw4KXwocHJiLT5maXNbNV08PDE2KXwo cHJiLT5maXNbNl08PDI0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYXRhX3Np aXByYl9wbV93cml0ZShkZXZpY2VfdCBkZXYsIGludCBwb3J0LCBpbnQgcmVnLCB1X2ludDMyX3Qg dmFsdWUpCit7CisgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9n ZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CisgICAgc3RydWN0IGF0YV9jaGFubmVs ICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKyAgICBzdHJ1Y3QgYXRhX3NpaXByYl9jb21t YW5kICpwcmIgPSAoc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCAqKWNoLT5kbWEud29yazsKKyAg ICBpbnQgb2Zmc2V0ID0gY2gtPnVuaXQgKiAweDIwMDA7CisKKyAgICBiemVybyhwcmIsIHNpemVv ZihzdHJ1Y3QgYXRhX3NpaXByYl9jb21tYW5kKSk7CisgICAgcHJiLT5maXNbMF0gPSAweDI3Owkv KiBob3N0IHRvIGRldmljZSAqLworICAgIHByYi0+ZmlzWzFdID0gMHg4ZjsJLyogY29tbWFuZCBG SVMgdG8gUE0gcG9ydCAqLworICAgIHByYi0+ZmlzWzJdID0gQVRBX1dSSVRFX1BNOworICAgIHBy Yi0+ZmlzWzNdID0gcmVnOworICAgIHByYi0+ZmlzWzddID0gcG9ydDsKKyAgICBwcmItPmZpc1sx Ml0gPSB2YWx1ZSAmIDB4ZmY7CisgICAgcHJiLT5maXNbNF0gPSAodmFsdWUgPj4gOCkgJiAweGZm OzsKKyAgICBwcmItPmZpc1s1XSA9ICh2YWx1ZSA+PiAxNikgJiAweGZmOzsKKyAgICBwcmItPmZp c1s2XSA9ICh2YWx1ZSA+PiAyNCkgJiAweGZmOzsKKyAgICBpZiAoYXRhX3NpaXByYl9pc3N1ZV9j bWQoZGV2KSkgeworCWRldmljZV9wcmludGYoZGV2LCAiZXJyb3Igd3JpdGluZyBQTSBwb3J0XG4i KTsKKwlyZXR1cm4gQVRBX0VfQUJPUlQ7CisgICAgfQorICAgIHByYiA9IChzdHJ1Y3QgYXRhX3Np aXByYl9jb21tYW5kICopCisJKCh1X2ludDhfdCAqKXJtYW5fZ2V0X3ZpcnR1YWwoY3Rsci0+cl9y ZXMyKSArIG9mZnNldCk7CisgICAgcmV0dXJuIHByYi0+ZmlzWzNdOworfQorCitzdGF0aWMgdV9p bnQzMl90CithdGFfc2lpcHJiX3NvZnRyZXNldChkZXZpY2VfdCBkZXYsIGludCBwb3J0KQorewor ICAgIHN0cnVjdCBhdGFfcGNpX2NvbnRyb2xsZXIgKmN0bHIgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl dmljZV9nZXRfcGFyZW50KGRldikpOworICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZp Y2VfZ2V0X3NvZnRjKGRldik7CisgICAgc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCAqcHJiID0g KHN0cnVjdCBhdGFfc2lpcHJiX2NvbW1hbmQgKiljaC0+ZG1hLndvcms7CisgICAgaW50IG9mZnNl dCA9IGNoLT51bml0ICogMHgyMDAwOworCisgICAgLyogc2V0dXAgdGhlIHdvcmtzcGFjZSBmb3Ig YSBzb2Z0IHJlc2V0IGNvbW1hbmQgKi8KKyAgICBiemVybyhwcmIsIHNpemVvZihzdHJ1Y3QgYXRh X3NpaXByYl9jb21tYW5kKSk7CisgICAgcHJiLT5jb250cm9sID0gaHRvbGUxNigweDAwODApOwor ICAgIHByYi0+ZmlzWzFdID0gcG9ydCAmIDB4MGY7CisKKyAgICAvKiBpc3N1ZSBzb2Z0IHJlc2V0 ICovCisgICAgaWYgKGF0YV9zaWlwcmJfaXNzdWVfY21kKGRldikpCisJcmV0dXJuIC0xOworCisg ICAgYXRhX3VkZWxheSgxNTAwMDApOworCisgICAgLyogcmV0dXJuIHBvc3NpYmxlIHNpZ25hdHVy ZSAqLworICAgIHByYiA9IChzdHJ1Y3QgYXRhX3NpaXByYl9jb21tYW5kICopCisJKCh1X2ludDhf dCAqKXJtYW5fZ2V0X3ZpcnR1YWwoY3Rsci0+cl9yZXMyKSArIG9mZnNldCk7CisgICAgcmV0dXJu IHByYi0+ZmlzWzEyXXwocHJiLT5maXNbNF08PDgpfChwcmItPmZpc1s1XTw8MTYpfChwcmItPmZp c1s2XTw8MjQpOworfQorCiBzdGF0aWMgdm9pZAogYXRhX3NpaXByYl9yZXNldChkZXZpY2VfdCBk ZXYpCiB7CiAgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9IGRldmljZV9nZXRf c29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpj aCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgICBpbnQgb2Zmc2V0ID0gY2gtPnVuaXQgKiAw eDIwMDA7Ci0gICAgc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCAqcHJiOwotICAgIHVfaW50NjRf dCBwcmJfYnVzOwogICAgIHVfaW50MzJfdCBzdGF0dXMsIHNpZ25hdHVyZTsKLSAgICBpbnQgdGlt ZW91dCwgdGFnID0gMDsKKyAgICBpbnQgdGltZW91dDsKIAogICAgIC8qIHJlc2V0IGNoYW5uZWwg SFcgKi8KICAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsIDB4MTAwMCArIG9mZnNldCwgMHgwMDAw MDAwMSk7CkBAIC01MDMzLDYyICs1NzUxLDMzIEBAIGF0YV9zaWlwcmJfcmVzZXQoZGV2aWNlX3Qg ZGV2KQogCiAgICAgaWYgKGJvb3R2ZXJib3NlKSB7CiAJaWYgKHRpbWVvdXQgPj0gMTAwMCkKLQkg ICAgZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiY2hhbm5lbCBIVyByZXNldCB0aW1lb3V0XG4iKTsK KwkgICAgZGV2aWNlX3ByaW50ZihkZXYsICJjaGFubmVsIEhXIHJlc2V0IHRpbWVvdXRcbiIpOwog CWVsc2UKLQkgICAgZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAiY2hhbm5lbCBIVyByZXNldCB0aW1l PSVkbXNcbiIsIHRpbWVvdXQpOworCSAgICBkZXZpY2VfcHJpbnRmKGRldiwgImNoYW5uZWwgSFcg cmVzZXQgdGltZT0lZG1zXG4iLCB0aW1lb3V0KTsKICAgICB9CiAKICAgICAvKiByZXNldCBwaHkg Ki8KICAgICBpZiAoIWF0YV9zYXRhX3BoeV9yZXNldChkZXYpKSB7CiAJaWYgKGJvb3R2ZXJib3Nl KQotCSAgICBkZXZpY2VfcHJpbnRmKGNoLT5kZXYsICJwaHkgcmVzZXQgZm91bmQgbm8gZGV2aWNl XG4iKTsKKwkgICAgZGV2aWNlX3ByaW50ZihkZXYsICJwaHkgcmVzZXQgZm91bmQgbm8gZGV2aWNl XG4iKTsKIAljaC0+ZGV2aWNlcyA9IDA7CiAJZ290byBmaW5pc2g7CiAgICAgfQogCi0gICAgLyog Z2V0IGEgcGllY2Ugb2YgdGhlIHdvcmtzcGFjZSBmb3IgYSBzb2Z0IHJlc2V0IHJlcXVlc3QgKi8K LSAgICBwcmIgPSAoc3RydWN0IGF0YV9zaWlwcmJfY29tbWFuZCAqKQotCShjaC0+ZG1hLT53b3Jr ICsgKHNpemVvZihzdHJ1Y3QgYXRhX3NpaXByYl9jb21tYW5kKSAqIHRhZykpOwotICAgIGJ6ZXJv KHByYiwgc2l6ZW9mKHN0cnVjdCBhdGFfc2lpcHJiX2NvbW1hbmQpKTsKLSAgICBwcmItPmNvbnRy b2wgPSBodG9sZTE2KDB4MDA4MCk7Ci0KLSAgICAvKiBhY3RpdmF0ZSB0aGUgc29mdCByZXNldCBw cmIgKi8KLSAgICBwcmJfYnVzID0gY2gtPmRtYS0+d29ya19idXMgKyAoc2l6ZW9mKHN0cnVjdCBh dGFfc2lpcHJiX2NvbW1hbmQpICogdGFnKTsKLSAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsCi0J ICAgICAweDFjMDAgKyBvZmZzZXQgKyAodGFnICogc2l6ZW9mKHVfaW50NjRfdCkpLCBwcmJfYnVz KTsKLSAgICBBVEFfT1VUTChjdGxyLT5yX3JlczIsCi0JICAgICAweDFjMDQgKyBvZmZzZXQgKyAo dGFnICogc2l6ZW9mKHVfaW50NjRfdCkpLCBwcmJfYnVzPj4zMik7Ci0KLSAgICAvKiBwb2xsIGZv ciBjb21tYW5kIGZpbmlzaGVkICovCi0gICAgZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDEw MDAwOyB0aW1lb3V0KyspIHsKLSAgICAgICAgREVMQVkoMTAwMCk7Ci0gICAgICAgIGlmICgoc3Rh dHVzID0gQVRBX0lOTChjdGxyLT5yX3JlczIsIDB4MTAwOCArIG9mZnNldCkpICYgMHgwMDAxMDAw MCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAodGltZW91dCA+PSAxMDAwKSB7 Ci0JZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAicmVzZXQgdGltZW91dCAtIG5vIGRldmljZSBmb3Vu ZFxuIik7Ci0JY2gtPmRldmljZXMgPSAwOwotCWdvdG8gZmluaXNoOwotICAgIH0KKyAgICAvKiBp c3N1ZSBzb2Z0IHJlc2V0ICovCisgICAgc2lnbmF0dXJlID0gYXRhX3NpaXByYl9zb2Z0cmVzZXQo ZGV2LCBBVEFfUE0pOwogICAgIGlmIChib290dmVyYm9zZSkKLQlkZXZpY2VfcHJpbnRmKGNoLT5k ZXYsICJzb2Z0IHJlc2V0IGV4ZWMgdGltZT0lZG1zIHN0YXR1cz0lMDh4XG4iLAotCQkJdGltZW91 dCwgc3RhdHVzKTsKKwlkZXZpY2VfcHJpbnRmKGRldiwgIlNJR05BVFVSRT0lMDh4XG4iLCBzaWdu YXR1cmUpOwogCi0gICAgLyogZmluZCBvdXQgd2hhdHMgdGhlcmUgKi8KLSAgICBwcmIgPSAoc3Ry dWN0IGF0YV9zaWlwcmJfY29tbWFuZCAqKQotCSgodV9pbnQ4X3QgKilybWFuX2dldF92aXJ0dWFs KGN0bHItPnJfcmVzMikgKyAodGFnIDw8IDcpICsgb2Zmc2V0KTsKLSAgICBzaWduYXR1cmUgPQot CXByYi0+ZmlzWzEyXXwocHJiLT5maXNbNF08PDgpfChwcmItPmZpc1s1XTw8MTYpfChwcmItPmZp c1s2XTw8MjQpOwotICAgIGlmIChib290dmVyYm9zZSkKLQlkZXZpY2VfcHJpbnRmKGNoLT5kZXYs ICJTSUdOQVRVUkU9JTA4eFxuIiwgc2lnbmF0dXJlKTsKKyAgICAvKiBmaWd1cmUgb3V0IHdoYXRz IHRoZXJlICovCiAgICAgc3dpdGNoIChzaWduYXR1cmUpIHsKICAgICBjYXNlIDB4MDAwMDAxMDE6 CiAJY2gtPmRldmljZXMgPSBBVEFfQVRBX01BU1RFUjsKIAlicmVhazsKICAgICBjYXNlIDB4OTY2 OTAxMDE6CiAJY2gtPmRldmljZXMgPSBBVEFfUE9SVE1VTFRJUExJRVI7Ci0JZGV2aWNlX3ByaW50 ZihjaC0+ZGV2LCAiUG9ydG11bHRpcGxpZXJzIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKLQljaC0+ ZGV2aWNlcyA9IDA7CisJQVRBX09VVEwoY3Rsci0+cl9yZXMyLCAweDEwMDAgKyBvZmZzZXQsIDB4 MjAwMCk7IC8qIGVuYWJsZSBQTSBzdXBwb3J0ICovCisJYXRhX3BtX2lkZW50aWZ5KGRldik7CiAJ YnJlYWs7CiAgICAgY2FzZSAweGViMTQwMTAxOgogCWNoLT5kZXZpY2VzID0gQVRBX0FUQVBJX01B U1RFUjsKQEAgLTUwOTcsOCArNTc4Niw3IEBAIGF0YV9zaWlwcmJfcmVzZXQoZGV2aWNlX3QgZGV2 KQogCWNoLT5kZXZpY2VzID0gMDsKICAgICB9CiAgICAgaWYgKGJvb3R2ZXJib3NlKQotICAgICAg ICBkZXZpY2VfcHJpbnRmKGRldiwgInNpaXByYl9yZXNldCBkZXZpY2VzPTB4JWJcbiIsIGNoLT5k ZXZpY2VzLAotICAgICAgICAgICAgICAgICAgICAgICJcMjBcNEFUQVBJX1NMQVZFXDNBVEFQSV9N QVNURVJcMkFUQV9TTEFWRVwxQVRBX01BU1RFUiIpOworICAgICAgICBkZXZpY2VfcHJpbnRmKGRl diwgInNpaXByYl9yZXNldCBkZXZpY2VzPSUwOHhcbiIsIGNoLT5kZXZpY2VzKTsKIAogZmluaXNo OgogICAgIC8qIGNsZWFyIGludGVycnVwdChzKSAqLwpAQCAtNTEyOSw3ICs1ODE3LDcgQEAgYXRh X3NpaXByYl9kbWFzZXRwcmQodm9pZCAqeHNjLCBidXNfZG1hXwogCXByZFtpXS5jb3VudCA9IGh0 b2xlMzIoc2Vnc1tpXS5kc19sZW4pOwogICAgIH0KICAgICBwcmRbaSAtIDFdLmNvbnRyb2wgPSBo dG9sZTMyKEFUQV9ETUFfRU9UKTsKLSAgICBLQVNTRVJUKG5zZWdzIDw9IEFUQV9ETUFfRU5UUklF UywgKCJ0b28gbWFueSBETUEgc2VnbWVudCBlbnRyaWVzXG4iKSk7CisgICAgS0FTU0VSVChuc2Vn cyA8PSBBVEFfU0lJUFJCX0RNQV9FTlRSSUVTLCgidG9vIG1hbnkgRE1BIHNlZ21lbnQgZW50cmll c1xuIikpOwogICAgIGFyZ3MtPm5zZWdzID0gbnNlZ3M7CiB9CiAKQEAgLTUxMzksMTEgKzU4Mjcs OSBAQCBhdGFfc2lpcHJiX2RtYWluaXQoZGV2aWNlX3QgZGV2KQogICAgIHN0cnVjdCBhdGFfY2hh bm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CiAKICAgICBhdGFfZG1haW5pdChkZXYp OwotICAgIGlmIChjaC0+ZG1hKSB7Ci0JLyogbm90ZSBzdGFydCBhbmQgc3RvcCBhcmUgbm90IHVz ZWQgaGVyZSAqLwotCWNoLT5kbWEtPnNldHByZCA9IGF0YV9zaWlwcmJfZG1hc2V0cHJkOwotCWNo LT5kbWEtPm1heF9hZGRyZXNzID0gQlVTX1NQQUNFX01BWEFERFI7Ci0gICAgfQorICAgIC8qIG5v dGUgc3RhcnQgYW5kIHN0b3AgYXJlIG5vdCB1c2VkIGhlcmUgKi8KKyAgICBjaC0+ZG1hLnNldHBy ZCA9IGF0YV9zaWlwcmJfZG1hc2V0cHJkOworICAgIGNoLT5kbWEubWF4X2FkZHJlc3MgPSBCVVNf U1BBQ0VfTUFYQUREUjsKIH0KIAogCkBAIC01MzE0LDcgKzYwMDAsNyBAQCBhdGFfc2lzX3NldG1v ZGUoZGV2aWNlX3QgZGV2LCBpbnQgbW9kZSkKICAgICBzdHJ1Y3QgYXRhX3BjaV9jb250cm9sbGVy ICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhncGFyZW50KTsKICAgICBzdHJ1Y3QgYXRhX2NoYW5u ZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAgICBz dHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwotICAgIGlu dCBkZXZubyA9IChjaC0+dW5pdCA8PCAxKSArIEFUQV9ERVYoYXRhZGV2LT51bml0KTsKKyAgICBp bnQgZGV2bm8gPSAoY2gtPnVuaXQgPDwgMSkgKyBhdGFkZXYtPnVuaXQ7CiAgICAgaW50IGVycm9y OwogCiAgICAgbW9kZSA9IGF0YV9saW1pdF9tb2RlKGRldiwgbW9kZSwgY3Rsci0+Y2hpcC0+bWF4 X2RtYSk7CkBAIC01NjM5LDcgKzYzMjUsNyBAQCBhdGFfdmlhX2ZhbWlseV9zZXRtb2RlKGRldmlj ZV90IGRldiwgaW50CiAJeyAweGY3LCAweGY2LCAweGY0LCAweGYyLCAweGYxLCAweGYwLCAweDAw IH0sICAgLyogVklBIEFUQTEwMCAqLwogCXsgMHhmNywgMHhmNywgMHhmNiwgMHhmNCwgMHhmMiwg MHhmMSwgMHhmMCB9LCAgIC8qIFZJQSBBVEExMzMgKi8KIAl7IDB4YzIsIDB4YzEsIDB4YzAsIDB4 YzQsIDB4YzUsIDB4YzYsIDB4YzcgfX07ICAvKiBBTUQvblZJRElBICovCi0gICAgaW50IGRldm5v ID0gKGNoLT51bml0IDw8IDEpICsgQVRBX0RFVihhdGFkZXYtPnVuaXQpOworICAgIGludCBkZXZu byA9IChjaC0+dW5pdCA8PCAxKSArIGF0YWRldi0+dW5pdDsKICAgICBpbnQgcmVnID0gMHg1MyAt IGRldm5vOwogICAgIGludCBlcnJvcjsKIApAQCAtNTc5Myw3ICs2NDc5LDcgQEAgYXRhX3Nlcmlh bGl6ZShkZXZpY2VfdCBkZXYsIGludCBmbGFncykKIAkJaWYgKChjaCA9IGN0bHItPmludGVycnVw dFtzZXJpYWwtPnJlc3RhcnRfY2hdLmFyZ3VtZW50KSkgewogCQkgICAgc2VyaWFsLT5yZXN0YXJ0 X2NoID0gLTE7CiAJCSAgICBtdHhfdW5sb2NrKCZzZXJpYWwtPmxvY2tlZF9tdHgpOwotCQkgICAg YXRhX3N0YXJ0KGNoLT5kZXYpOworCQkgICAgYXRhX3N0YXJ0KGRldik7CiAJCSAgICByZXR1cm4g LTE7CiAJCX0KIAkgICAgfQotLS0gc3JjL3N5cy9kZXYvYXRhL2F0YS1kaXNrLmMJMjAwOC0wNC0w OCAxNDo0ODoyMS4wMDAwMDAwMDAgKzA0MDAKKysrIHNyYy9zeXMvZGV2L2F0YS9hdGEtZGlzay5j CTIwMDgtMDUtMDggMjE6NTU6NDQuMDAwMDAwMDAwICswNDAwCkBAIC0xLDUgKzEsNSBAQAogLyot Ci0gKiBDb3B5cmlnaHQgKGMpIDE5OTggLSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNE Lm9yZz4KKyAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDggU/hyZW4gU2NobWlkdCA8c29zQEZy ZWVCU0Qub3JnPgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg LTM5LDcgKzM5LDYgQEAgX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvc3lzL2Rldi9hdGEvYXRhLQog I2luY2x1ZGUgPHN5cy9jb25mLmg+CiAjaW5jbHVkZSA8c3lzL2Rpc2suaD4KICNpbmNsdWRlIDxz eXMvY29ucy5oPgotI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KICNpbmNsdWRlIDxzeXMvc2VtYS5o PgogI2luY2x1ZGUgPHN5cy90YXNrcXVldWUuaD4KICNpbmNsdWRlIDx2bS91bWEuaD4KQEAgLTU0 LDEwICs1MywxMiBAQCBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9zeXMvZGV2L2F0YS9hdGEtCiAj aW5jbHVkZSA8YXRhX2lmLmg+CiAKIC8qIHByb3RvdHlwZXMgKi8KLXN0YXRpYyB2b2lkIGFkX2lu aXQoZGV2aWNlX3QpOwotc3RhdGljIHZvaWQgYWRfZG9uZShzdHJ1Y3QgYXRhX3JlcXVlc3QgKik7 CitzdGF0aWMgdm9pZCBhZF9pbml0KGRldmljZV90IGRldik7CitzdGF0aWMgdm9pZCBhZF9nZXRf Z2VvbWV0cnkoZGV2aWNlX3QgZGV2KTsKK3N0YXRpYyB2b2lkIGFkX3NldF9nZW9tZXRyeShkZXZp Y2VfdCBkZXYpOworc3RhdGljIHZvaWQgYWRfZG9uZShzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVl c3QpOwogc3RhdGljIHZvaWQgYWRfZGVzY3JpYmUoZGV2aWNlX3QgZGV2KTsKLXN0YXRpYyBpbnQg YWRfdmVyc2lvbih1X2ludDE2X3QpOworc3RhdGljIGludCBhZF92ZXJzaW9uKHVfaW50MTZfdCB2 ZXJzaW9uKTsKIHN0YXRpYyBkaXNrX3N0cmF0ZWd5X3QgYWRfc3RyYXRlZ3k7CiBzdGF0aWMgZGlz a19pb2N0bF90IGFkX2lvY3RsOwogc3RhdGljIGR1bXBlcl90IGFkX2R1bXA7CkBAIC05Myw4ICs5 NCw2IEBAIGFkX2F0dGFjaChkZXZpY2VfdCBkZXYpCiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpj aCA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CiAgICAgc3RydWN0 IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKICAgICBzdHJ1Y3Qg YWRfc29mdGMgKmFkcDsKLSAgICB1X2ludDMyX3QgbGJhc2l6ZTsKLSAgICB1X2ludDY0X3QgbGJh c2l6ZTQ4OwogCiAgICAgLyogY2hlY2sgdGhhdCB3ZSBoYXZlIGEgdmlyZ2luIGRpc2sgdG8gYXR0 YWNoICovCiAgICAgaWYgKGRldmljZV9nZXRfaXZhcnMoZGV2KSkKQEAgLTEwNiwzNyArMTA1LDEy IEBAIGFkX2F0dGFjaChkZXZpY2VfdCBkZXYpCiAgICAgfQogICAgIGRldmljZV9zZXRfaXZhcnMo ZGV2LCBhZHApOwogCi0gICAgaWYgKChhdGFkZXYtPnBhcmFtLmF0YXZhbGlkICYgQVRBX0ZMQUdf NTRfNTgpICYmCi0JYXRhZGV2LT5wYXJhbS5jdXJyZW50X2hlYWRzICYmIGF0YWRldi0+cGFyYW0u Y3VycmVudF9zZWN0b3JzKSB7Ci0JYWRwLT5oZWFkcyA9IGF0YWRldi0+cGFyYW0uY3VycmVudF9o ZWFkczsKLQlhZHAtPnNlY3RvcnMgPSBhdGFkZXYtPnBhcmFtLmN1cnJlbnRfc2VjdG9yczsKLQlh ZHAtPnRvdGFsX3NlY3MgPSAodV9pbnQzMl90KWF0YWRldi0+cGFyYW0uY3VycmVudF9zaXplXzEg fAotCQkJICAoKHVfaW50MzJfdClhdGFkZXYtPnBhcmFtLmN1cnJlbnRfc2l6ZV8yIDw8IDE2KTsK LSAgICB9Ci0gICAgZWxzZSB7Ci0JYWRwLT5oZWFkcyA9IGF0YWRldi0+cGFyYW0uaGVhZHM7Ci0J YWRwLT5zZWN0b3JzID0gYXRhZGV2LT5wYXJhbS5zZWN0b3JzOwotCWFkcC0+dG90YWxfc2VjcyA9 IGF0YWRldi0+cGFyYW0uY3lsaW5kZXJzICogYWRwLT5oZWFkcyAqIGFkcC0+c2VjdG9yczsgIAot ICAgIH0KLSAgICBsYmFzaXplID0gKHVfaW50MzJfdClhdGFkZXYtPnBhcmFtLmxiYV9zaXplXzEg fAotCSAgICAgICgodV9pbnQzMl90KWF0YWRldi0+cGFyYW0ubGJhX3NpemVfMiA8PCAxNik7Ci0K LSAgICAvKiBkb2VzIHRoaXMgZGV2aWNlIG5lZWQgb2xkc3R5bGUgQ0hTIGFkZHJlc3NpbmcgKi8K LSAgICBpZiAoIWFkX3ZlcnNpb24oYXRhZGV2LT5wYXJhbS52ZXJzaW9uX21ham9yKSB8fCAhbGJh c2l6ZSkKLQlhdGFkZXYtPmZsYWdzIHw9IEFUQV9EX1VTRV9DSFM7CisgICAgLyogZ2V0IGRldmlj ZSBnZW9tZXRyeSBpbnRvIGludGVybmFsIHN0cnVjdHMgKi8KKyAgICBhZF9nZXRfZ2VvbWV0cnko ZGV2KTsKIAotICAgIC8qIHVzZSB0aGUgMjhiaXQgTEJBIHNpemUgaWYgdmFsaWQgb3IgYmlnZ2Vy IHRoYW4gdGhlIENIUyBtYXBwaW5nICovCi0gICAgaWYgKGF0YWRldi0+cGFyYW0uY3lsaW5kZXJz ID09IDE2MzgzIHx8IGFkcC0+dG90YWxfc2VjcyA8IGxiYXNpemUpCi0JYWRwLT50b3RhbF9zZWNz ID0gbGJhc2l6ZTsKLQotICAgIC8qIHVzZSB0aGUgNDhiaXQgTEJBIHNpemUgaWYgdmFsaWQgKi8K LSAgICBsYmFzaXplNDggPSAoKHVfaW50NjRfdClhdGFkZXYtPnBhcmFtLmxiYV9zaXplNDhfMSkg fAotCQkoKHVfaW50NjRfdClhdGFkZXYtPnBhcmFtLmxiYV9zaXplNDhfMiA8PCAxNikgfAotCQko KHVfaW50NjRfdClhdGFkZXYtPnBhcmFtLmxiYV9zaXplNDhfMyA8PCAzMikgfAotCQkoKHVfaW50 NjRfdClhdGFkZXYtPnBhcmFtLmxiYV9zaXplNDhfNCA8PCA0OCk7Ci0gICAgaWYgKChhdGFkZXYt PnBhcmFtLnN1cHBvcnQuY29tbWFuZDIgJiBBVEFfU1VQUE9SVF9BRERSRVNTNDgpICYmCi0JbGJh c2l6ZTQ4ID4gQVRBX01BWF8yOEJJVF9MQkEpCi0JYWRwLT50b3RhbF9zZWNzID0gbGJhc2l6ZTQ4 OworICAgIC8qIHNldCB0aGUgbWF4IHNpemUgaWYgY29uZmlndXJlZCAqLworICAgIGlmIChhdGFf c2V0bWF4KQorCWFkX3NldF9nZW9tZXRyeShkZXYpOwogCiAgICAgLyogaW5pdCBkZXZpY2UgcGFy YW1ldGVycyAqLwogICAgIGFkX2luaXQoZGV2KTsKQEAgLTE1MSwxMCArMTI1LDcgQEAgYWRfYXR0 YWNoKGRldmljZV90IGRldikKICAgICBhZHAtPmRpc2stPmRfZHVtcCA9IGFkX2R1bXA7CiAgICAg YWRwLT5kaXNrLT5kX25hbWUgPSAiYWQiOwogICAgIGFkcC0+ZGlzay0+ZF9kcnYxID0gZGV2Owot ICAgIGlmIChjaC0+ZG1hKQotCWFkcC0+ZGlzay0+ZF9tYXhzaXplID0gY2gtPmRtYS0+bWF4X2lv c2l6ZTsKLSAgICBlbHNlCi0JYWRwLT5kaXNrLT5kX21heHNpemUgPSBERkxUUEhZUzsKKyAgICBh ZHAtPmRpc2stPmRfbWF4c2l6ZSA9IGNoLT5kbWEubWF4X2lvc2l6ZSA/IGNoLT5kbWEubWF4X2lv c2l6ZSA6IERGTFRQSFlTOwogICAgIGFkcC0+ZGlzay0+ZF9zZWN0b3JzaXplID0gREVWX0JTSVpF OwogICAgIGFkcC0+ZGlzay0+ZF9tZWRpYXNpemUgPSBERVZfQlNJWkUgKiAob2ZmX3QpYWRwLT50 b3RhbF9zZWNzOwogICAgIGFkcC0+ZGlzay0+ZF9md3NlY3RvcnMgPSBhZHAtPnNlY3RvcnM7CkBA IC0yNDksNyArMjIwLDcgQEAgYWRfc3BpbmRvd24odm9pZCAqcHJpdikKICAgICBzdHJ1Y3QgYXRh X2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogICAgIHN0cnVjdCBhdGFf cmVxdWVzdCAqcmVxdWVzdDsKIAotICAgIGlmKGF0YWRldi0+c3BpbmRvd24gPT0gMCkKKyAgICBp ZiAoIWF0YWRldi0+c3BpbmRvd24pCiAJcmV0dXJuOwogICAgIGRldmljZV9wcmludGYoZGV2LCAi SWRsZSwgc3BpbiBkb3duXG4iKTsKICAgICBhdGFkZXYtPnNwaW5kb3duX3N0YXRlID0gMTsKQEAg LTI1Nyw4ICsyMjgsOCBAQCBhZF9zcGluZG93bih2b2lkICpwcml2KQogCWRldmljZV9wcmludGYo ZGV2LCAiRkFJTFVSRSAtIG91dCBvZiBtZW1vcnkgaW4gYWRfc3BpbmRvd25cbiIpOwogCXJldHVy bjsKICAgICB9Ci0gICAgcmVxdWVzdC0+ZmxhZ3MgPSBBVEFfUl9DT05UUk9MOwogICAgIHJlcXVl c3QtPmRldiA9IGRldjsKKyAgICByZXF1ZXN0LT5mbGFncyA9IEFUQV9SX0NPTlRST0w7CiAgICAg cmVxdWVzdC0+dGltZW91dCA9IDU7CiAgICAgcmVxdWVzdC0+cmV0cmllcyA9IDE7CiAgICAgcmVx dWVzdC0+Y2FsbGJhY2sgPSBhZF9wb3dlcl9jYWxsYmFjazsKQEAgLTI3NCw5ICsyNDUsOSBAQCBh ZF9zdHJhdGVneShzdHJ1Y3QgYmlvICpicCkKICAgICBzdHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2 ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwogICAgIHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVz dDsKIAotICAgIGlmIChhdGFkZXYtPnNwaW5kb3duICE9IDApCisgICAgaWYgKGF0YWRldi0+c3Bp bmRvd24pCiAJY2FsbG91dF9yZXNldCgmYXRhZGV2LT5zcGluZG93bl90aW1lciwgaHogKiBhdGFk ZXYtPnNwaW5kb3duLAotCSAgICBhZF9zcGluZG93biwgZGV2KTsKKwkJICAgICAgYWRfc3BpbmRv d24sIGRldik7CiAKICAgICBpZiAoIShyZXF1ZXN0ID0gYXRhX2FsbG9jX3JlcXVlc3QoKSkpIHsK IAlkZXZpY2VfcHJpbnRmKGRldiwgIkZBSUxVUkUgLSBvdXQgb2YgbWVtb3J5IGluIHN0YXJ0XG4i KTsKQEAgLTI5Miw3ICsyNjMsOCBAQCBhZF9zdHJhdGVneShzdHJ1Y3QgYmlvICpicCkKIAlkZXZp Y2VfcHJpbnRmKGRldiwgInJlcXVlc3Qgd2hpbGUgc3B1biBkb3duLCBzdGFydGluZy5cbiIpOwog CWF0YWRldi0+c3BpbmRvd25fc3RhdGUgPSAwOwogCXJlcXVlc3QtPnRpbWVvdXQgPSAzMTsKLSAg ICB9IGVsc2UgeworICAgIH0KKyAgICBlbHNlIHsKIAlyZXF1ZXN0LT50aW1lb3V0ID0gNTsKICAg ICB9CiAgICAgcmVxdWVzdC0+cmV0cmllcyA9IDI7CkBAIC00MjYsNyArMzk4LDEwNSBAQCBhZF9p bml0KGRldmljZV90IGRldikKIAlhdGFkZXYtPm1heF9pb3NpemUgPSBERVZfQlNJWkU7CiB9CiAK LXZvaWQKK3N0YXRpYyB2b2lkCithZF9nZXRfZ2VvbWV0cnkoZGV2aWNlX3QgZGV2KQoreworICAg IHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisgICAg c3RydWN0IGFkX3NvZnRjICphZHAgPSBkZXZpY2VfZ2V0X2l2YXJzKGRldik7CisgICAgdV9pbnQ2 NF90IGxiYXNpemU0ODsKKyAgICB1X2ludDMyX3QgbGJhc2l6ZTsKKworICAgIGlmICgoYXRhZGV2 LT5wYXJhbS5hdGF2YWxpZCAmIEFUQV9GTEFHXzU0XzU4KSAmJgorCWF0YWRldi0+cGFyYW0uY3Vy cmVudF9oZWFkcyAmJiBhdGFkZXYtPnBhcmFtLmN1cnJlbnRfc2VjdG9ycykgeworCWFkcC0+aGVh ZHMgPSBhdGFkZXYtPnBhcmFtLmN1cnJlbnRfaGVhZHM7CisJYWRwLT5zZWN0b3JzID0gYXRhZGV2 LT5wYXJhbS5jdXJyZW50X3NlY3RvcnM7CisJYWRwLT50b3RhbF9zZWNzID0gKHVfaW50MzJfdClh dGFkZXYtPnBhcmFtLmN1cnJlbnRfc2l6ZV8xIHwKKwkJCSAgKCh1X2ludDMyX3QpYXRhZGV2LT5w YXJhbS5jdXJyZW50X3NpemVfMiA8PCAxNik7CisgICAgfQorICAgIGVsc2UgeworCWFkcC0+aGVh ZHMgPSBhdGFkZXYtPnBhcmFtLmhlYWRzOworCWFkcC0+c2VjdG9ycyA9IGF0YWRldi0+cGFyYW0u c2VjdG9yczsKKwlhZHAtPnRvdGFsX3NlY3MgPSBhdGFkZXYtPnBhcmFtLmN5bGluZGVycyAqIGFk cC0+aGVhZHMgKiBhZHAtPnNlY3RvcnM7ICAKKyAgICB9CisgICAgbGJhc2l6ZSA9ICh1X2ludDMy X3QpYXRhZGV2LT5wYXJhbS5sYmFfc2l6ZV8xIHwKKwkgICAgICAoKHVfaW50MzJfdClhdGFkZXYt PnBhcmFtLmxiYV9zaXplXzIgPDwgMTYpOworCisgICAgLyogZG9lcyB0aGlzIGRldmljZSBuZWVk IG9sZHN0eWxlIENIUyBhZGRyZXNzaW5nICovCisgICAgaWYgKCFhZF92ZXJzaW9uKGF0YWRldi0+ cGFyYW0udmVyc2lvbl9tYWpvcikgfHwgIWxiYXNpemUpCisJYXRhZGV2LT5mbGFncyB8PSBBVEFf RF9VU0VfQ0hTOworCisgICAgLyogdXNlIHRoZSAyOGJpdCBMQkEgc2l6ZSBpZiB2YWxpZCBvciBi aWdnZXIgdGhhbiB0aGUgQ0hTIG1hcHBpbmcgKi8KKyAgICBpZiAoYXRhZGV2LT5wYXJhbS5jeWxp bmRlcnMgPT0gMTYzODMgfHwgYWRwLT50b3RhbF9zZWNzIDwgbGJhc2l6ZSkKKwlhZHAtPnRvdGFs X3NlY3MgPSBsYmFzaXplOworCisgICAgLyogdXNlIHRoZSA0OGJpdCBMQkEgc2l6ZSBpZiB2YWxp ZCAqLworICAgIGxiYXNpemU0OCA9ICgodV9pbnQ2NF90KWF0YWRldi0+cGFyYW0ubGJhX3NpemU0 OF8xKSB8CisJCSgodV9pbnQ2NF90KWF0YWRldi0+cGFyYW0ubGJhX3NpemU0OF8yIDw8IDE2KSB8 CisJCSgodV9pbnQ2NF90KWF0YWRldi0+cGFyYW0ubGJhX3NpemU0OF8zIDw8IDMyKSB8CisJCSgo dV9pbnQ2NF90KWF0YWRldi0+cGFyYW0ubGJhX3NpemU0OF80IDw8IDQ4KTsKKyAgICBpZiAoKGF0 YWRldi0+cGFyYW0uc3VwcG9ydC5jb21tYW5kMiAmIEFUQV9TVVBQT1JUX0FERFJFU1M0OCkgJiYK KwlsYmFzaXplNDggPiBBVEFfTUFYXzI4QklUX0xCQSkKKwlhZHAtPnRvdGFsX3NlY3MgPSBsYmFz aXplNDg7Cit9CisKK3N0YXRpYyB2b2lkCithZF9zZXRfZ2VvbWV0cnkoZGV2aWNlX3QgZGV2KQor eworICAgIHN0cnVjdCBhZF9zb2Z0YyAqYWRwID0gZGV2aWNlX2dldF9pdmFycyhkZXYpOworICAg IHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdDsKKworICAgIGlmICgxIHwgYm9vdHZlcmJvc2Up CisJZGV2aWNlX3ByaW50ZihkZXYsICJPUkcgJWp1IHNlY3RvcnMgWyVqdUMvJWRILyVkU11cbiIs IGFkcC0+dG90YWxfc2VjcywKKwkJICAgICAgYWRwLT50b3RhbF9zZWNzIC8gKGFkcC0+aGVhZHMg KiBhZHAtPnNlY3RvcnMpLAorCQkgICAgICBhZHAtPmhlYWRzLCBhZHAtPnNlY3RvcnMpOworCisg ICAgaWYgKCEocmVxdWVzdCA9IGF0YV9hbGxvY19yZXF1ZXN0KCkpKQorCXJldHVybjsKKworICAg IC8qIGdldCB0aGUgbWF4IG5hdGl2ZSBzaXplIHRoZSBkZXZpY2Ugc3VwcG9ydHMgKi8KKyAgICBy ZXF1ZXN0LT5kZXYgPSBkZXY7CisgICAgcmVxdWVzdC0+dS5hdGEuY29tbWFuZCA9IEFUQV9SRUFE X05BVElWRV9NQVhfQUREUkVTUzsKKyAgICByZXF1ZXN0LT51LmF0YS5sYmEgPSAwOworICAgIHJl cXVlc3QtPnUuYXRhLmNvdW50ID0gMDsKKyAgICByZXF1ZXN0LT51LmF0YS5mZWF0dXJlID0gMDsK KyAgICByZXF1ZXN0LT5mbGFncyA9IEFUQV9SX0NPTlRST0wgfCBBVEFfUl9RVUlFVDsKKyAgICBy ZXF1ZXN0LT50aW1lb3V0ID0gNTsKKyAgICByZXF1ZXN0LT5yZXRyaWVzID0gMDsKKyAgICBhdGFf cXVldWVfcmVxdWVzdChyZXF1ZXN0KTsKKyAgICBpZiAocmVxdWVzdC0+c3RhdHVzICYgQVRBX1Nf RVJST1IpCisJZ290byBvdXQ7CisKKyAgICBpZiAoMSB8IGJvb3R2ZXJib3NlKQorCWRldmljZV9w cmludGYoZGV2LCAiTUFYICVqdSBzZWN0b3JzXG4iLCByZXF1ZXN0LT51LmF0YS5sYmEgKyAxKTsK KworICAgIC8qIGlmIG9yaWdpbmFsIHNpemUgZXF1YWxzIG1heCBzaXplIG5vdGhpbmcgbW9yZSB0 b2RvICovCisgICAgaWYgKGFkcC0+dG90YWxfc2VjcyA+PSByZXF1ZXN0LT51LmF0YS5sYmEpCisJ Z290byBvdXQ7CisKKyAgICAvKiBzZXQgdGhlIG1heCBuYXRpdmUgc2l6ZSB0byBpdHMgbWF4ICov CisgICAgcmVxdWVzdC0+ZGV2ID0gZGV2OworICAgIHJlcXVlc3QtPnUuYXRhLmNvbW1hbmQgPSBB VEFfU0VUX01BWF9BRERSRVNTOworICAgIHJlcXVlc3QtPnUuYXRhLmNvdW50ID0gMTsKKyAgICBy ZXF1ZXN0LT51LmF0YS5mZWF0dXJlID0gMDsKKyAgICByZXF1ZXN0LT5mbGFncyA9IEFUQV9SX0NP TlRST0w7CisgICAgcmVxdWVzdC0+dGltZW91dCA9IDU7CisgICAgcmVxdWVzdC0+cmV0cmllcyA9 IDA7CisgICAgYXRhX3F1ZXVlX3JlcXVlc3QocmVxdWVzdCk7CisgICAgaWYgKHJlcXVlc3QtPnN0 YXR1cyAmIEFUQV9TX0VSUk9SKQorCWdvdG8gb3V0OworCisgICAgLyogcmVmcmVzaCBnZW9tZXRy eSBmcm9tIGRyaXZlICovCisgICAgYXRhX2dldHBhcmFtKGRldmljZV9nZXRfc29mdGMoZGV2KSwg MCk7CisgICAgYWRfZ2V0X2dlb21ldHJ5KGRldik7CisgICAgaWYgKDEgfCBib290dmVyYm9zZSkK KwlkZXZpY2VfcHJpbnRmKGRldiwgIk5FVyAlanUgc2VjdG9ycyBbJWp1Qy8lZEgvJWRTXVxuIiwg YWRwLT50b3RhbF9zZWNzLAorCQkgICAgICBhZHAtPnRvdGFsX3NlY3MgLyAoYWRwLT5oZWFkcyAq IGFkcC0+c2VjdG9ycyksCisJCSAgICAgIGFkcC0+aGVhZHMsIGFkcC0+c2VjdG9ycyk7CitvdXQ6 CisgICAgYXRhX2ZyZWVfcmVxdWVzdChyZXF1ZXN0KTsKK30KKworc3RhdGljIHZvaWQKIGFkX2Rl c2NyaWJlKGRldmljZV90IGRldikKIHsKICAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2 aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKQEAgLTQ1OCw4ICs1MjgsNyBA QCBhZF9kZXNjcmliZShkZXZpY2VfdCBkZXYpCiAgICAgZGV2aWNlX3ByaW50ZihkZXYsICIlanVN QiA8JXMlcyAlLjhzPiBhdCBhdGElZC0lcyAlcyVzXG4iLAogCQkgIGFkcC0+dG90YWxfc2VjcyAv ICgxMDQ4NTc2IC8gREVWX0JTSVpFKSwKIAkJICB2ZW5kb3IsIHByb2R1Y3QsIGF0YWRldi0+cGFy YW0ucmV2aXNpb24sCi0JCSAgZGV2aWNlX2dldF91bml0KGNoLT5kZXYpLAotCQkgIChhdGFkZXYt PnVuaXQgPT0gQVRBX01BU1RFUikgPyAibWFzdGVyIiA6ICJzbGF2ZSIsCisJCSAgZGV2aWNlX2dl dF91bml0KGNoLT5kZXYpLCBhdGFfdW5pdDJzdHIoYXRhZGV2KSwKIAkJICAoYWRwLT5mbGFncyAm IEFEX0ZfVEFHX0VOQUJMRUQpID8gInRhZ2dlZCAiIDogIiIsCiAJCSAgYXRhX21vZGUyc3RyKGF0 YWRldi0+bW9kZSkpOwogICAgIGlmIChib290dmVyYm9zZSkgewotLS0gc3JjL3N5cy9kZXYvYXRh L2F0YS1kaXNrLmgJMjAwNy0wMi0yMSAyMjowNzoxOC4wMDAwMDAwMDAgKzAzMDAKKysrIHNyYy9z eXMvZGV2L2F0YS9hdGEtZGlzay5oCTIwMDgtMDQtMTAgMTc6MDU6MDUuMDAwMDAwMDAwICswNDAw CkBAIC0xLDUgKzEsNSBAQAogLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggLSAyMDA3IFP4cmVu IFNjaG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDgg U/hyZW4gU2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM0LDcgKzM0LDcgQEAgc3RydWN0IGFkX3NvZnRjIHsgIAog ICAgIHVfaW50MzJfdCAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcnNpemU7ICAgLyogc2l6ZSBv ZiBlYWNoIHRyYW5zZmVyICovCiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIG51bV90 YWdzOyAgICAgICAvKiBudW1iZXIgb2YgdGFncyBzdXBwb3J0ZWQgKi8KICAgICBpbnQgICAgICAg ICAgICAgICAgICAgICAgICAgZmxhZ3M7ICAgICAgICAgIC8qIGRyaXZlIGZsYWdzICovCi0jZGVm aW5lICAgICAgICAgQURfRl9MQUJFTExJTkcgICAgICAgICAgMHgwMDAxICAgICAgICAgIAorI2Rl ZmluZSAgICAgICAgIEFEX0ZfTEFCRUxMSU5HICAgICAgICAgIDB4MDAwMQogI2RlZmluZSAgICAg ICAgIEFEX0ZfQ0hTX1VTRUQgICAgICAgICAgIDB4MDAwMgogI2RlZmluZSAgICAgICAgIEFEX0Zf MzJCX0VOQUJMRUQgICAgICAgIDB4MDAwNAogI2RlZmluZSAgICAgICAgIEFEX0ZfVEFHX0VOQUJM RUQgICAgICAgIDB4MDAwOAotLS0gc3JjL3N5cy9kZXYvYXRhL2F0YS1kbWEuYwkyMDA4LTAxLTA5 IDExOjU0OjQ3LjAwMDAwMDAwMCArMDMwMAorKysgc3JjL3N5cy9kZXYvYXRhL2F0YS1kbWEuYwky MDA4LTA0LTE4IDE5OjE1OjA0LjAwMDAwMDAwMCArMDQwMApAQCAtMSw1ICsxLDUgQEAKIC8qLQot ICogQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwNyBT+HJlbiBTY2htaWR0IDxzb3NARnJlZUJTRC5v cmc+CisgKiBDb3B5cmlnaHQgKGMpIDE5OTggLSAyMDA4IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVl QlNELm9yZz4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00 NSwxMSArNDUsMTMgQEAgX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvc3lzL2Rldi9hdGEvYXRhLQog I2luY2x1ZGUgPGRldi9hdGEvYXRhLXBjaS5oPgogCiAvKiBwcm90b3R5cGVzICovCi1zdGF0aWMg dm9pZCBhdGFfZG1hYWxsb2MoZGV2aWNlX3QpOwotc3RhdGljIHZvaWQgYXRhX2RtYWZyZWUoZGV2 aWNlX3QpOwotc3RhdGljIHZvaWQgYXRhX2RtYXNldHByZCh2b2lkICosIGJ1c19kbWFfc2VnbWVu dF90ICosIGludCwgaW50KTsKLXN0YXRpYyBpbnQgYXRhX2RtYWxvYWQoZGV2aWNlX3QsIGNhZGRy X3QsIGludDMyX3QsIGludCwgdm9pZCAqLCBpbnQgKik7Ci1zdGF0aWMgaW50IGF0YV9kbWF1bmxv YWQoZGV2aWNlX3QpOworc3RhdGljIHZvaWQgYXRhX2RtYWZpbmkoZGV2aWNlX3QgZGV2KTsKK3N0 YXRpYyB2b2lkIGF0YV9kbWFzZXR1cGNfY2Iodm9pZCAqeHNjLCBidXNfZG1hX3NlZ21lbnRfdCAq c2VncywgaW50IG5zZWdzLCBpbnQgZXJyb3IpOworc3RhdGljIHZvaWQgYXRhX2RtYWFsbG9jKGRl dmljZV90IGRldik7CitzdGF0aWMgdm9pZCBhdGFfZG1hZnJlZShkZXZpY2VfdCBkZXYpOworc3Rh dGljIHZvaWQgYXRhX2RtYXNldHByZCh2b2lkICp4c2MsIGJ1c19kbWFfc2VnbWVudF90ICpzZWdz LCBpbnQgbnNlZ3MsIGludCBlcnJvcik7CitzdGF0aWMgaW50IGF0YV9kbWFsb2FkKHN0cnVjdCBh dGFfcmVxdWVzdCAqcmVxdWVzdCwgdm9pZCAqYWRkciwgaW50ICpuc2Vncyk7CitzdGF0aWMgaW50 IGF0YV9kbWF1bmxvYWQoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KTsKIAogLyogbG9jYWwg dmFycyAqLwogc3RhdGljIE1BTExPQ19ERUZJTkUoTV9BVEFETUEsICJhdGFfZG1hIiwgIkFUQSBk cml2ZXIgRE1BIik7CkBAIC02NywxMzQgKzY5LDE3MCBAQCB2b2lkIAogYXRhX2RtYWluaXQoZGV2 aWNlX3QgZGV2KQogewogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3Nv ZnRjKGRldik7CisgICAgc3RydWN0IGF0YV9kY19jYl9hcmdzIGRjYmE7CiAKLSAgICBpZiAoKGNo LT5kbWEgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdGFfZG1hKSwgTV9BVEFETUEsIE1fTk9XQUlU fE1fWkVSTykpKSB7Ci0JY2gtPmRtYS0+YWxsb2MgPSBhdGFfZG1hYWxsb2M7Ci0JY2gtPmRtYS0+ ZnJlZSA9IGF0YV9kbWFmcmVlOwotCWNoLT5kbWEtPnNldHByZCA9IGF0YV9kbWFzZXRwcmQ7Ci0J Y2gtPmRtYS0+bG9hZCA9IGF0YV9kbWFsb2FkOwotCWNoLT5kbWEtPnVubG9hZCA9IGF0YV9kbWF1 bmxvYWQ7Ci0JY2gtPmRtYS0+YWxpZ25tZW50ID0gMjsKLQljaC0+ZG1hLT5ib3VuZGFyeSA9IDY1 NTM2OwotCWNoLT5kbWEtPnNlZ3NpemUgPSAxMjggKiBERVZfQlNJWkU7Ci0JY2gtPmRtYS0+bWF4 X2lvc2l6ZSA9IDEyOCAqIERFVl9CU0laRTsKLQljaC0+ZG1hLT5tYXhfYWRkcmVzcyA9IEJVU19T UEFDRV9NQVhBRERSXzMyQklUOworICAgIGNoLT5kbWEuYWxsb2MgPSBhdGFfZG1hYWxsb2M7Cisg ICAgY2gtPmRtYS5mcmVlID0gYXRhX2RtYWZyZWU7CisgICAgY2gtPmRtYS5zZXRwcmQgPSBhdGFf ZG1hc2V0cHJkOworICAgIGNoLT5kbWEubG9hZCA9IGF0YV9kbWFsb2FkOworICAgIGNoLT5kbWEu dW5sb2FkID0gYXRhX2RtYXVubG9hZDsKKyAgICBjaC0+ZG1hLmFsaWdubWVudCA9IDI7CisgICAg Y2gtPmRtYS5ib3VuZGFyeSA9IDY1NTM2OworICAgIGNoLT5kbWEuc2Vnc2l6ZSA9IDYzNTM2Owor ICAgIGNoLT5kbWEubWF4X2lvc2l6ZSA9IDEyOCAqIERFVl9CU0laRTsKKyAgICBjaC0+ZG1hLm1h eF9hZGRyZXNzID0gQlVTX1NQQUNFX01BWEFERFJfMzJCSVQ7CisgICAgY2gtPmRtYS5kbWFfc2xv dHMgPSAyOworCisgICAgaWYgKGJ1c19kbWFfdGFnX2NyZWF0ZShidXNfZ2V0X2RtYV90YWcoZGV2 KSwgY2gtPmRtYS5hbGlnbm1lbnQsIDAsCisJCQkgICBjaC0+ZG1hLm1heF9hZGRyZXNzLCBCVVNf U1BBQ0VfTUFYQUREUiwKKwkJCSAgIE5VTEwsIE5VTEwsIGNoLT5kbWEubWF4X2lvc2l6ZSwKKwkJ CSAgIEFUQV9ETUFfRU5UUklFUywgY2gtPmRtYS5zZWdzaXplLAorCQkJICAgMCwgTlVMTCwgTlVM TCwgJmNoLT5kbWEuZG1hdGFnKSkKKwlnb3RvIGVycm9yOworCisgICAgaWYgKGJ1c19kbWFfdGFn X2NyZWF0ZShjaC0+ZG1hLmRtYXRhZywgUEFHRV9TSVpFLCA2NCAqIDEwMjQsCisJCQkgICBjaC0+ ZG1hLm1heF9hZGRyZXNzLCBCVVNfU1BBQ0VfTUFYQUREUiwKKwkJCSAgIE5VTEwsIE5VTEwsIE1B WFdTUENTWiwgMSwgTUFYV1NQQ1NaLAorCQkJICAgMCwgTlVMTCwgTlVMTCwgJmNoLT5kbWEud29y a190YWcpKQorCWdvdG8gZXJyb3I7CisKKyAgICBpZiAoYnVzX2RtYW1lbV9hbGxvYyhjaC0+ZG1h LndvcmtfdGFnLCAodm9pZCAqKikmY2gtPmRtYS53b3JrLCAwLAorCQkJICZjaC0+ZG1hLndvcmtf bWFwKSkKKwlnb3RvIGVycm9yOworCisgICAgaWYgKGJ1c19kbWFtYXBfbG9hZChjaC0+ZG1hLndv cmtfdGFnLCBjaC0+ZG1hLndvcmtfbWFwLCBjaC0+ZG1hLndvcmssCisJCQlNQVhXU1BDU1osIGF0 YV9kbWFzZXR1cGNfY2IsICZkY2JhLCAwKSB8fAorCQkJZGNiYS5lcnJvcikgeworCWJ1c19kbWFt ZW1fZnJlZShjaC0+ZG1hLndvcmtfdGFnLCBjaC0+ZG1hLndvcmssIGNoLT5kbWEud29ya19tYXAp OworCWdvdG8gZXJyb3I7CisgICAgfQorICAgIGNoLT5kbWEud29ya19idXMgPSBkY2JhLm1hZGRy OworICAgIHJldHVybjsKKworZXJyb3I6CisgICAgZGV2aWNlX3ByaW50ZihkZXYsICJXQVJOSU5H IC0gRE1BIGluaXRpYWxpemF0aW9uIGZhaWxlZCwgZGlzYWJsaW5nIERNQVxuIik7CisgICAgYXRh X2RtYWZpbmkoZGV2KTsKK30KKwordm9pZCAKK2F0YV9kbWFmaW5pKGRldmljZV90IGRldikKK3sK KyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCisg ICAgaWYgKGNoLT5kbWEud29ya19idXMpIHsKKwlidXNfZG1hbWFwX3VubG9hZChjaC0+ZG1hLndv cmtfdGFnLCBjaC0+ZG1hLndvcmtfbWFwKTsKKwlidXNfZG1hbWVtX2ZyZWUoY2gtPmRtYS53b3Jr X3RhZywgY2gtPmRtYS53b3JrLCBjaC0+ZG1hLndvcmtfbWFwKTsKKwljaC0+ZG1hLndvcmtfYnVz ID0gMDsKKwljaC0+ZG1hLndvcmtfbWFwID0gTlVMTDsKKwljaC0+ZG1hLndvcmsgPSBOVUxMOwor ICAgIH0KKyAgICBpZiAoY2gtPmRtYS53b3JrX3RhZykgeworCWJ1c19kbWFfdGFnX2Rlc3Ryb3ko Y2gtPmRtYS53b3JrX3RhZyk7CisJY2gtPmRtYS53b3JrX3RhZyA9IE5VTEw7CisgICAgfQorICAg IGlmIChjaC0+ZG1hLmRtYXRhZykgeworCWJ1c19kbWFfdGFnX2Rlc3Ryb3koY2gtPmRtYS5kbWF0 YWcpOworCWNoLT5kbWEuZG1hdGFnID0gTlVMTDsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkCiBh dGFfZG1hc2V0dXBjX2NiKHZvaWQgKnhzYywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3MsIGludCBu c2VncywgaW50IGVycm9yKQogewotICAgIHN0cnVjdCBhdGFfZGNfY2JfYXJncyAqY2JhID0gKHN0 cnVjdCBhdGFfZGNfY2JfYXJncyAqKXhzYzsKKyAgICBzdHJ1Y3QgYXRhX2RjX2NiX2FyZ3MgKmRj YmEgPSAoc3RydWN0IGF0YV9kY19jYl9hcmdzICopeHNjOwogCi0gICAgaWYgKCEoY2JhLT5lcnJv ciA9IGVycm9yKSkKLQljYmEtPm1hZGRyID0gc2Vnc1swXS5kc19hZGRyOworICAgIGlmICghKGRj YmEtPmVycm9yID0gZXJyb3IpKQorCWRjYmEtPm1hZGRyID0gc2Vnc1swXS5kc19hZGRyOwogfQog CiBzdGF0aWMgdm9pZAogYXRhX2RtYWFsbG9jKGRldmljZV90IGRldikKIHsKICAgICBzdHJ1Y3Qg YXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwotICAgIHN0cnVjdCBhdGFf ZGNfY2JfYXJncyBjY2JhOwotCi0gICAgaWYgKGJ1c19kbWFfdGFnX2NyZWF0ZShidXNfZ2V0X2Rt YV90YWcoZGV2KSwgY2gtPmRtYS0+YWxpZ25tZW50LCAwLAotCQkJICAgY2gtPmRtYS0+bWF4X2Fk ZHJlc3MsIEJVU19TUEFDRV9NQVhBRERSLAotCQkJICAgTlVMTCwgTlVMTCwgY2gtPmRtYS0+bWF4 X2lvc2l6ZSwKLQkJCSAgIEFUQV9ETUFfRU5UUklFUywgY2gtPmRtYS0+c2Vnc2l6ZSwKLQkJCSAg IDAsIE5VTEwsIE5VTEwsICZjaC0+ZG1hLT5kbWF0YWcpKQotCWdvdG8gZXJyb3I7Ci0KLSAgICBp ZiAoYnVzX2RtYV90YWdfY3JlYXRlKGNoLT5kbWEtPmRtYXRhZywgUEFHRV9TSVpFLCBQQUdFX1NJ WkUsCi0JCQkgICBjaC0+ZG1hLT5tYXhfYWRkcmVzcywgQlVTX1NQQUNFX01BWEFERFIsCi0JCQkg ICBOVUxMLCBOVUxMLCBNQVhUQUJTWiwgMSwgTUFYVEFCU1osCi0JCQkgICAwLCBOVUxMLCBOVUxM LCAmY2gtPmRtYS0+c2dfdGFnKSkKLQlnb3RvIGVycm9yOwotCi0gICAgaWYgKGJ1c19kbWFfdGFn X2NyZWF0ZShjaC0+ZG1hLT5kbWF0YWcsY2gtPmRtYS0+YWxpZ25tZW50LGNoLT5kbWEtPmJvdW5k YXJ5LAotCQkJICAgY2gtPmRtYS0+bWF4X2FkZHJlc3MsIEJVU19TUEFDRV9NQVhBRERSLAotCQkJ ICAgTlVMTCwgTlVMTCwgY2gtPmRtYS0+bWF4X2lvc2l6ZSwKLQkJCSAgIEFUQV9ETUFfRU5UUklF UywgY2gtPmRtYS0+c2Vnc2l6ZSwKLQkJCSAgIDAsIE5VTEwsIE5VTEwsICZjaC0+ZG1hLT5kYXRh X3RhZykpCi0JZ290byBlcnJvcjsKLQotICAgIGlmIChidXNfZG1hbWVtX2FsbG9jKGNoLT5kbWEt PnNnX3RhZywgKHZvaWQgKiopJmNoLT5kbWEtPnNnLCAwLAotCQkJICZjaC0+ZG1hLT5zZ19tYXAp KQotCWdvdG8gZXJyb3I7Ci0KLSAgICBpZiAoYnVzX2RtYW1hcF9sb2FkKGNoLT5kbWEtPnNnX3Rh ZywgY2gtPmRtYS0+c2dfbWFwLCBjaC0+ZG1hLT5zZywKLQkJCU1BWFRBQlNaLCBhdGFfZG1hc2V0 dXBjX2NiLCAmY2NiYSwgMCkgfHwgY2NiYS5lcnJvcikgewotCWJ1c19kbWFtZW1fZnJlZShjaC0+ ZG1hLT5zZ190YWcsIGNoLT5kbWEtPnNnLCBjaC0+ZG1hLT5zZ19tYXApOwotCWdvdG8gZXJyb3I7 Ci0gICAgfQotICAgIGNoLT5kbWEtPnNnX2J1cyA9IGNjYmEubWFkZHI7Ci0KLSAgICBpZiAoYnVz X2RtYW1hcF9jcmVhdGUoY2gtPmRtYS0+ZGF0YV90YWcsIDAsICZjaC0+ZG1hLT5kYXRhX21hcCkp Ci0JZ290byBlcnJvcjsKLQotICAgIGlmIChidXNfZG1hX3RhZ19jcmVhdGUoY2gtPmRtYS0+ZG1h dGFnLCBQQUdFX1NJWkUsIDY0ICogMTAyNCwKLQkJCSAgIGNoLT5kbWEtPm1heF9hZGRyZXNzLCBC VVNfU1BBQ0VfTUFYQUREUiwKLQkJCSAgIE5VTEwsIE5VTEwsIE1BWFdTUENTWiwgMSwgTUFYV1NQ Q1NaLAotCQkJICAgMCwgTlVMTCwgTlVMTCwgJmNoLT5kbWEtPndvcmtfdGFnKSkKLQlnb3RvIGVy cm9yOwotCi0gICAgaWYgKGJ1c19kbWFtZW1fYWxsb2MoY2gtPmRtYS0+d29ya190YWcsICh2b2lk ICoqKSZjaC0+ZG1hLT53b3JrLCAwLAotCQkJICZjaC0+ZG1hLT53b3JrX21hcCkpCi0JZ290byBl cnJvcjsKKyAgICBzdHJ1Y3QgYXRhX2RjX2NiX2FyZ3MgZGNiYTsKKyAgICBpbnQgaTsKIAotICAg IGlmIChidXNfZG1hbWFwX2xvYWQoY2gtPmRtYS0+d29ya190YWcsIGNoLT5kbWEtPndvcmtfbWFw LGNoLT5kbWEtPndvcmssCi0JCQlNQVhXU1BDU1osIGF0YV9kbWFzZXR1cGNfY2IsICZjY2JhLCAw KSB8fCBjY2JhLmVycm9yKSB7Ci0JYnVzX2RtYW1lbV9mcmVlKGNoLT5kbWEtPndvcmtfdGFnLGNo LT5kbWEtPndvcmssIGNoLT5kbWEtPndvcmtfbWFwKTsKLQlnb3RvIGVycm9yOworICAgIC8qIGFs bG9jIGFuZCBzZXR1cCBuZWVkZWQgZG1hIHNsb3RzICovCisgICAgYnplcm8oY2gtPmRtYS5zbG90 LCBzaXplb2Yoc3RydWN0IGF0YV9kbWFzbG90KSAqIEFUQV9ETUFfU0xPVFMpOworICAgIGZvciAo aSA9IDA7IGkgPCBjaC0+ZG1hLmRtYV9zbG90czsgaSsrKSB7CisJc3RydWN0IGF0YV9kbWFzbG90 ICpzbG90ID0gJmNoLT5kbWEuc2xvdFtpXTsKKworCWlmIChidXNfZG1hX3RhZ19jcmVhdGUoY2gt PmRtYS5kbWF0YWcsIFBBR0VfU0laRSwgUEFHRV9TSVpFLAorCQkJICAgICAgIGNoLT5kbWEubWF4 X2FkZHJlc3MsIEJVU19TUEFDRV9NQVhBRERSLAorCQkJICAgICAgIE5VTEwsIE5VTEwsIFBBR0Vf U0laRSwgMSwgUEFHRV9TSVpFLAorCQkJICAgICAgIDAsIE5VTEwsIE5VTEwsICZzbG90LT5zZ190 YWcpKSB7CisgICAgICAgICAgICBkZXZpY2VfcHJpbnRmKGNoLT5kZXYsICJGQUlMVVJFIC0gY3Jl YXRlIHNnX3RhZ1xuIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworCX0KKworCWlmIChidXNf ZG1hbWVtX2FsbG9jKHNsb3QtPnNnX3RhZywgKHZvaWQgKiopJnNsb3QtPnNnLAorCQkJICAgICAw LCAmc2xvdC0+c2dfbWFwKSkgeworCSAgICBkZXZpY2VfcHJpbnRmKGNoLT5kZXYsICJGQUlMVVJF IC0gYWxsb2Mgc2dfbWFwXG4iKTsKKwkgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCisJaWYg KGJ1c19kbWFtYXBfbG9hZChzbG90LT5zZ190YWcsIHNsb3QtPnNnX21hcCwgc2xvdC0+c2csIE1B WFRBQlNaLAorCQkJICAgIGF0YV9kbWFzZXR1cGNfY2IsICZkY2JhLCAwKSB8fCBkY2JhLmVycm9y KSB7CisJICAgIGRldmljZV9wcmludGYoY2gtPmRldiwgIkZBSUxVUkUgLSBsb2FkIHNnXG4iKTsK KwkgICAgZ290byBlcnJvcjsKKwl9CisJc2xvdC0+c2dfYnVzID0gZGNiYS5tYWRkcjsKKworCWlm IChidXNfZG1hX3RhZ19jcmVhdGUoY2gtPmRtYS5kbWF0YWcsCisJCQkgICAgICAgY2gtPmRtYS5h bGlnbm1lbnQsIGNoLT5kbWEuYm91bmRhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2gtPmRtYS5tYXhfYWRkcmVzcywgQlVTX1NQQUNFX01BWEFERFIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgY2gtPmRtYS5tYXhfaW9zaXplLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFUQV9ETUFfRU5UUklFUywgY2gtPmRtYS5zZWdzaXpl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVU19ETUFfQUxMT0NOT1csIE5VTEws IE5VTEwsICZzbG90LT5kYXRhX3RhZykpIHsKKwkgICAgZGV2aWNlX3ByaW50ZihjaC0+ZGV2LCAi RkFJTFVSRSAtIGNyZWF0ZSBkYXRhX3RhZ1xuIik7CisJICAgIGdvdG8gZXJyb3I7CisJfQorCisJ aWYgKGJ1c19kbWFtYXBfY3JlYXRlKHNsb3QtPmRhdGFfdGFnLCAwLCAmc2xvdC0+ZGF0YV9tYXAp KSB7CisJICAgIGRldmljZV9wcmludGYoY2gtPmRldiwgIkZBSUxVUkUgLSBjcmVhdGUgZGF0YV9t YXBcbiIpOworCSAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAgICAgfQotICAgIGNoLT5kbWEt PndvcmtfYnVzID0gY2NiYS5tYWRkcjsKIAogICAgIHJldHVybjsKIAogZXJyb3I6CiAgICAgZGV2 aWNlX3ByaW50ZihkZXYsICJXQVJOSU5HIC0gRE1BIGFsbG9jYXRpb24gZmFpbGVkLCBkaXNhYmxp bmcgRE1BXG4iKTsKICAgICBhdGFfZG1hZnJlZShkZXYpOwotICAgIGZyZWUoY2gtPmRtYSwgTV9B VEFETUEpOwotICAgIGNoLT5kbWEgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZAogYXRhX2RtYWZy ZWUoZGV2aWNlX3QgZGV2KQogewogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf Z2V0X3NvZnRjKGRldik7CisgICAgaW50IGk7CiAKLSAgICBpZiAoY2gtPmRtYS0+d29ya19idXMp IHsKLQlidXNfZG1hbWFwX3VubG9hZChjaC0+ZG1hLT53b3JrX3RhZywgY2gtPmRtYS0+d29ya19t YXApOwotCWJ1c19kbWFtZW1fZnJlZShjaC0+ZG1hLT53b3JrX3RhZywgY2gtPmRtYS0+d29yaywg Y2gtPmRtYS0+d29ya19tYXApOwotCWNoLT5kbWEtPndvcmtfYnVzID0gMDsKLQljaC0+ZG1hLT53 b3JrX21hcCA9IE5VTEw7Ci0JY2gtPmRtYS0+d29yayA9IE5VTEw7Ci0gICAgfQotICAgIGlmIChj aC0+ZG1hLT53b3JrX3RhZykgewotCWJ1c19kbWFfdGFnX2Rlc3Ryb3koY2gtPmRtYS0+d29ya190 YWcpOwotCWNoLT5kbWEtPndvcmtfdGFnID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGNoLT5kbWEt PnNnX2J1cykgewotCWJ1c19kbWFtYXBfdW5sb2FkKGNoLT5kbWEtPnNnX3RhZywgY2gtPmRtYS0+ c2dfbWFwKTsKLQlidXNfZG1hbWVtX2ZyZWUoY2gtPmRtYS0+c2dfdGFnLCBjaC0+ZG1hLT5zZywg Y2gtPmRtYS0+c2dfbWFwKTsKLQljaC0+ZG1hLT5zZ19idXMgPSAwOwotCWNoLT5kbWEtPnNnX21h cCA9IE5VTEw7Ci0JY2gtPmRtYS0+c2cgPSBOVUxMOwotICAgIH0KLSAgICBpZiAoY2gtPmRtYS0+ ZGF0YV9tYXApIHsKLQlidXNfZG1hbWFwX2Rlc3Ryb3koY2gtPmRtYS0+ZGF0YV90YWcsIGNoLT5k bWEtPmRhdGFfbWFwKTsKLQljaC0+ZG1hLT5kYXRhX21hcCA9IE5VTEw7Ci0gICAgfQotICAgIGlm IChjaC0+ZG1hLT5zZ190YWcpIHsKLQlidXNfZG1hX3RhZ19kZXN0cm95KGNoLT5kbWEtPnNnX3Rh Zyk7Ci0JY2gtPmRtYS0+c2dfdGFnID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGNoLT5kbWEtPmRh dGFfdGFnKSB7Ci0JYnVzX2RtYV90YWdfZGVzdHJveShjaC0+ZG1hLT5kYXRhX3RhZyk7Ci0JY2gt PmRtYS0+ZGF0YV90YWcgPSBOVUxMOwotICAgIH0KLSAgICBpZiAoY2gtPmRtYS0+ZG1hdGFnKSB7 Ci0JYnVzX2RtYV90YWdfZGVzdHJveShjaC0+ZG1hLT5kbWF0YWcpOwotCWNoLT5kbWEtPmRtYXRh ZyA9IE5VTEw7CisgICAgLyogZnJlZSBhbGwgZG1hIHNsb3RzICovCisgICAgZm9yIChpID0gMDsg aSA8IEFUQV9ETUFfU0xPVFM7IGkrKykgeworCXN0cnVjdCBhdGFfZG1hc2xvdCAqc2xvdCA9ICZj aC0+ZG1hLnNsb3RbaV07CisKKwlpZiAoc2xvdC0+c2dfYnVzKSB7CisgICAgICAgICAgICBidXNf ZG1hbWFwX3VubG9hZChzbG90LT5zZ190YWcsIHNsb3QtPnNnX21hcCk7CisgICAgICAgICAgICBz bG90LT5zZ19idXMgPSAwOworCX0KKwlpZiAoc2xvdC0+c2dfbWFwKSB7CisgICAgICAgICAgICBi dXNfZG1hbWVtX2ZyZWUoc2xvdC0+c2dfdGFnLCBzbG90LT5zZywgc2xvdC0+c2dfbWFwKTsKKyAg ICAgICAgICAgIGJ1c19kbWFtYXBfZGVzdHJveShzbG90LT5zZ190YWcsIHNsb3QtPnNnX21hcCk7 CisgICAgICAgICAgICBzbG90LT5zZyA9IE5VTEw7CisgICAgICAgICAgICBzbG90LT5zZ19tYXAg PSBOVUxMOworCX0KKwlpZiAoc2xvdC0+ZGF0YV9tYXApIHsKKyAgICAgICAgICAgIGJ1c19kbWFt YXBfZGVzdHJveShzbG90LT5kYXRhX3RhZywgc2xvdC0+ZGF0YV9tYXApOworICAgICAgICAgICAg c2xvdC0+ZGF0YV9tYXAgPSBOVUxMOworCX0KKwlpZiAoc2xvdC0+c2dfdGFnKSB7CisgICAgICAg ICAgICBidXNfZG1hX3RhZ19kZXN0cm95KHNsb3QtPnNnX3RhZyk7CisgICAgICAgICAgICBzbG90 LT5zZ190YWcgPSBOVUxMOworCX0KKwlpZiAoc2xvdC0+ZGF0YV90YWcpIHsKKyAgICAgICAgICAg IGJ1c19kbWFfdGFnX2Rlc3Ryb3koc2xvdC0+ZGF0YV90YWcpOworICAgICAgICAgICAgc2xvdC0+ ZGF0YV90YWcgPSBOVUxMOworCX0KICAgICB9CiB9CiAKQEAgLTIxOCw2NyArMjU2LDgzIEBAIGF0 YV9kbWFzZXRwcmQodm9pZCAqeHNjLCBidXNfZG1hX3NlZ21lbnQKIH0KIAogc3RhdGljIGludAot YXRhX2RtYWxvYWQoZGV2aWNlX3QgZGV2LCBjYWRkcl90IGRhdGEsIGludDMyX3QgY291bnQsIGlu dCBkaXIsCi0JICAgIHZvaWQgKmFkZHIsIGludCAqZW50cmllcykKK2F0YV9kbWFsb2FkKHN0cnVj dCBhdGFfcmVxdWVzdCAqcmVxdWVzdCwgdm9pZCAqYWRkciwgaW50ICplbnRyaWVzKQogewotICAg IHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0gICAgc3Ry dWN0IGF0YV9kbWFzZXRwcmRfYXJncyBjYmE7CisgICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9 IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+cGFyZW50KTsKKyAgICBzdHJ1Y3QgYXRhX2Rldmlj ZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1ZXN0LT5kZXYpOworICAgIHN0cnVjdCBh dGFfZG1hc2V0cHJkX2FyZ3MgZHNwYTsKICAgICBpbnQgZXJyb3I7CiAKLSAgICBpZiAoY2gtPmRt YS0+ZmxhZ3MgJiBBVEFfRE1BX0xPQURFRCkgewotCWRldmljZV9wcmludGYoZGV2LCAiRkFJTFVS RSAtIGFscmVhZHkgYWN0aXZlIERNQSBvbiB0aGlzIGRldmljZVxuIik7CisgICAgQVRBX0RFQlVH X1JRKHJlcXVlc3QsICJkbWFsb2FkIik7CisKKyAgICBpZiAocmVxdWVzdC0+ZG1hKSB7CisJZGV2 aWNlX3ByaW50ZihyZXF1ZXN0LT5kZXYsCisJCSAgICAgICJGQUlMVVJFIC0gYWxyZWFkeSBhY3Rp dmUgRE1BIG9uIHRoaXMgZGV2aWNlXG4iKTsKIAlyZXR1cm4gRUlPOwogICAgIH0KLSAgICBpZiAo IWNvdW50KSB7Ci0JZGV2aWNlX3ByaW50ZihkZXYsICJGQUlMVVJFIC0gemVybyBsZW5ndGggRE1B IHRyYW5zZmVyIGF0dGVtcHRlZFxuIik7CisgICAgaWYgKCFyZXF1ZXN0LT5ieXRlY291bnQpIHsK KwlkZXZpY2VfcHJpbnRmKHJlcXVlc3QtPmRldiwKKwkJICAgICAgIkZBSUxVUkUgLSB6ZXJvIGxl bmd0aCBETUEgdHJhbnNmZXIgYXR0ZW1wdGVkXG4iKTsKIAlyZXR1cm4gRUlPOwogICAgIH0KLSAg ICBpZiAoKCh1aW50cHRyX3QpZGF0YSAmIChjaC0+ZG1hLT5hbGlnbm1lbnQgLSAxKSkgfHwKLQko Y291bnQgJiAoY2gtPmRtYS0+YWxpZ25tZW50IC0gMSkpKSB7Ci0JZGV2aWNlX3ByaW50ZihkZXYs ICJGQUlMVVJFIC0gbm9uIGFsaWduZWQgRE1BIHRyYW5zZmVyIGF0dGVtcHRlZFxuIik7CisgICAg aWYgKCgodWludHB0cl90KShyZXF1ZXN0LT5kYXRhKSAmIChjaC0+ZG1hLmFsaWdubWVudCAtIDEp KSB8fAorCShyZXF1ZXN0LT5ieXRlY291bnQgJiAoY2gtPmRtYS5hbGlnbm1lbnQgLSAxKSkpIHsK KwlkZXZpY2VfcHJpbnRmKHJlcXVlc3QtPmRldiwKKwkJICAgICAgIkZBSUxVUkUgLSBub24gYWxp Z25lZCBETUEgdHJhbnNmZXIgYXR0ZW1wdGVkXG4iKTsKIAlyZXR1cm4gRUlPOwogICAgIH0KLSAg ICBpZiAoY291bnQgPiBjaC0+ZG1hLT5tYXhfaW9zaXplKSB7Ci0JZGV2aWNlX3ByaW50ZihkZXYs ICJGQUlMVVJFIC0gb3ZlcnNpemVkIERNQSB0cmFuc2ZlciBhdHRlbXB0ICVkID4gJWRcbiIsCi0J CSAgICAgIGNvdW50LCBjaC0+ZG1hLT5tYXhfaW9zaXplKTsKKyAgICBpZiAocmVxdWVzdC0+Ynl0 ZWNvdW50ID4gY2gtPmRtYS5tYXhfaW9zaXplKSB7CisJZGV2aWNlX3ByaW50ZihyZXF1ZXN0LT5k ZXYsCisJCSAgICAgICJGQUlMVVJFIC0gb3ZlcnNpemVkIERNQSB0cmFuc2ZlciBhdHRlbXB0ICVk ID4gJWRcbiIsCisJCSAgICAgIHJlcXVlc3QtPmJ5dGVjb3VudCwgY2gtPmRtYS5tYXhfaW9zaXpl KTsKIAlyZXR1cm4gRUlPOwogICAgIH0KIAotICAgIGNiYS5kbWF0YWIgPSBhZGRyOwotCi0gICAg aWYgKChlcnJvciA9IGJ1c19kbWFtYXBfbG9hZChjaC0+ZG1hLT5kYXRhX3RhZywgY2gtPmRtYS0+ ZGF0YV9tYXAsCi0JCQkJIGRhdGEsIGNvdW50LCBjaC0+ZG1hLT5zZXRwcmQsICZjYmEsCi0JCQkJ IEJVU19ETUFfTk9XQUlUKSkgfHwgKGVycm9yID0gY2JhLmVycm9yKSkKLQlyZXR1cm4gZXJyb3I7 Ci0KLSAgICAqZW50cmllcyA9IGNiYS5uc2VnczsKKyAgICAvKiBzZXQgb3VyIHNsb3QsIHVuaXQg Zm9yIHNpbXBsaWNpdHkgWFhYIFNPUyBOQ1Egd2lsbCBjaGFuZ2UgdGhhdCAqLworICAgIHJlcXVl c3QtPmRtYSA9ICZjaC0+ZG1hLnNsb3RbYXRhZGV2LT51bml0XTsKIAotICAgIGJ1c19kbWFtYXBf c3luYyhjaC0+ZG1hLT5zZ190YWcsIGNoLT5kbWEtPnNnX21hcCwgQlVTX0RNQVNZTkNfUFJFV1JJ VEUpOworICAgIGlmIChhZGRyKQorCWRzcGEuZG1hdGFiID0gYWRkcjsKKyAgICBlbHNlCisJZHNw YS5kbWF0YWIgPSByZXF1ZXN0LT5kbWEtPnNnOworCisgICAgaWYgKChlcnJvciA9IGJ1c19kbWFt YXBfbG9hZChyZXF1ZXN0LT5kbWEtPmRhdGFfdGFnLCByZXF1ZXN0LT5kbWEtPmRhdGFfbWFwLAor CQkJCSByZXF1ZXN0LT5kYXRhLCByZXF1ZXN0LT5ieXRlY291bnQsCisJCQkJIGNoLT5kbWEuc2V0 cHJkLCAmZHNwYSwgQlVTX0RNQV9OT1dBSVQpKSB8fAorCQkJCSAoZXJyb3IgPSBkc3BhLmVycm9y KSkgeworCWRldmljZV9wcmludGYocmVxdWVzdC0+ZGV2LCAiRkFJTFVSRSAtIGxvYWQgZGF0YVxu Iik7CisJZ290byBlcnJvcjsKKyAgICB9CiAKLSAgICBidXNfZG1hbWFwX3N5bmMoY2gtPmRtYS0+ ZGF0YV90YWcsIGNoLT5kbWEtPmRhdGFfbWFwLAotCQkgICAgZGlyID8gQlVTX0RNQVNZTkNfUFJF UkVBRCA6IEJVU19ETUFTWU5DX1BSRVdSSVRFKTsKKyAgICBpZiAoZW50cmllcykKKwkqZW50cmll cyA9IGRzcGEubnNlZ3M7CiAKLSAgICBjaC0+ZG1hLT5jdXJfaW9zaXplID0gY291bnQ7Ci0gICAg Y2gtPmRtYS0+ZmxhZ3MgPSBkaXIgPyAoQVRBX0RNQV9MT0FERUQgfCBBVEFfRE1BX1JFQUQpIDog QVRBX0RNQV9MT0FERUQ7CisgICAgYnVzX2RtYW1hcF9zeW5jKHJlcXVlc3QtPmRtYS0+c2dfdGFn LCByZXF1ZXN0LT5kbWEtPnNnX21hcCwKKwkJICAgIEJVU19ETUFTWU5DX1BSRVdSSVRFKTsKKyAg ICBidXNfZG1hbWFwX3N5bmMocmVxdWVzdC0+ZG1hLT5kYXRhX3RhZywgcmVxdWVzdC0+ZG1hLT5k YXRhX21hcCwKKwkJICAgIChyZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1JFQUQpID8KKwkJICAgIEJV U19ETUFTWU5DX1BSRVJFQUQgOiBCVVNfRE1BU1lOQ19QUkVXUklURSk7CiAgICAgcmV0dXJuIDA7 CisKK2Vycm9yOgorICAgIGF0YV9kbWF1bmxvYWQocmVxdWVzdCk7CisgICAgcmV0dXJuIEVJTzsK IH0KIAogaW50Ci1hdGFfZG1hdW5sb2FkKGRldmljZV90IGRldikKK2F0YV9kbWF1bmxvYWQoc3Ry dWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0KQogewotICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2gg PSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisgICAgQVRBX0RFQlVHX1JRKHJlcXVlc3QsICJkbWF1 bmxvYWQiKTsKIAotICAgIGlmIChjaC0+ZG1hLT5mbGFncyAmIEFUQV9ETUFfTE9BREVEKSB7Ci0J YnVzX2RtYW1hcF9zeW5jKGNoLT5kbWEtPnNnX3RhZywgY2gtPmRtYS0+c2dfbWFwLAorICAgIGlm IChyZXF1ZXN0LT5kbWEpIHsKKwlidXNfZG1hbWFwX3N5bmMocmVxdWVzdC0+ZG1hLT5zZ190YWcs IHJlcXVlc3QtPmRtYS0+c2dfbWFwLAogCQkJQlVTX0RNQVNZTkNfUE9TVFdSSVRFKTsKLQotCWJ1 c19kbWFtYXBfc3luYyhjaC0+ZG1hLT5kYXRhX3RhZywgY2gtPmRtYS0+ZGF0YV9tYXAsCi0JCQko Y2gtPmRtYS0+ZmxhZ3MgJiBBVEFfRE1BX1JFQUQpID8KKwlidXNfZG1hbWFwX3N5bmMocmVxdWVz dC0+ZG1hLT5kYXRhX3RhZywgcmVxdWVzdC0+ZG1hLT5kYXRhX21hcCwKKwkJCShyZXF1ZXN0LT5m bGFncyAmIEFUQV9SX1JFQUQpID8KIAkJCUJVU19ETUFTWU5DX1BPU1RSRUFEIDogQlVTX0RNQVNZ TkNfUE9TVFdSSVRFKTsKLQlidXNfZG1hbWFwX3VubG9hZChjaC0+ZG1hLT5kYXRhX3RhZywgY2gt PmRtYS0+ZGF0YV9tYXApOwogCi0JY2gtPmRtYS0+Y3VyX2lvc2l6ZSA9IDA7Ci0JY2gtPmRtYS0+ ZmxhZ3MgJj0gfkFUQV9ETUFfTE9BREVEOworCWJ1c19kbWFtYXBfdW5sb2FkKHJlcXVlc3QtPmRt YS0+ZGF0YV90YWcsIHJlcXVlc3QtPmRtYS0+ZGF0YV9tYXApOworICAgICAgICByZXF1ZXN0LT5k bWEgPSBOVUxMOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KLS0tIHNyYy9zeXMvZGV2L2F0YS9h dGEtaXNhLmMJMjAwNy0wMi0yMSAyMjowNzoxOC4wMDAwMDAwMDAgKzAzMDAKKysrIHNyYy9zeXMv ZGV2L2F0YS9hdGEtaXNhLmMJMjAwOC0wNC0xMCAxNzowNTowNS4wMDAwMDAwMDAgKzA0MDAKQEAg LTEsNSArMSw1IEBACiAvKi0KLSAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDcgU/hyZW4gU2No bWlkdCA8c29zQEZyZWVCU0Qub3JnPgorICogQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwOCBT+HJl biBTY2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAotLS0gc3JjL3N5cy9kZXYvYXRhL2F0YS1sb3dsZXZlbC5jCTIwMDgtMDEt MDkgMTE6NTQ6NDguMDAwMDAwMDAwICswMzAwCisrKyBzcmMvc3lzL2Rldi9hdGEvYXRhLWxvd2xl dmVsLmMJMjAwOC0wNS0wOCAyMTo1NTo0NC4wMDAwMDAwMDAgKzA0MDAKQEAgLTEsNSArMSw1IEBA CiAvKi0KLSAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDcgU/hyZW4gU2NobWlkdCA8c29zQEZy ZWVCU0Qub3JnPgorICogQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwOCBT+HJlbiBTY2htaWR0IDxz b3NARnJlZUJTRC5vcmc+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dApAQCAtNjQsMTYgKzY0LDE5IEBAIGF0YV9nZW5lcmljX2h3KGRldmljZV90IGRldikKICAgICBj aC0+aHcuYmVnaW5fdHJhbnNhY3Rpb24gPSBhdGFfYmVnaW5fdHJhbnNhY3Rpb247CiAgICAgY2gt Pmh3LmVuZF90cmFuc2FjdGlvbiA9IGF0YV9lbmRfdHJhbnNhY3Rpb247CiAgICAgY2gtPmh3LnN0 YXR1cyA9IGF0YV9nZW5lcmljX3N0YXR1czsKKyAgICBjaC0+aHcuc29mdHJlc2V0ID0gTlVMTDsK ICAgICBjaC0+aHcuY29tbWFuZCA9IGF0YV9nZW5lcmljX2NvbW1hbmQ7CiAgICAgY2gtPmh3LnRm X3JlYWQgPSBhdGFfdGZfcmVhZDsKICAgICBjaC0+aHcudGZfd3JpdGUgPSBhdGFfdGZfd3JpdGU7 CisgICAgY2gtPmh3LnBtX3JlYWQgPSBOVUxMOworICAgIGNoLT5ody5wbV93cml0ZSA9IE5VTEw7 CiB9CiAKIC8qIG11c3QgYmUgY2FsbGVkIHdpdGggQVRBIGNoYW5uZWwgbG9ja2VkIGFuZCBzdGF0 ZV9tdHggaGVsZCAqLwogaW50CiBhdGFfYmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0IGF0YV9yZXF1 ZXN0ICpyZXF1ZXN0KQogewotICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0 X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KHJlcXVlc3QtPmRldikpOworICAgIHN0cnVjdCBhdGFf Y2hhbm5lbCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKHJlcXVlc3QtPnBhcmVudCk7CiAgICAgc3Ry dWN0IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+ZGV2KTsK ICAgICBpbnQgZHVtbXksIGVycm9yOwogCkBAIC0xMzMsOSArMTM2LDcgQEAgYXRhX2JlZ2luX3Ry YW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVxdWVzdAogICAgIC8qIEFUQSBETUEgZGF0YSB0cmFuc2Zl ciBjb21tYW5kcyAqLwogICAgIGNhc2UgQVRBX1JfRE1BOgogCS8qIGNoZWNrIHNhbml0eSwgc2V0 dXAgU0cgbGlzdCBhbmQgRE1BIGVuZ2luZSAqLwotCWlmICgoZXJyb3IgPSBjaC0+ZG1hLT5sb2Fk KGNoLT5kZXYsIHJlcXVlc3QtPmRhdGEsIHJlcXVlc3QtPmJ5dGVjb3VudCwKLQkJCQkgICByZXF1 ZXN0LT5mbGFncyAmIEFUQV9SX1JFQUQsIGNoLT5kbWEtPnNnLCAKLQkJCQkgICAmZHVtbXkpKSkg eworCWlmICgoZXJyb3IgPSBjaC0+ZG1hLmxvYWQocmVxdWVzdCwgTlVMTCwgJmR1bW15KSkpIHsK IAkgICAgZGV2aWNlX3ByaW50ZihyZXF1ZXN0LT5kZXYsICJzZXR0aW5nIHVwIERNQSBmYWlsZWRc biIpOwogCSAgICByZXF1ZXN0LT5yZXN1bHQgPSBlcnJvcjsKIAkgICAgZ290byBiZWdpbl9maW5p c2hlZDsKQEAgLTE1MCw3ICsxNTEsNyBAQCBhdGFfYmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0IGF0 YV9yZXF1ZXN0CiAJfQogCiAJLyogc3RhcnQgRE1BIGVuZ2luZSAqLwotCWlmIChjaC0+ZG1hLT5z dGFydCAmJiBjaC0+ZG1hLT5zdGFydChyZXF1ZXN0LT5kZXYpKSB7CisJaWYgKGNoLT5kbWEuc3Rh cnQgJiYgY2gtPmRtYS5zdGFydChyZXF1ZXN0KSkgewogCSAgICBkZXZpY2VfcHJpbnRmKHJlcXVl c3QtPmRldiwgImVycm9yIHN0YXJ0aW5nIERNQVxuIik7CiAJICAgIHJlcXVlc3QtPnJlc3VsdCA9 IEVJTzsKIAkgICAgZ290byBiZWdpbl9maW5pc2hlZDsKQEAgLTE2MSw3ICsxNjIsNyBAQCBhdGFf YmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0IGF0YV9yZXF1ZXN0CiAgICAgY2FzZSBBVEFfUl9BVEFQ SToKIAkvKiBpcyB0aGlzIGp1c3QgYSBQT0xMIERTQyBjb21tYW5kID8gKi8KIAlpZiAocmVxdWVz dC0+dS5hdGFwaS5jY2JbMF0gPT0gQVRBUElfUE9MTF9EU0MpIHsKLQkgICAgQVRBX0lEWF9PVVRC KGNoLCBBVEFfRFJJVkUsIEFUQV9EX0lCTSB8IGF0YWRldi0+dW5pdCk7CisJICAgIEFUQV9JRFhf T1VUQihjaCwgQVRBX0RSSVZFLCBBVEFfRF9JQk0gfCBBVEFfREVWKGF0YWRldi0+dW5pdCkpOwog CSAgICBERUxBWSgxMCk7CiAJICAgIGlmICghKEFUQV9JRFhfSU5CKGNoLCBBVEFfQUxUU1RBVCkg JiBBVEFfU19EU0MpKQogCQlyZXF1ZXN0LT5yZXN1bHQgPSBFQlVTWTsKQEAgLTE4MCw3ICsxODEs NyBAQCBhdGFfYmVnaW5fdHJhbnNhY3Rpb24oc3RydWN0IGF0YV9yZXF1ZXN0CiAgICAgY2FzZSBB VEFfUl9BVEFQSXxBVEFfUl9ETUE6CiAJLyogaXMgdGhpcyBqdXN0IGEgUE9MTCBEU0MgY29tbWFu ZCA/ICovCiAJaWYgKHJlcXVlc3QtPnUuYXRhcGkuY2NiWzBdID09IEFUQVBJX1BPTExfRFNDKSB7 Ci0JICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZFLCBBVEFfRF9JQk0gfCBhdGFkZXYtPnVu aXQpOworCSAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9EUklWRSwgQVRBX0RfSUJNIHwgQVRBX0RF VihhdGFkZXYtPnVuaXQpKTsKIAkgICAgREVMQVkoMTApOwogCSAgICBpZiAoIShBVEFfSURYX0lO QihjaCwgQVRBX0FMVFNUQVQpICYgQVRBX1NfRFNDKSkKIAkJcmVxdWVzdC0+cmVzdWx0ID0gRUJV U1k7CkBAIC0xODgsOSArMTg5LDcgQEAgYXRhX2JlZ2luX3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFf cmVxdWVzdAogCX0KIAogCS8qIGNoZWNrIHNhbml0eSwgc2V0dXAgU0cgbGlzdCBhbmQgRE1BIGVu Z2luZSAqLwotCWlmICgoZXJyb3IgPSBjaC0+ZG1hLT5sb2FkKGNoLT5kZXYsIHJlcXVlc3QtPmRh dGEsIHJlcXVlc3QtPmJ5dGVjb3VudCwKLQkJCQkgICByZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1JF QUQsIGNoLT5kbWEtPnNnLAotCQkJCSAgICZkdW1teSkpKSB7CisJaWYgKChlcnJvciA9IGNoLT5k bWEubG9hZChyZXF1ZXN0LCBOVUxMLCAmZHVtbXkpKSkgewogCSAgICBkZXZpY2VfcHJpbnRmKHJl cXVlc3QtPmRldiwgInNldHRpbmcgdXAgRE1BIGZhaWxlZFxuIik7CiAJICAgIHJlcXVlc3QtPnJl c3VsdCA9IGVycm9yOwogCSAgICBnb3RvIGJlZ2luX2ZpbmlzaGVkOwpAQCAtMjA0LDcgKzIwMyw3 IEBAIGF0YV9iZWdpbl90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVlc3QKIAl9CiAKIAkvKiBz dGFydCBETUEgZW5naW5lICovCi0JaWYgKGNoLT5kbWEtPnN0YXJ0ICYmIGNoLT5kbWEtPnN0YXJ0 KHJlcXVlc3QtPmRldikpIHsKKwlpZiAoY2gtPmRtYS5zdGFydCAmJiBjaC0+ZG1hLnN0YXJ0KHJl cXVlc3QpKSB7CiAJICAgIHJlcXVlc3QtPnJlc3VsdCA9IEVJTzsKIAkgICAgZ290byBiZWdpbl9m aW5pc2hlZDsKIAl9CkBAIC0yMTQsOCArMjEzLDkgQEAgYXRhX2JlZ2luX3RyYW5zYWN0aW9uKHN0 cnVjdCBhdGFfcmVxdWVzdAogICAgIHByaW50ZigiYXRhX2JlZ2luX3RyYW5zYWN0aW9uIE9PUFMh ISFcbiIpOwogCiBiZWdpbl9maW5pc2hlZDoKLSAgICBpZiAoY2gtPmRtYSAmJiBjaC0+ZG1hLT5m bGFncyAmIEFUQV9ETUFfTE9BREVEKQotCWNoLT5kbWEtPnVubG9hZChjaC0+ZGV2KTsKKyAgICBp ZiAoY2gtPmRtYS51bmxvYWQpIHsKKyAgICAgICAgY2gtPmRtYS51bmxvYWQocmVxdWVzdCk7Cisg ICAgfQogICAgIHJldHVybiBBVEFfT1BfRklOSVNIRUQ7CiAKIGJlZ2luX2NvbnRpbnVlOgpAQCAt MjI4LDcgKzIyOCw3IEBAIGJlZ2luX2NvbnRpbnVlOgogaW50CiBhdGFfZW5kX3RyYW5zYWN0aW9u KHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCkKIHsKLSAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwg KmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChyZXF1ZXN0LT5kZXYpKTsK KyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1ZXN0LT5w YXJlbnQpOwogICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZpY2VfZ2V0X3NvZnRj KHJlcXVlc3QtPmRldik7CiAgICAgaW50IGxlbmd0aDsKIApAQCAtMzE0LDE5ICszMTQsMTkgQEAg YXRhX2VuZF90cmFuc2FjdGlvbihzdHJ1Y3QgYXRhX3JlcXVlc3QgKgogICAgIGNhc2UgQVRBX1Jf RE1BOgogCiAJLyogc3RvcCBETUEgZW5naW5lIGFuZCBnZXQgc3RhdHVzICovCi0JaWYgKGNoLT5k bWEtPnN0b3ApCi0JICAgIHJlcXVlc3QtPmRtYXN0YXQgPSBjaC0+ZG1hLT5zdG9wKHJlcXVlc3Qt PmRldik7CisJaWYgKGNoLT5kbWEuc3RvcCkKKwkgICAgcmVxdWVzdC0+ZG1hLT5zdGF0dXMgPSBj aC0+ZG1hLnN0b3AocmVxdWVzdCk7CiAKIAkvKiBkaWQgd2UgZ2V0IGVycm9yIG9yIGRhdGEgKi8K IAlpZiAocmVxdWVzdC0+c3RhdHVzICYgQVRBX1NfRVJST1IpCiAJICAgIHJlcXVlc3QtPmVycm9y ID0gQVRBX0lEWF9JTkIoY2gsIEFUQV9FUlJPUik7Ci0JZWxzZSBpZiAocmVxdWVzdC0+ZG1hc3Rh dCAmIEFUQV9CTVNUQVRfRVJST1IpCisJZWxzZSBpZiAocmVxdWVzdC0+ZG1hLT5zdGF0dXMgJiBB VEFfQk1TVEFUX0VSUk9SKQogCSAgICByZXF1ZXN0LT5zdGF0dXMgfD0gQVRBX1NfRVJST1I7CiAJ ZWxzZSBpZiAoIShyZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1RJTUVPVVQpKQogCSAgICByZXF1ZXN0 LT5kb25lY291bnQgPSByZXF1ZXN0LT5ieXRlY291bnQ7CiAKIAkvKiByZWxlYXNlIFNHIGxpc3Qg ZXRjICovCi0JY2gtPmRtYS0+dW5sb2FkKGNoLT5kZXYpOworCWNoLT5kbWEudW5sb2FkKHJlcXVl c3QpOwogCiAJLyogZG9uZSB3aXRoIEhXICovCiAJZ290byBlbmRfZmluaXNoZWQ7CkBAIC00MjYs MTkgKzQyNiwxOSBAQCBhdGFfZW5kX3RyYW5zYWN0aW9uKHN0cnVjdCBhdGFfcmVxdWVzdCAqCiAg ICAgY2FzZSBBVEFfUl9BVEFQSXxBVEFfUl9ETUE6CiAKIAkvKiBzdG9wIERNQSBlbmdpbmUgYW5k IGdldCBzdGF0dXMgKi8KLQlpZiAoY2gtPmRtYS0+c3RvcCkKLQkgICAgcmVxdWVzdC0+ZG1hc3Rh dCA9IGNoLT5kbWEtPnN0b3AocmVxdWVzdC0+ZGV2KTsKKwlpZiAoY2gtPmRtYS5zdG9wKQorCSAg ICByZXF1ZXN0LT5kbWEtPnN0YXR1cyA9IGNoLT5kbWEuc3RvcChyZXF1ZXN0KTsKIAogCS8qIGRp ZCB3ZSBnZXQgZXJyb3Igb3IgZGF0YSAqLwogCWlmIChyZXF1ZXN0LT5zdGF0dXMgJiAoQVRBX1Nf RVJST1IgfCBBVEFfU19EV0YpKQogCSAgICByZXF1ZXN0LT5lcnJvciA9IEFUQV9JRFhfSU5CKGNo LCBBVEFfRVJST1IpOwotCWVsc2UgaWYgKHJlcXVlc3QtPmRtYXN0YXQgJiBBVEFfQk1TVEFUX0VS Uk9SKQorCWVsc2UgaWYgKHJlcXVlc3QtPmRtYS0+c3RhdHVzICYgQVRBX0JNU1RBVF9FUlJPUikK IAkgICAgcmVxdWVzdC0+c3RhdHVzIHw9IEFUQV9TX0VSUk9SOwogCWVsc2UgaWYgKCEocmVxdWVz dC0+ZmxhZ3MgJiBBVEFfUl9USU1FT1VUKSkKIAkgICAgcmVxdWVzdC0+ZG9uZWNvdW50ID0gcmVx dWVzdC0+Ynl0ZWNvdW50OwogIAogCS8qIHJlbGVhc2UgU0cgbGlzdCBldGMgKi8KLQljaC0+ZG1h LT51bmxvYWQoY2gtPmRldik7CisJY2gtPmRtYS51bmxvYWQocmVxdWVzdCk7CiAKIAkvKiBkb25l IHdpdGggSFcgKi8KIAlnb3RvIGVuZF9maW5pc2hlZDsKQEAgLTQ2NSw3ICs0NjUsNyBAQCBhdGFf Z2VuZXJpY19yZXNldChkZXZpY2VfdCBkZXYpCiAgICAgaW50IG1hc2sgPSAwLCB0aW1lb3V0Owog CiAgICAgLyogZG8gd2UgaGF2ZSBhbnkgc2lnbnMgb2YgQVRBL0FUQVBJIEhXIGJlaW5nIHByZXNl bnQgPyAqLwotICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZFLCBBVEFfRF9JQk0gfCBBVEFf RF9MQkEgfCBBVEFfTUFTVEVSKTsKKyAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9EUklWRSwgQVRB X0RfSUJNIHwgQVRBX0RfTEJBIHwgQVRBX0RFVihBVEFfTUFTVEVSKSk7CiAgICAgREVMQVkoMTAp OwogICAgIG9zdGF0MCA9IEFUQV9JRFhfSU5CKGNoLCBBVEFfU1RBVFVTKTsKICAgICBpZiAoKG9z dGF0MCAmIDB4ZjgpICE9IDB4ZjggJiYgb3N0YXQwICE9IDB4YTUpIHsKQEAgLTQ3NSw3ICs0NzUs NyBAQCBhdGFfZ2VuZXJpY19yZXNldChkZXZpY2VfdCBkZXYpCiAKICAgICAvKiBpbiBzb21lIHNl dHVwcyB3ZSBkb250IHdhbnQgdG8gdGVzdCBmb3IgYSBzbGF2ZSAqLwogICAgIGlmICghKGNoLT5m bGFncyAmIEFUQV9OT19TTEFWRSkpIHsKLQlBVEFfSURYX09VVEIoY2gsIEFUQV9EUklWRSwgQVRB X0RfSUJNIHwgQVRBX0RfTEJBIHwgQVRBX1NMQVZFKTsKKwlBVEFfSURYX09VVEIoY2gsIEFUQV9E UklWRSwgQVRBX0RfSUJNIHwgQVRBX0RfTEJBIHwgQVRBX0RFVihBVEFfU0xBVkUpKTsKIAlERUxB WSgxMCk7ICAgICAgCiAJb3N0YXQxID0gQVRBX0lEWF9JTkIoY2gsIEFUQV9TVEFUVVMpOwogCWlm ICgob3N0YXQxICYgMHhmOCkgIT0gMHhmOCAmJiBvc3RhdDEgIT0gMHhhNSkgewpAQCAtNDk1LDcg KzQ5NSw3IEBAIGF0YV9nZW5lcmljX3Jlc2V0KGRldmljZV90IGRldikKIAlyZXR1cm47CiAKICAg ICAvKiByZXNldCAoYm90aCkgZGV2aWNlcyBvbiB0aGlzIGNoYW5uZWwgKi8KLSAgICBBVEFfSURY X09VVEIoY2gsIEFUQV9EUklWRSwgQVRBX0RfSUJNIHwgQVRBX0RfTEJBIHwgQVRBX01BU1RFUik7 CisgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfRFJJVkUsIEFUQV9EX0lCTSB8IEFUQV9EX0xCQSB8 IEFUQV9ERVYoQVRBX01BU1RFUikpOwogICAgIERFTEFZKDEwKTsKICAgICBBVEFfSURYX09VVEIo Y2gsIEFUQV9DT05UUk9MLCBBVEFfQV9JRFMgfCBBVEFfQV9SRVNFVCk7CiAgICAgYXRhX3VkZWxh eSgxMDAwMCk7IApAQCAtNTA2LDcgKzUwNiw3IEBAIGF0YV9nZW5lcmljX3Jlc2V0KGRldmljZV90 IGRldikKICAgICAvKiB3YWl0IGZvciBCVVNZIHRvIGdvIGluYWN0aXZlICovCiAgICAgZm9yICh0 aW1lb3V0ID0gMDsgdGltZW91dCA8IDMxMDsgdGltZW91dCsrKSB7CiAJaWYgKChtYXNrICYgMHgw MSkgJiYgKHN0YXQwICYgQVRBX1NfQlVTWSkpIHsKLQkgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFf RFJJVkUsIEFUQV9EX0lCTSB8IEFUQV9NQVNURVIpOworCSAgICBBVEFfSURYX09VVEIoY2gsIEFU QV9EUklWRSwgQVRBX0RfSUJNIHwgQVRBX0RFVihBVEFfTUFTVEVSKSk7CiAJICAgIERFTEFZKDEw KTsKIAkgICAgZXJyID0gQVRBX0lEWF9JTkIoY2gsIEFUQV9FUlJPUik7CiAJICAgIGxzYiA9IEFU QV9JRFhfSU5CKGNoLCBBVEFfQ1lMX0xTQik7CkBAIC01MzYsNyArNTM2LDcgQEAgYXRhX2dlbmVy aWNfcmVzZXQoZGV2aWNlX3QgZGV2KQogCiAJaWYgKChtYXNrICYgMHgwMikgJiYgKHN0YXQxICYg QVRBX1NfQlVTWSkgJiYKIAkgICAgISgobWFzayAmIDB4MDEpICYmIChzdGF0MCAmIEFUQV9TX0JV U1kpKSkgewotCSAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9EUklWRSwgQVRBX0RfSUJNIHwgQVRB X1NMQVZFKTsKKwkgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfRFJJVkUsIEFUQV9EX0lCTSB8IEFU QV9ERVYoQVRBX1NMQVZFKSk7CiAJICAgIERFTEFZKDEwKTsKIAkgICAgZXJyID0gQVRBX0lEWF9J TkIoY2gsIEFUQV9FUlJPUik7CiAJICAgIGxzYiA9IEFUQV9JRFhfSU5CKGNoLCBBVEFfQ1lMX0xT Qik7CkBAIC01ODQsOSArNTg0LDggQEAgYXRhX2dlbmVyaWNfcmVzZXQoZGV2aWNlX3QgZGV2KQog ICAgIH0KIAogICAgIGlmIChib290dmVyYm9zZSkKLQlkZXZpY2VfcHJpbnRmKGRldiwgInJlc2V0 IHRwMiBzdGF0MD0lMDJ4IHN0YXQxPSUwMnggZGV2aWNlcz0weCViXG4iLAotCQkgICAgICBzdGF0 MCwgc3RhdDEsIGNoLT5kZXZpY2VzLAotCQkgICAgICAiXDIwXDRBVEFQSV9TTEFWRVwzQVRBUElf TUFTVEVSXDJBVEFfU0xBVkVcMUFUQV9NQVNURVIiKTsKKwlkZXZpY2VfcHJpbnRmKGRldiwgInJl c2V0IHRwMiBzdGF0MD0lMDJ4IHN0YXQxPSUwMnggZGV2aWNlcz0weCV4XG4iLAorCQkgICAgICBz dGF0MCwgc3RhdDEsIGNoLT5kZXZpY2VzKTsKIH0KIAogLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBB VEEgY2hhbm5lbCBsb2NrZWQgYW5kIHN0YXRlX210eCBoZWxkICovCkBAIC02MTcsNyArNjE2LDcg QEAgYXRhX3dhaXQoc3RydWN0IGF0YV9jaGFubmVsICpjaCwgc3RydWN0IAogCiAJLyogaWYgZHJp dmUgZmFpbHMgc3RhdHVzLCByZXNlbGVjdCB0aGUgZHJpdmUgYW5kIHRyeSBhZ2FpbiAqLwogCWlm IChzdGF0dXMgPT0gMHhmZikgewotCSAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9EUklWRSwgQVRB X0RfSUJNIHwgYXRhZGV2LT51bml0KTsKKwkgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfRFJJVkUs IEFUQV9EX0lCTSB8IEFUQV9ERVYoYXRhZGV2LT51bml0KSk7CiAJICAgIHRpbWVvdXQgKz0gMTAw MDsKIAkgICAgREVMQVkoMTAwMCk7CiAJICAgIGNvbnRpbnVlOwpAQCAtNjU3LDExICs2NTYsMTEg QEAgYXRhX3dhaXQoc3RydWN0IGF0YV9jaGFubmVsICpjaCwgc3RydWN0IAogaW50CiBhdGFfZ2Vu ZXJpY19jb21tYW5kKHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCkKIHsKLSAgICBzdHJ1Y3Qg YXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChyZXF1 ZXN0LT5kZXYpKTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0 YyhyZXF1ZXN0LT5wYXJlbnQpOwogICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZp Y2VfZ2V0X3NvZnRjKHJlcXVlc3QtPmRldik7CiAKICAgICAvKiBzZWxlY3QgZGV2aWNlICovCi0g ICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfRFJJVkUsIEFUQV9EX0lCTSB8IEFUQV9EX0xCQSB8IGF0 YWRldi0+dW5pdCk7CisgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfRFJJVkUsIEFUQV9EX0lCTSB8 IEFUQV9EX0xCQSB8IEFUQV9ERVYoYXRhZGV2LT51bml0KSk7CiAKICAgICAvKiByZWFkeSB0byBp c3N1ZSBjb21tYW5kID8gKi8KICAgICBpZiAoYXRhX3dhaXQoY2gsIGF0YWRldiwgMCkgPCAwKSB7 IApAQCAtNzI4LDcgKzcyNyw3IEBAIGF0YV9nZW5lcmljX2NvbW1hbmQoc3RydWN0IGF0YV9yZXF1 ZXN0ICoKIHN0YXRpYyB2b2lkCiBhdGFfdGZfcmVhZChzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVl c3QpCiB7Ci0gICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2 aWNlX2dldF9wYXJlbnQocmVxdWVzdC0+ZGV2KSk7CisgICAgc3RydWN0IGF0YV9jaGFubmVsICpj aCA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+cGFyZW50KTsKICAgICBzdHJ1Y3QgYXRhX2Rl dmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhyZXF1ZXN0LT5kZXYpOwogCiAgICAgaWYg KGF0YWRldi0+ZmxhZ3MgJiBBVEFfRF80OEJJVF9BQ1RJVkUpIHsKQEAgLTc1OCw3ICs3NTcsNyBA QCBhdGFfdGZfcmVhZChzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpCiBzdGF0aWMgdm9pZAog YXRhX3RmX3dyaXRlKHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCkKIHsKLSAgICBzdHJ1Y3Qg YXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChyZXF1 ZXN0LT5kZXYpKTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0 YyhyZXF1ZXN0LT5wYXJlbnQpOwogICAgIHN0cnVjdCBhdGFfZGV2aWNlICphdGFkZXYgPSBkZXZp Y2VfZ2V0X3NvZnRjKHJlcXVlc3QtPmRldik7CiAKICAgICBpZiAoYXRhZGV2LT5mbGFncyAmIEFU QV9EXzQ4QklUX0FDVElWRSkgewpAQCAtNzcyLDcgKzc3MSw3IEBAIGF0YV90Zl93cml0ZShzdHJ1 Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QKIAlBVEFfSURYX09VVEIoY2gsIEFUQV9DWUxfTFNCLCBy ZXF1ZXN0LT51LmF0YS5sYmEgPj4gOCk7CiAJQVRBX0lEWF9PVVRCKGNoLCBBVEFfQ1lMX01TQiwg cmVxdWVzdC0+dS5hdGEubGJhID4+IDQwKTsKIAlBVEFfSURYX09VVEIoY2gsIEFUQV9DWUxfTVNC LCByZXF1ZXN0LT51LmF0YS5sYmEgPj4gMTYpOwotCUFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZF LCBBVEFfRF9MQkEgfCBhdGFkZXYtPnVuaXQpOworCUFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZF LCBBVEFfRF9MQkEgfCBBVEFfREVWKGF0YWRldi0+dW5pdCkpOwogICAgIH0KICAgICBlbHNlIHsK IAlBVEFfSURYX09VVEIoY2gsIEFUQV9GRUFUVVJFLCByZXF1ZXN0LT51LmF0YS5mZWF0dXJlKTsK QEAgLTc5NCw3ICs3OTMsNyBAQCBhdGFfdGZfd3JpdGUoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1 ZXN0CiAJCQkgKHJlcXVlc3QtPnUuYXRhLmxiYSAvIChzZWN0b3JzICogaGVhZHMpKSk7CiAJICAg IEFUQV9JRFhfT1VUQihjaCwgQVRBX0NZTF9NU0IsCiAJCQkgKHJlcXVlc3QtPnUuYXRhLmxiYSAv IChzZWN0b3JzICogaGVhZHMpKSA+PiA4KTsKLQkgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfRFJJ VkUsIEFUQV9EX0lCTSB8IGF0YWRldi0+dW5pdCB8IAorCSAgICBBVEFfSURYX09VVEIoY2gsIEFU QV9EUklWRSwgQVRBX0RfSUJNIHwgQVRBX0RFVihhdGFkZXYtPnVuaXQpIHwgCiAJCQkgKCgocmVx dWVzdC0+dS5hdGEubGJhJSAoc2VjdG9ycyAqIGhlYWRzKSkgLwogCQkJICAgc2VjdG9ycykgJiAw eGYpKTsKIAl9CkBAIC04MDMsNyArODAyLDcgQEAgYXRhX3RmX3dyaXRlKHN0cnVjdCBhdGFfcmVx dWVzdCAqcmVxdWVzdAogCSAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9DWUxfTFNCLCByZXF1ZXN0 LT51LmF0YS5sYmEgPj4gOCk7CiAJICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0NZTF9NU0IsIHJl cXVlc3QtPnUuYXRhLmxiYSA+PiAxNik7CiAJICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0RSSVZF LAotCQkJIEFUQV9EX0lCTSB8IEFUQV9EX0xCQSB8IGF0YWRldi0+dW5pdCB8CisJCQkgQVRBX0Rf SUJNIHwgQVRBX0RfTEJBIHwgQVRBX0RFVihhdGFkZXYtPnVuaXQpIHwKIAkJCSAoKHJlcXVlc3Qt PnUuYXRhLmxiYSA+PiAyNCkgJiAweDBmKSk7CiAJfQogICAgIH0KQEAgLTgxMiw3ICs4MTEsNyBA QCBhdGFfdGZfd3JpdGUoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0CiBzdGF0aWMgdm9pZAog YXRhX3Bpb19yZWFkKHN0cnVjdCBhdGFfcmVxdWVzdCAqcmVxdWVzdCwgaW50IGxlbmd0aCkKIHsK LSAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0 X3BhcmVudChyZXF1ZXN0LT5kZXYpKTsKKyAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2 aWNlX2dldF9zb2Z0YyhyZXF1ZXN0LT5wYXJlbnQpOwogICAgIGludCBzaXplID0gbWluKHJlcXVl c3QtPnRyYW5zZmVyc2l6ZSwgbGVuZ3RoKTsKICAgICBpbnQgcmVzaWQ7CiAKQEAgLTgzNyw3ICs4 MzYsNyBAQCBhdGFfcGlvX3JlYWQoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0CiBzdGF0aWMg dm9pZAogYXRhX3Bpb193cml0ZShzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QsIGludCBsZW5n dGgpCiB7Ci0gICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2 aWNlX2dldF9wYXJlbnQocmVxdWVzdC0+ZGV2KSk7CisgICAgc3RydWN0IGF0YV9jaGFubmVsICpj aCA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+cGFyZW50KTsKICAgICBpbnQgc2l6ZSA9IG1p bihyZXF1ZXN0LT50cmFuc2ZlcnNpemUsIGxlbmd0aCk7CiAgICAgaW50IHJlc2lkOwogCi0tLSBz cmMvc3lzL2Rldi9hdGEvYXRhLXBjaS5jCTIwMDctMTEtMjIgMDA6MTU6MDAuMDAwMDAwMDAwICsw MzAwCisrKyBzcmMvc3lzL2Rldi9hdGEvYXRhLXBjaS5jCTIwMDgtMDktMTggMTY6MTI6MzQuMDAw MDAwMDAwICswNDAwCkBAIC0xLDUgKzEsNSBAQAogLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTgg LSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykg MTk5OCAtIDIwMDggU/hyZW4gU2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgogICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTk2LDYgKzk2LDEwIEBAIGF0YV9wY2lf cHJvYmUoZGV2aWNlX3QgZGV2KQogCWlmICghYXRhX2FtZF9pZGVudChkZXYpKQogCSAgICByZXR1 cm4gQVRBX1BST0JFX09LOwogCWJyZWFrOworICAgIGNhc2UgQVRBX0FEQVBURUNfSUQ6CisJaWYg KCFhdGFfYWRhcHRlY19pZGVudChkZXYpKQorCSAgICByZXR1cm4gQVRBX1BST0JFX09LOworCWJy ZWFrOwogICAgIGNhc2UgQVRBX0FUSV9JRDoKIAlpZiAoIWF0YV9hdGlfaWRlbnQoZGV2KSkKIAkg ICAgcmV0dXJuIEFUQV9QUk9CRV9PSzsKQEAgLTI1OCw2ICsyNjIsMzEgQEAgYXRhX3BjaV9kZXRh Y2goZGV2aWNlX3QgZGV2KQogICAgIHJldHVybiAwOwogfQogCitpbnQKK2F0YV9wY2lfc3VzcGVu ZChkZXZpY2VfdCBkZXYpCit7CisgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAqY3RsciA9 IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKyAgICBpbnQgZXJyb3IgPSAwOworIAorICAgIGJ1c19n ZW5lcmljX3N1c3BlbmQoZGV2KTsKKyAgICBpZiAoY3Rsci0+c3VzcGVuZCkKKwllcnJvciA9IGN0 bHItPnN1c3BlbmQoZGV2KTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisgIAoraW50CithdGFfcGNp X3Jlc3VtZShkZXZpY2VfdCBkZXYpCit7CisgICAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciAq Y3RsciA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKyAgICBpbnQgZXJyb3IgPSAwOworIAorICAg IGlmIChjdGxyLT5yZXN1bWUpCisJZXJyb3IgPSBjdGxyLT5yZXN1bWUoZGV2KTsKKyAgICBidXNf Z2VuZXJpY19yZXN1bWUoZGV2KTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKKwogc3RydWN0IHJl c291cmNlICoKIGF0YV9wY2lfYWxsb2NfcmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBj aGlsZCwgaW50IHR5cGUsIGludCAqcmlkLAogCQkgICAgICAgdV9sb25nIHN0YXJ0LCB1X2xvbmcg ZW5kLCB1X2xvbmcgY291bnQsIHVfaW50IGZsYWdzKQpAQCAtNDIyLDIzICs0NTEsMTQgQEAgYXRh X3BjaV9hbGxvY2F0ZShkZXZpY2VfdCBkZXYpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQKLWF0 YV9wY2lfaHcoZGV2aWNlX3QgZGV2KQotewotICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBk ZXZpY2VfZ2V0X3NvZnRjKGRldik7Ci0KLSAgICBhdGFfZ2VuZXJpY19odyhkZXYpOwotICAgIGNo LT5ody5zdGF0dXMgPSBhdGFfcGNpX3N0YXR1czsKLX0KLQogaW50CiBhdGFfcGNpX3N0YXR1cyhk ZXZpY2VfdCBkZXYpCiB7CiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRf c29mdGMoZGV2KTsKIAogICAgIGlmICgoZHVtcGluZyB8fCAhYXRhX2xlZ2FjeShkZXZpY2VfZ2V0 X3BhcmVudChkZXYpKSkgJiYKLQljaC0+ZG1hICYmICgoY2gtPmZsYWdzICYgQVRBX0FMV0FZU19E TUFTVEFUKSB8fAotCQkgICAgKGNoLT5kbWEtPmZsYWdzICYgQVRBX0RNQV9BQ1RJVkUpKSkgewor CSgoY2gtPmZsYWdzICYgQVRBX0FMV0FZU19ETUFTVEFUKSB8fAorCSAoY2gtPmRtYS5mbGFncyAm IEFUQV9ETUFfQUNUSVZFKSkpIHsKIAlpbnQgYm1zdGF0ID0gQVRBX0lEWF9JTkIoY2gsIEFUQV9C TVNUQVRfUE9SVCkgJiBBVEFfQk1TVEFUX01BU0s7CiAKIAlpZiAoKGJtc3RhdCAmIChBVEFfQk1T VEFUX0FDVElWRSB8IEFUQV9CTVNUQVRfSU5URVJSVVBUKSkgIT0KQEAgLTQ1NSwzMSArNDc1LDQ0 IEBAIGF0YV9wY2lfc3RhdHVzKGRldmljZV90IGRldikKICAgICByZXR1cm4gMTsKIH0KIAordm9p ZAorYXRhX3BjaV9odyhkZXZpY2VfdCBkZXYpCit7CisgICAgc3RydWN0IGF0YV9jaGFubmVsICpj aCA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKworICAgIGF0YV9nZW5lcmljX2h3KGRldik7Cisg ICAgY2gtPmh3LnN0YXR1cyA9IGF0YV9wY2lfc3RhdHVzOworfQorCiBzdGF0aWMgaW50Ci1hdGFf cGNpX2RtYXN0YXJ0KGRldmljZV90IGRldikKK2F0YV9wY2lfZG1hc3RhcnQoc3RydWN0IGF0YV9y ZXF1ZXN0ICpyZXF1ZXN0KQogewotICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf Z2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KGRldikpOworICAgIHN0cnVjdCBhdGFfY2hhbm5l bCAqY2ggPSBkZXZpY2VfZ2V0X3NvZnRjKHJlcXVlc3QtPnBhcmVudCk7CisKKyAgICBBVEFfREVC VUdfUlEocmVxdWVzdCwgImRtYXN0YXJ0Iik7CiAKICAgICBBVEFfSURYX09VVEIoY2gsIEFUQV9C TVNUQVRfUE9SVCwgKEFUQV9JRFhfSU5CKGNoLCBBVEFfQk1TVEFUX1BPUlQpIHwgCiAJCSAoQVRB X0JNU1RBVF9JTlRFUlJVUFQgfCBBVEFfQk1TVEFUX0VSUk9SKSkpOwotICAgIEFUQV9JRFhfT1VU TChjaCwgQVRBX0JNRFRQX1BPUlQsIGNoLT5kbWEtPnNnX2J1cyk7Ci0gICAgY2gtPmRtYS0+Zmxh Z3MgfD0gQVRBX0RNQV9BQ1RJVkU7CisgICAgQVRBX0lEWF9PVVRMKGNoLCBBVEFfQk1EVFBfUE9S VCwgcmVxdWVzdC0+ZG1hLT5zZ19idXMpOworICAgIGNoLT5kbWEuZmxhZ3MgfD0gQVRBX0RNQV9B Q1RJVkU7CiAgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfQk1DTURfUE9SVCwKIAkJIChBVEFfSURY X0lOQihjaCwgQVRBX0JNQ01EX1BPUlQpICYgfkFUQV9CTUNNRF9XUklURV9SRUFEKSB8Ci0JCSAo KGNoLT5kbWEtPmZsYWdzICYgQVRBX0RNQV9SRUFEKSA/IEFUQV9CTUNNRF9XUklURV9SRUFEIDog MCkgfAorCQkgKChyZXF1ZXN0LT5mbGFncyAmIEFUQV9SX1JFQUQpID8gQVRBX0JNQ01EX1dSSVRF X1JFQUQgOiAwKXwKIAkJIEFUQV9CTUNNRF9TVEFSVF9TVE9QKTsKICAgICByZXR1cm4gMDsKIH0K IAogc3RhdGljIGludAotYXRhX3BjaV9kbWFzdG9wKGRldmljZV90IGRldikKK2F0YV9wY2lfZG1h c3RvcChzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpCiB7Ci0gICAgc3RydWN0IGF0YV9jaGFu bmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSk7CisgICAg c3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMocmVxdWVzdC0+cGFyZW50 KTsKICAgICBpbnQgZXJyb3I7CiAKKyAgICBBVEFfREVCVUdfUlEocmVxdWVzdCwgImRtYXN0b3Ai KTsKKwogICAgIEFUQV9JRFhfT1VUQihjaCwgQVRBX0JNQ01EX1BPUlQsIAogCQkgQVRBX0lEWF9J TkIoY2gsIEFUQV9CTUNNRF9QT1JUKSAmIH5BVEFfQk1DTURfU1RBUlRfU1RPUCk7Ci0gICAgY2gt PmRtYS0+ZmxhZ3MgJj0gfkFUQV9ETUFfQUNUSVZFOworICAgIGNoLT5kbWEuZmxhZ3MgJj0gfkFU QV9ETUFfQUNUSVZFOwogICAgIGVycm9yID0gQVRBX0lEWF9JTkIoY2gsIEFUQV9CTVNUQVRfUE9S VCkgJiBBVEFfQk1TVEFUX01BU0s7CiAgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfQk1TVEFUX1BP UlQsIEFUQV9CTVNUQVRfSU5URVJSVVBUIHwgQVRBX0JNU1RBVF9FUlJPUik7CiAgICAgcmV0dXJu IGVycm9yOwpAQCAtNDg5LDEyICs1MjIsMTYgQEAgc3RhdGljIHZvaWQKIGF0YV9wY2lfZG1hcmVz ZXQoZGV2aWNlX3QgZGV2KQogewogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf Z2V0X3NvZnRjKGRldik7CisgICAgc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0OwogCiAgICAg QVRBX0lEWF9PVVRCKGNoLCBBVEFfQk1DTURfUE9SVCwgCiAJCSBBVEFfSURYX0lOQihjaCwgQVRB X0JNQ01EX1BPUlQpICYgfkFUQV9CTUNNRF9TVEFSVF9TVE9QKTsKLSAgICBjaC0+ZG1hLT5mbGFn cyAmPSB+QVRBX0RNQV9BQ1RJVkU7CisgICAgY2gtPmRtYS5mbGFncyAmPSB+QVRBX0RNQV9BQ1RJ VkU7CiAgICAgQVRBX0lEWF9PVVRCKGNoLCBBVEFfQk1TVEFUX1BPUlQsIEFUQV9CTVNUQVRfSU5U RVJSVVBUIHwgQVRBX0JNU1RBVF9FUlJPUik7Ci0gICAgY2gtPmRtYS0+dW5sb2FkKGRldik7Cisg ICAgaWYgKChyZXF1ZXN0ID0gY2gtPnJ1bm5pbmcpKSB7CisJZGV2aWNlX3ByaW50ZihyZXF1ZXN0 LT5kZXYsICJETUEgcmVzZXQgY2FsbGluZyB1bmxvYWRcbiIpOworCWNoLT5kbWEudW5sb2FkKHJl cXVlc3QpOworICAgIH0KIH0KIAogdm9pZApAQCAtNTAzLDExICs1NDAsOSBAQCBhdGFfcGNpX2Rt YWluaXQoZGV2aWNlX3QgZGV2KQogICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSBkZXZpY2Vf Z2V0X3NvZnRjKGRldik7CiAKICAgICBhdGFfZG1haW5pdChkZXYpOwotICAgIGlmIChjaC0+ZG1h KSB7Ci0JY2gtPmRtYS0+c3RhcnQgPSBhdGFfcGNpX2RtYXN0YXJ0OwotCWNoLT5kbWEtPnN0b3Ag PSBhdGFfcGNpX2RtYXN0b3A7Ci0JY2gtPmRtYS0+cmVzZXQgPSBhdGFfcGNpX2RtYXJlc2V0Owot ICAgIH0KKyAgICBjaC0+ZG1hLnN0YXJ0ID0gYXRhX3BjaV9kbWFzdGFydDsKKyAgICBjaC0+ZG1h LnN0b3AgPSBhdGFfcGNpX2RtYXN0b3A7CisgICAgY2gtPmRtYS5yZXNldCA9IGF0YV9wY2lfZG1h cmVzZXQ7CiB9CiAKIGNoYXIgKgpAQCAtNTE3LDYgKzU1Miw3IEBAIGF0YV9wY2l2ZW5kb3Iyc3Ry KGRldmljZV90IGRldikKICAgICBjYXNlIEFUQV9BQ0FSRF9JRDogICAgICAgICAgcmV0dXJuICJB Y2FyZCI7CiAgICAgY2FzZSBBVEFfQUNFUl9MQUJTX0lEOiAgICAgIHJldHVybiAiQWNlckxhYnMi OwogICAgIGNhc2UgQVRBX0FNRF9JRDogICAgICAgICAgICByZXR1cm4gIkFNRCI7CisgICAgY2Fz ZSBBVEFfQURBUFRFQ19JRDogICAgICAgIHJldHVybiAiQWRhcHRlYyI7CiAgICAgY2FzZSBBVEFf QVRJX0lEOiAgICAgICAgICAgIHJldHVybiAiQVRJIjsKICAgICBjYXNlIEFUQV9DWVJJWF9JRDog ICAgICAgICAgcmV0dXJuICJDeXJpeCI7CiAgICAgY2FzZSBBVEFfQ1lQUkVTU19JRDogICAgICAg IHJldHVybiAiQ3lwcmVzcyI7CkBAIC01NDQsOSArNTgwLDkgQEAgc3RhdGljIGRldmljZV9tZXRo b2RfdCBhdGFfcGNpX21ldGhvZHNbXQogICAgIERFVk1FVEhPRChkZXZpY2VfcHJvYmUsICAgICAg ICAgICAgIGF0YV9wY2lfcHJvYmUpLAogICAgIERFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCAgICAg ICAgICAgIGF0YV9wY2lfYXR0YWNoKSwKICAgICBERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwgICAg ICAgICAgICBhdGFfcGNpX2RldGFjaCksCisgICAgREVWTUVUSE9EKGRldmljZV9zdXNwZW5kLCAg ICAgICAgICAgYXRhX3BjaV9zdXNwZW5kKSwKKyAgICBERVZNRVRIT0QoZGV2aWNlX3Jlc3VtZSwg ICAgICAgICAgICBhdGFfcGNpX3Jlc3VtZSksCiAgICAgREVWTUVUSE9EKGRldmljZV9zaHV0ZG93 biwgICAgICAgICAgYnVzX2dlbmVyaWNfc2h1dGRvd24pLAotICAgIERFVk1FVEhPRChkZXZpY2Vf c3VzcGVuZCwgICAgICAgICAgIGJ1c19nZW5lcmljX3N1c3BlbmQpLAotICAgIERFVk1FVEhPRChk ZXZpY2VfcmVzdW1lLCAgICAgICAgICAgIGJ1c19nZW5lcmljX3Jlc3VtZSksCiAKICAgICAvKiBi dXMgbWV0aG9kcyAqLwogICAgIERFVk1FVEhPRChidXNfYWxsb2NfcmVzb3VyY2UsICAgICAgIGF0 YV9wY2lfYWxsb2NfcmVzb3VyY2UpLApAQCAtNjAwLDE5ICs2MzYsMTMgQEAgc3RhdGljIGludAog YXRhX3BjaWNoYW5uZWxfYXR0YWNoKGRldmljZV90IGRldikKIHsKICAgICBzdHJ1Y3QgYXRhX3Bj aV9jb250cm9sbGVyICpjdGxyID0gZGV2aWNlX2dldF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChk ZXYpKTsKLSAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYp OwogICAgIGludCBlcnJvcjsKIAogICAgIGlmIChjdGxyLT5kbWFpbml0KQogCWN0bHItPmRtYWlu aXQoZGV2KTsKLSAgICBpZiAoY2gtPmRtYSkKLQljaC0+ZG1hLT5hbGxvYyhkZXYpOwogCi0gICAg aWYgKChlcnJvciA9IGN0bHItPmFsbG9jYXRlKGRldikpKSB7Ci0JaWYgKGNoLT5kbWEpCi0JICAg IGNoLT5kbWEtPmZyZWUoZGV2KTsKKyAgICBpZiAoKGVycm9yID0gY3Rsci0+YWxsb2NhdGUoZGV2 KSkpCiAJcmV0dXJuIGVycm9yOwotICAgIH0KIAogICAgIHJldHVybiBhdGFfYXR0YWNoKGRldik7 CiB9CkBAIC02MjYsOCArNjU2LDcgQEAgYXRhX3BjaWNoYW5uZWxfZGV0YWNoKGRldmljZV90IGRl dikKICAgICBpZiAoKGVycm9yID0gYXRhX2RldGFjaChkZXYpKSkKIAlyZXR1cm4gZXJyb3I7CiAK LSAgICBpZiAoY2gtPmRtYSkKLQljaC0+ZG1hLT5mcmVlKGRldik7CisgICAgY2gtPmRtYS5mcmVl KGRldik7CiAKICAgICAvKiBYWFggU09TIGZyZWUgcmVzb3VyY2VzIGZvciBpbyBhbmQgY3RsaW8g Pz8gKi8KIApAQCAtNjUzLDExICs2ODIsOCBAQCBhdGFfcGNpY2hhbm5lbF9yZXNldChkZXZpY2Vf dCBkZXYpCiAgICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoZGV2 KTsKIAogICAgIC8qIGlmIERNQSBlbmdpbmUgcHJlc2VudCByZXNldCBpdCAgKi8KLSAgICBpZiAo Y2gtPmRtYSkgewotCWlmIChjaC0+ZG1hLT5yZXNldCkKLQkgICAgY2gtPmRtYS0+cmVzZXQoZGV2 KTsKLQljaC0+ZG1hLT51bmxvYWQoZGV2KTsKLSAgICB9CisgICAgaWYgKGNoLT5kbWEucmVzZXQp CisJY2gtPmRtYS5yZXNldChkZXYpOwogCiAgICAgLyogcmVzZXQgdGhlIGNvbnRyb2xsZXIgSFcg Ki8KICAgICBpZiAoY3Rsci0+cmVzZXQpCi0tLSBzcmMvc3lzL2Rldi9hdGEvYXRhLXBjaS5oCTIw MDgtMDktMTMgMTE6MzY6MTYuMDAwMDAwMDAwICswNDAwCisrKyBzcmMvc3lzL2Rldi9hdGEvYXRh LXBjaS5oCTIwMDgtMDktMjYgMTE6Mjk6NDguMDAwMDAwMDAwICswNDAwCkBAIC0xLDUgKzEsNSBA QAogLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMgLSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNvc0BG cmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwMyAtIDIwMDggU/hyZW4gU2NobWlkdCA8 c29zQEZyZWVCU0Qub3JnPgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKQEAgLTUwLDYgKzUwLDggQEAgc3RydWN0IGF0YV9wY2lfY29udHJvbGxlciB7CiAgICAgc3Ry dWN0IGF0YV9jaGlwX2lkICAqY2hpcDsKICAgICBpbnQgICAgICAgICAgICAgICAgIGNoYW5uZWxz OwogICAgIGludCAgICAgICAgICAgICAgICAgKCpjaGlwaW5pdCkoZGV2aWNlX3QpOworICAgIGlu dCAgICAgICAgICAgICAgICAgKCpzdXNwZW5kKShkZXZpY2VfdCk7CisgICAgaW50ICAgICAgICAg ICAgICAgICAoKnJlc3VtZSkoZGV2aWNlX3QpOwogICAgIGludCAgICAgICAgICAgICAgICAgKCph bGxvY2F0ZSkoZGV2aWNlX3QpOwogICAgIGludCAgICAgICAgICAgICAgICAgKCpsb2NraW5nKShk ZXZpY2VfdCwgaW50KTsKICAgICB2b2lkICAgICAgICAgICAgICAgICgqcmVzZXQpKGRldmljZV90 KTsKQEAgLTgwLDYgKzgyLDE0IEBAIHN0cnVjdCBhdGFfY29ubmVjdF90YXNrIHsKICNkZWZpbmUg QVRBX0FUUDg2NUEgICAgICAgICAgICAgMHgwMDA4MTE5MQogI2RlZmluZSBBVEFfQVRQODY1UiAg ICAgICAgICAgICAweDAwMDkxMTkxCiAKKyNkZWZpbmUgQVRBX0FDRVJfTEFCU19JRCAgICAgICAg MHgxMGI5CisjZGVmaW5lIEFUQV9BTElfMTUzMyAgICAgICAgICAgIDB4MTUzMzEwYjkKKyNkZWZp bmUgQVRBX0FMSV81MjI5ICAgICAgICAgICAgMHg1MjI5MTBiOQorI2RlZmluZSBBVEFfQUxJXzUy ODEgICAgICAgICAgICAweDUyODExMGI5CisjZGVmaW5lIEFUQV9BTElfNTI4NyAgICAgICAgICAg IDB4NTI4NzEwYjkKKyNkZWZpbmUgQVRBX0FMSV81Mjg4ICAgICAgICAgICAgMHg1Mjg4MTBiOQor I2RlZmluZSBBVEFfQUxJXzUyODkgICAgICAgICAgICAweDUyODkxMGI5CisKICNkZWZpbmUgQVRB X0FNRF9JRCAgICAgICAgICAgICAgMHgxMDIyCiAjZGVmaW5lIEFUQV9BTUQ3NTUgICAgICAgICAg ICAgIDB4NzQwMTEwMjIKICNkZWZpbmUgQVRBX0FNRDc1NiAgICAgICAgICAgICAgMHg3NDA5MTAy MgpAQCAtODgsMTMgKzk4LDggQEAgc3RydWN0IGF0YV9jb25uZWN0X3Rhc2sgewogI2RlZmluZSBB VEFfQU1EODExMSAgICAgICAgICAgICAweDc0NjkxMDIyCiAjZGVmaW5lIEFUQV9BTUQ1NTM2ICAg ICAgICAgICAgIDB4MjA5YTEwMjIKIAotI2RlZmluZSBBVEFfQUNFUl9MQUJTX0lEICAgICAgICAw eDEwYjkKLSNkZWZpbmUgQVRBX0FMSV8xNTMzICAgICAgICAgICAgMHgxNTMzMTBiOQotI2RlZmlu ZSBBVEFfQUxJXzUyMjkgICAgICAgICAgICAweDUyMjkxMGI5Ci0jZGVmaW5lIEFUQV9BTElfNTI4 MSAgICAgICAgICAgIDB4NTI4MTEwYjkKLSNkZWZpbmUgQVRBX0FMSV81Mjg3ICAgICAgICAgICAg MHg1Mjg3MTBiOQotI2RlZmluZSBBVEFfQUxJXzUyODggICAgICAgICAgICAweDUyODgxMGI5Ci0j ZGVmaW5lIEFUQV9BTElfNTI4OSAgICAgICAgICAgIDB4NTI4OTEwYjkKKyNkZWZpbmUgQVRBX0FE QVBURUNfSUQgICAgICAgICAgMHg5MDA1CisjZGVmaW5lIEFUQV9BREFQVEVDXzE0MjAgICAgICAg IDB4MDI0MTkwMDUKIAogI2RlZmluZSBBVEFfQVRJX0lEICAgICAgICAgICAgICAweDEwMDIKICNk ZWZpbmUgQVRBX0FUSV9JWFAyMDAgICAgICAgICAgMHg0MzQ5MTAwMgpAQCAtMTg1LDYgKzE5MCw3 IEBAIHN0cnVjdCBhdGFfY29ubmVjdF90YXNrIHsKICNkZWZpbmUgQVRBX0lURV9JRCAgICAgICAg ICAgICAgMHgxMjgzCiAjZGVmaW5lIEFUQV9JVDgyMTFGICAgICAgICAgICAgIDB4ODIxMTEyODMK ICNkZWZpbmUgQVRBX0lUODIxMkYgICAgICAgICAgICAgMHg4MjEyMTI4MworI2RlZmluZSBBVEFf SVQ4MjEzRiAgICAgICAgICAgICAweDgyMTMxMjgzCiAKICNkZWZpbmUgQVRBX0pNSUNST05fSUQg ICAgICAgICAgMHgxOTdiCiAjZGVmaW5lIEFUQV9KTUIzNjAgICAgICAgICAgICAgIDB4MjM2MDE5 N2IKQEAgLTQ1OCwxMyArNDY0LDE1IEBAIHN0cnVjdCBhdGFfY29ubmVjdF90YXNrIHsKIGludCBh dGFfcGNpX3Byb2JlKGRldmljZV90IGRldik7CiBpbnQgYXRhX3BjaV9hdHRhY2goZGV2aWNlX3Qg ZGV2KTsKIGludCBhdGFfcGNpX2RldGFjaChkZXZpY2VfdCBkZXYpOworaW50IGF0YV9wY2lfc3Vz cGVuZChkZXZpY2VfdCBkZXYpOworaW50IGF0YV9wY2lfcmVzdW1lKGRldmljZV90IGRldik7CiBz dHJ1Y3QgcmVzb3VyY2UgKiBhdGFfcGNpX2FsbG9jX3Jlc291cmNlKGRldmljZV90IGRldiwgZGV2 aWNlX3QgY2hpbGQsIGludCB0eXBlLCBpbnQgKnJpZCwgdV9sb25nIHN0YXJ0LCB1X2xvbmcgZW5k LCB1X2xvbmcgY291bnQsIHVfaW50IGZsYWdzKTsKIGludCBhdGFfcGNpX3JlbGVhc2VfcmVzb3Vy Y2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCByaWQsIHN0cnVj dCByZXNvdXJjZSAqcik7CiBpbnQgYXRhX3BjaV9zZXR1cF9pbnRyKGRldmljZV90IGRldiwgZGV2 aWNlX3QgY2hpbGQsIHN0cnVjdCByZXNvdXJjZSAqaXJxLCBpbnQgZmxhZ3MsIGRyaXZlcl9maWx0 ZXJfdCAqZmlsdGVyLCBkcml2ZXJfaW50cl90ICpmdW5jdGlvbiwgdm9pZCAqYXJndW1lbnQsIHZv aWQgKipjb29raWVwKTsKICBpbnQgYXRhX3BjaV90ZWFyZG93bl9pbnRyKGRldmljZV90IGRldiwg ZGV2aWNlX3QgY2hpbGQsIHN0cnVjdCByZXNvdXJjZSAqaXJxLCB2b2lkICpjb29raWUpOwogaW50 IGF0YV9wY2lfYWxsb2NhdGUoZGV2aWNlX3QgZGV2KTsKLXZvaWQgYXRhX3BjaV9odyhkZXZpY2Vf dCBkZXYpOwogaW50IGF0YV9wY2lfc3RhdHVzKGRldmljZV90IGRldik7Cit2b2lkIGF0YV9wY2lf aHcoZGV2aWNlX3QgZGV2KTsKIHZvaWQgYXRhX3BjaV9kbWFpbml0KGRldmljZV90IGRldik7CiBj aGFyICphdGFfcGNpdmVuZG9yMnN0cihkZXZpY2VfdCBkZXYpOwogCkBAIC00NzUsNiArNDgzLDcg QEAgaW50IGF0YV9haGNpX2lkZW50KGRldmljZV90KTsKIGludCBhdGFfYWNhcmRfaWRlbnQoZGV2 aWNlX3QpOwogaW50IGF0YV9hbGlfaWRlbnQoZGV2aWNlX3QpOwogaW50IGF0YV9hbWRfaWRlbnQo ZGV2aWNlX3QpOworaW50IGF0YV9hZGFwdGVjX2lkZW50KGRldmljZV90KTsKIGludCBhdGFfYXRp X2lkZW50KGRldmljZV90KTsKIGludCBhdGFfY3lyaXhfaWRlbnQoZGV2aWNlX3QpOwogaW50IGF0 YV9jeXByZXNzX2lkZW50KGRldmljZV90KTsKLS0tIHNyYy9zeXMvZGV2L2F0YS9hdGEtcXVldWUu YwkyMDA3LTAzLTEzIDIzOjMxOjU2LjAwMDAwMDAwMCArMDMwMAorKysgc3JjL3N5cy9kZXYvYXRh L2F0YS1xdWV1ZS5jCTIwMDgtMDQtMjEgMTQ6MzU6MTkuMDAwMDAwMDAwICswNDAwCkBAIC0xLDUg KzEsNSBAQAogLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggLSAyMDA3IFP4cmVuIFNjaG1pZHQg PHNvc0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDggU/hyZW4gU2No bWlkdCA8c29zQEZyZWVCU0Qub3JnPgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKQEAgLTU2LDcgKzU2LDcgQEAgYXRhX3F1ZXVlX3JlcXVlc3Qoc3RydWN0IGF0YV9y ZXF1ZXN0ICpyZQogICAgIC8qIHRyZWF0IHJlcXVlc3QgYXMgdmlyZ2luICh0aGlzIG1pZ2h0IGJl IGFuIEFUQV9SX1JFUVVFVUUpICovCiAgICAgcmVxdWVzdC0+cmVzdWx0ID0gcmVxdWVzdC0+c3Rh dHVzID0gcmVxdWVzdC0+ZXJyb3IgPSAwOwogCi0gICAgLyogY2hlY2sgdGhhdCB0aGF0IHRoZSBk ZXZpY2UgaXMgc3RpbGwgdmFsaWQgKi8KKyAgICAvKiBjaGVjayB0aGF0IHRoZSBkZXZpY2UgaXMg c3RpbGwgdmFsaWQgKi8KICAgICBpZiAoIShyZXF1ZXN0LT5wYXJlbnQgPSBkZXZpY2VfZ2V0X3Bh cmVudChyZXF1ZXN0LT5kZXYpKSkgewogCXJlcXVlc3QtPnJlc3VsdCA9IEVOWElPOwogCWlmIChy ZXF1ZXN0LT5jYWxsYmFjaykKQEAgLTM1OCw4ICszNTgsOCBAQCBhdGFfY29tcGxldGVkKHZvaWQg KmNvbnRleHQsIGludCBkdW1teSkKIAkJCSAgICAgICJcNE1FRElBX0NIQU5HRV9SRVFFU1QiCiAJ CQkgICAgICAiXDNBQk9SVEVEXDJOT19NRURJQVwxSUxMRUdBTF9MRU5HVEgiKTsKIAkJaWYgKChy ZXF1ZXN0LT5mbGFncyAmIEFUQV9SX0RNQSkgJiYKLQkJICAgIChyZXF1ZXN0LT5kbWFzdGF0ICYg QVRBX0JNU1RBVF9FUlJPUikpCi0JCSAgICBwcmludGYoIiBkbWE9MHglMDJ4IiwgcmVxdWVzdC0+ ZG1hc3RhdCk7CisJCSAgICAocmVxdWVzdC0+ZG1hLT5zdGF0dXMgJiBBVEFfQk1TVEFUX0VSUk9S KSkKKwkJICAgIHByaW50ZigiIGRtYT0weCUwMngiLCByZXF1ZXN0LT5kbWEtPnN0YXR1cyk7CiAJ CWlmICghKHJlcXVlc3QtPmZsYWdzICYgKEFUQV9SX0FUQVBJIHwgQVRBX1JfQ09OVFJPTCkpKQog CQkgICAgcHJpbnRmKCIgTEJBPSVqdSIsIHJlcXVlc3QtPnUuYXRhLmxiYSk7CiAJCXByaW50Zigi XG4iKTsKQEAgLTUwMyw2ICs1MDMsNyBAQCBhdGFfdGltZW91dChzdHJ1Y3QgYXRhX3JlcXVlc3Qg KnJlcXVlc3QpCiAJcmVxdWVzdC0+ZmxhZ3MgfD0gQVRBX1JfVElNRU9VVDsKIAltdHhfdW5sb2Nr KCZjaC0+c3RhdGVfbXR4KTsKIAlBVEFfTE9DS0lORyhjaC0+ZGV2LCBBVEFfTEZfVU5MT0NLKTsK KwljaC0+ZG1hLnVubG9hZChyZXF1ZXN0KTsKIAlhdGFfZmluaXNoKHJlcXVlc3QpOwogICAgIH0K ICAgICBlbHNlIHsKQEAgLTY5NCwxMSArNjk1LDEzIEBAIGF0YV9jbWQyc3RyKHN0cnVjdCBhdGFf cmVxdWVzdCAqcmVxdWVzdCkKIAljYXNlIDB4MjQ6IHJldHVybiAoIlJFQUQ0OCIpOwogCWNhc2Ug MHgyNTogcmV0dXJuICgiUkVBRF9ETUE0OCIpOwogCWNhc2UgMHgyNjogcmV0dXJuICgiUkVBRF9E TUFfUVVFVUVENDgiKTsKKwljYXNlIDB4Mjc6IHJldHVybiAoIlJFQURfTkFUSVZFX01BWF9BRERS RVNTNDgiKTsKIAljYXNlIDB4Mjk6IHJldHVybiAoIlJFQURfTVVMNDgiKTsKIAljYXNlIDB4MzA6 IHJldHVybiAoIldSSVRFIik7CiAJY2FzZSAweDM0OiByZXR1cm4gKCJXUklURTQ4Iik7CiAJY2Fz ZSAweDM1OiByZXR1cm4gKCJXUklURV9ETUE0OCIpOwogCWNhc2UgMHgzNjogcmV0dXJuICgiV1JJ VEVfRE1BX1FVRVVFRDQ4Iik7CisJY2FzZSAweDM3OiByZXR1cm4gKCJTRVRfTUFYX0FERFJFU1M0 OCIpOwogCWNhc2UgMHgzOTogcmV0dXJuICgiV1JJVEVfTVVMNDgiKTsKIAljYXNlIDB4NzA6IHJl dHVybiAoIlNFRUsiKTsKIAljYXNlIDB4YTA6IHJldHVybiAoIlBBQ0tFVF9DTUQiKTsKQEAgLTcy Nyw2ICs3MzAsOSBAQCBhdGFfY21kMnN0cihzdHJ1Y3QgYXRhX3JlcXVlc3QgKnJlcXVlc3QpCiAJ ICAgIH0KIAkgICAgc3ByaW50ZihidWZmZXIsICJTRVRGRUFUVVJFUyAweCUwMngiLCByZXF1ZXN0 LT51LmF0YS5mZWF0dXJlKTsKIAkgICAgcmV0dXJuIGJ1ZmZlcjsKKwljYXNlIDB4ZjU6IHJldHVy biAoIlNFQ1VSSVRZX0ZSRUVfTE9DSyIpOworCWNhc2UgMHhmODogcmV0dXJuICgiUkVBRF9OQVRJ VkVfTUFYX0FERFJFU1MiKTsKKwljYXNlIDB4Zjk6IHJldHVybiAoIlNFVF9NQVhfQUREUkVTUyIp OwogCX0KICAgICB9CiAgICAgc3ByaW50ZihidWZmZXIsICJ1bmtub3duIENNRCAoMHglMDJ4KSIs IHJlcXVlc3QtPnUuYXRhLmNvbW1hbmQpOwotLS0gc3JjL3N5cy9kZXYvYXRhL2F0YS1yYWlkLmMJ MjAwNy0wOC0xMyAyMjo0NjozMS4wMDAwMDAwMDAgKzA0MDAKKysrIHNyYy9zeXMvZGV2L2F0YS9h dGEtcmFpZC5jCTIwMDgtMDQtMTcgMTY6Mjk6MzUuMDAwMDAwMDAwICswNDAwCkBAIC0xLDUgKzEs NSBAQAogLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAgLSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNv c0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwMCAtIDIwMDggU/hyZW4gU2NobWlk dCA8c29zQEZyZWVCU0Qub3JnPgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKQEAgLTgzLDcgKzgzLDcgQEAgc3RhdGljIGludCBhdGFfcmFpZF9zaXNfcmVhZF9tZXRh KGRldmljZQogc3RhdGljIGludCBhdGFfcmFpZF9zaXNfd3JpdGVfbWV0YShzdHJ1Y3QgYXJfc29m dGMgKnJkcCk7CiBzdGF0aWMgaW50IGF0YV9yYWlkX3ZpYV9yZWFkX21ldGEoZGV2aWNlX3QgZGV2 LCBzdHJ1Y3QgYXJfc29mdGMgKipyYWlkcCk7CiBzdGF0aWMgaW50IGF0YV9yYWlkX3ZpYV93cml0 ZV9tZXRhKHN0cnVjdCBhcl9zb2Z0YyAqcmRwKTsKLXN0YXRpYyBzdHJ1Y3QgYXRhX3JlcXVlc3Qg KmF0YV9yYWlkX2luaXRfcmVxdWVzdChzdHJ1Y3QgYXJfc29mdGMgKnJkcCwgc3RydWN0IGJpbyAq YmlvKTsKK3N0YXRpYyBzdHJ1Y3QgYXRhX3JlcXVlc3QgKmF0YV9yYWlkX2luaXRfcmVxdWVzdChk ZXZpY2VfdCBkZXYsIHN0cnVjdCBhcl9zb2Z0YyAqcmRwLCBzdHJ1Y3QgYmlvICpiaW8pOwogc3Rh dGljIGludCBhdGFfcmFpZF9zZW5kX3JlcXVlc3Qoc3RydWN0IGF0YV9yZXF1ZXN0ICpyZXF1ZXN0 KTsKIHN0YXRpYyBpbnQgYXRhX3JhaWRfcncoZGV2aWNlX3QgZGV2LCB1X2ludDY0X3QgbGJhLCB2 b2lkICpkYXRhLCB1X2ludCBiY291bnQsIGludCBmbGFncyk7CiBzdGF0aWMgY2hhciAqIGF0YV9y YWlkX2Zvcm1hdChzdHJ1Y3QgYXJfc29mdGMgKnJkcCk7CkBAIC0yNjMsNyArMjYzLDcgQEAgYXRh X3JhaWRfZmx1c2goc3RydWN0IGJpbyAqYnApCiAgICAgZm9yIChkaXNrID0gMDsgZGlzayA8IHJk cC0+dG90YWxfZGlza3M7IGRpc2srKykgewogCWlmICgoZGV2ID0gcmRwLT5kaXNrc1tkaXNrXS5k ZXYpID09IE5VTEwpCiAJICAgIGNvbnRpbnVlOwotCWlmICghKHJlcXVlc3QgPSBhdGFfcmFpZF9p bml0X3JlcXVlc3QocmRwLCBicCkpKQorCWlmICghKHJlcXVlc3QgPSBhdGFfcmFpZF9pbml0X3Jl cXVlc3QoZGV2LCByZHAsIGJwKSkpCiAJICAgIHJldHVybiBFTk9NRU07CiAJcmVxdWVzdC0+ZGV2 ID0gZGV2OwogCXJlcXVlc3QtPnUuYXRhLmNvbW1hbmQgPSBBVEFfRkxVU0hDQUNIRTsKQEAgLTM1 Myw3ICszNTMsNyBAQCBhdGFfcmFpZF9zdHJhdGVneShzdHJ1Y3QgYmlvICpicCkKIAlpZiAoIShk cnYgPT0gMCAmJiByZHAtPmZvcm1hdCA9PSBBUl9GX0hQVFYyX1JBSUQpKQogCSAgICBsYmEgKz0g cmRwLT5vZmZzZXRfc2VjdG9yczsKIAotCWlmICghKHJlcXVlc3QgPSBhdGFfcmFpZF9pbml0X3Jl cXVlc3QocmRwLCBicCkpKSB7CisJaWYgKCEocmVxdWVzdCA9IGF0YV9yYWlkX2luaXRfcmVxdWVz dChyZHAtPmRpc2tzW2Rydl0uZGV2LCByZHAsIGJwKSkpIHsKIAkgICAgYmlvZmluaXNoKGJwLCBO VUxMLCBFSU8pOwogCSAgICByZXR1cm47CiAJfQpAQCAtMzc1LDcgKzM3NSw3IEBAIGF0YV9yYWlk X3N0cmF0ZWd5KHN0cnVjdCBiaW8gKmJwKQogCQlyZXR1cm47CiAJICAgIH0KIAkgICAgcmVxdWVz dC0+dGhpcyA9IGRydjsKLQkgICAgcmVxdWVzdC0+ZGV2ID0gcmRwLT5kaXNrc1tyZXF1ZXN0LT50 aGlzXS5kZXY7CisJICAgIHJlcXVlc3QtPmRldiA9IHJkcC0+ZGlza3NbZHJ2XS5kZXY7CiAJICAg IGF0YV9yYWlkX3NlbmRfcmVxdWVzdChyZXF1ZXN0KTsKIAkgICAgYnJlYWs7CiAKQEAgLTQ1Nywx MiArNDU3LDE0IEBAIGF0YV9yYWlkX3N0cmF0ZWd5KHN0cnVjdCBiaW8gKmJwKQogCQkgICAgLyog ZG8gd2UgaGF2ZSBhIHNwYXJlIHRvIHJlYnVpbGQgb24gPyAqLwogCQkgICAgaWYgKHJkcC0+ZGlz a3NbdGhpc10uZmxhZ3MgJiBBUl9ERl9TUEFSRSkgewogCQkJaWYgKChjb21wb3NpdGUgPSBhdGFf YWxsb2NfY29tcG9zaXRlKCkpKSB7Ci0JCQkgICAgaWYgKChyZWJ1aWxkID0gYXRhX2FsbG9jX3Jl cXVlc3QoKSkpIHsKKwkJCSAgICBpZiAoKHJlYnVpbGQgPSBhdGFfcmFpZF9pbml0X3JlcXVlc3Qo CisJCQkJICAgIAkgICByZHAtPmRpc2tzW3RoaXNdLmRldiwgcmRwLCBicCkpKSB7CiAJCQkJcmRw LT5yZWJ1aWxkX2xiYSA9IGJsayArIGNodW5rOwotCQkJCWJjb3B5KHJlcXVlc3QsIHJlYnVpbGQs Ci0JCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBhdGFfcmVxdWVzdCkpOworCQkJCXJlYnVpbGQtPmRh dGEgPSByZXF1ZXN0LT5kYXRhOworCQkJCXJlYnVpbGQtPmJ5dGVjb3VudCA9IHJlcXVlc3QtPmJ5 dGVjb3VudDsKKwkJCQlyZWJ1aWxkLT51LmF0YS5sYmEgPSByZXF1ZXN0LT51LmF0YS5sYmE7CisJ CQkJcmVidWlsZC0+dS5hdGEuY291bnQgPSByZXF1ZXN0LT51LmF0YS5jb3VudDsKIAkJCQlyZWJ1 aWxkLT50aGlzID0gdGhpczsKLQkJCQlyZWJ1aWxkLT5kZXYgPSByZHAtPmRpc2tzW3RoaXNdLmRl djsKIAkJCQlyZWJ1aWxkLT5mbGFncyAmPSB+QVRBX1JfUkVBRDsKIAkJCQlyZWJ1aWxkLT5mbGFn cyB8PSBBVEFfUl9XUklURTsKIAkJCQltdHhfaW5pdCgmY29tcG9zaXRlLT5sb2NrLApAQCAtNTE4 LDE0ICs1MjAsMTYgQEAgYXRhX3JhaWRfc3RyYXRlZ3koc3RydWN0IGJpbyAqYnApCiAJCQlpbnQg dGhpcyA9IGRydiArIHJkcC0+d2lkdGg7CiAKIAkJCWlmICgoY29tcG9zaXRlID0gYXRhX2FsbG9j X2NvbXBvc2l0ZSgpKSkgewotCQkJICAgIGlmICgobWlycm9yID0gYXRhX2FsbG9jX3JlcXVlc3Qo KSkpIHsKKwkJCSAgICBpZiAoKG1pcnJvciA9IGF0YV9yYWlkX2luaXRfcmVxdWVzdCgKKwkJCQkg ICAgCSAgcmRwLT5kaXNrc1t0aGlzXS5kZXYsIHJkcCwgYnApKSkgewogCQkJCWlmICgoYmxrIDw9 IHJkcC0+cmVidWlsZF9sYmEpICYmCiAJCQkJICAgICgoYmxrICsgY2h1bmspID4gcmRwLT5yZWJ1 aWxkX2xiYSkpCiAJCQkJICAgIHJkcC0+cmVidWlsZF9sYmEgPSBibGsgKyBjaHVuazsKLQkJCQli Y29weShyZXF1ZXN0LCBtaXJyb3IsCi0JCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBhdGFfcmVxdWVz dCkpOworCQkJCW1pcnJvci0+ZGF0YSA9IHJlcXVlc3QtPmRhdGE7CisJCQkJbWlycm9yLT5ieXRl Y291bnQgPSByZXF1ZXN0LT5ieXRlY291bnQ7CisJCQkJbWlycm9yLT51LmF0YS5sYmEgPSByZXF1 ZXN0LT51LmF0YS5sYmE7CisJCQkJbWlycm9yLT51LmF0YS5jb3VudCA9IHJlcXVlc3QtPnUuYXRh LmNvdW50OwogCQkJCW1pcnJvci0+dGhpcyA9IHRoaXM7Ci0JCQkJbWlycm9yLT5kZXYgPSByZHAt PmRpc2tzW3RoaXNdLmRldjsKIAkJCQltdHhfaW5pdCgmY29tcG9zaXRlLT5sb2NrLAogCQkJCQkg IkFUQSBQc2V1ZG9SQUlEIG1pcnJvciBsb2NrIiwKIAkJCQkJIE5VTEwsIE1UWF9ERUYpOwpAQCAt ODU2LDYgKzg2MCw3IEBAIGF0YV9yYWlkX2NvbmZpZ19jaGFuZ2VkKHN0cnVjdCBhcl9zb2Z0YyAK ICAgICBpbnQgZGlzaywgY291bnQsIHN0YXR1czsKIAogICAgIG10eF9sb2NrKCZyZHAtPmxvY2sp OworCiAgICAgLyogc2V0IGRlZmF1bHQgYWxsIHdvcmtpbmcgbW9kZSAqLwogICAgIHN0YXR1cyA9 IHJkcC0+c3RhdHVzOwogICAgIHJkcC0+c3RhdHVzICY9IH5BUl9TX0RFR1JBREVEOwpAQCAtOTEw LDYgKzkxNSwxMSBAQCBhdGFfcmFpZF9jb25maWdfY2hhbmdlZChzdHJ1Y3QgYXJfc29mdGMgCiAg ICAgfQogCiAgICAgaWYgKHJkcC0+c3RhdHVzICE9IHN0YXR1cykgeworCQorCS8qIHJhaWQgc3Rh dHVzIGhhcyBjaGFuZ2VkLCB1cGRhdGUgbWV0YWRhdGEgKi8KKwl3cml0ZWJhY2sgPSAxOworCisJ LyogYW5ub3VuY2Ugd2UgaGF2ZSB0cm91YmxlIGFoZWFkICovCiAJaWYgKCEocmRwLT5zdGF0dXMg JiBBUl9TX1JFQURZKSkgewogCSAgICBwcmludGYoImFyJWQ6IEZBSUxVUkUgLSAlcyBhcnJheSBi cm9rZW5cbiIsCiAJCSAgIHJkcC0+bHVuLCBhdGFfcmFpZF90eXBlKHJkcCkpOwpAQCAtMTY1OSw5 ICsxNjY5LDggQEAgYXRhX3JhaWRfYWRhcHRlY19yZWFkX21ldGEoZGV2aWNlX3QgZGV2LAogCWlm IChiZTMydG9oKG1ldGEtPmdlbmVyYXRpb24pID49IHJhaWQtPmdlbmVyYXRpb24pIHsKIAkgICAg c3RydWN0IGF0YV9kZXZpY2UgKmF0YWRldiA9IGRldmljZV9nZXRfc29mdGMocGFyZW50KTsKIAkg ICAgc3RydWN0IGF0YV9jaGFubmVsICpjaCA9IGRldmljZV9nZXRfc29mdGMoR1JBTkRQQVJFTlQo ZGV2KSk7Ci0JICAgIGludCBkaXNrX251bWJlciA9IChjaC0+dW5pdCA8PCAhKGNoLT5mbGFncyAm IEFUQV9OT19TTEFWRSkpICsKLQkJCSAgICAgIEFUQV9ERVYoYXRhZGV2LT51bml0KTsKLQorCSAg ICBpbnQgZGlza19udW1iZXIgPQorCQkoY2gtPnVuaXQgPDwgIShjaC0+ZmxhZ3MgJiBBVEFfTk9f U0xBVkUpKSArIGF0YWRldi0+dW5pdDsKIAkgICAgcmFpZC0+ZGlza3NbZGlza19udW1iZXJdLmRl diA9IHBhcmVudDsKIAkgICAgcmFpZC0+ZGlza3NbZGlza19udW1iZXJdLnNlY3RvcnMgPSAKIAkJ YmUzMnRvaChtZXRhLT5jb25maWdzW2Rpc2tfbnVtYmVyICsgMV0uc2VjdG9ycyk7CkBAIC0yMjcy LDExICsyMjgxLDE0IEBAIGF0YV9yYWlkX2ludGVsX3dyaXRlX21ldGEoc3RydWN0IGFyX3NvZnQK ICAgICB9CiAKICAgICByZHAtPmdlbmVyYXRpb24rKzsKLSAgICBtaWNyb3RpbWUoJnRpbWVzdGFt cCk7CisgICAgaWYgKCFyZHAtPm1hZ2ljXzApIHsKKwltaWNyb3RpbWUoJnRpbWVzdGFtcCk7CisJ cmRwLT5tYWdpY18wID0gdGltZXN0YW1wLnR2X3NlYyBeIHRpbWVzdGFtcC50dl91c2VjOworICAg IH0KIAogICAgIGJjb3B5KElOVEVMX01BR0lDLCBtZXRhLT5pbnRlbF9pZCwgc2l6ZW9mKG1ldGEt PmludGVsX2lkKSk7CiAgICAgYmNvcHkoSU5URUxfVkVSU0lPTl8xMTAwLCBtZXRhLT52ZXJzaW9u LCBzaXplb2YobWV0YS0+dmVyc2lvbikpOwotICAgIG1ldGEtPmNvbmZpZ19pZCA9IHRpbWVzdGFt cC50dl9zZWM7CisgICAgbWV0YS0+Y29uZmlnX2lkID0gcmRwLT5tYWdpY18wOwogICAgIG1ldGEt PmdlbmVyYXRpb24gPSByZHAtPmdlbmVyYXRpb247CiAgICAgbWV0YS0+dG90YWxfZGlza3MgPSBy ZHAtPnRvdGFsX2Rpc2tzOwogICAgIG1ldGEtPnRvdGFsX3ZvbHVtZXMgPSAxOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWCBTT1MgKi8KQEAgLTIyOTAsNyArMjMwMiw3 IEBAIGF0YV9yYWlkX2ludGVsX3dyaXRlX21ldGEoc3RydWN0IGFyX3NvZnQKIAkgICAgYmNvcHko YXRhZGV2LT5wYXJhbS5zZXJpYWwsIG1ldGEtPmRpc2tbZGlza10uc2VyaWFsLAogCQkgIHNpemVv ZihyZHAtPmRpc2tzW2Rpc2tdLnNlcmlhbCkpOwogCSAgICBtZXRhLT5kaXNrW2Rpc2tdLnNlY3Rv cnMgPSByZHAtPmRpc2tzW2Rpc2tdLnNlY3RvcnM7Ci0JICAgIG1ldGEtPmRpc2tbZGlza10uaWQg PSAoY2gtPnVuaXQgPDwgMTYpIHwgQVRBX0RFVihhdGFkZXYtPnVuaXQpOworCSAgICBtZXRhLT5k aXNrW2Rpc2tdLmlkID0gKGNoLT51bml0IDw8IDE2KSB8IGF0YWRldi0+dW5pdDsKIAl9CiAJZWxz ZQogCSAgICBtZXRhLT5kaXNrW2Rpc2tdLnNlY3RvcnMgPSByZHAtPnRvdGFsX3NlY3RvcnMgLyBy ZHAtPndpZHRoOwpAQCAtMzMxNSw3ICszMzI3LDcgQEAgYXRhX3JhaWRfcHJvbWlzZV93cml0ZV9t ZXRhKHN0cnVjdCBhcl9zbwogCQlkZXZpY2VfZ2V0X3NvZnRjKGRldmljZV9nZXRfcGFyZW50KHJk cC0+ZGlza3NbZGlza10uZGV2KSk7CiAKIAkgICAgbWV0YS0+cmFpZC5jaGFubmVsID0gY2gtPnVu aXQ7Ci0JICAgIG1ldGEtPnJhaWQuZGV2aWNlID0gQVRBX0RFVihhdGFkZXYtPnVuaXQpOworCSAg ICBtZXRhLT5yYWlkLmRldmljZSA9IGF0YWRldi0+dW5pdDsKIAkgICAgbWV0YS0+cmFpZC5kaXNr X3NlY3RvcnMgPSByZHAtPmRpc2tzW2Rpc2tdLnNlY3RvcnM7CiAJICAgIG1ldGEtPnJhaWQuZGlz a19vZmZzZXQgPSByZHAtPm9mZnNldF9zZWN0b3JzOwogCX0KQEAgLTM0MDMsNyArMzQxNSw3IEBA IGF0YV9yYWlkX3Byb21pc2Vfd3JpdGVfbWV0YShzdHJ1Y3QgYXJfc28KIAkJICAgIGRldmljZV9n ZXRfc29mdGMocmRwLT5kaXNrc1tkcml2ZV0uZGV2KTsKIAogCQltZXRhLT5yYWlkLmRpc2tbZHJp dmVdLmNoYW5uZWwgPSBjaC0+dW5pdDsKLQkJbWV0YS0+cmFpZC5kaXNrW2RyaXZlXS5kZXZpY2Ug PSBBVEFfREVWKGF0YWRldi0+dW5pdCk7CisJCW1ldGEtPnJhaWQuZGlza1tkcml2ZV0uZGV2aWNl ID0gYXRhZGV2LT51bml0OwogCSAgICB9CiAJICAgIG1ldGEtPnJhaWQuZGlza1tkcml2ZV0ubWFn aWNfMCA9CiAJCVBSX01BR0lDMChtZXRhLT5yYWlkLmRpc2tbZHJpdmVdKSB8IHRpbWVzdGFtcC50 dl9zZWM7CkBAIC0zNzI5LDcgKzM3NDEsNyBAQCBhdGFfcmFpZF9zaXNfd3JpdGVfbWV0YShzdHJ1 Y3QgYXJfc29mdGMgCiAJICAgIHN0cnVjdCBhdGFfY2hhbm5lbCAqY2ggPSAKIAkJZGV2aWNlX2dl dF9zb2Z0YyhkZXZpY2VfZ2V0X3BhcmVudChyZHAtPmRpc2tzW2Rpc2tdLmRldikpOwogCSAgICBz dHJ1Y3QgYXRhX2RldmljZSAqYXRhZGV2ID0gZGV2aWNlX2dldF9zb2Z0YyhyZHAtPmRpc2tzW2Rp c2tdLmRldik7Ci0JICAgIGludCBkaXNrX251bWJlciA9IDEgKyBBVEFfREVWKGF0YWRldi0+dW5p dCkgKyAoY2gtPnVuaXQgPDwgMSk7CisJICAgIGludCBkaXNrX251bWJlciA9IDEgKyBhdGFkZXYt PnVuaXQgKyAoY2gtPnVuaXQgPDwgMSk7CiAKIAkgICAgbWV0YS0+ZGlza3MgfD0gZGlza19udW1i ZXIgPDwgKCgxIC0gZGlzaykgPDwgMik7CiAJfQpAQCAtMzc2Nyw3ICszNzc5LDcgQEAgYXRhX3Jh aWRfc2lzX3dyaXRlX21ldGEoc3RydWN0IGFyX3NvZnRjIAogCSAgICBiY29weShhdGFkZXYtPnBh cmFtLm1vZGVsLCBtZXRhLT5tb2RlbCwgc2l6ZW9mKG1ldGEtPm1vZGVsKSk7CiAKIAkgICAgLyog WFhYIFNPUyBpZiB0b3RhbF9kaXNrcyA+IDIgdGhpcyBtYXkgbm90IGZsb2F0ICovCi0JICAgIG1l dGEtPmRpc2tfbnVtYmVyID0gMSArIEFUQV9ERVYoYXRhZGV2LT51bml0KSArIChjaC0+dW5pdCA8 PCAxKTsKKwkgICAgbWV0YS0+ZGlza19udW1iZXIgPSAxICsgYXRhZGV2LT51bml0ICsgKGNoLT51 bml0IDw8IDEpOwogCiAJICAgIGlmICh0ZXN0aW5nIHx8IGJvb3R2ZXJib3NlKQogCQlhdGFfcmFp ZF9zaXNfcHJpbnRfbWV0YShtZXRhKTsKQEAgLTQwMTEsNyArNDAyMyw3IEBAIGF0YV9yYWlkX3Zp YV93cml0ZV9tZXRhKHN0cnVjdCBhcl9zb2Z0YyAKIH0KIAogc3RhdGljIHN0cnVjdCBhdGFfcmVx dWVzdCAqCi1hdGFfcmFpZF9pbml0X3JlcXVlc3Qoc3RydWN0IGFyX3NvZnRjICpyZHAsIHN0cnVj dCBiaW8gKmJpbykKK2F0YV9yYWlkX2luaXRfcmVxdWVzdChkZXZpY2VfdCBkZXYsIHN0cnVjdCBh cl9zb2Z0YyAqcmRwLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CiAgICAgc3RydWN0IGF0YV9yZXF1ZXN0 ICpyZXF1ZXN0OwogCkBAIC00MDE5LDYgKzQwMzEsNyBAQCBhdGFfcmFpZF9pbml0X3JlcXVlc3Qo c3RydWN0IGFyX3NvZnRjICpyCiAJcHJpbnRmKCJGQUlMVVJFIC0gb3V0IG9mIG1lbW9yeSBpbiBh dGFfcmFpZF9pbml0X3JlcXVlc3RcbiIpOwogCXJldHVybiBOVUxMOwogICAgIH0KKyAgICByZXF1 ZXN0LT5kZXYgPSBkZXY7CiAgICAgcmVxdWVzdC0+dGltZW91dCA9IDU7CiAgICAgcmVxdWVzdC0+ cmV0cmllcyA9IDI7CiAgICAgcmVxdWVzdC0+Y2FsbGJhY2sgPSBhdGFfcmFpZF9kb25lOwotLS0g c3JjL3N5cy9kZXYvYXRhL2F0YS1yYWlkLmgJMjAwNy0wMi0yMSAyMjowNzoxOC4wMDAwMDAwMDAg KzAzMDAKKysrIHNyYy9zeXMvZGV2L2F0YS9hdGEtcmFpZC5oCTIwMDgtMDQtMTAgMTc6MDU6MDUu MDAwMDAwMDAwICswNDAwCkBAIC0xLDUgKzEsNSBAQAogLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIw MDAgLSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAo YykgMjAwMCAtIDIwMDggU/hyZW4gU2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgogICogQWxsIHJp Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS0tIHNyYy9zeXMvZGV2L2F0YS9hdGEt dXNiLmMJMjAwNy0wNi0yNCAwMTo1MjowNS4wMDAwMDAwMDAgKzA0MDAKKysrIHNyYy9zeXMvZGV2 L2F0YS9hdGEtdXNiLmMJMjAwOC0wNC0xMCAxNzowNTowNS4wMDAwMDAwMDAgKzA0MDAKQEAgLTEs NSArMSw1IEBACiAvKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDcgU/hyZW4gU2NobWlk dCA8c29zQEZyZWVCU0Qub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBT+HJlbiBT Y2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dApAQCAtMzYsNyArMzYsNiBAQCBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9zeXMv ZGV2L2F0YS9hdGEtCiAjaW5jbHVkZSA8c3lzL2F0YS5oPgogI2luY2x1ZGUgPHN5cy9idXMuaD4K ICNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+Ci0jaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgogI2luY2x1 ZGUgPHN5cy9tYWxsb2MuaD4KICNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CiAjaW5jbHVkZSA8c3lz L3NlbWEuaD4KLS0tIHNyYy9zeXMvZGV2L2F0YS9hdGFfaWYubQkyMDA3LTA0LTA2IDIwOjE4OjU5 LjAwMDAwMDAwMCArMDQwMAorKysgc3JjL3N5cy9kZXYvYXRhL2F0YV9pZi5tCTIwMDgtMDQtMTAg MTc6MDU6MDUuMDAwMDAwMDAwICswNDAwCkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgKGMp IDIwMDQgLSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KKyMgQ29weXJpZ2h0 IChjKSAyMDA0IC0gMjAwOCBT+HJlbiBTY2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CiAjIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLS0gc3JjL3N5cy9kZXYvYXRhL2F0YXBp LWNkLmMJMjAwNy0xMS0yMiAwMDoxNTowMC4wMDAwMDAwMDAgKzAzMDAKKysrIHNyYy9zeXMvZGV2 L2F0YS9hdGFwaS1jZC5jCTIwMDgtMDUtMDggMjE6NTU6NDQuMDAwMDAwMDAwICswNDAwCkBAIC0x LDUgKzEsNSBAQAogLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggLSAyMDA3IFP4cmVuIFNjaG1p ZHQgPHNvc0BGcmVlQlNELm9yZz4KKyAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDggU/hyZW4g U2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKQEAgLTY5Niw3ICs2OTYsNiBAQCBhY2RfZ2VvbV9hY2Nlc3Moc3RydWN0IGdf cHJvdmlkZXIgKnBwLCBpCiAKICAgICAvKiB3YWl0IGlmIGRyaXZlIGlzIG5vdCBmaW5pc2hlZCBs b2FkaW5nIHRoZSBtZWRpdW0gKi8KICAgICB3aGlsZSAodGltZW91dC0tKSB7Ci0JYnplcm8ocmVx dWVzdCwgc2l6ZW9mKHN0cnVjdCBhdGFfcmVxdWVzdCkpOwogCXJlcXVlc3QtPmRldiA9IGRldjsK IAliY29weShjY2IsIHJlcXVlc3QtPnUuYXRhcGkuY2NiLCAxNik7CiAJcmVxdWVzdC0+ZmxhZ3Mg PSBBVEFfUl9BVEFQSTsKQEAgLTkwNywxMSArOTA2LDExIEBAIGFjZF9zZXRfaW9wYXJtKGRldmlj ZV90IGRldikKIHsKICAgICBzdHJ1Y3QgYXRhX2NoYW5uZWwgKmNoID0gZGV2aWNlX2dldF9zb2Z0 YyhkZXZpY2VfZ2V0X3BhcmVudChkZXYpKTsKICAgICBzdHJ1Y3QgYWNkX3NvZnRjICpjZHAgPSBk ZXZpY2VfZ2V0X2l2YXJzKGRldik7CisgICAgdWludDMyX3QgbWF4X2lvc2l6ZTsKIAotICAgIGlm IChjaC0+ZG1hKQotCWNkcC0+aW9tYXggPSBtaW4oY2gtPmRtYS0+bWF4X2lvc2l6ZSwgNjU1MzQp OwotICAgIGVsc2UKLQljZHAtPmlvbWF4ID0gbWluKERGTFRQSFlTLCA2NTUzNCk7CisgICAgbWF4 X2lvc2l6ZSA9IGNoLT5kbWEubWF4X2lvc2l6ZSA/IGNoLT5kbWEubWF4X2lvc2l6ZSA6IERGTFRQ SFlTOworCisgICAgY2RwLT5pb21heCA9IG1pbihtYXhfaW9zaXplLCA2NTUzNCk7CiB9CiAKIHN0 YXRpYyB2b2lkIApAQCAtMTcwNiw4ICsxNzA1LDcgQEAgYWNkX2Rlc2NyaWJlKGRldmljZV90IGRl dikKIAkJCShjZHAtPmNhcC5tZWRpYSAmIE1TVF9XUklURV9DRFJXKSA/ICJDRFJXIiA6CiAJCQkg KGNkcC0+Y2FwLm1lZGlhICYgTVNUX1dSSVRFX0NEUikgPyAiQ0RSIiA6IAogCQkJICAoY2RwLT5j YXAubWVkaWEgJiBNU1RfUkVBRF9EVkRST00pID8gIkRWRFJPTSI6IkNEUk9NIiwKLQkJICAgICAg ZGV2aWNlX2dldF91bml0KGNoLT5kZXYpLAotCQkgICAgICAoYXRhZGV2LT51bml0ID09IEFUQV9N QVNURVIpID8gIm1hc3RlciIgOiAic2xhdmUiKTsKKwkJICAgICAgZGV2aWNlX2dldF91bml0KGNo LT5kZXYpLCBhdGFfdW5pdDJzdHIoYXRhZGV2KSk7CiAKIAlkZXZpY2VfcHJpbnRmKGRldiwgIiVz IiwgIiIpOwogCWlmIChjZHAtPmNhcC5jdXJfcmVhZF9zcGVlZCkgewpAQCAtMTg3OSw4ICsxODc3 LDcgQEAgYWNkX2Rlc2NyaWJlKGRldmljZV90IGRldikKIAkgICAgcHJpbnRmKCJ3aXRoICVkIENE IGNoYW5nZXIgIiwgY2RwLT5jaGFuZ2VyX2luZm8tPnNsb3RzKTsKIAlwcmludGYoIjwlLjQwcy8l LjhzPiBhdCBhdGElZC0lcyAlc1xuIiwKIAkgICAgICAgYXRhZGV2LT5wYXJhbS5tb2RlbCwgYXRh ZGV2LT5wYXJhbS5yZXZpc2lvbiwKLQkgICAgICAgZGV2aWNlX2dldF91bml0KGNoLT5kZXYpLAot CSAgICAgICAoYXRhZGV2LT51bml0ID09IEFUQV9NQVNURVIpID8gIm1hc3RlciIgOiAic2xhdmUi LAorCSAgICAgICBkZXZpY2VfZ2V0X3VuaXQoY2gtPmRldiksIGF0YV91bml0MnN0cihhdGFkZXYp LAogCSAgICAgICBhdGFfbW9kZTJzdHIoYXRhZGV2LT5tb2RlKSApOwogICAgIH0KIH0KLS0tIHNy Yy9zeXMvZGV2L2F0YS9hdGFwaS1jZC5oCTIwMDctMTAtMzEgMjI6NTk6NTMuMDAwMDAwMDAwICsw MzAwCisrKyBzcmMvc3lzL2Rldi9hdGEvYXRhcGktY2QuaAkyMDA4LTA0LTEwIDE3OjA1OjA1LjAw MDAwMDAwMCArMDQwMApAQCAtMSw1ICsxLDUgQEAKIC8qLQotICogQ29weXJpZ2h0IChjKSAxOTk4 IC0gMjAwNyBT+HJlbiBTY2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CisgKiBDb3B5cmlnaHQgKGMp IDE5OTggLSAyMDA4IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KICAqIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0tLSBzcmMvc3lzL2Rldi9hdGEvYXRhcGkt ZmQuYwkyMDA3LTExLTIyIDAwOjE1OjAwLjAwMDAwMDAwMCArMDMwMAorKysgc3JjL3N5cy9kZXYv YXRhL2F0YXBpLWZkLmMJMjAwOC0wNS0wOCAyMTo1NTo0NC4wMDAwMDAwMDAgKzA0MDAKQEAgLTEs NSArMSw1IEBACiAvKi0KLSAqIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDcgU/hyZW4gU2NobWlk dCA8c29zQEZyZWVCU0Qub3JnPgorICogQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwOCBT+HJlbiBT Y2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dApAQCAtMTA1LDEwICsxMDUsNyBAQCBhZmRfYXR0YWNoKGRldmljZV90IGRldikK ICAgICBmZHAtPmRpc2stPmRfaW9jdGwgPSBhZmRfaW9jdGw7CiAgICAgZmRwLT5kaXNrLT5kX25h bWUgPSAiYWZkIjsKICAgICBmZHAtPmRpc2stPmRfZHJ2MSA9IGRldjsKLSAgICBpZiAoY2gtPmRt YSkKLQlmZHAtPmRpc2stPmRfbWF4c2l6ZSA9IGNoLT5kbWEtPm1heF9pb3NpemU7Ci0gICAgZWxz ZQotCWZkcC0+ZGlzay0+ZF9tYXhzaXplID0gREZMVFBIWVM7CisgICAgZmRwLT5kaXNrLT5kX21h eHNpemUgPSBjaC0+ZG1hLm1heF9pb3NpemUgPyBjaC0+ZG1hLm1heF9pb3NpemUgOiBERkxUUEhZ UzsKICAgICBmZHAtPmRpc2stPmRfdW5pdCA9IGRldmljZV9nZXRfdW5pdChkZXYpOwogICAgIGRp c2tfY3JlYXRlKGZkcC0+ZGlzaywgRElTS19WRVJTSU9OKTsKICAgICByZXR1cm4gMDsKQEAgLTQw Niw4ICs0MDMsNyBAQCBhZmRfZGVzY3JpYmUoZGV2aWNlX3QgZGV2KQogIAogICAgIGRldmljZV9w cmludGYoZGV2LCAiJXMgPCUuNDBzICUuOHM+IGF0IGF0YSVkLSVzICVzXG4iLAogCQkgIHNpemVz dHJpbmcsIGF0YWRldi0+cGFyYW0ubW9kZWwsIGF0YWRldi0+cGFyYW0ucmV2aXNpb24sCi0JCSAg ZGV2aWNlX2dldF91bml0KGNoLT5kZXYpLAotCQkgIChhdGFkZXYtPnVuaXQgPT0gQVRBX01BU1RF UikgPyAibWFzdGVyIiA6ICJzbGF2ZSIsCisJCSAgZGV2aWNlX2dldF91bml0KGNoLT5kZXYpLCBh dGFfdW5pdDJzdHIoYXRhZGV2KSwKIAkJICBhdGFfbW9kZTJzdHIoYXRhZGV2LT5tb2RlKSk7CiAg ICAgaWYgKGJvb3R2ZXJib3NlKSB7CiAJZGV2aWNlX3ByaW50ZihkZXYsICIlanUgc2VjdG9ycyBb JWp1Qy8lZEgvJWRTXVxuIiwKLS0tIHNyYy9zeXMvZGV2L2F0YS9hdGFwaS1mZC5oCTIwMDctMDIt MjEgMjI6MDc6MTkuMDAwMDAwMDAwICswMzAwCisrKyBzcmMvc3lzL2Rldi9hdGEvYXRhcGktZmQu aAkyMDA4LTA0LTEwIDE3OjA1OjA1LjAwMDAwMDAwMCArMDQwMApAQCAtMSw1ICsxLDUgQEAKIC8q LQotICogQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwNyBT+HJlbiBTY2htaWR0IDxzb3NARnJlZUJT RC5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDE5OTggLSAyMDA4IFP4cmVuIFNjaG1pZHQgPHNvc0BG cmVlQlNELm9yZz4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0t LSBzcmMvc3lzL2Rldi9hdGEvYXRhcGktdGFwZS5jCTIwMDctMTEtMjIgMDA6MTU6MDAuMDAwMDAw MDAwICswMzAwCisrKyBzcmMvc3lzL2Rldi9hdGEvYXRhcGktdGFwZS5jCTIwMDgtMDktMjcgMTI6 NTE6MTguMDAwMDAwMDAwICswNDAwCkBAIC0xLDUgKzEsNSBAQAogLyotCi0gKiBDb3B5cmlnaHQg KGMpIDE5OTggLSAyMDA3IFP4cmVuIFNjaG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KKyAqIENvcHly aWdodCAoYykgMTk5OCAtIDIwMDggU/hyZW4gU2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgogICog QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE0MiwxOSArMTQyLDEz IEBAIGFzdF9hdHRhY2goZGV2aWNlX3QgZGV2KQogCQkgICAgICBVSURfUk9PVCwgR0lEX09QRVJB VE9SLCAwNjQwLCAiYXN0JWQiLAogCQkgICAgICBkZXZpY2VfZ2V0X3VuaXQoZGV2KSk7CiAgICAg ZGV2aWNlLT5zaV9kcnYxID0gZGV2OwotICAgIGlmIChjaC0+ZG1hKQotCWRldmljZS0+c2lfaW9z aXplX21heCA9IGNoLT5kbWEtPm1heF9pb3NpemU7Ci0gICAgZWxzZQotCWRldmljZS0+c2lfaW9z aXplX21heCA9IERGTFRQSFlTOworICAgIGRldmljZS0+c2lfaW9zaXplX21heCA9IGNoLT5kbWEu bWF4X2lvc2l6ZSA/IGNoLT5kbWEubWF4X2lvc2l6ZSA6IERGTFRQSFlTOwogICAgIHN0cC0+ZGV2 MSA9IGRldmljZTsKICAgICBkZXZpY2UgPSBtYWtlX2RldigmYXN0X2NkZXZzdywgMiAqIGRldmlj ZV9nZXRfdW5pdChkZXYpICsgMSwKIAkJICAgICAgVUlEX1JPT1QsIEdJRF9PUEVSQVRPUiwgMDY0 MCwgIm5hc3QlZCIsCiAJCSAgICAgIGRldmljZV9nZXRfdW5pdChkZXYpKTsKICAgICBkZXZpY2Ut PnNpX2RydjEgPSBkZXY7Ci0gICAgaWYgKGNoLT5kbWEpCi0JZGV2aWNlLT5zaV9pb3NpemVfbWF4 ID0gY2gtPmRtYS0+bWF4X2lvc2l6ZTsKLSAgICBlbHNlCi0JZGV2aWNlLT5zaV9pb3NpemVfbWF4 ID0gREZMVFBIWVM7CisgICAgZGV2aWNlLT5zaV9pb3NpemVfbWF4ID0gY2gtPmRtYS5tYXhfaW9z aXplOwogICAgIHN0cC0+ZGV2MiA9IGRldmljZTsKIAogICAgIC8qIGFubm91bmNlIHdlIGFyZSBo ZXJlIGFuZCByZWFkeSAqLwpAQCAtMjQ0LDcgKzIzOCw3IEBAIGFzdF9jbG9zZShzdHJ1Y3QgY2Rl diAqY2RldiwgaW50IGZsYWdzLCAKIAlhc3Rfd3JpdGVfZmlsZW1hcmsoZGV2LCBBVEFQSV9XRl9X UklURSk7CiAKICAgICAvKiBpZiBtaW5vciBpcyBldmVuIHJld2luZCBvbiBjbG9zZSAqLwotICAg IGlmICghKG1pbm9yKGNkZXYpICYgMHgwMSkpCisgICAgaWYgKCEoZGV2MnVuaXQoY2RldikgJiAw eDAxKSkKIAlhc3RfcmV3aW5kKGRldik7CiAKICAgICBpZiAoc3RwLT5jYXAubG9jayAmJiBjb3Vu dF9kZXYoY2RldikgPT0gMSkKQEAgLTY3OCw4ICs2NzIsNyBAQCBhc3RfZGVzY3JpYmUoZGV2aWNl X3QgZGV2KQogICAgIGlmIChib290dmVyYm9zZSkgewogCWRldmljZV9wcmludGYoZGV2LCAiPCUu NDBzLyUuOHM+IHRhcGUgZHJpdmUgYXQgYXRhJWQgYXMgJXNcbiIsCiAJCSAgICAgIGF0YWRldi0+ cGFyYW0ubW9kZWwsIGF0YWRldi0+cGFyYW0ucmV2aXNpb24sCi0JCSAgICAgIGRldmljZV9nZXRf dW5pdChjaC0+ZGV2KSwKLQkJICAgICAgKGF0YWRldi0+dW5pdCA9PSBBVEFfTUFTVEVSKSA/ICJt YXN0ZXIiIDogInNsYXZlIik7CisJCSAgICAgIGRldmljZV9nZXRfdW5pdChjaC0+ZGV2KSwgYXRh X3VuaXQyc3RyKGF0YWRldikpOwogCWRldmljZV9wcmludGYoZGV2LCAiJWRLQi9zLCAiLCBzdHAt PmNhcC5tYXhfc3BlZWQpOwogCXByaW50ZigidHJhbnNmZXIgbGltaXQgJWQgYmxrJXMsICIsCiAJ ICAgICAgIHN0cC0+Y2FwLmN0bCwgKHN0cC0+Y2FwLmN0bCA+IDEpID8gInMiIDogIiIpOwpAQCAt NzE3LDggKzcxMCw3IEBAIGFzdF9kZXNjcmliZShkZXZpY2VfdCBkZXYpCiAgICAgZWxzZSB7CiAJ ZGV2aWNlX3ByaW50ZihkZXYsICJUQVBFIDwlLjQwcy8lLjhzPiBhdCBhdGElZC0lcyAlc1xuIiwK IAkJICAgICAgYXRhZGV2LT5wYXJhbS5tb2RlbCwgYXRhZGV2LT5wYXJhbS5yZXZpc2lvbiwKLQkJ ICAgICAgZGV2aWNlX2dldF91bml0KGNoLT5kZXYpLAotCQkgICAgICAoYXRhZGV2LT51bml0ID09 IEFUQV9NQVNURVIpID8gIm1hc3RlciIgOiAic2xhdmUiLAorCQkgICAgICBkZXZpY2VfZ2V0X3Vu aXQoY2gtPmRldiksIGF0YV91bml0MnN0cihhdGFkZXYpLAogCQkgICAgICBhdGFfbW9kZTJzdHIo YXRhZGV2LT5tb2RlKSk7CiAgICAgfQogfQotLS0gc3JjL3N5cy9kZXYvYXRhL2F0YXBpLXRhcGUu aAkyMDA3LTAyLTIxIDIyOjA3OjE5LjAwMDAwMDAwMCArMDMwMAorKysgc3JjL3N5cy9kZXYvYXRh L2F0YXBpLXRhcGUuaAkyMDA4LTA0LTEwIDE3OjA1OjA1LjAwMDAwMDAwMCArMDQwMApAQCAtMSw1 ICsxLDUgQEAKIC8qLQotICogQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwNyBT+HJlbiBTY2htaWR0 IDxzb3NARnJlZUJTRC5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDE5OTggLSAyMDA4IFP4cmVuIFNj aG1pZHQgPHNvc0BGcmVlQlNELm9yZz4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0Ci0tLSBzcmMvc3lzL3N5cy9hdGEuaAkyMDA4LTA0LTA4IDEwOjQ4OjIxLjAwMDAw MDAwMCArMDAwMAorKysgc3JjL3N5cy9zeXMvYXRhLmgJMjAwOC0wNC0xMCAxMzowMToxNy4wMDAw MDAwMDAgKzAwMDAKQEAgLTEsNSArMSw1IEBACiAvKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMCAt IDIwMDYgU/hyZW4gU2NobWlkdCA8c29zQEZyZWVCU0Qub3JnPgorICogQ29weXJpZ2h0IChjKSAy MDAwIC0gMjAwOCBT+HJlbiBTY2htaWR0IDxzb3NARnJlZUJTRC5vcmc+CiAgKiBBbGwgcmlnaHRz IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjM5LDcgKzIzOSw3IEBAIHN0cnVjdCBh dGFfcGFyYW1zIHsKICNkZWZpbmUgQVRBX1JFQUQ0OCAgICAgICAgICAgICAgICAgICAgICAweDI0 ICAgIC8qIHJlYWQgNDhiaXQgTEJBICovCiAjZGVmaW5lIEFUQV9SRUFEX0RNQTQ4ICAgICAgICAg ICAgICAgICAgMHgyNSAgICAvKiByZWFkIERNQSA0OGJpdCBMQkEgKi8KICNkZWZpbmUgQVRBX1JF QURfRE1BX1FVRVVFRDQ4ICAgICAgICAgICAweDI2ICAgIC8qIHJlYWQgRE1BIFFVRVVFRCA0OGJp dCBMQkEgKi8KLSNkZWZpbmUgQVRBX1JFQURfTkFUSVZFX01BWF9BREREUkVTUzQ4ICAweDI3ICAg IC8qIHJlYWQgbmF0aXZlIG1heCBhZGRyIDQ4Yml0ICovCisjZGVmaW5lIEFUQV9SRUFEX05BVElW RV9NQVhfQUREUkVTUzQ4ICAgMHgyNyAgICAvKiByZWFkIG5hdGl2ZSBtYXggYWRkciA0OGJpdCAq LwogI2RlZmluZSBBVEFfUkVBRF9NVUw0OCAgICAgICAgICAgICAgICAgIDB4MjkgICAgLyogcmVh ZCBtdWx0aSA0OGJpdCBMQkEgKi8KICNkZWZpbmUgQVRBX1dSSVRFICAgICAgICAgICAgICAgICAg ICAgICAweDMwICAgIC8qIHdyaXRlICovCiAjZGVmaW5lIEFUQV9XUklURTQ4ICAgICAgICAgICAg ICAgICAgICAgMHgzNCAgICAvKiB3cml0ZSA0OGJpdCBMQkEgKi8KQEAgLTI2Nyw4ICsyNjcsMTAg QEAgc3RydWN0IGF0YV9wYXJhbXMgewogI2RlZmluZSBBVEFfU1RBTkRCWV9DTUQgICAgICAgICAg ICAgICAgIDB4ZTIgICAgLyogc3RhbmRieSAqLwogI2RlZmluZSBBVEFfSURMRV9DTUQgICAgICAg ICAgICAgICAgICAgIDB4ZTMgICAgLyogaWRsZSAqLwogI2RlZmluZSBBVEFfUkVBRF9CVUZGRVIg ICAgICAgICAgICAgICAgIDB4ZTQgICAgLyogcmVhZCBidWZmZXIgKi8KKyNkZWZpbmUgQVRBX1JF QURfUE0gICAgICAgICAgICAgICAgICAgICAweGU0ICAgIC8qIHJlYWQgcG9ydG11bHRpcGxpZXIg Ki8KICNkZWZpbmUgQVRBX1NMRUVQICAgICAgICAgICAgICAgICAgICAgICAweGU2ICAgIC8qIHNs ZWVwICovCiAjZGVmaW5lIEFUQV9GTFVTSENBQ0hFICAgICAgICAgICAgICAgICAgMHhlNyAgICAv KiBmbHVzaCBjYWNoZSB0byBkaXNrICovCisjZGVmaW5lIEFUQV9XUklURV9QTSAgICAgICAgICAg ICAgICAgICAgMHhlOCAgICAvKiB3cml0ZSBwb3J0bXVsdGlwbGllciAqLwogI2RlZmluZSBBVEFf RkxVU0hDQUNIRTQ4ICAgICAgICAgICAgICAgIDB4ZWEgICAgLyogZmx1c2ggY2FjaGUgdG8gZGlz ayAqLwogI2RlZmluZSBBVEFfQVRBX0lERU5USUZZICAgICAgICAgICAgICAgIDB4ZWMgICAgLyog Z2V0IEFUQSBwYXJhbXMgKi8KICNkZWZpbmUgQVRBX1NFVEZFQVRVUkVTICAgICAgICAgICAgICAg ICAweGVmICAgIC8qIGZlYXR1cmVzIGNvbW1hbmQgKi8KQEAgLTI4Miw3ICsyODQsNyBAQCBzdHJ1 Y3QgYXRhX3BhcmFtcyB7CiAjZGVmaW5lICAgICAgICAgQVRBX1NGX0VOQUJfU1JWSVJRICAgICAg MHg1ZSAgICAvKiBlbmFibGUgc2VydmljZSBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgICAgICAgICBB VEFfU0ZfRElTX1NSVklSUSAgICAgICAweGRlICAgIC8qIGRpc2FibGUgc2VydmljZSBpbnRlcnJ1 cHQgKi8KICNkZWZpbmUgQVRBX1NFQ1VSSVRZX0ZSRUVFX0xPQ0sgICAgICAgICAweGY1ICAgIC8q IGZyZWV6ZSBzZWN1cml0eSBjb25maWcgKi8KLSNkZWZpbmUgQVRBX1JFQURfTkFUSVZFX01BWF9B REREUkVTUyAgICAweGY4ICAgIC8qIHJlYWQgbmF0aXZlIG1heCBhZGRyZXNzICovCisjZGVmaW5l IEFUQV9SRUFEX05BVElWRV9NQVhfQUREUkVTUyAgICAgMHhmOCAgICAvKiByZWFkIG5hdGl2ZSBt YXggYWRkcmVzcyAqLwogI2RlZmluZSBBVEFfU0VUX01BWF9BRERSRVNTICAgICAgICAgICAgIDB4 ZjkgICAgLyogc2V0IG1heCBhZGRyZXNzICovCiAKIAo= ------==--bound.67616.webmail38.yandex.ru--