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: [1/2] EDAC: Add Aspeed AST2500 EDAC driver From: Stefan Schaeckeler Message-Id: <1545026517-64069-2-git-send-email-schaecsn@gmx.net> Date: Sun, 16 Dec 2018 22:01:56 -0800 To: Rob Herring , Mark Rutland , Joel Stanley , Andrew Jeffery , Borislav Petkov , Mauro Carvalho Chehab , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-aspeed@lists.ozlabs.org, linux-edac@vger.kernel.org Cc: Stefan M Schaeckeler List-ID: RnJvbTogU3RlZmFuIE0gU2NoYWVja2VsZXIgPHNzY2hhZWNrQGNpc2NvLmNvbT4KCkFkZCBzdXBw b3J0IGZvciB0aGUgQXNwZWVkIEFTVDI1MDAgU29DIEVEQUMgZHJpdmVyLgoKU2lnbmVkLW9mZi1i eTogU3RlZmFuIE0gU2NoYWVja2VsZXIgPHNzY2hhZWNrQGNpc2NvLmNvbT4KLS0tCiBNQUlOVEFJ TkVSUyAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArCiBhcmNoL2FybS9ib290L2R0cy9hc3Bl ZWQtZzUuZHRzaSB8ICAgNyArCiBkcml2ZXJzL2VkYWMvS2NvbmZpZyAgICAgICAgICAgICB8ICAg NyArCiBkcml2ZXJzL2VkYWMvTWFrZWZpbGUgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2Vk YWMvYXNwZWVkX2VkYWMuYyAgICAgICB8IDQ1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiA1IGZpbGVzIGNoYW5nZWQsIDQ3OCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9lZGFjL2FzcGVlZF9lZGFjLmMKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBi L01BSU5UQUlORVJTCmluZGV4IDMzMThmMzA5MDNiMi4uMWZlYjkyYjE0MDI5IDEwMDY0NAotLS0g YS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNTMxNSw2ICs1MzE1LDEyIEBAIEw6 CWxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2Vk YWMvYW1kNjRfZWRhYyoKIAorRURBQy1BU1QyNTAwCitNOglTdGVmYW4gU2NoYWVja2VsZXIgPHNz Y2hhZWNrQGNpc2NvLmNvbT4KK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9lZGFjL2FzcGVlZF9l ZGFjLmMKK0Y6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9lZGFjL2FzcGVlZC1z ZHJhbS1lZGFjLnR4dAorCiBFREFDLUNBTFhFREEKIE06CVJvYmVydCBSaWNodGVyIDxycmljQGtl cm5lbC5vcmc+CiBMOglsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvYXJj aC9hcm0vYm9vdC9kdHMvYXNwZWVkLWc1LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hc3BlZWQt ZzUuZHRzaQppbmRleCBkMTA3NDU5ZmMwZjguLmI0ZTQ3OWFiNWEyZCAxMDA2NDQKLS0tIGEvYXJj aC9hcm0vYm9vdC9kdHMvYXNwZWVkLWc1LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvYXNw ZWVkLWc1LmR0c2kKQEAgLTQ3LDYgKzQ3LDEzIEBACiAJCXJlZyA9IDwweDgwMDAwMDAwIDA+Owog CX07CiAKKwllZGFjOiBzZHJhbUAxZTZlMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXNwZWVkLGFz dDI1MDAtc2RyYW0tZWRhYyI7CisJCXJlZyA9IDwweDFlNmUwMDAwIDB4MTc0PjsKKwkJaW50ZXJy dXB0cyA9IDwwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCiAJYWhiIHsKIAkJY29t cGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2VkYWMvS2NvbmZpZyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCmluZGV4IDQx YzljY2RkMjBkNi4uNjc4MzQ0MzBiMGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvS2NvbmZp ZworKysgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwpAQCAtNDc1LDQgKzQ3NSwxMSBAQCBjb25maWcg RURBQ19RQ09NCiAJICBGb3IgZGVidWdnaW5nIGlzc3VlcyBoYXZpbmcgdG8gZG8gd2l0aCBzdGFi aWxpdHkgYW5kIG92ZXJhbGwgc3lzdGVtCiAJICBoZWFsdGgsIHlvdSBzaG91bGQgcHJvYmFibHkg c2F5ICdZJyBoZXJlLgogCitjb25maWcgRURBQ19BU1BFRUQKKwl0cmlzdGF0ZSAiQXNwZWVkIEFT VCAyNTAwIFNvQyIKKwlkZXBlbmRzIG9uIE1BQ0hfQVNQRUVEX0c1CisJaGVscAorCSAgU3VwcG9y dCBmb3IgZXJyb3IgZGV0ZWN0aW9uIGFuZCBjb3JyZWN0aW9uIG9uIHRoZQorCSAgQXNwZWVkIEFT VCAyNTAwIFNvQy4KKwogZW5kaWYgIyBFREFDCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvTWFr ZWZpbGUgYi9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKaW5kZXggNzE2MDk2ZDA4ZWEwLi5lMWYyM2Q0 ZmY4NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Vk YWMvTWFrZWZpbGUKQEAgLTc4LDMgKzc4LDQgQEAgb2JqLSQoQ09ORklHX0VEQUNfU1lOT1BTWVMp CQkrPSBzeW5vcHN5c19lZGFjLm8KIG9iai0kKENPTkZJR19FREFDX1hHRU5FKQkJKz0geGdlbmVf ZWRhYy5vCiBvYmotJChDT05GSUdfRURBQ19USSkJCQkrPSB0aV9lZGFjLm8KIG9iai0kKENPTkZJ R19FREFDX1FDT00pCQkJKz0gcWNvbV9lZGFjLm8KK29iai0kKENPTkZJR19FREFDX0FTUEVFRCkJ CSs9IGFzcGVlZF9lZGFjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hc3BlZWRfZWRhYy5j IGIvZHJpdmVycy9lZGFjL2FzcGVlZF9lZGFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi5kNmVkMTE5OTA5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Vk YWMvYXNwZWVkX2VkYWMuYwpAQCAtMCwwICsxLDQ1NyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjArCisvKgorICogQ29weXJpZ2h0IDIwMTggQ2lzY28gU3lzdGVtcworICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2VkYWMu aD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cisj aW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2 aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgv aW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcmVn bWFwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlICJlZGFjX21vZHVsZS5oIgor CisKKyNkZWZpbmUgRFJWX05BTUUgImFzcGVlZC1lZGFjIgorCisKKy8qIHJlZ2lzdGVycyAqLwor I2RlZmluZSBBU1BFRURfTUNSX1BST1QgICAgICAgIDB4MDAgLyogcHJvdGVjdGlvbiBrZXkgcmVn aXN0ZXIgKi8KKyNkZWZpbmUgQVNQRUVEX01DUl9DT05GICAgICAgICAweDA0IC8qIGNvbmZpZ3Vy YXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVNQRUVEX01DUl9JTlRSX0NUUkwgICAweDUwIC8q IGludGVycnVwdCBjb250cm9sL3N0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBBU1BFRURfTUNS X0FERFJfVU5SRUMgIDB4NTggLyogYWRkcmVzcyBvZiBmaXJzdCB1bi1yZWNvdmVyYWJsZSBlcnJv ciAqLworI2RlZmluZSBBU1BFRURfTUNSX0FERFJfUkVDICAgIDB4NWMgLyogYWRkcmVzcyBvZiBs YXN0IHJlY292ZXJhYmxlIGVycm9yICovCisjZGVmaW5lIEFTUEVFRF9NQ1JfTEFTVCAgICAgICAg QVNQRUVEX01DUl9BRERSX1JFQworCisKKy8qIGJpdHMgYW5kIG1hc2tzICovCisjZGVmaW5lIEFT UEVFRF9NQ1JfUFJPVF9QQVNTV0QJICAgICAgICAgICAgMHhmYzYwMDMwOQorI2RlZmluZSBBU1BF RURfTUNSX0NPTkZfRFJBTV9UWVBFICAgICAgICAgICAgICAgQklUKDQpCisjZGVmaW5lIEFTUEVF RF9NQ1JfQ09ORl9FQ0MgICAgICAgICAgICAgICAgICAgICBCSVQoNykKKyNkZWZpbmUgQVNQRUVE X01DUl9JTlRSX0NUUkxfQ0xFQVIgICAgICAgICAgICAgQklUKDMxKQorI2RlZmluZSBBU1BFRURf TUNSX0lOVFJfQ1RSTF9DTlRfUkVDICAgR0VOTUFTSygyMywgMTYpCisjZGVmaW5lIEFTUEVFRF9N Q1JfSU5UUl9DVFJMX0NOVF9VTlJFQyBHRU5NQVNLKDE1LCAxMikKKyNkZWZpbmUgQVNQRUVEX01D Ul9JTlRSX0NUUkxfRU5BQkxFICAoQklUKDApIHwgQklUKDEpKQorCisKKworc3RhdGljIGludCBh c3BlZWRfZWRhY19yZWdtYXBfcmVnX3dyaXRlKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCBy ZWcsCisJCQkJCXVuc2lnbmVkIGludCB2YWwpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gKHZv aWQgX19pb21lbSAqKWNvbnRleHQ7CisKKwkvKiBlbmFibGUgd3JpdGUgdG8gTUNSIHJlZ2lzdGVy IHNldCAqLworCXdyaXRlbChBU1BFRURfTUNSX1BST1RfUEFTU1dELCByZWdzICsgQVNQRUVEX01D Ul9QUk9UKTsKKworCXdyaXRlbCh2YWwsIHJlZ3MgKyByZWcpOworCisJLyogZGlzYWJsZSB3cml0 ZSB0byBNQ1IgcmVnaXN0ZXIgc2V0ICovCisJd3JpdGVsKH5BU1BFRURfTUNSX1BST1RfUEFTU1dE LCByZWdzICsgQVNQRUVEX01DUl9QUk9UKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBp bnQgYXNwZWVkX2VkYWNfcmVnbWFwX3JlZ19yZWFkKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGlu dCByZWcsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCAqdmFsKQoreworCXZvaWQgX19pb21lbSAq cmVncyA9ICh2b2lkIF9faW9tZW0gKiljb250ZXh0OworCisJKnZhbCA9IHJlYWRsKHJlZ3MgKyBy ZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIGFzcGVlZF9lZGFjX3JlZ21hcF9p c192b2xhdGlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgIHVuc2lnbmVkIGludCByZWcp Cit7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIEFTUEVFRF9NQ1JfUFJPVDoKKwljYXNlIEFTUEVF RF9NQ1JfSU5UUl9DVFJMOgorCWNhc2UgQVNQRUVEX01DUl9BRERSX1VOUkVDOgorCWNhc2UgQVNQ RUVEX01DUl9BRERSX1JFQzoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZh bHNlOworCX0KK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYXNwZWVk X2VkYWNfcmVnbWFwX2NvbmZpZyA9IHsKKwkucmVnX2JpdHMgPSAzMiwKKwkudmFsX2JpdHMgPSAz MiwKKwkucmVnX3N0cmlkZSA9IDQsCisJLm1heF9yZWdpc3RlciA9IEFTUEVFRF9NQ1JfTEFTVCwK KwkucmVnX3dyaXRlID0gYXNwZWVkX2VkYWNfcmVnbWFwX3JlZ193cml0ZSwKKwkucmVnX3JlYWQg PSBhc3BlZWRfZWRhY19yZWdtYXBfcmVnX3JlYWQsCisJLnZvbGF0aWxlX3JlZyA9IGFzcGVlZF9l ZGFjX3JlZ21hcF9pc192b2xhdGlsZSwKKwkuZmFzdF9pbyA9IHRydWUsCit9OworCisKK3N0YXRp YyBzdHJ1Y3QgcmVnbWFwICphc3BlZWRfZWRhY19yZWdtYXA7CisKKworc3RhdGljIHZvaWQgYXNw ZWVkX2VkYWNfY291bnRfcmVjKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKKwkJCQkgIHU4IHJl Y19jbnQsCisJCQkJICB1MzIgcmVjX2FkZHIpCit7CisJc3RydWN0IGNzcm93X2luZm8gKmNzcm93 ID0gbWNpLT5jc3Jvd3NbMF07CisJdTMyIHBhZ2UsIG9mZnNldCwgc3luZHJvbWU7CisKKwlpZiAo cmVjX2NudCA+IDApIHsKKwkJLyogcmVwb3J0IGZpcnN0IGZldyBlcnJvcnMgKGlmIHRoZXJlIGFy ZSkgKi8KKwkJLyogbm90ZTogbm8gYWRkcmVzc2VzIGFyZSByZWNvcmRlZCAqLworCQlpZiAocmVj X2NudCA+IDEpIHsKKwkJCXBhZ2UgPSAwOyAvKiBub3QgYXZhaWxhYmxlICovCisJCQlvZmZzZXQg PSAwOyAgLyogbm90IGF2YWlsYWJsZSAqLworCQkJc3luZHJvbWUgPSAwOyAvKiBub3QgYXZhaWxh YmxlICovCisJCQllZGFjX21jX2hhbmRsZV9lcnJvcihIV19FVkVOVF9FUlJfQ09SUkVDVEVELCBt Y2ksCisJCQkJCSAgICAgcmVjX2NudC0xLCBwYWdlLCBvZmZzZXQsCisJCQkJCSAgICAgc3luZHJv bWUsIDAsIDAsIC0xLAorCQkJCQkgICAgICJhZGRyZXNzKGVzKSBub3QgYXZhaWxhYmxlIiwgIiIp OworCQl9CisKKwkJLyogcmVwb3J0IGxhc3QgZXJyb3IgKi8KKwkJLyogbm90ZTogcmVjX2FkZHIg aXMgdGhlIGxhc3QgcmVjb3ZlcmFibGUgZXJyb3IgYWRkciAqLworCQlwYWdlID0gcmVjX2FkZHIg Pj4gUEFHRV9TSElGVDsKKwkJb2Zmc2V0ID0gcmVjX2FkZHIgJiB+UEFHRV9NQVNLOworCQlzeW5k cm9tZSA9IDA7IC8qIG5vdCBhdmFpbGFibGUgKi8KKwkJZWRhY19tY19oYW5kbGVfZXJyb3IoSFdf RVZFTlRfRVJSX0NPUlJFQ1RFRCwgbWNpLCAxLAorCQkJCSAgICAgY3Nyb3ctPmZpcnN0X3BhZ2Ug KyBwYWdlLCBvZmZzZXQsIHN5bmRyb21lLAorCQkJCSAgICAgMCwgMCwgLTEsICIiLCAiIik7CisJ fQorfQorCisKK3N0YXRpYyB2b2lkIGFzcGVlZF9lZGFjX2NvdW50X3VuX3JlYyhzdHJ1Y3QgbWVt X2N0bF9pbmZvICptY2ksCisJCQkJICAgICB1OCB1bl9yZWNfY250LAorCQkJCSAgICAgdTMyIHVu X3JlY19hZGRyKQoreworCXN0cnVjdCBjc3Jvd19pbmZvICpjc3JvdyA9IG1jaS0+Y3Nyb3dzWzBd OworCXUzMiBwYWdlLCBvZmZzZXQsIHN5bmRyb21lOworCisJaWYgKHVuX3JlY19jbnQgPiAwKSB7 CisJCS8qIHJlcG9ydCAxLiBlcnJvciAqLworCQkvKiBub3RlOiB1bl9yZWNfYWRkciBpcyB0aGUg Zmlyc3QgdW5yZWNvdmVyYWJsZSBlcnJvciBhZGRyICovCisJCXBhZ2UgPSB1bl9yZWNfYWRkciA+ PiBQQUdFX1NISUZUOworCQlvZmZzZXQgPSB1bl9yZWNfYWRkciAmIH5QQUdFX01BU0s7CisJCXN5 bmRyb21lID0gMDsgLyogbm90IGF2YWlsYWJsZSAqLworCQllZGFjX21jX2hhbmRsZV9lcnJvcihI V19FVkVOVF9FUlJfVU5DT1JSRUNURUQsIG1jaSwgMSwKKwkJCQkgICAgIGNzcm93LT5maXJzdF9w YWdlICsgcGFnZSwgb2Zmc2V0LCBzeW5kcm9tZSwKKwkJCQkgICAgIDAsIDAsIC0xLCAiIiwgIiIp OworCisJCS8qIHJlcG9ydCBmdXJ0aGVyIGVycm9ycyAoaWYgdGhlcmUgYXJlKSAqLworCQkvKiBu b3RlOiBubyBhZGRyZXNzZXMgYXJlIHJlY29yZGVkICovCisJCWlmICh1bl9yZWNfY250ID4gMSkg eworCQkJcGFnZSA9IDA7ICAvKiBub3QgYXZhaWxhYmxlICovCisJCQlvZmZzZXQgPSAwOyAgLyog bm90IGF2YWlsYWJsZSAqLworCQkJc3luZHJvbWUgPSAwOyAvKiBub3QgYXZhaWxhYmxlICovCisJ CQllZGFjX21jX2hhbmRsZV9lcnJvcihIV19FVkVOVF9FUlJfVU5DT1JSRUNURUQsIG1jaSwKKwkJ CQkJICAgICB1bl9yZWNfY250LTEsIHBhZ2UsIG9mZnNldCwKKwkJCQkJICAgICBzeW5kcm9tZSwg MCwgMCwgLTEsCisJCQkJCSAgICAgImFkZHJlc3MoZXMpIG5vdCBhdmFpbGFibGUiLCAiIik7CisJ CX0KKwl9Cit9CisKKworc3RhdGljIHZvaWQgYXNwZWVkX2VkYWNfZW5hYmxlX2ludGVycnVwdHMo dm9pZCkKK3sKKworCXJlZ21hcF91cGRhdGVfYml0cyhhc3BlZWRfZWRhY19yZWdtYXAsIEFTUEVF RF9NQ1JfSU5UUl9DVFJMLAorCQkJICAgQVNQRUVEX01DUl9JTlRSX0NUUkxfRU5BQkxFLAorCQkJ ICAgQVNQRUVEX01DUl9JTlRSX0NUUkxfRU5BQkxFKTsKK30KKworCitzdGF0aWMgdm9pZCBhc3Bl ZWRfZWRhY19kaXNhYmxlX2ludGVycnVwdHModm9pZCkKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMo YXNwZWVkX2VkYWNfcmVnbWFwLCBBU1BFRURfTUNSX0lOVFJfQ1RSTCwKKwkJCSAgIEFTUEVFRF9N Q1JfSU5UUl9DVFJMX0VOQUJMRSwgMCk7Cit9CisKKworc3RhdGljIHZvaWQgYXNwZWVkX2VkYWNf Y2xlYXJfaW50ZXJydXB0cyh2b2lkKQoreworCXJlZ21hcF91cGRhdGVfYml0cyhhc3BlZWRfZWRh Y19yZWdtYXAsIEFTUEVFRF9NQ1JfSU5UUl9DVFJMLAorCQkJICAgQVNQRUVEX01DUl9JTlRSX0NU UkxfQ0xFQVIsCisJCQkgICBBU1BFRURfTUNSX0lOVFJfQ1RSTF9DTEVBUik7CisKKwlyZWdtYXBf dXBkYXRlX2JpdHMoYXNwZWVkX2VkYWNfcmVnbWFwLCBBU1BFRURfTUNSX0lOVFJfQ1RSTCwKKwkJ CSAgIEFTUEVFRF9NQ1JfSU5UUl9DVFJMX0NMRUFSLCAwKTsKK30KKworCitzdGF0aWMgaXJxcmV0 dXJuX3QgYXNwZWVkX2VkYWNfaXNyKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwl1OCAgcmVjX2Nu dCwgdW5fcmVjX2NudDsKKwl1MzIgcmVjX2FkZHIsIHVuX3JlY19hZGRyOworCXN0cnVjdCBtZW1f Y3RsX2luZm8gKm1jaSA9IGFyZzsKKwl1MzIgcmVnNTAsIHJlZzVjLCByZWc1ODsKKworCXJlZ21h cF9yZWFkKGFzcGVlZF9lZGFjX3JlZ21hcCwgQVNQRUVEX01DUl9JTlRSX0NUUkwsICZyZWc1MCk7 CisJZGV2X2RiZyhtY2ktPnBkZXYsICJyZWNlaXZlZCBlZGFjIGludGVycnVwdCB3LyBtbWMgcmVn aXN0ZXIgNTA6IDB4JXhcbiIsCisJCXJlZzUwKTsKKworCS8qIGNvbGxlY3QgZGF0YSBhYm91dCBy ZWNvdmVyYWJsZSBhbmQgdW5yZWNvdmVyYWJsZSBlcnJvcnMgKi8KKwlyZWNfY250ID0gKHJlZzUw ICYgQVNQRUVEX01DUl9JTlRSX0NUUkxfQ05UX1JFQykgPj4gMTY7CisJdW5fcmVjX2NudCA9IChy ZWc1MCAmIEFTUEVFRF9NQ1JfSU5UUl9DVFJMX0NOVF9VTlJFQykgPj4gMTI7CisKKwlkZXZfZGJn KG1jaS0+cGRldiwgIiVkIHJlY292ZXJhYmxlIGludGVycnVwdHMgYW5kICVkIHVucmVjb3ZlcmFi bGUgaW50ZXJydXB0c1xuIiwKKwkJcmVjX2NudCwgdW5fcmVjX2NudCk7CisKKwlyZWdtYXBfcmVh ZChhc3BlZWRfZWRhY19yZWdtYXAsIEFTUEVFRF9NQ1JfQUREUl9VTlJFQywgJnJlZzU4KTsKKwl1 bl9yZWNfYWRkciA9IHJlZzU4ID4+IDQ7CisKKwlyZWdtYXBfcmVhZChhc3BlZWRfZWRhY19yZWdt YXAsIEFTUEVFRF9NQ1JfQUREUl9SRUMsICZyZWc1Yyk7CisJcmVjX2FkZHIgPSByZWc1YyA+PiA0 OworCisJLyogY2xlYXIgaW50ZXJydXB0IGZsYWdzIGFuZCBlcnJvciBjb3VudGVyczogKi8KKwlh c3BlZWRfZWRhY19jbGVhcl9pbnRlcnJ1cHRzKCk7CisKKwkvKiBwcm9jZXNzIHJlY292ZXJhYmxl IGFuZCB1bnJlY292ZXJhYmxlIGVycm9ycyAqLworCWlmIChyZWNfY250ID4gMCkKKwkJYXNwZWVk X2VkYWNfY291bnRfcmVjKG1jaSwgcmVjX2NudCwgcmVjX2FkZHIpOworCisJaWYgKHVuX3JlY19j bnQgPiAwKQorCQlhc3BlZWRfZWRhY19jb3VudF91bl9yZWMobWNpLCB1bl9yZWNfY250LCB1bl9y ZWNfYWRkcik7CisKKwlpZiAoKHJlY19jbnQgPT0gMCkgJiYgKHVuX3JlY19jbnQgPT0gMCkpCisJ CWRldl9kYmcobWNpLT5wZGV2LCAicmVjZWl2ZWQgZWRhYyBpbnRlcnJ1cHQsIGJ1dCBkaWQgbm90 IGZpbmQgYW55IGVjYyBjb3VudGVyc1xuIik7CisKKwlyZWdtYXBfcmVhZChhc3BlZWRfZWRhY19y ZWdtYXAsIEFTUEVFRF9NQ1JfSU5UUl9DVFJMLCAmcmVnNTApOworCWRldl9kYmcobWNpLT5wZGV2 LCAiZWRhYyBpbnRlcnJ1cHQgaGFuZGxlZC4gbW1jIHJlZyA1MCBpcyBub3c6IDB4JXhcbiIsCisJ CXJlZzUwKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCitzdGF0aWMgaW50IGFzcGVl ZF9lZGFjX2NvbmZpZ19pcnEodm9pZCAqY3R4LAorCQkJCSAgc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKK3sKKwlpbnQgaXJxOworCWludCByYzsKKworCS8qIHJlZ2lzdGVyIGludGVycnVw dCBoYW5kbGVyICovCisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWRldl9k YmcoJnBkZXYtPmRldiwgImdvdCBpcnEgJWRcbiIsIGlycSk7CisJaWYgKCFpcnEpCisJCXJldHVy biAtRU5PREVWOworCisJcmMgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwgYXNw ZWVkX2VkYWNfaXNyLAorCQkJICAgICAgSVJRRl9UUklHR0VSX0hJR0gsIERSVl9OQU1FLCBjdHgp OworCWlmIChyYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBp cnEgJWRcbiIsIGlycSk7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBlbmFibGUgaW50ZXJydXB0 cyAqLworCWFzcGVlZF9lZGFjX2VuYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwlyZXR1cm4gMDsKK30K KworCitzdGF0aWMgaW50IGFzcGVlZF9lZGFjX2luaXRfY3Nyb3dzKHN0cnVjdCBtZW1fY3RsX2lu Zm8gKm1jaSkKK3sKKwlzdHJ1Y3QgY3Nyb3dfaW5mbyAqY3Nyb3cgPSBtY2ktPmNzcm93c1swXTsK KwlzdHJ1Y3QgZGltbV9pbmZvICpkaW1tOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdTMy IG5yX3BhZ2VzLCBkcmFtX3R5cGU7CisJc3RydWN0IHJlc291cmNlIHI7CisJdTMyIHJlZzA0Owor CWludCByYzsKKworCS8qIHJldHJpZXZlIGluZm8gYWJvdXQgcGh5c2ljYWwgbWVtb3J5IGZyb20g ZGV2aWNlIHRyZWUgKi8KKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvbWVtb3J5Iik7CisK KwlpZiAoIW5wKSB7CisJCWRldl9lcnIobWNpLT5wZGV2LCAiZHQ6IG1pc3NpbmcgL21lbW9yeSBu b2RlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfTsKKworCXJjID0gb2ZfYWRkcmVzc190b19y ZXNvdXJjZShucCwgMCwgJnIpOworCisJb2Zfbm9kZV9wdXQobnApOworCisJaWYgKHJjKSB7CisJ CWRldl9lcnIobWNpLT5wZGV2LCAiZHQ6IGZhaWxlZCByZXF1ZXN0aW5nIHJlc291cmNlIGZvciAv bWVtb3J5IG5vZGVcbiIpOworCQlyZXR1cm4gcmM7CisJfTsKKworCWRldl9kYmcobWNpLT5wZGV2 LCAiZHQ6IC9tZW1vcnkgbm9kZSByZXNvdXJjZXM6IGZpcnN0IHBhZ2Ugci5zdGFydD0weCV4LCBy ZXNvdXJjZV9zaXplPTB4JXgsIFBBR0VfU0hJRlQgbWFjcm89MHgleFxuIiwKKwkJci5zdGFydCwg cmVzb3VyY2Vfc2l6ZSgmciksIFBBR0VfU0hJRlQpOworCisJY3Nyb3ctPmZpcnN0X3BhZ2UgPSBy LnN0YXJ0ID4+IFBBR0VfU0hJRlQ7CisJbnJfcGFnZXMgPSByZXNvdXJjZV9zaXplKCZyKSA+PiBQ QUdFX1NISUZUOworCWNzcm93LT5sYXN0X3BhZ2UgPSBjc3Jvdy0+Zmlyc3RfcGFnZSArIG5yX3Bh Z2VzIC0gMTsKKworCXJlZ21hcF9yZWFkKGFzcGVlZF9lZGFjX3JlZ21hcCwgQVNQRUVEX01DUl9D T05GLCAmcmVnMDQpOworCWRyYW1fdHlwZSA9IChyZWcwNCAmIEFTUEVFRF9NQ1JfQ09ORl9EUkFN X1RZUEUpID8gTUVNX0REUjQgOiBNRU1fRERSMzsKKworCWRpbW0gPSBjc3Jvdy0+Y2hhbm5lbHNb MF0tPmRpbW07CisJZGltbS0+bXR5cGUgPSBkcmFtX3R5cGU7CisJZGltbS0+ZWRhY19tb2RlID0g RURBQ19TRUNERUQ7CisJZGltbS0+bnJfcGFnZXMgPSBucl9wYWdlcyAvIGNzcm93LT5ucl9jaGFu bmVsczsKKworCWRldl9kYmcobWNpLT5wZGV2LCAiaW5pdGlhbGl6ZWQgZGltbSB3aXRoIGZpcnN0 X3BhZ2U9MHglbHggYW5kIG5yX3BhZ2VzPTB4JXhcbiIsCisJCWNzcm93LT5maXJzdF9wYWdlLCBu cl9wYWdlcyk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGFzcGVlZF9lZGFjX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gJnBkZXYtPmRldjsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IHJlc291cmNlICpy ZXM7CisJc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpOworCXN0cnVjdCBlZGFjX21jX2xheWVyIGxh eWVyc1syXTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXUzMiByZWcwNDsKKwlpbnQgcmM7 CisKKwkvKiBzZXR1cCByZWdtYXAgKi8KKwlucCA9IGRldi0+b2Zfbm9kZTsKKworCXJlcyA9IHBs YXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMp CisJCXJldHVybiAtRU5PRU5UOworCisJcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYs IHJlcyk7CisJaWYgKElTX0VSUihyZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVncyk7CisKKwlh c3BlZWRfZWRhY19yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0KGRldiwgTlVMTCwgKF9fZm9yY2Ug dm9pZCAqKXJlZ3MsCisJCQkJCSAgICAgICAmYXNwZWVkX2VkYWNfcmVnbWFwX2NvbmZpZyk7CisJ aWYgKElTX0VSUihhc3BlZWRfZWRhY19yZWdtYXApKQorCQlyZXR1cm4gUFRSX0VSUihhc3BlZWRf ZWRhY19yZWdtYXApOworCisJLyogYmFpbCBvdXQgaWYgRUNDIG1vZGUgaXMgbm90IGNvbmZpZ3Vy ZWQgKi8KKwlyZWdtYXBfcmVhZChhc3BlZWRfZWRhY19yZWdtYXAsIEFTUEVFRF9NQ1JfQ09ORiwg JnJlZzA0KTsKKwlpZiAoIShyZWcwNCAmIEFTUEVFRF9NQ1JfQ09ORl9FQ0MpKSB7CisJCWRldl9l cnIoJnBkZXYtPmRldiwgIkVDQyBtb2RlIGlzIG5vdCBjb25maWd1cmVkIGluIHUtYm9vdFxuIik7 CisJCXJldHVybiAtRVBFUk07CisJfQorCisJZWRhY19vcF9zdGF0ZSA9IEVEQUNfT1BTVEFURV9J TlQ7CisKKwkvKiBhbGxvY2F0ZSAmIGluaXQgRURBQyBNQyBkYXRhIHN0cnVjdHVyZSAqLworCWxh eWVyc1swXS50eXBlID0gRURBQ19NQ19MQVlFUl9DSElQX1NFTEVDVDsKKwlsYXllcnNbMF0uc2l6 ZSA9IDE7CisJbGF5ZXJzWzBdLmlzX3ZpcnRfY3Nyb3cgPSB0cnVlOworCWxheWVyc1sxXS50eXBl ID0gRURBQ19NQ19MQVlFUl9DSEFOTkVMOworCWxheWVyc1sxXS5zaXplID0gMTsKKwlsYXllcnNb MV0uaXNfdmlydF9jc3JvdyA9IGZhbHNlOworCisJbWNpID0gZWRhY19tY19hbGxvYygwLCBBUlJB WV9TSVpFKGxheWVycyksIGxheWVycywgMCk7CisJaWYgKG1jaSA9PSBOVUxMKQorCQlyZXR1cm4g LUVOT01FTTsKKworCW1jaS0+cGRldiA9ICZwZGV2LT5kZXY7CisJbWNpLT5tdHlwZV9jYXAgPSBN RU1fRkxBR19ERFIzIHwgTUVNX0ZMQUdfRERSNDsKKwltY2ktPmVkYWNfY3RsX2NhcCA9IEVEQUNf RkxBR19TRUNERUQ7CisJbWNpLT5lZGFjX2NhcCA9IEVEQUNfRkxBR19TRUNERUQ7CisJbWNpLT5z Y3J1Yl9jYXAgPSBTQ1JVQl9GTEFHX0hXX1NSQzsKKwltY2ktPnNjcnViX21vZGUgPSBTQ1JVQl9I V19TUkM7CisJbWNpLT5tb2RfbmFtZSA9IERSVl9OQU1FOworCW1jaS0+Y3RsX25hbWUgPSAiTUlD IjsKKwltY2ktPmRldl9uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7CisKKwlyYyA9IGFzcGVl ZF9lZGFjX2luaXRfY3Nyb3dzKG1jaSk7CisJaWYgKHJjKSB7CisJCWRldl9lcnIoJnBkZXYtPmRl diwgImZhaWxlZCB0byBpbml0IGNzcm93c1xuIik7CisJCWdvdG8gcHJvYmVfZXhpdDAyOworCX0K KworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jaSk7CisKKwkvKiByZWdpc3RlciB3aXRo IGVkYWMgY29yZSAqLworCXJjID0gZWRhY19tY19hZGRfbWMobWNpKTsKKwlpZiAocmMpIHsKKwkJ ZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHdpdGggRURBQyBjb3JlXG4i KTsKKwkJZ290byBwcm9iZV9leGl0MDI7CisJfQorCisJLyogcmVnaXN0ZXIgaW50ZXJydXB0IGhh bmRsZXIgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJcmMgPSBhc3BlZWRfZWRhY19jb25maWdf aXJxKG1jaSwgcGRldik7CisJaWYgKHJjKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxl ZCBzZXR0aW5nIHVwIGlycVxuIik7CisJCWdvdG8gcHJvYmVfZXhpdDAxOworCX0KKworCXJldHVy biAwOworCitwcm9iZV9leGl0MDE6CisJZWRhY19tY19kZWxfbWMoJnBkZXYtPmRldik7Citwcm9i ZV9leGl0MDI6CisJZWRhY19tY19mcmVlKG1jaSk7CisJcmV0dXJuIHJjOworfQorCisKK3N0YXRp YyBpbnQgYXNwZWVkX2VkYWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7 CisJc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICov CisJYXNwZWVkX2VkYWNfZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwkvKiBmcmVlIHJlc291cmNl cyAqLworCW1jaSA9IGVkYWNfbWNfZGVsX21jKCZwZGV2LT5kZXYpOworCWlmIChtY2kpCisJCWVk YWNfbWNfZnJlZShtY2kpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgYXNwZWVkX2VkYWNfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxl ID0gImFzcGVlZCxhc3QyNTAwLXNkcmFtLWVkYWMiIH0sCisJe30sCit9OworCisKK3N0YXRpYyBz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFzcGVlZF9lZGFjX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9 IHsKKwkJLm5hbWUJPSBEUlZfTkFNRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gYXNwZWVkX2VkYWNf b2ZfbWF0Y2gKKwl9LAorCS5wcm9iZQkJPSBhc3BlZWRfZWRhY19wcm9iZSwKKwkucmVtb3ZlCQk9 IGFzcGVlZF9lZGFjX3JlbW92ZQorfTsKKworCitzdGF0aWMgaW50IF9faW5pdCBhc3BlZWRfZWRh Y19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXNwZWVk X2VkYWNfZHJpdmVyKTsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgYXNwZWVkX2VkYWNfZXhp dCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhc3BlZWRfZWRhY19kcml2 ZXIpOworfQorCisKK21vZHVsZV9pbml0KGFzcGVlZF9lZGFjX2luaXQpOworbW9kdWxlX2V4aXQo YXNwZWVkX2VkYWNfZXhpdCk7CisKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FV VEhPUigiU3RlZmFuIFNjaGFlY2tlbGVyIDxzc2NoYWVja0BjaXNjby5jb20+Iik7CitNT0RVTEVf REVTQ1JJUFRJT04oIkFzcGVlZCBBU1QyNTAwIEVEQUMgZHJpdmVyIik7CitNT0RVTEVfVkVSU0lP TigiMS4wIik7Cg==