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: [v3,8/8] usb: dwc3: Add Amlogic G12A DWC3 glue From: Chunfeng Yun Message-Id: <1552960676.10179.142.camel@mhfsdcap03> Date: Tue, 19 Mar 2019 09:57:56 +0800 To: Neil Armstrong Cc: gregkh@linuxfoundation.org, hminas@synopsys.com, balbi@kernel.org, kishon@ti.com, linux-amlogic@lists.infradead.org, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org List-ID: SGkgTmVpbCwKT24gTW9uLCAyMDE5LTAzLTE4IGF0IDExOjExICswMTAwLCBOZWlsIEFybXN0cm9u ZyB3cm90ZToKPiBBZGRzIHN1cHBvcnQgZm9yIEFtbG9naWMgRzEyQSBVU0IgQ29udHJvbCBHbHVl IEhXLgo+IAo+IFRoZSBBbWxvZ2ljIEcxMkEgU29DIEZhbWlseSBlbWJlZHMgMiBVU0IgQ29udHJv bGxlcnMgOgo+IC0gYSBEV0MzIElQIGNvbmZpZ3VyZWQgYXMgSG9zdCBmb3IgVVNCMiBhbmQgVVNC Mwo+IC0gYSBEV0MyIElQIGNvbmZpZ3VyZWQgYXMgUGVyaXBoZXJhbCBVU0IyIE9ubHkKPiAKPiBB IGdsdWUgY29ubmVjdHMgdGhlc2UgYm90aCBjb250cm9sbGVycyB0byAyIFVTQjIgUEhZcywgYW5k IG9wdGlvbm5hbGx5Cj4gdG8gYW4gVVNCMytQQ0lFIENvbWJvIFBIWSBzaGFyZWQgd2l0aCB0aGUg UENJRSBjb250cm9sbGVyLgo+IAo+IFRoZSBHbHVlIGNvbmZpZ3VyZXMgdGhlIFVUTUkgOGJpdCBp bnRlcmZhY2VzIGZvciB0aGUgVVNCMiBQSFlzLCBpbmNsdWRpbmcKPiByb3V0aW5nIG9mIHRoZSBP VEcgUEhZIGJldHdlZW4gdGhlIERXQzMgYW5kIERXQzIgY29udHJvbGxlcnMsIGFuZAo+IHNldHVw cyB0aGUgb24tY2hpcCBPVEcgbW9kZSBzZWxlY3Rpb24gZm9yIHRoaXMgUEhZLgo+IAo+IFRoaXMg ZHJpdmVycyBzdXBwb3J0cyB0aGUgb24tcHJvYmUgc2V0dXAgb2YgdGhlIE9URyBtb2RlLCBhbmQg bWFudWFsbHkKPiB2aWEgYSBkZWJ1Z2ZzIGludGVyZmFjZS4gVGhlIElSUSBtb2RlIGNoYW5nZSBk ZXRlY3QgaXMgeWV0IHRvIGJlIGFkZGVkCj4gaW4gYSBmdXR1cmUgcGF0Y2hzZXQsIG1haW5seSBk dWUgdG8gbGFjayBvZiBoYXJkd2FyZSB0byB2YWxpZGF0ZSBvbi4KPiAKPiBTaWduZWQtb2ZmLWJ5 OiBOZWlsIEFybXN0cm9uZyA8bmFybXN0cm9uZ0BiYXlsaWJyZS5jb20+Cj4gLS0tCj4gIGRyaXZl cnMvdXNiL2R3YzMvS2NvbmZpZyAgICAgICAgICAgfCAgMTAgKwo+ICBkcml2ZXJzL3VzYi9kd2Mz L01ha2VmaWxlICAgICAgICAgIHwgICAxICsKPiAgZHJpdmVycy91c2IvZHdjMy9kd2MzLW1lc29u LWcxMmEuYyB8IDYwMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAzIGZpbGVzIGNo YW5nZWQsIDYxMyBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3Vz Yi9kd2MzL2R3YzMtbWVzb24tZzEyYS5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3 YzMvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2R3YzMvS2NvbmZpZwo+IGluZGV4IDJiMTQ5NDQ2MGQw Yy4uZDJlYTk2NzA1NjNjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL2R3YzMvS2NvbmZpZwo+ ICsrKyBiL2RyaXZlcnMvdXNiL2R3YzMvS2NvbmZpZwo+IEBAIC05NSw2ICs5NSwxNiBAQCBjb25m aWcgVVNCX0RXQzNfS0VZU1RPTkUKPiAgCSAgU3VwcG9ydCBvZiBVU0IyLzMgZnVuY3Rpb25hbGl0 eSBpbiBUSSBLZXlzdG9uZTIgYW5kIEFNNjU0IHBsYXRmb3Jtcy4KPiAgCSAgU2F5ICdZJyBvciAn TScgaGVyZSBpZiB5b3UgaGF2ZSBvbmUgc3VjaCBkZXZpY2UKPiAgCj4gK2NvbmZpZyBVU0JfRFdD M19NRVNPTl9HMTJBCj4gKyAgICAgICB0cmlzdGF0ZSAiQW1sb2dpYyBNZXNvbiBHMTJBIFBsYXRm b3JtcyIKPiArICAgICAgIGRlcGVuZHMgb24gT0YgJiYgQ09NTU9OX0NMSwo+ICsgICAgICAgZGVw ZW5kcyBvbiBBUkNIX01FU09OIHx8IENPTVBJTEVfVEVTVAo+ICsgICAgICAgZGVmYXVsdCBVU0Jf RFdDMwo+ICsgICAgICAgc2VsZWN0IFVTQl9ST0xFX1NXSVRDSAo+ICsgICAgICAgaGVscAo+ICsg ICAgICAgICBTdXBwb3J0IFVTQjIvMyBmdW5jdGlvbmFsaXR5IGluIEFtbG9naWMgRzEyQSBwbGF0 Zm9ybXMuCj4gKwkgU2F5ICdZJyBvciAnTScgaWYgeW91IGhhdmUgb25lIHN1Y2ggZGV2aWNlLgo+ ICsKPiAgY29uZmlnIFVTQl9EV0MzX09GX1NJTVBMRQo+ICAgICAgICAgdHJpc3RhdGUgIkdlbmVy aWMgT0YgU2ltcGxlIEdsdWUgTGF5ZXIiCj4gICAgICAgICBkZXBlbmRzIG9uIE9GICYmIENPTU1P Tl9DTEsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMy9NYWtlZmlsZSBiL2RyaXZlcnMv dXNiL2R3YzMvTWFrZWZpbGUKPiBpbmRleCA2ZTNlZjYxNDRlNWQuLmFlODZkYTBkYzViZCAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL3VzYi9kd2MzL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy91c2Iv ZHdjMy9NYWtlZmlsZQo+IEBAIC00Nyw2ICs0Nyw3IEBAIG9iai0kKENPTkZJR19VU0JfRFdDM19F WFlOT1MpCQkrPSBkd2MzLWV4eW5vcy5vCj4gIG9iai0kKENPTkZJR19VU0JfRFdDM19QQ0kpCQkr PSBkd2MzLXBjaS5vCj4gIG9iai0kKENPTkZJR19VU0JfRFdDM19IQVBTKQkJKz0gZHdjMy1oYXBz Lm8KPiAgb2JqLSQoQ09ORklHX1VTQl9EV0MzX0tFWVNUT05FKQkJKz0gZHdjMy1rZXlzdG9uZS5v Cj4gK29iai0kKENPTkZJR19VU0JfRFdDM19NRVNPTl9HMTJBKQkrPSBkd2MzLW1lc29uLWcxMmEu bwo+ICBvYmotJChDT05GSUdfVVNCX0RXQzNfT0ZfU0lNUExFKQkrPSBkd2MzLW9mLXNpbXBsZS5v Cj4gIG9iai0kKENPTkZJR19VU0JfRFdDM19TVCkJCSs9IGR3YzMtc3Qubwo+ICBvYmotJChDT05G SUdfVVNCX0RXQzNfUUNPTSkJCSs9IGR3YzMtcWNvbS5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv dXNiL2R3YzMvZHdjMy1tZXNvbi1nMTJhLmMgYi9kcml2ZXJzL3VzYi9kd2MzL2R3YzMtbWVzb24t ZzEyYS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjlmNDU1 NGU4ZTZlNwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3VzYi9kd2MzL2R3YzMtbWVz b24tZzEyYS5jCj4gQEAgLTAsMCArMSw2MDIgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAKPiArLyoKPiArICogVVNCIEdsdWUgZm9yIEFtbG9naWMgRzEyQSBTb0NzCj4g KyAqCj4gKyAqIENvcHlyaWdodCAoYykgMjAxOSBCYXlMaWJyZSwgU0FTCj4gKyAqIEF1dGhvcjog TmVpbCBBcm1zdHJvbmcgPG5hcm1zdHJvbmdAYmF5bGlicmUuY29tPgo+ICsgKi8KPiArCj4gKy8q Cj4gKyAqIFRoZSBVU0IgaXMgb3JnYW5pemVkIHdpdGggYSBnbHVlIGFyb3VuZCB0aGUgRFdDMyBD b250cm9sbGVyIElQIGFzIDoKPiArICogLSBDb250cm9sIHJlZ2lzdGVycyBmb3IgZWFjaCBVU0Iy IFBvcnRzCj4gKyAqIC0gQ29udHJvbCByZWdpc3RlcnMgZm9yIHRoZSBVU0IgUEhZIGxheWVyCj4g KyAqIC0gU3VwZXJTcGVlZCBQSFkgY2FuIGJlIGVuYWJsZWQgb25seSBpZiBwb3J0IGlzIHVzZWQK PiArICoKPiArICogVE9GSVg6Cj4gKyAqIC0gQWRkIGR5bmFtaWMgT1RHIHN3aXRjaGluZyB3aXRo IElEIGNoYW5nZSBpbnRlcnJ1cHQKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRm b3JtX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9vZi5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KPiArI2luY2x1ZGUgPGxp bnV4L3BtX3J1bnRpbWUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgo+ICsjaW5jbHVk ZSA8bGludXgvYml0ZmllbGQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgo+ICsjaW5j bHVkZSA8bGludXgvcmVzZXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3VzYi9yb2xlLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KPiArCj4gKy8qIFVTQjIgUG9y dHMgQ29udHJvbCBSZWdpc3RlcnMgKi8KPiArCj4gKyNkZWZpbmUgVTJQX1JFR19TSVpFCQkJCQkJ MHgyMAo+ICsKPiArI2RlZmluZSBVMlBfUjAJCQkJCQkJMHgwCj4gKwkjZGVmaW5lIFUyUF9SMF9I T1NUX0RFVklDRQkJCQlCSVQoMCkKPiArCSNkZWZpbmUgVTJQX1IwX1BPV0VSX09LCQkJCQlCSVQo MSkKPiArCSNkZWZpbmUgVTJQX1IwX0hBU1RfTU9ERQkJCQlCSVQoMikKPiArCSNkZWZpbmUgVTJQ X1IwX1BPV0VSX09OX1JFU0VUCQkJCUJJVCgzKQo+ICsJI2RlZmluZSBVMlBfUjBfSURfUFVMTFVQ CQkJCUJJVCg0KQo+ICsJI2RlZmluZSBVMlBfUjBfRFJWX1ZCVVMJCQkJCUJJVCg1KQo+ICsKPiAr I2RlZmluZSBVMlBfUjEJCQkJCQkJMHg0Cj4gKwkjZGVmaW5lIFUyUF9SMV9QSFlfUkVBRFkJCQkJ QklUKDApCj4gKwkjZGVmaW5lIFUyUF9SMV9JRF9ESUcJCQkJCUJJVCgxKQo+ICsJI2RlZmluZSBV MlBfUjFfT1RHX1NFU1NJT05fVkFMSUQJCQlCSVQoMikKPiArCSNkZWZpbmUgVTJQX1IxX1ZCVVNf VkFMSUQJCQkJQklUKDMpCj4gKwo+ICsvKiBVU0IgR2x1ZSBDb250cm9sIFJlZ2lzdGVycyAqLwo+ ICsKPiArI2RlZmluZSBVU0JfUjAJCQkJCQkJMHg4MAo+ICsJI2RlZmluZSBVU0JfUjBfUDMwX0xB TkUwX1RYMlJYX0xPT1BCQUNLCQkJQklUKDE3KQo+ICsJI2RlZmluZSBVU0JfUjBfUDMwX0xBTkUw X0VYVF9QQ0xLX1JFUQkJCUJJVCgxOCkKPiArCSNkZWZpbmUgVVNCX1IwX1AzMF9QQ1NfUlhfTE9T X01BU0tfVkFMX01BU0sJCUdFTk1BU0soMjgsIDE5KQo+ICsJI2RlZmluZSBVU0JfUjBfVTJEX1NT X1NDQUxFRE9XTl9NT0RFX01BU0sJCUdFTk1BU0soMzAsIDI5KQo+ICsJI2RlZmluZSBVU0JfUjBf VTJEX0FDVAkJCQkJQklUKDMxKQo+ICsKPiArI2RlZmluZSBVU0JfUjEJCQkJCQkJMHg4NAo+ICsJ I2RlZmluZSBVU0JfUjFfVTNIX0JJR0VORElBTl9HUwkJCQlCSVQoMCkKPiArCSNkZWZpbmUgVVNC X1IxX1UzSF9QTUVfRU5BQkxFCQkJCUJJVCgxKQo+ICsJI2RlZmluZSBVU0JfUjFfVTNIX0hVQl9Q T1JUX09WRVJDVVJSRU5UX01BU0sJCUdFTk1BU0soNCwgMikKPiArCSNkZWZpbmUgVVNCX1IxX1Uz SF9IVUJfUE9SVF9QRVJNX0FUVEFDSF9NQVNLCQlHRU5NQVNLKDksIDcpCj4gKwkjZGVmaW5lIFVT Ql9SMV9VM0hfSE9TVF9VMl9QT1JUX0RJU0FCTEVfTUFTSwkJR0VOTUFTSygxMywgMTIpCj4gKwkj ZGVmaW5lIFVTQl9SMV9VM0hfSE9TVF9VM19QT1JUX0RJU0FCTEUJCQlCSVQoMTYpCj4gKwkjZGVm aW5lIFVTQl9SMV9VM0hfSE9TVF9QT1JUX1BPV0VSX0NPTlRST0xfUFJFU0VOVAlCSVQoMTcpCj4g KwkjZGVmaW5lIFVTQl9SMV9VM0hfSE9TVF9NU0lfRU5BQkxFCQkJQklUKDE4KQo+ICsJI2RlZmlu ZSBVU0JfUjFfVTNIX0ZMQURKXzMwTUhaX1JFR19NQVNLCQkJR0VOTUFTSygyNCwgMTkpCj4gKwkj ZGVmaW5lIFVTQl9SMV9QMzBfUENTX1RYX1NXSU5HX0ZVTExfTUFTSwkJR0VOTUFTSygzMSwgMjUp Cj4gKwo+ICsjZGVmaW5lIFVTQl9SMgkJCQkJCQkweDg4Cj4gKwkjZGVmaW5lIFVTQl9SMl9QMzBf UENTX1RYX0RFRU1QSF8zUDVEQl9NQVNLCQlHRU5NQVNLKDI1LCAyMCkKPiArCSNkZWZpbmUgVVNC X1IyX1AzMF9QQ1NfVFhfREVFTVBIXzZEQl9NQVNLCQlHRU5NQVNLKDMxLCAyNikKPiArCj4gKyNk ZWZpbmUgVVNCX1IzCQkJCQkJCTB4OGMKPiArCSNkZWZpbmUgVVNCX1IzX1AzMF9TU0NfRU5BQkxF CQkJCUJJVCgwKQo+ICsJI2RlZmluZSBVU0JfUjNfUDMwX1NTQ19SQU5HRV9NQVNLCQkJR0VOTUFT SygzLCAxKQo+ICsJI2RlZmluZSBVU0JfUjNfUDMwX1NTQ19SRUZfQ0xLX1NFTF9NQVNLCQkJR0VO TUFTSygxMiwgNCkKPiArCSNkZWZpbmUgVVNCX1IzX1AzMF9SRUZfU1NQX0VOCQkJCUJJVCgxMykK PiArCj4gKyNkZWZpbmUgVVNCX1I0CQkJCQkJCTB4OTAKPiArCSNkZWZpbmUgVVNCX1I0X1AyMV9Q T1JUX1JFU0VUXzAJCQkJQklUKDApCj4gKwkjZGVmaW5lIFVTQl9SNF9QMjFfU0xFRVBfTTAJCQkJ QklUKDEpCj4gKwkjZGVmaW5lIFVTQl9SNF9NRU1fUERfTUFTSwkJCQlHRU5NQVNLKDMsIDIpCj4g KwkjZGVmaW5lIFVTQl9SNF9QMjFfT05MWQkJCQkJQklUKDQpCj4gKwo+ICsjZGVmaW5lIFVTQl9S NQkJCQkJCQkweDk0Cj4gKwkjZGVmaW5lIFVTQl9SNV9JRF9ESUdfU1lOQwkJCQlCSVQoMCkKPiAr CSNkZWZpbmUgVVNCX1I1X0lEX0RJR19SRUcJCQkJQklUKDEpCj4gKwkjZGVmaW5lIFVTQl9SNV9J RF9ESUdfQ0ZHX01BU0sJCQkJR0VOTUFTSygzLCAyKQo+ICsJI2RlZmluZSBVU0JfUjVfSURfRElH X0VOXzAJCQkJQklUKDQpCj4gKwkjZGVmaW5lIFVTQl9SNV9JRF9ESUdfRU5fMQkJCQlCSVQoNSkK PiArCSNkZWZpbmUgVVNCX1I1X0lEX0RJR19DVVJSCQkJCUJJVCg2KQo+ICsJI2RlZmluZSBVU0Jf UjVfSURfRElHX0lSUQkJCQlCSVQoNykKPiArCSNkZWZpbmUgVVNCX1I1X0lEX0RJR19USF9NQVNL CQkJCUdFTk1BU0soMTUsIDgpCj4gKwkjZGVmaW5lIFVTQl9SNV9JRF9ESUdfQ05UX01BU0sJCQkJ R0VOTUFTSygyMywgMTYpCj4gKwo+ICtlbnVtIHsKPiArCVVTQjJfSE9TVF9QSFkgPSAwLAo+ICsJ VVNCMl9PVEdfUEhZLAo+ICsJVVNCM19IT1NUX1BIWSwKPiArCVBIWV9DT1VOVCwKPiArfTsKPiAr Cj4gK3N0YXRpYyBjb25zdCBjaGFyICpwaHlfbmFtZXNbUEhZX0NPVU5UXSA9IHsKPiArCSJ1c2Iy LXBoeTAiLCAidXNiMi1waHkxIiwgInVzYjMtcGh5MCIsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHdj M19tZXNvbl9nMTJhIHsKPiArCXN0cnVjdCBkZXZpY2UJCSpkZXY7Cj4gKwlzdHJ1Y3QgcmVnbWFw CQkqcmVnbWFwOwo+ICsJc3RydWN0IGNsawkJKmNsazsKPiArCXN0cnVjdCByZXNldF9jb250cm9s CSpyZXNldDsKPiArCXN0cnVjdCBwaHkJCSpwaHlzW1BIWV9DT1VOVF07Cj4gKwllbnVtIHVzYl9k cl9tb2RlCW90Z19tb2RlOwo+ICsJZW51bSBwaHlfbW9kZQkJb3RnX3BoeV9tb2RlOwo+ICsJdW5z aWduZWQgaW50CQl1c2IyX3BvcnRzOwo+ICsJdW5zaWduZWQgaW50CQl1c2IzX3BvcnRzOwo+ICsJ c3RydWN0IHJlZ3VsYXRvcgkqdmJ1czsKPiArCXN0cnVjdCB1c2Jfcm9sZV9zd2l0Y2hfZGVzYyBz d2l0Y2hfZGVzYzsKPiArCXN0cnVjdCB1c2Jfcm9sZV9zd2l0Y2gJKnJvbGVfc3dpdGNoOwo+ICt9 Owo+ICsKPiArc3RhdGljIHZvaWQgZHdjM19tZXNvbl9nMTJhX3VzYjJfc2V0X21vZGUoc3RydWN0 IGR3YzNfbWVzb25fZzEyYSAqcHJpdiwKPiArCQkJCQkgIGludCBpLCBlbnVtIHBoeV9tb2RlIG1v ZGUpCj4gK3sKPiArCWlmIChtb2RlID09IFBIWV9NT0RFX1VTQl9IT1NUKQo+ICsJCXJlZ21hcF91 cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFUyUF9SMCArIChVMlBfUkVHX1NJWkUgKiBpKSwKPiAr CQkJCVUyUF9SMF9IT1NUX0RFVklDRSwKPiArCQkJCVUyUF9SMF9IT1NUX0RFVklDRSk7Cj4gKwll bHNlCj4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwgVTJQX1IwICsgKFUyUF9S RUdfU0laRSAqIGkpLAo+ICsJCQkJVTJQX1IwX0hPU1RfREVWSUNFLCAwKTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBkd2MzX21lc29uX2cxMmFfdXNiMl9pbml0KHN0cnVjdCBkd2MzX21lc29uX2cx MmEgKnByaXYpCj4gK3sKPiArCWludCBpOwo+ICsKPiArCWlmIChwcml2LT5vdGdfbW9kZSA9PSBV U0JfRFJfTU9ERV9QRVJJUEhFUkFMKQo+ICsJCXByaXYtPm90Z19waHlfbW9kZSA9IFBIWV9NT0RF X1VTQl9ERVZJQ0U7Cj4gKwllbHNlCj4gKwkJcHJpdi0+b3RnX3BoeV9tb2RlID0gUEhZX01PREVf VVNCX0hPU1Q7Cj4gKwo+ICsJZm9yIChpID0gMCA7IGkgPCBVU0IzX0hPU1RfUEhZIDsgKytpKSB7 Cj4gKwkJaWYgKCFwcml2LT5waHlzW2ldKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJcmVnbWFw X3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwgVTJQX1IwICsgKFUyUF9SRUdfU0laRSAqIGkpLAo+ ICsJCQkJICAgVTJQX1IwX1BPV0VSX09OX1JFU0VULAo+ICsJCQkJICAgVTJQX1IwX1BPV0VSX09O X1JFU0VUKTsKPiArCj4gKwkJaWYgKGkgPT0gVVNCMl9PVEdfUEhZKSB7Cj4gKwkJCXJlZ21hcF91 cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsCj4gKwkJCQlVMlBfUjAgKyAoVTJQX1JFR19TSVpFICog aSksCj4gKwkJCQlVMlBfUjBfSURfUFVMTFVQIHwgVTJQX1IwX0RSVl9WQlVTLAo+ICsJCQkJVTJQ X1IwX0lEX1BVTExVUCB8IFUyUF9SMF9EUlZfVkJVUyk7Cj4gKwo+ICsJCQlkd2MzX21lc29uX2cx MmFfdXNiMl9zZXRfbW9kZShwcml2LCBpLAo+ICsJCQkJCQkgICAgICBwcml2LT5vdGdfcGh5X21v ZGUpOwo+ICsJCX0gZWxzZQo+ICsJCQlkd2MzX21lc29uX2cxMmFfdXNiMl9zZXRfbW9kZShwcml2 LCBpLAo+ICsJCQkJCQkgICAgICBQSFlfTU9ERV9VU0JfSE9TVCk7Cj4gKwo+ICsJCXJlZ21hcF91 cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFUyUF9SMCArIChVMlBfUkVHX1NJWkUgKiBpKSwKPiAr CQkJCSAgIFUyUF9SMF9QT1dFUl9PTl9SRVNFVCwgMCk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGR3YzNfbWVzb25fZzEyYV91c2IzX2luaXQoc3RydWN0 IGR3YzNfbWVzb25fZzEyYSAqcHJpdikKPiArewo+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYt PnJlZ21hcCwgVVNCX1IzLAo+ICsJCQlVU0JfUjNfUDMwX1NTQ19SQU5HRV9NQVNLIHwKPiArCQkJ VVNCX1IzX1AzMF9SRUZfU1NQX0VOLAo+ICsJCQlVU0JfUjNfUDMwX1NTQ19FTkFCTEUgfAo+ICsJ CQlGSUVMRF9QUkVQKFVTQl9SM19QMzBfU1NDX1JBTkdFX01BU0ssIDIpIHwKPiArCQkJVVNCX1Iz X1AzMF9SRUZfU1NQX0VOKTsKPiArCXVkZWxheSgyKTsKPiArCj4gKwlyZWdtYXBfdXBkYXRlX2Jp dHMocHJpdi0+cmVnbWFwLCBVU0JfUjIsCj4gKwkJCVVTQl9SMl9QMzBfUENTX1RYX0RFRU1QSF8z UDVEQl9NQVNLLAo+ICsJCQlGSUVMRF9QUkVQKFVTQl9SMl9QMzBfUENTX1RYX0RFRU1QSF8zUDVE Ql9NQVNLLCAweDE1KSk7Cj4gKwo+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwg VVNCX1IyLAo+ICsJCQlVU0JfUjJfUDMwX1BDU19UWF9ERUVNUEhfNkRCX01BU0ssCj4gKwkJCUZJ RUxEX1BSRVAoVVNCX1IyX1AzMF9QQ1NfVFhfREVFTVBIXzZEQl9NQVNLLCAweDIwKSk7Cj4gKwo+ ICsJdWRlbGF5KDIpOwo+ICsKPiArCXJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFVT Ql9SMSwKPiArCQkJVVNCX1IxX1UzSF9IT1NUX1BPUlRfUE9XRVJfQ09OVFJPTF9QUkVTRU5ULAo+ ICsJCQlVU0JfUjFfVTNIX0hPU1RfUE9SVF9QT1dFUl9DT05UUk9MX1BSRVNFTlQpOwo+ICsKPiAr CXJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFVTQl9SMSwKPiArCQkJVVNCX1IxX1Az MF9QQ1NfVFhfU1dJTkdfRlVMTF9NQVNLLAo+ICsJCQlGSUVMRF9QUkVQKFVTQl9SMV9QMzBfUENT X1RYX1NXSU5HX0ZVTExfTUFTSywgMTI3KSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGR3YzNf bWVzb25fZzEyYV91c2Jfb3RnX2FwcGx5X21vZGUoc3RydWN0IGR3YzNfbWVzb25fZzEyYSAqcHJp dikKPiArewo+ICsJaWYgKHByaXYtPm90Z19waHlfbW9kZSA9PSBQSFlfTU9ERV9VU0JfREVWSUNF KSB7Cj4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwgVVNCX1IwLAo+ICsJCQkJ VVNCX1IwX1UyRF9BQ1QsIFVTQl9SMF9VMkRfQUNUKTsKPiArCQlyZWdtYXBfdXBkYXRlX2JpdHMo cHJpdi0+cmVnbWFwLCBVU0JfUjAsCj4gKwkJCQlVU0JfUjBfVTJEX1NTX1NDQUxFRE9XTl9NT0RF X01BU0ssIDApOwo+ICsJCXJlZ21hcF91cGRhdGVfYml0cyhwcml2LT5yZWdtYXAsIFVTQl9SNCwK PiArCQkJCVVTQl9SNF9QMjFfU0xFRVBfTTAsIFVTQl9SNF9QMjFfU0xFRVBfTTApOwo+ICsJfSBl bHNlIHsKPiArCQlyZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+cmVnbWFwLCBVU0JfUjAsCj4gKwkJ CQlVU0JfUjBfVTJEX0FDVCwgMCk7Cj4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21h cCwgVVNCX1I0LAo+ICsJCQkJVVNCX1I0X1AyMV9TTEVFUF9NMCwgMCk7Cj4gKwl9Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgZHdjM19tZXNvbl9nMTJhX3VzYl9pbml0KHN0cnVjdCBkd2MzX21lc29u X2cxMmEgKnByaXYpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gZHdjM19tZXNvbl9n MTJhX3VzYjJfaW5pdChwcml2KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4g KwlyZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+cmVnbWFwLCBVU0JfUjEsCj4gKwkJCVVTQl9SMV9V M0hfRkxBREpfMzBNSFpfUkVHX01BU0ssCj4gKwkJCUZJRUxEX1BSRVAoVVNCX1IxX1UzSF9GTEFE Sl8zME1IWl9SRUdfTUFTSywgMHgyMCkpOwo+ICsKPiArCXJlZ21hcF91cGRhdGVfYml0cyhwcml2 LT5yZWdtYXAsIFVTQl9SNSwKPiArCQkJVVNCX1I1X0lEX0RJR19FTl8wLAo+ICsJCQlVU0JfUjVf SURfRElHX0VOXzApOwo+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKHByaXYtPnJlZ21hcCwgVVNCX1I1 LAo+ICsJCQlVU0JfUjVfSURfRElHX0VOXzEsCj4gKwkJCVVTQl9SNV9JRF9ESUdfRU5fMSk7Cj4g KwlyZWdtYXBfdXBkYXRlX2JpdHMocHJpdi0+cmVnbWFwLCBVU0JfUjUsCj4gKwkJCVVTQl9SNV9J RF9ESUdfVEhfTUFTSywKPiArCQkJRklFTERfUFJFUChVU0JfUjVfSURfRElHX1RIX01BU0ssIDB4 ZmYpKTsKPiArCj4gKwkvKiBJZiB3ZSBoYXZlIGFuIGFjdHVhbCBTdXBlclNwZWVkIHBvcnQsIGlu aXRpYWxpemUgaXQgKi8KPiArCWlmIChwcml2LT51c2IzX3BvcnRzKQo+ICsJCWR3YzNfbWVzb25f ZzEyYV91c2IzX2luaXQocHJpdik7Cj4gKwo+ICsJZHdjM19tZXNvbl9nMTJhX3VzYl9vdGdfYXBw bHlfbW9kZShwcml2KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCByZWdtYXBfY29uZmlnIHBoeV9tZXNvbl9nMTJhX3VzYjNfcmVnbWFwX2NvbmYgPSB7 Cj4gKwkucmVnX2JpdHMgPSA4LAo+ICsJLnZhbF9iaXRzID0gMzIsCj4gKwkucmVnX3N0cmlkZSA9 IDQsCj4gKwkubWF4X3JlZ2lzdGVyID0gVVNCX1I1LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBk d2MzX21lc29uX2cxMmFfZ2V0X3BoeXMoc3RydWN0IGR3YzNfbWVzb25fZzEyYSAqcHJpdikKPiAr ewo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMCA7IGkgPCBQSFlfQ09VTlQgOyArK2kpIHsK PiArCQlwcml2LT5waHlzW2ldID0gZGV2bV9waHlfb3B0aW9uYWxfZ2V0KHByaXYtPmRldiwgcGh5 X25hbWVzW2ldKTsKPiArCQlpZiAoIXByaXYtPnBoeXNbaV0pCj4gKwkJCWNvbnRpbnVlOwo+ICsK PiArCQlpZiAoSVNfRVJSKHByaXYtPnBoeXNbaV0pKQo+ICsJCQlyZXR1cm4gUFRSX0VSUihwcml2 LT5waHlzW2ldKTsKPiArCj4gKwkJaWYgKGkgPT0gVVNCM19IT1NUX1BIWSkKPiArCQkJcHJpdi0+ dXNiM19wb3J0cysrOwo+ICsJCWVsc2UKPiArCQkJcHJpdi0+dXNiMl9wb3J0cysrOwo+ICsJfQo+ ICsKPiArCWRldl9pbmZvKHByaXYtPmRldiwgIlVTQjIgcG9ydHM6ICVkXG4iLCBwcml2LT51c2Iy X3BvcnRzKTsKPiArCWRldl9pbmZvKHByaXYtPmRldiwgIlVTQjMgcG9ydHM6ICVkXG4iLCBwcml2 LT51c2IzX3BvcnRzKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGVudW0g cGh5X21vZGUgZHdjM19tZXNvbl9nMTJhX2dldF9pZChzdHJ1Y3QgZHdjM19tZXNvbl9nMTJhICpw cml2KQo+ICt7Cj4gKwl1MzIgcmVnOwo+ICsKPiArCXJlZ21hcF9yZWFkKHByaXYtPnJlZ21hcCwg VVNCX1I1LCAmcmVnKTsKPiArCj4gKwlpZiAocmVnICYgKFVTQl9SNV9JRF9ESUdfU1lOQyB8IFVT Ql9SNV9JRF9ESUdfUkVHKSkKPiArCQlyZXR1cm4gUEhZX01PREVfVVNCX0RFVklDRTsKPiArCj4g KwlyZXR1cm4gUEhZX01PREVfVVNCX0hPU1Q7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHdjM19t ZXNvbl9nMTJhX290Z19tb2RlX3NldChzdHJ1Y3QgZHdjM19tZXNvbl9nMTJhICpwcml2LAo+ICsJ CQkJCWVudW0gcGh5X21vZGUgbW9kZSkKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIXBy aXYtPnBoeXNbVVNCMl9PVEdfUEhZXSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlpZiAo bW9kZSA9PSBQSFlfTU9ERV9VU0JfSE9TVCkKPiArCQlkZXZfaW5mbyhwcml2LT5kZXYsICJzd2l0 Y2hpbmcgdG8gSG9zdCBNb2RlXG4iKTsKPiArCWVsc2UKPiArCQlkZXZfaW5mbyhwcml2LT5kZXYs ICJzd2l0Y2hpbmcgdG8gRGV2aWNlIE1vZGVcbiIpOwo+ICsKPiArCWlmIChwcml2LT52YnVzKSB7 Cj4gKwkJaWYgKG1vZGUgPT0gUEhZX01PREVfVVNCX0RFVklDRSkKPiArCQkJcmV0ID0gcmVndWxh dG9yX2Rpc2FibGUocHJpdi0+dmJ1cyk7Cj4gKwkJZWxzZQo+ICsJCQlyZXQgPSByZWd1bGF0b3Jf ZW5hYmxlKHByaXYtPnZidXMpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9 Cj4gKwo+ICsJcHJpdi0+b3RnX3BoeV9tb2RlID0gbW9kZTsKPiArCj4gKwlkd2MzX21lc29uX2cx MmFfdXNiMl9zZXRfbW9kZShwcml2LCBVU0IyX09UR19QSFksIG1vZGUpOwo+ICsKPiArCWR3YzNf bWVzb25fZzEyYV91c2Jfb3RnX2FwcGx5X21vZGUocHJpdik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgZHdjM19tZXNvbl9nMTJhX3JvbGVfc2V0KHN0cnVjdCBkZXZp Y2UgKmRldiwgZW51bSB1c2Jfcm9sZSByb2xlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHdjM19tZXNvbl9n MTJhICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwllbnVtIHBoeV9tb2RlIG1vZGU7 Cj4gKwo+ICsJaWYgKHJvbGUgPT0gVVNCX1JPTEVfTk9ORSkKPiArCQlyZXR1cm4gMDsKPiArCj4g Kwltb2RlID0gKHJvbGUgPT0gVVNCX1JPTEVfSE9TVCkgPyBQSFlfTU9ERV9VU0JfSE9TVAo+ICsJ CQkJICAgICAgIDogUEhZX01PREVfVVNCX0RFVklDRTsKPiArCj4gKwlpZiAobW9kZSA9PSBwcml2 LT5vdGdfcGh5X21vZGUpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0dXJuIGR3YzNfbWVzb25f ZzEyYV9vdGdfbW9kZV9zZXQocHJpdiwgbW9kZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBlbnVtIHVz Yl9yb2xlIGR3YzNfbWVzb25fZzEyYV9yb2xlX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sK PiArCXN0cnVjdCBkd2MzX21lc29uX2cxMmEgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK PiArCj4gKwlyZXR1cm4gcHJpdi0+b3RnX3BoeV9tb2RlID09IFBIWV9NT0RFX1VTQl9IT1NUID8K PiArCQlVU0JfUk9MRV9IT1NUIDogVVNCX1JPTEVfREVWSUNFOwo+ICt9Cj4gKwo+ICtzdGF0aWMg c3RydWN0IGRldmljZSAqZHdjM19tZXNvbl9nMTJfZmluZF9jaGlsZChzdHJ1Y3QgZGV2aWNlICpk ZXYsCj4gKwkJCQkJCWNvbnN0IGNoYXIgKmNvbXBhdGlibGUpCj4gK3sKPiArCXN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXY7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwo+ICsKPiArCW5w ID0gb2ZfZ2V0X2NvbXBhdGlibGVfY2hpbGQoZGV2LT5vZl9ub2RlLCBjb21wYXRpYmxlKTsKPiAr CWlmICghbnApCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJcGRldiA9IG9mX2ZpbmRfZGV2aWNl X2J5X25vZGUobnApOwo+ICsJb2Zfbm9kZV9wdXQobnApOwo+ICsJaWYgKCFwZGV2KQo+ICsJCXJl dHVybiBOVUxMOwo+ICsKPiArCXJldHVybiAmcGRldi0+ZGV2Owo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGR3YzNfbWVzb25fZzEyYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ ICt7Cj4gKwlzdHJ1Y3QgZHdjM19tZXNvbl9nMTJhCSpwcml2Owo+ICsJc3RydWN0IGRldmljZQkJ KmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUJKm5wID0gZGV2LT5vZl9u b2RlOwo+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ICsJc3RydWN0IHJlc291cmNlICpyZXM7Cj4g KwllbnVtIHBoeV9tb2RlIG90Z19pZDsKPiArCWludCByZXQsIGk7Cj4gKwo+ICsJcHJpdiA9IGRl dm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFwcml2 KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJj ZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4gKwliYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291 cmNlKGRldiwgcmVzKTsKPiArCWlmIChJU19FUlIoYmFzZSkpCj4gKwkJcmV0dXJuIFBUUl9FUlIo YmFzZSk7Cj4gKwo+ICsJcHJpdi0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKGRldiwg YmFzZSwKPiArCQkJCQkgICAgICZwaHlfbWVzb25fZzEyYV91c2IzX3JlZ21hcF9jb25mKTsKPiAr CWlmIChJU19FUlIocHJpdi0+cmVnbWFwKSkKPiArCQlyZXR1cm4gUFRSX0VSUihwcml2LT5yZWdt YXApOwo+ICsKPiArCXByaXYtPnZidXMgPSBkZXZtX3JlZ3VsYXRvcl9nZXRfb3B0aW9uYWwoZGV2 LCAidmJ1cyIpOwo+ICsJaWYgKElTX0VSUihwcml2LT52YnVzKSkgewo+ICsJCWlmIChQVFJfRVJS KHByaXYtPnZidXMpID09IC1FUFJPQkVfREVGRVIpCj4gKwkJCXJldHVybiBQVFJfRVJSKHByaXYt PnZidXMpOwo+ICsJCXByaXYtPnZidXMgPSBOVUxMOwo+ICsJfQo+ICsKPiArCXByaXYtPmNsayA9 IGRldm1fY2xrX2dldChkZXYsIE5VTEwpOwo+ICsJaWYgKElTX0VSUihwcml2LT5jbGspKQo+ICsJ CXJldHVybiBQVFJfRVJSKHByaXYtPmNsayk7Cj4gKwo+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5h YmxlKHByaXYtPmNsayk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJZGV2 bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwKPiArCQkJCSAodm9pZCgqKSh2b2lkICopKWNsa19k aXNhYmxlX3VucHJlcGFyZSwKPiArCQkJCSBwcml2LT5jbGspOwo+ICsKPiArCXBsYXRmb3JtX3Nl dF9kcnZkYXRhKHBkZXYsIHByaXYpOwo+ICsJcHJpdi0+ZGV2ID0gZGV2Owo+ICsKPiArCXByaXYt PnJlc2V0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldChkZXYsIE5VTEwpOwo+ICsJaWYgKElTX0VS Uihwcml2LT5yZXNldCkpIHsKPiArCQlyZXQgPSBQVFJfRVJSKHByaXYtPnJlc2V0KTsKPiArCQlk ZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgZGV2aWNlIHJlc2V0LCBlcnI9JWRcbiIsIHJldCk7 Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSByZXNldF9jb250cm9sX3Jlc2V0 KHByaXYtPnJlc2V0KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQg PSBkd2MzX21lc29uX2cxMmFfZ2V0X3BoeXMocHJpdik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVy biByZXQ7Cj4gKwo+ICsJaWYgKHByaXYtPnZidXMpIHsKPiArCQlyZXQgPSByZWd1bGF0b3JfZW5h YmxlKHByaXYtPnZidXMpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4g Kwo+ICsJLyogR2V0IGRyX21vZGUgKi8KPiArCXByaXYtPm90Z19tb2RlID0gdXNiX2dldF9kcl9t b2RlKGRldik7Cj4gKwo+ICsJZHdjM19tZXNvbl9nMTJhX3VzYl9pbml0KHByaXYpOwo+ICsKPiAr CS8qIEluaXQgUEhZcyAqLwo+ICsJZm9yIChpID0gMCA7IGkgPCBQSFlfQ09VTlQgOyArK2kpIHsK PiArCQlyZXQgPSBwaHlfaW5pdChwcml2LT5waHlzW2ldKTsKPiArCQlpZiAocmV0KQo+ICsJCQln b3RvIGVycl9waHlzX3Bvd2VyOwo+ICsJfQo+ICsKPiArCS8qIFNldCBQSFkgUG93ZXIgKi8KPiAr CWZvciAoaSA9IDAgOyBpIDwgUEhZX0NPVU5UIDsgKytpKSB7Cj4gKwkJcmV0ID0gcGh5X3Bvd2Vy X29uKHByaXYtPnBoeXNbaV0pOwo+ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8gZXJyX3BoeXNfcHV0 Owo+ICsJfQo+ICsKPiArCXJldCA9IG9mX3BsYXRmb3JtX3BvcHVsYXRlKG5wLCBOVUxMLCBOVUxM LCBkZXYpOwo+ICsJaWYgKHJldCkgewo+ICsJCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5j bGspOwo+ICsJCWNsa19wdXQocHJpdi0+Y2xrKTsKTm8gbmVlZCBjbGtfcHV0KCkKPiArCj4gKwkJ Z290byBlcnJfcGh5c19leGl0Owo+ICsJfQo+ICsKPiArCS8qIFNldHVwIE9URyBtb2RlIGNvcnJl c3BvbmRpbmcgdG8gdGhlIElEIHBpbiAqLwo+ICsJaWYgKHByaXYtPm90Z19tb2RlID09IFVTQl9E Ul9NT0RFX09URykgewo+ICsJCS8qIFRPRklYIEhhbmRsZSBJRCBtb2RlIHRvZ2dsaW5nIHZpYSBJ UlEgKi8KPiArCQlvdGdfaWQgPSBkd2MzX21lc29uX2cxMmFfZ2V0X2lkKHByaXYpOwo+ICsJCWlm IChvdGdfaWQgIT0gcHJpdi0+b3RnX3BoeV9tb2RlKSB7Cj4gKwkJCWlmIChkd2MzX21lc29uX2cx MmFfb3RnX21vZGVfc2V0KHByaXYsIG90Z19pZCkpCj4gKwkJCQlkZXZfd2FybihkZXYsICJGYWls ZWQgdG8gc3dpdGNoIE9URyBtb2RlXG4iKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyogU2V0dXAg cm9sZSBzd2l0Y2hlciAqLwo+ICsJcHJpdi0+c3dpdGNoX2Rlc2MudXNiMl9wb3J0ID0gZHdjM19t ZXNvbl9nMTJfZmluZF9jaGlsZChkZXYsCj4gKwkJCQkJCQkJInNucHMsZHdjMyIpOwo+ICsJcHJp di0+c3dpdGNoX2Rlc2MudWRjID0gZHdjM19tZXNvbl9nMTJfZmluZF9jaGlsZChkZXYsICJzbnBz LGR3YzIiKTsKPiArCXByaXYtPnN3aXRjaF9kZXNjLmFsbG93X3VzZXJzcGFjZV9jb250cm9sID0g dHJ1ZTsKPiArCXByaXYtPnN3aXRjaF9kZXNjLnNldCA9IGR3YzNfbWVzb25fZzEyYV9yb2xlX3Nl dDsKPiArCXByaXYtPnN3aXRjaF9kZXNjLmdldCA9IGR3YzNfbWVzb25fZzEyYV9yb2xlX2dldDsK PiArCj4gKwlwcml2LT5yb2xlX3N3aXRjaCA9IHVzYl9yb2xlX3N3aXRjaF9yZWdpc3RlcihkZXYs ICZwcml2LT5zd2l0Y2hfZGVzYyk7Cj4gKwlpZiAoSVNfRVJSKHByaXYtPnJvbGVfc3dpdGNoKSkK PiArCQlkZXZfd2FybihkZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgUm9sZSBTd2l0Y2hcbiIpOwo+ ICsKPiArCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXYpOwo+ICsJcG1fcnVudGltZV9lbmFibGUo ZGV2KTsKPiArCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsKPiArCj4gKwlyZXR1cm4gMDsKPiAr Cj4gK2Vycl9waHlzX2V4aXQ6Cj4gKwlmb3IgKGkgPSAwIDsgaSA8IFBIWV9DT1VOVCA7ICsraSkK PiArCQlwaHlfZXhpdChwcml2LT5waHlzW2ldKTsKPiArCj4gK2Vycl9waHlzX3Bvd2VyOgo+ICsJ Zm9yIChpID0gMCA7IGkgPCBQSFlfQ09VTlQgOyArK2kpCj4gKwkJcGh5X3Bvd2VyX29mZihwcml2 LT5waHlzW2ldKTsKPiArCj4gK2Vycl9waHlzX3B1dDoKPiArCWZvciAoaSA9IDAgOyBpIDwgUEhZ X0NPVU5UIDsgKytpKQo+ICsJCXBoeV9wdXQocHJpdi0+cGh5c1tpXSk7CnlvdSBnZXQgcGh5IGJ5 IGRldm1fcGh5X29wdGlvbmFsX2dldCgpLCBubyBuZWVkIGNhbGwgcGh5X3B1dCgpLCAKPiArCj4g KwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR3YzNfbWVzb25fZzEyYV9yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGR3YzNfbWVz b25fZzEyYSAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCWludCBpOwo+ICsKPiArCXVzYl9yb2xlX3N3aXRj aF91bnJlZ2lzdGVyKHByaXYtPnJvbGVfc3dpdGNoKTsKPiArCj4gKwlvZl9wbGF0Zm9ybV9kZXBv cHVsYXRlKGRldik7Cj4gKwo+ICsJZm9yIChpID0gMCA7IGkgPCBQSFlfQ09VTlQgOyArK2kpIHsK PiArCQlwaHlfcG93ZXJfb2ZmKHByaXYtPnBoeXNbaV0pOwo+ICsJCXBoeV9leGl0KHByaXYtPnBo eXNbaV0pOwo+ICsJCXBoeV9wdXQocHJpdi0+cGh5c1tpXSk7CmhlcmUsIGFuZCByZW1vdmUgb3Ro ZXJzIGlmIGhhdmUuCj4gKwl9Cj4gKwo+ICsJcG1fcnVudGltZV9kaXNhYmxlKGRldik7Cj4gKwlw bV9ydW50aW1lX3B1dF9ub2lkbGUoZGV2KTsKPiArCXBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChk ZXYpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51 c2VkIGR3YzNfbWVzb25fZzEyYV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ ICt7Cj4gKwlzdHJ1Y3QgZHdjM19tZXNvbl9nMTJhCSpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRl dik7Cj4gKwo+ICsJY2xrX2Rpc2FibGUocHJpdi0+Y2xrKTsKPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCBkd2MzX21lc29uX2cxMmFfcnVudGlt ZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHdjM19tZXNvbl9n MTJhCSpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwo+ICsJcmV0dXJuIGNsa19lbmFi bGUocHJpdi0+Y2xrKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCBkd2Mz X21lc29uX2cxMmFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBk d2MzX21lc29uX2cxMmEgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCWludCBpOwo+ ICsKPiArCWZvciAoaSA9IDAgOyBpIDwgUEhZX0NPVU5UIDsgKytpKQo+ICsJCXBoeV9leGl0KHBy aXYtPnBoeXNbaV0pOwo+ICsKPiArCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHByaXYtPnJlc2V0KTsK PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCBk d2MzX21lc29uX2cxMmFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0 IGR3YzNfbWVzb25fZzEyYSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJaW50IGks IHJldDsKPiArCj4gKwlyZXNldF9jb250cm9sX2RlYXNzZXJ0KHByaXYtPnJlc2V0KTsKPiArCj4g Kwlkd2MzX21lc29uX2cxMmFfdXNiX2luaXQocHJpdik7Cj4gKwo+ICsJLyogSW5pdCBQSFlzICov Cj4gKwlmb3IgKGkgPSAwIDsgaSA8IFBIWV9DT1VOVCA7ICsraSkgewo+ICsJCXJldCA9IHBoeV9p bml0KHByaXYtPnBoeXNbaV0pOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9 CkRvIHlvdSBuZWVkIHBvd2VyIG9uIHBoeXM/Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBkd2MzX21lc29uX2cxMmFfZGV2X3BtX29w cyA9IHsKPiArCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKGR3YzNfbWVzb25fZzEyYV9zdXNwZW5k LCBkd2MzX21lc29uX2cxMmFfcmVzdW1lKQo+ICsJU0VUX1JVTlRJTUVfUE1fT1BTKGR3YzNfbWVz b25fZzEyYV9ydW50aW1lX3N1c3BlbmQsCj4gKwkJCWR3YzNfbWVzb25fZzEyYV9ydW50aW1lX3Jl c3VtZSwgTlVMTCkKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk IGR3YzNfbWVzb25fZzEyYV9tYXRjaFtdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJhbWxvZ2lj LG1lc29uLWcxMmEtdXNiLWN0cmwiIH0sCj4gKwl7IC8qIFNlbnRpbmVsICovIH0KPiArfTsKPiAr TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZHdjM19tZXNvbl9nMTJhX21hdGNoKTsKPiArCj4gK3N0 YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3YzNfbWVzb25fZzEyYV9kcml2ZXIgPSB7Cj4g KwkucHJvYmUJCT0gZHdjM19tZXNvbl9nMTJhX3Byb2JlLAo+ICsJLnJlbW92ZQkJPSBkd2MzX21l c29uX2cxMmFfcmVtb3ZlLAo+ICsJLmRyaXZlcgkJPSB7Cj4gKwkJLm5hbWUJPSAiZHdjMy1tZXNv bi1nMTJhIiwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBkd2MzX21lc29uX2cxMmFfbWF0Y2gsCj4g KwkJLnBtCT0gJmR3YzNfbWVzb25fZzEyYV9kZXZfcG1fb3BzLAo+ICsJfSwKPiArfTsKPiArCj4g K21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZHdjM19tZXNvbl9nMTJhX2RyaXZlcik7Cj4gK01PRFVM RV9MSUNFTlNFKCJHUEwgdjIiKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJBbWxvZ2ljIE1lc29u IEcxMkEgVVNCIEdsdWUgTGF5ZXIiKTsKPiArTU9EVUxFX0FVVEhPUigiTmVpbCBBcm1zdHJvbmcg PG5hcm1zdHJvbmdAYmF5bGlicmUuY29tPiIpOwo=