From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhinav Kumar Subject: [PATCH v5 1/2] drm/panel: Add support for Truly NT35597 panel Date: Thu, 2 Aug 2018 20:09:35 -0700 Message-ID: <1533265776-14326-1-git-send-email-abhinavk@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: linux-arm-msm@vger.kernel.org, "abhinavk@codeaurora.org" , thierry.reding@gmail.com, hoegsberg@google.com, chandanu@codeaurora.org List-Id: linux-arm-msm@vger.kernel.org RnJvbTogImFiaGluYXZrQGNvZGVhdXJvcmEub3JnIiA8YWJoaW5hdmtAY29kZWF1cm9yYS5vcmc+ CgpBZGQgc3VwcG9ydCBmb3IgVHJ1bHkgTlQzNTU5NyBwYW5lbCB1c2VkCmluIE1TTSByZWZlcmVu Y2UgcGxhdGZvcm1zLgoKVGhpcyBwYW5lbCBzdXBwb3J0cyBib3RoIHNpbmdsZSBEU0kgYW5kIGR1 YWwgRFNJCm1vZGVzLgoKSG93ZXZlciwgdGhpcyBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IG9u bHkgZm9yCmR1YWwgRFNJIG1vZGUuCgpDaGFuZ2VzIGluIHY1OgotIEFkZGVkIGNvbW1lbnRzIGZv ciB0aGUgZGVsYXlzCi0gRml4IGVycm9yIG1lc3NhZ2VzIGFuZCByZXR1cm4gY29kZQotIFN0YXJ0 IHVzaW5nIGJhY2tsaWdodF9lbmFibGUvZGlzYWJsZSBoZWxwZXJzCi0gU3RhcnQgdXNpbmcgQVJS QVlfU0laRSBldmVyeXdoZXJlCi0gU3BsaXQgdGhlIHBhbmVsIGNvbW1hbmRzIGludG8gdGhyZWUg c2V0cyB0bwogIHJlbW92ZSByZWR1bmRhbnQgc3RydWN0dXJlIGZpZWxkcyBhbmQgc2ltcGxpZnkK ICB0aGUgRENTIGNvbW1hbmQgc2VuZGluZyBtZXRob2QKLSBVc2Ugb2ZfZ2V0X2RybV9kaXNwbGF5 X21vZGUoKSBhbmQgc2ltcGxpZnkKICBnZXRfbW9kZXMgZnVuY3Rpb24KLSBSZW1vdmUgdHJ1bHlf d3F4Z2FfcGFuZWxfZGVsIGFuZCBkbyBuZWNlc3NhcnkKICBjbGVhbnVwCi0gUmVwbGFjZSBkZXZf ZXJyIHdpdGggRFJNX0RFVl9FUlJPUgoKU2lnbmVkLW9mZi1ieTogQXJjaGl0IFRhbmVqYSA8YXJj aGl0dEBjb2RlYXVyb3JhLm9yZz4KU2lnbmVkLW9mZi1ieTogQWJoaW5hdiBLdW1hciA8YWJoaW5h dmtAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgICAg ICAgICAgICAgICB8ICAgOCArCiBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgICAgICAg ICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1udDM1NTk3 LmMgfCA2ODQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA2 OTMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wYW5l bC9wYW5lbC10cnVseS1udDM1NTk3LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFu ZWwvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCmluZGV4IDYwMjBjMzAu LjdhZTc0YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCkBAIC0xODYsNCArMTg2LDEyIEBAIGNvbmZp ZyBEUk1fUEFORUxfU0lUUk9OSVhfU1Q3Nzg5VgogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0 byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFNpdHJvbml4CiAJICBTVDc3ODlWIGNvbnRyb2xsZXIg Zm9yIDI0MHgzMjAgTENEIHBhbmVscwogCitjb25maWcgRFJNX1BBTkVMX1RSVUxZX05UMzU1OTdf V1FYR0EKKwl0cmlzdGF0ZSAiVHJ1bHkgV1FYR0EiCisJZGVwZW5kcyBvbiBPRgorCWRlcGVuZHMg b24gRFJNX01JUElfRFNJCisJc2VsZWN0IFZJREVPTU9ERV9IRUxQRVJTCisJaGVscAorCSAgU2F5 IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgVHJ1bHkgTlQzNTU5NyBX UVhHQSBEdWFsIERTSQorCSAgVmlkZW8gTW9kZSBwYW5lbAogZW5kbWVudQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01h a2VmaWxlCmluZGV4IDVjY2FhYTkuLjgwZmQxOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKQEAg LTE5LDMgKzE5LDQgQEAgb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TRUlLT180M1dWRjFHKSArPSBw YW5lbC1zZWlrby00M3d2ZjFnLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0hBUlBfTFExMDFS MVNYMDEpICs9IHBhbmVsLXNoYXJwLWxxMTAxcjFzeDAxLm8KIG9iai0kKENPTkZJR19EUk1fUEFO RUxfU0hBUlBfTFMwNDNUMUxFMDEpICs9IHBhbmVsLXNoYXJwLWxzMDQzdDFsZTAxLm8KIG9iai0k KENPTkZJR19EUk1fUEFORUxfU0lUUk9OSVhfU1Q3Nzg5VikgKz0gcGFuZWwtc2l0cm9uaXgtc3Q3 Nzg5di5vCitvYmotJChDT05GSUdfRFJNX1BBTkVMX1RSVUxZX05UMzU1OTdfV1FYR0EpICs9IHBh bmVsLXRydWx5LW50MzU1OTcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3Bh bmVsLXRydWx5LW50MzU1OTcuYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1u dDM1NTk3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZjNzY2MgotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1udDM1NTk3 LmMKQEAgLTAsMCArMSw2ODQgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgor I2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2Nv bnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9jb25zdW1lci5oPgorCisjaW5jbHVk ZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+CisjaW5jbHVkZSA8dmlkZW8vb2ZfdmlkZW9tb2RlLmg+ CisjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgor I2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+ CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVndWxhdG9yX25hbWVzW10gPSB7CisJInZk ZGEiLAorCSJ2ZGlzcHAiLAorCSJ2ZGlzcG4iLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcg Y29uc3QgcmVndWxhdG9yX2VuYWJsZV9sb2Fkc1tdID0geworCTYyMDAwLAorCTEwMDAwMCwKKwkx MDAwMDAsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb25zdCByZWd1bGF0b3JfZGlzYWJs ZV9sb2Fkc1tdID0geworCTgwLAorCTEwMCwKKwkxMDAsCit9OworCitzdHJ1Y3QgdHJ1bHlfd3F4 Z2EgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX3BhbmVsIHBhbmVsOworCisJ c3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbQVJSQVlfU0laRShyZWd1bGF0b3Jf bmFtZXMpXTsKKworCXN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87CisJc3RydWN0IGdwaW9f ZGVzYyAqbW9kZV9ncGlvOworCisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodDsK KwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBkbTsKKwl1MzIgYnVzX2ZsYWdzOworCXN0cnVjdCBt aXBpX2RzaV9kZXZpY2UgKmRzaVsyXTsKKworCWJvb2wgcHJlcGFyZWQ7CisJYm9vbCBlbmFibGVk OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKnBhbmVsX3RvX3RydWx5 X3dxeGdhKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXJldHVybiBjb250YWluZXJfb2Yo cGFuZWwsIHN0cnVjdCB0cnVseV93cXhnYSwgcGFuZWwpOworfQorCisjZGVmaW5lIE1BWF9MRU4J NQorI2RlZmluZSBTSE9SVF9QQUNLRVQgMgorI2RlZmluZSBMT05HX1BBQ0tFVCA0CisKK3N0cnVj dCBjbWRfc2V0IHsKKwl1OCBjb21tYW5kc1tNQVhfTEVOXTsKK307CisKK3N0cnVjdCBjbWRfc2V0 IHBhbmVsX2NtZHNfc2V0XzFbXSA9IHsKKwkvKiBDTUQyX1AwICovCisJeyB7IDB4ZmYsIDB4MjAg fSB9LAorCXsgeyAweGZiLCAweDAxIH0gfSwKKwl7IHsgMHgwMCwgMHgwMSB9IH0sCisJeyB7IDB4 MDEsIDB4NTUgfSB9LAorCXsgeyAweDAyLCAweDQ1IH0gfSwKKwl7IHsgMHgwNSwgMHg0MCB9IH0s CisJeyB7IDB4MDYsIDB4MTkgfSB9LAorCXsgeyAweDA3LCAweDFlIH0gfSwKKwl7IHsgMHgwYiwg MHg3MyB9IH0sCisJeyB7IDB4MGMsIDB4NzMgfSB9LAorCXsgeyAweDBlLCAweGIwIH0gfSwKKwl7 IHsgMHgwZiwgMHhhZSB9IH0sCisJeyB7IDB4MTEsIDB4YjggfSB9LAorCXsgeyAweDEzLCAweDAw IH0gfSwKKwl7IHsgMHg1OCwgMHg4MCB9IH0sCisJeyB7IDB4NTksIDB4MDEgfSB9LAorCXsgeyAw eDVhLCAweDAwIH0gfSwKKwl7IHsgMHg1YiwgMHgwMSB9IH0sCisJeyB7IDB4NWMsIDB4ODAgfSB9 LAorCXsgeyAweDVkLCAweDgxIH0gfSwKKwl7IHsgMHg1ZSwgMHgwMCB9IH0sCisJeyB7IDB4NWYs IDB4MDEgfSB9LAorCXsgeyAweDcyLCAweDExIH0gfSwKKwl7IHsgMHg2OCwgMHgwMyB9IH0sCisJ LyogQ01EMl9QNCAqLworCXsgeyAweEZGLCAweDI0IH0gfSwKKwl7IHsgMHhGQiwgMHgwMSB9IH0s CisJeyB7IDB4MDAsIDB4MUMgfSB9LAorCXsgeyAweDAxLCAweDBCIH0gfSwKKwl7IHsgMHgwMiwg MHgwQyB9IH0sCisJeyB7IDB4MDMsIDB4MDEgfSB9LAorCXsgeyAweDA0LCAweDBGIH0gfSwKKwl7 IHsgMHgwNSwgMHgxMCB9IH0sCisJeyB7IDB4MDYsIDB4MTAgfSB9LAorCXsgeyAweDA3LCAweDEw IH0gfSwKKwl7IHsgMHgwOCwgMHg4OSB9IH0sCisJeyB7IDB4MDksIDB4OEEgfSB9LAorCXsgeyAw eDBBLCAweDEzIH0gfSwKKwl7IHsgMHgwQiwgMHgxMyB9IH0sCisJeyB7IDB4MEMsIDB4MTUgfSB9 LAorCXsgeyAweDBELCAweDE1IH0gfSwKKwl7IHsgMHgwRSwgMHgxNyB9IH0sCisJeyB7IDB4MEYs IDB4MTcgfSB9LAorCXsgeyAweDEwLCAweDFDIH0gfSwKKwl7IHsgMHgxMSwgMHgwQiB9IH0sCisJ eyB7IDB4MTIsIDB4MEMgfSB9LAorCXsgeyAweDEzLCAweDAxIH0gfSwKKwl7IHsgMHgxNCwgMHgw RiB9IH0sCisJeyB7IDB4MTUsIDB4MTAgfSB9LAorCXsgeyAweDE2LCAweDEwIH0gfSwKKwl7IHsg MHgxNywgMHgxMCB9IH0sCisJeyB7IDB4MTgsIDB4ODkgfSB9LAorCXsgeyAweDE5LCAweDhBIH0g fSwKKwl7IHsgMHgxQSwgMHgxMyB9IH0sCisJeyB7IDB4MUIsIDB4MTMgfSB9LAorCXsgeyAweDFD LCAweDE1IH0gfSwKKwl7IHsgMHgxRCwgMHgxNSB9IH0sCisJeyB7IDB4MUUsIDB4MTcgfSB9LAor CXsgeyAweDFGLCAweDE3IH0gfSwKKwkvKiBTVFYgKi8KKwl7IHsgMHgyMCwgMHg0MCB9IH0sCisJ eyB7IDB4MjEsIDB4MDEgfSB9LAorCXsgeyAweDIyLCAweDAwIH0gfSwKKwl7IHsgMHgyMywgMHg0 MCB9IH0sCisJeyB7IDB4MjQsIDB4NDAgfSB9LAorCXsgeyAweDI1LCAweDZEIH0gfSwKKwl7IHsg MHgyNiwgMHg0MCB9IH0sCisJeyB7IDB4MjcsIDB4NDAgfSB9LAorCS8qIFZlbmQgKi8KKwl7IHsg MHhFMCwgMHgwMCB9IH0sCisJeyB7IDB4REMsIDB4MjEgfSB9LAorCXsgeyAweERELCAweDIyIH0g fSwKKwl7IHsgMHhERSwgMHgwNyB9IH0sCisJeyB7IDB4REYsIDB4MDcgfSB9LAorCXsgeyAweEUz LCAweDZEIH0gfSwKKwl7IHsgMHhFMSwgMHgwNyB9IH0sCisJeyB7IDB4RTIsIDB4MDcgfSB9LAor CS8qIFVEICovCisJeyB7IDB4MjksIDB4RDggfSB9LAorCXsgeyAweDJBLCAweDJBIH0gfSwKKwkv KiBDTEsgKi8KKwl7IHsgMHg0QiwgMHgwMyB9IH0sCisJeyB7IDB4NEMsIDB4MTEgfSB9LAorCXsg eyAweDRELCAweDEwIH0gfSwKKwl7IHsgMHg0RSwgMHgwMSB9IH0sCisJeyB7IDB4NEYsIDB4MDEg fSB9LAorCXsgeyAweDUwLCAweDEwIH0gfSwKKwl7IHsgMHg1MSwgMHgwMCB9IH0sCisJeyB7IDB4 NTIsIDB4ODAgfSB9LAorCXsgeyAweDUzLCAweDAwIH0gfSwKKwl7IHsgMHg1NiwgMHgwMCB9IH0s CisJeyB7IDB4NTQsIDB4MDcgfSB9LAorCXsgeyAweDU4LCAweDA3IH0gfSwKKwl7IHsgMHg1NSwg MHgyNSB9IH0sCisJLyogUmVzZXQgWERPTkIgKi8KKwl7IHsgMHg1QiwgMHg0MyB9IH0sCisJeyB7 IDB4NUMsIDB4MDAgfSB9LAorCXsgeyAweDVGLCAweDczIH0gfSwKKwl7IHsgMHg2MCwgMHg3MyB9 IH0sCisJeyB7IDB4NjMsIDB4MjIgfSB9LAorCXsgeyAweDY0LCAweDAwIH0gfSwKKwl7IHsgMHg2 NywgMHgwOCB9IH0sCisJeyB7IDB4NjgsIDB4MDQgfSB9LAorCS8qIFJlc29sdXRpb246MTQ0MHgy NTYwICovCisJeyB7IDB4NzIsIDB4MDIgfSB9LAorCS8qIG11eCAqLworCXsgeyAweDdBLCAweDgw IH0gfSwKKwl7IHsgMHg3QiwgMHg5MSB9IH0sCisJeyB7IDB4N0MsIDB4RDggfSB9LAorCXsgeyAw eDdELCAweDYwIH0gfSwKKwl7IHsgMHg3RiwgMHgxNSB9IH0sCisJeyB7IDB4NzUsIDB4MTUgfSB9 LAorCS8qIEFCT0ZGICovCisJeyB7IDB4QjMsIDB4QzAgfSB9LAorCXsgeyAweEI0LCAweDAwIH0g fSwKKwl7IHsgMHhCNSwgMHgwMCB9IH0sCisJLyogU291cmNlIEVRICovCisJeyB7IDB4NzgsIDB4 MDAgfSB9LAorCXsgeyAweDc5LCAweDAwIH0gfSwKKwl7IHsgMHg4MCwgMHgwMCB9IH0sCisJeyB7 IDB4ODMsIDB4MDAgfSB9LAorCS8qIEZQIEJQICovCisJeyB7IDB4OTMsIDB4MEEgfSB9LAorCXsg eyAweDk0LCAweDBBIH0gfSwKKwkvKiBJbnZlcnNpb24gVHlwZSAqLworCXsgeyAweDhBLCAweDAw IH0gfSwKKwl7IHsgMHg5QiwgMHhGRiB9IH0sCisJLyogSU1HU1dBUCA9MSBAUG9ydFN3YXA9MSAq LworCXsgeyAweDlELCAweEIwIH0gfSwKKwl7IHsgMHg5RiwgMHg2MyB9IH0sCisJeyB7IDB4OTgs IDB4MTAgfSB9LAorCS8qIEZSTSAqLworCXsgeyAweEVDLCAweDAwIH0gfSwKKwkvKiBDTUQxICov CisJeyB7IDB4RkYsIDB4MTAgfSB9LAorfTsKKworc3RydWN0IGNtZF9zZXQgcGFuZWxfY21kc19z ZXRfMltdID0geworCS8qIFZCUCtWU0E9LFZGUCA9IDEwSCAqLworCXsgeyAweDNCLCAweDAzLCAw eDBBLCAweDBBIH0gfSwKK307CisKK3N0cnVjdCBjbWRfc2V0IHBhbmVsX2NtZHNfc2V0XzNbXSA9 IHsKKwkvKiBGVEUgb24gKi8KKwl7IHsgMHgzNSwgMHgwMCB9IH0sCisJLyogRU5fQksgPTEoYXV0 byBibGFjaykgKi8KKwl7IHsgMHhFNSwgMHgwMSB9IH0sCisJLyogQ01EIG1vZGUoMTApIFZETyBt b2RlKDAzKSAqLworCXsgeyAweEJCLCAweDAzIH0gfSwKKwkvKiBOb24gUmVsb2FkIE1UUCAqLwor CXsgeyAweEZCLCAweDAxIH0gfSwKK307CisKK3N0YXRpYyBpbnQgdHJ1bHlfZGNzX3dyaXRlKHN0 cnVjdCBkcm1fcGFuZWwgKnBhbmVsLCB1MzIgY29tbWFuZCkKK3sKKwlzdHJ1Y3QgdHJ1bHlfd3F4 Z2EgKmN0eCA9IHBhbmVsX3RvX3RydWx5X3dxeGdhKHBhbmVsKTsKKwlpbnQgaSwgcmV0OworCisJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4LT5kc2kpOyBpKyspIHsKKwkJcmV0ID0gbWlw aV9kc2lfZGNzX3dyaXRlKGN0eC0+ZHNpW2ldLAorCQkJY29tbWFuZCwgTlVMTCwgMCk7CisJCWlm IChyZXQgPCAwKSB7CisJCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LAorCQkJCSJzZXRfZGlzcGxh eV9vZmYgY21kIGZhaWxlZCBmb3IgZHNpID0gJWRcbiIsCisJCQlpKTsKKwkJfQorCX0KKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bHlfZGNzX3dyaXRlX2J1ZihzdHJ1Y3QgZHJt X3BhbmVsICpwYW5lbCwKKwl1MzIgc2l6ZSwgdTMyIG51bV9jbWRzLCBzdHJ1Y3QgY21kX3NldCAq YnVmKQoreworCXN0cnVjdCB0cnVseV93cXhnYSAqY3R4ID0gcGFuZWxfdG9fdHJ1bHlfd3F4Z2Eo cGFuZWwpOworCWludCByZXQgPSAwOworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IG51 bV9jbWRzOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY3R4LT5kc2kpOyBq KyspIHsKKwkJCXJldCA9IG1pcGlfZHNpX2Rjc193cml0ZV9idWZmZXIoY3R4LT5kc2lbal0sCisJ CQkJCWJ1ZltpXS5jb21tYW5kcywKKwkJCQkJc2l6ZSk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJ CURSTV9ERVZfRVJST1IoY3R4LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gdHggY21kIFslZF0sIGVy cjogJWRcbiIsCisJCQkJCWksIHJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0K KworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgdHJ1bHlfY2FsbF93cml0ZV9mdW5jKHJldCwg ZnVuYywgcGFuZWwsIGNvbW1hbmQpIHtcCisJcmV0ID0gZnVuYyhwYW5lbCwgY29tbWFuZCk7ICAg ICBcCit9CisKKyNkZWZpbmUgdHJ1bHlfd3JpdGVfYnVmX2Z1bmMocmV0LCBmdW5jLCBwYW5lbCwg c2l6ZSwgY21kcywgYnVmKSB7XAorCXJldCA9IGZ1bmMocGFuZWwsIHNpemUsIGNtZHMsIGJ1Zik7 IFwKK30KKworc3RhdGljIGludCB0cnVseV93cXhnYV9wb3dlcl9vbihzdHJ1Y3QgdHJ1bHlfd3F4 Z2EgKmN0eCkKK3sKKwlpbnQgcmV0LCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo Y3R4LT5zdXBwbGllcyk7IGkrKykgeworCQlyZXQgPSByZWd1bGF0b3Jfc2V0X2xvYWQoY3R4LT5z dXBwbGllc1tpXS5jb25zdW1lciwKKwkJCQkJcmVndWxhdG9yX2VuYWJsZV9sb2Fkc1tpXSk7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2Vu YWJsZShBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpLCBjdHgtPnN1cHBsaWVzKTsKKwlpZiAocmV0 IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFJlc2V0IHNlcXVlbmNlIG9mIHRydWx5IHBhbmVs IHJlcXVpcmVzCisJICogdGhlIHJlc2V0IHBpbiB0byBiZSBwdWxsZWQgaGlnaCBmb3IgMTBtcwor CSAqIGZvbGxvd2VkIGJ5IGEgbG93IHBlcmlvZCBvZiAxMG1zIGFuZCB0aGVuCisJICogcHVsbGVk IGhpZ2ggYWdhaW4KKwkgKi8KKworCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDEp OworCW1zbGVlcCgyMCk7CisJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMCk7CisJ bXNsZWVwKDIwKTsKKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAxKTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IHRydWx5X3dxeGdhX3Bvd2VyX29mZihzdHJ1Y3QgdHJ1 bHlfd3F4Z2EgKmN0eCkKK3sKKwlpbnQgcmV0LCBpOworCisJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+ cmVzZXRfZ3BpbywgMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPnN1cHBs aWVzKTsgaSsrKSB7CisJCXJldCA9IHJlZ3VsYXRvcl9zZXRfbG9hZChjdHgtPnN1cHBsaWVzW2ld LmNvbnN1bWVyLAorCQkJCXJlZ3VsYXRvcl9kaXNhYmxlX2xvYWRzW2ldKTsKKwkJaWYgKHJldCkK KwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJS QVlfU0laRShjdHgtPnN1cHBsaWVzKSwgY3R4LT5zdXBwbGllcyk7Cit9CisKK3N0YXRpYyBpbnQg dHJ1bHlfd3F4Z2FfZGlzYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3Qg dHJ1bHlfd3F4Z2EgKmN0eCA9IHBhbmVsX3RvX3RydWx5X3dxeGdhKHBhbmVsKTsKKwlpbnQgcmV0 OworCisJaWYgKCFjdHgtPmVuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKGN0eC0+YmFja2xp Z2h0KSB7CisJCXJldCA9IGJhY2tsaWdodF9kaXNhYmxlKGN0eC0+YmFja2xpZ2h0KTsKKwkJaWYg KHJldCA8IDApCisJCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LCAiYmFja2xpZ2h0IGRpc2FibGUg ZmFpbGVkICVkXG4iLAorCQkJCXJldCk7CisJfQorCisJY3R4LT5lbmFibGVkID0gZmFsc2U7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfdW5wcmVwYXJlKHN0cnVjdCBk cm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCB0cnVseV93cXhnYSAqY3R4ID0gcGFuZWxfdG9f dHJ1bHlfd3F4Z2EocGFuZWwpOworCWludCByZXQgPSAwOworCisJaWYgKCFjdHgtPnByZXBhcmVk KQorCQlyZXR1cm4gMDsKKworCWN0eC0+ZHNpWzBdLT5tb2RlX2ZsYWdzID0gMDsKKwljdHgtPmRz aVsxXS0+bW9kZV9mbGFncyA9IDA7CisKKwl0cnVseV9jYWxsX3dyaXRlX2Z1bmMocmV0LCB0cnVs eV9kY3Nfd3JpdGUsIHBhbmVsLAorCQlNSVBJX0RDU19TRVRfRElTUExBWV9PRkYpOworCisJaWYg KHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihjdHgtPmRldiwKKwkJCSJzZXRfZGlzcGxheV9v ZmYgY21kIGZhaWxlZCByZXQgPSAlZFxuIiwKKwkJCXJldCk7CisJfQorCisJLyogMTIwbXMgZGVs YXkgcmVxdWlyZWQgaGVyZSBhcyBwZXIgRENTIHNwZWMgKi8KKwltc2xlZXAoMTIwKTsKKworCXRy dWx5X2NhbGxfd3JpdGVfZnVuYyhyZXQsIHRydWx5X2Rjc193cml0ZSwgcGFuZWwsCisJCU1JUElf RENTX0VOVEVSX1NMRUVQX01PREUpOworCisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJP UihjdHgtPmRldiwKKwkJCSJlbnRlcl9zbGVlcCBjbWQgZmFpbGVkIHJldCA9ICVkXG4iLAorCQkJ cmV0KTsKKwl9CisKKwlyZXQgPSB0cnVseV93cXhnYV9wb3dlcl9vZmYoY3R4KTsKKwlpZiAocmV0 IDwgMCkKKwkJRFJNX0RFVl9FUlJPUihjdHgtPmRldiwKKwkJCSJ0cnVseV93cXhnYV9wb3dlcl9v ZmYgZmFpbGVkIHJldCA9ICVkXG4iLAorCQkJcmV0KTsKKworCWN0eC0+cHJlcGFyZWQgPSBmYWxz ZTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRydWx5X3dxeGdhX3ByZXBhcmUoc3Ry dWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBwYW5l bF90b190cnVseV93cXhnYShwYW5lbCk7CisJaW50IHJldDsKKworCWlmIChjdHgtPnByZXBhcmVk KQorCQlyZXR1cm4gMDsKKworCXJldCA9IHRydWx5X3dxeGdhX3Bvd2VyX29uKGN0eCk7CisJaWYg KHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwljdHgtPmRzaVswXS0+bW9kZV9mbGFncyB8PSBN SVBJX0RTSV9NT0RFX0xQTTsKKwljdHgtPmRzaVsxXS0+bW9kZV9mbGFncyB8PSBNSVBJX0RTSV9N T0RFX0xQTTsKKworCXRydWx5X3dyaXRlX2J1Zl9mdW5jKHJldCwgdHJ1bHlfZGNzX3dyaXRlX2J1 ZiwKKwkJcGFuZWwsIFNIT1JUX1BBQ0tFVCwKKwkJQVJSQVlfU0laRShwYW5lbF9jbWRzX3NldF8x KSwKKwkJcGFuZWxfY21kc19zZXRfMSk7CisKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VS Uk9SKGN0eC0+ZGV2LAorCQkJInBhbmVsX2NtZHNfc2V0XzEgZmFpbGVkIHJldCA9ICVkXG4iLAor CQkJcmV0KTsKKwl9CisKKwl0cnVseV93cml0ZV9idWZfZnVuYyhyZXQsIHRydWx5X2Rjc193cml0 ZV9idWYsCisJCXBhbmVsLCBMT05HX1BBQ0tFVCwKKwkJQVJSQVlfU0laRShwYW5lbF9jbWRzX3Nl dF8yKSwKKwkJcGFuZWxfY21kc19zZXRfMik7CisKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVW X0VSUk9SKGN0eC0+ZGV2LAorCQkJInBhbmVsX2NtZHNfc2V0XzIgZmFpbGVkIHJldCA9ICVkXG4i LAorCQkJcmV0KTsKKwl9CisKKwl0cnVseV93cml0ZV9idWZfZnVuYyhyZXQsIHRydWx5X2Rjc193 cml0ZV9idWYsCisJCXBhbmVsLCBTSE9SVF9QQUNLRVQsCisJCUFSUkFZX1NJWkUocGFuZWxfY21k c19zZXRfMyksCisJCXBhbmVsX2NtZHNfc2V0XzMpOworCisJaWYgKHJldCA8IDApIHsKKwkJRFJN X0RFVl9FUlJPUihjdHgtPmRldiwKKwkJCSJwYW5lbF9jbWRzX3NldF8zIGZhaWxlZCByZXQgPSAl ZFxuIiwKKwkJCXJldCk7CisJfQorCisJLyogQXMgcGVyIERTSSBzcGVjIG5lZWQgdG8gd2FpdCBm b3IgMTIwbXMKKwkgKiBhZnRlciBzZW5kaW5nIHRoZSBleGl0IHNsZWVwIERDUyBjb21tYW5kCisJ ICovCisKKwl0cnVseV9jYWxsX3dyaXRlX2Z1bmMocmV0LCB0cnVseV9kY3Nfd3JpdGUsIHBhbmVs LAorCQlNSVBJX0RDU19FWElUX1NMRUVQX01PREUpOworCisJaWYgKHJldCA8IDApIHsKKwkJRFJN X0RFVl9FUlJPUihjdHgtPmRldiwKKwkJCSJleGl0X3NsZWVwX21vZGUgY21kIGZhaWxlZCByZXQg PSAlZFxuIiwKKwkJCXJldCk7CisJfQorCisJbXNsZWVwKDEyMCk7CisKKwl0cnVseV9jYWxsX3dy aXRlX2Z1bmMocmV0LCB0cnVseV9kY3Nfd3JpdGUsIHBhbmVsLAorCQlNSVBJX0RDU19TRVRfRElT UExBWV9PTik7CisKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LAor CQkJInNldF9kaXNwbGF5X29uIGNtZCBmYWlsZWQgcmV0ID0gJWRcbiIsCisJCQlyZXQpOworCX0K KworCS8qIEFkZGluZyAxMjBtcyBkZWxheSBiZWZvcmUgdGhlIHN0YXJ0IG9mCisJICogcGl4ZWwg c3RyZWFtIHRvIHRoZSBwYW5lbCBhZnRlciBzZW5kaW5nCisJICogdGhlIHNldF9kaXNwbGF5X29u IERDUyBjb21tYW5kCisJICovCisKKwltc2xlZXAoMTIwKTsKKworCWN0eC0+cHJlcGFyZWQgPSB0 cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfZW5hYmxlKHN0 cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCB0cnVseV93cXhnYSAqY3R4ID0gcGFu ZWxfdG9fdHJ1bHlfd3F4Z2EocGFuZWwpOworCWludCByZXQ7CisKKwlpZiAoY3R4LT5lbmFibGVk KQorCQlyZXR1cm4gMDsKKworCWlmIChjdHgtPmJhY2tsaWdodCkgeworCQlyZXQgPSBiYWNrbGln aHRfZW5hYmxlKGN0eC0+YmFja2xpZ2h0KTsKKwkJaWYgKHJldCA8IDApCisJCQlEUk1fREVWX0VS Uk9SKGN0eC0+ZGV2LCAiYmFja2xpZ2h0IGVuYWJsZSBmYWlsZWQgJWRcbiIsCisJCQkJCQkgIHJl dCk7CisJfQorCisJY3R4LT5lbmFibGVkID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHRydWx5X3dxeGdhX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sK KwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gcGFuZWwtPmNvbm5lY3RvcjsKKwlz dHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IHBhbmVsX3RvX3RydWx5X3dxeGdhKHBhbmVsKTsKKwlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKworCW1vZGUgPSBkcm1fbW9kZV9jcmVhdGUo Y29ubmVjdG9yLT5kZXYpOworCWlmICghbW9kZSkgeworCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2 LAorCQkJImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGlzcGxheSBtb2RlXG4iKTsKKwkJcmV0dXJu IDA7CisJfQorCisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW0gPSA3NDsKKwljb25u ZWN0b3ItPmRpc3BsYXlfaW5mby5oZWlnaHRfbW0gPSAxMzE7CisJLyogQ29weSB0aGUgbW9kZSBm cm9tIHRoZSBEVCBhbmQgYWRkIGl0ICovCisJZHJtX21vZGVfY29weShtb2RlLCAmY3R4LT5kbSk7 CisJbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJNX01PREVfVFlQRV9QUkVG RVJSRUQ7CisJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOworCisJcmV0dXJu IDE7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BhbmVsX2Z1bmNzIHRydWx5X3dxeGdh X2RybV9mdW5jcyA9IHsKKwkuZGlzYWJsZSA9IHRydWx5X3dxeGdhX2Rpc2FibGUsCisJLnVucHJl cGFyZSA9IHRydWx5X3dxeGdhX3VucHJlcGFyZSwKKwkucHJlcGFyZSA9IHRydWx5X3dxeGdhX3By ZXBhcmUsCisJLmVuYWJsZSA9IHRydWx5X3dxeGdhX2VuYWJsZSwKKwkuZ2V0X21vZGVzID0gdHJ1 bHlfd3F4Z2FfZ2V0X21vZGVzLAorfTsKKworc3RhdGljIGludCB0cnVseV93cXhnYV9wYW5lbF9h ZGQoc3RydWN0IHRydWx5X3dxeGdhICpjdHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY3R4 LT5kZXY7CisJaW50IHJldCwgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eC0+ c3VwcGxpZXMpOyBpKyspCisJCWN0eC0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gcmVndWxhdG9yX25h bWVzW2ldOworCisJcmV0ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXQoZGV2LCBBUlJBWV9TSVpF KGN0eC0+c3VwcGxpZXMpLAorCQkJCSAgICAgIGN0eC0+c3VwcGxpZXMpOworCWlmIChyZXQgPCAw KQorCQlyZXR1cm4gcmV0OworCisJY3R4LT5yZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXQoZGV2 LCAicmVzZXQiLCBHUElPRF9PVVRfSElHSCk7CisJaWYgKElTX0VSUihjdHgtPnJlc2V0X2dwaW8p KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiY2Fubm90IGdldCByZXNldCBncGlvICVsZFxuIiwK KwkJCVBUUl9FUlIoY3R4LT5yZXNldF9ncGlvKSk7CisJCXJldHVybiBQVFJfRVJSKGN0eC0+cmVz ZXRfZ3Bpbyk7CisJfQorCisJY3R4LT5tb2RlX2dwaW8gPSBkZXZtX2dwaW9kX2dldChkZXYsICJt b2RlIiwgR1BJT0RfT1VUX0xPVyk7CisJaWYgKElTX0VSUihjdHgtPm1vZGVfZ3BpbykpIHsKKwkJ RFJNX0RFVl9FUlJPUihkZXYsICJjYW5ub3QgZ2V0IG1vZGUgZ3BpbyAlbGRcbiIsCisJCQlQVFJf RVJSKGN0eC0+bW9kZV9ncGlvKSk7CisJCXJldHVybiBQVFJfRVJSKGN0eC0+bW9kZV9ncGlvKTsK Kwl9CisKKwkvKiBkdWFsIHBvcnQgKi8KKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5tb2RlX2dwaW8s IDApOworCisJcmV0ID0gb2ZfZ2V0X2RybV9kaXNwbGF5X21vZGUoZGV2LT5vZl9ub2RlLAorCQkm Y3R4LT5kbSwgJmN0eC0+YnVzX2ZsYWdzLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVW X0VSUk9SKGRldiwgImZhaWxlZCB0byBnZXQgZGlzcGxheSBtb2RlXG4iKTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlkcm1fcGFuZWxfaW5pdCgmY3R4LT5wYW5lbCk7CisJY3R4LT5wYW5lbC5kZXYg PSBkZXY7CisJY3R4LT5wYW5lbC5mdW5jcyA9ICZ0cnVseV93cXhnYV9kcm1fZnVuY3M7CisJZHJt X3BhbmVsX2FkZCgmY3R4LT5wYW5lbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0 cnVseV93cXhnYV9wcm9iZShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCit7CisJc3RydWN0 IGRldmljZSAqZGV2ID0gJmRzaS0+ZGV2OworCXN0cnVjdCB0cnVseV93cXhnYSAqY3R4OworCXN0 cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaTFfZGV2aWNlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAq ZHNpMTsKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqZHNpMV9ob3N0OworCXN0cnVjdCBtaXBpX2Rz aV9kZXZpY2UgKmRzaV9kZXY7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKwljb25zdCBzdHJ1 Y3QgbWlwaV9kc2lfZGV2aWNlX2luZm8gaW5mbyA9IHsudHlwZSA9ICJ0cnVseW50MzU1OTciLAor CQkuY2hhbm5lbCA9IDAsCisJCS5ub2RlID0gTlVMTCwKKwl9OworCisJY3R4ID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKworCWlmICghY3R4KQorCQlyZXR1 cm4gLUVOT01FTTsKKworCS8qIFRoaXMgZGV2aWNlIHJlcHJlc2VudHMgaXRzZWxmIGFzIG9uZSB3 aXRoCisJICogdHdvIGlucHV0IHBvcnRzIHdoaWNoIGFyZSBmZWQgYnkgdGhlIG91dHB1dAorCSAq IHBvcnRzIG9mIHRoZSB0d28gRFNJIGNvbnRyb2xsZXJzIC4gVGhlIERTSTAKKwkgKiBpcyB0aGUg bWFzdGVyIGNvbnRyb2xsZXIgYW5kIGhhcyBtb3N0IG9mIHRoZQorCSAqIHBhbmVsIHJlbGF0ZWQg aW5mbyBpbiBpdHMgY2hpbGQgbm9kZS4KKwkgKi8KKworCWRzaTEgPSBvZl9ncmFwaF9nZXRfcmVt b3RlX25vZGUoZHNpLT5kZXYub2Zfbm9kZSwgMSwgLTEpOworCWlmICghZHNpMSkgeworCQlEUk1f REVWX0VSUk9SKGRldiwKKwkJCSJmYWlsZWQgdG8gZ2V0IHJlbW90ZSBub2RlIGZvciBkc2kxX2Rl dmljZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2dldF9yZW1vdGU7CisJfQor CisJZHNpMV9ob3N0ID0gb2ZfZmluZF9taXBpX2RzaV9ob3N0X2J5X25vZGUoZHNpMSk7CisJaWYg KCFkc2kxX2hvc3QpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJmYWlsZWQgdG8gZmluZCBkc2kg aG9zdFxuIik7CisJCXJldCA9IC1FUFJPQkVfREVGRVI7CisJCWdvdG8gZXJyX2hvc3Q7CisJfQor CisJb2Zfbm9kZV9wdXQoZHNpMSk7CisKKwkvKiByZWdpc3RlciB0aGUgc2Vjb25kIERTSSBkZXZp Y2UgKi8KKwlkc2kxX2RldmljZSA9IG1pcGlfZHNpX2RldmljZV9yZWdpc3Rlcl9mdWxsKGRzaTFf aG9zdCwgJmluZm8pOworCWlmIChJU19FUlIoZHNpMV9kZXZpY2UpKSB7CisJCURSTV9ERVZfRVJS T1IoZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBkc2kgZGV2aWNlXG4iKTsKKwkJcmV0ID0gUFRSX0VS Uihkc2kpOworCQlnb3RvIGVycl9kc2lfZGV2aWNlOworCX0KKworCW1pcGlfZHNpX3NldF9kcnZk YXRhKGRzaSwgY3R4KTsKKworCWN0eC0+ZGV2ID0gZGV2OworCWN0eC0+ZHNpWzBdID0gZHNpOwor CWN0eC0+ZHNpWzFdID0gZHNpMV9kZXZpY2U7CisKKwlyZXQgPSB0cnVseV93cXhnYV9wYW5lbF9h ZGQoY3R4KTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiZmFpbGVkIHRvIGFk ZCBwYW5lbFxuIik7CisJCWdvdG8gZXJyX3BhbmVsX2FkZDsKKwl9CisKKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShjdHgtPmRzaSk7IGkrKykgeworCQlkc2lfZGV2ID0gY3R4LT5kc2lbaV07 CisJCWRzaV9kZXYtPmxhbmVzID0gNDsKKwkJZHNpX2Rldi0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1U X1JHQjg4ODsKKwkJZHNpX2Rldi0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01PREVfVklERU8gfCBN SVBJX0RTSV9NT0RFX0xQTSB8CisJCQlNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUzsKKwkJ cmV0ID0gbWlwaV9kc2lfYXR0YWNoKGRzaV9kZXYpOworCQlpZiAocmV0IDwgMCkgeworCQkJRFJN X0RFVl9FUlJPUihkZXYsCisJCQkJImRzaSBhdHRhY2ggZmFpbGVkIGkgPSAlZFxuIiwgaSk7CisJ CQkJZ290byBlcnJfZHNpX2F0dGFjaDsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnJfZHNp X2F0dGFjaDoKKwlkcm1fcGFuZWxfcmVtb3ZlKCZjdHgtPnBhbmVsKTsKK2Vycl9wYW5lbF9hZGQ6 CisJbWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIoZHNpMV9kZXZpY2UpOworZXJyX2RzaV9kZXZp Y2U6CitlcnJfaG9zdDoKKwlvZl9ub2RlX3B1dChkc2kxKTsKK2Vycl9nZXRfcmVtb3RlOgorCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcmVtb3ZlKHN0cnVjdCBtaXBp X2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IG1pcGlfZHNp X2dldF9kcnZkYXRhKGRzaSk7CisKKwlpZiAoY3R4LT5kc2lbMF0pCisJCW1pcGlfZHNpX2RldGFj aChjdHgtPmRzaVswXSk7CisJaWYgKGN0eC0+ZHNpWzFdKSB7CisJCW1pcGlfZHNpX2RldGFjaChj dHgtPmRzaVsxXSk7CisJCW1pcGlfZHNpX2RldmljZV91bnJlZ2lzdGVyKGN0eC0+ZHNpWzFdKTsK Kwl9CisKKwlkcm1fcGFuZWxfcmVtb3ZlKCZjdHgtPnBhbmVsKTsKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdHJ1bHlfd3F4Z2Ffb2ZfbWF0Y2hbXSA9 IHsKKwl7IC5jb21wYXRpYmxlID0gInRydWx5LG50MzU1OTciLCB9LAorCXsgfQorfTsKK01PRFVM RV9ERVZJQ0VfVEFCTEUob2YsIHRydWx5X3dxeGdhX29mX21hdGNoKTsKKworc3RhdGljIHN0cnVj dCBtaXBpX2RzaV9kcml2ZXIgdHJ1bHlfd3F4Z2FfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJ CS5uYW1lID0gInBhbmVsX3RydWx5X250MzU1OTciLAorCQkub2ZfbWF0Y2hfdGFibGUgPSB0cnVs eV93cXhnYV9vZl9tYXRjaCwKKwl9LAorCS5wcm9iZSA9IHRydWx5X3dxeGdhX3Byb2JlLAorCS5y ZW1vdmUgPSB0cnVseV93cXhnYV9yZW1vdmUsCit9OworbW9kdWxlX21pcGlfZHNpX2RyaXZlcih0 cnVseV93cXhnYV9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlRydWx5IE5UMzU1OTcg RFNJIFBhbmVsIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotLSAKVGhlIFF1 YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1 cm9yYSBGb3J1bSwKYSBMaW51eCBGb3VuZGF0aW9uIENvbGxhYm9yYXRpdmUgUHJvamVjdAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==