From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhinav Kumar Subject: [PATCH RESEND v6 1/2] drm/panel: Add support for Truly NT35597 panel driver Date: Tue, 28 Aug 2018 15:39:46 -0700 Message-ID: <1535495987-22527-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" , seanpaul@chromium.org, hoegsberg@google.com, chandanu@codeaurora.org List-Id: linux-arm-msm@vger.kernel.org RnJvbTogImFiaGluYXZrQGNvZGVhdXJvcmEub3JnIiA8YWJoaW5hdmtAY29kZWF1cm9yYS5vcmc+ CgpBZGQgc3VwcG9ydCBmb3IgVHJ1bHkgTlQzNTU5NyBwYW5lbCBkcml2ZXIgdXNlZAppbiBNU00g cmVmZXJlbmNlIHBsYXRmb3Jtcy4KClRoaXMgcGFuZWwgZHJpdmVyIHN1cHBvcnRzIGJvdGggc2lu Z2xlIERTSSBhbmQgZHVhbCBEU0kKbW9kZXMuCgpIb3dldmVyLCB0aGlzIHBhdGNoIHNlcmllcyBh ZGRzIHN1cHBvcnQgb25seSBmb3IKZHVhbCBEU0kgbW9kZS4KCkNoYW5nZXMgaW4gdjY6Ci0gSW50 cm9kdWNlIHBhbmVsIGNvbmZpZyB0byBzdG9yZSBwYW5lbCBzcGVjaWZpYwogIGRldGFpbHMKLSBC cmluZyBiYWNrIHRoZSBzaXplIG1lbWJlciBmb3IgdGhlIHBhbmVsIGNvbW1hbmQKICBzdHJ1Y3R1 cmUgdG8gbWFrZSB0aGUgZGVzaWduIG1vcmUgc2NhbGFibGUKLSBNb3ZlIHRoZSBkaXNwbGF5IG1v ZGUgZnJvbSB0aGUgRFQgdG8gZHJpdmVyCi0gQ2hhbmdlIHRoZSBjb21wYXRpYmxlIHN0cmluZyB0 byBpbmRpY2F0ZSB3aGljaAogIHdoaWNoIGJvYXJkIGFuZCBwYW5lbCBpdCB3aWxsIGJlIHVzZWQg Zm9yCi0gUmVuYW1lIHRoZSBmdW5jdGlvbnMgdG8gbWF0Y2ggdGhlIHBhbmVsIGRyaXZlcgotIEhh dmUgYSBkYXRhIG1lbWJlciBmb3IgZWFjaCBjb21wYXRpYmxlIHN0cmluZwotIFJlbW92ZSB0aGUg cGFuZWwgY29tbWFuZHMgc3BsaXQgYXMgaXRzIG5vdAogIHJlcXVpcmVkIGZvciB0aGUgcGFuZWwg aW5pdCBmdW5jdGlvbmFsaXR5CgpTaWduZWQtb2ZmLWJ5OiBBcmNoaXQgVGFuZWphIDxhcmNoaXR0 QGNvZGVhdXJvcmEub3JnPgpTaWduZWQtb2ZmLWJ5OiBBYmhpbmF2IEt1bWFyIDxhYmhpbmF2a0Bj b2RlYXVyb3JhLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyAgICAgICAg ICAgICAgIHwgICA4ICsKIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSAgICAgICAgICAg ICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LW50MzU1OTcuYyB8 IDcwNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDcxNCBp bnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3BhbmVsL3Bh bmVsLXRydWx5LW50MzU1OTcuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9L Y29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKaW5kZXggNjAyMGMzMC4uN2Fl NzRjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKKysrIGIvZHJp dmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKQEAgLTE4Niw0ICsxODYsMTIgQEAgY29uZmlnIERS TV9QQU5FTF9TSVRST05JWF9TVDc3ODlWCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVu YWJsZSBzdXBwb3J0IGZvciB0aGUgU2l0cm9uaXgKIAkgIFNUNzc4OVYgY29udHJvbGxlciBmb3Ig MjQweDMyMCBMQ0QgcGFuZWxzCiAKK2NvbmZpZyBEUk1fUEFORUxfVFJVTFlfTlQzNTU5N19XUVhH QQorCXRyaXN0YXRlICJUcnVseSBXUVhHQSIKKwlkZXBlbmRzIG9uIE9GCisJZGVwZW5kcyBvbiBE Uk1fTUlQSV9EU0kKKwlzZWxlY3QgVklERU9NT0RFX0hFTFBFUlMKKwloZWxwCisJICBTYXkgWSBo ZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBUcnVseSBOVDM1NTk3IFdRWEdB IER1YWwgRFNJCisJICBWaWRlbyBNb2RlIHBhbmVsCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZp bGUKaW5kZXggNWNjYWFhOS4uODBmZDE5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Bh bmVsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQpAQCAtMTks MyArMTksNCBAQCBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NFSUtPXzQzV1ZGMUcpICs9IHBhbmVs LXNlaWtvLTQzd3ZmMWcubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUTEwMVIxU1gw MSkgKz0gcGFuZWwtc2hhcnAtbHExMDFyMXN4MDEubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9T SEFSUF9MUzA0M1QxTEUwMSkgKz0gcGFuZWwtc2hhcnAtbHMwNDN0MWxlMDEubwogb2JqLSQoQ09O RklHX0RSTV9QQU5FTF9TSVRST05JWF9TVDc3ODlWKSArPSBwYW5lbC1zaXRyb25peC1zdDc3ODl2 Lm8KK29iai0kKENPTkZJR19EUk1fUEFORUxfVFJVTFlfTlQzNTU5N19XUVhHQSkgKz0gcGFuZWwt dHJ1bHktbnQzNTU5Ny5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwt dHJ1bHktbnQzNTU5Ny5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LW50MzU1 OTcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTFiZTAzCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXRydWx5LW50MzU1OTcuYwpA QCAtMCwwICsxLDcwNSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8q CisgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+CisjaW5j bHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3Vt ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9waW5jdHJsL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGlu dXgvb2ZfZGV2aWNlLmg+CisKKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4KKyNpbmNs dWRlIDx2aWRlby9vZl92aWRlb21vZGUuaD4KKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4K KworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBy ZWd1bGF0b3JfbmFtZXNbXSA9IHsKKwkidmRkYSIsCisJInZkaXNwcCIsCisJInZkaXNwbiIsCit9 OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb25zdCByZWd1bGF0b3JfZW5hYmxlX2xvYWRzW10g PSB7CisJNjIwMDAsCisJMTAwMDAwLAorCTEwMDAwMCwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBs b25nIGNvbnN0IHJlZ3VsYXRvcl9kaXNhYmxlX2xvYWRzW10gPSB7CisJODAsCisJMTAwLAorCTEw MCwKK307CisKK3N0cnVjdCBudDM1NTk3X2NvbmZpZyB7CisJdTMyIHdpZHRoX21tOworCXUzMiBo ZWlnaHRfbW07CisJY2hhciBwYW5lbF9uYW1lWzI1Nl07CisJdm9pZCAqcGFuZWxfb25fY21kczsK Kwl1MzIgbnVtX29uX2NtZHM7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRtOworfTsKKwor c3RydWN0IHRydWx5X250MzU1OTcgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJt X3BhbmVsIHBhbmVsOworCisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbQVJS QVlfU0laRShyZWd1bGF0b3JfbmFtZXMpXTsKKworCXN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dw aW87CisJc3RydWN0IGdwaW9fZGVzYyAqbW9kZV9ncGlvOworCisJc3RydWN0IGJhY2tsaWdodF9k ZXZpY2UgKmJhY2tsaWdodDsKKworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaVsyXTsKKwor CWNvbnN0IHN0cnVjdCBudDM1NTk3X2NvbmZpZyAqY29uZmlnOworCWJvb2wgcHJlcGFyZWQ7CisJ Ym9vbCBlbmFibGVkOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAq cGFuZWxfdG9fY3R4KHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXJldHVybiBjb250YWlu ZXJfb2YocGFuZWwsIHN0cnVjdCB0cnVseV9udDM1NTk3LCBwYW5lbCk7Cit9CisKKyNkZWZpbmUg TUFYX0xFTgk1CisjZGVmaW5lIFNIT1JUX1BBQ0tFVCAyCisjZGVmaW5lIExPTkdfUEFDS0VUIDQK Kworc3RydWN0IGNtZF9zZXQgeworCXU4IGNvbW1hbmRzW01BWF9MRU5dOworCWludCBzaXplOwor fTsKKworc3RhdGljIHN0cnVjdCBjbWRfc2V0IHFjb21fMmtfcGFuZWxfbWFnaWNfY21kc1tdID0g eworCS8qIENNRDJfUDAgKi8KKwl7IHsgMHhmZiwgMHgyMCB9LCAyIH0sCisJeyB7IDB4ZmIsIDB4 MDEgfSwgMiB9LAorCXsgeyAweDAwLCAweDAxIH0sIDIgfSwKKwl7IHsgMHgwMSwgMHg1NSB9LCAy IH0sCisJeyB7IDB4MDIsIDB4NDUgfSwgMiB9LAorCXsgeyAweDA1LCAweDQwIH0sIDIgfSwKKwl7 IHsgMHgwNiwgMHgxOSB9LCAyIH0sCisJeyB7IDB4MDcsIDB4MWUgfSwgMiB9LAorCXsgeyAweDBi LCAweDczIH0sIDIgfSwKKwl7IHsgMHgwYywgMHg3MyB9LCAyIH0sCisJeyB7IDB4MGUsIDB4YjAg fSwgMiB9LAorCXsgeyAweDBmLCAweGFlIH0sIDIgfSwKKwl7IHsgMHgxMSwgMHhiOCB9LCAyIH0s CisJeyB7IDB4MTMsIDB4MDAgfSwgMiB9LAorCXsgeyAweDU4LCAweDgwIH0sIDIgfSwKKwl7IHsg MHg1OSwgMHgwMSB9LCAyIH0sCisJeyB7IDB4NWEsIDB4MDAgfSwgMiB9LAorCXsgeyAweDViLCAw eDAxIH0sIDIgfSwKKwl7IHsgMHg1YywgMHg4MCB9LCAyIH0sCisJeyB7IDB4NWQsIDB4ODEgfSwg MiB9LAorCXsgeyAweDVlLCAweDAwIH0sIDIgfSwKKwl7IHsgMHg1ZiwgMHgwMSB9LCAyIH0sCisJ eyB7IDB4NzIsIDB4MTEgfSwgMiB9LAorCXsgeyAweDY4LCAweDAzIH0sIDIgfSwKKwkvKiBDTUQy X1A0ICovCisJeyB7IDB4RkYsIDB4MjQgfSwgMiB9LAorCXsgeyAweEZCLCAweDAxIH0sIDIgfSwK Kwl7IHsgMHgwMCwgMHgxQyB9LCAyIH0sCisJeyB7IDB4MDEsIDB4MEIgfSwgMiB9LAorCXsgeyAw eDAyLCAweDBDIH0sIDIgfSwKKwl7IHsgMHgwMywgMHgwMSB9LCAyIH0sCisJeyB7IDB4MDQsIDB4 MEYgfSwgMiB9LAorCXsgeyAweDA1LCAweDEwIH0sIDIgfSwKKwl7IHsgMHgwNiwgMHgxMCB9LCAy IH0sCisJeyB7IDB4MDcsIDB4MTAgfSwgMiB9LAorCXsgeyAweDA4LCAweDg5IH0sIDIgfSwKKwl7 IHsgMHgwOSwgMHg4QSB9LCAyIH0sCisJeyB7IDB4MEEsIDB4MTMgfSwgMiB9LAorCXsgeyAweDBC LCAweDEzIH0sIDIgfSwKKwl7IHsgMHgwQywgMHgxNSB9LCAyIH0sCisJeyB7IDB4MEQsIDB4MTUg fSwgMiB9LAorCXsgeyAweDBFLCAweDE3IH0sIDIgfSwKKwl7IHsgMHgwRiwgMHgxNyB9LCAyIH0s CisJeyB7IDB4MTAsIDB4MUMgfSwgMiB9LAorCXsgeyAweDExLCAweDBCIH0sIDIgfSwKKwl7IHsg MHgxMiwgMHgwQyB9LCAyIH0sCisJeyB7IDB4MTMsIDB4MDEgfSwgMiB9LAorCXsgeyAweDE0LCAw eDBGIH0sIDIgfSwKKwl7IHsgMHgxNSwgMHgxMCB9LCAyIH0sCisJeyB7IDB4MTYsIDB4MTAgfSwg MiB9LAorCXsgeyAweDE3LCAweDEwIH0sIDIgfSwKKwl7IHsgMHgxOCwgMHg4OSB9LCAyIH0sCisJ eyB7IDB4MTksIDB4OEEgfSwgMiB9LAorCXsgeyAweDFBLCAweDEzIH0sIDIgfSwKKwl7IHsgMHgx QiwgMHgxMyB9LCAyIH0sCisJeyB7IDB4MUMsIDB4MTUgfSwgMiB9LAorCXsgeyAweDFELCAweDE1 IH0sIDIgfSwKKwl7IHsgMHgxRSwgMHgxNyB9LCAyIH0sCisJeyB7IDB4MUYsIDB4MTcgfSwgMiB9 LAorCS8qIFNUViAqLworCXsgeyAweDIwLCAweDQwIH0sIDIgfSwKKwl7IHsgMHgyMSwgMHgwMSB9 LCAyIH0sCisJeyB7IDB4MjIsIDB4MDAgfSwgMiB9LAorCXsgeyAweDIzLCAweDQwIH0sIDIgfSwK Kwl7IHsgMHgyNCwgMHg0MCB9LCAyIH0sCisJeyB7IDB4MjUsIDB4NkQgfSwgMiB9LAorCXsgeyAw eDI2LCAweDQwIH0sIDIgfSwKKwl7IHsgMHgyNywgMHg0MCB9LCAyIH0sCisJLyogVmVuZCAqLwor CXsgeyAweEUwLCAweDAwIH0sIDIgfSwKKwl7IHsgMHhEQywgMHgyMSB9LCAyIH0sCisJeyB7IDB4 REQsIDB4MjIgfSwgMiB9LAorCXsgeyAweERFLCAweDA3IH0sIDIgfSwKKwl7IHsgMHhERiwgMHgw NyB9LCAyIH0sCisJeyB7IDB4RTMsIDB4NkQgfSwgMiB9LAorCXsgeyAweEUxLCAweDA3IH0sIDIg fSwKKwl7IHsgMHhFMiwgMHgwNyB9LCAyIH0sCisJLyogVUQgKi8KKwl7IHsgMHgyOSwgMHhEOCB9 LCAyIH0sCisJeyB7IDB4MkEsIDB4MkEgfSwgMiB9LAorCS8qIENMSyAqLworCXsgeyAweDRCLCAw eDAzIH0sIDIgfSwKKwl7IHsgMHg0QywgMHgxMSB9LCAyIH0sCisJeyB7IDB4NEQsIDB4MTAgfSwg MiB9LAorCXsgeyAweDRFLCAweDAxIH0sIDIgfSwKKwl7IHsgMHg0RiwgMHgwMSB9LCAyIH0sCisJ eyB7IDB4NTAsIDB4MTAgfSwgMiB9LAorCXsgeyAweDUxLCAweDAwIH0sIDIgfSwKKwl7IHsgMHg1 MiwgMHg4MCB9LCAyIH0sCisJeyB7IDB4NTMsIDB4MDAgfSwgMiB9LAorCXsgeyAweDU2LCAweDAw IH0sIDIgfSwKKwl7IHsgMHg1NCwgMHgwNyB9LCAyIH0sCisJeyB7IDB4NTgsIDB4MDcgfSwgMiB9 LAorCXsgeyAweDU1LCAweDI1IH0sIDIgfSwKKwkvKiBSZXNldCBYRE9OQiAqLworCXsgeyAweDVC LCAweDQzIH0sIDIgfSwKKwl7IHsgMHg1QywgMHgwMCB9LCAyIH0sCisJeyB7IDB4NUYsIDB4NzMg fSwgMiB9LAorCXsgeyAweDYwLCAweDczIH0sIDIgfSwKKwl7IHsgMHg2MywgMHgyMiB9LCAyIH0s CisJeyB7IDB4NjQsIDB4MDAgfSwgMiB9LAorCXsgeyAweDY3LCAweDA4IH0sIDIgfSwKKwl7IHsg MHg2OCwgMHgwNCB9LCAyIH0sCisJLyogUmVzb2x1dGlvbjoxNDQweDI1NjAgKi8KKwl7IHsgMHg3 MiwgMHgwMiB9LCAyIH0sCisJLyogbXV4ICovCisJeyB7IDB4N0EsIDB4ODAgfSwgMiB9LAorCXsg eyAweDdCLCAweDkxIH0sIDIgfSwKKwl7IHsgMHg3QywgMHhEOCB9LCAyIH0sCisJeyB7IDB4N0Qs IDB4NjAgfSwgMiB9LAorCXsgeyAweDdGLCAweDE1IH0sIDIgfSwKKwl7IHsgMHg3NSwgMHgxNSB9 LCAyIH0sCisJLyogQUJPRkYgKi8KKwl7IHsgMHhCMywgMHhDMCB9LCAyIH0sCisJeyB7IDB4QjQs IDB4MDAgfSwgMiB9LAorCXsgeyAweEI1LCAweDAwIH0sIDIgfSwKKwkvKiBTb3VyY2UgRVEgKi8K Kwl7IHsgMHg3OCwgMHgwMCB9LCAyIH0sCisJeyB7IDB4NzksIDB4MDAgfSwgMiB9LAorCXsgeyAw eDgwLCAweDAwIH0sIDIgfSwKKwl7IHsgMHg4MywgMHgwMCB9LCAyIH0sCisJLyogRlAgQlAgKi8K Kwl7IHsgMHg5MywgMHgwQSB9LCAyIH0sCisJeyB7IDB4OTQsIDB4MEEgfSwgMiB9LAorCS8qIElu dmVyc2lvbiBUeXBlICovCisJeyB7IDB4OEEsIDB4MDAgfSwgMiB9LAorCXsgeyAweDlCLCAweEZG IH0sIDIgfSwKKwkvKiBJTUdTV0FQID0xIEBQb3J0U3dhcD0xICovCisJeyB7IDB4OUQsIDB4QjAg fSwgMiB9LAorCXsgeyAweDlGLCAweDYzIH0sIDIgfSwKKwl7IHsgMHg5OCwgMHgxMCB9LCAyIH0s CisJLyogRlJNICovCisJeyB7IDB4RUMsIDB4MDAgfSwgMiB9LAorCS8qIENNRDEgKi8KKwl7IHsg MHhGRiwgMHgxMCB9LCAyIH0sCisJLyogVkJQK1ZTQT0sVkZQID0gMTBIICovCisJeyB7IDB4M0Is IDB4MDMsIDB4MEEsIDB4MEEgfSwgNCB9LAorCS8qIEZURSBvbiAqLworCXsgeyAweDM1LCAweDAw IH0sIDIgfSwKKwkvKiBFTl9CSyA9MShhdXRvIGJsYWNrKSAqLworCXsgeyAweEU1LCAweDAxIH0s IDIgfSwKKwkvKiBDTUQgbW9kZSgxMCkgVkRPIG1vZGUoMDMpICovCisJeyB7IDB4QkIsIDB4MDMg fSwgMiB9LAorCS8qIE5vbiBSZWxvYWQgTVRQICovCisJeyB7IDB4RkIsIDB4MDEgfSwgMiB9LAor fTsKKworc3RhdGljIGludCB0cnVseV9kY3Nfd3JpdGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWws IHUzMiBjb21tYW5kKQoreworCXN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHggPSBwYW5lbF90b19j dHgocGFuZWwpOworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShj dHgtPmRzaSk7IGkrKykgeworCQlyZXQgPSBtaXBpX2RzaV9kY3Nfd3JpdGUoY3R4LT5kc2lbaV0s CisJCQljb21tYW5kLCBOVUxMLCAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCURSTV9ERVZfRVJS T1IoY3R4LT5kZXYsCisJCQkJInNldF9kaXNwbGF5X29mZiBjbWQgZmFpbGVkIGZvciBkc2kgPSAl ZFxuIiwKKwkJCWkpOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0 cnVseV9kY3Nfd3JpdGVfYnVmKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsLAorCXUzMiBzaXplLCB1 OCAqYnVmKQoreworCXN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHggPSBwYW5lbF90b19jdHgocGFu ZWwpOworCWludCByZXQgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoY3R4LT5kc2kpOyBpKyspIHsKKwkJcmV0ID0gbWlwaV9kc2lfZGNzX3dyaXRlX2J1ZmZlcihj dHgtPmRzaVtpXSwKKwkJCWJ1ZiwKKwkJCXNpemUpOworCisJCWlmIChyZXQgPCAwKSB7CisJCQlE Uk1fREVWX0VSUk9SKGN0eC0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gdHggY21kIFslZF0sIGVycjog JWRcbiIsCisJCQkJaSwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4g cmV0OworfQorCisjZGVmaW5lIHRydWx5X2NhbGxfd3JpdGVfZnVuYyhyZXQsIGZ1bmMsIHBhbmVs LCBjb21tYW5kKSB7XAorCXJldCA9IGZ1bmMocGFuZWwsIGNvbW1hbmQpOyAgICAgXAorfQorCisj ZGVmaW5lIHRydWx5X3dyaXRlX2J1Zl9mdW5jKHJldCwgZnVuYywgcGFuZWwsIHNpemUsIGJ1Zikg e1wKKwlyZXQgPSBmdW5jKHBhbmVsLCBzaXplLCBidWYpOyBcCit9CisKK3N0YXRpYyBpbnQgdHJ1 bHlfMzU1OTdfcG93ZXJfb24oc3RydWN0IHRydWx5X250MzU1OTcgKmN0eCkKK3sKKwlpbnQgcmV0 LCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyk7IGkrKykg eworCQlyZXQgPSByZWd1bGF0b3Jfc2V0X2xvYWQoY3R4LT5zdXBwbGllc1tpXS5jb25zdW1lciwK KwkJCQkJcmVndWxhdG9yX2VuYWJsZV9sb2Fkc1tpXSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4g cmV0OworCX0KKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKGN0eC0+ c3VwcGxpZXMpLCBjdHgtPnN1cHBsaWVzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsK KworCS8qIFJlc2V0IHNlcXVlbmNlIG9mIHRydWx5IHBhbmVsIHJlcXVpcmVzCisJICogdGhlIHJl c2V0IHBpbiB0byBiZSBwdWxsZWQgaGlnaCBmb3IgMTBtcworCSAqIGZvbGxvd2VkIGJ5IGEgbG93 IHBlcmlvZCBvZiAxMG1zIGFuZCB0aGVuCisJICogcHVsbGVkIGhpZ2ggYWdhaW4KKwkgKi8KKwor CWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDEpOworCW1zbGVlcCgyMCk7CisJZ3Bp b2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMCk7CisJbXNsZWVwKDIwKTsKKwlncGlvZF9z ZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IHRydWx5X250MzU1OTdfcG93ZXJfb2ZmKHN0cnVjdCB0cnVseV9udDM1NTk3ICpjdHgpCit7 CisJaW50IHJldCwgaTsKKworCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDApOwor CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyk7IGkrKykgeworCQly ZXQgPSByZWd1bGF0b3Jfc2V0X2xvYWQoY3R4LT5zdXBwbGllc1tpXS5jb25zdW1lciwKKwkJCQly ZWd1bGF0b3JfZGlzYWJsZV9sb2Fkc1tpXSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0Owor CX0KKworCXJldHVybiByZWd1bGF0b3JfYnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoY3R4LT5zdXBw bGllcyksIGN0eC0+c3VwcGxpZXMpOworfQorCitzdGF0aWMgaW50IHRydWx5X250MzU1OTdfZGlz YWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAq Y3R4ID0gcGFuZWxfdG9fY3R4KHBhbmVsKTsKKwlpbnQgcmV0OworCisJaWYgKCFjdHgtPmVuYWJs ZWQpCisJCXJldHVybiAwOworCisJaWYgKGN0eC0+YmFja2xpZ2h0KSB7CisJCXJldCA9IGJhY2ts aWdodF9kaXNhYmxlKGN0eC0+YmFja2xpZ2h0KTsKKwkJaWYgKHJldCA8IDApCisJCQlEUk1fREVW X0VSUk9SKGN0eC0+ZGV2LCAiYmFja2xpZ2h0IGRpc2FibGUgZmFpbGVkICVkXG4iLAorCQkJCXJl dCk7CisJfQorCisJY3R4LT5lbmFibGVkID0gZmFsc2U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgdHJ1bHlfbnQzNTU5N191bnByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7 CisJc3RydWN0IHRydWx5X250MzU1OTcgKmN0eCA9IHBhbmVsX3RvX2N0eChwYW5lbCk7CisJaW50 IHJldCA9IDA7CisKKwlpZiAoIWN0eC0+cHJlcGFyZWQpCisJCXJldHVybiAwOworCisJY3R4LT5k c2lbMF0tPm1vZGVfZmxhZ3MgPSAwOworCWN0eC0+ZHNpWzFdLT5tb2RlX2ZsYWdzID0gMDsKKwor CXRydWx5X2NhbGxfd3JpdGVfZnVuYyhyZXQsIHRydWx5X2Rjc193cml0ZSwgcGFuZWwsCisJCU1J UElfRENTX1NFVF9ESVNQTEFZX09GRik7CisKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VS Uk9SKGN0eC0+ZGV2LAorCQkJInNldF9kaXNwbGF5X29mZiBjbWQgZmFpbGVkIHJldCA9ICVkXG4i LAorCQkJcmV0KTsKKwl9CisKKwkvKiAxMjBtcyBkZWxheSByZXF1aXJlZCBoZXJlIGFzIHBlciBE Q1Mgc3BlYyAqLworCW1zbGVlcCgxMjApOworCisJdHJ1bHlfY2FsbF93cml0ZV9mdW5jKHJldCwg dHJ1bHlfZGNzX3dyaXRlLCBwYW5lbCwKKwkJTUlQSV9EQ1NfRU5URVJfU0xFRVBfTU9ERSk7CisK KwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LAorCQkJImVudGVyX3Ns ZWVwIGNtZCBmYWlsZWQgcmV0ID0gJWRcbiIsCisJCQlyZXQpOworCX0KKworCXJldCA9IHRydWx5 X250MzU1OTdfcG93ZXJfb2ZmKGN0eCk7CisJaWYgKHJldCA8IDApCisJCURSTV9ERVZfRVJST1Io Y3R4LT5kZXYsCisJCQkidHJ1bHlfbnQzNTU5N19wb3dlcl9vZmYgZmFpbGVkIHJldCA9ICVkXG4i LAorCQkJcmV0KTsKKworCWN0eC0+cHJlcGFyZWQgPSBmYWxzZTsKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW50IHRydWx5X250MzU1OTdfcHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5l bCkKK3sKKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4ID0gcGFuZWxfdG9fY3R4KHBhbmVsKTsK KwlpbnQgcmV0OworCWludCBpOworCXN0cnVjdCBjbWRfc2V0ICpwYW5lbF9vbl9jbWRzOworCWNv bnN0IHN0cnVjdCBudDM1NTk3X2NvbmZpZyAqY29uZmlnOworCXUzMiBudW1fY21kczsKKworCWlm IChjdHgtPnByZXBhcmVkKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHRydWx5XzM1NTk3X3Bvd2Vy X29uKGN0eCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwljdHgtPmRzaVswXS0+ bW9kZV9mbGFncyB8PSBNSVBJX0RTSV9NT0RFX0xQTTsKKwljdHgtPmRzaVsxXS0+bW9kZV9mbGFn cyB8PSBNSVBJX0RTSV9NT0RFX0xQTTsKKworCWNvbmZpZyA9IGN0eC0+Y29uZmlnOworCXBhbmVs X29uX2NtZHMgPSAoc3RydWN0IGNtZF9zZXQgKiljb25maWctPnBhbmVsX29uX2NtZHM7CisJbnVt X2NtZHMgPSBjb25maWctPm51bV9vbl9jbWRzOworCisJZm9yIChpID0gMDsgaSA8IG51bV9jbWRz OyBpKyspCisJCXRydWx5X3dyaXRlX2J1Zl9mdW5jKHJldCwgdHJ1bHlfZGNzX3dyaXRlX2J1ZiwK KwkJCXBhbmVsLCBwYW5lbF9vbl9jbWRzW2ldLnNpemUsCisJCQlwYW5lbF9vbl9jbWRzW2ldLmNv bW1hbmRzKTsKKworCWlmIChyZXQgPCAwKSB7CisJCURSTV9ERVZfRVJST1IoY3R4LT5kZXYsCisJ CQkicGFuZWxfY21kc19zZXQgZmFpbGVkIHJldCA9ICVkXG4iLAorCQkJcmV0KTsKKwl9CisKKwkv KiBBcyBwZXIgRFNJIHNwZWMgbmVlZCB0byB3YWl0IGZvciAxMjBtcworCSAqIGFmdGVyIHNlbmRp bmcgdGhlIGV4aXQgc2xlZXAgRENTIGNvbW1hbmQKKwkgKi8KKworCXRydWx5X2NhbGxfd3JpdGVf ZnVuYyhyZXQsIHRydWx5X2Rjc193cml0ZSwgcGFuZWwsCisJCU1JUElfRENTX0VYSVRfU0xFRVBf TU9ERSk7CisKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LAorCQkJ ImV4aXRfc2xlZXBfbW9kZSBjbWQgZmFpbGVkIHJldCA9ICVkXG4iLAorCQkJcmV0KTsKKwl9CisK Kwltc2xlZXAoMTIwKTsKKworCXRydWx5X2NhbGxfd3JpdGVfZnVuYyhyZXQsIHRydWx5X2Rjc193 cml0ZSwgcGFuZWwsCisJCU1JUElfRENTX1NFVF9ESVNQTEFZX09OKTsKKworCWlmIChyZXQgPCAw KSB7CisJCURSTV9ERVZfRVJST1IoY3R4LT5kZXYsCisJCQkic2V0X2Rpc3BsYXlfb24gY21kIGZh aWxlZCByZXQgPSAlZFxuIiwKKwkJCXJldCk7CisJfQorCisJLyogQWRkaW5nIDEyMG1zIGRlbGF5 IGJlZm9yZSB0aGUgc3RhcnQgb2YKKwkgKiBwaXhlbCBzdHJlYW0gdG8gdGhlIHBhbmVsIGFmdGVy IHNlbmRpbmcKKwkgKiB0aGUgc2V0X2Rpc3BsYXlfb24gRENTIGNvbW1hbmQKKwkgKi8KKworCW1z bGVlcCgxMjApOworCisJY3R4LT5wcmVwYXJlZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCB0cnVseV9udDM1NTk3X2VuYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkK K3sKKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4ID0gcGFuZWxfdG9fY3R4KHBhbmVsKTsKKwlp bnQgcmV0OworCisJaWYgKGN0eC0+ZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY3R4LT5i YWNrbGlnaHQpIHsKKwkJcmV0ID0gYmFja2xpZ2h0X2VuYWJsZShjdHgtPmJhY2tsaWdodCk7CisJ CWlmIChyZXQgPCAwKQorCQkJRFJNX0RFVl9FUlJPUihjdHgtPmRldiwgImJhY2tsaWdodCBlbmFi bGUgZmFpbGVkICVkXG4iLAorCQkJCQkJICByZXQpOworCX0KKworCWN0eC0+ZW5hYmxlZCA9IHRy dWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cnVseV9udDM1NTk3X2dldF9tb2Rl cyhzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yID0gcGFuZWwtPmNvbm5lY3RvcjsKKwlzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4ID0g cGFuZWxfdG9fY3R4KHBhbmVsKTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKwlj b25zdCBzdHJ1Y3QgbnQzNTU5N19jb25maWcgKmNvbmZpZzsKKworCWNvbmZpZyA9IGN0eC0+Y29u ZmlnOworCW1vZGUgPSBkcm1fbW9kZV9jcmVhdGUoY29ubmVjdG9yLT5kZXYpOworCWlmICghbW9k ZSkgeworCQlEUk1fREVWX0VSUk9SKGN0eC0+ZGV2LAorCQkJImZhaWxlZCB0byBjcmVhdGUgYSBu ZXcgZGlzcGxheSBtb2RlXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY29ubmVjdG9yLT5kaXNw bGF5X2luZm8ud2lkdGhfbW0gPSBjb25maWctPndpZHRoX21tOworCWNvbm5lY3Rvci0+ZGlzcGxh eV9pbmZvLmhlaWdodF9tbSA9IGNvbmZpZy0+aGVpZ2h0X21tOworCS8qIENvcHkgdGhlIG1vZGUg ZnJvbSB0aGUgRFQgYW5kIGFkZCBpdCAqLworCWRybV9tb2RlX2NvcHkobW9kZSwgY29uZmlnLT5k bSk7CisJbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJNX01PREVfVFlQRV9Q UkVGRVJSRUQ7CisJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOworCisJcmV0 dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BhbmVsX2Z1bmNzIHRydWx5X250 MzU1OTdfZHJtX2Z1bmNzID0geworCS5kaXNhYmxlID0gdHJ1bHlfbnQzNTU5N19kaXNhYmxlLAor CS51bnByZXBhcmUgPSB0cnVseV9udDM1NTk3X3VucHJlcGFyZSwKKwkucHJlcGFyZSA9IHRydWx5 X250MzU1OTdfcHJlcGFyZSwKKwkuZW5hYmxlID0gdHJ1bHlfbnQzNTU5N19lbmFibGUsCisJLmdl dF9tb2RlcyA9IHRydWx5X250MzU1OTdfZ2V0X21vZGVzLAorfTsKKworc3RhdGljIGludCB0cnVs eV9udDM1NTk3X3BhbmVsX2FkZChzdHJ1Y3QgdHJ1bHlfbnQzNTU5NyAqY3R4KQoreworCXN0cnVj dCBkZXZpY2UgKmRldiA9IGN0eC0+ZGV2OworCWludCByZXQsIGk7CisJY29uc3Qgc3RydWN0IG50 MzU1OTdfY29uZmlnICpjb25maWc7CisKKwljb25maWcgPSBjdHgtPmNvbmZpZzsKKwlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKTsgaSsrKQorCQljdHgtPnN1cHBsaWVz W2ldLnN1cHBseSA9IHJlZ3VsYXRvcl9uYW1lc1tpXTsKKworCXJldCA9IGRldm1fcmVndWxhdG9y X2J1bGtfZ2V0KGRldiwgQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwKKwkJCQkgICAgICBjdHgt PnN1cHBsaWVzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWN0eC0+cmVzZXRf Z3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInJlc2V0IiwgR1BJT0RfT1VUX0hJR0gpOworCWlm IChJU19FUlIoY3R4LT5yZXNldF9ncGlvKSkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgImNhbm5v dCBnZXQgcmVzZXQgZ3BpbyAlbGRcbiIsCisJCQlQVFJfRVJSKGN0eC0+cmVzZXRfZ3BpbykpOwor CQlyZXR1cm4gUFRSX0VSUihjdHgtPnJlc2V0X2dwaW8pOworCX0KKworCWN0eC0+bW9kZV9ncGlv ID0gZGV2bV9ncGlvZF9nZXQoZGV2LCAibW9kZSIsIEdQSU9EX09VVF9MT1cpOworCWlmIChJU19F UlIoY3R4LT5tb2RlX2dwaW8pKSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiY2Fubm90IGdldCBt b2RlIGdwaW8gJWxkXG4iLAorCQkJUFRSX0VSUihjdHgtPm1vZGVfZ3BpbykpOworCQlyZXR1cm4g UFRSX0VSUihjdHgtPm1vZGVfZ3Bpbyk7CisJfQorCisJLyogZHVhbCBwb3J0ICovCisJZ3Bpb2Rf c2V0X3ZhbHVlKGN0eC0+bW9kZV9ncGlvLCAwKTsKKworCWRybV9wYW5lbF9pbml0KCZjdHgtPnBh bmVsKTsKKwljdHgtPnBhbmVsLmRldiA9IGRldjsKKwljdHgtPnBhbmVsLmZ1bmNzID0gJnRydWx5 X250MzU1OTdfZHJtX2Z1bmNzOworCWRybV9wYW5lbF9hZGQoJmN0eC0+cGFuZWwpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBxY29tX3NkbTg0NV9t dHBfMmtfbW9kZSA9IHsKKwkubmFtZSA9ICIxNDQweDI1NjAiLAorCS5jbG9jayA9IDI2ODMxNiwK KwkuaGRpc3BsYXkgPSAxNDQwLAorCS5oc3luY19zdGFydCA9IDE0NDAgKyAyMDAsCisJLmhzeW5j X2VuZCA9IDE0NDAgKyAyMDAgKyAzMiwKKwkuaHRvdGFsID0gMTQ0MCArIDIwMCArIDMyICsgNjQs CisJLnZkaXNwbGF5ID0gMjU2MCwKKwkudnN5bmNfc3RhcnQgPSAyNTYwICsgOCwKKwkudnN5bmNf ZW5kID0gMjU2MCArIDggKyAxLAorCS52dG90YWwgPSAyNTYwICsgOCArIDEgKyA3LAorCS52cmVm cmVzaCA9IDYwLAorCS5mbGFncyA9IDAsCit9OworCitzdGF0aWMgc3RydWN0IG50MzU1OTdfY29u ZmlnIG50MzU1OTdfZGlyID0geworCS53aWR0aF9tbSA9IDc0LAorCS5oZWlnaHRfbW0gPSAxMzEs CisJLnBhbmVsX25hbWUgPSAicWNvbV9zZG04NDVfbXRwXzJrX3BhbmVsIiwKKwkuZG0gPSAmcWNv bV9zZG04NDVfbXRwXzJrX21vZGUsCisJLnBhbmVsX29uX2NtZHMgPSBxY29tXzJrX3BhbmVsX21h Z2ljX2NtZHMsCisJLm51bV9vbl9jbWRzID0gQVJSQVlfU0laRShxY29tXzJrX3BhbmVsX21hZ2lj X2NtZHMpLAorfTsKKworc3RhdGljIGludCB0cnVseV9udDM1NTk3X3Byb2JlKHN0cnVjdCBtaXBp X2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHNpLT5kZXY7CisJ c3RydWN0IHRydWx5X250MzU1OTcgKmN0eDsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kx X2RldmljZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRzaTE7CisJc3RydWN0IG1pcGlfZHNpX2hv c3QgKmRzaTFfaG9zdDsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2lfZGV2OworCWludCBy ZXQgPSAwOworCWludCBpOworCisJY29uc3Qgc3RydWN0IG1pcGlfZHNpX2RldmljZV9pbmZvIGlu Zm8gPSB7LnR5cGUgPSAidHJ1bHludDM1NTk3IiwKKwkJLmNoYW5uZWwgPSAwLAorCQkubm9kZSA9 IE5VTEwsCisJfTsKKworCWN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQ X0tFUk5FTCk7CisKKwlpZiAoIWN0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBUaGlzIGRl dmljZSByZXByZXNlbnRzIGl0c2VsZiBhcyBvbmUgd2l0aAorCSAqIHR3byBpbnB1dCBwb3J0cyB3 aGljaCBhcmUgZmVkIGJ5IHRoZSBvdXRwdXQKKwkgKiBwb3J0cyBvZiB0aGUgdHdvIERTSSBjb250 cm9sbGVycyAuIFRoZSBEU0kwCisJICogaXMgdGhlIG1hc3RlciBjb250cm9sbGVyIGFuZCBoYXMg bW9zdCBvZiB0aGUKKwkgKiBwYW5lbCByZWxhdGVkIGluZm8gaW4gaXRzIGNoaWxkIG5vZGUuCisJ ICovCisKKwljdHgtPmNvbmZpZyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOworCisJ aWYgKCFjdHgtPmNvbmZpZykgeworCQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgZGV2aWNlIGNvbmZp Z3VyYXRpb25cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkc2kxID0gb2ZfZ3JhcGhf Z2V0X3JlbW90ZV9ub2RlKGRzaS0+ZGV2Lm9mX25vZGUsIDEsIC0xKTsKKwlpZiAoIWRzaTEpIHsK KwkJRFJNX0RFVl9FUlJPUihkZXYsCisJCQkiZmFpbGVkIHRvIGdldCByZW1vdGUgbm9kZSBmb3Ig ZHNpMV9kZXZpY2VcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9nZXRfcmVtb3Rl OworCX0KKworCWRzaTFfaG9zdCA9IG9mX2ZpbmRfbWlwaV9kc2lfaG9zdF9ieV9ub2RlKGRzaTEp OworCWlmICghZHNpMV9ob3N0KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiZmFpbGVkIHRvIGZp bmQgZHNpIGhvc3RcbiIpOworCQlyZXQgPSAtRVBST0JFX0RFRkVSOworCQlnb3RvIGVycl9ob3N0 OworCX0KKworCW9mX25vZGVfcHV0KGRzaTEpOworCisJLyogcmVnaXN0ZXIgdGhlIHNlY29uZCBE U0kgZGV2aWNlICovCisJZHNpMV9kZXZpY2UgPSBtaXBpX2RzaV9kZXZpY2VfcmVnaXN0ZXJfZnVs bChkc2kxX2hvc3QsICZpbmZvKTsKKwlpZiAoSVNfRVJSKGRzaTFfZGV2aWNlKSkgeworCQlEUk1f REVWX0VSUk9SKGRldiwgImZhaWxlZCB0byBjcmVhdGUgZHNpIGRldmljZVxuIik7CisJCXJldCA9 IFBUUl9FUlIoZHNpKTsKKwkJZ290byBlcnJfZHNpX2RldmljZTsKKwl9CisKKwltaXBpX2RzaV9z ZXRfZHJ2ZGF0YShkc2ksIGN0eCk7CisKKwljdHgtPmRldiA9IGRldjsKKwljdHgtPmRzaVswXSA9 IGRzaTsKKwljdHgtPmRzaVsxXSA9IGRzaTFfZGV2aWNlOworCisJcmV0ID0gdHJ1bHlfbnQzNTU5 N19wYW5lbF9hZGQoY3R4KTsKKwlpZiAocmV0KSB7CisJCURSTV9ERVZfRVJST1IoZGV2LCAiZmFp bGVkIHRvIGFkZCBwYW5lbFxuIik7CisJCWdvdG8gZXJyX3BhbmVsX2FkZDsKKwl9CisKKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPmRzaSk7IGkrKykgeworCQlkc2lfZGV2ID0gY3R4 LT5kc2lbaV07CisJCWRzaV9kZXYtPmxhbmVzID0gNDsKKwkJZHNpX2Rldi0+Zm9ybWF0ID0gTUlQ SV9EU0lfRk1UX1JHQjg4ODsKKwkJZHNpX2Rldi0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01PREVf VklERU8gfCBNSVBJX0RTSV9NT0RFX0xQTSB8CisJCQlNSVBJX0RTSV9DTE9DS19OT05fQ09OVElO VU9VUzsKKwkJcmV0ID0gbWlwaV9kc2lfYXR0YWNoKGRzaV9kZXYpOworCQlpZiAocmV0IDwgMCkg eworCQkJRFJNX0RFVl9FUlJPUihkZXYsCisJCQkJImRzaSBhdHRhY2ggZmFpbGVkIGkgPSAlZFxu IiwgaSk7CisJCQkJZ290byBlcnJfZHNpX2F0dGFjaDsKKwkJfQorCX0KKworCXJldHVybiAwOwor CitlcnJfZHNpX2F0dGFjaDoKKwlkcm1fcGFuZWxfcmVtb3ZlKCZjdHgtPnBhbmVsKTsKK2Vycl9w YW5lbF9hZGQ6CisJbWlwaV9kc2lfZGV2aWNlX3VucmVnaXN0ZXIoZHNpMV9kZXZpY2UpOworZXJy X2RzaV9kZXZpY2U6CitlcnJfaG9zdDoKKwlvZl9ub2RlX3B1dChkc2kxKTsKK2Vycl9nZXRfcmVt b3RlOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bHlfbnQzNTU5N19yZW1vdmUo c3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCB0cnVseV9udDM1NTk3ICpj dHggPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShkc2kpOworCisJaWYgKGN0eC0+ZHNpWzBdKQorCQlt aXBpX2RzaV9kZXRhY2goY3R4LT5kc2lbMF0pOworCWlmIChjdHgtPmRzaVsxXSkgeworCQltaXBp X2RzaV9kZXRhY2goY3R4LT5kc2lbMV0pOworCQltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3Rlcihj dHgtPmRzaVsxXSk7CisJfQorCisJZHJtX3BhbmVsX3JlbW92ZSgmY3R4LT5wYW5lbCk7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRydWx5X3dxeGdh X29mX21hdGNoW10gPSB7CisJewkuY29tcGF0aWJsZSA9ICJxY29tLHNkbTg0NS1tdHAtMkstZGlz cGxheSIsCisJCS5kYXRhID0gJm50MzU1OTdfZGlyLAorCX0sCisKKwl7IH0KK307CitNT0RVTEVf REVWSUNFX1RBQkxFKG9mLCB0cnVseV93cXhnYV9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qg bWlwaV9kc2lfZHJpdmVyIHRydWx5X3dxeGdhX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQku bmFtZSA9ICJwYW5lbF90cnVseV9udDM1NTk3IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gdHJ1bHlf d3F4Z2Ffb2ZfbWF0Y2gsCisJfSwKKwkucHJvYmUgPSB0cnVseV9udDM1NTk3X3Byb2JlLAorCS5y ZW1vdmUgPSB0cnVseV9udDM1NTk3X3JlbW92ZSwKK307Cittb2R1bGVfbWlwaV9kc2lfZHJpdmVy KHRydWx5X3dxeGdhX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiVHJ1bHkgTlQzNTU5 NyBEU0kgUGFuZWwgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0tIApUaGUg UXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBtZW1iZXIgb2YgdGhlIENvZGUg QXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0Cgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwg bWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK