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: [v10,4/4] dmaengine: fsl-edma: add ColdFire mcf5441x edma support From: Angelo Dureghello Message-Id: <20180819172716.32304-4-angelo@sysam.it> Date: Sun, 19 Aug 2018 19:27:16 +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+ClRlc3RlZC1ieTogS3J6eXN6dG9mIEtvemxvd3NraSA8a3J6a0BrZXJuZWwub3Jn PgotLS0KQ2hhbmdlcyBmb3Igdjg6Ci0gcGF0Y2ggcmV3cml0dGVuIGZyb20gc2NyYXRjaCwgdGhp cyBwYXRjaCAoMy8zKSBoYXMganVzdCBiZWVuIGFkZGVkLgoKQ2hhbmdlcyBmb3Igdjk6Ci0gYWRk IGNvbXBpbGUgdGVzdCBmb3IgS2NvbmZpZywKLSBmaXggaW5jbHVkZSBndWFyZC4KCkNoYW5nZXMg Zm9yIHYxMDoKLSBmaXggcm9ib3QgYnVpbGQgImRpZmZlcmVudCBzaXplIiBjYXN0LAotIGZpeCBp bnZhbGlkIHVzYWdlIG9mIFBUUl9FUlIuCi0tLQogZHJpdmVycy9kbWEvS2NvbmZpZyAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDExICsKIGRyaXZlcnMvZG1hL01ha2VmaWxlICAgICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uYyAgICAgICAg ICAgICAgfCAgMjQgKy0KIGRyaXZlcnMvZG1hL21jZi1lZG1hLmMgICAgICAgICAgICAgICAgICAg ICB8IDMxNyArKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0 YS9kbWEtbWNmLWVkbWEuaCB8ICAzOCArKysKIDUgZmlsZXMgY2hhbmdlZCwgMzg3IGluc2VydGlv bnMoKyksIDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEvbWNm LWVkbWEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9k bWEtbWNmLWVkbWEuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL0tjb25maWcgYi9kcml2ZXJz L2RtYS9LY29uZmlnCmluZGV4IGNhMTY4MGFmYTIwYS4uNDVjYTVlNTU2Nzc0IDEwMDY0NAotLS0g YS9kcml2ZXJzL2RtYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZG1hL0tjb25maWcKQEAgLTMyMCw2 ICszMjAsMTcgQEAgY29uZmlnIExQQzE4WFhfRE1BTVVYCiAJICBFbmFibGUgc3VwcG9ydCBmb3Ig RE1BIG9uIE5YUCBMUEMxOHh4LzQzeHggcGxhdGZvcm1zCiAJICB3aXRoIFBMMDgwIGFuZCBtdWx0 aXBsZXhlZCBETUEgcmVxdWVzdCBsaW5lcy4KIAorY29uZmlnIE1DRl9FRE1BCisJdHJpc3RhdGUg IkZyZWVzY2FsZSBlRE1BIGVuZ2luZSBzdXBwb3J0LCBDb2xkRmlyZSBtY2Y1NDQxeCBTb0NzIgor CWRlcGVuZHMgb24gTTU0NDF4IHx8IENPTVBJTEVfVEVTVAorCXNlbGVjdCBETUFfRU5HSU5FCisJ c2VsZWN0IERNQV9WSVJUVUFMX0NIQU5ORUxTCisJaGVscAorCSAgU3VwcG9ydCB0aGUgRnJlZXNj YWxlIENvbGRGaXJlIGVETUEgZW5naW5lLCA2NC1jaGFubmVsCisJICBpbXBsZW1lbnRhdGlvbiB0 aGF0IHBlcmZvcm1zIGNvbXBsZXggZGF0YSB0cmFuc2ZlcnMgd2l0aAorCSAgbWluaW1hbCBpbnRl cnZlbnRpb24gZnJvbSBhIGhvc3QgcHJvY2Vzc29yLgorCSAgVGhpcyBtb2R1bGUgY2FuIGJlIGZv dW5kIG9uIEZyZWVzY2FsZSBDb2xkRmlyZSBtY2Y1NDQxeCBTb0NzLgorCiBjb25maWcgTU1QX1BE TUEKIAlib29sICJNTVAgUERNQSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9NTVAgfHwgQVJD SF9QWEEgfHwgQ09NUElMRV9URVNUCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9NYWtlZmlsZSBi L2RyaXZlcnMvZG1hL01ha2VmaWxlCmluZGV4IDY2MDIyZjU5ZmNhNC4uZDk3ZjMxN2Y0YjM0IDEw MDY0NAotLS0gYS9kcml2ZXJzL2RtYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS9NYWtlZmls ZQpAQCAtMzIsNiArMzIsNyBAQCBvYmotJChDT05GSUdfRFdfRE1BQ19DT1JFKSArPSBkdy8KIG9i ai0kKENPTkZJR19FUDkzWFhfRE1BKSArPSBlcDkzeHhfZG1hLm8KIG9iai0kKENPTkZJR19GU0xf RE1BKSArPSBmc2xkbWEubwogb2JqLSQoQ09ORklHX0ZTTF9FRE1BKSArPSBmc2wtZWRtYS5vIGZz bC1lZG1hLWNvbW1vbi5vCitvYmotJChDT05GSUdfTUNGX0VETUEpICs9IG1jZi1lZG1hLm8gZnNs LWVkbWEtY29tbW9uLm8KIG9iai0kKENPTkZJR19GU0xfUkFJRCkgKz0gZnNsX3JhaWQubwogb2Jq LSQoQ09ORklHX0hTVV9ETUEpICs9IGhzdS8KIG9iai0kKENPTkZJR19JTUdfTURDX0RNQSkgKz0g aW1nLW1kYy1kbWEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmMg Yi9kcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uYwppbmRleCAyMjcwMzRkZTI1NmUuLjhiYTgw ZjRiNmY1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmMKKysrIGIv ZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmMKQEAgLTQ2LDggKzQ2LDE2IEBAIHN0YXRpYyB2 b2lkIGZzbF9lZG1hX2VuYWJsZV9yZXF1ZXN0KHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hh bikKIAlzdHJ1Y3QgZWRtYV9yZWdzICpyZWdzID0gJmZzbF9jaGFuLT5lZG1hLT5yZWdzOwogCXUz MiBjaCA9IGZzbF9jaGFuLT52Y2hhbi5jaGFuLmNoYW5faWQ7CiAKLQllZG1hX3dyaXRlYihmc2xf Y2hhbi0+ZWRtYSwgRURNQV9TRUVJX1NFRUkoY2gpLCByZWdzLT5zZWVpKTsKLQllZG1hX3dyaXRl Yihmc2xfY2hhbi0+ZWRtYSwgY2gsIHJlZ3MtPnNlcnEpOworCWlmIChmc2xfY2hhbi0+ZWRtYS0+ dmVyc2lvbiA9PSB2MSkgeworCQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgRURNQV9TRUVJ X1NFRUkoY2gpLCByZWdzLT5zZWVpKTsKKwkJZWRtYV93cml0ZWIoZnNsX2NoYW4tPmVkbWEsIGNo LCByZWdzLT5zZXJxKTsKKwl9IGVsc2UgeworCQkvKiBDb2xkRmlyZSBpcyBiaWcgZW5kaWFuLCBh bmQgYWNjZXNzZXMgbmF0aXZlbHkKKwkJICogYmlnIGVuZGlhbiBJL08gcGVyaXBoZXJhbHMKKwkJ ICovCisJCWlvd3JpdGU4KEVETUFfU0VFSV9TRUVJKGNoKSwgcmVncy0+c2VlaSk7CisJCWlvd3Jp dGU4KGNoLCByZWdzLT5zZXJxKTsKKwl9CiB9CiAKIHZvaWQgZnNsX2VkbWFfZGlzYWJsZV9yZXF1 ZXN0KHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hhbikKQEAgLTU1LDggKzYzLDE2IEBAIHZv aWQgZnNsX2VkbWFfZGlzYWJsZV9yZXF1ZXN0KHN0cnVjdCBmc2xfZWRtYV9jaGFuICpmc2xfY2hh bikKIAlzdHJ1Y3QgZWRtYV9yZWdzICpyZWdzID0gJmZzbF9jaGFuLT5lZG1hLT5yZWdzOwogCXUz MiBjaCA9IGZzbF9jaGFuLT52Y2hhbi5jaGFuLmNoYW5faWQ7CiAKLQllZG1hX3dyaXRlYihmc2xf Y2hhbi0+ZWRtYSwgY2gsIHJlZ3MtPmNlcnEpOwotCWVkbWFfd3JpdGViKGZzbF9jaGFuLT5lZG1h LCBFRE1BX0NFRUlfQ0VFSShjaCksIHJlZ3MtPmNlZWkpOworCWlmIChmc2xfY2hhbi0+ZWRtYS0+ dmVyc2lvbiA9PSB2MSkgeworCQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgY2gsIHJlZ3Mt PmNlcnEpOworCQllZG1hX3dyaXRlYihmc2xfY2hhbi0+ZWRtYSwgRURNQV9DRUVJX0NFRUkoY2gp LCByZWdzLT5jZWVpKTsKKwl9IGVsc2UgeworCQkvKiBDb2xkRmlyZSBpcyBiaWcgZW5kaWFuLCBh bmQgYWNjZXNzZXMgbmF0aXZlbHkKKwkJICogYmlnIGVuZGlhbiBJL08gcGVyaXBoZXJhbHMKKwkJ ICovCisJCWlvd3JpdGU4KGNoLCByZWdzLT5jZXJxKTsKKwkJaW93cml0ZTgoRURNQV9DRUVJX0NF RUkoY2gpLCByZWdzLT5jZWVpKTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmc2xfZWRtYV9k aXNhYmxlX3JlcXVlc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9tY2YtZWRtYS5jIGIv ZHJpdmVycy9kbWEvbWNmLWVkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLjRkMzBkNTMwMjY0OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZG1hL21jZi1l ZG1hLmMKQEAgLTAsMCArMSwzMTcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wKworLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVj dG9yLCBJbmMKKy8vIENvcHlyaWdodCAoYykgMjAxNyBTeXNhbSwgQW5nZWxvIER1cmVnaGVsbG8g IDxhbmdlbG9Ac3lzYW0uaXQ+CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRl IDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNs dWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k YXRhL2RtYS1tY2YtZWRtYS5oPgorCisjaW5jbHVkZSAiZnNsLWVkbWEtY29tbW9uLmgiCisKKyNk ZWZpbmUgRURNQV9DSEFOTkVMUwkJNjQKKyNkZWZpbmUgRURNQV9NQVNLX0NIKHgpCQkoKHgpICYg R0VOTUFTSyg1LCAwKSkKKworc3RhdGljIGlycXJldHVybl90IG1jZl9lZG1hX3R4X2hhbmRsZXIo aW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKm1jZl9l ZG1hID0gZGV2X2lkOworCXN0cnVjdCBlZG1hX3JlZ3MgKnJlZ3MgPSAmbWNmX2VkbWEtPnJlZ3M7 CisJdW5zaWduZWQgaW50IGNoOworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICptY2ZfY2hhbjsKKwl1 NjQgaW50bWFwOworCisJaW50bWFwID0gaW9yZWFkMzIocmVncy0+aW50aCk7CisJaW50bWFwIDw8 PSAzMjsKKwlpbnRtYXAgfD0gaW9yZWFkMzIocmVncy0+aW50bCk7CisJaWYgKCFpbnRtYXApCisJ CXJldHVybiBJUlFfTk9ORTsKKworCWZvciAoY2ggPSAwOyBjaCA8IG1jZl9lZG1hLT5uX2NoYW5z OyBjaCsrKSB7CisJCWlmIChpbnRtYXAgJiBCSVQoY2gpKSB7CisJCQlpb3dyaXRlOChFRE1BX01B U0tfQ0goY2gpLCByZWdzLT5jaW50KTsKKworCQkJbWNmX2NoYW4gPSAmbWNmX2VkbWEtPmNoYW5z W2NoXTsKKworCQkJc3Bpbl9sb2NrKCZtY2ZfY2hhbi0+dmNoYW4ubG9jayk7CisJCQlpZiAoIW1j Zl9jaGFuLT5lZGVzYy0+aXNjeWNsaWMpIHsKKwkJCQlsaXN0X2RlbCgmbWNmX2NoYW4tPmVkZXNj LT52ZGVzYy5ub2RlKTsKKwkJCQl2Y2hhbl9jb29raWVfY29tcGxldGUoJm1jZl9jaGFuLT5lZGVz Yy0+dmRlc2MpOworCQkJCW1jZl9jaGFuLT5lZGVzYyA9IE5VTEw7CisJCQkJbWNmX2NoYW4tPnN0 YXR1cyA9IERNQV9DT01QTEVURTsKKwkJCQltY2ZfY2hhbi0+aWRsZSA9IHRydWU7CisJCQl9IGVs c2UgeworCQkJCXZjaGFuX2N5Y2xpY19jYWxsYmFjaygmbWNmX2NoYW4tPmVkZXNjLT52ZGVzYyk7 CisJCQl9CisKKwkJCWlmICghbWNmX2NoYW4tPmVkZXNjKQorCQkJCWZzbF9lZG1hX3hmZXJfZGVz YyhtY2ZfY2hhbik7CisKKwkJCXNwaW5fdW5sb2NrKCZtY2ZfY2hhbi0+dmNoYW4ubG9jayk7CisJ CX0KKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBt Y2ZfZWRtYV9lcnJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGZz bF9lZG1hX2VuZ2luZSAqbWNmX2VkbWEgPSBkZXZfaWQ7CisJc3RydWN0IGVkbWFfcmVncyAqcmVn cyA9ICZtY2ZfZWRtYS0+cmVnczsKKwl1bnNpZ25lZCBpbnQgZXJyLCBjaDsKKworCWVyciA9IGlv cmVhZDMyKHJlZ3MtPmVycmwpOworCWlmICghZXJyKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlm b3IgKGNoID0gMDsgY2ggPCAoRURNQV9DSEFOTkVMUyAvIDIpOyBjaCsrKSB7CisJCWlmIChlcnIg JiBCSVQoY2gpKSB7CisJCQlmc2xfZWRtYV9kaXNhYmxlX3JlcXVlc3QoJm1jZl9lZG1hLT5jaGFu c1tjaF0pOworCQkJaW93cml0ZTgoRURNQV9DRVJSX0NFUlIoY2gpLCByZWdzLT5jZXJyKTsKKwkJ CW1jZl9lZG1hLT5jaGFuc1tjaF0uc3RhdHVzID0gRE1BX0VSUk9SOworCQkJbWNmX2VkbWEtPmNo YW5zW2NoXS5pZGxlID0gdHJ1ZTsKKwkJfQorCX0KKworCWVyciA9IGlvcmVhZDMyKHJlZ3MtPmVy cmgpOworCWlmICghZXJyKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlmb3IgKGNoID0gKEVETUFf Q0hBTk5FTFMgLyAyKTsgY2ggPCBFRE1BX0NIQU5ORUxTOyBjaCsrKSB7CisJCWlmIChlcnIgJiAo QklUKGNoIC0gKEVETUFfQ0hBTk5FTFMgLyAyKSkpKSB7CisJCQlmc2xfZWRtYV9kaXNhYmxlX3Jl cXVlc3QoJm1jZl9lZG1hLT5jaGFuc1tjaF0pOworCQkJaW93cml0ZTgoRURNQV9DRVJSX0NFUlIo Y2gpLCByZWdzLT5jZXJyKTsKKwkJCW1jZl9lZG1hLT5jaGFuc1tjaF0uc3RhdHVzID0gRE1BX0VS Uk9SOworCQkJbWNmX2VkbWEtPmNoYW5zW2NoXS5pZGxlID0gdHJ1ZTsKKwkJfQorCX0KKworCXJl dHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBtY2ZfZWRtYV9pcnFfaW5pdChzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKm1j Zl9lZG1hKQoreworCWludCByZXQgPSAwLCBpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJ cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LAorCQkJCUlPUkVTT1VSQ0Vf SVJRLCAiZWRtYS10eC0wMC0xNSIpOworCWlmICghcmVzKQorCQlyZXR1cm4gLTE7CisKKwlmb3Ig KHJldCA9IDAsIGkgPSByZXMtPnN0YXJ0OyBpIDw9IHJlcy0+ZW5kOyArK2kpCisJCXJldCB8PSBy ZXF1ZXN0X2lycShpLCBtY2ZfZWRtYV90eF9oYW5kbGVyLCAwLCAiZURNQSIsIG1jZl9lZG1hKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNl X2J5bmFtZShwZGV2LAorCQkJSU9SRVNPVVJDRV9JUlEsICJlZG1hLXR4LTE2LTU1Iik7CisJaWYg KCFyZXMpCisJCXJldHVybiAtMTsKKworCWZvciAocmV0ID0gMCwgaSA9IHJlcy0+c3RhcnQ7IGkg PD0gcmVzLT5lbmQ7ICsraSkKKwkJcmV0IHw9IHJlcXVlc3RfaXJxKGksIG1jZl9lZG1hX3R4X2hh bmRsZXIsIDAsICJlRE1BIiwgbWNmX2VkbWEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiZWRtYS10eC01Ni02MyIpOwor CWlmIChyZXQgIT0gLUVOWElPKSB7CisJCXJldCA9IHJlcXVlc3RfaXJxKHJldCwgbWNmX2VkbWFf dHhfaGFuZGxlciwKKwkJCQkgIDAsICJlRE1BIiwgbWNmX2VkbWEpOworCQlpZiAocmV0KQorCQkJ cmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAi ZWRtYS1lcnIiKTsKKwlpZiAocmV0ICE9IC1FTlhJTykgeworCQlyZXQgPSByZXF1ZXN0X2lycShy ZXQsIG1jZl9lZG1hX2Vycl9oYW5kbGVyLAorCQkJCSAgMCwgImVETUEiLCBtY2ZfZWRtYSk7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMg dm9pZCBtY2ZfZWRtYV9pcnFfZnJlZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJ CXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKm1jZl9lZG1hKQoreworCWludCBpcnE7CisJc3RydWN0 IHJlc291cmNlICpyZXM7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBk ZXYsCisJCQlJT1JFU09VUkNFX0lSUSwgImVkbWEtdHgtMDAtMTUiKTsKKwlpZiAocmVzKSB7CisJ CWZvciAoaXJxID0gcmVzLT5zdGFydDsgaXJxIDw9IHJlcy0+ZW5kOyBpcnErKykKKwkJCWZyZWVf aXJxKGlycSwgbWNmX2VkbWEpOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9i eW5hbWUocGRldiwKKwkJCUlPUkVTT1VSQ0VfSVJRLCAiZWRtYS10eC0xNi01NSIpOworCWlmIChy ZXMpIHsKKwkJZm9yIChpcnEgPSByZXMtPnN0YXJ0OyBpcnEgPD0gcmVzLT5lbmQ7IGlycSsrKQor CQkJZnJlZV9pcnEoaXJxLCBtY2ZfZWRtYSk7CisJfQorCisJaXJxID0gcGxhdGZvcm1fZ2V0X2ly cV9ieW5hbWUocGRldiwgImVkbWEtdHgtNTYtNjMiKTsKKwlpZiAoaXJxICE9IC1FTlhJTykKKwkJ ZnJlZV9pcnEoaXJxLCBtY2ZfZWRtYSk7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFt ZShwZGV2LCAiZWRtYS1lcnIiKTsKKwlpZiAoaXJxICE9IC1FTlhJTykKKwkJZnJlZV9pcnEoaXJx LCBtY2ZfZWRtYSk7Cit9CisKK3N0YXRpYyBpbnQgbWNmX2VkbWFfcHJvYmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbWNmX2VkbWFfcGxhdGZvcm1fZGF0YSAqcGRh dGE7CisJc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqbWNmX2VkbWE7CisJc3RydWN0IGZzbF9lZG1h X2NoYW4gKm1jZl9jaGFuOworCXN0cnVjdCBlZG1hX3JlZ3MgKnJlZ3M7CisJc3RydWN0IHJlc291 cmNlICpyZXM7CisJaW50IHJldCwgaSwgbGVuLCBjaGFuczsKKworCXBkYXRhID0gZGV2X2dldF9w bGF0ZGF0YSgmcGRldi0+ZGV2KTsKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRl diwgIm5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9 CisKKwljaGFucyA9IHBkYXRhLT5kbWFfY2hhbm5lbHM7CisJbGVuID0gc2l6ZW9mKCptY2ZfZWRt YSkgKyBzaXplb2YoKm1jZl9jaGFuKSAqIGNoYW5zOworCW1jZl9lZG1hID0gZGV2bV9remFsbG9j KCZwZGV2LT5kZXYsIGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtY2ZfZWRtYSkKKwkJcmV0dXJu IC1FTk9NRU07CisKKwltY2ZfZWRtYS0+bl9jaGFucyA9IGNoYW5zOworCisJLyogU2V0IHVwIHZl cnNpb24gZm9yIENvbGRGaXJlIGVkbWEgKi8KKwltY2ZfZWRtYS0+dmVyc2lvbiA9IHYyOworCW1j Zl9lZG1hLT5iaWdfZW5kaWFuID0gMTsKKworCWlmICghbWNmX2VkbWEtPm5fY2hhbnMpIHsKKwkJ ZGV2X2luZm8oJnBkZXYtPmRldiwgInNldHRpbmcgZGVmYXVsdCBjaGFubmVsIG51bWJlciB0byA2 NCIpOworCQltY2ZfZWRtYS0+bl9jaGFucyA9IDY0OworCX0KKworCW11dGV4X2luaXQoJm1jZl9l ZG1hLT5mc2xfZWRtYV9tdXRleCk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRl diwgSU9SRVNPVVJDRV9NRU0sIDApOworCisJbWNmX2VkbWEtPm1lbWJhc2UgPSBkZXZtX2lvcmVt YXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKG1jZl9lZG1hLT5tZW1i YXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIobWNmX2VkbWEtPm1lbWJhc2UpOworCisJZnNsX2VkbWFf c2V0dXBfcmVncyhtY2ZfZWRtYSk7CisJcmVncyA9ICZtY2ZfZWRtYS0+cmVnczsKKworCUlOSVRf TElTVF9IRUFEKCZtY2ZfZWRtYS0+ZG1hX2Rldi5jaGFubmVscyk7CisJZm9yIChpID0gMDsgaSA8 IG1jZl9lZG1hLT5uX2NoYW5zOyBpKyspIHsKKwkJc3RydWN0IGZzbF9lZG1hX2NoYW4gKm1jZl9j aGFuID0gJm1jZl9lZG1hLT5jaGFuc1tpXTsKKworCQltY2ZfY2hhbi0+ZWRtYSA9IG1jZl9lZG1h OworCQltY2ZfY2hhbi0+c2xhdmVfaWQgPSBpOworCQltY2ZfY2hhbi0+aWRsZSA9IHRydWU7CisJ CW1jZl9jaGFuLT52Y2hhbi5kZXNjX2ZyZWUgPSBmc2xfZWRtYV9mcmVlX2Rlc2M7CisJCXZjaGFu X2luaXQoJm1jZl9jaGFuLT52Y2hhbiwgJm1jZl9lZG1hLT5kbWFfZGV2KTsKKwkJaW93cml0ZTMy KDB4MCwgJnJlZ3MtPnRjZFtpXS5jc3IpOworCX0KKworCWlvd3JpdGUzMih+MCwgcmVncy0+aW50 aCk7CisJaW93cml0ZTMyKH4wLCByZWdzLT5pbnRsKTsKKworCXJldCA9IG1jZl9lZG1hX2lycV9p bml0KHBkZXYsIG1jZl9lZG1hKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZG1hX2Nh cF9zZXQoRE1BX1BSSVZBVEUsIG1jZl9lZG1hLT5kbWFfZGV2LmNhcF9tYXNrKTsKKwlkbWFfY2Fw X3NldChETUFfU0xBVkUsIG1jZl9lZG1hLT5kbWFfZGV2LmNhcF9tYXNrKTsKKwlkbWFfY2FwX3Nl dChETUFfQ1lDTElDLCBtY2ZfZWRtYS0+ZG1hX2Rldi5jYXBfbWFzayk7CisKKwltY2ZfZWRtYS0+ ZG1hX2Rldi5kZXYgPSAmcGRldi0+ZGV2OworCW1jZl9lZG1hLT5kbWFfZGV2LmRldmljZV9hbGxv Y19jaGFuX3Jlc291cmNlcyA9CisJCQlmc2xfZWRtYV9hbGxvY19jaGFuX3Jlc291cmNlczsKKwlt Y2ZfZWRtYS0+ZG1hX2Rldi5kZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlcyA9CisJCQlmc2xfZWRt YV9mcmVlX2NoYW5fcmVzb3VyY2VzOworCW1jZl9lZG1hLT5kbWFfZGV2LmRldmljZV9jb25maWcg PSBmc2xfZWRtYV9zbGF2ZV9jb25maWc7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNlX3ByZXBf ZG1hX2N5Y2xpYyA9CisJCQlmc2xfZWRtYV9wcmVwX2RtYV9jeWNsaWM7CisJbWNmX2VkbWEtPmRt YV9kZXYuZGV2aWNlX3ByZXBfc2xhdmVfc2cgPSBmc2xfZWRtYV9wcmVwX3NsYXZlX3NnOworCW1j Zl9lZG1hLT5kbWFfZGV2LmRldmljZV90eF9zdGF0dXMgPSBmc2xfZWRtYV90eF9zdGF0dXM7CisJ bWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNlX3BhdXNlID0gZnNsX2VkbWFfcGF1c2U7CisJbWNmX2Vk bWEtPmRtYV9kZXYuZGV2aWNlX3Jlc3VtZSA9IGZzbF9lZG1hX3Jlc3VtZTsKKwltY2ZfZWRtYS0+ ZG1hX2Rldi5kZXZpY2VfdGVybWluYXRlX2FsbCA9IGZzbF9lZG1hX3Rlcm1pbmF0ZV9hbGw7CisJ bWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSBmc2xfZWRtYV9pc3N1ZV9w ZW5kaW5nOworCisJbWNmX2VkbWEtPmRtYV9kZXYuc3JjX2FkZHJfd2lkdGhzID0gRlNMX0VETUFf QlVTV0lEVEhTOworCW1jZl9lZG1hLT5kbWFfZGV2LmRzdF9hZGRyX3dpZHRocyA9IEZTTF9FRE1B X0JVU1dJRFRIUzsKKwltY2ZfZWRtYS0+ZG1hX2Rldi5kaXJlY3Rpb25zID0KKwkJCUJJVChETUFf REVWX1RPX01FTSkgfCBCSVQoRE1BX01FTV9UT19ERVYpOworCisJbWNmX2VkbWEtPmRtYV9kZXYu ZmlsdGVyLmZuID0gbWNmX2VkbWFfZmlsdGVyX2ZuOworCW1jZl9lZG1hLT5kbWFfZGV2LmZpbHRl ci5tYXAgPSBwZGF0YS0+c2xhdmVfbWFwOworCW1jZl9lZG1hLT5kbWFfZGV2LmZpbHRlci5tYXBj bnQgPSBwZGF0YS0+c2xhdmVjbnQ7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtY2Zf ZWRtYSk7CisKKwlyZXQgPSBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZtY2ZfZWRtYS0+ZG1h X2Rldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiQ2FuJ3QgcmVn aXN0ZXIgRnJlZXNjYWxlIGVETUEgZW5naW5lLiAoJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0 OworCX0KKworCS8qIEVuYWJsZSByb3VuZCByb2JpbiBhcmJpdHJhdGlvbiAqLworCWlvd3JpdGUz MihFRE1BX0NSX0VSR0EgfCBFRE1BX0NSX0VSQ0EsIHJlZ3MtPmNyKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IG1jZl9lZG1hX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQoreworCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKm1jZl9lZG1hID0gcGxhdGZvcm1fZ2V0 X2RydmRhdGEocGRldik7CisKKwltY2ZfZWRtYV9pcnFfZnJlZShwZGV2LCBtY2ZfZWRtYSk7CisJ ZnNsX2VkbWFfY2xlYW51cF92Y2hhbigmbWNmX2VkbWEtPmRtYV9kZXYpOworCWRtYV9hc3luY19k ZXZpY2VfdW5yZWdpc3RlcigmbWNmX2VkbWEtPmRtYV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1jZl9lZG1hX2RyaXZlciA9IHsKKwkuZHJp dmVyCQk9IHsKKwkJLm5hbWUJPSAibWNmLWVkbWEiLAorCX0sCisJLnByb2JlCQk9IG1jZl9lZG1h X3Byb2JlLAorCS5yZW1vdmUJCT0gbWNmX2VkbWFfcmVtb3ZlLAorfTsKKworYm9vbCBtY2ZfZWRt YV9maWx0ZXJfZm4oc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpwYXJhbSkKK3sKKwlpZiAo Y2hhbi0+ZGV2aWNlLT5kZXYtPmRyaXZlciA9PSAmbWNmX2VkbWFfZHJpdmVyLmRyaXZlcikgewor CQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqbWNmX2NoYW4gPSB0b19mc2xfZWRtYV9jaGFuKGNoYW4p OworCisJCXJldHVybiAobWNmX2NoYW4tPnNsYXZlX2lkID09ICh1MzIpcGFyYW0pOworCX0KKwor CXJldHVybiBmYWxzZTsKK30KK0VYUE9SVF9TWU1CT0wobWNmX2VkbWFfZmlsdGVyX2ZuKTsKKwor c3RhdGljIGludCBfX2luaXQgbWNmX2VkbWFfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9y bV9kcml2ZXJfcmVnaXN0ZXIoJm1jZl9lZG1hX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwo bWNmX2VkbWFfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtY2ZfZWRtYV9leGl0KHZvaWQp Cit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1jZl9lZG1hX2RyaXZlcik7Cit9Citt b2R1bGVfZXhpdChtY2ZfZWRtYV9leGl0KTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptY2Yt ZWRtYSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmVlc2NhbGUgZURNQSBlbmdpbmUgZHJpdmVy LCBDb2xkRmlyZSBmYW1pbHkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdp dCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9kbWEtbWNmLWVkbWEuaCBiL2luY2x1ZGUv bGludXgvcGxhdGZvcm1fZGF0YS9kbWEtbWNmLWVkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLmQ3MThjY2ZhMzQyMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1 ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9kbWEtbWNmLWVkbWEuaApAQCAtMCwwICsxLDM4IEBACisv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIEZyZWVzY2FsZSBl RE1BIHBsYXRmb3JtIGRhdGEsIENvbGRGaXJlIFNvQydzIGZhbWlseS4KKyAqCisgKiBDb3B5cmln aHQgKGMpIDIwMTcgQW5nZWxvIER1cmVnaGVsbG8gPGFuZ2Vsb0BzeXNhbS5pdD4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBf X0xJTlVYX1BMQVRGT1JNX0RBVEFfTUNGX0VETUFfSF9fCisjZGVmaW5lIF9fTElOVVhfUExBVEZP Uk1fREFUQV9NQ0ZfRURNQV9IX18KKworc3RydWN0IGRtYV9zbGF2ZV9tYXA7CisKK2Jvb2wgbWNm X2VkbWFfZmlsdGVyX2ZuKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqcGFyYW0pOworCisj ZGVmaW5lIE1DRl9FRE1BX0ZJTFRFUl9QQVJBTShjaCkJKCh2b2lkICopY2gpCisKKy8qKgorICog c3RydWN0IG1jZl9lZG1hX3BsYXRmb3JtX2RhdGEgLSBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhIGZv ciBlRE1BIGVuZ2luZQorICoKKyAqIEB2ZXIJCQlUaGUgZURNQSBtb2R1bGUgdmVyc2lvbi4KKyAq IEBkbWFfY2hhbm5lbHMJVGhlIG51bWJlciBvZiBlRE1BIGNoYW5uZWxzLgorICovCitzdHJ1Y3Qg bWNmX2VkbWFfcGxhdGZvcm1fZGF0YSB7CisJaW50IGRtYV9jaGFubmVsczsKKwljb25zdCBzdHJ1 Y3QgZG1hX3NsYXZlX21hcCAqc2xhdmVfbWFwOworCWludCBzbGF2ZWNudDsKK307CisKKyNlbmRp ZiAvKiBfX0xJTlVYX1BMQVRGT1JNX0RBVEFfTUNGX0VETUFfSF9fICovCg==