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: [v9,4/6] edac: synopsys: Add EDAC ECC support for ZynqMP DDRC From: Manish Narani Message-Id: <1539581388-23963-5-git-send-email-manish.narani@xilinx.com> Date: Mon, 15 Oct 2018 10:59:46 +0530 To: robh+dt@kernel.org, mark.rutland@arm.com, michal.simek@xilinx.com, bp@alien8.de, mchehab@kernel.org, manish.narani@xilinx.com, amit.kucheria@linaro.org, sudeep.holla@arm.com, olof@lixom.net Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-edac@vger.kernel.org List-ID: QWRkIEVEQUMgRUNDIHN1cHBvcnQgZm9yIFp5bnFNUCBERFJDIElQLiBUaGUgSVAgc3VwcG9ydHMg aW50ZXJydXB0cyBmb3IKY29ycmVjdGVkIGFuZCB1bmNvcnJlY3RlZCBlcnJvcnMuIEFkZCBpbnRl cnJ1cHQgaGFuZGxlcnMgZm9yIHRoZSBzYW1lLgoKU2lnbmVkLW9mZi1ieTogTWFuaXNoIE5hcmFu aSA8bWFuaXNoLm5hcmFuaUB4aWxpbnguY29tPgotLS0KIGRyaXZlcnMvZWRhYy9LY29uZmlnICAg ICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZWRhYy9zeW5vcHN5c19lZGFjLmMgfCAzMjQgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQogMiBmaWxlcyBjaGFuZ2VkLCAz MDggaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9l ZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRleCA1NzMwNGIyLi43YzQwZWIy IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvS2NvbmZpZworKysgYi9kcml2ZXJzL2VkYWMvS2Nv bmZpZwpAQCAtNDQxLDcgKzQ0MSw3IEBAIGNvbmZpZyBFREFDX0FMVEVSQV9TRE1NQwogCiBjb25m aWcgRURBQ19TWU5PUFNZUwogCXRyaXN0YXRlICJTeW5vcHN5cyBERFIgTWVtb3J5IENvbnRyb2xs ZXIiCi0JZGVwZW5kcyBvbiBBUkNIX1pZTlEKKwlkZXBlbmRzIG9uIEFSQ0hfWllOUSB8fCBBUkNI X1pZTlFNUAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGVycm9yIGRldGVjdGlvbiBhbmQgY29ycmVj dGlvbiBvbiB0aGUgU3lub3BzeXMgRERSCiAJICBtZW1vcnkgY29udHJvbGxlci4KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZWRhYy9zeW5vcHN5c19lZGFjLmMgYi9kcml2ZXJzL2VkYWMvc3lub3BzeXNf ZWRhYy5jCmluZGV4IGQxOTk5ZTAuLjYwM2M0YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9z eW5vcHN5c19lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL3N5bm9wc3lzX2VkYWMuYwpAQCAtMjIs NiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2VkYWMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51 eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29m X2RldmljZS5oPgogCkBAIC0yNzIsNiArMjczLDggQEAKICAqIEBiYW5rOglCYW5rIG51bWJlci4K ICAqIEBiaXRwb3M6CUJpdCBwb3NpdGlvbi4KICAqIEBkYXRhOglEYXRhIGNhdXNpbmcgdGhlIGVy cm9yLgorICogQGJhbmtncnBucjoJQmFuayBncm91cCBudW1iZXIuCisgKiBAYmxrbnI6CUJsb2Nr IG51bWJlci4KICAqLwogc3RydWN0IGVjY19lcnJvcl9pbmZvIHsKIAl1MzIgcm93OwpAQCAtMjc5 LDYgKzI4Miw4IEBAIHN0cnVjdCBlY2NfZXJyb3JfaW5mbyB7CiAJdTMyIGJhbms7CiAJdTMyIGJp dHBvczsKIAl1MzIgZGF0YTsKKwl1MzIgYmFua2dycG5yOworCXUzMiBibGtucjsKIH07CiAKIC8q KgpAQCAtMzg1LDYgKzM5MCw2NiBAQCBzdGF0aWMgaW50IHp5bnFfZ2V0X2Vycm9yX2luZm8oc3Ry dWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdikKIH0KIAogLyoqCisgKiB6eW5xbXBfZ2V0X2Vycm9y X2luZm8gLSBHZXQgdGhlIGN1cnJlbnQgRUNDIGVycm9yIGluZm8uCisgKiBAcHJpdjoJRERSIG1l bW9yeSBjb250cm9sbGVyIHByaXZhdGUgaW5zdGFuY2UgZGF0YS4KKyAqCisgKiBSZXR1cm46IG9u ZSBpZiB0aGVyZSBpcyBubyBlcnJvciBvdGhlcndpc2UgcmV0dXJucyB6ZXJvLgorICovCitzdGF0 aWMgaW50IHp5bnFtcF9nZXRfZXJyb3JfaW5mbyhzdHJ1Y3Qgc3lucHNfZWRhY19wcml2ICpwcml2 KQoreworCXN0cnVjdCBzeW5wc19lY2Nfc3RhdHVzICpwOworCXUzMiByZWd2YWwsIGNsZWFydmFs ID0gMDsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisKKwliYXNlID0gcHJpdi0+YmFzZWFkZHI7CisJ cCA9ICZwcml2LT5zdGF0OworCisJcmVndmFsID0gcmVhZGwoYmFzZSArIEVDQ19TVEFUX09GU1Qp OworCWlmICghcmVndmFsKQorCQlyZXR1cm4gMTsKKworCXAtPmNlX2NudCA9IChyZWd2YWwgJiBF Q0NfU1RBVF9DRUNOVF9NQVNLKSA+PiBFQ0NfU1RBVF9DRUNOVF9TSElGVDsKKwlwLT51ZV9jbnQg PSAocmVndmFsICYgRUNDX1NUQVRfVUVDTlRfTUFTSykgPj4gRUNDX1NUQVRfVUVDTlRfU0hJRlQ7 CisJcC0+Y2VpbmZvLmJpdHBvcyA9IChyZWd2YWwgJiBFQ0NfU1RBVF9CSVROVU1fTUFTSyk7CisK KwlyZWd2YWwgPSByZWFkbChiYXNlICsgRUNDX0NFQUREUjBfT0ZTVCk7CisJaWYgKCFwLT5jZV9j bnQpCisJCWdvdG8gdWVfZXJyOworCisJcC0+Y2VpbmZvLnJvdyA9IChyZWd2YWwgJiBFQ0NfQ0VB RERSMF9SV19NQVNLKTsKKwlyZWd2YWwgPSByZWFkbChiYXNlICsgRUNDX0NFQUREUjFfT0ZTVCk7 CisJcC0+Y2VpbmZvLmJhbmsgPSAocmVndmFsICYgRUNDX0NFQUREUjFfQk5LTlJfTUFTSykgPj4K KwkJCQkJRUNDX0NFQUREUjFfQk5LTlJfU0hJRlQ7CisJcC0+Y2VpbmZvLmJhbmtncnBuciA9IChy ZWd2YWwgJglFQ0NfQ0VBRERSMV9CTktHUlBfTUFTSykgPj4KKwkJCQkJRUNDX0NFQUREUjFfQk5L R1JQX1NISUZUOworCXAtPmNlaW5mby5ibGtuciA9IChyZWd2YWwgJiBFQ0NfQ0VBRERSMV9CTEtO Ul9NQVNLKTsKKwlwLT5jZWluZm8uZGF0YSA9IHJlYWRsKGJhc2UgKyBFQ0NfQ1NZTkQwX09GU1Qp OworCWVkYWNfZGJnKDIsICJFQ0NDU1lOMDogMHglMDhYIEVDQ0NTWU4xOiAweCUwOFggRUNDQ1NZ TjI6IDB4JTA4WFxuIiwKKwkJIHJlYWRsKGJhc2UgKyBFQ0NfQ1NZTkQwX09GU1QpLCByZWFkbChi YXNlICsgRUNDX0NTWU5EMV9PRlNUKSwKKwkJIHJlYWRsKGJhc2UgKyBFQ0NfQ1NZTkQyX09GU1Qp KTsKK3VlX2VycjoKKwlyZWd2YWwgPSByZWFkbChiYXNlICsgRUNDX1VFQUREUjBfT0ZTVCk7CisJ aWYgKCFwLT51ZV9jbnQpCisJCWdvdG8gb3V0OworCisJcC0+dWVpbmZvLnJvdyA9IChyZWd2YWwg JiBFQ0NfQ0VBRERSMF9SV19NQVNLKTsKKwlyZWd2YWwgPSByZWFkbChiYXNlICsgRUNDX1VFQURE UjFfT0ZTVCk7CisJcC0+dWVpbmZvLmJhbmtncnBuciA9IChyZWd2YWwgJiBFQ0NfQ0VBRERSMV9C TktHUlBfTUFTSykgPj4KKwkJCQkJRUNDX0NFQUREUjFfQk5LR1JQX1NISUZUOworCXAtPnVlaW5m by5iYW5rID0gKHJlZ3ZhbCAmIEVDQ19DRUFERFIxX0JOS05SX01BU0spID4+CisJCQkJCUVDQ19D RUFERFIxX0JOS05SX1NISUZUOworCXAtPnVlaW5mby5ibGtuciA9IChyZWd2YWwgJiBFQ0NfQ0VB RERSMV9CTEtOUl9NQVNLKTsKKwlwLT51ZWluZm8uZGF0YSA9IHJlYWRsKGJhc2UgKyBFQ0NfVUVT WU5EMF9PRlNUKTsKK291dDoKKwljbGVhcnZhbCA9IEVDQ19DVFJMX0NMUl9DRV9FUlIgfCBFQ0Nf Q1RSTF9DTFJfQ0VfRVJSQ05UOworCWNsZWFydmFsIHw9IEVDQ19DVFJMX0NMUl9VRV9FUlIgfCBF Q0NfQ1RSTF9DTFJfVUVfRVJSQ05UOworCXdyaXRlbChjbGVhcnZhbCwgYmFzZSArIEVDQ19DTFJf T0ZTVCk7CisJd3JpdGVsKDB4MCwgYmFzZSArIEVDQ19DTFJfT0ZTVCk7CisKKwlyZXR1cm4gMDsK K30KKworLyoqCiAgKiBoYW5kbGVfZXJyb3IgLSBIYW5kbGUgQ29ycmVjdGFibGUgYW5kIFVuY29y cmVjdGFibGUgZXJyb3JzLgogICogQG1jaToJRURBQyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5j ZS4KICAqIEBwOgkJU3lub3BzeXMgRUNDIHN0YXR1cyBzdHJ1Y3R1cmUuCkBAIC0zOTgsOSArNDYz LDI1IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9lcnJvcihzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ks IHN0cnVjdCBzeW5wc19lY2Nfc3RhdHVzICpwKQogCiAJaWYgKHAtPmNlX2NudCkgewogCQlwaW5m ID0gJnAtPmNlaW5mbzsKLQkJc25wcmludGYocHJpdi0+bWVzc2FnZSwgU1lOUFNfRURBQ19NU0df U0laRSwKLQkJCSAiRERSIEVDQyBlcnJvciB0eXBlIDolcyBSb3cgJWQgQmFuayAlZCBDb2wgJWQg IiwKLQkJCSAiQ0UiLCBwaW5mLT5yb3csIHBpbmYtPmJhbmssIHBpbmYtPmNvbCk7CisJCWlmICgh cHJpdi0+cF9kYXRhLT5xdWlya3MpIHsKKwkJCXNucHJpbnRmKHByaXYtPm1lc3NhZ2UsIFNZTlBT X0VEQUNfTVNHX1NJWkUsCisJCQkJICJERFIgRUNDIGVycm9yIHR5cGU6JXMgUm93ICVkIEJhbmsg JWQgQ29sICVkICIsCisJCQkJICAiQ0UiLCBwaW5mLT5yb3csIHBpbmYtPmJhbmssIHBpbmYtPmNv bCk7CisJCQlzbnByaW50Zihwcml2LT5tZXNzYWdlLCBTWU5QU19FREFDX01TR19TSVpFLAorCQkJ CSAiQml0IFBvc2l0aW9uOiAlZCBEYXRhOiAweCUwOHhcbiIsCisJCQkJIHBpbmYtPmJpdHBvcywg cGluZi0+ZGF0YSk7CisJCX0gZWxzZSB7CisJCQlzbnByaW50Zihwcml2LT5tZXNzYWdlLCBTWU5Q U19FREFDX01TR19TSVpFLAorCQkJCSAiRERSIEVDQyBlcnJvciB0eXBlOiVzIFJvdyAlZCBCYW5r ICVkIENvbCAlZCAiLAorCQkJCSAgIkNFIiwgcGluZi0+cm93LCBwaW5mLT5iYW5rLCBwaW5mLT5j b2wpOworCQkJc25wcmludGYocHJpdi0+bWVzc2FnZSwgU1lOUFNfRURBQ19NU0dfU0laRSwKKwkJ CQkgIkJhbmtHcm91cCBOdW1iZXIgJWQgQmxvY2sgTnVtYmVyICVkICIsCisJCQkJIHBpbmYtPmJh bmtncnBuciwgcGluZi0+YmxrbnIpOworCQkJc25wcmludGYocHJpdi0+bWVzc2FnZSwgU1lOUFNf RURBQ19NU0dfU0laRSwKKwkJCQkgIkJpdCBQb3NpdGlvbjogJWQgRGF0YTogMHglMDh4XG4iLAor CQkJCSBwaW5mLT5iaXRwb3MsIHBpbmYtPmRhdGEpOworCQl9CisKIAkJZWRhY19tY19oYW5kbGVf ZXJyb3IoSFdfRVZFTlRfRVJSX0NPUlJFQ1RFRCwgbWNpLAogCQkJCSAgICAgcC0+Y2VfY250LCAw LCAwLCAwLCAwLCAwLCAtMSwKIAkJCQkgICAgIHByaXYtPm1lc3NhZ2UsICIiKTsKQEAgLTQwOCw5 ICs0ODksMTkgQEAgc3RhdGljIHZvaWQgaGFuZGxlX2Vycm9yKHN0cnVjdCBtZW1fY3RsX2luZm8g Km1jaSwgc3RydWN0IHN5bnBzX2VjY19zdGF0dXMgKnApCiAKIAlpZiAocC0+dWVfY250KSB7CiAJ CXBpbmYgPSAmcC0+dWVpbmZvOwotCQlzbnByaW50Zihwcml2LT5tZXNzYWdlLCBTWU5QU19FREFD X01TR19TSVpFLAotCQkJICJERFIgRUNDIGVycm9yIHR5cGUgOiVzIFJvdyAlZCBCYW5rICVkIENv bCAlZCAiLAotCQkJICJVRSIsIHBpbmYtPnJvdywgcGluZi0+YmFuaywgcGluZi0+Y29sKTsKKwkJ aWYgKCFwcml2LT5wX2RhdGEtPnF1aXJrcykgeworCQkJc25wcmludGYocHJpdi0+bWVzc2FnZSwg U1lOUFNfRURBQ19NU0dfU0laRSwKKwkJCQkgIkREUiBFQ0MgZXJyb3IgdHlwZSA6JXMgUm93ICVk IEJhbmsgJWQgQ29sICVkICIsCisJCQkJIlVFIiwgcGluZi0+cm93LCBwaW5mLT5iYW5rLCBwaW5m LT5jb2wpOworCQl9IGVsc2UgeworCQkJc25wcmludGYocHJpdi0+bWVzc2FnZSwgU1lOUFNfRURB Q19NU0dfU0laRSwKKwkJCQkgIkREUiBFQ0MgZXJyb3IgdHlwZSA6JXMgUm93ICVkIEJhbmsgJWQg Q29sICVkICIsCisJCQkJICJVRSIsIHBpbmYtPnJvdywgcGluZi0+YmFuaywgcGluZi0+Y29sKTsK KwkJCXNucHJpbnRmKHByaXYtPm1lc3NhZ2UsIFNZTlBTX0VEQUNfTVNHX1NJWkUsCisJCQkJICJC YW5rR3JvdXAgTnVtYmVyICVkIEJsb2NrIE51bWJlciAlZCIsCisJCQkJIHBpbmYtPmJhbmtncnBu ciwgcGluZi0+YmxrbnIpOworCQl9CisKIAkJZWRhY19tY19oYW5kbGVfZXJyb3IoSFdfRVZFTlRf RVJSX1VOQ09SUkVDVEVELCBtY2ksCiAJCQkJICAgICBwLT51ZV9jbnQsIDAsIDAsIDAsIDAsIDAs IC0xLAogCQkJCSAgICAgcHJpdi0+bWVzc2FnZSwgIiIpOwpAQCAtNDIwLDYgKzUxMSw0MiBAQCBz dGF0aWMgdm9pZCBoYW5kbGVfZXJyb3Ioc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCBzdHJ1Y3Qg c3lucHNfZWNjX3N0YXR1cyAqcCkKIH0KIAogLyoqCisgKiBpbnRyX2hhbmRsZXIgLSBJbnRlcnJ1 cHQgSGFuZGxlciBmb3IgRUNDIGludGVycnVwdHMuCisgKiBAaXJxOiAgICAgICAgSVJRIG51bWJl ci4KKyAqIEBkZXZfaWQ6ICAgICBEZXZpY2UgSUQuCisgKgorICogUmV0dXJuOiBJUlFfTk9ORSwg aWYgaW50ZXJydXB0IG5vdCBzZXQgb3IgSVJRX0hBTkRMRUQgb3RoZXJ3aXNlLgorICovCitzdGF0 aWMgaXJxcmV0dXJuX3QgaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlj b25zdCBzdHJ1Y3Qgc3lucHNfcGxhdGZvcm1fZGF0YSAqcF9kYXRhOworCXN0cnVjdCBtZW1fY3Rs X2luZm8gKm1jaSA9IGRldl9pZDsKKwlzdHJ1Y3Qgc3lucHNfZWRhY19wcml2ICpwcml2OworCWlu dCBzdGF0dXMsIHJlZ3ZhbDsKKworCXByaXYgPSBtY2ktPnB2dF9pbmZvOworCXBfZGF0YSA9IHBy aXYtPnBfZGF0YTsKKworCXJlZ3ZhbCA9IHJlYWRsKHByaXYtPmJhc2VhZGRyICsgRERSX1FPU19J UlFfU1RBVF9PRlNUKTsKKwlyZWd2YWwgJj0gKEREUl9RT1NDRV9NQVNLIHwgRERSX1FPU1VFX01B U0spOworCWlmICghKHJlZ3ZhbCAmIEVDQ19DRV9VRV9JTlRSX01BU0spKQorCQlyZXR1cm4gSVJR X05PTkU7CisKKwlzdGF0dXMgPSBwX2RhdGEtPmdldF9lcnJvcl9pbmZvKHByaXYpOworCWlmIChz dGF0dXMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXByaXYtPmNlX2NudCArPSBwcml2LT5zdGF0 LmNlX2NudDsKKwlwcml2LT51ZV9jbnQgKz0gcHJpdi0+c3RhdC51ZV9jbnQ7CisJaGFuZGxlX2Vy cm9yKG1jaSwgJnByaXYtPnN0YXQpOworCisJZWRhY19kYmcoMywgIlRvdGFsIGVycm9yIGNvdW50 IENFICVkIFVFICVkXG4iLAorCQkgcHJpdi0+Y2VfY250LCBwcml2LT51ZV9jbnQpOworCXdyaXRl bChyZWd2YWwsIHByaXYtPmJhc2VhZGRyICsgRERSX1FPU19JUlFfU1RBVF9PRlNUKTsKKwlyZXR1 cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgogICogY2hlY2tfZXJyb3JzIC0gQ2hlY2sgY29udHJv bGxlciBmb3IgRUNDIGVycm9ycy4KICAqIEBtY2k6CUVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5z dGFuY2UuCiAgKgpAQCAtNDI3LDEwICs1NTQsMTMgQEAgc3RhdGljIHZvaWQgaGFuZGxlX2Vycm9y KHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwgc3RydWN0IHN5bnBzX2VjY19zdGF0dXMgKnApCiAg Ki8KIHN0YXRpYyB2b2lkIGNoZWNrX2Vycm9ycyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kpCiB7 Ci0Jc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdiA9IG1jaS0+cHZ0X2luZm87Ci0JY29uc3Qg c3RydWN0IHN5bnBzX3BsYXRmb3JtX2RhdGEgKnBfZGF0YSA9IHByaXYtPnBfZGF0YTsKKwljb25z dCBzdHJ1Y3Qgc3lucHNfcGxhdGZvcm1fZGF0YSAqcF9kYXRhOworCXN0cnVjdCBzeW5wc19lZGFj X3ByaXYgKnByaXY7CiAJaW50IHN0YXR1czsKIAorCXByaXYgPSBtY2ktPnB2dF9pbmZvOworCXBf ZGF0YSA9IHByaXYtPnBfZGF0YTsKKwogCXN0YXR1cyA9IHBfZGF0YS0+Z2V0X2Vycm9yX2luZm8o cHJpdik7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuOwpAQCAtNDc1LDYgKzYwNSwzOSBAQCBzdGF0 aWMgZW51bSBkZXZfdHlwZSB6eW5xX2dldF9kdHlwZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2Up CiB9CiAKIC8qKgorICogenlucW1wX2dldF9kdHlwZSAtIFJldHVybiB0aGUgY29udHJvbGxlciBt ZW1vcnkgd2lkdGguCisgKiBAYmFzZToJRERSIG1lbW9yeSBjb250cm9sbGVyIGJhc2UgYWRkcmVz cy4KKyAqCisgKiBHZXQgdGhlIEVEQUMgZGV2aWNlIHR5cGUgd2lkdGggYXBwcm9wcmlhdGUgZm9y IHRoZSBjdXJyZW50IGNvbnRyb2xsZXIKKyAqIGNvbmZpZ3VyYXRpb24uCisgKgorICogUmV0dXJu OiBhIGRldmljZSB0eXBlIHdpZHRoIGVudW1lcmF0aW9uLgorICovCitzdGF0aWMgZW51bSBkZXZf dHlwZSB6eW5xbXBfZ2V0X2R0eXBlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwllbnVt IGRldl90eXBlIGR0OworCXUzMiB3aWR0aDsKKworCXdpZHRoID0gcmVhZGwoYmFzZSArIENUUkxf T0ZTVCk7CisJd2lkdGggPSAod2lkdGggJiBFQ0NfQ1RSTF9CVVNXSURUSF9NQVNLKSA+PiBFQ0Nf Q1RSTF9CVVNXSURUSF9TSElGVDsKKwlzd2l0Y2ggKHdpZHRoKSB7CisJY2FzZSBERFJDVExfRVdE VEhfMTY6CisJCWR0ID0gREVWX1gyOworCQlicmVhazsKKwljYXNlIEREUkNUTF9FV0RUSF8zMjoK KwkJZHQgPSBERVZfWDQ7CisJCWJyZWFrOworCWNhc2UgRERSQ1RMX0VXRFRIXzY0OgorCQlkdCA9 IERFVl9YODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHQgPSBERVZfVU5LTk9XTjsKKwl9CisK KwlyZXR1cm4gZHQ7Cit9CisKKy8qKgogICogenlucV9nZXRfZWNjX3N0YXRlIC0gUmV0dXJuIHRo ZSBjb250cm9sbGVyIEVDQyBlbmFibGUvZGlzYWJsZSBzdGF0dXMuCiAgKiBAYmFzZToJRERSIG1l bW9yeSBjb250cm9sbGVyIGJhc2UgYWRkcmVzcy4KICAqCkBAIC00ODQsMTkgKzY0Nyw0MyBAQCBz dGF0aWMgZW51bSBkZXZfdHlwZSB6eW5xX2dldF9kdHlwZShjb25zdCB2b2lkIF9faW9tZW0gKmJh c2UpCiAgKi8KIHN0YXRpYyBib29sIHp5bnFfZ2V0X2VjY19zdGF0ZSh2b2lkIF9faW9tZW0gKmJh c2UpCiB7Ci0JYm9vbCBzdGF0ZSA9IGZhbHNlOwogCWVudW0gZGV2X3R5cGUgZHQ7CiAJdTMyIGVj Y3R5cGU7CiAKIAlkdCA9IHp5bnFfZ2V0X2R0eXBlKGJhc2UpOwogCWlmIChkdCA9PSBERVZfVU5L Tk9XTikKLQkJcmV0dXJuIHN0YXRlOworCQlyZXR1cm4gZmFsc2U7CiAKIAllY2N0eXBlID0gcmVh ZGwoYmFzZSArIFNDUlVCX09GU1QpICYgU0NSVUJfTU9ERV9NQVNLOwogCWlmICgoZWNjdHlwZSA9 PSBTQ1JVQl9NT0RFX1NFQ0RFRCkgJiYgKGR0ID09IERFVl9YMikpCi0JCXN0YXRlID0gdHJ1ZTsK KwkJcmV0dXJuIHRydWU7CiAKLQlyZXR1cm4gc3RhdGU7CisJcmV0dXJuIGZhbHNlOworfQorCisv KioKKyAqIHp5bnFtcF9nZXRfZWNjX3N0YXRlIC0gUmV0dXJuIHRoZSBjb250cm9sbGVyIEVDQyBl bmFibGUvZGlzYWJsZSBzdGF0dXMuCisgKiBAYmFzZToJRERSIG1lbW9yeSBjb250cm9sbGVyIGJh c2UgYWRkcmVzcy4KKyAqCisgKiBHZXQgdGhlIEVDQyBlbmFibGUvZGlzYWJsZSBzdGF0dXMgZm9y IHRoZSBjb250cm9sbGVyLgorICoKKyAqIFJldHVybjogYSBFQ0Mgc3RhdHVzIGJvb2xlYW4gaS5l IHRydWUvZmFsc2UgLSBlbmFibGVkL2Rpc2FibGVkLgorICovCitzdGF0aWMgYm9vbCB6eW5xbXBf Z2V0X2VjY19zdGF0ZSh2b2lkIF9faW9tZW0gKmJhc2UpCit7CisJZW51bSBkZXZfdHlwZSBkdDsK Kwl1MzIgZWNjdHlwZTsKKworCWR0ID0genlucW1wX2dldF9kdHlwZShiYXNlKTsKKwlpZiAoZHQg PT0gREVWX1VOS05PV04pCisJCXJldHVybiBmYWxzZTsKKworCWVjY3R5cGUgPSByZWFkbChiYXNl ICsgRUNDX0NGRzBfT0ZTVCkgJiBTQ1JVQl9NT0RFX01BU0s7CisJaWYgKChlY2N0eXBlID09IFND UlVCX01PREVfU0VDREVEKSAmJgorCSAgICAoKGR0ID09IERFVl9YMikgfHwgKGR0ID09IERFVl9Y NCkgfHwgKGR0ID09IERFVl9YOCkpKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsK IH0KIAogLyoqCkBAIC01MzgsNiArNzI1LDM0IEBAIHN0YXRpYyBlbnVtIG1lbV90eXBlIHp5bnFf Z2V0X210eXBlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZSkKIH0KIAogLyoqCisgKiB6eW5xbXBf Z2V0X210eXBlIC0gUmV0dXJucyBjb250cm9sbGVyIG1lbW9yeSB0eXBlLgorICogQGJhc2U6CVN5 bm9wc3lzIEVDQyBzdGF0dXMgc3RydWN0dXJlLgorICoKKyAqIEdldCB0aGUgRURBQyBtZW1vcnkg dHlwZSBhcHByb3ByaWF0ZSBmb3IgdGhlIGN1cnJlbnQgY29udHJvbGxlcgorICogY29uZmlndXJh dGlvbi4KKyAqCisgKiBSZXR1cm46IGEgbWVtb3J5IHR5cGUgZW51bWVyYXRpb24uCisgKi8KK3N0 YXRpYyBlbnVtIG1lbV90eXBlIHp5bnFtcF9nZXRfbXR5cGUoY29uc3Qgdm9pZCBfX2lvbWVtICpi YXNlKQoreworCWVudW0gbWVtX3R5cGUgbXQ7CisJdTMyIG1lbXR5cGU7CisKKwltZW10eXBlID0g cmVhZGwoYmFzZSArIENUUkxfT0ZTVCk7CisKKwlpZiAoKG1lbXR5cGUgJiBNRU1fVFlQRV9ERFIz KSB8fCAobWVtdHlwZSAmIE1FTV9UWVBFX0xQRERSMykpCisJCW10ID0gTUVNX0REUjM7CisJZWxz ZSBpZiAobWVtdHlwZSAmIE1FTV9UWVBFX0REUjIpCisJCW10ID0gTUVNX1JERFIyOworCWVsc2Ug aWYgKChtZW10eXBlICYgTUVNX1RZUEVfTFBERFI0KSB8fCAobWVtdHlwZSAmIE1FTV9UWVBFX0RE UjQpKQorCQltdCA9IE1FTV9ERFI0OworCWVsc2UKKwkJbXQgPSBNRU1fRU1QVFk7CisKKwlyZXR1 cm4gbXQ7Cit9CisKKy8qKgogICogaW5pdF9jc3Jvd3MgLSBJbml0aWFsaXplIHRoZSBjc3JvdyBk YXRhLgogICogQG1jaToJRURBQyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZS4KICAqCkBAIC01 OTgsMTMgKzgxMyw1NyBAQCBzdGF0aWMgdm9pZCBtY19pbml0KHN0cnVjdCBtZW1fY3RsX2luZm8g Km1jaSwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAltY2ktPmRldl9uYW1lID0gU1lO UFNfRURBQ19NT0RfU1RSSU5HOwogCW1jaS0+bW9kX25hbWUgPSBTWU5QU19FREFDX01PRF9WRVI7 CiAKLQllZGFjX29wX3N0YXRlID0gRURBQ19PUFNUQVRFX1BPTEw7Ci0JbWNpLT5lZGFjX2NoZWNr ID0gY2hlY2tfZXJyb3JzOworCWlmIChwcml2LT5wX2RhdGEtPnF1aXJrcyAmIEREUl9FQ0NfSU5U Ul9TVVBQT1JUKSB7CisJCWVkYWNfb3Bfc3RhdGUgPSBFREFDX09QU1RBVEVfSU5UOworCX0gZWxz ZSB7CisJCWVkYWNfb3Bfc3RhdGUgPSBFREFDX09QU1RBVEVfUE9MTDsKKwkJbWNpLT5lZGFjX2No ZWNrID0gY2hlY2tfZXJyb3JzOworCX0KKwogCW1jaS0+Y3RsX3BhZ2VfdG9fcGh5cyA9IE5VTEw7 CiAKIAlpbml0X2Nzcm93cyhtY2kpOwogfQogCitzdGF0aWMgdm9pZCBlbmFibGVfaW50cihzdHJ1 Y3Qgc3lucHNfZWRhY19wcml2ICpwcml2KQoreworCS8qIEVuYWJsZSBVRS9DRSBJbnRlcnJ1cHRz ICovCisJd3JpdGVsKEREUl9RT1NVRV9NQVNLIHwgRERSX1FPU0NFX01BU0ssCisJCQlwcml2LT5i YXNlYWRkciArIEREUl9RT1NfSVJRX0VOX09GU1QpOworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxl X2ludHIoc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdikKK3sKKwkvKiBEaXNhYmxlIFVFL0NF IEludGVycnVwdHMgKi8KKwl3cml0ZWwoRERSX1FPU1VFX01BU0sgfCBERFJfUU9TQ0VfTUFTSywK KwkJCXByaXYtPmJhc2VhZGRyICsgRERSX1FPU19JUlFfREJfT0ZTVCk7Cit9CisKK3N0YXRpYyBp bnQgc2V0dXBfaXJxKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKKwkJCSAgc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3lucHNfZWRhY19wcml2ICpwcml2ID0gbWNp LT5wdnRfaW5mbzsKKwlpbnQgcmV0LCBpcnE7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBk ZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWVkYWNfcHJpbnRrKEtFUk5fRVJSLCBFREFDX01D LAorCQkJICAgICJObyBJUlEgJWQgaW4gRFRcbiIsIGlycSk7CisJCXJldHVybiBpcnE7CisJfQor CisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnEsIGludHJfaGFuZGxlciwK KwkJCSAgICAgICAwLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgbWNpKTsKKwlpZiAocmV0IDwgMCkg eworCQllZGFjX3ByaW50ayhLRVJOX0VSUiwgRURBQ19NQywgIkZhaWxlZCB0byByZXF1ZXN0IElS UVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZW5hYmxlX2ludHIocHJpdik7CisKKwlyZXR1 cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzeW5wc19wbGF0Zm9ybV9kYXRhIHp5bnFf ZWRhY19kZWYgPSB7CiAJLmdldF9lcnJvcl9pbmZvCT0genlucV9nZXRfZXJyb3JfaW5mbywKIAku Z2V0X210eXBlCT0genlucV9nZXRfbXR5cGUsCkBAIC02MTMsOSArODcyLDI2IEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3Qgc3lucHNfcGxhdGZvcm1fZGF0YSB6eW5xX2VkYWNfZGVmID0gewogCS5xdWly a3MJCT0gMCwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lucHNfcGxhdGZvcm1fZGF0YSB6 eW5xbXBfZWRhY19kZWYgPSB7CisJLmdldF9lcnJvcl9pbmZvCT0genlucW1wX2dldF9lcnJvcl9p bmZvLAorCS5nZXRfbXR5cGUJPSB6eW5xbXBfZ2V0X210eXBlLAorCS5nZXRfZHR5cGUJPSB6eW5x bXBfZ2V0X2R0eXBlLAorCS5nZXRfZWNjX3N0YXRlCT0genlucW1wX2dldF9lY2Nfc3RhdGUsCisJ LnF1aXJrcwkJPSBERFJfRUNDX0lOVFJfU1VQUE9SVCwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIHN5bnBzX2VkYWNfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRpYmxlID0g InhsbngsenlucS1kZHJjLWEwNSIsIC5kYXRhID0gKHZvaWQgKikmenlucV9lZGFjX2RlZiB9LAot CXsgLyogZW5kIG9mIHRhYmxlICovIH0KKwl7CisJCS5jb21wYXRpYmxlID0gInhsbngsenlucS1k ZHJjLWEwNSIsCisJCS5kYXRhID0gKHZvaWQgKikmenlucV9lZGFjX2RlZgorCX0sCisJeworCQku Y29tcGF0aWJsZSA9ICJ4bG54LHp5bnFtcC1kZHJjLTIuNDBhIiwKKwkJLmRhdGEgPSAodm9pZCAq KSZ6eW5xbXBfZWRhY19kZWYKKwl9LAorCXsKKwkJLyogZW5kIG9mIHRhYmxlICovCisJfQogfTsK IAogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc3lucHNfZWRhY19tYXRjaCk7CkBAIC02NzQsNiAr OTUwLDEyIEBAIHN0YXRpYyBpbnQgbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKIAogCW1jX2luaXQobWNpLCBwZGV2KTsKIAorCWlmIChwcml2LT5wX2RhdGEtPnF1aXJrcyAm IEREUl9FQ0NfSU5UUl9TVVBQT1JUKSB7CisJCXJjID0gc2V0dXBfaXJxKG1jaSwgcGRldik7CisJ CWlmIChyYykKKwkJCWdvdG8gZnJlZV9lZGFjX21jOworCX0KKwogCXJjID0gZWRhY19tY19hZGRf bWMobWNpKTsKIAlpZiAocmMpIHsKIAkJZWRhY19wcmludGsoS0VSTl9FUlIsIEVEQUNfTUMsCkBA IC02ODUsNyArOTY3LDkgQEAgc3RhdGljIGludCBtY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQogCSAqIFN0YXJ0IGNhcHR1cmluZyB0aGUgY29ycmVjdGFibGUgYW5kIHVuY29y cmVjdGFibGUgZXJyb3JzLiBBIHdyaXRlIG9mCiAJICogMCBzdGFydHMgdGhlIGNvdW50ZXJzLgog CSAqLwotCXdyaXRlbCgweDAsIGJhc2VhZGRyICsgRUNDX0NUUkxfT0ZTVCk7CisJaWYgKCEocHJp di0+cF9kYXRhLT5xdWlya3MgJiBERFJfRUNDX0lOVFJfU1VQUE9SVCkpCisJCXdyaXRlbCgweDAs IGJhc2VhZGRyICsgRUNDX0NUUkxfT0ZTVCk7CisKIAlyZXR1cm4gcmM7CiAKIGZyZWVfZWRhY19t YzoKQEAgLTcwMyw2ICs5ODcsMTIgQEAgc3RhdGljIGludCBtY19wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQogc3RhdGljIGludCBtY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kgPSBwbGF0Zm9ybV9nZXRf ZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc3lucHNfZWRhY19wcml2ICpwcml2OworCisJcHJpdiA9 IG1jaS0+cHZ0X2luZm87CisKKwlpZiAocHJpdi0+cF9kYXRhLT5xdWlya3MgJiBERFJfRUNDX0lO VFJfU1VQUE9SVCkKKwkJZGlzYWJsZV9pbnRyKHByaXYpOwogCiAJZWRhY19tY19kZWxfbWMoJnBk ZXYtPmRldik7CiAJZWRhY19tY19mcmVlKG1jaSk7Cg==