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: [v8,3/3] dmaengine: fsl-edma: add ColdFire mcf5441x edma support From: Angelo Dureghello Message-Id: <20180803193244.12084-3-angelo@sysam.it> Date: Fri, 3 Aug 2018 21:32:44 +0200 To: vinod.koul@linaro.org Cc: dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-m68k@vger.kernel.org, stefan@agner.ch, krzk@kernel.org, Angelo Dureghello List-ID: VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIENvbGRGaXJlIG1jZjU0NDF4LWZhbWlseSBlZG1h Cm1vZHVsZS4KClRoZSBDb2xkRmlyZSBlZG1hIG1vZHVsZSBpcyBzbGlnaHRseSBkaWZmZXJlbnQg ZnJvbSBmc2wtZWRtYSwKc28gYSBuZXcgZHJpdmVyIGlzIGFkZGVkLiBCdXQgbW9zdCBvZiB0aGUg Y29kZSBpcyBjb21tb24KYmV0d2VlbiBmc2wtZWRtYSBhbmQgbWNmLWVkbWEgc28gaXQgaGFzIGJl ZW4gY29sbGVjdGVkIGludG8gYQpzZXBhcmF0ZSBjb21tb24gbW9kdWxlIGZzbC1lZG1hLWNvbW1v biAocGF0Y2ggMS8zKS4KClNpZ25lZC1vZmYtYnk6IEFuZ2VsbyBEdXJlZ2hlbGxvIDxhbmdlbG9A c3lzYW0uaXQ+Ci0tLQpDaGFuZ2VzIGZvciB2NzoKLSBwYXRjaCByZXdyaXR0ZW4gZnJvbSBzY3Jh dGNoLCB0aGlzIHBhdGNoICgzLzMpIGhhcyBqdXN0IGJlZW4gYWRkZWQuCi0tLQogZHJpdmVycy9k bWEvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDExICsKIGRyaXZlcnMvZG1hL01h a2VmaWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2RtYS9mc2wtZWRt YS1jb21tb24uYyAgICAgICAgICAgICAgfCAgMjQgKy0KIGRyaXZlcnMvZG1hL21jZi1lZG1hLmMg ICAgICAgICAgICAgICAgICAgICB8IDMxNSArKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUv bGludXgvcGxhdGZvcm1fZGF0YS9kbWEtbWNmLWVkbWEuaCB8ICAzOCArKysKIDUgZmlsZXMgY2hh bmdlZCwgMzg1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9kbWEvbWNmLWVkbWEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGlu dXgvcGxhdGZvcm1fZGF0YS9kbWEtbWNmLWVkbWEuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1h L0tjb25maWcgYi9kcml2ZXJzL2RtYS9LY29uZmlnCmluZGV4IGNhMTY4MGFmYTIwYS4uYjQ1MDA4 ZTljN2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZG1h L0tjb25maWcKQEAgLTMyMCw2ICszMjAsMTcgQEAgY29uZmlnIExQQzE4WFhfRE1BTVVYCiAJICBF bmFibGUgc3VwcG9ydCBmb3IgRE1BIG9uIE5YUCBMUEMxOHh4LzQzeHggcGxhdGZvcm1zCiAJICB3 aXRoIFBMMDgwIGFuZCBtdWx0aXBsZXhlZCBETUEgcmVxdWVzdCBsaW5lcy4KIAorY29uZmlnIE1D Rl9FRE1BCisJdHJpc3RhdGUgIkZyZWVzY2FsZSBlRE1BIGVuZ2luZSBzdXBwb3J0LCBDb2xkRmly ZSBtY2Y1NDQxeCBTb0NzIgorCWRlcGVuZHMgb24gTTU0NDF4CisJc2VsZWN0IERNQV9FTkdJTkUK KwlzZWxlY3QgRE1BX1ZJUlRVQUxfQ0hBTk5FTFMKKwloZWxwCisJICBTdXBwb3J0IHRoZSBGcmVl c2NhbGUgQ29sZEZpcmUgZURNQSBlbmdpbmUsIDY0LWNoYW5uZWwKKwkgIGltcGxlbWVudGF0aW9u IHRoYXQgcGVyZm9ybXMgY29tcGxleCBkYXRhIHRyYW5zZmVycyB3aXRoCisJICBtaW5pbWFsIGlu dGVydmVudGlvbiBmcm9tIGEgaG9zdCBwcm9jZXNzb3IuCisJICBUaGlzIG1vZHVsZSBjYW4gYmUg Zm91bmQgb24gRnJlZXNjYWxlIENvbGRGaXJlIG1jZjU0NDF4IFNvQ3MuCisKIGNvbmZpZyBNTVBf UERNQQogCWJvb2wgIk1NUCBQRE1BIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUkNIX01NUCB8fCBB UkNIX1BYQSB8fCBDT01QSUxFX1RFU1QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL01ha2VmaWxl IGIvZHJpdmVycy9kbWEvTWFrZWZpbGUKaW5kZXggNjYwMjJmNTlmY2E0Li5kOTdmMzE3ZjRiMzQg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZG1hL01ha2Vm aWxlCkBAIC0zMiw2ICszMiw3IEBAIG9iai0kKENPTkZJR19EV19ETUFDX0NPUkUpICs9IGR3Lwog b2JqLSQoQ09ORklHX0VQOTNYWF9ETUEpICs9IGVwOTN4eF9kbWEubwogb2JqLSQoQ09ORklHX0ZT TF9ETUEpICs9IGZzbGRtYS5vCiBvYmotJChDT05GSUdfRlNMX0VETUEpICs9IGZzbC1lZG1hLm8g ZnNsLWVkbWEtY29tbW9uLm8KK29iai0kKENPTkZJR19NQ0ZfRURNQSkgKz0gbWNmLWVkbWEubyBm c2wtZWRtYS1jb21tb24ubwogb2JqLSQoQ09ORklHX0ZTTF9SQUlEKSArPSBmc2xfcmFpZC5vCiBv YmotJChDT05GSUdfSFNVX0RNQSkgKz0gaHN1Lwogb2JqLSQoQ09ORklHX0lNR19NRENfRE1BKSAr PSBpbWctbWRjLWRtYS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24u YyBiL2RyaXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5jCmluZGV4IDk0OGEzZWU1MWJiYi4uNWE4 MzBhMjM4YTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uYworKysg Yi9kcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uYwpAQCAtMTAyLDggKzEwMiwxNiBAQCBzdGF0 aWMgdm9pZCBmc2xfZWRtYV9lbmFibGVfcmVxdWVzdChzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNs X2NoYW4pCiAJc3RydWN0IGVkbWFfcmVncyAqcmVncyA9ICZmc2xfY2hhbi0+ZWRtYS0+cmVnczsK IAl1MzIgY2ggPSBmc2xfY2hhbi0+dmNoYW4uY2hhbi5jaGFuX2lkOwogCi0JZWRtYV93cml0ZWIo ZnNsX2NoYW4tPmVkbWEsIEVETUFfU0VFSV9TRUVJKGNoKSwgcmVncy0+c2VlaSk7Ci0JZWRtYV93 cml0ZWIoZnNsX2NoYW4tPmVkbWEsIGNoLCByZWdzLT5zZXJxKTsKKwlpZiAoZnNsX2NoYW4tPmVk bWEtPnZlcnNpb24gPT0gdjEpIHsKKwkJZWRtYV93cml0ZWIoZnNsX2NoYW4tPmVkbWEsIEVETUFf U0VFSV9TRUVJKGNoKSwgcmVncy0+c2VlaSk7CisJCWVkbWFfd3JpdGViKGZzbF9jaGFuLT5lZG1h LCBjaCwgcmVncy0+c2VycSk7CisJfSBlbHNlIHsKKwkJLyogQ29sZEZpcmUgaXMgYmlnIGVuZGlh biwgYW5kIGFjY2Vzc2VzIG5hdGl2ZWx5CisJCSAqIGJpZyBlbmRpYW4gSS9PIHBlcmlwaGVyYWxz CisJCSAqLworCQlpb3dyaXRlOChFRE1BX1NFRUlfU0VFSShjaCksIHJlZ3MtPnNlZWkpOworCQlp b3dyaXRlOChjaCwgcmVncy0+c2VycSk7CisJfQogfQogCiB2b2lkIGZzbF9lZG1hX2Rpc2FibGVf cmVxdWVzdChzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqZnNsX2NoYW4pCkBAIC0xMTEsOCArMTE5LDE2 IEBAIHZvaWQgZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KHN0cnVjdCBmc2xfZWRtYV9jaGFuICpm c2xfY2hhbikKIAlzdHJ1Y3QgZWRtYV9yZWdzICpyZWdzID0gJmZzbF9jaGFuLT5lZG1hLT5yZWdz OwogCXUzMiBjaCA9IGZzbF9jaGFuLT52Y2hhbi5jaGFuLmNoYW5faWQ7CiAKLQllZG1hX3dyaXRl Yihmc2xfY2hhbi0+ZWRtYSwgY2gsIHJlZ3MtPmNlcnEpOwotCWVkbWFfd3JpdGViKGZzbF9jaGFu LT5lZG1hLCBFRE1BX0NFRUlfQ0VFSShjaCksIHJlZ3MtPmNlZWkpOworCWlmIChmc2xfY2hhbi0+ ZWRtYS0+dmVyc2lvbiA9PSB2MSkgeworCQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgY2gs IHJlZ3MtPmNlcnEpOworCQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgRURNQV9DRUVJX0NF RUkoY2gpLCByZWdzLT5jZWVpKTsKKwl9IGVsc2UgeworCQkvKiBDb2xkRmlyZSBpcyBiaWcgZW5k aWFuLCBhbmQgYWNjZXNzZXMgbmF0aXZlbHkKKwkJICogYmlnIGVuZGlhbiBJL08gcGVyaXBoZXJh bHMKKwkJICovCisJCWlvd3JpdGU4KGNoLCByZWdzLT5jZXJxKTsKKwkJaW93cml0ZTgoRURNQV9D RUVJX0NFRUkoY2gpLCByZWdzLT5jZWVpKTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmc2xf ZWRtYV9kaXNhYmxlX3JlcXVlc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9tY2YtZWRt YS5jIGIvZHJpdmVycy9kbWEvbWNmLWVkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjMxZTUzMTdhOGY5MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1h L21jZi1lZG1hLmMKQEAgLTAsMCArMSwzMTUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgRnJlZXNjYWxlIFNlbWlj b25kdWN0b3IsIEluYworLy8gQ29weXJpZ2h0IChjKSAyMDE3IFN5c2FtLCBBbmdlbG8gRHVyZWdo ZWxsbyAgPGFuZ2Vsb0BzeXNhbS5pdD4KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgor I2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRm b3JtX2RhdGEvZG1hLW1jZi1lZG1hLmg+CisKKyNpbmNsdWRlICJmc2wtZWRtYS1jb21tb24uaCIK KworI2RlZmluZSBFRE1BX0NIQU5ORUxTCQk2NAorI2RlZmluZSBFRE1BX01BU0tfQ0goeCkJCSgo eCkgJiBHRU5NQVNLKDUsIDApKQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWNmX2VkbWFfdHhfaGFu ZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAq bWNmX2VkbWEgPSBkZXZfaWQ7CisJc3RydWN0IGVkbWFfcmVncyAqcmVncyA9ICZtY2ZfZWRtYS0+ cmVnczsKKwl1bnNpZ25lZCBpbnQgY2g7CisJc3RydWN0IGZzbF9lZG1hX2NoYW4gKm1jZl9jaGFu OworCXU2NCBpbnRtYXA7CisKKwlpbnRtYXAgPSBpb3JlYWQzMihyZWdzLT5pbnRoKTsKKwlpbnRt YXAgPDw9IDMyOworCWludG1hcCB8PSBpb3JlYWQzMihyZWdzLT5pbnRsKTsKKwlpZiAoIWludG1h cCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJZm9yIChjaCA9IDA7IGNoIDwgbWNmX2VkbWEtPm5f Y2hhbnM7IGNoKyspIHsKKwkJaWYgKGludG1hcCAmIEJJVChjaCkpIHsKKwkJCWlvd3JpdGU4KEVE TUFfTUFTS19DSChjaCksIHJlZ3MtPmNpbnQpOworCisJCQltY2ZfY2hhbiA9ICZtY2ZfZWRtYS0+ Y2hhbnNbY2hdOworCisJCQlzcGluX2xvY2soJm1jZl9jaGFuLT52Y2hhbi5sb2NrKTsKKwkJCWlm ICghbWNmX2NoYW4tPmVkZXNjLT5pc2N5Y2xpYykgeworCQkJCWxpc3RfZGVsKCZtY2ZfY2hhbi0+ ZWRlc2MtPnZkZXNjLm5vZGUpOworCQkJCXZjaGFuX2Nvb2tpZV9jb21wbGV0ZSgmbWNmX2NoYW4t PmVkZXNjLT52ZGVzYyk7CisJCQkJbWNmX2NoYW4tPmVkZXNjID0gTlVMTDsKKwkJCQltY2ZfY2hh bi0+c3RhdHVzID0gRE1BX0NPTVBMRVRFOworCQkJCW1jZl9jaGFuLT5pZGxlID0gdHJ1ZTsKKwkJ CX0gZWxzZSB7CisJCQkJdmNoYW5fY3ljbGljX2NhbGxiYWNrKCZtY2ZfY2hhbi0+ZWRlc2MtPnZk ZXNjKTsKKwkJCX0KKworCQkJaWYgKCFtY2ZfY2hhbi0+ZWRlc2MpCisJCQkJZnNsX2VkbWFfeGZl cl9kZXNjKG1jZl9jaGFuKTsKKworCQkJc3Bpbl91bmxvY2soJm1jZl9jaGFuLT52Y2hhbi5sb2Nr KTsKKwkJfQorCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVy bl90IG1jZl9lZG1hX2Vycl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1 Y3QgZnNsX2VkbWFfZW5naW5lICptY2ZfZWRtYSA9IGRldl9pZDsKKwlzdHJ1Y3QgZWRtYV9yZWdz ICpyZWdzID0gJm1jZl9lZG1hLT5yZWdzOworCXVuc2lnbmVkIGludCBlcnIsIGNoOworCisJZXJy ID0gaW9yZWFkMzIocmVncy0+ZXJybCk7CisJaWYgKCFlcnIpCisJCXJldHVybiBJUlFfTk9ORTsK KworCWZvciAoY2ggPSAwOyBjaCA8IChFRE1BX0NIQU5ORUxTIC8gMik7IGNoKyspIHsKKwkJaWYg KGVyciAmIEJJVChjaCkpIHsKKwkJCWZzbF9lZG1hX2Rpc2FibGVfcmVxdWVzdCgmbWNmX2VkbWEt PmNoYW5zW2NoXSk7CisJCQlpb3dyaXRlOChFRE1BX0NFUlJfQ0VSUihjaCksIHJlZ3MtPmNlcnIp OworCQkJbWNmX2VkbWEtPmNoYW5zW2NoXS5zdGF0dXMgPSBETUFfRVJST1I7CisJCQltY2ZfZWRt YS0+Y2hhbnNbY2hdLmlkbGUgPSB0cnVlOworCQl9CisJfQorCisJZXJyID0gaW9yZWFkMzIocmVn cy0+ZXJyaCk7CisJaWYgKCFlcnIpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWZvciAoY2ggPSAo RURNQV9DSEFOTkVMUyAvIDIpOyBjaCA8IEVETUFfQ0hBTk5FTFM7IGNoKyspIHsKKwkJaWYgKGVy ciAmIChCSVQoY2ggLSAoRURNQV9DSEFOTkVMUyAvIDIpKSkpIHsKKwkJCWZzbF9lZG1hX2Rpc2Fi bGVfcmVxdWVzdCgmbWNmX2VkbWEtPmNoYW5zW2NoXSk7CisJCQlpb3dyaXRlOChFRE1BX0NFUlJf Q0VSUihjaCksIHJlZ3MtPmNlcnIpOworCQkJbWNmX2VkbWEtPmNoYW5zW2NoXS5zdGF0dXMgPSBE TUFfRVJST1I7CisJCQltY2ZfZWRtYS0+Y2hhbnNbY2hdLmlkbGUgPSB0cnVlOworCQl9CisJfQor CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG1jZl9lZG1hX2lycV9pbml0 KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJc3RydWN0IGZzbF9lZG1hX2VuZ2lu ZSAqbWNmX2VkbWEpCit7CisJaW50IHJldCA9IDAsIGk7CisJc3RydWN0IHJlc291cmNlICpyZXM7 CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsCisJCQkJSU9SRVNP VVJDRV9JUlEsICJlZG1hLXR4LTAwLTE1Iik7CisJaWYgKCFyZXMpCisJCXJldHVybiAtMTsKKwor CWZvciAocmV0ID0gMCwgaSA9IHJlcy0+c3RhcnQ7IGkgPD0gcmVzLT5lbmQ7ICsraSkKKwkJcmV0 IHw9IHJlcXVlc3RfaXJxKGksIG1jZl9lZG1hX3R4X2hhbmRsZXIsIDAsICJlRE1BIiwgbWNmX2Vk bWEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVz b3VyY2VfYnluYW1lKHBkZXYsCisJCQlJT1JFU09VUkNFX0lSUSwgImVkbWEtdHgtMTYtNTUiKTsK KwlpZiAoIXJlcykKKwkJcmV0dXJuIC0xOworCisJZm9yIChyZXQgPSAwLCBpID0gcmVzLT5zdGFy dDsgaSA8PSByZXMtPmVuZDsgKytpKQorCQlyZXQgfD0gcmVxdWVzdF9pcnEoaSwgbWNmX2VkbWFf dHhfaGFuZGxlciwgMCwgImVETUEiLCBtY2ZfZWRtYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCXJldCA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJlZG1hLXR4LTU2LTYz Iik7CisJaWYgKHJldCAhPSAtRU5YSU8pIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEocmV0LCBtY2Zf ZWRtYV90eF9oYW5kbGVyLAorCQkJCSAgMCwgImVETUEiLCBtY2ZfZWRtYSk7CisJCWlmIChyZXQp CisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBk ZXYsICJlZG1hLWVyciIpOworCWlmIChyZXQgIT0gLUVOWElPKSB7CisJCXJldCA9IHJlcXVlc3Rf aXJxKHJldCwgbWNmX2VkbWFfZXJyX2hhbmRsZXIsCisJCQkJICAwLCAiZURNQSIsIG1jZl9lZG1h KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB2b2lkIG1jZl9lZG1hX2lycV9mcmVlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYs CisJCQkJc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqbWNmX2VkbWEpCit7CisJaW50IGlycTsKKwlz dHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5h bWUocGRldiwKKwkJCUlPUkVTT1VSQ0VfSVJRLCAiZWRtYS10eC0wMC0xNSIpOworCWlmIChyZXMp IHsKKwkJZm9yIChpcnEgPSByZXMtPnN0YXJ0OyBpcnEgPD0gcmVzLT5lbmQ7IGlycSsrKQorCQkJ ZnJlZV9pcnEoaXJxLCBtY2ZfZWRtYSk7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291 cmNlX2J5bmFtZShwZGV2LAorCQkJSU9SRVNPVVJDRV9JUlEsICJlZG1hLXR4LTE2LTU1Iik7CisJ aWYgKHJlcykgeworCQlmb3IgKGlycSA9IHJlcy0+c3RhcnQ7IGlycSA8PSByZXMtPmVuZDsgaXJx KyspCisJCQlmcmVlX2lycShpcnEsIG1jZl9lZG1hKTsKKwl9CisKKwlpcnEgPSBwbGF0Zm9ybV9n ZXRfaXJxX2J5bmFtZShwZGV2LCAiZWRtYS10eC01Ni02MyIpOworCWlmIChpcnEgIT0gLUVOWElP KQorCQlmcmVlX2lycShpcnEsIG1jZl9lZG1hKTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnFf YnluYW1lKHBkZXYsICJlZG1hLWVyciIpOworCWlmIChpcnEgIT0gLUVOWElPKQorCQlmcmVlX2ly cShpcnEsIG1jZl9lZG1hKTsKK30KKworc3RhdGljIGludCBtY2ZfZWRtYV9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtY2ZfZWRtYV9wbGF0Zm9ybV9kYXRh ICpwZGF0YTsKKwlzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICptY2ZfZWRtYTsKKwlzdHJ1Y3QgZnNs X2VkbWFfY2hhbiAqbWNmX2NoYW47CisJc3RydWN0IGVkbWFfcmVncyAqcmVnczsKKwlzdHJ1Y3Qg cmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0LCBpLCBsZW4sIGNoYW5zOworCisJcGRhdGEgPSBkZXZf Z2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOworCWlmICghcGRhdGEpCisJCXJldHVybiBQVFJfRVJS KHBkYXRhKTsKKworCWNoYW5zID0gcGRhdGEtPmRtYV9jaGFubmVsczsKKwlsZW4gPSBzaXplb2Yo Km1jZl9lZG1hKSArIHNpemVvZigqbWNmX2NoYW4pICogY2hhbnM7CisJbWNmX2VkbWEgPSBkZXZt X2t6YWxsb2MoJnBkZXYtPmRldiwgbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1jZl9lZG1hKQor CQlyZXR1cm4gLUVOT01FTTsKKworCW1jZl9lZG1hLT5uX2NoYW5zID0gY2hhbnM7CisKKwkvKiBT ZXQgdXAgdmVyc2lvbiBmb3IgQ29sZEZpcmUgZWRtYSAqLworCW1jZl9lZG1hLT52ZXJzaW9uID0g djI7CisJbWNmX2VkbWEtPmJpZ19lbmRpYW4gPSAxOworCisJaWYgKCFtY2ZfZWRtYS0+bl9jaGFu cykgeworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAic2V0dGluZyBkZWZhdWx0IGNoYW5uZWwgbnVt YmVyIHRvIDY0Iik7CisJCW1jZl9lZG1hLT5uX2NoYW5zID0gNjQ7CisJfQorCisJbXV0ZXhfaW5p dCgmbWNmX2VkbWEtPmZzbF9lZG1hX211dGV4KTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNv dXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisKKwltY2ZfZWRtYS0+bWVtYmFzZSA9IGRl dm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIobWNmX2Vk bWEtPm1lbWJhc2UpKQorCQlyZXR1cm4gUFRSX0VSUihtY2ZfZWRtYS0+bWVtYmFzZSk7CisKKwlm c2xfZWRtYV9zZXR1cF9yZWdzKG1jZl9lZG1hKTsKKwlyZWdzID0gJm1jZl9lZG1hLT5yZWdzOwor CisJSU5JVF9MSVNUX0hFQUQoJm1jZl9lZG1hLT5kbWFfZGV2LmNoYW5uZWxzKTsKKwlmb3IgKGkg PSAwOyBpIDwgbWNmX2VkbWEtPm5fY2hhbnM7IGkrKykgeworCQlzdHJ1Y3QgZnNsX2VkbWFfY2hh biAqbWNmX2NoYW4gPSAmbWNmX2VkbWEtPmNoYW5zW2ldOworCisJCW1jZl9jaGFuLT5lZG1hID0g bWNmX2VkbWE7CisJCW1jZl9jaGFuLT5zbGF2ZV9pZCA9IGk7CisJCW1jZl9jaGFuLT5pZGxlID0g dHJ1ZTsKKwkJbWNmX2NoYW4tPnZjaGFuLmRlc2NfZnJlZSA9IGZzbF9lZG1hX2ZyZWVfZGVzYzsK KwkJdmNoYW5faW5pdCgmbWNmX2NoYW4tPnZjaGFuLCAmbWNmX2VkbWEtPmRtYV9kZXYpOworCQlp b3dyaXRlMzIoMHgwLCAmcmVncy0+dGNkW2ldLmNzcik7CisJfQorCisJaW93cml0ZTMyKH4wLCBy ZWdzLT5pbnRoKTsKKwlpb3dyaXRlMzIofjAsIHJlZ3MtPmludGwpOworCisJcmV0ID0gbWNmX2Vk bWFfaXJxX2luaXQocGRldiwgbWNmX2VkbWEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlkbWFfY2FwX3NldChETUFfUFJJVkFURSwgbWNmX2VkbWEtPmRtYV9kZXYuY2FwX21hc2spOwor CWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWNmX2VkbWEtPmRtYV9kZXYuY2FwX21hc2spOworCWRt YV9jYXBfc2V0KERNQV9DWUNMSUMsIG1jZl9lZG1hLT5kbWFfZGV2LmNhcF9tYXNrKTsKKworCW1j Zl9lZG1hLT5kbWFfZGV2LmRldiA9ICZwZGV2LT5kZXY7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2 aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzID0KKwkJCWZzbF9lZG1hX2FsbG9jX2NoYW5fcmVzb3Vy Y2VzOworCW1jZl9lZG1hLT5kbWFfZGV2LmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzID0KKwkJ CWZzbF9lZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXM7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNl X2NvbmZpZyA9IGZzbF9lZG1hX3NsYXZlX2NvbmZpZzsKKwltY2ZfZWRtYS0+ZG1hX2Rldi5kZXZp Y2VfcHJlcF9kbWFfY3ljbGljID0KKwkJCWZzbF9lZG1hX3ByZXBfZG1hX2N5Y2xpYzsKKwltY2Zf ZWRtYS0+ZG1hX2Rldi5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9IGZzbF9lZG1hX3ByZXBfc2xhdmVf c2c7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNlX3R4X3N0YXR1cyA9IGZzbF9lZG1hX3R4X3N0 YXR1czsKKwltY2ZfZWRtYS0+ZG1hX2Rldi5kZXZpY2VfcGF1c2UgPSBmc2xfZWRtYV9wYXVzZTsK KwltY2ZfZWRtYS0+ZG1hX2Rldi5kZXZpY2VfcmVzdW1lID0gZnNsX2VkbWFfcmVzdW1lOworCW1j Zl9lZG1hLT5kbWFfZGV2LmRldmljZV90ZXJtaW5hdGVfYWxsID0gZnNsX2VkbWFfdGVybWluYXRl X2FsbDsKKwltY2ZfZWRtYS0+ZG1hX2Rldi5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IGZzbF9lZG1h X2lzc3VlX3BlbmRpbmc7CisKKwltY2ZfZWRtYS0+ZG1hX2Rldi5zcmNfYWRkcl93aWR0aHMgPSBG U0xfRURNQV9CVVNXSURUSFM7CisJbWNmX2VkbWEtPmRtYV9kZXYuZHN0X2FkZHJfd2lkdGhzID0g RlNMX0VETUFfQlVTV0lEVEhTOworCW1jZl9lZG1hLT5kbWFfZGV2LmRpcmVjdGlvbnMgPQorCQkJ QklUKERNQV9ERVZfVE9fTUVNKSB8IEJJVChETUFfTUVNX1RPX0RFVik7CisKKwltY2ZfZWRtYS0+ ZG1hX2Rldi5maWx0ZXIuZm4gPSBtY2ZfZWRtYV9maWx0ZXJfZm47CisJbWNmX2VkbWEtPmRtYV9k ZXYuZmlsdGVyLm1hcCA9IHBkYXRhLT5zbGF2ZV9tYXA7CisJbWNmX2VkbWEtPmRtYV9kZXYuZmls dGVyLm1hcGNudCA9IHBkYXRhLT5zbGF2ZWNudDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBk ZXYsIG1jZl9lZG1hKTsKKworCXJldCA9IGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJm1jZl9l ZG1hLT5kbWFfZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJD YW4ndCByZWdpc3RlciBGcmVlc2NhbGUgZURNQSBlbmdpbmUuICglZClcbiIsIHJldCk7CisJCXJl dHVybiByZXQ7CisJfQorCisJLyogRW5hYmxlIHJvdW5kIHJvYmluIGFyYml0cmF0aW9uICovCisJ aW93cml0ZTMyKEVETUFfQ1JfRVJHQSB8IEVETUFfQ1JfRVJDQSwgcmVncy0+Y3IpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWNmX2VkbWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqbWNmX2VkbWEgPSBwbGF0 Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCW1jZl9lZG1hX2lycV9mcmVlKHBkZXYsIG1jZl9l ZG1hKTsKKwlmc2xfZWRtYV9jbGVhbnVwX3ZjaGFuKCZtY2ZfZWRtYS0+ZG1hX2Rldik7CisJZG1h X2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZtY2ZfZWRtYS0+ZG1hX2Rldik7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWNmX2VkbWFfZHJpdmVyID0g eworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtY2YtZWRtYSIsCisJfSwKKwkucHJvYmUJCT0g bWNmX2VkbWFfcHJvYmUsCisJLnJlbW92ZQkJPSBtY2ZfZWRtYV9yZW1vdmUsCit9OworCitib29s IG1jZl9lZG1hX2ZpbHRlcl9mbihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKnBhcmFtKQor eworCWlmIChjaGFuLT5kZXZpY2UtPmRldi0+ZHJpdmVyID09ICZtY2ZfZWRtYV9kcml2ZXIuZHJp dmVyKSB7CisJCXN0cnVjdCBmc2xfZWRtYV9jaGFuICptY2ZfY2hhbiA9IHRvX2ZzbF9lZG1hX2No YW4oY2hhbik7CisKKwkJcmV0dXJuIChtY2ZfY2hhbi0+c2xhdmVfaWQgPT0gKGludClwYXJhbSk7 CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorRVhQT1JUX1NZTUJPTChtY2ZfZWRtYV9maWx0ZXJf Zm4pOworCitzdGF0aWMgaW50IF9faW5pdCBtY2ZfZWRtYV9pbml0KHZvaWQpCit7CisJcmV0dXJu IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWNmX2VkbWFfZHJpdmVyKTsKK30KK3N1YnN5c19p bml0Y2FsbChtY2ZfZWRtYV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1jZl9lZG1hX2V4 aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWNmX2VkbWFfZHJpdmVy KTsKK30KK21vZHVsZV9leGl0KG1jZl9lZG1hX2V4aXQpOworCitNT0RVTEVfQUxJQVMoInBsYXRm b3JtOm1jZi1lZG1hIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBlRE1BIGVuZ2lu ZSBkcml2ZXIsIENvbGRGaXJlIGZhbWlseSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpk aWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1tY2YtZWRtYS5oIGIv aW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1tY2YtZWRtYS5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOWExODE5YWNiMjhmCi0tLSAvZGV2L251bGwKKysr IGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1tY2YtZWRtYS5oCkBAIC0wLDAgKzEs MzggQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogRnJl ZXNjYWxlIGVETUEgcGxhdGZvcm0gZGF0YSwgQ29sZEZpcmUgU29DJ3MgZmFtaWx5LgorICoKKyAq IENvcHlyaWdodCAoYykgMjAxNyBBbmdlbG8gRHVyZWdoZWxsbyA8YW5nZWxvQHN5c2FtLml0Pgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisj aWZuZGVmIF9fTUFDSF9NQ0ZfRURNQV9IX18KKyNkZWZpbmUgX19NQUNIX01DRl9FRE1BX0hfXwor CitzdHJ1Y3QgZG1hX3NsYXZlX21hcDsKKworYm9vbCBtY2ZfZWRtYV9maWx0ZXJfZm4oc3RydWN0 IGRtYV9jaGFuICpjaGFuLCB2b2lkICpwYXJhbSk7CisKKyNkZWZpbmUgTUNGX0VETUFfRklMVEVS X1BBUkFNKGNoKQkoKHZvaWQgKiljaCkKKworLyoqCisgKiBzdHJ1Y3QgbWNmX2VkbWFfcGxhdGZv cm1fZGF0YSAtIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEgZm9yIGVETUEgZW5naW5lCisgKgorICog QHZlcgkJCVRoZSBlRE1BIG1vZHVsZSB2ZXJzaW9uLgorICogQGRtYV9jaGFubmVscwlUaGUgbnVt YmVyIG9mIGVETUEgY2hhbm5lbHMuCisgKi8KK3N0cnVjdCBtY2ZfZWRtYV9wbGF0Zm9ybV9kYXRh IHsKKwlpbnQgZG1hX2NoYW5uZWxzOworCWNvbnN0IHN0cnVjdCBkbWFfc2xhdmVfbWFwICpzbGF2 ZV9tYXA7CisJaW50IHNsYXZlY250OworfTsKKworI2VuZGlmIC8qIF9fTUFDSF9NQ0ZfRURNQV9I X18gKi8K