From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [RFC,1/2] drivers/edac: Add L1 and L2 error detection for A53 and A57 From: York Sun Message-Id: <1521073067-24348-1-git-send-email-york.sun@nxp.com> Date: Wed, 14 Mar 2018 17:17:46 -0700 To: bp@alien8.de Cc: linux-edac@vger.kernel.org, linux-kernel@vger.kernel.org, York Sun List-ID: QWRkIGVycm9yIGRldGVjdGlvbiBmb3IgQTUzIGFuZCBBNTcgY29yZXMuIEhhcmR3YXJlIGVycm9y IGluamVjdGlvbgppcyBzdXBwb3J0ZWQgb24gQTUzLiBTb2Z0d2FyZSBlcnJvciBpbmplY3Rpb24g aXMgc3VwcG9ydGVkIG9uIGJvdGguCkZvciBoYXJkd2FyZSBlcnJvciBpbmplY3Rpb24gb24gQTUz IHRvIHdvcmssIHByb3BlciBhY2Nlc3MgdG8KTDJBQ1RMUl9FTDEsIENQVUFDVExSX0VMMSBuZWVk cyB0byBiZSBncmFudGVkIGJ5IEVMMyBmaXJtd2FyZS4gVGhpcwppcyBkb25lIGJ5IG1ha2luZyBh biBTTUMgY2FsbCBpbiB0aGUgZHJpdmVyLiBGYWlsdXJlIHRvIGVuYWJsZSBhY2Nlc3MKZGlzYWJs ZXMgaGFyZHdhcmUgZXJyb3IgaW5qZWN0aW9uLiBGb3IgZXJyb3IgaW50ZXJydXB0IHRvIHdvcmss CmFub3RoZXIgU01DIGNhbGwgZW5hYmxlcyBhY2Nlc3MgdG8gTDJFQ1RMUl9FTDEuIEZhaWx1cmUg dG8gZW5hYmxlCmFjY2VzcyBkaXNhYmxlcyBpbnRlcnJ1cHQgZm9yIGVycm9yIHJlcG9ydGluZy4K ClNpZ25lZC1vZmYtYnk6IFlvcmsgU3VuIDx5b3JrLnN1bkBueHAuY29tPgotLS0KIC4uLi9kZXZp Y2V0cmVlL2JpbmRpbmdzL2VkYWMvY29ydGV4LWFybTY0LWVkYWMudHh0IHwgIDM3ICsKIGFyY2gv YXJtNjQvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oICAgICAgICAgICAgICAgIHwgICAxICsKIGFy Y2gvYXJtNjQvbW0vY2FjaGUuUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDM1ICsK IGRyaXZlcnMvZWRhYy9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2 ICsKIGRyaXZlcnMvZWRhYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAxICsKIGRyaXZlcnMvZWRhYy9jb3J0ZXhfYXJtNjRfbDFfbDIuYyAgICAgICAgICAgICAgICAg IHwgNzQxICsrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9lZGFjL2NvcnRleF9hcm02NF9s MV9sMi5oICAgICAgICAgICAgICAgICAgfCAgNTUgKysKIDcgZmlsZXMgY2hhbmdlZCwgODc2IGlu c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUv YmluZGluZ3MvZWRhYy9jb3J0ZXgtYXJtNjQtZWRhYy50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2VkYWMvY29ydGV4X2FybTY0X2wxX2wyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2VkYWMvY29ydGV4X2FybTY0X2wxX2wyLmgKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9u L2RldmljZXRyZWUvYmluZGluZ3MvZWRhYy9jb3J0ZXgtYXJtNjQtZWRhYy50eHQgYi9Eb2N1bWVu dGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZWRhYy9jb3J0ZXgtYXJtNjQtZWRhYy50eHQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRhMWMyZgotLS0gL2Rldi9udWxsCisr KyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9lZGFjL2NvcnRleC1hcm02NC1l ZGFjLnR4dApAQCAtMCwwICsxLDM3IEBACitBUk0gQ29ydGV4IEE1NyBhbmQgQTUzIEwxL0wyIGNh Y2hlIGVycm9yIHJlcG9ydGluZworCitDUFUgTWVtb3J5IEVycm9yIFN5bmRyb21lIGFuZCBMMiBN ZW1vcnkgRXJyb3IgU3luZHJvbWUgcmVnaXN0ZXJzIGNhbiBiZSB1c2VkCitmb3IgY2hlY2tpbmcg TDEgYW5kIEwyIG1lbW9yeSBlcnJvcnMuIEhvd2V2ZXIsIG9ubHkgQTUzIHN1cHBvcnRzIGRvdWJs ZS1iaXQKK2Vycm9yIGluamVjdGlvbiB0byBMMSBhbmQgTDIgbWVtb3J5LiBUaGlzIGRyaXZlciB1 c2VzIHRoZSBoYXJkd2FyZSBlcnJvcgoraW5qZWN0aW9uIHdoZW4gYXZhaWxhYmxlLCBidXQgYWxz byBwcm92aWRlcyBhIHdheSB0byBpbmplY3QgZXJyb3JzIGJ5Citzb2Z0d2FyZS4gQm90aCBBNTMg YW5kIEE1NyBzdXBwb3J0cyBpbnRlcnJ1cHQgd2hlbiBtdWx0aS1iaXQgZXJyb3JzIGhhcHBlbi4K KworVG8gdXNlIGhhcmR3YXJlIGVycm9yIGluamVjdGlvbiBhbmQgdGhlIGludGVycnVwdCwgcHJv cGVyIGFjY2VzcyBuZWVkcyB0byBiZQorZ3JhbnRlZCBpbiBBQ1RMUl9FTDMgKGFuZC9vciBBQ1RM Ul9FTDIpIHJlZ2lzdGVyIGJ5IEVMMyBmaXJtd2FyZSBTTUMgY2FsbC4KKworQ29ycmVjdGFibGUg ZXJyb3JzIGRvIG5vdCB0cmlnZ2VyIHN1Y2ggaW50ZXJydXB0LiBUaGlzIGRyaXZlciB1c2VzIGR5 bmFtaWMKK3BvbGxpbmcgaW50ZXJuYWwgdG8gY2hlY2sgZm9yIGVycm9ycy4gVGhlIG1vcmUgZXJy b3JzIGRldGVjdGVkLCB0aGUgbW9yZQorZnJlcXVlbnRseSBpdCBwb2xscy4gQ29tYmluaW5nIHdp dGggaW50ZXJydXB0LCB0aGlzIGRyaXZlciBjYW4gZGV0ZWN0Citjb3JyZWN0YWJsZSBhbmQgdW5j b3JyZWN0YWJsZSBlcnJvcnMuIEhvd2V2ZXIsIGlmIHRoZSB1bmNvcnJlY3RhYmxlIGVycm9ycwor Y2F1c2Ugc3lzdGVtIGFib3J0IGV4Y2VwdGlvbiwgdGhpcyBkcml2ciBpcyBub3QgYWJsZSB0byBy ZXBvcnQgZXJyb3JzIGluIHRpbWUuCisKK1RoZSBmb2xsb3dpbmcgc2VjdGlvbiBkZXNjcmliZXMg dGhlIENvcnRleCBBNTcvQTUzIEVEQUMgRFQgbm9kZSBiaW5kaW5nLgorCitSZXF1aXJlZCBwcm9w ZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgImFybSxjb3J0ZXgtYTU3LWVkYWMiIG9y ICJhcm0sY29ydGV4LWE1My1lZGFjIgorLSBjcHVzOiBTaG91bGQgYmUgYSBsaXN0IG9mIGNvbXBh dGlibGUgY29yZXMKKworT3B0aW9uYWwgcHJvcGVydGllczoKKy0gaW50ZXJydXB0czogSW50ZXJy dXB0IG51bWJlciBpZiBzdXBwb3J0ZWQKKworRXhhbXBsZToKKwllZGFjIHsKKwkJY29tcGF0aWJs ZSA9ICJhcm0sY29ydGV4LWE1My1lZGFjIjsKKwkJY3B1cyA9IDwmY3B1MD4sCisJCSAgICAgICA8 JmNwdTE+LAorCQkgICAgICAgPCZjcHUyPiwKKwkJICAgICAgIDwmY3B1Mz47CisJCWludGVycnVw dHMgPSA8MCAxMDggMHg0PjsKKworCX07CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVk ZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgK aW5kZXggNzZkMWNjOC4uZjFjZDA5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2Fz bS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgK QEAgLTczLDYgKzczLDcgQEAgZXh0ZXJuIHZvaWQgX19jbGVhbl9kY2FjaGVfYXJlYV9wb3Aodm9p ZCAqYWRkciwgc2l6ZV90IGxlbik7CiBleHRlcm4gdm9pZCBfX2NsZWFuX2RjYWNoZV9hcmVhX3Bv dSh2b2lkICphZGRyLCBzaXplX3QgbGVuKTsKIGV4dGVybiBsb25nIF9fZmx1c2hfY2FjaGVfdXNl cl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiBleHRlcm4g dm9pZCBzeW5jX2ljYWNoZV9hbGlhc2VzKHZvaWQgKmthZGRyLCB1bnNpZ25lZCBsb25nIGxlbik7 CitleHRlcm4gdm9pZCBfX2ZsdXNoX2wxX2RjYWNoZV93YXkocGh5c19hZGRyX3QgcHRyKTsKIAog c3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQog ewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9jYWNoZS5TIGIvYXJjaC9hcm02NC9tbS9jYWNo ZS5TCmluZGV4IDdmMWRiZTkuLjVlNjVjMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vY2Fj aGUuUworKysgYi9hcmNoL2FybTY0L21tL2NhY2hlLlMKQEAgLTIyMSwzICsyMjEsMzggQEAgRU5U UlkoX19kbWFfdW5tYXBfYXJlYSkKIAliLm5lCV9fZG1hX2ludl9hcmVhCiAJcmV0CiBFTkRQSVBS T0MoX19kbWFfdW5tYXBfYXJlYSkKKworLyoKKyAqCUZsdXNoIEwxIGRjYWNoZSBieSB3YXksIHVz aW5nIHBoeXNpY2FsIGFkZHJlc3MgdG8gZmluZCBzZXRzCisgKgorICoJX19mbHVzaF9sMV9kY2Fj aGVfd2F5KHB0cikKKyAqCS0gcHRyCS0gcGh5c2ljYWwgYWRkcmVzcyB0byBiZSBmbHVzaGVkCisg Ki8KK0VOVFJZKF9fZmx1c2hfbDFfZGNhY2hlX3dheSkKKwltc3IJY3NzZWxyX2VsMSwgeHpyCQkv KiBzZWxlY3QgY2FjaGUgbGV2ZWwgMSAqLworCWlzYgorCW1ycwl4NiwgY2NzaWRyX2VsMQorCWFu ZAl4MiwgeDYsICM3CisJYWRkCXgyLCB4MiwgIzQJCS8qIHgyIGhhcyBsb2cyKGNhY2hlIGxpbmUg c2l6ZSkgKi8KKwltb3YJeDMsICMweDNmZgorCWFuZAl4MywgeDMsIHg2LCBsc3IgIzMJLyogeDMg aGFzIG51bWJlciBvZiB3YXlzIC0gMSAqLworCWNsegl3NSwgdzMJCQkvKiBiaXQgcG9zaXRpb24g b2Ygd2F5cyAqLworCW1vdgl4NCwgIzB4N2ZmZgorCWFuZAl4NCwgeDQsIHg2LCBsc3IgIzEzCS8q IHg0IGhhcyBudW1iZXIgb2Ygc2V0cyAtIDEgKi8KKwljbHoJeDcsIHg0CisJbHNyCXgwLCB4MCwg eDIKKwlsc2wJeDAsIHgwLCB4NworCWxzcgl4MCwgeDAsIHg3CQkvKiB4MCBoYXMgdGhlIHNldCBm b3IgcHRyICovCisKKwltb3YJeDYsIHgzCitsb29wX3dheToKKwlsc2wJeDksIHgzLCB4NQorCWxz bAl4NywgeDAsIHgyCisJb3JyCXg5LCB4OSwgeDcKKwlkYwljaXN3LCB4OQorCXN1YnMJeDYsIHg2 LCAjMQorCWIuZ2UJbG9vcF93YXkKKwlkc2IJaXNoCisJcmV0CisKK0VORFBJUFJPQyhfX2ZsdXNo X2wxX2RjYWNoZV93YXkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvS2NvbmZpZyBiL2RyaXZl cnMvZWRhYy9LY29uZmlnCmluZGV4IDk2YWZiMmEuLjY3Y2Q2MGMgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZWRhYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCkBAIC00NTcsNCArNDU3 LDEwIEBAIGNvbmZpZyBFREFDX1hHRU5FCiAJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24g YW5kIGNvcnJlY3Rpb24gb24gdGhlCiAJICBBUE0gWC1HZW5lIGZhbWlseSBvZiBTT0NzLgogCitj b25maWcgRURBQ19DT1JURVhfQVJNNjRfTDFfTDIKKwl0cmlzdGF0ZSAiQVJNIENvcnRleCBBNTcv QTUzIgorCWRlcGVuZHMgb24gQVJNNjQKKwloZWxwCisJICBTdXBwb3J0IGZvciBlcnJvciBkZXRl Y3Rpb24gb24gQVJNIENvcnRleCBBNTcgYW5kIEE1My4KKwogZW5kaWYgIyBFREFDCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2VkYWMvTWFrZWZpbGUgYi9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKaW5kZXgg MGZkOWZmYS4uNmMyMTk0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL01ha2VmaWxlCisrKyBi L2RyaXZlcnMvZWRhYy9NYWtlZmlsZQpAQCAtNzgsMyArNzgsNCBAQCBvYmotJChDT05GSUdfRURB Q19USFVOREVSWCkJCSs9IHRodW5kZXJ4X2VkYWMubwogb2JqLSQoQ09ORklHX0VEQUNfQUxURVJB KQkJKz0gYWx0ZXJhX2VkYWMubwogb2JqLSQoQ09ORklHX0VEQUNfU1lOT1BTWVMpCQkrPSBzeW5v cHN5c19lZGFjLm8KIG9iai0kKENPTkZJR19FREFDX1hHRU5FKQkJKz0geGdlbmVfZWRhYy5vCitv YmotJChDT05GSUdfRURBQ19DT1JURVhfQVJNNjRfTDFfTDIpCSs9IGNvcnRleF9hcm02NF9sMV9s Mi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvY29ydGV4X2FybTY0X2wxX2wyLmMgYi9kcml2 ZXJzL2VkYWMvY29ydGV4X2FybTY0X2wxX2wyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uOWJjYzhlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZWRhYy9jb3J0ZXhf YXJtNjRfbDFfbDIuYwpAQCAtMCwwICsxLDc0MSBAQAorLyoKKyAqIENvcnRleCBBNTcgYW5kIEE1 MyBFREFDIEwxIGFuZCBMMiBjYWNoZSBlcnJvciBkZXRlY3Rpb24KKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMTgsIE5YUCBTZW1pY29uZHVjdG9yCisgKiBBdXRob3I6IFlvcmsgU3VuIDx5b3JrLnN1 bkBueHAuY29tPgorICoKKyAqIFBhcnRpYWxseSB0YWtlIGZyb20gYSBzaW1pbGFyIGRyaXZlciBi eQorICogQnJpamVzaCBTaW5naCA8YnJpamVzaGt1bWFyLnNpbmdoQGFtZC5jb20+CisgKiBDb3B5 cmlnaHQgKGMpIDIwMTUsIEFkdmFuY2VkIE1pY3JvIERldmljZXMKKyAqCisgKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMAorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2Rldmlj ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2FybS1zbWNjYy5oPgorI2luY2x1ZGUgPGFzbS9iYXJyaWVy Lmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vc21wX3BsYXQu aD4KKworI2luY2x1ZGUgImVkYWNfbW9kdWxlLmgiCisjaW5jbHVkZSAiY29ydGV4X2FybTY0X2wx X2wyLmgiCisKK3N0YXRpYyBpbnQgcG9sbF9tc2VjID0gMTAyNDsKK3N0YXRpYyBsb25nIGwxX2Nl X3N3X2luamVjdF9jb3VudCwgbDFfdWVfc3dfaW5qZWN0X2NvdW50Oworc3RhdGljIGxvbmcgbDJf Y2Vfc3dfaW5qZWN0X2NvdW50LCBsMl91ZV9zd19pbmplY3RfY291bnQ7CitzdGF0aWMgc3RydWN0 IGNwdW1hc2sgY29tcGF0X21hc2s7CitzdGF0aWMgc3RydWN0IGNwdW1hc2sgbDFfY2VfY3B1X21h c2ssIGwxX3VlX2NwdV9tYXNrOworc3RhdGljIHN0cnVjdCBjcHVtYXNrIGwyX2NlX2NwdV9tYXNr LCBsMl91ZV9jcHVfbWFzazsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBh Y3Rscl9lbik7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgbDJlY3Rscl9l bik7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodTY0LCBjcHVtZXJyKTsKK3N0YXRpYyBERUZJTkVf UEVSX0NQVSh1NjQsIGNwdWFjdGxyKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1NjQsIGwyYWN0 bHIpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHU2NCwgbDJtZXJyKTsKK3N0YXRpYyBERUZJTkVf UEVSX0NQVShjYWxsX3NpbmdsZV9kYXRhX3QsIGNzZF9jaGVjayk7CitzdGF0aWMgREVGSU5FX1NQ SU5MT0NLKGNvcnRleF9lZGFjX2xvY2spOworCitzdGF0aWMgaW5saW5lIHZvaWQgcmVhZF9jcHVh Y3Rscih2b2lkICppbmZvKQoreworCXU2NCB2YWw7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3Jf aWQoKTsKKworCWFzbSB2b2xhdGlsZSgibXJzICUwLCBTM18xX0MxNV9DMl8wIiA6ICI9ciIgKHZh bCkpOworCXBlcl9jcHUoY3B1YWN0bHIsIGNwdSkgPSB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZCB3cml0ZV9jcHVhY3RscihpbnQgKm1lbSkKK3sKKwl1NjQgdmFsOworCWludCBjcHU7CisJ dW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjb3J0ZXhfZWRhY19s b2NrLCBmbGFncyk7CisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJX19mbHVzaF9kY2Fj aGVfYXJlYShtZW0sIDgpOworCWFzbSB2b2xhdGlsZSgibXJzICUwLCBTM18xX0MxNV9DMl8wIiA6 ICI9ciIgKHZhbCkpOworCXZhbCB8PSBMMV9FUlJfSU5KX0VOOworCWFzbSB2b2xhdGlsZSgiZHNi IHN5Iik7CisJYXNtIHZvbGF0aWxlKCJtc3IgUzNfMV9DMTVfQzJfMCwgJTAiIDo6ICJyIiAodmFs KSk7CisJYXNtIHZvbGF0aWxlKCJpc2Igc3kiKTsKKwkvKiBtYWtlIGNhY2hlIGRpcnR5ICovCisJ Km1lbSA9IDB4REVBREJFRUY7CS8qIHdyaXRlIHRvIEwxIGRhdGEgY2F1c2VzIGVycm9yIHJpZ2h0 IGF3YXkgKi8KKwlfX2ZsdXNoX2RjYWNoZV9hcmVhKG1lbSwgOCk7CisJdmFsICY9IH5MMV9FUlJf SU5KX0VOOworCWFzbSB2b2xhdGlsZSgiZHNiIHN5Iik7CisJYXNtIHZvbGF0aWxlKCJtc3IgUzNf MV9DMTVfQzJfMCwgJTAiIDo6ICJyIiAodmFsKSk7CisJYXNtIHZvbGF0aWxlKCJpc2Igc3kiKTsK KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3J0ZXhfZWRhY19sb2NrLCBmbGFncyk7Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZCByZWFkX2wyYWN0bHIodm9pZCAqaW5mbykKK3sKKwl1NjQgdmFs OworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlhc20gdm9sYXRpbGUoIm1ycyAl MCwgUzNfMV9DMTVfQzBfMCIgOiAiPXIiICh2YWwpKTsKKwlwZXJfY3B1KGwyYWN0bHIsIGNwdSkg PSB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9sMmFjdGxyKGludCAqbWVtKQor eworCXU2NCB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZl KCZjb3J0ZXhfZWRhY19sb2NrLCBmbGFncyk7CisJX19mbHVzaF9kY2FjaGVfYXJlYShtZW0sIDgp OworCV9fZmx1c2hfbDFfZGNhY2hlX3dheSh2aXJ0X3RvX3BoeXMobWVtKSk7CisJYXNtIHZvbGF0 aWxlKCJtcnMgJTAsIFMzXzFfQzE1X0MwXzAiIDogIj1yIiAodmFsKSk7CisJdmFsIHw9IEwyRF9F UlJfSU5KX0VOOworCWFzbSB2b2xhdGlsZSgiZHNiIHN5Iik7CisJYXNtIHZvbGF0aWxlKCJtc3Ig UzNfMV9DMTVfQzBfMCwgJTAiIDo6ICJyIiAodmFsKSk7CisJYXNtIHZvbGF0aWxlKCJpc2Igc3ki KTsKKwkvKiBtYWtlIGNhY2hlIGRpcnR5ICovCisJKm1lbSA9IDB4REVBREJFRUY7CS8qIEVycm9y IHdpbGwgYmUgcmVwb3J0ZWQgd2hlbiBMMiBpcyBhY2Nlc3NlZC4gKi8KKwlfX2ZsdXNoX2wxX2Rj YWNoZV93YXkodmlydF90b19waHlzKG1lbSkpOworCV9fZmx1c2hfZGNhY2hlX2FyZWEobWVtLCA4 KTsKKwl2YWwgJj0gfkwyRF9FUlJfSU5KX0VOOworCWFzbSB2b2xhdGlsZSgiZHNiIHN5Iik7CisJ YXNtIHZvbGF0aWxlKCJtc3IgUzNfMV9DMTVfQzBfMCwgJTAiIDo6ICJyIiAodmFsKSk7CisJYXNt IHZvbGF0aWxlKCJpc2Igc3kiKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3J0ZXhfZWRh Y19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9sMmVjdGxyX2Vs MSh2b2lkICppbmZvKQoreworCXU2NCB2YWw7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQo KTsKKworCWFzbSB2b2xhdGlsZSgibXJzICUwLCBTM18xX0MxMV9DMF8zIiA6ICI9ciIgKHZhbCkp OworCWlmICh2YWwgJiBMMl9FUlJfSU5UKSB7CisJCXByX2RlYnVnKCJsMmVjdGxyX2VsMSBvbiBj cHUgJWQgcmVhZHMgMHglbGx4XG4iLCBjcHUsIHZhbCk7CisJCXZhbCAmPSB+TDJfRVJSX0lOVDsK KwkJYXNtIHZvbGF0aWxlKCJtc3IgUzNfMV9DMTFfQzBfMywgJTAiIDo6ICJyIiAodmFsKSk7CisJ fQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfY3B1bWVycnNyX2VsMSh1NjQgdmFsKQor eworCWFzbSB2b2xhdGlsZSgibXNyIHMzXzFfYzE1X2MyXzIsICUwIiA6OiAiciIgKHZhbCkpOwor fQorCitzdGF0aWMgdm9pZCBhNTNfYWxsb3dfbDFsMl9lcnJfaW5qKHZvaWQgKmluZm8pCit7CisJ aW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgYXJtX3NtY2NjX3JlcyByZXM7 CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCIlczogY3B1IGlzICVkXG4iLCBf X2Z1bmNfXywgY3B1KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29ydGV4X2VkYWNfbG9jaywgZmxh Z3MpOworCWFybV9zbWNjY19zbWMoU0lQX0FMTE9XX0wxTDJfRVJSXzMyLCAwLCAwLCAwLCAwLCAw LCAwLCAwLCAmcmVzKTsKKwlwZXJfY3B1KGFjdGxyX2VuLCBjcHUpID0gcmVzLmEwOworCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmNvcnRleF9lZGFjX2xvY2ssIGZsYWdzKTsKKwlwcl9kZWJ1Zygi JXM6IHJldHVybiBpcyAlbGRcbiIsIF9fZnVuY19fLCByZXMuYTApOworfQorCitzdGF0aWMgdm9p ZCBhNTNfYWxsb3dfbDFsMl9lcnJfaXJxX2Nscih2b2lkICppbmZvKQoreworCWludCBjcHUgPSBz bXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IGFybV9zbWNjY19yZXMgcmVzOworCXVuc2lnbmVk IGxvbmcgZmxhZ3M7CisKKwlwcl9kZWJ1ZygiJXM6IGNwdSBpcyAlZFxuIiwgX19mdW5jX18sIGNw dSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvcnRleF9lZGFjX2xvY2ssIGZsYWdzKTsKKwlhcm1f c21jY2Nfc21jKFNJUF9BTExPV19MMl9DTFJfMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICZyZXMp OworCXBlcl9jcHUobDJlY3Rscl9lbiwgY3B1KSA9IHJlcy5hMDsKKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZjb3J0ZXhfZWRhY19sb2NrLCBmbGFncyk7CisJcHJfZGVidWcoIiVzOiByZXR1cm4g aXMgJWxkXG4iLCBfX2Z1bmNfXywgcmVzLmEwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJl YWRfY3B1bWVycnNyX2VsMSh2b2lkICppbmZvKQoreworCXU2NCB2YWw7CisJaW50IGNwdSA9IHNt cF9wcm9jZXNzb3JfaWQoKTsKKworCWFzbSB2b2xhdGlsZSgibXJzICUwLCBzM18xX2MxNV9jMl8y IiA6ICI9ciIgKHZhbCkpOworCXBlcl9jcHUoY3B1bWVyciwgY3B1KSA9IHZhbDsKKwlpZiAodmFs ICYgfkNQVU1FUlJTUl9SQU1JRF9NQVNLKSB7CS8qIFNraXAgUkFNSUQgKi8KKwkJcHJfZGVidWco ImNwdSAlZCByZWFkcyBjcHVtZXJyc3JfZWwxIDB4JWxseFxuIiwgY3B1LCB2YWwpOworCQkvKiBj bGVhciB0aGUgcmVnaXN0ZXIgc2luY2Ugd2UgYWxyZWFkeSBzdG9yZWQgaXQgKi8KKwkJd3JpdGVf Y3B1bWVycnNyX2VsMSgwKTsKKwl9IGVsc2UgaWYgKGwxX2NlX3N3X2luamVjdF9jb3VudCA+IDAp IHsKKwkJbDFfY2Vfc3dfaW5qZWN0X2NvdW50LS07CisJCXByX2RlYnVnKCJpbmplY3QgY29ycmVj dGFibGUgZXJyb3JzIHRvIGNwdSAlZFxuIiwgY3B1KTsKKwkJcGVyX2NwdShjcHVtZXJyLCBjcHUp ID0gKDFVTCA8PCAzMSk7CS8qIHZhbGlkIGJpdCAqLworCX0gZWxzZSBpZiAobDFfdWVfc3dfaW5q ZWN0X2NvdW50ID4gMCkgeworCQlsMV91ZV9zd19pbmplY3RfY291bnQtLTsKKwkJcHJfZGVidWco ImluamVjdCBVbmNvcnJlY3RhYmxlIGVycm9ycyB0byBjcHUgJWRcbiIsIGNwdSk7CisJCXBlcl9j cHUoY3B1bWVyciwgY3B1KSA9ICgxVUwgPDwgNjMpIHwgKDFVTCA8PCAzMSk7CisJfQorfQorCitz dGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfbDJtZXJyc3JfZWwxKHU2NCB2YWwpCit7CisJYXNtIHZv bGF0aWxlKCJtc3IgczNfMV9jMTVfYzJfMywgJTAiIDo6ICJyIiAodmFsKSk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCByZWFkX2wybWVycnNyX2VsMSh2b2lkICppbmZvKQoreworCXU2NCB2YWw7 CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWFzbSB2b2xhdGlsZSgibXJzICUw LCBzM18xX2MxNV9jMl8zIiA6ICI9ciIgKHZhbCkpOworCXBlcl9jcHUobDJtZXJyLCBjcHUpID0g dmFsOworCWlmICh2YWwgJiB+TDJNRVJSU1JfUkFNSURfTUFTSykgewkvKiBTa2lwIFJBTUlEICov CisJCXByX2RlYnVnKCJjcHUgJWQgcmVhZHMgbDJtZXJyc3JfZWwxIDB4JWxseFxuIiwgY3B1LCB2 YWwpOworCQkvKiBjbGVhciB0aGUgcmVnaXN0ZXIgc2luY2Ugd2UgYWxyZWFkeSBzdG9yZWQgaXQg Ki8KKwkJd3JpdGVfbDJtZXJyc3JfZWwxKDApOworCX0gZWxzZSBpZiAobDJfY2Vfc3dfaW5qZWN0 X2NvdW50ID4gMCkgeworCQlsMl9jZV9zd19pbmplY3RfY291bnQtLTsKKwkJcHJfZGVidWcoImlu amVjdCBjb3JyZWN0YWJsZSBlcnJvcnMgdG8gTDIgb24gY3B1ICVkXG4iLCBjcHUpOworCQlwZXJf Y3B1KGwybWVyciwgY3B1KSA9ICgxVUwgPDwgMzEpOwkvKiB2YWxpZCBiaXQgKi8KKwl9IGVsc2Ug aWYgKGwyX3VlX3N3X2luamVjdF9jb3VudCA+IDApIHsKKwkJbDJfdWVfc3dfaW5qZWN0X2NvdW50 LS07CisJCXByX2RlYnVnKCJpbmplY3QgVW5jb3JyZWN0YWJsZSBlcnJvcnMgdG8gTDIgb24gY3B1 ICVkXG4iLCBjcHUpOworCQlwZXJfY3B1KGwybWVyciwgY3B1KSA9ICgxVUwgPDwgNjMpIHwgKDFV TCA8PCAzMSk7CisJfQorfQorc3RhdGljIHZvaWQgcmVhZF9lcnJvcnModm9pZCAqaW5mbykKK3sK KwlyZWFkX2NwdW1lcnJzcl9lbDEoaW5mbyk7CisJcmVhZF9sMm1lcnJzcl9lbDEoaW5mbyk7CisJ d3JpdGVfbDJlY3Rscl9lbDEoaW5mbyk7Cit9CisKKworLyogUmV0dXJucyAwIGZvciBubyBlcnJv cgorICoJICAtMSBmb3IgdW5jb3JyZWN0YWJsZSBlcnJvcihzKQorICoJICAgMSBmb3IgY29ycmVj dGFibGUgZXJyb3IocykKKyAqLworc3RhdGljIGludCBwYXJzZV9jcHVtZXJyc3IodW5zaWduZWQg aW50IGNwdSkKK3sKKwl1NjQgdmFsID0gcGVyX2NwdShjcHVtZXJyLCBjcHUpOworCisJLyogY2hl Y2sgaWYgd2UgaGF2ZSB2YWxpZCBlcnJvciBiZWZvcmUgY29udGludWluZyAqLworCWlmICghQ1BV TUVSUlNSX0VMMV9WQUxJRCh2YWwpKQorCQlyZXR1cm4gMDsKKworCWNvcnRleF9wcmludGsoS0VS Tl9JTkZPLCAiQ1BVICVkICIsIGNwdSk7CisKKwlzd2l0Y2ggKENQVU1FUlJTUl9FTDFfUkFNSUQo dmFsKSkgeworCWNhc2UgTDFfSV9UQUdfUkFNOgorCQlwcl9jb250KCJMMS1JIFRhZyBSQU0iKTsK KwkJYnJlYWs7CisJY2FzZSBMMV9JX0RBVEFfUkFNOgorCQlwcl9jb250KCJMMS1JIERhdGEgUkFN Iik7CisJCWJyZWFrOworCWNhc2UgTDFfRF9UQUdfUkFNOgorCQlwcl9jb250KCJMMS1EIFRhZyBS QU0iKTsKKwkJYnJlYWs7CisJY2FzZSBMMV9EX0RBVEFfUkFNOgorCQlwcl9jb250KCJMMS1EIERh dGEgUkFNIik7CisJCWJyZWFrOworCWNhc2UgTDFfRF9ESVJUWV9SQU06CisJCXByX2NvbnQoIkwx IERpcnR5IFJBTSIpOworCQlicmVhazsKKwljYXNlIFRMQl9SQU06CisJCXByX2NvbnQoIlRMQiBS QU0iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfY29udCgidW5rbm93biIpOworCQlicmVh azsKKwl9CisJcHJfY29udCgiIGVycm9yKHMpIGRldGVjdGVkXG4iKTsKKworCWlmIChDUFVNRVJS U1JfRUwxX0ZBVEFMKHZhbCkpIHsKKwkJY29ydGV4X3ByaW50ayhLRVJOX0lORk8sCisJCQkgICAg ICAiQ1BVICVkIEwxIGZhdGFsIGVycm9yKHMpIGRldGVjdGVkICgweCVsbHgpXG4iLAorCQkJICAg ICAgY3B1LCB2YWwpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRp YyBpbnQgcGFyc2VfbDJtZXJyc3IodW5zaWduZWQgaW50IGNwdSkKK3sKKwl1NjQgdmFsID0gcGVy X2NwdShsMm1lcnIsIGNwdSk7CisKKwkvKiBjaGVjayBpZiB3ZSBoYXZlIHZhbGlkIGVycm9yIGJl Zm9yZSBjb250aW51aW5nICovCisJaWYgKCFMMk1FUlJTUl9FTDFfVkFMSUQodmFsKSkKKwkJcmV0 dXJuIDA7CisKKwljb3J0ZXhfcHJpbnRrKEtFUk5fSU5GTywgIkNQVSAlZCBMMiAlcyBlcnJvcihz KSBkZXRlY3RlZCAoMHglbGx4KVxuIiwKKwkJICAgICAgY3B1LCBMMk1FUlJTUl9FTDFfRkFUQUwo dmFsKSA/ICJmYXRhbCIgOiAiIiwgdmFsKTsKKworCXJldHVybiBMMk1FUlJTUl9FTDFfRkFUQUwo dmFsKSA/IC0xIDogMTsKK30KKworI2RlZmluZSBNRVNTQUdFX1NJWkUgNDAKK3N0YXRpYyB2b2lk IGNvcnRleF9hcm02NF9lZGFjX2NoZWNrKHN0cnVjdCBlZGFjX2RldmljZV9jdGxfaW5mbyAqZWRh Y19jdGwpCit7CisJaW50IGNwdTsKKwljaGFyIG1zZ1tNRVNTQUdFX1NJWkVdOworCWNhbGxfc2lu Z2xlX2RhdGFfdCAqY3NkOworCisJZ2V0X29ubGluZV9jcHVzKCk7CisJZm9yX2VhY2hfY3B1X2Fu ZChjcHUsIGNwdV9vbmxpbmVfbWFzaywgJmNvbXBhdF9tYXNrKSB7CisJCWNzZCA9ICZwZXJfY3B1 KGNzZF9jaGVjaywgY3B1KTsKKwkJY3NkLT5mdW5jID0gcmVhZF9lcnJvcnM7CisJCWNzZC0+aW5m byA9IE5VTEw7CisJCWNzZC0+ZmxhZ3MgPSAwOworCQkvKiBSZWFkIENQVSBMMSBlcnJvciAqLwor CQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfYXN5bmMoY3B1LCBjc2QpOworCQkvKiBXYWl0IHVu dGlsIGZsYWdzIGNsZWFyZWQgKi8KKwkJc21wX2NvbmRfbG9hZF9hY3F1aXJlKCZjc2QtPmZsYWdz LCAhVkFMKTsKKwl9CisJcHV0X29ubGluZV9jcHVzKCk7CisKKwljcHVtYXNrX2NsZWFyKCZsMV9j ZV9jcHVfbWFzayk7CisJY3B1bWFza19jbGVhcigmbDFfdWVfY3B1X21hc2spOworCWNwdW1hc2tf Y2xlYXIoJmwyX2NlX2NwdV9tYXNrKTsKKwljcHVtYXNrX2NsZWFyKCZsMl91ZV9jcHVfbWFzayk7 CisJZm9yX2VhY2hfY3B1X2FuZChjcHUsIGNwdV9vbmxpbmVfbWFzaywgJmNvbXBhdF9tYXNrKSB7 CisJCXN3aXRjaCAocGFyc2VfY3B1bWVycnNyKGNwdSkpIHsKKwkJCWNhc2UgLTE6CisJCQkJLyog ZmF0YWwgZXJyb3IgKi8KKwkJCQljcHVtYXNrX3NldF9jcHUoY3B1LCAmbDFfdWVfY3B1X21hc2sp OworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCS8qIGNvcnJlY3RhYmxlIGVycm9yKHMpICov CisJCQkJY3B1bWFza19zZXRfY3B1KGNwdSwgJmwxX2NlX2NwdV9tYXNrKTsKKwkJCQlicmVhazsK KwkJCWNhc2UgMDoKKwkJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJCWRlZmF1bHQ6CisJCQkJYnJl YWs7CisJCX0KKwkJc3dpdGNoIChwYXJzZV9sMm1lcnJzcihjcHUpKSB7CisJCQljYXNlIC0xOgor CQkJCS8qIGZhdGFsIGVycm9yICovCisJCQkJY3B1bWFza19zZXRfY3B1KGNwdSwgJmwyX3VlX2Nw dV9tYXNrKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQkvKiBjb3JyZWN0YWJsZSBlcnJv cihzKSAqLworCQkJCWNwdW1hc2tfc2V0X2NwdShjcHUsICZsMl9jZV9jcHVfbWFzayk7CisJCQkJ YnJlYWs7CisJCQljYXNlIDA6CisJCQkJLyogZmFsbCB0aHJvdWdoICovCisJCQlkZWZhdWx0Ogor CQkJCWJyZWFrOworCQl9CisJfQorCisJZm9yX2VhY2hfY3B1KGNwdSwgJmwxX3VlX2NwdV9tYXNr KSB7CisJCXNucHJpbnRmKG1zZywgTUVTU0FHRV9TSVpFLCAiRmF0YWwgZXJyb3Iocykgb24gQ1BV ICVkXG4iLCBjcHUpOworCQllZGFjX2RldmljZV9oYW5kbGVfdWUoZWRhY19jdGwsIDAsIDAsIG1z Zyk7CisJfQorCisJZm9yX2VhY2hfY3B1KGNwdSwgJmwxX2NlX2NwdV9tYXNrKSB7CisJCXNucHJp bnRmKG1zZywgTUVTU0FHRV9TSVpFLCAiQ29ycmVjdGFibGUgZXJyb3Iocykgb24gQ1BVICVkXG4i LCBjcHUpOworCQllZGFjX2RldmljZV9oYW5kbGVfY2UoZWRhY19jdGwsIDAsIDAsIG1zZyk7CisJ fQorCisJZm9yX2VhY2hfY3B1KGNwdSwgJmwyX3VlX2NwdV9tYXNrKSB7CisJCXNucHJpbnRmKG1z ZywgTUVTU0FHRV9TSVpFLCAiRmF0YWwgZXJyb3Iocykgb24gQ1BVICVkXG4iLCBjcHUpOworCQll ZGFjX2RldmljZV9oYW5kbGVfdWUoZWRhY19jdGwsIDAsIDEsIG1zZyk7CisJfQorCisJZm9yX2Vh Y2hfY3B1KGNwdSwgJmwyX2NlX2NwdV9tYXNrKSB7CisJCXNucHJpbnRmKG1zZywgTUVTU0FHRV9T SVpFLCAiQ29ycmVjdGFibGUgZXJyb3Iocykgb24gQ1BVICVkXG4iLCBjcHUpOworCQllZGFjX2Rl dmljZV9oYW5kbGVfY2UoZWRhY19jdGwsIDAsIDEsIG1zZyk7CisJfQorCisJaWYgKCFjcHVtYXNr X2VtcHR5KCZsMV9jZV9jcHVfbWFzaykgfHwKKwkgICAgIWNwdW1hc2tfZW1wdHkoJmwyX2NlX2Nw dV9tYXNrKSB8fAorCSAgICAhY3B1bWFza19lbXB0eSgmbDFfdWVfY3B1X21hc2spIHx8CisJICAg ICFjcHVtYXNrX2VtcHR5KCZsMl91ZV9jcHVfbWFzaykpIHsKKwkJaWYgKHBvbGxfbXNlYyA+IE1J Tl9QT0xMX01TRUMpIHsKKwkJCXBvbGxfbXNlYyA+Pj0gMTsKKwkJCWVkYWNfZGV2aWNlX3Jlc2V0 X2RlbGF5X3BlcmlvZChlZGFjX2N0bCwgcG9sbF9tc2VjKTsKKwkJfSBlbHNlIHsKKwkJCWNvcnRl eF9wcmludGsoS0VSTl9DUklULAorCQkJCSAgICAgICJFeGNlc3NpdmUgY29ycmVjdGFibGUgZXJy b3JzXG4iKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChwb2xsX21zZWMgPCBNQVhfUE9MTF9NU0VD KSB7CisJCQlwb2xsX21zZWMgPDw9IDE7CisJCQllZGFjX2RldmljZV9yZXNldF9kZWxheV9wZXJp b2QoZWRhY19jdGwsIHBvbGxfbXNlYyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IGwx X2NlX3N3X2luamVjdF9zaG93KHN0cnVjdCBlZGFjX2RldmljZV9jdGxfaW5mbyAqZWRhY19jdGws CisJCQkJIGNoYXIgKmRhdGEpCit7CisJcmV0dXJuIHNwcmludGYoZGF0YSwgIiVsZFx0IE51bWJl ciBvZiBlcnJvcnMgdG8gYmUgaW5qZWN0ZWRcbiIsIGwxX2NlX3N3X2luamVjdF9jb3VudCk7Cit9 CisKK3N0YXRpYyBzc2l6ZV90IGwxX2NlX3N3X2luamVjdF9zdG9yZShzdHJ1Y3QgZWRhY19kZXZp Y2VfY3RsX2luZm8gKmVkYWNfY3RsLAorCQkJCSAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGNv dW50KQoreworCWwxX2NlX3N3X2luamVjdF9jb3VudCA9IHNpbXBsZV9zdHJ0b2woZGF0YSwgTlVM TCwgMCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGwxX3VlX3N3X2lu amVjdF9zaG93KHN0cnVjdCBlZGFjX2RldmljZV9jdGxfaW5mbyAqZWRhY19jdGwsCisJCQkJIGNo YXIgKmRhdGEpCit7CisJcmV0dXJuIHNwcmludGYoZGF0YSwgIiVsZFx0IE51bWJlciBvZiBlcnJv cnMgdG8gYmUgaW5qZWN0ZWRcbiIsIGwxX3VlX3N3X2luamVjdF9jb3VudCk7Cit9CisKK3N0YXRp YyBzc2l6ZV90IGwxX3VlX3N3X2luamVjdF9zdG9yZShzdHJ1Y3QgZWRhY19kZXZpY2VfY3RsX2lu Zm8gKmVkYWNfY3RsLAorCQkJCSAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGNvdW50KQorewor CWwxX3VlX3N3X2luamVjdF9jb3VudCA9IHNpbXBsZV9zdHJ0b2woZGF0YSwgTlVMTCwgMCk7CisK KwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGwyX2NlX3N3X2luamVjdF9zaG93 KHN0cnVjdCBlZGFjX2RldmljZV9jdGxfaW5mbyAqZWRhY19jdGwsCisJCQkJIGNoYXIgKmRhdGEp Cit7CisJcmV0dXJuIHNwcmludGYoZGF0YSwgIiVsZFx0IE51bWJlciBvZiBlcnJvcnMgdG8gYmUg aW5qZWN0ZWRcbiIsIGwyX2NlX3N3X2luamVjdF9jb3VudCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90 IGwyX2NlX3N3X2luamVjdF9zdG9yZShzdHJ1Y3QgZWRhY19kZXZpY2VfY3RsX2luZm8gKmVkYWNf Y3RsLAorCQkJCSAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGNvdW50KQoreworCWwyX2NlX3N3 X2luamVjdF9jb3VudCA9IHNpbXBsZV9zdHJ0b2woZGF0YSwgTlVMTCwgMCk7CisKKwlyZXR1cm4g Y291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGwyX3VlX3N3X2luamVjdF9zaG93KHN0cnVjdCBl ZGFjX2RldmljZV9jdGxfaW5mbyAqZWRhY19jdGwsCisJCQkJIGNoYXIgKmRhdGEpCit7CisJcmV0 dXJuIHNwcmludGYoZGF0YSwgIiVsZFx0IE51bWJlciBvZiBlcnJvcnMgdG8gYmUgaW5qZWN0ZWRc biIsIGwyX3VlX3N3X2luamVjdF9jb3VudCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGwyX3VlX3N3 X2luamVjdF9zdG9yZShzdHJ1Y3QgZWRhY19kZXZpY2VfY3RsX2luZm8gKmVkYWNfY3RsLAorCQkJ CSAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGNvdW50KQoreworCWwyX3VlX3N3X2luamVjdF9j b3VudCA9IHNpbXBsZV9zdHJ0b2woZGF0YSwgTlVMTCwgMCk7CisKKwlyZXR1cm4gY291bnQ7Cit9 CisKK3N0YXRpYyBzc2l6ZV90IGwxX3VlX2h3X2luamVjdF9zaG93KHN0cnVjdCBlZGFjX2Rldmlj ZV9jdGxfaW5mbyAqZWRhY19jdGwsCisJCQkJIGNoYXIgKmRhdGEpCit7CisJdTY0IHZhbDsKKwlp bnQgY3B1OworCWludCBsZW4gPSAwOworCXNpemVfdCBzaXplID0gUEFHRV9TSVpFOworCisJZ2V0 X29ubGluZV9jcHVzKCk7CisJZm9yX2VhY2hfY3B1X2FuZChjcHUsIGNwdV9vbmxpbmVfbWFzaywg JmNvbXBhdF9tYXNrKSB7CisJCS8qIFJlYWQgQ1BVIGFjdGxyICovCisJCXNtcF9jYWxsX2Z1bmN0 aW9uX3NpbmdsZShjcHUsIHJlYWRfY3B1YWN0bHIsIE5VTEwsIDEpOworCX0KKwlwdXRfb25saW5l X2NwdXMoKTsKKwlmb3JfZWFjaF9jcHVfYW5kKGNwdSwgY3B1X29ubGluZV9tYXNrLCAmY29tcGF0 X21hc2spIHsKKwkJdmFsID0gcGVyX2NwdShjcHVhY3RsciwgY3B1KTsKKwkJbGVuICs9IHNjbnBy aW50ZihkYXRhICsgbGVuLCBzaXplLAorCQkJCSAiJWRcdCAlcyBDUFUgJWQgKENQVUFDVExSX0VM MSA9IDB4JWxseClcbiIsCisJCQkJIHZhbCAmIEwxX0VSUl9JTkpfRU4gPyAxIDogMCwKKwkJCQkg dmFsICYgTDFfRVJSX0lOSl9FTiA/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIsCisJCQkJIGNwdSwg dmFsKTsKKwkJc2l6ZSAtPSBsZW47CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworLyogV2UgZG9u J3QgY2FyZSB3aGljaCBDUFUgd2UgaW5qZWN0IGVycm9yIHRvLiBObyBuZWVkIHRvIGluamVjdCB0 byBldmVyeSBDUFUgKi8KK3N0YXRpYyBzc2l6ZV90IGwxX3VlX2h3X2luamVjdF9zdG9yZShzdHJ1 Y3QgZWRhY19kZXZpY2VfY3RsX2luZm8gKmVkYWNfY3RsLAorCQkJCSAgY29uc3QgY2hhciAqZGF0 YSwgc2l6ZV90IGNvdW50KQoreworCWludCByZXQ7CisJbG9uZyBlbjsKKwlzdHJ1Y3QgY29ydGV4 X3BkYXRhICpwZGF0YSA9IGVkYWNfY3RsLT5wdnRfaW5mbzsKKworCXJldCA9IGtzdHJ0b2woZGF0 YSwgMCwgJmVuKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGVuKQorCQl3cml0 ZV9jcHVhY3RscihwZGF0YS0+bWVtKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNz aXplX3QgbDJfdWVfaHdfaW5qZWN0X3Nob3coc3RydWN0IGVkYWNfZGV2aWNlX2N0bF9pbmZvICpl ZGFjX2N0bCwKKwkJCQkgY2hhciAqZGF0YSkKK3sKKwl1NjQgdmFsOworCWludCBjcHU7CisJaW50 IGxlbiA9IDA7CisJc2l6ZV90IHNpemUgPSBQQUdFX1NJWkU7CisKKwlnZXRfb25saW5lX2NwdXMo KTsKKwlmb3JfZWFjaF9jcHVfYW5kKGNwdSwgY3B1X29ubGluZV9tYXNrLCAmY29tcGF0X21hc2sp IHsKKwkJLyogUmVhZCBMMiBhY3RsciAqLworCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1 LCByZWFkX2wyYWN0bHIsIE5VTEwsIDEpOworCX0KKwlwdXRfb25saW5lX2NwdXMoKTsKKwlmb3Jf ZWFjaF9jcHVfYW5kKGNwdSwgY3B1X29ubGluZV9tYXNrLCAmY29tcGF0X21hc2spIHsKKwkJdmFs ID0gcGVyX2NwdShsMmFjdGxyLCBjcHUpOworCQlsZW4gKz0gc2NucHJpbnRmKGRhdGEgKyBsZW4s IHNpemUsCisJCQkJICIlZFx0ICVzIENQVSAlZCAoTDJBQ1RMUl9FTDEgPSAweCVsbHgpXG4iLAor CQkJCSB2YWwgJiBMMV9FUlJfSU5KX0VOID8gMSA6IDAsCisJCQkJIHZhbCAmIEwxX0VSUl9JTkpf RU4gPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiLAorCQkJCSBjcHUsIHZhbCk7CisJCXNpemUgLT0g bGVuOworCX0KKworCXJldHVybiBsZW47Cit9CisKKy8qIFdlIGRvbid0IGNhcmUgd2hpY2ggQ1BV IHdlIGluamVjdCBlcnJvciB0by4gTm8gbmVlZCB0byBpbmplY3QgdG8gZXZlcnkgQ1BVICovCitz dGF0aWMgc3NpemVfdCBsMl91ZV9od19pbmplY3Rfc3RvcmUoc3RydWN0IGVkYWNfZGV2aWNlX2N0 bF9pbmZvICplZGFjX2N0bCwKKwkJCQkgIGNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBjb3VudCkK K3sKKwlpbnQgcmV0OworCWxvbmcgZW47CisJc3RydWN0IGNvcnRleF9wZGF0YSAqcGRhdGEgPSBl ZGFjX2N0bC0+cHZ0X2luZm87CisKKwlyZXQgPSBrc3RydG9sKGRhdGEsIDAsICZlbik7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChlbikKKwkJd3JpdGVfbDJhY3RscihwZGF0YS0+ bWVtKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBlZGFjX2Rldl9zeXNm c19hdHRyaWJ1dGUgZGV2aWNlX3N5c2ZzX2F0dHJbXSA9IHsKKwl7CisJCS5hdHRyID0geworCQkJ Lm5hbWUgPSAibDFfY2Vfc3dfaW5qZWN0IiwKKwkJCS5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1Is CisJCX0sCisJCS5zaG93ID0gbDFfY2Vfc3dfaW5qZWN0X3Nob3csCisJCS5zdG9yZSA9IGwxX2Nl X3N3X2luamVjdF9zdG9yZSwKKwl9LAorCXsKKwkJLmF0dHIgPSB7CisJCQkubmFtZSA9ICJsMV91 ZV9zd19pbmplY3QiLAorCQkJLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiwKKwkJfSwKKwkJLnNo b3cgPSBsMV91ZV9zd19pbmplY3Rfc2hvdywKKwkJLnN0b3JlID0gbDFfdWVfc3dfaW5qZWN0X3N0 b3JlLAorCX0sCisJeworCQkuYXR0ciA9IHsKKwkJCS5uYW1lID0gImwyX2NlX3N3X2luamVjdCIs CisJCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAorCQl9LAorCQkuc2hvdyA9IGwyX2NlX3N3 X2luamVjdF9zaG93LAorCQkuc3RvcmUgPSBsMl9jZV9zd19pbmplY3Rfc3RvcmUsCisJfSwKKwl7 CisJCS5hdHRyID0geworCQkJLm5hbWUgPSAibDJfdWVfc3dfaW5qZWN0IiwKKwkJCS5tb2RlID0g U19JUlVHTyB8IFNfSVdVU1IsCisJCX0sCisJCS5zaG93ID0gbDJfdWVfc3dfaW5qZWN0X3Nob3cs CisJCS5zdG9yZSA9IGwyX3VlX3N3X2luamVjdF9zdG9yZSwKKwl9LAorCXsKKwkJLmF0dHIgPSB7 CisJCQkubmFtZSA9ICJsMV91ZV9od19pbmplY3QiLAorCQkJLm1vZGUgPSBTX0lSVUdPIHwgU19J V1VTUiwKKwkJfSwKKwkJLnNob3cgPSBsMV91ZV9od19pbmplY3Rfc2hvdywKKwkJLnN0b3JlID0g bDFfdWVfaHdfaW5qZWN0X3N0b3JlLAorCX0sCisJeworCQkuYXR0ciA9IHsKKwkJCS5uYW1lID0g ImwyX3VlX2h3X2luamVjdCIsCisJCQkubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAorCQl9LAor CQkuc2hvdyA9IGwyX3VlX2h3X2luamVjdF9zaG93LAorCQkuc3RvcmUgPSBsMl91ZV9od19pbmpl Y3Rfc3RvcmUsCisJfSwKKwl7fSwKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBjb3J0ZXhfZWRh Y19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBlZGFjX2RldmljZV9jdGxf aW5mbyAqZWRhY19jdGwgPSBkZXZfaWQ7CisKKwlwcl9kZWJ1ZygiR290IElSUVxuIik7CisJY29y dGV4X2FybTY0X2VkYWNfY2hlY2soZWRhY19jdGwpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOwor fQorCitzdGF0aWMgaW50IGNvcnRleF9hcm02NF9lZGFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCit7CisJaW50IGksIHJjLCBjcHUsIG51bV9hdHRyOworCXN0cnVjdCBlZGFj X2RldmljZV9jdGxfaW5mbyAqZWRhY19jdGw7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYt PmRldjsKKwlzdHJ1Y3QgY29ydGV4X3BkYXRhICpwZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUg Km5wLCAqZG4gPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3Qgb2ZfcGhhbmRsZV9pdGVyYXRv ciBpdDsKKwlzdHJ1Y3QgZWRhY19kZXZfc3lzZnNfYXR0cmlidXRlICphdHRyOworCWNvbnN0IF9f YmUzMiAqY2VsbDsKKwl1NjQgbXBpZHI7CisKKwljcHVtYXNrX2NsZWFyKCZjb21wYXRfbWFzayk7 CisJb2ZfZm9yX2VhY2hfcGhhbmRsZSgmaXQsIHJjLCBkbiwgImNwdXMiLCBOVUxMLCAwKSB7CisJ CW5wID0gaXQubm9kZTsKKwkJY2VsbCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwp OworCQlpZiAoIWNlbGwpIHsKKwkJCXByX2VycigiJXBPRjogbWlzc2luZyByZWcgcHJvcGVydHlc biIsIG5wKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCW1waWRyID0gb2ZfcmVhZF9udW1iZXIoY2Vs bCwgb2Zfbl9hZGRyX2NlbGxzKG5wKSk7CisJCWNwdSA9IGdldF9sb2dpY2FsX2luZGV4KG1waWRy KTsKKwkJaWYgKGNwdSA8IDApIHsKKwkJCXByX2VycigiQmFkIENQVSBudW1iZXIgZm9yIG1waWRy IDB4JWxseCIsIG1waWRyKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNwdW1hc2tfc2V0X2NwdShj cHUsICZjb21wYXRfbWFzayk7CisJfQorCisJcHJfZGVidWcoImNvbXBhdF9tYXNrIGlzICUqcGJs XG4iLCBjcHVtYXNrX3ByX2FyZ3MoJmNvbXBhdF9tYXNrKSk7CisKKwlpZiAob2ZfZGV2aWNlX2lz X2NvbXBhdGlibGUoZG4sICJhcm0sY29ydGV4LWE1My1lZGFjIikpIHsKKwkJbnVtX2F0dHIgPSBB UlJBWV9TSVpFKGRldmljZV9zeXNmc19hdHRyKTsKKwkJZ2V0X29ubGluZV9jcHVzKCk7CisJCWZv cl9lYWNoX2NwdV9hbmQoY3B1LCBjcHVfb25saW5lX21hc2ssICZjb21wYXRfbWFzaykgeworCQkJ c21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgYTUzX2FsbG93X2wxbDJfZXJyX2luaiwgTlVM TCwgMSk7CisJCQlpZiAocGVyX2NwdShhY3Rscl9lbiwgY3B1KSkgeworCQkJCXByX2VycigiRmFp bGVkIHRvIGVuYWJsZSBoYXJkd2FyZSBlcnJvciBpbmplY3Rpb24gKCVsZClcbiIsCisJCQkJICAg ICAgIHBlcl9jcHUoYWN0bHJfZW4sIGNwdSkpOworCQkJCW51bV9hdHRyIC09IDI7CisJCQkJYnJl YWs7CisJCQl9CisJCX0KKwkJcHV0X29ubGluZV9jcHVzKCk7CisJfSBlbHNlIHsKKwkJbnVtX2F0 dHIgPSBBUlJBWV9TSVpFKGRldmljZV9zeXNmc19hdHRyKSAtIDI7CisJfQorCisJLyogUE9MTCBt b2RlIGlzIHVzZWQgdG8gZGV0ZWN0IGNvcnJlY3RhYmxlIGVycm9ycyAqLworCWVkYWNfb3Bfc3Rh dGUgPSBFREFDX09QU1RBVEVfUE9MTDsKKworCWVkYWNfY3RsID0gZWRhY19kZXZpY2VfYWxsb2Nf Y3RsX2luZm8oc2l6ZW9mKCpwZGF0YSksICJjcHVfY2FjaGUiLAorCQkJCQkgICAgICAxLCAiTCIs IDIsIDEsIE5VTEwsIDAsCisJCQkJCSAgICAgIGVkYWNfZGV2aWNlX2FsbG9jX2luZGV4KCkpOwor CWlmIChJU19FUlIoZWRhY19jdGwpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBkYXRhID0gZWRh Y19jdGwtPnB2dF9pbmZvOworCWF0dHIgPSBkZXZtX2t6YWxsb2MoZGV2LAorCQkJICAgIHNpemVv ZihzdHJ1Y3QgZWRhY19kZXZfc3lzZnNfYXR0cmlidXRlKSAqIG51bV9hdHRyLAorCQkJICAgIEdG UF9LRVJORUwpOworCWlmICghYXR0cikgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2Rl djsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2F0dHIgLSAxOyBpKyspIHsKKwkJYXR0cltp XS5hdHRyLm5hbWUgPSBkZXZpY2Vfc3lzZnNfYXR0cltpXS5hdHRyLm5hbWU7CisJCWF0dHJbaV0u YXR0ci5tb2RlID0gZGV2aWNlX3N5c2ZzX2F0dHJbaV0uYXR0ci5tb2RlOworCQlhdHRyW2ldLnNo b3cgPSBkZXZpY2Vfc3lzZnNfYXR0cltpXS5zaG93OworCQlhdHRyW2ldLnN0b3JlID0gZGV2aWNl X3N5c2ZzX2F0dHJbaV0uc3RvcmU7CisJfQorCWVkYWNfY3RsLT5zeXNmc19hdHRyaWJ1dGVzID0g YXR0cjsKKworCXJjID0gb2ZfY291bnRfcGhhbmRsZV93aXRoX2FyZ3MoZG4sICJjcHVzIiwgTlVM TCk7CisJaWYgKHJjIDw9IDApIHsKKwkJcHJfZXJyKCJJbnZhbGlkIG51bWJlciBvZiBwaGFuZGxl cyBpbiAnY3B1cydcbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2RldjsKKwl9CisJ cGRhdGEtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJcHJfZGVidWcoImlycSBp cyAlZFxuIiwgcGRhdGEtPmlycSk7CisKKwllZGFjX2N0bC0+cG9sbF9tc2VjID0gcG9sbF9tc2Vj OworCWVkYWNfY3RsLT5lZGFjX2NoZWNrID0gY29ydGV4X2FybTY0X2VkYWNfY2hlY2s7CisJZWRh Y19jdGwtPmRldiA9IGRldjsKKwllZGFjX2N0bC0+bW9kX25hbWUgPSBkZXZfbmFtZShkZXYpOwor CWVkYWNfY3RsLT5kZXZfbmFtZSA9IGRldl9uYW1lKGRldik7CisJZWRhY19jdGwtPmN0bF9uYW1l ID0gRURBQ19NT0RfU1RSOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGVkYWNfY3RsKTsKKworCXJj ID0gZWRhY19kZXZpY2VfYWRkX2RldmljZShlZGFjX2N0bCk7CisJaWYgKHJjKQorCQlnb3RvIG91 dF9kZXY7CisKKwlwZGF0YS0+bWVtID0gZGV2bV9remFsbG9jKGRldiwgUEFHRV9TSVpFLCBHRlBf S0VSTkVMKTsKKwlpZiAoIXBkYXRhLT5tZW0pCisJCWdvdG8gb3V0X21lbTsKKworCWlmIChwZGF0 YS0+aXJxKSB7CisJCWdldF9vbmxpbmVfY3B1cygpOworCQlmb3JfZWFjaF9jcHVfYW5kKGNwdSwg Y3B1X29ubGluZV9tYXNrLCAmY29tcGF0X21hc2spIHsKKwkJCXNtcF9jYWxsX2Z1bmN0aW9uX3Np bmdsZShjcHUsCisJCQkJCQkgYTUzX2FsbG93X2wxbDJfZXJyX2lycV9jbHIsCisJCQkJCQkgTlVM TCwKKwkJCQkJCSAxKTsKKwkJCWlmIChwZXJfY3B1KGwyZWN0bHJfZW4sIGNwdSkpIHsKKwkJCQlw cl9lcnIoIkZhaWxlZCB0byBlbmFibGUgaW50ZXJydXB0IGNsZWFyaW5nICglbGQpXG4iLAorCQkJ CSAgICAgICBwZXJfY3B1KGwyZWN0bHJfZW4sIGNwdSkpOworCQkJCXJjID0gLUVBQ0NFUzsKKwkJ CQlicmVhazsKKwkJCX0KKwkJfQorCQlwdXRfb25saW5lX2NwdXMoKTsKKworCQlpZiAoIXJjKSB7 CisJCQlyYyA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBwZGF0YS0+aXJxLCBjb3J0ZXhfZWRhY19p c3IsCisJCQkJICAgICAgMCwgImNvcnRleF9lZGFjIGVycm9yIiwgZWRhY19jdGwpOworCQkJaWYg KHJjIDwgMCkgeworCQkJCXByX2VycigiJXM6IFVuYWJsZSB0byByZXF1ZXN0IGlycSAlZCBmb3Ig Y29ydGV4IGVkYWMgZXJyb3JcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCBwZGF0YS0+aXJxKTsK KwkJCQlnb3RvIG91dF9pcnE7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X21l bToKK291dF9pcnE6CisJZWRhY19kZXZpY2VfZGVsX2RldmljZShlZGFjX2N0bC0+ZGV2KTsKKwor b3V0X2RldjoKKwllZGFjX2RldmljZV9mcmVlX2N0bF9pbmZvKGVkYWNfY3RsKTsKKworCXJldHVy biByYzsKK30KKworc3RhdGljIGludCBjb3J0ZXhfYXJtNjRfZWRhY19yZW1vdmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZWRhY19kZXZpY2VfY3RsX2luZm8gKmVk YWNfY3RsID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCisJZWRhY19kZXZpY2VfZGVs X2RldmljZShlZGFjX2N0bC0+ZGV2KTsKKwllZGFjX2RldmljZV9mcmVlX2N0bF9pbmZvKGVkYWNf Y3RsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBjb3J0ZXhfYXJtNjRfZWRhY19vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYXJt LGNvcnRleC1hNTctZWRhYyIgfSwKKwl7IC5jb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzLWVk YWMiIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBjb3J0ZXhfYXJtNjRfZWRh Y19vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNvcnRleF9hcm02 NF9lZGFjX2RyaXZlciA9IHsKKwkucHJvYmUgPSBjb3J0ZXhfYXJtNjRfZWRhY19wcm9iZSwKKwku cmVtb3ZlID0gY29ydGV4X2FybTY0X2VkYWNfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1l ID0gRURBQ19NT0RfU1RSLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBjb3J0ZXhfYXJtNjRfZWRhY19v Zl9tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoY29ydGV4X2FybTY0X2Vk YWNfZHJpdmVyKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiWW9y ayBTdW4gPHlvcmsuc3VuQG54cC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvcnRleCBB NTcgYW5kIEE1MyBMMSBhbmQgTDIgY2FjaGUgRURBQyBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZWRhYy9jb3J0ZXhfYXJtNjRfbDFfbDIuaCBiL2RyaXZlcnMvZWRhYy9jb3J0ZXhfYXJt NjRfbDFfbDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjQ3NGIyCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9lZGFjL2NvcnRleF9hcm02NF9sMV9sMi5oCkBAIC0w LDAgKzEsNTUgQEAKKy8qCisgKiBDb3J0ZXggQTU3IGFuZCBBNTMgRURBQyBMMSBhbmQgTDIgY2Fj aGUgZXJyb3IgZGV0ZWN0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE4LCBOWFAgU2VtaWNv bmR1Y3RvcgorICogQXV0aG9yOiBZb3JrIFN1biA8eW9yay5zdW5AbnhwLmNvbT4KKyAqCisgKiBQ YXJ0aWFsbHkgdGFrZSBmcm9tIGEgc2ltaWxhciBkcml2ZXIgYnkKKyAqIEJyaWplc2ggU2luZ2gg PGJyaWplc2hrdW1hci5zaW5naEBhbWQuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBBZHZh bmNlZCBNaWNybyBEZXZpY2VzCisKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w CisgKi8KKworI2lmbmRlZiBfX0NPUlRFWF9BUk02NF9MMV9MMl9ICisjZGVmaW5lIF9fQ09SVEVY X0FSTTY0X0wxX0wyX0gKKworI2RlZmluZSBTSVBfQUxMT1dfTDFMMl9FUlJfMzIJCTB4ODIwMEZG MTUKKyNkZWZpbmUgU0lQX0FMTE9XX0wyX0NMUl8zMgkJMHg4MjAwRkYxNgorCisjZGVmaW5lIEVE QUNfTU9EX1NUUgkJCSJjb3J0ZXhfZWRhY19sMV9sMiIKKworI2RlZmluZSBjb3J0ZXhfcHJpbnRr KGxldmVsLCBmbXQsIGFyZy4uLikgXAorCWVkYWNfcHJpbnRrKGxldmVsLCBFREFDX01PRF9TVFIs IGZtdCwgIyNhcmcpCisKKyNkZWZpbmUgQ1BVTUVSUlNSX0VMMV9SQU1JRCh4KQkJKCgoeCkgPj4g MjQpICYgMHg3ZikKKyNkZWZpbmUgQ1BVTUVSUlNSX0VMMV9WQUxJRCh4KQkJKCh4KSAmICgxIDw8 IDMxKSkKKyNkZWZpbmUgQ1BVTUVSUlNSX0VMMV9GQVRBTCh4KQkJKCh4KSAmICgxVUwgPDwgNjMp KQorI2RlZmluZSBDUFVNRVJSU1JfUkFNSURfTUFTSwkJKDB4N2YgPDwgMjQpCisjZGVmaW5lIEwx X0lfVEFHX1JBTQkJCTB4MDAKKyNkZWZpbmUgTDFfSV9EQVRBX1JBTQkJCTB4MDEKKyNkZWZpbmUg TDFfRF9UQUdfUkFNCQkJMHgwOAorI2RlZmluZSBMMV9EX0RBVEFfUkFNCQkJMHgwOQorI2RlZmlu ZSBMMV9EX0RJUlRZX1JBTQkJCTB4MTQKKyNkZWZpbmUgVExCX1JBTQkJCQkweDE4CisKKyNkZWZp bmUgTDJNRVJSU1JfRUwxX1ZBTElEKHgpCQkoKHgpICYgKDEgPDwgMzEpKQorI2RlZmluZSBMMk1F UlJTUl9FTDFfRkFUQUwoeCkJCSgoeCkgJiAoMVVMIDw8IDYzKSkKKyNkZWZpbmUgTDJNRVJSU1Jf UkFNSURfTUFTSwkJKDB4N2YgPDwgMjQpCisKKyNkZWZpbmUgTUFYX1BPTExfTVNFQyAxNjM4NAor I2RlZmluZSBNSU5fUE9MTF9NU0VDIDY0CisKKy8qIEVycm9yIGluamVjdGlvbiBiaXQgaW4gQ1BV QUNUTFJfRUwxICovCisjZGVmaW5lIEwxX0VSUl9JTkpfRU4JCQkoMSA8PCA2KQorLyogRXJyb3Ig aW5qZWN0aW9uIGJpdCBpbiBMMkFDVExSX0VMMSAqLworI2RlZmluZSBMMkRfRVJSX0lOSl9FTgkJ CSgxIDw8IDI5KQorLyogTDIgRVJSIGludGVycnVwdCAqLworI2RlZmluZSBMMl9FUlJfSU5UCQkJ KDEgPDwgMzApCisKK3N0cnVjdCBjb3J0ZXhfcGRhdGEgeworCWludCBpcnE7CisJdm9pZCAqbWVt OworfTsKKworI2VuZGlmIC8qIF9fQ09SVEVYX0FSTTY0X0wxX0wyX0ggKi8K