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,7/7] edac: synopsys: Add Error Injection support for ZynqMP DDRC From: Manish Narani Message-Id: <1537194305-9243-8-git-send-email-manish.narani@xilinx.com> Date: Mon, 17 Sep 2018 19:55:05 +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: QWRkIHN1cHBvcnQgZm9yIEVycm9yIEluamVjdGlvbiBmb3IgWnlucU1QIEREUkMgSVAuIEZvciBp bmplY3RpbmcKZXJyb3JzLCB0aGUgUm93LCBDb2x1bW4sIEJhbmssIEJhbmsgR3JvdXAgYW5kIFJh bmsgYml0cyBwb3NpdGlvbnMgYXJlCmRldGVybWluZWQgdmlhIEFkZHJlc3MgTWFwIHJlZ2lzdGVy cyBvZiBTeW5vcHN5cyBERFJDLgoKU2lnbmVkLW9mZi1ieTogTWFuaXNoIE5hcmFuaSA8bWFuaXNo Lm5hcmFuaUB4aWxpbnguY29tPgotLS0KIGRyaXZlcnMvZWRhYy9zeW5vcHN5c19lZGFjLmMgfCA0 MjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxlIGNo YW5nZWQsIDQxNyBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZWRhYy9zeW5vcHN5c19lZGFjLmMgYi9kcml2ZXJzL2VkYWMvc3lub3BzeXNfZWRhYy5j CmluZGV4IDdhYjViOWEuLjE3N2I1YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9zeW5vcHN5 c19lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL3N5bm9wc3lzX2VkYWMuYwpAQCAtMzAyLDEyICsz MDIsMTggQEAgc3RydWN0IHN5bnBzX2VjY19zdGF0dXMgewogCiAvKioKICAqIHN0cnVjdCBzeW5w c19lZGFjX3ByaXYgLSBERFIgbWVtb3J5IGNvbnRyb2xsZXIgcHJpdmF0ZSBpbnN0YW5jZSBkYXRh LgotICogQGJhc2VhZGRyOglCYXNlIGFkZHJlc3Mgb2YgdGhlIEREUiBjb250cm9sbGVyLgotICog QG1lc3NhZ2U6CUJ1ZmZlciBmb3IgZnJhbWluZyB0aGUgZXZlbnQgc3BlY2lmaWMgaW5mby4KLSAq IEBzdGF0OglFQ0Mgc3RhdHVzIGluZm9ybWF0aW9uLgotICogQHBfZGF0YToJUGxhdGZvcm0gZGF0 YQotICogQGNlX2NudDoJQ29ycmVjdGFibGUgRXJyb3IgY291bnQuCi0gKiBAdWVfY250OglVbmNv cnJlY3RhYmxlIEVycm9yIGNvdW50LgorICogQGJhc2VhZGRyOgkJQmFzZSBhZGRyZXNzIG9mIHRo ZSBERFIgY29udHJvbGxlci4KKyAqIEBtZXNzYWdlOgkJQnVmZmVyIGZvciBmcmFtaW5nIHRoZSBl dmVudCBzcGVjaWZpYyBpbmZvLgorICogQHN0YXQ6CQlFQ0Mgc3RhdHVzIGluZm9ybWF0aW9uLgor ICogQHBfZGF0YToJCVBsYXRmb3JtIGRhdGEKKyAqIEBjZV9jbnQ6CQlDb3JyZWN0YWJsZSBFcnJv ciBjb3VudC4KKyAqIEB1ZV9jbnQ6CQlVbmNvcnJlY3RhYmxlIEVycm9yIGNvdW50LgorICogQHBv aXNvbl9hZGRyOglEYXRhIHBvaXNvbiBhZGRyZXNzLgorICogQHJvd19zaGlmdDoJCUJpdCBzaGlm dHMgZm9yIHJvdyBiaXQuCisgKiBAY29sX3NoaWZ0OgkJQml0IHNoaWZ0cyBmb3IgY29sdW1uIGJp dC4KKyAqIEBiYW5rX3NoaWZ0OgkJQml0IHNoaWZ0cyBmb3IgYmFuayBiaXQuCisgKiBAYmFua2dy cF9zaGlmdDoJQml0IHNoaWZ0cyBmb3IgYmFuayBncm91cCBiaXQuCisgKiBAcmFua19zaGlmdDoJ CUJpdCBzaGlmdHMgZm9yIHJhbmsgYml0LgogICovCiBzdHJ1Y3Qgc3lucHNfZWRhY19wcml2IHsK IAl2b2lkIF9faW9tZW0gKmJhc2VhZGRyOwpAQCAtMzE2LDYgKzMyMiwxNCBAQCBzdHJ1Y3Qgc3lu cHNfZWRhY19wcml2IHsKIAljb25zdCBzdHJ1Y3Qgc3lucHNfcGxhdGZvcm1fZGF0YSAqcF9kYXRh OwogCXUzMiBjZV9jbnQ7CiAJdTMyIHVlX2NudDsKKyNpZmRlZiBDT05GSUdfRURBQ19ERUJVRwor CXVsb25nIHBvaXNvbl9hZGRyOworCXUzMiByb3dfc2hpZnRbMThdOworCXUzMiBjb2xfc2hpZnRb MTRdOworCXUzMiBiYW5rX3NoaWZ0WzNdOworCXUzMiBiYW5rZ3JwX3NoaWZ0WzJdOworCXUzMiBy YW5rX3NoaWZ0WzFdOworI2VuZGlmCiB9OwogCiAvKioKQEAgLTg0Miw3ICs4NTYsMTIgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBzeW5wc19wbGF0Zm9ybV9kYXRhIHp5bnFtcF9lZGFjX2RlZiA9IHsK IAkuZ2V0X210eXBlCT0genlucW1wX2dldF9tdHlwZSwKIAkuZ2V0X2R0eXBlCT0genlucW1wX2dl dF9kdHlwZSwKIAkuZ2V0X2VjY3N0YXRlCT0genlucW1wX2dldF9lY2NzdGF0ZSwKKyNpZmRlZiBD T05GSUdfRURBQ19ERUJVRworCS5xdWlya3MJCT0gKEREUl9FQ0NfSU5UUl9TVVBQT1JUIHwKKwkJ CSAgIEREUl9FQ0NfREFUQV9QT0lTT05fU1VQUE9SVCksCisjZWxzZQogCS5xdWlya3MJCT0gRERS X0VDQ19JTlRSX1NVUFBPUlQsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkIHN5bnBzX2VkYWNfbWF0Y2hbXSA9IHsKQEAgLTg2MSw2ICs4ODAsMzgwIEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN5bnBzX2VkYWNfbWF0Y2hbXSA9IHsKIAog TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc3lucHNfZWRhY19tYXRjaCk7CiAKKyNpZmRlZiBDT05G SUdfRURBQ19ERUJVRworI2RlZmluZSB0b19tY2koaykgY29udGFpbmVyX29mKGssIHN0cnVjdCBt ZW1fY3RsX2luZm8sIGRldikKKworLyoqCisgKiBkZHJfcG9pc29uX3NldHVwIC0JVXBkYXRlIHBv aXNvbiByZWdpc3RlcnMuCisgKiBAcHJpdjoJCUREUiBtZW1vcnkgY29udHJvbGxlciBwcml2YXRl IGluc3RhbmNlIGRhdGEuCisgKgorICogVXBkYXRlIHBvaXNvbiByZWdpc3RlcnMgYXMgcGVyIERE UiBtYXBwaW5nLgorICogUmV0dXJuOiBub25lLgorICovCitzdGF0aWMgdm9pZCBkZHJfcG9pc29u X3NldHVwKHN0cnVjdCBzeW5wc19lZGFjX3ByaXYgKnByaXYpCit7CisJaW50IGNvbCA9IDAsIHJv dyA9IDAsIGJhbmsgPSAwLCBiYW5rZ3JwID0gMCwgcmFuayA9IDAsIHJlZ3ZhbDsKKwlpbnQgaW5k ZXg7CisJdWxvbmcgaGlmX2FkZHIgPSAwOworCisJaGlmX2FkZHIgPSBwcml2LT5wb2lzb25fYWRk ciA+PiAzOworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgRERSX01BWF9ST1dfU0hJRlQ7IGlu ZGV4KyspIHsKKwkJaWYgKHByaXYtPnJvd19zaGlmdFtpbmRleF0pCisJCQlyb3cgfD0gKCgoaGlm X2FkZHIgPj4gcHJpdi0+cm93X3NoaWZ0W2luZGV4XSkgJgorCQkJCQkJQklUKDApKSA8PCBpbmRl eCk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IERE Ul9NQVhfQ09MX1NISUZUOyBpbmRleCsrKSB7CisJCWlmIChwcml2LT5jb2xfc2hpZnRbaW5kZXhd IHx8IGluZGV4IDwgMykKKwkJCWNvbCB8PSAoKChoaWZfYWRkciA+PiBwcml2LT5jb2xfc2hpZnRb aW5kZXhdKSAmCisJCQkJCQlCSVQoMCkpIDw8IGluZGV4KTsKKwkJZWxzZQorCQkJYnJlYWs7CisJ fQorCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgRERSX01BWF9CQU5LX1NISUZUOyBpbmRleCsr KSB7CisJCWlmIChwcml2LT5iYW5rX3NoaWZ0W2luZGV4XSkKKwkJCWJhbmsgfD0gKCgoaGlmX2Fk ZHIgPj4gcHJpdi0+YmFua19zaGlmdFtpbmRleF0pICYKKwkJCQkJCUJJVCgwKSkgPDwgaW5kZXgp OworCQllbHNlCisJCQlicmVhazsKKwl9CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBERFJf TUFYX0JBTktHUlBfU0hJRlQ7IGluZGV4KyspIHsKKwkJaWYgKHByaXYtPmJhbmtncnBfc2hpZnRb aW5kZXhdKQorCQkJYmFua2dycCB8PSAoKChoaWZfYWRkciA+PiBwcml2LT5iYW5rZ3JwX3NoaWZ0 W2luZGV4XSkKKwkJCQkJCSYgQklUKDApKSA8PCBpbmRleCk7CisJCWVsc2UKKwkJCWJyZWFrOwor CX0KKworCWlmIChwcml2LT5yYW5rX3NoaWZ0WzBdKQorCQlyYW5rID0gKGhpZl9hZGRyID4+IHBy aXYtPnJhbmtfc2hpZnRbMF0pICYgQklUKDApOworCisJcmVndmFsID0gKHJhbmsgPDwgRUNDX1BP SVNPTjBfUkFOS19TSElGVCkgJiBFQ0NfUE9JU09OMF9SQU5LX01BU0s7CisJcmVndmFsIHw9IChj b2wgPDwgRUNDX1BPSVNPTjBfQ09MVU1OX1NISUZUKSAmIEVDQ19QT0lTT04wX0NPTFVNTl9NQVNL OworCXdyaXRlbChyZWd2YWwsIHByaXYtPmJhc2VhZGRyICsgRUNDX1BPSVNPTjBfT0ZTVCk7CisK KwlyZWd2YWwgPSAoYmFua2dycCA8PCBFQ0NfUE9JU09OMV9CR19TSElGVCkgJiBFQ0NfUE9JU09O MV9CR19NQVNLOworCXJlZ3ZhbCB8PSAoYmFuayA8PCBFQ0NfUE9JU09OMV9CQU5LTlJfU0hJRlQp ICYgRUNDX1BPSVNPTjFfQkFOS05SX01BU0s7CisJcmVndmFsIHw9IChyb3cgPDwgRUNDX1BPSVNP TjFfUk9XX1NISUZUKSAmIEVDQ19QT0lTT04xX1JPV19NQVNLOworCXdyaXRlbChyZWd2YWwsIHBy aXYtPmJhc2VhZGRyICsgRUNDX1BPSVNPTjFfT0ZTVCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlu amVjdF9kYXRhX2Vycm9yX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICptYXR0ciwKKwkJCQkgICAgICBjaGFyICpkYXRhKQoreworCXN0 cnVjdCBtZW1fY3RsX2luZm8gKm1jaSA9IHRvX21jaShkZXYpOworCXN0cnVjdCBzeW5wc19lZGFj X3ByaXYgKnByaXYgPSBtY2ktPnB2dF9pbmZvOworCisJcmV0dXJuIHNwcmludGYoZGF0YSwgIlBv aXNvbjAgQWRkcjogMHglMDh4XG5cclBvaXNvbjEgQWRkcjogMHglMDh4XG5cciIKKwkJCSJFcnJv ciBpbmplY3Rpb24gQWRkcmVzczogMHglbHhcblxyIiwKKwkJCXJlYWRsKHByaXYtPmJhc2VhZGRy ICsgRUNDX1BPSVNPTjBfT0ZTVCksCisJCQlyZWFkbChwcml2LT5iYXNlYWRkciArIEVDQ19QT0lT T04xX09GU1QpLAorCQkJcHJpdi0+cG9pc29uX2FkZHIpOworfQorCitzdGF0aWMgc3NpemVfdCBp bmplY3RfZGF0YV9lcnJvcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0 cnVjdCBkZXZpY2VfYXR0cmlidXRlICptYXR0ciwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqZGF0 YSwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSA9IHRvX21jaShk ZXYpOworCXN0cnVjdCBzeW5wc19lZGFjX3ByaXYgKnByaXYgPSBtY2ktPnB2dF9pbmZvOworCisJ aWYgKGtzdHJ0b3VsKGRhdGEsIDAsICZwcml2LT5wb2lzb25fYWRkcikpCisJCXJldHVybiAtRUlO VkFMOworCisJZGRyX3BvaXNvbl9zZXR1cChwcml2KTsKKworCXJldHVybiBjb3VudDsKK30KKwor c3RhdGljIHNzaXplX3QgaW5qZWN0X2RhdGFfcG9pc29uX3Nob3coc3RydWN0IGRldmljZSAqZGV2 LAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbWF0dHIsCisJCQkJICAgICAg IGNoYXIgKmRhdGEpCit7CisJc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpID0gdG9fbWNpKGRldik7 CisJc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdiA9IG1jaS0+cHZ0X2luZm87CisKKwlyZXR1 cm4gc3ByaW50ZihkYXRhLCAiRGF0YSBQb2lzb25pbmc6ICVzXG5cciIsCisJCQkoKChyZWFkbChw cml2LT5iYXNlYWRkciArIEVDQ19DRkcxX09GU1QpKSAmIDB4MykgPT0gMHgzKQorCQkJPyAoIkNv cnJlY3RhYmxlIEVycm9yIikgOiAoIlVuQ29ycmVjdGFibGUgRXJyb3IiKSk7Cit9CisKK3N0YXRp YyBzc2l6ZV90IGluamVjdF9kYXRhX3BvaXNvbl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJ CQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICptYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqZGF0 YSwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSA9IHRvX21jaShk ZXYpOworCXN0cnVjdCBzeW5wc19lZGFjX3ByaXYgKnByaXYgPSBtY2ktPnB2dF9pbmZvOworCisJ d3JpdGVsKDAsIHByaXYtPmJhc2VhZGRyICsgRERSQ19TV0NUTCk7CisJaWYgKHN0cm5jbXAoZGF0 YSwgIkNFIiwgMikgPT0gMCkKKwkJd3JpdGVsKEVDQ19DRVBPSVNPTl9NQVNLLCBwcml2LT5iYXNl YWRkciArIEVDQ19DRkcxX09GU1QpOworCWVsc2UKKwkJd3JpdGVsKEVDQ19VRVBPSVNPTl9NQVNL LCBwcml2LT5iYXNlYWRkciArIEVDQ19DRkcxX09GU1QpOworCXdyaXRlbCgxLCBwcml2LT5iYXNl YWRkciArIEREUkNfU1dDVEwpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNF X0FUVFJfUlcoaW5qZWN0X2RhdGFfZXJyb3IpOworc3RhdGljIERFVklDRV9BVFRSX1JXKGluamVj dF9kYXRhX3BvaXNvbik7CisKK3N0YXRpYyBpbnQgc3lucHNfZWRhY19jcmVhdGVfc3lzZnNfYXR0 cmlidXRlcyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kpCit7CisJaW50IHJjOworCisJcmMgPSBk ZXZpY2VfY3JlYXRlX2ZpbGUoJm1jaS0+ZGV2LCAmZGV2X2F0dHJfaW5qZWN0X2RhdGFfZXJyb3Ip OworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgm bWNpLT5kZXYsICZkZXZfYXR0cl9pbmplY3RfZGF0YV9wb2lzb24pOworCWlmIChyYyA8IDApCisJ CXJldHVybiByYzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3lucHNfZWRhY19yZW1v dmVfc3lzZnNfYXR0cmlidXRlcyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kpCit7CisJZGV2aWNl X3JlbW92ZV9maWxlKCZtY2ktPmRldiwgJmRldl9hdHRyX2luamVjdF9kYXRhX2Vycm9yKTsKKwlk ZXZpY2VfcmVtb3ZlX2ZpbGUoJm1jaS0+ZGV2LCAmZGV2X2F0dHJfaW5qZWN0X2RhdGFfcG9pc29u KTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfcm93X2FkZHJlc3NfbWFwKHN0cnVjdCBzeW5wc19l ZGFjX3ByaXYgKnByaXYsIHUzMiAqYWRkcm1hcCkKK3sKKwl1MzIgYWRkcm1hcF9yb3dfYjJfMTA7 CisJaW50IGluZGV4OworCisJcHJpdi0+cm93X3NoaWZ0WzBdID0gKGFkZHJtYXBbNV0gJiBST1df TUFYX1ZBTF9NQVNLKSArIFJPV19CMF9CQVNFOworCXByaXYtPnJvd19zaGlmdFsxXSA9ICgoYWRk cm1hcFs1XSA+PiA4KSAmCisJCQlST1dfTUFYX1ZBTF9NQVNLKSArIFJPV19CMV9CQVNFOworCisJ YWRkcm1hcF9yb3dfYjJfMTAgPSAoYWRkcm1hcFs1XSA+PiAxNikgJiBST1dfTUFYX1ZBTF9NQVNL OworCWlmIChhZGRybWFwX3Jvd19iMl8xMCAhPSBST1dfTUFYX1ZBTF9NQVNLKSB7CisJCWZvciAo aW5kZXggPSAyOyBpbmRleCA8IDExOyBpbmRleCsrKQorCQkJcHJpdi0+cm93X3NoaWZ0W2luZGV4 XSA9IGFkZHJtYXBfcm93X2IyXzEwICsKKwkJCQlpbmRleCArIFJPV19CMF9CQVNFOworCisJfSBl bHNlIHsKKwkJcHJpdi0+cm93X3NoaWZ0WzJdID0gKGFkZHJtYXBbOV0gJgorCQkJCVJPV19NQVhf VkFMX01BU0spICsgUk9XX0IyX0JBU0U7CisJCXByaXYtPnJvd19zaGlmdFszXSA9ICgoYWRkcm1h cFs5XSA+PiA4KSAmCisJCQkJUk9XX01BWF9WQUxfTUFTSykgKyBST1dfQjNfQkFTRTsKKwkJcHJp di0+cm93X3NoaWZ0WzRdID0gKChhZGRybWFwWzldID4+IDE2KSAmCisJCQkJUk9XX01BWF9WQUxf TUFTSykgKyBST1dfQjRfQkFTRTsKKwkJcHJpdi0+cm93X3NoaWZ0WzVdID0gKChhZGRybWFwWzld ID4+IDI0KSAmCisJCQkJUk9XX01BWF9WQUxfTUFTSykgKyBST1dfQjVfQkFTRTsKKwkJcHJpdi0+ cm93X3NoaWZ0WzZdID0gKGFkZHJtYXBbMTBdICYKKwkJCQlST1dfTUFYX1ZBTF9NQVNLKSArIFJP V19CNl9CQVNFOworCQlwcml2LT5yb3dfc2hpZnRbN10gPSAoKGFkZHJtYXBbMTBdID4+IDgpICYK KwkJCQlST1dfTUFYX1ZBTF9NQVNLKSArIFJPV19CN19CQVNFOworCQlwcml2LT5yb3dfc2hpZnRb OF0gPSAoKGFkZHJtYXBbMTBdID4+IDE2KSAmCisJCQkJUk9XX01BWF9WQUxfTUFTSykgKyBST1df QjhfQkFTRTsKKwkJcHJpdi0+cm93X3NoaWZ0WzldID0gKChhZGRybWFwWzEwXSA+PiAyNCkgJgor CQkJCVJPV19NQVhfVkFMX01BU0spICsgUk9XX0I5X0JBU0U7CisJCXByaXYtPnJvd19zaGlmdFsx MF0gPSAoYWRkcm1hcFsxMV0gJgorCQkJCVJPV19NQVhfVkFMX01BU0spICsgUk9XX0IxMF9CQVNF OworCX0KKworCXByaXYtPnJvd19zaGlmdFsxMV0gPSAoKChhZGRybWFwWzVdID4+IDI0KSAmIFJP V19NQVhfVkFMX01BU0spID09CisJCQkJUk9XX01BWF9WQUxfTUFTSykgPyAwIDogKCgoYWRkcm1h cFs1XSA+PiAyNCkgJgorCQkJCVJPV19NQVhfVkFMX01BU0spICsgUk9XX0IxMV9CQVNFKTsKKwlw cml2LT5yb3dfc2hpZnRbMTJdID0gKChhZGRybWFwWzZdICYgUk9XX01BWF9WQUxfTUFTSykgPT0K KwkJCQlST1dfTUFYX1ZBTF9NQVNLKSA/IDAgOiAoKGFkZHJtYXBbNl0gJgorCQkJCVJPV19NQVhf VkFMX01BU0spICsgUk9XX0IxMl9CQVNFKTsKKwlwcml2LT5yb3dfc2hpZnRbMTNdID0gKCgoYWRk cm1hcFs2XSA+PiA4KSAmIFJPV19NQVhfVkFMX01BU0spID09CisJCQkJUk9XX01BWF9WQUxfTUFT SykgPyAwIDogKCgoYWRkcm1hcFs2XSA+PiA4KSAmCisJCQkJUk9XX01BWF9WQUxfTUFTSykgKyBS T1dfQjEzX0JBU0UpOworCXByaXYtPnJvd19zaGlmdFsxNF0gPSAoKChhZGRybWFwWzZdID4+IDE2 KSAmIFJPV19NQVhfVkFMX01BU0spID09CisJCQkJUk9XX01BWF9WQUxfTUFTSykgPyAwIDogKCgo YWRkcm1hcFs2XSA+PiAxNikgJgorCQkJCVJPV19NQVhfVkFMX01BU0spICsgUk9XX0IxNF9CQVNF KTsKKwlwcml2LT5yb3dfc2hpZnRbMTVdID0gKCgoYWRkcm1hcFs2XSA+PiAyNCkgJiBST1dfTUFY X1ZBTF9NQVNLKSA9PQorCQkJCVJPV19NQVhfVkFMX01BU0spID8gMCA6ICgoKGFkZHJtYXBbNl0g Pj4gMjQpICYKKwkJCQlST1dfTUFYX1ZBTF9NQVNLKSArIFJPV19CMTVfQkFTRSk7CisJcHJpdi0+ cm93X3NoaWZ0WzE2XSA9ICgoYWRkcm1hcFs3XSAmIFJPV19NQVhfVkFMX01BU0spID09CisJCQkJ Uk9XX01BWF9WQUxfTUFTSykgPyAwIDogKChhZGRybWFwWzddICYKKwkJCQlST1dfTUFYX1ZBTF9N QVNLKSArIFJPV19CMTZfQkFTRSk7CisJcHJpdi0+cm93X3NoaWZ0WzE3XSA9ICgoKGFkZHJtYXBb N10gPj4gOCkgJiBST1dfTUFYX1ZBTF9NQVNLKSA9PQorCQkJCVJPV19NQVhfVkFMX01BU0spID8g MCA6ICgoKGFkZHJtYXBbN10gPj4gOCkgJgorCQkJCVJPV19NQVhfVkFMX01BU0spICsgUk9XX0Ix N19CQVNFKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfY29sdW1uX2FkZHJlc3NfbWFwKHN0cnVj dCBzeW5wc19lZGFjX3ByaXYgKnByaXYsIHUzMiAqYWRkcm1hcCkKK3sKKwl1MzIgd2lkdGgsIG1l bXR5cGU7CisJaW50IGluZGV4OworCisJbWVtdHlwZSA9IHJlYWRsKHByaXYtPmJhc2VhZGRyICsg Q1RSTF9PRlNUKTsKKwl3aWR0aCA9IChtZW10eXBlICYgRUNDX0NUUkxfQlVTV0lEVEhfTUFTSykg Pj4gRUNDX0NUUkxfQlVTV0lEVEhfU0hJRlQ7CisKKwlwcml2LT5jb2xfc2hpZnRbMF0gPSAwOwor CXByaXYtPmNvbF9zaGlmdFsxXSA9IDE7CisJcHJpdi0+Y29sX3NoaWZ0WzJdID0gKGFkZHJtYXBb Ml0gJiBDT0xfTUFYX1ZBTF9NQVNLKSArIENPTF9CMl9CQVNFOworCXByaXYtPmNvbF9zaGlmdFsz XSA9ICgoYWRkcm1hcFsyXSA+PiA4KSAmCisJCQlDT0xfTUFYX1ZBTF9NQVNLKSArIENPTF9CM19C QVNFOworCXByaXYtPmNvbF9zaGlmdFs0XSA9ICgoKGFkZHJtYXBbMl0gPj4gMTYpICYgQ09MX01B WF9WQUxfTUFTSykgPT0KKwkJCUNPTF9NQVhfVkFMX01BU0spID8gMCA6ICgoKGFkZHJtYXBbMl0g Pj4gMTYpICYKKwkJCQkJQ09MX01BWF9WQUxfTUFTSykgKyBDT0xfQjRfQkFTRSk7CisJcHJpdi0+ Y29sX3NoaWZ0WzVdID0gKCgoYWRkcm1hcFsyXSA+PiAyNCkgJiBDT0xfTUFYX1ZBTF9NQVNLKSA9 PQorCQkJQ09MX01BWF9WQUxfTUFTSykgPyAwIDogKCgoYWRkcm1hcFsyXSA+PiAyNCkgJgorCQkJ CQlDT0xfTUFYX1ZBTF9NQVNLKSArIENPTF9CNV9CQVNFKTsKKwlwcml2LT5jb2xfc2hpZnRbNl0g PSAoKGFkZHJtYXBbM10gJiBDT0xfTUFYX1ZBTF9NQVNLKSA9PQorCQkJQ09MX01BWF9WQUxfTUFT SykgPyAwIDogKChhZGRybWFwWzNdICYKKwkJCQkJQ09MX01BWF9WQUxfTUFTSykgKyBDT0xfQjZf QkFTRSk7CisJcHJpdi0+Y29sX3NoaWZ0WzddID0gKCgoYWRkcm1hcFszXSA+PiA4KSAmIENPTF9N QVhfVkFMX01BU0spID09CisJCQlDT0xfTUFYX1ZBTF9NQVNLKSA/IDAgOiAoKChhZGRybWFwWzNd ID4+IDgpICYKKwkJCQkJQ09MX01BWF9WQUxfTUFTSykgKyBDT0xfQjdfQkFTRSk7CisJcHJpdi0+ Y29sX3NoaWZ0WzhdID0gKCgoYWRkcm1hcFszXSA+PiAxNikgJiBDT0xfTUFYX1ZBTF9NQVNLKSA9 PQorCQkJQ09MX01BWF9WQUxfTUFTSykgPyAwIDogKCgoYWRkcm1hcFszXSA+PiAxNikgJgorCQkJ CQlDT0xfTUFYX1ZBTF9NQVNLKSArIENPTF9COF9CQVNFKTsKKwlwcml2LT5jb2xfc2hpZnRbOV0g PSAoKChhZGRybWFwWzNdID4+IDI0KSAmIENPTF9NQVhfVkFMX01BU0spID09CisJCQlDT0xfTUFY X1ZBTF9NQVNLKSA/IDAgOiAoKChhZGRybWFwWzNdID4+IDI0KSAmCisJCQkJCUNPTF9NQVhfVkFM X01BU0spICsgQ09MX0I5X0JBU0UpOworCWlmICh3aWR0aCA9PSBERFJDVExfRVdEVEhfNjQpIHsK KwkJaWYgKG1lbXR5cGUgJiBNRU1fVFlQRV9MUEREUjMpIHsKKwkJCXByaXYtPmNvbF9zaGlmdFsx MF0gPSAoKGFkZHJtYXBbNF0gJgorCQkJCUNPTF9NQVhfVkFMX01BU0spID09IENPTF9NQVhfVkFM X01BU0spID8gMCA6CisJCQkJKChhZGRybWFwWzRdICYgQ09MX01BWF9WQUxfTUFTSykgKworCQkJ CSBDT0xfQjEwX0JBU0UpOworCQkJcHJpdi0+Y29sX3NoaWZ0WzExXSA9ICgoKGFkZHJtYXBbNF0g Pj4gOCkgJgorCQkJCUNPTF9NQVhfVkFMX01BU0spID09IENPTF9NQVhfVkFMX01BU0spID8gMCA6 CisJCQkJKCgoYWRkcm1hcFs0XSA+PiA4KSAmIENPTF9NQVhfVkFMX01BU0spICsKKwkJCQkgQ09M X0IxMV9CQVNFKTsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPmNvbF9zaGlmdFsxMV0gPSAoKGFkZHJt YXBbNF0gJgorCQkJCUNPTF9NQVhfVkFMX01BU0spID09IENPTF9NQVhfVkFMX01BU0spID8gMCA6 CisJCQkJKChhZGRybWFwWzRdICYgQ09MX01BWF9WQUxfTUFTSykgKworCQkJCSBDT0xfQjEwX0JB U0UpOworCQkJcHJpdi0+Y29sX3NoaWZ0WzEzXSA9ICgoKGFkZHJtYXBbNF0gPj4gOCkgJgorCQkJ CUNPTF9NQVhfVkFMX01BU0spID09IENPTF9NQVhfVkFMX01BU0spID8gMCA6CisJCQkJKCgoYWRk cm1hcFs0XSA+PiA4KSAmIENPTF9NQVhfVkFMX01BU0spICsKKwkJCQkgQ09MX0IxMV9CQVNFKTsK KwkJfQorCX0gZWxzZSBpZiAod2lkdGggPT0gRERSQ1RMX0VXRFRIXzMyKSB7CisJCWlmIChtZW10 eXBlICYgTUVNX1RZUEVfTFBERFIzKSB7CisJCQlwcml2LT5jb2xfc2hpZnRbMTBdID0gKCgoYWRk cm1hcFszXSA+PiAyNCkgJgorCQkJCUNPTF9NQVhfVkFMX01BU0spID09IENPTF9NQVhfVkFMX01B U0spID8gMCA6CisJCQkJKCgoYWRkcm1hcFszXSA+PiAyNCkgJiBDT0xfTUFYX1ZBTF9NQVNLKSAr CisJCQkJIENPTF9COV9CQVNFKTsKKwkJCXByaXYtPmNvbF9zaGlmdFsxMV0gPSAoKGFkZHJtYXBb NF0gJgorCQkJCUNPTF9NQVhfVkFMX01BU0spID09IENPTF9NQVhfVkFMX01BU0spID8gMCA6CisJ CQkJKChhZGRybWFwWzRdICYgQ09MX01BWF9WQUxfTUFTSykgKworCQkJCSBDT0xfQjEwX0JBU0Up OworCQl9IGVsc2UgeworCQkJcHJpdi0+Y29sX3NoaWZ0WzExXSA9ICgoKGFkZHJtYXBbM10gPj4g MjQpICYKKwkJCQlDT0xfTUFYX1ZBTF9NQVNLKSA9PSBDT0xfTUFYX1ZBTF9NQVNLKSA/IDAgOgor CQkJCSgoKGFkZHJtYXBbM10gPj4gMjQpICYgQ09MX01BWF9WQUxfTUFTSykgKworCQkJCSBDT0xf QjlfQkFTRSk7CisJCQlwcml2LT5jb2xfc2hpZnRbMTNdID0gKChhZGRybWFwWzRdICYKKwkJCQlD T0xfTUFYX1ZBTF9NQVNLKSA9PSBDT0xfTUFYX1ZBTF9NQVNLKSA/IDAgOgorCQkJCSgoYWRkcm1h cFs0XSAmIENPTF9NQVhfVkFMX01BU0spICsKKwkJCQkgQ09MX0IxMF9CQVNFKTsKKwkJfQorCX0g ZWxzZSB7CisJCWlmIChtZW10eXBlICYgTUVNX1RZUEVfTFBERFIzKSB7CisJCQlwcml2LT5jb2xf c2hpZnRbMTBdID0gKCgoYWRkcm1hcFszXSA+PiAxNikgJgorCQkJCUNPTF9NQVhfVkFMX01BU0sp ID09IENPTF9NQVhfVkFMX01BU0spID8gMCA6CisJCQkJKCgoYWRkcm1hcFszXSA+PiAxNikgJiBD T0xfTUFYX1ZBTF9NQVNLKSArCisJCQkJIENPTF9COF9CQVNFKTsKKwkJCXByaXYtPmNvbF9zaGlm dFsxMV0gPSAoKChhZGRybWFwWzNdID4+IDI0KSAmCisJCQkJQ09MX01BWF9WQUxfTUFTSykgPT0g Q09MX01BWF9WQUxfTUFTSykgPyAwIDoKKwkJCQkoKChhZGRybWFwWzNdID4+IDI0KSAmIENPTF9N QVhfVkFMX01BU0spICsKKwkJCQkgQ09MX0I5X0JBU0UpOworCQkJcHJpdi0+Y29sX3NoaWZ0WzEz XSA9ICgoYWRkcm1hcFs0XSAmCisJCQkJQ09MX01BWF9WQUxfTUFTSykgPT0gQ09MX01BWF9WQUxf TUFTSykgPyAwIDoKKwkJCQkoKGFkZHJtYXBbNF0gJiBDT0xfTUFYX1ZBTF9NQVNLKSArCisJCQkJ IENPTF9CMTBfQkFTRSk7CisJCX0gZWxzZSB7CisJCQlwcml2LT5jb2xfc2hpZnRbMTFdID0gKCgo YWRkcm1hcFszXSA+PiAxNikgJgorCQkJCUNPTF9NQVhfVkFMX01BU0spID09IENPTF9NQVhfVkFM X01BU0spID8gMCA6CisJCQkJKCgoYWRkcm1hcFszXSA+PiAxNikgJiBDT0xfTUFYX1ZBTF9NQVNL KSArCisJCQkJIENPTF9COF9CQVNFKTsKKwkJCXByaXYtPmNvbF9zaGlmdFsxM10gPSAoKChhZGRy bWFwWzNdID4+IDI0KSAmCisJCQkJQ09MX01BWF9WQUxfTUFTSykgPT0gQ09MX01BWF9WQUxfTUFT SykgPyAwIDoKKwkJCQkoKChhZGRybWFwWzNdID4+IDI0KSAmIENPTF9NQVhfVkFMX01BU0spICsK KwkJCQkgQ09MX0I5X0JBU0UpOworCQl9CisJfQorCisJaWYgKHdpZHRoKSB7CisJCWZvciAoaW5k ZXggPSA5OyBpbmRleCA+IHdpZHRoOyBpbmRleC0tKSB7CisJCQlwcml2LT5jb2xfc2hpZnRbaW5k ZXhdID0gcHJpdi0+Y29sX3NoaWZ0W2luZGV4IC0gd2lkdGhdOworCQkJcHJpdi0+Y29sX3NoaWZ0 W2luZGV4IC0gd2lkdGhdID0gMDsKKwkJfQorCX0KKworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9i YW5rX2FkZHJlc3NfbWFwKHN0cnVjdCBzeW5wc19lZGFjX3ByaXYgKnByaXYsIHUzMiAqYWRkcm1h cCkKK3sKKwlwcml2LT5iYW5rX3NoaWZ0WzBdID0gKGFkZHJtYXBbMV0gJiBCQU5LX01BWF9WQUxf TUFTSykgKyBCQU5LX0IwX0JBU0U7CisJcHJpdi0+YmFua19zaGlmdFsxXSA9ICgoYWRkcm1hcFsx XSA+PiA4KSAmCisJCQkJQkFOS19NQVhfVkFMX01BU0spICsgQkFOS19CMV9CQVNFOworCXByaXYt PmJhbmtfc2hpZnRbMl0gPSAoKChhZGRybWFwWzFdID4+IDE2KSAmCisJCQkJQkFOS19NQVhfVkFM X01BU0spID09IEJBTktfTUFYX1ZBTF9NQVNLKSA/IDAgOgorCQkJCSgoKGFkZHJtYXBbMV0gPj4g MTYpICYgQkFOS19NQVhfVkFMX01BU0spICsKKwkJCQkgQkFOS19CMl9CQVNFKTsKKworfQorCitz dGF0aWMgdm9pZCBzZXR1cF9iZ19hZGRyZXNzX21hcChzdHJ1Y3Qgc3lucHNfZWRhY19wcml2ICpw cml2LCB1MzIgKmFkZHJtYXApCit7CisJcHJpdi0+YmFua2dycF9zaGlmdFswXSA9IChhZGRybWFw WzhdICYKKwkJCQlCQU5LR1JQX01BWF9WQUxfTUFTSykgKyBCQU5LR1JQX0IwX0JBU0U7CisJcHJp di0+YmFua2dycF9zaGlmdFsxXSA9ICgoKGFkZHJtYXBbOF0gPj4gOCkgJiBCQU5LR1JQX01BWF9W QUxfTUFTSykgPT0KKwkJCQlCQU5LR1JQX01BWF9WQUxfTUFTSykgPyAwIDogKCgoYWRkcm1hcFs4 XSA+PiA4KQorCQkJCSYgQkFOS0dSUF9NQVhfVkFMX01BU0spICsgQkFOS0dSUF9CMV9CQVNFKTsK KworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9yYW5rX2FkZHJlc3NfbWFwKHN0cnVjdCBzeW5wc19l ZGFjX3ByaXYgKnByaXYsIHUzMiAqYWRkcm1hcCkKK3sKKwlwcml2LT5yYW5rX3NoaWZ0WzBdID0g KChhZGRybWFwWzBdICYgUkFOS19NQVhfVkFMX01BU0spID09CisJCQkJUkFOS19NQVhfVkFMX01B U0spID8gMCA6ICgoYWRkcm1hcFswXSAmCisJCQkJUkFOS19NQVhfVkFMX01BU0spICsgUkFOS19C MF9CQVNFKTsKK30KKworLyoqCisgKiBzZXR1cF9hZGRyZXNzX21hcCAtCVNldCBBZGRyZXNzIE1h cCBieSBxdWVyeWluZyBBRERSTUFQIHJlZ2lzdGVycy4KKyAqIEBwcml2OgkJRERSIG1lbW9yeSBj b250cm9sbGVyIHByaXZhdGUgaW5zdGFuY2UgZGF0YS4KKyAqCisgKiBTZXQgQWRkcmVzcyBNYXAg YnkgcXVlcnlpbmcgQUREUk1BUCByZWdpc3RlcnMuCisgKgorICogUmV0dXJuOiBub25lLgorICov CitzdGF0aWMgdm9pZCBzZXR1cF9hZGRyZXNzX21hcChzdHJ1Y3Qgc3lucHNfZWRhY19wcml2ICpw cml2KQoreworCXUzMiBhZGRybWFwWzEyXTsKKwlpbnQgaW5kZXg7CisKKwlmb3IgKGluZGV4ID0g MDsgaW5kZXggPCAxMjsgaW5kZXgrKykgeworCQl1MzIgYWRkcm1hcF9vZmZzZXQ7CisKKwkJYWRk cm1hcF9vZmZzZXQgPSBFQ0NfQUREUk1BUDBfT0ZGU0VUICsgKGluZGV4ICogNCk7CisJCWFkZHJt YXBbaW5kZXhdID0gcmVhZGwocHJpdi0+YmFzZWFkZHIgKyBhZGRybWFwX29mZnNldCk7CisJfQor CisJLyogU2V0IFJvdyBBZGRyZXNzIE1hcCAqLworCXNldHVwX3Jvd19hZGRyZXNzX21hcChwcml2 LCBhZGRybWFwKTsKKworCS8qIFNldCBDb2x1bW4gQWRkcmVzcyBNYXAgKi8KKwlzZXR1cF9jb2x1 bW5fYWRkcmVzc19tYXAocHJpdiwgYWRkcm1hcCk7CisKKwkvKiBTZXQgQmFuayBBZGRyZXNzIE1h cCAqLworCXNldHVwX2JhbmtfYWRkcmVzc19tYXAocHJpdiwgYWRkcm1hcCk7CisKKwkvKiBTZXQg QmFuayBHcm91cCBBZGRyZXNzIE1hcCAqLworCXNldHVwX2JnX2FkZHJlc3NfbWFwKHByaXYsIGFk ZHJtYXApOworCisJLyogU2V0IFJhbmsgQWRkcmVzcyBNYXAgKi8KKwlzZXR1cF9yYW5rX2FkZHJl c3NfbWFwKHByaXYsIGFkZHJtYXApOworfQorI2VuZGlmIC8qIENPTkZJR19FREFDX0RFQlVHICov CisKIC8qKgogICogc3lucHNfZWRhY19tY19wcm9iZSAtIENoZWNrIGNvbnRyb2xsZXIgYW5kIGJp bmQgZHJpdmVyLgogICogQHBkZXY6CXBsYXRmb3JtX2RldmljZSBzdHJ1Y3QuCkBAIC05NDEsNiAr MTMzNCwyMCBAQCBzdGF0aWMgaW50IHN5bnBzX2VkYWNfbWNfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKIAkJZ290byBmcmVlX2VkYWNfbWM7CiAJfQogCisjaWZkZWYgQ09ORklH X0VEQUNfREVCVUcKKwlpZiAocHJpdi0+cF9kYXRhLT5xdWlya3MgJiBERFJfRUNDX0RBVEFfUE9J U09OX1NVUFBPUlQpIHsKKwkJaWYgKHN5bnBzX2VkYWNfY3JlYXRlX3N5c2ZzX2F0dHJpYnV0ZXMo bWNpKSkgeworCQkJZWRhY19wcmludGsoS0VSTl9FUlIsIEVEQUNfTUMsCisJCQkJCSJGYWlsZWQg dG8gY3JlYXRlIHN5c2ZzIGVudHJpZXNcbiIpOworCQkJZ290byBmcmVlX2VkYWNfbWM7CisJCX0K Kwl9CisKKwlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGRldi0+ZGV2Lm9mX25vZGUsCisJ CQkJICAgICJ4bG54LHp5bnFtcC1kZHJjLTIuNDBhIikpCisJCXNldHVwX2FkZHJlc3NfbWFwKHBy aXYpOworI2VuZGlmCisKIAkvKgogCSAqIFN0YXJ0IGNhcHR1cmluZyB0aGUgY29ycmVjdGFibGUg YW5kIHVuY29ycmVjdGFibGUgZXJyb3JzLiBBIHdyaXRlIG9mCiAJICogMCBzdGFydHMgdGhlIGNv dW50ZXJzLgpAQCAtOTcyLDYgKzEzNzksMTAgQEAgc3RhdGljIGludCBzeW5wc19lZGFjX21jX3Jl bW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCQl3cml0ZWwoKEREUl9RT1NVRV9N QVNLIHwgRERSX1FPU0NFX01BU0spLAogCQkJcHJpdi0+YmFzZWFkZHIgKyBERFJfUU9TX0lSUV9E Ql9PRlNUKTsKIAllZGFjX21jX2RlbF9tYygmcGRldi0+ZGV2KTsKKyNpZmRlZiBDT05GSUdfRURB Q19ERUJVRworCWlmIChwcml2LT5wX2RhdGEtPnF1aXJrcyAmIEREUl9FQ0NfREFUQV9QT0lTT05f U1VQUE9SVCkKKwkJc3lucHNfZWRhY19yZW1vdmVfc3lzZnNfYXR0cmlidXRlcyhtY2kpOworI2Vu ZGlmCiAJZWRhY19tY19mcmVlKG1jaSk7CiAKIAlyZXR1cm4gMDsK