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 19:49:31 -0700 Message-ID: <1533264572-6364-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 LmMgfCA2ODAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA2 ODkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wYW5l bC9wYW5lbC10cnVseS1udDM1NTk3LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFu ZWwvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCmluZGV4IDYwMjBjMzAu LjdhZTc0YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCkBAIC0xODYsNCArMTg2LDEyIEBAIGNvbmZp ZyBEUk1fUEFORUxfU0lUUk9OSVhfU1Q3Nzg5VgogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0 byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFNpdHJvbml4CiAJICBTVDc3ODlWIGNvbnRyb2xsZXIg Zm9yIDI0MHgzMjAgTENEIHBhbmVscwogCitjb25maWcgRFJNX1BBTkVMX1RSVUxZX05UMzU1OTdf V1FYR0EKKwl0cmlzdGF0ZSAiVHJ1bHkgV1FYR0EiCisJZGVwZW5kcyBvbiBPRgorCWRlcGVuZHMg b24gRFJNX01JUElfRFNJCisJc2VsZWN0IFZJREVPTU9ERV9IRUxQRVJTCisJaGVscAorCSAgU2F5 IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgVHJ1bHkgTlQzNTU5NyBX UVhHQSBEdWFsIERTSQorCSAgVmlkZW8gTW9kZSBwYW5lbAogZW5kbWVudQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01h a2VmaWxlCmluZGV4IDVjY2FhYTkuLjgwZmQxOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKQEAg LTE5LDMgKzE5LDQgQEAgb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TRUlLT180M1dWRjFHKSArPSBw YW5lbC1zZWlrby00M3d2ZjFnLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0hBUlBfTFExMDFS MVNYMDEpICs9IHBhbmVsLXNoYXJwLWxxMTAxcjFzeDAxLm8KIG9iai0kKENPTkZJR19EUk1fUEFO RUxfU0hBUlBfTFMwNDNUMUxFMDEpICs9IHBhbmVsLXNoYXJwLWxzMDQzdDFsZTAxLm8KIG9iai0k KENPTkZJR19EUk1fUEFORUxfU0lUUk9OSVhfU1Q3Nzg5VikgKz0gcGFuZWwtc2l0cm9uaXgtc3Q3 Nzg5di5vCitvYmotJChDT05GSUdfRFJNX1BBTkVMX1RSVUxZX05UMzU1OTdfV1FYR0EpICs9IHBh bmVsLXRydWx5LW50MzU1OTcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3Bh bmVsLXRydWx5LW50MzU1OTcuYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1u dDM1NTk3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4OTUzYgotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1udDM1NTk3 LmMKQEAgLTAsMCArMSw2ODAgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w 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 ZWxfdG9fdHJ1bHlfd3F4Z2EocGFuZWwpOworCisJaWYgKGN0eC0+ZW5hYmxlZCkKKwkJcmV0dXJu IDA7CisKKwlpZiAoY3R4LT5iYWNrbGlnaHQpIHsKKwkJY3R4LT5iYWNrbGlnaHQtPnByb3BzLnBv d2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKwkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoY3R4LT5i YWNrbGlnaHQpOworCX0KKwljdHgtPmVuYWJsZWQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfZ2V0X21vZGVzKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVs KQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBwYW5lbC0+Y29ubmVjdG9y OworCXN0cnVjdCB0cnVseV93cXhnYSAqY3R4ID0gcGFuZWxfdG9fdHJ1bHlfd3F4Z2EocGFuZWwp OworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCisJbW9kZSA9IGRybV9tb2RlX2Ny ZWF0ZShjb25uZWN0b3ItPmRldik7CisJaWYgKCFtb2RlKSB7CisJCURSTV9ERVZfRVJST1IoY3R4 LT5kZXYsCisJCQkiZmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBkaXNwbGF5IG1vZGVcbiIpOworCQly ZXR1cm4gMDsKKwl9CisKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0aF9tbSA9IDc0Owor CWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbSA9IDEzMTsKKwkvKiBDb3B5IHRoZSBt b2RlIGZyb20gdGhlIERUIGFuZCBhZGQgaXQgKi8KKwlkcm1fbW9kZV9jb3B5KG1vZGUsICZjdHgt PmRtKTsKKwltb2RlLT50eXBlID0gRFJNX01PREVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9UWVBF X1BSRUZFUlJFRDsKKwlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7CisKKwly ZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFuZWxfZnVuY3MgdHJ1bHlf d3F4Z2FfZHJtX2Z1bmNzID0geworCS5kaXNhYmxlID0gdHJ1bHlfd3F4Z2FfZGlzYWJsZSwKKwku dW5wcmVwYXJlID0gdHJ1bHlfd3F4Z2FfdW5wcmVwYXJlLAorCS5wcmVwYXJlID0gdHJ1bHlfd3F4 Z2FfcHJlcGFyZSwKKwkuZW5hYmxlID0gdHJ1bHlfd3F4Z2FfZW5hYmxlLAorCS5nZXRfbW9kZXMg PSB0cnVseV93cXhnYV9nZXRfbW9kZXMsCit9OworCitzdGF0aWMgaW50IHRydWx5X3dxeGdhX3Bh bmVsX2FkZChzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSBjdHgtPmRldjsKKwlpbnQgcmV0LCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo Y3R4LT5zdXBwbGllcyk7IGkrKykKKwkJY3R4LT5zdXBwbGllc1tpXS5zdXBwbHkgPSByZWd1bGF0 b3JfbmFtZXNbaV07CisKKwlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldChkZXYsIEFSUkFZ X1NJWkUoY3R4LT5zdXBwbGllcyksCisJCQkJICAgICAgY3R4LT5zdXBwbGllcyk7CisJaWYgKHJl dCA8IDApCisJCXJldHVybiByZXQ7CisKKwljdHgtPnJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dl dChkZXYsICJyZXNldCIsIEdQSU9EX09VVF9ISUdIKTsKKwlpZiAoSVNfRVJSKGN0eC0+cmVzZXRf Z3BpbykpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJjYW5ub3QgZ2V0IHJlc2V0IGdwaW8gJWxk XG4iLAorCQkJUFRSX0VSUihjdHgtPnJlc2V0X2dwaW8pKTsKKwkJcmV0dXJuIFBUUl9FUlIoY3R4 LT5yZXNldF9ncGlvKTsKKwl9CisKKwljdHgtPm1vZGVfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRl diwgIm1vZGUiLCBHUElPRF9PVVRfTE9XKTsKKwlpZiAoSVNfRVJSKGN0eC0+bW9kZV9ncGlvKSkg eworCQlEUk1fREVWX0VSUk9SKGRldiwgImNhbm5vdCBnZXQgbW9kZSBncGlvICVsZFxuIiwKKwkJ CVBUUl9FUlIoY3R4LT5tb2RlX2dwaW8pKTsKKwkJcmV0dXJuIFBUUl9FUlIoY3R4LT5tb2RlX2dw aW8pOworCX0KKworCS8qIGR1YWwgcG9ydCAqLworCWdwaW9kX3NldF92YWx1ZShjdHgtPm1vZGVf Z3BpbywgMCk7CisKKwlyZXQgPSBvZl9nZXRfZHJtX2Rpc3BsYXlfbW9kZShkZXYtPm9mX25vZGUs CisJCSZjdHgtPmRtLCAmY3R4LT5idXNfZmxhZ3MsIDApOworCWlmIChyZXQgPCAwKSB7CisJCURS TV9ERVZfRVJST1IoZGV2LCAiZmFpbGVkIHRvIGdldCBkaXNwbGF5IG1vZGVcbiIpOworCQlyZXR1 cm4gcmV0OworCX0KKworCWRybV9wYW5lbF9pbml0KCZjdHgtPnBhbmVsKTsKKwljdHgtPnBhbmVs LmRldiA9IGRldjsKKwljdHgtPnBhbmVsLmZ1bmNzID0gJnRydWx5X3dxeGdhX2RybV9mdW5jczsK Kwlkcm1fcGFuZWxfYWRkKCZjdHgtPnBhbmVsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IHRydWx5X3dxeGdhX3Byb2JlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHNpLT5kZXY7CisJc3RydWN0IHRydWx5X3dxeGdhICpjdHg7 CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpMV9kZXZpY2U7CisJc3RydWN0IGRldmljZV9u b2RlICpkc2kxOworCXN0cnVjdCBtaXBpX2RzaV9ob3N0ICpkc2kxX2hvc3Q7CisJc3RydWN0IG1p cGlfZHNpX2RldmljZSAqZHNpX2RldjsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKworCWNvbnN0 IHN0cnVjdCBtaXBpX2RzaV9kZXZpY2VfaW5mbyBpbmZvID0gey50eXBlID0gInRydWx5bnQzNTU5 NyIsCisJCS5jaGFubmVsID0gMCwKKwkJLm5vZGUgPSBOVUxMLAorCX07CisKKwljdHggPSBkZXZt X2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOworCisJaWYgKCFjdHgpCisJ CXJldHVybiAtRU5PTUVNOworCisJLyogVGhpcyBkZXZpY2UgcmVwcmVzZW50cyBpdHNlbGYgYXMg b25lIHdpdGgKKwkgKiB0d28gaW5wdXQgcG9ydHMgd2hpY2ggYXJlIGZlZCBieSB0aGUgb3V0cHV0 CisJICogcG9ydHMgb2YgdGhlIHR3byBEU0kgY29udHJvbGxlcnMgLiBUaGUgRFNJMAorCSAqIGlz IHRoZSBtYXN0ZXIgY29udHJvbGxlciBhbmQgaGFzIG1vc3Qgb2YgdGhlCisJICogcGFuZWwgcmVs YXRlZCBpbmZvIGluIGl0cyBjaGlsZCBub2RlLgorCSAqLworCisJZHNpMSA9IG9mX2dyYXBoX2dl dF9yZW1vdGVfbm9kZShkc2ktPmRldi5vZl9ub2RlLCAxLCAtMSk7CisJaWYgKCFkc2kxKSB7CisJ CURSTV9ERVZfRVJST1IoZGV2LAorCQkJImZhaWxlZCB0byBnZXQgcmVtb3RlIG5vZGUgZm9yIGRz aTFfZGV2aWNlXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZ2V0X3JlbW90ZTsK Kwl9CisKKwlkc2kxX2hvc3QgPSBvZl9maW5kX21pcGlfZHNpX2hvc3RfYnlfbm9kZShkc2kxKTsK KwlpZiAoIWRzaTFfaG9zdCkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgImZhaWxlZCB0byBmaW5k IGRzaSBob3N0XG4iKTsKKwkJcmV0ID0gLUVQUk9CRV9ERUZFUjsKKwkJZ290byBlcnJfaG9zdDsK Kwl9CisKKwlvZl9ub2RlX3B1dChkc2kxKTsKKworCS8qIHJlZ2lzdGVyIHRoZSBzZWNvbmQgRFNJ IGRldmljZSAqLworCWRzaTFfZGV2aWNlID0gbWlwaV9kc2lfZGV2aWNlX3JlZ2lzdGVyX2Z1bGwo ZHNpMV9ob3N0LCAmaW5mbyk7CisJaWYgKElTX0VSUihkc2kxX2RldmljZSkpIHsKKwkJRFJNX0RF Vl9FUlJPUihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIGRzaSBkZXZpY2VcbiIpOworCQlyZXQgPSBQ VFJfRVJSKGRzaSk7CisJCWdvdG8gZXJyX2RzaV9kZXZpY2U7CisJfQorCisJbWlwaV9kc2lfc2V0 X2RydmRhdGEoZHNpLCBjdHgpOworCisJY3R4LT5kZXYgPSBkZXY7CisJY3R4LT5kc2lbMF0gPSBk c2k7CisJY3R4LT5kc2lbMV0gPSBkc2kxX2RldmljZTsKKworCXJldCA9IHRydWx5X3dxeGdhX3Bh bmVsX2FkZChjdHgpOworCWlmIChyZXQpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJmYWlsZWQg dG8gYWRkIHBhbmVsXG4iKTsKKwkJZ290byBlcnJfcGFuZWxfYWRkOworCX0KKworCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGN0eC0+ZHNpKTsgaSsrKSB7CisJCWRzaV9kZXYgPSBjdHgtPmRz aVtpXTsKKwkJZHNpX2Rldi0+bGFuZXMgPSA0OworCQlkc2lfZGV2LT5mb3JtYXQgPSBNSVBJX0RT SV9GTVRfUkdCODg4OworCQlkc2lfZGV2LT5tb2RlX2ZsYWdzID0gTUlQSV9EU0lfTU9ERV9WSURF TyB8IE1JUElfRFNJX01PREVfTFBNIHwKKwkJCU1JUElfRFNJX0NMT0NLX05PTl9DT05USU5VT1VT OworCQlyZXQgPSBtaXBpX2RzaV9hdHRhY2goZHNpX2Rldik7CisJCWlmIChyZXQgPCAwKSB7CisJ CQlEUk1fREVWX0VSUk9SKGRldiwKKwkJCQkiZHNpIGF0dGFjaCBmYWlsZWQgaSA9ICVkXG4iLCBp KTsKKwkJCQlnb3RvIGVycl9kc2lfYXR0YWNoOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2Vy cl9kc2lfYXR0YWNoOgorCWRybV9wYW5lbF9yZW1vdmUoJmN0eC0+cGFuZWwpOworZXJyX3BhbmVs X2FkZDoKKwltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3Rlcihkc2kxX2RldmljZSk7CitlcnJfZHNp X2RldmljZToKK2Vycl9ob3N0OgorCW9mX25vZGVfcHV0KGRzaTEpOworZXJyX2dldF9yZW1vdGU6 CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0cnVseV93cXhnYV9yZW1vdmUoc3RydWN0 IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCB0cnVseV93cXhnYSAqY3R4ID0gbWlw aV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsKKworCWlmIChjdHgtPmRzaVswXSkKKwkJbWlwaV9kc2lf ZGV0YWNoKGN0eC0+ZHNpWzBdKTsKKwlpZiAoY3R4LT5kc2lbMV0pIHsKKwkJbWlwaV9kc2lfZGV0 YWNoKGN0eC0+ZHNpWzFdKTsKKwkJbWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIoY3R4LT5kc2lb MV0pOworCX0KKworCWRybV9wYW5lbF9yZW1vdmUoJmN0eC0+cGFuZWwpOworCXJldHVybiAwOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0cnVseV93cXhnYV9vZl9tYXRj aFtdID0geworCXsgLmNvbXBhdGlibGUgPSAidHJ1bHksbnQzNTU5NyIsIH0sCisJeyB9Cit9Owor TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdHJ1bHlfd3F4Z2Ffb2ZfbWF0Y2gpOworCitzdGF0aWMg c3RydWN0IG1pcGlfZHNpX2RyaXZlciB0cnVseV93cXhnYV9kcml2ZXIgPSB7CisJLmRyaXZlciA9 IHsKKwkJLm5hbWUgPSAicGFuZWxfdHJ1bHlfbnQzNTU5NyIsCisJCS5vZl9tYXRjaF90YWJsZSA9 IHRydWx5X3dxeGdhX29mX21hdGNoLAorCX0sCisJLnByb2JlID0gdHJ1bHlfd3F4Z2FfcHJvYmUs CisJLnJlbW92ZSA9IHRydWx5X3dxeGdhX3JlbW92ZSwKK307Cittb2R1bGVfbWlwaV9kc2lfZHJp dmVyKHRydWx5X3dxeGdhX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiVHJ1bHkgTlQz NTU5NyBEU0kgUGFuZWwgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0tIApU aGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENv ZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0 CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK