From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: Re: [PATCH v6 1/2] drm/panel: Add support for Truly NT35597 panel driver Date: Mon, 27 Aug 2018 14:41:00 +0200 Message-ID: <1535373660.5076.7.camel@pengutronix.de> References: <1534558020-9921-1-git-send-email-abhinavk@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1534558020-9921-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 , dri-devel@lists.freedesktop.org Cc: linux-arm-msm@vger.kernel.org, hoegsberg@google.com, thierry.reding@gmail.com, seanpaul@chromium.org, chandanu@codeaurora.org List-Id: linux-arm-msm@vger.kernel.org SGkgQWJoaW5hdiwKCkkgaGF2ZSBhIGZldyBjb21tZW50cyBiZWxvdy4KCk9uIEZyaSwgMjAxOC0w OC0xNyBhdCAxOTowNiAtMDcwMCwgQWJoaW5hdiBLdW1hciB3cm90ZToKPiBGcm9tOiAiYWJoaW5h dmtAY29kZWF1cm9yYS5vcmciIDxhYmhpbmF2a0Bjb2RlYXVyb3JhLm9yZz4KPiAKPiBBZGQgc3Vw cG9ydCBmb3IgVHJ1bHkgTlQzNTU5NyBwYW5lbCBkcml2ZXIgdXNlZAo+IGluIE1TTSByZWZlcmVu Y2UgcGxhdGZvcm1zLgo+IAo+IFRoaXMgcGFuZWwgZHJpdmVyIHN1cHBvcnRzIGJvdGggc2luZ2xl IERTSSBhbmQgZHVhbCBEU0kKPiBtb2Rlcy4KPiAKPiBIb3dldmVyLCB0aGlzIHBhdGNoIHNlcmll cyBhZGRzIHN1cHBvcnQgb25seSBmb3IKPiBkdWFsIERTSSBtb2RlLgo+IAo+IENoYW5nZXMgaW4g djY6Cj4gLSBJbnRyb2R1Y2UgcGFuZWwgY29uZmlnIHRvIHN0b3JlIHBhbmVsIHNwZWNpZmljCj4g ICBkZXRhaWxzCj4gLSBCcmluZyBiYWNrIHRoZSBzaXplIG1lbWJlciBmb3IgdGhlIHBhbmVsIGNv bW1hbmQKPiAgIHN0cnVjdHVyZSB0byBtYWtlIHRoZSBkZXNpZ24gbW9yZSBzY2FsYWJsZQo+IC0g TW92ZSB0aGUgZGlzcGxheSBtb2RlIGZyb20gdGhlIERUIHRvIGRyaXZlcgo+IC0gQ2hhbmdlIHRo ZSBjb21wYXRpYmxlIHN0cmluZyB0byBpbmRpY2F0ZSB3aGljaAo+ICAgd2hpY2ggYm9hcmQgYW5k IHBhbmVsIGl0IHdpbGwgYmUgdXNlZCBmb3IKPiAtIFJlbmFtZSB0aGUgZnVuY3Rpb25zIHRvIG1h dGNoIHRoZSBwYW5lbCBkcml2ZXIKPiAtIEhhdmUgYSBkYXRhIG1lbWJlciBmb3IgZWFjaCBjb21w YXRpYmxlIHN0cmluZwo+IC0gUmVtb3ZlIHRoZSBwYW5lbCBjb21tYW5kcyBzcGxpdCBhcyBpdHMg bm90Cj4gICByZXF1aXJlZCBmb3IgdGhlIHBhbmVsIGluaXQgZnVuY3Rpb25hbGl0eQo+IAo+IFNp Z25lZC1vZmYtYnk6IEFyY2hpdCBUYW5lamEgPGFyY2hpdHRAY29kZWF1cm9yYS5vcmc+Cj4gU2ln bmVkLW9mZi1ieTogQWJoaW5hdiBLdW1hciA8YWJoaW5hdmtAY29kZWF1cm9yYS5vcmc+Cj4gLS0t Cj4gIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnICAgICAgICAgICAgICAgfCAgIDggKwo+ ICBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxICsKPiAg ZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LW50MzU1OTcuYyB8IDcwNSArKysrKysr KysrKysrKysrKysrKysrKysrKysrCj4gIDMgZmlsZXMgY2hhbmdlZCwgNzE0IGluc2VydGlvbnMo KykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVs eS1udDM1NTk3LmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25m aWcgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwo+IGluZGV4IDYwMjBjMzAuLjdhZTc0 YzIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwo+IEBAIC0xODYsNCArMTg2LDEyIEBAIGNvbmZp ZyBEUk1fUEFORUxfU0lUUk9OSVhfU1Q3Nzg5Vgo+ICAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50 IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgU2l0cm9uaXgKPiAgCSAgU1Q3Nzg5ViBjb250cm9s bGVyIGZvciAyNDB4MzIwIExDRCBwYW5lbHMKPiAgCj4gK2NvbmZpZyBEUk1fUEFORUxfVFJVTFlf TlQzNTU5N19XUVhHQQo+ICsJdHJpc3RhdGUgIlRydWx5IFdRWEdBIgo+ICsJZGVwZW5kcyBvbiBP Rgo+ICsJZGVwZW5kcyBvbiBEUk1fTUlQSV9EU0kKPiArCXNlbGVjdCBWSURFT01PREVfSEVMUEVS Uwo+ICsJaGVscAo+ICsJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0 IGZvciBUcnVseSBOVDM1NTk3IFdRWEdBIER1YWwgRFNJCj4gKwkgIFZpZGVvIE1vZGUgcGFuZWwK PiAgZW5kbWVudQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKPiBpbmRleCA1Y2NhYWE5Li44MGZkMTlm IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQo+IEBAIC0xOSwzICsxOSw0IEBAIG9iai0kKENP TkZJR19EUk1fUEFORUxfU0VJS09fNDNXVkYxRykgKz0gcGFuZWwtc2Vpa28tNDN3dmYxZy5vCj4g IG9iai0kKENPTkZJR19EUk1fUEFORUxfU0hBUlBfTFExMDFSMVNYMDEpICs9IHBhbmVsLXNoYXJw LWxxMTAxcjFzeDAxLm8KPiAgb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUzA0M1QxTEUw MSkgKz0gcGFuZWwtc2hhcnAtbHMwNDN0MWxlMDEubwo+ICBvYmotJChDT05GSUdfRFJNX1BBTkVM X1NJVFJPTklYX1NUNzc4OVYpICs9IHBhbmVsLXNpdHJvbml4LXN0Nzc4OXYubwo+ICtvYmotJChD T05GSUdfRFJNX1BBTkVMX1RSVUxZX05UMzU1OTdfV1FYR0EpICs9IHBhbmVsLXRydWx5LW50MzU1 OTcubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1bHktbnQz NTU5Ny5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LW50MzU1OTcuYwo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNjkxYmUwMwo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1bHktbnQzNTU5Ny5jCj4g QEAgLTAsMCArMSw3MDUgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK PiArLyoKPiArICogQ29weXJpZ2h0IChjKSAyMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25z dW1lci5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KPiArI2luY2x1ZGUgPGxpbnV4 L3JlZ3VsYXRvci9jb25zdW1lci5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGluY3RybC9jb25zdW1l ci5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4gKwo+ICsjaW5jbHVkZSA8dmlk ZW8vbWlwaV9kaXNwbGF5Lmg+Cj4gKyNpbmNsdWRlIDx2aWRlby9vZl92aWRlb21vZGUuaD4KPiAr I2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+ Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlf ZHNpLmg+Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJlZ3VsYXRvcl9uYW1lc1td ID0gewo+ICsJInZkZGEiLAo+ICsJInZkaXNwcCIsCj4gKwkidmRpc3BuIiwKPiArfTsKPiArCj4g K3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvbnN0IHJlZ3VsYXRvcl9lbmFibGVfbG9hZHNbXSA9IHsK PiArCTYyMDAwLAo+ICsJMTAwMDAwLAo+ICsJMTAwMDAwLAo+ICt9Owo+ICsKPiArc3RhdGljIHVu c2lnbmVkIGxvbmcgY29uc3QgcmVndWxhdG9yX2Rpc2FibGVfbG9hZHNbXSA9IHsKPiArCTgwLAo+ ICsJMTAwLAo+ICsJMTAwLAo+ICt9Owo+ICsKPiArc3RydWN0IG50MzU1OTdfY29uZmlnIHsKPiAr CXUzMiB3aWR0aF9tbTsKPiArCXUzMiBoZWlnaHRfbW07Cj4gKwljaGFyIHBhbmVsX25hbWVbMjU2 XTsKCldoeSBub3QKCWNvbnN0IGNoYXIgKnBhbmVsX25hbWU7Cj8KCj4gKwl2b2lkICpwYW5lbF9v bl9jbWRzOwoKCWNvbnN0IHZvaWQgKnBhbmVsX29uX2NtZHM7Cgo+ICsJdTMyIG51bV9vbl9jbWRz Owo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRtOwoKCWNvbnN0IHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICpkbTsKCj4gK307Cj4gKwo+ICtzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyB7Cj4gKwlz dHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3QgZHJtX3BhbmVsIHBhbmVsOwo+ICsKPiArCXN0 cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW0FSUkFZX1NJWkUocmVndWxhdG9yX25h bWVzKV07Cj4gKwo+ICsJc3RydWN0IGdwaW9fZGVzYyAqcmVzZXRfZ3BpbzsKPiArCXN0cnVjdCBn cGlvX2Rlc2MgKm1vZGVfZ3BpbzsKPiArCj4gKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFj a2xpZ2h0Owo+ICsKPiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaVsyXTsKPiArCj4gKwlj b25zdCBzdHJ1Y3QgbnQzNTU5N19jb25maWcgKmNvbmZpZzsKPiArCWJvb2wgcHJlcGFyZWQ7Cj4g Kwlib29sIGVuYWJsZWQ7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB0cnVseV9u dDM1NTk3ICpwYW5lbF90b19jdHgoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiArCXJl dHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0cnVjdCB0cnVseV9udDM1NTk3LCBwYW5lbCk7Cj4g K30KPiArCj4gKyNkZWZpbmUgTUFYX0xFTgk1Cj4gKyNkZWZpbmUgU0hPUlRfUEFDS0VUIDIKPiAr I2RlZmluZSBMT05HX1BBQ0tFVCA0Cj4gKwo+ICtzdHJ1Y3QgY21kX3NldCB7Cj4gKwl1OCBjb21t YW5kc1tNQVhfTEVOXTsKPiArCWludCBzaXplOwoKQ29uc2lkZXIgY2hhbmdpbmcgdGhpcyB0bwoJ dTggc2l6ZTsKCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGNtZF9zZXQgcWNvbV8ya19wYW5l bF9tYWdpY19jbWRzW10gPSB7Cj4gKwkvKiBDTUQyX1AwICovClsuLi5dCj4gKwkvKiBWQlArVlNB PSxWRlAgPSAxMEggKi8KPiArCXsgeyAweDNCLCAweDAzLCAweDBBLCAweDBBIH0sIDQgfSwKPiAr CS8qIEZURSBvbiAqLwo+ICsJeyB7IDB4MzUsIDB4MDAgfSwgMiB9LAo+ICsJLyogRU5fQksgPTEo YXV0byBibGFjaykgKi8KPiArCXsgeyAweEU1LCAweDAxIH0sIDIgfSwKPiArCS8qIENNRCBtb2Rl KDEwKSBWRE8gbW9kZSgwMykgKi8KPiArCXsgeyAweEJCLCAweDAzIH0sIDIgfSwKPiArCS8qIE5v biBSZWxvYWQgTVRQICovCj4gKwl7IHsgMHhGQiwgMHgwMSB9LCAyIH0sCj4gK307Cj4gKwo+ICtz dGF0aWMgaW50IHRydWx5X2Rjc193cml0ZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCwgdTMyIGNv bW1hbmQpCj4gK3sKPiArCXN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHggPSBwYW5lbF90b19jdHgo cGFuZWwpOwo+ICsJaW50IGksIHJldDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShjdHgtPmRzaSk7IGkrKykgewo+ICsJCXJldCA9IG1pcGlfZHNpX2Rjc193cml0ZShjdHgtPmRz aVtpXSwKPiArCQkJY29tbWFuZCwgTlVMTCwgMCk7Cj4gKwkJaWYgKHJldCA8IDApIHsKPiArCQkJ RFJNX0RFVl9FUlJPUihjdHgtPmRldiwKPiArCQkJCSJzZXRfZGlzcGxheV9vZmYgY21kIGZhaWxl ZCBmb3IgZHNpID0gJWRcbiIsCgpUaGlzIGVycm9yIG1lc3NhZ2UgaXMgbm90IGFjY3VyYXRlLgp0 cnVseV9kY3Nfd3JpdGUgaXMgYWxzbyBjYWxsZWQgZnJvbSB0cnVseV9udDM1NTk3X3ByZXBhcmUu Cgo+ICsJCQlpKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIGludCB0cnVseV9kY3Nfd3JpdGVfYnVmKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsLAo+ ICsJdTMyIHNpemUsIHU4ICpidWYpCj4gK3sKPiArCXN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHgg PSBwYW5lbF90b19jdHgocGFuZWwpOwo+ICsJaW50IHJldCA9IDA7Cj4gKwlpbnQgaTsKPiArCj4g Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPmRzaSk7IGkrKykgewo+ICsJCXJldCA9 IG1pcGlfZHNpX2Rjc193cml0ZV9idWZmZXIoY3R4LT5kc2lbaV0sCj4gKwkJCWJ1ZiwKPiArCQkJ c2l6ZSk7Cj4gKwo+ICsJCWlmIChyZXQgPCAwKSB7Cj4gKwkJCURSTV9ERVZfRVJST1IoY3R4LT5k ZXYsCj4gKwkJCQkiZmFpbGVkIHRvIHR4IGNtZCBbJWRdLCBlcnI6ICVkXG4iLAo+ICsJCQkJaSwg cmV0KTsKPiArCQkJcmV0dXJuIHJldDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsK PiArfQo+ICsKPiArI2RlZmluZSB0cnVseV9jYWxsX3dyaXRlX2Z1bmMocmV0LCBmdW5jLCBwYW5l bCwgY29tbWFuZCkge1wKPiArCXJldCA9IGZ1bmMocGFuZWwsIGNvbW1hbmQpOyAgICAgXAo+ICt9 Cj4gKwo+ICsjZGVmaW5lIHRydWx5X3dyaXRlX2J1Zl9mdW5jKHJldCwgZnVuYywgcGFuZWwsIHNp emUsIGJ1Zikge1wKPiArCXJldCA9IGZ1bmMocGFuZWwsIHNpemUsIGJ1Zik7IFwKPiArfQoKVGhl c2UgbWFjcm9zIGp1c3Qgb2JmdXNjYXRlIHRoaW5ncy4gSnVzdCBjYWxsIHRoZSBmdW5jdGlvbiBk aXJlY3RseQpiZWxvdy4KCj4gKwo+ICtzdGF0aWMgaW50IHRydWx5XzM1NTk3X3Bvd2VyX29uKHN0 cnVjdCB0cnVseV9udDM1NTk3ICpjdHgpCj4gK3sKPiArCWludCByZXQsIGk7Cj4gKwo+ICsJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyk7IGkrKykgewo+ICsJCXJldCA9 IHJlZ3VsYXRvcl9zZXRfbG9hZChjdHgtPnN1cHBsaWVzW2ldLmNvbnN1bWVyLAo+ICsJCQkJCXJl Z3VsYXRvcl9lbmFibGVfbG9hZHNbaV0pOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7 Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUoY3R4 LT5zdXBwbGllcyksIGN0eC0+c3VwcGxpZXMpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJu IHJldDsKPiArCj4gKwkvKiBSZXNldCBzZXF1ZW5jZSBvZiB0cnVseSBwYW5lbCByZXF1aXJlcwo+ ICsJICogdGhlIHJlc2V0IHBpbiB0byBiZSBwdWxsZWQgaGlnaCBmb3IgMTBtcwo+ICsJICogZm9s bG93ZWQgYnkgYSBsb3cgcGVyaW9kIG9mIDEwbXMgYW5kIHRoZW4KPiArCSAqIHB1bGxlZCBoaWdo IGFnYWluCj4gKwkgKi8KClRoZSBjb21tZW50IHNheXMgMTAgbXMKCj4gKwlncGlvZF9zZXRfdmFs dWUoY3R4LT5yZXNldF9ncGlvLCAxKTsKPiArCW1zbGVlcCgyMCk7CgpidXQgdGhlbiB0aGUgc2xl ZXAgaXMgZm9yIDIwIG1zLgpNYXliZSB1c2UKCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwo/ Cgo+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMCk7Cj4gKwltc2xlZXAoMjAp Owo+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMSk7CgpTbyB0aGlzIGlzIGFu IGFjdGl2ZSBsb3cgcmVzZXQ/ClNob3VsZCB0aGlzIG1heWJlIHVzZSBHUElPX0FDVElWRV9MT1cg aW4gdGhlIERUIGFuZCB0aGVuCgoJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMCk7 CglncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAxKTsKCWdwaW9kX3NldF92YWx1ZShj dHgtPnJlc2V0X2dwaW8sIDApOwoKaGVyZT8KCj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgdHJ1bHlfbnQzNTU5N19wb3dlcl9vZmYoc3RydWN0IHRydWx5X250MzU1OTcg KmN0eCkKPiArewo+ICsJaW50IHJldCwgaTsKPiArCj4gKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5y ZXNldF9ncGlvLCAwKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPnN1 cHBsaWVzKTsgaSsrKSB7Cj4gKwkJcmV0ID0gcmVndWxhdG9yX3NldF9sb2FkKGN0eC0+c3VwcGxp ZXNbaV0uY29uc3VtZXIsCj4gKwkJCQlyZWd1bGF0b3JfZGlzYWJsZV9sb2Fkc1tpXSk7Cj4gKwkJ aWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmVndWxhdG9y X2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpLCBjdHgtPnN1cHBsaWVzKTsK PiArfQo+ICsKPiArc3RhdGljIGludCB0cnVseV9udDM1NTk3X2Rpc2FibGUoc3RydWN0IGRybV9w YW5lbCAqcGFuZWwpCj4gK3sKPiArCXN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHggPSBwYW5lbF90 b19jdHgocGFuZWwpOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIWN0eC0+ZW5hYmxlZCkKPiAr CQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoY3R4LT5iYWNrbGlnaHQpIHsKPiArCQlyZXQgPSBiYWNr bGlnaHRfZGlzYWJsZShjdHgtPmJhY2tsaWdodCk7Cj4gKwkJaWYgKHJldCA8IDApCj4gKwkJCURS TV9ERVZfRVJST1IoY3R4LT5kZXYsICJiYWNrbGlnaHQgZGlzYWJsZSBmYWlsZWQgJWRcbiIsCj4g KwkJCQlyZXQpOwo+ICsJfQo+ICsKPiArCWN0eC0+ZW5hYmxlZCA9IGZhbHNlOwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdHJ1bHlfbnQzNTU5N191bnByZXBhcmUoc3RydWN0 IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiArCXN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHggPSBw YW5lbF90b19jdHgocGFuZWwpOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJaWYgKCFjdHgtPnBy ZXBhcmVkKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWN0eC0+ZHNpWzBdLT5tb2RlX2ZsYWdzID0g MDsKPiArCWN0eC0+ZHNpWzFdLT5tb2RlX2ZsYWdzID0gMDsKPiArCj4gKwl0cnVseV9jYWxsX3dy aXRlX2Z1bmMocmV0LCB0cnVseV9kY3Nfd3JpdGUsIHBhbmVsLAo+ICsJCU1JUElfRENTX1NFVF9E SVNQTEFZX09GRik7CgpTZWUgYWJvdmUsIGp1c3QKCglyZXQgPSB0cnVseV9kY3Nfd3JpdGUocGFu ZWwsIE1JUElfRENTX1NFVF9ESVNQTEFZX09GRik7Cgp3b3VsZCBiZSBhIGxvdCBtb3JlIHJlYWRh YmxlLgoKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihjdHgtPmRldiwKPiAr CQkJInNldF9kaXNwbGF5X29mZiBjbWQgZmFpbGVkIHJldCA9ICVkXG4iLAo+ICsJCQlyZXQpOwo+ ICsJfQo+ICsKPiArCS8qIDEyMG1zIGRlbGF5IHJlcXVpcmVkIGhlcmUgYXMgcGVyIERDUyBzcGVj ICovCj4gKwltc2xlZXAoMTIwKTsKPiArCj4gKwl0cnVseV9jYWxsX3dyaXRlX2Z1bmMocmV0LCB0 cnVseV9kY3Nfd3JpdGUsIHBhbmVsLAo+ICsJCU1JUElfRENTX0VOVEVSX1NMRUVQX01PREUpOwoK U2VlIGFib3ZlLgoKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihjdHgtPmRl diwKPiArCQkJImVudGVyX3NsZWVwIGNtZCBmYWlsZWQgcmV0ID0gJWRcbiIsCj4gKwkJCXJldCk7 Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gdHJ1bHlfbnQzNTU5N19wb3dlcl9vZmYoY3R4KTsKPiArCWlm IChyZXQgPCAwKQo+ICsJCURSTV9ERVZfRVJST1IoY3R4LT5kZXYsCj4gKwkJCSJ0cnVseV9udDM1 NTk3X3Bvd2VyX29mZiBmYWlsZWQgcmV0ID0gJWRcbiIsCj4gKwkJCXJldCk7Cj4gKwo+ICsJY3R4 LT5wcmVwYXJlZCA9IGZhbHNlOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCB0cnVseV9udDM1NTk3X3ByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiAr CXN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHggPSBwYW5lbF90b19jdHgocGFuZWwpOwo+ICsJaW50 IHJldDsKPiArCWludCBpOwo+ICsJc3RydWN0IGNtZF9zZXQgKnBhbmVsX29uX2NtZHM7Cj4gKwlj b25zdCBzdHJ1Y3QgbnQzNTU5N19jb25maWcgKmNvbmZpZzsKPiArCXUzMiBudW1fY21kczsKPiAr Cj4gKwlpZiAoY3R4LT5wcmVwYXJlZCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyZXQgPSB0cnVs eV8zNTU5N19wb3dlcl9vbihjdHgpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsK PiArCj4gKwljdHgtPmRzaVswXS0+bW9kZV9mbGFncyB8PSBNSVBJX0RTSV9NT0RFX0xQTTsKPiAr CWN0eC0+ZHNpWzFdLT5tb2RlX2ZsYWdzIHw9IE1JUElfRFNJX01PREVfTFBNOwo+ICsKPiArCWNv bmZpZyA9IGN0eC0+Y29uZmlnOwo+ICsJcGFuZWxfb25fY21kcyA9IChzdHJ1Y3QgY21kX3NldCAq KWNvbmZpZy0+cGFuZWxfb25fY21kczsKPiArCW51bV9jbWRzID0gY29uZmlnLT5udW1fb25fY21k czsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NtZHM7IGkrKykKPiArCQl0cnVseV93cml0 ZV9idWZfZnVuYyhyZXQsIHRydWx5X2Rjc193cml0ZV9idWYsCj4gKwkJCXBhbmVsLCBwYW5lbF9v bl9jbWRzW2ldLnNpemUsCj4gKwkJCXBhbmVsX29uX2NtZHNbaV0uY29tbWFuZHMpOwoKU2VlIGFi b3ZlLiBBbHNvLCB3aHkgbm90IHN0b3AgaW1tZWRpYXRlbHkgd2hlbiBhIGRjcyB3cml0ZSBjb21t YW5kCmZhaWxzPwoKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihjdHgtPmRl diwKPiArCQkJInBhbmVsX2NtZHNfc2V0IGZhaWxlZCByZXQgPSAlZFxuIiwKPiArCQkJcmV0KTsK PiArCX0KPiArCj4gKwkvKiBBcyBwZXIgRFNJIHNwZWMgbmVlZCB0byB3YWl0IGZvciAxMjBtcwo+ ICsJICogYWZ0ZXIgc2VuZGluZyB0aGUgZXhpdCBzbGVlcCBEQ1MgY29tbWFuZAo+ICsJICovCj4g Kwl0cnVseV9jYWxsX3dyaXRlX2Z1bmMocmV0LCB0cnVseV9kY3Nfd3JpdGUsIHBhbmVsLAo+ICsJ CU1JUElfRENTX0VYSVRfU0xFRVBfTU9ERSk7CgpTZWUgYWJvdmUuCgo+ICsKPiArCWlmIChyZXQg PCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihjdHgtPmRldiwKPiArCQkJImV4aXRfc2xlZXBfbW9k ZSBjbWQgZmFpbGVkIHJldCA9ICVkXG4iLAo+ICsJCQlyZXQpOwo+ICsJfQo+ICsKPiArCW1zbGVl cCgxMjApOwo+ICsKPiArCXRydWx5X2NhbGxfd3JpdGVfZnVuYyhyZXQsIHRydWx5X2Rjc193cml0 ZSwgcGFuZWwsCj4gKwkJTUlQSV9EQ1NfU0VUX0RJU1BMQVlfT04pOwo+ICsKPiArCWlmIChyZXQg PCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihjdHgtPmRldiwKPiArCQkJInNldF9kaXNwbGF5X29u IGNtZCBmYWlsZWQgcmV0ID0gJWRcbiIsCj4gKwkJCXJldCk7Cj4gKwl9Cj4gKwo+ICsJLyogQWRk aW5nIDEyMG1zIGRlbGF5IGJlZm9yZSB0aGUgc3RhcnQgb2YKPiArCSAqIHBpeGVsIHN0cmVhbSB0 byB0aGUgcGFuZWwgYWZ0ZXIgc2VuZGluZwo+ICsJICogdGhlIHNldF9kaXNwbGF5X29uIERDUyBj b21tYW5kCj4gKwkgKi8KPiArCj4gKwltc2xlZXAoMTIwKTsKPiArCj4gKwljdHgtPnByZXBhcmVk ID0gdHJ1ZTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB0cnVseV9u dDM1NTk3X2VuYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKPiArewo+ICsJc3RydWN0IHRy dWx5X250MzU1OTcgKmN0eCA9IHBhbmVsX3RvX2N0eChwYW5lbCk7Cj4gKwlpbnQgcmV0Owo+ICsK PiArCWlmIChjdHgtPmVuYWJsZWQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKGN0eC0+YmFj a2xpZ2h0KSB7Cj4gKwkJcmV0ID0gYmFja2xpZ2h0X2VuYWJsZShjdHgtPmJhY2tsaWdodCk7Cj4g KwkJaWYgKHJldCA8IDApCj4gKwkJCURSTV9ERVZfRVJST1IoY3R4LT5kZXYsICJiYWNrbGlnaHQg ZW5hYmxlIGZhaWxlZCAlZFxuIiwKPiArCQkJCQkJICByZXQpOwo+ICsJfQo+ICsKPiArCWN0eC0+ ZW5hYmxlZCA9IHRydWU7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg dHJ1bHlfbnQzNTU5N19nZXRfbW9kZXMoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiAr CXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBwYW5lbC0+Y29ubmVjdG9yOwo+ICsJ c3RydWN0IHRydWx5X250MzU1OTcgKmN0eCA9IHBhbmVsX3RvX2N0eChwYW5lbCk7Cj4gKwlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKPiArCWNvbnN0IHN0cnVjdCBudDM1NTk3X2NvbmZp ZyAqY29uZmlnOwo+ICsKPiArCWNvbmZpZyA9IGN0eC0+Y29uZmlnOwo+ICsJbW9kZSA9IGRybV9t b2RlX2NyZWF0ZShjb25uZWN0b3ItPmRldik7Cj4gKwlpZiAoIW1vZGUpIHsKPiArCQlEUk1fREVW X0VSUk9SKGN0eC0+ZGV2LAo+ICsJCQkiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkaXNwbGF5IG1v ZGVcbiIpOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWNvbm5lY3Rvci0+ZGlzcGxheV9p bmZvLndpZHRoX21tID0gY29uZmlnLT53aWR0aF9tbTsKPiArCWNvbm5lY3Rvci0+ZGlzcGxheV9p bmZvLmhlaWdodF9tbSA9IGNvbmZpZy0+aGVpZ2h0X21tOwo+ICsJLyogQ29weSB0aGUgbW9kZSBm cm9tIHRoZSBEVCBhbmQgYWRkIGl0ICovCgpUaGlzIGNvbW1lbnQgaXMgbm90IGFjY3VyYXRlLCB0 aGUgbW9kZSBpcyBmcm9tIGluc2lkZSB0aGUgZHJpdmVyLApjdXJyZW50bHkgcWNvbV9zZG04NDVf bXRwXzJrX21vZGUgYmVsb3cuCgo+ICsJZHJtX21vZGVfY29weShtb2RlLCBjb25maWctPmRtKTsK PiArCW1vZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX0RSSVZFUiB8IERSTV9NT0RFX1RZUEVfUFJF RkVSUkVEOwo+ICsJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOwo+ICsKPiAr CXJldHVybiAxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYW5lbF9mdW5j cyB0cnVseV9udDM1NTk3X2RybV9mdW5jcyA9IHsKPiArCS5kaXNhYmxlID0gdHJ1bHlfbnQzNTU5 N19kaXNhYmxlLAo+ICsJLnVucHJlcGFyZSA9IHRydWx5X250MzU1OTdfdW5wcmVwYXJlLAo+ICsJ LnByZXBhcmUgPSB0cnVseV9udDM1NTk3X3ByZXBhcmUsCj4gKwkuZW5hYmxlID0gdHJ1bHlfbnQz NTU5N19lbmFibGUsCj4gKwkuZ2V0X21vZGVzID0gdHJ1bHlfbnQzNTU5N19nZXRfbW9kZXMsCj4g K307Cj4gKwo+ICtzdGF0aWMgaW50IHRydWx5X250MzU1OTdfcGFuZWxfYWRkKHN0cnVjdCB0cnVs eV9udDM1NTk3ICpjdHgpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGN0eC0+ZGV2Owo+ ICsJaW50IHJldCwgaTsKPiArCWNvbnN0IHN0cnVjdCBudDM1NTk3X2NvbmZpZyAqY29uZmlnOwo+ ICsKPiArCWNvbmZpZyA9IGN0eC0+Y29uZmlnOwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoY3R4LT5zdXBwbGllcyk7IGkrKykKPiArCQljdHgtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHJl Z3VsYXRvcl9uYW1lc1tpXTsKPiArCj4gKwlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldChk ZXYsIEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyksCj4gKwkJCQkgICAgICBjdHgtPnN1cHBsaWVz KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJY3R4LT5yZXNldF9n cGlvID0gZGV2bV9ncGlvZF9nZXQoZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfSElHSCk7Cj4gKwlp ZiAoSVNfRVJSKGN0eC0+cmVzZXRfZ3BpbykpIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwgImNh bm5vdCBnZXQgcmVzZXQgZ3BpbyAlbGRcbiIsCj4gKwkJCVBUUl9FUlIoY3R4LT5yZXNldF9ncGlv KSk7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoY3R4LT5yZXNldF9ncGlvKTsKPiArCX0KPiArCj4gKwlj dHgtPm1vZGVfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgIm1vZGUiLCBHUElPRF9PVVRfTE9X KTsKPiArCWlmIChJU19FUlIoY3R4LT5tb2RlX2dwaW8pKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihk ZXYsICJjYW5ub3QgZ2V0IG1vZGUgZ3BpbyAlbGRcbiIsCj4gKwkJCVBUUl9FUlIoY3R4LT5tb2Rl X2dwaW8pKTsKPiArCQlyZXR1cm4gUFRSX0VSUihjdHgtPm1vZGVfZ3Bpbyk7Cj4gKwl9Cj4gKwo+ ICsJLyogZHVhbCBwb3J0ICovCj4gKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5tb2RlX2dwaW8sIDAp Owo+ICsKPiArCWRybV9wYW5lbF9pbml0KCZjdHgtPnBhbmVsKTsKPiArCWN0eC0+cGFuZWwuZGV2 ID0gZGV2Owo+ICsJY3R4LT5wYW5lbC5mdW5jcyA9ICZ0cnVseV9udDM1NTk3X2RybV9mdW5jczsK PiArCWRybV9wYW5lbF9hZGQoJmN0eC0+cGFuZWwpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgcWNvbV9zZG04NDVfbXRwXzJrX21v ZGUgPSB7CgpzdGF0aWMgY29uc3QgLi4uCgo+ICsJLm5hbWUgPSAiMTQ0MHgyNTYwIiwKPiArCS5j bG9jayA9IDI2ODMxNiwKPiArCS5oZGlzcGxheSA9IDE0NDAsCj4gKwkuaHN5bmNfc3RhcnQgPSAx NDQwICsgMjAwLAo+ICsJLmhzeW5jX2VuZCA9IDE0NDAgKyAyMDAgKyAzMiwKPiArCS5odG90YWwg PSAxNDQwICsgMjAwICsgMzIgKyA2NCwKPiArCS52ZGlzcGxheSA9IDI1NjAsCj4gKwkudnN5bmNf c3RhcnQgPSAyNTYwICsgOCwKPiArCS52c3luY19lbmQgPSAyNTYwICsgOCArIDEsCj4gKwkudnRv dGFsID0gMjU2MCArIDggKyAxICsgNywKPiArCS52cmVmcmVzaCA9IDYwLAo+ICsJLmZsYWdzID0g MCwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgbnQzNTU5N19jb25maWcgbnQzNTU5N19kaXIg PSB7CgpzdGF0aWMgY29uc3QgLi4uCgo+ICsJLndpZHRoX21tID0gNzQsCj4gKwkuaGVpZ2h0X21t ID0gMTMxLAo+ICsJLnBhbmVsX25hbWUgPSAicWNvbV9zZG04NDVfbXRwXzJrX3BhbmVsIiwKPiAr CS5kbSA9ICZxY29tX3NkbTg0NV9tdHBfMmtfbW9kZSwKPiArCS5wYW5lbF9vbl9jbWRzID0gcWNv bV8ya19wYW5lbF9tYWdpY19jbWRzLAo+ICsJLm51bV9vbl9jbWRzID0gQVJSQVlfU0laRShxY29t XzJrX3BhbmVsX21hZ2ljX2NtZHMpLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB0cnVseV9udDM1 NTk3X3Byb2JlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKPiArewo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJmRzaS0+ZGV2Owo+ICsJc3RydWN0IHRydWx5X250MzU1OTcgKmN0eDsKPiAr CXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaTFfZGV2aWNlOwo+ICsJc3RydWN0IGRldmljZV9u b2RlICpkc2kxOwo+ICsJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmRzaTFfaG9zdDsKPiArCXN0cnVj dCBtaXBpX2RzaV9kZXZpY2UgKmRzaV9kZXY7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCWludCBpOwo+ ICsKPiArCWNvbnN0IHN0cnVjdCBtaXBpX2RzaV9kZXZpY2VfaW5mbyBpbmZvID0gey50eXBlID0g InRydWx5bnQzNTU5NyIsCgoudHlwZSBzaG91bGQgYmUgb24gdGhlIG5leHQgbGluZS4KCj4gKwkJ LmNoYW5uZWwgPSAwLAo+ICsJCS5ub2RlID0gTlVMTCwKPiArCX07Cj4gKwo+ICsJY3R4ID0gZGV2 bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKPiArCj4gKwlpZiAoIWN0 eCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwkvKiBUaGlzIGRldmljZSByZXByZXNlbnRz IGl0c2VsZiBhcyBvbmUgd2l0aAo+ICsJICogdHdvIGlucHV0IHBvcnRzIHdoaWNoIGFyZSBmZWQg YnkgdGhlIG91dHB1dAo+ICsJICogcG9ydHMgb2YgdGhlIHR3byBEU0kgY29udHJvbGxlcnMgLiBU aGUgRFNJMAo+ICsJICogaXMgdGhlIG1hc3RlciBjb250cm9sbGVyIGFuZCBoYXMgbW9zdCBvZiB0 aGUKPiArCSAqIHBhbmVsIHJlbGF0ZWQgaW5mbyBpbiBpdHMgY2hpbGQgbm9kZS4KPiArCSAqLwo+ ICsKPiArCWN0eC0+Y29uZmlnID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7Cj4gKwo+ ICsJaWYgKCFjdHgtPmNvbmZpZykgewo+ICsJCWRldl9lcnIoZGV2LCAibWlzc2luZyBkZXZpY2Ug Y29uZmlndXJhdGlvblxuIik7Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJZHNp MSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZShkc2ktPmRldi5vZl9ub2RlLCAxLCAtMSk7Cj4g KwlpZiAoIWRzaTEpIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwKPiArCQkJImZhaWxlZCB0byBn ZXQgcmVtb3RlIG5vZGUgZm9yIGRzaTFfZGV2aWNlXG4iKTsKPiArCQlyZXQgPSAtRU5PREVWOwo+ ICsJCWdvdG8gZXJyX2dldF9yZW1vdGU7Cj4gKwl9Cj4gKwo+ICsJZHNpMV9ob3N0ID0gb2ZfZmlu ZF9taXBpX2RzaV9ob3N0X2J5X25vZGUoZHNpMSk7Cj4gKwlpZiAoIWRzaTFfaG9zdCkgewo+ICsJ CURSTV9ERVZfRVJST1IoZGV2LCAiZmFpbGVkIHRvIGZpbmQgZHNpIGhvc3RcbiIpOwo+ICsJCXJl dCA9IC1FUFJPQkVfREVGRVI7Cj4gKwkJZ290byBlcnJfaG9zdDsKPiArCX0KPiArCj4gKwlvZl9u b2RlX3B1dChkc2kxKTsKPiArCj4gKwkvKiByZWdpc3RlciB0aGUgc2Vjb25kIERTSSBkZXZpY2Ug Ki8KPiArCWRzaTFfZGV2aWNlID0gbWlwaV9kc2lfZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoZHNpMV9o b3N0LCAmaW5mbyk7Cj4gKwlpZiAoSVNfRVJSKGRzaTFfZGV2aWNlKSkgewo+ICsJCURSTV9ERVZf RVJST1IoZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBkc2kgZGV2aWNlXG4iKTsKPiArCQlyZXQgPSBQ VFJfRVJSKGRzaSk7Cj4gKwkJZ290byBlcnJfZHNpX2RldmljZTsKPiArCX0KPiArCj4gKwltaXBp X2RzaV9zZXRfZHJ2ZGF0YShkc2ksIGN0eCk7Cj4gKwo+ICsJY3R4LT5kZXYgPSBkZXY7Cj4gKwlj dHgtPmRzaVswXSA9IGRzaTsKPiArCWN0eC0+ZHNpWzFdID0gZHNpMV9kZXZpY2U7Cj4gKwo+ICsJ cmV0ID0gdHJ1bHlfbnQzNTU5N19wYW5lbF9hZGQoY3R4KTsKPiArCWlmIChyZXQpIHsKPiArCQlE Uk1fREVWX0VSUk9SKGRldiwgImZhaWxlZCB0byBhZGQgcGFuZWxcbiIpOwo+ICsJCWdvdG8gZXJy X3BhbmVsX2FkZDsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgt PmRzaSk7IGkrKykgewo+ICsJCWRzaV9kZXYgPSBjdHgtPmRzaVtpXTsKPiArCQlkc2lfZGV2LT5s YW5lcyA9IDQ7Cj4gKwkJZHNpX2Rldi0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKPiAr CQlkc2lfZGV2LT5tb2RlX2ZsYWdzID0gTUlQSV9EU0lfTU9ERV9WSURFTyB8IE1JUElfRFNJX01P REVfTFBNIHwKPiArCQkJTUlQSV9EU0lfQ0xPQ0tfTk9OX0NPTlRJTlVPVVM7Cj4gKwkJcmV0ID0g bWlwaV9kc2lfYXR0YWNoKGRzaV9kZXYpOwo+ICsJCWlmIChyZXQgPCAwKSB7Cj4gKwkJCURSTV9E RVZfRVJST1IoZGV2LAo+ICsJCQkJImRzaSBhdHRhY2ggZmFpbGVkIGkgPSAlZFxuIiwgaSk7Cj4g KwkJCQlnb3RvIGVycl9kc2lfYXR0YWNoOwo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gMDsK PiArCj4gK2Vycl9kc2lfYXR0YWNoOgo+ICsJZHJtX3BhbmVsX3JlbW92ZSgmY3R4LT5wYW5lbCk7 Cj4gK2Vycl9wYW5lbF9hZGQ6Cj4gKwltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3Rlcihkc2kxX2Rl dmljZSk7Cj4gK2Vycl9kc2lfZGV2aWNlOgo+ICtlcnJfaG9zdDoKPiArCW9mX25vZGVfcHV0KGRz aTEpOwo+ICtlcnJfZ2V0X3JlbW90ZToKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgdHJ1bHlfbnQzNTU5N19yZW1vdmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQo+ ICt7Cj4gKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4ID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEo ZHNpKTsKPiArCj4gKwlpZiAoY3R4LT5kc2lbMF0pCj4gKwkJbWlwaV9kc2lfZGV0YWNoKGN0eC0+ ZHNpWzBdKTsKPiArCWlmIChjdHgtPmRzaVsxXSkgewo+ICsJCW1pcGlfZHNpX2RldGFjaChjdHgt PmRzaVsxXSk7Cj4gKwkJbWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIoY3R4LT5kc2lbMV0pOwo+ ICsJfQo+ICsKPiArCWRybV9wYW5lbF9yZW1vdmUoJmN0eC0+cGFuZWwpOwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRydWx5X3dxeGdh X29mX21hdGNoW10gPSB7CgpTaG91bGQgdGhpcyB0YWJsZSBiZSByZW5hbWVkIHRvIHRydWx5X250 MzY2OTdfb2ZfbWF0Y2g/Cgo+ICsJewkuY29tcGF0aWJsZSA9ICJxY29tLHNkbTg0NS1tdHAtMkst ZGlzcGxheSIsCj4gKwkJLmRhdGEgPSAmbnQzNTU5N19kaXIsCj4gKwl9LAo+ICsKPiArCXsgfQo+ ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0cnVseV93cXhnYV9vZl9tYXRjaCk7Cj4g Kwo+ICtzdGF0aWMgc3RydWN0IG1pcGlfZHNpX2RyaXZlciB0cnVseV93cXhnYV9kcml2ZXIgPSB7 Cj4gKwkuZHJpdmVyID0gewo+ICsJCS5uYW1lID0gInBhbmVsX3RydWx5X250MzU1OTciLAo+ICsJ CS5vZl9tYXRjaF90YWJsZSA9IHRydWx5X3dxeGdhX29mX21hdGNoLAo+ICsJfSwKPiArCS5wcm9i ZSA9IHRydWx5X250MzU1OTdfcHJvYmUsCj4gKwkucmVtb3ZlID0gdHJ1bHlfbnQzNTU5N19yZW1v dmUsCj4gK307Cj4gK21vZHVsZV9taXBpX2RzaV9kcml2ZXIodHJ1bHlfd3F4Z2FfZHJpdmVyKTsK PiArCj4gK01PRFVMRV9ERVNDUklQVElPTigiVHJ1bHkgTlQzNTU5NyBEU0kgUGFuZWwgRHJpdmVy Iik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKCnJlZ2FyZHMKUGhpbGlwcApfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGlu ZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK