From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Chiras Subject: [PATCH v2 1/2] drm/panel: Add Raydium RM67191 DSI Panel Date: Thu, 3 May 2018 17:26:01 +0300 Message-ID: <1525357562-20810-2-git-send-email-robert.chiras@nxp.com> References: <1525357562-20810-1-git-send-email-robert.chiras@nxp.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1525357562-20810-1-git-send-email-robert.chiras@nxp.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: thierry.reding@gmail.com, airlied@linux.ie, dri-devel@lists.freedesktop.org Cc: devicetree@vger.kernel.org, linux-imx@nxp.com, mirela.rabulea@nxp.com List-Id: devicetree@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIHRoZSBPTEVEIGRpc3BsYXkgYmFzZWQgb24gTUlQSS1EU0kgcHJvdG9j b2wgZnJvbSBSYXlkaXVtOgpSTTY3MTkxLgoKU2lnbmVkLW9mZi1ieTogUm9iZXJ0IENoaXJhcyA8 cm9iZXJ0LmNoaXJhc0BueHAuY29tPgpTaWduZWQtb2ZmLWJ5OiBNaXJlbGEgUmFidWxlYSA8bWly ZWxhLnJhYnVsZWFAbnhwLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyAg ICAgICAgICAgICAgICAgfCAgIDkgKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlICAg ICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1yYXlkaXVt LXJtNjcxOTEuYyB8IDY1NCArKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFu Z2VkLCA2NjQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9wYW5lbC1yYXlkaXVtLXJtNjcxOTEuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9wYW5lbC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKaW5kZXgg MjU2ODJmZi4uYjBkNTY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25m aWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKQEAgLTEwOCw2ICsxMDgsMTUg QEAgY29uZmlnIERSTV9QQU5FTF9SQVNQQkVSUllQSV9UT1VDSFNDUkVFTgogCSAgUGkgNyIgVG91 Y2hzY3JlZW4uICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLAogCSAgY2hvb3Nl IE0gaGVyZS4KIAorY29uZmlnIERSTV9QQU5FTF9SQVlESVVNX1JNNjcxOTEKKwl0cmlzdGF0ZSAi UmF5ZGl1bSBSTTY3MTkxIEZIRCAxMDgweDE5MjAgRFNJIHZpZGVvIG1vZGUgcGFuZWwiCisJZGVw ZW5kcyBvbiBPRgorCWRlcGVuZHMgb24gRFJNX01JUElfRFNJCisJZGVwZW5kcyBvbiBCQUNLTElH SFRfQ0xBU1NfREVWSUNFCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFi bGUgc3VwcG9ydCBmb3IgUmF5ZGl1bSBSTTY3MTkxIEZIRAorCSAgKDEwODB4MTkyMCkgRFNJIHBh bmVsLgorCiBjb25maWcgRFJNX1BBTkVMX1JBWURJVU1fUk02ODIwMAogCXRyaXN0YXRlICJSYXlk aXVtIFJNNjgyMDAgNzIweDEyODAgRFNJIHZpZGVvIG1vZGUgcGFuZWwiCiAJZGVwZW5kcyBvbiBP RgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlIGIvZHJpdmVycy9n cHUvZHJtL3BhbmVsL01ha2VmaWxlCmluZGV4IGYyNmVmYzEuLjRlYmU3YjUgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFu ZWwvTWFrZWZpbGUKQEAgLTksNiArOSw3IEBAIG9iai0kKENPTkZJR19EUk1fUEFORUxfTEdfTEc0 NTczKSArPSBwYW5lbC1sZy1sZzQ1NzMubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9PUklTRVRF Q0hfT1RNODAwOUEpICs9IHBhbmVsLW9yaXNldGVjaC1vdG04MDA5YS5vCiBvYmotJChDT05GSUdf RFJNX1BBTkVMX1BBTkFTT05JQ19WVlgxMEYwMzROMDApICs9IHBhbmVsLXBhbmFzb25pYy12dngx MGYwMzRuMDAubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9SQVNQQkVSUllQSV9UT1VDSFNDUkVF TikgKz0gcGFuZWwtcmFzcGJlcnJ5cGktdG91Y2hzY3JlZW4ubworb2JqLSQoQ09ORklHX0RSTV9Q QU5FTF9SQVlESVVNX1JNNjcxOTEpICs9IHBhbmVsLXJheWRpdW0tcm02NzE5MS5vCiBvYmotJChD T05GSUdfRFJNX1BBTkVMX1JBWURJVU1fUk02ODIwMCkgKz0gcGFuZWwtcmF5ZGl1bS1ybTY4MjAw Lm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0FNU1VOR19MRDkwNDApICs9IHBhbmVsLXNhbXN1 bmctbGQ5MDQwLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0FNU1VOR19TNkUzSEEyKSArPSBw YW5lbC1zYW1zdW5nLXM2ZTNoYTIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVs L3BhbmVsLXJheWRpdW0tcm02NzE5MS5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXJh eWRpdW0tcm02NzE5MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNTc0 OGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtcmF5ZGl1 bS1ybTY3MTkxLmMKQEAgLTAsMCArMSw2NTQgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCisvKgorICogaS5NWCBkcm0gZHJpdmVyIC0gUmF5ZGl1bSBNSVBJLURTSSBwYW5l bCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTlhQCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRy bS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9t aXBpX2RzaS5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9n cGlvL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGlu dXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRl IDx2aWRlby9taXBpX2Rpc3BsYXkuaD4KKyNpbmNsdWRlIDx2aWRlby9vZl92aWRlb21vZGUuaD4K KyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKworLyogV3JpdGUgTWFudWZhY3R1cmUgQ29t bWFuZCBTZXQgQ29udHJvbCAqLworI2RlZmluZSBXUk1BVUNDVFIgMHhGRQorCisvKiBNYW51ZmFj dHVyZXIgQ29tbWFuZCBTZXQgcGFnZXMgKENNRDIpICovCitzdHJ1Y3QgY21kX3NldF9lbnRyeSB7 CisJdTggY21kOworCXU4IHBhcmFtOworfTsKKworLyoKKyAqIFRoZXJlIGlzIG5vIGRlc2NyaXB0 aW9uIGluIHRoZSBSZWZlcmVuY2UgTWFudWFsIGFib3V0IHRoZXNlIGNvbW1hbmRzLgorICogV2Ug cmVjZWl2ZWQgdGhlbSBmcm9tIHZlbmRvciwgc28ganVzdCB1c2UgdGhlbSBhcyBpcy4KKyAqLwor c3RhdGljIGNvbnN0IHN0cnVjdCBjbWRfc2V0X2VudHJ5IG1hbnVmYWN0dXJlcl9jbWRfc2V0W10g PSB7CisJezB4RkUsIDB4MEJ9LAorCXsweDI4LCAweDQwfSwKKwl7MHgyOSwgMHg0Rn0sCisJezB4 RkUsIDB4MEV9LAorCXsweDRCLCAweDAwfSwKKwl7MHg0QywgMHgwRn0sCisJezB4NEQsIDB4MjB9 LAorCXsweDRFLCAweDQwfSwKKwl7MHg0RiwgMHg2MH0sCisJezB4NTAsIDB4QTB9LAorCXsweDUx LCAweEMwfSwKKwl7MHg1MiwgMHhFMH0sCisJezB4NTMsIDB4RkZ9LAorCXsweEZFLCAweDBEfSwK Kwl7MHgxOCwgMHgwOH0sCisJezB4NDIsIDB4MDB9LAorCXsweDA4LCAweDQxfSwKKwl7MHg0Niwg MHgwMn0sCisJezB4NzIsIDB4MDl9LAorCXsweEZFLCAweDBBfSwKKwl7MHgyNCwgMHgxN30sCisJ ezB4MDQsIDB4MDd9LAorCXsweDFBLCAweDBDfSwKKwl7MHgwRiwgMHg0NH0sCisJezB4RkUsIDB4 MDR9LAorCXsweDAwLCAweDBDfSwKKwl7MHgwNSwgMHgwOH0sCisJezB4MDYsIDB4MDh9LAorCXsw eDA4LCAweDA4fSwKKwl7MHgwOSwgMHgwOH0sCisJezB4MEEsIDB4RTZ9LAorCXsweDBCLCAweDhD fSwKKwl7MHgxQSwgMHgxMn0sCisJezB4MUUsIDB4RTB9LAorCXsweDI5LCAweDkzfSwKKwl7MHgy QSwgMHg5M30sCisJezB4MkYsIDB4MDJ9LAorCXsweDMxLCAweDAyfSwKKwl7MHgzMywgMHgwNX0s CisJezB4MzcsIDB4MkR9LAorCXsweDM4LCAweDJEfSwKKwl7MHgzQSwgMHgxRX0sCisJezB4M0Is IDB4MUV9LAorCXsweDNELCAweDI3fSwKKwl7MHgzRiwgMHg4MH0sCisJezB4NDAsIDB4NDB9LAor CXsweDQxLCAweEUwfSwKKwl7MHg0RiwgMHgyRn0sCisJezB4NTAsIDB4MUV9LAorCXsweEZFLCAw eDA2fSwKKwl7MHgwMCwgMHhDQ30sCisJezB4MDUsIDB4MDV9LAorCXsweDA3LCAweEEyfSwKKwl7 MHgwOCwgMHhDQ30sCisJezB4MEQsIDB4MDN9LAorCXsweDBGLCAweEEyfSwKKwl7MHgzMiwgMHhD Q30sCisJezB4MzcsIDB4MDV9LAorCXsweDM5LCAweDgzfSwKKwl7MHgzQSwgMHhDQ30sCisJezB4 NDEsIDB4MDR9LAorCXsweDQzLCAweDgzfSwKKwl7MHg0NCwgMHhDQ30sCisJezB4NDksIDB4MDV9 LAorCXsweDRCLCAweEEyfSwKKwl7MHg0QywgMHhDQ30sCisJezB4NTEsIDB4MDN9LAorCXsweDUz LCAweEEyfSwKKwl7MHg3NSwgMHhDQ30sCisJezB4N0EsIDB4MDN9LAorCXsweDdDLCAweDgzfSwK Kwl7MHg3RCwgMHhDQ30sCisJezB4ODIsIDB4MDJ9LAorCXsweDg0LCAweDgzfSwKKwl7MHg4NSwg MHhFQ30sCisJezB4ODYsIDB4MEZ9LAorCXsweDg3LCAweEZGfSwKKwl7MHg4OCwgMHgwMH0sCisJ ezB4OEEsIDB4MDJ9LAorCXsweDhDLCAweEEyfSwKKwl7MHg4RCwgMHhFQX0sCisJezB4OEUsIDB4 MDF9LAorCXsweDhGLCAweEU4fSwKKwl7MHhGRSwgMHgwNn0sCisJezB4OTAsIDB4MEF9LAorCXsw eDkyLCAweDA2fSwKKwl7MHg5MywgMHhBMH0sCisJezB4OTQsIDB4QTh9LAorCXsweDk1LCAweEVD fSwKKwl7MHg5NiwgMHgwRn0sCisJezB4OTcsIDB4RkZ9LAorCXsweDk4LCAweDAwfSwKKwl7MHg5 QSwgMHgwMn0sCisJezB4OUMsIDB4QTJ9LAorCXsweEFDLCAweDA0fSwKKwl7MHhGRSwgMHgwNn0s CisJezB4QjEsIDB4MTJ9LAorCXsweEIyLCAweDE3fSwKKwl7MHhCMywgMHgxN30sCisJezB4QjQs IDB4MTd9LAorCXsweEI1LCAweDE3fSwKKwl7MHhCNiwgMHgxMX0sCisJezB4QjcsIDB4MDh9LAor CXsweEI4LCAweDA5fSwKKwl7MHhCOSwgMHgwNn0sCisJezB4QkEsIDB4MDd9LAorCXsweEJCLCAw eDE3fSwKKwl7MHhCQywgMHgxN30sCisJezB4QkQsIDB4MTd9LAorCXsweEJFLCAweDE3fSwKKwl7 MHhCRiwgMHgxN30sCisJezB4QzAsIDB4MTd9LAorCXsweEMxLCAweDE3fSwKKwl7MHhDMiwgMHgx N30sCisJezB4QzMsIDB4MTd9LAorCXsweEM0LCAweDBGfSwKKwl7MHhDNSwgMHgwRX0sCisJezB4 QzYsIDB4MDB9LAorCXsweEM3LCAweDAxfSwKKwl7MHhDOCwgMHgxMH0sCisJezB4RkUsIDB4MDZ9 LAorCXsweDk1LCAweEVDfSwKKwl7MHg4RCwgMHhFRX0sCisJezB4NDQsIDB4RUN9LAorCXsweDRD LCAweEVDfSwKKwl7MHgzMiwgMHhFQ30sCisJezB4M0EsIDB4RUN9LAorCXsweDdELCAweEVDfSwK Kwl7MHg3NSwgMHhFQ30sCisJezB4MDAsIDB4RUN9LAorCXsweDA4LCAweEVDfSwKKwl7MHg4NSwg MHhFQ30sCisJezB4QTYsIDB4MjF9LAorCXsweEE3LCAweDA1fSwKKwl7MHhBOSwgMHgwNn0sCisJ ezB4ODIsIDB4MDZ9LAorCXsweDQxLCAweDA2fSwKKwl7MHg3QSwgMHgwN30sCisJezB4MzcsIDB4 MDd9LAorCXsweDA1LCAweDA2fSwKKwl7MHg0OSwgMHgwNn0sCisJezB4MEQsIDB4MDR9LAorCXsw eDUxLCAweDA0fSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgcmFkX2J1c19mb3JtYXRzW10gPSB7 CisJTUVESUFfQlVTX0ZNVF9SR0I4ODhfMVgyNCwKKwlNRURJQV9CVVNfRk1UX1JHQjY2Nl8xWDE4 LAorCU1FRElBX0JVU19GTVRfUkdCNTY1XzFYMTYsCit9OworCitzdHJ1Y3QgcmFkX3BhbmVsIHsK KwlzdHJ1Y3QgZHJtX3BhbmVsIGJhc2U7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpOwor CisJc3RydWN0IGdwaW9fZGVzYyAqcmVzZXQ7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJh Y2tsaWdodDsKKworCWJvb2wgcHJlcGFyZWQ7CisJYm9vbCBlbmFibGVkOworCisJc3RydWN0IHZp ZGVvbW9kZSB2bTsKKwl1MzIgd2lkdGhfbW07CisJdTMyIGhlaWdodF9tbTsKK307CisKK3N0YXRp YyBpbmxpbmUgc3RydWN0IHJhZF9wYW5lbCAqdG9fcmFkX3BhbmVsKHN0cnVjdCBkcm1fcGFuZWwg KnBhbmVsKQoreworCXJldHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0cnVjdCByYWRfcGFuZWws IGJhc2UpOworfQorCitzdGF0aWMgaW50IHJhZF9wYW5lbF9wdXNoX2NtZF9saXN0KHN0cnVjdCBt aXBpX2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlzaXplX3QgaTsKKwlzaXplX3QgY291bnQgPSBBUlJB WV9TSVpFKG1hbnVmYWN0dXJlcl9jbWRfc2V0KTsKKwlpbnQgcmV0ID0gMDsKKworCWZvciAoaSA9 IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjbWRfc2V0X2VudHJ5ICplbnRy eSA9ICZtYW51ZmFjdHVyZXJfY21kX3NldFtpXTsKKwkJdTggYnVmZmVyWzJdID0geyBlbnRyeS0+ Y21kLCBlbnRyeS0+cGFyYW0gfTsKKworCQlyZXQgPSBtaXBpX2RzaV9nZW5lcmljX3dyaXRlKGRz aSwgJmJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiBy ZXQ7CisJfQorCisJcmV0dXJuIHJldDsKK307CisKK3N0YXRpYyBpbnQgY29sb3JfZm9ybWF0X2Zy b21fZHNpX2Zvcm1hdChlbnVtIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdCBmb3JtYXQpCit7CisJc3dp dGNoIChmb3JtYXQpIHsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6CisJCXJldHVybiAweDU1 OworCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZf UEFDS0VEOgorCQlyZXR1cm4gMHg2NjsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I4ODg6CisJCXJl dHVybiAweDc3OworCWRlZmF1bHQ6CisJCXJldHVybiAweDc3OyAvKiBmb3IgYmFja3dhcmQgY29t cGF0aWJpbGl0eSAqLworCX0KK307CisKK3N0YXRpYyBpbnQgcmFkX3BhbmVsX3ByZXBhcmUoc3Ry dWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IHJhZF9wYW5lbCAqcmFkID0gdG9fcmFk X3BhbmVsKHBhbmVsKTsKKworCWlmIChyYWQtPnByZXBhcmVkKQorCQlyZXR1cm4gMDsKKworCWlm IChyYWQtPnJlc2V0ICE9IE5VTEwpIHsKKwkJZ3Bpb2Rfc2V0X3ZhbHVlKHJhZC0+cmVzZXQsIDAp OworCQl1c2xlZXBfcmFuZ2UoNTAwMCwgMTAwMDApOworCQlncGlvZF9zZXRfdmFsdWUocmFkLT5y ZXNldCwgMSk7CisJCXVzbGVlcF9yYW5nZSgyMDAwMCwgMjUwMDApOworCX0KKworCXJhZC0+cHJl cGFyZWQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmFkX3BhbmVsX3Vu cHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgcmFkX3BhbmVsICpy YWQgPSB0b19yYWRfcGFuZWwocGFuZWwpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZyYWQtPmRz aS0+ZGV2OworCisJaWYgKCFyYWQtPnByZXBhcmVkKQorCQlyZXR1cm4gMDsKKworCWlmIChyYWQt PmVuYWJsZWQpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJQYW5lbCBzdGlsbCBlbmFibGVkIVxu Iik7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJaWYgKHJhZC0+cmVzZXQgIT0gTlVMTCkgewor CQlncGlvZF9zZXRfdmFsdWUocmFkLT5yZXNldCwgMCk7CisJCXVzbGVlcF9yYW5nZSgxMDAwMCwg MTUwMDApOworCX0KKworCXJhZC0+cHJlcGFyZWQgPSBmYWxzZTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IHJhZF9wYW5lbF9lbmFibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7 CisJc3RydWN0IHJhZF9wYW5lbCAqcmFkID0gdG9fcmFkX3BhbmVsKHBhbmVsKTsKKwlzdHJ1Y3Qg bWlwaV9kc2lfZGV2aWNlICpkc2kgPSByYWQtPmRzaTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm ZHNpLT5kZXY7CisJaW50IGNvbG9yX2Zvcm1hdCA9IGNvbG9yX2Zvcm1hdF9mcm9tX2RzaV9mb3Jt YXQoZHNpLT5mb3JtYXQpOworCWludCByZXQ7CisKKwlpZiAocmFkLT5lbmFibGVkKQorCQlyZXR1 cm4gMDsKKworCWlmICghcmFkLT5wcmVwYXJlZCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIlBh bmVsIG5vdCBwcmVwYXJlZCFcbiIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWRzaS0+bW9k ZV9mbGFncyB8PSBNSVBJX0RTSV9NT0RFX0xQTTsKKworCXJldCA9IHJhZF9wYW5lbF9wdXNoX2Nt ZF9saXN0KGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWls ZWQgdG8gc2VuZCBNQ1MgKCVkKVxuIiwgcmV0KTsKKwkJZ290byBmYWlsOworCX0KKworCS8qIFNl bGVjdCBVc2VyIENvbW1hbmQgU2V0IHRhYmxlIChDTUQxKSAqLworCXJldCA9IG1pcGlfZHNpX2dl bmVyaWNfd3JpdGUoZHNpLCAodThbXSl7IFdSTUFVQ0NUUiwgMHgwMCB9LCAyKTsKKwlpZiAocmV0 IDwgMCkKKwkJZ290byBmYWlsOworCisJLyogU29mdHdhcmUgcmVzZXQgKi8KKwlyZXQgPSBtaXBp X2RzaV9kY3Nfc29mdF9yZXNldChkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJS T1IoZGV2LCAiRmFpbGVkIHRvIGRvIFNvZnR3YXJlIFJlc2V0ICglZClcbiIsIHJldCk7CisJCWdv dG8gZmFpbDsKKwl9CisKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAwKTsKKworCS8qIFNldCBE U0kgbW9kZSAqLworCXJldCA9IG1pcGlfZHNpX2dlbmVyaWNfd3JpdGUoZHNpLCAodThbXSl7IDB4 QzIsIDB4MEIgfSwgMik7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJG YWlsZWQgdG8gc2V0IERTSSBtb2RlICglZClcbiIsIHJldCk7CisJCWdvdG8gZmFpbDsKKwl9CisJ LyogU2V0IHRlYXIgT04gKi8KKwlyZXQgPSBtaXBpX2RzaV9kY3Nfc2V0X3RlYXJfb24oZHNpLCBN SVBJX0RTSV9EQ1NfVEVBUl9NT0RFX1ZCTEFOSyk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RF Vl9FUlJPUihkZXYsICJGYWlsZWQgdG8gc2V0IHRlYXIgT04gKCVkKVxuIiwgcmV0KTsKKwkJZ290 byBmYWlsOworCX0KKwkvKiBTZXQgdGVhciBzY2FubGluZSAqLworCXJldCA9IG1pcGlfZHNpX2Rj c19zZXRfdGVhcl9zY2FubGluZShkc2ksIDB4MzgwKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1f REVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBzZXQgdGVhciBzY2FubGluZSAoJWQpXG4iLCByZXQp OworCQlnb3RvIGZhaWw7CisJfQorCS8qIFNldCBwaXhlbCBmb3JtYXQgKi8KKwlyZXQgPSBtaXBp X2RzaV9kY3Nfc2V0X3BpeGVsX2Zvcm1hdChkc2ksIGNvbG9yX2Zvcm1hdCk7CisJRFJNX0RFVl9E RUJVR19EUklWRVIoZGV2LCAiSW50ZXJmYWNlIGNvbG9yIGZvcm1hdCBzZXQgdG8gMHgleFxuIiwK KwkJCQljb2xvcl9mb3JtYXQpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2 LCAiRmFpbGVkIHRvIHNldCBwaXhlbCBmb3JtYXQgKCVkKVxuIiwgcmV0KTsKKwkJZ290byBmYWls OworCX0KKwkvKiBTZXQgZGlzcGxheSBicmlnaHRuZXNzICovCisJcmV0ID0gbWlwaV9kc2lfZGNz X3NldF9kaXNwbGF5X2JyaWdodG5lc3MoZHNpLCAweDIwKTsKKwlpZiAocmV0IDwgMCkgeworCQlE Uk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBzZXQgZGlzcGxheSBicmlnaHRuZXNzICglZClc biIsCisJCQkgICAgICByZXQpOworCQlnb3RvIGZhaWw7CisJfQorCS8qIEV4aXQgc2xlZXAgbW9k ZSAqLworCXJldCA9IG1pcGlfZHNpX2Rjc19leGl0X3NsZWVwX21vZGUoZHNpKTsKKwlpZiAocmV0 IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBleGl0IHNsZWVwIG1vZGUg KCVkKVxuIiwgcmV0KTsKKwkJZ290byBmYWlsOworCX0KKworCXVzbGVlcF9yYW5nZSg1MDAwLCAx MDAwMCk7CisKKwlyZXQgPSBtaXBpX2RzaV9kY3Nfc2V0X2Rpc3BsYXlfb24oZHNpKTsKKwlpZiAo cmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBzZXQgZGlzcGxheSBP TiAoJWQpXG4iLCByZXQpOworCQlnb3RvIGZhaWw7CisJfQorCisJYmFja2xpZ2h0X2VuYWJsZShy YWQtPmJhY2tsaWdodCk7CisKKwlyYWQtPmVuYWJsZWQgPSB0cnVlOworCisJcmV0dXJuIDA7CisK K2ZhaWw6CisJaWYgKHJhZC0+cmVzZXQgIT0gTlVMTCkKKwkJZ3Bpb2Rfc2V0X3ZhbHVlKHJhZC0+ cmVzZXQsIDApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByYWRfcGFuZWxfZGlz YWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgcmFkX3BhbmVsICpyYWQg PSB0b19yYWRfcGFuZWwocGFuZWwpOworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSA9IHJh ZC0+ZHNpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkc2ktPmRldjsKKwlpbnQgcmV0OworCisJ aWYgKCFyYWQtPmVuYWJsZWQpCisJCXJldHVybiAwOworCisJZHNpLT5tb2RlX2ZsYWdzIHw9IE1J UElfRFNJX01PREVfTFBNOworCisJcmV0ID0gbWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X29mZihk c2kpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHNl dCBkaXNwbGF5IE9GRiAoJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXVzbGVl cF9yYW5nZSg1MDAwLCAxMDAwMCk7CisKKwlyZXQgPSBtaXBpX2RzaV9kY3NfZW50ZXJfc2xlZXBf bW9kZShkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVk IHRvIGVudGVyIHNsZWVwIG1vZGUgKCVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK Kwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAwKTsKKworCWJhY2tsaWdodF9kaXNhYmxlKHJhZC0+ YmFja2xpZ2h0KTsKKworCXJhZC0+ZW5hYmxlZCA9IGZhbHNlOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgcmFkX3BhbmVsX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkK K3sKKwlzdHJ1Y3QgcmFkX3BhbmVsICpyYWQgPSB0b19yYWRfcGFuZWwocGFuZWwpOworCXN0cnVj dCBkZXZpY2UgKmRldiA9ICZyYWQtPmRzaS0+ZGV2OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IgPSBwYW5lbC0+Y29ubmVjdG9yOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlOworCXUzMiAqYnVzX2ZsYWdzID0gJmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJ1c19mbGFn czsKKwlpbnQgcmV0OworCisJbW9kZSA9IGRybV9tb2RlX2NyZWF0ZShjb25uZWN0b3ItPmRldik7 CisJaWYgKCFtb2RlKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBk aXNwbGF5IG1vZGUhXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZHJtX2Rpc3BsYXlfbW9kZV9m cm9tX3ZpZGVvbW9kZSgmcmFkLT52bSwgbW9kZSk7CisJbW9kZS0+d2lkdGhfbW0gPSByYWQtPndp ZHRoX21tOworCW1vZGUtPmhlaWdodF9tbSA9IHJhZC0+aGVpZ2h0X21tOworCWNvbm5lY3Rvci0+ ZGlzcGxheV9pbmZvLndpZHRoX21tID0gcmFkLT53aWR0aF9tbTsKKwljb25uZWN0b3ItPmRpc3Bs YXlfaW5mby5oZWlnaHRfbW0gPSByYWQtPmhlaWdodF9tbTsKKwltb2RlLT50eXBlID0gRFJNX01P REVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsKKworCWlmIChyYWQtPnZt LmZsYWdzICYgRElTUExBWV9GTEFHU19ERV9ISUdIKQorCQkqYnVzX2ZsYWdzIHw9IERSTV9CVVNf RkxBR19ERV9ISUdIOworCWlmIChyYWQtPnZtLmZsYWdzICYgRElTUExBWV9GTEFHU19ERV9MT1cp CisJCSpidXNfZmxhZ3MgfD0gRFJNX0JVU19GTEFHX0RFX0xPVzsKKwlpZiAocmFkLT52bS5mbGFn cyAmIERJU1BMQVlfRkxBR1NfUElYREFUQV9ORUdFREdFKQorCQkqYnVzX2ZsYWdzIHw9IERSTV9C VVNfRkxBR19QSVhEQVRBX05FR0VER0U7CisJaWYgKHJhZC0+dm0uZmxhZ3MgJiBESVNQTEFZX0ZM QUdTX1BJWERBVEFfUE9TRURHRSkKKwkJKmJ1c19mbGFncyB8PSBEUk1fQlVTX0ZMQUdfUElYREFU QV9QT1NFREdFOworCisJcmV0ID0gZHJtX2Rpc3BsYXlfaW5mb19zZXRfYnVzX2Zvcm1hdHMoJmNv bm5lY3Rvci0+ZGlzcGxheV9pbmZvLAorCQkJcmFkX2J1c19mb3JtYXRzLCBBUlJBWV9TSVpFKHJh ZF9idXNfZm9ybWF0cykpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkcm1fbW9kZV9w cm9iZWRfYWRkKHBhbmVsLT5jb25uZWN0b3IsIG1vZGUpOworCisJcmV0dXJuIDE7Cit9CisKK3N0 YXRpYyBpbnQgcmFkX2JsX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpi bCkKK3sKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSBibF9nZXRfZGF0YShibCk7CisJ c3RydWN0IHJhZF9wYW5lbCAqcmFkID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsKKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmZHNpLT5kZXY7CisJdTE2IGJyaWdodG5lc3M7CisJaW50IHJldDsK KworCWlmICghcmFkLT5wcmVwYXJlZCkKKwkJcmV0dXJuIDA7CisKKwlEUk1fREVWX0RFQlVHX0RS SVZFUihkZXYsICJcbiIpOworCisJZHNpLT5tb2RlX2ZsYWdzICY9IH5NSVBJX0RTSV9NT0RFX0xQ TTsKKworCXJldCA9IG1pcGlfZHNpX2Rjc19nZXRfZGlzcGxheV9icmlnaHRuZXNzKGRzaSwgJmJy aWdodG5lc3MpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJYmwtPnByb3BzLmJy aWdodG5lc3MgPSBicmlnaHRuZXNzOworCisJcmV0dXJuIGJyaWdodG5lc3MgJiAweGZmOworfQor CitzdGF0aWMgaW50IHJhZF9ibF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNl ICpibCkKK3sKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSBibF9nZXRfZGF0YShibCk7 CisJc3RydWN0IHJhZF9wYW5lbCAqcmFkID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsKKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHNpLT5kZXY7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXJh ZC0+cHJlcGFyZWQpCisJCXJldHVybiAwOworCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAi TmV3IGJyaWdodG5lc3M6ICVkXG4iLCBibC0+cHJvcHMuYnJpZ2h0bmVzcyk7CisKKwlkc2ktPm1v ZGVfZmxhZ3MgJj0gfk1JUElfRFNJX01PREVfTFBNOworCisJcmV0ID0gbWlwaV9kc2lfZGNzX3Nl dF9kaXNwbGF5X2JyaWdodG5lc3MoZHNpLCBibC0+cHJvcHMuYnJpZ2h0bmVzcyk7CisJaWYgKHJl dCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCBiYWNrbGlnaHRfb3BzIHJhZF9ibF9vcHMgPSB7CisJLnVwZGF0ZV9zdGF0dXMgPSByYWRf YmxfdXBkYXRlX3N0YXR1cywKKwkuZ2V0X2JyaWdodG5lc3MgPSByYWRfYmxfZ2V0X2JyaWdodG5l c3MsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYW5lbF9mdW5jcyByYWRfcGFuZWxf ZnVuY3MgPSB7CisJLnByZXBhcmUgPSByYWRfcGFuZWxfcHJlcGFyZSwKKwkudW5wcmVwYXJlID0g cmFkX3BhbmVsX3VucHJlcGFyZSwKKwkuZW5hYmxlID0gcmFkX3BhbmVsX2VuYWJsZSwKKwkuZGlz YWJsZSA9IHJhZF9wYW5lbF9kaXNhYmxlLAorCS5nZXRfbW9kZXMgPSByYWRfcGFuZWxfZ2V0X21v ZGVzLAorfTsKKworLyoKKyAqIFRoZSBjbG9jayBtaWdodCByYW5nZSBmcm9tIDY2TUh6ICgzMEh6 IHJlZnJlc2ggcmF0ZSkKKyAqIHRvIDEzMk1IeiAoNjBIeiByZWZyZXNoIHJhdGUpCisgKi8KK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZGlzcGxheV90aW1pbmcgcmFkX2RlZmF1bHRfdGltaW5nID0gewor CS5waXhlbGNsb2NrID0geyA2NjAwMDAwMCwgMTMyMDAwMDAwLCAxMzIwMDAwMDAgfSwKKwkuaGFj dGl2ZSA9IHsgMTA4MCwgMTA4MCwgMTA4MCB9LAorCS5oZnJvbnRfcG9yY2ggPSB7IDIwLCAyMCwg MjAgfSwKKwkuaHN5bmNfbGVuID0geyAyLCAyLCAyIH0sCisJLmhiYWNrX3BvcmNoID0geyAzNCwg MzQsIDM0IH0sCisJLnZhY3RpdmUgPSB7IDE5MjAsIDE5MjAsIDE5MjAgfSwKKwkudmZyb250X3Bv cmNoID0geyAxMCwgMTAsIDEwIH0sCisJLnZzeW5jX2xlbiA9IHsgMiwgMiwgMiB9LAorCS52YmFj a19wb3JjaCA9IHsgNCwgNCwgNCB9LAorCS5mbGFncyA9IERJU1BMQVlfRkxBR1NfSFNZTkNfTE9X IHwKKwkJIERJU1BMQVlfRkxBR1NfVlNZTkNfTE9XIHwKKwkJIERJU1BMQVlfRkxBR1NfREVfTE9X IHwKKwkJIERJU1BMQVlfRkxBR1NfUElYREFUQV9ORUdFREdFLAorfTsKKworc3RhdGljIGludCBy YWRfcGFuZWxfcHJvYmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZkc2ktPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5v Zl9ub2RlOworCXN0cnVjdCByYWRfcGFuZWwgKnBhbmVsOworCXN0cnVjdCBiYWNrbGlnaHRfcHJv cGVydGllcyBibF9wcm9wczsKKwlpbnQgcmV0OworCisJcGFuZWwgPSBkZXZtX2t6YWxsb2MoJmRz aS0+ZGV2LCBzaXplb2YoKnBhbmVsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYW5lbCkKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwltaXBpX2RzaV9zZXRfZHJ2ZGF0YShkc2ksIHBhbmVsKTsKKworCXBh bmVsLT5kc2kgPSBkc2k7CisKKwlkc2ktPmZvcm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7CisJ ZHNpLT5tb2RlX2ZsYWdzID0gIE1JUElfRFNJX01PREVfVklERU9fSFNFIHwgTUlQSV9EU0lfTU9E RV9WSURFTyB8CisJCQkgICBNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUzsKKworCXJldCA9 IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiZHNpLWxhbmVzIiwgJmRzaS0+bGFuZXMpOworCWlm IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBkc2ktbGFuZXMgcHJv cGVydHkgKCVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl2aWRlb21vZGVfZnJv bV90aW1pbmcoJnJhZF9kZWZhdWx0X3RpbWluZywgJnBhbmVsLT52bSk7CisKKwlvZl9wcm9wZXJ0 eV9yZWFkX3UzMihucCwgInBhbmVsLXdpZHRoLW1tIiwgJnBhbmVsLT53aWR0aF9tbSk7CisJb2Zf cHJvcGVydHlfcmVhZF91MzIobnAsICJwYW5lbC1oZWlnaHQtbW0iLCAmcGFuZWwtPmhlaWdodF9t bSk7CisKKwlwYW5lbC0+cmVzZXQgPSBkZXZtX2dwaW9kX2dldChkZXYsICJyZXNldCIsIEdQSU9E X09VVF9ISUdIKTsKKworCWlmIChJU19FUlIocGFuZWwtPnJlc2V0KSkKKwkJcGFuZWwtPnJlc2V0 ID0gTlVMTDsKKwllbHNlCisJCWdwaW9kX3NldF92YWx1ZShwYW5lbC0+cmVzZXQsIDApOworCisK KwltZW1zZXQoJmJsX3Byb3BzLCAwLCBzaXplb2YoYmxfcHJvcHMpKTsKKwlibF9wcm9wcy50eXBl ID0gQkFDS0xJR0hUX1JBVzsKKwlibF9wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDI1NTsKKworCXBh bmVsLT5iYWNrbGlnaHQgPSBkZXZtX2JhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoCisJCQkJZGV2 LCBkZXZfbmFtZShkZXYpLAorCQkJCWRldiwgZHNpLAorCQkJCSZyYWRfYmxfb3BzLCAmYmxfcHJv cHMpOworCWlmIChJU19FUlIocGFuZWwtPmJhY2tsaWdodCkpIHsKKwkJcmV0ID0gUFRSX0VSUihw YW5lbC0+YmFja2xpZ2h0KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgYmFj a2xpZ2h0ICglZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHJtX3BhbmVsX2lu aXQoJnBhbmVsLT5iYXNlKTsKKwlwYW5lbC0+YmFzZS5mdW5jcyA9ICZyYWRfcGFuZWxfZnVuY3M7 CisJcGFuZWwtPmJhc2UuZGV2ID0gZGV2OworCisJcmV0ID0gZHJtX3BhbmVsX2FkZCgmcGFuZWwt PmJhc2UpOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBtaXBpX2Rz aV9hdHRhY2goZHNpKTsKKwlpZiAocmV0IDwgMCkKKwkJZHJtX3BhbmVsX3JlbW92ZSgmcGFuZWwt PmJhc2UpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByYWRfcGFuZWxfcmVtb3Zl KHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlzdHJ1Y3QgcmFkX3BhbmVsICpyYWQg PSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShkc2kpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkc2kt PmRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gbWlwaV9kc2lfZGV0YWNoKGRzaSk7CisJaWYgKHJl dCA8IDApCisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGRldGFjaCBmcm9tIGhvc3Qg KCVkKVxuIiwKKwkJCXJldCk7CisKKwlkcm1fcGFuZWxfcmVtb3ZlKCZyYWQtPmJhc2UpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJhZF9wYW5lbF9zaHV0ZG93bihzdHJ1Y3QgbWlw aV9kc2lfZGV2aWNlICpkc2kpCit7CisJc3RydWN0IHJhZF9wYW5lbCAqcmFkID0gbWlwaV9kc2lf Z2V0X2RydmRhdGEoZHNpKTsKKworCXJhZF9wYW5lbF9kaXNhYmxlKCZyYWQtPmJhc2UpOworCXJh ZF9wYW5lbF91bnByZXBhcmUoJnJhZC0+YmFzZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIHJhZF9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAicmF5ZGl1 bSxybTY3MTkxIiwgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCByYWRfb2Zf bWF0Y2gpOworCitzdGF0aWMgc3RydWN0IG1pcGlfZHNpX2RyaXZlciByYWRfcGFuZWxfZHJpdmVy ID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInBhbmVsLXJheWRpdW0tcm02NzE5MSIsCisJ CS5vZl9tYXRjaF90YWJsZSA9IHJhZF9vZl9tYXRjaCwKKwl9LAorCS5wcm9iZSA9IHJhZF9wYW5l bF9wcm9iZSwKKwkucmVtb3ZlID0gcmFkX3BhbmVsX3JlbW92ZSwKKwkuc2h1dGRvd24gPSByYWRf cGFuZWxfc2h1dGRvd24sCit9OworbW9kdWxlX21pcGlfZHNpX2RyaXZlcihyYWRfcGFuZWxfZHJp dmVyKTsKKworTU9EVUxFX0FVVEhPUigiUm9iZXJ0IENoaXJhcyA8cm9iZXJ0LmNoaXJhc0BueHAu Y29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEUk0gRHJpdmVyIGZvciBSYXlkaXVtIFJNNjcx OTEgTUlQSSBEU0kgcGFuZWwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLS0gCjIuNy40 CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK