From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephan Gerhold Subject: Re: [PATCH 2/2 v6] drm/panel: Add driver for Sony ACX424AKP panel Date: Wed, 20 Nov 2019 12:52:47 +0100 Message-ID: <20191120115247.GA52650@gerhold.net> References: <20191114131525.3988-1-linus.walleij@linaro.org> <20191114131525.3988-2-linus.walleij@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mo6-p00-ob.smtp.rzone.de (mo6-p00-ob.smtp.rzone.de [IPv6:2a01:238:20a:202:5300::10]) by gabe.freedesktop.org (Postfix) with ESMTPS id 062816E358 for ; Wed, 20 Nov 2019 11:53:00 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20191114131525.3988-2-linus.walleij@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Linus Walleij Cc: Thierry Reding , Sam Ravnborg , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBOb3YgMTQsIDIwMTkgYXQgMDI6MTU6MjVQTSArMDEwMCwgTGludXMgV2FsbGVpaiB3 cm90ZToKPiBUaGUgU29ueSBBQ1g0MjRBS1AgaXMgYSBjb21tYW5kL3ZpZGVvbW9kZSBEU0kgcGFu ZWwgZm9yCj4gbW9iaWxlIGRldmljZXMuIEl0IGlzIHVzZWQgb24gdGhlIFNULUVyaWNzc29uIEhS RUY1MjAKPiByZWZlcmVuY2UgZGVzaWduLiBXZSBzdXBwb3J0IHZpZGVvIG1vZGUgYnkgZGVmYXVs dCwgYnV0Cj4gaXQgaXMgcG9zc2libGUgdG8gc3dpdGNoIHRoZSBwYW5lbCBpbnRvIGNvbW1hbmQg bW9kZQo+IGJ5IHVzaW5nIHRoZSBib29sIHByb3BlcnR5ICJkc2ktY29tbWFuZC1tb2RlIi4KPiAK PiBDYzogU3RlcGhhbiBHZXJob2xkIDxzdGVwaGFuQGdlcmhvbGQubmV0Pgo+IFNpZ25lZC1vZmYt Ynk6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAbGluYXJvLm9yZz4KPiAtLS0KPiBDaGFu Z2VMb2cgdjQtPnY1Ogo+IC0gQmluZGluZ3Mgd2VyZSBpdGVyYXRlZCBzZXBhcmF0ZWx5IHNvIGEg anVtcCBpbiB2ZXJzaW9uaW5nLgo+IC0gQWRkIFN0ZXBoYW4gYXMgcmV2aWV3ZXIuCj4gQ2hhbmdl TG9nIHYzLT52NDoKPiAtIE5vIGNoYW5nZXMganVzdCByZXNlbmRpbmcgd2l0aCB0aGUgbmV3IGJp bmRpbmcgdXBkYXRlcy4KPiBDaGFuZ2VMb2cgdjItPnYzOgo+IC0gTm8gY2hhbmdlcyBqdXN0IHJl c2VuZGluZyB3aXRoIHRoZSBuZXcgYmluZGluZyB1cGRhdGVzLgo+IENoYW5nZUxvZyB2MS0+djI6 Cj4gLSBGaXggdXAgdGhlIElEIHJlYWQgZnVuY3Rpb24gdG8gc3BsaXQgaW50byByZWFkaW5nIGhl YWRlciwKPiAgIHZlcnNpb24gYW5kIElELCBzdG9yZSB0aGUgdmVyc2lvbiBpbiB0aGUgc3RydWN0 Lgo+IC0gR2V0IHJpZCBvZiBhIHN1cnBsdXMgc2VtaWNvbG9uIGZvdW5kIGJ5IHRoZSBidWlsZCBy b2JvdAo+ICAgd2hpbGUgcmV3cml0aW5nIHRoZSBhYm92ZSBjb2RlLgo+IC0gVXNlIHVuc2lnbmVk IGludCBpbiBwcm9iZSgpIGxvb3AuCj4gLSBTZXQgdnJlZnJlc2ggdG8gNjBIeiwgYXMgZ29vZCBh cyBhbnksIHRoZSBtZWFzdXJlZCB2cmVmcmVzaAo+ICAgaW4gY29udGlub3VzIGNvbW1hbmQgbW9k ZSBpcyB+MTE3IEh6Lgo+IC0gVXNlIGEgZGlmZmVyZW50IGZvcigpIGlkaW9tIHdoaWxlIHJldHJ5 aW5nIHRvIHJlYWQgSUQKPiAgIDUgdGltZXMuCj4gLSBEcm9wIHRoZSBzeW5jIHB1bHNlIHNldHRp bmcsIHdlIGFyZSBub3QgdXNpbmcgdGhpcywgdGhpcwo+ICAgcGFuZWwgdXNlcyBhbiBldmVudC4K PiAtIFVzZSB0aGUgZ2VuZXJpYyAiZW5mb3JjZS12aWRlby1tb2RlIiBmb3IgdmlkZW8gbW9kZQo+ ICAgZW5mb3JjZW1lbnQuCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnICAg ICAgICAgICAgICAgIHwgICA3ICsKPiAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlICAg ICAgICAgICAgICAgfCAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtc29ueS1h Y3g0MjRha3AuYyB8IDU0MCArKysrKysrKysrKysrKysrKysrCj4gIGluY2x1ZGUvdmlkZW8vbWlw aV9kaXNwbGF5LmggICAgICAgICAgICAgICAgIHwgICAxICsKPiAgNCBmaWxlcyBjaGFuZ2VkLCA1 NDkgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Bh bmVsL3BhbmVsLXNvbnktYWN4NDI0YWtwLmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3BhbmVsL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwo+IGluZGV4 IGYxNTJiYzRlZWI1My4uOTU5ZGY1YmVhN2QyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKPiBA QCAtMzE2LDYgKzMxNiwxMyBAQCBjb25maWcgRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYKPiAg CSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFNpdHJv bml4Cj4gIAkgIFNUNzc4OVYgY29udHJvbGxlciBmb3IgMjQweDMyMCBMQ0QgcGFuZWxzCj4gIAo+ ICtjb25maWcgRFJNX1BBTkVMX1NPTllfQUNYNDI0QUtQCj4gKwl0cmlzdGF0ZSAiU29ueSBBQ1g0 MjRBS1AgRFNJIGNvbW1hbmQgbW9kZSBwYW5lbCIKPiArCWRlcGVuZHMgb24gT0YKPiArCWRlcGVu ZHMgb24gRFJNX01JUElfRFNJCj4gKwlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UK PiArCXNlbGVjdCBWSURFT01PREVfSEVMUEVSUwo+ICsKPiAgY29uZmlnIERSTV9QQU5FTF9TT05Z X0FDWDU2NUFLTQo+ICAJdHJpc3RhdGUgIlNvbnkgQUNYNTY1QUtNIHBhbmVsIgo+ICAJZGVwZW5k cyBvbiBHUElPTElCICYmIE9GICYmIFNQSQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v cGFuZWwvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKPiBpbmRleCBi NmNkMzlmZTBmMjAuLjBiNTE3OTNlM2I0MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v cGFuZWwvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKPiBA QCAtMzMsNiArMzMsNyBAQCBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NIQVJQX0xTMDM3VjdEVzAx KSArPSBwYW5lbC1zaGFycC1sczAzN3Y3ZHcwMS5vCj4gIG9iai0kKENPTkZJR19EUk1fUEFORUxf U0hBUlBfTFMwNDNUMUxFMDEpICs9IHBhbmVsLXNoYXJwLWxzMDQzdDFsZTAxLm8KPiAgb2JqLSQo Q09ORklHX0RSTV9QQU5FTF9TSVRST05JWF9TVDc3MDEpICs9IHBhbmVsLXNpdHJvbml4LXN0Nzcw MS5vCj4gIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0lUUk9OSVhfU1Q3Nzg5VikgKz0gcGFuZWwt c2l0cm9uaXgtc3Q3Nzg5di5vCj4gK29iai0kKENPTkZJR19EUk1fUEFORUxfU09OWV9BQ1g0MjRB S1ApICs9IHBhbmVsLXNvbnktYWN4NDI0YWtwLm8KPiAgb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9T T05ZX0FDWDU2NUFLTSkgKz0gcGFuZWwtc29ueS1hY3g1NjVha20ubwo+ICBvYmotJChDT05GSUdf RFJNX1BBTkVMX1RQT19URDAyOFRURUMxKSArPSBwYW5lbC10cG8tdGQwMjh0dGVjMS5vCj4gIG9i ai0kKENPTkZJR19EUk1fUEFORUxfVFBPX1REMDQzTVRFQTEpICs9IHBhbmVsLXRwby10ZDA0M210 ZWExLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXNvbnktYWN4 NDI0YWtwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtc29ueS1hY3g0MjRha3AuYwo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4yMzgyYjYwOGI2N2IK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXNvbnkt YWN4NDI0YWtwLmMKPiBAQCAtMCwwICsxLDU0MCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMCsKPiArLyoKPiArICogTUlQSS1EU0kgU29ueSBBQ1g0MjRBS1AgcGFuZWwg ZHJpdmVyLiBUaGlzIGlzIGEgNDgweDg2NAo+ICsgKiBBTU9MRUQgcGFuZWwgd2l0aCBhIGNvbW1h bmQtb25seSBEU0kgaW50ZXJmYWNlLgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIExpbmFybyBM dGQuIDIwMTkKPiArICogQXV0aG9yOiBMaW51cyBXYWxsZWlqCj4gKyAqIEJhc2VkIG9uIGNvZGUg YW5kIGtub3ctaG93IGZyb20gTWFyY3VzIExvcmVudHpvbgo+ICsgKiBDb3B5cmlnaHQgKEMpIFNU LUVyaWNzc29uIFNBIDIwMTAKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybV9tb2Rlcy5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9w YW5lbC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcmludC5oPgo+ICsjaW5jbHVkZSA8dmlkZW8v bWlwaV9kaXNwbGF5Lmg+Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgo+ ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9kZWxheS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+Cj4gKwo+ICsjZGVmaW5lIEFD WDQyNF9EQ1NfUkVBRF9JRDEJCTB4REEKPiArI2RlZmluZSBBQ1g0MjRfRENTX1JFQURfSUQyCQkw eERCCj4gKyNkZWZpbmUgQUNYNDI0X0RDU19SRUFEX0lEMwkJMHhEQwo+ICsKPiArI2RlZmluZSBE SVNQTEFZX1NPTllfQUNYNDI0QUtQX0lEMQkweDgxMWIKPiArI2RlZmluZSBESVNQTEFZX1NPTllf QUNYNDI0QUtQX0lEMgkweDgxMWEKPiArI2RlZmluZSBESVNQTEFZX1NPTllfQUNYNDI0QUtQX0lE MwkweDgwMDAKPiArCj4gK3N0cnVjdCBhY3g0MjRha3Agewo+ICsJc3RydWN0IGRldmljZSAqZGV2 Owo+ICsJc3RydWN0IGRybV9wYW5lbCBwYW5lbDsKPiArCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNl ICpibDsKPiArCXN0cnVjdCByZWd1bGF0b3IgKnN1cHBseTsKPiArCXN0cnVjdCBncGlvX2Rlc2Mg KnJlc2V0X2dwaW87Cj4gKwl1OCB2ZXJzaW9uOwo+ICsJYm9vbCB2aWRlb19tb2RlOwo+ICt9Owo+ ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIHNvbnlfYWN4NDI0YWtw X3ZpZF9tb2RlID0gewo+ICsJLmNsb2NrID0gMzMwMDAwLAo+ICsJLmhkaXNwbGF5ID0gNDgwLAo+ ICsJLmhzeW5jX3N0YXJ0ID0gNDgwICsgMTUsCj4gKwkuaHN5bmNfZW5kID0gNDgwICsgMTUgKyAw LAo+ICsJLmh0b3RhbCA9IDQ4MCArIDE1ICsgMCArIDE1LAo+ICsJLnZkaXNwbGF5ID0gODY0LAo+ ICsJLnZzeW5jX3N0YXJ0ID0gODY0ICsgMTQsCj4gKwkudnN5bmNfZW5kID0gODY0ICsgMTQgKyAx LAo+ICsJLnZ0b3RhbCA9IDg2NCArIDE0ICsgMSArIDExLAo+ICsJLnZyZWZyZXNoID0gNjAsCj4g Kwkud2lkdGhfbW0gPSA0OCwKPiArCS5oZWlnaHRfbW0gPSA4NCwKPiArCS5mbGFncyA9IERSTV9N T0RFX0ZMQUdfUFZTWU5DLAo+ICt9Owo+ICsKPiArLyoKPiArICogVGhlIHRpbWluZ3MgYXJlIG5v dCB2ZXJ5IGhlbHBmdWwgYXMgdGhlIGRpc3BsYXkgaXMgdXNlZCBpbgo+ICsgKiBjb21tYW5kIG1v ZGUgdXNpbmcgdGhlIG1heGltdW0gSFMgZnJlcXVlbmN5Lgo+ICsgKi8KPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIHNvbnlfYWN4NDI0YWtwX2NtZF9tb2RlID0gewo+ICsJ LmNsb2NrID0gNDIwMTYwLAo+ICsJLmhkaXNwbGF5ID0gNDgwLAo+ICsJLmhzeW5jX3N0YXJ0ID0g NDgwICsgMTU0LAo+ICsJLmhzeW5jX2VuZCA9IDQ4MCArIDE1NCArIDE2LAo+ICsJLmh0b3RhbCA9 IDQ4MCArIDE1NCArIDE2ICsgMzIsCj4gKwkudmRpc3BsYXkgPSA4NjQsCj4gKwkudnN5bmNfc3Rh cnQgPSA4NjQgKyAxLAo+ICsJLnZzeW5jX2VuZCA9IDg2NCArIDEgKyAxLAo+ICsJLnZ0b3RhbCA9 IDg2NCArIDEgKyAxICsgMSwKPiArCS8qCj4gKwkgKiBTb21lIGRlc2lyZWQgcmVmcmVzaCByYXRl LCBleHBlcmltZW50cyBhdCB0aGUgbWF4aW11bSAicGl4ZWwiCj4gKwkgKiBjbG9jayBzcGVlZCAo SFMgY2xvY2sgNDIwIE1IeikgeWllbGRzIGFyb3VuZCAxMTdIei4KPiArCSAqLwo+ICsJLnZyZWZy ZXNoID0gNjAsCj4gKwkud2lkdGhfbW0gPSA0OCwKPiArCS5oZWlnaHRfbW0gPSA4NCwKPiArfTsK PiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFjeDQyNGFrcCAqcGFuZWxfdG9fYWN4NDI0YWtw KHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKHBh bmVsLCBzdHJ1Y3QgYWN4NDI0YWtwLCBwYW5lbCk7Cj4gK30KPiArCj4gKyNkZWZpbmUgRk9TQwkJ CTIwIC8qIDIwTWh6ICovCj4gKyNkZWZpbmUgU0NBTEVfRkFDVE9SX05TX0RJVl9NSFoJMTAwMAo+ ICsKPiArc3RhdGljIGludCBhY3g0MjRha3Bfc2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdo dF9kZXZpY2UgKmJsKQo+ICt7Cj4gKwlzdHJ1Y3QgYWN4NDI0YWtwICphY3ggPSBibF9nZXRfZGF0 YShibCk7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZp Y2UoYWN4LT5kZXYpOwo+ICsJaW50IHBlcmlvZF9ucyA9IDEwMjM7Cj4gKwlpbnQgZHV0eV9ucyA9 IGJsLT5wcm9wcy5icmlnaHRuZXNzOwo+ICsJdTggcHdtX3JhdGlvOwo+ICsJdTggcHdtX2RpdjsK PiArCXU4IHBhcjsKPiArCWludCByZXQ7Cj4gKwo+ICsJLyogQ2FsY3VsYXRlIHRoZSBQV00gZHV0 eSBjeWNsZSBpbiBuLzI1NidzICovCj4gKwlwd21fcmF0aW8gPSBtYXgoKChkdXR5X25zICogMjU2 KSAvIHBlcmlvZF9ucykgLSAxLCAxKTsKPiArCXB3bV9kaXYgPSBtYXgoMSwKPiArCQkgICAgICAo KEZPU0MgKiBwZXJpb2RfbnMpIC8gMjU2KSAvCj4gKwkJICAgICAgU0NBTEVfRkFDVE9SX05TX0RJ Vl9NSFopOwoKRG9lcyB0aGlzIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBicmlnaHRuZXNzID0gMCAo dXN1YWxseSBkaXNwbGF5IG9mZik/CgpJIGhhdmUgYWxzbyBvZnRlbiBzZWVuIGNvZGUgbGlrZQoK CWlmIChibC0+cHJvcHMucG93ZXIgIT0gRkJfQkxBTktfVU5CTEFOSyB8fAoJICAgIGJsLT5wcm9w cy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LIHx8CgkgICAgYmwtPnByb3BzLnN0YXRlICYg KEJMX0NPUkVfU1VTUEVOREVEIHwgQkxfQ09SRV9GQkJMQU5LKSkKCQlicmlnaHRuZXNzID0gMDsK CnRvIGhhbmRsZSB0aGUgYmxhbmtpbmcgc3RhdGVzLiBOb3Qgc3VyZS4KCj4gKwo+ICsJLyogU2V0 IHVwIFBXTSBkdXR5Y3ljbGUgT05FIGJ5dGUgKGRpZmZlcnMgZnJvbSB0aGUgc3RhbmRhcmQpICov Cj4gKwlEUk1fREVWX0RFQlVHKGFjeC0+ZGV2LCAiY2FsY3VsYXRlZCBkdXR5IGN5Y2xlICUwMnhc biIsIHB3bV9yYXRpbyk7Cj4gKwlyZXQgPSBtaXBpX2RzaV9kY3Nfd3JpdGUoZHNpLCBNSVBJX0RD U19TRVRfRElTUExBWV9CUklHSFRORVNTLAo+ICsJCQkJICZwd21fcmF0aW8sIDEpOwo+ICsJaWYg KHJldCA8IDApIHsKPiArCQlEUk1fREVWX0VSUk9SKGFjeC0+ZGV2LAo+ICsJCQkgICAgICAiZmFp bGVkIHRvIHNldCBkaXNwbGF5IFBXTSByYXRpbyAoJWQpXG4iLAo+ICsJCQkgICAgICByZXQpOwo+ ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIFNlcXVlbmNlIHRvIHdyaXRl IFBXTURJVjoKPiArCSAqCWFkZHJlc3MJCWRhdGEKPiArCSAqCTB4RjMJCTB4QUEgICBDTUQyIFVu bG9jawo+ICsJICoJMHgwMAkJMHgwMSAgIEVudGVyIENNRDIgcGFnZSAwCj4gKwkgKgkwWDdECQkw eDAxICAgTm8gcmVsb2FkIE1UUCBvZiBDTUQyIFAxCj4gKwkgKgkweDIyCQlQV01ESVYKPiArCSAq CTB4N0YJCTB4QUEgICBDTUQyIHBhZ2UgMSBsb2NrCj4gKwkgKi8KPiArCXBhciA9IDB4YWE7Cj4g KwlyZXQgPSBtaXBpX2RzaV9kY3Nfd3JpdGUoZHNpLCAweGYzLCAmcGFyLCAxKTsKPiArCWlmIChy ZXQgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihhY3gtPmRldiwKPiArCQkJICAgICAgImZhaWxl ZCB0byB1bmxvY2sgQ01EIDIgKCVkKVxuIiwKPiArCQkJICAgICAgcmV0KTsKPiArCQlyZXR1cm4g cmV0Owo+ICsJfQo+ICsJcGFyID0gMHgwMTsKPiArCXJldCA9IG1pcGlfZHNpX2Rjc193cml0ZShk c2ksIDB4MDAsICZwYXIsIDEpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlEUk1fREVWX0VSUk9S KGFjeC0+ZGV2LAo+ICsJCQkgICAgICAiZmFpbGVkIHRvIGVudGVyIHBhZ2UgMSAoJWQpXG4iLAo+ ICsJCQkgICAgICByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwlwYXIgPSAweDAxOwo+ ICsJcmV0ID0gbWlwaV9kc2lfZGNzX3dyaXRlKGRzaSwgMHg3ZCwgJnBhciwgMSk7Cj4gKwlpZiAo cmV0IDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoYWN4LT5kZXYsCj4gKwkJCSAgICAgICJmYWls ZWQgdG8gZGlzYWJsZSBNVFAgcmVsb2FkICglZClcbiIsCj4gKwkJCSAgICAgIHJldCk7Cj4gKwkJ cmV0dXJuIHJldDsKPiArCX0KPiArCXJldCA9IG1pcGlfZHNpX2Rjc193cml0ZShkc2ksIDB4MjIs ICZwd21fZGl2LCAxKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihhY3gt PmRldiwKPiArCQkJICAgICAgImZhaWxlZCB0byBzZXQgUFdNIGRpdmlzb3IgKCVkKVxuIiwKPiAr CQkJICAgICAgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsJcGFyID0gMHhhYTsKPiAr CXJldCA9IG1pcGlfZHNpX2Rjc193cml0ZShkc2ksIDB4N2YsICZwYXIsIDEpOwo+ICsJaWYgKHJl dCA8IDApIHsKPiArCQlEUk1fREVWX0VSUk9SKGFjeC0+ZGV2LAo+ICsJCQkgICAgICAiZmFpbGVk IHRvIGxvY2sgQ01EIDIgKCVkKVxuIiwKPiArCQkJICAgICAgcmV0KTsKPiArCQlyZXR1cm4gcmV0 Owo+ICsJfQo+ICsKPiArCS8qIEVuYWJsZSBiYWNrbGlnaHQgKi8KPiArCXBhciA9IDB4MjQ7Cj4g KwlyZXQgPSBtaXBpX2RzaV9kY3Nfd3JpdGUoZHNpLCBNSVBJX0RDU19XUklURV9DT05UUk9MX0RJ U1BMQVksCj4gKwkJCQkgJnBhciwgMSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9ERVZf RVJST1IoYWN4LT5kZXYsCj4gKwkJCSAgICAgICJmYWlsZWQgdG8gZW5hYmxlIGRpc3BsYXkgYmFj a2xpZ2h0ICglZClcbiIsCj4gKwkJCSAgICAgIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0K PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGln aHRfb3BzIGFjeDQyNGFrcF9ibF9vcHMgPSB7Cj4gKwkudXBkYXRlX3N0YXR1cyA9IGFjeDQyNGFr cF9zZXRfYnJpZ2h0bmVzcywKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgYWN4NDI0YWtwX3JlYWRf aWQoc3RydWN0IGFjeDQyNGFrcCAqYWN4KQo+ICt7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNl ICpkc2kgPSB0b19taXBpX2RzaV9kZXZpY2UoYWN4LT5kZXYpOwo+ICsJdTggaGVhZGVyLCB2ZXJz aW9uLCBpZDsKPiArCXUxNiB2YWw7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IG1pcGlfZHNp X2Rjc19yZWFkKGRzaSwgQUNYNDI0X0RDU19SRUFEX0lEMSwgJmhlYWRlciwgMSk7Cj4gKwlpZiAo cmV0IDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoYWN4LT5kZXYsICJjb3VsZCBub3QgcmVhZCBJ RCBoZWFkZXIgYnl0ZVxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCXJldCA9IG1pcGlf ZHNpX2Rjc19yZWFkKGRzaSwgQUNYNDI0X0RDU19SRUFEX0lEMiwgJmlkLCAxKTsKPiArCWlmIChy ZXQgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihhY3gtPmRldiwgImNvdWxkIG5vdCByZWFkIGRl dmljZSBJRCBieXRlXG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsJcmV0ID0gbWlwaV9k c2lfZGNzX3JlYWQoZHNpLCBBQ1g0MjRfRENTX1JFQURfSUQzLCAmdmVyc2lvbiwgMSk7Cj4gKwlp ZiAocmV0IDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoYWN4LT5kZXYsICJjb3VsZCBub3QgcmVh ZCB2ZXJzaW9uIGJ5dGVcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKGhl YWRlciA9PSAweDAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihhY3gtPmRldiwgImRldmljZSBJRCBo ZWFkZXIgaXMgemVyb1xuIik7Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJdmFs ID0gKGlkIDw8IDgpIHwgdmVyc2lvbjsKPiArCXN3aXRjaCAodmFsKSB7Cj4gKwljYXNlIERJU1BM QVlfU09OWV9BQ1g0MjRBS1BfSUQxOgo+ICsJY2FzZSBESVNQTEFZX1NPTllfQUNYNDI0QUtQX0lE MjoKPiArCWNhc2UgRElTUExBWV9TT05ZX0FDWDQyNEFLUF9JRDM6Cj4gKwkJRFJNX0RFVl9JTkZP KGFjeC0+ZGV2LCAicGFuZWwgSUQgJTAyeCwgdmVyc2lvbjogJTAyeFxuIiwKPiArCQkJICAgICBp ZCwgdmVyc2lvbik7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCURSTV9ERVZfSU5GTyhh Y3gtPmRldiwgInVua25vd24gcGFuZWwgSUQgJTAyeCwgdmVyc2lvbjogJTAyeFxuIiwKPiArCQkJ ICAgICBpZCwgdmVyc2lvbik7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwlhY3gtPnZlcnNpb24gPSB2 ZXJzaW9uOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFjeDQyNGFr cF9wb3dlcl9vbihzdHJ1Y3QgYWN4NDI0YWtwICphY3gpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ ICsJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShhY3gtPnN1cHBseSk7Cj4gKwlpZiAocmV0KSB7Cj4g KwkJRFJNX0RFVl9FUlJPUihhY3gtPmRldiwgImZhaWxlZCB0byBlbmFibGUgc3VwcGx5ICglZClc biIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwkvKiBBc3NlcnQgUkVTRVQg Ki8KPiArCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChhY3gtPnJlc2V0X2dwaW8sIDEpOwo+ICsJ dWRlbGF5KDIwKTsKPiArCS8qIERlLWFzc2VydCBSRVNFVCAqLwo+ICsJZ3Bpb2Rfc2V0X3ZhbHVl X2NhbnNsZWVwKGFjeC0+cmVzZXRfZ3BpbywgMCk7Cj4gKwltc2xlZXAoMTEpOwo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFjeDQyNGFrcF9wcmVwYXJlKHN0cnVjdCBk cm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgYWN4NDI0YWtwICphY3ggPSBwYW5lbF90 b19hY3g0MjRha3AocGFuZWwpOwo+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpID0gdG9f bWlwaV9kc2lfZGV2aWNlKGFjeC0+ZGV2KTsKPiArCWNvbnN0IHU4IG1kZGkgPSAzOwo+ICsJaW50 IHJldDsKPiArCj4gKwlyZXQgPSBhY3g0MjRha3BfcG93ZXJfb24oYWN4KTsKPiArCWlmIChyZXQp Cj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwkvKiBFbmFiZSB0ZWFyaW5nIG1vZGU6IHNlbmQgVEUg KHRlYXJpbmcgZWZmZWN0KSBhdCBWQkxBTksgKi8KPiArCXJldCA9IG1pcGlfZHNpX2Rjc19zZXRf dGVhcl9vbihkc2ksCj4gKwkJCQkgICAgICAgTUlQSV9EU0lfRENTX1RFQVJfTU9ERV9WQkxBTksp Owo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9ERVZfRVJST1IoYWN4LT5kZXYsICJmYWlsZWQgdG8g ZW5hYmxlIHZibGFuayBURSAoJWQpXG4iLAo+ICsJCQkgICAgICByZXQpOwo+ICsJCXJldHVybiBy ZXQ7Cj4gKwl9Cj4gKwo+ICsJLyogU2V0IE1EREkgKi8KPiArCXJldCA9IG1pcGlfZHNpX2Rjc193 cml0ZShkc2ksIE1JUElfRFNJX0RDU19TRVRfTURESSwKPiArCQkJCSAmbWRkaSwgc2l6ZW9mKG1k ZGkpKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihhY3gtPmRldiwgImZh aWxlZCB0byBzZXQgTURESSAoJWQpXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4g Kwo+ICsJLyogRXhpdCBzbGVlcCBtb2RlICovCj4gKwlyZXQgPSBtaXBpX2RzaV9kY3NfZXhpdF9z bGVlcF9tb2RlKGRzaSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihhY3gtPmRl diwgImZhaWxlZCB0byBleGl0IHNsZWVwIG1vZGUgKCVkKVxuIiwKPiArCQkJICAgICAgcmV0KTsK PiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsJbXNsZWVwKDE0MCk7Cj4gKwo+ICsJcmV0ID0gbWlw aV9kc2lfZGNzX3NldF9kaXNwbGF5X29uKGRzaSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RF Vl9FUlJPUihhY3gtPmRldiwgImZhaWxlZCB0byB0dXJuIGRpc3BsYXkgb24gKCVkKVxuIiwKPiAr CQkJICAgICAgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsJaWYgKGFjeC0+dmlkZW9f bW9kZSkgewo+ICsJCS8qIEluIHZpZGVvIG1vZGUgdHVybiBwZXJpcGhlcmFsIG9uICovCj4gKwkJ cmV0ID0gbWlwaV9kc2lfdHVybl9vbl9wZXJpcGhlcmFsKGRzaSk7Cj4gKwkJaWYgKHJldCkgewo+ ICsJCQlkZXZfZXJyKGFjeC0+ZGV2LCAiZmFpbGVkIHRvIHR1cm4gb24gcGVyaXBoZXJhbFxuIik7 Cj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWFjeC0+YmwtPnByb3BzLnBv d2VyID0gRkJfQkxBTktfTk9STUFMOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBhY3g0MjRha3BfcG93ZXJfb2ZmKHN0cnVjdCBhY3g0MjRha3AgKmFjeCkKPiArewo+ ICsJLyogQXNzZXJ0IFJFU0VUICovCj4gKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoYWN4LT5y ZXNldF9ncGlvLCAxKTsKPiArCW1zbGVlcCgxMSk7Cj4gKwo+ICsJcmVndWxhdG9yX2Rpc2FibGUo YWN4LT5zdXBwbHkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFjeDQyNGFrcF91bnByZXBhcmUo c3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiArCXN0cnVjdCBhY3g0MjRha3AgKmFjeCA9 IHBhbmVsX3RvX2FjeDQyNGFrcChwYW5lbCk7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpk c2kgPSB0b19taXBpX2RzaV9kZXZpY2UoYWN4LT5kZXYpOwo+ICsJdTggcGFyOwo+ICsJaW50IHJl dDsKPiArCj4gKwkvKiBEaXNhYmxlIGJhY2tsaWdodCAqLwo+ICsJcGFyID0gMHgwMDsKPiArCXJl dCA9IG1pcGlfZHNpX2Rjc193cml0ZShkc2ksIE1JUElfRENTX1dSSVRFX0NPTlRST0xfRElTUExB WSwKPiArCQkJCSAmcGFyLCAxKTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fREVWX0VSUk9SKGFj eC0+ZGV2LAo+ICsJCQkgICAgICAiZmFpbGVkIHRvIGRpc2FibGUgZGlzcGxheSBiYWNrbGlnaHQg KCVkKVxuIiwKPiArCQkJICAgICAgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiAr CXJldCA9IG1pcGlfZHNpX2Rjc19zZXRfZGlzcGxheV9vZmYoZHNpKTsKPiArCWlmIChyZXQpIHsK PiArCQlEUk1fREVWX0VSUk9SKGFjeC0+ZGV2LCAiZmFpbGVkIHRvIHR1cm4gZGlzcGxheSBvZmYg KCVkKVxuIiwKPiArCQkJICAgICAgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiAr CS8qIEVudGVyIHNsZWVwIG1vZGUgKi8KPiArCXJldCA9IG1pcGlfZHNpX2Rjc19lbnRlcl9zbGVl cF9tb2RlKGRzaSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihhY3gtPmRldiwg ImZhaWxlZCB0byBlbnRlciBzbGVlcCBtb2RlICglZClcbiIsCj4gKwkJCSAgICAgIHJldCk7Cj4g KwkJcmV0dXJuIHJldDsKPiArCX0KPiArCW1zbGVlcCg4NSk7Cj4gKwo+ICsJYWN4NDI0YWtwX3Bv d2VyX29mZihhY3gpOwo+ICsJYWN4LT5ibC0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19QT1dFUkRP V047Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWN4NDI0YWtwX2Vu YWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKPiArewo+ICsJc3RydWN0IGFjeDQyNGFrcCAq YWN4ID0gcGFuZWxfdG9fYWN4NDI0YWtwKHBhbmVsKTsKPiArCj4gKwlhY3gtPmJsLT5wcm9wcy5w b3dlciA9IEZCX0JMQU5LX1VOQkxBTks7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgYWN4NDI0YWtwX2Rpc2FibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sK PiArCXN0cnVjdCBhY3g0MjRha3AgKmFjeCA9IHBhbmVsX3RvX2FjeDQyNGFrcChwYW5lbCk7Cj4g Kwo+ICsJYWN4LT5ibC0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19OT1JNQUw7Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWN4NDI0YWtwX2dldF9tb2RlcyhzdHJ1Y3Qg ZHJtX3BhbmVsICpwYW5lbCkKPiArewo+ICsJc3RydWN0IGFjeDQyNGFrcCAqYWN4ID0gcGFuZWxf dG9fYWN4NDI0YWtwKHBhbmVsKTsKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ig PSBwYW5lbC0+Y29ubmVjdG9yOwo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4g Kwo+ICsJaWYgKGFjeC0+dmlkZW9fbW9kZSkKPiArCQltb2RlID0gZHJtX21vZGVfZHVwbGljYXRl KHBhbmVsLT5kcm0sCj4gKwkJCQkJICAmc29ueV9hY3g0MjRha3BfdmlkX21vZGUpOwo+ICsJZWxz ZQo+ICsJCW1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUocGFuZWwtPmRybSwKPiArCQkJCQkgICZz b255X2FjeDQyNGFrcF9jbWRfbW9kZSk7Cj4gKwlpZiAoIW1vZGUpIHsKPiArCQlEUk1fRVJST1Io ImJhZCBtb2RlIG9yIGZhaWxlZCB0byBhZGQgbW9kZVxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4gKwl9Cj4gKwlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKPiArCW1vZGUtPnR5cGUgPSBEUk1f TU9ERV9UWVBFX0RSSVZFUiB8IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOwo+ICsKPiArCWNvbm5l Y3Rvci0+ZGlzcGxheV9pbmZvLndpZHRoX21tID0gbW9kZS0+d2lkdGhfbW07Cj4gKwljb25uZWN0 b3ItPmRpc3BsYXlfaW5mby5oZWlnaHRfbW0gPSBtb2RlLT5oZWlnaHRfbW07Cj4gKwo+ICsJZHJt X21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOwo+ICsKPiArCXJldHVybiAxOyAvKiBO dW1iZXIgb2YgbW9kZXMgKi8KPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFu ZWxfZnVuY3MgYWN4NDI0YWtwX2RybV9mdW5jcyA9IHsKPiArCS5kaXNhYmxlID0gYWN4NDI0YWtw X2Rpc2FibGUsCj4gKwkudW5wcmVwYXJlID0gYWN4NDI0YWtwX3VucHJlcGFyZSwKPiArCS5wcmVw YXJlID0gYWN4NDI0YWtwX3ByZXBhcmUsCj4gKwkuZW5hYmxlID0gYWN4NDI0YWtwX2VuYWJsZSwK PiArCS5nZXRfbW9kZXMgPSBhY3g0MjRha3BfZ2V0X21vZGVzLAo+ICt9Owo+ICsKPiArc3RhdGlj IGludCBhY3g0MjRha3BfcHJvYmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQo+ICt7Cj4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHNpLT5kZXY7Cj4gKwlzdHJ1Y3QgYWN4NDI0YWtwICph Y3g7Cj4gKwlpbnQgcmV0Owo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwo+ICsJYWN4ID0gZGV2bV9r emFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCBhY3g0MjRha3ApLCBHRlBfS0VSTkVMKTsKPiArCWlm ICghYWN4KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJYWN4LT52aWRlb19tb2RlID0gb2ZfcHJv cGVydHlfcmVhZF9ib29sKGRldi0+b2Zfbm9kZSwKPiArCQkJCQkJImVuZm9yY2UtdmlkZW8tbW9k ZSIpOwo+ICsKPiArCW1pcGlfZHNpX3NldF9kcnZkYXRhKGRzaSwgYWN4KTsKPiArCWFjeC0+ZGV2 ID0gZGV2Owo+ICsKPiArCWRzaS0+bGFuZXMgPSAyOwo+ICsJZHNpLT5mb3JtYXQgPSBNSVBJX0RT SV9GTVRfUkdCODg4Owo+ICsJLyoKPiArCSAqIEZJWE1FOiB0aGVzZSBjb21lIGZyb20gdGhlIFNU LUVyaWNzc29uIHZlbmRvciBkcml2ZXIgZm9yIHRoZQo+ICsJICogSFJFRjUyMCBhbmQgc2VlbXMg dG8gcmVmbGVjdCBsaW1pdGF0aW9ucyBpbiB0aGUgUExMcyBvbiB0aGF0Cj4gKwkgKiBwbGF0Zm9y bSwgaWYgeW91IGhhdmUgdGhlIGRhdGFzaGVldCwgcGxlYXNlIGNyb3NzLWNoZWNrIHRoZQo+ICsJ ICogYWN0dWFsIG1heCByYXRlcy4KPiArCSAqLwo+ICsJZHNpLT5scF9yYXRlID0gMTkyMDAwMDA7 Cj4gKwlkc2ktPmhzX3JhdGUgPSA0MjAxNjAwMDA7Cj4gKwo+ICsJaWYgKGFjeC0+dmlkZW9fbW9k ZSkKPiArCQkvKiBCdXJzdCBtb2RlIHVzaW5nIGV2ZW50IGZvciBzeW5jICovCj4gKwkJZHNpLT5t b2RlX2ZsYWdzID0KPiArCQkJTUlQSV9EU0lfTU9ERV9WSURFTyB8Cj4gKwkJCU1JUElfRFNJX01P REVfVklERU9fQlVSU1Q7Cj4gKwllbHNlCj4gKwkJZHNpLT5tb2RlX2ZsYWdzID0KPiArCQkJTUlQ SV9EU0lfQ0xPQ0tfTk9OX0NPTlRJTlVPVVMgfAo+ICsJCQlNSVBJX0RTSV9NT0RFX0VPVF9QQUNL RVQ7Cj4gKwo+ICsJYWN4LT5zdXBwbHkgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAidmRkaSIp Owo+ICsJaWYgKElTX0VSUihhY3gtPnN1cHBseSkpCj4gKwkJcmV0dXJuIFBUUl9FUlIoYWN4LT5z dXBwbHkpOwo+ICsKPiArCS8qIFRoaXMgYXNzZXJ0cyBSRVNFVCBieSBkZWZhdWx0ICovCj4gKwlh Y3gtPnJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsICJyZXNldCIsCj4g KwkJCQkJCSBHUElPRF9PVVRfSElHSCk7Cj4gKwlpZiAoSVNfRVJSKGFjeC0+cmVzZXRfZ3Bpbykp IHsKPiArCQlyZXQgPSBQVFJfRVJSKGFjeC0+cmVzZXRfZ3Bpbyk7Cj4gKwkJaWYgKHJldCAhPSAt RVBST0JFX0RFRkVSKQo+ICsJCQlEUk1fREVWX0VSUk9SKGRldiwgImZhaWxlZCB0byByZXF1ZXN0 IEdQSU8gKCVkKVxuIiwKPiArCQkJCSAgICAgIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0K PiArCj4gKwlkcm1fcGFuZWxfaW5pdCgmYWN4LT5wYW5lbCk7Cj4gKwlhY3gtPnBhbmVsLmRldiA9 IGRldjsKPiArCWFjeC0+cGFuZWwuZnVuY3MgPSAmYWN4NDI0YWtwX2RybV9mdW5jczsKPiArCj4g KwlhY3gtPmJsID0gZGV2bV9iYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKGRldiwgImFjeDQyNGFr cCIsIGRldiwgYWN4LAo+ICsJCQkJCQkgJmFjeDQyNGFrcF9ibF9vcHMsIE5VTEwpOwo+ICsJaWYg KElTX0VSUihhY3gtPmJsKSkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiZmFpbGVkIHRvIHJl Z2lzdGVyIGJhY2tsaWdodCBkZXZpY2VcbiIpOwo+ICsJCXJldHVybiBQVFJfRVJSKGFjeC0+Ymwp Owo+ICsJfQo+ICsJYWN4LT5ibC0+cHJvcHMubWF4X2JyaWdodG5lc3MgPSAxMDIzOwo+ICsJYWN4 LT5ibC0+cHJvcHMuYnJpZ2h0bmVzcyA9IDUxMjsKPiArCWFjeC0+YmwtPnByb3BzLnBvd2VyID0g RkJfQkxBTktfUE9XRVJET1dOOwo+ICsKPiArCXJldCA9IGRybV9wYW5lbF9hZGQoJmFjeC0+cGFu ZWwpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQgPSBhY3g0 MjRha3BfcG93ZXJfb24oYWN4KTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fREVWX0VSUk9SKGRl diwgImZhaWxlZCB0byBwb3dlciB1cCBkaXNwbGF5XG4iKTsKPiArCQlnb3RvIG91dF9yZW1vdmU7 Cj4gKwl9Cj4gKwo+ICsJLyogVHJ5IDUgdGltZXMgdG8gcmVhZCB0aGUgZGV2aWNlIElEICovCj4g Kwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7Cj4gKwkJcmV0ID0gYWN4NDI0YWtwX3JlYWRfaWQo YWN4KTsKPiArCQlpZiAoIXJldCkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJldCkg ewo+ICsJCURSTV9ERVZfRVJST1IoYWN4LT5kZXYsICJmYWlsZWQgdG8gcmVhZCBwYW5lbCBJRCAo JWQpXG4iLCByZXQpOwo+ICsJCWdvdG8gb3V0X3Bvd2Vyb2ZmOwo+ICsJfQo+ICsJYWN4NDI0YWtw X3Bvd2VyX29mZihhY3gpOwo+ICsKPiArCXJldCA9IG1pcGlfZHNpX2F0dGFjaChkc2kpOwo+ICsJ aWYgKHJldCA8IDApCj4gKwkJZ290byBvdXRfcG93ZXJvZmY7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g Kwo+ICtvdXRfcG93ZXJvZmY6Cj4gKwlhY3g0MjRha3BfcG93ZXJfb2ZmKGFjeCk7Cj4gK291dF9y ZW1vdmU6Cj4gKwlkcm1fcGFuZWxfcmVtb3ZlKCZhY3gtPnBhbmVsKTsKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYWN4NDI0YWtwX3JlbW92ZShzdHJ1Y3QgbWlwaV9kc2lf ZGV2aWNlICpkc2kpCj4gK3sKPiArCXN0cnVjdCBhY3g0MjRha3AgKmFjeCA9IG1pcGlfZHNpX2dl dF9kcnZkYXRhKGRzaSk7Cj4gKwo+ICsJbWlwaV9kc2lfZGV0YWNoKGRzaSk7Cj4gKwlkcm1fcGFu ZWxfcmVtb3ZlKCZhY3gtPnBhbmVsKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWN4NDI0YWtwX29mX21hdGNoW10gPSB7Cj4g Kwl7IC5jb21wYXRpYmxlID0gInNvbnksYWN4NDI0YWtwIiB9LAo+ICsJeyB9Cj4gK307Cj4gK01P RFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFjeDQyNGFrcF9vZl9tYXRjaCk7Cj4gKwo+ICtzdGF0aWMg c3RydWN0IG1pcGlfZHNpX2RyaXZlciBhY3g0MjRha3BfZHJpdmVyID0gewo+ICsJLnByb2JlID0g YWN4NDI0YWtwX3Byb2JlLAo+ICsJLnJlbW92ZSA9IGFjeDQyNGFrcF9yZW1vdmUsCj4gKwkuZHJp dmVyID0gewo+ICsJCS5uYW1lID0gInBhbmVsLXNvbnktYWN4NDI0YWtwIiwKPiArCQkub2ZfbWF0 Y2hfdGFibGUgPSBhY3g0MjRha3Bfb2ZfbWF0Y2gsCj4gKwl9LAo+ICt9Owo+ICttb2R1bGVfbWlw aV9kc2lfZHJpdmVyKGFjeDQyNGFrcF9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigiTGlu dXMgV2FsbGVpIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+Iik7Cj4gK01PRFVMRV9ERVNDUklQ VElPTigiTUlQSS1EU0kgU29ueSBhY3g0MjRha3AgUGFuZWwgRHJpdmVyIik7Cj4gK01PRFVMRV9M SUNFTlNFKCJHUEwgdjIiKTsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9taXBpX2Rpc3Bs YXkuaCBiL2luY2x1ZGUvdmlkZW8vbWlwaV9kaXNwbGF5LmgKPiBpbmRleCBjYmE1N2E2NzhkYWYu LmNmOTljNmE1MTlkNSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL3ZpZGVvL21pcGlfZGlzcGxheS5o Cj4gKysrIGIvaW5jbHVkZS92aWRlby9taXBpX2Rpc3BsYXkuaAo+IEBAIC0xMjUsNiArMTI1LDcg QEAgZW51bSB7Cj4gIAlNSVBJX0RDU19HRVRfQ0FCQ19NSU5fQlJJR0hUTkVTUyA9IDB4NUYsCS8q IE1JUEkgRENTIDEuMyAqLwo+ICAJTUlQSV9EQ1NfUkVBRF9EREJfU1RBUlQJCT0gMHhBMSwKPiAg CU1JUElfRENTX1JFQURfRERCX0NPTlRJTlVFCT0gMHhBOCwKPiArCU1JUElfRFNJX0RDU19TRVRf TURESQkJPSAweEFFLAo+ICB9Owo+ICAKPiAgLyogTUlQSSBEQ1MgcGl4ZWwgZm9ybWF0cyAqLwo+ IC0tIAo+IDIuMjEuMAo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWw=