From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sandeep Panda Subject: [[RFC]DPU PATCH 1/4] drm/bridge: add support for sn65dsi86 bridge driver Date: Wed, 18 Apr 2018 17:49:59 +0530 Message-ID: <1524054002-17869-2-git-send-email-spanda@codeaurora.org> References: <1524054002-17869-1-git-send-email-spanda@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1524054002-17869-1-git-send-email-spanda-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: ryadav-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, Sandeep Panda , abhinavk-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, nganji-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, seanpaul-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, hoegsberg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, jsanka-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, chandanu-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org List-Id: devicetree@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIFRJJ3Mgc242NWRzaTg2IGRzaTJlZHAgYnJpZGdlIGNoaXAuClRoZSBj aGlwIGNvbnZlcnRzIERTSSB0cmFuc21pdHRlZCBzaWduYWwgdG8gZURQIHNpZ25hbCwKd2hpY2gg aXMgZmVkIHRvIHRoZSBjb25uZWN0ZWQgZURQIHBhbmVsLgoKVGhpcyBjaGlwIGNhbiBiZSBjb250 cm9sbGVkIHZpYSBlaXRoZXIgaTJjIGludGVyZmFjZSBvcgpkc2kgaW50ZXJmYWNlLiBDdXJyZW50 bHkgaW4gZHJpdmVyIGFsbCB0aGUgY29udHJvbCByZWdpc3RlcnMKYXJlIGJlaW5nIGFjY2Vzc2Vk IHRocm91Z2ggaTJjIGludGVyZmFjZSBvbmx5LgpBbHNvIGFzIG9mIG5vdyBIUEQgc3VwcG9ydCBo YXMgbm90IGJlZW4gYWRkZWQgdG8gYnJpZGdlCmNoaXAgZHJpdmVyLgoKU2lnbmVkLW9mZi1ieTog U2FuZGVlcCBQYW5kYSA8c3BhbmRhQGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvdGktc242NWRzaTg2LmMgfCA3NDIgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDc0MiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYwoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMgYi9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL3RpLXNuNjVkc2k4Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmM3OThmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNu NjVkc2k4Ni5jCkBAIC0wLDAgKzEsNzQyIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMCAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9r ZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0 Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMu aD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgor I2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2Nv bnN1bWVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21p Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9k cm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9wYW5lbC5oPgorCisjZGVmaW5lIFNOX0JSSURHRV9SRVZJU0lPTl9JRCAweDIK KworLyogTGluayBUcmFpbmluZyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU05fREVW SUNFX1JFVl9SRUcJCQkweDA4CisjZGVmaW5lIFNOX1JFRkNMS19GUkVRX1JFRwkJCTB4MEEKKyNk ZWZpbmUgU05fRFNJX0xBTkVTX1JFRwkJCTB4MTAKKyNkZWZpbmUgU05fRFNJQV9DTEtfRlJFUV9S RUcJCQkweDEyCisjZGVmaW5lIFNOX0VOSF9GUkFNRV9SRUcJCQkweDVBCisjZGVmaW5lIFNOX1NT Q19DT05GSUdfUkVHCQkJMHg5MworI2RlZmluZSBTTl9EQVRBUkFURV9DT05GSUdfUkVHCQkJMHg5 NAorI2RlZmluZSBTTl9QTExfRU5BQkxFX1JFRwkJCTB4MEQKKyNkZWZpbmUgU05fU0NSQU1CTEVf Q09ORklHX1JFRwkJCTB4OTUKKyNkZWZpbmUgU05fQVVYX1dEQVRBMF9SRUcJCQkweDY0CisjZGVm aW5lIFNOX0FVWF9BRERSXzE5XzE2X1JFRwkJCTB4NzQKKyNkZWZpbmUgU05fQVVYX0FERFJfMTVf OF9SRUcJCQkweDc1CisjZGVmaW5lIFNOX0FVWF9BRERSXzdfMF9SRUcJCQkweDc2CisjZGVmaW5l IFNOX0FVWF9MRU5HVEhfUkVHCQkJMHg3NworI2RlZmluZSBTTl9BVVhfQ01EX1JFRwkJCQkweDc4 CisjZGVmaW5lIFNOX01MX1RYX01PREVfUkVHCQkJMHg5NgorI2RlZmluZSBTTl9QQUdFX1NFTEVD VF9SRUcJCQkweEZGCisjZGVmaW5lIFNOX0FVWF9SREFUQTBfUkVHCQkJMHg3OQorLyogdmlkZW8g Y29uZmlnIHNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBTTl9DSEFfQUNUSVZFX0xJTkVf TEVOR1RIX0xPV19SRUcJMHgyMAorI2RlZmluZSBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0hJ R0hfUkVHCTB4MjEKKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9MT1dfUkVH CTB4MjQKKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9ISUdIX1JFRwkweDI1 CisjZGVmaW5lIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHCTB4MkMKKyNkZWZpbmUg U05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHCTB4MkQKKyNkZWZpbmUgU05fQ0hBX1ZT WU5DX1BVTFNFX1dJRFRIX0xPV19SRUcJMHgzMAorI2RlZmluZSBTTl9DSEFfVlNZTkNfUFVMU0Vf V0lEVEhfSElHSF9SRUcJMHgzMQorI2RlZmluZSBTTl9DSEFfSE9SSVpPTlRBTF9CQUNLX1BPUkNI X1JFRwkweDM0CisjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9CQUNLX1BPUkNIX1JFRwkJMHgzNgor I2RlZmluZSBTTl9DSEFfSE9SSVpPTlRBTF9GUk9OVF9QT1JDSF9SRUcJMHgzOAorI2RlZmluZSBT Tl9DSEFfVkVSVElDQUxfRlJPTlRfUE9SQ0hfUkVHCQkweDNBCisjZGVmaW5lIFNOX0RBVEFfRk9S TUFUX1JFRwkJCTB4NUIKKyNkZWZpbmUgU05fQ09MT1JfQkFSX0NPTkZJR19SRUcJCQkweDNDCisK KyNkZWZpbmUgRFBQTExfQ0xLX1NSQ19SRUZDTEsJMAorI2RlZmluZSBEUFBMTF9DTEtfU1JDX0RT SUNMSwkxCisjZGVmaW5lIE1JTl9EU0lfQ0xLX0ZSRVFfTUhaCTQwCisKK2VudW0gdGlfc25fYnJp ZGdlX3JlZl9jbGtzIHsKKwlTTl9SRUZfQ0xLXzEyX01IWiA9IDAsCisJU05fUkVGX0NMS18xOV8y X01IWiwKKwlTTl9SRUZfQ0xLXzI2X01IWiwKKwlTTl9SRUZfQ0xLXzI3X01IWiwKKwlTTl9SRUZf Q0xLXzM4XzRfTUhaLAorCVNOX1JFRl9DTEtfTUFYLAorfTsKKworc3RydWN0IHRpX3NuX2JyaWRn ZSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKKwlz dHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uZWN0b3I7CisJc3RydWN0IGRldmljZV9ub2RlICpob3N0 X25vZGU7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOworCS8qIGhhbmRsZSB0byB0aGUg Y29ubmVjdGVkIGVEUCBwYW5lbCAqLworCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOworCWludCBp cnE7CisJc3RydWN0IGdwaW9fZGVzYyAqaXJxX2dwaW87CisJLyogbGlzdCBvZiBncGlvcyBuZWVk ZWQgdG8gZW5hYmxlIHRoZSBicmlkZ2UgZnVuY3Rpb25hbGl0eSAqLworCXN0cnVjdCBncGlvX2Rl c2NzICplbmFibGVfZ3Bpb3M7CisJdW5zaWduZWQgaW50IG51bV9zdXBwbGllczsKKwlzdHJ1Y3Qg cmVndWxhdG9yX2J1bGtfZGF0YSAqc3VwcGxpZXM7CisJc3RydWN0IGkyY19jbGllbnQgKmkyY19j bGllbnQ7CisJc3RydWN0IGkyY19hZGFwdGVyICpkZGM7CisJYm9vbCBwb3dlcl9vbjsKKwl1MzIg bnVtX21vZGVzOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGN1cnJfbW9kZTsKK307CisKK3N0 YXRpYyBpbnQgdGlfc25fYnJpZGdlX3dyaXRlKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhLCB1 OCByZWcsIHU4IHZhbCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gcGRhdGEtPmky Y19jbGllbnQ7CisJdTggYnVmWzJdID0ge3JlZywgdmFsfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cg PSB7CisJCS5hZGRyID0gY2xpZW50LT5hZGRyLAorCQkuZmxhZ3MgPSAwLAorCQkubGVuID0gMiwK KwkJLmJ1ZiA9IGJ1ZiwKKwl9OworCisJaWYgKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIs ICZtc2csIDEpIDwgMSkgeworCQlEUk1fRVJST1IoImkyYyB3cml0ZSBmYWlsZWRcbiIpOworCQly ZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aV9zbl9icmlk Z2VfcmVhZChzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSwKKwkJCQkJdTggcmVnLCBjaGFyICpi dWYsIHUzMiBzaXplKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBwZGF0YS0+aTJj X2NsaWVudDsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbMl0gPSB7CisJCXsKKwkJCS5hZGRyID0gY2xp ZW50LT5hZGRyLAorCQkJLmZsYWdzID0gMCwKKwkJCS5sZW4gPSAxLAorCQkJLmJ1ZiA9ICZyZWcs CisJCX0sCisJCXsKKwkJCS5hZGRyID0gY2xpZW50LT5hZGRyLAorCQkJLmZsYWdzID0gSTJDX01f UkQsCisJCQkubGVuID0gc2l6ZSwKKwkJCS5idWYgPSBidWYsCisJCX0KKwl9OworCisJaWYgKGky Y190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZywgMikgIT0gMikgeworCQlEUk1fRVJST1Io ImkyYyByZWFkIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOwor fQorCitzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfZ3Bpb19jb25maWd1cmUoc3RydWN0IHRpX3Nu X2JyaWRnZSAqcGRhdGEsIGJvb2wgb24pCit7CisJaW50IHZhbHVlLCBpID0gMCwgbnVtID0gMDsK KwlpbnQgKnZhbHVlX2FycmF5ID0gTlVMTDsKKworCWlmICghcGRhdGEpCisJCXJldHVybjsKKwor CXZhbHVlID0gb24gPyAxIDogMDsKKwludW0gPSBwZGF0YS0+ZW5hYmxlX2dwaW9zLT5uZGVzY3M7 CisJdmFsdWVfYXJyYXkgPSBrbWFsbG9jKG51bSAqIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsK KwlpZiAodmFsdWVfYXJyYXkpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQorCQkJdmFs dWVfYXJyYXlbaV0gPSB2YWx1ZTsKKwkJZ3Bpb2Rfc2V0X2FycmF5X3ZhbHVlKG51bSwgcGRhdGEt PmVuYWJsZV9ncGlvcy0+ZGVzYywKKwkJCQkgICAgICB2YWx1ZV9hcnJheSk7CisJCWtmcmVlKHZh bHVlX2FycmF5KTsKKwl9CisKKwlpZiAocGRhdGEtPmlycV9ncGlvKQorCQlncGlvZF9zZXRfdmFs dWUocGRhdGEtPmlycV9ncGlvLCB2YWx1ZSk7CisKKwlEUk1fREVCVUcoImNvbmZpZyB0bzogJWRc biIsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwoc3Ry dWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEsIGJvb2wgZW5hYmxlKQoreworCXN0YXRpYyBpbnQgcmVm X2NvdW50OworCisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuOworCisJaWYgKGVuYWJsZSkKKwkJcmVm X2NvdW50Kys7CisJZWxzZQorCQlyZWZfY291bnQtLTsKKworCWlmIChlbmFibGUgJiYgKHJlZl9j b3VudCA9PSAxKSkgeworCQl0aV9zbl9icmlkZ2VfZ3Bpb19jb25maWd1cmUocGRhdGEsIHRydWUp OworCisJCWlmIChyZWd1bGF0b3JfYnVsa19lbmFibGUocGRhdGEtPm51bV9zdXBwbGllcywKKwkJ CQkJCXBkYXRhLT5zdXBwbGllcykpIHsKKwkJCURSTV9FUlJPUigiYnJpZGdlIHJlZ3VsYXRvciBl bmFibGUgZmFpbGVkXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQlwZGF0YS0+cG93ZXJfb24gPSB0 cnVlOworCX0gZWxzZSBpZiAoIWVuYWJsZSAmJiAhcmVmX2NvdW50KSB7CisJCXJlZ3VsYXRvcl9i dWxrX2Rpc2FibGUocGRhdGEtPm51bV9zdXBwbGllcywgcGRhdGEtPnN1cHBsaWVzKTsKKworCQl0 aV9zbl9icmlkZ2VfZ3Bpb19jb25maWd1cmUocGRhdGEsIGZhbHNlKTsKKwkJcGRhdGEtPnBvd2Vy X29uID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJRFJNX0RFQlVHKCJ0aV9zbl9icmlkZ2UgcG93ZXIg Y3RybDogJWQgcmVmY291bnQ6ICVkXG4iLAorCQkJCQkJCWVuYWJsZSwgcmVmX2NvdW50KTsKKwl9 Cit9CisKKy8qIENvbm5lY3RvciBmdW5jcyAqLworc3RhdGljIHN0cnVjdCB0aV9zbl9icmlkZ2Ug KgorY29ubmVjdG9yX3RvX3RpX3NuX2JyaWRnZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yKQoreworCXJldHVybiBjb250YWluZXJfb2YoY29ubmVjdG9yLCBzdHJ1Y3QgdGlfc25fYnJp ZGdlLCBjb25uZWN0b3IpOworfQorCitzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9jb25uZWN0b3Jf Z2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IHRp X3NuX2JyaWRnZSAqcGRhdGEgPSBjb25uZWN0b3JfdG9fdGlfc25fYnJpZGdlKGNvbm5lY3Rvcik7 CisJc3RydWN0IGRybV9wYW5lbCAqcGFuZWwgPSBwZGF0YS0+cGFuZWw7CisJc3RydWN0IGVkaWQg KmVkaWQ7CisKKwlpZiAocGFuZWwpIHsKKwkJRFJNX0RFQlVHKCJnZXQgbW9kZSBmcm9tIGNvbm5l Y3RlZCBkcm1fcGFuZWxcbiIpOworCQlwZGF0YS0+bnVtX21vZGVzID0gZHJtX3BhbmVsX2dldF9t b2RlcyhwYW5lbCk7CisJfSBlbHNlIHsKKwkJLyogZ2V0IGZyb20gRURJRCAqLworCQlpZiAoIXBk YXRhLT5kZGMpCisJCQlyZXR1cm4gMDsKKwkJdGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwocGRhdGEs IHRydWUpOworCQllZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3RvciwgcGRhdGEtPmRkYyk7CisJ CWlmIChlZGlkKSB7CisJCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHko Y29ubmVjdG9yLAorCQkJCQkJCQllZGlkKTsKKwkJCXBkYXRhLT5udW1fbW9kZXMgPSBkcm1fYWRk X2VkaWRfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKKwkJCWRybV9lZGlkX3RvX2VsZChjb25uZWN0 b3IsIGVkaWQpOworCQkJa2ZyZWUoZWRpZCk7CisJCX0gZWxzZSB7CisJCQlEUk1fREVCVUcoImZh aWxlZCB0byBnZXQgZWRpZFxuIik7CisJCX0KKwkJdGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwocGRh dGEsIGZhbHNlKTsKKwl9CisKKwlyZXR1cm4gcGRhdGEtPm51bV9tb2RlczsKK30KKworc3RhdGlj IGVudW0gZHJtX21vZGVfc3RhdHVzCit0aV9zbl9icmlkZ2VfY29ubmVjdG9yX21vZGVfdmFsaWQo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCSAgICAgc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUpCit7CisJLyogbWF4aW11bSBzdXBwb3J0ZWQgcmVzb2x1dGlvbiBpcyA0 SyBhdCA2MCBmcHMgKi8KKwlpZiAobW9kZS0+Y2xvY2sgPiA1OTQwMDApCisJCXJldHVybiBNT0RF X0NMT0NLX0hJR0g7CisKKwlyZXR1cm4gTU9ERV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBkcm1f Y29ubmVjdG9yX2hlbHBlcl9mdW5jcyB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2hlbHBlcl9mdW5j cyA9IHsKKwkuZ2V0X21vZGVzID0gdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCisJ Lm1vZGVfdmFsaWQgPSB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX21vZGVfdmFsaWQsCit9OworCitz dGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cwordGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9k ZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKK3sKKwlz dHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGNvbm5lY3Rvcl90b190aV9zbl9icmlkZ2UoY29u bmVjdG9yKTsKKworCS8qKgorCSAqIFRPRE86IEN1cnJlbnRseSBpZiBkcm1fcGFuZWwgaXMgcHJl c2VudCwgdGhlbiBhbHdheXMKKwkgKiByZXR1cm4gdGhlIHN0YXR1cyBhcyBjb25uZWN0ZWQuIE5l ZWQgdG8gYWRkIHN1cHBvcnQgdG8gZGV0ZWN0CisJICogZGV2aWNlIHN0YXRlIGZvciBubyBwYW5l bChob3QgcGx1Z2dhYmxlKSBzY2VuYXJpb3MuCisJICovCisJaWYgKHBkYXRhLT5wYW5lbCkKKwkJ cmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCWVsc2UKKwkJcmV0dXJuIGNvbm5l Y3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9j b25uZWN0b3JfZnVuY3MgdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuZmlsbF9t b2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGV0ZWN0 ID0gdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9kZXRlY3QsCisJLmRlc3Ryb3kgPSBkcm1fY29ubmVj dG9yX2NsZWFudXAsCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0 LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9y X2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hl bHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGlfc25f YnJpZGdlICpicmlkZ2VfdG9fdGlfc25fYnJpZGdlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Up Cit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihicmlkZ2UsIHN0cnVjdCB0aV9zbl9icmlkZ2UsIGJy aWRnZSk7Cit9CisKK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3JlYWRfZGV2aWNlX3JldihzdHJ1 Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKK3sKKwl1OCByZXYgPSAwOworCWludCByZXQgPSAwOwor CisJcmV0ID0gdGlfc25fYnJpZGdlX3JlYWQocGRhdGEsIFNOX0RFVklDRV9SRVZfUkVHLCAmcmV2 LCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGV4aXQ7CisKKwlpZiAocmV2ID09IFNOX0JSSURHRV9S RVZJU0lPTl9JRCkgeworCQlEUk1fREVCVUcoInRpX3NuX2JyaWRnZSByZXZpc2lvbiBpZDogMHgl eFxuIiwgcmV2KTsKKwl9IGVsc2UgeworCQlEUk1fRVJST1IoInRpX3NuX2JyaWRnZSByZXZpc2lv biBpZCBtaXNtYXRjaFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCitleGl0OgorCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGlfc25fYnJpZGdlX3N1cHBs eV9uYW1lc1tdID0geworCSJ2Y2NpbyIsCisJInZjY2EiLAorfTsKKworc3RhdGljIGludCB0aV9z bl9icmlkZ2VfcGFyc2VfcmVndWxhdG9ycyhzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKK3sK Kwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmV0OworCisJcGRhdGEtPm51bV9zdXBwbGllcyA9IEFS UkFZX1NJWkUodGlfc25fYnJpZGdlX3N1cHBseV9uYW1lcyk7CisKKwlwZGF0YS0+c3VwcGxpZXMg PSBkZXZtX2tjYWxsb2MocGRhdGEtPmRldiwgcGRhdGEtPm51bV9zdXBwbGllcywKKwkJCQkgICAg IHNpemVvZigqcGRhdGEtPnN1cHBsaWVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YS0+c3Vw cGxpZXMpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1f c3VwcGxpZXM7IGkrKykKKwkJcGRhdGEtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHRpX3NuX2JyaWRn ZV9zdXBwbHlfbmFtZXNbaV07CisKKwlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldChwZGF0 YS0+ZGV2LAorCQkJcGRhdGEtPm51bV9zdXBwbGllcywgcGRhdGEtPnN1cHBsaWVzKTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9hdHRhY2hfcGFuZWwoc3Ry dWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwYW5lbF9u b2RlLCAqcG9ydCwgKmVuZHBvaW50OworCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsID0gTlVMTDsK KworCXBvcnQgPSBvZl9ncmFwaF9nZXRfcG9ydF9ieV9pZChwZGF0YS0+ZGV2LT5vZl9ub2RlLCAx KTsKKwlpZiAocG9ydCkgeworCQllbmRwb2ludCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHBvcnQs ICJlbmRwb2ludCIpOworCQlvZl9ub2RlX3B1dChwb3J0KTsKKwkJaWYgKCFlbmRwb2ludCkgewor CQkJZGV2X2VycihwZGF0YS0+ZGV2LCAibm8gb3V0cHV0IGVuZHBvaW50IGZvdW5kXG4iKTsKKwkJ CWdvdG8gZXJyb3I7CisJCX0KKworCQlwYW5lbF9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9w b3J0X3BhcmVudChlbmRwb2ludCk7CisJCW9mX25vZGVfcHV0KGVuZHBvaW50KTsKKwkJaWYgKCFw YW5lbF9ub2RlKSB7CisJCQlkZXZfZXJyKHBkYXRhLT5kZXYsICJubyBvdXRwdXQgbm9kZSBmb3Vu ZFxuIik7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJcGFuZWwgPSBvZl9kcm1fZmluZF9wYW5l bChwYW5lbF9ub2RlKTsKKwkJb2Zfbm9kZV9wdXQocGFuZWxfbm9kZSk7CisJCWlmICghcGFuZWwp IHsKKwkJCWRldl9lcnIocGRhdGEtPmRldiwgIm5vIHBhbmVsIG5vZGUgZm91bmRcbiIpOworCQkJ Z290byBlcnJvcjsKKwkJfQorCX0KKworCXBkYXRhLT5wYW5lbCA9IHBhbmVsOworCWRybV9wYW5l bF9hdHRhY2gocGFuZWwsICZwZGF0YS0+Y29ubmVjdG9yKTsKKworCXJldHVybjsKKworZXJyb3I6 CisJcGRhdGEtPnBhbmVsID0gTlVMTDsKK30KKworc3RhdGljIGludCB0aV9zbl9icmlkZ2VfYXR0 YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IG1pcGlfZHNpX2hvc3Qg Kmhvc3Q7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOworCXN0cnVjdCB0aV9zbl9icmlk Z2UgKnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOworCWludCByZXQ7CisJ Y29uc3Qgc3RydWN0IG1pcGlfZHNpX2RldmljZV9pbmZvIGluZm8gPSB7IC50eXBlID0gInRpX3Nu X2JyaWRnZSIsCisJCQkJCQkgICAuY2hhbm5lbCA9IDAsCisJCQkJCQkgICAubm9kZSA9IE5VTEws CisJCQkJCQkgfTsKKworCWlmICghYnJpZGdlLT5lbmNvZGVyKSB7CisJCURSTV9FUlJPUigiUGFy ZW50IGVuY29kZXIgb2JqZWN0IG5vdCBmb3VuZCIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisK KwkvKiBIUEQgbm90IHN1cHBvcnRlZCAqLworCXBkYXRhLT5jb25uZWN0b3IucG9sbGVkID0gMDsK KworCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChicmlkZ2UtPmRldiwgJnBkYXRhLT5jb25uZWN0 b3IsCisJCQkJICZ0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2Z1bmNzLAorCQkJCSBEUk1fTU9ERV9D T05ORUNUT1JfZURQKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRp YWxpemUgY29ubmVjdG9yIHdpdGggZHJtXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcm1f Y29ubmVjdG9yX2hlbHBlcl9hZGQoJnBkYXRhLT5jb25uZWN0b3IsCisJCQkJICZ0aV9zbl9icmlk Z2VfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9l bmNvZGVyKCZwZGF0YS0+Y29ubmVjdG9yLCBicmlkZ2UtPmVuY29kZXIpOworCisJaG9zdCA9IG9m X2ZpbmRfbWlwaV9kc2lfaG9zdF9ieV9ub2RlKHBkYXRhLT5ob3N0X25vZGUpOworCWlmICghaG9z dCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBmaW5kIGRzaSBob3N0XG4iKTsKKwkJcmV0dXJu IC1FTk9ERVY7CisJfQorCisJZHNpID0gbWlwaV9kc2lfZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoaG9z dCwgJmluZm8pOworCWlmIChJU19FUlIoZHNpKSkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBj cmVhdGUgZHNpIGRldmljZVxuIik7CisJCXJldCA9IFBUUl9FUlIoZHNpKTsKKwkJZ290byBlcnJf ZHNpX2RldmljZTsKKwl9CisKKwkvKiBUT0RPOiBzZXR0aW5nIHRvIDQgbGFuZXMgYWx3YXlzIGZv ciBub3cgKi8KKwlkc2ktPmxhbmVzID0gNDsKKwlkc2ktPmZvcm1hdCA9IE1JUElfRFNJX0ZNVF9S R0I4ODg7CisJZHNpLT5tb2RlX2ZsYWdzID0gTUlQSV9EU0lfTU9ERV9WSURFTyB8IE1JUElfRFNJ X01PREVfVklERU9fU1lOQ19QVUxTRSB8CisJCQkgIE1JUElfRFNJX01PREVfRU9UX1BBQ0tFVCB8 IE1JUElfRFNJX01PREVfVklERU9fSFNFOworCisJcmV0ID0gbWlwaV9kc2lfYXR0YWNoKGRzaSk7 CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYXR0YWNoIGRzaSB0byBo b3N0XG4iKTsKKwkJZ290byBlcnJfZHNpX2F0dGFjaDsKKwl9CisKKwlwZGF0YS0+ZHNpID0gZHNp OworCisJRFJNX0RFQlVHKCJicmlkZ2UgYXR0YWNoZWRcbiIpOworCS8qIGF0dGFjaCBwYW5lbCB0 byBicmlkZ2UgKi8KKwl0aV9zbl9icmlkZ2VfYXR0YWNoX3BhbmVsKHBkYXRhKTsKKworCXJldHVy biAwOworCitlcnJfZHNpX2F0dGFjaDoKKwltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3Rlcihkc2kp OworZXJyX2RzaV9kZXZpY2U6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdGlfc25f YnJpZGdlX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQkJICAgIHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqYWRqX21vZGUpCit7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBicmlkZ2VfdG9f dGlfc25fYnJpZGdlKGJyaWRnZSk7CisKKwlEUk1fREVCVUcoIm1vZGVfc2V0OiBoZGlzcGxheT0l ZCwgdmRpc3BsYXk9JWQsIHZyZWZyZXNoPSVkLCBjbG9jaz0lZFxuIiwKKwkJYWRqX21vZGUtPmhk aXNwbGF5LCBhZGpfbW9kZS0+dmRpc3BsYXksCisJCWFkal9tb2RlLT52cmVmcmVzaCwgYWRqX21v ZGUtPmNsb2NrKTsKKworCWRybV9tb2RlX2NvcHkoJnBkYXRhLT5jdXJyX21vZGUsIGFkal9tb2Rl KTsKK30KKworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190 aV9zbl9icmlkZ2UoYnJpZGdlKTsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCA9IHBkYXRhLT5w YW5lbDsKKworCWlmIChwYW5lbCkgeworCQlkcm1fcGFuZWxfZGlzYWJsZShwYW5lbCk7CisJCWRy bV9wYW5lbF91bnByZXBhcmUocGFuZWwpOworCX0KKworCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJs KHBkYXRhLCBmYWxzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9lbmFibGUoc3Ry dWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9 IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5l bCA9IHBkYXRhLT5wYW5lbDsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZwZGF0 YS0+Y3Vycl9tb2RlOworCXUzMiBiaXRfcmF0ZV9taHosIGNsa19mcmVxX21oejsKKwl1OCB2YWwg PSAwOworCisJaWYgKCFwZGF0YS0+bnVtX21vZGVzKQorCQlyZXR1cm47CisKKwl0aV9zbl9icmlk Z2VfcG93ZXJfY3RybChwZGF0YSwgdHJ1ZSk7CisKKwlpZiAocGFuZWwpCisJCWRybV9wYW5lbF9w cmVwYXJlKHBhbmVsKTsKKworCS8qIENMS19TUkMgY29uZmlnICovCisJdGlfc25fYnJpZGdlX3dy aXRlKHBkYXRhLCBTTl9SRUZDTEtfRlJFUV9SRUcsCisJCQkoRFBQTExfQ0xLX1NSQ19SRUZDTEsg fCAoU05fUkVGX0NMS18xOV8yX01IWiA8PCAweDEpKSk7CisKKwkvKiBEU0lfQSBsYW5lIGNvbmZp ZyAqLworCXRpX3NuX2JyaWRnZV9yZWFkKHBkYXRhLCBTTl9EU0lfTEFORVNfUkVHLCAmdmFsLCAw eDEpOworCXZhbCB8PSAoKDB4NCAtIHBkYXRhLT5kc2ktPmxhbmVzKSAmIDB4MDMpIDw8IDB4MzsK Kwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0RTSV9MQU5FU19SRUcsIHZhbCk7CisKKwkv KiBEUCBsYW5lIGNvbmZpZyAqLworCXRpX3NuX2JyaWRnZV9yZWFkKHBkYXRhLCBTTl9TU0NfQ09O RklHX1JFRywgJnZhbCwgMHgxKTsKKwl2YWwgfD0gKChwZGF0YS0+ZHNpLT5sYW5lcyAtIDB4MSkg JiAweDAzKSA8PCAweDQ7CisJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9TU0NfQ09ORklH X1JFRywgdmFsKTsKKworCS8qIHNldCBkc2kgY2xrIGZyZXF1ZW5jeSB2YWx1ZSAqLworCWJpdF9y YXRlX21oeiA9IChtb2RlLT5jbG9jayAvIDEwMDApICoKKwkJCW1pcGlfZHNpX3BpeGVsX2Zvcm1h dF90b19icHAocGRhdGEtPmRzaS0+Zm9ybWF0KTsKKwljbGtfZnJlcV9taHogPSBiaXRfcmF0ZV9t aHogLyAocGRhdGEtPmRzaS0+bGFuZXMgKiAyKTsKKwkvKiBmb3IgZWFjaCBpbmNyZW1lbnQgaW4g dmFsLCBmcmVxdWVuY3kgaW5jcmVhc2VzIGJ5IDVNSHogKi8KKwl2YWwgPSAoTUlOX0RTSV9DTEtf RlJFUV9NSFogLyAweDUpICsKKwkJKCgoY2xrX2ZyZXFfbWh6IC0gTUlOX0RTSV9DTEtfRlJFUV9N SFopIC8gMHg1KSAmIDB4RkYpOworCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fRFNJQV9D TEtfRlJFUV9SRUcsIHZhbCk7CisKKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0RBVEFS QVRFX0NPTkZJR19SRUcsIDB4ODApOyAvKiBzZXQgSEJSICovCisKKwl0aV9zbl9icmlkZ2Vfd3Jp dGUocGRhdGEsIFNOX1BMTF9FTkFCTEVfUkVHLCAweDEpOyAvKiBFbmFibGUgUExMICovCisJdXNs ZWVwX3JhbmdlKDEwMDAwLCAxMDAwMSk7CisKKwkvKiBEUENEIFJlZ2lzdGVyIDB4MDAxMEEgaW4g U2luayAqLworCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fQVVYX1dEQVRBMF9SRUcsIDB4 MDEpOworCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fQVVYX0FERFJfMTlfMTZfUkVHLCAw eDAwKTsKKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0FVWF9BRERSXzE1XzhfUkVHLCAw eDAxKTsKKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0FVWF9BRERSXzdfMF9SRUcsIDB4 MEEpOworCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fQVVYX0xFTkdUSF9SRUcsIDB4MDEp OworCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fQVVYX0NNRF9SRUcsIDB4ODEpOworCXVz bGVlcF9yYW5nZSgxMDAwMCwgMTAwMDEpOworCisJLyogU2VtaSBhdXRvIGxpbmsgdHJhaW5pbmcg bW9kZSAqLworCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fTUxfVFhfTU9ERV9SRUcsIDB4 MEEpOworCXVzbGVlcF9yYW5nZSgyMDAwMCwgMjAwMDEpOworCisJLyogY29uZmlnIHZpZGVvIHBh cmFtZXRlcnMgKi8KKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0NIQV9BQ1RJVkVfTElO RV9MRU5HVEhfTE9XX1JFRywKKwkJCW1vZGUtPmhkaXNwbGF5ICYgMHhGRik7CisJdGlfc25fYnJp ZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0hJR0hfUkVHLAorCQkJ KG1vZGUtPmhkaXNwbGF5ID4+IDB4OCkgJiAweEZGKTsKKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRh dGEsIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfTE9XX1JFRywKKwkJCW1vZGUtPnZkaXNw bGF5ICYgMHhGRik7CisJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFfVkVSVElDQUxf RElTUExBWV9TSVpFX0hJR0hfUkVHLAorCQkJKG1vZGUtPmhkaXNwbGF5ID4+IDB4OCkgJiAweEZG KTsKKwl0aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9M T1dfUkVHLAorCQkJKG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZCkgJiAweEZGKTsKKwl0 aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JF RywKKwkJCSgobW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kKSA+PiAweDgpICYgMHhGRik7 CisJdGlfc25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfTE9X X1JFRywKKwkJCShtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQpICYgMHhGRik7CisJdGlf c25fYnJpZGdlX3dyaXRlKHBkYXRhLCBTTl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcs CisJCQkoKG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZCkgPj4gMHg4KSAmIDB4RkYpOwor CXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fQ0hBX0hPUklaT05UQUxfQkFDS19QT1JDSF9S RUcsCisJCQkobW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheSkgJiAweEZGKTsKKwl0 aV9zbl9icmlkZ2Vfd3JpdGUocGRhdGEsIFNOX0NIQV9WRVJUSUNBTF9CQUNLX1BPUkNIX1JFRywK KwkJCShtb2RlLT52c3luY19zdGFydCAtIG1vZGUtPnZkaXNwbGF5KSAmIDB4RkYpOworCXRpX3Nu X2JyaWRnZV93cml0ZShwZGF0YSwgU05fQ0hBX0hPUklaT05UQUxfRlJPTlRfUE9SQ0hfUkVHLAor CQkJKG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0KSAmIDB4RkYpOworCXRpX3Nu X2JyaWRnZV93cml0ZShwZGF0YSwgU05fQ0hBX1ZFUlRJQ0FMX0ZST05UX1BPUkNIX1JFRywKKwkJ CShtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydCkgJiAweEZGKTsKKwlpZiAocGRh dGEtPmRzaS0+Zm9ybWF0ID09IE1JUElfRFNJX0ZNVF9SR0I4ODgpCisJCXRpX3NuX2JyaWRnZV93 cml0ZShwZGF0YSwgU05fREFUQV9GT1JNQVRfUkVHLCAweDAwKTsKKwllbHNlCisJCXRpX3NuX2Jy aWRnZV93cml0ZShwZGF0YSwgU05fREFUQV9GT1JNQVRfUkVHLCAweDAxKTsKKwl1c2xlZXBfcmFu Z2UoMTAwMDAsIDEwMDAxKTsKKworCS8qIGVuYWJsZSB2aWRlbyBzdHJlYW0gKi8KKwl0aV9zbl9i cmlkZ2VfcmVhZChwZGF0YSwgU05fRU5IX0ZSQU1FX1JFRywgJnZhbCwgMHgxKTsKKwl2YWwgfD0g QklUKDMpOworCXRpX3NuX2JyaWRnZV93cml0ZShwZGF0YSwgU05fRU5IX0ZSQU1FX1JFRywgdmFs KTsKKworCWlmIChwYW5lbCkKKwkJZHJtX3BhbmVsX2VuYWJsZShwYW5lbCk7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyB0aV9zbl9icmlkZ2VfZnVuY3MgPSB7CisJ LmF0dGFjaCA9IHRpX3NuX2JyaWRnZV9hdHRhY2gsCisJLmVuYWJsZSA9IHRpX3NuX2JyaWRnZV9l bmFibGUsCisJLmRpc2FibGUgPSB0aV9zbl9icmlkZ2VfZGlzYWJsZSwKKwkubW9kZV9zZXQgPSB0 aV9zbl9icmlkZ2VfbW9kZV9zZXQsCit9OworCitzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9wYXJz ZV9ncGlvcyhzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKK3sKKwlpbnQgcmV0ID0gMDsKKwor CWlmICghcGRhdGEgfHwgIXBkYXRhLT5kZXYpCisJCXJldHVybiAtRUlOVkFMOworCisJcGRhdGEt PmVuYWJsZV9ncGlvcyA9IGRldm1fZ3Bpb2RfZ2V0X2FycmF5KHBkYXRhLT5kZXYsCisJCQkJCQki ZW5hYmxlIiwgR1BJT0RfT1VUX0xPVyk7CisJaWYgKElTX0VSUihwZGF0YS0+ZW5hYmxlX2dwaW9z KSkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgZW5hYmxlIGdwaW8gZnJvbSBEVFxuIik7 CisJCXJldCA9IFBUUl9FUlIocGRhdGEtPmVuYWJsZV9ncGlvcyk7CisJCWdvdG8gZXhpdDsKKwl9 CisKKwlwZGF0YS0+aXJxX2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChwZGF0YS0+ZGV2 LCAiaXJxIiwKKwkJCQkJCSAgR1BJT0RfT1VUX0xPVyk7CisJaWYgKElTX0VSUihwZGF0YS0+aXJx X2dwaW8pKQorCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgaXJxIGdwaW8gZnJvbSBEVFxuIik7 CisKK2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcGFy c2VfZHNpX2hvc3Qoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCit7CisJc3RydWN0IGRldmlj ZV9ub2RlICpucCA9IHBkYXRhLT5kZXYtPm9mX25vZGU7CisJc3RydWN0IGRldmljZV9ub2RlICpl bmRfbm9kZTsKKworCWVuZF9ub2RlID0gb2ZfZ3JhcGhfZ2V0X2VuZHBvaW50X2J5X3JlZ3MobnAs IDAsIDApOworCWlmICghZW5kX25vZGUpIHsKKwkJRFJNX0VSUk9SKCJyZW1vdGUgZW5kcG9pbnQg bm90IGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGRhdGEtPmhvc3Rfbm9k ZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZW5kX25vZGUpOworCW9mX25vZGVf cHV0KGVuZF9ub2RlKTsKKwlpZiAoIXBkYXRhLT5ob3N0X25vZGUpIHsKKwkJRFJNX0VSUk9SKCJy ZW1vdGUgbm9kZSBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJb2Zfbm9k ZV9wdXQocGRhdGEtPmhvc3Rfbm9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0 aV9zbl9icmlkZ2VfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkgY29uc3Qgc3Ry dWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhOwor CXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGRjX25vZGU7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWNs aWVudCB8fCAhY2xpZW50LT5kZXYub2Zfbm9kZSkgeworCQlEUk1fRVJST1IoImludmFsaWQgaW5w dXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlv bmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgeworCQlEUk1fRVJST1IoImRl dmljZSBkb2Vzbid0IHN1cHBvcnQgSTJDXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJ cGRhdGEgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LAorCQlzaXplb2Yoc3RydWN0IHRpX3Nu X2JyaWRnZSksIEdGUF9LRVJORUwpOworCWlmICghcGRhdGEpCisJCXJldHVybiAtRU5PTUVNOwor CisJcGRhdGEtPnBvd2VyX29uID0gZmFsc2U7CisJcGRhdGEtPmRldiA9ICZjbGllbnQtPmRldjsK KwlwZGF0YS0+aTJjX2NsaWVudCA9IGNsaWVudDsKKwlEUk1fREVCVUcoIkkyQyBhZGRyZXNzIGlz ICV4XG4iLCBjbGllbnQtPmFkZHIpOworCisJcmV0ID0gdGlfc25fYnJpZGdlX3BhcnNlX2RzaV9o b3N0KHBkYXRhKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBhcnNlIGRl dmljZSB0cmVlXG4iKTsKKwkJZ290byBlcnJfZHRfcGFyc2U7CisJfQorCisJcmV0ID0gdGlfc25f YnJpZGdlX3BhcnNlX2dwaW9zKHBkYXRhKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFp bGVkIHRvIHBhcnNlIGdwaW9zIGZyb20gRFRcbiIpOworCQlnb3RvIGVycl9kdF9wYXJzZTsKKwl9 CisKKwlyZXQgPSB0aV9zbl9icmlkZ2VfcGFyc2VfcmVndWxhdG9ycyhwZGF0YSk7CisJaWYgKHJl dCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBwYXJzZSByZWd1bGF0b3JzXG4iKTsKKwkJZ290 byBlcnJfZHRfcGFyc2U7CisJfQorCisJZGRjX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBkYXRh LT5kZXYtPm9mX25vZGUsICJkZGMtaTJjLWJ1cyIsIDApOworCWlmIChkZGNfbm9kZSkgeworCQlw ZGF0YS0+ZGRjID0gb2ZfZmluZF9pMmNfYWRhcHRlcl9ieV9ub2RlKGRkY19ub2RlKTsKKwkJb2Zf bm9kZV9wdXQoZGRjX25vZGUpOworCQlpZiAoIXBkYXRhLT5kZGMpIHsKKwkJCWRldl9kYmcocGRh dGEtPmRldiwgImZhaWxlZCB0byByZWFkIGRkYyBub2RlXG4iKTsKKwkJCXJldHVybiAtRVBST0JF X0RFRkVSOworCQl9CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhwZGF0YS0+ZGV2LCAibm8gZGRjIHBy b3BlcnR5IGZvdW5kXG4iKTsKKwl9CisKKwl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwg dHJ1ZSk7CisJcmV0ID0gdGlfc25fYnJpZGdlX3JlYWRfZGV2aWNlX3JldihwZGF0YSk7CisJaWYg KHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byByZWFkIGNoaXAgcmV2XG4iKTsKKwkJZ290 byBlcnJfY29uZmlnOworCX0gZWxzZSB7CisJCURSTV9ERUJVRygiYnJpZGdlIGNoaXAgZW5hYmxl ZCBzdWNjZXNzZnVsbHlcbiIpOworCX0KKwl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwg ZmFsc2UpOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcGRhdGEpOworCWRldl9zZXRf ZHJ2ZGF0YSgmY2xpZW50LT5kZXYsIHBkYXRhKTsKKworCXBkYXRhLT5icmlkZ2UuZnVuY3MgPSAm dGlfc25fYnJpZGdlX2Z1bmNzOworCXBkYXRhLT5icmlkZ2Uub2Zfbm9kZSA9IGNsaWVudC0+ZGV2 Lm9mX25vZGU7CisKKwlkcm1fYnJpZGdlX2FkZCgmcGRhdGEtPmJyaWRnZSk7CisKKwlyZXR1cm4g cmV0OworCitlcnJfY29uZmlnOgorCXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBkYXRhLCBmYWxz ZSk7CitlcnJfZHRfcGFyc2U6CisJZGV2bV9rZnJlZSgmY2xpZW50LT5kZXYsIHBkYXRhKTsKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9yZW1vdmUoc3RydWN0IGky Y19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgdGlfc25f YnJpZGdlICpwZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaWYgKCFwZGF0 YSkKKwkJZ290byBlbmQ7CisKKwltaXBpX2RzaV9kZXRhY2gocGRhdGEtPmRzaSk7CisJbWlwaV9k c2lfZGV2aWNlX3VucmVnaXN0ZXIocGRhdGEtPmRzaSk7CisKKwlkcm1fYnJpZGdlX3JlbW92ZSgm cGRhdGEtPmJyaWRnZSk7CisKKwlkaXNhYmxlX2lycShwZGF0YS0+aXJxKTsKKwlmcmVlX2lycShw ZGF0YS0+aXJxLCBwZGF0YSk7CisKKwl0aV9zbl9icmlkZ2VfZ3Bpb19jb25maWd1cmUocGRhdGEs IGZhbHNlKTsKKwlpMmNfcHV0X2FkYXB0ZXIocGRhdGEtPmRkYyk7CisKKwlkZXZtX2tmcmVlKCZj bGllbnQtPmRldiwgcGRhdGEpOworCitlbmQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0 cnVjdCBpMmNfZGV2aWNlX2lkIHRpX3NuX2JyaWRnZV9pZFtdID0geworCXsgInRpLHNuNjVkc2k4 NiIsIDB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRpX3NuX2JyaWRnZV9p ZCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRpX3NuX2JyaWRnZV9tYXRj aF90YWJsZVtdID0geworCXsuY29tcGF0aWJsZSA9ICJ0aSxzbjY1ZHNpODYifSwKKwl7fQorfTsK K01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZSk7CisKK3N0 YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0aV9zbl9icmlkZ2VfZHJpdmVyID0geworCS5kcml2ZXIg PSB7CisJCS5uYW1lID0gInRpX3NuNjVkc2k4NiIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAor CQkub2ZfbWF0Y2hfdGFibGUgPSB0aV9zbl9icmlkZ2VfbWF0Y2hfdGFibGUsCisJfSwKKwkucHJv YmUgPSB0aV9zbl9icmlkZ2VfcHJvYmUsCisJLnJlbW92ZSA9IHRpX3NuX2JyaWRnZV9yZW1vdmUs CisJLmlkX3RhYmxlID0gdGlfc25fYnJpZGdlX2lkLAorfTsKKworbW9kdWxlX2kyY19kcml2ZXIo dGlfc25fYnJpZGdlX2RyaXZlcik7CitNT0RVTEVfREVTQ1JJUFRJT04oInNuNjVkc2k4NiBEU0kg dG8gZURQIGJyaWRnZSBkcml2ZXIiKTsKLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRl ciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmEgTGludXggRm91 bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ZyZWVkcmVubwo=