From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Gordon Subject: [PATCH 04/13 v4] drm/i915: GuC-specific firmware loader Date: Thu, 9 Jul 2015 19:29:05 +0100 Message-ID: <1436466554-24806-5-git-send-email-david.s.gordon@intel.com> References: <1436466554-24806-1-git-send-email-david.s.gordon@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 7C7B56ED15 for ; Thu, 9 Jul 2015 11:29:47 -0700 (PDT) In-Reply-To: <1436466554-24806-1-git-send-email-david.s.gordon@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+CgpUaGlzIGZldGNoZXMgdGhlIHJlcXVp cmVkIGZpcm13YXJlIGltYWdlIGZyb20gdGhlIGZpbGVzeXN0ZW0sCnRoZW4gbG9hZHMgaXQgaW50 byB0aGUgR3VDJ3MgbWVtb3J5IHZpYSBhIGRlZGljYXRlZCBETUEgZW5naW5lLgoKVGhpcyBwYXRj aCBpcyBkZXJpdmVkIGZyb20gR3VDIGxvYWRpbmcgd29yayBvcmlnaW5hbGx5IGRvbmUgYnkKVmlu aXQgQXphZCBhbmQgQmVuIFdpZGF3c2t5LgoKdjI6CiAgICBWYXJpb3VzIGltcHJvdmVtZW50cyBw ZXIgcmV2aWV3IGNvbW1lbnRzIGJ5IENocmlzIFdpbHNvbgoKdjM6CiAgICBSZW1vdmVkICd3YWl0 JyBwYXJhbWV0ZXIgdG8gaW50ZWxfZ3VjX3Vjb2RlX2xvYWQoKSBhcyBmaXJtd2FyZQogICAgICAg IHByZWZldGNoIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gdGhlIGNvbW1vbiBmaXJtd2FyZSBs b2FkZXIsCglwZXIgRGFuaWVsIFZldHRlcidzIHJlcXVlc3QuCiAgICBGaXJtd2FyZSBjaGVja2Vy IGNhbGxiYWNrIGZuIG5vdyByZXR1cm5zIGVycm5vIHJhdGhlciB0aGFuIGJvb2wuCgp2NDoKICAg IFNxdWFzaCB1Qy1pbmRlcGVuZGVudCBjb2RlIGludG8gR3VDLXNwZWNpZmMgbG9hZGVyIFtEYW5p ZWwgVmV0dGVyXQogICAgRG9uJ3Qga2VlcCB0aGUgZHJpdmVyIHdvcmtpbmcgKGJ5IGZhbGxpbmcg YmFjayB0byBleGVjbGlzdCBtb2RlKQogICAgICAgIGlmIEd1QyBmaXJtd2FyZSBsb2FkaW5nIGZh aWxzIFtEYW5pZWwgVmV0dGVyXQoKSXNzdWU6IFZJWi00ODg0ClNpZ25lZC1vZmYtYnk6IEFsZXgg RGFpIDx5dS5kYWlAaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBEYXZlIEdvcmRvbiA8ZGF2aWQu cy5nb3Jkb25AaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAg ICAgICAgICB8ICAgMyArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jICAgICAgICAg fCAgIDQgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgIDExICsK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgICB8ICAxMyArCiBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oICAgICAgICAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2d1Yy5oICAgICAgICB8ICA2NyArKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9ndWNfbG9hZGVyLmMgfCA1MzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIDcgZmlsZXMgY2hhbmdlZCwgNjM3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYwoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvTWFrZWZpbGUKaW5kZXggZGUyMTk2NS4uZTYwNGNmZSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUKQEAgLTM5LDYgKzM5LDkgQEAgaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKIAkgIGlu dGVsX3JpbmdidWZmZXIubyBcCiAJICBpbnRlbF91bmNvcmUubwogCisjIGdlbmVyYWwtcHVycG9z ZSBtaWNyb2NvbnRyb2xsZXIgKEd1Qykgc3VwcG9ydAoraTkxNS15ICs9IGludGVsX2d1Y19sb2Fk ZXIubworCiAjIGF1dG9nZW5lcmF0ZWQgbnVsbCByZW5kZXIgc3RhdGUKIGk5MTUteSArPSBpbnRl bF9yZW5kZXJzdGF0ZV9nZW42Lm8gXAogCSAgaW50ZWxfcmVuZGVyc3RhdGVfZ2VuNy5vIFwKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4IDA2NmMzNGMuLjk1OGFiNGYgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kbWEuYwpAQCAtNDcyLDYgKzQ3Miw3IEBAIHN0YXRpYyBpbnQgaTkxNV9sb2FkX21vZGVz ZXRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCiBjbGVhbnVwX2dlbToKIAltdXRleF9s b2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJaW50ZWxfZ3VjX3Vjb2RlX2ZpbmkoZGV2KTsKIAlp OTE1X2dlbV9jbGVhbnVwX3JpbmdidWZmZXIoZGV2KTsKIAlpOTE1X2dlbV9jb250ZXh0X2Zpbmko ZGV2KTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKQEAgLTg2OSw2ICs4NzAs OCBAQCBpbnQgaTkxNV9kcml2ZXJfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25l ZCBsb25nIGZsYWdzKQogCiAJaW50ZWxfdW5jb3JlX2luaXQoZGV2KTsKIAorCWludGVsX2d1Y191 Y29kZV9pbml0KGRldik7CisKIAkvKiBMb2FkIENTUiBGaXJtd2FyZSBmb3IgU0tMICovCiAJaW50 ZWxfY3NyX3Vjb2RlX2luaXQoZGV2KTsKIApAQCAtMTEyMCw2ICsxMTIzLDcgQEAgaW50IGk5MTVf ZHJpdmVyX3VubG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCWZsdXNoX3dvcmtxdWV1ZShk ZXZfcHJpdi0+d3EpOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWludGVs X2d1Y191Y29kZV9maW5pKGRldik7CiAJaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKGRldik7 CiAJaTkxNV9nZW1fY29udGV4dF9maW5pKGRldik7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVj dF9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCA0YTUxMmRhLi4xNWI5MjAyIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxsaW51 eC9pbnRlbC1pb21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51 eC9wbV9xb3MuaD4KKyNpbmNsdWRlICJpbnRlbF9ndWMuaCIKIAogLyogR2VuZXJhbCBjdXN0b21p emF0aW9uOgogICovCkBAIC0xNjk0LDYgKzE2OTUsOCBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSB7CiAKIAlzdHJ1Y3QgaTkxNV92aXJ0dWFsX2dwdSB2Z3B1OwogCisJc3RydWN0IGludGVsX2d1 YyBndWM7CisKIAlzdHJ1Y3QgaW50ZWxfY3NyIGNzcjsKIAogCS8qIERpc3BsYXkgQ1NSLXJlbGF0 ZWQgcHJvdGVjdGlvbiAqLwpAQCAtMTkzOCw2ICsxOTQxLDExIEBAIHN0YXRpYyBpbmxpbmUgc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl90b19pOTE1KHN0cnVjdCBkZXZpY2UgKmRldikKIAly ZXR1cm4gdG9faTkxNShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUg c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmd1Y190b19pOTE1KHN0cnVjdCBpbnRlbF9ndWMgKmd1 YykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGd1Yywgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUs IGd1Yyk7Cit9CisKIC8qIEl0ZXJhdGUgb3ZlciBpbml0aWFsaXNlZCByaW5ncyAqLwogI2RlZmlu ZSBmb3JfZWFjaF9yaW5nKHJpbmdfXywgZGV2X3ByaXZfXywgaV9fKSBcCiAJZm9yICgoaV9fKSA9 IDA7IChpX18pIDwgSTkxNV9OVU1fUklOR1M7IChpX18pKyspIFwKQEAgLTI1NDMsNiArMjU1MSw5 IEBAIHN0cnVjdCBkcm1faTkxNV9jbWRfdGFibGUgewogCiAjZGVmaW5lIEhBU19DU1IoZGV2KQko SVNfU0tZTEFLRShkZXYpKQogCisjZGVmaW5lIEhBU19HVUNfVUNPREUoZGV2KQkoSVNfR0VOOShk ZXYpKQorI2RlZmluZSBIQVNfR1VDX1NDSEVEKGRldikJKElTX0dFTjkoZGV2KSkKKwogI2RlZmlu ZSBIQVNfUkVTT1VSQ0VfU1RSRUFNRVIoZGV2KSAoSVNfSEFTV0VMTChkZXYpIHx8IFwKIAkJCQkg ICAgSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5k ZXggZGJiYjY0OS4uZTAyMDMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC01MDc0LDYg KzUwNzQsMTkgQEAgaTkxNV9nZW1faW5pdF9odyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCQkJ Z290byBvdXQ7CiAJfQogCisJLyogV2UgY2FuJ3QgZW5hYmxlIGNvbnRleHRzIHVudGlsIGFsbCBm aXJtd2FyZSBpcyBsb2FkZWQgKi8KKwlyZXQgPSBpbnRlbF9ndWNfdWNvZGVfbG9hZChkZXYpOwor CisJLyoKKwkgKiBJZiB3ZSBnb3QgYW4gZXJyb3IgYW5kIEd1QyBzdWJtaXNzaW9uIGlzIGVuYWJs ZWQsIG1hcAorCSAqIHRoZSBlcnJvciB0byAtRUlPIHNvIHRoZSBHUFUgd2lsbCBiZSBkZWNsYXJl ZCB3ZWRnZWQuCisJICogT1RPSCwgaWYgd2UgZGlkbid0IGludGVuZCB0byB1c2UgdGhlIEd1QyBh bnl3YXksIGp1c3QKKwkgKiBkaXNjYXJkIHRoZSBlcnJvciBhbmQgY2Fycnkgb24uCisJICovCisJ cmV0ID0gcmV0ICYmIGk5MTUuZW5hYmxlX2d1Y19zdWJtaXNzaW9uID8gLUVJTyA6IDA7CisJaWYg KHJldCkKKwkJZ290byBvdXQ7CisKIAkvKiBOb3cgaXQgaXMgc2FmZSB0byBnbyBiYWNrIHJvdW5k IGFuZCBkbyBldmVyeXRoaW5nIGVsc2U6ICovCiAJZm9yX2VhY2hfcmluZyhyaW5nLCBkZXZfcHJp diwgaSkgewogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlZy5oCmluZGV4IDJhMjliY2MuLjYzNzI4YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcu aApAQCAtNjg0Myw3ICs2ODQzLDkgQEAgZW51bSBza2xfZGlzcF9wb3dlcl93ZWxscyB7CiAjZGVm aW5lICAgR0VOOV9QR0NUTF9TU0JfRVUzMTFfQUNLCSgxIDw8IDE0KQogCiAjZGVmaW5lIEdFTjdf TUlTQ0NQQ1RMCQkJKDB4OTQyNCkKLSNkZWZpbmUgICBHRU43X0RPUF9DTE9DS19HQVRFX0VOQUJM RQkoMTw8MCkKKyNkZWZpbmUgICBHRU43X0RPUF9DTE9DS19HQVRFX0VOQUJMRQkJKDE8PDApCisj ZGVmaW5lICAgR0VOOF9ET1BfQ0xPQ0tfR0FURV9DRkNMS19FTkFCTEUJKDE8PDIpCisjZGVmaW5l ICAgR0VOOF9ET1BfQ0xPQ0tfR0FURV9HVUNfRU5BQkxFCSgxPDw0KQogCiAvKiBJVllCUklER0Ug RFBGICovCiAjZGVmaW5lIEdFTjdfTDNDREVSUlNUMQkJCTB4QjAwOCAvKiBMM0NEIEVycm9yIFN0 YXR1cyAxICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjI4NDZiNmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9ndWMuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIw MTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1Ig Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI RVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUg U09GVFdBUkUuCisgKgorICovCisjaWZuZGVmIF9JTlRFTF9HVUNfSF8KKyNkZWZpbmUgX0lOVEVM X0dVQ19IXworCisjaW5jbHVkZSAiaW50ZWxfZ3VjX2Z3aWYuaCIKKyNpbmNsdWRlICJpOTE1X2d1 Y19yZWcuaCIKKworZW51bSBpbnRlbF9ndWNfZndfc3RhdHVzIHsKKwlHVUNfRklSTVdBUkVfRkFJ TCA9IC0xLAorCUdVQ19GSVJNV0FSRV9OT05FID0gMCwKKwlHVUNfRklSTVdBUkVfUEVORElORywK KwlHVUNfRklSTVdBUkVfU1VDQ0VTUworfTsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGVuY2Fw c3VsYXRlcyBhbGwgdGhlIGRhdGEgbmVlZGVkIGR1cmluZyB0aGUgcHJvY2VzcworICogb2YgZmV0 Y2hpbmcsIGNhY2hpbmcsIGFuZCBsb2FkaW5nIHRoZSBmaXJtd2FyZSBpbWFnZSBpbnRvIHRoZSBH dUMuCisgKi8KK3N0cnVjdCBpbnRlbF9ndWNfZncgeworCXN0cnVjdCBkcm1fZGV2aWNlICoJCWd1 Y19kZXY7CisJY29uc3QgY2hhciAqCQkJZ3VjX2Z3X3BhdGg7CisJc2l6ZV90CQkJCWd1Y19md19z aXplOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICoJZ3VjX2Z3X29iajsKKwllbnVtIGlu dGVsX2d1Y19md19zdGF0dXMJZ3VjX2Z3X2ZldGNoX3N0YXR1czsKKwllbnVtIGludGVsX2d1Y19m d19zdGF0dXMJZ3VjX2Z3X2xvYWRfc3RhdHVzOworCisJdWludDE2X3QJCQlndWNfZndfbWFqb3Jf d2FudGVkOworCXVpbnQxNl90CQkJZ3VjX2Z3X21pbm9yX3dhbnRlZDsKKwl1aW50MTZfdAkJCWd1 Y19md19tYWpvcl9mb3VuZDsKKwl1aW50MTZfdAkJCWd1Y19md19taW5vcl9mb3VuZDsKK307CisK K3N0cnVjdCBpbnRlbF9ndWMgeworCXN0cnVjdCBpbnRlbF9ndWNfZncgZ3VjX2Z3OworCisJdWlu dDMyX3QgbG9nX2ZsYWdzOworfTsKKworLyogaW50ZWxfZ3VjX2xvYWRlci5jICovCitleHRlcm4g dm9pZCBpbnRlbF9ndWNfdWNvZGVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVy biBpbnQgaW50ZWxfZ3VjX3Vjb2RlX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRl cm4gdm9pZCBpbnRlbF9ndWNfdWNvZGVfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4 dGVybiBjb25zdCBjaGFyICppbnRlbF9ndWNfZndfc3RhdHVzX3JlcHIoZW51bSBpbnRlbF9ndWNf Zndfc3RhdHVzIHN0YXR1cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3Vj X2xvYWRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwODBiY2EKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfbG9hZGVyLmMK QEAgLTAsMCArMSw1MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNCBJbnRlbCBDb3Jwb3Jh dGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQor ICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVS UyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisg KiBBdXRob3JzOgorICogICAgVmluaXQgQXphZCA8dmluaXQuYXphZEBpbnRlbC5jb20+CisgKiAg ICBCZW4gV2lkYXdza3kgPGJlbkBid2lkYXdzay5uZXQ+CisgKiAgICBEYXZlIEdvcmRvbiA8ZGF2 aWQucy5nb3Jkb25AaW50ZWwuY29tPgorICogICAgQWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+ CisgKi8KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgImk5MTVfZHJ2Lmgi CisjaW5jbHVkZSAiaW50ZWxfZ3VjLmgiCisKKy8qKgorICogRE9DOiBHdUMKKyAqCisgKiBpbnRl bF9ndWM6CisgKiBUb3AgbGV2ZWwgc3RydWN0dXJlIG9mIGd1Yy4gSXQgaGFuZGxlcyBmaXJtd2Fy ZSBsb2FkaW5nIGFuZCBtYW5hZ2VzIGNsaWVudAorICogcG9vbCBhbmQgZG9vcmJlbGxzLiBpbnRl bF9ndWMgb3ducyBhIGk5MTVfZ3VjX2NsaWVudCB0byByZXBsYWNlIHRoZSBsZWdhY3kKKyAqIEV4 ZWNMaXN0IHN1Ym1pc3Npb24uCisgKgorICogRmlybXdhcmUgdmVyc2lvbmluZzoKKyAqIFRoZSBm aXJtd2FyZSBidWlsZCBwcm9jZXNzIHdpbGwgZ2VuZXJhdGUgYSB2ZXJzaW9uIGhlYWRlciBmaWxl IHdpdGggbWFqb3IgYW5kCisgKiBtaW5vciB2ZXJzaW9uIGRlZmluZWQuIFRoZSB2ZXJzaW9ucyBh cmUgYnVpbHQgaW50byBDU1MgaGVhZGVyIG9mIGZpcm13YXJlLgorICogaTkxNSBrZXJuZWwgZHJp dmVyIHNldCB0aGUgbWluaW1hbCBmaXJtd2FyZSB2ZXJzaW9uIHJlcXVpcmVkIHBlciBwbGF0Zm9y bS4KKyAqIFRoZSBmaXJtd2FyZSBpbnN0YWxsYXRpb24gcGFja2FnZSB3aWxsIGluc3RhbGwgKHN5 bWJvbGljIGxpbmspIHByb3BlciB2ZXJzaW9uCisgKiBvZiBmaXJtd2FyZS4KKyAqCisgKiBHdUMg YWRkcmVzcyBzcGFjZToKKyAqIEd1QyBkb2VzIG5vdCBhbGxvdyBhbnkgZ2Z4IEdHVFQgYWRkcmVz cyB0aGF0IGZhbGxzIGludG8gcmFuZ2UgWzAsIFdPUENNX1RPUCksCisgKiB3aGljaCBpcyByZXNl cnZlZCBmb3IgQm9vdCBST00sIFNSQU0gYW5kIFdPUENNLiBDdXJyZW50bHkgdGhpcyB0b3AgYWRk cmVzcyBpcworICogNTEySy4gSW4gb3JkZXIgdG8gZXhjbHVkZSAwLTUxMksgYWRkcmVzcyBzcGFj ZSBmcm9tIEdHVFQsIGFsbCBnZnggb2JqZWN0cworICogdXNlZCBieSBHdUMgaXMgcGlubmVkIHdp dGggUElOX09GRlNFVF9CSUFTIGFsb25nIHdpdGggc2l6ZSBvZiBXT1BDTS4KKyAqCisgKiBGaXJt d2FyZSBsb2c6CisgKiBGaXJtd2FyZSBsb2cgaXMgZW5hYmxlZCBieSBzZXR0aW5nIGk5MTUuZ3Vj X2xvZ19sZXZlbCB0byBub24tbmVnYXRpdmUgbGV2ZWwuCisgKiBMb2cgZGF0YSBpcyBwcmludGVk IG91dCB2aWEgcmVhZGluZyBkZWJ1Z2ZzIGk5MTVfZ3VjX2xvZ19kdW1wLiBSZWFkaW5nIGZyb20K KyAqIGk5MTVfZ3VjX2xvYWRfc3RhdHVzIHdpbGwgcHJpbnQgb3V0IGZpcm13YXJlIGxvYWRpbmcg c3RhdHVzIGFuZCBzY3JhdGNoCisgKiByZWdpc3RlcnMgdmFsdWUuCisgKgorICovCisKKyNkZWZp bmUgSTkxNV9TS0xfR1VDX1VDT0RFICJpOTE1L3NrbF9ndWNfdmVyMy5iaW4iCitNT0RVTEVfRklS TVdBUkUoSTkxNV9TS0xfR1VDX1VDT0RFKTsKKworLyogVXNlci1mcmllbmRseSByZXByZXNlbnRh dGlvbiBvZiBhbiBlbnVtICovCitjb25zdCBjaGFyICppbnRlbF9ndWNfZndfc3RhdHVzX3JlcHIo ZW51bSBpbnRlbF9ndWNfZndfc3RhdHVzIHN0YXR1cykKK3sKKwlzd2l0Y2ggKHN0YXR1cykgewor CWNhc2UgR1VDX0ZJUk1XQVJFX0ZBSUw6CisJCXJldHVybiAiRkFJTCI7CisJY2FzZSBHVUNfRklS TVdBUkVfTk9ORToKKwkJcmV0dXJuICJOT05FIjsKKwljYXNlIEdVQ19GSVJNV0FSRV9QRU5ESU5H OgorCQlyZXR1cm4gIlBFTkRJTkciOworCWNhc2UgR1VDX0ZJUk1XQVJFX1NVQ0NFU1M6CisJCXJl dHVybiAiU1VDQ0VTUyI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJVTktOT1dOISI7CisJfQorfTsK Kworc3RhdGljIHUzMiBnZXRfZ3R0eXBlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKK3sKKwkvKiBYWFg6IEdUIHR5cGUgYmFzZWQgb24gUENJIGRldmljZSBJRD8gZmllbGQgc2Vl bXMgdW51c2VkIGJ5IGZ3ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X2NvcmVf ZmFtaWx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzd2l0Y2ggKElO VEVMX0lORk8oZGV2X3ByaXYpLT5nZW4pIHsKKwljYXNlIDg6CisJCXJldHVybiBHRlhDT1JFX0ZB TUlMWV9HRU44OworCWNhc2UgOToKKwkJcmV0dXJuIEdGWENPUkVfRkFNSUxZX0dFTjk7CisJZGVm YXVsdDoKKwkJRFJNX0VSUk9SKCJHVUM6IHVua25vd24gZ2VuIGZvciBzY2hlZHVsZXIgaW5pdFxu Iik7CisJCXJldHVybiBHRlhDT1JFX0ZBTUlMWV9GT1JDRV9VTE9ORzsKKwl9Cit9CisKK3N0YXRp YyB2b2lkIHNldF9ndWNfaW5pdF9wYXJhbXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQoreworCXN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3VjOworCXUzMiBw YXJhbXNbR1VDX0NUTF9NQVhfRFdPUkRTXTsKKwlpbnQgaTsKKworCW1lbXNldCgmcGFyYW1zLCAw LCBzaXplb2YocGFyYW1zKSk7CisKKwlwYXJhbXNbR1VDX0NUTF9ERVZJQ0VfSU5GT10gfD0KKwkJ KGdldF9ndHR5cGUoZGV2X3ByaXYpIDw8IEdVQ19DVExfR1RUWVBFX1NISUZUKSB8CisJCShnZXRf Y29yZV9mYW1pbHkoZGV2X3ByaXYpIDw8IEdVQ19DVExfQ09SRUZBTUlMWV9TSElGVCk7CisKKwkv KiBHdUMgQVJBVCBpbmNyZW1lbnQgaXMgMTAgbnMuIEd1QyBkZWZhdWx0IHNjaGVkdWxlciBxdWFu dHVtIGlzIG9uZQorCSAqIHNlY29uZC4gVGhpcyBBUkFSIGlzIGNhbGN1bGF0ZWQgYnk6CisJICog U2NoZWR1bGVyLVF1YW50dW0taW4tbnMgLyBBUkFULWluY3JlbWVudC1pbi1ucyA9IDEwMDAwMDAw MDAgLyAxMAorCSAqLworCXBhcmFtc1tHVUNfQ1RMX0FSQVRfSElHSF0gPSAwOworCXBhcmFtc1tH VUNfQ1RMX0FSQVRfTE9XXSA9IDEwMDAwMDAwMDsKKworCXBhcmFtc1tHVUNfQ1RMX1dBXSB8PSBH VUNfQ1RMX1dBX1VLX0JZX0RSSVZFUjsKKworCXBhcmFtc1tHVUNfQ1RMX0ZFQVRVUkVdIHw9IEdV Q19DVExfRElTQUJMRV9TQ0hFRFVMRVIgfAorCQkJR1VDX0NUTF9WQ1MyX0VOQUJMRUQ7CisKKwlp ZiAoaTkxNS5ndWNfbG9nX2xldmVsID49IDApIHsKKwkJcGFyYW1zW0dVQ19DVExfTE9HX1BBUkFN U10gPSBndWMtPmxvZ19mbGFnczsKKwkJcGFyYW1zW0dVQ19DVExfREVCVUddID0KKwkJCWk5MTUu Z3VjX2xvZ19sZXZlbCA8PCBHVUNfTE9HX1ZFUkJPU0lUWV9TSElGVDsKKwl9CisKKwlJOTE1X1dS SVRFKFNPRlRfU0NSQVRDSCgwKSwgMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgR1VDX0NUTF9NQVhf RFdPUkRTOyBpKyspCisJCUk5MTVfV1JJVEUoU09GVF9TQ1JBVENIKDEgKyBpKSwgcGFyYW1zW2ld KTsKK30KKworLyoKKyAqIFJlYWQgdGhlIEd1QyBzdGF0dXMgcmVnaXN0ZXIgKEdVQ19TVEFUVVMp IGFuZCBzdG9yZSBpdCBpbiB0aGUKKyAqIHNwZWNpZmllZCBsb2NhdGlvbjsgdGhlbiByZXR1cm4g YSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlcgorICogdGhlIHZhbHVlIG1hdGNoZXMgZWl0aGVy IG9mIHR3byB2YWx1ZXMgcmVwcmVzZW50aW5nIGNvbXBsZXRpb24KKyAqIG9mIHRoZSBHdUMgYm9v dCBwcm9jZXNzLgorICoKKyAqIFRoaXMgaXMgdXNlZCBmb3IgcG9sbGluZyB0aGUgR3VDIHN0YXR1 cyBpbiBhIHdhaXRfZm9yX2F0b21pYygpCisgKiBsb29wIGJlbG93LgorICovCitzdGF0aWMgaW5s aW5lIGJvb2wgZ3VjX3Vjb2RlX3Jlc3BvbnNlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKKwkJCQkgICAgICB1MzIgKnN0YXR1cykKK3sKKwl1MzIgdmFsID0gSTkxNV9SRUFEKEdV Q19TVEFUVVMpOworCSpzdGF0dXMgPSB2YWw7CisJcmV0dXJuICgodmFsICYgR1NfVUtFUk5FTF9N QVNLKSA9PSBHU19VS0VSTkVMX1JFQURZIHx8CisJCSh2YWwgJiBHU19VS0VSTkVMX01BU0spID09 IEdTX1VLRVJORUxfTEFQSUNfRE9ORSk7Cit9CisKKy8qCisgKiBUcmFuc2ZlciB0aGUgZmlybXdh cmUgaW1hZ2UgdG8gUkFNIGZvciBleGVjdXRpb24gYnkgdGhlIG1pY3JvY29udHJvbGxlci4KKyAq CisgKiBHdUMgRmlybXdhcmUgbGF5b3V0OgorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rICAtLS0tCisgKiB8ICAgICAgICAgIENTUyBoZWFkZXIgICAgICAgICAgIHwgIDEyOEIK KyAqIHwgY29udGFpbnMgbWFqb3IvbWlub3IgdmVyc2lvbiAgfAorICogKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rICAtLS0tCisgKiB8ICAgICAgICAgICAgIHVDb2RlICAgICAgICAg ICAgIHwKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgLS0tLQorICogfCAg ICAgICAgIFJTQSBzaWduYXR1cmUgICAgICAgICB8ICAyNTZCCisgKiArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsgIC0tLS0KKyAqIHwgICAgICAgICBSU0EgcHVibGljIEtleSAgICAg ICAgfCAgMjU2QgorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAtLS0tCisg KiB8ICAgICAgIFB1YmxpYyBrZXkgbW9kdWx1cyAgICAgIHwgICAgNEIKKyAqICstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgLS0tLQorICoKKyAqIEFyY2hpdGVjdHVyYWxseSwgdGhl IERNQSBlbmdpbmUgaXMgYmlkaXJlY3Rpb25hbCwgYW5kIGNhbiBwb3RlbnRpYWxseSBldmVuCisg KiB0cmFuc2ZlciBiZXR3ZWVuIEdUVCBsb2NhdGlvbnMuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBs ZWZ0IG91dCBvZiB0aGUgQVBJCisgKiBmb3Igbm93IGFzIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGl0 LgorICoKKyAqIE5vdGUgdGhhdCBHdUMgbmVlZHMgdGhlIENTUyBoZWFkZXIgcGx1cyB1S2VybmVs IGNvZGUgdG8gYmUgY29waWVkIGJ5IHRoZQorICogRE1BIGVuZ2luZSBpbiBvbmUgb3BlcmF0aW9u LCB3aGVyZWFzIHRoZSBSU0Egc2lnbmF0dXJlIGlzIGxvYWRlZCB2aWEgTU1JTy4KKyAqLworCisj ZGVmaW5lIFVPU19DU1NfSEVBREVSX09GRlNFVAkJMAorI2RlZmluZSBVT1NfVkVSX01JTk9SX09G RlNFVAkJMHg0NAorI2RlZmluZSBVT1NfVkVSX01BSk9SX09GRlNFVAkJMHg0NgorI2RlZmluZSBV T1NfQ1NTX0hFQURFUl9TSVpFCQkweDgwCisjZGVmaW5lIFVPU19SU0FfU0lHX1NJWkUJCTB4MTAw CisjZGVmaW5lIFVPU19DU1NfU0lHTklOR19TSVpFCQkweDIwNAorCitzdGF0aWMgaW50IGd1Y191 Y29kZV94ZmVyX2RtYShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3Ry dWN0IGludGVsX2d1Y19mdyAqZ3VjX2Z3ID0gJmRldl9wcml2LT5ndWMuZ3VjX2Z3OworCXN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpmd19vYmogPSBndWNfZnctPmd1Y19md19vYmo7CisJdW5z aWduZWQgbG9uZyBvZmZzZXQ7CisJc3RydWN0IHNnX3RhYmxlICpzZyA9IGZ3X29iai0+cGFnZXM7 CisJdTMyIHN0YXR1cywgdWNvZGVfc2l6ZSwgcnNhW1VPU19SU0FfU0lHX1NJWkUgLyBzaXplb2Yo dTMyKV07CisJaW50IGksIHJldCA9IDA7CisKKwkvKiB1Q29kZSBzaXplLCBhbHNvIGlzIHdoZXJl IFJTQSBzaWduYXR1cmUgc3RhcnRzICovCisJb2Zmc2V0ID0gdWNvZGVfc2l6ZSA9IGd1Y19mdy0+ Z3VjX2Z3X3NpemUgLSBVT1NfQ1NTX1NJR05JTkdfU0laRTsKKworCS8qIENvcHkgUlNBIHNpZ25h dHVyZSBmcm9tIHRoZSBmdyBpbWFnZSB0byBIVyBmb3IgdmVyaWZpY2F0aW9uICovCisJc2dfcGNv cHlfdG9fYnVmZmVyKHNnLT5zZ2wsIHNnLT5uZW50cywgcnNhLCBVT1NfUlNBX1NJR19TSVpFLCBv ZmZzZXQpOworCWZvciAoaSA9IDA7IGkgPCBVT1NfUlNBX1NJR19TSVpFIC8gc2l6ZW9mKHUzMik7 IGkrKykKKwkJSTkxNV9XUklURShVT1NfUlNBX1NDUkFUQ0hfMCArIGkgKiBzaXplb2YodTMyKSwg cnNhW2ldKTsKKworCS8qIFNldCB0aGUgc291cmNlIGFkZHJlc3MgZm9yIHRoZSBuZXcgYmxvYiAq LworCW9mZnNldCA9IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChmd19vYmopOworCUk5MTVfV1JJ VEUoRE1BX0FERFJfMF9MT1csIGxvd2VyXzMyX2JpdHMob2Zmc2V0KSk7CisJSTkxNV9XUklURShE TUFfQUREUl8wX0hJR0gsIHVwcGVyXzMyX2JpdHMob2Zmc2V0KSAmIDB4RkZGRik7CisKKwkvKiBT ZXQgdGhlIGRlc3RpbmF0aW9uLiBDdXJyZW50IHVDb2RlIGV4cGVjdHMgYW4gOGsgc3RhY2sgc3Rh cnRpbmcgZnJvbQorCSAqIG9mZnNldCAwLiAqLworCUk5MTVfV1JJVEUoRE1BX0FERFJfMV9MT1cs IDB4MjAwMCk7CisKKwkvKiBYWFg6IFRoZSBpbWFnZSBpcyBhdXRvbWF0aWNhbGx5IHRyYW5zZmVy ZWQgdG8gU1JBTSBhZnRlciB0aGUgUlNBCisJICogdmVyaWZpY2F0aW9uLiBUaGlzIGlzIHdoeSB0 aGUgYWRkcmVzcyBzcGFjZSBpcyBjaG9zZW4gYXMgc3VjaC4gKi8KKwlJOTE1X1dSSVRFKERNQV9B RERSXzFfSElHSCwgRE1BX0FERFJFU1NfU1BBQ0VfV09QQ00pOworCisJSTkxNV9XUklURShETUFf Q09QWV9TSVpFLCB1Y29kZV9zaXplKTsKKworCS8qIEZpbmFsbHkgc3RhcnQgdGhlIERNQSAqLwor CUk5MTVfV1JJVEUoRE1BX0NUUkwsIF9NQVNLRURfQklUX0VOQUJMRShVT1NfTU9WRSB8IFNUQVJU X0RNQSkpOworCisJLyoKKwkgKiBTcGluLXdhaXQgZm9yIHRoZSBETUEgdG8gY29tcGxldGUgJiB0 aGUgR3VDIHRvIHN0YXJ0IHVwLgorCSAqIE5COiBEb2NzIHJlY29tbWVuZCBub3QgdXNpbmcgdGhl IGludGVycnVwdCBmb3IgY29tcGxldGlvbi4KKwkgKiBNZWFzdXJlbWVudHMgaW5kaWNhdGUgdGhp cyBzaG91bGQgdGFrZSBubyBtb3JlIHRoYW4gMjBtcywgc28gYQorCSAqIHRpbWVvdXQgaGVyZSBp bmRpY2F0ZXMgdGhhdCB0aGUgR3VDIGhhcyBmYWlsZWQgYW5kIGlzIHVudXNhYmxlLgorCSAqIChI aWdoZXIgbGV2ZWxzIG9mIHRoZSBkcml2ZXIgd2lsbCBhdHRlbXB0IHRvIGZhbGwgYmFjayB0bwor CSAqIGV4ZWNsaXN0IG1vZGUgaWYgdGhpcyBoYXBwZW5zLikKKwkgKi8KKwlyZXQgPSB3YWl0X2Zv cl9hdG9taWMoZ3VjX3Vjb2RlX3Jlc3BvbnNlKGRldl9wcml2LCAmc3RhdHVzKSwgMTAwKTsKKwor CURSTV9ERUJVR19EUklWRVIoIkRNQSBzdGF0dXMgMHgleCwgR3VDIHN0YXR1cyAweCV4XG4iLAor CQkJSTkxNV9SRUFEKERNQV9DVFJMKSwgc3RhdHVzKTsKKworCWlmICgoc3RhdHVzICYgR1NfQk9P VFJPTV9NQVNLKSA9PSBHU19CT09UUk9NX1JTQV9GQUlMRUQpIHsKKwkJRFJNX0VSUk9SKCJHdUMg ZmlybXdhcmUgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWRcbiIpOworCQlyZXQgPSAtRU5P RVhFQzsKKwl9CisKKwlEUk1fREVCVUdfRFJJVkVSKCJyZXR1cm5pbmcgJWRcbiIsIHJldCk7CisK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogTG9hZCB0aGUgR3VDIGZpcm13YXJlIGJsb2IgaW50 byB0aGUgTWludXRlSUEuCisgKi8KK3N0YXRpYyBpbnQgZ3VjX3Vjb2RlX3hmZXIoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBpbnRlbF9ndWNfZncgKmd1Y19m dyA9ICZkZXZfcHJpdi0+Z3VjLmd1Y19mdzsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2 X3ByaXYtPmRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19n dHRfZG9tYWluKGd1Y19mdy0+Z3VjX2Z3X29iaiwgZmFsc2UpOworCWlmIChyZXQpIHsKKwkJRFJN X0RFQlVHX0RSSVZFUigic2V0LWRvbWFpbiBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXJldHVybiBy ZXQ7CisJfQorCisJcmV0ID0gaTkxNV9nZW1fb2JqX2dndHRfcGluKGd1Y19mdy0+Z3VjX2Z3X29i aiwgMCwgMCk7CisJaWYgKHJldCkgeworCQlEUk1fREVCVUdfRFJJVkVSKCJwaW4gZmFpbGVkICVk XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWludGVsX3VuY29yZV9mb3JjZXdha2Vf Z2V0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKKworCS8qIGluaXQgV09QQ00gKi8KKwlJOTE1 X1dSSVRFKEdVQ19XT1BDTV9TSVpFLCBHVUNfV09QQ01fU0laRV9WQUxVRSk7CisJSTkxNV9XUklU RShETUFfR1VDX1dPUENNX09GRlNFVCwgR1VDX1dPUENNX09GRlNFVCk7CisKKwkvKiBJbnZhbGlk YXRlIEd1QyBUTEIgdG8gbGV0IEd1QyB0YWtlIHRoZSBsYXRlc3QgdXBkYXRlcyB0byBHVFQuICov CisJSTkxNV9XUklURShHRU44X0dUQ1IsIEdFTjhfR1RDUl9JTlZBTElEQVRFKTsKKworCS8qIFNl dCBNTUlPL1dBIGZvciBHdUMgaW5pdCAqLworCUk5MTVfV1JJVEUoRFJCTUlTQzEsIERPT1JCRUxM X0VOQUJMRSk7CisKKwkvKiBFbmFibGUgTUlBIGNhY2hpbmcuIEd1QyBjbG9jayBnYXRpbmcgaXMg ZGlzYWJsZWQuICovCisJSTkxNV9XUklURShHVUNfU0hJTV9DT05UUk9MLCBHVUNfU0hJTV9DT05U Uk9MX1ZBTFVFKTsKKworCS8qIFdhQzZEaXNhbGxvd0J5R2Z4UGF1c2UqLworCUk5MTVfV1JJVEUo R0VONl9HRlhQQVVTRSwgMHgzMEZGRik7CisKKwlpZiAoSVNfU0tZTEFLRShkZXYpKQorCQlJOTE1 X1dSSVRFKEdFTjlfR1RfUE1fQ09ORklHLCBHRU44X0dUX0RPT1JCRUxMX0VOQUJMRSk7CisJZWxz ZQorCQlJOTE1X1dSSVRFKEdFTjhfR1RfUE1fQ09ORklHLCBHRU44X0dUX0RPT1JCRUxMX0VOQUJM RSk7CisKKwlpZiAoSVNfR0VOOShkZXYpKSB7CisJCS8qIERPUCBDbG9jayBHYXRpbmcgRW5hYmxl IGZvciBHdUMgY2xvY2tzICovCisJCUk5MTVfV1JJVEUoR0VON19NSVNDQ1BDVEwsIChHRU44X0RP UF9DTE9DS19HQVRFX0dVQ19FTkFCTEUgfAorCQkJCQkgICAgSTkxNV9SRUFEKEdFTjdfTUlTQ0NQ Q1RMKSkpOworCisJCS8qIGFsbG93cyBmb3IgNXVzIGJlZm9yZSBHVCBjYW4gZ28gdG8gUkM2ICov CisJCUk5MTVfV1JJVEUoR1VDX0FSQVRfQzZESVMsIDB4MUZGKTsKKwl9CisKKwlzZXRfZ3VjX2lu aXRfcGFyYW1zKGRldl9wcml2KTsKKworCXJldCA9IGd1Y191Y29kZV94ZmVyX2RtYShkZXZfcHJp dik7CisKKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FM TCk7CisKKwkvKgorCSAqIFdlIGtlZXAgdGhlIG9iamVjdCBwYWdlcyBmb3IgcmV1c2UgZHVyaW5n IHJlc3VtZS4gQnV0IHdlIGNhbiB1bnBpbiBpdAorCSAqIG5vdyB0aGF0IERNQSBoYXMgY29tcGxl dGVkLCBzbyBpdCBkb2Vzbid0IGNvbnRpbnVlIHRvIHRha2UgdXAgc3BhY2UuCisJICovCisJaTkx NV9nZW1fb2JqZWN0X2dndHRfdW5waW4oZ3VjX2Z3LT5ndWNfZndfb2JqKTsKKworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGd1Y19md19mZXRjaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCBzdHJ1Y3QgaW50ZWxfZ3VjX2Z3ICpndWNfZncpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iajsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWNvbnN0IHU4ICpjc3Nf aGVhZGVyOworCWNvbnN0IHNpemVfdCBtaW5zaXplID0gVU9TX0NTU19IRUFERVJfU0laRSArIFVP U19DU1NfU0lHTklOR19TSVpFOworCWNvbnN0IHNpemVfdCBtYXhzaXplID0gR1VDX1dPUENNX1NJ WkVfVkFMVUUgKyBVT1NfQ1NTX1NJR05JTkdfU0laRQorCQkJLSAweDgwMDA7IC8qIDMyayByZXNl cnZlZCAoOEsgc3RhY2sgKyAyNGsgY29udGV4dCkgKi8KKworCURSTV9ERUJVR19EUklWRVIoImJl Zm9yZSByZXF1ZXN0aW5nIGZpcm13YXJlOiBHdUMgZncgZmV0Y2ggc3RhdHVzICVzXG4iLAorCQlp bnRlbF9ndWNfZndfc3RhdHVzX3JlcHIoZ3VjX2Z3LT5ndWNfZndfZmV0Y2hfc3RhdHVzKSk7CisK KwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGd1Y19mdy0+Z3VjX2Z3X3BhdGgsICZkZXYtPnBk ZXYtPmRldikpCisJCWdvdG8gZmFpbDsKKwlpZiAoIWZ3KQorCQlnb3RvIGZhaWw7CisKKwlEUk1f REVCVUdfRFJJVkVSKCJmZXRjaCBHdUMgZncgZnJvbSAlcyBzdWNjZWVkZWQsIGZ3ICVwXG4iLAor CQlndWNfZnctPmd1Y19md19wYXRoLCBmdyk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJmaXJtd2Fy ZSBmaWxlIHNpemUgJXp1IChtaW5pbXVtICV6dSwgbWF4aW11bSAlenUpXG4iLAorCQlmdy0+c2l6 ZSwgbWluc2l6ZSwgbWF4c2l6ZSk7CisKKwkvKiBDaGVjayB0aGUgc2l6ZSBvZiB0aGUgYmxvYiBi ZWZvZSBleGFtaW5pbmcgYnVmZmVyIGNvbnRlbnRzICovCisJaWYgKGZ3LT5zaXplIDwgbWluc2l6 ZSB8fCBmdy0+c2l6ZSA+IG1heHNpemUpCisJCWdvdG8gZmFpbDsKKworCS8qCisJICogVGhlIEd1 QyBmaXJtd2FyZSBpbWFnZSBoYXMgdGhlIHZlcnNpb24gbnVtYmVyIGVtYmVkZGVkIGF0IGEgd2Vs bC1rbm93bgorCSAqIG9mZnNldCB3aXRoaW4gdGhlIGZpcm13YXJlIGJsb2I7IG5vdGUgdGhhdCBt YWpvciAvIG1pbm9yIHZlcnNpb24gYXJlCisJICogVFdPIGJ5dGVzIGVhY2ggKGkuZS4gdTE2KSwg YWx0aG91Z2ggYWxsIHBvaW50ZXJzIGFuZCBvZmZzZXRzIGFyZSBkZWZpbmVkCisJICogaW4gdGVy bXMgb2YgYnl0ZXMgKHU4KS4KKwkgKi8KKwljc3NfaGVhZGVyID0gZnctPmRhdGEgKyBVT1NfQ1NT X0hFQURFUl9PRkZTRVQ7CisJZ3VjX2Z3LT5ndWNfZndfbWFqb3JfZm91bmQgPSAqKHUxNiAqKShj c3NfaGVhZGVyICsgVU9TX1ZFUl9NQUpPUl9PRkZTRVQpOworCWd1Y19mdy0+Z3VjX2Z3X21pbm9y X2ZvdW5kID0gKih1MTYgKikoY3NzX2hlYWRlciArIFVPU19WRVJfTUlOT1JfT0ZGU0VUKTsKKwor CWlmIChndWNfZnctPmd1Y19md19tYWpvcl9mb3VuZCAhPSBndWNfZnctPmd1Y19md19tYWpvcl93 YW50ZWQgfHwKKwkgICAgZ3VjX2Z3LT5ndWNfZndfbWlub3JfZm91bmQgPCBndWNfZnctPmd1Y19m d19taW5vcl93YW50ZWQpIHsKKwkJRFJNX0VSUk9SKCJHdUMgZmlybXdhcmUgdmVyc2lvbiAlZC4l ZCwgcmVxdWlyZWQgJWQuJWRcbiIsCisJCQlndWNfZnctPmd1Y19md19tYWpvcl9mb3VuZCwgZ3Vj X2Z3LT5ndWNfZndfbWlub3JfZm91bmQsCisJCQlndWNfZnctPmd1Y19md19tYWpvcl93YW50ZWQs IGd1Y19mdy0+Z3VjX2Z3X21pbm9yX3dhbnRlZCk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlEUk1f REVCVUdfRFJJVkVSKCJmaXJtd2FyZSB2ZXJzaW9uICVkLiVkIE9LIChtaW5pbXVtICVkLiVkKVxu IiwKKwkJCWd1Y19mdy0+Z3VjX2Z3X21ham9yX2ZvdW5kLCBndWNfZnctPmd1Y19md19taW5vcl9m b3VuZCwKKwkJCWd1Y19mdy0+Z3VjX2Z3X21ham9yX3dhbnRlZCwgZ3VjX2Z3LT5ndWNfZndfbWlu b3Jfd2FudGVkKTsKKworCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfZnJvbV9kYXRhKGRl diwgZnctPmRhdGEsIGZ3LT5zaXplKTsKKwlpZiAoIW9iaikKKwkJZ290byBmYWlsOworCisJZ3Vj X2Z3LT5ndWNfZndfb2JqID0gb2JqOworCWd1Y19mdy0+Z3VjX2Z3X3NpemUgPSBmdy0+c2l6ZTsK KworCURSTV9ERUJVR19EUklWRVIoIkd1QyBmdyBmZXRjaCBzdGF0dXMgU1VDQ0VTUywgb2JqICVw XG4iLAorCQkJZ3VjX2Z3LT5ndWNfZndfb2JqKTsKKworCXJlbGVhc2VfZmlybXdhcmUoZncpOwor CWd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0YXR1cyA9IEdVQ19GSVJNV0FSRV9TVUNDRVNTOworCXJl dHVybjsKKworZmFpbDoKKwlEUk1fREVCVUdfRFJJVkVSKCJHdUMgZncgZmV0Y2ggc3RhdHVzIEZB SUw7IGZ3ICVwLCBvYmogJXBcbiIsCisJCWZ3LCBndWNfZnctPmd1Y19md19vYmopOworCURSTV9F UlJPUigiRmFpbGVkIHRvIGZldGNoIEd1QyBmaXJtd2FyZSBmcm9tICVzXG4iLAorCQkgIGd1Y19m dy0+Z3VjX2Z3X3BhdGgpOworCisJb2JqID0gZ3VjX2Z3LT5ndWNfZndfb2JqOworCWlmIChvYmop CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOworCWd1Y19mdy0+Z3Vj X2Z3X29iaiA9IE5VTEw7CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsJCS8qIE9LIGV2ZW4gaWYg ZncgaXMgTlVMTCAqLworCWd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0YXR1cyA9IEdVQ19GSVJNV0FS RV9GQUlMOworfQorCisvKioKKyAqIGludGVsX2d1Y191Y29kZV9sb2FkKCkgLSBsb2FkIEd1QyB1 Q29kZSBpbnRvIHRoZSBkZXZpY2UKKyAqIEBkZXY6CWRybSBkZXZpY2UKKyAqCisgKiBDYWxsZWQg ZnJvbSBnZW1faW5pdF9odygpIGR1cmluZyBkcml2ZXIgbG9hZGluZyBhbmQgYWxzbyBhZnRlciBh IEdQVSByZXNldC4KKyAqCisgKiBPbiB0aGUgZmlyc3QgY2FsbCBvbmx5LCB0aGlzIHdpbGwgZmV0 Y2ggdGhlIGJsb2IgZnJvbSB0aGUgZmlsZXN5c3RlbTsKKyAqIHRoZXJlYWZ0ZXIsIHdlIHdpbGwg YWxyZWFkeSBlaXRoZXIgaGF2ZSB0aGUgYmxvYiBpbiBhIEdFTSBvYmplY3QsIG9yCisgKiBoYXZl IGRldGVybWluZWQgdGhhdCBubyB2YWxpZCBmaXJtd2FyZSBpbWFnZSBjb3VsZCBiZSBmb3VuZC4K KyAqCisgKiBJZiB3ZSBoYXZlIGEgZ29vZCBmaXJtd2FyZSBpbWFnZSwgdHJhbnNmZXIgaXQgdG8g dGhlIGgvdy4KKyAqCisgKiBSZXR1cm46CW5vbi16ZXJvIGNvZGUgb24gZXJyb3IKKyAqLworaW50 IGludGVsX2d1Y191Y29kZV9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qg aW50ZWxfZ3VjX2Z3ICpndWNfZncgPSAmZGV2X3ByaXYtPmd1Yy5ndWNfZnc7CisJaW50IGVyciA9 IDA7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJHdUMgZncgc3RhdHVzOiBmZXRjaCAlcywgbG9hZCAl c1xuIiwKKwkJaW50ZWxfZ3VjX2Z3X3N0YXR1c19yZXByKGd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0 YXR1cyksCisJCWludGVsX2d1Y19md19zdGF0dXNfcmVwcihndWNfZnctPmd1Y19md19sb2FkX3N0 YXR1cykpOworCisJaWYgKGd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0YXR1cyA9PSBHVUNfRklSTVdB UkVfTk9ORSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZ3VjX2Z3LT5ndWNfZndfZmV0Y2hfc3RhdHVz ID09IEdVQ19GSVJNV0FSRV9TVUNDRVNTICYmCisJICAgIGd1Y19mdy0+Z3VjX2Z3X2xvYWRfc3Rh dHVzID09IEdVQ19GSVJNV0FSRV9GQUlMKQorCQlyZXR1cm4gLUVOT0VYRUM7CisKKwlndWNfZnct Pmd1Y19md19sb2FkX3N0YXR1cyA9IEdVQ19GSVJNV0FSRV9QRU5ESU5HOworCWlmIChndWNfZnct Pmd1Y19md19mZXRjaF9zdGF0dXMgPT0gR1VDX0ZJUk1XQVJFX1BFTkRJTkcpIHsKKwkJLyogV2Ug b25seSBjb21lIGhlcmUgb25jZSAqLworCQlndWNfZndfZmV0Y2goZGV2LCBndWNfZncpOworCQkv KiBzdGF0dXMgbXVzdCBub3cgYmUgRkFJTCBvciBTVUNDRVNTICovCisJfQorCisJRFJNX0RFQlVH X0RSSVZFUigiR3VDIGZ3IGZldGNoIHN0YXR1cyAlc1xuIiwKKwkJaW50ZWxfZ3VjX2Z3X3N0YXR1 c19yZXByKGd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0YXR1cykpOworCisJc3dpdGNoIChndWNfZnct Pmd1Y19md19mZXRjaF9zdGF0dXMpIHsKKwljYXNlIEdVQ19GSVJNV0FSRV9GQUlMOgorCQkvKiBz b21ldGhpbmcgd2VudCB3cm9uZyA6KCAqLworCQllcnIgPSAtRUlPOworCQlnb3RvIGZhaWw7CisK KwljYXNlIEdVQ19GSVJNV0FSRV9OT05FOgorCWNhc2UgR1VDX0ZJUk1XQVJFX1BFTkRJTkc6CisJ ZGVmYXVsdDoKKwkJLyogImNhbid0IGhhcHBlbiIgKi8KKwkJV0FSTl9PTkNFKDEsICJHdUMgZncg JXMgaW52YWxpZCBndWNfZndfZmV0Y2hfc3RhdHVzICVzIFslZF1cbiIsCisJCQlndWNfZnctPmd1 Y19md19wYXRoLAorCQkJaW50ZWxfZ3VjX2Z3X3N0YXR1c19yZXByKGd1Y19mdy0+Z3VjX2Z3X2Zl dGNoX3N0YXR1cyksCisJCQlndWNfZnctPmd1Y19md19mZXRjaF9zdGF0dXMpOworCQllcnIgPSAt RU5YSU87CisJCWdvdG8gZmFpbDsKKworCWNhc2UgR1VDX0ZJUk1XQVJFX1NVQ0NFU1M6CisJCWJy ZWFrOworCX0KKworCWVyciA9IGd1Y191Y29kZV94ZmVyKGRldl9wcml2KTsKKwlpZiAoZXJyKQor CQlnb3RvIGZhaWw7CisKKwlndWNfZnctPmd1Y19md19sb2FkX3N0YXR1cyA9IEdVQ19GSVJNV0FS RV9TVUNDRVNTOworCisJRFJNX0RFQlVHX0RSSVZFUigiR3VDIGZ3IHN0YXR1czogZmV0Y2ggJXMs IGxvYWQgJXNcbiIsCisJCWludGVsX2d1Y19md19zdGF0dXNfcmVwcihndWNfZnctPmd1Y19md19m ZXRjaF9zdGF0dXMpLAorCQlpbnRlbF9ndWNfZndfc3RhdHVzX3JlcHIoZ3VjX2Z3LT5ndWNfZndf bG9hZF9zdGF0dXMpKTsKKworCXJldHVybiAwOworCitmYWlsOgorCWlmIChndWNfZnctPmd1Y19m d19sb2FkX3N0YXR1cyA9PSBHVUNfRklSTVdBUkVfUEVORElORykKKwkJZ3VjX2Z3LT5ndWNfZndf bG9hZF9zdGF0dXMgPSBHVUNfRklSTVdBUkVfRkFJTDsKKworCURSTV9FUlJPUigiRmFpbGVkIHRv IGluaXRpYWxpemUgR3VDLCBlcnJvciAlZFxuIiwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisK Ky8qKgorICogaW50ZWxfZ3VjX3Vjb2RlX2luaXQoKSAtIGRlZmluZSBwYXJhbWV0ZXJzIGZvciBm ZXRjaGluZyBmaXJtd2FyZQorICogQGRldjoJZHJtIGRldmljZQorICoKKyAqIENhbGxlZCBlYXJs eSBkdXJpbmcgZHJpdmVyIGxvYWQsIGJlZm9yZSBHRU0gaXMgaW5pdGlhbGlzZWQuCisgKiBEcml2 ZXIgaXMgc2luZ2xlIHRocmVhZGVkLCBzbyBubyBtdXRleCBpcyByZXF1aXJlZC4KKyAqCisgKiBU aGlzIGp1c3Qgc2V0cyBwYXJhbWV0ZXJzIGZvciB1c2Ugd2hlbiBpbnRlbF9ndWNfdWNvZGVfbG9h ZCgpCisgKiBpcyBjYWxsZWQgbGF0ZXIsIGFmdGVyIEdFTSBpbml0aWFsaXNhdGlvbiBpcyBjb21w bGV0ZS4KKyAqLwordm9pZCBpbnRlbF9ndWNfdWNvZGVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3By aXZhdGU7CisJc3RydWN0IGludGVsX2d1Y19mdyAqZ3VjX2Z3ID0gJmRldl9wcml2LT5ndWMuZ3Vj X2Z3OworCWNvbnN0IGNoYXIgKmZ3X3BhdGg7CisKKwlpZiAoIUhBU19HVUNfU0NIRUQoZGV2KSkK KwkJaTkxNS5lbmFibGVfZ3VjX3N1Ym1pc3Npb24gPSBmYWxzZTsKKworCWlmICghSEFTX0dVQ19V Q09ERShkZXYpKSB7CisJCWZ3X3BhdGggPSBOVUxMOworCX0gZWxzZSBpZiAoSVNfU0tZTEFLRShk ZXYpKSB7CisJCWZ3X3BhdGggPSBJOTE1X1NLTF9HVUNfVUNPREU7CisJCWd1Y19mdy0+Z3VjX2Z3 X21ham9yX3dhbnRlZCA9IDM7CisJCWd1Y19mdy0+Z3VjX2Z3X21pbm9yX3dhbnRlZCA9IDA7CisJ fSBlbHNlIHsKKwkJaTkxNS5lbmFibGVfZ3VjX3N1Ym1pc3Npb24gPSBmYWxzZTsKKwkJZndfcGF0 aCA9ICIiOwkvKiB1bmtub3duIGRldmljZSAqLworCX0KKworCWd1Y19mdy0+Z3VjX2RldiA9IGRl djsKKwlndWNfZnctPmd1Y19md19wYXRoID0gZndfcGF0aDsKKwlndWNfZnctPmd1Y19md19mZXRj aF9zdGF0dXMgPSBHVUNfRklSTVdBUkVfTk9ORTsKKwlndWNfZnctPmd1Y19md19sb2FkX3N0YXR1 cyA9IEdVQ19GSVJNV0FSRV9OT05FOworCisJaWYgKGZ3X3BhdGggPT0gTlVMTCkKKwkJcmV0dXJu OworCisJaWYgKCpmd19wYXRoID09ICdcMCcpIHsKKwkJRFJNX0VSUk9SKCJObyBHdUMgZmlybXdh cmUga25vd24gZm9yIHRoaXMgcGxhdGZvcm1cbiIpOworCQlndWNfZnctPmd1Y19md19mZXRjaF9z dGF0dXMgPSBHVUNfRklSTVdBUkVfRkFJTDsKKwkJcmV0dXJuOworCX0KKworCWd1Y19mdy0+Z3Vj X2Z3X2ZldGNoX3N0YXR1cyA9IEdVQ19GSVJNV0FSRV9QRU5ESU5HOworCURSTV9ERUJVR19EUklW RVIoIkd1QyBmaXJtd2FyZSBwZW5kaW5nLCBwYXRoICVzXG4iLCBmd19wYXRoKTsKK30KKworLyoq CisgKiBpbnRlbF9ndWNfdWNvZGVfZmluaSgpIC0gY2xlYW4gdXAgYWxsIGFsbG9jYXRlZCByZXNv dXJjZXMKKyAqIEBkZXY6CWRybSBkZXZpY2UKKyAqLwordm9pZCBpbnRlbF9ndWNfdWNvZGVfZmlu aShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX2d1Y19mdyAqZ3VjX2Z3 ID0gJmRldl9wcml2LT5ndWMuZ3VjX2Z3OworCisJaWYgKGd1Y19mdy0+Z3VjX2Z3X29iaikKKwkJ ZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJmd1Y19mdy0+Z3VjX2Z3X29iai0+YmFzZSk7CisJ Z3VjX2Z3LT5ndWNfZndfb2JqID0gTlVMTDsKKworCWd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0YXR1 cyA9IEdVQ19GSVJNV0FSRV9OT05FOworfQotLSAKMS45LjEKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==