From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: [PATCH 50/60] drm/omap: displays: Remove unused panel drivers Date: Sun, 7 Jul 2019 21:19:27 +0300 Message-ID: <20190707181937.6250-47-laurent.pinchart@ideasonboard.com> References: <20190707180852.5512-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-1-laurent.pinchart@ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7457989BF8 for ; Sun, 7 Jul 2019 18:38:23 +0000 (UTC) In-Reply-To: <20190707181937.6250-1-laurent.pinchart@ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Maxime Ripard , Sebastian Reichel , Tomi Valkeinen , Sean Paul List-Id: dri-devel@lists.freedesktop.org ZHJtX3BhbmVsLWJhc2VkIGRyaXZlcnMgZm9yIHRoZSBBQ1g1NjVBS00sIExCMDM1UTAyLCBMUzAz N1Y3RFcwMSwKTkw4MDQ4SEwxMSwgVEQwMjhUVEVDMSBhbmQgVEQwNDNNVEVBMSBhcmUgYXZhaWxh YmxlLCByZW1vdmUgdGhlCm9tYXBkcm0tc3BlY2lmaWMgZHJpdmVycy4KClNpZ25lZC1vZmYtYnk6 IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kaXNwbGF5cy9LY29uZmlnICAgICAgfCAgMzggLQog ZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvTWFrZWZpbGUgICAgIHwgICA2IC0KIC4u Li9kaXNwbGF5cy9wYW5lbC1sZ3BoaWxpcHMtbGIwMzVxMDIuYyAgICAgICB8IDI1NCAtLS0tLS0K IC4uLi9vbWFwZHJtL2Rpc3BsYXlzL3BhbmVsLW5lYy1ubDgwNDhobDExLmMgICB8IDI3MSAtLS0t LS0tCiAuLi4vZGlzcGxheXMvcGFuZWwtc2hhcnAtbHMwMzd2N2R3MDEuYyAgICAgICAgfCAyNjUg LS0tLS0tCiAuLi4vb21hcGRybS9kaXNwbGF5cy9wYW5lbC1zb255LWFjeDU2NWFrbS5jICAgfCA3 NjYgLS0tLS0tLS0tLS0tLS0tLS0tCiAuLi4vb21hcGRybS9kaXNwbGF5cy9wYW5lbC10cG8tdGQw Mjh0dGVjMS5jICAgfCA0MDEgLS0tLS0tLS0tCiAuLi4vb21hcGRybS9kaXNwbGF5cy9wYW5lbC10 cG8tdGQwNDNtdGVhMS5jICAgfCA1MTMgLS0tLS0tLS0tLS0tCiAuLi4vZ3B1L2RybS9vbWFwZHJt L2Rzcy9vbWFwZHNzLWJvb3QtaW5pdC5jICAgfCAgIDcgLQogOSBmaWxlcyBjaGFuZ2VkLCAyNTIx IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJt L2Rpc3BsYXlzL3BhbmVsLWxncGhpbGlwcy1sYjAzNXEwMi5jCiBkZWxldGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvcGFuZWwtbmVjLW5sODA0OGhsMTEuYwog ZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rpc3BsYXlzL3BhbmVs LXNoYXJwLWxzMDM3djdkdzAxLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v b21hcGRybS9kaXNwbGF5cy9wYW5lbC1zb255LWFjeDU2NWFrbS5jCiBkZWxldGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvcGFuZWwtdHBvLXRkMDI4dHRlYzEu YwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rpc3BsYXlzL3Bh bmVsLXRwby10ZDA0M210ZWExLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRy bS9kaXNwbGF5cy9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvS2Nv bmZpZwppbmRleCBiYjczZDQ5ZmMzZTAuLmYyYmU1OTRjN2VmZiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0v b21hcGRybS9kaXNwbGF5cy9LY29uZmlnCkBAIC03LDQyICs3LDQgQEAgY29uZmlnIERSTV9PTUFQ X1BBTkVMX0RTSV9DTQogCWhlbHAKIAkgIERyaXZlciBmb3IgZ2VuZXJpYyBEU0kgY29tbWFuZCBt b2RlIHBhbmVscy4KIAotY29uZmlnIERSTV9PTUFQX1BBTkVMX1NPTllfQUNYNTY1QUtNCi0JdHJp c3RhdGUgIkFDWDU2NUFLTSBQYW5lbCIKLQlkZXBlbmRzIG9uIFNQSSAmJiBCQUNLTElHSFRfQ0xB U1NfREVWSUNFCi0JaGVscAotCSAgVGhpcyBpcyB0aGUgTENEIHBhbmVsIHVzZWQgb24gTm9raWEg TjkwMAotCi1jb25maWcgRFJNX09NQVBfUEFORUxfTEdQSElMSVBTX0xCMDM1UTAyCi0JdHJpc3Rh dGUgIkxHLlBoaWxpcHMgTEIwMzVRMDIgTENEIFBhbmVsIgotCWRlcGVuZHMgb24gU1BJCi0JaGVs cAotCSAgTENEIFBhbmVsIHVzZWQgb24gdGhlIEd1bXN0aXggT3Zlcm8gUGFsbzM1Ci0KLWNvbmZp ZyBEUk1fT01BUF9QQU5FTF9TSEFSUF9MUzAzN1Y3RFcwMQotICAgICAgICB0cmlzdGF0ZSAiU2hh cnAgTFMwMzdWN0RXMDEgTENEIFBhbmVsIgotICAgICAgICBkZXBlbmRzIG9uIEJBQ0tMSUdIVF9D TEFTU19ERVZJQ0UKLSAgICAgICAgaGVscAotICAgICAgICAgIExDRCBQYW5lbCB1c2VkIGluIFRJ J3MgU0RQMzQzMCBhbmQgRVZNIGJvYXJkcwotCi1jb25maWcgRFJNX09NQVBfUEFORUxfVFBPX1RE MDI4VFRFQzEKLSAgICAgICAgdHJpc3RhdGUgIlRQTyBURDAyOFRURUMxIExDRCBQYW5lbCIKLSAg ICAgICAgZGVwZW5kcyBvbiBTUEkKLSAgICAgICAgaGVscAotICAgICAgICAgIExDRCBwYW5lbCB1 c2VkIGluIE9wZW5tb2tvLgotCi1jb25maWcgRFJNX09NQVBfUEFORUxfVFBPX1REMDQzTVRFQTEK LSAgICAgICAgdHJpc3RhdGUgIlRQTyBURDA0M01URUExIExDRCBQYW5lbCIKLSAgICAgICAgZGVw ZW5kcyBvbiBTUEkKLSAgICAgICAgaGVscAotICAgICAgICAgIExDRCBQYW5lbCB1c2VkIGluIE9N QVAzIFBhbmRvcmEKLQotY29uZmlnIERSTV9PTUFQX1BBTkVMX05FQ19OTDgwNDhITDExCi0JdHJp c3RhdGUgIk5FQyBOTDgwNDhITDExIFBhbmVsIgotCWRlcGVuZHMgb24gU1BJCi0JZGVwZW5kcyBv biBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCi0JaGVscAotCQlUaGlzIE5FQyBOTDgwNDhITDExIHBh bmVsIGlzIFRGVCBMQ0QgdXNlZCBpbiB0aGUKLQkJWm9vbTIvMy8zNjMwIHNkcCBib2FyZHMuCi0K IGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rpc3BsYXlzL01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvTWFrZWZpbGUKaW5kZXgg NThkZGZhOTkxN2Y4Li40ODhkZGYxNTM2MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9v bWFwZHJtL2Rpc3BsYXlzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rp c3BsYXlzL01ha2VmaWxlCkBAIC0xLDggKzEsMiBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMAogb2JqLSQoQ09ORklHX0RSTV9PTUFQX1BBTkVMX0RTSV9DTSkgKz0gcGFuZWwt ZHNpLWNtLm8KLW9iai0kKENPTkZJR19EUk1fT01BUF9QQU5FTF9TT05ZX0FDWDU2NUFLTSkgKz0g cGFuZWwtc29ueS1hY3g1NjVha20ubwotb2JqLSQoQ09ORklHX0RSTV9PTUFQX1BBTkVMX0xHUEhJ TElQU19MQjAzNVEwMikgKz0gcGFuZWwtbGdwaGlsaXBzLWxiMDM1cTAyLm8KLW9iai0kKENPTkZJ R19EUk1fT01BUF9QQU5FTF9TSEFSUF9MUzAzN1Y3RFcwMSkgKz0gcGFuZWwtc2hhcnAtbHMwMzd2 N2R3MDEubwotb2JqLSQoQ09ORklHX0RSTV9PTUFQX1BBTkVMX1RQT19URDAyOFRURUMxKSArPSBw YW5lbC10cG8tdGQwMjh0dGVjMS5vCi1vYmotJChDT05GSUdfRFJNX09NQVBfUEFORUxfVFBPX1RE MDQzTVRFQTEpICs9IHBhbmVsLXRwby10ZDA0M210ZWExLm8KLW9iai0kKENPTkZJR19EUk1fT01B UF9QQU5FTF9ORUNfTkw4MDQ4SEwxMSkgKz0gcGFuZWwtbmVjLW5sODA0OGhsMTEubwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvcGFuZWwtbGdwaGlsaXBzLWxi MDM1cTAyLmMgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kaXNwbGF5cy9wYW5lbC1sZ3BoaWxp cHMtbGIwMzVxMDIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFlYjk4ZTk2Y2Rl Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvcGFu ZWwtbGdwaGlsaXBzLWxiMDM1cTAyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQgKzAsMCBAQAot LyoKLSAqIExHLlBoaWxpcHMgTEIwMzVRMDIgTENEIFBhbmVsIGRyaXZlcgotICoKLSAqIENvcHly aWdodCAoQykgMjAxMyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3 LnRpLmNvbS8KLSAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNv bT4KLSAqIEJhc2VkIG9uIGEgZHJpdmVyIGJ5OiBTdGV2ZSBTYWtvbWFuIDxzdGV2ZUBzYWtvbWFu LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGku aD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNp bmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Ci0KLSNpbmNsdWRlICIuLi9kc3Mvb21hcGRz cy5oIgotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvbW9kZSBsYjAzNXEwMl92bSA9IHsKLQku aGFjdGl2ZSA9IDMyMCwKLQkudmFjdGl2ZSA9IDI0MCwKLQotCS5waXhlbGNsb2NrCT0gNjUwMDAw MCwKLQotCS5oc3luY19sZW4JPSAyLAotCS5oZnJvbnRfcG9yY2gJPSAyMCwKLQkuaGJhY2tfcG9y Y2gJPSA2OCwKLQotCS52c3luY19sZW4JPSAyLAotCS52ZnJvbnRfcG9yY2gJPSA0LAotCS52YmFj a19wb3JjaAk9IDE4LAotCi0JLmZsYWdzCQk9IERJU1BMQVlfRkxBR1NfSFNZTkNfTE9XIHwgRElT UExBWV9GTEFHU19WU1lOQ19MT1csCi19OwotCi1zdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgewotCXN0 cnVjdCBvbWFwX2Rzc19kZXZpY2UgZHNzZGV2OwotCi0Jc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsK LQotCXN0cnVjdCB2aWRlb21vZGUgdm07Ci0KLQlzdHJ1Y3QgZ3Bpb19kZXNjICplbmFibGVfZ3Bp bzsKLX07Ci0KLSNkZWZpbmUgdG9fcGFuZWxfZGF0YShwKSBjb250YWluZXJfb2YocCwgc3RydWN0 IHBhbmVsX2Rydl9kYXRhLCBkc3NkZXYpCi0KLXN0YXRpYyBpbnQgbGIwMzVxMDJfd3JpdGVfcmVn KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHU4IHJlZywgdTE2IHZhbCkKLXsKLQlzdHJ1Y3Qgc3Bp X21lc3NhZ2UgbXNnOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgaW5kZXhfeGZlciA9IHsKLQkJLmxl bgkJPSAzLAotCQkuY3NfY2hhbmdlCT0gMSwKLQl9OwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdmFs dWVfeGZlciA9IHsKLQkJLmxlbgkJPSAzLAotCX07Ci0JdTgJYnVmZmVyWzE2XTsKLQotCXNwaV9t ZXNzYWdlX2luaXQoJm1zZyk7Ci0KLQkvKiByZWdpc3RlciBpbmRleCAqLwotCWJ1ZmZlclswXSA9 IDB4NzA7Ci0JYnVmZmVyWzFdID0gMHgwMDsKLQlidWZmZXJbMl0gPSByZWcgJiAweDdmOwotCWlu ZGV4X3hmZXIudHhfYnVmID0gYnVmZmVyOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZpbmRleF94 ZmVyLCAmbXNnKTsKLQotCS8qIHJlZ2lzdGVyIHZhbHVlICovCi0JYnVmZmVyWzRdID0gMHg3MjsK LQlidWZmZXJbNV0gPSB2YWwgPj4gODsKLQlidWZmZXJbNl0gPSB2YWw7Ci0JdmFsdWVfeGZlci50 eF9idWYgPSBidWZmZXIgKyA0OwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ2YWx1ZV94ZmVyLCAm bXNnKTsKLQotCXJldHVybiBzcGlfc3luYyhzcGksICZtc2cpOwotfQotCi1zdGF0aWMgdm9pZCBp bml0X2xiMDM1cTAyX3BhbmVsKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0JLyogSW5pdCBz ZXF1ZW5jZSBmcm9tIHBhZ2UgMjggb2YgdGhlIGxiMDM1cTAyIHNwZWMgKi8KLQlsYjAzNXEwMl93 cml0ZV9yZWcoc3BpLCAweDAxLCAweDYzMDApOwotCWxiMDM1cTAyX3dyaXRlX3JlZyhzcGksIDB4 MDIsIDB4MDIwMCk7Ci0JbGIwMzVxMDJfd3JpdGVfcmVnKHNwaSwgMHgwMywgMHgwMTc3KTsKLQls YjAzNXEwMl93cml0ZV9yZWcoc3BpLCAweDA0LCAweDA0YzcpOwotCWxiMDM1cTAyX3dyaXRlX3Jl ZyhzcGksIDB4MDUsIDB4ZmZjMCk7Ci0JbGIwMzVxMDJfd3JpdGVfcmVnKHNwaSwgMHgwNiwgMHhl ODA2KTsKLQlsYjAzNXEwMl93cml0ZV9yZWcoc3BpLCAweDBhLCAweDQwMDgpOwotCWxiMDM1cTAy X3dyaXRlX3JlZyhzcGksIDB4MGIsIDB4MDAwMCk7Ci0JbGIwMzVxMDJfd3JpdGVfcmVnKHNwaSwg MHgwZCwgMHgwMDMwKTsKLQlsYjAzNXEwMl93cml0ZV9yZWcoc3BpLCAweDBlLCAweDI4MDApOwot CWxiMDM1cTAyX3dyaXRlX3JlZyhzcGksIDB4MGYsIDB4MDAwMCk7Ci0JbGIwMzVxMDJfd3JpdGVf cmVnKHNwaSwgMHgxNiwgMHg5ZjgwKTsKLQlsYjAzNXEwMl93cml0ZV9yZWcoc3BpLCAweDE3LCAw eDBhMGYpOwotCWxiMDM1cTAyX3dyaXRlX3JlZyhzcGksIDB4MWUsIDB4MDBjMSk7Ci0JbGIwMzVx MDJfd3JpdGVfcmVnKHNwaSwgMHgzMCwgMHgwMzAwKTsKLQlsYjAzNXEwMl93cml0ZV9yZWcoc3Bp LCAweDMxLCAweDAwMDcpOwotCWxiMDM1cTAyX3dyaXRlX3JlZyhzcGksIDB4MzIsIDB4MDAwMCk7 Ci0JbGIwMzVxMDJfd3JpdGVfcmVnKHNwaSwgMHgzMywgMHgwMDAwKTsKLQlsYjAzNXEwMl93cml0 ZV9yZWcoc3BpLCAweDM0LCAweDA3MDcpOwotCWxiMDM1cTAyX3dyaXRlX3JlZyhzcGksIDB4MzUs IDB4MDAwNCk7Ci0JbGIwMzVxMDJfd3JpdGVfcmVnKHNwaSwgMHgzNiwgMHgwMzAyKTsKLQlsYjAz NXEwMl93cml0ZV9yZWcoc3BpLCAweDM3LCAweDAyMDIpOwotCWxiMDM1cTAyX3dyaXRlX3JlZyhz cGksIDB4M2EsIDB4MGEwZCk7Ci0JbGIwMzVxMDJfd3JpdGVfcmVnKHNwaSwgMHgzYiwgMHgwODA2 KTsKLX0KLQotc3RhdGljIGludCBsYjAzNXEwMl9jb25uZWN0KHN0cnVjdCBvbWFwX2Rzc19kZXZp Y2UgKnNyYywKLQkJCSAgICBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3QpCi17Ci0Jc3RydWN0 IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IHRvX3BhbmVsX2RhdGEoZHN0KTsKLQotCWluaXRfbGIw MzVxMDJfcGFuZWwoZGRhdGEtPnNwaSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQg bGIwMzVxMDJfZGlzY29ubmVjdChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpzcmMsCi0JCQkJc3Ry dWN0IG9tYXBfZHNzX2RldmljZSAqZHN0KQotewotfQotCi1zdGF0aWMgdm9pZCBsYjAzNXEwMl9l bmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCXN0cnVjdCBwYW5lbF9k cnZfZGF0YSAqZGRhdGEgPSB0b19wYW5lbF9kYXRhKGRzc2Rldik7Ci0KLQlpZiAoZGRhdGEtPmVu YWJsZV9ncGlvKQotCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoZGRhdGEtPmVuYWJsZV9ncGlv LCAxKTsKLX0KLQotc3RhdGljIHZvaWQgbGIwMzVxMDJfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3Nf ZGV2aWNlICpkc3NkZXYpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IHRvX3Bh bmVsX2RhdGEoZHNzZGV2KTsKLQotCWlmIChkZGF0YS0+ZW5hYmxlX2dwaW8pCi0JCWdwaW9kX3Nl dF92YWx1ZV9jYW5zbGVlcChkZGF0YS0+ZW5hYmxlX2dwaW8sIDApOwotfQotCi1zdGF0aWMgaW50 IGxiMDM1cTAyX2dldF9tb2RlcyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCQkg ICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXN0cnVjdCBwYW5lbF9k cnZfZGF0YSAqZGRhdGEgPSB0b19wYW5lbF9kYXRhKGRzc2Rldik7Ci0KLQlyZXR1cm4gb21hcGRz c19kaXNwbGF5X2dldF9tb2Rlcyhjb25uZWN0b3IsICZkZGF0YS0+dm0pOwotfQotCi1zdGF0aWMg Y29uc3Qgc3RydWN0IG9tYXBfZHNzX2RldmljZV9vcHMgbGIwMzVxMDJfb3BzID0gewotCS5jb25u ZWN0CT0gbGIwMzVxMDJfY29ubmVjdCwKLQkuZGlzY29ubmVjdAk9IGxiMDM1cTAyX2Rpc2Nvbm5l Y3QsCi0KLQkuZW5hYmxlCQk9IGxiMDM1cTAyX2VuYWJsZSwKLQkuZGlzYWJsZQk9IGxiMDM1cTAy X2Rpc2FibGUsCi0KLQkuZ2V0X21vZGVzCT0gbGIwMzVxMDJfZ2V0X21vZGVzLAotfTsKLQotc3Rh dGljIGludCBsYjAzNXEwMl9wcm9iZV9vZihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXN0 cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsK LQlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvOwotCi0JZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KCZzcGkt PmRldiwgImVuYWJsZSIsIEdQSU9EX09VVF9MT1cpOwotCWlmIChJU19FUlIoZ3BpbykpIHsKLQkJ ZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gcGFyc2UgZW5hYmxlIGdwaW9cbiIpOwotCQly ZXR1cm4gUFRSX0VSUihncGlvKTsKLQl9Ci0KLQlkZGF0YS0+ZW5hYmxlX2dwaW8gPSBncGlvOwot Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGIwMzVxMDJfcGFuZWxfc3BpX3Byb2JlKHN0 cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YTsK LQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXY7Ci0JaW50IHI7Ci0KLQlkZGF0YSA9IGRl dm1fa3phbGxvYygmc3BpLT5kZXYsIHNpemVvZigqZGRhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAo ZGRhdGEgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkZXZfc2V0X2RydmRhdGEoJnNw aS0+ZGV2LCBkZGF0YSk7Ci0KLQlkZGF0YS0+c3BpID0gc3BpOwotCi0JciA9IGxiMDM1cTAyX3By b2JlX29mKHNwaSk7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCi0JZGRhdGEtPnZtID0gbGIwMzVx MDJfdm07Ci0KLQlkc3NkZXYgPSAmZGRhdGEtPmRzc2RldjsKLQlkc3NkZXYtPmRldiA9ICZzcGkt PmRldjsKLQlkc3NkZXYtPm9wcyA9ICZsYjAzNXEwMl9vcHM7Ci0JZHNzZGV2LT50eXBlID0gT01B UF9ESVNQTEFZX1RZUEVfRFBJOwotCWRzc2Rldi0+ZGlzcGxheSA9IHRydWU7Ci0JZHNzZGV2LT5v d25lciA9IFRISVNfTU9EVUxFOwotCWRzc2Rldi0+b2ZfcG9ydCA9IDA7Ci0JZHNzZGV2LT5vcHNf ZmxhZ3MgPSBPTUFQX0RTU19ERVZJQ0VfT1BfTU9ERVM7Ci0KLQkvKgotCSAqIE5vdGU6IEFjY29y ZGluZyB0byB0aGUgcGFuZWwgZG9jdW1lbnRhdGlvbjoKLQkgKiBERSBpcyBhY3RpdmUgTE9XCi0J ICogREFUQSBuZWVkcyB0byBiZSBkcml2ZW4gb24gdGhlIEZBTExJTkcgZWRnZQotCSAqLwotCWRz c2Rldi0+YnVzX2ZsYWdzID0gRFJNX0JVU19GTEFHX0RFX0hJR0gKLQkJCSAgfCBEUk1fQlVTX0ZM QUdfU1lOQ19EUklWRV9ORUdFREdFCi0JCQkgIHwgRFJNX0JVU19GTEFHX1BJWERBVEFfRFJJVkVf UE9TRURHRTsKLQotCW9tYXBkc3NfZGlzcGxheV9pbml0KGRzc2Rldik7Ci0Jb21hcGRzc19kZXZp Y2VfcmVnaXN0ZXIoZHNzZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGxiMDM1 cTAyX3BhbmVsX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3Qg cGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7Ci0Jc3Ry dWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2ID0gJmRkYXRhLT5kc3NkZXY7Ci0KLQlvbWFwZHNz X2RldmljZV91bnJlZ2lzdGVyKGRzc2Rldik7Ci0KLQlsYjAzNXEwMl9kaXNhYmxlKGRzc2Rldik7 Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbGIw MzVxMDJfb2ZfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gIm9tYXBkc3MsbGdwaGlsaXBz LGxiMDM1cTAyIiwgfSwKLQl7fSwKLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGxiMDM1 cTAyX29mX21hdGNoKTsKLQotc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGxiMDM1cTAyX3NwaV9k cml2ZXIgPSB7Ci0JLnByb2JlCQk9IGxiMDM1cTAyX3BhbmVsX3NwaV9wcm9iZSwKLQkucmVtb3Zl CQk9IGxiMDM1cTAyX3BhbmVsX3NwaV9yZW1vdmUsCi0JLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0g InBhbmVsX2xncGhpbGlwc19sYjAzNXEwMiIsCi0JCS5vZl9tYXRjaF90YWJsZSA9IGxiMDM1cTAy X29mX21hdGNoLAotCQkuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsCi0JfSwKLX07Ci0KLW1v ZHVsZV9zcGlfZHJpdmVyKGxiMDM1cTAyX3NwaV9kcml2ZXIpOwotCi1NT0RVTEVfQUxJQVMoInNw aTpsZ3BoaWxpcHMsbGIwMzVxMDIiKTsKLU1PRFVMRV9BVVRIT1IoIlRvbWkgVmFsa2VpbmVuIDx0 b21pLnZhbGtlaW5lbkB0aS5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkxHLlBoaWxpcHMg TEIwMzVRMDIgTENEIFBhbmVsIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vZGlzcGxheXMvcGFuZWwtbmVjLW5sODA0 OGhsMTEuYyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rpc3BsYXlzL3BhbmVsLW5lYy1ubDgw NDhobDExLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZGUzZjZmNjcwZS4uMDAw MDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rpc3BsYXlzL3BhbmVsLW5l Yy1ubDgwNDhobDExLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEgKzAsMCBAQAotLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKLS8qCi0gKiBORUMgTkw4MDQ4SEwx MSBQYW5lbCBkcml2ZXIKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVu dHMgSW5jb3Jwb3JhdGVkIC0gaHR0cDovL3d3dy50aS5jb20vCi0gKiBBdXRob3I6IEVyaWsgR2ls bGluZyA8a29ua2Vyc0BhbmRyb2lkLmNvbT4KLSAqIENvbnZlcnRlZCB0byBuZXcgRFNTIGRldmlj ZSBtb2RlbDogVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KLSAqLwotCi0j aW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+ Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgot Ci0jaW5jbHVkZSAiLi4vZHNzL29tYXBkc3MuaCIKLQotc3RydWN0IHBhbmVsX2Rydl9kYXRhIHsK LQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlCWRzc2RldjsKLQotCXN0cnVjdCB2aWRlb21vZGUgdm07 Ci0KLQlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNfZ3BpbzsKLQotCXN0cnVjdCBzcGlfZGV2aWNlICpz cGk7Ci19OwotCi0jZGVmaW5lIExDRF9YUkVTCQk4MDAKLSNkZWZpbmUgTENEX1lSRVMJCTQ4MAot LyoKLSAqIE5FQyBQSVggQ2xvY2sgUmF0aW5ncwotICogTUlOOjIxLjhNSHogVFlQOjIzLjhNSHog TUFYOjI1LjdNSHoKLSAqLwotI2RlZmluZSBMQ0RfUElYRUxfQ0xPQ0sJCTIzODAwMDAwCi0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgewotCXVuc2lnbmVkIGNoYXIgYWRkcjsKLQl1bnNpZ25lZCBjaGFy IGRhdDsKLX0gbmVjXzgwNDhfaW5pdF9zZXFbXSA9IHsKLQl7IDMsIDB4MDEgfSwgeyAwLCAweDAw IH0sIHsgMSwgMHgwMSB9LCB7IDQsIDB4MDAgfSwgeyA1LCAweDE0IH0sCi0JeyA2LCAweDI0IH0s IHsgMTYsIDB4RDcgfSwgeyAxNywgMHgwMCB9LCB7IDE4LCAweDAwIH0sIHsgMTksIDB4NTUgfSwK LQl7IDIwLCAweDAxIH0sIHsgMjEsIDB4NzAgfSwgeyAyMiwgMHgxRSB9LCB7IDIzLCAweDI1IH0s CXsgMjQsIDB4MjUgfSwKLQl7IDI1LCAweDAyIH0sIHsgMjYsIDB4MDIgfSwgeyAyNywgMHhBMCB9 LCB7IDMyLCAweDJGIH0sIHsgMzMsIDB4MEYgfSwKLQl7IDM0LCAweDBGIH0sIHsgMzUsIDB4MEYg fSwgeyAzNiwgMHgwRiB9LCB7IDM3LCAweDBGIH0sCXsgMzgsIDB4MEYgfSwKLQl7IDM5LCAweDAw IH0sIHsgNDAsIDB4MDIgfSwgeyA0MSwgMHgwMiB9LCB7IDQyLCAweDAyIH0sCXsgNDMsIDB4MEYg fSwKLQl7IDQ0LCAweDBGIH0sIHsgNDUsIDB4MEYgfSwgeyA0NiwgMHgwRiB9LCB7IDQ3LCAweDBG IH0sCXsgNDgsIDB4MEYgfSwKLQl7IDQ5LCAweDBGIH0sIHsgNTAsIDB4MDAgfSwgeyA1MSwgMHgw MiB9LCB7IDUyLCAweDAyIH0sIHsgNTMsIDB4MDIgfSwKLQl7IDgwLCAweDBDIH0sIHsgODMsIDB4 NDIgfSwgeyA4NCwgMHg0MiB9LCB7IDg1LCAweDQxIH0sCXsgODYsIDB4MTQgfSwKLQl7IDg5LCAw eDg4IH0sIHsgOTAsIDB4MDEgfSwgeyA5MSwgMHgwMCB9LCB7IDkyLCAweDAyIH0sCXsgOTMsIDB4 MEMgfSwKLQl7IDk0LCAweDFDIH0sIHsgOTUsIDB4MjcgfSwgeyA5OCwgMHg0OSB9LCB7IDk5LCAw eDI3IH0sIHsgMTAyLCAweDc2IH0sCi0JeyAxMDMsIDB4MjcgfSwgeyAxMTIsIDB4MDEgfSwgeyAx MTMsIDB4MEUgfSwgeyAxMTQsIDB4MDIgfSwKLQl7IDExNSwgMHgwQyB9LCB7IDExOCwgMHgwQyB9 LCB7IDEyMSwgMHgzMCB9LCB7IDEzMCwgMHgwMCB9LAotCXsgMTMxLCAweDAwIH0sIHsgMTMyLCAw eEZDIH0sIHsgMTM0LCAweDAwIH0sIHsgMTM2LCAweDAwIH0sCi0JeyAxMzgsIDB4MDAgfSwgeyAx MzksIDB4MDAgfSwgeyAxNDAsIDB4MDAgfSwgeyAxNDEsIDB4RkMgfSwKLQl7IDE0MywgMHgwMCB9 LCB7IDE0NSwgMHgwMCB9LCB7IDE0NywgMHgwMCB9LCB7IDE0OCwgMHgwMCB9LAotCXsgMTQ5LCAw eDAwIH0sIHsgMTUwLCAweEZDIH0sIHsgMTUyLCAweDAwIH0sIHsgMTU0LCAweDAwIH0sCi0JeyAx NTYsIDB4MDAgfSwgeyAxNTcsIDB4MDAgfSwgeyAyLCAweDAwIH0sCi19OwotCi1zdGF0aWMgY29u c3Qgc3RydWN0IHZpZGVvbW9kZSBuZWNfODA0OF9wYW5lbF92bSA9IHsKLQkuaGFjdGl2ZQk9IExD RF9YUkVTLAotCS52YWN0aXZlCT0gTENEX1lSRVMsCi0JLnBpeGVsY2xvY2sJPSBMQ0RfUElYRUxf Q0xPQ0ssCi0JLmhmcm9udF9wb3JjaAk9IDYsCi0JLmhzeW5jX2xlbgk9IDEsCi0JLmhiYWNrX3Bv cmNoCT0gNCwKLQkudmZyb250X3BvcmNoCT0gMywKLQkudnN5bmNfbGVuCT0gMSwKLQkudmJhY2tf cG9yY2gJPSA0LAotCi0JLmZsYWdzCQk9IERJU1BMQVlfRkxBR1NfSFNZTkNfTE9XIHwgRElTUExB WV9GTEFHU19WU1lOQ19MT1csCi19OwotCi0jZGVmaW5lIHRvX3BhbmVsX2RhdGEocCkgY29udGFp bmVyX29mKHAsIHN0cnVjdCBwYW5lbF9kcnZfZGF0YSwgZHNzZGV2KQotCi1zdGF0aWMgaW50IG5l Y184MDQ4X3NwaV9zZW5kKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHVuc2lnbmVkIGNoYXIgcmVn X2FkZHIsCi0JCQl1bnNpZ25lZCBjaGFyIHJlZ19kYXRhKQotewotCWludCByZXQgPSAwOwotCXVu c2lnbmVkIGludCBjbWQgPSAwLCBkYXRhID0gMDsKLQotCWNtZCA9IDB4MDAwMCB8IHJlZ19hZGRy OyAvKiByZWdpc3RlciBhZGRyZXNzIHdyaXRlICovCi0JZGF0YSA9IDB4MDEwMCB8IHJlZ19kYXRh OyAvKiByZWdpc3RlciBkYXRhIHdyaXRlICovCi0JZGF0YSA9IChjbWQgPDwgMTYpIHwgZGF0YTsK LQotCXJldCA9IHNwaV93cml0ZShzcGksICh1bnNpZ25lZCBjaGFyICopJmRhdGEsIDQpOwotCWlm IChyZXQpCi0JCXByX2VycigiZXJyb3IgaW4gc3BpX3dyaXRlICV4XG4iLCBkYXRhKTsKLQotCXJl dHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaW5pdF9uZWNfODA0OF93dmdhX2xjZChzdHJ1Y3Qg c3BpX2RldmljZSAqc3BpKQotewotCXVuc2lnbmVkIGludCBpOwotCS8qIEluaXRpYWxpemF0aW9u IFNlcXVlbmNlICovCi0JLyogbmVjXzgwNDhfc3BpX3NlbmQoc3BpLCBSRUcsIFZBTCkgKi8KLQlm b3IgKGkgPSAwOyBpIDwgKEFSUkFZX1NJWkUobmVjXzgwNDhfaW5pdF9zZXEpIC0gMSk7IGkrKykK LQkJbmVjXzgwNDhfc3BpX3NlbmQoc3BpLCBuZWNfODA0OF9pbml0X3NlcVtpXS5hZGRyLAotCQkJ CW5lY184MDQ4X2luaXRfc2VxW2ldLmRhdCk7Ci0JdWRlbGF5KDIwKTsKLQluZWNfODA0OF9zcGlf c2VuZChzcGksIG5lY184MDQ4X2luaXRfc2VxW2ldLmFkZHIsCi0JCQkJbmVjXzgwNDhfaW5pdF9z ZXFbaV0uZGF0KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBuZWNfODA0OF9jb25uZWN0 KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKnNyYywKLQkJCSAgICBzdHJ1Y3Qgb21hcF9kc3NfZGV2 aWNlICpkc3QpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG5lY184MDQ4X2Rpc2Nv bm5lY3Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqc3JjLAotCQkJCXN0cnVjdCBvbWFwX2Rzc19k ZXZpY2UgKmRzdCkKLXsKLX0KLQotc3RhdGljIHZvaWQgbmVjXzgwNDhfZW5hYmxlKHN0cnVjdCBv bWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRh ID0gdG9fcGFuZWxfZGF0YShkc3NkZXYpOwotCi0JZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGRk YXRhLT5yZXNfZ3BpbywgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIG5lY184MDQ4X2Rpc2FibGUoc3Ry dWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAq ZGRhdGEgPSB0b19wYW5lbF9kYXRhKGRzc2Rldik7Ci0KLQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xl ZXAoZGRhdGEtPnJlc19ncGlvLCAwKTsKLX0KLQotc3RhdGljIGludCBuZWNfODA0OF9nZXRfbW9k ZXMoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQkJICAgICAgc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0g dG9fcGFuZWxfZGF0YShkc3NkZXYpOwotCi0JcmV0dXJuIG9tYXBkc3NfZGlzcGxheV9nZXRfbW9k ZXMoY29ubmVjdG9yLCAmZGRhdGEtPnZtKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFw X2Rzc19kZXZpY2Vfb3BzIG5lY184MDQ4X29wcyA9IHsKLQkuY29ubmVjdAk9IG5lY184MDQ4X2Nv bm5lY3QsCi0JLmRpc2Nvbm5lY3QJPSBuZWNfODA0OF9kaXNjb25uZWN0LAotCi0JLmVuYWJsZQkJ PSBuZWNfODA0OF9lbmFibGUsCi0JLmRpc2FibGUJPSBuZWNfODA0OF9kaXNhYmxlLAotCi0JLmdl dF9tb2Rlcwk9IG5lY184MDQ4X2dldF9tb2RlcywKLX07Ci0KLXN0YXRpYyBpbnQgbmVjXzgwNDhf cHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEg KmRkYXRhOwotCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldjsKLQlzdHJ1Y3QgZ3Bpb19k ZXNjICpncGlvOwotCWludCByOwotCi0JZGV2X2RiZygmc3BpLT5kZXYsICIlc1xuIiwgX19mdW5j X18pOwotCi0Jc3BpLT5tb2RlID0gU1BJX01PREVfMDsKLQlzcGktPmJpdHNfcGVyX3dvcmQgPSAz MjsKLQotCXIgPSBzcGlfc2V0dXAoc3BpKTsKLQlpZiAociA8IDApIHsKLQkJZGV2X2Vycigmc3Bp LT5kZXYsICJzcGlfc2V0dXAgZmFpbGVkOiAlZFxuIiwgcik7Ci0JCXJldHVybiByOwotCX0KLQot CWluaXRfbmVjXzgwNDhfd3ZnYV9sY2Qoc3BpKTsKLQotCWRkYXRhID0gZGV2bV9remFsbG9jKCZz cGktPmRldiwgc2l6ZW9mKCpkZGF0YSksIEdGUF9LRVJORUwpOwotCWlmIChkZGF0YSA9PSBOVUxM KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIGRkYXRh KTsKLQotCWRkYXRhLT5zcGkgPSBzcGk7Ci0KLQlncGlvID0gZGV2bV9ncGlvZF9nZXQoJnNwaS0+ ZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfTE9XKTsKLQlpZiAoSVNfRVJSKGdwaW8pKSB7Ci0JCWRl dl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGdldCByZXNldCBncGlvXG4iKTsKLQkJcmV0dXJu IFBUUl9FUlIoZ3Bpbyk7Ci0JfQotCi0JZGRhdGEtPnJlc19ncGlvID0gZ3BpbzsKLQotCWRkYXRh LT52bSA9IG5lY184MDQ4X3BhbmVsX3ZtOwotCi0JZHNzZGV2ID0gJmRkYXRhLT5kc3NkZXY7Ci0J ZHNzZGV2LT5kZXYgPSAmc3BpLT5kZXY7Ci0JZHNzZGV2LT5vcHMgPSAmbmVjXzgwNDhfb3BzOwot CWRzc2Rldi0+dHlwZSA9IE9NQVBfRElTUExBWV9UWVBFX0RQSTsKLQlkc3NkZXYtPmRpc3BsYXkg PSB0cnVlOwotCWRzc2Rldi0+b3duZXIgPSBUSElTX01PRFVMRTsKLQlkc3NkZXYtPm9mX3BvcnQg PSAwOwotCWRzc2Rldi0+b3BzX2ZsYWdzID0gT01BUF9EU1NfREVWSUNFX09QX01PREVTOwotCWRz c2Rldi0+YnVzX2ZsYWdzID0gRFJNX0JVU19GTEFHX0RFX0hJR0gKLQkJCSAgfCBEUk1fQlVTX0ZM QUdfU1lOQ19EUklWRV9QT1NFREdFCi0JCQkgIHwgRFJNX0JVU19GTEFHX1BJWERBVEFfRFJJVkVf UE9TRURHRTsKLQotCW9tYXBkc3NfZGlzcGxheV9pbml0KGRzc2Rldik7Ci0Jb21hcGRzc19kZXZp Y2VfcmVnaXN0ZXIoZHNzZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG5lY184 MDQ4X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXN0cnVjdCBwYW5lbF9kcnZf ZGF0YSAqZGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKLQlzdHJ1Y3Qgb21hcF9k c3NfZGV2aWNlICpkc3NkZXYgPSAmZGRhdGEtPmRzc2RldjsKLQotCWRldl9kYmcoJmRkYXRhLT5z cGktPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlvbWFwZHNzX2RldmljZV91bnJlZ2lzdGVy KGRzc2Rldik7Ci0KLQluZWNfODA0OF9kaXNhYmxlKGRzc2Rldik7Ci0KLQlyZXR1cm4gMDsKLX0K LQotI2lmZGVmIENPTkZJR19QTV9TTEVFUAotc3RhdGljIGludCBuZWNfODA0OF9zdXNwZW5kKHN0 cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2Rl dmljZShkZXYpOwotCi0JbmVjXzgwNDhfc3BpX3NlbmQoc3BpLCAyLCAweDAxKTsKLQltZGVsYXko NDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbmVjXzgwNDhfcmVzdW1lKHN0cnVj dCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2Rldmlj ZShkZXYpOwotCi0JLyogcmVpbml0aWFsaXplIHRoZSBwYW5lbCAqLwotCXNwaV9zZXR1cChzcGkp OwotCW5lY184MDQ4X3NwaV9zZW5kKHNwaSwgMiwgMHgwMCk7Ci0JaW5pdF9uZWNfODA0OF93dmdh X2xjZChzcGkpOwotCi0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobmVj XzgwNDhfcG1fb3BzLCBuZWNfODA0OF9zdXNwZW5kLAotCQluZWNfODA0OF9yZXN1bWUpOwotI2Rl ZmluZSBORUNfODA0OF9QTV9PUFMgKCZuZWNfODA0OF9wbV9vcHMpCi0jZWxzZQotI2RlZmluZSBO RUNfODA0OF9QTV9PUFMgTlVMTAotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIG5lY184MDQ4X29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJvbWFwZHNz LG5lYyxubDgwNDhobDExIiwgfSwKLQl7fSwKLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2Ys IG5lY184MDQ4X29mX21hdGNoKTsKLQotc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIG5lY184MDQ4 X2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZQk9ICJwYW5lbC1uZWMtbmw4MDQ4aGwx MSIsCi0JCS5wbQk9IE5FQ184MDQ4X1BNX09QUywKLQkJLm9mX21hdGNoX3RhYmxlID0gbmVjXzgw NDhfb2ZfbWF0Y2gsCi0JCS5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwKLQl9LAotCS5wcm9i ZQk9IG5lY184MDQ4X3Byb2JlLAotCS5yZW1vdmUJPSBuZWNfODA0OF9yZW1vdmUsCi19OwotCi1t b2R1bGVfc3BpX2RyaXZlcihuZWNfODA0OF9kcml2ZXIpOwotCi1NT0RVTEVfQUxJQVMoInNwaTpu ZWMsbmw4MDQ4aGwxMSIpOwotTU9EVUxFX0FVVEhPUigiRXJpayBHaWxsaW5nIDxrb25rZXJzQGFu ZHJvaWQuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJORUMtTkw4MDQ4SEwxMSBEcml2ZXIi KTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9v bWFwZHJtL2Rpc3BsYXlzL3BhbmVsLXNoYXJwLWxzMDM3djdkdzAxLmMgYi9kcml2ZXJzL2dwdS9k cm0vb21hcGRybS9kaXNwbGF5cy9wYW5lbC1zaGFycC1sczAzN3Y3ZHcwMS5jCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCA2MzdlYjY0MzcxZDkuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vb21hcGRybS9kaXNwbGF5cy9wYW5lbC1zaGFycC1sczAzN3Y3ZHcwMS5jCisr KyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLS8qCi0gKiBMQ0QgcGFuZWwgZHJpdmVyIGZv ciBTaGFycCBMUzAzN1Y3RFcwMQotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUZXhhcyBJbnN0 cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KLSAqIEF1dGhvcjogVG9t aSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBp dAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8v Y29uc3VtZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9v Zi5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4 L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KLQotI2luY2x1 ZGUgIi4uL2Rzcy9vbWFwZHNzLmgiCi0KLXN0cnVjdCBwYW5lbF9kcnZfZGF0YSB7Ci0Jc3RydWN0 IG9tYXBfZHNzX2RldmljZSBkc3NkZXY7Ci0Jc3RydWN0IHJlZ3VsYXRvciAqdmNjOwotCi0Jc3Ry dWN0IHZpZGVvbW9kZSB2bTsKLQotCXN0cnVjdCBncGlvX2Rlc2MgKnJlc2JfZ3BpbzsJLyogbG93 ID0gcmVzZXQgYWN0aXZlIG1pbiAyMCB1cyAqLwotCXN0cnVjdCBncGlvX2Rlc2MgKmluaV9ncGlv OwkvKiBoaWdoID0gcG93ZXIgb24gKi8KLQlzdHJ1Y3QgZ3Bpb19kZXNjICptb19ncGlvOwkvKiBs b3cgPSA0ODB4NjQwLCBoaWdoID0gMjQweDMyMCAqLwotCXN0cnVjdCBncGlvX2Rlc2MgKmxyX2dw aW87CS8qIGhpZ2ggPSBjb252ZW50aW9uYWwgaG9yaXpvbnRhbCBzY2FubmluZyAqLwotCXN0cnVj dCBncGlvX2Rlc2MgKnVkX2dwaW87CS8qIGhpZ2ggPSBjb252ZW50aW9uYWwgdmVydGljYWwgc2Nh bm5pbmcgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9tb2RlIHNoYXJwX2xzX3Zt ID0gewotCS5oYWN0aXZlID0gNDgwLAotCS52YWN0aXZlID0gNjQwLAotCi0JLnBpeGVsY2xvY2sJ PSAxOTIwMDAwMCwKLQotCS5oc3luY19sZW4JPSAyLAotCS5oZnJvbnRfcG9yY2gJPSAxLAotCS5o YmFja19wb3JjaAk9IDI4LAotCi0JLnZzeW5jX2xlbgk9IDEsCi0JLnZmcm9udF9wb3JjaAk9IDEs Ci0JLnZiYWNrX3BvcmNoCT0gMSwKLQotCS5mbGFncwkJPSBESVNQTEFZX0ZMQUdTX0hTWU5DX0xP VyB8IERJU1BMQVlfRkxBR1NfVlNZTkNfTE9XLAotfTsKLQotI2RlZmluZSB0b19wYW5lbF9kYXRh KHApIGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEsIGRzc2RldikKLQotc3Rh dGljIGludCBzaGFycF9sc19jb25uZWN0KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKnNyYywKLQkJ CSAgICBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3QpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyB2b2lkIHNoYXJwX2xzX2Rpc2Nvbm5lY3Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqc3Jj LAotCQkJCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzdCkKLXsKLX0KLQotc3RhdGljIHZvaWQg c2hhcnBfbHNfcHJlX2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0J c3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IHRvX3BhbmVsX2RhdGEoZHNzZGV2KTsKLQlp bnQgcjsKLQotCWlmIChkZGF0YS0+dmNjKSB7Ci0JCXIgPSByZWd1bGF0b3JfZW5hYmxlKGRkYXRh LT52Y2MpOwotCQlpZiAocikKLQkJCWRldl9lcnIoZHNzZGV2LT5kZXYsICIlczogZmFpbGVkIHRv IGVuYWJsZSByZWd1bGF0b3JcbiIsCi0JCQkJX19mdW5jX18pOwotCX0KLX0KLQotc3RhdGljIHZv aWQgc2hhcnBfbHNfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlz dHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gdG9fcGFuZWxfZGF0YShkc3NkZXYpOwotCi0J Lyogd2FpdCBjb3VwbGUgb2YgdnN5bmNzIHVudGlsIGVuYWJsaW5nIHRoZSBMQ0QgKi8KLQltc2xl ZXAoNTApOwotCi0JaWYgKGRkYXRhLT5yZXNiX2dwaW8pCi0JCWdwaW9kX3NldF92YWx1ZV9jYW5z bGVlcChkZGF0YS0+cmVzYl9ncGlvLCAxKTsKLQotCWlmIChkZGF0YS0+aW5pX2dwaW8pCi0JCWdw aW9kX3NldF92YWx1ZV9jYW5zbGVlcChkZGF0YS0+aW5pX2dwaW8sIDEpOwotfQotCi1zdGF0aWMg dm9pZCBzaGFycF9sc19kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsK LQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gdG9fcGFuZWxfZGF0YShkc3NkZXYpOwot Ci0JaWYgKGRkYXRhLT5pbmlfZ3BpbykKLQkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGRkYXRh LT5pbmlfZ3BpbywgMCk7Ci0KLQlpZiAoZGRhdGEtPnJlc2JfZ3BpbykKLQkJZ3Bpb2Rfc2V0X3Zh bHVlX2NhbnNsZWVwKGRkYXRhLT5yZXNiX2dwaW8sIDApOwotCi0JLyogd2FpdCBhdCBsZWFzdCA1 IHZzeW5jcyBhZnRlciBkaXNhYmxpbmcgdGhlIExDRCAqLwotCW1zbGVlcCgxMDApOwotfQotCi1z dGF0aWMgdm9pZCBzaGFycF9sc19wb3N0X2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAq ZHNzZGV2KQotewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSB0b19wYW5lbF9kYXRh KGRzc2Rldik7Ci0KLQlpZiAoZGRhdGEtPnZjYykKLQkJcmVndWxhdG9yX2Rpc2FibGUoZGRhdGEt PnZjYyk7Ci19Ci0KLXN0YXRpYyBpbnQgc2hhcnBfbHNfZ2V0X21vZGVzKHN0cnVjdCBvbWFwX2Rz c19kZXZpY2UgKmRzc2RldiwKLQkJCSAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IHRvX3BhbmVsX2RhdGEoZHNz ZGV2KTsKLQotCXJldHVybiBvbWFwZHNzX2Rpc3BsYXlfZ2V0X21vZGVzKGNvbm5lY3RvciwgJmRk YXRhLT52bSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlX29wcyBz aGFycF9sc19vcHMgPSB7Ci0JLmNvbm5lY3QJPSBzaGFycF9sc19jb25uZWN0LAotCS5kaXNjb25u ZWN0CT0gc2hhcnBfbHNfZGlzY29ubmVjdCwKLQotCS5wcmVfZW5hYmxlCT0gc2hhcnBfbHNfcHJl X2VuYWJsZSwKLQkuZW5hYmxlCQk9IHNoYXJwX2xzX2VuYWJsZSwKLQkuZGlzYWJsZQk9IHNoYXJw X2xzX2Rpc2FibGUsCi0JLnBvc3RfZGlzYWJsZQk9IHNoYXJwX2xzX3Bvc3RfZGlzYWJsZSwKLQot CS5nZXRfbW9kZXMJPSBzaGFycF9sc19nZXRfbW9kZXMsCi19OwotCi1zdGF0aWMgIGludCBzaGFy cF9sc19nZXRfZ3Bpb19vZihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpbmRleCwgaW50IHZhbCwK LQljb25zdCBjaGFyICpkZXNjLCBzdHJ1Y3QgZ3Bpb19kZXNjICoqZ3Bpb2QpCi17Ci0Jc3RydWN0 IGdwaW9fZGVzYyAqZ2Q7Ci0KLQkqZ3Bpb2QgPSBOVUxMOwotCi0JZ2QgPSBkZXZtX2dwaW9kX2dl dF9pbmRleChkZXYsIGRlc2MsIGluZGV4LCBHUElPRF9PVVRfTE9XKTsKLQlpZiAoSVNfRVJSKGdk KSkKLQkJcmV0dXJuIFBUUl9FUlIoZ2QpOwotCi0JKmdwaW9kID0gZ2Q7Ci0JcmV0dXJuIDA7Ci19 Ci0KLXN0YXRpYyBpbnQgc2hhcnBfbHNfcHJvYmVfb2Yoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gcGxhdGZvcm1fZ2V0X2Ry dmRhdGEocGRldik7Ci0JaW50IHI7Ci0KLQlkZGF0YS0+dmNjID0gZGV2bV9yZWd1bGF0b3JfZ2V0 KCZwZGV2LT5kZXYsICJlbnZkZCIpOwotCWlmIChJU19FUlIoZGRhdGEtPnZjYykpIHsKLQkJZGV2 X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCByZWd1bGF0b3JcbiIpOwotCQlyZXR1cm4g UFRSX0VSUihkZGF0YS0+dmNjKTsKLQl9Ci0KLQkvKiBsY2QgSU5JICovCi0JciA9IHNoYXJwX2xz X2dldF9ncGlvX29mKCZwZGV2LT5kZXYsIDAsIDAsICJlbmFibGUiLCAmZGRhdGEtPmluaV9ncGlv KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0KLQkvKiBsY2QgUkVTQiAqLwotCXIgPSBzaGFycF9s c19nZXRfZ3Bpb19vZigmcGRldi0+ZGV2LCAwLCAwLCAicmVzZXQiLCAmZGRhdGEtPnJlc2JfZ3Bp byk7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCi0JLyogbGNkIE1PICovCi0JciA9IHNoYXJwX2xz X2dldF9ncGlvX29mKCZwZGV2LT5kZXYsIDAsIDAsICJtb2RlIiwgJmRkYXRhLT5tb19ncGlvKTsK LQlpZiAocikKLQkJcmV0dXJuIHI7Ci0KLQkvKiBsY2QgTFIgKi8KLQlyID0gc2hhcnBfbHNfZ2V0 X2dwaW9fb2YoJnBkZXYtPmRldiwgMSwgMSwgIm1vZGUiLCAmZGRhdGEtPmxyX2dwaW8pOwotCWlm IChyKQotCQlyZXR1cm4gcjsKLQotCS8qIGxjZCBVRCAqLwotCXIgPSBzaGFycF9sc19nZXRfZ3Bp b19vZigmcGRldi0+ZGV2LCAyLCAxLCAibW9kZSIsICZkZGF0YS0+dWRfZ3Bpbyk7Ci0JaWYgKHIp Ci0JCXJldHVybiByOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2hhcnBfbHNfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2Rh dGEgKmRkYXRhOwotCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldjsKLQlpbnQgcjsKLQot CWRkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZGRhdGEpLCBHRlBfS0VS TkVMKTsKLQlpZiAoZGRhdGEgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlwbGF0Zm9y bV9zZXRfZHJ2ZGF0YShwZGV2LCBkZGF0YSk7Ci0KLQlyID0gc2hhcnBfbHNfcHJvYmVfb2YocGRl dik7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCi0JZGRhdGEtPnZtID0gc2hhcnBfbHNfdm07Ci0K LQlkc3NkZXYgPSAmZGRhdGEtPmRzc2RldjsKLQlkc3NkZXYtPmRldiA9ICZwZGV2LT5kZXY7Ci0J ZHNzZGV2LT5vcHMgPSAmc2hhcnBfbHNfb3BzOwotCWRzc2Rldi0+dHlwZSA9IE9NQVBfRElTUExB WV9UWVBFX0RQSTsKLQlkc3NkZXYtPmRpc3BsYXkgPSB0cnVlOwotCWRzc2Rldi0+b3duZXIgPSBU SElTX01PRFVMRTsKLQlkc3NkZXYtPm9mX3BvcnQgPSAwOwotCWRzc2Rldi0+b3BzX2ZsYWdzID0g T01BUF9EU1NfREVWSUNFX09QX01PREVTOwotCi0JLyoKLQkgKiBOb3RlOiBBY2NvcmRpbmcgdG8g dGhlIHBhbmVsIGRvY3VtZW50YXRpb246Ci0JICogREFUQSBuZWVkcyB0byBiZSBkcml2ZW4gb24g dGhlIEZBTExJTkcgZWRnZQotCSAqLwotCWRzc2Rldi0+YnVzX2ZsYWdzID0gRFJNX0JVU19GTEFH X0RFX0hJR0gKLQkJCSAgfCBEUk1fQlVTX0ZMQUdfU1lOQ19EUklWRV9ORUdFREdFCi0JCQkgIHwg RFJNX0JVU19GTEFHX1BJWERBVEFfRFJJVkVfUE9TRURHRTsKLQotCW9tYXBkc3NfZGlzcGxheV9p bml0KGRzc2Rldik7Ci0Jb21hcGRzc19kZXZpY2VfcmVnaXN0ZXIoZHNzZGV2KTsKLQotCXJldHVy biAwOwotfQotCi1zdGF0aWMgaW50IF9fZXhpdCBzaGFycF9sc19yZW1vdmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gcGxh dGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2 ID0gJmRkYXRhLT5kc3NkZXY7Ci0KLQlvbWFwZHNzX2RldmljZV91bnJlZ2lzdGVyKGRzc2Rldik7 Ci0KLQlpZiAob21hcGRzc19kZXZpY2VfaXNfZW5hYmxlZChkc3NkZXYpKSB7Ci0JCXNoYXJwX2xz X2Rpc2FibGUoZHNzZGV2KTsKLQkJc2hhcnBfbHNfcG9zdF9kaXNhYmxlKGRzc2Rldik7Ci0JfQot Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNoYXJw X2xzX29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJvbWFwZHNzLHNoYXJwLGxzMDM3 djdkdzAxIiwgfSwKLQl7fSwKLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHNoYXJwX2xz X29mX21hdGNoKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2hhcnBfbHNfZHJp dmVyID0gewotCS5wcm9iZSA9IHNoYXJwX2xzX3Byb2JlLAotCS5yZW1vdmUgPSBfX2V4aXRfcChz aGFycF9sc19yZW1vdmUpLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInBhbmVsLXNoYXJwLWxz MDM3djdkdzAxIiwKLQkJLm9mX21hdGNoX3RhYmxlID0gc2hhcnBfbHNfb2ZfbWF0Y2gsCi0JCS5z dXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwKLQl9LAotfTsKLQotbW9kdWxlX3BsYXRmb3JtX2Ry aXZlcihzaGFycF9sc19kcml2ZXIpOwotCi1NT0RVTEVfQVVUSE9SKCJUb21pIFZhbGtlaW5lbiA8 dG9taS52YWxrZWluZW5AdGkuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTaGFycCBMUzAz N1Y3RFcwMSBQYW5lbCBEcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rpc3BsYXlzL3BhbmVsLXNvbnktYWN4NTY1YWtt LmMgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kaXNwbGF5cy9wYW5lbC1zb255LWFjeDU2NWFr bS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzM3OWY3MWJkODguLjAwMDAwMDAw MDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9kaXNwbGF5cy9wYW5lbC1zb255LWFj eDU2NWFrbS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzY2ICswLDAgQEAKLS8qCi0gKiBTb255IEFD WDU2NUFLTSBMQ0QgUGFuZWwgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lh IENvcnBvcmF0aW9uCi0gKgotICogT3JpZ2luYWwgRHJpdmVyIEF1dGhvcjogSW1yZSBEZWFrIDxp bXJlLmRlYWtAbm9raWEuY29tPgotICogQmFzZWQgb24gcGFuZWwtZ2VuZXJpYy5jIGJ5IFRvbWkg VmFsa2VpbmVuIDx0b21pLnZhbGtlaW5lbkB0aS5jb20+Ci0gKiBBZGFwdGVkIHRvIG5ldyBEU1My IGZyYW1ld29yazogUm9nZXIgUXVhZHJvcyA8cm9nZXIucXVhZHJvc0Bub2tpYS5jb20+Ci0gKgot ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElU WSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+ Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVy Lmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o PgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rl dmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3Nw aS5oPgotCi0jaW5jbHVkZSAiLi4vZHNzL29tYXBkc3MuaCIKLQotI2RlZmluZSBNSVBJRF9DTURf UkVBRF9ESVNQX0lECQkweDA0Ci0jZGVmaW5lIE1JUElEX0NNRF9SRUFEX1JFRAkJMHgwNgotI2Rl ZmluZSBNSVBJRF9DTURfUkVBRF9HUkVFTgkJMHgwNwotI2RlZmluZSBNSVBJRF9DTURfUkVBRF9C TFVFCQkweDA4Ci0jZGVmaW5lIE1JUElEX0NNRF9SRUFEX0RJU1BfU1RBVFVTCTB4MDkKLSNkZWZp bmUgTUlQSURfQ01EX1JERFNEUgkJMHgwRgotI2RlZmluZSBNSVBJRF9DTURfU0xFRVBfSU4JCTB4 MTAKLSNkZWZpbmUgTUlQSURfQ01EX1NMRUVQX09VVAkJMHgxMQotI2RlZmluZSBNSVBJRF9DTURf RElTUF9PRkYJCTB4MjgKLSNkZWZpbmUgTUlQSURfQ01EX0RJU1BfT04JCTB4MjkKLSNkZWZpbmUg TUlQSURfQ01EX1dSSVRFX0RJU1BfQlJJR0hUTkVTUwkweDUxCi0jZGVmaW5lIE1JUElEX0NNRF9S RUFEX0RJU1BfQlJJR0hUTkVTUwkweDUyCi0jZGVmaW5lIE1JUElEX0NNRF9XUklURV9DVFJMX0RJ U1AJMHg1MwotCi0jZGVmaW5lIENUUkxfRElTUF9CUklHSFRORVNTX0NUUkxfT04JKDEgPDwgNSkK LSNkZWZpbmUgQ1RSTF9ESVNQX0FNQklFTlRfTElHSFRfQ1RSTF9PTgkoMSA8PCA0KQotI2RlZmlu ZSBDVFJMX0RJU1BfQkFDS0xJR0hUX09OCQkoMSA8PCAyKQotI2RlZmluZSBDVFJMX0RJU1BfQVVU T19CUklHSFRORVNTX09OCSgxIDw8IDEpCi0KLSNkZWZpbmUgTUlQSURfQ01EX1JFQURfQ1RSTF9E SVNQCTB4NTQKLSNkZWZpbmUgTUlQSURfQ01EX1dSSVRFX0NBQkMJCTB4NTUKLSNkZWZpbmUgTUlQ SURfQ01EX1JFQURfQ0FCQwkJMHg1NgotCi0jZGVmaW5lIE1JUElEX1ZFUl9MUEg4OTIzCQkzCi0j ZGVmaW5lIE1JUElEX1ZFUl9MUzA0MVkzCQk0Ci0jZGVmaW5lIE1JUElEX1ZFUl9MNEYwMDMxMQkJ OAotI2RlZmluZSBNSVBJRF9WRVJfQUNYNTY1QUtNCQk5Ci0KLXN0cnVjdCBwYW5lbF9kcnZfZGF0 YSB7Ci0Jc3RydWN0IG9tYXBfZHNzX2RldmljZQlkc3NkZXY7Ci0KLQlzdHJ1Y3QgZ3Bpb19kZXNj ICpyZXNldF9ncGlvOwotCi0Jc3RydWN0IHZpZGVvbW9kZSB2bTsKLQotCWNoYXIJCSpuYW1lOwot CWludAkJZW5hYmxlZDsKLQlpbnQJCW1vZGVsOwotCWludAkJcmV2aXNpb247Ci0JdTgJCWRpc3Bs YXlfaWRbM107Ci0JdW5zaWduZWQJaGFzX2JjOjE7Ci0JdW5zaWduZWQJaGFzX2NhYmM6MTsKLQl1 bnNpZ25lZAljYWJjX21vZGU7Ci0JdW5zaWduZWQgbG9uZwlod19ndWFyZF9lbmQ7CQkvKiBuZXh0 IHZhbHVlIG9mIGppZmZpZXMKLQkJCQkJCSAgIHdoZW4gd2UgY2FuIGlzc3VlIHRoZQotCQkJCQkJ ICAgbmV4dCBzbGVlcCBpbi9vdXQgY29tbWFuZCAqLwotCXVuc2lnbmVkIGxvbmcJaHdfZ3VhcmRf d2FpdDsJCS8qIG1heCBndWFyZCB0aW1lIGluIGppZmZpZXMgKi8KLQotCXN0cnVjdCBzcGlfZGV2 aWNlCSpzcGk7Ci0Jc3RydWN0IG11dGV4CQltdXRleDsKLQotCXN0cnVjdCBiYWNrbGlnaHRfZGV2 aWNlICpibF9kZXY7Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvbW9kZSBhY3g1NjVh a21fcGFuZWxfdm0gPSB7Ci0JLmhhY3RpdmUJPSA4MDAsCi0JLnZhY3RpdmUJPSA0ODAsCi0JLnBp eGVsY2xvY2sJPSAyNDAwMDAwMCwKLQkuaGZyb250X3BvcmNoCT0gMjgsCi0JLmhzeW5jX2xlbgk9 IDQsCi0JLmhiYWNrX3BvcmNoCT0gMjQsCi0JLnZmcm9udF9wb3JjaAk9IDMsCi0JLnZzeW5jX2xl bgk9IDMsCi0JLnZiYWNrX3BvcmNoCT0gNCwKLQotCS5mbGFncwkJPSBESVNQTEFZX0ZMQUdTX0hT WU5DX0xPVyB8IERJU1BMQVlfRkxBR1NfVlNZTkNfTE9XLAotfTsKLQotI2RlZmluZSB0b19wYW5l bF9kYXRhKHApIGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEsIGRzc2RldikK LQotc3RhdGljIHZvaWQgYWN4NTY1YWttX3RyYW5zZmVyKHN0cnVjdCBwYW5lbF9kcnZfZGF0YSAq ZGRhdGEsIGludCBjbWQsCi0JCQkgICAgICBjb25zdCB1OCAqd2J1ZiwgaW50IHdsZW4sIHU4ICpy YnVmLCBpbnQgcmxlbikKLXsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbTsKLQlzdHJ1Y3Qgc3BpX3Ry YW5zZmVyCSp4LCB4ZmVyWzVdOwotCWludAkJCXI7Ci0KLQlCVUdfT04oZGRhdGEtPnNwaSA9PSBO VUxMKTsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCi0JbWVtc2V0KHhmZXIsIDAsIHNpemVv Zih4ZmVyKSk7Ci0JeCA9ICZ4ZmVyWzBdOwotCi0JY21kICY9ICAweGZmOwotCXgtPnR4X2J1ZiA9 ICZjbWQ7Ci0JeC0+Yml0c19wZXJfd29yZCA9IDk7Ci0JeC0+bGVuID0gMjsKLQotCWlmIChybGVu ID4gMSAmJiB3bGVuID09IDApIHsKLQkJLyoKLQkJICogQmV0d2VlbiB0aGUgY29tbWFuZCBhbmQg dGhlIHJlc3BvbnNlIGRhdGEgdGhlcmUgaXMgYQotCQkgKiBkdW1teSBjbG9jayBjeWNsZS4gQWRk IGFuIGV4dHJhIGJpdCBhZnRlciB0aGUgY29tbWFuZAotCQkgKiB3b3JkIHRvIGFjY291bnQgZm9y IHRoaXMuCi0JCSAqLwotCQl4LT5iaXRzX3Blcl93b3JkID0gMTA7Ci0JCWNtZCA8PD0gMTsKLQl9 Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgJm0pOwotCi0JaWYgKHdsZW4pIHsKLQkJeCsrOwot CQl4LT50eF9idWYgPSB3YnVmOwotCQl4LT5sZW4gPSB3bGVuOwotCQl4LT5iaXRzX3Blcl93b3Jk ID0gOTsKLQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoeCwgJm0pOwotCX0KLQotCWlmIChybGVuKSB7 Ci0JCXgrKzsKLQkJeC0+cnhfYnVmCT0gcmJ1ZjsKLQkJeC0+bGVuCQk9IHJsZW47Ci0JCXNwaV9t ZXNzYWdlX2FkZF90YWlsKHgsICZtKTsKLQl9Ci0KLQlyID0gc3BpX3N5bmMoZGRhdGEtPnNwaSwg Jm0pOwotCWlmIChyIDwgMCkKLQkJZGV2X2RiZygmZGRhdGEtPnNwaS0+ZGV2LCAic3BpX3N5bmMg JWRcbiIsIHIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWN4NTY1YWttX2NtZChzdHJ1Y3Qg cGFuZWxfZHJ2X2RhdGEgKmRkYXRhLCBpbnQgY21kKQotewotCWFjeDU2NWFrbV90cmFuc2Zlcihk ZGF0YSwgY21kLCBOVUxMLCAwLCBOVUxMLCAwKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFj eDU2NWFrbV93cml0ZShzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhLAotCQkJICAgICAgIGlu dCByZWcsIGNvbnN0IHU4ICpidWYsIGludCBsZW4pCi17Ci0JYWN4NTY1YWttX3RyYW5zZmVyKGRk YXRhLCByZWcsIGJ1ZiwgbGVuLCBOVUxMLCAwKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFj eDU2NWFrbV9yZWFkKHN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEsCi0JCQkgICAgICBpbnQg cmVnLCB1OCAqYnVmLCBpbnQgbGVuKQotewotCWFjeDU2NWFrbV90cmFuc2ZlcihkZGF0YSwgcmVn LCBOVUxMLCAwLCBidWYsIGxlbik7Ci19Ci0KLXN0YXRpYyB2b2lkIGh3X2d1YXJkX3N0YXJ0KHN0 cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEsIGludCBndWFyZF9tc2VjKQotewotCWRkYXRhLT5o d19ndWFyZF93YWl0ID0gbXNlY3NfdG9famlmZmllcyhndWFyZF9tc2VjKTsKLQlkZGF0YS0+aHdf Z3VhcmRfZW5kID0gamlmZmllcyArIGRkYXRhLT5od19ndWFyZF93YWl0OwotfQotCi1zdGF0aWMg dm9pZCBod19ndWFyZF93YWl0KHN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEpCi17Ci0JdW5z aWduZWQgbG9uZyB3YWl0ID0gZGRhdGEtPmh3X2d1YXJkX2VuZCAtIGppZmZpZXM7Ci0KLQlpZiAo KGxvbmcpd2FpdCA+IDAgJiYgd2FpdCA8PSBkZGF0YS0+aHdfZ3VhcmRfd2FpdCkgewotCQlzZXRf Y3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCXNjaGVkdWxlX3RpbWVvdXQo d2FpdCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBzZXRfc2xlZXBfbW9kZShzdHJ1Y3QgcGFuZWxf ZHJ2X2RhdGEgKmRkYXRhLCBpbnQgb24pCi17Ci0JaW50IGNtZDsKLQotCWlmIChvbikKLQkJY21k ID0gTUlQSURfQ01EX1NMRUVQX0lOOwotCWVsc2UKLQkJY21kID0gTUlQSURfQ01EX1NMRUVQX09V VDsKLQkvKgotCSAqIFdlIGhhdmUgdG8ga2VlcCAxMjBtc2VjIGJldHdlZW4gc2xlZXAgaW4vb3V0 IGNvbW1hbmRzLgotCSAqICg4LjIuMTUsIDguMi4xNikuCi0JICovCi0JaHdfZ3VhcmRfd2FpdChk ZGF0YSk7Ci0JYWN4NTY1YWttX2NtZChkZGF0YSwgY21kKTsKLQlod19ndWFyZF9zdGFydChkZGF0 YSwgMTIwKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X2Rpc3BsYXlfc3RhdGUoc3RydWN0IHBhbmVs X2Rydl9kYXRhICpkZGF0YSwgaW50IGVuYWJsZWQpCi17Ci0JaW50IGNtZCA9IGVuYWJsZWQgPyBN SVBJRF9DTURfRElTUF9PTiA6IE1JUElEX0NNRF9ESVNQX09GRjsKLQotCWFjeDU2NWFrbV9jbWQo ZGRhdGEsIGNtZCk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFuZWxfZW5hYmxlZChzdHJ1Y3QgcGFuZWxf ZHJ2X2RhdGEgKmRkYXRhKQotewotCV9fYmUzMiB2OwotCXUzMiBkaXNwX3N0YXR1czsKLQlpbnQg ZW5hYmxlZDsKLQotCWFjeDU2NWFrbV9yZWFkKGRkYXRhLCBNSVBJRF9DTURfUkVBRF9ESVNQX1NU QVRVUywgKHU4ICopJnYsIDQpOwotCWRpc3Bfc3RhdHVzID0gX19iZTMyX3RvX2NwdSh2KTsKLQll bmFibGVkID0gKGRpc3Bfc3RhdHVzICYgKDEgPDwgMTcpKSAmJiAoZGlzcF9zdGF0dXMgJiAoMSA8 PCAxMCkpOwotCWRldl9kYmcoJmRkYXRhLT5zcGktPmRldiwKLQkJIkxDRCBwYW5lbCAlc2VuYWJs ZWQgYnkgYm9vdGxvYWRlciAoc3RhdHVzIDB4JTA0eClcbiIsCi0JCWVuYWJsZWQgPyAiIiA6ICJu b3QgIiwgZGlzcF9zdGF0dXMpOwotCXJldHVybiBlbmFibGVkOwotfQotCi1zdGF0aWMgaW50IHBh bmVsX2RldGVjdChzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhKQotewotCWFjeDU2NWFrbV9y ZWFkKGRkYXRhLCBNSVBJRF9DTURfUkVBRF9ESVNQX0lELCBkZGF0YS0+ZGlzcGxheV9pZCwgMyk7 Ci0JZGV2X2RiZygmZGRhdGEtPnNwaS0+ZGV2LCAiTUlQSSBkaXNwbGF5IElEOiAlMDJ4JTAyeCUw MnhcbiIsCi0JCWRkYXRhLT5kaXNwbGF5X2lkWzBdLAotCQlkZGF0YS0+ZGlzcGxheV9pZFsxXSwK LQkJZGRhdGEtPmRpc3BsYXlfaWRbMl0pOwotCi0Jc3dpdGNoIChkZGF0YS0+ZGlzcGxheV9pZFsw XSkgewotCWNhc2UgMHgxMDoKLQkJZGRhdGEtPm1vZGVsID0gTUlQSURfVkVSX0FDWDU2NUFLTTsK LQkJZGRhdGEtPm5hbWUgPSAiYWN4NTY1YWttIjsKLQkJZGRhdGEtPmhhc19iYyA9IDE7Ci0JCWRk YXRhLT5oYXNfY2FiYyA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgMHgyOToKLQkJZGRhdGEtPm1vZGVs ID0gTUlQSURfVkVSX0w0RjAwMzExOwotCQlkZGF0YS0+bmFtZSA9ICJsNGYwMDMxMSI7Ci0JCWJy ZWFrOwotCWNhc2UgMHg0NToKLQkJZGRhdGEtPm1vZGVsID0gTUlQSURfVkVSX0xQSDg5MjM7Ci0J CWRkYXRhLT5uYW1lID0gImxwaDg5MjMiOwotCQlicmVhazsKLQljYXNlIDB4ODM6Ci0JCWRkYXRh LT5tb2RlbCA9IE1JUElEX1ZFUl9MUzA0MVkzOwotCQlkZGF0YS0+bmFtZSA9ICJsczA0MXkzIjsK LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGRhdGEtPm5hbWUgPSAidW5rbm93biI7Ci0JCWRldl9l cnIoJmRkYXRhLT5zcGktPmRldiwgImludmFsaWQgZGlzcGxheSBJRFxuIik7Ci0JCXJldHVybiAt RU5PREVWOwotCX0KLQotCWRkYXRhLT5yZXZpc2lvbiA9IGRkYXRhLT5kaXNwbGF5X2lkWzFdOwot Ci0JZGV2X2luZm8oJmRkYXRhLT5zcGktPmRldiwgIm9tYXBmYjogJXMgcmV2ICUwMnggTENEIGRl dGVjdGVkXG4iLAotCQkJZGRhdGEtPm5hbWUsIGRkYXRhLT5yZXZpc2lvbik7Ci0KLQlyZXR1cm4g MDsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tQmFja2xpZ2h0IENvbnRyb2wtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHZvaWQgZW5hYmxlX2JhY2tsaWdodF9jdHJs KHN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEsIGludCBlbmFibGUpCi17Ci0JdTE2IGN0cmw7 Ci0KLQlhY3g1NjVha21fcmVhZChkZGF0YSwgTUlQSURfQ01EX1JFQURfQ1RSTF9ESVNQLCAodTgg KikmY3RybCwgMSk7Ci0JaWYgKGVuYWJsZSkgewotCQljdHJsIHw9IENUUkxfRElTUF9CUklHSFRO RVNTX0NUUkxfT04gfAotCQkJQ1RSTF9ESVNQX0JBQ0tMSUdIVF9PTjsKLQl9IGVsc2UgewotCQlj dHJsICY9IH4oQ1RSTF9ESVNQX0JSSUdIVE5FU1NfQ1RSTF9PTiB8Ci0JCQkgIENUUkxfRElTUF9C QUNLTElHSFRfT04pOwotCX0KLQotCWN0cmwgfD0gMSA8PCA4OwotCWFjeDU2NWFrbV93cml0ZShk ZGF0YSwgTUlQSURfQ01EX1dSSVRFX0NUUkxfRElTUCwgKHU4ICopJmN0cmwsIDIpOwotfQotCi1z dGF0aWMgdm9pZCBzZXRfY2FiY19tb2RlKHN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEsIHVu c2lnbmVkIGludCBtb2RlKQotewotCXUxNiBjYWJjX2N0cmw7Ci0KLQlkZGF0YS0+Y2FiY19tb2Rl ID0gbW9kZTsKLQlpZiAoIWRkYXRhLT5lbmFibGVkKQotCQlyZXR1cm47Ci0JY2FiY19jdHJsID0g MDsKLQlhY3g1NjVha21fcmVhZChkZGF0YSwgTUlQSURfQ01EX1JFQURfQ0FCQywgKHU4ICopJmNh YmNfY3RybCwgMSk7Ci0JY2FiY19jdHJsICY9IH4zOwotCWNhYmNfY3RybCB8PSAoMSA8PCA4KSB8 IChtb2RlICYgMyk7Ci0JYWN4NTY1YWttX3dyaXRlKGRkYXRhLCBNSVBJRF9DTURfV1JJVEVfQ0FC QywgKHU4ICopJmNhYmNfY3RybCwgMik7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2Nh YmNfbW9kZShzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhKQotewotCXJldHVybiBkZGF0YS0+ Y2FiY19tb2RlOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9od19jYWJjX21vZGUoc3Ry dWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSkKLXsKLQl1OCBjYWJjX2N0cmw7Ci0KLQlhY3g1NjVh a21fcmVhZChkZGF0YSwgTUlQSURfQ01EX1JFQURfQ0FCQywgJmNhYmNfY3RybCwgMSk7Ci0JcmV0 dXJuIGNhYmNfY3RybCAmIDM7Ci19Ci0KLXN0YXRpYyB2b2lkIGFjeDU2NWFrbV9zZXRfYnJpZ2h0 bmVzcyhzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhLCBpbnQgbGV2ZWwpCi17Ci0JaW50IGJ2 OwotCi0JYnYgPSBsZXZlbCB8ICgxIDw8IDgpOwotCWFjeDU2NWFrbV93cml0ZShkZGF0YSwgTUlQ SURfQ01EX1dSSVRFX0RJU1BfQlJJR0hUTkVTUywgKHU4ICopJmJ2LCAyKTsKLQotCWlmIChsZXZl bCkKLQkJZW5hYmxlX2JhY2tsaWdodF9jdHJsKGRkYXRhLCAxKTsKLQllbHNlCi0JCWVuYWJsZV9i YWNrbGlnaHRfY3RybChkZGF0YSwgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgYWN4NTY1YWttX2dldF9h Y3R1YWxfYnJpZ2h0bmVzcyhzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhKQotewotCXU4IGJ2 OwotCi0JYWN4NTY1YWttX3JlYWQoZGRhdGEsIE1JUElEX0NNRF9SRUFEX0RJU1BfQlJJR0hUTkVT UywgJmJ2LCAxKTsKLQotCXJldHVybiBidjsKLX0KLQotCi1zdGF0aWMgaW50IGFjeDU2NWFrbV9i bF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0 IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOwotCWlu dCBsZXZlbDsKLQotCWRldl9kYmcoJmRkYXRhLT5zcGktPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7 Ci0KLQlpZiAoZGV2LT5wcm9wcy5mYl9ibGFuayA9PSBGQl9CTEFOS19VTkJMQU5LICYmCi0JCQlk ZXYtPnByb3BzLnBvd2VyID09IEZCX0JMQU5LX1VOQkxBTkspCi0JCWxldmVsID0gZGV2LT5wcm9w cy5icmlnaHRuZXNzOwotCWVsc2UKLQkJbGV2ZWwgPSAwOwotCi0JaWYgKGRkYXRhLT5oYXNfYmMp Ci0JCWFjeDU2NWFrbV9zZXRfYnJpZ2h0bmVzcyhkZGF0YSwgbGV2ZWwpOwotCWVsc2UKLQkJcmV0 dXJuIC1FTk9ERVY7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhY3g1NjVha21fYmxf Z2V0X2ludGVuc2l0eShzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBw YW5lbF9kcnZfZGF0YSAqZGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKLQotCWRl dl9kYmcoJmRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCWlmICghZGRhdGEtPmhhc19i YykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoZGV2LT5wcm9wcy5mYl9ibGFuayA9PSBGQl9C TEFOS19VTkJMQU5LICYmCi0JCQlkZXYtPnByb3BzLnBvd2VyID09IEZCX0JMQU5LX1VOQkxBTksp IHsKLQkJaWYgKGRkYXRhLT5oYXNfYmMpCi0JCQlyZXR1cm4gYWN4NTY1YWttX2dldF9hY3R1YWxf YnJpZ2h0bmVzcyhkZGF0YSk7Ci0JCWVsc2UKLQkJCXJldHVybiBkZXYtPnByb3BzLmJyaWdodG5l c3M7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWN4NTY1YWttX2JsX3VwZGF0 ZV9zdGF0dXNfbG9ja2VkKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0 IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOwotCWlu dCByOwotCi0JbXV0ZXhfbG9jaygmZGRhdGEtPm11dGV4KTsKLQlyID0gYWN4NTY1YWttX2JsX3Vw ZGF0ZV9zdGF0dXMoZGV2KTsKLQltdXRleF91bmxvY2soJmRkYXRhLT5tdXRleCk7Ci0KLQlyZXR1 cm4gcjsKLX0KLQotc3RhdGljIGludCBhY3g1NjVha21fYmxfZ2V0X2ludGVuc2l0eV9sb2NrZWQo c3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEg KmRkYXRhID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7Ci0JaW50IHI7Ci0KLQltdXRleF9s b2NrKCZkZGF0YS0+bXV0ZXgpOwotCXIgPSBhY3g1NjVha21fYmxfZ2V0X2ludGVuc2l0eShkZXYp OwotCW11dGV4X3VubG9jaygmZGRhdGEtPm11dGV4KTsKLQotCXJldHVybiByOwotfQotCi1zdGF0 aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgYWN4NTY1YWttX2JsX29wcyA9IHsKLQkuZ2V0 X2JyaWdodG5lc3MgPSBhY3g1NjVha21fYmxfZ2V0X2ludGVuc2l0eV9sb2NrZWQsCi0JLnVwZGF0 ZV9zdGF0dXMgID0gYWN4NTY1YWttX2JsX3VwZGF0ZV9zdGF0dXNfbG9ja2VkLAotfTsKLQotLyot LS0tLS0tLS0tLS0tLS0tLS0tLUF1dG8gQnJpZ2h0bmVzcyBjb250cm9sIHZpYSBTeXNmcy0tLS0t LS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2FiY19tb2Rl c1tdID0gewotCSJvZmYiLAkJLyogYWx3YXlzIHVzZWQgd2hlbiBDQUJDIGlzIG5vdCBzdXBwb3J0 ZWQgKi8KLQkidWkiLAotCSJzdGlsbC1pbWFnZSIsCi0JIm1vdmluZy1pbWFnZSIsCi19OwotCi1z dGF0aWMgc3NpemVfdCBzaG93X2NhYmNfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IHBhbmVs X2Rydl9kYXRhICpkZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWNvbnN0IGNoYXIgKm1v ZGVfc3RyOwotCWludCBtb2RlOwotCWludCBsZW47Ci0KLQlpZiAoIWRkYXRhLT5oYXNfY2FiYykK LQkJbW9kZSA9IDA7Ci0JZWxzZQotCQltb2RlID0gZ2V0X2NhYmNfbW9kZShkZGF0YSk7Ci0JbW9k ZV9zdHIgPSAidW5rbm93biI7Ci0JaWYgKG1vZGUgPj0gMCAmJiBtb2RlIDwgQVJSQVlfU0laRShj YWJjX21vZGVzKSkKLQkJbW9kZV9zdHIgPSBjYWJjX21vZGVzW21vZGVdOwotCWxlbiA9IHNucHJp bnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIG1vZGVfc3RyKTsKLQotCXJldHVybiBsZW4gPCBQ QUdFX1NJWkUgLSAxID8gbGVuIDogUEFHRV9TSVpFIC0gMTsKLX0KLQotc3RhdGljIHNzaXplX3Qg c3RvcmVfY2FiY19tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IGRldmljZV9hdHRy aWJ1dGUgKmF0dHIsCi0JCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVj dCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgaTsK LQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNhYmNfbW9kZXMpOyBpKyspIHsKLQkJY29u c3QgY2hhciAqbW9kZV9zdHIgPSBjYWJjX21vZGVzW2ldOwotCQlpbnQgY21wX2xlbiA9IHN0cmxl bihtb2RlX3N0cik7Ci0KLQkJaWYgKGNvdW50ID4gMCAmJiBidWZbY291bnQgLSAxXSA9PSAnXG4n KQotCQkJY291bnQtLTsKLQkJaWYgKGNvdW50ICE9IGNtcF9sZW4pCi0JCQljb250aW51ZTsKLQot CQlpZiAoc3RybmNtcChidWYsIG1vZGVfc3RyLCBjbXBfbGVuKSA9PSAwKQotCQkJYnJlYWs7Ci0J fQotCi0JaWYgKGkgPT0gQVJSQVlfU0laRShjYWJjX21vZGVzKSkKLQkJcmV0dXJuIC1FSU5WQUw7 Ci0KLQlpZiAoIWRkYXRhLT5oYXNfY2FiYyAmJiBpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwot Ci0JbXV0ZXhfbG9jaygmZGRhdGEtPm11dGV4KTsKLQlzZXRfY2FiY19tb2RlKGRkYXRhLCBpKTsK LQltdXRleF91bmxvY2soJmRkYXRhLT5tdXRleCk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0 YXRpYyBzc2l6ZV90IHNob3dfY2FiY19hdmFpbGFibGVfbW9kZXMoc3RydWN0IGRldmljZSAqZGV2 LAotCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQotewotCXN0 cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQg bGVuOwotCWludCBpOwotCi0JaWYgKCFkZGF0YS0+aGFzX2NhYmMpCi0JCXJldHVybiBzbnByaW50 ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBjYWJjX21vZGVzWzBdKTsKLQotCWZvciAoaSA9IDAs IGxlbiA9IDA7Ci0JICAgICBsZW4gPCBQQUdFX1NJWkUgJiYgaSA8IEFSUkFZX1NJWkUoY2FiY19t b2Rlcyk7IGkrKykKLQkJbGVuICs9IHNucHJpbnRmKCZidWZbbGVuXSwgUEFHRV9TSVpFIC0gbGVu LCAiJXMlcyVzIiwKLQkJCWkgPyAiICIgOiAiIiwgY2FiY19tb2Rlc1tpXSwKLQkJCWkgPT0gQVJS QVlfU0laRShjYWJjX21vZGVzKSAtIDEgPyAiXG4iIDogIiIpOwotCi0JcmV0dXJuIGxlbiA8IFBB R0VfU0laRSA/IGxlbiA6IFBBR0VfU0laRSAtIDE7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihj YWJjX21vZGUsIFNfSVJVR08gfCBTX0lXVVNSLAotCQlzaG93X2NhYmNfbW9kZSwgc3RvcmVfY2Fi Y19tb2RlKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihjYWJjX2F2YWlsYWJsZV9tb2RlcywgU19JUlVH TywKLQkJc2hvd19jYWJjX2F2YWlsYWJsZV9tb2RlcywgTlVMTCk7Ci0KLXN0YXRpYyBzdHJ1Y3Qg YXR0cmlidXRlICpibGRldl9hdHRyc1tdID0gewotCSZkZXZfYXR0cl9jYWJjX21vZGUuYXR0ciwK LQkmZGV2X2F0dHJfY2FiY19hdmFpbGFibGVfbW9kZXMuYXR0ciwKLQlOVUxMLAotfTsKLQotc3Rh dGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYmxkZXZfYXR0cl9ncm91cCA9IHsKLQku YXR0cnMgPSBibGRldl9hdHRycywKLX07Ci0KLXN0YXRpYyBpbnQgYWN4NTY1YWttX2Nvbm5lY3Qo c3RydWN0IG9tYXBfZHNzX2RldmljZSAqc3JjLAotCQkJICAgICBzdHJ1Y3Qgb21hcF9kc3NfZGV2 aWNlICpkc3QpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGFjeDU2NWFrbV9kaXNj b25uZWN0KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKnNyYywKLQkJCQkgc3RydWN0IG9tYXBfZHNz X2RldmljZSAqZHN0KQotewotfQotCi1zdGF0aWMgaW50IGFjeDU2NWFrbV9wYW5lbF9wb3dlcl9v bihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9k YXRhICpkZGF0YSA9IHRvX3BhbmVsX2RhdGEoZHNzZGV2KTsKLQotCWRldl9kYmcoJmRkYXRhLT5z cGktPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQkvKkZJWE1FIHR3ZWFrIG1lICovCi0JbXNs ZWVwKDUwKTsKLQotCWlmIChkZGF0YS0+cmVzZXRfZ3BpbykKLQkJZ3Bpb2Rfc2V0X3ZhbHVlKGRk YXRhLT5yZXNldF9ncGlvLCAxKTsKLQotCWlmIChkZGF0YS0+ZW5hYmxlZCkgewotCQlkZXZfZGJn KCZkZGF0YS0+c3BpLT5kZXYsICJwYW5lbCBhbHJlYWR5IGVuYWJsZWRcbiIpOwotCQlyZXR1cm4g MDsKLQl9Ci0KLQkvKgotCSAqIFdlIGhhdmUgdG8gbWVldCBhbGwgdGhlIGZvbGxvd2luZyBkZWxh eSByZXF1aXJlbWVudHM6Ci0JICogMS4gdFJXOiByZXNldCBwdWxzZSB3aWR0aCAxMHVzZWMgKDcu MTIuMSkKLQkgKiAyLiB0UlQ6IHJlc2V0IGNhbmNlbCB0aW1lIDVtc2VjICg3LjEyLjEpCi0JICog My4gUHJvdmlkaW5nIFBDTEssSFMsVlMgc2lnbmFscyBmb3IgMiBmcmFtZXMgPSB+NTBtc2VjIHdv cnN0Ci0JICogICAgY2FzZSAoNy42LjIpCi0JICogNC4gMTIwbXNlYyBiZWZvcmUgdGhlIHNsZWVw IG91dCBjb21tYW5kICg3LjEyLjEpCi0JICovCi0JbXNsZWVwKDEyMCk7Ci0KLQlzZXRfc2xlZXBf bW9kZShkZGF0YSwgMCk7Ci0JZGRhdGEtPmVuYWJsZWQgPSAxOwotCi0JLyogNW1zZWMgYmV0d2Vl biBzbGVlcCBvdXQgYW5kIHRoZSBuZXh0IGNvbW1hbmQuICg4LjIuMTYpICovCi0JdXNsZWVwX3Jh bmdlKDUwMDAsIDEwMDAwKTsKLQlzZXRfZGlzcGxheV9zdGF0ZShkZGF0YSwgMSk7Ci0Jc2V0X2Nh YmNfbW9kZShkZGF0YSwgZGRhdGEtPmNhYmNfbW9kZSk7Ci0KLQlyZXR1cm4gYWN4NTY1YWttX2Js X3VwZGF0ZV9zdGF0dXMoZGRhdGEtPmJsX2Rldik7Ci19Ci0KLXN0YXRpYyB2b2lkIGFjeDU2NWFr bV9wYW5lbF9wb3dlcl9vZmYoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCXN0 cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSB0b19wYW5lbF9kYXRhKGRzc2Rldik7Ci0KLQlk ZXZfZGJnKGRzc2Rldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCWlmICghZGRhdGEtPmVu YWJsZWQpCi0JCXJldHVybjsKLQotCXNldF9kaXNwbGF5X3N0YXRlKGRkYXRhLCAwKTsKLQlzZXRf c2xlZXBfbW9kZShkZGF0YSwgMSk7Ci0JZGRhdGEtPmVuYWJsZWQgPSAwOwotCS8qCi0JICogV2Ug aGF2ZSB0byBwcm92aWRlIFBDTEssSFMsVlMgc2lnbmFscyBmb3IgMiBmcmFtZXMgKHdvcnN0IGNh c2UKLQkgKiB+NTBtc2VjKSBhZnRlciBzZW5kaW5nIHRoZSBzbGVlcCBpbiBjb21tYW5kIGFuZCBh c3NlcnRpbmcgdGhlCi0JICogcmVzZXQgc2lnbmFsLiBXZSBwcm9iYWJseSBjb3VsZCBhc3NlcnQg dGhlIHJlc2V0IHcvbyB0aGUgZGVsYXkKLQkgKiBidXQgd2Ugc3RpbGwgZGVsYXkgdG8gYXZvaWQg cG9zc2libGUgYXJ0aWZhY3RzLiAoNy42LjEpCi0JICovCi0JbXNsZWVwKDUwKTsKLQotCWlmIChk ZGF0YS0+cmVzZXRfZ3BpbykKLQkJZ3Bpb2Rfc2V0X3ZhbHVlKGRkYXRhLT5yZXNldF9ncGlvLCAw KTsKLQotCS8qIEZJWE1FIG5lZWQgdG8gdHdlYWsgdGhpcyBkZWxheSAqLwotCW1zbGVlcCgxMDAp OwotfQotCi1zdGF0aWMgdm9pZCBhY3g1NjVha21fZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZp Y2UgKmRzc2RldikKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gdG9fcGFuZWxf ZGF0YShkc3NkZXYpOwotCi0JbXV0ZXhfbG9jaygmZGRhdGEtPm11dGV4KTsKLQlhY3g1NjVha21f cGFuZWxfcG93ZXJfb24oZHNzZGV2KTsKLQltdXRleF91bmxvY2soJmRkYXRhLT5tdXRleCk7Ci19 Ci0KLXN0YXRpYyB2b2lkIGFjeDU2NWFrbV9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2Ug KmRzc2RldikKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gdG9fcGFuZWxfZGF0 YShkc3NkZXYpOwotCi0JbXV0ZXhfbG9jaygmZGRhdGEtPm11dGV4KTsKLQlhY3g1NjVha21fcGFu ZWxfcG93ZXJfb2ZmKGRzc2Rldik7Ci0JbXV0ZXhfdW5sb2NrKCZkZGF0YS0+bXV0ZXgpOwotfQot Ci1zdGF0aWMgaW50IGFjeDU2NWFrbV9nZXRfbW9kZXMoc3RydWN0IG9tYXBfZHNzX2RldmljZSAq ZHNzZGV2LAotCQkJICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0J c3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IHRvX3BhbmVsX2RhdGEoZHNzZGV2KTsKLQot CXJldHVybiBvbWFwZHNzX2Rpc3BsYXlfZ2V0X21vZGVzKGNvbm5lY3RvciwgJmRkYXRhLT52bSk7 Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlX29wcyBhY3g1NjVha21f b3BzID0gewotCS5jb25uZWN0CT0gYWN4NTY1YWttX2Nvbm5lY3QsCi0JLmRpc2Nvbm5lY3QJPSBh Y3g1NjVha21fZGlzY29ubmVjdCwKLQotCS5lbmFibGUJCT0gYWN4NTY1YWttX2VuYWJsZSwKLQku ZGlzYWJsZQk9IGFjeDU2NWFrbV9kaXNhYmxlLAotCi0JLmdldF9tb2Rlcwk9IGFjeDU2NWFrbV9n ZXRfbW9kZXMsCi19OwotCi1zdGF0aWMgaW50IGFjeDU2NWFrbV9wcm9iZShzdHJ1Y3Qgc3BpX2Rl dmljZSAqc3BpKQotewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGE7Ci0Jc3RydWN0IG9t YXBfZHNzX2RldmljZSAqZHNzZGV2OwotCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGRldjsK LQlpbnQgbWF4X2JyaWdodG5lc3MsIGJyaWdodG5lc3M7Ci0Jc3RydWN0IGJhY2tsaWdodF9wcm9w ZXJ0aWVzIHByb3BzOwotCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW87Ci0JaW50IHI7Ci0KLQlkZXZf ZGJnKCZzcGktPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlzcGktPm1vZGUgPSBTUElfTU9E RV8zOwotCi0JZGRhdGEgPSBkZXZtX2t6YWxsb2MoJnNwaS0+ZGV2LCBzaXplb2YoKmRkYXRhKSwg R0ZQX0tFUk5FTCk7Ci0JaWYgKGRkYXRhID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0J ZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgZGRhdGEpOwotCi0JZGRhdGEtPnNwaSA9IHNwaTsK LQotCW11dGV4X2luaXQoJmRkYXRhLT5tdXRleCk7Ci0KLQlncGlvID0gZGV2bV9ncGlvZF9nZXRf b3B0aW9uYWwoJnNwaS0+ZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfTE9XKTsKLQlpZiAoSVNfRVJS KGdwaW8pKSB7Ci0JCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIHBhcnNlIHJlc2V0IGdw aW9cbiIpOwotCQlyZXR1cm4gUFRSX0VSUihncGlvKTsKLQl9Ci0KLQlkZGF0YS0+cmVzZXRfZ3Bp byA9IGdwaW87Ci0KLQlpZiAoZGRhdGEtPnJlc2V0X2dwaW8pCi0JCWdwaW9kX3NldF92YWx1ZShk ZGF0YS0+cmVzZXRfZ3BpbywgMSk7Ci0KLQkvKgotCSAqIEFmdGVyIHJlc2V0IHdlIGhhdmUgdG8g d2FpdCA1IG1zZWMgYmVmb3JlIHRoZSBmaXJzdAotCSAqIGNvbW1hbmQgY2FuIGJlIHNlbnQuCi0J ICovCi0JdXNsZWVwX3JhbmdlKDUwMDAsIDEwMDAwKTsKLQotCWRkYXRhLT5lbmFibGVkID0gcGFu ZWxfZW5hYmxlZChkZGF0YSk7Ci0KLQlyID0gcGFuZWxfZGV0ZWN0KGRkYXRhKTsKLQotCWlmICgh ZGRhdGEtPmVuYWJsZWQgJiYgZGRhdGEtPnJlc2V0X2dwaW8pCi0JCWdwaW9kX3NldF92YWx1ZShk ZGF0YS0+cmVzZXRfZ3BpbywgMCk7Ci0KLQlpZiAocikgewotCQlkZXZfZXJyKCZzcGktPmRldiwg IiVzIHBhbmVsIGRldGVjdCBlcnJvclxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gcjsKLQl9Ci0K LQltZW1zZXQoJnByb3BzLCAwLCBzaXplb2YocHJvcHMpKTsKLQlwcm9wcy5mYl9ibGFuayA9IEZC X0JMQU5LX1VOQkxBTks7Ci0JcHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOwotCXByb3Bz LnR5cGUgPSBCQUNLTElHSFRfUkFXOwotCi0JYmxkZXYgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lz dGVyKCJhY3g1NjVha20iLCAmZGRhdGEtPnNwaS0+ZGV2LAotCQkJZGRhdGEsICZhY3g1NjVha21f Ymxfb3BzLCAmcHJvcHMpOwotCWlmIChJU19FUlIoYmxkZXYpKQotCQlyZXR1cm4gUFRSX0VSUihi bGRldik7Ci0JZGRhdGEtPmJsX2RldiA9IGJsZGV2OwotCWlmIChkZGF0YS0+aGFzX2NhYmMpIHsK LQkJciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmYmxkZXYtPmRldi5rb2JqLCAmYmxkZXZfYXR0cl9n cm91cCk7Ci0JCWlmIChyKSB7Ci0JCQlkZXZfZXJyKCZibGRldi0+ZGV2LAotCQkJCSIlcyBmYWls ZWQgdG8gY3JlYXRlIHN5c2ZzIGZpbGVzXG4iLCBfX2Z1bmNfXyk7Ci0JCQlnb3RvIGVycl9iYWNr bGlnaHRfdW5yZWdpc3RlcjsKLQkJfQotCQlkZGF0YS0+Y2FiY19tb2RlID0gZ2V0X2h3X2NhYmNf bW9kZShkZGF0YSk7Ci0JfQotCi0JbWF4X2JyaWdodG5lc3MgPSAyNTU7Ci0KLQlpZiAoZGRhdGEt Pmhhc19iYykKLQkJYnJpZ2h0bmVzcyA9IGFjeDU2NWFrbV9nZXRfYWN0dWFsX2JyaWdodG5lc3Mo ZGRhdGEpOwotCWVsc2UKLQkJYnJpZ2h0bmVzcyA9IDA7Ci0KLQlibGRldi0+cHJvcHMubWF4X2Jy aWdodG5lc3MgPSBtYXhfYnJpZ2h0bmVzczsKLQlibGRldi0+cHJvcHMuYnJpZ2h0bmVzcyA9IGJy aWdodG5lc3M7Ci0KLQlhY3g1NjVha21fYmxfdXBkYXRlX3N0YXR1cyhibGRldik7Ci0KLQotCWRk YXRhLT52bSA9IGFjeDU2NWFrbV9wYW5lbF92bTsKLQotCWRzc2RldiA9ICZkZGF0YS0+ZHNzZGV2 OwotCWRzc2Rldi0+ZGV2ID0gJnNwaS0+ZGV2OwotCWRzc2Rldi0+b3BzID0gJmFjeDU2NWFrbV9v cHM7Ci0JZHNzZGV2LT50eXBlID0gT01BUF9ESVNQTEFZX1RZUEVfU0RJOwotCWRzc2Rldi0+ZGlz cGxheSA9IHRydWU7Ci0JZHNzZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOwotCWRzc2Rldi0+b2Zf cG9ydCA9IDA7Ci0JZHNzZGV2LT5vcHNfZmxhZ3MgPSBPTUFQX0RTU19ERVZJQ0VfT1BfTU9ERVM7 Ci0JZHNzZGV2LT5idXNfZmxhZ3MgPSBEUk1fQlVTX0ZMQUdfREVfSElHSAotCQkJICB8IERSTV9C VVNfRkxBR19TWU5DX0RSSVZFX05FR0VER0UKLQkJCSAgfCBEUk1fQlVTX0ZMQUdfUElYREFUQV9E UklWRV9QT1NFREdFOwotCi0Jb21hcGRzc19kaXNwbGF5X2luaXQoZHNzZGV2KTsKLQlvbWFwZHNz X2RldmljZV9yZWdpc3Rlcihkc3NkZXYpOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9iYWNrbGlnaHRf dW5yZWdpc3RlcjoKLQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmxkZXYpOwotCXJldHVy biByOwotfQotCi1zdGF0aWMgaW50IGFjeDU2NWFrbV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2Ug KnNwaSkKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gZGV2X2dldF9kcnZkYXRh KCZzcGktPmRldik7Ci0Jc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2ID0gJmRkYXRhLT5k c3NkZXY7Ci0KLQlkZXZfZGJnKCZkZGF0YS0+c3BpLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwot Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZGF0YS0+YmxfZGV2LT5kZXYua29iaiwgJmJsZGV2X2F0 dHJfZ3JvdXApOwotCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihkZGF0YS0+YmxfZGV2KTsK LQotCW9tYXBkc3NfZGV2aWNlX3VucmVnaXN0ZXIoZHNzZGV2KTsKLQotCWlmIChvbWFwZHNzX2Rl dmljZV9pc19lbmFibGVkKGRzc2RldikpCi0JCWFjeDU2NWFrbV9kaXNhYmxlKGRzc2Rldik7Ci0K LQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYWN4NTY1 YWttX29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJvbWFwZHNzLHNvbnksYWN4NTY1 YWttIiwgfSwKLQl7fSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhY3g1NjVha21fb2Zf bWF0Y2gpOwotCi1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgYWN4NTY1YWttX2RyaXZlciA9IHsK LQkuZHJpdmVyID0gewotCQkubmFtZQk9ICJhY3g1NjVha20iLAotCQkub2ZfbWF0Y2hfdGFibGUg PSBhY3g1NjVha21fb2ZfbWF0Y2gsCi0JCS5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwKLQl9 LAotCS5wcm9iZQk9IGFjeDU2NWFrbV9wcm9iZSwKLQkucmVtb3ZlCT0gYWN4NTY1YWttX3JlbW92 ZSwKLX07Ci0KLW1vZHVsZV9zcGlfZHJpdmVyKGFjeDU2NWFrbV9kcml2ZXIpOwotCi1NT0RVTEVf QUxJQVMoInNwaTpzb255LGFjeDU2NWFrbSIpOwotTU9EVUxFX0FVVEhPUigiTm9raWEgQ29ycG9y YXRpb24iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiYWN4NTY1YWttIExDRCBEcml2ZXIiKTsKLU1P RFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJt L2Rpc3BsYXlzL3BhbmVsLXRwby10ZDAyOHR0ZWMxLmMgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRy bS9kaXNwbGF5cy9wYW5lbC10cG8tdGQwMjh0dGVjMS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCA4OTkzZGFhNzNlNzguLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v b21hcGRybS9kaXNwbGF5cy9wYW5lbC10cG8tdGQwMjh0dGVjMS5jCisrKyAvZGV2L251bGwKQEAg LTEsNDAxICswLDAgQEAKLS8qCi0gKiBUb3Bwb2x5IFREMDI4VFRFQzEgcGFuZWwgc3VwcG9ydAot ICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgotICogQXV0aG9yOiBU b21pIFZhbGtlaW5lbiA8dG9taS52YWxrZWluZW5AdGkuY29tPgotICoKLSAqIE5lbyAxOTczIGNv ZGUgKGpidDZrNzQuYyk6Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBieSBPcGVuTW9rbywg SW5jLgotICogQXV0aG9yOiBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAb3Blbm1va28ub3JnPgotICoK LSAqIFBvcnRlZCBhbmQgYWRhcHRlZCBmcm9tIE5lbyAxOTczIFUtQm9vdCBieToKLSAqIEguIE5p a29sYXVzIFNjaGFsbGVyIDxobnNAZ29sZGVsaWNvLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBp dAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2 ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAot ICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9k ZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLQotI2luY2x1ZGUgIi4uL2Rzcy9v bWFwZHNzLmgiCi0KLXN0cnVjdCBwYW5lbF9kcnZfZGF0YSB7Ci0Jc3RydWN0IG9tYXBfZHNzX2Rl dmljZSBkc3NkZXY7Ci0KLQlzdHJ1Y3QgdmlkZW9tb2RlIHZtOwotCi0Jc3RydWN0IGJhY2tsaWdo dF9kZXZpY2UgKmJhY2tsaWdodDsKLQotCXN0cnVjdCBzcGlfZGV2aWNlICpzcGlfZGV2OwotfTsK LQotc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb21vZGUgdGQwMjh0dGVjMV9wYW5lbF92bSA9IHsK LQkuaGFjdGl2ZQk9IDQ4MCwKLQkudmFjdGl2ZQk9IDY0MCwKLQkucGl4ZWxjbG9jawk9IDIyMTUz MDAwLAotCS5oZnJvbnRfcG9yY2gJPSAyNCwKLQkuaHN5bmNfbGVuCT0gOCwKLQkuaGJhY2tfcG9y Y2gJPSA4LAotCS52ZnJvbnRfcG9yY2gJPSA0LAotCS52c3luY19sZW4JPSAyLAotCS52YmFja19w b3JjaAk9IDIsCi0KLQkuZmxhZ3MJCT0gRElTUExBWV9GTEFHU19IU1lOQ19MT1cgfCBESVNQTEFZ X0ZMQUdTX1ZTWU5DX0xPVywKLX07Ci0KLSNkZWZpbmUgSkJUX0NPTU1BTkQJMHgwMDAKLSNkZWZp bmUgSkJUX0RBVEEJMHgxMDAKLQotc3RhdGljIGludCBqYnRfcmV0X3dyaXRlXzAoc3RydWN0IHBh bmVsX2Rydl9kYXRhICpkZGF0YSwgdTggcmVnKQotewotCWludCByYzsKLQl1MTYgdHhfYnVmID0g SkJUX0NPTU1BTkQgfCByZWc7Ci0KLQlyYyA9IHNwaV93cml0ZShkZGF0YS0+c3BpX2RldiwgKHU4 ICopJnR4X2J1ZiwKLQkJCTEqc2l6ZW9mKHUxNikpOwotCWlmIChyYyAhPSAwKQotCQlkZXZfZXJy KCZkZGF0YS0+c3BpX2Rldi0+ZGV2LAotCQkJImpidF9yZXRfd3JpdGVfMCBzcGlfd3JpdGUgcmV0 ICVkXG4iLCByYyk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgamJ0X3JlZ193cml0 ZV8xKHN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEsIHU4IHJlZywgdTggZGF0YSkKLXsKLQlp bnQgcmM7Ci0JdTE2IHR4X2J1ZlsyXTsKLQotCXR4X2J1ZlswXSA9IEpCVF9DT01NQU5EIHwgcmVn OwotCXR4X2J1ZlsxXSA9IEpCVF9EQVRBIHwgZGF0YTsKLQlyYyA9IHNwaV93cml0ZShkZGF0YS0+ c3BpX2RldiwgKHU4ICopdHhfYnVmLAotCQkJMipzaXplb2YodTE2KSk7Ci0JaWYgKHJjICE9IDAp Ci0JCWRldl9lcnIoJmRkYXRhLT5zcGlfZGV2LT5kZXYsCi0JCQkiamJ0X3JlZ193cml0ZV8xIHNw aV93cml0ZSByZXQgJWRcbiIsIHJjKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBq YnRfcmVnX3dyaXRlXzIoc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSwgdTggcmVnLCB1MTYg ZGF0YSkKLXsKLQlpbnQgcmM7Ci0JdTE2IHR4X2J1ZlszXTsKLQotCXR4X2J1ZlswXSA9IEpCVF9D T01NQU5EIHwgcmVnOwotCXR4X2J1ZlsxXSA9IEpCVF9EQVRBIHwgKGRhdGEgPj4gOCk7Ci0JdHhf YnVmWzJdID0gSkJUX0RBVEEgfCAoZGF0YSAmIDB4ZmYpOwotCi0JcmMgPSBzcGlfd3JpdGUoZGRh dGEtPnNwaV9kZXYsICh1OCAqKXR4X2J1ZiwKLQkJCTMqc2l6ZW9mKHUxNikpOwotCi0JaWYgKHJj ICE9IDApCi0JCWRldl9lcnIoJmRkYXRhLT5zcGlfZGV2LT5kZXYsCi0JCQkiamJ0X3JlZ193cml0 ZV8yIHNwaV93cml0ZSByZXQgJWRcbiIsIHJjKTsKLQotCXJldHVybiByYzsKLX0KLQotZW51bSBq YnRfcmVnaXN0ZXIgewotCUpCVF9SRUdfU0xFRVBfSU4JCT0gMHgxMCwKLQlKQlRfUkVHX1NMRUVQ X09VVAkJPSAweDExLAotCi0JSkJUX1JFR19ESVNQTEFZX09GRgkJPSAweDI4LAotCUpCVF9SRUdf RElTUExBWV9PTgkJPSAweDI5LAotCi0JSkJUX1JFR19SR0JfRk9STUFUCQk9IDB4M2EsCi0JSkJU X1JFR19RVUFEX1JBVEUJCT0gMHgzYiwKLQotCUpCVF9SRUdfUE9XRVJfT05fT0ZGCQk9IDB4YjAs Ci0JSkJUX1JFR19CT09TVEVSX09QCQk9IDB4YjEsCi0JSkJUX1JFR19CT09TVEVSX01PREUJCT0g MHhiMiwKLQlKQlRfUkVHX0JPT1NURVJfRlJFUQkJPSAweGIzLAotCUpCVF9SRUdfT1BBTVBfU1lT Q0xLCQk9IDB4YjQsCi0JSkJUX1JFR19WU0NfVk9MVEFHRQkJPSAweGI1LAotCUpCVF9SRUdfVkNP TV9WT0xUQUdFCQk9IDB4YjYsCi0JSkJUX1JFR19FWFRfRElTUEwJCT0gMHhiNywKLQlKQlRfUkVH X09VVFBVVF9DT05UUk9MCQk9IDB4YjgsCi0JSkJUX1JFR19EQ0NMS19EQ0VWCQk9IDB4YjksCi0J SkJUX1JFR19ESVNQTEFZX01PREUxCQk9IDB4YmEsCi0JSkJUX1JFR19ESVNQTEFZX01PREUyCQk9 IDB4YmIsCi0JSkJUX1JFR19ESVNQTEFZX01PREUJCT0gMHhiYywKLQlKQlRfUkVHX0FTV19TTEVX CQk9IDB4YmQsCi0JSkJUX1JFR19EVU1NWV9ESVNQTEFZCQk9IDB4YmUsCi0JSkJUX1JFR19EUklW RV9TWVNURU0JCT0gMHhiZiwKLQotCUpCVF9SRUdfU0xFRVBfT1VUX0ZSX0EJCT0gMHhjMCwKLQlK QlRfUkVHX1NMRUVQX09VVF9GUl9CCQk9IDB4YzEsCi0JSkJUX1JFR19TTEVFUF9PVVRfRlJfQwkJ PSAweGMyLAotCUpCVF9SRUdfU0xFRVBfSU5fTENDTlRfRAk9IDB4YzMsCi0JSkJUX1JFR19TTEVF UF9JTl9MQ0NOVF9FCT0gMHhjNCwKLQlKQlRfUkVHX1NMRUVQX0lOX0xDQ05UX0YJPSAweGM1LAot CUpCVF9SRUdfU0xFRVBfSU5fTENDTlRfRwk9IDB4YzYsCi0KLQlKQlRfUkVHX0dBTU1BMV9GSU5F XzEJCT0gMHhjNywKLQlKQlRfUkVHX0dBTU1BMV9GSU5FXzIJCT0gMHhjOCwKLQlKQlRfUkVHX0dB TU1BMV9JTkNMSU5BVElPTgk9IDB4YzksCi0JSkJUX1JFR19HQU1NQTFfQkxVRV9PRkZTRVQJPSAw eGNhLAotCi0JSkJUX1JFR19CTEFOS19DT05UUk9MCQk9IDB4Y2YsCi0JSkJUX1JFR19CTEFOS19U SF9UVgkJPSAweGQwLAotCUpCVF9SRUdfQ0tWX09OX09GRgkJPSAweGQxLAotCUpCVF9SRUdfQ0tW XzFfMgkJCT0gMHhkMiwKLQlKQlRfUkVHX09FVl9USU1JTkcJCT0gMHhkMywKLQlKQlRfUkVHX0FT V19USU1JTkdfMQkJPSAweGQ0LAotCUpCVF9SRUdfQVNXX1RJTUlOR18yCQk9IDB4ZDUsCi0KLQlK QlRfUkVHX0hDTE9DS19WR0EJCT0gMHhlYywKLQlKQlRfUkVHX0hDTE9DS19RVkdBCQk9IDB4ZWQs Ci19OwotCi0jZGVmaW5lIHRvX3BhbmVsX2RhdGEocCkgY29udGFpbmVyX29mKHAsIHN0cnVjdCBw YW5lbF9kcnZfZGF0YSwgZHNzZGV2KQotCi1zdGF0aWMgaW50IHRkMDI4dHRlYzFfcGFuZWxfY29u bmVjdChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpzcmMsCi0JCQkJICAgIHN0cnVjdCBvbWFwX2Rz c19kZXZpY2UgKmRzdCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdGQwMjh0dGVj MV9wYW5lbF9kaXNjb25uZWN0KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKnNyYywKLQkJCQkJc3Ry dWN0IG9tYXBfZHNzX2RldmljZSAqZHN0KQotewotfQotCi1zdGF0aWMgdm9pZCB0ZDAyOHR0ZWMx X3BhbmVsX2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0Jc3RydWN0 IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IHRvX3BhbmVsX2RhdGEoZHNzZGV2KTsKLQlpbnQgciA9 IDA7Ci0KLQlkZXZfZGJnKGRzc2Rldi0+ZGV2LCAiJXM6IHN0YXRlICVkXG4iLCBfX2Z1bmNfXywg ZHNzZGV2LT5zdGF0ZSk7Ci0KLQkvKiB0aHJlZSB0aW1lcyBjb21tYW5kIHplcm8gKi8KLQlyIHw9 IGpidF9yZXRfd3JpdGVfMChkZGF0YSwgMHgwMCk7Ci0JdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDAp OwotCXIgfD0gamJ0X3JldF93cml0ZV8wKGRkYXRhLCAweDAwKTsKLQl1c2xlZXBfcmFuZ2UoMTAw MCwgMjAwMCk7Ci0JciB8PSBqYnRfcmV0X3dyaXRlXzAoZGRhdGEsIDB4MDApOwotCXVzbGVlcF9y YW5nZSgxMDAwLCAyMDAwKTsKLQotCWlmIChyKSB7Ci0JCWRldl93YXJuKGRzc2Rldi0+ZGV2LCAi JXM6IHRyYW5zZmVyIGVycm9yXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBk ZWVwIHN0YW5kYnkgb3V0ICovCi0JciB8PSBqYnRfcmVnX3dyaXRlXzEoZGRhdGEsIEpCVF9SRUdf UE9XRVJfT05fT0ZGLCAweDE3KTsKLQotCS8qIFJHQiBJL0Ygb24sIFJBTSB3cml0ZSBvZmYsIFFW R0EgdGhyb3VnaCwgU0lHQ09OIGVuYWJsZSAqLwotCXIgfD0gamJ0X3JlZ193cml0ZV8xKGRkYXRh LCBKQlRfUkVHX0RJU1BMQVlfTU9ERSwgMHg4MCk7Ci0KLQkvKiBRdWFkIG1vZGUgb2ZmICovCi0J ciB8PSBqYnRfcmVnX3dyaXRlXzEoZGRhdGEsIEpCVF9SRUdfUVVBRF9SQVRFLCAweDAwKTsKLQot CS8qIEFWREQgb24sIFhWREQgb24gKi8KLQlyIHw9IGpidF9yZWdfd3JpdGVfMShkZGF0YSwgSkJU X1JFR19QT1dFUl9PTl9PRkYsIDB4MTYpOwotCi0JLyogT3V0cHV0IGNvbnRyb2wgKi8KLQlyIHw9 IGpidF9yZWdfd3JpdGVfMihkZGF0YSwgSkJUX1JFR19PVVRQVVRfQ09OVFJPTCwgMHhmZmY5KTsK LQotCS8qIFNsZWVwIG1vZGUgb2ZmICovCi0JciB8PSBqYnRfcmV0X3dyaXRlXzAoZGRhdGEsIEpC VF9SRUdfU0xFRVBfT1VUKTsKLQotCS8qIGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBsaWtlIDUwJSBn cmV5ICovCi0KLQkvKiBpbml0aWFsaXplIHJlZ2lzdGVyIHNldCAqLwotCXIgfD0gamJ0X3JlZ193 cml0ZV8xKGRkYXRhLCBKQlRfUkVHX0RJU1BMQVlfTU9ERTEsIDB4MDEpOwotCXIgfD0gamJ0X3Jl Z193cml0ZV8xKGRkYXRhLCBKQlRfUkVHX0RJU1BMQVlfTU9ERTIsIDB4MDApOwotCXIgfD0gamJ0 X3JlZ193cml0ZV8xKGRkYXRhLCBKQlRfUkVHX1JHQl9GT1JNQVQsIDB4NjApOwotCXIgfD0gamJ0 X3JlZ193cml0ZV8xKGRkYXRhLCBKQlRfUkVHX0RSSVZFX1NZU1RFTSwgMHgxMCk7Ci0JciB8PSBq YnRfcmVnX3dyaXRlXzEoZGRhdGEsIEpCVF9SRUdfQk9PU1RFUl9PUCwgMHg1Nik7Ci0JciB8PSBq YnRfcmVnX3dyaXRlXzEoZGRhdGEsIEpCVF9SRUdfQk9PU1RFUl9NT0RFLCAweDMzKTsKLQlyIHw9 IGpidF9yZWdfd3JpdGVfMShkZGF0YSwgSkJUX1JFR19CT09TVEVSX0ZSRVEsIDB4MTEpOwotCXIg fD0gamJ0X3JlZ193cml0ZV8xKGRkYXRhLCBKQlRfUkVHX0JPT1NURVJfRlJFUSwgMHgxMSk7Ci0J ciB8PSBqYnRfcmVnX3dyaXRlXzEoZGRhdGEsIEpCVF9SRUdfT1BBTVBfU1lTQ0xLLCAweDAyKTsK LQlyIHw9IGpidF9yZWdfd3JpdGVfMShkZGF0YSwgSkJUX1JFR19WU0NfVk9MVEFHRSwgMHgyYik7 Ci0JciB8PSBqYnRfcmVnX3dyaXRlXzEoZGRhdGEsIEpCVF9SRUdfVkNPTV9WT0xUQUdFLCAweDQw KTsKLQlyIHw9IGpidF9yZWdfd3JpdGVfMShkZGF0YSwgSkJUX1JFR19FWFRfRElTUEwsIDB4MDMp OwotCXIgfD0gamJ0X3JlZ193cml0ZV8xKGRkYXRhLCBKQlRfUkVHX0RDQ0xLX0RDRVYsIDB4MDQp OwotCS8qCi0JICogZGVmYXVsdCBvZiAweDAyIGluIEpCVF9SRUdfQVNXX1NMRVcgcmVzcG9uc2li bGUgZm9yIDcySHogcmVxdWlyZW1lbnQKLQkgKiB0byBhdm9pZCByZWQgLyBibHVlIGZsaWNrZXIK LQkgKi8KLQlyIHw9IGpidF9yZWdfd3JpdGVfMShkZGF0YSwgSkJUX1JFR19BU1dfU0xFVywgMHgw NCk7Ci0JciB8PSBqYnRfcmVnX3dyaXRlXzEoZGRhdGEsIEpCVF9SRUdfRFVNTVlfRElTUExBWSwg MHgwMCk7Ci0KLQlyIHw9IGpidF9yZWdfd3JpdGVfMShkZGF0YSwgSkJUX1JFR19TTEVFUF9PVVRf RlJfQSwgMHgxMSk7Ci0JciB8PSBqYnRfcmVnX3dyaXRlXzEoZGRhdGEsIEpCVF9SRUdfU0xFRVBf T1VUX0ZSX0IsIDB4MTEpOwotCXIgfD0gamJ0X3JlZ193cml0ZV8xKGRkYXRhLCBKQlRfUkVHX1NM RUVQX09VVF9GUl9DLCAweDExKTsKLQlyIHw9IGpidF9yZWdfd3JpdGVfMihkZGF0YSwgSkJUX1JF R19TTEVFUF9JTl9MQ0NOVF9ELCAweDIwNDApOwotCXIgfD0gamJ0X3JlZ193cml0ZV8yKGRkYXRh LCBKQlRfUkVHX1NMRUVQX0lOX0xDQ05UX0UsIDB4NjBjMCk7Ci0JciB8PSBqYnRfcmVnX3dyaXRl XzIoZGRhdGEsIEpCVF9SRUdfU0xFRVBfSU5fTENDTlRfRiwgMHgxMDIwKTsKLQlyIHw9IGpidF9y ZWdfd3JpdGVfMihkZGF0YSwgSkJUX1JFR19TTEVFUF9JTl9MQ0NOVF9HLCAweDYwYzApOwotCi0J ciB8PSBqYnRfcmVnX3dyaXRlXzIoZGRhdGEsIEpCVF9SRUdfR0FNTUExX0ZJTkVfMSwgMHg1NTMz KTsKLQlyIHw9IGpidF9yZWdfd3JpdGVfMShkZGF0YSwgSkJUX1JFR19HQU1NQTFfRklORV8yLCAw eDAwKTsKLQlyIHw9IGpidF9yZWdfd3JpdGVfMShkZGF0YSwgSkJUX1JFR19HQU1NQTFfSU5DTElO QVRJT04sIDB4MDApOwotCXIgfD0gamJ0X3JlZ193cml0ZV8xKGRkYXRhLCBKQlRfUkVHX0dBTU1B MV9CTFVFX09GRlNFVCwgMHgwMCk7Ci0KLQlyIHw9IGpidF9yZWdfd3JpdGVfMihkZGF0YSwgSkJU X1JFR19IQ0xPQ0tfVkdBLCAweDFmMCk7Ci0JciB8PSBqYnRfcmVnX3dyaXRlXzEoZGRhdGEsIEpC VF9SRUdfQkxBTktfQ09OVFJPTCwgMHgwMik7Ci0JciB8PSBqYnRfcmVnX3dyaXRlXzIoZGRhdGEs IEpCVF9SRUdfQkxBTktfVEhfVFYsIDB4MDgwNCk7Ci0KLQlyIHw9IGpidF9yZWdfd3JpdGVfMShk ZGF0YSwgSkJUX1JFR19DS1ZfT05fT0ZGLCAweDAxKTsKLQlyIHw9IGpidF9yZWdfd3JpdGVfMihk ZGF0YSwgSkJUX1JFR19DS1ZfMV8yLCAweDAwMDApOwotCi0JciB8PSBqYnRfcmVnX3dyaXRlXzIo ZGRhdGEsIEpCVF9SRUdfT0VWX1RJTUlORywgMHgwZDBlKTsKLQlyIHw9IGpidF9yZWdfd3JpdGVf MihkZGF0YSwgSkJUX1JFR19BU1dfVElNSU5HXzEsIDB4MTFhNCk7Ci0JciB8PSBqYnRfcmVnX3dy aXRlXzEoZGRhdGEsIEpCVF9SRUdfQVNXX1RJTUlOR18yLCAweDBlKTsKLQotCXIgfD0gamJ0X3Jl dF93cml0ZV8wKGRkYXRhLCBKQlRfUkVHX0RJU1BMQVlfT04pOwotCi0JaWYgKHIpCi0JCWRldl9l cnIoZHNzZGV2LT5kZXYsICIlczogd3JpdGUgZXJyb3JcbiIsIF9fZnVuY19fKTsKLQotCWJhY2ts aWdodF9lbmFibGUoZGRhdGEtPmJhY2tsaWdodCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRkMDI4dHRl YzFfcGFuZWxfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0Jc3Ry dWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IHRvX3BhbmVsX2RhdGEoZHNzZGV2KTsKLQotCWJh Y2tsaWdodF9kaXNhYmxlKGRkYXRhLT5iYWNrbGlnaHQpOwotCi0JZGV2X2RiZyhkc3NkZXYtPmRl diwgInRkMDI4dHRlYzFfcGFuZWxfZGlzYWJsZSgpXG4iKTsKLQotCWpidF9yZXRfd3JpdGVfMChk ZGF0YSwgSkJUX1JFR19ESVNQTEFZX09GRik7Ci0JamJ0X3JlZ193cml0ZV8yKGRkYXRhLCBKQlRf UkVHX09VVFBVVF9DT05UUk9MLCAweDgwMDIpOwotCWpidF9yZXRfd3JpdGVfMChkZGF0YSwgSkJU X1JFR19TTEVFUF9JTik7Ci0JamJ0X3JlZ193cml0ZV8xKGRkYXRhLCBKQlRfUkVHX1BPV0VSX09O X09GRiwgMHgwMCk7Ci19Ci0KLXN0YXRpYyBpbnQgdGQwMjh0dGVjMV9wYW5lbF9nZXRfbW9kZXMo c3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQkJCSAgICAgIHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IHRv X3BhbmVsX2RhdGEoZHNzZGV2KTsKLQotCXJldHVybiBvbWFwZHNzX2Rpc3BsYXlfZ2V0X21vZGVz KGNvbm5lY3RvciwgJmRkYXRhLT52bSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb21hcF9k c3NfZGV2aWNlX29wcyB0ZDAyOHR0ZWMxX29wcyA9IHsKLQkuY29ubmVjdAk9IHRkMDI4dHRlYzFf cGFuZWxfY29ubmVjdCwKLQkuZGlzY29ubmVjdAk9IHRkMDI4dHRlYzFfcGFuZWxfZGlzY29ubmVj dCwKLQotCS5lbmFibGUJCT0gdGQwMjh0dGVjMV9wYW5lbF9lbmFibGUsCi0JLmRpc2FibGUJPSB0 ZDAyOHR0ZWMxX3BhbmVsX2Rpc2FibGUsCi0KLQkuZ2V0X21vZGVzCT0gdGQwMjh0dGVjMV9wYW5l bF9nZXRfbW9kZXMsCi19OwotCi1zdGF0aWMgaW50IHRkMDI4dHRlYzFfcGFuZWxfcHJvYmUoc3Ry dWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhOwot CXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldjsKLQlpbnQgcjsKLQotCWRldl9kYmcoJnNw aS0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCXNwaS0+Yml0c19wZXJfd29yZCA9IDk7Ci0J c3BpLT5tb2RlID0gU1BJX01PREVfMzsKLQotCXIgPSBzcGlfc2V0dXAoc3BpKTsKLQlpZiAociA8 IDApIHsKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJzcGlfc2V0dXAgZmFpbGVkOiAlZFxuIiwgcik7 Ci0JCXJldHVybiByOwotCX0KLQotCWRkYXRhID0gZGV2bV9remFsbG9jKCZzcGktPmRldiwgc2l6 ZW9mKCpkZGF0YSksIEdGUF9LRVJORUwpOwotCWlmIChkZGF0YSA9PSBOVUxMKQotCQlyZXR1cm4g LUVOT01FTTsKLQotCWRkYXRhLT5iYWNrbGlnaHQgPSBkZXZtX29mX2ZpbmRfYmFja2xpZ2h0KCZz cGktPmRldik7Ci0JaWYgKElTX0VSUihkZGF0YS0+YmFja2xpZ2h0KSkKLQkJcmV0dXJuIFBUUl9F UlIoZGRhdGEtPmJhY2tsaWdodCk7Ci0KLQlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBkZGF0 YSk7Ci0KLQlkZGF0YS0+c3BpX2RldiA9IHNwaTsKLQotCWRkYXRhLT52bSA9IHRkMDI4dHRlYzFf cGFuZWxfdm07Ci0KLQlkc3NkZXYgPSAmZGRhdGEtPmRzc2RldjsKLQlkc3NkZXYtPmRldiA9ICZz cGktPmRldjsKLQlkc3NkZXYtPm9wcyA9ICZ0ZDAyOHR0ZWMxX29wczsKLQlkc3NkZXYtPnR5cGUg PSBPTUFQX0RJU1BMQVlfVFlQRV9EUEk7Ci0JZHNzZGV2LT5kaXNwbGF5ID0gdHJ1ZTsKLQlkc3Nk ZXYtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JZHNzZGV2LT5vZl9wb3J0ID0gMDsKLQlkc3NkZXYt Pm9wc19mbGFncyA9IE9NQVBfRFNTX0RFVklDRV9PUF9NT0RFUzsKLQotCS8qCi0JICogTm90ZTog QWNjb3JkaW5nIHRvIHRoZSBwYW5lbCBkb2N1bWVudGF0aW9uOgotCSAqIFNZTkMgbmVlZHMgdG8g YmUgZHJpdmVuIG9uIHRoZSBGQUxMSU5HIGVkZ2UKLQkgKi8KLQlkc3NkZXYtPmJ1c19mbGFncyA9 IERSTV9CVVNfRkxBR19ERV9ISUdICi0JCQkgIHwgRFJNX0JVU19GTEFHX1NZTkNfRFJJVkVfUE9T RURHRQotCQkJICB8IERSTV9CVVNfRkxBR19QSVhEQVRBX0RSSVZFX05FR0VER0U7Ci0KLQlvbWFw ZHNzX2Rpc3BsYXlfaW5pdChkc3NkZXYpOwotCW9tYXBkc3NfZGV2aWNlX3JlZ2lzdGVyKGRzc2Rl dik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0ZDAyOHR0ZWMxX3BhbmVsX3JlbW92 ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRh dGEgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKLQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNl ICpkc3NkZXYgPSAmZGRhdGEtPmRzc2RldjsKLQotCWRldl9kYmcoJmRkYXRhLT5zcGlfZGV2LT5k ZXYsICIlc1xuIiwgX19mdW5jX18pOwotCi0Jb21hcGRzc19kZXZpY2VfdW5yZWdpc3Rlcihkc3Nk ZXYpOwotCi0JdGQwMjh0dGVjMV9wYW5lbF9kaXNhYmxlKGRzc2Rldik7Ci0KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGQwMjh0dGVjMV9vZl9tYXRj aFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAib21hcGRzcyx0cG8sdGQwMjh0dGVjMSIsIH0sCi0J Lyoga2VlcCB0byBub3QgYnJlYWsgb2xkZXIgRFRCICovCi0JeyAuY29tcGF0aWJsZSA9ICJvbWFw ZHNzLHRvcHBvbHksdGQwMjh0dGVjMSIsIH0sCi0Je30sCi19OwotCi1NT0RVTEVfREVWSUNFX1RB QkxFKG9mLCB0ZDAyOHR0ZWMxX29mX21hdGNoKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlf ZGV2aWNlX2lkIHRkMDI4dHRlYzFfaWRzW10gPSB7Ci0JeyAidG9wcG9seSx0ZDAyOHR0ZWMxIiwg MCB9LAotCXsgInRwbyx0ZDAyOHR0ZWMxIiwgMH0sCi0JeyAvKiBzZW50aW5lbCAqLyB9Ci19Owot Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwgdGQwMjh0dGVjMV9pZHMpOwotCi0KLXN0YXRpYyBz dHJ1Y3Qgc3BpX2RyaXZlciB0ZDAyOHR0ZWMxX3NwaV9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IHRk MDI4dHRlYzFfcGFuZWxfcHJvYmUsCi0JLnJlbW92ZQkJPSB0ZDAyOHR0ZWMxX3BhbmVsX3JlbW92 ZSwKLQkuaWRfdGFibGUJPSB0ZDAyOHR0ZWMxX2lkcywKLQotCS5kcml2ZXIgICAgICAgICA9IHsK LQkJLm5hbWUgICA9ICJwYW5lbC10cG8tdGQwMjh0dGVjMSIsCi0JCS5vZl9tYXRjaF90YWJsZSA9 IHRkMDI4dHRlYzFfb2ZfbWF0Y2gsCi0JCS5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwKLQl9 LAotfTsKLQotbW9kdWxlX3NwaV9kcml2ZXIodGQwMjh0dGVjMV9zcGlfZHJpdmVyKTsKLQotTU9E VUxFX0FVVEhPUigiSC4gTmlrb2xhdXMgU2NoYWxsZXIgPGhuc0Bnb2xkZWxpY28uY29tPiIpOwot TU9EVUxFX0RFU0NSSVBUSU9OKCJUb3Bwb2x5IFREMDI4VFRFQzEgcGFuZWwgZHJpdmVyIik7Ci1N T0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21hcGRy bS9kaXNwbGF5cy9wYW5lbC10cG8tdGQwNDNtdGVhMS5jIGIvZHJpdmVycy9ncHUvZHJtL29tYXBk cm0vZGlzcGxheXMvcGFuZWwtdHBvLXRkMDQzbXRlYTEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggYzY2N2Y0Mjg3ODkzLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJt L29tYXBkcm0vZGlzcGxheXMvcGFuZWwtdHBvLXRkMDQzbXRlYTEuYworKysgL2Rldi9udWxsCkBA IC0xLDUxMyArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1s YXRlcgotLyoKLSAqIFRQTyBURDA0M01URUExIFBhbmVsIGRyaXZlcgotICoKLSAqIEF1dGhvcjog R3Jhxb52eWRhcyBJZ25vdGFzIDxub3Rhc2FzQGdtYWlsLmNvbT4KLSAqIENvbnZlcnRlZCB0byBu ZXcgRFNTIGRldmljZSBtb2RlbDogVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNv bT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIu aD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Ci0jaW5jbHVkZSA8 bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLQotI2luY2x1ZGUgIi4u L2Rzcy9vbWFwZHNzLmgiCi0KLSNkZWZpbmUgVFBPX1IwMl9NT0RFKHgpCQkoKHgpICYgNykKLSNk ZWZpbmUgVFBPX1IwMl9NT0RFXzgwMHg0ODAJNwotI2RlZmluZSBUUE9fUjAyX05DTEtfUklTSU5H CUJJVCgzKQotI2RlZmluZSBUUE9fUjAyX0hTWU5DX0hJR0gJQklUKDQpCi0jZGVmaW5lIFRQT19S MDJfVlNZTkNfSElHSAlCSVQoNSkKLQotI2RlZmluZSBUUE9fUjAzX05TVEFOREJZCUJJVCgwKQot I2RlZmluZSBUUE9fUjAzX0VOX0NQX0NMSwlCSVQoMSkKLSNkZWZpbmUgVFBPX1IwM19FTl9WR0xf UFVNUAlCSVQoMikKLSNkZWZpbmUgVFBPX1IwM19FTl9QV00JCUJJVCgzKQotI2RlZmluZSBUUE9f UjAzX0RSSVZJTkdfQ0FQXzEwMAlCSVQoNCkKLSNkZWZpbmUgVFBPX1IwM19FTl9QUkVfQ0hBUkdF CUJJVCg2KQotI2RlZmluZSBUUE9fUjAzX1NPRlRXQVJFX0NUTAlCSVQoNykKLQotI2RlZmluZSBU UE9fUjA0X05GTElQX0gJCUJJVCgwKQotI2RlZmluZSBUUE9fUjA0X05GTElQX1YJCUJJVCgxKQot I2RlZmluZSBUUE9fUjA0X0NQX0NMS19GUkVRXzFICUJJVCgyKQotI2RlZmluZSBUUE9fUjA0X1ZH TF9GUkVRXzFICUJJVCg0KQotCi0jZGVmaW5lIFRQT19SMDNfVkFMX05PUk1BTCAoVFBPX1IwM19O U1RBTkRCWSB8IFRQT19SMDNfRU5fQ1BfQ0xLIHwgXAotCQkJVFBPX1IwM19FTl9WR0xfUFVNUCB8 ICBUUE9fUjAzX0VOX1BXTSB8IFwKLQkJCVRQT19SMDNfRFJJVklOR19DQVBfMTAwIHwgVFBPX1Iw M19FTl9QUkVfQ0hBUkdFIHwgXAotCQkJVFBPX1IwM19TT0ZUV0FSRV9DVEwpCi0KLSNkZWZpbmUg VFBPX1IwM19WQUxfU1RBTkRCWSAoVFBPX1IwM19EUklWSU5HX0NBUF8xMDAgfCBcCi0JCQlUUE9f UjAzX0VOX1BSRV9DSEFSR0UgfCBUUE9fUjAzX1NPRlRXQVJFX0NUTCkKLQotc3RhdGljIGNvbnN0 IHUxNiB0cG9fdGQwNDNfZGVmX2dhbW1hWzEyXSA9IHsKLQkxMDUsIDMxNSwgMzgxLCA0MzEsIDQ5 MCwgNTM3LCA1NzksIDY4NiwgNzgwLCA4MzcsIDg4MCwgMTAyMwotfTsKLQotc3RydWN0IHBhbmVs X2Rydl9kYXRhIHsKLQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlCWRzc2RldjsKLQotCXN0cnVjdCB2 aWRlb21vZGUgdm07Ci0KLQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpOwotCXN0cnVjdCByZWd1bGF0 b3IgKnZjY19yZWc7Ci0Jc3RydWN0IGdwaW9fZGVzYyAqcmVzZXRfZ3BpbzsKLQl1MTYgZ2FtbWFb MTJdOwotCXUzMiBtb2RlOwotCXUzMiB2bWlycm9yOjE7Ci0JdTMyIHBvd2VyZWRfb246MTsKLQl1 MzIgc3BpX3N1c3BlbmRlZDoxOwotCXUzMiBwb3dlcl9vbl9yZXN1bWU6MTsKLX07Ci0KLXN0YXRp YyBjb25zdCBzdHJ1Y3QgdmlkZW9tb2RlIHRwb190ZDA0M192bSA9IHsKLQkuaGFjdGl2ZQk9IDgw MCwKLQkudmFjdGl2ZQk9IDQ4MCwKLQotCS5waXhlbGNsb2NrCT0gMzYwMDAwMDAsCi0KLQkuaHN5 bmNfbGVuCT0gMSwKLQkuaGZyb250X3BvcmNoCT0gNjgsCi0JLmhiYWNrX3BvcmNoCT0gMjE0LAot Ci0JLnZzeW5jX2xlbgk9IDEsCi0JLnZmcm9udF9wb3JjaAk9IDM5LAotCS52YmFja19wb3JjaAk9 IDM0LAotCi0JLmZsYWdzCQk9IERJU1BMQVlfRkxBR1NfSFNZTkNfTE9XIHwgRElTUExBWV9GTEFH U19WU1lOQ19MT1csCi19OwotCi0jZGVmaW5lIHRvX3BhbmVsX2RhdGEocCkgY29udGFpbmVyX29m KHAsIHN0cnVjdCBwYW5lbF9kcnZfZGF0YSwgZHNzZGV2KQotCi1zdGF0aWMgaW50IHRwb190ZDA0 M193cml0ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCB1OCBhZGRyLCB1OCBkYXRhKQotewotCXN0 cnVjdCBzcGlfbWVzc2FnZQltOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIJeGZlcjsKLQl1MTYJCQl3 OwotCWludAkJCXI7Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQotCW1lbXNldCgmeGZlciwg MCwgc2l6ZW9mKHhmZXIpKTsKLQotCXcgPSAoKHUxNilhZGRyIDw8IDEwKSB8ICgxIDw8IDgpIHwg ZGF0YTsKLQl4ZmVyLnR4X2J1ZiA9ICZ3OwotCXhmZXIuYml0c19wZXJfd29yZCA9IDE2OwotCXhm ZXIubGVuID0gMjsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmeGZlciwgJm0pOwotCi0JciA9IHNw aV9zeW5jKHNwaSwgJm0pOwotCWlmIChyIDwgMCkKLQkJZGV2X3dhcm4oJnNwaS0+ZGV2LCAiZmFp bGVkIHRvIHdyaXRlIHRvIExDRCByZWcgKCVkKVxuIiwgcik7Ci0JcmV0dXJuIHI7Ci19Ci0KLXN0 YXRpYyB2b2lkIHRwb190ZDA0M193cml0ZV9nYW1tYShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCB1 MTYgZ2FtbWFbMTJdKQotewotCXU4IGksIHZhbDsKLQotCS8qIGdhbW1hIGJpdHMgWzk6OF0gKi8K LQlmb3IgKHZhbCA9IGkgPSAwOyBpIDwgNDsgaSsrKQotCQl2YWwgfD0gKGdhbW1hW2ldICYgMHgz MDApID4+ICgoaSArIDEpICogMik7Ci0JdHBvX3RkMDQzX3dyaXRlKHNwaSwgMHgxMSwgdmFsKTsK LQotCWZvciAodmFsID0gaSA9IDA7IGkgPCA0OyBpKyspCi0JCXZhbCB8PSAoZ2FtbWFbaSs0XSAm IDB4MzAwKSA+PiAoKGkgKyAxKSAqIDIpOwotCXRwb190ZDA0M193cml0ZShzcGksIDB4MTIsIHZh bCk7Ci0KLQlmb3IgKHZhbCA9IGkgPSAwOyBpIDwgNDsgaSsrKQotCQl2YWwgfD0gKGdhbW1hW2kr OF0gJiAweDMwMCkgPj4gKChpICsgMSkgKiAyKTsKLQl0cG9fdGQwNDNfd3JpdGUoc3BpLCAweDEz LCB2YWwpOwotCi0JLyogZ2FtbWEgYml0cyBbNzowXSAqLwotCWZvciAodmFsID0gaSA9IDA7IGkg PCAxMjsgaSsrKQotCQl0cG9fdGQwNDNfd3JpdGUoc3BpLCAweDE0ICsgaSwgZ2FtbWFbaV0gJiAw eGZmKTsKLX0KLQotc3RhdGljIGludCB0cG9fdGQwNDNfd3JpdGVfbWlycm9yKHN0cnVjdCBzcGlf ZGV2aWNlICpzcGksIGJvb2wgaCwgYm9vbCB2KQotewotCXU4IHJlZzQgPSBUUE9fUjA0X05GTElQ X0ggfCBUUE9fUjA0X05GTElQX1YgfAotCQlUUE9fUjA0X0NQX0NMS19GUkVRXzFIIHwgVFBPX1Iw NF9WR0xfRlJFUV8xSDsKLQlpZiAoaCkKLQkJcmVnNCAmPSB+VFBPX1IwNF9ORkxJUF9IOwotCWlm ICh2KQotCQlyZWc0ICY9IH5UUE9fUjA0X05GTElQX1Y7Ci0KLQlyZXR1cm4gdHBvX3RkMDQzX3dy aXRlKHNwaSwgNCwgcmVnNCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHRwb190ZDA0M192bWlycm9y X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRy LCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOwotCi0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIs IGRkYXRhLT52bWlycm9yKTsKLX0KLQotc3RhdGljIHNzaXplX3QgdHBvX3RkMDQzX3ZtaXJyb3Jf c3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRy LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2Rh dGEgKmRkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaW50IHZhbDsKLQlpbnQgcmV0Owot Ci0JcmV0ID0ga3N0cnRvaW50KGJ1ZiwgMCwgJnZhbCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVy biByZXQ7Ci0KLQl2YWwgPSAhIXZhbDsKLQotCXJldCA9IHRwb190ZDA0M193cml0ZV9taXJyb3Io ZGRhdGEtPnNwaSwgZmFsc2UsIHZhbCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0K LQlkZGF0YS0+dm1pcnJvciA9IHZhbDsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNz aXplX3QgdHBvX3RkMDQzX21vZGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRl dmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2Rh dGEgKmRkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQlyZXR1cm4gc25wcmludGYoYnVm LCBQQUdFX1NJWkUsICIlZFxuIiwgZGRhdGEtPm1vZGUpOwotfQotCi1zdGF0aWMgc3NpemVfdCB0 cG9fdGQwNDNfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRldmljZV9h dHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVj dCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlsb25nIHZh bDsKLQlpbnQgcmV0OwotCi0JcmV0ID0ga3N0cnRvbChidWYsIDAsICZ2YWwpOwotCWlmIChyZXQg IT0gMCB8fCB2YWwgJiB+NykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkZGF0YS0+bW9kZSA9IHZh bDsKLQotCXZhbCB8PSBUUE9fUjAyX05DTEtfUklTSU5HOwotCXRwb190ZDA0M193cml0ZShkZGF0 YS0+c3BpLCAyLCB2YWwpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCB0 cG9fdGQwNDNfZ2FtbWFfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0Jc3RydWN0IGRldmljZV9h dHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRk YXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3NpemVfdCBsZW4gPSAwOwotCWludCByZXQ7 Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZGF0YS0+Z2FtbWEpOyBp KyspIHsKLQkJcmV0ID0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICIldSAi LAotCQkJCWRkYXRhLT5nYW1tYVtpXSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsK LQkJbGVuICs9IHJldDsKLQl9Ci0JYnVmW2xlbiAtIDFdID0gJ1xuJzsKLQotCXJldHVybiBsZW47 Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHRwb190ZDA0M19nYW1tYV9zdG9yZShzdHJ1Y3QgZGV2aWNl ICpkZXYsCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwg c2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsKLQl1bnNpZ25lZCBpbnQgZ1sxMl07Ci0JaW50IHJldDsKLQlpbnQgaTsK LQotCXJldCA9IHNzY2FuZihidWYsICIldSAldSAldSAldSAldSAldSAldSAldSAldSAldSAldSAl dSIsCi0JCQkmZ1swXSwgJmdbMV0sICZnWzJdLCAmZ1szXSwgJmdbNF0sICZnWzVdLAotCQkJJmdb Nl0sICZnWzddLCAmZ1s4XSwgJmdbOV0sICZnWzEwXSwgJmdbMTFdKTsKLQotCWlmIChyZXQgIT0g MTIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZm9yIChpID0gMDsgaSA8IDEyOyBpKyspCi0JCWRk YXRhLT5nYW1tYVtpXSA9IGdbaV07Ci0KLQl0cG9fdGQwNDNfd3JpdGVfZ2FtbWEoZGRhdGEtPnNw aSwgZGRhdGEtPmdhbW1hKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIERFVklDRV9B VFRSKHZtaXJyb3IsIFNfSVJVR08gfCBTX0lXVVNSLAotCQl0cG9fdGQwNDNfdm1pcnJvcl9zaG93 LCB0cG9fdGQwNDNfdm1pcnJvcl9zdG9yZSk7Ci1zdGF0aWMgREVWSUNFX0FUVFIobW9kZSwgU19J UlVHTyB8IFNfSVdVU1IsCi0JCXRwb190ZDA0M19tb2RlX3Nob3csIHRwb190ZDA0M19tb2RlX3N0 b3JlKTsKLXN0YXRpYyBERVZJQ0VfQVRUUihnYW1tYSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCXRw b190ZDA0M19nYW1tYV9zaG93LCB0cG9fdGQwNDNfZ2FtbWFfc3RvcmUpOwotCi1zdGF0aWMgc3Ry dWN0IGF0dHJpYnV0ZSAqdHBvX3RkMDQzX2F0dHJzW10gPSB7Ci0JJmRldl9hdHRyX3ZtaXJyb3Iu YXR0ciwKLQkmZGV2X2F0dHJfbW9kZS5hdHRyLAotCSZkZXZfYXR0cl9nYW1tYS5hdHRyLAotCU5V TEwsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0cG9fdGQwNDNf YXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSB0cG9fdGQwNDNfYXR0cnMsCi19OwotCi1zdGF0aWMg aW50IHRwb190ZDA0M19wb3dlcl9vbihzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhKQotewot CWludCByOwotCi0JaWYgKGRkYXRhLT5wb3dlcmVkX29uKQotCQlyZXR1cm4gMDsKLQotCXIgPSBy ZWd1bGF0b3JfZW5hYmxlKGRkYXRhLT52Y2NfcmVnKTsKLQlpZiAociAhPSAwKQotCQlyZXR1cm4g cjsKLQotCS8qIHdhaXQgZm9yIHBhbmVsIHRvIHN0YWJpbGl6ZSAqLwotCW1zbGVlcCgxNjApOwot Ci0JZ3Bpb2Rfc2V0X3ZhbHVlKGRkYXRhLT5yZXNldF9ncGlvLCAwKTsKLQotCXRwb190ZDA0M193 cml0ZShkZGF0YS0+c3BpLCAyLAotCQkJVFBPX1IwMl9NT0RFKGRkYXRhLT5tb2RlKSB8IFRQT19S MDJfTkNMS19SSVNJTkcpOwotCXRwb190ZDA0M193cml0ZShkZGF0YS0+c3BpLCAzLCBUUE9fUjAz X1ZBTF9OT1JNQUwpOwotCXRwb190ZDA0M193cml0ZShkZGF0YS0+c3BpLCAweDIwLCAweGYwKTsK LQl0cG9fdGQwNDNfd3JpdGUoZGRhdGEtPnNwaSwgMHgyMSwgMHhmMCk7Ci0JdHBvX3RkMDQzX3dy aXRlX21pcnJvcihkZGF0YS0+c3BpLCBmYWxzZSwgZGRhdGEtPnZtaXJyb3IpOwotCXRwb190ZDA0 M193cml0ZV9nYW1tYShkZGF0YS0+c3BpLCBkZGF0YS0+Z2FtbWEpOwotCi0JZGRhdGEtPnBvd2Vy ZWRfb24gPSAxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB0cG9fdGQwNDNfcG93ZXJf b2ZmKHN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEpCi17Ci0JaWYgKCFkZGF0YS0+cG93ZXJl ZF9vbikKLQkJcmV0dXJuOwotCi0JdHBvX3RkMDQzX3dyaXRlKGRkYXRhLT5zcGksIDMsCi0JCQlU UE9fUjAzX1ZBTF9TVEFOREJZIHwgVFBPX1IwM19FTl9QV00pOwotCi0JZ3Bpb2Rfc2V0X3ZhbHVl KGRkYXRhLT5yZXNldF9ncGlvLCAxKTsKLQotCS8qIHdhaXQgZm9yIGF0IGxlYXN0IDIgdnN5bmNz IGJlZm9yZSBjdXR0aW5nIG9mZiBwb3dlciAqLwotCW1zbGVlcCg1MCk7Ci0KLQl0cG9fdGQwNDNf d3JpdGUoZGRhdGEtPnNwaSwgMywgVFBPX1IwM19WQUxfU1RBTkRCWSk7Ci0KLQlyZWd1bGF0b3Jf ZGlzYWJsZShkZGF0YS0+dmNjX3JlZyk7Ci0KLQlkZGF0YS0+cG93ZXJlZF9vbiA9IDA7Ci19Ci0K LXN0YXRpYyBpbnQgdHBvX3RkMDQzX2Nvbm5lY3Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqc3Jj LAotCQkJICAgICBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3QpCi17Ci0JcmV0dXJuIDA7Ci19 Ci0KLXN0YXRpYyB2b2lkIHRwb190ZDA0M19kaXNjb25uZWN0KHN0cnVjdCBvbWFwX2Rzc19kZXZp Y2UgKnNyYywKLQkJCQkgc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHN0KQotewotfQotCi1zdGF0 aWMgdm9pZCB0cG9fdGQwNDNfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikK LXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gdG9fcGFuZWxfZGF0YShkc3NkZXYp OwotCWludCByOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgcmVzdW1pbmcgZnJvbSBzeXN0ZW0gc3Vz cGVuZCwgU1BJIGNsb2NrcyBtaWdodCBub3QgYmUKLQkgKiBlbmFibGVkIHlldCwgc28gd2UnbGwg cHJvZ3JhbSB0aGUgTENEIGZyb20gU1BJIFBNIHJlc3VtZSBjYWxsYmFjay4KLQkgKi8KLQlpZiAo IWRkYXRhLT5zcGlfc3VzcGVuZGVkKSB7Ci0JCXIgPSB0cG9fdGQwNDNfcG93ZXJfb24oZGRhdGEp OwotCQlpZiAocikgewotCQkJZGV2X2VycigmZGRhdGEtPnNwaS0+ZGV2LCAiJXM6IHBvd2VyIG9u IGZhaWxlZCAoJWQpXG4iLAotCQkJCV9fZnVuY19fLCByKTsKLQkJCXJldHVybjsKLQkJfQotCX0K LX0KLQotc3RhdGljIHZvaWQgdHBvX3RkMDQzX2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2Rldmlj ZSAqZHNzZGV2KQotewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSB0b19wYW5lbF9k YXRhKGRzc2Rldik7Ci0KLQlpZiAoIWRkYXRhLT5zcGlfc3VzcGVuZGVkKQotCQl0cG9fdGQwNDNf cG93ZXJfb2ZmKGRkYXRhKTsKLX0KLQotc3RhdGljIGludCB0cG9fdGQwNDNfZ2V0X21vZGVzKHN0 cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKLQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yKQotewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSB0b19w YW5lbF9kYXRhKGRzc2Rldik7Ci0KLQlyZXR1cm4gb21hcGRzc19kaXNwbGF5X2dldF9tb2Rlcyhj b25uZWN0b3IsICZkZGF0YS0+dm0pOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9tYXBfZHNz X2RldmljZV9vcHMgdHBvX3RkMDQzX29wcyA9IHsKLQkuY29ubmVjdAk9IHRwb190ZDA0M19jb25u ZWN0LAotCS5kaXNjb25uZWN0CT0gdHBvX3RkMDQzX2Rpc2Nvbm5lY3QsCi0KLQkuZW5hYmxlCQk9 IHRwb190ZDA0M19lbmFibGUsCi0JLmRpc2FibGUJPSB0cG9fdGQwNDNfZGlzYWJsZSwKLQotCS5n ZXRfbW9kZXMJPSB0cG9fdGQwNDNfZ2V0X21vZGVzLAotfTsKLQotc3RhdGljIGludCB0cG9fdGQw NDNfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3QgcGFuZWxfZHJ2X2Rh dGEgKmRkYXRhOwotCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldjsKLQlzdHJ1Y3QgZ3Bp b19kZXNjICpncGlvOwotCWludCByOwotCi0JZGV2X2RiZygmc3BpLT5kZXYsICIlc1xuIiwgX19m dW5jX18pOwotCi0Jc3BpLT5iaXRzX3Blcl93b3JkID0gMTY7Ci0Jc3BpLT5tb2RlID0gU1BJX01P REVfMDsKLQotCXIgPSBzcGlfc2V0dXAoc3BpKTsKLQlpZiAociA8IDApIHsKLQkJZGV2X2Vycigm c3BpLT5kZXYsICJzcGlfc2V0dXAgZmFpbGVkOiAlZFxuIiwgcik7Ci0JCXJldHVybiByOwotCX0K LQotCWRkYXRhID0gZGV2bV9remFsbG9jKCZzcGktPmRldiwgc2l6ZW9mKCpkZGF0YSksIEdGUF9L RVJORUwpOwotCWlmIChkZGF0YSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRldl9z ZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIGRkYXRhKTsKLQotCWRkYXRhLT5zcGkgPSBzcGk7Ci0KLQlk ZGF0YS0+bW9kZSA9IFRQT19SMDJfTU9ERV84MDB4NDgwOwotCW1lbWNweShkZGF0YS0+Z2FtbWEs IHRwb190ZDA0M19kZWZfZ2FtbWEsIHNpemVvZihkZGF0YS0+Z2FtbWEpKTsKLQotCWRkYXRhLT52 Y2NfcmVnID0gZGV2bV9yZWd1bGF0b3JfZ2V0KCZzcGktPmRldiwgInZjYyIpOwotCWlmIChJU19F UlIoZGRhdGEtPnZjY19yZWcpKSB7Ci0JCWRldl9lcnIoJnNwaS0+ZGV2LCAiZmFpbGVkIHRvIGdl dCBMQ0QgVkNDIHJlZ3VsYXRvclxuIik7Ci0JCXJldHVybiBQVFJfRVJSKGRkYXRhLT52Y2NfcmVn KTsKLQl9Ci0KLQlncGlvID0gZGV2bV9ncGlvZF9nZXQoJnNwaS0+ZGV2LCAicmVzZXQiLCBHUElP RF9PVVRfSElHSCk7Ci0JaWYgKElTX0VSUihncGlvKSkgewotCQlkZXZfZXJyKCZzcGktPmRldiwg ImZhaWxlZCB0byBnZXQgcmVzZXQgZ3Bpb1xuIik7Ci0JCXJldHVybiBQVFJfRVJSKGdwaW8pOwot CX0KLQotCWRkYXRhLT5yZXNldF9ncGlvID0gZ3BpbzsKLQotCXIgPSBzeXNmc19jcmVhdGVfZ3Jv dXAoJnNwaS0+ZGV2LmtvYmosICZ0cG9fdGQwNDNfYXR0cl9ncm91cCk7Ci0JaWYgKHIpIHsKLQkJ ZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGZpbGVzXG4iKTsKLQkJ cmV0dXJuIHI7Ci0JfQotCi0JZGRhdGEtPnZtID0gdHBvX3RkMDQzX3ZtOwotCi0JZHNzZGV2ID0g JmRkYXRhLT5kc3NkZXY7Ci0JZHNzZGV2LT5kZXYgPSAmc3BpLT5kZXY7Ci0JZHNzZGV2LT5vcHMg PSAmdHBvX3RkMDQzX29wczsKLQlkc3NkZXYtPnR5cGUgPSBPTUFQX0RJU1BMQVlfVFlQRV9EUEk7 Ci0JZHNzZGV2LT5kaXNwbGF5ID0gdHJ1ZTsKLQlkc3NkZXYtPm93bmVyID0gVEhJU19NT0RVTEU7 Ci0JZHNzZGV2LT5vZl9wb3J0ID0gMDsKLQlkc3NkZXYtPm9wc19mbGFncyA9IE9NQVBfRFNTX0RF VklDRV9PUF9NT0RFUzsKLQotCS8qCi0JICogTm90ZTogQWNjb3JkaW5nIHRvIHRoZSBwYW5lbCBk b2N1bWVudGF0aW9uOgotCSAqIFNZTkMgbmVlZHMgdG8gYmUgZHJpdmVuIG9uIHRoZSBGQUxMSU5H IGVkZ2UKLQkgKi8KLQlkc3NkZXYtPmJ1c19mbGFncyA9IERSTV9CVVNfRkxBR19ERV9ISUdICi0J CQkgIHwgRFJNX0JVU19GTEFHX1NZTkNfRFJJVkVfUE9TRURHRQotCQkJICB8IERSTV9CVVNfRkxB R19QSVhEQVRBX0RSSVZFX05FR0VER0U7Ci0KLQlvbWFwZHNzX2Rpc3BsYXlfaW5pdChkc3NkZXYp OwotCW9tYXBkc3NfZGV2aWNlX3JlZ2lzdGVyKGRzc2Rldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQot c3RhdGljIGludCB0cG9fdGQwNDNfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0J c3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYp OwotCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9ICZkZGF0YS0+ZHNzZGV2OwotCi0J ZGV2X2RiZygmZGRhdGEtPnNwaS0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQotCW9tYXBkc3Nf ZGV2aWNlX3VucmVnaXN0ZXIoZHNzZGV2KTsKLQotCWlmIChvbWFwZHNzX2RldmljZV9pc19lbmFi bGVkKGRzc2RldikpCi0JCXRwb190ZDA0M19kaXNhYmxlKGRzc2Rldik7Ci0KLQlzeXNmc19yZW1v dmVfZ3JvdXAoJnNwaS0+ZGV2LmtvYmosICZ0cG9fdGQwNDNfYXR0cl9ncm91cCk7Ci0KLQlyZXR1 cm4gMDsKLX0KLQotI2lmZGVmIENPTkZJR19QTV9TTEVFUAotc3RhdGljIGludCB0cG9fdGQwNDNf c3BpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0 YSAqZGRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCWRldl9kYmcoZGV2LCAidHBvX3Rk MDQzX3NwaV9zdXNwZW5kLCB0cG8gJXBcbiIsIGRkYXRhKTsKLQotCWRkYXRhLT5wb3dlcl9vbl9y ZXN1bWUgPSBkZGF0YS0+cG93ZXJlZF9vbjsKLQl0cG9fdGQwNDNfcG93ZXJfb2ZmKGRkYXRhKTsK LQlkZGF0YS0+c3BpX3N1c3BlbmRlZCA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlu dCB0cG9fdGQwNDNfc3BpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBh bmVsX2Rydl9kYXRhICpkZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCByZXQ7Ci0K LQlkZXZfZGJnKGRldiwgInRwb190ZDA0M19zcGlfcmVzdW1lXG4iKTsKLQotCWlmIChkZGF0YS0+ cG93ZXJfb25fcmVzdW1lKSB7Ci0JCXJldCA9IHRwb190ZDA0M19wb3dlcl9vbihkZGF0YSk7Ci0J CWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQlkZGF0YS0+c3BpX3N1c3BlbmRlZCA9IDA7 Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgU0lNUExFX0RFVl9QTV9PUFModHBv X3RkMDQzX3NwaV9wbSwKLQl0cG9fdGQwNDNfc3BpX3N1c3BlbmQsIHRwb190ZDA0M19zcGlfcmVz dW1lKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdHBvX3RkMDQzX29mX21h dGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICJvbWFwZHNzLHRwbyx0ZDA0M210ZWExIiwgfSwK LQl7fSwKLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRwb190ZDA0M19vZl9tYXRjaCk7 Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB0cG9fdGQwNDNfc3BpX2RyaXZlciA9IHsKLQku ZHJpdmVyID0gewotCQkubmFtZQk9ICJwYW5lbC10cG8tdGQwNDNtdGVhMSIsCi0JCS5wbQk9ICZ0 cG9fdGQwNDNfc3BpX3BtLAotCQkub2ZfbWF0Y2hfdGFibGUgPSB0cG9fdGQwNDNfb2ZfbWF0Y2gs Ci0JCS5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwKLQl9LAotCS5wcm9iZQk9IHRwb190ZDA0 M19wcm9iZSwKLQkucmVtb3ZlCT0gdHBvX3RkMDQzX3JlbW92ZSwKLX07Ci0KLW1vZHVsZV9zcGlf ZHJpdmVyKHRwb190ZDA0M19zcGlfZHJpdmVyKTsKLQotTU9EVUxFX0FMSUFTKCJzcGk6dHBvLHRk MDQzbXRlYTEiKTsKLU1PRFVMRV9BVVRIT1IoIkdyYcW+dnlkYXMgSWdub3RhcyA8bm90YXNhc0Bn bWFpbC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlRQTyBURDA0M01URUExIExDRCBEcml2 ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9vbWFwZHJtL2Rzcy9vbWFwZHNzLWJvb3QtaW5pdC5jIGIvZHJpdmVycy9ncHUvZHJtL29tYXBk cm0vZHNzL29tYXBkc3MtYm9vdC1pbml0LmMKaW5kZXggMjRlMzZkNjhmM2M0Li5jYWEyOTFlYTFj NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9vbWFwZHNzLWJvb3Qt aW5pdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL2Rzcy9vbWFwZHNzLWJvb3QtaW5p dC5jCkBAIC0xODUsMTQgKzE4NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk IG9tYXBkc3Nfb2ZfbWF0Y2hbXSBfX2luaXRjb25zdCA9IHsKIH07CiAKIHN0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9tYXBkc3Nfb2ZfZml4dXBzX3doaXRlbGlzdFtdIF9faW5pdGNv bnN0ID0gewotCXsgLmNvbXBhdGlibGUgPSAibGdwaGlsaXBzLGxiMDM1cTAyIiB9LAotCXsgLmNv bXBhdGlibGUgPSAibmVjLG5sODA0OGhsMTEiIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJwYW5lbC1k c2ktY20iIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJzaGFycCxsczAzN3Y3ZHcwMSIgfSwKLQl7IC5j b21wYXRpYmxlID0gInNvbnksYWN4NTY1YWttIiB9LAotCXsgLmNvbXBhdGlibGUgPSAidG9wcG9s eSx0ZDAyOHR0ZWMxIiB9LAotCXsgLmNvbXBhdGlibGUgPSAidHBvLHRkMDI4dHRlYzEiIH0sCi0J eyAuY29tcGF0aWJsZSA9ICJ0cG8sdGQwNDNtdGVhMSIgfSwKIAl7fSwKIH07CiAKLS0gClJlZ2Fy ZHMsCgpMYXVyZW50IFBpbmNoYXJ0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWw=