From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sandeep Panda Subject: [PATCH v14 1/2] drm/bridge: add support for sn65dsi86 bridge driver Date: Mon, 16 Jul 2018 14:13:29 +0530 Message-ID: <20180716084330.26698-2-spanda@codeaurora.org> References: <20180716084330.26698-1-spanda@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180716084330.26698-1-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: linux-arm-msm@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 ZmNsayBoYW5kbGUgKFN0ZXBoZW4gQm95ZCkuCgpDaGFuZ2VzIGluIHYxMjoKIC0gRXhwbGFpbiBp biBjb21tZW50IGFzIGluIHdoeSBkc2kgZGV2IHJlZ2lzdHJhdGlvbiBpcyBkb25lIGluCiAgIGJy aWRnZV9hdHRhY2ggKEFuZHJ6ZWogSGFqZGEpLgogLSBNb3ZlIEhQRCBkaXNhYmxlIHRvIGJyaWRn ZV9wcmVfZW5hYmxlIChBbmRyemVqIEhhamRhKS4KIC0gTWFrZSBwYW5lbC9EREMgZXhjbHVzaXZl IHVudGlsIEhQRCBzdXBwb3J0IGlzIGFkZGVkIChBbmRyemVqIEhhamRhKS4KCkNoYW5nZXMgaW4g djEzOgogLSBlRFAgcGFuZWxzIHJlcG9ydCBFRElEIHZpYSBEUC1BVVggY2hhbm5lbCwgc28gcmVt b3ZlIHN1cHBvcnQgZm9yCiAgIGRlZGljYXRlZCBEREMgbGluZSAoQW5kcnplaiBIYWpkYSkuCgpT aWduZWQtb2ZmLWJ5OiBTYW5kZWVwIFBhbmRhIDxzcGFuZGFAY29kZWF1cm9yYS5vcmc+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnICAgICAgICB8ICAgOSArCiBkcml2ZXJzL2dw dS9kcm0vYnJpZGdlL01ha2VmaWxlICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9icmlk Z2UvdGktc242NWRzaTg2LmMgfCA2NzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogMyBmaWxlcyBjaGFuZ2VkLCA2ODYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRzaTg2LmMKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25m aWcKaW5kZXggM2I5OWQ1YTA2YzE2Li44MTUzMTUwYWNkMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25m aWcKQEAgLTEwOCw2ICsxMDgsMTUgQEAgY29uZmlnIERSTV9USV9URlA0MTAKIAktLS1oZWxwLS0t CiAJICBUZXhhcyBJbnN0cnVtZW50cyBURlA0MTAgRFZJL0hETUkgVHJhbnNtaXR0ZXIgZHJpdmVy CiAKK2NvbmZpZyBEUk1fVElfU042NURTSTg2CisJdHJpc3RhdGUgIlRJIFNONjVEU0k4NiBEU0kg dG8gZURQIGJyaWRnZSIKKwlkZXBlbmRzIG9uIE9GCisJc2VsZWN0IERSTV9LTVNfSEVMUEVSCisJ c2VsZWN0IFJFR01BUF9JMkMKKwlzZWxlY3QgRFJNX1BBTkVMCisJLS0taGVscC0tLQorCSAgVGV4 YXMgSW5zdHJ1bWVudHMgU042NURTSTg2IERTSSB0byBlRFAgQnJpZGdlIGRyaXZlcgorCiBzb3Vy Y2UgImRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvS2NvbmZpZyIKIAogc291cmNlICJk cml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Fkdjc1MTEvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2Vm aWxlCmluZGV4IDM3M2ViMjhmMzFlZC4uYTdjYTAwMGY2MDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFr ZWZpbGUKQEAgLTExLDUgKzExLDYgQEAgb2JqLSQoQ09ORklHX0RSTV9TSUk5MjM0KSArPSBzaWk5 MjM0Lm8KIG9iai0kKENPTkZJR19EUk1fVE9TSElCQV9UQzM1ODc2NykgKz0gdGMzNTg3Njcubwog b2JqLSQoQ09ORklHX0RSTV9BTkFMT0dJWF9EUCkgKz0gYW5hbG9naXgvCiBvYmotJChDT05GSUdf RFJNX0kyQ19BRFY3NTExKSArPSBhZHY3NTExLworb2JqLSQoQ09ORklHX0RSTV9USV9TTjY1RFNJ ODYpICs9IHRpLXNuNjVkc2k4Ni5vCiBvYmotJChDT05GSUdfRFJNX1RJX1RGUDQxMCkgKz0gdGkt dGZwNDEwLm8KIG9iai15ICs9IHN5bm9wc3lzLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2JyaWRnZS90aS1zbjY1ZHNpODYuYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGktc242NWRz aTg2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yZjU2MGUzYTE0 NjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4 Ni5jCkBAIC0wLDAgKzEsNjc2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu 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 CisjZGVmaW5lIFNOX1JFRkNMS19GUkVRX0JJVFMJCUdFTk1BU0soMywgMSkKKyNkZWZpbmUgU05f RFNJQV9OVU1fTEFORVNfQklUUwkJR0VOTUFTSyg0LCAzKQorI2RlZmluZSBTTl9EUF9OVU1fTEFO RVNfQklUUwkJR0VOTUFTSyg1LCA0KQorI2RlZmluZSBTTl9EUF9EQVRBX1JBVEVfQklUUwkJR0VO TUFTSyg3LCA1KQorI2RlZmluZSBTTl9IUERfRElTQUJMRV9CSVQJCUJJVCgwKQorCisjZGVmaW5l IFNOX1JFR1VMQVRPUl9TVVBQTFlfTlVNCQk0CisKK3N0cnVjdCB0aV9zbl9icmlkZ2UgeworCXN0 cnVjdCBkZXZpY2UJCQkqZGV2OworCXN0cnVjdCByZWdtYXAJCQkqcmVnbWFwOworCXN0cnVjdCBk cm1fYnJpZGdlCQlicmlkZ2U7CisJc3RydWN0IGRybV9jb25uZWN0b3IJCWNvbm5lY3RvcjsKKwlz dHJ1Y3QgZGV2aWNlX25vZGUJCSpob3N0X25vZGU7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZQkJ KmRzaTsKKwlzdHJ1Y3QgY2xrCQkJKnJlZmNsazsKKwlzdHJ1Y3QgZHJtX3BhbmVsCQkqcGFuZWw7 CisJc3RydWN0IGdwaW9fZGVzYwkJKmVuYWJsZV9ncGlvOworCXN0cnVjdCByZWd1bGF0b3JfYnVs a19kYXRhCXN1cHBsaWVzW1NOX1JFR1VMQVRPUl9TVVBQTFlfTlVNXTsKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIHRpX3NuX2JyaWRnZV92b2xhdGlsZV9yYW5nZXNbXSA9 IHsKKwl7IC5yYW5nZV9taW4gPSAwLCAucmFuZ2VfbWF4ID0gMHhGRiB9LAorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlIHRpX3NuX2JyaWRnZV92b2xhdGlsZV90 YWJsZSA9IHsKKwkueWVzX3JhbmdlcyA9IHRpX3NuX2JyaWRnZV92b2xhdGlsZV9yYW5nZXMsCisJ Lm5feWVzX3JhbmdlcyA9IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX3ZvbGF0aWxlX3Jhbmdlcyks Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgdGlfc25fYnJpZGdlX3Jl Z21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gOCwKKwkudmFsX2JpdHMgPSA4LAorCS52b2xh dGlsZV90YWJsZSA9ICZ0aV9zbl9icmlkZ2Vfdm9sYXRpbGVfdGFibGUsCisJLmNhY2hlX3R5cGUg PSBSRUdDQUNIRV9OT05FLAorfTsKKworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3dyaXRlX3Ux NihzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgcmVnLCB1 MTYgdmFsKQoreworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCByZWcsIHZhbCAmIDB4RkYp OworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCByZWcgKyAxLCB2YWwgPj4gOCk7Cit9CisK K3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgdGlfc25fYnJpZGdlX3Jlc3VtZShzdHJ1Y3QgZGV2 aWNlICpkZXYpCit7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKFNOX1JF R1VMQVRPUl9TVVBQTFlfTlVNLCBwZGF0YS0+c3VwcGxpZXMpOworCWlmIChyZXQpIHsKKwkJRFJN X0VSUk9SKCJmYWlsZWQgdG8gZW5hYmxlIHN1cHBsaWVzICVkXG4iLCByZXQpOworCQlyZXR1cm4g cmV0OworCX0KKworCWdwaW9kX3NldF92YWx1ZShwZGF0YS0+ZW5hYmxlX2dwaW8sIDEpOworCisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX21heWJlX3VudXNlZCB0aV9zbl9icmlkZ2Vf c3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRh dGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJZ3Bpb2Rfc2V0X3ZhbHVl KHBkYXRhLT5lbmFibGVfZ3BpbywgMCk7CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19kaXNhYmxl KFNOX1JFR1VMQVRPUl9TVVBQTFlfTlVNLCBwZGF0YS0+c3VwcGxpZXMpOworCWlmIChyZXQpCisJ CURSTV9FUlJPUigiZmFpbGVkIHRvIGRpc2FibGUgc3VwcGxpZXMgJWRcbiIsIHJldCk7CisKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdGlfc25fYnJp ZGdlX3BtX29wcyA9IHsKKwlTRVRfUlVOVElNRV9QTV9PUFModGlfc25fYnJpZGdlX3N1c3BlbmQs IHRpX3NuX2JyaWRnZV9yZXN1bWUsIE5VTEwpCit9OworCisvKiBDb25uZWN0b3IgZnVuY3MgKi8K K3N0YXRpYyBzdHJ1Y3QgdGlfc25fYnJpZGdlICoKK2Nvbm5lY3Rvcl90b190aV9zbl9icmlkZ2Uo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29m KGNvbm5lY3Rvciwgc3RydWN0IHRpX3NuX2JyaWRnZSwgY29ubmVjdG9yKTsKK30KKworc3RhdGlj IGludCB0aV9zbl9icmlkZ2VfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yKQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gY29ubmVjdG9y X3RvX3RpX3NuX2JyaWRnZShjb25uZWN0b3IpOworCisJcmV0dXJuIGRybV9wYW5lbF9nZXRfbW9k ZXMocGRhdGEtPnBhbmVsKTsKK30KKworc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCit0aV9z bl9icmlkZ2VfY29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKKwkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJLyogbWF4 aW11bSBzdXBwb3J0ZWQgcmVzb2x1dGlvbiBpcyA0SyBhdCA2MCBmcHMgKi8KKwlpZiAobW9kZS0+ Y2xvY2sgPiA1OTQwMDApCisJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisKKwlyZXR1cm4gTU9E RV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyB0aV9z bl9icmlkZ2VfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0gdGlfc25f YnJpZGdlX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCisJLm1vZGVfdmFsaWQgPSB0aV9zbl9icmlkZ2Vf Y29ubmVjdG9yX21vZGVfdmFsaWQsCit9OworCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0 YXR1cwordGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9 IGNvbm5lY3Rvcl90b190aV9zbl9icmlkZ2UoY29ubmVjdG9yKTsKKworCS8qKgorCSAqIFRPRE86 IEN1cnJlbnRseSBpZiBkcm1fcGFuZWwgaXMgcHJlc2VudCwgdGhlbiBhbHdheXMKKwkgKiByZXR1 cm4gdGhlIHN0YXR1cyBhcyBjb25uZWN0ZWQuIE5lZWQgdG8gYWRkIHN1cHBvcnQgdG8gZGV0ZWN0 CisJICogZGV2aWNlIHN0YXRlIGZvciBubyBwYW5lbChob3QgcGx1Z2dhYmxlKSBzY2VuYXJpb3Mu CisJICovCisJaWYgKHBkYXRhLT5wYW5lbCkKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29u bmVjdGVkOworCWVsc2UKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfdW5rbm93bjsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHRpX3NuX2JyaWRnZV9jb25u ZWN0b3JfZnVuY3MgPSB7CisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9j b25uZWN0b3JfbW9kZXMsCisJLmRldGVjdCA9IHRpX3NuX2JyaWRnZV9jb25uZWN0b3JfZGV0ZWN0 LAorCS5kZXN0cm95ID0gZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwLAorCS5yZXNldCA9IGRybV9hdG9t aWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRy bV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0 cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9 OworCitzdGF0aWMgc3RydWN0IHRpX3NuX2JyaWRnZSAqYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXJldHVybiBjb250YWluZXJfb2YoYnJpZGdl LCBzdHJ1Y3QgdGlfc25fYnJpZGdlLCBicmlkZ2UpOworfQorCitzdGF0aWMgaW50IHRpX3NuX2Jy aWRnZV9wYXJzZV9yZWd1bGF0b3JzKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQoreworCXVu c2lnbmVkIGludCBpOworCWNvbnN0IGNoYXIgKiBjb25zdCB0aV9zbl9icmlkZ2Vfc3VwcGx5X25h bWVzW10gPSB7CisJCSJ2Y2NhIiwgInZjYyIsICJ2Y2NpbyIsICJ2cGxsIiwKKwl9OworCisJZm9y IChpID0gMDsgaSA8IFNOX1JFR1VMQVRPUl9TVVBQTFlfTlVNOyBpKyspCisJCXBkYXRhLT5zdXBw bGllc1tpXS5zdXBwbHkgPSB0aV9zbl9icmlkZ2Vfc3VwcGx5X25hbWVzW2ldOworCisJcmV0dXJu IGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0KHBkYXRhLT5kZXYsIFNOX1JFR1VMQVRPUl9TVVBQTFlf TlVNLAorCQkJCSAgICAgICBwZGF0YS0+c3VwcGxpZXMpOworfQorCitzdGF0aWMgaW50IHRpX3Nu X2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlpbnQgcmV0LCB2 YWw7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBicmlkZ2VfdG9fdGlfc25fYnJpZGdl KGJyaWRnZSk7CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3Q7CisJc3RydWN0IG1pcGlfZHNp X2RldmljZSAqZHNpOworCWNvbnN0IHN0cnVjdCBtaXBpX2RzaV9kZXZpY2VfaW5mbyBpbmZvID0g eyAudHlwZSA9ICJ0aV9zbl9icmlkZ2UiLAorCQkJCQkJICAgLmNoYW5uZWwgPSAwLAorCQkJCQkJ ICAgLm5vZGUgPSBOVUxMLAorCQkJCQkJIH07CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQo YnJpZGdlLT5kZXYsICZwZGF0YS0+Y29ubmVjdG9yLAorCQkJCSAmdGlfc25fYnJpZGdlX2Nvbm5l Y3Rvcl9mdW5jcywKKwkJCQkgRFJNX01PREVfQ09OTkVDVE9SX2VEUCk7CisJaWYgKHJldCkgewor CQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbm5lY3RvciB3aXRoIGRybVxuIik7 CisJCXJldHVybiByZXQ7CisJfQorCisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZwZGF0YS0+ Y29ubmVjdG9yLAorCQkJCSAmdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOwor CWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmcGRhdGEtPmNvbm5lY3RvciwgYnJp ZGdlLT5lbmNvZGVyKTsKKworCS8qCisJICogVE9ETzogaWRlYWxseSBmaW5kaW5nIGhvc3QgcmVz b3VyY2UgYW5kIGRzaSBkZXYgcmVnaXN0cmF0aW9uIG5lZWRzCisJICogdG8gYmUgZG9uZSBpbiBi cmlkZ2UgcHJvYmUuIEJ1dCBzb21lIGV4aXN0aW5nIERTSSBob3N0IGRyaXZlcnMgd2lsbAorCSAq IHdhaXQgZm9yIGFueSBvZiB0aGUgZHJtX2JyaWRnZS9kcm1fcGFuZWwgdG8gZ2V0IGFkZGVkIHRv IHRoZSBnbG9iYWwKKwkgKiBicmlkZ2UvcGFuZWwgbGlzdCwgYmVmb3JlIGNvbXBsZXRpbmcgdGhl aXIgcHJvYmUuIFNvIGlmIHdlIGRvIHRoZQorCSAqIGRzaSBkZXYgcmVnaXN0cmF0aW9uIHBhcnQg aW4gYnJpZGdlIHByb2JlLCBiZWZvcmUgcG9wdWxhdGluZyBpbgorCSAqIHRoZSBnbG9iYWwgYnJp ZGdlIGxpc3QsIHRoZW4gaXQgd2lsbCBjYXVzZSBkZWFkbG9jayBhcyBkc2kgaG9zdCBwcm9iZQor CSAqIHdpbGwgbmV2ZXIgY29tcGxldGUsIG5laXRoZXIgb3VyIGJyaWRnZSBwcm9iZS4gU28ga2Vl cGluZyBpdCBoZXJlCisJICogd2lsbCBzYXRpc2Z5IG1vc3Qgb2YgdGhlIGV4aXN0aW5nIGhvc3Qg ZHJpdmVycy4gT25jZSB0aGUgaG9zdCBkcml2ZXIKKwkgKiBpcyBmaXhlZCB3ZSBjYW4gbW92ZSB0 aGUgYmVsb3cgY29kZSB0byBicmlkZ2UgcHJvYmUgc2FmZWx5LgorCSAqLworCWhvc3QgPSBvZl9m aW5kX21pcGlfZHNpX2hvc3RfYnlfbm9kZShwZGF0YS0+aG9zdF9ub2RlKTsKKwlpZiAoIWhvc3Qp IHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZmluZCBkc2kgaG9zdFxuIik7CisJCXJldCA9IC1F Tk9ERVY7CisJCWdvdG8gZXJyX2RzaV9ob3N0OworCX0KKworCWRzaSA9IG1pcGlfZHNpX2Rldmlj ZV9yZWdpc3Rlcl9mdWxsKGhvc3QsICZpbmZvKTsKKwlpZiAoSVNfRVJSKGRzaSkpIHsKKwkJRFJN X0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGRzaSBkZXZpY2VcbiIpOworCQlyZXQgPSBQVFJfRVJS KGRzaSk7CisJCWdvdG8gZXJyX2RzaV9ob3N0OworCX0KKworCS8qIFRPRE86IHNldHRpbmcgdG8g NCBsYW5lcyBhbHdheXMgZm9yIG5vdyAqLworCWRzaS0+bGFuZXMgPSA0OworCWRzaS0+Zm9ybWF0 ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9NT0RF X1ZJREVPIHwgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFIHwKKwkJCSAgTUlQSV9EU0lf TU9ERV9FT1RfUEFDS0VUIHwgTUlQSV9EU0lfTU9ERV9WSURFT19IU0U7CisKKwkvKiBjaGVjayBp ZiBjb250aW51b3VzIGRzaSBjbG9jayBpcyByZXF1aXJlZCBvciBub3QgKi8KKwlwbV9ydW50aW1l X2dldF9zeW5jKHBkYXRhLT5kZXYpOworCXJlZ21hcF9yZWFkKHBkYXRhLT5yZWdtYXAsIFNOX0RQ UExMX1NSQ19SRUcsICZ2YWwpOworCXBtX3J1bnRpbWVfcHV0KHBkYXRhLT5kZXYpOworCWlmICgh KHZhbCAmIERQUExMX0NMS19TUkNfRFNJQ0xLKSkKKwkJZHNpLT5tb2RlX2ZsYWdzIHw9IE1JUElf RFNJX0NMT0NLX05PTl9DT05USU5VT1VTOworCisJcmV0ID0gbWlwaV9kc2lfYXR0YWNoKGRzaSk7 CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYXR0YWNoIGRzaSB0byBo b3N0XG4iKTsKKwkJZ290byBlcnJfZHNpX2F0dGFjaDsKKwl9CisJcGRhdGEtPmRzaSA9IGRzaTsK KworCS8qIGF0dGFjaCBwYW5lbCB0byBicmlkZ2UgKi8KKwlpZiAocGRhdGEtPnBhbmVsKQorCQlk cm1fcGFuZWxfYXR0YWNoKHBkYXRhLT5wYW5lbCwgJnBkYXRhLT5jb25uZWN0b3IpOworCisJcmV0 dXJuIDA7CisKK2Vycl9kc2lfYXR0YWNoOgorCW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKGRz aSk7CitlcnJfZHNpX2hvc3Q6CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKCZwZGF0YS0+Y29ubmVj dG9yKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfZGlzYWJs ZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBk YXRhID0gYnJpZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOworCisJaWYgKHBkYXRhLT5wYW5l bCkKKwkJZHJtX3BhbmVsX2Rpc2FibGUocGRhdGEtPnBhbmVsKTsKKworCS8qIGRpc2FibGUgdmlk ZW8gc3RyZWFtICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0VOSF9G UkFNRV9SRUcsCisJCQkgICBTTl9FTkFCTEVfVklEX1NUUkVBTV9CSVQsIDApOworCS8qIHNlbWkg YXV0byBsaW5rIHRyYWluaW5nIG1vZGUgT0ZGICovCisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdt YXAsIFNOX01MX1RYX01PREVfUkVHLCAwKTsKKwkvKiBkaXNhYmxlIERQIFBMTCAqLworCXJlZ21h cF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9QTExfRU5BQkxFX1JFRywgMCk7CisKKwlpZiAocGRh dGEtPnBhbmVsKQorCQlkcm1fcGFuZWxfdW5wcmVwYXJlKHBkYXRhLT5wYW5lbCk7Cit9CisKK3N0 YXRpYyB1MzIgdGlfc25fYnJpZGdlX2dldF9kc2lfZnJlcShzdHJ1Y3QgdGlfc25fYnJpZGdlICpw ZGF0YSkKK3sKKwl1MzIgYml0X3JhdGVfa2h6LCBjbGtfZnJlcV9raHo7CisJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUgPQorCQkmcGRhdGEtPmJyaWRnZS5lbmNvZGVyLT5jcnRjLT5zdGF0 ZS0+YWRqdXN0ZWRfbW9kZTsKKworCWJpdF9yYXRlX2toeiA9IG1vZGUtPmNsb2NrICoKKwkJCW1p cGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAocGRhdGEtPmRzaS0+Zm9ybWF0KTsKKwljbGtfZnJl cV9raHogPSBiaXRfcmF0ZV9raHogLyAocGRhdGEtPmRzaS0+bGFuZXMgKiAyKTsKKworCXJldHVy biBjbGtfZnJlcV9raHo7Cit9CisKKy8qIGNsayBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgYnJp ZGdlIGluIEh6IGluIGNhc2UgZGVyaXZlZCBmcm9tIFJFRkNMSyBwaW4gKi8KK3N0YXRpYyBjb25z dCB1MzIgdGlfc25fYnJpZGdlX3JlZmNsa19sdXRbXSA9IHsKKwkxMjAwMDAwMCwKKwkxOTIwMDAw MCwKKwkyNjAwMDAwMCwKKwkyNzAwMDAwMCwKKwkzODQwMDAwMCwKK307CisKKy8qIGNsayBmcmVx dWVuY2llcyBzdXBwb3J0ZWQgYnkgYnJpZGdlIGluIEh6IGluIGNhc2UgZGVyaXZlZCBmcm9tIERB Q1AvTiBwaW4gKi8KK3N0YXRpYyBjb25zdCB1MzIgdGlfc25fYnJpZGdlX2RzaWNsa19sdXRbXSA9 IHsKKwk0NjgwMDAwMDAsCisJMzg0MDAwMDAwLAorCTQxNjAwMDAwMCwKKwk0ODYwMDAwMDAsCisJ NDYwODAwMDAwLAorfTsKKworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3NldF9yZWZjbGtfZnJl cShzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKK3sKKwlpbnQgaTsKKwl1MzIgcmVmY2xrX3Jh dGU7CisJY29uc3QgdTMyICpyZWZjbGtfbHV0OworCXNpemVfdCByZWZjbGtfbHV0X3NpemU7CisK KwlpZiAocGRhdGEtPnJlZmNsaykgeworCQlyZWZjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwZGF0 YS0+cmVmY2xrKTsKKwkJcmVmY2xrX2x1dCA9IHRpX3NuX2JyaWRnZV9yZWZjbGtfbHV0OworCQly ZWZjbGtfbHV0X3NpemUgPSBBUlJBWV9TSVpFKHRpX3NuX2JyaWRnZV9yZWZjbGtfbHV0KTsKKwkJ Y2xrX3ByZXBhcmVfZW5hYmxlKHBkYXRhLT5yZWZjbGspOworCX0gZWxzZSB7CisJCXJlZmNsa19y YXRlID0gdGlfc25fYnJpZGdlX2dldF9kc2lfZnJlcShwZGF0YSkgKiAxMDAwOworCQlyZWZjbGtf bHV0ID0gdGlfc25fYnJpZGdlX2RzaWNsa19sdXQ7CisJCXJlZmNsa19sdXRfc2l6ZSA9IEFSUkFZ X1NJWkUodGlfc25fYnJpZGdlX2RzaWNsa19sdXQpOworCX0KKworCS8qIGZvciBpIGVxdWFscyB0 byByZWZjbGtfbHV0X3NpemUgbWVhbnMgZGVmYXVsdCBmcmVxdWVuY3kgKi8KKwlmb3IgKGkgPSAw OyBpIDwgcmVmY2xrX2x1dF9zaXplOyBpKyspCisJCWlmIChyZWZjbGtfbHV0W2ldID09IHJlZmNs a19yYXRlKQorCQkJYnJlYWs7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwg U05fRFBQTExfU1JDX1JFRywKKwkJCSAgIFNOX1JFRkNMS19GUkVRX0JJVFMsIGkgPDwgU05fUkVG Q0xLX0ZSRVFfT0ZGU0VUKTsKK30KKworLyoqCisgKiBMVVQgaW5kZXggY29ycmVzcG9uZHMgdG8g cmVnaXN0ZXIgdmFsdWUgYW5kCisgKiBMVVQgdmFsdWVzIGNvcnJlc3BvbmRzIHRvIGRwIGRhdGEg cmF0ZSBzdXBwb3J0ZWQKKyAqIGJ5IHRoZSBicmlkZ2UgaW4gTWJwcyB1bml0LgorICovCitzdGF0 aWMgY29uc3QgdW5zaWduZWQgaW50IHRpX3NuX2JyaWRnZV9kcF9yYXRlX2x1dFtdID0geworCTAs IDE2MjAsIDIxNjAsIDI0MzAsIDI3MDAsIDMyNDAsIDQzMjAsIDU0MDAKK307CisKK3N0YXRpYyB2 b2lkIHRpX3NuX2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRh dGEpCit7CisJdW5zaWduZWQgaW50IGJpdF9yYXRlX21oeiwgY2xrX2ZyZXFfbWh6LCBkcF9yYXRl X21oejsKKwl1bnNpZ25lZCBpbnQgdmFsLCBpOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlID0KKwkJJnBkYXRhLT5icmlkZ2UuZW5jb2Rlci0+Y3J0Yy0+c3RhdGUtPmFkanVzdGVkX21v ZGU7CisKKwkvKiBzZXQgRFNJQSBjbGsgZnJlcXVlbmN5ICovCisJYml0X3JhdGVfbWh6ID0gKG1v ZGUtPmNsb2NrIC8gMTAwMCkgKgorCQkJbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChwZGF0 YS0+ZHNpLT5mb3JtYXQpOworCWNsa19mcmVxX21oeiA9IGJpdF9yYXRlX21oeiAvIChwZGF0YS0+ ZHNpLT5sYW5lcyAqIDIpOworCisJLyogZm9yIGVhY2ggaW5jcmVtZW50IGluIHZhbCwgZnJlcXVl bmN5IGluY3JlYXNlcyBieSA1TUh6ICovCisJdmFsID0gKE1JTl9EU0lfQ0xLX0ZSRVFfTUhaIC8g NSkgKworCQkoKChjbGtfZnJlcV9taHogLSBNSU5fRFNJX0NMS19GUkVRX01IWikgLyA1KSAmIDB4 RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9EU0lBX0NMS19GUkVRX1JFRywg dmFsKTsKKworCS8qIHNldCBEUCBkYXRhIHJhdGUgKi8KKwlkcF9yYXRlX21oeiA9ICgoYml0X3Jh dGVfbWh6IC8gcGRhdGEtPmRzaS0+bGFuZXMpICogRFBfQ0xLX0ZVREdFX05VTSkgLworCQkJCQkJ CURQX0NMS19GVURHRV9ERU47CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGlfc25fYnJp ZGdlX2RwX3JhdGVfbHV0KSAtIDE7IGkrKykKKwkJaWYgKHRpX3NuX2JyaWRnZV9kcF9yYXRlX2x1 dFtpXSA+IGRwX3JhdGVfbWh6KQorCQkJYnJlYWs7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRh dGEtPnJlZ21hcCwgU05fREFUQVJBVEVfQ09ORklHX1JFRywKKwkJCSAgIFNOX0RQX0RBVEFfUkFU RV9CSVRTLCBpIDw8IFNOX0RQX0RBVEFfUkFURV9PRkZTRVQpOworfQorCitzdGF0aWMgdm9pZCB0 aV9zbl9icmlkZ2Vfc2V0X3ZpZGVvX3RpbWluZ3Moc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEp Cit7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPQorCQkmcGRhdGEtPmJyaWRnZS5l bmNvZGVyLT5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKKwl1OCBoc3luY19wb2xhcml0eSA9 IDAsIHZzeW5jX3BvbGFyaXR5ID0gMDsKKworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZM QUdfUEhTWU5DKQorCQloc3luY19wb2xhcml0eSA9IEJJVChTTl9TWU5DX1BPTEFSSVRZX09GRlNF VCk7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZTkMpCisJCXZzeW5jX3Bv bGFyaXR5ID0gQklUKFNOX1NZTkNfUE9MQVJJVFlfT0ZGU0VUKTsKKworCXRpX3NuX2JyaWRnZV93 cml0ZV91MTYocGRhdGEsIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfTE9XX1JFRywKKwkJCSAg ICAgICBtb2RlLT5oZGlzcGxheSk7CisJdGlfc25fYnJpZGdlX3dyaXRlX3UxNihwZGF0YSwgU05f Q0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9MT1dfUkVHLAorCQkJICAgICAgIG1vZGUtPnZkaXNw bGF5KTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hTWU5DX1BVTFNFX1dJ RFRIX0xPV19SRUcsCisJCSAgICAgKG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0 KSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfSFNZTkNfUFVM U0VfV0lEVEhfSElHSF9SRUcsCisJCSAgICAgKCgobW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5 bmNfc3RhcnQpID4+IDgpICYgMHg3RikgfAorCQkgICAgIGhzeW5jX3BvbGFyaXR5KTsKKwlyZWdt YXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0xPV19SRUcs CisJCSAgICAgKG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0KSAmIDB4RkYpOwor CXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVlNZTkNfUFVMU0VfV0lEVEhfSElH SF9SRUcsCisJCSAgICAoKChtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydCkgPj4g OCkgJiAweDdGKSB8CisJCSAgICB2c3luY19wb2xhcml0eSk7CisKKwlyZWdtYXBfd3JpdGUocGRh dGEtPnJlZ21hcCwgU05fQ0hBX0hPUklaT05UQUxfQkFDS19QT1JDSF9SRUcsCisJCSAgICAgKG1v ZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZCkgJiAweEZGKTsKKwlyZWdtYXBfd3JpdGUocGRh dGEtPnJlZ21hcCwgU05fQ0hBX1ZFUlRJQ0FMX0JBQ0tfUE9SQ0hfUkVHLAorCQkgICAgIChtb2Rl LT52dG90YWwgLSBtb2RlLT52c3luY19lbmQpICYgMHhGRik7CisKKwlyZWdtYXBfd3JpdGUocGRh dGEtPnJlZ21hcCwgU05fQ0hBX0hPUklaT05UQUxfRlJPTlRfUE9SQ0hfUkVHLAorCQkgICAgICht b2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5KSAmIDB4RkYpOworCXJlZ21hcF93cml0 ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVkVSVElDQUxfRlJPTlRfUE9SQ0hfUkVHLAorCQkgICAg IChtb2RlLT52c3luY19zdGFydCAtIG1vZGUtPnZkaXNwbGF5KSAmIDB4RkYpOworCisJdXNsZWVw X3JhbmdlKDEwMDAwLCAxMDUwMCk7IC8qIDEwbXMgZGVsYXkgcmVjb21tZW5kZWQgYnkgc3BlYyAq LworfQorCitzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdl ICpicmlkZ2UpCit7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBicmlkZ2VfdG9fdGlf c25fYnJpZGdlKGJyaWRnZSk7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWlmIChwZGF0YS0+cGFu ZWwpCisJCWRybV9wYW5lbF9wcmVwYXJlKHBkYXRhLT5wYW5lbCk7CisKKwkvKiBEU0lfQSBsYW5l IGNvbmZpZyAqLworCXZhbCA9ICg0IC0gcGRhdGEtPmRzaS0+bGFuZXMpIDw8IFNOX0RTSUFfTEFO RV9PRkZTRVQ7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0RTSV9MQU5F U19SRUcsCisJCQkgICBTTl9EU0lBX05VTV9MQU5FU19CSVRTLCB2YWwpOworCisJLyogRFAgbGFu ZSBjb25maWcgKi8KKwl2YWwgPSAocGRhdGEtPmRzaS0+bGFuZXMgLSAxKSA8PCBTTl9EUF9MQU5F X09GRlNFVDsKKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fU1NDX0NPTkZJ R19SRUcsCisJCQkgICBTTl9EUF9OVU1fTEFORVNfQklUUywgdmFsKTsKKworCS8qIHNldCBkc2kv ZHAgY2xrIGZyZXF1ZW5jeSB2YWx1ZSAqLworCXRpX3NuX2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUo cGRhdGEpOworCisJLyogZW5hYmxlIERQIFBMTCAqLworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVn bWFwLCBTTl9QTExfRU5BQkxFX1JFRywgMSk7CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDUwMCk7 IC8qIDEwbXMgZGVsYXkgcmVjb21tZW5kZWQgYnkgc3BlYyAqLworCisJLyoqCisJICogVGhlIFNO NjVEU0k4NiBvbmx5IHN1cHBvcnRzIEFTU1IgRGlzcGxheSBBdXRoZW50aWNhdGlvbiBtZXRob2Qg YW5kCisJICogdGhpcyBtZXRob2QgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBBbiBlRFAgcGFuZWwg bXVzdCBzdXBwb3J0IHRoaXMKKwkgKiBhdXRoZW50aWNhdGlvbiBtZXRob2QuIFdlIG5lZWQgdG8g ZW5hYmxlIHRoaXMgbWV0aG9kIGluIHRoZSBlRFAgcGFuZWwKKwkgKiBhdCBEaXNwbGF5UG9ydCBh ZGRyZXNzIDB4MDAxMEEgcHJpb3IgdG8gbGluayB0cmFpbmluZy4KKwkgKi8KKwlyZWdtYXBfd3Jp dGUocGRhdGEtPnJlZ21hcCwgU05fQVVYX1dEQVRBMF9SRUcsIDB4MDEpOworCXJlZ21hcF93cml0 ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQUREUl8xOV8xNl9SRUcsIDB4MDApOworCXJlZ21hcF93 cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfQUREUl8xNV84X1JFRywgMHgwMSk7CisJcmVnbWFw X3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9BRERSXzdfMF9SRUcsIDB4MEEpOworCXJlZ21h cF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9BVVhfTEVOR1RIX1JFRywgMHgwMSk7CisJcmVnbWFw X3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX0FVWF9DTURfUkVHLCAweDgxKTsKKwl1c2xlZXBfcmFu Z2UoMTAwMDAsIDEwNTAwKTsgLyogMTBtcyBkZWxheSByZWNvbW1lbmRlZCBieSBzcGVjICovCisK KwkvKiBTZW1pIGF1dG8gbGluayB0cmFpbmluZyBtb2RlICovCisJcmVnbWFwX3dyaXRlKHBkYXRh LT5yZWdtYXAsIFNOX01MX1RYX01PREVfUkVHLCAweDBBKTsKKwltc2xlZXAoMjApOyAvKiAyMG1z IGRlbGF5IHJlY29tbWVuZGVkIGJ5IHNwZWMgKi8KKworCS8qIGNvbmZpZyB2aWRlbyBwYXJhbWV0 ZXJzICovCisJdGlfc25fYnJpZGdlX3NldF92aWRlb190aW1pbmdzKHBkYXRhKTsKKworCS8qIGVu YWJsZSB2aWRlbyBzdHJlYW0gKi8KKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwg U05fRU5IX0ZSQU1FX1JFRywKKwkJCSAgIFNOX0VOQUJMRV9WSURfU1RSRUFNX0JJVCwgU05fRU5B QkxFX1ZJRF9TVFJFQU1fQklUKTsKKworCWlmIChwZGF0YS0+cGFuZWwpCisJCWRybV9wYW5lbF9l bmFibGUocGRhdGEtPnBhbmVsKTsKK30KKworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3ByZV9l bmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdl ICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKKworCXBtX3J1bnRpbWVf Z2V0X3N5bmMocGRhdGEtPmRldik7CisKKwkvKiBjb25maWd1cmUgYnJpZGdlIHJlZl9jbGsgKi8K Kwl0aV9zbl9icmlkZ2Vfc2V0X3JlZmNsa19mcmVxKHBkYXRhKTsKKworCS8qIGluIGNhc2UgZHJt X3BhbmVsIGlzIGNvbm5lY3RlZCB0aGVuIEhQRCBpcyBub3Qgc3VwcG9ydGVkICovCisJaWYgKHBk YXRhLT5wYW5lbCkKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0hQRF9E SVNBQkxFX1JFRywKKwkJCQkgICBTTl9IUERfRElTQUJMRV9CSVQsIFNOX0hQRF9ESVNBQkxFX0JJ VCk7Cit9CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9wb3N0X2Rpc2FibGUoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRn ZV90b190aV9zbl9icmlkZ2UoYnJpZGdlKTsKKworCWlmIChwZGF0YS0+cmVmY2xrKQorCQljbGtf ZGlzYWJsZV91bnByZXBhcmUocGRhdGEtPnJlZmNsayk7CisKKwlwbV9ydW50aW1lX3B1dF9zeW5j KHBkYXRhLT5kZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3Mg dGlfc25fYnJpZGdlX2Z1bmNzID0geworCS5hdHRhY2ggPSB0aV9zbl9icmlkZ2VfYXR0YWNoLAor CS5wcmVfZW5hYmxlID0gdGlfc25fYnJpZGdlX3ByZV9lbmFibGUsCisJLmVuYWJsZSA9IHRpX3Nu X2JyaWRnZV9lbmFibGUsCisJLmRpc2FibGUgPSB0aV9zbl9icmlkZ2VfZGlzYWJsZSwKKwkucG9z dF9kaXNhYmxlID0gdGlfc25fYnJpZGdlX3Bvc3RfZGlzYWJsZSwKK307CisKK3N0YXRpYyBpbnQg dGlfc25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0KHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhKQor eworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGF0YS0+ZGV2LT5vZl9ub2RlOworCisJcGRh dGEtPmhvc3Rfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZShucCwgMCwgMCk7CisKKwlp ZiAoIXBkYXRhLT5ob3N0X25vZGUpIHsKKwkJRFJNX0VSUk9SKCJyZW1vdGUgZHNpIGhvc3Qgbm9k ZSBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVu dCwKKwkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB0aV9zbl9i cmlkZ2UgKnBkYXRhOworCWludCByZXQ7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5 KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgeworCQlEUk1fRVJST1IoImRldmljZSBk b2Vzbid0IHN1cHBvcnQgSTJDXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGRhdGEg PSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2Yoc3RydWN0IHRpX3NuX2JyaWRnZSks CisJCQkgICAgIEdGUF9LRVJORUwpOworCWlmICghcGRhdGEpCisJCXJldHVybiAtRU5PTUVNOwor CisJcGRhdGEtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwKKwkJCQkJICAg ICAmdGlfc25fYnJpZGdlX3JlZ21hcF9jb25maWcpOworCWlmIChJU19FUlIocGRhdGEtPnJlZ21h cCkpIHsKKwkJRFJNX0VSUk9SKCJyZWdtYXAgaTJjIGluaXQgZmFpbGVkXG4iKTsKKwkJcmV0dXJu IFBUUl9FUlIocGRhdGEtPnJlZ21hcCk7CisJfQorCisJcGRhdGEtPmRldiA9ICZjbGllbnQtPmRl djsKKworCXJldCA9IGRybV9vZl9maW5kX3BhbmVsX29yX2JyaWRnZShwZGF0YS0+ZGV2LT5vZl9u b2RlLCAxLCAwLAorCQkJCQkgICZwZGF0YS0+cGFuZWwsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJ RFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBhbnkgcGFuZWwgbm9kZVxuIik7CisJCXJldHVybiBy ZXQ7CisJfQorCisJZGV2X3NldF9kcnZkYXRhKCZjbGllbnQtPmRldiwgcGRhdGEpOworCisJcGRh dGEtPmVuYWJsZV9ncGlvID0gZGV2bV9ncGlvZF9nZXQocGRhdGEtPmRldiwgImVuYWJsZSIsCisJ CQkJCSAgICBHUElPRF9PVVRfTE9XKTsKKwlpZiAoSVNfRVJSKHBkYXRhLT5lbmFibGVfZ3Bpbykp IHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGVuYWJsZSBncGlvIGZyb20gRFRcbiIpOwor CQlyZXQgPSBQVFJfRVJSKHBkYXRhLT5lbmFibGVfZ3Bpbyk7CisJCXJldHVybiByZXQ7CisJfQor CisJcmV0ID0gdGlfc25fYnJpZGdlX3BhcnNlX3JlZ3VsYXRvcnMocGRhdGEpOworCWlmIChyZXQp IHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGFyc2UgcmVndWxhdG9yc1xuIik7CisJCXJldHVy biByZXQ7CisJfQorCisJcGRhdGEtPnJlZmNsayA9IGRldm1fY2xrX2dldChwZGF0YS0+ZGV2LCAi cmVmY2xrIik7CisJaWYgKElTX0VSUihwZGF0YS0+cmVmY2xrKSkgeworCQlyZXQgPSBQVFJfRVJS KHBkYXRhLT5yZWZjbGspOworCQlpZiAocmV0ID09IC1FUFJPQkVfREVGRVIpCisJCQlyZXR1cm4g cmV0OworCQlEUk1fREVCVUdfS01TKCJyZWZjbGsgbm90IGZvdW5kXG4iKTsKKwkJcGRhdGEtPnJl ZmNsayA9IE5VTEw7CisJfQorCisJcmV0ID0gdGlfc25fYnJpZGdlX3BhcnNlX2RzaV9ob3N0KHBk YXRhKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcG1fcnVudGltZV9lbmFibGUocGRh dGEtPmRldik7CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBwZGF0YSk7CisKKwlwZGF0 YS0+YnJpZGdlLmZ1bmNzID0gJnRpX3NuX2JyaWRnZV9mdW5jczsKKwlwZGF0YS0+YnJpZGdlLm9m X25vZGUgPSBjbGllbnQtPmRldi5vZl9ub2RlOworCisJZHJtX2JyaWRnZV9hZGQoJnBkYXRhLT5i cmlkZ2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGlfc25fYnJpZGdlX3JlbW92 ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBk YXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpZiAoIXBkYXRhKQorCQlyZXR1 cm4gLUVJTlZBTDsKKworCWlmIChwZGF0YS0+aG9zdF9ub2RlKQorCQlvZl9ub2RlX3B1dChwZGF0 YS0+aG9zdF9ub2RlKTsKKworCXBtX3J1bnRpbWVfZGlzYWJsZShwZGF0YS0+ZGV2KTsKKworCWlm IChwZGF0YS0+ZHNpKSB7CisJCW1pcGlfZHNpX2RldGFjaChwZGF0YS0+ZHNpKTsKKwkJbWlwaV9k c2lfZGV2aWNlX3VucmVnaXN0ZXIocGRhdGEtPmRzaSk7CisJfQorCisJZHJtX2JyaWRnZV9yZW1v dmUoJnBkYXRhLT5icmlkZ2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJj X2RldmljZV9pZCB0aV9zbl9icmlkZ2VfaWRbXSA9IHsKKwl7ICJ0aSxzbjY1ZHNpODYiLCAwfSwK Kwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdGlfc25fYnJpZGdlX2lkKTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGlfc25fYnJpZGdlX21hdGNoX3RhYmxl W10gPSB7CisJey5jb21wYXRpYmxlID0gInRpLHNuNjVkc2k4NiJ9LAorCXt9LAorfTsKK01PRFVM RV9ERVZJQ0VfVEFCTEUob2YsIHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZSk7CisKK3N0YXRpYyBz dHJ1Y3QgaTJjX2RyaXZlciB0aV9zbl9icmlkZ2VfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJ CS5uYW1lID0gInRpX3NuNjVkc2k4NiIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHRpX3NuX2JyaWRn ZV9tYXRjaF90YWJsZSwKKwkJLnBtID0gJnRpX3NuX2JyaWRnZV9wbV9vcHMsCisJfSwKKwkucHJv YmUgPSB0aV9zbl9icmlkZ2VfcHJvYmUsCisJLnJlbW92ZSA9IHRpX3NuX2JyaWRnZV9yZW1vdmUs CisJLmlkX3RhYmxlID0gdGlfc25fYnJpZGdlX2lkLAorfTsKK21vZHVsZV9pMmNfZHJpdmVyKHRp X3NuX2JyaWRnZV9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJTYW5kZWVwIFBhbmRhIDxzcGFu ZGFAY29kZWF1cm9yYS5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oInNuNjVkc2k4NiBEU0kg dG8gZURQIGJyaWRnZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLS0gClRo ZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29k ZSBBdXJvcmEgRm9ydW0sCmEgTGludXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyZWVkcmVu byBtYWlsaW5nIGxpc3QKRnJlZWRyZW5vQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZyZWVkcmVubwo=