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: [PATCHv4] phy: mapphone-mdm6600: Add USB PHY driver for MDM6600 on Droid 4 From: Tony Lindgren Message-Id: <20180309023750.108942-1-tony@atomide.com> Date: Thu, 8 Mar 2018 18:37:50 -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 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 bmcgPHJvYmgrZHRAa2VybmVsLm9yZz4KUmV2aWV3ZWQtYnk6IFJvYiBIZXJyaW5nIDxyb2JoQGtl cm5lbC5vcmc+ClNpZ25lZC1vZmYtYnk6IFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+ Ci0tLQoKQ2hhbmdlcyBzaW5jZSB2MzoKLSBEcm9wcGVkIHVubmVlZGVkIHVzYl9waHkgcmVsYXRl ZCBwYXJ0cyBhcyBzdWdnZXN0ZWQgYnkgS2lzaG9uCgpDaGFuZ2VzIHNpbmNlIHYyOgotIERyb3Bw ZWQgT1RHIGFzIHN1Z2dlc3RlZCBieSBLaXNob24KLSBBZGRlZCBSb2IncyBSZXZpZXdlZC1ieQoK Q2hhbmdlcyBzaW5jZSB2MToKLSBGaXhlZCB1cCBpc3N1ZXMgbm90aWNlZCBieSBSb2IgYW5kIFNl YmFzdGlhbgotIEltcGxlbWVudGVkIHdha2UgaXJxIGhhbmRsZXIgKGZvciBkZWJ1ZyB1c2Ugb25s eSBmb3Igbm93KQotIEltcHJvdmVkIGVycm9yIGhhbmRsaW5nIGJhc2VkIG9uIG1vcmUgdGVzdGlu ZwoKLS0tCiAuLi4vYmluZGluZ3MvcGh5L3BoeS1tYXBwaG9uZS1tZG02NjAwLnR4dCAgICAgICAg ICB8ICAzMCArKwogZHJpdmVycy9waHkvbW90b3JvbGEvS2NvbmZpZyAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDggKwogZHJpdmVycy9waHkvbW90b3JvbGEvTWFrZWZpbGUgICAgICAgICAgICAg ICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9waHkvbW90b3JvbGEvcGh5LW1hcHBob25lLW1kbTY2 MDAuYyAgICAgICAgfCA1NDIgKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQs IDU4MSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZp Y2V0cmVlL2JpbmRpbmdzL3BoeS9waHktbWFwcGhvbmUtbWRtNjYwMC50eHQKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL3BoeS9tb3Rvcm9sYS9waHktbWFwcGhvbmUtbWRtNjYwMC5jCgpkaWZm IC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktbWFwcGhv bmUtbWRtNjYwMC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3Bo eS1tYXBwaG9uZS1tZG02NjAwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxs CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LW1hcHBob25l LW1kbTY2MDAudHh0CkBAIC0wLDAgKzEsMzAgQEAKK0RldmljZSB0cmVlIGJpbmRpbmcgZG9jdW1l bnRhdGlvbiBmb3IgTW90b3JvbGEgTWFwcGhvbmUgTURNNjYwMCBVU0IgUEhZCisKK1JlcXVpcmVk IHByb3BlcnRpZXM6CistIGNvbXBhdGlibGUJCU11c3QgYmUgIm1vdG9yb2xhLG1hcHBob25lLW1k bTY2MDAiCistIGVuYWJsZS1ncGlvcwkJR1BJTyB0byBlbmFibGUgdGhlIFVTQiBQSFkKKy0gcG93 ZXItZ3Bpb3MJCUdQSU8gdG8gcG93ZXIgb24gdGhlIGRldmljZQorLSByZXNldC1ncGlvcwkJR1BJ TyB0byByZXNldCB0aGUgZGV2aWNlCistIG1vdG9yb2xhLG1vZGUtZ3Bpb3MJVHdvIEdQSU9zIHRv IGNvbmZpZ3VyZSBNRE02NjAwIFVTQiBzdGFydC11cCBtb2RlIGZvcgorCQkJbm9ybWFsIG1vZGUg dmVyc3VzIFVTQiBmbGFzaGluZyBtb2RlCistIG1vdG9yb2xhLGNtZC1ncGlvcwlUaHJlZSBHUElP cyB0byBjb250cm9sIHRoZSBwb3dlciBzdGF0ZSBvZiB0aGUgTURNNjYwMAorLSBtb3Rvcm9sYSxz dGF0dXMtZ3Bpb3MJVGhyZWUgR1BJT3MgdG8gcmVhZCB0aGUgcG93ZXIgc3RhdGUgb2YgdGhlIE1E TTY2MDAKKworRXhhbXBsZToKKwordXNiLXBoeSB7CisJY29tcGF0aWJsZSA9ICJtb3Rvcm9sYSxt YXBwaG9uZS1tZG02NjAwIjsKKwllbmFibGUtZ3Bpb3MgPSA8JmdwaW8zIDMxIEdQSU9fQUNUSVZF X0xPVz47CisJcG93ZXItZ3Bpb3MgPSA8JmdwaW8yIDIyIEdQSU9fQUNUSVZFX0hJR0g+OworCXJl c2V0LWdwaW9zID0gPCZncGlvMiAxNyBHUElPX0FDVElWRV9ISUdIPjsKKwltb3Rvcm9sYSxtb2Rl LWdwaW9zID0gPCZncGlvNSAyMCBHUElPX0FDVElWRV9ISUdIPiwKKwkJCSAgICAgIDwmZ3BpbzUg MjEgR1BJT19BQ1RJVkVfSElHSD47CisJbW90b3JvbGEsY21kLWdwaW9zID0gPCZncGlvNCA3IEdQ SU9fQUNUSVZFX0hJR0g+LAorCQkJICAgICA8JmdwaW80IDggR1BJT19BQ1RJVkVfSElHSD4sCisJ CQkgICAgIDwmZ3BpbzUgMTQgR1BJT19BQ1RJVkVfSElHSD47CisJbW90b3JvbGEsc3RhdHVzLWdw aW9zID0gPCZncGlvMiAyMCBHUElPX0FDVElWRV9ISUdIPiwKKwkJCQk8JmdwaW8yIDIxIEdQSU9f QUNUSVZFX0hJR0g+LAorCQkJCTwmZ3BpbzIgMjMgR1BJT19BQ1RJVkVfSElHSD47CisJI3BoeS1j ZWxscyA9IDwwPjsKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L21vdG9yb2xhL0tjb25m aWcgYi9kcml2ZXJzL3BoeS9tb3Rvcm9sYS9LY29uZmlnCi0tLSBhL2RyaXZlcnMvcGh5L21vdG9y b2xhL0tjb25maWcKKysrIGIvZHJpdmVycy9waHkvbW90b3JvbGEvS2NvbmZpZwpAQCAtMTAsMyAr MTAsMTEgQEAgY29uZmlnIFBIWV9DUENBUF9VU0IKIAloZWxwCiAJICBFbmFibGUgdGhpcyBmb3Ig VVNCIHRvIHdvcmsgb24gTW90b3JvbGEgcGhvbmVzIGFuZCB0YWJsZXRzCiAJICBzdWNoIGFzIERy b2lkIDQuCisKK2NvbmZpZyBQSFlfTUFQUEhPTkVfTURNNjYwMAorCXRyaXN0YXRlICJNb3Rvcm9s YSBNYXBwaG9uZSBNRE02NjAwIG1vZGVtIFVTQiBQSFkgZHJpdmVyIgorCWRlcGVuZHMgb24gT0Yg JiYgVVNCX1NVUFBPUlQKKwlzZWxlY3QgR0VORVJJQ19QSFkKKwloZWxwCisJICBFbmFibGUgdGhp cyBmb3IgTURNNjYwMCBVU0IgbW9kZW0gdG8gd29yayBvbiBNb3Rvcm9sYSBwaG9uZXMKKwkgIGFu ZCB0YWJsZXRzIHN1Y2ggYXMgRHJvaWQgNC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L21vdG9y b2xhL01ha2VmaWxlIGIvZHJpdmVycy9waHkvbW90b3JvbGEvTWFrZWZpbGUKLS0tIGEvZHJpdmVy cy9waHkvbW90b3JvbGEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9waHkvbW90b3JvbGEvTWFrZWZp bGUKQEAgLTMsMyArMyw0IEBACiAjCiAKIG9iai0kKENPTkZJR19QSFlfQ1BDQVBfVVNCKQkJKz0g cGh5LWNwY2FwLXVzYi5vCitvYmotJChDT05GSUdfUEhZX01BUFBIT05FX01ETTY2MDApCSs9IHBo eS1tYXBwaG9uZS1tZG02NjAwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L21vdG9yb2xhL3Bo eS1tYXBwaG9uZS1tZG02NjAwLmMgYi9kcml2ZXJzL3BoeS9tb3Rvcm9sYS9waHktbWFwcGhvbmUt bWRtNjYwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9waHkvbW90b3JvbGEvcGh5LW1hcHBob25lLW1kbTY2MDAuYwpAQCAtMCwwICsxLDU0MiBAQAor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBNb3Rvcm9sYSBNYXBw aG9uZSBNRE02NjAwIG1vZGVtIEdQSU8gY29udHJvbGxlZCBVU0IgUEhZIGRyaXZlcgorICogQ29w eXJpZ2h0IChDKSAyMDE4IFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKi8KKwor I2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVk ZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3Bs YXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGxp bnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2lu Y2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKworI2RlZmluZSBQSFlfTURNNjYwMF9QSFlfREVMQVlf TVMJNDAwMAkvKiBQSFkgZW5hYmxlIDIuMnMgdG8gMy41cyAqLworI2RlZmluZSBQSFlfTURNNjYw MF9FTkFCTEVEX0RFTEFZX01TCTgwMDAJLyogOHMgbW9yZSB0b3RhbCBmb3IgTURNNjYwMCAqLwor CitlbnVtIHBoeV9tZG02NjAwX2N0cmxfbGluZXMgeworCVBIWV9NRE02NjAwX0VOQUJMRSwJCQkv KiBVU0IgUEhZIGVuYWJsZSAqLworCVBIWV9NRE02NjAwX1BPV0VSLAkJCS8qIERldmljZSBwb3dl ciAqLworCVBIWV9NRE02NjAwX1JFU0VULAkJCS8qIERldmljZSByZXNldCAqLworCVBIWV9NRE02 NjAwX05SX0NUUkxfTElORVMsCit9OworCitlbnVtIHBoeV9tZG02NjAwX2Jvb3Rtb2RlX2xpbmVz IHsKKwlQSFlfTURNNjYwMF9NT0RFMCwJCQkvKiBvdXQgVVNCIG1vZGUwIGFuZCBPT0Igd2FrZSAq LworCVBIWV9NRE02NjAwX01PREUxLAkJCS8qIG91dCBVU0IgbW9kZTEsIGluIE9PQiB3YWtlICov CisJUEhZX01ETTY2MDBfTlJfTU9ERV9MSU5FUywKK307CisKK2VudW0gcGh5X21kbTY2MDBfY21k X2xpbmVzIHsKKwlQSFlfTURNNjYwMF9DTUQwLAorCVBIWV9NRE02NjAwX0NNRDEsCisJUEhZX01E TTY2MDBfQ01EMiwKKwlQSFlfTURNNjYwMF9OUl9DTURfTElORVMsCit9OworCitlbnVtIHBoeV9t ZG02NjAwX3N0YXR1c19saW5lcyB7CisJUEhZX01ETTY2MDBfU1RBVFVTMCwKKwlQSFlfTURNNjYw MF9TVEFUVVMxLAorCVBIWV9NRE02NjAwX1NUQVRVUzIsCisJUEhZX01ETTY2MDBfTlJfU1RBVFVT X0xJTkVTLAorfTsKKworLyoKKyAqIE1ETTY2MDAgY29tbWFuZCBjb2Rlcy4gVGhlc2UgYXJlIGJh c2VkIG9uIE1vdG9yb2xhIE1hcHBob25lIExpbnV4CisgKiBrZXJuZWwgdHJlZS4KKyAqLworZW51 bSBwaHlfbWRtNjYwMF9jbWQgeworCVBIWV9NRE02NjAwX0NNRF9CUF9QQU5JQ19BQ0ssCisJUEhZ X01ETTY2MDBfQ01EX0RBVEFfT05MWV9CWVBBU1MsCS8qIFJlcm91dGUgVVNCIHRvIENQQ0FQIFBI WSAqLworCVBIWV9NRE02NjAwX0NNRF9GVUxMX0JZUEFTUywJCS8qIFJlcm91dGUgVVNCIHRvIENQ Q0FQIFBIWSAqLworCVBIWV9NRE02NjAwX0NNRF9OT19CWVBBU1MsCQkvKiBSZXF1ZXN0IG5vcm1h bCBVU0IgbW9kZSAqLworCVBIWV9NRE02NjAwX0NNRF9CUF9TSFVURE9XTl9SRVEsCS8qIFJlcXVl c3QgZGV2aWNlIHBvd2VyIG9mZiAqLworCVBIWV9NRE02NjAwX0NNRF9CUF9VTktOT1dOXzUsCisJ UEhZX01ETTY2MDBfQ01EX0JQX1VOS05PV05fNiwKKwlQSFlfTURNNjYwMF9DTURfVU5ERUZJTkVE LAorfTsKKworLyoKKyAqIE1ETTY2MDAgc3RhdHVzIGNvZGVzLiBUaGVzZSBhcmUgYmFzZWQgb24g TW90b3JvbGEgTWFwcGhvbmUgTGludXgKKyAqIGtlcm5lbCB0cmVlLgorICovCitlbnVtIHBoeV9t ZG02NjAwX3N0YXR1cyB7CisJUEhZX01ETTY2MDBfU1RBVFVTX1BBTklDLAkJLyogU2VlbXMgdG8g YmUgcmVhbGx5IG9mZiAqLworCVBIWV9NRE02NjAwX1NUQVRVU19QQU5JQ19CVVNZX1dBSVQsCisJ UEhZX01ETTY2MDBfU1RBVFVTX1FDX0RMT0FELAorCVBIWV9NRE02NjAwX1NUQVRVU19SQU1fRE9X TkxPQURFUiwJLyogTURNNjYwMCBVU0IgZmxhc2hpbmcgbW9kZSAqLworCVBIWV9NRE02NjAwX1NU QVRVU19QSE9ORV9DT0RFX0FXQUtFLAkvKiBNRE02NjAwIG5vcm1hbCBVU0IgbW9kZSAqLworCVBI WV9NRE02NjAwX1NUQVRVU19QSE9ORV9DT0RFX0FTTEVFUCwKKwlQSFlfTURNNjYwMF9TVEFUVVNf U0hVVERPV05fQUNLLAorCVBIWV9NRE02NjAwX1NUQVRVU19VTkRFRklORUQsCit9OworCitzdGF0 aWMgY29uc3QgY2hhciAqIGNvbnN0CitwaHlfbWRtNjYwMF9zdGF0dXNfbmFtZVtdID0geworCSJv ZmYiLCAiYnVzeSIsICJxY19kbCIsICJyYW1fZGwiLCAiYXdha2UiLAorCSJhc2xlZXAiLCAic2h1 dGRvd24iLCAidW5kZWZpbmVkIiwKK307CisKK3N0cnVjdCBwaHlfbWRtNjYwMCB7CisJc3RydWN0 IGRldmljZSAqZGV2OworCXN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5OworCXN0cnVjdCBwaHlfcHJv dmlkZXIgKnBoeV9wcm92aWRlcjsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpjdHJsX2dwaW9zW1BIWV9N RE02NjAwX05SX0NUUkxfTElORVNdOworCXN0cnVjdCBncGlvX2Rlc2NzICptb2RlX2dwaW9zOwor CXN0cnVjdCBncGlvX2Rlc2NzICpzdGF0dXNfZ3Bpb3M7CisJc3RydWN0IGdwaW9fZGVzY3MgKmNt ZF9ncGlvczsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGJvb3R1cF93b3JrOworCXN0cnVjdCBkZWxh eWVkX3dvcmsgc3RhdHVzX3dvcms7CisJc3RydWN0IGNvbXBsZXRpb24gYWNrOworCWJvb2wgZW5h YmxlZDsJCQkJLyogbWRtNjYwMCBwaHkgZW5hYmxlZCAqLworCWJvb2wgcnVubmluZzsJCQkJLyog bWRtNjYwMCBib290IGRvbmUgKi8KKwlpbnQgc3RhdHVzOworfTsKKworc3RhdGljIGludCBwaHlf bWRtNjYwMF9pbml0KHN0cnVjdCBwaHkgKngpCit7CisJc3RydWN0IHBoeV9tZG02NjAwICpkZGF0 YSA9IHBoeV9nZXRfZHJ2ZGF0YSh4KTsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICplbmFibGVfZ3BpbyA9 IGRkYXRhLT5jdHJsX2dwaW9zW1BIWV9NRE02NjAwX0VOQUJMRV07CisKKwlpZiAoIWRkYXRhLT5l bmFibGVkKQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKworCWdwaW9kX3NldF92YWx1ZV9jYW5z bGVlcChlbmFibGVfZ3BpbywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwaHlf bWRtNjYwMF9wb3dlcl9vbihzdHJ1Y3QgcGh5ICp4KQoreworCXN0cnVjdCBwaHlfbWRtNjYwMCAq ZGRhdGEgPSBwaHlfZ2V0X2RydmRhdGEoeCk7CisJc3RydWN0IGdwaW9fZGVzYyAqZW5hYmxlX2dw aW8gPSBkZGF0YS0+Y3RybF9ncGlvc1tQSFlfTURNNjYwMF9FTkFCTEVdOworCisJaWYgKCFkZGF0 YS0+ZW5hYmxlZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xl ZXAoZW5hYmxlX2dwaW8sIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGh5X21k bTY2MDBfcG93ZXJfb2ZmKHN0cnVjdCBwaHkgKngpCit7CisJc3RydWN0IHBoeV9tZG02NjAwICpk ZGF0YSA9IHBoeV9nZXRfZHJ2ZGF0YSh4KTsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICplbmFibGVfZ3Bp byA9IGRkYXRhLT5jdHJsX2dwaW9zW1BIWV9NRE02NjAwX0VOQUJMRV07CisKKwlpZiAoIWRkYXRh LT5lbmFibGVkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVl cChlbmFibGVfZ3BpbywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBwaHlfb3BzIGdwaW9fdXNiX29wcyA9IHsKKwkuaW5pdCA9IHBoeV9tZG02NjAwX2luaXQsCisJ LnBvd2VyX29uID0gcGh5X21kbTY2MDBfcG93ZXJfb24sCisJLnBvd2VyX29mZiA9IHBoeV9tZG02 NjAwX3Bvd2VyX29mZiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKKy8qKgorICogcGh5 X21kbTY2MDBfY21kKCkgLSBzZW5kIGEgY29tbWFuZCByZXF1ZXN0IHRvIG1kbTY2MDAKKyAqIEBk ZGF0YTogZGV2aWNlIGRyaXZlciBkYXRhCisgKgorICogQ29uZmlndXJlcyB0aGUgdGhyZWUgY29t bWFuZCByZXF1ZXN0IEdQSU9zIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuCisgKi8KK3N0YXRpYyB2 b2lkIHBoeV9tZG02NjAwX2NtZChzdHJ1Y3QgcGh5X21kbTY2MDAgKmRkYXRhLCBpbnQgdmFsKQor eworCWludCB2YWx1ZXNbUEhZX01ETTY2MDBfTlJfQ01EX0xJTkVTXTsKKwlpbnQgaTsKKworCXZh bCAmPSAoMSA8PCBQSFlfTURNNjYwMF9OUl9DTURfTElORVMpIC0gMTsKKwlmb3IgKGkgPSAwOyBp IDwgUEhZX01ETTY2MDBfTlJfQ01EX0xJTkVTOyBpKyspCisJCXZhbHVlc1tpXSA9ICh2YWwgJiBC SVQoaSkpID4+IGk7CisKKwlncGlvZF9zZXRfYXJyYXlfdmFsdWVfY2Fuc2xlZXAoUEhZX01ETTY2 MDBfTlJfQ01EX0xJTkVTLAorCQkJCSAgICAgICBkZGF0YS0+Y21kX2dwaW9zLT5kZXNjLCB2YWx1 ZXMpOworfQorCisvKioKKyAqIHBoeV9tZG02NjAwX3N0YXR1cygpIC0gcmVhZCBtZG02NjAwIHN0 YXR1cyBsaW5lcworICogQGRkYXRhOiBkZXZpY2UgZHJpdmVyIGRhdGEKKyAqLworc3RhdGljIHZv aWQgcGh5X21kbTY2MDBfc3RhdHVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1 Y3QgcGh5X21kbTY2MDAgKmRkYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgdmFsdWVz W1BIWV9NRE02NjAwX05SX1NUQVRVU19MSU5FU107CisJaW50IGVycm9yLCBpLCB2YWwgPSAwOwor CisJZGRhdGEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBoeV9tZG02NjAwLCBzdGF0dXNf d29yay53b3JrKTsKKwlkZXYgPSBkZGF0YS0+ZGV2OworCisJZXJyb3IgPSBncGlvZF9nZXRfYXJy YXlfdmFsdWVfY2Fuc2xlZXAoUEhZX01ETTY2MDBfTlJfQ01EX0xJTkVTLAorCQkJCQkgICAgICAg ZGRhdGEtPnN0YXR1c19ncGlvcy0+ZGVzYywKKwkJCQkJICAgICAgIHZhbHVlcyk7CisJaWYgKGVy cm9yKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX01ETTY2MDBfTlJfQ01EX0xJ TkVTOyBpKyspIHsKKwkJdmFsIHw9IHZhbHVlc1tpXSA8PCBpOworCQlkZXZfZGJnKGRkYXRhLT5k ZXYsICJYWFggJXM6IGk6ICVpIHZhbHVlc1tpXTogJWkgdmFsOiAlaVxuIiwKKwkJCV9fZnVuY19f LCBpLCB2YWx1ZXNbaV0sIHZhbCk7CisJfQorCWRkYXRhLT5zdGF0dXMgPSB2YWw7CisKKwlkZXZf aW5mbyhkZXYsICJtb2RlbSBzdGF0dXM6ICVpICVzXG4iLAorCQkgZGRhdGEtPnN0YXR1cywKKwkJ IHBoeV9tZG02NjAwX3N0YXR1c19uYW1lW2RkYXRhLT5zdGF0dXMgJiA3XSk7CisJY29tcGxldGUo JmRkYXRhLT5hY2spOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcGh5X21kbTY2MDBfaXJxX3Ro cmVhZChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwaHlfbWRtNjYwMCAqZGRhdGEg PSBkYXRhOworCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZGF0YS0+c3RhdHVzX3dvcmssIG1z ZWNzX3RvX2ppZmZpZXMoMTApKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqCisg KiBwaHlfbWRtNjYwMF93YWtlaXJxX3RocmVhZCAtIGhhbmRsZSBtb2RlMSBsaW5lIE9PQiB3YWtl IGFmdGVyIGJvb3RpbmcKKyAqIEBpcnE6IGludGVycnVwdAorICogQGRhdGE6IGludGVycnVwdCBo YW5kbGVyIGRhdGEKKyAqCisgKiBHUElPIG1vZGUxIGlzIHVzZWQgaW5pdGlhbGx5IGFzIG91dHB1 dCB0byBjb25maWd1cmUgdGhlIFVTQiBib290CisgKiBtb2RlIGZvciBtZG02NjAwLiBBZnRlciBi b290aW5nIGl0IGlzIHVzZWQgYXMgaW5wdXQgZm9yIE9PQiB3YWtlCisgKiBzaWduYWwgZnJvbSBt ZG02NjAwIHRvIHRoZSBTb0MuIEp1c3QgdXNlIGl0IGZvciBkZWJ1ZyBpbmZvIG9ubHkKKyAqIGZv ciBub3cuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBwaHlfbWRtNjYwMF93YWtlaXJxX3RocmVh ZChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwaHlfbWRtNjYwMCAqZGRhdGEgPSBk YXRhOworCXN0cnVjdCBncGlvX2Rlc2MgKm1vZGVfZ3BpbzE7CisKKwltb2RlX2dwaW8xID0gZGRh dGEtPm1vZGVfZ3Bpb3MtPmRlc2NbUEhZX01ETTY2MDBfTU9ERTFdOworCWRldl9kYmcoZGRhdGEt PmRldiwgIk9PQiB3YWtlIG9uIG1vZGVfZ3BpbzE6ICVpXG4iLAorCQlncGlvZF9nZXRfdmFsdWUo bW9kZV9ncGlvMSkpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIHBoeV9t ZG02NjAwX2luaXRfaXJxKCkgLSBpbml0aWFsaXplIG1kbTY2MDAgc3RhdHVzIElSUSBsaW5lcwor ICogQGRkYXRhOiBkZXZpY2UgZHJpdmVyIGRhdGEKKyAqLworc3RhdGljIHZvaWQgcGh5X21kbTY2 MDBfaW5pdF9pcnEoc3RydWN0IHBoeV9tZG02NjAwICpkZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSBkZGF0YS0+ZGV2OworCWludCBpLCBlcnJvciwgaXJxOworCisJZm9yIChpID0gUEhZ X01ETTY2MDBfU1RBVFVTMDsKKwkgICAgIGkgPD0gUEhZX01ETTY2MDBfU1RBVFVTMjsgaSsrKSB7 CisJCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW8gPSBkZGF0YS0+c3RhdHVzX2dwaW9zLT5kZXNjW2ld OworCisJCWlycSA9IGdwaW9kX3RvX2lycShncGlvKTsKKwkJaWYgKGlycSA8PSAwKQorCQkJY29u dGludWU7CisKKwkJZXJyb3IgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgaXJxLCBO VUxMLAorCQkJCQlwaHlfbWRtNjYwMF9pcnFfdGhyZWFkLAorCQkJCQlJUlFGX1RSSUdHRVJfUklT SU5HIHwKKwkJCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfAorCQkJCQlJUlFGX09ORVNIT1QsCisJ CQkJCSJtZG02NjAwIiwKKwkJCQkJZGRhdGEpOworCQlpZiAoZXJyb3IpCisJCQlkZXZfd2Fybihk ZXYsICJubyBtb2RlbSBzdGF0dXMgaXJxJWk6ICVpXG4iLAorCQkJCSBpcnEsIGVycm9yKTsKKwl9 Cit9CisKK3N0cnVjdCBwaHlfbWRtNjYwMF9tYXAgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50 IGRpcmVjdGlvbjsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5X21kbTY2MDBfbWFwCitw aHlfbWRtNjYwMF9jdHJsX2dwaW9fbWFwW1BIWV9NRE02NjAwX05SX0NUUkxfTElORVNdID0gewor CXsgImVuYWJsZSIsIEdQSU9EX09VVF9MT1csIH0sCQkvKiBsb3cgPSBwaHkgZGlzYWJsZWQgKi8K Kwl7ICJwb3dlciIsIEdQSU9EX09VVF9MT1csIH0sCQkvKiBsb3cgPSBvZmYgKi8KKwl7ICJyZXNl dCIsIEdQSU9EX09VVF9ISUdILCB9LAkJLyogaGlnaCA9IHJlc2V0ICovCit9OworCisvKioKKyAq IHBoeV9tZG02NjAwX2luaXRfbGluZXMoKSAtIGluaXRpYWxpemUgbWRtNjYwMCBHUElPIGxpbmVz CisgKiBAZGRhdGE6IGRldmljZSBkcml2ZXIgZGF0YQorICovCitzdGF0aWMgaW50IHBoeV9tZG02 NjAwX2luaXRfbGluZXMoc3RydWN0IHBoeV9tZG02NjAwICpkZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSBkZGF0YS0+ZGV2OworCWludCBpOworCisJLyogTURNNjYwMCBjb250cm9sIGxp bmVzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGh5X21kbTY2MDBfY3RybF9ncGlv X21hcCk7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgcGh5X21kbTY2MDBfbWFwICptYXAgPQorCQkJ JnBoeV9tZG02NjAwX2N0cmxfZ3Bpb19tYXBbaV07CisJCXN0cnVjdCBncGlvX2Rlc2MgKipncGlv ID0gJmRkYXRhLT5jdHJsX2dwaW9zW2ldOworCisJCSpncGlvID0gZGV2bV9ncGlvZF9nZXQoZGV2 LCBtYXAtPm5hbWUsIG1hcC0+ZGlyZWN0aW9uKTsKKwkJaWYgKElTX0VSUigqZ3BpbykpIHsKKwkJ CWRldl9pbmZvKGRldiwgImdwaW8gJXMgZXJyb3IgJWxpXG4iLAorCQkJCSBtYXAtPm5hbWUsIFBU Ul9FUlIoKmdwaW8pKTsKKwkJCXJldHVybiBQVFJfRVJSKCpncGlvKTsKKwkJfQorCX0KKworCS8q IE1ETTY2MDAgVVNCIHN0YXJ0LXVwIG1vZGUgb3V0cHV0IGxpbmVzICovCisJZGRhdGEtPm1vZGVf Z3Bpb3MgPSBkZXZtX2dwaW9kX2dldF9hcnJheShkZXYsICJtb3Rvcm9sYSxtb2RlIiwKKwkJCQkJ CSBHUElPRF9PVVRfTE9XKTsKKwlpZiAoSVNfRVJSKGRkYXRhLT5tb2RlX2dwaW9zKSkKKwkJcmV0 dXJuIFBUUl9FUlIoZGRhdGEtPm1vZGVfZ3Bpb3MpOworCisJaWYgKGRkYXRhLT5tb2RlX2dwaW9z LT5uZGVzY3MgIT0gUEhZX01ETTY2MDBfTlJfTU9ERV9MSU5FUykKKwkJcmV0dXJuIC1FSU5WQUw7 CisKKwkvKiBNRE02NjAwIHN0YXR1cyBpbnB1dCBsaW5lcyAqLworCWRkYXRhLT5zdGF0dXNfZ3Bp b3MgPSBkZXZtX2dwaW9kX2dldF9hcnJheShkZXYsICJtb3Rvcm9sYSxzdGF0dXMiLAorCQkJCQkJ ICAgR1BJT0RfSU4pOworCWlmIChJU19FUlIoZGRhdGEtPnN0YXR1c19ncGlvcykpCisJCXJldHVy biBQVFJfRVJSKGRkYXRhLT5zdGF0dXNfZ3Bpb3MpOworCisJaWYgKGRkYXRhLT5zdGF0dXNfZ3Bp b3MtPm5kZXNjcyAhPSBQSFlfTURNNjYwMF9OUl9TVEFUVVNfTElORVMpCisJCXJldHVybiAtRUlO VkFMOworCisJLyogTURNNjYwMCBjbWQgb3V0cHV0IGxpbmVzICovCisJZGRhdGEtPmNtZF9ncGlv cyA9IGRldm1fZ3Bpb2RfZ2V0X2FycmF5KGRldiwgIm1vdG9yb2xhLGNtZCIsCisJCQkJCQlHUElP RF9PVVRfTE9XKTsKKwlpZiAoSVNfRVJSKGRkYXRhLT5jbWRfZ3Bpb3MpKQorCQlyZXR1cm4gUFRS X0VSUihkZGF0YS0+Y21kX2dwaW9zKTsKKworCWlmIChkZGF0YS0+Y21kX2dwaW9zLT5uZGVzY3Mg IT0gUEhZX01ETTY2MDBfTlJfQ01EX0xJTkVTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVy biAwOworfQorCisvKioKKyAqIHBoeV9tZG02NjAwX2RldmljZV9wb3dlcl9vbigpIC0gcG93ZXIg b24gbWRtNjYwMCBkZXZpY2UKKyAqIEBkZGF0YTogZGV2aWNlIGRyaXZlciBkYXRhCisgKgorICog VG8gZ2V0IHRoZSBpbnRlZ3JhdGVkIFVTQiBwaHkgaW4gTURNNjYwMCB0YWtlcyBzb21lIGhvb3Bz LiBXZSBtdXN0IGVuc3VyZQorICogdGhlIHNoYXJlZCBVU0IgYm9vdG1vZGUgR1BJT3MgYXJlIGNv bmZpZ3VyZWQsIHRoZW4gcmVxdWVzdCBtb2RlbSBzdGFydC11cCwKKyAqIHJlc2V0IGFuZCBwb3dl ci11cC4uIEFuZCB0aGVuIHdlIG5lZWQgdG8gcmVjeWNsZSB0aGUgc2hhcmVkIFVTQiBib290bW9k ZQorICogR1BJT3MgYXMgdGhleSBhcmUgYWxzbyB1c2VkIGZvciBPdXQgb2YgQmFuZCAoT09CKSB3 YWtlIGZvciB0aGUgVVNCIGFuZAorICogVFMgMjcuMDEwIHNlcmlhbCBtdXguCisgKi8KK3N0YXRp YyBpbnQgcGh5X21kbTY2MDBfZGV2aWNlX3Bvd2VyX29uKHN0cnVjdCBwaHlfbWRtNjYwMCAqZGRh dGEpCit7CisJc3RydWN0IGdwaW9fZGVzYyAqbW9kZV9ncGlvMCwgKm1vZGVfZ3BpbzEsICpyZXNl dF9ncGlvLCAqcG93ZXJfZ3BpbzsKKwlpbnQgZXJyb3IgPSAwLCB3YWtlaXJxOworCisJbW9kZV9n cGlvMCA9IGRkYXRhLT5tb2RlX2dwaW9zLT5kZXNjW1BIWV9NRE02NjAwX01PREUwXTsKKwltb2Rl X2dwaW8xID0gZGRhdGEtPm1vZGVfZ3Bpb3MtPmRlc2NbUEhZX01ETTY2MDBfTU9ERTFdOworCXJl c2V0X2dwaW8gPSBkZGF0YS0+Y3RybF9ncGlvc1tQSFlfTURNNjYwMF9SRVNFVF07CisJcG93ZXJf Z3BpbyA9IGRkYXRhLT5jdHJsX2dwaW9zW1BIWV9NRE02NjAwX1BPV0VSXTsKKworCS8qCisJICog U2hhcmVkIEdQSU9zIG11c3QgYmUgbG93IGZvciBub3JtYWwgVVNCIG1vZGUuIEFmdGVyIGJvb3Rp bmcKKwkgKiB0aGV5IGFyZSB1c2VkIGZvciBPT0Igd2FrZSBzaWduYWxpbmcuIFRoZXNlIGNhbiBi ZSBhbHNvIHVzZWQKKwkgKiB0byBjb25maWd1cmUgVVNCIGZsYXNoaW5nIG1vZGUgbGF0ZXIgb24g YmFzZWQgb24gYSBtb2R1bGUKKwkgKiBwYXJhbWV0ZXIuCisJICovCisJZ3Bpb2Rfc2V0X3ZhbHVl X2NhbnNsZWVwKG1vZGVfZ3BpbzAsIDApOworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChtb2Rl X2dwaW8xLCAwKTsKKworCS8qIFJlcXVlc3Qgc3RhcnQtdXAgbW9kZSAqLworCXBoeV9tZG02NjAw X2NtZChkZGF0YSwgUEhZX01ETTY2MDBfQ01EX05PX0JZUEFTUyk7CisKKwkvKiBSZXF1ZXN0IGEg cmVzZXQgZmlyc3QgKi8KKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocmVzZXRfZ3BpbywgMCk7 CisJbXNsZWVwKDEwMCk7CisKKwkvKiBUb2dnbGUgcG93ZXIgR1BJTyB0byByZXF1ZXN0IG1kbTY2 MDAgdG8gc3RhcnQgKi8KKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocG93ZXJfZ3BpbywgMSk7 CisJbXNsZWVwKDEwMCk7CisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHBvd2VyX2dwaW8sIDAp OworCisJLyoKKwkgKiBMb29rcyBsaWtlIHRoZSBVU0IgUEhZIG5lZWRzIGJldHdlZW4gMi4yIHRv IDQgc2Vjb25kcy4KKwkgKiBJZiB3ZSB0cnkgdG8gdXNlIGl0IGJlZm9yZSB0aGF0LCB3ZSB3aWxs IGdldCBMMyBlcnJvcnMKKwkgKiBmcm9tIG9tYXAtdXNiLWhvc3QgdHJ5aW5nIHRvIGFjY2VzcyB0 aGUgUEhZLiBTZWUgYWxzbworCSAqIHBoeV9tZG02NjAwX2luaXQoKSBmb3IgLUVQUk9CRV9ERUZF Ui4KKwkgKi8KKwltc2xlZXAoUEhZX01ETTY2MDBfUEhZX0RFTEFZX01TKTsKKwlkZGF0YS0+ZW5h YmxlZCA9IHRydWU7CisKKwkvKiBCb290aW5nIHVwIHRoZSByZXN0IG9mIE1ETTY2MDAgd2lsbCB0 YWtlIHRvdGFsIGFib3V0IDggc2Vjb25kcyAqLworCWRldl9pbmZvKGRkYXRhLT5kZXYsICJXYWl0 aW5nIGZvciBwb3dlciB1cCByZXF1ZXN0IHRvIGNvbXBsZXRlLi5cbiIpOworCWlmICh3YWl0X2Zv cl9jb21wbGV0aW9uX3RpbWVvdXQoJmRkYXRhLT5hY2ssCisJCQltc2Vjc190b19qaWZmaWVzKFBI WV9NRE02NjAwX0VOQUJMRURfREVMQVlfTVMpKSkgeworCQlpZiAoZGRhdGEtPnN0YXR1cyA+IFBI WV9NRE02NjAwX1NUQVRVU19QQU5JQyAmJgorCQkgICAgZGRhdGEtPnN0YXR1cyA8IFBIWV9NRE02 NjAwX1NUQVRVU19TSFVURE9XTl9BQ0spCisJCQlkZXZfaW5mbyhkZGF0YS0+ZGV2LCAiUG93ZXJl ZCB1cCBPS1xuIik7CisJfSBlbHNlIHsKKwkJZGRhdGEtPmVuYWJsZWQgPSBmYWxzZTsKKwkJZXJy b3IgPSAtRVRJTUVET1VUOworCQlkZXZfZXJyKGRkYXRhLT5kZXYsICJUaW1lZCBvdXQgcG93ZXJp bmcgdXBcbiIpOworCX0KKworCS8qIFJlY29uZmlndXJlIG1vZGUxIEdQSU8gYXMgaW5wdXQgZm9y IE9PQiB3YWtlICovCisJZ3Bpb2RfZGlyZWN0aW9uX2lucHV0KG1vZGVfZ3BpbzEpOworCisJd2Fr ZWlycSA9IGdwaW9kX3RvX2lycShtb2RlX2dwaW8xKTsKKwlpZiAod2FrZWlycSA8PSAwKQorCQly ZXR1cm4gd2FrZWlycTsKKworCWVycm9yID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZGF0 YS0+ZGV2LCB3YWtlaXJxLCBOVUxMLAorCQkJCQkgIHBoeV9tZG02NjAwX3dha2VpcnFfdGhyZWFk LAorCQkJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfAorCQkJCQkgIElSUUZfVFJJR0dFUl9GQUxM SU5HIHwKKwkJCQkJICBJUlFGX09ORVNIT1QsCisJCQkJCSAgIm1kbTY2MDAtd2FrZSIsCisJCQkJ CSAgZGRhdGEpOworCWlmIChlcnJvcikKKwkJZGV2X3dhcm4oZGRhdGEtPmRldiwgIm5vIG1vZGVt IHdha2VpcnEgaXJxJWk6ICVpXG4iLAorCQkJIHdha2VpcnEsIGVycm9yKTsKKworCWRkYXRhLT5y dW5uaW5nID0gdHJ1ZTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBwaHlfbWRtNjYw MF9kZXZpY2VfcG93ZXJfb2ZmKCkgLSBwb3dlciBvZmYgbWRtNjYwMCBkZXZpY2UKKyAqIEBkZGF0 YTogZGV2aWNlIGRyaXZlciBkYXRhCisgKi8KK3N0YXRpYyB2b2lkIHBoeV9tZG02NjAwX2Rldmlj ZV9wb3dlcl9vZmYoc3RydWN0IHBoeV9tZG02NjAwICpkZGF0YSkKK3sKKwlzdHJ1Y3QgZ3Bpb19k ZXNjICpyZXNldF9ncGlvID0KKwkJZGRhdGEtPmN0cmxfZ3Bpb3NbUEhZX01ETTY2MDBfUkVTRVRd OworCisJZGRhdGEtPmVuYWJsZWQgPSBmYWxzZTsKKwlwaHlfbWRtNjYwMF9jbWQoZGRhdGEsIFBI WV9NRE02NjAwX0NNRF9CUF9TSFVURE9XTl9SRVEpOworCW1zbGVlcCgxMDApOworCisJZ3Bpb2Rf c2V0X3ZhbHVlX2NhbnNsZWVwKHJlc2V0X2dwaW8sIDEpOworCisJZGV2X2luZm8oZGRhdGEtPmRl diwgIldhaXRpbmcgZm9yIHBvd2VyIGRvd24gcmVxdWVzdCB0byBjb21wbGV0ZS4uICIpOworCWlm ICh3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmRkYXRhLT5hY2ssCisJCQkJCW1zZWNzX3Rv X2ppZmZpZXMoNTAwMCkpKSB7CisJCWlmIChkZGF0YS0+c3RhdHVzID09IFBIWV9NRE02NjAwX1NU QVRVU19QQU5JQykKKwkJCWRldl9pbmZvKGRkYXRhLT5kZXYsICJQb3dlcmVkIGRvd24gT0tcbiIp OworCX0gZWxzZSB7CisJCWRldl9lcnIoZGRhdGEtPmRldiwgIlRpbWVkIG91dCBwb3dlcmluZyBk b3duXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBoeV9tZG02NjAwX2RlZmVycmVkX3Bvd2Vy X29uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcGh5X21kbTY2MDAgKmRk YXRhOworCWludCBlcnJvcjsKKworCWRkYXRhID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBw aHlfbWRtNjYwMCwgYm9vdHVwX3dvcmsud29yayk7CisKKwllcnJvciA9IHBoeV9tZG02NjAwX2Rl dmljZV9wb3dlcl9vbihkZGF0YSk7CisJaWYgKGVycm9yKQorCQlkZXZfZXJyKGRkYXRhLT5kZXYs ICJEZXZpY2Ugbm90IGZ1bmN0aW9uYWxcbiIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9m X2RldmljZV9pZCBwaHlfbWRtNjYwMF9pZF90YWJsZVtdID0geworCXsgLmNvbXBhdGlibGUgPSAi bW90b3JvbGEsbWFwcGhvbmUtbWRtNjYwMCIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9U QUJMRShvZiwgcGh5X21kbTY2MDBfaWRfdGFibGUpOworCitzdGF0aWMgaW50IHBoeV9tZG02NjAw X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHBoeV9tZG02 NjAwICpkZGF0YTsKKwlpbnQgZXJyb3I7CisKKwlkZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ ZGV2LCBzaXplb2YoKmRkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZGF0YSkKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlJTklUX0RFTEFZRURfV09SSygmZGRhdGEtPmJvb3R1cF93b3JrLAorCQkJ ICBwaHlfbWRtNjYwMF9kZWZlcnJlZF9wb3dlcl9vbik7CisJSU5JVF9ERUxBWUVEX1dPUksoJmRk YXRhLT5zdGF0dXNfd29yaywgcGh5X21kbTY2MDBfc3RhdHVzKTsKKwlpbml0X2NvbXBsZXRpb24o JmRkYXRhLT5hY2spOworCisJZGRhdGEtPmRldiA9ICZwZGV2LT5kZXY7CisJcGxhdGZvcm1fc2V0 X2RydmRhdGEocGRldiwgZGRhdGEpOworCisJZXJyb3IgPSBwaHlfbWRtNjYwMF9pbml0X2xpbmVz KGRkYXRhKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCXBoeV9tZG02NjAwX2lu aXRfaXJxKGRkYXRhKTsKKworCWRkYXRhLT5nZW5lcmljX3BoeSA9IGRldm1fcGh5X2NyZWF0ZShk ZGF0YS0+ZGV2LCBOVUxMLCAmZ3Bpb191c2Jfb3BzKTsKKwlpZiAoSVNfRVJSKGRkYXRhLT5nZW5l cmljX3BoeSkpIHsKKwkJZXJyb3IgPSBQVFJfRVJSKGRkYXRhLT5nZW5lcmljX3BoeSk7CisJCWdv dG8gY2xlYW51cDsKKwl9CisKKwlwaHlfc2V0X2RydmRhdGEoZGRhdGEtPmdlbmVyaWNfcGh5LCBk ZGF0YSk7CisKKwlkZGF0YS0+cGh5X3Byb3ZpZGVyID0KKwkJZGV2bV9vZl9waHlfcHJvdmlkZXJf cmVnaXN0ZXIoZGRhdGEtPmRldiwKKwkJCQkJICAgICAgb2ZfcGh5X3NpbXBsZV94bGF0ZSk7CisJ aWYgKElTX0VSUihkZGF0YS0+cGh5X3Byb3ZpZGVyKSkgeworCQllcnJvciA9IFBUUl9FUlIoZGRh dGEtPnBoeV9wcm92aWRlcik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlzY2hlZHVsZV9kZWxh eWVkX3dvcmsoJmRkYXRhLT5ib290dXBfd29yaywgMCk7CisKKwkvKgorCSAqIFNlZSBwaHlfbWRt NjYwMF9kZXZpY2VfcG93ZXJfb24oKS4gV2Ugc2hvdWxkIGJlIGFibGUKKwkgKiB0byByZW1vdmUg dGhpcyBldmVudHVhbGx5IHdoZW4gb2hjaS1wbGF0Zm9ybSBjYW4gZGVhbAorCSAqIHdpdGggLUVQ Uk9CRV9ERUZFUi4KKwkgKi8KKwltc2xlZXAoUEhZX01ETTY2MDBfUEhZX0RFTEFZX01TICsgNTAw KTsKKworCXJldHVybiAwOworCitjbGVhbnVwOgorCXBoeV9tZG02NjAwX2RldmljZV9wb3dlcl9v ZmYoZGRhdGEpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBwaHlfbWRtNjYwMF9y ZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGh5X21kbTY2 MDAgKmRkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGdwaW9fZGVz YyAqcmVzZXRfZ3BpbyA9IGRkYXRhLT5jdHJsX2dwaW9zW1BIWV9NRE02NjAwX1JFU0VUXTsKKwor CWlmICghZGRhdGEtPnJ1bm5pbmcpCisJCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZGRh dGEtPmFjaywKKwkJCW1zZWNzX3RvX2ppZmZpZXMoUEhZX01ETTY2MDBfRU5BQkxFRF9ERUxBWV9N UykpOworCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHJlc2V0X2dwaW8sIDEpOworCXBoeV9t ZG02NjAwX2RldmljZV9wb3dlcl9vZmYoZGRhdGEpOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19z eW5jKCZkZGF0YS0+Ym9vdHVwX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGRh dGEtPnN0YXR1c193b3JrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRm b3JtX2RyaXZlciBwaHlfbWRtNjYwMF9kcml2ZXIgPSB7CisJLnByb2JlID0gcGh5X21kbTY2MDBf cHJvYmUsCisJLnJlbW92ZSA9IHBoeV9tZG02NjAwX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQku bmFtZSA9ICJwaHktbWFwcGhvbmUtbWRtNjYwMCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21h dGNoX3B0cihwaHlfbWRtNjYwMF9pZF90YWJsZSksCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9y bV9kcml2ZXIocGh5X21kbTY2MDBfZHJpdmVyKTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpn cGlvX3VzYiIpOworTU9EVUxFX0FVVEhPUigiVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNv bT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigibWRtNjYwMCBncGlvIHVzYiBwaHkgZHJpdmVyIik7 CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cg==