From mboxrd@z Thu Jan 1 00:00:00 1970 From: YT Shen Subject: [PATCH v4 6/8] drm/mediatek: add dsi transfer function Date: Fri, 15 Jul 2016 18:07:52 +0800 Message-ID: <1468577274-6178-7-git-send-email-yt.shen@mediatek.com> References: <1468577274-6178-1-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: <1468577274-6178-1-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: dri-devel@lists.freedesktop.org, Philipp Zabel Cc: Mark Rutland , Russell King , Mao Huang , yingjoe.chen@mediatek.com, devicetree@vger.kernel.org, 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, Sascha Hauer , Kumar Gala List-Id: devicetree@vger.kernel.org RnJvbTogc2hhb21pbmcgY2hlbiA8c2hhb21pbmcuY2hlbkBtZWRpYXRlay5jb20+CgphZGQgZHNp IHJlYWQvd3JpdGUgY29tbWFuZHMgZm9yIHRyYW5zZmVyIGZ1bmN0aW9uCgpTaWduZWQtb2ZmLWJ5 OiBzaGFvbWluZyBjaGVuIDxzaGFvbWluZy5jaGVuQG1lZGlhdGVrLmNvbT4KLS0tCiBkcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RzaS5jIHwgIDMyMiArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAzMjIgaW5zZXJ0aW9ucygrKQoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMgYi9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RzaS5jCmluZGV4IGRlNWFkN2YuLjFmOTk4OTQgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHNpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L21lZGlhdGVrL210a19kc2kuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L29m X2dyYXBoLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5oPgogI2luY2x1 ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgogCiAjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgpA QCAtODAsOCArODEsMTYgQEAKICNkZWZpbmUgRFNJX0hCUF9XQwkJMHg1NAogI2RlZmluZSBEU0lf SEZQX1dDCQkweDU4CiAKKyNkZWZpbmUgRFNJX0NNRFFfU0laRQkJMHg2MAorI2RlZmluZSBDTURR X1NJWkUJCTB4M2YKKwogI2RlZmluZSBEU0lfSFNUWF9DS0xfV0MJCTB4NjQKIAorI2RlZmluZSBE U0lfUlhfREFUQTAJCTB4NzQKKyNkZWZpbmUgRFNJX1JYX0RBVEExCQkweDc4CisjZGVmaW5lIERT SV9SWF9EQVRBMgkJMHg3YworI2RlZmluZSBEU0lfUlhfREFUQTMJCTB4ODAKKwogI2RlZmluZSBE U0lfUkFDSwkJMHg4NAogI2RlZmluZSBSQUNLCQkJQklUKDApCiAKQEAgLTExNyw4ICsxMjYsMjUg QEAKICNkZWZpbmUgQ0xLX0hTX1BPU1QJCQkoMHhmZiA8PCA4KQogI2RlZmluZSBDTEtfSFNfRVhJ VAkJCSgweGZmIDw8IDE2KQogCisjZGVmaW5lIERTSV9DTURRMAkJMHgxODAKKwogI2RlZmluZSBO U19UT19DWUNMRShuLCBjKSAgICAoKG4pIC8gKGMpICsgKCgobikgJSAoYykpID8gMSA6IDApKQog CisjZGVmaW5lIE1US19EU0lfSE9TVF9JU19SRUFEKHR5cGUpIFwKKwkoKHR5cGUgPT0gTUlQSV9E U0lfR0VORVJJQ19SRUFEX1JFUVVFU1RfMF9QQVJBTSkgfHwgXAorCSh0eXBlID09IE1JUElfRFNJ X0dFTkVSSUNfUkVBRF9SRVFVRVNUXzFfUEFSQU0pIHx8IFwKKwkodHlwZSA9PSBNSVBJX0RTSV9H RU5FUklDX1JFQURfUkVRVUVTVF8yX1BBUkFNKSB8fCBcCisJKHR5cGUgPT0gTUlQSV9EU0lfRENT X1JFQUQpKQorCisjZGVmaW5lIE1US19EU0lfSE9TVF9JU19XUklURSh0eXBlKSBcCisJKCh0eXBl ID09IE1JUElfRFNJX0dFTkVSSUNfU0hPUlRfV1JJVEVfMF9QQVJBTSkgfHwgXAorCSh0eXBlID09 IE1JUElfRFNJX0dFTkVSSUNfU0hPUlRfV1JJVEVfMV9QQVJBTSkgfHwgXAorCSh0eXBlID09IE1J UElfRFNJX0dFTkVSSUNfU0hPUlRfV1JJVEVfMl9QQVJBTSkgfHwgXAorCSh0eXBlID09IE1JUElf RFNJX0RDU19TSE9SVF9XUklURSkgfHwgXAorCSh0eXBlID09IE1JUElfRFNJX0RDU19TSE9SVF9X UklURV9QQVJBTSkgfHwgXAorCSh0eXBlID09IE1JUElfRFNJX0dFTkVSSUNfTE9OR19XUklURSkg fHwgXAorCSh0eXBlID09IE1JUElfRFNJX0RDU19MT05HX1dSSVRFKSkKKwogc3RydWN0IHBoeTsK IAogc3RydWN0IG10a19kc2kgewpAQCAtMTQ4LDYgKzE3NCwzOCBAQCBzdHJ1Y3QgbXRrX2RzaSB7 CiAJaW50IGlycV9udW0sIGlycV9kYXRhOwogfTsKIAorc3RydWN0IGRzaV9jbWRfdDAgeworCXU4 IGNvbmZpZzsKKwl1OCB0eXBlOworCXU4IGRhdGEwOworCXU4IGRhdGExOworfTsKKworc3RydWN0 IGRzaV9jbWRfdDIgeworCXU4IGNvbmZpZzsKKwl1OCB0eXBlOworCXUxNiB3YzE2OworCXU4ICpw ZGF0YTsKK307CisKK3N0cnVjdCBkc2lfcnhfZGF0YSB7CisJdTggYnl0ZTA7CisJdTggYnl0ZTE7 CisJdTggYnl0ZTI7CisJdTggYnl0ZTM7Cit9OworCitzdHJ1Y3QgZHNpX3R4X2NtZHEgeworCXU4 IGJ5dGUwOworCXU4IGJ5dGUxOworCXU4IGJ5dGUyOworCXU4IGJ5dGUzOworfTsKKworc3RydWN0 IGRzaV90eF9jbWRxX3JlZ3MgeworCXN0cnVjdCBkc2lfdHhfY21kcSBkYXRhWzEyOF07Cit9Owor CiBlbnVtIHsKIAlEU0lfSU5UX1NMRUVQT1VUX0RPTkVfRkxBRwk9IEJJVCg2KSwKIAlEU0lfSU5U X1ZNX0NNRF9ET05FX0ZMQUcJPSBCSVQoNSksCkBAIC04NTgsOSArOTE2LDI3MyBAQCBzdGF0aWMg aW50IG10a19kc2lfaG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3QsCiAJcmV0 dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIG10a19kc2lfc2V0X2NtZHEodm9pZCBfX2lvbWVtICpy ZWcsIHUzMiBtYXNrLCB1MzIgZGF0YSkKK3sKKwl1MzIgdGVtcCA9IHJlYWRsKHJlZyk7CisKKwl3 cml0ZWwoKHRlbXAgJiB+bWFzaykgfCAoZGF0YSAmIG1hc2spLCByZWcpOworfQorCitzdGF0aWMg dm9pZCBtdGtfZHNpX3dhaXRfZm9yX2lkbGUoc3RydWN0IG10a19kc2kgKmRzaSkKK3sKKwl1MzIg dGltZW91dF9tcyA9IDUwMDAwMDsgLyogdG90YWwgMXMgfiAycyB0aW1lb3V0ICovCisKKwl3aGls ZSAodGltZW91dF9tcy0tKSB7CisJCWlmICghKHJlYWRsKGRzaS0+cmVncyArIERTSV9JTlRTVEEp ICYgRFNJX0JVU1kpKQorCQkJYnJlYWs7CisKKwkJdXNsZWVwX3JhbmdlKDIsIDQpOworCX0KKwor CWlmICh0aW1lb3V0X21zID09IDApIHsKKwkJZGV2X2luZm8oZHNpLT5kZXYsICJwb2xsaW5nIGRz aSB3YWl0IG5vdCBidXN5IHRpbWVvdXQhXG4iKTsKKworCQltdGtfZHNpX2VuYWJsZShkc2kpOwor CQltdGtfZHNpX3Jlc2V0X2VuZ2luZShkc2kpOworCX0KK30KKworc3RhdGljIHNzaXplX3QgbXRr X2RzaV9ob3N0X3JlYWRfY21kKHN0cnVjdCBtdGtfZHNpICpkc2ksCisJCQkJICAgICBjb25zdCBz dHJ1Y3QgbWlwaV9kc2lfbXNnICptc2cpCit7CisJdTggbWF4X3RyeV9jb3VudCA9IDU7CisJdTMy IHJlY3ZfZGF0YV9jbnQsIHRtcF92YWw7CisJdTMyIHJlY3ZfZGF0YTAsIHJlY3ZfZGF0YTEsIHJl Y3ZfZGF0YTIsIHJlY3ZfZGF0YTM7CisJc3RydWN0IGRzaV9yeF9kYXRhIHJlYWRfZGF0YTAsIHJl YWRfZGF0YTEsIHJlYWRfZGF0YTIsIHJlYWRfZGF0YTM7CisJc3RydWN0IGRzaV9jbWRfdDAgdDA7 CisJczMyIHJldDsKKworCXU4ICpidWZmZXIgPSBtc2ctPnJ4X2J1ZjsKKwl1OCBidWZmZXJfc2l6 ZSA9IG1zZy0+cnhfbGVuOworCXU4IHBhY2tldF90eXBlOworCisJaWYgKHJlYWRsKGRzaS0+cmVn cyArIERTSV9NT0RFX0NUUkwpICYgMHgwMykgeworCQlkZXZfaW5mbyhkc2ktPmRldiwgImRzaSBl bmdpbmUgaXMgbm90IGNvbW1hbmQgbW9kZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAo IWJ1ZmZlcikgeworCQlkZXZfaW5mbyhkc2ktPmRldiwgImRzaSByZWNlaXZlIGJ1ZmZlciBzaXpl IG1heSBiZSBOVUxMXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRvIHsKKwkJaWYgKG1heF90 cnlfY291bnQgPT0gMCkgeworCQkJZGV2X2luZm8oZHNpLT5kZXYsICJkc2kgZW5naW5lIHJlYWQg Y291bnRlciBoYXMgYmVlbiBtYXhpbnVtXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCW1h eF90cnlfY291bnQtLTsKKwkJcmVjdl9kYXRhX2NudCA9IDA7CisKKwkJbXRrX2RzaV93YWl0X2Zv cl9pZGxlKGRzaSk7CisKKwkJdDAuY29uZmlnID0gMHgwNDsKKwkJdDAuZGF0YTAgPSAqKCh1OCAq KShtc2ctPnR4X2J1ZikpOworCisJCWlmIChidWZmZXJfc2l6ZSA8IDB4MykKKwkJCXQwLnR5cGUg PSBNSVBJX0RTSV9EQ1NfUkVBRDsKKwkJZWxzZQorCQkJdDAudHlwZSA9IE1JUElfRFNJX0dFTkVS SUNfUkVBRF9SRVFVRVNUXzFfUEFSQU07CisKKwkJdDAuZGF0YTEgPSAwOworCisJCXRtcF92YWwg PSAodDAuZGF0YTEgPDwgMjQpIHwgKHQwLmRhdGEwIDw8IDE2KSB8ICh0MC50eXBlIDw8IDgpIHwK KwkJCXQwLmNvbmZpZzsKKworCQl3cml0ZWwodG1wX3ZhbCwgZHNpLT5yZWdzICsgRFNJX0NNRFEw KTsKKwkJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX0NNRFFfU0laRSwgQ01EUV9TSVpFLCAxKTsKKwor CQltdGtfZHNpX21hc2soZHNpLCBEU0lfUkFDSywgUkFDSywgUkFDSyk7CisJCW10a19kc2lfbWFz ayhkc2ksIERTSV9JTlRTVEEsIExQUlhfUkRfUkRZX0lOVF9GTEFHLAorCQkJICAgICB+TFBSWF9S RF9SRFlfSU5UX0ZMQUcpOworCQltdGtfZHNpX21hc2soZHNpLCBEU0lfSU5UU1RBLCBDTURfRE9O RV9JTlRfRkxBRywKKwkJCSAgICAgfkNNRF9ET05FX0lOVF9GTEFHKTsKKwkJbXRrX2RzaV9tYXNr KGRzaSwgRFNJX0lOVEVOLCBEU0lfSU5UX0xQUlhfUkRfUkRZX0ZMQUcsCisJCQkgICAgIERTSV9J TlRfTFBSWF9SRF9SRFlfRkxBRyk7CisJCW10a19kc2lfbWFzayhkc2ksIERTSV9JTlRFTiwgRFNJ X0lOVF9DTURfRE9ORV9GTEFHLAorCQkJICAgICBEU0lfSU5UX0NNRF9ET05FX0ZMQUcpOworCisJ CW10a19kc2lfc3RhcnQoZHNpKTsKKworCQlkZXZfaW5mbyhkc2ktPmRldiwgIlN0YXJ0IHBvbGxp bmcgRFNJIHJlYWQgcmVhZHkhISFcbiIpOworCisJCSAvKiAycyB0aW1lb3V0Ki8KKwkJcmV0ID0g bXRrX2RzaV93YWl0X2Zvcl9pcnFfdGltZW91dChkc2ksCisJCQkJCQkgICBEU0lfSU5UX0xQUlhf UkRfUkRZX0ZMQUcsCisJCQkJCQkgICAyMDAwKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2luZm8o ZHNpLT5kZXYsICJQb2xsaW5nIERTSSByZWFkIHJlYWR5IHRpbWVvdXQhISFcbiIpOworCisJCQlt dGtfZHNpX2VuYWJsZShkc2kpOworCQkJbXRrX2RzaV9yZXNldF9lbmdpbmUoZHNpKTsKKworCQkJ cmV0dXJuIHJldDsKKwkJfQorCisJCWRldl9pbmZvKGRzaS0+ZGV2LCAiRW5kIHBvbGxpbmcgRFNJ IHJlYWQgcmVhZHkhISFcbiIpOworCisJCW10a19kc2lfbWFzayhkc2ksIERTSV9SQUNLLCBSQUNL LCBSQUNLKTsKKwkJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX0lOVFNUQSwgTFBSWF9SRF9SRFlfSU5U X0ZMQUcsCisJCQkgICAgIH5MUFJYX1JEX1JEWV9JTlRfRkxBRyk7CisKKwkJcmVjdl9kYXRhMCA9 IHJlYWRsKGRzaS0+cmVncyArIERTSV9SWF9EQVRBMCk7CisJCXJlY3ZfZGF0YTEgPSByZWFkbChk c2ktPnJlZ3MgKyBEU0lfUlhfREFUQTEpOworCQlyZWN2X2RhdGEyID0gcmVhZGwoZHNpLT5yZWdz ICsgRFNJX1JYX0RBVEEyKTsKKwkJcmVjdl9kYXRhMyA9IHJlYWRsKGRzaS0+cmVncyArIERTSV9S WF9EQVRBMyk7CisKKwkJcmVhZF9kYXRhMCA9ICooKHN0cnVjdCBkc2lfcnhfZGF0YSAqKSgmcmVj dl9kYXRhMCkpOworCQlyZWFkX2RhdGExID0gKigoc3RydWN0IGRzaV9yeF9kYXRhICopKCZyZWN2 X2RhdGExKSk7CisJCXJlYWRfZGF0YTIgPSAqKChzdHJ1Y3QgZHNpX3J4X2RhdGEgKikoJnJlY3Zf ZGF0YTIpKTsKKwkJcmVhZF9kYXRhMyA9ICooKHN0cnVjdCBkc2lfcnhfZGF0YSAqKSgmcmVjdl9k YXRhMykpOworCisJCXJldCA9IHJlYWRsKGRzaS0+cmVncyArIERTSV9DTURRX1NJWkUpOworCQlk ZXZfaW5mbyhkc2ktPmRldiwgIkRTSV9DTURRX1NJWkUgOiAweCV4XG4iLCByZXQgJiBDTURRX1NJ WkUpOworCisJCXJldCA9IHJlYWRsKGRzaS0+cmVncyArIERTSV9DTURRMCk7CisJCWRldl9pbmZv KGRzaS0+ZGV2LCAiRFNJX0NNRFFfREFUQTAgOiAweCV4XG4iLAorCQkJIHJldCAmIDB4ZmYpOwor CQlkZXZfaW5mbyhkc2ktPmRldiwgIkRTSV9DTURRX0RBVEExIDogMHgleFxuIiwKKwkJCSAocmV0 ID4+IDgpICYgMHhmZik7CisJCWRldl9pbmZvKGRzaS0+ZGV2LCAiRFNJX0NNRFFfREFUQTIgOiAw eCV4XG4iLAorCQkJIChyZXQgPj4gMTYpICYgMHhmZik7CisJCWRldl9pbmZvKGRzaS0+ZGV2LCAi RFNJX0NNRFFfREFUQTMgOiAweCV4XG4iLAorCQkJIChyZXQgPj4gMjQpICYgMHhmZik7CisKKwkJ ZGV2X2luZm8oZHNpLT5kZXYsICJEU0lfUlhfREFUQTA6IDB4JXhcbiIsIHJlY3ZfZGF0YTApOwor CQlkZXZfaW5mbyhkc2ktPmRldiwgIkRTSV9SWF9EQVRBMTogMHgleFxuIiwgcmVjdl9kYXRhMSk7 CisJCWRldl9pbmZvKGRzaS0+ZGV2LCAiRFNJX1JYX0RBVEEyOiAweCV4XG4iLCByZWN2X2RhdGEy KTsKKwkJZGV2X2luZm8oZHNpLT5kZXYsICJEU0lfUlhfREFUQTM6IDB4JXhcbiIsIHJlY3ZfZGF0 YTMpOworCisJCWRldl9pbmZvKGRzaS0+ZGV2LCAicmVhZF9kYXRhMDogJXgsJXgsJXgsJXhcbiIs CisJCQkgcmVhZF9kYXRhMC5ieXRlMCwgcmVhZF9kYXRhMC5ieXRlMSwgcmVhZF9kYXRhMC5ieXRl MiwKKwkJCSByZWFkX2RhdGEwLmJ5dGUzKTsKKwkJZGV2X2luZm8oZHNpLT5kZXYsICJyZWFkX2Rh dGExOiAleCwleCwleCwleFxuIiwKKwkJCSByZWFkX2RhdGExLmJ5dGUwLCByZWFkX2RhdGExLmJ5 dGUxLCByZWFkX2RhdGExLmJ5dGUyLAorCQkJIHJlYWRfZGF0YTEuYnl0ZTMpOworCQlkZXZfaW5m byhkc2ktPmRldiwgInJlYWRfZGF0YTI6ICV4LCV4LCV4LCV4XG4iLAorCQkJIHJlYWRfZGF0YTIu Ynl0ZTAsIHJlYWRfZGF0YTIuYnl0ZTEsIHJlYWRfZGF0YTIuYnl0ZTIsCisJCQkgcmVhZF9kYXRh Mi5ieXRlMyk7CisJCWRldl9pbmZvKGRzaS0+ZGV2LCAicmVhZF9kYXRhMzogJXgsJXgsJXgsJXhc biIsCisJCQkgcmVhZF9kYXRhMy5ieXRlMCwgcmVhZF9kYXRhMy5ieXRlMSwgcmVhZF9kYXRhMy5i eXRlMiwKKwkJCSByZWFkX2RhdGEzLmJ5dGUzKTsKKworCQlwYWNrZXRfdHlwZSA9IHJlYWRfZGF0 YTAuYnl0ZTA7CisJCWRldl9pbmZvKGRzaS0+ZGV2LCAiRFNJIHJlYWQgcGFja2V0X3R5cGUgaXMg MHgleFxuIiwKKwkJCSBwYWNrZXRfdHlwZSk7CisKKwkJaWYgKHBhY2tldF90eXBlID09IDB4MWEg fHwgcGFja2V0X3R5cGUgPT0gMHgxYykgeworCQkJdm9pZCAqcmVhZF90bXAgPSAodm9pZCAqKSZy ZWN2X2RhdGExOworCisJCQlyZWN2X2RhdGFfY250ID0gcmVhZF9kYXRhMC5ieXRlMSArCisJCQkJ CXJlYWRfZGF0YTAuYnl0ZTIgKiAxNjsKKwkJCWlmIChyZWN2X2RhdGFfY250ID4gMTApCisJCQkJ cmVjdl9kYXRhX2NudCA9IDEwOworCisJCQlpZiAocmVjdl9kYXRhX2NudCA+IGJ1ZmZlcl9zaXpl KQorCQkJCXJlY3ZfZGF0YV9jbnQgPSBidWZmZXJfc2l6ZTsKKworCQkJbWVtY3B5KGJ1ZmZlciwg cmVhZF90bXAsIHJlY3ZfZGF0YV9jbnQpOworCQl9IGVsc2UgeworCQkJLyogc2hvcnQgIHBhY2tl dCAqLworCQkJcmVjdl9kYXRhX2NudCA9IDI7CisJCQlpZiAocmVjdl9kYXRhX2NudCA+IGJ1ZmZl cl9zaXplKQorCQkJCXJlY3ZfZGF0YV9jbnQgPSBidWZmZXJfc2l6ZTsKKworCQkJbWVtY3B5KGJ1 ZmZlciwgJnJlYWRfZGF0YTAuYnl0ZTEsIDIpOworCQl9CisJfSB3aGlsZSAocGFja2V0X3R5cGUg IT0gMHgxYyAmJiBwYWNrZXRfdHlwZSAhPSAweDIxICYmCisJCXBhY2tldF90eXBlICE9IDB4MjIg JiYgcGFja2V0X3R5cGUgIT0gMHgxYSk7CisKKwlkZXZfaW5mbyhkc2ktPmRldiwgImRzaSBnZXQg JWQgYnl0ZSBkYXRhIGZyb20gdGhlIHBhbmVsIGFkZHJlc3MoMHgleClcbiIsCisJCSByZWN2X2Rh dGFfY250LCAqKCh1OCAqKShtc2ctPnR4X2J1ZikpKTsKKworCXJldHVybiByZWN2X2RhdGFfY250 OworfQorCitzdGF0aWMgc3NpemVfdCBtdGtfZHNpX2hvc3Rfd3JpdGVfY21kKHN0cnVjdCBtdGtf ZHNpICpkc2ksCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQorewor CXUzMiBpOworCXUzMiBnb3RvX2FkZHIsIG1hc2tfcGFyYSwgc2V0X3BhcmEsIHJlZ192YWw7CisJ dm9pZCBfX2lvbWVtICpjbWRxX3JlZzsKKwlzdHJ1Y3QgZHNpX2NtZF90MCB0MDsKKwlzdHJ1Y3Qg ZHNpX2NtZF90MiB0MjsKKwljb25zdCBjaGFyICp0eF9idWYgPSBtc2ctPnR4X2J1ZjsKKwlzdHJ1 Y3QgZHNpX3R4X2NtZHFfcmVncyAqZHNpX2NtZF9yZWc7CisKKwlkc2lfY21kX3JlZyA9IChzdHJ1 Y3QgZHNpX3R4X2NtZHFfcmVncyAqKShkc2ktPnJlZ3MgKyBEU0lfQ01EUTApOworCisJbXRrX2Rz aV93YWl0X2Zvcl9pZGxlKGRzaSk7CisKKwlpZiAobXNnLT50eF9sZW4gPiAyKSB7CisJCXQyLmNv bmZpZyA9IDI7CisJCXQyLnR5cGUgPSBtc2ctPnR5cGU7CisJCXQyLndjMTYgPSBtc2ctPnR4X2xl bjsKKworCQlyZWdfdmFsID0gKHQyLndjMTYgPDwgMTYpIHwgKHQyLnR5cGUgPDwgOCkgfCB0Mi5j b25maWc7CisKKwkJd3JpdGVsKHJlZ192YWwsICZkc2lfY21kX3JlZy0+ZGF0YVswXSk7CisKKwkJ Z290b19hZGRyID0gKHUzMikoJmRzaV9jbWRfcmVnLT5kYXRhWzFdLmJ5dGUwKTsKKwkJbWFza19w YXJhID0gKDB4ZmYgPDwgKChnb3RvX2FkZHIgJiAweDMpICogOCkpOworCQlzZXRfcGFyYSA9ICh0 eF9idWZbMF0gPDwgKChnb3RvX2FkZHIgJiAweDMpICogOCkpOworCQljbWRxX3JlZyA9ICh2b2lk IF9faW9tZW0gKikoZ290b19hZGRyICYgKH4weDMpKTsKKwkJbXRrX2RzaV9zZXRfY21kcShjbWRx X3JlZywgbWFza19wYXJhLCBzZXRfcGFyYSk7CisKKwkJZm9yIChpID0gMTsgaSA8IG1zZy0+dHhf bGVuOyBpKyspIHsKKwkJCWdvdG9fYWRkciA9ICh1MzIpKCZkc2lfY21kX3JlZy0+ZGF0YVsxXS5i eXRlMSkgKyBpIC0gMTsKKwkJCW1hc2tfcGFyYSA9ICgweGZmIDw8ICgoZ290b19hZGRyICYgMHgz KSAqIDgpKTsKKwkJCXNldF9wYXJhID0gKHR4X2J1ZltpXSA8PCAoKGdvdG9fYWRkciAmIDB4Mykg KiA4KSk7CisJCQljbWRxX3JlZyA9ICh2b2lkIF9faW9tZW0gKikoZ290b19hZGRyICYgKH4weDMp KTsKKwkJCW10a19kc2lfc2V0X2NtZHEoY21kcV9yZWcsIG1hc2tfcGFyYSwgc2V0X3BhcmEpOwor CQl9CisKKwkJbXRrX2RzaV9tYXNrKGRzaSwgRFNJX0NNRFFfU0laRSwgQ01EUV9TSVpFLAorCQkJ ICAgICAyICsgKG1zZy0+dHhfbGVuIC0gMSkgLyA0KTsKKwl9IGVsc2UgeworCQl0MC5jb25maWcg PSAwOworCQl0MC5kYXRhMCA9IHR4X2J1ZlswXTsKKwkJaWYgKG1zZy0+dHhfbGVuID09IDIpIHsK KwkJCXQwLnR5cGUgPSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEVfUEFSQU07CisJCQl0MC5kYXRh MSA9IHR4X2J1ZlsxXTsKKwkJfSBlbHNlIHsKKwkJCXQwLnR5cGUgPSBNSVBJX0RTSV9EQ1NfU0hP UlRfV1JJVEU7CisJCQl0MC5kYXRhMSA9IDA7CisJCX0KKworCQlyZWdfdmFsID0gKHQwLmRhdGEx IDw8IDI0KSB8ICh0MC5kYXRhMCA8PCAxNikgfCAodDAudHlwZSA8PCA4KSB8CisJCQkgICB0MC5j b25maWc7CisKKwkJd3JpdGVsKHJlZ192YWwsICZkc2lfY21kX3JlZy0+ZGF0YVswXSk7CisJCW10 a19kc2lfbWFzayhkc2ksIERTSV9DTURRX1NJWkUsIENNRFFfU0laRSwgMSk7CisJfQorCisJbXRr X2RzaV9zdGFydChkc2kpOworCW10a19kc2lfd2FpdF9mb3JfaWRsZShkc2kpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG10a19kc2lfaG9zdF90cmFuc2ZlcihzdHJ1Y3QgbWlw aV9kc2lfaG9zdCAqaG9zdCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1z ZykKK3sKKwlzdHJ1Y3QgbXRrX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7CisJdTggdHlw ZSA9IG1zZy0+dHlwZTsKKwlzc2l6ZV90IHJldCA9IDA7CisKKwlpZiAoTVRLX0RTSV9IT1NUX0lT X1JFQUQodHlwZSkpCisJCXJldCA9IG10a19kc2lfaG9zdF9yZWFkX2NtZChkc2ksIG1zZyk7CisJ ZWxzZSBpZiAoTVRLX0RTSV9IT1NUX0lTX1dSSVRFKHR5cGUpKQorCQlyZXQgPSBtdGtfZHNpX2hv c3Rfd3JpdGVfY21kKGRzaSwgbXNnKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBjb25z dCBzdHJ1Y3QgbWlwaV9kc2lfaG9zdF9vcHMgbXRrX2RzaV9vcHMgPSB7CiAJLmF0dGFjaCA9IG10 a19kc2lfaG9zdF9hdHRhY2gsCiAJLmRldGFjaCA9IG10a19kc2lfaG9zdF9kZXRhY2gsCisJLnRy YW5zZmVyID0gbXRrX2RzaV9ob3N0X3RyYW5zZmVyLAogfTsKIAogc3RhdGljIGludCBtdGtfZHNp X2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRh dGEpCi0tIAoxLjcuOS41CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWwK