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: [v2,4/4] dmaengine: fsl-edma: add ColdFire mcf5441x edma support From: Angelo Dureghello Message-Id: <20180605214608.GA2299@jerusalem> Date: Tue, 5 Jun 2018 23:46:09 +0200 To: dmaengine@vger.kernel.org, vkoul@kernel.org Cc: linux-m68k@vger.kernel.org List-ID: VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIENvbGRGaXJlIG1jZjU0NDF4LWZhbWlseSBlZG1h Cm1vZHVsZS4KClRoZSBDb2xkRmlyZSBlZG1hIG1vZHVsZSBpcyBzbGlnaHRseSBkaWZmZXJlbnQg ZnJvbSBmc2wtZWRtYSwKc28gYSBuZXcgZHJpdmVyIGlzIGFkZGVkLiBCdXQgbW9zdCBvZiB0aGUg Y29kZSBpcyBjb21tb24KYmV0d2VlbiBmc2wtZWRtYSBhbmQgbWNmLWVkbWEgc28gaXQgaGFzIGJl ZW4gY29sbGVjdGVkIGludG8gYQpzZXBhcmF0ZSBjb21tb24gbW9kdWxlIGZzbC1lZG1hLWNvbW1v biAocGF0Y2ggMi80KS4KClNpZ25lZC1vZmYtYnk6IEFuZ2VsbyBEdXJlZ2hlbGxvIDxhbmdlbG9A c3lzYW0uaXQ+Ci0tLQpDaGFuZ2VzIGZvciB2MjoKLSBwYXRjaCBzcGxpdHRlZCBpbnRvIDQKLSBh ZGQgbWNmLWVkbWEgYXMgbWluaW1hbCBkaWZmZXJlbnQgcGFydHMgZnJvbSBmc2wtZWRtYQotLS0K IGRyaXZlcnMvZG1hL21jZi1lZG1hLmMgICAgICAgICAgICAgICAgICAgICB8IDI5OSArKysrKysr KysrKysrKysrKysrKysKIGluY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9kbWEtbWNmLWVkbWEu aCB8ICAzOCArKysKIDIgZmlsZXMgY2hhbmdlZCwgMzM3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2RtYS9tY2YtZWRtYS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5j bHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1tY2YtZWRtYS5oCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9kbWEvbWNmLWVkbWEuYyBiL2RyaXZlcnMvZG1hL21jZi1lZG1hLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45ZTFkNTVhNWNjOTAKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2RtYS9tY2YtZWRtYS5jCkBAIC0wLDAgKzEsMjk5IEBACisvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgRnJl ZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYworLy8gQ29weXJpZ2h0IChjKSAyMDE3IFN5c2FtLCBB bmdlbG8gRHVyZWdoZWxsbyAgPGFuZ2Vsb0BzeXNhbS5pdD4KKy8qCisgKiBkcml2ZXJzL2RtYS9t Y2YtZWRtYS5jCisgKgorICogRHJpdmVyIGZvciB0aGUgRnJlZXNjYWxlIENvbGRGaXJlIDY0LWNo IGVETUEgaW1wbGVtZW50YXRpb24sCisgKiBkZXJpdmVkIGZyb20gZHJpdmVycy9kbWEvZnNsLWVk bWEuYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRo ZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2Us IG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNs dWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu aD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1tY2YtZWRtYS5oPgorCisjaW5j bHVkZSAiZnNsLWVkbWEtY29tbW9uLmgiCisKKyNkZWZpbmUgRURNQV9DSEFOTkVMUwkJNjQKKyNk ZWZpbmUgRURNQV9NQVNLX0NIKHgpCQkoKHgpICYgR0VOTUFTSyg1LCAwKSkKKworc3RhdGljIGly cXJldHVybl90IG1jZl9lZG1hX3R4X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorewor CXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKm1jZl9lZG1hID0gZGV2X2lkOworCXN0cnVjdCBlZG1h X3JlZ3MgKnJlZ3MgPSAmbWNmX2VkbWEtPnJlZ3M7CisJdW5zaWduZWQgaW50IGNoOworCXN0cnVj dCBmc2xfZWRtYV9jaGFuICptY2ZfY2hhbjsKKwl1NjQgaW50bWFwOworCisJaW50bWFwID0gaW9y ZWFkMzIocmVncy0+aW50aCk7CisJaW50bWFwIDw8PSAzMjsKKwlpbnRtYXAgfD0gaW9yZWFkMzIo cmVncy0+aW50bCk7CisJaWYgKCFpbnRtYXApCisJCXJldHVybiBJUlFfTk9ORTsKKworCWZvciAo Y2ggPSAwOyBjaCA8IG1jZl9lZG1hLT5uX2NoYW5zOyBjaCsrKSB7CisJCWlmIChpbnRtYXAgJiAo MHgxIDw8IGNoKSkgeworCQkJaW93cml0ZTgoRURNQV9NQVNLX0NIKGNoKSwgcmVncy0+Y2ludCk7 CisKKwkJCW1jZl9jaGFuID0gJm1jZl9lZG1hLT5jaGFuc1tjaF07CisKKwkJCXNwaW5fbG9jaygm bWNmX2NoYW4tPnZjaGFuLmxvY2spOworCQkJaWYgKCFtY2ZfY2hhbi0+ZWRlc2MtPmlzY3ljbGlj KSB7CisJCQkJbGlzdF9kZWwoJm1jZl9jaGFuLT5lZGVzYy0+dmRlc2Mubm9kZSk7CisJCQkJdmNo YW5fY29va2llX2NvbXBsZXRlKCZtY2ZfY2hhbi0+ZWRlc2MtPnZkZXNjKTsKKwkJCQltY2ZfY2hh bi0+ZWRlc2MgPSBOVUxMOworCQkJCW1jZl9jaGFuLT5zdGF0dXMgPSBETUFfQ09NUExFVEU7CisJ CQkJbWNmX2NoYW4tPmlkbGUgPSB0cnVlOworCQkJfSBlbHNlIHsKKwkJCQl2Y2hhbl9jeWNsaWNf Y2FsbGJhY2soJm1jZl9jaGFuLT5lZGVzYy0+dmRlc2MpOworCQkJfQorCisJCQlpZiAoIW1jZl9j aGFuLT5lZGVzYykKKwkJCQlmc2xfZWRtYV94ZmVyX2Rlc2MobWNmX2NoYW4pOworCisJCQlzcGlu X3VubG9jaygmbWNmX2NoYW4tPnZjaGFuLmxvY2spOworCQl9CisJfQorCisJcmV0dXJuIElSUV9I QU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWNmX2VkbWFfZXJyX2hhbmRsZXIoaW50 IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKm1jZl9lZG1h ID0gZGV2X2lkOworCXN0cnVjdCBlZG1hX3JlZ3MgKnJlZ3MgPSAmbWNmX2VkbWEtPnJlZ3M7CisJ dW5zaWduZWQgaW50IGVyciwgY2g7CisKKwllcnIgPSBpb3JlYWQzMihyZWdzLT5lcnJsKTsKKwlp ZiAoIWVycikKKwkJcmV0dXJuIElSUV9OT05FOworCisJZm9yIChjaCA9IDA7IGNoIDwgKEVETUFf Q0hBTk5FTFMgLyAyKTsgY2grKykgeworCQlpZiAoZXJyICYgKDB4MSA8PCBjaCkpIHsKKwkJCWZz bF9lZG1hX2Rpc2FibGVfcmVxdWVzdCgmbWNmX2VkbWEtPmNoYW5zW2NoXSk7CisJCQlpb3dyaXRl OChFRE1BX0NFUlJfQ0VSUihjaCksIHJlZ3MtPmNlcnIpOworCQkJbWNmX2VkbWEtPmNoYW5zW2No XS5zdGF0dXMgPSBETUFfRVJST1I7CisJCQltY2ZfZWRtYS0+Y2hhbnNbY2hdLmlkbGUgPSB0cnVl OworCQl9CisJfQorCisJZXJyID0gaW9yZWFkMzIocmVncy0+ZXJyaCk7CisJaWYgKCFlcnIpCisJ CXJldHVybiBJUlFfTk9ORTsKKworCWZvciAoY2ggPSAoRURNQV9DSEFOTkVMUyAvIDIpOyBjaCA8 IEVETUFfQ0hBTk5FTFM7IGNoKyspIHsKKwkJaWYgKGVyciAmICgweDEgPDwgKGNoIC0gKEVETUFf Q0hBTk5FTFMgLyAyKSkpKSB7CisJCQlmc2xfZWRtYV9kaXNhYmxlX3JlcXVlc3QoJm1jZl9lZG1h LT5jaGFuc1tjaF0pOworCQkJaW93cml0ZTgoRURNQV9DRVJSX0NFUlIoY2gpLCByZWdzLT5jZXJy KTsKKwkJCW1jZl9lZG1hLT5jaGFuc1tjaF0uc3RhdHVzID0gRE1BX0VSUk9SOworCQkJbWNmX2Vk bWEtPmNoYW5zW2NoXS5pZGxlID0gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBJUlFfSEFORExF RDsKK30KKworc3RhdGljIGludCBtY2ZfZWRtYV9pcnFfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2LAorCQkJCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKm1jZl9lZG1hKQoreworCWlu dCByZXQgPSAwLCBpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJcmVzID0gcGxhdGZvcm1f Z2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LAorCQkJCUlPUkVTT1VSQ0VfSVJRLCAiZWRtYS10eC0w MC0xNSIpOworCWlmICghcmVzKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKHJldCA9IDAsIGkgPSBy ZXMtPnN0YXJ0OyBpIDw9IHJlcy0+ZW5kOyArK2kpIHsKKwkJcmV0IHw9IGRldm1fcmVxdWVzdF9p cnEoJnBkZXYtPmRldiwgaSwKKwkJCW1jZl9lZG1hX3R4X2hhbmRsZXIsIDAsICJlRE1BIiwgbWNm X2VkbWEpOworCX0KKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmVzID0gcGxhdGZvcm1f Z2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LAorCQkJSU9SRVNPVVJDRV9JUlEsICJlZG1hLXR4LTE2 LTU1Iik7CisJaWYgKCFyZXMpCisJCXJldHVybiAtMTsKKworCWZvciAocmV0ID0gMCwgaSA9IHJl cy0+c3RhcnQ7IGkgPD0gcmVzLT5lbmQ7ICsraSkgeworCQlyZXQgfD0gZGV2bV9yZXF1ZXN0X2ly cSgmcGRldi0+ZGV2LCBpLAorCQkJbWNmX2VkbWFfdHhfaGFuZGxlciwgMCwgImVETUEiLCBtY2Zf ZWRtYSk7CisJfQorCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBwbGF0Zm9ybV9n ZXRfaXJxX2J5bmFtZShwZGV2LCAiZWRtYS10eC01Ni02MyIpOworCWlmIChyZXQgIT0gLUVOWElP KSB7CisJCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgcmV0LAorCQkJbWNmX2Vk bWFfdHhfaGFuZGxlciwgMCwgImVETUEiLCBtY2ZfZWRtYSk7CisJCWlmIChyZXQpCisJCQlyZXR1 cm4gcmV0OworCX0KKworCXJldCA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJlZG1h LWVyciIpOworCWlmIChyZXQgIT0gLUVOWElPKSB7CisJCXJldCA9IGRldm1fcmVxdWVzdF9pcnEo JnBkZXYtPmRldiwgcmV0LAorCQkJbWNmX2VkbWFfZXJyX2hhbmRsZXIsIDAsICJlRE1BIiwgbWNm X2VkbWEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBtY2ZfZWRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQoreworCXN0cnVjdCBtY2ZfZWRtYV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgZnNs X2VkbWFfZW5naW5lICptY2ZfZWRtYTsKKwlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqbWNmX2NoYW47 CisJc3RydWN0IGVkbWFfcmVncyAqcmVnczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQg cmV0LCBpLCBsZW4sIGNoYW5zOworCisJcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5k ZXYpOworCWlmICghcGRhdGEpCisJCXJldHVybiBQVFJfRVJSKHBkYXRhKTsKKworCWNoYW5zID0g cGRhdGEtPmRtYV9jaGFubmVsczsKKwlsZW4gPSBzaXplb2YoKm1jZl9lZG1hKSArIHNpemVvZigq bWNmX2NoYW4pICogY2hhbnM7CisJbWNmX2VkbWEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwg bGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1jZl9lZG1hKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CW1jZl9lZG1hLT5uX2NoYW5zID0gY2hhbnM7CisKKwkvKiBTZXQgdXAgdmVyc2lvbiBmb3IgQ29s ZEZpcmUgZWRtYSAqLworCW1jZl9lZG1hLT52ZXJzaW9uID0gdjI7CisJbWNmX2VkbWEtPmJpZ19l bmRpYW4gPSAxOworCisJaWYgKCFtY2ZfZWRtYS0+bl9jaGFucykgeworCQlkZXZfaW5mbygmcGRl di0+ZGV2LCAic2V0dGluZyBkZWZhdWx0IGNoYW5uZWwgbnVtYmVyIHRvIDY0Iik7CisJCW1jZl9l ZG1hLT5uX2NoYW5zID0gNjQ7CisJfQorCisJbXV0ZXhfaW5pdCgmbWNmX2VkbWEtPmZzbF9lZG1h X211dGV4KTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNF X01FTSwgMCk7CisKKwltY2ZfZWRtYS0+bWVtYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgm cGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIobWNmX2VkbWEtPm1lbWJhc2UpKQorCQlyZXR1 cm4gUFRSX0VSUihtY2ZfZWRtYS0+bWVtYmFzZSk7CisKKwlmc2xfZWRtYV9zZXR1cF9yZWdzKG1j Zl9lZG1hKTsKKwlyZWdzID0gJm1jZl9lZG1hLT5yZWdzOworCisJSU5JVF9MSVNUX0hFQUQoJm1j Zl9lZG1hLT5kbWFfZGV2LmNoYW5uZWxzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbWNmX2VkbWEtPm5f Y2hhbnM7IGkrKykgeworCQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqbWNmX2NoYW4gPSAmbWNmX2Vk bWEtPmNoYW5zW2ldOworCisJCW1jZl9jaGFuLT5lZG1hID0gbWNmX2VkbWE7CisJCW1jZl9jaGFu LT5zbGF2ZV9pZCA9IGk7CisJCW1jZl9jaGFuLT5pZGxlID0gdHJ1ZTsKKwkJbWNmX2NoYW4tPnZj aGFuLmRlc2NfZnJlZSA9IGZzbF9lZG1hX2ZyZWVfZGVzYzsKKwkJdmNoYW5faW5pdCgmbWNmX2No YW4tPnZjaGFuLCAmbWNmX2VkbWEtPmRtYV9kZXYpOworCQlpb3dyaXRlMzIoMHgwLCAmcmVncy0+ dGNkW2ldLmNzcik7CisJfQorCisJaW93cml0ZTMyKH4wLCByZWdzLT5pbnRoKTsKKwlpb3dyaXRl MzIofjAsIHJlZ3MtPmludGwpOworCisJcmV0ID0gbWNmX2VkbWFfaXJxX2luaXQocGRldiwgbWNm X2VkbWEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkbWFfY2FwX3NldChETUFfUFJJ VkFURSwgbWNmX2VkbWEtPmRtYV9kZXYuY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFW RSwgbWNmX2VkbWEtPmRtYV9kZXYuY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9DWUNMSUMs IG1jZl9lZG1hLT5kbWFfZGV2LmNhcF9tYXNrKTsKKworCW1jZl9lZG1hLT5kbWFfZGV2LmRldiA9 ICZwZGV2LT5kZXY7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3Vy Y2VzID0KKwkJCWZzbF9lZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzOworCW1jZl9lZG1hLT5kbWFf ZGV2LmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzID0KKwkJCWZzbF9lZG1hX2ZyZWVfY2hhbl9y ZXNvdXJjZXM7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNlX2NvbmZpZyA9IGZzbF9lZG1hX3Ns YXZlX2NvbmZpZzsKKwltY2ZfZWRtYS0+ZG1hX2Rldi5kZXZpY2VfcHJlcF9kbWFfY3ljbGljID0K KwkJCWZzbF9lZG1hX3ByZXBfZG1hX2N5Y2xpYzsKKwltY2ZfZWRtYS0+ZG1hX2Rldi5kZXZpY2Vf cHJlcF9zbGF2ZV9zZyA9IGZzbF9lZG1hX3ByZXBfc2xhdmVfc2c7CisJbWNmX2VkbWEtPmRtYV9k ZXYuZGV2aWNlX3R4X3N0YXR1cyA9IGZzbF9lZG1hX3R4X3N0YXR1czsKKwltY2ZfZWRtYS0+ZG1h X2Rldi5kZXZpY2VfcGF1c2UgPSBmc2xfZWRtYV9wYXVzZTsKKwltY2ZfZWRtYS0+ZG1hX2Rldi5k ZXZpY2VfcmVzdW1lID0gZnNsX2VkbWFfcmVzdW1lOworCW1jZl9lZG1hLT5kbWFfZGV2LmRldmlj ZV90ZXJtaW5hdGVfYWxsID0gZnNsX2VkbWFfdGVybWluYXRlX2FsbDsKKwltY2ZfZWRtYS0+ZG1h X2Rldi5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IGZzbF9lZG1hX2lzc3VlX3BlbmRpbmc7CisKKwlt Y2ZfZWRtYS0+ZG1hX2Rldi5zcmNfYWRkcl93aWR0aHMgPSBGU0xfRURNQV9CVVNXSURUSFM7CisJ bWNmX2VkbWEtPmRtYV9kZXYuZHN0X2FkZHJfd2lkdGhzID0gRlNMX0VETUFfQlVTV0lEVEhTOwor CW1jZl9lZG1hLT5kbWFfZGV2LmRpcmVjdGlvbnMgPQorCQkJQklUKERNQV9ERVZfVE9fTUVNKSB8 IEJJVChETUFfTUVNX1RPX0RFVik7CisKKwltY2ZfZWRtYS0+ZG1hX2Rldi5maWx0ZXIuZm4gPSBt Y2ZfZWRtYV9maWx0ZXJfZm47CisJbWNmX2VkbWEtPmRtYV9kZXYuZmlsdGVyLm1hcCA9IHBkYXRh LT5zbGF2ZV9tYXA7CisJbWNmX2VkbWEtPmRtYV9kZXYuZmlsdGVyLm1hcGNudCA9IHBkYXRhLT5z bGF2ZWNudDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jZl9lZG1hKTsKKworCXJl dCA9IGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJm1jZl9lZG1hLT5kbWFfZGV2KTsKKwlpZiAo cmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJDYW4ndCByZWdpc3RlciBGcmVlc2Nh bGUgZURNQSBlbmdpbmUuICglZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyog RW5hYmxlIHJvdW5kIHJvYmluIGFyYml0cmF0aW9uICovCisJaW93cml0ZTMyKEVETUFfQ1JfRVJH QSB8IEVETUFfQ1JfRVJDQSwgcmVncy0+Y3IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgbWNmX2VkbWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3Ry dWN0IGZzbF9lZG1hX2VuZ2luZSAqbWNmX2VkbWEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2 KTsKKworCWZzbF9lZG1hX2NsZWFudXBfdmNoYW4oJm1jZl9lZG1hLT5kbWFfZGV2KTsKKwlkbWFf YXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJm1jZl9lZG1hLT5kbWFfZGV2KTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtY2ZfZWRtYV9kcml2ZXIgPSB7 CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1jZi1lZG1hIiwKKwl9LAorCS5wcm9iZQkJPSBt Y2ZfZWRtYV9wcm9iZSwKKwkucmVtb3ZlCQk9IG1jZl9lZG1hX3JlbW92ZSwKK307CisKK2Jvb2wg bWNmX2VkbWFfZmlsdGVyX2ZuKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqcGFyYW0pCit7 CisJaWYgKGNoYW4tPmRldmljZS0+ZGV2LT5kcml2ZXIgPT0gJm1jZl9lZG1hX2RyaXZlci5kcml2 ZXIpIHsKKwkJc3RydWN0IGZzbF9lZG1hX2NoYW4gKm1jZl9jaGFuID0gdG9fZnNsX2VkbWFfY2hh bihjaGFuKTsKKworCQlyZXR1cm4gKG1jZl9jaGFuLT5zbGF2ZV9pZCA9PSAoaW50KXBhcmFtKTsK Kwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MKG1jZl9lZG1hX2ZpbHRlcl9m bik7CisKK3N0YXRpYyBpbnQgX19pbml0IG1jZl9lZG1hX2luaXQodm9pZCkKK3sKKwlyZXR1cm4g cGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtY2ZfZWRtYV9kcml2ZXIpOworfQorc3Vic3lzX2lu aXRjYWxsKG1jZl9lZG1hX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWNmX2VkbWFfZXhp dCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtY2ZfZWRtYV9kcml2ZXIp OworfQorbW9kdWxlX2V4aXQobWNmX2VkbWFfZXhpdCk7CisKK01PRFVMRV9BTElBUygicGxhdGZv cm06bWNmLWVkbWEiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIGVETUEgZW5naW5l IGRyaXZlciwgQ29sZEZpcmUgZmFtaWx5Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRp ZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvZG1hLW1jZi1lZG1hLmggYi9p bmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvZG1hLW1jZi1lZG1hLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40ZjQ1ZDBkNDBhYTcKLS0tIC9kZXYvbnVsbAorKysg Yi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvZG1hLW1jZi1lZG1hLmgKQEAgLTAsMCArMSwz OCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBGcmVl c2NhbGUgZURNQSBwbGF0Zm9ybSBkYXRhLCBDb2xkRmlyZSBTb0MncyBmYW1pbHkuCisgKgorICog Q29weXJpZ2h0IChjKSAyMDE3IEFuZ2VsbyBEdXJlZ2hlbGxvIDxhbmdlbG9AeHh4eHh4eHg+Cisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNp Zm5kZWYgX19NQUNIX01DRl9FRE1BX0hfXworI2RlZmluZSBfX01BQ0hfTUNGX0VETUFfSF9fCisK K3N0cnVjdCBkbWFfc2xhdmVfbWFwOworCitib29sIG1jZl9lZG1hX2ZpbHRlcl9mbihzdHJ1Y3Qg ZG1hX2NoYW4gKmNoYW4sIHZvaWQgKnBhcmFtKTsKKworI2RlZmluZSBNQ0ZfRURNQV9GSUxURVJf UEFSQU0oY2gpCSgodm9pZCAqKWNoKQorCisvKioKKyAqIHN0cnVjdCBtY2ZfZWRtYV9wbGF0Zm9y bV9kYXRhIC0gcGxhdGZvcm0gc3BlY2lmaWMgZGF0YSBmb3IgZURNQSBlbmdpbmUKKyAqCisgKiBA dmVyCQkJVGhlIGVETUEgbW9kdWxlIHZlcnNpb24uCisgKiBAZG1hX2NoYW5uZWxzCVRoZSBudW1i ZXIgb2YgZURNQSBjaGFubmVscy4KKyAqLworc3RydWN0IG1jZl9lZG1hX3BsYXRmb3JtX2RhdGEg eworCWludCBkbWFfY2hhbm5lbHM7CisJY29uc3Qgc3RydWN0IGRtYV9zbGF2ZV9tYXAgKnNsYXZl X21hcDsKKwlpbnQgc2xhdmVjbnQ7Cit9OworCisjZW5kaWYgLyogX19NQUNIX01DRl9FRE1BX0hf XyAqLwo=