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: [v4,6/6] usb: musb: Add support for MediaTek musb controller From: min.guo@mediatek.com Message-Id: <1548073351-13739-7-git-send-email-min.guo@mediatek.com> Date: Mon, 21 Jan 2019 20:22:31 +0800 To: Bin Liu , Rob Herring Cc: Greg Kroah-Hartman , Mark Rutland , Matthias Brugger , Alan Stern , chunfeng.yun@mediatek.com, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, tony@atomide.com, hdegoede@redhat.com, Min Guo , Yonglong Wu List-ID: RnJvbTogTWluIEd1byA8bWluLmd1b0BtZWRpYXRlay5jb20+CgpUaGlzIGFkZHMgc3VwcG9ydCBm b3IgTWVkaWFUZWsgbXVzYiBjb250cm9sbGVyIGluCmhvc3QsIHBlcmlwaGVyYWwgYW5kIG90ZyBt b2RlLgpUaGVyZSBhcmUgc29tZSBxdWlyayBvZiBNZWRpYVRlayBtdXNiIGNvbnRyb2xsZXIsIHN1 Y2ggYXM6CiAtVzFDIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzCiAtUHJpdmF0ZSBkYXRhIHRv Z2dsZSByZWdpc3RlcnMKIC1ObyBkZWRpY2F0ZWQgRE1BIGludGVycnVwdCBsaW5lCgpTaWduZWQt b2ZmLWJ5OiBNaW4gR3VvIDxtaW4uZ3VvQG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWW9u Z2xvbmcgV3UgPHlvbmdsb25nLnd1QG1lZGlhdGVrLmNvbT4KLS0tCmNoYW5nZXMgaW4gdjQ6CjEu IG5vIGNoYW5nZXMKCmNoYW5nZXMgaW4gdjM6CnN1Z2dlc3RlZCBieSBCaW46CjEuIFJlbW92ZSAn dTgvdTE2IGRhdGEnIHBhcmFtZXRlciBpbiBjbGVhcmIvdygpIGhvb2tzCjIuIFJlcGxhY2UgbXVz Yl9yZWFkYi93KCkgd2l0aCBtdXNiX2NsZWFyYi93KCkgdG8gY2xlYXIgaW50ZXJydXB0cyBzdGF0 dXMKCmNoYW5nZXMgaW4gdjI6CnN1Z2dlc3RlZCBieSBCaW46CjEuIEFkZCBzdW1tYXJpemUgb2Yg TWVkaWFUZWsgbXVzYiBjb250cm9sbGVyIGRpZmZlcmVuY2VzIGluIHRoZSBjb21taXQgbG9nCjIu IEFkZCAifHwgQ09NUElMRV9URVNUIiBpbiBLY29uZmlnCjMuIE1vdmUgTWVkaWFUZWsncyBwcml2 YXRlIHRvZ2dsZSByZWdpc3RlcnMgZnJvbSBtdXNiX3JlZ3MuaCB0byBtZWRpYXRlay5jCjQuIFJl cGxhY2UgbXVzYl9yZWFkbCgpIHdpdGggbXVzYl9yZWFkdygpIHRvIHJlYWQgMTZiaXQgdG9nZ2xl IHJlZ2lzdGVyCi0tLQogZHJpdmVycy91c2IvbXVzYi9LY29uZmlnICAgIHwgICA4ICstCiBkcml2 ZXJzL3VzYi9tdXNiL01ha2VmaWxlICAgfCAgIDEgKwogZHJpdmVycy91c2IvbXVzYi9tZWRpYXRl ay5jIHwgNjI0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAz IGZpbGVzIGNoYW5nZWQsIDYzMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy91c2IvbXVzYi9tZWRpYXRlay5jCgpkaWZmIC0tZ2l0IGEvZHJp dmVycy91c2IvbXVzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCmluZGV4IGFk MDg4OTUuLmI3MmI3YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZworKysg Yi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKQEAgLTExNSw2ICsxMTUsMTIgQEAgY29uZmlnIFVT Ql9NVVNCX0paNDc0MAogCWRlcGVuZHMgb24gVVNCX01VU0JfR0FER0VUCiAJZGVwZW5kcyBvbiBV U0JfT1RHX0JMQUNLTElTVF9IVUIKIAorY29uZmlnIFVTQl9NVVNCX01FRElBVEVLCisJdHJpc3Rh dGUgIk1lZGlhVGVrIHBsYXRmb3JtcyIKKwlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsgfHwgQ09N UElMRV9URVNUCisJZGVwZW5kcyBvbiBOT1BfVVNCX1hDRUlWCisJZGVwZW5kcyBvbiBHRU5FUklD X1BIWQorCiBjb25maWcgVVNCX01VU0JfQU0zMzVYX0NISUxECiAJdHJpc3RhdGUKIApAQCAtMTQx LDcgKzE0Nyw3IEBAIGNvbmZpZyBVU0JfVVg1MDBfRE1BCiAKIGNvbmZpZyBVU0JfSU5WRU5UUkFf RE1BCiAJYm9vbCAnSW52ZW50cmEnCi0JZGVwZW5kcyBvbiBVU0JfTVVTQl9PTUFQMlBMVVMKKwlk ZXBlbmRzIG9uIFVTQl9NVVNCX09NQVAyUExVUyB8fCBVU0JfTVVTQl9NRURJQVRFSwogCWhlbHAK IAkgIEVuYWJsZSBETUEgdHJhbnNmZXJzIHVzaW5nIE1lbnRvcidzIGVuZ2luZS4KIApkaWZmIC0t Z2l0IGEvZHJpdmVycy91c2IvbXVzYi9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL211c2IvTWFrZWZp bGUKaW5kZXggM2E4OGM3OS4uNjNkODJkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9N YWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9tdXNiL01ha2VmaWxlCkBAIC0yNCw2ICsyNCw3IEBA IG9iai0kKENPTkZJR19VU0JfTVVTQl9EQThYWCkJCQkrPSBkYTh4eC5vCiBvYmotJChDT05GSUdf VVNCX01VU0JfVVg1MDApCQkJKz0gdXg1MDAubwogb2JqLSQoQ09ORklHX1VTQl9NVVNCX0paNDc0 MCkJCQkrPSBqejQ3NDAubwogb2JqLSQoQ09ORklHX1VTQl9NVVNCX1NVTlhJKQkJCSs9IHN1bnhp Lm8KK29iai0kKENPTkZJR19VU0JfTVVTQl9NRURJQVRFSykgICAgICAJCSs9IG1lZGlhdGVrLm8K IAogCiBvYmotJChDT05GSUdfVVNCX01VU0JfQU0zMzVYX0NISUxEKQkJKz0gbXVzYl9hbTMzNXgu bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tZWRpYXRlay5jIGIvZHJpdmVycy91c2Iv bXVzYi9tZWRpYXRlay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1Y2Fm YTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL21lZGlhdGVrLmMKQEAgLTAs MCArMSw2MjQgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICog Q29weXJpZ2h0IChDKSAyMDE4IE1lZGlhVGVrIEluYy4KKyAqCisgKiBBdXRob3I6CisgKiAgTWlu IEd1byA8bWluLmd1b0BtZWRpYXRlay5jb20+CisgKiAgWW9uZ2xvbmcgV3UgPHlvbmdsb25nLnd1 QG1lZGlhdGVrLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8 bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRl IDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdXNiX3BoeV9n ZW5lcmljLmg+CisjaW5jbHVkZSAibXVzYl9jb3JlLmgiCisjaW5jbHVkZSAibXVzYl9kbWEuaCIK KworI2RlZmluZSBVU0JfTDFJTlRTCTB4MDBhMAorI2RlZmluZSBVU0JfTDFJTlRNCTB4MDBhNAor I2RlZmluZSBNVEtfTVVTQl9UWEZVTkNBRERSCTB4MDQ4MAorCisvKiBNZWRpYVRlayBjb250cm9s bGVyIHRvZ2dsZSBlbmFibGUgYW5kIHN0YXR1cyByZWcgKi8KKyNkZWZpbmUgTVVTQl9SWFRPRwkJ MHg4MAorI2RlZmluZSBNVVNCX1JYVE9HRU4JCTB4ODIKKyNkZWZpbmUgTVVTQl9UWFRPRwkJMHg4 NAorI2RlZmluZSBNVVNCX1RYVE9HRU4JCTB4ODYKKworI2RlZmluZSBUWF9JTlRfU1RBVFVTCQlC SVQoMCkKKyNkZWZpbmUgUlhfSU5UX1NUQVRVUwkJQklUKDEpCisjZGVmaW5lIFVTQkNPTV9JTlRf U1RBVFVTCQlCSVQoMikKKyNkZWZpbmUgRE1BX0lOVF9TVEFUVVMJCUJJVCgzKQorCisjZGVmaW5l IERNQV9JTlRSX1NUQVRVU19NU0sJCUdFTk1BU0soNywgMCkKKyNkZWZpbmUgRE1BX0lOVFJfVU5N QVNLX1NFVF9NU0sJR0VOTUFTSygzMSwgMjQpCisKK2VudW0gbXRrX3ZidXNfaWRfc3RhdGUgewor CU1US19JRF9GTE9BVCA9IDEsCisJTVRLX0lEX0dST1VORCwKKwlNVEtfVkJVU19PRkYsCisJTVRL X1ZCVVNfVkFMSUQsCit9OworCitzdHJ1Y3QgbXRrX2dsdWUgeworCXN0cnVjdCBkZXZpY2UgKmRl djsKKwlzdHJ1Y3QgbXVzYiAqbXVzYjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptdXNiX3Bk ZXY7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdXNiX3BoeTsKKwlzdHJ1Y3QgcGh5ICpwaHk7 CisJc3RydWN0IHVzYl9waHkgKnhjZWl2OworCWVudW0gcGh5X21vZGUgcGh5X21vZGU7CisJc3Ry dWN0IGNsayAqbWFpbjsKKwlzdHJ1Y3QgY2xrICptY3U7CisJc3RydWN0IGNsayAqdW5pdnBsbDsK KwlzdHJ1Y3QgcmVndWxhdG9yICp2YnVzOworCXN0cnVjdCBleHRjb25fZGV2ICplZGV2OworCXN0 cnVjdCBub3RpZmllcl9ibG9jayB2YnVzX25iOworCXN0cnVjdCBub3RpZmllcl9ibG9jayBpZF9u YjsKK307CisKK3N0YXRpYyBpbnQgbXRrX211c2JfY2xrc19nZXQoc3RydWN0IG10a19nbHVlICpn bHVlKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGdsdWUtPmRldjsKKworCWdsdWUtPm1haW4g PSBkZXZtX2Nsa19nZXQoZGV2LCAibWFpbiIpOworCWlmIChJU19FUlIoZ2x1ZS0+bWFpbikpIHsK KwkJZGV2X2VycihkZXYsICJmYWlsIHRvIGdldCBtYWluIGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBU Ul9FUlIoZ2x1ZS0+bWFpbik7CisJfQorCisJZ2x1ZS0+bWN1ID0gZGV2bV9jbGtfZ2V0KGRldiwg Im1jdSIpOworCWlmIChJU19FUlIoZ2x1ZS0+bWN1KSkgeworCQlkZXZfZXJyKGRldiwgImZhaWwg dG8gZ2V0IG1jdSBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKGdsdWUtPm1jdSk7CisJfQor CisJZ2x1ZS0+dW5pdnBsbCA9IGRldm1fY2xrX2dldChkZXYsICJ1bml2cGxsIik7CisJaWYgKElT X0VSUihnbHVlLT51bml2cGxsKSkgeworCQlkZXZfZXJyKGRldiwgImZhaWwgdG8gZ2V0IHVuaXZw bGwgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihnbHVlLT51bml2cGxsKTsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfbXVzYl9jbGtzX2VuYWJsZShzdHJ1Y3QgbXRr X2dsdWUgKmdsdWUpCit7CisJaW50IHJldDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShn bHVlLT5tYWluKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZ2x1ZS0+ZGV2LCAiZmFpbGVkIHRv IGVuYWJsZSBtYWluIGNsb2NrXG4iKTsKKwkJZ290byBlcnJfbWFpbl9jbGs7CisJfQorCisJcmV0 ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGdsdWUtPm1jdSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KGdsdWUtPmRldiwgImZhaWxlZCB0byBlbmFibGUgbWN1IGNsb2NrXG4iKTsKKwkJZ290byBlcnJf bWN1X2NsazsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZ2x1ZS0+dW5pdnBsbCk7 CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGdsdWUtPmRldiwgImZhaWxlZCB0byBlbmFibGUgdW5p dnBsbCBjbG9ja1xuIik7CisJCWdvdG8gZXJyX3VuaXZwbGxfY2xrOworCX0KKworCXJldHVybiAw OworCitlcnJfdW5pdnBsbF9jbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGdsdWUtPm1jdSk7 CitlcnJfbWN1X2NsazoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZ2x1ZS0+bWFpbik7CitlcnJf bWFpbl9jbGs6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX211c2JfY2xrc19k aXNhYmxlKHN0cnVjdCBtdGtfZ2x1ZSAqZ2x1ZSkKK3sKKwljbGtfZGlzYWJsZV91bnByZXBhcmUo Z2x1ZS0+dW5pdnBsbCk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGdsdWUtPm1jdSk7CisJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKGdsdWUtPm1haW4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfbXVz Yl9zZXRfdmJ1cyhzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uKQoreworCXN0cnVjdCBkZXZp Y2UgKmRldiA9IG11c2ItPmNvbnRyb2xsZXI7CisJc3RydWN0IG10a19nbHVlICpnbHVlID0gZGV2 X2dldF9kcnZkYXRhKGRldi0+cGFyZW50KTsKKwlpbnQgcmV0OworCisJLyogdmJ1cyBpcyBvcHRp b25hbCAqLworCWlmICghZ2x1ZS0+dmJ1cykKKwkJcmV0dXJuOworCisJZGV2X2RiZyhtdXNiLT5j b250cm9sbGVyLCAiJXMsIGlzX29uPSVkXHJcbiIsIF9fZnVuY19fLCBpc19vbik7CisJaWYgKGlz X29uKSB7CisJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoZ2x1ZS0+dmJ1cyk7CisJCWlmIChyZXQp IHsKKwkJCWRldl9lcnIoZ2x1ZS0+ZGV2LCAiZmFpbCB0byBlbmFibGUgdmJ1cyByZWd1bGF0b3Jc biIpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJcmVndWxhdG9yX2Rpc2FibGUoZ2x1 ZS0+dmJ1cyk7CisJfQorfQorCisvKgorICogc3dpdGNoIHRvIGhvc3Q6IC0+IE1US19WQlVTX09G RiAtLT4gTVRLX0lEX0dST1VORAorICogc3dpdGNoIHRvIGRldmljZTogLT4gTVRLX0lEX0ZMT0FU IC0tPiBNVEtfVkJVU19WQUxJRAorICovCitzdGF0aWMgdm9pZCBtdGtfbXVzYl9zZXRfbWFpbGJv eChzdHJ1Y3QgbXRrX2dsdWUgKmdsdWUsCisJCQkJIGVudW0gbXRrX3ZidXNfaWRfc3RhdGUgc3Rh dHVzKQoreworCXN0cnVjdCBtdXNiICptdXNiID0gZ2x1ZS0+bXVzYjsKKwl1OCBkZXZjdGwgPSAw OworCisJZGV2X2RiZyhnbHVlLT5kZXYsICJtYWlsYm94IHN0YXRlKCVkKVxuIiwgc3RhdHVzKTsK Kwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgTVRLX0lEX0dST1VORDoKKwkJcGh5X3Bvd2VyX29u KGdsdWUtPnBoeSk7CisJCWRldmN0bCA9IHJlYWRiKG11c2ItPm1yZWdzICsgTVVTQl9ERVZDVEwp OworCQltdXNiLT54Y2Vpdi0+b3RnLT5zdGF0ZSA9IE9UR19TVEFURV9BX1dBSVRfVlJJU0U7CisJ CW10a19tdXNiX3NldF92YnVzKG11c2IsIDEpOworCQlnbHVlLT5waHlfbW9kZSA9IFBIWV9NT0RF X1VTQl9IT1NUOworCQlwaHlfc2V0X21vZGUoZ2x1ZS0+cGh5LCBnbHVlLT5waHlfbW9kZSk7CisJ CWRldmN0bCB8PSBNVVNCX0RFVkNUTF9TRVNTSU9OOworCQltdXNiX3dyaXRlYihtdXNiLT5tcmVn cywgTVVTQl9ERVZDVEwsIGRldmN0bCk7CisJCU1VU0JfSFNUX01PREUobXVzYik7CisJCWJyZWFr OworCS8qCisJICogTVRLX0lEX0ZMT0FUIHByb2Nlc3MgaXMgdGhlIHNhbWUgYXMgTVRLX1ZCVVNf VkFMSUQKKwkgKiBleGNlcHQgdGhhdCB0dXJuIG9mZiBWQlVTCisJICovCisJY2FzZSBNVEtfSURf RkxPQVQ6CisJCW10a19tdXNiX3NldF92YnVzKG11c2IsIDApOworCQkvKiBmYWxsIHRocm91Z2gg Ki8KKwljYXNlIE1US19WQlVTX09GRjoKKwkJbXVzYi0+eGNlaXYtPm90Zy0+c3RhdGUgPSBPVEdf U1RBVEVfQl9JRExFOworCQlkZXZjdGwgJj0gfk1VU0JfREVWQ1RMX1NFU1NJT047CisJCW11c2Jf d3JpdGViKG11c2ItPm1yZWdzLCBNVVNCX0RFVkNUTCwgZGV2Y3RsKTsKKwkJcGh5X3Bvd2VyX29m ZihnbHVlLT5waHkpOworCQlicmVhazsKKwljYXNlIE1US19WQlVTX1ZBTElEOgorCQlwaHlfcG93 ZXJfb24oZ2x1ZS0+cGh5KTsKKwkJZ2x1ZS0+cGh5X21vZGUgPSBQSFlfTU9ERV9VU0JfREVWSUNF OworCQlwaHlfc2V0X21vZGUoZ2x1ZS0+cGh5LCBnbHVlLT5waHlfbW9kZSk7CisJCU1VU0JfREVW X01PREUobXVzYik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZ2x1ZS0+ZGV2LCAi aW52YWxpZCBzdGF0ZVxuIik7CisJfQorfQorCitzdGF0aWMgaW50IG10a19tdXNiX2lkX25vdGlm aWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJdW5zaWduZWQgbG9uZyBldmVudCwg dm9pZCAqcHRyKQoreworCXN0cnVjdCBtdGtfZ2x1ZSAqZ2x1ZSA9IGNvbnRhaW5lcl9vZihuYiwg c3RydWN0IG10a19nbHVlLCBpZF9uYik7CisKKwlpZiAoZXZlbnQpCisJCW10a19tdXNiX3NldF9t YWlsYm94KGdsdWUsIE1US19JRF9HUk9VTkQpOworCWVsc2UKKwkJbXRrX211c2Jfc2V0X21haWxi b3goZ2x1ZSwgTVRLX0lEX0ZMT0FUKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3Rh dGljIGludCBtdGtfbXVzYl92YnVzX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIs CisJCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCit7CisJc3RydWN0IG10a19n bHVlICpnbHVlID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgbXRrX2dsdWUsIHZidXNfbmIpOwor CisJaWYgKGV2ZW50KQorCQltdGtfbXVzYl9zZXRfbWFpbGJveChnbHVlLCBNVEtfVkJVU19WQUxJ RCk7CisJZWxzZQorCQltdGtfbXVzYl9zZXRfbWFpbGJveChnbHVlLCBNVEtfVkJVU19PRkYpOwor CisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3RnX3N3aXRjaF9p bml0KHN0cnVjdCBtdGtfZ2x1ZSAqZ2x1ZSkKK3sKKwlpbnQgcmV0OworCisJLyogZXh0Y29uIGlz IG9wdGlvbmFsICovCisJaWYgKCFnbHVlLT5lZGV2KQorCQlyZXR1cm47CisKKwlnbHVlLT52YnVz X25iLm5vdGlmaWVyX2NhbGwgPSBtdGtfbXVzYl92YnVzX25vdGlmaWVyOworCXJldCA9IGRldm1f ZXh0Y29uX3JlZ2lzdGVyX25vdGlmaWVyKGdsdWUtPmRldiwgZ2x1ZS0+ZWRldiwgRVhUQ09OX1VT QiwKKwkJCQkJICAgICZnbHVlLT52YnVzX25iKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2Vycihn bHVlLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgbm90aWZpZXIgZm9yIFVTQlxuIik7CisKKwln bHVlLT5pZF9uYi5ub3RpZmllcl9jYWxsID0gbXRrX211c2JfaWRfbm90aWZpZXI7CisJcmV0ID0g ZGV2bV9leHRjb25fcmVnaXN0ZXJfbm90aWZpZXIoZ2x1ZS0+ZGV2LCBnbHVlLT5lZGV2LAorCQkJ CQkgICAgRVhUQ09OX1VTQl9IT1NULCAmZ2x1ZS0+aWRfbmIpOworCWlmIChyZXQgPCAwKQorCQlk ZXZfZXJyKGdsdWUtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBub3RpZmllciBmb3IgVVNCLUhP U1RcbiIpOworCisJZGV2X2RiZyhnbHVlLT5kZXYsICJFWFRDT05fVVNCOiAlZCwgRVhUQ09OX1VT Ql9IT1NUOiAlZFxuIiwKKwkJZXh0Y29uX2dldF9zdGF0ZShnbHVlLT5lZGV2LCBFWFRDT05fVVNC KSwKKwkJZXh0Y29uX2dldF9zdGF0ZShnbHVlLT5lZGV2LCBFWFRDT05fVVNCX0hPU1QpKTsKKwor CS8qIGRlZmF1bHQgYXMgaG9zdCwgc3dpdGNoIHRvIGRldmljZSBtb2RlIGlmIG5lZWRlZCAqLwor CWlmIChleHRjb25fZ2V0X3N0YXRlKGdsdWUtPmVkZXYsIEVYVENPTl9VU0JfSE9TVCkgPT0gZmFs c2UpCisJCW10a19tdXNiX3NldF9tYWlsYm94KGdsdWUsIE1US19JRF9GTE9BVCk7CisJaWYgKGV4 dGNvbl9nZXRfc3RhdGUoZ2x1ZS0+ZWRldiwgRVhUQ09OX1VTQikgPT0gdHJ1ZSkKKwkJbXRrX211 c2Jfc2V0X21haWxib3goZ2x1ZSwgTVRLX1ZCVVNfVkFMSUQpOworfQorCitzdGF0aWMgaXJxcmV0 dXJuX3QgZ2VuZXJpY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqX19oY2kpCit7CisJdW5zaWdu ZWQgbG9uZyBmbGFnczsKKwlpcnFyZXR1cm5fdCByZXR2YWwgPSBJUlFfTk9ORTsKKwlzdHJ1Y3Qg bXVzYiAqbXVzYiA9IF9faGNpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm11c2ItPmxvY2ssIGZs YWdzKTsKKwltdXNiLT5pbnRfdXNiID0gbXVzYl9yZWFkYihtdXNiLT5tcmVncywgTVVTQl9JTlRS VVNCKSAmCisJICAgIG11c2JfcmVhZGIobXVzYi0+bXJlZ3MsIE1VU0JfSU5UUlVTQkUpOworCW11 c2ItPmludF90eCA9IG11c2JfcmVhZHcobXVzYi0+bXJlZ3MsIE1VU0JfSU5UUlRYKQorCSAgICAm IG11c2JfcmVhZHcobXVzYi0+bXJlZ3MsIE1VU0JfSU5UUlRYRSk7CisJbXVzYi0+aW50X3J4ID0g bXVzYl9yZWFkdyhtdXNiLT5tcmVncywgTVVTQl9JTlRSUlgpCisJICAgICYgbXVzYl9yZWFkdyht dXNiLT5tcmVncywgTVVTQl9JTlRSUlhFKTsKKwkvKiBNZWRpYVRlayBjb250cm9sbGVyIGludGVy cnVwdCBzdGF0dXMgaXMgVzFDICovCisJbXVzYl9jbGVhcncobXVzYi0+bXJlZ3MsIE1VU0JfSU5U UlJYKTsKKwltdXNiX2NsZWFydyhtdXNiLT5tcmVncywgTVVTQl9JTlRSVFgpOworCW11c2JfY2xl YXJiKG11c2ItPm1yZWdzLCBNVVNCX0lOVFJVU0IpOworCisJaWYgKG11c2ItPmludF91c2IgfHwg bXVzYi0+aW50X3R4IHx8IG11c2ItPmludF9yeCkKKwkJcmV0dmFsID0gbXVzYl9pbnRlcnJ1cHQo bXVzYik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXNiLT5sb2NrLCBmbGFncyk7CisK KwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX211c2JfaW50ZXJy dXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpcnFyZXR1cm5fdCByZXR2YWwgPSBJUlFf Tk9ORTsKKwlzdHJ1Y3QgbXVzYiAqbXVzYiA9IChzdHJ1Y3QgbXVzYiAqKWRldl9pZDsKKwl1MzIg bDFfaW50czsKKworCWwxX2ludHMgPSBtdXNiX3JlYWRsKG11c2ItPm1yZWdzLCBVU0JfTDFJTlRT KSAmCisJCQltdXNiX3JlYWRsKG11c2ItPm1yZWdzLCBVU0JfTDFJTlRNKTsKKworCWlmIChsMV9p bnRzICYgKFRYX0lOVF9TVEFUVVMgfCBSWF9JTlRfU1RBVFVTIHwgVVNCQ09NX0lOVF9TVEFUVVMp KQorCQlyZXR2YWwgPSBnZW5lcmljX2ludGVycnVwdChpcnEsIG11c2IpOworCisjaWYgZGVmaW5l ZChDT05GSUdfVVNCX0lOVkVOVFJBX0RNQSkKKwlpZiAobDFfaW50cyAmIERNQV9JTlRfU1RBVFVT KQorCQlyZXR2YWwgPSBkbWFfY29udHJvbGxlcl9pcnEoaXJxLCBtdXNiLT5kbWFfY29udHJvbGxl cik7CisjZW5kaWYKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdTMyIG10a19tdXNiX2J1 c2N0bF9vZmZzZXQodTggZXBudW0sIHUxNiBvZmZzZXQpCit7CisJcmV0dXJuIE1US19NVVNCX1RY RlVOQ0FERFIgKyBvZmZzZXQgKyA4ICogZXBudW07Cit9CisKK3N0YXRpYyB1OCBtdGtfbXVzYl9j bGVhcmIodm9pZCBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXU4IGRh dGE7CisKKwkvKiBXMUMgKi8KKwlkYXRhID0gbXVzYl9yZWFkYihhZGRyLCBvZmZzZXQpOworCW11 c2Jfd3JpdGViKGFkZHIsIG9mZnNldCwgZGF0YSk7CisJcmV0dXJuIG11c2JfcmVhZGIoYWRkciwg b2Zmc2V0KTsKK30KKworc3RhdGljIHUxNiBtdGtfbXVzYl9jbGVhcncodm9pZCBfX2lvbWVtICph ZGRyLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXUxNiBkYXRhOworCisJLyogVzFDICovCisJ ZGF0YSA9IG11c2JfcmVhZHcoYWRkciwgb2Zmc2V0KTsKKwltdXNiX3dyaXRldyhhZGRyLCBvZmZz ZXQsIGRhdGEpOworCXJldHVybiBtdXNiX3JlYWR3KGFkZHIsIG9mZnNldCk7Cit9CisKK3N0YXRp YyBpbnQgbXRrX211c2JfaW5pdChzdHJ1Y3QgbXVzYiAqbXVzYikKK3sKKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSBtdXNiLT5jb250cm9sbGVyOworCXN0cnVjdCBtdGtfZ2x1ZSAqZ2x1ZSA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYtPnBhcmVudCk7CisJaW50IHJldDsKKworCWdsdWUtPm11c2IgPSBtdXNi OworCW11c2ItPnBoeSA9IGdsdWUtPnBoeTsKKwltdXNiLT54Y2VpdiA9IGdsdWUtPnhjZWl2Owor CW11c2ItPmlzX2hvc3QgPSBmYWxzZTsKKwltdXNiLT5pc3IgPSBtdGtfbXVzYl9pbnRlcnJ1cHQ7 CisJcmV0ID0gcGh5X2luaXQoZ2x1ZS0+cGh5KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJcmV0ID0gcGh5X3Bvd2VyX29uKGdsdWUtPnBoeSk7CisJaWYgKHJldCkgeworCQlwaHlfZXhp dChnbHVlLT5waHkpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBoeV9zZXRfbW9kZShnbHVlLT5w aHksIGdsdWUtPnBoeV9tb2RlKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9JTlZFTlRSQV9E TUEpCisJbXVzYl93cml0ZWwobXVzYi0+bXJlZ3MsIE1VU0JfSFNETUFfSU5UUiwKKwkJICAgIERN QV9JTlRSX1NUQVRVU19NU0sgfCBETUFfSU5UUl9VTk1BU0tfU0VUX01TSyk7CisjZW5kaWYKKwlt dXNiX3dyaXRlbChtdXNiLT5tcmVncywgVVNCX0wxSU5UTSwgVFhfSU5UX1NUQVRVUyB8IFJYX0lO VF9TVEFUVVMgfAorCQkgICAgVVNCQ09NX0lOVF9TVEFUVVMgfCBETUFfSU5UX1NUQVRVUyk7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MTYgbXRrX211c2JfZ2V0X3RvZ2dsZShzdHJ1Y3QgbXVz Yl9xaCAqcWgsIGludCBpc19vdXQpCit7CisJc3RydWN0IG11c2IgKm11c2IgPSBxaC0+aHdfZXAt Pm11c2I7CisJdTggZXBudW0gPSBxaC0+aHdfZXAtPmVwbnVtOworCXUxNiB0b2dnbGU7CisKKwlp ZiAoaXNfb3V0KQorCQl0b2dnbGUgPSBtdXNiX3JlYWR3KG11c2ItPm1yZWdzLCBNVVNCX1RYVE9H KTsKKwllbHNlCisJCXRvZ2dsZSA9IG11c2JfcmVhZHcobXVzYi0+bXJlZ3MsIE1VU0JfUlhUT0cp OworCisJcmV0dXJuIHRvZ2dsZSAmICgxIDw8IGVwbnVtKTsKK30KKworc3RhdGljIHUxNiBtdGtf bXVzYl9zZXRfdG9nZ2xlKHN0cnVjdCBtdXNiX3FoICpxaCwgaW50IGlzX291dCwgc3RydWN0IHVy YiAqdXJiKQoreworCXN0cnVjdCBtdXNiICptdXNiID0gcWgtPmh3X2VwLT5tdXNiOworCXU4IGVw bnVtID0gcWgtPmh3X2VwLT5lcG51bTsKKwl1MTYgdG9nZ2xlOworCisJdG9nZ2xlID0gdXNiX2dl dHRvZ2dsZSh1cmItPmRldiwgcWgtPmVwbnVtLCBpc19vdXQpOworCisJaWYgKGlzX291dCkgewor CQltdXNiX3dyaXRldyhtdXNiLT5tcmVncywgTVVTQl9UWFRPR0VOLCAoMSA8PCBlcG51bSkpOwor CQltdXNiX3dyaXRldyhtdXNiLT5tcmVncywgTVVTQl9UWFRPRywgKHRvZ2dsZSA8PCBlcG51bSkp OworCX0gZWxzZSB7CisJCW11c2Jfd3JpdGV3KG11c2ItPm1yZWdzLCBNVVNCX1JYVE9HRU4sICgx IDw8IGVwbnVtKSk7CisJCW11c2Jfd3JpdGV3KG11c2ItPm1yZWdzLCBNVVNCX1JYVE9HLCAodG9n Z2xlIDw8IGVwbnVtKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX211 c2Jfc2V0X21vZGUoc3RydWN0IG11c2IgKm11c2IsIHU4IG1vZGUpCit7CisJc3RydWN0IGRldmlj ZSAqZGV2ID0gbXVzYi0+Y29udHJvbGxlcjsKKwlzdHJ1Y3QgbXRrX2dsdWUgKmdsdWUgPSBkZXZf Z2V0X2RydmRhdGEoZGV2LT5wYXJlbnQpOworCWVudW0gcGh5X21vZGUgbmV3X21vZGU7CisKKwlz d2l0Y2ggKG1vZGUpIHsKKwljYXNlIE1VU0JfSE9TVDoKKwkJbmV3X21vZGUgPSBQSFlfTU9ERV9V U0JfSE9TVDsKKwkJbXRrX211c2Jfc2V0X3ZidXMobXVzYiwgMSk7CisJCWJyZWFrOworCWNhc2Ug TVVTQl9QRVJJUEhFUkFMOgorCQluZXdfbW9kZSA9IFBIWV9NT0RFX1VTQl9ERVZJQ0U7CisJCWJy ZWFrOworCWNhc2UgTVVTQl9PVEc6CisJCW5ld19tb2RlID0gUEhZX01PREVfVVNCX0hPU1Q7CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIobXVzYi0+Y29udHJvbGxlci0+cGFyZW50LAor CQkJIkVycm9yIHJlcXVlc3RlZCBtb2RlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBrZXJuZWxcbiIp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGdsdWUtPnBoeV9tb2RlID09IG5ld19tb2Rl KQorCQlyZXR1cm4gMDsKKworCW10a19tdXNiX3NldF9tYWlsYm94KGdsdWUsIE1US19JRF9HUk9V TkQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19tdXNiX2V4aXQoc3RydWN0IG11 c2IgKm11c2IpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gbXVzYi0+Y29udHJvbGxlcjsKKwlz dHJ1Y3QgbXRrX2dsdWUgKmdsdWUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQpOworCisJ cGh5X3Bvd2VyX29mZihnbHVlLT5waHkpOworCXBoeV9leGl0KGdsdWUtPnBoeSk7CisJbXRrX211 c2JfY2xrc19kaXNhYmxlKGdsdWUpOworCisJcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOworCXBt X3J1bnRpbWVfZGlzYWJsZShkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IG11c2JfcGxhdGZvcm1fb3BzIG10a19tdXNiX29wcyA9IHsKKwkucXVpcmtzID0gTVVTQl9E TUFfSU5WRU5UUkEsCisJLmluaXQgPSBtdGtfbXVzYl9pbml0LAorCS5nZXRfdG9nZ2xlID0gbXRr X211c2JfZ2V0X3RvZ2dsZSwKKwkuc2V0X3RvZ2dsZSA9IG10a19tdXNiX3NldF90b2dnbGUsCisJ LmV4aXQgPSBtdGtfbXVzYl9leGl0LAorI2lmZGVmIENPTkZJR19VU0JfSU5WRU5UUkFfRE1BCisJ LmRtYV9pbml0ID0gbXVzYmhzX2RtYV9jb250cm9sbGVyX2NyZWF0ZV9ub2lycSwKKwkuZG1hX2V4 aXQgPSBtdXNiaHNfZG1hX2NvbnRyb2xsZXJfZGVzdHJveSwKKyNlbmRpZgorCS5jbGVhcmIgPSBt dGtfbXVzYl9jbGVhcmIsCisJLmNsZWFydyA9IG10a19tdXNiX2NsZWFydywKKwkuYnVzY3RsX29m ZnNldCA9IG10a19tdXNiX2J1c2N0bF9vZmZzZXQsCisJLnNldF9tb2RlID0gbXRrX211c2Jfc2V0 X21vZGUsCisJLnNldF92YnVzID0gbXRrX211c2Jfc2V0X3ZidXMsCit9OworCisjZGVmaW5lIE1U S19NVVNCX01BWF9FUF9OVU0JOAorI2RlZmluZSBNVEtfTVVTQl9SQU1fQklUUwkxMQorCitzdGF0 aWMgc3RydWN0IG11c2JfZmlmb19jZmcgbXRrX211c2JfbW9kZV9jZmdbXSA9IHsKKwl7IC5od19l cF9udW0gPSAxLCAuc3R5bGUgPSBGSUZPX1RYLCAubWF4cGFja2V0ID0gNTEyLCB9LAorCXsgLmh3 X2VwX251bSA9IDEsIC5zdHlsZSA9IEZJRk9fUlgsIC5tYXhwYWNrZXQgPSA1MTIsIH0sCisJeyAu aHdfZXBfbnVtID0gMiwgLnN0eWxlID0gRklGT19UWCwgLm1heHBhY2tldCA9IDUxMiwgfSwKKwl7 IC5od19lcF9udW0gPSAyLCAuc3R5bGUgPSBGSUZPX1JYLCAubWF4cGFja2V0ID0gNTEyLCB9LAor CXsgLmh3X2VwX251bSA9IDMsIC5zdHlsZSA9IEZJRk9fVFgsIC5tYXhwYWNrZXQgPSA1MTIsIH0s CisJeyAuaHdfZXBfbnVtID0gMywgLnN0eWxlID0gRklGT19SWCwgLm1heHBhY2tldCA9IDUxMiwg fSwKKwl7IC5od19lcF9udW0gPSA0LCAuc3R5bGUgPSBGSUZPX1RYLCAubWF4cGFja2V0ID0gNTEy LCB9LAorCXsgLmh3X2VwX251bSA9IDQsIC5zdHlsZSA9IEZJRk9fUlgsIC5tYXhwYWNrZXQgPSA1 MTIsIH0sCisJeyAuaHdfZXBfbnVtID0gNSwgLnN0eWxlID0gRklGT19UWCwgLm1heHBhY2tldCA9 IDUxMiwgfSwKKwl7IC5od19lcF9udW0gPSA1LCAuc3R5bGUgPSBGSUZPX1JYLCAubWF4cGFja2V0 ID0gNTEyLCB9LAorCXsgLmh3X2VwX251bSA9IDYsIC5zdHlsZSA9IEZJRk9fVFgsIC5tYXhwYWNr ZXQgPSAxMDI0LCB9LAorCXsgLmh3X2VwX251bSA9IDYsIC5zdHlsZSA9IEZJRk9fUlgsIC5tYXhw YWNrZXQgPSAxMDI0LCB9LAorCXsgLmh3X2VwX251bSA9IDcsIC5zdHlsZSA9IEZJRk9fVFgsIC5t YXhwYWNrZXQgPSA1MTIsIH0sCisJeyAuaHdfZXBfbnVtID0gNywgLnN0eWxlID0gRklGT19SWCwg Lm1heHBhY2tldCA9IDY0LCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdXNiX2hkcmNf Y29uZmlnIG10a19tdXNiX2hkcmNfY29uZmlnID0geworCS5maWZvX2NmZyA9IG10a19tdXNiX21v ZGVfY2ZnLAorCS5maWZvX2NmZ19zaXplID0gQVJSQVlfU0laRShtdGtfbXVzYl9tb2RlX2NmZyks CisJLm11bHRpcG9pbnQgPSB0cnVlLAorCS5keW5fZmlmbyA9IHRydWUsCisJLm51bV9lcHMgPSBN VEtfTVVTQl9NQVhfRVBfTlVNLAorCS5yYW1fYml0cyA9IE1US19NVVNCX1JBTV9CSVRTLAorfTsK Kworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBtdGtfZGV2X2luZm8g PSB7CisJLm5hbWUgPSAibXVzYi1oZHJjIiwKKwkuaWQgPSBQTEFURk9STV9ERVZJRF9BVVRPLAor CS5kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCit9OworCitzdGF0aWMgaW50IG10a19tdXNi X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG11c2JfaGRy Y19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgbXRrX2dsdWUgKmdsdWU7CisJc3RydWN0 IHBsYXRmb3JtX2RldmljZV9pbmZvIHBpbmZvOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2 LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwlpbnQgcmV0 ID0gLUVOT01FTTsKKworCWdsdWUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmdsdWUpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIWdsdWUpCisJCXJldHVybiAtRU5PTUVNOworCisJZ2x1ZS0+ZGV2 ID0gZGV2OworCXBkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwZGF0YSksIEdGUF9L RVJORUwpOworCWlmICghcGRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gbXRrX211 c2JfY2xrc19nZXQoZ2x1ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWdsdWUtPnZi dXMgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAidmJ1cyIpOworCWlmIChJU19FUlIoZ2x1ZS0+ dmJ1cykpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsIHRvIGdldCB2YnVzXG4iKTsKKwkJcmV0dXJu IFBUUl9FUlIoZ2x1ZS0+dmJ1cyk7CisJfQorCisJcGRhdGEtPmNvbmZpZyA9ICZtdGtfbXVzYl9o ZHJjX2NvbmZpZzsKKwlwZGF0YS0+cGxhdGZvcm1fb3BzID0gJm10a19tdXNiX29wczsKKwlpZiAo b2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAiZXh0Y29uIikpIHsKKwkJZ2x1ZS0+ZWRldiA9IGV4 dGNvbl9nZXRfZWRldl9ieV9waGFuZGxlKGRldiwgMCk7CisJCWlmIChJU19FUlIoZ2x1ZS0+ZWRl dikpIHsKKwkJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBnZXQgZXh0Y29uXG4iKTsKKwkJCXJldHVy biBQVFJfRVJSKGdsdWUtPmVkZXYpOworCQl9CisJfQorCisJcGRhdGEtPm1vZGUgPSB1c2JfZ2V0 X2RyX21vZGUoZGV2KTsKKwlzd2l0Y2ggKHBkYXRhLT5tb2RlKSB7CisJY2FzZSBVU0JfRFJfTU9E RV9IT1NUOgorCQlnbHVlLT5waHlfbW9kZSA9IFBIWV9NT0RFX1VTQl9IT1NUOworCQlicmVhazsK KwljYXNlIFVTQl9EUl9NT0RFX1BFUklQSEVSQUw6CisJCWdsdWUtPnBoeV9tb2RlID0gUEhZX01P REVfVVNCX0RFVklDRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGRhdGEtPm1vZGUgPSBVU0Jf RFJfTU9ERV9PVEc7CisJCS8qIEZBTEwgVEhST1VHSCAqLworCWNhc2UgVVNCX0RSX01PREVfT1RH OgorCQlnbHVlLT5waHlfbW9kZSA9IFBIWV9NT0RFX1VTQl9PVEc7CisJCWJyZWFrOworCX0KKwor CWdsdWUtPnBoeSA9IGRldm1fb2ZfcGh5X2dldF9ieV9pbmRleChkZXYsIG5wLCAwKTsKKwlpZiAo SVNfRVJSKGdsdWUtPnBoeSkpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsIHRvIGdldHRpbmcgcGh5 ICVsZFxuIiwKKwkJCVBUUl9FUlIoZ2x1ZS0+cGh5KSk7CisJCXJldHVybiBQVFJfRVJSKGdsdWUt PnBoeSk7CisJfQorCisJZ2x1ZS0+dXNiX3BoeSA9IHVzYl9waHlfZ2VuZXJpY19yZWdpc3Rlcigp OworCWlmIChJU19FUlIoZ2x1ZS0+dXNiX3BoeSkpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsIHRv IHJlZ2lzdGVyaW5nIHVzYi1waHkgJWxkXG4iLAorCQkJUFRSX0VSUihnbHVlLT51c2JfcGh5KSk7 CisJCXJldHVybiBQVFJfRVJSKGdsdWUtPnVzYl9waHkpOworCX0KKworCWdsdWUtPnhjZWl2ID0g ZGV2bV91c2JfZ2V0X3BoeShkZXYsIFVTQl9QSFlfVFlQRV9VU0IyKTsKKwlpZiAoSVNfRVJSKGds dWUtPnhjZWl2KSkgeworCQlkZXZfZXJyKGRldiwgImZhaWwgdG8gZ2V0dGluZyB1c2ItcGh5ICVk XG4iLCByZXQpOworCQlyZXQgPSBQVFJfRVJSKGdsdWUtPnhjZWl2KTsKKwkJZ290byBlcnJfdW5y ZWdpc3Rlcl91c2JfcGh5OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGdsdWUp OworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisJcG1fcnVudGltZV9nZXRfc3luYyhkZXYpOwor CisJcmV0ID0gbXRrX211c2JfY2xrc19lbmFibGUoZ2x1ZSk7CisJaWYgKHJldCkKKwkJZ290byBl cnJfZW5hYmxlX2NsazsKKworCXBpbmZvID0gbXRrX2Rldl9pbmZvOworCXBpbmZvLnBhcmVudCA9 IGRldjsKKwlwaW5mby5yZXMgPSBwZGV2LT5yZXNvdXJjZTsKKwlwaW5mby5udW1fcmVzID0gcGRl di0+bnVtX3Jlc291cmNlczsKKwlwaW5mby5kYXRhID0gcGRhdGE7CisJcGluZm8uc2l6ZV9kYXRh ID0gc2l6ZW9mKCpwZGF0YSk7CisKKwlnbHVlLT5tdXNiX3BkZXYgPSBwbGF0Zm9ybV9kZXZpY2Vf cmVnaXN0ZXJfZnVsbCgmcGluZm8pOworCWlmIChJU19FUlIoZ2x1ZS0+bXVzYl9wZGV2KSkgewor CQlyZXQgPSBQVFJfRVJSKGdsdWUtPm11c2JfcGRldik7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIHJlZ2lzdGVyIG11c2IgZGV2aWNlOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZGV2aWNl X3JlZ2lzdGVyOworCX0KKworCWlmIChwZGF0YS0+bW9kZSA9PSBVU0JfRFJfTU9ERV9PVEcpCisJ CW10a19vdGdfc3dpdGNoX2luaXQoZ2x1ZSk7CisKKwlyZXR1cm4gMDsKKworZXJyX2RldmljZV9y ZWdpc3RlcjoKKwltdGtfbXVzYl9jbGtzX2Rpc2FibGUoZ2x1ZSk7CitlcnJfZW5hYmxlX2NsazoK KwlwbV9ydW50aW1lX3B1dF9zeW5jKGRldik7CisJcG1fcnVudGltZV9kaXNhYmxlKGRldik7Citl cnJfdW5yZWdpc3Rlcl91c2JfcGh5OgorCXVzYl9waHlfZ2VuZXJpY191bnJlZ2lzdGVyKGdsdWUt PnVzYl9waHkpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX211c2JfcmVtb3Zl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19nbHVlICpnbHVl ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAq dXNiX3BoeSA9IGdsdWUtPnVzYl9waHk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihn bHVlLT5tdXNiX3BkZXYpOworCXVzYl9waHlfZ2VuZXJpY191bnJlZ2lzdGVyKHVzYl9waHkpOwor CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIG10a19tdXNiX21hdGNoW10gPSB7CisJey5jb21wYXRpYmxlID0gIm1lZGlh dGVrLG10ay1tdXNiIix9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10a19t dXNiX21hdGNoKTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtf bXVzYl9kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX211c2JfcHJvYmUsCisJLnJlbW92ZSA9IG10 a19tdXNiX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJtdXNiLW10ayIsCisJ CSAgIC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihtdGtfbXVzYl9tYXRjaCksCisJfSwK K307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobXRrX211c2JfZHJpdmVyKTsKKworTU9EVUxF X0RFU0NSSVBUSU9OKCJNZWRpYVRlayBNVVNCIEdsdWUgTGF5ZXIiKTsKK01PRFVMRV9BVVRIT1Io Ik1pbiBHdW8gPG1pbi5ndW9AbWVkaWF0ZWsuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2 MiIpOwo=