From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v1,2/2] usb: dwc3: Add Qualcomm DWC3 glue driver From: Manu Gautam Message-Id: <1520937362-28777-2-git-send-email-mgautam@codeaurora.org> Date: Tue, 13 Mar 2018 16:06:01 +0530 To: Felipe Balbi , Rob Herring Cc: linux-arm-msm@vger.kernel.org, linux-usb@vger.kernel.org, Manu Gautam , Greg Kroah-Hartman , open list List-ID: RFdDMyBjb250cm9sbGVyIG9uIFF1YWxjb21tIFNPQ3MgaGFzIGEgUXNjcmF0Y2ggd3JhcHBlci4K U29tZSBvZiBpdHMgdXNlcyBhcmUgZGVzY3JpYmVkIGJlbG93IHJlc3VsdGluZyBpbiBuZWVkIHRv CmhhdmUgYSBzZXBhcmF0ZSBnbHVlIGRyaXZlciBpbnN0ZWFkIG9mIHVzaW5nIGR3YzMtb2Ytc2lt cGxlOgogLSBJdCBleHBvc2VzIHJlZ2lzdGVyIGludGVyZmFjZSB0byBvdmVycmlkZSB2YnVzLW92 ZXJyaWRlCiAgIGFuZCBsYW5lMC1wd3ItcHJlc2VudCBzaWduYWxzIGdvaW5nIHRvIGhhcmR3YXJl LiBUaGVzZQogICBtdXN0IGJlIHVwZGF0ZWQgaW4gcGVyaXBoZXJhbCBtb2RlIGZvciBEV0MzIGlm IHZidXMgbGluZXMKICAgYXJlIG5vdCBjb25uZWN0ZWQgdG8gaGFyZHdhcmUgYmxvY2suIE90aGVy d2lzZSBSWCB0ZXJtaW5hdGlvbgogICBpbiBTUyBtb2RlIG9yIERQIHB1bGwtdXAgaXMgbm90IGFw cGxpZWQgYnkgZGV2aWNlIGNvbnRyb2xsZXIuCiAtIHB3cl9ldmVudHNfaXJxX3N0YXQgc3VwcG9y dCB0byBlbnN1cmUgVVNCMiBQSFkgaXMgaW4gTDIgc3RhdGUKICAgYmVmb3JlIGdsdWUgZHJpdmVy IGNhbiB0dXJuLW9mZiBjbG9ja3MgYW5kIHN1c3BlbmQgUEhZLgogLSBTdXBwb3J0IGZvciB3YWtl dXAgaW50ZXJydXB0cyBsaW5lcyB0aGF0IGFyZSBhc3NlcnRlZCB3aGVuZXZlcgogICB0aGVyZSBp cyBhbnkgd2FrZXVwIGV2ZW50IG9uIFVTQjMgb3IgVVNCMiBidXMuCiAtIFN1cHBvcnQgdG8gcmVw bGFjZSBwaXAzIGNsb2NrIGdvaW5nIHRvIERXQzMgd2l0aCB1dG1pIGNsb2NrCiAgIGZvciBoYXJk d2FyZSBjb25maWd1cmF0aW9uIHdoZXJlIFNTUEhZIGlzIG5vdCB1c2VkIHdpdGggRFdDMy4KCk90 aGVyIHRoYW4gYWJvdmUgaGFyZHdhcmUgZmVhdHVyZXMgaW4gUXNjcmF0Y2ggd3JhcHBlciB0aGVy ZQphcmUgc29tZSBsaW1pdGF0aW9ucyBvbiBRQ09NIFNPQ3MgdGhhdCByZXF1aXJlIHNwZWNpYWwg aGFuZGxpbmcKb2YgcG93ZXIgbWFuYWdlbWVudCBlLmcuIHN1c3BlbmRpbmcgUEhZIHVzaW5nIEdV U0IyUEhZQ0ZHCnJlZ2lzdGVyIGFuZCBlbnN1cmluZyBQSFkgZW50ZXJzIEwyIGJlZm9yZSB0dXJu aW5nIG9mZiBjbG9ja3MgZXRjLgoKU2lnbmVkLW9mZi1ieTogTWFudSBHYXV0YW0gPG1nYXV0YW1A Y29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy91c2IvZHdjMy9LY29uZmlnICAgICAgICAgIHwg IDExICsKIGRyaXZlcnMvdXNiL2R3YzMvTWFrZWZpbGUgICAgICAgICB8ICAgMSArCiBkcml2ZXJz L3VzYi9kd2MzL2R3YzMtb2Ytc2ltcGxlLmMgfCAgIDEgLQogZHJpdmVycy91c2IvZHdjMy9kd2Mz LXFjb20uYyAgICAgIHwgNjM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiA0IGZpbGVzIGNoYW5nZWQsIDY0NyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvZHdjMy9kd2MzLXFjb20uYwoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvdXNiL2R3YzMvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2R3YzMvS2NvbmZpZwppbmRl eCBhYjhjMGUwLi5mNWJiNGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MzL0tjb25maWcK KysrIGIvZHJpdmVycy91c2IvZHdjMy9LY29uZmlnCkBAIC0xMDYsNCArMTA2LDE1IEBAIGNvbmZp ZyBVU0JfRFdDM19TVAogCSAgaW5zaWRlIChpLmUuIFNUaUg0MDcpLgogCSAgU2F5ICdZJyBvciAn TScgaWYgeW91IGhhdmUgb25lIHN1Y2ggZGV2aWNlLgogCitjb25maWcgVVNCX0RXQzNfUUNPTQor CXRyaXN0YXRlICJRdWFsY29tbSBQbGF0Zm9ybSIKKwlkZXBlbmRzIG9uIEFSQ0hfUUNPTSB8fCBD T01QSUxFX1RFU1QKKwlkZXBlbmRzIG9uIE9GCisJZGVmYXVsdCBVU0JfRFdDMworCWhlbHAKKwkg IFNvbWUgUXVhbGNvbW0gU29DcyB1c2UgRGVzaWduV2FyZSBDb3JlIElQIGZvciBVU0IyLzMKKwkg IGZ1bmN0aW9uYWxpdHkuCisKKwkgIFNheSAnWScgb3IgJ00nIGlmIHlvdSBoYXZlIG9uZSBzdWNo IGRldmljZS4KKwogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3YzMvTWFrZWZpbGUg Yi9kcml2ZXJzL3VzYi9kd2MzL01ha2VmaWxlCmluZGV4IDdhYzcyNTAuLmMzY2U2OTcgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvdXNiL2R3YzMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvZHdjMy9N YWtlZmlsZQpAQCAtNDgsMyArNDgsNCBAQCBvYmotJChDT05GSUdfVVNCX0RXQzNfUENJKQkJKz0g ZHdjMy1wY2kubwogb2JqLSQoQ09ORklHX1VTQl9EV0MzX0tFWVNUT05FKQkJKz0gZHdjMy1rZXlz dG9uZS5vCiBvYmotJChDT05GSUdfVVNCX0RXQzNfT0ZfU0lNUExFKQkrPSBkd2MzLW9mLXNpbXBs ZS5vCiBvYmotJChDT05GSUdfVVNCX0RXQzNfU1QpCQkrPSBkd2MzLXN0Lm8KK29iai0kKENPTkZJ R19VU0JfRFdDM19RQ09NKQkJKz0gZHdjMy1xY29tLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNi L2R3YzMvZHdjMy1vZi1zaW1wbGUuYyBiL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1vZi1zaW1wbGUu YwppbmRleCBjYjJlZTk2Li4wZmQwZThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MzL2R3 YzMtb2Ytc2ltcGxlLmMKKysrIGIvZHJpdmVycy91c2IvZHdjMy9kd2MzLW9mLXNpbXBsZS5jCkBA IC0yMDgsNyArMjA4LDYgQEAgc3RhdGljIGludCBkd2MzX29mX3NpbXBsZV9ydW50aW1lX3Jlc3Vt ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCBvZl9kd2MzX3NpbXBsZV9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAicWNvbSxk d2MzIiB9LAogCXsgLmNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMzk5LWR3YzMiIH0sCiAJeyAu Y29tcGF0aWJsZSA9ICJ4bG54LHp5bnFtcC1kd2MzIiB9LAogCXsgLmNvbXBhdGlibGUgPSAiY2F2 aXVtLG9jdGVvbi03MTMwLXVzYi11Y3RsIiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdj My9kd2MzLXFjb20uYyBiL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1xY29tLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE3MTk5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvdXNiL2R3YzMvZHdjMy1xY29tLmMKQEAgLTAsMCArMSw2MzUgQEAKKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKiBDb3B5cmlnaHQgKGMpIDIwMTgsIFRoZSBMaW51eCBG b3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEluc3BpcmVkIGJ5IGR3YzMt b2Ytc2ltcGxlLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51 eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgor I2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5o PgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2V4dGNvbi5oPgor I2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3Vz Yi9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb2xs Lmg+CisKKyNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAiaW8uaCIKKworLyogVVNCIFFTQ1JB VENIIEhhcmR3YXJlIHJlZ2lzdGVycyAqLworI2RlZmluZSBRU0NSQVRDSF9IU19QSFlfQ1RSTAkJ CTB4MTAKKyNkZWZpbmUgVVRNSV9PVEdfVkJVU19WQUxJRAkJCUJJVCgyMCkKKyNkZWZpbmUgU1df U0VTU1ZMRF9TRUwJCQkJQklUKDI4KQorCisjZGVmaW5lIFFTQ1JBVENIX1NTX1BIWV9DVFJMCQkJ MHgzMAorI2RlZmluZSBMQU5FMF9QV1JfUFJFU0VOVAkJCUJJVCgyNCkKKworI2RlZmluZSBRU0NS QVRDSF9HRU5FUkFMX0NGRwkJCTB4MDgKKyNkZWZpbmUgUElQRV9VVE1JX0NMS19TRUwJCQlCSVQo MCkKKyNkZWZpbmUgUElQRTNfUEhZU1RBVFVTX1NXCQkJQklUKDMpCisjZGVmaW5lIFBJUEVfVVRN SV9DTEtfRElTCQkJQklUKDgpCisKKyNkZWZpbmUgUFdSX0VWTlRfSVJRX1NUQVRfUkVHCQkJMHg1 OAorI2RlZmluZSBQV1JfRVZOVF9MUE1fSU5fTDJfTUFTSwkJCUJJVCg0KQorI2RlZmluZSBQV1Jf RVZOVF9MUE1fT1VUX0wyX01BU0sJCUJJVCg1KQorCisjZGVmaW5lIEhTUEhZX0wyX0VOVEVSX1RJ TUVPVVRfVVMJCTUwMDAKKworc3RydWN0IGR3YzNfcWNvbSB7CisJc3RydWN0IGRldmljZQkJKmRl djsKKwl2b2lkIF9faW9tZW0JCSpxc2NyYXRjaF9iYXNlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UJKmR3YzM7CisJc3RydWN0IGNsawkJKipjbGtzOworCWludAkJCW51bV9jbG9ja3M7CisJc3Ry dWN0IHJlc2V0X2NvbnRyb2wJKnJlc2V0czsKKworCWludAkJCWRwX2hzX3BoeV9pcnE7CisJaW50 CQkJZG1faHNfcGh5X2lycTsKKwlpbnQJCQlzc19waHlfaXJxOworCisJc3RydWN0IGV4dGNvbl9k ZXYJKmVkZXY7CisJc3RydWN0IGV4dGNvbl9kZXYJKmhvc3RfZWRldjsKKwlzdHJ1Y3Qgbm90aWZp ZXJfYmxvY2sJdmJ1c19uYjsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJaG9zdF9uYjsKKworCWVu dW0gdXNiX2RyX21vZGUJbW9kZTsKKwlib29sCQkJaXNfc3VzcGVuZGVkOworCWJvb2wJCQlwbV9z dXNwZW5kZWQ7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgZHdjM19xY29tX3NldGJpdHModm9p ZCBfX2lvbWVtICpiYXNlLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKQoreworCXUzMiByZWc7CisKKwly ZWcgPSByZWFkbChiYXNlICsgb2Zmc2V0KTsKKwlyZWcgfD0gdmFsOworCXdyaXRlbChyZWcsIGJh c2UgKyBvZmZzZXQpOworCisJLyogZW5zdXJlIHRoYXQgYWJvdmUgd3JpdGUgaXMgdGhyb3VnaCAq LworCXJlYWRsKGJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHdjM19x Y29tX2NscmJpdHModm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKQorewor CXUzMiByZWc7CisKKwlyZWcgPSByZWFkbChiYXNlICsgb2Zmc2V0KTsKKwlyZWcgJj0gfnZhbDsK Kwl3cml0ZWwocmVnLCBiYXNlICsgb2Zmc2V0KTsKKworCS8qIGVuc3VyZSB0aGF0IGFib3ZlIHdy aXRlIGlzIHRocm91Z2ggKi8KKwlyZWFkbChiYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZv aWQgZHdjM19xY29tX3ZidXNfb3ZlcnJyaWRlX2VuYWJsZShzdHJ1Y3QgZHdjM19xY29tICpxY29t LCBib29sIGVuYWJsZSkKK3sKKwlpZiAoZW5hYmxlKSB7CisJCWR3YzNfcWNvbV9zZXRiaXRzKHFj b20tPnFzY3JhdGNoX2Jhc2UsIFFTQ1JBVENIX1NTX1BIWV9DVFJMLAorCQkJCSAgTEFORTBfUFdS X1BSRVNFTlQpOworCQlkd2MzX3Fjb21fc2V0Yml0cyhxY29tLT5xc2NyYXRjaF9iYXNlLCBRU0NS QVRDSF9IU19QSFlfQ1RSTCwKKwkJCQkgIFVUTUlfT1RHX1ZCVVNfVkFMSUQgfCBTV19TRVNTVkxE X1NFTCk7CisJfSBlbHNlIHsKKwkJZHdjM19xY29tX2NscmJpdHMocWNvbS0+cXNjcmF0Y2hfYmFz ZSwgUVNDUkFUQ0hfU1NfUEhZX0NUUkwsCisJCQkJICBMQU5FMF9QV1JfUFJFU0VOVCk7CisJCWR3 YzNfcWNvbV9jbHJiaXRzKHFjb20tPnFzY3JhdGNoX2Jhc2UsIFFTQ1JBVENIX0hTX1BIWV9DVFJM LAorCQkJCSAgVVRNSV9PVEdfVkJVU19WQUxJRCB8IFNXX1NFU1NWTERfU0VMKTsKKwl9Cit9CisK K3N0YXRpYyBpbnQgZHdjM19xY29tX3ZidXNfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2Nr ICpuYiwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCit7CisJc3RydWN0 IGR3YzNfcWNvbSAqcWNvbSA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IGR3YzNfcWNvbSwgdmJ1 c19uYik7CisKKwlkZXZfZGJnKHFjb20tPmRldiwgInZidXM6JWxkIGV2ZW50IHJlY2VpdmVkXG4i LCBldmVudCk7CisKKwkvKiBlbmFibGUgdmJ1cyBvdmVycmlkZSBmb3IgZGV2aWNlIG1vZGUgKi8K Kwlkd2MzX3Fjb21fdmJ1c19vdmVycnJpZGVfZW5hYmxlKHFjb20sIGV2ZW50KTsKKwlxY29tLT5t b2RlID0gZXZlbnQgPyBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMIDogVVNCX0RSX01PREVfSE9TVDsK KworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIGludCBkd2MzX3Fjb21faG9zdF9u b3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcg ZXZlbnQsIHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgZHdjM19xY29tICpxY29tID0gY29udGFpbmVy X29mKG5iLCBzdHJ1Y3QgZHdjM19xY29tLCBob3N0X25iKTsKKworCWRldl9kYmcocWNvbS0+ZGV2 LCAiaG9zdDolbGQgZXZlbnQgcmVjZWl2ZWRcbiIsIGV2ZW50KTsKKworCS8qIGRpc2FibGUgdmJ1 cyBvdmVycmlkZSBpbiBob3N0IG1vZGUgKi8KKwlkd2MzX3Fjb21fdmJ1c19vdmVycnJpZGVfZW5h YmxlKHFjb20sICFldmVudCk7CisJcWNvbS0+bW9kZSA9IGV2ZW50ID8gVVNCX0RSX01PREVfSE9T VCA6IFVTQl9EUl9NT0RFX1BFUklQSEVSQUw7CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisK K3N0YXRpYyBpbnQgZHdjM19xY29tX3JlZ2lzdGVyX2V4dGNvbihzdHJ1Y3QgZHdjM19xY29tICpx Y29tKQoreworCXN0cnVjdCBkZXZpY2UJCSpkZXYgPSBxY29tLT5kZXY7CisJc3RydWN0IGV4dGNv bl9kZXYJKmhvc3RfZWRldjsKKwlpbnQJCQlyZXQ7CisKKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRf Ym9vbChkZXYtPm9mX25vZGUsICJleHRjb24iKSkKKwkJcmV0dXJuIDA7CisKKwlxY29tLT5lZGV2 ID0gZXh0Y29uX2dldF9lZGV2X2J5X3BoYW5kbGUoZGV2LCAwKTsKKwlpZiAoSVNfRVJSKHFjb20t PmVkZXYpKQorCQlyZXR1cm4gUFRSX0VSUihxY29tLT5lZGV2KTsKKworCXFjb20tPnZidXNfbmIu bm90aWZpZXJfY2FsbCA9IGR3YzNfcWNvbV92YnVzX25vdGlmaWVyOworCisJcWNvbS0+aG9zdF9l ZGV2ID0gZXh0Y29uX2dldF9lZGV2X2J5X3BoYW5kbGUoZGV2LCAxKTsKKwlpZiAoSVNfRVJSKHFj b20tPmhvc3RfZWRldikpIHsKKwkJcWNvbS0+aG9zdF9lZGV2ID0gTlVMTDsKKwkJZGV2X2luZm8o ZGV2LCAiTm8gc2VwYXJhdGUgSUQvaG9zdCBleHRjb24gZGV2aWNlXG4iKTsKKwl9CisKKwlyZXQg PSBkZXZtX2V4dGNvbl9yZWdpc3Rlcl9ub3RpZmllcihkZXYsIHFjb20tPmVkZXYsIEVYVENPTl9V U0IsCisJCQkJCSAgICAmcWNvbS0+dmJ1c19uYik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vy cihkZXYsICJWQlVTIG5vdGlmaWVyIHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7 CisJfQorCisJaWYgKHFjb20tPmhvc3RfZWRldikKKwkJaG9zdF9lZGV2ID0gcWNvbS0+aG9zdF9l ZGV2OworCWVsc2UKKwkJaG9zdF9lZGV2ID0gcWNvbS0+ZWRldjsKKworCXFjb20tPmhvc3RfbmIu bm90aWZpZXJfY2FsbCA9IGR3YzNfcWNvbV9ob3N0X25vdGlmaWVyOworCXJldCA9IGRldm1fZXh0 Y29uX3JlZ2lzdGVyX25vdGlmaWVyKGRldiwgaG9zdF9lZGV2LCBFWFRDT05fVVNCX0hPU1QsCisJ CQkJCSAgICAmcWNvbS0+aG9zdF9uYik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYs ICJIb3N0IG5vdGlmaWVyIHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQor CisJLyogVXBkYXRlIGluaXRpYWwgVkJVUyBvdmVycmlkZSBzdGF0ZSBmcm9tIGV4dGNvbiAqLwor CWlmIChleHRjb25fZ2V0X3N0YXRlKHFjb20tPmVkZXYsIEVYVENPTl9VU0IpIHx8CisJICAgICFl eHRjb25fZ2V0X3N0YXRlKGhvc3RfZWRldiwgRVhUQ09OX1VTQl9IT1NUKSkKKwkJZHdjM19xY29t X3ZidXNfbm90aWZpZXIoJnFjb20tPnZidXNfbmIsIHRydWUsIHFjb20tPmVkZXYpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR3YzNfcWNvbV9zdXNwZW5kX2hzcGh5KHN0cnVjdCBk d2MzX3Fjb20gKnFjb20pCit7CisJc3RydWN0IGR3YzMJKmR3YyA9IHBsYXRmb3JtX2dldF9kcnZk YXRhKHFjb20tPmR3YzMpOworCWludAkJcmV0OworCXUzMgkJdmFsOworCisJLyogQ2xlYXIgcHJl dmlvdXMgTDIgZXZlbnRzICovCisJZHdjM19xY29tX3NldGJpdHMocWNvbS0+cXNjcmF0Y2hfYmFz ZSwgUFdSX0VWTlRfSVJRX1NUQVRfUkVHLAorCQkJICBQV1JfRVZOVF9MUE1fSU5fTDJfTUFTSyB8 IFBXUl9FVk5UX0xQTV9PVVRfTDJfTUFTSyk7CisKKwkvKiBBbGxvdyBjb250cm9sbGVyIHRvIHN1 c3BlbmQgSFNQSFkgKi8KKwl2YWwgPSBkd2MzX3JlYWRsKGR3Yy0+cmVncywgRFdDM19HVVNCMlBI WUNGRygwKSk7CisJdmFsIHw9ICBEV0MzX0dVU0IyUEhZQ0ZHX0VOQkxTTFBNIHwgRFdDM19HVVNC MlBIWUNGR19TVVNQSFk7CisJZHdjM193cml0ZWwoZHdjLT5yZWdzLCBEV0MzX0dVU0IyUEhZQ0ZH KDApLCB2YWwpOworCisJLyogV2FpdCBmb3IgUEhZIHRvIGdvIGludG8gTDIgKi8KKwlyZXQgPSBy ZWFkbF9wb2xsX3RpbWVvdXQocWNvbS0+cXNjcmF0Y2hfYmFzZSArIFBXUl9FVk5UX0lSUV9TVEFU X1JFRywKKwkJCQkgdmFsLCAodmFsICYgUFdSX0VWTlRfTFBNX0lOX0wyX01BU0spLCAxMDAsCisJ CQkJIEhTUEhZX0wyX0VOVEVSX1RJTUVPVVRfVVMpOworCWlmIChyZXQpCisJCWRldl9lcnIocWNv bS0+ZGV2LCAiY291bGQgbm90IHRyYW5zaXRpb24gSFMgUEhZIHRvIEwyXG4iKTsKKworCS8qIENs ZWFyIEwyIGV2ZW50IGJpdCAqLworCWR3YzNfcWNvbV9zZXRiaXRzKHFjb20tPnFzY3JhdGNoX2Jh c2UsIFBXUl9FVk5UX0lSUV9TVEFUX1JFRywKKwkJCSAgUFdSX0VWTlRfTFBNX0lOX0wyX01BU0sp OworfQorCitzdGF0aWMgaW50IGR3YzNfcWNvbV9zdXNwZW5kKHN0cnVjdCBkd2MzX3Fjb20gKnFj b20pCit7CisJc3RydWN0IGR3YzMJKmR3YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHFjb20tPmR3 YzMpOworCWludAkJIGk7CisKKwlpZiAocWNvbS0+aXNfc3VzcGVuZGVkKQorCQlyZXR1cm4gMDsK KworCWlmICghZHdjKQorCQlyZXR1cm4gLUVCVVNZOworCisJZHdjM19xY29tX3N1c3BlbmRfaHNw aHkocWNvbSk7CisKKwlpZiAoZHdjLT51c2IyX2dlbmVyaWNfcGh5KQorCQlwaHlfcG1fcnVudGlt ZV9wdXRfc3luYyhkd2MtPnVzYjJfZ2VuZXJpY19waHkpOworCWlmIChkd2MtPnVzYjNfZ2VuZXJp Y19waHkpCisJCXBoeV9wbV9ydW50aW1lX3B1dF9zeW5jKGR3Yy0+dXNiM19nZW5lcmljX3BoeSk7 CisKKwlmb3IgKGkgPSBxY29tLT5udW1fY2xvY2tzIC0gMTsgaSA+PSAwOyBpLS0pCisJCWNsa19k aXNhYmxlX3VucHJlcGFyZShxY29tLT5jbGtzW2ldKTsKKworCWlmIChxY29tLT5kcF9oc19waHlf aXJxKSB7CisJCWVuYWJsZV9pcnEocWNvbS0+ZHBfaHNfcGh5X2lycSk7CisJCWVuYWJsZV9pcnFf d2FrZShxY29tLT5kcF9oc19waHlfaXJxKTsKKwl9CisKKwlpZiAocWNvbS0+ZG1faHNfcGh5X2ly cSkgeworCQllbmFibGVfaXJxKHFjb20tPmRtX2hzX3BoeV9pcnEpOworCQllbmFibGVfaXJxX3dh a2UocWNvbS0+ZG1faHNfcGh5X2lycSk7CisJfQorCisJaWYgKHFjb20tPnNzX3BoeV9pcnEpIHsK KwkJZW5hYmxlX2lycShxY29tLT5zc19waHlfaXJxKTsKKwkJZW5hYmxlX2lycV93YWtlKHFjb20t PnNzX3BoeV9pcnEpOworCX0KKworCXFjb20tPmlzX3N1c3BlbmRlZCA9IHRydWU7CisJZGV2X2Ri ZyhxY29tLT5kZXYsICJEV0MzIGluIGxvdyBwb3dlciBtb2RlXG4iKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGR3YzNfcWNvbV9yZXN1bWUoc3RydWN0IGR3YzNfcWNvbSAqcWNvbSkK K3sKKwlzdHJ1Y3QgZHdjMwkqZHdjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocWNvbS0+ZHdjMyk7 CisJaW50CQlpLCByZXQ7CisJdTMyCQl2YWw7CisKKwlpZiAoIXFjb20tPmlzX3N1c3BlbmRlZCkK KwkJcmV0dXJuIDA7CisKKwlpZiAocWNvbS0+ZHBfaHNfcGh5X2lycSkgeworCQlkaXNhYmxlX2ly cV93YWtlKHFjb20tPmRwX2hzX3BoeV9pcnEpOworCQlkaXNhYmxlX2lycV9ub3N5bmMocWNvbS0+ ZHBfaHNfcGh5X2lycSk7CisJfQorCisJaWYgKHFjb20tPmRtX2hzX3BoeV9pcnEpIHsKKwkJZGlz YWJsZV9pcnFfd2FrZShxY29tLT5kbV9oc19waHlfaXJxKTsKKwkJZGlzYWJsZV9pcnFfbm9zeW5j KHFjb20tPmRtX2hzX3BoeV9pcnEpOworCX0KKworCWlmIChxY29tLT5zc19waHlfaXJxKSB7CisJ CWRpc2FibGVfaXJxX3dha2UocWNvbS0+c3NfcGh5X2lycSk7CisJCWRpc2FibGVfaXJxX25vc3lu YyhxY29tLT5zc19waHlfaXJxKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcWNvbS0+bnVtX2Ns b2NrczsgaSsrKSB7CisJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShxY29tLT5jbGtzW2ldKTsK KwkJaWYgKHJldCA8IDApIHsKKwkJCXdoaWxlICgtLWkgPj0gMCkKKwkJCQljbGtfZGlzYWJsZV91 bnByZXBhcmUocWNvbS0+Y2xrc1tpXSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJaWYg KGR3Yy0+dXNiMl9nZW5lcmljX3BoeSkKKwkJcGh5X3BtX3J1bnRpbWVfZ2V0X3N5bmMoZHdjLT51 c2IyX2dlbmVyaWNfcGh5KTsKKwlpZiAoZHdjLT51c2IzX2dlbmVyaWNfcGh5KQorCQlwaHlfcG1f cnVudGltZV9nZXRfc3luYyhkd2MtPnVzYjNfZ2VuZXJpY19waHkpOworCisJLyogRGlzYWJsZSBI U1BIWSBhdXRvIHN1c3BlbmQgKi8KKwl2YWwgPSBkd2MzX3JlYWRsKGR3Yy0+cmVncywgRFdDM19H VVNCMlBIWUNGRygwKSk7CisJdmFsICY9IH4oRFdDM19HVVNCMlBIWUNGR19FTkJMU0xQTSB8IERX QzNfR1VTQjJQSFlDRkdfU1VTUEhZKTsKKwlkd2MzX3dyaXRlbChkd2MtPnJlZ3MsIERXQzNfR1VT QjJQSFlDRkcoMCksIHZhbCk7CisKKwlxY29tLT5pc19zdXNwZW5kZWQgPSBmYWxzZTsKKworCWRl dl9kYmcocWNvbS0+ZGV2LCAiRFdDMyBleGl0ZWQgZnJvbSBsb3cgcG93ZXIgbW9kZVxuIik7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IHFjb21fZHdjM19yZXN1bWVfaXJx KGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGR3YzNfcWNvbSAqcWNvbSA9IGRhdGE7 CisJc3RydWN0IGR3YzMJKmR3YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHFjb20tPmR3YzMpOwor CisJLyogSWYgcG1fc3VzcGVuZGVkIHRoZW4gbGV0IHBtX3Jlc3VtZSB0YWtlIGNhcmUgb2YgcmVz dW1pbmcgaC93ICovCisJaWYgKHFjb20tPnBtX3N1c3BlbmRlZCkKKwkJcmV0dXJuIElSUV9IQU5E TEVEOworCisJZHdjM19xY29tX3Jlc3VtZShxY29tKTsKKworCWlmIChkd2MtPnhoY2kpIHsKKwkJ ZGV2X2RiZyhxY29tLT5kZXYsICIlczogcmVzdW1pbmcgeGhjaVxuIiwgX19mdW5jX18pOworCQlw bV9ydW50aW1lX3Jlc3VtZSgmZHdjLT54aGNpLT5kZXYpOworCX0KKworCXJldHVybiBJUlFfSEFO RExFRDsKK30KKworc3RhdGljIHZvaWQgZHdjM19xY29tX3NlbGVjdF91dG1pX2NsayhzdHJ1Y3Qg ZHdjM19xY29tICpxY29tKQoreworCS8qIENvbmZpZ3VyZSBtdXggdG8gdXNlIFVUTUkgY2xvY2sg c2luY2UgUElQRSBjbG9jayBub3QgcHJlc2VudCAqLworCWR3YzNfcWNvbV9zZXRiaXRzKHFjb20t PnFzY3JhdGNoX2Jhc2UsIFFTQ1JBVENIX0dFTkVSQUxfQ0ZHLAorCQkJICBQSVBFX1VUTUlfQ0xL X0RJUyk7CisKKwl1c2xlZXBfcmFuZ2UoMTAwLCAxMDAwKTsKKworCWR3YzNfcWNvbV9zZXRiaXRz KHFjb20tPnFzY3JhdGNoX2Jhc2UsIFFTQ1JBVENIX0dFTkVSQUxfQ0ZHLAorCQkJICBQSVBFX1VU TUlfQ0xLX1NFTCB8IFBJUEUzX1BIWVNUQVRVU19TVyk7CisKKwl1c2xlZXBfcmFuZ2UoMTAwLCAx MDAwKTsKKworCWR3YzNfcWNvbV9jbHJiaXRzKHFjb20tPnFzY3JhdGNoX2Jhc2UsIFFTQ1JBVENI X0dFTkVSQUxfQ0ZHLAorCQkJICBQSVBFX1VUTUlfQ0xLX0RJUyk7Cit9CisKK3N0YXRpYyBpbnQg ZHdjM19xY29tX2Nsa19pbml0KHN0cnVjdCBkd2MzX3Fjb20gKnFjb20sIGludCBjb3VudCkKK3sK KwlzdHJ1Y3QgZGV2aWNlCQkqZGV2ID0gcWNvbS0+ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZQkq bnAgPSBkZXYtPm9mX25vZGU7CisJaW50CQkJaTsKKworCXFjb20tPm51bV9jbG9ja3MgPSBjb3Vu dDsKKworCWlmICghY291bnQpCisJCXJldHVybiAwOworCisJcWNvbS0+Y2xrcyA9IGRldm1fa2Nh bGxvYyhkZXYsIHFjb20tPm51bV9jbG9ja3MsCisJCQkJICBzaXplb2Yoc3RydWN0IGNsayAqKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFxY29tLT5jbGtzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZv ciAoaSA9IDA7IGkgPCBxY29tLT5udW1fY2xvY2tzOyBpKyspIHsKKwkJc3RydWN0IGNsawkqY2xr OworCQlpbnQJCXJldDsKKworCQljbGsgPSBvZl9jbGtfZ2V0KG5wLCBpKTsKKwkJaWYgKElTX0VS UihjbGspKSB7CisJCQl3aGlsZSAoLS1pID49IDApCisJCQkJY2xrX3B1dChxY29tLT5jbGtzW2ld KTsKKwkJCXJldHVybiBQVFJfRVJSKGNsayk7CisJCX0KKworCQlyZXQgPSBjbGtfcHJlcGFyZV9l bmFibGUoY2xrKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXdoaWxlICgtLWkgPj0gMCkgeworCQkJ CWNsa19kaXNhYmxlX3VucHJlcGFyZShxY29tLT5jbGtzW2ldKTsKKwkJCQljbGtfcHV0KHFjb20t PmNsa3NbaV0pOworCQkJfQorCQkJY2xrX3B1dChjbGspOworCisJCQlyZXR1cm4gcmV0OworCQl9 CisKKwkJcWNvbS0+Y2xrc1tpXSA9IGNsazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBkd2MzX3Fjb21fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlz dHJ1Y3QgZGV2aWNlX25vZGUJKm5wID0gcGRldi0+ZGV2Lm9mX25vZGUsICpkd2MzX25wOworCXN0 cnVjdCBkd2MzX3Fjb20JKnFjb207CisJc3RydWN0IHJlc291cmNlCQkqcmVzOworCWludAkJCWly cSwgcmV0LCBpOworCWJvb2wJCQlpZ25vcmVfcGlwZV9jbGs7CisKKwlxY29tID0gZGV2bV9remFs bG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcWNvbSksIEdGUF9LRVJORUwpOworCWlmICghcWNvbSkK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBxY29tKTsK KwlxY29tLT5kZXYgPSAmcGRldi0+ZGV2OworCisJcWNvbS0+cmVzZXRzID0gb2ZfcmVzZXRfY29u dHJvbF9hcnJheV9nZXRfb3B0aW9uYWxfZXhjbHVzaXZlKG5wKTsKKwlpZiAoSVNfRVJSKHFjb20t PnJlc2V0cykpIHsKKwkJcmV0ID0gUFRSX0VSUihxY29tLT5yZXNldHMpOworCQlkZXZfZXJyKCZw ZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHJlc2V0cywgZXJyPSVkXG4iLCByZXQpOworCQlyZXR1 cm4gcmV0OworCX0KKworCXJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocWNvbS0+cmVzZXRz KTsKKwlpZiAocmV0KQorCQlnb3RvIHJlc2V0X3B1dDsKKworCXJldCA9IGR3YzNfcWNvbV9jbGtf aW5pdChxY29tLCBvZl9jbGtfZ2V0X3BhcmVudF9jb3VudChucCkpOworCWlmIChyZXQpIHsKKwkJ ZGV2X2VycihxY29tLT5kZXYsICJmYWlsZWQgdG8gZ2V0IGNsb2Nrc1xuIik7CisJCWdvdG8gcmVz ZXRfYXNzZXJ0OworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRl diwgSU9SRVNPVVJDRV9NRU0sICJxc2NyYXRjaCIpOworCXFjb20tPnFzY3JhdGNoX2Jhc2UgPSBk ZXZtX2lvcmVtYXBfcmVzb3VyY2UocWNvbS0+ZGV2LCByZXMpOworCWlmIChJU19FUlIocWNvbS0+ cXNjcmF0Y2hfYmFzZSkpIHsKKwkJZGV2X2VycihxY29tLT5kZXYsICJmYWlsZWQgdG8gbWFwIHFz Y3JhdGNoIC0gJWRcbiIsIHJldCk7CisJCXJldCA9IFBUUl9FUlIocWNvbS0+cXNjcmF0Y2hfYmFz ZSk7CisJCWdvdG8gY2xrX2Rpc2FibGU7CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9i eW5hbWUocGRldiwgImhzX3BoeV9pcnEiKTsKKwlpZiAoaXJxID4gMCkgeworCQlyZXQgPSBkZXZt X3JlcXVlc3RfdGhyZWFkZWRfaXJxKHFjb20tPmRldiwgaXJxLCBOVUxMLAorCQkJCQlxY29tX2R3 YzNfcmVzdW1lX2lycSwKKwkJCQkJSVJRRl9UUklHR0VSX0hJR0ggfCBJUlFGX09ORVNIT1QsCisJ CQkJCSJxY29tX2R3YzMgSFMiLCBxY29tKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihxY29t LT5kZXYsICJoc19waHlfaXJxIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCQlnb3RvIGNsa19kaXNh YmxlOworCQl9CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgImRw X2hzX3BoeV9pcnEiKTsKKwlpZiAoaXJxID4gMCkgeworCQlpcnFfc2V0X3N0YXR1c19mbGFncyhp cnEsIElSUV9OT0FVVE9FTik7CisJCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEocWNv bS0+ZGV2LCBpcnEsIE5VTEwsCisJCQkJCXFjb21fZHdjM19yZXN1bWVfaXJxLAorCQkJCQlJUlFG X1RSSUdHRVJfSElHSCB8IElSUUZfT05FU0hPVCwKKwkJCQkJInFjb21fZHdjMyBEUF9IUyIsIHFj b20pOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKHFjb20tPmRldiwgImRwX2hzX3BoeV9pcnEg ZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gY2xrX2Rpc2FibGU7CisJCX0KKwkJcWNvbS0+ ZHBfaHNfcGh5X2lycSA9IGlycTsKKwl9CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFt ZShwZGV2LCAiZG1faHNfcGh5X2lycSIpOworCWlmIChpcnEgPiAwKSB7CisJCWlycV9zZXRfc3Rh dHVzX2ZsYWdzKGlycSwgSVJRX05PQVVUT0VOKTsKKwkJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVh ZGVkX2lycShxY29tLT5kZXYsIGlycSwgTlVMTCwKKwkJCQkJcWNvbV9kd2MzX3Jlc3VtZV9pcnEs CisJCQkJCUlSUUZfVFJJR0dFUl9ISUdIIHwgSVJRRl9PTkVTSE9ULAorCQkJCQkicWNvbV9kd2Mz IERNX0hTIiwgcWNvbSk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIocWNvbS0+ZGV2LCAiZG1f aHNfcGh5X2lycSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQkJZ290byBjbGtfZGlzYWJsZTsKKwkJ fQorCQlxY29tLT5kbV9oc19waHlfaXJxID0gaXJxOworCX0KKworCWlycSA9IHBsYXRmb3JtX2dl dF9pcnFfYnluYW1lKHBkZXYsICJzc19waHlfaXJxIik7CisJaWYgKGlycSA+IDApIHsKKwkJaXJx X3NldF9zdGF0dXNfZmxhZ3MoaXJxLCBJUlFfTk9BVVRPRU4pOworCQlyZXQgPSBkZXZtX3JlcXVl c3RfdGhyZWFkZWRfaXJxKHFjb20tPmRldiwgaXJxLCBOVUxMLAorCQkJCQlxY29tX2R3YzNfcmVz dW1lX2lycSwKKwkJCQkJSVJRRl9UUklHR0VSX0hJR0ggfCBJUlFGX09ORVNIT1QsCisJCQkJCSJx Y29tX2R3YzMgU1MiLCBxY29tKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihxY29tLT5kZXYs ICJzc19waHlfaXJxIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCQlnb3RvIGNsa19kaXNhYmxlOwor CQl9CisJCXFjb20tPnNzX3BoeV9pcnEgPSBpcnE7CisJfQorCisJZHdjM19ucCA9IG9mX2dldF9j aGlsZF9ieV9uYW1lKG5wLCAiZHdjMyIpOworCWlmICghZHdjM19ucCkgeworCQlkZXZfZXJyKHFj b20tPmRldiwgImZhaWxlZCB0byBmaW5kIGR3YzMgY29yZSBjaGlsZFxuIik7CisJCXJldCA9IC1F Tk9ERVY7CisJCWdvdG8gY2xrX2Rpc2FibGU7CisJfQorCisJLyoKKwkgKiBEaXNhYmxlIHBpcGVf Y2xrIHJlcXVpcmVtZW50IGlmIHNwZWNpZmllZC4gVXNlZCB3aGVuIGR3YzMKKwkgKiBvcGVyYXRl cyB3aXRob3V0IFNTUEhZIGFuZCBvbmx5IEhTL0ZTL0xTIG1vZGVzIGFyZSBzdXBwb3J0ZWQuCisJ ICovCisJaWdub3JlX3BpcGVfY2xrID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChxY29tLT5k ZXYsCisJCQkJInFjb20sc2VsZWN0LXV0bWktYXMtcGlwZS1jbGsiKTsKKwlpZiAoaWdub3JlX3Bp cGVfY2xrKQorCQlkd2MzX3Fjb21fc2VsZWN0X3V0bWlfY2xrKHFjb20pOworCisJcmV0ID0gb2Zf cGxhdGZvcm1fcG9wdWxhdGUobnAsIE5VTEwsIE5VTEwsIHFjb20tPmRldik7CisJaWYgKHJldCkg eworCQlkZXZfZXJyKHFjb20tPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBkd2MzIGNvcmUgLSAl ZFxuIiwgcmV0KTsKKwkJZ290byBjbGtfZGlzYWJsZTsKKwl9CisKKwlxY29tLT5kd2MzID0gb2Zf ZmluZF9kZXZpY2VfYnlfbm9kZShkd2MzX25wKTsKKwlpZiAoIXFjb20tPmR3YzMpIHsKKwkJZGV2 X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBkd2MzIHBsYXRmb3JtIGRldmljZVxuIik7 CisJCWdvdG8gZGVwb3B1bGF0ZTsKKwl9CisKKwlxY29tLT5tb2RlID0gdXNiX2dldF9kcl9tb2Rl KCZxY29tLT5kd2MzLT5kZXYpOworCisJLyogcmVnaXN0ZXIgZXh0Y29uIHRvIG92ZXJyaWRlIHZi dXMgbGF0ZXIgb24gbW9kZSBzd2l0Y2ggKi8KKwlpZiAocWNvbS0+bW9kZSA9PSBVU0JfRFJfTU9E RV9PVEcpIHsKKwkJcmV0ID0gZHdjM19xY29tX3JlZ2lzdGVyX2V4dGNvbihxY29tKTsKKwkJaWYg KHJldCkKKwkJCWdvdG8gZGVwb3B1bGF0ZTsKKwl9IGVsc2UgaWYgKHFjb20tPm1vZGUgPT0gVVNC X0RSX01PREVfUEVSSVBIRVJBTCkgeworCQkvKiBlbmFibGUgdmJ1cyBvdmVycmlkZSBmb3IgZGV2 aWNlIG1vZGUgKi8KKwkJZHdjM19xY29tX3ZidXNfb3ZlcnJyaWRlX2VuYWJsZShxY29tLCB0cnVl KTsKKwl9CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CisJcWNvbS0+aXNf c3VzcGVuZGVkID0gZmFsc2U7CisJcG1fcnVudGltZV9zZXRfYWN0aXZlKHFjb20tPmRldik7CisJ cG1fcnVudGltZV9lbmFibGUocWNvbS0+ZGV2KTsKKworCXJldHVybiAwOworCitkZXBvcHVsYXRl OgorCW9mX3BsYXRmb3JtX2RlcG9wdWxhdGUoJnBkZXYtPmRldik7CitjbGtfZGlzYWJsZToKKwlm b3IgKGkgPSBxY29tLT5udW1fY2xvY2tzIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJY2xrX2Rpc2Fi bGVfdW5wcmVwYXJlKHFjb20tPmNsa3NbaV0pOworCQljbGtfcHV0KHFjb20tPmNsa3NbaV0pOwor CX0KK3Jlc2V0X2Fzc2VydDoKKwlyZXNldF9jb250cm9sX2Fzc2VydChxY29tLT5yZXNldHMpOwor cmVzZXRfcHV0OgorCXJlc2V0X2NvbnRyb2xfcHV0KHFjb20tPnJlc2V0cyk7CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50IGR3YzNfcWNvbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHdjM19xY29tICpxY29tID0gcGxhdGZvcm1fZ2V0X2Ry dmRhdGEocGRldik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcWNvbS0+ZGV2OworCWludCBpOwor CisJb2ZfcGxhdGZvcm1fZGVwb3B1bGF0ZSgmcGRldi0+ZGV2KTsKKworCWZvciAoaSA9IHFjb20t Pm51bV9jbG9ja3MgLSAxOyBpID49IDA7IGktLSkgeworCQljbGtfZGlzYWJsZV91bnByZXBhcmUo cWNvbS0+Y2xrc1tpXSk7CisJCWNsa19wdXQocWNvbS0+Y2xrc1tpXSk7CisJfQorCXFjb20tPm51 bV9jbG9ja3MgPSAwOworCisJcmVzZXRfY29udHJvbF9hc3NlcnQocWNvbS0+cmVzZXRzKTsKKwly ZXNldF9jb250cm9sX3B1dChxY29tLT5yZXNldHMpOworCisJcG1fcnVudGltZV9kaXNhYmxlKGRl dik7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGlu dCBkd2MzX3Fjb21fcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGR3 YzNfcWNvbSAqcWNvbSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQgPSAwOworCisJ ZGV2X2VycihkZXYsICJkd2MzLXFjb20gUE0gc3VzcGVuZFxuIik7CisKKwlyZXQgPSBkd2MzX3Fj b21fc3VzcGVuZChxY29tKTsKKwlpZiAoIXJldCkKKwkJcWNvbS0+cG1fc3VzcGVuZGVkID0gdHJ1 ZTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHdjM19xY29tX3BtX3Jlc3VtZShz dHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGR3YzNfcWNvbSAqcWNvbSA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwlkZXZfZXJyKGRldiwgImR3YzMtcWNvbSBQTSBy ZXN1bWVcbiIpOworCisJcmV0ID0gZHdjM19xY29tX3Jlc3VtZShxY29tKTsKKwlpZiAoIXJldCkK KwkJcWNvbS0+cG1fc3VzcGVuZGVkID0gZmFsc2U7CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlm CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZHdjM19xY29tX3J1bnRpbWVfc3VzcGVu ZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGR3YzNfcWNvbSAqcWNvbSA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOworCisJZGV2X2VycihkZXYsICJEV0MzLXFjb20gcnVudGltZSBzdXNw ZW5kXG4iKTsKKworCXJldHVybiBkd2MzX3Fjb21fc3VzcGVuZChxY29tKTsKK30KKworc3RhdGlj IGludCBkd2MzX3Fjb21fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0 cnVjdCBkd2MzX3Fjb20gKnFjb20gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRldl9lcnIo ZGV2LCAiRFdDMy1xY29tIHJ1bnRpbWUgcmVzdW1lXG4iKTsKKworCXJldHVybiBkd2MzX3Fjb21f cmVzdW1lKHFjb20pOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29w cyBkd2MzX3Fjb21fZGV2X3BtX29wcyA9IHsKKwlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhkd2Mz X3Fjb21fcG1fc3VzcGVuZCwgZHdjM19xY29tX3BtX3Jlc3VtZSkKKwlTRVRfUlVOVElNRV9QTV9P UFMoZHdjM19xY29tX3J1bnRpbWVfc3VzcGVuZCwgZHdjM19xY29tX3J1bnRpbWVfcmVzdW1lLAor CQkJICAgTlVMTCkKK307CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZHdj M19xY29tX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJxY29tLGR3YzMiIH0sCisJ eyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZHdjM19xY29tX29mX21hdGNoKTsKKwor c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHdjM19xY29tX2RyaXZlciA9IHsKKwkucHJv YmUJCT0gZHdjM19xY29tX3Byb2JlLAorCS5yZW1vdmUJCT0gZHdjM19xY29tX3JlbW92ZSwKKwku ZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiZHdjMy1xY29tIiwKKwkJLnBtCT0gJmR3YzNfcWNvbV9k ZXZfcG1fb3BzLAorCQkub2ZfbWF0Y2hfdGFibGUJPSBkd2MzX3Fjb21fb2ZfbWF0Y2gsCisJfSwK K307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZHdjM19xY29tX2RyaXZlcik7CisKK01PRFVM RV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRGVzaWduV2FyZSBEV0Mz IFFDT00gR2x1ZSBEcml2ZXIiKTsK