From mboxrd@z Thu Jan 1 00:00:00 1970 From: CK Hu Subject: Re: [PATCH v5 07/10] drm/mediatek: add dsi transfer function Date: Tue, 2 Aug 2016 14:55:58 +0800 Message-ID: <1470120958.16554.16.camel@mtksdaap41> References: <1469698084-20185-1-git-send-email-yt.shen@mediatek.com> <1469698084-20185-8-git-send-email-yt.shen@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1469698084-20185-8-git-send-email-yt.shen@mediatek.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: YT Shen Cc: Mark Rutland , dri-devel@lists.freedesktop.org, Russell King , Mao Huang , yingjoe.chen@mediatek.com, devicetree@vger.kernel.org, Sascha Hauer , Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , shaoming chen , linux-arm-kernel@lists.infradead.org, srv_heupstream@mediatek.com, emil.l.velikov@gmail.com, linux-kernel@vger.kernel.org, Kumar Gala List-Id: linux-mediatek@lists.infradead.org SGksIFlUOgoKT24gVGh1LCAyMDE2LTA3LTI4IGF0IDE3OjI4ICswODAwLCBZVCBTaGVuIHdyb3Rl Ogo+IEZyb206IHNoYW9taW5nIGNoZW4gPHNoYW9taW5nLmNoZW5AbWVkaWF0ZWsuY29tPgo+IAo+ IGFkZCBkc2kgcmVhZC93cml0ZSBjb21tYW5kcyBmb3IgdHJhbnNmZXIgZnVuY3Rpb24KPiAKPiBT aWduZWQtb2ZmLWJ5OiBzaGFvbWluZyBjaGVuIDxzaGFvbWluZy5jaGVuQG1lZGlhdGVrLmNvbT4K PiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kc2kuYyB8ICAyODYgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDEgZmlsZSBjaGFuZ2VkLCAyODYgaW5z ZXJ0aW9ucygrKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RzaS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kc2kuYwo+IGluZGV4IDU1MzQ0 M2EuLjFkMzY1MjQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k c2kuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMKPiBAQCAtMjQs NiArMjQsNyBAQAo+ICAjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KPiAgI2luY2x1ZGUgPGxp bnV4L3BoeS9waHkuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsj aW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+Cj4gICNpbmNsdWRlIDx2aWRlby92aWRlb21v ZGUuaD4KPiAgCj4gICNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCj4gQEAgLTgxLDggKzgy LDE2IEBACj4gICNkZWZpbmUgRFNJX0hCUF9XQwkJMHg1NAo+ICAjZGVmaW5lIERTSV9IRlBfV0MJ CTB4NTgKPiAgCj4gKyNkZWZpbmUgRFNJX0NNRFFfU0laRQkJMHg2MAo+ICsjZGVmaW5lIENNRFFf U0laRQkJMHgzZgo+ICsKPiAgI2RlZmluZSBEU0lfSFNUWF9DS0xfV0MJCTB4NjQKPiAgCj4gKyNk ZWZpbmUgRFNJX1JYX0RBVEEwCQkweDc0Cj4gKyNkZWZpbmUgRFNJX1JYX0RBVEExCQkweDc4Cj4g KyNkZWZpbmUgRFNJX1JYX0RBVEEyCQkweDdjCj4gKyNkZWZpbmUgRFNJX1JYX0RBVEEzCQkweDgw Cj4gKwo+ICAjZGVmaW5lIERTSV9SQUNLCQkweDg0Cj4gICNkZWZpbmUgUkFDSwkJCQlCSVQoMCkK PiAgCj4gQEAgLTExOCw4ICsxMjcsMjUgQEAKPiAgI2RlZmluZSBDTEtfSFNfUE9TVAkJCSgweGZm IDw8IDgpCj4gICNkZWZpbmUgQ0xLX0hTX0VYSVQJCQkoMHhmZiA8PCAxNikKPiAgCj4gKyNkZWZp bmUgRFNJX0NNRFEwCQkweDE4MAo+ICsKPiAgI2RlZmluZSBOU19UT19DWUNMRShuLCBjKSAgICAo KG4pIC8gKGMpICsgKCgobikgJSAoYykpID8gMSA6IDApKQo+ICAKPiArI2RlZmluZSBNVEtfRFNJ X0hPU1RfSVNfUkVBRCh0eXBlKSBcCj4gKwkoKHR5cGUgPT0gTUlQSV9EU0lfR0VORVJJQ19SRUFE X1JFUVVFU1RfMF9QQVJBTSkgfHwgXAo+ICsJKHR5cGUgPT0gTUlQSV9EU0lfR0VORVJJQ19SRUFE X1JFUVVFU1RfMV9QQVJBTSkgfHwgXAo+ICsJKHR5cGUgPT0gTUlQSV9EU0lfR0VORVJJQ19SRUFE X1JFUVVFU1RfMl9QQVJBTSkgfHwgXAo+ICsJKHR5cGUgPT0gTUlQSV9EU0lfRENTX1JFQUQpKQo+ ICsKPiArI2RlZmluZSBNVEtfRFNJX0hPU1RfSVNfV1JJVEUodHlwZSkgXAo+ICsJKCh0eXBlID09 IE1JUElfRFNJX0dFTkVSSUNfU0hPUlRfV1JJVEVfMF9QQVJBTSkgfHwgXAo+ICsJKHR5cGUgPT0g TUlQSV9EU0lfR0VORVJJQ19TSE9SVF9XUklURV8xX1BBUkFNKSB8fCBcCj4gKwkodHlwZSA9PSBN SVBJX0RTSV9HRU5FUklDX1NIT1JUX1dSSVRFXzJfUEFSQU0pIHx8IFwKPiArCSh0eXBlID09IE1J UElfRFNJX0RDU19TSE9SVF9XUklURSkgfHwgXAo+ICsJKHR5cGUgPT0gTUlQSV9EU0lfRENTX1NI T1JUX1dSSVRFX1BBUkFNKSB8fCBcCj4gKwkodHlwZSA9PSBNSVBJX0RTSV9HRU5FUklDX0xPTkdf V1JJVEUpIHx8IFwKPiArCSh0eXBlID09IE1JUElfRFNJX0RDU19MT05HX1dSSVRFKSkKPiArCj4g IHN0cnVjdCBwaHk7Cj4gIAo+ICBzdHJ1Y3QgbXRrX2RzaSB7Cj4gQEAgLTE0OSw2ICsxNzUsMTcg QEAgc3RydWN0IG10a19kc2kgewo+ICAJaW50IGlycV9kYXRhOwo+ICB9Owo+ICAKPiArc3RydWN0 IGRzaV9yeHR4X2RhdGEgewo+ICsJdTggYnl0ZTA7Cj4gKwl1OCBieXRlMTsKPiArCXU4IGJ5dGUy Owo+ICsJdTggYnl0ZTM7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHNpX3R4X2NtZHFfcmVncyB7Cj4g KwlzdHJ1Y3QgZHNpX3J4dHhfZGF0YSBkYXRhWzEyOF07Cj4gK307Cj4gKwo+ICBzdGF0aWMgd2Fp dF9xdWV1ZV9oZWFkX3QgX2RzaV9jbWRfZG9uZV93YWl0X3F1ZXVlOwo+ICBzdGF0aWMgd2FpdF9x dWV1ZV9oZWFkX3QgX2RzaV9kY3NfcmVhZF93YWl0X3F1ZXVlOwo+ICBzdGF0aWMgd2FpdF9xdWV1 ZV9oZWFkX3QgX2RzaV93YWl0X3ZtX2RvbmVfcXVldWU7Cj4gQEAgLTgxMyw5ICs4NTAsMjU4IEBA IHN0YXRpYyBpbnQgbXRrX2RzaV9ob3N0X2RldGFjaChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9z dCwKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZCBtdGtfZHNpX3NldF9jbWRx KHZvaWQgX19pb21lbSAqcmVnLCB1MzIgbWFzaywgdTMyIGRhdGEpCj4gK3sKPiArCXUzMiB0ZW1w ID0gcmVhZGwocmVnKTsKPiArCj4gKwl3cml0ZWwoKHRlbXAgJiB+bWFzaykgfCAoZGF0YSAmIG1h c2spLCByZWcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtdGtfZHNpX3dhaXRfZm9yX2lkbGUo c3RydWN0IG10a19kc2kgKmRzaSkKPiArewo+ICsJdTMyIHRpbWVvdXRfbXMgPSA1MDAwMDA7IC8q IHRvdGFsIDFzIH4gMnMgdGltZW91dCAqLwo+ICsKPiArCXdoaWxlICh0aW1lb3V0X21zLS0pIHsK PiArCQlpZiAoIShyZWFkbChkc2ktPnJlZ3MgKyBEU0lfSU5UU1RBKSAmIERTSV9CVVNZKSkKPiAr CQkJYnJlYWs7Cj4gKwo+ICsJCXVzbGVlcF9yYW5nZSgyLCA0KTsKPiArCX0KPiArCj4gKwlpZiAo dGltZW91dF9tcyA9PSAwKSB7Cj4gKwkJZGV2X2luZm8oZHNpLT5kZXYsICJwb2xsaW5nIGRzaSB3 YWl0IG5vdCBidXN5IHRpbWVvdXQhXG4iKTsKPiArCj4gKwkJbXRrX2RzaV9lbmFibGUoZHNpKTsK PiArCQltdGtfZHNpX3Jlc2V0X2VuZ2luZShkc2kpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBtdGtfZHNpX3dhaXRfZm9yX2NtZF9kb25lKHN0cnVjdCBtdGtfZHNpICpkc2kpCj4gK3sK PiArCXMzMiByZXQgPSAwOwo+ICsJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gbXNlY3NfdG9famlm Zmllcyg1MDApOwo+ICsKPiArCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0 KF9kc2lfY21kX2RvbmVfd2FpdF9xdWV1ZSwKPiArCQkJZHNpLT5pcnFfZGF0YSAmIENNRF9ET05F X0lOVF9GTEFHLCB0aW1lb3V0KTsKPiArCWlmIChyZXQgPT0gMCkgewo+ICsJCWRldl9pbmZvKGRz aS0+ZGV2LCAiZHNpIHdhaXQgZW5naW5lIGNtZCBkb25lIGZhaWxcbiIpOwo+ICsJCW10a19kc2lf ZW5hYmxlKGRzaSk7Cj4gKwkJbXRrX2RzaV9yZXNldF9lbmdpbmUoZHNpKTsKPiArCQlyZXR1cm47 Cj4gKwl9Cj4gKwo+ICsJZHNpLT5pcnFfZGF0YSAmPSB+Q01EX0RPTkVfSU5UX0ZMQUc7CgpJIHRo aW5rIHlvdSBzaG91bGQgbW92ZSB0aGlzIGJlZm9yZSB0cmlnZ2VyIEhXLiBTb21ldGltZXMgdGhp cyBpbnRlcnJ1cHQKaXMgY29taW5nIGFuZCB0aGlzIGZsYWcgaXMgc2V0IGJ1dCB5b3UgZG8gbm90 IHdhaXQgdGhpcyBldmVudCBhbmQgZG8gbm90CmNsZWFyIGl0LiBUaGVuIHdoZW4geW91IHdhbnQg dG8gd2FpdCwgdGhlIGZsYWcgaXMgYWxyZWFkeSBzZXQgYnkgbG9uZwp0aW1lIGFnbyBpbnRlcnJ1 cHQuCgo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBtdGtfZHNpX2hvc3RfcmVhZF9jbWQoc3Ry dWN0IG10a19kc2kgKmRzaSwKPiArCQkJCSAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAq bXNnKQo+ICt7Cj4gKwl1OCBtYXhfdHJ5X2NvdW50ID0gNTsKPiArCXUzMiByZWN2X2NudCwgdG1w X3ZhbDsKPiArCXN0cnVjdCBkc2lfcnh0eF9kYXRhIHJlYWRfZGF0YTAsIHJlYWRfZGF0YTEsIHJl YWRfZGF0YTIsIHJlYWRfZGF0YTM7Cj4gKwl1OCBjb25maWcsIHR5cGUsIGRhdGEwLCBkYXRhMTsK PiArCXMzMiByZXQ7Cj4gKwo+ICsJdTggKmJ1ZmZlciA9IG1zZy0+cnhfYnVmOwo+ICsJdTggYnVm ZmVyX3NpemUgPSBtc2ctPnJ4X2xlbjsKPiArCj4gKwlpZiAocmVhZGwoZHNpLT5yZWdzICsgRFNJ X01PREVfQ1RSTCkgJiAweDAzKSB7Cj4gKwkJZGV2X2luZm8oZHNpLT5kZXYsICJkc2kgZW5naW5l IGlzIG5vdCBjb21tYW5kIG1vZGVcbiIpOwo+ICsJCXJldHVybiAtMTsKPiArCX0KPiArCj4gKwlp ZiAoIWJ1ZmZlcikgewo+ICsJCWRldl9pbmZvKGRzaS0+ZGV2LCAiZHNpIHJlY2VpdmUgYnVmZmVy IHNpemUgbWF5IGJlIE5VTExcbiIpOwo+ICsJCXJldHVybiAtMTsKPiArCX0KPiArCj4gKwlkbyB7 Cj4gKwkJaWYgKG1heF90cnlfY291bnQgPT0gMCkgewo+ICsJCQlkZXZfaW5mbyhkc2ktPmRldiwg ImRzaSBlbmdpbmUgcmVhZCBjb3VudGVyIGhhcyBiZWVuIG1heGludW1cbiIpOwo+ICsJCQlyZXR1 cm4gLTE7Cj4gKwkJfQo+ICsKPiArCQltYXhfdHJ5X2NvdW50LS07Cj4gKwkJcmVjdl9jbnQgPSAw Owo+ICsKPiArCQltdGtfZHNpX3dhaXRfZm9yX2lkbGUoZHNpKTsKPiArCj4gKwkJY29uZmlnID0g MHgwNDsKPiArCQlkYXRhMCA9ICooKHU4ICopKG1zZy0+dHhfYnVmKSk7Cj4gKwo+ICsJCWlmIChi dWZmZXJfc2l6ZSA8IDMpCj4gKwkJCXR5cGUgPSBNSVBJX0RTSV9EQ1NfUkVBRDsKPiArCQllbHNl Cj4gKwkJCXR5cGUgPSBNSVBJX0RTSV9HRU5FUklDX1JFQURfUkVRVUVTVF8xX1BBUkFNOwo+ICsK PiArCQlkYXRhMSA9IDA7Cj4gKwo+ICsJCXRtcF92YWwgPSAoZGF0YTEgPDwgMjQpIHwgKGRhdGEw IDw8IDE2KSB8ICh0eXBlIDw8IDgpIHwgY29uZmlnOwo+ICsKPiArCQl3cml0ZWwodG1wX3ZhbCwg ZHNpLT5yZWdzICsgRFNJX0NNRFEwKTsKPiArCQltdGtfZHNpX21hc2soZHNpLCBEU0lfQ01EUV9T SVpFLCBDTURRX1NJWkUsIDEpOwo+ICsKPiArCQltdGtfZHNpX3N0YXJ0KGRzaSk7CgpUaGlzIHBh cnQgbG9va3MgbGlrZSB0aGUgc2FtZSBhcyBtdGtfZHNpX2hvc3Rfd3JpdGVfY21kKCkgd2l0aApt c2ctPnR4X2xlbiA9IDEuIE1heWJlIHlvdSBjYW4gdHJ5IHRvIG1lcmdlIHRoZXNlIHR3byBwYXJ0 LgoKPiArCj4gKwkJLyogMnMgdGltZW91dCovCj4gKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1 cHRpYmxlX3RpbWVvdXQoX2RzaV9kY3NfcmVhZF93YWl0X3F1ZXVlLAo+ICsJCQkJZHNpLT5pcnFf ZGF0YSAmIExQUlhfUkRfUkRZX0lOVF9GTEFHLCB0aW1lb3V0KTsKPiArCQlpZiAocmV0ID09IDAp IHsKPiArCQkJZGV2X2luZm8oZHNpLT5kZXYsICJXYWl0IERTSSByZWFkIHJlYWR5IHRpbWVvdXQh ISFcbiIpOwo+ICsKPiArCQkJbXRrX2RzaV9lbmFibGUoZHNpKTsKPiArCQkJbXRrX2RzaV9yZXNl dF9lbmdpbmUoZHNpKTsKPiArCj4gKwkJCXJldHVybiByZXQ7Cj4gKwkJfQo+ICsKPiArCQlkc2kt PmlycV9kYXRhICY9IH5MUFJYX1JEX1JEWV9JTlRfRkxBRzsKCkkgdGhpbmsgeW91IHNob3VsZCBt b3ZlIHRoaXMgYmVmb3JlIHRyaWdnZXIgSFcuIFNvbWV0aW1lcyB0aGlzIGludGVycnVwdAppcyBj b21pbmcgYW5kIHRoaXMgZmxhZyBpcyBzZXQgYnV0IHlvdSBkbyBub3Qgd2FpdCB0aGlzIGV2ZW50 IGFuZCBkbyBub3QKY2xlYXIgaXQuIFRoZW4gd2hlbiB5b3Ugd2FudCB0byB3YWl0LCB0aGUgZmxh ZyBpcyBhbHJlYWR5IHNldCBieSBsb25nCnRpbWUgYWdvIGludGVycnVwdC4KCj4gKwo+ICsJCSoo dTMyICopKCZyZWFkX2RhdGEwKSA9IHJlYWRsKGRzaS0+cmVncyArIERTSV9SWF9EQVRBMCk7Cj4g KwkJKih1MzIgKikoJnJlYWRfZGF0YTEpID0gcmVhZGwoZHNpLT5yZWdzICsgRFNJX1JYX0RBVEEx KTsKPiArCQkqKHUzMiAqKSgmcmVhZF9kYXRhMikgPSByZWFkbChkc2ktPnJlZ3MgKyBEU0lfUlhf REFUQTIpOwo+ICsJCSoodTMyICopKCZyZWFkX2RhdGEzKSA9IHJlYWRsKGRzaS0+cmVncyArIERT SV9SWF9EQVRBMyk7Cj4gKwo+ICsJCXR5cGUgPSByZWFkX2RhdGEwLmJ5dGUwOwo+ICsKPiArCQlp ZiAodHlwZSA9PSBNSVBJX0RTSV9SWF9HRU5FUklDX0xPTkdfUkVBRF9SRVNQT05TRSB8fAo+ICsJ CSAgICB0eXBlID09IE1JUElfRFNJX1JYX0RDU19MT05HX1JFQURfUkVTUE9OU0UpIHsKPiArCj4g KwkJCS8qCj4gKwkJCSAqIERhdGEgSUQoMSBieXRlKSArIFdvcmQgQ291bnQoMiBieXRlcykgKyBF Q0MoMSBieXRlKSArCj4gKwkJCSAqIGRhdGEgMCArIC4uLisgZGF0YSBXQy0xICsgQ0hFQ0tTVU0g KDIgYnl0ZXMpCgpJcyBDSEVDS1NVTSB1c2VsZXNzPyBXaHkgbm90IGNoZWNrIGl0PwoKPiArCQkJ ICovCj4gKwkJCXJlY3ZfY250ID0gcmVhZF9kYXRhMC5ieXRlMSArIHJlYWRfZGF0YTAuYnl0ZTIg KiAxNjsKPiArCQkJZGV2X2luZm8oZHNpLT5kZXYsICJsb25nIHBhY2tldCBzaXplOiAlZFxuIiwg cmVjdl9jbnQpOwo+ICsKPiArCQkJLyoKPiArCQkJICogdGhlIGJ1ZmZlciBzaXplIGlzIDE2IGJ5 dGVzIG9uY2UsIHNvIHRoZSBkYXRhIHBheWxvYWQKPiArCQkJICogaXMsIDE2IC0gYnl0ZXMoZGF0 YSBJRCArIFdDICsgRUNDICsgQ0hFQ0tTVU0pLCBpZgo+ICsJCQkgKiBvdmVyIDEwIGJ5dGVzLCBp dCB3aWxsIGJlIHJlYWQgYWdhaW4KPiArCQkJICovCj4gKwkJCWlmIChyZWN2X2NudCA+IDEwKQo+ ICsJCQkJcmVjdl9jbnQgPSAxMDsKPiArCj4gKwkJCWlmIChyZWN2X2NudCA+IGJ1ZmZlcl9zaXpl KQo+ICsJCQkJcmVjdl9jbnQgPSBidWZmZXJfc2l6ZTsKPiArCj4gKwkJCWlmIChyZWN2X2NudCA8 PSA0KSB7Cj4gKwkJCQltZW1jcHkoYnVmZmVyLCAmcmVhZF9kYXRhMSwgcmVjdl9jbnQpOwo+ICsJ CQl9IGVsc2UgaWYgKHJlY3ZfY250IDw9IDgpIHsKPiArCQkJCW1lbWNweShidWZmZXIsICZyZWFk X2RhdGExLCA0KTsKPiArCQkJCW1lbWNweShidWZmZXIgKyA0LCAmcmVhZF9kYXRhMiwgcmVjdl9j bnQgLSA0KTsKPiArCQkJfSBlbHNlIHsKPiArCQkJCW1lbWNweShidWZmZXIsICZyZWFkX2RhdGEx LCA0KTsKPiArCQkJCW1lbWNweShidWZmZXIgKyA0LCAmcmVhZF9kYXRhMiwgNCk7Cj4gKwkJCQlt ZW1jcHkoYnVmZmVyICsgOCwgJnJlYWRfZGF0YTMsIHJlY3ZfY250IC0gOCk7Cj4gKwkJCX0KCkkg dGhpbmsgeW91IGNhbiBpZ25vcmUgcmVhZF9kYXRhMSwgcmVhZF9kYXRhMiwgYW5kIHJlYWRfZGF0 YTMuIFVzaW5nIGEKJ2ZvciBsb29wJyBhbmQgcmVhZGIoKSBoZXJlIGNhbiBkaXJlY3RseSByZWFk IHJlZ2lzdGVyIGRhdGEgaW50byBidWZmZXIuCgoKPiArCQl9IGVsc2UgaWYgKHR5cGUgPT0gTUlQ SV9EU0lfUlhfR0VORVJJQ19TSE9SVF9SRUFEX1JFU1BPTlNFXzFCWVRFIHx8Cj4gKwkJCSAgIHR5 cGUgPT0gTUlQSV9EU0lfUlhfR0VORVJJQ19TSE9SVF9SRUFEX1JFU1BPTlNFXzJCWVRFIHx8Cj4g KwkJCSAgIHR5cGUgPT0gTUlQSV9EU0lfUlhfRENTX1NIT1JUX1JFQURfUkVTUE9OU0VfMUJZVEUg fHwKPiArCQkJICAgdHlwZSA9PSBNSVBJX0RTSV9SWF9EQ1NfU0hPUlRfUkVBRF9SRVNQT05TRV8y QllURSkgewo+ICsKPiArCQkJaWYgKHR5cGUgPT0gTUlQSV9EU0lfUlhfR0VORVJJQ19TSE9SVF9S RUFEX1JFU1BPTlNFXzFCWVRFIHx8Cj4gKwkJCSAgICB0eXBlID09IE1JUElfRFNJX1JYX0RDU19T SE9SVF9SRUFEX1JFU1BPTlNFXzFCWVRFKQo+ICsJCQkJcmVjdl9jbnQgPSAxOwo+ICsJCQllbHNl Cj4gKwkJCQlyZWN2X2NudCA9IDI7Cj4gKwo+ICsJCQlpZiAocmVjdl9jbnQgPiBidWZmZXJfc2l6 ZSkKPiArCQkJCXJlY3ZfY250ID0gYnVmZmVyX3NpemU7Cj4gKwo+ICsJCQltZW1jcHkoYnVmZmVy LCAmcmVhZF9kYXRhMC5ieXRlMSwgcmVjdl9jbnQpOwo+ICsJCX0gZWxzZSBpZiAodHlwZSA9PSBN SVBJX0RTSV9SWF9BQ0tOT1dMRURHRV9BTkRfRVJST1JfUkVQT1JUKSB7Cj4gKwkJCWRldl9pbmZv KGRzaS0+ZGV2LCAicGFja2V0IHR5cGUgaXMgMHgwMiwgdHJ5IGFnYWluXG4iKTsKPiArCQl9IGVs c2Ugewo+ICsJCQlkZXZfaW5mbyhkc2ktPmRldiwgInBhY2tldCB0eXBlKDB4JXgpIGNhbm5vdCBi ZSBub24tcmVjb2duaXplXG4iLAo+ICsJCQkJIHR5cGUpOwo+ICsKPiArCQkJcmV0dXJuIDA7Cj4g KwkJfQo+ICsJfSB3aGlsZSAodHlwZSA9PSBNSVBJX0RTSV9SWF9BQ0tOT1dMRURHRV9BTkRfRVJS T1JfUkVQT1JUKTsKPiArCj4gKwlkZXZfaW5mbyhkc2ktPmRldiwgImRzaSBnZXQgJWQgYnl0ZSBk YXRhIGZyb20gdGhlIHBhbmVsIGFkZHJlc3MoMHgleClcbiIsCj4gKwkJIHJlY3ZfY250LCAqKCh1 OCAqKShtc2ctPnR4X2J1ZikpKTsKPiArCj4gKwlyZXR1cm4gcmVjdl9jbnQ7Cj4gK30KPiArCj4g K3N0YXRpYyBzc2l6ZV90IG10a19kc2lfaG9zdF93cml0ZV9jbWQoc3RydWN0IG10a19kc2kgKmRz aSwKPiArCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKPiArewo+ICsJ dTMyIGk7Cj4gKwl1MzIgZ290b19hZGRyLCBtYXNrX3BhcmEsIHNldF9wYXJhLCByZWdfdmFsOwo+ ICsJdm9pZCBfX2lvbWVtICpjbWRxX3JlZzsKPiArCXU4IGNvbmZpZywgdHlwZSwgZGF0YTAsIGRh dGExOwo+ICsJdTE2IHdjMTY7Cj4gKwljb25zdCBjaGFyICp0eF9idWYgPSBtc2ctPnR4X2J1ZjsK PiArCXN0cnVjdCBkc2lfdHhfY21kcV9yZWdzICpkc2lfY21kX3JlZzsKPiArCj4gKwlkc2lfY21k X3JlZyA9IChzdHJ1Y3QgZHNpX3R4X2NtZHFfcmVncyAqKShkc2ktPnJlZ3MgKyBEU0lfQ01EUTAp Owo+ICsKPiArCW10a19kc2lfd2FpdF9mb3JfaWRsZShkc2kpOwo+ICsKPiArCWlmIChtc2ctPnR4 X2xlbiA+IDIpIHsKPiArCQljb25maWcgPSAyOwo+ICsJCXR5cGUgPSBtc2ctPnR5cGU7Cj4gKwkJ d2MxNiA9IG1zZy0+dHhfbGVuOwo+ICsKPiArCQlyZWdfdmFsID0gKHdjMTYgPDwgMTYpIHwgKHR5 cGUgPDwgOCkgfCBjb25maWc7Cj4gKwo+ICsJCXdyaXRlbChyZWdfdmFsLCAmZHNpX2NtZF9yZWct PmRhdGFbMF0pOwo+ICsKPiArCQlmb3IgKGkgPSAwOyBpIDwgbXNnLT50eF9sZW47IGkrKykgewo+ ICsJCQlnb3RvX2FkZHIgPSAodTMyKSgmZHNpX2NtZF9yZWctPmRhdGFbMV0uYnl0ZTApICsgaTsK PiArCQkJbWFza19wYXJhID0gKDB4ZmYgPDwgKChnb3RvX2FkZHIgJiAweDMpICogOCkpOwo+ICsJ CQlzZXRfcGFyYSA9ICh0eF9idWZbaV0gPDwgKChnb3RvX2FkZHIgJiAweDMpICogOCkpOwo+ICsJ CQljbWRxX3JlZyA9ICh2b2lkIF9faW9tZW0gKikoZ290b19hZGRyICYgKH4weDMpKTsKPiArCQkJ bXRrX2RzaV9zZXRfY21kcShjbWRxX3JlZywgbWFza19wYXJhLCBzZXRfcGFyYSk7Cj4gKwkJfQoK QmVjYXVzZSB5b3UgdXNlIHdyaXRlbCgpLCBzbyB0aGlzIHBhcnQgbG9vayBzbyBjb21wbGljYXRl ZC4gSWYgeW91IHVzZQp3cml0ZWIoKSwgdGhpcyB3b3VsZCBiZSBtdWNoIHNpbXBsZXIuCgo+ICsK PiArCQltdGtfZHNpX21hc2soZHNpLCBEU0lfQ01EUV9TSVpFLCBDTURRX1NJWkUsCj4gKwkJCSAg ICAgMSArIChtc2ctPnR4X2xlbiArIDMpIC8gNCk7Cj4gKwl9IGVsc2Ugewo+ICsJCWNvbmZpZyA9 IDA7Cj4gKwkJZGF0YTAgPSB0eF9idWZbMF07Cj4gKwkJaWYgKG1zZy0+dHhfbGVuID09IDIpIHsK PiArCQkJdHlwZSA9IE1JUElfRFNJX0RDU19TSE9SVF9XUklURV9QQVJBTTsKPiArCQkJZGF0YTEg PSB0eF9idWZbMV07Cj4gKwkJfSBlbHNlIHsKPiArCQkJdHlwZSA9IE1JUElfRFNJX0RDU19TSE9S VF9XUklURTsKPiArCQkJZGF0YTEgPSAwOwo+ICsJCX0KPiArCj4gKwkJcmVnX3ZhbCA9IChkYXRh MSA8PCAyNCkgfCAoZGF0YTAgPDwgMTYpIHwgKHR5cGUgPDwgOCkgfCBjb25maWc7Cj4gKwo+ICsJ CXdyaXRlbChyZWdfdmFsLCAmZHNpX2NtZF9yZWctPmRhdGFbMF0pOwo+ICsJCW10a19kc2lfbWFz ayhkc2ksIERTSV9DTURRX1NJWkUsIENNRFFfU0laRSwgMSk7Cj4gKwl9Cj4gKwo+ICsJbXRrX2Rz aV9zdGFydChkc2kpOwo+ICsJbXRrX2RzaV93YWl0X2Zvcl9jbWRfZG9uZShkc2kpOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBtdGtfZHNpX2hvc3RfdHJhbnNm ZXIoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCj4gKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBt aXBpX2RzaV9tc2cgKm1zZykKPiArewo+ICsJc3RydWN0IG10a19kc2kgKmRzaSA9IGhvc3RfdG9f ZHNpKGhvc3QpOwo+ICsJdTggdHlwZSA9IG1zZy0+dHlwZTsKPiArCXNzaXplX3QgcmV0ID0gMDsK PiArCj4gKwlpZiAoTVRLX0RTSV9IT1NUX0lTX1JFQUQodHlwZSkpCj4gKwkJcmV0ID0gbXRrX2Rz aV9ob3N0X3JlYWRfY21kKGRzaSwgbXNnKTsKPiArCWVsc2UgaWYgKE1US19EU0lfSE9TVF9JU19X UklURSh0eXBlKSkKPiArCQlyZXQgPSBtdGtfZHNpX2hvc3Rfd3JpdGVfY21kKGRzaSwgbXNnKTsK PiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IG1pcGlf ZHNpX2hvc3Rfb3BzIG10a19kc2lfb3BzID0gewo+ICAJLmF0dGFjaCA9IG10a19kc2lfaG9zdF9h dHRhY2gsCj4gIAkuZGV0YWNoID0gbXRrX2RzaV9ob3N0X2RldGFjaCwKPiArCS50cmFuc2ZlciA9 IG10a19kc2lfaG9zdF90cmFuc2ZlciwKPiAgfTsKPiAgCj4gIHN0YXRpYyBpbnQgbXRrX2RzaV9i aW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRh KQoKUmVnYXJkcywKQ0sKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo=