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: [v3,4/4] dmaengine: fsl-edma: add ColdFire mcf5441x edma support From: Angelo Dureghello Message-Id: <20180612163517.GA12162@jerusalem> Date: Tue, 12 Jun 2018 18:35:17 +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 ZGQgbWNmLWVkbWEgYXMgbWluaW1hbCBkaWZmZXJlbnQgcGFydHMgZnJvbSBmc2wtZWRtYQoKQ2hh bmdlcyBmb3IgdjM6Cm5vbmUKLS0tCiBkcml2ZXJzL2RtYS9tY2YtZWRtYS5jICAgICAgICAgICAg ICAgICAgICAgfCAyOTkgKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL2xpbnV4L3BsYXRm b3JtX2RhdGEvZG1hLW1jZi1lZG1hLmggfCAgMzggKysrCiAyIGZpbGVzIGNoYW5nZWQsIDMzNyBp bnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEvbWNmLWVkbWEuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9kbWEtbWNmLWVk bWEuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL21jZi1lZG1hLmMgYi9kcml2ZXJzL2RtYS9t Y2YtZWRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOWUxZDU1 YTVjYzkwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvbWNmLWVkbWEuYwpAQCAtMCww ICsxLDI5OSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8vIENvcHly aWdodCAoYykgMjAxMy0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMKKy8vIENvcHly aWdodCAoYykgMjAxNyBTeXNhbSwgQW5nZWxvIER1cmVnaGVsbG8gIDxhbmdlbG9Ac3lzYW0uaXQ+ CisvKgorICogZHJpdmVycy9kbWEvbWNmLWVkbWEuYworICoKKyAqIERyaXZlciBmb3IgdGhlIEZy ZWVzY2FsZSBDb2xkRmlyZSA2NC1jaCBlRE1BIGltcGxlbWVudGF0aW9uLAorICogZGVyaXZlZCBm cm9tIGRyaXZlcnMvZG1hL2ZzbC1lZG1hLmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1 bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJz aW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGlu dXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8 bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9k bWEtbWNmLWVkbWEuaD4KKworI2luY2x1ZGUgImZzbC1lZG1hLWNvbW1vbi5oIgorCisjZGVmaW5l IEVETUFfQ0hBTk5FTFMJCTY0CisjZGVmaW5lIEVETUFfTUFTS19DSCh4KQkJKCh4KSAmIEdFTk1B U0soNSwgMCkpCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtY2ZfZWRtYV90eF9oYW5kbGVyKGludCBp cnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICptY2ZfZWRtYSA9 IGRldl9pZDsKKwlzdHJ1Y3QgZWRtYV9yZWdzICpyZWdzID0gJm1jZl9lZG1hLT5yZWdzOworCXVu c2lnbmVkIGludCBjaDsKKwlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqbWNmX2NoYW47CisJdTY0IGlu dG1hcDsKKworCWludG1hcCA9IGlvcmVhZDMyKHJlZ3MtPmludGgpOworCWludG1hcCA8PD0gMzI7 CisJaW50bWFwIHw9IGlvcmVhZDMyKHJlZ3MtPmludGwpOworCWlmICghaW50bWFwKQorCQlyZXR1 cm4gSVJRX05PTkU7CisKKwlmb3IgKGNoID0gMDsgY2ggPCBtY2ZfZWRtYS0+bl9jaGFuczsgY2gr KykgeworCQlpZiAoaW50bWFwICYgKDB4MSA8PCBjaCkpIHsKKwkJCWlvd3JpdGU4KEVETUFfTUFT S19DSChjaCksIHJlZ3MtPmNpbnQpOworCisJCQltY2ZfY2hhbiA9ICZtY2ZfZWRtYS0+Y2hhbnNb Y2hdOworCisJCQlzcGluX2xvY2soJm1jZl9jaGFuLT52Y2hhbi5sb2NrKTsKKwkJCWlmICghbWNm X2NoYW4tPmVkZXNjLT5pc2N5Y2xpYykgeworCQkJCWxpc3RfZGVsKCZtY2ZfY2hhbi0+ZWRlc2Mt PnZkZXNjLm5vZGUpOworCQkJCXZjaGFuX2Nvb2tpZV9jb21wbGV0ZSgmbWNmX2NoYW4tPmVkZXNj LT52ZGVzYyk7CisJCQkJbWNmX2NoYW4tPmVkZXNjID0gTlVMTDsKKwkJCQltY2ZfY2hhbi0+c3Rh dHVzID0gRE1BX0NPTVBMRVRFOworCQkJCW1jZl9jaGFuLT5pZGxlID0gdHJ1ZTsKKwkJCX0gZWxz ZSB7CisJCQkJdmNoYW5fY3ljbGljX2NhbGxiYWNrKCZtY2ZfY2hhbi0+ZWRlc2MtPnZkZXNjKTsK KwkJCX0KKworCQkJaWYgKCFtY2ZfY2hhbi0+ZWRlc2MpCisJCQkJZnNsX2VkbWFfeGZlcl9kZXNj KG1jZl9jaGFuKTsKKworCQkJc3Bpbl91bmxvY2soJm1jZl9jaGFuLT52Y2hhbi5sb2NrKTsKKwkJ fQorCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IG1j Zl9lZG1hX2Vycl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgZnNs X2VkbWFfZW5naW5lICptY2ZfZWRtYSA9IGRldl9pZDsKKwlzdHJ1Y3QgZWRtYV9yZWdzICpyZWdz ID0gJm1jZl9lZG1hLT5yZWdzOworCXVuc2lnbmVkIGludCBlcnIsIGNoOworCisJZXJyID0gaW9y ZWFkMzIocmVncy0+ZXJybCk7CisJaWYgKCFlcnIpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWZv ciAoY2ggPSAwOyBjaCA8IChFRE1BX0NIQU5ORUxTIC8gMik7IGNoKyspIHsKKwkJaWYgKGVyciAm ICgweDEgPDwgY2gpKSB7CisJCQlmc2xfZWRtYV9kaXNhYmxlX3JlcXVlc3QoJm1jZl9lZG1hLT5j aGFuc1tjaF0pOworCQkJaW93cml0ZTgoRURNQV9DRVJSX0NFUlIoY2gpLCByZWdzLT5jZXJyKTsK KwkJCW1jZl9lZG1hLT5jaGFuc1tjaF0uc3RhdHVzID0gRE1BX0VSUk9SOworCQkJbWNmX2VkbWEt PmNoYW5zW2NoXS5pZGxlID0gdHJ1ZTsKKwkJfQorCX0KKworCWVyciA9IGlvcmVhZDMyKHJlZ3Mt PmVycmgpOworCWlmICghZXJyKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlmb3IgKGNoID0gKEVE TUFfQ0hBTk5FTFMgLyAyKTsgY2ggPCBFRE1BX0NIQU5ORUxTOyBjaCsrKSB7CisJCWlmIChlcnIg JiAoMHgxIDw8IChjaCAtIChFRE1BX0NIQU5ORUxTIC8gMikpKSkgeworCQkJZnNsX2VkbWFfZGlz YWJsZV9yZXF1ZXN0KCZtY2ZfZWRtYS0+Y2hhbnNbY2hdKTsKKwkJCWlvd3JpdGU4KEVETUFfQ0VS Ul9DRVJSKGNoKSwgcmVncy0+Y2Vycik7CisJCQltY2ZfZWRtYS0+Y2hhbnNbY2hdLnN0YXR1cyA9 IERNQV9FUlJPUjsKKwkJCW1jZl9lZG1hLT5jaGFuc1tjaF0uaWRsZSA9IHRydWU7CisJCX0KKwl9 CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgbWNmX2VkbWFfaXJxX2lu aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQlzdHJ1Y3QgZnNsX2VkbWFfZW5n aW5lICptY2ZfZWRtYSkKK3sKKwlpbnQgcmV0ID0gMCwgaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJl czsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwKKwkJCQlJT1JF U09VUkNFX0lSUSwgImVkbWEtdHgtMDAtMTUiKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC0xOwor CisJZm9yIChyZXQgPSAwLCBpID0gcmVzLT5zdGFydDsgaSA8PSByZXMtPmVuZDsgKytpKSB7CisJ CXJldCB8PSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGksCisJCQltY2ZfZWRtYV90eF9o YW5kbGVyLCAwLCAiZURNQSIsIG1jZl9lZG1hKTsKKwl9CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwKKwkJCUlPUkVT T1VSQ0VfSVJRLCAiZWRtYS10eC0xNi01NSIpOworCWlmICghcmVzKQorCQlyZXR1cm4gLTE7CisK Kwlmb3IgKHJldCA9IDAsIGkgPSByZXMtPnN0YXJ0OyBpIDw9IHJlcy0+ZW5kOyArK2kpIHsKKwkJ cmV0IHw9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaSwKKwkJCW1jZl9lZG1hX3R4X2hh bmRsZXIsIDAsICJlRE1BIiwgbWNmX2VkbWEpOworCX0KKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJcmV0ID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgImVkbWEtdHgtNTYtNjMi KTsKKwlpZiAocmV0ICE9IC1FTlhJTykgeworCQlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2 LT5kZXYsIHJldCwKKwkJCW1jZl9lZG1hX3R4X2hhbmRsZXIsIDAsICJlRE1BIiwgbWNmX2VkbWEp OworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9nZXRf aXJxX2J5bmFtZShwZGV2LCAiZWRtYS1lcnIiKTsKKwlpZiAocmV0ICE9IC1FTlhJTykgeworCQly ZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIHJldCwKKwkJCW1jZl9lZG1hX2Vycl9o YW5kbGVyLCAwLCAiZURNQSIsIG1jZl9lZG1hKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWNmX2VkbWFfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbWNmX2VkbWFfcGxhdGZvcm1fZGF0 YSAqcGRhdGE7CisJc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqbWNmX2VkbWE7CisJc3RydWN0IGZz bF9lZG1hX2NoYW4gKm1jZl9jaGFuOworCXN0cnVjdCBlZG1hX3JlZ3MgKnJlZ3M7CisJc3RydWN0 IHJlc291cmNlICpyZXM7CisJaW50IHJldCwgaSwgbGVuLCBjaGFuczsKKworCXBkYXRhID0gZGV2 X2dldF9wbGF0ZGF0YSgmcGRldi0+ZGV2KTsKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm4gUFRSX0VS UihwZGF0YSk7CisKKwljaGFucyA9IHBkYXRhLT5kbWFfY2hhbm5lbHM7CisJbGVuID0gc2l6ZW9m KCptY2ZfZWRtYSkgKyBzaXplb2YoKm1jZl9jaGFuKSAqIGNoYW5zOworCW1jZl9lZG1hID0gZGV2 bV9remFsbG9jKCZwZGV2LT5kZXYsIGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtY2ZfZWRtYSkK KwkJcmV0dXJuIC1FTk9NRU07CisKKwltY2ZfZWRtYS0+bl9jaGFucyA9IGNoYW5zOworCisJLyog U2V0IHVwIHZlcnNpb24gZm9yIENvbGRGaXJlIGVkbWEgKi8KKwltY2ZfZWRtYS0+dmVyc2lvbiA9 IHYyOworCW1jZl9lZG1hLT5iaWdfZW5kaWFuID0gMTsKKworCWlmICghbWNmX2VkbWEtPm5fY2hh bnMpIHsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgInNldHRpbmcgZGVmYXVsdCBjaGFubmVsIG51 bWJlciB0byA2NCIpOworCQltY2ZfZWRtYS0+bl9jaGFucyA9IDY0OworCX0KKworCW11dGV4X2lu aXQoJm1jZl9lZG1hLT5mc2xfZWRtYV9tdXRleCk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVz b3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCisJbWNmX2VkbWEtPm1lbWJhc2UgPSBk ZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKG1jZl9l ZG1hLT5tZW1iYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIobWNmX2VkbWEtPm1lbWJhc2UpOworCisJ ZnNsX2VkbWFfc2V0dXBfcmVncyhtY2ZfZWRtYSk7CisJcmVncyA9ICZtY2ZfZWRtYS0+cmVnczsK KworCUlOSVRfTElTVF9IRUFEKCZtY2ZfZWRtYS0+ZG1hX2Rldi5jaGFubmVscyk7CisJZm9yIChp ID0gMDsgaSA8IG1jZl9lZG1hLT5uX2NoYW5zOyBpKyspIHsKKwkJc3RydWN0IGZzbF9lZG1hX2No YW4gKm1jZl9jaGFuID0gJm1jZl9lZG1hLT5jaGFuc1tpXTsKKworCQltY2ZfY2hhbi0+ZWRtYSA9 IG1jZl9lZG1hOworCQltY2ZfY2hhbi0+c2xhdmVfaWQgPSBpOworCQltY2ZfY2hhbi0+aWRsZSA9 IHRydWU7CisJCW1jZl9jaGFuLT52Y2hhbi5kZXNjX2ZyZWUgPSBmc2xfZWRtYV9mcmVlX2Rlc2M7 CisJCXZjaGFuX2luaXQoJm1jZl9jaGFuLT52Y2hhbiwgJm1jZl9lZG1hLT5kbWFfZGV2KTsKKwkJ aW93cml0ZTMyKDB4MCwgJnJlZ3MtPnRjZFtpXS5jc3IpOworCX0KKworCWlvd3JpdGUzMih+MCwg cmVncy0+aW50aCk7CisJaW93cml0ZTMyKH4wLCByZWdzLT5pbnRsKTsKKworCXJldCA9IG1jZl9l ZG1hX2lycV9pbml0KHBkZXYsIG1jZl9lZG1hKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJZG1hX2NhcF9zZXQoRE1BX1BSSVZBVEUsIG1jZl9lZG1hLT5kbWFfZGV2LmNhcF9tYXNrKTsK KwlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1jZl9lZG1hLT5kbWFfZGV2LmNhcF9tYXNrKTsKKwlk bWFfY2FwX3NldChETUFfQ1lDTElDLCBtY2ZfZWRtYS0+ZG1hX2Rldi5jYXBfbWFzayk7CisKKwlt Y2ZfZWRtYS0+ZG1hX2Rldi5kZXYgPSAmcGRldi0+ZGV2OworCW1jZl9lZG1hLT5kbWFfZGV2LmRl dmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyA9CisJCQlmc2xfZWRtYV9hbGxvY19jaGFuX3Jlc291 cmNlczsKKwltY2ZfZWRtYS0+ZG1hX2Rldi5kZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlcyA9CisJ CQlmc2xfZWRtYV9mcmVlX2NoYW5fcmVzb3VyY2VzOworCW1jZl9lZG1hLT5kbWFfZGV2LmRldmlj ZV9jb25maWcgPSBmc2xfZWRtYV9zbGF2ZV9jb25maWc7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2 aWNlX3ByZXBfZG1hX2N5Y2xpYyA9CisJCQlmc2xfZWRtYV9wcmVwX2RtYV9jeWNsaWM7CisJbWNm X2VkbWEtPmRtYV9kZXYuZGV2aWNlX3ByZXBfc2xhdmVfc2cgPSBmc2xfZWRtYV9wcmVwX3NsYXZl X3NnOworCW1jZl9lZG1hLT5kbWFfZGV2LmRldmljZV90eF9zdGF0dXMgPSBmc2xfZWRtYV90eF9z dGF0dXM7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNlX3BhdXNlID0gZnNsX2VkbWFfcGF1c2U7 CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNlX3Jlc3VtZSA9IGZzbF9lZG1hX3Jlc3VtZTsKKwlt Y2ZfZWRtYS0+ZG1hX2Rldi5kZXZpY2VfdGVybWluYXRlX2FsbCA9IGZzbF9lZG1hX3Rlcm1pbmF0 ZV9hbGw7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSBmc2xfZWRt YV9pc3N1ZV9wZW5kaW5nOworCisJbWNmX2VkbWEtPmRtYV9kZXYuc3JjX2FkZHJfd2lkdGhzID0g RlNMX0VETUFfQlVTV0lEVEhTOworCW1jZl9lZG1hLT5kbWFfZGV2LmRzdF9hZGRyX3dpZHRocyA9 IEZTTF9FRE1BX0JVU1dJRFRIUzsKKwltY2ZfZWRtYS0+ZG1hX2Rldi5kaXJlY3Rpb25zID0KKwkJ CUJJVChETUFfREVWX1RPX01FTSkgfCBCSVQoRE1BX01FTV9UT19ERVYpOworCisJbWNmX2VkbWEt PmRtYV9kZXYuZmlsdGVyLmZuID0gbWNmX2VkbWFfZmlsdGVyX2ZuOworCW1jZl9lZG1hLT5kbWFf ZGV2LmZpbHRlci5tYXAgPSBwZGF0YS0+c2xhdmVfbWFwOworCW1jZl9lZG1hLT5kbWFfZGV2LmZp bHRlci5tYXBjbnQgPSBwZGF0YS0+c2xhdmVjbnQ7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShw ZGV2LCBtY2ZfZWRtYSk7CisKKwlyZXQgPSBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZtY2Zf ZWRtYS0+ZG1hX2Rldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQki Q2FuJ3QgcmVnaXN0ZXIgRnJlZXNjYWxlIGVETUEgZW5naW5lLiAoJWQpXG4iLCByZXQpOworCQly ZXR1cm4gcmV0OworCX0KKworCS8qIEVuYWJsZSByb3VuZCByb2JpbiBhcmJpdHJhdGlvbiAqLwor CWlvd3JpdGUzMihFRE1BX0NSX0VSR0EgfCBFRE1BX0NSX0VSQ0EsIHJlZ3MtPmNyKTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IG1jZl9lZG1hX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKm1jZl9lZG1hID0gcGxh dGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlmc2xfZWRtYV9jbGVhbnVwX3ZjaGFuKCZtY2Zf ZWRtYS0+ZG1hX2Rldik7CisJZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZtY2ZfZWRtYS0+ ZG1hX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgbWNmX2VkbWFfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtY2YtZWRt YSIsCisJfSwKKwkucHJvYmUJCT0gbWNmX2VkbWFfcHJvYmUsCisJLnJlbW92ZQkJPSBtY2ZfZWRt YV9yZW1vdmUsCit9OworCitib29sIG1jZl9lZG1hX2ZpbHRlcl9mbihzdHJ1Y3QgZG1hX2NoYW4g KmNoYW4sIHZvaWQgKnBhcmFtKQoreworCWlmIChjaGFuLT5kZXZpY2UtPmRldi0+ZHJpdmVyID09 ICZtY2ZfZWRtYV9kcml2ZXIuZHJpdmVyKSB7CisJCXN0cnVjdCBmc2xfZWRtYV9jaGFuICptY2Zf Y2hhbiA9IHRvX2ZzbF9lZG1hX2NoYW4oY2hhbik7CisKKwkJcmV0dXJuIChtY2ZfY2hhbi0+c2xh dmVfaWQgPT0gKGludClwYXJhbSk7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorRVhQT1JUX1NZ TUJPTChtY2ZfZWRtYV9maWx0ZXJfZm4pOworCitzdGF0aWMgaW50IF9faW5pdCBtY2ZfZWRtYV9p bml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWNmX2VkbWFf ZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbChtY2ZfZWRtYV9pbml0KTsKKworc3RhdGljIHZv aWQgX19leGl0IG1jZl9lZG1hX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdp c3RlcigmbWNmX2VkbWFfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1jZl9lZG1hX2V4aXQpOwor CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm1jZi1lZG1hIik7CitNT0RVTEVfREVTQ1JJUFRJT04o IkZyZWVzY2FsZSBlRE1BIGVuZ2luZSBkcml2ZXIsIENvbGRGaXJlIGZhbWlseSIpOworTU9EVUxF X0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9k YXRhL2RtYS1tY2YtZWRtYS5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1tY2Yt ZWRtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNGY0NWQwZDQw YWE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1t Y2YtZWRtYS5oCkBAIC0wLDAgKzEsMzggQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wICovCisvKgorICogRnJlZXNjYWxlIGVETUEgcGxhdGZvcm0gZGF0YSwgQ29sZEZpcmUg U29DJ3MgZmFtaWx5LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNyBBbmdlbG8gRHVyZWdoZWxs byA8YW5nZWxvQHh4eHh4eHh4PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fTUFDSF9NQ0ZfRURNQV9IX18KKyNkZWZpbmUg X19NQUNIX01DRl9FRE1BX0hfXworCitzdHJ1Y3QgZG1hX3NsYXZlX21hcDsKKworYm9vbCBtY2Zf ZWRtYV9maWx0ZXJfZm4oc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpwYXJhbSk7CisKKyNk ZWZpbmUgTUNGX0VETUFfRklMVEVSX1BBUkFNKGNoKQkoKHZvaWQgKiljaCkKKworLyoqCisgKiBz dHJ1Y3QgbWNmX2VkbWFfcGxhdGZvcm1fZGF0YSAtIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEgZm9y IGVETUEgZW5naW5lCisgKgorICogQHZlcgkJCVRoZSBlRE1BIG1vZHVsZSB2ZXJzaW9uLgorICog QGRtYV9jaGFubmVscwlUaGUgbnVtYmVyIG9mIGVETUEgY2hhbm5lbHMuCisgKi8KK3N0cnVjdCBt Y2ZfZWRtYV9wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgZG1hX2NoYW5uZWxzOworCWNvbnN0IHN0cnVj dCBkbWFfc2xhdmVfbWFwICpzbGF2ZV9tYXA7CisJaW50IHNsYXZlY250OworfTsKKworI2VuZGlm IC8qIF9fTUFDSF9NQ0ZfRURNQV9IX18gKi8K