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: [4/4] usb: musb: Add support for MediaTek musb controller From: min.guo@mediatek.com Message-Id: <1545896066-897-5-git-send-email-min.guo@mediatek.com> Date: Thu, 27 Dec 2018 15:34:26 +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, Min Guo , Yonglong Wu List-ID: RnJvbTogTWluIEd1byA8bWluLmd1b0BtZWRpYXRlay5jb20+CgpUaGlzIGFkZHMgc3VwcG9ydCBm b3IgTWVkaWFUZWsgbXVzYiBjb250cm9sbGVyIGluCmhvc3QsIHBlcmlwaGVyYWwgYW5kIG90ZyBt b2RlCgpTaWduZWQtb2ZmLWJ5OiBNaW4gR3VvIDxtaW4uZ3VvQG1lZGlhdGVrLmNvbT4KU2lnbmVk LW9mZi1ieTogWW9uZ2xvbmcgV3UgPHlvbmdsb25nLnd1QG1lZGlhdGVrLmNvbT4KLS0tCiBkcml2 ZXJzL3VzYi9tdXNiL0tjb25maWcgICAgIHwgICA4ICstCiBkcml2ZXJzL3VzYi9tdXNiL01ha2Vm aWxlICAgIHwgICAxICsKIGRyaXZlcnMvdXNiL211c2IvbWVkaWF0ZWsuYyAgfCA1NjIgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy91c2IvbXVzYi9t dXNiX2NvcmUuYyB8ICAxMCArCiBkcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oIHwgICAxICsK IGRyaXZlcnMvdXNiL211c2IvbXVzYl9kbWEuaCAgfCAgIDEgKwogZHJpdmVycy91c2IvbXVzYi9t dXNiX2hvc3QuYyB8ICA3OSArKysrLS0KIGRyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmggfCAg IDYgKwogZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYyB8ICAzNCArKy0KIDkgZmlsZXMgY2hh bmdlZCwgNjcxIGluc2VydGlvbnMoKyksIDMxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvdXNiL211c2IvbWVkaWF0ZWsuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNi L211c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwppbmRleCBhZDA4ODk1Li41 NDBmYzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKKysrIGIvZHJpdmVy cy91c2IvbXVzYi9LY29uZmlnCkBAIC0xMTUsNiArMTE1LDEyIEBAIGNvbmZpZyBVU0JfTVVTQl9K WjQ3NDAKIAlkZXBlbmRzIG9uIFVTQl9NVVNCX0dBREdFVAogCWRlcGVuZHMgb24gVVNCX09UR19C TEFDS0xJU1RfSFVCCiAKK2NvbmZpZyBVU0JfTVVTQl9NRURJQVRFSworCXRyaXN0YXRlICJNZWRp YVRlayBwbGF0Zm9ybXMiCisJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLCisJZGVwZW5kcyBvbiBO T1BfVVNCX1hDRUlWCisJZGVwZW5kcyBvbiBHRU5FUklDX1BIWQorCiBjb25maWcgVVNCX01VU0Jf QU0zMzVYX0NISUxECiAJdHJpc3RhdGUKIApAQCAtMTQxLDcgKzE0Nyw3IEBAIGNvbmZpZyBVU0Jf VVg1MDBfRE1BCiAKIGNvbmZpZyBVU0JfSU5WRU5UUkFfRE1BCiAJYm9vbCAnSW52ZW50cmEnCi0J ZGVwZW5kcyBvbiBVU0JfTVVTQl9PTUFQMlBMVVMKKwlkZXBlbmRzIG9uIFVTQl9NVVNCX09NQVAy UExVUyB8fCBVU0JfTVVTQl9NRURJQVRFSwogCWhlbHAKIAkgIEVuYWJsZSBETUEgdHJhbnNmZXJz IHVzaW5nIE1lbnRvcidzIGVuZ2luZS4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9N YWtlZmlsZSBiL2RyaXZlcnMvdXNiL211c2IvTWFrZWZpbGUKaW5kZXggM2E4OGM3OS4uNjNkODJk MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Vz Yi9tdXNiL01ha2VmaWxlCkBAIC0yNCw2ICsyNCw3IEBAIG9iai0kKENPTkZJR19VU0JfTVVTQl9E QThYWCkJCQkrPSBkYTh4eC5vCiBvYmotJChDT05GSUdfVVNCX01VU0JfVVg1MDApCQkJKz0gdXg1 MDAubwogb2JqLSQoQ09ORklHX1VTQl9NVVNCX0paNDc0MCkJCQkrPSBqejQ3NDAubwogb2JqLSQo Q09ORklHX1VTQl9NVVNCX1NVTlhJKQkJCSs9IHN1bnhpLm8KK29iai0kKENPTkZJR19VU0JfTVVT Ql9NRURJQVRFSykgICAgICAJCSs9IG1lZGlhdGVrLm8KIAogCiBvYmotJChDT05GSUdfVVNCX01V U0JfQU0zMzVYX0NISUxEKQkJKz0gbXVzYl9hbTMzNXgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91 c2IvbXVzYi9tZWRpYXRlay5jIGIvZHJpdmVycy91c2IvbXVzYi9tZWRpYXRlay5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YTY0NjAKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL3VzYi9tdXNiL21lZGlhdGVrLmMKQEAgLTAsMCArMSw1NjIgQEAKKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IE1lZGlh VGVrIEluYy4KKyAqCisgKiBBdXRob3I6CisgKiAgTWluIEd1byA8bWluLmd1b0BtZWRpYXRlay5j b20+CisgKiAgWW9uZ2xvbmcgV3UgPHlvbmdsb25nLnd1QG1lZGlhdGVrLmNvbT4KKyAqLworCisj aW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu aD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdXNiX3BoeV9nZW5lcmljLmg+CisjaW5jbHVkZSAibXVz Yl9jb3JlLmgiCisjaW5jbHVkZSAibXVzYl9kbWEuaCIKKworI2RlZmluZSBVU0JfTDFJTlRTCTB4 MDBhMAorI2RlZmluZSBVU0JfTDFJTlRNCTB4MDBhNAorI2RlZmluZSBNVEtfTVVTQl9UWEZVTkNB RERSCTB4MDQ4MAorCisjZGVmaW5lIFRYX0lOVF9TVEFUVVMJCUJJVCgwKQorI2RlZmluZSBSWF9J TlRfU1RBVFVTCQlCSVQoMSkKKyNkZWZpbmUgVVNCQ09NX0lOVF9TVEFUVVMJQklUKDIpCisjZGVm aW5lIERNQV9JTlRfU1RBVFVTCQlCSVQoMykKKworI2RlZmluZSBETUFfSU5UUl9TVEFUVVNfTVNL CQlHRU5NQVNLKDcsIDApCisjZGVmaW5lIERNQV9JTlRSX1VOTUFTS19TRVRfTVNLCUdFTk1BU0so MzEsIDI0KQorCitlbnVtIG10a192YnVzX2lkX3N0YXRlIHsKKwlNVEtfSURfRkxPQVQgPSAxLAor CU1US19JRF9HUk9VTkQsCisJTVRLX1ZCVVNfT0ZGLAorCU1US19WQlVTX1ZBTElELAorfTsKKwor c3RydWN0IG10a19nbHVlIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG11c2IgKm11 c2I7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXVzYl9wZGV2OworCXN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnVzYl9waHk7CisJc3RydWN0IHBoeSAqcGh5OworCXN0cnVjdCB1c2JfcGh5ICp4 Y2VpdjsKKwllbnVtIHBoeV9tb2RlIHBoeV9tb2RlOworCXN0cnVjdCBjbGsgKm1haW47CisJc3Ry dWN0IGNsayAqbWN1OworCXN0cnVjdCBjbGsgKnVuaXZwbGw7CisJc3RydWN0IHJlZ3VsYXRvciAq dmJ1czsKKwlzdHJ1Y3QgZXh0Y29uX2RldiAqZWRldjsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sg dmJ1c19uYjsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaWRfbmI7Cit9OworCitzdGF0aWMgaW50 IG10a19tdXNiX2Nsa3NfZ2V0KHN0cnVjdCBtdGtfZ2x1ZSAqZ2x1ZSkKK3sKKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSBnbHVlLT5kZXY7CisKKwlnbHVlLT5tYWluID0gZGV2bV9jbGtfZ2V0KGRldiwg Im1haW4iKTsKKwlpZiAoSVNfRVJSKGdsdWUtPm1haW4pKSB7CisJCWRldl9lcnIoZGV2LCAiZmFp bCB0byBnZXQgbWFpbiBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKGdsdWUtPm1haW4pOwor CX0KKworCWdsdWUtPm1jdSA9IGRldm1fY2xrX2dldChkZXYsICJtY3UiKTsKKwlpZiAoSVNfRVJS KGdsdWUtPm1jdSkpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsIHRvIGdldCBtY3UgY2xvY2tcbiIp OworCQlyZXR1cm4gUFRSX0VSUihnbHVlLT5tY3UpOworCX0KKworCWdsdWUtPnVuaXZwbGwgPSBk ZXZtX2Nsa19nZXQoZGV2LCAidW5pdnBsbCIpOworCWlmIChJU19FUlIoZ2x1ZS0+dW5pdnBsbCkp IHsKKwkJZGV2X2VycihkZXYsICJmYWlsIHRvIGdldCB1bml2cGxsIGNsb2NrXG4iKTsKKwkJcmV0 dXJuIFBUUl9FUlIoZ2x1ZS0+dW5pdnBsbCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgbXRrX211c2JfY2xrc19lbmFibGUoc3RydWN0IG10a19nbHVlICpnbHVlKQoreworCWlu dCByZXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZ2x1ZS0+bWFpbik7CisJaWYgKHJl dCkgeworCQlkZXZfZXJyKGdsdWUtPmRldiwgImZhaWxlZCB0byBlbmFibGUgbWFpbiBjbG9ja1xu Iik7CisJCWdvdG8gZXJyX21haW5fY2xrOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJs ZShnbHVlLT5tY3UpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihnbHVlLT5kZXYsICJmYWlsZWQg dG8gZW5hYmxlIG1jdSBjbG9ja1xuIik7CisJCWdvdG8gZXJyX21jdV9jbGs7CisJfQorCisJcmV0 ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGdsdWUtPnVuaXZwbGwpOworCWlmIChyZXQpIHsKKwkJZGV2 X2VycihnbHVlLT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIHVuaXZwbGwgY2xvY2tcbiIpOworCQln b3RvIGVycl91bml2cGxsX2NsazsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX3VuaXZwbGxfY2xr OgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShnbHVlLT5tY3UpOworZXJyX21jdV9jbGs6CisJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKGdsdWUtPm1haW4pOworZXJyX21haW5fY2xrOgorCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19tdXNiX2Nsa3NfZGlzYWJsZShzdHJ1Y3QgbXRrX2ds dWUgKmdsdWUpCit7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGdsdWUtPnVuaXZwbGwpOworCWNs a19kaXNhYmxlX3VucHJlcGFyZShnbHVlLT5tY3UpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShn bHVlLT5tYWluKTsKK30KKworc3RhdGljIHZvaWQgbXRrX211c2Jfc2V0X3ZidXMoc3RydWN0IG11 c2IgKm11c2IsIGludCBpc19vbikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBtdXNiLT5jb250 cm9sbGVyOworCXN0cnVjdCBtdGtfZ2x1ZSAqZ2x1ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYtPnBh cmVudCk7CisJaW50IHJldDsKKworCS8qIHZidXMgaXMgb3B0aW9uYWwgKi8KKwlpZiAoIWdsdWUt PnZidXMpCisJCXJldHVybjsKKworCWRldl9kYmcobXVzYi0+Y29udHJvbGxlciwgIiVzLCBpc19v bj0lZFxyXG4iLCBfX2Z1bmNfXywgaXNfb24pOworCWlmIChpc19vbikgeworCQlyZXQgPSByZWd1 bGF0b3JfZW5hYmxlKGdsdWUtPnZidXMpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGdsdWUt PmRldiwgImZhaWwgdG8gZW5hYmxlIHZidXMgcmVndWxhdG9yXG4iKTsKKwkJCXJldHVybjsKKwkJ fQorCX0gZWxzZSB7CisJCXJlZ3VsYXRvcl9kaXNhYmxlKGdsdWUtPnZidXMpOworCX0KK30KKwor LyoKKyAqIHN3aXRjaCB0byBob3N0OiAtPiBNVEtfVkJVU19PRkYgLS0+IE1US19JRF9HUk9VTkQK KyAqIHN3aXRjaCB0byBkZXZpY2U6IC0+IE1US19JRF9GTE9BVCAtLT4gTVRLX1ZCVVNfVkFMSUQK KyAqLworc3RhdGljIHZvaWQgbXRrX211c2Jfc2V0X21haWxib3goc3RydWN0IG10a19nbHVlICpn bHVlLAorCWVudW0gbXRrX3ZidXNfaWRfc3RhdGUgc3RhdHVzKQoreworCXN0cnVjdCBtdXNiICpt dXNiID0gZ2x1ZS0+bXVzYjsKKwl1OCBkZXZjdGwgPSAwOworCisJZGV2X2RiZyhnbHVlLT5kZXYs ICJtYWlsYm94IHN0YXRlKCVkKVxuIiwgc3RhdHVzKTsKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNh c2UgTVRLX0lEX0dST1VORDoKKwkJcGh5X3Bvd2VyX29uKGdsdWUtPnBoeSk7CisJCWRldmN0bCA9 IHJlYWRiKG11c2ItPm1yZWdzICsgTVVTQl9ERVZDVEwpOworCQltdXNiLT54Y2Vpdi0+b3RnLT5z dGF0ZSA9IE9UR19TVEFURV9BX1dBSVRfVlJJU0U7CisJCW10a19tdXNiX3NldF92YnVzKG11c2Is IDEpOworCQlnbHVlLT5waHlfbW9kZSA9IFBIWV9NT0RFX1VTQl9IT1NUOworCQlwaHlfc2V0X21v ZGUoZ2x1ZS0+cGh5LCBnbHVlLT5waHlfbW9kZSk7CisJCWRldmN0bCB8PSBNVVNCX0RFVkNUTF9T RVNTSU9OOworCQltdXNiX3dyaXRlYihtdXNiLT5tcmVncywgTVVTQl9ERVZDVEwsIGRldmN0bCk7 CisJCU1VU0JfSFNUX01PREUobXVzYik7CisJCWJyZWFrOworCS8qCisJICogTVRLX0lEX0ZMT0FU IHByb2Nlc3MgaXMgdGhlIHNhbWUgYXMgTVRLX1ZCVVNfVkFMSUQKKwkgKiBleGNlcHQgdGhhdCB0 dXJuIG9mZiBWQlVTCisJICovCisJY2FzZSBNVEtfSURfRkxPQVQ6CisJCW10a19tdXNiX3NldF92 YnVzKG11c2IsIDApOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIE1US19WQlVTX09GRjoK KwkJbXVzYi0+eGNlaXYtPm90Zy0+c3RhdGUgPSBPVEdfU1RBVEVfQl9JRExFOworCQlkZXZjdGwg Jj0gfk1VU0JfREVWQ1RMX1NFU1NJT047CisJCW11c2Jfd3JpdGViKG11c2ItPm1yZWdzLCBNVVNC X0RFVkNUTCwgZGV2Y3RsKTsKKwkJcGh5X3Bvd2VyX29mZihnbHVlLT5waHkpOworCQlicmVhazsK KwljYXNlIE1US19WQlVTX1ZBTElEOgorCQlwaHlfcG93ZXJfb24oZ2x1ZS0+cGh5KTsKKwkJZ2x1 ZS0+cGh5X21vZGUgPSBQSFlfTU9ERV9VU0JfREVWSUNFOworCQlwaHlfc2V0X21vZGUoZ2x1ZS0+ cGh5LCBnbHVlLT5waHlfbW9kZSk7CisJCU1VU0JfREVWX01PREUobXVzYik7CisJCWJyZWFrOwor CWRlZmF1bHQ6CisJCWRldl9lcnIoZ2x1ZS0+ZGV2LCAiaW52YWxpZCBzdGF0ZVxuIik7CisJfQor fQorCitzdGF0aWMgaW50IG10a19tdXNiX2lkX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9j ayAqbmIsCisJdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBtdGtf Z2x1ZSAqZ2x1ZSA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IG10a19nbHVlLCBpZF9uYik7CisK KwlpZiAoZXZlbnQpCisJCW10a19tdXNiX3NldF9tYWlsYm94KGdsdWUsIE1US19JRF9HUk9VTkQp OworCWVsc2UKKwkJbXRrX211c2Jfc2V0X21haWxib3goZ2x1ZSwgTVRLX0lEX0ZMT0FUKTsKKwor CXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIGludCBtdGtfbXVzYl92YnVzX25vdGlm aWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJdW5zaWduZWQgbG9uZyBldmVudCwgdm9p ZCAqcHRyKQoreworCXN0cnVjdCBtdGtfZ2x1ZSAqZ2x1ZSA9IGNvbnRhaW5lcl9vZihuYiwgc3Ry dWN0IG10a19nbHVlLCB2YnVzX25iKTsKKworCWlmIChldmVudCkKKwkJbXRrX211c2Jfc2V0X21h aWxib3goZ2x1ZSwgTVRLX1ZCVVNfVkFMSUQpOworCWVsc2UKKwkJbXRrX211c2Jfc2V0X21haWxi b3goZ2x1ZSwgTVRLX1ZCVVNfT0ZGKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3Rh dGljIHZvaWQgbXRrX290Z19zd2l0Y2hfaW5pdChzdHJ1Y3QgbXRrX2dsdWUgKmdsdWUpCit7CisJ aW50IHJldDsKKworCS8qIGV4dGNvbiBpcyBvcHRpb25hbCAqLworCWlmICghZ2x1ZS0+ZWRldikK KwkJcmV0dXJuOworCisJZ2x1ZS0+dmJ1c19uYi5ub3RpZmllcl9jYWxsID0gbXRrX211c2JfdmJ1 c19ub3RpZmllcjsKKwlyZXQgPSBkZXZtX2V4dGNvbl9yZWdpc3Rlcl9ub3RpZmllcihnbHVlLT5k ZXYsIGdsdWUtPmVkZXYsIEVYVENPTl9VU0IsCisJCQkJCSZnbHVlLT52YnVzX25iKTsKKwlpZiAo cmV0IDwgMCkKKwkJZGV2X2VycihnbHVlLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgbm90aWZp ZXIgZm9yIFVTQlxuIik7CisKKwlnbHVlLT5pZF9uYi5ub3RpZmllcl9jYWxsID0gbXRrX211c2Jf aWRfbm90aWZpZXI7CisJcmV0ID0gZGV2bV9leHRjb25fcmVnaXN0ZXJfbm90aWZpZXIoZ2x1ZS0+ ZGV2LCBnbHVlLT5lZGV2LAorCQkJCQlFWFRDT05fVVNCX0hPU1QsICZnbHVlLT5pZF9uYik7CisJ aWYgKHJldCA8IDApCisJCWRldl9lcnIoZ2x1ZS0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIG5v dGlmaWVyIGZvciBVU0ItSE9TVFxuIik7CisKKwlkZXZfZGJnKGdsdWUtPmRldiwgIkVYVENPTl9V U0I6ICVkLCBFWFRDT05fVVNCX0hPU1Q6ICVkXG4iLAorCQlleHRjb25fZ2V0X3N0YXRlKGdsdWUt PmVkZXYsIEVYVENPTl9VU0IpLAorCQlleHRjb25fZ2V0X3N0YXRlKGdsdWUtPmVkZXYsIEVYVENP Tl9VU0JfSE9TVCkpOworCisJLyogZGVmYXVsdCBhcyBob3N0LCBzd2l0Y2ggdG8gZGV2aWNlIG1v ZGUgaWYgbmVlZGVkICovCisJaWYgKGV4dGNvbl9nZXRfc3RhdGUoZ2x1ZS0+ZWRldiwgRVhUQ09O X1VTQl9IT1NUKSA9PSBmYWxzZSkKKwkJbXRrX211c2Jfc2V0X21haWxib3goZ2x1ZSwgTVRLX0lE X0ZMT0FUKTsKKwlpZiAoZXh0Y29uX2dldF9zdGF0ZShnbHVlLT5lZGV2LCBFWFRDT05fVVNCKSA9 PSB0cnVlKQorCQltdGtfbXVzYl9zZXRfbWFpbGJveChnbHVlLCBNVEtfVkJVU19WQUxJRCk7Cit9 CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBnZW5lcmljX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpf X2hjaSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWlycXJldHVybl90IHJldHZhbCA9IElS UV9OT05FOworCXN0cnVjdCBtdXNiICptdXNiID0gX19oY2k7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmbXVzYi0+bG9jaywgZmxhZ3MpOworCW11c2ItPmludF91c2IgPSBtdXNiX3JlYWRiKG11c2It Pm1yZWdzLCBNVVNCX0lOVFJVU0IpICYKKwkgICAgbXVzYl9yZWFkYihtdXNiLT5tcmVncywgTVVT Ql9JTlRSVVNCRSk7CisJbXVzYi0+aW50X3R4ID0gbXVzYl9yZWFkdyhtdXNiLT5tcmVncywgTVVT Ql9JTlRSVFgpCisJICAgICYgbXVzYl9yZWFkdyhtdXNiLT5tcmVncywgTVVTQl9JTlRSVFhFKTsK KwltdXNiLT5pbnRfcnggPSBtdXNiX3JlYWR3KG11c2ItPm1yZWdzLCBNVVNCX0lOVFJSWCkKKwkg ICAgJiBtdXNiX3JlYWR3KG11c2ItPm1yZWdzLCBNVVNCX0lOVFJSWEUpOworCS8qIE1lZGlhVGVr IGNvbnRyb2xsZXIgaW50ZXJydXB0IHN0YXR1cyBpcyBXMUMgKi8KKwltdXNiX3dyaXRldyhtdXNi LT5tcmVncywgTVVTQl9JTlRSUlgsIG11c2ItPmludF9yeCk7CisJbXVzYl93cml0ZXcobXVzYi0+ bXJlZ3MsIE1VU0JfSU5UUlRYLCBtdXNiLT5pbnRfdHgpOworCW11c2Jfd3JpdGViKG11c2ItPm1y ZWdzLCBNVVNCX0lOVFJVU0IsIG11c2ItPmludF91c2IpOworCisJaWYgKG11c2ItPmludF91c2Ig fHwgbXVzYi0+aW50X3R4IHx8IG11c2ItPmludF9yeCkKKwkJcmV0dmFsID0gbXVzYl9pbnRlcnJ1 cHQobXVzYik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdXNiLT5sb2NrLCBmbGFncyk7 CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX211c2JfaW50 ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpcnFyZXR1cm5fdCByZXR2YWwgPSBJ UlFfTk9ORTsKKwlzdHJ1Y3QgbXVzYiAqbXVzYiA9IChzdHJ1Y3QgbXVzYiAqKWRldl9pZDsKKwl1 MzIgbDFfaW50czsKKworCWwxX2ludHMgPSBtdXNiX3JlYWRsKG11c2ItPm1yZWdzLCBVU0JfTDFJ TlRTKSAmCisJCQltdXNiX3JlYWRsKG11c2ItPm1yZWdzLCBVU0JfTDFJTlRNKTsKKworCWlmIChs MV9pbnRzICYgKFRYX0lOVF9TVEFUVVMgfCBSWF9JTlRfU1RBVFVTIHwgVVNCQ09NX0lOVF9TVEFU VVMpKQorCQlyZXR2YWwgPSBnZW5lcmljX2ludGVycnVwdChpcnEsIG11c2IpOworCisjaWYgZGVm aW5lZChDT05GSUdfVVNCX0lOVkVOVFJBX0RNQSkKKwlpZiAobDFfaW50cyAmIERNQV9JTlRfU1RB VFVTKQorCQlyZXR2YWwgPSBkbWFfY29udHJvbGxlcl9pcnEoaXJxLCBtdXNiLT5kbWFfY29udHJv bGxlcik7CisjZW5kaWYKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdTMyIG10a19tdXNi X2J1c2N0bF9vZmZzZXQodTggZXBudW0sIHUxNiBvZmZzZXQpCit7CisJcmV0dXJuIE1US19NVVNC X1RYRlVOQ0FERFIgKyBvZmZzZXQgKyA4ICogZXBudW07Cit9CisKK3N0YXRpYyBpbnQgbXRrX211 c2JfaW5pdChzdHJ1Y3QgbXVzYiAqbXVzYikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBtdXNi LT5jb250cm9sbGVyOworCXN0cnVjdCBtdGtfZ2x1ZSAqZ2x1ZSA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYtPnBhcmVudCk7CisJaW50IHJldDsKKworCWdsdWUtPm11c2IgPSBtdXNiOworCW11c2ItPnBo eSA9IGdsdWUtPnBoeTsKKwltdXNiLT54Y2VpdiA9IGdsdWUtPnhjZWl2OworCW11c2ItPmlzX2hv c3QgPSBmYWxzZTsKKwltdXNiLT5pc3IgPSBtdGtfbXVzYl9pbnRlcnJ1cHQ7CisJcmV0ID0gcGh5 X2luaXQoZ2x1ZS0+cGh5KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcGh5 X3Bvd2VyX29uKGdsdWUtPnBoeSk7CisJaWYgKHJldCkgeworCQlwaHlfZXhpdChnbHVlLT5waHkp OworCQlyZXR1cm4gcmV0OworCX0KKworCXBoeV9zZXRfbW9kZShnbHVlLT5waHksIGdsdWUtPnBo eV9tb2RlKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9JTlZFTlRSQV9ETUEpCisJbXVzYl93 cml0ZWwobXVzYi0+bXJlZ3MsIE1VU0JfSFNETUFfSU5UUiwKKwkJICAgIERNQV9JTlRSX1NUQVRV U19NU0sgfCBETUFfSU5UUl9VTk1BU0tfU0VUX01TSyk7CisjZW5kaWYKKwltdXNiX3dyaXRlbCht dXNiLT5tcmVncywgVVNCX0wxSU5UTSwgVFhfSU5UX1NUQVRVUyB8IFJYX0lOVF9TVEFUVVMgfAor CQkgICAgVVNCQ09NX0lOVF9TVEFUVVMgfCBETUFfSU5UX1NUQVRVUyk7CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgbXRrX211c2Jfc2V0X21vZGUoc3RydWN0IG11c2IgKm11c2IsIHU4IG1v ZGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gbXVzYi0+Y29udHJvbGxlcjsKKwlzdHJ1Y3Qg bXRrX2dsdWUgKmdsdWUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2LT5wYXJlbnQpOworCWVudW0gcGh5 X21vZGUgbmV3X21vZGU7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIE1VU0JfSE9TVDoKKwkJ bmV3X21vZGUgPSBQSFlfTU9ERV9VU0JfSE9TVDsKKwkJbXRrX211c2Jfc2V0X3ZidXMobXVzYiwg MSk7CisJCWJyZWFrOworCWNhc2UgTVVTQl9QRVJJUEhFUkFMOgorCQluZXdfbW9kZSA9IFBIWV9N T0RFX1VTQl9ERVZJQ0U7CisJCWJyZWFrOworCWNhc2UgTVVTQl9PVEc6CisJCW5ld19tb2RlID0g UEhZX01PREVfVVNCX0hPU1Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIobXVzYi0+ Y29udHJvbGxlci0+cGFyZW50LAorCQkJIkVycm9yIHJlcXVlc3RlZCBtb2RlIG5vdCBzdXBwb3J0 ZWQgYnkgdGhpcyBrZXJuZWxcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGdsdWUt PnBoeV9tb2RlID09IG5ld19tb2RlKQorCQlyZXR1cm4gMDsKKworCW10a19tdXNiX3NldF9tYWls Ym94KGdsdWUsIE1US19JRF9HUk9VTkQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10 a19tdXNiX2V4aXQoc3RydWN0IG11c2IgKm11c2IpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0g bXVzYi0+Y29udHJvbGxlcjsKKwlzdHJ1Y3QgbXRrX2dsdWUgKmdsdWUgPSBkZXZfZ2V0X2RydmRh dGEoZGV2LT5wYXJlbnQpOworCisJcGh5X3Bvd2VyX29mZihnbHVlLT5waHkpOworCXBoeV9leGl0 KGdsdWUtPnBoeSk7CisJbXRrX211c2JfY2xrc19kaXNhYmxlKGdsdWUpOworCisJcG1fcnVudGlt ZV9wdXRfc3luYyhkZXYpOworCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOworCXJldHVybiAwOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG11c2JfcGxhdGZvcm1fb3BzIG10a19tdXNiX29wcyA9 IHsKKwkucXVpcmtzID0gTVVTQl9ETUFfSU5WRU5UUkEgfCBNVVNCX01US19RVUlSS1MsCisJLmlu aXQgPSBtdGtfbXVzYl9pbml0LAorCS5leGl0ID0gbXRrX211c2JfZXhpdCwKKyNpZmRlZiBDT05G SUdfVVNCX0lOVkVOVFJBX0RNQQorCS5kbWFfaW5pdCA9IG11c2Joc19kbWFfY29udHJvbGxlcl9j cmVhdGUsCisJLmRtYV9leGl0ID0gbXVzYmhzX2RtYV9jb250cm9sbGVyX2Rlc3Ryb3ksCisjZW5k aWYKKwkuYnVzY3RsX29mZnNldCA9IG10a19tdXNiX2J1c2N0bF9vZmZzZXQsCisJLnNldF9tb2Rl ID0gbXRrX211c2Jfc2V0X21vZGUsCisJLnNldF92YnVzID0gbXRrX211c2Jfc2V0X3ZidXMsCit9 OworCisjZGVmaW5lIE1US19NVVNCX01BWF9FUF9OVU0JOAorI2RlZmluZSBNVEtfTVVTQl9SQU1f QklUUwkxMQorCitzdGF0aWMgc3RydWN0IG11c2JfZmlmb19jZmcgbXRrX211c2JfbW9kZV9jZmdb XSA9IHsKKwl7IC5od19lcF9udW0gPSAxLCAuc3R5bGUgPSBGSUZPX1RYLCAubWF4cGFja2V0ID0g NTEyLCB9LAorCXsgLmh3X2VwX251bSA9IDEsIC5zdHlsZSA9IEZJRk9fUlgsIC5tYXhwYWNrZXQg PSA1MTIsIH0sCisJeyAuaHdfZXBfbnVtID0gMiwgLnN0eWxlID0gRklGT19UWCwgLm1heHBhY2tl dCA9IDUxMiwgfSwKKwl7IC5od19lcF9udW0gPSAyLCAuc3R5bGUgPSBGSUZPX1JYLCAubWF4cGFj a2V0ID0gNTEyLCB9LAorCXsgLmh3X2VwX251bSA9IDMsIC5zdHlsZSA9IEZJRk9fVFgsIC5tYXhw YWNrZXQgPSA1MTIsIH0sCisJeyAuaHdfZXBfbnVtID0gMywgLnN0eWxlID0gRklGT19SWCwgLm1h eHBhY2tldCA9IDUxMiwgfSwKKwl7IC5od19lcF9udW0gPSA0LCAuc3R5bGUgPSBGSUZPX1RYLCAu bWF4cGFja2V0ID0gNTEyLCB9LAorCXsgLmh3X2VwX251bSA9IDQsIC5zdHlsZSA9IEZJRk9fUlgs IC5tYXhwYWNrZXQgPSA1MTIsIH0sCisJeyAuaHdfZXBfbnVtID0gNSwgLnN0eWxlID0gRklGT19U WCwgLm1heHBhY2tldCA9IDUxMiwgfSwKKwl7IC5od19lcF9udW0gPSA1LCAuc3R5bGUgPSBGSUZP X1JYLCAubWF4cGFja2V0ID0gNTEyLCB9LAorCXsgLmh3X2VwX251bSA9IDYsIC5zdHlsZSA9IEZJ Rk9fVFgsIC5tYXhwYWNrZXQgPSAxMDI0LCB9LAorCXsgLmh3X2VwX251bSA9IDYsIC5zdHlsZSA9 IEZJRk9fUlgsIC5tYXhwYWNrZXQgPSAxMDI0LCB9LAorCXsgLmh3X2VwX251bSA9IDcsIC5zdHls ZSA9IEZJRk9fVFgsIC5tYXhwYWNrZXQgPSA1MTIsIH0sCisJeyAuaHdfZXBfbnVtID0gNywgLnN0 eWxlID0gRklGT19SWCwgLm1heHBhY2tldCA9IDY0LCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0 cnVjdCBtdXNiX2hkcmNfY29uZmlnIG10a19tdXNiX2hkcmNfY29uZmlnID0geworCS5maWZvX2Nm ZyA9IG10a19tdXNiX21vZGVfY2ZnLAorCS5maWZvX2NmZ19zaXplID0gQVJSQVlfU0laRShtdGtf bXVzYl9tb2RlX2NmZyksCisJLm11bHRpcG9pbnQgPSB0cnVlLAorCS5keW5fZmlmbyA9IHRydWUs CisJLm51bV9lcHMgPSBNVEtfTVVTQl9NQVhfRVBfTlVNLAorCS5yYW1fYml0cyA9IE1US19NVVNC X1JBTV9CSVRTLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5m byBtdGtfZGV2X2luZm8gPSB7CisJLm5hbWUgPSAibXVzYi1oZHJjIiwKKwkuaWQgPSBQTEFURk9S TV9ERVZJRF9BVVRPLAorCS5kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCit9OworCitzdGF0 aWMgaW50IG10a19tdXNiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJ c3RydWN0IG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgbXRrX2dsdWUg KmdsdWU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIHBpbmZvOworCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zf bm9kZTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWdsdWUgPSBkZXZtX2t6YWxsb2MoZGV2LCBz aXplb2YoKmdsdWUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdsdWUpCisJCXJldHVybiAtRU5PTUVN OworCisJZ2x1ZS0+ZGV2ID0gZGV2OworCXBkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9m KCpwZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcGRhdGEpCisJCXJldHVybiAtRU5PTUVNOwor CisJcmV0ID0gbXRrX211c2JfY2xrc19nZXQoZ2x1ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCWdsdWUtPnZidXMgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAidmJ1cyIpOworCWlm IChJU19FUlIoZ2x1ZS0+dmJ1cykpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsIHRvIGdldCB2YnVz XG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZ2x1ZS0+dmJ1cyk7CisJfQorCisJcGRhdGEtPmNvbmZp ZyA9ICZtdGtfbXVzYl9oZHJjX2NvbmZpZzsKKwlwZGF0YS0+cGxhdGZvcm1fb3BzID0gJm10a19t dXNiX29wczsKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAiZXh0Y29uIikpIHsKKwkJ Z2x1ZS0+ZWRldiA9IGV4dGNvbl9nZXRfZWRldl9ieV9waGFuZGxlKGRldiwgMCk7CisJCWlmIChJ U19FUlIoZ2x1ZS0+ZWRldikpIHsKKwkJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBnZXQgZXh0Y29u XG4iKTsKKwkJCXJldHVybiBQVFJfRVJSKGdsdWUtPmVkZXYpOworCQl9CisJfQorCisJcGRhdGEt Pm1vZGUgPSB1c2JfZ2V0X2RyX21vZGUoZGV2KTsKKwlzd2l0Y2ggKHBkYXRhLT5tb2RlKSB7CisJ Y2FzZSBVU0JfRFJfTU9ERV9IT1NUOgorCQlnbHVlLT5waHlfbW9kZSA9IFBIWV9NT0RFX1VTQl9I T1NUOworCQlicmVhazsKKwljYXNlIFVTQl9EUl9NT0RFX1BFUklQSEVSQUw6CisJCWdsdWUtPnBo eV9tb2RlID0gUEhZX01PREVfVVNCX0RFVklDRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGRh dGEtPm1vZGUgPSBVU0JfRFJfTU9ERV9PVEc7CisJCS8qIEZBTEwgVEhST1VHSCAqLworCWNhc2Ug VVNCX0RSX01PREVfT1RHOgorCQlnbHVlLT5waHlfbW9kZSA9IFBIWV9NT0RFX1VTQl9PVEc7CisJ CWJyZWFrOworCX0KKworCWdsdWUtPnBoeSA9IGRldm1fcGh5X2dldChkZXYsICJ1c2IyLXBoeSIp OworCWlmIChJU19FUlIoZ2x1ZS0+cGh5KSkgeworCQlkZXZfZXJyKGRldiwgImZhaWwgdG8gZ2V0 dGluZyBwaHkgJWxkXG4iLAorCQkJUFRSX0VSUihnbHVlLT5waHkpKTsKKwkJcmV0dXJuIFBUUl9F UlIoZ2x1ZS0+cGh5KTsKKwl9CisKKwlnbHVlLT51c2JfcGh5ID0gdXNiX3BoeV9nZW5lcmljX3Jl Z2lzdGVyKCk7CisJaWYgKElTX0VSUihnbHVlLT51c2JfcGh5KSkgeworCQlkZXZfZXJyKGRldiwg ImZhaWwgdG8gcmVnaXN0ZXJpbmcgdXNiLXBoeSAlbGRcbiIsCisJCQlQVFJfRVJSKGdsdWUtPnVz Yl9waHkpKTsKKwkJcmV0dXJuIFBUUl9FUlIoZ2x1ZS0+dXNiX3BoeSk7CisJfQorCisJZ2x1ZS0+ eGNlaXYgPSBkZXZtX3VzYl9nZXRfcGh5KGRldiwgVVNCX1BIWV9UWVBFX1VTQjIpOworCWlmIChJ U19FUlIoZ2x1ZS0+eGNlaXYpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBnZXR0aW5nIHVz Yi1waHkgJWRcbiIsIHJldCk7CisJCXJldCA9IFBUUl9FUlIoZ2x1ZS0+eGNlaXYpOworCQlnb3Rv IGVycl91bnJlZ2lzdGVyX3VzYl9waHk7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRl diwgZ2x1ZSk7CisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKwlwbV9ydW50aW1lX2dldF9zeW5j KGRldik7CisKKwlyZXQgPSBtdGtfbXVzYl9jbGtzX2VuYWJsZShnbHVlKTsKKwlpZiAocmV0KQor CQlnb3RvIGVycl9lbmFibGVfY2xrOworCisJcGluZm8gPSBtdGtfZGV2X2luZm87CisJcGluZm8u cGFyZW50ID0gZGV2OworCXBpbmZvLnJlcyA9IHBkZXYtPnJlc291cmNlOworCXBpbmZvLm51bV9y ZXMgPSBwZGV2LT5udW1fcmVzb3VyY2VzOworCXBpbmZvLmRhdGEgPSBwZGF0YTsKKwlwaW5mby5z aXplX2RhdGEgPSBzaXplb2YoKnBkYXRhKTsKKworCWdsdWUtPm11c2JfcGRldiA9IHBsYXRmb3Jt X2RldmljZV9yZWdpc3Rlcl9mdWxsKCZwaW5mbyk7CisJaWYgKElTX0VSUihnbHVlLT5tdXNiX3Bk ZXYpKSB7CisJCXJldCA9IFBUUl9FUlIoZ2x1ZS0+bXVzYl9wZGV2KTsKKwkJZGV2X2VycihkZXYs ICJmYWlsZWQgdG8gcmVnaXN0ZXIgbXVzYiBkZXZpY2U6ICVkXG4iLCByZXQpOworCQlnb3RvIGVy cl9kZXZpY2VfcmVnaXN0ZXI7CisJfQorCisJaWYgKHBkYXRhLT5tb2RlID09IFVTQl9EUl9NT0RF X09URykKKwkJbXRrX290Z19zd2l0Y2hfaW5pdChnbHVlKTsKKworCWRldl9pbmZvKGRldiwgIlVT QiBwcm9iZSBkb25lIVxuIik7CisJcmV0dXJuIDA7CisKK2Vycl9kZXZpY2VfcmVnaXN0ZXI6CisJ bXRrX211c2JfY2xrc19kaXNhYmxlKGdsdWUpOworZXJyX2VuYWJsZV9jbGs6CisJcG1fcnVudGlt ZV9wdXRfc3luYyhkZXYpOworCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOworZXJyX3VucmVnaXN0 ZXJfdXNiX3BoeToKKwl1c2JfcGh5X2dlbmVyaWNfdW5yZWdpc3RlcihnbHVlLT51c2JfcGh5KTsK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19tdXNiX3JlbW92ZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfZ2x1ZSAqZ2x1ZSA9IHBsYXRmb3Jt X2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnVzYl9waHkgPSBn bHVlLT51c2JfcGh5OworCisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZ2x1ZS0+bXVzYl9w ZGV2KTsKKwl1c2JfcGh5X2dlbmVyaWNfdW5yZWdpc3Rlcih1c2JfcGh5KTsKKworCXJldHVybiAw OworfQorCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBtdGtfbXVzYl9tYXRjaFtdID0geworCXsuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdGstbXVz YiIsfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdGtfbXVzYl9tYXRjaCk7 CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX211c2JfZHJpdmVy ID0geworCS5wcm9iZSA9IG10a19tdXNiX3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfbXVzYl9yZW1v dmUsCisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAibXVzYi1tdGsiLAorCQkgICAub2ZfbWF0 Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIobXRrX211c2JfbWF0Y2gpLAorCX0sCit9OworCittb2R1 bGVfcGxhdGZvcm1fZHJpdmVyKG10a19tdXNiX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElP TigiTWVkaWFUZWsgTVVTQiBHbHVlIExheWVyIik7CitNT0RVTEVfQVVUSE9SKCJNaW4gR3VvIDxt aW4uZ3VvQG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAt LWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211 c2JfY29yZS5jCmluZGV4IGI3ZDU2MjcuLmQ2MGY3NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNi L211c2IvbXVzYl9jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwpAQCAt MTAyOCw2ICsxMDI4LDE2IEBAIHN0YXRpYyB2b2lkIG11c2JfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0 cnVjdCBtdXNiICptdXNiKQogCXRlbXAgPSBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0lOVFJVU0Ip OwogCXRlbXAgPSBtdXNiX3JlYWR3KG1iYXNlLCBNVVNCX0lOVFJUWCk7CiAJdGVtcCA9IG11c2Jf cmVhZHcobWJhc2UsIE1VU0JfSU5UUlJYKTsKKworCS8qICBNZWRpYVRlayBjb250cm9sbGVyIGlu dGVycnVwdCBzdGF0dXMgaXMgVzFDICovCisJaWYgKG11c2ItPm9wcy0+cXVpcmtzICYgTVVTQl9N VEtfUVVJUktTKSB7CisJCW11c2Jfd3JpdGViKG1iYXNlLCBNVVNCX0lOVFJVU0IsCisJCQltdXNi X3JlYWRiKG1iYXNlLCBNVVNCX0lOVFJVU0IpKTsKKwkJbXVzYl93cml0ZXcobWJhc2UsIE1VU0Jf SU5UUlJYLAorCQkJbXVzYl9yZWFkdyhtYmFzZSwgTVVTQl9JTlRSUlgpKTsKKwkJbXVzYl93cml0 ZXcobWJhc2UsIE1VU0JfSU5UUlRYLAorCQkJbXVzYl9yZWFkdyhtYmFzZSwgTVVTQl9JTlRSVFgp KTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIG11c2JfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IG11 c2IgKm11c2IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oIGIvZHJp dmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAppbmRleCAwNDIwM2I3Li4xYmY0ZTlhIDEwMDY0NAot LS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2Iv bXVzYl9jb3JlLmgKQEAgLTEzOCw2ICsxMzgsNyBAQCBlbnVtIG11c2JfZ19lcDBfc3RhdGUgewog ICovCiBzdHJ1Y3QgbXVzYl9wbGF0Zm9ybV9vcHMgewogCisjZGVmaW5lIE1VU0JfTVRLX1FVSVJL UwlCSVQoMTApCiAjZGVmaW5lIE1VU0JfR19OT19TS0JfUkVTRVJWRQlCSVQoOSkKICNkZWZpbmUg TVVTQl9EQThYWAkJQklUKDgpCiAjZGVmaW5lIE1VU0JfUFJFU0VSVkVfU0VTU0lPTglCSVQoNykK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9kbWEuaCBiL2RyaXZlcnMvdXNiL211 c2IvbXVzYl9kbWEuaAppbmRleCAyODFlNzVkMy4uYjIxODIxMCAxMDA2NDQKLS0tIGEvZHJpdmVy cy91c2IvbXVzYi9tdXNiX2RtYS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9kbWEuaApA QCAtMTk3LDYgKzE5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtdXNiX2RtYV9jb250cm9sbGVy X2Rlc3Ryb3koc3RydWN0IGRtYV9jb250cm9sbGVyICpkKSB7IH0KIGV4dGVybiBzdHJ1Y3QgZG1h X2NvbnRyb2xsZXIgKgogbXVzYmhzX2RtYV9jb250cm9sbGVyX2NyZWF0ZShzdHJ1Y3QgbXVzYiAq bXVzYiwgdm9pZCBfX2lvbWVtICpiYXNlKTsKIGV4dGVybiB2b2lkIG11c2Joc19kbWFfY29udHJv bGxlcl9kZXN0cm95KHN0cnVjdCBkbWFfY29udHJvbGxlciAqYyk7CitleHRlcm4gaXJxcmV0dXJu X3QgZG1hX2NvbnRyb2xsZXJfaXJxKGludCBpcnEsIHZvaWQgKnByaXZhdGVfZGF0YSk7CiAKIGV4 dGVybiBzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIgKgogdHVzYl9kbWFfY29udHJvbGxlcl9jcmVhdGUo c3RydWN0IG11c2IgKm11c2IsIHZvaWQgX19pb21lbSAqYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwpp bmRleCBiNTljZTlhLi5iMWIwMjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2Jf aG9zdC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKQEAgLTI5MiwyMCArMjky LDczIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtdXNiX3NhdmVfdG9nZ2xlKHN0cnVjdCBtdXNiX3Fo ICpxaCwgaW50IGlzX2luLAogewogCXZvaWQgX19pb21lbQkJKmVwaW8gPSBxaC0+aHdfZXAtPnJl Z3M7CiAJdTE2CQkJY3NyOworCXN0cnVjdCBtdXNiICptdXNiID0gcWgtPmh3X2VwLT5tdXNiOwog CiAJLyoKIAkgKiBGSVhNRTogdGhlIGN1cnJlbnQgTWVudG9yIERNQSBjb2RlIHNlZW1zIHRvIGhh dmUKIAkgKiBwcm9ibGVtcyBnZXR0aW5nIHRvZ2dsZSBjb3JyZWN0LgogCSAqLwogCi0JaWYgKGlz X2luKQotCQljc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfUlhDU1IpICYgTVVTQl9SWENTUl9I X0RBVEFUT0dHTEU7Ci0JZWxzZQotCQljc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfVFhDU1Ip ICYgTVVTQl9UWENTUl9IX0RBVEFUT0dHTEU7CisJLyogTWVkaWFUZWsgY29udHJvbGxlciBoYXMg cHJpdmF0ZSB0b2dnbGUgcmVnaXN0ZXIgKi8KKwlpZiAobXVzYi0+b3BzLT5xdWlya3MgJiBNVVNC X01US19RVUlSS1MpIHsKKwkJdTE2IHRvZ2dsZTsKKwkJdTggZXBudW0gPSBxaC0+aHdfZXAtPmVw bnVtOworCisJCWlmIChpc19pbikKKwkJCXRvZ2dsZSA9IG11c2JfcmVhZGwobXVzYi0+bXJlZ3Ms IE1VU0JfUlhUT0cpOworCQllbHNlCisJCQl0b2dnbGUgPSBtdXNiX3JlYWRsKG11c2ItPm1yZWdz LCBNVVNCX1RYVE9HKTsKKworCQljc3IgPSB0b2dnbGUgJiAoMSA8PCBlcG51bSk7CisJfSBlbHNl IHsKKwkJaWYgKGlzX2luKQorCQkJY3NyID0gbXVzYl9yZWFkdyhlcGlvLCBNVVNCX1JYQ1NSKQor CQkJCSYgTVVTQl9SWENTUl9IX0RBVEFUT0dHTEU7CisJCWVsc2UKKwkJCWNzciA9IG11c2JfcmVh ZHcoZXBpbywgTVVTQl9UWENTUikKKwkJCQkmIE1VU0JfVFhDU1JfSF9EQVRBVE9HR0xFOworCX0K IAogCXVzYl9zZXR0b2dnbGUodXJiLT5kZXYsIHFoLT5lcG51bSwgIWlzX2luLCBjc3IgPyAxIDog MCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTE2IG11c2Jfc2V0X3RvZ2dsZShzdHJ1Y3QgbXVzYl9x aCAqcWgsIGludCBpc19pbiwKKwkJCQkJc3RydWN0IHVyYiAqdXJiKQoreworCXUxNiBjc3IgPSAw OworCXUxNiB0b2dnbGUgPSAwOworCXN0cnVjdCBtdXNiICptdXNiID0gcWgtPmh3X2VwLT5tdXNi OworCXU4IGVwbnVtID0gcWgtPmh3X2VwLT5lcG51bTsKKworCXRvZ2dsZSA9IHVzYl9nZXR0b2dn bGUodXJiLT5kZXYsIHFoLT5lcG51bSwgIWlzX2luKTsKKworCS8qIE1lZGlhVGVrIGNvbnRyb2xs ZXIgaGFzIHByaXZhdGUgdG9nZ2xlIHJlZ2lzdGVyICovCisJaWYgKG11c2ItPm9wcy0+cXVpcmtz ICYgTVVTQl9NVEtfUVVJUktTKSB7CisJCWlmIChpc19pbikgeworCQkJbXVzYl93cml0ZWwobXVz Yi0+bXJlZ3MsIE1VU0JfUlhUT0dFTiwgKDEgPDwgZXBudW0pKTsKKwkJCW11c2Jfd3JpdGVsKG11 c2ItPm1yZWdzLCBNVVNCX1JYVE9HLCAodG9nZ2xlIDw8IGVwbnVtKSk7CisJCX0gZWxzZSB7CisJ CQltdXNiX3dyaXRlbChtdXNiLT5tcmVncywgTVVTQl9UWFRPR0VOLCAoMSA8PCBlcG51bSkpOwor CQkJbXVzYl93cml0ZWwobXVzYi0+bXJlZ3MsIE1VU0JfVFhUT0csICh0b2dnbGUgPDwgZXBudW0p KTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChpc19pbikgeworCQkJaWYgKHRvZ2dsZSkKKwkJCQlj c3IgPSBNVVNCX1JYQ1NSX0hfV1JfREFUQVRPR0dMRQorCQkJCQkJfCBNVVNCX1JYQ1NSX0hfREFU QVRPR0dMRTsKKwkJCWVsc2UKKwkJCQljc3IgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKHRvZ2ds ZSkKKwkJCQljc3IgfD0gTVVTQl9UWENTUl9IX1dSX0RBVEFUT0dHTEUKKwkJCQkJCXwgTVVTQl9U WENTUl9IX0RBVEFUT0dHTEU7CisJCQllbHNlCisJCQkJY3NyIHw9IE1VU0JfVFhDU1JfQ0xSREFU QVRPRzsKKwkJfQorCX0KKwlyZXR1cm4gY3NyOworfQorCiAvKgogICogQWR2YW5jZSB0aGlzIGhh cmR3YXJlIGVuZHBvaW50J3MgcXVldWUsIGNvbXBsZXRpbmcgdGhlIHNwZWNpZmllZCBVUkIgYW5k CiAgKiBhZHZhbmNpbmcgdG8gZWl0aGVyIHRoZSBuZXh0IFVSQiBxdWV1ZWQgdG8gdGhhdCBxaCwg b3IgZWxzZSBpbnZhbGlkYXRpbmcKQEAgLTc3MiwxMyArODI1LDggQEAgc3RhdGljIHZvaWQgbXVz Yl9lcF9wcm9ncmFtKHN0cnVjdCBtdXNiICptdXNiLCB1OCBlcG51bSwKIAkJCQkJKTsKIAkJCWNz ciB8PSBNVVNCX1RYQ1NSX01PREU7CiAKLQkJCWlmICghaHdfZXAtPnR4X2RvdWJsZV9idWZmZXJl ZCkgewotCQkJCWlmICh1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCBxaC0+ZXBudW0sIDEpKQotCQkJ CQljc3IgfD0gTVVTQl9UWENTUl9IX1dSX0RBVEFUT0dHTEUKLQkJCQkJCXwgTVVTQl9UWENTUl9I X0RBVEFUT0dHTEU7Ci0JCQkJZWxzZQotCQkJCQljc3IgfD0gTVVTQl9UWENTUl9DTFJEQVRBVE9H OwotCQkJfQorCQkJaWYgKCFod19lcC0+dHhfZG91YmxlX2J1ZmZlcmVkKQorCQkJCWNzciB8PSBt dXNiX3NldF90b2dnbGUocWgsICFpc19vdXQsIHVyYik7CiAKIAkJCW11c2Jfd3JpdGV3KGVwaW8s IE1VU0JfVFhDU1IsIGNzcik7CiAJCQkvKiBSRVZJU0lUIG1heSBuZWVkIHRvIGNsZWFyIEZMVVNI RklGTyAuLi4gKi8KQEAgLTg2MCwxNyArOTA4LDEyIEBAIHN0YXRpYyB2b2lkIG11c2JfZXBfcHJv Z3JhbShzdHJ1Y3QgbXVzYiAqbXVzYiwgdTggZXBudW0sCiAKIAkvKiBJTi9yZWNlaXZlICovCiAJ fSBlbHNlIHsKLQkJdTE2CWNzcjsKKwkJdTE2CWNzciA9IDA7CiAKIAkJaWYgKGh3X2VwLT5yeF9y ZWluaXQpIHsKIAkJCW11c2JfcnhfcmVpbml0KG11c2IsIHFoLCBlcG51bSk7CisJCQljc3IgfD0g bXVzYl9zZXRfdG9nZ2xlKHFoLCAhaXNfb3V0LCB1cmIpOwogCi0JCQkvKiBpbml0IG5ldyBzdGF0 ZTogdG9nZ2xlIGFuZCBOWUVULCBtYXliZSBETUEgbGF0ZXIgKi8KLQkJCWlmICh1c2JfZ2V0dG9n Z2xlKHVyYi0+ZGV2LCBxaC0+ZXBudW0sIDApKQotCQkJCWNzciA9IE1VU0JfUlhDU1JfSF9XUl9E QVRBVE9HR0xFCi0JCQkJCXwgTVVTQl9SWENTUl9IX0RBVEFUT0dHTEU7Ci0JCQllbHNlCi0JCQkJ Y3NyID0gMDsKIAkJCWlmIChxaC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpCiAJCQkJ Y3NyIHw9IE1VU0JfUlhDU1JfRElTTllFVDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVz Yi9tdXNiX3JlZ3MuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmgKaW5kZXggNWNkNzI2 NC4uZmZiZTI2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3JlZ3MuaAorKysg Yi9kcml2ZXJzL3VzYi9tdXNiL211c2JfcmVncy5oCkBAIC0yNzMsNiArMjczLDEyIEBACiAjZGVm aW5lIE1VU0JfUlhIVUJBRERSCQkweDA2CiAjZGVmaW5lIE1VU0JfUlhIVUJQT1JUCQkweDA3CiAK Ky8qIE1lZGlhVGVrIGNvbnRyb2xsZXIgdG9nZ2xlIGVuYWJsZSBhbmQgc3RhdHVzIHJlZyAqLwor I2RlZmluZSBNVVNCX1JYVE9HCQkweDgwCisjZGVmaW5lIE1VU0JfUlhUT0dFTgkJMHg4MgorI2Rl ZmluZSBNVVNCX1RYVE9HCQkweDg0CisjZGVmaW5lIE1VU0JfVFhUT0dFTgkJMHg4NgorCiBzdGF0 aWMgaW5saW5lIHU4IG11c2JfcmVhZF9jb25maWdkYXRhKHZvaWQgX19pb21lbSAqbWJhc2UpCiB7 CiAJbXVzYl93cml0ZWIobWJhc2UsIE1VU0JfSU5ERVgsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy91c2IvbXVzYi9tdXNiaHNkbWEuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmMKaW5k ZXggODI0YWRjYi4uYzU0NTQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNk bWEuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jCkBAIC0yNjMsNyArMjYzLDcg QEAgc3RhdGljIGludCBkbWFfY2hhbm5lbF9hYm9ydChzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5u ZWwpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBkbWFfY29udHJvbGxlcl9p cnEoaW50IGlycSwgdm9pZCAqcHJpdmF0ZV9kYXRhKQoraXJxcmV0dXJuX3QgZG1hX2NvbnRyb2xs ZXJfaXJxKGludCBpcnEsIHZvaWQgKnByaXZhdGVfZGF0YSkKIHsKIAlzdHJ1Y3QgbXVzYl9kbWFf Y29udHJvbGxlciAqY29udHJvbGxlciA9IHByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgbXVzYiAqbXVz YiA9IGNvbnRyb2xsZXItPnByaXZhdGVfZGF0YTsKQEAgLTI4NSw2ICsyODUsOCBAQCBzdGF0aWMg aXJxcmV0dXJuX3QgZG1hX2NvbnRyb2xsZXJfaXJxKGludCBpcnEsIHZvaWQgKnByaXZhdGVfZGF0 YSkKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCiAJaW50X2hzZG1h ID0gbXVzYl9yZWFkYihtYmFzZSwgTVVTQl9IU0RNQV9JTlRSKTsKKwlpZiAobXVzYi0+b3BzLT5x dWlya3MgJiBNVVNCX01US19RVUlSS1MpCisJCW11c2Jfd3JpdGViKG11c2ItPm1yZWdzLCBNVVNC X0hTRE1BX0lOVFIsIGludF9oc2RtYSk7CiAKIAlpZiAoIWludF9oc2RtYSkgewogCQltdXNiX2Ri ZyhtdXNiLCAic3B1cmlvdXMgRE1BIGlycSIpOwpAQCAtMzc3LDE1ICszNzksMTcgQEAgc3RhdGlj IGlycXJldHVybl90IGRtYV9jb250cm9sbGVyX2lycShpbnQgaXJxLCB2b2lkICpwcml2YXRlX2Rh dGEpCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCXJldHVy biByZXR2YWw7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChkbWFfY29udHJvbGxlcl9pcnEpOwogCiB2 b2lkIG11c2Joc19kbWFfY29udHJvbGxlcl9kZXN0cm95KHN0cnVjdCBkbWFfY29udHJvbGxlciAq YykKIHsKIAlzdHJ1Y3QgbXVzYl9kbWFfY29udHJvbGxlciAqY29udHJvbGxlciA9IGNvbnRhaW5l cl9vZihjLAogCQkJc3RydWN0IG11c2JfZG1hX2NvbnRyb2xsZXIsIGNvbnRyb2xsZXIpOworCXN0 cnVjdCBtdXNiICptdXNiID0gY29udHJvbGxlci0+cHJpdmF0ZV9kYXRhOwogCiAJZG1hX2NvbnRy b2xsZXJfc3RvcChjb250cm9sbGVyKTsKIAotCWlmIChjb250cm9sbGVyLT5pcnEpCisJaWYgKCEo bXVzYi0+b3BzLT5xdWlya3MgJiBNVVNCX01US19RVUlSS1MpICYmIGNvbnRyb2xsZXItPmlycSkK IAkJZnJlZV9pcnEoY29udHJvbGxlci0+aXJxLCBjKTsKIAogCWtmcmVlKGNvbnRyb2xsZXIpOwpA QCAtMzk4LDExICs0MDIsMTUgQEAgc3RydWN0IGRtYV9jb250cm9sbGVyICptdXNiaHNfZG1hX2Nv bnRyb2xsZXJfY3JlYXRlKHN0cnVjdCBtdXNiICptdXNiLAogCXN0cnVjdCBtdXNiX2RtYV9jb250 cm9sbGVyICpjb250cm9sbGVyOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IG11c2ItPmNvbnRyb2xs ZXI7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShk ZXYpOwotCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiZG1hIik7CisJ aW50IGlycSA9IC0xOwogCi0JaWYgKGlycSA8PSAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiTm8gRE1B IGludGVycnVwdCBsaW5lIVxuIik7Ci0JCXJldHVybiBOVUxMOworCWlmICghKG11c2ItPm9wcy0+ cXVpcmtzICYgTVVTQl9NVEtfUVVJUktTKSkgeworCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5 bmFtZShwZGV2LCAiZG1hIik7CisKKwkJaWYgKGlycSA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAi Tm8gRE1BIGludGVycnVwdCBsaW5lIVxuIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQogCX0KIAog CWNvbnRyb2xsZXIgPSBremFsbG9jKHNpemVvZigqY29udHJvbGxlciksIEdGUF9LRVJORUwpOwpA QCAtNDE4LDE1ICs0MjYsMTcgQEAgc3RydWN0IGRtYV9jb250cm9sbGVyICptdXNiaHNfZG1hX2Nv bnRyb2xsZXJfY3JlYXRlKHN0cnVjdCBtdXNiICptdXNiLAogCWNvbnRyb2xsZXItPmNvbnRyb2xs ZXIuY2hhbm5lbF9wcm9ncmFtID0gZG1hX2NoYW5uZWxfcHJvZ3JhbTsKIAljb250cm9sbGVyLT5j b250cm9sbGVyLmNoYW5uZWxfYWJvcnQgPSBkbWFfY2hhbm5lbF9hYm9ydDsKIAotCWlmIChyZXF1 ZXN0X2lycShpcnEsIGRtYV9jb250cm9sbGVyX2lycSwgMCwKKwlpZiAoIShtdXNiLT5vcHMtPnF1 aXJrcyAmIE1VU0JfTVRLX1FVSVJLUykpIHsKKwkJaWYgKHJlcXVlc3RfaXJxKGlycSwgZG1hX2Nv bnRyb2xsZXJfaXJxLCAwLAogCQkJZGV2X25hbWUobXVzYi0+Y29udHJvbGxlciksICZjb250cm9s bGVyLT5jb250cm9sbGVyKSkgewotCQlkZXZfZXJyKGRldiwgInJlcXVlc3RfaXJxICVkIGZhaWxl ZCFcbiIsIGlycSk7Ci0JCW11c2JfZG1hX2NvbnRyb2xsZXJfZGVzdHJveSgmY29udHJvbGxlci0+ Y29udHJvbGxlcik7CisJCQlkZXZfZXJyKGRldiwgInJlcXVlc3RfaXJxICVkIGZhaWxlZCFcbiIs IGlycSk7CisJCQltdXNiX2RtYV9jb250cm9sbGVyX2Rlc3Ryb3koJmNvbnRyb2xsZXItPmNvbnRy b2xsZXIpOwogCi0JCXJldHVybiBOVUxMOwotCX0KKwkJCXJldHVybiBOVUxMOworCQl9CiAKLQlj b250cm9sbGVyLT5pcnEgPSBpcnE7CisJCWNvbnRyb2xsZXItPmlycSA9IGlycTsKKwl9CiAKIAly ZXR1cm4gJmNvbnRyb2xsZXItPmNvbnRyb2xsZXI7CiB9Cg==