From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sandeep Panda Subject: [PATCH v11 2/5] drm/bridge: add support for sn65dsi86 bridge driver Date: Fri, 15 Jun 2018 12:13:40 +0530 Message-ID: <1529045023-32165-3-git-send-email-spanda@codeaurora.org> References: <1529045023-32165-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: <1529045023-32165-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 IGdwaW9zCiAgIHdpbGwgYmUgaGFuZGxlZCBieSBpMmMgbWFzdGVyLgogLSBVcGRhdGUgcmVxdWly ZWQgc3VwcGxpZXMgbmFtZXMuCiAtIFJlbW92ZSB1bm5lY2Vzc2FyeSBnb3RvIHN0YXRlbWVudHMg KFNlYW4gUGF1bCkuCiAtIEFkZCBtdXRleCBsb2NrIHRvIHBvd2VyX2N0cmwgQVBJIHRvIGF2b2lk IHJhY2UgY29uZGl0aW9ucyAoU2VhbgogICBQYXVsKS4KIC0gQWRkIHN1cHBvcnQgdG8gcGFyc2Ug cmVmZXJlbmNlIGNsayBmcmVxdWVuY3kgZnJvbSBkdChvcHRpb25hbCkuCiAtIFVwZGF0ZSB0aGUg YnJpZGdlIGNoaXAgZW5hYmxlL2Rpc2FibGUgc2VxdWVuY2UuCgpDaGFuZ2VzIGluIHY1OgogLSBG aXhlZCBLYnVpbGQgdGVzdCBzZXJ2aWNlIHJlcG9ydGVkIHdhcm5pbmdzLgoKQ2hhbmdlcyBpbiB2 NjoKIC0gVXNlIFBNIHJ1bnRpbWUgYmFzZWQgcmVmLWNvdW50aW5nIGluc3RlYWQgb2YgbG9jYWwg cmVmX2NvdW50IG1lY2hhbmlzbQogICAoU3RlcGhlbiBCb3lkKS4KIC0gQ2xlYW4gdXAgc29tZSBk ZWJ1ZyBsb2dzIGFuZCBpbmRlbnRhdGlvbnMgKFNlYW4gUGF1bCkuCiAtIFNpbXBsaWZ5IGRwIHJh dGUgY2FsY3VsYXRpb24gKFNlYW4gUGF1bCkuCiAtIEFkZCBzdXBwb3J0IHRvIGNvbmZpZ3VyZSBy ZWZjbGsgYmFzZWQgb24gaW5wdXQgUkVGQ0xLIHBpbiBvciBEQUNQL04KICAgcGluIChTdGVwaGVu IEJveWQpLgoKQ2hhbmdlcyBpbiB2NzoKIC0gVXNlIHN0YXRpYyBzdXBwbHkgZW50cmllcyBpbnN0 ZWFkIG9mIGR5bmFtaWMgYWxsb2NhdGlvbiAoQW5kcnplagogICBIYWpkYSkuCiAtIERlZmVyIGJy aWRnZSBkcml2ZXIgcHJvYmUgaWYgcGFuZWwgaXMgbm90IHByb2JlZCAoQW5kcnplaiBIYWpkYSku CiAtIFVwZGF0ZSBvZl9ncmFwaCBBUElzIGZvciBjb3JyZWN0IG5vZGUgcmVmZXJlbmNlIG1hbmFn ZW1lbnQuIChBbmRyemVqCiAgIEhhamRhKS4KIC0gUmVtb3ZlIGxvY2FsIGRpc3BsYXlfbW9kZSBv YmplY3QgKEFuZHJ6ZWogSGFqZGEpLgogLSBSZW1vdmUgdmVyc2lvbiBpZCBjaGVjayBmdW5jdGlv biBmcm9tIGRyaXZlci4KCkNoYW5nZXMgaW4gdjg6CiAtIE1vdmUgZHNpIHJlZ2lzdGVyL2F0dGFj aCBmdW5jdGlvbiB0byBicmlkZ2UgZHJpdmVyIHByb2JlIChBbmRyemVqCiAgIEhhamRhKS4KIC0g SW50cm9kdWNlIGEgbmV3IGhlbHBlciBmdW5jdGlvbiB0byB3cml0ZSAxNmJpdCB3b3JkcyBpbnRv IGNvbnNlY3V0aXZlCiAgIHJlZ2lzdGVycyAoQW5kcnplaiBIYWpkYSkuCiAtIFJlbW92ZSB1bm5l Y2Vzc2FyeSBtYWNyb3MgKEFuZHJ6ZWogSGFqZGEpLgoKQ2hhbmdlcyBpbiB2OToKIC0gUmVtb3Zl IGRzaSByZWdpc3Rlci9hdHRhY2ggZnJvbSBicmlkZ2UgcHJvYmUsIHNpbmNlIGRzaSBkZXYgcmVn aXN0ZXIKICAgY29tcGxldGlvbiBhbHNvIHdhaXRzIGZvciBhbnkgcGFuZWwgb3IgYnJpZGdlIHRv IGdldCBhZGRlZC4gVGhpcyBjcmVhdGVzCiAgIGRlYWRsb2NrIHNpdHVhdGlvbiB3aGVuIGJyaWRn ZSBkcml2ZXIgY2FsbHMgZHNpIGRldiByZWdpc3RlciBhbmQKICAgYXR0YWNoIGJlZm9yZSBicmlk Z2UgYWRkLCBpbiBpdHMgcHJvYmUgZnVuY3Rpb24uCiAtIEZpeCBpc3N1ZXMgZmFjZWQgZHVyaW5n IHRlc3Rpbmcgb2YgYnJpZGdlIGRyaXZlciBvbiBhY3R1YWwgSFcuCiAtIFJlbW92ZSB1bm5lY2Vz c2FyeSBpbml0aWFsaXphdGlvbnMgKFN0ZXBoZW4gQm95ZCkuCiAtIFVzZSBsb2NhbCByZWZjbGsg bHV0IHNpemUgaW5zdGVhZCBvZiBnbG9iYWwgbWFjcm8gKFNlYW4gUGF1bCkuCgpDaGFuZ2VzIGlu IHYxMDoKIC0gVXNlIHJlZmNsayB0byBkZXRlcm1pbmUgaWYgY29udGludW91cyBkc2kgY2xvY2sg aXMgbmVlZGVkIG9yIG5vdC4KCkNoYW5nZXMgaW4gdjExOgogLSBSZWFkIERQUExMX1NSQyByZWdp c3RlciB0byBkZXRlcm1pbmUgY29udGludW91cyBjbG9jayBpbnN0ZWFkIG9mCiAgIHVzaW5nIHJl ZmNsayBoYW5kbGUgKFN0ZXBoZW4gQm95ZCkuCgpTaWduZWQtb2ZmLWJ5OiBTYW5kZWVwIFBhbmRh IDxzcGFuZGFAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29u ZmlnICAgICAgICB8ICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlICAgICAg IHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMgfCA2OTYgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA3MDYgaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGkt c242NWRzaTg2LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcg Yi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKaW5kZXggM2I5OWQ1YS4uODE1MzE1MCAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvS2NvbmZpZwpAQCAtMTA4LDYgKzEwOCwxNSBAQCBjb25maWcgRFJNX1RJ X1RGUDQxMAogCS0tLWhlbHAtLS0KIAkgIFRleGFzIEluc3RydW1lbnRzIFRGUDQxMCBEVkkvSERN SSBUcmFuc21pdHRlciBkcml2ZXIKIAorY29uZmlnIERSTV9USV9TTjY1RFNJODYKKwl0cmlzdGF0 ZSAiVEkgU042NURTSTg2IERTSSB0byBlRFAgYnJpZGdlIgorCWRlcGVuZHMgb24gT0YKKwlzZWxl Y3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgUkVHTUFQX0kyQworCXNlbGVjdCBEUk1fUEFORUwK KwktLS1oZWxwLS0tCisJICBUZXhhcyBJbnN0cnVtZW50cyBTTjY1RFNJODYgRFNJIHRvIGVEUCBC cmlkZ2UgZHJpdmVyCisKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9L Y29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYWR2NzUxMS9LY29uZmln IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKaW5kZXggMzczZWIyOC4uYTdjYTAwMCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL01ha2VmaWxlCkBAIC0xMSw1ICsxMSw2IEBAIG9iai0kKENPTkZJR19EUk1fU0lJOTIz NCkgKz0gc2lpOTIzNC5vCiBvYmotJChDT05GSUdfRFJNX1RPU0hJQkFfVEMzNTg3NjcpICs9IHRj MzU4NzY3Lm8KIG9iai0kKENPTkZJR19EUk1fQU5BTE9HSVhfRFApICs9IGFuYWxvZ2l4Lwogb2Jq LSQoQ09ORklHX0RSTV9JMkNfQURWNzUxMSkgKz0gYWR2NzUxMS8KK29iai0kKENPTkZJR19EUk1f VElfU042NURTSTg2KSArPSB0aS1zbjY1ZHNpODYubwogb2JqLSQoQ09ORklHX0RSTV9USV9URlA0 MTApICs9IHRpLXRmcDQxMC5vCiBvYmoteSArPSBzeW5vcHN5cy8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L3RpLXNuNjVkc2k4Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NzM0 NTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4 Ni5jCkBAIC0wLDAgKzEsNjk2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2Rz aS5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+ CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5o PgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+Cisj aW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgor I2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorCisvKiBMaW5rIFRyYWluaW5n IHNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBTTl9ERVZJQ0VfUkVWX1JFRwkJCTB4MDgK KyNkZWZpbmUgU05fSFBEX0RJU0FCTEVfUkVHCQkJMHg1QworI2RlZmluZSBTTl9EUFBMTF9TUkNf UkVHCQkJMHgwQQorI2RlZmluZSBTTl9EU0lfTEFORVNfUkVHCQkJMHgxMAorI2RlZmluZSBTTl9E U0lBX0NMS19GUkVRX1JFRwkJCTB4MTIKKyNkZWZpbmUgU05fRU5IX0ZSQU1FX1JFRwkJCTB4NUEK KyNkZWZpbmUgU05fU1NDX0NPTkZJR19SRUcJCQkweDkzCisjZGVmaW5lIFNOX0RBVEFSQVRFX0NP TkZJR19SRUcJCQkweDk0CisjZGVmaW5lIFNOX1BMTF9FTkFCTEVfUkVHCQkJMHgwRAorI2RlZmlu ZSBTTl9TQ1JBTUJMRV9DT05GSUdfUkVHCQkJMHg5NQorI2RlZmluZSBTTl9BVVhfV0RBVEEwX1JF RwkJCTB4NjQKKyNkZWZpbmUgU05fQVVYX0FERFJfMTlfMTZfUkVHCQkJMHg3NAorI2RlZmluZSBT Tl9BVVhfQUREUl8xNV84X1JFRwkJCTB4NzUKKyNkZWZpbmUgU05fQVVYX0FERFJfN18wX1JFRwkJ CTB4NzYKKyNkZWZpbmUgU05fQVVYX0xFTkdUSF9SRUcJCQkweDc3CisjZGVmaW5lIFNOX0FVWF9D TURfUkVHCQkJCTB4NzgKKyNkZWZpbmUgU05fTUxfVFhfTU9ERV9SRUcJCQkweDk2CisvKiB2aWRl byBjb25maWcgc3BlY2lmaWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNOX0NIQV9BQ1RJVkVfTElO RV9MRU5HVEhfTE9XX1JFRwkweDIwCisjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJ WkVfTE9XX1JFRwkweDI0CisjZGVmaW5lIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVH CTB4MkMKKyNkZWZpbmUgU05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHCTB4MkQKKyNk ZWZpbmUgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcJMHgzMAorI2RlZmluZSBTTl9D SEFfVlNZTkNfUFVMU0VfV0lEVEhfSElHSF9SRUcJMHgzMQorI2RlZmluZSBTTl9DSEFfSE9SSVpP TlRBTF9CQUNLX1BPUkNIX1JFRwkweDM0CisjZGVmaW5lIFNOX0NIQV9WRVJUSUNBTF9CQUNLX1BP UkNIX1JFRwkJMHgzNgorI2RlZmluZSBTTl9DSEFfSE9SSVpPTlRBTF9GUk9OVF9QT1JDSF9SRUcJ MHgzOAorI2RlZmluZSBTTl9DSEFfVkVSVElDQUxfRlJPTlRfUE9SQ0hfUkVHCQkweDNBCisjZGVm aW5lIFNOX0RBVEFfRk9STUFUX1JFRwkJCTB4NUIKKworI2RlZmluZSBNSU5fRFNJX0NMS19GUkVR X01IWgk0MAorCisvKiBmdWRnZSBmYWN0b3IgcmVxdWlyZWQgdG8gYWNjb3VudCBmb3IgOGIvMTBi IGVuY29kaW5nICovCisjZGVmaW5lIERQX0NMS19GVURHRV9OVU0JMTAKKyNkZWZpbmUgRFBfQ0xL X0ZVREdFX0RFTgk4CisKKyNkZWZpbmUgRFBQTExfQ0xLX1NSQ19SRUZDTEsJMAorI2RlZmluZSBE UFBMTF9DTEtfU1JDX0RTSUNMSwkxCisKKyNkZWZpbmUgU05fUkVGQ0xLX0ZSRVFfT0ZGU0VUCTEK KyNkZWZpbmUgU05fRFNJQV9MQU5FX09GRlNFVAkzCisjZGVmaW5lIFNOX0RQX0xBTkVfT0ZGU0VU CTQKKyNkZWZpbmUgU05fRFBfREFUQV9SQVRFX09GRlNFVAk1CisjZGVmaW5lIFNOX1NZTkNfUE9M QVJJVFlfT0ZGU0VUCTcKKworI2RlZmluZSBTTl9FTkFCTEVfVklEX1NUUkVBTV9CSVQJQklUKDMp CisjZGVmaW5lIFNOX1JFRkNMS19GUkVRX0JJVFMJCShCSVQoMykgfCBCSVQoMikgfCBCSVQoMSkp CisjZGVmaW5lIFNOX0RTSUFfTlVNX0xBTkVTX0JJVFMJCShCSVQoNCkgfCBCSVQoMykpCisjZGVm aW5lIFNOX0RQX05VTV9MQU5FU19CSVRTCQkoQklUKDUpIHwgQklUKDQpKQorI2RlZmluZSBTTl9E UF9EQVRBX1JBVEVfQklUUwkJKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkKKyNkZWZpbmUgU05f SFBEX0RJU0FCTEVfQklUCQlCSVQoMCkKKworI2RlZmluZSBTTl9SRUdVTEFUT1JfU1VQUExZX05V TQkJNAorCitzdHJ1Y3QgdGlfc25fYnJpZGdlIHsKKwlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKKwlz dHJ1Y3QgcmVnbWFwCQkJKnJlZ21hcDsKKwlzdHJ1Y3QgZHJtX2JyaWRnZQkJYnJpZGdlOworCXN0 cnVjdCBkcm1fY29ubmVjdG9yCQljb25uZWN0b3I7CisJc3RydWN0IGRldmljZV9ub2RlCQkqaG9z dF9ub2RlOworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UJCSpkc2k7CisJc3RydWN0IGNsawkJCSpy ZWZjbGs7CisJc3RydWN0IGRybV9wYW5lbAkJKnBhbmVsOworCXN0cnVjdCBncGlvX2Rlc2MJCSpl bmFibGVfZ3BpbzsKKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YQlzdXBwbGllc1tTTl9SRUdV TEFUT1JfU1VQUExZX05VTV07CisJc3RydWN0IGkyY19hZGFwdGVyCQkqZGRjOworfTsKKworc3Rh dGljIGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2UgdGlfc25fYnJpZGdlX3ZvbGF0aWxlX3Jhbmdl c1tdID0geworCXsgLnJhbmdlX21pbiA9IDAsIC5yYW5nZV9tYXggPSAweEZGIH0sCit9OworCitz dGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgdGlfc25fYnJpZGdlX3ZvbGF0 aWxlX3RhYmxlID0geworCS55ZXNfcmFuZ2VzID0gdGlfc25fYnJpZGdlX3ZvbGF0aWxlX3Jhbmdl cywKKwkubl95ZXNfcmFuZ2VzID0gQVJSQVlfU0laRSh0aV9zbl9icmlkZ2Vfdm9sYXRpbGVfcmFu Z2VzKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyB0aV9zbl9icmlk Z2VfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSA4LAorCS52YWxfYml0cyA9IDgsCisJ LnZvbGF0aWxlX3RhYmxlID0gJnRpX3NuX2JyaWRnZV92b2xhdGlsZV90YWJsZSwKKwkuY2FjaGVf dHlwZSA9IFJFR0NBQ0hFX05PTkUsCit9OworCitzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2Vfd3Jp dGVfdTE2KHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhLAorCQkJCSAgIHVuc2lnbmVkIGludCBy ZWcsIHUxNiB2YWwpCit7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIHJlZywgdmFsICYg MHhGRik7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIHJlZyArIDEsIHZhbCA+PiA4KTsK K30KKworc3RhdGljIGludCBfX21heWJlX3VudXNlZCB0aV9zbl9icmlkZ2VfcmVzdW1lKHN0cnVj dCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUo U05fUkVHVUxBVE9SX1NVUFBMWV9OVU0sIHBkYXRhLT5zdXBwbGllcyk7CisJaWYgKHJldCkgewor CQlEUk1fRVJST1IoImZhaWxlZCB0byBlbmFibGUgc3VwcGxpZXMgJWRcbiIsIHJldCk7CisJCXJl dHVybiByZXQ7CisJfQorCisJZ3Bpb2Rfc2V0X3ZhbHVlKHBkYXRhLT5lbmFibGVfZ3BpbywgMSk7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHRpX3NuX2Jy aWRnZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdl ICpwZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwlncGlvZF9zZXRf dmFsdWUocGRhdGEtPmVuYWJsZV9ncGlvLCAwKTsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2Rp c2FibGUoU05fUkVHVUxBVE9SX1NVUFBMWV9OVU0sIHBkYXRhLT5zdXBwbGllcyk7CisJaWYgKHJl dCkKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZGlzYWJsZSBzdXBwbGllcyAlZFxuIiwgcmV0KTsK KworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB0aV9z bl9icmlkZ2VfcG1fb3BzID0geworCVNFVF9SVU5USU1FX1BNX09QUyh0aV9zbl9icmlkZ2Vfc3Vz cGVuZCwgdGlfc25fYnJpZGdlX3Jlc3VtZSwgTlVMTCkKK307CisKKy8qIENvbm5lY3RvciBmdW5j cyAqLworc3RhdGljIHN0cnVjdCB0aV9zbl9icmlkZ2UgKgorY29ubmVjdG9yX3RvX3RpX3NuX2Jy aWRnZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXJldHVybiBjb250YWlu ZXJfb2YoY29ubmVjdG9yLCBzdHJ1Y3QgdGlfc25fYnJpZGdlLCBjb25uZWN0b3IpOworfQorCitz dGF0aWMgaW50IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBjb25u ZWN0b3JfdG9fdGlfc25fYnJpZGdlKGNvbm5lY3Rvcik7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJ dTMyIG51bV9tb2RlczsKKworCWlmIChwZGF0YS0+cGFuZWwpIHsKKwkJRFJNX0RFQlVHX0tNUygi Z2V0IG1vZGUgZnJvbSBjb25uZWN0ZWQgZHJtX3BhbmVsXG4iKTsKKwkJcmV0dXJuIGRybV9wYW5l bF9nZXRfbW9kZXMocGRhdGEtPnBhbmVsKTsKKwl9CisKKwlpZiAoIXBkYXRhLT5kZGMpCisJCXJl dHVybiAwOworCisJcG1fcnVudGltZV9nZXRfc3luYyhwZGF0YS0+ZGV2KTsKKwllZGlkID0gZHJt X2dldF9lZGlkKGNvbm5lY3RvciwgcGRhdGEtPmRkYyk7CisJcG1fcnVudGltZV9wdXRfc3luYyhw ZGF0YS0+ZGV2KTsKKwlpZiAoIWVkaWQpCisJCXJldHVybiAwOworCisJZHJtX21vZGVfY29ubmVj dG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRpZCk7CisJbnVtX21vZGVzID0g ZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CisJa2ZyZWUoZWRpZCk7CisKKwly ZXR1cm4gbnVtX21vZGVzOworfQorCitzdGF0aWMgZW51bSBkcm1fbW9kZV9zdGF0dXMKK3RpX3Nu X2JyaWRnZV9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLAorCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwkvKiBtYXhp bXVtIHN1cHBvcnRlZCByZXNvbHV0aW9uIGlzIDRLIGF0IDYwIGZwcyAqLworCWlmIChtb2RlLT5j bG9jayA+IDU5NDAwMCkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKworCXJldHVybiBNT0RF X09LOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHRpX3Nu X2JyaWRnZV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSB0aV9zbl9i cmlkZ2VfY29ubmVjdG9yX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IHRpX3NuX2JyaWRnZV9j b25uZWN0b3JfbW9kZV92YWxpZCwKK307CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3Rh dHVzCit0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLCBib29sIGZvcmNlKQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0g Y29ubmVjdG9yX3RvX3RpX3NuX2JyaWRnZShjb25uZWN0b3IpOworCisJLyoqCisJICogVE9ETzog Q3VycmVudGx5IGlmIGRybV9wYW5lbCBpcyBwcmVzZW50LCB0aGVuIGFsd2F5cworCSAqIHJldHVy biB0aGUgc3RhdHVzIGFzIGNvbm5lY3RlZC4gTmVlZCB0byBhZGQgc3VwcG9ydCB0byBkZXRlY3QK KwkgKiBkZXZpY2Ugc3RhdGUgZm9yIG5vIHBhbmVsKGhvdCBwbHVnZ2FibGUpIHNjZW5hcmlvcy4K KwkgKi8KKwlpZiAocGRhdGEtPnBhbmVsKQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25u ZWN0ZWQ7CisJZWxzZQorCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c191bmtub3duOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgdGlfc25fYnJpZGdlX2Nvbm5l Y3Rvcl9mdW5jcyA9IHsKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nv bm5lY3Rvcl9tb2RlcywKKwkuZGV0ZWN0ID0gdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9kZXRlY3Qs CisJLmRlc3Ryb3kgPSBkcm1fY29ubmVjdG9yX2NsZWFudXAsCisJLnJlc2V0ID0gZHJtX2F0b21p Y19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJt X2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ry b3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKK307 CisKK3N0YXRpYyBzdHJ1Y3QgdGlfc25fYnJpZGdlICpicmlkZ2VfdG9fdGlfc25fYnJpZGdlKHN0 cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihicmlkZ2Us IHN0cnVjdCB0aV9zbl9icmlkZ2UsIGJyaWRnZSk7Cit9CisKK3N0YXRpYyBpbnQgdGlfc25fYnJp ZGdlX3BhcnNlX3JlZ3VsYXRvcnMoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCit7CisJdW5z aWduZWQgaW50IGk7CisJY29uc3QgY2hhciAqIGNvbnN0IHRpX3NuX2JyaWRnZV9zdXBwbHlfbmFt ZXNbXSA9IHsKKwkJInZjY2EiLCAidmNjIiwgInZjY2lvIiwgInZwbGwiLAorCX07CisKKwlmb3Ig KGkgPSAwOyBpIDwgU05fUkVHVUxBVE9SX1NVUFBMWV9OVU07IGkrKykKKwkJcGRhdGEtPnN1cHBs aWVzW2ldLnN1cHBseSA9IHRpX3NuX2JyaWRnZV9zdXBwbHlfbmFtZXNbaV07CisKKwlyZXR1cm4g ZGV2bV9yZWd1bGF0b3JfYnVsa19nZXQocGRhdGEtPmRldiwgU05fUkVHVUxBVE9SX1NVUFBMWV9O VU0sCisJCQkJICAgICAgIHBkYXRhLT5zdXBwbGllcyk7Cit9CisKK3N0YXRpYyBpbnQgdGlfc25f YnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCWludCByZXQsIHZh bDsKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2Uo YnJpZGdlKTsKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgbWlwaV9kc2lf ZGV2aWNlICpkc2k7CisJY29uc3Qgc3RydWN0IG1pcGlfZHNpX2RldmljZV9pbmZvIGluZm8gPSB7 IC50eXBlID0gInRpX3NuX2JyaWRnZSIsCisJCQkJCQkgICAuY2hhbm5lbCA9IDAsCisJCQkJCQkg ICAubm9kZSA9IE5VTEwsCisJCQkJCQkgfTsKKworCXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChi cmlkZ2UtPmRldiwgJnBkYXRhLT5jb25uZWN0b3IsCisJCQkJICZ0aV9zbl9icmlkZ2VfY29ubmVj dG9yX2Z1bmNzLAorCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfZURQKTsKKwlpZiAocmV0KSB7CisJ CURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9yIHdpdGggZHJtXG4iKTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnBkYXRhLT5j b25uZWN0b3IsCisJCQkJICZ0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJ ZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZwZGF0YS0+Y29ubmVjdG9yLCBicmlk Z2UtPmVuY29kZXIpOworCisJaG9zdCA9IG9mX2ZpbmRfbWlwaV9kc2lfaG9zdF9ieV9ub2RlKHBk YXRhLT5ob3N0X25vZGUpOworCWlmICghaG9zdCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBm aW5kIGRzaSBob3N0XG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZHNpX2hvc3Q7 CisJfQorCisJZHNpID0gbWlwaV9kc2lfZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoaG9zdCwgJmluZm8p OworCWlmIChJU19FUlIoZHNpKSkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBjcmVhdGUgZHNp IGRldmljZVxuIik7CisJCXJldCA9IFBUUl9FUlIoZHNpKTsKKwkJZ290byBlcnJfZHNpX2hvc3Q7 CisJfQorCisJLyogVE9ETzogc2V0dGluZyB0byA0IGxhbmVzIGFsd2F5cyBmb3Igbm93ICovCisJ ZHNpLT5sYW5lcyA9IDQ7CisJZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRfUkdCODg4OworCWRz aS0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01PREVfVklERU8gfCBNSVBJX0RTSV9NT0RFX1ZJREVP X1NZTkNfUFVMU0UgfAorCQkJICBNSVBJX0RTSV9NT0RFX0VPVF9QQUNLRVQgfCBNSVBJX0RTSV9N T0RFX1ZJREVPX0hTRTsKKworCS8qIGNoZWNrIGlmIGNvbnRpbnVvdXMgZHNpIGNsb2NrIGlzIHJl cXVpcmVkIG9yIG5vdCAqLworCXBtX3J1bnRpbWVfZ2V0X3N5bmMocGRhdGEtPmRldik7CisJcmVn bWFwX3JlYWQocGRhdGEtPnJlZ21hcCwgU05fRFBQTExfU1JDX1JFRywgJnZhbCk7CisJcG1fcnVu dGltZV9wdXRfc3luYyhwZGF0YS0+ZGV2KTsKKwlpZiAoISh2YWwgJiBEUFBMTF9DTEtfU1JDX0RT SUNMSykpCisJCWRzaS0+bW9kZV9mbGFncyB8PSBNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9V UzsKKworCXJldCA9IG1pcGlfZHNpX2F0dGFjaChkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCURS TV9FUlJPUigiZmFpbGVkIHRvIGF0dGFjaCBkc2kgdG8gaG9zdFxuIik7CisJCWdvdG8gZXJyX2Rz aV9hdHRhY2g7CisJfQorCXBkYXRhLT5kc2kgPSBkc2k7CisKKwkvKiBhdHRhY2ggcGFuZWwgdG8g YnJpZGdlICovCisJaWYgKHBkYXRhLT5wYW5lbCkKKwkJZHJtX3BhbmVsX2F0dGFjaChwZGF0YS0+ cGFuZWwsICZwZGF0YS0+Y29ubmVjdG9yKTsKKworCXJldHVybiAwOworCitlcnJfZHNpX2F0dGFj aDoKKwltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3Rlcihkc2kpOworZXJyX2RzaV9ob3N0OgorCWRy bV9jb25uZWN0b3JfY2xlYW51cCgmcGRhdGEtPmNvbm5lY3Rvcik7CisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJy aWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9i cmlkZ2UoYnJpZGdlKTsKKworCWlmIChwZGF0YS0+cGFuZWwpIHsKKwkJZHJtX3BhbmVsX2Rpc2Fi bGUocGRhdGEtPnBhbmVsKTsKKwkJZHJtX3BhbmVsX3VucHJlcGFyZShwZGF0YS0+cGFuZWwpOwor CX0KKworCS8qIGRpc2FibGUgdmlkZW8gc3RyZWFtICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHBk YXRhLT5yZWdtYXAsIFNOX0VOSF9GUkFNRV9SRUcsCisJCQkgICBTTl9FTkFCTEVfVklEX1NUUkVB TV9CSVQsIDApOworCS8qIHNlbWkgYXV0byBsaW5rIHRyYWluaW5nIG1vZGUgT0ZGICovCisJcmVn bWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX01MX1RYX01PREVfUkVHLCAwKTsKKwkvKiBkaXNh YmxlIERQIFBMTCAqLworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9QTExfRU5BQkxF X1JFRywgMCk7Cit9CisKK3N0YXRpYyB1MzIgdGlfc25fYnJpZGdlX2dldF9kc2lfZnJlcShzdHJ1 Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKK3sKKwl1MzIgYml0X3JhdGVfa2h6LCBjbGtfZnJlcV9r aHo7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPQorCQkmcGRhdGEtPmJyaWRnZS5l bmNvZGVyLT5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKKworCWJpdF9yYXRlX2toeiA9IG1v ZGUtPmNsb2NrICoKKwkJCW1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAocGRhdGEtPmRzaS0+ Zm9ybWF0KTsKKwljbGtfZnJlcV9raHogPSBiaXRfcmF0ZV9raHogLyAocGRhdGEtPmRzaS0+bGFu ZXMgKiAyKTsKKworCXJldHVybiBjbGtfZnJlcV9raHo7Cit9CisKKy8qIGNsayBmcmVxdWVuY2ll cyBzdXBwb3J0ZWQgYnkgYnJpZGdlIGluIEh6IGluIGNhc2UgZGVyaXZlZCBmcm9tIFJFRkNMSyBw aW4gKi8KK3N0YXRpYyBjb25zdCB1MzIgdGlfc25fYnJpZGdlX3JlZmNsa19sdXRbXSA9IHsKKwkx MjAwMDAwMCwKKwkxOTIwMDAwMCwKKwkyNjAwMDAwMCwKKwkyNzAwMDAwMCwKKwkzODQwMDAwMCwK K307CisKKy8qIGNsayBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgYnJpZGdlIGluIEh6IGluIGNh c2UgZGVyaXZlZCBmcm9tIERBQ1AvTiBwaW4gKi8KK3N0YXRpYyBjb25zdCB1MzIgdGlfc25fYnJp ZGdlX2RzaWNsa19sdXRbXSA9IHsKKwk0NjgwMDAwMDAsCisJMzg0MDAwMDAwLAorCTQxNjAwMDAw MCwKKwk0ODYwMDAwMDAsCisJNDYwODAwMDAwLAorfTsKKworc3RhdGljIHZvaWQgdGlfc25fYnJp ZGdlX3NldF9yZWZjbGtfZnJlcShzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKK3sKKwlpbnQg aTsKKwl1MzIgcmVmY2xrX3JhdGU7CisJY29uc3QgdTMyICpyZWZjbGtfbHV0OworCXNpemVfdCBy ZWZjbGtfbHV0X3NpemU7CisKKwlpZiAocGRhdGEtPnJlZmNsaykgeworCQlyZWZjbGtfcmF0ZSA9 IGNsa19nZXRfcmF0ZShwZGF0YS0+cmVmY2xrKTsKKwkJcmVmY2xrX2x1dCA9IHRpX3NuX2JyaWRn ZV9yZWZjbGtfbHV0OworCQlyZWZjbGtfbHV0X3NpemUgPSBBUlJBWV9TSVpFKHRpX3NuX2JyaWRn ZV9yZWZjbGtfbHV0KTsKKwkJY2xrX3ByZXBhcmVfZW5hYmxlKHBkYXRhLT5yZWZjbGspOworCX0g ZWxzZSB7CisJCXJlZmNsa19yYXRlID0gdGlfc25fYnJpZGdlX2dldF9kc2lfZnJlcShwZGF0YSkg KiAxMDAwOworCQlyZWZjbGtfbHV0ID0gdGlfc25fYnJpZGdlX2RzaWNsa19sdXQ7CisJCXJlZmNs a19sdXRfc2l6ZSA9IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX2RzaWNsa19sdXQpOworCX0KKwor CS8qIGZvciBpIGVxdWFscyB0byByZWZjbGtfbHV0X3NpemUgbWVhbnMgZGVmYXVsdCBmcmVxdWVu Y3kgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcmVmY2xrX2x1dF9zaXplOyBpKyspCisJCWlmIChyZWZj bGtfbHV0W2ldID09IHJlZmNsa19yYXRlKQorCQkJYnJlYWs7CisKKwlyZWdtYXBfdXBkYXRlX2Jp dHMocGRhdGEtPnJlZ21hcCwgU05fRFBQTExfU1JDX1JFRywKKwkJCSAgIFNOX1JFRkNMS19GUkVR X0JJVFMsIGkgPDwgU05fUkVGQ0xLX0ZSRVFfT0ZGU0VUKTsKK30KKworLyoqCisgKiBMVVQgaW5k ZXggY29ycmVzcG9uZHMgdG8gcmVnaXN0ZXIgdmFsdWUgYW5kCisgKiBMVVQgdmFsdWVzIGNvcnJl c3BvbmRzIHRvIGRwIGRhdGEgcmF0ZSBzdXBwb3J0ZWQKKyAqIGJ5IHRoZSBicmlkZ2UgaW4gTWJw cyB1bml0LgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHRpX3NuX2JyaWRnZV9kcF9y YXRlX2x1dFtdID0geworCTAsIDE2MjAsIDIxNjAsIDI0MzAsIDI3MDAsIDMyNDAsIDQzMjAsIDU0 MDAKK307CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUoc3RydWN0 IHRpX3NuX2JyaWRnZSAqcGRhdGEpCit7CisJdW5zaWduZWQgaW50IGJpdF9yYXRlX21oeiwgY2xr X2ZyZXFfbWh6LCBkcF9yYXRlX21oejsKKwl1bnNpZ25lZCBpbnQgdmFsLCBpOworCXN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlID0KKwkJJnBkYXRhLT5icmlkZ2UuZW5jb2Rlci0+Y3J0Yy0+ c3RhdGUtPmFkanVzdGVkX21vZGU7CisKKwkvKiBzZXQgRFNJQSBjbGsgZnJlcXVlbmN5ICovCisJ Yml0X3JhdGVfbWh6ID0gKG1vZGUtPmNsb2NrIC8gMTAwMCkgKgorCQkJbWlwaV9kc2lfcGl4ZWxf Zm9ybWF0X3RvX2JwcChwZGF0YS0+ZHNpLT5mb3JtYXQpOworCWNsa19mcmVxX21oeiA9IGJpdF9y YXRlX21oeiAvIChwZGF0YS0+ZHNpLT5sYW5lcyAqIDIpOworCisJLyogZm9yIGVhY2ggaW5jcmVt ZW50IGluIHZhbCwgZnJlcXVlbmN5IGluY3JlYXNlcyBieSA1TUh6ICovCisJdmFsID0gKE1JTl9E U0lfQ0xLX0ZSRVFfTUhaIC8gNSkgKworCQkoKChjbGtfZnJlcV9taHogLSBNSU5fRFNJX0NMS19G UkVRX01IWikgLyA1KSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9E U0lBX0NMS19GUkVRX1JFRywgdmFsKTsKKworCS8qIHNldCBEUCBkYXRhIHJhdGUgKi8KKwlkcF9y YXRlX21oeiA9ICgoYml0X3JhdGVfbWh6IC8gcGRhdGEtPmRzaS0+bGFuZXMpICogRFBfQ0xLX0ZV REdFX05VTSkgLworCQkJCQkJCURQX0NMS19GVURHRV9ERU47CisJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUodGlfc25fYnJpZGdlX2RwX3JhdGVfbHV0KSAtIDE7IGkrKykKKwkJaWYgKHRpX3Nu X2JyaWRnZV9kcF9yYXRlX2x1dFtpXSA+IGRwX3JhdGVfbWh6KQorCQkJYnJlYWs7CisKKwlyZWdt YXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fREFUQVJBVEVfQ09ORklHX1JFRywKKwkJ CSAgIFNOX0RQX0RBVEFfUkFURV9CSVRTLCBpIDw8IFNOX0RQX0RBVEFfUkFURV9PRkZTRVQpOwor fQorCitzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2Vfc2V0X3ZpZGVvX3RpbWluZ3Moc3RydWN0IHRp X3NuX2JyaWRnZSAqcGRhdGEpCit7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPQor CQkmcGRhdGEtPmJyaWRnZS5lbmNvZGVyLT5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKKwl1 OCBoc3luY19wb2xhcml0eSA9IDAsIHZzeW5jX3BvbGFyaXR5ID0gMDsKKworCWlmIChtb2RlLT5m bGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKQorCQloc3luY19wb2xhcml0eSA9IDB4MTsKKwlp ZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BWU1lOQykKKwkJdnN5bmNfcG9sYXJpdHkg PSAweDE7CisKKwl0aV9zbl9icmlkZ2Vfd3JpdGVfdTE2KHBkYXRhLCBTTl9DSEFfQUNUSVZFX0xJ TkVfTEVOR1RIX0xPV19SRUcsCisJCQkgICAgICAgbW9kZS0+aGRpc3BsYXkpOworCXRpX3NuX2Jy aWRnZV93cml0ZV91MTYocGRhdGEsIFNOX0NIQV9WRVJUSUNBTF9ESVNQTEFZX1NJWkVfTE9XX1JF RywKKwkJCSAgICAgICBtb2RlLT52ZGlzcGxheSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdt YXAsIFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHLAorCQkgICAgIChtb2RlLT5oc3lu Y19lbmQgLSBtb2RlLT5oc3luY19zdGFydCkgJiAweEZGKTsKKwlyZWdtYXBfd3JpdGUocGRhdGEt PnJlZ21hcCwgU05fQ0hBX0hTWU5DX1BVTFNFX1dJRFRIX0hJR0hfUkVHLAorCQkgICAgICgoKG1v ZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0KSA+PiA4KSAmIDB4N0YpCisJCSAgICAg fCAoaHN5bmNfcG9sYXJpdHkgPDwgU05fU1lOQ19QT0xBUklUWV9PRkZTRVQpKTsKKwlyZWdtYXBf d3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcsCisJ CSAgICAgKG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0KSAmIDB4RkYpOworCXJl Z21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfSElHSF9S RUcsCisJCSAgICAoKChtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydCkgPj4gOCkg JiAweDdGKQorCQkgICAgfCAodnN5bmNfcG9sYXJpdHkgPDwgU05fU1lOQ19QT0xBUklUWV9PRkZT RVQpKTsKKworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfSE9SSVpPTlRBTF9C QUNLX1BPUkNIX1JFRywKKwkJICAgICAobW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kKSAm IDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVkVSVElDQUxfQkFD S19QT1JDSF9SRUcsCisJCSAgICAgKG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX2VuZCkgJiAw eEZGKTsKKworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfSE9SSVpPTlRBTF9G Uk9OVF9QT1JDSF9SRUcsCisJCSAgICAgKG1vZGUtPmhzeW5jX3N0YXJ0IC0gbW9kZS0+aGRpc3Bs YXkpICYgMHhGRik7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0NIQV9WRVJUSUNB TF9GUk9OVF9QT1JDSF9SRUcsCisJCSAgICAgKG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+dmRp c3BsYXkpICYgMHhGRik7CisKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDEwNTAwKTsgLyogMTBtcyBk ZWxheSByZWNvbW1lbmRlZCBieSBzcGVjICovCit9CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRn ZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJp ZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKKwl1bnNpZ25lZCBp bnQgdmFsOworCisJaWYgKHBkYXRhLT5wYW5lbCkgeworCQlkcm1fcGFuZWxfcHJlcGFyZShwZGF0 YS0+cGFuZWwpOworCQkvKiBpbiBjYXNlIGRybV9wYW5lbCBpcyBjb25uZWN0ZWQgdGhlbiBIUEQg aXMgbm90IHN1cHBvcnRlZCAqLworCQlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwg U05fSFBEX0RJU0FCTEVfUkVHLAorCQkJCSAgIFNOX0hQRF9ESVNBQkxFX0JJVCwgU05fSFBEX0RJ U0FCTEVfQklUKTsKKwl9CisKKwkvKiBEU0lfQSBsYW5lIGNvbmZpZyAqLworCXZhbCA9ICg0IC0g cGRhdGEtPmRzaS0+bGFuZXMpIDw8IFNOX0RTSUFfTEFORV9PRkZTRVQ7CisJcmVnbWFwX3VwZGF0 ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0RTSV9MQU5FU19SRUcsCisJCQkgICBTTl9EU0lBX05V TV9MQU5FU19CSVRTLCB2YWwpOworCisJLyogRFAgbGFuZSBjb25maWcgKi8KKwl2YWwgPSAocGRh dGEtPmRzaS0+bGFuZXMgLSAxKSA8PCBTTl9EUF9MQU5FX09GRlNFVDsKKwlyZWdtYXBfdXBkYXRl X2JpdHMocGRhdGEtPnJlZ21hcCwgU05fU1NDX0NPTkZJR19SRUcsCisJCQkgICBTTl9EUF9OVU1f TEFORVNfQklUUywgdmFsKTsKKworCS8qIHNldCBkc2kvZHAgY2xrIGZyZXF1ZW5jeSB2YWx1ZSAq LworCXRpX3NuX2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUocGRhdGEpOworCisJLyogZW5hYmxlIERQ IFBMTCAqLworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9QTExfRU5BQkxFX1JFRywg MSk7CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDUwMCk7IC8qIDEwbXMgZGVsYXkgcmVjb21tZW5k ZWQgYnkgc3BlYyAqLworCisJLyoqCisJICogVGhlIFNONjVEU0k4NiBvbmx5IHN1cHBvcnRzIEFT U1IgRGlzcGxheSBBdXRoZW50aWNhdGlvbiBtZXRob2QgYW5kCisJICogdGhpcyBtZXRob2QgaXMg ZW5hYmxlZCBieSBkZWZhdWx0LiBBbiBlRFAgcGFuZWwgbXVzdCBzdXBwb3J0IHRoaXMKKwkgKiBh dXRoZW50aWNhdGlvbiBtZXRob2QuIFdlIG5lZWQgdG8gZW5hYmxlIHRoaXMgbWV0aG9kIGluIHRo ZSBlRFAgcGFuZWwKKwkgKiBhdCBEaXNwbGF5UG9ydCBhZGRyZXNzIDB4MDAxMEEgcHJpb3IgdG8g bGluayB0cmFpbmluZy4KKwkgKi8KKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQVVY X1dEQVRBMF9SRUcsIDB4MDEpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhf QUREUl8xOV8xNl9SRUcsIDB4MDApOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9B VVhfQUREUl8xNV84X1JFRywgMHgwMSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNO X0FVWF9BRERSXzdfMF9SRUcsIDB4MEEpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBT Tl9BVVhfTEVOR1RIX1JFRywgMHgwMSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNO X0FVWF9DTURfUkVHLCAweDgxKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDEwNTAwKTsgLyogMTBt cyBkZWxheSByZWNvbW1lbmRlZCBieSBzcGVjICovCisKKwkvKiBTZW1pIGF1dG8gbGluayB0cmFp bmluZyBtb2RlICovCisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX01MX1RYX01PREVf UkVHLCAweDBBKTsKKwltc2xlZXAoMjApOyAvKiAyMG1zIGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNw ZWMgKi8KKworCS8qIGNvbmZpZyB2aWRlbyBwYXJhbWV0ZXJzICovCisJdGlfc25fYnJpZGdlX3Nl dF92aWRlb190aW1pbmdzKHBkYXRhKTsKKworCS8qIGVuYWJsZSB2aWRlbyBzdHJlYW0gKi8KKwly ZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fRU5IX0ZSQU1FX1JFRywKKwkJCSAg IFNOX0VOQUJMRV9WSURfU1RSRUFNX0JJVCwgU05fRU5BQkxFX1ZJRF9TVFJFQU1fQklUKTsKKwor CWlmIChwZGF0YS0+cGFuZWwpCisJCWRybV9wYW5lbF9lbmFibGUocGRhdGEtPnBhbmVsKTsKK30K Kworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2Ug KmJyaWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9z bl9icmlkZ2UoYnJpZGdlKTsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMocGRhdGEtPmRldik7CisK KwkvKiBjb25maWd1cmUgYnJpZGdlIHJlZl9jbGsgKi8KKwl0aV9zbl9icmlkZ2Vfc2V0X3JlZmNs a19mcmVxKHBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3Bvc3RfZGlzYWJs ZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBk YXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOworCisJaWYgKHBkYXRhLT5yZWZj bGspCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShwZGF0YS0+cmVmY2xrKTsKKworCXBtX3J1bnRp bWVfcHV0X3N5bmMocGRhdGEtPmRldik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Jy aWRnZV9mdW5jcyB0aV9zbl9icmlkZ2VfZnVuY3MgPSB7CisJLmF0dGFjaCA9IHRpX3NuX2JyaWRn ZV9hdHRhY2gsCisJLnByZV9lbmFibGUgPSB0aV9zbl9icmlkZ2VfcHJlX2VuYWJsZSwKKwkuZW5h YmxlID0gdGlfc25fYnJpZGdlX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHRpX3NuX2JyaWRnZV9kaXNh YmxlLAorCS5wb3N0X2Rpc2FibGUgPSB0aV9zbl9icmlkZ2VfcG9zdF9kaXNhYmxlLAorfTsKKwor c3RhdGljIGludCB0aV9zbl9icmlkZ2VfcGFyc2VfZHNpX2hvc3Qoc3RydWN0IHRpX3NuX2JyaWRn ZSAqcGRhdGEpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkYXRhLT5kZXYtPm9mX25v ZGU7CisKKwlwZGF0YS0+aG9zdF9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9ub2RlKG5wLCAw LCAwKTsKKworCWlmICghcGRhdGEtPmhvc3Rfbm9kZSkgeworCQlEUk1fRVJST1IoInJlbW90ZSBk c2kgaG9zdCBub2RlIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9wcm9iZShzdHJ1Y3QgaTJjX2Ns aWVudCAqY2xpZW50LAorCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3Ry dWN0IHRpX3NuX2JyaWRnZSAqcGRhdGE7CisJc3RydWN0IGRldmljZV9ub2RlICpkZGNfbm9kZTsK KwlpbnQgcmV0OworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0 ZXIsIEkyQ19GVU5DX0kyQykpIHsKKwkJRFJNX0VSUk9SKCJkZXZpY2UgZG9lc24ndCBzdXBwb3J0 IEkyQ1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBkYXRhID0gZGV2bV9remFsbG9j KCZjbGllbnQtPmRldiwgc2l6ZW9mKHN0cnVjdCB0aV9zbl9icmlkZ2UpLAorCQkJICAgICBHRlBf S0VSTkVMKTsKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBkYXRhLT5yZWdt YXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsCisJCQkJCSAgICAgJnRpX3NuX2JyaWRn ZV9yZWdtYXBfY29uZmlnKTsKKwlpZiAoSVNfRVJSKHBkYXRhLT5yZWdtYXApKSB7CisJCURSTV9F UlJPUigicmVnbWFwIGkyYyBpbml0IGZhaWxlZFxuIik7CisJCXJldHVybiBQVFJfRVJSKHBkYXRh LT5yZWdtYXApOworCX0KKworCXBkYXRhLT5kZXYgPSAmY2xpZW50LT5kZXY7CisJZGV2X3NldF9k cnZkYXRhKCZjbGllbnQtPmRldiwgcGRhdGEpOworCisJcGRhdGEtPmVuYWJsZV9ncGlvID0gZGV2 bV9ncGlvZF9nZXQocGRhdGEtPmRldiwgImVuYWJsZSIsCisJCQkJCSAgICBHUElPRF9PVVRfTE9X KTsKKwlpZiAoSVNfRVJSKHBkYXRhLT5lbmFibGVfZ3BpbykpIHsKKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gZ2V0IGVuYWJsZSBncGlvIGZyb20gRFRcbiIpOworCQlyZXQgPSBQVFJfRVJSKHBkYXRh LT5lbmFibGVfZ3Bpbyk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gdGlfc25fYnJpZGdl X3BhcnNlX3JlZ3VsYXRvcnMocGRhdGEpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWls ZWQgdG8gcGFyc2UgcmVndWxhdG9yc1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0g ZHJtX29mX2ZpbmRfcGFuZWxfb3JfYnJpZGdlKHBkYXRhLT5kZXYtPm9mX25vZGUsIDEsIDAsCisJ CQkJCSAgJnBkYXRhLT5wYW5lbCwgTlVMTCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImNv dWxkIG5vdCBmaW5kIGFueSBkcm0gcGFuZWwgbm9kZVxuIik7CisJCXJldHVybiByZXQ7CisJfQor CisJcGRhdGEtPnJlZmNsayA9IGRldm1fY2xrX2dldChwZGF0YS0+ZGV2LCAicmVmY2xrIik7CisJ aWYgKElTX0VSUihwZGF0YS0+cmVmY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKHBkYXRhLT5yZWZj bGspOworCQlpZiAocmV0ID09IC1FUFJPQkVfREVGRVIpCisJCQlyZXR1cm4gcmV0OworCQlEUk1f REVCVUdfS01TKCJyZWZjbGsgbm90IGZvdW5kXG4iKTsKKwkJcGRhdGEtPnJlZmNsayA9IE5VTEw7 CisJfQorCisJZGRjX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBkYXRhLT5kZXYtPm9mX25vZGUs ICJkZGMtaTJjLWJ1cyIsIDApOworCWlmIChkZGNfbm9kZSkgeworCQlwZGF0YS0+ZGRjID0gb2Zf ZmluZF9pMmNfYWRhcHRlcl9ieV9ub2RlKGRkY19ub2RlKTsKKwkJb2Zfbm9kZV9wdXQoZGRjX25v ZGUpOworCQlpZiAoIXBkYXRhLT5kZGMpIHsKKwkJCURSTV9ERUJVR19LTVMoImZhaWxlZCB0byBy ZWFkIGRkYyBub2RlXG4iKTsKKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOworCQl9CisJfSBlbHNl IHsKKwkJRFJNX0RFQlVHX0tNUygibm8gZGRjIHByb3BlcnR5IGZvdW5kXG4iKTsKKwl9CisKKwly ZXQgPSB0aV9zbl9icmlkZ2VfcGFyc2VfZHNpX2hvc3QocGRhdGEpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwlwbV9ydW50aW1lX2VuYWJsZShwZGF0YS0+ZGV2KTsKKworCWkyY19zZXRf Y2xpZW50ZGF0YShjbGllbnQsIHBkYXRhKTsKKworCXBkYXRhLT5icmlkZ2UuZnVuY3MgPSAmdGlf c25fYnJpZGdlX2Z1bmNzOworCXBkYXRhLT5icmlkZ2Uub2Zfbm9kZSA9IGNsaWVudC0+ZGV2Lm9m X25vZGU7CisKKwlkcm1fYnJpZGdlX2FkZCgmcGRhdGEtPmJyaWRnZSk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpj bGllbnQpCit7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBpMmNfZ2V0X2NsaWVudGRh dGEoY2xpZW50KTsKKworCWlmICghcGRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBk YXRhLT5ob3N0X25vZGUpCisJCW9mX25vZGVfcHV0KHBkYXRhLT5ob3N0X25vZGUpOworCisJcG1f cnVudGltZV9kaXNhYmxlKHBkYXRhLT5kZXYpOworCisJaWYgKHBkYXRhLT5kc2kpIHsKKwkJbWlw aV9kc2lfZGV0YWNoKHBkYXRhLT5kc2kpOworCQltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3Rlcihw ZGF0YS0+ZHNpKTsKKwl9CisKKwlkcm1fYnJpZGdlX3JlbW92ZSgmcGRhdGEtPmJyaWRnZSk7CisJ aTJjX3B1dF9hZGFwdGVyKHBkYXRhLT5kZGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgaTJjX2RldmljZV9pZCB0aV9zbl9icmlkZ2VfaWRbXSA9IHsKKwl7ICJ0aSxzbjY1ZHNp ODYiLCAwfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdGlfc25fYnJpZGdl X2lkKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGlfc25fYnJpZGdlX21h dGNoX3RhYmxlW10gPSB7CisJey5jb21wYXRpYmxlID0gInRpLHNuNjVkc2k4NiJ9LAorCXt9LAor fTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZSk7CisK K3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0aV9zbl9icmlkZ2VfZHJpdmVyID0geworCS5kcml2 ZXIgPSB7CisJCS5uYW1lID0gInRpX3NuNjVkc2k4NiIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHRp X3NuX2JyaWRnZV9tYXRjaF90YWJsZSwKKwkJLnBtID0gJnRpX3NuX2JyaWRnZV9wbV9vcHMsCisJ fSwKKwkucHJvYmUgPSB0aV9zbl9icmlkZ2VfcHJvYmUsCisJLnJlbW92ZSA9IHRpX3NuX2JyaWRn ZV9yZW1vdmUsCisJLmlkX3RhYmxlID0gdGlfc25fYnJpZGdlX2lkLAorfTsKKworbW9kdWxlX2ky Y19kcml2ZXIodGlfc25fYnJpZGdlX2RyaXZlcik7CitNT0RVTEVfREVTQ1JJUFRJT04oInNuNjVk c2k4NiBEU0kgdG8gZURQIGJyaWRnZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIi KTsKLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBv ZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmEgTGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZl IFByb2plY3QKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkZyZWVkcmVubyBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=