From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: Re: [PATCH v4 6/6] drm/stm: Add STM32 DSI host driver Date: Wed, 28 Jun 2017 12:18:05 +0530 Message-ID: References: <1497889685-27349-1-git-send-email-philippe.cornu@st.com> <1497889685-27349-7-git-send-email-philippe.cornu@st.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1497889685-27349-7-git-send-email-philippe.cornu@st.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Philippe CORNU , Alexandre Torgue , Thierry Reding , David Airlie , Maxime Coquelin , Russell King , Mark Rutland , Rob Herring , Arnd Bergmann , Benjamin Gaignard , Yannick Fertre , Neil Armstrong , Eric Anholt , Chris Zhong , Andrzej Hajda , Xinliang Liu , zourongrong@gmail.com, Xinwei Kong , Chen Feng , Mark Yao Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, dri-devel@lists.freedesktop.org, Fabien Dessenne , Mickael Reulier , Vincent Abriou , Gabriel Fernandez , Ludovic Barre List-Id: devicetree@vger.kernel.org CgpPbiAwNi8xOS8yMDE3IDA5OjU4IFBNLCBQaGlsaXBwZSBDT1JOVSB3cm90ZToKPiBBZGQgdGhl IFNUTTMyIERTSSBob3N0IGRyaXZlciB0aGF0IHVzZXMgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUK PiBNSVBJIERTSSBEUk0gYnJpZGdlLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFBoaWxpcHBlIENPUk5V IDxwaGlsaXBwZS5jb3JudUBzdC5jb20+Cj4gUmV2aWV3ZWQtYnk6IE5laWwgQXJtc3Ryb25nIDxu YXJtc3Ryb25nQGJheWxpYnJlLmNvbT4KClJldmlld2VkLWJ5OiBBcmNoaXQgVGFuZWphIDxhcmNo aXR0QGNvZGVhdXJvcmEub3JnPgoKPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9zdG0vS2NvbmZp ZyAgICAgICAgICAgfCAgIDcgKwo+ICAgZHJpdmVycy9ncHUvZHJtL3N0bS9NYWtlZmlsZSAgICAg ICAgICB8ICAgMiArCj4gICBkcml2ZXJzL2dwdS9kcm0vc3RtL2R3X21pcGlfZHNpLXN0bS5jIHwg MzUyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgIDMgZmlsZXMgY2hhbmdl ZCwgMzYxIGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vc3RtL2R3X21pcGlfZHNpLXN0bS5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9zdG0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0vS2NvbmZpZwo+IGluZGV4IDRiODgy MjMuLmY5NDYyYmMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3N0bS9LY29uZmlnCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL3N0bS9LY29uZmlnCj4gQEAgLTE0LDMgKzE0LDEwIEBAIGNv bmZpZyBEUk1fU1RNCj4gICAJICBTVE1pY3JvZWxlY3Ryb25pY3MgU1RNMzIgTUNVcy4KPiAgIAkg IFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBt b2R1bGUKPiAgIAkgIHdpbGwgYmUgY2FsbGVkIHN0bS1kcm0uCj4gKwo+ICtjb25maWcgRFJNX1NU TV9EU0kKPiArCXRyaXN0YXRlICJTVE1pY3JvZWxlY3Ryb25pY3Mgc3BlY2lmaWMgZXh0ZW5zaW9u cyBmb3IgU3lub3BzeXMgTUlQSSBEU0kiCj4gKwlkZXBlbmRzIG9uIERSTV9TVE0KPiArCXNlbGVj dCBEUk1fRFdfTUlQSV9EU0kKPiArCWhlbHAKPiArCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGZvciBN SVBJIERTSSBzdXBwb3J0IG9uIFNUTWljcm9lbGVjdHJvbmljcyBTb0MuCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9zdG0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vc3RtL01ha2Vm aWxlCj4gaW5kZXggYTA5ZWNmNC4uZDg4M2FkYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vc3RtL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3N0bS9NYWtlZmlsZQo+IEBA IC0yLDQgKzIsNiBAQCBzdG0tZHJtLXkgOj0gXAo+ICAgCWRydi5vIFwKPiAgIAlsdGRjLm8KPiAg IAo+ICtvYmotJChDT05GSUdfRFJNX1NUTV9EU0kpICs9IGR3X21pcGlfZHNpLXN0bS5vCj4gKwo+ ICAgb2JqLSQoQ09ORklHX0RSTV9TVE0pICs9IHN0bS1kcm0ubwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vc3RtL2R3X21pcGlfZHNpLXN0bS5jIGIvZHJpdmVycy9ncHUvZHJtL3N0bS9k d19taXBpX2RzaS1zdG0uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u MTZhZTAwZQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vc3RtL2R3X21p cGlfZHNpLXN0bS5jCj4gQEAgLTAsMCArMSwzNTIgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IChD KSBTVE1pY3JvZWxlY3Ryb25pY3MgU0EgMjAxNwo+ICsgKgo+ICsgKiBBdXRob3JzOiBQaGlsaXBw ZSBDb3JudSA8cGhpbGlwcGUuY29ybnVAc3QuY29tPgo+ICsgKiAgICAgICAgICBZYW5uaWNrIEZl cnRyZSA8eWFubmljay5mZXJ0cmVAc3QuY29tPgo+ICsgKgo+ICsgKiBMaWNlbnNlIHRlcm1zOiAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIHZlcnNpb24gMgo+ICsgKi8KPiArCj4g KyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgo+ICsj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5j bHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2JyaWRnZS9kd19taXBp X2RzaS5oPgo+ICsjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+Cj4gKwo+ICsvKiBEU0kg d3JhcHBlciByZWdpc3RlciAmIGJpdCBkZWZpbml0aW9ucyAqLwo+ICsvKiBOb3RlOiByZWdpc3Rl cnMgYXJlIG5hbWVkIGFzIGluIHRoZSBSZWZlcmVuY2UgTWFudWFsICovCj4gKyNkZWZpbmUgRFNJ X1dDRkdSCTB4MDQwMAkJLyogV3JhcHBlciBDb25GaUd1cmF0aW9uIFJlZyAqLwo+ICsjZGVmaW5l IFdDRkdSX0RTSU0JQklUKDApCQkvKiBEU0kgTW9kZSAqLwo+ICsjZGVmaW5lIFdDRkdSX0NPTE1V WAlHRU5NQVNLKDMsIDEpCS8qIENPTG9yIE1VbHRpcGxlWGluZyAqLwo+ICsKPiArI2RlZmluZSBE U0lfV0NSCQkweDA0MDQJCS8qIFdyYXBwZXIgQ29udHJvbCBSZWcgKi8KPiArI2RlZmluZSBXQ1Jf RFNJRU4JQklUKDMpCQkvKiBEU0kgRU5hYmxlICovCj4gKwo+ICsjZGVmaW5lIERTSV9XSVNSCTB4 MDQwQwkJLyogV3JhcHBlciBJbnRlcnJ1cHQgYW5kIFN0YXR1cyBSZWcgKi8KPiArI2RlZmluZSBX SVNSX1BMTExTCUJJVCg4KQkJLyogUExMIExvY2sgU3RhdHVzICovCj4gKyNkZWZpbmUgV0lTUl9S UlMJQklUKDEyKQkJLyogUmVndWxhdG9yIFJlYWR5IFN0YXR1cyAqLwo+ICsKPiArI2RlZmluZSBE U0lfV1BDUjAJMHgwNDE4CQkvKiBXcmFwcGVyIFBoeSBDb25mIFJlZyAwICovCj4gKyNkZWZpbmUg V1BDUjBfVUlYNAlHRU5NQVNLKDUsIDApCS8qIFVuaXQgSW50ZXJ2YWwgWCA0ICovCj4gKyNkZWZp bmUgV1BDUjBfVERETAlCSVQoMTYpCQkvKiBUdXJuIERpc2FibGUgRGF0YSBMYW5lcyAqLwo+ICsK PiArI2RlZmluZSBEU0lfV1JQQ1IJMHgwNDMwCQkvKiBXcmFwcGVyIFJlZ3VsYXRvciAmIFBsbCBD dHJsIFJlZyAqLwo+ICsjZGVmaW5lIFdSUENSX1BMTEVOCUJJVCgwKQkJLyogUExMIEVOYWJsZSAq Lwo+ICsjZGVmaW5lIFdSUENSX05ESVYJR0VOTUFTSyg4LCAyKQkvKiBwbGwgbG9vcCBESVZpc2lv biBGYWN0b3IgKi8KPiArI2RlZmluZSBXUlBDUl9JREYJR0VOTUFTSygxNCwgMTEpCS8qIHBsbCBJ bnB1dCBEaXZpc2lvbiBGYWN0b3IgKi8KPiArI2RlZmluZSBXUlBDUl9PREYJR0VOTUFTSygxNywg MTYpCS8qIHBsbCBPdXRwdXQgRGl2aXNpb24gRmFjdG9yICovCj4gKyNkZWZpbmUgV1JQQ1JfUkVH RU4JQklUKDI0KQkJLyogUkVHdWxhdG9yIEVOYWJsZSAqLwo+ICsjZGVmaW5lIFdSUENSX0JHUkVO CUJJVCgyOCkJCS8qIEJhbmRHYXAgUmVmZXJlbmNlIEVOYWJsZSAqLwo+ICsjZGVmaW5lIElERl9N SU4JCTEKPiArI2RlZmluZSBJREZfTUFYCQk3Cj4gKyNkZWZpbmUgTkRJVl9NSU4JMTAKPiArI2Rl ZmluZSBORElWX01BWAkxMjUKPiArI2RlZmluZSBPREZfTUlOCQkxCj4gKyNkZWZpbmUgT0RGX01B WAkJOAo+ICsKPiArLyogZHNpIGNvbG9yIGZvcm1hdCBjb2RpbmcgYWNjb3JkaW5nIHRvIHRoZSBk YXRhc2hlZXQgKi8KPiArZW51bSBkc2lfY29sb3Igewo+ICsJRFNJX1JHQjU2NV9DT05GMSwKPiAr CURTSV9SR0I1NjVfQ09ORjIsCj4gKwlEU0lfUkdCNTY1X0NPTkYzLAo+ICsJRFNJX1JHQjY2Nl9D T05GMSwKPiArCURTSV9SR0I2NjZfQ09ORjIsCj4gKwlEU0lfUkdCODg4LAo+ICt9Owo+ICsKPiAr I2RlZmluZSBMQU5FX01JTl9LQlBTCTMxMjUwCj4gKyNkZWZpbmUgTEFORV9NQVhfS0JQUwk1MDAw MDAKPiArCj4gKy8qIFNsZWVwICYgdGltZW91dCBmb3IgcmVndWxhdG9yIG9uL29mZiwgcGxsIGxv Y2svdW5sb2NrICYgZmlmbyBlbXB0eSAqLwo+ICsjZGVmaW5lIFNMRUVQX1VTCTEwMDAKPiArI2Rl ZmluZSBUSU1FT1VUX1VTCTIwMDAwMAo+ICsKPiArc3RydWN0IGR3X21pcGlfZHNpX3N0bSB7Cj4g Kwl2b2lkIF9faW9tZW0gKmJhc2U7Cj4gKwlzdHJ1Y3QgY2xrICpwbGxyZWZfY2xrOwo+ICt9Owo+ ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGRzaV93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2lfc3Rt ICpkc2ksIHUzMiByZWcsIHUzMiB2YWwpCj4gK3sKPiArCXdyaXRlbCh2YWwsIGRzaS0+YmFzZSAr IHJlZyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdTMyIGRzaV9yZWFkKHN0cnVjdCBkd19t aXBpX2RzaV9zdG0gKmRzaSwgdTMyIHJlZykKPiArewo+ICsJcmV0dXJuIHJlYWRsKGRzaS0+YmFz ZSArIHJlZyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBkc2lfc2V0KHN0cnVjdCBk d19taXBpX2RzaV9zdG0gKmRzaSwgdTMyIHJlZywgdTMyIG1hc2spCj4gK3sKPiArCWRzaV93cml0 ZShkc2ksIHJlZywgZHNpX3JlYWQoZHNpLCByZWcpIHwgbWFzayk7Cj4gK30KPiArCj4gK3N0YXRp YyBpbmxpbmUgdm9pZCBkc2lfY2xlYXIoc3RydWN0IGR3X21pcGlfZHNpX3N0bSAqZHNpLCB1MzIg cmVnLCB1MzIgbWFzaykKPiArewo+ICsJZHNpX3dyaXRlKGRzaSwgcmVnLCBkc2lfcmVhZChkc2ks IHJlZykgJiB+bWFzayk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBkc2lfdXBkYXRl X2JpdHMoc3RydWN0IGR3X21pcGlfZHNpX3N0bSAqZHNpLCB1MzIgcmVnLAo+ICsJCQkJICAgdTMy IG1hc2ssIHUzMiB2YWwpCj4gK3sKPiArCWRzaV93cml0ZShkc2ksIHJlZywgKGRzaV9yZWFkKGRz aSwgcmVnKSAmIH5tYXNrKSB8IHZhbCk7Cj4gK30KPiArCj4gK3N0YXRpYyBlbnVtIGRzaV9jb2xv ciBkc2lfY29sb3JfZnJvbV9taXBpKGVudW0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0IGZtdCkKPiAr ewo+ICsJc3dpdGNoIChmbXQpIHsKPiArCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjg4ODoKPiArCQly ZXR1cm4gRFNJX1JHQjg4ODsKPiArCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKPiArCQlyZXR1 cm4gRFNJX1JHQjY2Nl9DT05GMjsKPiArCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6 Cj4gKwkJcmV0dXJuIERTSV9SR0I2NjZfQ09ORjE7Cj4gKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1 NjU6Cj4gKwkJcmV0dXJuIERTSV9SR0I1NjVfQ09ORjE7Cj4gKwlkZWZhdWx0Ogo+ICsJCURSTV9E RUJVR19EUklWRVIoIk1JUEkgY29sb3IgaW52YWxpZCwgc28gd2UgdXNlIHJnYjg4OFxuIik7Cj4g Kwl9Cj4gKwlyZXR1cm4gRFNJX1JHQjg4ODsKPiArfQo+ICsKPiArc3RhdGljIGludCBkc2lfcGxs X2dldF9jbGtvdXRfa2h6KGludCBjbGtpbl9raHosIGludCBpZGYsIGludCBuZGl2LCBpbnQgb2Rm KQo+ICt7Cj4gKwkvKiBwcmV2ZW50IGZyb20gZGl2aXNpb24gYnkgMCAqLwo+ICsJaWYgKGlkZiAq IG9kZikKPiArCQlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QoY2xraW5fa2h6ICogbmRpdiwgaWRm ICogb2RmKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkc2lfcGxs X2dldF9wYXJhbXMoaW50IGNsa2luX2toeiwgaW50IGNsa291dF9raHosCj4gKwkJCSAgICAgIGlu dCAqaWRmLCBpbnQgKm5kaXYsIGludCAqb2RmKQo+ICt7Cj4gKwlpbnQgaSwgbywgbiwgbl9taW4s IG5fbWF4Owo+ICsJaW50IGZ2Y29fbWluLCBmdmNvX21heCwgZGVsdGEsIGJlc3RfZGVsdGE7IC8q IGFsbCBpbiBraHogKi8KPiArCj4gKwkvKiBFYXJseSBjaGVja3MgcHJldmVudGluZyBkaXZpc2lv biBieSAwICYgb2RkIHJlc3VsdHMgKi8KPiArCWlmICgoY2xraW5fa2h6IDw9IDApIHx8IChjbGtv dXRfa2h6IDw9IDApKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWZ2Y29fbWluID0gTEFO RV9NSU5fS0JQUyAqIDIgKiBPREZfTUFYOwo+ICsJZnZjb19tYXggPSBMQU5FX01BWF9LQlBTICog MiAqIE9ERl9NSU47Cj4gKwo+ICsJYmVzdF9kZWx0YSA9IDEwMDAwMDA7IC8qIGJpZyBzdGFydGVk IHZhbHVlICgxMDAwMDAwa2h6KSAqLwo+ICsKPiArCWZvciAoaSA9IElERl9NSU47IGkgPD0gSURG X01BWDsgaSsrKSB7Cj4gKwkJLyogQ29tcHV0ZSBuZGl2IHJhbmdlIGFjY29yZGluZyB0byBGdmNv ICovCj4gKwkJbl9taW4gPSAoKGZ2Y29fbWluICogaSkgLyAoMiAqIGNsa2luX2toeikpICsgMTsK PiArCQluX21heCA9IChmdmNvX21heCAqIGkpIC8gKDIgKiBjbGtpbl9raHopOwo+ICsKPiArCQkv KiBObyBuZWVkIHRvIGNvbnRpbnVlIGlkZiBsb29wIGlmIHdlIHJlYWNoIG5kaXYgbWF4ICovCj4g KwkJaWYgKG5fbWluID49IE5ESVZfTUFYKQo+ICsJCQlicmVhazsKPiArCj4gKwkJLyogQ2xhbXAg bmRpdiB0byB2YWxpZCB2YWx1ZXMgKi8KPiArCQlpZiAobl9taW4gPCBORElWX01JTikKPiArCQkJ bl9taW4gPSBORElWX01JTjsKPiArCQlpZiAobl9tYXggPiBORElWX01BWCkKPiArCQkJbl9tYXgg PSBORElWX01BWDsKPiArCj4gKwkJZm9yIChvID0gT0RGX01JTjsgbyA8PSBPREZfTUFYOyBvICo9 IDIpIHsKPiArCQkJbiA9IERJVl9ST1VORF9DTE9TRVNUKGkgKiBvICogY2xrb3V0X2toeiwgY2xr aW5fa2h6KTsKPiArCQkJLyogQ2hlY2sgbmRpdiBhY2NvcmRpbmcgdG8gdmNvIHJhbmdlICovCj4g KwkJCWlmICgobiA8IG5fbWluKSB8fCAobiA+IG5fbWF4KSkKPiArCQkJCWNvbnRpbnVlOwo+ICsJ CQkvKiBDaGVjayBpZiBuZXcgZGVsdGEgaXMgYmV0dGVyICYgc2F2ZXMgcGFyYW1ldGVycyAqLwo+ ICsJCQlkZWx0YSA9IGRzaV9wbGxfZ2V0X2Nsa291dF9raHooY2xraW5fa2h6LCBpLCBuLCBvKSAt Cj4gKwkJCQljbGtvdXRfa2h6Owo+ICsJCQlpZiAoZGVsdGEgPCAwKQo+ICsJCQkJZGVsdGEgPSAt ZGVsdGE7Cj4gKwkJCWlmIChkZWx0YSA8IGJlc3RfZGVsdGEpIHsKPiArCQkJCSppZGYgPSBpOwo+ ICsJCQkJKm5kaXYgPSBuOwo+ICsJCQkJKm9kZiA9IG87Cj4gKwkJCQliZXN0X2RlbHRhID0gZGVs dGE7Cj4gKwkJCX0KPiArCQkJLyogZmFzdCByZXR1cm4gaW4gY2FzZSBvZiAicGVyZmVjdCByZXN1 bHQiICovCj4gKwkJCWlmICghZGVsdGEpCj4gKwkJCQlyZXR1cm4gMDsKPiArCQl9Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfcGh5X2lu aXQodm9pZCAqcHJpdl9kYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfc3RtICpkc2kg PSBwcml2X2RhdGE7Cj4gKwl1MzIgdmFsOwo+ICsJaW50IHJldDsKPiArCj4gKwkvKiBFbmFibGUg dGhlIHJlZ3VsYXRvciAqLwo+ICsJZHNpX3NldChkc2ksIERTSV9XUlBDUiwgV1JQQ1JfUkVHRU4g fCBXUlBDUl9CR1JFTik7Cj4gKwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoZHNpLT5iYXNlICsg RFNJX1dJU1IsIHZhbCwgdmFsICYgV0lTUl9SUlMsCj4gKwkJCQkgU0xFRVBfVVMsIFRJTUVPVVRf VVMpOwo+ICsJaWYgKHJldCkKPiArCQlEUk1fREVCVUdfRFJJVkVSKCIhVElNRU9VVCEgd2FpdGlu ZyBSRUdVLCBsZXQncyBjb250aW51ZVxuIik7Cj4gKwo+ICsJLyogRW5hYmxlIHRoZSBEU0kgUExM ICYgd2FpdCBmb3IgaXRzIGxvY2sgKi8KPiArCWRzaV9zZXQoZHNpLCBEU0lfV1JQQ1IsIFdSUENS X1BMTEVOKTsKPiArCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChkc2ktPmJhc2UgKyBEU0lfV0lT UiwgdmFsLCB2YWwgJiBXSVNSX1BMTExTLAo+ICsJCQkJIFNMRUVQX1VTLCBUSU1FT1VUX1VTKTsK PiArCWlmIChyZXQpCj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiIVRJTUVPVVQhIHdhaXRpbmcgUExM LCBsZXQncyBjb250aW51ZVxuIik7Cj4gKwo+ICsJLyogRW5hYmxlIHRoZSBEU0kgd3JhcHBlciAq Lwo+ICsJZHNpX3NldChkc2ksIERTSV9XQ1IsIFdDUl9EU0lFTik7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiArZHdfbWlwaV9kc2lfZ2V0X2xhbmVfbWJwcyh2b2lk ICpwcml2X2RhdGEsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ICsJCQkgIHVuc2ln bmVkIGxvbmcgbW9kZV9mbGFncywgdTMyIGxhbmVzLCB1MzIgZm9ybWF0LAo+ICsJCQkgIHVuc2ln bmVkIGludCAqbGFuZV9tYnBzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfc3RtICpkc2kg PSBwcml2X2RhdGE7Cj4gKwl1bnNpZ25lZCBpbnQgaWRmLCBuZGl2LCBvZGYsIHBsbF9pbl9raHos IHBsbF9vdXRfa2h6Owo+ICsJaW50IHJldCwgYnBwOwo+ICsJdTMyIHZhbDsKPiArCj4gKwlwbGxf aW5fa2h6ID0gKHVuc2lnbmVkIGludCkoY2xrX2dldF9yYXRlKGRzaS0+cGxscmVmX2NsaykgLyAx MDAwKTsKPiArCj4gKwkvKiBDb21wdXRlIHJlcXVlc3RlZCBwbGwgb3V0ICovCj4gKwlicHAgPSBt aXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKGZvcm1hdCk7Cj4gKwlwbGxfb3V0X2toeiA9IG1v ZGUtPmNsb2NrICogYnBwIC8gbGFuZXM7Cj4gKwkvKiBBZGQgMjAlIHRvIHBsbCBvdXQgdG8gYmUg aGlnaGVyIHRoYW4gcGl4ZWwgYncgKGJ1cnN0IG1vZGUgb25seSkgKi8KPiArCXBsbF9vdXRfa2h6 ID0gKHBsbF9vdXRfa2h6ICogMTIpIC8gMTA7Cj4gKwlpZiAocGxsX291dF9raHogPiBMQU5FX01B WF9LQlBTKSB7Cj4gKwkJcGxsX291dF9raHogPSBMQU5FX01BWF9LQlBTOwo+ICsJCURSTV9XQVJO KCJXYXJuaW5nIG1heCBwaHkgbWJwcyBpcyB1c2VkXG4iKTsKPiArCX0KPiArCWlmIChwbGxfb3V0 X2toeiA8IExBTkVfTUlOX0tCUFMpIHsKPiArCQlwbGxfb3V0X2toeiA9IExBTkVfTUlOX0tCUFM7 Cj4gKwkJRFJNX1dBUk4oIldhcm5pbmcgbWluIHBoeSBtYnBzIGlzIHVzZWRcbiIpOwo+ICsJfQo+ ICsKPiArCS8qIENvbXB1dGUgYmVzdCBwbGwgcGFyYW1ldGVycyAqLwo+ICsJaWRmID0gMDsKPiAr CW5kaXYgPSAwOwo+ICsJb2RmID0gMDsKPiArCXJldCA9IGRzaV9wbGxfZ2V0X3BhcmFtcyhwbGxf aW5fa2h6LCBwbGxfb3V0X2toeiwgJmlkZiwgJm5kaXYsICZvZGYpOwo+ICsJaWYgKHJldCkKPiAr CQlEUk1fV0FSTigiV2FybmluZyBkc2lfcGxsX2dldF9wYXJhbXMoKTogYmFkIHBhcmFtc1xuIik7 Cj4gKwo+ICsJLyogR2V0IHRoZSBhZGp1c3RlZCBwbGwgb3V0IHZhbHVlICovCj4gKwlwbGxfb3V0 X2toeiA9IGRzaV9wbGxfZ2V0X2Nsa291dF9raHoocGxsX2luX2toeiwgaWRmLCBuZGl2LCBvZGYp Owo+ICsKPiArCS8qIFNldCB0aGUgUExMIGRpdmlzaW9uIGZhY3RvcnMgKi8KPiArCWRzaV91cGRh dGVfYml0cyhkc2ksIERTSV9XUlBDUiwJV1JQQ1JfTkRJViB8IFdSUENSX0lERiB8IFdSUENSX09E RiwKPiArCQkJKG5kaXYgPDwgMikgfCAoaWRmIDw8IDExKSB8ICgoZmZzKG9kZikgLSAxKSA8PCAx NikpOwo+ICsKPiArCS8qIENvbXB1dGUgdWl4NCAmIHNldCB0aGUgYml0IHBlcmlvZCBpbiBoaWdo LXNwZWVkIG1vZGUgKi8KPiArCXZhbCA9IDQwMDAwMDAgLyBwbGxfb3V0X2toejsKPiArCWRzaV91 cGRhdGVfYml0cyhkc2ksIERTSV9XUENSMCwgV1BDUjBfVUlYNCwgdmFsKTsKPiArCj4gKwkvKiBT ZWxlY3QgdmlkZW8gbW9kZSBieSByZXNldHRpbmcgRFNJTSBiaXQgKi8KPiArCWRzaV9jbGVhcihk c2ksIERTSV9XQ0ZHUiwgV0NGR1JfRFNJTSk7Cj4gKwo+ICsJLyogU2VsZWN0IHRoZSBjb2xvciBj b2RpbmcgKi8KPiArCWRzaV91cGRhdGVfYml0cyhkc2ksIERTSV9XQ0ZHUiwgV0NGR1JfQ09MTVVY LAo+ICsJCQlkc2lfY29sb3JfZnJvbV9taXBpKGZvcm1hdCkgPDwgMSk7Cj4gKwo+ICsJKmxhbmVf bWJwcyA9IHBsbF9vdXRfa2h6IC8gMTAwMDsKPiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCJwbGxf aW4gJXVrSHogcGxsX291dCAldWtIeiBsYW5lX21icHMgJXVNSHpcbiIsCj4gKwkJCSBwbGxfaW5f a2h6LCBwbGxfb3V0X2toeiwgKmxhbmVfbWJwcyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGh5X29wcyBkd19taXBpX2RzaV9zdG1fcGh5 X29wcyA9IHsKPiArCS5pbml0ID0gZHdfbWlwaV9kc2lfcGh5X2luaXQsCj4gKwkuZ2V0X2xhbmVf bWJwcyA9IGR3X21pcGlfZHNpX2dldF9sYW5lX21icHMsCj4gK307Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSBkd19taXBpX2RzaV9zdG1fcGxhdF9kYXRhID0gewo+ ICsJLm1heF9kYXRhX2xhbmVzID0gMiwKPiArCS5waHlfb3BzID0gJmR3X21pcGlfZHNpX3N0bV9w aHlfb3BzLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZHdf bWlwaV9kc2lfc3RtX2R0X2lkc1tdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJzdCxzdG0zMi1k c2kiLCAuZGF0YSA9ICZkd19taXBpX2RzaV9zdG1fcGxhdF9kYXRhLCB9LAo+ICsJeyB9LAo+ICt9 Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkd19taXBpX2RzaV9zdG1fZHRfaWRzKTsKPiAr Cj4gK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfc3RtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlz dHJ1Y3QgZHdfbWlwaV9kc2lfc3RtICpkc2k7Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiAr CWludCByZXQ7Cj4gKwo+ICsJZHNpID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkc2kpLCBH RlBfS0VSTkVMKTsKPiArCWlmICghZHNpKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXJl cyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4gKwlp ZiAoIXJlcykgewo+ICsJCURSTV9FUlJPUigiVW5hYmxlIHRvIGdldCByZXNvdXJjZVxuIik7Cj4g KwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJZHNpLT5iYXNlID0gZGV2bV9pb3JlbWFw X3Jlc291cmNlKGRldiwgcmVzKTsKPiArCWlmIChJU19FUlIoZHNpLT5iYXNlKSkgewo+ICsJCURS TV9FUlJPUigiVW5hYmxlIHRvIGdldCBkc2kgcmVnaXN0ZXJzXG4iKTsKPiArCQlyZXR1cm4gUFRS X0VSUihkc2ktPmJhc2UpOwo+ICsJfQo+ICsKPiArCWRzaS0+cGxscmVmX2NsayA9IGRldm1fY2xr X2dldChkZXYsICJyZWYiKTsKPiArCWlmIChJU19FUlIoZHNpLT5wbGxyZWZfY2xrKSkgewo+ICsJ CXJldCA9IFBUUl9FUlIoZHNpLT5wbGxyZWZfY2xrKTsKPiArCQlkZXZfZXJyKGRldiwgIlVuYWJs ZSB0byBnZXQgcGxsIHJlZmVyZW5jZSBjbG9jazogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJl dDsKPiArCX0KPiArCj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wbGxyZWZfY2xr KTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgIiVzOiBGYWlsZWQgdG8gZW5hYmxl IHBsbHJlZl9jbGtcbiIsIF9fZnVuY19fKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiAr CWR3X21pcGlfZHNpX3N0bV9wbGF0X2RhdGEuYmFzZSA9IGRzaS0+YmFzZTsKPiArCWR3X21pcGlf ZHNpX3N0bV9wbGF0X2RhdGEucHJpdl9kYXRhID0gZHNpOwo+ICsKPiArCXJldCA9IGR3X21pcGlf ZHNpX3Byb2JlKHBkZXYsICZkd19taXBpX2RzaV9zdG1fcGxhdF9kYXRhKTsKPiArCWlmIChyZXQp IHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIG1pcGkgZHNpIGhvc3RcbiIp Owo+ICsJCWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBsbHJlZl9jbGspOwo+ICsJfQo+ICsK PiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfc3RtX3Jl bW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfbWlw aV9kc2lfc3RtICpkc2kgPSBkd19taXBpX2RzaV9zdG1fcGxhdF9kYXRhLnByaXZfZGF0YTsKPiAr Cj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5wbGxyZWZfY2xrKTsKPiArCWR3X21pcGlf ZHNpX3JlbW92ZShwZGV2KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHdfbWlwaV9kc2lfc3RtX2RyaXZlciA9IHsKPiArCS5wcm9i ZQkJPSBkd19taXBpX2RzaV9zdG1fcHJvYmUsCj4gKwkucmVtb3ZlCQk9IGR3X21pcGlfZHNpX3N0 bV9yZW1vdmUsCj4gKwkuZHJpdmVyCQk9IHsKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBkd19taXBp X2RzaV9zdG1fZHRfaWRzLAo+ICsJCS5uYW1lCT0gImR3X21pcGlfZHNpLXN0bSIsCj4gKwl9LAo+ ICt9Owo+ICsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihkd19taXBpX2RzaV9zdG1fZHJpdmVy KTsKPiArCj4gK01PRFVMRV9BVVRIT1IoIlBoaWxpcHBlIENvcm51IDxwaGlsaXBwZS5jb3JudUBz dC5jb20+Iik7Cj4gK01PRFVMRV9BVVRIT1IoIllhbm5pY2sgRmVydHJlIDx5YW5uaWNrLmZlcnRy ZUBzdC5jb20+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiU1RNaWNyb2VsZWN0cm9uaWNzIERX IE1JUEkgRFNJIGhvc3QgY29udHJvbGxlciBkcml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQ TCB2MiIpOwo+IAoKLS0gClF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVt YmVyIG9mIENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2 ZSBQcm9qZWN0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=