From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [PATCH v4 1/2] drm/panel: Add support for Truly NT35597 panel Date: Wed, 30 May 2018 15:12:47 -0400 Message-ID: <20180530191247.GO3373@art_vandelay> References: <1527294472-4451-1-git-send-email-abhinavk@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1527294472-4451-1-git-send-email-abhinavk@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Abhinav Kumar Cc: thierry.reding@gmail.com, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, hoegsberg@google.com, chandanu@codeaurora.org List-Id: linux-arm-msm@vger.kernel.org T24gRnJpLCBNYXkgMjUsIDIwMTggYXQgMDU6Mjc6NTFQTSAtMDcwMCwgQWJoaW5hdiBLdW1hciB3 cm90ZToKPiBBZGQgc3VwcG9ydCBmb3IgVHJ1bHkgTlQzNTU5NyBwYW5lbCB1c2VkCj4gaW4gTVNN IHJlZmVyZW5jZSBwbGF0Zm9ybXMuCj4gCj4gVGhpcyBwYW5lbCBzdXBwb3J0cyBib3RoIHNpbmds ZSBEU0kgYW5kIGR1YWwgRFNJCj4gbW9kZXMuCj4gCj4gSG93ZXZlciwgdGhpcyBwYXRjaCBzZXJp ZXMgYWRkcyBzdXBwb3J0IG9ubHkgZm9yCj4gZHVhbCBEU0kgbW9kZS4KPiAKPiBDaGFuZ2VzIGlu IHY0Ogo+IC0gRml4IHRoZSBsaWNlbnNlIGlkZW50aWZpZXIKPiAtIEZpeCBmb3JtYXR0aW5nIGlz c3VlcyBmb3IgdGhlIHJlZ3VsYXRvciBsb2Fkcwo+IC0gRml4IGVycm9yIG1lc3NhZ2VzIGFuZCBy ZXR1cm4gY29kZQo+IAo+IFNpZ25lZC1vZmYtYnk6IEFyY2hpdCBUYW5lamEgPGFyY2hpdHRAY29k ZWF1cm9yYS5vcmc+Cj4gU2lnbmVkLW9mZi1ieTogQWJoaW5hdiBLdW1hciA8YWJoaW5hdmtAY29k ZWF1cm9yYS5vcmc+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnICAgICAg ICAgICAgICAgfCAgIDggKwo+ICBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgICAgICAg ICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LW50MzU1 OTcuYyB8IDU3NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDMgZmlsZXMgY2hhbmdl ZCwgNTg1IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9wYW5lbC10cnVseS1udDM1NTk3LmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3BhbmVsL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwo+IGlu ZGV4IDI1NjgyZmYuLjJmY2Q5YjEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVs L0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwo+IEBAIC0xNzcs NCArMTc3LDEyIEBAIGNvbmZpZyBEUk1fUEFORUxfU0lUUk9OSVhfU1Q3Nzg5Vgo+ICAJICBTYXkg WSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgU2l0cm9uaXgKPiAg CSAgU1Q3Nzg5ViBjb250cm9sbGVyIGZvciAyNDB4MzIwIExDRCBwYW5lbHMKPiAgCj4gK2NvbmZp ZyBEUk1fUEFORUxfVFJVTFlfTlQzNTU5N19XUVhHQQo+ICsJdHJpc3RhdGUgIlRydWx5IFdRWEdB Igo+ICsJZGVwZW5kcyBvbiBPRgo+ICsJZGVwZW5kcyBvbiBEUk1fTUlQSV9EU0kKPiArCXNlbGVj dCBWSURFT01PREVfSEVMUEVSUwo+ICsJaGVscAo+ICsJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50 IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBUcnVseSBOVDM1NTk3IFdRWEdBIER1YWwgRFNJCj4gKwkg IFZpZGVvIE1vZGUgcGFuZWwKPiAgZW5kbWVudQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vcGFuZWwvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKPiBpbmRl eCBmMjZlZmMxLi4wNTZlYTkzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9N YWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQo+IEBAIC0xOCwz ICsxOCw0IEBAIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0VJS09fNDNXVkYxRykgKz0gcGFuZWwt c2Vpa28tNDN3dmYxZy5vCj4gIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0hBUlBfTFExMDFSMVNY MDEpICs9IHBhbmVsLXNoYXJwLWxxMTAxcjFzeDAxLm8KPiAgb2JqLSQoQ09ORklHX0RSTV9QQU5F TF9TSEFSUF9MUzA0M1QxTEUwMSkgKz0gcGFuZWwtc2hhcnAtbHMwNDN0MWxlMDEubwo+ICBvYmot JChDT05GSUdfRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYpICs9IHBhbmVsLXNpdHJvbml4LXN0 Nzc4OXYubwo+ICtvYmotJChDT05GSUdfRFJNX1BBTkVMX1RSVUxZX05UMzU1OTdfV1FYR0EpICs9 IHBhbmVsLXRydWx5LW50MzU1OTcubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFu ZWwvcGFuZWwtdHJ1bHktbnQzNTU5Ny5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRy dWx5LW50MzU1OTcuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYTU3 Y2JmMAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwt dHJ1bHktbnQzNTU5Ny5jCj4gQEAgLTAsMCArMSw1NzYgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDE4LCBUaGUgTGlu dXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICovCj4gKwo+ICsjaW5jbHVk ZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4K PiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvcGluY3RybC9jb25zdW1lci5oPgo+ICsKPiArI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxh eS5oPgo+ICsjaW5jbHVkZSA8dmlkZW8vb2ZfdmlkZW9tb2RlLmg+Cj4gKyNpbmNsdWRlIDx2aWRl by92aWRlb21vZGUuaD4KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9wYW5lbC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgo+ICsKPiAr c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByZWd1bGF0b3JfbmFtZXNbXSA9IHsKPiArCSJ2ZGRh IiwKPiArCSJ2ZGlzcHAiLAo+ICsJInZkaXNwbiIKPiArfTsKPiArCj4gK3N0YXRpYyB1bnNpZ25l ZCBsb25nIGNvbnN0IHJlZ3VsYXRvcl9lbmFibGVfbG9hZHNbXSA9IHsKPiArCTYyMDAwLAo+ICsJ MTAwMDAwLAo+ICsJMTAwMDAwLAo+ICt9Owo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGxvbmcgY29u c3QgcmVndWxhdG9yX2Rpc2FibGVfbG9hZHNbXSA9IHsKPiArCTgwLAo+ICsJMTAwLAo+ICsJMTAw LAo+ICt9Owo+ICsKPiArc3RydWN0IHRydWx5X3dxeGdhIHsKPiArCXN0cnVjdCBkZXZpY2UgKmRl djsKPiArCXN0cnVjdCBkcm1fcGFuZWwgcGFuZWw7Cj4gKwo+ICsJc3RydWN0IHJlZ3VsYXRvcl9i dWxrX2RhdGEgc3VwcGxpZXNbQVJSQVlfU0laRShyZWd1bGF0b3JfbmFtZXMpXTsKPiArCj4gKwlz dHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvOwo+ICsJc3RydWN0IGdwaW9fZGVzYyAqbW9kZV9n cGlvOwo+ICsKPiArCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQ7Cj4gKwlzdHJ1 Y3QgdmlkZW9tb2RlIHZtOwo+ICsKPiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaVsyXTsK PiArCj4gKwlib29sIHByZXBhcmVkOwo+ICsJYm9vbCBlbmFibGVkOwo+ICt9Owo+ICsKPiArc3Rh dGljIGlubGluZSBzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKnBhbmVsX3RvX3RydWx5X3dxeGdhKHN0cnVj dCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKHBhbmVsLCBz dHJ1Y3QgdHJ1bHlfd3F4Z2EsIHBhbmVsKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB0cnVseV93 cXhnYV9wb3dlcl9vbihzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCkKPiArewo+ICsJaW50IHJldCwg aTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKTsgaSsr KSB7Cj4gKwkJcmV0ID0gcmVndWxhdG9yX3NldF9sb2FkKGN0eC0+c3VwcGxpZXNbaV0uY29uc3Vt ZXIsCj4gKwkJCQkJcmVndWxhdG9yX2VuYWJsZV9sb2Fkc1tpXSk7Cj4gKwkJaWYgKHJldCkKPiAr CQkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUo QVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwgY3R4LT5zdXBwbGllcyk7Cj4gKwlpZiAocmV0IDwg MCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCW1zbGVlcCgyMCk7Cj4gKwlncGlvZF9zZXRfdmFs dWUoY3R4LT5yZXNldF9ncGlvLCAxKTsKPiArCW1zbGVlcCgyMCk7Cj4gKwlncGlvZF9zZXRfdmFs dWUoY3R4LT5yZXNldF9ncGlvLCAwKTsKPiArCW1zbGVlcCgyMCk7Cj4gKwlncGlvZF9zZXRfdmFs dWUoY3R4LT5yZXNldF9ncGlvLCAxKTsKPiArCW1zbGVlcCg1MCk7CgpXaHkgaXMgdGhpcyBuZWVk ZWQ/IENvdWxkIHlvdSBwbGVhc2UgY29tbWVudD8KCkFsc28sIGl0IHNlZW1zIGxpa2UgdGhpcyBp cyBhY3RpdmUgbG93PyBZb3Ugc2hvdWxkIHNwZWNpZnkgdGhhdCBpbiB0aGUgZHQsIGFuZApsZXQg Z3Bpb2QgdHJhbnNsYXRlIHRoZSB2YWx1ZS4KCj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcG93ZXJfb2ZmKHN0cnVjdCB0cnVseV93cXhnYSAqY3R4 KQo+ICt7Cj4gKwlpbnQgcmV0LCBpOwo+ICsKPiArCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0 X2dwaW8sIDApOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxp ZXMpOyBpKyspIHsKPiArCQlyZXQgPSByZWd1bGF0b3Jfc2V0X2xvYWQoY3R4LT5zdXBwbGllc1tp XS5jb25zdW1lciwKPiArCQkJCXJlZ3VsYXRvcl9kaXNhYmxlX2xvYWRzW2ldKTsKPiArCQlpZiAo cmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiByZWd1bGF0b3JfYnVs a19kaXNhYmxlKEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyksIGN0eC0+c3VwcGxpZXMpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IHRydWx5X3dxeGdhX2Rpc2FibGUoc3RydWN0IGRybV9wYW5lbCAq cGFuZWwpCj4gK3sKPiArCXN0cnVjdCB0cnVseV93cXhnYSAqY3R4ID0gcGFuZWxfdG9fdHJ1bHlf d3F4Z2EocGFuZWwpOwo+ICsKPiArCWlmICghY3R4LT5lbmFibGVkKQo+ICsJCXJldHVybiAwOwo+ ICsKPiArCWlmIChjdHgtPmJhY2tsaWdodCkgewo+ICsJCWN0eC0+YmFja2xpZ2h0LT5wcm9wcy5w b3dlciA9IEZCX0JMQU5LX1BPV0VSRE9XTjsKPiArCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhj dHgtPmJhY2tsaWdodCk7CgpZb3UgY2FuIHVzZSB0aGUgYmFja2xpZ2h0X2VuYWJsZS9kaXNhYmxl IGhlbHBlcnMsIGFuZCBwbGVhc2UgY2hlY2sgdGhlIHJldHVybgp2YWx1ZS4KCj4gKwl9Cj4gKwo+ ICsJY3R4LT5lbmFibGVkID0gZmFsc2U7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGludCB0cnVseV93cXhnYV91bnByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sK PiArCXN0cnVjdCB0cnVseV93cXhnYSAqY3R4ID0gcGFuZWxfdG9fdHJ1bHlfd3F4Z2EocGFuZWwp Owo+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqKmRzaXMgPSBjdHgtPmRzaTsKCklNTywgdGhp cyBvYmZ1c2NhdGlvbiBpc24ndCB0b28gdXNlZnVsIChhbmQgcHJldmVudHMgdXMgZnJvbSB1c2lu ZyBBUlJBWV9TSVpFCmJlbG93KS4KCj4gKwlpbnQgcmV0ID0gMCwgaTsKPiArCj4gKwlpZiAoIWN0 eC0+cHJlcGFyZWQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZHNpc1swXS0+bW9kZV9mbGFncyA9 IDA7Cj4gKwlkc2lzWzFdLT5tb2RlX2ZsYWdzID0gMDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwg MjsgaSsrKQoKcy8yL0FSUkFZX1NJWkUoY3R4LT5kc2kpLwoKPiArCQlpZiAobWlwaV9kc2lfZGNz X3NldF9kaXNwbGF5X29mZihkc2lzW2ldKSA8IDApCj4gKwkJCXJldCA9IC1FQ09NTTsKCkkgZ3Vl c3MgaXQncyBhbHJpZ2h0IHRoYXQgd2UncmUgY29udGludWluZyB0aHJvdWdoIGVycm9ycywgaG93 ZXZlciB3ZSBzaG91bGQKcHJvYmFibHkgbG9nIHRoZSBhY3R1YWwgZXJyb3IgdmFsdWUgYXMgd2Vs bCBhcyB0aGUgY2hhbm5lbCBudW1iZXIgaW4gYSBERUJVRwptZXNzYWdlLgoKPiArCj4gKwltc2xl ZXAoMTIwKTsKClBsZWFzZSBjb21tZW50LgoKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsr KQoKQVJSQVlfU0laRSBuaXQgaGVyZS4KCj4gKwkJaWYgKG1pcGlfZHNpX2Rjc19lbnRlcl9zbGVl cF9tb2RlKGRzaXNbaV0pIDwgMCkKPiArCQkJcmV0ID0gLUVDT01NOwo+ICsKPiArCXRydWx5X3dx eGdhX3Bvd2VyX29mZihjdHgpOwoKWW91IGRvbid0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUuCgo+ ICsKPiArCWN0eC0+cHJlcGFyZWQgPSBmYWxzZTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4g KyNkZWZpbmUgTUFYX0xFTgk1Cj4gK3N0cnVjdCB7Cj4gKwl1OCBjb21tYW5kc1tNQVhfTEVOXTsK PiArCWludCBzaXplOwo+ICt9IHBhbmVsX2NtZHNbXSA9IHsgLyogQ01EMl9QMCAqLwo+ICsJCSAg IHsgeyAweGZmLCAweDIwIH0sIDIgfSwKPiArCQkgICB7IHsgMHhmYiwgMHgwMSB9LCAyIH0sCj4g KwkJICAgeyB7IDB4MDAsIDB4MDEgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDAxLCAweDU1IH0sIDIg fSwKPiArCQkgICB7IHsgMHgwMiwgMHg0NSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MDUsIDB4NDAg fSwgMiB9LAo+ICsJCSAgIHsgeyAweDA2LCAweDE5IH0sIDIgfSwKPiArCQkgICB7IHsgMHgwNywg MHgxZSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MGIsIDB4NzMgfSwgMiB9LAo+ICsJCSAgIHsgeyAw eDBjLCAweDczIH0sIDIgfSwKPiArCQkgICB7IHsgMHgwZSwgMHhiMCB9LCAyIH0sCj4gKwkJICAg eyB7IDB4MGYsIDB4YWUgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDExLCAweGI4IH0sIDIgfSwKPiAr CQkgICB7IHsgMHgxMywgMHgwMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NTgsIDB4ODAgfSwgMiB9 LAo+ICsJCSAgIHsgeyAweDU5LCAweDAxIH0sIDIgfSwKPiArCQkgICB7IHsgMHg1YSwgMHgwMCB9 LCAyIH0sCj4gKwkJICAgeyB7IDB4NWIsIDB4MDEgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDVjLCAw eDgwIH0sIDIgfSwKPiArCQkgICB7IHsgMHg1ZCwgMHg4MSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4 NWUsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDVmLCAweDAxIH0sIDIgfSwKPiArCQkgICB7 IHsgMHg3MiwgMHgxMSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NjgsIDB4MDMgfSwgMiB9LAo+ICsJ CSAgIC8qIENNRDJfUDQgKi8KPiArCQkgICB7IHsgMHhGRiwgMHgyNCB9LCAyIH0sCj4gKwkJICAg eyB7IDB4RkIsIDB4MDEgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDAwLCAweDFDIH0sIDIgfSwKPiAr CQkgICB7IHsgMHgwMSwgMHgwQiB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MDIsIDB4MEMgfSwgMiB9 LAo+ICsJCSAgIHsgeyAweDAzLCAweDAxIH0sIDIgfSwKPiArCQkgICB7IHsgMHgwNCwgMHgwRiB9 LCAyIH0sCj4gKwkJICAgeyB7IDB4MDUsIDB4MTAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDA2LCAw eDEwIH0sIDIgfSwKPiArCQkgICB7IHsgMHgwNywgMHgxMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4 MDgsIDB4ODkgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDA5LCAweDhBIH0sIDIgfSwKPiArCQkgICB7 IHsgMHgwQSwgMHgxMyB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MEIsIDB4MTMgfSwgMiB9LAo+ICsJ CSAgIHsgeyAweDBDLCAweDE1IH0sIDIgfSwKPiArCQkgICB7IHsgMHgwRCwgMHgxNSB9LCAyIH0s Cj4gKwkJICAgeyB7IDB4MEUsIDB4MTcgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDBGLCAweDE3IH0s IDIgfSwKPiArCQkgICB7IHsgMHgxMCwgMHgxQyB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MTEsIDB4 MEIgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDEyLCAweDBDIH0sIDIgfSwKPiArCQkgICB7IHsgMHgx MywgMHgwMSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MTQsIDB4MEYgfSwgMiB9LAo+ICsJCSAgIHsg eyAweDE1LCAweDEwIH0sIDIgfSwKPiArCQkgICB7IHsgMHgxNiwgMHgxMCB9LCAyIH0sCj4gKwkJ ICAgeyB7IDB4MTcsIDB4MTAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDE4LCAweDg5IH0sIDIgfSwK PiArCQkgICB7IHsgMHgxOSwgMHg4QSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MUEsIDB4MTMgfSwg MiB9LAo+ICsJCSAgIHsgeyAweDFCLCAweDEzIH0sIDIgfSwKPiArCQkgICB7IHsgMHgxQywgMHgx NSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MUQsIDB4MTUgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDFF LCAweDE3IH0sIDIgfSwKPiArCQkgICB7IHsgMHgxRiwgMHgxNyB9LCAyIH0sCj4gKwkJICAgLyog U1RWICovCj4gKwkJICAgeyB7IDB4MjAsIDB4NDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDIxLCAw eDAxIH0sIDIgfSwKPiArCQkgICB7IHsgMHgyMiwgMHgwMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4 MjMsIDB4NDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDI0LCAweDQwIH0sIDIgfSwKPiArCQkgICB7 IHsgMHgyNSwgMHg2RCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MjYsIDB4NDAgfSwgMiB9LAo+ICsJ CSAgIHsgeyAweDI3LCAweDQwIH0sIDIgfSwKPiArCQkgICAvKiBWZW5kICovCj4gKwkJICAgeyB7 IDB4RTAsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweERDLCAweDIxIH0sIDIgfSwKPiArCQkg ICB7IHsgMHhERCwgMHgyMiB9LCAyIH0sCj4gKwkJICAgeyB7IDB4REUsIDB4MDcgfSwgMiB9LAo+ ICsJCSAgIHsgeyAweERGLCAweDA3IH0sIDIgfSwKPiArCQkgICB7IHsgMHhFMywgMHg2RCB9LCAy IH0sCj4gKwkJICAgeyB7IDB4RTEsIDB4MDcgfSwgMiB9LAo+ICsJCSAgIHsgeyAweEUyLCAweDA3 IH0sIDIgfSwKPiArCQkgICAvKiBVRCAqLwo+ICsJCSAgIHsgeyAweDI5LCAweEQ4IH0sIDIgfSwK PiArCQkgICB7IHsgMHgyQSwgMHgyQSB9LCAyIH0sCj4gKwkJICAgLyogQ0xLICovCj4gKwkJICAg eyB7IDB4NEIsIDB4MDMgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDRDLCAweDExIH0sIDIgfSwKPiAr CQkgICB7IHsgMHg0RCwgMHgxMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NEUsIDB4MDEgfSwgMiB9 LAo+ICsJCSAgIHsgeyAweDRGLCAweDAxIH0sIDIgfSwKPiArCQkgICB7IHsgMHg1MCwgMHgxMCB9 LCAyIH0sCj4gKwkJICAgeyB7IDB4NTEsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDUyLCAw eDgwIH0sIDIgfSwKPiArCQkgICB7IHsgMHg1MywgMHgwMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4 NTYsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDU0LCAweDA3IH0sIDIgfSwKPiArCQkgICB7 IHsgMHg1OCwgMHgwNyB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NTUsIDB4MjUgfSwgMiB9LAo+ICsJ CSAgIC8qIFJlc2V0IFhET05CICovCj4gKwkJICAgeyB7IDB4NUIsIDB4NDMgfSwgMiB9LAo+ICsJ CSAgIHsgeyAweDVDLCAweDAwIH0sIDIgfSwKPiArCQkgICB7IHsgMHg1RiwgMHg3MyB9LCAyIH0s Cj4gKwkJICAgeyB7IDB4NjAsIDB4NzMgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDYzLCAweDIyIH0s IDIgfSwKPiArCQkgICB7IHsgMHg2NCwgMHgwMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NjcsIDB4 MDggfSwgMiB9LAo+ICsJCSAgIHsgeyAweDY4LCAweDA0IH0sIDIgfSwKPiArCQkgICAvKiBSZXNv bHV0aW9uOjE0NDB4MjU2MCAqLwo+ICsJCSAgIHsgeyAweDcyLCAweDAyIH0sIDIgfSwKPiArCQkg ICAvKiBtdXggKi8KPiArCQkgICB7IHsgMHg3QSwgMHg4MCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4 N0IsIDB4OTEgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDdDLCAweEQ4IH0sIDIgfSwKPiArCQkgICB7 IHsgMHg3RCwgMHg2MCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4N0YsIDB4MTUgfSwgMiB9LAo+ICsJ CSAgIHsgeyAweDc1LCAweDE1IH0sIDIgfSwKPiArCQkgICAvKiBBQk9GRiAqLwo+ICsJCSAgIHsg eyAweEIzLCAweEMwIH0sIDIgfSwKPiArCQkgICB7IHsgMHhCNCwgMHgwMCB9LCAyIH0sCj4gKwkJ ICAgeyB7IDB4QjUsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIC8qIFNvdXJjZSBFUSAqLwo+ICsJCSAg IHsgeyAweDc4LCAweDAwIH0sIDIgfSwKPiArCQkgICB7IHsgMHg3OSwgMHgwMCB9LCAyIH0sCj4g KwkJICAgeyB7IDB4ODAsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDgzLCAweDAwIH0sIDIg fSwKPiArCQkgICAvKiBGUCBCUCAqLwo+ICsJCSAgIHsgeyAweDkzLCAweDBBIH0sIDIgfSwKPiAr CQkgICB7IHsgMHg5NCwgMHgwQSB9LCAyIH0sCj4gKwkJICAgLyogSW52ZXJzaW9uIFR5cGUgKi8K PiArCQkgICB7IHsgMHg4QSwgMHgwMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4OUIsIDB4RkYgfSwg MiB9LAo+ICsJCSAgIC8qIElNR1NXQVAgPTEgQFBvcnRTd2FwPTEgKi8KPiArCQkgICB7IHsgMHg5 RCwgMHhCMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4OUYsIDB4NjMgfSwgMiB9LAo+ICsJCSAgIHsg eyAweDk4LCAweDEwIH0sIDIgfSwKPiArCQkgICAvKiBGUk0gKi8KPiArCQkgICB7IHsgMHhFQywg MHgwMCB9LCAyIH0sCj4gKwkJICAgLyogQ01EMSAqLwo+ICsJCSAgIHsgeyAweEZGLCAweDEwIH0s IDIgfSwKPiArCQkgICAgLyogVkJQK1ZTQT0sVkZQID0gMTBIICovCj4gKwkJICAgeyB7IDB4M0Is IDB4MDMsIDB4MEEsIDB4MEEsIH0sIDQgfSwKPiArCQkgICAvKiBGVEUgb24gKi8KPiArCQkgICB7 IHsgMHgzNSwgMHgwMCB9LCAyIH0sCj4gKwkJICAgLyogRU5fQksgPTEoYXV0byBibGFjaykgKi8K PiArCQkgICB7IHsgMHhFNSwgMHgwMSB9LCAyIH0sCj4gKwkJICAgLyogQ01EIG1vZGUoMTApIFZE TyBtb2RlKDAzKSAqLwo+ICsJCSAgIHsgeyAweEJCLCAweDAzIH0sIDIgfSwKPiArCQkgICAvKiBO b24gUmVsb2FkIE1UUCAqLwo+ICsJCSAgIHsgeyAweEZCLCAweDAxIH0sIDIgfSwKPiArfTsKCkhv dyBtYW55IG9mIHRoZXNlIGNvbW1hbmRzIGFyZSBzcGVjaWZpYyB0byBNVFA/IERlY29kaW5nIHRo ZSBjcnlwdGljIGNvbW1lbnRzLAppdCBzZWVtcyBsaWtlIHRoaXMgcHJvYmFibHkgd291bGRuJ3Qg d29yayBvbiBhbnkgb3RoZXIgYm9hcmRzPwoKSSBzZWUgYSBjb3VwbGUgb2YgZHVwbGljYXRlIHdy aXRlcyBhcyB3ZWxsLgoKRmluYWxseSwgYWxsIGJ1dCBvbmUgY29tbWFuZCBpcyAyIGJ5dGVzLCB3 aXRoIHRoZSBvdXRsaWVyIGJlaW5nIDQgYnl0ZXMuIFlldCwKTUFYX0xFTiBpcyA1LiBJZiB3ZSBf bXVzdF8ga2VlcCB0aGUgaHVnZSBsaXN0IG9mIG9iZnVzY2F0ZWQgcmVnaXN0ZXIgd3JpdGVzLApj b3VsZCB3ZSBlbGltaW5hdGUgdGhlIHNpemUgbWVtYmVyPwoKCj4gKwo+ICtzdGF0aWMgaW50IHRy dWx5X3dxeGdhX3ByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiArCXN0cnVj dCB0cnVseV93cXhnYSAqY3R4ID0gcGFuZWxfdG9fdHJ1bHlfd3F4Z2EocGFuZWwpOwo+ICsJc3Ry dWN0IG1pcGlfZHNpX2RldmljZSAqKmRzaXMgPSBjdHgtPmRzaTsKPiArCWludCByZXQsIGksIGo7 Cj4gKwo+ICsJaWYgKGN0eC0+cHJlcGFyZWQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0ID0g dHJ1bHlfd3F4Z2FfcG93ZXJfb24oY3R4KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiBy ZXQ7Cj4gKwo+ICsJZHNpc1swXS0+bW9kZV9mbGFncyB8PSBNSVBJX0RTSV9NT0RFX0xQTTsKPiAr CWRzaXNbMV0tPm1vZGVfZmxhZ3MgfD0gTUlQSV9EU0lfTU9ERV9MUE07Cj4gKwo+ICsJZm9yIChq ID0gMDsgaiA8IEFSUkFZX1NJWkUocGFuZWxfY21kcyk7IGorKykgewo+ICsJCWZvciAoaSA9IDA7 IGkgPCAyOyBpKyspIHsKCkNhbiB5b3UgZmxpcCBpIGFuZCBqPyBIYXZpbmcgdGhlIGlubmVyIGxv b3AgYXMgaSBpcyBwcmV0dHkgY29uZnVzaW5nLgoKQWxzbywgZHJvcCBkc2lzIGFuZCBkbyBzLzIv QVJSQVlfU0laRShjdHgtPmRzaSkvCgo+ICsJCQlyZXQgPSBtaXBpX2RzaV9kY3Nfd3JpdGVfYnVm ZmVyKGRzaXNbaV0sCj4gKwkJCQkJcGFuZWxfY21kc1tqXS5jb21tYW5kcywKPiArCQkJCQlwYW5l bF9jbWRzW2pdLnNpemUpOwo+ICsJCQlpZiAocmV0IDwgMCkgewo+ICsJCQkJZGV2X2VycihjdHgt PmRldiwKPiArCQkJCQkiZmFpbGVkIHRvIHR4IGNtZCBbJWRdLCBlcnI6ICVkXG4iLAo+ICsJCQkJ CWosIHJldCk7Cj4gKwkJCQlyZXR1cm4gcmV0Owo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsKPiAr CWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKClNhbWUgaGVyZS4KCj4gKwkJaWYgKG1pcGlfZHNp X2Rjc19leGl0X3NsZWVwX21vZGUoZHNpc1tpXSkgPCAwKSB7Cj4gKwkJCWRldl9lcnIoY3R4LT5k ZXYsICJmYWlsZWQgdG8gZXhpdCBzbGVlcCBtb2RlXG4iKTsKCnMvZGV2X2Vyci9EUk1fREVWX0VS Uk9SLyBwbGVhc2UgYXBwbHkgdGhpcyB0byBhbGwgZGV2XyogbWVzc2FnZXMuCgo+ICsJCQlyZXR1 cm4gLUVDT01NOwoKV2h5IG5vdCByZXR1cm4gdGhlIGFjdHVhbCBlcnJvcj8KCj4gKwkJfQo+ICsJ fQo+ICsKPiArCW1zbGVlcCg3OCk7CgpXaHkgNzggbXM/IFRoaXMgc3R1ZmYgbmVlZHMgY29tbWVu dHMuCgo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCj4gKwkJaWYgKG1pcGlfZHNpX2Rj c19zZXRfZGlzcGxheV9vbihkc2lzW2ldKSA8IDApIHsKPiArCQkJZGV2X2VycihjdHgtPmRldiwg ImZhaWxlZCB0byBzZW5kIGRpc3BsYXkgb25cbiIpOwo+ICsJCQlyZXR1cm4gLUVDT01NOwoKU2Ft ZSBjb21tZW50cyBoZXJlLgoKPiArCQl9Cj4gKwltc2xlZXAoNzgpOwo+ICsKPiArCWN0eC0+cHJl cGFyZWQgPSB0cnVlOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRy dWx5X3dxeGdhX2VuYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKPiArewo+ICsJc3RydWN0 IHRydWx5X3dxeGdhICpjdHggPSBwYW5lbF90b190cnVseV93cXhnYShwYW5lbCk7Cj4gKwo+ICsJ aWYgKGN0eC0+ZW5hYmxlZCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoY3R4LT5iYWNrbGln aHQpIHsKPiArCQljdHgtPmJhY2tsaWdodC0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5L Owo+ICsJCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGN0eC0+YmFja2xpZ2h0KTsKPiArCX0KCllv dSBjYW4gdXNlIHRoZSBiYWNrbGlnaHRfZW5hYmxlL2Rpc2FibGUgaGVscGVycywgYW5kIHBsZWFz ZSBjaGVjayB0aGUgcmV0dXJuCnZhbHVlLgoKPiArCWN0eC0+ZW5hYmxlZCA9IHRydWU7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfZ2V0X21vZGVz KHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yID0gcGFuZWwtPmNvbm5lY3RvcjsKPiArCXN0cnVjdCB0cnVseV93cXhnYSAqY3R4 ID0gcGFuZWxfdG9fdHJ1bHlfd3F4Z2EocGFuZWwpOwo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGU7Cj4gKwo+ICsJbW9kZSA9IGRybV9tb2RlX2NyZWF0ZShjb25uZWN0b3ItPmRldik7 Cj4gKwlpZiAoIW1vZGUpIHsKPiArCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0 ZSBhIG5ldyBkaXNwbGF5IG1vZGVcbiIpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWRy bV9kaXNwbGF5X21vZGVfZnJvbV92aWRlb21vZGUoJmN0eC0+dm0sIG1vZGUpOwo+ICsJY29ubmVj dG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW0gPSA3NDsKPiArCWNvbm5lY3Rvci0+ZGlzcGxheV9p bmZvLmhlaWdodF9tbSA9IDEzMTsKPiArCW1vZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX0RSSVZF UiB8IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOwo+ICsJZHJtX21vZGVfcHJvYmVkX2FkZChjb25u ZWN0b3IsIG1vZGUpOwo+ICsKPiArCXJldHVybiAxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9wYW5lbF9mdW5jcyB0cnVseV93cXhnYV9kcm1fZnVuY3MgPSB7Cj4gKwkuZGlz YWJsZSA9IHRydWx5X3dxeGdhX2Rpc2FibGUsCj4gKwkudW5wcmVwYXJlID0gdHJ1bHlfd3F4Z2Ff dW5wcmVwYXJlLAo+ICsJLnByZXBhcmUgPSB0cnVseV93cXhnYV9wcmVwYXJlLAo+ICsJLmVuYWJs ZSA9IHRydWx5X3dxeGdhX2VuYWJsZSwKPiArCS5nZXRfbW9kZXMgPSB0cnVseV93cXhnYV9nZXRf bW9kZXMsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHRydWx5X3dxeGdhX3BhbmVsX2FkZChzdHJ1 Y3QgdHJ1bHlfd3F4Z2EgKmN0eCkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY3R4LT5k ZXY7Cj4gKwlpbnQgcmV0LCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0 eC0+c3VwcGxpZXMpOyBpKyspCj4gKwkJY3R4LT5zdXBwbGllc1tpXS5zdXBwbHkgPSByZWd1bGF0 b3JfbmFtZXNbaV07Cj4gKwo+ICsJcmV0ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXQoZGV2LCBB UlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpLAo+ICsJCQkJICAgICAgY3R4LT5zdXBwbGllcyk7Cj4g KwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWN0eC0+cmVzZXRfZ3BpbyA9 IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInJlc2V0IiwgR1BJT0RfT1VUX0hJR0gpOwo+ICsJaWYgKElT X0VSUihjdHgtPnJlc2V0X2dwaW8pKSB7Cj4gKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IHJl c2V0IGdwaW8gJWxkXG4iLAo+ICsJCQlQVFJfRVJSKGN0eC0+cmVzZXRfZ3BpbykpOwo+ICsJCXJl dHVybiBQVFJfRVJSKGN0eC0+cmVzZXRfZ3Bpbyk7Cj4gKwl9Cj4gKwo+ICsJY3R4LT5tb2RlX2dw aW8gPSBkZXZtX2dwaW9kX2dldChkZXYsICJtb2RlIiwgR1BJT0RfT1VUX0xPVyk7Cj4gKwlpZiAo SVNfRVJSKGN0eC0+bW9kZV9ncGlvKSkgewo+ICsJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBt b2RlIGdwaW8gJWxkXG4iLAo+ICsJCQlQVFJfRVJSKGN0eC0+bW9kZV9ncGlvKSk7Cj4gKwkJcmV0 dXJuIFBUUl9FUlIoY3R4LT5tb2RlX2dwaW8pOwo+ICsJfQo+ICsKPiArCS8qIGR1YWwgcG9ydCAq Lwo+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+bW9kZV9ncGlvLCAwKTsKPiArCj4gKwlyZXQgPSBv Zl9nZXRfdmlkZW9tb2RlKGRldi0+b2Zfbm9kZSwgJmN0eC0+dm0sIDApOwoKVXNlIG9mX2dldF9k cm1fZGlzcGxheV9tb2RlKCkgYW5kIHN0b3JlIGl0IGFzIGEgZHJtX2Rpc3BsYXlfbW9kZS4gVGhp cyB3aWxsCnNpbXBsaWZ5IGdldF9tb2RlcygpCgo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJu IHJldDsKPiArCj4gKwlkcm1fcGFuZWxfaW5pdCgmY3R4LT5wYW5lbCk7Cj4gKwljdHgtPnBhbmVs LmRldiA9IGRldjsKPiArCWN0eC0+cGFuZWwuZnVuY3MgPSAmdHJ1bHlfd3F4Z2FfZHJtX2Z1bmNz Owo+ICsJZHJtX3BhbmVsX2FkZCgmY3R4LT5wYW5lbCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIHRydWx5X3dxeGdhX3BhbmVsX2RlbChzdHJ1Y3QgdHJ1bHlfd3F4 Z2EgKmN0eCkKPiArewo+ICsJaWYgKGN0eC0+cGFuZWwuZGV2KQoKY3R4IGlzIGEgZGV2aWNlIG1h bmFnZWQgcmVzb3VyY2Ugd2hvc2UgcGFyZW50IGRldmljZSBpcyBhc3NpZ25lZCB0byBwYW5lbC5k ZXYKKGl0J3MgYWxzbyBzdG9yZWQgaW4gY3R4LT5kZXYpLiBTbyBJIGRvbid0IHRoaW5rIHRoaXMg Y2hlY2sgY291bGQgZXZlciBiZSBmYWxzZQp3aXRob3V0IHNvbWUgdGVycmlibGUgc2lkZSBlZmZl Y3RzLiBJdCBpcyBwcm9iYWJseSB3b3J0aCBjaGVja2luZyB3aGV0aGVyIHlvdQpuZWVkIHRvIHN0 b3JlIGRldiBpbiBhbGwgb2YgdGhlc2UgcGxhY2VzLCB5b3UgbWlnaHQgZmluZCB5b3UgY2FuIHRy aW0gaXQgb3V0IG9mCmN0eC4KClNvIHdpdGggdGhhdCBpbiBtaW5kLCBqdXN0IHN0aWNrIHRoZSBk cm1fcGFuZWxfcmVtb3ZlKCkgY2FsbCBhdCB0aGUgY2FsbHNpdGVzIG9mCnRydWx5X3dxeGdhX2Rl bCgpIGFuZCBkZWxldGUgdGhpcyBmdW5jdGlvbi4KCj4gKwkJZHJtX3BhbmVsX3JlbW92ZSgmY3R4 LT5wYW5lbCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcHJvYmUoc3RydWN0 IG1pcGlfZHNpX2RldmljZSAqZHNpKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHNp LT5kZXY7Cj4gKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eDsKPiArCXN0cnVjdCBtaXBpX2RzaV9k ZXZpY2UgKnNlY29uZGFyeTsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHNpMTsKPiArCXN0cnVj dCBtaXBpX2RzaV9ob3N0ICpkc2kxX2hvc3Q7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCWNvbnN0IHN0 cnVjdCBtaXBpX2RzaV9kZXZpY2VfaW5mbyBpbmZvID0gey50eXBlID0gInRydWx5bnQzNTU5NyIs Cj4gKwkJLmNoYW5uZWwgPSAwLAo+ICsJCS5ub2RlID0gTlVMTCwKPiArCX07Cj4gKwo+ICsJY3R4 ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKPiArCj4gKwlp ZiAoIWN0eCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwkvKiBUaGlzIGRldmljZSByZXBy ZXNlbnRzIGl0c2VsZiBhcyBvbmUgd2l0aAo+ICsJICogdHdvIGlucHV0IHBvcnRzIHdoaWNoIGFy ZSBmZWQgYnkgdGhlIG91dHB1dAo+ICsJICogcG9ydHMgb2YgdGhlIHR3byBEU0kgY29udHJvbGxl cnMgLiBUaGUgRFNJMAo+ICsJICogaXMgdGhlIG1hc3RlciBjb250cm9sbGVyIGFuZCBoYXMgbW9z dCBvZiB0aGUKPiArCSAqIHBhbmVsIHJlbGF0ZWQgaW5mbyBpbiBpdHMgY2hpbGQgbm9kZS4KPiAr CSAqLwo+ICsKPiArCWRzaTEgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX25vZGUoZHNpLT5kZXYub2Zf bm9kZSwgMSwgLTEpOwo+ICsJaWYgKCFkc2kxKSB7Cj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQg dG8gZ2V0IHJlbW90ZSBub2RlIGZvciBzZWNvbmRhcnkgRFNJXG4iKTsKPiArCQlyZXQgPSAtRU5P REVWOwo+ICsJCWdvdG8gZXJyX2dldF9yZW1vdGU7Cj4gKwl9Cj4gKwo+ICsJZHNpMV9ob3N0ID0g b2ZfZmluZF9taXBpX2RzaV9ob3N0X2J5X25vZGUoZHNpMSk7Cj4gKwlpZiAoIWRzaTFfaG9zdCkg ewo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGZpbmQgZHNpIGhvc3RcbiIpOwo+ICsJCXJl dCA9IC1FUFJPQkVfREVGRVI7Cj4gKwkJZ290byBlcnJfaG9zdDsKPiArCX0KPiArCj4gKwlvZl9u b2RlX3B1dChkc2kxKTsKPiArCj4gKwkvKiByZWdpc3RlciB0aGUgc2Vjb25kIERTSSBkZXZpY2Ug Ki8KPiArCXNlY29uZGFyeSA9IG1pcGlfZHNpX2RldmljZV9yZWdpc3Rlcl9mdWxsKGRzaTFfaG9z dCwgJmluZm8pOwo+ICsKCm5pdDogZXh0cmEgbGluZQoKV2hpbGUgSSdtIG5pdHBpY2tpbmcsIHRo aXMgbmFtZSBsZWF2ZXMgc29tZXRoaW5nIHRvIGJlIGRlc2lyZWQuIEV2ZXJ5dGhpbmcgZWxzZQpp cyBkc2kxLCBzbyBwZXJoYXBzIHRoaXMgY291bGQgYmUgZHNpMV9kZXZpY2UgdG8gYmUgY29uc2lz dGVudC4KCj4gKwlpZiAoSVNfRVJSKHNlY29uZGFyeSkpIHsKPiArCQlkZXZfZXJyKGRldiwgImZh aWxlZCB0byBjcmVhdGUgZHNpIGRldmljZVxuIik7Cj4gKwkJcmV0ID0gUFRSX0VSUihkc2kpOwo+ ICsJCWdvdG8gZXJyX2RzaV9kZXZpY2U7Cj4gKwl9Cj4gKwo+ICsJbWlwaV9kc2lfc2V0X2RydmRh dGEoZHNpLCBjdHgpOwo+ICsKPiArCWN0eC0+ZGV2ID0gZGV2Owo+ICsJY3R4LT5kc2lbMF0gPSBk c2k7Cj4gKwljdHgtPmRzaVsxXSA9IHNlY29uZGFyeTsKPiArCj4gKwlyZXQgPSB0cnVseV93cXhn YV9wYW5lbF9hZGQoY3R4KTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxl ZCB0byBhZGQgcGFuZWxcbiIpOwo+ICsJCWdvdG8gZXJyX3BhbmVsX2FkZDsKPiArCX0KPiArCj4g KwkvKiBjb25maWd1cmUgbWFzdGVyIERTSSBkZXZpY2UgKi8KPiArCWRzaS0+bGFuZXMgPSA0Owo+ ICsJZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRfUkdCODg4Owo+ICsJZHNpLT5tb2RlX2ZsYWdz ID0gTUlQSV9EU0lfTU9ERV9WSURFTyB8IE1JUElfRFNJX0NMT0NLX05PTl9DT05USU5VT1VTIHwK PiArCQkJCQkJTUlQSV9EU0lfTU9ERV9MUE07Cj4gKwo+ICsJcmV0ID0gbWlwaV9kc2lfYXR0YWNo KGRzaSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoZGV2LCAibWFzdGVyIGRzaSBh dHRhY2ggZmFpbGVkXG4iKTsKPiArCQlnb3RvIGVycl9kc2lfYXR0YWNoOwo+ICsJfQo+ICsKPiAr CS8qIGNvbmZpZ3VyZSBzZWNvbmRhcnkgRFNJIGRldmljZSAqLwo+ICsJc2Vjb25kYXJ5LT5sYW5l cyA9IDQ7Cj4gKwlzZWNvbmRhcnktPmZvcm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7Cj4gKwlz ZWNvbmRhcnktPm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9NT0RFX1ZJREVPIHwKPiArCQlNSVBJX0RT SV9DTE9DS19OT05fQ09OVElOVU9VUyB8Cj4gKwkJTUlQSV9EU0lfTU9ERV9MUE07Cj4gKwo+ICsJ cmV0ID0gbWlwaV9kc2lfYXR0YWNoKHNlY29uZGFyeSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJ CWRldl9lcnIoZGV2LCAibWlwaV9kc2lfYXR0YWNoIG9uIHNlY29uZGFyeSBmYWlsZWRcbiIpOwo+ ICsJCWdvdG8gZXJyX2RzaV9hdHRhY2hfc2VjOwo+ICsJfQoKUmVwbGFjZSB0aGUgZHVwbGljYXRl ZCBhdHRhY2ggY29kZSB3aXRoIGEgbG9vcDoKCiAgICAgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoY3R4LT5kc2kpOyBpKyspIHsKICAgICAgICAgICAgICAgIHN0cnVjdCBtaXBpX2RzaV9k ZXZpY2UgKmRzaV9kZXYgPSBjdHgtPmRzaVtpXTsKCiAgICAgICAgICAgICAgICBkc2lfZGV2LT5s YW5lcyA9IDQ7CiAgICAgICAgICAgICAgICBkc2lfZGV2LT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRf UkdCODg4OwogICAgICAgICAgICAgICAgZHNpX2Rldi0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01P REVfVklERU8gfCBNSVBJX0RTSV9NT0RFX0xQTSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTUlQSV9EU0lfQ0xPQ0tfTk9OX0NPTlRJTlVPVVM7CgogICAgICAgICAgICAg ICAgcmV0ID0gbWlwaV9kc2lfYXR0YWNoKGRzaV9kZXYpOwogICAgICAgICAgICAgICAgaWYgKHJl dCA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgRFJNX0RFVl9FUlJPUihkZXYsICJtYXN0 ZXIgZHNpIGF0dGFjaCBmYWlsZWRcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVy cl9kc2lfYXR0YWNoOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCj4gKwo+ICsJcmV0dXJu IDA7Cj4gKwo+ICtlcnJfZHNpX2F0dGFjaF9zZWM6Cj4gKwltaXBpX2RzaV9kZXRhY2goY3R4LT5k c2lbMF0pOwo+ICtlcnJfZHNpX2F0dGFjaDoKPiArCXRydWx5X3dxeGdhX3BhbmVsX2RlbChjdHgp Owo+ICtlcnJfcGFuZWxfYWRkOgo+ICsJbWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIoc2Vjb25k YXJ5KTsKPiArZXJyX2RzaV9kZXZpY2U6Cj4gK2Vycl9ob3N0Ogo+ICsJb2Zfbm9kZV9wdXQoZHNp MSk7Cj4gK2Vycl9nZXRfcmVtb3RlOgo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGlj IGludCB0cnVseV93cXhnYV9yZW1vdmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQo+ICt7 Cj4gKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IG1pcGlfZHNpX2dldF9kcnZkYXRhKGRzaSk7 Cj4gKwo+ICsJaWYgKGN0eC0+ZHNpWzBdKQo+ICsJCW1pcGlfZHNpX2RldGFjaChjdHgtPmRzaVsw XSk7Cj4gKwlpZiAoY3R4LT5kc2lbMV0pIHsKPiArCQltaXBpX2RzaV9kZXRhY2goY3R4LT5kc2lb MV0pOwo+ICsJCW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKGN0eC0+ZHNpWzFdKTsKPiArCX0K PiArCXRydWx5X3dxeGdhX3BhbmVsX2RlbChjdHgpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0cnVseV93cXhnYV9vZl9tYXRj aFtdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJ0cnVseSxudDM1NTk3IiwgfSwKPiArCXsgfQo+ ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0cnVseV93cXhnYV9vZl9tYXRjaCk7Cj4g Kwo+ICtzdGF0aWMgc3RydWN0IG1pcGlfZHNpX2RyaXZlciB0cnVseV93cXhnYV9kcml2ZXIgPSB7 Cj4gKwkuZHJpdmVyID0gewo+ICsJCS5uYW1lID0gInBhbmVsX3RydWx5X250MzU1OTciLAo+ICsJ CS5vZl9tYXRjaF90YWJsZSA9IHRydWx5X3dxeGdhX29mX21hdGNoLAo+ICsJfSwKPiArCS5wcm9i ZSA9IHRydWx5X3dxeGdhX3Byb2JlLAo+ICsJLnJlbW92ZSA9IHRydWx5X3dxeGdhX3JlbW92ZSwK PiArfTsKPiArbW9kdWxlX21pcGlfZHNpX2RyaXZlcih0cnVseV93cXhnYV9kcml2ZXIpOwo+ICsK PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJUcnVseSBOVDM1NTk3IERTSSBQYW5lbCBEcml2ZXIiKTsK PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+IC0tIAo+IFRoZSBRdWFsY29tbSBJbm5vdmF0 aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCj4g YSBMaW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAo+IAoKLS0gClNlYW4gUGF1 bCwgU29mdHdhcmUgRW5naW5lZXIsIEdvb2dsZSAvIENocm9taXVtIE9TCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=