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: EDAC, dmc520:: add DMC520 EDAC driver From: Sasha Levin Message-Id: <20190118162324.17123-1-sashal@kernel.org> Date: Fri, 18 Jan 2019 11:23:24 -0500 To: bp@alien8.de, mchehab@kernel.org Cc: ruizhao@microsoft.com, linux-edac@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel@microsoft.com, will.deacon@arm.com, okaya@kernel.org, Sasha Levin List-ID: RnJvbTogUnVpIFpoYW8gPHJ1aXpoYW9AbWljcm9zb2Z0LmNvbT4KCk5ldyBkcml2ZXIgc3VwcG9y dHMgRFJBTSBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gRE1DNTIwCmNvbnRyb2xs ZXIuCgpWYWxpZGF0ZWQgb24gYWN0dWFsIGhhcmR3YXJlOiBEUkFNIGVycm9ycyBzaG93ZWQgdXAg b25jZSB0aGUgRERSIGNvcmUKdm9sdGFnZSB3YXMgbG93ZXJlZCBkb3duIGJ5IDIwMCttViB1c2lu ZyB0ZXN0IHRvb2wuCgpTaWduZWQtb2ZmLWJ5OiBSdWkgWmhhbyA8cnVpemhhb0BtaWNyb3NvZnQu Y29tPgpbc2w6IG1pbm9yIG5pdHMgaW4gY29tbWl0IG1lc3NhZ2UgYW5kIGNvZGUsIGFkZGVkIG1h aW50YWluZXJzIGVudHJ5XQpTaWduZWQtb2ZmLWJ5OiBTYXNoYSBMZXZpbiA8c2FzaGFsQGtlcm5l bC5vcmc+Ci0tLQogTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgfCAgIDYgKwogZHJpdmVycy9l ZGFjL0tjb25maWcgICAgICAgfCAgIDcgKwogZHJpdmVycy9lZGFjL01ha2VmaWxlICAgICAgfCAg IDEgKwogZHJpdmVycy9lZGFjL2RtYzUyMF9lZGFjLmMgfCA0OTUgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA1MDkgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZWRhYy9kbWM1MjBfZWRhYy5jCgpkaWZmIC0tZ2l0 IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAzMmQ0NDQ0NzZhOTAuLmU4ZWMzOTZh MTQ3NSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTU0Mjks NiArNTQyOSwxMiBAQCBGOglEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZWRhYy5yc3QKIEY6CWRy aXZlcnMvZWRhYy8KIEY6CWluY2x1ZGUvbGludXgvZWRhYy5oCiAKK0VEQUMtRE1DNTIwCitNOglS dWkgWmhhbyA8cnVpemhhb0BtaWNyb3NvZnQuY29tPgorTDoJbGludXgtZWRhY0B2Z2VyLmtlcm5l bC5vcmcKK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9lZGFjL2RtYzUyMF9lZGFjLmMKKwogRURB Qy1FNzUyWAogTToJTWFyayBHcm9zcyA8bWFyay5ncm9zc0BpbnRlbC5jb20+CiBMOglsaW51eC1l ZGFjQHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9k cml2ZXJzL2VkYWMvS2NvbmZpZwppbmRleCBlMjg2YjViOTkwMDMuLjc4ZmZkYjljZmE2YiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9lZGFjL0tjb25maWcKKysrIGIvZHJpdmVycy9lZGFjL0tjb25maWcK QEAgLTQ3NSw0ICs0NzUsMTEgQEAgY29uZmlnIEVEQUNfUUNPTQogCSAgRm9yIGRlYnVnZ2luZyBp c3N1ZXMgaGF2aW5nIHRvIGRvIHdpdGggc3RhYmlsaXR5IGFuZCBvdmVyYWxsIHN5c3RlbQogCSAg aGVhbHRoLCB5b3Ugc2hvdWxkIHByb2JhYmx5IHNheSAnWScgaGVyZS4KIAorY29uZmlnIEVEQUNf RE1DNTIwCisJdHJpc3RhdGUgIkFSTSBETUMtNTIwIEVDQyIKKwlkZXBlbmRzIG9uIEFSTTY0CisJ aGVscAorCSAgU3VwcG9ydCBmb3IgZXJyb3IgZGV0ZWN0aW9uIGFuZCBjb3JyZWN0aW9uIG9uCisJ ICBTb0NzIHdpdGggdGhlIEFSTSBETUMtNTIwIERSQU0gY29udHJvbGxlci4KKwogZW5kaWYgIyBF REFDCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvTWFrZWZpbGUgYi9kcml2ZXJzL2VkYWMvTWFr ZWZpbGUKaW5kZXggNzE2MDk2ZDA4ZWEwLi43OTNkNjRmNTI1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZWRhYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKQEAgLTc4LDMgKzc4 LDQgQEAgb2JqLSQoQ09ORklHX0VEQUNfU1lOT1BTWVMpCQkrPSBzeW5vcHN5c19lZGFjLm8KIG9i ai0kKENPTkZJR19FREFDX1hHRU5FKQkJKz0geGdlbmVfZWRhYy5vCiBvYmotJChDT05GSUdfRURB Q19USSkJCQkrPSB0aV9lZGFjLm8KIG9iai0kKENPTkZJR19FREFDX1FDT00pCQkJKz0gcWNvbV9l ZGFjLm8KK29iai0kKENPTkZJR19FREFDX0RNQzUyMCkJCSs9IGRtYzUyMF9lZGFjLm8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZWRhYy9kbWM1MjBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2RtYzUyMF9l ZGFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41ZjE0ODg5MDc0 YWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2VkYWMvZG1jNTIwX2VkYWMuYwpAQCAtMCww ICsxLDQ5NSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisKKyNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4K KyNpbmNsdWRlIDxsaW51eC9lZGFjLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRl IDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxp bnV4L2JpdGZpZWxkLmg+CisjaW5jbHVkZSA8ZWRhY19tYy5oPgorCisvKiBETUMtNTIwIHJlZ2lz dGVycyAqLworI2RlZmluZSBSRUdfT0ZGU0VUX0ZFQVRVUkVfQ09ORklHCQkweDEzMAorI2RlZmlu ZSBSRUdfT0ZGU0VUX0VDQ19FUlJDX0NPVU5UXzMxXzAwCQkweDE1OAorI2RlZmluZSBSRUdfT0ZG U0VUX0VDQ19FUlJDX0NPVU5UXzYzXzMyCQkweDE1QworI2RlZmluZSBSRUdfT0ZGU0VUX0VDQ19F UlJEX0NPVU5UXzMxXzAwCQkweDE2MAorI2RlZmluZSBSRUdfT0ZGU0VUX0VDQ19FUlJEX0NPVU5U XzYzXzMyCQkweDE2NAorI2RlZmluZSBSRUdfT0ZGU0VUX0ZFQVRVUkVfQ09OVFJPTF9ORVhUCQkw eDFGMAorI2RlZmluZSBSRUdfT0ZGU0VUX0lOVEVSUlVQVF9DT05UUk9MCQkweDUwMAorI2RlZmlu ZSBSRUdfT0ZGU0VUX0lOVEVSUlVQVF9DTFIJCTB4NTA4CisjZGVmaW5lIFJFR19PRkZTRVRfSU5U RVJSVVBUX1NUQVRVUwkJMHg1MTAKKyNkZWZpbmUgUkVHX09GRlNFVF9EUkFNX0VDQ19FUlJDX0lO VF9JTkZPXzMxXzAwCTB4NTI4CisjZGVmaW5lIFJFR19PRkZTRVRfRFJBTV9FQ0NfRVJSQ19JTlRf SU5GT182M18zMgkweDUyQworI2RlZmluZSBSRUdfT0ZGU0VUX0RSQU1fRUNDX0VSUkRfSU5UX0lO Rk9fMzFfMDAJMHg1MzAKKyNkZWZpbmUgUkVHX09GRlNFVF9EUkFNX0VDQ19FUlJEX0lOVF9JTkZP XzYzXzMyCTB4NTM0CisjZGVmaW5lIFJFR19PRkZTRVRfQUREUkVTU19DT05UUk9MX05PVwkJMHgx MDEwCisjZGVmaW5lIFJFR19PRkZTRVRfREVDT0RFX0NPTlRST0xfTk9XCQkweDEwMTQKKyNkZWZp bmUgUkVHX09GRlNFVF9NRU1PUllfVFlQRV9OT1cJCTB4MTEyOAorCisvKiBETUMtNTIwIHR5cGVz LCBtYXNrcyBhbmQgYml0ZmllbGRzICovCisjZGVmaW5lIE1FTU9SWV9UWVBFX0xQRERSMwkJCTAK KyNkZWZpbmUgTUVNT1JZX1RZUEVfRERSMwkJCTEKKyNkZWZpbmUgTUVNT1JZX1RZUEVfRERSNAkJ CTIKKyNkZWZpbmUgTUVNT1JZX1RZUEVfTFBERFI0CQkJMworCisjZGVmaW5lIE1FTU9SWV9ERVZf V0lEVEhfWDQJCQkwCisjZGVmaW5lIE1FTU9SWV9ERVZfV0lEVEhfWDgJCQkxCisjZGVmaW5lIE1F TU9SWV9ERVZfV0lEVEhfWDE2CQkJMgorI2RlZmluZSBNRU1PUllfREVWX1dJRFRIX1gzMgkJCTMK KworI2RlZmluZSBEUkFNX0VDQ19JTlRfQ0VfTUFTSwkJCUJJVCgyKQorI2RlZmluZSBEUkFNX0VD Q19JTlRfVUVfTUFTSwkJCUJJVCgzKQorI2RlZmluZSBEUkFNX0VDQ19JTlRfQ0VfT1ZFUkZMT1df TUFTSwkJQklUKDE4KQorI2RlZmluZSBEUkFNX0VDQ19JTlRfVUVfT1ZFUkZMT1dfTUFTSwkJQklU KDE5KQorCisjZGVmaW5lIFJFR19GSUVMRF9EUkFNX0VDQ19FTkFCTEVECQlHRU5NQVNLKDEsIDAp CisjZGVmaW5lIFJFR19GSUVMRF9NRU1PUllfVFlQRQkJCUdFTk1BU0soMiwgMCkKKyNkZWZpbmUg UkVHX0ZJRUxEX0RFVklDRV9XSURUSAkJCUdFTk1BU0soOSwgOCkKKyNkZWZpbmUgUkVHX0ZJRUxE X0FERFJFU1NfQ09OVFJPTF9DT0wJCUdFTk1BU0soMiwgMCkKKyNkZWZpbmUgUkVHX0ZJRUxEX0FE RFJFU1NfQ09OVFJPTF9ST1cJCUdFTk1BU0soMTAsIDgpCisjZGVmaW5lIFJFR19GSUVMRF9BRERS RVNTX0NPTlRST0xfQkFOSwkJR0VOTUFTSygxOCwgMTYpCisjZGVmaW5lIFJFR19GSUVMRF9BRERS RVNTX0NPTlRST0xfUkFOSwkJR0VOTUFTSygyNSwgMjQpCisjZGVmaW5lIFJFR19GSUVMRF9FUlJf SU5GT19MT1dfVkFMSUQJCUJJVCgwKQorI2RlZmluZSBSRUdfRklFTERfRVJSX0lORk9fTE9XX0NP TAkJR0VOTUFTSygxMCwgMSkKKyNkZWZpbmUgUkVHX0ZJRUxEX0VSUl9JTkZPX0xPV19ST1cJCUdF Tk1BU0soMjgsIDExKQorI2RlZmluZSBSRUdfRklFTERfRVJSX0lORk9fTE9XX1JBTksJCUdFTk1B U0soMzEsIDI5KQorI2RlZmluZSBSRUdfRklFTERfRVJSX0lORk9fSElHSF9CQU5LCQlHRU5NQVNL KDMsIDApCisjZGVmaW5lIFJFR19GSUVMRF9FUlJfSU5GT19ISUdIX1ZBTElECQlCSVQoMzEpCisK KyNkZWZpbmUgRFJBTV9FQ0NfTUlOX0lOVF9PVkVSRkxPV19FUlJPUl9DT1VOVAkyNTYKKyNkZWZp bmUgRFJBTV9BRERSRVNTX0NPTlRST0xfTUlOX0NPTF9CSVRTCTgKKyNkZWZpbmUgRFJBTV9BRERS RVNTX0NPTlRST0xfTUlOX1JPV19CSVRTCTExCisKKy8qIERyaXZlciBzZXR0aW5ncyAqLworI2Rl ZmluZSBETUM1MjBfRURBQ19DSEFOUwkJCTEKKyNkZWZpbmUgRE1DNTIwX0VEQUNfRVJSX0dSQUlO CQkJMQorI2RlZmluZSBETUM1MjBfRURBQ19JTlRfQ09VTlQJCQkyCisjZGVmaW5lIERNQzUyMF9F REFDX0JVU19XSURUSAkJCTgKKworI2RlZmluZSBFREFDX01TR19CVUZfU0laRQkJCTEyOAorI2Rl ZmluZSBFREFDX01PRF9OQU1FCQkJCSJkbWM1MjAtZWRhYyIKKyNkZWZpbmUgRURBQ19DVExfTkFN RQkJCQkiZG1jNTIwIgorCitzdHJ1Y3QgZWNjX2Vycm9yX2luZm8geworCXUzMiBjb2w7CisJdTMy IHJvdzsKKwl1MzIgYmFuazsKKwl1MzIgcmFuazsKK307CisKK3N0cnVjdCBkbWM1MjBfZWRhYyB7 CisJdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsKKwljaGFyIG1lc3NhZ2VbRURBQ19NU0dfQlVGX1NJ WkVdOworfTsKKworc3RhdGljIGludCBkbWM1MjBfbWNfaWR4OworCitzdGF0aWMgdTMyIGRtYzUy MF9yZWFkX3JlZyhzdHJ1Y3QgZG1jNTIwX2VkYWMgKmVkYWMsIHUzMiBvZmZzZXQpCit7CisJcmV0 dXJuIHJlYWRsKGVkYWMtPnJlZ19iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZG1j NTIwX3dyaXRlX3JlZyhzdHJ1Y3QgZG1jNTIwX2VkYWMgKmVkYWMsIHUzMiB2YWwsIHUzMiBvZmZz ZXQpCit7CisJd3JpdGVsKHZhbCwgZWRhYy0+cmVnX2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0 aWMgdTMyIGRtYzUyMF9jYWxjX2VjY19lcnJvcih1MzIgdmFsdWUpCit7CisJdTMyIHRvdGFsID0g MDsKKworCS8qIEVhY2ggcmFuaydzIGVycm9yIGNvdW50ZXIgdGFrZXMgb25lIGJ5dGUgKi8KKwl3 aGlsZSAodmFsdWUgPiAwKSB7CisJCXRvdGFsICs9ICh2YWx1ZSAmIDB4RkYpOworCQl2YWx1ZSA+ Pj0gODsKKwl9CisJcmV0dXJuIHRvdGFsOworfQorCitzdGF0aWMgdTMyIGRtYzUyMF9nZXRfZWNj X2Vycm9yX2NvdW50KHN0cnVjdCBkbWM1MjBfZWRhYyAqZWRhYywgYm9vbCBpc19jZSkKK3sKKwl1 MzIgcmVnX29mZnNldF9sb3csIHJlZ19vZmZzZXRfaGlnaDsKKwl1MzIgZXJyX2xvdywgZXJyX2hp Z2g7CisJdTMyIGNlX2NvdW50OworCisJcmVnX29mZnNldF9sb3cgPSBpc19jZSA/IFJFR19PRkZT RVRfRUNDX0VSUkNfQ09VTlRfMzFfMDAgOgorCQkJCSBSRUdfT0ZGU0VUX0VDQ19FUlJEX0NPVU5U XzMxXzAwOworCXJlZ19vZmZzZXRfaGlnaCA9IGlzX2NlID8gUkVHX09GRlNFVF9FQ0NfRVJSQ19D T1VOVF82M18zMiA6CisJCQkJICBSRUdfT0ZGU0VUX0VDQ19FUlJEX0NPVU5UXzYzXzMyOworCisJ ZXJyX2xvdyA9IGRtYzUyMF9yZWFkX3JlZyhlZGFjLCByZWdfb2Zmc2V0X2xvdyk7CisJZXJyX2hp Z2ggPSBkbWM1MjBfcmVhZF9yZWcoZWRhYywgcmVnX29mZnNldF9oaWdoKTsKKworCWNlX2NvdW50 ID0gZG1jNTIwX2NhbGNfZWNjX2Vycm9yKGVycl9sb3cpICsKKwkJICAgZG1jNTIwX2NhbGNfZWNj X2Vycm9yKGVycl9oaWdoKTsKKworCS8qIFJlc2V0IGVycm9yIGNvdW50ZXJzICovCisJZG1jNTIw X3dyaXRlX3JlZyhlZGFjLCAwLCByZWdfb2Zmc2V0X2xvdyk7CisJZG1jNTIwX3dyaXRlX3JlZyhl ZGFjLCAwLCByZWdfb2Zmc2V0X2hpZ2gpOworCisJcmV0dXJuIGNlX2NvdW50OworfQorCitzdGF0 aWMgYm9vbCBkbWM1MjBfZ2V0X2VjY19lcnJvcl9pbmZvKHN0cnVjdCBkbWM1MjBfZWRhYyAqZWRh YywKKwkJCQkgICAgICBib29sIGlzX2NlLAorCQkJCSAgICAgIHN0cnVjdCBlY2NfZXJyb3JfaW5m byAqaW5mbykKK3sKKwl1MzIgcmVnX29mZnNldF9sb3csIHJlZ19vZmZzZXRfaGlnaDsKKwl1MzIg cmVnX3ZhbF9sb3csIHJlZ192YWxfaGlnaDsKKwlib29sIHZhbGlkOworCisJcmVnX29mZnNldF9s b3cgPSBpc19jZSA/IFJFR19PRkZTRVRfRFJBTV9FQ0NfRVJSQ19JTlRfSU5GT18zMV8wMCA6CisJ CQkJIFJFR19PRkZTRVRfRFJBTV9FQ0NfRVJSRF9JTlRfSU5GT18zMV8wMDsKKwlyZWdfb2Zmc2V0 X2hpZ2ggPSBpc19jZSA/IFJFR19PRkZTRVRfRFJBTV9FQ0NfRVJSQ19JTlRfSU5GT182M18zMiA6 CisJCQkJICBSRUdfT0ZGU0VUX0RSQU1fRUNDX0VSUkRfSU5UX0lORk9fNjNfMzI7CisKKwlyZWdf dmFsX2xvdyA9IGRtYzUyMF9yZWFkX3JlZyhlZGFjLCByZWdfb2Zmc2V0X2xvdyk7CisJcmVnX3Zh bF9oaWdoID0gZG1jNTIwX3JlYWRfcmVnKGVkYWMsIHJlZ19vZmZzZXRfaGlnaCk7CisKKwl2YWxp ZCA9IChGSUVMRF9HRVQoUkVHX0ZJRUxEX0VSUl9JTkZPX0xPV19WQUxJRCwgcmVnX3ZhbF9sb3cp ICE9IDApICYmCisJCShGSUVMRF9HRVQoUkVHX0ZJRUxEX0VSUl9JTkZPX0hJR0hfVkFMSUQsIHJl Z192YWxfaGlnaCkgIT0gMCk7CisKKwlpZiAoaW5mbykgeworCQlpZiAodmFsaWQpIHsKKwkJCWlu Zm8tPmNvbCA9IEZJRUxEX0dFVChSRUdfRklFTERfRVJSX0lORk9fTE9XX0NPTCwKKwkJCQkJICAg ICAgcmVnX3ZhbF9sb3cpOworCQkJaW5mby0+cm93ID0gRklFTERfR0VUKFJFR19GSUVMRF9FUlJf SU5GT19MT1dfUk9XLAorCQkJCQkgICAgICByZWdfdmFsX2xvdyk7CisJCQlpbmZvLT5yYW5rID0g RklFTERfR0VUKFJFR19GSUVMRF9FUlJfSU5GT19MT1dfUkFOSywKKwkJCQkJICAgICAgIHJlZ192 YWxfbG93KTsKKwkJCWluZm8tPmJhbmsgPSBGSUVMRF9HRVQoUkVHX0ZJRUxEX0VSUl9JTkZPX0hJ R0hfQkFOSywKKwkJCQkJICAgICAgIHJlZ192YWxfaGlnaCk7CisJCX0gZWxzZSB7CisJCQltZW1z ZXQoaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBlY2NfZXJyb3JfaW5mbykpOworCQl9CisJfQorCisJ cmV0dXJuIHZhbGlkOworfQorCitzdGF0aWMgYm9vbCBkbWM1MjBfaXNfZWNjX2VuYWJsZWQoc3Ry dWN0IGRtYzUyMF9lZGFjICplZGFjKQoreworCXUzMiByZWdfdmFsID0gZG1jNTIwX3JlYWRfcmVn KGVkYWMsIFJFR19PRkZTRVRfRkVBVFVSRV9DT05GSUcpOworCisJcmV0dXJuIChGSUVMRF9HRVQo UkVHX0ZJRUxEX0RSQU1fRUNDX0VOQUJMRUQsIHJlZ192YWwpICE9IDApOworfQorCitzdGF0aWMg ZW51bSBtZW1fdHlwZSBkbWM1MjBfZ2V0X210eXBlKHN0cnVjdCBkbWM1MjBfZWRhYyAqZWRhYykK K3sKKwllbnVtIG1lbV90eXBlIG10OworCXUzMiByZWdfdmFsLCB0eXBlOworCisJcmVnX3ZhbCA9 IGRtYzUyMF9yZWFkX3JlZyhlZGFjLCBSRUdfT0ZGU0VUX01FTU9SWV9UWVBFX05PVyk7CisJdHlw ZSA9IEZJRUxEX0dFVChSRUdfRklFTERfTUVNT1JZX1RZUEUsIHJlZ192YWwpOworCisJc3dpdGNo ICh0eXBlKSB7CisJY2FzZSBNRU1PUllfVFlQRV9MUEREUjM6CisJY2FzZSBNRU1PUllfVFlQRV9E RFIzOgorCQltdCA9IE1FTV9ERFIzOworCQlicmVhazsKKworCWNhc2UgTUVNT1JZX1RZUEVfRERS NDoKKwljYXNlIE1FTU9SWV9UWVBFX0xQRERSNDoKKwlkZWZhdWx0OgorCQltdCA9IE1FTV9ERFI0 OworCQlicmVhazsKKwl9CisJcmV0dXJuIG10OworfQorCitzdGF0aWMgZW51bSBkZXZfdHlwZSBk bWM1MjBfZ2V0X2R0eXBlKHN0cnVjdCBkbWM1MjBfZWRhYyAqZWRhYykKK3sKKwllbnVtIGRldl90 eXBlIGR0OworCXUzMiByZWdfdmFsLCBkZXZpY2Vfd2lkdGg7CisKKwlyZWdfdmFsID0gZG1jNTIw X3JlYWRfcmVnKGVkYWMsIFJFR19PRkZTRVRfTUVNT1JZX1RZUEVfTk9XKTsKKwlkZXZpY2Vfd2lk dGggPSBGSUVMRF9HRVQoUkVHX0ZJRUxEX0RFVklDRV9XSURUSCwgcmVnX3ZhbCk7CisKKwlzd2l0 Y2ggKGRldmljZV93aWR0aCkgeworCWNhc2UgTUVNT1JZX0RFVl9XSURUSF9YNDoKKwkJZHQgPSBE RVZfWDQ7CisJCWJyZWFrOworCisJY2FzZSBNRU1PUllfREVWX1dJRFRIX1g4OgorCQlkdCA9IERF Vl9YODsKKwkJYnJlYWs7CisKKwljYXNlIE1FTU9SWV9ERVZfV0lEVEhfWDE2OgorCQlkdCA9IERF Vl9YMTY7CisJCWJyZWFrOworCisJY2FzZSBNRU1PUllfREVWX1dJRFRIX1gzMjoKKwkJZHQgPSBE RVZfWDMyOworCQlicmVhazsKKwl9CisJcmV0dXJuIGR0OworfQorCitzdGF0aWMgdTMyIGRtYzUy MF9nZXRfcmFua19jb3VudCh2b2lkIF9faW9tZW0gKnJlZ19iYXNlKQoreworCXUzMiByZWdfdmFs LCByYW5rX2JpdHM7CisKKwlyZWdfdmFsID0gcmVhZGwocmVnX2Jhc2UgKyBSRUdfT0ZGU0VUX0FE RFJFU1NfQ09OVFJPTF9OT1cpOworCXJhbmtfYml0cyA9IEZJRUxEX0dFVChSRUdfRklFTERfQURE UkVTU19DT05UUk9MX1JBTkssIHJlZ192YWwpOworCisJcmV0dXJuICgxIDw8IHJhbmtfYml0cyk7 Cit9CisKK3N0YXRpYyB1NjQgZG1jNTIwX2dldF9yYW5rX3NpemUoc3RydWN0IGRtYzUyMF9lZGFj ICplZGFjKQoreworCXUzMiByZWdfdmFsLCBjb2xfYml0cywgcm93X2JpdHMsIGJhbmtfYml0czsK KworCXJlZ192YWwgPSBkbWM1MjBfcmVhZF9yZWcoZWRhYywgUkVHX09GRlNFVF9BRERSRVNTX0NP TlRST0xfTk9XKTsKKworCWNvbF9iaXRzID0gRklFTERfR0VUKFJFR19GSUVMRF9BRERSRVNTX0NP TlRST0xfQ09MLCByZWdfdmFsKSArCisJCSAgIERSQU1fQUREUkVTU19DT05UUk9MX01JTl9DT0xf QklUUzsKKwlyb3dfYml0cyA9IEZJRUxEX0dFVChSRUdfRklFTERfQUREUkVTU19DT05UUk9MX1JP VywgcmVnX3ZhbCkgKworCQkgICBEUkFNX0FERFJFU1NfQ09OVFJPTF9NSU5fUk9XX0JJVFM7CisJ YmFua19iaXRzID0gRklFTERfR0VUKFJFR19GSUVMRF9BRERSRVNTX0NPTlRST0xfQkFOSywgcmVn X3ZhbCk7CisKKwlyZXR1cm4gKHU2NClETUM1MjBfRURBQ19CVVNfV0lEVEggPDwgKGNvbF9iaXRz ICsgcm93X2JpdHMgKyBiYW5rX2JpdHMpOworfQorCitzdGF0aWMgdm9pZCBkbWM1MjBfaGFuZGxl X2VjY19lcnJvcnMoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkJCSAgICAgYm9vbCBpc19j ZSwKKwkJCQkgICAgIGJvb2wgb3ZlcmZsb3cpCit7CisJc3RydWN0IGVjY19lcnJvcl9pbmZvIGlu Zm87CisJc3RydWN0IGRtYzUyMF9lZGFjICplZGFjOworCXUzMiBjbnQ7CisKKwllZGFjID0gbWNp LT5wdnRfaW5mbzsKKwlkbWM1MjBfZ2V0X2VjY19lcnJvcl9pbmZvKGVkYWMsIGlzX2NlLCAmaW5m byk7CisKKwljbnQgPSBkbWM1MjBfZ2V0X2VjY19lcnJvcl9jb3VudChlZGFjLCBpc19jZSk7CisK KwlpZiAob3ZlcmZsb3cpCisJCWNudCArPSBEUkFNX0VDQ19NSU5fSU5UX09WRVJGTE9XX0VSUk9S X0NPVU5UOworCisJaWYgKGNudCA+IDApIHsKKwkJc25wcmludGYoZWRhYy0+bWVzc2FnZSwgQVJS QVlfU0laRShlZGFjLT5tZXNzYWdlKSwKKwkJCSAicmFuazolZCBiYW5rOiVkIHJvdzolZCBjb2w6 JWQiLAorCQkJIGluZm8ucmFuaywgaW5mby5iYW5rLAorCQkJIGluZm8ucm93LCBpbmZvLmNvbCk7 CisKKwkJZWRhY19tY19oYW5kbGVfZXJyb3IoKGlzX2NlID8gSFdfRVZFTlRfRVJSX0NPUlJFQ1RF RCA6CisJCQkJICAgICBIV19FVkVOVF9FUlJfVU5DT1JSRUNURUQpLAorCQkJCSAgICAgbWNpLCBj bnQsIDAsIDAsIDAsIGluZm8ucmFuaywgMCwgLTEsCisJCQkJICAgICBlZGFjLT5tZXNzYWdlLCAi Iik7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZG1jNTIwX2VkYWNfaXNyKGludCBpcnEs IHZvaWQgKmRhdGEsIGJvb2wgaXNfY2UpCit7CisJdTMyIGlfbWFzaywgb19tYXNrLCBzdGF0dXM7 CisJYm9vbCBvdmVyZmxvdzsKKwlzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2k7CisJc3RydWN0IGRt YzUyMF9lZGFjICplZGFjOworCisJbWNpID0gZGF0YTsKKwllZGFjID0gbWNpLT5wdnRfaW5mbzsK KworCWlfbWFzayA9IGlzX2NlID8gRFJBTV9FQ0NfSU5UX0NFX01BU0sgOiBEUkFNX0VDQ19JTlRf VUVfTUFTSzsKKwlvX21hc2sgPSBpc19jZSA/IERSQU1fRUNDX0lOVF9DRV9PVkVSRkxPV19NQVNL IDoKKwkJCSBEUkFNX0VDQ19JTlRfVUVfT1ZFUkZMT1dfTUFTSzsKKworCXN0YXR1cyA9IGRtYzUy MF9yZWFkX3JlZyhlZGFjLCBSRUdfT0ZGU0VUX0lOVEVSUlVQVF9TVEFUVVMpOworCW92ZXJmbG93 ID0gKChzdGF0dXMgJiBvX21hc2spICE9IDApOworCisJZG1jNTIwX2hhbmRsZV9lY2NfZXJyb3Jz KG1jaSwgaXNfY2UsIG92ZXJmbG93KTsKKworCWRtYzUyMF93cml0ZV9yZWcoZWRhYywgaV9tYXNr LCBSRUdfT0ZGU0VUX0lOVEVSUlVQVF9DTFIpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQor CitzdGF0aWMgaXJxcmV0dXJuX3QgZG1jNTIwX2VkYWNfY2VfaXNyKGludCBpcnEsIHZvaWQgKmRh dGEpCit7CisJcmV0dXJuIGRtYzUyMF9lZGFjX2lzcihpcnEsIGRhdGEsIHRydWUpOworfQorCitz dGF0aWMgaXJxcmV0dXJuX3QgZG1jNTIwX2VkYWNfdWVfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEp Cit7CisJcmV0dXJuIGRtYzUyMF9lZGFjX2lzcihpcnEsIGRhdGEsIGZhbHNlKTsKK30KKworc3Rh dGljIHZvaWQgZG1jNTIwX2luaXRfY3Nyb3coc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQorewor CXN0cnVjdCBjc3Jvd19pbmZvICpjc2k7CisJc3RydWN0IGRpbW1faW5mbyAqZGltbTsKKwlpbnQg cm93LCBjaDsKKwllbnVtIGRldl90eXBlIGR0OworCWVudW0gbWVtX3R5cGUgbXQ7CisJdTY0IHJz OworCXUzMiBwYWdlc19wZXJfcmFuazsKKwlzdHJ1Y3QgZG1jNTIwX2VkYWMgKmVkYWMgPSBtY2kt PnB2dF9pbmZvOworCisJZHQgPSBkbWM1MjBfZ2V0X2R0eXBlKGVkYWMpOworCW10ID0gZG1jNTIw X2dldF9tdHlwZShlZGFjKTsKKwlycyA9IGRtYzUyMF9nZXRfcmFua19zaXplKGVkYWMpOworCXBh Z2VzX3Blcl9yYW5rID0gcnMgPj4gUEFHRV9TSElGVDsKKworCWZvciAocm93ID0gMDsgcm93IDwg bWNpLT5ucl9jc3Jvd3M7IHJvdysrKSB7CisJCWNzaSA9IG1jaS0+Y3Nyb3dzW3Jvd107CisKKwkJ Zm9yIChjaCA9IDA7IGNoIDwgY3NpLT5ucl9jaGFubmVsczsgY2grKykgeworCQkJZGltbQkJPSBj c2ktPmNoYW5uZWxzW2NoXS0+ZGltbTsKKwkJCWRpbW0tPmVkYWNfbW9kZQk9IEVEQUNfRkxBR19T RUNERUQ7CisJCQlkaW1tLT5tdHlwZQk9IG10OworCQkJZGltbS0+bnJfcGFnZXMJPSBwYWdlc19w ZXJfcmFuayAvIGNzaS0+bnJfY2hhbm5lbHM7CisJCQlkaW1tLT5ncmFpbgk9IERNQzUyMF9FREFD X0VSUl9HUkFJTjsKKwkJCWRpbW0tPmR0eXBlCT0gZHQ7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBp bnQgZG1jNTIwX2VkYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlz dHJ1Y3QgZG1jNTIwX2VkYWMgKmVkYWM7CisJc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpOworCXN0 cnVjdCBlZGFjX21jX2xheWVyIGxheWVyc1syXTsKKwlpbnQgcmV0LCBpcnE7CisJc3RydWN0IHJl c291cmNlICpyZXM7CisJdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsKKworCXJlcyA9IHBsYXRmb3Jt X2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVnX2Jhc2UgPSBkZXZt X2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHJlZ19iYXNl KSkKKwkJcmV0dXJuIFBUUl9FUlIocmVnX2Jhc2UpOworCisJbGF5ZXJzWzBdLnR5cGUgPSBFREFD X01DX0xBWUVSX0NISVBfU0VMRUNUOworCWxheWVyc1swXS5zaXplID0gZG1jNTIwX2dldF9yYW5r X2NvdW50KHJlZ19iYXNlKTsKKwlsYXllcnNbMF0uaXNfdmlydF9jc3JvdyA9IHRydWU7CisKKwls YXllcnNbMV0udHlwZSA9IEVEQUNfTUNfTEFZRVJfQ0hBTk5FTDsKKwlsYXllcnNbMV0uc2l6ZSA9 IERNQzUyMF9FREFDX0NIQU5TOworCWxheWVyc1sxXS5pc192aXJ0X2Nzcm93ID0gZmFsc2U7CisK KwltY2kgPSBlZGFjX21jX2FsbG9jKGRtYzUyMF9tY19pZHgrKywgQVJSQVlfU0laRShsYXllcnMp LCBsYXllcnMsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBkbWM1MjBfZWRhYykpOworCWlmICghbWNp KSB7CisJCWVkYWNfcHJpbnRrKEtFUk5fRVJSLCBFREFDX01PRF9OQU1FLAorCQkJICAgICJGYWls ZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBtYyBpbnN0YW5jZVxuIik7CisJCXJldHVybiAtRU5P TUVNOworCX0KKworCWVkYWMgPSBtY2ktPnB2dF9pbmZvOworCWVkYWMtPnJlZ19iYXNlID0gcmVn X2Jhc2U7CisKKwlpZiAoIWRtYzUyMF9pc19lY2NfZW5hYmxlZChlZGFjKSkgeworCQllZGFjX3By aW50ayhLRVJOX0VSUiwgRURBQ19NT0RfTkFNRSwgIkVDQyBub3QgZW5hYmxlZFxuIik7CisJCXJl dCA9IC1FTlhJTzsKKwkJZ290byBlcnI7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRl diwgbWNpKTsKKworCW1jaS0+cGRldiA9ICZwZGV2LT5kZXY7CisJbWNpLT5tdHlwZV9jYXAgPSBN RU1fRkxBR19ERFIzIHwgTUVNX0ZMQUdfRERSNDsKKwltY2ktPmVkYWNfY3RsX2NhcCA9IEVEQUNf RkxBR19OT05FIHwgRURBQ19GTEFHX1NFQ0RFRDsKKwltY2ktPnNjcnViX2NhcCA9IFNDUlVCX0hX X1NSQzsKKwltY2ktPnNjcnViX21vZGUgPSBTQ1JVQl9OT05FOworCW1jaS0+ZWRhY19jYXAgPSBF REFDX0ZMQUdfU0VDREVEOworCW1jaS0+Y3RsX25hbWUgPSBFREFDX0NUTF9OQU1FOworCW1jaS0+ ZGV2X25hbWUgPSBkZXZfbmFtZShtY2ktPnBkZXYpOworCW1jaS0+bW9kX25hbWUgPSBFREFDX01P RF9OQU1FOworCW1jaS0+Y3RsX3BhZ2VfdG9fcGh5cyA9IE5VTEw7CisKKwllZGFjX29wX3N0YXRl ID0gRURBQ19PUFNUQVRFX0lOVDsKKworCWRtYzUyMF9pbml0X2Nzcm93KG1jaSk7CisKKwlyZXQg PSBlZGFjX21jX2FkZF9tYyhtY2kpOworCWlmIChyZXQpIHsKKwkJZWRhY19wcmludGsoS0VSTl9F UlIsIEVEQUNfTU9EX05BTUUsCisJCQkgICAgIkZhaWxlZCB0byByZWdpc3RlciB3aXRoIEVEQUMg Y29yZVxuIik7CisJCWdvdG8gZXJyOworCX0KKworCWZvciAoaXJxID0gMDsgaXJxIDwgRE1DNTIw X0VEQUNfSU5UX0NPVU5UOyArK2lycSkgeworCQlpcnFfaGFuZGxlcl90IGRtYzUyMF9lZGFjX2lz cjsKKwkJaW50IGlycV9pZCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaXJxKTsKKworCQlpZiAo aXJxX2lkIDwgMCkgeworCQkJZWRhY19wcmludGsoS0VSTl9FUlIsIEVEQUNfTUMsCisJCQkJICAg ICJGYWlsZWQgdG8gZ2V0ICVzIGlycVxuIiwKKwkJCQkgICAgaXJxID09IDAgPyAiQ0UiIDogIlVF Iik7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBlcnI7CisJCX0KKworCQlkbWM1MjBfZWRh Y19pc3IgPSAoaXJxID09IDAgPyBkbWM1MjBfZWRhY19jZV9pc3IgOgorCQkJCQkgICAgICBkbWM1 MjBfZWRhY191ZV9pc3IpOworCisJCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwK KwkJCQkgICAgICAgaXJxX2lkLAorCQkJCSAgICAgICBkbWM1MjBfZWRhY19pc3IsCisJCQkJICAg ICAgIDAsCisJCQkJICAgICAgIGRldl9uYW1lKCZwZGV2LT5kZXYpLAorCQkJCSAgICAgICBtY2kp OworCQlpZiAocmV0IDwgMCkgeworCQkJZWRhY19wcmludGsoS0VSTl9FUlIsIEVEQUNfTUMsCisJ CQkJICAgICJGYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWRcbiIsIGlycV9pZCk7CisJCQlnb3RvIGVy cjsKKwkJfQorCX0KKworCS8qIENoZWNrIEVDQyBDRS9VRSBlcnJvcnMgKi8KKwlkbWM1MjBfaGFu ZGxlX2VjY19lcnJvcnMobWNpLCB0cnVlLCBmYWxzZSk7CisJZG1jNTIwX2hhbmRsZV9lY2NfZXJy b3JzKG1jaSwgZmFsc2UsIGZhbHNlKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJZG1j NTIwX3dyaXRlX3JlZyhlZGFjLAorCQkJIERSQU1fRUNDX0lOVF9DRV9NQVNLIHwgRFJBTV9FQ0Nf SU5UX1VFX01BU0ssCisJCQkgUkVHX09GRlNFVF9JTlRFUlJVUFRfQ09OVFJPTCk7CisKKwlyZXR1 cm4gMDsKKworZXJyOgorCWVkYWNfbWNfZnJlZShtY2kpOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludCBkbWM1MjBfZWRhY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKK3sKKwlzdHJ1Y3QgZG1jNTIwX2VkYWMgKmVkYWM7CisJc3RydWN0IG1lbV9jdGxfaW5mbyAq bWNpOworCisJbWNpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJZWRhYyA9IG1jaS0+ cHZ0X2luZm87CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwlkbWM1MjBfd3JpdGVfcmVn KGVkYWMsCisJCQkgRFJBTV9FQ0NfSU5UX0NFX01BU0sgfCBEUkFNX0VDQ19JTlRfVUVfTUFTSywK KwkJCSBSRUdfT0ZGU0VUX0lOVEVSUlVQVF9DT05UUk9MKTsKKworCWVkYWNfbWNfZGVsX21jKCZw ZGV2LT5kZXYpOworCWVkYWNfbWNfZnJlZShtY2kpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGRtYzUyMF9lZGFjX2RyaXZlcl9pZFtdID0gewor CXsgLmNvbXBhdGlibGUgPSAiYXJtLGRtYy01MjAiLCB9LAorCXsgLyogZW5kIG9mIHRhYmxlICov IH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGRtYzUyMF9lZGFjX2RyaXZlcl9pZCk7 CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRtYzUyMF9lZGFjX2RyaXZlciA9IHsK KwkuZHJpdmVyID0geworCQkubmFtZSA9ICJkbWM1MjAiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBk bWM1MjBfZWRhY19kcml2ZXJfaWQsCisJfSwKKworCS5wcm9iZSA9IGRtYzUyMF9lZGFjX3Byb2Jl LAorCS5yZW1vdmUgPSBkbWM1MjBfZWRhY19yZW1vdmUKK307CisKK21vZHVsZV9wbGF0Zm9ybV9k cml2ZXIoZG1jNTIwX2VkYWNfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiUnVpIFpoYW8gPHJ1 aXpoYW9AbWljcm9zb2Z0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRE1DLTUyMCBFQ0Mg ZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cg==