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,2/2] dmaengine: uniphier-mdmac: add UniPhier MIO DMAC driver From: Masahiro Yamada Message-Id: <1536799869-10643-3-git-send-email-yamada.masahiro@socionext.com> Date: Thu, 13 Sep 2018 09:51:09 +0900 To: Vinod Koul , dmaengine@vger.kernel.org Cc: Masami Hiramatsu , Jassi Brar , Masahiro Yamada , linux-kernel@vger.kernel.org, Dan Williams , linux-arm-kernel@lists.infradead.org List-ID: VGhlIE1JTyBETUFDIChNZWRpYSBJTyBETUEgQ29udHJvbGxlcikgaXMgdXNlZCBpbiBVbmlQaGll ciBMRDQsClBybzQsIGFuZCBzTEQ4IFNvQ3MuCgpTaWduZWQtb2ZmLWJ5OiBNYXNhaGlybyBZYW1h ZGEgPHlhbWFkYS5tYXNhaGlyb0Bzb2Npb25leHQuY29tPgotLS0KCkNoYW5nZXMgaW4gdjM6CiAt IEdldCByZXNpZHVlIGZyb20gb24tZmxpZ2h0IGNodW5rCiAtIFVzZSBHRlBfTk9XQUlUIGluc3Rl YWQgb2YgR0ZQX0tFUk5FTCBpbiBwcmVwX3NsYXZlX3NnCiAtIFVzZSBkZXZpY2VfY29uZmlnIGhv b2sKIC0gQWRkIE5VTEwgcG9pbnRlciBjaGVjayBmb3IgdHhzdGF0ZQoKQ2hhbmdlcyBpbiB2MjoK IC0gVXNlIHBsYXRmb3JtX2lycV9jb3VudCgpIHRvIGdldCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxz CgogTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2RtYS9LY29u ZmlnICAgICAgICAgIHwgIDExICsKIGRyaXZlcnMvZG1hL01ha2VmaWxlICAgICAgICAgfCAgIDEg KwogZHJpdmVycy9kbWEvdW5pcGhpZXItbWRtYWMuYyB8IDQ5NSArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDUwOCBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEvdW5pcGhpZXItbWRtYWMuYwoKZGlm ZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggODJlYTQyNy4uNWMwNzk0 YSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTIxOTMsNiAr MjE5Myw3IEBAIEY6CWFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmMKIEY6CWFyY2gvYXJtNjQv Ym9vdC9kdHMvc29jaW9uZXh0L3VuaXBoaWVyKgogRjoJZHJpdmVycy9idXMvdW5pcGhpZXItc3lz dGVtLWJ1cy5jCiBGOglkcml2ZXJzL2Nsay91bmlwaGllci8KK0Y6CWRyaXZlcnMvZG1hZW5naW5l L3VuaXBoaWVyLW1kbWFjLmMKIEY6CWRyaXZlcnMvZ3Bpby9ncGlvLXVuaXBoaWVyLmMKIEY6CWRy aXZlcnMvaTJjL2J1c3Nlcy9pMmMtdW5pcGhpZXIqCiBGOglkcml2ZXJzL2lycWNoaXAvaXJxLXVu aXBoaWVyLWFpZGV0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL0tjb25maWcgYi9kcml2ZXJz L2RtYS9LY29uZmlnCmluZGV4IGRhY2YzZjQuLjhiOGM3ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv ZG1hL0tjb25maWcKKysrIGIvZHJpdmVycy9kbWEvS2NvbmZpZwpAQCAtNTc2LDYgKzU3NiwxNyBA QCBjb25maWcgVElNQl9ETUEKIAloZWxwCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIFRpbWJl cmRhbGUgRlBHQSBETUEgZW5naW5lLgogCitjb25maWcgVU5JUEhJRVJfTURNQUMKKwl0cmlzdGF0 ZSAiVW5pUGhpZXIgTUlPIERNQUMiCisJZGVwZW5kcyBvbiBBUkNIX1VOSVBISUVSIHx8IENPTVBJ TEVfVEVTVAorCWRlcGVuZHMgb24gT0YKKwlzZWxlY3QgRE1BX0VOR0lORQorCXNlbGVjdCBETUFf VklSVFVBTF9DSEFOTkVMUworCWhlbHAKKwkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgTUlPIERN QUMgKE1lZGlhIEkvTyBETUEgY29udHJvbGxlcikgb24gdGhlCisJICBVbmlQaGllciBwbGF0Zm9y bS4gIFRoaXMgRE1BIGNvbnRyb2xsZXIgaXMgdXNlZCBhcyB0aGUgZXh0ZXJuYWwKKwkgIERNQSBl bmdpbmUgb2YgdGhlIFNEL2VNTUMgY29udHJvbGxlcnMgb2YgdGhlIExENCwgUHJvNCwgc0xEOCBT b0NzLgorCiBjb25maWcgWEdFTkVfRE1BCiAJdHJpc3RhdGUgIkFQTSBYLUdlbmUgRE1BIHN1cHBv cnQiCiAJZGVwZW5kcyBvbiBBUkNIX1hHRU5FIHx8IENPTVBJTEVfVEVTVApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9kbWEvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS9NYWtlZmlsZQppbmRleCBjOTE3MDJk Li45NzNhMTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9NYWtlZmlsZQorKysgYi9kcml2ZXJz L2RtYS9NYWtlZmlsZQpAQCAtNjksNiArNjksNyBAQCBvYmotJChDT05GSUdfVFhYOV9ETUFDKSAr PSB0eHg5ZG1hYy5vCiBvYmotJChDT05GSUdfVEVHUkEyMF9BUEJfRE1BKSArPSB0ZWdyYTIwLWFw Yi1kbWEubwogb2JqLSQoQ09ORklHX1RFR1JBMjEwX0FETUEpICs9IHRlZ3JhMjEwLWFkbWEubwog b2JqLSQoQ09ORklHX1RJTUJfRE1BKSArPSB0aW1iX2RtYS5vCitvYmotJChDT05GSUdfVU5JUEhJ RVJfTURNQUMpICs9IHVuaXBoaWVyLW1kbWFjLm8KIG9iai0kKENPTkZJR19YR0VORV9ETUEpICs9 IHhnZW5lLWRtYS5vCiBvYmotJChDT05GSUdfWlhfRE1BKSArPSB6eF9kbWEubwogb2JqLSQoQ09O RklHX1NUX0ZETUEpICs9IHN0X2ZkbWEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvdW5pcGhp ZXItbWRtYWMuYyBiL2RyaXZlcnMvZG1hL3VuaXBoaWVyLW1kbWFjLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uZTYyMGRiZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv ZG1hL3VuaXBoaWVyLW1kbWFjLmMKQEAgLTAsMCArMSw0OTUgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDE4IFNvY2lvbmV4dCBJ bmMuCisvLyAgIEF1dGhvcjogTWFzYWhpcm8gWWFtYWRhIDx5YW1hZGEubWFzYWhpcm9Ac29jaW9u ZXh0LmNvbT4KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1t YXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgv aW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgv bGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+ CisjaW5jbHVkZSA8bGludXgvb2ZfZG1hLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2 aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ CisKKyNpbmNsdWRlICJ2aXJ0LWRtYS5oIgorCisvKiByZWdpc3RlcnMgY29tbW9uIGZvciBhbGwg Y2hhbm5lbHMgKi8KKyNkZWZpbmUgVU5JUEhJRVJfTURNQUNfQ01ECQkweDAwMAkvLyBpc3N1ZSBE TUEgc3RhcnQvYWJvcnQKKyNkZWZpbmUgICBVTklQSElFUl9NRE1BQ19DTURfQUJPUlQJCUJJVCgz MSkgLy8gMTogYWJvcnQsIDA6IHN0YXJ0CisKKy8qIHBlci1jaGFubmVsIHJlZ2lzdGVycyAqLwor I2RlZmluZSBVTklQSElFUl9NRE1BQ19DSF9PRkZTRVQJMHgxMDAKKyNkZWZpbmUgVU5JUEhJRVJf TURNQUNfQ0hfU1RSSURFCTB4MDQwCisKKyNkZWZpbmUgVU5JUEhJRVJfTURNQUNfQ0hfSVJRX1NU QVQJMHgwMTAJLy8gY3VycmVudCBodyBzdGF0dXMgKFJPKQorI2RlZmluZSBVTklQSElFUl9NRE1B Q19DSF9JUlFfUkVRCTB4MDE0CS8vIGxhdGNoZWQgU1RBVCAoV09DKQorI2RlZmluZSBVTklQSElF Ul9NRE1BQ19DSF9JUlFfRU4JMHgwMTgJLy8gSVJRIGVuYWJsZSBtYXNrCisjZGVmaW5lIFVOSVBI SUVSX01ETUFDX0NIX0lSUV9ERVQJMHgwMWMJLy8gUkVRICYgRU4gKFJPKQorI2RlZmluZSAgIFVO SVBISUVSX01ETUFDX0NIX0lSUV9fQUJPUlQJCUJJVCgxMykKKyNkZWZpbmUgICBVTklQSElFUl9N RE1BQ19DSF9JUlFfX0RPTkUJCUJJVCgxKQorI2RlZmluZSBVTklQSElFUl9NRE1BQ19DSF9TUkNf TU9ERQkweDAyMAkvLyBtb2RlIG9mIHNvdXJjZQorI2RlZmluZSBVTklQSElFUl9NRE1BQ19DSF9E RVNUX01PREUJMHgwMjQJLy8gbW9kZSBvZiBkZXN0aW5hdGlvbgorI2RlZmluZSAgIFVOSVBISUVS X01ETUFDX0NIX01PREVfX0FERFJfSU5DCSgwIDw8IDQpCisjZGVmaW5lICAgVU5JUEhJRVJfTURN QUNfQ0hfTU9ERV9fQUREUl9ERUMJKDEgPDwgNCkKKyNkZWZpbmUgICBVTklQSElFUl9NRE1BQ19D SF9NT0RFX19BRERSX0ZJWEVECSgyIDw8IDQpCisjZGVmaW5lIFVOSVBISUVSX01ETUFDX0NIX1NS Q19BRERSCTB4MDI4CS8vIHNvdXJjZSBhZGRyZXNzCisjZGVmaW5lIFVOSVBISUVSX01ETUFDX0NI X0RFU1RfQUREUgkweDAyYwkvLyBkZXN0aW5hdGlvbiBhZGRyZXNzCisjZGVmaW5lIFVOSVBISUVS X01ETUFDX0NIX1NJWkUJCTB4MDMwCS8vIHRyYW5zZmVyIGJ5dGVzCisKK3N0cnVjdCB1bmlwaGll cl9tZG1hY19kZXNjIHsKKwlzdHJ1Y3QgdmlydF9kbWFfZGVzYyB2ZDsKKwlzdHJ1Y3Qgc2NhdHRl cmxpc3QgKnNnbDsKKwl1bnNpZ25lZCBpbnQgc2dfbGVuOworCXVuc2lnbmVkIGludCBzZ19jdXI7 CisJZW51bSBkbWFfdHJhbnNmZXJfZGlyZWN0aW9uIGRpcjsKK307CisKK3N0cnVjdCB1bmlwaGll cl9tZG1hY19jaGFuIHsKKwlzdHJ1Y3QgdmlydF9kbWFfY2hhbiB2YzsKKwlzdHJ1Y3QgdW5pcGhp ZXJfbWRtYWNfZGV2aWNlICptZGV2OworCXN0cnVjdCB1bmlwaGllcl9tZG1hY19kZXNjICptZDsK Kwl2b2lkIF9faW9tZW0gKnJlZ19jaF9iYXNlOworCXVuc2lnbmVkIGludCBjaGFuX2lkOworfTsK Kworc3RydWN0IHVuaXBoaWVyX21kbWFjX2RldmljZSB7CisJc3RydWN0IGRtYV9kZXZpY2UgZGRl djsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsKKwlzdHJ1Y3Qg dW5pcGhpZXJfbWRtYWNfY2hhbiBjaGFubmVsc1swXTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdW5p cGhpZXJfbWRtYWNfY2hhbiAqdG9fdW5pcGhpZXJfbWRtYWNfY2hhbigKKwkJCQkJCXN0cnVjdCB2 aXJ0X2RtYV9jaGFuICp2YykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHZjLCBzdHJ1Y3QgdW5p cGhpZXJfbWRtYWNfY2hhbiwgdmMpOworfQorCitzdGF0aWMgc3RydWN0IHVuaXBoaWVyX21kbWFj X2Rlc2MgKnRvX3VuaXBoaWVyX21kbWFjX2Rlc2MoCisJCQkJCQlzdHJ1Y3QgdmlydF9kbWFfZGVz YyAqdmQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2ZCwgc3RydWN0IHVuaXBoaWVyX21kbWFj X2Rlc2MsIHZkKTsKK30KKworLyogbWMtPnZjLmxvY2sgbXVzdCBiZSBoZWxkIGJ5IGNhbGxlciAq Lworc3RhdGljIHN0cnVjdCB1bmlwaGllcl9tZG1hY19kZXNjICpfX3VuaXBoaWVyX21kbWFjX25l eHRfZGVzYygKKwkJCQkJCXN0cnVjdCB1bmlwaGllcl9tZG1hY19jaGFuICptYykKK3sKKwlzdHJ1 Y3QgdmlydF9kbWFfZGVzYyAqdmQ7CisKKwl2ZCA9IHZjaGFuX25leHRfZGVzYygmbWMtPnZjKTsK KwlpZiAoIXZkKSB7CisJCW1jLT5tZCA9IE5VTEw7CisJCXJldHVybiBOVUxMOworCX0KKworCWxp c3RfZGVsKCZ2ZC0+bm9kZSk7CisKKwltYy0+bWQgPSB0b191bmlwaGllcl9tZG1hY19kZXNjKHZk KTsKKworCXJldHVybiBtYy0+bWQ7Cit9CisKKy8qIG1jLT52Yy5sb2NrIG11c3QgYmUgaGVsZCBi eSBjYWxsZXIgKi8KK3N0YXRpYyB2b2lkIF9fdW5pcGhpZXJfbWRtYWNfaGFuZGxlKHN0cnVjdCB1 bmlwaGllcl9tZG1hY19jaGFuICptYywKKwkJCQkgICAgc3RydWN0IHVuaXBoaWVyX21kbWFjX2Rl c2MgKm1kKQoreworCXN0cnVjdCB1bmlwaGllcl9tZG1hY19kZXZpY2UgKm1kZXYgPSBtYy0+bWRl djsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXUzMiBpcnFfZmxhZyA9IFVOSVBISUVSX01E TUFDX0NIX0lSUV9fRE9ORTsKKwl1MzIgc3JjX21vZGUsIHNyY19hZGRyLCBkZXN0X21vZGUsIGRl c3RfYWRkciwgY2h1bmtfc2l6ZTsKKworCXNnID0gJm1kLT5zZ2xbbWQtPnNnX2N1cl07CisKKwlp ZiAobWQtPmRpciA9PSBETUFfTUVNX1RPX0RFVikgeworCQlzcmNfbW9kZSA9IFVOSVBISUVSX01E TUFDX0NIX01PREVfX0FERFJfSU5DOworCQlzcmNfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsK KwkJZGVzdF9tb2RlID0gVU5JUEhJRVJfTURNQUNfQ0hfTU9ERV9fQUREUl9GSVhFRDsKKwkJZGVz dF9hZGRyID0gMDsKKwl9IGVsc2UgeworCQlzcmNfbW9kZSA9IFVOSVBISUVSX01ETUFDX0NIX01P REVfX0FERFJfRklYRUQ7CisJCXNyY19hZGRyID0gMDsKKwkJZGVzdF9tb2RlID0gVU5JUEhJRVJf TURNQUNfQ0hfTU9ERV9fQUREUl9JTkM7CisJCWRlc3RfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNn KTsKKwl9CisKKwljaHVua19zaXplID0gc2dfZG1hX2xlbihzZyk7CisKKwl3cml0ZWwoc3JjX21v ZGUsIG1jLT5yZWdfY2hfYmFzZSArIFVOSVBISUVSX01ETUFDX0NIX1NSQ19NT0RFKTsKKwl3cml0 ZWwoZGVzdF9tb2RlLCBtYy0+cmVnX2NoX2Jhc2UgKyBVTklQSElFUl9NRE1BQ19DSF9ERVNUX01P REUpOworCXdyaXRlbChzcmNfYWRkciwgbWMtPnJlZ19jaF9iYXNlICsgVU5JUEhJRVJfTURNQUNf Q0hfU1JDX0FERFIpOworCXdyaXRlbChkZXN0X2FkZHIsIG1jLT5yZWdfY2hfYmFzZSArIFVOSVBI SUVSX01ETUFDX0NIX0RFU1RfQUREUik7CisJd3JpdGVsKGNodW5rX3NpemUsIG1jLT5yZWdfY2hf YmFzZSArIFVOSVBISUVSX01ETUFDX0NIX1NJWkUpOworCisJLyogd3JpdGUgMSB0byBjbGVhciAq LworCXdyaXRlbChpcnFfZmxhZywgbWMtPnJlZ19jaF9iYXNlICsgVU5JUEhJRVJfTURNQUNfQ0hf SVJRX1JFUSk7CisKKwl3cml0ZWwoaXJxX2ZsYWcsIG1jLT5yZWdfY2hfYmFzZSArIFVOSVBISUVS X01ETUFDX0NIX0lSUV9FTik7CisKKwl3cml0ZWwoQklUKG1jLT5jaGFuX2lkKSwgbWRldi0+cmVn X2Jhc2UgKyBVTklQSElFUl9NRE1BQ19DTUQpOworfQorCisvKiBtYy0+dmMubG9jayBtdXN0IGJl IGhlbGQgYnkgY2FsbGVyICovCitzdGF0aWMgdm9pZCBfX3VuaXBoaWVyX21kbWFjX3N0YXJ0KHN0 cnVjdCB1bmlwaGllcl9tZG1hY19jaGFuICptYykKK3sKKwlzdHJ1Y3QgdW5pcGhpZXJfbWRtYWNf ZGVzYyAqbWQ7CisKKwltZCA9IF9fdW5pcGhpZXJfbWRtYWNfbmV4dF9kZXNjKG1jKTsKKwlpZiAo bWQpCisJCV9fdW5pcGhpZXJfbWRtYWNfaGFuZGxlKG1jLCBtZCk7Cit9CisKKy8qIG1jLT52Yy5s b2NrIG11c3QgYmUgaGVsZCBieSBjYWxsZXIgKi8KK3N0YXRpYyBpbnQgX191bmlwaGllcl9tZG1h Y19hYm9ydChzdHJ1Y3QgdW5pcGhpZXJfbWRtYWNfY2hhbiAqbWMpCit7CisJc3RydWN0IHVuaXBo aWVyX21kbWFjX2RldmljZSAqbWRldiA9IG1jLT5tZGV2OworCXUzMiBpcnFfZmxhZyA9IFVOSVBI SUVSX01ETUFDX0NIX0lSUV9fQUJPUlQ7CisJdTMyIHZhbDsKKworCS8qIHdyaXRlIDEgdG8gY2xl YXIgKi8KKwl3cml0ZWwoaXJxX2ZsYWcsIG1jLT5yZWdfY2hfYmFzZSArIFVOSVBISUVSX01ETUFD X0NIX0lSUV9SRVEpOworCisJd3JpdGVsKFVOSVBISUVSX01ETUFDX0NNRF9BQk9SVCB8IEJJVCht Yy0+Y2hhbl9pZCksCisJICAgICAgIG1kZXYtPnJlZ19iYXNlICsgVU5JUEhJRVJfTURNQUNfQ01E KTsKKworCS8qCisJICogQWJvcnQgc2hvdWxkIGJlIGFjY2VwdGVkIHNvb24uIFdlIHBvbGwgdGhl IGJpdCBoZXJlIGluc3RlYWQgb2YKKwkgKiB3YWl0aW5nIGZvciB0aGUgaW50ZXJydXB0LgorCSAq LworCXJldHVybiByZWFkbF9wb2xsX3RpbWVvdXQobWMtPnJlZ19jaF9iYXNlICsgVU5JUEhJRVJf TURNQUNfQ0hfSVJRX1JFUSwKKwkJCQkgIHZhbCwgdmFsICYgaXJxX2ZsYWcsIDAsIDIwKTsKK30K KworLyogbWMtPnZjLmxvY2sgbXVzdCBiZSBoZWxkIGJ5IGNhbGxlciAqLworc3RhdGljIHUzMiBf X3VuaXBoaWVyX21kbWFjX2dldF9yZXNpZHVlKHN0cnVjdCB1bmlwaGllcl9tZG1hY19jaGFuICpt YywKKwkJCQkJc3RydWN0IHVuaXBoaWVyX21kbWFjX2Rlc2MgKm1kKQoreworCXUzMiByZXNpZHVl OworCWludCBpOworCisJLyogcmVzaWR1ZSBmcm9tIHRoZSBvbi1mbGlnaHQgY2h1bmsgKi8KKwly ZXNpZHVlID0gcmVhZGwobWMtPnJlZ19jaF9iYXNlICsgVU5JUEhJRVJfTURNQUNfQ0hfU0laRSk7 CisKKwkvKiByZXNpZHVlIGZyb20gdGhlIHF1ZXVlZCBjaHVua3MgKi8KKwlmb3IgKGkgPSBtZC0+ c2dfY3VyOyBpIDwgbWQtPnNnX2xlbjsgaSsrKQorCQlyZXNpZHVlICs9IHNnX2RtYV9sZW4oJm1k LT5zZ2xbaV0pOworCisJcmV0dXJuIHJlc2lkdWU7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB1 bmlwaGllcl9tZG1hY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVj dCB1bmlwaGllcl9tZG1hY19jaGFuICptYyA9IGRldl9pZDsKKwlzdHJ1Y3QgdW5pcGhpZXJfbWRt YWNfZGVzYyAqbWQ7CisJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX0hBTkRMRUQ7CisJdTMyIGlycV9z dGF0OworCisJc3Bpbl9sb2NrKCZtYy0+dmMubG9jayk7CisKKwlpcnFfc3RhdCA9IHJlYWRsKG1j LT5yZWdfY2hfYmFzZSArIFVOSVBISUVSX01ETUFDX0NIX0lSUV9ERVQpOworCisJLyoKKwkgKiBT b21lIGNoYW5uZWxzIHNoYXJlIGEgc2luZ2xlIGludGVycnVwdCBsaW5lLiBJZiB0aGUgSVJRIHN0 YXR1cyBpcyAwLAorCSAqIHRoaXMgaXMgcHJvYmFibHkgdHJpZ2dlcmVkIGJ5IGEgZGlmZmVyZW50 IGNoYW5uZWwuCisJICovCisJaWYgKCFpcnFfc3RhdCkgeworCQlyZXQgPSBJUlFfTk9ORTsKKwkJ Z290byBvdXQ7CisJfQorCisJLyogd3JpdGUgMSB0byBjbGVhciAqLworCXdyaXRlbChpcnFfc3Rh dCwgbWMtPnJlZ19jaF9iYXNlICsgVU5JUEhJRVJfTURNQUNfQ0hfSVJRX1JFUSk7CisKKwkvKgor CSAqIFVOSVBISUVSX01ETUFDX0NIX0lSUV9fRE9ORSBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQgZXZl biB3aGVuIHRoZSBETUEKKwkgKiBpcyBhYm9ydGVkLiAgVG8gZGlzdGluZ3Vpc2ggdGhlIG5vcm1h bCBjb21wbGV0aW9uIGFuZCB0aGUgYWJvcnQsCisJICogY2hlY2sgbWMtPm1kLiAgSWYgaXQgaXMg TlVMTCwgd2UgYXJlIGFib3J0aW5nLgorCSAqLworCW1kID0gbWMtPm1kOworCWlmICghbWQpCisJ CWdvdG8gb3V0OworCisJbWQtPnNnX2N1cisrOworCisJaWYgKG1kLT5zZ19jdXIgPj0gbWQtPnNn X2xlbikgeworCQl2Y2hhbl9jb29raWVfY29tcGxldGUoJm1kLT52ZCk7CisJCW1kID0gX191bmlw aGllcl9tZG1hY19uZXh0X2Rlc2MobWMpOworCQlpZiAoIW1kKQorCQkJZ290byBvdXQ7CisJfQor CisJX191bmlwaGllcl9tZG1hY19oYW5kbGUobWMsIG1kKTsKKworb3V0OgorCXNwaW5fdW5sb2Nr KCZtYy0+dmMubG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGRtYV9h c3luY190eF9kZXNjcmlwdG9yICp1bmlwaGllcl9tZG1hY19wcmVwX3NsYXZlX3NnKAorCQkJCQlz dHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAorCQkJ CQl1bnNpZ25lZCBpbnQgc2dfbGVuLAorCQkJCQllbnVtIGRtYV90cmFuc2Zlcl9kaXJlY3Rpb24g ZGlyZWN0aW9uLAorCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjb250ZXh0KQorewor CXN0cnVjdCB2aXJ0X2RtYV9jaGFuICp2YyA9IHRvX3ZpcnRfY2hhbihjaGFuKTsKKwlzdHJ1Y3Qg dW5pcGhpZXJfbWRtYWNfZGVzYyAqbWQ7CisKKwlpZiAoIWlzX3NsYXZlX2RpcmVjdGlvbihkaXJl Y3Rpb24pKQorCQlyZXR1cm4gTlVMTDsKKworCW1kID0ga3phbGxvYyhzaXplb2YoKm1kKSwgR0ZQ X05PV0FJVCk7CisJaWYgKCFtZCkKKwkJcmV0dXJuIE5VTEw7CisKKwltZC0+c2dsID0gc2dsOwor CW1kLT5zZ19sZW4gPSBzZ19sZW47CisJbWQtPmRpciA9IGRpcmVjdGlvbjsKKworCXJldHVybiB2 Y2hhbl90eF9wcmVwKHZjLCAmbWQtPnZkLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgdW5pcGhp ZXJfbWRtYWNfY29uZmlnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJCQkgc3RydWN0IGRtYV9z bGF2ZV9jb25maWcgKmNvbmZpZykKK3sKKwkvKiBOb3RoaW5nIGluIHN0cnVjdCBkbWFfc2xhdmVf Y29uZmlnIGlzIGNvbmZpZ3VyYWJsZS4gKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1 bmlwaGllcl9tZG1hY190ZXJtaW5hdGVfYWxsKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlz dHJ1Y3QgdmlydF9kbWFfY2hhbiAqdmMgPSB0b192aXJ0X2NoYW4oY2hhbik7CisJc3RydWN0IHVu aXBoaWVyX21kbWFjX2NoYW4gKm1jID0gdG9fdW5pcGhpZXJfbWRtYWNfY2hhbih2Yyk7CisJdW5z aWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKwlMSVNUX0hFQUQoaGVhZCk7CisKKwlz cGluX2xvY2tfaXJxc2F2ZSgmdmMtPmxvY2ssIGZsYWdzKTsKKworCWlmIChtYy0+bWQpIHsKKwkJ dmNoYW5fdGVybWluYXRlX3ZkZXNjKCZtYy0+bWQtPnZkKTsKKwkJbWMtPm1kID0gTlVMTDsKKwkJ cmV0ID0gX191bmlwaGllcl9tZG1hY19hYm9ydChtYyk7CisJfQorCXZjaGFuX2dldF9hbGxfZGVz Y3JpcHRvcnModmMsICZoZWFkKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZjLT5sb2Nr LCBmbGFncyk7CisKKwl2Y2hhbl9kbWFfZGVzY19mcmVlX2xpc3QodmMsICZoZWFkKTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHVuaXBoaWVyX21kbWFjX3N5bmNocm9uaXplKHN0 cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwl2Y2hhbl9zeW5jaHJvbml6ZSh0b192aXJ0X2NoYW4o Y2hhbikpOworfQorCitzdGF0aWMgZW51bSBkbWFfc3RhdHVzIHVuaXBoaWVyX21kbWFjX3R4X3N0 YXR1cyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCisJCQkJCQlkbWFfY29va2llX3QgY29va2llLAor CQkJCQkJc3RydWN0IGRtYV90eF9zdGF0ZSAqdHhzdGF0ZSkKK3sKKwlzdHJ1Y3QgdmlydF9kbWFf Y2hhbiAqdmM7CisJc3RydWN0IHZpcnRfZG1hX2Rlc2MgKnZkOworCXN0cnVjdCB1bmlwaGllcl9t ZG1hY19jaGFuICptYzsKKwlzdHJ1Y3QgdW5pcGhpZXJfbWRtYWNfZGVzYyAqbWQgPSBOVUxMOwor CWVudW0gZG1hX3N0YXR1cyBzdGF0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzdGF0ID0g ZG1hX2Nvb2tpZV9zdGF0dXMoY2hhbiwgY29va2llLCB0eHN0YXRlKTsKKwkvKiBSZXR1cm4gaW1t ZWRpYXRlbHkgaWYgd2UgZG8gbm90IG5lZWQgdG8gY29tcHV0ZSB0aGUgcmVzaWR1ZS4gKi8KKwlp ZiAoc3RhdCA9PSBETUFfQ09NUExFVEUgfHwgIXR4c3RhdGUpCisJCXJldHVybiBzdGF0OworCisJ dmMgPSB0b192aXJ0X2NoYW4oY2hhbik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmMtPmxvY2ss IGZsYWdzKTsKKworCW1jID0gdG9fdW5pcGhpZXJfbWRtYWNfY2hhbih2Yyk7CisKKwlpZiAobWMt Pm1kICYmIG1jLT5tZC0+dmQudHguY29va2llID09IGNvb2tpZSkKKwkJbWQgPSBtYy0+bWQ7CisK KwlpZiAoIW1kKSB7CisJCXZkID0gdmNoYW5fZmluZF9kZXNjKHZjLCBjb29raWUpOworCQlpZiAo dmQpCisJCQltZCA9IHRvX3VuaXBoaWVyX21kbWFjX2Rlc2ModmQpOworCX0KKworCWlmIChtZCkK KwkJdHhzdGF0ZS0+cmVzaWR1ZSA9IF9fdW5pcGhpZXJfbWRtYWNfZ2V0X3Jlc2lkdWUobWMsIG1k KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZjLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1 cm4gc3RhdDsKK30KKworc3RhdGljIHZvaWQgdW5pcGhpZXJfbWRtYWNfaXNzdWVfcGVuZGluZyhz dHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IHZpcnRfZG1hX2NoYW4gKnZjID0gdG9f dmlydF9jaGFuKGNoYW4pOworCXN0cnVjdCB1bmlwaGllcl9tZG1hY19jaGFuICptYyA9IHRvX3Vu aXBoaWVyX21kbWFjX2NoYW4odmMpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xv Y2tfaXJxc2F2ZSgmdmMtPmxvY2ssIGZsYWdzKTsKKworCWlmICh2Y2hhbl9pc3N1ZV9wZW5kaW5n KHZjKSAmJiAhbWMtPm1kKQorCQlfX3VuaXBoaWVyX21kbWFjX3N0YXJ0KG1jKTsKKworCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnZjLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHVu aXBoaWVyX21kbWFjX2Rlc2NfZnJlZShzdHJ1Y3QgdmlydF9kbWFfZGVzYyAqdmQpCit7CisJa2Zy ZWUodG9fdW5pcGhpZXJfbWRtYWNfZGVzYyh2ZCkpOworfQorCitzdGF0aWMgaW50IHVuaXBoaWVy X21kbWFjX2NoYW5faW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCSAgICBz dHJ1Y3QgdW5pcGhpZXJfbWRtYWNfZGV2aWNlICptZGV2LAorCQkJCSAgICBpbnQgY2hhbl9pZCkK K3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCB1bmlwaGllcl9t ZG1hY19jaGFuICptYyA9ICZtZGV2LT5jaGFubmVsc1tjaGFuX2lkXTsKKwljaGFyICppcnFfbmFt ZTsKKwlpbnQgaXJxLCByZXQ7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGNoYW5f aWQpOworCWlmIChpcnEgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBn ZXQgSVJRIG51bWJlciBmb3IgY2glZFxuIiwKKwkJCWNoYW5faWQpOworCQlyZXR1cm4gaXJxOwor CX0KKworCWlycV9uYW1lID0gZGV2bV9rYXNwcmludGYoZGV2LCBHRlBfS0VSTkVMLCAidW5pcGhp ZXItbWlvLWRtYWMtY2glZCIsCisJCQkJICBjaGFuX2lkKTsKKwlpZiAoIWlycV9uYW1lKQorCQly ZXR1cm4gLUVOT01FTTsKKworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIHVuaXBo aWVyX21kbWFjX2ludGVycnVwdCwKKwkJCSAgICAgICBJUlFGX1NIQVJFRCwgaXJxX25hbWUsIG1j KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbWMtPm1kZXYgPSBtZGV2OworCW1jLT5y ZWdfY2hfYmFzZSA9IG1kZXYtPnJlZ19iYXNlICsgVU5JUEhJRVJfTURNQUNfQ0hfT0ZGU0VUICsK KwkJCQkJVU5JUEhJRVJfTURNQUNfQ0hfU1RSSURFICogY2hhbl9pZDsKKwltYy0+Y2hhbl9pZCA9 IGNoYW5faWQ7CisJbWMtPnZjLmRlc2NfZnJlZSA9IHVuaXBoaWVyX21kbWFjX2Rlc2NfZnJlZTsK Kwl2Y2hhbl9pbml0KCZtYy0+dmMsICZtZGV2LT5kZGV2KTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IHVuaXBoaWVyX21kbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgdW5pcGhp ZXJfbWRtYWNfZGV2aWNlICptZGV2OworCXN0cnVjdCBkbWFfZGV2aWNlICpkZGV2OworCXN0cnVj dCByZXNvdXJjZSAqcmVzOworCWludCBucl9jaGFucywgcmV0LCBpOworCisJbnJfY2hhbnMgPSBw bGF0Zm9ybV9pcnFfY291bnQocGRldik7CisJaWYgKG5yX2NoYW5zIDwgMCkKKwkJcmV0dXJuIG5y X2NoYW5zOworCisJcmV0ID0gZG1hX3NldF9tYXNrKGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1kZXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzdHJ1 Y3Rfc2l6ZShtZGV2LCBjaGFubmVscywgbnJfY2hhbnMpLAorCQkJICAgIEdGUF9LRVJORUwpOwor CWlmICghbWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVz b3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCW1kZXYtPnJlZ19iYXNlID0gZGV2bV9p b3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKG1kZXYtPnJlZ19iYXNlKSkK KwkJcmV0dXJuIFBUUl9FUlIobWRldi0+cmVnX2Jhc2UpOworCisJbWRldi0+Y2xrID0gZGV2bV9j bGtfZ2V0KGRldiwgTlVMTCk7CisJaWYgKElTX0VSUihtZGV2LT5jbGspKSB7CisJCWRldl9lcnIo ZGV2LCAiZmFpbGVkIHRvIGdldCBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKG1kZXYtPmNs ayk7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG1kZXYtPmNsayk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCWRkZXYgPSAmbWRldi0+ZGRldjsKKwlkZGV2LT5kZXYgPSBk ZXY7CisJZG1hX2NhcF9zZXQoRE1BX1BSSVZBVEUsIGRkZXYtPmNhcF9tYXNrKTsKKwlkZGV2LT5z cmNfYWRkcl93aWR0aHMgPSBCSVQoRE1BX1NMQVZFX0JVU1dJRFRIX1VOREVGSU5FRCk7CisJZGRl di0+ZHN0X2FkZHJfd2lkdGhzID0gQklUKERNQV9TTEFWRV9CVVNXSURUSF9VTkRFRklORUQpOwor CWRkZXYtPmRpcmVjdGlvbnMgPSBCSVQoRE1BX01FTV9UT19ERVYpIHwgQklUKERNQV9ERVZfVE9f TUVNKTsKKwlkZGV2LT5yZXNpZHVlX2dyYW51bGFyaXR5ID0gRE1BX1JFU0lEVUVfR1JBTlVMQVJJ VFlfU0VHTUVOVDsKKwlkZGV2LT5kZXZpY2VfcHJlcF9zbGF2ZV9zZyA9IHVuaXBoaWVyX21kbWFj X3ByZXBfc2xhdmVfc2c7CisJZGRldi0+ZGV2aWNlX2NvbmZpZyA9IHVuaXBoaWVyX21kbWFjX2Nv bmZpZzsKKwlkZGV2LT5kZXZpY2VfdGVybWluYXRlX2FsbCA9IHVuaXBoaWVyX21kbWFjX3Rlcm1p bmF0ZV9hbGw7CisJZGRldi0+ZGV2aWNlX3N5bmNocm9uaXplID0gdW5pcGhpZXJfbWRtYWNfc3lu Y2hyb25pemU7CisJZGRldi0+ZGV2aWNlX3R4X3N0YXR1cyA9IHVuaXBoaWVyX21kbWFjX3R4X3N0 YXR1czsKKwlkZGV2LT5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IHVuaXBoaWVyX21kbWFjX2lzc3Vl X3BlbmRpbmc7CisJSU5JVF9MSVNUX0hFQUQoJmRkZXYtPmNoYW5uZWxzKTsKKworCWZvciAoaSA9 IDA7IGkgPCBucl9jaGFuczsgaSsrKSB7CisJCXJldCA9IHVuaXBoaWVyX21kbWFjX2NoYW5faW5p dChwZGV2LCBtZGV2LCBpKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZGlzYWJsZV9jbGs7CisJfQor CisJcmV0ID0gZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcihkZGV2KTsKKwlpZiAocmV0KQorCQln b3RvIGRpc2FibGVfY2xrOworCisJcmV0ID0gb2ZfZG1hX2NvbnRyb2xsZXJfcmVnaXN0ZXIoZGV2 LT5vZl9ub2RlLCBvZl9kbWFfeGxhdGVfYnlfY2hhbl9pZCwKKwkJCQkJIGRkZXYpOworCWlmIChy ZXQpCisJCWdvdG8gdW5yZWdpc3Rlcl9kbWFjOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRl diwgbWRldik7CisKKwlyZXR1cm4gMDsKKwordW5yZWdpc3Rlcl9kbWFjOgorCWRtYV9hc3luY19k ZXZpY2VfdW5yZWdpc3RlcihkZGV2KTsKK2Rpc2FibGVfY2xrOgorCWNsa19kaXNhYmxlX3VucHJl cGFyZShtZGV2LT5jbGspOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB1bmlwaGll cl9tZG1hY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qg dW5pcGhpZXJfbWRtYWNfZGV2aWNlICptZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7 CisKKwlvZl9kbWFfY29udHJvbGxlcl9mcmVlKHBkZXYtPmRldi5vZl9ub2RlKTsKKwlkbWFfYXN5 bmNfZGV2aWNlX3VucmVnaXN0ZXIoJm1kZXYtPmRkZXYpOworCWNsa19kaXNhYmxlX3VucHJlcGFy ZShtZGV2LT5jbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkIHVuaXBoaWVyX21kbWFjX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJz b2Npb25leHQsdW5pcGhpZXItbWlvLWRtYWMiIH0sCisJeyAvKiBzZW50aW5lbCAqLyB9Cit9Owor TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdW5pcGhpZXJfbWRtYWNfbWF0Y2gpOworCitzdGF0aWMg c3RydWN0IHBsYXRmb3JtX2RyaXZlciB1bmlwaGllcl9tZG1hY19kcml2ZXIgPSB7CisJLnByb2Jl ID0gdW5pcGhpZXJfbWRtYWNfcHJvYmUsCisJLnJlbW92ZSA9IHVuaXBoaWVyX21kbWFjX3JlbW92 ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ1bmlwaGllci1taW8tZG1hYyIsCisJCS5vZl9t YXRjaF90YWJsZSA9IHVuaXBoaWVyX21kbWFjX21hdGNoLAorCX0sCit9OworbW9kdWxlX3BsYXRm b3JtX2RyaXZlcih1bmlwaGllcl9tZG1hY19kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJNYXNh aGlybyBZYW1hZGEgPHlhbWFkYS5tYXNhaGlyb0Bzb2Npb25leHQuY29tPiIpOworTU9EVUxFX0RF U0NSSVBUSU9OKCJVbmlQaGllciBNSU8gRE1BQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJH UEwgdjIiKTsK