From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sandeep Panda Subject: [PATCH v15] drm/bridge: add support for sn65dsi86 bridge driver Date: Fri, 20 Jul 2018 12:24:02 +0530 Message-ID: <1532069642-21392-1-git-send-email-spanda@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: 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 ZmNsayBoYW5kbGUgKFN0ZXBoZW4gQm95ZCkuCgpDaGFuZ2VzIGluIHYxMjoKIC0gRXhwbGFpbiBp biBjb21tZW50IGFzIGluIHdoeSBkc2kgZGV2IHJlZ2lzdHJhdGlvbiBpcyBkb25lIGluCiAgIGJy aWRnZV9hdHRhY2ggKEFuZHJ6ZWogSGFqZGEpLgogLSBNb3ZlIEhQRCBkaXNhYmxlIHRvIGJyaWRn ZV9wcmVfZW5hYmxlIChBbmRyemVqIEhhamRhKS4KIC0gTWFrZSBwYW5lbC9EREMgZXhjbHVzaXZl IHVudGlsIEhQRCBzdXBwb3J0IGlzIGFkZGVkIChBbmRyemVqIEhhamRhKS4KCkNoYW5nZXMgaW4g djEzOgogLSBlRFAgcGFuZWxzIHJlcG9ydCBFRElEIHZpYSBEUC1BVVggY2hhbm5lbCwgc28gcmVt b3ZlIHN1cHBvcnQgZm9yCiAgIGRlZGljYXRlZCBEREMgbGluZSAoQW5kcnplaiBIYWpkYSkuCgpD aGFuZ2VzIGluIHYxNDoKIC0gUmVtb3ZlIHVubmVjZXNzYXJ5IGRybV9wYW5lbCBjaGVja3MgKEFu ZHJ6ZWogSGFqZGEpLgoKU2lnbmVkLW9mZi1ieTogU2FuZGVlcCBQYW5kYSA8c3BhbmRhQGNvZGVh dXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyAgICAgICAgfCAg IDkgKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSAgICAgICB8ICAgMSArCiBkcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jIHwgNjY0ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNjc0IGluc2VydGlvbnMoKykKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RpLXNuNjVkc2k4Ni5jCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnIGIvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9LY29uZmlnCmluZGV4IDNiOTlkNWEuLjgxNTMxNTAgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L0tjb25maWcKQEAgLTEwOCw2ICsxMDgsMTUgQEAgY29uZmlnIERSTV9USV9URlA0MTAKIAktLS1o ZWxwLS0tCiAJICBUZXhhcyBJbnN0cnVtZW50cyBURlA0MTAgRFZJL0hETUkgVHJhbnNtaXR0ZXIg ZHJpdmVyCiAKK2NvbmZpZyBEUk1fVElfU042NURTSTg2CisJdHJpc3RhdGUgIlRJIFNONjVEU0k4 NiBEU0kgdG8gZURQIGJyaWRnZSIKKwlkZXBlbmRzIG9uIE9GCisJc2VsZWN0IERSTV9LTVNfSEVM UEVSCisJc2VsZWN0IFJFR01BUF9JMkMKKwlzZWxlY3QgRFJNX1BBTkVMCisJLS0taGVscC0tLQor CSAgVGV4YXMgSW5zdHJ1bWVudHMgU042NURTSTg2IERTSSB0byBlRFAgQnJpZGdlIGRyaXZlcgor CiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvS2NvbmZpZyIKIAogc291 cmNlICJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Fkdjc1MTEvS2NvbmZpZyIKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L01ha2VmaWxlCmluZGV4IDM3M2ViMjguLmE3Y2EwMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmls ZQpAQCAtMTEsNSArMTEsNiBAQCBvYmotJChDT05GSUdfRFJNX1NJSTkyMzQpICs9IHNpaTkyMzQu bwogb2JqLSQoQ09ORklHX0RSTV9UT1NISUJBX1RDMzU4NzY3KSArPSB0YzM1ODc2Ny5vCiBvYmot JChDT05GSUdfRFJNX0FOQUxPR0lYX0RQKSArPSBhbmFsb2dpeC8KIG9iai0kKENPTkZJR19EUk1f STJDX0FEVjc1MTEpICs9IGFkdjc1MTEvCitvYmotJChDT05GSUdfRFJNX1RJX1NONjVEU0k4Nikg Kz0gdGktc242NWRzaTg2Lm8KIG9iai0kKENPTkZJR19EUk1fVElfVEZQNDEwKSArPSB0aS10ZnA0 MTAubwogb2JqLXkgKz0gc3lub3BzeXMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJp ZGdlL3RpLXNuNjVkc2k4Ni5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDVhNjc0Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS90aS1zbjY1ZHNpODYuYwpAQCAtMCwwICsx LDY2NCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk LgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWlj Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX29mLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUgPGxp bnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxs aW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4 L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51 eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKworLyogTGluayBUcmFpbmluZyBzcGVjaWZpYyByZWdp c3RlcnMgKi8KKyNkZWZpbmUgU05fREVWSUNFX1JFVl9SRUcJCQkweDA4CisjZGVmaW5lIFNOX0hQ RF9ESVNBQkxFX1JFRwkJCTB4NUMKKyNkZWZpbmUgU05fRFBQTExfU1JDX1JFRwkJCTB4MEEKKyNk ZWZpbmUgU05fRFNJX0xBTkVTX1JFRwkJCTB4MTAKKyNkZWZpbmUgU05fRFNJQV9DTEtfRlJFUV9S RUcJCQkweDEyCisjZGVmaW5lIFNOX0VOSF9GUkFNRV9SRUcJCQkweDVBCisjZGVmaW5lIFNOX1NT Q19DT05GSUdfUkVHCQkJMHg5MworI2RlZmluZSBTTl9EQVRBUkFURV9DT05GSUdfUkVHCQkJMHg5 NAorI2RlZmluZSBTTl9QTExfRU5BQkxFX1JFRwkJCTB4MEQKKyNkZWZpbmUgU05fU0NSQU1CTEVf Q09ORklHX1JFRwkJCTB4OTUKKyNkZWZpbmUgU05fQVVYX1dEQVRBMF9SRUcJCQkweDY0CisjZGVm aW5lIFNOX0FVWF9BRERSXzE5XzE2X1JFRwkJCTB4NzQKKyNkZWZpbmUgU05fQVVYX0FERFJfMTVf OF9SRUcJCQkweDc1CisjZGVmaW5lIFNOX0FVWF9BRERSXzdfMF9SRUcJCQkweDc2CisjZGVmaW5l IFNOX0FVWF9MRU5HVEhfUkVHCQkJMHg3NworI2RlZmluZSBTTl9BVVhfQ01EX1JFRwkJCQkweDc4 CisjZGVmaW5lIFNOX01MX1RYX01PREVfUkVHCQkJMHg5NgorLyogdmlkZW8gY29uZmlnIHNwZWNp ZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBTTl9DSEFfQUNUSVZFX0xJTkVfTEVOR1RIX0xPV19S RUcJMHgyMAorI2RlZmluZSBTTl9DSEFfVkVSVElDQUxfRElTUExBWV9TSVpFX0xPV19SRUcJMHgy NAorI2RlZmluZSBTTl9DSEFfSFNZTkNfUFVMU0VfV0lEVEhfTE9XX1JFRwkweDJDCisjZGVmaW5l IFNOX0NIQV9IU1lOQ19QVUxTRV9XSURUSF9ISUdIX1JFRwkweDJECisjZGVmaW5lIFNOX0NIQV9W U1lOQ19QVUxTRV9XSURUSF9MT1dfUkVHCTB4MzAKKyNkZWZpbmUgU05fQ0hBX1ZTWU5DX1BVTFNF X1dJRFRIX0hJR0hfUkVHCTB4MzEKKyNkZWZpbmUgU05fQ0hBX0hPUklaT05UQUxfQkFDS19QT1JD SF9SRUcJMHgzNAorI2RlZmluZSBTTl9DSEFfVkVSVElDQUxfQkFDS19QT1JDSF9SRUcJCTB4MzYK KyNkZWZpbmUgU05fQ0hBX0hPUklaT05UQUxfRlJPTlRfUE9SQ0hfUkVHCTB4MzgKKyNkZWZpbmUg U05fQ0hBX1ZFUlRJQ0FMX0ZST05UX1BPUkNIX1JFRwkJMHgzQQorI2RlZmluZSBTTl9EQVRBX0ZP Uk1BVF9SRUcJCQkweDVCCisKKyNkZWZpbmUgTUlOX0RTSV9DTEtfRlJFUV9NSFoJNDAKKworLyog ZnVkZ2UgZmFjdG9yIHJlcXVpcmVkIHRvIGFjY291bnQgZm9yIDhiLzEwYiBlbmNvZGluZyAqLwor I2RlZmluZSBEUF9DTEtfRlVER0VfTlVNCTEwCisjZGVmaW5lIERQX0NMS19GVURHRV9ERU4JOAor CisjZGVmaW5lIERQUExMX0NMS19TUkNfUkVGQ0xLCTAKKyNkZWZpbmUgRFBQTExfQ0xLX1NSQ19E U0lDTEsJMQorCisjZGVmaW5lIFNOX1JFRkNMS19GUkVRX09GRlNFVAkxCisjZGVmaW5lIFNOX0RT SUFfTEFORV9PRkZTRVQJMworI2RlZmluZSBTTl9EUF9MQU5FX09GRlNFVAk0CisjZGVmaW5lIFNO X0RQX0RBVEFfUkFURV9PRkZTRVQJNQorI2RlZmluZSBTTl9TWU5DX1BPTEFSSVRZX09GRlNFVAk3 CisKKyNkZWZpbmUgU05fRU5BQkxFX1ZJRF9TVFJFQU1fQklUCUJJVCgzKQorI2RlZmluZSBTTl9S RUZDTEtfRlJFUV9CSVRTCQlHRU5NQVNLKDMsIDEpCisjZGVmaW5lIFNOX0RTSUFfTlVNX0xBTkVT X0JJVFMJCUdFTk1BU0soNCwgMykKKyNkZWZpbmUgU05fRFBfTlVNX0xBTkVTX0JJVFMJCUdFTk1B U0soNSwgNCkKKyNkZWZpbmUgU05fRFBfREFUQV9SQVRFX0JJVFMJCUdFTk1BU0soNywgNSkKKyNk ZWZpbmUgU05fSFBEX0RJU0FCTEVfQklUCQlCSVQoMCkKKworI2RlZmluZSBTTl9SRUdVTEFUT1Jf U1VQUExZX05VTQkJNAorCitzdHJ1Y3QgdGlfc25fYnJpZGdlIHsKKwlzdHJ1Y3QgZGV2aWNlCQkJ KmRldjsKKwlzdHJ1Y3QgcmVnbWFwCQkJKnJlZ21hcDsKKwlzdHJ1Y3QgZHJtX2JyaWRnZQkJYnJp ZGdlOworCXN0cnVjdCBkcm1fY29ubmVjdG9yCQljb25uZWN0b3I7CisJc3RydWN0IGRldmljZV9u b2RlCQkqaG9zdF9ub2RlOworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UJCSpkc2k7CisJc3RydWN0 IGNsawkJCSpyZWZjbGs7CisJc3RydWN0IGRybV9wYW5lbAkJKnBhbmVsOworCXN0cnVjdCBncGlv X2Rlc2MJCSplbmFibGVfZ3BpbzsKKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YQlzdXBwbGll c1tTTl9SRUdVTEFUT1JfU1VQUExZX05VTV07Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJl Z21hcF9yYW5nZSB0aV9zbl9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzW10gPSB7CisJeyAucmFuZ2Vf bWluID0gMCwgLnJhbmdlX21heCA9IDB4RkYgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg cmVnbWFwX2FjY2Vzc190YWJsZSB0aV9zbl9icmlkZ2Vfdm9sYXRpbGVfdGFibGUgPSB7CisJLnll c19yYW5nZXMgPSB0aV9zbl9icmlkZ2Vfdm9sYXRpbGVfcmFuZ2VzLAorCS5uX3llc19yYW5nZXMg PSBBUlJBWV9TSVpFKHRpX3NuX2JyaWRnZV92b2xhdGlsZV9yYW5nZXMpLAorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHRpX3NuX2JyaWRnZV9yZWdtYXBfY29uZmlnID0g eworCS5yZWdfYml0cyA9IDgsCisJLnZhbF9iaXRzID0gOCwKKwkudm9sYXRpbGVfdGFibGUgPSAm dGlfc25fYnJpZGdlX3ZvbGF0aWxlX3RhYmxlLAorCS5jYWNoZV90eXBlID0gUkVHQ0FDSEVfTk9O RSwKK307CisKK3N0YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV93cml0ZV91MTYoc3RydWN0IHRpX3Nu X2JyaWRnZSAqcGRhdGEsCisJCQkJICAgdW5zaWduZWQgaW50IHJlZywgdTE2IHZhbCkKK3sKKwly ZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgcmVnLCB2YWwgJiAweEZGKTsKKwlyZWdtYXBfd3Jp dGUocGRhdGEtPnJlZ21hcCwgcmVnICsgMSwgdmFsID4+IDgpOworfQorCitzdGF0aWMgaW50IF9f bWF5YmVfdW51c2VkIHRpX3NuX2JyaWRnZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorewor CXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50 IHJldDsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShTTl9SRUdVTEFUT1JfU1VQUExZ X05VTSwgcGRhdGEtPnN1cHBsaWVzKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVk IHRvIGVuYWJsZSBzdXBwbGllcyAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwln cGlvZF9zZXRfdmFsdWUocGRhdGEtPmVuYWJsZV9ncGlvLCAxKTsKKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgdGlfc25fYnJpZGdlX3N1c3BlbmQoc3RydWN0 IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gZGV2X2dldF9k cnZkYXRhKGRldik7CisJaW50IHJldDsKKworCWdwaW9kX3NldF92YWx1ZShwZGF0YS0+ZW5hYmxl X2dwaW8sIDApOworCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZGlzYWJsZShTTl9SRUdVTEFUT1Jf U1VQUExZX05VTSwgcGRhdGEtPnN1cHBsaWVzKTsKKwlpZiAocmV0KQorCQlEUk1fRVJST1IoImZh aWxlZCB0byBkaXNhYmxlIHN1cHBsaWVzICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHRpX3NuX2JyaWRnZV9wbV9vcHMgPSB7 CisJU0VUX1JVTlRJTUVfUE1fT1BTKHRpX3NuX2JyaWRnZV9zdXNwZW5kLCB0aV9zbl9icmlkZ2Vf cmVzdW1lLCBOVUxMKQorfTsKKworLyogQ29ubmVjdG9yIGZ1bmNzICovCitzdGF0aWMgc3RydWN0 IHRpX3NuX2JyaWRnZSAqCitjb25uZWN0b3JfdG9fdGlfc25fYnJpZGdlKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjb25uZWN0b3IsIHN0 cnVjdCB0aV9zbl9icmlkZ2UsIGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBpbnQgdGlfc25fYnJp ZGdlX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikK K3sKKwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGNvbm5lY3Rvcl90b190aV9zbl9icmlk Z2UoY29ubmVjdG9yKTsKKworCXJldHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKHBkYXRhLT5wYW5l bCk7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cwordGlfc25fYnJpZGdlX2Nvbm5l Y3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkgICAg IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCS8qIG1heGltdW0gc3VwcG9ydGVk IHJlc29sdXRpb24gaXMgNEsgYXQgNjAgZnBzICovCisJaWYgKG1vZGUtPmNsb2NrID4gNTk0MDAw KQorCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOworCisJcmV0dXJuIE1PREVfT0s7Cit9CisKK3N0 YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgdGlfc25fYnJpZGdlX2Nvbm5l Y3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IHRpX3NuX2JyaWRnZV9jb25uZWN0 b3JfZ2V0X21vZGVzLAorCS5tb2RlX3ZhbGlkID0gdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9tb2Rl X3ZhbGlkLAorfTsKKworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK3RpX3NuX2Jy aWRnZV9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJv b2wgZm9yY2UpCit7CisJLyoqCisJICogVE9ETzogQ3VycmVudGx5IGlmIGRybV9wYW5lbCBpcyBw cmVzZW50LCB0aGVuIGFsd2F5cworCSAqIHJldHVybiB0aGUgc3RhdHVzIGFzIGNvbm5lY3RlZC4g TmVlZCB0byBhZGQgc3VwcG9ydCB0byBkZXRlY3QKKwkgKiBkZXZpY2Ugc3RhdGUgZm9yIGhvdCBw bHVnZ2FibGUgc2NlbmFyaW9zLgorCSAqLworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5l Y3RlZDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHRpX3Nu X2JyaWRnZV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3By b2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRldGVjdCA9IHRpX3NuX2JyaWRnZV9jb25u ZWN0b3JfZGV0ZWN0LAorCS5kZXN0cm95ID0gZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwLAorCS5yZXNl dCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0 ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJ LmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ry b3lfc3RhdGUsCit9OworCitzdGF0aWMgc3RydWN0IHRpX3NuX2JyaWRnZSAqYnJpZGdlX3RvX3Rp X3NuX2JyaWRnZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXJldHVybiBjb250YWlu ZXJfb2YoYnJpZGdlLCBzdHJ1Y3QgdGlfc25fYnJpZGdlLCBicmlkZ2UpOworfQorCitzdGF0aWMg aW50IHRpX3NuX2JyaWRnZV9wYXJzZV9yZWd1bGF0b3JzKHN0cnVjdCB0aV9zbl9icmlkZ2UgKnBk YXRhKQoreworCXVuc2lnbmVkIGludCBpOworCWNvbnN0IGNoYXIgKiBjb25zdCB0aV9zbl9icmlk Z2Vfc3VwcGx5X25hbWVzW10gPSB7CisJCSJ2Y2NhIiwgInZjYyIsICJ2Y2NpbyIsICJ2cGxsIiwK Kwl9OworCisJZm9yIChpID0gMDsgaSA8IFNOX1JFR1VMQVRPUl9TVVBQTFlfTlVNOyBpKyspCisJ CXBkYXRhLT5zdXBwbGllc1tpXS5zdXBwbHkgPSB0aV9zbl9icmlkZ2Vfc3VwcGx5X25hbWVzW2ld OworCisJcmV0dXJuIGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0KHBkYXRhLT5kZXYsIFNOX1JFR1VM QVRPUl9TVVBQTFlfTlVNLAorCQkJCSAgICAgICBwZGF0YS0+c3VwcGxpZXMpOworfQorCitzdGF0 aWMgaW50IHRpX3NuX2JyaWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sK KwlpbnQgcmV0LCB2YWw7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBicmlkZ2VfdG9f dGlfc25fYnJpZGdlKGJyaWRnZSk7CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3Q7CisJc3Ry dWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOworCWNvbnN0IHN0cnVjdCBtaXBpX2RzaV9kZXZpY2Vf aW5mbyBpbmZvID0geyAudHlwZSA9ICJ0aV9zbl9icmlkZ2UiLAorCQkJCQkJICAgLmNoYW5uZWwg PSAwLAorCQkJCQkJICAgLm5vZGUgPSBOVUxMLAorCQkJCQkJIH07CisKKwlyZXQgPSBkcm1fY29u bmVjdG9yX2luaXQoYnJpZGdlLT5kZXYsICZwZGF0YS0+Y29ubmVjdG9yLAorCQkJCSAmdGlfc25f YnJpZGdlX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCQkgRFJNX01PREVfQ09OTkVDVE9SX2VEUCk7CisJ aWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbm5lY3RvciB3 aXRoIGRybVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJf YWRkKCZwZGF0YS0+Y29ubmVjdG9yLAorCQkJCSAmdGlfc25fYnJpZGdlX2Nvbm5lY3Rvcl9oZWxw ZXJfZnVuY3MpOworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcigmcGRhdGEtPmNv bm5lY3RvciwgYnJpZGdlLT5lbmNvZGVyKTsKKworCS8qCisJICogVE9ETzogaWRlYWxseSBmaW5k aW5nIGhvc3QgcmVzb3VyY2UgYW5kIGRzaSBkZXYgcmVnaXN0cmF0aW9uIG5lZWRzCisJICogdG8g YmUgZG9uZSBpbiBicmlkZ2UgcHJvYmUuIEJ1dCBzb21lIGV4aXN0aW5nIERTSSBob3N0IGRyaXZl cnMgd2lsbAorCSAqIHdhaXQgZm9yIGFueSBvZiB0aGUgZHJtX2JyaWRnZS9kcm1fcGFuZWwgdG8g Z2V0IGFkZGVkIHRvIHRoZSBnbG9iYWwKKwkgKiBicmlkZ2UvcGFuZWwgbGlzdCwgYmVmb3JlIGNv bXBsZXRpbmcgdGhlaXIgcHJvYmUuIFNvIGlmIHdlIGRvIHRoZQorCSAqIGRzaSBkZXYgcmVnaXN0 cmF0aW9uIHBhcnQgaW4gYnJpZGdlIHByb2JlLCBiZWZvcmUgcG9wdWxhdGluZyBpbgorCSAqIHRo ZSBnbG9iYWwgYnJpZGdlIGxpc3QsIHRoZW4gaXQgd2lsbCBjYXVzZSBkZWFkbG9jayBhcyBkc2kg aG9zdCBwcm9iZQorCSAqIHdpbGwgbmV2ZXIgY29tcGxldGUsIG5laXRoZXIgb3VyIGJyaWRnZSBw cm9iZS4gU28ga2VlcGluZyBpdCBoZXJlCisJICogd2lsbCBzYXRpc2Z5IG1vc3Qgb2YgdGhlIGV4 aXN0aW5nIGhvc3QgZHJpdmVycy4gT25jZSB0aGUgaG9zdCBkcml2ZXIKKwkgKiBpcyBmaXhlZCB3 ZSBjYW4gbW92ZSB0aGUgYmVsb3cgY29kZSB0byBicmlkZ2UgcHJvYmUgc2FmZWx5LgorCSAqLwor CWhvc3QgPSBvZl9maW5kX21pcGlfZHNpX2hvc3RfYnlfbm9kZShwZGF0YS0+aG9zdF9ub2RlKTsK KwlpZiAoIWhvc3QpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZmluZCBkc2kgaG9zdFxuIik7 CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2RzaV9ob3N0OworCX0KKworCWRzaSA9IG1p cGlfZHNpX2RldmljZV9yZWdpc3Rlcl9mdWxsKGhvc3QsICZpbmZvKTsKKwlpZiAoSVNfRVJSKGRz aSkpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGRzaSBkZXZpY2VcbiIpOworCQly ZXQgPSBQVFJfRVJSKGRzaSk7CisJCWdvdG8gZXJyX2RzaV9ob3N0OworCX0KKworCS8qIFRPRE86 IHNldHRpbmcgdG8gNCBsYW5lcyBhbHdheXMgZm9yIG5vdyAqLworCWRzaS0+bGFuZXMgPSA0Owor CWRzaS0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBN SVBJX0RTSV9NT0RFX1ZJREVPIHwgTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFIHwKKwkJ CSAgTUlQSV9EU0lfTU9ERV9FT1RfUEFDS0VUIHwgTUlQSV9EU0lfTU9ERV9WSURFT19IU0U7CisK KwkvKiBjaGVjayBpZiBjb250aW51b3VzIGRzaSBjbG9jayBpcyByZXF1aXJlZCBvciBub3QgKi8K KwlwbV9ydW50aW1lX2dldF9zeW5jKHBkYXRhLT5kZXYpOworCXJlZ21hcF9yZWFkKHBkYXRhLT5y ZWdtYXAsIFNOX0RQUExMX1NSQ19SRUcsICZ2YWwpOworCXBtX3J1bnRpbWVfcHV0KHBkYXRhLT5k ZXYpOworCWlmICghKHZhbCAmIERQUExMX0NMS19TUkNfRFNJQ0xLKSkKKwkJZHNpLT5tb2RlX2Zs YWdzIHw9IE1JUElfRFNJX0NMT0NLX05PTl9DT05USU5VT1VTOworCisJcmV0ID0gbWlwaV9kc2lf YXR0YWNoKGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYXR0 YWNoIGRzaSB0byBob3N0XG4iKTsKKwkJZ290byBlcnJfZHNpX2F0dGFjaDsKKwl9CisJcGRhdGEt PmRzaSA9IGRzaTsKKworCS8qIGF0dGFjaCBwYW5lbCB0byBicmlkZ2UgKi8KKwlkcm1fcGFuZWxf YXR0YWNoKHBkYXRhLT5wYW5lbCwgJnBkYXRhLT5jb25uZWN0b3IpOworCisJcmV0dXJuIDA7CisK K2Vycl9kc2lfYXR0YWNoOgorCW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKGRzaSk7CitlcnJf ZHNpX2hvc3Q6CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKCZwZGF0YS0+Y29ubmVjdG9yKTsKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfZGlzYWJsZShzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJp ZGdlX3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOworCisJZHJtX3BhbmVsX2Rpc2FibGUocGRhdGEt PnBhbmVsKTsKKworCS8qIGRpc2FibGUgdmlkZW8gc3RyZWFtICovCisJcmVnbWFwX3VwZGF0ZV9i aXRzKHBkYXRhLT5yZWdtYXAsIFNOX0VOSF9GUkFNRV9SRUcsCisJCQkgICBTTl9FTkFCTEVfVklE X1NUUkVBTV9CSVQsIDApOworCS8qIHNlbWkgYXV0byBsaW5rIHRyYWluaW5nIG1vZGUgT0ZGICov CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX01MX1RYX01PREVfUkVHLCAwKTsKKwkv KiBkaXNhYmxlIERQIFBMTCAqLworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9QTExf RU5BQkxFX1JFRywgMCk7CisKKwlkcm1fcGFuZWxfdW5wcmVwYXJlKHBkYXRhLT5wYW5lbCk7Cit9 CisKK3N0YXRpYyB1MzIgdGlfc25fYnJpZGdlX2dldF9kc2lfZnJlcShzdHJ1Y3QgdGlfc25fYnJp ZGdlICpwZGF0YSkKK3sKKwl1MzIgYml0X3JhdGVfa2h6LCBjbGtfZnJlcV9raHo7CisJc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPQorCQkmcGRhdGEtPmJyaWRnZS5lbmNvZGVyLT5jcnRj LT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKKworCWJpdF9yYXRlX2toeiA9IG1vZGUtPmNsb2NrICoK KwkJCW1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAocGRhdGEtPmRzaS0+Zm9ybWF0KTsKKwlj bGtfZnJlcV9raHogPSBiaXRfcmF0ZV9raHogLyAocGRhdGEtPmRzaS0+bGFuZXMgKiAyKTsKKwor CXJldHVybiBjbGtfZnJlcV9raHo7Cit9CisKKy8qIGNsayBmcmVxdWVuY2llcyBzdXBwb3J0ZWQg YnkgYnJpZGdlIGluIEh6IGluIGNhc2UgZGVyaXZlZCBmcm9tIFJFRkNMSyBwaW4gKi8KK3N0YXRp YyBjb25zdCB1MzIgdGlfc25fYnJpZGdlX3JlZmNsa19sdXRbXSA9IHsKKwkxMjAwMDAwMCwKKwkx OTIwMDAwMCwKKwkyNjAwMDAwMCwKKwkyNzAwMDAwMCwKKwkzODQwMDAwMCwKK307CisKKy8qIGNs ayBmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgYnJpZGdlIGluIEh6IGluIGNhc2UgZGVyaXZlZCBm cm9tIERBQ1AvTiBwaW4gKi8KK3N0YXRpYyBjb25zdCB1MzIgdGlfc25fYnJpZGdlX2RzaWNsa19s dXRbXSA9IHsKKwk0NjgwMDAwMDAsCisJMzg0MDAwMDAwLAorCTQxNjAwMDAwMCwKKwk0ODYwMDAw MDAsCisJNDYwODAwMDAwLAorfTsKKworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3NldF9yZWZj bGtfZnJlcShzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSkKK3sKKwlpbnQgaTsKKwl1MzIgcmVm Y2xrX3JhdGU7CisJY29uc3QgdTMyICpyZWZjbGtfbHV0OworCXNpemVfdCByZWZjbGtfbHV0X3Np emU7CisKKwlpZiAocGRhdGEtPnJlZmNsaykgeworCQlyZWZjbGtfcmF0ZSA9IGNsa19nZXRfcmF0 ZShwZGF0YS0+cmVmY2xrKTsKKwkJcmVmY2xrX2x1dCA9IHRpX3NuX2JyaWRnZV9yZWZjbGtfbHV0 OworCQlyZWZjbGtfbHV0X3NpemUgPSBBUlJBWV9TSVpFKHRpX3NuX2JyaWRnZV9yZWZjbGtfbHV0 KTsKKwkJY2xrX3ByZXBhcmVfZW5hYmxlKHBkYXRhLT5yZWZjbGspOworCX0gZWxzZSB7CisJCXJl ZmNsa19yYXRlID0gdGlfc25fYnJpZGdlX2dldF9kc2lfZnJlcShwZGF0YSkgKiAxMDAwOworCQly ZWZjbGtfbHV0ID0gdGlfc25fYnJpZGdlX2RzaWNsa19sdXQ7CisJCXJlZmNsa19sdXRfc2l6ZSA9 IEFSUkFZX1NJWkUodGlfc25fYnJpZGdlX2RzaWNsa19sdXQpOworCX0KKworCS8qIGZvciBpIGVx dWFscyB0byByZWZjbGtfbHV0X3NpemUgbWVhbnMgZGVmYXVsdCBmcmVxdWVuY3kgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgcmVmY2xrX2x1dF9zaXplOyBpKyspCisJCWlmIChyZWZjbGtfbHV0W2ldID09 IHJlZmNsa19yYXRlKQorCQkJYnJlYWs7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJl Z21hcCwgU05fRFBQTExfU1JDX1JFRywKKwkJCSAgIFNOX1JFRkNMS19GUkVRX0JJVFMsIGkgPDwg U05fUkVGQ0xLX0ZSRVFfT0ZGU0VUKTsKK30KKworLyoqCisgKiBMVVQgaW5kZXggY29ycmVzcG9u ZHMgdG8gcmVnaXN0ZXIgdmFsdWUgYW5kCisgKiBMVVQgdmFsdWVzIGNvcnJlc3BvbmRzIHRvIGRw IGRhdGEgcmF0ZSBzdXBwb3J0ZWQKKyAqIGJ5IHRoZSBicmlkZ2UgaW4gTWJwcyB1bml0LgorICov CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHRpX3NuX2JyaWRnZV9kcF9yYXRlX2x1dFtdID0g eworCTAsIDE2MjAsIDIxNjAsIDI0MzAsIDI3MDAsIDMyNDAsIDQzMjAsIDU0MDAKK307CisKK3N0 YXRpYyB2b2lkIHRpX3NuX2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUoc3RydWN0IHRpX3NuX2JyaWRn ZSAqcGRhdGEpCit7CisJdW5zaWduZWQgaW50IGJpdF9yYXRlX21oeiwgY2xrX2ZyZXFfbWh6LCBk cF9yYXRlX21oejsKKwl1bnNpZ25lZCBpbnQgdmFsLCBpOworCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlID0KKwkJJnBkYXRhLT5icmlkZ2UuZW5jb2Rlci0+Y3J0Yy0+c3RhdGUtPmFkanVz dGVkX21vZGU7CisKKwkvKiBzZXQgRFNJQSBjbGsgZnJlcXVlbmN5ICovCisJYml0X3JhdGVfbWh6 ID0gKG1vZGUtPmNsb2NrIC8gMTAwMCkgKgorCQkJbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2Jw cChwZGF0YS0+ZHNpLT5mb3JtYXQpOworCWNsa19mcmVxX21oeiA9IGJpdF9yYXRlX21oeiAvIChw ZGF0YS0+ZHNpLT5sYW5lcyAqIDIpOworCisJLyogZm9yIGVhY2ggaW5jcmVtZW50IGluIHZhbCwg ZnJlcXVlbmN5IGluY3JlYXNlcyBieSA1TUh6ICovCisJdmFsID0gKE1JTl9EU0lfQ0xLX0ZSRVFf TUhaIC8gNSkgKworCQkoKChjbGtfZnJlcV9taHogLSBNSU5fRFNJX0NMS19GUkVRX01IWikgLyA1 KSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9EU0lBX0NMS19GUkVR X1JFRywgdmFsKTsKKworCS8qIHNldCBEUCBkYXRhIHJhdGUgKi8KKwlkcF9yYXRlX21oeiA9ICgo Yml0X3JhdGVfbWh6IC8gcGRhdGEtPmRzaS0+bGFuZXMpICogRFBfQ0xLX0ZVREdFX05VTSkgLwor CQkJCQkJCURQX0NMS19GVURHRV9ERU47CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGlf c25fYnJpZGdlX2RwX3JhdGVfbHV0KSAtIDE7IGkrKykKKwkJaWYgKHRpX3NuX2JyaWRnZV9kcF9y YXRlX2x1dFtpXSA+IGRwX3JhdGVfbWh6KQorCQkJYnJlYWs7CisKKwlyZWdtYXBfdXBkYXRlX2Jp dHMocGRhdGEtPnJlZ21hcCwgU05fREFUQVJBVEVfQ09ORklHX1JFRywKKwkJCSAgIFNOX0RQX0RB VEFfUkFURV9CSVRTLCBpIDw8IFNOX0RQX0RBVEFfUkFURV9PRkZTRVQpOworfQorCitzdGF0aWMg dm9pZCB0aV9zbl9icmlkZ2Vfc2V0X3ZpZGVvX3RpbWluZ3Moc3RydWN0IHRpX3NuX2JyaWRnZSAq cGRhdGEpCit7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPQorCQkmcGRhdGEtPmJy aWRnZS5lbmNvZGVyLT5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKKwl1OCBoc3luY19wb2xh cml0eSA9IDAsIHZzeW5jX3BvbGFyaXR5ID0gMDsKKworCWlmIChtb2RlLT5mbGFncyAmIERSTV9N T0RFX0ZMQUdfUEhTWU5DKQorCQloc3luY19wb2xhcml0eSA9IEJJVChTTl9TWU5DX1BPTEFSSVRZ X09GRlNFVCk7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19QVlNZTkMpCisJCXZz eW5jX3BvbGFyaXR5ID0gQklUKFNOX1NZTkNfUE9MQVJJVFlfT0ZGU0VUKTsKKworCXRpX3NuX2Jy aWRnZV93cml0ZV91MTYocGRhdGEsIFNOX0NIQV9BQ1RJVkVfTElORV9MRU5HVEhfTE9XX1JFRywK KwkJCSAgICAgICBtb2RlLT5oZGlzcGxheSk7CisJdGlfc25fYnJpZGdlX3dyaXRlX3UxNihwZGF0 YSwgU05fQ0hBX1ZFUlRJQ0FMX0RJU1BMQVlfU0laRV9MT1dfUkVHLAorCQkJICAgICAgIG1vZGUt PnZkaXNwbGF5KTsKKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hTWU5DX1BV TFNFX1dJRFRIX0xPV19SRUcsCisJCSAgICAgKG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5j X3N0YXJ0KSAmIDB4RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfSFNZ TkNfUFVMU0VfV0lEVEhfSElHSF9SRUcsCisJCSAgICAgKCgobW9kZS0+aHN5bmNfZW5kIC0gbW9k ZS0+aHN5bmNfc3RhcnQpID4+IDgpICYgMHg3RikgfAorCQkgICAgIGhzeW5jX3BvbGFyaXR5KTsK KwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZTWU5DX1BVTFNFX1dJRFRIX0xP V19SRUcsCisJCSAgICAgKG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5jX3N0YXJ0KSAmIDB4 RkYpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVlNZTkNfUFVMU0VfV0lE VEhfSElHSF9SRUcsCisJCSAgICAoKChtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFy dCkgPj4gOCkgJiAweDdGKSB8CisJCSAgICB2c3luY19wb2xhcml0eSk7CisKKwlyZWdtYXBfd3Jp dGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hPUklaT05UQUxfQkFDS19QT1JDSF9SRUcsCisJCSAg ICAgKG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZCkgJiAweEZGKTsKKwlyZWdtYXBfd3Jp dGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX1ZFUlRJQ0FMX0JBQ0tfUE9SQ0hfUkVHLAorCQkgICAg IChtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQpICYgMHhGRik7CisKKwlyZWdtYXBfd3Jp dGUocGRhdGEtPnJlZ21hcCwgU05fQ0hBX0hPUklaT05UQUxfRlJPTlRfUE9SQ0hfUkVHLAorCQkg ICAgIChtb2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5KSAmIDB4RkYpOworCXJlZ21h cF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9DSEFfVkVSVElDQUxfRlJPTlRfUE9SQ0hfUkVHLAor CQkgICAgIChtb2RlLT52c3luY19zdGFydCAtIG1vZGUtPnZkaXNwbGF5KSAmIDB4RkYpOworCisJ dXNsZWVwX3JhbmdlKDEwMDAwLCAxMDUwMCk7IC8qIDEwbXMgZGVsYXkgcmVjb21tZW5kZWQgYnkg c3BlYyAqLworfQorCitzdGF0aWMgdm9pZCB0aV9zbl9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEgPSBicmlkZ2Vf dG9fdGlfc25fYnJpZGdlKGJyaWRnZSk7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWRybV9wYW5l bF9wcmVwYXJlKHBkYXRhLT5wYW5lbCk7CisKKwkvKiBEU0lfQSBsYW5lIGNvbmZpZyAqLworCXZh bCA9ICg0IC0gcGRhdGEtPmRzaS0+bGFuZXMpIDw8IFNOX0RTSUFfTEFORV9PRkZTRVQ7CisJcmVn bWFwX3VwZGF0ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0RTSV9MQU5FU19SRUcsCisJCQkgICBT Tl9EU0lBX05VTV9MQU5FU19CSVRTLCB2YWwpOworCisJLyogRFAgbGFuZSBjb25maWcgKi8KKwl2 YWwgPSAocGRhdGEtPmRzaS0+bGFuZXMgLSAxKSA8PCBTTl9EUF9MQU5FX09GRlNFVDsKKwlyZWdt YXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fU1NDX0NPTkZJR19SRUcsCisJCQkgICBT Tl9EUF9OVU1fTEFORVNfQklUUywgdmFsKTsKKworCS8qIHNldCBkc2kvZHAgY2xrIGZyZXF1ZW5j eSB2YWx1ZSAqLworCXRpX3NuX2JyaWRnZV9zZXRfZHNpX2RwX3JhdGUocGRhdGEpOworCisJLyog ZW5hYmxlIERQIFBMTCAqLworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFwLCBTTl9QTExfRU5B QkxFX1JFRywgMSk7CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMDUwMCk7IC8qIDEwbXMgZGVsYXkg cmVjb21tZW5kZWQgYnkgc3BlYyAqLworCisJLyoqCisJICogVGhlIFNONjVEU0k4NiBvbmx5IHN1 cHBvcnRzIEFTU1IgRGlzcGxheSBBdXRoZW50aWNhdGlvbiBtZXRob2QgYW5kCisJICogdGhpcyBt ZXRob2QgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBBbiBlRFAgcGFuZWwgbXVzdCBzdXBwb3J0IHRo aXMKKwkgKiBhdXRoZW50aWNhdGlvbiBtZXRob2QuIFdlIG5lZWQgdG8gZW5hYmxlIHRoaXMgbWV0 aG9kIGluIHRoZSBlRFAgcGFuZWwKKwkgKiBhdCBEaXNwbGF5UG9ydCBhZGRyZXNzIDB4MDAxMEEg cHJpb3IgdG8gbGluayB0cmFpbmluZy4KKwkgKi8KKwlyZWdtYXBfd3JpdGUocGRhdGEtPnJlZ21h cCwgU05fQVVYX1dEQVRBMF9SRUcsIDB4MDEpOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVnbWFw LCBTTl9BVVhfQUREUl8xOV8xNl9SRUcsIDB4MDApOworCXJlZ21hcF93cml0ZShwZGF0YS0+cmVn bWFwLCBTTl9BVVhfQUREUl8xNV84X1JFRywgMHgwMSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5y ZWdtYXAsIFNOX0FVWF9BRERSXzdfMF9SRUcsIDB4MEEpOworCXJlZ21hcF93cml0ZShwZGF0YS0+ cmVnbWFwLCBTTl9BVVhfTEVOR1RIX1JFRywgMHgwMSk7CisJcmVnbWFwX3dyaXRlKHBkYXRhLT5y ZWdtYXAsIFNOX0FVWF9DTURfUkVHLCAweDgxKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDEwNTAw KTsgLyogMTBtcyBkZWxheSByZWNvbW1lbmRlZCBieSBzcGVjICovCisKKwkvKiBTZW1pIGF1dG8g bGluayB0cmFpbmluZyBtb2RlICovCisJcmVnbWFwX3dyaXRlKHBkYXRhLT5yZWdtYXAsIFNOX01M X1RYX01PREVfUkVHLCAweDBBKTsKKwltc2xlZXAoMjApOyAvKiAyMG1zIGRlbGF5IHJlY29tbWVu ZGVkIGJ5IHNwZWMgKi8KKworCS8qIGNvbmZpZyB2aWRlbyBwYXJhbWV0ZXJzICovCisJdGlfc25f YnJpZGdlX3NldF92aWRlb190aW1pbmdzKHBkYXRhKTsKKworCS8qIGVuYWJsZSB2aWRlbyBzdHJl YW0gKi8KKwlyZWdtYXBfdXBkYXRlX2JpdHMocGRhdGEtPnJlZ21hcCwgU05fRU5IX0ZSQU1FX1JF RywKKwkJCSAgIFNOX0VOQUJMRV9WSURfU1RSRUFNX0JJVCwgU05fRU5BQkxFX1ZJRF9TVFJFQU1f QklUKTsKKworCWRybV9wYW5lbF9lbmFibGUocGRhdGEtPnBhbmVsKTsKK30KKworc3RhdGljIHZv aWQgdGlfc25fYnJpZGdlX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sK KwlzdHJ1Y3QgdGlfc25fYnJpZGdlICpwZGF0YSA9IGJyaWRnZV90b190aV9zbl9icmlkZ2UoYnJp ZGdlKTsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMocGRhdGEtPmRldik7CisKKwkvKiBjb25maWd1 cmUgYnJpZGdlIHJlZl9jbGsgKi8KKwl0aV9zbl9icmlkZ2Vfc2V0X3JlZmNsa19mcmVxKHBkYXRh KTsKKworCS8qIGluIGNhc2UgZHJtX3BhbmVsIGlzIGNvbm5lY3RlZCB0aGVuIEhQRCBpcyBub3Qg c3VwcG9ydGVkICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHBkYXRhLT5yZWdtYXAsIFNOX0hQRF9E SVNBQkxFX1JFRywKKwkJCSAgIFNOX0hQRF9ESVNBQkxFX0JJVCwgU05fSFBEX0RJU0FCTEVfQklU KTsKK30KKworc3RhdGljIHZvaWQgdGlfc25fYnJpZGdlX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCB0aV9zbl9icmlkZ2UgKnBkYXRhID0gYnJpZGdl X3RvX3RpX3NuX2JyaWRnZShicmlkZ2UpOworCisJaWYgKHBkYXRhLT5yZWZjbGspCisJCWNsa19k aXNhYmxlX3VucHJlcGFyZShwZGF0YS0+cmVmY2xrKTsKKworCXBtX3J1bnRpbWVfcHV0X3N5bmMo cGRhdGEtPmRldik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyB0 aV9zbl9icmlkZ2VfZnVuY3MgPSB7CisJLmF0dGFjaCA9IHRpX3NuX2JyaWRnZV9hdHRhY2gsCisJ LnByZV9lbmFibGUgPSB0aV9zbl9icmlkZ2VfcHJlX2VuYWJsZSwKKwkuZW5hYmxlID0gdGlfc25f YnJpZGdlX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHRpX3NuX2JyaWRnZV9kaXNhYmxlLAorCS5wb3N0 X2Rpc2FibGUgPSB0aV9zbl9icmlkZ2VfcG9zdF9kaXNhYmxlLAorfTsKKworc3RhdGljIGludCB0 aV9zbl9icmlkZ2VfcGFyc2VfZHNpX2hvc3Qoc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRhdGEpCit7 CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkYXRhLT5kZXYtPm9mX25vZGU7CisKKwlwZGF0 YS0+aG9zdF9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9ub2RlKG5wLCAwLCAwKTsKKworCWlm ICghcGRhdGEtPmhvc3Rfbm9kZSkgeworCQlEUk1fRVJST1IoInJlbW90ZSBkc2kgaG9zdCBub2Rl IG5vdCBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IHRpX3NuX2JyaWRnZV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50 LAorCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHRpX3NuX2Jy aWRnZSAqcGRhdGE7CisJaW50IHJldDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHko Y2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7CisJCURSTV9FUlJPUigiZGV2aWNlIGRv ZXNuJ3Qgc3VwcG9ydCBJMkNcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwZGF0YSA9 IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZihzdHJ1Y3QgdGlfc25fYnJpZGdlKSwK KwkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisK KwlwZGF0YS0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LAorCQkJCQkgICAg ICZ0aV9zbl9icmlkZ2VfcmVnbWFwX2NvbmZpZyk7CisJaWYgKElTX0VSUihwZGF0YS0+cmVnbWFw KSkgeworCQlEUk1fRVJST1IoInJlZ21hcCBpMmMgaW5pdCBmYWlsZWRcbiIpOworCQlyZXR1cm4g UFRSX0VSUihwZGF0YS0+cmVnbWFwKTsKKwl9CisKKwlwZGF0YS0+ZGV2ID0gJmNsaWVudC0+ZGV2 OworCisJcmV0ID0gZHJtX29mX2ZpbmRfcGFuZWxfb3JfYnJpZGdlKHBkYXRhLT5kZXYtPm9mX25v ZGUsIDEsIDAsCisJCQkJCSAgJnBkYXRhLT5wYW5lbCwgTlVMTCk7CisJaWYgKHJldCkgeworCQlE Uk1fRVJST1IoImNvdWxkIG5vdCBmaW5kIGFueSBwYW5lbCBub2RlXG4iKTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlkZXZfc2V0X2RydmRhdGEoJmNsaWVudC0+ZGV2LCBwZGF0YSk7CisKKwlwZGF0 YS0+ZW5hYmxlX2dwaW8gPSBkZXZtX2dwaW9kX2dldChwZGF0YS0+ZGV2LCAiZW5hYmxlIiwKKwkJ CQkJICAgIEdQSU9EX09VVF9MT1cpOworCWlmIChJU19FUlIocGRhdGEtPmVuYWJsZV9ncGlvKSkg eworCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgZW5hYmxlIGdwaW8gZnJvbSBEVFxuIik7CisJ CXJldCA9IFBUUl9FUlIocGRhdGEtPmVuYWJsZV9ncGlvKTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwlyZXQgPSB0aV9zbl9icmlkZ2VfcGFyc2VfcmVndWxhdG9ycyhwZGF0YSk7CisJaWYgKHJldCkg eworCQlEUk1fRVJST1IoImZhaWxlZCB0byBwYXJzZSByZWd1bGF0b3JzXG4iKTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlwZGF0YS0+cmVmY2xrID0gZGV2bV9jbGtfZ2V0KHBkYXRhLT5kZXYsICJy ZWZjbGsiKTsKKwlpZiAoSVNfRVJSKHBkYXRhLT5yZWZjbGspKSB7CisJCXJldCA9IFBUUl9FUlIo cGRhdGEtPnJlZmNsayk7CisJCWlmIChyZXQgPT0gLUVQUk9CRV9ERUZFUikKKwkJCXJldHVybiBy ZXQ7CisJCURSTV9ERUJVR19LTVMoInJlZmNsayBub3QgZm91bmRcbiIpOworCQlwZGF0YS0+cmVm Y2xrID0gTlVMTDsKKwl9CisKKwlyZXQgPSB0aV9zbl9icmlkZ2VfcGFyc2VfZHNpX2hvc3QocGRh dGEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwbV9ydW50aW1lX2VuYWJsZShwZGF0 YS0+ZGV2KTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHBkYXRhKTsKKworCXBkYXRh LT5icmlkZ2UuZnVuY3MgPSAmdGlfc25fYnJpZGdlX2Z1bmNzOworCXBkYXRhLT5icmlkZ2Uub2Zf bm9kZSA9IGNsaWVudC0+ZGV2Lm9mX25vZGU7CisKKwlkcm1fYnJpZGdlX2FkZCgmcGRhdGEtPmJy aWRnZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aV9zbl9icmlkZ2VfcmVtb3Zl KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHRpX3NuX2JyaWRnZSAqcGRh dGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWlmICghcGRhdGEpCisJCXJldHVy biAtRUlOVkFMOworCisJb2Zfbm9kZV9wdXQocGRhdGEtPmhvc3Rfbm9kZSk7CisKKwlwbV9ydW50 aW1lX2Rpc2FibGUocGRhdGEtPmRldik7CisKKwlpZiAocGRhdGEtPmRzaSkgeworCQltaXBpX2Rz aV9kZXRhY2gocGRhdGEtPmRzaSk7CisJCW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKHBkYXRh LT5kc2kpOworCX0KKworCWRybV9icmlkZ2VfcmVtb3ZlKCZwZGF0YS0+YnJpZGdlKTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQgdGlfc25fYnJpZGdlX2lk W10gPSB7CisJeyAidGksc242NWRzaTg2IiwgMH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9U QUJMRShpMmMsIHRpX3NuX2JyaWRnZV9pZCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIHRpX3NuX2JyaWRnZV9tYXRjaF90YWJsZVtdID0geworCXsuY29tcGF0aWJsZSA9ICJ0 aSxzbjY1ZHNpODYifSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0aV9zbl9i cmlkZ2VfbWF0Y2hfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGlfc25fYnJp ZGdlX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ0aV9zbjY1ZHNpODYiLAor CQkub2ZfbWF0Y2hfdGFibGUgPSB0aV9zbl9icmlkZ2VfbWF0Y2hfdGFibGUsCisJCS5wbSA9ICZ0 aV9zbl9icmlkZ2VfcG1fb3BzLAorCX0sCisJLnByb2JlID0gdGlfc25fYnJpZGdlX3Byb2JlLAor CS5yZW1vdmUgPSB0aV9zbl9icmlkZ2VfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHRpX3NuX2JyaWRn ZV9pZCwKK307Cittb2R1bGVfaTJjX2RyaXZlcih0aV9zbl9icmlkZ2VfZHJpdmVyKTsKKworTU9E VUxFX0FVVEhPUigiU2FuZGVlcCBQYW5kYSA8c3BhbmRhQGNvZGVhdXJvcmEub3JnPiIpOworTU9E VUxFX0RFU0NSSVBUSU9OKCJzbjY1ZHNpODYgRFNJIHRvIGVEUCBicmlkZ2UgZHJpdmVyIik7CitN T0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50 ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZv dW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0Bs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9mcmVlZHJlbm8K