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,8/8] usb: dwc3: Add Amlogic G12A DWC3 glue From: Neil Armstrong Message-Id: <20190318101153.7531-9-narmstrong@baylibre.com> Date: Mon, 18 Mar 2019 11:11:53 +0100 To: gregkh@linuxfoundation.org, hminas@synopsys.com, balbi@kernel.org, kishon@ti.com Cc: Neil Armstrong , linux-amlogic@lists.infradead.org, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org List-ID: QWRkcyBzdXBwb3J0IGZvciBBbWxvZ2ljIEcxMkEgVVNCIENvbnRyb2wgR2x1ZSBIVy4KClRoZSBB bWxvZ2ljIEcxMkEgU29DIEZhbWlseSBlbWJlZHMgMiBVU0IgQ29udHJvbGxlcnMgOgotIGEgRFdD MyBJUCBjb25maWd1cmVkIGFzIEhvc3QgZm9yIFVTQjIgYW5kIFVTQjMKLSBhIERXQzIgSVAgY29u ZmlndXJlZCBhcyBQZXJpcGhlcmFsIFVTQjIgT25seQoKQSBnbHVlIGNvbm5lY3RzIHRoZXNlIGJv dGggY29udHJvbGxlcnMgdG8gMiBVU0IyIFBIWXMsIGFuZCBvcHRpb25uYWxseQp0byBhbiBVU0Iz K1BDSUUgQ29tYm8gUEhZIHNoYXJlZCB3aXRoIHRoZSBQQ0lFIGNvbnRyb2xsZXIuCgpUaGUgR2x1 ZSBjb25maWd1cmVzIHRoZSBVVE1JIDhiaXQgaW50ZXJmYWNlcyBmb3IgdGhlIFVTQjIgUEhZcywg aW5jbHVkaW5nCnJvdXRpbmcgb2YgdGhlIE9URyBQSFkgYmV0d2VlbiB0aGUgRFdDMyBhbmQgRFdD MiBjb250cm9sbGVycywgYW5kCnNldHVwcyB0aGUgb24tY2hpcCBPVEcgbW9kZSBzZWxlY3Rpb24g Zm9yIHRoaXMgUEhZLgoKVGhpcyBkcml2ZXJzIHN1cHBvcnRzIHRoZSBvbi1wcm9iZSBzZXR1cCBv ZiB0aGUgT1RHIG1vZGUsIGFuZCBtYW51YWxseQp2aWEgYSBkZWJ1Z2ZzIGludGVyZmFjZS4gVGhl IElSUSBtb2RlIGNoYW5nZSBkZXRlY3QgaXMgeWV0IHRvIGJlIGFkZGVkCmluIGEgZnV0dXJlIHBh dGNoc2V0LCBtYWlubHkgZHVlIHRvIGxhY2sgb2YgaGFyZHdhcmUgdG8gdmFsaWRhdGUgb24uCgpT aWduZWQtb2ZmLWJ5OiBOZWlsIEFybXN0cm9uZyA8bmFybXN0cm9uZ0BiYXlsaWJyZS5jb20+Ci0t LQogZHJpdmVycy91c2IvZHdjMy9LY29uZmlnICAgICAgICAgICB8ICAxMCArCiBkcml2ZXJzL3Vz Yi9kd2MzL01ha2VmaWxlICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvdXNiL2R3YzMvZHdjMy1t ZXNvbi1nMTJhLmMgfCA2MDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMg Y2hhbmdlZCwgNjEzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Vz Yi9kd2MzL2R3YzMtbWVzb24tZzEyYS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMy9L Y29uZmlnIGIvZHJpdmVycy91c2IvZHdjMy9LY29uZmlnCmluZGV4IDJiMTQ5NDQ2MGQwYy4uZDJl YTk2NzA1NjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MzL0tjb25maWcKKysrIGIvZHJp dmVycy91c2IvZHdjMy9LY29uZmlnCkBAIC05NSw2ICs5NSwxNiBAQCBjb25maWcgVVNCX0RXQzNf S0VZU1RPTkUKIAkgIFN1cHBvcnQgb2YgVVNCMi8zIGZ1bmN0aW9uYWxpdHkgaW4gVEkgS2V5c3Rv bmUyIGFuZCBBTTY1NCBwbGF0Zm9ybXMuCiAJICBTYXkgJ1knIG9yICdNJyBoZXJlIGlmIHlvdSBo YXZlIG9uZSBzdWNoIGRldmljZQogCitjb25maWcgVVNCX0RXQzNfTUVTT05fRzEyQQorICAgICAg IHRyaXN0YXRlICJBbWxvZ2ljIE1lc29uIEcxMkEgUGxhdGZvcm1zIgorICAgICAgIGRlcGVuZHMg b24gT0YgJiYgQ09NTU9OX0NMSworICAgICAgIGRlcGVuZHMgb24gQVJDSF9NRVNPTiB8fCBDT01Q SUxFX1RFU1QKKyAgICAgICBkZWZhdWx0IFVTQl9EV0MzCisgICAgICAgc2VsZWN0IFVTQl9ST0xF X1NXSVRDSAorICAgICAgIGhlbHAKKyAgICAgICAgIFN1cHBvcnQgVVNCMi8zIGZ1bmN0aW9uYWxp dHkgaW4gQW1sb2dpYyBHMTJBIHBsYXRmb3Jtcy4KKwkgU2F5ICdZJyBvciAnTScgaWYgeW91IGhh dmUgb25lIHN1Y2ggZGV2aWNlLgorCiBjb25maWcgVVNCX0RXQzNfT0ZfU0lNUExFCiAgICAgICAg dHJpc3RhdGUgIkdlbmVyaWMgT0YgU2ltcGxlIEdsdWUgTGF5ZXIiCiAgICAgICAgZGVwZW5kcyBv biBPRiAmJiBDT01NT05fQ0xLCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2MzL01ha2VmaWxl IGIvZHJpdmVycy91c2IvZHdjMy9NYWtlZmlsZQppbmRleCA2ZTNlZjYxNDRlNWQuLmFlODZkYTBk YzViZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZHdjMy9NYWtlZmlsZQorKysgYi9kcml2ZXJz L3VzYi9kd2MzL01ha2VmaWxlCkBAIC00Nyw2ICs0Nyw3IEBAIG9iai0kKENPTkZJR19VU0JfRFdD M19FWFlOT1MpCQkrPSBkd2MzLWV4eW5vcy5vCiBvYmotJChDT05GSUdfVVNCX0RXQzNfUENJKQkJ Kz0gZHdjMy1wY2kubwogb2JqLSQoQ09ORklHX1VTQl9EV0MzX0hBUFMpCQkrPSBkd2MzLWhhcHMu bwogb2JqLSQoQ09ORklHX1VTQl9EV0MzX0tFWVNUT05FKQkJKz0gZHdjMy1rZXlzdG9uZS5vCitv YmotJChDT05GSUdfVVNCX0RXQzNfTUVTT05fRzEyQSkJKz0gZHdjMy1tZXNvbi1nMTJhLm8KIG9i ai0kKENPTkZJR19VU0JfRFdDM19PRl9TSU1QTEUpCSs9IGR3YzMtb2Ytc2ltcGxlLm8KIG9iai0k KENPTkZJR19VU0JfRFdDM19TVCkJCSs9IGR3YzMtc3Qubwogb2JqLSQoQ09ORklHX1VTQl9EV0Mz X1FDT00pCQkrPSBkd2MzLXFjb20ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMy9kd2Mz LW1lc29uLWcxMmEuYyBiL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1tZXNvbi1nMTJhLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45ZjQ1NTRlOGU2ZTcKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL3VzYi9kd2MzL2R3YzMtbWVzb24tZzEyYS5jCkBAIC0wLDAgKzEs NjAyIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIFVTQiBH bHVlIGZvciBBbWxvZ2ljIEcxMkEgU29DcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxOSBCYXlM aWJyZSwgU0FTCisgKiBBdXRob3I6IE5laWwgQXJtc3Ryb25nIDxuYXJtc3Ryb25nQGJheWxpYnJl LmNvbT4KKyAqLworCisvKgorICogVGhlIFVTQiBpcyBvcmdhbml6ZWQgd2l0aCBhIGdsdWUgYXJv dW5kIHRoZSBEV0MzIENvbnRyb2xsZXIgSVAgYXMgOgorICogLSBDb250cm9sIHJlZ2lzdGVycyBm b3IgZWFjaCBVU0IyIFBvcnRzCisgKiAtIENvbnRyb2wgcmVnaXN0ZXJzIGZvciB0aGUgVVNCIFBI WSBsYXllcgorICogLSBTdXBlclNwZWVkIFBIWSBjYW4gYmUgZW5hYmxlZCBvbmx5IGlmIHBvcnQg aXMgdXNlZAorICoKKyAqIFRPRklYOgorICogLSBBZGQgZHluYW1pYyBPVEcgc3dpdGNoaW5nIHdp dGggSUQgY2hhbmdlIGludGVycnVwdAorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2lu Y2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5o PgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+ CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKyNp bmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgorI2lu Y2x1ZGUgPGxpbnV4L3VzYi9yb2xlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1 bWVyLmg+CisKKy8qIFVTQjIgUG9ydHMgQ29udHJvbCBSZWdpc3RlcnMgKi8KKworI2RlZmluZSBV MlBfUkVHX1NJWkUJCQkJCQkweDIwCisKKyNkZWZpbmUgVTJQX1IwCQkJCQkJCTB4MAorCSNkZWZp bmUgVTJQX1IwX0hPU1RfREVWSUNFCQkJCUJJVCgwKQorCSNkZWZpbmUgVTJQX1IwX1BPV0VSX09L CQkJCQlCSVQoMSkKKwkjZGVmaW5lIFUyUF9SMF9IQVNUX01PREUJCQkJQklUKDIpCisJI2RlZmlu ZSBVMlBfUjBfUE9XRVJfT05fUkVTRVQJCQkJQklUKDMpCisJI2RlZmluZSBVMlBfUjBfSURfUFVM TFVQCQkJCUJJVCg0KQorCSNkZWZpbmUgVTJQX1IwX0RSVl9WQlVTCQkJCQlCSVQoNSkKKworI2Rl ZmluZSBVMlBfUjEJCQkJCQkJMHg0CisJI2RlZmluZSBVMlBfUjFfUEhZX1JFQURZCQkJCUJJVCgw KQorCSNkZWZpbmUgVTJQX1IxX0lEX0RJRwkJCQkJQklUKDEpCisJI2RlZmluZSBVMlBfUjFfT1RH X1NFU1NJT05fVkFMSUQJCQlCSVQoMikKKwkjZGVmaW5lIFUyUF9SMV9WQlVTX1ZBTElECQkJCUJJ VCgzKQorCisvKiBVU0IgR2x1ZSBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIFVTQl9S MAkJCQkJCQkweDgwCisJI2RlZmluZSBVU0JfUjBfUDMwX0xBTkUwX1RYMlJYX0xPT1BCQUNLCQkJ QklUKDE3KQorCSNkZWZpbmUgVVNCX1IwX1AzMF9MQU5FMF9FWFRfUENMS19SRVEJCQlCSVQoMTgp CisJI2RlZmluZSBVU0JfUjBfUDMwX1BDU19SWF9MT1NfTUFTS19WQUxfTUFTSwkJR0VOTUFTSygy OCwgMTkpCisJI2RlZmluZSBVU0JfUjBfVTJEX1NTX1NDQUxFRE9XTl9NT0RFX01BU0sJCUdFTk1B U0soMzAsIDI5KQorCSNkZWZpbmUgVVNCX1IwX1UyRF9BQ1QJCQkJCUJJVCgzMSkKKworI2RlZmlu ZSBVU0JfUjEJCQkJCQkJMHg4NAorCSNkZWZpbmUgVVNCX1IxX1UzSF9CSUdFTkRJQU5fR1MJCQkJ QklUKDApCisJI2RlZmluZSBVU0JfUjFfVTNIX1BNRV9FTkFCTEUJCQkJQklUKDEpCisJI2RlZmlu ZSBVU0JfUjFfVTNIX0hVQl9QT1JUX09WRVJDVVJSRU5UX01BU0sJCUdFTk1BU0soNCwgMikKKwkj ZGVmaW5lIFVTQl9SMV9VM0hfSFVCX1BPUlRfUEVSTV9BVFRBQ0hfTUFTSwkJR0VOTUFTSyg5LCA3 KQorCSNkZWZpbmUgVVNCX1IxX1UzSF9IT1NUX1UyX1BPUlRfRElTQUJMRV9NQVNLCQlHRU5NQVNL KDEzLCAxMikKKwkjZGVmaW5lIFVTQl9SMV9VM0hfSE9TVF9VM19QT1JUX0RJU0FCTEUJCQlCSVQo MTYpCisJI2RlZmluZSBVU0JfUjFfVTNIX0hPU1RfUE9SVF9QT1dFUl9DT05UUk9MX1BSRVNFTlQJ QklUKDE3KQorCSNkZWZpbmUgVVNCX1IxX1UzSF9IT1NUX01TSV9FTkFCTEUJCQlCSVQoMTgpCisJ I2RlZmluZSBVU0JfUjFfVTNIX0ZMQURKXzMwTUhaX1JFR19NQVNLCQkJR0VOTUFTSygyNCwgMTkp CisJI2RlZmluZSBVU0JfUjFfUDMwX1BDU19UWF9TV0lOR19GVUxMX01BU0sJCUdFTk1BU0soMzEs IDI1KQorCisjZGVmaW5lIFVTQl9SMgkJCQkJCQkweDg4CisJI2RlZmluZSBVU0JfUjJfUDMwX1BD U19UWF9ERUVNUEhfM1A1REJfTUFTSwkJR0VOTUFTSygyNSwgMjApCisJI2RlZmluZSBVU0JfUjJf UDMwX1BDU19UWF9ERUVNUEhfNkRCX01BU0sJCUdFTk1BU0soMzEsIDI2KQorCisjZGVmaW5lIFVT Ql9SMwkJCQkJCQkweDhjCisJI2RlZmluZSBVU0JfUjNfUDMwX1NTQ19FTkFCTEUJCQkJQklUKDAp CisJI2RlZmluZSBVU0JfUjNfUDMwX1NTQ19SQU5HRV9NQVNLCQkJR0VOTUFTSygzLCAxKQorCSNk ZWZpbmUgVVNCX1IzX1AzMF9TU0NfUkVGX0NMS19TRUxfTUFTSwkJCUdFTk1BU0soMTIsIDQpCisJ I2RlZmluZSBVU0JfUjNfUDMwX1JFRl9TU1BfRU4JCQkJQklUKDEzKQorCisjZGVmaW5lIFVTQl9S NAkJCQkJCQkweDkwCisJI2RlZmluZSBVU0JfUjRfUDIxX1BPUlRfUkVTRVRfMAkJCQlCSVQoMCkK KwkjZGVmaW5lIFVTQl9SNF9QMjFfU0xFRVBfTTAJCQkJQklUKDEpCisJI2RlZmluZSBVU0JfUjRf TUVNX1BEX01BU0sJCQkJR0VOTUFTSygzLCAyKQorCSNkZWZpbmUgVVNCX1I0X1AyMV9PTkxZCQkJ CQlCSVQoNCkKKworI2RlZmluZSBVU0JfUjUJCQkJCQkJMHg5NAorCSNkZWZpbmUgVVNCX1I1X0lE X0RJR19TWU5DCQkJCUJJVCgwKQorCSNkZWZpbmUgVVNCX1I1X0lEX0RJR19SRUcJCQkJQklUKDEp CisJI2RlZmluZSBVU0JfUjVfSURfRElHX0NGR19NQVNLCQkJCUdFTk1BU0soMywgMikKKwkjZGVm aW5lIFVTQl9SNV9JRF9ESUdfRU5fMAkJCQlCSVQoNCkKKwkjZGVmaW5lIFVTQl9SNV9JRF9ESUdf RU5fMQkJCQlCSVQoNSkKKwkjZGVmaW5lIFVTQl9SNV9JRF9ESUdfQ1VSUgkJCQlCSVQoNikKKwkj ZGVmaW5lIFVTQl9SNV9JRF9ESUdfSVJRCQkJCUJJVCg3KQorCSNkZWZpbmUgVVNCX1I1X0lEX0RJ R19USF9NQVNLCQkJCUdFTk1BU0soMTUsIDgpCisJI2RlZmluZSBVU0JfUjVfSURfRElHX0NOVF9N QVNLCQkJCUdFTk1BU0soMjMsIDE2KQorCitlbnVtIHsKKwlVU0IyX0hPU1RfUEhZID0gMCwKKwlV U0IyX09UR19QSFksCisJVVNCM19IT1NUX1BIWSwKKwlQSFlfQ09VTlQsCit9OworCitzdGF0aWMg Y29uc3QgY2hhciAqcGh5X25hbWVzW1BIWV9DT1VOVF0gPSB7CisJInVzYjItcGh5MCIsICJ1c2Iy LXBoeTEiLCAidXNiMy1waHkwIiwKK307CisKK3N0cnVjdCBkd2MzX21lc29uX2cxMmEgeworCXN0 cnVjdCBkZXZpY2UJCSpkZXY7CisJc3RydWN0IHJlZ21hcAkJKnJlZ21hcDsKKwlzdHJ1Y3QgY2xr CQkqY2xrOworCXN0cnVjdCByZXNldF9jb250cm9sCSpyZXNldDsKKwlzdHJ1Y3QgcGh5CQkqcGh5 c1tQSFlfQ09VTlRdOworCWVudW0gdXNiX2RyX21vZGUJb3RnX21vZGU7CisJZW51bSBwaHlfbW9k ZQkJb3RnX3BoeV9tb2RlOworCXVuc2lnbmVkIGludAkJdXNiMl9wb3J0czsKKwl1bnNpZ25lZCBp bnQJCXVzYjNfcG9ydHM7CisJc3RydWN0IHJlZ3VsYXRvcgkqdmJ1czsKKwlzdHJ1Y3QgdXNiX3Jv bGVfc3dpdGNoX2Rlc2Mgc3dpdGNoX2Rlc2M7CisJc3RydWN0IHVzYl9yb2xlX3N3aXRjaAkqcm9s ZV9zd2l0Y2g7Cit9OworCitzdGF0aWMgdm9pZCBkd2MzX21lc29uX2cxMmFfdXNiMl9zZXRfbW9k ZShzdHJ1Y3QgZHdjM19tZXNvbl9nMTJhICpwcml2LAorCQkJCQkgIGludCBpLCBlbnVtIHBoeV9t b2RlIG1vZGUpCit7CisJaWYgKG1vZGUgPT0gUEhZX01PREVfVVNCX0hPU1QpCisJCXJlZ21hcF91 cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFUyUF9SMCArIChVMlBfUkVHX1NJWkUgKiBpKSwKKwkJ CQlVMlBfUjBfSE9TVF9ERVZJQ0UsCisJCQkJVTJQX1IwX0hPU1RfREVWSUNFKTsKKwllbHNlCisJ CXJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFUyUF9SMCArIChVMlBfUkVHX1NJWkUg KiBpKSwKKwkJCQlVMlBfUjBfSE9TVF9ERVZJQ0UsIDApOworfQorCitzdGF0aWMgaW50IGR3YzNf bWVzb25fZzEyYV91c2IyX2luaXQoc3RydWN0IGR3YzNfbWVzb25fZzEyYSAqcHJpdikKK3sKKwlp bnQgaTsKKworCWlmIChwcml2LT5vdGdfbW9kZSA9PSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFMKQor CQlwcml2LT5vdGdfcGh5X21vZGUgPSBQSFlfTU9ERV9VU0JfREVWSUNFOworCWVsc2UKKwkJcHJp di0+b3RnX3BoeV9tb2RlID0gUEhZX01PREVfVVNCX0hPU1Q7CisKKwlmb3IgKGkgPSAwIDsgaSA8 IFVTQjNfSE9TVF9QSFkgOyArK2kpIHsKKwkJaWYgKCFwcml2LT5waHlzW2ldKQorCQkJY29udGlu dWU7CisKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwgVTJQX1IwICsgKFUyUF9S RUdfU0laRSAqIGkpLAorCQkJCSAgIFUyUF9SMF9QT1dFUl9PTl9SRVNFVCwKKwkJCQkgICBVMlBf UjBfUE9XRVJfT05fUkVTRVQpOworCisJCWlmIChpID09IFVTQjJfT1RHX1BIWSkgeworCQkJcmVn bWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwKKwkJCQlVMlBfUjAgKyAoVTJQX1JFR19TSVpF ICogaSksCisJCQkJVTJQX1IwX0lEX1BVTExVUCB8IFUyUF9SMF9EUlZfVkJVUywKKwkJCQlVMlBf UjBfSURfUFVMTFVQIHwgVTJQX1IwX0RSVl9WQlVTKTsKKworCQkJZHdjM19tZXNvbl9nMTJhX3Vz YjJfc2V0X21vZGUocHJpdiwgaSwKKwkJCQkJCSAgICAgIHByaXYtPm90Z19waHlfbW9kZSk7CisJ CX0gZWxzZQorCQkJZHdjM19tZXNvbl9nMTJhX3VzYjJfc2V0X21vZGUocHJpdiwgaSwKKwkJCQkJ CSAgICAgIFBIWV9NT0RFX1VTQl9IT1NUKTsKKworCQlyZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+ cmVnbWFwLCBVMlBfUjAgKyAoVTJQX1JFR19TSVpFICogaSksCisJCQkJICAgVTJQX1IwX1BPV0VS X09OX1JFU0VULCAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHdjM19t ZXNvbl9nMTJhX3VzYjNfaW5pdChzdHJ1Y3QgZHdjM19tZXNvbl9nMTJhICpwcml2KQoreworCXJl Z21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFVTQl9SMywKKwkJCVVTQl9SM19QMzBfU1ND X1JBTkdFX01BU0sgfAorCQkJVVNCX1IzX1AzMF9SRUZfU1NQX0VOLAorCQkJVVNCX1IzX1AzMF9T U0NfRU5BQkxFIHwKKwkJCUZJRUxEX1BSRVAoVVNCX1IzX1AzMF9TU0NfUkFOR0VfTUFTSywgMikg fAorCQkJVVNCX1IzX1AzMF9SRUZfU1NQX0VOKTsKKwl1ZGVsYXkoMik7CisKKwlyZWdtYXBfdXBk YXRlX2JpdHMocHJpdi0+cmVnbWFwLCBVU0JfUjIsCisJCQlVU0JfUjJfUDMwX1BDU19UWF9ERUVN UEhfM1A1REJfTUFTSywKKwkJCUZJRUxEX1BSRVAoVVNCX1IyX1AzMF9QQ1NfVFhfREVFTVBIXzNQ NURCX01BU0ssIDB4MTUpKTsKKworCXJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFVT Ql9SMiwKKwkJCVVTQl9SMl9QMzBfUENTX1RYX0RFRU1QSF82REJfTUFTSywKKwkJCUZJRUxEX1BS RVAoVVNCX1IyX1AzMF9QQ1NfVFhfREVFTVBIXzZEQl9NQVNLLCAweDIwKSk7CisKKwl1ZGVsYXko Mik7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+cmVnbWFwLCBVU0JfUjEsCisJCQlVU0Jf UjFfVTNIX0hPU1RfUE9SVF9QT1dFUl9DT05UUk9MX1BSRVNFTlQsCisJCQlVU0JfUjFfVTNIX0hP U1RfUE9SVF9QT1dFUl9DT05UUk9MX1BSRVNFTlQpOworCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHBy aXYtPnJlZ21hcCwgVVNCX1IxLAorCQkJVVNCX1IxX1AzMF9QQ1NfVFhfU1dJTkdfRlVMTF9NQVNL LAorCQkJRklFTERfUFJFUChVU0JfUjFfUDMwX1BDU19UWF9TV0lOR19GVUxMX01BU0ssIDEyNykp OworfQorCitzdGF0aWMgdm9pZCBkd2MzX21lc29uX2cxMmFfdXNiX290Z19hcHBseV9tb2RlKHN0 cnVjdCBkd2MzX21lc29uX2cxMmEgKnByaXYpCit7CisJaWYgKHByaXYtPm90Z19waHlfbW9kZSA9 PSBQSFlfTU9ERV9VU0JfREVWSUNFKSB7CisJCXJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdt YXAsIFVTQl9SMCwKKwkJCQlVU0JfUjBfVTJEX0FDVCwgVVNCX1IwX1UyRF9BQ1QpOworCQlyZWdt YXBfdXBkYXRlX2JpdHMocHJpdi0+cmVnbWFwLCBVU0JfUjAsCisJCQkJVVNCX1IwX1UyRF9TU19T Q0FMRURPV05fTU9ERV9NQVNLLCAwKTsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21h cCwgVVNCX1I0LAorCQkJCVVTQl9SNF9QMjFfU0xFRVBfTTAsIFVTQl9SNF9QMjFfU0xFRVBfTTAp OworCX0gZWxzZSB7CisJCXJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFVTQl9SMCwK KwkJCQlVU0JfUjBfVTJEX0FDVCwgMCk7CisJCXJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdt YXAsIFVTQl9SNCwKKwkJCQlVU0JfUjRfUDIxX1NMRUVQX00wLCAwKTsKKwl9Cit9CisKK3N0YXRp YyBpbnQgZHdjM19tZXNvbl9nMTJhX3VzYl9pbml0KHN0cnVjdCBkd2MzX21lc29uX2cxMmEgKnBy aXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGR3YzNfbWVzb25fZzEyYV91c2IyX2luaXQocHJp dik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJlZ21hcF91cGRhdGVfYml0cyhwcml2 LT5yZWdtYXAsIFVTQl9SMSwKKwkJCVVTQl9SMV9VM0hfRkxBREpfMzBNSFpfUkVHX01BU0ssCisJ CQlGSUVMRF9QUkVQKFVTQl9SMV9VM0hfRkxBREpfMzBNSFpfUkVHX01BU0ssIDB4MjApKTsKKwor CXJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFVTQl9SNSwKKwkJCVVTQl9SNV9JRF9E SUdfRU5fMCwKKwkJCVVTQl9SNV9JRF9ESUdfRU5fMCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKHBy aXYtPnJlZ21hcCwgVVNCX1I1LAorCQkJVVNCX1I1X0lEX0RJR19FTl8xLAorCQkJVVNCX1I1X0lE X0RJR19FTl8xKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+cmVnbWFwLCBVU0JfUjUsCisJ CQlVU0JfUjVfSURfRElHX1RIX01BU0ssCisJCQlGSUVMRF9QUkVQKFVTQl9SNV9JRF9ESUdfVEhf TUFTSywgMHhmZikpOworCisJLyogSWYgd2UgaGF2ZSBhbiBhY3R1YWwgU3VwZXJTcGVlZCBwb3J0 LCBpbml0aWFsaXplIGl0ICovCisJaWYgKHByaXYtPnVzYjNfcG9ydHMpCisJCWR3YzNfbWVzb25f ZzEyYV91c2IzX2luaXQocHJpdik7CisKKwlkd2MzX21lc29uX2cxMmFfdXNiX290Z19hcHBseV9t b2RlKHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFw X2NvbmZpZyBwaHlfbWVzb25fZzEyYV91c2IzX3JlZ21hcF9jb25mID0geworCS5yZWdfYml0cyA9 IDgsCisJLnZhbF9iaXRzID0gMzIsCisJLnJlZ19zdHJpZGUgPSA0LAorCS5tYXhfcmVnaXN0ZXIg PSBVU0JfUjUsCit9OworCitzdGF0aWMgaW50IGR3YzNfbWVzb25fZzEyYV9nZXRfcGh5cyhzdHJ1 Y3QgZHdjM19tZXNvbl9nMTJhICpwcml2KQoreworCWludCBpOworCisJZm9yIChpID0gMCA7IGkg PCBQSFlfQ09VTlQgOyArK2kpIHsKKwkJcHJpdi0+cGh5c1tpXSA9IGRldm1fcGh5X29wdGlvbmFs X2dldChwcml2LT5kZXYsIHBoeV9uYW1lc1tpXSk7CisJCWlmICghcHJpdi0+cGh5c1tpXSkKKwkJ CWNvbnRpbnVlOworCisJCWlmIChJU19FUlIocHJpdi0+cGh5c1tpXSkpCisJCQlyZXR1cm4gUFRS X0VSUihwcml2LT5waHlzW2ldKTsKKworCQlpZiAoaSA9PSBVU0IzX0hPU1RfUEhZKQorCQkJcHJp di0+dXNiM19wb3J0cysrOworCQllbHNlCisJCQlwcml2LT51c2IyX3BvcnRzKys7CisJfQorCisJ ZGV2X2luZm8ocHJpdi0+ZGV2LCAiVVNCMiBwb3J0czogJWRcbiIsIHByaXYtPnVzYjJfcG9ydHMp OworCWRldl9pbmZvKHByaXYtPmRldiwgIlVTQjMgcG9ydHM6ICVkXG4iLCBwcml2LT51c2IzX3Bv cnRzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBwaHlfbW9kZSBkd2MzX21lc29u X2cxMmFfZ2V0X2lkKHN0cnVjdCBkd2MzX21lc29uX2cxMmEgKnByaXYpCit7CisJdTMyIHJlZzsK KworCXJlZ21hcF9yZWFkKHByaXYtPnJlZ21hcCwgVVNCX1I1LCAmcmVnKTsKKworCWlmIChyZWcg JiAoVVNCX1I1X0lEX0RJR19TWU5DIHwgVVNCX1I1X0lEX0RJR19SRUcpKQorCQlyZXR1cm4gUEhZ X01PREVfVVNCX0RFVklDRTsKKworCXJldHVybiBQSFlfTU9ERV9VU0JfSE9TVDsKK30KKworc3Rh dGljIGludCBkd2MzX21lc29uX2cxMmFfb3RnX21vZGVfc2V0KHN0cnVjdCBkd2MzX21lc29uX2cx MmEgKnByaXYsCisJCQkJCWVudW0gcGh5X21vZGUgbW9kZSkKK3sKKwlpbnQgcmV0OworCisJaWYg KCFwcml2LT5waHlzW1VTQjJfT1RHX1BIWV0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG1v ZGUgPT0gUEhZX01PREVfVVNCX0hPU1QpCisJCWRldl9pbmZvKHByaXYtPmRldiwgInN3aXRjaGlu ZyB0byBIb3N0IE1vZGVcbiIpOworCWVsc2UKKwkJZGV2X2luZm8ocHJpdi0+ZGV2LCAic3dpdGNo aW5nIHRvIERldmljZSBNb2RlXG4iKTsKKworCWlmIChwcml2LT52YnVzKSB7CisJCWlmIChtb2Rl ID09IFBIWV9NT0RFX1VTQl9ERVZJQ0UpCisJCQlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShwcml2 LT52YnVzKTsKKwkJZWxzZQorCQkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LT52YnVzKTsK KwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcHJpdi0+b3RnX3BoeV9tb2RlID0g bW9kZTsKKworCWR3YzNfbWVzb25fZzEyYV91c2IyX3NldF9tb2RlKHByaXYsIFVTQjJfT1RHX1BI WSwgbW9kZSk7CisKKwlkd2MzX21lc29uX2cxMmFfdXNiX290Z19hcHBseV9tb2RlKHByaXYpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHdjM19tZXNvbl9nMTJhX3JvbGVfc2V0KHN0 cnVjdCBkZXZpY2UgKmRldiwgZW51bSB1c2Jfcm9sZSByb2xlKQoreworCXN0cnVjdCBkd2MzX21l c29uX2cxMmEgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwllbnVtIHBoeV9tb2RlIG1v ZGU7CisKKwlpZiAocm9sZSA9PSBVU0JfUk9MRV9OT05FKQorCQlyZXR1cm4gMDsKKworCW1vZGUg PSAocm9sZSA9PSBVU0JfUk9MRV9IT1NUKSA/IFBIWV9NT0RFX1VTQl9IT1NUCisJCQkJICAgICAg IDogUEhZX01PREVfVVNCX0RFVklDRTsKKworCWlmIChtb2RlID09IHByaXYtPm90Z19waHlfbW9k ZSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZHdjM19tZXNvbl9nMTJhX290Z19tb2RlX3NldChw cml2LCBtb2RlKTsKK30KKworc3RhdGljIGVudW0gdXNiX3JvbGUgZHdjM19tZXNvbl9nMTJhX3Jv bGVfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHdjM19tZXNvbl9nMTJhICpw cml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gcHJpdi0+b3RnX3BoeV9tb2Rl ID09IFBIWV9NT0RFX1VTQl9IT1NUID8KKwkJVVNCX1JPTEVfSE9TVCA6IFVTQl9ST0xFX0RFVklD RTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2UgKmR3YzNfbWVzb25fZzEyX2ZpbmRfY2hpbGQo c3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJY29uc3QgY2hhciAqY29tcGF0aWJsZSkKK3sKKwlz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisK KwlucCA9IG9mX2dldF9jb21wYXRpYmxlX2NoaWxkKGRldi0+b2Zfbm9kZSwgY29tcGF0aWJsZSk7 CisJaWYgKCFucCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlf bm9kZShucCk7CisJb2Zfbm9kZV9wdXQobnApOworCWlmICghcGRldikKKwkJcmV0dXJuIE5VTEw7 CisKKwlyZXR1cm4gJnBkZXYtPmRldjsKK30KKworc3RhdGljIGludCBkd2MzX21lc29uX2cxMmFf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHdjM19tZXNv bl9nMTJhCSpwcml2OworCXN0cnVjdCBkZXZpY2UJCSpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVj dCBkZXZpY2Vfbm9kZQkqbnAgPSBkZXYtPm9mX25vZGU7CisJdm9pZCBfX2lvbWVtICpiYXNlOwor CXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWVudW0gcGh5X21vZGUgb3RnX2lkOworCWludCByZXQs IGk7CisKKwlwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcyA9IHBsYXRmb3JtX2dl dF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJYmFzZSA9IGRldm1faW9yZW1h cF9yZXNvdXJjZShkZXYsIHJlcyk7CisJaWYgKElTX0VSUihiYXNlKSkKKwkJcmV0dXJuIFBUUl9F UlIoYmFzZSk7CisKKwlwcml2LT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oZGV2LCBi YXNlLAorCQkJCQkgICAgICZwaHlfbWVzb25fZzEyYV91c2IzX3JlZ21hcF9jb25mKTsKKwlpZiAo SVNfRVJSKHByaXYtPnJlZ21hcCkpCisJCXJldHVybiBQVFJfRVJSKHByaXYtPnJlZ21hcCk7CisK Kwlwcml2LT52YnVzID0gZGV2bV9yZWd1bGF0b3JfZ2V0X29wdGlvbmFsKGRldiwgInZidXMiKTsK KwlpZiAoSVNfRVJSKHByaXYtPnZidXMpKSB7CisJCWlmIChQVFJfRVJSKHByaXYtPnZidXMpID09 IC1FUFJPQkVfREVGRVIpCisJCQlyZXR1cm4gUFRSX0VSUihwcml2LT52YnVzKTsKKwkJcHJpdi0+ dmJ1cyA9IE5VTEw7CisJfQorCisJcHJpdi0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7 CisJaWYgKElTX0VSUihwcml2LT5jbGspKQorCQlyZXR1cm4gUFRSX0VSUihwcml2LT5jbGspOwor CisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPmNsayk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCWRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsCisJCQkJICh2b2lkKCop KHZvaWQgKikpY2xrX2Rpc2FibGVfdW5wcmVwYXJlLAorCQkJCSBwcml2LT5jbGspOworCisJcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CisJcHJpdi0+ZGV2ID0gZGV2OworCisJcHJp di0+cmVzZXQgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KGRldiwgTlVMTCk7CisJaWYgKElTX0VS Uihwcml2LT5yZXNldCkpIHsKKwkJcmV0ID0gUFRSX0VSUihwcml2LT5yZXNldCk7CisJCWRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIGdldCBkZXZpY2UgcmVzZXQsIGVycj0lZFxuIiwgcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSByZXNldF9jb250cm9sX3Jlc2V0KHByaXYtPnJlc2V0 KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZHdjM19tZXNvbl9nMTJhX2dl dF9waHlzKHByaXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAocHJpdi0+dmJ1 cykgeworCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHByaXYtPnZidXMpOworCQlpZiAocmV0KQor CQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBHZXQgZHJfbW9kZSAqLworCXByaXYtPm90Z19tb2Rl ID0gdXNiX2dldF9kcl9tb2RlKGRldik7CisKKwlkd2MzX21lc29uX2cxMmFfdXNiX2luaXQocHJp dik7CisKKwkvKiBJbml0IFBIWXMgKi8KKwlmb3IgKGkgPSAwIDsgaSA8IFBIWV9DT1VOVCA7ICsr aSkgeworCQlyZXQgPSBwaHlfaW5pdChwcml2LT5waHlzW2ldKTsKKwkJaWYgKHJldCkKKwkJCWdv dG8gZXJyX3BoeXNfcG93ZXI7CisJfQorCisJLyogU2V0IFBIWSBQb3dlciAqLworCWZvciAoaSA9 IDAgOyBpIDwgUEhZX0NPVU5UIDsgKytpKSB7CisJCXJldCA9IHBoeV9wb3dlcl9vbihwcml2LT5w aHlzW2ldKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3BoeXNfcHV0OworCX0KKworCXJldCA9 IG9mX3BsYXRmb3JtX3BvcHVsYXRlKG5wLCBOVUxMLCBOVUxMLCBkZXYpOworCWlmIChyZXQpIHsK KwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmNsayk7CisJCWNsa19wdXQocHJpdi0+Y2xr KTsKKworCQlnb3RvIGVycl9waHlzX2V4aXQ7CisJfQorCisJLyogU2V0dXAgT1RHIG1vZGUgY29y cmVzcG9uZGluZyB0byB0aGUgSUQgcGluICovCisJaWYgKHByaXYtPm90Z19tb2RlID09IFVTQl9E Ul9NT0RFX09URykgeworCQkvKiBUT0ZJWCBIYW5kbGUgSUQgbW9kZSB0b2dnbGluZyB2aWEgSVJR ICovCisJCW90Z19pZCA9IGR3YzNfbWVzb25fZzEyYV9nZXRfaWQocHJpdik7CisJCWlmIChvdGdf aWQgIT0gcHJpdi0+b3RnX3BoeV9tb2RlKSB7CisJCQlpZiAoZHdjM19tZXNvbl9nMTJhX290Z19t b2RlX3NldChwcml2LCBvdGdfaWQpKQorCQkJCWRldl93YXJuKGRldiwgIkZhaWxlZCB0byBzd2l0 Y2ggT1RHIG1vZGVcbiIpOworCQl9CisJfQorCisJLyogU2V0dXAgcm9sZSBzd2l0Y2hlciAqLwor CXByaXYtPnN3aXRjaF9kZXNjLnVzYjJfcG9ydCA9IGR3YzNfbWVzb25fZzEyX2ZpbmRfY2hpbGQo ZGV2LAorCQkJCQkJCQkic25wcyxkd2MzIik7CisJcHJpdi0+c3dpdGNoX2Rlc2MudWRjID0gZHdj M19tZXNvbl9nMTJfZmluZF9jaGlsZChkZXYsICJzbnBzLGR3YzIiKTsKKwlwcml2LT5zd2l0Y2hf ZGVzYy5hbGxvd191c2Vyc3BhY2VfY29udHJvbCA9IHRydWU7CisJcHJpdi0+c3dpdGNoX2Rlc2Mu c2V0ID0gZHdjM19tZXNvbl9nMTJhX3JvbGVfc2V0OworCXByaXYtPnN3aXRjaF9kZXNjLmdldCA9 IGR3YzNfbWVzb25fZzEyYV9yb2xlX2dldDsKKworCXByaXYtPnJvbGVfc3dpdGNoID0gdXNiX3Jv bGVfc3dpdGNoX3JlZ2lzdGVyKGRldiwgJnByaXYtPnN3aXRjaF9kZXNjKTsKKwlpZiAoSVNfRVJS KHByaXYtPnJvbGVfc3dpdGNoKSkKKwkJZGV2X3dhcm4oZGV2LCAiVW5hYmxlIHRvIHJlZ2lzdGVy IFJvbGUgU3dpdGNoXG4iKTsKKworCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXYpOworCXBtX3J1 bnRpbWVfZW5hYmxlKGRldik7CisJcG1fcnVudGltZV9nZXRfc3luYyhkZXYpOworCisJcmV0dXJu IDA7CisKK2Vycl9waHlzX2V4aXQ6CisJZm9yIChpID0gMCA7IGkgPCBQSFlfQ09VTlQgOyArK2kp CisJCXBoeV9leGl0KHByaXYtPnBoeXNbaV0pOworCitlcnJfcGh5c19wb3dlcjoKKwlmb3IgKGkg PSAwIDsgaSA8IFBIWV9DT1VOVCA7ICsraSkKKwkJcGh5X3Bvd2VyX29mZihwcml2LT5waHlzW2ld KTsKKworZXJyX3BoeXNfcHV0OgorCWZvciAoaSA9IDAgOyBpIDwgUEhZX0NPVU5UIDsgKytpKQor CQlwaHlfcHV0KHByaXYtPnBoeXNbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCBkd2MzX21lc29uX2cxMmFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7 CisJc3RydWN0IGR3YzNfbWVzb25fZzEyYSAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk ZXYpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJaW50IGk7CisKKwl1c2Jf cm9sZV9zd2l0Y2hfdW5yZWdpc3Rlcihwcml2LT5yb2xlX3N3aXRjaCk7CisKKwlvZl9wbGF0Zm9y bV9kZXBvcHVsYXRlKGRldik7CisKKwlmb3IgKGkgPSAwIDsgaSA8IFBIWV9DT1VOVCA7ICsraSkg eworCQlwaHlfcG93ZXJfb2ZmKHByaXYtPnBoeXNbaV0pOworCQlwaHlfZXhpdChwcml2LT5waHlz W2ldKTsKKwkJcGh5X3B1dChwcml2LT5waHlzW2ldKTsKKwl9CisKKwlwbV9ydW50aW1lX2Rpc2Fi bGUoZGV2KTsKKwlwbV9ydW50aW1lX3B1dF9ub2lkbGUoZGV2KTsKKwlwbV9ydW50aW1lX3NldF9z dXNwZW5kZWQoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51 c2VkIGR3YzNfbWVzb25fZzEyYV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQor eworCXN0cnVjdCBkd2MzX21lc29uX2cxMmEJKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK KworCWNsa19kaXNhYmxlKHByaXYtPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBfX21heWJlX3VudXNlZCBkd2MzX21lc29uX2cxMmFfcnVudGltZV9yZXN1bWUoc3RydWN0IGRl dmljZSAqZGV2KQoreworCXN0cnVjdCBkd2MzX21lc29uX2cxMmEJKnByaXYgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKKworCXJldHVybiBjbGtfZW5hYmxlKHByaXYtPmNsayk7Cit9CisKK3N0YXRp YyBpbnQgX19tYXliZV91bnVzZWQgZHdjM19tZXNvbl9nMTJhX3N1c3BlbmQoc3RydWN0IGRldmlj ZSAqZGV2KQoreworCXN0cnVjdCBkd2MzX21lc29uX2cxMmEgKnByaXYgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDAgOyBpIDwgUEhZX0NPVU5UIDsgKytpKQor CQlwaHlfZXhpdChwcml2LT5waHlzW2ldKTsKKworCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHByaXYt PnJlc2V0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGR3 YzNfbWVzb25fZzEyYV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkd2Mz X21lc29uX2cxMmEgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgaSwgcmV0Owor CisJcmVzZXRfY29udHJvbF9kZWFzc2VydChwcml2LT5yZXNldCk7CisKKwlkd2MzX21lc29uX2cx MmFfdXNiX2luaXQocHJpdik7CisKKwkvKiBJbml0IFBIWXMgKi8KKwlmb3IgKGkgPSAwIDsgaSA8 IFBIWV9DT1VOVCA7ICsraSkgeworCQlyZXQgPSBwaHlfaW5pdChwcml2LT5waHlzW2ldKTsKKwkJ aWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBkd2MzX21lc29uX2cxMmFfZGV2X3BtX29wcyA9IHsKKwlT RVRfU1lTVEVNX1NMRUVQX1BNX09QUyhkd2MzX21lc29uX2cxMmFfc3VzcGVuZCwgZHdjM19tZXNv bl9nMTJhX3Jlc3VtZSkKKwlTRVRfUlVOVElNRV9QTV9PUFMoZHdjM19tZXNvbl9nMTJhX3J1bnRp bWVfc3VzcGVuZCwKKwkJCWR3YzNfbWVzb25fZzEyYV9ydW50aW1lX3Jlc3VtZSwgTlVMTCkKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGR3YzNfbWVzb25fZzEyYV9tYXRj aFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbi1nMTJhLXVzYi1jdHJsIiB9 LAorCXsgLyogU2VudGluZWwgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGR3YzNf bWVzb25fZzEyYV9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3YzNf bWVzb25fZzEyYV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGR3YzNfbWVzb25fZzEyYV9wcm9iZSwK KwkucmVtb3ZlCQk9IGR3YzNfbWVzb25fZzEyYV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5u YW1lCT0gImR3YzMtbWVzb24tZzEyYSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IGR3YzNfbWVzb25f ZzEyYV9tYXRjaCwKKwkJLnBtCT0gJmR3YzNfbWVzb25fZzEyYV9kZXZfcG1fb3BzLAorCX0sCit9 OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGR3YzNfbWVzb25fZzEyYV9kcml2ZXIpOworTU9E VUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBbWxvZ2ljIE1lc29u IEcxMkEgVVNCIEdsdWUgTGF5ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk5laWwgQXJtc3Ryb25nIDxu YXJtc3Ryb25nQGJheWxpYnJlLmNvbT4iKTsK