From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhinav Kumar Subject: [PATCH v8 1/2] drm/panel: Add support for Truly NT35597 panel driver Date: Thu, 20 Sep 2018 15:52:36 -0700 Message-ID: <1537483957-22710-1-git-send-email-abhinavk@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.codeaurora.org (smtp.codeaurora.org [198.145.29.96]) by gabe.freedesktop.org (Postfix) with ESMTPS id 877306E1F3 for ; Thu, 20 Sep 2018 22:52:49 +0000 (UTC) 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: thierry.reding@gmail.com, linux-arm-msm@vger.kernel.org, "abhinavk@codeaurora.org" , bjorn.andersson@linaro.org, seanpaul@chromium.org, hoegsberg@google.com, chandanu@codeaurora.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogImFiaGluYXZrQGNvZGVhdXJvcmEub3JnIiA8YWJoaW5hdmtAY29kZWF1cm9yYS5vcmc+ CgpBZGQgc3VwcG9ydCBmb3IgVHJ1bHkgTlQzNTU5NyBwYW5lbCBkcml2ZXIgdXNlZAppbiBNU00g cmVmZXJlbmNlIHBsYXRmb3Jtcy4KClRoaXMgcGFuZWwgZHJpdmVyIHN1cHBvcnRzIGJvdGggc2lu Z2xlIERTSSBhbmQgZHVhbCBEU0kKbW9kZXMuCgpIb3dldmVyLCB0aGlzIHBhdGNoIHNlcmllcyBh ZGRzIHN1cHBvcnQgb25seSBmb3IKZHVhbCBEU0kgbW9kZS4KCkNoYW5nZXMgaW4gdjg6Ci0gUmVt b3ZlIHZpZGVvIG1vZGUgY29uZmlnIGFuZCBoZWFkZXJzCi0gUmVtb3ZlIHVudXNlZCBtYWNyb3MK LSBUcnkgdG8gYXZvaWQgbXVsdGktbGluZXMgd2hlcmV2ZXIgcG9zc2libGUKLSBGaXggY29tbWVu dHMgbG9jYXRpb25zIGFuZCBtYWtlIGl0IGNvbmNpc2UKLSBGaXggcmV0dXJuIHBvaW50cyBpbiBw cm9iZSBmdW5jdGlvbgoKU2lnbmVkLW9mZi1ieTogQXJjaGl0IFRhbmVqYSA8YXJjaGl0dEBjb2Rl YXVyb3JhLm9yZz4KU2lnbmVkLW9mZi1ieTogQWJoaW5hdiBLdW1hciA8YWJoaW5hdmtAY29kZWF1 cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgICAgICAgICAgICAg ICB8ICAgNyArCiBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgICAgICAgICAgICAgIHwg ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1udDM1NTk3LmMgfCA2NzYg KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA2ODQgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10 cnVseS1udDM1NTk3LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZp ZyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCmluZGV4IDYwMjBjMzAuLjA3M2ZmYTAg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9wYW5lbC9LY29uZmlnCkBAIC0xODYsNCArMTg2LDExIEBAIGNvbmZpZyBEUk1fUEFO RUxfU0lUUk9OSVhfU1Q3Nzg5VgogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUg c3VwcG9ydCBmb3IgdGhlIFNpdHJvbml4CiAJICBTVDc3ODlWIGNvbnRyb2xsZXIgZm9yIDI0MHgz MjAgTENEIHBhbmVscwogCitjb25maWcgRFJNX1BBTkVMX1RSVUxZX05UMzU1OTdfV1FYR0EKKwl0 cmlzdGF0ZSAiVHJ1bHkgV1FYR0EiCisJZGVwZW5kcyBvbiBPRgorCWRlcGVuZHMgb24gRFJNX01J UElfRFNJCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9y dCBmb3IgVHJ1bHkgTlQzNTU5NyBXUVhHQSBEdWFsIERTSQorCSAgVmlkZW8gTW9kZSBwYW5lbAog ZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCmluZGV4IDVjY2FhYTkuLjgwZmQxOWYgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9k cm0vcGFuZWwvTWFrZWZpbGUKQEAgLTE5LDMgKzE5LDQgQEAgb2JqLSQoQ09ORklHX0RSTV9QQU5F TF9TRUlLT180M1dWRjFHKSArPSBwYW5lbC1zZWlrby00M3d2ZjFnLm8KIG9iai0kKENPTkZJR19E Uk1fUEFORUxfU0hBUlBfTFExMDFSMVNYMDEpICs9IHBhbmVsLXNoYXJwLWxxMTAxcjFzeDAxLm8K IG9iai0kKENPTkZJR19EUk1fUEFORUxfU0hBUlBfTFMwNDNUMUxFMDEpICs9IHBhbmVsLXNoYXJw LWxzMDQzdDFsZTAxLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0lUUk9OSVhfU1Q3Nzg5Vikg Kz0gcGFuZWwtc2l0cm9uaXgtc3Q3Nzg5di5vCitvYmotJChDT05GSUdfRFJNX1BBTkVMX1RSVUxZ X05UMzU1OTdfV1FYR0EpICs9IHBhbmVsLXRydWx5LW50MzU1OTcubwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LW50MzU1OTcuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9wYW5lbC10cnVseS1udDM1NTk3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uYzllMDllMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5l bC9wYW5lbC10cnVseS1udDM1NTk3LmMKQEAgLTAsMCArMSw2NzYgQEAKKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE4LCBUaGUgTGlu dXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSA8bGlu dXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVk ZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9j b25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorCisjaW5jbHVkZSA8dmlk ZW8vbWlwaV9kaXNwbGF5Lmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRy bS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+CisKK3N0YXRpYyBj b25zdCBjaGFyICogY29uc3QgcmVndWxhdG9yX25hbWVzW10gPSB7CisJInZkZGEiLAorCSJ2ZGlz cHAiLAorCSJ2ZGlzcG4iLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY29uc3QgcmVndWxh dG9yX2VuYWJsZV9sb2Fkc1tdID0geworCTYyMDAwLAorCTEwMDAwMCwKKwkxMDAwMDAsCit9Owor CitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb25zdCByZWd1bGF0b3JfZGlzYWJsZV9sb2Fkc1tdID0g eworCTgwLAorCTEwMCwKKwkxMDAsCit9OworCitzdHJ1Y3QgbnQzNTU5N19jb25maWcgeworCXUz MiB3aWR0aF9tbTsKKwl1MzIgaGVpZ2h0X21tOworCWNvbnN0IGNoYXIgKnBhbmVsX25hbWU7CisJ Y29uc3Qgdm9pZCAqcGFuZWxfb25fY21kczsKKwl1MzIgbnVtX29uX2NtZHM7CisJY29uc3Qgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKmRtOworfTsKKworc3RydWN0IHRydWx5X250MzU1OTcgewor CXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX3BhbmVsIHBhbmVsOworCisJc3RydWN0 IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbQVJSQVlfU0laRShyZWd1bGF0b3JfbmFtZXMp XTsKKworCXN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87CisJc3RydWN0IGdwaW9fZGVzYyAq bW9kZV9ncGlvOworCisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodDsKKworCXN0 cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaVsyXTsKKworCWNvbnN0IHN0cnVjdCBudDM1NTk3X2Nv bmZpZyAqY29uZmlnOworCWJvb2wgcHJlcGFyZWQ7CisJYm9vbCBlbmFibGVkOworfTsKKworc3Rh dGljIGlubGluZSBzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqcGFuZWxfdG9fY3R4KHN0cnVjdCBkcm1f cGFuZWwgKnBhbmVsKQoreworCXJldHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0cnVjdCB0cnVs eV9udDM1NTk3LCBwYW5lbCk7Cit9CisKK3N0cnVjdCBjbWRfc2V0IHsKKwl1OCBjb21tYW5kc1s0 XTsKKwl1OCBzaXplOworfTsKKworc3RhdGljIHN0cnVjdCBjbWRfc2V0IHFjb21fMmtfcGFuZWxf bWFnaWNfY21kc1tdID0geworCS8qIENNRDJfUDAgKi8KKwl7IHsgMHhmZiwgMHgyMCB9LCAyIH0s CisJeyB7IDB4ZmIsIDB4MDEgfSwgMiB9LAorCXsgeyAweDAwLCAweDAxIH0sIDIgfSwKKwl7IHsg MHgwMSwgMHg1NSB9LCAyIH0sCisJeyB7IDB4MDIsIDB4NDUgfSwgMiB9LAorCXsgeyAweDA1LCAw eDQwIH0sIDIgfSwKKwl7IHsgMHgwNiwgMHgxOSB9LCAyIH0sCisJeyB7IDB4MDcsIDB4MWUgfSwg MiB9LAorCXsgeyAweDBiLCAweDczIH0sIDIgfSwKKwl7IHsgMHgwYywgMHg3MyB9LCAyIH0sCisJ eyB7IDB4MGUsIDB4YjAgfSwgMiB9LAorCXsgeyAweDBmLCAweGFlIH0sIDIgfSwKKwl7IHsgMHgx MSwgMHhiOCB9LCAyIH0sCisJeyB7IDB4MTMsIDB4MDAgfSwgMiB9LAorCXsgeyAweDU4LCAweDgw IH0sIDIgfSwKKwl7IHsgMHg1OSwgMHgwMSB9LCAyIH0sCisJeyB7IDB4NWEsIDB4MDAgfSwgMiB9 LAorCXsgeyAweDViLCAweDAxIH0sIDIgfSwKKwl7IHsgMHg1YywgMHg4MCB9LCAyIH0sCisJeyB7 IDB4NWQsIDB4ODEgfSwgMiB9LAorCXsgeyAweDVlLCAweDAwIH0sIDIgfSwKKwl7IHsgMHg1Ziwg MHgwMSB9LCAyIH0sCisJeyB7IDB4NzIsIDB4MTEgfSwgMiB9LAorCXsgeyAweDY4LCAweDAzIH0s IDIgfSwKKwkvKiBDTUQyX1A0ICovCisJeyB7IDB4RkYsIDB4MjQgfSwgMiB9LAorCXsgeyAweEZC LCAweDAxIH0sIDIgfSwKKwl7IHsgMHgwMCwgMHgxQyB9LCAyIH0sCisJeyB7IDB4MDEsIDB4MEIg fSwgMiB9LAorCXsgeyAweDAyLCAweDBDIH0sIDIgfSwKKwl7IHsgMHgwMywgMHgwMSB9LCAyIH0s CisJeyB7IDB4MDQsIDB4MEYgfSwgMiB9LAorCXsgeyAweDA1LCAweDEwIH0sIDIgfSwKKwl7IHsg MHgwNiwgMHgxMCB9LCAyIH0sCisJeyB7IDB4MDcsIDB4MTAgfSwgMiB9LAorCXsgeyAweDA4LCAw eDg5IH0sIDIgfSwKKwl7IHsgMHgwOSwgMHg4QSB9LCAyIH0sCisJeyB7IDB4MEEsIDB4MTMgfSwg MiB9LAorCXsgeyAweDBCLCAweDEzIH0sIDIgfSwKKwl7IHsgMHgwQywgMHgxNSB9LCAyIH0sCisJ eyB7IDB4MEQsIDB4MTUgfSwgMiB9LAorCXsgeyAweDBFLCAweDE3IH0sIDIgfSwKKwl7IHsgMHgw RiwgMHgxNyB9LCAyIH0sCisJeyB7IDB4MTAsIDB4MUMgfSwgMiB9LAorCXsgeyAweDExLCAweDBC IH0sIDIgfSwKKwl7IHsgMHgxMiwgMHgwQyB9LCAyIH0sCisJeyB7IDB4MTMsIDB4MDEgfSwgMiB9 LAorCXsgeyAweDE0LCAweDBGIH0sIDIgfSwKKwl7IHsgMHgxNSwgMHgxMCB9LCAyIH0sCisJeyB7 IDB4MTYsIDB4MTAgfSwgMiB9LAorCXsgeyAweDE3LCAweDEwIH0sIDIgfSwKKwl7IHsgMHgxOCwg MHg4OSB9LCAyIH0sCisJeyB7IDB4MTksIDB4OEEgfSwgMiB9LAorCXsgeyAweDFBLCAweDEzIH0s IDIgfSwKKwl7IHsgMHgxQiwgMHgxMyB9LCAyIH0sCisJeyB7IDB4MUMsIDB4MTUgfSwgMiB9LAor CXsgeyAweDFELCAweDE1IH0sIDIgfSwKKwl7IHsgMHgxRSwgMHgxNyB9LCAyIH0sCisJeyB7IDB4 MUYsIDB4MTcgfSwgMiB9LAorCS8qIFNUViAqLworCXsgeyAweDIwLCAweDQwIH0sIDIgfSwKKwl7 IHsgMHgyMSwgMHgwMSB9LCAyIH0sCisJeyB7IDB4MjIsIDB4MDAgfSwgMiB9LAorCXsgeyAweDIz LCAweDQwIH0sIDIgfSwKKwl7IHsgMHgyNCwgMHg0MCB9LCAyIH0sCisJeyB7IDB4MjUsIDB4NkQg fSwgMiB9LAorCXsgeyAweDI2LCAweDQwIH0sIDIgfSwKKwl7IHsgMHgyNywgMHg0MCB9LCAyIH0s CisJLyogVmVuZCAqLworCXsgeyAweEUwLCAweDAwIH0sIDIgfSwKKwl7IHsgMHhEQywgMHgyMSB9 LCAyIH0sCisJeyB7IDB4REQsIDB4MjIgfSwgMiB9LAorCXsgeyAweERFLCAweDA3IH0sIDIgfSwK Kwl7IHsgMHhERiwgMHgwNyB9LCAyIH0sCisJeyB7IDB4RTMsIDB4NkQgfSwgMiB9LAorCXsgeyAw eEUxLCAweDA3IH0sIDIgfSwKKwl7IHsgMHhFMiwgMHgwNyB9LCAyIH0sCisJLyogVUQgKi8KKwl7 IHsgMHgyOSwgMHhEOCB9LCAyIH0sCisJeyB7IDB4MkEsIDB4MkEgfSwgMiB9LAorCS8qIENMSyAq LworCXsgeyAweDRCLCAweDAzIH0sIDIgfSwKKwl7IHsgMHg0QywgMHgxMSB9LCAyIH0sCisJeyB7 IDB4NEQsIDB4MTAgfSwgMiB9LAorCXsgeyAweDRFLCAweDAxIH0sIDIgfSwKKwl7IHsgMHg0Riwg MHgwMSB9LCAyIH0sCisJeyB7IDB4NTAsIDB4MTAgfSwgMiB9LAorCXsgeyAweDUxLCAweDAwIH0s IDIgfSwKKwl7IHsgMHg1MiwgMHg4MCB9LCAyIH0sCisJeyB7IDB4NTMsIDB4MDAgfSwgMiB9LAor CXsgeyAweDU2LCAweDAwIH0sIDIgfSwKKwl7IHsgMHg1NCwgMHgwNyB9LCAyIH0sCisJeyB7IDB4 NTgsIDB4MDcgfSwgMiB9LAorCXsgeyAweDU1LCAweDI1IH0sIDIgfSwKKwkvKiBSZXNldCBYRE9O QiAqLworCXsgeyAweDVCLCAweDQzIH0sIDIgfSwKKwl7IHsgMHg1QywgMHgwMCB9LCAyIH0sCisJ eyB7IDB4NUYsIDB4NzMgfSwgMiB9LAorCXsgeyAweDYwLCAweDczIH0sIDIgfSwKKwl7IHsgMHg2 MywgMHgyMiB9LCAyIH0sCisJeyB7IDB4NjQsIDB4MDAgfSwgMiB9LAorCXsgeyAweDY3LCAweDA4 IH0sIDIgfSwKKwl7IHsgMHg2OCwgMHgwNCB9LCAyIH0sCisJLyogUmVzb2x1dGlvbjoxNDQweDI1 NjAgKi8KKwl7IHsgMHg3MiwgMHgwMiB9LCAyIH0sCisJLyogbXV4ICovCisJeyB7IDB4N0EsIDB4 ODAgfSwgMiB9LAorCXsgeyAweDdCLCAweDkxIH0sIDIgfSwKKwl7IHsgMHg3QywgMHhEOCB9LCAy IH0sCisJeyB7IDB4N0QsIDB4NjAgfSwgMiB9LAorCXsgeyAweDdGLCAweDE1IH0sIDIgfSwKKwl7 IHsgMHg3NSwgMHgxNSB9LCAyIH0sCisJLyogQUJPRkYgKi8KKwl7IHsgMHhCMywgMHhDMCB9LCAy IH0sCisJeyB7IDB4QjQsIDB4MDAgfSwgMiB9LAorCXsgeyAweEI1LCAweDAwIH0sIDIgfSwKKwkv KiBTb3VyY2UgRVEgKi8KKwl7IHsgMHg3OCwgMHgwMCB9LCAyIH0sCisJeyB7IDB4NzksIDB4MDAg fSwgMiB9LAorCXsgeyAweDgwLCAweDAwIH0sIDIgfSwKKwl7IHsgMHg4MywgMHgwMCB9LCAyIH0s CisJLyogRlAgQlAgKi8KKwl7IHsgMHg5MywgMHgwQSB9LCAyIH0sCisJeyB7IDB4OTQsIDB4MEEg fSwgMiB9LAorCS8qIEludmVyc2lvbiBUeXBlICovCisJeyB7IDB4OEEsIDB4MDAgfSwgMiB9LAor CXsgeyAweDlCLCAweEZGIH0sIDIgfSwKKwkvKiBJTUdTV0FQID0xIEBQb3J0U3dhcD0xICovCisJ eyB7IDB4OUQsIDB4QjAgfSwgMiB9LAorCXsgeyAweDlGLCAweDYzIH0sIDIgfSwKKwl7IHsgMHg5 OCwgMHgxMCB9LCAyIH0sCisJLyogRlJNICovCisJeyB7IDB4RUMsIDB4MDAgfSwgMiB9LAorCS8q IENNRDEgKi8KKwl7IHsgMHhGRiwgMHgxMCB9LCAyIH0sCisJLyogVkJQK1ZTQT0sVkZQID0gMTBI ICovCisJeyB7IDB4M0IsIDB4MDMsIDB4MEEsIDB4MEEgfSwgNCB9LAorCS8qIEZURSBvbiAqLwor CXsgeyAweDM1LCAweDAwIH0sIDIgfSwKKwkvKiBFTl9CSyA9MShhdXRvIGJsYWNrKSAqLworCXsg eyAweEU1LCAweDAxIH0sIDIgfSwKKwkvKiBDTUQgbW9kZSgxMCkgVkRPIG1vZGUoMDMpICovCisJ eyB7IDB4QkIsIDB4MDMgfSwgMiB9LAorCS8qIE5vbiBSZWxvYWQgTVRQICovCisJeyB7IDB4RkIs IDB4MDEgfSwgMiB9LAorfTsKKworc3RhdGljIGludCB0cnVseV9kY3Nfd3JpdGUoc3RydWN0IGRy bV9wYW5lbCAqcGFuZWwsIHUzMiBjb21tYW5kKQoreworCXN0cnVjdCB0cnVseV9udDM1NTk3ICpj dHggPSBwYW5lbF90b19jdHgocGFuZWwpOworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShjdHgtPmRzaSk7IGkrKykgeworCQlyZXQgPSBtaXBpX2RzaV9kY3Nfd3Jp dGUoY3R4LT5kc2lbaV0sIGNvbW1hbmQsIE5VTEwsIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJ RFJNX0RFVl9FUlJPUihjdHgtPmRldiwKKwkJCQkiY21kIDB4JXggZmFpbGVkIGZvciBkc2kgPSAl ZFxuIiwKKwkJCQljb21tYW5kLCBpKTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgdHJ1bHlfZGNzX3dyaXRlX2J1ZihzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCwKKwl1 MzIgc2l6ZSwgdTggKmJ1ZikKK3sKKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4ID0gcGFuZWxf dG9fY3R4KHBhbmVsKTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGN0eC0+ZHNpKTsgaSsrKSB7CisJCXJldCA9IG1pcGlfZHNpX2Rjc193cml0 ZV9idWZmZXIoY3R4LT5kc2lbaV0sIGJ1Ziwgc2l6ZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlE Uk1fREVWX0VSUk9SKGN0eC0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gdHggY21kIFslZF0sIGVycjog JWRcbiIsIGksIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIGludCB0cnVseV8zNTU5N19wb3dlcl9vbihzdHJ1Y3QgdHJ1bHlfbnQzNTU5 NyAqY3R4KQoreworCWludCByZXQsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShj dHgtPnN1cHBsaWVzKTsgaSsrKSB7CisJCXJldCA9IHJlZ3VsYXRvcl9zZXRfbG9hZChjdHgtPnN1 cHBsaWVzW2ldLmNvbnN1bWVyLAorCQkJCQlyZWd1bGF0b3JfZW5hYmxlX2xvYWRzW2ldKTsKKwkJ aWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5h YmxlKEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyksIGN0eC0+c3VwcGxpZXMpOworCWlmIChyZXQg PCAwKQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBSZXNldCBzZXF1ZW5jZSBvZiB0cnVseSBw YW5lbCByZXF1aXJlcyB0aGUgcGFuZWwgdG8gYmUKKwkgKiBvdXQgb2YgcmVzZXQgZm9yIDEwbXMs IGZvbGxvd2VkIGJ5IGJlaW5nIGhlbGQgaW4gcmVzZXQKKwkgKiBmb3IgMTBtcyBhbmQgdGhlbiBv dXQgYWdhaW4KKwkgKi8KKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAwKTsKKwl1 c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9n cGlvLCAxKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKKwlncGlvZF9zZXRfdmFsdWUo Y3R4LT5yZXNldF9ncGlvLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRydWx5 X250MzU1OTdfcG93ZXJfb2ZmKHN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHgpCit7CisJaW50IHJl dCA9IDA7CisJaW50IGk7CisKKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAxKTsK KworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpOyBpKyspIHsKKwkJ cmV0ID0gcmVndWxhdG9yX3NldF9sb2FkKGN0eC0+c3VwcGxpZXNbaV0uY29uc3VtZXIsCisJCQkJ cmVndWxhdG9yX2Rpc2FibGVfbG9hZHNbaV0pOworCQlpZiAocmV0KSB7CisJCQlEUk1fREVWX0VS Uk9SKGN0eC0+ZGV2LAorCQkJCSJyZWd1bGF0b3Jfc2V0X2xvYWQgZmFpbGVkICVkXG4iLCByZXQp OworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2Rpc2Fi bGUoQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwgY3R4LT5zdXBwbGllcyk7CisJaWYgKHJldCkg eworCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LAorCQkJInJlZ3VsYXRvcl9idWxrX2Rpc2FibGUg ZmFpbGVkICVkXG4iLCByZXQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRy dWx5X250MzU1OTdfZGlzYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3Qg dHJ1bHlfbnQzNTU5NyAqY3R4ID0gcGFuZWxfdG9fY3R4KHBhbmVsKTsKKwlpbnQgcmV0OworCisJ aWYgKCFjdHgtPmVuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKGN0eC0+YmFja2xpZ2h0KSB7 CisJCXJldCA9IGJhY2tsaWdodF9kaXNhYmxlKGN0eC0+YmFja2xpZ2h0KTsKKwkJaWYgKHJldCA8 IDApCisJCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LCAiYmFja2xpZ2h0IGRpc2FibGUgZmFpbGVk ICVkXG4iLAorCQkJCXJldCk7CisJfQorCisJY3R4LT5lbmFibGVkID0gZmFsc2U7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bHlfbnQzNTU5N191bnByZXBhcmUoc3RydWN0IGRybV9w YW5lbCAqcGFuZWwpCit7CisJc3RydWN0IHRydWx5X250MzU1OTcgKmN0eCA9IHBhbmVsX3RvX2N0 eChwYW5lbCk7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWN0eC0+cHJlcGFyZWQpCisJCXJldHVy biAwOworCisJY3R4LT5kc2lbMF0tPm1vZGVfZmxhZ3MgPSAwOworCWN0eC0+ZHNpWzFdLT5tb2Rl X2ZsYWdzID0gMDsKKworCXJldCA9IHRydWx5X2Rjc193cml0ZShwYW5lbCwgTUlQSV9EQ1NfU0VU X0RJU1BMQVlfT0ZGKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2 LAorCQkJInNldF9kaXNwbGF5X29mZiBjbWQgZmFpbGVkIHJldCA9ICVkXG4iLAorCQkJcmV0KTsK Kwl9CisKKwkvKiAxMjBtcyBkZWxheSByZXF1aXJlZCBoZXJlIGFzIHBlciBEQ1Mgc3BlYyAqLwor CW1zbGVlcCgxMjApOworCisJcmV0ID0gdHJ1bHlfZGNzX3dyaXRlKHBhbmVsLCBNSVBJX0RDU19F TlRFUl9TTEVFUF9NT0RFKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGN0eC0+ ZGV2LAorCQkJImVudGVyX3NsZWVwIGNtZCBmYWlsZWQgcmV0ID0gJWRcbiIsIHJldCk7CisJfQor CisJcmV0ID0gdHJ1bHlfbnQzNTU5N19wb3dlcl9vZmYoY3R4KTsKKwlpZiAocmV0IDwgMCkKKwkJ RFJNX0RFVl9FUlJPUihjdHgtPmRldiwgInBvd2VyX29mZiBmYWlsZWQgcmV0ID0gJWRcbiIsIHJl dCk7CisKKwljdHgtPnByZXBhcmVkID0gZmFsc2U7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IGludCB0cnVseV9udDM1NTk3X3ByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJ c3RydWN0IHRydWx5X250MzU1OTcgKmN0eCA9IHBhbmVsX3RvX2N0eChwYW5lbCk7CisJaW50IHJl dDsKKwlpbnQgaTsKKwlzdHJ1Y3QgY21kX3NldCAqcGFuZWxfb25fY21kczsKKwljb25zdCBzdHJ1 Y3QgbnQzNTU5N19jb25maWcgKmNvbmZpZzsKKwl1MzIgbnVtX2NtZHM7CisKKwlpZiAoY3R4LT5w cmVwYXJlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSB0cnVseV8zNTU5N19wb3dlcl9vbihjdHgp OworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJY3R4LT5kc2lbMF0tPm1vZGVfZmxh Z3MgfD0gTUlQSV9EU0lfTU9ERV9MUE07CisJY3R4LT5kc2lbMV0tPm1vZGVfZmxhZ3MgfD0gTUlQ SV9EU0lfTU9ERV9MUE07CisKKwljb25maWcgPSBjdHgtPmNvbmZpZzsKKwlwYW5lbF9vbl9jbWRz ID0gKHN0cnVjdCBjbWRfc2V0ICopY29uZmlnLT5wYW5lbF9vbl9jbWRzOworCW51bV9jbWRzID0g Y29uZmlnLT5udW1fb25fY21kczsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fY21kczsgaSsrKSB7 CisJCXJldCA9IHRydWx5X2Rjc193cml0ZV9idWYocGFuZWwsCisJCQkJcGFuZWxfb25fY21kc1tp XS5zaXplLAorCQkJCQlwYW5lbF9vbl9jbWRzW2ldLmNvbW1hbmRzKTsKKwkJaWYgKHJldCA8IDAp IHsKKwkJCURSTV9ERVZfRVJST1IoY3R4LT5kZXYsCisJCQkJImNtZCBzZXQgdHggZmFpbGVkIGkg PSAlZCByZXQgPSAlZFxuIiwKKwkJCQkJaSwgcmV0KTsKKwkJCWdvdG8gcG93ZXJfb2ZmOworCQl9 CisJfQorCisJcmV0ID0gdHJ1bHlfZGNzX3dyaXRlKHBhbmVsLCBNSVBJX0RDU19FWElUX1NMRUVQ X01PREUpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoY3R4LT5kZXYsCisJCQki ZXhpdF9zbGVlcF9tb2RlIGNtZCBmYWlsZWQgcmV0ID0gJWRcbiIsCisJCQlyZXQpOworCQlnb3Rv IHBvd2VyX29mZjsKKwl9CisKKwkvKiBQZXIgRFNJIHNwZWMgd2FpdCAxMjBtcyBhZnRlciBzZW5k aW5nIGV4aXQgc2xlZXAgRENTIGNvbW1hbmQgKi8KKwltc2xlZXAoMTIwKTsKKworCXJldCA9IHRy dWx5X2Rjc193cml0ZShwYW5lbCwgTUlQSV9EQ1NfU0VUX0RJU1BMQVlfT04pOworCWlmIChyZXQg PCAwKSB7CisJCURSTV9ERVZfRVJST1IoY3R4LT5kZXYsCisJCQkic2V0X2Rpc3BsYXlfb24gY21k IGZhaWxlZCByZXQgPSAlZFxuIiwgcmV0KTsKKwkJZ290byBwb3dlcl9vZmY7CisJfQorCisJLyog UGVyIERTSSBzcGVjIHdhaXQgMTIwbXMgYWZ0ZXIgc2VuZGluZyBzZXRfZGlzcGxheV9vbiBEQ1Mg Y29tbWFuZCAqLworCW1zbGVlcCgxMjApOworCisJY3R4LT5wcmVwYXJlZCA9IHRydWU7CisKKwly ZXR1cm4gMDsKKworcG93ZXJfb2ZmOgorCWlmICh0cnVseV9udDM1NTk3X3Bvd2VyX29mZihjdHgp KQorCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LCAicG93ZXJfb2ZmIGZhaWxlZFxuIik7CisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIGludCB0cnVseV9udDM1NTk3X2VuYWJsZShzdHJ1Y3QgZHJt X3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4ID0gcGFuZWxfdG9f Y3R4KHBhbmVsKTsKKwlpbnQgcmV0OworCisJaWYgKGN0eC0+ZW5hYmxlZCkKKwkJcmV0dXJuIDA7 CisKKwlpZiAoY3R4LT5iYWNrbGlnaHQpIHsKKwkJcmV0ID0gYmFja2xpZ2h0X2VuYWJsZShjdHgt PmJhY2tsaWdodCk7CisJCWlmIChyZXQgPCAwKQorCQkJRFJNX0RFVl9FUlJPUihjdHgtPmRldiwg ImJhY2tsaWdodCBlbmFibGUgZmFpbGVkICVkXG4iLAorCQkJCQkJICByZXQpOworCX0KKworCWN0 eC0+ZW5hYmxlZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cnVseV9u dDM1NTk3X2dldF9tb2RlcyhzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yID0gcGFuZWwtPmNvbm5lY3RvcjsKKwlzdHJ1Y3QgdHJ1bHlf bnQzNTU5NyAqY3R4ID0gcGFuZWxfdG9fY3R4KHBhbmVsKTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZTsKKwljb25zdCBzdHJ1Y3QgbnQzNTU5N19jb25maWcgKmNvbmZpZzsKKworCWNv bmZpZyA9IGN0eC0+Y29uZmlnOworCW1vZGUgPSBkcm1fbW9kZV9jcmVhdGUoY29ubmVjdG9yLT5k ZXYpOworCWlmICghbW9kZSkgeworCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LAorCQkJImZhaWxl ZCB0byBjcmVhdGUgYSBuZXcgZGlzcGxheSBtb2RlXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJ Y29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW0gPSBjb25maWctPndpZHRoX21tOworCWNv bm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbSA9IGNvbmZpZy0+aGVpZ2h0X21tOworCWRy bV9tb2RlX2NvcHkobW9kZSwgY29uZmlnLT5kbSk7CisJbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZ UEVfRFJJVkVSIHwgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CisJZHJtX21vZGVfcHJvYmVkX2Fk ZChjb25uZWN0b3IsIG1vZGUpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX3BhbmVsX2Z1bmNzIHRydWx5X250MzU1OTdfZHJtX2Z1bmNzID0geworCS5kaXNhYmxl ID0gdHJ1bHlfbnQzNTU5N19kaXNhYmxlLAorCS51bnByZXBhcmUgPSB0cnVseV9udDM1NTk3X3Vu cHJlcGFyZSwKKwkucHJlcGFyZSA9IHRydWx5X250MzU1OTdfcHJlcGFyZSwKKwkuZW5hYmxlID0g dHJ1bHlfbnQzNTU5N19lbmFibGUsCisJLmdldF9tb2RlcyA9IHRydWx5X250MzU1OTdfZ2V0X21v ZGVzLAorfTsKKworc3RhdGljIGludCB0cnVseV9udDM1NTk3X3BhbmVsX2FkZChzdHJ1Y3QgdHJ1 bHlfbnQzNTU5NyAqY3R4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGN0eC0+ZGV2OworCWlu dCByZXQsIGk7CisJY29uc3Qgc3RydWN0IG50MzU1OTdfY29uZmlnICpjb25maWc7CisKKwljb25m aWcgPSBjdHgtPmNvbmZpZzsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPnN1cHBs aWVzKTsgaSsrKQorCQljdHgtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHJlZ3VsYXRvcl9uYW1lc1tp XTsKKworCXJldCA9IGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0KGRldiwgQVJSQVlfU0laRShjdHgt PnN1cHBsaWVzKSwKKwkJCQkgICAgICBjdHgtPnN1cHBsaWVzKTsKKwlpZiAocmV0IDwgMCkKKwkJ cmV0dXJuIHJldDsKKworCWN0eC0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInJl c2V0IiwgR1BJT0RfT1VUX0xPVyk7CisJaWYgKElTX0VSUihjdHgtPnJlc2V0X2dwaW8pKSB7CisJ CURSTV9ERVZfRVJST1IoZGV2LCAiY2Fubm90IGdldCByZXNldCBncGlvICVsZFxuIiwKKwkJCVBU Ul9FUlIoY3R4LT5yZXNldF9ncGlvKSk7CisJCXJldHVybiBQVFJfRVJSKGN0eC0+cmVzZXRfZ3Bp byk7CisJfQorCisJY3R4LT5tb2RlX2dwaW8gPSBkZXZtX2dwaW9kX2dldChkZXYsICJtb2RlIiwg R1BJT0RfT1VUX0xPVyk7CisJaWYgKElTX0VSUihjdHgtPm1vZGVfZ3BpbykpIHsKKwkJRFJNX0RF Vl9FUlJPUihkZXYsICJjYW5ub3QgZ2V0IG1vZGUgZ3BpbyAlbGRcbiIsCisJCQlQVFJfRVJSKGN0 eC0+bW9kZV9ncGlvKSk7CisJCXJldHVybiBQVFJfRVJSKGN0eC0+bW9kZV9ncGlvKTsKKwl9CisK KwkvKiBkdWFsIHBvcnQgKi8KKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5tb2RlX2dwaW8sIDApOwor CisJZHJtX3BhbmVsX2luaXQoJmN0eC0+cGFuZWwpOworCWN0eC0+cGFuZWwuZGV2ID0gZGV2Owor CWN0eC0+cGFuZWwuZnVuY3MgPSAmdHJ1bHlfbnQzNTU5N19kcm1fZnVuY3M7CisJZHJtX3BhbmVs X2FkZCgmY3R4LT5wYW5lbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlIHFjb21fc2RtODQ1X210cF8ya19tb2RlID0geworCS5uYW1lID0g IjE0NDB4MjU2MCIsCisJLmNsb2NrID0gMjY4MzE2LAorCS5oZGlzcGxheSA9IDE0NDAsCisJLmhz eW5jX3N0YXJ0ID0gMTQ0MCArIDIwMCwKKwkuaHN5bmNfZW5kID0gMTQ0MCArIDIwMCArIDMyLAor CS5odG90YWwgPSAxNDQwICsgMjAwICsgMzIgKyA2NCwKKwkudmRpc3BsYXkgPSAyNTYwLAorCS52 c3luY19zdGFydCA9IDI1NjAgKyA4LAorCS52c3luY19lbmQgPSAyNTYwICsgOCArIDEsCisJLnZ0 b3RhbCA9IDI1NjAgKyA4ICsgMSArIDcsCisJLnZyZWZyZXNoID0gNjAsCisJLmZsYWdzID0gMCwK K307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnQzNTU5N19jb25maWcgbnQzNTU5N19kaXIgPSB7 CisJLndpZHRoX21tID0gNzQsCisJLmhlaWdodF9tbSA9IDEzMSwKKwkucGFuZWxfbmFtZSA9ICJx Y29tX3NkbTg0NV9tdHBfMmtfcGFuZWwiLAorCS5kbSA9ICZxY29tX3NkbTg0NV9tdHBfMmtfbW9k ZSwKKwkucGFuZWxfb25fY21kcyA9IHFjb21fMmtfcGFuZWxfbWFnaWNfY21kcywKKwkubnVtX29u X2NtZHMgPSBBUlJBWV9TSVpFKHFjb21fMmtfcGFuZWxfbWFnaWNfY21kcyksCit9OworCitzdGF0 aWMgaW50IHRydWx5X250MzU1OTdfcHJvYmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQor eworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkc2ktPmRldjsKKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5 NyAqY3R4OworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaTFfZGV2aWNlOworCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqZHNpMTsKKwlzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqZHNpMV9ob3N0OworCXN0 cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaV9kZXY7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisK Kwljb25zdCBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlX2luZm8gaW5mbyA9IHsKKwkJLnR5cGUgPSAi dHJ1bHludDM1NTk3IiwKKwkJLmNoYW5uZWwgPSAwLAorCQkubm9kZSA9IE5VTEwsCisJfTsKKwor CWN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7CisKKwlp ZiAoIWN0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIFRoaXMgZGV2aWNlIHJlcHJl c2VudHMgaXRzZWxmIGFzIG9uZSB3aXRoCisJICogdHdvIGlucHV0IHBvcnRzIHdoaWNoIGFyZSBm ZWQgYnkgdGhlIG91dHB1dAorCSAqIHBvcnRzIG9mIHRoZSB0d28gRFNJIGNvbnRyb2xsZXJzIC4g VGhlIERTSTAKKwkgKiBpcyB0aGUgbWFzdGVyIGNvbnRyb2xsZXIgYW5kIGhhcyBtb3N0IG9mIHRo ZQorCSAqIHBhbmVsIHJlbGF0ZWQgaW5mbyBpbiBpdHMgY2hpbGQgbm9kZS4KKwkgKi8KKworCWN0 eC0+Y29uZmlnID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7CisKKwlpZiAoIWN0eC0+ Y29uZmlnKSB7CisJCWRldl9lcnIoZGV2LCAibWlzc2luZyBkZXZpY2UgY29uZmlndXJhdGlvblxu Iik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRzaTEgPSBvZl9ncmFwaF9nZXRfcmVtb3Rl X25vZGUoZHNpLT5kZXYub2Zfbm9kZSwgMSwgLTEpOworCWlmICghZHNpMSkgeworCQlEUk1fREVW X0VSUk9SKGRldiwKKwkJCSJmYWlsZWQgdG8gZ2V0IHJlbW90ZSBub2RlIGZvciBkc2kxX2Rldmlj ZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRzaTFfaG9zdCA9IG9mX2ZpbmRfbWlw aV9kc2lfaG9zdF9ieV9ub2RlKGRzaTEpOworCW9mX25vZGVfcHV0KGRzaTEpOworCWlmICghZHNp MV9ob3N0KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiZmFpbGVkIHRvIGZpbmQgZHNpIGhvc3Rc biIpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisKKwkvKiByZWdpc3RlciB0aGUgc2Vj b25kIERTSSBkZXZpY2UgKi8KKwlkc2kxX2RldmljZSA9IG1pcGlfZHNpX2RldmljZV9yZWdpc3Rl cl9mdWxsKGRzaTFfaG9zdCwgJmluZm8pOworCWlmIChJU19FUlIoZHNpMV9kZXZpY2UpKSB7CisJ CURSTV9ERVZfRVJST1IoZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBkc2kgZGV2aWNlXG4iKTsKKwkJ cmV0dXJuIFBUUl9FUlIoZHNpKTsKKwl9CisKKwltaXBpX2RzaV9zZXRfZHJ2ZGF0YShkc2ksIGN0 eCk7CisKKwljdHgtPmRldiA9IGRldjsKKwljdHgtPmRzaVswXSA9IGRzaTsKKwljdHgtPmRzaVsx XSA9IGRzaTFfZGV2aWNlOworCisJcmV0ID0gdHJ1bHlfbnQzNTU5N19wYW5lbF9hZGQoY3R4KTsK KwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiZmFpbGVkIHRvIGFkZCBwYW5lbFxu Iik7CisJCWdvdG8gZXJyX3BhbmVsX2FkZDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShjdHgtPmRzaSk7IGkrKykgeworCQlkc2lfZGV2ID0gY3R4LT5kc2lbaV07CisJCWRzaV9k ZXYtPmxhbmVzID0gNDsKKwkJZHNpX2Rldi0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsK KwkJZHNpX2Rldi0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01PREVfVklERU8gfCBNSVBJX0RTSV9N T0RFX0xQTSB8CisJCQlNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUzsKKwkJcmV0ID0gbWlw aV9kc2lfYXR0YWNoKGRzaV9kZXYpOworCQlpZiAocmV0IDwgMCkgeworCQkJRFJNX0RFVl9FUlJP UihkZXYsCisJCQkJImRzaSBhdHRhY2ggZmFpbGVkIGkgPSAlZFxuIiwgaSk7CisJCQkJZ290byBl cnJfZHNpX2F0dGFjaDsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnJfZHNpX2F0dGFjaDoK Kwlkcm1fcGFuZWxfcmVtb3ZlKCZjdHgtPnBhbmVsKTsKK2Vycl9wYW5lbF9hZGQ6CisJbWlwaV9k c2lfZGV2aWNlX3VucmVnaXN0ZXIoZHNpMV9kZXZpY2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgdHJ1bHlfbnQzNTU5N19yZW1vdmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNp KQoreworCXN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHggPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShk c2kpOworCisJaWYgKGN0eC0+ZHNpWzBdKQorCQltaXBpX2RzaV9kZXRhY2goY3R4LT5kc2lbMF0p OworCWlmIChjdHgtPmRzaVsxXSkgeworCQltaXBpX2RzaV9kZXRhY2goY3R4LT5kc2lbMV0pOwor CQltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3RlcihjdHgtPmRzaVsxXSk7CisJfQorCisJZHJtX3Bh bmVsX3JlbW92ZSgmY3R4LT5wYW5lbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRydWx5X250MzU1OTdfb2ZfbWF0Y2hbXSA9IHsKKwl7CS5jb21w YXRpYmxlID0gInRydWx5LG50MzU1OTctMkstZGlzcGxheSIsCisJCS5kYXRhID0gJm50MzU1OTdf ZGlyLAorCX0sCisKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0cnVseV9udDM1 NTk3X29mX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBtaXBpX2RzaV9kcml2ZXIgdHJ1bHlfbnQz NTU5N19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicGFuZWxfdHJ1bHlfbnQz NTU5NyIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHRydWx5X250MzU1OTdfb2ZfbWF0Y2gsCisJfSwK KwkucHJvYmUgPSB0cnVseV9udDM1NTk3X3Byb2JlLAorCS5yZW1vdmUgPSB0cnVseV9udDM1NTk3 X3JlbW92ZSwKK307Cittb2R1bGVfbWlwaV9kc2lfZHJpdmVyKHRydWx5X250MzU1OTdfZHJpdmVy KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJUcnVseSBOVDM1NTk3IERTSSBQYW5lbCBEcml2ZXIi KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9u IENlbnRlciwgSW5jLiBpcyBhIG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmEgTGlu dXggRm91bmRhdGlvbiBDb2xsYWJvcmF0aXZlIFByb2plY3QKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=