From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sandeep Panda Subject: [PATCH v4 1/3] drm/bridge: add support for sn65dsi86 bridge driver Date: Fri, 27 Apr 2018 15:09:40 +0530 Message-ID: <1524821982-2778-2-git-send-email-spanda@codeaurora.org> References: <1524821982-2778-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: <1524821982-2778-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 YW5kIGFkZHJlc3Mgb3RoZXIgcmV2aWV3IGNvbW1lbnRzCiAgIChKb3JkYW4gQ3JvdXNlKS4KCkNo YW5nZXMgaW4gdjQ6CiAtIFVwZGF0ZSBMaWNlbnNlL0NvcHlyaWdodCAoU2VhbiBQYXVsKS4KIC0g QWRkIEtjb25maWcgYW5kIE1ha2VmaWxlIGNoYW5nZXMgKFNlYW4gUGF1bCkuCiAtIERyb3AgaTJj IGdwaW8gaGFuZGxpbmcgZnJvbSB0aGlzIGJyaWRnZSBkcml2ZXIsIHNpbmNlIGkyYyBzZGEvc2Ns IGdwaW9zCiAgIHdpbGwgYmUgaGFuZGxlZCBieSBpMmMgbWFzdGVyLgogLSBSZW1vdmUgdW5uZWNl c3NhcnkgZ290byBzdGF0ZW1lbnRzIChTZWFuIFBhdWwpLgogLSBBZGQgbXV0ZXggbG9jayB0byBw b3dlcl9jdHJsIEFQSSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgKFNlYW4KICAgUGF1bCkuCiAt IEFkZCBzdXBwb3J0IHRvIHBhcnNlIHJlZmVyZW5jZSBjbGsgZnJlcXVlbmN5IGZyb20gZHQob3B0 aW9uYWwpLgogLSBVcGRhdGUgdGhlIGJyaWRnZSBjaGlwIGVuYWJsZS9kaXNhYmxlIHNlcXVlbmNl LgoKU2lnbmVkLW9mZi1ieTogU2FuZGVlcCBQYW5kYSA8c3BhbmRhQGNvZGVhdXJvcmEub3JnPgot LS0KIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyAgICAgICAgfCAgIDkgKwogZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0v YnJpZGdlL3RpLXNuNjVkc2k4Ni5jIHwgNzIxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNzMxIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9L Y29uZmlnCmluZGV4IDNiOTlkNWEuLjgxNTMxNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKQEAg LTEwOCw2ICsxMDgsMTUgQEAgY29uZmlnIERSTV9USV9URlA0MTAKIAktLS1oZWxwLS0tCiAJICBU ZXhhcyBJbnN0cnVtZW50cyBURlA0MTAgRFZJL0hETUkgVHJhbnNtaXR0ZXIgZHJpdmVyCiAKK2Nv bmZpZyBEUk1fVElfU042NURTSTg2CisJdHJpc3RhdGUgIlRJIFNONjVEU0k4NiBEU0kgdG8gZURQ IGJyaWRnZSIKKwlkZXBlbmRzIG9uIE9GCisJc2VsZWN0IERSTV9LTVNfSEVMUEVSCisJc2VsZWN0 IFJFR01BUF9JMkMKKwlzZWxlY3QgRFJNX1BBTkVMCisJLS0taGVscC0tLQorCSAgVGV4YXMgSW5z dHJ1bWVudHMgU042NURTSTg2IERTSSB0byBlRFAgQnJpZGdlIGRyaXZlcgorCiBzb3VyY2UgImRy aXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJz L2dwdS9kcm0vYnJpZGdlL2Fkdjc1MTEvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCmlu ZGV4IDM3M2ViMjguLjM3MTFiZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv TWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQpAQCAtMTIsNCAr MTIsNSBAQCBvYmotJChDT05GSUdfRFJNX1RPU0hJQkFfVEMzNTg3NjcpICs9IHRjMzU4NzY3Lm8K IG9iai0kKENPTkZJR19EUk1fQU5BTE9HSVhfRFApICs9IGFuYWxvZ2l4Lwogb2JqLSQoQ09ORklH X0RSTV9JMkNfQURWNzUxMSkgKz0gYWR2NzUxMS8KIG9iai0kKENPTkZJR19EUk1fVElfVEZQNDEw KSArPSB0aS10ZnA0MTAubworb2JqLSQoQ09ORklHX0RSTV9USV9TTjY1RFNJODYpICs9IHRpLXNu NjVkc2k4Ni5vCiBvYmoteSArPSBzeW5vcHN5cy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvdGktc242NWRzaTg2LmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVk c2k4Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTRiZTgKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jCkBAIC0w LDAgKzEsNzIxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAq IENvcHlyaWdodCAoYykgMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVk ZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxp bnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGlu dXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisKKyNkZWZpbmUgU05fQlJJREdFX1JFVklTSU9OX0lE IDB4MgorCisvKiBMaW5rIFRyYWluaW5nIHNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBT Tl9ERVZJQ0VfUkVWX1JFRwkJCTB4MDgKKyNkZWZpbmUgU05fUkVGQ0xLX0ZSRVFfUkVHCQkJMHgw QQorI2RlZmluZSBTTl9EU0lfTEFORVNfUkVHCQkJMHgxMAorI2RlZmluZSBTTl9EU0lBX0NMS19G UkVRX1JFRwkJCTB4MTIKKyNkZWZpbmUgU05fRU5IX0ZSQU1FX1JFRwkJCTB4NUEKKyNkZWZpbmUg U05fU1NDX0NPTkZJR19SRUcJCQkweDkzCisjZGVmaW5lIFNOX0RBVEFSQVRFX0NPTkZJR19SRUcJ CQkweDk0CisjZGVmaW5lIFNOX1BMTF9FTkFCTEVfUkVHCQkJMHgwRAorI2RlZmluZSBTTl9TQ1JB TUJMRV9DT05GSUdfUkVHCQkJMHg5NQorI2RlZmluZSBTTl9BVVhfV0RBVEEwX1JFRwkJCTB4NjQK KyNkZWZpbmUgU05fQVVYX0FERFJfMTlfMTZfUkVHCQkJMHg3NAorI2RlZmluZSBTTl9BVVhfQURE Ul8xNV84X1JFRwkJCTB4NzUKKyNkZWZpbmUgU05fQVVYX0FERFJfN18wX1JFRwkJCTB4NzYKKyNk ZWZpbmUgU05fQVVYX0xFTkdUSF9SRUcJCQkweDc3CisjZGVmaW5lIFNOX0FVWF9DTURfUkVHCQkJ CTB4NzgKKyNkZWZpbmUgU05fTUxfVFhfTU9ERV9SRUcJCQkweDk2CisvKiB2aWRlbyBjb25maWcg c3BlY2lmaWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhf TE9XX1JFRwkweDIwCisjZGVmaW5lIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfSElHSF9SRUcJ MHgyMQorI2RlZmluZSBTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcJMHgyNAor I2RlZmluZSBTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0hJR0hfUkVHCTB4MjUKKyNkZWZp bmUgU05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcJMHgyQworI2RlZmluZSBTTl9DSEFf SFNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcJMHgyRAorI2RlZmluZSBTTl9DSEFfVlNZTkNfUFVM U0VfV0lEVEhfTE9XX1JFRwkweDMwCisjZGVmaW5lIFNOX0NIQV9WU1lOQ19QVUxTRV9XSURUSF9I SUdIX1JFRwkweDMxCisjZGVmaW5lIFNOX0NIQV9IT1JJWk9OVEFMX0JBQ0tfUE9SQ0hfUkVHCTB4 MzQKKyNkZWZpbmUgU05fQ0hBX1ZFUlRJQ0FMX0JBQ0tfUE9SQ0hfUkVHCQkweDM2CisjZGVmaW5l IFNOX0NIQV9IT1JJWk9OVEFMX0ZST05UX1BPUkNIX1JFRwkweDM4CisjZGVmaW5lIFNOX0NIQV9W RVJUSUNBTF9GUk9OVF9QT1JDSF9SRUcJCTB4M0EKKyNkZWZpbmUgU05fREFUQV9GT1JNQVRfUkVH CQkJMHg1QgorCisjZGVmaW5lIE1JTl9EU0lfQ0xLX0ZSRVFfTUhaCTQwCisjZGVmaW5lIFNOX0RF RkFVTFRfUkVGX0NMS19LSFoJMTkyMDAKKworLyogZnVkZ2UgZmFjdG9yIHJlcXVpcmVkIHRvIGFj Y291bnQgZm9yIDhiLzEwYiBlbmNvZGluZyAqLworI2RlZmluZSBEUF9DTEtfRlVER0VfTlVNCTEw CisjZGVmaW5lIERQX0NMS19GVURHRV9ERU4JOAorCisjZGVmaW5lIERQUExMX0NMS19TUkNfUkVG Q0xLCTAKKyNkZWZpbmUgRFBQTExfQ0xLX1NSQ19EU0lDTEsJMQorCisjZGVmaW5lIFNOX0RTSUFf UkVGQ0xLX09GRlNFVAkxCisjZGVmaW5lIFNOX0RTSUFfTEFORV9PRkZTRVQJMworI2RlZmluZSBT Tl9EUF9MQU5FX09GRlNFVAk0CisjZGVmaW5lIFNOX0RQX0RBVEFfUkFURV9PRkZTRVQJNQorI2Rl ZmluZSBTTl9USU1JTkdfSElHSF9PRkZTRVQJOAorCisjZGVmaW5lIFNOX0VOQUJMRV9WSURfU1RS RUFNX0JJVAlCSVQoMykKKyNkZWZpbmUgU05fRFNJQV9OVU1fTEFORVNfQklUUwkJKEJJVCg0KSB8 IEJJVCgzKSkKKyNkZWZpbmUgU05fRFBfTlVNX0xBTkVTX0JJVFMJCShCSVQoNSkgfCBCSVQoNCkp CisjZGVmaW5lIFNOX0RQX0RBVEFfUkFURV9CSVRTCQkoQklUKDcpIHwgQklUKDYpIHwgQklUKDUp KQorCitzdHJ1Y3QgdGlfc25fYnJpZGdlIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0 IHJlZ21hcCAqcmVnbWFwOworCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKKwlzdHJ1Y3QgZHJt X2Nvbm5lY3RvciBjb25uZWN0b3I7CisJc3RydWN0IGRldmljZV9ub2RlICpob3N0X25vZGU7CisJ c3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOworCXVuc2lnbmVkIGludCByZWZjbGtfa2h6Owor CXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOworCXN0cnVjdCBncGlvX2Rlc2MgKmVuYWJsZV9ncGlv OworCXVuc2lnbmVkIGludCBudW1fc3VwcGxpZXM7CisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2Rh dGEgKnN1cHBsaWVzOworCXN0cnVjdCBpMmNfYWRhcHRlciAqZGRjOworCXVuc2lnbmVkIGludCBu dW1fbW9kZXM7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgY3Vycl9tb2RlOworCXN0cnVjdCBt dXRleCBsb2NrOworCXVuc2lnbmVkIGludCBjdHJsX3JlZl9jb3VudDsKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIHRpX3NuX2JyaWRnZV92b2xhdGlsZV9yYW5nZXNbXSA9 IHsKKwl7IC5yYW5nZV9taW4gPSAwLCAucmFuZ2VfbWF4ID0gMHhmZiB9LAorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlIHRpX3NuX2JyaWRnZV92b2xhdGlsZV90 YWJsZSA9IHsKKwkueWVzX3JhbmdlcyA9IHRpX3NuX2JyaWRnZV92b2xhdGlsZV9yYW5nZXMsCisJ Lm5feWVzX3JhbmdlcyA9IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX3ZvbGF0aWxlX3Jhbmdlcyks Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgdGlfc25fYnJpZGdlX3Jl Z21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gOCwKKwkudmFsX2JpdHMgPSA4LAorCS52b2xh dGlsZV90YWJsZSA9ICZ0aV9zbl9icmlkZ2Vfdm9sYXRpbGVfdGFibGUsCisJLmNhY2hlX3R5cGUg PSBSRUdDQUNIRV9OT05FLAorfTsKKworc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcG93ZXJfY3Ry bChzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSwgYm9vbCBlbmFibGUpCit7CisJaW50IHJldCA9 IDA7CisKKwltdXRleF9sb2NrKCZwZGF0YS0+bG9jayk7CisJaWYgKGVuYWJsZSkKKwkJcGRhdGEt PmN0cmxfcmVmX2NvdW50Kys7CisJZWxzZQorCQlwZGF0YS0+Y3RybF9yZWZfY291bnQtLTsKKwor CWlmIChlbmFibGUgJiYgKHBkYXRhLT5jdHJsX3JlZl9jb3VudCA9PSAxKSkgeworCQlyZXQgPSBy ZWd1bGF0b3JfYnVsa19lbmFibGUocGRhdGEtPm51bV9zdXBwbGllcywKKwkJCQkJCSBwZGF0YS0+ c3VwcGxpZXMpOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoImJyaWRnZSByZWd1bGF0b3Ig ZW5hYmxlIGZhaWxlZFxuIik7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlncGlvZF9zZXRfdmFs dWUocGRhdGEtPmVuYWJsZV9ncGlvLCAxKTsKKwl9IGVsc2UgaWYgKCFlbmFibGUgJiYgIXBkYXRh LT5jdHJsX3JlZl9jb3VudCkgeworCQlncGlvZF9zZXRfdmFsdWUocGRhdGEtPmVuYWJsZV9ncGlv LCAwKTsKKworCQlyZWd1bGF0b3JfYnVsa19kaXNhYmxlKHBkYXRhLT5udW1fc3VwcGxpZXMsIHBk YXRhLT5zdXBwbGllcyk7CisJfSBlbHNlIHsKKwkJRFJNX0RFQlVHKCJ0aV9zbl9icmlkZ2UgcG93 ZXIgY3RybDogJWQgcmVmY291bnQ6ICVkXG4iLAorCQkJCQkJZW5hYmxlLCBwZGF0YS0+Y3RybF9y ZWZfY291bnQpOworCX0KKworZXhpdDoKKwltdXRleF91bmxvY2soJnBkYXRhLT5sb2NrKTsKKwly ZXR1cm4gcmV0OworfQorCisvKiBDb25uZWN0b3IgZnVuY3MgKi8KK3N0YXRpYyBzdHJ1Y3QgdGlf c25fYnJpZGdlICoKK2Nvbm5lY3Rvcl90b190aV9zbl9icmlkZ2Uoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvcikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNvbm5lY3Rvciwgc3RydWN0 IHRpX3NuX2JyaWRnZSwgY29ubmVjdG9yKTsKK30KKworc3RhdGljIGludCB0aV9zbl9icmlkZ2Vf Y29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQorewor CXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gY29ubmVjdG9yX3RvX3RpX3NuX2JyaWRnZShj b25uZWN0b3IpOworCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsID0gcGRhdGEtPnBhbmVsOworCXN0 cnVjdCBlZGlkICplZGlkOworCisJaWYgKHBhbmVsKSB7CisJCURSTV9ERUJVRygiZ2V0IG1vZGUg ZnJvbSBjb25uZWN0ZWQgZHJtX3BhbmVsXG4iKTsKKwkJcGRhdGEtPm51bV9tb2RlcyA9IGRybV9w YW5lbF9nZXRfbW9kZXMocGFuZWwpOworCQlyZXR1cm4gcGRhdGEtPm51bV9tb2RlczsKKwl9CisK KwkvKiBnZXQgZnJvbSBFRElEICovCisJaWYgKCFwZGF0YS0+ZGRjKQorCQlyZXR1cm4gMDsKKwor CXRpX3NuX2JyaWRnZV9wb3dlcl9jdHJsKHBkYXRhLCB0cnVlKTsKKwllZGlkID0gZHJtX2dldF9l ZGlkKGNvbm5lY3RvciwgcGRhdGEtPmRkYyk7CisJdGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwocGRh dGEsIGZhbHNlKTsKKwlpZiAoIWVkaWQpCisJCXJldHVybiAwOworCisJZHJtX21vZGVfY29ubmVj dG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRpZCk7CisJcGRhdGEtPm51bV9t b2RlcyA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOworCWRybV9lZGlkX3Rv X2VsZChjb25uZWN0b3IsIGVkaWQpOworCWtmcmVlKGVkaWQpOworCisJcmV0dXJuIHBkYXRhLT5u dW1fbW9kZXM7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cwordGlfc25fYnJpZGdl X2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJ CQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCS8qIG1heGltdW0gc3Vw cG9ydGVkIHJlc29sdXRpb24gaXMgNEsgYXQgNjAgZnBzICovCisJaWYgKG1vZGUtPmNsb2NrID4g NTk0MDAwKQorCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOworCisJcmV0dXJuIE1PREVfT0s7Cit9 CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgdGlfc25fYnJpZGdl X2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IHRpX3NuX2JyaWRnZV9j b25uZWN0b3JfZ2V0X21vZGVzLAorCS5tb2RlX3ZhbGlkID0gdGlfc25fYnJpZGdlX2Nvbm5lY3Rv cl9tb2RlX3ZhbGlkLAorfTsKKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK3Rp X3NuX2JyaWRnZV9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IsIGJvb2wgZm9yY2UpCit7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBjb25uZWN0 b3JfdG9fdGlfc25fYnJpZGdlKGNvbm5lY3Rvcik7CisKKwkvKioKKwkgKiBUT0RPOiBDdXJyZW50 bHkgaWYgZHJtX3BhbmVsIGlzIHByZXNlbnQsIHRoZW4gYWx3YXlzCisJICogcmV0dXJuIHRoZSBz dGF0dXMgYXMgY29ubmVjdGVkLiBOZWVkIHRvIGFkZCBzdXBwb3J0IHRvIGRldGVjdAorCSAqIGRl dmljZSBzdGF0ZSBmb3Igbm8gcGFuZWwoaG90IHBsdWdnYWJsZSkgc2NlbmFyaW9zLgorCSAqLwor CWlmIChwZGF0YS0+cGFuZWwpCisJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsK KwllbHNlCisJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX3Vua25vd247Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2Z1 bmNzID0geworCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9y X21vZGVzLAorCS5kZXRlY3QgPSB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2RldGVjdCwKKwkuZGVz dHJveSA9IGRybV9jb25uZWN0b3JfY2xlYW51cCwKKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBl cl9jb25uZWN0b3JfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWlj X2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0 ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAorfTsKKworc3Rh dGljIHN0cnVjdCB0aV9zbl9icmlkZ2UgKmJyaWRnZV90b190aV9zbl9icmlkZ2Uoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0 IHRpX3NuX2JyaWRnZSwgYnJpZGdlKTsKK30KKworc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcmVh ZF9kZXZpY2VfcmV2KHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQoreworCXVuc2lnbmVkIGlu dCByZXYgPSAwOworCWludCByZXQgPSAwOworCisJcmV0ID0gcmVnbWFwX3JlYWQocGRhdGEtPnJl Z21hcCwgU05fREVWSUNFX1JFVl9SRUcsICZyZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlpZiAocmV2ICE9IFNOX0JSSURHRV9SRVZJU0lPTl9JRCkgeworCQlEUk1fRVJST1IoInRp X3NuX2JyaWRnZSByZXZpc2lvbiBpZDogMHgleCBtaXNtYXRjaFxuIiwgcmV2KTsKKwkJcmV0ID0g LUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNv bnN0IHRpX3NuX2JyaWRnZV9zdXBwbHlfbmFtZXNbXSA9IHsKKwkidmNjaW8iLAorCSJ2cGxsIiwK KwkidmNjYSIsCisJInZjYyIsCit9OworCitzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9wYXJzZV9y ZWd1bGF0b3JzKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQoreworCXVuc2lnbmVkIGludCBp OworCisJcGRhdGEtPm51bV9zdXBwbGllcyA9IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX3N1cHBs eV9uYW1lcyk7CisKKwlwZGF0YS0+c3VwcGxpZXMgPSBkZXZtX2tjYWxsb2MocGRhdGEtPmRldiwg cGRhdGEtPm51bV9zdXBwbGllcywKKwkJCQkgICAgIHNpemVvZigqcGRhdGEtPnN1cHBsaWVzKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YS0+c3VwcGxpZXMpCisJCXJldHVybiAtRU5PTUVNOwor CisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fc3VwcGxpZXM7IGkrKykKKwkJcGRhdGEtPnN1 cHBsaWVzW2ldLnN1cHBseSA9IHRpX3NuX2JyaWRnZV9zdXBwbHlfbmFtZXNbaV07CisKKwlyZXR1 cm4gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXQocGRhdGEtPmRldiwKKwkJCQlwZGF0YS0+bnVtX3N1 cHBsaWVzLCBwZGF0YS0+c3VwcGxpZXMpOworfQorCitzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9h dHRhY2hfcGFuZWwoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCit7CisJc3RydWN0IGRldmlj ZV9ub2RlICpwYW5lbF9ub2RlLCAqcG9ydCwgKmVuZHBvaW50OworCisJcGRhdGEtPnBhbmVsID0g TlVMTDsKKwlwb3J0ID0gb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQocGRhdGEtPmRldi0+b2Zfbm9k ZSwgMSk7CisJaWYgKHBvcnQpIHsKKwkJZW5kcG9pbnQgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShw b3J0LCAiZW5kcG9pbnQiKTsKKwkJb2Zfbm9kZV9wdXQocG9ydCk7CisJCWlmICghZW5kcG9pbnQp IHsKKwkJCURSTV9FUlJPUigibm8gb3V0cHV0IGVuZHBvaW50IGZvdW5kXG4iKTsKKwkJCXJldHVy biAtRUlOVkFMOworCQl9CisKKwkJcGFuZWxfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9y dF9wYXJlbnQoZW5kcG9pbnQpOworCQlvZl9ub2RlX3B1dChlbmRwb2ludCk7CisJCWlmICghcGFu ZWxfbm9kZSkgeworCQkJRFJNX0VSUk9SKCJubyBvdXRwdXQgbm9kZSBmb3VuZFxuIik7CisJCQly ZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXBkYXRhLT5wYW5lbCA9IG9mX2RybV9maW5kX3BhbmVs KHBhbmVsX25vZGUpOworCQlvZl9ub2RlX3B1dChwYW5lbF9ub2RlKTsKKwkJaWYgKCFwZGF0YS0+ cGFuZWwpIHsKKwkJCURSTV9FUlJPUigibm8gcGFuZWwgbm9kZSBmb3VuZFxuIik7CisJCQlyZXR1 cm4gLUVJTlZBTDsKKwkJfQorCQlkcm1fcGFuZWxfYXR0YWNoKHBkYXRhLT5wYW5lbCwgJnBkYXRh LT5jb25uZWN0b3IpOworCQlEUk1fREVCVUcoInBhbmVsIGF0dGFjaGVkXG4iKTsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aV9zbl9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3Q7CisJc3RydWN0 IG1pcGlfZHNpX2RldmljZSAqZHNpOworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJp ZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOworCWludCByZXQ7CisJY29uc3Qgc3RydWN0IG1p cGlfZHNpX2RldmljZV9pbmZvIGluZm8gPSB7IC50eXBlID0gInRpX3NuX2JyaWRnZSIsCisJCQkJ CQkgICAuY2hhbm5lbCA9IDAsCisJCQkJCQkgICAubm9kZSA9IE5VTEwsCisJCQkJCQkgfTsKKwor CWlmICghYnJpZGdlLT5lbmNvZGVyKSB7CisJCURSTV9FUlJPUigiUGFyZW50IGVuY29kZXIgb2Jq ZWN0IG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIEhQRCBub3Qg c3VwcG9ydGVkICovCisJcGRhdGEtPmNvbm5lY3Rvci5wb2xsZWQgPSAwOworCisJcmV0ID0gZHJt X2Nvbm5lY3Rvcl9pbml0KGJyaWRnZS0+ZGV2LCAmcGRhdGEtPmNvbm5lY3RvciwKKwkJCQkgJnRp X3NuX2JyaWRnZV9jb25uZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9lRFAp OworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb25uZWN0 b3Igd2l0aCBkcm1cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRybV9jb25uZWN0b3JfaGVs cGVyX2FkZCgmcGRhdGEtPmNvbm5lY3RvciwKKwkJCQkgJnRpX3NuX2JyaWRnZV9jb25uZWN0b3Jf aGVscGVyX2Z1bmNzKTsKKwlkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJnBkYXRh LT5jb25uZWN0b3IsIGJyaWRnZS0+ZW5jb2Rlcik7CisKKwlob3N0ID0gb2ZfZmluZF9taXBpX2Rz aV9ob3N0X2J5X25vZGUocGRhdGEtPmhvc3Rfbm9kZSk7CisJaWYgKCFob3N0KSB7CisJCURSTV9F UlJPUigiZmFpbGVkIHRvIGZpbmQgZHNpIGhvc3RcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9 CisKKwlkc2kgPSBtaXBpX2RzaV9kZXZpY2VfcmVnaXN0ZXJfZnVsbChob3N0LCAmaW5mbyk7CisJ aWYgKElTX0VSUihkc2kpKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBkc2kgZGV2 aWNlXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihkc2kpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8q IFRPRE86IHNldHRpbmcgdG8gNCBsYW5lcyBhbHdheXMgZm9yIG5vdyAqLworCWRzaS0+bGFuZXMg PSA0OworCWRzaS0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKKwlkc2ktPm1vZGVfZmxh Z3MgPSBNSVBJX0RTSV9NT0RFX1ZJREVPIHwgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNF IHwKKwkJCSAgTUlQSV9EU0lfTU9ERV9FT1RfUEFDS0VUIHwgTUlQSV9EU0lfTU9ERV9WSURFT19I U0U7CisKKwlyZXQgPSBtaXBpX2RzaV9hdHRhY2goZHNpKTsKKwlpZiAocmV0IDwgMCkgeworCQlE Uk1fRVJST1IoImZhaWxlZCB0byBhdHRhY2ggZHNpIHRvIGhvc3RcbiIpOworCQltaXBpX2RzaV9k ZXZpY2VfdW5yZWdpc3Rlcihkc2kpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBkYXRhLT5kc2kg PSBkc2k7CisKKwlEUk1fREVCVUcoImJyaWRnZSBhdHRhY2hlZFxuIik7CisJLyogYXR0YWNoIHBh bmVsIHRvIGJyaWRnZSAqLworCXRpX3NuX2JyaWRnZV9hdHRhY2hfcGFuZWwocGRhdGEpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9tb2RlX3NldChzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSwKKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkal9tb2RlKQoreworCXN0cnVj dCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOwor CisJRFJNX0RFQlVHKCJtb2RlX3NldDogaGRpc3BsYXk9JWQsIHZkaXNwbGF5PSVkLCB2cmVmcmVz aD0lZCwgY2xvY2s9JWRcbiIsCisJCWFkal9tb2RlLT5oZGlzcGxheSwgYWRqX21vZGUtPnZkaXNw bGF5LAorCQlhZGpfbW9kZS0+dnJlZnJlc2gsIGFkal9tb2RlLT5jbG9jayk7CisKKwlkcm1fbW9k ZV9jb3B5KCZwZGF0YS0+Y3Vycl9tb2RlLCBhZGpfbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRp X3NuX2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0 IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7CisJ c3RydWN0IGRybV9wYW5lbCAqcGFuZWwgPSBwZGF0YS0+cGFuZWw7CisKKwlpZiAocGFuZWwpIHsK KwkJZHJtX3BhbmVsX2Rpc2FibGUocGFuZWwpOworCQlkcm1fcGFuZWxfdW5wcmVwYXJlKHBhbmVs KTsKKwl9CisKKwkvKiBkaXNhYmxlIHZpZGVvIHN0cmVhbSAqLworCXJlZ21hcF91cGRhdGVfYml0 cyhwZGF0YS0+cmVnbWFwLCBTTl9FTkhfRlJBTUVfUkVHLAorCQkJU05fRU5BQkxFX1ZJRF9TVFJF QU1fQklULCAwKTsKKwkvKiBzZW1pIGF1dG8gbGluayB0cmFpbmluZyBtb2RlIE9GRiAqLworCXJl Z21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9NTF9UWF9NT0RFX1JFRywgMCk7CisJLyogZGlz YWJsZSBEUCBQTEwgKi8KKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fUExMX0VOQUJM RV9SRUcsIDApOworfQorCisvKiByZWZlcmVuY2UgY2xrIGZyZXF1ZW5jaWVzIHN1cHBvcnRlZCBi eSB0aGUgYnJpZGdlIGluIEtIeiAqLwordTMyIHRpX3NuX2JyaWRnZV9yZWZfY2xrX3RhYmxlW10g PSB7CisJMTIwMDAsCisJMTkyMDAsCisJMjYwMDAsCisJMjcwMDAsCisJMzg0MDAsCit9OworCitz dGF0aWMgdm9pZCB0aV9zbl9icmlkZ2Vfc2V0X3JlZmNsayhzdHJ1Y3QgdGlfc25fYnJpZGdlICpw ZGF0YSkKK3sKKwlpbnQgaSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0aV9z bl9icmlkZ2VfcmVmX2Nsa190YWJsZSk7IGkrKykKKwkJaWYgKHRpX3NuX2JyaWRnZV9yZWZfY2xr X3RhYmxlW2ldID09IHBkYXRhLT5yZWZjbGtfa2h6KQorCQkJYnJlYWs7CisJcmVnbWFwX3dyaXRl KHBkYXRhLT5yZWdtYXAsIFNOX1JFRkNMS19GUkVRX1JFRywKKwkJKERQUExMX0NMS19TUkNfUkVG Q0xLIHwgKGkgPDwgU05fRFNJQV9SRUZDTEtfT0ZGU0VUKSkpOworfQorCitzdHJ1Y3QgZHBfZGF0 YV9yYXRlIHsKKwl1bnNpZ25lZCBpbnQgYml0X3ZhbDsKKwl1bnNpZ25lZCBpbnQgZHBfcmF0ZTsK K307CisKKy8qIGRwIGRhdGEgcmF0ZSBzdXBwb3J0ZWQgYnkgdGhlIGJyaWRnZSBNYnBzICovCitz dGF0aWMgc3RydWN0IGRwX2RhdGFfcmF0ZSB0aV9zbl9icmlkZ2VfZHBfcmF0ZV90YWJsZVtdID0g eworCXsxLCAxNjIwfSwKKwl7MiwgMjE2MH0sCisJezMsIDI0MzB9LAorCXs0LCAyNzAwfSwKKwl7 NSwgMzI0MH0sCisJezYsIDQzMjB9LAorCXs3LCA1NDAwfSwKK307CisKK3N0YXRpYyB2b2lkIHRp X3NuX2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCit7 CisJdW5zaWduZWQgaW50IGJpdF9yYXRlX21oeiwgY2xrX2ZyZXFfbWh6LCBkcF9yYXRlX21oejsK Kwl1bnNpZ25lZCBpbnQgdmFsID0gMCwgaSA9IDA7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUgPSAmcGRhdGEtPmN1cnJfbW9kZTsKKworCS8qIHNldCBEU0lBIGNsayBmcmVxdWVuY3kg Ki8KKwliaXRfcmF0ZV9taHogPSAobW9kZS0+Y2xvY2sgLyAxMDAwKSAqCisJCQltaXBpX2RzaV9w aXhlbF9mb3JtYXRfdG9fYnBwKHBkYXRhLT5kc2ktPmZvcm1hdCk7CisJY2xrX2ZyZXFfbWh6ID0g Yml0X3JhdGVfbWh6IC8gKHBkYXRhLT5kc2ktPmxhbmVzICogMik7CisKKwkvKiBmb3IgZWFjaCBp bmNyZW1lbnQgaW4gdmFsLCBmcmVxdWVuY3kgaW5jcmVhc2VzIGJ5IDVNSHogKi8KKwl2YWwgPSAo TUlOX0RTSV9DTEtfRlJFUV9NSFogLyA1KSArCisJCSgoKGNsa19mcmVxX21oeiAtIE1JTl9EU0lf Q0xLX0ZSRVFfTUhaKSAvIDUpICYgMHhGRik7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAs IFNOX0RTSUFfQ0xLX0ZSRVFfUkVHLCB2YWwpOworCisJLyogc2V0IERQIGRhdGEgcmF0ZSAqLwor CWRwX3JhdGVfbWh6ID0gKChiaXRfcmF0ZV9taHogLyBwZGF0YS0+ZHNpLT5sYW5lcykgKiBEUF9D TEtfRlVER0VfTlVNKSAvCisJCQkJCQkJRFBfQ0xLX0ZVREdFX0RFTjsKKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRSh0aV9zbl9icmlkZ2VfZHBfcmF0ZV90YWJsZSk7IGkrKykKKwkJaWYgKHRp X3NuX2JyaWRnZV9kcF9yYXRlX3RhYmxlW2ldLmRwX3JhdGUgPiBkcF9yYXRlX21oeikKKwkJCWJy ZWFrOworCWlmIChpID09IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX2RwX3JhdGVfdGFibGUpKQor CQlpLS07IC8qIHNldCB0byBtYXhpbXVtIHBvc3NpYmxlICovCisKKwl2YWwgPSB0aV9zbl9icmlk Z2VfZHBfcmF0ZV90YWJsZVtpXS5iaXRfdmFsIDw8IFNOX0RQX0RBVEFfUkFURV9PRkZTRVQ7CisJ cmVnbWFwX3VwZGF0ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0RBVEFSQVRFX0NPTkZJR19SRUcs CisJCQkJCQlTTl9EUF9EQVRBX1JBVEVfQklUUywgdmFsKTsKK30KKworc3RhdGljIHZvaWQgdGlf c25fYnJpZGdlX3NldF92aWRlb190aW1pbmdzKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQor eworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gJnBkYXRhLT5jdXJyX21vZGU7CisK KwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0FDVElWRV9MSU5FX0xFTkdUSF9M T1dfUkVHLAorCQkJbW9kZS0+aGRpc3BsYXkgJiAweEZGKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEt PnJlZ21hcCwgU05fQ0hBX0FDVElWRV9MSU5FX0xFTkdUSF9ISUdIX1JFRywKKwkJCShtb2RlLT5o ZGlzcGxheSA+PiBTTl9USU1JTkdfSElHSF9PRkZTRVQpICYgMHhGRik7CisJcmVnbWFwX3dyaXRl KHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfTE9XX1JFRywKKwkJ CW1vZGUtPnZkaXNwbGF5ICYgMHhGRik7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNO X0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfSElHSF9SRUcsCisJCQkobW9kZS0+dmRpc3BsYXkg Pj4gU05fVElNSU5HX0hJR0hfT0ZGU0VUKSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+ cmVnbWFwLCBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRywKKwkJCShtb2RlLT5oc3lu Y19lbmQgLSBtb2RlLT5oc3luY19zdGFydCkgJiAweEZGKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEt PnJlZ21hcCwgU05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHLAorCQkJKChtb2RlLT5o c3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydCkgPj4KKwkJCSBTTl9USU1JTkdfSElHSF9PRkZT RVQpICYgMHhGRik7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9WU1lOQ19Q VUxTRV9XSURUSF9MT1dfUkVHLAorCQkJKG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0 YXJ0KSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVlNZTkNf UFVMU0VfV0lEVEhfSElHSF9SRUcsCisJCQkoKG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5j X3N0YXJ0KSA+PgorCQkJIFNOX1RJTUlOR19ISUdIX09GRlNFVCkgJiAweEZGKTsKKwlyZWdtYXBf d3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hPUklaT05UQUxfQkFDS19QT1JDSF9SRUcsCisJ CQkobW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kKSAmIDB4RkYpOworCXJlZ21hcF93cml0 ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVkVSVElDQUxfQkFDS19QT1JDSF9SRUcsCisJCQkobW9k ZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNfZW5kKSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0 YS0+cmVnbWFwLCBTTl9DSEFfSE9SSVpPTlRBTF9GUk9OVF9QT1JDSF9SRUcsCisJCQkobW9kZS0+ aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheSkgJiAweEZGKTsKKwlyZWdtYXBfd3JpdGUocGRh dGEtPnJlZ21hcCwgU05fQ0hBX1ZFUlRJQ0FMX0ZST05UX1BPUkNIX1JFRywKKwkJCShtb2RlLT52 c3luY19zdGFydCAtIG1vZGUtPnZkaXNwbGF5KSAmIDB4RkYpOworCXVzbGVlcF9yYW5nZSgxMDAw MCwgMTAwNTApOyAvKiAxMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNwZWMgKi8KK30KKworc3Rh dGljIHZvaWQgdGlfc25fYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQor eworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShi cmlkZ2UpOworCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsID0gcGRhdGEtPnBhbmVsOworCXVuc2ln bmVkIGludCB2YWwgPSAwOworCisJaWYgKHBhbmVsKQorCQlkcm1fcGFuZWxfcHJlcGFyZShwYW5l bCk7CisKKwkvKiBEU0lfQSBsYW5lIGNvbmZpZyAqLworCXZhbCA9ICg0IC0gcGRhdGEtPmRzaS0+ bGFuZXMpIDw8IFNOX0RTSUFfTEFORV9PRkZTRVQ7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKHBkYXRh LT5yZWdtYXAsIFNOX0RTSV9MQU5FU19SRUcsCisJCQkJCVNOX0RTSUFfTlVNX0xBTkVTX0JJVFMs IHZhbCk7CisKKwkvKiBEUCBsYW5lIGNvbmZpZyAqLworCXZhbCA9IChwZGF0YS0+ZHNpLT5sYW5l cyAtIDEpIDw8IFNOX0RQX0xBTkVfT0ZGU0VUOworCXJlZ21hcF91cGRhdGVfYml0cyhwZGF0YS0+ cmVnbWFwLCBTTl9TU0NfQ09ORklHX1JFRywKKwkJCQkJU05fRFBfTlVNX0xBTkVTX0JJVFMsIHZh bCk7CisKKwkvKiBzZXQgZHNpL2RwIGNsayBmcmVxdWVuY3kgdmFsdWUgKi8KKwl0aV9zbl9icmlk Z2Vfc2V0X2RzaV9kcF9yYXRlKHBkYXRhKTsKKworCS8qIGVuYWJsZSBEUCBQTEwgKi8KKwlyZWdt YXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fUExMX0VOQUJMRV9SRUcsIDEpOworCXVzbGVlcF9y YW5nZSgxMDAwMCwgMTAwNTApOyAvKiAxMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNwZWMgKi8K KworCS8qKgorCSAqIFRoZSBTTjY1RFNJODYgb25seSBzdXBwb3J0cyBBU1NSIERpc3BsYXkgQXV0 aGVudGljYXRpb24gbWV0aG9kIGFuZAorCSAqIHRoaXMgbWV0aG9kIGlzIGVuYWJsZWQgYnkgZGVm YXVsdC4gQW4gZURQIHBhbmVsIG11c3Qgc3VwcG9ydCB0aGlzCisJICogYXV0aGVudGljYXRpb24g bWV0aG9kLiBXZSBuZWVkIHRvIGVuYWJsZSB0aGlzIG1ldGhvZCBpbiB0aGUgZURQIHBhbmVsCisJ ICogYXQgRGlzcGxheVBvcnQgYWRkcmVzcyAweDAwMTBBIHByaW9yIHRvIGxpbmsgdHJhaW5pbmcu CisJICovCisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9XREFUQTBfUkVHLCAw eDAxKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQVVYX0FERFJfMTlfMTZfUkVH LCAweDAwKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQVVYX0FERFJfMTVfOF9S RUcsIDB4MDEpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQUREUl83XzBf UkVHLCAweDBBKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQVVYX0xFTkdUSF9S RUcsIDB4MDEpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQ01EX1JFRywg MHg4MSk7CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDA1MCk7IC8qIDEwbXMgZGVsYXkgcmVjb21t ZW5kZWQgYnkgc3BlYyAqLworCisJLyogU2VtaSBhdXRvIGxpbmsgdHJhaW5pbmcgbW9kZSAqLwor CXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9NTF9UWF9NT0RFX1JFRywgMHgwQSk7CisJ bXNsZWVwKDIwKTsgLyogMjBtcyBkZWxheSByZWNvbW1lbmRlZCBieSBzcGVjICovCisKKwkvKiBj b25maWcgdmlkZW8gcGFyYW1ldGVycyAqLworCXRpX3NuX2JyaWRnZV9zZXRfdmlkZW9fdGltaW5n cyhwZGF0YSk7CisKKwkvKiBlbmFibGUgdmlkZW8gc3RyZWFtICovCisJcmVnbWFwX3VwZGF0ZV9i aXRzKHBkYXRhLT5yZWdtYXAsIFNOX0VOSF9GUkFNRV9SRUcsCisJCQkgICBTTl9FTkFCTEVfVklE X1NUUkVBTV9CSVQsIFNOX0VOQUJMRV9WSURfU1RSRUFNX0JJVCk7CisKKwlpZiAocGFuZWwpCisJ CWRybV9wYW5lbF9lbmFibGUocGFuZWwpOworfQorCit2b2lkIHRpX3NuX2JyaWRnZV9wcmVfZW5h YmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAq cGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7CisKKwl0aV9zbl9icmlkZ2Vf cG93ZXJfY3RybChwZGF0YSwgdHJ1ZSk7CisKKwkvKiBjb25maWd1cmUgYnJpZGdlIENMS19TUkMg YW5kIHJlZl9jbGsgKi8KKwl0aV9zbl9icmlkZ2Vfc2V0X3JlZmNsayhwZGF0YSk7Cit9CisKK3Zv aWQgdGlfc25fYnJpZGdlX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQor eworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShi cmlkZ2UpOworCisJdGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwocGRhdGEsIGZhbHNlKTsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIHRpX3NuX2JyaWRnZV9mdW5jcyA9 IHsKKwkuYXR0YWNoID0gdGlfc25fYnJpZGdlX2F0dGFjaCwKKwkucHJlX2VuYWJsZSA9IHRpX3Nu X2JyaWRnZV9wcmVfZW5hYmxlLAorCS5lbmFibGUgPSB0aV9zbl9icmlkZ2VfZW5hYmxlLAorCS5k aXNhYmxlID0gdGlfc25fYnJpZGdlX2Rpc2FibGUsCisJLnBvc3RfZGlzYWJsZSA9IHRpX3NuX2Jy aWRnZV9wb3N0X2Rpc2FibGUsCisJLm1vZGVfc2V0ID0gdGlfc25fYnJpZGdlX21vZGVfc2V0LAor fTsKKworc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcGFyc2VfZHNpX2hvc3Qoc3RydWN0IHRpX3Nu X2JyaWRnZSAqcGRhdGEpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkYXRhLT5kZXYt Pm9mX25vZGU7CisJc3RydWN0IGRldmljZV9ub2RlICplbmRfbm9kZTsKKworCWVuZF9ub2RlID0g b2ZfZ3JhcGhfZ2V0X2VuZHBvaW50X2J5X3JlZ3MobnAsIDAsIDApOworCWlmICghZW5kX25vZGUp IHsKKwkJRFJNX0VSUk9SKCJyZW1vdGUgZW5kcG9pbnQgbm90IGZvdW5kXG4iKTsKKwkJcmV0dXJu IC1FTk9ERVY7CisJfQorCisJcGRhdGEtPmhvc3Rfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVf cG9ydF9wYXJlbnQoZW5kX25vZGUpOworCW9mX25vZGVfcHV0KGVuZF9ub2RlKTsKKwlpZiAoIXBk YXRhLT5ob3N0X25vZGUpIHsKKwkJRFJNX0VSUk9SKCJyZW1vdGUgbm9kZSBub3QgZm91bmRcbiIp OworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJb2Zfbm9kZV9wdXQocGRhdGEtPmhvc3Rfbm9kZSk7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcHJvYmUoc3RydWN0 IGkyY19jbGllbnQgKmNsaWVudCwKKwkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQor eworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGRj X25vZGU7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNs aWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgeworCQlEUk1fRVJST1IoImRldmljZSBkb2Vz bid0IHN1cHBvcnQgSTJDXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGRhdGEgPSBk ZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LAorCQlzaXplb2Yoc3RydWN0IHRpX3NuX2JyaWRnZSks IEdGUF9LRVJORUwpOworCWlmICghcGRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJcGRhdGEt PmRldiA9ICZjbGllbnQtPmRldjsKKwlEUk1fREVCVUcoIkkyQyBhZGRyZXNzIGlzICV4XG4iLCBj bGllbnQtPmFkZHIpOworCisJcGRhdGEtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNs aWVudCwKKwkJCQkmdGlfc25fYnJpZGdlX3JlZ21hcF9jb25maWcpOworCWlmIChJU19FUlIocGRh dGEtPnJlZ21hcCkpCisJCXJldHVybiBQVFJfRVJSKHBkYXRhLT5yZWdtYXApOworCisJcGRhdGEt PmVuYWJsZV9ncGlvID0gZGV2bV9ncGlvZF9nZXQocGRhdGEtPmRldiwKKwkJCQkJICAgICJlbmFi bGUiLCBHUElPRF9PVVRfTE9XKTsKKwlpZiAoSVNfRVJSKHBkYXRhLT5lbmFibGVfZ3BpbykpIHsK KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGVuYWJsZSBncGlvIGZyb20gRFRcbiIpOworCQly ZXQgPSBQVFJfRVJSKHBkYXRhLT5lbmFibGVfZ3Bpbyk7CisJCXJldHVybiByZXQ7CisJfQorCisJ cmV0ID0gdGlfc25fYnJpZGdlX3BhcnNlX3JlZ3VsYXRvcnMocGRhdGEpOworCWlmIChyZXQpIHsK KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGFyc2UgcmVndWxhdG9yc1xuIik7CisJCXJldHVybiBy ZXQ7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocGRhdGEtPmRldi0+b2Zfbm9k ZSwKKwkJCSJyZWZjbGstZnJlcS1raHoiLCAmcGRhdGEtPnJlZmNsa19raHopOworCWlmIChyZXQp CisJCXBkYXRhLT5yZWZjbGtfa2h6ID0gU05fREVGQVVMVF9SRUZfQ0xLX0tIWjsKKworCXJldCA9 IHRpX3NuX2JyaWRnZV9wYXJzZV9kc2lfaG9zdChwZGF0YSk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCWRkY19ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwZGF0YS0+ZGV2LT5vZl9ub2Rl LCAiZGRjLWkyYy1idXMiLCAwKTsKKwlpZiAoZGRjX25vZGUpIHsKKwkJcGRhdGEtPmRkYyA9IG9m X2ZpbmRfaTJjX2FkYXB0ZXJfYnlfbm9kZShkZGNfbm9kZSk7CisJCW9mX25vZGVfcHV0KGRkY19u b2RlKTsKKwkJaWYgKCFwZGF0YS0+ZGRjKSB7CisJCQlkZXZfZGJnKHBkYXRhLT5kZXYsICJmYWls ZWQgdG8gcmVhZCBkZGMgbm9kZVxuIik7CisJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwkJfQor CX0gZWxzZSB7CisJCWRldl9kYmcocGRhdGEtPmRldiwgIm5vIGRkYyBwcm9wZXJ0eSBmb3VuZFxu Iik7CisJfQorCisJdGlfc25fYnJpZGdlX3Bvd2VyX2N0cmwocGRhdGEsIHRydWUpOworCXJldCA9 IHRpX3NuX2JyaWRnZV9yZWFkX2RldmljZV9yZXYocGRhdGEpOworCXRpX3NuX2JyaWRnZV9wb3dl cl9jdHJsKHBkYXRhLCBmYWxzZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWkyY19z ZXRfY2xpZW50ZGF0YShjbGllbnQsIHBkYXRhKTsKKwltdXRleF9pbml0KCZwZGF0YS0+bG9jayk7 CisKKwlwZGF0YS0+YnJpZGdlLmZ1bmNzID0gJnRpX3NuX2JyaWRnZV9mdW5jczsKKwlwZGF0YS0+ YnJpZGdlLm9mX25vZGUgPSBjbGllbnQtPmRldi5vZl9ub2RlOworCisJZHJtX2JyaWRnZV9hZGQo JnBkYXRhLT5icmlkZ2UpOworCisJRFJNX0RFQlVHKCJicmlkZ2UgZGV2aWNlIHJlZ2lzdGVyZWQg c3VjY2Vzc2Z1bGx5XG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpX3NuX2Jy aWRnZV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdGlfc25f YnJpZGdlICpwZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaWYgKCFwZGF0 YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltaXBpX2RzaV9kZXRhY2gocGRhdGEtPmRzaSk7CisJ bWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIocGRhdGEtPmRzaSk7CisKKwlkcm1fYnJpZGdlX3Jl bW92ZSgmcGRhdGEtPmJyaWRnZSk7CisJaTJjX3B1dF9hZGFwdGVyKHBkYXRhLT5kZGMpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0aV9zbl9icmlkZ2Vf aWRbXSA9IHsKKwl7ICJ0aSxzbjY1ZHNpODYiLCAwfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNF X1RBQkxFKGkyYywgdGlfc25fYnJpZGdlX2lkKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgdGlfc25fYnJpZGdlX21hdGNoX3RhYmxlW10gPSB7CisJey5jb21wYXRpYmxlID0g InRpLHNuNjVkc2k4NiJ9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRpX3Nu X2JyaWRnZV9tYXRjaF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0aV9zbl9i cmlkZ2VfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInRpX3NuNjVkc2k4NiIs CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB0aV9zbl9icmlk Z2VfbWF0Y2hfdGFibGUsCisJfSwKKwkucHJvYmUgPSB0aV9zbl9icmlkZ2VfcHJvYmUsCisJLnJl bW92ZSA9IHRpX3NuX2JyaWRnZV9yZW1vdmUsCisJLmlkX3RhYmxlID0gdGlfc25fYnJpZGdlX2lk LAorfTsKKworbW9kdWxlX2kyY19kcml2ZXIodGlfc25fYnJpZGdlX2RyaXZlcik7CitNT0RVTEVf REVTQ1JJUFRJT04oInNuNjVkc2k4NiBEU0kgdG8gZURQIGJyaWRnZSBkcml2ZXIiKTsKK01PRFVM RV9MSUNFTlNFKCJHUEwgdjIiKTsKLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwg SW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmEgTGludXggRm91bmRh dGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ZyZWVkcmVubwo=