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: phy: mapphone-mdm6600: Add USB PHY driver for MDM6600 on Droid 4 From: Tony Lindgren Message-Id: <20180217210723.7013-1-tony@atomide.com> Date: Sat, 17 Feb 2018 13:07:23 -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 MDAgYXJlIHVzZWQgdG8gcG93ZXIgTURNNjYwIG9uIGFuZCBvZmYsIHRvCmNvbmZpZ3VyZSB0aGUg VVNCIHN0YXJ0LXVwIG1vZGUgKG5vcm1hbCBtb2RlIHZlcnN1cyBVU0IgZmxhc2hpbmcpLCBhbmQK dGhleSBhbHNvIHRlbGwgdGhlIHN0YXRlIG9mIHRoZSBNRE02NjAwIGRldmljZS4KClRoZSB0d28g c3RhcnQtdXAgbW9kZSBHUElPcyBhcmUgZHVhbC1wdXJwb3NlZCBhbmQgdXNlZCBmb3Igb3V0IG9m IGJhbmQKKE9PQikgd2FrZS11cCBmb3IgVVNCIGFuZCBUUyAyNy4wMTAgc2VyaWFsIG11eC4gQnV0 IHdlIG5lZWQgdG8gY29uZmlndXJlCnRoZSBVU0Igc3RhcnQtdXAgbW9kZSBmaXJzdCB0byBnZXQg TURNNjYwMCBib290ZWQgaW4gdGhlIHJpZ2h0IG1vZGUgdG8KYmUgdXNhYmxlIGluIHRoZSBmaXJz dCBwbGFjZS4KCkZvciBub3csIHRoaXMgZHJpdmVyIGp1c3QgZ2l2ZXMgdXAgdGhlIHR3byBzdGFy dC11cCBtb2RlIEdQSU9zIGFmdGVyIHRoZQptb2RlbSBoYXMgYmVlbiBjb25maWd1cmVkIHRvIGJv b3QgaW4gbm9ybWFsIG1vZGUuIE9uZSBvZiB0aGVtIHdlIG1heQp3YW50IHRvIGNvbmZpZ3VyZSBm b3IgVVNCIE9PQiB3YWtlIGluIHRoaXMgZHJpdmVyIGxhdGVyIG9uLCBidXQgdGhhdCdzIGEKc2Vw YXJhdGUgc2VyaWVzIG9mIHBhdGNoZXMgYW5kIG5lZWRzIG1vcmUgd29yay4KCk5vdGUgdGhhdCB0 aGUgTW90b3JvbGEgTWFwcGhvbmUgTGludXgga2VybmVsIHRyZWUgaGFzIGEgInJhZGlvLWN0cmwi CmRyaXZlciBmb3IgbW9kZW1zLiBCdXQgaXQgcmVhbGx5IGRvZXMgbm90IGNvbnRyb2wgdGhlIHJh ZGlvIGF0IGFsbCwgaXQKanVzdCBjb250cm9scyB0aGUgbW9kZW0gcG93ZXIgYW5kIHN0YXJ0LXVw IG1vZGUgZm9yIFVTQi4gU28gSSBjYW1lIHRvCnRoZSBjb25jbHVzaW9uIHRoYXQgd2UncmUgYmV0 dGVyIG9mZiBoYXZpbmcgdGhpcyBkb25lIGluIHRoZSBVU0IgUEhZCmRyaXZlci4gRm9yIGFkZGlu ZyBzdXBwb3J0IGZvciBVU0IgZmxhc2hpbmcgbW9kZSwgd2UgY2FuIGxhdGVyIG9uIGFkZAphIGtl cm5lbCBtb2R1bGUgb3B0aW9uIGZvciBmbGFzaF9tb2RlPTEgb3Igc29tZXRoaW5nIHNpbWlsYXIu CgpBbHNvIG5vdGUgdGhhdCBjdXJyZW50bHkgdGhlcmUgaXMgbm8gUE0gcnVudGltZSBzdXBwb3J0 IGZvciB0aGUgT0hDSQpvbiBvbWFwIHZhcmlhbnQgU29Dcy4gU28gZm9yIGxvdyhlcikgcG93ZXIg aWRsZSBzdGF0ZXMsIGN1cnJlbnR5IGJvdGgKb2hjaS1wbGF0Zm9ybSBhbmQgcGh5LW1hcHBob25l LW1kbTY2MDAgbXVzdCBiZSB1bmxvYWRlZCBvciB1bmJvdW5kLgoKRm9yIHJlZmVyZW5jZSBoZXJl IGlzIHdoYXQgSSBtZWFzdXJlZCBmb3IgdG90YWwgcG93ZXIgY29uc3VtcHRpb24gb24KYW4gaWRs ZSBEcm9pZCA0IHdpdGggYW5kIHdpdGhvdXQgVVNCIHJlbGF0ZWQgTURNNjYwMCBtb2R1bGVzOgoK aWRsZSBsY2Qgb2ZmCXBoeS1tYXBwaG9uZS1tZG02NjAwCW9oY2ktcGxhdGZvcm0KMTUzbVcJCTI4 NG1XCQkJMzQ0bVcKClNvIGl0IHNlZW1zIHRoYXQgTURNNjYwMCBpcyBjdXJyZW50bHkgbm90IHll dCBpZGxpbmcgZXZlbiB3aXRoIGl0J3MKcmFkaW8gdHVybmVkIG9mZiwgYnV0IHRoYXQncyBzb21l dGhpbmcgdGhhdCBpcyBiZXlvbmQgdGhlIGNvbnRyb2wgb2YKdGhpcyBVU0IgUEhZIGRyaXZlci4K CkNjOiBkZXZpY2V0cmVlQHZnZXIua2VybmVsLm9yZwpDYzogTWFyayBSdXRsYW5kIDxtYXJrLnJ1 dGxhbmRAYXJtLmNvbT4KQ2M6IE1hcmNlbCBQYXJ0YXAgPG1wYXJ0YXBAZ214Lm5ldD4KQ2M6IE1p Y2hhZWwgU2NvdHQgPG1pY2hhZWwuc2NvdHRAbGluYXJvLm9yZz4KQ2M6IFJvYiBIZXJyaW5nIDxy b2JoK2R0QGtlcm5lbC5vcmc+CkNjOiBTZWJhc3RpYW4gUmVpY2hlbCA8c3JlQGtlcm5lbC5vcmc+ ClNpZ25lZC1vZmYtYnk6IFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+Ci0tLQogLi4u L2JpbmRpbmdzL3BoeS9waHktbWFwcGhvbmUtbWRtNjYwMC50eHQgICAgICAgICAgfCAgMzAgKysK IGRyaXZlcnMvcGh5L21vdG9yb2xhL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgIHwgICA5 ICsKIGRyaXZlcnMvcGh5L21vdG9yb2xhL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgIHwg ICAxICsKIGRyaXZlcnMvcGh5L21vdG9yb2xhL3BoeS1tYXBwaG9uZS1tZG02NjAwLmMgICAgICAg IHwgNDkwICsrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA1MzAgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5k aW5ncy9waHkvcGh5LW1hcHBob25lLW1kbTY2MDAudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9waHkvbW90b3JvbGEvcGh5LW1hcHBob25lLW1kbTY2MDAuYwoKZGlmZiAtLWdpdCBhL0Rv Y3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LW1hcHBob25lLW1kbTY2MDAu dHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktbWFwcGhvbmUt bWRtNjYwMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1 bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1tYXBwaG9uZS1tZG02NjAwLnR4 dApAQCAtMCwwICsxLDMwIEBACitEZXZpY2UgdHJlZSBiaW5kaW5nIGRvY3VtZW50YXRpb24gZm9y IE1vdG9yb2xhIE1hcHBob25lIE1ETTY2MDAgVVNCIFBIWQorCitSZXF1aXJlZCBwcm9wZXJ0aWVz OgorLSBjb21wYXRpYmxlCU11c3QgYmUgIm1vdG9yb2xhLG1hcHBob25lLW1kbTY2MDAiCistIGVu YWJsZS1ncGlvcwlHUElPIHRvIGVuYWJsZSB0aGUgVVNCIFBIWQorLSBwb3dlci1ncGlvcwlHUElP IHRvIHBvd2VyIG9uIHRoZSBkZXZpY2UKKy0gcmVzZXQtZ3Bpb3MJR1BJTyB0byByZXNldCB0aGUg ZGV2aWNlCistIG1vZGUtZ3Bpb3MJVHdvIEdQSU9zIHRvIGNvbmZpZ3VyZSBNRE02NjAwIFVTQiBz dGFydC11cCBtb2RlIGZvcgorCQlub3JtYWwgbW9kZSB2ZXJzdXMgVVNCIGZsYXNoaW5nIG1vZGUK Ky0gc3RhdHVzLWdwaW9zCVRocmVlIEdQSU9zIHRvIHJlYWQgdGhlIHBvd2VyIHN0YXRlIG9mIHRo ZSBNRE02NjAwCistIGNtZC1ncGlvcwlUaHJlZSBHUElPcyB0byBjb250cm9sIHRoZSBwb3dlciBz dGF0ZSBvZiB0aGUgTURNNjYwMAorCitFeGFtcGxlOgorCitmc3VzYjFfcGh5OiBmc3VzYjFfcGh5 IHsKKwljb21wYXRpYmxlID0gIm1vdG9yb2xhLG1hcHBob25lLW1kbTY2MDAiOworCWVuYWJsZS1n cGlvcyA9IDwmZ3BpbzMgMzEgR1BJT19BQ1RJVkVfTE9XPjsgICAgIC8qIGdwaW9fOTUgKi8KKwlw b3dlci1ncGlvcyA9IDwmZ3BpbzIgMjIgR1BJT19BQ1RJVkVfSElHSD47CS8qIGdwaW9fNTQgKi8K KwlyZXNldC1ncGlvcyA9IDwmZ3BpbzIgMTcgR1BJT19BQ1RJVkVfSElHSD47CS8qIGdwaW9fNDkg Ki8KKwltb2RlLWdwaW9zID0gPCZncGlvNSAyMCBHUElPX0FDVElWRV9ISUdIPiwJLyogZ3Bpb18x NDggKi8KKwkJICAgICA8JmdwaW81IDIxIEdQSU9fQUNUSVZFX0hJR0g+OwkvKiBncGlvXzE0OSAq LworCXN0YXR1cy1ncGlvcyA9IDwmZ3BpbzIgMjMgR1BJT19BQ1RJVkVfSElHSD4sCS8qIGdwaW9f NTUgKi8KKwkJICAgICAgIDwmZ3BpbzIgMjEgR1BJT19BQ1RJVkVfSElHSD4sCS8qIGdwaW9fNTMg Ki8KKwkJICAgICAgIDwmZ3BpbzIgMjAgR1BJT19BQ1RJVkVfSElHSD47CS8qIGdwaW9fNTIgKi8K KwljbWQtZ3Bpb3MgPSA8JmdwaW80IDcgR1BJT19BQ1RJVkVfSElHSD4sCS8qIGdwaW9fMTAzICov CisJCSAgICA8JmdwaW80IDggR1BJT19BQ1RJVkVfSElHSD4sCS8qIGdwaW9fMTA0ICovCisJCSAg ICA8JmdwaW81IDE0IEdQSU9fQUNUSVZFX0hJR0g+OwkvKiBncGlvXzE0MiAqLworCSNwaHktY2Vs bHMgPSA8MD47Cit9OworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9tb3Rvcm9sYS9LY29uZmln IGIvZHJpdmVycy9waHkvbW90b3JvbGEvS2NvbmZpZwotLS0gYS9kcml2ZXJzL3BoeS9tb3Rvcm9s YS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGh5L21vdG9yb2xhL0tjb25maWcKQEAgLTEwLDMgKzEw LDEyIEBAIGNvbmZpZyBQSFlfQ1BDQVBfVVNCCiAJaGVscAogCSAgRW5hYmxlIHRoaXMgZm9yIFVT QiB0byB3b3JrIG9uIE1vdG9yb2xhIHBob25lcyBhbmQgdGFibGV0cwogCSAgc3VjaCBhcyBEcm9p ZCA0LgorCitjb25maWcgUEhZX01BUFBIT05FX01ETTY2MDAKKwl0cmlzdGF0ZSAiTW90b3JvbGEg TWFwcGhvbmUgTURNNjYwMCBtb2RlbSBVU0IgUEhZIGRyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9T VVBQT1JUCisJc2VsZWN0IEdFTkVSSUNfUEhZCisJc2VsZWN0IFVTQl9QSFkKKwloZWxwCisJICBF bmFibGUgdGhpcyBmb3IgTURNNjYwMCBVU0IgbW9kZW0gdG8gd29yayBvbiBNb3Rvcm9sYSBwaG9u ZXMKKwkgIGFuZCB0YWJsZXRzIHN1Y2ggYXMgRHJvaWQgNC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMv cGh5L21vdG9yb2xhL01ha2VmaWxlIGIvZHJpdmVycy9waHkvbW90b3JvbGEvTWFrZWZpbGUKLS0t IGEvZHJpdmVycy9waHkvbW90b3JvbGEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9waHkvbW90b3Jv bGEvTWFrZWZpbGUKQEAgLTMsMyArMyw0IEBACiAjCiAKIG9iai0kKENPTkZJR19QSFlfQ1BDQVBf VVNCKQkJKz0gcGh5LWNwY2FwLXVzYi5vCitvYmotJChDT05GSUdfUEhZX01BUFBIT05FX01ETTY2 MDApCSs9IHBoeS1tYXBwaG9uZS1tZG02NjAwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L21v dG9yb2xhL3BoeS1tYXBwaG9uZS1tZG02NjAwLmMgYi9kcml2ZXJzL3BoeS9tb3Rvcm9sYS9waHkt bWFwcGhvbmUtbWRtNjYwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9waHkvbW90b3JvbGEvcGh5LW1hcHBob25lLW1kbTY2MDAuYwpAQCAtMCwwICsx LDQ5MCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBNb3Rv cm9sYSBNYXBwaG9uZSBNRE02NjAwIG1vZGVtIEdQSU8gY29udHJvbGxlZCBVU0IgUEhZIGRyaXZl cgorICogQ29weXJpZ2h0IChDKSAyMDE4IFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+ CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+ CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNs dWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4K KyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHku aD4KKyNpbmNsdWRlIDxsaW51eC91c2IvcGh5X2NvbXBhbmlvbi5oPgorCisjZGVmaW5lIFBIWV9N RE02NjAwX1NUQVJUVVBfREVMQVlfTVMJMzAwMAkvKiBBIGxlYXN0IDIuMnMgdXN1YWxseSAqLwor CisvKgorICogTURNNjYwMCBzdGF0dXMgY29kZXMuIFRoZXNlIGFyZSBjb3BpZWQgZnJvbSBNb3Rv cm9sYSBNYXBwaG9uZSBMaW51eAorICoga2VybmVsIHRyZWUuIFRoZSBCQiBuYW1pbmcgaGVyZSBy ZWZlcnMgdG8gIkJhc2VCYW5kIiBmb3IgbW9kZW0uCisgKi8KK2VudW0gcGh5X21kbTY2MDBfc3Rh dHVzIHsKKwlCUF9TVEFUVVNfUEFOSUMsCQkvKiBTZWVtcyB0byBiZSByZWFsbHkgb2ZmIHN0YXRl ICovCisJQlBfU1RBVFVTX1BBTklDX0JVU1lfV0FJVCwKKwlCUF9TVEFUVVNfUUNfRExPQUQsCisJ QlBfU1RBVFVTX1JBTV9ET1dOTE9BREVSLAkvKiBNRE02NjAwIFVTQiBmbGFzaGluZyBtb2RlICov CisJQlBfU1RBVFVTX1BIT05FX0NPREVfQVdBS0UsCS8qIE1ETTY2MDAgbm9ybWFsIFVTQiBtb2Rl ICovCisJQlBfU1RBVFVTX1BIT05FX0NPREVfQVNMRUVQLAorCUJQX1NUQVRVU19TSFVURE9XTl9B Q0ssCisJQlBfU1RBVFVTX1VOREVGSU5FRCwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29u c3QKK3BoeV9tZG02NjAwX3N0YXR1c19uYW1lW10gPSB7CisJIm9mZiIsICJidXN5IiwgInFjX2Rs IiwgInJhbV9kbCIsICJhd2FrZSIsCisJImFzbGVlcCIsICJzaHV0ZG93biIsICJ1bmRlZmluZWQi LAorfTsKKworLyoKKyAqIE1ETTY2MDAgY29tbWFuZCBjb2Rlcy4gVGhlc2UgYXJlIGNvcGllZCBm cm9tIE1vdG9yb2xhIE1hcHBob25lIExpbnV4CisgKiBrZXJuZWwgdHJlZS4gVGhlIEFQIG5hbWlu ZyBoZXJlIHJlZmVycyB0byAiQXBwbGljYXRpb24gUHJvY2Vzc29yIi4KKyAqLworZW51bSBwaHlf bWRtNjYwMF9jbWQgeworCUFQX1NUQVRVU19CUF9QQU5JQ19BQ0ssCisJQVBfU1RBVFVTX0RBVEFf T05MWV9CWVBBU1MsCS8qIFJlcm91dGUgVVNCIHRvIENQQ0FQIFBIWSAqLworCUFQX1NUQVRVU19G VUxMX0JZUEFTUywJCS8qIFJlcm91dGUgVVNCIHRvIENQQ0FQIFBIWSAqLworCUFQX1NUQVRVU19O T19CWVBBU1MsCQkvKiBSZXF1ZXN0IG5vcm1hbCBzdGFydC11cCBtb2RlICovCisJQVBfU1RBVFVT X0JQX1NIVVRET1dOX1JFUSwJLyogUmVxdWVzdCBkZXZpY2UgcG93ZXIgb2ZmICovCisJQVBfU1RB VFVTX0JQX1VOS05PV05fNSwKKwlBUF9TVEFUVVNfQlBfVU5LTk9XTl82LAorCUFQX1NUQVRVU19V TkRFRklORUQsCit9OworCitlbnVtIHBoeV9tZG02NjAwX2xpbmVzIHsKKwlQSFlfTURNNjYwMF9F TkFCTEUsCQkvKiBVU0IgUEhZIGVuYWJsZSAqLworCVBIWV9NRE02NjAwX1BPV0VSLAkJLyogRGV2 aWNlIHBvd2VyICovCisJUEhZX01ETTY2MDBfUkVTRVQsCQkvKiBEZXZpY2UgcmVzZXQgKi8KKwlQ SFlfTURNNjYwMF9NT0RFMCwJCS8qIFVTQiBib290IG1vZGUgZmxhc2hpbmcgdnMgbm9ybWFsICov CisJUEhZX01ETTY2MDBfTU9ERTEsCQkvKiBVU0IgYm9vdCBtb2RlIGZsYXNoaW5nIHZzIG5vcm1h bCAqLworCVBIWV9NRE02NjAwX1NUQVRVUzAsCQkvKiBEZXZpY2Ugc3RhdGUgKi8KKwlQSFlfTURN NjYwMF9TVEFUVVMxLAkJLyogRGV2aWNlIHN0YXRlICovCisJUEhZX01ETTY2MDBfU1RBVFVTMiwJ CS8qIERldmljZSBzdGF0ZSAqLworCVBIWV9NRE02NjAwX0NNRDAsCQkvKiBEZXZpY2UgY29tbWFu ZCAqLworCVBIWV9NRE02NjAwX0NNRDEsCQkvKiBEZXZpY2UgY29tbWFuZCAqLworCVBIWV9NRE02 NjAwX0NNRDIsCQkvKiBEZXZpY2UgY29tbWFuZCAqLworCVBIWV9NRE02NjAwX05SX0xJTkVTLAor fTsKKworc3RydWN0IHBoeV9tZG02NjAwIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0 IHVzYl9waHkgcGh5OworCXN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5OworCXN0cnVjdCBwaHlfcHJv dmlkZXIgKnBoeV9wcm92aWRlcjsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvW1BIWV9NRE02NjAw X05SX0xJTkVTXTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGJvb3R1cF93b3JrOworCXN0cnVjdCBk ZWxheWVkX3dvcmsgc3RhdHVzX3dvcms7CisJc3RydWN0IGNvbXBsZXRpb24gYWNrOworCWJvb2wg ZW5hYmxlZDsKKwlpbnQgc3RhdHVzOworfTsKKworc3RhdGljIGludCBwaHlfbWRtNjYwMF9pbml0 KHN0cnVjdCBwaHkgKngpCit7CisJc3RydWN0IHBoeV9tZG02NjAwICpkZGF0YSA9IHBoeV9nZXRf ZHJ2ZGF0YSh4KTsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICplbmFibGVfZ3BpbyA9IGRkYXRhLT5ncGlv W1BIWV9NRE02NjAwX0VOQUJMRV07CisKKwlpZiAoIWRkYXRhLT5lbmFibGVkKQorCQlyZXR1cm4g LUVQUk9CRV9ERUZFUjsKKworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChlbmFibGVfZ3Bpbywg MCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwaHlfbWRtNjYwMF9wb3dlcl9vbihz dHJ1Y3QgcGh5ICp4KQoreworCXN0cnVjdCBwaHlfbWRtNjYwMCAqZGRhdGEgPSBwaHlfZ2V0X2Ry dmRhdGEoeCk7CisJc3RydWN0IGdwaW9fZGVzYyAqZW5hYmxlX2dwaW8gPSBkZGF0YS0+Z3Bpb1tQ SFlfTURNNjYwMF9FTkFCTEVdOworCisJaWYgKCFkZGF0YS0+ZW5hYmxlZCkKKwkJcmV0dXJuIC1F Tk9ERVY7CisKKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoZW5hYmxlX2dwaW8sIDEpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGh5X21kbTY2MDBfcG93ZXJfb2ZmKHN0cnVjdCBw aHkgKngpCit7CisJc3RydWN0IHBoeV9tZG02NjAwICpkZGF0YSA9IHBoeV9nZXRfZHJ2ZGF0YSh4 KTsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICplbmFibGVfZ3BpbyA9IGRkYXRhLT5ncGlvW1BIWV9NRE02 NjAwX0VOQUJMRV07CisKKwlpZiAoIWRkYXRhLT5lbmFibGVkKQorCQlyZXR1cm4gLUVOT0RFVjsK KworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChlbmFibGVfZ3BpbywgMCk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfb3BzIGdwaW9fdXNiX29wcyA9IHsKKwku aW5pdCA9IHBoeV9tZG02NjAwX2luaXQsCisJLnBvd2VyX29uID0gcGh5X21kbTY2MDBfcG93ZXJf b24sCisJLnBvd2VyX29mZiA9IHBoeV9tZG02NjAwX3Bvd2VyX29mZiwKKwkub3duZXIgPSBUSElT X01PRFVMRSwKK307CisKK3N0cnVjdCBwaHlfbWRtNjYwMF9tYXAgeworCWNvbnN0IGNoYXIgKm5h bWU7CisJaW50IG5yX2dwaW9zOworCWludCBkaXJlY3Rpb247Cit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IHBoeV9tZG02NjAwX21hcAorcGh5X21kbTY2MDBfbGluZV9tYXBbUEhZX01ETTY2MDBf TlJfTElORVNdID0geworCXsgImVuYWJsZSIsIDEsIEdQSU9EX09VVF9MT1csIH0sCS8qIGxvdyA9 IGRpc2FibGVkICovCisJeyAicG93ZXIiLCAxLCBHUElPRF9PVVRfTE9XLCB9LAkJLyogbG93ID0g b2ZmICovCisJeyAicmVzZXQiLCAxLCBHUElPRF9PVVRfSElHSCwgfSwJLyogaGlnaCA9IHJlc2V0 ICovCisJeyAibW9kZSIsIDIsIEdQSU9EX09VVF9MT1csIH0sCisJeyAic3RhdHVzIiwgMywgR1BJ T0RfSU4sIH0sCisJeyAiY21kIiwgMywgR1BJT0RfT1VUX0xPVywgfSwJCS8qIGxvdyA9IG5vIGNv bW1hbmQgKi8KK307CisKKy8qKgorICogcGh5X21kbTY2MDBfY21kKCkgLSBzZW5kIGEgY29tbWFu ZCByZXF1ZXN0IHRvIG1kbTY2MDAKKyAqIEBkZGF0YTogZGV2aWNlIGRyaXZlciBkYXRhCisgKgor ICogQ29uZmlndXJlcyB0aGUgdGhyZWUgY29tbWFuZCByZXF1ZXN0IEdQSU9zIHRvIHRoZSBzcGVj aWZpZWQgdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIHBoeV9tZG02NjAwX2NtZChzdHJ1Y3QgcGh5 X21kbTY2MDAgKmRkYXRhLCBpbnQgdmFsKQoreworCWludCBpOworCisJdmFsICY9IDB4NzsKKwor CWZvciAoaSA9IFBIWV9NRE02NjAwX0NNRDA7CisJICAgICBpIDw9IFBIWV9NRE02NjAwX0NNRDI7 IGkrKykgeworCQlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvID0gZGRhdGEtPmdwaW9baV07CisJCWlu dCBzaGlmdCA9ICgyIC0gKGkgLSBQSFlfTURNNjYwMF9DTUQwKSk7CisKKwkJaWYgKElTX0VSUihn cGlvKSkKKwkJCXJldHVybjsKKworCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoZ3BpbywgKHZh bCAmIEJJVChzaGlmdCkpID4+IHNoaWZ0KTsKKwl9Cit9CisKKy8qKgorICogcGh5X21kbTY2MDBf c3RhdHVzKCkgLSByZWFkIG1kbTY2MDAgc3RhdHVzIGxpbmVzCisgKiBAZGRhdGE6IGRldmljZSBk cml2ZXIgZGF0YQorICovCitzdGF0aWMgdm9pZCBwaHlfbWRtNjYwMF9zdGF0dXMoc3RydWN0IHdv cmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwaHlfbWRtNjYwMCAqZGRhdGE7CisJc3RydWN0 IGRldmljZSAqZGV2OworCWludCBpLCB2YWw7CisKKwlkZGF0YSA9IGNvbnRhaW5lcl9vZih3b3Jr LCBzdHJ1Y3QgcGh5X21kbTY2MDAsIHN0YXR1c193b3JrLndvcmspOworCWRldiA9IGRkYXRhLT5k ZXY7CisKKwlmb3IgKGkgPSBQSFlfTURNNjYwMF9TVEFUVVMwOworCSAgICAgaSA8PSBQSFlfTURN NjYwMF9TVEFUVVMyOyBpKyspIHsKKwkJc3RydWN0IGdwaW9fZGVzYyAqZ3BpbyA9IGRkYXRhLT5n cGlvW2ldOworCQlpbnQgc2hpZnQgPSAoMiAtIChpIC0gUEhZX01ETTY2MDBfU1RBVFVTMCkpOwor CisJCWlmIChJU19FUlIoZGRhdGEtPmdwaW9baV0pKQorCQkJY29udGludWU7CisJCXZhbCA9IGdw aW9kX2dldF92YWx1ZV9jYW5zbGVlcChncGlvKTsKKwkJZGRhdGEtPnN0YXR1cyAmPSB+KEJJVChz aGlmdCkpOworCQlkZGF0YS0+c3RhdHVzIHw9ICh2YWwgPDwgc2hpZnQpOworCX0KKwlkZXZfaW5m byhkZXYsICJtb2RlbSBzdGF0dXM6ICVpICVzXG4iLAorCQkgZGRhdGEtPnN0YXR1cywKKwkJIHBo eV9tZG02NjAwX3N0YXR1c19uYW1lW2RkYXRhLT5zdGF0dXMgJiA3XSk7CisJY29tcGxldGUoJmRk YXRhLT5hY2spOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcGh5X21kbTY2MDBfaXJxX3RocmVh ZChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwaHlfbWRtNjYwMCAqZGRhdGEgPSBk YXRhOworCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZGF0YS0+c3RhdHVzX3dvcmssIG1zZWNz X3RvX2ppZmZpZXMoMTApKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqCisgKiBw aHlfbWRtNjYwMF9pbml0X2lycSgpIC0gaW5pdGlhbGl6ZSBtZG02NjAwIHN0YXR1cyBJUlEgbGlu ZXMKKyAqIEBkZGF0YTogZGV2aWNlIGRyaXZlciBkYXRhCisgKi8KK3N0YXRpYyB2b2lkIHBoeV9t ZG02NjAwX2luaXRfaXJxKHN0cnVjdCBwaHlfbWRtNjYwMCAqZGRhdGEpCit7CisJc3RydWN0IGRl dmljZSAqZGV2ID0gZGRhdGEtPmRldjsKKwlpbnQgaSwgZXJyb3IsIGlycTsKKworCWZvciAoaSA9 IFBIWV9NRE02NjAwX1NUQVRVUzA7CisJICAgICBpIDw9IFBIWV9NRE02NjAwX1NUQVRVUzI7IGkr KykgeworCQlpZiAoSVNfRVJSKGRkYXRhLT5ncGlvW2ldKSkKKwkJCWNvbnRpbnVlOworCisJCWly cSA9IGdwaW9kX3RvX2lycShkZGF0YS0+Z3Bpb1tpXSk7CisJCWlmIChpcnEgPD0gMCkKKwkJCWNv bnRpbnVlOworCisJCWVycm9yID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGlycSwg TlVMTCwKKwkJCQkJcGh5X21kbTY2MDBfaXJxX3RocmVhZCwKKwkJCQkJSVJRRl9UUklHR0VSX1JJ U0lORyB8CisJCQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwKKwkJCQkJSVJRRl9PTkVTSE9ULAor CQkJCQkibWRtNjYwMCIsCisJCQkJCWRkYXRhKTsKKwkJaWYgKGVycm9yKQorCQkJZGV2X3dhcm4o ZGV2LCAibm8gbW9kZW0gc3RhdHVzIGlycSVpOiAlaVxuIiwKKwkJCQkgaXJxLCBlcnJvcik7CisJ fQorfQorCisvKioKKyAqIHBoeV9tZG02NjAwX2luaXRfbGluZXMoKSAtIGluaXRpYWxpemUgbWRt NjYwMCBHUElPIGxpbmVzCisgKiBAZGRhdGE6IGRldmljZSBkcml2ZXIgZGF0YQorICovCitzdGF0 aWMgaW50IHBoeV9tZG02NjAwX2luaXRfbGluZXMoc3RydWN0IHBoeV9tZG02NjAwICpkZGF0YSkK K3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZGF0YS0+ZGV2OworCWludCBpLCBqLCBucl9ncGlv ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBoeV9tZG02NjAwX2xpbmVfbWFw KTsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBwaHlfbWRtNjYwMF9tYXAgKm1hcCA9CisJCQkmcGh5 X21kbTY2MDBfbGluZV9tYXBbaV07CisKKwkJZm9yIChqID0gMDsgaiA8IG1hcC0+bnJfZ3Bpb3M7 IGorKykgeworCQkJc3RydWN0IGdwaW9fZGVzYyAqKmdwaW8gPSAmZGRhdGEtPmdwaW9bbnJfZ3Bp b107CisKKwkJCSpncGlvID0gZGV2bV9ncGlvZF9nZXRfaW5kZXgoZGV2LAorCQkJCQkJICAgICBt YXAtPm5hbWUsIGosCisJCQkJCQkgICAgIG1hcC0+ZGlyZWN0aW9uKTsKKwkJCWlmIChJU19FUlIo KmdwaW8pKSB7CisJCQkJZGV2X2luZm8oZGV2LAorCQkJCQkgImdwaW8gJXMgZXJyb3IgJWxpLCBh bHJlYWR5IHRha2VuP1xuIiwKKwkJCQkJIG1hcC0+bmFtZSwgUFRSX0VSUigqZ3BpbykpOworCQkJ CXJldHVybiBQVFJfRVJSKCpncGlvKTsKKwkJCX0KKwkJCW5yX2dwaW8rKzsKKwkJfQorCX0KKwor CXJldHVybiAwOworfQorCisvKioKKyAqIHBoeV9tZG02NjAwX2RldmljZV9wb3dlcl9vbigpIC0g cG93ZXIgb24gbWRtNjYwMCBkZXZpY2UKKyAqIEBkZGF0YTogZGV2aWNlIGRyaXZlciBkYXRhCisg KgorICogVG8gZ2V0IHRoZSBpbnRlZ3JhdGVkIFVTQiBwaHkgaW4gTURNNjYwMCB0YWtlcyBzb21l IGhvb3BzLiBXZSBtdXN0IGVuc3VyZQorICogdGhlIHNoYXJlZCBVU0IgYm9vdG1vZGUgR1BJT3Mg YXJlIGNvbmZpZ3VyZWQsIHRoZW4gcmVxdWVzdCBtb2RlbSBzdGFydC11cCwKKyAqIHJlc2V0IGFu ZCBwb3dlci11cC4uIEFuZCB0aGVuIHdlIG5lZWQgdG8gZ2l2ZSB1cCB0aGUgc2hhcmVkIFVTQiBi b290bW9kZQorICogR1BJT3MgYXMgdGhleSBhcmUgYWxzbyB1c2VkIGZvciBPdXQgb2YgQmFuZCAo T09CKSB3YWtlIGZvciB0aGUgVVNCIGFuZAorICogVFMgMjcuMDEwIHNlcmlhbCBtdXguCisgKi8K K3N0YXRpYyBpbnQgcGh5X21kbTY2MDBfZGV2aWNlX3Bvd2VyX29uKHN0cnVjdCBwaHlfbWRtNjYw MCAqZGRhdGEpCit7CisJc3RydWN0IGdwaW9fZGVzYyAqbW9kZV9ncGlvMCA9IGRkYXRhLT5ncGlv W1BIWV9NRE02NjAwX01PREUwXTsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICptb2RlX2dwaW8xID0gZGRh dGEtPmdwaW9bUEhZX01ETTY2MDBfTU9ERTFdOworCXN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dw aW8gPSBkZGF0YS0+Z3Bpb1tQSFlfTURNNjYwMF9SRVNFVF07CisJc3RydWN0IGdwaW9fZGVzYyAq cG93ZXJfZ3BpbyA9IGRkYXRhLT5ncGlvW1BIWV9NRE02NjAwX1BPV0VSXTsKKwlpbnQgZXJyb3Ig PSAwOworCisJLyoKKwkgKiBTaGFyZWQgR1BJT3MgbXVzdCBiZSBsb3cgZm9yIG5vcm1hbCBVU0Ig bW9kZS4gQWZ0ZXIgYm9vdGluZywKKwkgKiB3ZSBkb24ndCBuZWVkIHRoZW0uIFRoZXNlIGNhbiBi ZSBhbHNvIHVzZWQgdG8gY29uZmlndXJlIFVTQgorCSAqIGZsYXNoaW5nIG1vZGUgbGF0ZXIgb24g YmFzZWQgb24gYSBtb2R1bGUgcGFyYW1ldGVyLgorCSAqLworCWdwaW9kX3NldF92YWx1ZV9jYW5z bGVlcChtb2RlX2dwaW8wLCAwKTsKKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAobW9kZV9ncGlv MSwgMCk7CisKKwkvKiBSZXF1ZXN0IHN0YXJ0LXVwIG1vZGUgKi8KKwlwaHlfbWRtNjYwMF9jbWQo ZGRhdGEsIEFQX1NUQVRVU19OT19CWVBBU1MpOworCisJLyogUmVxdWVzdCBhIHJlc2V0IGZpcnN0 ICovCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHJlc2V0X2dwaW8sIDApOworCW1zbGVlcCgx MDApOworCisJLyogVG9nZ2xlIHBvd2VyIEdQSU8gdG8gcmVxdWVzdCBtZG02NjAwIHRvIHN0YXJ0 ICovCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBvd2VyX2dwaW8sIDEpOworCW1zbGVlcCgx MDApOworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwb3dlcl9ncGlvLCAwKTsKKworCS8qCisJ ICogTG9va3MgbGlrZSB0aGUgVVNCIFBIWSBpcyBhdCBsZWFzdCAyLjIgc2Vjb25kcy4KKwkgKiBJ ZiB3ZSB0cnkgdG8gdXNlIGl0IGJlZm9yZSB0aGF0LCB3ZSB3aWxsIGdldCBMMyBlcnJvcnMKKwkg KiBmcm9tIG9tYXAtdXNiLWhvc3QgdHJ5aW5nIHRvIGFjY2VzcyB0aGUgUEhZLiBTZWUgYWxzbwor CSAqIHBoeV9tZG02NjAwX2luaXQoKSBmb3IgLUVQUk9CRV9ERUZFUi4KKwkgKi8KKwltc2xlZXAo UEhZX01ETTY2MDBfU1RBUlRVUF9ERUxBWV9NUyk7CisJZGRhdGEtPmVuYWJsZWQgPSB0cnVlOwor CisJLyogQm9vdGluZyB1cCB0aGUgcmVzdCBvZiBNRE02NjAwIHdpbGwgdGFrZSB0b3RhbCBhYm91 dCA4IHNlY29uZHMgKi8KKwlkZXZfaW5mbyhkZGF0YS0+ZGV2LCAiV2FpdGluZyBmb3IgcG93ZXIg dXAgcmVxdWVzdCB0byBjb21wbGV0ZS4uXG4iKTsKKwlpZiAod2FpdF9mb3JfY29tcGxldGlvbl90 aW1lb3V0KCZkZGF0YS0+YWNrLAorCQkJCQltc2Vjc190b19qaWZmaWVzKDgwMDApKSkgeworCQlk ZXZfaW5mbyhkZGF0YS0+ZGV2LCAiUG93ZXJlZCB1cCBPS1xuIik7CisJfSBlbHNlIHsKKwkJZGRh dGEtPmVuYWJsZWQgPSBmYWxzZTsKKwkJZXJyb3IgPSAtRVRJTUVET1VUOworCQlkZXZfZXJyKGRk YXRhLT5kZXYsICJUaW1lZCBvdXQgcG93ZXJpbmcgdXBcbiIpOworCX0KKworCS8qIEdpdmUgdXAg c2hhcmVkIEdQSU9zIG5vdywgdGhleSB3aWxsIGJlIHVzZWQgZm9yIE9PQiB3YWtlICovCisJZGV2 bV9ncGlvZF9wdXQoZGRhdGEtPmRldiwgbW9kZV9ncGlvMCk7CisJZGRhdGEtPmdwaW9bUEhZX01E TTY2MDBfTU9ERTBdID0gRVJSX1BUUigtRU5PREVWKTsKKwlkZXZtX2dwaW9kX3B1dChkZGF0YS0+ ZGV2LCBtb2RlX2dwaW8xKTsKKwlkZGF0YS0+Z3Bpb1tQSFlfTURNNjYwMF9NT0RFMF0gPSBFUlJf UFRSKC1FTk9ERVYpOworCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHBoeV9tZG02NjAw X2RldmljZV9wb3dlcl9vZmYoKSAtIHBvd2VyIG9mZiBtZG02NjAwIGRldmljZQorICogQGRkYXRh OiBkZXZpY2UgZHJpdmVyIGRhdGEKKyAqLworc3RhdGljIHZvaWQgcGh5X21kbTY2MDBfZGV2aWNl X3Bvd2VyX29mZihzdHJ1Y3QgcGh5X21kbTY2MDAgKmRkYXRhKQoreworCXN0cnVjdCBncGlvX2Rl c2MgKnJlc2V0X2dwaW8gPQorCQlkZGF0YS0+Z3Bpb1tQSFlfTURNNjYwMF9SRVNFVF07CisKKwlk ZGF0YS0+ZW5hYmxlZCA9IGZhbHNlOworCXBoeV9tZG02NjAwX2NtZChkZGF0YSwgQVBfU1RBVFVT X0JQX1NIVVRET1dOX1JFUSk7CisJbXNsZWVwKDEwMCk7CisKKwlpZiAocmVzZXRfZ3BpbyA+PSAw KQorCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocmVzZXRfZ3BpbywgMSk7CisKKwlkZXZfaW5m byhkZGF0YS0+ZGV2LCAiV2FpdGluZyBmb3IgcG93ZXIgZG93biByZXF1ZXN0IHRvIGNvbXBsZXRl Li4gIik7CisJaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZGRhdGEtPmFjaywKKwkJ CQkJbXNlY3NfdG9famlmZmllcyg1MDAwKSkpIHsKKwkJZGV2X2luZm8oZGRhdGEtPmRldiwgIlBv d2VyZWQgZG93biBPS1xuIik7CisJfSBlbHNlIHsKKwkJZGV2X2VycihkZGF0YS0+ZGV2LCAiVGlt ZWQgb3V0IHBvd2VyaW5nIGRvd25cbiIpOworCX0KK30KKworc3RhdGljIHZvaWQgcGh5X21kbTY2 MDBfZGVmZXJyZWRfcG93ZXJfb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVj dCBwaHlfbWRtNjYwMCAqZGRhdGE7CisJaW50IGVycm9yOworCisJZGRhdGEgPSBjb250YWluZXJf b2Yod29yaywgc3RydWN0IHBoeV9tZG02NjAwLCBib290dXBfd29yay53b3JrKTsKKworCWVycm9y ID0gcGh5X21kbTY2MDBfZGV2aWNlX3Bvd2VyX29uKGRkYXRhKTsKKwlpZiAoZXJyb3IpCisJCWRl dl9lcnIoZGRhdGEtPmRldiwgIkRldmljZSBub3QgZnVuY3Rpb25hbFxuIik7Cit9CisKKyNpZmRl ZiBDT05GSUdfT0YKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBoeV9tZG02NjAw X2lkX3RhYmxlW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtb3Rvcm9sYSxtYXBwaG9uZS1tZG02 NjAwIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBwaHlfbWRtNjYwMF9p ZF90YWJsZSk7CisjZW5kaWYKKworc3RhdGljIGludCBwaHlfbWRtNjYwMF9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwaHlfbWRtNjYwMCAqZGRhdGE7CisJ c3RydWN0IHVzYl9vdGcgKm90ZzsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsK KwlpbnQgZXJyb3I7CisKKwlvZl9pZCA9IG9mX21hdGNoX2RldmljZShvZl9tYXRjaF9wdHIocGh5 X21kbTY2MDBfaWRfdGFibGUpLAorCQkJCSZwZGV2LT5kZXYpOworCWlmICghb2ZfaWQpCisJCXJl dHVybiAtRUlOVkFMOworCisJZGRhdGEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9m KCpkZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGRhdGEpCisJCXJldHVybiAtRU5PTUVNOwor CisJSU5JVF9ERUxBWUVEX1dPUksoJmRkYXRhLT5ib290dXBfd29yaywKKwkJCSAgcGh5X21kbTY2 MDBfZGVmZXJyZWRfcG93ZXJfb24pOworCUlOSVRfREVMQVlFRF9XT1JLKCZkZGF0YS0+c3RhdHVz X3dvcmssIHBoeV9tZG02NjAwX3N0YXR1cyk7CisJaW5pdF9jb21wbGV0aW9uKCZkZGF0YS0+YWNr KTsKKworCW90ZyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKm90ZyksIEdGUF9L RVJORUwpOworCWlmICghb3RnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRkYXRhLT5kZXYgPSAm cGRldi0+ZGV2OworCWRkYXRhLT5waHkuZGV2ID0gZGRhdGEtPmRldjsKKwlkZGF0YS0+cGh5Lmxh YmVsID0gInBoeV9tZG02NjAwIjsKKwlkZGF0YS0+cGh5Lm90ZyA9IG90ZzsKKwlkZGF0YS0+cGh5 LnR5cGUgPSBVU0JfUEhZX1RZUEVfVVNCMjsKKwlvdGctPnVzYl9waHkgPSAmZGRhdGEtPnBoeTsK KworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRkYXRhKTsKKworCWVycm9yID0gcGh5X21k bTY2MDBfaW5pdF9saW5lcyhkZGF0YSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisK KwlwaHlfbWRtNjYwMF9pbml0X2lycShkZGF0YSk7CisKKwlkZGF0YS0+Z2VuZXJpY19waHkgPSBk ZXZtX3BoeV9jcmVhdGUoZGRhdGEtPmRldiwgTlVMTCwgJmdwaW9fdXNiX29wcyk7CisJaWYgKElT X0VSUihkZGF0YS0+Z2VuZXJpY19waHkpKSB7CisJCWVycm9yID0gUFRSX0VSUihkZGF0YS0+Z2Vu ZXJpY19waHkpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJcGh5X3NldF9kcnZkYXRhKGRkYXRh LT5nZW5lcmljX3BoeSwgZGRhdGEpOworCisJZGRhdGEtPnBoeV9wcm92aWRlciA9CisJCWRldm1f b2ZfcGh5X3Byb3ZpZGVyX3JlZ2lzdGVyKGRkYXRhLT5kZXYsCisJCQkJCSAgICAgIG9mX3BoeV9z aW1wbGVfeGxhdGUpOworCWlmIChJU19FUlIoZGRhdGEtPnBoeV9wcm92aWRlcikpIHsKKwkJZXJy b3IgPSBQVFJfRVJSKGRkYXRhLT5waHlfcHJvdmlkZXIpOworCQlnb3RvIGNsZWFudXA7CisJfQor CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZGF0YS0+Ym9vdHVwX3dvcmssIDApOworCisJLyoK KwkgKiBTZWUgcGh5X21kbTY2MDBfZGV2aWNlX3Bvd2VyX29uKCkuIFdlIHNob3VsZCBiZSBhYmxl CisJICogdG8gcmVtb3ZlIHRoaXMgZXZlbnR1YWxseSB3aGVuIG9oY2ktcGxhdGZvcm0gY2FuIGRl YWwKKwkgKiB3aXRoIC1FUFJPQkVfREVGRVIuCisJICovCisJbXNsZWVwKFBIWV9NRE02NjAwX1NU QVJUVVBfREVMQVlfTVMgKyA1MDApOworCisJdXNiX2FkZF9waHlfZGV2KCZkZGF0YS0+cGh5KTsK KworCXJldHVybiAwOworCitjbGVhbnVwOgorCXBoeV9tZG02NjAwX2RldmljZV9wb3dlcl9vZmYo ZGRhdGEpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBwaHlfbWRtNjYwMF9yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGh5X21kbTY2MDAg KmRkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGdwaW9fZGVzYyAq cmVzZXRfZ3BpbyA9IGRkYXRhLT5ncGlvW1BIWV9NRE02NjAwX1JFU0VUXTsKKworCWlmICghSVNf RVJSKHJlc2V0X2dwaW8pKQorCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocmVzZXRfZ3Bpbywg MSk7CisKKwlwaHlfbWRtNjYwMF9kZXZpY2VfcG93ZXJfb2ZmKGRkYXRhKTsKKworCWNhbmNlbF9k ZWxheWVkX3dvcmtfc3luYygmZGRhdGEtPmJvb3R1cF93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93 b3JrX3N5bmMoJmRkYXRhLT5zdGF0dXNfd29yayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGh5X21kbTY2MDBfZHJpdmVyID0geworCS5wcm9iZSA9 IHBoeV9tZG02NjAwX3Byb2JlLAorCS5yZW1vdmUgPSBwaHlfbWRtNjYwMF9yZW1vdmUsCisJLmRy aXZlciA9IHsKKwkJLm5hbWUgPSAicGh5LW1hcHBob25lLW1kbTY2MDAiLAorCQkub2ZfbWF0Y2hf dGFibGUgPSBvZl9tYXRjaF9wdHIocGh5X21kbTY2MDBfaWRfdGFibGUpLAorCX0sCit9OworCitt b2R1bGVfcGxhdGZvcm1fZHJpdmVyKHBoeV9tZG02NjAwX2RyaXZlcik7CisKK01PRFVMRV9BTElB UygicGxhdGZvcm06Z3Bpb191c2IiKTsKK01PRFVMRV9BVVRIT1IoIlRvbnkgTGluZGdyZW4gPHRv bnlAYXRvbWlkZS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImdlbmVyaWMgZ3BpbyB1c2Ig cGh5IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo=