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: [PATCHv2] phy: mapphone-mdm6600: Add USB PHY driver for MDM6600 on Droid 4 From: Tony Lindgren Message-Id: <20180301035057.37584-1-tony@atomide.com> Date: Wed, 28 Feb 2018 19:50:57 -0800 To: Kishon Vijay Abraham I Cc: linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, linux-omap@vger.kernel.org, devicetree@vger.kernel.org, Mark Rutland , Marcel Partap , Michael Scott , Rob Herring , Sebastian Reichel List-ID: TGV0J3MgYWRkIHN1cHBvcnQgZm9yIHRoZSBHUElPIGNvbnRyb2xsZWQgVVNCIFBIWSBvbiB0aGUg TURNNjYwMCBtb2RlbS4KSXQgaXMgdXNlZCBvbiBzb21lIE1vdG9yb2xhIE1hcHBob25lIHNlcmll cyBvZiBwaG9uZXMgYW5kIHRhYmxldHMgc3VjaAphcyBEcm9pZCA0LgoKVGhlIE1ETTY2MDAgaXMg aGFyZHdpcmVkIHRvIHRoZSBmaXJzdCBPSENJIHBvcnQgaW4gdGhlIERyb2lkIDQgY2FzZSwgYW5k CmlzIGNvbnRyb2xsZWQgYnkgc2V2ZXJhbCBHUElPcy4gVGhlIFVTQiBQSFkgaXMgaW50ZWdyYXRl ZCBpbnRvIHRoZSBNRE02NjAwCmRldmljZSBpdCBzZWVtcy4gV2Uga25vdyB0aGlzIGFzIHdlIGdl dCBMMyBlcnJvcnMgZnJvbSBvbWFwLXVzYi1ob3N0IGlmCnRyeWluZyB0byB1c2UgdGhlIFBIWSBi ZWZvcmUgTURNNjYwMCBpcyBjb25maWd1cmVkLgoKVGhlIEdQSU9zIGNvbnRyb2xsaW5nIE1ETTY2 MDAgYXJlIHVzZWQgdG8gcG93ZXIgZGV2aWNlIG9uIGFuZCBvZmYsIHRvCmNvbmZpZ3VyZSB0aGUg VVNCIHN0YXJ0LXVwIG1vZGUgKG5vcm1hbCBtb2RlIHZlcnN1cyBVU0IgZmxhc2hpbmcpLCBhbmQK dGhleSBhbHNvIHRlbGwgdGhlIHN0YXRlIG9mIHRoZSBNRE02NjAwIGRldmljZS4KClRoZSB0d28g c3RhcnQtdXAgbW9kZSBHUElPcyBhcmUgZHVhbC1wdXJwb3NlZCBhbmQgdXNlZCBmb3Igb3V0IG9m IGJhbmQKKE9PQikgd2FrZS11cCBmb3IgVVNCIGFuZCBUUyAyNy4wMTAgc2VyaWFsIG11eC4gQnV0 IHdlIG5lZWQgdG8gY29uZmlndXJlCnRoZSBVU0Igc3RhcnQtdXAgbW9kZSBmaXJzdCB0byBnZXQg TURNNjYwMCBib290ZWQgaW4gdGhlIHJpZ2h0IG1vZGUgdG8KYmUgdXNhYmxlIGluIHRoZSBmaXJz dCBwbGFjZS4KCk5vdGUgdGhhdCB0aGUgTW90b3JvbGEgTWFwcGhvbmUgTGludXgga2VybmVsIHRy ZWUgaGFzIGEgInJhZGlvLWN0cmwiCmRyaXZlciBmb3IgbW9kZW1zLiBCdXQgaXQgcmVhbGx5IGRv ZXMgbm90IGNvbnRyb2wgdGhlIHJhZGlvIGF0IGFsbCwgaXQKanVzdCBjb250cm9scyB0aGUgbW9k ZW0gcG93ZXIgYW5kIHN0YXJ0LXVwIG1vZGUgZm9yIFVTQi4gU28gSSBjYW1lIHRvCnRoZSBjb25j bHVzaW9uIHRoYXQgd2UncmUgYmV0dGVyIG9mZiBoYXZpbmcgdGhpcyBkb25lIGluIHRoZSBVU0Ig UEhZCmRyaXZlci4gRm9yIGFkZGluZyBzdXBwb3J0IGZvciBVU0IgZmxhc2hpbmcgbW9kZSwgd2Ug Y2FuIGxhdGVyIG9uIGFkZAphIGtlcm5lbCBtb2R1bGUgb3B0aW9uIGZvciBmbGFzaF9tb2RlPTEg b3Igc29tZXRoaW5nIHNpbWlsYXIuCgpBbHNvIG5vdGUgdGhhdCBjdXJyZW50bHkgdGhlcmUgaXMg bm8gUE0gcnVudGltZSBzdXBwb3J0IGZvciB0aGUgT0hDSQpvbiBvbWFwIHZhcmlhbnQgU29Dcy4g U28gZm9yIGxvdyhlcikgcG93ZXIgaWRsZSBzdGF0ZXMsIGN1cnJlbnR5IGJvdGgKb2hjaS1wbGF0 Zm9ybSBhbmQgcGh5LW1hcHBob25lLW1kbTY2MDAgbXVzdCBiZSB1bmxvYWRlZCBvciB1bmJvdW5k LgoKRm9yIHJlZmVyZW5jZSBoZXJlIGlzIHdoYXQgSSBtZWFzdXJlZCBmb3IgdG90YWwgcG93ZXIg Y29uc3VtcHRpb24gb24KYW4gaWRsZSBEcm9pZCA0IHdpdGggYW5kIHdpdGhvdXQgVVNCIHJlbGF0 ZWQgTURNNjYwMCBtb2R1bGVzOgoKaWRsZSBsY2Qgb2ZmCXBoeS1tYXBwaG9uZS1tZG02NjAwCW9o Y2ktcGxhdGZvcm0KMTUzbVcJCTI4NG1XCQkJMzQ0bVcKClNvIGl0IHNlZW1zIHRoYXQgTURNNjYw MCBpcyBjdXJyZW50bHkgbm90IHlldCBpZGxpbmcgZXZlbiB3aXRoIGl0J3MKcmFkaW8gdHVybmVk IG9mZiwgYnV0IHRoYXQncyBzb21ldGhpbmcgdGhhdCBpcyBiZXlvbmQgdGhlIGNvbnRyb2wgb2YK dGhpcyBVU0IgUEhZIGRyaXZlci4gVGhpcyBwYXRjaCBkb2VzIGdldCB1cyB0byB0aGUgcG9pbnQg d2hlcmUgbW9kZW0KZGF0YSBhbmQgR1BTIGFyZSB1c2FibGUgd2l0aCBsaWJxbWkgYW5kIE1vZGVt TWFuYWdlciBmb3IgZXhhbXBsZS4KVm9pY2UgY2FsbHMgbmVlZCBtb3JlIGF1ZGlvIGRyaXZlciB3 b3JrLgoKQ2M6IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnCkNjOiBNYXJrIFJ1dGxhbmQgPG1h cmsucnV0bGFuZEBhcm0uY29tPgpDYzogTWFyY2VsIFBhcnRhcCA8bXBhcnRhcEBnbXgubmV0PgpD YzogTWljaGFlbCBTY290dCA8bWljaGFlbC5zY290dEBsaW5hcm8ub3JnPgpDYzogUm9iIEhlcnJp bmcgPHJvYmgrZHRAa2VybmVsLm9yZz4KQ2M6IFNlYmFzdGlhbiBSZWljaGVsIDxzcmVAa2VybmVs Lm9yZz4KU2lnbmVkLW9mZi1ieTogVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KLS0t CgpDaGFuZ2VzIHNpbmNlIHYxOgotIEZpeGVkIHVwIGlzc3VlcyBub3RpY2VkIGJ5IFJvYiBhbmQg U2ViYXN0aWFuCi0gSW1wbGVtZW50ZWQgd2FrZSBpcnEgaGFuZGxlciAoZm9yIGRlYnVnIHVzZSBv bmx5IGZvciBub3cpCi0gSW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcgYmFzZWQgb24gbW9yZSB0ZXN0 aW5nCgotLS0KIC4uLi9iaW5kaW5ncy9waHkvcGh5LW1hcHBob25lLW1kbTY2MDAudHh0ICAgICAg ICAgIHwgIDMwICsrCiBkcml2ZXJzL3BoeS9tb3Rvcm9sYS9LY29uZmlnICAgICAgICAgICAgICAg ICAgICAgICB8ICAgOSArCiBkcml2ZXJzL3BoeS9tb3Rvcm9sYS9NYWtlZmlsZSAgICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL3BoeS9tb3Rvcm9sYS9waHktbWFwcGhvbmUtbWRt NjYwMC5jICAgICAgICB8IDU1NiArKysrKysrKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdl ZCwgNTk2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2Rl dmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1tYXBwaG9uZS1tZG02NjAwLnR4dAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvcGh5L21vdG9yb2xhL3BoeS1tYXBwaG9uZS1tZG02NjAwLmMKCmRp ZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1tYXBw aG9uZS1tZG02NjAwLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkv cGh5LW1hcHBob25lLW1kbTY2MDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251 bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktbWFwcGhv bmUtbWRtNjYwMC50eHQKQEAgLTAsMCArMSwzMCBAQAorRGV2aWNlIHRyZWUgYmluZGluZyBkb2N1 bWVudGF0aW9uIGZvciBNb3Rvcm9sYSBNYXBwaG9uZSBNRE02NjAwIFVTQiBQSFkKKworUmVxdWly ZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZQkJTXVzdCBiZSAibW90b3JvbGEsbWFwcGhvbmUt bWRtNjYwMCIKKy0gZW5hYmxlLWdwaW9zCQlHUElPIHRvIGVuYWJsZSB0aGUgVVNCIFBIWQorLSBw b3dlci1ncGlvcwkJR1BJTyB0byBwb3dlciBvbiB0aGUgZGV2aWNlCistIHJlc2V0LWdwaW9zCQlH UElPIHRvIHJlc2V0IHRoZSBkZXZpY2UKKy0gbW90b3JvbGEsbW9kZS1ncGlvcwlUd28gR1BJT3Mg dG8gY29uZmlndXJlIE1ETTY2MDAgVVNCIHN0YXJ0LXVwIG1vZGUgZm9yCisJCQlub3JtYWwgbW9k ZSB2ZXJzdXMgVVNCIGZsYXNoaW5nIG1vZGUKKy0gbW90b3JvbGEsY21kLWdwaW9zCVRocmVlIEdQ SU9zIHRvIGNvbnRyb2wgdGhlIHBvd2VyIHN0YXRlIG9mIHRoZSBNRE02NjAwCistIG1vdG9yb2xh LHN0YXR1cy1ncGlvcwlUaHJlZSBHUElPcyB0byByZWFkIHRoZSBwb3dlciBzdGF0ZSBvZiB0aGUg TURNNjYwMAorCitFeGFtcGxlOgorCit1c2ItcGh5IHsKKwljb21wYXRpYmxlID0gIm1vdG9yb2xh LG1hcHBob25lLW1kbTY2MDAiOworCWVuYWJsZS1ncGlvcyA9IDwmZ3BpbzMgMzEgR1BJT19BQ1RJ VkVfTE9XPjsKKwlwb3dlci1ncGlvcyA9IDwmZ3BpbzIgMjIgR1BJT19BQ1RJVkVfSElHSD47CisJ cmVzZXQtZ3Bpb3MgPSA8JmdwaW8yIDE3IEdQSU9fQUNUSVZFX0hJR0g+OworCW1vdG9yb2xhLG1v ZGUtZ3Bpb3MgPSA8JmdwaW81IDIwIEdQSU9fQUNUSVZFX0hJR0g+LAorCQkJICAgICAgPCZncGlv NSAyMSBHUElPX0FDVElWRV9ISUdIPjsKKwltb3Rvcm9sYSxjbWQtZ3Bpb3MgPSA8JmdwaW80IDcg R1BJT19BQ1RJVkVfSElHSD4sCisJCQkgICAgIDwmZ3BpbzQgOCBHUElPX0FDVElWRV9ISUdIPiwK KwkJCSAgICAgPCZncGlvNSAxNCBHUElPX0FDVElWRV9ISUdIPjsKKwltb3Rvcm9sYSxzdGF0dXMt Z3Bpb3MgPSA8JmdwaW8yIDIwIEdQSU9fQUNUSVZFX0hJR0g+LAorCQkJCTwmZ3BpbzIgMjEgR1BJ T19BQ1RJVkVfSElHSD4sCisJCQkJPCZncGlvMiAyMyBHUElPX0FDVElWRV9ISUdIPjsKKwkjcGh5 LWNlbGxzID0gPDA+OworfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvbW90b3JvbGEvS2Nv bmZpZyBiL2RyaXZlcnMvcGh5L21vdG9yb2xhL0tjb25maWcKLS0tIGEvZHJpdmVycy9waHkvbW90 b3JvbGEvS2NvbmZpZworKysgYi9kcml2ZXJzL3BoeS9tb3Rvcm9sYS9LY29uZmlnCkBAIC0xMCwz ICsxMCwxMiBAQCBjb25maWcgUEhZX0NQQ0FQX1VTQgogCWhlbHAKIAkgIEVuYWJsZSB0aGlzIGZv ciBVU0IgdG8gd29yayBvbiBNb3Rvcm9sYSBwaG9uZXMgYW5kIHRhYmxldHMKIAkgIHN1Y2ggYXMg RHJvaWQgNC4KKworY29uZmlnIFBIWV9NQVBQSE9ORV9NRE02NjAwCisJdHJpc3RhdGUgIk1vdG9y b2xhIE1hcHBob25lIE1ETTY2MDAgbW9kZW0gVVNCIFBIWSBkcml2ZXIiCisJZGVwZW5kcyBvbiBP RiAmJiBVU0JfU1VQUE9SVAorCXNlbGVjdCBHRU5FUklDX1BIWQorCXNlbGVjdCBVU0JfUEhZCisJ aGVscAorCSAgRW5hYmxlIHRoaXMgZm9yIE1ETTY2MDAgVVNCIG1vZGVtIHRvIHdvcmsgb24gTW90 b3JvbGEgcGhvbmVzCisJICBhbmQgdGFibGV0cyBzdWNoIGFzIERyb2lkIDQuCmRpZmYgLS1naXQg YS9kcml2ZXJzL3BoeS9tb3Rvcm9sYS9NYWtlZmlsZSBiL2RyaXZlcnMvcGh5L21vdG9yb2xhL01h a2VmaWxlCi0tLSBhL2RyaXZlcnMvcGh5L21vdG9yb2xhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMv cGh5L21vdG9yb2xhL01ha2VmaWxlCkBAIC0zLDMgKzMsNCBAQAogIwogCiBvYmotJChDT05GSUdf UEhZX0NQQ0FQX1VTQikJCSs9IHBoeS1jcGNhcC11c2Iubworb2JqLSQoQ09ORklHX1BIWV9NQVBQ SE9ORV9NRE02NjAwKQkrPSBwaHktbWFwcGhvbmUtbWRtNjYwMC5vCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3BoeS9tb3Rvcm9sYS9waHktbWFwcGhvbmUtbWRtNjYwMC5jIGIvZHJpdmVycy9waHkvbW90 b3JvbGEvcGh5LW1hcHBob25lLW1kbTY2MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvcGh5L21vdG9yb2xhL3BoeS1tYXBwaG9uZS1tZG02NjAwLmMK QEAgLTAsMCArMSw1NTYgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisv KgorICogTW90b3JvbGEgTWFwcGhvbmUgTURNNjYwMCBtb2RlbSBHUElPIGNvbnRyb2xsZWQgVVNC IFBIWSBkcml2ZXIKKyAqIENvcHlyaWdodCAoQykgMjAxOCBUb255IExpbmRncmVuIDx0b255QGF0 b21pZGUuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxp bnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxsaW51eC9ncGlvL2Nv bnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51 eC9waHkvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3BoeV9jb21wYW5pb24uaD4KKworI2Rl ZmluZSBQSFlfTURNNjYwMF9QSFlfREVMQVlfTVMJNDAwMAkvKiBQSFkgZW5hYmxlIDIuMnMgdG8g My41cyAqLworI2RlZmluZSBQSFlfTURNNjYwMF9FTkFCTEVEX0RFTEFZX01TCTgwMDAJLyogOHMg bW9yZSB0b3RhbCBmb3IgTURNNjYwMCAqLworCitlbnVtIHBoeV9tZG02NjAwX2N0cmxfbGluZXMg eworCVBIWV9NRE02NjAwX0VOQUJMRSwJCQkvKiBVU0IgUEhZIGVuYWJsZSAqLworCVBIWV9NRE02 NjAwX1BPV0VSLAkJCS8qIERldmljZSBwb3dlciAqLworCVBIWV9NRE02NjAwX1JFU0VULAkJCS8q IERldmljZSByZXNldCAqLworCVBIWV9NRE02NjAwX05SX0NUUkxfTElORVMsCit9OworCitlbnVt IHBoeV9tZG02NjAwX2Jvb3Rtb2RlX2xpbmVzIHsKKwlQSFlfTURNNjYwMF9NT0RFMCwJCQkvKiBv dXQgVVNCIG1vZGUwIGFuZCBPT0Igd2FrZSAqLworCVBIWV9NRE02NjAwX01PREUxLAkJCS8qIG91 dCBVU0IgbW9kZTEsIGluIE9PQiB3YWtlICovCisJUEhZX01ETTY2MDBfTlJfTU9ERV9MSU5FUywK K307CisKK2VudW0gcGh5X21kbTY2MDBfY21kX2xpbmVzIHsKKwlQSFlfTURNNjYwMF9DTUQwLAor CVBIWV9NRE02NjAwX0NNRDEsCisJUEhZX01ETTY2MDBfQ01EMiwKKwlQSFlfTURNNjYwMF9OUl9D TURfTElORVMsCit9OworCitlbnVtIHBoeV9tZG02NjAwX3N0YXR1c19saW5lcyB7CisJUEhZX01E TTY2MDBfU1RBVFVTMCwKKwlQSFlfTURNNjYwMF9TVEFUVVMxLAorCVBIWV9NRE02NjAwX1NUQVRV UzIsCisJUEhZX01ETTY2MDBfTlJfU1RBVFVTX0xJTkVTLAorfTsKKworLyoKKyAqIE1ETTY2MDAg Y29tbWFuZCBjb2Rlcy4gVGhlc2UgYXJlIGJhc2VkIG9uIE1vdG9yb2xhIE1hcHBob25lIExpbnV4 CisgKiBrZXJuZWwgdHJlZS4KKyAqLworZW51bSBwaHlfbWRtNjYwMF9jbWQgeworCVBIWV9NRE02 NjAwX0NNRF9CUF9QQU5JQ19BQ0ssCisJUEhZX01ETTY2MDBfQ01EX0RBVEFfT05MWV9CWVBBU1Ms CS8qIFJlcm91dGUgVVNCIHRvIENQQ0FQIFBIWSAqLworCVBIWV9NRE02NjAwX0NNRF9GVUxMX0JZ UEFTUywJCS8qIFJlcm91dGUgVVNCIHRvIENQQ0FQIFBIWSAqLworCVBIWV9NRE02NjAwX0NNRF9O T19CWVBBU1MsCQkvKiBSZXF1ZXN0IG5vcm1hbCBVU0IgbW9kZSAqLworCVBIWV9NRE02NjAwX0NN RF9CUF9TSFVURE9XTl9SRVEsCS8qIFJlcXVlc3QgZGV2aWNlIHBvd2VyIG9mZiAqLworCVBIWV9N RE02NjAwX0NNRF9CUF9VTktOT1dOXzUsCisJUEhZX01ETTY2MDBfQ01EX0JQX1VOS05PV05fNiwK KwlQSFlfTURNNjYwMF9DTURfVU5ERUZJTkVELAorfTsKKworLyoKKyAqIE1ETTY2MDAgc3RhdHVz IGNvZGVzLiBUaGVzZSBhcmUgYmFzZWQgb24gTW90b3JvbGEgTWFwcGhvbmUgTGludXgKKyAqIGtl cm5lbCB0cmVlLgorICovCitlbnVtIHBoeV9tZG02NjAwX3N0YXR1cyB7CisJUEhZX01ETTY2MDBf U1RBVFVTX1BBTklDLAkJLyogU2VlbXMgdG8gYmUgcmVhbGx5IG9mZiAqLworCVBIWV9NRE02NjAw X1NUQVRVU19QQU5JQ19CVVNZX1dBSVQsCisJUEhZX01ETTY2MDBfU1RBVFVTX1FDX0RMT0FELAor CVBIWV9NRE02NjAwX1NUQVRVU19SQU1fRE9XTkxPQURFUiwJLyogTURNNjYwMCBVU0IgZmxhc2hp bmcgbW9kZSAqLworCVBIWV9NRE02NjAwX1NUQVRVU19QSE9ORV9DT0RFX0FXQUtFLAkvKiBNRE02 NjAwIG5vcm1hbCBVU0IgbW9kZSAqLworCVBIWV9NRE02NjAwX1NUQVRVU19QSE9ORV9DT0RFX0FT TEVFUCwKKwlQSFlfTURNNjYwMF9TVEFUVVNfU0hVVERPV05fQUNLLAorCVBIWV9NRE02NjAwX1NU QVRVU19VTkRFRklORUQsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0CitwaHlfbWRt NjYwMF9zdGF0dXNfbmFtZVtdID0geworCSJvZmYiLCAiYnVzeSIsICJxY19kbCIsICJyYW1fZGwi LCAiYXdha2UiLAorCSJhc2xlZXAiLCAic2h1dGRvd24iLCAidW5kZWZpbmVkIiwKK307CisKK3N0 cnVjdCBwaHlfbWRtNjYwMCB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCB1c2JfcGh5 IHBoeTsKKwlzdHJ1Y3QgcGh5ICpnZW5lcmljX3BoeTsKKwlzdHJ1Y3QgcGh5X3Byb3ZpZGVyICpw aHlfcHJvdmlkZXI7CisJc3RydWN0IGdwaW9fZGVzYyAqY3RybF9ncGlvc1tQSFlfTURNNjYwMF9O Ul9DVFJMX0xJTkVTXTsKKwlzdHJ1Y3QgZ3Bpb19kZXNjcyAqbW9kZV9ncGlvczsKKwlzdHJ1Y3Qg Z3Bpb19kZXNjcyAqc3RhdHVzX2dwaW9zOworCXN0cnVjdCBncGlvX2Rlc2NzICpjbWRfZ3Bpb3M7 CisJc3RydWN0IGRlbGF5ZWRfd29yayBib290dXBfd29yazsKKwlzdHJ1Y3QgZGVsYXllZF93b3Jr IHN0YXR1c193b3JrOworCXN0cnVjdCBjb21wbGV0aW9uIGFjazsKKwlib29sIGVuYWJsZWQ7CQkJ CS8qIG1kbTY2MDAgcGh5IGVuYWJsZWQgKi8KKwlib29sIHJ1bm5pbmc7CQkJCS8qIG1kbTY2MDAg Ym9vdCBkb25lICovCisJaW50IHN0YXR1czsKK307CisKK3N0YXRpYyBpbnQgcGh5X21kbTY2MDBf aW5pdChzdHJ1Y3QgcGh5ICp4KQoreworCXN0cnVjdCBwaHlfbWRtNjYwMCAqZGRhdGEgPSBwaHlf Z2V0X2RydmRhdGEoeCk7CisJc3RydWN0IGdwaW9fZGVzYyAqZW5hYmxlX2dwaW8gPSBkZGF0YS0+ Y3RybF9ncGlvc1tQSFlfTURNNjYwMF9FTkFCTEVdOworCisJaWYgKCFkZGF0YS0+ZW5hYmxlZCkK KwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisKKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoZW5h YmxlX2dwaW8sIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGh5X21kbTY2MDBf cG93ZXJfb24oc3RydWN0IHBoeSAqeCkKK3sKKwlzdHJ1Y3QgcGh5X21kbTY2MDAgKmRkYXRhID0g cGh5X2dldF9kcnZkYXRhKHgpOworCXN0cnVjdCBncGlvX2Rlc2MgKmVuYWJsZV9ncGlvID0gZGRh dGEtPmN0cmxfZ3Bpb3NbUEhZX01ETTY2MDBfRU5BQkxFXTsKKworCWlmICghZGRhdGEtPmVuYWJs ZWQpCisJCXJldHVybiAtRU5PREVWOworCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGVuYWJs ZV9ncGlvLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBoeV9tZG02NjAwX3Bv d2VyX29mZihzdHJ1Y3QgcGh5ICp4KQoreworCXN0cnVjdCBwaHlfbWRtNjYwMCAqZGRhdGEgPSBw aHlfZ2V0X2RydmRhdGEoeCk7CisJc3RydWN0IGdwaW9fZGVzYyAqZW5hYmxlX2dwaW8gPSBkZGF0 YS0+Y3RybF9ncGlvc1tQSFlfTURNNjYwMF9FTkFCTEVdOworCisJaWYgKCFkZGF0YS0+ZW5hYmxl ZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoZW5hYmxl X2dwaW8sIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5X29w cyBncGlvX3VzYl9vcHMgPSB7CisJLmluaXQgPSBwaHlfbWRtNjYwMF9pbml0LAorCS5wb3dlcl9v biA9IHBoeV9tZG02NjAwX3Bvd2VyX29uLAorCS5wb3dlcl9vZmYgPSBwaHlfbWRtNjYwMF9wb3dl cl9vZmYsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCit9OworCisvKioKKyAqIHBoeV9tZG02NjAw X2NtZCgpIC0gc2VuZCBhIGNvbW1hbmQgcmVxdWVzdCB0byBtZG02NjAwCisgKiBAZGRhdGE6IGRl dmljZSBkcml2ZXIgZGF0YQorICoKKyAqIENvbmZpZ3VyZXMgdGhlIHRocmVlIGNvbW1hbmQgcmVx dWVzdCBHUElPcyB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBwaHlf bWRtNjYwMF9jbWQoc3RydWN0IHBoeV9tZG02NjAwICpkZGF0YSwgaW50IHZhbCkKK3sKKwlpbnQg dmFsdWVzW1BIWV9NRE02NjAwX05SX0NNRF9MSU5FU107CisJaW50IGk7CisKKwl2YWwgJj0gKDEg PDwgUEhZX01ETTY2MDBfTlJfQ01EX0xJTkVTKSAtIDE7CisJZm9yIChpID0gMDsgaSA8IFBIWV9N RE02NjAwX05SX0NNRF9MSU5FUzsgaSsrKQorCQl2YWx1ZXNbaV0gPSAodmFsICYgQklUKGkpKSA+ PiBpOworCisJZ3Bpb2Rfc2V0X2FycmF5X3ZhbHVlX2NhbnNsZWVwKFBIWV9NRE02NjAwX05SX0NN RF9MSU5FUywKKwkJCQkgICAgICAgZGRhdGEtPmNtZF9ncGlvcy0+ZGVzYywgdmFsdWVzKTsKK30K KworLyoqCisgKiBwaHlfbWRtNjYwMF9zdGF0dXMoKSAtIHJlYWQgbWRtNjYwMCBzdGF0dXMgbGlu ZXMKKyAqIEBkZGF0YTogZGV2aWNlIGRyaXZlciBkYXRhCisgKi8KK3N0YXRpYyB2b2lkIHBoeV9t ZG02NjAwX3N0YXR1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBoeV9t ZG02NjAwICpkZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJaW50IHZhbHVlc1tQSFlfTURN NjYwMF9OUl9TVEFUVVNfTElORVNdOworCWludCBlcnJvciwgaSwgdmFsID0gMDsKKworCWRkYXRh ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwaHlfbWRtNjYwMCwgc3RhdHVzX3dvcmsud29y ayk7CisJZGV2ID0gZGRhdGEtPmRldjsKKworCWVycm9yID0gZ3Bpb2RfZ2V0X2FycmF5X3ZhbHVl X2NhbnNsZWVwKFBIWV9NRE02NjAwX05SX0NNRF9MSU5FUywKKwkJCQkJICAgICAgIGRkYXRhLT5z dGF0dXNfZ3Bpb3MtPmRlc2MsCisJCQkJCSAgICAgICB2YWx1ZXMpOworCWlmIChlcnJvcikKKwkJ cmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IFBIWV9NRE02NjAwX05SX0NNRF9MSU5FUzsgaSsr KSB7CisJCXZhbCB8PSB2YWx1ZXNbaV0gPDwgaTsKKwkJZGV2X2RiZyhkZGF0YS0+ZGV2LCAiWFhY ICVzOiBpOiAlaSB2YWx1ZXNbaV06ICVpIHZhbDogJWlcbiIsCisJCQlfX2Z1bmNfXywgaSwgdmFs dWVzW2ldLCB2YWwpOworCX0KKwlkZGF0YS0+c3RhdHVzID0gdmFsOworCisJZGV2X2luZm8oZGV2 LCAibW9kZW0gc3RhdHVzOiAlaSAlc1xuIiwKKwkJIGRkYXRhLT5zdGF0dXMsCisJCSBwaHlfbWRt NjYwMF9zdGF0dXNfbmFtZVtkZGF0YS0+c3RhdHVzICYgN10pOworCWNvbXBsZXRlKCZkZGF0YS0+ YWNrKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHBoeV9tZG02NjAwX2lycV90aHJlYWQoaW50 IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGh5X21kbTY2MDAgKmRkYXRhID0gZGF0YTsK KworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGRhdGEtPnN0YXR1c193b3JrLCBtc2Vjc190b19q aWZmaWVzKDEwKSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qKgorICogcGh5X21k bTY2MDBfd2FrZWlycV90aHJlYWQgLSBoYW5kbGUgbW9kZTEgbGluZSBPT0Igd2FrZSBhZnRlciBi b290aW5nCisgKiBAaXJxOiBpbnRlcnJ1cHQKKyAqIEBkYXRhOiBpbnRlcnJ1cHQgaGFuZGxlciBk YXRhCisgKgorICogR1BJTyBtb2RlMSBpcyB1c2VkIGluaXRpYWxseSBhcyBvdXRwdXQgdG8gY29u ZmlndXJlIHRoZSBVU0IgYm9vdAorICogbW9kZSBmb3IgbWRtNjYwMC4gQWZ0ZXIgYm9vdGluZyBp dCBpcyB1c2VkIGFzIGlucHV0IGZvciBPT0Igd2FrZQorICogc2lnbmFsIGZyb20gbWRtNjYwMCB0 byB0aGUgU29DLiBKdXN0IHVzZSBpdCBmb3IgZGVidWcgaW5mbyBvbmx5CisgKiBmb3Igbm93Lgor ICovCitzdGF0aWMgaXJxcmV0dXJuX3QgcGh5X21kbTY2MDBfd2FrZWlycV90aHJlYWQoaW50IGly cSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGh5X21kbTY2MDAgKmRkYXRhID0gZGF0YTsKKwlz dHJ1Y3QgZ3Bpb19kZXNjICptb2RlX2dwaW8xOworCisJbW9kZV9ncGlvMSA9IGRkYXRhLT5tb2Rl X2dwaW9zLT5kZXNjW1BIWV9NRE02NjAwX01PREUxXTsKKwlkZXZfZGJnKGRkYXRhLT5kZXYsICJP T0Igd2FrZSBvbiBtb2RlX2dwaW8xOiAlaVxuIiwKKwkJZ3Bpb2RfZ2V0X3ZhbHVlKG1vZGVfZ3Bp bzEpKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqCisgKiBwaHlfbWRtNjYwMF9p bml0X2lycSgpIC0gaW5pdGlhbGl6ZSBtZG02NjAwIHN0YXR1cyBJUlEgbGluZXMKKyAqIEBkZGF0 YTogZGV2aWNlIGRyaXZlciBkYXRhCisgKi8KK3N0YXRpYyB2b2lkIHBoeV9tZG02NjAwX2luaXRf aXJxKHN0cnVjdCBwaHlfbWRtNjYwMCAqZGRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0g ZGRhdGEtPmRldjsKKwlpbnQgaSwgZXJyb3IsIGlycTsKKworCWZvciAoaSA9IFBIWV9NRE02NjAw X1NUQVRVUzA7CisJICAgICBpIDw9IFBIWV9NRE02NjAwX1NUQVRVUzI7IGkrKykgeworCQlzdHJ1 Y3QgZ3Bpb19kZXNjICpncGlvID0gZGRhdGEtPnN0YXR1c19ncGlvcy0+ZGVzY1tpXTsKKworCQlp cnEgPSBncGlvZF90b19pcnEoZ3Bpbyk7CisJCWlmIChpcnEgPD0gMCkKKwkJCWNvbnRpbnVlOwor CisJCWVycm9yID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGlycSwgTlVMTCwKKwkJ CQkJcGh5X21kbTY2MDBfaXJxX3RocmVhZCwKKwkJCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8CisJ CQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwKKwkJCQkJSVJRRl9PTkVTSE9ULAorCQkJCQkibWRt NjYwMCIsCisJCQkJCWRkYXRhKTsKKwkJaWYgKGVycm9yKQorCQkJZGV2X3dhcm4oZGV2LCAibm8g bW9kZW0gc3RhdHVzIGlycSVpOiAlaVxuIiwKKwkJCQkgaXJxLCBlcnJvcik7CisJfQorfQorCitz dHJ1Y3QgcGh5X21kbTY2MDBfbWFwIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBkaXJlY3Rp b247Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBoeV9tZG02NjAwX21hcAorcGh5X21kbTY2 MDBfY3RybF9ncGlvX21hcFtQSFlfTURNNjYwMF9OUl9DVFJMX0xJTkVTXSA9IHsKKwl7ICJlbmFi bGUiLCBHUElPRF9PVVRfTE9XLCB9LAkJLyogbG93ID0gcGh5IGRpc2FibGVkICovCisJeyAicG93 ZXIiLCBHUElPRF9PVVRfTE9XLCB9LAkJLyogbG93ID0gb2ZmICovCisJeyAicmVzZXQiLCBHUElP RF9PVVRfSElHSCwgfSwJCS8qIGhpZ2ggPSByZXNldCAqLworfTsKKworLyoqCisgKiBwaHlfbWRt NjYwMF9pbml0X2xpbmVzKCkgLSBpbml0aWFsaXplIG1kbTY2MDAgR1BJTyBsaW5lcworICogQGRk YXRhOiBkZXZpY2UgZHJpdmVyIGRhdGEKKyAqLworc3RhdGljIGludCBwaHlfbWRtNjYwMF9pbml0 X2xpbmVzKHN0cnVjdCBwaHlfbWRtNjYwMCAqZGRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gZGRhdGEtPmRldjsKKwlpbnQgaTsKKworCS8qIE1ETTY2MDAgY29udHJvbCBsaW5lcyAqLwor CWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBoeV9tZG02NjAwX2N0cmxfZ3Bpb19tYXApOyBp KyspIHsKKwkJY29uc3Qgc3RydWN0IHBoeV9tZG02NjAwX21hcCAqbWFwID0KKwkJCSZwaHlfbWRt NjYwMF9jdHJsX2dwaW9fbWFwW2ldOworCQlzdHJ1Y3QgZ3Bpb19kZXNjICoqZ3BpbyA9ICZkZGF0 YS0+Y3RybF9ncGlvc1tpXTsKKworCQkqZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgbWFwLT5u YW1lLCBtYXAtPmRpcmVjdGlvbik7CisJCWlmIChJU19FUlIoKmdwaW8pKSB7CisJCQlkZXZfaW5m byhkZXYsICJncGlvICVzIGVycm9yICVsaVxuIiwKKwkJCQkgbWFwLT5uYW1lLCBQVFJfRVJSKCpn cGlvKSk7CisJCQlyZXR1cm4gUFRSX0VSUigqZ3Bpbyk7CisJCX0KKwl9CisKKwkvKiBNRE02NjAw IFVTQiBzdGFydC11cCBtb2RlIG91dHB1dCBsaW5lcyAqLworCWRkYXRhLT5tb2RlX2dwaW9zID0g ZGV2bV9ncGlvZF9nZXRfYXJyYXkoZGV2LCAibW90b3JvbGEsbW9kZSIsCisJCQkJCQkgR1BJT0Rf T1VUX0xPVyk7CisJaWYgKElTX0VSUihkZGF0YS0+bW9kZV9ncGlvcykpCisJCXJldHVybiBQVFJf RVJSKGRkYXRhLT5tb2RlX2dwaW9zKTsKKworCWlmIChkZGF0YS0+bW9kZV9ncGlvcy0+bmRlc2Nz ICE9IFBIWV9NRE02NjAwX05SX01PREVfTElORVMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyog TURNNjYwMCBzdGF0dXMgaW5wdXQgbGluZXMgKi8KKwlkZGF0YS0+c3RhdHVzX2dwaW9zID0gZGV2 bV9ncGlvZF9nZXRfYXJyYXkoZGV2LCAibW90b3JvbGEsc3RhdHVzIiwKKwkJCQkJCSAgIEdQSU9E X0lOKTsKKwlpZiAoSVNfRVJSKGRkYXRhLT5zdGF0dXNfZ3Bpb3MpKQorCQlyZXR1cm4gUFRSX0VS UihkZGF0YS0+c3RhdHVzX2dwaW9zKTsKKworCWlmIChkZGF0YS0+c3RhdHVzX2dwaW9zLT5uZGVz Y3MgIT0gUEhZX01ETTY2MDBfTlJfU1RBVFVTX0xJTkVTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CS8qIE1ETTY2MDAgY21kIG91dHB1dCBsaW5lcyAqLworCWRkYXRhLT5jbWRfZ3Bpb3MgPSBkZXZt X2dwaW9kX2dldF9hcnJheShkZXYsICJtb3Rvcm9sYSxjbWQiLAorCQkJCQkJR1BJT0RfT1VUX0xP Vyk7CisJaWYgKElTX0VSUihkZGF0YS0+Y21kX2dwaW9zKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGRh dGEtPmNtZF9ncGlvcyk7CisKKwlpZiAoZGRhdGEtPmNtZF9ncGlvcy0+bmRlc2NzICE9IFBIWV9N RE02NjAwX05SX0NNRF9MSU5FUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30K KworLyoqCisgKiBwaHlfbWRtNjYwMF9kZXZpY2VfcG93ZXJfb24oKSAtIHBvd2VyIG9uIG1kbTY2 MDAgZGV2aWNlCisgKiBAZGRhdGE6IGRldmljZSBkcml2ZXIgZGF0YQorICoKKyAqIFRvIGdldCB0 aGUgaW50ZWdyYXRlZCBVU0IgcGh5IGluIE1ETTY2MDAgdGFrZXMgc29tZSBob29wcy4gV2UgbXVz dCBlbnN1cmUKKyAqIHRoZSBzaGFyZWQgVVNCIGJvb3Rtb2RlIEdQSU9zIGFyZSBjb25maWd1cmVk LCB0aGVuIHJlcXVlc3QgbW9kZW0gc3RhcnQtdXAsCisgKiByZXNldCBhbmQgcG93ZXItdXAuLiBB bmQgdGhlbiB3ZSBuZWVkIHRvIHJlY3ljbGUgdGhlIHNoYXJlZCBVU0IgYm9vdG1vZGUKKyAqIEdQ SU9zIGFzIHRoZXkgYXJlIGFsc28gdXNlZCBmb3IgT3V0IG9mIEJhbmQgKE9PQikgd2FrZSBmb3Ig dGhlIFVTQiBhbmQKKyAqIFRTIDI3LjAxMCBzZXJpYWwgbXV4LgorICovCitzdGF0aWMgaW50IHBo eV9tZG02NjAwX2RldmljZV9wb3dlcl9vbihzdHJ1Y3QgcGh5X21kbTY2MDAgKmRkYXRhKQorewor CXN0cnVjdCBncGlvX2Rlc2MgKm1vZGVfZ3BpbzAsICptb2RlX2dwaW8xLCAqcmVzZXRfZ3Bpbywg KnBvd2VyX2dwaW87CisJaW50IGVycm9yID0gMCwgd2FrZWlycTsKKworCW1vZGVfZ3BpbzAgPSBk ZGF0YS0+bW9kZV9ncGlvcy0+ZGVzY1tQSFlfTURNNjYwMF9NT0RFMF07CisJbW9kZV9ncGlvMSA9 IGRkYXRhLT5tb2RlX2dwaW9zLT5kZXNjW1BIWV9NRE02NjAwX01PREUxXTsKKwlyZXNldF9ncGlv ID0gZGRhdGEtPmN0cmxfZ3Bpb3NbUEhZX01ETTY2MDBfUkVTRVRdOworCXBvd2VyX2dwaW8gPSBk ZGF0YS0+Y3RybF9ncGlvc1tQSFlfTURNNjYwMF9QT1dFUl07CisKKwkvKgorCSAqIFNoYXJlZCBH UElPcyBtdXN0IGJlIGxvdyBmb3Igbm9ybWFsIFVTQiBtb2RlLiBBZnRlciBib290aW5nCisJICog dGhleSBhcmUgdXNlZCBmb3IgT09CIHdha2Ugc2lnbmFsaW5nLiBUaGVzZSBjYW4gYmUgYWxzbyB1 c2VkCisJICogdG8gY29uZmlndXJlIFVTQiBmbGFzaGluZyBtb2RlIGxhdGVyIG9uIGJhc2VkIG9u IGEgbW9kdWxlCisJICogcGFyYW1ldGVyLgorCSAqLworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVl cChtb2RlX2dwaW8wLCAwKTsKKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAobW9kZV9ncGlvMSwg MCk7CisKKwkvKiBSZXF1ZXN0IHN0YXJ0LXVwIG1vZGUgKi8KKwlwaHlfbWRtNjYwMF9jbWQoZGRh dGEsIFBIWV9NRE02NjAwX0NNRF9OT19CWVBBU1MpOworCisJLyogUmVxdWVzdCBhIHJlc2V0IGZp cnN0ICovCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHJlc2V0X2dwaW8sIDApOworCW1zbGVl cCgxMDApOworCisJLyogVG9nZ2xlIHBvd2VyIEdQSU8gdG8gcmVxdWVzdCBtZG02NjAwIHRvIHN0 YXJ0ICovCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBvd2VyX2dwaW8sIDEpOworCW1zbGVl cCgxMDApOworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwb3dlcl9ncGlvLCAwKTsKKworCS8q CisJICogTG9va3MgbGlrZSB0aGUgVVNCIFBIWSBuZWVkcyBiZXR3ZWVuIDIuMiB0byA0IHNlY29u ZHMuCisJICogSWYgd2UgdHJ5IHRvIHVzZSBpdCBiZWZvcmUgdGhhdCwgd2Ugd2lsbCBnZXQgTDMg ZXJyb3JzCisJICogZnJvbSBvbWFwLXVzYi1ob3N0IHRyeWluZyB0byBhY2Nlc3MgdGhlIFBIWS4g U2VlIGFsc28KKwkgKiBwaHlfbWRtNjYwMF9pbml0KCkgZm9yIC1FUFJPQkVfREVGRVIuCisJICov CisJbXNsZWVwKFBIWV9NRE02NjAwX1BIWV9ERUxBWV9NUyk7CisJZGRhdGEtPmVuYWJsZWQgPSB0 cnVlOworCisJLyogQm9vdGluZyB1cCB0aGUgcmVzdCBvZiBNRE02NjAwIHdpbGwgdGFrZSB0b3Rh bCBhYm91dCA4IHNlY29uZHMgKi8KKwlkZXZfaW5mbyhkZGF0YS0+ZGV2LCAiV2FpdGluZyBmb3Ig cG93ZXIgdXAgcmVxdWVzdCB0byBjb21wbGV0ZS4uXG4iKTsKKwlpZiAod2FpdF9mb3JfY29tcGxl dGlvbl90aW1lb3V0KCZkZGF0YS0+YWNrLAorCQkJbXNlY3NfdG9famlmZmllcyhQSFlfTURNNjYw MF9FTkFCTEVEX0RFTEFZX01TKSkpIHsKKwkJaWYgKGRkYXRhLT5zdGF0dXMgPiBQSFlfTURNNjYw MF9TVEFUVVNfUEFOSUMgJiYKKwkJICAgIGRkYXRhLT5zdGF0dXMgPCBQSFlfTURNNjYwMF9TVEFU VVNfU0hVVERPV05fQUNLKQorCQkJZGV2X2luZm8oZGRhdGEtPmRldiwgIlBvd2VyZWQgdXAgT0tc biIpOworCX0gZWxzZSB7CisJCWRkYXRhLT5lbmFibGVkID0gZmFsc2U7CisJCWVycm9yID0gLUVU SU1FRE9VVDsKKwkJZGV2X2VycihkZGF0YS0+ZGV2LCAiVGltZWQgb3V0IHBvd2VyaW5nIHVwXG4i KTsKKwl9CisKKwkvKiBSZWNvbmZpZ3VyZSBtb2RlMSBHUElPIGFzIGlucHV0IGZvciBPT0Igd2Fr ZSAqLworCWdwaW9kX2RpcmVjdGlvbl9pbnB1dChtb2RlX2dwaW8xKTsKKworCXdha2VpcnEgPSBn cGlvZF90b19pcnEobW9kZV9ncGlvMSk7CisJaWYgKHdha2VpcnEgPD0gMCkKKwkJcmV0dXJuIHdh a2VpcnE7CisKKwllcnJvciA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGRhdGEtPmRldiwg d2FrZWlycSwgTlVMTCwKKwkJCQkJICBwaHlfbWRtNjYwMF93YWtlaXJxX3RocmVhZCwKKwkJCQkJ ICBJUlFGX1RSSUdHRVJfUklTSU5HIHwKKwkJCQkJICBJUlFGX1RSSUdHRVJfRkFMTElORyB8CisJ CQkJCSAgSVJRRl9PTkVTSE9ULAorCQkJCQkgICJtZG02NjAwLXdha2UiLAorCQkJCQkgIGRkYXRh KTsKKwlpZiAoZXJyb3IpCisJCWRldl93YXJuKGRkYXRhLT5kZXYsICJubyBtb2RlbSB3YWtlaXJx IGlycSVpOiAlaVxuIiwKKwkJCSB3YWtlaXJxLCBlcnJvcik7CisKKwlkZGF0YS0+cnVubmluZyA9 IHRydWU7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogcGh5X21kbTY2MDBfZGV2aWNl X3Bvd2VyX29mZigpIC0gcG93ZXIgb2ZmIG1kbTY2MDAgZGV2aWNlCisgKiBAZGRhdGE6IGRldmlj ZSBkcml2ZXIgZGF0YQorICovCitzdGF0aWMgdm9pZCBwaHlfbWRtNjYwMF9kZXZpY2VfcG93ZXJf b2ZmKHN0cnVjdCBwaHlfbWRtNjYwMCAqZGRhdGEpCit7CisJc3RydWN0IGdwaW9fZGVzYyAqcmVz ZXRfZ3BpbyA9CisJCWRkYXRhLT5jdHJsX2dwaW9zW1BIWV9NRE02NjAwX1JFU0VUXTsKKworCWRk YXRhLT5lbmFibGVkID0gZmFsc2U7CisJcGh5X21kbTY2MDBfY21kKGRkYXRhLCBQSFlfTURNNjYw MF9DTURfQlBfU0hVVERPV05fUkVRKTsKKwltc2xlZXAoMTAwKTsKKworCWdwaW9kX3NldF92YWx1 ZV9jYW5zbGVlcChyZXNldF9ncGlvLCAxKTsKKworCWRldl9pbmZvKGRkYXRhLT5kZXYsICJXYWl0 aW5nIGZvciBwb3dlciBkb3duIHJlcXVlc3QgdG8gY29tcGxldGUuLiAiKTsKKwlpZiAod2FpdF9m b3JfY29tcGxldGlvbl90aW1lb3V0KCZkZGF0YS0+YWNrLAorCQkJCQltc2Vjc190b19qaWZmaWVz KDUwMDApKSkgeworCQlpZiAoZGRhdGEtPnN0YXR1cyA9PSBQSFlfTURNNjYwMF9TVEFUVVNfUEFO SUMpCisJCQlkZXZfaW5mbyhkZGF0YS0+ZGV2LCAiUG93ZXJlZCBkb3duIE9LXG4iKTsKKwl9IGVs c2UgeworCQlkZXZfZXJyKGRkYXRhLT5kZXYsICJUaW1lZCBvdXQgcG93ZXJpbmcgZG93blxuIik7 CisJfQorfQorCitzdGF0aWMgdm9pZCBwaHlfbWRtNjYwMF9kZWZlcnJlZF9wb3dlcl9vbihzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBoeV9tZG02NjAwICpkZGF0YTsKKwlp bnQgZXJyb3I7CisKKwlkZGF0YSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGh5X21kbTY2 MDAsIGJvb3R1cF93b3JrLndvcmspOworCisJZXJyb3IgPSBwaHlfbWRtNjYwMF9kZXZpY2VfcG93 ZXJfb24oZGRhdGEpOworCWlmIChlcnJvcikKKwkJZGV2X2VycihkZGF0YS0+ZGV2LCAiRGV2aWNl IG5vdCBmdW5jdGlvbmFsXG4iKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgcGh5X21kbTY2MDBfaWRfdGFibGVbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1vdG9yb2xh LG1hcHBob25lLW1kbTY2MDAiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2Ys IHBoeV9tZG02NjAwX2lkX3RhYmxlKTsKKworc3RhdGljIGludCBwaHlfbWRtNjYwMF9wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwaHlfbWRtNjYwMCAqZGRh dGE7CisJc3RydWN0IHVzYl9vdGcgKm90ZzsKKwlpbnQgZXJyb3I7CisKKwlkZGF0YSA9IGRldm1f a3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFk ZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0RFTEFZRURfV09SSygmZGRhdGEtPmJv b3R1cF93b3JrLAorCQkJICBwaHlfbWRtNjYwMF9kZWZlcnJlZF9wb3dlcl9vbik7CisJSU5JVF9E RUxBWUVEX1dPUksoJmRkYXRhLT5zdGF0dXNfd29yaywgcGh5X21kbTY2MDBfc3RhdHVzKTsKKwlp bml0X2NvbXBsZXRpb24oJmRkYXRhLT5hY2spOworCisJb3RnID0gZGV2bV9remFsbG9jKCZwZGV2 LT5kZXYsIHNpemVvZigqb3RnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvdGcpCisJCXJldHVybiAt RU5PTUVNOworCisJZGRhdGEtPmRldiA9ICZwZGV2LT5kZXY7CisJZGRhdGEtPnBoeS5kZXYgPSBk ZGF0YS0+ZGV2OworCWRkYXRhLT5waHkubGFiZWwgPSAicGh5X21kbTY2MDAiOworCWRkYXRhLT5w aHkub3RnID0gb3RnOworCWRkYXRhLT5waHkudHlwZSA9IFVTQl9QSFlfVFlQRV9VU0IyOworCW90 Zy0+dXNiX3BoeSA9ICZkZGF0YS0+cGh5OworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwg ZGRhdGEpOworCisJZXJyb3IgPSBwaHlfbWRtNjYwMF9pbml0X2xpbmVzKGRkYXRhKTsKKwlpZiAo ZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCXBoeV9tZG02NjAwX2luaXRfaXJxKGRkYXRhKTsK KworCWRkYXRhLT5nZW5lcmljX3BoeSA9IGRldm1fcGh5X2NyZWF0ZShkZGF0YS0+ZGV2LCBOVUxM LCAmZ3Bpb191c2Jfb3BzKTsKKwlpZiAoSVNfRVJSKGRkYXRhLT5nZW5lcmljX3BoeSkpIHsKKwkJ ZXJyb3IgPSBQVFJfRVJSKGRkYXRhLT5nZW5lcmljX3BoeSk7CisJCWdvdG8gY2xlYW51cDsKKwl9 CisKKwlwaHlfc2V0X2RydmRhdGEoZGRhdGEtPmdlbmVyaWNfcGh5LCBkZGF0YSk7CisKKwlkZGF0 YS0+cGh5X3Byb3ZpZGVyID0KKwkJZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoZGRhdGEt PmRldiwKKwkJCQkJICAgICAgb2ZfcGh5X3NpbXBsZV94bGF0ZSk7CisJaWYgKElTX0VSUihkZGF0 YS0+cGh5X3Byb3ZpZGVyKSkgeworCQllcnJvciA9IFBUUl9FUlIoZGRhdGEtPnBoeV9wcm92aWRl cik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRkYXRh LT5ib290dXBfd29yaywgMCk7CisKKwkvKgorCSAqIFNlZSBwaHlfbWRtNjYwMF9kZXZpY2VfcG93 ZXJfb24oKS4gV2Ugc2hvdWxkIGJlIGFibGUKKwkgKiB0byByZW1vdmUgdGhpcyBldmVudHVhbGx5 IHdoZW4gb2hjaS1wbGF0Zm9ybSBjYW4gZGVhbAorCSAqIHdpdGggLUVQUk9CRV9ERUZFUi4KKwkg Ki8KKwltc2xlZXAoUEhZX01ETTY2MDBfUEhZX0RFTEFZX01TICsgNTAwKTsKKworCXVzYl9hZGRf cGh5X2RldigmZGRhdGEtPnBoeSk7CisKKwlyZXR1cm4gMDsKKworY2xlYW51cDoKKwlwaHlfbWRt NjYwMF9kZXZpY2VfcG93ZXJfb2ZmKGRkYXRhKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRp YyBpbnQgcGh5X21kbTY2MDBfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7 CisJc3RydWN0IHBoeV9tZG02NjAwICpkZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYp OworCXN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW8gPSBkZGF0YS0+Y3RybF9ncGlvc1tQSFlf TURNNjYwMF9SRVNFVF07CisKKwlpZiAoIWRkYXRhLT5ydW5uaW5nKQorCQl3YWl0X2Zvcl9jb21w bGV0aW9uX3RpbWVvdXQoJmRkYXRhLT5hY2ssCisJCQltc2Vjc190b19qaWZmaWVzKFBIWV9NRE02 NjAwX0VOQUJMRURfREVMQVlfTVMpKTsKKworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChyZXNl dF9ncGlvLCAxKTsKKwlwaHlfbWRtNjYwMF9kZXZpY2VfcG93ZXJfb2ZmKGRkYXRhKTsKKworCWNh bmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGRhdGEtPmJvb3R1cF93b3JrKTsKKwljYW5jZWxfZGVs YXllZF93b3JrX3N5bmMoJmRkYXRhLT5zdGF0dXNfd29yayk7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGh5X21kbTY2MDBfZHJpdmVyID0geworCS5w cm9iZSA9IHBoeV9tZG02NjAwX3Byb2JlLAorCS5yZW1vdmUgPSBwaHlfbWRtNjYwMF9yZW1vdmUs CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicGh5LW1hcHBob25lLW1kbTY2MDAiLAorCQkub2Zf bWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIocGh5X21kbTY2MDBfaWRfdGFibGUpLAorCX0sCit9 OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHBoeV9tZG02NjAwX2RyaXZlcik7CisKK01PRFVM RV9BTElBUygicGxhdGZvcm06Z3Bpb191c2IiKTsKK01PRFVMRV9BVVRIT1IoIlRvbnkgTGluZGdy ZW4gPHRvbnlAYXRvbWlkZS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIm1kbTY2MDAgZ3Bp byB1c2IgcGh5IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo=