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: [v7,1/2] dmaengine: 8250_mtk_dma: add MediaTek uart DMA support From: Long Cheng Message-Id: <1545701209-6884-2-git-send-email-long.cheng@mediatek.com> Date: Tue, 25 Dec 2018 09:26:48 +0800 To: Vinod Koul , Randy Dunlap , Rob Herring , Mark Rutland , Ryder Lee , Sean Wang Cc: Matthias Brugger , Dan Williams , Greg Kroah-Hartman , Jiri Slaby , 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: SW4gRE1BIGVuZ2luZSBmcmFtZXdvcmssIGFkZCA4MjUwIHVhcnQgZG1hIHRvIHN1cHBvcnQgTWVk aWFUZWsgdWFydC4KSWYgTWVkaWFUZWsgdWFydCBlbmFibGVkKFNFUklBTF84MjUwX01UNjU3Nyks IGFuZCB3YW50IHRvIGltcHJvdmUKdGhlIHBlcmZvcm1hbmNlLCBjYW4gZW5hYmxlIHRoZSBmdW5j dGlvbi4KClNpZ25lZC1vZmYtYnk6IExvbmcgQ2hlbmcgPGxvbmcuY2hlbmdAbWVkaWF0ZWsuY29t PgotLS0KIGRyaXZlcnMvZG1hL21lZGlhdGVrLzgyNTBfbXRrX2RtYS5jIHwgIDY5NCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9kbWEvbWVkaWF0ZWsvS2NvbmZp ZyAgICAgICAgfCAgIDExICsKIGRyaXZlcnMvZG1hL21lZGlhdGVrL01ha2VmaWxlICAgICAgIHwg ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDcwNiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9kbWEvbWVkaWF0ZWsvODI1MF9tdGtfZG1hLmMKCmRpZmYgLS1naXQgYS9k cml2ZXJzL2RtYS9tZWRpYXRlay84MjUwX210a19kbWEuYyBiL2RyaXZlcnMvZG1hL21lZGlhdGVr LzgyNTBfbXRrX2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MDkw ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9tZWRpYXRlay84MjUwX210a19kbWEu YwpAQCAtMCwwICsxLDY5NCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK Ky8qCisgKiBNZWRpYVRlayA4MjUwIERNQSBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAy MDE4IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogTG9uZyBDaGVuZyA8bG9uZy5jaGVuZ0BtZWRp YXRlay5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4 L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8 bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lu dGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kbWEu aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3Bp bmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgv aW9wb2xsLmg+CisKKyNpbmNsdWRlICIuLi92aXJ0LWRtYS5oIgorCisjZGVmaW5lIE1US19VQVJU X0FQRE1BX0NIQU5ORUxTCQkoQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTICogMikKKworI2Rl ZmluZSBWRkZfRU5fQgkJQklUKDApCisjZGVmaW5lIFZGRl9TVE9QX0IJCUJJVCgwKQorI2RlZmlu ZSBWRkZfRkxVU0hfQgkJQklUKDApCisjZGVmaW5lIFZGRl80R19TVVBQT1JUX0IJQklUKDApCisj ZGVmaW5lIFZGRl9SWF9JTlRfRU4wX0IJQklUKDApCS8qcnggdmFsaWQgc2l6ZSA+PSAgdmZmIHRo cmUqLworI2RlZmluZSBWRkZfUlhfSU5UX0VOMV9CCUJJVCgxKQorI2RlZmluZSBWRkZfVFhfSU5U X0VOX0IJCUJJVCgwKQkvKnR4IGxlZnQgc2l6ZSA+PSB2ZmYgdGhyZSovCisjZGVmaW5lIFZGRl9X QVJNX1JTVF9CCQlCSVQoMCkKKyNkZWZpbmUgVkZGX1JYX0lOVF9GTEFHX0NMUl9CCShCSVQoMCkg fCBCSVQoMSkpCisjZGVmaW5lIFZGRl9UWF9JTlRfRkxBR19DTFJfQgkwCisjZGVmaW5lIFZGRl9T VE9QX0NMUl9CCQkwCisjZGVmaW5lIFZGRl9GTFVTSF9DTFJfQgkJMAorI2RlZmluZSBWRkZfSU5U X0VOX0NMUl9CCTAKKyNkZWZpbmUgVkZGXzRHX1NVUFBPUlRfQ0xSX0IJMAorCisvKiBpbnRlcnJ1 cHQgdHJpZ2dlciBsZXZlbCBmb3IgdHggKi8KKyNkZWZpbmUgVkZGX1RYX1RIUkUobikJCSgobikg KiA3IC8gOCkKKy8qIGludGVycnVwdCB0cmlnZ2VyIGxldmVsIGZvciByeCAqLworI2RlZmluZSBW RkZfUlhfVEhSRShuKQkJKChuKSAqIDMgLyA0KQorCisjZGVmaW5lIE1US19VQVJUX0FQRE1BX1JJ TkdfU0laRQkweGZmZmZVCisvKiBpbnZlcnQgdGhpcyBiaXQgd2hlbiB3cmFwIHJpbmcgaGVhZCBh Z2FpbiovCisjZGVmaW5lIE1US19VQVJUX0FQRE1BX1JJTkdfV1JBUAkweDEwMDAwVQorCisjZGVm aW5lIFZGRl9JTlRfRkxBRwkJMHgwMAorI2RlZmluZSBWRkZfSU5UX0VOCQkweDA0CisjZGVmaW5l IFZGRl9FTgkJCTB4MDgKKyNkZWZpbmUgVkZGX1JTVAkJCTB4MGMKKyNkZWZpbmUgVkZGX1NUT1AJ CTB4MTAKKyNkZWZpbmUgVkZGX0ZMVVNICQkweDE0CisjZGVmaW5lIFZGRl9BRERSCQkweDFjCisj ZGVmaW5lIFZGRl9MRU4JCQkweDI0CisjZGVmaW5lIFZGRl9USFJFCQkweDI4CisjZGVmaW5lIFZG Rl9XUFQJCQkweDJjCisjZGVmaW5lIFZGRl9SUFQJCQkweDMwCisvKlRYOiB0aGUgYnVmZmVyIHNp emUgSFcgY2FuIHJlYWQuIFJYOiB0aGUgYnVmZmVyIHNpemUgU1cgY2FuIHJlYWQuKi8KKyNkZWZp bmUgVkZGX1ZBTElEX1NJWkUJCTB4M2MKKy8qVFg6IHRoZSBidWZmZXIgc2l6ZSBTVyBjYW4gd3Jp dGUuIFJYOiB0aGUgYnVmZmVyIHNpemUgSFcgY2FuIHdyaXRlLiovCisjZGVmaW5lIFZGRl9MRUZU X1NJWkUJCTB4NDAKKyNkZWZpbmUgVkZGX0RFQlVHX1NUQVRVUwkweDUwCisjZGVmaW5lIFZGRl80 R19TVVBQT1JUCQkweDU0CisKK3N0cnVjdCBtdGtfdWFydF9hcGRtYWRldiB7CisJc3RydWN0IGRt YV9kZXZpY2UgZGRldjsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJYm9vbCBzdXBwb3J0XzMzYml0czsK Kwl1bnNpZ25lZCBpbnQgZG1hX2lycVtNVEtfVUFSVF9BUERNQV9DSEFOTkVMU107Cit9OworCitz dHJ1Y3QgbXRrX3VhcnRfYXBkbWFfZGVzYyB7CisJc3RydWN0IHZpcnRfZG1hX2Rlc2MgdmQ7CisK Kwl1bnNpZ25lZCBpbnQgYXZhaWxfbGVuOworfTsKKworc3RydWN0IG10a19jaGFuIHsKKwlzdHJ1 Y3QgdmlydF9kbWFfY2hhbiB2YzsKKwlzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZwljZmc7CisJdm9p ZCBfX2lvbWVtICpiYXNlOworCXN0cnVjdCBtdGtfdWFydF9hcGRtYV9kZXNjICpkZXNjOworCisJ Ym9vbCByZXF1ZXN0ZWQ7CisKKwl1bnNpZ25lZCBpbnQgcnhfc3RhdHVzOworfTsKKworc3RhdGlj IGlubGluZSBzdHJ1Y3QgbXRrX3VhcnRfYXBkbWFkZXYgKgordG9fbXRrX3VhcnRfYXBkbWFfZGV2 KHN0cnVjdCBkbWFfZGV2aWNlICpkKQoreworCXJldHVybiBjb250YWluZXJfb2YoZCwgc3RydWN0 IG10a191YXJ0X2FwZG1hZGV2LCBkZGV2KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRr X2NoYW4gKnRvX210a191YXJ0X2FwZG1hX2NoYW4oc3RydWN0IGRtYV9jaGFuICpjKQoreworCXJl dHVybiBjb250YWluZXJfb2YoYywgc3RydWN0IG10a19jaGFuLCB2Yy5jaGFuKTsKK30KKworc3Rh dGljIGlubGluZSBzdHJ1Y3QgbXRrX3VhcnRfYXBkbWFfZGVzYyAqdG9fbXRrX3VhcnRfYXBkbWFf ZGVzYworCShzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnQpCit7CisJcmV0dXJuIGNv bnRhaW5lcl9vZih0LCBzdHJ1Y3QgbXRrX3VhcnRfYXBkbWFfZGVzYywgdmQudHgpOworfQorCitz dGF0aWMgdm9pZCBtdGtfdWFydF9hcGRtYV9jaGFuX3dyaXRlKHN0cnVjdCBtdGtfY2hhbiAqYywK KwkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCXdyaXRl bCh2YWwsIGMtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CittdGtfdWFy dF9hcGRtYV9jaGFuX3JlYWQoc3RydWN0IG10a19jaGFuICpjLCB1bnNpZ25lZCBpbnQgcmVnKQor eworCXJldHVybiByZWFkbChjLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3Vh cnRfYXBkbWFfZGVzY19mcmVlKHN0cnVjdCB2aXJ0X2RtYV9kZXNjICp2ZCkKK3sKKwlzdHJ1Y3Qg ZG1hX2NoYW4gKmNoYW4gPSB2ZC0+dHguY2hhbjsKKwlzdHJ1Y3QgbXRrX2NoYW4gKmMgPSB0b19t dGtfdWFydF9hcGRtYV9jaGFuKGNoYW4pOworCisJa2ZyZWUoYy0+ZGVzYyk7CisJYy0+ZGVzYyA9 IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIG10a191YXJ0X2FwZG1hX3N0YXJ0X3R4KHN0cnVjdCBt dGtfY2hhbiAqYykKK3sKKwl1bnNpZ25lZCBpbnQgdHhjb3VudCA9IGMtPmRlc2MtPmF2YWlsX2xl bjsKKwl1bnNpZ25lZCBpbnQgbGVuLCBzZW5kLCBsZWZ0LCB3cHQsIHdyYXA7CisKKwlpZiAobXRr X3VhcnRfYXBkbWFfY2hhbl9yZWFkKGMsIFZGRl9MRUZUX1NJWkUpID09IDBVKSB7CisJCW10a191 YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywgVkZGX0lOVF9FTiwgVkZGX1RYX0lOVF9FTl9CKTsKKwl9 IGVsc2UgeworCQlsZW4gPSBtdGtfdWFydF9hcGRtYV9jaGFuX3JlYWQoYywgVkZGX0xFTik7CisK KwkJd2hpbGUgKCgobGVmdCA9IG10a191YXJ0X2FwZG1hX2NoYW5fcmVhZChjLAorCQkJCQlWRkZf TEVGVF9TSVpFKSkgPiAwVSkKKwkJCQkmJiAoYy0+ZGVzYy0+YXZhaWxfbGVuICE9IDBVKSkgewor CQkJc2VuZCA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVmdCwgYy0+ZGVzYy0+YXZhaWxfbGVuKTsK KwkJCXdwdCA9IG10a191YXJ0X2FwZG1hX2NoYW5fcmVhZChjLCBWRkZfV1BUKTsKKwkJCXdyYXAg PSB3cHQgJiBNVEtfVUFSVF9BUERNQV9SSU5HX1dSQVAgPworCQkJCQkwVSA6IE1US19VQVJUX0FQ RE1BX1JJTkdfV1JBUDsKKworCQkJaWYgKCh3cHQgJiAobGVuIC0gMVUpKSArIHNlbmQgPCBsZW4p CisJCQkJbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShjLAorCQkJCQkJVkZGX1dQVCwgd3B0ICsg c2VuZCk7CisJCQllbHNlCisJCQkJbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShjLCBWRkZfV1BU LAorCQkJCQkJICAgKCh3cHQgKyBzZW5kKSAmIChsZW4gLSAxVSkpCisJCQkJCQkgICB8IHdyYXAp OworCisJCQljLT5kZXNjLT5hdmFpbF9sZW4gLT0gc2VuZDsKKwkJfQorCisJCWlmICh0eGNvdW50 ICE9IGMtPmRlc2MtPmF2YWlsX2xlbikgeworCQkJbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShj LAorCQkJCQlWRkZfSU5UX0VOLCBWRkZfVFhfSU5UX0VOX0IpOworCQkJaWYgKG10a191YXJ0X2Fw ZG1hX2NoYW5fcmVhZChjLAorCQkJCQkJVkZGX0ZMVVNIKSA9PSAwVSkKKwkJCQltdGtfdWFydF9h cGRtYV9jaGFuX3dyaXRlKGMsCisJCQkJCQlWRkZfRkxVU0gsIFZGRl9GTFVTSF9CKTsKKwkJfQor CX0KK30KKworc3RhdGljIHZvaWQgbXRrX3VhcnRfYXBkbWFfc3RhcnRfcngoc3RydWN0IG10a19j aGFuICpjKQoreworCXN0cnVjdCBtdGtfdWFydF9hcGRtYV9kZXNjICpkID0gYy0+ZGVzYzsKKwl1 bnNpZ25lZCBpbnQgcnhfbGVuLCB3ZywgcmcsIGNvdW50OworCisJaWYgKG10a191YXJ0X2FwZG1h X2NoYW5fcmVhZChjLCBWRkZfVkFMSURfU0laRSkgPT0gMFUpCisJCXJldHVybjsKKworCWlmIChk ICYmIHZjaGFuX25leHRfZGVzYygmYy0+dmMpKSB7CisJCXJ4X2xlbiA9IG10a191YXJ0X2FwZG1h X2NoYW5fcmVhZChjLCBWRkZfTEVOKTsKKwkJcmcgPSBtdGtfdWFydF9hcGRtYV9jaGFuX3JlYWQo YywgVkZGX1JQVCk7CisJCXdnID0gbXRrX3VhcnRfYXBkbWFfY2hhbl9yZWFkKGMsIFZGRl9XUFQp OworCQljb3VudCA9ICgocmcgXiB3ZykgJiBNVEtfVUFSVF9BUERNQV9SSU5HX1dSQVApID8KKwkJ CQkoKHdnICYgTVRLX1VBUlRfQVBETUFfUklOR19TSVpFKSArCisJCQkJcnhfbGVuIC0gKHJnICYg TVRLX1VBUlRfQVBETUFfUklOR19TSVpFKSkgOgorCQkJCSgod2cgJiBNVEtfVUFSVF9BUERNQV9S SU5HX1NJWkUpIC0KKwkJCQkocmcgJiBNVEtfVUFSVF9BUERNQV9SSU5HX1NJWkUpKTsKKworCQlj LT5yeF9zdGF0dXMgPSBjb3VudDsKKwkJbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShjLCBWRkZf UlBULCB3Zyk7CisKKwkJbGlzdF9kZWwoJmQtPnZkLm5vZGUpOworCQl2Y2hhbl9jb29raWVfY29t cGxldGUoJmQtPnZkKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfdWFydF9hcGRt YV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGRtYV9jaGFu ICpjaGFuID0gKHN0cnVjdCBkbWFfY2hhbiAqKWRldl9pZDsKKwlzdHJ1Y3QgbXRrX2NoYW4gKmMg PSB0b19tdGtfdWFydF9hcGRtYV9jaGFuKGNoYW4pOworCXN0cnVjdCBtdGtfdWFydF9hcGRtYV9k ZXNjICpkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYy0+ dmMubG9jaywgZmxhZ3MpOworCXN3aXRjaCAoYy0+Y2ZnLmRpcmVjdGlvbikgeworCWNhc2UgRE1B X0RFVl9UT19NRU06CisJCW10a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywKKwkJCQlWRkZfSU5U X0ZMQUcsIFZGRl9SWF9JTlRfRkxBR19DTFJfQik7CisJCW10a191YXJ0X2FwZG1hX3N0YXJ0X3J4 KGMpOworCQlicmVhazsKKwljYXNlIERNQV9NRU1fVE9fREVWOgorCQlkID0gYy0+ZGVzYzsKKwor CQltdGtfdWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsCisJCQkJVkZGX0lOVF9GTEFHLCBWRkZfVFhf SU5UX0ZMQUdfQ0xSX0IpOworCisJCWlmIChkLT5hdmFpbF9sZW4gIT0gMFUpIHsKKwkJCW10a191 YXJ0X2FwZG1hX3N0YXJ0X3R4KGMpOworCQl9IGVsc2UgeworCQkJbGlzdF9kZWwoJmQtPnZkLm5v ZGUpOworCQkJdmNoYW5fY29va2llX2NvbXBsZXRlKCZkLT52ZCk7CisJCX0KKwkJYnJlYWs7CisJ ZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMtPnZjLmxv Y2ssIGZsYWdzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBtdGtf dWFydF9hcGRtYV9hbGxvY19jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7 CisJc3RydWN0IG10a191YXJ0X2FwZG1hZGV2ICptdGtkID0gdG9fbXRrX3VhcnRfYXBkbWFfZGV2 KGNoYW4tPmRldmljZSk7CisJc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX3VhcnRfYXBkbWFf Y2hhbihjaGFuKTsKKwl1MzIgc3RhdHVzOworCWludCByZXQgPSAtRUJVU1k7CisKKwlwbV9ydW50 aW1lX2dldF9zeW5jKG10a2QtPmRkZXYuZGV2KTsKKworCW10a191YXJ0X2FwZG1hX2NoYW5fd3Jp dGUoYywgVkZGX0FERFIsIDApOworCW10a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywgVkZGX1RI UkUsIDApOworCW10a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywgVkZGX0xFTiwgMCk7CisJbXRr X3VhcnRfYXBkbWFfY2hhbl93cml0ZShjLCBWRkZfUlNULCBWRkZfV0FSTV9SU1RfQik7CisKKwly ZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGwsCisJCQkJIGMtPmJhc2UgKyBWRkZfRU4sCisJ CQkJIHN0YXR1cywgc3RhdHVzID09IDAsIDEwLCAxMDApOworCWlmIChyZXQpIHsKKwkJZGV2X2Vy cihjLT52Yy5jaGFuLmRldmljZS0+ZGV2LAorCQkJCSJkbWEgcmVzZXQ6IGZhaWwsIHRpbWVvdXRc biIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCFjLT5yZXF1ZXN0ZWQpIHsKKwkJYy0+cmVx dWVzdGVkID0gdHJ1ZTsKKwkJcmV0ID0gcmVxdWVzdF9pcnEobXRrZC0+ZG1hX2lycVtjaGFuLT5j aGFuX2lkXSwKKwkJCQkgIG10a191YXJ0X2FwZG1hX2lycV9oYW5kbGVyLAorCQkJCSAgSVJRRl9U UklHR0VSX05PTkUsCisJCQkJICBLQlVJTERfTU9ETkFNRSwgY2hhbik7CisJCWlmIChyZXQgPCAw KSB7CisJCQlkZXZfZXJyKGNoYW4tPmRldmljZS0+ZGV2LCAiQ2FuJ3QgcmVxdWVzdCBkbWEgSVJR XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKG10a2QtPnN1cHBvcnRf MzNiaXRzKQorCQltdGtfdWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsCisJCQkJVkZGXzRHX1NVUFBP UlQsIFZGRl80R19TVVBQT1JUX0NMUl9CKTsKKworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgdm9pZCBtdGtfdWFydF9hcGRtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFf Y2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgbXRrX3VhcnRfYXBkbWFkZXYgKm10a2QgPSB0b19tdGtf dWFydF9hcGRtYV9kZXYoY2hhbi0+ZGV2aWNlKTsKKwlzdHJ1Y3QgbXRrX2NoYW4gKmMgPSB0b19t dGtfdWFydF9hcGRtYV9jaGFuKGNoYW4pOworCisJaWYgKGMtPnJlcXVlc3RlZCkgeworCQljLT5y ZXF1ZXN0ZWQgPSBmYWxzZTsKKwkJZnJlZV9pcnEobXRrZC0+ZG1hX2lycVtjaGFuLT5jaGFuX2lk XSwgY2hhbik7CisJfQorCisJdGFza2xldF9raWxsKCZjLT52Yy50YXNrKTsKKworCXZjaGFuX2Zy ZWVfY2hhbl9yZXNvdXJjZXMoJmMtPnZjKTsKKworCXBtX3J1bnRpbWVfcHV0X3N5bmMobXRrZC0+ ZGRldi5kZXYpOworfQorCitzdGF0aWMgZW51bSBkbWFfc3RhdHVzIG10a191YXJ0X2FwZG1hX3R4 X3N0YXR1cyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQkJCSBkbWFfY29va2llX3QgY29va2ll LAorCQkJCQkgc3RydWN0IGRtYV90eF9zdGF0ZSAqdHhzdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2No YW4gKmMgPSB0b19tdGtfdWFydF9hcGRtYV9jaGFuKGNoYW4pOworCWVudW0gZG1hX3N0YXR1cyBy ZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghdHhzdGF0ZSkKKwkJcmV0dXJuIERN QV9FUlJPUjsKKworCXJldCA9IGRtYV9jb29raWVfc3RhdHVzKGNoYW4sIGNvb2tpZSwgdHhzdGF0 ZSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmMtPnZjLmxvY2ssIGZsYWdzKTsKKwlpZiAocmV0ID09 IERNQV9JTl9QUk9HUkVTUykgeworCQljLT5yeF9zdGF0dXMgPSBtdGtfdWFydF9hcGRtYV9jaGFu X3JlYWQoYywgVkZGX1JQVCkKKwkJCSAgICAgJiBNVEtfVUFSVF9BUERNQV9SSU5HX1NJWkU7CisJ CWRtYV9zZXRfcmVzaWR1ZSh0eHN0YXRlLCBjLT5yeF9zdGF0dXMpOworCX0gZWxzZSBpZiAocmV0 ID09IERNQV9DT01QTEVURSAmJiBjLT5jZmcuZGlyZWN0aW9uID09IERNQV9ERVZfVE9fTUVNKSB7 CisJCWRtYV9zZXRfcmVzaWR1ZSh0eHN0YXRlLCBjLT5yeF9zdGF0dXMpOworCX0gZWxzZSB7CisJ CWRtYV9zZXRfcmVzaWR1ZSh0eHN0YXRlLCAwKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmYy0+dmMubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGRtYWVu Z2luZV9wcmVwX3NsYXZlX3NpbmdsZSB3aWxsIGNhbGwgdGhlIGZ1bmN0aW9uLiBhbmQgc2dsZW4g aXMgMS4KKyAqIDgyNTAgdWFydCB1c2luZyBvbmUgcmluZyBidWZmZXIsIGFuZCBkZWFsIHdpdGgg b25lIHNnLgorICovCitzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICptdGtf dWFydF9hcGRtYV9wcmVwX3NsYXZlX3NnCisJKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0 IHNjYXR0ZXJsaXN0ICpzZ2wsCisJdW5zaWduZWQgaW50IHNnbGVuLAllbnVtIGRtYV90cmFuc2Zl cl9kaXJlY3Rpb24gZGlyLAorCXVuc2lnbmVkIGxvbmcgdHhfZmxhZ3MsIHZvaWQgKmNvbnRleHQp Cit7CisJc3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX3VhcnRfYXBkbWFfY2hhbihjaGFuKTsK KwlzdHJ1Y3QgbXRrX3VhcnRfYXBkbWFfZGVzYyAqZDsKKworCWlmICgoZGlyICE9IERNQV9ERVZf VE9fTUVNKSAmJgorCQkoZGlyICE9IERNQV9NRU1fVE9fREVWKSkgeworCQlkZXZfZXJyKGNoYW4t PmRldmljZS0+ZGV2LCAiYmFkIGRpcmVjdGlvblxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwor CS8qIE5vdyBhbGxvY2F0ZSBhbmQgc2V0dXAgdGhlIGRlc2NyaXB0b3IgKi8KKwlkID0ga3phbGxv YyhzaXplb2YoKmQpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWQpCisJCXJldHVybiBOVUxMOworCisJ Lyogc2dsZW4gaXMgMSAqLworCWQtPmF2YWlsX2xlbiA9IHNnX2RtYV9sZW4oc2dsKTsKKworCXJl dHVybiB2Y2hhbl90eF9wcmVwKCZjLT52YywgJmQtPnZkLCB0eF9mbGFncyk7Cit9CisKK3N0YXRp YyB2b2lkIG10a191YXJ0X2FwZG1hX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFu KQoreworCXN0cnVjdCBtdGtfY2hhbiAqYyA9IHRvX210a191YXJ0X2FwZG1hX2NoYW4oY2hhbik7 CisJc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlz cGluX2xvY2tfaXJxc2F2ZSgmYy0+dmMubG9jaywgZmxhZ3MpOworCWlmIChjLT5jZmcuZGlyZWN0 aW9uID09IERNQV9ERVZfVE9fTUVNKSB7CisJCWlmICh2Y2hhbl9pc3N1ZV9wZW5kaW5nKCZjLT52 YykgJiYgIWMtPmRlc2MpIHsKKwkJCXZkID0gdmNoYW5fbmV4dF9kZXNjKCZjLT52Yyk7CisJCQlj LT5kZXNjID0gdG9fbXRrX3VhcnRfYXBkbWFfZGVzYygmdmQtPnR4KTsKKwkJCW10a191YXJ0X2Fw ZG1hX3N0YXJ0X3J4KGMpOworCQl9CisJfSBlbHNlIGlmIChjLT5jZmcuZGlyZWN0aW9uID09IERN QV9NRU1fVE9fREVWKSB7CisJCWlmICh2Y2hhbl9pc3N1ZV9wZW5kaW5nKCZjLT52YykgJiYgIWMt PmRlc2MpIHsKKwkJCXZkID0gdmNoYW5fbmV4dF9kZXNjKCZjLT52Yyk7CisJCQljLT5kZXNjID0g dG9fbXRrX3VhcnRfYXBkbWFfZGVzYygmdmQtPnR4KTsKKwkJCW10a191YXJ0X2FwZG1hX3N0YXJ0 X3R4KGMpOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMtPnZjLmxvY2ssIGZs YWdzKTsKK30KKworc3RhdGljIGludCBtdGtfdWFydF9hcGRtYV9zbGF2ZV9jb25maWcoc3RydWN0 IGRtYV9jaGFuICpjaGFuLAorCQkJCXN0cnVjdCBkbWFfc2xhdmVfY29uZmlnICpjZmcpCit7CisJ c3RydWN0IG10a19jaGFuICpjID0gdG9fbXRrX3VhcnRfYXBkbWFfY2hhbihjaGFuKTsKKwlzdHJ1 Y3QgbXRrX3VhcnRfYXBkbWFkZXYgKm10a2QgPQorCQkJCXRvX210a191YXJ0X2FwZG1hX2Rldihj LT52Yy5jaGFuLmRldmljZSk7CisKKwljLT5jZmcgPSAqY2ZnOworCisJaWYgKGNmZy0+ZGlyZWN0 aW9uID09IERNQV9ERVZfVE9fTUVNKSB7CisJCXVuc2lnbmVkIGludCByeF9sZW4gPSBjZmctPnNy Y19hZGRyX3dpZHRoICogMTAyNDsKKworCQltdGtfdWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsIFZG Rl9BRERSLCBjZmctPnNyY19hZGRyKTsKKwkJbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShjLCBW RkZfTEVOLCByeF9sZW4pOworCQltdGtfdWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsIFZGRl9USFJF LCBWRkZfUlhfVEhSRShyeF9sZW4pKTsKKwkJbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShjLAor CQkJCVZGRl9JTlRfRU4sIFZGRl9SWF9JTlRfRU4wX0IKKwkJCQl8IFZGRl9SWF9JTlRfRU4xX0Ip OworCQltdGtfdWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsIFZGRl9SUFQsIDApOworCQltdGtfdWFy dF9hcGRtYV9jaGFuX3dyaXRlKGMsCisJCQkJVkZGX0lOVF9GTEFHLCBWRkZfUlhfSU5UX0ZMQUdf Q0xSX0IpOworCQltdGtfdWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsIFZGRl9FTiwgVkZGX0VOX0Ip OworCX0gZWxzZSBpZiAoY2ZnLT5kaXJlY3Rpb24gPT0gRE1BX01FTV9UT19ERVYpCXsKKwkJdW5z aWduZWQgaW50IHR4X2xlbiA9IGNmZy0+ZHN0X2FkZHJfd2lkdGggKiAxMDI0OworCisJCW10a191 YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywgVkZGX0FERFIsIGNmZy0+ZHN0X2FkZHIpOworCQltdGtf dWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsIFZGRl9MRU4sIHR4X2xlbik7CisJCW10a191YXJ0X2Fw ZG1hX2NoYW5fd3JpdGUoYywgVkZGX1RIUkUsIFZGRl9UWF9USFJFKHR4X2xlbikpOworCQltdGtf dWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsIFZGRl9XUFQsIDApOworCQltdGtfdWFydF9hcGRtYV9j aGFuX3dyaXRlKGMsCisJCQkJVkZGX0lOVF9GTEFHLCBWRkZfVFhfSU5UX0ZMQUdfQ0xSX0IpOwor CQltdGtfdWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsIFZGRl9FTiwgVkZGX0VOX0IpOworCX0KKwor CWlmIChtdGtkLT5zdXBwb3J0XzMzYml0cykKKwkJbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShj LCBWRkZfNEdfU1VQUE9SVCwgVkZGXzRHX1NVUFBPUlRfQik7CisKKwlpZiAobXRrX3VhcnRfYXBk bWFfY2hhbl9yZWFkKGMsIFZGRl9FTikgIT0gVkZGX0VOX0IpIHsKKwkJZGV2X2VycihjaGFuLT5k ZXZpY2UtPmRldiwKKwkJCSJjb25maWcgZG1hIGRpclslZF0gZmFpbFxuIiwgY2ZnLT5kaXJlY3Rp b24pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBtdGtfdWFydF9hcGRtYV90ZXJtaW5hdGVfYWxsKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sK KwlzdHJ1Y3QgbXRrX2NoYW4gKmMgPSB0b19tdGtfdWFydF9hcGRtYV9jaGFuKGNoYW4pOworCXVu c2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHN0YXR1czsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2Nr X2lycXNhdmUoJmMtPnZjLmxvY2ssIGZsYWdzKTsKKworCW10a191YXJ0X2FwZG1hX2NoYW5fd3Jp dGUoYywgVkZGX0ZMVVNILCBWRkZfRkxVU0hfQ0xSX0IpOworCS8qIFdhaXQgZm9yIGZsdXNoICov CisJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLAorCQkJCSBjLT5iYXNlICsgVkZGX0ZM VVNILAorCQkJCSBzdGF0dXMsCisJCQkJIChzdGF0dXMgJiBWRkZfRkxVU0hfQikgIT0gVkZGX0ZM VVNIX0IsCisJCQkJIDEwLCAxMDApOworCWlmIChyZXQpCisJCWRldl9lcnIoYy0+dmMuY2hhbi5k ZXZpY2UtPmRldiwKKwkJCSJkbWEgc3RvcDogcG9sbGluZyBGTFVTSCBmYWlsLCBERUJVRz0weCV4 XG4iLAorCQkJbXRrX3VhcnRfYXBkbWFfY2hhbl9yZWFkKGMsIFZGRl9ERUJVR19TVEFUVVMpKTsK KworCS8qc2V0IHN0b3AgYXMgMSAtPiB3YWl0IHVudGlsIGVuIGlzIDAgLT4gc2V0IHN0b3AgYXMg MCovCisJbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShjLCBWRkZfU1RPUCwgVkZGX1NUT1BfQik7 CisJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KHJlYWRsLAorCQkJCSBjLT5iYXNlICsgVkZGX0VO LAorCQkJCSBzdGF0dXMsIHN0YXR1cyA9PSAwLCAxMCwgMTAwKTsKKwlpZiAocmV0KQorCQlkZXZf ZXJyKGMtPnZjLmNoYW4uZGV2aWNlLT5kZXYsCisJCQkiZG1hIHN0b3A6IHBvbGxpbmcgVkZGX0VO IGZhaWwsIERFQlVHPTB4JXhcbiIsCisJCQltdGtfdWFydF9hcGRtYV9jaGFuX3JlYWQoYywgVkZG X0RFQlVHX1NUQVRVUykpOworCisJbXRrX3VhcnRfYXBkbWFfY2hhbl93cml0ZShjLCBWRkZfU1RP UCwgVkZGX1NUT1BfQ0xSX0IpOworCW10a191YXJ0X2FwZG1hX2NoYW5fd3JpdGUoYywgVkZGX0lO VF9FTiwgVkZGX0lOVF9FTl9DTFJfQik7CisKKwlzd2l0Y2ggKGMtPmNmZy5kaXJlY3Rpb24pIHsK KwljYXNlIERNQV9ERVZfVE9fTUVNOgorCQltdGtfdWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsCisJ CQkJVkZGX0lOVF9GTEFHLCBWRkZfUlhfSU5UX0ZMQUdfQ0xSX0IpOworCQlicmVhazsKKwljYXNl IERNQV9NRU1fVE9fREVWOgorCQltdGtfdWFydF9hcGRtYV9jaGFuX3dyaXRlKGMsCisJCQkJVkZG X0lOVF9GTEFHLCBWRkZfVFhfSU5UX0ZMQUdfQ0xSX0IpOworCQlicmVhazsKKwlkZWZhdWx0Ogor CQlicmVhazsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjLT52Yy5sb2NrLCBmbGFn cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfdWFydF9hcGRtYV9kZXZpY2Vf cGF1c2Uoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCS8qIGp1c3QgZm9yIGNoZWNrIGNhcHMg cGFzcyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a191YXJ0X2FwZG1hX2Rldmlj ZV9yZXN1bWUoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCS8qIGp1c3QgZm9yIGNoZWNrIGNh cHMgcGFzcyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfdWFydF9hcGRtYV9m cmVlKHN0cnVjdCBtdGtfdWFydF9hcGRtYWRldiAqbXRrZCkKK3sKKwl3aGlsZSAobGlzdF9lbXB0 eSgmbXRrZC0+ZGRldi5jaGFubmVscykgPT0gMCkgeworCQlzdHJ1Y3QgbXRrX2NoYW4gKmMgPSBs aXN0X2ZpcnN0X2VudHJ5KCZtdGtkLT5kZGV2LmNoYW5uZWxzLAorCQkJc3RydWN0IG10a19jaGFu LCB2Yy5jaGFuLmRldmljZV9ub2RlKTsKKworCQlsaXN0X2RlbCgmYy0+dmMuY2hhbi5kZXZpY2Vf bm9kZSk7CisJCXRhc2tsZXRfa2lsbCgmYy0+dmMudGFzayk7CisJfQorfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfdWFydF9hcGRtYV9tYXRjaFtdID0geworCXsgLmNv bXBhdGlibGUgPSAibWVkaWF0ZWssbXQ2NTc3LXVhcnQtZG1hIiwgfSwKKwl7IC8qIHNlbnRpbmVs ICovIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRrX3VhcnRfYXBkbWFfbWF0Y2gp OworCitzdGF0aWMgaW50IG10a191YXJ0X2FwZG1hX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCit7CisJc3RydWN0IG10a191YXJ0X2FwZG1hZGV2ICptdGtkOworCXN0cnVjdCBy ZXNvdXJjZSAqcmVzOworCXN0cnVjdCBtdGtfY2hhbiAqYzsKKwl1bnNpZ25lZCBpbnQgaTsKKwlp bnQgcmM7CisKKwltdGtkID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqbXRrZCks IEdGUF9LRVJORUwpOworCWlmICghbXRrZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdGtkLT5j bGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihtdGtkLT5j bGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIGNsb2NrIHNwZWNpZmllZFxuIik7CisJ CXJjID0gUFRSX0VSUihtdGtkLT5jbGspOworCQlnb3RvIGVycl9ub19kbWE7CisJfQorCisJaWYg KG9mX3Byb3BlcnR5X3JlYWRfYm9vbChwZGV2LT5kZXYub2Zfbm9kZSwgImRtYS0zM2JpdHMiKSkg eworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiU3VwcG9ydCBkbWEgMzNiaXRzXG4iKTsKKwkJbXRr ZC0+c3VwcG9ydF8zM2JpdHMgPSB0cnVlOworCX0KKworCXJjID0gZG1hX3NldF9tYXNrX2FuZF9j b2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCURNQV9CSVRfTUFTSygzMiB8IG10a2QtPnN1cHBvcnRf MzNiaXRzKSk7CisJaWYgKHJjKQorCQlnb3RvIGVycl9ub19kbWE7CisKKwlkbWFfY2FwX3NldChE TUFfU0xBVkUsIG10a2QtPmRkZXYuY2FwX21hc2spOworCW10a2QtPmRkZXYuZGV2aWNlX2FsbG9j X2NoYW5fcmVzb3VyY2VzID0KKwkJCQltdGtfdWFydF9hcGRtYV9hbGxvY19jaGFuX3Jlc291cmNl czsKKwltdGtkLT5kZGV2LmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzID0KKwkJCQltdGtfdWFy dF9hcGRtYV9mcmVlX2NoYW5fcmVzb3VyY2VzOworCW10a2QtPmRkZXYuZGV2aWNlX3R4X3N0YXR1 cyA9IG10a191YXJ0X2FwZG1hX3R4X3N0YXR1czsKKwltdGtkLT5kZGV2LmRldmljZV9pc3N1ZV9w ZW5kaW5nID0gbXRrX3VhcnRfYXBkbWFfaXNzdWVfcGVuZGluZzsKKwltdGtkLT5kZGV2LmRldmlj ZV9wcmVwX3NsYXZlX3NnID0gbXRrX3VhcnRfYXBkbWFfcHJlcF9zbGF2ZV9zZzsKKwltdGtkLT5k ZGV2LmRldmljZV9jb25maWcgPSBtdGtfdWFydF9hcGRtYV9zbGF2ZV9jb25maWc7CisJbXRrZC0+ ZGRldi5kZXZpY2VfcGF1c2UgPSBtdGtfdWFydF9hcGRtYV9kZXZpY2VfcGF1c2U7CisJbXRrZC0+ ZGRldi5kZXZpY2VfcmVzdW1lID0gbXRrX3VhcnRfYXBkbWFfZGV2aWNlX3Jlc3VtZTsKKwltdGtk LT5kZGV2LmRldmljZV90ZXJtaW5hdGVfYWxsID0gbXRrX3VhcnRfYXBkbWFfdGVybWluYXRlX2Fs bDsKKwltdGtkLT5kZGV2LnNyY19hZGRyX3dpZHRocyA9IEJJVChETUFfU0xBVkVfQlVTV0lEVEhf MV9CWVRFKTsKKwltdGtkLT5kZGV2LmRzdF9hZGRyX3dpZHRocyA9IEJJVChETUFfU0xBVkVfQlVT V0lEVEhfMV9CWVRFKTsKKwltdGtkLT5kZGV2LmRpcmVjdGlvbnMgPSBCSVQoRE1BX0RFVl9UT19N RU0pIHwgQklUKERNQV9NRU1fVE9fREVWKTsKKwltdGtkLT5kZGV2LnJlc2lkdWVfZ3JhbnVsYXJp dHkgPSBETUFfUkVTSURVRV9HUkFOVUxBUklUWV9TRUdNRU5UOworCW10a2QtPmRkZXYuZGV2ID0g JnBkZXYtPmRldjsKKwlJTklUX0xJU1RfSEVBRCgmbXRrZC0+ZGRldi5jaGFubmVscyk7CisKKwlm b3IgKGkgPSAwOyBpIDwgTVRLX1VBUlRfQVBETUFfQ0hBTk5FTFM7IGkrKykgeworCQljID0gZGV2 bV9remFsbG9jKG10a2QtPmRkZXYuZGV2LCBzaXplb2YoKmMpLCBHRlBfS0VSTkVMKTsKKwkJaWYg KCFjKSB7CisJCQlyYyA9IC1FTk9ERVY7CisJCQlnb3RvIGVycl9ub19kbWE7CisJCX0KKworCQly ZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIGkpOworCQlp ZiAoIXJlcykgeworCQkJcmMgPSAtRU5PREVWOworCQkJZ290byBlcnJfbm9fZG1hOworCQl9CisK KwkJYy0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCQlp ZiAoSVNfRVJSKGMtPmJhc2UpKSB7CisJCQlyYyA9IFBUUl9FUlIoYy0+YmFzZSk7CisJCQlnb3Rv IGVycl9ub19kbWE7CisJCX0KKwkJYy0+cmVxdWVzdGVkID0gZmFsc2U7CisJCWMtPnZjLmRlc2Nf ZnJlZSA9IG10a191YXJ0X2FwZG1hX2Rlc2NfZnJlZTsKKwkJdmNoYW5faW5pdCgmYy0+dmMsICZt dGtkLT5kZGV2KTsKKworCQltdGtkLT5kbWFfaXJxW2ldID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2 LCBpKTsKKwkJaWYgKChpbnQpbXRrZC0+ZG1hX2lycVtpXSA8IDApIHsKKwkJCWRldl9lcnIoJnBk ZXYtPmRldiwgImZhaWxlZCB0byBnZXQgSVJRWyVkXVxuIiwgaSk7CisJCQlyYyA9IC1FSU5WQUw7 CisJCQlnb3RvIGVycl9ub19kbWE7CisJCX0KKwl9CisKKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRl di0+ZGV2KTsKKwlwbV9ydW50aW1lX3NldF9hY3RpdmUoJnBkZXYtPmRldik7CisKKwlyYyA9IGRt YV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJm10a2QtPmRkZXYpOworCWlmIChyYykKKwkJZ290byBy cG1fZGlzYWJsZTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG10a2QpOworCisJaWYg KHBkZXYtPmRldi5vZl9ub2RlKSB7CisJCS8qIERldmljZS10cmVlIERNQSBjb250cm9sbGVyIHJl Z2lzdHJhdGlvbiAqLworCQlyYyA9IG9mX2RtYV9jb250cm9sbGVyX3JlZ2lzdGVyKHBkZXYtPmRl di5vZl9ub2RlLAorCQkJCQkJb2ZfZG1hX3hsYXRlX2J5X2NoYW5faWQsCisJCQkJCQltdGtkKTsK KwkJaWYgKHJjKQorCQkJZ290byBkbWFfcmVtb3ZlOworCX0KKworCXJldHVybiByYzsKKworZG1h X3JlbW92ZToKKwlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJm10a2QtPmRkZXYpOworcnBt X2Rpc2FibGU6CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworZXJyX25vX2RtYToK KwltdGtfdWFydF9hcGRtYV9mcmVlKG10a2QpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGlu dCBtdGtfdWFydF9hcGRtYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK KwlzdHJ1Y3QgbXRrX3VhcnRfYXBkbWFkZXYgKm10a2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShw ZGV2KTsKKworCWlmIChwZGV2LT5kZXYub2Zfbm9kZSkKKwkJb2ZfZG1hX2NvbnRyb2xsZXJfZnJl ZShwZGV2LT5kZXYub2Zfbm9kZSk7CisKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7 CisJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwZGV2LT5kZXYpOworCisJZG1hX2FzeW5jX2Rldmlj ZV91bnJlZ2lzdGVyKCZtdGtkLT5kZGV2KTsKKwltdGtfdWFydF9hcGRtYV9mcmVlKG10a2QpOwor CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgbXRr X3VhcnRfYXBkbWFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a191 YXJ0X2FwZG1hZGV2ICptdGtkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIXBtX3J1 bnRpbWVfc3VzcGVuZGVkKGRldikpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShtdGtkLT5jbGsp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3VhcnRfYXBkbWFfcmVzdW1lKHN0 cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtdGtfdWFydF9hcGRtYWRl diAqbXRrZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFwbV9ydW50aW1lX3N1c3Bl bmRlZChkZXYpKSB7CisJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShtdGtkLT5jbGspOworCQlp ZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBD T05GSUdfUE1fU0xFRVAgKi8KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBtdGtfdWFy dF9hcGRtYV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBt dGtfdWFydF9hcGRtYWRldiAqbXRrZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKG10a2QtPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBtdGtfdWFydF9hcGRtYV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJ aW50IHJldDsKKwlzdHJ1Y3QgbXRrX3VhcnRfYXBkbWFkZXYgKm10a2QgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShtdGtkLT5jbGspOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUE0g Ki8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG10a191YXJ0X2FwZG1hX3BtX29w cyA9IHsKKwlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhtdGtfdWFydF9hcGRtYV9zdXNwZW5kLCBt dGtfdWFydF9hcGRtYV9yZXN1bWUpCisJU0VUX1JVTlRJTUVfUE1fT1BTKG10a191YXJ0X2FwZG1h X3J1bnRpbWVfc3VzcGVuZCwKKwkJCSAgIG10a191YXJ0X2FwZG1hX3J1bnRpbWVfcmVzdW1lLCBO VUxMKQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX3VhcnRfYXBkbWFf ZHJpdmVyID0geworCS5wcm9iZQk9IG10a191YXJ0X2FwZG1hX3Byb2JlLAorCS5yZW1vdmUJPSBt dGtfdWFydF9hcGRtYV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gS0JVSUxEX01P RE5BTUUsCisJCS5wbQkJPSAmbXRrX3VhcnRfYXBkbWFfcG1fb3BzLAorCQkub2ZfbWF0Y2hfdGFi bGUgPSBvZl9tYXRjaF9wdHIobXRrX3VhcnRfYXBkbWFfbWF0Y2gpLAorCX0sCit9OworCittb2R1 bGVfcGxhdGZvcm1fZHJpdmVyKG10a191YXJ0X2FwZG1hX2RyaXZlcik7CisKK01PRFVMRV9ERVND UklQVElPTigiTWVkaWFUZWsgVUFSVCBBUERNQSBDb250cm9sbGVyIERyaXZlciIpOworTU9EVUxF X0FVVEhPUigiTG9uZyBDaGVuZyA8bG9uZy5jaGVuZ0BtZWRpYXRlay5jb20+Iik7CitNT0RVTEVf TElDRU5TRSgiR1BMIHYyIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL21lZGlhdGVrL0tj b25maWcgYi9kcml2ZXJzL2RtYS9tZWRpYXRlay9LY29uZmlnCmluZGV4IDI3YmFjMGIuLjFhNTIz Yzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9tZWRpYXRlay9LY29uZmlnCisrKyBiL2RyaXZl cnMvZG1hL21lZGlhdGVrL0tjb25maWcKQEAgLTEsNCArMSwxNSBAQAogCitjb25maWcgRE1BX01U S19VQVJUCisJdHJpc3RhdGUgIk1lZGlhVGVrIFNvQ3MgQVBETUEgc3VwcG9ydCBmb3IgVUFSVCIK KwlkZXBlbmRzIG9uIE9GICYmIFNFUklBTF84MjUwX01UNjU3NworCXNlbGVjdCBETUFfRU5HSU5F CisJc2VsZWN0IERNQV9WSVJUVUFMX0NIQU5ORUxTCisJaGVscAorCSAgU3VwcG9ydCBmb3IgdGhl IFVBUlQgRE1BIGVuZ2luZSBmb3VuZCBvbiBNZWRpYVRlayBNVEsgU29Dcy4KKwkgIHdoZW4gU0VS SUFMXzgyNTBfTVQ2NTc3IGlzIGVuYWJsZWQsIGFuZCBpZiB5b3Ugd2FudCB0byB1c2UgRE1BLAor CSAgeW91IGNhbiBlbmFibGUgdGhlIGNvbmZpZy4gdGhlIERNQSBlbmdpbmUgY2FuIG9ubHkgYmUg dXNlZAorCSAgd2l0aCBNZWRpYVRlayBTb0NzLgorCiBjb25maWcgTVRLX0hTRE1BCiAJdHJpc3Rh dGUgIk1lZGlhVGVrIEhpZ2gtU3BlZWQgRE1BIGNvbnRyb2xsZXIgc3VwcG9ydCIKIAlkZXBlbmRz IG9uIEFSQ0hfTUVESUFURUsgfHwgQ09NUElMRV9URVNUCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Rt YS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hL21lZGlhdGVrL01ha2VmaWxlCmluZGV4 IDZlNzc4ZjguLjJmMmVmZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL21lZGlhdGVrL01ha2Vm aWxlCisrKyBiL2RyaXZlcnMvZG1hL21lZGlhdGVrL01ha2VmaWxlCkBAIC0xICsxLDIgQEAKK29i ai0kKENPTkZJR19ETUFfTVRLX1VBUlQpICs9IDgyNTBfbXRrX2RtYS5vCiBvYmotJChDT05GSUdf TVRLX0hTRE1BKSArPSBtdGstaHNkbWEubwo=