From mboxrd@z Thu Jan 1 00:00:00 1970 From: Brian Masney Subject: [PATCH v6 5/7] soc: qcom: add OCMEM driver Date: Thu, 22 Aug 2019 07:37:01 -0700 Message-ID: <20190822143703.13030-6-masneyb@onstation.org> References: <20190822143703.13030-1-masneyb@onstation.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190822143703.13030-1-masneyb-1iNe0GrtECGEi8DpZVb4nw@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: agross-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org, robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, bjorn.andersson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org Cc: mark.rutland-5wv7dgnIgG8@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, jonathan-eSc4qw6YbEQ@public.gmane.org, airlied-cv59FeDIM0c@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, daniel-/w4YWyX8dFk@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: devicetree@vger.kernel.org VGhlIE9DTUVNIGRyaXZlciBoYW5kbGVzIGFsbG9jYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2Yg dGhlIE9uIENoaXAKTUVNb3J5IHRoYXQgaXMgcHJlc2VudCBvbiBzb21lIFNuYXBkcmFnb24gU29D cy4gRGV2aWNlcyB3aGljaCBoYXZlCk9DTUVNIGRvIG5vdCBoYXZlIEdNRU0gaW5zaWRlIHRoZSBH UFUgY29yZSwgc28gdGhlIEdQVSBtdXN0IGluc3RlYWQKdXNlIE9DTUVNIHRvIGJlIGZ1bmN0aW9u YWwuIFNpbmNlIHRoZSBHUFUgaXMgY3VycmVudGx5IHRoZSBvbmx5IE9DTUVNCnVzZXIgd2l0aCBh biB1cHN0cmVhbSBkcml2ZXIsIHRoaXMgaXMganVzdCBhIG1pbmltYWwgaW1wbGVtZW50YXRpb24K c3VmZmljaWVudCBmb3Igc3RhdGljYWxseSBhbGxvY2F0aW5nIHRvIHRoZSBHUFUgaXQncyBjaHVu ayBvZiBPQ01FTS4KClRoaXMgZHJpdmVyIGN1cnJlbnRseSBkb2VzIG5vdCByZWFkIHRoZSBnbXUt c3JhbSBub2RlIHRoYXQgaXMgZGVzY3JpYmVkCmluIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5ncy4g VGhlIHN0YXJ0aW5nIG1lbW9yeSBhZGRyZXNzIG9mIHRoZSBHUFUncwpyZXNlcnZlZCBtZW1vcnkg cmVnaW9uIGlzIGhhcmRjb2RlZCB0byB6ZXJvIHRvIG1hdGNoIHdoYXQgdGhlIGhhcmR3YXJlCmV4 cGVjdHMuIFRoZSBkcml2ZXIgY2FuIGJlIHVwZGF0ZWQgdG8gcmVhZCB0aGUgcmVzZXJ2ZWQgbWVt b3J5IHJlZ2lvbnMKZnJvbSBkZXZpY2UgdHJlZSBvbmNlIG90aGVyIHVzZXJzIG9mIE9DTUVNIGFy ZSBhZGRlZCB1cHN0cmVhbS4KClNpZ25lZC1vZmYtYnk6IEJyaWFuIE1hc25leSA8bWFzbmV5YkBv bnN0YXRpb24ub3JnPgpDby1kZXZlbG9wZWQtYnk6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWls LmNvbT4KU2lnbmVkLW9mZi1ieTogUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgpSZXZp ZXdlZC1ieTogQmpvcm4gQW5kZXJzc29uIDxiam9ybi5hbmRlcnNzb25AbGluYXJvLm9yZz4KLS0t CkNoYW5nZXMgc2luY2UgdjU6Ci0gcmVuYW1lIG9jbWVtIHByb3BlcnR5IHRvIHNyYW0KCkNoYW5n ZXMgc2luY2UgdjQ6Ci0gQ2hhbmdlICdHUEwnIHRvICdHUEwgdjInIGluIE1PRFVMRV9MSUNFTlNF CgpDaGFuZ2VzIHNpbmNlIHYzOgotIE5vbmUKCkNoYW5nZXMgc2luY2UgdjIKLSBDaGFuZ2VkIHN0 YXRpYyBpbmxpbmUgc3R1YnMgcmV0dXJuIC1FTk9ERVYgd2hlbiBPQ01FTSBpcyBub3QKICBjb25m aWd1cmVkIGludG8gdGhlIGtlcm5lbC4KCkNoYW5nZXMgc2luY2UgdjE6Ci0gb2NtZW1fYWxsb2Nh dGUoKTogY2hlY2sgZm9yIGFsaWdubWVudCBhbmQgbWluaW11bSBhbGxvY2F0aW9uIHNpemUuCiAg VGhlIDY0SyB2YWx1ZXMgY2FtZSBmcm9tIHRoZSBkb3duc3RyZWFtIE1TTSBrZXJuZWwgc291cmNl cy4KLSBhZGQgbG9ja2luZyB0byBtZW1vcnkgYWxsb2NhdGlvbnMgYmFzZWQgb24gdGhlIGNsaWVu dAotIHVzZSBjbGtfYnVsa18qKCkgZnVuY3Rpb25zCi0gcmVuYW1lIHFjb20sb2NtZW0tbXNtODk3 NCB0byBxY29tLG1zbTg5NzQtb2NtZW0KLSByZW5hbWUgcmVnLW5hbWVzIHRvIGN0cmwgYW5kIG1l bQotIHJlbW92ZSBvY21lbS54bWwuaCBmaWxlOyB1c2UgRklFTERfUFJFUCgpIGluc3RlYWQgZm9y IHNvbWUgbmljZSBjbGVhbnVwcwotIGFkZCBzdGF0aWMgaW5saW5lIG5vb3AgdmVyc2lvbnMgb2Yg cHVibGljLWZhY2luZyBmdW5jdGlvbnMgd2hlbiBvY21lbQogIGlzIGRpc2FibGVkIHRvIHJlbW92 ZSAjaWZkZWZzIGluIGFkcmVudV9ncHUuYwotIHVzZSB1bnNpZ25lZCBsb25nIGZvciBtZW1vcnkg YWRkcmVzc2VzCi0gbW92ZSBvY21lbV9kZXZfcmVtb3ZlKCkgYmVsb3cgX3Byb2JlKCkgZnVuY3Rp b24KLSByZW1vdmUgZXJyb3IgY2hlY2sgZnJvbSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1l IGZvciBjdHJsIHJlc291cmNlCi0gYWRkIE1PRFVMRV9ERVNDUklQVElPTigpIGFuZCBNT0RVTEVf TElDRU5TRSgpCi0gYWRkIGRlc2NyaXB0aW9uIHRvIHRvcCBvZiBvY21lbS5bY2hdCi0gY29ycmVj dCB0aGluIG1vZGUgYml0IGluIHVwZGF0ZV9vY21lbSgpCi0gYWRkICdXQVJOX09OKGNsaWVudCAh PSBPQ01FTV9HUkFQSElDUyknIHRvIGRldmljZV9hZGRyZXNzKCkKLSBtYWtlIG9mX2dldF9vY21l bSByZXR1cm4gZXJyb3IgY29kZXMgdmlhIEVSUl9QVFIgaW5zdGVhZCBvZiBOVUxMCi0gb2NtZW1f e2FsbG9jYXRlLGZyZWV9IC0gV0FSTl9PTigpIGlmIGNsaWVudCAhPSBPQ01FTV9HUkFQSElDUy4K ICBTaW1wbGlmeSBpZiBzdGF0ZW1lbnRzLgotIGFsbG93IE5VTEwgdG8gYmUgcGFzc2VkIGludG8g b2NtZW1fZnJlZQotIHJlbW92ZSB1bm5lY2Vzc2FyeSBpbml0aWFsaXphdGlvbiBvZiBpIGluIHVw ZGF0ZV9vY21lbSgpCi0gYWRkIGRldl9kYmcgdG8gb2NtZW1fYWxsb2NhdGUKCkNoYW5nZXMgc2lu Y2UgUm9iJ3MgbGFzdCB2ZXJzaW9uIG9mIHRoaXMgcGF0Y2ggZnJvbSAyMDE1OgpodHRwczovL3Bh dGNod29yay5rZXJuZWwub3JnL3BhdGNoLzczNzk4MDEvCi0gcmVmb3JtYXR0ZWQgZHJpdmVyIHRv IGFsbG93IG11bHRpcGxlIGluc3RhbmNlcwotIHVwZGF0ZWQgbG9nZ2luZyBvZiBlcnJvciBwYXRo cyBkdXJpbmcgZGV2aWNlIHByb2JpbmcKLSByZW1vdmUgdW51c2VkIHBzZ3NjX2N0cmwKLSByZW1v dmUgX2NsayBmcm9tIGNsb2NrIG5hbWVzCi0gcHJvcGFnYXRlIGVycm9yIGNvZGUgZnJvbSBkZXZt X2lvcmVtYXBfcmVzb3VyY2UoKQotIHVzZSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoKQotIFNQRFgg bGljZW5zZSB0YWdzCi0gcmVtb3ZlIFFDT01fU01EIGluIEtjb25maWcKLSBzZWxlY3QgQVJDSF9R Q09NIGluIEtjb25maWcKLSBzZWxlY3QgQVJDSF9RQ09NIGluIEtjb25maWcKLSBzZWxlY3QgUUNP TV9TQ00gaW4gS2NvbmZpZwotIGxvbmdlciBkZXNjcmlwdGlvbiBpbiBLY29uZmlnCgogZHJpdmVy cy9zb2MvcWNvbS9LY29uZmlnICB8ICAxMCArCiBkcml2ZXJzL3NvYy9xY29tL01ha2VmaWxlIHwg ICAxICsKIGRyaXZlcnMvc29jL3Fjb20vb2NtZW0uYyAgfCA0MzMgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvc29jL3Fjb20vb2NtZW0uaCAgfCAgNjIgKysr KysrCiA0IGZpbGVzIGNoYW5nZWQsIDUwNiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zb2MvcWNvbS9vY21lbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9z b2MvcWNvbS9vY21lbS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvcWNvbS9LY29uZmlnIGIv ZHJpdmVycy9zb2MvcWNvbS9LY29uZmlnCmluZGV4IDY2MWU0N2FjYzM1NC4uYWRiZjNiZmFlODA1 IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NvYy9xY29tL0tjb25maWcKKysrIGIvZHJpdmVycy9zb2Mv cWNvbS9LY29uZmlnCkBAIC03NCw2ICs3NCwxNiBAQCBjb25maWcgUUNPTV9NRFRfTE9BREVSCiAJ dHJpc3RhdGUKIAlzZWxlY3QgUUNPTV9TQ00KIAorY29uZmlnIFFDT01fT0NNRU0KKwl0cmlzdGF0 ZSAiUXVhbGNvbW0gT24gQ2hpcCBNZW1vcnkgKE9DTUVNKSBkcml2ZXIiCisJZGVwZW5kcyBvbiBB UkNIX1FDT00KKwlzZWxlY3QgUUNPTV9TQ00KKwloZWxwCisgICAgICAgICAgVGhlIE9uIENoaXAg TWVtb3J5IChPQ01FTSkgYWxsb2NhdG9yIGFsbG93cyB2YXJpb3VzIGNsaWVudHMgdG8KKyAgICAg ICAgICBhbGxvY2F0ZSBtZW1vcnkgZnJvbSBPQ01FTSBiYXNlZCBvbiBwZXJmb3JtYW5jZSwgbGF0 ZW5jeSBhbmQgcG93ZXIKKyAgICAgICAgICByZXF1aXJlbWVudHMuIFRoaXMgaXMgdHlwaWNhbGx5 IHVzZWQgYnkgdGhlIEdQVSwgY2FtZXJhL3ZpZGVvLCBhbmQKKyAgICAgICAgICBhdWRpbyBjb21w b25lbnRzIG9uIHNvbWUgU25hcGRyYWdvbiBTb0NzLgorCiBjb25maWcgUUNPTV9QTQogCWJvb2wg IlF1YWxjb21tIFBvd2VyIE1hbmFnZW1lbnQiCiAJZGVwZW5kcyBvbiBBUkNIX1FDT00gJiYgIUFS TTY0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9xY29tL01ha2VmaWxlIGIvZHJpdmVycy9zb2Mv cWNvbS9NYWtlZmlsZQppbmRleCAxNjI3ODg3MDFhNzcuLmFhYjMzMzcyMGJmZCAxMDA2NDQKLS0t IGEvZHJpdmVycy9zb2MvcWNvbS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NvYy9xY29tL01ha2Vm aWxlCkBAIC02LDYgKzYsNyBAQCBvYmotJChDT05GSUdfUUNPTV9DT01NQU5EX0RCKSArPSBjbWQt ZGIubwogb2JqLSQoQ09ORklHX1FDT01fR0xJTktfU1NSKSArPQlnbGlua19zc3Iubwogb2JqLSQo Q09ORklHX1FDT01fR1NCSSkJKz0JcWNvbV9nc2JpLm8KIG9iai0kKENPTkZJR19RQ09NX01EVF9M T0FERVIpCSs9IG1kdF9sb2FkZXIubworb2JqLSQoQ09ORklHX1FDT01fT0NNRU0pCSs9IG9jbWVt Lm8KIG9iai0kKENPTkZJR19RQ09NX1BNKQkrPQlzcG0ubwogb2JqLSQoQ09ORklHX1FDT01fUU1J X0hFTFBFUlMpCSs9IHFtaV9oZWxwZXJzLm8KIHFtaV9oZWxwZXJzLXkJKz0gcW1pX2VuY2RlYy5v IHFtaV9pbnRlcmZhY2UubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvcWNvbS9vY21lbS5jIGIv ZHJpdmVycy9zb2MvcWNvbS9vY21lbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uZjllMzFiZTVkODQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zb2MvcWNv bS9vY21lbS5jCkBAIC0wLDAgKzEsNDMzIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMC1vbmx5CisvKgorICogVGhlIE9uIENoaXAgTWVtb3J5IChPQ01FTSkgYWxsb2NhdG9y IGFsbG93cyB2YXJpb3VzIGNsaWVudHMgdG8gYWxsb2NhdGUKKyAqIG1lbW9yeSBmcm9tIE9DTUVN IGJhc2VkIG9uIHBlcmZvcm1hbmNlLCBsYXRlbmN5IGFuZCBwb3dlciByZXF1aXJlbWVudHMuCisg KiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGJ5IHRoZSBHUFUsIGNhbWVyYS92aWRlbywgYW5kIGF1 ZGlvIGNvbXBvbmVudHMgb24KKyAqIHNvbWUgU25hcGRyYWdvbiBTb0NzLgorICoKKyAqIENvcHly aWdodCAoQykgMjAxOSBCcmlhbiBNYXNuZXkgPG1hc25leWJAb25zdGF0aW9uLm9yZz4KKyAqIENv cHlyaWdodCAoQykgMjAxNSBSZWQgSGF0LiBBdXRob3I6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdt YWlsLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KKyNpbmNsdWRlIDxs aW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5l bC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2Rldmlj ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4 L3Fjb21fc2NtLmg+CisjaW5jbHVkZSA8bGludXgvc2l6ZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9z bGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxzb2MvcWNvbS9vY21l bS5oPgorCitlbnVtIHJlZ2lvbl9tb2RlIHsKKwlXSURFX01PREUgPSAweDAsCisJVEhJTl9NT0RF LAorCU1PREVfREVGQVVMVCA9IFdJREVfTU9ERSwKK307CisKK2VudW0gb2NtZW1fbWFjcm9fc3Rh dGUgeworCVBBU1NUSFJPVUdIID0gMCwKKwlQRVJJX09OID0gMSwKKwlDT1JFX09OID0gMiwKKwlD TEtfT0ZGID0gNCwKK307CisKK3N0cnVjdCBvY21lbV9yZWdpb24geworCWJvb2wgaW50ZXJsZWF2 ZWQ7CisJZW51bSByZWdpb25fbW9kZSBtb2RlOworCXVuc2lnbmVkIGludCBudW1fbWFjcm9zOwor CWVudW0gb2NtZW1fbWFjcm9fc3RhdGUgbWFjcm9fc3RhdGVbNF07CisJdW5zaWduZWQgbG9uZyBt YWNyb19zaXplOworCXVuc2lnbmVkIGxvbmcgcmVnaW9uX3NpemU7Cit9OworCitzdHJ1Y3Qgb2Nt ZW1fY29uZmlnIHsKKwl1aW50OF90IG51bV9yZWdpb25zOworCXVuc2lnbmVkIGxvbmcgbWFjcm9f c2l6ZTsKK307CisKK3N0cnVjdCBvY21lbSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCWNvbnN0 IHN0cnVjdCBvY21lbV9jb25maWcgKmNvbmZpZzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbW9yeTsK Kwl2b2lkIF9faW9tZW0gKm1taW87CisJdW5zaWduZWQgaW50IG51bV9wb3J0czsKKwl1bnNpZ25l ZCBpbnQgbnVtX21hY3JvczsKKwlib29sIGludGVybGVhdmVkOworCXN0cnVjdCBvY21lbV9yZWdp b24gKnJlZ2lvbnM7CisJdW5zaWduZWQgbG9uZyBhY3RpdmVfYWxsb2NhdGlvbnM7Cit9OworCisj ZGVmaW5lIE9DTUVNX01JTl9BTElHTgkJCQlTWl82NEsKKyNkZWZpbmUgT0NNRU1fTUlOX0FMTE9D CQkJCVNaXzY0SworCisjZGVmaW5lIE9DTUVNX1JFR19IV19WRVJTSU9OCQkJMHgwMDAwMDAwMAor I2RlZmluZSBPQ01FTV9SRUdfSFdfUFJPRklMRQkJCTB4MDAwMDAwMDQKKworI2RlZmluZSBPQ01F TV9SRUdfUkVHSU9OX01PREVfQ1RMCQkweDAwMDAxMDAwCisjZGVmaW5lIE9DTUVNX1JFR0lPTl9N T0RFX0NUTF9SRUcwX1RISU4JCTB4MDAwMDAwMDEKKyNkZWZpbmUgT0NNRU1fUkVHSU9OX01PREVf Q1RMX1JFRzFfVEhJTgkJMHgwMDAwMDAwMgorI2RlZmluZSBPQ01FTV9SRUdJT05fTU9ERV9DVExf UkVHMl9USElOCQkweDAwMDAwMDA0CisjZGVmaW5lIE9DTUVNX1JFR0lPTl9NT0RFX0NUTF9SRUcz X1RISU4JCTB4MDAwMDAwMDgKKworI2RlZmluZSBPQ01FTV9SRUdfR0ZYX01QVV9TVEFSVAkJCTB4 MDAwMDEwMDQKKyNkZWZpbmUgT0NNRU1fUkVHX0dGWF9NUFVfRU5ECQkJMHgwMDAwMTAwOAorCisj ZGVmaW5lIE9DTUVNX0hXX1BST0ZJTEVfTlVNX1BPUlRTKHZhbCkJCUZJRUxEX1BSRVAoMHgwMDAw MDAwZiwgKHZhbCkpCisjZGVmaW5lIE9DTUVNX0hXX1BST0ZJTEVfTlVNX01BQ1JPUyh2YWwpCUZJ RUxEX1BSRVAoMHgwMDAwM2YwMCwgKHZhbCkpCisKKyNkZWZpbmUgT0NNRU1fSFdfUFJPRklMRV9M QVNUX1JFR05fSEFMRlNJWkUJMHgwMDAxMDAwMAorI2RlZmluZSBPQ01FTV9IV19QUk9GSUxFX0lO VEVSTEVBVklORwkJMHgwMDAyMDAwMAorI2RlZmluZSBPQ01FTV9SRUdfR0VOX1NUQVRVUwkJCTB4 MDAwMDAwMGMKKworI2RlZmluZSBPQ01FTV9SRUdfUFNHU0NfU1RBVFVTCQkJMHgwMDAwMDAzOAor I2RlZmluZSBPQ01FTV9SRUdfUFNHU0NfQ1RMKGkwKQkJCSgweDAwMDAwMDNjICsgMHgxKihpMCkp CisKKyNkZWZpbmUgT0NNRU1fUFNHU0NfQ1RMX01BQ1JPMF9NT0RFKHZhbCkJRklFTERfUFJFUCgw eDAwMDAwMDA3LCAodmFsKSkKKyNkZWZpbmUgT0NNRU1fUFNHU0NfQ1RMX01BQ1JPMV9NT0RFKHZh bCkJRklFTERfUFJFUCgweDAwMDAwMDcwLCAodmFsKSkKKyNkZWZpbmUgT0NNRU1fUFNHU0NfQ1RM X01BQ1JPMl9NT0RFKHZhbCkJRklFTERfUFJFUCgweDAwMDAwNzAwLCAodmFsKSkKKyNkZWZpbmUg T0NNRU1fUFNHU0NfQ1RMX01BQ1JPM19NT0RFKHZhbCkJRklFTERfUFJFUCgweDAwMDA3MDAwLCAo dmFsKSkKKworI2RlZmluZSBPQ01FTV9DTEtfQ09SRV9JRFgJCQkwCitzdGF0aWMgc3RydWN0IGNs a19idWxrX2RhdGEgb2NtZW1fY2xrc1tdID0geworCXsKKwkJLmlkID0gImNvcmUiLAorCX0sCisJ eworCQkuaWQgPSAiaWZhY2UiLAorCX0sCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgb2NtZW1f d3JpdGUoc3RydWN0IG9jbWVtICpvY21lbSwgdTMyIHJlZywgdTMyIGRhdGEpCit7CisJd3JpdGVs KGRhdGEsIG9jbWVtLT5tbWlvICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgb2NtZW1f cmVhZChzdHJ1Y3Qgb2NtZW0gKm9jbWVtLCB1MzIgcmVnKQoreworCXJldHVybiByZWFkbChvY21l bS0+bW1pbyArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9vY21lbShzdHJ1Y3Qgb2Nt ZW0gKm9jbWVtKQoreworCXVpbnQzMl90IHJlZ2lvbl9tb2RlX2N0cmwgPSAweDA7CisJaW50IGk7 CisKKwlpZiAoIXFjb21fc2NtX29jbWVtX2xvY2tfYXZhaWxhYmxlKCkpIHsKKwkJZm9yIChpID0g MDsgaSA8IG9jbWVtLT5jb25maWctPm51bV9yZWdpb25zOyBpKyspIHsKKwkJCXN0cnVjdCBvY21l bV9yZWdpb24gKnJlZ2lvbiA9ICZvY21lbS0+cmVnaW9uc1tpXTsKKworCQkJaWYgKHJlZ2lvbi0+ bW9kZSA9PSBUSElOX01PREUpCisJCQkJcmVnaW9uX21vZGVfY3RybCB8PSBCSVQoaSk7CisJCX0K KworCQlkZXZfZGJnKG9jbWVtLT5kZXYsICJvY21lbV9yZWdpb25fbW9kZV9jb250cm9sICV4XG4i LAorCQkJcmVnaW9uX21vZGVfY3RybCk7CisJCW9jbWVtX3dyaXRlKG9jbWVtLCBPQ01FTV9SRUdf UkVHSU9OX01PREVfQ1RMLCByZWdpb25fbW9kZV9jdHJsKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBp IDwgb2NtZW0tPmNvbmZpZy0+bnVtX3JlZ2lvbnM7IGkrKykgeworCQlzdHJ1Y3Qgb2NtZW1fcmVn aW9uICpyZWdpb24gPSAmb2NtZW0tPnJlZ2lvbnNbaV07CisJCXUzMiBkYXRhOworCisJCWRhdGEg PSBPQ01FTV9QU0dTQ19DVExfTUFDUk8wX01PREUocmVnaW9uLT5tYWNyb19zdGF0ZVswXSkgfAor CQkJT0NNRU1fUFNHU0NfQ1RMX01BQ1JPMV9NT0RFKHJlZ2lvbi0+bWFjcm9fc3RhdGVbMV0pIHwK KwkJCU9DTUVNX1BTR1NDX0NUTF9NQUNSTzJfTU9ERShyZWdpb24tPm1hY3JvX3N0YXRlWzJdKSB8 CisJCQlPQ01FTV9QU0dTQ19DVExfTUFDUk8zX01PREUocmVnaW9uLT5tYWNyb19zdGF0ZVszXSk7 CisKKwkJb2NtZW1fd3JpdGUob2NtZW0sIE9DTUVNX1JFR19QU0dTQ19DVEwoaSksIGRhdGEpOwor CX0KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGh5c190b19vZmZzZXQoc3RydWN0IG9jbWVt ICpvY21lbSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlmIChhZGRyIDwgb2Nt ZW0tPm1lbW9yeS0+c3RhcnQgfHwgYWRkciA+PSBvY21lbS0+bWVtb3J5LT5lbmQpCisJCXJldHVy biAwOworCisJcmV0dXJuIGFkZHIgLSBvY21lbS0+bWVtb3J5LT5zdGFydDsKK30KKworc3RhdGlj IHVuc2lnbmVkIGxvbmcgZGV2aWNlX2FkZHJlc3Moc3RydWN0IG9jbWVtICpvY21lbSwKKwkJCQkg ICAgZW51bSBvY21lbV9jbGllbnQgY2xpZW50LAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIp Cit7CisJV0FSTl9PTihjbGllbnQgIT0gT0NNRU1fR1JBUEhJQ1MpOworCisJLyogVE9ETzogZ3B1 IHVzZXMgcGh5c190b19vZmZzZXQsIGJ1dCBvdGhlcnMgZG8gbm90Li4gKi8KKwlyZXR1cm4gcGh5 c190b19vZmZzZXQob2NtZW0sIGFkZHIpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfcmFuZ2Uo c3RydWN0IG9jbWVtICpvY21lbSwgc3RydWN0IG9jbWVtX2J1ZiAqYnVmLAorCQkJIGVudW0gb2Nt ZW1fbWFjcm9fc3RhdGUgbXN0YXRlLCBlbnVtIHJlZ2lvbl9tb2RlIHJtb2RlKQoreworCXVuc2ln bmVkIGxvbmcgb2Zmc2V0ID0gMDsKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBvY21l bS0+Y29uZmlnLT5udW1fcmVnaW9uczsgaSsrKSB7CisJCXN0cnVjdCBvY21lbV9yZWdpb24gKnJl Z2lvbiA9ICZvY21lbS0+cmVnaW9uc1tpXTsKKworCQlpZiAoYnVmLT5vZmZzZXQgPD0gb2Zmc2V0 ICYmIG9mZnNldCA8IGJ1Zi0+b2Zmc2V0ICsgYnVmLT5sZW4pCisJCQlyZWdpb24tPm1vZGUgPSBy bW9kZTsKKworCQlmb3IgKGogPSAwOyBqIDwgcmVnaW9uLT5udW1fbWFjcm9zOyBqKyspIHsKKwkJ CWlmIChidWYtPm9mZnNldCA8PSBvZmZzZXQgJiYKKwkJCSAgICBvZmZzZXQgPCBidWYtPm9mZnNl dCArIGJ1Zi0+bGVuKQorCQkJCXJlZ2lvbi0+bWFjcm9fc3RhdGVbal0gPSBtc3RhdGU7CisKKwkJ CW9mZnNldCArPSByZWdpb24tPm1hY3JvX3NpemU7CisJCX0KKwl9CisKKwl1cGRhdGVfb2NtZW0o b2NtZW0pOworfQorCitzdHJ1Y3Qgb2NtZW0gKm9mX2dldF9vY21lbShzdHJ1Y3QgZGV2aWNlICpk ZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKmRldm5vZGU7CisKKwlkZXZub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShkZXYtPm9mX25vZGUs ICJzcmFtIiwgMCk7CisJaWYgKCFkZXZub2RlKSB7CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IGxv b2sgdXAgc3JhbSBwaGFuZGxlXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisJfQor CisJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoZGV2bm9kZSk7CisJaWYgKCFwZGV2KSB7 CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IGZpbmQgZGV2aWNlIG5vZGUgJXNcbiIsIGRldm5vZGUt Pm5hbWUpOworCQlyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsKKwl9CisKKwlyZXR1cm4g cGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cit9CitFWFBPUlRfU1lNQk9MKG9mX2dldF9vY21l bSk7CisKK3N0cnVjdCBvY21lbV9idWYgKm9jbWVtX2FsbG9jYXRlKHN0cnVjdCBvY21lbSAqb2Nt ZW0sIGVudW0gb2NtZW1fY2xpZW50IGNsaWVudCwKKwkJCQkgdW5zaWduZWQgbG9uZyBzaXplKQor eworCXN0cnVjdCBvY21lbV9idWYgKmJ1ZjsKKwlpbnQgcmV0OworCisJLyogVE9ETzogYWRkIHN1 cHBvcnQgZm9yIG90aGVyIGNsaWVudHMuLi4gKi8KKwlpZiAoV0FSTl9PTihjbGllbnQgIT0gT0NN RU1fR1JBUEhJQ1MpKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCWlmIChzaXplIDwg T0NNRU1fTUlOX0FMTE9DIHx8ICFJU19BTElHTkVEKHNpemUsIE9DTUVNX01JTl9BTElHTikpCisJ CXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhC SVQoY2xpZW50KSwgJm9jbWVtLT5hY3RpdmVfYWxsb2NhdGlvbnMpKQorCQlyZXR1cm4gRVJSX1BU UigtRUJVU1kpOworCisJYnVmID0ga3phbGxvYyhzaXplb2YoKmJ1ZiksIEdGUF9LRVJORUwpOwor CWlmICghYnVmKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3VubG9jazsKKwl9CisK KwlidWYtPm9mZnNldCA9IDA7CisJYnVmLT5hZGRyID0gZGV2aWNlX2FkZHJlc3Mob2NtZW0sIGNs aWVudCwgYnVmLT5vZmZzZXQpOworCWJ1Zi0+bGVuID0gc2l6ZTsKKworCXVwZGF0ZV9yYW5nZShv Y21lbSwgYnVmLCBDT1JFX09OLCBXSURFX01PREUpOworCisJaWYgKHFjb21fc2NtX29jbWVtX2xv Y2tfYXZhaWxhYmxlKCkpIHsKKwkJcmV0ID0gcWNvbV9zY21fb2NtZW1fbG9jayhRQ09NX1NDTV9P Q01FTV9HUkFQSElDU19JRCwKKwkJCQkJICBidWYtPm9mZnNldCwgYnVmLT5sZW4sIFdJREVfTU9E RSk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIob2NtZW0tPmRldiwgImNvdWxkIG5vdCBsb2Nr OiAlZFxuIiwgcmV0KTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGVycl9rZnJlZTsKKwkJ fQorCX0gZWxzZSB7CisJCW9jbWVtX3dyaXRlKG9jbWVtLCBPQ01FTV9SRUdfR0ZYX01QVV9TVEFS VCwgYnVmLT5vZmZzZXQpOworCQlvY21lbV93cml0ZShvY21lbSwgT0NNRU1fUkVHX0dGWF9NUFVf RU5ELAorCQkJICAgIGJ1Zi0+b2Zmc2V0ICsgYnVmLT5sZW4pOworCX0KKworCWRldl9kYmcob2Nt ZW0tPmRldiwgInVzaW5nICVsZEsgb2YgT0NNRU0gYXQgMHglMDhseCBmb3IgY2xpZW50ICVkXG4i LAorCQlzaXplIC8gMTAyNCwgYnVmLT5hZGRyLCBjbGllbnQpOworCisJcmV0dXJuIGJ1ZjsKKwor ZXJyX2tmcmVlOgorCWtmcmVlKGJ1Zik7CitlcnJfdW5sb2NrOgorCWNsZWFyX2JpdF91bmxvY2so QklUKGNsaWVudCksICZvY21lbS0+YWN0aXZlX2FsbG9jYXRpb25zKTsKKworCXJldHVybiBFUlJf UFRSKHJldCk7Cit9CitFWFBPUlRfU1lNQk9MKG9jbWVtX2FsbG9jYXRlKTsKKwordm9pZCBvY21l bV9mcmVlKHN0cnVjdCBvY21lbSAqb2NtZW0sIGVudW0gb2NtZW1fY2xpZW50IGNsaWVudCwKKwkJ c3RydWN0IG9jbWVtX2J1ZiAqYnVmKQoreworCS8qIFRPRE86IGFkZCBzdXBwb3J0IGZvciBvdGhl ciBjbGllbnRzLi4uICovCisJaWYgKFdBUk5fT04oY2xpZW50ICE9IE9DTUVNX0dSQVBISUNTKSkK KwkJcmV0dXJuOworCisJdXBkYXRlX3JhbmdlKG9jbWVtLCBidWYsIENMS19PRkYsIE1PREVfREVG QVVMVCk7CisKKwlpZiAocWNvbV9zY21fb2NtZW1fbG9ja19hdmFpbGFibGUoKSkgeworCQlpbnQg cmV0OworCisJCXJldCA9IHFjb21fc2NtX29jbWVtX3VubG9jayhRQ09NX1NDTV9PQ01FTV9HUkFQ SElDU19JRCwKKwkJCQkJICAgIGJ1Zi0+b2Zmc2V0LCBidWYtPmxlbik7CisJCWlmIChyZXQpCisJ CQlkZXZfZXJyKG9jbWVtLT5kZXYsICJjb3VsZCBub3QgdW5sb2NrOiAlZFxuIiwgcmV0KTsKKwl9 IGVsc2UgeworCQlvY21lbV93cml0ZShvY21lbSwgT0NNRU1fUkVHX0dGWF9NUFVfU1RBUlQsIDB4 MCk7CisJCW9jbWVtX3dyaXRlKG9jbWVtLCBPQ01FTV9SRUdfR0ZYX01QVV9FTkQsIDB4MCk7CisJ fQorCisJa2ZyZWUoYnVmKTsKKworCWNsZWFyX2JpdF91bmxvY2soQklUKGNsaWVudCksICZvY21l bS0+YWN0aXZlX2FsbG9jYXRpb25zKTsKK30KK0VYUE9SVF9TWU1CT0wob2NtZW1fZnJlZSk7CisK K3N0YXRpYyBpbnQgb2NtZW1fZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwl1bnNpZ25lZCBsb25nIHJl ZywgcmVnaW9uX3NpemU7CisJaW50IGksIGosIHJldCwgbnVtX2JhbmtzOworCXN0cnVjdCByZXNv dXJjZSAqcmVzOworCXN0cnVjdCBvY21lbSAqb2NtZW07CisKKwlpZiAoIXFjb21fc2NtX2lzX2F2 YWlsYWJsZSgpKQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKworCW9jbWVtID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKCpvY21lbSksIEdGUF9LRVJORUwpOworCWlmICghb2NtZW0pCisJCXJl dHVybiAtRU5PTUVNOworCisJb2NtZW0tPmRldiA9IGRldjsKKwlvY21lbS0+Y29uZmlnID0gZGV2 aWNlX2dldF9tYXRjaF9kYXRhKGRldik7CisKKwlyZXQgPSBkZXZtX2Nsa19idWxrX2dldChkZXYs IEFSUkFZX1NJWkUob2NtZW1fY2xrcyksIG9jbWVtX2Nsa3MpOworCWlmIChyZXQpIHsKKwkJaWYg KHJldCAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gZ2V0IGNs b2Nrc1xuIik7CisKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVz b3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiY3RybCIpOworCW9jbWVtLT5tbWlv ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihv Y21lbS0+bW1pbykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAg b2NtZW1fY3RybCByZXNvdXJjZVxuIik7CisJCXJldHVybiBQVFJfRVJSKG9jbWVtLT5tbWlvKTsK Kwl9CisKKwlvY21lbS0+bWVtb3J5ID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2 LCBJT1JFU09VUkNFX01FTSwKKwkJCQkJCSAgICAgIm1lbSIpOworCWlmICghb2NtZW0tPm1lbW9y eSkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBnZXQgbWVtIHJlZ2lvblxuIik7CisJCXJl dHVybiAtRU5YSU87CisJfQorCisJLyogVGhlIGNvcmUgY2xvY2sgaXMgc3luY2hyb25vdXMgd2l0 aCBncmFwaGljcyAqLworCVdBUk5fT04oY2xrX3NldF9yYXRlKG9jbWVtX2Nsa3NbT0NNRU1fQ0xL X0NPUkVfSURYXS5jbGssIDEwMDApIDwgMCk7CisKKwlyZXQgPSBjbGtfYnVsa19wcmVwYXJlX2Vu YWJsZShBUlJBWV9TSVpFKG9jbWVtX2Nsa3MpLCBvY21lbV9jbGtzKTsKKwlpZiAocmV0KSB7CisJ CWRldl9pbmZvKG9jbWVtLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIGNsb2Nrc1xuIik7CisJCXJl dHVybiByZXQ7CisJfQorCisJaWYgKHFjb21fc2NtX3Jlc3RvcmVfc2VjX2NmZ19hdmFpbGFibGUo KSkgeworCQlkZXZfZGJnKGRldiwgImNvbmZpZ3VyaW5nIHNjbVxuIik7CisJCXJldCA9IHFjb21f c2NtX3Jlc3RvcmVfc2VjX2NmZyhRQ09NX1NDTV9PQ01FTV9ERVZfSUQsIDApOworCQlpZiAocmV0 KSB7CisJCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBlbmFibGUgc2VjdXJlIGNvbmZpZ3VyYXRp b25cbiIpOworCQkJZ290byBlcnJfY2xrX2Rpc2FibGU7CisJCX0KKwl9CisKKwlyZWcgPSBvY21l bV9yZWFkKG9jbWVtLCBPQ01FTV9SRUdfSFdfUFJPRklMRSk7CisJb2NtZW0tPm51bV9wb3J0cyA9 IE9DTUVNX0hXX1BST0ZJTEVfTlVNX1BPUlRTKHJlZyk7CisJb2NtZW0tPm51bV9tYWNyb3MgPSBP Q01FTV9IV19QUk9GSUxFX05VTV9NQUNST1MocmVnKTsKKwlvY21lbS0+aW50ZXJsZWF2ZWQgPSAh IShyZWcgJiBPQ01FTV9IV19QUk9GSUxFX0lOVEVSTEVBVklORyk7CisKKwludW1fYmFua3MgPSBv Y21lbS0+bnVtX3BvcnRzIC8gMjsKKwlyZWdpb25fc2l6ZSA9IG9jbWVtLT5jb25maWctPm1hY3Jv X3NpemUgKiBudW1fYmFua3M7CisKKwlkZXZfaW5mbyhkZXYsICIldSBwb3J0cywgJXUgcmVnaW9u cywgJXUgbWFjcm9zLCAlc2ludGVybGVhdmVkXG4iLAorCQkgb2NtZW0tPm51bV9wb3J0cywgb2Nt ZW0tPmNvbmZpZy0+bnVtX3JlZ2lvbnMsCisJCSBvY21lbS0+bnVtX21hY3Jvcywgb2NtZW0tPmlu dGVybGVhdmVkID8gIiIgOiAibm90ICIpOworCisJb2NtZW0tPnJlZ2lvbnMgPSBkZXZtX2tjYWxs b2MoZGV2LCBvY21lbS0+Y29uZmlnLT5udW1fcmVnaW9ucywKKwkJCQkgICAgICBzaXplb2Yoc3Ry dWN0IG9jbWVtX3JlZ2lvbiksIEdGUF9LRVJORUwpOworCWlmICghb2NtZW0tPnJlZ2lvbnMpIHsK KwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfY2xrX2Rpc2FibGU7CisJfQorCisJZm9yIChp ID0gMDsgaSA8IG9jbWVtLT5jb25maWctPm51bV9yZWdpb25zOyBpKyspIHsKKwkJc3RydWN0IG9j bWVtX3JlZ2lvbiAqcmVnaW9uID0gJm9jbWVtLT5yZWdpb25zW2ldOworCisJCWlmIChXQVJOX09O KG51bV9iYW5rcyA+IEFSUkFZX1NJWkUocmVnaW9uLT5tYWNyb19zdGF0ZSkpKSB7CisJCQlyZXQg PSAtRUlOVkFMOworCQkJZ290byBlcnJfY2xrX2Rpc2FibGU7CisJCX0KKworCQlyZWdpb24tPm1v ZGUgPSBNT0RFX0RFRkFVTFQ7CisJCXJlZ2lvbi0+bnVtX21hY3JvcyA9IG51bV9iYW5rczsKKwor CQlpZiAoaSA9PSAob2NtZW0tPmNvbmZpZy0+bnVtX3JlZ2lvbnMgLSAxKSAmJgorCQkgICAgcmVn ICYgT0NNRU1fSFdfUFJPRklMRV9MQVNUX1JFR05fSEFMRlNJWkUpIHsKKwkJCXJlZ2lvbi0+bWFj cm9fc2l6ZSA9IG9jbWVtLT5jb25maWctPm1hY3JvX3NpemUgLyAyOworCQkJcmVnaW9uLT5yZWdp b25fc2l6ZSA9IHJlZ2lvbl9zaXplIC8gMjsKKwkJfSBlbHNlIHsKKwkJCXJlZ2lvbi0+bWFjcm9f c2l6ZSA9IG9jbWVtLT5jb25maWctPm1hY3JvX3NpemU7CisJCQlyZWdpb24tPnJlZ2lvbl9zaXpl ID0gcmVnaW9uX3NpemU7CisJCX0KKworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShyZWdp b24tPm1hY3JvX3N0YXRlKTsgaisrKQorCQkJcmVnaW9uLT5tYWNyb19zdGF0ZVtqXSA9IENMS19P RkY7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgb2NtZW0pOworCisJcmV0dXJu IDA7CisKK2Vycl9jbGtfZGlzYWJsZToKKwljbGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZShBUlJB WV9TSVpFKG9jbWVtX2Nsa3MpLCBvY21lbV9jbGtzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW50IG9jbWVtX2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK KwljbGtfYnVsa19kaXNhYmxlX3VucHJlcGFyZShBUlJBWV9TSVpFKG9jbWVtX2Nsa3MpLCBvY21l bV9jbGtzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9jbWVtX2Nv bmZpZyBvY21lbV84OTc0X2NvbmZpZyA9IHsKKwkubnVtX3JlZ2lvbnMgPSAzLAorCS5tYWNyb19z aXplID0gU1pfMTI4SywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9j bWVtX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJxY29tLG1zbTg5NzQtb2NtZW0i LCAuZGF0YSA9ICZvY21lbV84OTc0X2NvbmZpZyB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFVklD RV9UQUJMRShvZiwgb2NtZW1fb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciBvY21lbV9kcml2ZXIgPSB7CisJLnByb2JlID0gb2NtZW1fZGV2X3Byb2JlLAorCS5yZW1v dmUgPSBvY21lbV9kZXZfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm9jbWVtIiwK KwkJLm9mX21hdGNoX3RhYmxlID0gb2NtZW1fb2ZfbWF0Y2gsCisJfSwKK307CisKK21vZHVsZV9w bGF0Zm9ybV9kcml2ZXIob2NtZW1fZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJPbiBD aGlwIE1lbW9yeSAoT0NNRU0pIGFsbG9jYXRvciBmb3Igc29tZSBTbmFwZHJhZ29uIFNvQ3MiKTsK K01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc29jL3Fjb20v b2NtZW0uaCBiL2luY2x1ZGUvc29jL3Fjb20vb2NtZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLmEwYWUzMzZiYTc4YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1 ZGUvc29jL3Fjb20vb2NtZW0uaApAQCAtMCwwICsxLDYyIEBACisvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICogVGhlIE9uIENoaXAgTWVtb3J5IChPQ01F TSkgYWxsb2NhdG9yIGFsbG93cyB2YXJpb3VzIGNsaWVudHMgdG8gYWxsb2NhdGUKKyAqIG1lbW9y eSBmcm9tIE9DTUVNIGJhc2VkIG9uIHBlcmZvcm1hbmNlLCBsYXRlbmN5IGFuZCBwb3dlciByZXF1 aXJlbWVudHMuCisgKiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGJ5IHRoZSBHUFUsIGNhbWVyYS92 aWRlbywgYW5kIGF1ZGlvIGNvbXBvbmVudHMgb24KKyAqIHNvbWUgU25hcGRyYWdvbiBTb0NzLgor ICoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBCcmlhbiBNYXNuZXkgPG1hc25leWJAb25zdGF0aW9u Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBSZWQgSGF0LiBBdXRob3I6IFJvYiBDbGFyayA8 cm9iZGNsYXJrQGdtYWlsLmNvbT4KKyAqLworCisjaWZuZGVmIF9fT0NNRU1fSF9fCisjZGVmaW5l IF9fT0NNRU1fSF9fCisKK2VudW0gb2NtZW1fY2xpZW50IHsKKwkvKiBHTUVNIGNsaWVudHMgKi8K KwlPQ01FTV9HUkFQSElDUyA9IDB4MCwKKwkvKgorCSAqIFRPRE8gYWRkIG1vcmUgb25jZSBvY21l bV9hbGxvY2F0ZSgpIGlzIGNsZXZlciBlbm91Z2ggdG8KKwkgKiBkZWFsIHdpdGggbXVsdGlwbGUg Y2xpZW50cy4KKwkgKi8KKwlPQ01FTV9DTElFTlRfTUFYLAorfTsKKworc3RydWN0IG9jbWVtOwor CitzdHJ1Y3Qgb2NtZW1fYnVmIHsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwl1bnNpZ25lZCBs b25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBsZW47Cit9OworCisjaWYgSVNfRU5BQkxFRChDT05G SUdfUUNPTV9PQ01FTSkKKworc3RydWN0IG9jbWVtICpvZl9nZXRfb2NtZW0oc3RydWN0IGRldmlj ZSAqZGV2KTsKK3N0cnVjdCBvY21lbV9idWYgKm9jbWVtX2FsbG9jYXRlKHN0cnVjdCBvY21lbSAq b2NtZW0sIGVudW0gb2NtZW1fY2xpZW50IGNsaWVudCwKKwkJCQkgdW5zaWduZWQgbG9uZyBzaXpl KTsKK3ZvaWQgb2NtZW1fZnJlZShzdHJ1Y3Qgb2NtZW0gKm9jbWVtLCBlbnVtIG9jbWVtX2NsaWVu dCBjbGllbnQsCisJCXN0cnVjdCBvY21lbV9idWYgKmJ1Zik7CisKKyNlbHNlIC8qIElTX0VOQUJM RUQoQ09ORklHX1FDT01fT0NNRU0pICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9jbWVtICpv Zl9nZXRfb2NtZW0oc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBFUlJfUFRSKC1FTk9E RVYpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvY21lbV9idWYgKm9jbWVtX2FsbG9jYXRl KHN0cnVjdCBvY21lbSAqb2NtZW0sCisJCQkJCSAgICAgICBlbnVtIG9jbWVtX2NsaWVudCBjbGll bnQsCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIEVSUl9QVFIo LUVOT0RFVik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvY21lbV9mcmVlKHN0cnVjdCBvY21l bSAqb2NtZW0sIGVudW0gb2NtZW1fY2xpZW50IGNsaWVudCwKKwkJCSAgICAgIHN0cnVjdCBvY21l bV9idWYgKmJ1ZikKK3sKK30KKworI2VuZGlmIC8qIElTX0VOQUJMRUQoQ09ORklHX1FDT01fT0NN RU0pICovCisKKyNlbmRpZiAvKiBfX09DTUVNX0hfXyAqLwotLSAKMi4yMS4wCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBs aXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8=