From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH 14/17] drm/tegra: dc: Universal plane support Date: Mon, 3 Nov 2014 10:27:45 +0100 Message-ID: <1415006868-318-14-git-send-email-thierry.reding@gmail.com> References: <1415006868-318-1-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pd0-f182.google.com (mail-pd0-f182.google.com [209.85.192.182]) by gabe.freedesktop.org (Postfix) with ESMTP id 354076E486 for ; Mon, 3 Nov 2014 01:29:07 -0800 (PST) Received: by mail-pd0-f182.google.com with SMTP id fp1so11234735pdb.13 for ; Mon, 03 Nov 2014 01:29:07 -0800 (PST) In-Reply-To: <1415006868-318-1-git-send-email-thierry.reding@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Thierry Reding Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KClRoaXMgYWxsb3dzIHRo ZSBwcmltYXJ5IHBsYW5lIGFuZCBjdXJzb3IgdG8gYmUgZXhwb3NlZCBhcyByZWd1bGFyCkRSTS9L TVMgcGxhbmVzLCB3aGljaCBpcyBhIHByZXJlcXVpc2l0ZSBmb3IgYXRvbWljIG1vZGVzZXR0aW5n IGFuZCBnaXZlcwp1c2Vyc3BhY2UgbW9yZSBmbGV4aWJpbGl0eSBvdmVyIGNvbnRyb2xsaW5nIHRo ZW0uCgpTaWduZWQtb2ZmLWJ5OiBUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgot LS0KIGRyaXZlcnMvZ3B1L2RybS90ZWdyYS9kYy5jIHwgNDg4ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDMzMSBpbnNlcnRpb25z KCspLCAxNTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3Jh L2RjLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvZGMuYwppbmRleCAxM2Y4Y2MwZTUzMjQuLjc5 MWNkZDNjOTVjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RjLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RjLmMKQEAgLTMzMiwxMSArMzMyLDI1NSBAQCBzdGF0aWMg aW50IHRlZ3JhX2RjX3NldHVwX3dpbmRvdyhzdHJ1Y3QgdGVncmFfZGMgKmRjLCB1bnNpZ25lZCBp bnQgaW5kZXgsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGVncmFfcGxhbmVfdXBkYXRl KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkgICAg ICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNydGNfeCwKLQkJCSAgICAgIGludCBj cnRjX3ksIHVuc2lnbmVkIGludCBjcnRjX3csCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgY3J0Y19o LCB1aW50MzJfdCBzcmNfeCwKLQkJCSAgICAgIHVpbnQzMl90IHNyY195LCB1aW50MzJfdCBzcmNf dywgdWludDMyX3Qgc3JjX2gpCitzdGF0aWMgaW50IHRlZ3JhX3dpbmRvd19wbGFuZV9kaXNhYmxl KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVjdCB0ZWdyYV9kYyAqZGMgPSB0b190 ZWdyYV9kYyhwbGFuZS0+Y3J0Yyk7CisJc3RydWN0IHRlZ3JhX3BsYW5lICpwID0gdG9fdGVncmFf cGxhbmUocGxhbmUpOworCXUzMiB2YWx1ZTsKKworCWlmICghcGxhbmUtPmNydGMpCisJCXJldHVy biAwOworCisJdmFsdWUgPSBXSU5ET1dfQV9TRUxFQ1QgPDwgcC0+aW5kZXg7CisJdGVncmFfZGNf d3JpdGVsKGRjLCB2YWx1ZSwgRENfQ01EX0RJU1BMQVlfV0lORE9XX0hFQURFUik7CisKKwl2YWx1 ZSA9IHRlZ3JhX2RjX3JlYWRsKGRjLCBEQ19XSU5fV0lOX09QVElPTlMpOworCXZhbHVlICY9IH5X SU5fRU5BQkxFOworCXRlZ3JhX2RjX3dyaXRlbChkYywgdmFsdWUsIERDX1dJTl9XSU5fT1BUSU9O Uyk7CisKKwl0ZWdyYV9kY193aW5kb3dfY29tbWl0KGRjLCBwLT5pbmRleCk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQgdGVncmFfcGxhbmVfZGVzdHJveShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSkKK3sKKwlzdHJ1Y3QgdGVncmFfcGxhbmUgKnAgPSB0b190ZWdyYV9wbGFuZShwbGFu ZSk7CisKKwlkcm1fcGxhbmVfY2xlYW51cChwbGFuZSk7CisJa2ZyZWUocCk7Cit9CisKK3N0YXRp YyBjb25zdCB1MzIgdGVncmFfcHJpbWFyeV9wbGFuZV9mb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1B VF9YQkdSODg4OCwKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAorCURSTV9GT1JNQVRfUkdCNTY1LAor fTsKKworc3RhdGljIGludCB0ZWdyYV9wcmltYXJ5X3BsYW5lX3VwZGF0ZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAg c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIGludCBjcnRjX3gsCisJCQkJICAgICAgaW50IGNy dGNfeSwgdW5zaWduZWQgaW50IGNydGNfdywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgY3J0Y19o LCB1aW50MzJfdCBzcmNfeCwKKwkJCQkgICAgICB1aW50MzJfdCBzcmNfeSwgdWludDMyX3Qgc3Jj X3csCisJCQkJICAgICAgdWludDMyX3Qgc3JjX2gpCit7CisJc3RydWN0IHRlZ3JhX2JvICpibyA9 IHRlZ3JhX2ZiX2dldF9wbGFuZShmYiwgMCk7CisJc3RydWN0IHRlZ3JhX3BsYW5lICpwID0gdG9f dGVncmFfcGxhbmUocGxhbmUpOworCXN0cnVjdCB0ZWdyYV9kYyAqZGMgPSB0b190ZWdyYV9kYyhj cnRjKTsKKwlzdHJ1Y3QgdGVncmFfZGNfd2luZG93IHdpbmRvdzsKKwlpbnQgZXJyOworCisJbWVt c2V0KCZ3aW5kb3csIDAsIHNpemVvZih3aW5kb3cpKTsKKwl3aW5kb3cuc3JjLnggPSBzcmNfeCA+ PiAxNjsKKwl3aW5kb3cuc3JjLnkgPSBzcmNfeSA+PiAxNjsKKwl3aW5kb3cuc3JjLncgPSBzcmNf dyA+PiAxNjsKKwl3aW5kb3cuc3JjLmggPSBzcmNfaCA+PiAxNjsKKwl3aW5kb3cuZHN0LnggPSBj cnRjX3g7CisJd2luZG93LmRzdC55ID0gY3J0Y195OworCXdpbmRvdy5kc3QudyA9IGNydGNfdzsK Kwl3aW5kb3cuZHN0LmggPSBjcnRjX2g7CisJd2luZG93LmZvcm1hdCA9IHRlZ3JhX2RjX2Zvcm1h dChmYi0+cGl4ZWxfZm9ybWF0LCAmd2luZG93LnN3YXApOworCXdpbmRvdy5iaXRzX3Blcl9waXhl bCA9IGZiLT5iaXRzX3Blcl9waXhlbDsKKwl3aW5kb3cuYm90dG9tX3VwID0gdGVncmFfZmJfaXNf Ym90dG9tX3VwKGZiKTsKKworCWVyciA9IHRlZ3JhX2ZiX2dldF90aWxpbmcoZmIsICZ3aW5kb3cu dGlsaW5nKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXdpbmRvdy5iYXNlWzBd ID0gYm8tPnBhZGRyICsgZmItPm9mZnNldHNbMF07CisJd2luZG93LnN0cmlkZVswXSA9IGZiLT5w aXRjaGVzWzBdOworCisJZXJyID0gdGVncmFfZGNfc2V0dXBfd2luZG93KGRjLCBwLT5pbmRleCwg JndpbmRvdyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQgdGVncmFfcHJpbWFyeV9wbGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lKQoreworCXRlZ3JhX3dpbmRvd19wbGFuZV9kaXNhYmxlKHBsYW5lKTsKKwl0ZWdy YV9wbGFuZV9kZXN0cm95KHBsYW5lKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxh bmVfZnVuY3MgdGVncmFfcHJpbWFyeV9wbGFuZV9mdW5jcyA9IHsKKwkudXBkYXRlX3BsYW5lID0g dGVncmFfcHJpbWFyeV9wbGFuZV91cGRhdGUsCisJLmRpc2FibGVfcGxhbmUgPSB0ZWdyYV93aW5k b3dfcGxhbmVfZGlzYWJsZSwKKwkuZGVzdHJveSA9IHRlZ3JhX3ByaW1hcnlfcGxhbmVfZGVzdHJv eSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lICp0ZWdyYV9kY19wcmltYXJ5X3BsYW5l X2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAorCQkJCQkJICAgICAgIHN0cnVjdCB0ZWdy YV9kYyAqZGMpCit7CisJc3RydWN0IHRlZ3JhX3BsYW5lICpwbGFuZTsKKwl1bnNpZ25lZCBpbnQg bnVtX2Zvcm1hdHM7CisJY29uc3QgdTMyICpmb3JtYXRzOworCWludCBlcnI7CisKKwlwbGFuZSA9 IGt6YWxsb2Moc2l6ZW9mKCpwbGFuZSksIEdGUF9LRVJORUwpOworCWlmICghcGxhbmUpCisJCXJl dHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKHRlZ3Jh X3ByaW1hcnlfcGxhbmVfZm9ybWF0cyk7CisJZm9ybWF0cyA9IHRlZ3JhX3ByaW1hcnlfcGxhbmVf Zm9ybWF0czsKKworCWVyciA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdChkcm0sICZwbGFuZS0+ YmFzZSwgMSA8PCBkYy0+cGlwZSwKKwkJCQkgICAgICAgJnRlZ3JhX3ByaW1hcnlfcGxhbmVfZnVu Y3MsIGZvcm1hdHMsCisJCQkJICAgICAgIG51bV9mb3JtYXRzLCBEUk1fUExBTkVfVFlQRV9QUklN QVJZKTsKKwlpZiAoZXJyIDwgMCkgeworCQlrZnJlZShwbGFuZSk7CisJCXJldHVybiBFUlJfUFRS KGVycik7CisJfQorCisJcmV0dXJuICZwbGFuZS0+YmFzZTsKK30KKworc3RhdGljIGNvbnN0IHUz MiB0ZWdyYV9jdXJzb3JfcGxhbmVfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfUkdCQTg4ODgs Cit9OworCitzdGF0aWMgaW50IHRlZ3JhX2N1cnNvcl9wbGFuZV91cGRhdGUoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNydGNfeCwKKwkJCQkgICAgIGludCBjcnRj X3ksIHVuc2lnbmVkIGludCBjcnRjX3csCisJCQkJICAgICB1bnNpZ25lZCBpbnQgY3J0Y19oLCB1 aW50MzJfdCBzcmNfeCwKKwkJCQkgICAgIHVpbnQzMl90IHNyY195LCB1aW50MzJfdCBzcmNfdywK KwkJCQkgICAgIHVpbnQzMl90IHNyY19oKQoreworCXN0cnVjdCB0ZWdyYV9ibyAqYm8gPSB0ZWdy YV9mYl9nZXRfcGxhbmUoZmIsIDApOworCXN0cnVjdCB0ZWdyYV9kYyAqZGMgPSB0b190ZWdyYV9k YyhjcnRjKTsKKwl1MzIgdmFsdWUgPSBDVVJTT1JfQ0xJUF9ESVNQTEFZOworCisJLyogc2NhbGlu ZyBub3Qgc3VwcG9ydGVkIGZvciBjdXJzb3IgKi8KKwlpZiAoKHNyY193ID4+IDE2ICE9IGNydGNf dykgfHwgKHNyY19oID4+IDE2ICE9IGNydGNfaCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyog b25seSBzcXVhcmUgY3Vyc29ycyBzdXBwb3J0ZWQgKi8KKwlpZiAoc3JjX3cgIT0gc3JjX2gpCisJ CXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChjcnRjX3cpIHsKKwljYXNlIDMyOgorCQl2YWx1 ZSB8PSBDVVJTT1JfU0laRV8zMngzMjsKKwkJYnJlYWs7CisKKwljYXNlIDY0OgorCQl2YWx1ZSB8 PSBDVVJTT1JfU0laRV82NHg2NDsKKwkJYnJlYWs7CisKKwljYXNlIDEyODoKKwkJdmFsdWUgfD0g Q1VSU09SX1NJWkVfMTI4eDEyODsKKwkJYnJlYWs7CisKKwljYXNlIDI1NjoKKwkJdmFsdWUgfD0g Q1VSU09SX1NJWkVfMjU2eDI1NjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwl2YWx1ZSB8PSAoYm8tPnBhZGRyID4+IDEwKSAmIDB4M2ZmZmZmOworCXRl Z3JhX2RjX3dyaXRlbChkYywgdmFsdWUsIERDX0RJU1BfQ1VSU09SX1NUQVJUX0FERFIpOworCisj aWZkZWYgQ09ORklHX0FSQ0hfRE1BX0FERFJfVF82NEJJVAorCXZhbHVlID0gKGJvLT5wYWRkciA+ PiAzMikgJiAweDM7CisJdGVncmFfZGNfd3JpdGVsKGRjLCB2YWx1ZSwgRENfRElTUF9DVVJTT1Jf U1RBUlRfQUREUl9ISSk7CisjZW5kaWYKKworCS8qIGVuYWJsZSBjdXJzb3IgYW5kIHNldCBibGVu ZCBtb2RlICovCisJdmFsdWUgPSB0ZWdyYV9kY19yZWFkbChkYywgRENfRElTUF9ESVNQX1dJTl9P UFRJT05TKTsKKwl2YWx1ZSB8PSBDVVJTT1JfRU5BQkxFOworCXRlZ3JhX2RjX3dyaXRlbChkYywg dmFsdWUsIERDX0RJU1BfRElTUF9XSU5fT1BUSU9OUyk7CisKKwl2YWx1ZSA9IHRlZ3JhX2RjX3Jl YWRsKGRjLCBEQ19ESVNQX0JMRU5EX0NVUlNPUl9DT05UUk9MKTsKKwl2YWx1ZSAmPSB+Q1VSU09S X0RTVF9CTEVORF9NQVNLOworCXZhbHVlICY9IH5DVVJTT1JfU1JDX0JMRU5EX01BU0s7CisJdmFs dWUgfD0gQ1VSU09SX01PREVfTk9STUFMOworCXZhbHVlIHw9IENVUlNPUl9EU1RfQkxFTkRfTkVH X0sxX1RJTUVTX1NSQzsKKwl2YWx1ZSB8PSBDVVJTT1JfU1JDX0JMRU5EX0sxX1RJTUVTX1NSQzsK Kwl2YWx1ZSB8PSBDVVJTT1JfQUxQSEE7CisJdGVncmFfZGNfd3JpdGVsKGRjLCB2YWx1ZSwgRENf RElTUF9CTEVORF9DVVJTT1JfQ09OVFJPTCk7CisKKwkvKiBwb3NpdGlvbiB0aGUgY3Vyc29yICov CisJdmFsdWUgPSAoY3J0Y195ICYgMHgzZmZmKSA8PCAxNiB8IChjcnRjX3ggJiAweDNmZmYpOwor CXRlZ3JhX2RjX3dyaXRlbChkYywgdmFsdWUsIERDX0RJU1BfQ1VSU09SX1BPU0lUSU9OKTsKKwor CS8qIGFwcGx5IGNoYW5nZXMgKi8KKwl0ZWdyYV9kY19jdXJzb3JfY29tbWl0KGRjKTsKKwl0ZWdy YV9kY19jb21taXQoZGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfY3Vy c29yX3BsYW5lX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJc3RydWN0IHRl Z3JhX2RjICpkYyA9IHRvX3RlZ3JhX2RjKHBsYW5lLT5jcnRjKTsKKwl1MzIgdmFsdWU7CisKKwlp ZiAoIXBsYW5lLT5jcnRjKQorCQlyZXR1cm4gMDsKKworCXZhbHVlID0gdGVncmFfZGNfcmVhZGwo ZGMsIERDX0RJU1BfRElTUF9XSU5fT1BUSU9OUyk7CisJdmFsdWUgJj0gfkNVUlNPUl9FTkFCTEU7 CisJdGVncmFfZGNfd3JpdGVsKGRjLCB2YWx1ZSwgRENfRElTUF9ESVNQX1dJTl9PUFRJT05TKTsK KworCXRlZ3JhX2RjX2N1cnNvcl9jb21taXQoZGMpOworCXRlZ3JhX2RjX2NvbW1pdChkYyk7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgdGVn cmFfY3Vyc29yX3BsYW5lX2Z1bmNzID0geworCS51cGRhdGVfcGxhbmUgPSB0ZWdyYV9jdXJzb3Jf cGxhbmVfdXBkYXRlLAorCS5kaXNhYmxlX3BsYW5lID0gdGVncmFfY3Vyc29yX3BsYW5lX2Rpc2Fi bGUsCisJLmRlc3Ryb3kgPSB0ZWdyYV9wbGFuZV9kZXN0cm95LAorfTsKKworc3RhdGljIHN0cnVj dCBkcm1fcGxhbmUgKnRlZ3JhX2RjX2N1cnNvcl9wbGFuZV9jcmVhdGUoc3RydWN0IGRybV9kZXZp Y2UgKmRybSwKKwkJCQkJCSAgICAgIHN0cnVjdCB0ZWdyYV9kYyAqZGMpCit7CisJc3RydWN0IHRl Z3JhX3BsYW5lICpwbGFuZTsKKwl1bnNpZ25lZCBpbnQgbnVtX2Zvcm1hdHM7CisJY29uc3QgdTMy ICpmb3JtYXRzOworCWludCBlcnI7CisKKwlwbGFuZSA9IGt6YWxsb2Moc2l6ZW9mKCpwbGFuZSks IEdGUF9LRVJORUwpOworCWlmICghcGxhbmUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwor CisJbnVtX2Zvcm1hdHMgPSBBUlJBWV9TSVpFKHRlZ3JhX2N1cnNvcl9wbGFuZV9mb3JtYXRzKTsK Kwlmb3JtYXRzID0gdGVncmFfY3Vyc29yX3BsYW5lX2Zvcm1hdHM7CisKKwllcnIgPSBkcm1fdW5p dmVyc2FsX3BsYW5lX2luaXQoZHJtLCAmcGxhbmUtPmJhc2UsIDEgPDwgZGMtPnBpcGUsCisJCQkJ ICAgICAgICZ0ZWdyYV9jdXJzb3JfcGxhbmVfZnVuY3MsIGZvcm1hdHMsCisJCQkJICAgICAgIG51 bV9mb3JtYXRzLCBEUk1fUExBTkVfVFlQRV9DVVJTT1IpOworCWlmIChlcnIgPCAwKSB7CisJCWtm cmVlKHBsYW5lKTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwl9CisKKwlyZXR1cm4gJnBsYW5l LT5iYXNlOworfQorCitzdGF0aWMgaW50IHRlZ3JhX292ZXJsYXlfcGxhbmVfdXBkYXRlKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJ CQkgICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwgaW50IGNydGNfeCwKKwkJCQkgICAg ICBpbnQgY3J0Y195LCB1bnNpZ25lZCBpbnQgY3J0Y193LAorCQkJCSAgICAgIHVuc2lnbmVkIGlu dCBjcnRjX2gsIHVpbnQzMl90IHNyY194LAorCQkJCSAgICAgIHVpbnQzMl90IHNyY195LCB1aW50 MzJfdCBzcmNfdywKKwkJCQkgICAgICB1aW50MzJfdCBzcmNfaCkKIHsKIAlzdHJ1Y3QgdGVncmFf cGxhbmUgKnAgPSB0b190ZWdyYV9wbGFuZShwbGFuZSk7CiAJc3RydWN0IHRlZ3JhX2RjICpkYyA9 IHRvX3RlZ3JhX2RjKGNydGMpOwpAQCAtMzgyLDQzICs2MjYsMTkgQEAgc3RhdGljIGludCB0ZWdy YV9wbGFuZV91cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHN0cnVjdCBkcm1fY3J0YyAq Y3J0YywKIAlyZXR1cm4gdGVncmFfZGNfc2V0dXBfd2luZG93KGRjLCBwLT5pbmRleCwgJndpbmRv dyk7CiB9CiAKLXN0YXRpYyBpbnQgdGVncmFfcGxhbmVfZGlzYWJsZShzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSkKLXsKLQlzdHJ1Y3QgdGVncmFfZGMgKmRjID0gdG9fdGVncmFfZGMocGxhbmUtPmNy dGMpOwotCXN0cnVjdCB0ZWdyYV9wbGFuZSAqcCA9IHRvX3RlZ3JhX3BsYW5lKHBsYW5lKTsKLQl1 bnNpZ25lZCBsb25nIHZhbHVlOwotCi0JaWYgKCFwbGFuZS0+Y3J0YykKLQkJcmV0dXJuIDA7Ci0K LQl2YWx1ZSA9IFdJTkRPV19BX1NFTEVDVCA8PCBwLT5pbmRleDsKLQl0ZWdyYV9kY193cml0ZWwo ZGMsIHZhbHVlLCBEQ19DTURfRElTUExBWV9XSU5ET1dfSEVBREVSKTsKLQotCXZhbHVlID0gdGVn cmFfZGNfcmVhZGwoZGMsIERDX1dJTl9XSU5fT1BUSU9OUyk7Ci0JdmFsdWUgJj0gfldJTl9FTkFC TEU7Ci0JdGVncmFfZGNfd3JpdGVsKGRjLCB2YWx1ZSwgRENfV0lOX1dJTl9PUFRJT05TKTsKLQot CXRlZ3JhX2RjX3dpbmRvd19jb21taXQoZGMsIHAtPmluZGV4KTsKLQotCXJldHVybiAwOwotfQot Ci1zdGF0aWMgdm9pZCB0ZWdyYV9wbGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l KQorc3RhdGljIHZvaWQgdGVncmFfb3ZlcmxheV9wbGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lKQogewotCXN0cnVjdCB0ZWdyYV9wbGFuZSAqcCA9IHRvX3RlZ3JhX3BsYW5lKHBs YW5lKTsKLQotCXRlZ3JhX3BsYW5lX2Rpc2FibGUocGxhbmUpOwotCWRybV9wbGFuZV9jbGVhbnVw KHBsYW5lKTsKLQlrZnJlZShwKTsKKwl0ZWdyYV93aW5kb3dfcGxhbmVfZGlzYWJsZShwbGFuZSk7 CisJdGVncmFfcGxhbmVfZGVzdHJveShwbGFuZSk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX3BsYW5lX2Z1bmNzIHRlZ3JhX3BsYW5lX2Z1bmNzID0gewotCS51cGRhdGVfcGxhbmUgPSB0 ZWdyYV9wbGFuZV91cGRhdGUsCi0JLmRpc2FibGVfcGxhbmUgPSB0ZWdyYV9wbGFuZV9kaXNhYmxl LAotCS5kZXN0cm95ID0gdGVncmFfcGxhbmVfZGVzdHJveSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX3BsYW5lX2Z1bmNzIHRlZ3JhX292ZXJsYXlfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9w bGFuZSA9IHRlZ3JhX292ZXJsYXlfcGxhbmVfdXBkYXRlLAorCS5kaXNhYmxlX3BsYW5lID0gdGVn cmFfd2luZG93X3BsYW5lX2Rpc2FibGUsCisJLmRlc3Ryb3kgPSB0ZWdyYV9vdmVybGF5X3BsYW5l X2Rlc3Ryb3ksCiB9OwogCi1zdGF0aWMgY29uc3QgdWludDMyX3QgcGxhbmVfZm9ybWF0c1tdID0g eworc3RhdGljIGNvbnN0IHVpbnQzMl90IHRlZ3JhX292ZXJsYXlfcGxhbmVfZm9ybWF0c1tdID0g ewogCURSTV9GT1JNQVRfWEJHUjg4ODgsCiAJRFJNX0ZPUk1BVF9YUkdCODg4OCwKIAlEUk1fRk9S TUFUX1JHQjU2NSwKQEAgLTQyOCwyNyArNjQ4LDQ0IEBAIHN0YXRpYyBjb25zdCB1aW50MzJfdCBw bGFuZV9mb3JtYXRzW10gPSB7CiAJRFJNX0ZPUk1BVF9ZVVY0MjIsCiB9OwogCi1zdGF0aWMgaW50 IHRlZ3JhX2RjX2FkZF9wbGFuZXMoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHRlZ3Jh X2RjICpkYykKK3N0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lICp0ZWdyYV9kY19vdmVybGF5X3BsYW5l X2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAorCQkJCQkJICAgICAgIHN0cnVjdCB0ZWdy YV9kYyAqZGMsCisJCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGluZGV4KQogewotCXVuc2lnbmVk IGludCBpOwotCWludCBlcnIgPSAwOworCXN0cnVjdCB0ZWdyYV9wbGFuZSAqcGxhbmU7CisJdW5z aWduZWQgaW50IG51bV9mb3JtYXRzOworCWNvbnN0IHUzMiAqZm9ybWF0czsKKwlpbnQgZXJyOwog Ci0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQlzdHJ1Y3QgdGVncmFfcGxhbmUgKnBsYW5l OworCXBsYW5lID0ga3phbGxvYyhzaXplb2YoKnBsYW5lKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFw bGFuZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQkJcGxhbmUgPSBremFsbG9jKHNp emVvZigqcGxhbmUpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwbGFuZSkKLQkJCXJldHVybiAtRU5P TUVNOworCXBsYW5lLT5pbmRleCA9IGluZGV4OwogCi0JCXBsYW5lLT5pbmRleCA9IDEgKyBpOwor CW51bV9mb3JtYXRzID0gQVJSQVlfU0laRSh0ZWdyYV9vdmVybGF5X3BsYW5lX2Zvcm1hdHMpOwor CWZvcm1hdHMgPSB0ZWdyYV9vdmVybGF5X3BsYW5lX2Zvcm1hdHM7CiAKLQkJZXJyID0gZHJtX3Bs YW5lX2luaXQoZHJtLCAmcGxhbmUtPmJhc2UsIDEgPDwgZGMtPnBpcGUsCi0JCQkJICAgICAmdGVn cmFfcGxhbmVfZnVuY3MsIHBsYW5lX2Zvcm1hdHMsCi0JCQkJICAgICBBUlJBWV9TSVpFKHBsYW5l X2Zvcm1hdHMpLCBmYWxzZSk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlrZnJlZShwbGFuZSk7Ci0J CQlyZXR1cm4gZXJyOwotCQl9CisJZXJyID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRybSwg JnBsYW5lLT5iYXNlLCAxIDw8IGRjLT5waXBlLAorCQkJCSAgICAgICAmdGVncmFfb3ZlcmxheV9w bGFuZV9mdW5jcywgZm9ybWF0cywKKwkJCQkgICAgICAgbnVtX2Zvcm1hdHMsIERSTV9QTEFORV9U WVBFX09WRVJMQVkpOworCWlmIChlcnIgPCAwKSB7CisJCWtmcmVlKHBsYW5lKTsKKwkJcmV0dXJu IEVSUl9QVFIoZXJyKTsKKwl9CisKKwlyZXR1cm4gJnBsYW5lLT5iYXNlOworfQorCitzdGF0aWMg aW50IHRlZ3JhX2RjX2FkZF9wbGFuZXMoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHRl Z3JhX2RjICpkYykKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKKwl1bnNpZ25lZCBpbnQg aTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJcGxhbmUgPSB0ZWdyYV9kY19vdmVy bGF5X3BsYW5lX2NyZWF0ZShkcm0sIGRjLCAxICsgaSk7CisJCWlmIChJU19FUlIocGxhbmUpKQor CQkJcmV0dXJuIFBUUl9FUlIocGxhbmUpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNTY4LDEwMyAr ODA1LDYgQEAgdm9pZCB0ZWdyYV9kY19kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgdGVncmFfZGMgKmRj KQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRjLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRp YyBpbnQgdGVncmFfZGNfY3Vyc29yX3NldDIoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGUsCi0JCQkJdWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCB3aWR0aCwKLQkJ CQl1aW50MzJfdCBoZWlnaHQsIGludDMyX3QgaG90X3gsIGludDMyX3QgaG90X3kpCi17Ci0JdW5z aWduZWQgbG9uZyB2YWx1ZSA9IENVUlNPUl9DTElQX0RJU1BMQVk7Ci0Jc3RydWN0IHRlZ3JhX2Rj ICpkYyA9IHRvX3RlZ3JhX2RjKGNydGMpOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOwot CXN0cnVjdCB0ZWdyYV9ibyAqYm8gPSBOVUxMOwotCi0JaWYgKCFkYy0+c29jLT5zdXBwb3J0c19j dXJzb3IpCi0JCXJldHVybiAtRU5YSU87Ci0KLQlpZiAod2lkdGggIT0gaGVpZ2h0KQotCQlyZXR1 cm4gLUVJTlZBTDsKLQotCXN3aXRjaCAod2lkdGgpIHsKLQljYXNlIDMyOgotCQl2YWx1ZSB8PSBD VVJTT1JfU0laRV8zMngzMjsKLQkJYnJlYWs7Ci0KLQljYXNlIDY0OgotCQl2YWx1ZSB8PSBDVVJT T1JfU0laRV82NHg2NDsKLQkJYnJlYWs7Ci0KLQljYXNlIDEyODoKLQkJdmFsdWUgfD0gQ1VSU09S X1NJWkVfMTI4eDEyODsKLQotCWNhc2UgMjU2OgotCQl2YWx1ZSB8PSBDVVJTT1JfU0laRV8yNTZ4 MjU2OwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlm IChoYW5kbGUpIHsKLQkJZ2VtID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGNydGMtPmRldiwgZmls ZSwgaGFuZGxlKTsKLQkJaWYgKCFnZW0pCi0JCQlyZXR1cm4gLUVOT0VOVDsKLQotCQlibyA9IHRv X3RlZ3JhX2JvKGdlbSk7Ci0JfQotCi0JaWYgKGJvKSB7Ci0JCXVuc2lnbmVkIGxvbmcgYWRkciA9 IChiby0+cGFkZHIgJiAweGZmZmZmYzAwKSA+PiAxMDsKLSNpZmRlZiBDT05GSUdfQVJDSF9ETUFf QUREUl9UXzY0QklUCi0JCXVuc2lnbmVkIGxvbmcgaGlnaCA9IChiby0+cGFkZHIgJiAweGZmZmZm ZmZjKSA+PiAzMjsKLSNlbmRpZgotCi0JCXRlZ3JhX2RjX3dyaXRlbChkYywgdmFsdWUgfCBhZGRy LCBEQ19ESVNQX0NVUlNPUl9TVEFSVF9BRERSKTsKLQotI2lmZGVmIENPTkZJR19BUkNIX0RNQV9B RERSX1RfNjRCSVQKLQkJdGVncmFfZGNfd3JpdGVsKGRjLCBoaWdoLCBEQ19ESVNQX0NVUlNPUl9T VEFSVF9BRERSX0hJKTsKLSNlbmRpZgotCi0JCXZhbHVlID0gdGVncmFfZGNfcmVhZGwoZGMsIERD X0RJU1BfRElTUF9XSU5fT1BUSU9OUyk7Ci0JCXZhbHVlIHw9IENVUlNPUl9FTkFCTEU7Ci0JCXRl Z3JhX2RjX3dyaXRlbChkYywgdmFsdWUsIERDX0RJU1BfRElTUF9XSU5fT1BUSU9OUyk7Ci0KLQkJ dmFsdWUgPSB0ZWdyYV9kY19yZWFkbChkYywgRENfRElTUF9CTEVORF9DVVJTT1JfQ09OVFJPTCk7 Ci0JCXZhbHVlICY9IH5DVVJTT1JfRFNUX0JMRU5EX01BU0s7Ci0JCXZhbHVlICY9IH5DVVJTT1Jf U1JDX0JMRU5EX01BU0s7Ci0JCXZhbHVlIHw9IENVUlNPUl9NT0RFX05PUk1BTDsKLQkJdmFsdWUg fD0gQ1VSU09SX0RTVF9CTEVORF9ORUdfSzFfVElNRVNfU1JDOwotCQl2YWx1ZSB8PSBDVVJTT1Jf U1JDX0JMRU5EX0sxX1RJTUVTX1NSQzsKLQkJdmFsdWUgfD0gQ1VSU09SX0FMUEhBOwotCQl0ZWdy YV9kY193cml0ZWwoZGMsIHZhbHVlLCBEQ19ESVNQX0JMRU5EX0NVUlNPUl9DT05UUk9MKTsKLQl9 IGVsc2UgewotCQl2YWx1ZSA9IHRlZ3JhX2RjX3JlYWRsKGRjLCBEQ19ESVNQX0RJU1BfV0lOX09Q VElPTlMpOwotCQl2YWx1ZSAmPSB+Q1VSU09SX0VOQUJMRTsKLQkJdGVncmFfZGNfd3JpdGVsKGRj LCB2YWx1ZSwgRENfRElTUF9ESVNQX1dJTl9PUFRJT05TKTsKLQl9Ci0KLQl0ZWdyYV9kY19jdXJz b3JfY29tbWl0KGRjKTsKLQl0ZWdyYV9kY19jb21taXQoZGMpOwotCi0JcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyBpbnQgdGVncmFfZGNfY3Vyc29yX21vdmUoc3RydWN0IGRybV9jcnRjICpjcnRjLCBp bnQgeCwgaW50IHkpCi17Ci0Jc3RydWN0IHRlZ3JhX2RjICpkYyA9IHRvX3RlZ3JhX2RjKGNydGMp OwotCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0KLQlpZiAoIWRjLT5zb2MtPnN1cHBvcnRzX2N1cnNv cikKLQkJcmV0dXJuIC1FTlhJTzsKLQotCXZhbHVlID0gKCh5ICYgMHgzZmZmKSA8PCAxNikgfCAo eCAmIDB4M2ZmZik7Ci0JdGVncmFfZGNfd3JpdGVsKGRjLCB2YWx1ZSwgRENfRElTUF9DVVJTT1Jf UE9TSVRJT04pOwotCi0JdGVncmFfZGNfY3Vyc29yX2NvbW1pdChkYyk7Ci0JLyogWFhYOiBvbmx5 IHJlcXVpcmVkIG9uIGdlbmVyYXRpb25zIGVhcmxpZXIgdGhhbiBUZWdyYTEyND8gKi8KLQl0ZWdy YV9kY19jb21taXQoZGMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHRlZ3JhX2Rj X2ZpbmlzaF9wYWdlX2ZsaXAoc3RydWN0IHRlZ3JhX2RjICpkYykKIHsKIAlzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtID0gZGMtPmJhc2UuZGV2OwpAQCAtNzQxLDggKzg4MSw2IEBAIHN0YXRpYyB2b2lk IHRlZ3JhX2RjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKQogfQogCiBzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIHRlZ3JhX2NydGNfZnVuY3MgPSB7Ci0JLmN1cnNvcl9z ZXQyID0gdGVncmFfZGNfY3Vyc29yX3NldDIsCi0JLmN1cnNvcl9tb3ZlID0gdGVncmFfZGNfY3Vy c29yX21vdmUsCiAJLnBhZ2VfZmxpcCA9IHRlZ3JhX2RjX3BhZ2VfZmxpcCwKIAkuc2V0X2NvbmZp ZyA9IGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnLAogCS5kZXN0cm95ID0gdGVncmFfZGNfZGVz dHJveSwKQEAgLTc1MCwxMiArODg4LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNf ZnVuY3MgdGVncmFfY3J0Y19mdW5jcyA9IHsKIAogc3RhdGljIHZvaWQgdGVncmFfY3J0Y19kaXNh YmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKKwlzdHJ1Y3QgdGVncmFfZGMgKmRjID0gdG9f dGVncmFfZGMoY3J0Yyk7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGNydGMtPmRldjsKIAlz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKIAogCWRybV9mb3JfZWFjaF9sZWdhY3lfcGxhbmUocGxh bmUsICZkcm0tPm1vZGVfY29uZmlnLnBsYW5lX2xpc3QpIHsKIAkJaWYgKHBsYW5lLT5jcnRjID09 IGNydGMpIHsKLQkJCXRlZ3JhX3BsYW5lX2Rpc2FibGUocGxhbmUpOworCQkJdGVncmFfd2luZG93 X3BsYW5lX2Rpc2FibGUocGxhbmUpOwogCQkJcGxhbmUtPmNydGMgPSBOVUxMOwogCiAJCQlpZiAo cGxhbmUtPmZiKSB7CkBAIC03NjYsNiArOTA1LDcgQEAgc3RhdGljIHZvaWQgdGVncmFfY3J0Y19k aXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAl9CiAKIAlkcm1fY3J0Y192Ymxhbmtfb2Zm KGNydGMpOworCXRlZ3JhX2RjX2NvbW1pdChkYyk7CiB9CiAKIHN0YXRpYyBib29sIHRlZ3JhX2Ny dGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCkBAIC0xMjkwLDYgKzE0MzAsOCBA QCBzdGF0aWMgaW50IHRlZ3JhX2RjX2luaXQoc3RydWN0IGhvc3QxeF9jbGllbnQgKmNsaWVudCkK IAlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9kcnZkYXRhKGNsaWVudC0+cGFyZW50 KTsKIAlzdHJ1Y3QgdGVncmFfZGMgKmRjID0gaG9zdDF4X2NsaWVudF90b19kYyhjbGllbnQpOwog CXN0cnVjdCB0ZWdyYV9kcm0gKnRlZ3JhID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJt X3BsYW5lICpwcmltYXJ5ID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX3BsYW5lICpjdXJzb3IgPSBOVUxM OwogCWludCBlcnI7CiAKIAlpZiAodGVncmEtPmRvbWFpbikgewpAQCAtMTMwMyw3ICsxNDQ1LDI1 IEBAIHN0YXRpYyBpbnQgdGVncmFfZGNfaW5pdChzdHJ1Y3QgaG9zdDF4X2NsaWVudCAqY2xpZW50 KQogCQlkYy0+ZG9tYWluID0gdGVncmEtPmRvbWFpbjsKIAl9CiAKLQlkcm1fY3J0Y19pbml0KGRy bSwgJmRjLT5iYXNlLCAmdGVncmFfY3J0Y19mdW5jcyk7CisJcHJpbWFyeSA9IHRlZ3JhX2RjX3By aW1hcnlfcGxhbmVfY3JlYXRlKGRybSwgZGMpOworCWlmIChJU19FUlIocHJpbWFyeSkpIHsKKwkJ ZXJyID0gUFRSX0VSUihwcmltYXJ5KTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCWlmIChkYy0+ c29jLT5zdXBwb3J0c19jdXJzb3IpIHsKKwkJY3Vyc29yID0gdGVncmFfZGNfY3Vyc29yX3BsYW5l X2NyZWF0ZShkcm0sIGRjKTsKKwkJaWYgKElTX0VSUihjdXJzb3IpKSB7CisJCQllcnIgPSBQVFJf RVJSKGN1cnNvcik7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CisKKwllcnIgPSBkcm1fY3J0 Y19pbml0X3dpdGhfcGxhbmVzKGRybSwgJmRjLT5iYXNlLCBwcmltYXJ5LCBjdXJzb3IsCisJCQkJ CSZ0ZWdyYV9jcnRjX2Z1bmNzKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBjbGVhbnVwOworCiAJ ZHJtX21vZGVfY3J0Y19zZXRfZ2FtbWFfc2l6ZSgmZGMtPmJhc2UsIDI1Nik7CiAJZHJtX2NydGNf aGVscGVyX2FkZCgmZGMtPmJhc2UsICZ0ZWdyYV9jcnRjX2hlbHBlcl9mdW5jcyk7CiAKQEAgLTEz MTcsMTIgKzE0NzcsMTIgQEAgc3RhdGljIGludCB0ZWdyYV9kY19pbml0KHN0cnVjdCBob3N0MXhf Y2xpZW50ICpjbGllbnQpCiAJZXJyID0gdGVncmFfZGNfcmdiX2luaXQoZHJtLCBkYyk7CiAJaWYg KGVyciA8IDAgJiYgZXJyICE9IC1FTk9ERVYpIHsKIAkJZGV2X2VycihkYy0+ZGV2LCAiZmFpbGVk IHRvIGluaXRpYWxpemUgUkdCIG91dHB1dDogJWRcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7CisJ CWdvdG8gY2xlYW51cDsKIAl9CiAKIAllcnIgPSB0ZWdyYV9kY19hZGRfcGxhbmVzKGRybSwgZGMp OwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIGNsZWFudXA7CiAKIAlpZiAo SVNfRU5BQkxFRChDT05GSUdfREVCVUdfRlMpKSB7CiAJCWVyciA9IHRlZ3JhX2RjX2RlYnVnZnNf aW5pdChkYywgZHJtLT5wcmltYXJ5KTsKQEAgLTEzMzUsMTAgKzE0OTUsMjQgQEAgc3RhdGljIGlu dCB0ZWdyYV9kY19pbml0KHN0cnVjdCBob3N0MXhfY2xpZW50ICpjbGllbnQpCiAJaWYgKGVyciA8 IDApIHsKIAkJZGV2X2VycihkYy0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSVJRIyV1OiAlZFxu IiwgZGMtPmlycSwKIAkJCWVycik7Ci0JCXJldHVybiBlcnI7CisJCWdvdG8gY2xlYW51cDsKIAl9 CiAKIAlyZXR1cm4gMDsKKworY2xlYW51cDoKKwlpZiAoY3Vyc29yKQorCQlkcm1fcGxhbmVfY2xl YW51cChjdXJzb3IpOworCisJaWYgKHByaW1hcnkpCisJCWRybV9wbGFuZV9jbGVhbnVwKHByaW1h cnkpOworCisJaWYgKHRlZ3JhLT5kb21haW4pIHsKKwkJaW9tbXVfZGV0YWNoX2RldmljZSh0ZWdy YS0+ZG9tYWluLCBkYy0+ZGV2KTsKKwkJZGMtPmRvbWFpbiA9IE5VTEw7CisJfQorCisJcmV0dXJu IGVycjsKIH0KIAogc3RhdGljIGludCB0ZWdyYV9kY19leGl0KHN0cnVjdCBob3N0MXhfY2xpZW50 ICpjbGllbnQpCi0tIAoyLjEuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWwK