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,3/4] drivers: edac: Add EDAC driver support for QCOM SoCs From: Venkata Narendra Kumar Gutta Message-Id: <1533155615-27929-4-git-send-email-vnkgutta@codeaurora.org> Date: Wed, 1 Aug 2018 13:33:34 -0700 To: evgreen@chromium.org, robh@kernel.org, mchehab@kernel.org, linux-edac@vger.kernel.org, linux-kernel@vger.kernel.org, andy.gross@linaro.org, david.brown@linaro.org, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, robh+dt@kernel.org, mark.rutland@arm.com, devicetree@vger.kernel.org, tsoni@codeaurora.org, ckadabi@codeaurora.org, rishabhb@codeaurora.org, bp@alien8.de Cc: Venkata Narendra Kumar Gutta List-ID: RnJvbTogQ2hhbm5hZ291ZCBLYWRhYmkgPGNrYWRhYmlAY29kZWF1cm9yYS5vcmc+CgpBZGQgZXJy b3IgcmVwb3J0aW5nIGRyaXZlciBmb3IgU0JFcyBhbmQgREJFcy4gQXMgb2Ygbm93LCB0aGlzIGRy aXZlcgpzdXBwb3J0cyBlcnAgZm9yIExhc3QgTGV2ZWwgQ2FjaGUgQ29udHJvbGxlciAoTExDQyku IFRoaXMgZHJpdmVyIHRha2VzCmNhcmUgb2YgZHVtcGluZyByZWdpc3RlcnMgYW5kIGFkZGluZyBj b25maWcgb3B0aW9ucyB0byBlbmFibGUgYW5kCmRpc2FibGUgcGFuaWMgd2hlbiB0aGUgZXJyb3Jz IGhhcHBlbiBpbiBjYWNoZS4KCkNvLWRldmVsb3BlZC1ieTogVmVua2F0YSBOYXJlbmRyYSBLdW1h ciBHdXR0YSA8dm5rZ3V0dGFAY29kZWF1cm9yYS5vcmc+ClNpZ25lZC1vZmYtYnk6IFZlbmthdGEg TmFyZW5kcmEgS3VtYXIgR3V0dGEgPHZua2d1dHRhQGNvZGVhdXJvcmEub3JnPgpTaWduZWQtb2Zm LWJ5OiBDaGFubmFnb3VkIEthZGFiaSA8Y2thZGFiaUBjb2RlYXVyb3JhLm9yZz4KLS0tCiBNQUlO VEFJTkVSUyAgICAgICAgICAgICAgfCAgIDcgKwogZHJpdmVycy9lZGFjL0tjb25maWcgICAgIHwg IDI4ICsrKwogZHJpdmVycy9lZGFjL01ha2VmaWxlICAgIHwgICAxICsKIGRyaXZlcnMvZWRhYy9x Y29tX2VkYWMuYyB8IDUwNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA1NDMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZWRhYy9xY29tX2VkYWMuYwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJT IGIvTUFJTlRBSU5FUlMKaW5kZXggZjZhOWIwOC4uNjhiMzQ4NCAxMDA2NDQKLS0tIGEvTUFJTlRB SU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTUyMjcsNiArNTIyNywxMyBAQCBMOglsaW51eC1l ZGFjQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9lZGFjL3RpX2Vk YWMuYwogCitFREFDLVFVQUxDT01NCitNOglDaGFubmFnb3VkIEthZGFiaTxja2FkYWJpQGNvZGVh dXJvcmEub3JnPgorTToJVmVua2F0YSBOYXJlbmRyYSBLdW1hciBHdXR0YTx2bmtndXR0YUBjb2Rl YXVyb3JhLm9yZz4KK0w6CWxpbnV4LWFybS1tc21Admdlci5rZXJuZWwub3JnCitTOglNYWludGFp bmVkCitGOglkcml2ZXJzL2VkYWMvcWNvbV9lZGFjLmMKKwogRURJUk9MIFVBLTEwMS9VQS0xMDAw IERSSVZFUgogTToJQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CiBMOglhbHNh LWRldmVsQGFsc2EtcHJvamVjdC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwpp bmRleCA1NzMwNGIyLi5jNjU0YjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvS2NvbmZpZwor KysgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwpAQCAtNDYwLDQgKzQ2MCwzMiBAQCBjb25maWcgRURB Q19USQogCSAgU3VwcG9ydCBmb3IgZXJyb3IgZGV0ZWN0aW9uIGFuZCBjb3JyZWN0aW9uIG9uIHRo ZQogICAgICAgICAgIFRJIFNvQ3MuCiAKK2NvbmZpZyBFREFDX1FDT00KKwlkZXBlbmRzIG9uIEVE QUM9eQorCXRyaXN0YXRlICJRQ09NIEVEQUMgQ29udHJvbGxlciIKKwloZWxwCisJCVN1cHBvcnQg Zm9yIGVycm9yIGRldGVjdGlvbiBhbmQgY29ycmVjdGlvbiBvbiB0aGUKKwkJUUNPTSBTb0NzLgor Citjb25maWcgRURBQ19RQ09NX0xMQ0MKKwlkZXBlbmRzIG9uIEVEQUNfUUNPTT15ICYmIFFDT01f TExDQworCXRyaXN0YXRlICJRQ09NIEVEQUMgQ29udHJvbGxlciBmb3IgTExDQyBDYWNoZSIKKwlo ZWxwCisJCVN1cHBvcnQgZm9yIGVycm9yIGRldGVjdGlvbiBhbmQgY29ycmVjdGlvbiBvbiB0aGUK KwkJUUNPTSBMTENDIGNhY2hlLiBSZXBvcnQgZXJyb3JzIGNhdWdodCBieSBMTENDIEVDQworCQlt ZWNoYW5pc20uCisKKwkJRm9yIGRlYnVnZ2luZyBpc3N1ZXMgaGF2aW5nIHRvIGRvIHdpdGggc3Rh YmlsaXR5IGFuZCBvdmVyYWxsIHN5c3RlbQorCQloZWFsdGgsIHlvdSBzaG91bGQgcHJvYmFibHkg c2F5ICdZJyBoZXJlLgorCitjb25maWcgRURBQ19RQ09NX0xMQ0NfUEFOSUNfT05fVUUKKwlkZXBl bmRzIG9uIEVEQUNfUUNPTV9MTENDCisJYm9vbCAiUGFuaWMgb24gdW5jb3JyZWN0YWJsZSBlcnJv cnMgLSBxY29tIGxsY2MiCisJaGVscAorCQlGb3JjaWJseSBjYXVzZSBhIGtlcm5lbCBwYW5pYyBp ZiBhbiB1bmNvcnJlY3RhYmxlIGVycm9yIChVRSkgaXMKKwkJZGV0ZWN0ZWQuIFRoaXMgY2FuIHJl ZHVjZSBkZWJ1Z2dpbmcgdGltZXMgb24gaGFyZHdhcmUgd2hpY2ggbWF5IGJlCisJCW9wZXJhdGlu ZyBhdCB2b2x0YWdlcyBvciBmcmVxdWVuY2llcyBvdXRzaWRlIG5vcm1hbCBzcGVjaWZpY2F0aW9u LgorCisJCUZvciBwcm9kdWN0aW9uIGJ1aWxkcywgeW91IHNob3VsZCBwcm9iYWJseSBzYXkgJ04n IGhlcmUuCisKIGVuZGlmICMgRURBQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL01ha2VmaWxl IGIvZHJpdmVycy9lZGFjL01ha2VmaWxlCmluZGV4IDAyYjQzYTcuLjcxNjA5NmQgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKQEAg LTc3LDMgKzc3LDQgQEAgb2JqLSQoQ09ORklHX0VEQUNfQUxURVJBKQkJKz0gYWx0ZXJhX2VkYWMu bwogb2JqLSQoQ09ORklHX0VEQUNfU1lOT1BTWVMpCQkrPSBzeW5vcHN5c19lZGFjLm8KIG9iai0k KENPTkZJR19FREFDX1hHRU5FKQkJKz0geGdlbmVfZWRhYy5vCiBvYmotJChDT05GSUdfRURBQ19U SSkJCQkrPSB0aV9lZGFjLm8KK29iai0kKENPTkZJR19FREFDX1FDT00pCQkJKz0gcWNvbV9lZGFj Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9xY29tX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9x Y29tX2VkYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjNlMmIwCi0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9lZGFjL3Fjb21fZWRhYy5jCkBAIC0wLDAgKzEsNTA3 IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdo dCAoYykgMjAxOCwgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2VkYWMuaD4K KyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAu aD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2MvcWNv bS9sbGNjLXFjb20uaD4KKyNpbmNsdWRlICJlZGFjX21jLmgiCisjaW5jbHVkZSAiZWRhY19kZXZp Y2UuaCIKKworI2lmZGVmIENPTkZJR19FREFDX1FDT01fTExDQ19QQU5JQ19PTl9VRQorI2RlZmlu ZSBMTENDX0VSUF9QQU5JQ19PTl9VRSAgICAgICAgICAgIDEKKyNlbHNlCisjZGVmaW5lIExMQ0Nf RVJQX1BBTklDX09OX1VFICAgICAgICAgICAgMAorI2VuZGlmCisKKyNkZWZpbmUgRURBQ19MTEND ICAgICAgICAgICAgICAgICAgICAgICAicWNvbV9sbGNjIgorCisjZGVmaW5lIFRSUF9TWU5fUkVH X0NOVCAgICAgICAgICAgICAgICAgNgorCisjZGVmaW5lIERSUF9TWU5fUkVHX0NOVCAgICAgICAg ICAgICAgICAgOAorCisjZGVmaW5lIExMQ0NfQ09NTU9OX1NUQVRVUzAgICAgICAgICAgICAgMHgw MDAzMDAwQworI2RlZmluZSBMTENDX0xCX0NOVF9NQVNLICAgICAgICAgICAgICAgIEdFTk1BU0so MzEsIDI4KQorI2RlZmluZSBMTENDX0xCX0NOVF9TSElGVCAgICAgICAgICAgICAgIDI4CisKKy8q IHNpbmdsZSAmIERvdWJsZSBCaXQgc3luZHJvbWUgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmlu ZSBUUlBfRUNDX1NCX0VSUl9TWU4wICAgICAgICAgICAgIDB4MDAwMjMwNEMKKyNkZWZpbmUgVFJQ X0VDQ19EQl9FUlJfU1lOMCAgICAgICAgICAgICAweDAwMDIwMzcwCisjZGVmaW5lIERSUF9FQ0Nf U0JfRVJSX1NZTjAgICAgICAgICAgICAgMHgwMDA0MjA0QworI2RlZmluZSBEUlBfRUNDX0RCX0VS Ul9TWU4wICAgICAgICAgICAgIDB4MDAwNDIwNzAKKworLyogRXJyb3IgcmVnaXN0ZXIgb2Zmc2V0 cyAqLworI2RlZmluZSBUUlBfRUNDX0VSUk9SX1NUQVRVUzEgICAgICAgICAgIDB4MDAwMjAzNDgK KyNkZWZpbmUgVFJQX0VDQ19FUlJPUl9TVEFUVVMwICAgICAgICAgICAweDAwMDIwMzQ0CisjZGVm aW5lIERSUF9FQ0NfRVJST1JfU1RBVFVTMSAgICAgICAgICAgMHgwMDA0MjA0OAorI2RlZmluZSBE UlBfRUNDX0VSUk9SX1NUQVRVUzAgICAgICAgICAgIDB4MDAwNDIwNDQKKworLyogVFJQLCBEUlAg aW50ZXJydXB0IHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgRFJQX0lOVEVSUlVQVF9TVEFU VVMgICAgICAgICAgICAweDAwMDQxMDAwCisjZGVmaW5lIFRSUF9JTlRFUlJVUFRfMF9TVEFUVVMg ICAgICAgICAgMHgwMDAyMDQ4MAorI2RlZmluZSBEUlBfSU5URVJSVVBUX0NMRUFSICAgICAgICAg ICAgIDB4MDAwNDEwMDgKKyNkZWZpbmUgRFJQX0VDQ19FUlJPUl9DTlRSX0NMRUFSICAgICAgICAw eDAwMDQwMDA0CisjZGVmaW5lIFRSUF9JTlRFUlJVUFRfMF9DTEVBUiAgICAgICAgICAgMHgwMDAy MDQ4NAorI2RlZmluZSBUUlBfRUNDX0VSUk9SX0NOVFJfQ0xFQVIgICAgICAgIDB4MDAwMjA0NDAK KworLyogTWFzayBhbmQgc2hpZnQgbWFjcm9zICovCisjZGVmaW5lIEVDQ19EQl9FUlJfQ09VTlRf TUFTSyAgICAgICAgICAgR0VOTUFTSyg0LCAwKQorI2RlZmluZSBFQ0NfREJfRVJSX1dBWVNfTUFT SyAgICAgICAgICAgIEdFTk1BU0soMzEsIDE2KQorI2RlZmluZSBFQ0NfREJfRVJSX1dBWVNfU0hJ RlQgICAgICAgICAgIEJJVCg0KQorCisjZGVmaW5lIEVDQ19TQl9FUlJfQ09VTlRfTUFTSyAgICAg ICAgICAgR0VOTUFTSygyMywgMTYpCisjZGVmaW5lIEVDQ19TQl9FUlJfQ09VTlRfU0hJRlQgICAg ICAgICAgQklUKDQpCisjZGVmaW5lIEVDQ19TQl9FUlJfV0FZU19NQVNLICAgICAgICAgICAgR0VO TUFTSygxNSwgMCkKKworI2RlZmluZSBTQl9FQ0NfRVJST1IgICAgICAgICAgICAgICAgICAgIEJJ VCgwKQorI2RlZmluZSBEQl9FQ0NfRVJST1IgICAgICAgICAgICAgICAgICAgIEJJVCgxKQorCisj ZGVmaW5lIERSUF9UUlBfSU5UX0NMRUFSICAgICAgICAgICAgICAgR0VOTUFTSygxLCAwKQorI2Rl ZmluZSBEUlBfVFJQX0NOVF9DTEVBUiAgICAgICAgICAgICAgIEdFTk1BU0soMSwgMCkKKworLyog Q29uZmlnIHJlZ2lzdGVycyBvZmZzZXRzKi8KKyNkZWZpbmUgRFJQX0VDQ19FUlJPUl9DRkcgICAg ICAgICAgICAgICAweDAwMDQwMDAwCisKKy8qIFRSUCwgRFJQIGludGVycnVwdCByZWdpc3RlciBv ZmZzZXRzICovCisjZGVmaW5lIENNTl9JTlRFUlJVUFRfMF9FTkFCTEUgICAgICAgICAgMHgwMDAz MDAxQworI2RlZmluZSBDTU5fSU5URVJSVVBUXzJfRU5BQkxFICAgICAgICAgIDB4MDAwMzAwM0MK KyNkZWZpbmUgVFJQX0lOVEVSUlVQVF8wX0VOQUJMRSAgICAgICAgICAweDAwMDIwNDg4CisjZGVm aW5lIERSUF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgMHgwMDA0MTAwQworCisjZGVmaW5l IFNCX0VSUk9SX1RIUkVTSE9MRCAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIFNCX0VSUk9SX1RI UkVTSE9MRF9TSElGVCAgICAgICAgMjQKKyNkZWZpbmUgU0JfREJfVFJQX0lOVEVSUlVQVF9FTkFC TEUgICAgICAweDMKKyNkZWZpbmUgVFJQMF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAweDEK KyNkZWZpbmUgRFJQMF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICBCSVQoNikKKyNkZWZpbmUg U0JfREJfRFJQX0lOVEVSUlVQVF9FTkFCTEUgICAgICAweDMKKworCitlbnVtIHsKKwlMTENDX0RS QU1fQ0UgPSAwLAorCUxMQ0NfRFJBTV9VRSwKKwlMTENDX1RSQU1fQ0UsCisJTExDQ19UUkFNX1VF LAorfTsKKworc3RydWN0IGVycm9yc19lZGFjIHsKKwljb25zdCBjaGFyICptc2c7CisJdm9pZCAo KmZ1bmMpKHN0cnVjdCBlZGFjX2RldmljZV9jdGxfaW5mbyAqZWRldl9jdGwsCisJCQkJaW50IGlu c3RfbnIsIGludCBibG9ja19uciwgY29uc3QgY2hhciAqbXNnKTsKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZXJyb3JzX2VkYWMgZXJyb3JzW10gPSB7CisJeyJMTENDIERhdGEgUkFNIGNvcnJl Y3RhYmxlIEVycm9yIiwgZWRhY19kZXZpY2VfaGFuZGxlX2NlfSwKKwl7IkxMQ0MgRGF0YSBSQU0g dW5jb3JyZWN0YWJsZSBFcnJvciIsIGVkYWNfZGV2aWNlX2hhbmRsZV91ZX0sCisJeyJMTENDIFRh ZyBSQU0gY29ycmVjdGFibGUgRXJyb3IiLCBlZGFjX2RldmljZV9oYW5kbGVfY2V9LAorCXsiTExD QyBUYWcgUkFNIHVuY29ycmVjdGFibGUgRXJyb3IiLCBlZGFjX2RldmljZV9oYW5kbGVfdWV9LAor fTsKKworc3RhdGljIGludCBxY29tX2xsY2NfY29yZV9zZXR1cChzdHJ1Y3QgcmVnbWFwICpsbGNj X2JjYXN0X3JlZ21hcCkKK3sKKwl1MzIgc2JfZXJyX3RocmVzaG9sZDsKKwlpbnQgcmV0OworCisJ LyogRW5hYmxlIFRSUCBpbiBpbnN0YW5jZSAyIG9mIGNvbW1vbiBpbnRlcnJ1cHQgZW5hYmxlIHJl Z2lzdGVyICovCisJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKGxsY2NfYmNhc3RfcmVnbWFwLCBD TU5fSU5URVJSVVBUXzJfRU5BQkxFLAorCQkJCSBUUlAwX0lOVEVSUlVQVF9FTkFCTEUsCisJCQkJ IFRSUDBfSU5URVJSVVBUX0VOQUJMRSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8q IEVuYWJsZSBFQ0MgaW50ZXJydXB0cyBvbiBUYWcgUmFtICovCisJcmV0ID0gcmVnbWFwX3VwZGF0 ZV9iaXRzKGxsY2NfYmNhc3RfcmVnbWFwLCBUUlBfSU5URVJSVVBUXzBfRU5BQkxFLAorCQkJCSBT Ql9EQl9UUlBfSU5URVJSVVBUX0VOQUJMRSwKKwkJCQkgU0JfREJfVFJQX0lOVEVSUlVQVF9FTkFC TEUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBFbmFibGUgU0IgZXJyb3IgZm9y IERhdGEgUkFNICovCisJc2JfZXJyX3RocmVzaG9sZCA9IChTQl9FUlJPUl9USFJFU0hPTEQgPDwg U0JfRVJST1JfVEhSRVNIT0xEX1NISUZUKTsKKwlyZXQgPSByZWdtYXBfd3JpdGUobGxjY19iY2Fz dF9yZWdtYXAsIERSUF9FQ0NfRVJST1JfQ0ZHLAorCQkJICAgc2JfZXJyX3RocmVzaG9sZCk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEVuYWJsZSBEUlAgaW4gaW5zdGFuY2UgMiBv ZiBjb21tb24gaW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciAqLworCXJldCA9IHJlZ21hcF91cGRh dGVfYml0cyhsbGNjX2JjYXN0X3JlZ21hcCwgQ01OX0lOVEVSUlVQVF8yX0VOQUJMRSwKKwkJCQkg RFJQMF9JTlRFUlJVUFRfRU5BQkxFLAorCQkJCSBEUlAwX0lOVEVSUlVQVF9FTkFCTEUpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBFbmFibGUgRUNDIGludGVycnVwdHMgb24gRGF0 YSBSYW0gKi8KKwlyZXQgPSByZWdtYXBfd3JpdGUobGxjY19iY2FzdF9yZWdtYXAsIERSUF9JTlRF UlJVUFRfRU5BQkxFLAorCQkJICAgU0JfREJfRFJQX0lOVEVSUlVQVF9FTkFCTEUpOworCXJldHVy biByZXQ7Cit9CisKKy8qIENsZWFyIHRoZSBlcnJvciBpbnRlcnJ1cHQgYW5kIGNvdW50ZXIgcmVn aXN0ZXJzICovCitzdGF0aWMgaW50IHFjb21fbGxjY19jbGVhcl9lcnJvcnMoaW50IGVycl90eXBl LCBzdHJ1Y3QgbGxjY19kcnZfZGF0YSAqZHJ2KQoreworCWludCByZXQgPSAwOworCisJc3dpdGNo IChlcnJfdHlwZSkgeworCWNhc2UgTExDQ19EUkFNX0NFOgorCWNhc2UgTExDQ19EUkFNX1VFOgor CQkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovCisJCXJldCA9IHJlZ21hcF93cml0ZShkcnYtPmJj YXN0X3JlZ21hcCwgRFJQX0lOVEVSUlVQVF9DTEVBUiwKKwkJCQkgICBEUlBfVFJQX0lOVF9DTEVB Uik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCS8qIENsZWFyIHRoZSBjb3VudGVy cyAqLworCQlyZXQgPSByZWdtYXBfd3JpdGUoZHJ2LT5iY2FzdF9yZWdtYXAsIERSUF9FQ0NfRVJS T1JfQ05UUl9DTEVBUiwKKwkJCQkgICBEUlBfVFJQX0NOVF9DTEVBUik7CisJCWlmIChyZXQpCisJ CQlyZXR1cm4gcmV0OworCQlicmVhazsKKwljYXNlIExMQ0NfVFJBTV9DRToKKwljYXNlIExMQ0Nf VFJBTV9VRToKKwkJcmV0ID0gcmVnbWFwX3dyaXRlKGRydi0+YmNhc3RfcmVnbWFwLCBUUlBfSU5U RVJSVVBUXzBfQ0xFQVIsCisJCQkJICAgRFJQX1RSUF9JTlRfQ0xFQVIpOworCQlpZiAocmV0KQor CQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSByZWdtYXBfd3JpdGUoZHJ2LT5iY2FzdF9yZWdtYXAs IFRSUF9FQ0NfRVJST1JfQ05UUl9DTEVBUiwKKwkJCQkgICBEUlBfVFJQX0NOVF9DTEVBUik7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30K KworLyogRHVtcCBzeW5kcm9tZSByZWdpc3RlcnMgZm9yIHRhZyBSYW0gRG91YmxlIGJpdCBlcnJv cnMgKi8KK3N0YXRpYyBpbnQgZHVtcF90cnBfZGJfc3luX3JlZyhzdHJ1Y3QgbGxjY19kcnZfZGF0 YSAqZHJ2LCB1MzIgYmFuaykKK3sKKwlpbnQgZGJfZXJyX2NudCwgZGJfZXJyX3dheXMsIHJldCwg aTsKKwl1MzIgc3luZF9yZWcsIHN5bmRfdmFsOworCisJZm9yIChpID0gMDsgaSA8IFRSUF9TWU5f UkVHX0NOVDsgaSsrKSB7CisJCXN5bmRfcmVnID0gVFJQX0VDQ19EQl9FUlJfU1lOMCArIChpICog NCk7CisJCXJldCA9IHJlZ21hcF9yZWFkKGRydi0+cmVnbWFwLCBkcnYtPm9mZnNldHNbYmFua10g KyBzeW5kX3JlZywKKwkJCQkgICZzeW5kX3ZhbCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0 OworCQllZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfTExDQywgIlRSUF9FQ0NfU1lOJWQ6IDB4 JTh4XG4iLAorCQkJICAgIGksIHN5bmRfdmFsKTsKKwl9CisKKwlyZXQgPSByZWdtYXBfcmVhZChk cnYtPnJlZ21hcCwKKwkJCSAgZHJ2LT5vZmZzZXRzW2JhbmtdICsgVFJQX0VDQ19FUlJPUl9TVEFU VVMxLAorCQkJICAmZGJfZXJyX2NudCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlkYl9l cnJfY250ID0gKGRiX2Vycl9jbnQgJiBFQ0NfREJfRVJSX0NPVU5UX01BU0spOworCWVkYWNfcHJp bnRrKEtFUk5fQ1JJVCwgRURBQ19MTENDLCAiRG91YmxlLUJpdCBlcnJvciBjb3VudDogMHglNHhc biIsCisJCSAgICBkYl9lcnJfY250KTsKKworCXJldCA9IHJlZ21hcF9yZWFkKGRydi0+cmVnbWFw LAorCQkJICBkcnYtPm9mZnNldHNbYmFua10gKyBUUlBfRUNDX0VSUk9SX1NUQVRVUzAsCisJCQkg ICZkYl9lcnJfd2F5cyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlkYl9lcnJfd2F5cyA9 IChkYl9lcnJfd2F5cyAmIEVDQ19EQl9FUlJfV0FZU19NQVNLKTsKKwlkYl9lcnJfd2F5cyA+Pj0g RUNDX0RCX0VSUl9XQVlTX1NISUZUOworCisJZWRhY19wcmludGsoS0VSTl9DUklULCBFREFDX0xM Q0MsICJEb3VibGUtQml0IGVycm9yIHdheXM6IDB4JTR4XG4iLAorCQkgICAgZGJfZXJyX3dheXMp OworCisJcmV0dXJuIHJldDsKK30KKworLyogRHVtcCBzeW5kcm9tZSByZWdpc3RlciBmb3IgdGFn IFJhbSBTaW5nbGUgQml0IEVycm9ycyAqLworc3RhdGljIGludCBkdW1wX3RycF9zYl9zeW5fcmVn KHN0cnVjdCBsbGNjX2Rydl9kYXRhICpkcnYsIHUzMiBiYW5rKQoreworCWludCBzYl9lcnJfY250 LCBzYl9lcnJfd2F5cywgcmV0LCBpOworCXUzMiBzeW5kX3JlZywgc3luZF92YWw7CisKKwlmb3Ig KGkgPSAwOyBpIDwgVFJQX1NZTl9SRUdfQ05UOyBpKyspIHsKKwkJc3luZF9yZWcgPSBUUlBfRUND X1NCX0VSUl9TWU4wICsgKGkgKiA0KTsKKwkJcmV0ID0gcmVnbWFwX3JlYWQoZHJ2LT5yZWdtYXAs IGRydi0+b2Zmc2V0c1tiYW5rXSArIHN5bmRfcmVnLAorCQkJCSAgJnN5bmRfdmFsKTsKKwkJaWYg KHJldCkKKwkJCXJldHVybiByZXQ7CisJCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19MTEND LCAiVFJQX0VDQ19TWU4lZDogMHglOHhcbiIsIGksCisJCQkgICAgc3luZF92YWwpOworCX0KKwor CXJldCA9IHJlZ21hcF9yZWFkKGRydi0+cmVnbWFwLAorCQkJICBkcnYtPm9mZnNldHNbYmFua10g KyBUUlBfRUNDX0VSUk9SX1NUQVRVUzEsCisJCQkgICZzYl9lcnJfY250KTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCXNiX2Vycl9jbnQgPSAoc2JfZXJyX2NudCAmIEVDQ19TQl9FUlJfQ09V TlRfTUFTSyk7CisJc2JfZXJyX2NudCA+Pj0gRUNDX1NCX0VSUl9DT1VOVF9TSElGVDsKKwllZGFj X3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfTExDQywgIlNpbmdsZS1CaXQgZXJyb3IgY291bnQ6IDB4 JTR4XG4iLAorCQkgICAgc2JfZXJyX2NudCk7CisKKwlyZXQgPSByZWdtYXBfcmVhZChkcnYtPnJl Z21hcCwKKwkJCSAgZHJ2LT5vZmZzZXRzW2JhbmtdICsgVFJQX0VDQ19FUlJPUl9TVEFUVVMwLAor CQkJICAmc2JfZXJyX3dheXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzYl9lcnJf d2F5cyA9IHNiX2Vycl93YXlzICYgRUNDX1NCX0VSUl9XQVlTX01BU0s7CisKKwllZGFjX3ByaW50 ayhLRVJOX0NSSVQsIEVEQUNfTExDQywgIlNpbmdsZS1CaXQgZXJyb3Igd2F5czogMHglNHhcbiIs CisJCSAgICBzYl9lcnJfd2F5cyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBEdW1wIHN5bmRy b21lIHJlZ2lzdGVycyBmb3IgRGF0YSBSYW0gRG91YmxlIGJpdCBlcnJvcnMgKi8KK3N0YXRpYyBp bnQgZHVtcF9kcnBfZGJfc3luX3JlZyhzdHJ1Y3QgbGxjY19kcnZfZGF0YSAqZHJ2LCB1MzIgYmFu aykKK3sKKwlpbnQgZGJfZXJyX2NudCwgZGJfZXJyX3dheXMsIHJldCwgaTsKKwl1MzIgc3luZF9y ZWcsIHN5bmRfdmFsOworCisJZm9yIChpID0gMDsgaSA8IERSUF9TWU5fUkVHX0NOVDsgaSsrKSB7 CisJCXN5bmRfcmVnID0gRFJQX0VDQ19EQl9FUlJfU1lOMCArIChpICogNCk7CisJCXJldCA9IHJl Z21hcF9yZWFkKGRydi0+cmVnbWFwLCBkcnYtPm9mZnNldHNbYmFua10gKyBzeW5kX3JlZywKKwkJ CQkgICZzeW5kX3ZhbCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQllZGFjX3ByaW50 ayhLRVJOX0NSSVQsIEVEQUNfTExDQywgIkRSUF9FQ0NfU1lOJWQ6IDB4JTh4XG4iLCBpLAorCQkJ ICAgIHN5bmRfdmFsKTsKKwl9CisKKwlyZXQgPSByZWdtYXBfcmVhZChkcnYtPnJlZ21hcCwKKwkJ CSAgZHJ2LT5vZmZzZXRzW2JhbmtdICsgRFJQX0VDQ19FUlJPUl9TVEFUVVMxLAorCQkJICAmZGJf ZXJyX2NudCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlkYl9lcnJfY250ID0gKGRiX2Vy cl9jbnQgJiBFQ0NfREJfRVJSX0NPVU5UX01BU0spOworCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwg RURBQ19MTENDLCAiRG91YmxlLUJpdCBlcnJvciBjb3VudDogMHglNHhcbiIsCisJCSAgICBkYl9l cnJfY250KTsKKworCXJldCA9IHJlZ21hcF9yZWFkKGRydi0+cmVnbWFwLAorCQkJICBkcnYtPm9m ZnNldHNbYmFua10gKyBEUlBfRUNDX0VSUk9SX1NUQVRVUzAsCisJCQkgICZkYl9lcnJfd2F5cyk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlkYl9lcnJfd2F5cyAmPSBFQ0NfREJfRVJSX1dB WVNfTUFTSzsKKwlkYl9lcnJfd2F5cyA+Pj0gRUNDX0RCX0VSUl9XQVlTX1NISUZUOworCWVkYWNf cHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19MTENDLCAiRG91YmxlLUJpdCBlcnJvciB3YXlzOiAweCU0 eFxuIiwKKwkJICAgIGRiX2Vycl93YXlzKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIER1bXAg U3luZHJvbWUgcmVnaXN0ZXJzIGZvciBEYXRhIFJhbSBTaW5nbGUgYml0IGVycm9ycyovCitzdGF0 aWMgaW50IGR1bXBfZHJwX3NiX3N5bl9yZWcoc3RydWN0IGxsY2NfZHJ2X2RhdGEgKmRydiwgdTMy IGJhbmspCit7CisJaW50IHNiX2Vycl9jbnQsIHNiX2Vycl93YXlzLCByZXQsIGk7CisJdTMyIHN5 bmRfcmVnLCBzeW5kX3ZhbDsKKworCWZvciAoaSA9IDA7IGkgPCBEUlBfU1lOX1JFR19DTlQ7IGkr KykgeworCQlzeW5kX3JlZyA9IERSUF9FQ0NfU0JfRVJSX1NZTjAgKyAoaSAqIDQpOworCQlyZXQg PSByZWdtYXBfcmVhZChkcnYtPnJlZ21hcCwgZHJ2LT5vZmZzZXRzW2JhbmtdICsgc3luZF9yZWcs CisJCQkJICAmc3luZF92YWwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJZWRhY19w cmludGsoS0VSTl9DUklULCBFREFDX0xMQ0MsICJEUlBfRUNDX1NZTiVkOiAweCU4eFxuIiwgaSwK KwkJCSAgICBzeW5kX3ZhbCk7CisJfQorCisJcmV0ID0gcmVnbWFwX3JlYWQoZHJ2LT5yZWdtYXAs CisJCQkgIGRydi0+b2Zmc2V0c1tiYW5rXSArIERSUF9FQ0NfRVJST1JfU1RBVFVTMSwKKwkJCSAg JnNiX2Vycl9jbnQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJc2JfZXJyX2NudCAmPSBF Q0NfU0JfRVJSX0NPVU5UX01BU0s7CisJc2JfZXJyX2NudCA+Pj0gRUNDX1NCX0VSUl9DT1VOVF9T SElGVDsKKwllZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfTExDQywgIlNpbmdsZS1CaXQgZXJy b3IgY291bnQ6IDB4JTR4XG4iLAorCQkgICAgc2JfZXJyX2NudCk7CisKKwlyZXQgPSByZWdtYXBf cmVhZChkcnYtPnJlZ21hcCwKKwkJCSAgZHJ2LT5vZmZzZXRzW2JhbmtdICsgRFJQX0VDQ19FUlJP Ul9TVEFUVVMwLAorCQkJICAmc2JfZXJyX3dheXMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisJc2JfZXJyX3dheXMgPSBzYl9lcnJfd2F5cyAmIEVDQ19TQl9FUlJfV0FZU19NQVNLOworCisJ ZWRhY19wcmludGsoS0VSTl9DUklULCBFREFDX0xMQ0MsICJTaW5nbGUtQml0IGVycm9yIHdheXM6 IDB4JTR4XG4iLAorCQkgICAgc2JfZXJyX3dheXMpOworCisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCBkdW1wX3N5bl9yZWcoc3RydWN0IGVkYWNfZGV2aWNlX2N0bF9pbmZvICplZGV2X2N0 bCwKKwkJCSBpbnQgZXJyX3R5cGUsIHUzMiBiYW5rKQoreworCXN0cnVjdCBsbGNjX2Rydl9kYXRh ICpkcnYgPSBlZGV2X2N0bC0+cHZ0X2luZm87CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGVy cl90eXBlKSB7CisJY2FzZSBMTENDX0RSQU1fQ0U6CisJCXJldCA9IGR1bXBfZHJwX3NiX3N5bl9y ZWcoZHJ2LCBiYW5rKTsKKwkJYnJlYWs7CisJY2FzZSBMTENDX0RSQU1fVUU6CisJCXJldCA9IGR1 bXBfZHJwX2RiX3N5bl9yZWcoZHJ2LCBiYW5rKTsKKwkJYnJlYWs7CisJY2FzZSBMTENDX1RSQU1f Q0U6CisJCXJldCA9IGR1bXBfdHJwX3NiX3N5bl9yZWcoZHJ2LCBiYW5rKTsKKwkJYnJlYWs7CisJ Y2FzZSBMTENDX1RSQU1fVUU6CisJCXJldCA9IGR1bXBfdHJwX2RiX3N5bl9yZWcoZHJ2LCBiYW5r KTsKKwkJYnJlYWs7CisJfQorCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBxY29t X2xsY2NfY2xlYXJfZXJyb3JzKGVycl90eXBlLCBkcnYpOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwllcnJvcnNbZXJyX3R5cGVdLmZ1bmMoZWRldl9jdGwsIDAsIGJhbmssIGVycm9yc1tl cnJfdHlwZV0ubXNnKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAor bGxjY19lY2NfaXJxX2hhbmRsZXIgKGludCBpcnEsIHZvaWQgKmVkZXZfY3RsKQoreworCXN0cnVj dCBlZGFjX2RldmljZV9jdGxfaW5mbyAqZWRhY19kZXZfY3RsOworCWlycXJldHVybl90IGlycV9y YyA9IElSUV9OT05FOworCXUzMiBkcnBfZXJyb3IsIHRycF9lcnJvciwgaTsKKwlzdHJ1Y3QgbGxj Y19kcnZfZGF0YSAqZHJ2OworCWludCByZXQ7CisKKwllZGFjX2Rldl9jdGwgPSAoc3RydWN0IGVk YWNfZGV2aWNlX2N0bF9pbmZvICopZWRldl9jdGw7CisJZHJ2ID0gZWRhY19kZXZfY3RsLT5wdnRf aW5mbzsKKworCWZvciAoaSA9IDA7IGkgPCBkcnYtPm51bV9iYW5rczsgaSsrKSB7CisJCS8qIExv b2sgZm9yIERhdGEgUkFNIGVycm9ycyAqLworCQlyZXQgPSByZWdtYXBfcmVhZChkcnYtPnJlZ21h cCwKKwkJCQkgIGRydi0+b2Zmc2V0c1tpXSArIERSUF9JTlRFUlJVUFRfU1RBVFVTLAorCQkJCSAg JmRycF9lcnJvcik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gaXJxX3JjOworCisJCWlmIChkcnBf ZXJyb3IgJiBTQl9FQ0NfRVJST1IpIHsKKwkJCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19M TENDLAorCQkJCSAgICAiU2luZ2xlIEJpdCBFcnJvciBkZXRlY3RlZCBpbiBEYXRhIFJhbVxuIik7 CisJCQlkdW1wX3N5bl9yZWcoZWRldl9jdGwsIExMQ0NfRFJBTV9DRSwgaSk7CisJCQlpcnFfcmMg PSBJUlFfSEFORExFRDsKKwkJfSBlbHNlIGlmIChkcnBfZXJyb3IgJiBEQl9FQ0NfRVJST1IpIHsK KwkJCWVkYWNfcHJpbnRrKEtFUk5fQ1JJVCwgRURBQ19MTENDLAorCQkJCSAgICAiRG91YmxlIEJp dCBFcnJvciBkZXRlY3RlZCBpbiBEYXRhIFJhbVxuIik7CisJCQlkdW1wX3N5bl9yZWcoZWRldl9j dGwsIExMQ0NfRFJBTV9VRSwgaSk7CisJCQlpcnFfcmMgPSBJUlFfSEFORExFRDsKKwkJfQorCisJ CS8qIExvb2sgZm9yIFRhZyBSQU0gZXJyb3JzICovCisJCXJldCA9IHJlZ21hcF9yZWFkKGRydi0+ cmVnbWFwLAorCQkJCSAgZHJ2LT5vZmZzZXRzW2ldICsgVFJQX0lOVEVSUlVQVF8wX1NUQVRVUywK KwkJCQkgICZ0cnBfZXJyb3IpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIGlycV9yYzsKKwkJaWYg KHRycF9lcnJvciAmIFNCX0VDQ19FUlJPUikgeworCQkJZWRhY19wcmludGsoS0VSTl9DUklULCBF REFDX0xMQ0MsCisJCQkJICAgICJTaW5nbGUgQml0IEVycm9yIGRldGVjdGVkIGluIFRhZyBSYW1c biIpOworCQkJZHVtcF9zeW5fcmVnKGVkZXZfY3RsLCBMTENDX1RSQU1fQ0UsIGkpOworCQkJaXJx X3JjID0gSVJRX0hBTkRMRUQ7CisJCX0gZWxzZSBpZiAodHJwX2Vycm9yICYgREJfRUNDX0VSUk9S KSB7CisJCQllZGFjX3ByaW50ayhLRVJOX0NSSVQsIEVEQUNfTExDQywKKwkJCQkgICAgIkRvdWJs ZSBCaXQgRXJyb3IgZGV0ZWN0ZWQgaW4gVGFnIFJhbVxuIik7CisJCQlkdW1wX3N5bl9yZWcoZWRl dl9jdGwsIExMQ0NfVFJBTV9VRSwgaSk7CisJCQlpcnFfcmMgPSBJUlFfSEFORExFRDsKKwkJfQor CX0KKworCXJldHVybiBpcnFfcmM7Cit9CisKK3N0YXRpYyBpbnQgcWNvbV9sbGNjX2VkYWNfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbGxjY19kcnZfZGF0 YSAqbGxjY19kcml2X2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZWRh Y19kZXZpY2VfY3RsX2luZm8gKmVkZXZfY3RsOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2 LT5kZXY7CisJdTMyIGVjY19pcnE7CisJaW50IHJjOworCisJcmMgPSBxY29tX2xsY2NfY29yZV9z ZXR1cChsbGNjX2RyaXZfZGF0YS0+YmNhc3RfcmVnbWFwKTsKKwlpZiAocmMpCisJCXJldHVybiBy YzsKKworCS8qIEFsbG9jYXRlIGVkYWMgY29udHJvbCBpbmZvICovCisJZWRldl9jdGwgPSBlZGFj X2RldmljZV9hbGxvY19jdGxfaW5mbygwLCAicWNvbS1sbGNjIiwgMSwgImJhbmsiLAorCQkJCQkg ICAgICBsbGNjX2RyaXZfZGF0YS0+bnVtX2JhbmtzLCAxLAorCQkJCQkgICAgICBOVUxMLCAwLAor CQkJCQkgICAgICBlZGFjX2RldmljZV9hbGxvY19pbmRleCgpKTsKKworCWlmICghZWRldl9jdGwp CisJCXJldHVybiAtRU5PTUVNOworCisJZWRldl9jdGwtPmRldiA9IGRldjsKKwllZGV2X2N0bC0+ bW9kX25hbWUgPSBkZXZfbmFtZShkZXYpOworCWVkZXZfY3RsLT5kZXZfbmFtZSA9IGRldl9uYW1l KGRldik7CisJZWRldl9jdGwtPmN0bF9uYW1lID0gImxsY2MiOworCWVkZXZfY3RsLT5wYW5pY19v bl91ZSA9IExMQ0NfRVJQX1BBTklDX09OX1VFOworCisJZWRldl9jdGwtPnB2dF9pbmZvID0gKHN0 cnVjdCBsbGNjX2Rydl9kYXRhICopIGxsY2NfZHJpdl9kYXRhOworCisJcmMgPSBlZGFjX2Rldmlj ZV9hZGRfZGV2aWNlKGVkZXZfY3RsKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X21lbTsKKworCXBs YXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGVkZXZfY3RsKTsKKworCS8qIFJlcXVlc3QgZm9yIGVj YyBpcnEgKi8KKwllY2NfaXJxID0gbGxjY19kcml2X2RhdGEtPmVjY19pcnE7CisJaWYgKCFlY2Nf aXJxKSB7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZGV2OworCX0KKwlyYyA9IGRldm1f cmVxdWVzdF9pcnEoZGV2LCBlY2NfaXJxLCBsbGNjX2VjY19pcnFfaGFuZGxlciwKKwkJCSAgICAg IElSUUZfVFJJR0dFUl9ISUdILCAibGxjY19lY2MiLCBlZGV2X2N0bCk7CisJaWYgKHJjKQorCQln b3RvIG91dF9kZXY7CisKKwlyZXR1cm4gcmM7CisKK291dF9kZXY6CisJZWRhY19kZXZpY2VfZGVs X2RldmljZShlZGV2X2N0bC0+ZGV2KTsKK291dF9tZW06CisJZWRhY19kZXZpY2VfZnJlZV9jdGxf aW5mbyhlZGV2X2N0bCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgcWNvbV9sbGNj X2VkYWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGVk YWNfZGV2aWNlX2N0bF9pbmZvICplZGV2X2N0bCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2 KTsKKworCWVkYWNfZGV2aWNlX2RlbF9kZXZpY2UoZWRldl9jdGwtPmRldik7CisJZWRhY19kZXZp Y2VfZnJlZV9jdGxfaW5mbyhlZGV2X2N0bCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwg TlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgcWNvbV9sbGNjX2VkYWNfbWF0Y2hfdGFibGVbXSA9IHsKKyNpZmRlZiBFREFDX1FDT01fTExD QworCXsgLmNvbXBhdGlibGUgPSAicWNvbSxsbGNjLWVkYWMiIH0sCisjZW5kaWYKKwl7IH0sCit9 OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBxY29tX2xsY2NfZWRhY19kcml2ZXIg PSB7CisJLnByb2JlID0gcWNvbV9sbGNjX2VkYWNfcHJvYmUsCisJLnJlbW92ZSA9IHFjb21fbGxj Y19lZGFjX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJxY29tX2xsY2NfZWRhYyIs CisJCS5vZl9tYXRjaF90YWJsZSA9IHFjb21fbGxjY19lZGFjX21hdGNoX3RhYmxlLAorCX0sCit9 OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihxY29tX2xsY2NfZWRhY19kcml2ZXIpOworCitNT0RV TEVfREVTQ1JJUFRJT04oIlFDT00gRURBQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwg djIiKTsK