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: [1/7] soc: mediatek: Add USB wakeup driver From: Chunfeng Yun Message-Id: <1512809136-2779-2-git-send-email-chunfeng.yun@mediatek.com> Date: Sat, 9 Dec 2017 16:45:30 +0800 To: Rob Herring , Felipe Balbi , Matthias Brugger , Mathias Nyman Cc: Mark Rutland , Greg Kroah-Hartman , Catalin Marinas , Will Deacon , Chunfeng Yun , Jean Delvare , Sean Wang , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org List-ID: VGhpcyBkcml2ZXIgaXMgdXNlZCB0byBzdXBwb3J0IHVzYiB3YWtldXAgd2hpY2ggaXMgY29udHJv bGxlZCBieQp0aGUgZ2x1ZSBsYXllciBiZXR3ZWVuIFNTVVNCIGFuZCBTUE0uIFVzdWFsbHkgdGhl IGdsdWUgbGF5ZXIgaXMgcHV0CmludG8gYSBzeXN0ZW0gY29udHJvbGxlciwgc3VjaCBhcyBwZXJp Y2ZnIG1vZHVsZSwgd2hpY2ggaXMKcmVwcmVzZW50ZWQgYnkgYSBzeXNjb24gbm9kZSBpbiBEVFMu CkR1ZSB0byB0aGUgZ2x1ZSBsYXllciBtYXkgdmFyeSBvbiBkaWZmZXJlbnQgU29DcywgaXQncyB1 c2VmdWwgdG8KZXh0cmFjdCBhIHNlcGFyYXRlZCBkcml2ZXIgdG8gc2ltcGxpZnkgdXNiIGNvbnRy b2xsZXIgZHJpdmVycy4KClNpZ25lZC1vZmYtYnk6IENodW5mZW5nIFl1biA8Y2h1bmZlbmcueXVu QG1lZGlhdGVrLmNvbT4KLS0tCiBkcml2ZXJzL3NvYy9tZWRpYXRlay9LY29uZmlnICAgICAgICAg ICAgICAgICAgfCAgIDggKwogZHJpdmVycy9zb2MvbWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgICAg ICAgICAgIHwgICAxICsKIGRyaXZlcnMvc29jL21lZGlhdGVrL210ay11c2Itd2FrZXVwLmMgICAg ICAgICB8IDUxOSArKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9kdC1iaW5kaW5n cy9zb2MvbWVkaWF0ZWssdXNiLXdha2V1cC5oIHwgIDE1ICsKIGluY2x1ZGUvbGludXgvc29jL21l ZGlhdGVrL3VzYi13YWtldXAuaCAgICAgICB8ICA4OCArKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA2 MzEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc29jL21lZGlhdGVr L210ay11c2Itd2FrZXVwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2R0LWJpbmRpbmdz L3NvYy9tZWRpYXRlayx1c2Itd2FrZXVwLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xp bnV4L3NvYy9tZWRpYXRlay91c2Itd2FrZXVwLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy9t ZWRpYXRlay9LY29uZmlnIGIvZHJpdmVycy9zb2MvbWVkaWF0ZWsvS2NvbmZpZwppbmRleCBhN2Qw NjY3Li4zMGNkMjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NvYy9tZWRpYXRlay9LY29uZmlnCisr KyBiL2RyaXZlcnMvc29jL21lZGlhdGVrL0tjb25maWcKQEAgLTMxLDQgKzMxLDEyIEBAIGNvbmZp ZyBNVEtfU0NQU1lTCiAJICBTYXkgeWVzIGhlcmUgdG8gYWRkIHN1cHBvcnQgZm9yIHRoZSBNZWRp YVRlayBTQ1BTWVMgcG93ZXIgZG9tYWluCiAJICBkcml2ZXIuCiAKK2NvbmZpZyBNVEtfVVdLCisJ Ym9vbCAiTWVkaWFUZWsgVVNCIFdha2V1cCBTdXBwb3J0IgorCXNlbGVjdCBSRUdNQVAKKwloZWxw CisJICBTYXkgeWVzIGhlcmUgdG8gYWRkIHN1cHBvcnQgZm9yIHRoZSBNZWRpYVRlayBTU1VTQi1T UE0gZ2x1ZSBsYXllcgorCSAgd2hpY2ggc3VwcG9ydHMgc29tZSBkaWZmZXJlbnQgdHlwZSBvZiBV U0Igd2FrZXVwLCBzdWNoIGFzIElQLVNMRUVQLAorCSAgTElORVNUQVRFLCBJRERJRyBldGMsIGFu ZCBpdCBjYW4gc3VwcG9ydCBtdWx0aSBTU1VTQiBjb250cm9sbGVycy4KKwogZW5kbWVudQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9zb2MvbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL3NvYy9tZWRp YXRlay9NYWtlZmlsZQppbmRleCAxMjk5OGIwLi42NmZiYjU0ZiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9zb2MvbWVkaWF0ZWsvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zb2MvbWVkaWF0ZWsvTWFrZWZp bGUKQEAgLTEsMyArMSw0IEBACiBvYmotJChDT05GSUdfTVRLX0lORlJBQ0ZHKSArPSBtdGstaW5m cmFjZmcubwogb2JqLSQoQ09ORklHX01US19QTUlDX1dSQVApICs9IG10ay1wbWljLXdyYXAubwog b2JqLSQoQ09ORklHX01US19TQ1BTWVMpICs9IG10ay1zY3BzeXMubworb2JqLSQoQ09ORklHX01U S19VV0spICs9IG10ay11c2Itd2FrZXVwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL21lZGlh dGVrL210ay11c2Itd2FrZXVwLmMgYi9kcml2ZXJzL3NvYy9tZWRpYXRlay9tdGstdXNiLXdha2V1 cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NTM5YTYKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL3NvYy9tZWRpYXRlay9tdGstdXNiLXdha2V1cC5jCkBAIC0wLDAg KzEsNTE5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3IE1lZGlhVGVrIEluYy4KKyAqIEF1 dGhvcjogQ2h1bmZlbmcgWXVuIDxjaHVuZmVuZy55dW5AbWVkaWF0ZWsuY29tPgorICoKKyAqIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisgKgorICovCisKKyNpbmNsdWRlIDxkdC1i aW5kaW5ncy9zb2MvbWVkaWF0ZWssdXNiLXdha2V1cC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5l bC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3Jt Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgor I2luY2x1ZGUgPGxpbnV4L3NvYy9tZWRpYXRlay91c2Itd2FrZXVwLmg+CisKKy8qIG10ODE3Mywg bXQ4MTc2IGV0YyAqLworI2RlZmluZSBQRVJJX1dLX0NUUkwxCTB4NAorI2RlZmluZSBXQzFfSVNf Qyh4KQkoKCh4KSAmIDB4ZikgPDwgMjYpIC8qIGN5Y2xlIGRlYm91bmNlICovCisjZGVmaW5lIFdD MV9JU19FTglCSVQoMjUpCisjZGVmaW5lIFdDMV9JU19QCUJJVCg2KSAgLyogcG9sYXJpdHkgZm9y IGlwIHNsZWVwICovCisKKy8qIG10MjcxMiBldGMgKi8KKyNkZWZpbmUgUEVSSV9TU1VTQl9TUE1f Q1RSTAkweDAKKyNkZWZpbmUgU1NDX0xJTkVfU1RBVEVfQ0hHCUdFTk1BU0soMTEsIDgpCisjZGVm aW5lIFNTQ19MSU5FX1NUQVRFX0VOCUdFTk1BU0soNiwgNSkKKyNkZWZpbmUgU1NDX0lQX1NMRUVQ X0VOCUJJVCg0KQorI2RlZmluZSBTU0NfU1BNX0lOVF9FTgkJQklUKDEpCisKK2VudW0gbXRrX3V3 a192ZXJzIHsKKwlNVEtfVVdLX1YxID0gMSwKKwlNVEtfVVdLX1YyLAorfTsKKworc3RydWN0IG10 a191d2tfcGRhdGEgeworCWVudW0gbXRrX3V3a192ZXJzIHZlcnM7Cit9OworCisvKioKKyAqIEBy ZWdfYmFzZTogcmVnaXN0ZXIgb2Zmc2V0IHdpdGhpbiBhIHN5c2NvbiBAd2tjIChlLmcuIHBlcmlj ZmcgbW9kdWxlKQorICogQHR5cGU6IHRoZSB0eXBlcyBvZiB3YWtldXAsIHN1Y2ggYXMgSVAtU0xF RVAsIExJTkUtU1RBVEUgZXRjCisgKi8KK3N0cnVjdCBtdGtfdXdrX2luc3RhbmNlIHsKKwlzdHJ1 Y3QgbXR1X3dha2V1cCB1d2s7CisJdTMyIHJlZ19iYXNlOworCXUzMiByZWdfbGVuOworCXUzMiB0 eXBlOworfTsKKworc3RydWN0IG10a191d2sgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1 Y3QgcmVnbWFwICp3a2M7CisJY29uc3Qgc3RydWN0IG10a191d2tfcGRhdGEgKmRhdGE7CisJc3Ry dWN0IG10a191d2tfaW5zdGFuY2UgKippbnN0OworCWludCBudW1faW5zdDsKK307CisKK3N0YXRp YyBMSVNUX0hFQUQob2ZfdXdrX3Byb3ZpZGVycyk7CitzdGF0aWMgREVGSU5FX01VVEVYKG9mX3V3 a19tdXRleCk7CisKK3N0YXRpYyBzdHJ1Y3QgbXR1X3dha2V1cF9wcm92aWRlciAqb2ZfdXdrX3By b3ZpZGVyX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBtdHVfd2FrZXVwICooKm9m X3hsYXRlKShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgKmFy Z3MpKQoreworCXN0cnVjdCBtdHVfd2FrZXVwX3Byb3ZpZGVyICpwcm92aWRlcjsKKworCXByb3Zp ZGVyID0ga3phbGxvYyhzaXplb2YoKnByb3ZpZGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcm92 aWRlcikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlwcm92aWRlci0+ZGV2ID0gZGV2 OworCXByb3ZpZGVyLT5vZl9ub2RlID0gb2Zfbm9kZV9nZXQoZGV2LT5vZl9ub2RlKTsKKwlwcm92 aWRlci0+b2ZfeGxhdGUgPSBvZl94bGF0ZTsKKworCW11dGV4X2xvY2soJm9mX3V3a19tdXRleCk7 CisJbGlzdF9hZGRfdGFpbCgmcHJvdmlkZXItPmxpc3QsICZvZl91d2tfcHJvdmlkZXJzKTsKKwlt dXRleF91bmxvY2soJm9mX3V3a19tdXRleCk7CisKKwlyZXR1cm4gcHJvdmlkZXI7Cit9CisKK3N0 YXRpYyB2b2lkIG9mX3V3a19wcm92aWRlcl9kZWwoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sK KwlzdHJ1Y3QgbXR1X3dha2V1cF9wcm92aWRlciAqcHJvdmlkZXI7CisKKwltdXRleF9sb2NrKCZv Zl91d2tfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHJvdmlkZXIsICZvZl91d2tfcHJv dmlkZXJzLCBsaXN0KSB7CisJCWlmIChwcm92aWRlci0+b2Zfbm9kZSA9PSBucCkgeworCQkJbGlz dF9kZWwoJnByb3ZpZGVyLT5saXN0KTsKKwkJCW9mX25vZGVfcHV0KHByb3ZpZGVyLT5vZl9ub2Rl KTsKKwkJCWtmcmVlKHByb3ZpZGVyKTsKKwkJCWJyZWFrOworCQl9CisJfQorCW11dGV4X3VubG9j aygmb2ZfdXdrX211dGV4KTsKK30KKworc3RhdGljIHN0cnVjdCBtdHVfd2FrZXVwICpvZl91d2tf Z2V0X2Zyb21fcHJvdmlkZXIoCisJCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgKmFyZ3MpCit7CisJ c3RydWN0IG10dV93YWtldXBfcHJvdmlkZXIgKnByb3ZpZGVyOworCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqY2hpbGRfbnA7CisJc3RydWN0IG10dV93YWtldXAgKnV3azsKKworCW11dGV4X2xvY2soJm9m X3V3a19tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwcm92aWRlciwgJm9mX3V3a19wcm92 aWRlcnMsIGxpc3QpIHsKKwkJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShwcm92aWRlci0+b2Zfbm9k ZSwgY2hpbGRfbnApIHsKKwkJCWlmIChjaGlsZF9ucCA9PSBhcmdzLT5ucCkgeworCQkJCXV3ayA9 IHByb3ZpZGVyLT5vZl94bGF0ZShwcm92aWRlci0+ZGV2LCBhcmdzKTsKKwkJCQltdXRleF91bmxv Y2soJm9mX3V3a19tdXRleCk7CisJCQkJcmV0dXJuIHV3azsKKwkJCX0KKwkJfQorCX0KKwltdXRl eF91bmxvY2soJm9mX3V3a19tdXRleCk7CisKKwlyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVS KTsKK30KKworc3RhdGljIHN0cnVjdCBtdHVfd2FrZXVwICpvZl91d2tfZ2V0KHN0cnVjdCBkZXZp Y2Vfbm9kZSAqbnAsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgbXR1X3dha2V1cCAqdXdrID0gTlVM TDsKKwlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIGFyZ3M7CisJaW50IHJldDsKKworCXJldCA9IG9m X3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdzKG5wLCAibWVkaWF0ZWssdXdrcyIsCisJCQkJIiNtZWRp YXRlayx1d2stY2VsbHMiLCBpbmRleCwgJmFyZ3MpOworCWlmIChyZXQpCisJCXJldHVybiBFUlJf UFRSKC1FTk9ERVYpOworCisJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKGFyZ3MubnApKSB7 CisJCWRldl93YXJuKHV3ay0+cGFyZW50LCAiUmVxdWVzdGVkIHV3ayBpcyBkaXNhYmxlZFxuIik7 CisJCXV3ayA9IEVSUl9QVFIoLUVOT0RFVik7CisJCWdvdG8gcHV0X25vZGU7CisJfQorCisJdXdr ID0gb2ZfdXdrX2dldF9mcm9tX3Byb3ZpZGVyKCZhcmdzKTsKKworcHV0X25vZGU6CisJb2Zfbm9k ZV9wdXQoYXJncy5ucCk7CisJcmV0dXJuIHV3azsKK30KKworc3RhdGljIHZvaWQgZGV2bV91d2tf cmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcykKK3sKKwlzdHJ1Y3QgbXR1X3dh a2V1cCAqdXdrID0gKihzdHJ1Y3QgbXR1X3dha2V1cCAqKilyZXM7CisKKwlpZiAoSVNfRVJSX09S X05VTEwodXdrKSkKKwkJcmV0dXJuOworCisJbW9kdWxlX3B1dCh1d2stPm9wcy0+b3duZXIpOwor CXB1dF9kZXZpY2UodXdrLT5wYXJlbnQpOworfQorCitzdHJ1Y3QgbXR1X3dha2V1cCAqZGV2bV9v Zl91d2tfZ2V0X2J5X2luZGV4KAorCQlzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vf bm9kZSAqbnAsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgbXR1X3dha2V1cCAqKnB0ciwgKnV3azsK KworCXB0ciA9IGRldnJlc19hbGxvYyhkZXZtX3V3a19yZWxlYXNlLCBzaXplb2YoKnB0ciksIEdG UF9LRVJORUwpOworCWlmICghcHRyKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXV3 ayA9IG9mX3V3a19nZXQobnAsIGluZGV4KTsKKwlpZiAoSVNfRVJSKHV3aykpIHsKKwkJZGV2cmVz X2ZyZWUocHRyKTsKKwkJcmV0dXJuIHV3azsKKwl9CisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHV3 ay0+b3BzLT5vd25lcikpIHsKKwkJZGV2cmVzX2ZyZWUocHRyKTsKKwkJcmV0dXJuIEVSUl9QVFIo LUVQUk9CRV9ERUZFUik7CisJfQorCisJZ2V0X2RldmljZSh1d2stPnBhcmVudCk7CisKKwkqcHRy ID0gdXdrOworCWRldnJlc19hZGQoZGV2LCBwdHIpOworCisJcmV0dXJuIHV3azsKK30KK0VYUE9S VF9TWU1CT0xfR1BMKGRldm1fb2ZfdXdrX2dldF9ieV9pbmRleCk7CisKK2ludCBtdHVfd2FrZXVw X2VuYWJsZShzdHJ1Y3QgbXR1X3dha2V1cCAqdXdrKQoreworCWludCByZXQgPSAwOworCisJaWYg KCF1d2spCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmdXdrLT5tdXRleCk7CisJaWYgKHV3 ay0+Y291bnQgPT0gMCAmJiB1d2stPm9wcy0+ZW5hYmxlKSB7CisJCXJldCA9IHV3ay0+b3BzLT5l bmFibGUodXdrKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2Vycih1d2stPnBhcmVudCwgInV3ayBl bmFibGUgZmFpbGVkKCVkKVxuIiwgcmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCSsrdXdr LT5jb3VudDsKKworb3V0OgorCW11dGV4X3VubG9jaygmdXdrLT5tdXRleCk7CisJcmV0dXJuIHJl dDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG10dV93YWtldXBfZW5hYmxlKTsKKworaW50IG10dV93 YWtldXBfZGlzYWJsZShzdHJ1Y3QgbXR1X3dha2V1cCAqdXdrKQoreworCWludCByZXQgPSAwOwor CisJaWYgKCF1d2spCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmdXdrLT5tdXRleCk7CisJ aWYgKHV3ay0+Y291bnQgPT0gMSAmJiB1d2stPm9wcy0+ZGlzYWJsZSkgeworCQlyZXQgPSAgdXdr LT5vcHMtPmRpc2FibGUodXdrKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2Vycih1d2stPnBhcmVu dCwgInV3ayBkaXNhYmxlIGZhaWxlZCglZClcbiIsIHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQor CX0KKwktLXV3ay0+Y291bnQ7CisKK291dDoKKwltdXRleF91bmxvY2soJnV3ay0+bXV0ZXgpOwor CXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtdHVfd2FrZXVwX2Rpc2FibGUpOwor CitzdGF0aWMgc3RydWN0IG10a191d2tfaW5zdGFuY2UgKnRvX213a19pbnN0KHN0cnVjdCBtdHVf d2FrZXVwICp1d2spCit7CisJcmV0dXJuIHV3ayA/IGNvbnRhaW5lcl9vZih1d2ssIHN0cnVjdCBt dGtfdXdrX2luc3RhbmNlLCB1d2spIDogTlVMTDsKK30KKworc3RhdGljIGludCBtd2tfdjFfZW5h YmxlKHN0cnVjdCBtdGtfdXdrICptd2ssIHN0cnVjdCBtdGtfdXdrX2luc3RhbmNlICppbnN0KQor eworCXN0cnVjdCByZWdtYXAgKndrYyA9IG13ay0+d2tjOworCXUzMiB2YWw7CisKKwkvKiBPbmx5 IElQLVNMRUVQIGlzIHN1cHBvcnRlZCAqLworCWlmIChpbnN0LT50eXBlICE9IE1UVV9XS19JUF9T TEVFUCkKKwkJcmV0dXJuIDA7CisKKwlyZWdtYXBfcmVhZCh3a2MsIFBFUklfV0tfQ1RSTDEsICZ2 YWwpOworCXZhbCAmPSB+KFdDMV9JU19QIHwgV0MxX0lTX0MoMHhmKSk7CisJdmFsIHw9IFdDMV9J U19FTiB8IFdDMV9JU19DKDB4OCk7CisJcmVnbWFwX3dyaXRlKHdrYywgUEVSSV9XS19DVFJMMSwg dmFsKTsKKwlyZWdtYXBfcmVhZCh3a2MsIFBFUklfV0tfQ1RSTDEsICZ2YWwpOworCWRldl9kYmco bXdrLT5kZXYsICIlczogV0tfQ1RSTDE9JSN4LCB0eXBlPSVkXG4iLAorCQlfX2Z1bmNfXywgdmFs LCBpbnN0LT50eXBlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG13a192MV9kaXNh YmxlKHN0cnVjdCBtdGtfdXdrICptd2ssIHN0cnVjdCBtdGtfdXdrX2luc3RhbmNlICppbnN0KQor eworCWlmIChpbnN0LT50eXBlID09IE1UVV9XS19JUF9TTEVFUCkKKwkJcmVnbWFwX3VwZGF0ZV9i aXRzKG13ay0+d2tjLCBQRVJJX1dLX0NUUkwxLCBXQzFfSVNfRU4sIDApOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgbXdrX3YyX2VuYWJsZShzdHJ1Y3QgbXRrX3V3ayAqbXdrLCBzdHJ1 Y3QgbXRrX3V3a19pbnN0YW5jZSAqaW5zdCkKK3sKKwlzdHJ1Y3QgcmVnbWFwICp3a2MgPSBtd2st PndrYzsKKwl1MzIgcmJhc2UgPSBpbnN0LT5yZWdfYmFzZTsKKwl1MzIgdmFsOworCisJcmVnbWFw X3JlYWQod2tjLCByYmFzZSArIFBFUklfU1NVU0JfU1BNX0NUUkwsICZ2YWwpOworCXN3aXRjaCAo aW5zdC0+dHlwZSkgeworCWNhc2UgTVRVX1dLX0lQX1NMRUVQOgorCQl2YWwgfD0gU1NDX0lQX1NM RUVQX0VOOworCQlicmVhazsKKwljYXNlIE1UVV9XS19MSU5FX1NUQVRFOgorCQl2YWwgfD0gU1ND X0xJTkVfU1RBVEVfRU4gfCBTU0NfTElORV9TVEFURV9DSEc7CisJCWJyZWFrOworCWRlZmF1bHQ6 CisJCS8qIGNoZWNrZWQgYnkgeGxhdGUsIGlnbm9yZSB0aGUgZXJyb3IgKi8KKwkJYnJlYWs7CisJ fQorCXZhbCB8PSBTU0NfU1BNX0lOVF9FTjsKKwlyZWdtYXBfd3JpdGUod2tjLCByYmFzZSArIFBF UklfU1NVU0JfU1BNX0NUUkwsIHZhbCk7CisJcmVnbWFwX3JlYWQod2tjLCByYmFzZSArIFBFUklf U1NVU0JfU1BNX0NUUkwsICZ2YWwpOworCWRldl9kYmcobXdrLT5kZXYsICIlczogQ1RSTD0lI3gs IHR5cGU9JWRcbiIsCisJCV9fZnVuY19fLCB2YWwsIGluc3QtPnR5cGUpOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgbXdrX3YyX2Rpc2FibGUoc3RydWN0IG10a191d2sgKm13aywgc3Ry dWN0IG10a191d2tfaW5zdGFuY2UgKmluc3QpCit7CisJc3RydWN0IHJlZ21hcCAqd2tjID0gbXdr LT53a2M7CisJdTMyIHJiYXNlID0gaW5zdC0+cmVnX2Jhc2U7CisJdTMyIHZhbDsKKworCXJlZ21h cF9yZWFkKHdrYywgcmJhc2UgKyBQRVJJX1NTVVNCX1NQTV9DVFJMLCAmdmFsKTsKKwlzd2l0Y2gg KGluc3QtPnR5cGUpIHsKKwljYXNlIE1UVV9XS19JUF9TTEVFUDoKKwkJdmFsICY9IH5TU0NfSVBf U0xFRVBfRU47CisJCWJyZWFrOworCWNhc2UgTVRVX1dLX0xJTkVfU1RBVEU6CisJCXZhbCAmPSB+ KFNTQ19MSU5FX1NUQVRFX0VOIHwgU1NDX0xJTkVfU1RBVEVfQ0hHKTsKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJYnJlYWs7CisJfQorCXZhbCAmPSB+U1NDX1NQTV9JTlRfRU47CisJcmVnbWFwX3dy aXRlKHdrYywgcmJhc2UgKyBQRVJJX1NTVVNCX1NQTV9DVFJMLCB2YWwpOworCWRldl9kYmcobXdr LT5kZXYsICIlczogdHlwZT0lZFxuIiwgX19mdW5jX18sIGluc3QtPnR5cGUpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgbXdrX2VuYWJsZShzdHJ1Y3QgbXR1X3dha2V1cCAqdXdrKQor eworCXN0cnVjdCBtdGtfdXdrX2luc3RhbmNlICppbnN0ID0gdG9fbXdrX2luc3QodXdrKTsKKwlz dHJ1Y3QgbXRrX3V3ayAqbXdrID0gZGV2X2dldF9kcnZkYXRhKHV3ay0+cGFyZW50KTsKKwlpbnQg cmV0ID0gMDsKKworCXN3aXRjaCAobXdrLT5kYXRhLT52ZXJzKSB7CisJY2FzZSBNVEtfVVdLX1Yx OgorCQlyZXQgPSBtd2tfdjFfZW5hYmxlKG13aywgaW5zdCk7CisJCWJyZWFrOworCWNhc2UgTVRL X1VXS19WMjoKKwkJcmV0ID0gbXdrX3YyX2VuYWJsZShtd2ssIGluc3QpOworCQlicmVhazsKKwlk ZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtd2tf ZGlzYWJsZShzdHJ1Y3QgbXR1X3dha2V1cCAqdXdrKQoreworCXN0cnVjdCBtdGtfdXdrX2luc3Rh bmNlICppbnN0ID0gdG9fbXdrX2luc3QodXdrKTsKKwlzdHJ1Y3QgbXRrX3V3ayAqbXdrID0gZGV2 X2dldF9kcnZkYXRhKHV3ay0+cGFyZW50KTsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAobXdr LT5kYXRhLT52ZXJzKSB7CisJY2FzZSBNVEtfVVdLX1YxOgorCQlyZXQgPSBtd2tfdjFfZGlzYWJs ZShtd2ssIGluc3QpOworCQlicmVhazsKKwljYXNlIE1US19VV0tfVjI6CisJCXJldCA9IG13a192 Ml9kaXNhYmxlKG13aywgaW5zdCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0K KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG10a191d2tfaW5zdGFuY2UgKm13a19p bnN0X2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAs CisJCWNvbnN0IHN0cnVjdCBtdHVfd2FrZXVwX29wcyAqb3BzKQoreworCXN0cnVjdCBtdGtfdXdr X2luc3RhbmNlICppbnN0OworCXN0cnVjdCBtdHVfd2FrZXVwICp1d2s7CisJdTMyIGJ1ZlsyXTsK KwlpbnQgcmV0OworCisJaW5zdCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaW5zdCksIEdG UF9LRVJORUwpOworCWlmICghaW5zdCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwly ZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShucCwgInJlZyIsIGJ1ZiwgQVJSQVlfU0la RShidWYpKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbCB0byByZWFkIHJlZ1xu Iik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJaW5zdC0+cmVnX2Jhc2UgPSBidWZb MF07CisJaW5zdC0+cmVnX2xlbiA9IGJ1ZlsxXTsKKwl1d2sgPSAmaW5zdC0+dXdrOworCXV3ay0+ bm9kZSA9IG5wOworCXV3ay0+b3BzID0gb3BzOworCXV3ay0+cGFyZW50ID0gZGV2OworCW11dGV4 X2luaXQoJnV3ay0+bXV0ZXgpOworCWRldl9kYmcoZGV2LCAicmVnOiAlI3gvJSN4XG4iLCBpbnN0 LT5yZWdfYmFzZSwgaW5zdC0+cmVnX2xlbik7CisKKwlyZXR1cm4gaW5zdDsKK30KKworc3RhdGlj IHN0cnVjdCBtdHVfd2FrZXVwICptd2tfeGxhdGUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1 Y3Qgb2ZfcGhhbmRsZV9hcmdzICphcmdzKQoreworCXN0cnVjdCBtdGtfdXdrICptd2sgPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbXRrX3V3a19pbnN0YW5jZSAqaW5zdCA9IE5VTEw7 CisJc3RydWN0IGRldmljZV9ub2RlICp1d2tfbnAgPSBhcmdzLT5ucDsKKwlpbnQgaW5kZXg7CisK KwlpZiAoYXJncy0+YXJnc19jb3VudCAhPSAxKSB7CisJCWRldl9lcnIoZGV2LCAiaW52YWxpZCBu dW1iZXIgb2YgY2VsbHMgaW4gdXdrIHByb3BlcnR5XG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJ TlZBTCk7CisJfQorCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbXdrLT5udW1faW5zdDsgaW5k ZXgrKykKKwkJaWYgKHV3a19ucCA9PSBtd2stPmluc3RbaW5kZXhdLT51d2subm9kZSkgeworCQkJ aW5zdCA9IG13ay0+aW5zdFtpbmRleF07CisJCQlicmVhazsKKwkJfQorCisJaWYgKCFpbnN0KSB7 CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGZpbmQgYXBwcm9wcmlhdGUgdXdrXG4iKTsKKwkJ cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJaW5zdC0+dHlwZSA9IGFyZ3MtPmFyZ3Nb MF07CisJaWYgKCEoaW5zdC0+dHlwZSA9PSBNVFVfV0tfSVBfU0xFRVAgfHwKKwkgICAgICBpbnN0 LT50eXBlID09IE1UVV9XS19MSU5FX1NUQVRFKSkgeworCQlkZXZfZXJyKGRldiwgInVuc3VwcG9y dGVkIHV3ayB0eXBlPSVkXG4iLCBpbnN0LT50eXBlKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZB TCk7CisJfQorCisJcmV0dXJuICZpbnN0LT51d2s7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg bXR1X3dha2V1cF9vcHMgbXdrX29wcyA9IHsKKwkuZW5hYmxlID0gbXdrX2VuYWJsZSwKKwkuZGlz YWJsZSA9IG13a19kaXNhYmxlLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBtdGtfdXdrX3BkYXRhIG13a192MV9wZGF0YSA9IHsKKwkudmVycyA9IE1U S19VV0tfVjEsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a191d2tfcGRhdGEgbXdrX3Yy X3BkYXRhID0geworCS52ZXJzID0gTVRLX1VXS19WMiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIG13a19pZF90YWJsZVtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVk aWF0ZWssdXNiLXdrLXYxIiwgLmRhdGEgPSAmbXdrX3YxX3BkYXRhIH0sCisJeyAuY29tcGF0aWJs ZSA9ICJtZWRpYXRlayx1c2Itd2stdjIiLCAuZGF0YSA9ICZtd2tfdjJfcGRhdGEgfSwKKwl7IH0s Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXdrX2lkX3RhYmxlKTsKKworc3RhdGljIGlu dCBtdGtfdXdrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0 IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2 LT5vZl9ub2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGRfbnA7CisJc3RydWN0IG10dV93 YWtldXBfcHJvdmlkZXIgKnByb3ZpZGVyOworCXN0cnVjdCBtdGtfdXdrICptd2s7CisJaW50IGlu ZGV4OworCWludCByZXQ7CisKKwltd2sgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm13ayks IEdGUF9LRVJORUwpOworCWlmICghbXdrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW13ay0+ZGF0 YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOworCWlmICghbXdrLT5kYXRhKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCW13ay0+bnVtX2luc3QgPSBvZl9nZXRfY2hpbGRfY291bnQobnAp OworCW13ay0+aW5zdCA9IGRldm1fa2NhbGxvYyhkZXYsIG13ay0+bnVtX2luc3QsCisJCQkJICBz aXplb2YoKm13ay0+aW5zdCksIEdGUF9LRVJORUwpOworCWlmICghbXdrLT5pbnN0KQorCQlyZXR1 cm4gLUVOT01FTTsKKworCW13ay0+ZGV2ID0gZGV2OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBk ZXYsIG13ayk7CisKKwltd2stPndrYyA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUo bnAsICJtZWRpYXRlayx3a2MiKTsKKwlpZiAoSVNfRVJSKG13ay0+d2tjKSkgeworCQlkZXZfZXJy KGRldiwgImZhaWwgdG8gZ2V0IG1lZGlhdGVrLHdrYyBzeXNjb25cbiIpOworCQlyZXR1cm4gUFRS X0VSUihtd2stPndrYyk7CisJfQorCisJaW5kZXggPSAwOworCWZvcl9lYWNoX2NoaWxkX29mX25v ZGUobnAsIGNoaWxkX25wKSB7CisJCXN0cnVjdCBtdGtfdXdrX2luc3RhbmNlICppbnN0OworCisJ CWluc3QgPSBtd2tfaW5zdF9jcmVhdGUoZGV2LCBjaGlsZF9ucCwgJm13a19vcHMpOworCQlpZiAo SVNfRVJSKGluc3QpKSB7CisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgbXdrIGlu c3RhbmNlXG4iKTsKKwkJCXJldCA9IFBUUl9FUlIoaW5zdCk7CisJCQlnb3RvIHB1dF9jaGlsZDsK KwkJfQorCisJCW13ay0+aW5zdFtpbmRleF0gPSBpbnN0OworCQlpbmRleCsrOworCX0KKworCXBy b3ZpZGVyID0gb2ZfdXdrX3Byb3ZpZGVyX2FkZChkZXYsIG13a194bGF0ZSk7CisKKwlyZXR1cm4g UFRSX0VSUl9PUl9aRVJPKHByb3ZpZGVyKTsKKworcHV0X2NoaWxkOgorCW9mX25vZGVfcHV0KGNo aWxkX25wKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a191d2tfcmVtb3ZlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBk ZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCisJb2Zf dXdrX3Byb3ZpZGVyX2RlbChucCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxh dGZvcm1fZHJpdmVyIG10a191d2tfZHJ2ID0geworCS5wcm9iZSA9IG10a191d2tfcHJvYmUsCisJ LnJlbW92ZSA9IG10a191d2tfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm10a191 d2siLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXdrX2lk X3RhYmxlLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG10a191d2tfZHJ2KTsK K01PRFVMRV9BVVRIT1IoIkNodW5mZW5nIFl1biA8Y2h1bmZlbmcueXVuQG1lZGlhdGVrLmNvbT4i KTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWFUZWsgVVNCIFdha2V1cCBkcml2ZXIiKTsKK01P RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3Mv c29jL21lZGlhdGVrLHVzYi13YWtldXAuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3Mvc29jL21lZGlh dGVrLHVzYi13YWtldXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDYx Nzk1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9zb2MvbWVkaWF0ZWss dXNiLXdha2V1cC5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcg TWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBDaHVuZmVuZyBZdW4gPGNodW5mZW5nLnl1bkBtZWRp YXRlay5jb20+CisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyAqCisg Ki8KKworI2lmbmRlZiBfX0RUX0JJTkRJTkdTX01US19VU0JfV0tfSF9fCisjZGVmaW5lIF9fRFRf QklORElOR1NfTVRLX1VTQl9XS19IX18KKworI2RlZmluZSBNVFVfV0tfSVBfU0xFRVAJMQorI2Rl ZmluZSBNVFVfV0tfTElORV9TVEFURQkyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9s aW51eC9zb2MvbWVkaWF0ZWsvdXNiLXdha2V1cC5oIGIvaW5jbHVkZS9saW51eC9zb2MvbWVkaWF0 ZWsvdXNiLXdha2V1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2OTcz NjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NvYy9tZWRpYXRlay91c2Itd2Fr ZXVwLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNyBNZWRpYVRl ayBJbmMuCisgKiBBdXRob3I6IENodW5mZW5nIFl1biA8Y2h1bmZlbmcueXVuQG1lZGlhdGVrLmNv bT4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorICoKKyAqLworCisj aWZuZGVmIF9fTVRLX1VTQl9XQUtFVVBfSF9fCisjZGVmaW5lIF9fTVRLX1VTQl9XQUtFVVBfSF9f CisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNp bmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisKK3N0cnVjdCBt dHVfd2FrZXVwOworCisvKioKKyAqIHN0cnVjdCBtdHVfd2FrZXVwX29wcyAtIHNldCBvZiBmdW5j dGlvbiBwb2ludGVycyBmb3IgcGVyZm9ybWluZworICogICAgbXR1X3dha2V1cCBvcGVyYXRpb25z CisgKiBAZW5hYmxlOiBlbmFibGUgYSB0eXBlIG9mIHVzYiB3YWtldXAgd2hlbiBzeXN0ZW0gc3Vz cGVuZAorICogQGRpc2FibGU6IGRpc2FibGUgYSB0eXBlIG9mIHVzYiB3YWtldXAgd2hlbiBzeXN0 ZW0gcmVzdW1lCisgKiBAb3duZXI6IHRoZSBtb2R1bGUgb3duZXIgdXNpbmcgdGhlIG9wcworICov CitzdHJ1Y3QgbXR1X3dha2V1cF9vcHMgeworCWludAkoKmVuYWJsZSkoc3RydWN0IG10dV93YWtl dXAgKnV3ayk7CisJaW50CSgqZGlzYWJsZSkoc3RydWN0IG10dV93YWtldXAgKnV3ayk7CisJc3Ry dWN0IG1vZHVsZSAqb3duZXI7Cit9OworCisvKioKKyAqIHN0cnVjdCBtdHVfd2FrZXVwIC0gcmVw cmVzZW50cyB0aGUgTWVkaWFUZWsgVVNCIHdha2V1cCBkZXZpY2UKKyAqIEBwYXJlbnQ6IHRoZSBw YXJlbnQgZGV2aWNlIG9mIHRoZSBtdHVfd2FrZXVwCisgKiBAbm9kZTogYXNzb2NpYXRlZCBkZXZp Y2UgdHJlZSBub2RlCisgKiBAb3BzOiBmdW5jdGlvbiBwb2ludGVycyBmb3IgcGVyZm9ybWluZyBt dHVfd2FrZXVwIG9wZXJhdGlvbnMKKyAqIEBtdXRleDogbXV0ZXggdG8gcHJvdGVjdCBAb3BzCisg KiBAY291bnQ6IHVzZWQgdG8gcHJvdGVjdCB3aGVuIHRoZSBtdHVfd2FrZXVwIGlzIHVzZWQgYnkg bXVsdGlwbGUgY29uc3VtZXJzCisgKi8KK3N0cnVjdCBtdHVfd2FrZXVwIHsKKwlzdHJ1Y3QgZGV2 aWNlICpwYXJlbnQ7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCWNvbnN0IHN0cnVjdCBt dHVfd2FrZXVwX29wcyAqb3BzOworCXN0cnVjdCBtdXRleCBtdXRleDsKKwlpbnQgY291bnQ7Cit9 OworCisvKioKKyAqIHN0cnVjdCBtdHVfd2FrZXVwX3Byb3ZpZGVyIC0gcmVwcmVzZW50cyB0aGUg bXR1X3dha2V1cCBwcm92aWRlcgorICogQGRldjogdGhlIHBhcmVudCBkZXZpY2Ugb2YgdGhlIG10 dV93YWtldXAKKyAqIEBsaXN0OiB0byBtYWludGFpbiBhIGxpbmtlZCBsaXN0IG9mIG10dV93YWtl dXAgcHJvdmlkZXJzCisgKiBAb2Zfbm9kZTogYXNzb2NpYXRlZCBkZXZpY2UgdHJlZSBub2RlCisg KiBAb2ZfeGxhdGU6IGZ1bmN0aW9uIHBvaW50ZXIgdG8gb2J0YWluIG10dV93YWtldXAgaW5zdGFu Y2UgZnJvbQorICoJaXRzIHRyZWUgbm9kZQorICovCitzdHJ1Y3QgbXR1X3dha2V1cF9wcm92aWRl ciB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKm9mX25vZGU7CisJc3RydWN0IG10dV93YWtldXAgKigqb2ZfeGxhdGUp KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqYXJncyk7Cit9 OworCisjaWYgSVNfRU5BQkxFRChDT05GSUdfTVRLX1VXSykKK3N0cnVjdCBtdHVfd2FrZXVwICpk ZXZtX29mX3V3a19nZXRfYnlfaW5kZXgoCisJc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5wLCBpbnQgaW5kZXgpOworaW50IG10dV93YWtldXBfZW5hYmxlKHN0cnVjdCBt dHVfd2FrZXVwICp1d2spOworaW50IG10dV93YWtldXBfZGlzYWJsZShzdHJ1Y3QgbXR1X3dha2V1 cCAqdXdrKTsKKworI2Vsc2UKK3N0cnVjdCBtdHVfd2FrZXVwICpkZXZtX29mX3V3a19nZXRfYnlf aW5kZXgoCisJc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBpbnQg aW5kZXgpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cit9CisKK2ludCBtdHVfd2FrZXVw X2VuYWJsZShzdHJ1Y3QgbXR1X3dha2V1cCAqdXdrKQoreworCXJldHVybiB1d2sgPyAtRU5PREVW IDogMDsKK30KKworaW50IG10dV93YWtldXBfZGlzYWJsZShzdHJ1Y3QgbXR1X3dha2V1cCAqdXdr KQoreworCXJldHVybiB1d2sgPyAtRU5PREVWIDogMDsKK30KKyNlbmRpZgorCisjZW5kaWYJLyog X19NVEtfVVNCX1dBS0VVUF9IX18gKi8K