From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bjorn Andersson Subject: Re: [PATCH 5/6] soc: qcom: add OCMEM driver Date: Sun, 16 Jun 2019 10:41:06 -0700 Message-ID: <20190616174106.GO22737@tuxbook-pro> References: <20190616132930.6942-1-masneyb@onstation.org> <20190616132930.6942-6-masneyb@onstation.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20190616132930.6942-6-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: Brian Masney Cc: mark.rutland-5wv7dgnIgG8@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, jonathan-eSc4qw6YbEQ@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, airlied-cv59FeDIM0c@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, david.brown-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, agross-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, daniel-/w4YWyX8dFk@public.gmane.org, sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org List-Id: dri-devel@lists.freedesktop.org T24gU3VuIDE2IEp1biAwNjoyOSBQRFQgMjAxOSwgQnJpYW4gTWFzbmV5IHdyb3RlOgoKPiBGcm9t OiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+Cj4gCj4gVGhlIE9DTUVNIGRyaXZlciBo YW5kbGVzIGFsbG9jYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIE9uIENoaXAKPiBNRU1v cnkgdGhhdCBpcyBwcmVzZW50IG9uIHNvbWUgU25hcGRyYWdvbiBTb0NzLgo+IAo+IERldmljZXMg d2hpY2ggaGF2ZSBPQ01FTSBkbyBub3QgaGF2ZSBHTUVNIGluc2lkZSB0aGUgR1BVIGNvcmUsIHNv IHRoZQo+IEdQVSBtdXN0IGluc3RlYWQgdXNlIE9DTUVNIHRvIGJlIGZ1bmN0aW9uYWwuIFNpbmNl IGN1cnJlbnRseSB0aGUgR1BVCj4gaXMgdGhlIG9ubHkgT0NNRU0gdXNlciB3aXRoIGFuIHVwc3Ry ZWFtIGRyaXZlciwgdGhpcyBpcyBqdXN0IGEgbWluaW1hbAo+IGltcGxlbWVudGF0aW9uIHN1ZmZp Y2llbnQgZm9yIHN0YXRpY2FsbHkgYWxsb2NhdGluZyB0byB0aGUgR1BVIGl0J3MKPiBjaHVuayBv ZiBPQ01FTS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5j b20+Cj4gQ28tZGV2ZWxvcGVkLWJ5OiBCcmlhbiBNYXNuZXkgPG1hc25leWJAb25zdGF0aW9uLm9y Zz4KPiBTaWduZWQtb2ZmLWJ5OiBCcmlhbiBNYXNuZXkgPG1hc25leWJAb25zdGF0aW9uLm9yZz4K PiAtLS0KPiBDaGFuZ2VzIHNpbmNlIFJvYidzIGxhc3QgdmVyc2lvbiBvZiB0aGlzIHBhdGNoOgo+ IGh0dHBzOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcGF0Y2gvNzM3OTgwMS8KPiAtIHJlZm9ybWF0 dGVkIGRyaXZlciB0byBhbGxvdyBtdWx0aXBsZSBpbnN0YW5jZXMKPiAtIHVwZGF0ZWQgbG9nZ2lu ZyBvZiBlcnJvciBwYXRocyBkdXJpbmcgZGV2aWNlIHByb2JpbmcKPiAtIHJlbW92ZSB1bnVzZWQg cHNnc2NfY3RybAo+IC0gcmVtb3ZlIF9jbGsgZnJvbSBjbG9jayBuYW1lcwo+IC0gcHJvcGFnYXRl IGVycm9yIGNvZGUgZnJvbSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoKQo+IC0gdXNlIGRldmljZV9n ZXRfbWF0Y2hfZGF0YSgpCj4gLSBTUERYIGxpY2Vuc2UgdGFncwo+IC0gcmVtb3ZlIFFDT01fU01E IGluIEtjb25maWcKPiAtIHNlbGVjdCBBUkNIX1FDT00gaW4gS2NvbmZpZwo+IC0gc2VsZWN0IFFD T01fU0NNIGluIEtjb25maWcKPiAtIGxvbmdlciBkZXNjcmlwdGlvbiBpbiBLY29uZmlnCj4gCj4g IGRyaXZlcnMvc29jL3Fjb20vS2NvbmZpZyAgICAgfCAgMTAgKwo+ICBkcml2ZXJzL3NvYy9xY29t L01ha2VmaWxlICAgIHwgICAxICsKPiAgZHJpdmVycy9zb2MvcWNvbS9vY21lbS5jICAgICB8IDQw MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL3NvYy9xY29t L29jbWVtLnhtbC5oIHwgIDg2ICsrKysrKysrCj4gIGluY2x1ZGUvc29jL3Fjb20vb2NtZW0uaCAg ICAgfCAgMzQgKysrCj4gIDUgZmlsZXMgY2hhbmdlZCwgNTMzIGluc2VydGlvbnMoKykKPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc29jL3Fjb20vb2NtZW0uYwo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9zb2MvcWNvbS9vY21lbS54bWwuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg aW5jbHVkZS9zb2MvcWNvbS9vY21lbS5oCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3Fj b20vS2NvbmZpZyBiL2RyaXZlcnMvc29jL3Fjb20vS2NvbmZpZwo+IGluZGV4IDg4MGNmMDI5MDk2 Mi4uOTk4ZDk0ZDYwYTNjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc29jL3Fjb20vS2NvbmZpZwo+ ICsrKyBiL2RyaXZlcnMvc29jL3Fjb20vS2NvbmZpZwo+IEBAIC02Miw2ICs2MiwxNiBAQCBjb25m aWcgUUNPTV9NRFRfTE9BREVSCj4gIAl0cmlzdGF0ZQo+ICAJc2VsZWN0IFFDT01fU0NNCj4gIAo+ ICtjb25maWcgUUNPTV9PQ01FTQo+ICsJdHJpc3RhdGUgIlF1YWxjb21tIE9uIENoaXAgTWVtb3J5 IChPQ01FTSkgZHJpdmVyIgo+ICsJZGVwZW5kcyBvbiBBUkNIX1FDT00KPiArCXNlbGVjdCBRQ09N X1NDTQo+ICsJaGVscAo+ICsgICAgICAgICAgVGhlIE9uIENoaXAgTWVtb3J5IChPQ01FTSkgYWxs b2NhdG9yIGFsbG93cyB2YXJpb3VzIGNsaWVudHMgdG8KPiArICAgICAgICAgIGFsbG9jYXRlIG1l bW9yeSBmcm9tIE9DTUVNIGJhc2VkIG9uIHBlcmZvcm1hbmNlLCBsYXRlbmN5IGFuZCBwb3dlcgo+ ICsgICAgICAgICAgcmVxdWlyZW1lbnRzLiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGJ5IHRoZSBH UFUsIGNhbWVyYS92aWRlbywgYW5kCj4gKyAgICAgICAgICBhdWRpbyBjb21wb25lbnRzIG9uIHNv bWUgU25hcGRyYWdvbiBTb0NzLgo+ICsKPiAgY29uZmlnIFFDT01fUE0KPiAgCWJvb2wgIlF1YWxj b21tIFBvd2VyIE1hbmFnZW1lbnQiCj4gIAlkZXBlbmRzIG9uIEFSQ0hfUUNPTSAmJiAhQVJNNjQK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvcWNvbS9NYWtlZmlsZSBiL2RyaXZlcnMvc29jL3Fj b20vTWFrZWZpbGUKPiBpbmRleCBmZmU1MTliMGNiNjYuLjc2YWM0NjlmNTQ4YyAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL3NvYy9xY29tL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9zb2MvcWNvbS9N YWtlZmlsZQo+IEBAIC01LDYgKzUsNyBAQCBvYmotJChDT05GSUdfUUNPTV9DT01NQU5EX0RCKSAr PSBjbWQtZGIubwo+ICBvYmotJChDT05GSUdfUUNPTV9HTElOS19TU1IpICs9CWdsaW5rX3Nzci5v Cj4gIG9iai0kKENPTkZJR19RQ09NX0dTQkkpCSs9CXFjb21fZ3NiaS5vCj4gIG9iai0kKENPTkZJ R19RQ09NX01EVF9MT0FERVIpCSs9IG1kdF9sb2FkZXIubwo+ICtvYmotJChDT05GSUdfUUNPTV9P Q01FTSkJKz0gb2NtZW0ubwo+ICBvYmotJChDT05GSUdfUUNPTV9QTSkJKz0Jc3BtLm8KPiAgb2Jq LSQoQ09ORklHX1FDT01fUU1JX0hFTFBFUlMpCSs9IHFtaV9oZWxwZXJzLm8KPiAgcW1pX2hlbHBl cnMteQkrPSBxbWlfZW5jZGVjLm8gcW1pX2ludGVyZmFjZS5vCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvc29jL3Fjb20vb2NtZW0uYyBiL2RyaXZlcnMvc29jL3Fjb20vb2NtZW0uYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi41ZWJmNTAzMWI2YzUKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9zb2MvcWNvbS9vY21lbS5jCj4gQEAgLTAsMCArMSw0MDIg QEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ICsvKgo+ICsg KiBDb3B5cmlnaHQgKEMpIDIwMTkgQnJpYW4gTWFzbmV5IDxtYXNuZXliQG9uc3RhdGlvbi5vcmc+ Cj4gKyAqIENvcHlyaWdodCAoQykgMjAxNSBSZWQgSGF0LiBBdXRob3I6IFJvYiBDbGFyayA8cm9i ZGNsYXJrQGdtYWlsLmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9pby5oPgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9x Y29tX3NjbS5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2l6ZXMuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L3NsYWIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gKwo+ICsjaW5jbHVkZSA8c29j L3Fjb20vb2NtZW0uaD4KPiArI2luY2x1ZGUgIm9jbWVtLnhtbC5oIgo+ICsKPiArZW51bSByZWdp b25fbW9kZSB7Cj4gKwlXSURFX01PREUgPSAweDAsCj4gKwlUSElOX01PREUsCj4gKwlNT0RFX0RF RkFVTFQgPSBXSURFX01PREUsCj4gK307Cj4gKwo+ICtzdHJ1Y3Qgb2NtZW1fcmVnaW9uIHsKPiAr CWJvb2wgaW50ZXJsZWF2ZWQ7Cj4gKwllbnVtIHJlZ2lvbl9tb2RlIG1vZGU7Cj4gKwl1bnNpZ25l ZCBpbnQgbnVtX21hY3JvczsKPiArCWVudW0gb2NtZW1fbWFjcm9fc3RhdGUgbWFjcm9fc3RhdGVb NF07Cj4gKwl1bnNpZ25lZCBsb25nIG1hY3JvX3NpemU7Cj4gKwl1bnNpZ25lZCBsb25nIHJlZ2lv bl9zaXplOwo+ICt9Owo+ICsKPiArc3RydWN0IG9jbWVtX2NvbmZpZyB7Cj4gKwl1aW50OF90IG51 bV9yZWdpb25zOwo+ICsJdWludDMyX3QgbWFjcm9fc2l6ZTsKPiArfTsKPiArCj4gK3N0cnVjdCBv Y21lbSB7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwljb25zdCBzdHJ1Y3Qgb2NtZW1fY29u ZmlnICpjb25maWc7Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKm9jbWVtX21lbTsKPiArCXN0cnVjdCBj bGsgKmNvcmVfY2xrOwo+ICsJc3RydWN0IGNsayAqaWZhY2VfY2xrOwo+ICsJdm9pZCBfX2lvbWVt ICptbWlvOwo+ICsJdW5zaWduZWQgaW50IG51bV9wb3J0czsKPiArCXVuc2lnbmVkIGludCBudW1f bWFjcm9zOwo+ICsJYm9vbCBpbnRlcmxlYXZlZDsKPiArCXN0cnVjdCBvY21lbV9yZWdpb24gKnJl Z2lvbnM7Cj4gK307Cj4gKwo+ICsjZGVmaW5lIEZJRUxEKHZhbCwgbmFtZSkgKCgodmFsKSAmIG5h bWUgIyMgX19NQVNLKSA+PiBuYW1lICMjIF9fU0hJRlQpCgppbmNsdWRlL2xpbnV4L2JpdGZpZWxk LmggaGFzIHN0YW5kYXJkIG1hY3JvcyBmb3IgdGhpcywgcGxlYXNlIHVzZSB0aGF0Cmluc3RlYWQu Cgo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIG9jbWVtX3dyaXRlKHN0cnVjdCBvY21lbSAqb2Nt ZW0sIHUzMiByZWcsIHUzMiBkYXRhKQo+ICt7Cj4gKwl3cml0ZWwoZGF0YSwgb2NtZW0tPm1taW8g KyByZWcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHUzMiBvY21lbV9yZWFkKHN0cnVjdCBv Y21lbSAqb2NtZW0sIHUzMiByZWcpCj4gK3sKPiArCXJldHVybiByZWFkbChvY21lbS0+bW1pbyAr IHJlZyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgb2NtZW1fY2xrX2VuYWJsZShzdHJ1Y3Qgb2Nt ZW0gKm9jbWVtKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGNsa19wcmVwYXJlX2Vu YWJsZShvY21lbS0+Y29yZV9jbGspOwoKVXNlIGNsa19idWxrXyogaW5zdGVhZCwgaXQgd2lsbCBy ZWR1Y2UgdGhlIGFtb3VudCBvZiBkdXBsaWNhdGlvbiBpbiB0aGUKdGhyZWUgcGxhY2VzIHlvdSBw b2tlIGF0IHlvdXIgY2xvY2tzLgoKQW5kIHdpdGggdGhhdCBJIHdvdWxkIHN1Z2dlc3QgdGhhdCB5 b3UganVzdCBpbmxpbmUgdGhlc2UgaW50byBwcm9iZSBhbmQKcmVtb3ZlLgoKPiArCWlmIChyZXQp IHsKPiArCQlkZXZfaW5mbyhvY21lbS0+ZGV2LCAiRmFpbCB0byBlbmFibGUgY29yZSBjbGtcbiIp Owo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxl KG9jbWVtLT5pZmFjZV9jbGspOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9pbmZvKG9jbWVtLT5k ZXYsICJGYWlsIHRvIGVuYWJsZSBpZmFjZSBjbGtcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG9jbWVtX2Nsa19kaXNh YmxlKHN0cnVjdCBvY21lbSAqb2NtZW0pCj4gK3sKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShv Y21lbS0+aWZhY2VfY2xrKTsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShvY21lbS0+Y29yZV9j bGspOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG9jbWVtX2Rldl9yZW1vdmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKClBsZWFzZSBtb3ZlIHRoaXMgYmVsb3cgcHJvYmUoKS4KCj4gK3sK PiArCXN0cnVjdCBvY21lbSAqb2NtZW0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiAr Cj4gKwlvY21lbV9jbGtfZGlzYWJsZShvY21lbSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHVwZGF0ZV9vY21lbShzdHJ1Y3Qgb2NtZW0gKm9jbWVtKQo+ICt7Cj4g Kwl1aW50MzJfdCByZWdpb25fbW9kZV9jdHJsID0gMHgwOwo+ICsJdW5zaWduZWQgaW50IHBvcyA9 IDAsIGkgPSAwOwoKQm90aCBwb3MgYW5kIGkgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIG5v IG5lZWQgdG8gZG8gaXQgaGVyZS4KCj4gKwo+ICsJaWYgKCFxY29tX3NjbV9vY21lbV9sb2NrX2F2 YWlsYWJsZSgpKSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IG9jbWVtLT5jb25maWctPm51bV9yZWdp b25zOyBpKyspIHsKPiArCQkJc3RydWN0IG9jbWVtX3JlZ2lvbiAqcmVnaW9uID0gJm9jbWVtLT5y ZWdpb25zW2ldOwo+ICsKPiArCQkJcG9zID0gaSA8PCAyOwoKSnVzdCB1c2UgaSAqIDQgaW4gdGhl IEJJVCgpIG9wZXJhdGlvbiBiZWxvdy4KCgpCdXQgdGhlIGdlbmVyYXRlZCBtYWNyb3MgaGFzIHRo ZSAidGhpbiBiaXRzIiBhcyAxLCAyLCA0LCA4OyBzbyBzaG91bGRuJ3QKdGhpcyBiZSBCSVQoaSk/ Cgo+ICsJCQlpZiAocmVnaW9uLT5tb2RlID09IFRISU5fTU9ERSkKPiArCQkJCXJlZ2lvbl9tb2Rl X2N0cmwgfD0gQklUKHBvcyk7Cj4gKwkJfQo+ICsKPiArCQlkZXZfZGJnKG9jbWVtLT5kZXYsICJv Y21lbV9yZWdpb25fbW9kZV9jb250cm9sICV4XG4iLAo+ICsJCQlyZWdpb25fbW9kZV9jdHJsKTsK PiArCQlvY21lbV93cml0ZShvY21lbSwgUkVHX09DTUVNX1JFR0lPTl9NT0RFX0NUTCwgcmVnaW9u X21vZGVfY3RybCk7Cj4gKwl9Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG9jbWVtLT5jb25maWct Pm51bV9yZWdpb25zOyBpKyspIHsKPiArCQlzdHJ1Y3Qgb2NtZW1fcmVnaW9uICpyZWdpb24gPSAm b2NtZW0tPnJlZ2lvbnNbaV07Cj4gKwkJdTMyIGRhdGE7Cj4gKwo+ICsJCWRhdGEgPSBPQ01FTV9Q U0dTQ19DVExfTUFDUk8wX01PREUocmVnaW9uLT5tYWNyb19zdGF0ZVswXSkgfAo+ICsJCQlPQ01F TV9QU0dTQ19DVExfTUFDUk8xX01PREUocmVnaW9uLT5tYWNyb19zdGF0ZVsxXSkgfAo+ICsJCQlP Q01FTV9QU0dTQ19DVExfTUFDUk8yX01PREUocmVnaW9uLT5tYWNyb19zdGF0ZVsyXSkgfAo+ICsJ CQlPQ01FTV9QU0dTQ19DVExfTUFDUk8zX01PREUocmVnaW9uLT5tYWNyb19zdGF0ZVszXSk7Cj4g Kwo+ICsJCW9jbWVtX3dyaXRlKG9jbWVtLCBSRUdfT0NNRU1fUFNHU0NfQ1RMKGkpLCBkYXRhKTsK PiArCX0KPiArfQo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgcGh5c190b19vZmZzZXQoc3Ry dWN0IG9jbWVtICpvY21lbSwKPiArCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIpCj4gK3sKPiAr CWlmIChhZGRyIDwgb2NtZW0tPm9jbWVtX21lbS0+c3RhcnQgfHwgYWRkciA+PSBvY21lbS0+b2Nt ZW1fbWVtLT5lbmQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0dXJuIGFkZHIgLSBvY21lbS0+ b2NtZW1fbWVtLT5zdGFydDsKPiArfQo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgZGV2aWNl X2FkZHJlc3Moc3RydWN0IG9jbWVtICpvY21lbSwKPiArCQkJCSAgICBlbnVtIG9jbWVtX2NsaWVu dCBjbGllbnQsCj4gKwkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyKQo+ICt7Cj4gKwkvKiBUT0RP LCBncHUgdXNlcyBwaHlzX3RvX29mZnNldCwgYnV0IG90aGVycyBkbyBub3QuLiAqLwoKUGVyaGFw cyBXQVJOX09OKGNsaWVudCAhPSBPQ01FTV9HUkFQSElDUykgYXMgd2VsbD8KCj4gKwlyZXR1cm4g cGh5c190b19vZmZzZXQob2NtZW0sIGFkZHIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB1cGRh dGVfcmFuZ2Uoc3RydWN0IG9jbWVtICpvY21lbSwgc3RydWN0IG9jbWVtX2J1ZiAqYnVmLAo+ICsJ CQkgZW51bSBvY21lbV9tYWNyb19zdGF0ZSBtc3RhdGUsIGVudW0gcmVnaW9uX21vZGUgcm1vZGUp Cj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKPiArCWludCBpLCBqOwo+ICsKPiAr CS8qCj4gKwkgKiBUT0RPIHByb2JhYmx5IHNob3VsZCBhc3NlcnQgc29tZXdoZXJlIHRoYXQgcmFu Z2UgaXMgYWxpZ25lZAo+ICsJICogdG8gbWFjcm8gYm91bmRhcmllcy4uCj4gKwkgKi8KPiArCj4g Kwlmb3IgKGkgPSAwOyBpIDwgb2NtZW0tPmNvbmZpZy0+bnVtX3JlZ2lvbnM7IGkrKykgewo+ICsJ CXN0cnVjdCBvY21lbV9yZWdpb24gKnJlZ2lvbiA9ICZvY21lbS0+cmVnaW9uc1tpXTsKPiArCj4g KwkJaWYgKGJ1Zi0+b2Zmc2V0IDw9IG9mZnNldCAmJiBvZmZzZXQgPCBidWYtPm9mZnNldCArIGJ1 Zi0+bGVuKQo+ICsJCQlyZWdpb24tPm1vZGUgPSBybW9kZTsKPiArCj4gKwkJZm9yIChqID0gMDsg aiA8IHJlZ2lvbi0+bnVtX21hY3JvczsgaisrKSB7Cj4gKwkJCWlmIChidWYtPm9mZnNldCA8PSBv ZmZzZXQgJiYKPiArCQkJICAgIG9mZnNldCA8IGJ1Zi0+b2Zmc2V0ICsgYnVmLT5sZW4pCj4gKwkJ CQlyZWdpb24tPm1hY3JvX3N0YXRlW2pdID0gbXN0YXRlOwo+ICsKPiArCQkJb2Zmc2V0ICs9IHJl Z2lvbi0+bWFjcm9fc2l6ZTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJdXBkYXRlX29jbWVtKG9jbWVt KTsKPiArfQo+ICsKPiArc3RydWN0IG9jbWVtICpvZl9nZXRfb2NtZW0oc3RydWN0IGRldmljZSAq ZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owo+ICsJc3RydWN0IGRl dmljZV9ub2RlICpkZXZub2RlOwo+ICsKPiArCWRldm5vZGUgPSBvZl9wYXJzZV9waGFuZGxlKGRl di0+b2Zfbm9kZSwgIm9jbWVtIiwgMCk7Cj4gKwlpZiAoIWRldm5vZGUpIHsKPiArCQlkZXZfZXJy KGRldiwgIkNhbm5vdCBsb29rIHVwIG9jbWVtIHBoYW5kbGVcbiIpOwo+ICsJCXJldHVybiBOVUxM OwoKcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cgo+ICsJfQo+ICsKPiArCXBkZXYgPSBvZl9maW5k X2RldmljZV9ieV9ub2RlKGRldm5vZGUpOwo+ICsJaWYgKCFwZGV2KSB7Cj4gKwkJZGV2X2Vycihk ZXYsICJDYW5ub3QgZmluZCBkZXZpY2Ugbm9kZSAlc1xuIiwgZGV2bm9kZS0+bmFtZSk7Cj4gKwkJ cmV0dXJuIE5VTEw7CgpyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKQoKPiArCX0KPiArCj4g KwlyZXR1cm4gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4gK30KPiArRVhQT1JUX1NZTUJP TChvZl9nZXRfb2NtZW0pOwo+ICsKPiArc3RydWN0IG9jbWVtX2J1ZiAqb2NtZW1fYWxsb2NhdGUo c3RydWN0IG9jbWVtICpvY21lbSwgZW51bSBvY21lbV9jbGllbnQgY2xpZW50LAo+ICsJCQkJIHVu c2lnbmVkIGxvbmcgc2l6ZSkKPiArewo+ICsJc3RydWN0IG9jbWVtX2J1ZiAqYnVmOwo+ICsKPiAr CWJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpidWYpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghYnVmKQo+ ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKClRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBh bGxvY2F0b3IuLi4gSXQgd291bGQgYmUgbmljZSB0byBhZGQgdGhlIG1pbmltYWwKZnVuY3Rpb25h bGl0eSBvZiBtYWtpbmcgc3VyZSB0aGF0IHlvdSBvbmx5IHJldHVybiBzdWNjZXNzZnVsbHkgaWYK dGhlcmUncyBub3QgYWxyZWFkeSBhIGxpdmUgYWxsb2NhdGlvbi4KCkJ1dCBhdCBsZWFzdCB5b3Ug c2hvdWxkIGFkZCBhIGNvbW1lbnQgaGVyZSBzdGF0aW5nIHRoZSAibGltaXRhdGlvbiIgb24KdGhl IGFsZ29yaXRobS4KCj4gKwlidWYtPm9mZnNldCA9IDA7Cj4gKwlidWYtPmFkZHIgPSBkZXZpY2Vf YWRkcmVzcyhvY21lbSwgY2xpZW50LCBidWYtPm9mZnNldCk7Cj4gKwlidWYtPmxlbiA9IHNpemU7 Cj4gKwo+ICsJdXBkYXRlX3JhbmdlKG9jbWVtLCBidWYsIENPUkVfT04sIFdJREVfTU9ERSk7Cj4g Kwo+ICsJaWYgKHFjb21fc2NtX29jbWVtX2xvY2tfYXZhaWxhYmxlKCkpIHsKPiArCQlpbnQgcmV0 Owo+ICsKPiArCQlyZXQgPSBxY29tX3NjbV9vY21lbV9sb2NrKFFDT01fU0NNX09DTUVNX0dSQVBI SUNTX0lELAo+ICsJCQkJCSAgYnVmLT5vZmZzZXQsIGJ1Zi0+bGVuLCBXSURFX01PREUpOwo+ICsJ CWlmIChyZXQpCj4gKwkJCWRldl9lcnIob2NtZW0tPmRldiwgImNvdWxkIG5vdCBsb2NrOiAlZFxu IiwgcmV0KTsKPiArCX0gZWxzZSB7Cj4gKwkJaWYgKGNsaWVudCA9PSBPQ01FTV9HUkFQSElDUykg ewoKSXNuJ3QgdGhlIGxvY2tfYXZhaWxhYmxlIGNhc2UgYWxzbyBncmFwaGNpcyBvbmx5PyBQZXJo YXBzIGl0J3Mgd29ydGgKc3dhcHBpbmcgdGhlIGlubmVyIGFuZCBvdXRlciBibG9ja3MuCgo+ICsJ CQlvY21lbV93cml0ZShvY21lbSwgUkVHX09DTUVNX0dGWF9NUFVfU1RBUlQsCj4gKwkJCQkgICAg YnVmLT5vZmZzZXQpOwo+ICsJCQlvY21lbV93cml0ZShvY21lbSwgUkVHX09DTUVNX0dGWF9NUFVf RU5ELAo+ICsJCQkJICAgIGJ1Zi0+b2Zmc2V0ICsgYnVmLT5sZW4pOwo+ICsJCX0KCkFuZCBpdCdz IHByb2JhYmx5IGdvb2QgdG8gd2FybiBhbmQgZmFpbCBpZiB0aGUgY2xpZW50IGlzbid0IGdyYXBo aWNzLgoKPiArCX0KPiArCj4gKwlyZXR1cm4gYnVmOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0wob2Nt ZW1fYWxsb2NhdGUpOwo+ICsKPiArdm9pZCBvY21lbV9mcmVlKHN0cnVjdCBvY21lbSAqb2NtZW0s IGVudW0gb2NtZW1fY2xpZW50IGNsaWVudCwKPiArCQlzdHJ1Y3Qgb2NtZW1fYnVmICpidWYpCj4g K3sKPiArCXVwZGF0ZV9yYW5nZShvY21lbSwgYnVmLCBDTEtfT0ZGLCBNT0RFX0RFRkFVTFQpOwo+ ICsKPiArCWlmIChxY29tX3NjbV9vY21lbV9sb2NrX2F2YWlsYWJsZSgpKSB7Cj4gKwkJaW50IHJl dDsKPiArCj4gKwkJcmV0ID0gcWNvbV9zY21fb2NtZW1fdW5sb2NrKFFDT01fU0NNX09DTUVNX0dS QVBISUNTX0lELAo+ICsJCQkJCSAgICBidWYtPm9mZnNldCwgYnVmLT5sZW4pOwo+ICsJCWlmIChy ZXQpCj4gKwkJCWRldl9lcnIob2NtZW0tPmRldiwgImNvdWxkIG5vdCB1bmxvY2s6ICVkXG4iLCBy ZXQpOwo+ICsJfSBlbHNlIHsKPiArCQlpZiAoY2xpZW50ID09IE9DTUVNX0dSQVBISUNTKSB7Cj4g KwkJCW9jbWVtX3dyaXRlKG9jbWVtLCBSRUdfT0NNRU1fR0ZYX01QVV9TVEFSVCwgMHgwKTsKPiAr CQkJb2NtZW1fd3JpdGUob2NtZW0sIFJFR19PQ01FTV9HRlhfTVBVX0VORCwgMHgwKTsKPiArCQl9 Cj4gKwl9Cj4gKwo+ICsJa2ZyZWUoYnVmKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKG9jbWVtX2Zy ZWUpOwo+ICsKPiArc3RhdGljIGludCBvY21lbV9kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IG9jbWVtICpvY21lbTsKPiArCXVpbnQzMl90IHJl ZywgbnVtX2JhbmtzLCByZWdpb25fc2l6ZTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2 LT5kZXY7Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiArCWludCBpLCBqLCByZXQ7Cj4gKwo+ ICsJaWYgKCFxY29tX3NjbV9pc19hdmFpbGFibGUoKSkKPiArCQlyZXR1cm4gLUVQUk9CRV9ERUZF UjsKPiArCj4gKwlvY21lbSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqb2NtZW0pLCBHRlBf S0VSTkVMKTsKPiArCWlmICghb2NtZW0pCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJb2Nt ZW0tPmRldiA9IGRldjsKPiArCW9jbWVtLT5jb25maWcgPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEo ZGV2KTsKPiArCj4gKwlvY21lbS0+Y29yZV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiY29yZSIp OwoKZGV2bV9jbGtfYnVsa19nZXQoKQoKPiArCWlmIChJU19FUlIob2NtZW0tPmNvcmVfY2xrKSkg ewo+ICsJCWlmIChQVFJfRVJSKG9jbWVtLT5jb3JlX2NsaykgIT0gLUVQUk9CRV9ERUZFUikKPiAr CQkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gZ2V0IHRoZSBjb3JlIGNsb2NrXG4iKTsKPiArCj4g KwkJcmV0dXJuIFBUUl9FUlIob2NtZW0tPmNvcmVfY2xrKTsKPiArCX0KPiArCj4gKwlvY21lbS0+ aWZhY2VfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImlmYWNlIik7Cj4gKwlpZiAoSVNfRVJSKG9j bWVtLT5pZmFjZV9jbGspKSB7Cj4gKwkJaWYgKFBUUl9FUlIob2NtZW0tPmlmYWNlX2NsaykgIT0g LUVQUk9CRV9ERUZFUikKPiArCQkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gZ2V0IHRoZSBpZmFj ZSBjbG9ja1xuIik7Cj4gKwo+ICsJCXJldHVybiBQVFJfRVJSKG9jbWVtLT5pZmFjZV9jbGspOwo+ ICsJfQo+ICsKPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9S RVNPVVJDRV9NRU0sCj4gKwkJCQkJICAgIm9jbWVtX2N0cmxfcGh5c2ljYWwiKTsKCldlIGtub3cg aXQncyB0aGUgIl9waHlzaWNhbCIsIHNvIGRyb3AgdGhhdCBmcm9tIHRoZSBuYW1lLgoKPiArCWlm ICghcmVzKSB7CgpJdCdzIGlkaW9tYXRpYyB0byBpZ25vcmUgdGhpcyBjaGVjayBhbmQgcmVseSBv biBpb3JlbWFwX3Jlc291cmNlKCkgdG8KZmFpbCBncmFjZWZ1bGx5IGlmIHBhc3NlZCBOVUxMLgoK PiArCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBnZXQgb2NtZW1fY3RybF9waHlzaWNhbCByZWdp b25cbiIpOwo+ICsJCXJldHVybiAtRU5YSU87Cj4gKwl9Cj4gKwo+ICsJb2NtZW0tPm1taW8gPSBk ZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKPiArCWlmIChJU19FUlIob2Nt ZW0tPm1taW8pKSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LAo+ICsJCQkiRmFpbGVkIHRvIGlv cmVtYXAgb2NtZW1fY3RybF9waHlzaWNhbCByZXNvdXJjZVxuIik7Cj4gKwkJcmV0dXJuIFBUUl9F UlIob2NtZW0tPm1taW8pOwo+ICsJfQo+ICsKPiArCW9jbWVtLT5vY21lbV9tZW0gPSBwbGF0Zm9y bV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLAo+ICsJCQkJCQkJIm9j bWVtX3BoeXNpY2FsIik7Cj4gKwlpZiAoIW9jbWVtLT5vY21lbV9tZW0pIHsKPiArCQlkZXZfZXJy KGRldiwgIkNvdWxkIG5vdCBnZXQgb2NtZW1fcGh5c2ljYWwgcmVnaW9uXG4iKTsKPiArCQlyZXR1 cm4gLUVOWElPOwo+ICsJfQo+ICsKPiArCS8qIFRoZSBjb3JlIGNsb2NrIGlzIHN5bmNocm9ub3Vz IHdpdGggZ3JhcGhpY3MgKi8KPiArCVdBUk5fT04oY2xrX3NldF9yYXRlKG9jbWVtLT5jb3JlX2Ns aywgMTAwMCkgPCAwKTsKPiArCj4gKwlyZXQgPSBvY21lbV9jbGtfZW5hYmxlKG9jbWVtKTsKPiAr CWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlpZiAocWNvbV9zY21fcmVzdG9yZV9z ZWNfY29uZmlnX2F2YWlsYWJsZSgpKSB7Cj4gKwkJZGV2X2RiZyhkZXYsICJjb25maWd1cmluZyBz Y21cbiIpOwo+ICsJCXJldCA9IHFjb21fc2NtX3Jlc3RvcmVfc2VjX2NvbmZpZygmcGRldi0+ZGV2 LAo+ICsJCQkJCQkgIFFDT01fU0NNX09DTUVNX0RFVl9JRCk7Cj4gKwkJaWYgKHJldCkgewo+ICsJ CQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBlbmFibGUgc2VjdXJlIGNvbmZpZ3VyYXRpb25cbiIp Owo+ICsJCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmVnID0g b2NtZW1fcmVhZChvY21lbSwgUkVHX09DTUVNX0hXX1BST0ZJTEUpOwo+ICsJb2NtZW0tPm51bV9w b3J0cyA9IEZJRUxEKHJlZywgT0NNRU1fSFdfUFJPRklMRV9OVU1fUE9SVFMpOwo+ICsJb2NtZW0t Pm51bV9tYWNyb3MgPSBGSUVMRChyZWcsIE9DTUVNX0hXX1BST0ZJTEVfTlVNX01BQ1JPUyk7Cj4g KwlvY21lbS0+aW50ZXJsZWF2ZWQgPSAhIShyZWcgJiBPQ01FTV9IV19QUk9GSUxFX0lOVEVSTEVB VklORyk7Cj4gKwo+ICsJbnVtX2JhbmtzID0gb2NtZW0tPm51bV9wb3J0cyAvIDI7Cj4gKwlyZWdp b25fc2l6ZSA9IG9jbWVtLT5jb25maWctPm1hY3JvX3NpemUgKiBudW1fYmFua3M7Cj4gKwo+ICsJ ZGV2X2luZm8oZGV2LCAiJXUgcG9ydHMsICV1IHJlZ2lvbnMsICV1IG1hY3JvcywgJXNpbnRlcmxl YXZlZFxuIiwKPiArCQkgb2NtZW0tPm51bV9wb3J0cywgb2NtZW0tPmNvbmZpZy0+bnVtX3JlZ2lv bnMsCj4gKwkJIG9jbWVtLT5udW1fbWFjcm9zLCBvY21lbS0+aW50ZXJsZWF2ZWQgPyAiIiA6ICJu b3QgIik7Cj4gKwo+ICsJb2NtZW0tPnJlZ2lvbnMgPSBkZXZtX2tjYWxsb2MoZGV2LCBvY21lbS0+ Y29uZmlnLT5udW1fcmVnaW9ucywKPiArCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgb2NtZW1fcmVn aW9uKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIW9jbWVtLT5yZWdpb25zKSB7Cj4gKwkJcmV0ID0g LUVOT01FTTsKPiArCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKPiArCX0KPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgb2NtZW0tPmNvbmZpZy0+bnVtX3JlZ2lvbnM7IGkrKykgewo+ICsJCXN0cnVjdCBv Y21lbV9yZWdpb24gKnJlZ2lvbiA9ICZvY21lbS0+cmVnaW9uc1tpXTsKPiArCj4gKwkJaWYgKFdB Uk5fT04obnVtX2JhbmtzID4gQVJSQVlfU0laRShyZWdpb24tPm1hY3JvX3N0YXRlKSkpIHsKPiAr CQkJcmV0ID0gLUVJTlZBTDsKPiArCQkJZ290byBlcnJfY2xrX2Rpc2FibGU7Cj4gKwkJfQo+ICsK PiArCQlyZWdpb24tPm1vZGUgPSBNT0RFX0RFRkFVTFQ7Cj4gKwkJcmVnaW9uLT5udW1fbWFjcm9z ID0gbnVtX2JhbmtzOwo+ICsKPiArCQlpZiAoaSA9PSAob2NtZW0tPmNvbmZpZy0+bnVtX3JlZ2lv bnMgLSAxKSAmJgo+ICsJCSAgICByZWcgJiBPQ01FTV9IV19QUk9GSUxFX0xBU1RfUkVHTl9IQUxG U0laRSkgewo+ICsJCQlyZWdpb24tPm1hY3JvX3NpemUgPSBvY21lbS0+Y29uZmlnLT5tYWNyb19z aXplIC8gMjsKPiArCQkJcmVnaW9uLT5yZWdpb25fc2l6ZSA9IHJlZ2lvbl9zaXplIC8gMjsKPiAr CQl9IGVsc2Ugewo+ICsJCQlyZWdpb24tPm1hY3JvX3NpemUgPSBvY21lbS0+Y29uZmlnLT5tYWNy b19zaXplOwo+ICsJCQlyZWdpb24tPnJlZ2lvbl9zaXplID0gcmVnaW9uX3NpemU7Cj4gKwkJfQo+ ICsKPiArCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShyZWdpb24tPm1hY3JvX3N0YXRlKTsg aisrKQo+ICsJCQlyZWdpb24tPm1hY3JvX3N0YXRlW2pdID0gQ0xLX09GRjsKPiArCX0KPiArCj4g KwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBvY21lbSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g Kwo+ICtlcnJfY2xrX2Rpc2FibGU6Cj4gKwlvY21lbV9jbGtfZGlzYWJsZShvY21lbSk7Cj4gKwly ZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9jbWVtX2NvbmZpZyBv Y21lbV84OTc0X2NvbmZpZyA9IHsKPiArCS5udW1fcmVnaW9ucyA9IDMsCj4gKwkubWFjcm9fc2l6 ZSA9IFNaXzEyOEssCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBvY21lbV9vZl9tYXRjaFtdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJxY29tLG9jbWVtLW1z bTg5NzQiLCAuZGF0YSA9ICZvY21lbV84OTc0X2NvbmZpZyB9LAo+ICsJeyB9Cj4gK307Cj4gKwo+ ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvY21lbV9vZl9tYXRjaCk7Cj4gKwo+ICtzdGF0aWMg c3RydWN0IHBsYXRmb3JtX2RyaXZlciBvY21lbV9kcml2ZXIgPSB7Cj4gKwkucHJvYmUgPSBvY21l bV9kZXZfcHJvYmUsCj4gKwkucmVtb3ZlID0gb2NtZW1fZGV2X3JlbW92ZSwKPiArCS5kcml2ZXIg PSB7Cj4gKwkJLm5hbWUgPSAib2NtZW0iLAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IG9jbWVtX29m X21hdGNoLAo+ICsJfSwKPiArfTsKPiArCj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIob2NtZW1f ZHJpdmVyKTsKCk1PRFVMRV9MSUNFTlNFKCkKCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3Fj b20vb2NtZW0ueG1sLmggYi9kcml2ZXJzL3NvYy9xY29tL29jbWVtLnhtbC5oCgpJIHdvdWxkIHBy ZWZlciB0aGF0IHRoZXNlIGxpdmVkIGF0IHRoZSB0b3Agb2YgdGhlIGMgZmlsZSwgcmF0aGVyIHRo YW4KYmVpbmcgZ2VuZXJhdGVkLgoKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw MDAwMDAwMC4uYjRiZmI4NWQxZTMzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvc29j L3Fjb20vb2NtZW0ueG1sLmgKPiBAQCAtMCwwICsxLDg2IEBACj4gKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBNSVQgKi8KPiArCj4gKyNpZm5kZWYgT0NNRU1fWE1MCj4gKyNkZWZpbmUgT0NN RU1fWE1MCj4gKwo+ICsvKiBBdXRvZ2VuZXJhdGVkIGZpbGUsIERPIE5PVCBFRElUIG1hbnVhbGx5 IQo+ICsKPiArVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgdGhlIHJ1bGVzLW5nLW5nIGhlYWRl cmdlbiB0b29sIGluIHRoaXMgZ2l0IHJlcG9zaXRvcnk6Cj4gK2h0dHA6Ly9naXRodWIuY29tL2Zy ZWVkcmVuby9lbnZ5dG9vbHMvCj4gK2dpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vZnJlZWRy ZW5vL2Vudnl0b29scy5naXQKPiArCj4gK1RoZSBydWxlcy1uZy1uZyBzb3VyY2UgZmlsZXMgdGhp cyBoZWFkZXIgd2FzIGdlbmVyYXRlZCBmcm9tIGFyZToKPiArLSAvaG9tZS9yb2JjbGFyay9zcmMv ZnJlZWRyZW5vL2Vudnl0b29scy9ybm5kYi9hZHJlbm8vb2NtZW0ueG1sICAgICAgICAgKCAgIDE3 NzMgYnl0ZXMsIGZyb20gMjAxNS0wOS0yNCAxNzozMDowMCkKPiArCj4gK0NvcHlyaWdodCAoQykg MjAxMy0yMDE1IGJ5IHRoZSBmb2xsb3dpbmcgYXV0aG9yczoKPiArLSBSb2IgQ2xhcmsgPHJvYmRj bGFya0BnbWFpbC5jb20+IChyb2JjbGFyaykKPiArKi8KPiArCj4gK2VudW0gb2NtZW1fbWFjcm9f c3RhdGUgewo+ICsJUEFTU1RIUk9VR0ggPSAwLAo+ICsJUEVSSV9PTiA9IDEsCj4gKwlDT1JFX09O ID0gMiwKPiArCUNMS19PRkYgPSA0LAo+ICt9Owo+ICsKPiArI2RlZmluZSBSRUdfT0NNRU1fSFdf VkVSU0lPTgkJCQkJMHgwMDAwMDAwMAo+ICsKPiArI2RlZmluZSBSRUdfT0NNRU1fSFdfUFJPRklM RQkJCQkJMHgwMDAwMDAwNAo+ICsjZGVmaW5lIE9DTUVNX0hXX1BST0ZJTEVfTlVNX1BPUlRTX19N QVNLCQkJMHgwMDAwMDAwZgo+ICsjZGVmaW5lIE9DTUVNX0hXX1BST0ZJTEVfTlVNX1BPUlRTX19T SElGVAkJCTAKPiArc3RhdGljIGlubGluZSB1aW50MzJfdCBPQ01FTV9IV19QUk9GSUxFX05VTV9Q T1JUUyh1aW50MzJfdCB2YWwpCj4gK3sKPiArCXJldHVybiAoKHZhbCkgPDwgT0NNRU1fSFdfUFJP RklMRV9OVU1fUE9SVFNfX1NISUZUKSAmIE9DTUVNX0hXX1BST0ZJTEVfTlVNX1BPUlRTX19NQVNL Owo+ICt9Cj4gKyNkZWZpbmUgT0NNRU1fSFdfUFJPRklMRV9OVU1fTUFDUk9TX19NQVNLCQkJMHgw MDAwM2YwMAo+ICsjZGVmaW5lIE9DTUVNX0hXX1BST0ZJTEVfTlVNX01BQ1JPU19fU0hJRlQJCQk4 Cj4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgT0NNRU1fSFdfUFJPRklMRV9OVU1fTUFDUk9TKHVp bnQzMl90IHZhbCkKPiArewo+ICsJcmV0dXJuICgodmFsKSA8PCBPQ01FTV9IV19QUk9GSUxFX05V TV9NQUNST1NfX1NISUZUKSAmIE9DTUVNX0hXX1BST0ZJTEVfTlVNX01BQ1JPU19fTUFTSzsKPiAr fQo+ICsjZGVmaW5lIE9DTUVNX0hXX1BST0ZJTEVfTEFTVF9SRUdOX0hBTEZTSVpFCQkJMHgwMDAx MDAwMAo+ICsjZGVmaW5lIE9DTUVNX0hXX1BST0ZJTEVfSU5URVJMRUFWSU5HCQkJCTB4MDAwMjAw MDAKPiArCj4gKyNkZWZpbmUgUkVHX09DTUVNX0dFTl9TVEFUVVMJCQkJCTB4MDAwMDAwMGMKPiAr Cj4gKyNkZWZpbmUgUkVHX09DTUVNX1BTR1NDX1NUQVRVUwkJCQkJMHgwMDAwMDAzOAo+ICsKPiAr c3RhdGljIGlubGluZSB1aW50MzJfdCBSRUdfT0NNRU1fUFNHU0ModWludDMyX3QgaTApIHsgcmV0 dXJuIDB4MDAwMDAwM2MgKyAweDEqaTA7IH0KPiArCj4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3Qg UkVHX09DTUVNX1BTR1NDX0NUTCh1aW50MzJfdCBpMCkgeyByZXR1cm4gMHgwMDAwMDAzYyArIDB4 MSppMDsgfQo+ICsjZGVmaW5lIE9DTUVNX1BTR1NDX0NUTF9NQUNSTzBfTU9ERV9fTUFTSwkJCTB4 MDAwMDAwMDcKPiArI2RlZmluZSBPQ01FTV9QU0dTQ19DVExfTUFDUk8wX01PREVfX1NISUZUCQkJ MAo+ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90IE9DTUVNX1BTR1NDX0NUTF9NQUNSTzBfTU9ERShl bnVtIG9jbWVtX21hY3JvX3N0YXRlIHZhbCkKPiArewo+ICsJcmV0dXJuICgodmFsKSA8PCBPQ01F TV9QU0dTQ19DVExfTUFDUk8wX01PREVfX1NISUZUKSAmIE9DTUVNX1BTR1NDX0NUTF9NQUNSTzBf TU9ERV9fTUFTSzsKPiArfQo+ICsjZGVmaW5lIE9DTUVNX1BTR1NDX0NUTF9NQUNSTzFfTU9ERV9f TUFTSwkJCTB4MDAwMDAwNzAKPiArI2RlZmluZSBPQ01FTV9QU0dTQ19DVExfTUFDUk8xX01PREVf X1NISUZUCQkJNAo+ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90IE9DTUVNX1BTR1NDX0NUTF9NQUNS TzFfTU9ERShlbnVtIG9jbWVtX21hY3JvX3N0YXRlIHZhbCkKPiArewo+ICsJcmV0dXJuICgodmFs KSA8PCBPQ01FTV9QU0dTQ19DVExfTUFDUk8xX01PREVfX1NISUZUKSAmIE9DTUVNX1BTR1NDX0NU TF9NQUNSTzFfTU9ERV9fTUFTSzsKPiArfQo+ICsjZGVmaW5lIE9DTUVNX1BTR1NDX0NUTF9NQUNS TzJfTU9ERV9fTUFTSwkJCTB4MDAwMDA3MDAKPiArI2RlZmluZSBPQ01FTV9QU0dTQ19DVExfTUFD Uk8yX01PREVfX1NISUZUCQkJOAo+ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90IE9DTUVNX1BTR1ND X0NUTF9NQUNSTzJfTU9ERShlbnVtIG9jbWVtX21hY3JvX3N0YXRlIHZhbCkKPiArewo+ICsJcmV0 dXJuICgodmFsKSA8PCBPQ01FTV9QU0dTQ19DVExfTUFDUk8yX01PREVfX1NISUZUKSAmIE9DTUVN X1BTR1NDX0NUTF9NQUNSTzJfTU9ERV9fTUFTSzsKPiArfQo+ICsjZGVmaW5lIE9DTUVNX1BTR1ND X0NUTF9NQUNSTzNfTU9ERV9fTUFTSwkJCTB4MDAwMDcwMDAKPiArI2RlZmluZSBPQ01FTV9QU0dT Q19DVExfTUFDUk8zX01PREVfX1NISUZUCQkJMTIKPiArc3RhdGljIGlubGluZSB1aW50MzJfdCBP Q01FTV9QU0dTQ19DVExfTUFDUk8zX01PREUoZW51bSBvY21lbV9tYWNyb19zdGF0ZSB2YWwpCj4g K3sKPiArCXJldHVybiAoKHZhbCkgPDwgT0NNRU1fUFNHU0NfQ1RMX01BQ1JPM19NT0RFX19TSElG VCkgJiBPQ01FTV9QU0dTQ19DVExfTUFDUk8zX01PREVfX01BU0s7Cj4gK30KPiArCj4gKyNkZWZp bmUgUkVHX09DTUVNX1JFR0lPTl9NT0RFX0NUTAkJCQkweDAwMDAxMDAwCj4gKyNkZWZpbmUgT0NN RU1fUkVHSU9OX01PREVfQ1RMX1JFRzBfVEhJTgkJCQkweDAwMDAwMDAxCj4gKyNkZWZpbmUgT0NN RU1fUkVHSU9OX01PREVfQ1RMX1JFRzFfVEhJTgkJCQkweDAwMDAwMDAyCj4gKyNkZWZpbmUgT0NN RU1fUkVHSU9OX01PREVfQ1RMX1JFRzJfVEhJTgkJCQkweDAwMDAwMDA0Cj4gKyNkZWZpbmUgT0NN RU1fUkVHSU9OX01PREVfQ1RMX1JFRzNfVEhJTgkJCQkweDAwMDAwMDA4Cj4gKwo+ICsjZGVmaW5l IFJFR19PQ01FTV9HRlhfTVBVX1NUQVJUCQkJCQkweDAwMDAxMDA0Cj4gKwo+ICsjZGVmaW5lIFJF R19PQ01FTV9HRlhfTVBVX0VORAkJCQkJMHgwMDAwMTAwOAo+ICsKPiArI2VuZGlmIC8qIE9DTUVN X1hNTCAqLwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3NvYy9xY29tL29jbWVtLmggYi9pbmNsdWRl L3NvYy9xY29tL29jbWVtLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw MDAwMC4uZTU2Y2UyMjAwOTZkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1ZGUvc29jL3Fj b20vb2NtZW0uaAo+IEBAIC0wLDAgKzEsMzQgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seSAqLwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTUgUmVkIEhh dAo+ICsgKiBBdXRob3I6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4KPiArICovCj4g Kwo+ICsjaWZuZGVmIF9fT0NNRU1fSF9fCj4gKyNkZWZpbmUgX19PQ01FTV9IX18KPiArCj4gK2Vu dW0gb2NtZW1fY2xpZW50IHsKPiArCS8qIEdNRU0gY2xpZW50cyAqLwo+ICsJT0NNRU1fR1JBUEhJ Q1MgPSAweDAsCj4gKwkvKgo+ICsJICogVE9ETyBhZGQgbW9yZSBvbmNlIG9jbWVtX2FsbG9jYXRl KCkgaXMgY2xldmVyIGVub3VnaCB0bwo+ICsJICogZGVhbCB3aXRoIG11bHRpcGxlIGNsaWVudHMu Cj4gKwkgKi8KPiArCU9DTUVNX0NMSUVOVF9NQVgsCj4gK307Cj4gKwo+ICtzdHJ1Y3Qgb2NtZW07 Cj4gKwo+ICtzdHJ1Y3Qgb2NtZW1fYnVmIHsKPiArCXVuc2lnbmVkIGxvbmcgb2Zmc2V0Owo+ICsJ dW5zaWduZWQgbG9uZyBhZGRyOwo+ICsJdW5zaWduZWQgbG9uZyBsZW47Cj4gK307Cj4gKwo+ICtz dHJ1Y3Qgb2NtZW0gKm9mX2dldF9vY21lbShzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ICtzdHJ1Y3Qg b2NtZW1fYnVmICpvY21lbV9hbGxvY2F0ZShzdHJ1Y3Qgb2NtZW0gKm9jbWVtLCBlbnVtIG9jbWVt X2NsaWVudCBjbGllbnQsCj4gKwkJCQkgdW5zaWduZWQgbG9uZyBzaXplKTsKPiArdm9pZCBvY21l bV9mcmVlKHN0cnVjdCBvY21lbSAqb2NtZW0sIGVudW0gb2NtZW1fY2xpZW50IGNsaWVudCwKPiAr CQlzdHJ1Y3Qgb2NtZW1fYnVmICpidWYpOwo+ICsKPiArI2VuZGlmIC8qIF9fT0NNRU1fSF9fICov Cj4gLS0gCgpSZWdhcmRzLApCam9ybgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9mcmVlZHJlbm8=