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: [v2,8/8] usb: dwc3: Add Amlogic G12A DWC3 glue From: Neil Armstrong Message-Id: <20190304103846.2060-9-narmstrong@baylibre.com> Date: Mon, 4 Mar 2019 11:38:46 +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 ZXNvbi1nMTJhLmMgfCA2MDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMg Y2hhbmdlZCwgNjEyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Vz Yi9kd2MzL2R3YzMtbWVzb24tZzEyYS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMy9L Y29uZmlnIGIvZHJpdmVycy91c2IvZHdjMy9LY29uZmlnCmluZGV4IDFhMDQwNGZkYTU5Ni4uMjFj ZTczNjhkMzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MzL0tjb25maWcKKysrIGIvZHJp dmVycy91c2IvZHdjMy9LY29uZmlnCkBAIC05Myw2ICs5MywxNiBAQCBjb25maWcgVVNCX0RXQzNf S0VZU1RPTkUKIAkgIFN1cHBvcnQgb2YgVVNCMi8zIGZ1bmN0aW9uYWxpdHkgaW4gVEkgS2V5c3Rv bmUyIHBsYXRmb3Jtcy4KIAkgIFNheSAnWScgb3IgJ00nIGhlcmUgaWYgeW91IGhhdmUgb25lIHN1 Y2ggZGV2aWNlCiAKK2NvbmZpZyBVU0JfRFdDM19NRVNPTl9HMTJBCisgICAgICAgdHJpc3RhdGUg IkFtbG9naWMgTWVzb24gRzEyQSBQbGF0Zm9ybXMiCisgICAgICAgZGVwZW5kcyBvbiBPRiAmJiBD T01NT05fQ0xLCisgICAgICAgZGVwZW5kcyBvbiBBUkNIX01FU09OIHx8IENPTVBJTEVfVEVTVAor ICAgICAgIGRlZmF1bHQgVVNCX0RXQzMKKyAgICAgICBzZWxlY3QgVVNCX1JPTEVfU1dJVENICisg ICAgICAgaGVscAorICAgICAgICAgU3VwcG9ydCBVU0IyLzMgZnVuY3Rpb25hbGl0eSBpbiBBbWxv Z2ljIEcxMkEgcGxhdGZvcm1zLgorCSBTYXkgJ1knIG9yICdNJyBpZiB5b3UgaGF2ZSBvbmUgc3Vj aCBkZXZpY2UuCisKIGNvbmZpZyBVU0JfRFdDM19PRl9TSU1QTEUKICAgICAgICB0cmlzdGF0ZSAi R2VuZXJpYyBPRiBTaW1wbGUgR2x1ZSBMYXllciIKICAgICAgICBkZXBlbmRzIG9uIE9GICYmIENP TU1PTl9DTEsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3YzMvTWFrZWZpbGUgYi9kcml2ZXJz L3VzYi9kd2MzL01ha2VmaWxlCmluZGV4IDZlM2VmNjE0NGU1ZC4uYWU4NmRhMGRjNWJkIDEwMDY0 NAotLS0gYS9kcml2ZXJzL3VzYi9kd2MzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2R3YzMv TWFrZWZpbGUKQEAgLTQ3LDYgKzQ3LDcgQEAgb2JqLSQoQ09ORklHX1VTQl9EV0MzX0VYWU5PUykJ CSs9IGR3YzMtZXh5bm9zLm8KIG9iai0kKENPTkZJR19VU0JfRFdDM19QQ0kpCQkrPSBkd2MzLXBj aS5vCiBvYmotJChDT05GSUdfVVNCX0RXQzNfSEFQUykJCSs9IGR3YzMtaGFwcy5vCiBvYmotJChD T05GSUdfVVNCX0RXQzNfS0VZU1RPTkUpCQkrPSBkd2MzLWtleXN0b25lLm8KK29iai0kKENPTkZJ R19VU0JfRFdDM19NRVNPTl9HMTJBKQkrPSBkd2MzLW1lc29uLWcxMmEubwogb2JqLSQoQ09ORklH X1VTQl9EV0MzX09GX1NJTVBMRSkJKz0gZHdjMy1vZi1zaW1wbGUubwogb2JqLSQoQ09ORklHX1VT Ql9EV0MzX1NUKQkJKz0gZHdjMy1zdC5vCiBvYmotJChDT05GSUdfVVNCX0RXQzNfUUNPTSkJCSs9 IGR3YzMtcWNvbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2MzL2R3YzMtbWVzb24tZzEy YS5jIGIvZHJpdmVycy91c2IvZHdjMy9kd2MzLW1lc29uLWcxMmEuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjc1OTQyNjE0YTAzNAotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1tZXNvbi1nMTJhLmMKQEAgLTAsMCArMSw2MDEgQEAKKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogVVNCIEdsdWUgZm9yIEFt bG9naWMgRzEyQSBTb0NzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE5IEJheUxpYnJlLCBTQVMK KyAqIEF1dGhvcjogTmVpbCBBcm1zdHJvbmcgPG5hcm1zdHJvbmdAYmF5bGlicmUuY29tPgorICov CisKKy8qCisgKiBUaGUgVVNCIGlzIG9yZ2FuaXplZCB3aXRoIGEgZ2x1ZSBhcm91bmQgdGhlIERX QzMgQ29udHJvbGxlciBJUCBhcyA6CisgKiAtIENvbnRyb2wgcmVnaXN0ZXJzIGZvciBlYWNoIFVT QjIgUG9ydHMKKyAqIC0gQ29udHJvbCByZWdpc3RlcnMgZm9yIHRoZSBVU0IgUEhZIGxheWVyCisg KiAtIFN1cGVyU3BlZWQgUEhZIGNhbiBiZSBlbmFibGVkIG9ubHkgaWYgcG9ydCBpcyB1c2VkCisg KgorICogVE9GSVg6CisgKiAtIEFkZCBkeW5hbWljIE9URyBzd2l0Y2hpbmcgd2l0aCBJRCBjaGFu Z2UgaW50ZXJydXB0CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGlu dXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVk ZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KKyNpbmNsdWRl IDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgorI2luY2x1ZGUgPGxp bnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8bGlu dXgvdXNiL3JvbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKwor LyogVVNCMiBQb3J0cyBDb250cm9sIFJlZ2lzdGVycyAqLworCisjZGVmaW5lIFUyUF9SRUdfU0la RQkJCQkJCTB4MjAKKworI2RlZmluZSBVMlBfUjAJCQkJCQkJMHgwCisJI2RlZmluZSBVMlBfUjBf SE9TVF9ERVZJQ0UJCQkJQklUKDApCisJI2RlZmluZSBVMlBfUjBfUE9XRVJfT0sJCQkJCUJJVCgx KQorCSNkZWZpbmUgVTJQX1IwX0hBU1RfTU9ERQkJCQlCSVQoMikKKwkjZGVmaW5lIFUyUF9SMF9Q T1dFUl9PTl9SRVNFVAkJCQlCSVQoMykKKwkjZGVmaW5lIFUyUF9SMF9JRF9QVUxMVVAJCQkJQklU KDQpCisJI2RlZmluZSBVMlBfUjBfRFJWX1ZCVVMJCQkJCUJJVCg1KQorCisjZGVmaW5lIFUyUF9S MQkJCQkJCQkweDQKKwkjZGVmaW5lIFUyUF9SMV9QSFlfUkVBRFkJCQkJQklUKDApCisJI2RlZmlu ZSBVMlBfUjFfSURfRElHCQkJCQlCSVQoMSkKKwkjZGVmaW5lIFUyUF9SMV9PVEdfU0VTU0lPTl9W QUxJRAkJCUJJVCgyKQorCSNkZWZpbmUgVTJQX1IxX1ZCVVNfVkFMSUQJCQkJQklUKDMpCisKKy8q IFVTQiBHbHVlIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgVVNCX1IwCQkJCQkJCTB4 ODAKKwkjZGVmaW5lIFVTQl9SMF9QMzBfTEFORTBfVFgyUlhfTE9PUEJBQ0sJCQlCSVQoMTcpCisJ I2RlZmluZSBVU0JfUjBfUDMwX0xBTkUwX0VYVF9QQ0xLX1JFUQkJCUJJVCgxOCkKKwkjZGVmaW5l IFVTQl9SMF9QMzBfUENTX1JYX0xPU19NQVNLX1ZBTF9NQVNLCQlHRU5NQVNLKDI4LCAxOSkKKwkj ZGVmaW5lIFVTQl9SMF9VMkRfU1NfU0NBTEVET1dOX01PREVfTUFTSwkJR0VOTUFTSygzMCwgMjkp CisJI2RlZmluZSBVU0JfUjBfVTJEX0FDVAkJCQkJQklUKDMxKQorCisjZGVmaW5lIFVTQl9SMQkJ CQkJCQkweDg0CisJI2RlZmluZSBVU0JfUjFfVTNIX0JJR0VORElBTl9HUwkJCQlCSVQoMCkKKwkj ZGVmaW5lIFVTQl9SMV9VM0hfUE1FX0VOQUJMRQkJCQlCSVQoMSkKKwkjZGVmaW5lIFVTQl9SMV9V M0hfSFVCX1BPUlRfT1ZFUkNVUlJFTlRfTUFTSwkJR0VOTUFTSyg0LCAyKQorCSNkZWZpbmUgVVNC X1IxX1UzSF9IVUJfUE9SVF9QRVJNX0FUVEFDSF9NQVNLCQlHRU5NQVNLKDksIDcpCisJI2RlZmlu ZSBVU0JfUjFfVTNIX0hPU1RfVTJfUE9SVF9ESVNBQkxFX01BU0sJCUdFTk1BU0soMTMsIDEyKQor CSNkZWZpbmUgVVNCX1IxX1UzSF9IT1NUX1UzX1BPUlRfRElTQUJMRQkJCUJJVCgxNikKKwkjZGVm aW5lIFVTQl9SMV9VM0hfSE9TVF9QT1JUX1BPV0VSX0NPTlRST0xfUFJFU0VOVAlCSVQoMTcpCisJ I2RlZmluZSBVU0JfUjFfVTNIX0hPU1RfTVNJX0VOQUJMRQkJCUJJVCgxOCkKKwkjZGVmaW5lIFVT Ql9SMV9VM0hfRkxBREpfMzBNSFpfUkVHX01BU0sJCQlHRU5NQVNLKDI0LCAxOSkKKwkjZGVmaW5l IFVTQl9SMV9QMzBfUENTX1RYX1NXSU5HX0ZVTExfTUFTSwkJR0VOTUFTSygzMSwgMjUpCisKKyNk ZWZpbmUgVVNCX1IyCQkJCQkJCTB4ODgKKwkjZGVmaW5lIFVTQl9SMl9QMzBfUENTX1RYX0RFRU1Q SF8zUDVEQl9NQVNLCQlHRU5NQVNLKDI1LCAyMCkKKwkjZGVmaW5lIFVTQl9SMl9QMzBfUENTX1RY X0RFRU1QSF82REJfTUFTSwkJR0VOTUFTSygzMSwgMjYpCisKKyNkZWZpbmUgVVNCX1IzCQkJCQkJ CTB4OGMKKwkjZGVmaW5lIFVTQl9SM19QMzBfU1NDX0VOQUJMRQkJCQlCSVQoMCkKKwkjZGVmaW5l IFVTQl9SM19QMzBfU1NDX1JBTkdFX01BU0sJCQlHRU5NQVNLKDMsIDEpCisJI2RlZmluZSBVU0Jf UjNfUDMwX1NTQ19SRUZfQ0xLX1NFTF9NQVNLCQkJR0VOTUFTSygxMiwgNCkKKwkjZGVmaW5lIFVT Ql9SM19QMzBfUkVGX1NTUF9FTgkJCQlCSVQoMTMpCisKKyNkZWZpbmUgVVNCX1I0CQkJCQkJCTB4 OTAKKwkjZGVmaW5lIFVTQl9SNF9QMjFfUE9SVF9SRVNFVF8wCQkJCUJJVCgwKQorCSNkZWZpbmUg VVNCX1I0X1AyMV9TTEVFUF9NMAkJCQlCSVQoMSkKKwkjZGVmaW5lIFVTQl9SNF9NRU1fUERfTUFT SwkJCQlHRU5NQVNLKDMsIDIpCisJI2RlZmluZSBVU0JfUjRfUDIxX09OTFkJCQkJCUJJVCg0KQor CisjZGVmaW5lIFVTQl9SNQkJCQkJCQkweDk0CisJI2RlZmluZSBVU0JfUjVfSURfRElHX1NZTkMJ CQkJQklUKDApCisJI2RlZmluZSBVU0JfUjVfSURfRElHX1JFRwkJCQlCSVQoMSkKKwkjZGVmaW5l IFVTQl9SNV9JRF9ESUdfQ0ZHX01BU0sJCQkJR0VOTUFTSygzLCAyKQorCSNkZWZpbmUgVVNCX1I1 X0lEX0RJR19FTl8wCQkJCUJJVCg0KQorCSNkZWZpbmUgVVNCX1I1X0lEX0RJR19FTl8xCQkJCUJJ VCg1KQorCSNkZWZpbmUgVVNCX1I1X0lEX0RJR19DVVJSCQkJCUJJVCg2KQorCSNkZWZpbmUgVVNC X1I1X0lEX0RJR19JUlEJCQkJQklUKDcpCisJI2RlZmluZSBVU0JfUjVfSURfRElHX1RIX01BU0sJ CQkJR0VOTUFTSygxNSwgOCkKKwkjZGVmaW5lIFVTQl9SNV9JRF9ESUdfQ05UX01BU0sJCQkJR0VO TUFTSygyMywgMTYpCisKK2VudW0geworCVVTQjJfSE9TVF9QSFkgPSAwLAorCVVTQjJfT1RHX1BI WSwKKwlVU0IzX0hPU1RfUEhZLAorCVBIWV9DT1VOVCwKK307CisKK3N0YXRpYyBjb25zdCBjaGFy ICpwaHlfbmFtZXNbUEhZX0NPVU5UXSA9IHsKKwkidXNiMi1waHkwIiwgInVzYjItcGh5MSIsICJ1 c2IzLXBoeTAiLAorfTsKKworc3RydWN0IGR3YzNfbWVzb25fZzEyYSB7CisJc3RydWN0IGRldmlj ZQkJKmRldjsKKwlzdHJ1Y3QgcmVnbWFwCQkqcmVnbWFwOworCXN0cnVjdCBjbGsJCSpjbGs7CisJ c3RydWN0IHJlc2V0X2NvbnRyb2wJKnJlc2V0OworCXN0cnVjdCBwaHkJCSpwaHlzW1BIWV9DT1VO VF07CisJZW51bSB1c2JfZHJfbW9kZQlvdGdfbW9kZTsKKwllbnVtIHBoeV9tb2RlCQlvdGdfcGh5 X21vZGU7CisJdW5zaWduZWQgaW50CQl1c2IyX3BvcnRzOworCXVuc2lnbmVkIGludAkJdXNiM19w b3J0czsKKwlzdHJ1Y3QgcmVndWxhdG9yCSp2YnVzOworCXN0cnVjdCB1c2Jfcm9sZV9zd2l0Y2hf ZGVzYyBzd2l0Y2hfZGVzYzsKKwlzdHJ1Y3QgdXNiX3JvbGVfc3dpdGNoCSpyb2xlX3N3aXRjaDsK K307CisKK3N0YXRpYyB2b2lkIGR3YzNfbWVzb25fZzEyYV91c2IyX3NldF9tb2RlKHN0cnVjdCBk d2MzX21lc29uX2cxMmEgKnByaXYsCisJCQkJCSAgaW50IGksIGVudW0gcGh5X21vZGUgbW9kZSkK K3sKKwlpZiAobW9kZSA9PSBQSFlfTU9ERV9VU0JfSE9TVCkKKwkJcmVnbWFwX3VwZGF0ZV9iaXRz KHByaXYtPnJlZ21hcCwgVTJQX1IwICsgKFUyUF9SRUdfU0laRSAqIGkpLAorCQkJCVUyUF9SMF9I T1NUX0RFVklDRSwKKwkJCQlVMlBfUjBfSE9TVF9ERVZJQ0UpOworCWVsc2UKKwkJcmVnbWFwX3Vw ZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwgVTJQX1IwICsgKFUyUF9SRUdfU0laRSAqIGkpLAorCQkJ CVUyUF9SMF9IT1NUX0RFVklDRSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgZHdjM19tZXNvbl9nMTJh X3VzYjJfaW5pdChzdHJ1Y3QgZHdjM19tZXNvbl9nMTJhICpwcml2KQoreworCWludCBpOworCisJ aWYgKHByaXYtPm90Z19tb2RlID09IFVTQl9EUl9NT0RFX1BFUklQSEVSQUwpCisJCXByaXYtPm90 Z19waHlfbW9kZSA9IFBIWV9NT0RFX1VTQl9ERVZJQ0U7CisJZWxzZQorCQlwcml2LT5vdGdfcGh5 X21vZGUgPSBQSFlfTU9ERV9VU0JfSE9TVDsKKworCWZvciAoaSA9IDAgOyBpIDwgVVNCM19IT1NU X1BIWSA7ICsraSkgeworCQlpZiAoIXByaXYtPnBoeXNbaV0pCisJCQljb250aW51ZTsKKworCQly ZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+cmVnbWFwLCBVMlBfUjAgKyAoVTJQX1JFR19TSVpFICog aSksCisJCQkJICAgVTJQX1IwX1BPV0VSX09OX1JFU0VULAorCQkJCSAgIFUyUF9SMF9QT1dFUl9P Tl9SRVNFVCk7CisKKwkJaWYgKGkgPT0gVVNCMl9PVEdfUEhZKSB7CisJCQlyZWdtYXBfdXBkYXRl X2JpdHMocHJpdi0+cmVnbWFwLAorCQkJCVUyUF9SMCArIChVMlBfUkVHX1NJWkUgKiBpKSwKKwkJ CQlVMlBfUjBfSURfUFVMTFVQIHwgVTJQX1IwX0RSVl9WQlVTLAorCQkJCVUyUF9SMF9JRF9QVUxM VVAgfCBVMlBfUjBfRFJWX1ZCVVMpOworCisJCQlkd2MzX21lc29uX2cxMmFfdXNiMl9zZXRfbW9k ZShwcml2LCBpLAorCQkJCQkJICAgICAgcHJpdi0+b3RnX3BoeV9tb2RlKTsKKwkJfSBlbHNlCisJ CQlkd2MzX21lc29uX2cxMmFfdXNiMl9zZXRfbW9kZShwcml2LCBpLAorCQkJCQkJICAgICAgUEhZ X01PREVfVVNCX0hPU1QpOworCisJCXJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFUy UF9SMCArIChVMlBfUkVHX1NJWkUgKiBpKSwKKwkJCQkgICBVMlBfUjBfUE9XRVJfT05fUkVTRVQs IDApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkd2MzX21lc29uX2cxMmFf dXNiM19pbml0KHN0cnVjdCBkd2MzX21lc29uX2cxMmEgKnByaXYpCit7CisJcmVnbWFwX3VwZGF0 ZV9iaXRzKHByaXYtPnJlZ21hcCwgVVNCX1IzLAorCQkJVVNCX1IzX1AzMF9TU0NfUkFOR0VfTUFT SyB8CisJCQlVU0JfUjNfUDMwX1JFRl9TU1BfRU4sCisJCQlVU0JfUjNfUDMwX1NTQ19FTkFCTEUg fAorCQkJRklFTERfUFJFUChVU0JfUjNfUDMwX1NTQ19SQU5HRV9NQVNLLCAyKSB8CisJCQlVU0Jf UjNfUDMwX1JFRl9TU1BfRU4pOworCXVkZWxheSgyKTsKKworCXJlZ21hcF91cGRhdGVfYml0cyhw cml2LT5yZWdtYXAsIFVTQl9SMiwKKwkJCVVTQl9SMl9QMzBfUENTX1RYX0RFRU1QSF8zUDVEQl9N QVNLLAorCQkJRklFTERfUFJFUChVU0JfUjJfUDMwX1BDU19UWF9ERUVNUEhfM1A1REJfTUFTSywg MHgxNSkpOworCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwgVVNCX1IyLAorCQkJ VVNCX1IyX1AzMF9QQ1NfVFhfREVFTVBIXzZEQl9NQVNLLAorCQkJRklFTERfUFJFUChVU0JfUjJf UDMwX1BDU19UWF9ERUVNUEhfNkRCX01BU0ssIDB4MjApKTsKKworCXVkZWxheSgyKTsKKworCXJl Z21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFVTQl9SMSwKKwkJCVVTQl9SMV9VM0hfSE9T VF9QT1JUX1BPV0VSX0NPTlRST0xfUFJFU0VOVCwKKwkJCVVTQl9SMV9VM0hfSE9TVF9QT1JUX1BP V0VSX0NPTlRST0xfUFJFU0VOVCk7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+cmVnbWFw LCBVU0JfUjEsCisJCQlVU0JfUjFfUDMwX1BDU19UWF9TV0lOR19GVUxMX01BU0ssCisJCQlGSUVM RF9QUkVQKFVTQl9SMV9QMzBfUENTX1RYX1NXSU5HX0ZVTExfTUFTSywgMTI3KSk7Cit9CisKK3N0 YXRpYyB2b2lkIGR3YzNfbWVzb25fZzEyYV91c2JfaW5pdF9tb2RlKHN0cnVjdCBkd2MzX21lc29u X2cxMmEgKnByaXYpCit7CisJaWYgKHByaXYtPm90Z19waHlfbW9kZSA9PSBQSFlfTU9ERV9VU0Jf REVWSUNFKSB7CisJCXJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFVTQl9SMCwKKwkJ CQlVU0JfUjBfVTJEX0FDVCwgVVNCX1IwX1UyRF9BQ1QpOworCQlyZWdtYXBfdXBkYXRlX2JpdHMo cHJpdi0+cmVnbWFwLCBVU0JfUjAsCisJCQkJVVNCX1IwX1UyRF9TU19TQ0FMRURPV05fTU9ERV9N QVNLLCAwKTsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwgVVNCX1I0LAorCQkJ CVVTQl9SNF9QMjFfU0xFRVBfTTAsIFVTQl9SNF9QMjFfU0xFRVBfTTApOworCX0gZWxzZSB7CisJ CXJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFVTQl9SMCwKKwkJCQlVU0JfUjBfVTJE X0FDVCwgMCk7CisJCXJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFVTQl9SNCwKKwkJ CQlVU0JfUjRfUDIxX1NMRUVQX00wLCAwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZHdjM19tZXNv bl9nMTJhX3VzYl9pbml0KHN0cnVjdCBkd2MzX21lc29uX2cxMmEgKnByaXYpCit7CisJaW50IHJl dDsKKworCXJldCA9IGR3YzNfbWVzb25fZzEyYV91c2IyX2luaXQocHJpdik7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCXJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFVTQl9S MSwKKwkJCVVTQl9SMV9VM0hfRkxBREpfMzBNSFpfUkVHX01BU0ssCisJCQlGSUVMRF9QUkVQKFVT Ql9SMV9VM0hfRkxBREpfMzBNSFpfUkVHX01BU0ssIDB4MjApKTsKKworCXJlZ21hcF91cGRhdGVf Yml0cyhwcml2LT5yZWdtYXAsIFVTQl9SNSwKKwkJCVVTQl9SNV9JRF9ESUdfRU5fMCwKKwkJCVVT Ql9SNV9JRF9ESUdfRU5fMCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwgVVNC X1I1LAorCQkJVVNCX1I1X0lEX0RJR19FTl8xLAorCQkJVVNCX1I1X0lEX0RJR19FTl8xKTsKKwly ZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+cmVnbWFwLCBVU0JfUjUsCisJCQlVU0JfUjVfSURfRElH X1RIX01BU0ssCisJCQlGSUVMRF9QUkVQKFVTQl9SNV9JRF9ESUdfVEhfTUFTSywgMHhmZikpOwor CisJLyogSWYgd2UgaGF2ZSBhbiBhY3R1YWwgU3VwZXJTcGVlZCBwb3J0LCBpbml0aWFsaXplIGl0 ICovCisJaWYgKHByaXYtPnVzYjNfcG9ydHMpCisJCWR3YzNfbWVzb25fZzEyYV91c2IzX2luaXQo cHJpdik7CisKKwlkd2MzX21lc29uX2cxMmFfdXNiX2luaXRfbW9kZShwcml2KTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgcGh5X21lc29uX2cx MmFfdXNiM19yZWdtYXBfY29uZiA9IHsKKwkucmVnX2JpdHMgPSA4LAorCS52YWxfYml0cyA9IDMy LAorCS5yZWdfc3RyaWRlID0gNCwKKwkubWF4X3JlZ2lzdGVyID0gVVNCX1I1LAorfTsKKworc3Rh dGljIGludCBkd2MzX21lc29uX2cxMmFfZ2V0X3BoeXMoc3RydWN0IGR3YzNfbWVzb25fZzEyYSAq cHJpdikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDAgOyBpIDwgUEhZX0NPVU5UIDsgKytpKSB7 CisJCXByaXYtPnBoeXNbaV0gPSBkZXZtX3BoeV9vcHRpb25hbF9nZXQocHJpdi0+ZGV2LCBwaHlf bmFtZXNbaV0pOworCQlpZiAoIXByaXYtPnBoeXNbaV0pCisJCQljb250aW51ZTsKKworCQlpZiAo SVNfRVJSKHByaXYtPnBoeXNbaV0pKQorCQkJcmV0dXJuIFBUUl9FUlIocHJpdi0+cGh5c1tpXSk7 CisKKwkJaWYgKGkgPT0gVVNCM19IT1NUX1BIWSkKKwkJCXByaXYtPnVzYjNfcG9ydHMrKzsKKwkJ ZWxzZQorCQkJcHJpdi0+dXNiMl9wb3J0cysrOworCX0KKworCWRldl9pbmZvKHByaXYtPmRldiwg IlVTQjIgcG9ydHM6ICVkXG4iLCBwcml2LT51c2IyX3BvcnRzKTsKKwlkZXZfaW5mbyhwcml2LT5k ZXYsICJVU0IzIHBvcnRzOiAlZFxuIiwgcHJpdi0+dXNiM19wb3J0cyk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGVudW0gcGh5X21vZGUgZHdjM19tZXNvbl9nMTJhX2dldF9pZChzdHJ1Y3Qg ZHdjM19tZXNvbl9nMTJhICpwcml2KQoreworCXUzMiByZWc7CisKKwlyZWdtYXBfcmVhZChwcml2 LT5yZWdtYXAsIFVTQl9SNSwgJnJlZyk7CisKKwlpZiAocmVnICYgKFVTQl9SNV9JRF9ESUdfU1lO QyB8IFVTQl9SNV9JRF9ESUdfUkVHKSkKKwkJcmV0dXJuIFBIWV9NT0RFX1VTQl9ERVZJQ0U7CisK KwlyZXR1cm4gUEhZX01PREVfVVNCX0hPU1Q7Cit9CisKK3N0YXRpYyBpbnQgZHdjM19tZXNvbl9n MTJhX290Z19tb2RlX3NldChzdHJ1Y3QgZHdjM19tZXNvbl9nMTJhICpwcml2LAorCQkJCQllbnVt IHBoeV9tb2RlIG1vZGUpCit7CisJaW50IHJldDsKKworCWlmICghcHJpdi0+cGh5c1tVU0IyX09U R19QSFldKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtb2RlID09IFBIWV9NT0RFX1VTQl9I T1NUKQorCQlkZXZfaW5mbyhwcml2LT5kZXYsICJzd2l0Y2hpbmcgdG8gSG9zdCBNb2RlXG4iKTsK KwllbHNlCisJCWRldl9pbmZvKHByaXYtPmRldiwgInN3aXRjaGluZyB0byBEZXZpY2UgTW9kZVxu Iik7CisKKwlpZiAocHJpdi0+dmJ1cykgeworCQlpZiAobW9kZSA9PSBQSFlfTU9ERV9VU0JfREVW SUNFKQorCQkJcmV0ID0gcmVndWxhdG9yX2Rpc2FibGUocHJpdi0+dmJ1cyk7CisJCWVsc2UKKwkJ CXJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi0+dmJ1cyk7CisJCWlmIChyZXQpCisJCQlyZXR1 cm4gcmV0OworCX0KKworCXByaXYtPm90Z19waHlfbW9kZSA9IG1vZGU7CisKKwlkd2MzX21lc29u X2cxMmFfdXNiMl9zZXRfbW9kZShwcml2LCBVU0IyX09UR19QSFksIG1vZGUpOworCisJZHdjM19t ZXNvbl9nMTJhX3VzYl9pbml0X21vZGUocHJpdik7CisKKwlyZXR1cm4gcGh5X3NldF9tb2RlKHBy aXYtPnBoeXNbVVNCMl9PVEdfUEhZXSwgbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgZHdjM19tZXNv bl9nMTJhX3JvbGVfc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSB1c2Jfcm9sZSByb2xlKQor eworCXN0cnVjdCBkd2MzX21lc29uX2cxMmEgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK KwllbnVtIHBoeV9tb2RlIG1vZGU7CisKKwlpZiAocm9sZSA9PSBVU0JfUk9MRV9OT05FKQorCQly ZXR1cm4gMDsKKworCW1vZGUgPSByb2xlID09IFVTQl9ST0xFX0hPU1QgPyBQSFlfTU9ERV9VU0Jf SE9TVCA6IFBIWV9NT0RFX1VTQl9ERVZJQ0U7CisKKwlpZiAobW9kZSA9PSBwcml2LT5vdGdfcGh5 X21vZGUpCisJCXJldHVybiAwOworCisJcmV0dXJuIGR3YzNfbWVzb25fZzEyYV9vdGdfbW9kZV9z ZXQocHJpdiwgbW9kZSk7Cit9CisKK3N0YXRpYyBlbnVtIHVzYl9yb2xlIGR3YzNfbWVzb25fZzEy YV9yb2xlX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGR3YzNfbWVzb25fZzEy YSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHByaXYtPm90Z19waHlf bW9kZSA9PSBQSFlfTU9ERV9VU0JfSE9TVCA/CisJCVVTQl9ST0xFX0hPU1QgOiBVU0JfUk9MRV9E RVZJQ0U7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICpkd2MzX21lc29uX2cxMl9maW5kX2No aWxkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCWNvbnN0IGNoYXIgKmNvbXBhdGlibGUpCit7 CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w OworCisJbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShkZXYtPm9mX25vZGUsIE5VTEwsIGNv bXBhdGlibGUpOworCWlmICghbnApCisJCXJldHVybiBOVUxMOworCisJcGRldiA9IG9mX2ZpbmRf ZGV2aWNlX2J5X25vZGUobnApOworCW9mX25vZGVfcHV0KG5wKTsKKwlpZiAoIXBkZXYpCisJCXJl dHVybiBOVUxMOworCisJcmV0dXJuICZwZGV2LT5kZXY7Cit9CisKK3N0YXRpYyBpbnQgZHdjM19t ZXNvbl9nMTJhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0 IGR3YzNfbWVzb25fZzEyYQkqcHJpdjsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2ID0gJnBkZXYtPmRl djsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUJKm5wID0gZGV2LT5vZl9ub2RlOworCXZvaWQgX19pb21l bSAqYmFzZTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwllbnVtIHBoeV9tb2RlIG90Z19pZDsK KwlpbnQgcmV0LCBpOworCisJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiks IEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXMgPSBw bGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWJhc2UgPSBk ZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIoYmFzZSkpCisJCXJl dHVybiBQVFJfRVJSKGJhc2UpOworCisJcHJpdi0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9t bWlvKGRldiwgYmFzZSwKKwkJCQkJICAgICAmcGh5X21lc29uX2cxMmFfdXNiM19yZWdtYXBfY29u Zik7CisJaWYgKElTX0VSUihwcml2LT5yZWdtYXApKQorCQlyZXR1cm4gUFRSX0VSUihwcml2LT5y ZWdtYXApOworCisJcHJpdi0+dmJ1cyA9IGRldm1fcmVndWxhdG9yX2dldF9vcHRpb25hbChkZXYs ICJ2YnVzIik7CisJaWYgKElTX0VSUihwcml2LT52YnVzKSkgeworCQlpZiAoUFRSX0VSUihwcml2 LT52YnVzKSA9PSAtRVBST0JFX0RFRkVSKQorCQkJcmV0dXJuIFBUUl9FUlIocHJpdi0+dmJ1cyk7 CisJCXByaXYtPnZidXMgPSBOVUxMOworCX0KKworCXByaXYtPmNsayA9IGRldm1fY2xrX2dldChk ZXYsIE5VTEwpOworCWlmIChJU19FUlIocHJpdi0+Y2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIocHJp di0+Y2xrKTsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5jbGspOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsK Kwlwcml2LT5kZXYgPSBkZXY7CisKKwlwcml2LT5yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9n ZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKHByaXYtPnJlc2V0KSkgeworCQlyZXQgPSBQVFJf RVJSKHByaXYtPnJlc2V0KTsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGRldmljZSBy ZXNldCwgZXJyPSVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHJlc2V0 X2NvbnRyb2xfcmVzZXQocHJpdi0+cmVzZXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlyZXQgPSBkd2MzX21lc29uX2cxMmFfZ2V0X3BoeXMocHJpdik7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUocHJpdi0+dmJ1cyk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEdldCBkcl9tb2RlICovCisJcHJpdi0+b3RnX21vZGUg PSB1c2JfZ2V0X2RyX21vZGUoZGV2KTsKKworCWR3YzNfbWVzb25fZzEyYV91c2JfaW5pdChwcml2 KTsKKworCS8qIFNldCBQSFkgUG93ZXIgKi8KKwlmb3IgKGkgPSAwIDsgaSA8IFBIWV9DT1VOVCA7 ICsraSkgeworCQlyZXQgPSBwaHlfcG93ZXJfb24ocHJpdi0+cGh5c1tpXSk7CisJCWlmIChyZXQp CisJCQlnb3RvIGVycl9waHlzX3B1dDsKKwl9CisKKwkvKiBJbml0IFBIWXMgKi8KKwlmb3IgKGkg PSAwIDsgaSA8IFBIWV9DT1VOVCA7ICsraSkgeworCQlyZXQgPSBwaHlfaW5pdChwcml2LT5waHlz W2ldKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3BoeXNfcG93ZXI7CisJfQorCisJcmV0ID0g b2ZfcGxhdGZvcm1fcG9wdWxhdGUobnAsIE5VTEwsIE5VTEwsIGRldik7CisJaWYgKHJldCkgewor CQljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xrKTsKKwkJY2xrX3B1dChwcml2LT5jbGsp OworCisJCWdvdG8gZXJyX3BoeXNfZXhpdDsKKwl9CisKKwkvKiBTZXR1cCBPVEcgbW9kZSBjb3Jy ZXNwb25kaW5nIHRvIHRoZSBJRCBwaW4gKi8KKwlpZiAocHJpdi0+b3RnX21vZGUgPT0gVVNCX0RS X01PREVfT1RHKSB7CisJCS8qIFRPRklYIEhhbmRsZSBJRCBtb2RlIHRvZ2dsaW5nIHZpYSBJUlEg Ki8KKwkJb3RnX2lkID0gZHdjM19tZXNvbl9nMTJhX2dldF9pZChwcml2KTsKKwkJaWYgKG90Z19p ZCAhPSBwcml2LT5vdGdfcGh5X21vZGUpIHsKKwkJCWlmIChkd2MzX21lc29uX2cxMmFfb3RnX21v ZGVfc2V0KHByaXYsIG90Z19pZCkpCisJCQkJZGV2X3dhcm4oZGV2LCAiRmFpbGVkIHRvIHN3aXRj aCBPVEcgbW9kZVxuIik7CisJCX0KKwl9CisKKwkvKiBTZXR1cCByb2xlIHN3aXRjaGVyICovCisJ cHJpdi0+c3dpdGNoX2Rlc2MudXNiMl9wb3J0ID0gZHdjM19tZXNvbl9nMTJfZmluZF9jaGlsZChk ZXYsCisJCQkJCQkJCSJzbnBzLGR3YzMiKTsKKwlwcml2LT5zd2l0Y2hfZGVzYy51ZGMgPSBkd2Mz X21lc29uX2cxMl9maW5kX2NoaWxkKGRldiwgInNucHMsZHdjMiIpOworCXByaXYtPnN3aXRjaF9k ZXNjLmFsbG93X3VzZXJzcGFjZV9jb250cm9sID0gdHJ1ZTsKKwlwcml2LT5zd2l0Y2hfZGVzYy5z ZXQgPSBkd2MzX21lc29uX2cxMmFfcm9sZV9zZXQ7CisJcHJpdi0+c3dpdGNoX2Rlc2MuZ2V0ID0g ZHdjM19tZXNvbl9nMTJhX3JvbGVfZ2V0OworCisJcHJpdi0+cm9sZV9zd2l0Y2ggPSB1c2Jfcm9s ZV9zd2l0Y2hfcmVnaXN0ZXIoZGV2LCAmcHJpdi0+c3dpdGNoX2Rlc2MpOworCWlmIChJU19FUlIo cHJpdi0+cm9sZV9zd2l0Y2gpKQorCQlkZXZfd2FybihkZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIg Um9sZSBTd2l0Y2hcbiIpOworCisJcG1fcnVudGltZV9zZXRfYWN0aXZlKGRldik7CisJcG1fcnVu dGltZV9lbmFibGUoZGV2KTsKKwlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7CisKKwlyZXR1cm4g MDsKKworZXJyX3BoeXNfZXhpdDoKKwlmb3IgKGkgPSAwIDsgaSA8IFBIWV9DT1VOVCA7ICsraSkK KwkJcGh5X2V4aXQocHJpdi0+cGh5c1tpXSk7CisKK2Vycl9waHlzX3Bvd2VyOgorCWZvciAoaSA9 IDAgOyBpIDwgUEhZX0NPVU5UIDsgKytpKQorCQlwaHlfcG93ZXJfb2ZmKHByaXYtPnBoeXNbaV0p OworCitlcnJfcGh5c19wdXQ6CisJZm9yIChpID0gMCA7IGkgPCBQSFlfQ09VTlQgOyArK2kpCisJ CXBoeV9wdXQocHJpdi0+cGh5c1tpXSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 IGR3YzNfbWVzb25fZzEyYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK KwlzdHJ1Y3QgZHdjM19tZXNvbl9nMTJhICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRl dik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlpbnQgaTsKKworCXVzYl9y b2xlX3N3aXRjaF91bnJlZ2lzdGVyKHByaXYtPnJvbGVfc3dpdGNoKTsKKworCW9mX3BsYXRmb3Jt X2RlcG9wdWxhdGUoZGV2KTsKKworCWZvciAoaSA9IDAgOyBpIDwgUEhZX0NPVU5UIDsgKytpKSB7 CisJCXBoeV9wb3dlcl9vZmYocHJpdi0+cGh5c1tpXSk7CisJCXBoeV9leGl0KHByaXYtPnBoeXNb aV0pOworCQlwaHlfcHV0KHByaXYtPnBoeXNbaV0pOworCX0KKworCWNsa19kaXNhYmxlX3VucHJl cGFyZShwcml2LT5jbGspOworCWNsa19wdXQocHJpdi0+Y2xrKTsKKworCXBtX3J1bnRpbWVfZGlz YWJsZShkZXYpOworCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOworCXBtX3J1bnRpbWVfc2V0 X3N1c3BlbmRlZChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19tYXliZV91 bnVzZWQgZHdjM19tZXNvbl9nMTJhX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYp Cit7CisJc3RydWN0IGR3YzNfbWVzb25fZzEyYQkqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp OworCisJY2xrX2Rpc2FibGUocHJpdi0+Y2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IF9fbWF5YmVfdW51c2VkIGR3YzNfbWVzb25fZzEyYV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3Qg ZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGR3YzNfbWVzb25fZzEyYQkqcHJpdiA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIGNsa19lbmFibGUocHJpdi0+Y2xrKTsKK30KKworc3Rh dGljIGludCBfX21heWJlX3VudXNlZCBkd2MzX21lc29uX2cxMmFfc3VzcGVuZChzdHJ1Y3QgZGV2 aWNlICpkZXYpCit7CisJc3RydWN0IGR3YzNfbWVzb25fZzEyYSAqcHJpdiA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOworCWludCBpOworCisJZm9yIChpID0gMCA7IGkgPCBQSFlfQ09VTlQgOyArK2kp CisJCWlmIChwcml2LT5waHlzW2ldKQorCQkJcGh5X2V4aXQocHJpdi0+cGh5c1tpXSk7CisKKwly ZXNldF9jb250cm9sX2Fzc2VydChwcml2LT5yZXNldCk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCBfX21heWJlX3VudXNlZCBkd2MzX21lc29uX2cxMmFfcmVzdW1lKHN0cnVjdCBkZXZp Y2UgKmRldikKK3sKKwlzdHJ1Y3QgZHdjM19tZXNvbl9nMTJhICpwcml2ID0gZGV2X2dldF9kcnZk YXRhKGRldik7CisJaW50IGksIHJldDsKKworCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocHJpdi0+ cmVzZXQpOworCisJZHdjM19tZXNvbl9nMTJhX3VzYl9pbml0KHByaXYpOworCisJLyogSW5pdCBQ SFlzICovCisJZm9yIChpID0gMCA7IGkgPCBQSFlfQ09VTlQgOyArK2kpIHsKKwkJaWYgKHByaXYt PnBoeXNbaV0pIHsKKwkJCXJldCA9IHBoeV9pbml0KHByaXYtPnBoeXNbaV0pOworCQkJaWYgKHJl dCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBkd2MzX21lc29uX2cxMmFfZGV2X3BtX29wcyA9IHsKKwlT RVRfU1lTVEVNX1NMRUVQX1BNX09QUyhkd2MzX21lc29uX2cxMmFfc3VzcGVuZCwgZHdjM19tZXNv bl9nMTJhX3Jlc3VtZSkKKwlTRVRfUlVOVElNRV9QTV9PUFMoZHdjM19tZXNvbl9nMTJhX3J1bnRp bWVfc3VzcGVuZCwKKwkJCWR3YzNfbWVzb25fZzEyYV9ydW50aW1lX3Jlc3VtZSwgTlVMTCkKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGR3YzNfbWVzb25fZzEyYV9tYXRj aFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbi1nMTJhLXVzYi1jdHJsIiB9 LAorCXsgLyogU2VudGluZWwgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGR3YzNf bWVzb25fZzEyYV9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3YzNf bWVzb25fZzEyYV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGR3YzNfbWVzb25fZzEyYV9wcm9iZSwK KwkucmVtb3ZlCQk9IGR3YzNfbWVzb25fZzEyYV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5u YW1lCT0gImR3YzMtbWVzb24tZzEyYSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IGR3YzNfbWVzb25f ZzEyYV9tYXRjaCwKKwkJLnBtCT0gJmR3YzNfbWVzb25fZzEyYV9kZXZfcG1fb3BzLAorCX0sCit9 OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGR3YzNfbWVzb25fZzEyYV9kcml2ZXIpOworTU9E VUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBbWxvZ2ljIE1lc29u IEcxMkEgVVNCIEdsdWUgTGF5ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk5laWwgQXJtc3Ryb25nIDxu YXJtc3Ryb25nQGJheWxpYnJlLmNvbT4iKTsK