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: [PATCHv3] phy: mapphone-mdm6600: Add USB PHY driver for MDM6600 on Droid 4 From: Tony Lindgren Message-Id: <20180307145640.93867-1-tony@atomide.com> Date: Wed, 7 Mar 2018 06:56:40 -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+ Ci0tLQoKQ2hhbmdlcyBzaW5jZSB2MjoKLSBEcm9wcGVkIE9URyBhcyBzdWdnZXN0ZWQgYnkgS2lz aG9uCi0gQWRkZWQgUm9iJ3MgUmV2aWV3ZWQtYnkKCkNoYW5nZXMgc2luY2UgdjE6Ci0gRml4ZWQg dXAgaXNzdWVzIG5vdGljZWQgYnkgUm9iIGFuZCBTZWJhc3RpYW4KLSBJbXBsZW1lbnRlZCB3YWtl IGlycSBoYW5kbGVyIChmb3IgZGVidWcgdXNlIG9ubHkgZm9yIG5vdykKLSBJbXByb3ZlZCBlcnJv ciBoYW5kbGluZyBiYXNlZCBvbiBtb3JlIHRlc3RpbmcKCi0tLQogLi4uL2JpbmRpbmdzL3BoeS9w aHktbWFwcGhvbmUtbWRtNjYwMC50eHQgICAgICAgICAgfCAgMzAgKysKIGRyaXZlcnMvcGh5L21v dG9yb2xhL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsKIGRyaXZlcnMvcGh5 L21vdG9yb2xhL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMv cGh5L21vdG9yb2xhL3BoeS1tYXBwaG9uZS1tZG02NjAwLmMgICAgICAgIHwgNTQ5ICsrKysrKysr KysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA1ODkgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LW1h cHBob25lLW1kbTY2MDAudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9waHkvbW90b3Jv bGEvcGh5LW1hcHBob25lLW1kbTY2MDAuYwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2 aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LW1hcHBob25lLW1kbTY2MDAudHh0IGIvRG9jdW1lbnRh dGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktbWFwcGhvbmUtbWRtNjYwMC50eHQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Rldmlj ZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1tYXBwaG9uZS1tZG02NjAwLnR4dApAQCAtMCwwICsxLDMw IEBACitEZXZpY2UgdHJlZSBiaW5kaW5nIGRvY3VtZW50YXRpb24gZm9yIE1vdG9yb2xhIE1hcHBo b25lIE1ETTY2MDAgVVNCIFBIWQorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxl CQlNdXN0IGJlICJtb3Rvcm9sYSxtYXBwaG9uZS1tZG02NjAwIgorLSBlbmFibGUtZ3Bpb3MJCUdQ SU8gdG8gZW5hYmxlIHRoZSBVU0IgUEhZCistIHBvd2VyLWdwaW9zCQlHUElPIHRvIHBvd2VyIG9u IHRoZSBkZXZpY2UKKy0gcmVzZXQtZ3Bpb3MJCUdQSU8gdG8gcmVzZXQgdGhlIGRldmljZQorLSBt b3Rvcm9sYSxtb2RlLWdwaW9zCVR3byBHUElPcyB0byBjb25maWd1cmUgTURNNjYwMCBVU0Igc3Rh cnQtdXAgbW9kZSBmb3IKKwkJCW5vcm1hbCBtb2RlIHZlcnN1cyBVU0IgZmxhc2hpbmcgbW9kZQor LSBtb3Rvcm9sYSxjbWQtZ3Bpb3MJVGhyZWUgR1BJT3MgdG8gY29udHJvbCB0aGUgcG93ZXIgc3Rh dGUgb2YgdGhlIE1ETTY2MDAKKy0gbW90b3JvbGEsc3RhdHVzLWdwaW9zCVRocmVlIEdQSU9zIHRv IHJlYWQgdGhlIHBvd2VyIHN0YXRlIG9mIHRoZSBNRE02NjAwCisKK0V4YW1wbGU6CisKK3VzYi1w aHkgeworCWNvbXBhdGlibGUgPSAibW90b3JvbGEsbWFwcGhvbmUtbWRtNjYwMCI7CisJZW5hYmxl LWdwaW9zID0gPCZncGlvMyAzMSBHUElPX0FDVElWRV9MT1c+OworCXBvd2VyLWdwaW9zID0gPCZn cGlvMiAyMiBHUElPX0FDVElWRV9ISUdIPjsKKwlyZXNldC1ncGlvcyA9IDwmZ3BpbzIgMTcgR1BJ T19BQ1RJVkVfSElHSD47CisJbW90b3JvbGEsbW9kZS1ncGlvcyA9IDwmZ3BpbzUgMjAgR1BJT19B Q1RJVkVfSElHSD4sCisJCQkgICAgICA8JmdwaW81IDIxIEdQSU9fQUNUSVZFX0hJR0g+OworCW1v dG9yb2xhLGNtZC1ncGlvcyA9IDwmZ3BpbzQgNyBHUElPX0FDVElWRV9ISUdIPiwKKwkJCSAgICAg PCZncGlvNCA4IEdQSU9fQUNUSVZFX0hJR0g+LAorCQkJICAgICA8JmdwaW81IDE0IEdQSU9fQUNU SVZFX0hJR0g+OworCW1vdG9yb2xhLHN0YXR1cy1ncGlvcyA9IDwmZ3BpbzIgMjAgR1BJT19BQ1RJ VkVfSElHSD4sCisJCQkJPCZncGlvMiAyMSBHUElPX0FDVElWRV9ISUdIPiwKKwkJCQk8JmdwaW8y IDIzIEdQSU9fQUNUSVZFX0hJR0g+OworCSNwaHktY2VsbHMgPSA8MD47Cit9OworCmRpZmYgLS1n aXQgYS9kcml2ZXJzL3BoeS9tb3Rvcm9sYS9LY29uZmlnIGIvZHJpdmVycy9waHkvbW90b3JvbGEv S2NvbmZpZwotLS0gYS9kcml2ZXJzL3BoeS9tb3Rvcm9sYS9LY29uZmlnCisrKyBiL2RyaXZlcnMv cGh5L21vdG9yb2xhL0tjb25maWcKQEAgLTEwLDMgKzEwLDEyIEBAIGNvbmZpZyBQSFlfQ1BDQVBf VVNCCiAJaGVscAogCSAgRW5hYmxlIHRoaXMgZm9yIFVTQiB0byB3b3JrIG9uIE1vdG9yb2xhIHBo b25lcyBhbmQgdGFibGV0cwogCSAgc3VjaCBhcyBEcm9pZCA0LgorCitjb25maWcgUEhZX01BUFBI T05FX01ETTY2MDAKKwl0cmlzdGF0ZSAiTW90b3JvbGEgTWFwcGhvbmUgTURNNjYwMCBtb2RlbSBV U0IgUEhZIGRyaXZlciIKKwlkZXBlbmRzIG9uIE9GICYmIFVTQl9TVVBQT1JUCisJc2VsZWN0IEdF TkVSSUNfUEhZCisJc2VsZWN0IFVTQl9QSFkKKwloZWxwCisJICBFbmFibGUgdGhpcyBmb3IgTURN NjYwMCBVU0IgbW9kZW0gdG8gd29yayBvbiBNb3Rvcm9sYSBwaG9uZXMKKwkgIGFuZCB0YWJsZXRz IHN1Y2ggYXMgRHJvaWQgNC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L21vdG9yb2xhL01ha2Vm aWxlIGIvZHJpdmVycy9waHkvbW90b3JvbGEvTWFrZWZpbGUKLS0tIGEvZHJpdmVycy9waHkvbW90 b3JvbGEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9waHkvbW90b3JvbGEvTWFrZWZpbGUKQEAgLTMs MyArMyw0IEBACiAjCiAKIG9iai0kKENPTkZJR19QSFlfQ1BDQVBfVVNCKQkJKz0gcGh5LWNwY2Fw LXVzYi5vCitvYmotJChDT05GSUdfUEhZX01BUFBIT05FX01ETTY2MDApCSs9IHBoeS1tYXBwaG9u ZS1tZG02NjAwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L21vdG9yb2xhL3BoeS1tYXBwaG9u ZS1tZG02NjAwLmMgYi9kcml2ZXJzL3BoeS9tb3Rvcm9sYS9waHktbWFwcGhvbmUtbWRtNjYwMC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9waHkvbW90 b3JvbGEvcGh5LW1hcHBob25lLW1kbTY2MDAuYwpAQCAtMCwwICsxLDU0OSBAQAorLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBNb3Rvcm9sYSBNYXBwaG9uZSBNRE02 NjAwIG1vZGVtIEdQSU8gY29udHJvbGxlZCBVU0IgUEhZIGRyaXZlcgorICogQ29weXJpZ2h0IChD KSAyMDE4IFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKi8KKworI2luY2x1ZGUg PGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgv aW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgor I2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIu aD4KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9v Zl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51 eC91c2IvcGh5X2NvbXBhbmlvbi5oPgorCisjZGVmaW5lIFBIWV9NRE02NjAwX1BIWV9ERUxBWV9N Uwk0MDAwCS8qIFBIWSBlbmFibGUgMi4ycyB0byAzLjVzICovCisjZGVmaW5lIFBIWV9NRE02NjAw X0VOQUJMRURfREVMQVlfTVMJODAwMAkvKiA4cyBtb3JlIHRvdGFsIGZvciBNRE02NjAwICovCisK K2VudW0gcGh5X21kbTY2MDBfY3RybF9saW5lcyB7CisJUEhZX01ETTY2MDBfRU5BQkxFLAkJCS8q IFVTQiBQSFkgZW5hYmxlICovCisJUEhZX01ETTY2MDBfUE9XRVIsCQkJLyogRGV2aWNlIHBvd2Vy ICovCisJUEhZX01ETTY2MDBfUkVTRVQsCQkJLyogRGV2aWNlIHJlc2V0ICovCisJUEhZX01ETTY2 MDBfTlJfQ1RSTF9MSU5FUywKK307CisKK2VudW0gcGh5X21kbTY2MDBfYm9vdG1vZGVfbGluZXMg eworCVBIWV9NRE02NjAwX01PREUwLAkJCS8qIG91dCBVU0IgbW9kZTAgYW5kIE9PQiB3YWtlICov CisJUEhZX01ETTY2MDBfTU9ERTEsCQkJLyogb3V0IFVTQiBtb2RlMSwgaW4gT09CIHdha2UgKi8K KwlQSFlfTURNNjYwMF9OUl9NT0RFX0xJTkVTLAorfTsKKworZW51bSBwaHlfbWRtNjYwMF9jbWRf bGluZXMgeworCVBIWV9NRE02NjAwX0NNRDAsCisJUEhZX01ETTY2MDBfQ01EMSwKKwlQSFlfTURN NjYwMF9DTUQyLAorCVBIWV9NRE02NjAwX05SX0NNRF9MSU5FUywKK307CisKK2VudW0gcGh5X21k bTY2MDBfc3RhdHVzX2xpbmVzIHsKKwlQSFlfTURNNjYwMF9TVEFUVVMwLAorCVBIWV9NRE02NjAw X1NUQVRVUzEsCisJUEhZX01ETTY2MDBfU1RBVFVTMiwKKwlQSFlfTURNNjYwMF9OUl9TVEFUVVNf TElORVMsCit9OworCisvKgorICogTURNNjYwMCBjb21tYW5kIGNvZGVzLiBUaGVzZSBhcmUgYmFz ZWQgb24gTW90b3JvbGEgTWFwcGhvbmUgTGludXgKKyAqIGtlcm5lbCB0cmVlLgorICovCitlbnVt IHBoeV9tZG02NjAwX2NtZCB7CisJUEhZX01ETTY2MDBfQ01EX0JQX1BBTklDX0FDSywKKwlQSFlf TURNNjYwMF9DTURfREFUQV9PTkxZX0JZUEFTUywJLyogUmVyb3V0ZSBVU0IgdG8gQ1BDQVAgUEhZ ICovCisJUEhZX01ETTY2MDBfQ01EX0ZVTExfQllQQVNTLAkJLyogUmVyb3V0ZSBVU0IgdG8gQ1BD QVAgUEhZICovCisJUEhZX01ETTY2MDBfQ01EX05PX0JZUEFTUywJCS8qIFJlcXVlc3Qgbm9ybWFs IFVTQiBtb2RlICovCisJUEhZX01ETTY2MDBfQ01EX0JQX1NIVVRET1dOX1JFUSwJLyogUmVxdWVz dCBkZXZpY2UgcG93ZXIgb2ZmICovCisJUEhZX01ETTY2MDBfQ01EX0JQX1VOS05PV05fNSwKKwlQ SFlfTURNNjYwMF9DTURfQlBfVU5LTk9XTl82LAorCVBIWV9NRE02NjAwX0NNRF9VTkRFRklORUQs Cit9OworCisvKgorICogTURNNjYwMCBzdGF0dXMgY29kZXMuIFRoZXNlIGFyZSBiYXNlZCBvbiBN b3Rvcm9sYSBNYXBwaG9uZSBMaW51eAorICoga2VybmVsIHRyZWUuCisgKi8KK2VudW0gcGh5X21k bTY2MDBfc3RhdHVzIHsKKwlQSFlfTURNNjYwMF9TVEFUVVNfUEFOSUMsCQkvKiBTZWVtcyB0byBi ZSByZWFsbHkgb2ZmICovCisJUEhZX01ETTY2MDBfU1RBVFVTX1BBTklDX0JVU1lfV0FJVCwKKwlQ SFlfTURNNjYwMF9TVEFUVVNfUUNfRExPQUQsCisJUEhZX01ETTY2MDBfU1RBVFVTX1JBTV9ET1dO TE9BREVSLAkvKiBNRE02NjAwIFVTQiBmbGFzaGluZyBtb2RlICovCisJUEhZX01ETTY2MDBfU1RB VFVTX1BIT05FX0NPREVfQVdBS0UsCS8qIE1ETTY2MDAgbm9ybWFsIFVTQiBtb2RlICovCisJUEhZ X01ETTY2MDBfU1RBVFVTX1BIT05FX0NPREVfQVNMRUVQLAorCVBIWV9NRE02NjAwX1NUQVRVU19T SFVURE9XTl9BQ0ssCisJUEhZX01ETTY2MDBfU1RBVFVTX1VOREVGSU5FRCwKK307CisKK3N0YXRp YyBjb25zdCBjaGFyICogY29uc3QKK3BoeV9tZG02NjAwX3N0YXR1c19uYW1lW10gPSB7CisJIm9m ZiIsICJidXN5IiwgInFjX2RsIiwgInJhbV9kbCIsICJhd2FrZSIsCisJImFzbGVlcCIsICJzaHV0 ZG93biIsICJ1bmRlZmluZWQiLAorfTsKKworc3RydWN0IHBoeV9tZG02NjAwIHsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7CisJc3RydWN0IHVzYl9waHkgcGh5OworCXN0cnVjdCBwaHkgKmdlbmVyaWNf cGh5OworCXN0cnVjdCBwaHlfcHJvdmlkZXIgKnBoeV9wcm92aWRlcjsKKwlzdHJ1Y3QgZ3Bpb19k ZXNjICpjdHJsX2dwaW9zW1BIWV9NRE02NjAwX05SX0NUUkxfTElORVNdOworCXN0cnVjdCBncGlv X2Rlc2NzICptb2RlX2dwaW9zOworCXN0cnVjdCBncGlvX2Rlc2NzICpzdGF0dXNfZ3Bpb3M7CisJ c3RydWN0IGdwaW9fZGVzY3MgKmNtZF9ncGlvczsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGJvb3R1 cF93b3JrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHVzX3dvcms7CisJc3RydWN0IGNvbXBs ZXRpb24gYWNrOworCWJvb2wgZW5hYmxlZDsJCQkJLyogbWRtNjYwMCBwaHkgZW5hYmxlZCAqLwor CWJvb2wgcnVubmluZzsJCQkJLyogbWRtNjYwMCBib290IGRvbmUgKi8KKwlpbnQgc3RhdHVzOwor fTsKKworc3RhdGljIGludCBwaHlfbWRtNjYwMF9pbml0KHN0cnVjdCBwaHkgKngpCit7CisJc3Ry dWN0IHBoeV9tZG02NjAwICpkZGF0YSA9IHBoeV9nZXRfZHJ2ZGF0YSh4KTsKKwlzdHJ1Y3QgZ3Bp b19kZXNjICplbmFibGVfZ3BpbyA9IGRkYXRhLT5jdHJsX2dwaW9zW1BIWV9NRE02NjAwX0VOQUJM RV07CisKKwlpZiAoIWRkYXRhLT5lbmFibGVkKQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwor CWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChlbmFibGVfZ3BpbywgMCk7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBwaHlfbWRtNjYwMF9wb3dlcl9vbihzdHJ1Y3QgcGh5ICp4KQorewor CXN0cnVjdCBwaHlfbWRtNjYwMCAqZGRhdGEgPSBwaHlfZ2V0X2RydmRhdGEoeCk7CisJc3RydWN0 IGdwaW9fZGVzYyAqZW5hYmxlX2dwaW8gPSBkZGF0YS0+Y3RybF9ncGlvc1tQSFlfTURNNjYwMF9F TkFCTEVdOworCisJaWYgKCFkZGF0YS0+ZW5hYmxlZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwln cGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoZW5hYmxlX2dwaW8sIDEpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgcGh5X21kbTY2MDBfcG93ZXJfb2ZmKHN0cnVjdCBwaHkgKngpCit7CisJ c3RydWN0IHBoeV9tZG02NjAwICpkZGF0YSA9IHBoeV9nZXRfZHJ2ZGF0YSh4KTsKKwlzdHJ1Y3Qg Z3Bpb19kZXNjICplbmFibGVfZ3BpbyA9IGRkYXRhLT5jdHJsX2dwaW9zW1BIWV9NRE02NjAwX0VO QUJMRV07CisKKwlpZiAoIWRkYXRhLT5lbmFibGVkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWdw aW9kX3NldF92YWx1ZV9jYW5zbGVlcChlbmFibGVfZ3BpbywgMCk7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfb3BzIGdwaW9fdXNiX29wcyA9IHsKKwkuaW5pdCA9 IHBoeV9tZG02NjAwX2luaXQsCisJLnBvd2VyX29uID0gcGh5X21kbTY2MDBfcG93ZXJfb24sCisJ LnBvd2VyX29mZiA9IHBoeV9tZG02NjAwX3Bvd2VyX29mZiwKKwkub3duZXIgPSBUSElTX01PRFVM RSwKK307CisKKy8qKgorICogcGh5X21kbTY2MDBfY21kKCkgLSBzZW5kIGEgY29tbWFuZCByZXF1 ZXN0IHRvIG1kbTY2MDAKKyAqIEBkZGF0YTogZGV2aWNlIGRyaXZlciBkYXRhCisgKgorICogQ29u ZmlndXJlcyB0aGUgdGhyZWUgY29tbWFuZCByZXF1ZXN0IEdQSU9zIHRvIHRoZSBzcGVjaWZpZWQg dmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIHBoeV9tZG02NjAwX2NtZChzdHJ1Y3QgcGh5X21kbTY2 MDAgKmRkYXRhLCBpbnQgdmFsKQoreworCWludCB2YWx1ZXNbUEhZX01ETTY2MDBfTlJfQ01EX0xJ TkVTXTsKKwlpbnQgaTsKKworCXZhbCAmPSAoMSA8PCBQSFlfTURNNjYwMF9OUl9DTURfTElORVMp IC0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX01ETTY2MDBfTlJfQ01EX0xJTkVTOyBpKyspCisJ CXZhbHVlc1tpXSA9ICh2YWwgJiBCSVQoaSkpID4+IGk7CisKKwlncGlvZF9zZXRfYXJyYXlfdmFs dWVfY2Fuc2xlZXAoUEhZX01ETTY2MDBfTlJfQ01EX0xJTkVTLAorCQkJCSAgICAgICBkZGF0YS0+ Y21kX2dwaW9zLT5kZXNjLCB2YWx1ZXMpOworfQorCisvKioKKyAqIHBoeV9tZG02NjAwX3N0YXR1 cygpIC0gcmVhZCBtZG02NjAwIHN0YXR1cyBsaW5lcworICogQGRkYXRhOiBkZXZpY2UgZHJpdmVy IGRhdGEKKyAqLworc3RhdGljIHZvaWQgcGh5X21kbTY2MDBfc3RhdHVzKHN0cnVjdCB3b3JrX3N0 cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcGh5X21kbTY2MDAgKmRkYXRhOworCXN0cnVjdCBkZXZp Y2UgKmRldjsKKwlpbnQgdmFsdWVzW1BIWV9NRE02NjAwX05SX1NUQVRVU19MSU5FU107CisJaW50 IGVycm9yLCBpLCB2YWwgPSAwOworCisJZGRhdGEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0 IHBoeV9tZG02NjAwLCBzdGF0dXNfd29yay53b3JrKTsKKwlkZXYgPSBkZGF0YS0+ZGV2OworCisJ ZXJyb3IgPSBncGlvZF9nZXRfYXJyYXlfdmFsdWVfY2Fuc2xlZXAoUEhZX01ETTY2MDBfTlJfQ01E X0xJTkVTLAorCQkJCQkgICAgICAgZGRhdGEtPnN0YXR1c19ncGlvcy0+ZGVzYywKKwkJCQkJICAg ICAgIHZhbHVlcyk7CisJaWYgKGVycm9yKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwg UEhZX01ETTY2MDBfTlJfQ01EX0xJTkVTOyBpKyspIHsKKwkJdmFsIHw9IHZhbHVlc1tpXSA8PCBp OworCQlkZXZfZGJnKGRkYXRhLT5kZXYsICJYWFggJXM6IGk6ICVpIHZhbHVlc1tpXTogJWkgdmFs OiAlaVxuIiwKKwkJCV9fZnVuY19fLCBpLCB2YWx1ZXNbaV0sIHZhbCk7CisJfQorCWRkYXRhLT5z dGF0dXMgPSB2YWw7CisKKwlkZXZfaW5mbyhkZXYsICJtb2RlbSBzdGF0dXM6ICVpICVzXG4iLAor CQkgZGRhdGEtPnN0YXR1cywKKwkJIHBoeV9tZG02NjAwX3N0YXR1c19uYW1lW2RkYXRhLT5zdGF0 dXMgJiA3XSk7CisJY29tcGxldGUoJmRkYXRhLT5hY2spOworfQorCitzdGF0aWMgaXJxcmV0dXJu X3QgcGh5X21kbTY2MDBfaXJxX3RocmVhZChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVj dCBwaHlfbWRtNjYwMCAqZGRhdGEgPSBkYXRhOworCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZk ZGF0YS0+c3RhdHVzX3dvcmssIG1zZWNzX3RvX2ppZmZpZXMoMTApKTsKKworCXJldHVybiBJUlFf SEFORExFRDsKK30KKworLyoqCisgKiBwaHlfbWRtNjYwMF93YWtlaXJxX3RocmVhZCAtIGhhbmRs ZSBtb2RlMSBsaW5lIE9PQiB3YWtlIGFmdGVyIGJvb3RpbmcKKyAqIEBpcnE6IGludGVycnVwdAor ICogQGRhdGE6IGludGVycnVwdCBoYW5kbGVyIGRhdGEKKyAqCisgKiBHUElPIG1vZGUxIGlzIHVz ZWQgaW5pdGlhbGx5IGFzIG91dHB1dCB0byBjb25maWd1cmUgdGhlIFVTQiBib290CisgKiBtb2Rl IGZvciBtZG02NjAwLiBBZnRlciBib290aW5nIGl0IGlzIHVzZWQgYXMgaW5wdXQgZm9yIE9PQiB3 YWtlCisgKiBzaWduYWwgZnJvbSBtZG02NjAwIHRvIHRoZSBTb0MuIEp1c3QgdXNlIGl0IGZvciBk ZWJ1ZyBpbmZvIG9ubHkKKyAqIGZvciBub3cuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBwaHlf bWRtNjYwMF93YWtlaXJxX3RocmVhZChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBw aHlfbWRtNjYwMCAqZGRhdGEgPSBkYXRhOworCXN0cnVjdCBncGlvX2Rlc2MgKm1vZGVfZ3BpbzE7 CisKKwltb2RlX2dwaW8xID0gZGRhdGEtPm1vZGVfZ3Bpb3MtPmRlc2NbUEhZX01ETTY2MDBfTU9E RTFdOworCWRldl9kYmcoZGRhdGEtPmRldiwgIk9PQiB3YWtlIG9uIG1vZGVfZ3BpbzE6ICVpXG4i LAorCQlncGlvZF9nZXRfdmFsdWUobW9kZV9ncGlvMSkpOworCisJcmV0dXJuIElSUV9IQU5ETEVE OworfQorCisvKioKKyAqIHBoeV9tZG02NjAwX2luaXRfaXJxKCkgLSBpbml0aWFsaXplIG1kbTY2 MDAgc3RhdHVzIElSUSBsaW5lcworICogQGRkYXRhOiBkZXZpY2UgZHJpdmVyIGRhdGEKKyAqLwor c3RhdGljIHZvaWQgcGh5X21kbTY2MDBfaW5pdF9pcnEoc3RydWN0IHBoeV9tZG02NjAwICpkZGF0 YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZGF0YS0+ZGV2OworCWludCBpLCBlcnJvciwg aXJxOworCisJZm9yIChpID0gUEhZX01ETTY2MDBfU1RBVFVTMDsKKwkgICAgIGkgPD0gUEhZX01E TTY2MDBfU1RBVFVTMjsgaSsrKSB7CisJCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW8gPSBkZGF0YS0+ c3RhdHVzX2dwaW9zLT5kZXNjW2ldOworCisJCWlycSA9IGdwaW9kX3RvX2lycShncGlvKTsKKwkJ aWYgKGlycSA8PSAwKQorCQkJY29udGludWU7CisKKwkJZXJyb3IgPSBkZXZtX3JlcXVlc3RfdGhy ZWFkZWRfaXJxKGRldiwgaXJxLCBOVUxMLAorCQkJCQlwaHlfbWRtNjYwMF9pcnFfdGhyZWFkLAor CQkJCQlJUlFGX1RSSUdHRVJfUklTSU5HIHwKKwkJCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfAor CQkJCQlJUlFGX09ORVNIT1QsCisJCQkJCSJtZG02NjAwIiwKKwkJCQkJZGRhdGEpOworCQlpZiAo ZXJyb3IpCisJCQlkZXZfd2FybihkZXYsICJubyBtb2RlbSBzdGF0dXMgaXJxJWk6ICVpXG4iLAor CQkJCSBpcnEsIGVycm9yKTsKKwl9Cit9CisKK3N0cnVjdCBwaHlfbWRtNjYwMF9tYXAgeworCWNv bnN0IGNoYXIgKm5hbWU7CisJaW50IGRpcmVjdGlvbjsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcGh5X21kbTY2MDBfbWFwCitwaHlfbWRtNjYwMF9jdHJsX2dwaW9fbWFwW1BIWV9NRE02NjAw X05SX0NUUkxfTElORVNdID0geworCXsgImVuYWJsZSIsIEdQSU9EX09VVF9MT1csIH0sCQkvKiBs b3cgPSBwaHkgZGlzYWJsZWQgKi8KKwl7ICJwb3dlciIsIEdQSU9EX09VVF9MT1csIH0sCQkvKiBs b3cgPSBvZmYgKi8KKwl7ICJyZXNldCIsIEdQSU9EX09VVF9ISUdILCB9LAkJLyogaGlnaCA9IHJl c2V0ICovCit9OworCisvKioKKyAqIHBoeV9tZG02NjAwX2luaXRfbGluZXMoKSAtIGluaXRpYWxp emUgbWRtNjYwMCBHUElPIGxpbmVzCisgKiBAZGRhdGE6IGRldmljZSBkcml2ZXIgZGF0YQorICov CitzdGF0aWMgaW50IHBoeV9tZG02NjAwX2luaXRfbGluZXMoc3RydWN0IHBoeV9tZG02NjAwICpk ZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZGF0YS0+ZGV2OworCWludCBpOworCisJ LyogTURNNjYwMCBjb250cm9sIGxpbmVzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo cGh5X21kbTY2MDBfY3RybF9ncGlvX21hcCk7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgcGh5X21k bTY2MDBfbWFwICptYXAgPQorCQkJJnBoeV9tZG02NjAwX2N0cmxfZ3Bpb19tYXBbaV07CisJCXN0 cnVjdCBncGlvX2Rlc2MgKipncGlvID0gJmRkYXRhLT5jdHJsX2dwaW9zW2ldOworCisJCSpncGlv ID0gZGV2bV9ncGlvZF9nZXQoZGV2LCBtYXAtPm5hbWUsIG1hcC0+ZGlyZWN0aW9uKTsKKwkJaWYg KElTX0VSUigqZ3BpbykpIHsKKwkJCWRldl9pbmZvKGRldiwgImdwaW8gJXMgZXJyb3IgJWxpXG4i LAorCQkJCSBtYXAtPm5hbWUsIFBUUl9FUlIoKmdwaW8pKTsKKwkJCXJldHVybiBQVFJfRVJSKCpn cGlvKTsKKwkJfQorCX0KKworCS8qIE1ETTY2MDAgVVNCIHN0YXJ0LXVwIG1vZGUgb3V0cHV0IGxp bmVzICovCisJZGRhdGEtPm1vZGVfZ3Bpb3MgPSBkZXZtX2dwaW9kX2dldF9hcnJheShkZXYsICJt b3Rvcm9sYSxtb2RlIiwKKwkJCQkJCSBHUElPRF9PVVRfTE9XKTsKKwlpZiAoSVNfRVJSKGRkYXRh LT5tb2RlX2dwaW9zKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGRhdGEtPm1vZGVfZ3Bpb3MpOworCisJ aWYgKGRkYXRhLT5tb2RlX2dwaW9zLT5uZGVzY3MgIT0gUEhZX01ETTY2MDBfTlJfTU9ERV9MSU5F UykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBNRE02NjAwIHN0YXR1cyBpbnB1dCBsaW5lcyAq LworCWRkYXRhLT5zdGF0dXNfZ3Bpb3MgPSBkZXZtX2dwaW9kX2dldF9hcnJheShkZXYsICJtb3Rv cm9sYSxzdGF0dXMiLAorCQkJCQkJICAgR1BJT0RfSU4pOworCWlmIChJU19FUlIoZGRhdGEtPnN0 YXR1c19ncGlvcykpCisJCXJldHVybiBQVFJfRVJSKGRkYXRhLT5zdGF0dXNfZ3Bpb3MpOworCisJ aWYgKGRkYXRhLT5zdGF0dXNfZ3Bpb3MtPm5kZXNjcyAhPSBQSFlfTURNNjYwMF9OUl9TVEFUVVNf TElORVMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTURNNjYwMCBjbWQgb3V0cHV0IGxpbmVz ICovCisJZGRhdGEtPmNtZF9ncGlvcyA9IGRldm1fZ3Bpb2RfZ2V0X2FycmF5KGRldiwgIm1vdG9y b2xhLGNtZCIsCisJCQkJCQlHUElPRF9PVVRfTE9XKTsKKwlpZiAoSVNfRVJSKGRkYXRhLT5jbWRf Z3Bpb3MpKQorCQlyZXR1cm4gUFRSX0VSUihkZGF0YS0+Y21kX2dwaW9zKTsKKworCWlmIChkZGF0 YS0+Y21kX2dwaW9zLT5uZGVzY3MgIT0gUEhZX01ETTY2MDBfTlJfQ01EX0xJTkVTKQorCQlyZXR1 cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHBoeV9tZG02NjAwX2Rldmlj ZV9wb3dlcl9vbigpIC0gcG93ZXIgb24gbWRtNjYwMCBkZXZpY2UKKyAqIEBkZGF0YTogZGV2aWNl IGRyaXZlciBkYXRhCisgKgorICogVG8gZ2V0IHRoZSBpbnRlZ3JhdGVkIFVTQiBwaHkgaW4gTURN NjYwMCB0YWtlcyBzb21lIGhvb3BzLiBXZSBtdXN0IGVuc3VyZQorICogdGhlIHNoYXJlZCBVU0Ig Ym9vdG1vZGUgR1BJT3MgYXJlIGNvbmZpZ3VyZWQsIHRoZW4gcmVxdWVzdCBtb2RlbSBzdGFydC11 cCwKKyAqIHJlc2V0IGFuZCBwb3dlci11cC4uIEFuZCB0aGVuIHdlIG5lZWQgdG8gcmVjeWNsZSB0 aGUgc2hhcmVkIFVTQiBib290bW9kZQorICogR1BJT3MgYXMgdGhleSBhcmUgYWxzbyB1c2VkIGZv ciBPdXQgb2YgQmFuZCAoT09CKSB3YWtlIGZvciB0aGUgVVNCIGFuZAorICogVFMgMjcuMDEwIHNl cmlhbCBtdXguCisgKi8KK3N0YXRpYyBpbnQgcGh5X21kbTY2MDBfZGV2aWNlX3Bvd2VyX29uKHN0 cnVjdCBwaHlfbWRtNjYwMCAqZGRhdGEpCit7CisJc3RydWN0IGdwaW9fZGVzYyAqbW9kZV9ncGlv MCwgKm1vZGVfZ3BpbzEsICpyZXNldF9ncGlvLCAqcG93ZXJfZ3BpbzsKKwlpbnQgZXJyb3IgPSAw LCB3YWtlaXJxOworCisJbW9kZV9ncGlvMCA9IGRkYXRhLT5tb2RlX2dwaW9zLT5kZXNjW1BIWV9N RE02NjAwX01PREUwXTsKKwltb2RlX2dwaW8xID0gZGRhdGEtPm1vZGVfZ3Bpb3MtPmRlc2NbUEhZ X01ETTY2MDBfTU9ERTFdOworCXJlc2V0X2dwaW8gPSBkZGF0YS0+Y3RybF9ncGlvc1tQSFlfTURN NjYwMF9SRVNFVF07CisJcG93ZXJfZ3BpbyA9IGRkYXRhLT5jdHJsX2dwaW9zW1BIWV9NRE02NjAw X1BPV0VSXTsKKworCS8qCisJICogU2hhcmVkIEdQSU9zIG11c3QgYmUgbG93IGZvciBub3JtYWwg VVNCIG1vZGUuIEFmdGVyIGJvb3RpbmcKKwkgKiB0aGV5IGFyZSB1c2VkIGZvciBPT0Igd2FrZSBz aWduYWxpbmcuIFRoZXNlIGNhbiBiZSBhbHNvIHVzZWQKKwkgKiB0byBjb25maWd1cmUgVVNCIGZs YXNoaW5nIG1vZGUgbGF0ZXIgb24gYmFzZWQgb24gYSBtb2R1bGUKKwkgKiBwYXJhbWV0ZXIuCisJ ICovCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG1vZGVfZ3BpbzAsIDApOworCWdwaW9kX3Nl dF92YWx1ZV9jYW5zbGVlcChtb2RlX2dwaW8xLCAwKTsKKworCS8qIFJlcXVlc3Qgc3RhcnQtdXAg bW9kZSAqLworCXBoeV9tZG02NjAwX2NtZChkZGF0YSwgUEhZX01ETTY2MDBfQ01EX05PX0JZUEFT Uyk7CisKKwkvKiBSZXF1ZXN0IGEgcmVzZXQgZmlyc3QgKi8KKwlncGlvZF9zZXRfdmFsdWVfY2Fu c2xlZXAocmVzZXRfZ3BpbywgMCk7CisJbXNsZWVwKDEwMCk7CisKKwkvKiBUb2dnbGUgcG93ZXIg R1BJTyB0byByZXF1ZXN0IG1kbTY2MDAgdG8gc3RhcnQgKi8KKwlncGlvZF9zZXRfdmFsdWVfY2Fu c2xlZXAocG93ZXJfZ3BpbywgMSk7CisJbXNsZWVwKDEwMCk7CisJZ3Bpb2Rfc2V0X3ZhbHVlX2Nh bnNsZWVwKHBvd2VyX2dwaW8sIDApOworCisJLyoKKwkgKiBMb29rcyBsaWtlIHRoZSBVU0IgUEhZ IG5lZWRzIGJldHdlZW4gMi4yIHRvIDQgc2Vjb25kcy4KKwkgKiBJZiB3ZSB0cnkgdG8gdXNlIGl0 IGJlZm9yZSB0aGF0LCB3ZSB3aWxsIGdldCBMMyBlcnJvcnMKKwkgKiBmcm9tIG9tYXAtdXNiLWhv c3QgdHJ5aW5nIHRvIGFjY2VzcyB0aGUgUEhZLiBTZWUgYWxzbworCSAqIHBoeV9tZG02NjAwX2lu aXQoKSBmb3IgLUVQUk9CRV9ERUZFUi4KKwkgKi8KKwltc2xlZXAoUEhZX01ETTY2MDBfUEhZX0RF TEFZX01TKTsKKwlkZGF0YS0+ZW5hYmxlZCA9IHRydWU7CisKKwkvKiBCb290aW5nIHVwIHRoZSBy ZXN0IG9mIE1ETTY2MDAgd2lsbCB0YWtlIHRvdGFsIGFib3V0IDggc2Vjb25kcyAqLworCWRldl9p bmZvKGRkYXRhLT5kZXYsICJXYWl0aW5nIGZvciBwb3dlciB1cCByZXF1ZXN0IHRvIGNvbXBsZXRl Li5cbiIpOworCWlmICh3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmRkYXRhLT5hY2ssCisJ CQltc2Vjc190b19qaWZmaWVzKFBIWV9NRE02NjAwX0VOQUJMRURfREVMQVlfTVMpKSkgeworCQlp ZiAoZGRhdGEtPnN0YXR1cyA+IFBIWV9NRE02NjAwX1NUQVRVU19QQU5JQyAmJgorCQkgICAgZGRh dGEtPnN0YXR1cyA8IFBIWV9NRE02NjAwX1NUQVRVU19TSFVURE9XTl9BQ0spCisJCQlkZXZfaW5m byhkZGF0YS0+ZGV2LCAiUG93ZXJlZCB1cCBPS1xuIik7CisJfSBlbHNlIHsKKwkJZGRhdGEtPmVu YWJsZWQgPSBmYWxzZTsKKwkJZXJyb3IgPSAtRVRJTUVET1VUOworCQlkZXZfZXJyKGRkYXRhLT5k ZXYsICJUaW1lZCBvdXQgcG93ZXJpbmcgdXBcbiIpOworCX0KKworCS8qIFJlY29uZmlndXJlIG1v ZGUxIEdQSU8gYXMgaW5wdXQgZm9yIE9PQiB3YWtlICovCisJZ3Bpb2RfZGlyZWN0aW9uX2lucHV0 KG1vZGVfZ3BpbzEpOworCisJd2FrZWlycSA9IGdwaW9kX3RvX2lycShtb2RlX2dwaW8xKTsKKwlp ZiAod2FrZWlycSA8PSAwKQorCQlyZXR1cm4gd2FrZWlycTsKKworCWVycm9yID0gZGV2bV9yZXF1 ZXN0X3RocmVhZGVkX2lycShkZGF0YS0+ZGV2LCB3YWtlaXJxLCBOVUxMLAorCQkJCQkgIHBoeV9t ZG02NjAwX3dha2VpcnFfdGhyZWFkLAorCQkJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfAorCQkJ CQkgIElSUUZfVFJJR0dFUl9GQUxMSU5HIHwKKwkJCQkJICBJUlFGX09ORVNIT1QsCisJCQkJCSAg Im1kbTY2MDAtd2FrZSIsCisJCQkJCSAgZGRhdGEpOworCWlmIChlcnJvcikKKwkJZGV2X3dhcm4o ZGRhdGEtPmRldiwgIm5vIG1vZGVtIHdha2VpcnEgaXJxJWk6ICVpXG4iLAorCQkJIHdha2VpcnEs IGVycm9yKTsKKworCWRkYXRhLT5ydW5uaW5nID0gdHJ1ZTsKKworCXJldHVybiBlcnJvcjsKK30K KworLyoqCisgKiBwaHlfbWRtNjYwMF9kZXZpY2VfcG93ZXJfb2ZmKCkgLSBwb3dlciBvZmYgbWRt NjYwMCBkZXZpY2UKKyAqIEBkZGF0YTogZGV2aWNlIGRyaXZlciBkYXRhCisgKi8KK3N0YXRpYyB2 b2lkIHBoeV9tZG02NjAwX2RldmljZV9wb3dlcl9vZmYoc3RydWN0IHBoeV9tZG02NjAwICpkZGF0 YSkKK3sKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvID0KKwkJZGRhdGEtPmN0cmxfZ3Bp b3NbUEhZX01ETTY2MDBfUkVTRVRdOworCisJZGRhdGEtPmVuYWJsZWQgPSBmYWxzZTsKKwlwaHlf bWRtNjYwMF9jbWQoZGRhdGEsIFBIWV9NRE02NjAwX0NNRF9CUF9TSFVURE9XTl9SRVEpOworCW1z bGVlcCgxMDApOworCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKHJlc2V0X2dwaW8sIDEpOwor CisJZGV2X2luZm8oZGRhdGEtPmRldiwgIldhaXRpbmcgZm9yIHBvd2VyIGRvd24gcmVxdWVzdCB0 byBjb21wbGV0ZS4uICIpOworCWlmICh3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmRkYXRh LT5hY2ssCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoNTAwMCkpKSB7CisJCWlmIChkZGF0YS0+c3Rh dHVzID09IFBIWV9NRE02NjAwX1NUQVRVU19QQU5JQykKKwkJCWRldl9pbmZvKGRkYXRhLT5kZXYs ICJQb3dlcmVkIGRvd24gT0tcbiIpOworCX0gZWxzZSB7CisJCWRldl9lcnIoZGRhdGEtPmRldiwg IlRpbWVkIG91dCBwb3dlcmluZyBkb3duXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBoeV9t ZG02NjAwX2RlZmVycmVkX3Bvd2VyX29uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlz dHJ1Y3QgcGh5X21kbTY2MDAgKmRkYXRhOworCWludCBlcnJvcjsKKworCWRkYXRhID0gY29udGFp bmVyX29mKHdvcmssIHN0cnVjdCBwaHlfbWRtNjYwMCwgYm9vdHVwX3dvcmsud29yayk7CisKKwll cnJvciA9IHBoeV9tZG02NjAwX2RldmljZV9wb3dlcl9vbihkZGF0YSk7CisJaWYgKGVycm9yKQor CQlkZXZfZXJyKGRkYXRhLT5kZXYsICJEZXZpY2Ugbm90IGZ1bmN0aW9uYWxcbiIpOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBwaHlfbWRtNjYwMF9pZF90YWJsZVtdID0g eworCXsgLmNvbXBhdGlibGUgPSAibW90b3JvbGEsbWFwcGhvbmUtbWRtNjYwMCIsIH0sCisJe30s Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcGh5X21kbTY2MDBfaWRfdGFibGUpOworCitz dGF0aWMgaW50IHBoeV9tZG02NjAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cit7CisJc3RydWN0IHBoeV9tZG02NjAwICpkZGF0YTsKKwlpbnQgZXJyb3I7CisKKwlkZGF0YSA9 IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRkYXRhKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFkZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0RFTEFZRURfV09SSygmZGRh dGEtPmJvb3R1cF93b3JrLAorCQkJICBwaHlfbWRtNjYwMF9kZWZlcnJlZF9wb3dlcl9vbik7CisJ SU5JVF9ERUxBWUVEX1dPUksoJmRkYXRhLT5zdGF0dXNfd29yaywgcGh5X21kbTY2MDBfc3RhdHVz KTsKKwlpbml0X2NvbXBsZXRpb24oJmRkYXRhLT5hY2spOworCisJZGRhdGEtPmRldiA9ICZwZGV2 LT5kZXY7CisJZGRhdGEtPnBoeS5kZXYgPSBkZGF0YS0+ZGV2OworCWRkYXRhLT5waHkubGFiZWwg PSAicGh5X21kbTY2MDAiOworCWRkYXRhLT5waHkudHlwZSA9IFVTQl9QSFlfVFlQRV9VU0IyOwor CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGRhdGEpOworCisJZXJyb3IgPSBwaHlfbWRt NjYwMF9pbml0X2xpbmVzKGRkYXRhKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwor CXBoeV9tZG02NjAwX2luaXRfaXJxKGRkYXRhKTsKKworCWRkYXRhLT5nZW5lcmljX3BoeSA9IGRl dm1fcGh5X2NyZWF0ZShkZGF0YS0+ZGV2LCBOVUxMLCAmZ3Bpb191c2Jfb3BzKTsKKwlpZiAoSVNf RVJSKGRkYXRhLT5nZW5lcmljX3BoeSkpIHsKKwkJZXJyb3IgPSBQVFJfRVJSKGRkYXRhLT5nZW5l cmljX3BoeSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlwaHlfc2V0X2RydmRhdGEoZGRhdGEt PmdlbmVyaWNfcGh5LCBkZGF0YSk7CisKKwlkZGF0YS0+cGh5X3Byb3ZpZGVyID0KKwkJZGV2bV9v Zl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoZGRhdGEtPmRldiwKKwkJCQkJICAgICAgb2ZfcGh5X3Np bXBsZV94bGF0ZSk7CisJaWYgKElTX0VSUihkZGF0YS0+cGh5X3Byb3ZpZGVyKSkgeworCQllcnJv ciA9IFBUUl9FUlIoZGRhdGEtPnBoeV9wcm92aWRlcik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisK KwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRkYXRhLT5ib290dXBfd29yaywgMCk7CisKKwkvKgor CSAqIFNlZSBwaHlfbWRtNjYwMF9kZXZpY2VfcG93ZXJfb24oKS4gV2Ugc2hvdWxkIGJlIGFibGUK KwkgKiB0byByZW1vdmUgdGhpcyBldmVudHVhbGx5IHdoZW4gb2hjaS1wbGF0Zm9ybSBjYW4gZGVh bAorCSAqIHdpdGggLUVQUk9CRV9ERUZFUi4KKwkgKi8KKwltc2xlZXAoUEhZX01ETTY2MDBfUEhZ X0RFTEFZX01TICsgNTAwKTsKKworCXVzYl9hZGRfcGh5X2RldigmZGRhdGEtPnBoeSk7CisKKwly ZXR1cm4gMDsKKworY2xlYW51cDoKKwlwaHlfbWRtNjYwMF9kZXZpY2VfcG93ZXJfb2ZmKGRkYXRh KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgcGh5X21kbTY2MDBfcmVtb3ZlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHBoeV9tZG02NjAwICpkZGF0 YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0 X2dwaW8gPSBkZGF0YS0+Y3RybF9ncGlvc1tQSFlfTURNNjYwMF9SRVNFVF07CisKKwlpZiAoIWRk YXRhLT5ydW5uaW5nKQorCQl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmRkYXRhLT5hY2ss CisJCQltc2Vjc190b19qaWZmaWVzKFBIWV9NRE02NjAwX0VOQUJMRURfREVMQVlfTVMpKTsKKwor CWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChyZXNldF9ncGlvLCAxKTsKKwlwaHlfbWRtNjYwMF9k ZXZpY2VfcG93ZXJfb2ZmKGRkYXRhKTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGRh dGEtPmJvb3R1cF93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRkYXRhLT5zdGF0 dXNfd29yayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgcGh5X21kbTY2MDBfZHJpdmVyID0geworCS5wcm9iZSA9IHBoeV9tZG02NjAwX3Byb2JlLAor CS5yZW1vdmUgPSBwaHlfbWRtNjYwMF9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAi cGh5LW1hcHBob25lLW1kbTY2MDAiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIo cGh5X21kbTY2MDBfaWRfdGFibGUpLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVy KHBoeV9tZG02NjAwX2RyaXZlcik7CisKK01PRFVMRV9BTElBUygicGxhdGZvcm06Z3Bpb191c2Ii KTsKK01PRFVMRV9BVVRIT1IoIlRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+Iik7CitN T0RVTEVfREVTQ1JJUFRJT04oIm1kbTY2MDAgZ3BpbyB1c2IgcGh5IGRyaXZlciIpOworTU9EVUxF X0xJQ0VOU0UoIkdQTCB2MiIpOwo=