From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhinav Kumar Subject: [PATCH v10 1/2] drm/panel: Add support for Truly NT35597 panel driver Date: Fri, 5 Oct 2018 17:52:18 -0700 Message-ID: <1538787139-28122-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: thierry.reding@gmail.com, devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, Abhinav Kumar , robh+dt@kernel.org, seanpaul@chromium.org, hoegsberg@google.com, chandanu@codeaurora.org List-Id: linux-arm-msm@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIFRydWx5IE5UMzU1OTcgcGFuZWwgZHJpdmVyIHVzZWQgaW4gTVNNIHJl ZmVyZW5jZQpwbGF0Zm9ybXMuIFRoaXMgcGFuZWwgZHJpdmVyIHN1cHBvcnRzIGJvdGggc2luZ2xl IERTSSBhbmQgZHVhbApEU0kgbW9kZXMuCgpIb3dldmVyLCB0aGlzIHBhdGNoIHNlcmllcyBhZGRz IHN1cHBvcnQgb25seSBmb3IgZHVhbCBEU0kgbW9kZS4KCkNoYW5nZXMgaW4gdjEwOgotIE5vbmUK ClJldmlld2VkLWJ5OiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9yZz4KU2lnbmVkLW9m Zi1ieTogQXJjaGl0IFRhbmVqYSA8YXJjaGl0dEBjb2RlYXVyb3JhLm9yZz4KU2lnbmVkLW9mZi1i eTogQWJoaW5hdiBLdW1hciA8YWJoaW5hdmtAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9n cHUvZHJtL3BhbmVsL0tjb25maWcgICAgICAgICAgICAgICB8ICAgNyArCiBkcml2ZXJzL2dwdS9k cm0vcGFuZWwvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9w YW5lbC9wYW5lbC10cnVseS1udDM1NTk3LmMgfCA2NzUgKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogMyBmaWxlcyBjaGFuZ2VkLCA2ODMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1udDM1NTk3LmMKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5l bC9LY29uZmlnCmluZGV4IDYwMjBjMzAuLjA3M2ZmYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9wYW5lbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCkBA IC0xODYsNCArMTg2LDExIEBAIGNvbmZpZyBEUk1fUEFORUxfU0lUUk9OSVhfU1Q3Nzg5VgogCSAg U2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFNpdHJvbml4 CiAJICBTVDc3ODlWIGNvbnRyb2xsZXIgZm9yIDI0MHgzMjAgTENEIHBhbmVscwogCitjb25maWcg RFJNX1BBTkVMX1RSVUxZX05UMzU1OTdfV1FYR0EKKwl0cmlzdGF0ZSAiVHJ1bHkgV1FYR0EiCisJ ZGVwZW5kcyBvbiBPRgorCWRlcGVuZHMgb24gRFJNX01JUElfRFNJCisJaGVscAorCSAgU2F5IFkg aGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgVHJ1bHkgTlQzNTU5NyBXUVhH QSBEdWFsIERTSQorCSAgVmlkZW8gTW9kZSBwYW5lbAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2Vm aWxlCmluZGV4IDVjY2FhYTkuLjgwZmQxOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9w YW5lbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKQEAgLTE5 LDMgKzE5LDQgQEAgb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TRUlLT180M1dWRjFHKSArPSBwYW5l bC1zZWlrby00M3d2ZjFnLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0hBUlBfTFExMDFSMVNY MDEpICs9IHBhbmVsLXNoYXJwLWxxMTAxcjFzeDAxLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxf U0hBUlBfTFMwNDNUMUxFMDEpICs9IHBhbmVsLXNoYXJwLWxzMDQzdDFsZTAxLm8KIG9iai0kKENP TkZJR19EUk1fUEFORUxfU0lUUk9OSVhfU1Q3Nzg5VikgKz0gcGFuZWwtc2l0cm9uaXgtc3Q3Nzg5 di5vCitvYmotJChDT05GSUdfRFJNX1BBTkVMX1RSVUxZX05UMzU1OTdfV1FYR0EpICs9IHBhbmVs LXRydWx5LW50MzU1OTcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVs LXRydWx5LW50MzU1OTcuYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1udDM1 NTk3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyYTY2YwotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC10cnVseS1udDM1NTk3LmMK QEAgLTAsMCArMSw2NzUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisv KgorICogQ29weXJpZ2h0IChjKSAyMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorCisjaW5jbHVkZSA8 bGludXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9jb25zdW1l ci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorCisjaW5jbHVkZSA8 dmlkZW8vbWlwaV9kaXNwbGF5Lmg+CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVndWxh dG9yX25hbWVzW10gPSB7CisJInZkZGEiLAorCSJ2ZGlzcHAiLAorCSJ2ZGlzcG4iLAorfTsKKwor c3RhdGljIHVuc2lnbmVkIGxvbmcgY29uc3QgcmVndWxhdG9yX2VuYWJsZV9sb2Fkc1tdID0gewor CTYyMDAwLAorCTEwMDAwMCwKKwkxMDAwMDAsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBj b25zdCByZWd1bGF0b3JfZGlzYWJsZV9sb2Fkc1tdID0geworCTgwLAorCTEwMCwKKwkxMDAsCit9 OworCitzdHJ1Y3QgY21kX3NldCB7CisJdTggY29tbWFuZHNbNF07CisJdTggc2l6ZTsKK307CisK K3N0cnVjdCBudDM1NTk3X2NvbmZpZyB7CisJdTMyIHdpZHRoX21tOworCXUzMiBoZWlnaHRfbW07 CisJY29uc3QgY2hhciAqcGFuZWxfbmFtZTsKKwljb25zdCBzdHJ1Y3QgY21kX3NldCAqcGFuZWxf b25fY21kczsKKwl1MzIgbnVtX29uX2NtZHM7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKmRtOworfTsKKworc3RydWN0IHRydWx5X250MzU1OTcgeworCXN0cnVjdCBkZXZpY2UgKmRl djsKKwlzdHJ1Y3QgZHJtX3BhbmVsIHBhbmVsOworCisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2Rh dGEgc3VwcGxpZXNbQVJSQVlfU0laRShyZWd1bGF0b3JfbmFtZXMpXTsKKworCXN0cnVjdCBncGlv X2Rlc2MgKnJlc2V0X2dwaW87CisJc3RydWN0IGdwaW9fZGVzYyAqbW9kZV9ncGlvOworCisJc3Ry dWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodDsKKworCXN0cnVjdCBtaXBpX2RzaV9kZXZp Y2UgKmRzaVsyXTsKKworCWNvbnN0IHN0cnVjdCBudDM1NTk3X2NvbmZpZyAqY29uZmlnOworCWJv b2wgcHJlcGFyZWQ7CisJYm9vbCBlbmFibGVkOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qg dHJ1bHlfbnQzNTU5NyAqcGFuZWxfdG9fY3R4KHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQorewor CXJldHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0cnVjdCB0cnVseV9udDM1NTk3LCBwYW5lbCk7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY21kX3NldCBxY29tXzJrX3BhbmVsX21hZ2ljX2Nt ZHNbXSA9IHsKKwkvKiBDTUQyX1AwICovCisJeyB7IDB4ZmYsIDB4MjAgfSwgMiB9LAorCXsgeyAw eGZiLCAweDAxIH0sIDIgfSwKKwl7IHsgMHgwMCwgMHgwMSB9LCAyIH0sCisJeyB7IDB4MDEsIDB4 NTUgfSwgMiB9LAorCXsgeyAweDAyLCAweDQ1IH0sIDIgfSwKKwl7IHsgMHgwNSwgMHg0MCB9LCAy IH0sCisJeyB7IDB4MDYsIDB4MTkgfSwgMiB9LAorCXsgeyAweDA3LCAweDFlIH0sIDIgfSwKKwl7 IHsgMHgwYiwgMHg3MyB9LCAyIH0sCisJeyB7IDB4MGMsIDB4NzMgfSwgMiB9LAorCXsgeyAweDBl LCAweGIwIH0sIDIgfSwKKwl7IHsgMHgwZiwgMHhhZSB9LCAyIH0sCisJeyB7IDB4MTEsIDB4Yjgg fSwgMiB9LAorCXsgeyAweDEzLCAweDAwIH0sIDIgfSwKKwl7IHsgMHg1OCwgMHg4MCB9LCAyIH0s CisJeyB7IDB4NTksIDB4MDEgfSwgMiB9LAorCXsgeyAweDVhLCAweDAwIH0sIDIgfSwKKwl7IHsg MHg1YiwgMHgwMSB9LCAyIH0sCisJeyB7IDB4NWMsIDB4ODAgfSwgMiB9LAorCXsgeyAweDVkLCAw eDgxIH0sIDIgfSwKKwl7IHsgMHg1ZSwgMHgwMCB9LCAyIH0sCisJeyB7IDB4NWYsIDB4MDEgfSwg MiB9LAorCXsgeyAweDcyLCAweDExIH0sIDIgfSwKKwl7IHsgMHg2OCwgMHgwMyB9LCAyIH0sCisJ LyogQ01EMl9QNCAqLworCXsgeyAweEZGLCAweDI0IH0sIDIgfSwKKwl7IHsgMHhGQiwgMHgwMSB9 LCAyIH0sCisJeyB7IDB4MDAsIDB4MUMgfSwgMiB9LAorCXsgeyAweDAxLCAweDBCIH0sIDIgfSwK Kwl7IHsgMHgwMiwgMHgwQyB9LCAyIH0sCisJeyB7IDB4MDMsIDB4MDEgfSwgMiB9LAorCXsgeyAw eDA0LCAweDBGIH0sIDIgfSwKKwl7IHsgMHgwNSwgMHgxMCB9LCAyIH0sCisJeyB7IDB4MDYsIDB4 MTAgfSwgMiB9LAorCXsgeyAweDA3LCAweDEwIH0sIDIgfSwKKwl7IHsgMHgwOCwgMHg4OSB9LCAy IH0sCisJeyB7IDB4MDksIDB4OEEgfSwgMiB9LAorCXsgeyAweDBBLCAweDEzIH0sIDIgfSwKKwl7 IHsgMHgwQiwgMHgxMyB9LCAyIH0sCisJeyB7IDB4MEMsIDB4MTUgfSwgMiB9LAorCXsgeyAweDBE LCAweDE1IH0sIDIgfSwKKwl7IHsgMHgwRSwgMHgxNyB9LCAyIH0sCisJeyB7IDB4MEYsIDB4MTcg fSwgMiB9LAorCXsgeyAweDEwLCAweDFDIH0sIDIgfSwKKwl7IHsgMHgxMSwgMHgwQiB9LCAyIH0s CisJeyB7IDB4MTIsIDB4MEMgfSwgMiB9LAorCXsgeyAweDEzLCAweDAxIH0sIDIgfSwKKwl7IHsg MHgxNCwgMHgwRiB9LCAyIH0sCisJeyB7IDB4MTUsIDB4MTAgfSwgMiB9LAorCXsgeyAweDE2LCAw eDEwIH0sIDIgfSwKKwl7IHsgMHgxNywgMHgxMCB9LCAyIH0sCisJeyB7IDB4MTgsIDB4ODkgfSwg MiB9LAorCXsgeyAweDE5LCAweDhBIH0sIDIgfSwKKwl7IHsgMHgxQSwgMHgxMyB9LCAyIH0sCisJ eyB7IDB4MUIsIDB4MTMgfSwgMiB9LAorCXsgeyAweDFDLCAweDE1IH0sIDIgfSwKKwl7IHsgMHgx RCwgMHgxNSB9LCAyIH0sCisJeyB7IDB4MUUsIDB4MTcgfSwgMiB9LAorCXsgeyAweDFGLCAweDE3 IH0sIDIgfSwKKwkvKiBTVFYgKi8KKwl7IHsgMHgyMCwgMHg0MCB9LCAyIH0sCisJeyB7IDB4MjEs IDB4MDEgfSwgMiB9LAorCXsgeyAweDIyLCAweDAwIH0sIDIgfSwKKwl7IHsgMHgyMywgMHg0MCB9 LCAyIH0sCisJeyB7IDB4MjQsIDB4NDAgfSwgMiB9LAorCXsgeyAweDI1LCAweDZEIH0sIDIgfSwK Kwl7IHsgMHgyNiwgMHg0MCB9LCAyIH0sCisJeyB7IDB4MjcsIDB4NDAgfSwgMiB9LAorCS8qIFZl bmQgKi8KKwl7IHsgMHhFMCwgMHgwMCB9LCAyIH0sCisJeyB7IDB4REMsIDB4MjEgfSwgMiB9LAor CXsgeyAweERELCAweDIyIH0sIDIgfSwKKwl7IHsgMHhERSwgMHgwNyB9LCAyIH0sCisJeyB7IDB4 REYsIDB4MDcgfSwgMiB9LAorCXsgeyAweEUzLCAweDZEIH0sIDIgfSwKKwl7IHsgMHhFMSwgMHgw NyB9LCAyIH0sCisJeyB7IDB4RTIsIDB4MDcgfSwgMiB9LAorCS8qIFVEICovCisJeyB7IDB4Mjks IDB4RDggfSwgMiB9LAorCXsgeyAweDJBLCAweDJBIH0sIDIgfSwKKwkvKiBDTEsgKi8KKwl7IHsg MHg0QiwgMHgwMyB9LCAyIH0sCisJeyB7IDB4NEMsIDB4MTEgfSwgMiB9LAorCXsgeyAweDRELCAw eDEwIH0sIDIgfSwKKwl7IHsgMHg0RSwgMHgwMSB9LCAyIH0sCisJeyB7IDB4NEYsIDB4MDEgfSwg MiB9LAorCXsgeyAweDUwLCAweDEwIH0sIDIgfSwKKwl7IHsgMHg1MSwgMHgwMCB9LCAyIH0sCisJ eyB7IDB4NTIsIDB4ODAgfSwgMiB9LAorCXsgeyAweDUzLCAweDAwIH0sIDIgfSwKKwl7IHsgMHg1 NiwgMHgwMCB9LCAyIH0sCisJeyB7IDB4NTQsIDB4MDcgfSwgMiB9LAorCXsgeyAweDU4LCAweDA3 IH0sIDIgfSwKKwl7IHsgMHg1NSwgMHgyNSB9LCAyIH0sCisJLyogUmVzZXQgWERPTkIgKi8KKwl7 IHsgMHg1QiwgMHg0MyB9LCAyIH0sCisJeyB7IDB4NUMsIDB4MDAgfSwgMiB9LAorCXsgeyAweDVG LCAweDczIH0sIDIgfSwKKwl7IHsgMHg2MCwgMHg3MyB9LCAyIH0sCisJeyB7IDB4NjMsIDB4MjIg fSwgMiB9LAorCXsgeyAweDY0LCAweDAwIH0sIDIgfSwKKwl7IHsgMHg2NywgMHgwOCB9LCAyIH0s CisJeyB7IDB4NjgsIDB4MDQgfSwgMiB9LAorCS8qIFJlc29sdXRpb246MTQ0MHgyNTYwICovCisJ eyB7IDB4NzIsIDB4MDIgfSwgMiB9LAorCS8qIG11eCAqLworCXsgeyAweDdBLCAweDgwIH0sIDIg fSwKKwl7IHsgMHg3QiwgMHg5MSB9LCAyIH0sCisJeyB7IDB4N0MsIDB4RDggfSwgMiB9LAorCXsg eyAweDdELCAweDYwIH0sIDIgfSwKKwl7IHsgMHg3RiwgMHgxNSB9LCAyIH0sCisJeyB7IDB4NzUs IDB4MTUgfSwgMiB9LAorCS8qIEFCT0ZGICovCisJeyB7IDB4QjMsIDB4QzAgfSwgMiB9LAorCXsg eyAweEI0LCAweDAwIH0sIDIgfSwKKwl7IHsgMHhCNSwgMHgwMCB9LCAyIH0sCisJLyogU291cmNl IEVRICovCisJeyB7IDB4NzgsIDB4MDAgfSwgMiB9LAorCXsgeyAweDc5LCAweDAwIH0sIDIgfSwK Kwl7IHsgMHg4MCwgMHgwMCB9LCAyIH0sCisJeyB7IDB4ODMsIDB4MDAgfSwgMiB9LAorCS8qIEZQ IEJQICovCisJeyB7IDB4OTMsIDB4MEEgfSwgMiB9LAorCXsgeyAweDk0LCAweDBBIH0sIDIgfSwK KwkvKiBJbnZlcnNpb24gVHlwZSAqLworCXsgeyAweDhBLCAweDAwIH0sIDIgfSwKKwl7IHsgMHg5 QiwgMHhGRiB9LCAyIH0sCisJLyogSU1HU1dBUCA9MSBAUG9ydFN3YXA9MSAqLworCXsgeyAweDlE LCAweEIwIH0sIDIgfSwKKwl7IHsgMHg5RiwgMHg2MyB9LCAyIH0sCisJeyB7IDB4OTgsIDB4MTAg fSwgMiB9LAorCS8qIEZSTSAqLworCXsgeyAweEVDLCAweDAwIH0sIDIgfSwKKwkvKiBDTUQxICov CisJeyB7IDB4RkYsIDB4MTAgfSwgMiB9LAorCS8qIFZCUCtWU0E9LFZGUCA9IDEwSCAqLworCXsg eyAweDNCLCAweDAzLCAweDBBLCAweDBBIH0sIDQgfSwKKwkvKiBGVEUgb24gKi8KKwl7IHsgMHgz NSwgMHgwMCB9LCAyIH0sCisJLyogRU5fQksgPTEoYXV0byBibGFjaykgKi8KKwl7IHsgMHhFNSwg MHgwMSB9LCAyIH0sCisJLyogQ01EIG1vZGUoMTApIFZETyBtb2RlKDAzKSAqLworCXsgeyAweEJC LCAweDAzIH0sIDIgfSwKKwkvKiBOb24gUmVsb2FkIE1UUCAqLworCXsgeyAweEZCLCAweDAxIH0s IDIgfSwKK307CisKK3N0YXRpYyBpbnQgdHJ1bHlfZGNzX3dyaXRlKHN0cnVjdCBkcm1fcGFuZWwg KnBhbmVsLCB1MzIgY29tbWFuZCkKK3sKKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4ID0gcGFu ZWxfdG9fY3R4KHBhbmVsKTsKKwlpbnQgaSwgcmV0OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoY3R4LT5kc2kpOyBpKyspIHsKKwkJcmV0ID0gbWlwaV9kc2lfZGNzX3dyaXRlKGN0eC0+ ZHNpW2ldLCBjb21tYW5kLCBOVUxMLCAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCURSTV9ERVZf RVJST1IoY3R4LT5kZXYsCisJCQkJImNtZCAweCV4IGZhaWxlZCBmb3IgZHNpID0gJWRcbiIsCisJ CQkJY29tbWFuZCwgaSk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 IHRydWx5X2Rjc193cml0ZV9idWYoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwsCisJdTMyIHNpemUs IGNvbnN0IHU4ICpidWYpCit7CisJc3RydWN0IHRydWx5X250MzU1OTcgKmN0eCA9IHBhbmVsX3Rv X2N0eChwYW5lbCk7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShjdHgtPmRzaSk7IGkrKykgeworCQlyZXQgPSBtaXBpX2RzaV9kY3Nfd3JpdGVf YnVmZmVyKGN0eC0+ZHNpW2ldLCBidWYsIHNpemUpOworCQlpZiAocmV0IDwgMCkgeworCQkJRFJN X0RFVl9FUlJPUihjdHgtPmRldiwKKwkJCQkiZmFpbGVkIHRvIHR4IGNtZCBbJWRdLCBlcnI6ICVk XG4iLCBpLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBpbnQgdHJ1bHlfMzU1OTdfcG93ZXJfb24oc3RydWN0IHRydWx5X250MzU1OTcg KmN0eCkKK3sKKwlpbnQgcmV0LCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4 LT5zdXBwbGllcyk7IGkrKykgeworCQlyZXQgPSByZWd1bGF0b3Jfc2V0X2xvYWQoY3R4LT5zdXBw bGllc1tpXS5jb25zdW1lciwKKwkJCQkJcmVndWxhdG9yX2VuYWJsZV9sb2Fkc1tpXSk7CisJCWlm IChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJs ZShBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpLCBjdHgtPnN1cHBsaWVzKTsKKwlpZiAocmV0IDwg MCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogUmVzZXQgc2VxdWVuY2Ugb2YgdHJ1bHkgcGFu ZWwgcmVxdWlyZXMgdGhlIHBhbmVsIHRvIGJlCisJICogb3V0IG9mIHJlc2V0IGZvciAxMG1zLCBm b2xsb3dlZCBieSBiZWluZyBoZWxkIGluIHJlc2V0CisJICogZm9yIDEwbXMgYW5kIHRoZW4gb3V0 IGFnYWluCisJICovCisJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMCk7CisJdXNs ZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CisJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3Bp bywgMSk7CisJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CisJZ3Bpb2Rfc2V0X3ZhbHVlKGN0 eC0+cmVzZXRfZ3BpbywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cnVseV9u dDM1NTk3X3Bvd2VyX29mZihzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4KQoreworCWludCByZXQg PSAwOworCWludCBpOworCisJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMSk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKTsgaSsrKSB7CisJCXJl dCA9IHJlZ3VsYXRvcl9zZXRfbG9hZChjdHgtPnN1cHBsaWVzW2ldLmNvbnN1bWVyLAorCQkJCXJl Z3VsYXRvcl9kaXNhYmxlX2xvYWRzW2ldKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0RFVl9FUlJP UihjdHgtPmRldiwKKwkJCQkicmVndWxhdG9yX3NldF9sb2FkIGZhaWxlZCAlZFxuIiwgcmV0KTsK KwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19kaXNhYmxl KEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyksIGN0eC0+c3VwcGxpZXMpOworCWlmIChyZXQpIHsK KwkJRFJNX0RFVl9FUlJPUihjdHgtPmRldiwKKwkJCSJyZWd1bGF0b3JfYnVsa19kaXNhYmxlIGZh aWxlZCAlZFxuIiwgcmV0KTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0cnVs eV9udDM1NTk3X2Rpc2FibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IHRy dWx5X250MzU1OTcgKmN0eCA9IHBhbmVsX3RvX2N0eChwYW5lbCk7CisJaW50IHJldDsKKworCWlm ICghY3R4LT5lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCWlmIChjdHgtPmJhY2tsaWdodCkgewor CQlyZXQgPSBiYWNrbGlnaHRfZGlzYWJsZShjdHgtPmJhY2tsaWdodCk7CisJCWlmIChyZXQgPCAw KQorCQkJRFJNX0RFVl9FUlJPUihjdHgtPmRldiwgImJhY2tsaWdodCBkaXNhYmxlIGZhaWxlZCAl ZFxuIiwKKwkJCQlyZXQpOworCX0KKworCWN0eC0+ZW5hYmxlZCA9IGZhbHNlOworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IHRydWx5X250MzU1OTdfdW5wcmVwYXJlKHN0cnVjdCBkcm1fcGFu ZWwgKnBhbmVsKQoreworCXN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHggPSBwYW5lbF90b19jdHgo cGFuZWwpOworCWludCByZXQgPSAwOworCisJaWYgKCFjdHgtPnByZXBhcmVkKQorCQlyZXR1cm4g MDsKKworCWN0eC0+ZHNpWzBdLT5tb2RlX2ZsYWdzID0gMDsKKwljdHgtPmRzaVsxXS0+bW9kZV9m bGFncyA9IDA7CisKKwlyZXQgPSB0cnVseV9kY3Nfd3JpdGUocGFuZWwsIE1JUElfRENTX1NFVF9E SVNQTEFZX09GRik7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihjdHgtPmRldiwK KwkJCSJzZXRfZGlzcGxheV9vZmYgY21kIGZhaWxlZCByZXQgPSAlZFxuIiwKKwkJCXJldCk7CisJ fQorCisJLyogMTIwbXMgZGVsYXkgcmVxdWlyZWQgaGVyZSBhcyBwZXIgRENTIHNwZWMgKi8KKwlt c2xlZXAoMTIwKTsKKworCXJldCA9IHRydWx5X2Rjc193cml0ZShwYW5lbCwgTUlQSV9EQ1NfRU5U RVJfU0xFRVBfTU9ERSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihjdHgtPmRl diwKKwkJCSJlbnRlcl9zbGVlcCBjbWQgZmFpbGVkIHJldCA9ICVkXG4iLCByZXQpOworCX0KKwor CXJldCA9IHRydWx5X250MzU1OTdfcG93ZXJfb2ZmKGN0eCk7CisJaWYgKHJldCA8IDApCisJCURS TV9ERVZfRVJST1IoY3R4LT5kZXYsICJwb3dlcl9vZmYgZmFpbGVkIHJldCA9ICVkXG4iLCByZXQp OworCisJY3R4LT5wcmVwYXJlZCA9IGZhbHNlOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBp bnQgdHJ1bHlfbnQzNTU5N19wcmVwYXJlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0 cnVjdCB0cnVseV9udDM1NTk3ICpjdHggPSBwYW5lbF90b19jdHgocGFuZWwpOworCWludCByZXQ7 CisJaW50IGk7CisJY29uc3Qgc3RydWN0IGNtZF9zZXQgKnBhbmVsX29uX2NtZHM7CisJY29uc3Qg c3RydWN0IG50MzU1OTdfY29uZmlnICpjb25maWc7CisJdTMyIG51bV9jbWRzOworCisJaWYgKGN0 eC0+cHJlcGFyZWQpCisJCXJldHVybiAwOworCisJcmV0ID0gdHJ1bHlfMzU1OTdfcG93ZXJfb24o Y3R4KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWN0eC0+ZHNpWzBdLT5tb2Rl X2ZsYWdzIHw9IE1JUElfRFNJX01PREVfTFBNOworCWN0eC0+ZHNpWzFdLT5tb2RlX2ZsYWdzIHw9 IE1JUElfRFNJX01PREVfTFBNOworCisJY29uZmlnID0gY3R4LT5jb25maWc7CisJcGFuZWxfb25f Y21kcyA9IGNvbmZpZy0+cGFuZWxfb25fY21kczsKKwludW1fY21kcyA9IGNvbmZpZy0+bnVtX29u X2NtZHM7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NtZHM7IGkrKykgeworCQlyZXQgPSB0cnVs eV9kY3Nfd3JpdGVfYnVmKHBhbmVsLAorCQkJCXBhbmVsX29uX2NtZHNbaV0uc2l6ZSwKKwkJCQkJ cGFuZWxfb25fY21kc1tpXS5jb21tYW5kcyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlEUk1fREVW X0VSUk9SKGN0eC0+ZGV2LAorCQkJCSJjbWQgc2V0IHR4IGZhaWxlZCBpID0gJWQgcmV0ID0gJWRc biIsCisJCQkJCWksIHJldCk7CisJCQlnb3RvIHBvd2VyX29mZjsKKwkJfQorCX0KKworCXJldCA9 IHRydWx5X2Rjc193cml0ZShwYW5lbCwgTUlQSV9EQ1NfRVhJVF9TTEVFUF9NT0RFKTsKKwlpZiAo cmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LAorCQkJImV4aXRfc2xlZXBfbW9k ZSBjbWQgZmFpbGVkIHJldCA9ICVkXG4iLAorCQkJcmV0KTsKKwkJZ290byBwb3dlcl9vZmY7CisJ fQorCisJLyogUGVyIERTSSBzcGVjIHdhaXQgMTIwbXMgYWZ0ZXIgc2VuZGluZyBleGl0IHNsZWVw IERDUyBjb21tYW5kICovCisJbXNsZWVwKDEyMCk7CisKKwlyZXQgPSB0cnVseV9kY3Nfd3JpdGUo cGFuZWwsIE1JUElfRENTX1NFVF9ESVNQTEFZX09OKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1f REVWX0VSUk9SKGN0eC0+ZGV2LAorCQkJInNldF9kaXNwbGF5X29uIGNtZCBmYWlsZWQgcmV0ID0g JWRcbiIsIHJldCk7CisJCWdvdG8gcG93ZXJfb2ZmOworCX0KKworCS8qIFBlciBEU0kgc3BlYyB3 YWl0IDEyMG1zIGFmdGVyIHNlbmRpbmcgc2V0X2Rpc3BsYXlfb24gRENTIGNvbW1hbmQgKi8KKwlt c2xlZXAoMTIwKTsKKworCWN0eC0+cHJlcGFyZWQgPSB0cnVlOworCisJcmV0dXJuIDA7CisKK3Bv d2VyX29mZjoKKwlpZiAodHJ1bHlfbnQzNTU5N19wb3dlcl9vZmYoY3R4KSkKKwkJRFJNX0RFVl9F UlJPUihjdHgtPmRldiwgInBvd2VyX29mZiBmYWlsZWRcbiIpOworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpbnQgdHJ1bHlfbnQzNTU5N19lbmFibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwp Cit7CisJc3RydWN0IHRydWx5X250MzU1OTcgKmN0eCA9IHBhbmVsX3RvX2N0eChwYW5lbCk7CisJ aW50IHJldDsKKworCWlmIChjdHgtPmVuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKGN0eC0+ YmFja2xpZ2h0KSB7CisJCXJldCA9IGJhY2tsaWdodF9lbmFibGUoY3R4LT5iYWNrbGlnaHQpOwor CQlpZiAocmV0IDwgMCkKKwkJCURSTV9ERVZfRVJST1IoY3R4LT5kZXYsICJiYWNrbGlnaHQgZW5h YmxlIGZhaWxlZCAlZFxuIiwKKwkJCQkJCSAgcmV0KTsKKwl9CisKKwljdHgtPmVuYWJsZWQgPSB0 cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bHlfbnQzNTU5N19nZXRfbW9k ZXMoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciA9IHBhbmVsLT5jb25uZWN0b3I7CisJc3RydWN0IHRydWx5X250MzU1OTcgKmN0eCA9 IHBhbmVsX3RvX2N0eChwYW5lbCk7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisJ Y29uc3Qgc3RydWN0IG50MzU1OTdfY29uZmlnICpjb25maWc7CisKKwljb25maWcgPSBjdHgtPmNv bmZpZzsKKwltb2RlID0gZHJtX21vZGVfY3JlYXRlKGNvbm5lY3Rvci0+ZGV2KTsKKwlpZiAoIW1v ZGUpIHsKKwkJRFJNX0RFVl9FUlJPUihjdHgtPmRldiwKKwkJCSJmYWlsZWQgdG8gY3JlYXRlIGEg bmV3IGRpc3BsYXkgbW9kZVxuIik7CisJCXJldHVybiAwOworCX0KKworCWNvbm5lY3Rvci0+ZGlz cGxheV9pbmZvLndpZHRoX21tID0gY29uZmlnLT53aWR0aF9tbTsKKwljb25uZWN0b3ItPmRpc3Bs YXlfaW5mby5oZWlnaHRfbW0gPSBjb25maWctPmhlaWdodF9tbTsKKwlkcm1fbW9kZV9jb3B5KG1v ZGUsIGNvbmZpZy0+ZG0pOworCW1vZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX0RSSVZFUiB8IERS TV9NT0RFX1RZUEVfUFJFRkVSUkVEOworCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBt b2RlKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYW5lbF9m dW5jcyB0cnVseV9udDM1NTk3X2RybV9mdW5jcyA9IHsKKwkuZGlzYWJsZSA9IHRydWx5X250MzU1 OTdfZGlzYWJsZSwKKwkudW5wcmVwYXJlID0gdHJ1bHlfbnQzNTU5N191bnByZXBhcmUsCisJLnBy ZXBhcmUgPSB0cnVseV9udDM1NTk3X3ByZXBhcmUsCisJLmVuYWJsZSA9IHRydWx5X250MzU1OTdf ZW5hYmxlLAorCS5nZXRfbW9kZXMgPSB0cnVseV9udDM1NTk3X2dldF9tb2RlcywKK307CisKK3N0 YXRpYyBpbnQgdHJ1bHlfbnQzNTU5N19wYW5lbF9hZGQoc3RydWN0IHRydWx5X250MzU1OTcgKmN0 eCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjdHgtPmRldjsKKwlpbnQgcmV0LCBpOworCWNv bnN0IHN0cnVjdCBudDM1NTk3X2NvbmZpZyAqY29uZmlnOworCisJY29uZmlnID0gY3R4LT5jb25m aWc7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyk7IGkrKykKKwkJ Y3R4LT5zdXBwbGllc1tpXS5zdXBwbHkgPSByZWd1bGF0b3JfbmFtZXNbaV07CisKKwlyZXQgPSBk ZXZtX3JlZ3VsYXRvcl9idWxrX2dldChkZXYsIEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyksCisJ CQkJICAgICAgY3R4LT5zdXBwbGllcyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisK KwljdHgtPnJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dldChkZXYsICJyZXNldCIsIEdQSU9EX09V VF9MT1cpOworCWlmIChJU19FUlIoY3R4LT5yZXNldF9ncGlvKSkgeworCQlEUk1fREVWX0VSUk9S KGRldiwgImNhbm5vdCBnZXQgcmVzZXQgZ3BpbyAlbGRcbiIsCisJCQlQVFJfRVJSKGN0eC0+cmVz ZXRfZ3BpbykpOworCQlyZXR1cm4gUFRSX0VSUihjdHgtPnJlc2V0X2dwaW8pOworCX0KKworCWN0 eC0+bW9kZV9ncGlvID0gZGV2bV9ncGlvZF9nZXQoZGV2LCAibW9kZSIsIEdQSU9EX09VVF9MT1cp OworCWlmIChJU19FUlIoY3R4LT5tb2RlX2dwaW8pKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAi Y2Fubm90IGdldCBtb2RlIGdwaW8gJWxkXG4iLAorCQkJUFRSX0VSUihjdHgtPm1vZGVfZ3Bpbykp OworCQlyZXR1cm4gUFRSX0VSUihjdHgtPm1vZGVfZ3Bpbyk7CisJfQorCisJLyogZHVhbCBwb3J0 ICovCisJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+bW9kZV9ncGlvLCAwKTsKKworCWRybV9wYW5lbF9p bml0KCZjdHgtPnBhbmVsKTsKKwljdHgtPnBhbmVsLmRldiA9IGRldjsKKwljdHgtPnBhbmVsLmZ1 bmNzID0gJnRydWx5X250MzU1OTdfZHJtX2Z1bmNzOworCWRybV9wYW5lbF9hZGQoJmN0eC0+cGFu ZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSBxY29tX3NkbTg0NV9tdHBfMmtfbW9kZSA9IHsKKwkubmFtZSA9ICIxNDQweDI1NjAiLAor CS5jbG9jayA9IDI2ODMxNiwKKwkuaGRpc3BsYXkgPSAxNDQwLAorCS5oc3luY19zdGFydCA9IDE0 NDAgKyAyMDAsCisJLmhzeW5jX2VuZCA9IDE0NDAgKyAyMDAgKyAzMiwKKwkuaHRvdGFsID0gMTQ0 MCArIDIwMCArIDMyICsgNjQsCisJLnZkaXNwbGF5ID0gMjU2MCwKKwkudnN5bmNfc3RhcnQgPSAy NTYwICsgOCwKKwkudnN5bmNfZW5kID0gMjU2MCArIDggKyAxLAorCS52dG90YWwgPSAyNTYwICsg OCArIDEgKyA3LAorCS52cmVmcmVzaCA9IDYwLAorCS5mbGFncyA9IDAsCit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IG50MzU1OTdfY29uZmlnIG50MzU1OTdfZGlyID0geworCS53aWR0aF9tbSA9 IDc0LAorCS5oZWlnaHRfbW0gPSAxMzEsCisJLnBhbmVsX25hbWUgPSAicWNvbV9zZG04NDVfbXRw XzJrX3BhbmVsIiwKKwkuZG0gPSAmcWNvbV9zZG04NDVfbXRwXzJrX21vZGUsCisJLnBhbmVsX29u X2NtZHMgPSBxY29tXzJrX3BhbmVsX21hZ2ljX2NtZHMsCisJLm51bV9vbl9jbWRzID0gQVJSQVlf U0laRShxY29tXzJrX3BhbmVsX21hZ2ljX2NtZHMpLAorfTsKKworc3RhdGljIGludCB0cnVseV9u dDM1NTk3X3Byb2JlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmZHNpLT5kZXY7CisJc3RydWN0IHRydWx5X250MzU1OTcgKmN0eDsKKwlzdHJ1 Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kxX2RldmljZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRz aTE7CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmRzaTFfaG9zdDsKKwlzdHJ1Y3QgbWlwaV9kc2lf ZGV2aWNlICpkc2lfZGV2OworCWludCByZXQgPSAwOworCWludCBpOworCisJY29uc3Qgc3RydWN0 IG1pcGlfZHNpX2RldmljZV9pbmZvIGluZm8gPSB7CisJCS50eXBlID0gInRydWx5bnQzNTU5NyIs CisJCS5jaGFubmVsID0gMCwKKwkJLm5vZGUgPSBOVUxMLAorCX07CisKKwljdHggPSBkZXZtX2t6 YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOworCisJaWYgKCFjdHgpCisJCXJl dHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBUaGlzIGRldmljZSByZXByZXNlbnRzIGl0c2VsZiBh cyBvbmUgd2l0aCB0d28gaW5wdXQgcG9ydHMgd2hpY2ggYXJlCisJICogZmVkIGJ5IHRoZSBvdXRw dXQgcG9ydHMgb2YgdGhlIHR3byBEU0kgY29udHJvbGxlcnMgLiBUaGUgRFNJMCBpcworCSAqIHRo ZSBtYXN0ZXIgY29udHJvbGxlciBhbmQgaGFzIG1vc3Qgb2YgdGhlIHBhbmVsIHJlbGF0ZWQgaW5m byBpbiBpdHMKKwkgKiBjaGlsZCBub2RlLgorCSAqLworCisJY3R4LT5jb25maWcgPSBvZl9kZXZp Y2VfZ2V0X21hdGNoX2RhdGEoZGV2KTsKKworCWlmICghY3R4LT5jb25maWcpIHsKKwkJZGV2X2Vy cihkZXYsICJtaXNzaW5nIGRldmljZSBjb25maWd1cmF0aW9uXG4iKTsKKwkJcmV0dXJuIC1FTk9E RVY7CisJfQorCisJZHNpMSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfbm9kZShkc2ktPmRldi5vZl9u b2RlLCAxLCAtMSk7CisJaWYgKCFkc2kxKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LAorCQkJImZh aWxlZCB0byBnZXQgcmVtb3RlIG5vZGUgZm9yIGRzaTFfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1F Tk9ERVY7CisJfQorCisJZHNpMV9ob3N0ID0gb2ZfZmluZF9taXBpX2RzaV9ob3N0X2J5X25vZGUo ZHNpMSk7CisJb2Zfbm9kZV9wdXQoZHNpMSk7CisJaWYgKCFkc2kxX2hvc3QpIHsKKwkJRFJNX0RF Vl9FUlJPUihkZXYsICJmYWlsZWQgdG8gZmluZCBkc2kgaG9zdFxuIik7CisJCXJldHVybiAtRVBS T0JFX0RFRkVSOworCX0KKworCS8qIHJlZ2lzdGVyIHRoZSBzZWNvbmQgRFNJIGRldmljZSAqLwor CWRzaTFfZGV2aWNlID0gbWlwaV9kc2lfZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoZHNpMV9ob3N0LCAm aW5mbyk7CisJaWYgKElTX0VSUihkc2kxX2RldmljZSkpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYs ICJmYWlsZWQgdG8gY3JlYXRlIGRzaSBkZXZpY2VcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkc2kx X2RldmljZSk7CisJfQorCisJbWlwaV9kc2lfc2V0X2RydmRhdGEoZHNpLCBjdHgpOworCisJY3R4 LT5kZXYgPSBkZXY7CisJY3R4LT5kc2lbMF0gPSBkc2k7CisJY3R4LT5kc2lbMV0gPSBkc2kxX2Rl dmljZTsKKworCXJldCA9IHRydWx5X250MzU1OTdfcGFuZWxfYWRkKGN0eCk7CisJaWYgKHJldCkg eworCQlEUk1fREVWX0VSUk9SKGRldiwgImZhaWxlZCB0byBhZGQgcGFuZWxcbiIpOworCQlnb3Rv IGVycl9wYW5lbF9hZGQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4LT5k c2kpOyBpKyspIHsKKwkJZHNpX2RldiA9IGN0eC0+ZHNpW2ldOworCQlkc2lfZGV2LT5sYW5lcyA9 IDQ7CisJCWRzaV9kZXYtPmZvcm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7CisJCWRzaV9kZXYt Pm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9NT0RFX1ZJREVPIHwgTUlQSV9EU0lfTU9ERV9MUE0gfAor CQkJTUlQSV9EU0lfQ0xPQ0tfTk9OX0NPTlRJTlVPVVM7CisJCXJldCA9IG1pcGlfZHNpX2F0dGFj aChkc2lfZGV2KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCURSTV9ERVZfRVJST1IoZGV2LAorCQkJ CSJkc2kgYXR0YWNoIGZhaWxlZCBpID0gJWRcbiIsIGkpOworCQkJZ290byBlcnJfZHNpX2F0dGFj aDsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnJfZHNpX2F0dGFjaDoKKwlkcm1fcGFuZWxf cmVtb3ZlKCZjdHgtPnBhbmVsKTsKK2Vycl9wYW5lbF9hZGQ6CisJbWlwaV9kc2lfZGV2aWNlX3Vu cmVnaXN0ZXIoZHNpMV9kZXZpY2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHJ1 bHlfbnQzNTU5N19yZW1vdmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVj dCB0cnVseV9udDM1NTk3ICpjdHggPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShkc2kpOworCisJaWYg KGN0eC0+ZHNpWzBdKQorCQltaXBpX2RzaV9kZXRhY2goY3R4LT5kc2lbMF0pOworCWlmIChjdHgt PmRzaVsxXSkgeworCQltaXBpX2RzaV9kZXRhY2goY3R4LT5kc2lbMV0pOworCQltaXBpX2RzaV9k ZXZpY2VfdW5yZWdpc3RlcihjdHgtPmRzaVsxXSk7CisJfQorCisJZHJtX3BhbmVsX3JlbW92ZSgm Y3R4LT5wYW5lbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIHRydWx5X250MzU1OTdfb2ZfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0g InRydWx5LG50MzU1OTctMkstZGlzcGxheSIsCisJCS5kYXRhID0gJm50MzU1OTdfZGlyLAorCX0s CisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdHJ1bHlfbnQzNTU5N19vZl9tYXRj aCk7CisKK3N0YXRpYyBzdHJ1Y3QgbWlwaV9kc2lfZHJpdmVyIHRydWx5X250MzU1OTdfZHJpdmVy ID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInBhbmVsLXRydWx5LW50MzU1OTciLAorCQku b2ZfbWF0Y2hfdGFibGUgPSB0cnVseV9udDM1NTk3X29mX21hdGNoLAorCX0sCisJLnByb2JlID0g dHJ1bHlfbnQzNTU5N19wcm9iZSwKKwkucmVtb3ZlID0gdHJ1bHlfbnQzNTU5N19yZW1vdmUsCit9 OworbW9kdWxlX21pcGlfZHNpX2RyaXZlcih0cnVseV9udDM1NTk3X2RyaXZlcik7CisKK01PRFVM RV9ERVNDUklQVElPTigiVHJ1bHkgTlQzNTU5NyBEU0kgUGFuZWwgRHJpdmVyIik7CitNT0RVTEVf TElDRU5TRSgiR1BMIHYyIik7Ci0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIElu Yy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRp b24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK