From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sameer Goel Subject: [RFC v4 6/8] xen/iommu: smmu-v3: Add Xen specific code to enable the ported driver Date: Mon, 18 Dec 2017 20:17:01 -0700 Message-ID: <20171219031703.23420-7-sameer.goel@linaro.org> References: <20171219031703.23420-1-sameer.goel@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eR8PF-0006cB-T6 for xen-devel@lists.xenproject.org; Tue, 19 Dec 2017 03:17:25 +0000 Received: by mail-pl0-x241.google.com with SMTP id n13so6142859plp.11 for ; Mon, 18 Dec 2017 19:17:22 -0800 (PST) In-Reply-To: <20171219031703.23420-1-sameer.goel@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, julien.grall@arm.com, mjaggi@caviumnetworks.com Cc: sstabellini@kernel.org, andre.przywara@linaro.org, shankerd@codeaurora.org, Sameer Goel List-Id: xen-devel@lists.xenproject.org VGhpcyBkcml2ZXIgZm9sbG93cyBhbiBhcHByb2FjaCBzaW1pbGFyIHRvIHNtbXUgZHJpdmVyLiBU aGUgaW50ZW50IGhlcmUKaXMgdG8gcmV1c2UgYXMgbXVjaCBMaW51eCBjb2RlIGFzIHBvc3NpYmxl LgotIEdsdWUgY29kZSBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvIGJyaWRnZSB0aGUgQVBJIGNhbGxz LgotIENhbGxlZCBMaW51eCBmdW5jdGlvbnMgZnJvbSB0aGUgWGVuIElPTU1VIGZ1bmN0aW9uIGNh bGxzLgotIFhlbiBtb2RpZmljYXRpb25zIGFyZSBwcmVjZWRlZCBieSAvKlhlbjogY29tbWVudCAq LwoKU2lnbmVkLW9mZi1ieTogU2FtZWVyIEdvZWwgPHNhbWVlci5nb2VsQGxpbmFyby5vcmc+Ci0t LQogeGVuL2FyY2gvYXJtL3AybS5jICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiB4ZW4vZHJp dmVycy9LY29uZmlnICAgICAgICAgICAgICAgICAgIHwgICAyICsKIHhlbi9kcml2ZXJzL3Bhc3N0 aHJvdWdoL2FybS9LY29uZmlnICAgfCAgIDggKwogeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJt L01ha2VmaWxlICB8ICAgMSArCiB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vc21tdS12My5j IHwgODgwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIDUgZmlsZXMgY2hhbmdl ZCwgODYxIGluc2VydGlvbnMoKyksIDMxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnCgpkaWZmIC0tZ2l0IGEveGVuL2Fy Y2gvYXJtL3AybS5jIGIveGVuL2FyY2gvYXJtL3AybS5jCmluZGV4IDIyMTY1YWUzNzYuLjZhYTI0 Y2FlNDggMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS9wMm0uYworKysgYi94ZW4vYXJjaC9hcm0v cDJtLmMKQEAgLTE0NjAsNiArMTQ2MCw3IEBAIGVycjoKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1 cF92aXJ0X3BhZ2luZ19vbmUodm9pZCAqZGF0YSkKIHsKICAgICB1bnNpZ25lZCBsb25nIHZhbCA9 ICh1bnNpZ25lZCBsb25nKWRhdGE7CisgICAgLyogU01NVXYzIFMyIGNmZyB2dGNyIHJldXNlcyB0 aGUgZm9sbG93aW5nIHZhbHVlICovCiAgICAgV1JJVEVfU1lTUkVHMzIodmFsLCBWVENSX0VMMik7 CiAgICAgaXNiKCk7CiB9CmRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9LY29uZmlnIGIveGVuL2Ry aXZlcnMvS2NvbmZpZwppbmRleCBiYzNhNTRmMGVhLi42MTI2NTUzODZkIDEwMDY0NAotLS0gYS94 ZW4vZHJpdmVycy9LY29uZmlnCisrKyBiL3hlbi9kcml2ZXJzL0tjb25maWcKQEAgLTEyLDQgKzEy LDYgQEAgc291cmNlICJkcml2ZXJzL3BjaS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvdmlk ZW8vS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnIgor CiBlbmRtZW51CmRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vS2NvbmZp ZyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLmNkYTg5OWY2MDgKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4v ZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vS2NvbmZpZwpAQCAtMCwwICsxLDggQEAKKworY29uZmln IEFSTV9TTU1VX3YzCisJYm9vbCAiQVJNIFNNTVV2MyBTdXBwb3J0IgorCWRlcGVuZHMgb24gQVJN XzY0CisJaGVscAorCSBTdXBwb3J0IGZvciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIEFSTSBTeXN0 ZW0gTU1VIGFyY2hpdGVjdHVyZQorCSB2ZXJzaW9uIDMuCisKZGlmZiAtLWdpdCBhL3hlbi9kcml2 ZXJzL3Bhc3N0aHJvdWdoL2FybS9NYWtlZmlsZSBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2Fy bS9NYWtlZmlsZQppbmRleCBmNGNkMjZlMTVkLi5lMTQ3MzJiNTVjIDEwMDY0NAotLS0gYS94ZW4v ZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZpbGUKKysrIGIveGVuL2RyaXZlcnMvcGFzc3Ro cm91Z2gvYXJtL01ha2VmaWxlCkBAIC0xLDIgKzEsMyBAQAogb2JqLXkgKz0gaW9tbXUubwogb2Jq LXkgKz0gc21tdS5vCitvYmotJChDT05GSUdfQVJNX1NNTVVfdjMpICs9IHNtbXUtdjMubwpkaWZm IC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYyBiL3hlbi9kcml2 ZXJzL3Bhc3N0aHJvdWdoL2FybS9zbW11LXYzLmMKaW5kZXggZTY3YmE2YzQwZi4uMzQ4ODE4NGFk NCAxMDA2NDQKLS0tIGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYworKysg Yi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vc21tdS12My5jCkBAIC0xOCwyOCArMTgsNDAy IEBACiAgKiBBdXRob3I6IFdpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPgogICoKICAq IFRoaXMgZHJpdmVyIGlzIHBvd2VyZWQgYnkgYmFkIGNvZmZlZSBhbmQgYm9tYmF5IG1peC4KKyAq CisgKgorICogQmFzZWQgb24gTGludXggZHJpdmVycy9pb21tdS9hcm0tc21tdS12My5jCisgKiA9 PiBjb21taXQgN2FhODYxOWE2NmFlYTUyYjE0NWUwNGNiYWI0ZjhkNmE0ZTVmM2YzYgorICoKKyAq IFhlbiBtb2RpZmljYXRpb25zOgorICogU2FtZWVyIEdvZWwgPHNhbWVlci5nb2VsQGxpbmFyby5v cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIFRoZSBMaW51eCBGb3VuZGF0aW9uLCBBbGwgcmln aHRzIHJlc2VydmVkLgorICoKKyAqLworCisjaW5jbHVkZSA8eGVuL2FjcGkuaD4KKyNpbmNsdWRl IDx4ZW4vY29uZmlnLmg+CisjaW5jbHVkZSA8eGVuL2RlbGF5Lmg+CisjaW5jbHVkZSA8eGVuL2Vy cm5vLmg+CisjaW5jbHVkZSA8eGVuL2Vyci5oPgorI2luY2x1ZGUgPHhlbi9pcnEuaD4KKyNpbmNs dWRlIDx4ZW4vbGliLmg+CisjaW5jbHVkZSA8eGVuL2xpbnV4X2NvbXBhdC5oPgorI2luY2x1ZGUg PHhlbi9saXN0Lmg+CisjaW5jbHVkZSA8eGVuL21tLmg+CisjaW5jbHVkZSA8eGVuL3JidHJlZS5o PgorI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgorI2luY2x1ZGUgPHhlbi9zaXplcy5oPgorI2luY2x1 ZGUgPHhlbi92bWFwLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2lvcnQuaD4KKyNpbmNsdWRlIDxh c20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9pby5o PgorI2luY2x1ZGUgPGFzbS9wbGF0Zm9ybS5oPgorCisKKy8qIFhlbjogSGVscGVycyB0byBnZXQg ZGV2aWNlIE1NSU8gYW5kIElSUXMgKi8KK3N0cnVjdCByZXNvdXJjZSB7CisJdTY0IGFkZHI7CisJ dTY0IHNpemU7CisJdW5zaWduZWQgaW50IHR5cGU7Cit9OworCisjZGVmaW5lIHJlc291cmNlX3Np emUocmVzKSAoKHJlcyktPnNpemUpCisKKyNkZWZpbmUgcGxhdGZvcm1fZGV2aWNlIGRldmljZQor CisjZGVmaW5lIElPUkVTT1VSQ0VfTUVNIDAKKyNkZWZpbmUgSU9SRVNPVVJDRV9JUlEgMQorCitz dGF0aWMgc3RydWN0IHJlc291cmNlICpwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldiwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IHR5cGUsCisJCQkJCSAg ICAgIHVuc2lnbmVkIGludCBudW0pCit7CisJLyoKKwkgKiBUaGUgcmVzb3VyY2UgaXMgb25seSB1 c2VkIGJldHdlZW4gMiBjYWxscyBvZiBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UuCisJICogSXQncyBx dWl0ZSB1Z2x5IGJ1dCBpdCdzIGF2b2lkIHRvIGFkZCB0b28gbXVjaCBjb2RlIGluIHRoZSBwYXJ0 CisJICogaW1wb3J0ZWQgZnJvbSBMaW51eAorCSAqLworCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ug cmVzOworCXN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqaW9ydF9ub2RlOworCXN0cnVjdCBhY3BpX2lv cnRfc21tdV92MyAqbm9kZV9zbW11X2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlyZXMudHlwZSA9 IHR5cGU7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIElPUkVTT1VSQ0VfTUVNOgorCQlpZiAo cGRldi0+dHlwZSA9PSBERVZfQUNQSSkgeworCQkJcmV0ID0gMTsKKwkJCWlvcnRfbm9kZSA9IHBk ZXYtPmFjcGlfbm9kZTsKKwkJCW5vZGVfc21tdV9kYXRhID0KKwkJCQkoc3RydWN0IGFjcGlfaW9y dF9zbW11X3YzICopaW9ydF9ub2RlLT5ub2RlX2RhdGE7CisKKwkJCWlmIChub2RlX3NtbXVfZGF0 YSAhPSBOVUxMKSB7CisJCQkJcmVzLmFkZHIgPSBub2RlX3NtbXVfZGF0YS0+YmFzZV9hZGRyZXNz OworCQkJCXJlcy5zaXplID0gU1pfMTI4SzsKKwkJCQlyZXQgPSAwOworCQkJfQorCQl9IGVsc2Ug eworCQkJcmV0ID0gZHRfZGV2aWNlX2dldF9hZGRyZXNzKGRldl90b19kdChwZGV2KSwgbnVtLAor CQkJCQkJICAgICZyZXMuYWRkciwgJnJlcy5zaXplKTsKKwkJfQorCisJCXJldHVybiAoKHJldCkg PyBOVUxMIDogJnJlcyk7CisKKwljYXNlIElPUkVTT1VSQ0VfSVJROgorCQkvKiBBQ1BJIGNhc2Ug bm90IGltcGxlbWVudGVkIGFzIHRoZXJlIGlzIG5vIHVzZSBjYXNlIGZvciBpdCAqLworCQlyZXQg PSBwbGF0Zm9ybV9nZXRfaXJxKGRldl90b19kdChwZGV2KSwgbnVtKTsKKworCQlpZiAocmV0IDwg MCkKKwkJCXJldHVybiBOVUxMOworCisJCXJlcy5hZGRyID0gcmV0OworCQlyZXMuc2l6ZSA9IDE7 CisKKwkJcmV0dXJuICZyZXM7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisK K3N0YXRpYyBpbnQgcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBzdHJ1Y3QgZHRfcHJvcGVydHkg KmR0cHJvcDsKKwlzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKmlvcnRfbm9kZTsKKwlzdHJ1Y3QgYWNw aV9pb3J0X3NtbXVfdjMgKm5vZGVfc21tdV9kYXRhOworCWludCByZXQgPSAwOworCisJaWYgKHBk ZXYtPnR5cGUgPT0gREVWX0FDUEkpIHsKKwkJaW9ydF9ub2RlID0gcGRldi0+YWNwaV9ub2RlOwor CQlub2RlX3NtbXVfZGF0YSA9IChzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKilpb3J0X25vZGUt Pm5vZGVfZGF0YTsKKworCQlpZiAobm9kZV9zbW11X2RhdGEgIT0gTlVMTCkgeworCQkJaWYgKCFz dHJjbXAobmFtZSwgImV2ZW50cSIpKQorCQkJCXJldCA9IG5vZGVfc21tdV9kYXRhLT5ldmVudF9n c2l2OworCQkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAicHJpcSIpKQorCQkJCXJldCA9IG5vZGVf c21tdV9kYXRhLT5wcmlfZ3NpdjsKKwkJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImNtZHEtc3lu YyIpKQorCQkJCXJldCA9IG5vZGVfc21tdV9kYXRhLT5zeW5jX2dzaXY7CisJCQllbHNlIGlmICgh c3RyY21wKG5hbWUsICJnZXJyb3IiKSkKKwkJCQlyZXQgPSBub2RlX3NtbXVfZGF0YS0+Z2Vycl9n c2l2OworCQkJZWxzZQorCQkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQlkdHBy b3AgPSBkdF9maW5kX3Byb3BlcnR5KGRldl90b19kdChwZGV2KSwgImludGVycnVwdC1uYW1lcyIs IE5VTEwpOworCQlpZiAoIWR0cHJvcCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICghZHRw cm9wLT52YWx1ZSkKKwkJCXJldHVybiAtRU5PREFUQTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQor CisvKgorICogWGVuOiBIZWxwZXJzIGZvciBETUEgYWxsb2NhdGlvbi4gSnVzdCB0aGUgZnVuY3Rp b24gbmFtZSBpcyByZXVzZWQgZm9yCisgKiBwb3J0aW5nIGNvZGUgdGhlc2UgYWxsb2NhdGlvbiBh cmUgbm90IG1hbmFnZWQgYWxsb2NhdGlvbnMKKyAqLworCit2b2lkICpkbWFtX2FsbG9jX2NvaGVy ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkgICBkbWFfYWRkcl90ICpk bWFfaGFuZGxlLCBnZnBfdCBnZnApCit7CisJdm9pZCAqdmFkZHI7CisJdW5zaWduZWQgbG9uZyBh bGlnbm1lbnQgPSBzaXplOworCisJLyoKKwkgKiBfeHphbGxvYyByZXF1aXJlcyB0aGF0IHRoZSAo YWxpZ24gJiAoYWxpZ24gLTEpKSA9IDAuIE1vc3Qgb2YgdGhlCisJICogYWxsb2NhdGlvbnMgaW4g U01NVSBjb2RlIHNob3VsZCBzZW5kIHRoZSByaWdodCB2YWx1ZSBmb3Igc2l6ZS4gSW4KKwkgKiBj YXNlIHRoaXMgaXMgbm90IHRydWUgcHJpbnQgYSB3YXJuaW5nIGFuZCBhbGlnbiB0byB0aGUgc2l6 ZSBvZiBhCisJICogKHZvaWQgKikKKwkgKi8KKwlpZiAoc2l6ZSAmIChzaXplIC0gMSkpIHsKKwkJ ZGV2X3dhcm4oZGV2LCAiRml4aW5nIGFsaWdubWVudCBmb3IgdGhlIERNQSBidWZmZXJcbiIpOwor CQlhbGlnbm1lbnQgPSBzaXplb2Yodm9pZCAqKTsKKwl9CisKKwl2YWRkciA9IF94emFsbG9jKHNp emUsIGFsaWdubWVudCk7CisJaWYgKCF2YWRkcikgeworCQlkZXZfZXJyKGRldiwgIkRNQSBhbGxv Y2F0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCSpkbWFfaGFuZGxlID0g dmlydF90b19tYWRkcih2YWRkcik7CisKKwlyZXR1cm4gdmFkZHI7Cit9CisKKwordm9pZCBkbWFt X2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFk ZHIsCisJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUpCit7CisJeGZyZWUodmFkZHIpOworfQorCisv KiBYZW46IFN0dWIgb3V0IERNQSBkb21haW4gcmVsYXRlZCBmdW5jdGlvbnMgKi8KKyNkZWZpbmUg aW9tbXVfZ2V0X2RtYV9jb29raWUoZG9tKSAwCisjZGVmaW5lIGlvbW11X3B1dF9kbWFfY29va2ll KGRvbSkKKworLyogWGVuOiBTdHViIG91dCBtb2R1bGUgcGFyYW0gcmVsYXRlZCBmdW5jdGlvbiAq LworI2RlZmluZSBtb2R1bGVfcGFyYW1fbmFtZWQoYSwgYiwgYywgZCkKKyNkZWZpbmUgTU9EVUxF X1BBUk1fREVTQyhhLCBiKQorCisjZGVmaW5lIGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZCwg YikgMAorCisjZGVmaW5lIG9mX2RtYV9pc19jb2hlcmVudChuKSAwCisKKyNkZWZpbmUgTU9EVUxF X0RFVklDRV9UQUJMRSh0eXBlLCBuYW1lKQorI2RlZmluZSBvZl9kZXZpY2VfaWQgZHRfZGV2aWNl X21hdGNoCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmRldm1faW9yZW1hcF9yZXNvdXJjZShzdHJ1 Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworCXZvaWQg X19pb21lbSAqcHRyOworCisJaWYgKCFyZXMgfHwgcmVzLT50eXBlICE9IElPUkVTT1VSQ0VfTUVN KSB7CisJCWRldl9lcnIoZGV2LCAiSW52YWxpZCByZXNvdXJjZVxuIik7CisJCXJldHVybiBFUlJf UFRSKC1FSU5WQUwpOworCX0KKworCXB0ciA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPmFkZHIsIHJl cy0+c2l6ZSk7CisJaWYgKCFwdHIpIHsKKwkJZGV2X2VycihkZXYsCisJCQkiaW9yZW1hcCBmYWls ZWQgKGFkZHIgMHglIlBSSXg2NCIgc2l6ZSAweCUiUFJJeDY0IilcbiIsCisJCQlyZXMtPmFkZHIs IHJlcy0+c2l6ZSk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCXJldHVybiBw dHI7Cit9CisKKy8qIFhlbjogQ29tcGF0aWJpbGl0eSBkZWZpbmUgZm9yIGlvbW11X2RvbWFpbl9n ZW9tZXRyeS4qLworc3RydWN0IGlvbW11X2RvbWFpbl9nZW9tZXRyeSB7CisJZG1hX2FkZHJfdCBh cGVydHVyZV9zdGFydDsgLyogRmlyc3QgYWRkcmVzcyB0aGF0IGNhbiBiZSBtYXBwZWQgICAgKi8K KwlkbWFfYWRkcl90IGFwZXJ0dXJlX2VuZDsgICAvKiBMYXN0IGFkZHJlc3MgdGhhdCBjYW4gYmUg bWFwcGVkICAgICAqLworCWJvb2wgZm9yY2VfYXBlcnR1cmU7ICAgICAgIC8qIERNQSBvbmx5IGFs bG93ZWQgaW4gbWFwcGFibGUgcmFuZ2U/ICovCit9OworCisKKy8qIFhlbjogVHlwZSBkZWZpbml0 aW9ucyBmb3IgaW9tbXVfZG9tYWluICovCisjZGVmaW5lIElPTU1VX0RPTUFJTl9VTk1BTkFHRUQg MAorI2RlZmluZSBJT01NVV9ET01BSU5fRE1BIDEKKyNkZWZpbmUgSU9NTVVfRE9NQUlOX0lERU5U SVRZIDIKKworLyogWGVuOiBEdW1teSBpb21tdV9kb21haW4gKi8KK3N0cnVjdCBpb21tdV9kb21h aW4geworCS8qIFJ1bnRpbWUgU01NVSBjb25maWd1cmF0aW9uIGZvciB0aGlzIGlvbW11X2RvbWFp biAqLworCXN0cnVjdCBhcm1fc21tdV9kb21haW4JCSpwcml2OworCXVuc2lnbmVkIGludCB0eXBl OworCisJLyogRHVtbXkgY29tcGF0aWJpbGl0eSBkZWZpbmVzICovCisJdW5zaWduZWQgbG9uZyBw Z3NpemVfYml0bWFwOworCXN0cnVjdCBpb21tdV9kb21haW5fZ2VvbWV0cnkgZ2VvbWV0cnk7CisK KwlhdG9taWNfdCByZWY7CisJLyoKKwkgKiBVc2VkIHRvIGxpbmsgaW9tbXVfZG9tYWluIGNvbnRl eHRzIGZvciBhIHNhbWUgZG9tYWluLgorCSAqIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBwZXItU01N VSB0byB1c2VkIGJ5IHRoZSBkb21haW4uCisJICovCisJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsK K307CisKKworLyogWGVuOiBEZXNjcmliZXMgaW5mb3JtYXRpb24gcmVxdWlyZWQgZm9yIGEgWGVu IGRvbWFpbiAqLworc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4geworCXNwaW5sb2NrX3QJCQls b2NrOworCS8qIExpc3Qgb2YgaW9tbXUgZG9tYWlucyBhc3NvY2lhdGVkIHRvIHRoaXMgZG9tYWlu ICovCisJc3RydWN0IGxpc3RfaGVhZAkJaW9tbXVfZG9tYWluczsKK307CisKKy8qCisgKiBYZW46 IEluZm9ybWF0aW9uIGFib3V0IGVhY2ggZGV2aWNlIHN0b3JlZCBpbiBkZXYtPmFyY2hkYXRhLmlv bW11CisgKgorICogVGhlIGRldi0+YXJjaGRhdGEuaW9tbXUgc3RvcmVzIHRoZSBpb21tdV9kb21h aW4gKHJ1bnRpbWUgY29uZmlndXJhdGlvbiBvZgorICogdGhlIFNNTVUpLgogICovCitzdHJ1Y3Qg YXJtX3NtbXVfeGVuX2RldmljZSB7CisJc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluOworfTsK KworLyoKKyAqIFhlbjogaW9fcGd0YWJsZSBjb21wYXRpYmlsaXR5IGRlZmluZXMuCisgKiBNb3N0 IG9mIHRoZXNlIGFyZSB0byBwb3J0IGluIHRoZSBTMSB0cmFuc2xhdGlvbiBjb2RlIGFzIGlzLgor ICovCitzdHJ1Y3QgaW9fcGd0YWJsZV9vcHMgeworfTsKKworc3RydWN0IGlvbW11X2dhdGhlcl9v cHMgeworCXZvaWQgKCp0bGJfZmx1c2hfYWxsKSh2b2lkICpjb29raWUpOworCXZvaWQgKCp0bGJf YWRkX2ZsdXNoKSh1bnNpZ25lZCBsb25nIGlvdmEsIHNpemVfdCBzaXplLCBzaXplX3QgZ3JhbnVs ZSwKKwkJCSAgICAgIGJvb2wgbGVhZiwgdm9pZCAqY29va2llKTsKKwl2b2lkICgqdGxiX3N5bmMp KHZvaWQgKmNvb2tpZSk7Cit9OworCitzdHJ1Y3QgaW9fcGd0YWJsZV9jZmcgeworCS8qCisJICog SU9fUEdUQUJMRV9RVUlSS19BUk1fTlM6IChBUk0gZm9ybWF0cykgU2V0IE5TIGFuZCBOU1RBQkxF IGJpdHMgaW4KKwkgKglzdGFnZSAxIFBURXMsIGZvciBoYXJkd2FyZSB3aGljaCBpbnNpc3RzIG9u IHZhbGlkYXRpbmcgdGhlbQorCSAqCWV2ZW4gaW4Jbm9uLXNlY3VyZSBzdGF0ZSB3aGVyZSB0aGV5 IHNob3VsZCBub3JtYWxseSBiZSBpZ25vcmVkLgorCSAqCisJICogSU9fUEdUQUJMRV9RVUlSS19O T19QRVJNUzogSWdub3JlIHRoZSBJT01NVV9SRUFELCBJT01NVV9XUklURSBhbmQKKwkgKglJT01N VV9OT0VYRUMgZmxhZ3MgYW5kIG1hcCBldmVyeXRoaW5nIHdpdGggZnVsbCBhY2Nlc3MsIGZvcgor CSAqCWhhcmR3YXJlIHdoaWNoIGRvZXMgbm90IGltcGxlbWVudCB0aGUgcGVybWlzc2lvbnMgb2Yg YSBnaXZlbgorCSAqCWZvcm1hdCwgYW5kL29yIHJlcXVpcmVzIHNvbWUgZm9ybWF0LXNwZWNpZmlj IGRlZmF1bHQgdmFsdWUuCisJICoKKwkgKiBJT19QR1RBQkxFX1FVSVJLX1RMQklfT05fTUFQOiBJ ZiB0aGUgZm9ybWF0IGZvcmJpZHMgY2FjaGluZyBpbnZhbGlkCisJICoJKHVubWFwcGVkKSBlbnRy aWVzIGJ1dCB0aGUgaGFyZHdhcmUgbWlnaHQgZG8gc28gYW55d2F5LCBwZXJmb3JtCisJICoJVExC IG1haW50ZW5hbmNlIHdoZW4gbWFwcGluZyBhcyB3ZWxsIGFzIHdoZW4gdW5tYXBwaW5nLgorCSAq CisJICogSU9fUEdUQUJMRV9RVUlSS19BUk1fTVRLXzRHQjogKEFSTSB2N3MgZm9ybWF0KSBTZXQg Yml0IDkgaW4gYWxsCisJICoJUFRFcywgZm9yIE1lZGlhdGVrIElPTU1VcyB3aGljaCB0cmVhdCBp dCBhcyBhIDMzcmQgYWRkcmVzcyBiaXQKKwkgKgl3aGVuIHRoZSBTb0MgaXMgaW4gIjRHQiBtb2Rl IiBhbmQgdGhleSBjYW4gb25seSBhY2Nlc3MgdGhlIGhpZ2gKKwkgKglyZW1hcCBvZiBEUkFNICgw eDFfMDAwMDAwMDAgdG8gMHgxX2ZmZmZmZmZmKS4KKwkgKgorCSAqIElPX1BHVEFCTEVfUVVJUktf Tk9fRE1BOiBHdWFyYW50ZWVzIHRoYXQgdGhlIHRhYmxlcyB3aWxsIG9ubHkgZXZlcgorCSAqCWJl IGFjY2Vzc2VkIGJ5IGEgZnVsbHkgY2FjaGUtY29oZXJlbnQgSU9NTVUgb3IgQ1BVIChlLmcuIGZv ciBhCisJICoJc29mdHdhcmUtZW11bGF0ZWQgSU9NTVUpLCBzdWNoIHRoYXQgcGFnZXRhYmxlIHVw ZGF0ZXMgbmVlZCBub3QKKwkgKgliZSB0cmVhdGVkIGFzIGV4cGxpY2l0IERNQSBkYXRhLgorCSAq LworCSNkZWZpbmUgSU9fUEdUQUJMRV9RVUlSS19BUk1fTlMJCUJJVCgwKQorCSNkZWZpbmUgSU9f UEdUQUJMRV9RVUlSS19OT19QRVJNUwlCSVQoMSkKKwkjZGVmaW5lIElPX1BHVEFCTEVfUVVJUktf VExCSV9PTl9NQVAJQklUKDIpCisJI2RlZmluZSBJT19QR1RBQkxFX1FVSVJLX0FSTV9NVEtfNEdC CUJJVCgzKQorCSNkZWZpbmUgSU9fUEdUQUJMRV9RVUlSS19OT19ETUEJCUJJVCg0KQorCXVuc2ln bmVkIGxvbmcJCQlxdWlya3M7CisJdW5zaWduZWQgbG9uZwkJCXBnc2l6ZV9iaXRtYXA7CisJdW5z aWduZWQgaW50CQkJaWFzOworCXVuc2lnbmVkIGludAkJCW9hczsKKwljb25zdCBzdHJ1Y3QgaW9t bXVfZ2F0aGVyX29wcwkqdGxiOworCXN0cnVjdCBkZXZpY2UJCQkqaW9tbXVfZGV2OworCisJLyog TG93LWxldmVsIGRhdGEgc3BlY2lmaWMgdG8gdGhlIHRhYmxlIGZvcm1hdCAqLworCXVuaW9uIHsK KwkJc3RydWN0IHsKKwkJCXU2NAl0dGJyWzJdOworCQkJdTY0CXRjcjsKKwkJCXU2NAltYWlyWzJd OworCQl9IGFybV9scGFlX3MxX2NmZzsKKworCQlzdHJ1Y3QgeworCQkJdTY0CXZ0dGJyOworCQkJ dTY0CXZ0Y3I7CisJCX0gYXJtX2xwYWVfczJfY2ZnOworCisJCXN0cnVjdCB7CisJCQl1MzIJdHRi clsyXTsKKwkJCXUzMgl0Y3I7CisJCQl1MzIJbm1ycjsKKwkJCXUzMglwcnJyOworCQl9IGFybV92 N3NfY2ZnOworCX07Cit9OworCitlbnVtIGlvX3BndGFibGVfZm10IHsKKwlBUk1fMzJfTFBBRV9T MSwKKwlBUk1fMzJfTFBBRV9TMiwKKwlBUk1fNjRfTFBBRV9TMSwKKwlBUk1fNjRfTFBBRV9TMiwK KwlBUk1fVjdTLAorCUlPX1BHVEFCTEVfTlVNX0ZNVFMsCit9OworCisvKgorICogWGVuOiBUaGUg cGd0YWJsZV9vcHMgYXJlIHVzZWQgYnkgdGhlIFMxIHRyYW5zbGF0aW9ucywgc28gcmV0dXJuIHRo ZSBkdW1teQorICogYWRkcmVzcy4KKyAqLworI2RlZmluZSBhbGxvY19pb19wZ3RhYmxlX29wcyhm LCBjLCBvKSAoKHN0cnVjdCBpb19wZ3RhYmxlX29wcyAqKTB4REVBREJFRUYpCisjZGVmaW5lIGZy ZWVfaW9fcGd0YWJsZV9vcHMobykgKG8gPSAwKQorCisvKiBYZW46IERlZmluZSB3cmFwcGVyIGZv ciByZXF1ZXN0aW5nIElSUXMgKi8KKyNkZWZpbmUgSVJRRl9PTkVTSE9UIDAKKwordHlwZWRlZiB2 b2lkICgqaXJxX2hhbmRsZXJfdCkoaW50LCB2b2lkICosIHN0cnVjdCBjcHVfdXNlcl9yZWdzICop OworCitzdGF0aWMgaW5saW5lIGludCBkZXZtX3JlcXVlc3RfaXJxKHN0cnVjdCBkZXZpY2UgKmRl diwgdW5zaWduZWQgaW50IGlycSwKKwkJCQkgICBpcnFfaGFuZGxlcl90IGhhbmRsZXIsIHVuc2ln bmVkIGxvbmcgaXJxZmxhZ3MsCisJCQkJICAgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2 X2lkKQoreworCS8qVE9ETzogQ2hlY2sgaWYgd2UgcmVhbGx5IG5lZWQgdG8gc2V0IGEgdHlwZSAq LworCWlycV9zZXRfdHlwZShpcnEsIElSUV9UWVBFX0VER0VfQk9USCk7CisJcmV0dXJuIHJlcXVl c3RfaXJxKGlycSwgaXJxZmxhZ3MsIGhhbmRsZXIsIGRldm5hbWUsIGRldl9pZCk7CisKK30KKwor aW50IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25l ZCBpbnQgaXJxLCBpcnFfaGFuZGxlcl90IGhhbmRsZXIsCisJCQkgICAgICBpcnFfaGFuZGxlcl90 IHRocmVhZF9mbiwgdW5zaWduZWQgbG9uZyBpcnFmbGFncywKKwkJCSAgICAgIGNvbnN0IGNoYXIg KmRldm5hbWUsIHZvaWQgKmRldl9pZCkKK3sKKwlyZXR1cm4gZGV2bV9yZXF1ZXN0X2lycShkZXYs IGlycSwgdGhyZWFkX2ZuLCBpcnFmbGFncywgZGV2bmFtZSwgZGV2X2lkKTsKK30KIAotI2luY2x1 ZGUgPGxpbnV4L2FjcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9hY3BpX2lvcnQuaD4KLSNpbmNsdWRl IDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1pb21tdS5oPgotI2luY2x1ZGUg PGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxp bnV4L2lvbW11Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXNpLmg+Ci0jaW5jbHVkZSA8bGludXgvb2YuaD4K LSNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfaW9tbXUu aD4KLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5o PgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCi0jaW5jbHVkZSA8bGludXgv YW1iYS9idXMuaD4KLQotI2luY2x1ZGUgImlvLXBndGFibGUuaCIKKy8qIFhlbjogVGhlIG11dGV4 IGlzIHVzZWQgb25seSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gc28gdGhlIHR5cGVjYXN0IGlzIHNh ZmUgKi8KKyNkZWZpbmUgbXV0ZXggc3BpbmxvY2tfdAorI2RlZmluZSBtdXRleF9pbml0IHNwaW5f bG9ja19pbml0CisjZGVmaW5lIG11dGV4X2xvY2sgc3Bpbl9sb2NrCisjZGVmaW5lIG11dGV4X3Vu bG9jayBzcGluX3VubG9jaworCisjZGVmaW5lIHJlYWR4X3BvbGxfdGltZW91dChvcCwgYWRkciwg dmFsLCBjb25kLCBzbGVlcF91cywgdGltZW91dF91cykgXAorKHsgXAorCXNfdGltZV90IGRlYWRs aW5lID0gTk9XKCkgKyBNSUNST1NFQ1ModGltZW91dF91cyk7IFwKKwlmb3IgKDs7KSB7IFwKKwkJ KHZhbCkgPSBvcChhZGRyKTsgXAorCQlpZiAoY29uZCkgXAorCQkJYnJlYWs7IFwKKwkJaWYgKE5P VygpID4gZGVhZGxpbmUpIHsgXAorCQkJKHZhbCkgPSBvcChhZGRyKTsgXAorCQkJYnJlYWs7IFwK KwkJfSBcCisJdWRlbGF5KHNsZWVwX3VzKTsgXAorCX0gXAorCShjb25kKSA/IDAgOiAtRVRJTUVE T1VUOyBcCit9KQorCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWRfcG9sbF90aW1lb3V0KGFkZHIsIHZh bCwgY29uZCwgZGVsYXlfdXMsIHRpbWVvdXRfdXMpIFwKKwlyZWFkeF9wb2xsX3RpbWVvdXQocmVh ZGxfcmVsYXhlZCwgYWRkciwgdmFsLCBjb25kLCBkZWxheV91cywgdGltZW91dF91cykKKworI2Rl ZmluZSBWQV9CSVRTIDAgLyogT25seSBuZWVkZWQgZm9yIFMxIHRyYW5zbGF0aW9ucyAqLwogCiAv KiBNTUlPIHJlZ2lzdGVycyAqLwogI2RlZmluZSBBUk1fU01NVV9JRFIwCQkJMHgwCkBAIC00MzMs NiArODA3LDcgQEAgZW51bSBwcmlfcmVzcCB7CiAJUFJJX1JFU1BfU1VDQywKIH07CiAKKyNpZiAw IC8qIFhlbjogTm8gTVNJIHN1cHBvcnQgaW4gdGhpcyBpdGVyYXRpb24gKi8KIGVudW0gYXJtX3Nt bXVfbXNpX2luZGV4IHsKIAlFVlRRX01TSV9JTkRFWCwKIAlHRVJST1JfTVNJX0lOREVYLApAQCAt NDU3LDYgKzgzMiw3IEBAIHN0YXRpYyBwaHlzX2FkZHJfdCBhcm1fc21tdV9tc2lfY2ZnW0FSTV9T TU1VX01BWF9NU0lTXVszXSA9IHsKIAkJQVJNX1NNTVVfUFJJUV9JUlFfQ0ZHMiwKIAl9LAogfTsK KyNlbmRpZgogCiBzdHJ1Y3QgYXJtX3NtbXVfY21kcV9lbnQgewogCS8qIENvbW1vbiBmaWVsZHMg Ki8KQEAgLTU2MSw2ICs5MzcsOCBAQCBzdHJ1Y3QgYXJtX3NtbXVfczJfY2ZnIHsKIAl1MTYJCQkJ dm1pZDsKIAl1NjQJCQkJdnR0YnI7CiAJdTY0CQkJCXZ0Y3I7CisJLyogWGVuOiBEb21haW4gYXNz b2NpYXRlZCB0byB0aGlzIGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgZG9tYWluCQkJKmRvbWFp bjsKIH07CiAKIHN0cnVjdCBhcm1fc21tdV9zdHJ0YWJfZW50IHsKQEAgLTYzNSw5ICsxMDEzLDIx IEBAIHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgewogCXN0cnVjdCBhcm1fc21tdV9zdHJ0YWJfY2Zn CXN0cnRhYl9jZmc7CiAKIAkvKiBJT01NVSBjb3JlIGNvZGUgaGFuZGxlICovCisjaWYgMCAvKlhl bjogR2VuZXJpYyBpb21tdV9kZXZpY2UgcmVmIG5vdCBuZWVkZWQgaGVyZSAqLwogCXN0cnVjdCBp b21tdV9kZXZpY2UJCWlvbW11OworI2VuZGlmCisJLyogWGVuOiBOZWVkIHRvIGtlZXAgYSBsaXN0 IG9mIFNNTVUgZGV2aWNlcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgICAgZGV2 aWNlczsKIH07CiAKKy8qIFhlbjogS2VlcCBhIGxpc3Qgb2YgZGV2aWNlcyBhc3NvY2lhdGVkIHdp dGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soYXJtX3NtbXVfZGV2aWNl c19sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoYXJtX3NtbXVfZGV2aWNlcyk7CisvKiBYZW46IEhl bHBlciBmb3IgZmluZGluZyBhIGRldmljZSB1c2luZyBmd25vZGUgKi8KK3N0YXRpYworc3RydWN0 IGFybV9zbW11X2RldmljZSAqYXJtX3NtbXVfZ2V0X2J5X2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hh bmRsZSAqZndub2RlKTsKKworCiAvKiBTTU1VIHByaXZhdGUgZGF0YSBmb3IgZWFjaCBtYXN0ZXIg Ki8KIHN0cnVjdCBhcm1fc21tdV9tYXN0ZXJfZGF0YSB7CiAJc3RydWN0IGFybV9zbW11X2Rldmlj ZQkJKnNtbXU7CkBAIC02NTQsNyArMTA0NCw3IEBAIGVudW0gYXJtX3NtbXVfZG9tYWluX3N0YWdl IHsKIAogc3RydWN0IGFybV9zbW11X2RvbWFpbiB7CiAJc3RydWN0IGFybV9zbW11X2RldmljZQkJ KnNtbXU7Ci0Jc3RydWN0IG11dGV4CQkJaW5pdF9tdXRleDsgLyogUHJvdGVjdHMgc21tdSBwb2lu dGVyICovCisJbXV0ZXgJCQkJaW5pdF9tdXRleDsgLyogUHJvdGVjdHMgc21tdSBwb2ludGVyICov CiAKIAlzdHJ1Y3QgaW9fcGd0YWJsZV9vcHMJCSpwZ3RibF9vcHM7CiAKQEAgLTEyMzIsNyArMTYy Miw3IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X2hhbmRsZV9wcHIoc3RydWN0IGFybV9zbW11X2Rl dmljZSAqc21tdSwgdTY0ICpldnQpCiAKIAlkZXZfaW5mbyhzbW11LT5kZXYsICJ1bmV4cGVjdGVk IFBSSSByZXF1ZXN0IHJlY2VpdmVkOlxuIik7CiAJZGV2X2luZm8oc21tdS0+ZGV2LAotCQkgIlx0 c2lkIDB4JTA4eC4weCUwNXg6IFsldSVzXSAlc3ByaXZpbGVnZWQgJXMlcyVzIGFjY2VzcyBhdCBp b3ZhIDB4JTAxNmxseFxuIiwKKwkJICJcdHNpZCAweCUwOHguMHglMDV4OiBbJXUlc10gJXNwcml2 aWxlZ2VkICVzJXMlcyBhY2Nlc3MgYXQgaW92YSAlIyIgUFJJeDY0ICJcbiIsCiAJCSBzaWQsIHNz aWQsIGdycGlkLCBsYXN0ID8gIkwiIDogIiIsCiAJCSBldnRbMF0gJiBQUklRXzBfUEVSTV9QUklW ID8gIiIgOiAidW4iLAogCQkgZXZ0WzBdICYgUFJJUV8wX1BFUk1fUkVBRCA/ICJSIiA6ICIiLApA QCAtMTM0Niw2ICsxNzM2LDggQEAgc3RhdGljIGlycXJldHVybl90IGFybV9zbW11X2NvbWJpbmVk X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldikKIHsKIAlhcm1fc21tdV9nZXJyb3JfaGFu ZGxlcihpcnEsIGRldik7CiAJYXJtX3NtbXVfY21kcV9zeW5jX2hhbmRsZXIoaXJxLCBkZXYpOwor CS8qWGVuOiBObyB0aHJlYWRlZCBpcnEuIFNvIGNhbGwgdGhlIHJlcXVpcmVkIGZ1bmN0aW9uIGZy b20gaGVyZSAqLworCWFybV9zbW11X2NvbWJpbmVkX2lycV90aHJlYWQoaXJxLCBkZXYpOwogCXJl dHVybiBJUlFfV0FLRV9USFJFQUQ7CiB9CiAKQEAgLTEzNTgsNiArMTc1MCw0NiBAQCBzdGF0aWMg dm9pZCBfX2FybV9zbW11X3RsYl9zeW5jKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCiAJ YXJtX3NtbXVfY21kcV9pc3N1ZV9jbWQoc21tdSwgJmNtZCk7CiB9CiAKKy8qCisgKiBYZW46IERl ZmluZSB0aGUgSVJRIGhhbmRsZXJzIGZvciB4ZW4uIFRoZSBsaW51eCBmdW5jdGlvbnMgd291bGQg YmUKKyAqIG1vZGlmaWVkIHRvIHVzZSB0aGUgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIGZvbGxv d2luZyBjb2RlLiAKKyAqLworc3RhdGljIHZvaWQgYXJtX3NtbXVfZXZ0cV90aHJlYWRfeGVuKGlu dCBpcnEsIHZvaWQgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3Mp Cit7CisJYXJtX3NtbXVfZXZ0cV90aHJlYWQoaXJxLCBkZXYpOworfQorCitzdGF0aWMgdm9pZCBh cm1fc21tdV9wcmlxX3RocmVhZF94ZW4oaW50IGlycSwgdm9pZCAqZGV2LAorCQkJCSAgICAgICBz dHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKK3sKKwlhcm1fc21tdV9wcmlxX3RocmVhZChpcnEs IGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGFybV9zbW11X2NtZHFfc3luY19oYW5kbGVyX3hlbihp bnQgaXJxLCB2b2lkICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdz KQoreworCWFybV9zbW11X2NtZHFfc3luY19oYW5kbGVyKGlycSwgZGV2KTsKK30KKworc3RhdGlj IHZvaWQgYXJtX3NtbXVfZ2Vycm9yX2hhbmRsZXJfeGVuKGludCBpcnEsIHZvaWQgKmRldiwKKwkJ CQkgICAgICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCit7CisJYXJtX3NtbXVfZ2Vycm9y X2hhbmRsZXIoaXJxLCBkZXYpOworfQorCitzdGF0aWMgdm9pZCBhcm1fc21tdV9jb21iaW5lZF9p cnFfaGFuZGxlcl94ZW4oaW50IGlycSwgdm9pZCAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgY3B1 X3VzZXJfcmVncyAqcmVncykKK3sKKwlhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFuZGxlcihpcnEs IGRldik7Cit9CisKKyNkZWZpbmUgYXJtX3NtbXVfZXZ0cV90aHJlYWQgYXJtX3NtbXVfZXZ0cV90 aHJlYWRfeGVuCisjZGVmaW5lIGFybV9zbW11X3ByaXFfdGhyZWFkIGFybV9zbW11X3ByaXFfdGhy ZWFkX3hlbgorI2RlZmluZSBhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxlciBhcm1fc21tdV9jbWRx X3N5bmNfaGFuZGxlcl94ZW4KKyNkZWZpbmUgYXJtX3NtbXVfZ2Vycm9yX2hhbmRsZXIgYXJtX3Nt bXVfZ2Vycm9yX2hhbmRsZXJfeGVuCisjZGVmaW5lIGFybV9zbW11X2NvbWJpbmVkX2lycV9oYW5k bGVyIGFybV9zbW11X2NvbWJpbmVkX2lycV9oYW5kbGVyX3hlbgorCiBzdGF0aWMgdm9pZCBhcm1f c21tdV90bGJfc3luYyh2b2lkICpjb29raWUpCiB7CiAJc3RydWN0IGFybV9zbW11X2RvbWFpbiAq c21tdV9kb21haW4gPSBjb29raWU7CkBAIC0xNDE1LDYgKzE4NDcsNyBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGlvbW11X2dhdGhlcl9vcHMgYXJtX3NtbXVfZ2F0aGVyX29wcyA9IHsKIAkudGxiX3N5 bmMJPSBhcm1fc21tdV90bGJfc3luYywKIH07CiAKKyNpZiAwIC8qWGVuOiBVbnVzZWQgZnVuY3Rp b25hbGl0eSAqLwogLyogSU9NTVUgQVBJICovCiBzdGF0aWMgYm9vbCBhcm1fc21tdV9jYXBhYmxl KGVudW0gaW9tbXVfY2FwIGNhcCkKIHsKQEAgLTE0MjcsNiArMTg2MCw3IEBAIHN0YXRpYyBib29s IGFybV9zbW11X2NhcGFibGUoZW51bSBpb21tdV9jYXAgY2FwKQogCQlyZXR1cm4gZmFsc2U7CiAJ fQogfQorI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfZG9tYWluICphcm1fc21tdV9kb21h aW5fYWxsb2ModW5zaWduZWQgdHlwZSkKIHsKQEAgLTE1NDYsOSArMTk4MCwxNSBAQCBzdGF0aWMg aW50IGFybV9zbW11X2RvbWFpbl9maW5hbGlzZV9zMihzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICpz bW11X2RvbWFpbiwKIAlpZiAodm1pZCA8IDApCiAJCXJldHVybiB2bWlkOwogCi0JY2ZnLT52bWlk CT0gKHUxNil2bWlkOwotCWNmZy0+dnR0YnIJPSBwZ3RibF9jZmctPmFybV9scGFlX3MyX2NmZy52 dHRicjsKLQljZmctPnZ0Y3IJPSBwZ3RibF9jZmctPmFybV9scGFlX3MyX2NmZy52dGNyOworCS8q IFhlbjogR2V0IHRoZSB0dGJyIGFuZCB2dGNyIHZhbHVlcworCSAqIHZ0dGJyOiBUaGlzIGlzIGEg c2hhcmVkIHZhbHVlIHdpdGggdGhlIGRvbWFpbiBwYWdlIHRhYmxlCisJICogdnRjcjogVGhlIFRD UiBzZXR0aW5ncyBhcmUgdGhlIHNhbWUgYXMgQ1BVIHNpbmNlIHRoZSBwYWdlCisJICogdGFibGVz IGFyZSBzaGFyZWQKKwkgKi8KKworCWNmZy0+dm1pZAk9IHZtaWQ7CisJY2ZnLT52dHRicgk9IHBh Z2VfdG9fbWFkZHIoY2ZnLT5kb21haW4tPmFyY2gucDJtLnJvb3QpOworCWNmZy0+dnRjcgk9IFJF QURfU1lTUkVHMzIoVlRDUl9FTDIpICYgU1RSVEFCX1NURV8yX1ZUQ1JfTUFTSzsKIAlyZXR1cm4g MDsKIH0KIApAQCAtMTYwNCw2ICsyMDQ0LDcgQEAgc3RhdGljIGludCBhcm1fc21tdV9kb21haW5f ZmluYWxpc2Uoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKQogCWlmIChzbW11LT5mZWF0dXJl cyAmIEFSTV9TTU1VX0ZFQVRfQ09IRVJFTkNZKQogCQlwZ3RibF9jZmcucXVpcmtzID0gSU9fUEdU QUJMRV9RVUlSS19OT19ETUE7CiAKKwkvKiBYZW46IHBndGJsX29wcyBnZXRzIGFuIGludmFsaWQg YWRkcmVzcyAqLwogCXBndGJsX29wcyA9IGFsbG9jX2lvX3BndGFibGVfb3BzKGZtdCwgJnBndGJs X2NmZywgc21tdV9kb21haW4pOwogCWlmICghcGd0Ymxfb3BzKQogCQlyZXR1cm4gLUVOT01FTTsK QEAgLTE3MjEsNiArMjE2Miw3IEBAIG91dF91bmxvY2s6CiAJcmV0dXJuIHJldDsKIH0KIAorI2lm IDAgLyogWGVuOiBVbnVzZWQgZnVuY3Rpb25saXR5ICovCiBzdGF0aWMgaW50IGFybV9zbW11X21h cChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW92YSwKIAkJCXBo eXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSwgaW50IHByb3QpCiB7CkBAIC0xNzcyLDYgKzIy MTQsNyBAQCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICphcm1fc21tdV9nZXRfYnlfZndub2RlKHN0 cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpCiAJcHV0X2RldmljZShkZXYpOwogCXJldHVybiBk ZXYgPyBkZXZfZ2V0X2RydmRhdGEoZGV2KSA6IE5VTEw7CiB9CisjZW5kaWYKIAogc3RhdGljIGJv b2wgYXJtX3NtbXVfc2lkX2luX3JhbmdlKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHUz MiBzaWQpCiB7CkBAIC0xNzgzLDcgKzIyMjYsOSBAQCBzdGF0aWMgYm9vbCBhcm1fc21tdV9zaWRf aW5fcmFuZ2Uoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCkKIAlyZXR1cm4g c2lkIDwgbGltaXQ7CiB9CiAKKyNpZiAwCiBzdGF0aWMgc3RydWN0IGlvbW11X29wcyBhcm1fc21t dV9vcHM7CisjZW5kaWYKIAogc3RhdGljIGludCBhcm1fc21tdV9hZGRfZGV2aWNlKHN0cnVjdCBk ZXZpY2UgKmRldikKIHsKQEAgLTE3OTEsOSArMjIzNiwxMiBAQCBzdGF0aWMgaW50IGFybV9zbW11 X2FkZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogCXN0cnVjdCBhcm1fc21tdV9kZXZpY2Ug KnNtbXU7CiAJc3RydWN0IGFybV9zbW11X21hc3Rlcl9kYXRhICptYXN0ZXI7CiAJc3RydWN0IGlv bW11X2Z3c3BlYyAqZndzcGVjID0gZGV2LT5pb21tdV9md3NwZWM7CisjaWYgMCAvKlhlbjogaW9t bXVfZ3JvdXAgaXMgbm90IG5lZWRlZCAqLwogCXN0cnVjdCBpb21tdV9ncm91cCAqZ3JvdXA7Cisj ZW5kaWYKIAotCWlmICghZndzcGVjIHx8IGZ3c3BlYy0+b3BzICE9ICZhcm1fc21tdV9vcHMpCisJ LyogWGVuOiBmd3NwZWMtPm9wcyBhcmUgbm90IG5lZWRlZCAqLworCWlmICghZndzcGVjKQogCQly ZXR1cm4gLUVOT0RFVjsKIAkvKgogCSAqIFdlIF9jYW5fIGFjdHVhbGx5IHdpdGhzdGFuZCBkb2Rn eSBidXMgY29kZSByZS1jYWxsaW5nIGFkZF9kZXZpY2UoKQpAQCAtMTgzMCw2ICsyMjc4LDExIEBA IHN0YXRpYyBpbnQgYXJtX3NtbXVfYWRkX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCX0K IAl9CiAKKy8qCisgKiBYZW46IERvIG5vdCBuZWVkIGFuIGlvbW11IGdyb3VwIGFzIHRoZSBzdHJl YW0gZGF0YSBpcyBjYXJyaWVkIGJ5IHRoZSBTTU1VCisgKiBtYXN0ZXIgZGV2aWNlIG9iamVjdAor ICovCisjaWYgMAogCWdyb3VwID0gaW9tbXVfZ3JvdXBfZ2V0X2Zvcl9kZXYoZGV2KTsKIAlpZiAo IUlTX0VSUihncm91cCkpIHsKIAkJaW9tbXVfZ3JvdXBfcHV0KGdyb3VwKTsKQEAgLTE4MzcsOCAr MjI5MCwxNiBAQCBzdGF0aWMgaW50IGFybV9zbW11X2FkZF9kZXZpY2Uoc3RydWN0IGRldmljZSAq ZGV2KQogCX0KIAogCXJldHVybiBQVFJfRVJSX09SX1pFUk8oZ3JvdXApOworI2VuZGlmCisJcmV0 dXJuIDA7CiB9CiAKKy8qCisgKiBYZW46IFdlIGNhbiBwb3RlbnRpYWxseSBzdXBwb3J0IHRoaXMg ZnVuY3Rpb24gYW5kIGRlc3Ryb3kgYSBkZXZpY2UuIFRoaXMKKyAqIHdpbGwgYmUgcmVsZXZhbnQg Zm9yIFBDSSBob3RwbHVnLiBTbywgd2lsbCBiZSBpbXBsZW1lbnRlZCBhcyBuZWVkZWQgYWZ0ZXIK KyAqIHBhc3N0aHJvdWdoIHN1cHBvcnQgaXMgYXZhaWxhYmxlLgorICovCisjaWYgMAogc3RhdGlj IHZvaWQgYXJtX3NtbXVfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3Ry dWN0IGlvbW11X2Z3c3BlYyAqZndzcGVjID0gZGV2LT5pb21tdV9md3NwZWM7CkBAIC0xOTc0LDYg KzI0MzUsNyBAQCBzdGF0aWMgc3RydWN0IGlvbW11X29wcyBhcm1fc21tdV9vcHMgPSB7CiAJLnB1 dF9yZXN2X3JlZ2lvbnMJPSBhcm1fc21tdV9wdXRfcmVzdl9yZWdpb25zLAogCS5wZ3NpemVfYml0 bWFwCQk9IC0xVUwsIC8qIFJlc3RyaWN0ZWQgZHVyaW5nIGRldmljZSBhdHRhY2ggKi8KIH07Cisj ZW5kaWYKIAogLyogUHJvYmluZyBhbmQgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zICovCiBzdGF0 aWMgaW50IGFybV9zbW11X2luaXRfb25lX3F1ZXVlKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNt bXUsCkBAIC0yMTgyLDYgKzI2NDQsNyBAQCBzdGF0aWMgaW50IGFybV9zbW11X3VwZGF0ZV9nYnBh KHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHUzMiBzZXQsIHUzMiBjbHIpCiAJCQkJCSAg MSwgQVJNX1NNTVVfUE9MTF9USU1FT1VUX1VTKTsKIH0KIAorI2lmIDAgLyogWGVuOiBUaGVyZSBp cyBubyBNU0kgc3VwcG9ydCBhcyB5ZXQgKi8KIHN0YXRpYyB2b2lkIGFybV9zbW11X2ZyZWVfbXNp cyh2b2lkICpkYXRhKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CkBAIC0yMjQ3LDEy ICsyNzEwLDE1IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X3NldHVwX21zaXMoc3RydWN0IGFybV9z bW11X2RldmljZSAqc21tdSkKIAkvKiBBZGQgY2FsbGJhY2sgdG8gZnJlZSBNU0lzIG9uIHRlYXJk b3duICovCiAJZGV2bV9hZGRfYWN0aW9uKGRldiwgYXJtX3NtbXVfZnJlZV9tc2lzLCBkZXYpOwog fQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGFybV9zbW11X3NldHVwX3VuaXF1ZV9pcnFzKHN0cnVj dCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCiB7CiAJaW50IGlycSwgcmV0OwogCisjaWYgMCAvKlhl bjogQ2Fubm90IHNldHVwIG1zaXMgZm9yIG5vdyAqLwogCWFybV9zbW11X3NldHVwX21zaXMoc21t dSk7CisjZW5kaWYKIAogCS8qIFJlcXVlc3QgaW50ZXJydXB0IGxpbmVzICovCiAJaXJxID0gc21t dS0+ZXZ0cS5xLmlycTsKQEAgLTIzMTYsOSArMjc4MiwxMyBAQCBzdGF0aWMgaW50IGFybV9zbW11 X3NldHVwX2lycXMoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKIAkJICogQ2F2aXVtIFRo dW5kZXJYMiBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IG5vdCBzdXBwb3J0IHVuaXF1ZQogCQkgKiBp cnEgbGluZXMuIFVzZSBzaW5nbGUgaXJxIGxpbmUgZm9yIGFsbCB0aGUgU01NVXYzIGludGVycnVw dHMuCiAJCSAqLwotCQlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKHNtbXUtPmRldiwg aXJxLAorCQkvKgorCQkgKiBYZW46IERvZXMgbm90IHN1cHBvcnQgdGhyZWFkZWQgaXJxcywgc28g c2VyaWFsaXNlIHRoZSBzZXR1cC4KKwkJICogVGhpcyBpcyB0aGUgc2FtZSBmb3IgcHJpcyBhbmQg ZXZlbnQgaW50ZXJydXB0IGxpbmVzIG9uIG90aGVyCisJCSAqIHN5c3RlbXMKKwkJICovCisJCXJl dCA9IGRldm1fcmVxdWVzdF9pcnEoc21tdS0+ZGV2LCBpcnEsCiAJCQkJCWFybV9zbW11X2NvbWJp bmVkX2lycV9oYW5kbGVyLAotCQkJCQlhcm1fc21tdV9jb21iaW5lZF9pcnFfdGhyZWFkLAogCQkJ CQlJUlFGX09ORVNIT1QsCiAJCQkJCSJhcm0tc21tdS12My1jb21iaW5lZC1pcnEiLCBzbW11KTsK IAkJaWYgKHJldCA8IDApCkBAIC0yNTQyLDggKzMwMTIsMTQgQEAgc3RhdGljIGludCBhcm1fc21t dV9kZXZpY2VfaHdfcHJvYmUoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKIAkJc21tdS0+ ZmVhdHVyZXMgfD0gQVJNX1NNTVVfRkVBVF9TVEFMTFM7CiAJfQogCisvKgorICogWGVuOiBCbG9j ayBzdGFnZSAxIHRyYW5zbGF0aW9ucy4gQnkgZG9pbmcgdGhpcyBoZXJlIHdlIGRvIG5vdCBuZWVk IHRvIHNldCB0aGUKKyAqIGRvbWFpbi0+c3RhZ2UgZXhwbGljaXRseS4KKyAqLworI2lmIDAKIAlp ZiAocmVnICYgSURSMF9TMVApCiAJCXNtbXUtPmZlYXR1cmVzIHw9IEFSTV9TTU1VX0ZFQVRfVFJB TlNfUzE7CisjZW5kaWYKIAogCWlmIChyZWcgJiBJRFIwX1MyUCkKIAkJc21tdS0+ZmVhdHVyZXMg fD0gQVJNX1NNTVVfRkVBVF9UUkFOU19TMjsKQEAgLTI2MTYsMTAgKzMwOTIsMTIgQEAgc3RhdGlj IGludCBhcm1fc21tdV9kZXZpY2VfaHdfcHJvYmUoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21t dSkKIAlpZiAocmVnICYgSURSNV9HUkFONEspCiAJCXNtbXUtPnBnc2l6ZV9iaXRtYXAgfD0gU1pf NEsgfCBTWl8yTSB8IFNaXzFHOwogCisjaWYgMCAvKiBYZW46IFNNTVUgb3BzIGRvIG5vdCBoYXZl IGEgcGdzaXplX2JpdG1hcCBtZW1iZXIgZm9yIFhlbiAqLwogCWlmIChhcm1fc21tdV9vcHMucGdz aXplX2JpdG1hcCA9PSAtMVVMKQogCQlhcm1fc21tdV9vcHMucGdzaXplX2JpdG1hcCA9IHNtbXUt PnBnc2l6ZV9iaXRtYXA7CiAJZWxzZQogCQlhcm1fc21tdV9vcHMucGdzaXplX2JpdG1hcCB8PSBz bW11LT5wZ3NpemVfYml0bWFwOworI2VuZGlmCiAKIAkvKiBPdXRwdXQgYWRkcmVzcyBzaXplICov CiAJc3dpdGNoIChyZWcgJiBJRFI1X09BU19NQVNLIDw8IElEUjVfT0FTX1NISUZUKSB7CkBAIC0y NjgwLDcgKzMxNTgsOCBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9hY3BpX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJc3RydWN0IGRldmljZSAqZGV2ID0gc21tdS0+ ZGV2OwogCXN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9kZTsKIAotCW5vZGUgPSAqKHN0cnVjdCBh Y3BpX2lvcnRfbm9kZSAqKilkZXZfZ2V0X3BsYXRkYXRhKGRldik7CisJLyogWGVuOiBNb2RpZmlj YXRpb24gdG8gZ2V0IGlvcnRfbm9kZSAqLworCW5vZGUgPSAoc3RydWN0IGFjcGlfaW9ydF9ub2Rl ICopZGV2LT5hY3BpX25vZGU7CiAKIAkvKiBSZXRyaWV2ZSBTTU1VdjMgc3BlY2lmaWMgZGF0YSAq LwogCWlvcnRfc21tdSA9IChzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKilub2RlLT5ub2RlX2Rh dGE7CkBAIC0yNzAzLDcgKzMxODIsNyBAQCBzdGF0aWMgaW5saW5lIGludCBhcm1fc21tdV9kZXZp Y2VfYWNwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogc3RhdGljIGludCBh cm1fc21tdV9kZXZpY2VfZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJ CQkgICAgc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKIHsKLQlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBkZXY7CiAJdTMyIGNlbGxz OwogCWludCByZXQgPSAtRUlOVkFMOwogCkBAIC0yNzE2LDYgKzMxOTUsNyBAQCBzdGF0aWMgaW50 IGFybV9zbW11X2RldmljZV9kdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAog CiAJcGFyc2VfZHJpdmVyX29wdGlvbnMoc21tdSk7CiAKKwkvKiBYZW46IG9mX2RtYV9pc19jb2hl cmVudCBpcyBhIHN0dWIgdGlsbCBkdCBzdXBwb3J0IGlzIGludHJvZHVjZWQgKi8KIAlpZiAob2Zf ZG1hX2lzX2NvaGVyZW50KGRldi0+b2Zfbm9kZSkpCiAJCXNtbXUtPmZlYXR1cmVzIHw9IEFSTV9T TU1VX0ZFQVRfQ09IRVJFTkNZOwogCkBAIC0yNzM0LDkgKzMyMTQsMTEgQEAgc3RhdGljIGludCBh cm1fc21tdV9kZXZpY2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlp bnQgaXJxLCByZXQ7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CisjaWYgMCAvKlhlbjogRG8gbm90 IG5lZWQgdG8gc2V0dXAgc3lzZnMgKi8KIAlyZXNvdXJjZV9zaXplX3QgaW9hZGRyOworI2VuZGlm CiAJc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm cGRldi0+ZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBkZXY7LyogWGVuOiBkZXYgaXMgaWdu b3JlZCAqLwogCWJvb2wgYnlwYXNzOwogCiAJc21tdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVv Zigqc21tdSksIEdGUF9LRVJORUwpOwpAQCAtMjc2Myw3ICszMjQ1LDkgQEAgc3RhdGljIGludCBh cm1fc21tdV9kZXZpY2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJZGV2 X2VycihkZXYsICJNTUlPIHJlZ2lvbiB0b28gc21hbGwgKCVwcilcbiIsIHJlcyk7CiAJCXJldHVy biAtRUlOVkFMOwogCX0KKyNpZiAwIC8qWGVuOiBEbyBub3QgbmVlZCB0byBzZXR1cCBzeXNmcyAq LwogCWlvYWRkciA9IHJlcy0+c3RhcnQ7CisjZW5kaWYKIAogCXNtbXUtPmJhc2UgPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwogCWlmIChJU19FUlIoc21tdS0+YmFzZSkpCkBAIC0y ODAyLDEzICszMjg2LDE4IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCXJldHVybiByZXQ7CiAKIAkvKiBSZWNvcmQgb3Vy IHByaXZhdGUgZGV2aWNlIHN0cnVjdHVyZSAqLworCS8qIFhlbjogU01NVSBpcyBub3QgdHJlYXRl ZCBhIGEgcGxhdGZvcm0gZGV2aWNlKi8KKyNpZiAwCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRl diwgc21tdSk7CisjZW5kaWYKIAogCS8qIFJlc2V0IHRoZSBkZXZpY2UgKi8KIAlyZXQgPSBhcm1f c21tdV9kZXZpY2VfcmVzZXQoc21tdSwgYnlwYXNzKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0 OwogCisvKiBYZW46IE5vdCBjcmVhdGluZyBhbiBJT01NVSBkZXZpY2UgbGlzdCBmb3IgWGVuICov CisjaWYgMAogCS8qIEFuZCB3ZSdyZSB1cC4gR28gZ28gZ28hICovCiAJcmV0ID0gaW9tbXVfZGV2 aWNlX3N5c2ZzX2FkZCgmc21tdS0+aW9tbXUsIGRldiwgTlVMTCwKIAkJCQkgICAgICJzbW11My4l cGEiLCAmaW9hZGRyKTsKQEAgLTI4NDQsOSArMzMzMywyMCBAQCBzdGF0aWMgaW50IGFybV9zbW11 X2RldmljZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQlpZiAocmV0KQog CQkJcmV0dXJuIHJldDsKIAl9CisjZW5kaWYKKwkvKgorCSAqIFhlbjogS2VlcCBhIGxpc3Qgb2Yg YWxsIHByb2JlZCBkZXZpY2VzLiBUaGlzIHdpbGwgYmUgdXNlZCB0byBxdWVyeQorCSAqIHRoZSBz bW11IGRldmljZXMgYmFzZWQgb24gdGhlIGZ3bm9kZS4KKwkgKi8KKwlJTklUX0xJU1RfSEVBRCgm c21tdS0+ZGV2aWNlcyk7CisJc3Bpbl9sb2NrKCZhcm1fc21tdV9kZXZpY2VzX2xvY2spOworCWxp c3RfYWRkKCZzbW11LT5kZXZpY2VzLCAmYXJtX3NtbXVfZGV2aWNlcyk7CisJc3Bpbl91bmxvY2so JmFybV9zbW11X2RldmljZXNfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKKy8qIFhlbjogVW51c2Vk IGZ1bmN0aW9uICovCisjaWYgMAogc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfcmVtb3ZlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGFybV9zbW11X2RldmljZSAq c21tdSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwpAQCAtMjg2MCw2ICszMzYwLDggQEAg c3RhdGljIHZvaWQgYXJtX3NtbXVfZGV2aWNlX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCiB7CiAJYXJtX3NtbXVfZGV2aWNlX3JlbW92ZShwZGV2KTsKIH0KKyNlbmRpZgor CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFybV9zbW11X29mX21hdGNoW10g PSB7CiAJeyAuY29tcGF0aWJsZSA9ICJhcm0sc21tdS12MyIsIH0sCkBAIC0yODY3LDYgKzMzNjks NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhcm1fc21tdV9vZl9tYXRjaFtd ID0gewogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFybV9zbW11X29mX21hdGNoKTsKIAor I2lmIDAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFybV9zbW11X2RyaXZlciA9IHsK IAkuZHJpdmVyCT0gewogCQkubmFtZQkJPSAiYXJtLXNtbXUtdjMiLApAQCAtMjg4MywzICszMzg2 LDMxOCBAQCBJT01NVV9PRl9ERUNMQVJFKGFybV9zbW11djMsICJhcm0sc21tdS12MyIsIE5VTEwp OwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJT01NVSBBUEkgZm9yIEFSTSBhcmNoaXRlY3RlZCBTTU1V djMgaW1wbGVtZW50YXRpb25zIik7CiBNT0RVTEVfQVVUSE9SKCJXaWxsIERlYWNvbiA8d2lsbC5k ZWFjb25AYXJtLmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKyNlbmRpZgorCisv KioqKiogU3RhcnQgb2YgWGVuIHNwZWNpZmljIGNvZGUgKioqKiovCisKK3N0YXRpYyBpbnQgX19t dXN0X2NoZWNrIGFybV9zbW11X2lvdGxiX2ZsdXNoX2FsbChzdHJ1Y3QgZG9tYWluICpkKQorewor CXN0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluICpzbW11X2RvbWFpbiA9IGRvbV9pb21tdShkKS0+ YXJjaC5wcml2OworCXN0cnVjdCBpb21tdV9kb21haW4gKmNmZzsKKworCXNwaW5fbG9jaygmc21t dV9kb21haW4tPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2ZnLCAmc21tdV9kb21haW4t PmlvbW11X2RvbWFpbnMsIGxpc3QpIHsKKwkJLyoKKwkJICogT25seSBpbnZhbGlkYXRlIHRoZSBj b250ZXh0IHdoZW4gU01NVSBpcyBwcmVzZW50LgorCQkgKiBUaGlzIGlzIGJlY2F1c2UgdGhlIGNv bnRleHQgaW5pdGlhbGl6YXRpb24gaXMgZGVsYXllZAorCQkgKiB1bnRpbCBhIG1hc3RlciBoYXMg YmVlbiBhZGRlZC4KKwkJICovCisJCWlmICh1bmxpa2VseSghQUNDRVNTX09OQ0UoY2ZnLT5wcml2 LT5zbW11KSkpCisJCQljb250aW51ZTsKKwkJYXJtX3NtbXVfdGxiX2ludl9jb250ZXh0KGNmZy0+ cHJpdik7CisJfQorCXNwaW5fdW5sb2NrKCZzbW11X2RvbWFpbi0+bG9jayk7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFybV9zbW11X2lvdGxiX2ZsdXNoKHN0cnVj dCBkb21haW4gKmQsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBnZm4sCisJCQkJCSAgICAgdW5z aWduZWQgaW50IHBhZ2VfY291bnQpCit7CisJcmV0dXJuIGFybV9zbW11X2lvdGxiX2ZsdXNoX2Fs bChkKTsKK30KKworc3RhdGljIHN0cnVjdCBpb21tdV9kb21haW4gKmFybV9zbW11X2dldF9kb21h aW4oc3RydWN0IGRvbWFpbiAqZCwKKwkJCQkJCXN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1 Y3QgaW9tbXVfZG9tYWluICpkb21haW47CisJc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhl bl9kb21haW47CisJc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdTsKKwlzdHJ1Y3QgYXJtX3Nt bXVfZG9tYWluICpzbW11X2RvbWFpbjsKKworCXhlbl9kb21haW4gPSBkb21faW9tbXUoZCktPmFy Y2gucHJpdjsKKworCXNtbXUgPSBhcm1fc21tdV9nZXRfYnlfZndub2RlKGRldi0+aW9tbXVfZndz cGVjLT5pb21tdV9md25vZGUpOworCWlmICghc21tdSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgor CSAqIExvb3AgdGhyb3VnaCB0aGUgJnhlbl9kb21haW4tPmNvbnRleHRzIHRvIGxvY2F0ZSBhIGNv bnRleHQKKwkgKiBhc3NpZ25lZCB0byB0aGlzIFNNTVUKKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KGRvbWFpbiwgJnhlbl9kb21haW4tPmlvbW11X2RvbWFpbnMsIGxpc3QpIHsKKwkJc21tdV9k b21haW4gPSB0b19zbW11X2RvbWFpbihkb21haW4pOworCQlpZiAoc21tdV9kb21haW4tPnNtbXUg PT0gc21tdSkKKwkJCXJldHVybiBkb21haW47CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0 YXRpYyB2b2lkIGFybV9zbW11X2Rlc3Ryb3lfaW9tbXVfZG9tYWluKHN0cnVjdCBpb21tdV9kb21h aW4gKmRvbWFpbikKK3sKKwlsaXN0X2RlbCgmZG9tYWluLT5saXN0KTsKKwlhcm1fc21tdV9kb21h aW5fZnJlZShkb21haW4pOworfQorCitzdGF0aWMgaW50IGFybV9zbW11X2Fzc2lnbl9kZXYoc3Ry dWN0IGRvbWFpbiAqZCwgdTggZGV2Zm4sCisJCQkgICAgICAgc3RydWN0IGRldmljZSAqZGV2LCB1 MzIgZmxhZykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW47 CisJc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW47CisJc3RydWN0IGFybV9z bW11X2RvbWFpbiAqYXJtX3NtbXU7CisKKwl4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNo LnByaXY7CisKKwlpZiAoIWRldi0+YXJjaGRhdGEuaW9tbXUpIHsKKwkJZGV2LT5hcmNoZGF0YS5p b21tdSA9IHh6YWxsb2Moc3RydWN0IGFybV9zbW11X3hlbl9kZXZpY2UpOworCQlpZiAoIWRldi0+ YXJjaGRhdGEuaW9tbXUpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSBhcm1fc21t dV9hZGRfZGV2aWNlKGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNwaW5fbG9j aygmeGVuX2RvbWFpbi0+bG9jayk7CisKKwkvKgorCSAqIENoZWNrIHRvIHNlZSBpZiBhbiBpb21t dV9kb21haW4gYWxyZWFkeSBleGlzdHMgZm9yIHRoaXMgeGVuIGRvbWFpbgorCSAqIHVuZGVyIHRo ZSBzYW1lIFNNTVUKKwkgKi8KKwlkb21haW4gPSBhcm1fc21tdV9nZXRfZG9tYWluKGQsIGRldik7 CisJaWYgKCFkb21haW4pIHsKKworCQlkb21haW4gPSBhcm1fc21tdV9kb21haW5fYWxsb2MoSU9N TVVfRE9NQUlOX0RNQSk7CisJCWlmICghZG9tYWluKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJ Z290byBvdXQ7CisJCX0KKworCQlhcm1fc21tdSA9IHRvX3NtbXVfZG9tYWluKGRvbWFpbik7CisJ CWFybV9zbW11LT5zMl9jZmcuZG9tYWluID0gZDsKKworCQkvKiBDaGFpbiB0aGUgbmV3IGNvbnRl eHQgdG8gdGhlIGRvbWFpbiAqLworCQlsaXN0X2FkZCgmZG9tYWluLT5saXN0LCAmeGVuX2RvbWFp bi0+aW9tbXVfZG9tYWlucyk7CisKKwl9CisKKwlyZXQgPSBhcm1fc21tdV9hdHRhY2hfZGV2KGRv bWFpbiwgZGV2KTsKKwlpZiAocmV0KSB7CisJCWlmIChkb21haW4tPnJlZi5jb3VudGVyID09IDAp CisJCQlhcm1fc21tdV9kZXN0cm95X2lvbW11X2RvbWFpbihkb21haW4pOworCX0gZWxzZSB7CisJ CWF0b21pY19pbmMoJmRvbWFpbi0+cmVmKTsKKwl9CisKK291dDoKKwlzcGluX3VubG9jaygmeGVu X2RvbWFpbi0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhcm1fc21tdV9k ZWFzc2lnbl9kZXYoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0 cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiA9IGFybV9zbW11X2dldF9kb21haW4oZCwgZGV2KTsK KwlzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbjsKKwlzdHJ1Y3QgYXJtX3Nt bXVfZG9tYWluICphcm1fc21tdSA9IHRvX3NtbXVfZG9tYWluKGRvbWFpbik7CisKKwl4ZW5fZG9t YWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7CisKKwlpZiAoIWFybV9zbW11IHx8IGFybV9z bW11LT5zMl9jZmcuZG9tYWluICE9IGQpIHsKKwkJZGV2X2VycihkZXYsICIgbm90IGF0dGFjaGVk IHRvIGRvbWFpbiAlZFxuIiwgZC0+ZG9tYWluX2lkKTsKKwkJcmV0dXJuIC1FU1JDSDsKKwl9CisK KwlzcGluX2xvY2soJnhlbl9kb21haW4tPmxvY2spOworCisJYXJtX3NtbXVfZGV0YWNoX2Rldihk ZXYpOworCWF0b21pY19kZWMoJmRvbWFpbi0+cmVmKTsKKworCWlmIChkb21haW4tPnJlZi5jb3Vu dGVyID09IDApCisJCWFybV9zbW11X2Rlc3Ryb3lfaW9tbXVfZG9tYWluKGRvbWFpbik7CisKKwlz cGluX3VubG9jaygmeGVuX2RvbWFpbi0+bG9jayk7CisKKworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgYXJtX3NtbXVfcmVhc3NpZ25fZGV2KHN0cnVjdCBkb21haW4gKnMsIHN0cnVjdCBk b21haW4gKnQsCisJCQkJIHU4IGRldmZuLCAgc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBy ZXQgPSAwOworCisJLyogRG9uJ3QgYWxsb3cgcmVtYXBwaW5nIG9uIG90aGVyIGRvbWFpbiB0aGFu IGh3ZG9tICovCisJaWYgKHQgJiYgdCAhPSBoYXJkd2FyZV9kb21haW4pCisJCXJldHVybiAtRVBF Uk07CisKKwlpZiAodCA9PSBzKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGFybV9zbW11X2RlYXNz aWduX2RldihzLCBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAodCkgewor CQkvKiBObyBmbGFncyBhcmUgZGVmaW5lZCBmb3IgQVJNLiAqLworCQlyZXQgPSBhcm1fc21tdV9h c3NpZ25fZGV2KHQsIGRldmZuLCBkZXYsIDApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcm1fc21tdV9pb21tdV9kb21haW5f aW5pdChzdHJ1Y3QgZG9tYWluICpkKQoreworCXN0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluICp4 ZW5fZG9tYWluOworCisJeGVuX2RvbWFpbiA9IHh6YWxsb2Moc3RydWN0IGFybV9zbW11X3hlbl9k b21haW4pOworCWlmICgheGVuX2RvbWFpbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xv Y2tfaW5pdCgmeGVuX2RvbWFpbi0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnhlbl9kb21haW4t PmlvbW11X2RvbWFpbnMpOworCisJZG9tX2lvbW11KGQpLT5hcmNoLnByaXYgPSB4ZW5fZG9tYWlu OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faHdkb21faW5pdCBhcm1fc21tdV9p b21tdV9od2RvbV9pbml0KHN0cnVjdCBkb21haW4gKmQpCit7Cit9CisKK3N0YXRpYyB2b2lkIGFy bV9zbW11X2lvbW11X2RvbWFpbl90ZWFyZG93bihzdHJ1Y3QgZG9tYWluICpkKQoreworCXN0cnVj dCBhcm1fc21tdV94ZW5fZG9tYWluICp4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnBy aXY7CisKKwlBU1NFUlQobGlzdF9lbXB0eSgmeGVuX2RvbWFpbi0+aW9tbXVfZG9tYWlucykpOwor CXhmcmVlKHhlbl9kb21haW4pOworfQorCitzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBhcm1fc21t dV9tYXBfcGFnZShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGdmbiwKKwkJCXVuc2ln bmVkIGxvbmcgbWZuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJcDJtX3R5cGVfdCB0OworCisJ LyoKKwkgKiBHcmFudCBtYXBwaW5ncyBjYW4gYmUgdXNlZCBmb3IgRE1BIHJlcXVlc3RzLiBUaGUg ZGV2X2J1c19hZGRyCisJICogcmV0dXJuZWQgYnkgdGhlIGh5cGVyY2FsbCBpcyB0aGUgTUZOIChu b3QgdGhlIElQQSkuIEZvciBkZXZpY2UKKwkgKiBwcm90ZWN0ZWQgYnkgYW4gSU9NTVUsIFhlbiBu ZWVkcyB0byBhZGQgYSAxOjEgbWFwcGluZyBpbiB0aGUgZG9tYWluCisJICogcDJtIHRvIGFsbG93 IERNQSByZXF1ZXN0IHRvIHdvcmsuCisJICogVGhpcyBpcyBvbmx5IHZhbGlkIHdoZW4gdGhlIGRv bWFpbiBpcyBkaXJlY3RlZCBtYXBwZWQuIEhlbmNlIHRoaXMKKwkgKiBmdW5jdGlvbiBzaG91bGQg b25seSBiZSB1c2VkIGJ5IGdudHRhYiBjb2RlIHdpdGggZ2ZuID09IG1mbi4KKwkgKi8KKwlCVUdf T04oIWlzX2RvbWFpbl9kaXJlY3RfbWFwcGVkKGQpKTsKKwlCVUdfT04obWZuICE9IGdmbik7CisK KwkvKiBXZSBvbmx5IHN1cHBvcnQgcmVhZGFibGUgYW5kIHdyaXRhYmxlIGZsYWdzICovCisJaWYg KCEoZmxhZ3MgJiAoSU9NTVVGX3JlYWRhYmxlIHwgSU9NTVVGX3dyaXRhYmxlKSkpCisJCXJldHVy biAtRUlOVkFMOworCisJdCA9IChmbGFncyAmIElPTU1VRl93cml0YWJsZSkgPyBwMm1faW9tbXVf bWFwX3J3IDogcDJtX2lvbW11X21hcF9ybzsKKworCS8qCisJICogVGhlIGZ1bmN0aW9uIGd1ZXN0 X3BoeXNtYXBfYWRkX2VudHJ5IHJlcGxhY2VzIHRoZSBjdXJyZW50IG1hcHBpbmcKKwkgKiBpZiB0 aGVyZSBpcyBhbHJlYWR5IG9uZS4uLgorCSAqLworCXJldHVybiBndWVzdF9waHlzbWFwX2FkZF9l bnRyeShkLCBfZ2ZuKGdmbiksIF9tZm4obWZuKSwgMCwgdCk7Cit9CisKK3N0YXRpYyBpbnQgX19t dXN0X2NoZWNrIGFybV9zbW11X3VubWFwX3BhZ2Uoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQg bG9uZyBnZm4pCit7CisJLyoKKwkgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQg YnkgZ250dGFiIGNvZGUgd2hlbiB0aGUgZG9tYWluCisJICogaXMgZGlyZWN0IG1hcHBlZAorCSAq LworCWlmICghaXNfZG9tYWluX2RpcmVjdF9tYXBwZWQoZCkpCisJCXJldHVybiAtRUlOVkFMOwor CisJcmV0dXJuIGd1ZXN0X3BoeXNtYXBfcmVtb3ZlX3BhZ2UoZCwgX2dmbihnZm4pLCBfbWZuKGdm biksIDApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X29wcyBhcm1fc21tdV9pb21t dV9vcHMgPSB7CisJLmluaXQgPSBhcm1fc21tdV9pb21tdV9kb21haW5faW5pdCwKKwkuaHdkb21f aW5pdCA9IGFybV9zbW11X2lvbW11X2h3ZG9tX2luaXQsCisJLnRlYXJkb3duID0gYXJtX3NtbXVf aW9tbXVfZG9tYWluX3RlYXJkb3duLAorCS5pb3RsYl9mbHVzaCA9IGFybV9zbW11X2lvdGxiX2Zs dXNoLAorCS5pb3RsYl9mbHVzaF9hbGwgPSBhcm1fc21tdV9pb3RsYl9mbHVzaF9hbGwsCisJLmFz c2lnbl9kZXZpY2UgPSBhcm1fc21tdV9hc3NpZ25fZGV2LAorCS5yZWFzc2lnbl9kZXZpY2UgPSBh cm1fc21tdV9yZWFzc2lnbl9kZXYsCisJLm1hcF9wYWdlID0gYXJtX3NtbXVfbWFwX3BhZ2UsCisJ LnVubWFwX3BhZ2UgPSBhcm1fc21tdV91bm1hcF9wYWdlLAorfTsKKworc3RhdGljCitzdHJ1Y3Qg YXJtX3NtbXVfZGV2aWNlICphcm1fc21tdV9nZXRfYnlfZndub2RlKHN0cnVjdCBmd25vZGVfaGFu ZGxlICpmd25vZGUpCit7CisJc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSA9IE5VTEw7CisK KwlzcGluX2xvY2soJmFybV9zbW11X2RldmljZXNfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRy eShzbW11LCAmYXJtX3NtbXVfZGV2aWNlcywgZGV2aWNlcykgeworCQlpZiAoc21tdS0+ZGV2LT5m d25vZGUgPT0gZndub2RlKQorCQkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrKCZhcm1fc21tdV9k ZXZpY2VzX2xvY2spOworCisJcmV0dXJuIHNtbXU7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IGFy bV9zbW11X2R0X2luaXQoc3RydWN0IGR0X2RldmljZV9ub2RlICpkZXYsCisJCQkJICAgY29uc3Qg dm9pZCAqZGF0YSkKK3sKKwlpbnQgcmM7CisKKwkvKgorCSAqIEV2ZW4gaWYgdGhlIGRldmljZSBj YW4ndCBiZSBpbml0aWFsaXplZCwgd2UgZG9uJ3Qgd2FudCB0bworCSAqIGdpdmUgdGhlIFNNTVUg ZGV2aWNlIHRvIGRvbTAuCisJICovCisJZHRfZGV2aWNlX3NldF91c2VkX2J5KGRldiwgRE9NSURf WEVOKTsKKworCXJjID0gYXJtX3NtbXVfZGV2aWNlX3Byb2JlKGR0X3RvX2RldihkZXYpKTsKKwlp ZiAocmMpCisJCXJldHVybiByYzsKKworCWlvbW11X3NldF9vcHMoJmFybV9zbW11X2lvbW11X29w cyk7CisKKwlyZXR1cm4gMDsKK30KKworRFRfREVWSUNFX1NUQVJUKHNtbXV2MywgIkFSTSBTTU1V IFYzIiwgREVWSUNFX0lPTU1VKQorCS5kdF9tYXRjaCA9IGFybV9zbW11X29mX21hdGNoLAorCS5p bml0ID0gYXJtX3NtbXVfZHRfaW5pdCwKK0RUX0RFVklDRV9FTkQKKworI2lmZGVmIENPTkZJR19B Q1BJCisvKiBTZXQgdXAgdGhlIElPTU1VICovCitzdGF0aWMgaW50IF9faW5pdCBhcm1fc21tdV9h Y3BpX2luaXQoY29uc3Qgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IGFybV9zbW11 X2RldmljZV9wcm9iZSgoc3RydWN0IGRldmljZSAqKWRhdGEpOworCWlmIChyYykKKwkJcmV0dXJu IHJjOworCisJaW9tbXVfc2V0X29wcygmYXJtX3NtbXVfaW9tbXVfb3BzKTsKKwlyZXR1cm4gMDsK K30KKworQUNQSV9ERVZJQ0VfU1RBUlQoYXNtbXV2MywgIkFSTSBTTU1VIFYzIiwgREVWSUNFX0lP TU1VKQorCS5jbGFzc190eXBlID0gQUNQSV9JT1JUX05PREVfU01NVV9WMywKKwkuaW5pdCA9IGFy bV9zbW11X2FjcGlfaW5pdCwKK0FDUElfREVWSUNFX0VORAorCisjZW5kaWYKLS0gCjIuMTQuMQoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZl bCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=