From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: Re: [PATCH v3] drm/bridge/sii902x: Fix EDID readback Date: Wed, 7 Nov 2018 20:17:19 +0100 Message-ID: <20181107201719.5f2f9fdf@bbrezillon> References: <1541505156-8097-1-git-send-email-fabrizio.castro@bp.renesas.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1541505156-8097-1-git-send-email-fabrizio.castro@bp.renesas.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Fabrizio Castro Cc: Geert Uytterhoeven , Simon Horman , Wolfram Sang , David Airlie , Boris Brezillon , Chris Paterson , dri-devel@lists.freedesktop.org, Biju Das , linux-renesas-soc@vger.kernel.org, Mark Brown , Laurent Pinchart , Peter Rosin , linux-i2c@vger.kernel.org List-Id: linux-i2c@vger.kernel.org T24gVHVlLCAgNiBOb3YgMjAxOCAxMTo1MjozNiArMDAwMApGYWJyaXppbyBDYXN0cm8gPGZhYnJp emlvLmNhc3Ryb0BicC5yZW5lc2FzLmNvbT4gd3JvdGU6Cgo+IFdoaWxlIGFkZGluZyBTaUk5MDIy QSBzdXBwb3J0IHRvIHRoZSBpd2cyM3MgYm9hcmQsIGl0IGNhbWUKPiB1cCB0aGF0IHdoZW4gdGhl IEhETUkgdHJhbnNtaXR0ZXIgaXMgaW4gcGFzcyB0aHJvdWdoIG1vZGUgdGhlCj4gZGV2aWNlIGlz IG5vdCBjb21wbGlhbnQgd2l0aCB0aGUgSTJDIHNwZWNpZmljYXRpb24gYW55bW9yZSwKPiBhcyBp dCByZXF1aXJlcyBhIGZhciBiaWdnZXIgdGJ1ZiwgZHVlIHRvIGEgZGVsYXkgdGhlIEhETUkKPiB0 cmFuc21pdHRlciBpcyBhZGRpbmcgd2hlbiByZWxheWluZyB0aGUgU1RPUCBjb25kaXRpb24gb24g dGhlCj4gbW9uaXRvciBpMmMgc2lkZSBvZiB0aGluZ3MuCj4gCj4gV2hlbiBub3QgcHJvdmlkaW5n IGFuIGFwcHJvcHJpYXRlIGRlbGF5IGFmdGVyIHRoZSBTVE9QIGNvbmRpdGlvbgo+IHRoZSBpMmMg YnVzIHdvdWxkIGdldCBzdHVjay4gQWxzbywgYW55IG90aGVyIHRyYWZmaWMgb24gdGhlIGJ1cwo+ IHdoaWxlIHRhbGtpbmcgdG8gdGhlIG1vbml0b3IgbWF5IGNhdXNlIHRoZSB0cmFuc2FjdGlvbiB0 byBmYWlsCj4gb3IgZXZlbiBjYXVzZSBpc3N1ZXMgd2l0aCB0aGUgaTJjIGJ1cyBhcyB3ZWxsLgo+ IAo+IEkyYy1nYXRlcyBzZWVtZWQgdG8gcmVhY2ggY29uc2VudCBhcyBhIHBvc3NpYmxlIHdheSB0 byBhZGRyZXNzCj4gdGhlc2UgaXNzdWVzLCBhbmQgYXMgc3VjaCB0aGlzIHBhdGNoIGlzIGltcGxl bWVudGluZyBhIHNvbHV0aW9uCj4gYmFzZWQgb24gdGhhdC4gU2luY2Ugb3RoZXJzIGFyZSBjbGVh cmx5IHJlbHlpbmcgb24gdGhlIGN1cnJlbnQKPiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZHJpdmVy LCB0aGlzIHBhdGNoIHdvbid0IHJlcXVpcmUgYW55IERUCj4gY2hhbmdlcy4KPiAKPiBTaW5jZSB3 ZSBkb24ndCB3YW50IGFueSBpbnRlcmZlcmVuY2UgZHVyaW5nIHRoZSBEREMgQnVzCj4gUmVxdWVz dC9HcmFudCBwcm9jZWR1cmUgYW5kIHdoaWxlIHRhbGtpbmcgdG8gdGhlIG1vbml0b3IsIHdlCj4g aGF2ZSB0byB1c2UgdGhlIGFkYXB0ZXIgbG9ja2luZyBwcmltaXRpdmVzIHJhdGhlciB0aGFuIHRo ZQo+IGkyYy1tdXggbG9ja2luZyBwcmltaXRpdmVzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEZhYnJp emlvIENhc3RybyA8ZmFicml6aW8uY2FzdHJvQGJwLnJlbmVzYXMuY29tPgoKQWNrZWQtYnk6IEJv cmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGJvb3RsaW4uY29tPgoKPiAKPiAtLS0KPiB2 Mi0+djM6Cj4gKiBJbmNvcnBvcmF0ZWQgY29tbWVudHMgZnJvbSBCb3JpcyBCcmV6aWxsb24gYW5k IFBldGVyIFJvc2luCj4gCj4gdjEtPnYyOgo+ICogSW5jb3Jwb3JhdGVkIGNvbW1lbnRzIGZyb20g UGV0ZXIgUm9zaW4KPiAKPiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zaWk5MDJ4LmMgfCAyNDcg KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCj4gIDEgZmlsZSBjaGFuZ2Vk LCAxNzggaW5zZXJ0aW9ucygrKSwgNjkgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTAyeC5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9z aWk5MDJ4LmMKPiBpbmRleCBlNTlhMTM1Li5iZmE5MDIwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2Uvc2lpOTAyeC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9z aWk5MDJ4LmMKPiBAQCAtMSw0ICsxLDYgQEAKPiAgLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE4 IFJlbmVzYXMgRWxlY3Ryb25pY3MKPiArICoKPiAgICogQ29weXJpZ2h0IChDKSAyMDE2IEF0bWVs Cj4gICAqCQkgICAgICBCbyBTaGVuIDx2b2ljZS5zaGVuQGF0bWVsLmNvbT4KPiAgICoKPiBAQCAt MjEsNiArMjMsNyBAQAo+ICAgKi8KPiAgCj4gICNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVy Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pMmMtbXV4Lmg+Cj4gICNpbmNsdWRlIDxsaW51eC9pMmMu aD4KPiAgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICAjaW5jbHVkZSA8bGludXgvcmVnbWFw Lmg+Cj4gQEAgLTg2LDggKzg5LDQ5IEBAIHN0cnVjdCBzaWk5MDJ4IHsKPiAgCXN0cnVjdCBkcm1f YnJpZGdlIGJyaWRnZTsKPiAgCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsKPiAgCXN0 cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87Cj4gKwlzdHJ1Y3QgaTJjX211eF9jb3JlICppMmNt dXg7Cj4gIH07Cj4gIAo+ICtzdGF0aWMgaW50IHNpaTkwMnhfcmVhZF91bmxvY2tlZChzdHJ1Y3Qg aTJjX2NsaWVudCAqaTJjLCB1OCByZWcsIHU4ICp2YWwpCj4gK3sKPiArCXVuaW9uIGkyY19zbWJ1 c19kYXRhIGRhdGE7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IF9faTJjX3NtYnVzX3hmZXIo aTJjLT5hZGFwdGVyLCBpMmMtPmFkZHIsIGkyYy0+ZmxhZ3MsCj4gKwkJCSAgICAgICBJMkNfU01C VVNfUkVBRCwgcmVnLCBJMkNfU01CVVNfQllURV9EQVRBLCAmZGF0YSk7Cj4gKwo+ICsJaWYgKHJl dCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwkqdmFsID0gZGF0YS5ieXRlOwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc2lpOTAyeF93cml0ZV91bmxvY2tlZChzdHJ1 Y3QgaTJjX2NsaWVudCAqaTJjLCB1OCByZWcsIHU4IHZhbCkKPiArewo+ICsJdW5pb24gaTJjX3Nt YnVzX2RhdGEgZGF0YTsKPiArCj4gKwlkYXRhLmJ5dGUgPSB2YWw7Cj4gKwo+ICsJcmV0dXJuIF9f aTJjX3NtYnVzX3hmZXIoaTJjLT5hZGFwdGVyLCBpMmMtPmFkZHIsIGkyYy0+ZmxhZ3MsCj4gKwkJ CQlJMkNfU01CVVNfV1JJVEUsIHJlZywgSTJDX1NNQlVTX0JZVEVfREFUQSwKPiArCQkJCSZkYXRh KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBzaWk5MDJ4X3VwZGF0ZV9iaXRzX3VubG9ja2VkKHN0 cnVjdCBpMmNfY2xpZW50ICppMmMsIHU4IHJlZywgdTggbWFzaywKPiArCQkJCQl1OCB2YWwpCj4g K3sKPiArCWludCByZXQ7Cj4gKwl1OCBzdGF0dXM7Cj4gKwo+ICsJcmV0ID0gc2lpOTAyeF9yZWFk X3VubG9ja2VkKGkyYywgcmVnLCAmc3RhdHVzKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJl dDsKPiArCXN0YXR1cyAmPSB+bWFzazsKPiArCXN0YXR1cyB8PSB2YWwgJiBtYXNrOwo+ICsJcmV0 dXJuIHNpaTkwMnhfd3JpdGVfdW5sb2NrZWQoaTJjLCByZWcsIHN0YXR1cyk7Cj4gK30KPiArCj4g IHN0YXRpYyBpbmxpbmUgc3RydWN0IHNpaTkwMnggKmJyaWRnZV90b19zaWk5MDJ4KHN0cnVjdCBk cm1fYnJpZGdlICpicmlkZ2UpCj4gIHsKPiAgCXJldHVybiBjb250YWluZXJfb2YoYnJpZGdlLCBz dHJ1Y3Qgc2lpOTAyeCwgYnJpZGdlKTsKPiBAQCAtMTM1LDQxICsxNzksMTEgQEAgc3RhdGljIGNv bnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHNpaTkwMnhfY29ubmVjdG9yX2Z1bmNzID0g ewo+ICBzdGF0aWMgaW50IHNpaTkwMnhfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCj4gIHsKPiAgCXN0cnVjdCBzaWk5MDJ4ICpzaWk5MDJ4ID0gY29ubmVjdG9yX3Rv X3NpaTkwMngoY29ubmVjdG9yKTsKPiAtCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IHNpaTkwMngt PnJlZ21hcDsKPiAgCXUzMiBidXNfZm9ybWF0ID0gTUVESUFfQlVTX0ZNVF9SR0I4ODhfMVgyNDsK PiAtCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzaWk5MDJ4LT5pMmMtPmRldjsKPiAtCXVuc2lnbmVk IGxvbmcgdGltZW91dDsKPiAtCXVuc2lnbmVkIGludCByZXRyaWVzOwo+IC0JdW5zaWduZWQgaW50 IHN0YXR1czsKPiAgCXN0cnVjdCBlZGlkICplZGlkOwo+IC0JaW50IG51bSA9IDA7Cj4gLQlpbnQg cmV0Owo+IC0KPiAtCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIFNJSTkwMlhfU1lT X0NUUkxfREFUQSwKPiAtCQkJCSBTSUk5MDJYX1NZU19DVFJMX0REQ19CVVNfUkVRLAo+IC0JCQkJ IFNJSTkwMlhfU1lTX0NUUkxfRERDX0JVU19SRVEpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4g cmV0Owo+IC0KPiAtCXRpbWVvdXQgPSBqaWZmaWVzICsKPiAtCQkgIG1zZWNzX3RvX2ppZmZpZXMo U0lJOTAyWF9JMkNfQlVTX0FDUVVJU0lUSU9OX1RJTUVPVVRfTVMpOwo+IC0JZG8gewo+IC0JCXJl dCA9IHJlZ21hcF9yZWFkKHJlZ21hcCwgU0lJOTAyWF9TWVNfQ1RSTF9EQVRBLCAmc3RhdHVzKTsK PiAtCQlpZiAocmV0KQo+IC0JCQlyZXR1cm4gcmV0Owo+IC0JfSB3aGlsZSAoIShzdGF0dXMgJiBT SUk5MDJYX1NZU19DVFJMX0REQ19CVVNfR1JURCkgJiYKPiAtCQkgdGltZV9iZWZvcmUoamlmZmll cywgdGltZW91dCkpOwo+ICsJaW50IG51bSA9IDAsIHJldDsKPiAgCj4gLQlpZiAoIShzdGF0dXMg JiBTSUk5MDJYX1NZU19DVFJMX0REQ19CVVNfR1JURCkpIHsKPiAtCQlkZXZfZXJyKGRldiwgImZh aWxlZCB0byBhY3F1aXJlIHRoZSBpMmMgYnVzXG4iKTsKPiAtCQlyZXR1cm4gLUVUSU1FRE9VVDsK PiAtCX0KPiAtCj4gLQlyZXQgPSByZWdtYXBfd3JpdGUocmVnbWFwLCBTSUk5MDJYX1NZU19DVFJM X0RBVEEsIHN0YXR1cyk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JZWRp ZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsIHNpaTkwMngtPmkyYy0+YWRhcHRlcik7Cj4gKwll ZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3Rvciwgc2lpOTAyeC0+aTJjbXV4LT5hZGFwdGVyWzBd KTsKPiAgCWRybV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBlZGlk KTsKPiAgCWlmIChlZGlkKSB7Cj4gIAkJbnVtID0gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3Rv ciwgZWRpZCk7Cj4gQEAgLTE4MSw0MiArMTk1LDYgQEAgc3RhdGljIGludCBzaWk5MDJ4X2dldF9t b2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ICAJaWYgKHJldCkKPiAgCQly ZXR1cm4gcmV0Owo+ICAKPiAtCS8qCj4gLQkgKiBTb21ldGltZXMgdGhlIEkyQyBidXMgY2FuIHN0 YWxsIGFmdGVyIGZhaWx1cmUgdG8gdXNlIHRoZQo+IC0JICogRURJRCBjaGFubmVsLiBSZXRyeSBh IGZldyB0aW1lcyB0byBzZWUgaWYgdGhpbmdzIGNsZWFyCj4gLQkgKiB1cCwgZWxzZSBjb250aW51 ZSBhbnl3YXkuCj4gLQkgKi8KPiAtCXJldHJpZXMgPSA1Owo+IC0JZG8gewo+IC0JCXJldCA9IHJl Z21hcF9yZWFkKHJlZ21hcCwgU0lJOTAyWF9TWVNfQ1RSTF9EQVRBLAo+IC0JCQkJICAmc3RhdHVz KTsKPiAtCQlyZXRyaWVzLS07Cj4gLQl9IHdoaWxlIChyZXQgJiYgcmV0cmllcyk7Cj4gLQlpZiAo cmV0KQo+IC0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlYWQgc3RhdHVzICglZClcbiIsIHJl dCk7Cj4gLQo+IC0JcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgU0lJOTAyWF9TWVNf Q1RSTF9EQVRBLAo+IC0JCQkJIFNJSTkwMlhfU1lTX0NUUkxfRERDX0JVU19SRVEgfAo+IC0JCQkJ IFNJSTkwMlhfU1lTX0NUUkxfRERDX0JVU19HUlRELCAwKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0 dXJuIHJldDsKPiAtCj4gLQl0aW1lb3V0ID0gamlmZmllcyArCj4gLQkJICBtc2Vjc190b19qaWZm aWVzKFNJSTkwMlhfSTJDX0JVU19BQ1FVSVNJVElPTl9USU1FT1VUX01TKTsKPiAtCWRvIHsKPiAt CQlyZXQgPSByZWdtYXBfcmVhZChyZWdtYXAsIFNJSTkwMlhfU1lTX0NUUkxfREFUQSwgJnN0YXR1 cyk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiAtCX0gd2hpbGUgKHN0YXR1cyAm IChTSUk5MDJYX1NZU19DVFJMX0REQ19CVVNfUkVRIHwKPiAtCQkJICAgU0lJOTAyWF9TWVNfQ1RS TF9ERENfQlVTX0dSVEQpICYmCj4gLQkJIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTsK PiAtCj4gLQlpZiAoc3RhdHVzICYgKFNJSTkwMlhfU1lTX0NUUkxfRERDX0JVU19SRVEgfAo+IC0J CSAgICAgIFNJSTkwMlhfU1lTX0NUUkxfRERDX0JVU19HUlREKSkgewo+IC0JCWRldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIHJlbGVhc2UgdGhlIGkyYyBidXNcbiIpOwo+IC0JCXJldHVybiAtRVRJTUVE T1VUOwo+IC0JfQo+IC0KPiAgCXJldHVybiBudW07Cj4gIH0KPiAgCj4gQEAgLTM2Niw2ICszNDQs MTIxIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBzaWk5MDJ4X2ludGVycnVwdChpbnQgaXJxLCB2b2lk ICpkYXRhKQo+ICAJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICB9Cj4gIAo+ICsvKgo+ICsgKiBUaGUg cHVycG9zZSBvZiBzaWk5MDJ4X2kyY19ieXBhc3Nfc2VsZWN0IGlzIHRvIGVuYWJsZSB0aGUgcGFz cyB0aHJvdWdoCj4gKyAqIG1vZGUgb2YgdGhlIEhETUkgdHJhbnNtaXR0ZXIuIERvIG5vdCB1c2Ug cmVnbWFwIGZyb20gd2l0aGluIHRoaXMgZnVuY3Rpb24sCj4gKyAqIG9ubHkgdXNlIHNpaTkwMnhf Kl91bmxvY2tlZCBmdW5jdGlvbnMgdG8gcmVhZC9tb2RpZnkvd3JpdGUgcmVnaXN0ZXJzLgo+ICsg KiBXZSBhcmUgaG9sZGluZyB0aGUgcGFyZW50IGFkYXB0ZXIgbG9jayBoZXJlLCBrZWVwIHRoaXMg aW4gbWluZCBiZWZvcmUKPiArICogYWRkaW5nIG1vcmUgaTJjIHRyYW5zYWN0aW9ucy4KPiArICoK PiArICogQWxzbywgc2luY2UgU0lJOTAyWF9TWVNfQ1RSTF9EQVRBIGlzIHVzZWQgd2l0aCByZWdt YXBfdXBkYXRlX2JpdHMgZWxzZXdoZXJlCj4gKyAqIGluIHRoaXMgZHJpdmVyLCB3ZSBuZWVkIHRv IG1ha2Ugc3VyZSB0aGF0IHdlIG9ubHkgdG91Y2ggMHgxQVsyOjFdIGZyb20KPiArICogd2l0aGlu IHNpaTkwMnhfaTJjX2J5cGFzc19zZWxlY3QgYW5kIHNpaTkwMnhfaTJjX2J5cGFzc19kZXNlbGVj dCwgYW5kIHRoYXQKPiArICogd2UgbGVhdmUgdGhlIHJlbWFpbmluZyBiaXRzIGFzIHdlIGhhdmUg Zm91bmQgdGhlbS4KPiArICovCj4gK3N0YXRpYyBpbnQgc2lpOTAyeF9pMmNfYnlwYXNzX3NlbGVj dChzdHJ1Y3QgaTJjX211eF9jb3JlICptdXgsIHUzMiBjaGFuX2lkKQo+ICt7Cj4gKwlzdHJ1Y3Qg c2lpOTAyeCAqc2lpOTAyeCA9IGkyY19tdXhfcHJpdihtdXgpOwo+ICsJc3RydWN0IGRldmljZSAq ZGV2ID0gJnNpaTkwMngtPmkyYy0+ZGV2Owo+ICsJdW5zaWduZWQgbG9uZyB0aW1lb3V0Owo+ICsJ dTggc3RhdHVzOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBzaWk5MDJ4X3VwZGF0ZV9iaXRz X3VubG9ja2VkKHNpaTkwMngtPmkyYywgU0lJOTAyWF9TWVNfQ1RSTF9EQVRBLAo+ICsJCQkJCSAg IFNJSTkwMlhfU1lTX0NUUkxfRERDX0JVU19SRVEsCj4gKwkJCQkJICAgU0lJOTAyWF9TWVNfQ1RS TF9ERENfQlVTX1JFUSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJdGlt ZW91dCA9IGppZmZpZXMgKwo+ICsJCSAgbXNlY3NfdG9famlmZmllcyhTSUk5MDJYX0kyQ19CVVNf QUNRVUlTSVRJT05fVElNRU9VVF9NUyk7Cj4gKwlkbyB7Cj4gKwkJcmV0ID0gc2lpOTAyeF9yZWFk X3VubG9ja2VkKHNpaTkwMngtPmkyYywgU0lJOTAyWF9TWVNfQ1RSTF9EQVRBLAo+ICsJCQkJCSAg ICAmc3RhdHVzKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJfSB3aGlsZSAo IShzdGF0dXMgJiBTSUk5MDJYX1NZU19DVFJMX0REQ19CVVNfR1JURCkgJiYKPiArCQkgdGltZV9i ZWZvcmUoamlmZmllcywgdGltZW91dCkpOwo+ICsKPiArCWlmICghKHN0YXR1cyAmIFNJSTkwMlhf U1lTX0NUUkxfRERDX0JVU19HUlREKSkgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFj cXVpcmUgdGhlIGkyYyBidXNcbiIpOwo+ICsJCXJldHVybiAtRVRJTUVET1VUOwo+ICsJfQo+ICsK PiArCXJldHVybiBzaWk5MDJ4X3dyaXRlX3VubG9ja2VkKHNpaTkwMngtPmkyYywgU0lJOTAyWF9T WVNfQ1RSTF9EQVRBLAo+ICsJCQkJICAgICAgc3RhdHVzKTsKPiArfQo+ICsKPiArLyoKPiArICog VGhlIHB1cnBvc2Ugb2Ygc2lpOTAyeF9pMmNfYnlwYXNzX2Rlc2VsZWN0IGlzIHRvIGRpc2FibGUg dGhlIHBhc3MgdGhyb3VnaAo+ICsgKiBtb2RlIG9mIHRoZSBIRE1JIHRyYW5zbWl0dGVyLiBEbyBu b3QgdXNlIHJlZ21hcCBmcm9tIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLAo+ICsgKiBvbmx5IHVzZSBz aWk5MDJ4XypfdW5sb2NrZWQgZnVuY3Rpb25zIHRvIHJlYWQvbW9kaWZ5L3dyaXRlIHJlZ2lzdGVy cy4KPiArICogV2UgYXJlIGhvbGRpbmcgdGhlIHBhcmVudCBhZGFwdGVyIGxvY2sgaGVyZSwga2Vl cCB0aGlzIGluIG1pbmQgYmVmb3JlCj4gKyAqIGFkZGluZyBtb3JlIGkyYyB0cmFuc2FjdGlvbnMu Cj4gKyAqCj4gKyAqIEFsc28sIHNpbmNlIFNJSTkwMlhfU1lTX0NUUkxfREFUQSBpcyB1c2VkIHdp dGggcmVnbWFwX3VwZGF0ZV9iaXRzIGVsc2V3aGVyZQo+ICsgKiBpbiB0aGlzIGRyaXZlciwgd2Ug bmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBvbmx5IHRvdWNoIDB4MUFbMjoxXSBmcm9tCj4gKyAq IHdpdGhpbiBzaWk5MDJ4X2kyY19ieXBhc3Nfc2VsZWN0IGFuZCBzaWk5MDJ4X2kyY19ieXBhc3Nf ZGVzZWxlY3QsIGFuZCB0aGF0Cj4gKyAqIHdlIGxlYXZlIHRoZSByZW1haW5pbmcgYml0cyBhcyB3 ZSBoYXZlIGZvdW5kIHRoZW0uCj4gKyAqLwo+ICtzdGF0aWMgaW50IHNpaTkwMnhfaTJjX2J5cGFz c19kZXNlbGVjdChzdHJ1Y3QgaTJjX211eF9jb3JlICptdXgsIHUzMiBjaGFuX2lkKQo+ICt7Cj4g KwlzdHJ1Y3Qgc2lpOTAyeCAqc2lpOTAyeCA9IGkyY19tdXhfcHJpdihtdXgpOwo+ICsJc3RydWN0 IGRldmljZSAqZGV2ID0gJnNpaTkwMngtPmkyYy0+ZGV2Owo+ICsJdW5zaWduZWQgbG9uZyB0aW1l b3V0Owo+ICsJdW5zaWduZWQgaW50IHJldHJpZXM7Cj4gKwl1OCBzdGF0dXM7Cj4gKwlpbnQgcmV0 Owo+ICsKPiArCS8qCj4gKwkgKiBXaGVuIHRoZSBIRE1JIHRyYW5zbWl0dGVyIGlzIGluIHBhc3Mg dGhyb3VnaCBtb2RlLCB3ZSBuZWVkIGFuCj4gKwkgKiAodW5kb2N1bWVudGVkKSBhZGRpdGlvbmFs IGRlbGF5IGJldHdlZW4gU1RPUCBhbmQgU1RBUlQgY29uZGl0aW9ucwo+ICsJICogdG8gZ3VhcmFu dGVlIHRoZSBidXMgd29uJ3QgZ2V0IHN0dWNrLgo+ICsJICovCj4gKwl1ZGVsYXkoMzApOwo+ICsK PiArCS8qCj4gKwkgKiBTb21ldGltZXMgdGhlIEkyQyBidXMgY2FuIHN0YWxsIGFmdGVyIGZhaWx1 cmUgdG8gdXNlIHRoZQo+ICsJICogRURJRCBjaGFubmVsLiBSZXRyeSBhIGZldyB0aW1lcyB0byBz ZWUgaWYgdGhpbmdzIGNsZWFyCj4gKwkgKiB1cCwgZWxzZSBjb250aW51ZSBhbnl3YXkuCj4gKwkg Ki8KPiArCXJldHJpZXMgPSA1Owo+ICsJZG8gewo+ICsJCXJldCA9IHNpaTkwMnhfcmVhZF91bmxv Y2tlZChzaWk5MDJ4LT5pMmMsIFNJSTkwMlhfU1lTX0NUUkxfREFUQSwKPiArCQkJCQkgICAgJnN0 YXR1cyk7Cj4gKwkJcmV0cmllcy0tOwo+ICsJfSB3aGlsZSAocmV0ICYmIHJldHJpZXMpOwo+ICsJ aWYgKHJldCkgewo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlYWQgc3RhdHVzICglZClc biIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBzaWk5MDJ4X3Vw ZGF0ZV9iaXRzX3VubG9ja2VkKHNpaTkwMngtPmkyYywgU0lJOTAyWF9TWVNfQ1RSTF9EQVRBLAo+ ICsJCQkJCSAgIFNJSTkwMlhfU1lTX0NUUkxfRERDX0JVU19SRVEgfAo+ICsJCQkJCSAgIFNJSTkw MlhfU1lTX0NUUkxfRERDX0JVU19HUlRELCAwKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJl dDsKPiArCj4gKwl0aW1lb3V0ID0gamlmZmllcyArCj4gKwkJICBtc2Vjc190b19qaWZmaWVzKFNJ STkwMlhfSTJDX0JVU19BQ1FVSVNJVElPTl9USU1FT1VUX01TKTsKPiArCWRvIHsKPiArCQlyZXQg PSBzaWk5MDJ4X3JlYWRfdW5sb2NrZWQoc2lpOTAyeC0+aTJjLCBTSUk5MDJYX1NZU19DVFJMX0RB VEEsCj4gKwkJCQkJICAgICZzdGF0dXMpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7 Cj4gKwl9IHdoaWxlIChzdGF0dXMgJiAoU0lJOTAyWF9TWVNfQ1RSTF9ERENfQlVTX1JFUSB8Cj4g KwkJCSAgIFNJSTkwMlhfU1lTX0NUUkxfRERDX0JVU19HUlREKSAmJgo+ICsJCSB0aW1lX2JlZm9y ZShqaWZmaWVzLCB0aW1lb3V0KSk7Cj4gKwo+ICsJaWYgKHN0YXR1cyAmIChTSUk5MDJYX1NZU19D VFJMX0REQ19CVVNfUkVRIHwKPiArCQkgICAgICBTSUk5MDJYX1NZU19DVFJMX0REQ19CVVNfR1JU RCkpIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWxlYXNlIHRoZSBpMmMgYnVzXG4i KTsKPiArCQlyZXR1cm4gLUVUSU1FRE9VVDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiAgc3RhdGljIGludCBzaWk5MDJ4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQs Cj4gIAkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCj4gIHsKPiBAQCAtMzc1LDYg KzQ2OCwxMyBAQCBzdGF0aWMgaW50IHNpaTkwMnhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNs aWVudCwKPiAgCXU4IGNoaXBpZFs0XTsKPiAgCWludCByZXQ7Cj4gIAo+ICsJcmV0ID0gaTJjX2No ZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAo+ICsJCQkJICAgICAgSTJDX0ZVTkNf U01CVVNfQllURV9EQVRBKTsKPiArCWlmICghcmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJJMkMg YWRhcHRlciBub3Qgc3VpdGFibGVcbiIpOwo+ICsJCXJldHVybiAtRUlPOwo+ICsJfQo+ICsKPiAg CXNpaTkwMnggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnNpaTkwMngpLCBHRlBfS0VSTkVM KTsKPiAgCWlmICghc2lpOTAyeCkKPiAgCQlyZXR1cm4gLUVOT01FTTsKPiBAQCAtNDMzLDcgKzUz MywxNSBAQCBzdGF0aWMgaW50IHNpaTkwMnhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVu dCwKPiAgCj4gIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBzaWk5MDJ4KTsKPiAgCj4gLQly ZXR1cm4gMDsKPiArCXNpaTkwMngtPmkyY211eCA9IGkyY19tdXhfYWxsb2MoY2xpZW50LT5hZGFw dGVyLCBkZXYsCj4gKwkJCQkJMSwgMCwgSTJDX01VWF9HQVRFLAo+ICsJCQkJCXNpaTkwMnhfaTJj X2J5cGFzc19zZWxlY3QsCj4gKwkJCQkJc2lpOTAyeF9pMmNfYnlwYXNzX2Rlc2VsZWN0KTsKPiAr CWlmICghc2lpOTAyeC0+aTJjbXV4KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXNpaTkw MngtPmkyY211eC0+cHJpdiA9IHNpaTkwMng7Cj4gKwlyZXR1cm4gaTJjX211eF9hZGRfYWRhcHRl cihzaWk5MDJ4LT5pMmNtdXgsIDAsIDAsIDApOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IHNpaTkw MnhfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCj4gQEAgLTQ0MSw2ICs1NDksNyBA QCBzdGF0aWMgaW50IHNpaTkwMnhfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCj4g IHsKPiAgCXN0cnVjdCBzaWk5MDJ4ICpzaWk5MDJ4ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVu dCk7Cj4gIAo+ICsJaTJjX211eF9kZWxfYWRhcHRlcnMoc2lpOTAyeC0+aTJjbXV4KTsKPiAgCWRy bV9icmlkZ2VfcmVtb3ZlKCZzaWk5MDJ4LT5icmlkZ2UpOwo+ICAKPiAgCXJldHVybiAwOwoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==