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: [v7,5/7] edac: synopsys: Add EDAC ECC support for ZynqMP DDRC From: Manish Narani Message-Id: <1537194305-9243-6-git-send-email-manish.narani@xilinx.com> Date: Mon, 17 Sep 2018 19:55:03 +0530 To: robh+dt@kernel.org, mark.rutland@arm.com, bp@alien8.de, mchehab@kernel.org, michal.simek@xilinx.com, manish.narani@xilinx.com, leoyang.li@nxp.com, sudeep.holla@arm.com, amit.kucheria@linaro.org Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-edac@vger.kernel.org, linux-arm-kernel@lists.infradead.org List-ID: QWRkIEVEQUMgRUNDIHN1cHBvcnQgZm9yIFp5bnFNUCBERFJDIElQLiBUaGUgSVAgc3VwcG9ydHMg aW50ZXJydXB0cyBmb3IKY29ycmVjdGVkIGFuZCB1bmNvcnJlY3RlZCBlcnJvcnMuIEFkZCBpbnRl cnJ1cHQgaGFuZGxlcnMgZm9yIHRoZSBzYW1lLgoKU2lnbmVkLW9mZi1ieTogTWFuaXNoIE5hcmFu aSA8bWFuaXNoLm5hcmFuaUB4aWxpbnguY29tPgotLS0KIGRyaXZlcnMvZWRhYy9LY29uZmlnICAg ICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZWRhYy9zeW5vcHN5c19lZGFjLmMgfCAzMDQgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQogMiBmaWxlcyBjaGFuZ2VkLCAy ODcgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9l ZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRleCA1NzMwNGIyLi5iMWZjN2Ex NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL0tjb25maWcKKysrIGIvZHJpdmVycy9lZGFjL0tj b25maWcKQEAgLTQ0MSw3ICs0NDEsNyBAQCBjb25maWcgRURBQ19BTFRFUkFfU0RNTUMKIAogY29u ZmlnIEVEQUNfU1lOT1BTWVMKIAl0cmlzdGF0ZSAiU3lub3BzeXMgRERSIE1lbW9yeSBDb250cm9s bGVyIgotCWRlcGVuZHMgb24gQVJDSF9aWU5RCisJZGVwZW5kcyBvbiBBUkNIX1pZTlEgfHwgQVJN NjQKIAloZWxwCiAJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24g b24gdGhlIFN5bm9wc3lzIEREUgogCSAgbWVtb3J5IGNvbnRyb2xsZXIuCmRpZmYgLS1naXQgYS9k cml2ZXJzL2VkYWMvc3lub3BzeXNfZWRhYy5jIGIvZHJpdmVycy9lZGFjL3N5bm9wc3lzX2VkYWMu YwppbmRleCA2YmY3OTU5Li43YWI1YjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvc3lub3Bz eXNfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9zeW5vcHN5c19lZGFjLmMKQEAgLTIyLDYgKzIy LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lZGFjLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50 ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZp Y2UuaD4KIApAQCAtMjcyLDYgKzI3Myw4IEBACiAgKiBAYmFuazoJQmFuayBudW1iZXIuCiAgKiBA Yml0cG9zOglCaXQgcG9zaXRpb24uCiAgKiBAZGF0YToJRGF0YSBjYXVzaW5nIHRoZSBlcnJvci4K KyAqIEBiYW5rZ3JwbnI6CUJhbmsgZ3JvdXAgbnVtYmVyLgorICogQGJsa25yOglCbG9jayBudW1i ZXIuCiAgKi8KIHN0cnVjdCBlY2NfZXJyb3JfaW5mbyB7CiAJdTMyIHJvdzsKQEAgLTI3OSw2ICsy ODIsOCBAQCBzdHJ1Y3QgZWNjX2Vycm9yX2luZm8gewogCXUzMiBiYW5rOwogCXUzMiBiaXRwb3M7 CiAJdTMyIGRhdGE7CisJdTMyIGJhbmtncnBucjsKKwl1MzIgYmxrbnI7CiB9OwogCiAvKioKQEAg LTM4NSw2ICszOTAsNjggQEAgc3RhdGljIGludCB6eW5xX2dldGVycm9yX2luZm8oc3RydWN0IHN5 bnBzX2VkYWNfcHJpdiAqcHJpdikKIH0KIAogLyoqCisgKiB6eW5xbXBfZ2V0ZXJyb3JfaW5mbyAt IEdldCB0aGUgY3VycmVudCBFQ0MgZXJyb3IgaW5mby4KKyAqIEBwcml2OglERFIgbWVtb3J5IGNv bnRyb2xsZXIgcHJpdmF0ZSBpbnN0YW5jZSBkYXRhLgorICoKKyAqIFJldHVybjogb25lIGlmIHRo ZXJlIGlzIG5vIGVycm9yIG90aGVyd2lzZSByZXR1cm5zIHplcm8uCisgKi8KK3N0YXRpYyBpbnQg enlucW1wX2dldGVycm9yX2luZm8oc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdikKK3sKKwlz dHJ1Y3Qgc3lucHNfZWNjX3N0YXR1cyAqcDsKKwl1MzIgcmVndmFsLCBjbGVhcnZhbCA9IDA7CisJ dm9pZCBfX2lvbWVtICpiYXNlOworCisJYmFzZSA9IHByaXYtPmJhc2VhZGRyOworCXAgPSAmcHJp di0+c3RhdDsKKworCXJlZ3ZhbCA9IHJlYWRsKGJhc2UgKyBFQ0NfU1RBVF9PRlNUKTsKKwlpZiAo IXJlZ3ZhbCkKKwkJcmV0dXJuIDE7CisKKwlwLT5jZV9jbnQgPSAocmVndmFsICYgRUNDX1NUQVRf Q0VDTlRfTUFTSykgPj4gRUNDX1NUQVRfQ0VDTlRfU0hJRlQ7CisJcC0+dWVfY250ID0gKHJlZ3Zh bCAmIEVDQ19TVEFUX1VFQ05UX01BU0spID4+IEVDQ19TVEFUX1VFQ05UX1NISUZUOworCXAtPmNl aW5mby5iaXRwb3MgPSAocmVndmFsICYgRUNDX1NUQVRfQklUTlVNX01BU0spOworCisJcmVndmFs ID0gcmVhZGwoYmFzZSArIEVDQ19DRUFERFIwX09GU1QpOworCWlmICghKHAtPmNlX2NudCkpCisJ CWdvdG8gdWVfZXJyOworCisJcC0+Y2VpbmZvLnJvdyA9IChyZWd2YWwgJiBFQ0NfQ0VBRERSMF9S V19NQVNLKTsKKwlyZWd2YWwgPSByZWFkbChiYXNlICsgRUNDX0NFQUREUjFfT0ZTVCk7CisJcC0+ Y2VpbmZvLmJhbmsgPSAocmVndmFsICYgRUNDX0NFQUREUjFfQk5LTlJfTUFTSykgPj4KKwkJCQkJ RUNDX0NFQUREUjFfQk5LTlJfU0hJRlQ7CisJcC0+Y2VpbmZvLmJhbmtncnBuciA9IChyZWd2YWwg JglFQ0NfQ0VBRERSMV9CTktHUlBfTUFTSykgPj4KKwkJCQkJRUNDX0NFQUREUjFfQk5LR1JQX1NI SUZUOworCXAtPmNlaW5mby5ibGtuciA9IChyZWd2YWwgJiBFQ0NfQ0VBRERSMV9CTEtOUl9NQVNL KTsKKwlwLT5jZWluZm8uZGF0YSA9IHJlYWRsKGJhc2UgKyBFQ0NfQ1NZTkQwX09GU1QpOworCWVk YWNfZGJnKDIsICJFQ0NDU1lOMDogMHglMDhYIEVDQ0NTWU4xOiAweCUwOFggRUNDQ1NZTjI6IDB4 JTA4WFxuIiwKKwkJIHJlYWRsKGJhc2UgKyBFQ0NfQ1NZTkQwX09GU1QpLCByZWFkbChiYXNlICsg RUNDX0NTWU5EMV9PRlNUKSwKKwkJIHJlYWRsKGJhc2UgKyBFQ0NfQ1NZTkQyX09GU1QpKTsKKwor Cit1ZV9lcnI6CisJcmVndmFsID0gcmVhZGwoYmFzZSArIEVDQ19VRUFERFIwX09GU1QpOworCWlm ICghKHAtPnVlX2NudCkpCisJCWdvdG8gb3V0OworCisJcC0+dWVpbmZvLnJvdyA9IChyZWd2YWwg JiBFQ0NfQ0VBRERSMF9SV19NQVNLKTsKKwlyZWd2YWwgPSByZWFkbChiYXNlICsgRUNDX1VFQURE UjFfT0ZTVCk7CisJcC0+dWVpbmZvLmJhbmtncnBuciA9IChyZWd2YWwgJiBFQ0NfQ0VBRERSMV9C TktHUlBfTUFTSykgPj4KKwkJCQkJRUNDX0NFQUREUjFfQk5LR1JQX1NISUZUOworCXAtPnVlaW5m by5iYW5rID0gKHJlZ3ZhbCAmIEVDQ19DRUFERFIxX0JOS05SX01BU0spID4+CisJCQkJCUVDQ19D RUFERFIxX0JOS05SX1NISUZUOworCXAtPnVlaW5mby5ibGtuciA9IChyZWd2YWwgJiBFQ0NfQ0VB RERSMV9CTEtOUl9NQVNLKTsKKwlwLT51ZWluZm8uZGF0YSA9IHJlYWRsKGJhc2UgKyBFQ0NfVUVT WU5EMF9PRlNUKTsKK291dDoKKwljbGVhcnZhbCA9IEVDQ19DVFJMX0NMUl9DRV9FUlIgfCBFQ0Nf Q1RSTF9DTFJfQ0VfRVJSQ05UOworCWNsZWFydmFsIHw9IEVDQ19DVFJMX0NMUl9VRV9FUlIgfCBF Q0NfQ1RSTF9DTFJfVUVfRVJSQ05UOworCXdyaXRlbChjbGVhcnZhbCwgYmFzZSArIEVDQ19DTFJf T0ZTVCk7CisJd3JpdGVsKDB4MCwgYmFzZSArIEVDQ19DTFJfT0ZTVCk7CisKKwlyZXR1cm4gMDsK K30KKworLyoqCiAgKiBlZGFjX2hhbmRsZV9lcnJvciAtIEhhbmRsZSBjb250cm9sbGVyIGVycm9y IHR5cGVzIENFIGFuZCBVRS4KICAqIEBtY2k6CUVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFu Y2UuCiAgKiBAcDoJCVN5bm9wc3lzIEVDQyBzdGF0dXMgc3RydWN0dXJlLgpAQCAtMzk5LDkgKzQ2 NiwyNSBAQCBzdGF0aWMgdm9pZCBlZGFjX2hhbmRsZV9lcnJvcihzdHJ1Y3QgbWVtX2N0bF9pbmZv ICptY2ksCiAKIAlpZiAocC0+Y2VfY250KSB7CiAJCXBpbmYgPSAmcC0+Y2VpbmZvOwotCQlzbnBy aW50Zihwcml2LT5tZXNzYWdlLCBTWU5QU19FREFDX01TR19TSVpFLAotCQkJICJERFIgRUNDIGVy cm9yIHR5cGUgOiVzIFJvdyAlZCBCYW5rICVkIENvbCAlZCAiLAotCQkJICJDRSIsIHBpbmYtPnJv dywgcGluZi0+YmFuaywgcGluZi0+Y29sKTsKKwkJaWYgKCFwcml2LT5wX2RhdGEtPnF1aXJrcykg eworCQkJc25wcmludGYocHJpdi0+bWVzc2FnZSwgU1lOUFNfRURBQ19NU0dfU0laRSwKKwkJCQkg IkREUiBFQ0MgZXJyb3IgdHlwZTolcyBSb3cgJWQgQmFuayAlZCBDb2wgJWQgIiwKKwkJCQkgICJD RSIsIHBpbmYtPnJvdywgcGluZi0+YmFuaywgcGluZi0+Y29sKTsKKwkJCXNucHJpbnRmKHByaXYt Pm1lc3NhZ2UsIFNZTlBTX0VEQUNfTVNHX1NJWkUsCisJCQkJICJCaXQgUG9zaXRpb246ICVkIERh dGE6IDB4JTA4eFxuIiwKKwkJCQkgcGluZi0+Yml0cG9zLCBwaW5mLT5kYXRhKTsKKwkJfSBlbHNl IHsKKwkJCXNucHJpbnRmKHByaXYtPm1lc3NhZ2UsIFNZTlBTX0VEQUNfTVNHX1NJWkUsCisJCQkJ ICJERFIgRUNDIGVycm9yIHR5cGU6JXMgUm93ICVkIEJhbmsgJWQgQ29sICVkICIsCisJCQkJICAi Q0UiLCBwaW5mLT5yb3csIHBpbmYtPmJhbmssIHBpbmYtPmNvbCk7CisJCQlzbnByaW50Zihwcml2 LT5tZXNzYWdlLCBTWU5QU19FREFDX01TR19TSVpFLAorCQkJCSAiQmFua0dyb3VwIE51bWJlciAl ZCBCbG9jayBOdW1iZXIgJWQgIiwKKwkJCQkgcGluZi0+YmFua2dycG5yLCBwaW5mLT5ibGtucik7 CisJCQlzbnByaW50Zihwcml2LT5tZXNzYWdlLCBTWU5QU19FREFDX01TR19TSVpFLAorCQkJCSAi Qml0IFBvc2l0aW9uOiAlZCBEYXRhOiAweCUwOHhcbiIsCisJCQkJIHBpbmYtPmJpdHBvcywgcGlu Zi0+ZGF0YSk7CisJCX0KKwogCQllZGFjX21jX2hhbmRsZV9lcnJvcihIV19FVkVOVF9FUlJfQ09S UkVDVEVELCBtY2ksCiAJCQkJICAgICBwLT5jZV9jbnQsIDAsIDAsIDAsIDAsIDAsIC0xLAogCQkJ CSAgICAgcHJpdi0+bWVzc2FnZSwgIiIpOwpAQCAtNDA5LDkgKzQ5MiwxOSBAQCBzdGF0aWMgdm9p ZCBlZGFjX2hhbmRsZV9lcnJvcihzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCiAKIAlpZiAocC0+ dWVfY250KSB7CiAJCXBpbmYgPSAmcC0+dWVpbmZvOwotCQlzbnByaW50Zihwcml2LT5tZXNzYWdl LCBTWU5QU19FREFDX01TR19TSVpFLAotCQkJICJERFIgRUNDIGVycm9yIHR5cGUgOiVzIFJvdyAl ZCBCYW5rICVkIENvbCAlZCAiLAotCQkJICJVRSIsIHBpbmYtPnJvdywgcGluZi0+YmFuaywgcGlu Zi0+Y29sKTsKKwkJaWYgKCFwcml2LT5wX2RhdGEtPnF1aXJrcykgeworCQkJc25wcmludGYocHJp di0+bWVzc2FnZSwgU1lOUFNfRURBQ19NU0dfU0laRSwKKwkJCQkgIkREUiBFQ0MgZXJyb3IgdHlw ZSA6JXMgUm93ICVkIEJhbmsgJWQgQ29sICVkICIsCisJCQkJIlVFIiwgcGluZi0+cm93LCBwaW5m LT5iYW5rLCBwaW5mLT5jb2wpOworCQl9IGVsc2UgeworCQkJc25wcmludGYocHJpdi0+bWVzc2Fn ZSwgU1lOUFNfRURBQ19NU0dfU0laRSwKKwkJCQkgIkREUiBFQ0MgZXJyb3IgdHlwZSA6JXMgUm93 ICVkIEJhbmsgJWQgQ29sICVkICIsCisJCQkJICJVRSIsIHBpbmYtPnJvdywgcGluZi0+YmFuaywg cGluZi0+Y29sKTsKKwkJCXNucHJpbnRmKHByaXYtPm1lc3NhZ2UsIFNZTlBTX0VEQUNfTVNHX1NJ WkUsCisJCQkJICJCYW5rR3JvdXAgTnVtYmVyICVkIEJsb2NrIE51bWJlciAlZCIsCisJCQkJIHBp bmYtPmJhbmtncnBuciwgcGluZi0+YmxrbnIpOworCQl9CisKIAkJZWRhY19tY19oYW5kbGVfZXJy b3IoSFdfRVZFTlRfRVJSX1VOQ09SUkVDVEVELCBtY2ksCiAJCQkJICAgICBwLT51ZV9jbnQsIDAs IDAsIDAsIDAsIDAsIC0xLAogCQkJCSAgICAgcHJpdi0+bWVzc2FnZSwgIiIpOwpAQCAtNDIxLDYg KzUxNCw0MiBAQCBzdGF0aWMgdm9pZCBlZGFjX2hhbmRsZV9lcnJvcihzdHJ1Y3QgbWVtX2N0bF9p bmZvICptY2ksCiB9CiAKIC8qKgorICogc3lucHNfZWRhY19pbnRyX2hhbmRsZXIgLSBJbnRlcnJ1 cHQgSGFuZGxlciBmb3IgRUNDIGludGVycnVwdHMuCisgKiBAaXJxOiAgICAgICAgSVJRIG51bWJl ci4KKyAqIEBkZXZfaWQ6ICAgICBEZXZpY2UgSUQuCisgKgorICogUmV0dXJuOiBJUlFfTk9ORSwg aWYgaW50ZXJydXB0IG5vdCBzZXQgb3IgSVJRX0hBTkRMRUQgb3RoZXJ3aXNlLgorICovCitzdGF0 aWMgaXJxcmV0dXJuX3Qgc3lucHNfZWRhY19pbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2 X2lkKQoreworCWNvbnN0IHN0cnVjdCBzeW5wc19wbGF0Zm9ybV9kYXRhICpwX2RhdGE7CisJc3Ry dWN0IG1lbV9jdGxfaW5mbyAqbWNpID0gZGV2X2lkOworCXN0cnVjdCBzeW5wc19lZGFjX3ByaXYg KnByaXY7CisJaW50IHN0YXR1cywgcmVndmFsOworCisJcHJpdiA9IG1jaS0+cHZ0X2luZm87CisJ cF9kYXRhID0gcHJpdi0+cF9kYXRhOworCisJcmVndmFsID0gcmVhZGwocHJpdi0+YmFzZWFkZHIg KyBERFJfUU9TX0lSUV9TVEFUX09GU1QpOworCXJlZ3ZhbCAmPSAoRERSX1FPU0NFX01BU0sgfCBE RFJfUU9TVUVfTUFTSyk7CisJaWYgKCEocmVndmFsICYgRUNDX0NFX1VFX0lOVFJfTUFTSykpCisJ CXJldHVybiBJUlFfTk9ORTsKKworCXN0YXR1cyA9IHBfZGF0YS0+Z2V0ZXJyb3JfaW5mbyhwcml2 KTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlwcml2LT5jZV9jbnQgKz0g cHJpdi0+c3RhdC5jZV9jbnQ7CisJcHJpdi0+dWVfY250ICs9IHByaXYtPnN0YXQudWVfY250Owor CWVkYWNfaGFuZGxlX2Vycm9yKG1jaSwgJnByaXYtPnN0YXQpOworCisJZWRhY19kYmcoMywgIlRv dGFsIGVycm9yIGNvdW50IENFICVkIFVFICVkXG4iLAorCQkgcHJpdi0+Y2VfY250LCBwcml2LT51 ZV9jbnQpOworCXdyaXRlbChyZWd2YWwsIHByaXYtPmJhc2VhZGRyICsgRERSX1FPU19JUlFfU1RB VF9PRlNUKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgogICogZWRhY19lcnJvcl9j aGVjayAtIENoZWNrIGNvbnRyb2xsZXIgZm9yIEVDQyBlcnJvcnMuCiAgKiBAbWNpOglFREFDIG1l bW9yeSBjb250cm9sbGVyIGluc3RhbmNlLgogICoKQEAgLTQyOCwxMCArNTU3LDEzIEBAIHN0YXRp YyB2b2lkIGVkYWNfaGFuZGxlX2Vycm9yKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKICAqLwog c3RhdGljIHZvaWQgZWRhY19lcnJvcl9jaGVjayhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kpCiB7 Ci0Jc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdiA9IG1jaS0+cHZ0X2luZm87Ci0JY29uc3Qg c3RydWN0IHN5bnBzX3BsYXRmb3JtX2RhdGEgKnBfZGF0YSA9IHByaXYtPnBfZGF0YTsKKwljb25z dCBzdHJ1Y3Qgc3lucHNfcGxhdGZvcm1fZGF0YSAqcF9kYXRhOworCXN0cnVjdCBzeW5wc19lZGFj X3ByaXYgKnByaXY7CiAJaW50IHN0YXR1czsKIAorCXByaXYgPSBtY2ktPnB2dF9pbmZvOworCXBf ZGF0YSA9IHByaXYtPnBfZGF0YTsKKwogCXN0YXR1cyA9IHBfZGF0YS0+Z2V0ZXJyb3JfaW5mbyhw cml2KTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm47CkBAIC00NzYsNiArNjA4LDM5IEBAIHN0YXRp YyBlbnVtIGRldl90eXBlIHp5bnFfZ2V0X2R0eXBlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZSkK IH0KIAogLyoqCisgKiB6eW5xbXBfZ2V0X2R0eXBlIC0gUmV0dXJuIHRoZSBjb250cm9sbGVyIG1l bW9yeSB3aWR0aC4KKyAqIEBiYXNlOglERFIgbWVtb3J5IGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNz LgorICoKKyAqIEdldCB0aGUgRURBQyBkZXZpY2UgdHlwZSB3aWR0aCBhcHByb3ByaWF0ZSBmb3Ig dGhlIGN1cnJlbnQgY29udHJvbGxlcgorICogY29uZmlndXJhdGlvbi4KKyAqCisgKiBSZXR1cm46 IGEgZGV2aWNlIHR5cGUgd2lkdGggZW51bWVyYXRpb24uCisgKi8KK3N0YXRpYyBlbnVtIGRldl90 eXBlIHp5bnFtcF9nZXRfZHR5cGUoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNlKQoreworCWVudW0g ZGV2X3R5cGUgZHQ7CisJdTMyIHdpZHRoOworCisJd2lkdGggPSByZWFkbChiYXNlICsgQ1RSTF9P RlNUKTsKKwl3aWR0aCA9ICh3aWR0aCAmIEVDQ19DVFJMX0JVU1dJRFRIX01BU0spID4+IEVDQ19D VFJMX0JVU1dJRFRIX1NISUZUOworCXN3aXRjaCAod2lkdGgpIHsKKwljYXNlIEREUkNUTF9FV0RU SF8xNjoKKwkJZHQgPSBERVZfWDI7CisJCWJyZWFrOworCWNhc2UgRERSQ1RMX0VXRFRIXzMyOgor CQlkdCA9IERFVl9YNDsKKwkJYnJlYWs7CisJY2FzZSBERFJDVExfRVdEVEhfNjQ6CisJCWR0ID0g REVWX1g4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkdCA9IERFVl9VTktOT1dOOworCX0KKwor CXJldHVybiBkdDsKK30KKworLyoqCiAgKiB6eW5xX2dldF9lY2NzdGF0ZSAtIFJldHVybiB0aGUg Y29udHJvbGxlciBFQ0MgZW5hYmxlL2Rpc2FibGUgc3RhdHVzLgogICogQGJhc2U6CUREUiBtZW1v cnkgY29udHJvbGxlciBiYXNlIGFkZHJlc3MuCiAgKgpAQCAtNDg1LDE5ICs2NTAsNDMgQEAgc3Rh dGljIGVudW0gZGV2X3R5cGUgenlucV9nZXRfZHR5cGUoY29uc3Qgdm9pZCBfX2lvbWVtICpiYXNl KQogICovCiBzdGF0aWMgYm9vbCB6eW5xX2dldF9lY2NzdGF0ZSh2b2lkIF9faW9tZW0gKmJhc2Up CiB7Ci0JYm9vbCBzdGF0ZSA9IGZhbHNlOwogCWVudW0gZGV2X3R5cGUgZHQ7CiAJdTMyIGVjY3R5 cGU7CiAKIAlkdCA9IHp5bnFfZ2V0X2R0eXBlKGJhc2UpOwogCWlmIChkdCA9PSBERVZfVU5LTk9X TikKLQkJcmV0dXJuIHN0YXRlOworCQlyZXR1cm4gZmFsc2U7CiAKIAllY2N0eXBlID0gcmVhZGwo YmFzZSArIFNDUlVCX09GU1QpICYgU0NSVUJfTU9ERV9NQVNLOwogCWlmICgoZWNjdHlwZSA9PSBT Q1JVQl9NT0RFX1NFQ0RFRCkgJiYgKGR0ID09IERFVl9YMikpCi0JCXN0YXRlID0gdHJ1ZTsKKwkJ cmV0dXJuIHRydWU7CiAKLQlyZXR1cm4gc3RhdGU7CisJcmV0dXJuIGZhbHNlOworfQorCisvKioK KyAqIHp5bnFtcF9nZXRfZWNjc3RhdGUgLSBSZXR1cm4gdGhlIGNvbnRyb2xsZXIgRUNDIGVuYWJs ZS9kaXNhYmxlIHN0YXR1cy4KKyAqIEBiYXNlOglERFIgbWVtb3J5IGNvbnRyb2xsZXIgYmFzZSBh ZGRyZXNzLgorICoKKyAqIEdldCB0aGUgRUNDIGVuYWJsZS9kaXNhYmxlIHN0YXR1cyBmb3IgdGhl IGNvbnRyb2xsZXIuCisgKgorICogUmV0dXJuOiBhIEVDQyBzdGF0dXMgYm9vbGVhbiBpLmUgdHJ1 ZS9mYWxzZSAtIGVuYWJsZWQvZGlzYWJsZWQuCisgKi8KK3N0YXRpYyBib29sIHp5bnFtcF9nZXRf ZWNjc3RhdGUodm9pZCBfX2lvbWVtICpiYXNlKQoreworCWVudW0gZGV2X3R5cGUgZHQ7CisJdTMy IGVjY3R5cGU7CisKKwlkdCA9IHp5bnFtcF9nZXRfZHR5cGUoYmFzZSk7CisJaWYgKGR0ID09IERF Vl9VTktOT1dOKQorCQlyZXR1cm4gZmFsc2U7CisKKwllY2N0eXBlID0gcmVhZGwoYmFzZSArIEVD Q19DRkcwX09GU1QpICYgU0NSVUJfTU9ERV9NQVNLOworCWlmICgoZWNjdHlwZSA9PSBTQ1JVQl9N T0RFX1NFQ0RFRCkgJiYKKwkgICAgKChkdCA9PSBERVZfWDIpIHx8IChkdCA9PSBERVZfWDQpIHx8 IChkdCA9PSBERVZfWDgpKSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7CiB9CiAK IC8qKgpAQCAtNTM5LDYgKzcyOCwzNCBAQCBzdGF0aWMgZW51bSBtZW1fdHlwZSB6eW5xX2dldF9t dHlwZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2UpCiB9CiAKIC8qKgorICogenlucW1wX2dldF9t dHlwZSAtIFJldHVybnMgY29udHJvbGxlciBtZW1vcnkgdHlwZS4KKyAqIEBiYXNlOglTeW5vcHN5 cyBFQ0Mgc3RhdHVzIHN0cnVjdHVyZS4KKyAqCisgKiBHZXQgdGhlIEVEQUMgbWVtb3J5IHR5cGUg YXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IGNvbnRyb2xsZXIKKyAqIGNvbmZpZ3VyYXRpb24u CisgKgorICogUmV0dXJuOiBhIG1lbW9yeSB0eXBlIGVudW1lcmF0aW9uLgorICovCitzdGF0aWMg ZW51bSBtZW1fdHlwZSB6eW5xbXBfZ2V0X210eXBlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZSkK K3sKKwllbnVtIG1lbV90eXBlIG10OworCXUzMiBtZW10eXBlOworCisJbWVtdHlwZSA9IHJlYWRs KGJhc2UgKyBDVFJMX09GU1QpOworCisJaWYgKChtZW10eXBlICYgTUVNX1RZUEVfRERSMykgfHwg KG1lbXR5cGUgJiBNRU1fVFlQRV9MUEREUjMpKQorCQltdCA9IE1FTV9ERFIzOworCWVsc2UgaWYg KG1lbXR5cGUgJiBNRU1fVFlQRV9ERFIyKQorCQltdCA9IE1FTV9SRERSMjsKKwllbHNlIGlmICgo bWVtdHlwZSAmIE1FTV9UWVBFX0xQRERSNCkgfHwgKG1lbXR5cGUgJiBNRU1fVFlQRV9ERFI0KSkK KwkJbXQgPSBNRU1fRERSNDsKKwllbHNlCisJCW10ID0gTUVNX0VNUFRZOworCisJcmV0dXJuIG10 OworfQorCisvKioKICAqIGVkYWNfaW5pdF9jc3Jvd3MgLSBJbml0aWFsaXplIHRoZSBjcyByb3cg ZGF0YS4KICAqIEBtY2k6CUVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UuCiAgKgpAQCAt NjAwLDggKzgxNywxMyBAQCBzdGF0aWMgdm9pZCBlZGFjX21jX2luaXQoc3RydWN0IG1lbV9jdGxf aW5mbyAqbWNpLAogCW1jaS0+ZGV2X25hbWUgPSBTWU5QU19FREFDX01PRF9TVFJJTkc7CiAJbWNp LT5tb2RfbmFtZSA9IFNZTlBTX0VEQUNfTU9EX1ZFUjsKIAotCWVkYWNfb3Bfc3RhdGUgPSBFREFD X09QU1RBVEVfUE9MTDsKLQltY2ktPmVkYWNfY2hlY2sgPSBlZGFjX2Vycm9yX2NoZWNrOworCWlm IChwcml2LT5wX2RhdGEtPnF1aXJrcyAmIEREUl9FQ0NfSU5UUl9TVVBQT1JUKSB7CisJCWVkYWNf b3Bfc3RhdGUgPSBFREFDX09QU1RBVEVfSU5UOworCX0gZWxzZSB7CisJCWVkYWNfb3Bfc3RhdGUg PSBFREFDX09QU1RBVEVfUE9MTDsKKwkJbWNpLT5lZGFjX2NoZWNrID0gZWRhY19lcnJvcl9jaGVj azsKKwl9CisKIAltY2ktPmN0bF9wYWdlX3RvX3BoeXMgPSBOVUxMOwogCiAJZWRhY19pbml0X2Nz cm93cyhtY2kpOwpAQCAtNjE1LDkgKzgzNywyNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN5bnBz X3BsYXRmb3JtX2RhdGEgenlucV9lZGFjX2RlZiA9IHsKIAkucXVpcmtzCQk9IDAsCiB9OwogCitz dGF0aWMgY29uc3Qgc3RydWN0IHN5bnBzX3BsYXRmb3JtX2RhdGEgenlucW1wX2VkYWNfZGVmID0g eworCS5nZXRlcnJvcl9pbmZvCT0genlucW1wX2dldGVycm9yX2luZm8sCisJLmdldF9tdHlwZQk9 IHp5bnFtcF9nZXRfbXR5cGUsCisJLmdldF9kdHlwZQk9IHp5bnFtcF9nZXRfZHR5cGUsCisJLmdl dF9lY2NzdGF0ZQk9IHp5bnFtcF9nZXRfZWNjc3RhdGUsCisJLnF1aXJrcwkJPSBERFJfRUNDX0lO VFJfU1VQUE9SVCwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN5bnBz X2VkYWNfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0gInhsbngsenlucS1kZHJjLWEwNSIs IC5kYXRhID0gKHZvaWQgKikmenlucV9lZGFjX2RlZiB9LAotCXsgLyogZW5kIG9mIHRhYmxlICov IH0KKwl7CisJCS5jb21wYXRpYmxlID0gInhsbngsenlucS1kZHJjLWEwNSIsCisJCS5kYXRhID0g KHZvaWQgKikmenlucV9lZGFjX2RlZgorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJ4bG54LHp5 bnFtcC1kZHJjLTIuNDBhIiwKKwkJLmRhdGEgPSAodm9pZCAqKSZ6eW5xbXBfZWRhY19kZWYKKwl9 LAorCXsKKwkJLyogZW5kIG9mIHRhYmxlICovCisJfQogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJM RShvZiwgc3lucHNfZWRhY19tYXRjaCk7CkBAIC02MzksNyArODc4LDcgQEAgc3RhdGljIGludCBz eW5wc19lZGFjX21jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJc3RydWN0 IG1lbV9jdGxfaW5mbyAqbWNpOwogCXZvaWQgX19pb21lbSAqYmFzZWFkZHI7CiAJc3RydWN0IHJl c291cmNlICpyZXM7Ci0JaW50IHJjOworCWludCByYywgaXJxOwogCiAJcmVzID0gcGxhdGZvcm1f Z2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAliYXNlYWRkciA9IGRldm1f aW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOwpAQCAtNjczLDYgKzkxMiwyOCBAQCBz dGF0aWMgaW50IHN5bnBzX2VkYWNfbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKIAogCWVkYWNfbWNfaW5pdChtY2ksIHBkZXYpOwogCisJaWYgKHByaXYtPnBfZGF0YS0+cXVp cmtzICYgRERSX0VDQ19JTlRSX1NVUFBPUlQpIHsKKwkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShw ZGV2LCAwKTsKKwkJaWYgKGlycSA8IDApIHsKKwkJCWVkYWNfcHJpbnRrKEtFUk5fRVJSLCBFREFD X01DLAorCQkJCQkiTm8gaXJxICVkIGluIERUXG4iLCBpcnEpOworCQkJcmMgPSBpcnE7CisJCQln b3RvIGZyZWVfZWRhY19tYzsKKwkJfQorCisJCXJjID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ ZGV2LCBpcnEsCisJCQlzeW5wc19lZGFjX2ludHJfaGFuZGxlciwKKwkJCTAsIGRldl9uYW1lKCZw ZGV2LT5kZXYpLCBtY2kpOworCQlpZiAocmMgPCAwKSB7CisJCQllZGFjX3ByaW50ayhLRVJOX0VS UiwgRURBQ19NQywgIkZhaWxlZCB0byByZXF1ZXN0IElycVxuIik7CisJCQlnb3RvIGZyZWVfZWRh Y19tYzsKKwkJfQorCisJCS8qIEVuYWJsZSBVRS9DRSBJbnRlcnJ1cHRzICovCisJCXdyaXRlbCgo RERSX1FPU1VFX01BU0sgfCBERFJfUU9TQ0VfTUFTSyksCisJCQlwcml2LT5iYXNlYWRkciArIERE Ul9RT1NfSVJRX0VOX09GU1QpOworCX0KKwogCXJjID0gZWRhY19tY19hZGRfbWMobWNpKTsKIAlp ZiAocmMpIHsKIAkJZWRhY19wcmludGsoS0VSTl9FUlIsIEVEQUNfTUMsCkBAIC02ODQsNyArOTQ1 LDggQEAgc3RhdGljIGludCBzeW5wc19lZGFjX21jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCiAJICogU3RhcnQgY2FwdHVyaW5nIHRoZSBjb3JyZWN0YWJsZSBhbmQgdW5jb3Jy ZWN0YWJsZSBlcnJvcnMuIEEgd3JpdGUgb2YKIAkgKiAwIHN0YXJ0cyB0aGUgY291bnRlcnMuCiAJ ICovCi0Jd3JpdGVsKDB4MCwgYmFzZWFkZHIgKyBFQ0NfQ1RSTF9PRlNUKTsKKwlpZiAoIShwcml2 LT5wX2RhdGEtPnF1aXJrcyAmIEREUl9FQ0NfSU5UUl9TVVBQT1JUKSkKKwkJd3JpdGVsKDB4MCwg YmFzZWFkZHIgKyBFQ0NfQ1RSTF9PRlNUKTsKIAlyZXR1cm4gcmM7CiAKIGZyZWVfZWRhY19tYzoK QEAgLTcwMiw3ICs5NjQsMTMgQEAgc3RhdGljIGludCBzeW5wc19lZGFjX21jX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiBzdGF0aWMgaW50IHN5bnBzX2VkYWNfbWNfcmVtb3Zl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG1lbV9jdGxfaW5mbyAq bWNpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHN5bnBzX2VkYWNfcHJp diAqcHJpdjsKIAorCXByaXYgPSBtY2ktPnB2dF9pbmZvOworCWlmIChwcml2LT5wX2RhdGEtPnF1 aXJrcyAmIEREUl9FQ0NfSU5UUl9TVVBQT1JUKQorCQkvKiBEaXNhYmxlIFVFL0NFIEludGVycnVw dHMgKi8KKwkJd3JpdGVsKChERFJfUU9TVUVfTUFTSyB8IEREUl9RT1NDRV9NQVNLKSwKKwkJCXBy aXYtPmJhc2VhZGRyICsgRERSX1FPU19JUlFfREJfT0ZTVCk7CiAJZWRhY19tY19kZWxfbWMoJnBk ZXYtPmRldik7CiAJZWRhY19tY19mcmVlKG1jaSk7CiAK