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: Thu, 19 Apr 2018 23:26:05 +0530 Message-ID: <1524160568-27583-2-git-send-email-spanda@codeaurora.org> References: <1524160568-27583-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: <1524160568-27583-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 YXMgbm90IGJlZW4gYWRkZWQgdG8gYnJpZGdlCmNoaXAgZHJpdmVyLgoKQ2hhbmdlcyBpbiB2MToK IC0gU3BsaXQgdGhlIGR0LWJpbmRpbmdzIGFuZCB0aGUgZHJpdmVyIHN1cHBvcnQgaW50byBzZXBh cmF0ZSBwYXRjaGVzCiAgIChBbmRyemVqIEhhamRhKS4KIC0gVXNlIG9mIGdwaW9kIEFQSXMgdG8g cGFyc2UgYW5kIGNvbmZpZ3VyZSBncGlvcyBpbnN0ZWFkIG9mIG9ic29sZXRlIG9uZXMKICAgKEFu ZHJ6ZWogSGFqZGEpLgogLSBVc2UgbWFjcm9zIHRvIGRlZmluZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0 cyAoQW5kcnplaiBIYWpkYSkuCgpDaGFuZ2VzIGluIHYyOgogLSBTZXBhcmF0ZSBvdXQgZWRwIHBh bmVsIHNwZWNpZmljIEhXIHJlc291cmNlIGhhbmRsaW5nIGZyb20gYnJpZGdlCiAgIGRyaXZlciBh bmQgY3JlYXRlIGEgc2VwYXJhdGUgZWRwIHBhbmVsIGRyaXZlcnMgdG8gaGFuZGxlIHBhbmVsCiAg IHNwZWNpZmljIG1vZGUgaW5mb3JtYXRpb24gYW5kIEhXIHJlc291cmNlcyAoU2VhbiBQYXVsKS4K IC0gUmVwbGFjZSBwcl8qIEFQSXMgdG8gRFJNXyogQVBJcyB0byBsb2cgZXJyb3Igb3IgZGVidWcg aW5mb3JtYXRpb24KICAgKFNlYW4gUGF1bCkuCiAtIFJlbW92ZSBzb21lIG9mIHRoZSB1bm5lY2Vz c2FyeSBzdHJ1Y3R1cmUvdmFyaWFibGUgZnJvbSBkcml2ZXIgKFNlYW4KICAgUGF1bCkuCiAtIFJl bmFtZSB0aGUgZnVuY3Rpb24gYW5kIHN0cnVjdHVyZSBwcmVmaXggInNuNjVkc2k4NiIgdG8gInRp X3NuX2JyaWRnZSIKICAgKFNlYW4gUGF1bCAvIFJvYiBIZXJyaW5nKS4KIC0gUmVtb3ZlIG1vc3Qg b2YgdGhlIGhhcmQtY29kaW5nIGFuZCBtb2RpZmllZCB0aGUgYnJpZGdlIGluaXQgc2VxdWVuY2UK ICAgYmFzZWQgb24gY3VycmVudCBtb2RlIChTZWFuIFBhdWwpLgogLSBSZW1vdmUgdGhlIGV4aXN0 aW5nIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBFRElEIGRhdGEgYW5kCiAgIGltcGxlbWVudGVk IHRoaXMgYXMgYW4gaTJjX2FkYXB0ZXIgYW5kIHVzZSBkcm1fZ2V0X2VkaWQoKSAoU2VhbiBQYXVs KS4KIC0gUmVtb3ZlIHRoZSBkdW1teSBpcnEgaGFuZGxlciBpbXBsZW1lbnRhdGlvbiwgd2lsbCBh ZGQgYmFjayB0aGUKICAgcHJvcGVyIGlycSBoYW5kbGluZyBsYXRlciAoU2VhbiBQYXVsKS4KIC0g Q2FwdHVyZSB0aGUgcmVxdWlyZWQgZW5hYmxlIGdwaW9zIGluIGEgc2luZ2xlIGFycmF5IGJhc2Vk IG9uIGR0IGVudHJ5CiAgIGluc3RlYWQgb2YgaGF2aW5nIGluZGl2aWR1YWwgZGVzY3JpcHRvciBm b3IgZWFjaCBncGlvIChTZWFuIFBhdWwpLgoKQ2hhbmdlcyBpbiB2MzoKIC0gUmVtb3ZlIHVzYWdl IG9mIGlycV9ncGlvIGFuZCByZXBsYWNlIGl0IGFzICJpbnRlcnJ1cHRzIiBwcm9wZXJ0eSAoUm9i CiAgIEhlcnJpbmcpLgogLSBSZW1vdmUgdGhlIHVubmVjZXNzYXJ5IGhlYWRlciBmaWxlIGluY2x1 c2lvbnMgKFNlYW4gUGF1bCkuCiAtIFJlYXJyYW5nZSB0aGUgaGVhZGVyIGZpbGVzIGluIGFscGhh YmV0aWNhbCBvcmRlciAoU2VhbiBQYXVsKS4KIC0gVXNlIHJlZ21hcCBpbnRlcmZhY2UgdG8gcGVy Zm9ybSBpMmMgdHJhbnNhY3Rpb25zLgogLSBVcGRhdGUgQ29weXJpZ2h0L0xpY2Vuc2UgZmllbGQg YW5kIGFkZHJlc3Mgb3RoZXIgcmV2aWV3IGNvbW1lbnRzCiAgIChKb3JkYW4gQ3JvdXNlKS4KClNp Z25lZC1vZmYtYnk6IFNhbmRlZXAgUGFuZGEgPHNwYW5kYUBjb2RlYXVyb3JhLm9yZz4KLS0tCiBk cml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jIHwgNjkwICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA2OTAgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMK CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jIGIvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5hMmE5NWY1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS90aS1zbjY1ZHNpODYuYwpAQCAtMCwwICsxLDY5MCBAQAorLyoKKyAqIENvcHlyaWdo dCAoYykgMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNs dWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CisjaW5jbHVkZSA8 bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxs aW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKworI2RlZmluZSBTTl9CUklER0VfUkVWSVNJT05f SUQgMHgyCisKKy8qIExpbmsgVHJhaW5pbmcgc3BlY2lmaWMgcmVnaXN0ZXJzICovCisjZGVmaW5l IFNOX0RFVklDRV9SRVZfUkVHCQkJMHgwOAorI2RlZmluZSBTTl9SRUZDTEtfRlJFUV9SRUcJCQkw eDBBCisjZGVmaW5lIFNOX0RTSV9MQU5FU19SRUcJCQkweDEwCisjZGVmaW5lIFNOX0RTSUFfQ0xL X0ZSRVFfUkVHCQkJMHgxMgorI2RlZmluZSBTTl9FTkhfRlJBTUVfUkVHCQkJMHg1QQorI2RlZmlu ZSBTTl9TU0NfQ09ORklHX1JFRwkJCTB4OTMKKyNkZWZpbmUgU05fREFUQVJBVEVfQ09ORklHX1JF RwkJCTB4OTQKKyNkZWZpbmUgU05fUExMX0VOQUJMRV9SRUcJCQkweDBECisjZGVmaW5lIFNOX1ND UkFNQkxFX0NPTkZJR19SRUcJCQkweDk1CisjZGVmaW5lIFNOX0FVWF9XREFUQTBfUkVHCQkJMHg2 NAorI2RlZmluZSBTTl9BVVhfQUREUl8xOV8xNl9SRUcJCQkweDc0CisjZGVmaW5lIFNOX0FVWF9B RERSXzE1XzhfUkVHCQkJMHg3NQorI2RlZmluZSBTTl9BVVhfQUREUl83XzBfUkVHCQkJMHg3Ngor I2RlZmluZSBTTl9BVVhfTEVOR1RIX1JFRwkJCTB4NzcKKyNkZWZpbmUgU05fQVVYX0NNRF9SRUcJ CQkJMHg3OAorI2RlZmluZSBTTl9NTF9UWF9NT0RFX1JFRwkJCTB4OTYKKy8qIHZpZGVvIGNvbmZp ZyBzcGVjaWZpYyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU05fQ0hBX0FDVElWRV9MSU5FX0xFTkdU SF9MT1dfUkVHCTB4MjAKKyNkZWZpbmUgU05fQ0hBX0FDVElWRV9MSU5FX0xFTkdUSF9ISUdIX1JF RwkweDIxCisjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfTE9XX1JFRwkweDI0 CisjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfSElHSF9SRUcJMHgyNQorI2Rl ZmluZSBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRwkweDJDCisjZGVmaW5lIFNOX0NI QV9IU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRwkweDJECisjZGVmaW5lIFNOX0NIQV9WU1lOQ19Q VUxTRV9XSURUSF9MT1dfUkVHCTB4MzAKKyNkZWZpbmUgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRI X0hJR0hfUkVHCTB4MzEKKyNkZWZpbmUgU05fQ0hBX0hPUklaT05UQUxfQkFDS19QT1JDSF9SRUcJ MHgzNAorI2RlZmluZSBTTl9DSEFfVkVSVElDQUxfQkFDS19QT1JDSF9SRUcJCTB4MzYKKyNkZWZp bmUgU05fQ0hBX0hPUklaT05UQUxfRlJPTlRfUE9SQ0hfUkVHCTB4MzgKKyNkZWZpbmUgU05fQ0hB X1ZFUlRJQ0FMX0ZST05UX1BPUkNIX1JFRwkJMHgzQQorI2RlZmluZSBTTl9EQVRBX0ZPUk1BVF9S RUcJCQkweDVCCisKKyNkZWZpbmUgTUlOX0RTSV9DTEtfRlJFUV9NSFoJNDAKKworI2RlZmluZSBE UFBMTF9DTEtfU1JDX1JFRkNMSwkwCisjZGVmaW5lIERQUExMX0NMS19TUkNfRFNJQ0xLCTEKKwor ZW51bSB0aV9zbl9icmlkZ2VfcmVmX2Nsa3MgeworCVNOX1JFRl9DTEtfMTJfTUhaID0gMCwKKwlT Tl9SRUZfQ0xLXzE5XzJfTUhaLAorCVNOX1JFRl9DTEtfMjZfTUhaLAorCVNOX1JFRl9DTEtfMjdf TUhaLAorCVNOX1JFRl9DTEtfMzhfNF9NSFosCisJU05fUkVGX0NMS19NQVgsCit9OworCitzdHJ1 Y3QgdGlfc25fYnJpZGdlIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHJlZ21hcCAq cmVnbWFwOworCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciBjb25uZWN0b3I7CisJc3RydWN0IGRldmljZV9ub2RlICpob3N0X25vZGU7CisJc3RydWN0IG1p cGlfZHNpX2RldmljZSAqZHNpOworCS8qIGhhbmRsZSB0byB0aGUgY29ubmVjdGVkIGVEUCBwYW5l bCAqLworCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOworCS8qIGxpc3Qgb2YgZ3Bpb3MgbmVlZGVk IHRvIGVuYWJsZSB0aGUgYnJpZGdlIGZ1bmN0aW9uYWxpdHkgKi8KKwlzdHJ1Y3QgZ3Bpb19kZXNj cyAqZW5hYmxlX2dwaW9zOworCWludCAqdmFsdWVfYXJyYXk7CisJaW50IGludHBfaXJxOworCXVu c2lnbmVkIGludCBudW1fc3VwcGxpZXM7CisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgKnN1 cHBsaWVzOworCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50OworCXN0cnVjdCBpMmNfYWRh cHRlciAqZGRjOworCXUzMiBudW1fbW9kZXM7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgY3Vy cl9tb2RlOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2UgdGlfc25fYnJp ZGdlX3ZvbGF0aWxlX3Jhbmdlc1tdID0geworCXsgLnJhbmdlX21pbiA9IDAsIC5yYW5nZV9tYXgg PSAweGZmIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUg dGlfc25fYnJpZGdlX3ZvbGF0aWxlX3RhYmxlID0geworCS55ZXNfcmFuZ2VzID0gdGlfc25fYnJp ZGdlX3ZvbGF0aWxlX3JhbmdlcywKKwkubl95ZXNfcmFuZ2VzID0gQVJSQVlfU0laRSh0aV9zbl9i cmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFw X2NvbmZpZyB0aV9zbl9icmlkZ2VfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSA4LAor CS52YWxfYml0cyA9IDgsCisJLnZvbGF0aWxlX3RhYmxlID0gJnRpX3NuX2JyaWRnZV92b2xhdGls ZV90YWJsZSwKKwkuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX05PTkUsCit9OworCitzdGF0aWMgdm9p ZCB0aV9zbl9icmlkZ2VfZ3Bpb19jb25maWd1cmUoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEs IGJvb2wgb24pCit7CisJaW50IHZhbHVlLCBpID0gMDsKKworCXZhbHVlID0gb24gPyAxIDogMDsK KworCWlmIChwZGF0YS0+ZW5hYmxlX2dwaW9zLT5uZGVzY3MgJiYgcGRhdGEtPnZhbHVlX2FycmF5 KSB7CisJCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+ZW5hYmxlX2dwaW9zLT5uZGVzY3M7IGkrKykK KwkJCXBkYXRhLT52YWx1ZV9hcnJheVtpXSA9IHZhbHVlOworCQlncGlvZF9zZXRfYXJyYXlfdmFs dWUocGRhdGEtPmVuYWJsZV9ncGlvcy0+bmRlc2NzLAorCQkJcGRhdGEtPmVuYWJsZV9ncGlvcy0+ ZGVzYywgcGRhdGEtPnZhbHVlX2FycmF5KTsKKwl9CisKKwlEUk1fREVCVUcoImNvbmZpZyB0bzog JWRcbiIsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwo c3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEsIGJvb2wgZW5hYmxlKQoreworCXN0YXRpYyBpbnQg cmVmX2NvdW50OworCisJaWYgKGVuYWJsZSkKKwkJcmVmX2NvdW50Kys7CisJZWxzZQorCQlyZWZf Y291bnQtLTsKKworCWlmIChlbmFibGUgJiYgKHJlZl9jb3VudCA9PSAxKSkgeworCQl0aV9zbl9i cmlkZ2VfZ3Bpb19jb25maWd1cmUocGRhdGEsIHRydWUpOworCisJCWlmIChyZWd1bGF0b3JfYnVs a19lbmFibGUocGRhdGEtPm51bV9zdXBwbGllcywKKwkJCQkJCXBkYXRhLT5zdXBwbGllcykpIHsK KwkJCURSTV9FUlJPUigiYnJpZGdlIHJlZ3VsYXRvciBlbmFibGUgZmFpbGVkXG4iKTsKKwkJCXJl dHVybjsKKwkJfQorCX0gZWxzZSBpZiAoIWVuYWJsZSAmJiAhcmVmX2NvdW50KSB7CisJCXJlZ3Vs YXRvcl9idWxrX2Rpc2FibGUocGRhdGEtPm51bV9zdXBwbGllcywgcGRhdGEtPnN1cHBsaWVzKTsK KworCQl0aV9zbl9icmlkZ2VfZ3Bpb19jb25maWd1cmUocGRhdGEsIGZhbHNlKTsKKwl9IGVsc2Ug eworCQlEUk1fREVCVUcoInRpX3NuX2JyaWRnZSBwb3dlciBjdHJsOiAlZCByZWZjb3VudDogJWRc biIsCisJCQkJCQkJZW5hYmxlLCByZWZfY291bnQpOworCX0KK30KKworLyogQ29ubmVjdG9yIGZ1 bmNzICovCitzdGF0aWMgc3RydWN0IHRpX3NuX2JyaWRnZSAqCitjb25uZWN0b3JfdG9fdGlfc25f YnJpZGdlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJcmV0dXJuIGNvbnRh aW5lcl9vZihjb25uZWN0b3IsIHN0cnVjdCB0aV9zbl9icmlkZ2UsIGNvbm5lY3Rvcik7Cit9CisK K3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGNv bm5lY3Rvcl90b190aV9zbl9icmlkZ2UoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZHJtX3BhbmVsICpw YW5lbCA9IHBkYXRhLT5wYW5lbDsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKworCWlmIChwYW5lbCkg eworCQlEUk1fREVCVUcoImdldCBtb2RlIGZyb20gY29ubmVjdGVkIGRybV9wYW5lbFxuIik7CisJ CXBkYXRhLT5udW1fbW9kZXMgPSBkcm1fcGFuZWxfZ2V0X21vZGVzKHBhbmVsKTsKKwl9IGVsc2Ug eworCQkvKiBnZXQgZnJvbSBFRElEICovCisJCWlmICghcGRhdGEtPmRkYykKKwkJCXJldHVybiAw OworCQl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwgdHJ1ZSk7CisJCWVkaWQgPSBkcm1f Z2V0X2VkaWQoY29ubmVjdG9yLCBwZGF0YS0+ZGRjKTsKKwkJaWYgKGVkaWQpIHsKKwkJCWRybV9t b2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsCisJCQkJCQkJCWVk aWQpOworCQkJcGRhdGEtPm51bV9tb2RlcyA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3Is IGVkaWQpOworCQkJZHJtX2VkaWRfdG9fZWxkKGNvbm5lY3RvciwgZWRpZCk7CisJCQlrZnJlZShl ZGlkKTsKKwkJfSBlbHNlIHsKKwkJCURSTV9ERUJVRygiZmFpbGVkIHRvIGdldCBlZGlkXG4iKTsK KwkJfQorCQl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwgZmFsc2UpOworCX0KKworCXJl dHVybiBwZGF0YS0+bnVtX21vZGVzOworfQorCitzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMK K3RpX3NuX2JyaWRnZV9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLAorCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwkv KiBtYXhpbXVtIHN1cHBvcnRlZCByZXNvbHV0aW9uIGlzIDRLIGF0IDYwIGZwcyAqLworCWlmICht b2RlLT5jbG9jayA+IDU5NDAwMCkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKworCXJldHVy biBNT0RFX09LOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNz IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSB0 aV9zbl9icmlkZ2VfY29ubmVjdG9yX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IHRpX3NuX2Jy aWRnZV9jb25uZWN0b3JfbW9kZV92YWxpZCwKK307CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0 b3Jfc3RhdHVzCit0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBk YXRhID0gY29ubmVjdG9yX3RvX3RpX3NuX2JyaWRnZShjb25uZWN0b3IpOworCisJLyoqCisJICog VE9ETzogQ3VycmVudGx5IGlmIGRybV9wYW5lbCBpcyBwcmVzZW50LCB0aGVuIGFsd2F5cworCSAq IHJldHVybiB0aGUgc3RhdHVzIGFzIGNvbm5lY3RlZC4gTmVlZCB0byBhZGQgc3VwcG9ydCB0byBk ZXRlY3QKKwkgKiBkZXZpY2Ugc3RhdGUgZm9yIG5vIHBhbmVsKGhvdCBwbHVnZ2FibGUpIHNjZW5h cmlvcy4KKwkgKi8KKwlpZiAocGRhdGEtPnBhbmVsKQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1 c19jb25uZWN0ZWQ7CisJZWxzZQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0 ZWQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyB0aV9zbl9i cmlkZ2VfY29ubmVjdG9yX2Z1bmNzID0geworCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9i ZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXRlY3QgPSB0aV9zbl9icmlkZ2VfY29ubmVj dG9yX2RldGVjdCwKKwkuZGVzdHJveSA9IGRybV9jb25uZWN0b3JfY2xlYW51cCwKKwkucmVzZXQg PSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVf c3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5h dG9taWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95 X3N0YXRlLAorfTsKKworc3RhdGljIHN0cnVjdCB0aV9zbl9icmlkZ2UgKmJyaWRnZV90b190aV9z bl9icmlkZ2Uoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlyZXR1cm4gY29udGFpbmVy X29mKGJyaWRnZSwgc3RydWN0IHRpX3NuX2JyaWRnZSwgYnJpZGdlKTsKK30KKworc3RhdGljIGlu dCB0aV9zbl9icmlkZ2VfcmVhZF9kZXZpY2VfcmV2KHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRh KQoreworCXVuc2lnbmVkIGludCByZXYgPSAwOworCWludCByZXQgPSAwOworCisJcmV0ID0gcmVn bWFwX3JlYWQocGRhdGEtPnJlZ21hcCwgU05fREVWSUNFX1JFVl9SRUcsICZyZXYpOworCWlmIChy ZXQpCisJCWdvdG8gZXhpdDsKKworCWlmIChyZXYgPT0gU05fQlJJREdFX1JFVklTSU9OX0lEKSB7 CisJCURSTV9ERUJVRygidGlfc25fYnJpZGdlIHJldmlzaW9uIGlkOiAweCV4XG4iLCByZXYpOwor CX0gZWxzZSB7CisJCURSTV9FUlJPUigidGlfc25fYnJpZGdlIHJldmlzaW9uIGlkOiAweCV4IG1p c21hdGNoXG4iLCByZXYpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworZXhpdDoKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRpX3NuX2JyaWRnZV9zdXBwbHlf bmFtZXNbXSA9IHsKKwkidmNjaW8iLAorCSJ2Y2NhIiwKK307CisKK3N0YXRpYyBpbnQgdGlfc25f YnJpZGdlX3BhcnNlX3JlZ3VsYXRvcnMoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCit7CisJ dW5zaWduZWQgaW50IGk7CisKKwlwZGF0YS0+bnVtX3N1cHBsaWVzID0gQVJSQVlfU0laRSh0aV9z bl9icmlkZ2Vfc3VwcGx5X25hbWVzKTsKKworCXBkYXRhLT5zdXBwbGllcyA9IGRldm1fa2NhbGxv YyhwZGF0YS0+ZGV2LCBwZGF0YS0+bnVtX3N1cHBsaWVzLAorCQkJCSAgICAgc2l6ZW9mKCpwZGF0 YS0+c3VwcGxpZXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkYXRhLT5zdXBwbGllcykKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9zdXBwbGllczsgaSsr KQorCQlwZGF0YS0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gdGlfc25fYnJpZGdlX3N1cHBseV9uYW1l c1tpXTsKKworCXJldHVybiBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldChwZGF0YS0+ZGV2LAorCQkJ CXBkYXRhLT5udW1fc3VwcGxpZXMsIHBkYXRhLT5zdXBwbGllcyk7Cit9CisKK3N0YXRpYyBpbnQg dGlfc25fYnJpZGdlX2F0dGFjaF9wYW5lbChzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKK3sK KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhbmVsX25vZGUsICpwb3J0LCAqZW5kcG9pbnQ7CisKKwlw ZGF0YS0+cGFuZWwgPSBOVUxMOworCXBvcnQgPSBvZl9ncmFwaF9nZXRfcG9ydF9ieV9pZChwZGF0 YS0+ZGV2LT5vZl9ub2RlLCAxKTsKKwlpZiAocG9ydCkgeworCQllbmRwb2ludCA9IG9mX2dldF9j aGlsZF9ieV9uYW1lKHBvcnQsICJlbmRwb2ludCIpOworCQlvZl9ub2RlX3B1dChwb3J0KTsKKwkJ aWYgKCFlbmRwb2ludCkgeworCQkJZGV2X2VycihwZGF0YS0+ZGV2LCAibm8gb3V0cHV0IGVuZHBv aW50IGZvdW5kXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJcGFuZWxfbm9kZSA9 IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZW5kcG9pbnQpOworCQlvZl9ub2RlX3B1 dChlbmRwb2ludCk7CisJCWlmICghcGFuZWxfbm9kZSkgeworCQkJZGV2X2VycihwZGF0YS0+ZGV2 LCAibm8gb3V0cHV0IG5vZGUgZm91bmRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwor CQlwZGF0YS0+cGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChwYW5lbF9ub2RlKTsKKwkJb2Zfbm9k ZV9wdXQocGFuZWxfbm9kZSk7CisJCWlmICghcGRhdGEtPnBhbmVsKSB7CisJCQlkZXZfZXJyKHBk YXRhLT5kZXYsICJubyBwYW5lbCBub2RlIGZvdW5kXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwor CQl9CisJfQorCisJZHJtX3BhbmVsX2F0dGFjaChwZGF0YS0+cGFuZWwsICZwZGF0YS0+Y29ubmVj dG9yKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9hdHRhY2go c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9z dDsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2k7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAq cGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7CisJaW50IHJldDsKKwljb25z dCBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlX2luZm8gaW5mbyA9IHsgLnR5cGUgPSAidGlfc25fYnJp ZGdlIiwKKwkJCQkJCSAgIC5jaGFubmVsID0gMCwKKwkJCQkJCSAgIC5ub2RlID0gTlVMTCwKKwkJ CQkJCSB9OworCisJaWYgKCFicmlkZ2UtPmVuY29kZXIpIHsKKwkJRFJNX0VSUk9SKCJQYXJlbnQg ZW5jb2RlciBvYmplY3Qgbm90IGZvdW5kXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBl cnJvcjsKKwl9CisKKwkvKiBIUEQgbm90IHN1cHBvcnRlZCAqLworCXBkYXRhLT5jb25uZWN0b3Iu cG9sbGVkID0gMDsKKworCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChicmlkZ2UtPmRldiwgJnBk YXRhLT5jb25uZWN0b3IsCisJCQkJICZ0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2Z1bmNzLAorCQkJ CSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFp bGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9yIHdpdGggZHJtXG4iKTsKKwkJZ290byBlcnJvcjsK Kwl9CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnBkYXRhLT5jb25uZWN0b3IsCisJCQkJ ICZ0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJZHJtX21vZGVfY29ubmVj dG9yX2F0dGFjaF9lbmNvZGVyKCZwZGF0YS0+Y29ubmVjdG9yLCBicmlkZ2UtPmVuY29kZXIpOwor CisJaG9zdCA9IG9mX2ZpbmRfbWlwaV9kc2lfaG9zdF9ieV9ub2RlKHBkYXRhLT5ob3N0X25vZGUp OworCWlmICghaG9zdCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBmaW5kIGRzaSBob3N0XG4i KTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlkc2kgPSBtaXBpX2Rz aV9kZXZpY2VfcmVnaXN0ZXJfZnVsbChob3N0LCAmaW5mbyk7CisJaWYgKElTX0VSUihkc2kpKSB7 CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBkc2kgZGV2aWNlXG4iKTsKKwkJcmV0ID0g UFRSX0VSUihkc2kpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIFRPRE86IHNldHRpbmcgdG8g NCBsYW5lcyBhbHdheXMgZm9yIG5vdyAqLworCWRzaS0+bGFuZXMgPSA0OworCWRzaS0+Zm9ybWF0 ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9NT0RF X1ZJREVPIHwgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFIHwKKwkJCSAgTUlQSV9EU0lf TU9ERV9FT1RfUEFDS0VUIHwgTUlQSV9EU0lfTU9ERV9WSURFT19IU0U7CisKKwlyZXQgPSBtaXBp X2RzaV9hdHRhY2goZHNpKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0 byBhdHRhY2ggZHNpIHRvIGhvc3RcbiIpOworCQlnb3RvIGVycl9kc2lfYXR0YWNoOworCX0KKwor CXBkYXRhLT5kc2kgPSBkc2k7CisKKwlEUk1fREVCVUcoImJyaWRnZSBhdHRhY2hlZFxuIik7CisJ LyogYXR0YWNoIHBhbmVsIHRvIGJyaWRnZSAqLworCXRpX3NuX2JyaWRnZV9hdHRhY2hfcGFuZWwo cGRhdGEpOworCisJcmV0dXJuIDA7CisKK2Vycl9kc2lfYXR0YWNoOgorCW1pcGlfZHNpX2Rldmlj ZV91bnJlZ2lzdGVyKGRzaSk7CitlcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9p ZCB0aV9zbl9icmlkZ2VfbW9kZV9zZXQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkg ICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgIHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICphZGpfbW9kZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJy aWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKKworCURSTV9ERUJVRygibW9kZV9zZXQ6IGhk aXNwbGF5PSVkLCB2ZGlzcGxheT0lZCwgdnJlZnJlc2g9JWQsIGNsb2NrPSVkXG4iLAorCQlhZGpf bW9kZS0+aGRpc3BsYXksIGFkal9tb2RlLT52ZGlzcGxheSwKKwkJYWRqX21vZGUtPnZyZWZyZXNo LCBhZGpfbW9kZS0+Y2xvY2spOworCisJZHJtX21vZGVfY29weSgmcGRhdGEtPmN1cnJfbW9kZSwg YWRqX21vZGUpOworfQorCitzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfZGlzYWJsZShzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJp ZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOworCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsID0g cGRhdGEtPnBhbmVsOworCisJaWYgKHBhbmVsKSB7CisJCWRybV9wYW5lbF9kaXNhYmxlKHBhbmVs KTsKKwkJZHJtX3BhbmVsX3VucHJlcGFyZShwYW5lbCk7CisJfQorCisJdGlfc25fYnJpZGdlX3Bv d2VyX2N0cmwocGRhdGEsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX2Vu YWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2Ug KnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOworCXN0cnVjdCBkcm1fcGFu ZWwgKnBhbmVsID0gcGRhdGEtPnBhbmVsOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl ID0gJnBkYXRhLT5jdXJyX21vZGU7CisJdW5zaWduZWQgaW50IGJpdF9yYXRlX21oeiwgY2xrX2Zy ZXFfbWh6OworCXVuc2lnbmVkIGludCB2YWwgPSAwOworCisJaWYgKCFwZGF0YS0+bnVtX21vZGVz KQorCQlyZXR1cm47CisKKwl0aV9zbl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwgdHJ1ZSk7CisK KwlpZiAocGFuZWwpCisJCWRybV9wYW5lbF9wcmVwYXJlKHBhbmVsKTsKKworCS8qIENMS19TUkMg Y29uZmlnICovCisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX1JFRkNMS19GUkVRX1JF RywKKwkJCShEUFBMTF9DTEtfU1JDX1JFRkNMSyB8IChTTl9SRUZfQ0xLXzE5XzJfTUhaIDw8IDB4 MSkpKTsKKworCS8qIERTSV9BIGxhbmUgY29uZmlnICovCisJcmVnbWFwX3JlYWQocGRhdGEtPnJl Z21hcCwgU05fRFNJX0xBTkVTX1JFRywgJnZhbCk7CisJdmFsIHw9ICgoMHg0IC0gcGRhdGEtPmRz aS0+bGFuZXMpICYgMHgwMykgPDwgMHgzOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBT Tl9EU0lfTEFORVNfUkVHLCB2YWwpOworCisJLyogRFAgbGFuZSBjb25maWcgKi8KKwlyZWdtYXBf cmVhZChwZGF0YS0+cmVnbWFwLCBTTl9TU0NfQ09ORklHX1JFRywgJnZhbCk7CisJdmFsIHw9ICgo cGRhdGEtPmRzaS0+bGFuZXMgLSAweDEpICYgMHgwMykgPDwgMHg0OworCXJlZ21hcF93cml0ZShw ZGF0YS0+cmVnbWFwLCBTTl9TU0NfQ09ORklHX1JFRywgdmFsKTsKKworCS8qIHNldCBkc2kgY2xr IGZyZXF1ZW5jeSB2YWx1ZSAqLworCWJpdF9yYXRlX21oeiA9IChtb2RlLT5jbG9jayAvIDEwMDAp ICoKKwkJCW1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAocGRhdGEtPmRzaS0+Zm9ybWF0KTsK KwljbGtfZnJlcV9taHogPSBiaXRfcmF0ZV9taHogLyAocGRhdGEtPmRzaS0+bGFuZXMgKiAyKTsK KwkvKiBmb3IgZWFjaCBpbmNyZW1lbnQgaW4gdmFsLCBmcmVxdWVuY3kgaW5jcmVhc2VzIGJ5IDVN SHogKi8KKwl2YWwgPSAoTUlOX0RTSV9DTEtfRlJFUV9NSFogLyAweDUpICsKKwkJKCgoY2xrX2Zy ZXFfbWh6IC0gTUlOX0RTSV9DTEtfRlJFUV9NSFopIC8gMHg1KSAmIDB4RkYpOworCXJlZ21hcF93 cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9EU0lBX0NMS19GUkVRX1JFRywgdmFsKTsKKworCXJlZ21h cF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9EQVRBUkFURV9DT05GSUdfUkVHLCAweDgwKTsgLyog c2V0IEhCUiAqLworCisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX1BMTF9FTkFCTEVf UkVHLCAweDEpOyAvKiBFbmFibGUgUExMICovCisJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDA1MCk7 CisKKwkvKiBEUENEIFJlZ2lzdGVyIDB4MDAxMEEgaW4gU2luayAqLworCXJlZ21hcF93cml0ZShw ZGF0YS0+cmVnbWFwLCBTTl9BVVhfV0RBVEEwX1JFRywgMHgwMSk7CisJcmVnbWFwX3dyaXRlKHBk YXRhLT5yZWdtYXAsIFNOX0FVWF9BRERSXzE5XzE2X1JFRywgMHgwMCk7CisJcmVnbWFwX3dyaXRl KHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9BRERSXzE1XzhfUkVHLCAweDAxKTsKKwlyZWdtYXBfd3Jp dGUocGRhdGEtPnJlZ21hcCwgU05fQVVYX0FERFJfN18wX1JFRywgMHgwQSk7CisJcmVnbWFwX3dy aXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9MRU5HVEhfUkVHLCAweDAxKTsKKwlyZWdtYXBfd3Jp dGUocGRhdGEtPnJlZ21hcCwgU05fQVVYX0NNRF9SRUcsIDB4ODEpOworCXVzbGVlcF9yYW5nZSgx MDAwMCwgMTAwNTApOworCisJLyogU2VtaSBhdXRvIGxpbmsgdHJhaW5pbmcgbW9kZSAqLworCXJl Z21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9NTF9UWF9NT0RFX1JFRywgMHgwQSk7CisJdXNs ZWVwX3JhbmdlKDIwMDAwLCAyMDA1MCk7CisKKwkvKiBjb25maWcgdmlkZW8gcGFyYW1ldGVycyAq LworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RI X0xPV19SRUcsCisJCQltb2RlLT5oZGlzcGxheSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0 YS0+cmVnbWFwLCBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0hJR0hfUkVHLAorCQkJKG1vZGUt PmhkaXNwbGF5ID4+IDB4OCkgJiAweEZGKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwg U05fQ0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9MT1dfUkVHLAorCQkJbW9kZS0+dmRpc3BsYXkg JiAweEZGKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZFUlRJQ0FMX0RJ U1BMQVlfU0laRV9ISUdIX1JFRywKKwkJCShtb2RlLT52ZGlzcGxheSA+PiAweDgpICYgMHhGRik7 CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9M T1dfUkVHLAorCQkJKG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0KSAmIDB4RkYp OworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhf SElHSF9SRUcsCisJCQkoKG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0KSA+PiAw eDgpICYgMHhGRik7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9WU1lOQ19Q VUxTRV9XSURUSF9MT1dfUkVHLAorCQkJKG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0 YXJ0KSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVlNZTkNf UFVMU0VfV0lEVEhfSElHSF9SRUcsCisJCQkoKG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5j X3N0YXJ0KSA+PiAweDgpICYgMHhGRik7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNO X0NIQV9IT1JJWk9OVEFMX0JBQ0tfUE9SQ0hfUkVHLAorCQkJKG1vZGUtPmh0b3RhbCAtIG1vZGUt PmhzeW5jX2VuZCkgJiAweEZGKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hB X1ZFUlRJQ0FMX0JBQ0tfUE9SQ0hfUkVHLAorCQkJKG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5j X2VuZCkgJiAweEZGKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hPUkla T05UQUxfRlJPTlRfUE9SQ0hfUkVHLAorCQkJKG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRp c3BsYXkpICYgMHhGRik7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9WRVJU SUNBTF9GUk9OVF9QT1JDSF9SRUcsCisJCQkobW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlz cGxheSkgJiAweEZGKTsKKwlpZiAocGRhdGEtPmRzaS0+Zm9ybWF0ID09IE1JUElfRFNJX0ZNVF9S R0I4ODgpCisJCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9EQVRBX0ZPUk1BVF9SRUcs IDB4MDApOworCWVsc2UKKwkJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0RBVEFfRk9S TUFUX1JFRywgMHgwMSk7CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDA1MCk7CisKKwkvKiBlbmFi bGUgdmlkZW8gc3RyZWFtICovCisJcmVnbWFwX3JlYWQocGRhdGEtPnJlZ21hcCwgU05fRU5IX0ZS QU1FX1JFRywgJnZhbCk7CisJdmFsIHw9IEJJVCgzKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJl Z21hcCwgU05fRU5IX0ZSQU1FX1JFRywgdmFsKTsKKworCWlmIChwYW5lbCkKKwkJZHJtX3BhbmVs X2VuYWJsZShwYW5lbCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5j cyB0aV9zbl9icmlkZ2VfZnVuY3MgPSB7CisJLmF0dGFjaCA9IHRpX3NuX2JyaWRnZV9hdHRhY2gs CisJLmVuYWJsZSA9IHRpX3NuX2JyaWRnZV9lbmFibGUsCisJLmRpc2FibGUgPSB0aV9zbl9icmlk Z2VfZGlzYWJsZSwKKwkubW9kZV9zZXQgPSB0aV9zbl9icmlkZ2VfbW9kZV9zZXQsCit9OworCitz dGF0aWMgaW50IHRpX3NuX2JyaWRnZV9wYXJzZV9ncGlvcyhzdHJ1Y3QgdGlfc25fYnJpZGdlICpw ZGF0YSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXBkYXRhLT5lbmFibGVfZ3Bpb3MgPSBkZXZtX2dw aW9kX2dldF9hcnJheShwZGF0YS0+ZGV2LAorCQkJCQkJImVuYWJsZSIsIEdQSU9EX09VVF9MT1cp OworCWlmIChJU19FUlIocGRhdGEtPmVuYWJsZV9ncGlvcykpIHsKKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gZ2V0IGVuYWJsZSBncGlvIGZyb20gRFRcbiIpOworCQlyZXQgPSBQVFJfRVJSKHBkYXRh LT5lbmFibGVfZ3Bpb3MpOworCQlnb3RvIGV4aXQ7CisJfQorCS8qIGluaXRpYWxpemUgdGhlIHZh bHVlIGFycmF5ICovCisJcGRhdGEtPnZhbHVlX2FycmF5ID0ga21hbGxvYyhwZGF0YS0+ZW5hYmxl X2dwaW9zLT5uZGVzY3MgKiBzaXplb2YoaW50KSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CisJaWYg KCFwZGF0YS0+dmFsdWVfYXJyYXkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBleGl0Owor CX0KKwltZW1zZXQocGRhdGEtPnZhbHVlX2FycmF5LCAwLAorCQkJcGRhdGEtPmVuYWJsZV9ncGlv cy0+bmRlc2NzICogc2l6ZW9mKGludCkpOworCitleGl0OgorCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgdGlfc25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0KHN0cnVjdCB0aV9zbl9icmlkZ2Ug KnBkYXRhKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGF0YS0+ZGV2LT5vZl9ub2Rl OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZW5kX25vZGU7CisKKwllbmRfbm9kZSA9IG9mX2dyYXBo X2dldF9lbmRwb2ludF9ieV9yZWdzKG5wLCAwLCAwKTsKKwlpZiAoIWVuZF9ub2RlKSB7CisJCURS TV9FUlJPUigicmVtb3RlIGVuZHBvaW50IG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVW OworCX0KKworCXBkYXRhLT5ob3N0X25vZGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFy ZW50KGVuZF9ub2RlKTsKKwlvZl9ub2RlX3B1dChlbmRfbm9kZSk7CisJaWYgKCFwZGF0YS0+aG9z dF9ub2RlKSB7CisJCURSTV9FUlJPUigicmVtb3RlIG5vZGUgbm90IGZvdW5kXG4iKTsKKwkJcmV0 dXJuIC1FTk9ERVY7CisJfQorCW9mX25vZGVfcHV0KHBkYXRhLT5ob3N0X25vZGUpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3Byb2JlKHN0cnVjdCBpMmNfY2xp ZW50ICpjbGllbnQsCisJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1 Y3QgdGlfc25fYnJpZGdlICpwZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRkY19ub2RlOwor CWludCByZXQgPSAwOworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFk YXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKKwkJRFJNX0VSUk9SKCJkZXZpY2UgZG9lc24ndCBzdXBw b3J0IEkyQ1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBkYXRhID0gZGV2bV9remFs bG9jKCZjbGllbnQtPmRldiwKKwkJc2l6ZW9mKHN0cnVjdCB0aV9zbl9icmlkZ2UpLCBHRlBfS0VS TkVMKTsKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBkYXRhLT5kZXYgPSAm Y2xpZW50LT5kZXY7CisJcGRhdGEtPmkyY19jbGllbnQgPSBjbGllbnQ7CisJcGRhdGEtPmludHBf aXJxID0gY2xpZW50LT5pcnE7CisJRFJNX0RFQlVHKCJJMkMgYWRkcmVzcyBpcyAleFxuIiwgY2xp ZW50LT5hZGRyKTsKKworCXBkYXRhLT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGll bnQsCisJCQkJJnRpX3NuX2JyaWRnZV9yZWdtYXBfY29uZmlnKTsKKwlpZiAoSVNfRVJSKHBkYXRh LT5yZWdtYXApKQorCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+cmVnbWFwKTsKKworCXJldCA9IHRp X3NuX2JyaWRnZV9wYXJzZV9kc2lfaG9zdChwZGF0YSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJf ZHRfcGFyc2U7CisKKwlyZXQgPSB0aV9zbl9icmlkZ2VfcGFyc2VfZ3Bpb3MocGRhdGEpOworCWlm IChyZXQpCisJCWdvdG8gZXJyX2R0X3BhcnNlOworCisJcmV0ID0gdGlfc25fYnJpZGdlX3BhcnNl X3JlZ3VsYXRvcnMocGRhdGEpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8g cGFyc2UgcmVndWxhdG9yc1xuIik7CisJCWdvdG8gZXJyX3JlZ19wYXJzZTsKKwl9CisKKwlkZGNf bm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGRhdGEtPmRldi0+b2Zfbm9kZSwgImRkYy1pMmMtYnVz IiwgMCk7CisJaWYgKGRkY19ub2RlKSB7CisJCXBkYXRhLT5kZGMgPSBvZl9maW5kX2kyY19hZGFw dGVyX2J5X25vZGUoZGRjX25vZGUpOworCQlvZl9ub2RlX3B1dChkZGNfbm9kZSk7CisJCWlmICgh cGRhdGEtPmRkYykgeworCQkJZGV2X2RiZyhwZGF0YS0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgZGRj IG5vZGVcbiIpOworCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJCX0KKwl9IGVsc2UgeworCQlk ZXZfZGJnKHBkYXRhLT5kZXYsICJubyBkZGMgcHJvcGVydHkgZm91bmRcbiIpOworCX0KKworCXRp X3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBkYXRhLCB0cnVlKTsKKwlyZXQgPSB0aV9zbl9icmlkZ2Vf cmVhZF9kZXZpY2VfcmV2KHBkYXRhKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jb25maWc7CisJ dGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwocGRhdGEsIGZhbHNlKTsKKworCWkyY19zZXRfY2xpZW50 ZGF0YShjbGllbnQsIHBkYXRhKTsKKwlkZXZfc2V0X2RydmRhdGEoJmNsaWVudC0+ZGV2LCBwZGF0 YSk7CisKKwlwZGF0YS0+YnJpZGdlLmZ1bmNzID0gJnRpX3NuX2JyaWRnZV9mdW5jczsKKwlwZGF0 YS0+YnJpZGdlLm9mX25vZGUgPSBjbGllbnQtPmRldi5vZl9ub2RlOworCisJZHJtX2JyaWRnZV9h ZGQoJnBkYXRhLT5icmlkZ2UpOworCisJcmV0dXJuIHJldDsKKworZXJyX2NvbmZpZzoKKwl0aV9z bl9icmlkZ2VfcG93ZXJfY3RybChwZGF0YSwgZmFsc2UpOworZXJyX3JlZ19wYXJzZToKKwlrZnJl ZShwZGF0YS0+dmFsdWVfYXJyYXkpOworZXJyX2R0X3BhcnNlOgorCWRldm1fa2ZyZWUoJmNsaWVu dC0+ZGV2LCBwZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0aV9zbl9icmlk Z2VfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJaW50IHJldCA9IC1FSU5W QUw7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xp ZW50KTsKKworCWlmICghcGRhdGEpCisJCWdvdG8gZW5kOworCisJbWlwaV9kc2lfZGV0YWNoKHBk YXRhLT5kc2kpOworCW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKHBkYXRhLT5kc2kpOworCisJ dGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwocGRhdGEsIGZhbHNlKTsKKwlrZnJlZShwZGF0YS0+dmFs dWVfYXJyYXkpOworCisJZHJtX2JyaWRnZV9yZW1vdmUoJnBkYXRhLT5icmlkZ2UpOworCWkyY19w dXRfYWRhcHRlcihwZGF0YS0+ZGRjKTsKKworCWRldm1fa2ZyZWUoJmNsaWVudC0+ZGV2LCBwZGF0 YSk7CisKK2VuZDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGkyY19kZXZpY2Vf aWQgdGlfc25fYnJpZGdlX2lkW10gPSB7CisJeyAidGksc242NWRzaTg2IiwgMH0sCisJe30sCit9 OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRpX3NuX2JyaWRnZV9pZCk7CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZVtdID0gewor CXsuY29tcGF0aWJsZSA9ICJ0aSxzbjY1ZHNpODYifSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNF X1RBQkxFKG9mLCB0aV9zbl9icmlkZ2VfbWF0Y2hfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGky Y19kcml2ZXIgdGlfc25fYnJpZGdlX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9 ICJ0aV9zbjY1ZHNpODYiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3Rh YmxlID0gdGlfc25fYnJpZGdlX21hdGNoX3RhYmxlLAorCX0sCisJLnByb2JlID0gdGlfc25fYnJp ZGdlX3Byb2JlLAorCS5yZW1vdmUgPSB0aV9zbl9icmlkZ2VfcmVtb3ZlLAorCS5pZF90YWJsZSA9 IHRpX3NuX2JyaWRnZV9pZCwKK307CisKK21vZHVsZV9pMmNfZHJpdmVyKHRpX3NuX2JyaWRnZV9k cml2ZXIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJzbjY1ZHNpODYgRFNJIHRvIGVEUCBicmlkZ2Ug ZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0tIApUaGUgUXVhbGNvbW0gSW5ub3Zh dGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAph IExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0CgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZy ZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K