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: [v5,1/2] dmaengine: 8250_mtk_dma: add Mediatek uart DMA support From: Long Cheng Message-Id: <1544506645-27979-2-git-send-email-long.cheng@mediatek.com> Date: Tue, 11 Dec 2018 13:37:24 +0800 To: Vinod Koul , Rob Herring , Mark Rutland , Ryder Lee Cc: Matthias Brugger , Dan Williams , Greg Kroah-Hartman , Jiri Slaby , Sean Wang , Sean Wang , 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 , Long Cheng List-ID: SW4gRE1BIGVuZ2luZSBmcmFtZXdvcmssIGFkZCA4MjUwIG10ayBkbWEgdG8gc3VwcG9ydCBpdC4K ClNpZ25lZC1vZmYtYnk6IExvbmcgQ2hlbmcgPGxvbmcuY2hlbmdAbWVkaWF0ZWsuY29tPgotLS0K IGRyaXZlcnMvZG1hL21lZGlhdGVrLzgyNTBfbXRrX2RtYS5jIHwgIDgzMCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9kbWEvbWVkaWF0ZWsvS2NvbmZpZyAgICAg ICAgfCAgIDExICsKIGRyaXZlcnMvZG1hL21lZGlhdGVrL01ha2VmaWxlICAgICAgIHwgICAgMSAr CiAzIGZpbGVzIGNoYW5nZWQsIDg0MiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9kbWEvbWVkaWF0ZWsvODI1MF9tdGtfZG1hLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2RtYS9tZWRpYXRlay84MjUwX210a19kbWEuYyBiL2RyaXZlcnMvZG1hL21lZGlhdGVrLzgyNTBf bXRrX2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OWQxODAKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9tZWRpYXRlay84MjUwX210a19kbWEuYwpAQCAt MCwwICsxLDgzMCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisg KiBNZWRpYXRlayA4MjUwIERNQSBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE4IE1l ZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogTG9uZyBDaGVuZyA8bG9uZy5jaGVuZ0BtZWRpYXRlay5j b20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVu Z2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgv ZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVw dC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4K KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kbWEuaD4KKyNp bmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2su aD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb2xs Lmg+CisKKyNpbmNsdWRlICIuLi92aXJ0LWRtYS5oIgorCisjZGVmaW5lIE1US19BUERNQV9ERUZB VUxUX1JFUVVFU1RTCTEyNworI2RlZmluZSBNVEtfQVBETUFfQ0hBTk5FTFMJCShDT05GSUdfU0VS SUFMXzgyNTBfTlJfVUFSVFMgKiAyKQorCisjZGVmaW5lIFZGRl9FTl9CCQlCSVQoMCkKKyNkZWZp bmUgVkZGX1NUT1BfQgkJQklUKDApCisjZGVmaW5lIFZGRl9GTFVTSF9CCQlCSVQoMCkKKyNkZWZp bmUgVkZGXzRHX1NVUFBPUlRfQglCSVQoMCkKKyNkZWZpbmUgVkZGX1JYX0lOVF9FTjBfQglCSVQo MCkJLypyeCB2YWxpZCBzaXplID49ICB2ZmYgdGhyZSovCisjZGVmaW5lIFZGRl9SWF9JTlRfRU4x X0IJQklUKDEpCisjZGVmaW5lIFZGRl9UWF9JTlRfRU5fQgkJQklUKDApCS8qdHggbGVmdCBzaXpl ID49IHZmZiB0aHJlKi8KKyNkZWZpbmUgVkZGX1dBUk1fUlNUX0IJCUJJVCgwKQorI2RlZmluZSBW RkZfUlhfSU5UX0ZMQUdfQ0xSX0IJKEJJVCgwKSB8IEJJVCgxKSkKKyNkZWZpbmUgVkZGX1RYX0lO VF9GTEFHX0NMUl9CCTAKKyNkZWZpbmUgVkZGX1NUT1BfQ0xSX0IJCTAKKyNkZWZpbmUgVkZGX0ZM VVNIX0NMUl9CCQkwCisjZGVmaW5lIFZGRl9JTlRfRU5fQ0xSX0IJMAorI2RlZmluZSBWRkZfNEdf U1VQUE9SVF9DTFJfQgkwCisKKy8qIGludGVycnVwdCB0cmlnZ2VyIGxldmVsIGZvciB0eCAqLwor I2RlZmluZSBWRkZfVFhfVEhSRShuKQkJKChuKSAqIDcgLyA4KQorLyogaW50ZXJydXB0IHRyaWdn ZXIgbGV2ZWwgZm9yIHJ4ICovCisjZGVmaW5lIFZGRl9SWF9USFJFKG4pCQkoKG4pICogMyAvIDQp CisKKyNkZWZpbmUgTVRLX0RNQV9SSU5HX1NJWkUJMHhmZmZmVQorLyogaW52ZXJ0IHRoaXMgYml0 IHdoZW4gd3JhcCByaW5nIGhlYWQgYWdhaW4qLworI2RlZmluZSBNVEtfRE1BX1JJTkdfV1JBUAkw eDEwMDAwVQorCisjZGVmaW5lIFZGRl9JTlRfRkxBRwkJMHgwMAorI2RlZmluZSBWRkZfSU5UX0VO CQkweDA0CisjZGVmaW5lIFZGRl9FTgkJCTB4MDgKKyNkZWZpbmUgVkZGX1JTVAkJCTB4MGMKKyNk ZWZpbmUgVkZGX1NUT1AJCTB4MTAKKyNkZWZpbmUgVkZGX0ZMVVNICQkweDE0CisjZGVmaW5lIFZG Rl9BRERSCQkweDFjCisjZGVmaW5lIFZGRl9MRU4JCQkweDI0CisjZGVmaW5lIFZGRl9USFJFCQkw eDI4CisjZGVmaW5lIFZGRl9XUFQJCQkweDJjCisjZGVmaW5lIFZGRl9SUFQJCQkweDMwCisvKlRY OiB0aGUgYnVmZmVyIHNpemUgSFcgY2FuIHJlYWQuIFJYOiB0aGUgYnVmZmVyIHNpemUgU1cgY2Fu IHJlYWQuKi8KKyNkZWZpbmUgVkZGX1ZBTElEX1NJWkUJCTB4M2MKKy8qVFg6IHRoZSBidWZmZXIg c2l6ZSBTVyBjYW4gd3JpdGUuIFJYOiB0aGUgYnVmZmVyIHNpemUgSFcgY2FuIHdyaXRlLiovCisj ZGVmaW5lIFZGRl9MRUZUX1NJWkUJCTB4NDAKKyNkZWZpbmUgVkZGX0RFQlVHX1NUQVRVUwkweDUw CisjZGVmaW5lIFZGRl80R19TVVBQT1JUCQkweDU0CisKK3N0cnVjdCBtdGtfZG1hZGV2IHsKKwlz dHJ1Y3QgZG1hX2RldmljZSBkZGV2OworCXZvaWQgX19pb21lbSAqbWVtX2Jhc2VbTVRLX0FQRE1B X0NIQU5ORUxTXTsKKwlzcGlubG9ja190IGxvY2s7IC8qIGRtYSBkZXYgbG9jayAqLworCXN0cnVj dCB0YXNrbGV0X3N0cnVjdCB0YXNrOworCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZzsKKwlzdHJ1 Y3QgY2xrICpjbGs7CisJdW5zaWduZWQgaW50IGRtYV9yZXF1ZXN0czsKKwlib29sIHN1cHBvcnRf MzNiaXRzOworCXVuc2lnbmVkIGludCBkbWFfaXJxW01US19BUERNQV9DSEFOTkVMU107CisJc3Ry dWN0IG10a19jaGFuICpjaFtNVEtfQVBETUFfQ0hBTk5FTFNdOworfTsKKworc3RydWN0IG10a19j aGFuIHsKKwlzdHJ1Y3QgdmlydF9kbWFfY2hhbiB2YzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7 CisJc3RydWN0IGRtYV9zbGF2ZV9jb25maWcJY2ZnOworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlz dHJ1Y3QgbXRrX2RtYV9kZXNjICpkZXNjOworCisJYm9vbCBzdG9wOworCWJvb2wgcmVxdWVzdGVk OworCisJdW5zaWduZWQgaW50IHJ4X3N0YXR1czsKK307CisKK3N0cnVjdCBtdGtfZG1hX3NnIHsK KwlkbWFfYWRkcl90IGFkZHI7CisJdW5zaWduZWQgaW50IGVuOwkJLyogbnVtYmVyIG9mIGVsZW1l bnRzICgyNC1iaXQpICovCisJdW5zaWduZWQgaW50IGZuOwkJLyogbnVtYmVyIG9mIGZyYW1lcyAo MTYtYml0KSAqLworfTsKKworc3RydWN0IG10a19kbWFfZGVzYyB7CisJc3RydWN0IHZpcnRfZG1h X2Rlc2MgdmQ7CisJZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpcjsKKworCXVuc2lnbmVk IGludCBzZ2xlbjsKKwlzdHJ1Y3QgbXRrX2RtYV9zZyBzZ1swXTsKKworCXVuc2lnbmVkIGludCBs ZW47Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfZG1hZGV2ICp0b19tdGtfZG1hX2Rl dihzdHJ1Y3QgZG1hX2RldmljZSAqZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGQsIHN0cnVj dCBtdGtfZG1hZGV2LCBkZGV2KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2NoYW4g KnRvX210a19kbWFfY2hhbihzdHJ1Y3QgZG1hX2NoYW4gKmMpCit7CisJcmV0dXJuIGNvbnRhaW5l cl9vZihjLCBzdHJ1Y3QgbXRrX2NoYW4sIHZjLmNoYW4pOworfQorCitzdGF0aWMgaW5saW5lIHN0 cnVjdCBtdGtfZG1hX2Rlc2MgKnRvX210a19kbWFfZGVzYworCShzdHJ1Y3QgZG1hX2FzeW5jX3R4 X2Rlc2NyaXB0b3IgKnQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih0LCBzdHJ1Y3QgbXRrX2Rt YV9kZXNjLCB2ZC50eCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kbWFfY2hhbl93cml0ZShzdHJ1 Y3QgbXRrX2NoYW4gKmMsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50 IHZhbCkKK3sKKwl3cml0ZWwodmFsLCBjLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIHVuc2ln bmVkIGludCBtdGtfZG1hX2NoYW5fcmVhZChzdHJ1Y3QgbXRrX2NoYW4gKmMsIHVuc2lnbmVkIGlu dCByZWcpCit7CisJcmV0dXJuIHJlYWRsKGMtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdm9p ZCBtdGtfZG1hX2Rlc2NfZnJlZShzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmQpCit7CisJc3RydWN0 IGRtYV9jaGFuICpjaGFuID0gdmQtPnR4LmNoYW47CisJc3RydWN0IG10a19jaGFuICpjID0gdG9f bXRrX2RtYV9jaGFuKGNoYW4pOworCisJa2ZyZWUoYy0+ZGVzYyk7CisJYy0+ZGVzYyA9IE5VTEw7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19kbWFfdHhfZmx1c2goc3RydWN0IGRtYV9jaGFuICpjaGFu KQoreworCXN0cnVjdCBtdGtfY2hhbiAqYyA9IHRvX210a19kbWFfY2hhbihjaGFuKTsKKworCWlm IChtdGtfZG1hX2NoYW5fcmVhZChjLCBWRkZfRkxVU0gpID09IDBVKQorCQltdGtfZG1hX2NoYW5f d3JpdGUoYywgVkZGX0ZMVVNILCBWRkZfRkxVU0hfQik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19k bWFfdHhfd3JpdGUoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBtdGtfY2hhbiAq YyA9IHRvX210a19kbWFfY2hhbihjaGFuKTsKKwl1bnNpZ25lZCBpbnQgdHhjb3VudCA9IGMtPmRl c2MtPmxlbjsKKwl1bnNpZ25lZCBpbnQgbGVuLCBzZW5kLCBsZWZ0LCB3cHQsIHdyYXA7CisKKwls ZW4gPSBtdGtfZG1hX2NoYW5fcmVhZChjLCBWRkZfTEVOKTsKKworCXdoaWxlICgobGVmdCA9IG10 a19kbWFfY2hhbl9yZWFkKGMsIFZGRl9MRUZUX1NJWkUpKSA+IDBVKSB7CisJCWlmIChjLT5kZXNj LT5sZW4gPT0gMFUpCisJCQlicmVhazsKKwkJc2VuZCA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVm dCwgYy0+ZGVzYy0+bGVuKTsKKwkJd3B0ID0gbXRrX2RtYV9jaGFuX3JlYWQoYywgVkZGX1dQVCk7 CisJCXdyYXAgPSB3cHQgJiBNVEtfRE1BX1JJTkdfV1JBUCA/IDBVIDogTVRLX0RNQV9SSU5HX1dS QVA7CisKKwkJaWYgKCh3cHQgJiAobGVuIC0gMVUpKSArIHNlbmQgPCBsZW4pCisJCQltdGtfZG1h X2NoYW5fd3JpdGUoYywgVkZGX1dQVCwgd3B0ICsgc2VuZCk7CisJCWVsc2UKKwkJCW10a19kbWFf Y2hhbl93cml0ZShjLCBWRkZfV1BULAorCQkJCQkgICAoKHdwdCArIHNlbmQpICYgKGxlbiAtIDFV KSkKKwkJCQkJICAgfCB3cmFwKTsKKworCQljLT5kZXNjLT5sZW4gLT0gc2VuZDsKKwl9CisKKwlp ZiAodHhjb3VudCAhPSBjLT5kZXNjLT5sZW4pIHsKKwkJbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZG Rl9JTlRfRU4sIFZGRl9UWF9JTlRfRU5fQik7CisJCW10a19kbWFfdHhfZmx1c2goY2hhbik7CisJ fQorfQorCitzdGF0aWMgdm9pZCBtdGtfZG1hX3N0YXJ0X3R4KHN0cnVjdCBtdGtfY2hhbiAqYykK K3sKKwlpZiAobXRrX2RtYV9jaGFuX3JlYWQoYywgVkZGX0xFRlRfU0laRSkgPT0gMFUpCisJCW10 a19kbWFfY2hhbl93cml0ZShjLCBWRkZfSU5UX0VOLCBWRkZfVFhfSU5UX0VOX0IpOworCWVsc2UK KwkJbXRrX2RtYV90eF93cml0ZSgmYy0+dmMuY2hhbik7CisKKwljLT5zdG9wID0gZmFsc2U7Cit9 CisKK3N0YXRpYyB2b2lkIG10a19kbWFfZ2V0X3J4X3NpemUoc3RydWN0IG10a19jaGFuICpjKQor eworCXVuc2lnbmVkIGludCByeF9zaXplID0gbXRrX2RtYV9jaGFuX3JlYWQoYywgVkZGX0xFTik7 CisJdW5zaWduZWQgaW50IHJkcHRyLCB3cnB0ciwgd3JyZWcsIHJkcmVnLCBjb3VudDsKKworCXJk cmVnID0gbXRrX2RtYV9jaGFuX3JlYWQoYywgVkZGX1JQVCk7CisJd3JyZWcgPSBtdGtfZG1hX2No YW5fcmVhZChjLCBWRkZfV1BUKTsKKwlyZHB0ciA9IHJkcmVnICYgTVRLX0RNQV9SSU5HX1NJWkU7 CisJd3JwdHIgPSB3cnJlZyAmIE1US19ETUFfUklOR19TSVpFOworCWNvdW50ID0gKChyZHJlZyBe IHdycmVnKSAmIE1US19ETUFfUklOR19XUkFQKSA/CisJCQkod3JwdHIgKyByeF9zaXplIC0gcmRw dHIpIDogKHdycHRyIC0gcmRwdHIpOworCisJYy0+cnhfc3RhdHVzID0gY291bnQ7CisKKwltdGtf ZG1hX2NoYW5fd3JpdGUoYywgVkZGX1JQVCwgd3JyZWcpOworfQorCitzdGF0aWMgdm9pZCBtdGtf ZG1hX3N0YXJ0X3J4KHN0cnVjdCBtdGtfY2hhbiAqYykKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNo YW4gPSAmYy0+dmMuY2hhbjsKKwlzdHJ1Y3QgbXRrX2RtYWRldiAqbXRrZCA9IHRvX210a19kbWFf ZGV2KGNoYW4tPmRldmljZSk7CisJc3RydWN0IG10a19kbWFfZGVzYyAqZCA9IGMtPmRlc2M7CisK KwlpZiAobXRrX2RtYV9jaGFuX3JlYWQoYywgVkZGX1ZBTElEX1NJWkUpID09IDBVKQorCQlyZXR1 cm47CisKKwlpZiAoZCAmJiB2Y2hhbl9uZXh0X2Rlc2MoJmMtPnZjKSkgeworCQltdGtfZG1hX2dl dF9yeF9zaXplKGMpOworCQlsaXN0X2RlbCgmZC0+dmQubm9kZSk7CisJCXZjaGFuX2Nvb2tpZV9j b21wbGV0ZSgmZC0+dmQpOworCX0gZWxzZSB7CisJCXNwaW5fbG9jaygmbXRrZC0+bG9jayk7CisJ CWlmIChsaXN0X2VtcHR5KCZtdGtkLT5wZW5kaW5nKSkKKwkJCWxpc3RfYWRkX3RhaWwoJmMtPm5v ZGUsICZtdGtkLT5wZW5kaW5nKTsKKwkJc3Bpbl91bmxvY2soJm10a2QtPmxvY2spOworCQl0YXNr bGV0X3NjaGVkdWxlKCZtdGtkLT50YXNrKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19kbWFf cmVzZXQoc3RydWN0IG10a19jaGFuICpjKQoreworCXN0cnVjdCBtdGtfZG1hZGV2ICptdGtkID0g dG9fbXRrX2RtYV9kZXYoYy0+dmMuY2hhbi5kZXZpY2UpOworCXUzMiBzdGF0dXM7CisJaW50IHJl dDsKKworCW10a19kbWFfY2hhbl93cml0ZShjLCBWRkZfQUREUiwgMCk7CisJbXRrX2RtYV9jaGFu X3dyaXRlKGMsIFZGRl9USFJFLCAwKTsKKwltdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGX0xFTiwg MCk7CisJbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9SU1QsIFZGRl9XQVJNX1JTVF9CKTsKKwor CXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChyZWFkbCwKKwkJCQkgYy0+YmFzZSArIFZGRl9FTiwK KwkJCQkgc3RhdHVzLCBzdGF0dXMgPT0gMCwgMTAsIDEwMCk7CisJaWYgKHJldCkgeworCQlkZXZf ZXJyKGMtPnZjLmNoYW4uZGV2aWNlLT5kZXYsCisJCQkJImRtYSByZXNldDogZmFpbCwgdGltZW91 dFxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoYy0+Y2ZnLmRpcmVjdGlvbiA9PSBETUFfREVW X1RPX01FTSkKKwkJbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9SUFQsIDApOworCWVsc2UgaWYg KGMtPmNmZy5kaXJlY3Rpb24gPT0gRE1BX01FTV9UT19ERVYpCisJCW10a19kbWFfY2hhbl93cml0 ZShjLCBWRkZfV1BULCAwKTsKKworCWlmIChtdGtkLT5zdXBwb3J0XzMzYml0cykKKwkJbXRrX2Rt YV9jaGFuX3dyaXRlKGMsIFZGRl80R19TVVBQT1JULCBWRkZfNEdfU1VQUE9SVF9DTFJfQik7Cit9 CisKK3N0YXRpYyB2b2lkIG10a19kbWFfc3RvcChzdHJ1Y3QgbXRrX2NoYW4gKmMpCit7CisJdTMy IHN0YXR1czsKKwlpbnQgcmV0OworCisJbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9GTFVTSCwg VkZGX0ZMVVNIX0NMUl9CKTsKKwkvKiBXYWl0IGZvciBmbHVzaCAqLworCXJldCA9IHJlYWR4X3Bv bGxfdGltZW91dChyZWFkbCwKKwkJCQkgYy0+YmFzZSArIFZGRl9GTFVTSCwKKwkJCQkgc3RhdHVz LAorCQkJCSAoc3RhdHVzICYgVkZGX0ZMVVNIX0IpICE9IFZGRl9GTFVTSF9CLAorCQkJCSAxMCwg MTAwKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGMtPnZjLmNoYW4uZGV2aWNlLT5kZXYsCisJCQki ZG1hIHN0b3A6IHBvbGxpbmcgRkxVU0ggZmFpbCwgREVCVUc9MHgleFxuIiwKKwkJCW10a19kbWFf Y2hhbl9yZWFkKGMsIFZGRl9ERUJVR19TVEFUVVMpKTsKKworCS8qc2V0IHN0b3AgYXMgMSAtPiB3 YWl0IHVudGlsIGVuIGlzIDAgLT4gc2V0IHN0b3AgYXMgMCovCisJbXRrX2RtYV9jaGFuX3dyaXRl KGMsIFZGRl9TVE9QLCBWRkZfU1RPUF9CKTsKKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVh ZGwsCisJCQkJIGMtPmJhc2UgKyBWRkZfRU4sCisJCQkJIHN0YXR1cywgc3RhdHVzID09IDAsIDEw LCAxMDApOworCWlmIChyZXQpCisJCWRldl9lcnIoYy0+dmMuY2hhbi5kZXZpY2UtPmRldiwKKwkJ CSJkbWEgc3RvcDogcG9sbGluZyBWRkZfRU4gZmFpbCwgREVCVUc9MHgleFxuIiwKKwkJCW10a19k bWFfY2hhbl9yZWFkKGMsIFZGRl9ERUJVR19TVEFUVVMpKTsKKworCW10a19kbWFfY2hhbl93cml0 ZShjLCBWRkZfU1RPUCwgVkZGX1NUT1BfQ0xSX0IpOworCW10a19kbWFfY2hhbl93cml0ZShjLCBW RkZfSU5UX0VOLCBWRkZfSU5UX0VOX0NMUl9CKTsKKworCWlmIChjLT5jZmcuZGlyZWN0aW9uID09 IERNQV9ERVZfVE9fTUVNKQorCQltdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGX0lOVF9GTEFHLCBW RkZfUlhfSU5UX0ZMQUdfQ0xSX0IpOworCWVsc2UKKwkJbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZG Rl9JTlRfRkxBRywgVkZGX1RYX0lOVF9GTEFHX0NMUl9CKTsKKworCWMtPnN0b3AgPSB0cnVlOwor fQorCisvKgorICogVGhpcyBjYWxsYmFjayBzY2hlZHVsZXMgYWxsIHBlbmRpbmcgY2hhbm5lbHMu IFdlIGNvdWxkIGJlIG1vcmUKKyAqIGNsZXZlciBoZXJlIGJ5IHBvc3Rwb25pbmcgYWxsb2NhdGlv biBvZiB0aGUgcmVhbCBETUEgY2hhbm5lbHMgdG8KKyAqIHRoaXMgcG9pbnQsIGFuZCBmcmVlaW5n IHRoZW0gd2hlbiBvdXIgdmlydHVhbCBjaGFubmVsIGJlY29tZXMgaWRsZS4KKyAqCisgKiBXZSB3 b3VsZCB0aGVuIG5lZWQgdG8gZGVhbCB3aXRoICdhbGwgY2hhbm5lbHMgaW4tdXNlJworICovCitz dGF0aWMgdm9pZCBtdGtfZG1hX3NjaGVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qg bXRrX2RtYWRldiAqbXRrZCA9IChzdHJ1Y3QgbXRrX2RtYWRldiAqKWRhdGE7CisJc3RydWN0IHZp cnRfZG1hX2Rlc2MgKnZkOworCXN0cnVjdCBtdGtfY2hhbiAqYzsKKwl1bnNpZ25lZCBsb25nIGZs YWdzOworCUxJU1RfSEVBRChoZWFkKTsKKworCXNwaW5fbG9ja19pcnEoJm10a2QtPmxvY2spOwor CWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmbXRrZC0+cGVuZGluZywgJmhlYWQpOworCXNwaW5fdW5s b2NrX2lycSgmbXRrZC0+bG9jayk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmhlYWQpKSB7CisJCWMg PSBsaXN0X2ZpcnN0X2VudHJ5KCZoZWFkLCBzdHJ1Y3QgbXRrX2NoYW4sIG5vZGUpOworCisJCXNw aW5fbG9ja19pcnFzYXZlKCZjLT52Yy5sb2NrLCBmbGFncyk7CisJCWlmIChjLT5jZmcuZGlyZWN0 aW9uID09IERNQV9ERVZfVE9fTUVNKSB7CisJCQlsaXN0X2RlbF9pbml0KCZjLT5ub2RlKTsKKwkJ CW10a19kbWFfc3RhcnRfcngoYyk7CisJCX0gZWxzZSBpZiAoYy0+Y2ZnLmRpcmVjdGlvbiA9PSBE TUFfTUVNX1RPX0RFVikgeworCQkJdmQgPSB2Y2hhbl9uZXh0X2Rlc2MoJmMtPnZjKTsKKwkJCWMt PmRlc2MgPSB0b19tdGtfZG1hX2Rlc2MoJnZkLT50eCk7CisJCQlsaXN0X2RlbF9pbml0KCZjLT5u b2RlKTsKKwkJCW10a19kbWFfc3RhcnRfdHgoYyk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmYy0+dmMubG9jaywgZmxhZ3MpOworCX0KK30KKworc3RhdGljIGludCBtdGtfZG1hX2Fs bG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgbXRr X2RtYWRldiAqbXRrZCA9IHRvX210a19kbWFfZGV2KGNoYW4tPmRldmljZSk7CisJc3RydWN0IG10 a19jaGFuICpjID0gdG9fbXRrX2RtYV9jaGFuKGNoYW4pOworCWludCByZXQgPSAtRUJVU1k7CisK KwlwbV9ydW50aW1lX2dldF9zeW5jKG10a2QtPmRkZXYuZGV2KTsKKworCWlmICghbXRrZC0+Y2hb Y2hhbi0+Y2hhbl9pZF0pIHsKKwkJYy0+YmFzZSA9IG10a2QtPm1lbV9iYXNlW2NoYW4tPmNoYW5f aWRdOworCQltdGtkLT5jaFtjaGFuLT5jaGFuX2lkXSA9IGM7CisJCXJldCA9IDE7CisJfQorCWMt PnJlcXVlc3RlZCA9IGZhbHNlOworCW10a19kbWFfcmVzZXQoYyk7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgdm9pZCBtdGtfZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9j aGFuICpjaGFuKQoreworCXN0cnVjdCBtdGtfZG1hZGV2ICptdGtkID0gdG9fbXRrX2RtYV9kZXYo Y2hhbi0+ZGV2aWNlKTsKKwlzdHJ1Y3QgbXRrX2NoYW4gKmMgPSB0b19tdGtfZG1hX2NoYW4oY2hh bik7CisKKwlpZiAoYy0+cmVxdWVzdGVkKSB7CisJCWMtPnJlcXVlc3RlZCA9IGZhbHNlOworCQlm cmVlX2lycShtdGtkLT5kbWFfaXJxW2NoYW4tPmNoYW5faWRdLCBjaGFuKTsKKwl9CisKKwl0YXNr bGV0X2tpbGwoJm10a2QtPnRhc2spOworCXRhc2tsZXRfa2lsbCgmYy0+dmMudGFzayk7CisKKwlj LT5iYXNlID0gTlVMTDsKKwltdGtkLT5jaFtjaGFuLT5jaGFuX2lkXSA9IE5VTEw7CisJdmNoYW5f ZnJlZV9jaGFuX3Jlc291cmNlcygmYy0+dmMpOworCisJcG1fcnVudGltZV9wdXRfc3luYyhtdGtk LT5kZGV2LmRldik7Cit9CisKK3N0YXRpYyBlbnVtIGRtYV9zdGF0dXMgbXRrX2RtYV90eF9zdGF0 dXMoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQkJCQkgZG1hX2Nvb2tpZV90IGNvb2tpZSwKKwkJ CQkJIHN0cnVjdCBkbWFfdHhfc3RhdGUgKnR4c3RhdGUpCit7CisJc3RydWN0IG10a19jaGFuICpj ID0gdG9fbXRrX2RtYV9jaGFuKGNoYW4pOworCWVudW0gZG1hX3N0YXR1cyByZXQ7CisJdW5zaWdu ZWQgbG9uZyBmbGFnczsKKworCWlmICghdHhzdGF0ZSkKKwkJcmV0dXJuIERNQV9FUlJPUjsKKwor CXJldCA9IGRtYV9jb29raWVfc3RhdHVzKGNoYW4sIGNvb2tpZSwgdHhzdGF0ZSk7CisJc3Bpbl9s b2NrX2lycXNhdmUoJmMtPnZjLmxvY2ssIGZsYWdzKTsKKwlpZiAocmV0ID09IERNQV9JTl9QUk9H UkVTUykgeworCQljLT5yeF9zdGF0dXMgPSBtdGtfZG1hX2NoYW5fcmVhZChjLCBWRkZfUlBUKQor CQkJICAgICAmIE1US19ETUFfUklOR19TSVpFOworCQlkbWFfc2V0X3Jlc2lkdWUodHhzdGF0ZSwg Yy0+cnhfc3RhdHVzKTsKKwl9IGVsc2UgaWYgKHJldCA9PSBETUFfQ09NUExFVEUgJiYgYy0+Y2Zn LmRpcmVjdGlvbiA9PSBETUFfREVWX1RPX01FTSkgeworCQlkbWFfc2V0X3Jlc2lkdWUodHhzdGF0 ZSwgYy0+cnhfc3RhdHVzKTsKKwl9IGVsc2UgeworCQlkbWFfc2V0X3Jlc2lkdWUodHhzdGF0ZSwg MCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMtPnZjLmxvY2ssIGZsYWdzKTsKKwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3Ig Km10a19kbWFfcHJlcF9zbGF2ZV9zZworCShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBz Y2F0dGVybGlzdCAqc2dsLAorCXVuc2lnbmVkIGludCBzZ2xlbiwJZW51bSBkbWFfdHJhbnNmZXJf ZGlyZWN0aW9uIGRpciwKKwl1bnNpZ25lZCBsb25nIHR4X2ZsYWdzLCB2b2lkICpjb250ZXh0KQor eworCXN0cnVjdCBtdGtfY2hhbiAqYyA9IHRvX210a19kbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3Qg c2NhdHRlcmxpc3QgKnNnZW50OworCXN0cnVjdCBtdGtfZG1hX2Rlc2MgKmQ7CisJc3RydWN0IG10 a19kbWFfc2cgKnNnOworCXVuc2lnbmVkIGludCBzaXplLCBpLCBqLCBlbjsKKworCWVuID0gMTsK KworCWlmICgoZGlyICE9IERNQV9ERVZfVE9fTUVNKSAmJgorCQkoZGlyICE9IERNQV9NRU1fVE9f REVWKSkgeworCQlkZXZfZXJyKGNoYW4tPmRldmljZS0+ZGV2LCAiYmFkIGRpcmVjdGlvblxuIik7 CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIE5vdyBhbGxvY2F0ZSBhbmQgc2V0dXAgdGhlIGRl c2NyaXB0b3IuICovCisJZCA9IGt6YWxsb2Moc2l6ZW9mKCpkKSArIHNnbGVuICogc2l6ZW9mKGQt PnNnWzBdKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFkKQorCQlyZXR1cm4gTlVMTDsKKworCWQtPmRp ciA9IGRpcjsKKworCWogPSAwOworCWZvcl9lYWNoX3NnKHNnbCwgc2dlbnQsIHNnbGVuLCBpKSB7 CisJCWQtPnNnW2pdLmFkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZ2VudCk7CisJCWQtPnNnW2pdLmVu ID0gZW47CisJCWQtPnNnW2pdLmZuID0gc2dfZG1hX2xlbihzZ2VudCkgLyBlbjsKKwkJaisrOwor CX0KKworCWQtPnNnbGVuID0gajsKKworCWlmIChkaXIgPT0gRE1BX01FTV9UT19ERVYpIHsKKwkJ Zm9yIChzaXplID0gaSA9IDA7IGkgPCBkLT5zZ2xlbjsgaSsrKSB7CisJCQlzZyA9ICZkLT5zZ1tp XTsKKwkJCXNpemUgKz0gc2ctPmVuICogc2ctPmZuOworCQl9CisJCWQtPmxlbiA9IHNpemU7CisJ fQorCisJcmV0dXJuIHZjaGFuX3R4X3ByZXAoJmMtPnZjLCAmZC0+dmQsIHR4X2ZsYWdzKTsKK30K Kworc3RhdGljIHZvaWQgbXRrX2RtYV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hh bikKK3sKKwlzdHJ1Y3QgbXRrX2NoYW4gKmMgPSB0b19tdGtfZG1hX2NoYW4oY2hhbik7CisJc3Ry dWN0IHZpcnRfZG1hX2Rlc2MgKnZkOworCXN0cnVjdCBtdGtfZG1hZGV2ICptdGtkOworCXVuc2ln bmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYy0+dmMubG9jaywgZmxhZ3Mp OworCWlmIChjLT5jZmcuZGlyZWN0aW9uID09IERNQV9ERVZfVE9fTUVNKSB7CisJCW10a2QgPSB0 b19tdGtfZG1hX2RldihjaGFuLT5kZXZpY2UpOworCQlpZiAodmNoYW5faXNzdWVfcGVuZGluZygm Yy0+dmMpICYmICFjLT5kZXNjKSB7CisJCQl2ZCA9IHZjaGFuX25leHRfZGVzYygmYy0+dmMpOwor CQkJYy0+ZGVzYyA9IHRvX210a19kbWFfZGVzYygmdmQtPnR4KTsKKwkJfQorCX0gZWxzZSBpZiAo Yy0+Y2ZnLmRpcmVjdGlvbiA9PSBETUFfTUVNX1RPX0RFVikgeworCQlpZiAodmNoYW5faXNzdWVf cGVuZGluZygmYy0+dmMpICYmICFjLT5kZXNjKSB7CisJCQl2ZCA9IHZjaGFuX25leHRfZGVzYygm Yy0+dmMpOworCQkJYy0+ZGVzYyA9IHRvX210a19kbWFfZGVzYygmdmQtPnR4KTsKKwkJCW10a19k bWFfc3RhcnRfdHgoYyk7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+dmMu bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2RtYV9yeF9pbnRlcnJ1 cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IChz dHJ1Y3QgZG1hX2NoYW4gKilkZXZfaWQ7CisJc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX2Rt YV9jaGFuKGNoYW4pOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmYy0+dmMubG9jaywgZmxhZ3MpOworCW10a19kbWFfY2hhbl93cml0ZShjLCBWRkZfSU5UX0ZM QUcsIFZGRl9SWF9JTlRfRkxBR19DTFJfQik7CisKKwltdGtfZG1hX3N0YXJ0X3J4KGMpOworCisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+dmMubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIElS UV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2RtYV90eF9pbnRlcnJ1cHQo aW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IChzdHJ1 Y3QgZG1hX2NoYW4gKilkZXZfaWQ7CisJc3RydWN0IG10a19kbWFkZXYgKm10a2QgPSB0b19tdGtf ZG1hX2RldihjaGFuLT5kZXZpY2UpOworCXN0cnVjdCBtdGtfY2hhbiAqYyA9IHRvX210a19kbWFf Y2hhbihjaGFuKTsKKwlzdHJ1Y3QgbXRrX2RtYV9kZXNjICpkID0gYy0+ZGVzYzsKKwl1bnNpZ25l ZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmMtPnZjLmxvY2ssIGZsYWdzKTsK KwlpZiAoZC0+bGVuICE9IDBVKSB7CisJCWxpc3RfYWRkX3RhaWwoJmMtPm5vZGUsICZtdGtkLT5w ZW5kaW5nKTsKKwkJdGFza2xldF9zY2hlZHVsZSgmbXRrZC0+dGFzayk7CisJfSBlbHNlIHsKKwkJ bGlzdF9kZWwoJmQtPnZkLm5vZGUpOworCQl2Y2hhbl9jb29raWVfY29tcGxldGUoJmQtPnZkKTsK Kwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYy0+dmMubG9jaywgZmxhZ3MpOworCisJbXRr X2RtYV9jaGFuX3dyaXRlKGMsIFZGRl9JTlRfRkxBRywgVkZGX1RYX0lOVF9GTEFHX0NMUl9CKTsK KworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBtdGtfZG1hX3NsYXZlX2Nv bmZpZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQkJc3RydWN0IGRtYV9zbGF2ZV9jb25maWcg KmNmZykKK3sKKwlzdHJ1Y3QgbXRrX2NoYW4gKmMgPSB0b19tdGtfZG1hX2NoYW4oY2hhbik7CisJ c3RydWN0IG10a19kbWFkZXYgKm10a2QgPSB0b19tdGtfZG1hX2RldihjLT52Yy5jaGFuLmRldmlj ZSk7CisJaW50IHJldDsKKworCWMtPmNmZyA9ICpjZmc7CisKKwlpZiAoY2ZnLT5kaXJlY3Rpb24g PT0gRE1BX0RFVl9UT19NRU0pIHsKKwkJdW5zaWduZWQgaW50IHJ4X2xlbiA9IGNmZy0+c3JjX2Fk ZHJfd2lkdGggKiAxMDI0OworCisJCW10a19kbWFfY2hhbl93cml0ZShjLCBWRkZfQUREUiwgY2Zn LT5zcmNfYWRkcik7CisJCW10a19kbWFfY2hhbl93cml0ZShjLCBWRkZfTEVOLCByeF9sZW4pOwor CQltdGtfZG1hX2NoYW5fd3JpdGUoYywgVkZGX1RIUkUsIFZGRl9SWF9USFJFKHJ4X2xlbikpOwor CQltdGtfZG1hX2NoYW5fd3JpdGUoYywKKwkJCQkgICBWRkZfSU5UX0VOLCBWRkZfUlhfSU5UX0VO MF9CCisJCQkJICAgfCBWRkZfUlhfSU5UX0VOMV9CKTsKKwkJbXRrX2RtYV9jaGFuX3dyaXRlKGMs IFZGRl9JTlRfRkxBRywgVkZGX1JYX0lOVF9GTEFHX0NMUl9CKTsKKwkJbXRrX2RtYV9jaGFuX3dy aXRlKGMsIFZGRl9FTiwgVkZGX0VOX0IpOworCisJCWlmICghYy0+cmVxdWVzdGVkKSB7CisJCQlj LT5yZXF1ZXN0ZWQgPSB0cnVlOworCQkJcmV0ID0gcmVxdWVzdF9pcnEobXRrZC0+ZG1hX2lycVtj aGFuLT5jaGFuX2lkXSwKKwkJCQkJICBtdGtfZG1hX3J4X2ludGVycnVwdCwKKwkJCQkJICBJUlFG X1RSSUdHRVJfTk9ORSwKKwkJCQkJICBLQlVJTERfTU9ETkFNRSwgY2hhbik7CisJCQlpZiAocmV0 IDwgMCkgeworCQkJCWRldl9lcnIoY2hhbi0+ZGV2aWNlLT5kZXYsICJDYW4ndCByZXF1ZXN0IHJ4 IGRtYSBJUlFcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisJfSBlbHNlIGlm IChjZmctPmRpcmVjdGlvbiA9PSBETUFfTUVNX1RPX0RFVikJeworCQl1bnNpZ25lZCBpbnQgdHhf bGVuID0gY2ZnLT5kc3RfYWRkcl93aWR0aCAqIDEwMjQ7CisKKwkJbXRrX2RtYV9jaGFuX3dyaXRl KGMsIFZGRl9BRERSLCBjZmctPmRzdF9hZGRyKTsKKwkJbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZG Rl9MRU4sIHR4X2xlbik7CisJCW10a19kbWFfY2hhbl93cml0ZShjLCBWRkZfVEhSRSwgVkZGX1RY X1RIUkUodHhfbGVuKSk7CisJCW10a19kbWFfY2hhbl93cml0ZShjLCBWRkZfSU5UX0ZMQUcsIFZG Rl9UWF9JTlRfRkxBR19DTFJfQik7CisJCW10a19kbWFfY2hhbl93cml0ZShjLCBWRkZfRU4sIFZG Rl9FTl9CKTsKKworCQlpZiAoIWMtPnJlcXVlc3RlZCkgeworCQkJYy0+cmVxdWVzdGVkID0gdHJ1 ZTsKKwkJCXJldCA9IHJlcXVlc3RfaXJxKG10a2QtPmRtYV9pcnFbY2hhbi0+Y2hhbl9pZF0sCisJ CQkJCSAgbXRrX2RtYV90eF9pbnRlcnJ1cHQsCisJCQkJCSAgSVJRRl9UUklHR0VSX05PTkUsCisJ CQkJCSAgS0JVSUxEX01PRE5BTUUsIGNoYW4pOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlkZXZf ZXJyKGNoYW4tPmRldmljZS0+ZGV2LCAiQ2FuJ3QgcmVxdWVzdCB0eCBkbWEgSVJRXG4iKTsKKwkJ CQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCX0KKworCWlmIChtdGtkLT5zdXBwb3J0XzMz Yml0cykKKwkJbXRrX2RtYV9jaGFuX3dyaXRlKGMsIFZGRl80R19TVVBQT1JULCBWRkZfNEdfU1VQ UE9SVF9CKTsKKworCWlmIChtdGtfZG1hX2NoYW5fcmVhZChjLCBWRkZfRU4pICE9IFZGRl9FTl9C KSB7CisJCWRldl9lcnIoY2hhbi0+ZGV2aWNlLT5kZXYsCisJCQkiY29uZmlnIGRtYSBkaXJbJWRd IGZhaWxcbiIsIGNmZy0+ZGlyZWN0aW9uKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RtYV90ZXJtaW5hdGVfYWxsKHN0cnVjdCBkbWFf Y2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgbXRrX2NoYW4gKmMgPSB0b19tdGtfZG1hX2NoYW4oY2hh bik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjLT52Yy5s b2NrLCBmbGFncyk7CisJbGlzdF9kZWxfaW5pdCgmYy0+bm9kZSk7CisJbXRrX2RtYV9zdG9wKGMp OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMtPnZjLmxvY2ssIGZsYWdzKTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IG10a19kbWFfZGV2aWNlX3BhdXNlKHN0cnVjdCBkbWFfY2hh biAqY2hhbikKK3sKKwkvKiBqdXN0IGZvciBjaGVjayBjYXBzIHBhc3MgKi8KKwlyZXR1cm4gLUVJ TlZBTDsKK30KKworc3RhdGljIGludCBtdGtfZG1hX2RldmljZV9yZXN1bWUoc3RydWN0IGRtYV9j aGFuICpjaGFuKQoreworCS8qIGp1c3QgZm9yIGNoZWNrIGNhcHMgcGFzcyAqLworCXJldHVybiAt RUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBtdGtfZG1hX2ZyZWUoc3RydWN0IG10a19kbWFkZXYg Km10a2QpCit7CisJdGFza2xldF9raWxsKCZtdGtkLT50YXNrKTsKKwl3aGlsZSAobGlzdF9lbXB0 eSgmbXRrZC0+ZGRldi5jaGFubmVscykgPT0gMCkgeworCQlzdHJ1Y3QgbXRrX2NoYW4gKmMgPSBs aXN0X2ZpcnN0X2VudHJ5KCZtdGtkLT5kZGV2LmNoYW5uZWxzLAorCQkJc3RydWN0IG10a19jaGFu LCB2Yy5jaGFuLmRldmljZV9ub2RlKTsKKworCQlsaXN0X2RlbCgmYy0+dmMuY2hhbi5kZXZpY2Vf bm9kZSk7CisJCXRhc2tsZXRfa2lsbCgmYy0+dmMudGFzayk7CisJCWRldm1fa2ZyZWUobXRrZC0+ ZGRldi5kZXYsIGMpOworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg bXRrX3VhcnRfZG1hX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDY1 NzctdWFydC1kbWEiLCB9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CitNT0RVTEVfREVWSUNF X1RBQkxFKG9mLCBtdGtfdWFydF9kbWFfbWF0Y2gpOworCitzdGF0aWMgaW50IG10a19hcGRtYV9w cm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfZG1hZGV2 ICptdGtkOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBtdGtfY2hhbiAqYzsKKwl1 bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmM7CisKKwltdGtkID0gZGV2bV9remFsbG9jKCZwZGV2LT5k ZXYsIHNpemVvZigqbXRrZCksIEdGUF9LRVJORUwpOworCWlmICghbXRrZCkKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgTVRLX0FQRE1BX0NIQU5ORUxTOyBpKyspIHsKKwkJ cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBpKTsKKwkJ aWYgKCFyZXMpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJbXRrZC0+bWVtX2Jhc2VbaV0gPSBkZXZt X2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwkJaWYgKElTX0VSUihtdGtkLT5t ZW1fYmFzZVtpXSkpCisJCQlyZXR1cm4gUFRSX0VSUihtdGtkLT5tZW1fYmFzZVtpXSk7CisJfQor CisJZm9yIChpID0gMDsgaSA8IE1US19BUERNQV9DSEFOTkVMUzsgaSsrKSB7CisJCW10a2QtPmRt YV9pcnFbaV0gPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkpOworCQlpZiAoKGludCltdGtkLT5k bWFfaXJxW2ldIDwgMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJ UlFbJWRdXG4iLCBpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJbXRrZC0+Y2xr ID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIobXRrZC0+Y2xr KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBjbG9jayBzcGVjaWZpZWRcbiIpOworCQly ZXR1cm4gUFRSX0VSUihtdGtkLT5jbGspOworCX0KKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jv b2wocGRldi0+ZGV2Lm9mX25vZGUsICJkbWEtMzNiaXRzIikpIHsKKwkJZGV2X2luZm8oJnBkZXYt PmRldiwgIlN1cHBvcnQgZG1hIDMzYml0c1xuIik7CisJCW10a2QtPnN1cHBvcnRfMzNiaXRzID0g dHJ1ZTsKKwl9CisKKwlpZiAobXRrZC0+c3VwcG9ydF8zM2JpdHMpCisJCXJjID0gZG1hX3NldF9t YXNrX2FuZF9jb2hlcmVudCgmcGRldi0+ZGV2LCBETUFfQklUX01BU0soMzMpKTsKKwllbHNlCisJ CXJjID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCgmcGRldi0+ZGV2LCBETUFfQklUX01BU0so MzIpKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwg bXRrZC0+ZGRldi5jYXBfbWFzayk7CisJbXRrZC0+ZGRldi5kZXZpY2VfYWxsb2NfY2hhbl9yZXNv dXJjZXMgPSBtdGtfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzOworCW10a2QtPmRkZXYuZGV2aWNl X2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBtdGtfZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXM7CisJbXRr ZC0+ZGRldi5kZXZpY2VfdHhfc3RhdHVzID0gbXRrX2RtYV90eF9zdGF0dXM7CisJbXRrZC0+ZGRl di5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IG10a19kbWFfaXNzdWVfcGVuZGluZzsKKwltdGtkLT5k ZGV2LmRldmljZV9wcmVwX3NsYXZlX3NnID0gbXRrX2RtYV9wcmVwX3NsYXZlX3NnOworCW10a2Qt PmRkZXYuZGV2aWNlX2NvbmZpZyA9IG10a19kbWFfc2xhdmVfY29uZmlnOworCW10a2QtPmRkZXYu ZGV2aWNlX3BhdXNlID0gbXRrX2RtYV9kZXZpY2VfcGF1c2U7CisJbXRrZC0+ZGRldi5kZXZpY2Vf cmVzdW1lID0gbXRrX2RtYV9kZXZpY2VfcmVzdW1lOworCW10a2QtPmRkZXYuZGV2aWNlX3Rlcm1p bmF0ZV9hbGwgPSBtdGtfZG1hX3Rlcm1pbmF0ZV9hbGw7CisJbXRrZC0+ZGRldi5zcmNfYWRkcl93 aWR0aHMgPSBCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURSk7CisJbXRrZC0+ZGRldi5kc3Rf YWRkcl93aWR0aHMgPSBCSVQoRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURSk7CisJbXRrZC0+ZGRl di5kaXJlY3Rpb25zID0gQklUKERNQV9ERVZfVE9fTUVNKSB8IEJJVChETUFfTUVNX1RPX0RFVik7 CisJbXRrZC0+ZGRldi5yZXNpZHVlX2dyYW51bGFyaXR5ID0gRE1BX1JFU0lEVUVfR1JBTlVMQVJJ VFlfU0VHTUVOVDsKKwltdGtkLT5kZGV2LmRldiA9ICZwZGV2LT5kZXY7CisJSU5JVF9MSVNUX0hF QUQoJm10a2QtPmRkZXYuY2hhbm5lbHMpOworCUlOSVRfTElTVF9IRUFEKCZtdGtkLT5wZW5kaW5n KTsKKworCXNwaW5fbG9ja19pbml0KCZtdGtkLT5sb2NrKTsKKwl0YXNrbGV0X2luaXQoJm10a2Qt PnRhc2ssIG10a19kbWFfc2NoZWQsICh1bnNpZ25lZCBsb25nKW10a2QpOworCisJbXRrZC0+ZG1h X3JlcXVlc3RzID0gTVRLX0FQRE1BX0RFRkFVTFRfUkVRVUVTVFM7CisJaWYgKG9mX3Byb3BlcnR5 X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCSAiZG1hLXJlcXVlc3RzIiwgJm10a2Qt PmRtYV9yZXF1ZXN0cykpIHsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwKKwkJCSAiTWlzc2luZyBk bWEtcmVxdWVzdHMgcHJvcGVydHksIHVzaW5nICV1LlxuIiwKKwkJCSBNVEtfQVBETUFfREVGQVVM VF9SRVFVRVNUUyk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1US19BUERNQV9DSEFOTkVMUzsg aSsrKSB7CisJCWMgPSBkZXZtX2t6YWxsb2MobXRrZC0+ZGRldi5kZXYsIHNpemVvZigqYyksIEdG UF9LRVJORUwpOworCQlpZiAoIWMpCisJCQlnb3RvIGVycl9ub19kbWE7CisKKwkJYy0+dmMuZGVz Y19mcmVlID0gbXRrX2RtYV9kZXNjX2ZyZWU7CisJCXZjaGFuX2luaXQoJmMtPnZjLCAmbXRrZC0+ ZGRldik7CisJCUlOSVRfTElTVF9IRUFEKCZjLT5ub2RlKTsKKwl9CisKKwlwbV9ydW50aW1lX2Vu YWJsZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3NldF9hY3RpdmUoJnBkZXYtPmRldik7CisK KwlyYyA9IGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJm10a2QtPmRkZXYpOworCWlmIChyYykK KwkJZ290byBycG1fZGlzYWJsZTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG10a2Qp OworCisJaWYgKHBkZXYtPmRldi5vZl9ub2RlKSB7CisJCS8qIERldmljZS10cmVlIERNQSBjb250 cm9sbGVyIHJlZ2lzdHJhdGlvbiAqLworCQlyYyA9IG9mX2RtYV9jb250cm9sbGVyX3JlZ2lzdGVy KHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkJb2ZfZG1hX3hsYXRlX2J5X2NoYW5faWQsCisJCQkJ CQltdGtkKTsKKwkJaWYgKHJjKQorCQkJZ290byBkbWFfcmVtb3ZlOworCX0KKworCXJldHVybiBy YzsKKworZG1hX3JlbW92ZToKKwlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJm10a2QtPmRk ZXYpOworcnBtX2Rpc2FibGU6CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworZXJy X25vX2RtYToKKwltdGtfZG1hX2ZyZWUobXRrZCk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMg aW50IG10a19hcGRtYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlz dHJ1Y3QgbXRrX2RtYWRldiAqbXRrZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJ aWYgKHBkZXYtPmRldi5vZl9ub2RlKQorCQlvZl9kbWFfY29udHJvbGxlcl9mcmVlKHBkZXYtPmRl di5vZl9ub2RlKTsKKworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50 aW1lX3B1dF9ub2lkbGUoJnBkZXYtPmRldik7CisKKwlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0 ZXIoJm10a2QtPmRkZXYpOworCisJbXRrX2RtYV9mcmVlKG10a2QpOworCisJcmV0dXJuIDA7Cit9 CisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgbXRrX2RtYV9zdXNwZW5kKHN0 cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RtYWRldiAqbXRrZCA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOworCisJaWYgKCFwbV9ydW50aW1lX3N1c3BlbmRlZChkZXYpKQorCQljbGtf ZGlzYWJsZV91bnByZXBhcmUobXRrZC0+Y2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IG10a19kbWFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCXN0 cnVjdCBtdGtfZG1hZGV2ICptdGtkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIXBt X3J1bnRpbWVfc3VzcGVuZGVkKGRldikpIHsKKwkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG10 a2QtPmNsayk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOwor fQorI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0 aWMgaW50IG10a19kbWFfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlz dHJ1Y3QgbXRrX2RtYWRldiAqbXRrZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKG10a2QtPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBtdGtfZG1hX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0 OworCXN0cnVjdCBtdGtfZG1hZGV2ICptdGtkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwly ZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUobXRrZC0+Y2xrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1BNICovCisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBtdGtfZG1hX3BtX29wcyA9IHsKKwlTRVRfU1lTVEVNX1NM RUVQX1BNX09QUyhtdGtfZG1hX3N1c3BlbmQsIG10a19kbWFfcmVzdW1lKQorCVNFVF9SVU5USU1F X1BNX09QUyhtdGtfZG1hX3J1bnRpbWVfc3VzcGVuZCwKKwkJCSAgIG10a19kbWFfcnVudGltZV9y ZXN1bWUsIE5VTEwpCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZG1h X2RyaXZlciA9IHsKKwkucHJvYmUJPSBtdGtfYXBkbWFfcHJvYmUsCisJLnJlbW92ZQk9IG10a19h cGRtYV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gS0JVSUxEX01PRE5BTUUsCisJ CS5wbQkJPSAmbXRrX2RtYV9wbV9vcHMsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0 cihtdGtfdWFydF9kbWFfbWF0Y2gpLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVy KG10a19kbWFfZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYVRlayBVQVJUIEFQ RE1BIENvbnRyb2xsZXIgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJMb25nIENoZW5nIDxsb25n LmNoZW5nQG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9kbWEvbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZG1hL21lZGlh dGVrL0tjb25maWcKaW5kZXggMjdiYWMwYi4uZDM5OTYyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9k bWEvbWVkaWF0ZWsvS2NvbmZpZworKysgYi9kcml2ZXJzL2RtYS9tZWRpYXRlay9LY29uZmlnCkBA IC0xLDQgKzEsMTUgQEAKIAorY29uZmlnIERNQV9NVEtfVUFSVAorCXRyaXN0YXRlICJNZWRpYVRl ayBTb0NzIEFQRE1BIHN1cHBvcnQgZm9yIFVBUlQiCisJZGVwZW5kcyBvbiBPRiAmJiBTRVJJQUxf ODI1MF9NVDY1NzcKKwlzZWxlY3QgRE1BX0VOR0lORQorCXNlbGVjdCBETUFfVklSVFVBTF9DSEFO TkVMUworCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBVQVJUIERNQSBlbmdpbmUgZm91bmQgb24g TWVkaWFUZWsgTVRLIFNvQ3MuCisJICB3aGVuIDgyNTAgbXRrIHVhcnQgaXMgZW5hYmxlZCwgYW5k IGlmIHlvdSB3YW50IHRvIHVzaW5nIERNQSwKKwkgIHlvdSBjYW4gZW5hYmxlIHRoZSBjb25maWcu IHRoZSBETUEgZW5naW5lIGp1c3Qgb25seSBiZSB1c2VkCisJICB3aXRoIE1lZGlhVGVrIFNvY3Mu CisKIGNvbmZpZyBNVEtfSFNETUEKIAl0cmlzdGF0ZSAiTWVkaWFUZWsgSGlnaC1TcGVlZCBETUEg Y29udHJvbGxlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9NRURJQVRFSyB8fCBDT01QSUxF X1RFU1QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL21lZGlhdGVrL01ha2VmaWxlIGIvZHJpdmVy cy9kbWEvbWVkaWF0ZWsvTWFrZWZpbGUKaW5kZXggNmU3NzhmOC4uMmYyZWZkOSAxMDA2NDQKLS0t IGEvZHJpdmVycy9kbWEvbWVkaWF0ZWsvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9kbWEvbWVkaWF0 ZWsvTWFrZWZpbGUKQEAgLTEgKzEsMiBAQAorb2JqLSQoQ09ORklHX0RNQV9NVEtfVUFSVCkgKz0g ODI1MF9tdGtfZG1hLm8KIG9iai0kKENPTkZJR19NVEtfSFNETUEpICs9IG10ay1oc2RtYS5vCg==