From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhinav Kumar Subject: [PATCH v7 1/2] drm/panel: Add support for Truly NT35597 panel driver Date: Wed, 19 Sep 2018 19:55:39 -0700 Message-ID: <1537412140-5252-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, linux-arm-msm@vger.kernel.org, "abhinavk@codeaurora.org" , bjorn.andersson@linaro.org, seanpaul@chromium.org, hoegsberg@google.com, chandanu@codeaurora.org List-Id: linux-arm-msm@vger.kernel.org RnJvbTogImFiaGluYXZrQGNvZGVhdXJvcmEub3JnIiA8YWJoaW5hdmtAY29kZWF1cm9yYS5vcmc+ CgpBZGQgc3VwcG9ydCBmb3IgVHJ1bHkgTlQzNTU5NyBwYW5lbCBkcml2ZXIgdXNlZAppbiBNU00g cmVmZXJlbmNlIHBsYXRmb3Jtcy4KClRoaXMgcGFuZWwgZHJpdmVyIHN1cHBvcnRzIGJvdGggc2lu Z2xlIERTSSBhbmQgZHVhbCBEU0kKbW9kZXMuCgpIb3dldmVyLCB0aGlzIHBhdGNoIHNlcmllcyBh ZGRzIHN1cHBvcnQgb25seSBmb3IKZHVhbCBEU0kgbW9kZS4KCkNoYW5nZXMgaW4gdjc6Ci0gTWFr ZSB0aGUgcGFuZWwgY29tbWFuZHMsIG5hbWUgYW5kIG1vZGUgYXMgY29uc3QKLSBDb25maWd1cmUg dGhlIHJlc2V0IHBpbiBhcyBhY3RpdmUgbG93IGluIHRoZSBkZXZpY2UKICB0cmVlIGFuZCBhZGp1 c3QgdGhlIHJlc2V0IHNlcXVlbmNlCi0gUmVtb3ZlIHRoZSBtYWNyb3MgdG8gY2FsbCB0aGUgZnVu Y3Rpb25zCi0gRml4IHJldHVybiBjb25kaXRpb25zIGluIHRoZSBwYW5lbCBwcmVwYXJlIGNhbGwK LSBDaGFuZ2UgdGhlIGNvbXBhdGlibGUgc3RyaW5nIHRvIGhhdmUgb25seSB0aGUKICBwYW5lbCBk cml2ZXIgYW5kIHRoZSByZXNvbHV0aW9uIGRldGFpbHMKClNpZ25lZC1vZmYtYnk6IEFyY2hpdCBU YW5lamEgPGFyY2hpdHRAY29kZWF1cm9yYS5vcmc+ClNpZ25lZC1vZmYtYnk6IEFiaGluYXYgS3Vt YXIgPGFiaGluYXZrQGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9L Y29uZmlnICAgICAgICAgICAgICAgfCAgIDggKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2Vm aWxlICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1 bHktbnQzNTU5Ny5jIHwgNzA2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMg Y2hhbmdlZCwgNzE1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vcGFuZWwvcGFuZWwtdHJ1bHktbnQzNTU5Ny5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3BhbmVsL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwppbmRl eCA2MDIwYzMwLi43YWU3NGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2Nv bmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwpAQCAtMTg2LDQgKzE4Niwx MiBAQCBjb25maWcgRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYKIAkgIFNheSBZIGhlcmUgaWYg eW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBTaXRyb25peAogCSAgU1Q3Nzg5ViBj b250cm9sbGVyIGZvciAyNDB4MzIwIExDRCBwYW5lbHMKIAorY29uZmlnIERSTV9QQU5FTF9UUlVM WV9OVDM1NTk3X1dRWEdBCisJdHJpc3RhdGUgIlRydWx5IFdRWEdBIgorCWRlcGVuZHMgb24gT0YK KwlkZXBlbmRzIG9uIERSTV9NSVBJX0RTSQorCXNlbGVjdCBWSURFT01PREVfSEVMUEVSUworCWhl bHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFRydWx5 IE5UMzU1OTcgV1FYR0EgRHVhbCBEU0kKKwkgIFZpZGVvIE1vZGUgcGFuZWwKIGVuZG1lbnUKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9NYWtlZmlsZQppbmRleCA1Y2NhYWE5Li44MGZkMTlmIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01h a2VmaWxlCkBAIC0xOSwzICsxOSw0IEBAIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0VJS09fNDNX VkYxRykgKz0gcGFuZWwtc2Vpa28tNDN3dmYxZy5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NI QVJQX0xRMTAxUjFTWDAxKSArPSBwYW5lbC1zaGFycC1scTEwMXIxc3gwMS5vCiBvYmotJChDT05G SUdfRFJNX1BBTkVMX1NIQVJQX0xTMDQzVDFMRTAxKSArPSBwYW5lbC1zaGFycC1sczA0M3QxbGUw MS5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYpICs9IHBhbmVsLXNp dHJvbml4LXN0Nzc4OXYubworb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9UUlVMWV9OVDM1NTk3X1dR WEdBKSArPSBwYW5lbC10cnVseS1udDM1NTk3Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9wYW5lbC10cnVseS1udDM1NTk3LmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFu ZWwtdHJ1bHktbnQzNTU5Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEw NzBkMGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1 bHktbnQzNTU5Ny5jCkBAIC0wLDAgKzEsNzA2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29u c3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jl Z3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvY29uc3VtZXIuaD4K KyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKworI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlz cGxheS5oPgorI2luY2x1ZGUgPHZpZGVvL29mX3ZpZGVvbW9kZS5oPgorI2luY2x1ZGUgPHZpZGVv L3ZpZGVvbW9kZS5oPgorCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X3BhbmVsLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorCitzdGF0aWMgY29uc3Qg Y2hhciAqIGNvbnN0IHJlZ3VsYXRvcl9uYW1lc1tdID0geworCSJ2ZGRhIiwKKwkidmRpc3BwIiwK KwkidmRpc3BuIiwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvbnN0IHJlZ3VsYXRvcl9l bmFibGVfbG9hZHNbXSA9IHsKKwk2MjAwMCwKKwkxMDAwMDAsCisJMTAwMDAwLAorfTsKKworc3Rh dGljIHVuc2lnbmVkIGxvbmcgY29uc3QgcmVndWxhdG9yX2Rpc2FibGVfbG9hZHNbXSA9IHsKKwk4 MCwKKwkxMDAsCisJMTAwLAorfTsKKworc3RydWN0IG50MzU1OTdfY29uZmlnIHsKKwl1MzIgd2lk dGhfbW07CisJdTMyIGhlaWdodF9tbTsKKwljb25zdCBjaGFyICpwYW5lbF9uYW1lOworCWNvbnN0 IHZvaWQgKnBhbmVsX29uX2NtZHM7CisJdTMyIG51bV9vbl9jbWRzOworCWNvbnN0IHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICpkbTsKK307CisKK3N0cnVjdCB0cnVseV9udDM1NTk3IHsKKwlzdHJ1 Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9wYW5lbCBwYW5lbDsKKworCXN0cnVjdCByZWd1 bGF0b3JfYnVsa19kYXRhIHN1cHBsaWVzW0FSUkFZX1NJWkUocmVndWxhdG9yX25hbWVzKV07CisK KwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvOworCXN0cnVjdCBncGlvX2Rlc2MgKm1vZGVf Z3BpbzsKKworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQ7CisKKwlzdHJ1Y3Qg bWlwaV9kc2lfZGV2aWNlICpkc2lbMl07CisKKwljb25zdCBzdHJ1Y3QgbnQzNTU5N19jb25maWcg KmNvbmZpZzsKKwlib29sIHByZXBhcmVkOworCWJvb2wgZW5hYmxlZDsKK307CisKK3N0YXRpYyBp bmxpbmUgc3RydWN0IHRydWx5X250MzU1OTcgKnBhbmVsX3RvX2N0eChzdHJ1Y3QgZHJtX3BhbmVs ICpwYW5lbCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHBhbmVsLCBzdHJ1Y3QgdHJ1bHlfbnQz NTU5NywgcGFuZWwpOworfQorCisjZGVmaW5lIE1BWF9MRU4JNQorI2RlZmluZSBTSE9SVF9QQUNL RVQgMgorI2RlZmluZSBMT05HX1BBQ0tFVCA0CisKK3N0cnVjdCBjbWRfc2V0IHsKKwl1OCBjb21t YW5kc1tNQVhfTEVOXTsKKwl1OCBzaXplOworfTsKKworc3RhdGljIHN0cnVjdCBjbWRfc2V0IHFj b21fMmtfcGFuZWxfbWFnaWNfY21kc1tdID0geworCS8qIENNRDJfUDAgKi8KKwl7IHsgMHhmZiwg MHgyMCB9LCAyIH0sCisJeyB7IDB4ZmIsIDB4MDEgfSwgMiB9LAorCXsgeyAweDAwLCAweDAxIH0s IDIgfSwKKwl7IHsgMHgwMSwgMHg1NSB9LCAyIH0sCisJeyB7IDB4MDIsIDB4NDUgfSwgMiB9LAor CXsgeyAweDA1LCAweDQwIH0sIDIgfSwKKwl7IHsgMHgwNiwgMHgxOSB9LCAyIH0sCisJeyB7IDB4 MDcsIDB4MWUgfSwgMiB9LAorCXsgeyAweDBiLCAweDczIH0sIDIgfSwKKwl7IHsgMHgwYywgMHg3 MyB9LCAyIH0sCisJeyB7IDB4MGUsIDB4YjAgfSwgMiB9LAorCXsgeyAweDBmLCAweGFlIH0sIDIg fSwKKwl7IHsgMHgxMSwgMHhiOCB9LCAyIH0sCisJeyB7IDB4MTMsIDB4MDAgfSwgMiB9LAorCXsg eyAweDU4LCAweDgwIH0sIDIgfSwKKwl7IHsgMHg1OSwgMHgwMSB9LCAyIH0sCisJeyB7IDB4NWEs IDB4MDAgfSwgMiB9LAorCXsgeyAweDViLCAweDAxIH0sIDIgfSwKKwl7IHsgMHg1YywgMHg4MCB9 LCAyIH0sCisJeyB7IDB4NWQsIDB4ODEgfSwgMiB9LAorCXsgeyAweDVlLCAweDAwIH0sIDIgfSwK Kwl7IHsgMHg1ZiwgMHgwMSB9LCAyIH0sCisJeyB7IDB4NzIsIDB4MTEgfSwgMiB9LAorCXsgeyAw eDY4LCAweDAzIH0sIDIgfSwKKwkvKiBDTUQyX1A0ICovCisJeyB7IDB4RkYsIDB4MjQgfSwgMiB9 LAorCXsgeyAweEZCLCAweDAxIH0sIDIgfSwKKwl7IHsgMHgwMCwgMHgxQyB9LCAyIH0sCisJeyB7 IDB4MDEsIDB4MEIgfSwgMiB9LAorCXsgeyAweDAyLCAweDBDIH0sIDIgfSwKKwl7IHsgMHgwMywg MHgwMSB9LCAyIH0sCisJeyB7IDB4MDQsIDB4MEYgfSwgMiB9LAorCXsgeyAweDA1LCAweDEwIH0s IDIgfSwKKwl7IHsgMHgwNiwgMHgxMCB9LCAyIH0sCisJeyB7IDB4MDcsIDB4MTAgfSwgMiB9LAor CXsgeyAweDA4LCAweDg5IH0sIDIgfSwKKwl7IHsgMHgwOSwgMHg4QSB9LCAyIH0sCisJeyB7IDB4 MEEsIDB4MTMgfSwgMiB9LAorCXsgeyAweDBCLCAweDEzIH0sIDIgfSwKKwl7IHsgMHgwQywgMHgx NSB9LCAyIH0sCisJeyB7IDB4MEQsIDB4MTUgfSwgMiB9LAorCXsgeyAweDBFLCAweDE3IH0sIDIg fSwKKwl7IHsgMHgwRiwgMHgxNyB9LCAyIH0sCisJeyB7IDB4MTAsIDB4MUMgfSwgMiB9LAorCXsg eyAweDExLCAweDBCIH0sIDIgfSwKKwl7IHsgMHgxMiwgMHgwQyB9LCAyIH0sCisJeyB7IDB4MTMs IDB4MDEgfSwgMiB9LAorCXsgeyAweDE0LCAweDBGIH0sIDIgfSwKKwl7IHsgMHgxNSwgMHgxMCB9 LCAyIH0sCisJeyB7IDB4MTYsIDB4MTAgfSwgMiB9LAorCXsgeyAweDE3LCAweDEwIH0sIDIgfSwK Kwl7IHsgMHgxOCwgMHg4OSB9LCAyIH0sCisJeyB7IDB4MTksIDB4OEEgfSwgMiB9LAorCXsgeyAw eDFBLCAweDEzIH0sIDIgfSwKKwl7IHsgMHgxQiwgMHgxMyB9LCAyIH0sCisJeyB7IDB4MUMsIDB4 MTUgfSwgMiB9LAorCXsgeyAweDFELCAweDE1IH0sIDIgfSwKKwl7IHsgMHgxRSwgMHgxNyB9LCAy IH0sCisJeyB7IDB4MUYsIDB4MTcgfSwgMiB9LAorCS8qIFNUViAqLworCXsgeyAweDIwLCAweDQw IH0sIDIgfSwKKwl7IHsgMHgyMSwgMHgwMSB9LCAyIH0sCisJeyB7IDB4MjIsIDB4MDAgfSwgMiB9 LAorCXsgeyAweDIzLCAweDQwIH0sIDIgfSwKKwl7IHsgMHgyNCwgMHg0MCB9LCAyIH0sCisJeyB7 IDB4MjUsIDB4NkQgfSwgMiB9LAorCXsgeyAweDI2LCAweDQwIH0sIDIgfSwKKwl7IHsgMHgyNywg MHg0MCB9LCAyIH0sCisJLyogVmVuZCAqLworCXsgeyAweEUwLCAweDAwIH0sIDIgfSwKKwl7IHsg MHhEQywgMHgyMSB9LCAyIH0sCisJeyB7IDB4REQsIDB4MjIgfSwgMiB9LAorCXsgeyAweERFLCAw eDA3IH0sIDIgfSwKKwl7IHsgMHhERiwgMHgwNyB9LCAyIH0sCisJeyB7IDB4RTMsIDB4NkQgfSwg MiB9LAorCXsgeyAweEUxLCAweDA3IH0sIDIgfSwKKwl7IHsgMHhFMiwgMHgwNyB9LCAyIH0sCisJ LyogVUQgKi8KKwl7IHsgMHgyOSwgMHhEOCB9LCAyIH0sCisJeyB7IDB4MkEsIDB4MkEgfSwgMiB9 LAorCS8qIENMSyAqLworCXsgeyAweDRCLCAweDAzIH0sIDIgfSwKKwl7IHsgMHg0QywgMHgxMSB9 LCAyIH0sCisJeyB7IDB4NEQsIDB4MTAgfSwgMiB9LAorCXsgeyAweDRFLCAweDAxIH0sIDIgfSwK Kwl7IHsgMHg0RiwgMHgwMSB9LCAyIH0sCisJeyB7IDB4NTAsIDB4MTAgfSwgMiB9LAorCXsgeyAw eDUxLCAweDAwIH0sIDIgfSwKKwl7IHsgMHg1MiwgMHg4MCB9LCAyIH0sCisJeyB7IDB4NTMsIDB4 MDAgfSwgMiB9LAorCXsgeyAweDU2LCAweDAwIH0sIDIgfSwKKwl7IHsgMHg1NCwgMHgwNyB9LCAy IH0sCisJeyB7IDB4NTgsIDB4MDcgfSwgMiB9LAorCXsgeyAweDU1LCAweDI1IH0sIDIgfSwKKwkv KiBSZXNldCBYRE9OQiAqLworCXsgeyAweDVCLCAweDQzIH0sIDIgfSwKKwl7IHsgMHg1QywgMHgw MCB9LCAyIH0sCisJeyB7IDB4NUYsIDB4NzMgfSwgMiB9LAorCXsgeyAweDYwLCAweDczIH0sIDIg fSwKKwl7IHsgMHg2MywgMHgyMiB9LCAyIH0sCisJeyB7IDB4NjQsIDB4MDAgfSwgMiB9LAorCXsg eyAweDY3LCAweDA4IH0sIDIgfSwKKwl7IHsgMHg2OCwgMHgwNCB9LCAyIH0sCisJLyogUmVzb2x1 dGlvbjoxNDQweDI1NjAgKi8KKwl7IHsgMHg3MiwgMHgwMiB9LCAyIH0sCisJLyogbXV4ICovCisJ eyB7IDB4N0EsIDB4ODAgfSwgMiB9LAorCXsgeyAweDdCLCAweDkxIH0sIDIgfSwKKwl7IHsgMHg3 QywgMHhEOCB9LCAyIH0sCisJeyB7IDB4N0QsIDB4NjAgfSwgMiB9LAorCXsgeyAweDdGLCAweDE1 IH0sIDIgfSwKKwl7IHsgMHg3NSwgMHgxNSB9LCAyIH0sCisJLyogQUJPRkYgKi8KKwl7IHsgMHhC MywgMHhDMCB9LCAyIH0sCisJeyB7IDB4QjQsIDB4MDAgfSwgMiB9LAorCXsgeyAweEI1LCAweDAw IH0sIDIgfSwKKwkvKiBTb3VyY2UgRVEgKi8KKwl7IHsgMHg3OCwgMHgwMCB9LCAyIH0sCisJeyB7 IDB4NzksIDB4MDAgfSwgMiB9LAorCXsgeyAweDgwLCAweDAwIH0sIDIgfSwKKwl7IHsgMHg4Mywg MHgwMCB9LCAyIH0sCisJLyogRlAgQlAgKi8KKwl7IHsgMHg5MywgMHgwQSB9LCAyIH0sCisJeyB7 IDB4OTQsIDB4MEEgfSwgMiB9LAorCS8qIEludmVyc2lvbiBUeXBlICovCisJeyB7IDB4OEEsIDB4 MDAgfSwgMiB9LAorCXsgeyAweDlCLCAweEZGIH0sIDIgfSwKKwkvKiBJTUdTV0FQID0xIEBQb3J0 U3dhcD0xICovCisJeyB7IDB4OUQsIDB4QjAgfSwgMiB9LAorCXsgeyAweDlGLCAweDYzIH0sIDIg fSwKKwl7IHsgMHg5OCwgMHgxMCB9LCAyIH0sCisJLyogRlJNICovCisJeyB7IDB4RUMsIDB4MDAg fSwgMiB9LAorCS8qIENNRDEgKi8KKwl7IHsgMHhGRiwgMHgxMCB9LCAyIH0sCisJLyogVkJQK1ZT QT0sVkZQID0gMTBIICovCisJeyB7IDB4M0IsIDB4MDMsIDB4MEEsIDB4MEEgfSwgNCB9LAorCS8q IEZURSBvbiAqLworCXsgeyAweDM1LCAweDAwIH0sIDIgfSwKKwkvKiBFTl9CSyA9MShhdXRvIGJs YWNrKSAqLworCXsgeyAweEU1LCAweDAxIH0sIDIgfSwKKwkvKiBDTUQgbW9kZSgxMCkgVkRPIG1v ZGUoMDMpICovCisJeyB7IDB4QkIsIDB4MDMgfSwgMiB9LAorCS8qIE5vbiBSZWxvYWQgTVRQICov CisJeyB7IDB4RkIsIDB4MDEgfSwgMiB9LAorfTsKKworc3RhdGljIGludCB0cnVseV9kY3Nfd3Jp dGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwsIHUzMiBjb21tYW5kKQoreworCXN0cnVjdCB0cnVs eV9udDM1NTk3ICpjdHggPSBwYW5lbF90b19jdHgocGFuZWwpOworCWludCBpLCByZXQ7CisKKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPmRzaSk7IGkrKykgeworCQlyZXQgPSBtaXBp X2RzaV9kY3Nfd3JpdGUoY3R4LT5kc2lbaV0sCisJCQljb21tYW5kLCBOVUxMLCAwKTsKKwkJaWYg KHJldCA8IDApIHsKKwkJCURSTV9ERVZfRVJST1IoY3R4LT5kZXYsCisJCQkJImNtZCAweCV4IGZh aWxlZCBmb3IgZHNpID0gJWRcbiIsIGNvbW1hbmQsCisJCQkJCWkpOworCQl9CisJfQorCisJcmV0 dXJuIHJldDsKK30KKworc3RhdGljIGludCB0cnVseV9kY3Nfd3JpdGVfYnVmKHN0cnVjdCBkcm1f cGFuZWwgKnBhbmVsLAorCXUzMiBzaXplLCB1OCAqYnVmKQoreworCXN0cnVjdCB0cnVseV9udDM1 NTk3ICpjdHggPSBwYW5lbF90b19jdHgocGFuZWwpOworCWludCByZXQgPSAwOworCWludCBpOwor CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4LT5kc2kpOyBpKyspIHsKKwkJcmV0ID0g bWlwaV9kc2lfZGNzX3dyaXRlX2J1ZmZlcihjdHgtPmRzaVtpXSwKKwkJCWJ1ZiwKKwkJCXNpemUp OworCisJCWlmIChyZXQgPCAwKSB7CisJCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LAorCQkJCSJm YWlsZWQgdG8gdHggY21kIFslZF0sIGVycjogJWRcbiIsCisJCQkJaSwgcmV0KTsKKwkJCXJldHVy biByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRydWx5XzM1 NTk3X3Bvd2VyX29uKHN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHgpCit7CisJaW50IHJldCwgaTsK KworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpOyBpKyspIHsKKwkJ cmV0ID0gcmVndWxhdG9yX3NldF9sb2FkKGN0eC0+c3VwcGxpZXNbaV0uY29uc3VtZXIsCisJCQkJ CXJlZ3VsYXRvcl9lbmFibGVfbG9hZHNbaV0pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsK Kwl9CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShjdHgtPnN1cHBs aWVzKSwgY3R4LT5zdXBwbGllcyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkv KiBSZXNldCBzZXF1ZW5jZSBvZiB0cnVseSBwYW5lbCByZXF1aXJlcworCSAqIHRoZSByZXNldCBw aW4gdG8gYmUgcHVsbGVkIGhpZ2ggZm9yIDEwbXMKKwkgKiBmb2xsb3dlZCBieSBhIGxvdyBwZXJp b2Qgb2YgMTBtcyBhbmQgdGhlbgorCSAqIHB1bGxlZCBoaWdoIGFnYWluCisJICovCisKKwlncGlv ZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAwKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIw MDAwKTsKKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAxKTsKKwl1c2xlZXBfcmFu Z2UoMTAwMDAsIDIwMDAwKTsKKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAwKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRydWx5X250MzU1OTdfcG93ZXJfb2ZmKHN0 cnVjdCB0cnVseV9udDM1NTk3ICpjdHgpCit7CisJaW50IHJldCwgaTsKKworCWdwaW9kX3NldF92 YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDEpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo Y3R4LT5zdXBwbGllcyk7IGkrKykgeworCQlyZXQgPSByZWd1bGF0b3Jfc2V0X2xvYWQoY3R4LT5z dXBwbGllc1tpXS5jb25zdW1lciwKKwkJCQlyZWd1bGF0b3JfZGlzYWJsZV9sb2Fkc1tpXSk7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiByZWd1bGF0b3JfYnVsa19k aXNhYmxlKEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyksIGN0eC0+c3VwcGxpZXMpOworfQorCitz dGF0aWMgaW50IHRydWx5X250MzU1OTdfZGlzYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkK K3sKKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4ID0gcGFuZWxfdG9fY3R4KHBhbmVsKTsKKwlp bnQgcmV0OworCisJaWYgKCFjdHgtPmVuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKGN0eC0+ YmFja2xpZ2h0KSB7CisJCXJldCA9IGJhY2tsaWdodF9kaXNhYmxlKGN0eC0+YmFja2xpZ2h0KTsK KwkJaWYgKHJldCA8IDApCisJCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LCAiYmFja2xpZ2h0IGRp c2FibGUgZmFpbGVkICVkXG4iLAorCQkJCXJldCk7CisJfQorCisJY3R4LT5lbmFibGVkID0gZmFs c2U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bHlfbnQzNTU5N191bnByZXBhcmUo c3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IHRydWx5X250MzU1OTcgKmN0eCA9 IHBhbmVsX3RvX2N0eChwYW5lbCk7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWN0eC0+cHJlcGFy ZWQpCisJCXJldHVybiAwOworCisJY3R4LT5kc2lbMF0tPm1vZGVfZmxhZ3MgPSAwOworCWN0eC0+ ZHNpWzFdLT5tb2RlX2ZsYWdzID0gMDsKKworCXJldCA9IHRydWx5X2Rjc193cml0ZShwYW5lbCwg TUlQSV9EQ1NfU0VUX0RJU1BMQVlfT0ZGKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VS Uk9SKGN0eC0+ZGV2LAorCQkJInNldF9kaXNwbGF5X29mZiBjbWQgZmFpbGVkIHJldCA9ICVkXG4i LAorCQkJcmV0KTsKKwl9CisKKwkvKiAxMjBtcyBkZWxheSByZXF1aXJlZCBoZXJlIGFzIHBlciBE Q1Mgc3BlYyAqLworCW1zbGVlcCgxMjApOworCisJcmV0ID0gdHJ1bHlfZGNzX3dyaXRlKHBhbmVs LCBNSVBJX0RDU19FTlRFUl9TTEVFUF9NT0RFKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVW X0VSUk9SKGN0eC0+ZGV2LAorCQkJImVudGVyX3NsZWVwIGNtZCBmYWlsZWQgcmV0ID0gJWRcbiIs CisJCQlyZXQpOworCX0KKworCXJldCA9IHRydWx5X250MzU1OTdfcG93ZXJfb2ZmKGN0eCk7CisJ aWYgKHJldCA8IDApCisJCURSTV9ERVZfRVJST1IoY3R4LT5kZXYsCisJCQkidHJ1bHlfbnQzNTU5 N19wb3dlcl9vZmYgZmFpbGVkIHJldCA9ICVkXG4iLAorCQkJcmV0KTsKKworCWN0eC0+cHJlcGFy ZWQgPSBmYWxzZTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRydWx5X250MzU1OTdf cHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5 NyAqY3R4ID0gcGFuZWxfdG9fY3R4KHBhbmVsKTsKKwlpbnQgcmV0OworCWludCBpOworCXN0cnVj dCBjbWRfc2V0ICpwYW5lbF9vbl9jbWRzOworCWNvbnN0IHN0cnVjdCBudDM1NTk3X2NvbmZpZyAq Y29uZmlnOworCXUzMiBudW1fY21kczsKKworCWlmIChjdHgtPnByZXBhcmVkKQorCQlyZXR1cm4g MDsKKworCXJldCA9IHRydWx5XzM1NTk3X3Bvd2VyX29uKGN0eCk7CisJaWYgKHJldCA8IDApCisJ CXJldHVybiByZXQ7CisKKwljdHgtPmRzaVswXS0+bW9kZV9mbGFncyB8PSBNSVBJX0RTSV9NT0RF X0xQTTsKKwljdHgtPmRzaVsxXS0+bW9kZV9mbGFncyB8PSBNSVBJX0RTSV9NT0RFX0xQTTsKKwor CWNvbmZpZyA9IGN0eC0+Y29uZmlnOworCXBhbmVsX29uX2NtZHMgPSAoc3RydWN0IGNtZF9zZXQg Kiljb25maWctPnBhbmVsX29uX2NtZHM7CisJbnVtX2NtZHMgPSBjb25maWctPm51bV9vbl9jbWRz OworCisJZm9yIChpID0gMDsgaSA8IG51bV9jbWRzOyBpKyspIHsKKwkJcmV0ID0gdHJ1bHlfZGNz X3dyaXRlX2J1ZihwYW5lbCwKKwkJCQlwYW5lbF9vbl9jbWRzW2ldLnNpemUsCisJCQkJCXBhbmVs X29uX2NtZHNbaV0uY29tbWFuZHMpOworCQlpZiAocmV0IDwgMCkgeworCQkJRFJNX0RFVl9FUlJP UihjdHgtPmRldiwKKwkJCQkiY21kIHNldCB0eCBmYWlsZWQgaSA9ICVkIHJldCA9ICVkXG4iLAor CQkJCQlpLCByZXQpOworCQkJZ290byBwb3dlcl9vZmY7CisJCX0KKwl9CisKKwkvKiBBcyBwZXIg RFNJIHNwZWMgbmVlZCB0byB3YWl0IGZvciAxMjBtcworCSAqIGFmdGVyIHNlbmRpbmcgdGhlIGV4 aXQgc2xlZXAgRENTIGNvbW1hbmQKKwkgKi8KKworCXJldCA9IHRydWx5X2Rjc193cml0ZShwYW5l bCwgTUlQSV9EQ1NfRVhJVF9TTEVFUF9NT0RFKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVW X0VSUk9SKGN0eC0+ZGV2LAorCQkJImV4aXRfc2xlZXBfbW9kZSBjbWQgZmFpbGVkIHJldCA9ICVk XG4iLAorCQkJcmV0KTsKKwkJZ290byBwb3dlcl9vZmY7CisJfQorCisJbXNsZWVwKDEyMCk7CisK KwlyZXQgPSB0cnVseV9kY3Nfd3JpdGUocGFuZWwsIE1JUElfRENTX1NFVF9ESVNQTEFZX09OKTsK KwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LAorCQkJInNldF9kaXNw bGF5X29uIGNtZCBmYWlsZWQgcmV0ID0gJWRcbiIsCisJCQlyZXQpOworCQlnb3RvIHBvd2VyX29m ZjsKKwl9CisKKwkvKiBBZGRpbmcgMTIwbXMgZGVsYXkgYmVmb3JlIHRoZSBzdGFydCBvZgorCSAq IHBpeGVsIHN0cmVhbSB0byB0aGUgcGFuZWwgYWZ0ZXIgc2VuZGluZworCSAqIHRoZSBzZXRfZGlz cGxheV9vbiBEQ1MgY29tbWFuZAorCSAqLworCisJbXNsZWVwKDEyMCk7CisKKwljdHgtPnByZXBh cmVkID0gdHJ1ZTsKKworCXJldHVybiAwOworCitwb3dlcl9vZmY6CisJZ3Bpb2Rfc2V0X3ZhbHVl KGN0eC0+cmVzZXRfZ3BpbywgMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgt PnN1cHBsaWVzKTsgaSsrKQorCQlyZWd1bGF0b3Jfc2V0X2xvYWQoY3R4LT5zdXBwbGllc1tpXS5j b25zdW1lciwKKwkJCXJlZ3VsYXRvcl9kaXNhYmxlX2xvYWRzW2ldKTsKKworCXJldCA9IHJlZ3Vs YXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwKKwkJCWN0eC0+c3Vw cGxpZXMpOworCURSTV9ERVZfRVJST1IoY3R4LT5kZXYsCisJCSJyZWd1bGF0b3IgZGlzYWJsZSBm YWlsZWQsICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0cnVs eV9udDM1NTk3X2VuYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgdHJ1 bHlfbnQzNTU5NyAqY3R4ID0gcGFuZWxfdG9fY3R4KHBhbmVsKTsKKwlpbnQgcmV0OworCisJaWYg KGN0eC0+ZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY3R4LT5iYWNrbGlnaHQpIHsKKwkJ cmV0ID0gYmFja2xpZ2h0X2VuYWJsZShjdHgtPmJhY2tsaWdodCk7CisJCWlmIChyZXQgPCAwKQor CQkJRFJNX0RFVl9FUlJPUihjdHgtPmRldiwgImJhY2tsaWdodCBlbmFibGUgZmFpbGVkICVkXG4i LAorCQkJCQkJICByZXQpOworCX0KKworCWN0eC0+ZW5hYmxlZCA9IHRydWU7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCB0cnVseV9udDM1NTk3X2dldF9tb2RlcyhzdHJ1Y3QgZHJtX3Bh bmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gcGFuZWwt PmNvbm5lY3RvcjsKKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4ID0gcGFuZWxfdG9fY3R4KHBh bmVsKTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwljb25zdCBzdHJ1Y3QgbnQz NTU5N19jb25maWcgKmNvbmZpZzsKKworCWNvbmZpZyA9IGN0eC0+Y29uZmlnOworCW1vZGUgPSBk cm1fbW9kZV9jcmVhdGUoY29ubmVjdG9yLT5kZXYpOworCWlmICghbW9kZSkgeworCQlEUk1fREVW X0VSUk9SKGN0eC0+ZGV2LAorCQkJImZhaWxlZCB0byBjcmVhdGUgYSBuZXcgZGlzcGxheSBtb2Rl XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhf bW0gPSBjb25maWctPndpZHRoX21tOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9t bSA9IGNvbmZpZy0+aGVpZ2h0X21tOworCWRybV9tb2RlX2NvcHkobW9kZSwgY29uZmlnLT5kbSk7 CisJbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJNX01PREVfVFlQRV9QUkVG RVJSRUQ7CisJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOworCisJcmV0dXJu IDE7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BhbmVsX2Z1bmNzIHRydWx5X250MzU1 OTdfZHJtX2Z1bmNzID0geworCS5kaXNhYmxlID0gdHJ1bHlfbnQzNTU5N19kaXNhYmxlLAorCS51 bnByZXBhcmUgPSB0cnVseV9udDM1NTk3X3VucHJlcGFyZSwKKwkucHJlcGFyZSA9IHRydWx5X250 MzU1OTdfcHJlcGFyZSwKKwkuZW5hYmxlID0gdHJ1bHlfbnQzNTU5N19lbmFibGUsCisJLmdldF9t b2RlcyA9IHRydWx5X250MzU1OTdfZ2V0X21vZGVzLAorfTsKKworc3RhdGljIGludCB0cnVseV9u dDM1NTk3X3BhbmVsX2FkZChzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4KQoreworCXN0cnVjdCBk ZXZpY2UgKmRldiA9IGN0eC0+ZGV2OworCWludCByZXQsIGk7CisJY29uc3Qgc3RydWN0IG50MzU1 OTdfY29uZmlnICpjb25maWc7CisKKwljb25maWcgPSBjdHgtPmNvbmZpZzsKKwlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKTsgaSsrKQorCQljdHgtPnN1cHBsaWVzW2ld LnN1cHBseSA9IHJlZ3VsYXRvcl9uYW1lc1tpXTsKKworCXJldCA9IGRldm1fcmVndWxhdG9yX2J1 bGtfZ2V0KGRldiwgQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwKKwkJCQkgICAgICBjdHgtPnN1 cHBsaWVzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWN0eC0+cmVzZXRfZ3Bp byA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInJlc2V0IiwgR1BJT0RfT1VUX0xPVyk7CisJaWYgKElT X0VSUihjdHgtPnJlc2V0X2dwaW8pKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiY2Fubm90IGdl dCByZXNldCBncGlvICVsZFxuIiwKKwkJCVBUUl9FUlIoY3R4LT5yZXNldF9ncGlvKSk7CisJCXJl dHVybiBQVFJfRVJSKGN0eC0+cmVzZXRfZ3Bpbyk7CisJfQorCisJY3R4LT5tb2RlX2dwaW8gPSBk ZXZtX2dwaW9kX2dldChkZXYsICJtb2RlIiwgR1BJT0RfT1VUX0xPVyk7CisJaWYgKElTX0VSUihj dHgtPm1vZGVfZ3BpbykpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsICJjYW5ub3QgZ2V0IG1vZGUg Z3BpbyAlbGRcbiIsCisJCQlQVFJfRVJSKGN0eC0+bW9kZV9ncGlvKSk7CisJCXJldHVybiBQVFJf RVJSKGN0eC0+bW9kZV9ncGlvKTsKKwl9CisKKwkvKiBkdWFsIHBvcnQgKi8KKwlncGlvZF9zZXRf dmFsdWUoY3R4LT5tb2RlX2dwaW8sIDApOworCisJZHJtX3BhbmVsX2luaXQoJmN0eC0+cGFuZWwp OworCWN0eC0+cGFuZWwuZGV2ID0gZGV2OworCWN0eC0+cGFuZWwuZnVuY3MgPSAmdHJ1bHlfbnQz NTU5N19kcm1fZnVuY3M7CisJZHJtX3BhbmVsX2FkZCgmY3R4LT5wYW5lbCk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIHFjb21fc2RtODQ1 X210cF8ya19tb2RlID0geworCS5uYW1lID0gIjE0NDB4MjU2MCIsCisJLmNsb2NrID0gMjY4MzE2 LAorCS5oZGlzcGxheSA9IDE0NDAsCisJLmhzeW5jX3N0YXJ0ID0gMTQ0MCArIDIwMCwKKwkuaHN5 bmNfZW5kID0gMTQ0MCArIDIwMCArIDMyLAorCS5odG90YWwgPSAxNDQwICsgMjAwICsgMzIgKyA2 NCwKKwkudmRpc3BsYXkgPSAyNTYwLAorCS52c3luY19zdGFydCA9IDI1NjAgKyA4LAorCS52c3lu Y19lbmQgPSAyNTYwICsgOCArIDEsCisJLnZ0b3RhbCA9IDI1NjAgKyA4ICsgMSArIDcsCisJLnZy ZWZyZXNoID0gNjAsCisJLmZsYWdzID0gMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbnQz NTU5N19jb25maWcgbnQzNTU5N19kaXIgPSB7CisJLndpZHRoX21tID0gNzQsCisJLmhlaWdodF9t bSA9IDEzMSwKKwkucGFuZWxfbmFtZSA9ICJxY29tX3NkbTg0NV9tdHBfMmtfcGFuZWwiLAorCS5k bSA9ICZxY29tX3NkbTg0NV9tdHBfMmtfbW9kZSwKKwkucGFuZWxfb25fY21kcyA9IHFjb21fMmtf cGFuZWxfbWFnaWNfY21kcywKKwkubnVtX29uX2NtZHMgPSBBUlJBWV9TSVpFKHFjb21fMmtfcGFu ZWxfbWFnaWNfY21kcyksCit9OworCitzdGF0aWMgaW50IHRydWx5X250MzU1OTdfcHJvYmUoc3Ry dWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkc2kt PmRldjsKKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4OworCXN0cnVjdCBtaXBpX2RzaV9kZXZp Y2UgKmRzaTFfZGV2aWNlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHNpMTsKKwlzdHJ1Y3QgbWlw aV9kc2lfaG9zdCAqZHNpMV9ob3N0OworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaV9kZXY7 CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKwljb25zdCBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNl X2luZm8gaW5mbyA9IHsKKwkJLnR5cGUgPSAidHJ1bHludDM1NTk3IiwKKwkJLmNoYW5uZWwgPSAw LAorCQkubm9kZSA9IE5VTEwsCisJfTsKKworCWN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVv ZigqY3R4KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWN0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisK KwkvKiBUaGlzIGRldmljZSByZXByZXNlbnRzIGl0c2VsZiBhcyBvbmUgd2l0aAorCSAqIHR3byBp bnB1dCBwb3J0cyB3aGljaCBhcmUgZmVkIGJ5IHRoZSBvdXRwdXQKKwkgKiBwb3J0cyBvZiB0aGUg dHdvIERTSSBjb250cm9sbGVycyAuIFRoZSBEU0kwCisJICogaXMgdGhlIG1hc3RlciBjb250cm9s bGVyIGFuZCBoYXMgbW9zdCBvZiB0aGUKKwkgKiBwYW5lbCByZWxhdGVkIGluZm8gaW4gaXRzIGNo aWxkIG5vZGUuCisJICovCisKKwljdHgtPmNvbmZpZyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0 YShkZXYpOworCisJaWYgKCFjdHgtPmNvbmZpZykgeworCQlkZXZfZXJyKGRldiwgIm1pc3Npbmcg ZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkc2kx ID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9ub2RlKGRzaS0+ZGV2Lm9mX25vZGUsIDEsIC0xKTsKKwlp ZiAoIWRzaTEpIHsKKwkJRFJNX0RFVl9FUlJPUihkZXYsCisJCQkiZmFpbGVkIHRvIGdldCByZW1v dGUgbm9kZSBmb3IgZHNpMV9kZXZpY2VcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVy cl9nZXRfcmVtb3RlOworCX0KKworCWRzaTFfaG9zdCA9IG9mX2ZpbmRfbWlwaV9kc2lfaG9zdF9i eV9ub2RlKGRzaTEpOworCWlmICghZHNpMV9ob3N0KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAi ZmFpbGVkIHRvIGZpbmQgZHNpIGhvc3RcbiIpOworCQlyZXQgPSAtRVBST0JFX0RFRkVSOworCQln b3RvIGVycl9ob3N0OworCX0KKworCW9mX25vZGVfcHV0KGRzaTEpOworCisJLyogcmVnaXN0ZXIg dGhlIHNlY29uZCBEU0kgZGV2aWNlICovCisJZHNpMV9kZXZpY2UgPSBtaXBpX2RzaV9kZXZpY2Vf cmVnaXN0ZXJfZnVsbChkc2kxX2hvc3QsICZpbmZvKTsKKwlpZiAoSVNfRVJSKGRzaTFfZGV2aWNl KSkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgImZhaWxlZCB0byBjcmVhdGUgZHNpIGRldmljZVxu Iik7CisJCXJldCA9IFBUUl9FUlIoZHNpKTsKKwkJZ290byBlcnJfZHNpX2RldmljZTsKKwl9CisK KwltaXBpX2RzaV9zZXRfZHJ2ZGF0YShkc2ksIGN0eCk7CisKKwljdHgtPmRldiA9IGRldjsKKwlj dHgtPmRzaVswXSA9IGRzaTsKKwljdHgtPmRzaVsxXSA9IGRzaTFfZGV2aWNlOworCisJcmV0ID0g dHJ1bHlfbnQzNTU5N19wYW5lbF9hZGQoY3R4KTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJS T1IoZGV2LCAiZmFpbGVkIHRvIGFkZCBwYW5lbFxuIik7CisJCWdvdG8gZXJyX3BhbmVsX2FkZDsK Kwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPmRzaSk7IGkrKykgeworCQlk c2lfZGV2ID0gY3R4LT5kc2lbaV07CisJCWRzaV9kZXYtPmxhbmVzID0gNDsKKwkJZHNpX2Rldi0+ Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKKwkJZHNpX2Rldi0+bW9kZV9mbGFncyA9IE1J UElfRFNJX01PREVfVklERU8gfCBNSVBJX0RTSV9NT0RFX0xQTSB8CisJCQlNSVBJX0RTSV9DTE9D S19OT05fQ09OVElOVU9VUzsKKwkJcmV0ID0gbWlwaV9kc2lfYXR0YWNoKGRzaV9kZXYpOworCQlp ZiAocmV0IDwgMCkgeworCQkJRFJNX0RFVl9FUlJPUihkZXYsCisJCQkJImRzaSBhdHRhY2ggZmFp bGVkIGkgPSAlZFxuIiwgaSk7CisJCQkJZ290byBlcnJfZHNpX2F0dGFjaDsKKwkJfQorCX0KKwor CXJldHVybiAwOworCitlcnJfZHNpX2F0dGFjaDoKKwlkcm1fcGFuZWxfcmVtb3ZlKCZjdHgtPnBh bmVsKTsKK2Vycl9wYW5lbF9hZGQ6CisJbWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIoZHNpMV9k ZXZpY2UpOworZXJyX2RzaV9kZXZpY2U6CitlcnJfaG9zdDoKKwlvZl9ub2RlX3B1dChkc2kxKTsK K2Vycl9nZXRfcmVtb3RlOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bHlfbnQz NTU5N19yZW1vdmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCB0cnVs eV9udDM1NTk3ICpjdHggPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShkc2kpOworCisJaWYgKGN0eC0+ ZHNpWzBdKQorCQltaXBpX2RzaV9kZXRhY2goY3R4LT5kc2lbMF0pOworCWlmIChjdHgtPmRzaVsx XSkgeworCQltaXBpX2RzaV9kZXRhY2goY3R4LT5kc2lbMV0pOworCQltaXBpX2RzaV9kZXZpY2Vf dW5yZWdpc3RlcihjdHgtPmRzaVsxXSk7CisJfQorCisJZHJtX3BhbmVsX3JlbW92ZSgmY3R4LT5w YW5lbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk IHRydWx5X250MzU1OTdfb2ZfbWF0Y2hbXSA9IHsKKwl7CS5jb21wYXRpYmxlID0gInRydWx5LG50 MzU1OTctMkstZGlzcGxheSIsCisJCS5kYXRhID0gJm50MzU1OTdfZGlyLAorCX0sCisKKwl7IH0K K307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0cnVseV9udDM1NTk3X29mX21hdGNoKTsKKwor c3RhdGljIHN0cnVjdCBtaXBpX2RzaV9kcml2ZXIgdHJ1bHlfbnQzNTU5N19kcml2ZXIgPSB7CisJ LmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicGFuZWxfdHJ1bHlfbnQzNTU5NyIsCisJCS5vZl9tYXRj aF90YWJsZSA9IHRydWx5X250MzU1OTdfb2ZfbWF0Y2gsCisJfSwKKwkucHJvYmUgPSB0cnVseV9u dDM1NTk3X3Byb2JlLAorCS5yZW1vdmUgPSB0cnVseV9udDM1NTk3X3JlbW92ZSwKK307Cittb2R1 bGVfbWlwaV9kc2lfZHJpdmVyKHRydWx5X250MzU1OTdfZHJpdmVyKTsKKworTU9EVUxFX0RFU0NS SVBUSU9OKCJUcnVseSBOVDM1NTk3IERTSSBQYW5lbCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNF KCJHUEwgdjIiKTsKLS0gClRoZSBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5jLiBpcyBh IG1lbWJlciBvZiB0aGUgQ29kZSBBdXJvcmEgRm9ydW0sCmEgTGludXggRm91bmRhdGlvbiBDb2xs YWJvcmF0aXZlIFByb2plY3QKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ry aS1kZXZlbAo=