From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sam Ravnborg Subject: Re: [PATCH v3 7/9] drm/panel: Add driver for the Sony ACX565AKM panel Date: Tue, 13 Aug 2019 19:16:32 +0200 Message-ID: <20190813171632.GC30320@ravnborg.org> References: <20190813133311.26441-1-laurent.pinchart@ideasonboard.com> <20190813133311.26441-8-laurent.pinchart@ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from asavdk3.altibox.net (asavdk3.altibox.net [109.247.116.14]) by gabe.freedesktop.org (Postfix) with ESMTPS id DEEF66E203 for ; Tue, 13 Aug 2019 17:16:35 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190813133311.26441-8-laurent.pinchart@ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Laurent Pinchart Cc: Thierry Reding , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org SGkgTGF1cmVudC4KCgpPbiBUdWUsIEF1ZyAxMywgMjAxOSBhdCAwNDozMzowOVBNICswMzAwLCBM YXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+IFRoaXMgcGFuZWwgaXMgdXNlZCBvbiB0aGUgTm9raWEg TjkwMC4KPiAKPiBUaGUgY29kZSBpcyBiYXNlZCBvbiB0aGUgb21hcGRybS1zcGVjaWZpYyBwYW5l bC1zb255LWFjeDU2NWFrbSBkcml2ZXIuCj4gCj4gU2lnbmVkLW9mZi1ieTogTGF1cmVudCBQaW5j aGFydCA8bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgoKTG9va2luZyBhdCB0aGUg YmFja2xpZ2h0IHN1cHBvcnQgaW4gdGhpcyBkcml2ZXIgdGhlcmUgaXMgc29tZSBwb3RlbnRpYWwK Zm9yIHVzaW5nIG1vcmUgb2YgdGhlIGluZnJhc3RydWN0dXJlLgppRm9yIGV4YW1wbGUgdGhlcmUg c2hvdWxkIGJlIG5vIG5lZWQgZm9yIGFjeDU2NWFrbV9wYW5lbC5tdXRleCwKYXMgdGhlIGNvcmUg aGFuZGxlcyBsb2NraW5nLgoKQmFja2xpZ2h0IHNob3VsZCBtYXliZSB1c2UgZGV2bV9iYWNrbGln aHRfZGV2aWNlX3JlZ2lzdGVyKCkKYXMgcGFydCBvZiB1c2luZyBtb3JlIGluZnJhc3RydWN0dXJl LCBzbyBjbGVhbi11cCBpcyBhdXRvbWF0aWMuCgpBbHNvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0 aGUgZW5hYmxlL2Rpc2FibGUgY2FsbGJhY2tzIGxvb2tzIGxpa2UKbW9zdCBvZiB0aGUgaW1wbGVt ZW50YXRpb24gYmVsb25ncyBpbiBwcmVwYXJlL3VucHJlcGFyZSBjYWxsYmFja3MuCgpBbmQgZW5h YmxlKCkgY291bGQgYmUgYXMgdHJpdmlhbCBhczoKCgliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhh Y3g1NjVha21fcGFuZWwtPmJhY2tsaWdodCk7CgoKTXkgZmVlZGJhY2sgdG8gdGhpcyBwYXRjaCB3 b3VsZCBiZToKIlRoaXMgaXMgaG93IGl0IHdhcyBpbiB0aGUgb3JpZ2luYWwgZHJpdmVyIHNvIHdl IGNhbiBmaXggaXQgaW4gYQpmb2xsb3ctdXAgcGF0Y2guIEZvbGxvdy11cCBwYXRjaCBuZWVkcyBI VyB0byB0ZXN0IHRoZSBjaGFuZ2VzLiIKCklmIHlvdSBhZGQgYSBUT0RPIGxpa2UgdGhpczoKVE9E TzoKLSBVcGRhdGUgYmFja2xpZ2h0IHN1cHBvcnQgdG8gdXNlIGJhY2tsaWdodF91cGRhdGVfc3Rh dHVzKCkgZXRjLgotIFVzZSBwcmVwYXJlL3VucHJlcGFyZSBmb3IgdGhlIGJhc2ljIHBvd2VyIG9u L29mZiBvZiB0aGUgYmFja2xpZ3QKCihPciBzb21lIG90aGVyIHdheSB0byByZW1lbWJlciB3ZSBu ZWVkIHRvIGRvIHRoaXMpIHRoZW46ClJldmlld2VkLWJ5OiBTYW0gUmF2bmJvcmcgPHNhbUByYXZu Ym9yZy5vcmc+CgpFdmVuIGJldHRlciB3b3VsZCBiZSBhIGZvbGxvdy11cCBwYXRjaCB0byBhY3R1 YWxseSBkbyB0aGVzZSB0aGluZ3MuCgoJU2FtCgoKPiAtLS0KPiBDaGFuZ2VzIHNpbmNlIHYyOgo+ IAo+IC0gQ2FsbCBkcm1fcGFuZWxfdW5wcmVwYXJlKCkgaW4gLnJlbW92ZSgpIGhhbmRsZXIKPiAK PiBDaGFuZ2VzIHNpbmNlIHYxOgo+IAo+IC0gTWVudGlvbiBib2FyZHMgdXNpbmcgdGhlIHBhbmVs IGluIEtjb25maWcKPiAtIFJlbmFtZWQgYWN4NTY1YWttX2RldmljZSB0byBhY3g1NjVha21fcGFu ZWwKPiAtIENvbW1lbnRzIHVwZGF0ZXMKPiAtIFN0b3JlIHdpZHRoX21tIGFuZCBoZWlnaHRfbW0g aW4gZHJtX2Rpc3BsYXlfbW9kZQo+IC0gVXNlIGRybV9wYW5lbF9kaXNhYmxlKCkgaW4gLnJlbW92 ZSgpIGhhbmRsZXIKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgICAgICAg ICAgICAgICAgfCAgIDggKwo+ICBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgICAgICAg ICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1zb255LWFjeDU2 NWFrbS5jIHwgNjk0ICsrKysrKysrKysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFuZ2VkLCA3MDMg aW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3BhbmVs L3BhbmVsLXNvbnktYWN4NTY1YWttLmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3BhbmVsL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwo+IGluZGV4IDhk OWE4Y2RiNzA0ZS4uYjA1NjQ5YjMxMThhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9w YW5lbC9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKPiBAQCAt MzE2LDYgKzMxNiwxNCBAQCBjb25maWcgRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYKPiAgCSAg U2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFNpdHJvbml4 Cj4gIAkgIFNUNzc4OVYgY29udHJvbGxlciBmb3IgMjQweDMyMCBMQ0QgcGFuZWxzCj4gIAo+ICtj b25maWcgRFJNX1BBTkVMX1NPTllfQUNYNTY1QUtNCj4gKwl0cmlzdGF0ZSAiU29ueSBBQ1g1NjVB S00gcGFuZWwiCj4gKwlkZXBlbmRzIG9uIEdQSU9MSUIgJiYgT0YgJiYgU1BJCj4gKwlkZXBlbmRz IG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKCj4gKwloZWxwCj4gKwkgIFNheSBZIGhlcmUgaWYg eW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBTb255IEFDWDU2NUFLTQo+ICsJICA4 MDB4NjAwIDMuNSIgcGFuZWwgKGZvdW5kIG9uIHRoZSBOb2tpYSBOOTAwKS4KPiArCj4gIGNvbmZp ZyBEUk1fUEFORUxfVFBPX1RQRzExMAo+ICAJdHJpc3RhdGUgIlRQTyBUUEcgODAweDQwMCBwYW5l bCIKPiAgCWRlcGVuZHMgb24gT0YgJiYgU1BJICYmIEdQSU9MSUIKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2Vm aWxlCj4gaW5kZXggMTRkMWM0OWVmM2FiLi4yOGNmMjMzMmZkMDYgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVs L01ha2VmaWxlCj4gQEAgLTMzLDUgKzMzLDYgQEAgb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSEFS UF9MUzAzN1Y3RFcwMSkgKz0gcGFuZWwtc2hhcnAtbHMwMzd2N2R3MDEubwo+ICBvYmotJChDT05G SUdfRFJNX1BBTkVMX1NIQVJQX0xTMDQzVDFMRTAxKSArPSBwYW5lbC1zaGFycC1sczA0M3QxbGUw MS5vCj4gIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0lUUk9OSVhfU1Q3NzAxKSArPSBwYW5lbC1z aXRyb25peC1zdDc3MDEubwo+ICBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4 OVYpICs9IHBhbmVsLXNpdHJvbml4LXN0Nzc4OXYubwo+ICtvYmotJChDT05GSUdfRFJNX1BBTkVM X1NPTllfQUNYNTY1QUtNKSArPSBwYW5lbC1zb255LWFjeDU2NWFrbS5vCj4gIG9iai0kKENPTkZJ R19EUk1fUEFORUxfVFBPX1RQRzExMCkgKz0gcGFuZWwtdHBvLXRwZzExMC5vCj4gIG9iai0kKENP TkZJR19EUk1fUEFORUxfVFJVTFlfTlQzNTU5N19XUVhHQSkgKz0gcGFuZWwtdHJ1bHktbnQzNTU5 Ny5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1zb255LWFjeDU2 NWFrbS5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXNvbnktYWN4NTY1YWttLmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYzhjODIxNjNlMjRkCj4g LS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1zb255LWFj eDU2NWFrbS5jCj4gQEAgLTAsMCArMSw2OTQgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAKPiArLyoKPiArICogU29ueSBBQ1g1NjVBS00gTENEIFBhbmVsIGRyaXZlcgo+ ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3Jh dGVkCj4gKyAqCj4gKyAqIEJhc2VkIG9uIHRoZSBvbWFwZHJtLXNwZWNpZmljIHBhbmVsLXNvbnkt YWN4NTY1YWttIGRyaXZlcgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y cG9yYXRpb24KPiArICogQXV0aG9yOiBJbXJlIERlYWsgPGltcmUuZGVha0Bub2tpYS5jb20+Cj4g KyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L2ppZmZpZXMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5j bHVkZSA8bGludXgvbXV0ZXguaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9zcGkvc3BpLmg+Cj4gKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4K PiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Nvbm5lY3Rvci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9tb2Rlcy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgo+ICsKPiArI2RlZmluZSBD VFJMX0RJU1BfQlJJR0hUTkVTU19DVFJMX09OCQkoMSA8PCA1KQo+ICsjZGVmaW5lIENUUkxfRElT UF9BTUJJRU5UX0xJR0hUX0NUUkxfT04JCSgxIDw8IDQpCj4gKyNkZWZpbmUgQ1RSTF9ESVNQX0JB Q0tMSUdIVF9PTgkJCSgxIDw8IDIpCj4gKyNkZWZpbmUgQ1RSTF9ESVNQX0FVVE9fQlJJR0hUTkVT U19PTgkJKDEgPDwgMSkKPiArCj4gKyNkZWZpbmUgTUlQSURfQ01EX1dSSVRFX0NBQkMJCTB4NTUK PiArI2RlZmluZSBNSVBJRF9DTURfUkVBRF9DQUJDCQkweDU2Cj4gKwo+ICsjZGVmaW5lIE1JUElE X1ZFUl9MUEg4OTIzCQkzCj4gKyNkZWZpbmUgTUlQSURfVkVSX0xTMDQxWTMJCTQKPiArI2RlZmlu ZSBNSVBJRF9WRVJfTDRGMDAzMTEJCTgKPiArI2RlZmluZSBNSVBJRF9WRVJfQUNYNTY1QUtNCQk5 Cj4gKwo+ICtzdHJ1Y3QgYWN4NTY1YWttX3BhbmVsIHsKPiArCXN0cnVjdCBkcm1fcGFuZWwgcGFu ZWw7Cj4gKwo+ICsJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKPiArCXN0cnVjdCBncGlvX2Rlc2Mg KnJlc2V0X2dwaW87Cj4gKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0Owo+ICsK PiArCXN0cnVjdCBtdXRleCBtdXRleDsKPiArCj4gKwljb25zdCBjaGFyICpuYW1lOwo+ICsJdTgg ZGlzcGxheV9pZFszXTsKPiArCWludCBtb2RlbDsKPiArCWludCByZXZpc2lvbjsKPiArCWJvb2wg aGFzX2JjOwo+ICsJYm9vbCBoYXNfY2FiYzsKPiArCj4gKwlib29sIGVuYWJsZWQ7Cj4gKwl1bnNp Z25lZCBpbnQgY2FiY19tb2RlOwo+ICsJLyoKPiArCSAqIE5leHQgdmFsdWUgb2YgamlmZmllcyB3 aGVuIHdlIGNhbiBpc3N1ZSB0aGUgbmV4dCBzbGVlcCBpbi9vdXQKPiArCSAqIGNvbW1hbmQuCj4g KwkgKi8KPiArCXVuc2lnbmVkIGxvbmcgaHdfZ3VhcmRfZW5kOwo+ICsJdW5zaWduZWQgbG9uZyBo d19ndWFyZF93YWl0OwkJLyogbWF4IGd1YXJkIHRpbWUgaW4gamlmZmllcyAqLwo+ICt9Owo+ICsK PiArI2RlZmluZSB0b19hY3g1NjVha21fZGV2aWNlKHApIGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3Qg YWN4NTY1YWttX3BhbmVsLCBwYW5lbCkKPiArCj4gK3N0YXRpYyB2b2lkIGFjeDU2NWFrbV90cmFu c2ZlcihzdHJ1Y3QgYWN4NTY1YWttX3BhbmVsICpsY2QsIGludCBjbWQsCj4gKwkJCSAgICAgIGNv bnN0IHU4ICp3YnVmLCBpbnQgd2xlbiwgdTggKnJidWYsIGludCBybGVuKQo+ICt7Cj4gKwlzdHJ1 Y3Qgc3BpX21lc3NhZ2UJbTsKPiArCXN0cnVjdCBzcGlfdHJhbnNmZXIJKngsIHhmZXJbNV07Cj4g KwlpbnQJCQlyZXQ7Cj4gKwo+ICsJc3BpX21lc3NhZ2VfaW5pdCgmbSk7Cj4gKwo+ICsJbWVtc2V0 KHhmZXIsIDAsIHNpemVvZih4ZmVyKSk7Cj4gKwl4ID0gJnhmZXJbMF07Cj4gKwo+ICsJY21kICY9 ICAweGZmOwo+ICsJeC0+dHhfYnVmID0gJmNtZDsKPiArCXgtPmJpdHNfcGVyX3dvcmQgPSA5Owo+ ICsJeC0+bGVuID0gMjsKPiArCj4gKwlpZiAocmxlbiA+IDEgJiYgd2xlbiA9PSAwKSB7Cj4gKwkJ LyoKPiArCQkgKiBCZXR3ZWVuIHRoZSBjb21tYW5kIGFuZCB0aGUgcmVzcG9uc2UgZGF0YSB0aGVy ZSBpcyBhCj4gKwkJICogZHVtbXkgY2xvY2sgY3ljbGUuIEFkZCBhbiBleHRyYSBiaXQgYWZ0ZXIg dGhlIGNvbW1hbmQKPiArCQkgKiB3b3JkIHRvIGFjY291bnQgZm9yIHRoaXMuCj4gKwkJICovCj4g KwkJeC0+Yml0c19wZXJfd29yZCA9IDEwOwo+ICsJCWNtZCA8PD0gMTsKPiArCX0KPiArCXNwaV9t ZXNzYWdlX2FkZF90YWlsKHgsICZtKTsKPiArCj4gKwlpZiAod2xlbikgewo+ICsJCXgrKzsKPiAr CQl4LT50eF9idWYgPSB3YnVmOwo+ICsJCXgtPmxlbiA9IHdsZW47Cj4gKwkJeC0+Yml0c19wZXJf d29yZCA9IDk7Cj4gKwkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgJm0pOwo+ICsJfQo+ICsKPiAr CWlmIChybGVuKSB7Cj4gKwkJeCsrOwo+ICsJCXgtPnJ4X2J1Zgk9IHJidWY7Cj4gKwkJeC0+bGVu CQk9IHJsZW47Cj4gKwkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgJm0pOwo+ICsJfQo+ICsKPiAr CXJldCA9IHNwaV9zeW5jKGxjZC0+c3BpLCAmbSk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlkZXZf ZGJnKCZsY2QtPnNwaS0+ZGV2LCAic3BpX3N5bmMgJWRcbiIsIHJldCk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbmxpbmUgdm9pZCBhY3g1NjVha21fY21kKHN0cnVjdCBhY3g1NjVha21fcGFuZWwgKmxj ZCwgaW50IGNtZCkKPiArewo+ICsJYWN4NTY1YWttX3RyYW5zZmVyKGxjZCwgY21kLCBOVUxMLCAw LCBOVUxMLCAwKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGFjeDU2NWFrbV93cml0 ZShzdHJ1Y3QgYWN4NTY1YWttX3BhbmVsICpsY2QsCj4gKwkJCSAgICAgICBpbnQgcmVnLCBjb25z dCB1OCAqYnVmLCBpbnQgbGVuKQo+ICt7Cj4gKwlhY3g1NjVha21fdHJhbnNmZXIobGNkLCByZWcs IGJ1ZiwgbGVuLCBOVUxMLCAwKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGFjeDU2 NWFrbV9yZWFkKHN0cnVjdCBhY3g1NjVha21fcGFuZWwgKmxjZCwKPiArCQkJICAgICAgaW50IHJl ZywgdTggKmJ1ZiwgaW50IGxlbikKPiArewo+ICsJYWN4NTY1YWttX3RyYW5zZmVyKGxjZCwgcmVn LCBOVUxMLCAwLCBidWYsIGxlbik7Cj4gK30KPiArCj4gKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Cj4gKyAqIEF1dG8gQnJpZ2h0bmVzcyBDb250cm9sIFZpYSBzeXNmcwo+ICsgKi8KPiArCj4gK3N0 YXRpYyB1bnNpZ25lZCBpbnQgYWN4NTY1YWttX2dldF9jYWJjX21vZGUoc3RydWN0IGFjeDU2NWFr bV9wYW5lbCAqbGNkKQo+ICt7Cj4gKwlyZXR1cm4gbGNkLT5jYWJjX21vZGU7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGFjeDU2NWFrbV9zZXRfY2FiY19tb2RlKHN0cnVjdCBhY3g1NjVha21fcGFu ZWwgKmxjZCwKPiArCQkJCSAgICB1bnNpZ25lZCBpbnQgbW9kZSkKPiArewo+ICsJdTE2IGNhYmNf Y3RybDsKPiArCj4gKwlsY2QtPmNhYmNfbW9kZSA9IG1vZGU7Cj4gKwlpZiAoIWxjZC0+ZW5hYmxl ZCkKPiArCQlyZXR1cm47Cj4gKwljYWJjX2N0cmwgPSAwOwo+ICsJYWN4NTY1YWttX3JlYWQobGNk LCBNSVBJRF9DTURfUkVBRF9DQUJDLCAodTggKikmY2FiY19jdHJsLCAxKTsKPiArCWNhYmNfY3Ry bCAmPSB+MzsKPiArCWNhYmNfY3RybCB8PSAoMSA8PCA4KSB8IChtb2RlICYgMyk7Cj4gKwlhY3g1 NjVha21fd3JpdGUobGNkLCBNSVBJRF9DTURfV1JJVEVfQ0FCQywgKHU4ICopJmNhYmNfY3RybCwg Mik7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgYWN4NTY1YWttX2dldF9od19jYWJj X21vZGUoc3RydWN0IGFjeDU2NWFrbV9wYW5lbCAqbGNkKQo+ICt7Cj4gKwl1OCBjYWJjX2N0cmw7 Cj4gKwo+ICsJYWN4NTY1YWttX3JlYWQobGNkLCBNSVBJRF9DTURfUkVBRF9DQUJDLCAmY2FiY19j dHJsLCAxKTsKPiArCXJldHVybiBjYWJjX2N0cmwgJiAzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29u c3QgY2hhciAqIGNvbnN0IGFjeDU2NWFrbV9jYWJjX21vZGVzW10gPSB7Cj4gKwkib2ZmIiwJCS8q IGFsd2F5cyB1c2VkIHdoZW4gQ0FCQyBpcyBub3Qgc3VwcG9ydGVkICovCj4gKwkidWkiLAo+ICsJ InN0aWxsLWltYWdlIiwKPiArCSJtb3ZpbmctaW1hZ2UiLAo+ICt9Owo+ICsKPiArc3RhdGljIHNz aXplX3QgY2FiY19tb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAo+ICsJCQkgICAgICBzdHJ1 Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPiArCQkJICAgICAgY2hhciAqYnVmKQo+ICt7Cj4g KwlzdHJ1Y3QgYWN4NTY1YWttX3BhbmVsICpsY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiAr CWNvbnN0IGNoYXIgKm1vZGVfc3RyOwo+ICsJaW50IG1vZGU7Cj4gKwo+ICsJaWYgKCFsY2QtPmhh c19jYWJjKQo+ICsJCW1vZGUgPSAwOwo+ICsJZWxzZQo+ICsJCW1vZGUgPSBhY3g1NjVha21fZ2V0 X2NhYmNfbW9kZShsY2QpOwo+ICsKPiArCW1vZGVfc3RyID0gInVua25vd24iOwo+ICsJaWYgKG1v ZGUgPj0gMCAmJiBtb2RlIDwgQVJSQVlfU0laRShhY3g1NjVha21fY2FiY19tb2RlcykpCj4gKwkJ bW9kZV9zdHIgPSBhY3g1NjVha21fY2FiY19tb2Rlc1ttb2RlXTsKPiArCj4gKwlyZXR1cm4gc3By aW50ZihidWYsICIlc1xuIiwgbW9kZV9zdHIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBj YWJjX21vZGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+ICsJCQkgICAgICAgc3RydWN0IGRl dmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4gKwkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVf dCBjb3VudCkKPiArewo+ICsJc3RydWN0IGFjeDU2NWFrbV9wYW5lbCAqbGNkID0gZGV2X2dldF9k cnZkYXRhKGRldik7Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShhY3g1NjVha21fY2FiY19tb2Rlcyk7IGkrKykgewo+ICsJCWNvbnN0IGNoYXIg Km1vZGVfc3RyID0gYWN4NTY1YWttX2NhYmNfbW9kZXNbaV07Cj4gKwkJaW50IGNtcF9sZW4gPSBz dHJsZW4obW9kZV9zdHIpOwo+ICsKPiArCQlpZiAoY291bnQgPiAwICYmIGJ1Zltjb3VudCAtIDFd ID09ICdcbicpCj4gKwkJCWNvdW50LS07Cj4gKwkJaWYgKGNvdW50ICE9IGNtcF9sZW4pCj4gKwkJ CWNvbnRpbnVlOwo+ICsKPiArCQlpZiAoc3RybmNtcChidWYsIG1vZGVfc3RyLCBjbXBfbGVuKSA9 PSAwKQo+ICsJCQlicmVhazsKPiArCX0KPiArCj4gKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGFjeDU2 NWFrbV9jYWJjX21vZGVzKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlpZiAoIWxjZC0+ aGFzX2NhYmMgJiYgaSAhPSAwKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCW11dGV4X2xv Y2soJmxjZC0+bXV0ZXgpOwo+ICsJYWN4NTY1YWttX3NldF9jYWJjX21vZGUobGNkLCBpKTsKPiAr CW11dGV4X3VubG9jaygmbGNkLT5tdXRleCk7Cj4gKwo+ICsJcmV0dXJuIGNvdW50Owo+ICt9Cj4g Kwo+ICtzdGF0aWMgc3NpemVfdCBjYWJjX2F2YWlsYWJsZV9tb2Rlc19zaG93KHN0cnVjdCBkZXZp Y2UgKmRldiwKPiArCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4gKwkJCQkJ IGNoYXIgKmJ1ZikKPiArewo+ICsJc3RydWN0IGFjeDU2NWFrbV9wYW5lbCAqbGNkID0gZGV2X2dl dF9kcnZkYXRhKGRldik7Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCXNpemVfdCBsZW4gPSAwOwo+ ICsKPiArCWlmICghbGNkLT5oYXNfY2FiYykKPiArCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xu IiwgYWN4NTY1YWttX2NhYmNfbW9kZXNbMF0pOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKGFjeDU2NWFrbV9jYWJjX21vZGVzKTsgaSsrKQo+ICsJCWxlbiArPSBzcHJpbnRmKCZi dWZbbGVuXSwgIiVzJXMiLCBpID8gIiAiIDogIiIsCj4gKwkJCSAgICAgICBhY3g1NjVha21fY2Fi Y19tb2Rlc1tpXSk7Cj4gKwo+ICsJYnVmW2xlbisrXSA9ICdcbic7Cj4gKwo+ICsJcmV0dXJuIGxl bjsKPiArfQo+ICsKPiArc3RhdGljIERFVklDRV9BVFRSX1JXKGNhYmNfbW9kZSk7Cj4gK3N0YXRp YyBERVZJQ0VfQVRUUl9STyhjYWJjX2F2YWlsYWJsZV9tb2Rlcyk7Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IGF0dHJpYnV0ZSAqYWN4NTY1YWttX2NhYmNfYXR0cnNbXSA9IHsKPiArCSZkZXZfYXR0cl9j YWJjX21vZGUuYXR0ciwKPiArCSZkZXZfYXR0cl9jYWJjX2F2YWlsYWJsZV9tb2Rlcy5hdHRyLAo+ ICsJTlVMTCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3Vw IGFjeDU2NWFrbV9jYWJjX2F0dHJfZ3JvdXAgPSB7Cj4gKwkuYXR0cnMgPSBhY3g1NjVha21fY2Fi Y19hdHRycywKPiArfTsKPiArCj4gKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKyAqIEJhY2ts aWdodCBEZXZpY2UKPiArICovCj4gKwo+ICtzdGF0aWMgaW50IGFjeDU2NWFrbV9nZXRfYWN0dWFs X2JyaWdodG5lc3Moc3RydWN0IGFjeDU2NWFrbV9wYW5lbCAqbGNkKQo+ICt7Cj4gKwl1OCBidjsK PiArCj4gKwlhY3g1NjVha21fcmVhZChsY2QsIE1JUElfRENTX0dFVF9ESVNQTEFZX0JSSUdIVE5F U1MsICZidiwgMSk7Cj4gKwo+ICsJcmV0dXJuIGJ2Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBh Y3g1NjVha21fc2V0X2JyaWdodG5lc3Moc3RydWN0IGFjeDU2NWFrbV9wYW5lbCAqbGNkLCBpbnQg bGV2ZWwpCj4gK3sKPiArCXUxNiBjdHJsOwo+ICsJaW50IGJ2Owo+ICsKPiArCWJ2ID0gbGV2ZWwg fCAoMSA8PCA4KTsKPiArCWFjeDU2NWFrbV93cml0ZShsY2QsIE1JUElfRENTX1NFVF9ESVNQTEFZ X0JSSUdIVE5FU1MsICh1OCAqKSZidiwgMik7Cj4gKwo+ICsJYWN4NTY1YWttX3JlYWQobGNkLCBN SVBJX0RDU19HRVRfQ09OVFJPTF9ESVNQTEFZLCAodTggKikmY3RybCwgMSk7Cj4gKwlpZiAobGV2 ZWwpCj4gKwkJY3RybCB8PSBDVFJMX0RJU1BfQlJJR0hUTkVTU19DVFJMX09OIHwKPiArCQkJQ1RS TF9ESVNQX0JBQ0tMSUdIVF9PTjsKPiArCWVsc2UKPiArCQljdHJsICY9IH4oQ1RSTF9ESVNQX0JS SUdIVE5FU1NfQ1RSTF9PTiB8Cj4gKwkJCSAgQ1RSTF9ESVNQX0JBQ0tMSUdIVF9PTik7Cj4gKwo+ ICsJY3RybCB8PSAxIDw8IDg7Cj4gKwlhY3g1NjVha21fd3JpdGUobGNkLCBNSVBJX0RDU19XUklU RV9DT05UUk9MX0RJU1BMQVksICh1OCAqKSZjdHJsLCAyKTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBhY3g1NjVha21fYmxfdXBkYXRlX3N0YXR1c19sb2NrZWQoc3RydWN0IGJhY2tsaWdodF9kZXZp Y2UgKmRldikKPiArewo+ICsJc3RydWN0IGFjeDU2NWFrbV9wYW5lbCAqbGNkID0gZGV2X2dldF9k cnZkYXRhKCZkZXYtPmRldik7Cj4gKwlpbnQgbGV2ZWw7Cj4gKwo+ICsJaWYgKGRldi0+cHJvcHMu ZmJfYmxhbmsgPT0gRkJfQkxBTktfVU5CTEFOSyAmJgo+ICsJICAgIGRldi0+cHJvcHMucG93ZXIg PT0gRkJfQkxBTktfVU5CTEFOSykKPiArCQlsZXZlbCA9IGRldi0+cHJvcHMuYnJpZ2h0bmVzczsK PiArCWVsc2UKPiArCQlsZXZlbCA9IDA7Cj4gKwo+ICsJYWN4NTY1YWttX3NldF9icmlnaHRuZXNz KGxjZCwgbGV2ZWwpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFj eDU2NWFrbV9ibF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpkZXYpCj4g K3sKPiArCXN0cnVjdCBhY3g1NjVha21fcGFuZWwgKmxjZCA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2 LT5kZXYpOwo+ICsJaW50IHJldDsKPiArCj4gKwltdXRleF9sb2NrKCZsY2QtPm11dGV4KTsKPiAr CXJldCA9IGFjeDU2NWFrbV9ibF91cGRhdGVfc3RhdHVzX2xvY2tlZChkZXYpOwo+ICsJbXV0ZXhf dW5sb2NrKCZsY2QtPm11dGV4KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGFjeDU2NWFrbV9ibF9nZXRfaW50ZW5zaXR5KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNl ICpkZXYpCj4gK3sKPiArCXN0cnVjdCBhY3g1NjVha21fcGFuZWwgKmxjZCA9IGRldl9nZXRfZHJ2 ZGF0YSgmZGV2LT5kZXYpOwo+ICsJdW5zaWduZWQgaW50IGludGVuc2l0eTsKPiArCj4gKwltdXRl eF9sb2NrKCZsY2QtPm11dGV4KTsKPiArCj4gKwlpZiAoZGV2LT5wcm9wcy5mYl9ibGFuayA9PSBG Ql9CTEFOS19VTkJMQU5LICYmCj4gKwkgICAgZGV2LT5wcm9wcy5wb3dlciA9PSBGQl9CTEFOS19V TkJMQU5LKQo+ICsJCWludGVuc2l0eSA9IGFjeDU2NWFrbV9nZXRfYWN0dWFsX2JyaWdodG5lc3Mo bGNkKTsKPiArCWVsc2UKPiArCQlpbnRlbnNpdHkgPSAwOwo+ICsKPiArCW11dGV4X3VubG9jaygm bGNkLT5tdXRleCk7Cj4gKwo+ICsJcmV0dXJuIGludGVuc2l0eTsKPiArfQo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGFjeDU2NWFrbV9ibF9vcHMgPSB7Cj4gKwkuZ2V0 X2JyaWdodG5lc3MgPSBhY3g1NjVha21fYmxfZ2V0X2ludGVuc2l0eSwKPiArCS51cGRhdGVfc3Rh dHVzICA9IGFjeDU2NWFrbV9ibF91cGRhdGVfc3RhdHVzLAo+ICt9Owo+ICsKPiArc3RhdGljIGlu dCBhY3g1NjVha21fYmFja2xpZ2h0X2luaXQoc3RydWN0IGFjeDU2NWFrbV9wYW5lbCAqbGNkKQo+ ICt7Cj4gKwlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgcHJvcHMgPSB7Cj4gKwkJLmZiX2Js YW5rID0gRkJfQkxBTktfVU5CTEFOSywKPiArCQkucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LLAo+ ICsJCS50eXBlID0gQkFDS0xJR0hUX1JBVywKPiArCX07Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWxj ZC0+YmFja2xpZ2h0ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihsY2QtPm5hbWUsICZsY2Qt PnNwaS0+ZGV2LAo+ICsJCQkJCQkgICBsY2QsICZhY3g1NjVha21fYmxfb3BzLAo+ICsJCQkJCQkg ICAmcHJvcHMpOwo+ICsJaWYgKElTX0VSUihsY2QtPmJhY2tsaWdodCkpIHsKPiArCQlyZXQgPSBQ VFJfRVJSKGxjZC0+YmFja2xpZ2h0KTsKPiArCQlsY2QtPmJhY2tsaWdodCA9IE5VTEw7Cj4gKwkJ cmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlpZiAobGNkLT5oYXNfY2FiYykgewo+ICsJCXJldCA9 IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbGNkLT5iYWNrbGlnaHQtPmRldi5rb2JqLAo+ICsJCQkJCSAm YWN4NTY1YWttX2NhYmNfYXR0cl9ncm91cCk7Cj4gKwkJaWYgKHJldCA8IDApIHsKPiArCQkJZGV2 X2VycigmbGNkLT5zcGktPmRldiwKPiArCQkJCSIlcyBmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGZp bGVzXG4iLCBfX2Z1bmNfXyk7Cj4gKwkJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihsY2Qt PmJhY2tsaWdodCk7Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsKPiArCQlsY2QtPmNhYmNf bW9kZSA9IGFjeDU2NWFrbV9nZXRfaHdfY2FiY19tb2RlKGxjZCk7Cj4gKwl9Cj4gKwo+ICsJbGNk LT5iYWNrbGlnaHQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gMjU1Owo+ICsJbGNkLT5iYWNrbGln aHQtPnByb3BzLmJyaWdodG5lc3MgPSBhY3g1NjVha21fZ2V0X2FjdHVhbF9icmlnaHRuZXNzKGxj ZCk7Cj4gKwo+ICsJYWN4NTY1YWttX2JsX3VwZGF0ZV9zdGF0dXNfbG9ja2VkKGxjZC0+YmFja2xp Z2h0KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYWN4NTY1YWtt X2JhY2tsaWdodF9jbGVhbnVwKHN0cnVjdCBhY3g1NjVha21fcGFuZWwgKmxjZCkKPiArewo+ICsJ aWYgKGxjZC0+aGFzX2NhYmMpCj4gKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZsY2QtPmJhY2tsaWdo dC0+ZGV2LmtvYmosCj4gKwkJCQkgICAmYWN4NTY1YWttX2NhYmNfYXR0cl9ncm91cCk7Cj4gKwo+ ICsJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGxjZC0+YmFja2xpZ2h0KTsKPiArfQo+ICsK PiArLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiArICogRFJNIEJyaWRnZSBPcGVyYXRpb25zCj4g KyAqLwo+ICsKPiArc3RhdGljIHZvaWQgYWN4NTY1YWttX3NldF9zbGVlcF9tb2RlKHN0cnVjdCBh Y3g1NjVha21fcGFuZWwgKmxjZCwgaW50IG9uKQo+ICt7Cj4gKwlpbnQgY21kID0gb24gPyBNSVBJ X0RDU19FTlRFUl9TTEVFUF9NT0RFIDogTUlQSV9EQ1NfRVhJVF9TTEVFUF9NT0RFOwo+ICsJdW5z aWduZWQgbG9uZyB3YWl0Owo+ICsKPiArCS8qCj4gKwkgKiBXZSBoYXZlIHRvIGtlZXAgMTIwbXNl YyBiZXR3ZWVuIHNsZWVwIGluL291dCBjb21tYW5kcy4KPiArCSAqICg4LjIuMTUsIDguMi4xNiku Cj4gKwkgKi8KPiArCXdhaXQgPSBsY2QtPmh3X2d1YXJkX2VuZCAtIGppZmZpZXM7Cj4gKwlpZiAo KGxvbmcpd2FpdCA+IDAgJiYgd2FpdCA8PSBsY2QtPmh3X2d1YXJkX3dhaXQpIHsKPiArCQlzZXRf Y3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Cj4gKwkJc2NoZWR1bGVfdGltZW91 dCh3YWl0KTsKPiArCX0KPiArCj4gKwlhY3g1NjVha21fY21kKGxjZCwgY21kKTsKPiArCj4gKwls Y2QtPmh3X2d1YXJkX3dhaXQgPSBtc2Vjc190b19qaWZmaWVzKDEyMCk7Cj4gKwlsY2QtPmh3X2d1 YXJkX2VuZCA9IGppZmZpZXMgKyBsY2QtPmh3X2d1YXJkX3dhaXQ7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIGFjeDU2NWFrbV9zZXRfZGlzcGxheV9zdGF0ZShzdHJ1Y3QgYWN4NTY1YWttX3BhbmVs ICpsY2QsCj4gKwkJCQkJaW50IGVuYWJsZWQpCj4gK3sKPiArCWludCBjbWQgPSBlbmFibGVkID8g TUlQSV9EQ1NfU0VUX0RJU1BMQVlfT04gOiBNSVBJX0RDU19TRVRfRElTUExBWV9PRkY7Cj4gKwo+ ICsJYWN4NTY1YWttX2NtZChsY2QsIGNtZCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWN4NTY1 YWttX3Bvd2VyX29uKHN0cnVjdCBhY3g1NjVha21fcGFuZWwgKmxjZCkKPiArewo+ICsJLypGSVhN RSB0d2VhayBtZSAqLwo+ICsJbXNsZWVwKDUwKTsKPiArCj4gKwlncGlvZF9zZXRfdmFsdWUobGNk LT5yZXNldF9ncGlvLCAxKTsKPiArCj4gKwlpZiAobGNkLT5lbmFibGVkKSB7Cj4gKwkJZGV2X2Ri ZygmbGNkLT5zcGktPmRldiwgInBhbmVsIGFscmVhZHkgZW5hYmxlZFxuIik7Cj4gKwkJcmV0dXJu IDA7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIFdlIGhhdmUgdG8gbWVldCBhbGwgdGhlIGZvbGxv d2luZyBkZWxheSByZXF1aXJlbWVudHM6Cj4gKwkgKiAxLiB0Ulc6IHJlc2V0IHB1bHNlIHdpZHRo IDEwdXNlYyAoNy4xMi4xKQo+ICsJICogMi4gdFJUOiByZXNldCBjYW5jZWwgdGltZSA1bXNlYyAo Ny4xMi4xKQo+ICsJICogMy4gUHJvdmlkaW5nIFBDTEssSFMsVlMgc2lnbmFscyBmb3IgMiBmcmFt ZXMgPSB+NTBtc2VjIHdvcnN0Cj4gKwkgKiAgICBjYXNlICg3LjYuMikKPiArCSAqIDQuIDEyMG1z ZWMgYmVmb3JlIHRoZSBzbGVlcCBvdXQgY29tbWFuZCAoNy4xMi4xKQo+ICsJICovCj4gKwltc2xl ZXAoMTIwKTsKPiArCj4gKwlhY3g1NjVha21fc2V0X3NsZWVwX21vZGUobGNkLCAwKTsKPiArCWxj ZC0+ZW5hYmxlZCA9IHRydWU7Cj4gKwo+ICsJLyogNW1zZWMgYmV0d2VlbiBzbGVlcCBvdXQgYW5k IHRoZSBuZXh0IGNvbW1hbmQuICg4LjIuMTYpICovCj4gKwl1c2xlZXBfcmFuZ2UoNTAwMCwgMTAw MDApOwo+ICsJYWN4NTY1YWttX3NldF9kaXNwbGF5X3N0YXRlKGxjZCwgMSk7Cj4gKwlhY3g1NjVh a21fc2V0X2NhYmNfbW9kZShsY2QsIGxjZC0+Y2FiY19tb2RlKTsKPiArCj4gKwlyZXR1cm4gYWN4 NTY1YWttX2JsX3VwZGF0ZV9zdGF0dXNfbG9ja2VkKGxjZC0+YmFja2xpZ2h0KTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgYWN4NTY1YWttX3Bvd2VyX29mZihzdHJ1Y3QgYWN4NTY1YWttX3BhbmVs ICpsY2QpCj4gK3sKPiArCWlmICghbGNkLT5lbmFibGVkKQo+ICsJCXJldHVybjsKPiArCj4gKwlh Y3g1NjVha21fc2V0X2Rpc3BsYXlfc3RhdGUobGNkLCAwKTsKPiArCWFjeDU2NWFrbV9zZXRfc2xl ZXBfbW9kZShsY2QsIDEpOwo+ICsJbGNkLT5lbmFibGVkID0gZmFsc2U7Cj4gKwkvKgo+ICsJICog V2UgaGF2ZSB0byBwcm92aWRlIFBDTEssSFMsVlMgc2lnbmFscyBmb3IgMiBmcmFtZXMgKHdvcnN0 IGNhc2UKPiArCSAqIH41MG1zZWMpIGFmdGVyIHNlbmRpbmcgdGhlIHNsZWVwIGluIGNvbW1hbmQg YW5kIGFzc2VydGluZyB0aGUKPiArCSAqIHJlc2V0IHNpZ25hbC4gV2UgcHJvYmFibHkgY291bGQg YXNzZXJ0IHRoZSByZXNldCB3L28gdGhlIGRlbGF5Cj4gKwkgKiBidXQgd2Ugc3RpbGwgZGVsYXkg dG8gYXZvaWQgcG9zc2libGUgYXJ0aWZhY3RzLiAoNy42LjEpCj4gKwkgKi8KPiArCW1zbGVlcCg1 MCk7Cj4gKwo+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGxjZC0+cmVzZXRfZ3BpbywgMCk7Cj4gKwo+ICsJ LyogRklYTUUgbmVlZCB0byB0d2VhayB0aGlzIGRlbGF5ICovCj4gKwltc2xlZXAoMTAwKTsKPiAr fQo+ICsKPiArc3RhdGljIGludCBhY3g1NjVha21fZGlzYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpw YW5lbCkKPiArewo+ICsJc3RydWN0IGFjeDU2NWFrbV9wYW5lbCAqbGNkID0gdG9fYWN4NTY1YWtt X2RldmljZShwYW5lbCk7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmbGNkLT5tdXRleCk7Cj4gKwlhY3g1 NjVha21fcG93ZXJfb2ZmKGxjZCk7Cj4gKwltdXRleF91bmxvY2soJmxjZC0+bXV0ZXgpOwo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFjeDU2NWFrbV9lbmFibGUoc3Ry dWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiArCXN0cnVjdCBhY3g1NjVha21fcGFuZWwgKmxj ZCA9IHRvX2FjeDU2NWFrbV9kZXZpY2UocGFuZWwpOwo+ICsKPiArCW11dGV4X2xvY2soJmxjZC0+ bXV0ZXgpOwo+ICsJYWN4NTY1YWttX3Bvd2VyX29uKGxjZCk7Cj4gKwltdXRleF91bmxvY2soJmxj ZC0+bXV0ZXgpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgYWN4NTY1YWttX21vZGUgPSB7Cj4gKwkuY2xvY2sgPSAyNDAw MCwKPiArCS5oZGlzcGxheSA9IDgwMCwKPiArCS5oc3luY19zdGFydCA9IDgwMCArIDI4LAo+ICsJ LmhzeW5jX2VuZCA9IDgwMCArIDI4ICsgNCwKPiArCS5odG90YWwgPSA4MDAgKyAyOCArIDQgKyAy NCwKPiArCS52ZGlzcGxheSA9IDQ4MCwKPiArCS52c3luY19zdGFydCA9IDQ4MCArIDMsCj4gKwku dnN5bmNfZW5kID0gNDgwICsgMyArIDMsCj4gKwkudnRvdGFsID0gNDgwICsgMyArIDMgKyA0LAo+ ICsJLnZyZWZyZXNoID0gNTcsCj4gKwkudHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJN X01PREVfVFlQRV9QUkVGRVJSRUQsCj4gKwkuZmxhZ3MgPSBEUk1fTU9ERV9GTEFHX05IU1lOQyB8 IERSTV9NT0RFX0ZMQUdfTlZTWU5DLAo+ICsJLndpZHRoX21tID0gNzcsCj4gKwkuaGVpZ2h0X21t ID0gNDYsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGFjeDU2NWFrbV9nZXRfbW9kZXMoc3RydWN0 IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IgPSBwYW5lbC0+Y29ubmVjdG9yOwo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7 Cj4gKwo+ICsJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShwYW5lbC0+ZHJtLCAmYWN4NTY1YWtt X21vZGUpOwo+ICsJaWYgKCFtb2RlKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWRybV9t b2RlX3NldF9uYW1lKG1vZGUpOwo+ICsJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1v ZGUpOwo+ICsKPiArCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLndpZHRoX21tID0gYWN4NTY1YWtt X21vZGUud2lkdGhfbW07Cj4gKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZWlnaHRfbW0gPSBh Y3g1NjVha21fbW9kZS5oZWlnaHRfbW07Cj4gKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5idXNf ZmxhZ3MgPSBEUk1fQlVTX0ZMQUdfREVfSElHSAo+ICsJCQkJCSAgfCBEUk1fQlVTX0ZMQUdfU1lO Q19TQU1QTEVfUE9TRURHRQo+ICsJCQkJCSAgfCBEUk1fQlVTX0ZMQUdfUElYREFUQV9TQU1QTEVf TkVHRURHRTsKPiArCj4gKwlyZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fcGFuZWxfZnVuY3MgYWN4NTY1YWttX2Z1bmNzID0gewo+ICsJLmRpc2FibGUgPSBhY3g1 NjVha21fZGlzYWJsZSwKPiArCS5lbmFibGUgPSBhY3g1NjVha21fZW5hYmxlLAo+ICsJLmdldF9t b2RlcyA9IGFjeDU2NWFrbV9nZXRfbW9kZXMsCj4gK307Cj4gKwo+ICsvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQo+ICsgKiBQcm9iZSwgRGV0ZWN0IGFuZCBSZW1vdmUKPiArICovCj4gKwo+ICtzdGF0 aWMgaW50IGFjeDU2NWFrbV9kZXRlY3Qoc3RydWN0IGFjeDU2NWFrbV9wYW5lbCAqbGNkKQo+ICt7 Cj4gKwlfX2JlMzIgdmFsdWU7Cj4gKwl1MzIgc3RhdHVzOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ ICsJLyoKPiArCSAqIEFmdGVyIGJlaW5nIHRha2VuIG91dCBvZiByZXNldCB0aGUgcGFuZWwgbmVl ZHMgNW1zIGJlZm9yZSB0aGUgZmlyc3QKPiArCSAqIGNvbW1hbmQgY2FuIGJlIHNlbnQuCj4gKwkg Ki8KPiArCWdwaW9kX3NldF92YWx1ZShsY2QtPnJlc2V0X2dwaW8sIDEpOwo+ICsJdXNsZWVwX3Jh bmdlKDUwMDAsIDEwMDAwKTsKPiArCj4gKwlhY3g1NjVha21fcmVhZChsY2QsIE1JUElfRENTX0dF VF9ESVNQTEFZX1NUQVRVUywgKHU4ICopJnZhbHVlLCA0KTsKPiArCXN0YXR1cyA9IF9fYmUzMl90 b19jcHUodmFsdWUpOwo+ICsJbGNkLT5lbmFibGVkID0gKHN0YXR1cyAmICgxIDw8IDE3KSkgJiYg KHN0YXR1cyAmICgxIDw8IDEwKSk7Cj4gKwo+ICsJZGV2X2RiZygmbGNkLT5zcGktPmRldiwKPiAr CQkiTENEIHBhbmVsICVzIGJ5IGJvb3Rsb2FkZXIgKHN0YXR1cyAweCUwNHgpXG4iLAo+ICsJCWxj ZC0+ZW5hYmxlZCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCAiLCBzdGF0dXMpOwo+ICsKPiArCWFj eDU2NWFrbV9yZWFkKGxjZCwgTUlQSV9EQ1NfR0VUX0RJU1BMQVlfSUQsIGxjZC0+ZGlzcGxheV9p ZCwgMyk7Cj4gKwlkZXZfZGJnKCZsY2QtPnNwaS0+ZGV2LCAiTUlQSSBkaXNwbGF5IElEOiAlMDJ4 JTAyeCUwMnhcbiIsCj4gKwkJbGNkLT5kaXNwbGF5X2lkWzBdLCBsY2QtPmRpc3BsYXlfaWRbMV0s IGxjZC0+ZGlzcGxheV9pZFsyXSk7Cj4gKwo+ICsJc3dpdGNoIChsY2QtPmRpc3BsYXlfaWRbMF0p IHsKPiArCWNhc2UgMHgxMDoKPiArCQlsY2QtPm1vZGVsID0gTUlQSURfVkVSX0FDWDU2NUFLTTsK PiArCQlsY2QtPm5hbWUgPSAiYWN4NTY1YWttIjsKPiArCQlsY2QtPmhhc19iYyA9IDE7Cj4gKwkJ bGNkLT5oYXNfY2FiYyA9IDE7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDB4Mjk6Cj4gKwkJbGNkLT5t b2RlbCA9IE1JUElEX1ZFUl9MNEYwMDMxMTsKPiArCQlsY2QtPm5hbWUgPSAibDRmMDAzMTEiOwo+ ICsJCWJyZWFrOwo+ICsJY2FzZSAweDQ1Ogo+ICsJCWxjZC0+bW9kZWwgPSBNSVBJRF9WRVJfTFBI ODkyMzsKPiArCQlsY2QtPm5hbWUgPSAibHBoODkyMyI7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIDB4 ODM6Cj4gKwkJbGNkLT5tb2RlbCA9IE1JUElEX1ZFUl9MUzA0MVkzOwo+ICsJCWxjZC0+bmFtZSA9 ICJsczA0MXkzIjsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJbGNkLT5uYW1lID0gInVu a25vd24iOwo+ICsJCWRldl9lcnIoJmxjZC0+c3BpLT5kZXYsICJ1bmtub3duIGRpc3BsYXkgSURc biIpOwo+ICsJCXJldCA9IC1FTk9ERVY7Cj4gKwkJZ290byBkb25lOwo+ICsJfQo+ICsKPiArCWxj ZC0+cmV2aXNpb24gPSBsY2QtPmRpc3BsYXlfaWRbMV07Cj4gKwo+ICsJZGV2X2luZm8oJmxjZC0+ c3BpLT5kZXYsICIlcyByZXYgJTAyeCBwYW5lbCBkZXRlY3RlZFxuIiwKPiArCQkgbGNkLT5uYW1l LCBsY2QtPnJldmlzaW9uKTsKPiArCj4gK2RvbmU6Cj4gKwlpZiAoIWxjZC0+ZW5hYmxlZCkKPiAr CQlncGlvZF9zZXRfdmFsdWUobGNkLT5yZXNldF9ncGlvLCAwKTsKPiArCj4gKwlyZXR1cm4gcmV0 Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFjeDU2NWFrbV9wcm9iZShzdHJ1Y3Qgc3BpX2Rldmlj ZSAqc3BpKQo+ICt7Cj4gKwlzdHJ1Y3QgYWN4NTY1YWttX3BhbmVsICpsY2Q7Cj4gKwlpbnQgcmV0 Owo+ICsKPiArCWxjZCA9IGRldm1fa3phbGxvYygmc3BpLT5kZXYsIHNpemVvZigqbGNkKSwgR0ZQ X0tFUk5FTCk7Cj4gKwlpZiAobGNkID09IE5VTEwpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ ICsJc3BpX3NldF9kcnZkYXRhKHNwaSwgbGNkKTsKPiArCXNwaS0+bW9kZSA9IFNQSV9NT0RFXzM7 Cj4gKwo+ICsJbGNkLT5zcGkgPSBzcGk7Cj4gKwltdXRleF9pbml0KCZsY2QtPm11dGV4KTsKPiAr Cj4gKwlsY2QtPnJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dldCgmc3BpLT5kZXYsICJyZXNldCIs IEdQSU9EX09VVF9MT1cpOwo+ICsJaWYgKElTX0VSUihsY2QtPnJlc2V0X2dwaW8pKSB7Cj4gKwkJ ZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gZ2V0IHJlc2V0IEdQSU9cbiIpOwo+ICsJCXJl dHVybiBQVFJfRVJSKGxjZC0+cmVzZXRfZ3Bpbyk7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gYWN4NTY1 YWttX2RldGVjdChsY2QpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkZXZfZXJyKCZzcGktPmRl diwgInBhbmVsIGRldGVjdGlvbiBmYWlsZWRcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4g Kwo+ICsJaWYgKGxjZC0+aGFzX2JjKSB7Cj4gKwkJcmV0ID0gYWN4NTY1YWttX2JhY2tsaWdodF9p bml0KGxjZCk7Cj4gKwkJaWYgKHJldCA8IDApCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ ICsJZHJtX3BhbmVsX2luaXQoJmxjZC0+cGFuZWwpOwo+ICsJbGNkLT5wYW5lbC5kZXYgPSAmbGNk LT5zcGktPmRldjsKPiArCWxjZC0+cGFuZWwuZnVuY3MgPSAmYWN4NTY1YWttX2Z1bmNzOwo+ICsK PiArCXJldCA9IGRybV9wYW5lbF9hZGQoJmxjZC0+cGFuZWwpOwo+ICsJaWYgKHJldCA8IDApIHsK PiArCQlpZiAobGNkLT5oYXNfYmMpCj4gKwkJCWFjeDU2NWFrbV9iYWNrbGlnaHRfY2xlYW51cChs Y2QpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgYWN4NTY1YWttX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQo+ICt7 Cj4gKwlzdHJ1Y3QgYWN4NTY1YWttX3BhbmVsICpsY2QgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsK PiArCj4gKwlkcm1fcGFuZWxfcmVtb3ZlKCZsY2QtPnBhbmVsKTsKPiArCj4gKwlpZiAobGNkLT5o YXNfYmMpCj4gKwkJYWN4NTY1YWttX2JhY2tsaWdodF9jbGVhbnVwKGxjZCk7Cj4gKwo+ICsJZHJt X3BhbmVsX2Rpc2FibGUoJmxjZC0+cGFuZWwpOwo+ICsJZHJtX3BhbmVsX3VucHJlcGFyZSgmbGNk LT5wYW5lbCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIGFjeDU2NWFrbV9vZl9tYXRjaFtdID0gewo+ICsJeyAuY29tcGF0aWJs ZSA9ICJzb255LGFjeDU2NWFrbSIsIH0sCj4gKwl7IC8qIHNlbnRpbmVsICovIH0sCj4gK307Cj4g Kwo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhY3g1NjVha21fb2ZfbWF0Y2gpOwo+ICsKPiAr c3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGFjeDU2NWFrbV9kcml2ZXIgPSB7Cj4gKwkucHJvYmUJ CT0gYWN4NTY1YWttX3Byb2JlLAo+ICsJLnJlbW92ZQkJPSBhY3g1NjVha21fcmVtb3ZlLAo+ICsJ LmRyaXZlcgkJPSB7Cj4gKwkJLm5hbWUJPSAicGFuZWwtc29ueS1hY3g1NjVha20iLAo+ICsJCS5v Zl9tYXRjaF90YWJsZSA9IGFjeDU2NWFrbV9vZl9tYXRjaCwKPiArCX0sCj4gK307Cj4gKwo+ICtt b2R1bGVfc3BpX2RyaXZlcihhY3g1NjVha21fZHJpdmVyKTsKPiArCj4gK01PRFVMRV9BTElBUygi c3BpOnNvbnksYWN4NTY1YWttIik7Cj4gK01PRFVMRV9BVVRIT1IoIk5va2lhIENvcnBvcmF0aW9u Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiU29ueSBBQ1g1NjVBS00gTENEIFBhbmVsIERyaXZl ciIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gLS0gCj4gUmVnYXJkcywKPiAKPiBMYXVy ZW50IFBpbmNoYXJ0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZl bA==