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: [v6,2/2] dmaengine: fsl-edma: add ColdFire mcf5441x edma support From: Angelo Dureghello Message-Id: <20180701163327.13640-2-angelo@sysam.it> Date: Sun, 1 Jul 2018 18:33:27 +0200 To: vinod.koul@linaro.org Cc: dmaengine@vger.kernel.org, linux-m68k@vger.kernel.org, Angelo Dureghello List-ID: VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIENvbGRGaXJlIG1jZjU0NDF4LWZhbWlseSBlZG1h Cm1vZHVsZS4KClRoZSBDb2xkRmlyZSBlZG1hIG1vZHVsZSBpcyBzbGlnaHRseSBkaWZmZXJlbnQg ZnJvbSBmc2wtZWRtYSwKc28gYSBuZXcgZHJpdmVyIGlzIGFkZGVkLiBCdXQgbW9zdCBvZiB0aGUg Y29kZSBpcyBjb21tb24KYmV0d2VlbiBmc2wtZWRtYSBhbmQgbWNmLWVkbWEgc28gaXQgaGFzIGJl ZW4gY29sbGVjdGVkIGludG8gYQpzZXBhcmF0ZSBjb21tb24gbW9kdWxlIGZzbC1lZG1hLWNvbW1v biAocGF0Y2ggMS8yKS4KClNpZ25lZC1vZmYtYnk6IEFuZ2VsbyBEdXJlZ2hlbGxvIDxhbmdlbG9A c3lzYW0uaXQ+Ci0tLQpDaGFuZ2VzIGZvciB2MjoKLSBwYXRjaCBzcGxpdHRlZCBpbnRvIDQKLSBh ZGQgbWNmLWVkbWEgYXMgbWluaW1hbCBkaWZmZXJlbnQgcGFydHMgZnJvbSBmc2wtZWRtYQoKQ2hh bmdlcyBmb3IgdjM6Cm5vbmUKCkNoYW5nZXMgZm9yIHY0OgotIHBhdGNoIHNpbXBsaWZpZWQgZnJv bSA0LzQgaW50byAyLzIKLSBjb2xsZWN0aW5nIGFsbCB0aGUgbWNmLWVkbWEtcmVsYXRlZCBjaGFu Z2VzCgpDaGFuZ2VzIGZvciB2NToKbm9uZQoKQ2hhbmdlcyBmb3IgdjY6Ci0gYWRqdXN0ZWQgY29t bWVudCBoZWFkZXIKLSBmaXhlZCBiaXQgc2hpZnQgd2l0aCBCSVQoKQotIHdlIG5lZWQgdG8gZnJl ZSB0aGUgaW50ZXJydXB0cyBhdCByZW1vdmUoKSwgc28gcmVtb3ZlZCBhbGwgZGV2bV8KICBpbnRl cnJ1cHQgcmVsYXRlZCBjYWxscwotLS0KIGRyaXZlcnMvZG1hL0tjb25maWcgICAgICAgICAgICAg ICAgICAgICAgICB8ICAxMSArCiBkcml2ZXJzL2RtYS9NYWtlZmlsZSAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDEgKwogZHJpdmVycy9kbWEvbWNmLWVkbWEuYyAgICAgICAgICAgICAgICAgICAg IHwgMzE1ICsrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRh L2RtYS1tY2YtZWRtYS5oIHwgIDM4ICsrKwogNCBmaWxlcyBjaGFuZ2VkLCAzNjUgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hL21jZi1lZG1hLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvZG1hLW1jZi1lZG1hLmgKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9LY29uZmlnIGIvZHJpdmVycy9kbWEvS2NvbmZpZwppbmRl eCBjYTE2ODBhZmEyMGEuLjIzZjQ0NDYwODUxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvS2Nv bmZpZworKysgYi9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC0zMjAsNiArMzIwLDE3IEBAIGNvbmZp ZyBMUEMxOFhYX0RNQU1VWAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIERNQSBvbiBOWFAgTFBDMTh4 eC80M3h4IHBsYXRmb3JtcwogCSAgd2l0aCBQTDA4MCBhbmQgbXVsdGlwbGV4ZWQgRE1BIHJlcXVl c3QgbGluZXMuCiAKK2NvbmZpZyBNQ0ZfRURNQQorICAgICAgICB0cmlzdGF0ZSAiRnJlZXNjYWxl IGVETUEgZW5naW5lIHN1cHBvcnQsIENvbGRGaXJlIG1jZjU0NDF4IFNvQ3MiCisgICAgICAgIGRl cGVuZHMgb24gTTU0NDF4CisgICAgICAgIHNlbGVjdCBETUFfRU5HSU5FCisgICAgICAgIHNlbGVj dCBETUFfVklSVFVBTF9DSEFOTkVMUworICAgICAgICBoZWxwCisgICAgICAgICAgU3VwcG9ydCB0 aGUgRnJlZXNjYWxlIENvbGRGaXJlIGVETUEgZW5naW5lLCA2NC1jaGFubmVsCisgICAgICAgICAg aW1wbGVtZW50YXRpb24gdGhhdCBwZXJmb3JtcyBjb21wbGV4IGRhdGEgdHJhbnNmZXJzIHdpdGgK KyAgICAgICAgICBtaW5pbWFsIGludGVydmVudGlvbiBmcm9tIGEgaG9zdCBwcm9jZXNzb3IuCisg ICAgICAgICAgVGhpcyBtb2R1bGUgY2FuIGJlIGZvdW5kIG9uIEZyZWVzY2FsZSBDb2xkRmlyZSBt Y2Y1NDQxeCBTb0NzLgorCiBjb25maWcgTU1QX1BETUEKIAlib29sICJNTVAgUERNQSBzdXBwb3J0 IgogCWRlcGVuZHMgb24gQVJDSF9NTVAgfHwgQVJDSF9QWEEgfHwgQ09NUElMRV9URVNUCmRpZmYg LS1naXQgYS9kcml2ZXJzL2RtYS9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hL01ha2VmaWxlCmluZGV4 IDY2MDIyZjU5ZmNhNC4uZDk3ZjMxN2Y0YjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9NYWtl ZmlsZQorKysgYi9kcml2ZXJzL2RtYS9NYWtlZmlsZQpAQCAtMzIsNiArMzIsNyBAQCBvYmotJChD T05GSUdfRFdfRE1BQ19DT1JFKSArPSBkdy8KIG9iai0kKENPTkZJR19FUDkzWFhfRE1BKSArPSBl cDkzeHhfZG1hLm8KIG9iai0kKENPTkZJR19GU0xfRE1BKSArPSBmc2xkbWEubwogb2JqLSQoQ09O RklHX0ZTTF9FRE1BKSArPSBmc2wtZWRtYS5vIGZzbC1lZG1hLWNvbW1vbi5vCitvYmotJChDT05G SUdfTUNGX0VETUEpICs9IG1jZi1lZG1hLm8gZnNsLWVkbWEtY29tbW9uLm8KIG9iai0kKENPTkZJ R19GU0xfUkFJRCkgKz0gZnNsX3JhaWQubwogb2JqLSQoQ09ORklHX0hTVV9ETUEpICs9IGhzdS8K IG9iai0kKENPTkZJR19JTUdfTURDX0RNQSkgKz0gaW1nLW1kYy1kbWEubwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9kbWEvbWNmLWVkbWEuYyBiL2RyaXZlcnMvZG1hL21jZi1lZG1hLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zMWU1MzE3YThmOTAKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2RtYS9tY2YtZWRtYS5jCkBAIC0wLDAgKzEsMzE1IEBACisvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMy0y MDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMKKy8vIENvcHlyaWdodCAoYykgMjAxNyBT eXNhbSwgQW5nZWxvIER1cmVnaGVsbG8gIDxhbmdlbG9Ac3lzYW0uaXQ+CisKKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxs aW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNp bmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1tY2YtZWRtYS5oPgorCisjaW5jbHVkZSAi ZnNsLWVkbWEtY29tbW9uLmgiCisKKyNkZWZpbmUgRURNQV9DSEFOTkVMUwkJNjQKKyNkZWZpbmUg RURNQV9NQVNLX0NIKHgpCQkoKHgpICYgR0VOTUFTSyg1LCAwKSkKKworc3RhdGljIGlycXJldHVy bl90IG1jZl9lZG1hX3R4X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVj dCBmc2xfZWRtYV9lbmdpbmUgKm1jZl9lZG1hID0gZGV2X2lkOworCXN0cnVjdCBlZG1hX3JlZ3Mg KnJlZ3MgPSAmbWNmX2VkbWEtPnJlZ3M7CisJdW5zaWduZWQgaW50IGNoOworCXN0cnVjdCBmc2xf ZWRtYV9jaGFuICptY2ZfY2hhbjsKKwl1NjQgaW50bWFwOworCisJaW50bWFwID0gaW9yZWFkMzIo cmVncy0+aW50aCk7CisJaW50bWFwIDw8PSAzMjsKKwlpbnRtYXAgfD0gaW9yZWFkMzIocmVncy0+ aW50bCk7CisJaWYgKCFpbnRtYXApCisJCXJldHVybiBJUlFfTk9ORTsKKworCWZvciAoY2ggPSAw OyBjaCA8IG1jZl9lZG1hLT5uX2NoYW5zOyBjaCsrKSB7CisJCWlmIChpbnRtYXAgJiBCSVQoY2gp KSB7CisJCQlpb3dyaXRlOChFRE1BX01BU0tfQ0goY2gpLCByZWdzLT5jaW50KTsKKworCQkJbWNm X2NoYW4gPSAmbWNmX2VkbWEtPmNoYW5zW2NoXTsKKworCQkJc3Bpbl9sb2NrKCZtY2ZfY2hhbi0+ dmNoYW4ubG9jayk7CisJCQlpZiAoIW1jZl9jaGFuLT5lZGVzYy0+aXNjeWNsaWMpIHsKKwkJCQls aXN0X2RlbCgmbWNmX2NoYW4tPmVkZXNjLT52ZGVzYy5ub2RlKTsKKwkJCQl2Y2hhbl9jb29raWVf Y29tcGxldGUoJm1jZl9jaGFuLT5lZGVzYy0+dmRlc2MpOworCQkJCW1jZl9jaGFuLT5lZGVzYyA9 IE5VTEw7CisJCQkJbWNmX2NoYW4tPnN0YXR1cyA9IERNQV9DT01QTEVURTsKKwkJCQltY2ZfY2hh bi0+aWRsZSA9IHRydWU7CisJCQl9IGVsc2UgeworCQkJCXZjaGFuX2N5Y2xpY19jYWxsYmFjaygm bWNmX2NoYW4tPmVkZXNjLT52ZGVzYyk7CisJCQl9CisKKwkJCWlmICghbWNmX2NoYW4tPmVkZXNj KQorCQkJCWZzbF9lZG1hX3hmZXJfZGVzYyhtY2ZfY2hhbik7CisKKwkJCXNwaW5fdW5sb2NrKCZt Y2ZfY2hhbi0+dmNoYW4ubG9jayk7CisJCX0KKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9 CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtY2ZfZWRtYV9lcnJfaGFuZGxlcihpbnQgaXJxLCB2b2lk ICpkZXZfaWQpCit7CisJc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqbWNmX2VkbWEgPSBkZXZfaWQ7 CisJc3RydWN0IGVkbWFfcmVncyAqcmVncyA9ICZtY2ZfZWRtYS0+cmVnczsKKwl1bnNpZ25lZCBp bnQgZXJyLCBjaDsKKworCWVyciA9IGlvcmVhZDMyKHJlZ3MtPmVycmwpOworCWlmICghZXJyKQor CQlyZXR1cm4gSVJRX05PTkU7CisKKwlmb3IgKGNoID0gMDsgY2ggPCAoRURNQV9DSEFOTkVMUyAv IDIpOyBjaCsrKSB7CisJCWlmIChlcnIgJiBCSVQoY2gpKSB7CisJCQlmc2xfZWRtYV9kaXNhYmxl X3JlcXVlc3QoJm1jZl9lZG1hLT5jaGFuc1tjaF0pOworCQkJaW93cml0ZTgoRURNQV9DRVJSX0NF UlIoY2gpLCByZWdzLT5jZXJyKTsKKwkJCW1jZl9lZG1hLT5jaGFuc1tjaF0uc3RhdHVzID0gRE1B X0VSUk9SOworCQkJbWNmX2VkbWEtPmNoYW5zW2NoXS5pZGxlID0gdHJ1ZTsKKwkJfQorCX0KKwor CWVyciA9IGlvcmVhZDMyKHJlZ3MtPmVycmgpOworCWlmICghZXJyKQorCQlyZXR1cm4gSVJRX05P TkU7CisKKwlmb3IgKGNoID0gKEVETUFfQ0hBTk5FTFMgLyAyKTsgY2ggPCBFRE1BX0NIQU5ORUxT OyBjaCsrKSB7CisJCWlmIChlcnIgJiAoQklUKGNoIC0gKEVETUFfQ0hBTk5FTFMgLyAyKSkpKSB7 CisJCQlmc2xfZWRtYV9kaXNhYmxlX3JlcXVlc3QoJm1jZl9lZG1hLT5jaGFuc1tjaF0pOworCQkJ aW93cml0ZTgoRURNQV9DRVJSX0NFUlIoY2gpLCByZWdzLT5jZXJyKTsKKwkJCW1jZl9lZG1hLT5j aGFuc1tjaF0uc3RhdHVzID0gRE1BX0VSUk9SOworCQkJbWNmX2VkbWEtPmNoYW5zW2NoXS5pZGxl ID0gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlu dCBtY2ZfZWRtYV9pcnFfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCXN0 cnVjdCBmc2xfZWRtYV9lbmdpbmUgKm1jZl9lZG1hKQoreworCWludCByZXQgPSAwLCBpOworCXN0 cnVjdCByZXNvdXJjZSAqcmVzOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFt ZShwZGV2LAorCQkJCUlPUkVTT1VSQ0VfSVJRLCAiZWRtYS10eC0wMC0xNSIpOworCWlmICghcmVz KQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKHJldCA9IDAsIGkgPSByZXMtPnN0YXJ0OyBpIDw9IHJl cy0+ZW5kOyArK2kpCisJCXJldCB8PSByZXF1ZXN0X2lycShpLCBtY2ZfZWRtYV90eF9oYW5kbGVy LCAwLCAiZURNQSIsIG1jZl9lZG1hKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmVz ID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LAorCQkJSU9SRVNPVVJDRV9JUlEs ICJlZG1hLXR4LTE2LTU1Iik7CisJaWYgKCFyZXMpCisJCXJldHVybiAtMTsKKworCWZvciAocmV0 ID0gMCwgaSA9IHJlcy0+c3RhcnQ7IGkgPD0gcmVzLT5lbmQ7ICsraSkKKwkJcmV0IHw9IHJlcXVl c3RfaXJxKGksIG1jZl9lZG1hX3R4X2hhbmRsZXIsIDAsICJlRE1BIiwgbWNmX2VkbWEpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShw ZGV2LCAiZWRtYS10eC01Ni02MyIpOworCWlmIChyZXQgIT0gLUVOWElPKSB7CisJCXJldCA9IHJl cXVlc3RfaXJxKHJldCwgbWNmX2VkbWFfdHhfaGFuZGxlciwKKwkJCQkgIDAsICJlRE1BIiwgbWNm X2VkbWEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBwbGF0Zm9y bV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiZWRtYS1lcnIiKTsKKwlpZiAocmV0ICE9IC1FTlhJTykg eworCQlyZXQgPSByZXF1ZXN0X2lycShyZXQsIG1jZl9lZG1hX2Vycl9oYW5kbGVyLAorCQkJCSAg MCwgImVETUEiLCBtY2ZfZWRtYSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwor CXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtY2ZfZWRtYV9pcnFfZnJlZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKm1jZl9lZG1h KQoreworCWludCBpcnE7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlyZXMgPSBwbGF0Zm9y bV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsCisJCQlJT1JFU09VUkNFX0lSUSwgImVkbWEtdHgt MDAtMTUiKTsKKwlpZiAocmVzKSB7CisJCWZvciAoaXJxID0gcmVzLT5zdGFydDsgaXJxIDw9IHJl cy0+ZW5kOyBpcnErKykKKwkJCWZyZWVfaXJxKGlycSwgbWNmX2VkbWEpOworCX0KKworCXJlcyA9 IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwKKwkJCUlPUkVTT1VSQ0VfSVJRLCAi ZWRtYS10eC0xNi01NSIpOworCWlmIChyZXMpIHsKKwkJZm9yIChpcnEgPSByZXMtPnN0YXJ0OyBp cnEgPD0gcmVzLT5lbmQ7IGlycSsrKQorCQkJZnJlZV9pcnEoaXJxLCBtY2ZfZWRtYSk7CisJfQor CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgImVkbWEtdHgtNTYtNjMiKTsK KwlpZiAoaXJxICE9IC1FTlhJTykKKwkJZnJlZV9pcnEoaXJxLCBtY2ZfZWRtYSk7CisKKwlpcnEg PSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiZWRtYS1lcnIiKTsKKwlpZiAoaXJxICE9 IC1FTlhJTykKKwkJZnJlZV9pcnEoaXJxLCBtY2ZfZWRtYSk7Cit9CisKK3N0YXRpYyBpbnQgbWNm X2VkbWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbWNm X2VkbWFfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqbWNm X2VkbWE7CisJc3RydWN0IGZzbF9lZG1hX2NoYW4gKm1jZl9jaGFuOworCXN0cnVjdCBlZG1hX3Jl Z3MgKnJlZ3M7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldCwgaSwgbGVuLCBjaGFu czsKKworCXBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmcGRldi0+ZGV2KTsKKwlpZiAoIXBkYXRh KQorCQlyZXR1cm4gUFRSX0VSUihwZGF0YSk7CisKKwljaGFucyA9IHBkYXRhLT5kbWFfY2hhbm5l bHM7CisJbGVuID0gc2l6ZW9mKCptY2ZfZWRtYSkgKyBzaXplb2YoKm1jZl9jaGFuKSAqIGNoYW5z OworCW1jZl9lZG1hID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIGxlbiwgR0ZQX0tFUk5FTCk7 CisJaWYgKCFtY2ZfZWRtYSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltY2ZfZWRtYS0+bl9jaGFu cyA9IGNoYW5zOworCisJLyogU2V0IHVwIHZlcnNpb24gZm9yIENvbGRGaXJlIGVkbWEgKi8KKwlt Y2ZfZWRtYS0+dmVyc2lvbiA9IHYyOworCW1jZl9lZG1hLT5iaWdfZW5kaWFuID0gMTsKKworCWlm ICghbWNmX2VkbWEtPm5fY2hhbnMpIHsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgInNldHRpbmcg ZGVmYXVsdCBjaGFubmVsIG51bWJlciB0byA2NCIpOworCQltY2ZfZWRtYS0+bl9jaGFucyA9IDY0 OworCX0KKworCW11dGV4X2luaXQoJm1jZl9lZG1hLT5mc2xfZWRtYV9tdXRleCk7CisKKwlyZXMg PSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCisJbWNm X2VkbWEtPm1lbWJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsK KwlpZiAoSVNfRVJSKG1jZl9lZG1hLT5tZW1iYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIobWNmX2Vk bWEtPm1lbWJhc2UpOworCisJZnNsX2VkbWFfc2V0dXBfcmVncyhtY2ZfZWRtYSk7CisJcmVncyA9 ICZtY2ZfZWRtYS0+cmVnczsKKworCUlOSVRfTElTVF9IRUFEKCZtY2ZfZWRtYS0+ZG1hX2Rldi5j aGFubmVscyk7CisJZm9yIChpID0gMDsgaSA8IG1jZl9lZG1hLT5uX2NoYW5zOyBpKyspIHsKKwkJ c3RydWN0IGZzbF9lZG1hX2NoYW4gKm1jZl9jaGFuID0gJm1jZl9lZG1hLT5jaGFuc1tpXTsKKwor CQltY2ZfY2hhbi0+ZWRtYSA9IG1jZl9lZG1hOworCQltY2ZfY2hhbi0+c2xhdmVfaWQgPSBpOwor CQltY2ZfY2hhbi0+aWRsZSA9IHRydWU7CisJCW1jZl9jaGFuLT52Y2hhbi5kZXNjX2ZyZWUgPSBm c2xfZWRtYV9mcmVlX2Rlc2M7CisJCXZjaGFuX2luaXQoJm1jZl9jaGFuLT52Y2hhbiwgJm1jZl9l ZG1hLT5kbWFfZGV2KTsKKwkJaW93cml0ZTMyKDB4MCwgJnJlZ3MtPnRjZFtpXS5jc3IpOworCX0K KworCWlvd3JpdGUzMih+MCwgcmVncy0+aW50aCk7CisJaW93cml0ZTMyKH4wLCByZWdzLT5pbnRs KTsKKworCXJldCA9IG1jZl9lZG1hX2lycV9pbml0KHBkZXYsIG1jZl9lZG1hKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJZG1hX2NhcF9zZXQoRE1BX1BSSVZBVEUsIG1jZl9lZG1hLT5k bWFfZGV2LmNhcF9tYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1jZl9lZG1hLT5kbWFf ZGV2LmNhcF9tYXNrKTsKKwlkbWFfY2FwX3NldChETUFfQ1lDTElDLCBtY2ZfZWRtYS0+ZG1hX2Rl di5jYXBfbWFzayk7CisKKwltY2ZfZWRtYS0+ZG1hX2Rldi5kZXYgPSAmcGRldi0+ZGV2OworCW1j Zl9lZG1hLT5kbWFfZGV2LmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyA9CisJCQlmc2xfZWRt YV9hbGxvY19jaGFuX3Jlc291cmNlczsKKwltY2ZfZWRtYS0+ZG1hX2Rldi5kZXZpY2VfZnJlZV9j aGFuX3Jlc291cmNlcyA9CisJCQlmc2xfZWRtYV9mcmVlX2NoYW5fcmVzb3VyY2VzOworCW1jZl9l ZG1hLT5kbWFfZGV2LmRldmljZV9jb25maWcgPSBmc2xfZWRtYV9zbGF2ZV9jb25maWc7CisJbWNm X2VkbWEtPmRtYV9kZXYuZGV2aWNlX3ByZXBfZG1hX2N5Y2xpYyA9CisJCQlmc2xfZWRtYV9wcmVw X2RtYV9jeWNsaWM7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNlX3ByZXBfc2xhdmVfc2cgPSBm c2xfZWRtYV9wcmVwX3NsYXZlX3NnOworCW1jZl9lZG1hLT5kbWFfZGV2LmRldmljZV90eF9zdGF0 dXMgPSBmc2xfZWRtYV90eF9zdGF0dXM7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNlX3BhdXNl ID0gZnNsX2VkbWFfcGF1c2U7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNlX3Jlc3VtZSA9IGZz bF9lZG1hX3Jlc3VtZTsKKwltY2ZfZWRtYS0+ZG1hX2Rldi5kZXZpY2VfdGVybWluYXRlX2FsbCA9 IGZzbF9lZG1hX3Rlcm1pbmF0ZV9hbGw7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNlX2lzc3Vl X3BlbmRpbmcgPSBmc2xfZWRtYV9pc3N1ZV9wZW5kaW5nOworCisJbWNmX2VkbWEtPmRtYV9kZXYu c3JjX2FkZHJfd2lkdGhzID0gRlNMX0VETUFfQlVTV0lEVEhTOworCW1jZl9lZG1hLT5kbWFfZGV2 LmRzdF9hZGRyX3dpZHRocyA9IEZTTF9FRE1BX0JVU1dJRFRIUzsKKwltY2ZfZWRtYS0+ZG1hX2Rl di5kaXJlY3Rpb25zID0KKwkJCUJJVChETUFfREVWX1RPX01FTSkgfCBCSVQoRE1BX01FTV9UT19E RVYpOworCisJbWNmX2VkbWEtPmRtYV9kZXYuZmlsdGVyLmZuID0gbWNmX2VkbWFfZmlsdGVyX2Zu OworCW1jZl9lZG1hLT5kbWFfZGV2LmZpbHRlci5tYXAgPSBwZGF0YS0+c2xhdmVfbWFwOworCW1j Zl9lZG1hLT5kbWFfZGV2LmZpbHRlci5tYXBjbnQgPSBwZGF0YS0+c2xhdmVjbnQ7CisKKwlwbGF0 Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtY2ZfZWRtYSk7CisKKwlyZXQgPSBkbWFfYXN5bmNfZGV2 aWNlX3JlZ2lzdGVyKCZtY2ZfZWRtYS0+ZG1hX2Rldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KCZwZGV2LT5kZXYsCisJCQkiQ2FuJ3QgcmVnaXN0ZXIgRnJlZXNjYWxlIGVETUEgZW5naW5lLiAo JWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEVuYWJsZSByb3VuZCByb2Jp biBhcmJpdHJhdGlvbiAqLworCWlvd3JpdGUzMihFRE1BX0NSX0VSR0EgfCBFRE1BX0NSX0VSQ0Es IHJlZ3MtPmNyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1jZl9lZG1hX3JlbW92 ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBmc2xfZWRtYV9lbmdp bmUgKm1jZl9lZG1hID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwltY2ZfZWRtYV9p cnFfZnJlZShwZGV2LCBtY2ZfZWRtYSk7CisJZnNsX2VkbWFfY2xlYW51cF92Y2hhbigmbWNmX2Vk bWEtPmRtYV9kZXYpOworCWRtYV9hc3luY19kZXZpY2VfdW5yZWdpc3RlcigmbWNmX2VkbWEtPmRt YV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IG1jZl9lZG1hX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibWNmLWVkbWEi LAorCX0sCisJLnByb2JlCQk9IG1jZl9lZG1hX3Byb2JlLAorCS5yZW1vdmUJCT0gbWNmX2VkbWFf cmVtb3ZlLAorfTsKKworYm9vbCBtY2ZfZWRtYV9maWx0ZXJfZm4oc3RydWN0IGRtYV9jaGFuICpj aGFuLCB2b2lkICpwYXJhbSkKK3sKKwlpZiAoY2hhbi0+ZGV2aWNlLT5kZXYtPmRyaXZlciA9PSAm bWNmX2VkbWFfZHJpdmVyLmRyaXZlcikgeworCQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqbWNmX2No YW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4pOworCisJCXJldHVybiAobWNmX2NoYW4tPnNsYXZl X2lkID09IChpbnQpcGFyYW0pOworCX0KKworCXJldHVybiBmYWxzZTsKK30KK0VYUE9SVF9TWU1C T0wobWNmX2VkbWFfZmlsdGVyX2ZuKTsKKworc3RhdGljIGludCBfX2luaXQgbWNmX2VkbWFfaW5p dCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1jZl9lZG1hX2Ry aXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwobWNmX2VkbWFfaW5pdCk7CisKK3N0YXRpYyB2b2lk IF9fZXhpdCBtY2ZfZWRtYV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0 ZXIoJm1jZl9lZG1hX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChtY2ZfZWRtYV9leGl0KTsKKwor TU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptY2YtZWRtYSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJG cmVlc2NhbGUgZURNQSBlbmdpbmUgZHJpdmVyLCBDb2xkRmlyZSBmYW1pbHkiKTsKK01PRFVMRV9M SUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0 YS9kbWEtbWNmLWVkbWEuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9kbWEtbWNmLWVk bWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjRmNDVkMGQ0MGFh NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9kbWEtbWNm LWVkbWEuaApAQCAtMCwwICsxLDM4IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCAqLworLyoKKyAqIEZyZWVzY2FsZSBlRE1BIHBsYXRmb3JtIGRhdGEsIENvbGRGaXJlIFNv QydzIGZhbWlseS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcgQW5nZWxvIER1cmVnaGVsbG8g PGFuZ2Vsb0B4eHh4eHh4eD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX01BQ0hfTUNGX0VETUFfSF9fCisjZGVmaW5lIF9f TUFDSF9NQ0ZfRURNQV9IX18KKworc3RydWN0IGRtYV9zbGF2ZV9tYXA7CisKK2Jvb2wgbWNmX2Vk bWFfZmlsdGVyX2ZuKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqcGFyYW0pOworCisjZGVm aW5lIE1DRl9FRE1BX0ZJTFRFUl9QQVJBTShjaCkJKCh2b2lkICopY2gpCisKKy8qKgorICogc3Ry dWN0IG1jZl9lZG1hX3BsYXRmb3JtX2RhdGEgLSBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhIGZvciBl RE1BIGVuZ2luZQorICoKKyAqIEB2ZXIJCQlUaGUgZURNQSBtb2R1bGUgdmVyc2lvbi4KKyAqIEBk bWFfY2hhbm5lbHMJVGhlIG51bWJlciBvZiBlRE1BIGNoYW5uZWxzLgorICovCitzdHJ1Y3QgbWNm X2VkbWFfcGxhdGZvcm1fZGF0YSB7CisJaW50IGRtYV9jaGFubmVsczsKKwljb25zdCBzdHJ1Y3Qg ZG1hX3NsYXZlX21hcCAqc2xhdmVfbWFwOworCWludCBzbGF2ZWNudDsKK307CisKKyNlbmRpZiAv KiBfX01BQ0hfTUNGX0VETUFfSF9fICovCg==