From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: Re: [DPU PATCH v2 1/2] drm/panel: Add Truly NT35597 panel Date: Thu, 19 Apr 2018 23:14:10 +0530 Message-ID: References: <1523690713-22543-1-git-send-email-abhinavk@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1523690713-22543-1-git-send-email-abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Abhinav Kumar , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: jeykumar-jfJNa2p1gH1BDgjK7y7TUQ@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, hoegsberg-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org SGksCgpPbiBTYXR1cmRheSAxNCBBcHJpbCAyMDE4IDEyOjU1IFBNLCBBYmhpbmF2IEt1bWFyIHdy b3RlOgo+IEZyb206IEFyY2hpdCBUYW5lamEgPGFyY2hpdHRAY29kZWF1cm9yYS5vcmc+CgpZb3Ug Y2FuIGRyb3AgRFBVIGZyb20gdGhlIHN1YmplY3QuIEFsc28sIHlvdSdkIG5lZWQgdG8gYWRkClRo ZWlycnkgUmVhZGluZyBmb3IgcGFuZWwgcmVsYXRlZCBwYXRjaGVzLCBhbmQgUm9iIEhlcnJpbmcK Zm9yIGFuIEFjayBvbiB0aGUgRFQgYmluZGluZ3MuCgpJIHRoaW5rIHlvdSBjYW4gY2hhbmdlIHRo ZSBhdXRob3IgdG8geW91cnNlbGYuIFlvdSd2ZSBoYWQgdG8KbWFrZSBwbGVudHkgb2YgY2hhbmdl cyB0byBnZXQgdGhpcyBpbiB1cHN0cmVhbSBzdGF0ZS4gWW91CmNhbiBrZWVwIG15IFNpZ25lZC1v ZmYtYnksIHRob3VnaC4KCj4gCj4gQWRkIHN1cHBvcnQgZm9yIFRydWx5IE5UMzU1OTcgcGFuZWwg dXNlZAo+IGluIE1TTSByZWZlcmVuY2UgcGxhdGZvcm1zLgoKWW91IGNhbiBtZW50aW9uIGhlcmUg dGhhdCB0aGUgcGFuZWwgc3VwcG9ydHMgYm90aCBzaW5nbGUKYW5kIGR1YWwgRFNJIG1vZGVzLCBh bmQgdGhhdCB3ZSBzdXBwb3J0IG9ubHkgZHVhbC1EU0kKbW9kZSBmb3Igbm93LgoKPiAKPiBDaGFu Z2VzIGluIHYyOgo+IC0gUmVuYW1lZCBwYW5lbCB0byB0cnVseSxudDM1NTk3Cj4gLSBBZGRlZCBT UERYIGxpY2Vuc2UKPiAtIFVzZWQgZW5kcG9pbnRzIGluc3RlYWQgb2YgY3VzdG9tIG5vZGUKPiAt IFJlbmFtZWQgYW5kIGNsZWFuZWQgdXAgcG93ZXIgc3VwcGxpZXMKPiAKPiBTaWduZWQtb2ZmLWJ5 OiBBcmNoaXQgVGFuZWphIDxhcmNoaXR0QGNvZGVhdXJvcmEub3JnPgo+IFNpZ25lZC1vZmYtYnk6 IEFiaGluYXYgS3VtYXIgPGFiaGluYXZrQGNvZGVhdXJvcmEub3JnPgo+IC0tLQo+ICAgLi4uL2Rl dmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90cnVseSxudDM1NTk3LnR4dCAgfCAgNDcgKysKPiAg IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgIHwgICA3 ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAg IHwgICAxICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1udDM1NTk3LmMg ICAgICAgIHwgNTk3ICsrKysrKysrKysrKysrKysrKysrKwo+ICAgNCBmaWxlcyBjaGFuZ2VkLCA2 NTIgaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZGV2 aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RydWx5LG50MzU1OTcudHh0Cj4gICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LW50MzU1OTcuYwo+IAo+ IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS90 cnVseSxudDM1NTk3LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNw bGF5L3RydWx5LG50MzU1OTcudHh0Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwLi4yMmI2ZjE5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNl dHJlZS9iaW5kaW5ncy9kaXNwbGF5L3RydWx5LG50MzU1OTcudHh0Cj4gQEAgLTAsMCArMSw0NyBA QAo+ICtUcnVseSBtb2RlbCBOVDM1NTk3IDE0NDB4MjU2MCBEU0kgUGFuZWwKPiArCj4gK1JlcXVp cmVkIHByb3BlcnRpZXM6Cj4gKy0gY29tcGF0aWJsZTogc2hvdWxkIGJlICJ0cnVseSxudDM1NTk3 Igo+ICstIHZkZGEtc3VwcGx5OiBwaGFuZGxlIG9mIHRoZSByZWd1bGF0b3IgdGhhdCBwcm92aWRl cyB0aGUgc3VwcGx5IHZvbHRhZ2UKPiArICBQb3dlciBJQyBzdXBwbHkKPiArLSB2ZGlzcHAtc3Vw cGx5OiBwaGFuZGxlIG9mIHRoZSByZWd1bGF0b3IgdGhhdCBwcm92aWRlcyB0aGUgc3VwcGx5IHZv bHRhZ2UKPiArICBmb3IgcG9zaXRpdmUgTENEIGJpYXMKPiArLSB2ZGlzcG4tc3VwcGx5OiBwaGFu ZGxlIG9mIHRoZSByZWd1bGF0b3IgdGhhdCBwcm92aWRlcyB0aGUgc3VwcGx5IHZvbHRhZ2UKPiAr ICBmb3IgbmVnYXRpdmUgTENEIGJpYXMKPiArLSByZXNldC1ncGlvczogcGhhbmRsZSBvZiBncGlv IGZvciByZXNldCBsaW5lCj4gKyAgVGhpcyBzaG91bGQgYmUgOG1BLCBncGlvIGNhbiBiZSBjb25m aWd1cmVkIHVzaW5nIG11eCwgcGluY3RybCwgcGluY3RybC1uYW1lcwo+ICstIG1vZGUtZ3Bpb3M6 IHBoYW5kbGUgb2YgdGhlIGdwaW8gZm9yIGNob29zaW5nIHRoZSBtb2RlIG9mIHRoZSBkaXNwbGF5 Cj4gKyAgZm9yIHNpbmdsZSBEU0kgb3IgRHVhbCBEU0kKPiArICBUaGlzIHNob3VsZCBiZSBsb3cg Zm9yIGR1YWwgRFNJIGFuZCBoaWdoIGZvciBzaW5nbGUgRFNJIG1vZGUKPiArLSBkaXNwbGF5LXRp bWluZ3M6IE5vZGUgZm9yIHRoZSBQYW5lbCB0aW1pbmdzCj4gKwoKWW91IG5lZWQgdG8gc3BlY2lm eSB0aGUgb2YtZ3JhcGggYmluZGluZ3MgaGVyZS4gRXNwZWNpYWxseSwgd2hhdCBwb3J0ICMKY29y cmVzcG9uZHMgdG8gbWFzdGVyIERTSSwgYW5kIHdoYXQgIyBmb3Igc2xhdmUgRFNJLgoKPiArRXhh bXBsZToKPiArCj4gKwlkc2lAYWU5NDAwMCB7Cj4gKwkJcGFuZWxAMCB7Cj4gKwkJCWNvbXBhdGli bGUgPSAidHJ1bHksbnQzNTU5NyI7Cj4gKwkJCXJlZyA9IDwwPjsKPiArCQkJdmRkYS1zdXBwbHkg PSA8JnBtODk5OF9sMTQ+Owo+ICsJCQl2ZGlzcHAtc3VwcGx5ID0gPCZsYWJfcmVndWxhdG9yPjsK PiArCQkJdmRpc3BuLXN1cHBseSA9IDwmaWJiX3JlZ3VsYXRvcj47Cj4gKwkJCXBpbmN0cmwtbmFt ZXMgPSAiZGVmYXVsdCIsICJzdXNwZW5kIjsKPiArCQkJcGluY3RybC0wID0gPCZzZGVfZHNpX2Fj dGl2ZT47Cj4gKwkJCXBpbmN0cmwtMSA9IDwmc2RlX2RzaV9zdXNwZW5kPjsKPiArCj4gKwkJCXJl c2V0LWdwaW9zID0gPCZ0bG1tIDYgMD47Cj4gKwkJCW1vZGUtZ3Bpb3MgPSA8JnRsbW0gNTIgMD47 Cj4gKwkJCWRpc3BsYXktdGltaW5ncyB7Cj4gKwkJCQl0aW1pbmcwOiB0aW1pbmctMCB7Cj4gKwkJ CQkJY2xvY2stZnJlcXVlbmN5ID0gPDI2ODMxNjEzOD47Cj4gKwkJCQkJaGFjdGl2ZSA9IDwxNDQw PjsKPiArCQkJCQl2YWN0aWUgPSA8MjU2MD47Cj4gKwkJCQkJaGZyb250LXBvcmNoID0gPDIwMD47 Cj4gKwkJCQkJaGJhY2stcG9yY2ggPSA8NjQ+Owo+ICsJCQkJCWhzeW5jLWxlbiA9IDwzMj47Cj4g KwkJCQkJdmZyb250LXBvcmNoID0gPDg+Owo+ICsJCQkJCXZiYWNrLXBvcmNoID0gPDc+Owo+ICsJ CQkJCXZzeW5jLWxlbiA9IDwxPjsKPiArCQkJCX07Cj4gKwkJCX07Cj4gKwkJfTsKClRoZSBleGFt cGxlIHNob3VsZCBzcGVjaWZ5IHRoZSBwb3J0IHRvby4KCj4gKwl9Owo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29u ZmlnCj4gaW5kZXggOTg4MDQ4ZS4uOWYwYzQ5MCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vcGFuZWwvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCj4g QEAgLTE2OCw0ICsxNjgsMTEgQEAgY29uZmlnIERSTV9QQU5FTF9TSVRST05JWF9TVDc3ODlWCj4g ICAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgU2l0 cm9uaXgKPiAgIAkgIFNUNzc4OVYgY29udHJvbGxlciBmb3IgMjQweDMyMCBMQ0QgcGFuZWxzCj4g ICAKPiArY29uZmlnIERSTV9QQU5FTF9UUlVMWV9OVDM1NTk3X1dRWEdBCj4gKwl0cmlzdGF0ZSAi VHJ1bHkgV1FYR0EiCj4gKwlkZXBlbmRzIG9uIE9GCj4gKwlkZXBlbmRzIG9uIERSTV9NSVBJX0RT SQo+ICsJaGVscAo+ICsJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0 IGZvciBUcnVseSBOVDM1NTk3IFdRWEdBIER1YWwgRFNJCj4gKwkgIFZpZGVvIE1vZGUgcGFuZWwK PiAgIGVuZG1lbnUKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxl IGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCj4gaW5kZXggM2QyYTg4ZC4uYjViNGI2 MCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKPiBAQCAtMTcsMyArMTcsNCBAQCBvYmotJChD T05GSUdfRFJNX1BBTkVMX1NFSUtPXzQzV1ZGMUcpICs9IHBhbmVsLXNlaWtvLTQzd3ZmMWcubwo+ ICAgb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUTEwMVIxU1gwMSkgKz0gcGFuZWwtc2hh cnAtbHExMDFyMXN4MDEubwo+ICAgb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUzA0M1Qx TEUwMSkgKz0gcGFuZWwtc2hhcnAtbHMwNDN0MWxlMDEubwo+ICAgb2JqLSQoQ09ORklHX0RSTV9Q QU5FTF9TSVRST05JWF9TVDc3ODlWKSArPSBwYW5lbC1zaXRyb25peC1zdDc3ODl2Lm8KPiArb2Jq LSQoQ09ORklHX0RSTV9QQU5FTF9UUlVMWV9OVDM1NTk3X1dRWEdBKSArPSBwYW5lbC10cnVseS1u dDM1NTk3Lm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5 LW50MzU1OTcuYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1udDM1NTk3LmMK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjViZDVmZGMKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LW50MzU1OTcu Ywo+IEBAIC0wLDAgKzEsNTk3IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wCj4gKy8qIENvcHlyaWdodCAoYykgMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAo+ ICsgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICov Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvb2ZfZ3JhcGguaD4KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgo+ ICsjaW5jbHVkZSA8bGludXgvcGluY3RybC9jb25zdW1lci5oPgo+ICsKPiArI2luY2x1ZGUgPHZp ZGVvL21pcGlfZGlzcGxheS5oPgo+ICsjaW5jbHVkZSA8dmlkZW8vb2ZfdmlkZW9tb2RlLmg+Cj4g KyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9taXBp X2RzaS5oPgo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByZWd1bGF0b3JfbmFtZXNb XSA9IHsKPiArCSJ2ZGRhIiwKPiArCSJ2ZGlzcHAiLAo+ICsJInZkaXNwbiIKPiArfTsKPiArCj4g K3N0YXRpYyB1bnNpZ25lZCBsb25nIHJlZ3VsYXRvcl9lbmFibGVfbG9hZHNbXSA9IHsKPiArCTYy MDAwLAo+ICsJMTAwMDAwLAo+ICsJMTAwMDAwfTsKCmNvZGluZyBzdHlsZSBuaXQ6IHRoZSBjbG9z aW5nIGJyYWNrZXQgc2hvdWxkIGNvbWUgb24gdGhlIG5leHQgbGluZS4KPiArCj4gK3N0YXRpYyB1 bnNpZ25lZCBsb25nIHJlZ3VsYXRvcl9kaXNhYmxlX2xvYWRzW10gPSB7Cj4gKwk4MCwKPiArCTEw MCwKPiArCTEwMH07Cj4gKwoKU2FtZSBoZXJlLgoKPiArc3RydWN0IHRydWx5X3dxeGdhIHsKPiAr CXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCXN0cnVjdCBkcm1fcGFuZWwgcGFuZWw7Cj4gKwo+ICsJ c3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbQVJSQVlfU0laRShyZWd1bGF0b3Jf bmFtZXMpXTsKPiArCj4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvOwo+ICsJc3RydWN0 IGdwaW9fZGVzYyAqbW9kZV9ncGlvOwo+ICsKPiArCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpi YWNrbGlnaHQ7Cj4gKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOwo+ICsKPiArCXN0cnVjdCBtaXBpX2Rz aV9kZXZpY2UgKmRzaVsyXTsKPiArCj4gKwlib29sIHByZXBhcmVkOwo+ICsJYm9vbCBlbmFibGVk Owo+ICt9Owo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKnBhbmVsX3Rv X3RydWx5X3dxeGdhKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlyZXR1cm4gY29u dGFpbmVyX29mKHBhbmVsLCBzdHJ1Y3QgdHJ1bHlfd3F4Z2EsIHBhbmVsKTsKPiArfQo+ICsKPiAr c3RhdGljIGludCB0cnVseV93cXhnYV9wb3dlcl9vbihzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCkK PiArewo+ICsJaW50IHJldCwgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShj dHgtPnN1cHBsaWVzKTsgaSsrKSB7Cj4gKwkJcmV0ID0gcmVndWxhdG9yX3NldF9sb2FkKGN0eC0+ c3VwcGxpZXNbaV0uY29uc3VtZXIsCj4gKwkJCQlyZWd1bGF0b3JfZW5hYmxlX2xvYWRzW2ldKTsK CmNvZGluZyBzdHlsZSBuaXQ6IHRoZSBmdW5jIGFyZ3VtZW50IHNob3VsZCBiZSBhbGlnbmVkIHdp dGggdGhlIG9wZW5pbmcKcGFyZW50aGVzaXMuCgo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiBy ZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUo Y3R4LT5zdXBwbGllcyksIGN0eC0+c3VwcGxpZXMpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0 dXJuIHJldDsKPiArCj4gKwltc2xlZXAoMjApOwo+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVz ZXRfZ3BpbywgMSk7Cj4gKwl1c2xlZXBfcmFuZ2UoMjAwMDAsIDIwMTAwKTsKPiArCWdwaW9kX3Nl dF92YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDApOwo+ICsJdXNsZWVwX3JhbmdlKDIwMDAwLCAyMDEw MCk7Cj4gKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAxKTsKPiArCXVzbGVlcF9y YW5nZSg1MDAwMCwgNTAxMDApOwoKQWNjb3JpZG5nIHRvIERvY3VtZW50YXRpb24vdGltZXJzL3Rp bWVycy1ob3d0by50eHQsIHlvdSdyZSBzdXBwb3NlZCB0bwp1c2UgbXNsZWVwIGlmIHRoZSBkZWxh eXMgYXJlID49IDIwIG1zLgoKPiArCj4gKwkvKiBkdWFsIHBvcnQgKi8KPiArCWdwaW9kX3NldF92 YWx1ZShjdHgtPm1vZGVfZ3BpbywgMCk7CgpNYXliZSB3ZSBjYW4gc2V0IHRoaXMganVzdCBvbmNl IGR1cmluZyBwcm9iZSwgc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydApzaW5nbGUgY2hhbm5lbCBEU0k/ Cgo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRydWx5X3dxeGdhX3Bv d2VyX29mZihzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCkKPiArewo+ICsJaW50IHJldCwgaTsKPiAr Cj4gKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAwKTsKPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKTsgaSsrKSB7Cj4gKwkJcmV0ID0gcmVn dWxhdG9yX3NldF9sb2FkKGN0eC0+c3VwcGxpZXNbaV0uY29uc3VtZXIsCj4gKwkJCQlyZWd1bGF0 b3JfZGlzYWJsZV9sb2Fkc1tpXSk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiAr CX0KPiArCj4gKwlyZXR1cm4gcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGN0eC0+ c3VwcGxpZXMpLCBjdHgtPnN1cHBsaWVzKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB0cnVseV93 cXhnYV9kaXNhYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgdHJ1 bHlfd3F4Z2EgKmN0eCA9IHBhbmVsX3RvX3RydWx5X3dxeGdhKHBhbmVsKTsKPiArCj4gKwlpZiAo IWN0eC0+ZW5hYmxlZCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoY3R4LT5iYWNrbGlnaHQp IHsKPiArCQljdHgtPmJhY2tsaWdodC0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19QT1dFUkRPV047 Cj4gKwkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoY3R4LT5iYWNrbGlnaHQpOwo+ICsJfQo+ICsK PiArCWN0eC0+ZW5hYmxlZCA9IGZhbHNlOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgdHJ1bHlfd3F4Z2FfdW5wcmVwYXJlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7 Cj4gKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IHBhbmVsX3RvX3RydWx5X3dxeGdhKHBhbmVs KTsKPiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKipkc2lzID0gY3R4LT5kc2k7Cj4gKwlpbnQg cmV0ID0gMCwgaTsKPiArCj4gKwlpZiAoIWN0eC0+cHJlcGFyZWQpCj4gKwkJcmV0dXJuIDA7Cj4g Kwo+ICsJZHNpc1swXS0+bW9kZV9mbGFncyA9IDA7Cj4gKwlkc2lzWzFdLT5tb2RlX2ZsYWdzID0g MDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQo+ICsJCWlmIChtaXBpX2RzaV9kY3Nf c2V0X2Rpc3BsYXlfb2ZmKGRzaXNbaV0pIDwgMCkKPiArCQkJcmV0ID0gLUVDT01NOwo+ICsJbXNs ZWVwKDc4KTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQo+ICsJCWlmIChtaXBpX2Rz aV9kY3NfZW50ZXJfc2xlZXBfbW9kZShkc2lzW2ldKSA8IDApCj4gKwkJCXJldCA9IC1FQ09NTTsK PiArCW1zbGVlcCg3OCk7CgpDb3VsZCB5b3UgY3Jvc3MgY2hlY2sgaWYgd2UgbmVlZCB0aGVzZSBz bGVlcHMgZm9yIHVucHJlcGFyZSB0b28/Cgo+ICsKPiArCXRydWx5X3dxeGdhX3Bvd2VyX29mZihj dHgpOwo+ICsKPiArCWN0eC0+cHJlcGFyZWQgPSBmYWxzZTsKPiArCXJldHVybiByZXQ7Cj4gK30K PiArCj4gKyNkZWZpbmUgTUFYX0xFTgk1Cj4gK3N0cnVjdCB7Cj4gKwl1OCBjb21tYW5kc1tNQVhf TEVOXTsKPiArCWludCBzaXplOwo+ICt9IHBhbmVsX2NtZHNbXSA9IHsgLyogQ01EMl9QMCAqLwo+ ICsJCSAgIHsgeyAweGZmLCAweDIwIH0sIDIgfSwKPiArCQkgICB7IHsgMHhmYiwgMHgwMSB9LCAy IH0sCj4gKwkJICAgeyB7IDB4MDAsIDB4MDEgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDAxLCAweDU1 IH0sIDIgfSwKPiArCQkgICB7IHsgMHgwMiwgMHg0NSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MDUs IDB4NDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDA2LCAweDE5IH0sIDIgfSwKPiArCQkgICB7IHsg MHgwNywgMHgxZSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MGIsIDB4NzMgfSwgMiB9LAo+ICsJCSAg IHsgeyAweDBjLCAweDczIH0sIDIgfSwKPiArCQkgICB7IHsgMHgwZSwgMHhiMCB9LCAyIH0sCj4g KwkJICAgeyB7IDB4MGYsIDB4YWUgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDExLCAweGI4IH0sIDIg fSwKPiArCQkgICB7IHsgMHgxMywgMHgwMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NTgsIDB4ODAg fSwgMiB9LAo+ICsJCSAgIHsgeyAweDU5LCAweDAxIH0sIDIgfSwKPiArCQkgICB7IHsgMHg1YSwg MHgwMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NWIsIDB4MDEgfSwgMiB9LAo+ICsJCSAgIHsgeyAw eDVjLCAweDgwIH0sIDIgfSwKPiArCQkgICB7IHsgMHg1ZCwgMHg4MSB9LCAyIH0sCj4gKwkJICAg eyB7IDB4NWUsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDVmLCAweDAxIH0sIDIgfSwKPiAr CQkgICB7IHsgMHg3MiwgMHgxMSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NjgsIDB4MDMgfSwgMiB9 LAo+ICsJCSAgIC8qIENNRDJfUDQgKi8KPiArCQkgICB7IHsgMHhGRiwgMHgyNCB9LCAyIH0sCj4g KwkJICAgeyB7IDB4RkIsIDB4MDEgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDAwLCAweDFDIH0sIDIg fSwKPiArCQkgICB7IHsgMHgwMSwgMHgwQiB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MDIsIDB4MEMg fSwgMiB9LAo+ICsJCSAgIHsgeyAweDAzLCAweDAxIH0sIDIgfSwKPiArCQkgICB7IHsgMHgwNCwg MHgwRiB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MDUsIDB4MTAgfSwgMiB9LAo+ICsJCSAgIHsgeyAw eDA2LCAweDEwIH0sIDIgfSwKPiArCQkgICB7IHsgMHgwNywgMHgxMCB9LCAyIH0sCj4gKwkJICAg eyB7IDB4MDgsIDB4ODkgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDA5LCAweDhBIH0sIDIgfSwKPiAr CQkgICB7IHsgMHgwQSwgMHgxMyB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MEIsIDB4MTMgfSwgMiB9 LAo+ICsJCSAgIHsgeyAweDBDLCAweDE1IH0sIDIgfSwKPiArCQkgICB7IHsgMHgwRCwgMHgxNSB9 LCAyIH0sCj4gKwkJICAgeyB7IDB4MEUsIDB4MTcgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDBGLCAw eDE3IH0sIDIgfSwKPiArCQkgICB7IHsgMHgxMCwgMHgxQyB9LCAyIH0sCj4gKwkJICAgeyB7IDB4 MTEsIDB4MEIgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDEyLCAweDBDIH0sIDIgfSwKPiArCQkgICB7 IHsgMHgxMywgMHgwMSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MTQsIDB4MEYgfSwgMiB9LAo+ICsJ CSAgIHsgeyAweDE1LCAweDEwIH0sIDIgfSwKPiArCQkgICB7IHsgMHgxNiwgMHgxMCB9LCAyIH0s Cj4gKwkJICAgeyB7IDB4MTcsIDB4MTAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDE4LCAweDg5IH0s IDIgfSwKPiArCQkgICB7IHsgMHgxOSwgMHg4QSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MUEsIDB4 MTMgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDFCLCAweDEzIH0sIDIgfSwKPiArCQkgICB7IHsgMHgx QywgMHgxNSB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MUQsIDB4MTUgfSwgMiB9LAo+ICsJCSAgIHsg eyAweDFFLCAweDE3IH0sIDIgfSwKPiArCQkgICB7IHsgMHgxRiwgMHgxNyB9LCAyIH0sCj4gKwkJ ICAgLyogU1RWICovCj4gKwkJICAgeyB7IDB4MjAsIDB4NDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAw eDIxLCAweDAxIH0sIDIgfSwKPiArCQkgICB7IHsgMHgyMiwgMHgwMCB9LCAyIH0sCj4gKwkJICAg eyB7IDB4MjMsIDB4NDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDI0LCAweDQwIH0sIDIgfSwKPiAr CQkgICB7IHsgMHgyNSwgMHg2RCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4MjYsIDB4NDAgfSwgMiB9 LAo+ICsJCSAgIHsgeyAweDI3LCAweDQwIH0sIDIgfSwKPiArCQkgICAvKiBWZW5kICovCj4gKwkJ ICAgeyB7IDB4RTAsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweERDLCAweDIxIH0sIDIgfSwK PiArCQkgICB7IHsgMHhERCwgMHgyMiB9LCAyIH0sCj4gKwkJICAgeyB7IDB4REUsIDB4MDcgfSwg MiB9LAo+ICsJCSAgIHsgeyAweERGLCAweDA3IH0sIDIgfSwKPiArCQkgICB7IHsgMHhFMywgMHg2 RCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4RTEsIDB4MDcgfSwgMiB9LAo+ICsJCSAgIHsgeyAweEUy LCAweDA3IH0sIDIgfSwKPiArCQkgICAvKiBVRCAqLwo+ICsJCSAgIHsgeyAweDI5LCAweEQ4IH0s IDIgfSwKPiArCQkgICB7IHsgMHgyQSwgMHgyQSB9LCAyIH0sCj4gKwkJICAgLyogQ0xLICovCj4g KwkJICAgeyB7IDB4NEIsIDB4MDMgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDRDLCAweDExIH0sIDIg fSwKPiArCQkgICB7IHsgMHg0RCwgMHgxMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NEUsIDB4MDEg fSwgMiB9LAo+ICsJCSAgIHsgeyAweDRGLCAweDAxIH0sIDIgfSwKPiArCQkgICB7IHsgMHg1MCwg MHgxMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NTEsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAw eDUyLCAweDgwIH0sIDIgfSwKPiArCQkgICB7IHsgMHg1MywgMHgwMCB9LCAyIH0sCj4gKwkJICAg eyB7IDB4NTYsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDU0LCAweDA3IH0sIDIgfSwKPiAr CQkgICB7IHsgMHg1OCwgMHgwNyB9LCAyIH0sCj4gKwkJICAgeyB7IDB4NTUsIDB4MjUgfSwgMiB9 LAo+ICsJCSAgIC8qIFJlc2V0IFhET05CICovCj4gKwkJICAgeyB7IDB4NUIsIDB4NDMgfSwgMiB9 LAo+ICsJCSAgIHsgeyAweDVDLCAweDAwIH0sIDIgfSwKPiArCQkgICB7IHsgMHg1RiwgMHg3MyB9 LCAyIH0sCj4gKwkJICAgeyB7IDB4NjAsIDB4NzMgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDYzLCAw eDIyIH0sIDIgfSwKPiArCQkgICB7IHsgMHg2NCwgMHgwMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4 NjcsIDB4MDggfSwgMiB9LAo+ICsJCSAgIHsgeyAweDY4LCAweDA0IH0sIDIgfSwKPiArCQkgICAv KiBSZXNvbHV0aW9uOjE0NDB4MjU2MCAqLwo+ICsJCSAgIHsgeyAweDcyLCAweDAyIH0sIDIgfSwK PiArCQkgICAvKiBtdXggKi8KPiArCQkgICB7IHsgMHg3QSwgMHg4MCB9LCAyIH0sCj4gKwkJICAg eyB7IDB4N0IsIDB4OTEgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDdDLCAweEQ4IH0sIDIgfSwKPiAr CQkgICB7IHsgMHg3RCwgMHg2MCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4N0YsIDB4MTUgfSwgMiB9 LAo+ICsJCSAgIHsgeyAweDc1LCAweDE1IH0sIDIgfSwKPiArCQkgICAvKiBBQk9GRiAqLwo+ICsJ CSAgIHsgeyAweEIzLCAweEMwIH0sIDIgfSwKPiArCQkgICB7IHsgMHhCNCwgMHgwMCB9LCAyIH0s Cj4gKwkJICAgeyB7IDB4QjUsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIC8qIFNvdXJjZSBFUSAqLwo+ ICsJCSAgIHsgeyAweDc4LCAweDAwIH0sIDIgfSwKPiArCQkgICB7IHsgMHg3OSwgMHgwMCB9LCAy IH0sCj4gKwkJICAgeyB7IDB4ODAsIDB4MDAgfSwgMiB9LAo+ICsJCSAgIHsgeyAweDgzLCAweDAw IH0sIDIgfSwKPiArCQkgICAvKiBGUCBCUCAqLwo+ICsJCSAgIHsgeyAweDkzLCAweDBBIH0sIDIg fSwKPiArCQkgICB7IHsgMHg5NCwgMHgwQSB9LCAyIH0sCj4gKwkJICAgLyogSW52ZXJzaW9uIFR5 cGUgKi8KPiArCQkgICB7IHsgMHg4QSwgMHgwMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4OUIsIDB4 RkYgfSwgMiB9LAo+ICsJCSAgIC8qIElNR1NXQVAgPTEgQFBvcnRTd2FwPTEgKi8KPiArCQkgICB7 IHsgMHg5RCwgMHhCMCB9LCAyIH0sCj4gKwkJICAgeyB7IDB4OUYsIDB4NjMgfSwgMiB9LAo+ICsJ CSAgIHsgeyAweDk4LCAweDEwIH0sIDIgfSwKPiArCQkgICAvKiBGUk0gKi8KPiArCQkgICB7IHsg MHhFQywgMHgwMCB9LCAyIH0sCj4gKwkJICAgLyogQ01EMSAqLwo+ICsJCSAgIHsgeyAweEZGLCAw eDEwIH0sIDIgfSwKPiArCQkgICAgLyogVkJQK1ZTQT0sVkZQID0gMTBIICovCj4gKwkJICAgeyB7 IDB4M0IsIDB4MDMsIDB4MEEsIDB4MEEsIH0sIDQgfSwKPiArCQkgICAvKiBGVEUgb24gKi8KPiAr CQkgICB7IHsgMHgzNSwgMHgwMCB9LCAyIH0sCj4gKwkJICAgLyogRU5fQksgPTEoYXV0byBibGFj aykgKi8KPiArCQkgICB7IHsgMHhFNSwgMHgwMSB9LCAyIH0sCj4gKwkJICAgLyogQ01EIG1vZGUo MTApIFZETyBtb2RlKDAzKSAqLwo+ICsJCSAgIHsgeyAweEJCLCAweDAzIH0sIDIgfSwKPiArCQkg ICAvKiBOb24gUmVsb2FkIE1UUCAqLwo+ICsJCSAgIHsgeyAweEZCLCAweDAxIH0sIDIgfSwKPiAr fTsKPiArCj4gK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVs ICpwYW5lbCkKPiArewo+ICsJc3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBwYW5lbF90b190cnVs eV93cXhnYShwYW5lbCk7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICoqZHNpcyA9IGN0eC0+ ZHNpOwo+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZDsKPiArCWludCByZXQsIGksIGo7Cj4g Kwo+ICsJaWYgKGN0eC0+cHJlcGFyZWQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0ID0gdHJ1 bHlfd3F4Z2FfcG93ZXJfb24oY3R4KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7 Cj4gKwo+ICsJZHNpc1swXS0+bW9kZV9mbGFncyB8PSBNSVBJX0RTSV9NT0RFX0xQTTsKPiArCWRz aXNbMV0tPm1vZGVfZmxhZ3MgfD0gTUlQSV9EU0lfTU9ERV9MUE07Cj4gKwo+ICsJZm9yIChqID0g MDsgaiA8IEFSUkFZX1NJWkUocGFuZWxfY21kcyk7IGorKykgewo+ICsJCWZvciAoaSA9IDA7IGkg PCAyOyBpKyspIHsKPiArCQkJZCA9IGRzaXNbaV07Cj4gKwkJCXJldCA9IG1pcGlfZHNpX2Rjc193 cml0ZV9idWZmZXIoZHNpc1tpXSwKPiArCQkJCQlwYW5lbF9jbWRzW2pdLmNvbW1hbmRzLAo+ICsJ CQkJCXBhbmVsX2NtZHNbal0uc2l6ZSk7Cj4gKwkJCWlmIChyZXQgPCAwKSB7Cj4gKwkJCQlkZXZf ZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIGNtZCBubyAlZCwgZXJyOiAlZFxuIiwKPiArCQkJCQkJ aiwgcmV0KTsKPiArCQkJCXJldHVybiByZXQ7Cj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4gKwo+ICsK ClVubmVjZXNzYXJ5IGV4dHJhIGJsYW5rIGhlcmUuCgo+ICsJZm9yIChpID0gMDsgaSA8IDI7IGkr KykKPiArCQlpZiAobWlwaV9kc2lfZGNzX2V4aXRfc2xlZXBfbW9kZShkc2lzW2ldKSA8IDApIHsK PiArCQkJZGV2X2VycihjdHgtPmRldiwgImZhaWxlZCB0byBleGl0IHNsZWVwIG1vZGVcbiIpOwo+ ICsJCQlyZXR1cm4gLUVDT01NOwo+ICsJCX0KPiArCW1zbGVlcCg3OCk7Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IDI7IGkrKykKPiArCQlpZiAobWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X29uKGRz aXNbaV0pIDwgMCkgewo+ICsJCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIHNlbmQgZGlz cGxheSBvblxuIik7Cj4gKwkJCXJldHVybiAtRUNPTU07Cj4gKwkJfQo+ICsJbXNsZWVwKDc4KTsK PiArCj4gKwljdHgtPnByZXBhcmVkID0gdHJ1ZTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGludCB0cnVseV93cXhnYV9lbmFibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwp Cj4gK3sKPiArCXN0cnVjdCB0cnVseV93cXhnYSAqY3R4ID0gcGFuZWxfdG9fdHJ1bHlfd3F4Z2Eo cGFuZWwpOwo+ICsKPiArCWlmIChjdHgtPmVuYWJsZWQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJ aWYgKGN0eC0+YmFja2xpZ2h0KSB7Cj4gKwkJY3R4LT5iYWNrbGlnaHQtPnByb3BzLnBvd2VyID0g RkJfQkxBTktfVU5CTEFOSzsKPiArCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhjdHgtPmJhY2ts aWdodCk7Cj4gKwl9Cj4gKwljdHgtPmVuYWJsZWQgPSB0cnVlOwo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRydWx5X3dxeGdhX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX3Bh bmVsICpwYW5lbCkKPiArewo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IHBh bmVsLT5jb25uZWN0b3I7Cj4gKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IHBhbmVsX3RvX3Ry dWx5X3dxeGdhKHBhbmVsKTsKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOwo+ICsK PiArCW1vZGUgPSBkcm1fbW9kZV9jcmVhdGUoY29ubmVjdG9yLT5kZXYpOwo+ICsJaWYgKCFtb2Rl KSB7Cj4gKwkJZGV2X2VycihjdHgtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGlzcGxh eSBtb2RlXG4iKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwlkcm1fZGlzcGxheV9tb2Rl X2Zyb21fdmlkZW9tb2RlKCZjdHgtPnZtLCBtb2RlKTsKPiArCWNvbm5lY3Rvci0+ZGlzcGxheV9p bmZvLndpZHRoX21tID0gNzQ7Cj4gKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZWlnaHRfbW0g PSAxMzE7Cj4gKwltb2RlLT50eXBlID0gRFJNX01PREVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9U WVBFX1BSRUZFUlJFRDsKPiArCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsK PiArCj4gKwlyZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFu ZWxfZnVuY3MgdHJ1bHlfd3F4Z2FfZHJtX2Z1bmNzID0gewo+ICsJLmRpc2FibGUgPSB0cnVseV93 cXhnYV9kaXNhYmxlLAo+ICsJLnVucHJlcGFyZSA9IHRydWx5X3dxeGdhX3VucHJlcGFyZSwKPiAr CS5wcmVwYXJlID0gdHJ1bHlfd3F4Z2FfcHJlcGFyZSwKPiArCS5lbmFibGUgPSB0cnVseV93cXhn YV9lbmFibGUsCj4gKwkuZ2V0X21vZGVzID0gdHJ1bHlfd3F4Z2FfZ2V0X21vZGVzLAo+ICt9Owo+ ICsKPiArc3RhdGljIGludCB0cnVseV93cXhnYV9wYW5lbF9hZGQoc3RydWN0IHRydWx5X3dxeGdh ICpjdHgpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGN0eC0+ZGV2Owo+ICsJaW50IHJl dCwgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKTsg aSsrKQo+ICsJCWN0eC0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gcmVndWxhdG9yX25hbWVzW2ldOwo+ ICsKPiArCXJldCA9IGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0KGRldiwgQVJSQVlfU0laRShjdHgt PnN1cHBsaWVzKSwKPiArCQkJCSAgICAgIGN0eC0+c3VwcGxpZXMpOwo+ICsJaWYgKHJldCA8IDAp Cj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwljdHgtPnJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dl dChkZXYsICJyZXNldCIsIEdQSU9EX09VVF9ISUdIKTsKPiArCWlmIChJU19FUlIoY3R4LT5yZXNl dF9ncGlvKSkgewo+ICsJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCByZXNldC1ncGlvcyAlbGRc biIsCj4gKwkJCVBUUl9FUlIoY3R4LT5yZXNldF9ncGlvKSk7Cj4gKwkJcmV0dXJuIFBUUl9FUlIo Y3R4LT5yZXNldF9ncGlvKTsKPiArCX0KPiArCj4gKwljdHgtPm1vZGVfZ3BpbyA9IGRldm1fZ3Bp b2RfZ2V0KGRldiwgIm1vZGUiLCBHUElPRF9PVVRfTE9XKTsKPiArCWlmIChJU19FUlIoY3R4LT5t b2RlX2dwaW8pKSB7Cj4gKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IG1vZGUgZ3BpbyAlbGRc biIsCj4gKwkJCVBUUl9FUlIoY3R4LT5tb2RlX2dwaW8pKTsKPiArCQljdHgtPm1vZGVfZ3BpbyA9 IE5VTEw7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoY3R4LT5tb2RlX2dwaW8pOwo+ICsJfQo+ICsKPiAr CXJldCA9IHBpbmN0cmxfcG1fc2VsZWN0X2RlZmF1bHRfc3RhdGUoZGV2KTsKPiArCWlmIChyZXQp IHsKPiArCQlkZXZfZXJyKGRldiwgIiVzOiBmYWlsZWQgdG8gc2V0IHBpbmN0cmwgZGVmYXVsdCBz dGF0ZSwgJWRcbiIsCj4gKwkJCV9fZnVuY19fLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9 CgpUaGlzIG1pZ2h0IGJlIHVubmVjZXNzYXJ5LCBJIHRoaW5rIHRoaXMgbWF5IGJlIGRvbmUgaW4K ZHJpdmVycy9iYXNlL2RkLmMuIEknbSBub3QgYSAxMDAlIHN1cmUgdGhvdWdoLgoKPiArCj4gKwly ZXQgPSBvZl9nZXRfdmlkZW9tb2RlKGRldi0+b2Zfbm9kZSwgJmN0eC0+dm0sIDApOwo+ICsJaWYg KHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlkcm1fcGFuZWxfaW5pdCgmY3R4LT5w YW5lbCk7Cj4gKwljdHgtPnBhbmVsLmRldiA9IGRldjsKPiArCWN0eC0+cGFuZWwuZnVuY3MgPSAm dHJ1bHlfd3F4Z2FfZHJtX2Z1bmNzOwo+ICsJZHJtX3BhbmVsX2FkZCgmY3R4LT5wYW5lbCk7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHRydWx5X3dxeGdhX3BhbmVs X2RlbChzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCkKPiArewo+ICsJaWYgKGN0eC0+cGFuZWwuZGV2 KQo+ICsJCWRybV9wYW5lbF9yZW1vdmUoJmN0eC0+cGFuZWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IHRydWx5X3dxeGdhX3Byb2JlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKPiArewo+ ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmRzaS0+ZGV2Owo+ICsJc3RydWN0IHRydWx5X3dxeGdh ICpjdHg7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpzZWNvbmRhcnkgPSBOVUxMOwoKV2Ug ZG9uJ3QgbmVlZCB0byBzZXQgaXQgdG8gTlVMTCBoZXJlLgoKPiArCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqZHNpMTsKPiArCXN0cnVjdCBtaXBpX2RzaV9ob3N0ICpkc2kxX2hvc3Q7Cj4gKwlpbnQgcmV0 ID0gMDsKPiArCWNvbnN0IHN0cnVjdCBtaXBpX2RzaV9kZXZpY2VfaW5mbyBpbmZvID0gey50eXBl ID0gInRydWx5bnQzNTU5NyIsCj4gKwkJLmNoYW5uZWwgPSAwLAo+ICsJCS5ub2RlID0gTlVMTCwK PiArCX07Cj4gKwo+ICsJLyogVGhpcyBkZXZpY2UgcmVwcmVzZW50cyBpdHNlbGYgYXMgb25lIHdp dGgKPiArCSAqIHR3byBpbnB1dCBwb3J0cyB3aGljaCBhcmUgZmVkIGJ5IHRoZSBvdXRwdXQKPiAr CSAqIHBvcnRzIG9mIHRoZSB0d28gRFNJIGNvbnRyb2xsZXJzIC4gVGhlIERTSTAKPiArCSAqIGlz IHRoZSBtYXN0ZXIgY29udHJvbGxlciBhbmQgaGFzIG1vc3Qgb2YgdGhlCj4gKwkgKiBwYW5lbCBy ZWxhdGVkIGluZm8gaW4gaXRzIGNoaWxkIG5vZGUuCj4gKwkgKi8KPiArCj4gKwkvKiBjb25maWd1 cmUgbWFzdGVyIERTSSBkZXZpY2UgKi8KPiArCWRzaS0+bGFuZXMgPSA0Owo+ICsJZHNpLT5mb3Jt YXQgPSBNSVBJX0RTSV9GTVRfUkdCODg4Owo+ICsJZHNpLT5tb2RlX2ZsYWdzID0gTUlQSV9EU0lf TU9ERV9WSURFTyB8IE1JUElfRFNJX0NMT0NLX05PTl9DT05USU5VT1VTIHwKPiArCU1JUElfRFNJ X01PREVfTFBNOwoKQ291bGQgd2UgbW92ZSB0aGUgbWFzdGVyIERTSSBzZXR0aW5ncyBqdXN0IGJl Zm9yZSB3ZSBjYWxsCm1pcGlfZHNpX2F0dGFjaCgpIG9uIGl0PwoKPiArCj4gKwkvKiBnZXQgdGhl IGRzaTEgb3V0cHV0IHBvcnQgbm9kZSAqLwo+ICsJZHNpMSA9IG9mX2dyYXBoX2dldF9yZW1vdGVf bm9kZShkc2ktPmRldi5vZl9ub2RlLCAxLCAtMSk7Cj4gKwlpZiAoIWRzaTEpIHsKPiArCQlkZXZf ZXJyKGRldiwgImZhaWxlZCB0byBnZXQgcmVtb3RlIG5vZGVcbiIpWW91IGNvdWxkIG1lbnRpb24g J3JlbW90ZSBub2RlIGZvciBzZWNvbmRhcnkgRFNJJyBmb3IgdGhlIHNha2Ugb2YKY2xhcml0eS4K PiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlkc2kxX2hvc3QgPSBvZl9maW5kX21p cGlfZHNpX2hvc3RfYnlfbm9kZShkc2kxKTsKPiArCWlmICghZHNpMV9ob3N0KSB7Cj4gKwkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gZmluZCBkc2kgaG9zdFxuIik7Cj4gKwkJcmV0ID0gLUVQUk9C RV9ERUZFUjsKPiArCQlnb3RvIGVycl9ob3N0Owo+ICsJfQo+ICsKPiArCS8qIHJlZ2lzdGVyIHRo ZSBzZWNvbmQgRFNJIGRldmljZSAqLwo+ICsJc2Vjb25kYXJ5ID0gbWlwaV9kc2lfZGV2aWNlX3Jl Z2lzdGVyX2Z1bGwoZHNpMV9ob3N0LAo+ICsJCSZpbmZvKTsKCmNvZGluZyBzdHlsZSBuaXQ6IG5l ZWRzIHRvIGJlIGFsaWduZWQgd2l0aCBvcGVuaW5nIHBhcmVudGhlc2lzLgoKPiArCj4gKwlpZiAo SVNfRVJSKHNlY29uZGFyeSkpIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUg ZHNpIGRldmljZVxuIik7Cj4gKwkJcmV0ID0gUFRSX0VSUihkc2kpOwo+ICsJCWdvdG8gZXJyX2Rz aV9kZXZpY2U7Cj4gKwl9Cj4gKwo+ICsJLyogY29uZmlndXJlIHNlY29uZGFyeSBEU0kgZGV2aWNl ICovCj4gKwlzZWNvbmRhcnktPmxhbmVzID0gNDsKPiArCXNlY29uZGFyeS0+Zm9ybWF0ID0gTUlQ SV9EU0lfRk1UX1JHQjg4ODsKPiArCXNlY29uZGFyeS0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01P REVfVklERU8gfAo+ICsJCU1JUElfRFNJX0NMT0NLX05PTl9DT05USU5VT1VTIHwKPiArCQlNSVBJ X0RTSV9NT0RFX0xQTTsKClRoaXMgY291bGQgYmUgc2ltaWxhcmx5IG1vdmVkIGp1c3QgYmVmb3Jl IGNhbGxpbmcgbWlwaV9kc2lfYXR0YWNoKCkKb24gdGhlIHNlY29uZGFyeSBEU0kgZGV2aWNlLgoK PiArCj4gKwljdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwp Owo+ICsKCkFsbG9jYXRpbmcgY29udGV4dCBpcyBnZW5lcmFsbHkgdGhlIGZpcnN0IHRoaW5nIGRv bmUgaW4gcHJvYmUuIEl0IHNob3VsZApzaW1wbGlmeSB0aGUgZXJyb3IgaGFuZGxpbmcgYSBiaXQg dG9vLgoKPiArCWlmICghY3R4KSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGVycl9k c2lfY3R4Owo+ICsJfQo+ICsKPiArCW1pcGlfZHNpX3NldF9kcnZkYXRhKGRzaSwgY3R4KTsKPiAr Cj4gKwljdHgtPmRldiA9IGRldjsKPiArCWN0eC0+ZHNpWzBdID0gZHNpOwo+ICsJY3R4LT5kc2lb MV0gPSBzZWNvbmRhcnk7Cj4gKwo+ICsJcmV0ID0gdHJ1bHlfd3F4Z2FfcGFuZWxfYWRkKGN0eCk7 Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIHBhbmVsXG4i KTsKPiArCQlnb3RvIGVycl9wYW5lbF9hZGQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gbWlwaV9kc2lf YXR0YWNoKGRzaSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoZGV2LCAibWFzdGVy IGRzaSBhdHRhY2ggZmFpbGVkXG4iKTsKPiArCQlnb3RvIGVycl9kc2lfYXR0YWNoOwo+ICsJfQo+ ICsKPiArCXJldCA9IG1pcGlfZHNpX2F0dGFjaChzZWNvbmRhcnkpOwo+ICsJaWYgKHJldCA8IDAp IHsKPiArCQlkZXZfZXJyKGRldiwgIm1pcGlfZHNpX2F0dGFjaCBvbiBzZWNvbmRhcnkgZmFpbGVk XG4iKTsKPiArCQlnb3RvIGVycl9kc2lfYXR0YWNoX3NlYzsKPiArCX0KPiArCj4gKwlvZl9ub2Rl X3B1dChkc2kxKTsKClRoaXMgc2hvdWxkIGJlIGRvbmUganVzdCBhZnRlciB3ZSBjYWxsIG9mX2Zp bmRfbWlwaV9kc2lfaG9zdF9ieV9ub2RlKCkKZm9yIGNsYXJpdHkuCgo+ICsKPiArCXJldHVybiAw Owo+ICsKPiArZXJyX2RzaV9hdHRhY2hfc2VjOgo+ICsJbWlwaV9kc2lfZGV0YWNoKGN0eC0+ZHNp WzBdKTsKPiArZXJyX2RzaV9hdHRhY2g6Cj4gKwl0cnVseV93cXhnYV9wYW5lbF9kZWwoY3R4KTsK PiArZXJyX3BhbmVsX2FkZDoKPiArCW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKHNlY29uZGFy eSk7Cj4gK2Vycl9kc2lfY3R4Ogo+ICtlcnJfZHNpX2RldmljZToKPiArZXJyX2hvc3Q6Cj4gKwlv Zl9ub2RlX3B1dChkc2kxKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg dHJ1bHlfd3F4Z2FfcmVtb3ZlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKPiArewo+ICsJ c3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShkc2kpOwo+ICsK PiArCWlmIChjdHgpIHsKCkkgZG9uJ3QgdGhpbmsgd2UgbmVlZCB0aGUgY2hlY2sgYWJvdmUuCj4g KwkJaWYgKGN0eC0+ZHNpWzBdKQo+ICsJCQltaXBpX2RzaV9kZXRhY2goY3R4LT5kc2lbMF0pOwo+ ICsJCWlmIChjdHgtPmRzaVsxXSkgewo+ICsJCQltaXBpX2RzaV9kZXRhY2goY3R4LT5kc2lbMV0p Owo+ICsJCQltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3RlcihjdHgtPmRzaVsxXSk7Cj4gKwkJfQo+ ICsJCXRydWx5X3dxeGdhX3BhbmVsX2RlbChjdHgpOwo+ICsJCWtmcmVlKGN0eCk7CgpZb3Ugc2hv dWxkbid0IGZyZWUgc3R1ZmYgdGhhdCdzIGFsbG9jYXRlZCB1c2luZyBkZXZtXyBmdW5jcy4KCj4g Kwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkIHRydWx5X3dxeGdhX29mX21hdGNoW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxlID0g InRydWx5LG50MzU1OTciLCB9LAo+ICsJeyB9Cj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIHRydWx5X3dxeGdhX29mX21hdGNoKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgbWlwaV9kc2lf ZHJpdmVyIHRydWx5X3dxeGdhX2RyaXZlciA9IHsKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUg PSAicGFuZWxfdHJ1bHlfbnQzNTU5NyIsCj4gKwkJLm9mX21hdGNoX3RhYmxlID0gdHJ1bHlfd3F4 Z2Ffb2ZfbWF0Y2gsCj4gKwl9LAo+ICsJLnByb2JlID0gdHJ1bHlfd3F4Z2FfcHJvYmUsCj4gKwku cmVtb3ZlID0gdHJ1bHlfd3F4Z2FfcmVtb3ZlLAo+ICt9Owo+ICttb2R1bGVfbWlwaV9kc2lfZHJp dmVyKHRydWx5X3dxeGdhX2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oInRydWx5 IG50MzU1OTcgRFNJIFBhbmVsIERyaXZlciIpOwoKcy90cnVseSBudDM1NTk3L1RydWx5IE5UMzU1 OTcKClRoZSBkcml2ZXIgbG9va3MgaW4gZ29vZCBzaGFwZSBub3cuIFRoYW5rcyBmb3Igd29ya2lu ZyBvbiBpdC4KClJlZ2FyZHMsCkFyY2hpdAoKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+ IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJl bm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K