From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Chiras Subject: [PATCH 1/2] drm/panel: Add Raydium RM67191 DSI Panel Date: Tue, 3 Apr 2018 13:30:00 +0300 Message-ID: <1522751401-3381-2-git-send-email-robert.chiras@nxp.com> References: <1522751401-3381-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: Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0042.outbound.protection.outlook.com [104.47.42.42]) by gabe.freedesktop.org (Postfix) with ESMTPS id 455816E059 for ; Tue, 3 Apr 2018 10:30:09 +0000 (UTC) In-Reply-To: <1522751401-3381-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: linux-imx@nxp.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org QWRkIHN1cHBvcnQgZm9yIHRoZSBPTEVEIGRpc3BsYXkgYmFzZWQgb24gTUlQSS1EU0kgcHJvdG9j b2wgZnJvbSBSYXlkaXVtOgpSTTY3MTkxLgoKU2lnbmVkLW9mZi1ieTogUm9iZXJ0IENoaXJhcyA8 cm9iZXJ0LmNoaXJhc0BueHAuY29tPgotLS0KIC4uLi9iaW5kaW5ncy9kaXNwbGF5L3BhbmVsL3Jh eWRpdW0scm02NzE5MS50eHQgICAgIHwgIDU1ICsrCiBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2Nv bmZpZyAgICAgICAgICAgICAgICAgICAgICB8ICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vcGFuZWwv TWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vcGFu ZWwvcGFuZWwtcmF5ZGl1bS1ybTY3MTkxLmMgICAgICB8IDY0NSArKysrKysrKysrKysrKysrKysr KysKIDQgZmlsZXMgY2hhbmdlZCwgNzEwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxheS9wYW5lbC9yYXlkaXVt LHJtNjcxOTEudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3BhbmVsL3Bh bmVsLXJheWRpdW0tcm02NzE5MS5jCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0 cmVlL2JpbmRpbmdzL2Rpc3BsYXkvcGFuZWwvcmF5ZGl1bSxybTY3MTkxLnR4dCBiL0RvY3VtZW50 YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3BhbmVsL3JheWRpdW0scm02NzE5MS50 eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhNTdkZQotLS0gL2Rldi9u dWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3BhbmVs L3JheWRpdW0scm02NzE5MS50eHQKQEAgLTAsMCArMSw1NSBAQAorUmF5ZGl1bSBSTTY3MTcxIE9M RUQgTENEIHBhbmVsIHdpdGggTUlQSS1EU0kgcHJvdG9jb2wKKworUmVxdWlyZWQgcHJvcGVydGll czoKKy0gY29tcGF0aWJsZTogCQkicmF5ZGl1bSxybTY3MTkxIgorLSByZWc6CQkJdmlydHVhbCBj aGFubmVsIGZvciBNSVBJLURTSSBwcm90b2NvbAorCQkJbXVzdCBiZSA8MD4KKy0gZHNpLWxhbmVz OgkJbnVtYmVyIG9mIERTSSBsYW5lcyB0byBiZSB1c2VkCisJCQltdXN0IGJlIDwzPiBvciA8ND4K Ky0gcG9ydDogCQlpbnB1dCBwb3J0IG5vZGUgd2l0aCBlbmRwb2ludCBkZWZpbml0aW9uIGFzCisJ CQlkZWZpbmVkIGluIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncmFwaC50eHQ7 CisJCQl0aGUgaW5wdXQgcG9ydCBzaG91bGQgYmUgY29ubmVjdGVkIHRvIGEgTUlQSS1EU0kgZGV2 aWNlCisJCQlkcml2ZXIKKworT3B0aW9uYWwgcHJvcGVydGllczoKKy0gcmVzZXQtZ3BpbzoJCWEg R1BJTyBzcGVjIGZvciB0aGUgUlNUX0IgR1BJTyBwaW4KKy0gZGlzcGxheS10aW1pbmdzOgl0aW1p bmdzIGZvciB0aGUgY29ubmVjdGVkIHBhbmVsIGFjY29yZGluZyB0byBbMV0KKy0gcGluY3RybC0w CQlwaGFuZGxlIHRvIHRoZSBwaW4gc2V0dGluZ3MgZm9yIHRoZSByZXNldCBwaW4KKy0gcGFuZWwt d2lkdGgtbW06CXBoeXNpY2FsIHBhbmVsIHdpZHRoIFttbV0KKy0gcGFuZWwtaGVpZ2h0LW1tOglw aHlzaWNhbCBwYW5lbCBoZWlnaHQgW21tXQorCitbMV06IERvY3VtZW50YXRpb24vZGV2aWNldHJl ZS9iaW5kaW5ncy9kaXNwbGF5L2Rpc3BsYXktdGltaW5nLnR4dAorCitFeGFtcGxlOgorCisJcGFu ZWxAMCB7CisJCWNvbXBhdGlibGUgPSAicmF5ZGl1bSxybTY3MTkxIjsKKwkJcmVnID0gPDA+Owor CQlwaW5jdHJsLTAgPSA8JnBpbmN0cmxfbWlwaV9kc2lfMF8xX2VuPjsKKwkJcmVzZXQtZ3BpbyA9 IDwmZ3BpbzEgNyBHUElPX0FDVElWRV9ISUdIPjsKKwkJZHNpLWxhbmVzID0gPDQ+OworCQlwYW5l bC13aWR0aC1tbSA9IDw2OD47CisJCXBhbmVsLWhlaWdodC1tbSA9IDwxMjE+OworCQlkaXNwbGF5 LXRpbWluZ3MgeworCQkJdGltaW5nIHsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MTMyMDAwMDAw PjsKKwkJCQloYWN0aXZlID0gPDEwODA+OworCQkJCXZhY3RpdmUgPSA8MTkyMD47CisJCQkJaGJh Y2stcG9yY2ggPSA8MTE+OworCQkJCWhmcm9udC1wb3JjaCA9IDw0PjsKKwkJCQl2YmFjay1wb3Jj aCA9IDw0OD47CisJCQkJdmZyb250LXBvcmNoID0gPDIwPjsKKwkJCQloc3luYy1sZW4gPSA8NT47 CisJCQkJdnN5bmMtbGVuID0gPDEyPjsKKwkJCQloc3luYy1hY3RpdmUgPSA8MD47CisJCQkJdnN5 bmMtYWN0aXZlID0gPDA+OworCQkJCWRlLWFjdGl2ZSA9IDwwPjsKKwkJCQlwaXhlbGNsay1hY3Rp dmUgPSA8MD47CisJCQl9OworCQl9OworCQlwb3J0IHsKKwkJCXBhbmVsMV9pbjogZW5kcG9pbnQg eworCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmbWlwaTFfb3V0PjsKKwkJCX07CisJCX07CisJfTsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnIGIvZHJpdmVycy9ncHUv ZHJtL3BhbmVsL0tjb25maWcKaW5kZXggNmJhNDAzMS4uNzY5Y2JhNyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tj b25maWcKQEAgLTE1OCw0ICsxNTgsMTMgQEAgY29uZmlnIERSTV9QQU5FTF9TSVRST05JWF9TVDc3 ODlWCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUg U2l0cm9uaXgKIAkgIFNUNzc4OVYgY29udHJvbGxlciBmb3IgMjQweDMyMCBMQ0QgcGFuZWxzCiAK K2NvbmZpZyBEUk1fUEFORUxfUkFZRElVTV9STTY3MTkxCisJdHJpc3RhdGUgIlJheWRpdW0gUk02 NzE5MSBGSEQgcGFuZWwiCisJZGVwZW5kcyBvbiBPRgorCWRlcGVuZHMgb24gRFJNX01JUElfRFNJ CisJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCisJaGVscAorCSAgU2F5IFkgaGVy ZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgUmF5ZGl1bSBSTTY3MTkxIEZIRAor CSAgKDEwODB4MTkyMCkgRFNJIHBhbmVsLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUK aW5kZXggNmQyNTFlYi4uODM4ZDVjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVs L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQpAQCAtMTYsMyAr MTYsNCBAQCBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NFSUtPXzQzV1ZGMUcpICs9IHBhbmVsLXNl aWtvLTQzd3ZmMWcubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUTEwMVIxU1gwMSkg Kz0gcGFuZWwtc2hhcnAtbHExMDFyMXN4MDEubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSEFS UF9MUzA0M1QxTEUwMSkgKz0gcGFuZWwtc2hhcnAtbHMwNDN0MWxlMDEubwogb2JqLSQoQ09ORklH X0RSTV9QQU5FTF9TSVRST05JWF9TVDc3ODlWKSArPSBwYW5lbC1zaXRyb25peC1zdDc3ODl2Lm8K K29iai0kKENPTkZJR19EUk1fUEFORUxfUkFZRElVTV9STTY3MTkxKSArPSBwYW5lbC1yYXlkaXVt LXJtNjcxOTEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXJheWRp dW0tcm02NzE5MS5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXJheWRpdW0tcm02NzE5 MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YjBiZDQKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtcmF5ZGl1bS1ybTY3MTkxLmMK QEAgLTAsMCArMSw2NDUgQEAKKy8qCisgKiBpLk1YIGRybSBkcml2ZXIgLSBSYXlkaXVtIE1JUEkt RFNJIHBhbmVsIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBOWFAKKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5j bHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2luY2x1ZGUg PGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNs dWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgor I2luY2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5oPgorI2luY2x1ZGUgPHZpZGVvL29mX3ZpZGVv bW9kZS5oPgorI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgorCisjZGVmaW5lIENNRF9UQUJM RV9MRU4gMgordHlwZWRlZiB1OCBjbWRfc2V0X3RhYmxlW0NNRF9UQUJMRV9MRU5dOworCisvKiBX cml0ZSBNYW51ZmFjdHVyZSBDb21tYW5kIFNldCBDb250cm9sICovCisjZGVmaW5lIFdSTUFVQ0NU UiAweEZFCisKKy8qIE1hbnVmYWN0dXJlciBDb21tYW5kIFNldCBwYWdlcyAoQ01EMikgKi8KK3N0 YXRpYyBjb25zdCBjbWRfc2V0X3RhYmxlIG1hbnVmYWN0dXJlcl9jbWRfc2V0W10gPSB7CisJezB4 RkUsIDB4MEJ9LAorCXsweDI4LCAweDQwfSwKKwl7MHgyOSwgMHg0Rn0sCisJezB4RkUsIDB4MEV9 LAorCXsweDRCLCAweDAwfSwKKwl7MHg0QywgMHgwRn0sCisJezB4NEQsIDB4MjB9LAorCXsweDRF LCAweDQwfSwKKwl7MHg0RiwgMHg2MH0sCisJezB4NTAsIDB4QTB9LAorCXsweDUxLCAweEMwfSwK Kwl7MHg1MiwgMHhFMH0sCisJezB4NTMsIDB4RkZ9LAorCXsweEZFLCAweDBEfSwKKwl7MHgxOCwg MHgwOH0sCisJezB4NDIsIDB4MDB9LAorCXsweDA4LCAweDQxfSwKKwl7MHg0NiwgMHgwMn0sCisJ ezB4NzIsIDB4MDl9LAorCXsweEZFLCAweDBBfSwKKwl7MHgyNCwgMHgxN30sCisJezB4MDQsIDB4 MDd9LAorCXsweDFBLCAweDBDfSwKKwl7MHgwRiwgMHg0NH0sCisJezB4RkUsIDB4MDR9LAorCXsw eDAwLCAweDBDfSwKKwl7MHgwNSwgMHgwOH0sCisJezB4MDYsIDB4MDh9LAorCXsweDA4LCAweDA4 fSwKKwl7MHgwOSwgMHgwOH0sCisJezB4MEEsIDB4RTZ9LAorCXsweDBCLCAweDhDfSwKKwl7MHgx QSwgMHgxMn0sCisJezB4MUUsIDB4RTB9LAorCXsweDI5LCAweDkzfSwKKwl7MHgyQSwgMHg5M30s CisJezB4MkYsIDB4MDJ9LAorCXsweDMxLCAweDAyfSwKKwl7MHgzMywgMHgwNX0sCisJezB4Mzcs IDB4MkR9LAorCXsweDM4LCAweDJEfSwKKwl7MHgzQSwgMHgxRX0sCisJezB4M0IsIDB4MUV9LAor CXsweDNELCAweDI3fSwKKwl7MHgzRiwgMHg4MH0sCisJezB4NDAsIDB4NDB9LAorCXsweDQxLCAw eEUwfSwKKwl7MHg0RiwgMHgyRn0sCisJezB4NTAsIDB4MUV9LAorCXsweEZFLCAweDA2fSwKKwl7 MHgwMCwgMHhDQ30sCisJezB4MDUsIDB4MDV9LAorCXsweDA3LCAweEEyfSwKKwl7MHgwOCwgMHhD Q30sCisJezB4MEQsIDB4MDN9LAorCXsweDBGLCAweEEyfSwKKwl7MHgzMiwgMHhDQ30sCisJezB4 MzcsIDB4MDV9LAorCXsweDM5LCAweDgzfSwKKwl7MHgzQSwgMHhDQ30sCisJezB4NDEsIDB4MDR9 LAorCXsweDQzLCAweDgzfSwKKwl7MHg0NCwgMHhDQ30sCisJezB4NDksIDB4MDV9LAorCXsweDRC LCAweEEyfSwKKwl7MHg0QywgMHhDQ30sCisJezB4NTEsIDB4MDN9LAorCXsweDUzLCAweEEyfSwK Kwl7MHg3NSwgMHhDQ30sCisJezB4N0EsIDB4MDN9LAorCXsweDdDLCAweDgzfSwKKwl7MHg3RCwg MHhDQ30sCisJezB4ODIsIDB4MDJ9LAorCXsweDg0LCAweDgzfSwKKwl7MHg4NSwgMHhFQ30sCisJ ezB4ODYsIDB4MEZ9LAorCXsweDg3LCAweEZGfSwKKwl7MHg4OCwgMHgwMH0sCisJezB4OEEsIDB4 MDJ9LAorCXsweDhDLCAweEEyfSwKKwl7MHg4RCwgMHhFQX0sCisJezB4OEUsIDB4MDF9LAorCXsw eDhGLCAweEU4fSwKKwl7MHhGRSwgMHgwNn0sCisJezB4OTAsIDB4MEF9LAorCXsweDkyLCAweDA2 fSwKKwl7MHg5MywgMHhBMH0sCisJezB4OTQsIDB4QTh9LAorCXsweDk1LCAweEVDfSwKKwl7MHg5 NiwgMHgwRn0sCisJezB4OTcsIDB4RkZ9LAorCXsweDk4LCAweDAwfSwKKwl7MHg5QSwgMHgwMn0s CisJezB4OUMsIDB4QTJ9LAorCXsweEFDLCAweDA0fSwKKwl7MHhGRSwgMHgwNn0sCisJezB4QjEs IDB4MTJ9LAorCXsweEIyLCAweDE3fSwKKwl7MHhCMywgMHgxN30sCisJezB4QjQsIDB4MTd9LAor CXsweEI1LCAweDE3fSwKKwl7MHhCNiwgMHgxMX0sCisJezB4QjcsIDB4MDh9LAorCXsweEI4LCAw eDA5fSwKKwl7MHhCOSwgMHgwNn0sCisJezB4QkEsIDB4MDd9LAorCXsweEJCLCAweDE3fSwKKwl7 MHhCQywgMHgxN30sCisJezB4QkQsIDB4MTd9LAorCXsweEJFLCAweDE3fSwKKwl7MHhCRiwgMHgx N30sCisJezB4QzAsIDB4MTd9LAorCXsweEMxLCAweDE3fSwKKwl7MHhDMiwgMHgxN30sCisJezB4 QzMsIDB4MTd9LAorCXsweEM0LCAweDBGfSwKKwl7MHhDNSwgMHgwRX0sCisJezB4QzYsIDB4MDB9 LAorCXsweEM3LCAweDAxfSwKKwl7MHhDOCwgMHgxMH0sCisJezB4RkUsIDB4MDZ9LAorCXsweDk1 LCAweEVDfSwKKwl7MHg4RCwgMHhFRX0sCisJezB4NDQsIDB4RUN9LAorCXsweDRDLCAweEVDfSwK Kwl7MHgzMiwgMHhFQ30sCisJezB4M0EsIDB4RUN9LAorCXsweDdELCAweEVDfSwKKwl7MHg3NSwg MHhFQ30sCisJezB4MDAsIDB4RUN9LAorCXsweDA4LCAweEVDfSwKKwl7MHg4NSwgMHhFQ30sCisJ ezB4QTYsIDB4MjF9LAorCXsweEE3LCAweDA1fSwKKwl7MHhBOSwgMHgwNn0sCisJezB4ODIsIDB4 MDZ9LAorCXsweDQxLCAweDA2fSwKKwl7MHg3QSwgMHgwN30sCisJezB4MzcsIDB4MDd9LAorCXsw eDA1LCAweDA2fSwKKwl7MHg0OSwgMHgwNn0sCisJezB4MEQsIDB4MDR9LAorCXsweDUxLCAweDA0 fSwKK307CisKK3N0cnVjdCByYWRfcGFuZWwgeworCXN0cnVjdCBkcm1fcGFuZWwgYmFzZTsKKwlz dHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2k7CisKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldDsK KwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0OworCisJYm9vbCBwcmVwYXJlZDsK Kwlib29sIGVuYWJsZWQ7CisKKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOworCXUzMiB3aWR0aF9tbTsK Kwl1MzIgaGVpZ2h0X21tOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcmFkX3BhbmVsICp0 b19yYWRfcGFuZWwoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIGNvbnRhaW5l cl9vZihwYW5lbCwgc3RydWN0IHJhZF9wYW5lbCwgYmFzZSk7Cit9CisKK3N0YXRpYyBpbnQgcmFk X3BhbmVsX3B1c2hfY21kX2xpc3Qoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXNp emVfdCBpOworCWNvbnN0IHU4ICpjbWQ7CisJc2l6ZV90IGNvdW50ID0gc2l6ZW9mKG1hbnVmYWN0 dXJlcl9jbWRfc2V0KSAvIENNRF9UQUJMRV9MRU47CisJaW50IHJldCA9IDA7CisKKwlmb3IgKGkg PSAwOyBpIDwgY291bnQgOyBpKyspIHsKKwkJY21kID0gbWFudWZhY3R1cmVyX2NtZF9zZXRbaV07 CisJCXJldCA9IG1pcGlfZHNpX2dlbmVyaWNfd3JpdGUoZHNpLCBjbWQsIENNRF9UQUJMRV9MRU4p OworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJldDsKK307 CisKK3N0YXRpYyBpbnQgcmFkX3BhbmVsX3ByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwp Cit7CisJc3RydWN0IHJhZF9wYW5lbCAqcmFkID0gdG9fcmFkX3BhbmVsKHBhbmVsKTsKKwlzdHJ1 Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSByYWQtPmRzaTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmZHNpLT5kZXY7CisJaW50IHJldDsKKworCWlmIChyYWQtPnByZXBhcmVkKQorCQlyZXR1cm4g MDsKKworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlxuIik7CisKKwlpZiAocmFkLT5yZXNl dCAhPSBOVUxMKSB7CisJCWdwaW9kX3NldF92YWx1ZShyYWQtPnJlc2V0LCAxKTsKKwkJdXNsZWVw X3JhbmdlKDEwMDAwLCAxNTAwMCk7CisJCWdwaW9kX3NldF92YWx1ZShyYWQtPnJlc2V0LCAwKTsK KwkJdXNsZWVwX3JhbmdlKDUwMDAsIDEwMDAwKTsKKwkJZ3Bpb2Rfc2V0X3ZhbHVlKHJhZC0+cmVz ZXQsIDEpOworCQl1c2xlZXBfcmFuZ2UoMjAwMDAsIDI1MDAwKTsKKwl9CisKKwlkc2ktPm1vZGVf ZmxhZ3MgfD0gTUlQSV9EU0lfTU9ERV9MUE07CisKKwlyZXQgPSByYWRfcGFuZWxfcHVzaF9jbWRf bGlzdChkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVk IHRvIHNlbmQgTUNTICglZClcbiIsIHJldCk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBTZWxl Y3QgVXNlciBDb21tYW5kIFNldCB0YWJsZSAoQ01EMSkgKi8KKwlyZXQgPSBtaXBpX2RzaV9nZW5l cmljX3dyaXRlKGRzaSwgKHU4W10peyBXUk1BVUNDVFIsIDB4MDAgfSwgMik7CisJaWYgKHJldCA8 IDApCisJCWdvdG8gZmFpbDsKKworCS8qIFNvZnR3YXJlIHJlc2V0ICovCisJcmV0ID0gbWlwaV9k c2lfZGNzX3NvZnRfcmVzZXQoZHNpKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9S KGRldiwgIkZhaWxlZCB0byBkbyBTb2Z0d2FyZSBSZXNldCAoJWQpXG4iLCByZXQpOworCQlnb3Rv IGZhaWw7CisJfQorCisJdXNsZWVwX3JhbmdlKDEwMDAwLCAxNTAwMCk7CisKKwkvKiBTZXQgRFNJ IG1vZGUgKi8KKwlyZXQgPSBtaXBpX2RzaV9nZW5lcmljX3dyaXRlKGRzaSwgKHU4W10peyAweEMy LCAweDBCIH0sIDIpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFp bGVkIHRvIHNldCBEU0kgbW9kZSAoJWQpXG4iLCByZXQpOworCQlnb3RvIGZhaWw7CisJfQorCS8q IFNldCB0ZWFyIE9OICovCisJcmV0ID0gbWlwaV9kc2lfZGNzX3NldF90ZWFyX29uKGRzaSwgTUlQ SV9EU0lfRENTX1RFQVJfTU9ERV9WQkxBTkspOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZf RVJST1IoZGV2LCAiRmFpbGVkIHRvIHNldCB0ZWFyIE9OICglZClcbiIsIHJldCk7CisJCWdvdG8g ZmFpbDsKKwl9CisJLyogU2V0IHRlYXIgc2NhbmxpbmUgKi8KKwlyZXQgPSBtaXBpX2RzaV9kY3Nf c2V0X3RlYXJfc2NhbmxpbmUoZHNpLCAweDM4MCk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RF Vl9FUlJPUihkZXYsICJGYWlsZWQgdG8gc2V0IHRlYXIgc2NhbmxpbmUgKCVkKVxuIiwgcmV0KTsK KwkJZ290byBmYWlsOworCX0KKwkvKiBTZXQgcGl4ZWwgZm9ybWF0IHRvIFJHQjg4OCAqLworCXJl dCA9IG1pcGlfZHNpX2Rjc19zZXRfcGl4ZWxfZm9ybWF0KGRzaSwgMHg3Nyk7CisJaWYgKHJldCA8 IDApIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gc2V0IHBpeGVsIGZvcm1hdCAo JWQpXG4iLCByZXQpOworCQlnb3RvIGZhaWw7CisJfQorCS8qIFNldCBkaXNwbGF5IGJyaWdodG5l c3MgKi8KKwlyZXQgPSBtaXBpX2RzaV9kY3Nfc2V0X2Rpc3BsYXlfYnJpZ2h0bmVzcyhkc2ksIDB4 MjApOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHNl dCBkaXNwbGF5IGJyaWdodG5lc3MgKCVkKVxuIiwKKwkJCSAgICAgIHJldCk7CisJCWdvdG8gZmFp bDsKKwl9CisJLyogRXhpdCBzbGVlcCBtb2RlICovCisJcmV0ID0gbWlwaV9kc2lfZGNzX2V4aXRf c2xlZXBfbW9kZShkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAi RmFpbGVkIHRvIGV4aXQgc2xlZXAgbW9kZSAoJWQpXG4iLCByZXQpOworCQlnb3RvIGZhaWw7CisJ fQorCisJdXNsZWVwX3JhbmdlKDUwMDAsIDEwMDAwKTsKKworCXJldCA9IG1pcGlfZHNpX2Rjc19z ZXRfZGlzcGxheV9vbihkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoZGV2 LCAiRmFpbGVkIHRvIHNldCBkaXNwbGF5IE9OICglZClcbiIsIHJldCk7CisJCWdvdG8gZmFpbDsK Kwl9CisKKwlyYWQtPnByZXBhcmVkID0gdHJ1ZTsKKworCXJldHVybiAwOworCitmYWlsOgorCWlm IChyYWQtPnJlc2V0ICE9IE5VTEwpCisJCWdwaW9kX3NldF92YWx1ZShyYWQtPnJlc2V0LCAwKTsK KworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmFkX3BhbmVsX3VucHJlcGFyZShzdHJ1 Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgcmFkX3BhbmVsICpyYWQgPSB0b19yYWRf cGFuZWwocGFuZWwpOworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSA9IHJhZC0+ZHNpOwor CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkc2ktPmRldjsKKwlpbnQgcmV0OworCisJaWYgKCFyYWQt PnByZXBhcmVkKQorCQlyZXR1cm4gMDsKKworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIlxu Iik7CisKKwlkc2ktPm1vZGVfZmxhZ3MgfD0gTUlQSV9EU0lfTU9ERV9MUE07CisKKwlyZXQgPSBt aXBpX2RzaV9kY3Nfc2V0X2Rpc3BsYXlfb2ZmKGRzaSk7CisJaWYgKHJldCA8IDApCisJCURSTV9E RVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHNldCBkaXNwbGF5IE9GRiAoJWQpXG4iLCByZXQpOwor CisJdXNsZWVwX3JhbmdlKDUwMDAsIDEwMDAwKTsKKworCXJldCA9IG1pcGlfZHNpX2Rjc19lbnRl cl9zbGVlcF9tb2RlKGRzaSk7CisJaWYgKHJldCA8IDApCisJCURSTV9ERVZfRVJST1IoZGV2LCAi RmFpbGVkIHRvIGVudGVyIHNsZWVwIG1vZGUgKCVkKVxuIiwgcmV0KTsKKworCXVzbGVlcF9yYW5n ZSgxMDAwMCwgMTUwMDApOworCisJaWYgKHJhZC0+cmVzZXQgIT0gTlVMTCkgeworCQlncGlvZF9z ZXRfdmFsdWUocmFkLT5yZXNldCwgMCk7CisJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTUwMDApOwor CX0KKworCXJhZC0+cHJlcGFyZWQgPSBmYWxzZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IHJhZF9wYW5lbF9lbmFibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0 IHJhZF9wYW5lbCAqcmFkID0gdG9fcmFkX3BhbmVsKHBhbmVsKTsKKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmcmFkLT5kc2ktPmRldjsKKworCWlmIChyYWQtPmVuYWJsZWQpCisJCXJldHVybiAwOwor CisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAiXG4iKTsKKworCXJhZC0+YmFja2xpZ2h0LT5w cm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMo cmFkLT5iYWNrbGlnaHQpOworCisJcmFkLT5lbmFibGVkID0gdHJ1ZTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IHJhZF9wYW5lbF9kaXNhYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVs KQoreworCXN0cnVjdCByYWRfcGFuZWwgKnJhZCA9IHRvX3JhZF9wYW5lbChwYW5lbCk7CisJc3Ry dWN0IGRldmljZSAqZGV2ID0gJnJhZC0+ZHNpLT5kZXY7CisKKwlpZiAoIXJhZC0+ZW5hYmxlZCkK KwkJcmV0dXJuIDA7CisKKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJcbiIpOworCisJcmFk LT5iYWNrbGlnaHQtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfUE9XRVJET1dOOworCWJhY2tsaWdo dF91cGRhdGVfc3RhdHVzKHJhZC0+YmFja2xpZ2h0KTsKKworCXJhZC0+ZW5hYmxlZCA9IGZhbHNl OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmFkX3BhbmVsX2dldF9tb2RlcyhzdHJ1 Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgcmFkX3BhbmVsICpyYWQgPSB0b19yYWRf cGFuZWwocGFuZWwpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZyYWQtPmRzaS0+ZGV2OworCXN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBwYW5lbC0+Y29ubmVjdG9yOworCXN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCXUzMiBidXNfZm9ybWF0ID0gTUVESUFfQlVTX0ZN VF9SR0I4ODhfMVgyNDsKKwl1MzIgKmJ1c19mbGFncyA9ICZjb25uZWN0b3ItPmRpc3BsYXlfaW5m by5idXNfZmxhZ3M7CisJaW50IHJldDsKKworCW1vZGUgPSBkcm1fbW9kZV9jcmVhdGUoY29ubmVj dG9yLT5kZXYpOworCWlmICghbW9kZSkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0 byBjcmVhdGUgZGlzcGxheSBtb2RlIVxuIik7CisJCXJldHVybiAwOworCX0KKworCWRybV9kaXNw bGF5X21vZGVfZnJvbV92aWRlb21vZGUoJnJhZC0+dm0sIG1vZGUpOworCW1vZGUtPndpZHRoX21t ID0gcmFkLT53aWR0aF9tbTsKKwltb2RlLT5oZWlnaHRfbW0gPSByYWQtPmhlaWdodF9tbTsKKwlj b25uZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0aF9tbSA9IHJhZC0+d2lkdGhfbW07CisJY29ubmVj dG9yLT5kaXNwbGF5X2luZm8uaGVpZ2h0X21tID0gcmFkLT5oZWlnaHRfbW07CisJbW9kZS0+dHlw ZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CisKKwlp ZiAocmFkLT52bS5mbGFncyAmIERJU1BMQVlfRkxBR1NfREVfSElHSCkKKwkJKmJ1c19mbGFncyB8 PSBEUk1fQlVTX0ZMQUdfREVfSElHSDsKKwlpZiAocmFkLT52bS5mbGFncyAmIERJU1BMQVlfRkxB R1NfREVfTE9XKQorCQkqYnVzX2ZsYWdzIHw9IERSTV9CVVNfRkxBR19ERV9MT1c7CisJaWYgKHJh ZC0+dm0uZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX1BJWERBVEFfTkVHRURHRSkKKwkJKmJ1c19mbGFn cyB8PSBEUk1fQlVTX0ZMQUdfUElYREFUQV9ORUdFREdFOworCWlmIChyYWQtPnZtLmZsYWdzICYg RElTUExBWV9GTEFHU19QSVhEQVRBX1BPU0VER0UpCisJCSpidXNfZmxhZ3MgfD0gRFJNX0JVU19G TEFHX1BJWERBVEFfUE9TRURHRTsKKworCXJldCA9IGRybV9kaXNwbGF5X2luZm9fc2V0X2J1c19m b3JtYXRzKCZjb25uZWN0b3ItPmRpc3BsYXlfaW5mbywKKwkJCQkJICAgICAgICZidXNfZm9ybWF0 LCAxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZHJtX21vZGVfcHJvYmVkX2FkZChw YW5lbC0+Y29ubmVjdG9yLCBtb2RlKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJh ZF9ibF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJc3Ry dWN0IG1pcGlfZHNpX2RldmljZSAqZHNpID0gYmxfZ2V0X2RhdGEoYmwpOworCXN0cnVjdCByYWRf cGFuZWwgKnJhZCA9IG1pcGlfZHNpX2dldF9kcnZkYXRhKGRzaSk7CisJc3RydWN0IGRldmljZSAq ZGV2ID0gJmRzaS0+ZGV2OworCXUxNiBicmlnaHRuZXNzOworCWludCByZXQ7CisKKwlpZiAoIXJh ZC0+cHJlcGFyZWQpCisJCXJldHVybiAwOworCisJRFJNX0RFVl9ERUJVR19EUklWRVIoZGV2LCAi XG4iKTsKKworCWRzaS0+bW9kZV9mbGFncyAmPSB+TUlQSV9EU0lfTU9ERV9MUE07CisKKwlyZXQg PSBtaXBpX2RzaV9kY3NfZ2V0X2Rpc3BsYXlfYnJpZ2h0bmVzcyhkc2ksICZicmlnaHRuZXNzKTsK KwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWJsLT5wcm9wcy5icmlnaHRuZXNzID0g YnJpZ2h0bmVzczsKKworCXJldHVybiBicmlnaHRuZXNzICYgMHhmZjsKK30KKworc3RhdGljIGlu dCByYWRfYmxfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJ c3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpID0gYmxfZ2V0X2RhdGEoYmwpOworCXN0cnVjdCBy YWRfcGFuZWwgKnJhZCA9IG1pcGlfZHNpX2dldF9kcnZkYXRhKGRzaSk7CisJc3RydWN0IGRldmlj ZSAqZGV2ID0gJmRzaS0+ZGV2OworCWludCByZXQgPSAwOworCisJaWYgKCFyYWQtPnByZXBhcmVk KQorCQlyZXR1cm4gMDsKKworCURSTV9ERVZfREVCVUdfRFJJVkVSKGRldiwgIk5ldyBicmlnaHRu ZXNzOiAlZFxuIiwgYmwtPnByb3BzLmJyaWdodG5lc3MpOworCisJZHNpLT5tb2RlX2ZsYWdzICY9 IH5NSVBJX0RTSV9NT0RFX0xQTTsKKworCXJldCA9IG1pcGlfZHNpX2Rjc19zZXRfZGlzcGxheV9i cmlnaHRuZXNzKGRzaSwgYmwtPnByb3BzLmJyaWdodG5lc3MpOworCWlmIChyZXQgPCAwKQorCQly ZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xp Z2h0X29wcyByYWRfYmxfb3BzID0geworCS51cGRhdGVfc3RhdHVzID0gcmFkX2JsX3VwZGF0ZV9z dGF0dXMsCisJLmdldF9icmlnaHRuZXNzID0gcmFkX2JsX2dldF9icmlnaHRuZXNzLAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFuZWxfZnVuY3MgcmFkX3BhbmVsX2Z1bmNzID0gewor CS5wcmVwYXJlID0gcmFkX3BhbmVsX3ByZXBhcmUsCisJLnVucHJlcGFyZSA9IHJhZF9wYW5lbF91 bnByZXBhcmUsCisJLmVuYWJsZSA9IHJhZF9wYW5lbF9lbmFibGUsCisJLmRpc2FibGUgPSByYWRf cGFuZWxfZGlzYWJsZSwKKwkuZ2V0X21vZGVzID0gcmFkX3BhbmVsX2dldF9tb2RlcywKK307CisK Ky8qCisgKiBUaGUgY2xvY2sgbWlnaHQgcmFuZ2UgZnJvbSA2Nk1IeiAoMzBIeiByZWZyZXNoIHJh dGUpCisgKiB0byAxMzJNSHogKDYwSHogcmVmcmVzaCByYXRlKQorICovCitzdGF0aWMgY29uc3Qg c3RydWN0IGRpc3BsYXlfdGltaW5nIHJhZF9kZWZhdWx0X3RpbWluZyA9IHsKKwkucGl4ZWxjbG9j ayA9IHsgNjYwMDAwMDAsIDEyMDAwMDAwMCwgMTMyMDAwMDAwIH0sCisJLmhhY3RpdmUgPSB7IDEw ODAsIDEwODAsIDEwODAgfSwKKwkuaGZyb250X3BvcmNoID0geyAyMCwgMjAsIDIwIH0sCisJLmhz eW5jX2xlbiA9IHsgMiwgMiwgMiB9LAorCS5oYmFja19wb3JjaCA9IHsgMzQsIDM0LCAzNCB9LAor CS52YWN0aXZlID0geyAxOTIwLCAxOTIwLCAxOTIwIH0sCisJLnZmcm9udF9wb3JjaCA9IHsgMTAs IDEwLCAxMCB9LAorCS52c3luY19sZW4gPSB7IDIsIDIsIDIgfSwKKwkudmJhY2tfcG9yY2ggPSB7 IDQsIDQsIDQgfSwKKwkuZmxhZ3MgPSBESVNQTEFZX0ZMQUdTX0hTWU5DX0xPVyB8CisJCSBESVNQ TEFZX0ZMQUdTX1ZTWU5DX0xPVyB8CisJCSBESVNQTEFZX0ZMQUdTX0RFX0xPVyB8CisJCSBESVNQ TEFZX0ZMQUdTX1BJWERBVEFfTkVHRURHRSwKK307CisKK3N0YXRpYyBpbnQgcmFkX3BhbmVsX3By b2JlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmZHNpLT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwlz dHJ1Y3QgZGV2aWNlX25vZGUgKnRpbWluZ3M7CisJc3RydWN0IHJhZF9wYW5lbCAqcGFuZWw7CisJ c3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIGJsX3Byb3BzOworCWludCByZXQ7CisKKwlwYW5l bCA9IGRldm1fa3phbGxvYygmZHNpLT5kZXYsIHNpemVvZigqcGFuZWwpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIXBhbmVsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1pcGlfZHNpX3NldF9kcnZkYXRh KGRzaSwgcGFuZWwpOworCisJcGFuZWwtPmRzaSA9IGRzaTsKKworCWRzaS0+Zm9ybWF0ID0gTUlQ SV9EU0lfRk1UX1JHQjg4ODsKKwlkc2ktPm1vZGVfZmxhZ3MgPSAgTUlQSV9EU0lfTU9ERV9WSURF T19IU0UgfCBNSVBJX0RTSV9NT0RFX1ZJREVPIHwKKwkJCSAgIE1JUElfRFNJX0NMT0NLX05PTl9D T05USU5VT1VTOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJkc2ktbGFuZXMi LCAmZHNpLT5sYW5lcyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gZ2V0IGRzaS1sYW5lcyBwcm9wZXJ0eSAoJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKworCS8qCisJICogJ2Rpc3BsYXktdGltaW5ncycgaXMgb3B0aW9uYWwsIHNvIHZlcmlmeSBp ZiB0aGUgbm9kZSBpcyBwcmVzZW50CisJICogYmVmb3JlIGNhbGxpbmcgb2ZfZ2V0X3ZpZGVvbW9k ZSBzbyB3ZSB3b24ndCBnZXQgY29uc29sZSBlcnJvcgorCSAqIG1lc3NhZ2VzCisJICovCisJdGlt aW5ncyA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCAiZGlzcGxheS10aW1pbmdzIik7CisJaWYg KHRpbWluZ3MpIHsKKwkJb2Zfbm9kZV9wdXQodGltaW5ncyk7CisJCXJldCA9IG9mX2dldF92aWRl b21vZGUobnAsICZwYW5lbC0+dm0sIDApOworCX0gZWxzZSB7CisJCXZpZGVvbW9kZV9mcm9tX3Rp bWluZygmcmFkX2RlZmF1bHRfdGltaW5nLCAmcGFuZWwtPnZtKTsKKwl9CisJaWYgKHJldCA8IDAp CisJCXJldHVybiByZXQ7CisKKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInBhbmVsLXdpZHRo LW1tIiwgJnBhbmVsLT53aWR0aF9tbSk7CisJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJwYW5l bC1oZWlnaHQtbW0iLCAmcGFuZWwtPmhlaWdodF9tbSk7CisKKwlwYW5lbC0+cmVzZXQgPSBkZXZt X2dwaW9kX2dldChkZXYsICJyZXNldCIsIEdQSU9EX09VVF9ISUdIKTsKKworCWlmIChJU19FUlIo cGFuZWwtPnJlc2V0KSkKKwkJcGFuZWwtPnJlc2V0ID0gTlVMTDsKKwllbHNlCisJCWdwaW9kX3Nl dF92YWx1ZShwYW5lbC0+cmVzZXQsIDApOworCisKKwltZW1zZXQoJmJsX3Byb3BzLCAwLCBzaXpl b2YoYmxfcHJvcHMpKTsKKwlibF9wcm9wcy50eXBlID0gQkFDS0xJR0hUX1JBVzsKKwlibF9wcm9w cy5icmlnaHRuZXNzID0gMjU1OworCWJsX3Byb3BzLm1heF9icmlnaHRuZXNzID0gMjU1OworCisJ cGFuZWwtPmJhY2tsaWdodCA9IGRldm1fYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigKKwkJCQlk ZXYsIGRldl9uYW1lKGRldiksCisJCQkJZGV2LCBkc2ksCisJCQkJJnJhZF9ibF9vcHMsICZibF9w cm9wcyk7CisJaWYgKElTX0VSUihwYW5lbC0+YmFja2xpZ2h0KSkgeworCQlyZXQgPSBQVFJfRVJS KHBhbmVsLT5iYWNrbGlnaHQpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBi YWNrbGlnaHQgKCVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcm1fcGFuZWxf aW5pdCgmcGFuZWwtPmJhc2UpOworCXBhbmVsLT5iYXNlLmZ1bmNzID0gJnJhZF9wYW5lbF9mdW5j czsKKwlwYW5lbC0+YmFzZS5kZXYgPSBkZXY7CisKKwlyZXQgPSBkcm1fcGFuZWxfYWRkKCZwYW5l bC0+YmFzZSk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG1pcGlf ZHNpX2F0dGFjaChkc2kpOworCWlmIChyZXQgPCAwKQorCQlkcm1fcGFuZWxfcmVtb3ZlKCZwYW5l bC0+YmFzZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJhZF9wYW5lbF9yZW1v dmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCByYWRfcGFuZWwgKnJh ZCA9IG1pcGlfZHNpX2dldF9kcnZkYXRhKGRzaSk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRz aS0+ZGV2OworCWludCByZXQ7CisKKwlyZXQgPSByYWRfcGFuZWxfdW5wcmVwYXJlKCZyYWQtPmJh c2UpOworCXJldCB8PSByYWRfcGFuZWxfZGlzYWJsZSgmcmFkLT5iYXNlKTsKKwlpZiAocmV0IDwg MCkKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gZGlzYWJsZSBwYW5lbCAoJWQpXG4i LCByZXQpOworCisJcmV0ID0gbWlwaV9kc2lfZGV0YWNoKGRzaSk7CisJaWYgKHJldCA8IDApCisJ CURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIGRldGFjaCBmcm9tIGhvc3QgKCVkKVxuIiwK KwkJCXJldCk7CisKKwlkcm1fcGFuZWxfZGV0YWNoKCZyYWQtPmJhc2UpOworCisJaWYgKHJhZC0+ YmFzZS5kZXYpCisJCWRybV9wYW5lbF9yZW1vdmUoJnJhZC0+YmFzZSk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIHZvaWQgcmFkX3BhbmVsX3NodXRkb3duKHN0cnVjdCBtaXBpX2RzaV9kZXZp Y2UgKmRzaSkKK3sKKwlzdHJ1Y3QgcmFkX3BhbmVsICpyYWQgPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0 YShkc2kpOworCisJcmFkX3BhbmVsX3VucHJlcGFyZSgmcmFkLT5iYXNlKTsKKwlyYWRfcGFuZWxf ZGlzYWJsZSgmcmFkLT5iYXNlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgcmFkX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJyYXlkaXVtLHJtNjcxOTEi LCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJhZF9vZl9tYXRjaCk7CisK K3N0YXRpYyBzdHJ1Y3QgbWlwaV9kc2lfZHJpdmVyIHJhZF9wYW5lbF9kcml2ZXIgPSB7CisJLmRy aXZlciA9IHsKKwkJLm5hbWUgPSAicGFuZWwtcmF5ZGl1bS1ybTY3MTkxIiwKKwkJLm9mX21hdGNo X3RhYmxlID0gcmFkX29mX21hdGNoLAorCX0sCisJLnByb2JlID0gcmFkX3BhbmVsX3Byb2JlLAor CS5yZW1vdmUgPSByYWRfcGFuZWxfcmVtb3ZlLAorCS5zaHV0ZG93biA9IHJhZF9wYW5lbF9zaHV0 ZG93biwKK307Cittb2R1bGVfbWlwaV9kc2lfZHJpdmVyKHJhZF9wYW5lbF9kcml2ZXIpOworCitN T0RVTEVfQVVUSE9SKCJOWFAgU2VtaWNvbmR1Y3RvciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJS YXlkaXVtIFJNNjcxOTEiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLS0gCjIuNy40Cgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwg bWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK