From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v2,2/4] dmaengine: mtk_uart_dma: add Mediatek uart DMA support From: Long Cheng Message-Id: <1543999380-7946-3-git-send-email-long.cheng@mediatek.com> Date: Wed, 5 Dec 2018 16:42:58 +0800 To: Vinod Koul , Rob Herring , Mark Rutland Cc: Matthias Brugger , Dan Williams , Greg Kroah-Hartman , Jiri Slaby , Sean Wang , Long Cheng , dmaengine@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, srv_heupstream@mediatek.com, Yingjoe Chen , YT Shen List-ID: SW4gRE1BIGVuZ2luZSBmcmFtZXdvcmssIGFkZCA4MjUwIG10ayBkbWEgdG8gc3VwcG9ydCBpdC4K ClNpZ25lZC1vZmYtYnk6IExvbmcgQ2hlbmcgPGxvbmcuY2hlbmdAbWVkaWF0ZWsuY29tPgotLS0K IGRyaXZlcnMvZG1hL21lZGlhdGVrLzgyNTBfbXRrX2RtYS5jIHwgIDg5NCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9kbWEvbWVkaWF0ZWsvS2NvbmZpZyAgICAg ICAgfCAgIDExICsKIGRyaXZlcnMvZG1hL21lZGlhdGVrL01ha2VmaWxlICAgICAgIHwgICAgMSAr CiAzIGZpbGVzIGNoYW5nZWQsIDkwNiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9kbWEvbWVkaWF0ZWsvODI1MF9tdGtfZG1hLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2RtYS9tZWRpYXRlay84MjUwX210a19kbWEuYyBiL2RyaXZlcnMvZG1hL21lZGlhdGVrLzgyNTBf bXRrX2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NTQ2NzkKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9tZWRpYXRlay84MjUwX210a19kbWEuYwpAQCAt MCwwICsxLDg5NCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisg KiBNZWRpYXRlayA4MjUwIERNQSBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE4IE1l ZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogTG9uZyBDaGVuZyA8bG9uZy5jaGVuZ0BtZWRpYXRlay5j b20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVu Z2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgv ZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVw dC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KyNpbmNsdWRlIDxsaW51eC9vZl9kbWEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4K KyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50 aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+CisKKyNpbmNsdWRlICIuLi92aXJ0LWRt YS5oIgorCisjZGVmaW5lIE1US19BUERNQV9ERUZBVUxUX1JFUVVFU1RTCTEyNworI2RlZmluZSBN VEtfQVBETUFfQ0hBTk5FTFMJCShDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFMgKiAyKQorCisj ZGVmaW5lIFZGRl9FTl9CCQlCSVQoMCkKKyNkZWZpbmUgVkZGX1NUT1BfQgkJQklUKDApCisjZGVm aW5lIFZGRl9GTFVTSF9CCQlCSVQoMCkKKyNkZWZpbmUgVkZGXzRHX1NVUFBPUlRfQglCSVQoMCkK KyNkZWZpbmUgVkZGX1JYX0lOVF9FTjBfQglCSVQoMCkJLypyeCB2YWxpZCBzaXplID49ICB2ZmYg dGhyZSovCisjZGVmaW5lIFZGRl9SWF9JTlRfRU4xX0IJQklUKDEpCisjZGVmaW5lIFZGRl9UWF9J TlRfRU5fQgkJQklUKDApCS8qdHggbGVmdCBzaXplID49IHZmZiB0aHJlKi8KKyNkZWZpbmUgVkZG X1dBUk1fUlNUX0IJCUJJVCgwKQorI2RlZmluZSBWRkZfUlhfSU5UX0ZMQUdfQ0xSX0IJKEJJVCgw KSB8IEJJVCgxKSkKKyNkZWZpbmUgVkZGX1RYX0lOVF9GTEFHX0NMUl9CCTAKKyNkZWZpbmUgVkZG X1NUT1BfQ0xSX0IJCTAKKyNkZWZpbmUgVkZGX0ZMVVNIX0NMUl9CCQkwCisjZGVmaW5lIFZGRl9J TlRfRU5fQ0xSX0IJMAorI2RlZmluZSBWRkZfNEdfU1VQUE9SVF9DTFJfQgkwCisKKy8qIGludGVy cnVwdCB0cmlnZ2VyIGxldmVsIGZvciB0eCAqLworI2RlZmluZSBWRkZfVFhfVEhSRShuKQkJKChu KSAqIDcgLyA4KQorLyogaW50ZXJydXB0IHRyaWdnZXIgbGV2ZWwgZm9yIHJ4ICovCisjZGVmaW5l IFZGRl9SWF9USFJFKG4pCQkoKG4pICogMyAvIDQpCisKKyNkZWZpbmUgTVRLX0RNQV9SSU5HX1NJ WkUJMHhmZmZmVQorLyogaW52ZXJ0IHRoaXMgYml0IHdoZW4gd3JhcCByaW5nIGhlYWQgYWdhaW4q LworI2RlZmluZSBNVEtfRE1BX1JJTkdfV1JBUAkweDEwMDAwVQorCisjZGVmaW5lIFZGRl9JTlRf RkxBRwkJMHgwMAorI2RlZmluZSBWRkZfSU5UX0VOCQkweDA0CisjZGVmaW5lIFZGRl9FTgkJCTB4 MDgKKyNkZWZpbmUgVkZGX1JTVAkJCTB4MGMKKyNkZWZpbmUgVkZGX1NUT1AJCTB4MTAKKyNkZWZp bmUgVkZGX0ZMVVNICQkweDE0CisjZGVmaW5lIFZGRl9BRERSCQkweDFjCisjZGVmaW5lIFZGRl9M RU4JCQkweDI0CisjZGVmaW5lIFZGRl9USFJFCQkweDI4CisjZGVmaW5lIFZGRl9XUFQJCQkweDJj CisjZGVmaW5lIFZGRl9SUFQJCQkweDMwCisvKlRYOiB0aGUgYnVmZmVyIHNpemUgSFcgY2FuIHJl YWQuIFJYOiB0aGUgYnVmZmVyIHNpemUgU1cgY2FuIHJlYWQuKi8KKyNkZWZpbmUgVkZGX1ZBTElE X1NJWkUJCTB4M2MKKy8qVFg6IHRoZSBidWZmZXIgc2l6ZSBTVyBjYW4gd3JpdGUuIFJYOiB0aGUg YnVmZmVyIHNpemUgSFcgY2FuIHdyaXRlLiovCisjZGVmaW5lIFZGRl9MRUZUX1NJWkUJCTB4NDAK KyNkZWZpbmUgVkZGX0RFQlVHX1NUQVRVUwkweDUwCisjZGVmaW5lIFZGRl80R19TVVBQT1JUCQkw eDU0CisKK3N0cnVjdCBtdGtfZG1hZGV2IHsKKwlzdHJ1Y3QgZG1hX2RldmljZSBkZGV2OworCXZv aWQgX19pb21lbSAqbWVtX2Jhc2VbTVRLX0FQRE1BX0NIQU5ORUxTXTsKKwlzcGlubG9ja190IGxv Y2s7IC8qIGRtYSBkZXYgbG9jayAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrOworCXN0 cnVjdCBsaXN0X2hlYWQgcGVuZGluZzsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdW5zaWduZWQgaW50 IGRtYV9yZXF1ZXN0czsKKwlib29sIHN1cHBvcnRfMzNiaXRzOworCXVuc2lnbmVkIGludCBkbWFf aXJxW01US19BUERNQV9DSEFOTkVMU107CisJc3RydWN0IG10a19jaGFuICpjaFtNVEtfQVBETUFf Q0hBTk5FTFNdOworfTsKKworc3RydWN0IG10a19jaGFuIHsKKwlzdHJ1Y3QgdmlydF9kbWFfY2hh biB2YzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJc3RydWN0IGRtYV9zbGF2ZV9jb25maWcJ Y2ZnOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlzdHJ1Y3QgbXRrX2RtYV9kZXNjICpkZXNjOwor CisJYm9vbCBzdG9wOworCWJvb2wgcmVxdWVzdGVkOworCisJdW5zaWduZWQgaW50IGRtYV9zaWc7 CisJdW5zaWduZWQgaW50IGRtYV9jaDsKKwl1bnNpZ25lZCBpbnQgc2dpZHg7CisJdW5zaWduZWQg aW50IHJlbWFpbl9zaXplOworCXVuc2lnbmVkIGludCByeF9wdHI7Cit9OworCitzdHJ1Y3QgbXRr X2RtYV9zZyB7CisJZG1hX2FkZHJfdCBhZGRyOworCXVuc2lnbmVkIGludCBlbjsJCS8qIG51bWJl ciBvZiBlbGVtZW50cyAoMjQtYml0KSAqLworCXVuc2lnbmVkIGludCBmbjsJCS8qIG51bWJlciBv ZiBmcmFtZXMgKDE2LWJpdCkgKi8KK307CisKK3N0cnVjdCBtdGtfZG1hX2Rlc2MgeworCXN0cnVj dCB2aXJ0X2RtYV9kZXNjIHZkOworCWVudW0gZG1hX3RyYW5zZmVyX2RpcmVjdGlvbiBkaXI7CisK Kwl1bnNpZ25lZCBpbnQgc2dsZW47CisJc3RydWN0IG10a19kbWFfc2cgc2dbMF07Cit9OworCitz dGF0aWMgYm9vbCBtdGtfZG1hX2ZpbHRlcl9mbihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQg KnBhcmFtKTsKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZG1hX2ZpbHRlcl9pbmZvIG10a19kbWFfaW5mbyA9 IHsKKwkuZmlsdGVyX2ZuID0gbXRrX2RtYV9maWx0ZXJfZm4sCit9OworCitzdGF0aWMgaW5saW5l IHN0cnVjdCBtdGtfZG1hZGV2ICp0b19tdGtfZG1hX2RldihzdHJ1Y3QgZG1hX2RldmljZSAqZCkK K3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGQsIHN0cnVjdCBtdGtfZG1hZGV2LCBkZGV2KTsKK30K Kworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2NoYW4gKnRvX210a19kbWFfY2hhbihzdHJ1Y3Qg ZG1hX2NoYW4gKmMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgbXRrX2NoYW4s IHZjLmNoYW4pOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZG1hX2Rlc2MgKnRvX210 a19kbWFfZGVzYworCShzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnQpCit7CisJcmV0 dXJuIGNvbnRhaW5lcl9vZih0LCBzdHJ1Y3QgbXRrX2RtYV9kZXNjLCB2ZC50eCk7Cit9CisKK3N0 YXRpYyB2b2lkIG10a19kbWFfY2hhbl93cml0ZShzdHJ1Y3QgbXRrX2NoYW4gKmMsCisJCQkgICAg ICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl3cml0ZWwodmFsLCBj LT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBtdGtfZG1hX2NoYW5fcmVh ZChzdHJ1Y3QgbXRrX2NoYW4gKmMsIHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIHJlYWRs KGMtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZG1hX2Rlc2NfZnJlZShzdHJ1 Y3QgdmlydF9kbWFfZGVzYyAqdmQpCit7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gdmQtPnR4 LmNoYW47CisJc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX2RtYV9jaGFuKGNoYW4pOworCisJ a2ZyZWUoYy0+ZGVzYyk7CisJYy0+ZGVzYyA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2Rt YV9jbGtfZW5hYmxlKHN0cnVjdCBtdGtfZG1hZGV2ICptdGtkKQoreworCWludCByZXQ7CisKKwly ZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUobXRrZC0+Y2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9l cnIobXRrZC0+ZGRldi5kZXYsICJDb3VsZG4ndCBlbmFibGUgdGhlIGNsb2NrXG4iKTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX2RtYV9jbGtf ZGlzYWJsZShzdHJ1Y3QgbXRrX2RtYWRldiAqbXRrZCkKK3sKKwljbGtfZGlzYWJsZV91bnByZXBh cmUobXRrZC0+Y2xrKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RtYV9yZW1vdmVfdmlydF9saXN0 KGRtYV9jb29raWVfdCBjb29raWUsCisJCQkJICAgICBzdHJ1Y3QgdmlydF9kbWFfY2hhbiAqdmMp Cit7CisJc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkOworCisJaWYgKGxpc3RfZW1wdHkoJnZjLT5k ZXNjX2lzc3VlZCkgPT0gMCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZkLCAmdmMtPmRlc2Nf aXNzdWVkLCBub2RlKSB7CisJCQlpZiAoY29va2llID09IHZkLT50eC5jb29raWUpIHsKKwkJCQlJ TklUX0xJU1RfSEVBRCgmdmMtPmRlc2NfaXNzdWVkKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQor CX0KK30KKworc3RhdGljIHZvaWQgbXRrX2RtYV90eF9mbHVzaChzdHJ1Y3QgZG1hX2NoYW4gKmNo YW4pCit7CisJc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX2RtYV9jaGFuKGNoYW4pOworCisJ aWYgKG10a19kbWFfY2hhbl9yZWFkKGMsIFZGRl9GTFVTSCkgPT0gMFUpCisJCW10a19kbWFfY2hh bl93cml0ZShjLCBWRkZfRkxVU0gsIFZGRl9GTFVTSF9CKTsKK30KKworc3RhdGljIHZvaWQgbXRr X2RtYV90eF93cml0ZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IG10a19jaGFu ICpjID0gdG9fbXRrX2RtYV9jaGFuKGNoYW4pOworCXVuc2lnbmVkIGludCB0eGNvdW50ID0gYy0+ cmVtYWluX3NpemU7CisJdW5zaWduZWQgaW50IGxlbiwgc2VuZCwgbGVmdCwgd3B0LCB3cmFwOwor CisJbGVuID0gbXRrX2RtYV9jaGFuX3JlYWQoYywgVkZGX0xFTik7CisKKwl3aGlsZSAoKGxlZnQg PSBtdGtfZG1hX2NoYW5fcmVhZChjLCBWRkZfTEVGVF9TSVpFKSkgPiAwVSkgeworCQlpZiAoYy0+ cmVtYWluX3NpemUgPT0gMFUpCisJCQlicmVhazsKKwkJc2VuZCA9IG1pbihsZWZ0LCBjLT5yZW1h aW5fc2l6ZSk7CisJCXdwdCA9IG10a19kbWFfY2hhbl9yZWFkKGMsIFZGRl9XUFQpOworCQl3cmFw ID0gd3B0ICYgTVRLX0RNQV9SSU5HX1dSQVAgPyAwVSA6IE1US19ETUFfUklOR19XUkFQOworCisJ CWlmICgod3B0ICYgKGxlbiAtIDFVKSkgKyBzZW5kIDwgbGVuKQorCQkJbXRrX2RtYV9jaGFuX3dy aXRlKGMsIFZGRl9XUFQsIHdwdCArIHNlbmQpOworCQllbHNlCisJCQltdGtfZG1hX2NoYW5fd3Jp dGUoYywgVkZGX1dQVCwKKwkJCQkJICAgKCh3cHQgKyBzZW5kKSAmIChsZW4gLSAxVSkpCisJCQkJ CSAgIHwgd3JhcCk7CisKKwkJYy0+cmVtYWluX3NpemUgLT0gc2VuZDsKKwl9CisKKwlpZiAodHhj b3VudCAhPSBjLT5yZW1haW5fc2l6ZSkgeworCQltdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGX0lO VF9FTiwgVkZGX1RYX0lOVF9FTl9CKTsKKwkJbXRrX2RtYV90eF9mbHVzaChjaGFuKTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkIG10a19kbWFfc3RhcnRfdHgoc3RydWN0IG10a19jaGFuICpjKQorewor CWlmIChtdGtfZG1hX2NoYW5fcmVhZChjLCBWRkZfTEVGVF9TSVpFKSA9PSAwVSkKKwkJbXRrX2Rt YV9jaGFuX3dyaXRlKGMsIFZGRl9JTlRfRU4sIFZGRl9UWF9JTlRfRU5fQik7CisJZWxzZQorCQlt dGtfZG1hX3R4X3dyaXRlKCZjLT52Yy5jaGFuKTsKKworCWMtPnN0b3AgPSBmYWxzZTsKK30KKwor c3RhdGljIHZvaWQgbXRrX2RtYV9nZXRfcnhfc2l6ZShzdHJ1Y3QgbXRrX2NoYW4gKmMpCit7CisJ dW5zaWduZWQgaW50IHJ4X3NpemUgPSBtdGtfZG1hX2NoYW5fcmVhZChjLCBWRkZfTEVOKTsKKwl1 bnNpZ25lZCBpbnQgcmRwdHIsIHdycHRyLCB3cnJlZywgcmRyZWcsIGNvdW50OworCisJcmRyZWcg PSBtdGtfZG1hX2NoYW5fcmVhZChjLCBWRkZfUlBUKTsKKwl3cnJlZyA9IG10a19kbWFfY2hhbl9y ZWFkKGMsIFZGRl9XUFQpOworCXJkcHRyID0gcmRyZWcgJiBNVEtfRE1BX1JJTkdfU0laRTsKKwl3 cnB0ciA9IHdycmVnICYgTVRLX0RNQV9SSU5HX1NJWkU7CisJY291bnQgPSAoKHJkcmVnIF4gd3Jy ZWcpICYgTVRLX0RNQV9SSU5HX1dSQVApID8KKwkJCSh3cnB0ciArIHJ4X3NpemUgLSByZHB0cikg OiAod3JwdHIgLSByZHB0cik7CisKKwljLT5yZW1haW5fc2l6ZSA9IGNvdW50OworCWMtPnJ4X3B0 ciA9IHJkcHRyOworCisJbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9SUFQsIHdycmVnKTsKK30K Kworc3RhdGljIHZvaWQgbXRrX2RtYV9zdGFydF9yeChzdHJ1Y3QgbXRrX2NoYW4gKmMpCit7CisJ c3RydWN0IGRtYV9jaGFuICpjaGFuID0gJmMtPnZjLmNoYW47CisJc3RydWN0IG10a19kbWFkZXYg Km10a2QgPSB0b19tdGtfZG1hX2RldihjaGFuLT5kZXZpY2UpOworCXN0cnVjdCBtdGtfZG1hX2Rl c2MgKmQgPSBjLT5kZXNjOworCisJaWYgKG10a19kbWFfY2hhbl9yZWFkKGMsIFZGRl9WQUxJRF9T SVpFKSA9PSAwVSkKKwkJcmV0dXJuOworCisJaWYgKGQgJiYgZC0+dmQudHguY29va2llICE9IDAp IHsKKwkJbXRrX2RtYV9nZXRfcnhfc2l6ZShjKTsKKwkJbXRrX2RtYV9yZW1vdmVfdmlydF9saXN0 KGQtPnZkLnR4LmNvb2tpZSwgJmMtPnZjKTsKKwkJdmNoYW5fY29va2llX2NvbXBsZXRlKCZkLT52 ZCk7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrKCZtdGtkLT5sb2NrKTsKKwkJaWYgKGxpc3RfZW1w dHkoJm10a2QtPnBlbmRpbmcpKQorCQkJbGlzdF9hZGRfdGFpbCgmYy0+bm9kZSwgJm10a2QtPnBl bmRpbmcpOworCQlzcGluX3VubG9jaygmbXRrZC0+bG9jayk7CisJCXRhc2tsZXRfc2NoZWR1bGUo Jm10a2QtPnRhc2spOworCX0KK30KKworc3RhdGljIHZvaWQgbXRrX2RtYV9yZXNldChzdHJ1Y3Qg bXRrX2NoYW4gKmMpCit7CisJc3RydWN0IG10a19kbWFkZXYgKm10a2QgPSB0b19tdGtfZG1hX2Rl dihjLT52Yy5jaGFuLmRldmljZSk7CisJdTMyIHN0YXR1czsKKwlpbnQgcmV0OworCisJbXRrX2Rt YV9jaGFuX3dyaXRlKGMsIFZGRl9BRERSLCAwKTsKKwltdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZG X1RIUkUsIDApOworCW10a19kbWFfY2hhbl93cml0ZShjLCBWRkZfTEVOLCAwKTsKKwltdGtfZG1h X2NoYW5fd3JpdGUoYywgVkZGX1JTVCwgVkZGX1dBUk1fUlNUX0IpOworCisJcmV0ID0gcmVhZHhf cG9sbF90aW1lb3V0KHJlYWRsLAorCQkJCSBjLT5iYXNlICsgVkZGX0VOLAorCQkJCSBzdGF0dXMs IHN0YXR1cyA9PSAwLCAxMCwgMTAwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoYy0+dmMuY2hh bi5kZXZpY2UtPmRldiwKKwkJCQkiZG1hIHJlc2V0OiBmYWlsLCB0aW1lb3V0XG4iKTsKKwkJcmV0 dXJuOworCX0KKworCWlmIChjLT5jZmcuZGlyZWN0aW9uID09IERNQV9ERVZfVE9fTUVNKQorCQlt dGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGX1JQVCwgMCk7CisJZWxzZSBpZiAoYy0+Y2ZnLmRpcmVj dGlvbiA9PSBETUFfTUVNX1RPX0RFVikKKwkJbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9XUFQs IDApOworCisJaWYgKG10a2QtPnN1cHBvcnRfMzNiaXRzKQorCQltdGtfZG1hX2NoYW5fd3JpdGUo YywgVkZGXzRHX1NVUFBPUlQsIFZGRl80R19TVVBQT1JUX0NMUl9CKTsKK30KKworc3RhdGljIHZv aWQgbXRrX2RtYV9zdG9wKHN0cnVjdCBtdGtfY2hhbiAqYykKK3sKKwl1MzIgc3RhdHVzOworCWlu dCByZXQ7CisKKwltdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGX0ZMVVNILCBWRkZfRkxVU0hfQ0xS X0IpOworCS8qIFdhaXQgZm9yIGZsdXNoICovCisJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJl YWRsLAorCQkJCSBjLT5iYXNlICsgVkZGX0ZMVVNILAorCQkJCSBzdGF0dXMsCisJCQkJIChzdGF0 dXMgJiBWRkZfRkxVU0hfQikgIT0gVkZGX0ZMVVNIX0IsCisJCQkJIDEwLCAxMDApOworCWlmIChy ZXQpCisJCWRldl9lcnIoYy0+dmMuY2hhbi5kZXZpY2UtPmRldiwKKwkJCSJkbWEgc3RvcDogcG9s bGluZyBGTFVTSCBmYWlsLCBERUJVRz0weCV4XG4iLAorCQkJbXRrX2RtYV9jaGFuX3JlYWQoYywg VkZGX0RFQlVHX1NUQVRVUykpOworCisJLypzZXQgc3RvcCBhcyAxIC0+IHdhaXQgdW50aWwgZW4g aXMgMCAtPiBzZXQgc3RvcCBhcyAwKi8KKwltdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGX1NUT1As IFZGRl9TVE9QX0IpOworCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChyZWFkbCwKKwkJCQkgYy0+ YmFzZSArIFZGRl9FTiwKKwkJCQkgc3RhdHVzLCBzdGF0dXMgPT0gMCwgMTAsIDEwMCk7CisJaWYg KHJldCkKKwkJZGV2X2VycihjLT52Yy5jaGFuLmRldmljZS0+ZGV2LAorCQkJImRtYSBzdG9wOiBw b2xsaW5nIFZGRl9FTiBmYWlsLCBERUJVRz0weCV4XG4iLAorCQkJbXRrX2RtYV9jaGFuX3JlYWQo YywgVkZGX0RFQlVHX1NUQVRVUykpOworCisJbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9TVE9Q LCBWRkZfU1RPUF9DTFJfQik7CisJbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9JTlRfRU4sIFZG Rl9JTlRfRU5fQ0xSX0IpOworCisJaWYgKGMtPmNmZy5kaXJlY3Rpb24gPT0gRE1BX0RFVl9UT19N RU0pCisJCW10a19kbWFfY2hhbl93cml0ZShjLCBWRkZfSU5UX0ZMQUcsIFZGRl9SWF9JTlRfRkxB R19DTFJfQik7CisJZWxzZQorCQltdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGX0lOVF9GTEFHLCBW RkZfVFhfSU5UX0ZMQUdfQ0xSX0IpOworCisJYy0+c3RvcCA9IHRydWU7Cit9CisKKy8qCisgKiBU aGlzIGNhbGxiYWNrIHNjaGVkdWxlcyBhbGwgcGVuZGluZyBjaGFubmVscy4gV2UgY291bGQgYmUg bW9yZQorICogY2xldmVyIGhlcmUgYnkgcG9zdHBvbmluZyBhbGxvY2F0aW9uIG9mIHRoZSByZWFs IERNQSBjaGFubmVscyB0bworICogdGhpcyBwb2ludCwgYW5kIGZyZWVpbmcgdGhlbSB3aGVuIG91 ciB2aXJ0dWFsIGNoYW5uZWwgYmVjb21lcyBpZGxlLgorICoKKyAqIFdlIHdvdWxkIHRoZW4gbmVl ZCB0byBkZWFsIHdpdGggJ2FsbCBjaGFubmVscyBpbi11c2UnCisgKi8KK3N0YXRpYyB2b2lkIG10 a19kbWFfc2NoZWQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBtdGtfZG1hZGV2ICpt dGtkID0gKHN0cnVjdCBtdGtfZG1hZGV2ICopZGF0YTsKKwlzdHJ1Y3QgdmlydF9kbWFfZGVzYyAq dmQ7CisJc3RydWN0IG10a19jaGFuICpjOworCWRtYV9jb29raWVfdCBjb29raWU7CisJdW5zaWdu ZWQgbG9uZyBmbGFnczsKKwlMSVNUX0hFQUQoaGVhZCk7CisKKwlzcGluX2xvY2tfaXJxKCZtdGtk LT5sb2NrKTsKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoJm10a2QtPnBlbmRpbmcsICZoZWFkKTsK KwlzcGluX3VubG9ja19pcnEoJm10a2QtPmxvY2spOworCisJaWYgKCFsaXN0X2VtcHR5KCZoZWFk KSkgeworCQljID0gbGlzdF9maXJzdF9lbnRyeSgmaGVhZCwgc3RydWN0IG10a19jaGFuLCBub2Rl KTsKKwkJY29va2llID0gYy0+dmMuY2hhbi5jb29raWU7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUo JmMtPnZjLmxvY2ssIGZsYWdzKTsKKwkJaWYgKGMtPmNmZy5kaXJlY3Rpb24gPT0gRE1BX0RFVl9U T19NRU0pIHsKKwkJCWxpc3RfZGVsX2luaXQoJmMtPm5vZGUpOworCQkJbXRrX2RtYV9zdGFydF9y eChjKTsKKwkJfSBlbHNlIGlmIChjLT5jZmcuZGlyZWN0aW9uID09IERNQV9NRU1fVE9fREVWKSB7 CisJCQl2ZCA9IHZjaGFuX2ZpbmRfZGVzYygmYy0+dmMsIGNvb2tpZSk7CisJCQljLT5kZXNjID0g dG9fbXRrX2RtYV9kZXNjKCZ2ZC0+dHgpOworCQkJbGlzdF9kZWxfaW5pdCgmYy0+bm9kZSk7CisJ CQltdGtfZG1hX3N0YXJ0X3R4KGMpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMt PnZjLmxvY2ssIGZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RtYV9hbGxvY19jaGFu X3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IG10a19kbWFkZXYg Km10a2QgPSB0b19tdGtfZG1hX2RldihjaGFuLT5kZXZpY2UpOworCXN0cnVjdCBtdGtfY2hhbiAq YyA9IHRvX210a19kbWFfY2hhbihjaGFuKTsKKwlpbnQgcmV0ID0gLUVCVVNZOworCisJcG1fcnVu dGltZV9nZXRfc3luYyhtdGtkLT5kZGV2LmRldik7CisKKwlpZiAoIW10a2QtPmNoW2MtPmRtYV9j aF0pIHsKKwkJYy0+YmFzZSA9IG10a2QtPm1lbV9iYXNlW2MtPmRtYV9jaF07CisJCW10a2QtPmNo W2MtPmRtYV9jaF0gPSBjOworCQlyZXQgPSAxOworCX0KKwljLT5yZXF1ZXN0ZWQgPSBmYWxzZTsK KwltdGtfZG1hX3Jlc2V0KGMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRr X2RtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1 Y3QgbXRrX2RtYWRldiAqbXRrZCA9IHRvX210a19kbWFfZGV2KGNoYW4tPmRldmljZSk7CisJc3Ry dWN0IG10a19jaGFuICpjID0gdG9fbXRrX2RtYV9jaGFuKGNoYW4pOworCisJaWYgKGMtPnJlcXVl c3RlZCkgeworCQljLT5yZXF1ZXN0ZWQgPSBmYWxzZTsKKwkJZnJlZV9pcnEobXRrZC0+ZG1hX2ly cVtjLT5kbWFfY2hdLCBjaGFuKTsKKwl9CisKKwl0YXNrbGV0X2tpbGwoJm10a2QtPnRhc2spOwor CXRhc2tsZXRfa2lsbCgmYy0+dmMudGFzayk7CisKKwljLT5iYXNlID0gTlVMTDsKKwltdGtkLT5j aFtjLT5kbWFfY2hdID0gTlVMTDsKKwl2Y2hhbl9mcmVlX2NoYW5fcmVzb3VyY2VzKCZjLT52Yyk7 CisKKwlkZXZfZGJnKG10a2QtPmRkZXYuZGV2LCAiZnJlZWluZyBjaGFubmVsIGZvciAldVxuIiwg Yy0+ZG1hX3NpZyk7CisJYy0+ZG1hX3NpZyA9IDA7CisKKwlwbV9ydW50aW1lX3B1dF9zeW5jKG10 a2QtPmRkZXYuZGV2KTsKK30KKworc3RhdGljIGVudW0gZG1hX3N0YXR1cyBtdGtfZG1hX3R4X3N0 YXR1cyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQkJCSBkbWFfY29va2llX3QgY29va2llLAor CQkJCQkgc3RydWN0IGRtYV90eF9zdGF0ZSAqdHhzdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2NoYW4g KmMgPSB0b19tdGtfZG1hX2NoYW4oY2hhbik7CisJZW51bSBkbWFfc3RhdHVzIHJldDsKKwl1bnNp Z25lZCBsb25nIGZsYWdzOworCisJaWYgKCF0eHN0YXRlKQorCQlyZXR1cm4gRE1BX0VSUk9SOwor CisJcmV0ID0gZG1hX2Nvb2tpZV9zdGF0dXMoY2hhbiwgY29va2llLCB0eHN0YXRlKTsKKwlzcGlu X2xvY2tfaXJxc2F2ZSgmYy0+dmMubG9jaywgZmxhZ3MpOworCWlmIChyZXQgPT0gRE1BX0lOX1BS T0dSRVNTKSB7CisJCWMtPnJ4X3B0ciA9IG10a19kbWFfY2hhbl9yZWFkKGMsIFZGRl9SUFQpICYg TVRLX0RNQV9SSU5HX1NJWkU7CisJCWRtYV9zZXRfcmVzaWR1ZSh0eHN0YXRlLCBjLT5yeF9wdHIp OworCX0gZWxzZSBpZiAocmV0ID09IERNQV9DT01QTEVURSAmJiBjLT5jZmcuZGlyZWN0aW9uID09 IERNQV9ERVZfVE9fTUVNKSB7CisJCWRtYV9zZXRfcmVzaWR1ZSh0eHN0YXRlLCBjLT5yZW1haW5f c2l6ZSk7CisJfSBlbHNlIHsKKwkJZG1hX3NldF9yZXNpZHVlKHR4c3RhdGUsIDApOworCX0KKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZjLT52Yy5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICptdGtfZG1hX3By ZXBfc2xhdmVfc2cKKwkoc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2NhdHRlcmxpc3Qg KnNnbCwKKwl1bnNpZ25lZCBpbnQgc2dsZW4sCWVudW0gZG1hX3RyYW5zZmVyX2RpcmVjdGlvbiBk aXIsCisJdW5zaWduZWQgbG9uZyB0eF9mbGFncywgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3Qg bXRrX2NoYW4gKmMgPSB0b19tdGtfZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IHNjYXR0ZXJsaXN0 ICpzZ2VudDsKKwlzdHJ1Y3QgbXRrX2RtYV9kZXNjICpkOworCXN0cnVjdCBtdGtfZG1hX3NnICpz ZzsKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgaSwgaiwgZW47CisKKwllbiA9IDE7CisKKwlpZiAoKGRp ciAhPSBETUFfREVWX1RPX01FTSkgJiYKKwkJKGRpciAhPSBETUFfTUVNX1RPX0RFVikpIHsKKwkJ ZGV2X2VycihjaGFuLT5kZXZpY2UtPmRldiwgImJhZCBkaXJlY3Rpb25cbiIpOworCQlyZXR1cm4g TlVMTDsKKwl9CisKKwkvKiBOb3cgYWxsb2NhdGUgYW5kIHNldHVwIHRoZSBkZXNjcmlwdG9yLiAq LworCWQgPSBremFsbG9jKHNpemVvZigqZCkgKyBzZ2xlbiAqIHNpemVvZihkLT5zZ1swXSksIEdG UF9BVE9NSUMpOworCWlmICghZCkKKwkJcmV0dXJuIE5VTEw7CisKKwlkLT5kaXIgPSBkaXI7CisK KwlqID0gMDsKKwlmb3JfZWFjaF9zZyhzZ2wsIHNnZW50LCBzZ2xlbiwgaSkgeworCQlkLT5zZ1tq XS5hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2dlbnQpOworCQlkLT5zZ1tqXS5lbiA9IGVuOworCQlk LT5zZ1tqXS5mbiA9IHNnX2RtYV9sZW4oc2dlbnQpIC8gZW47CisJCWorKzsKKwl9CisKKwlkLT5z Z2xlbiA9IGo7CisKKwlpZiAoZGlyID09IERNQV9NRU1fVE9fREVWKSB7CisJCWZvciAoc2l6ZSA9 IGkgPSAwOyBpIDwgZC0+c2dsZW47IGkrKykgeworCQkJc2cgPSAmZC0+c2dbaV07CisJCQlzaXpl ICs9IHNnLT5lbiAqIHNnLT5mbjsKKwkJfQorCQljLT5yZW1haW5fc2l6ZSA9IHNpemU7CisJfQor CisJcmV0dXJuIHZjaGFuX3R4X3ByZXAoJmMtPnZjLCAmZC0+dmQsIHR4X2ZsYWdzKTsKK30KKwor c3RhdGljIHZvaWQgbXRrX2RtYV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikK K3sKKwlzdHJ1Y3QgbXRrX2NoYW4gKmMgPSB0b19tdGtfZG1hX2NoYW4oY2hhbik7CisJc3RydWN0 IHZpcnRfZG1hX2Rlc2MgKnZkOworCXN0cnVjdCBtdGtfZG1hZGV2ICptdGtkOworCWRtYV9jb29r aWVfdCBjb29raWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZl KCZjLT52Yy5sb2NrLCBmbGFncyk7CisJaWYgKGMtPmNmZy5kaXJlY3Rpb24gPT0gRE1BX0RFVl9U T19NRU0pIHsKKwkJY29va2llID0gYy0+dmMuY2hhbi5jb29raWU7CisJCW10a2QgPSB0b19tdGtf ZG1hX2RldihjaGFuLT5kZXZpY2UpOworCQlpZiAodmNoYW5faXNzdWVfcGVuZGluZygmYy0+dmMp ICYmICFjLT5kZXNjKSB7CisJCQl2ZCA9IHZjaGFuX2ZpbmRfZGVzYygmYy0+dmMsIGNvb2tpZSk7 CisJCQljLT5kZXNjID0gdG9fbXRrX2RtYV9kZXNjKCZ2ZC0+dHgpOworCQl9CisJfSBlbHNlIGlm IChjLT5jZmcuZGlyZWN0aW9uID09IERNQV9NRU1fVE9fREVWKSB7CisJCWNvb2tpZSA9IGMtPnZj LmNoYW4uY29va2llOworCQlpZiAodmNoYW5faXNzdWVfcGVuZGluZygmYy0+dmMpICYmICFjLT5k ZXNjKSB7CisJCQl2ZCA9IHZjaGFuX2ZpbmRfZGVzYygmYy0+dmMsIGNvb2tpZSk7CisJCQljLT5k ZXNjID0gdG9fbXRrX2RtYV9kZXNjKCZ2ZC0+dHgpOworCQkJbXRrX2RtYV9zdGFydF90eChjKTsK KwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjLT52Yy5sb2NrLCBmbGFncyk7Cit9 CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfZG1hX3J4X2ludGVycnVwdChpbnQgaXJxLCB2b2lk ICpkZXZfaWQpCit7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gKHN0cnVjdCBkbWFfY2hhbiAq KWRldl9pZDsKKwlzdHJ1Y3QgbXRrX2NoYW4gKmMgPSB0b19tdGtfZG1hX2NoYW4oY2hhbik7CisJ dW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjLT52Yy5sb2NrLCBm bGFncyk7CisJbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9JTlRfRkxBRywgVkZGX1JYX0lOVF9G TEFHX0NMUl9CKTsKKworCW10a19kbWFfc3RhcnRfcngoYyk7CisKKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZjLT52Yy5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisK K3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfZG1hX3R4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpk ZXZfaWQpCit7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gKHN0cnVjdCBkbWFfY2hhbiAqKWRl dl9pZDsKKwlzdHJ1Y3QgbXRrX2RtYWRldiAqbXRrZCA9IHRvX210a19kbWFfZGV2KGNoYW4tPmRl dmljZSk7CisJc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX2RtYV9jaGFuKGNoYW4pOworCXN0 cnVjdCBtdGtfZG1hX2Rlc2MgKmQgPSBjLT5kZXNjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisK KwlzcGluX2xvY2tfaXJxc2F2ZSgmYy0+dmMubG9jaywgZmxhZ3MpOworCWlmIChjLT5yZW1haW5f c2l6ZSAhPSAwVSkgeworCQlsaXN0X2FkZF90YWlsKCZjLT5ub2RlLCAmbXRrZC0+cGVuZGluZyk7 CisJCXRhc2tsZXRfc2NoZWR1bGUoJm10a2QtPnRhc2spOworCX0gZWxzZSB7CisJCW10a19kbWFf cmVtb3ZlX3ZpcnRfbGlzdChkLT52ZC50eC5jb29raWUsICZjLT52Yyk7CisJCXZjaGFuX2Nvb2tp ZV9jb21wbGV0ZSgmZC0+dmQpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjLT52Yy5s b2NrLCBmbGFncyk7CisKKwltdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGX0lOVF9GTEFHLCBWRkZf VFhfSU5UX0ZMQUdfQ0xSX0IpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMg aW50IG10a19kbWFfc2xhdmVfY29uZmlnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJCQlzdHJ1 Y3QgZG1hX3NsYXZlX2NvbmZpZyAqY2ZnKQoreworCXN0cnVjdCBtdGtfY2hhbiAqYyA9IHRvX210 a19kbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgbXRrX2RtYWRldiAqbXRrZCA9IHRvX210a19kbWFf ZGV2KGMtPnZjLmNoYW4uZGV2aWNlKTsKKwlpbnQgcmV0OworCisJYy0+Y2ZnID0gKmNmZzsKKwor CWlmIChjZmctPmRpcmVjdGlvbiA9PSBETUFfREVWX1RPX01FTSkgeworCQl1bnNpZ25lZCBpbnQg cnhfbGVuID0gY2ZnLT5zcmNfYWRkcl93aWR0aCAqIDEwMjQ7CisKKwkJbXRrX2RtYV9jaGFuX3dy aXRlKGMsIFZGRl9BRERSLCBjZmctPnNyY19hZGRyKTsKKwkJbXRrX2RtYV9jaGFuX3dyaXRlKGMs IFZGRl9MRU4sIHJ4X2xlbik7CisJCW10a19kbWFfY2hhbl93cml0ZShjLCBWRkZfVEhSRSwgVkZG X1JYX1RIUkUocnhfbGVuKSk7CisJCW10a19kbWFfY2hhbl93cml0ZShjLAorCQkJCSAgIFZGRl9J TlRfRU4sIFZGRl9SWF9JTlRfRU4wX0IKKwkJCQkgICB8IFZGRl9SWF9JTlRfRU4xX0IpOworCQlt dGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGX0lOVF9GTEFHLCBWRkZfUlhfSU5UX0ZMQUdfQ0xSX0Ip OworCQltdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGX0VOLCBWRkZfRU5fQik7CisKKwkJaWYgKCFj LT5yZXF1ZXN0ZWQpIHsKKwkJCWMtPnJlcXVlc3RlZCA9IHRydWU7CisJCQlyZXQgPSByZXF1ZXN0 X2lycShtdGtkLT5kbWFfaXJxW2MtPmRtYV9jaF0sCisJCQkJCSAgbXRrX2RtYV9yeF9pbnRlcnJ1 cHQsCisJCQkJCSAgSVJRRl9UUklHR0VSX05PTkUsCisJCQkJCSAgS0JVSUxEX01PRE5BTUUsIGNo YW4pOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlkZXZfZXJyKGNoYW4tPmRldmljZS0+ZGV2LCAi Q2FuJ3QgcmVxdWVzdCByeCBkbWEgSVJRXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0K KwkJfQorCX0gZWxzZSBpZiAoY2ZnLT5kaXJlY3Rpb24gPT0gRE1BX01FTV9UT19ERVYpCXsKKwkJ dW5zaWduZWQgaW50IHR4X2xlbiA9IGNmZy0+ZHN0X2FkZHJfd2lkdGggKiAxMDI0OworCisJCW10 a19kbWFfY2hhbl93cml0ZShjLCBWRkZfQUREUiwgY2ZnLT5kc3RfYWRkcik7CisJCW10a19kbWFf Y2hhbl93cml0ZShjLCBWRkZfTEVOLCB0eF9sZW4pOworCQltdGtfZG1hX2NoYW5fd3JpdGUoYywg VkZGX1RIUkUsIFZGRl9UWF9USFJFKHR4X2xlbikpOworCQltdGtfZG1hX2NoYW5fd3JpdGUoYywg VkZGX0lOVF9GTEFHLCBWRkZfVFhfSU5UX0ZMQUdfQ0xSX0IpOworCQltdGtfZG1hX2NoYW5fd3Jp dGUoYywgVkZGX0VOLCBWRkZfRU5fQik7CisKKwkJaWYgKCFjLT5yZXF1ZXN0ZWQpIHsKKwkJCWMt PnJlcXVlc3RlZCA9IHRydWU7CisJCQlyZXQgPSByZXF1ZXN0X2lycShtdGtkLT5kbWFfaXJxW2Mt PmRtYV9jaF0sCisJCQkJCSAgbXRrX2RtYV90eF9pbnRlcnJ1cHQsCisJCQkJCSAgSVJRRl9UUklH R0VSX05PTkUsCisJCQkJCSAgS0JVSUxEX01PRE5BTUUsIGNoYW4pOworCQkJaWYgKHJldCA8IDAp IHsKKwkJCQlkZXZfZXJyKGNoYW4tPmRldmljZS0+ZGV2LCAiQ2FuJ3QgcmVxdWVzdCB0eCBkbWEg SVJRXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCX0KKworCWlmIChtdGtk LT5zdXBwb3J0XzMzYml0cykKKwkJbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl80R19TVVBQT1JU LCBWRkZfNEdfU1VQUE9SVF9CKTsKKworCWlmIChtdGtfZG1hX2NoYW5fcmVhZChjLCBWRkZfRU4p ICE9IFZGRl9FTl9CKSB7CisJCWRldl9lcnIoY2hhbi0+ZGV2aWNlLT5kZXYsCisJCQkiY29uZmln IGRtYSBkaXJbJWRdIGZhaWxcbiIsIGNmZy0+ZGlyZWN0aW9uKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RtYV90ZXJtaW5hdGVfYWxs KHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgbXRrX2NoYW4gKmMgPSB0b19tdGtf ZG1hX2NoYW4oY2hhbik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFz YXZlKCZjLT52Yy5sb2NrLCBmbGFncyk7CisJbGlzdF9kZWxfaW5pdCgmYy0+bm9kZSk7CisJbXRr X2RtYV9zdG9wKGMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMtPnZjLmxvY2ssIGZsYWdz KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19kbWFfZGV2aWNlX3BhdXNlKHN0 cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwkvKiBqdXN0IGZvciBjaGVjayBjYXBzIHBhc3MgKi8K KwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBtdGtfZG1hX2RldmljZV9yZXN1bWUo c3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCS8qIGp1c3QgZm9yIGNoZWNrIGNhcHMgcGFzcyAq LworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBtdGtfZG1hX2ZyZWUoc3RydWN0 IG10a19kbWFkZXYgKm10a2QpCit7CisJdGFza2xldF9raWxsKCZtdGtkLT50YXNrKTsKKwl3aGls ZSAobGlzdF9lbXB0eSgmbXRrZC0+ZGRldi5jaGFubmVscykgPT0gMCkgeworCQlzdHJ1Y3QgbXRr X2NoYW4gKmMgPSBsaXN0X2ZpcnN0X2VudHJ5KCZtdGtkLT5kZGV2LmNoYW5uZWxzLAorCQkJc3Ry dWN0IG10a19jaGFuLCB2Yy5jaGFuLmRldmljZV9ub2RlKTsKKworCQlsaXN0X2RlbCgmYy0+dmMu Y2hhbi5kZXZpY2Vfbm9kZSk7CisJCXRhc2tsZXRfa2lsbCgmYy0+dmMudGFzayk7CisJCWRldm1f a2ZyZWUobXRrZC0+ZGRldi5kZXYsIGMpOworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgbXRrX3VhcnRfZG1hX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJt ZWRpYXRlayxtdDY1NzctdWFydC1kbWEiLCB9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CitN T0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdGtfdWFydF9kbWFfbWF0Y2gpOworCitzdGF0aWMgaW50 IG10a19hcGRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVj dCBtdGtfZG1hZGV2ICptdGtkOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBtdGtf Y2hhbiAqYzsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmM7CisKKwltdGtkID0gZGV2bV9remFs bG9jKCZwZGV2LT5kZXYsIHNpemVvZigqbXRrZCksIEdGUF9LRVJORUwpOworCWlmICghbXRrZCkK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgTVRLX0FQRE1BX0NIQU5ORUxT OyBpKyspIHsKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0Vf TUVNLCBpKTsKKwkJaWYgKCFyZXMpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJbXRrZC0+bWVtX2Jh c2VbaV0gPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwkJaWYgKElT X0VSUihtdGtkLT5tZW1fYmFzZVtpXSkpCisJCQlyZXR1cm4gUFRSX0VSUihtdGtkLT5tZW1fYmFz ZVtpXSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1US19BUERNQV9DSEFOTkVMUzsgaSsrKSB7 CisJCW10a2QtPmRtYV9pcnFbaV0gPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkpOworCQlpZiAo KGludCltdGtkLT5kbWFfaXJxW2ldIDwgMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFp bGVkIHRvIGdldCBJUlFbJWRdXG4iLCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQor CisJbXRrZC0+Y2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19F UlIobXRrZC0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBjbG9jayBzcGVjaWZp ZWRcbiIpOworCQlyZXR1cm4gUFRSX0VSUihtdGtkLT5jbGspOworCX0KKworCWlmIChvZl9wcm9w ZXJ0eV9yZWFkX2Jvb2wocGRldi0+ZGV2Lm9mX25vZGUsICJkbWEtMzNiaXRzIikpIHsKKwkJZGV2 X2luZm8oJnBkZXYtPmRldiwgIlN1cHBvcnQgZG1hIDMzYml0c1xuIik7CisJCW10a2QtPnN1cHBv cnRfMzNiaXRzID0gdHJ1ZTsKKwl9CisKKwlpZiAobXRrZC0+c3VwcG9ydF8zM2JpdHMpCisJCXJj ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCgmcGRldi0+ZGV2LCBETUFfQklUX01BU0soMzMp KTsKKwllbHNlCisJCXJjID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCgmcGRldi0+ZGV2LCBE TUFfQklUX01BU0soMzIpKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWRtYV9jYXBfc2V0 KERNQV9TTEFWRSwgbXRrZC0+ZGRldi5jYXBfbWFzayk7CisJbXRrZC0+ZGRldi5kZXZpY2VfYWxs b2NfY2hhbl9yZXNvdXJjZXMgPSBtdGtfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzOworCW10a2Qt PmRkZXYuZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBtdGtfZG1hX2ZyZWVfY2hhbl9yZXNv dXJjZXM7CisJbXRrZC0+ZGRldi5kZXZpY2VfdHhfc3RhdHVzID0gbXRrX2RtYV90eF9zdGF0dXM7 CisJbXRrZC0+ZGRldi5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IG10a19kbWFfaXNzdWVfcGVuZGlu ZzsKKwltdGtkLT5kZGV2LmRldmljZV9wcmVwX3NsYXZlX3NnID0gbXRrX2RtYV9wcmVwX3NsYXZl X3NnOworCW10a2QtPmRkZXYuZGV2aWNlX2NvbmZpZyA9IG10a19kbWFfc2xhdmVfY29uZmlnOwor CW10a2QtPmRkZXYuZGV2aWNlX3BhdXNlID0gbXRrX2RtYV9kZXZpY2VfcGF1c2U7CisJbXRrZC0+ ZGRldi5kZXZpY2VfcmVzdW1lID0gbXRrX2RtYV9kZXZpY2VfcmVzdW1lOworCW10a2QtPmRkZXYu ZGV2aWNlX3Rlcm1pbmF0ZV9hbGwgPSBtdGtfZG1hX3Rlcm1pbmF0ZV9hbGw7CisJbXRrZC0+ZGRl di5zcmNfYWRkcl93aWR0aHMgPSBCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURSk7CisJbXRr ZC0+ZGRldi5kc3RfYWRkcl93aWR0aHMgPSBCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURSk7 CisJbXRrZC0+ZGRldi5kaXJlY3Rpb25zID0gQklUKERNQV9ERVZfVE9fTUVNKSB8IEJJVChETUFf TUVNX1RPX0RFVik7CisJbXRrZC0+ZGRldi5yZXNpZHVlX2dyYW51bGFyaXR5ID0gRE1BX1JFU0lE VUVfR1JBTlVMQVJJVFlfU0VHTUVOVDsKKwltdGtkLT5kZGV2LmRldiA9ICZwZGV2LT5kZXY7CisJ SU5JVF9MSVNUX0hFQUQoJm10a2QtPmRkZXYuY2hhbm5lbHMpOworCUlOSVRfTElTVF9IRUFEKCZt dGtkLT5wZW5kaW5nKTsKKworCXNwaW5fbG9ja19pbml0KCZtdGtkLT5sb2NrKTsKKwl0YXNrbGV0 X2luaXQoJm10a2QtPnRhc2ssIG10a19kbWFfc2NoZWQsICh1bnNpZ25lZCBsb25nKW10a2QpOwor CisJbXRrZC0+ZG1hX3JlcXVlc3RzID0gTVRLX0FQRE1BX0RFRkFVTFRfUkVRVUVTVFM7CisJaWYg KG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCSAiZG1hLXJlcXVl c3RzIiwgJm10a2QtPmRtYV9yZXF1ZXN0cykpIHsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwKKwkJ CSAiTWlzc2luZyBkbWEtcmVxdWVzdHMgcHJvcGVydHksIHVzaW5nICV1LlxuIiwKKwkJCSBNVEtf QVBETUFfREVGQVVMVF9SRVFVRVNUUyk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1US19BUERN QV9DSEFOTkVMUzsgaSsrKSB7CisJCWMgPSBkZXZtX2t6YWxsb2MobXRrZC0+ZGRldi5kZXYsIHNp emVvZigqYyksIEdGUF9LRVJORUwpOworCQlpZiAoIWMpCisJCQlnb3RvIGVycl9ub19kbWE7CisK KwkJYy0+dmMuZGVzY19mcmVlID0gbXRrX2RtYV9kZXNjX2ZyZWU7CisJCXZjaGFuX2luaXQoJmMt PnZjLCAmbXRrZC0+ZGRldik7CisJCUlOSVRfTElTVF9IRUFEKCZjLT5ub2RlKTsKKwl9CisKKwlw bV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3NldF9hY3RpdmUoJnBk ZXYtPmRldik7CisKKwlyYyA9IGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJm10a2QtPmRkZXYp OworCWlmIChyYykKKwkJZ290byBycG1fZGlzYWJsZTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRh KHBkZXYsIG10a2QpOworCisJaWYgKHBkZXYtPmRldi5vZl9ub2RlKSB7CisJCW10a19kbWFfaW5m by5kbWFfY2FwID0gbXRrZC0+ZGRldi5jYXBfbWFzazsKKworCQkvKiBEZXZpY2UtdHJlZSBETUEg Y29udHJvbGxlciByZWdpc3RyYXRpb24gKi8KKwkJcmMgPSBvZl9kbWFfY29udHJvbGxlcl9yZWdp c3RlcihwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCQkJCW9mX2RtYV9zaW1wbGVfeGxhdGUsCisJCQkJ CQkmbXRrX2RtYV9pbmZvKTsKKwkJaWYgKHJjKQorCQkJZ290byBkbWFfcmVtb3ZlOworCX0KKwor CXJldHVybiByYzsKKworZG1hX3JlbW92ZToKKwlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIo Jm10a2QtPmRkZXYpOworcnBtX2Rpc2FibGU6CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5k ZXYpOworZXJyX25vX2RtYToKKwltdGtfZG1hX2ZyZWUobXRrZCk7CisJcmV0dXJuIHJjOworfQor CitzdGF0aWMgaW50IG10a19hcGRtYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKK3sKKwlzdHJ1Y3QgbXRrX2RtYWRldiAqbXRrZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk ZXYpOworCisJaWYgKHBkZXYtPmRldi5vZl9ub2RlKQorCQlvZl9kbWFfY29udHJvbGxlcl9mcmVl KHBkZXYtPmRldi5vZl9ub2RlKTsKKworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsK KwlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJnBkZXYtPmRldik7CisKKwlkbWFfYXN5bmNfZGV2aWNl X3VucmVnaXN0ZXIoJm10a2QtPmRkZXYpOworCisJbXRrX2RtYV9mcmVlKG10a2QpOworCisJcmV0 dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgbXRrX2RtYV9z dXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RtYWRldiAqbXRrZCA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFwbV9ydW50aW1lX3N1c3BlbmRlZChkZXYp KQorCQltdGtfZG1hX2Nsa19kaXNhYmxlKG10a2QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgbXRrX2RtYV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisJ c3RydWN0IG10a19kbWFkZXYgKm10a2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmICgh cG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSkgeworCQlyZXQgPSBtdGtfZG1hX2Nsa19lbmFibGUo bXRrZCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IG10a19kbWFfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikK K3sKKwlzdHJ1Y3QgbXRrX2RtYWRldiAqbXRrZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJ bXRrX2RtYV9jbGtfZGlzYWJsZShtdGtkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IG10a19kbWFfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7 CisJc3RydWN0IG10a19kbWFkZXYgKm10a2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJl dCA9IG10a19kbWFfY2xrX2VuYWJsZShtdGtkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG10a19kbWFfcG1fb3BzID0geworCVNFVF9TWVNURU1f U0xFRVBfUE1fT1BTKG10a19kbWFfc3VzcGVuZCwgbXRrX2RtYV9yZXN1bWUpCisJU0VUX1JVTlRJ TUVfUE1fT1BTKG10a19kbWFfcnVudGltZV9zdXNwZW5kLAorCQkJICAgbXRrX2RtYV9ydW50aW1l X3Jlc3VtZSwgTlVMTCkKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19k bWFfZHJpdmVyID0geworCS5wcm9iZQk9IG10a19hcGRtYV9wcm9iZSwKKwkucmVtb3ZlCT0gbXRr X2FwZG1hX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwK KwkJLnBtCQk9ICZtdGtfZG1hX3BtX29wcywKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hf cHRyKG10a191YXJ0X2RtYV9tYXRjaCksCisJfSwKK307CisKK3N0YXRpYyBib29sIG10a19kbWFf ZmlsdGVyX2ZuKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqcGFyYW0pCit7CisJaWYgKGNo YW4tPmRldmljZS0+ZGV2LT5kcml2ZXIgPT0gJm10a19kbWFfZHJpdmVyLmRyaXZlcikgeworCQlz dHJ1Y3QgbXRrX2RtYWRldiAqbXRrZCA9IHRvX210a19kbWFfZGV2KGNoYW4tPmRldmljZSk7CisJ CXN0cnVjdCBtdGtfY2hhbiAqYyA9IHRvX210a19kbWFfY2hhbihjaGFuKTsKKwkJdW5zaWduZWQg aW50IHJlcSA9ICoodW5zaWduZWQgaW50ICopcGFyYW07CisKKwkJaWYgKHJlcSA8PSBtdGtkLT5k bWFfcmVxdWVzdHMpIHsKKwkJCWMtPmRtYV9zaWcgPSByZXE7CisJCQljLT5kbWFfY2ggPSByZXE7 CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK21vZHVsZV9w bGF0Zm9ybV9kcml2ZXIobXRrX2RtYV9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIk1l ZGlhVGVrIFVBUlQgQVBETUEgQ29udHJvbGxlciBEcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkxv bmcgQ2hlbmcgPGxvbmcuY2hlbmdAbWVkaWF0ZWsuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQ TCB2MiIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9tZWRpYXRlay9LY29uZmlnIGIvZHJp dmVycy9kbWEvbWVkaWF0ZWsvS2NvbmZpZwppbmRleCAyN2JhYzBiLi5iZWY0MzZlIDEwMDY0NAot LS0gYS9kcml2ZXJzL2RtYS9tZWRpYXRlay9LY29uZmlnCisrKyBiL2RyaXZlcnMvZG1hL21lZGlh dGVrL0tjb25maWcKQEAgLTEsNCArMSwxNSBAQAogCitjb25maWcgRE1BX01US19VQVJUCisJdHJp c3RhdGUgIk1lZGlhVGVrIFNvQ3MgQVBETUEgc3VwcG9ydCBmb3IgVUFSVCIKKwlkZXBlbmRzIG9u IE9GCisJc2VsZWN0IERNQV9FTkdJTkUKKwlzZWxlY3QgRE1BX1ZJUlRVQUxfQ0hBTk5FTFMKKwlo ZWxwCisJICBTdXBwb3J0IGZvciB0aGUgVUFSVCBETUEgZW5naW5lIGZvdW5kIG9uIE1lZGlhVGVr IE1USyBTb0NzLgorCSAgd2hlbiA4MjUwIG10ayB1YXJ0IGlzIGVuYWJsZWQsIGFuZCBpZiB5b3Ug d2FudCB0byB1c2luZyBETUEsCisJICB5b3UgY2FuIGVuYWJsZSB0aGUgY29uZmlnLiB0aGUgRE1B IGVuZ2luZSBqdXN0IG9ubHkgYmUgdXNlZAorCSAgd2l0aCBNZWRpYVRlayBTb2NzLgorCiBjb25m aWcgTVRLX0hTRE1BCiAJdHJpc3RhdGUgIk1lZGlhVGVrIEhpZ2gtU3BlZWQgRE1BIGNvbnRyb2xs ZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsgfHwgQ09NUElMRV9URVNUCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hL21l ZGlhdGVrL01ha2VmaWxlCmluZGV4IDZlNzc4ZjguLjJmMmVmZDkgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZG1hL21lZGlhdGVrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZG1hL21lZGlhdGVrL01ha2Vm aWxlCkBAIC0xICsxLDIgQEAKK29iai0kKENPTkZJR19ETUFfTVRLX1VBUlQpICs9IDgyNTBfbXRr X2RtYS5vCiBvYmotJChDT05GSUdfTVRLX0hTRE1BKSArPSBtdGstaHNkbWEubwo=