From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sameer Goel Subject: [PATCH 5/7] xen/iommu: smmu-v3: Add Xen specific code to enable the ported driver Date: Thu, 8 Feb 2018 20:10:53 -0700 Message-ID: <20180209031055.21926-6-sameer.goel@linaro.org> References: <20180209031055.21926-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 1ejz63-00054S-Pr for xen-devel@lists.xenproject.org; Fri, 09 Feb 2018 03:11:31 +0000 Received: by mail-pg0-x242.google.com with SMTP id m136so2740721pga.12 for ; Thu, 08 Feb 2018 19:11:28 -0800 (PST) In-Reply-To: <20180209031055.21926-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, shankerd@codeaurora.org, Sameer Goel List-Id: xen-devel@lists.xenproject.org VGhpcyBkcml2ZXIgZm9sbG93cyBhbiBhcHByb2FjaCBzaW1pbGFyIHRvIHNtbXUgZHJpdmVyLiBU aGUgaW50ZW50IGhlcmUKaXMgdG8gcmV1c2UgYXMgbXVjaCBMaW51eCBjb2RlIGFzIHBvc3NpYmxl LgotIEdsdWUgY29kZSBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvIGJyaWRnZSB0aGUgQVBJIGNhbGxz LgotIENhbGxlZCBMaW51eCBmdW5jdGlvbnMgZnJvbSB0aGUgWGVuIElPTU1VIGZ1bmN0aW9uIGNh bGxzLgotIFhlbiBtb2RpZmljYXRpb25zIGFyZSBwcmVjZWRlZCBieSAvKlhlbjogY29tbWVudCAq LwotIHhlbi9saW51eF9jb21wYXQ6IEFkZCBhIExpbnV4IGNvbXBhdCBoZWFkZXIKICBGb3IgcG9y dGluZyBmaWxlcyBkaXJlY3RseSBmcm9tIExpbnV4IGl0IGlzIHVzZWZ1bCB0byBoYXZlIGEgZnVu Y3Rpb24gbWFwcGluZwogIGRlZmluaXRpb25zIGZyb20gTGludXggdG8gWGVuLiBUaGlzIGZpbGUg YWRkcyBjb21tb24gQVBJIGZ1bmN0aW9ucyBhbmQKICBvdGhlciBkZWZpbmVzIHRoYXQgYXJlIG5l ZWRlZCBmb3IgcG9ydGluZyBhcm0gU01NVSBkcml2ZXJzLgoKU2lnbmVkLW9mZi1ieTogU2FtZWVy IEdvZWwgPHNhbWVlci5nb2VsQGxpbmFyby5vcmc+Ci0tLQogeGVuL2FyY2gvYXJtL3AybS5jICAg ICAgICAgICAgICAgICAgICB8ICAgMSArCiB4ZW4vZHJpdmVycy9LY29uZmlnICAgICAgICAgICAg ICAgICAgIHwgICAyICsKIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnICAgfCAg IDggKwogeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxlICB8ICAgMSArCiB4ZW4v ZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vc21tdS12My5jIHwgODkyICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0KIHhlbi9pbmNsdWRlL3hlbi9saW51eF9jb21wYXQuaCAgICAgICAg fCAgODQgKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA5NTkgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tj b25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vaW5jbHVkZS94ZW4vbGludXhfY29tcGF0LmgK CmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vcDJtLmMgYi94ZW4vYXJjaC9hcm0vcDJtLmMKaW5k ZXggNjVlOGI5YzZlYS4uZmVmNzYwNWZkNiAxMDA2NDQKLS0tIGEveGVuL2FyY2gvYXJtL3AybS5j CisrKyBiL3hlbi9hcmNoL2FybS9wMm0uYwpAQCAtMTQ2MCw2ICsxNDYwLDcgQEAgZXJyOgogc3Rh dGljIHZvaWQgX19pbml0IHNldHVwX3ZpcnRfcGFnaW5nX29uZSh2b2lkICpkYXRhKQogewogICAg IHVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpZGF0YTsKKyAgICAvKiBTTU1VdjMg UzIgY2ZnIHZ0Y3IgcmV1c2VzIHRoZSBmb2xsb3dpbmcgdmFsdWUgKi8KICAgICBXUklURV9TWVNS RUczMih2YWwsIFZUQ1JfRUwyKTsKICAgICBpc2IoKTsKIH0KZGlmZiAtLWdpdCBhL3hlbi9kcml2 ZXJzL0tjb25maWcgYi94ZW4vZHJpdmVycy9LY29uZmlnCmluZGV4IGJjM2E1NGYwZWEuLjYxMjY1 NTM4NmQgMTAwNjQ0Ci0tLSBhL3hlbi9kcml2ZXJzL0tjb25maWcKKysrIGIveGVuL2RyaXZlcnMv S2NvbmZpZwpAQCAtMTIsNCArMTIsNiBAQCBzb3VyY2UgImRyaXZlcnMvcGNpL0tjb25maWciCiAK IHNvdXJjZSAiZHJpdmVycy92aWRlby9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvcGFzc3Ro cm91Z2gvYXJtL0tjb25maWciCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3Bh c3N0aHJvdWdoL2FybS9LY29uZmlnIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tjb25m aWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uY2RhODk5ZjYwOAotLS0g L2Rldi9udWxsCisrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnCkBAIC0w LDAgKzEsOCBAQAorCitjb25maWcgQVJNX1NNTVVfdjMKKwlib29sICJBUk0gU01NVXYzIFN1cHBv cnQiCisJZGVwZW5kcyBvbiBBUk1fNjQKKwloZWxwCisJIFN1cHBvcnQgZm9yIGltcGxlbWVudGF0 aW9ucyBvZiB0aGUgQVJNIFN5c3RlbSBNTVUgYXJjaGl0ZWN0dXJlCisJIHZlcnNpb24gMy4KKwpk aWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxlIGIveGVuL2Ry aXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxlCmluZGV4IGY0Y2QyNmUxNWQuLmUxNDczMmI1 NWMgMTAwNjQ0Ci0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9NYWtlZmlsZQorKysg Yi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZpbGUKQEAgLTEsMiArMSwzIEBACiBv YmoteSArPSBpb21tdS5vCiBvYmoteSArPSBzbW11Lm8KK29iai0kKENPTkZJR19BUk1fU01NVV92 MykgKz0gc21tdS12My5vCmRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0v c21tdS12My5jIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYwppbmRleCBl NjdiYTZjNDBmLi5mNDM0ODVmZTZlIDEwMDY0NAotLS0gYS94ZW4vZHJpdmVycy9wYXNzdGhyb3Vn aC9hcm0vc21tdS12My5jCisrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9zbW11LXYz LmMKQEAgLTE4LDI4ICsxOCw0MTQgQEAKICAqIEF1dGhvcjogV2lsbCBEZWFjb24gPHdpbGwuZGVh Y29uQGFybS5jb20+CiAgKgogICogVGhpcyBkcml2ZXIgaXMgcG93ZXJlZCBieSBiYWQgY29mZmVl IGFuZCBib21iYXkgbWl4LgorICoKKyAqCisgKiBCYXNlZCBvbiBMaW51eCBkcml2ZXJzL2lvbW11 L2FybS1zbW11LXYzLmMKKyAqID0+IGNvbW1pdCA3YWE4NjE5YTY2YWVhNTJiMTQ1ZTA0Y2JhYjRm OGQ2YTRlNWYzZjNiCisgKgorICogWGVuIG1vZGlmaWNhdGlvbnM6CisgKiBTYW1lZXIgR29lbCA8 c2FtZWVyLmdvZWxAbGluYXJvLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxNywgVGhlIExpbnV4 IEZvdW5kYXRpb24sIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICovCisKKyNpbmNsdWRlIDx4 ZW4vYWNwaS5oPgorI2luY2x1ZGUgPHhlbi9jb25maWcuaD4KKyNpbmNsdWRlIDx4ZW4vZGVsYXku aD4KKyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4KKyNpbmNsdWRlIDx4ZW4vZXJyLmg+CisjaW5jbHVk ZSA8eGVuL2lycS5oPgorI2luY2x1ZGUgPHhlbi9saWIuaD4KKyNpbmNsdWRlIDx4ZW4vbGludXhf Y29tcGF0Lmg+CisjaW5jbHVkZSA8eGVuL2xpc3QuaD4KKyNpbmNsdWRlIDx4ZW4vbW0uaD4KKyNp bmNsdWRlIDx4ZW4vcmJ0cmVlLmg+CisjaW5jbHVkZSA8eGVuL3NjaGVkLmg+CisjaW5jbHVkZSA8 eGVuL3NpemVzLmg+CisjaW5jbHVkZSA8eGVuL3ZtYXAuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlf aW9ydC5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vZGV2aWNlLmg+ CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3BsYXRmb3JtLmg+CisKKy8qIEFs aWFzIHRvIFhlbiBkZXZpY2UgdHJlZSBoZWxwZXJzICovCisjZGVmaW5lIGRldmljZV9ub2RlIGR0 X2RldmljZV9ub2RlCisjZGVmaW5lIG9mX3BoYW5kbGVfYXJncyBkdF9waGFuZGxlX2FyZ3MKKyNk ZWZpbmUgb2ZfZGV2aWNlX2lkIGR0X2RldmljZV9tYXRjaAorI2RlZmluZSBvZl9tYXRjaF9ub2Rl IGR0X21hdGNoX25vZGUKKyNkZWZpbmUgb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsIHBuYW1lLCBv dXQpICghZHRfcHJvcGVydHlfcmVhZF91MzIobnAsIHBuYW1lLCBvdXQpKQorI2RlZmluZSBvZl9w cm9wZXJ0eV9yZWFkX2Jvb2wgZHRfcHJvcGVydHlfcmVhZF9ib29sCisjZGVmaW5lIG9mX3BhcnNl X3BoYW5kbGVfd2l0aF9hcmdzIGR0X3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdzCisKKy8qIFhlbjog SGVscGVycyB0byBnZXQgZGV2aWNlIE1NSU8gYW5kIElSUXMgKi8KK3N0cnVjdCByZXNvdXJjZSB7 CisJdTY0IGFkZHI7CisJdTY0IHNpemU7CisJdW5zaWduZWQgaW50IHR5cGU7Cit9OworCisjZGVm aW5lIHJlc291cmNlX3NpemUocmVzKSAoKHJlcyktPnNpemUpCisKKyNkZWZpbmUgcGxhdGZvcm1f ZGV2aWNlIGRldmljZQorCisjZGVmaW5lIElPUkVTT1VSQ0VfTUVNIDAKKyNkZWZpbmUgSU9SRVNP VVJDRV9JUlEgMQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlICpwbGF0Zm9ybV9nZXRfcmVzb3Vy Y2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50 IHR5cGUsCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCBudW0pCit7CisJLyoKKwkgKiBUaGUgcmVz b3VyY2UgaXMgb25seSB1c2VkIGJldHdlZW4gMiBjYWxscyBvZiBwbGF0Zm9ybV9nZXRfcmVzb3Vy Y2UuCisJICogSXQncyBxdWl0ZSB1Z2x5IGJ1dCBpdCdzIGF2b2lkIHRvIGFkZCB0b28gbXVjaCBj b2RlIGluIHRoZSBwYXJ0CisJICogaW1wb3J0ZWQgZnJvbSBMaW51eAorCSAqLworCXN0YXRpYyBz dHJ1Y3QgcmVzb3VyY2UgcmVzOworCXN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqaW9ydF9ub2RlOwor CXN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAqbm9kZV9zbW11X2RhdGE7CisJaW50IHJldCA9IDA7 CisKKwlyZXMudHlwZSA9IHR5cGU7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIElPUkVTT1VS Q0VfTUVNOgorCQlpZiAocGRldi0+dHlwZSA9PSBERVZfQUNQSSkgeworCQkJcmV0ID0gMTsKKwkJ CWlvcnRfbm9kZSA9IHBkZXYtPmFjcGlfbm9kZTsKKwkJCW5vZGVfc21tdV9kYXRhID0KKwkJCQko c3RydWN0IGFjcGlfaW9ydF9zbW11X3YzICopaW9ydF9ub2RlLT5ub2RlX2RhdGE7CisKKwkJCWlm IChub2RlX3NtbXVfZGF0YSAhPSBOVUxMKSB7CisJCQkJcmVzLmFkZHIgPSBub2RlX3NtbXVfZGF0 YS0+YmFzZV9hZGRyZXNzOworCQkJCXJlcy5zaXplID0gU1pfMTI4SzsKKwkJCQlyZXQgPSAwOwor CQkJfQorCQl9IGVsc2UgeworCQkJcmV0ID0gZHRfZGV2aWNlX2dldF9hZGRyZXNzKGRldl90b19k dChwZGV2KSwgbnVtLAorCQkJCQkJICAgICZyZXMuYWRkciwgJnJlcy5zaXplKTsKKwkJfQorCisJ CXJldHVybiAoKHJldCkgPyBOVUxMIDogJnJlcyk7CisKKwljYXNlIElPUkVTT1VSQ0VfSVJROgor CQkvKiBBQ1BJIGNhc2Ugbm90IGltcGxlbWVudGVkIGFzIHRoZXJlIGlzIG5vIHVzZSBjYXNlIGZv ciBpdCAqLworCQlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldl90b19kdChwZGV2KSwgbnVtKTsK KworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiBOVUxMOworCisJCXJlcy5hZGRyID0gcmV0Owor CQlyZXMuc2l6ZSA9IDE7CisKKwkJcmV0dXJuICZyZXM7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4g TlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBzdHJ1 Y3QgZHRfcHJvcGVydHkgKmR0cHJvcDsKKwlzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKmlvcnRfbm9k ZTsKKwlzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKm5vZGVfc21tdV9kYXRhOworCWludCByZXQg PSAwOworCisJaWYgKHBkZXYtPnR5cGUgPT0gREVWX0FDUEkpIHsKKwkJaW9ydF9ub2RlID0gcGRl di0+YWNwaV9ub2RlOworCQlub2RlX3NtbXVfZGF0YSA9IChzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVf djMgKilpb3J0X25vZGUtPm5vZGVfZGF0YTsKKworCQlpZiAobm9kZV9zbW11X2RhdGEgIT0gTlVM TCkgeworCQkJaWYgKCFzdHJjbXAobmFtZSwgImV2ZW50cSIpKQorCQkJCXJldCA9IG5vZGVfc21t dV9kYXRhLT5ldmVudF9nc2l2OworCQkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAicHJpcSIpKQor CQkJCXJldCA9IG5vZGVfc21tdV9kYXRhLT5wcmlfZ3NpdjsKKwkJCWVsc2UgaWYgKCFzdHJjbXAo bmFtZSwgImNtZHEtc3luYyIpKQorCQkJCXJldCA9IG5vZGVfc21tdV9kYXRhLT5zeW5jX2dzaXY7 CisJCQllbHNlIGlmICghc3RyY21wKG5hbWUsICJnZXJyb3IiKSkKKwkJCQlyZXQgPSBub2RlX3Nt bXVfZGF0YS0+Z2Vycl9nc2l2OworCQkJZWxzZQorCQkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwl9 IGVsc2UgeworCQlkdHByb3AgPSBkdF9maW5kX3Byb3BlcnR5KGRldl90b19kdChwZGV2KSwgImlu dGVycnVwdC1uYW1lcyIsIE5VTEwpOworCQlpZiAoIWR0cHJvcCkKKwkJCXJldHVybiAtRUlOVkFM OworCisJCWlmICghZHRwcm9wLT52YWx1ZSkKKwkJCXJldHVybiAtRU5PREFUQTsKKwl9CisKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogWGVuOiBIZWxwZXJzIGZvciBETUEgYWxsb2NhdGlvbi4g SnVzdCB0aGUgZnVuY3Rpb24gbmFtZSBpcyByZXVzZWQgZm9yCisgKiBwb3J0aW5nIGNvZGUgdGhl c2UgYWxsb2NhdGlvbiBhcmUgbm90IG1hbmFnZWQgYWxsb2NhdGlvbnMKICAqLwogCi0jaW5jbHVk ZSA8bGludXgvYWNwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2FjcGlfaW9ydC5oPgotI2luY2x1ZGUg PGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLWlvbW11Lmg+Ci0jaW5jbHVkZSA8 bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGlu dXgvaW9tbXUuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tc2kuaD4KLSNpbmNsdWRlIDxsaW51eC9vZi5oPgot I2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9vZl9pb21tdS5o PgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+ Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9h bWJhL2J1cy5oPgotCi0jaW5jbHVkZSAiaW8tcGd0YWJsZS5oIgorc3RhdGljIHZvaWQgKmRtYW1f YWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgIGRt YV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCkKK3sKKwl2b2lkICp2YWRkcjsKKwl1bnNp Z25lZCBsb25nIGFsaWdubWVudCA9IHNpemU7CisKKwkvKgorCSAqIF94emFsbG9jIHJlcXVpcmVz IHRoYXQgdGhlIChhbGlnbiAmIChhbGlnbiAtMSkpID0gMC4gTW9zdCBvZiB0aGUKKwkgKiBhbGxv Y2F0aW9ucyBpbiBTTU1VIGNvZGUgc2hvdWxkIHNlbmQgdGhlIHJpZ2h0IHZhbHVlIGZvciBzaXpl LiBJbgorCSAqIGNhc2UgdGhpcyBpcyBub3QgdHJ1ZSBwcmludCBhIHdhcm5pbmcgYW5kIGFsaWdu IHRvIHRoZSBzaXplIG9mIGEKKwkgKiAodm9pZCAqKQorCSAqLworCWlmIChzaXplICYgKHNpemUg LSAxKSkgeworCQlkZXZfd2FybihkZXYsICJGaXhpbmcgYWxpZ25tZW50IGZvciB0aGUgRE1BIGJ1 ZmZlclxuIik7CisJCWFsaWdubWVudCA9IHNpemVvZih2b2lkICopOworCX0KKworCXZhZGRyID0g X3h6YWxsb2Moc2l6ZSwgYWxpZ25tZW50KTsKKwlpZiAoIXZhZGRyKSB7CisJCWRldl9lcnIoZGV2 LCAiRE1BIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJKmRt YV9oYW5kbGUgPSB2aXJ0X3RvX21hZGRyKHZhZGRyKTsKKworCXJldHVybiB2YWRkcjsKK30KKwor CitzdGF0aWMgdm9pZCBkbWFtX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXpl X3Qgc2l6ZSwgdm9pZCAqdmFkZHIsCisJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUpCit7CisJeGZy ZWUodmFkZHIpOworfQorCisvKiBYZW46IFN0dWIgb3V0IERNQSBkb21haW4gcmVsYXRlZCBmdW5j dGlvbnMgKi8KKyNkZWZpbmUgaW9tbXVfZ2V0X2RtYV9jb29raWUoZG9tKSAwCisjZGVmaW5lIGlv bW11X3B1dF9kbWFfY29va2llKGRvbSkKKworLyogWGVuOiBTdHViIG91dCBtb2R1bGUgcGFyYW0g cmVsYXRlZCBmdW5jdGlvbiAqLworI2RlZmluZSBtb2R1bGVfcGFyYW1fbmFtZWQoYSwgYiwgYywg ZCkKKyNkZWZpbmUgTU9EVUxFX1BBUk1fREVTQyhhLCBiKQorCisjZGVmaW5lIGRtYV9zZXRfbWFz a19hbmRfY29oZXJlbnQoZCwgYikgMAorCisjZGVmaW5lIG9mX2RtYV9pc19jb2hlcmVudChuKSAw CisKKyNkZWZpbmUgTU9EVUxFX0RFVklDRV9UQUJMRSh0eXBlLCBuYW1lKQorCitzdGF0aWMgdm9p ZCBfX2lvbWVtICpkZXZtX2lvcmVtYXBfcmVzb3VyY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJ CQkgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKK3sKKwl2b2lkIF9faW9tZW0gKnB0cjsKKworCWlm ICghcmVzIHx8IHJlcy0+dHlwZSAhPSBJT1JFU09VUkNFX01FTSkgeworCQlkZXZfZXJyKGRldiwg IkludmFsaWQgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisK KwlwdHIgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5hZGRyLCByZXMtPnNpemUpOworCWlmICghcHRy KSB7CisJCWRldl9lcnIoZGV2LAorCQkJImlvcmVtYXAgZmFpbGVkIChhZGRyIDB4JSJQUkl4NjQi IHNpemUgMHglIlBSSXg2NCIpXG4iLAorCQkJcmVzLT5hZGRyLCByZXMtPnNpemUpOworCQlyZXR1 cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlyZXR1cm4gcHRyOworfQorCisvKiBYZW46IENv bXBhdGliaWxpdHkgZGVmaW5lIGZvciBpb21tdV9kb21haW5fZ2VvbWV0cnkuKi8KK3N0cnVjdCBp b21tdV9kb21haW5fZ2VvbWV0cnkgeworCWRtYV9hZGRyX3QgYXBlcnR1cmVfc3RhcnQ7IC8qIEZp cnN0IGFkZHJlc3MgdGhhdCBjYW4gYmUgbWFwcGVkICAgICovCisJZG1hX2FkZHJfdCBhcGVydHVy ZV9lbmQ7ICAgLyogTGFzdCBhZGRyZXNzIHRoYXQgY2FuIGJlIG1hcHBlZCAgICAgKi8KKwlib29s IGZvcmNlX2FwZXJ0dXJlOyAgICAgICAvKiBETUEgb25seSBhbGxvd2VkIGluIG1hcHBhYmxlIHJh bmdlPyAqLworfTsKKworCisvKiBYZW46IFR5cGUgZGVmaW5pdGlvbnMgZm9yIGlvbW11X2RvbWFp biAqLworI2RlZmluZSBJT01NVV9ET01BSU5fVU5NQU5BR0VEIDAKKyNkZWZpbmUgSU9NTVVfRE9N QUlOX0RNQSAxCisjZGVmaW5lIElPTU1VX0RPTUFJTl9JREVOVElUWSAyCisKKy8qIFhlbjogRHVt bXkgaW9tbXVfZG9tYWluICovCitzdHJ1Y3QgaW9tbXVfZG9tYWluIHsKKwkvKiBSdW50aW1lIFNN TVUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBpb21tdV9kb21haW4gKi8KKwlzdHJ1Y3QgYXJtX3Nt bXVfZG9tYWluCQkqcHJpdjsKKwl1bnNpZ25lZCBpbnQgdHlwZTsKKworCS8qIER1bW15IGNvbXBh dGliaWxpdHkgZGVmaW5lcyAqLworCXVuc2lnbmVkIGxvbmcgcGdzaXplX2JpdG1hcDsKKwlzdHJ1 Y3QgaW9tbXVfZG9tYWluX2dlb21ldHJ5IGdlb21ldHJ5OworCisJYXRvbWljX3QgcmVmOworCS8q CisJICogVXNlZCB0byBsaW5rIGlvbW11X2RvbWFpbiBjb250ZXh0cyBmb3IgYSBzYW1lIGRvbWFp bi4KKwkgKiBUaGVyZSBpcyBhdCBsZWFzdCBvbmUgcGVyLVNNTVUgdG8gdXNlZCBieSB0aGUgZG9t YWluLgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7Cit9OworCisvKiBYZW46IERlc2Ny aWJlcyBpbmZvcm1hdGlvbiByZXF1aXJlZCBmb3IgYSBYZW4gZG9tYWluICovCitzdHJ1Y3QgYXJt X3NtbXVfeGVuX2RvbWFpbiB7CisJc3BpbmxvY2tfdAkJCWxvY2s7CisJLyogTGlzdCBvZiBpb21t dSBkb21haW5zIGFzc29jaWF0ZWQgdG8gdGhpcyBkb21haW4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFk CQljb250ZXh0czsKK307CisKKy8qCisgKiBYZW46IEluZm9ybWF0aW9uIGFib3V0IGVhY2ggZGV2 aWNlIHN0b3JlZCBpbiBkZXYtPmFyY2hkYXRhLmlvbW11CisgKgorICogVGhlIGRldi0+YXJjaGRh dGEuaW9tbXUgc3RvcmVzIHRoZSBpb21tdV9kb21haW4gKHJ1bnRpbWUgY29uZmlndXJhdGlvbiBv ZgorICogdGhlIFNNTVUpLgorICovCitzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RldmljZSB7CisJc3Ry dWN0IGlvbW11X2RvbWFpbiAqZG9tYWluOworfTsKKworLyoKKyAqIFhlbjogaW9fcGd0YWJsZSBj b21wYXRpYmlsaXR5IGRlZmluZXMuCisgKiBNb3N0IG9mIHRoZXNlIGFyZSB0byBwb3J0IGluIHRo ZSBTMSB0cmFuc2xhdGlvbiBjb2RlIGFzIGlzLgorICovCitzdHJ1Y3QgaW9fcGd0YWJsZV9vcHMg eworfTsKKworc3RydWN0IGlvbW11X2dhdGhlcl9vcHMgeworCXZvaWQgKCp0bGJfZmx1c2hfYWxs KSh2b2lkICpjb29raWUpOworCXZvaWQgKCp0bGJfYWRkX2ZsdXNoKSh1bnNpZ25lZCBsb25nIGlv dmEsIHNpemVfdCBzaXplLCBzaXplX3QgZ3JhbnVsZSwKKwkJCSAgICAgIGJvb2wgbGVhZiwgdm9p ZCAqY29va2llKTsKKwl2b2lkICgqdGxiX3N5bmMpKHZvaWQgKmNvb2tpZSk7Cit9OworCitzdHJ1 Y3QgaW9fcGd0YWJsZV9jZmcgeworCS8qCisJICogSU9fUEdUQUJMRV9RVUlSS19BUk1fTlM6IChB Uk0gZm9ybWF0cykgU2V0IE5TIGFuZCBOU1RBQkxFIGJpdHMgaW4KKwkgKglzdGFnZSAxIFBURXMs IGZvciBoYXJkd2FyZSB3aGljaCBpbnNpc3RzIG9uIHZhbGlkYXRpbmcgdGhlbQorCSAqCWV2ZW4g aW4Jbm9uLXNlY3VyZSBzdGF0ZSB3aGVyZSB0aGV5IHNob3VsZCBub3JtYWxseSBiZSBpZ25vcmVk LgorCSAqCisJICogSU9fUEdUQUJMRV9RVUlSS19OT19QRVJNUzogSWdub3JlIHRoZSBJT01NVV9S RUFELCBJT01NVV9XUklURSBhbmQKKwkgKglJT01NVV9OT0VYRUMgZmxhZ3MgYW5kIG1hcCBldmVy eXRoaW5nIHdpdGggZnVsbCBhY2Nlc3MsIGZvcgorCSAqCWhhcmR3YXJlIHdoaWNoIGRvZXMgbm90 IGltcGxlbWVudCB0aGUgcGVybWlzc2lvbnMgb2YgYSBnaXZlbgorCSAqCWZvcm1hdCwgYW5kL29y IHJlcXVpcmVzIHNvbWUgZm9ybWF0LXNwZWNpZmljIGRlZmF1bHQgdmFsdWUuCisJICoKKwkgKiBJ T19QR1RBQkxFX1FVSVJLX1RMQklfT05fTUFQOiBJZiB0aGUgZm9ybWF0IGZvcmJpZHMgY2FjaGlu ZyBpbnZhbGlkCisJICoJKHVubWFwcGVkKSBlbnRyaWVzIGJ1dCB0aGUgaGFyZHdhcmUgbWlnaHQg ZG8gc28gYW55d2F5LCBwZXJmb3JtCisJICoJVExCIG1haW50ZW5hbmNlIHdoZW4gbWFwcGluZyBh cyB3ZWxsIGFzIHdoZW4gdW5tYXBwaW5nLgorCSAqCisJICogSU9fUEdUQUJMRV9RVUlSS19BUk1f TVRLXzRHQjogKEFSTSB2N3MgZm9ybWF0KSBTZXQgYml0IDkgaW4gYWxsCisJICoJUFRFcywgZm9y IE1lZGlhdGVrIElPTU1VcyB3aGljaCB0cmVhdCBpdCBhcyBhIDMzcmQgYWRkcmVzcyBiaXQKKwkg Kgl3aGVuIHRoZSBTb0MgaXMgaW4gIjRHQiBtb2RlIiBhbmQgdGhleSBjYW4gb25seSBhY2Nlc3Mg dGhlIGhpZ2gKKwkgKglyZW1hcCBvZiBEUkFNICgweDFfMDAwMDAwMDAgdG8gMHgxX2ZmZmZmZmZm KS4KKwkgKgorCSAqIElPX1BHVEFCTEVfUVVJUktfTk9fRE1BOiBHdWFyYW50ZWVzIHRoYXQgdGhl IHRhYmxlcyB3aWxsIG9ubHkgZXZlcgorCSAqCWJlIGFjY2Vzc2VkIGJ5IGEgZnVsbHkgY2FjaGUt Y29oZXJlbnQgSU9NTVUgb3IgQ1BVIChlLmcuIGZvciBhCisJICoJc29mdHdhcmUtZW11bGF0ZWQg SU9NTVUpLCBzdWNoIHRoYXQgcGFnZXRhYmxlIHVwZGF0ZXMgbmVlZCBub3QKKwkgKgliZSB0cmVh dGVkIGFzIGV4cGxpY2l0IERNQSBkYXRhLgorCSAqLworCSNkZWZpbmUgSU9fUEdUQUJMRV9RVUlS S19BUk1fTlMJCUJJVCgwKQorCSNkZWZpbmUgSU9fUEdUQUJMRV9RVUlSS19OT19QRVJNUwlCSVQo MSkKKwkjZGVmaW5lIElPX1BHVEFCTEVfUVVJUktfVExCSV9PTl9NQVAJQklUKDIpCisJI2RlZmlu ZSBJT19QR1RBQkxFX1FVSVJLX0FSTV9NVEtfNEdCCUJJVCgzKQorCSNkZWZpbmUgSU9fUEdUQUJM RV9RVUlSS19OT19ETUEJCUJJVCg0KQorCXVuc2lnbmVkIGxvbmcJCQlxdWlya3M7CisJdW5zaWdu ZWQgbG9uZwkJCXBnc2l6ZV9iaXRtYXA7CisJdW5zaWduZWQgaW50CQkJaWFzOworCXVuc2lnbmVk IGludAkJCW9hczsKKwljb25zdCBzdHJ1Y3QgaW9tbXVfZ2F0aGVyX29wcwkqdGxiOworCXN0cnVj dCBkZXZpY2UJCQkqaW9tbXVfZGV2OworCisJLyogTG93LWxldmVsIGRhdGEgc3BlY2lmaWMgdG8g dGhlIHRhYmxlIGZvcm1hdCAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU2NAl0dGJyWzJd OworCQkJdTY0CXRjcjsKKwkJCXU2NAltYWlyWzJdOworCQl9IGFybV9scGFlX3MxX2NmZzsKKwor CQlzdHJ1Y3QgeworCQkJdTY0CXZ0dGJyOworCQkJdTY0CXZ0Y3I7CisJCX0gYXJtX2xwYWVfczJf Y2ZnOworCisJCXN0cnVjdCB7CisJCQl1MzIJdHRiclsyXTsKKwkJCXUzMgl0Y3I7CisJCQl1MzIJ bm1ycjsKKwkJCXUzMglwcnJyOworCQl9IGFybV92N3NfY2ZnOworCX07Cit9OworCitlbnVtIGlv X3BndGFibGVfZm10IHsKKwlBUk1fMzJfTFBBRV9TMSwKKwlBUk1fMzJfTFBBRV9TMiwKKwlBUk1f NjRfTFBBRV9TMSwKKwlBUk1fNjRfTFBBRV9TMiwKKwlBUk1fVjdTLAorCUlPX1BHVEFCTEVfTlVN X0ZNVFMsCit9OworCisvKgorICogWGVuOiBUaGUgcGd0YWJsZV9vcHMgYXJlIHVzZWQgYnkgdGhl IFMxIHRyYW5zbGF0aW9ucywgc28gcmV0dXJuIHRoZSBkdW1teQorICogYWRkcmVzcy4KKyAqLwor I2RlZmluZSBhbGxvY19pb19wZ3RhYmxlX29wcyhmLCBjLCBvKSAoKHN0cnVjdCBpb19wZ3RhYmxl X29wcyAqKTB4MCkKKyNkZWZpbmUgZnJlZV9pb19wZ3RhYmxlX29wcyhvKQorCisvKiBYZW46IERl ZmluZSB3cmFwcGVyIGZvciByZXF1ZXN0aW5nIElSUXMgKi8KKyNkZWZpbmUgSVJRRl9PTkVTSE9U IDAKKwordHlwZWRlZiB2b2lkICgqaXJxX2hhbmRsZXJfdCkoaW50LCB2b2lkICosIHN0cnVjdCBj cHVfdXNlcl9yZWdzICopOworCitzdGF0aWMgaW5saW5lIGludCBkZXZtX3JlcXVlc3RfaXJxKHN0 cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlycSwKKwkJCQkgICBpcnFfaGFuZGxlcl90 IGhhbmRsZXIsIHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MsCisJCQkJICAgY29uc3QgY2hhciAqZGV2 bmFtZSwgdm9pZCAqZGV2X2lkKQoreworCS8qCisJICogU01NVXYzIGltcGxlbWVudGF0aW9uIGNh biBzdXBwb3J0IHdpcmVkIGludGVycnVwdCBvdXRwdXRzIHRoYXQgYXJlCisJICogZWRnZS10cmln Z2VyZWQuIFNldCB0aGUgaXJxIHR5cGUgYXMgcGVyIHRoZSBzcGVjLgorCSAqLworCWlycV9zZXRf dHlwZShpcnEsIElSUV9UWVBFX0VER0VfQk9USCk7CisJcmV0dXJuIHJlcXVlc3RfaXJxKGlycSwg aXJxZmxhZ3MsIGhhbmRsZXIsIGRldm5hbWUsIGRldl9pZCk7Cit9CisKKy8qCisgKiBYZW4gZG9l cyBub3QgaGF2ZSBhIGNvbmNlcHQgb2YgdGhyZWFkZWQgaXJxLCBidXQgZXZlbnR1YWxseSB3ZSBj YW4gdXNlCisgKiB0YXNrbGV0cyB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uLgor ICovCitpbnQgZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVu c2lnbmVkIGludCBpcnEsIGlycV9oYW5kbGVyX3QgaGFuZGxlciwKKwkJCSAgICAgIGlycV9oYW5k bGVyX3QgdGhyZWFkX2ZuLCB1bnNpZ25lZCBsb25nIGlycWZsYWdzLAorCQkJICAgICAgY29uc3Qg Y2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKQoreworCXJldHVybiBkZXZtX3JlcXVlc3RfaXJx KGRldiwgaXJxLCB0aHJlYWRfZm4sIGlycWZsYWdzLCBkZXZuYW1lLCBkZXZfaWQpOworfQorCisv KiBYZW46IFRoZSBtdXRleCBpcyB1c2VkIG9ubHkgZHVyaW5nIGluaXRpYWxpemF0aW9uIHNvIHRo ZSB0eXBlY2FzdCBpcyBzYWZlICovCisjZGVmaW5lIG11dGV4IHNwaW5sb2NrCisjZGVmaW5lIG11 dGV4X2luaXQgc3Bpbl9sb2NrX2luaXQKKyNkZWZpbmUgbXV0ZXhfbG9jayBzcGluX2xvY2sKKyNk ZWZpbmUgbXV0ZXhfdW5sb2NrIHNwaW5fdW5sb2NrCisKKyNkZWZpbmUgcmVhZHhfcG9sbF90aW1l b3V0KG9wLCBhZGRyLCB2YWwsIGNvbmQsIHNsZWVwX3VzLCB0aW1lb3V0X3VzKSBcCisoeyBcCisJ c190aW1lX3QgZGVhZGxpbmUgPSBOT1coKSArIE1JQ1JPU0VDUyh0aW1lb3V0X3VzKTsgXAorCWZv ciAoOzspIHsgXAorCQkodmFsKSA9IG9wKGFkZHIpOyBcCisJCWlmIChjb25kKSBcCisJCQlicmVh azsgXAorCQlpZiAoTk9XKCkgPiBkZWFkbGluZSkgeyBcCisJCQkodmFsKSA9IG9wKGFkZHIpOyBc CisJCQlicmVhazsgXAorCQl9IFwKKwl1ZGVsYXkoc2xlZXBfdXMpOyBcCisJfSBcCisJKGNvbmQp ID8gMCA6IC1FVElNRURPVVQ7IFwKK30pCisKKyNkZWZpbmUgcmVhZGxfcmVsYXhlZF9wb2xsX3Rp bWVvdXQoYWRkciwgdmFsLCBjb25kLCBkZWxheV91cywgdGltZW91dF91cykgXAorCXJlYWR4X3Bv bGxfdGltZW91dChyZWFkbF9yZWxheGVkLCBhZGRyLCB2YWwsIGNvbmQsIGRlbGF5X3VzLCB0aW1l b3V0X3VzKQorCisjZGVmaW5lIFZBX0JJVFMgMCAvKiBPbmx5IG5lZWRlZCBmb3IgUzEgdHJhbnNs YXRpb25zICovCiAKIC8qIE1NSU8gcmVnaXN0ZXJzICovCiAjZGVmaW5lIEFSTV9TTU1VX0lEUjAJ CQkweDAKQEAgLTQzMyw2ICs4MTksNyBAQCBlbnVtIHByaV9yZXNwIHsKIAlQUklfUkVTUF9TVUND LAogfTsKIAorI2lmIDAgLyogWGVuOiBObyBNU0kgc3VwcG9ydCBpbiB0aGlzIGl0ZXJhdGlvbiAq LwogZW51bSBhcm1fc21tdV9tc2lfaW5kZXggewogCUVWVFFfTVNJX0lOREVYLAogCUdFUlJPUl9N U0lfSU5ERVgsCkBAIC00NTcsNiArODQ0LDcgQEAgc3RhdGljIHBoeXNfYWRkcl90IGFybV9zbW11 X21zaV9jZmdbQVJNX1NNTVVfTUFYX01TSVNdWzNdID0gewogCQlBUk1fU01NVV9QUklRX0lSUV9D RkcyLAogCX0sCiB9OworI2VuZGlmCiAKIHN0cnVjdCBhcm1fc21tdV9jbWRxX2VudCB7CiAJLyog Q29tbW9uIGZpZWxkcyAqLwpAQCAtNTYxLDYgKzk0OSw4IEBAIHN0cnVjdCBhcm1fc21tdV9zMl9j ZmcgewogCXUxNgkJCQl2bWlkOwogCXU2NAkJCQl2dHRicjsKIAl1NjQJCQkJdnRjcjsKKwkvKiBY ZW46IERvbWFpbiBhc3NvY2lhdGVkIHRvIHRoaXMgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBk b21haW4JCQkqZG9tYWluOwogfTsKIAogc3RydWN0IGFybV9zbW11X3N0cnRhYl9lbnQgewpAQCAt NjM1LDkgKzEwMjUsMjEgQEAgc3RydWN0IGFybV9zbW11X2RldmljZSB7CiAJc3RydWN0IGFybV9z bW11X3N0cnRhYl9jZmcJc3RydGFiX2NmZzsKIAogCS8qIElPTU1VIGNvcmUgY29kZSBoYW5kbGUg Ki8KKyNpZiAwIC8qWGVuOiBHZW5lcmljIGlvbW11X2RldmljZSByZWYgbm90IG5lZWRlZCBoZXJl ICovCiAJc3RydWN0IGlvbW11X2RldmljZQkJaW9tbXU7CisjZW5kaWYKKwkvKiBYZW46IE5lZWQg dG8ga2VlcCBhIGxpc3Qgb2YgU01NVSBkZXZpY2VzICovCisJc3RydWN0IGxpc3RfaGVhZCAgICAg ICAgICAgICAgICBkZXZpY2VzOwogfTsKIAorLyogWGVuOiBLZWVwIGEgbGlzdCBvZiBkZXZpY2Vz IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhh cm1fc21tdV9kZXZpY2VzX2xvY2spOworc3RhdGljIExJU1RfSEVBRChhcm1fc21tdV9kZXZpY2Vz KTsKKy8qIFhlbjogSGVscGVyIGZvciBmaW5kaW5nIGEgZGV2aWNlIHVzaW5nIGZ3bm9kZSAqLwor c3RhdGljCitzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICphcm1fc21tdV9nZXRfYnlfZndub2RlKHN0 cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpOworCisKIC8qIFNNTVUgcHJpdmF0ZSBkYXRhIGZv ciBlYWNoIG1hc3RlciAqLwogc3RydWN0IGFybV9zbW11X21hc3Rlcl9kYXRhIHsKIAlzdHJ1Y3Qg YXJtX3NtbXVfZGV2aWNlCQkqc21tdTsKQEAgLTEyMzIsNyArMTYzNCw3IEBAIHN0YXRpYyB2b2lk IGFybV9zbW11X2hhbmRsZV9wcHIoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTY0ICpl dnQpCiAKIAlkZXZfaW5mbyhzbW11LT5kZXYsICJ1bmV4cGVjdGVkIFBSSSByZXF1ZXN0IHJlY2Vp dmVkOlxuIik7CiAJZGV2X2luZm8oc21tdS0+ZGV2LAotCQkgIlx0c2lkIDB4JTA4eC4weCUwNXg6 IFsldSVzXSAlc3ByaXZpbGVnZWQgJXMlcyVzIGFjY2VzcyBhdCBpb3ZhIDB4JTAxNmxseFxuIiwK KwkJICJcdHNpZCAweCUwOHguMHglMDV4OiBbJXUlc10gJXNwcml2aWxlZ2VkICVzJXMlcyBhY2Nl c3MgYXQgaW92YSAlIyIgUFJJeDY0ICJcbiIsCiAJCSBzaWQsIHNzaWQsIGdycGlkLCBsYXN0ID8g IkwiIDogIiIsCiAJCSBldnRbMF0gJiBQUklRXzBfUEVSTV9QUklWID8gIiIgOiAidW4iLAogCQkg ZXZ0WzBdICYgUFJJUV8wX1BFUk1fUkVBRCA/ICJSIiA6ICIiLApAQCAtMTM0Niw2ICsxNzQ4LDgg QEAgc3RhdGljIGlycXJldHVybl90IGFybV9zbW11X2NvbWJpbmVkX2lycV9oYW5kbGVyKGludCBp cnEsIHZvaWQgKmRldikKIHsKIAlhcm1fc21tdV9nZXJyb3JfaGFuZGxlcihpcnEsIGRldik7CiAJ YXJtX3NtbXVfY21kcV9zeW5jX2hhbmRsZXIoaXJxLCBkZXYpOworCS8qWGVuOiBObyB0aHJlYWRl ZCBpcnEuIFNvIGNhbGwgdGhlIHJlcXVpcmVkIGZ1bmN0aW9uIGZyb20gaGVyZSAqLworCWFybV9z bW11X2NvbWJpbmVkX2lycV90aHJlYWQoaXJxLCBkZXYpOwogCXJldHVybiBJUlFfV0FLRV9USFJF QUQ7CiB9CiAKQEAgLTEzNTgsNiArMTc2Miw0NiBAQCBzdGF0aWMgdm9pZCBfX2FybV9zbW11X3Rs Yl9zeW5jKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCiAJYXJtX3NtbXVfY21kcV9pc3N1 ZV9jbWQoc21tdSwgJmNtZCk7CiB9CiAKKy8qCisgKiBYZW46IERlZmluZSB0aGUgSVJRIGhhbmRs ZXJzIGZvciB4ZW4uIFRoZSBsaW51eCBmdW5jdGlvbnMgd291bGQgYmUKKyAqIG1vZGlmaWVkIHRv IHVzZSB0aGUgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIGZvbGxvd2luZyBjb2RlLiAKKyAqLwor c3RhdGljIHZvaWQgYXJtX3NtbXVfZXZ0cV90aHJlYWRfeGVuKGludCBpcnEsIHZvaWQgKmRldiwK KwkJCQkgICAgICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCit7CisJYXJtX3NtbXVfZXZ0 cV90aHJlYWQoaXJxLCBkZXYpOworfQorCitzdGF0aWMgdm9pZCBhcm1fc21tdV9wcmlxX3RocmVh ZF94ZW4oaW50IGlycSwgdm9pZCAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVn cyAqcmVncykKK3sKKwlhcm1fc21tdV9wcmlxX3RocmVhZChpcnEsIGRldik7Cit9CisKK3N0YXRp YyB2b2lkIGFybV9zbW11X2NtZHFfc3luY19oYW5kbGVyX3hlbihpbnQgaXJxLCB2b2lkICpkZXYs CisJCQkJICAgICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQoreworCWFybV9zbW11X2Nt ZHFfc3luY19oYW5kbGVyKGlycSwgZGV2KTsKK30KKworc3RhdGljIHZvaWQgYXJtX3NtbXVfZ2Vy cm9yX2hhbmRsZXJfeGVuKGludCBpcnEsIHZvaWQgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGNw dV91c2VyX3JlZ3MgKnJlZ3MpCit7CisJYXJtX3NtbXVfZ2Vycm9yX2hhbmRsZXIoaXJxLCBkZXYp OworfQorCitzdGF0aWMgdm9pZCBhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFuZGxlcl94ZW4oaW50 IGlycSwgdm9pZCAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykK K3sKKwlhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFuZGxlcihpcnEsIGRldik7Cit9CisKKyNkZWZp bmUgYXJtX3NtbXVfZXZ0cV90aHJlYWQgYXJtX3NtbXVfZXZ0cV90aHJlYWRfeGVuCisjZGVmaW5l IGFybV9zbW11X3ByaXFfdGhyZWFkIGFybV9zbW11X3ByaXFfdGhyZWFkX3hlbgorI2RlZmluZSBh cm1fc21tdV9jbWRxX3N5bmNfaGFuZGxlciBhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxlcl94ZW4K KyNkZWZpbmUgYXJtX3NtbXVfZ2Vycm9yX2hhbmRsZXIgYXJtX3NtbXVfZ2Vycm9yX2hhbmRsZXJf eGVuCisjZGVmaW5lIGFybV9zbW11X2NvbWJpbmVkX2lycV9oYW5kbGVyIGFybV9zbW11X2NvbWJp bmVkX2lycV9oYW5kbGVyX3hlbgorCiBzdGF0aWMgdm9pZCBhcm1fc21tdV90bGJfc3luYyh2b2lk ICpjb29raWUpCiB7CiAJc3RydWN0IGFybV9zbW11X2RvbWFpbiAqc21tdV9kb21haW4gPSBjb29r aWU7CkBAIC0xNDE1LDYgKzE4NTksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X2dhdGhl cl9vcHMgYXJtX3NtbXVfZ2F0aGVyX29wcyA9IHsKIAkudGxiX3N5bmMJPSBhcm1fc21tdV90bGJf c3luYywKIH07CiAKKyNpZiAwIC8qWGVuOiBVbnVzZWQgZnVuY3Rpb25hbGl0eSAqLwogLyogSU9N TVUgQVBJICovCiBzdGF0aWMgYm9vbCBhcm1fc21tdV9jYXBhYmxlKGVudW0gaW9tbXVfY2FwIGNh cCkKIHsKQEAgLTE0MjcsNiArMTg3Miw3IEBAIHN0YXRpYyBib29sIGFybV9zbW11X2NhcGFibGUo ZW51bSBpb21tdV9jYXAgY2FwKQogCQlyZXR1cm4gZmFsc2U7CiAJfQogfQorI2VuZGlmCiAKIHN0 YXRpYyBzdHJ1Y3QgaW9tbXVfZG9tYWluICphcm1fc21tdV9kb21haW5fYWxsb2ModW5zaWduZWQg dHlwZSkKIHsKQEAgLTE1NDYsOSArMTk5MiwxNiBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RvbWFp bl9maW5hbGlzZV9zMihzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFpbiwKIAlpZiAo dm1pZCA8IDApCiAJCXJldHVybiB2bWlkOwogCi0JY2ZnLT52bWlkCT0gKHUxNil2bWlkOwotCWNm Zy0+dnR0YnIJPSBwZ3RibF9jZmctPmFybV9scGFlX3MyX2NmZy52dHRicjsKLQljZmctPnZ0Y3IJ PSBwZ3RibF9jZmctPmFybV9scGFlX3MyX2NmZy52dGNyOworCS8qCisJICogWGVuOiBHZXQgdGhl IHR0YnIgYW5kIHZ0Y3IgdmFsdWVzCisJICogdnR0YnI6IFRoaXMgaXMgYSBzaGFyZWQgdmFsdWUg d2l0aCB0aGUgZG9tYWluIHBhZ2UgdGFibGUKKwkgKiB2dGNyOiBUaGUgVENSIHNldHRpbmdzIGFy ZSB0aGUgc2FtZSBhcyBDUFUgc2luY2UgdGhlIHBhZ2UKKwkgKiB0YWJsZXMgYXJlIHNoYXJlZAor CSAqLworCisJY2ZnLT52bWlkCT0gdm1pZDsKKwljZmctPnZ0dGJyCT0gcGFnZV90b19tYWRkcihj ZmctPmRvbWFpbi0+YXJjaC5wMm0ucm9vdCk7CisJY2ZnLT52dGNyCT0gUkVBRF9TWVNSRUczMihW VENSX0VMMikgJiBTVFJUQUJfU1RFXzJfVlRDUl9NQVNLOwogCXJldHVybiAwOwogfQogCkBAIC0x NjA0LDYgKzIwNTcsNyBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RvbWFpbl9maW5hbGlzZShzdHJ1 Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCiAJaWYgKHNtbXUtPmZlYXR1cmVzICYgQVJNX1NNTVVf RkVBVF9DT0hFUkVOQ1kpCiAJCXBndGJsX2NmZy5xdWlya3MgPSBJT19QR1RBQkxFX1FVSVJLX05P X0RNQTsKIAorCS8qIFhlbjogcGd0Ymxfb3BzIGdldHMgYW4gaW52YWxpZCBhZGRyZXNzICovCiAJ cGd0Ymxfb3BzID0gYWxsb2NfaW9fcGd0YWJsZV9vcHMoZm10LCAmcGd0YmxfY2ZnLCBzbW11X2Rv bWFpbik7CiAJaWYgKCFwZ3RibF9vcHMpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTcyMSw2ICsy MTc1LDcgQEAgb3V0X3VubG9jazoKIAlyZXR1cm4gcmV0OwogfQogCisjaWYgMCAvKiBYZW46IFVu dXNlZCBmdW5jdGlvbmFsaXR5ICovCiBzdGF0aWMgaW50IGFybV9zbW11X21hcChzdHJ1Y3QgaW9t bXVfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW92YSwKIAkJCXBoeXNfYWRkcl90IHBh ZGRyLCBzaXplX3Qgc2l6ZSwgaW50IHByb3QpCiB7CkBAIC0xNzcyLDYgKzIyMjcsNyBAQCBzdHJ1 Y3QgYXJtX3NtbXVfZGV2aWNlICphcm1fc21tdV9nZXRfYnlfZndub2RlKHN0cnVjdCBmd25vZGVf aGFuZGxlICpmd25vZGUpCiAJcHV0X2RldmljZShkZXYpOwogCXJldHVybiBkZXYgPyBkZXZfZ2V0 X2RydmRhdGEoZGV2KSA6IE5VTEw7CiB9CisjZW5kaWYKIAogc3RhdGljIGJvb2wgYXJtX3NtbXVf c2lkX2luX3JhbmdlKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHUzMiBzaWQpCiB7CkBA IC0xNzgzLDcgKzIyMzksMTQgQEAgc3RhdGljIGJvb2wgYXJtX3NtbXVfc2lkX2luX3JhbmdlKHN0 cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHUzMiBzaWQpCiAJcmV0dXJuIHNpZCA8IGxpbWl0 OwogfQogCisvKiBYZW46IFVudXNlZCAqLworI2lmIDAKIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfb3Bz IGFybV9zbW11X29wczsKKyNlbmRpZgorCisvKiBYZW46IFJlZGVmaW5lIGFybV9zbW11X29wcyB0 byB3aGF0IGZ3c3BlYyBzaG91bGQgZXZhbHVhdGUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9t bXVfb3BzIGFybV9zbW11X2lvbW11X29wczsKKyNkZWZpbmUgYXJtX3NtbXVfb3BzIGFybV9zbW11 X2lvbW11X29wcwogCiBzdGF0aWMgaW50IGFybV9zbW11X2FkZF9kZXZpY2Uoc3RydWN0IGRldmlj ZSAqZGV2KQogewpAQCAtMTc5MSw4ICsyMjU0LDExIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfYWRk X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJc3RydWN0IGFybV9zbW11X2RldmljZSAqc21t dTsKIAlzdHJ1Y3QgYXJtX3NtbXVfbWFzdGVyX2RhdGEgKm1hc3RlcjsKIAlzdHJ1Y3QgaW9tbXVf ZndzcGVjICpmd3NwZWMgPSBkZXYtPmlvbW11X2Z3c3BlYzsKKyNpZiAwIC8qWGVuOiBpb21tdV9n cm91cCBpcyBub3QgbmVlZGVkICovCiAJc3RydWN0IGlvbW11X2dyb3VwICpncm91cDsKKyNlbmRp ZgogCisJLyogWGVuOiBmd3NwZWMtPm9wcyBhcmUgbm90IG5lZWRlZCAqLwogCWlmICghZndzcGVj IHx8IGZ3c3BlYy0+b3BzICE9ICZhcm1fc21tdV9vcHMpCiAJCXJldHVybiAtRU5PREVWOwogCS8q CkBAIC0xODMwLDYgKzIyOTYsMTEgQEAgc3RhdGljIGludCBhcm1fc21tdV9hZGRfZGV2aWNlKHN0 cnVjdCBkZXZpY2UgKmRldikKIAkJfQogCX0KIAorLyoKKyAqIFhlbjogRG8gbm90IG5lZWQgYW4g aW9tbXUgZ3JvdXAgYXMgdGhlIHN0cmVhbSBkYXRhIGlzIGNhcnJpZWQgYnkgdGhlIFNNTVUKKyAq IG1hc3RlciBkZXZpY2Ugb2JqZWN0CisgKi8KKyNpZiAwCiAJZ3JvdXAgPSBpb21tdV9ncm91cF9n ZXRfZm9yX2RldihkZXYpOwogCWlmICghSVNfRVJSKGdyb3VwKSkgewogCQlpb21tdV9ncm91cF9w dXQoZ3JvdXApOwpAQCAtMTgzNyw4ICsyMzA4LDE2IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfYWRk X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJfQogCiAJcmV0dXJuIFBUUl9FUlJfT1JfWkVS Tyhncm91cCk7CisjZW5kaWYKKwlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFhlbjogV2UgY2FuIHBv dGVudGlhbGx5IHN1cHBvcnQgdGhpcyBmdW5jdGlvbiBhbmQgZGVzdHJveSBhIGRldmljZS4gVGhp cworICogd2lsbCBiZSByZWxldmFudCBmb3IgUENJIGhvdHBsdWcuIFNvLCB3aWxsIGJlIGltcGxl bWVudGVkIGFzIG5lZWRlZCBhZnRlcgorICogcGFzc3Rocm91Z2ggc3VwcG9ydCBpcyBhdmFpbGFi bGUuCisgKi8KKyNpZiAwCiBzdGF0aWMgdm9pZCBhcm1fc21tdV9yZW1vdmVfZGV2aWNlKHN0cnVj dCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMgPSBkZXYtPmlv bW11X2Z3c3BlYzsKQEAgLTE5NzQsNiArMjQ1Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfb3Bz IGFybV9zbW11X29wcyA9IHsKIAkucHV0X3Jlc3ZfcmVnaW9ucwk9IGFybV9zbW11X3B1dF9yZXN2 X3JlZ2lvbnMsCiAJLnBnc2l6ZV9iaXRtYXAJCT0gLTFVTCwgLyogUmVzdHJpY3RlZCBkdXJpbmcg ZGV2aWNlIGF0dGFjaCAqLwogfTsKKyNlbmRpZgogCiAvKiBQcm9iaW5nIGFuZCBpbml0aWFsaXNh dGlvbiBmdW5jdGlvbnMgKi8KIHN0YXRpYyBpbnQgYXJtX3NtbXVfaW5pdF9vbmVfcXVldWUoc3Ry dWN0IGFybV9zbW11X2RldmljZSAqc21tdSwKQEAgLTIxODIsNiArMjY2Miw3IEBAIHN0YXRpYyBp bnQgYXJtX3NtbXVfdXBkYXRlX2dicGEoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMy IHNldCwgdTMyIGNscikKIAkJCQkJICAxLCBBUk1fU01NVV9QT0xMX1RJTUVPVVRfVVMpOwogfQog CisjaWYgMCAvKiBYZW46IFRoZXJlIGlzIG5vIE1TSSBzdXBwb3J0IGFzIHlldCAqLwogc3RhdGlj IHZvaWQgYXJtX3NtbXVfZnJlZV9tc2lzKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGRldmljZSAq ZGV2ID0gZGF0YTsKQEAgLTIyNDcsMTIgKzI3MjgsMTUgQEAgc3RhdGljIHZvaWQgYXJtX3NtbXVf c2V0dXBfbXNpcyhzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQogCS8qIEFkZCBjYWxsYmFj ayB0byBmcmVlIE1TSXMgb24gdGVhcmRvd24gKi8KIAlkZXZtX2FkZF9hY3Rpb24oZGV2LCBhcm1f c21tdV9mcmVlX21zaXMsIGRldik7CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgYXJtX3NtbXVf c2V0dXBfdW5pcXVlX2lycXMoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKIHsKIAlpbnQg aXJxLCByZXQ7CiAKKyNpZiAwIC8qWGVuOiBDYW5ub3Qgc2V0dXAgbXNpcyBmb3Igbm93ICovCiAJ YXJtX3NtbXVfc2V0dXBfbXNpcyhzbW11KTsKKyNlbmRpZgogCiAJLyogUmVxdWVzdCBpbnRlcnJ1 cHQgbGluZXMgKi8KIAlpcnEgPSBzbW11LT5ldnRxLnEuaXJxOwpAQCAtMjMxNiw5ICsyODAwLDEz IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfc2V0dXBfaXJxcyhzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNl ICpzbW11KQogCQkgKiBDYXZpdW0gVGh1bmRlclgyIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgbm90 IHN1cHBvcnQgdW5pcXVlCiAJCSAqIGlycSBsaW5lcy4gVXNlIHNpbmdsZSBpcnEgbGluZSBmb3Ig YWxsIHRoZSBTTU1VdjMgaW50ZXJydXB0cy4KIAkJICovCi0JCXJldCA9IGRldm1fcmVxdWVzdF90 aHJlYWRlZF9pcnEoc21tdS0+ZGV2LCBpcnEsCisJCS8qCisJCSAqIFhlbjogRG9lcyBub3Qgc3Vw cG9ydCB0aHJlYWRlZCBpcnFzLCBzbyBzZXJpYWxpc2UgdGhlIHNldHVwLgorCQkgKiBUaGlzIGlz IHRoZSBzYW1lIGZvciBwcmlzIGFuZCBldmVudCBpbnRlcnJ1cHQgbGluZXMgb24gb3RoZXIKKwkJ ICogc3lzdGVtcworCQkgKi8KKwkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShzbW11LT5kZXYsIGly cSwKIAkJCQkJYXJtX3NtbXVfY29tYmluZWRfaXJxX2hhbmRsZXIsCi0JCQkJCWFybV9zbW11X2Nv bWJpbmVkX2lycV90aHJlYWQsCiAJCQkJCUlSUUZfT05FU0hPVCwKIAkJCQkJImFybS1zbW11LXYz LWNvbWJpbmVkLWlycSIsIHNtbXUpOwogCQlpZiAocmV0IDwgMCkKQEAgLTI1NDIsOCArMzAzMCwx NCBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9od19wcm9iZShzdHJ1Y3QgYXJtX3NtbXVf ZGV2aWNlICpzbW11KQogCQlzbW11LT5mZWF0dXJlcyB8PSBBUk1fU01NVV9GRUFUX1NUQUxMUzsK IAl9CiAKKy8qCisgKiBYZW46IEJsb2NrIHN0YWdlIDEgdHJhbnNsYXRpb25zLiBCeSBkb2luZyB0 aGlzIGhlcmUgd2UgZG8gbm90IG5lZWQgdG8gc2V0IHRoZQorICogZG9tYWluLT5zdGFnZSBleHBs aWNpdGx5LgorICovCisjaWYgMAogCWlmIChyZWcgJiBJRFIwX1MxUCkKIAkJc21tdS0+ZmVhdHVy ZXMgfD0gQVJNX1NNTVVfRkVBVF9UUkFOU19TMTsKKyNlbmRpZgogCiAJaWYgKHJlZyAmIElEUjBf UzJQKQogCQlzbW11LT5mZWF0dXJlcyB8PSBBUk1fU01NVV9GRUFUX1RSQU5TX1MyOwpAQCAtMjYx NiwxMCArMzExMCwxMiBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9od19wcm9iZShzdHJ1 Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQogCWlmIChyZWcgJiBJRFI1X0dSQU40SykKIAkJc21t dS0+cGdzaXplX2JpdG1hcCB8PSBTWl80SyB8IFNaXzJNIHwgU1pfMUc7CiAKKyNpZiAwIC8qIFhl bjogU01NVSBvcHMgZG8gbm90IGhhdmUgYSBwZ3NpemVfYml0bWFwIG1lbWJlciBmb3IgWGVuICov CiAJaWYgKGFybV9zbW11X29wcy5wZ3NpemVfYml0bWFwID09IC0xVUwpCiAJCWFybV9zbW11X29w cy5wZ3NpemVfYml0bWFwID0gc21tdS0+cGdzaXplX2JpdG1hcDsKIAllbHNlCiAJCWFybV9zbW11 X29wcy5wZ3NpemVfYml0bWFwIHw9IHNtbXUtPnBnc2l6ZV9iaXRtYXA7CisjZW5kaWYKIAogCS8q IE91dHB1dCBhZGRyZXNzIHNpemUgKi8KIAlzd2l0Y2ggKHJlZyAmIElEUjVfT0FTX01BU0sgPDwg SURSNV9PQVNfU0hJRlQpIHsKQEAgLTI2ODAsNyArMzE3Niw4IEBAIHN0YXRpYyBpbnQgYXJtX3Nt bXVfZGV2aWNlX2FjcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSBzbW11LT5kZXY7CiAJc3RydWN0IGFjcGlfaW9ydF9ub2RlICpub2Rl OwogCi0Jbm9kZSA9ICooc3RydWN0IGFjcGlfaW9ydF9ub2RlICoqKWRldl9nZXRfcGxhdGRhdGEo ZGV2KTsKKwkvKiBYZW46IE1vZGlmaWNhdGlvbiB0byBnZXQgaW9ydF9ub2RlICovCisJbm9kZSA9 IChzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKilkZXYtPmFjcGlfbm9kZTsKIAogCS8qIFJldHJpZXZl IFNNTVV2MyBzcGVjaWZpYyBkYXRhICovCiAJaW9ydF9zbW11ID0gKHN0cnVjdCBhY3BpX2lvcnRf c21tdV92MyAqKW5vZGUtPm5vZGVfZGF0YTsKQEAgLTI3MDMsNyArMzIwMCw3IEBAIHN0YXRpYyBp bmxpbmUgaW50IGFybV9zbW11X2RldmljZV9hY3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYsCiBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9kdF9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2LAogCQkJCSAgICBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11 KQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmljZSAq ZGV2ID0gcGRldjsKIAl1MzIgY2VsbHM7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKQEAgLTI3MTYs NiArMzIxMyw3IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2R0X3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAKIAlwYXJzZV9kcml2ZXJfb3B0aW9ucyhzbW11KTsKIAor CS8qIFhlbjogb2ZfZG1hX2lzX2NvaGVyZW50IGlzIGEgc3R1YiB0aWxsIGR0IHN1cHBvcnQgaXMg aW50cm9kdWNlZCAqLwogCWlmIChvZl9kbWFfaXNfY29oZXJlbnQoZGV2LT5vZl9ub2RlKSkKIAkJ c21tdS0+ZmVhdHVyZXMgfD0gQVJNX1NNTVVfRkVBVF9DT0hFUkVOQ1k7CiAKQEAgLTI3MzQsOSAr MzIzMiwxMSBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQogewogCWludCBpcnEsIHJldDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJl czsKKyNpZiAwIC8qWGVuOiBEbyBub3QgbmVlZCB0byBzZXR1cCBzeXNmcyAqLwogCXJlc291cmNl X3NpemVfdCBpb2FkZHI7CisjZW5kaWYKIAlzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11Owot CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0g cGRldjsvKiBYZW46IGRldiBpcyBpZ25vcmVkICovCiAJYm9vbCBieXBhc3M7CiAKIAlzbW11ID0g ZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpzbW11KSwgR0ZQX0tFUk5FTCk7CkBAIC0yNzYzLDcg KzMyNjMsOSBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQogCQlkZXZfZXJyKGRldiwgIk1NSU8gcmVnaW9uIHRvbyBzbWFsbCAo JXByKVxuIiwgcmVzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorI2lmIDAgLypYZW46IERvIG5v dCBuZWVkIHRvIHNldHVwIHN5c2ZzICovCiAJaW9hZGRyID0gcmVzLT5zdGFydDsKKyNlbmRpZgog CiAJc21tdS0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CiAJaWYgKElT X0VSUihzbW11LT5iYXNlKSkKQEAgLTI4MDIsMTMgKzMzMDQsMTggQEAgc3RhdGljIGludCBhcm1f c21tdV9kZXZpY2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJcmV0dXJu IHJldDsKIAogCS8qIFJlY29yZCBvdXIgcHJpdmF0ZSBkZXZpY2Ugc3RydWN0dXJlICovCisJLyog WGVuOiBTTU1VIGlzIG5vdCB0cmVhdGVkIGEgYSBwbGF0Zm9ybSBkZXZpY2UqLworI2lmIDAKIAlw bGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzbW11KTsKKyNlbmRpZgogCiAJLyogUmVzZXQgdGhl IGRldmljZSAqLwogCXJldCA9IGFybV9zbW11X2RldmljZV9yZXNldChzbW11LCBieXBhc3MpOwog CWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKy8qIFhlbjogTm90IGNyZWF0aW5nIGFuIElPTU1V IGRldmljZSBsaXN0IGZvciBYZW4gKi8KKyNpZiAwCiAJLyogQW5kIHdlJ3JlIHVwLiBHbyBnbyBn byEgKi8KIAlyZXQgPSBpb21tdV9kZXZpY2Vfc3lzZnNfYWRkKCZzbW11LT5pb21tdSwgZGV2LCBO VUxMLAogCQkJCSAgICAgInNtbXUzLiVwYSIsICZpb2FkZHIpOwpAQCAtMjg0NCw5ICszMzUxLDIw IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KKyNlbmRpZgorCS8qCisJ ICogWGVuOiBLZWVwIGEgbGlzdCBvZiBhbGwgcHJvYmVkIGRldmljZXMuIFRoaXMgd2lsbCBiZSB1 c2VkIHRvIHF1ZXJ5CisJICogdGhlIHNtbXUgZGV2aWNlcyBiYXNlZCBvbiB0aGUgZndub2RlLgor CSAqLworCUlOSVRfTElTVF9IRUFEKCZzbW11LT5kZXZpY2VzKTsKKwlzcGluX2xvY2soJmFybV9z bW11X2RldmljZXNfbG9jayk7CisJbGlzdF9hZGQoJnNtbXUtPmRldmljZXMsICZhcm1fc21tdV9k ZXZpY2VzKTsKKwlzcGluX3VubG9jaygmYXJtX3NtbXVfZGV2aWNlc19sb2NrKTsKIAlyZXR1cm4g MDsKIH0KIAorLyogWGVuOiBVbnVzZWQgZnVuY3Rpb24gKi8KKyNpZiAwCiBzdGF0aWMgaW50IGFy bV9zbW11X2RldmljZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlz dHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7 CkBAIC0yODYwLDYgKzMzNzgsOCBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV9kZXZpY2Vfc2h1dGRv d24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlhcm1fc21tdV9kZXZpY2VfcmVt b3ZlKHBkZXYpOwogfQorI2VuZGlmCisKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgYXJtX3NtbXVfb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImFybSxzbW11LXYz IiwgfSwKQEAgLTI4NjcsNiArMzM4Nyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl X2lkIGFybV9zbW11X29mX21hdGNoW10gPSB7CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwg YXJtX3NtbXVfb2ZfbWF0Y2gpOwogCisjaWYgMAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgYXJtX3NtbXVfZHJpdmVyID0gewogCS5kcml2ZXIJPSB7CiAJCS5uYW1lCQk9ICJhcm0tc21t dS12MyIsCkBAIC0yODgzLDMgKzM0MDQsMzE2IEBAIElPTU1VX09GX0RFQ0xBUkUoYXJtX3NtbXV2 MywgImFybSxzbW11LXYzIiwgTlVMTCk7CiBNT0RVTEVfREVTQ1JJUFRJT04oIklPTU1VIEFQSSBm b3IgQVJNIGFyY2hpdGVjdGVkIFNNTVV2MyBpbXBsZW1lbnRhdGlvbnMiKTsKIE1PRFVMRV9BVVRI T1IoIldpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29tPiIpOwogTU9EVUxFX0xJQ0VOU0Uo IkdQTCB2MiIpOworI2VuZGlmCisKKy8qKioqKiBTdGFydCBvZiBYZW4gc3BlY2lmaWMgY29kZSAq KioqKi8KKworc3RhdGljIGludCBfX211c3RfY2hlY2sgYXJtX3NtbXVfaW90bGJfZmx1c2hfYWxs KHN0cnVjdCBkb21haW4gKmQpCit7CisJc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnNtbXVf ZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7CisJc3RydWN0IGlvbW11X2RvbWFpbiAq Y2ZnOworCisJc3Bpbl9sb2NrKCZzbW11X2RvbWFpbi0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9l bnRyeShjZmcsICZzbW11X2RvbWFpbi0+Y29udGV4dHMsIGxpc3QpIHsKKwkJLyoKKwkJICogT25s eSBpbnZhbGlkYXRlIHRoZSBjb250ZXh0IHdoZW4gU01NVSBpcyBwcmVzZW50LgorCQkgKiBUaGlz IGlzIGJlY2F1c2UgdGhlIGNvbnRleHQgaW5pdGlhbGl6YXRpb24gaXMgZGVsYXllZAorCQkgKiB1 bnRpbCBhIG1hc3RlciBoYXMgYmVlbiBhZGRlZC4KKwkJICovCisJCWlmICh1bmxpa2VseSghQUND RVNTX09OQ0UoY2ZnLT5wcml2LT5zbW11KSkpCisJCQljb250aW51ZTsKKwkJYXJtX3NtbXVfdGxi X2ludl9jb250ZXh0KGNmZy0+cHJpdik7CisJfQorCXNwaW5fdW5sb2NrKCZzbW11X2RvbWFpbi0+ bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFybV9zbW11 X2lvdGxiX2ZsdXNoKHN0cnVjdCBkb21haW4gKmQsCisJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBn Zm4sCisJCQkJCSAgICAgdW5zaWduZWQgaW50IHBhZ2VfY291bnQpCit7CisJcmV0dXJuIGFybV9z bW11X2lvdGxiX2ZsdXNoX2FsbChkKTsKK30KKworc3RhdGljIHN0cnVjdCBpb21tdV9kb21haW4g KmFybV9zbW11X2dldF9kb21haW4oc3RydWN0IGRvbWFpbiAqZCwKKwkJCQkJCXN0cnVjdCBkZXZp Y2UgKmRldikKK3sKKwlzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW47CisJc3RydWN0IGFybV9z bW11X3hlbl9kb21haW4gKnhlbl9kb21haW47CisJc3RydWN0IGFybV9zbW11X2RldmljZSAqc21t dTsKKwlzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICpzbW11X2RvbWFpbjsKKworCXhlbl9kb21haW4g PSBkb21faW9tbXUoZCktPmFyY2gucHJpdjsKKworCXNtbXUgPSBhcm1fc21tdV9nZXRfYnlfZndu b2RlKGRldi0+aW9tbXVfZndzcGVjLT5pb21tdV9md25vZGUpOworCWlmICghc21tdSkKKwkJcmV0 dXJuIE5VTEw7CisKKwkvKgorCSAqIExvb3AgdGhyb3VnaCB0aGUgJnhlbl9kb21haW4tPmNvbnRl eHRzIHRvIGxvY2F0ZSBhIGNvbnRleHQKKwkgKiBhc3NpZ25lZCB0byB0aGlzIFNNTVUKKwkgKi8K KwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnhlbl9kb21haW4tPmNvbnRleHRzLCBsaXN0 KSB7CisJCXNtbXVfZG9tYWluID0gdG9fc21tdV9kb21haW4oZG9tYWluKTsKKwkJaWYgKHNtbXVf ZG9tYWluLT5zbW11ID09IHNtbXUpCisJCQlyZXR1cm4gZG9tYWluOworCX0KKworCXJldHVybiBO VUxMOworfQorCitzdGF0aWMgdm9pZCBhcm1fc21tdV9kZXN0cm95X2lvbW11X2RvbWFpbihzdHJ1 Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCit7CisJbGlzdF9kZWwoJmRvbWFpbi0+bGlzdCk7CisJ YXJtX3NtbXVfZG9tYWluX2ZyZWUoZG9tYWluKTsKK30KKworc3RhdGljIGludCBhcm1fc21tdV9h c3NpZ25fZGV2KHN0cnVjdCBkb21haW4gKmQsIHU4IGRldmZuLAorCQkJICAgICAgIHN0cnVjdCBk ZXZpY2UgKmRldiwgdTMyIGZsYWcpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGlvbW11X2Rv bWFpbiAqZG9tYWluOworCXN0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluICp4ZW5fZG9tYWluOwor CXN0cnVjdCBhcm1fc21tdV9kb21haW4gKmFybV9zbW11OworCisJeGVuX2RvbWFpbiA9IGRvbV9p b21tdShkKS0+YXJjaC5wcml2OworCisJaWYgKCFkZXYtPmFyY2hkYXRhLmlvbW11KSB7CisJCWRl di0+YXJjaGRhdGEuaW9tbXUgPSB4emFsbG9jKHN0cnVjdCBhcm1fc21tdV94ZW5fZGV2aWNlKTsK KwkJaWYgKCFkZXYtPmFyY2hkYXRhLmlvbW11KQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJ cmV0ID0gYXJtX3NtbXVfYWRkX2RldmljZShkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlzcGluX2xvY2soJnhlbl9kb21haW4tPmxvY2spOworCisJLyoKKwkgKiBDaGVjayB0byBz ZWUgaWYgYW4gaW9tbXVfZG9tYWluIGFscmVhZHkgZXhpc3RzIGZvciB0aGlzIHhlbiBkb21haW4K KwkgKiB1bmRlciB0aGUgc2FtZSBTTU1VCisJICovCisJZG9tYWluID0gYXJtX3NtbXVfZ2V0X2Rv bWFpbihkLCBkZXYpOworCWlmICghZG9tYWluKSB7CisKKwkJZG9tYWluID0gYXJtX3NtbXVfZG9t YWluX2FsbG9jKElPTU1VX0RPTUFJTl9ETUEpOworCQlpZiAoIWRvbWFpbikgeworCQkJcmV0ID0g LUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJYXJtX3NtbXUgPSB0b19zbW11X2RvbWFp bihkb21haW4pOworCQlhcm1fc21tdS0+czJfY2ZnLmRvbWFpbiA9IGQ7CisKKwkJLyogQ2hhaW4g dGhlIG5ldyBjb250ZXh0IHRvIHRoZSBkb21haW4gKi8KKwkJbGlzdF9hZGQoJmRvbWFpbi0+bGlz dCwgJnhlbl9kb21haW4tPmNvbnRleHRzKTsKKworCX0KKworCXJldCA9IGFybV9zbW11X2F0dGFj aF9kZXYoZG9tYWluLCBkZXYpOworCWlmIChyZXQpIHsKKwkJaWYgKGRvbWFpbi0+cmVmLmNvdW50 ZXIgPT0gMCkKKwkJCWFybV9zbW11X2Rlc3Ryb3lfaW9tbXVfZG9tYWluKGRvbWFpbik7CisJfSBl bHNlIHsKKwkJYXRvbWljX2luYygmZG9tYWluLT5yZWYpOworCX0KKworb3V0OgorCXNwaW5fdW5s b2NrKCZ4ZW5fZG9tYWluLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFy bV9zbW11X2RlYXNzaWduX2RldihzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgZGV2aWNlICpkZXYp Cit7CisJc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluID0gYXJtX3NtbXVfZ2V0X2RvbWFpbihk LCBkZXYpOworCXN0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluICp4ZW5fZG9tYWluOworCXN0cnVj dCBhcm1fc21tdV9kb21haW4gKmFybV9zbW11ID0gdG9fc21tdV9kb21haW4oZG9tYWluKTsKKwor CXhlbl9kb21haW4gPSBkb21faW9tbXUoZCktPmFyY2gucHJpdjsKKworCWlmICghYXJtX3NtbXUg fHwgYXJtX3NtbXUtPnMyX2NmZy5kb21haW4gIT0gZCkgeworCQlkZXZfZXJyKGRldiwgIiBub3Qg YXR0YWNoZWQgdG8gZG9tYWluICVkXG4iLCBkLT5kb21haW5faWQpOworCQlyZXR1cm4gLUVTUkNI OworCX0KKworCXNwaW5fbG9jaygmeGVuX2RvbWFpbi0+bG9jayk7CisKKwlhcm1fc21tdV9kZXRh Y2hfZGV2KGRldik7CisJYXRvbWljX2RlYygmZG9tYWluLT5yZWYpOworCisJaWYgKGRvbWFpbi0+ cmVmLmNvdW50ZXIgPT0gMCkKKwkJYXJtX3NtbXVfZGVzdHJveV9pb21tdV9kb21haW4oZG9tYWlu KTsKKworCXNwaW5fdW5sb2NrKCZ4ZW5fZG9tYWluLT5sb2NrKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IGFybV9zbW11X3JlYXNzaWduX2RldihzdHJ1Y3QgZG9tYWluICpzLCBzdHJ1 Y3QgZG9tYWluICp0LAorCQkJCSB1OCBkZXZmbiwgIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlp bnQgcmV0ID0gMDsKKworCS8qIERvbid0IGFsbG93IHJlbWFwcGluZyBvbiBvdGhlciBkb21haW4g dGhhbiBod2RvbSAqLworCWlmICh0ICYmIHQgIT0gaGFyZHdhcmVfZG9tYWluKQorCQlyZXR1cm4g LUVQRVJNOworCisJaWYgKHQgPT0gcykKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBhcm1fc21tdV9k ZWFzc2lnbl9kZXYocywgZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHQp IHsKKwkJLyogTm8gZmxhZ3MgYXJlIGRlZmluZWQgZm9yIEFSTS4gKi8KKwkJcmV0ID0gYXJtX3Nt bXVfYXNzaWduX2Rldih0LCBkZXZmbiwgZGV2LCAwKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiBy ZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXJtX3NtbXVfaW9tbXVfZG9t YWluX2luaXQoc3RydWN0IGRvbWFpbiAqZCkKK3sKKwlzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFp biAqeGVuX2RvbWFpbjsKKworCXhlbl9kb21haW4gPSB4emFsbG9jKHN0cnVjdCBhcm1fc21tdV94 ZW5fZG9tYWluKTsKKwlpZiAoIXhlbl9kb21haW4pCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bp bl9sb2NrX2luaXQoJnhlbl9kb21haW4tPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZ4ZW5fZG9t YWluLT5jb250ZXh0cyk7CisKKwlkb21faW9tbXUoZCktPmFyY2gucHJpdiA9IHhlbl9kb21haW47 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19od2RvbV9pbml0IGFybV9zbW11X2lv bW11X2h3ZG9tX2luaXQoc3RydWN0IGRvbWFpbiAqZCkKK3sKK30KKworc3RhdGljIHZvaWQgYXJt X3NtbXVfaW9tbXVfZG9tYWluX3RlYXJkb3duKHN0cnVjdCBkb21haW4gKmQpCit7CisJc3RydWN0 IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW4gPSBkb21faW9tbXUoZCktPmFyY2gucHJp djsKKworCUFTU0VSVChsaXN0X2VtcHR5KCZ4ZW5fZG9tYWluLT5jb250ZXh0cykpOworCXhmcmVl KHhlbl9kb21haW4pOworfQorCitzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBhcm1fc21tdV9tYXBf cGFnZShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGdmbiwKKwkJCXVuc2lnbmVkIGxv bmcgbWZuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJcDJtX3R5cGVfdCB0OworCisJLyoKKwkg KiBHcmFudCBtYXBwaW5ncyBjYW4gYmUgdXNlZCBmb3IgRE1BIHJlcXVlc3RzLiBUaGUgZGV2X2J1 c19hZGRyCisJICogcmV0dXJuZWQgYnkgdGhlIGh5cGVyY2FsbCBpcyB0aGUgTUZOIChub3QgdGhl IElQQSkuIEZvciBkZXZpY2UKKwkgKiBwcm90ZWN0ZWQgYnkgYW4gSU9NTVUsIFhlbiBuZWVkcyB0 byBhZGQgYSAxOjEgbWFwcGluZyBpbiB0aGUgZG9tYWluCisJICogcDJtIHRvIGFsbG93IERNQSBy ZXF1ZXN0IHRvIHdvcmsuCisJICogVGhpcyBpcyBvbmx5IHZhbGlkIHdoZW4gdGhlIGRvbWFpbiBp cyBkaXJlY3RlZCBtYXBwZWQuIEhlbmNlIHRoaXMKKwkgKiBmdW5jdGlvbiBzaG91bGQgb25seSBi ZSB1c2VkIGJ5IGdudHRhYiBjb2RlIHdpdGggZ2ZuID09IG1mbi4KKwkgKi8KKwlCVUdfT04oIWlz X2RvbWFpbl9kaXJlY3RfbWFwcGVkKGQpKTsKKwlCVUdfT04obWZuICE9IGdmbik7CisKKwkvKiBX ZSBvbmx5IHN1cHBvcnQgcmVhZGFibGUgYW5kIHdyaXRhYmxlIGZsYWdzICovCisJaWYgKCEoZmxh Z3MgJiAoSU9NTVVGX3JlYWRhYmxlIHwgSU9NTVVGX3dyaXRhYmxlKSkpCisJCXJldHVybiAtRUlO VkFMOworCisJdCA9IChmbGFncyAmIElPTU1VRl93cml0YWJsZSkgPyBwMm1faW9tbXVfbWFwX3J3 IDogcDJtX2lvbW11X21hcF9ybzsKKworCS8qCisJICogVGhlIGZ1bmN0aW9uIGd1ZXN0X3BoeXNt YXBfYWRkX2VudHJ5IHJlcGxhY2VzIHRoZSBjdXJyZW50IG1hcHBpbmcKKwkgKiBpZiB0aGVyZSBp cyBhbHJlYWR5IG9uZS4uLgorCSAqLworCXJldHVybiBndWVzdF9waHlzbWFwX2FkZF9lbnRyeShk LCBfZ2ZuKGdmbiksIF9tZm4obWZuKSwgMCwgdCk7Cit9CisKK3N0YXRpYyBpbnQgX19tdXN0X2No ZWNrIGFybV9zbW11X3VubWFwX3BhZ2Uoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBn Zm4pCit7CisJLyoKKwkgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgZ250 dGFiIGNvZGUgd2hlbiB0aGUgZG9tYWluCisJICogaXMgZGlyZWN0IG1hcHBlZAorCSAqLworCWlm ICghaXNfZG9tYWluX2RpcmVjdF9tYXBwZWQoZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0 dXJuIGd1ZXN0X3BoeXNtYXBfcmVtb3ZlX3BhZ2UoZCwgX2dmbihnZm4pLCBfbWZuKGdmbiksIDAp OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X29wcyBhcm1fc21tdV9pb21tdV9vcHMg PSB7CisJLmluaXQgPSBhcm1fc21tdV9pb21tdV9kb21haW5faW5pdCwKKwkuaHdkb21faW5pdCA9 IGFybV9zbW11X2lvbW11X2h3ZG9tX2luaXQsCisJLnRlYXJkb3duID0gYXJtX3NtbXVfaW9tbXVf ZG9tYWluX3RlYXJkb3duLAorCS5pb3RsYl9mbHVzaCA9IGFybV9zbW11X2lvdGxiX2ZsdXNoLAor CS5pb3RsYl9mbHVzaF9hbGwgPSBhcm1fc21tdV9pb3RsYl9mbHVzaF9hbGwsCisJLmFzc2lnbl9k ZXZpY2UgPSBhcm1fc21tdV9hc3NpZ25fZGV2LAorCS5yZWFzc2lnbl9kZXZpY2UgPSBhcm1fc21t dV9yZWFzc2lnbl9kZXYsCisJLm1hcF9wYWdlID0gYXJtX3NtbXVfbWFwX3BhZ2UsCisJLnVubWFw X3BhZ2UgPSBhcm1fc21tdV91bm1hcF9wYWdlLAorfTsKKworc3RhdGljCitzdHJ1Y3QgYXJtX3Nt bXVfZGV2aWNlICphcm1fc21tdV9nZXRfYnlfZndub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpm d25vZGUpCit7CisJc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSA9IE5VTEw7CisKKwlzcGlu X2xvY2soJmFybV9zbW11X2RldmljZXNfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzbW11 LCAmYXJtX3NtbXVfZGV2aWNlcywgZGV2aWNlcykgeworCQlpZiAoc21tdS0+ZGV2LT5md25vZGUg PT0gZndub2RlKQorCQkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrKCZhcm1fc21tdV9kZXZpY2Vz X2xvY2spOworCisJcmV0dXJuIHNtbXU7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IGFybV9zbW11 X2R0X2luaXQoc3RydWN0IGR0X2RldmljZV9ub2RlICpkZXYsCisJCQkJICAgY29uc3Qgdm9pZCAq ZGF0YSkKK3sKKwlpbnQgcmM7CisKKwkvKgorCSAqIEV2ZW4gaWYgdGhlIGRldmljZSBjYW4ndCBi ZSBpbml0aWFsaXplZCwgd2UgZG9uJ3Qgd2FudCB0bworCSAqIGdpdmUgdGhlIFNNTVUgZGV2aWNl IHRvIGRvbTAuCisJICovCisJZHRfZGV2aWNlX3NldF91c2VkX2J5KGRldiwgRE9NSURfWEVOKTsK KworCXJjID0gYXJtX3NtbXVfZGV2aWNlX3Byb2JlKGR0X3RvX2RldihkZXYpKTsKKwlpZiAocmMp CisJCXJldHVybiByYzsKKworCWlvbW11X3NldF9vcHMoJmFybV9zbW11X2lvbW11X29wcyk7CisK KwlyZXR1cm4gMDsKK30KKworRFRfREVWSUNFX1NUQVJUKHNtbXV2MywgIkFSTSBTTU1VIFYzIiwg REVWSUNFX0lPTU1VKQorCS5kdF9tYXRjaCA9IGFybV9zbW11X29mX21hdGNoLAorCS5pbml0ID0g YXJtX3NtbXVfZHRfaW5pdCwKK0RUX0RFVklDRV9FTkQKKworI2lmZGVmIENPTkZJR19BQ1BJCisv KiBTZXQgdXAgdGhlIElPTU1VICovCitzdGF0aWMgaW50IF9faW5pdCBhcm1fc21tdV9hY3BpX2lu aXQoY29uc3Qgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IGFybV9zbW11X2Rldmlj ZV9wcm9iZSgoc3RydWN0IGRldmljZSAqKWRhdGEpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwor CisJaW9tbXVfc2V0X29wcygmYXJtX3NtbXVfaW9tbXVfb3BzKTsKKwlyZXR1cm4gMDsKK30KKwor QUNQSV9ERVZJQ0VfU1RBUlQoYXNtbXV2MywgIkFSTSBTTU1VIFYzIiwgREVWSUNFX0lPTU1VKQor CS5jbGFzc190eXBlID0gQUNQSV9JT1JUX05PREVfU01NVV9WMywKKwkuaW5pdCA9IGFybV9zbW11 X2FjcGlfaW5pdCwKK0FDUElfREVWSUNFX0VORAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3hlbi9p bmNsdWRlL3hlbi9saW51eF9jb21wYXQuaCBiL3hlbi9pbmNsdWRlL3hlbi9saW51eF9jb21wYXQu aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi44MDM3YmUwYTNlCi0tLSAv ZGV2L251bGwKKysrIGIveGVuL2luY2x1ZGUveGVuL2xpbnV4X2NvbXBhdC5oCkBAIC0wLDAgKzEs ODQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGluY2x1ZGUveGVuL2xpbnV4X2NvbXBh dC5oCisgKgorICogQ29tcGF0aWJpbGl0eSBkZWZpbmVzIGZvciBwb3J0aW5nIGNvZGUgZnJvbSBM aW51eCB0byBYZW4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcgTGluYXJvIExpbWl0ZWQKKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBfX1hFTl9MSU5V WF9DT01QQVRfSF9fCisjZGVmaW5lIF9fWEVOX0xJTlVYX0NPTVBBVF9IX18KKworI2luY2x1ZGUg PGFzbS90eXBlcy5oPgorCit0eXBlZGVmIHBhZGRyX3QgcGh5c19hZGRyX3Q7Cit0eXBlZGVmIHBh ZGRyX3QgZG1hX2FkZHJfdDsKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZ2ZwX3Q7CisjZGVmaW5l IEdGUF9LRVJORUwgMAorI2RlZmluZSBfX0dGUF9aRVJPIDB4MDFVCisKKy8qIEhlbHBlcnMgZm9y IElSUSBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgZnJlZV9pcnEgcmVsZWFzZV9pcnEKKworZW51bSBp cnFyZXR1cm4geworICAgIElSUV9OT05FLAorICAgIElSUV9IQU5ETEVELAorICAgIElSUV9XQUtF X1RIUkVBRCwKK307CisKK3R5cGVkZWYgZW51bSBpcnFyZXR1cm4gaXJxcmV0dXJuX3Q7CisKKy8q IERldmljZSBsb2dnZXIgZnVuY3Rpb25zICovCisjZGVmaW5lIGRldl9kYmcoZGV2LCBmbXQsIC4u LikgcHJpbnRrKFhFTkxPR19ERUJVRyBmbXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBkZXZf bm90aWNlKGRldiwgZm10LCAuLi4pIHByaW50ayhYRU5MT0dfSU5GTyBmbXQsICMjIF9fVkFfQVJH U19fKQorI2RlZmluZSBkZXZfd2FybihkZXYsIGZtdCwgLi4uKSBwcmludGsoWEVOTE9HX1dBUk5J TkcgZm10LCAjIyBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgZGV2X2VycihkZXYsIGZtdCwgLi4uKSBw cmludGsoWEVOTE9HX0VSUiBmbXQsICMjIF9fVkFfQVJHU19fKQorI2RlZmluZSBkZXZfaW5mbyhk ZXYsIGZtdCwgLi4uKSBwcmludGsoWEVOTE9HX0lORk8gZm10LCAjIyBfX1ZBX0FSR1NfXykKKwor I2RlZmluZSBkZXZfZXJyX3JhdGVsaW1pdGVkKGRldiwgZm10LCAuLi4pICAgICAgICAgICAgICAg ICAgXAorICAgICBwcmludGsoWEVOTE9HX0VSUiBmbXQsICMjIF9fVkFfQVJHU19fKQorCisjZGVm aW5lIGRldl9uYW1lKGRldikgZHRfbm9kZV9mdWxsX25hbWUoZGV2X3RvX2R0KGRldikpCisKKy8q IEFsaWFzIHRvIFhlbiBhbGxvY2F0aW9uIGhlbHBlcnMgKi8KKyNkZWZpbmUga2ZyZWUgeGZyZWUK KyNkZWZpbmUga21hbGxvYyhzaXplLCBmbGFncykgKHtcCisJdm9pZCAqX19yZXRfYWxsb2MgPSBO VUxMOyBcCisJaWYgKGZsYWdzICYgX19HRlBfWkVSTykgXAorCQlfX3JldF9hbGxvYyA9IF94emFs bG9jKHNpemUsIHNpemVvZih2b2lkICopKTsgXAorCWVsc2UgXAorCQlfX3JldF9hbGxvYyA9IF94 bWFsbG9jKHNpemUsIHNpemVvZih2b2lkICopKTsgXAorCV9fcmV0X2FsbG9jOyBcCit9KQorI2Rl ZmluZSBremFsbG9jKHNpemUsIGZsYWdzKSAgICAgICAgX3h6YWxsb2Moc2l6ZSwgc2l6ZW9mKHZv aWQgKikpCisjZGVmaW5lIGRldm1fa3phbGxvYyhkZXYsIHNpemUsIGZsYWdzKSAgX3h6YWxsb2Mo c2l6ZSwgc2l6ZW9mKHZvaWQgKikpCisjZGVmaW5lIGttYWxsb2NfYXJyYXkoc2l6ZSwgbiwgZmxh Z3MpICh7XAorCXZvaWQgKl9fcmV0X2FsbG9jID0gTlVMTDsgXAorCWlmIChmbGFncyAmIF9fR0ZQ X1pFUk8pIFwKKwkJX19yZXRfYWxsb2MgPSBfeHphbGxvY19hcnJheShzaXplLCBzaXplb2Yodm9p ZCAqKSwgbik7IFwKKwllbHNlIFwKKwkJX19yZXRfYWxsb2MgPSBfeG1hbGxvY19hcnJheShzaXpl LCBzaXplb2Yodm9pZCAqKSwgbik7IFwKKwlfX3JldF9hbGxvYzsgXAorfSkKKworLyogQWxpYXMg dG8gWGVuIHRpbWUgZnVuY3Rpb25zICovCisjZGVmaW5lIGt0aW1lX3Qgc190aW1lX3QKKyNkZWZp bmUga3RpbWVfZ2V0KCkgICAgICAgICAgICAgKE5PVygpKQorI2RlZmluZSBrdGltZV9hZGRfdXMo dCxpKSAgICAgICAodCArIE1JQ1JPU0VDUyhpKSkKKyNkZWZpbmUga3RpbWVfY29tcGFyZSh0LGkp ICAgICAgKHQgPiAoaSkpCisKKyNlbmRpZiAvKiBfX1hFTl9MSU5VWF9DT01QQVRfSF9fICovCi0t IAoyLjE0LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs