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: [v5,2/2] dmaengine: fsl-edma: add ColdFire mcf5441x edma support From: Angelo Dureghello Message-Id: <20180622094404.10841-2-angelo@sysam.it> Date: Fri, 22 Jun 2018 11:44:04 +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 Z2VzCgpDaGFuZ2VzIGZvciB2NToKbm9uZQotLS0KIGRyaXZlcnMvZG1hL0tjb25maWcgICAgICAg ICAgICAgICAgICAgICAgICB8ICAxMSArCiBkcml2ZXJzL2RtYS9NYWtlZmlsZSAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9kbWEvbWNmLWVkbWEuYyAgICAgICAgICAgICAg ICAgICAgIHwgMjk5ICsrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9saW51eC9wbGF0Zm9y bV9kYXRhL2RtYS1tY2YtZWRtYS5oIHwgIDM4ICsrKwogNCBmaWxlcyBjaGFuZ2VkLCAzNDkgaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hL21jZi1lZG1hLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvZG1hLW1jZi1lZG1h LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9LY29uZmlnIGIvZHJpdmVycy9kbWEvS2NvbmZp ZwppbmRleCBjYTE2ODBhZmEyMGEuLjIzZjQ0NDYwODUxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9k bWEvS2NvbmZpZworKysgYi9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC0zMjAsNiArMzIwLDE3IEBA IGNvbmZpZyBMUEMxOFhYX0RNQU1VWAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIERNQSBvbiBOWFAg TFBDMTh4eC80M3h4IHBsYXRmb3JtcwogCSAgd2l0aCBQTDA4MCBhbmQgbXVsdGlwbGV4ZWQgRE1B IHJlcXVlc3QgbGluZXMuCiAKK2NvbmZpZyBNQ0ZfRURNQQorICAgICAgICB0cmlzdGF0ZSAiRnJl ZXNjYWxlIGVETUEgZW5naW5lIHN1cHBvcnQsIENvbGRGaXJlIG1jZjU0NDF4IFNvQ3MiCisgICAg ICAgIGRlcGVuZHMgb24gTTU0NDF4CisgICAgICAgIHNlbGVjdCBETUFfRU5HSU5FCisgICAgICAg IHNlbGVjdCBETUFfVklSVFVBTF9DSEFOTkVMUworICAgICAgICBoZWxwCisgICAgICAgICAgU3Vw cG9ydCB0aGUgRnJlZXNjYWxlIENvbGRGaXJlIGVETUEgZW5naW5lLCA2NC1jaGFubmVsCisgICAg ICAgICAgaW1wbGVtZW50YXRpb24gdGhhdCBwZXJmb3JtcyBjb21wbGV4IGRhdGEgdHJhbnNmZXJz IHdpdGgKKyAgICAgICAgICBtaW5pbWFsIGludGVydmVudGlvbiBmcm9tIGEgaG9zdCBwcm9jZXNz b3IuCisgICAgICAgICAgVGhpcyBtb2R1bGUgY2FuIGJlIGZvdW5kIG9uIEZyZWVzY2FsZSBDb2xk RmlyZSBtY2Y1NDQxeCBTb0NzLgorCiBjb25maWcgTU1QX1BETUEKIAlib29sICJNTVAgUERNQSBz dXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9NTVAgfHwgQVJDSF9QWEEgfHwgQ09NUElMRV9URVNU CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hL01ha2VmaWxl CmluZGV4IDY2MDIyZjU5ZmNhNC4uZDk3ZjMxN2Y0YjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Rt YS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS9NYWtlZmlsZQpAQCAtMzIsNiArMzIsNyBAQCBv YmotJChDT05GSUdfRFdfRE1BQ19DT1JFKSArPSBkdy8KIG9iai0kKENPTkZJR19FUDkzWFhfRE1B KSArPSBlcDkzeHhfZG1hLm8KIG9iai0kKENPTkZJR19GU0xfRE1BKSArPSBmc2xkbWEubwogb2Jq LSQoQ09ORklHX0ZTTF9FRE1BKSArPSBmc2wtZWRtYS5vIGZzbC1lZG1hLWNvbW1vbi5vCitvYmot JChDT05GSUdfTUNGX0VETUEpICs9IG1jZi1lZG1hLm8gZnNsLWVkbWEtY29tbW9uLm8KIG9iai0k KENPTkZJR19GU0xfUkFJRCkgKz0gZnNsX3JhaWQubwogb2JqLSQoQ09ORklHX0hTVV9ETUEpICs9 IGhzdS8KIG9iai0kKENPTkZJR19JTUdfTURDX0RNQSkgKz0gaW1nLW1kYy1kbWEubwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9kbWEvbWNmLWVkbWEuYyBiL2RyaXZlcnMvZG1hL21jZi1lZG1hLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45ZTFkNTVhNWNjOTAKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS9tY2YtZWRtYS5jCkBAIC0wLDAgKzEsMjk5IEBACisv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLy8gQ29weXJpZ2h0IChjKSAyMDEz LTIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYworLy8gQ29weXJpZ2h0IChjKSAyMDE3 IFN5c2FtLCBBbmdlbG8gRHVyZWdoZWxsbyAgPGFuZ2Vsb0BzeXNhbS5pdD4KKy8qCisgKiBkcml2 ZXJzL2RtYS9tY2YtZWRtYS5jCisgKgorICogRHJpdmVyIGZvciB0aGUgRnJlZXNjYWxlIENvbGRG aXJlIDY0LWNoIGVETUEgaW1wbGVtZW50YXRpb24sCisgKiBkZXJpdmVkIGZyb20gZHJpdmVycy9k bWEvZnNsLWVkbWEuYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVy bXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg IExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICov CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQu aD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1tY2YtZWRtYS5o PgorCisjaW5jbHVkZSAiZnNsLWVkbWEtY29tbW9uLmgiCisKKyNkZWZpbmUgRURNQV9DSEFOTkVM UwkJNjQKKyNkZWZpbmUgRURNQV9NQVNLX0NIKHgpCQkoKHgpICYgR0VOTUFTSyg1LCAwKSkKKwor c3RhdGljIGlycXJldHVybl90IG1jZl9lZG1hX3R4X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2 X2lkKQoreworCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKm1jZl9lZG1hID0gZGV2X2lkOworCXN0 cnVjdCBlZG1hX3JlZ3MgKnJlZ3MgPSAmbWNmX2VkbWEtPnJlZ3M7CisJdW5zaWduZWQgaW50IGNo OworCXN0cnVjdCBmc2xfZWRtYV9jaGFuICptY2ZfY2hhbjsKKwl1NjQgaW50bWFwOworCisJaW50 bWFwID0gaW9yZWFkMzIocmVncy0+aW50aCk7CisJaW50bWFwIDw8PSAzMjsKKwlpbnRtYXAgfD0g aW9yZWFkMzIocmVncy0+aW50bCk7CisJaWYgKCFpbnRtYXApCisJCXJldHVybiBJUlFfTk9ORTsK KworCWZvciAoY2ggPSAwOyBjaCA8IG1jZl9lZG1hLT5uX2NoYW5zOyBjaCsrKSB7CisJCWlmIChp bnRtYXAgJiAoMHgxIDw8IGNoKSkgeworCQkJaW93cml0ZTgoRURNQV9NQVNLX0NIKGNoKSwgcmVn cy0+Y2ludCk7CisKKwkJCW1jZl9jaGFuID0gJm1jZl9lZG1hLT5jaGFuc1tjaF07CisKKwkJCXNw aW5fbG9jaygmbWNmX2NoYW4tPnZjaGFuLmxvY2spOworCQkJaWYgKCFtY2ZfY2hhbi0+ZWRlc2Mt PmlzY3ljbGljKSB7CisJCQkJbGlzdF9kZWwoJm1jZl9jaGFuLT5lZGVzYy0+dmRlc2Mubm9kZSk7 CisJCQkJdmNoYW5fY29va2llX2NvbXBsZXRlKCZtY2ZfY2hhbi0+ZWRlc2MtPnZkZXNjKTsKKwkJ CQltY2ZfY2hhbi0+ZWRlc2MgPSBOVUxMOworCQkJCW1jZl9jaGFuLT5zdGF0dXMgPSBETUFfQ09N UExFVEU7CisJCQkJbWNmX2NoYW4tPmlkbGUgPSB0cnVlOworCQkJfSBlbHNlIHsKKwkJCQl2Y2hh bl9jeWNsaWNfY2FsbGJhY2soJm1jZl9jaGFuLT5lZGVzYy0+dmRlc2MpOworCQkJfQorCisJCQlp ZiAoIW1jZl9jaGFuLT5lZGVzYykKKwkJCQlmc2xfZWRtYV94ZmVyX2Rlc2MobWNmX2NoYW4pOwor CisJCQlzcGluX3VubG9jaygmbWNmX2NoYW4tPnZjaGFuLmxvY2spOworCQl9CisJfQorCisJcmV0 dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWNmX2VkbWFfZXJyX2hh bmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUg Km1jZl9lZG1hID0gZGV2X2lkOworCXN0cnVjdCBlZG1hX3JlZ3MgKnJlZ3MgPSAmbWNmX2VkbWEt PnJlZ3M7CisJdW5zaWduZWQgaW50IGVyciwgY2g7CisKKwllcnIgPSBpb3JlYWQzMihyZWdzLT5l cnJsKTsKKwlpZiAoIWVycikKKwkJcmV0dXJuIElSUV9OT05FOworCisJZm9yIChjaCA9IDA7IGNo IDwgKEVETUFfQ0hBTk5FTFMgLyAyKTsgY2grKykgeworCQlpZiAoZXJyICYgKDB4MSA8PCBjaCkp IHsKKwkJCWZzbF9lZG1hX2Rpc2FibGVfcmVxdWVzdCgmbWNmX2VkbWEtPmNoYW5zW2NoXSk7CisJ CQlpb3dyaXRlOChFRE1BX0NFUlJfQ0VSUihjaCksIHJlZ3MtPmNlcnIpOworCQkJbWNmX2VkbWEt PmNoYW5zW2NoXS5zdGF0dXMgPSBETUFfRVJST1I7CisJCQltY2ZfZWRtYS0+Y2hhbnNbY2hdLmlk bGUgPSB0cnVlOworCQl9CisJfQorCisJZXJyID0gaW9yZWFkMzIocmVncy0+ZXJyaCk7CisJaWYg KCFlcnIpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWZvciAoY2ggPSAoRURNQV9DSEFOTkVMUyAv IDIpOyBjaCA8IEVETUFfQ0hBTk5FTFM7IGNoKyspIHsKKwkJaWYgKGVyciAmICgweDEgPDwgKGNo IC0gKEVETUFfQ0hBTk5FTFMgLyAyKSkpKSB7CisJCQlmc2xfZWRtYV9kaXNhYmxlX3JlcXVlc3Qo Jm1jZl9lZG1hLT5jaGFuc1tjaF0pOworCQkJaW93cml0ZTgoRURNQV9DRVJSX0NFUlIoY2gpLCBy ZWdzLT5jZXJyKTsKKwkJCW1jZl9lZG1hLT5jaGFuc1tjaF0uc3RhdHVzID0gRE1BX0VSUk9SOwor CQkJbWNmX2VkbWEtPmNoYW5zW2NoXS5pZGxlID0gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBJ UlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBtY2ZfZWRtYV9pcnFfaW5pdChzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCXN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKm1jZl9lZG1h KQoreworCWludCByZXQgPSAwLCBpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJcmVzID0g cGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LAorCQkJCUlPUkVTT1VSQ0VfSVJRLCAi ZWRtYS10eC0wMC0xNSIpOworCWlmICghcmVzKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKHJldCA9 IDAsIGkgPSByZXMtPnN0YXJ0OyBpIDw9IHJlcy0+ZW5kOyArK2kpIHsKKwkJcmV0IHw9IGRldm1f cmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaSwKKwkJCW1jZl9lZG1hX3R4X2hhbmRsZXIsIDAsICJl RE1BIiwgbWNmX2VkbWEpOworCX0KKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmVzID0g cGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LAorCQkJSU9SRVNPVVJDRV9JUlEsICJl ZG1hLXR4LTE2LTU1Iik7CisJaWYgKCFyZXMpCisJCXJldHVybiAtMTsKKworCWZvciAocmV0ID0g MCwgaSA9IHJlcy0+c3RhcnQ7IGkgPD0gcmVzLT5lbmQ7ICsraSkgeworCQlyZXQgfD0gZGV2bV9y ZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpLAorCQkJbWNmX2VkbWFfdHhfaGFuZGxlciwgMCwgImVE TUEiLCBtY2ZfZWRtYSk7CisJfQorCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBw bGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiZWRtYS10eC01Ni02MyIpOworCWlmIChyZXQg IT0gLUVOWElPKSB7CisJCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgcmV0LAor CQkJbWNmX2VkbWFfdHhfaGFuZGxlciwgMCwgImVETUEiLCBtY2ZfZWRtYSk7CisJCWlmIChyZXQp CisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBk ZXYsICJlZG1hLWVyciIpOworCWlmIChyZXQgIT0gLUVOWElPKSB7CisJCXJldCA9IGRldm1fcmVx dWVzdF9pcnEoJnBkZXYtPmRldiwgcmV0LAorCQkJbWNmX2VkbWFfZXJyX2hhbmRsZXIsIDAsICJl RE1BIiwgbWNmX2VkbWEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBtY2ZfZWRtYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQoreworCXN0cnVjdCBtY2ZfZWRtYV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlz dHJ1Y3QgZnNsX2VkbWFfZW5naW5lICptY2ZfZWRtYTsKKwlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAq bWNmX2NoYW47CisJc3RydWN0IGVkbWFfcmVncyAqcmVnczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJl czsKKwlpbnQgcmV0LCBpLCBsZW4sIGNoYW5zOworCisJcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRh KCZwZGV2LT5kZXYpOworCWlmICghcGRhdGEpCisJCXJldHVybiBQVFJfRVJSKHBkYXRhKTsKKwor CWNoYW5zID0gcGRhdGEtPmRtYV9jaGFubmVsczsKKwlsZW4gPSBzaXplb2YoKm1jZl9lZG1hKSAr IHNpemVvZigqbWNmX2NoYW4pICogY2hhbnM7CisJbWNmX2VkbWEgPSBkZXZtX2t6YWxsb2MoJnBk ZXYtPmRldiwgbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1jZl9lZG1hKQorCQlyZXR1cm4gLUVO T01FTTsKKworCW1jZl9lZG1hLT5uX2NoYW5zID0gY2hhbnM7CisKKwkvKiBTZXQgdXAgdmVyc2lv biBmb3IgQ29sZEZpcmUgZWRtYSAqLworCW1jZl9lZG1hLT52ZXJzaW9uID0gdjI7CisJbWNmX2Vk bWEtPmJpZ19lbmRpYW4gPSAxOworCisJaWYgKCFtY2ZfZWRtYS0+bl9jaGFucykgeworCQlkZXZf aW5mbygmcGRldi0+ZGV2LCAic2V0dGluZyBkZWZhdWx0IGNoYW5uZWwgbnVtYmVyIHRvIDY0Iik7 CisJCW1jZl9lZG1hLT5uX2NoYW5zID0gNjQ7CisJfQorCisJbXV0ZXhfaW5pdCgmbWNmX2VkbWEt PmZzbF9lZG1hX211dGV4KTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJ T1JFU09VUkNFX01FTSwgMCk7CisKKwltY2ZfZWRtYS0+bWVtYmFzZSA9IGRldm1faW9yZW1hcF9y ZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIobWNmX2VkbWEtPm1lbWJhc2Up KQorCQlyZXR1cm4gUFRSX0VSUihtY2ZfZWRtYS0+bWVtYmFzZSk7CisKKwlmc2xfZWRtYV9zZXR1 cF9yZWdzKG1jZl9lZG1hKTsKKwlyZWdzID0gJm1jZl9lZG1hLT5yZWdzOworCisJSU5JVF9MSVNU X0hFQUQoJm1jZl9lZG1hLT5kbWFfZGV2LmNoYW5uZWxzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbWNm X2VkbWEtPm5fY2hhbnM7IGkrKykgeworCQlzdHJ1Y3QgZnNsX2VkbWFfY2hhbiAqbWNmX2NoYW4g PSAmbWNmX2VkbWEtPmNoYW5zW2ldOworCisJCW1jZl9jaGFuLT5lZG1hID0gbWNmX2VkbWE7CisJ CW1jZl9jaGFuLT5zbGF2ZV9pZCA9IGk7CisJCW1jZl9jaGFuLT5pZGxlID0gdHJ1ZTsKKwkJbWNm X2NoYW4tPnZjaGFuLmRlc2NfZnJlZSA9IGZzbF9lZG1hX2ZyZWVfZGVzYzsKKwkJdmNoYW5faW5p dCgmbWNmX2NoYW4tPnZjaGFuLCAmbWNmX2VkbWEtPmRtYV9kZXYpOworCQlpb3dyaXRlMzIoMHgw LCAmcmVncy0+dGNkW2ldLmNzcik7CisJfQorCisJaW93cml0ZTMyKH4wLCByZWdzLT5pbnRoKTsK Kwlpb3dyaXRlMzIofjAsIHJlZ3MtPmludGwpOworCisJcmV0ID0gbWNmX2VkbWFfaXJxX2luaXQo cGRldiwgbWNmX2VkbWEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlkbWFfY2FwX3Nl dChETUFfUFJJVkFURSwgbWNmX2VkbWEtPmRtYV9kZXYuY2FwX21hc2spOworCWRtYV9jYXBfc2V0 KERNQV9TTEFWRSwgbWNmX2VkbWEtPmRtYV9kZXYuY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERN QV9DWUNMSUMsIG1jZl9lZG1hLT5kbWFfZGV2LmNhcF9tYXNrKTsKKworCW1jZl9lZG1hLT5kbWFf ZGV2LmRldiA9ICZwZGV2LT5kZXY7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNlX2FsbG9jX2No YW5fcmVzb3VyY2VzID0KKwkJCWZzbF9lZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzOworCW1jZl9l ZG1hLT5kbWFfZGV2LmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzID0KKwkJCWZzbF9lZG1hX2Zy ZWVfY2hhbl9yZXNvdXJjZXM7CisJbWNmX2VkbWEtPmRtYV9kZXYuZGV2aWNlX2NvbmZpZyA9IGZz bF9lZG1hX3NsYXZlX2NvbmZpZzsKKwltY2ZfZWRtYS0+ZG1hX2Rldi5kZXZpY2VfcHJlcF9kbWFf Y3ljbGljID0KKwkJCWZzbF9lZG1hX3ByZXBfZG1hX2N5Y2xpYzsKKwltY2ZfZWRtYS0+ZG1hX2Rl di5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9IGZzbF9lZG1hX3ByZXBfc2xhdmVfc2c7CisJbWNmX2Vk bWEtPmRtYV9kZXYuZGV2aWNlX3R4X3N0YXR1cyA9IGZzbF9lZG1hX3R4X3N0YXR1czsKKwltY2Zf ZWRtYS0+ZG1hX2Rldi5kZXZpY2VfcGF1c2UgPSBmc2xfZWRtYV9wYXVzZTsKKwltY2ZfZWRtYS0+ ZG1hX2Rldi5kZXZpY2VfcmVzdW1lID0gZnNsX2VkbWFfcmVzdW1lOworCW1jZl9lZG1hLT5kbWFf ZGV2LmRldmljZV90ZXJtaW5hdGVfYWxsID0gZnNsX2VkbWFfdGVybWluYXRlX2FsbDsKKwltY2Zf ZWRtYS0+ZG1hX2Rldi5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IGZzbF9lZG1hX2lzc3VlX3BlbmRp bmc7CisKKwltY2ZfZWRtYS0+ZG1hX2Rldi5zcmNfYWRkcl93aWR0aHMgPSBGU0xfRURNQV9CVVNX SURUSFM7CisJbWNmX2VkbWEtPmRtYV9kZXYuZHN0X2FkZHJfd2lkdGhzID0gRlNMX0VETUFfQlVT V0lEVEhTOworCW1jZl9lZG1hLT5kbWFfZGV2LmRpcmVjdGlvbnMgPQorCQkJQklUKERNQV9ERVZf VE9fTUVNKSB8IEJJVChETUFfTUVNX1RPX0RFVik7CisKKwltY2ZfZWRtYS0+ZG1hX2Rldi5maWx0 ZXIuZm4gPSBtY2ZfZWRtYV9maWx0ZXJfZm47CisJbWNmX2VkbWEtPmRtYV9kZXYuZmlsdGVyLm1h cCA9IHBkYXRhLT5zbGF2ZV9tYXA7CisJbWNmX2VkbWEtPmRtYV9kZXYuZmlsdGVyLm1hcGNudCA9 IHBkYXRhLT5zbGF2ZWNudDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jZl9lZG1h KTsKKworCXJldCA9IGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJm1jZl9lZG1hLT5kbWFfZGV2 KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJDYW4ndCByZWdpc3Rl ciBGcmVlc2NhbGUgZURNQSBlbmdpbmUuICglZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ fQorCisJLyogRW5hYmxlIHJvdW5kIHJvYmluIGFyYml0cmF0aW9uICovCisJaW93cml0ZTMyKEVE TUFfQ1JfRVJHQSB8IEVETUFfQ1JfRVJDQSwgcmVncy0+Y3IpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgbWNmX2VkbWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cit7CisJc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqbWNmX2VkbWEgPSBwbGF0Zm9ybV9nZXRfZHJ2 ZGF0YShwZGV2KTsKKworCWZzbF9lZG1hX2NsZWFudXBfdmNoYW4oJm1jZl9lZG1hLT5kbWFfZGV2 KTsKKwlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJm1jZl9lZG1hLT5kbWFfZGV2KTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtY2ZfZWRtYV9k cml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1jZi1lZG1hIiwKKwl9LAorCS5w cm9iZQkJPSBtY2ZfZWRtYV9wcm9iZSwKKwkucmVtb3ZlCQk9IG1jZl9lZG1hX3JlbW92ZSwKK307 CisKK2Jvb2wgbWNmX2VkbWFfZmlsdGVyX2ZuKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAq cGFyYW0pCit7CisJaWYgKGNoYW4tPmRldmljZS0+ZGV2LT5kcml2ZXIgPT0gJm1jZl9lZG1hX2Ry aXZlci5kcml2ZXIpIHsKKwkJc3RydWN0IGZzbF9lZG1hX2NoYW4gKm1jZl9jaGFuID0gdG9fZnNs X2VkbWFfY2hhbihjaGFuKTsKKworCQlyZXR1cm4gKG1jZl9jaGFuLT5zbGF2ZV9pZCA9PSAoaW50 KXBhcmFtKTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MKG1jZl9lZG1h X2ZpbHRlcl9mbik7CisKK3N0YXRpYyBpbnQgX19pbml0IG1jZl9lZG1hX2luaXQodm9pZCkKK3sK KwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtY2ZfZWRtYV9kcml2ZXIpOworfQor c3Vic3lzX2luaXRjYWxsKG1jZl9lZG1hX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWNm X2VkbWFfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtY2ZfZWRt YV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobWNmX2VkbWFfZXhpdCk7CisKK01PRFVMRV9BTElB UygicGxhdGZvcm06bWNmLWVkbWEiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIGVE TUEgZW5naW5lIGRyaXZlciwgQ29sZEZpcmUgZmFtaWx5Iik7CitNT0RVTEVfTElDRU5TRSgiR1BM IHYyIik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvZG1hLW1jZi1l ZG1hLmggYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvZG1hLW1jZi1lZG1hLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40ZjQ1ZDBkNDBhYTcKLS0tIC9kZXYv bnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvZG1hLW1jZi1lZG1hLmgKQEAg LTAsMCArMSwzOCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8q CisgKiBGcmVlc2NhbGUgZURNQSBwbGF0Zm9ybSBkYXRhLCBDb2xkRmlyZSBTb0MncyBmYW1pbHku CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3IEFuZ2VsbyBEdXJlZ2hlbGxvIDxhbmdlbG9AeHh4 eHh4eHg+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor ICovCisKKyNpZm5kZWYgX19NQUNIX01DRl9FRE1BX0hfXworI2RlZmluZSBfX01BQ0hfTUNGX0VE TUFfSF9fCisKK3N0cnVjdCBkbWFfc2xhdmVfbWFwOworCitib29sIG1jZl9lZG1hX2ZpbHRlcl9m bihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKnBhcmFtKTsKKworI2RlZmluZSBNQ0ZfRURN QV9GSUxURVJfUEFSQU0oY2gpCSgodm9pZCAqKWNoKQorCisvKioKKyAqIHN0cnVjdCBtY2ZfZWRt YV9wbGF0Zm9ybV9kYXRhIC0gcGxhdGZvcm0gc3BlY2lmaWMgZGF0YSBmb3IgZURNQSBlbmdpbmUK KyAqCisgKiBAdmVyCQkJVGhlIGVETUEgbW9kdWxlIHZlcnNpb24uCisgKiBAZG1hX2NoYW5uZWxz CVRoZSBudW1iZXIgb2YgZURNQSBjaGFubmVscy4KKyAqLworc3RydWN0IG1jZl9lZG1hX3BsYXRm b3JtX2RhdGEgeworCWludCBkbWFfY2hhbm5lbHM7CisJY29uc3Qgc3RydWN0IGRtYV9zbGF2ZV9t YXAgKnNsYXZlX21hcDsKKwlpbnQgc2xhdmVjbnQ7Cit9OworCisjZW5kaWYgLyogX19NQUNIX01D Rl9FRE1BX0hfXyAqLwo=