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: [2/2] xhci: hisilicon: support HiSilicon STB xHCI host controller From: sunjg79@163.com Message-Id: <1115fd87-724b-6c73-b1b1-cba7dffc5bcb@163.com> Date: Fri, 4 May 2018 18:32:17 +0800 To: Chunfeng Yun Cc: mathias.nyman@intel.com, gregkh@linuxfoundation.org, robh+dt@kernel.org, shawn.guo@linaro.org, xuejiancheng@hisilicon.com, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, Jianguo Sun List-ID: SGkgQ2h1bmZlbmcsCgpJIGZvcmdvdCB0byBhc3NpZ24gdGhlIHZhbHVlIG9mIHhoY2ktPmltb2Rf aW50ZXJ2YWwuCldpbGwgYWRkIGl0IGluIHYyIHBhdGNoLiBUaGFua3MuCgpPbiAwNS8wNC8yMDE4 IDA1OjU5IFBNLCBDaHVuZmVuZyBZdW4gd3JvdGU6Cj4gSGkgSmlhbmd1bywKPgo+IE9uIEZyaSwg MjAxOC0wNS0wNCBhdCAxNzoyMCArMDgwMCwgc3Vuamc3OUAxNjMuY29tIHdyb3RlOgo+PiBGcm9t OiBKaWFuZ3VvIFN1biA8c3Vuamlhbmd1bzFAaHVhd2VpLmNvbT4KPj4KPj4gVGhpcyBjb21taXQg YWRkcyBzdXBwb3J0IGZvciBIaVNpbGljb24gU1RCIHhIQ0kgaG9zdCBjb250cm9sbGVyLgo+Pgo+ PiBTaWduZWQtb2ZmLWJ5OiBKaWFuZ3VvIFN1biA8c3Vuamlhbmd1bzFAaHVhd2VpLmNvbT4KPj4g LS0tCj4+ICAgZHJpdmVycy91c2IvaG9zdC9LY29uZmlnICAgICAgfCAgIDcgKwo+PiAgIGRyaXZl cnMvdXNiL2hvc3QvTWFrZWZpbGUgICAgIHwgICAxICsKPj4gICBkcml2ZXJzL3VzYi9ob3N0L3ho Y2ktaGlzdGIuYyB8IDQwOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPj4gICAzIGZpbGVzIGNoYW5nZWQsIDQxNyBpbnNlcnRpb25zKCspCj4+ICAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2hvc3QveGhjaS1oaXN0Yi5jCj4+Cj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKPj4g aW5kZXggNWQ5NThkYS4uYzgxM2ZjNCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy91c2IvaG9zdC9L Y29uZmlnCj4+ICsrKyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwo+PiBAQCAtNTIsNiArNTIs MTMgQEAgY29uZmlnIFVTQl9YSENJX1BMQVRGT1JNCj4+ICAgCj4+ICAgCSAgSWYgdW5zdXJlLCBz YXkgTi4KPj4gICAKPj4gK2NvbmZpZyBVU0JfWEhDSV9ISVNUQgo+PiArCXRyaXN0YXRlICJ4SENJ IHN1cHBvcnQgZm9yIEhpU2lsaWNvbiBTVEIgU29DcyIKPj4gKwlkZXBlbmRzIG9uIFVTQl9YSENJ X1BMQVRGT1JNICYmIChBUkNIX0hJU0kgfHwgQ09NUElMRV9URVNUKQo+PiArCWhlbHAKPj4gKwkg IFNheSAnWScgdG8gZW5hYmxlIHRoZSBzdXBwb3J0IGZvciB0aGUgeEhDSSBob3N0IGNvbnRyb2xs ZXIKPj4gKwkgIGZvdW5kIGluIEhpU2lsaWNvbiBTVEIgU29Dcy4KPj4gKwo+PiAgIGNvbmZpZyBV U0JfWEhDSV9NVEsKPj4gICAJdHJpc3RhdGUgInhIQ0kgc3VwcG9ydCBmb3IgTWVkaWFUZWsgU29D cyIKPj4gICAJc2VsZWN0IE1GRF9TWVNDT04KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hv c3QvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCj4+IGluZGV4IDhhOGNmZmUu LjliNjY5YzkgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKPj4gKysr IGIvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQo+PiBAQCAtNzQsNiArNzQsNyBAQCBvYmotJChD T05GSUdfVVNCX0ZIQ0lfSENEKQkrPSBmaGNpLm8KPj4gICBvYmotJChDT05GSUdfVVNCX1hIQ0lf SENEKQkrPSB4aGNpLWhjZC5vCj4+ICAgb2JqLSQoQ09ORklHX1VTQl9YSENJX1BDSSkJKz0geGhj aS1wY2kubwo+PiAgIG9iai0kKENPTkZJR19VU0JfWEhDSV9QTEFURk9STSkgKz0geGhjaS1wbGF0 LWhjZC5vCj4+ICtvYmotJChDT05GSUdfVVNCX1hIQ0lfSElTVEIpCSs9IHhoY2ktaGlzdGIubwo+ PiAgIG9iai0kKENPTkZJR19VU0JfWEhDSV9NVEspCSs9IHhoY2ktbXRrLm8KPj4gICBvYmotJChD T05GSUdfVVNCX1hIQ0lfVEVHUkEpCSs9IHhoY2ktdGVncmEubwo+PiAgIG9iai0kKENPTkZJR19V U0JfU0w4MTFfSENEKQkrPSBzbDgxMS1oY2Qubwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Iv aG9zdC94aGNpLWhpc3RiLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGlzdGIuYwo+PiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi41ZWM1NDlmCj4+IC0tLSAvZGV2L251 bGwKPj4gKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWhpc3RiLmMKPj4gQEAgLTAsMCArMSw0 MDkgQEAKPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsvKgo+PiAr ICogeEhDSSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBIaVNpbGljb24gU1RCIFNvQ3MKPj4g KyAqCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBIaVNpbGljb24gQ28uLCBMdGQuIGh0 dHA6Ly93d3cuaGlzaWxpY29uLmNvbQo+PiArICoKPj4gKyAqIEF1dGhvcnM6IEppYW5ndW8gU3Vu IDxzdW5qaWFuZ3VvMUBodWF3ZWkuY29tPgo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPj4gKyAqIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4+ ICsgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24uCj4gTm8gbmVlZCBhbnltb3JlIGlmIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIGlzIHByb3Zp ZGVkCj4+ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+PiArI2luY2x1ZGUg PGxpbnV4L2RtYS1tYXBwaW5nLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4+ICsj aW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgo+IE5vdCB1c2VkCj4+ICsjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPj4gKyNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Cj4+ ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4gZGl0dG8KPj4gKyNpbmNsdWRlIDxsaW51eC9y ZXNldC5oPgo+PiArCj4+ICsjaW5jbHVkZSAieGhjaS5oIgo+PiArCj4+ICsjZGVmaW5lIEdUWFRI UkNGRwkJMHhjMTA4Cj4+ICsjZGVmaW5lIEdSWFRIUkNGRwkJMHhjMTBjCj4+ICsjZGVmaW5lIFJF R19HVVNCMlBIWUNGRzAJMHhjMjAwCj4+ICsjZGVmaW5lIEJJVF9VVE1JXzhfMTYJCUJJVCgzKQo+ PiArI2RlZmluZSBCSVRfVVRNSV9VTFBJCQlCSVQoNCkKPj4gKyNkZWZpbmUgQklUX0ZSRUVDTEtf RVhJU1QJQklUKDMwKQo+PiArCj4+ICsjZGVmaW5lIFJFR19HVVNCM1BJUEVDVEwwCTB4YzJjMAo+ PiArI2RlZmluZSBVU0IzX0RFRU1QSEFTSVNfTUFTSwlHRU5NQVNLKDIsIDEpCj4+ICsjZGVmaW5l IFVTQjNfREVFTVBIQVNJUzAJQklUKDEpCj4+ICsjZGVmaW5lIFVTQjNfVFhfTUFSR0lOMQkJQklU KDQpCj4+ICsKPj4gK3N0cnVjdCB4aGNpX2hjZF9oaXN0YiB7Cj4+ICsJc3RydWN0IGRldmljZQkJ KmRldjsKPj4gKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKPj4gKwl2b2lkIF9faW9tZW0JCSpjdHJs Owo+PiArCXN0cnVjdCBjbGsJCSpidXNfY2xrOwo+PiArCXN0cnVjdCBjbGsJCSp1dG1pX2NsazsK Pj4gKwlzdHJ1Y3QgY2xrCQkqcGlwZV9jbGs7Cj4+ICsJc3RydWN0IGNsawkJKnN1c3BlbmRfY2xr Owo+PiArCXN0cnVjdCByZXNldF9jb250cm9sCSpzb2Z0X3Jlc2V0Owo+PiArfTsKPj4gKwo+PiAr c3RhdGljIGlubGluZSBzdHJ1Y3QgeGhjaV9oY2RfaGlzdGIgKmhjZF90b19oaXN0YihzdHJ1Y3Qg dXNiX2hjZCAqaGNkKQo+PiArewo+PiArCXJldHVybiBkZXZfZ2V0X2RydmRhdGEoaGNkLT5zZWxm LmNvbnRyb2xsZXIpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHhoY2lfaGlzdGJfY29uZmln KHN0cnVjdCB4aGNpX2hjZF9oaXN0YiAqaGlzdGIpCj4+ICt7Cj4+ICsJc3RydWN0IGRldmljZV9u b2RlICpucCA9IGhpc3RiLT5kZXYtPm9mX25vZGU7Cj4+ICsJdTMyIHJlZ3ZhbDsKPj4gKwo+PiAr CWlmIChvZl9wcm9wZXJ0eV9tYXRjaF9zdHJpbmcobnAsICJwaHlzLW5hbWVzIiwgImlubm8iKSA+ PSAwKSB7Cj4+ICsJCS8qIFVTQjIgUEhZIGNob3NlIHVscGkgOGJpdCBpbnRlcmZhY2UgKi8KPj4g KwkJcmVndmFsID0gcmVhZGwoaGlzdGItPmN0cmwgKyBSRUdfR1VTQjJQSFlDRkcwKTsKPj4gKwkJ cmVndmFsICY9IH5CSVRfVVRNSV9VTFBJOwo+PiArCQlyZWd2YWwgJj0gfihCSVRfVVRNSV84XzE2 KTsKPj4gKwkJcmVndmFsICY9IH5CSVRfRlJFRUNMS19FWElTVDsKPj4gKwkJd3JpdGVsKHJlZ3Zh bCwgaGlzdGItPmN0cmwgKyBSRUdfR1VTQjJQSFlDRkcwKTsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAo b2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKG5wLCAicGh5cy1uYW1lcyIsICJjb21ibyIpID49IDAp IHsKPj4gKwkJLyoKPj4gKwkJICogd3JpdGUgMHgwMTBjMDAxMiB0byBHVVNCM1BJUEVDVEwwCj4+ ICsJCSAqIEdVU0IzUElQRUNUTDBbNTozXSA9IDAxMCA6IFR4IE1hcmdpbiA9IDkwMG1WICwKPj4g KwkJICogZGVjcmVhc2UgVFggdm9sdGFnZQo+PiArCQkgKiBHVVNCM1BJUEVDVEwwWzI6MV0gPSAw MSA6IFR4IERlZW1waGFzaXMgPSAtMy41ZEIsCj4+ICsJCSAqIHJlZmVyIHRvIHhIQ0kgc3BlYwo+ PiArCQkgKi8KPj4gKwkJcmVndmFsID0gcmVhZGwoaGlzdGItPmN0cmwgKyBSRUdfR1VTQjNQSVBF Q1RMMCk7Cj4+ICsJCXJlZ3ZhbCAmPSB+VVNCM19ERUVNUEhBU0lTX01BU0s7Cj4+ICsJCXJlZ3Zh bCB8PSBVU0IzX0RFRU1QSEFTSVMwOwo+PiArCQlyZWd2YWwgfD0gVVNCM19UWF9NQVJHSU4xOwo+ PiArCQl3cml0ZWwocmVndmFsLCBoaXN0Yi0+Y3RybCArIFJFR19HVVNCM1BJUEVDVEwwKTsKPj4g Kwl9Cj4+ICsKPj4gKwl3cml0ZWwoMHgyMzEwMDAwMCwgaGlzdGItPmN0cmwgKyBHVFhUSFJDRkcp Owo+PiArCXdyaXRlbCgweDIzMTAwMDAwLCBoaXN0Yi0+Y3RybCArIEdSWFRIUkNGRyk7Cj4+ICsK Pj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB4aGNpX2hpc3RiX2Nsa3Nf Z2V0KHN0cnVjdCB4aGNpX2hjZF9oaXN0YiAqaGlzdGIpCj4+ICt7Cj4+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gaGlzdGItPmRldjsKPj4gKwo+PiArCWhpc3RiLT5idXNfY2xrID0gZGV2bV9jbGtf Z2V0KGRldiwgImJ1cyIpOwo+PiArCWlmIChJU19FUlIoaGlzdGItPmJ1c19jbGspKSB7Cj4+ICsJ CWRldl9lcnIoZGV2LCAiZmFpbCB0byBnZXQgYnVzIGNsa1xuIik7Cj4+ICsJCXJldHVybiBQVFJf RVJSKGhpc3RiLT5idXNfY2xrKTsKPj4gKwl9Cj4+ICsKPj4gKwloaXN0Yi0+dXRtaV9jbGsgPSBk ZXZtX2Nsa19nZXQoZGV2LCAidXRtaSIpOwo+PiArCWlmIChJU19FUlIoaGlzdGItPnV0bWlfY2xr KSkgewo+PiArCQlkZXZfZXJyKGRldiwgImZhaWwgdG8gZ2V0IHV0bWkgY2xrXG4iKTsKPj4gKwkJ cmV0dXJuIFBUUl9FUlIoaGlzdGItPnV0bWlfY2xrKTsKPj4gKwl9Cj4+ICsKPj4gKwloaXN0Yi0+ cGlwZV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGlwZSIpOwo+PiArCWlmIChJU19FUlIoaGlz dGItPnBpcGVfY2xrKSkgewo+PiArCQlkZXZfZXJyKGRldiwgImZhaWwgdG8gZ2V0IHBpcGUgY2xr XG4iKTsKPj4gKwkJcmV0dXJuIFBUUl9FUlIoaGlzdGItPnBpcGVfY2xrKTsKPj4gKwl9Cj4+ICsK Pj4gKwloaXN0Yi0+c3VzcGVuZF9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAic3VzcGVuZCIpOwo+ PiArCWlmIChJU19FUlIoaGlzdGItPnN1c3BlbmRfY2xrKSkgewo+PiArCQlkZXZfZXJyKGRldiwg ImZhaWwgdG8gZ2V0IHN1c3BlbmQgY2xrXG4iKTsKPj4gKwkJcmV0dXJuIFBUUl9FUlIoaGlzdGIt PnN1c3BlbmRfY2xrKTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGludCB4aGNpX2hpc3RiX2hvc3RfZW5hYmxlKHN0cnVjdCB4aGNpX2hjZF9oaXN0YiAq aGlzdGIpCj4+ICt7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCXJldCA9IGNsa19wcmVwYXJlX2Vu YWJsZShoaXN0Yi0+YnVzX2Nsayk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlkZXZfZXJyKGhpc3Ri LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIGJ1cyBjbGtcbiIpOwo+PiArCQlyZXR1cm4gcmV0Owo+ PiArCX0KPj4gKwo+PiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShoaXN0Yi0+dXRtaV9jbGsp Owo+PiArCWlmIChyZXQpIHsKPj4gKwkJZGV2X2VycihoaXN0Yi0+ZGV2LCAiZmFpbGVkIHRvIGVu YWJsZSB1dG1pIGNsa1xuIik7Cj4+ICsJCWdvdG8gZXJyX3V0bWlfY2xrOwo+PiArCX0KPj4gKwo+ PiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShoaXN0Yi0+cGlwZV9jbGspOwo+PiArCWlmIChy ZXQpIHsKPj4gKwkJZGV2X2VycihoaXN0Yi0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBwaXBlIGNs a1xuIik7Cj4+ICsJCWdvdG8gZXJyX3BpcGVfY2xrOwo+PiArCX0KPj4gKwo+PiArCXJldCA9IGNs a19wcmVwYXJlX2VuYWJsZShoaXN0Yi0+c3VzcGVuZF9jbGspOwo+PiArCWlmIChyZXQpIHsKPj4g KwkJZGV2X2VycihoaXN0Yi0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBzdXNwZW5kIGNsa1xuIik7 Cj4+ICsJCWdvdG8gZXJyX3N1c3BlbmRfY2xrOwo+PiArCX0KPj4gKwo+PiArCXJlc2V0X2NvbnRy b2xfZGVhc3NlcnQoaGlzdGItPnNvZnRfcmVzZXQpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICsK Pj4gK2Vycl9zdXNwZW5kX2NsazoKPj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGlzdGItPnBp cGVfY2xrKTsKPj4gK2Vycl9waXBlX2NsazoKPj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGlz dGItPnV0bWlfY2xrKTsKPj4gK2Vycl91dG1pX2NsazoKPj4gKwljbGtfZGlzYWJsZV91bnByZXBh cmUoaGlzdGItPmJ1c19jbGspOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiAr c3RhdGljIHZvaWQgeGhjaV9oaXN0Yl9ob3N0X2Rpc2FibGUoc3RydWN0IHhoY2lfaGNkX2hpc3Ri ICpoaXN0YikKPj4gK3sKPj4gKwlyZXNldF9jb250cm9sX2Fzc2VydChoaXN0Yi0+c29mdF9yZXNl dCk7Cj4+ICsKPj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGlzdGItPnN1c3BlbmRfY2xrKTsK Pj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGlzdGItPnBpcGVfY2xrKTsKPj4gKwljbGtfZGlz YWJsZV91bnByZXBhcmUoaGlzdGItPnV0bWlfY2xrKTsKPj4gKwljbGtfZGlzYWJsZV91bnByZXBh cmUoaGlzdGItPmJ1c19jbGspOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB4aGNpX2hpc3Ri X3F1aXJrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKPj4gK3sK Pj4gKwkvKgo+PiArCSAqIEFzIG9mIG5vdyBwbGF0Zm9ybSBkcml2ZXJzIGRvbid0IHByb3ZpZGUg TVNJIHN1cHBvcnQgc28gd2UgZW5zdXJlCj4+ICsJICogaGVyZSB0aGF0IHRoZSBnZW5lcmljIGNv ZGUgZG9lcyBub3QgdHJ5IHRvIG1ha2UgYSBwY2lfZGV2IGZyb20gb3VyCj4+ICsJICogZGV2IHN0 cnVjdCBpbiBvcmRlciB0byBzZXR1cCBNU0kKPj4gKwkgKi8KPj4gKwl4aGNpLT5xdWlya3MgfD0g WEhDSV9QTEFUOwo+PiArfQo+PiArCj4+ICsvKiBjYWxsZWQgZHVyaW5nIHByb2JlKCkgYWZ0ZXIg Y2hpcCByZXNldCBjb21wbGV0ZXMgKi8KPj4gK3N0YXRpYyBpbnQgeGhjaV9oaXN0Yl9zZXR1cChz dHJ1Y3QgdXNiX2hjZCAqaGNkKQo+PiArewo+PiArCXN0cnVjdCB4aGNpX2hjZF9oaXN0YiAqaGlz dGIgPSBoY2RfdG9faGlzdGIoaGNkKTsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJaWYgKHVzYl9o Y2RfaXNfcHJpbWFyeV9oY2QoaGNkKSkgewo+PiArCQlyZXQgPSB4aGNpX2hpc3RiX2NvbmZpZyho aXN0Yik7Cj4+ICsJCWlmIChyZXQpCj4+ICsJCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiAr CXJldCA9IHhoY2lfZ2VuX3NldHVwKGhjZCwgeGhjaV9oaXN0Yl9xdWlya3MpOwo+PiArCWlmIChy ZXQpCj4+ICsJCXJldHVybiByZXQ7Cj4gbm8gbmVlZCB0ZXN0IEByZXQgaGVyZQo+PiArCj4+ICsJ cmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCB4aGNpX2RyaXZl cl9vdmVycmlkZXMgeGhjaV9oaXN0Yl9vdmVycmlkZXMgX19pbml0Y29uc3QgPSB7Cj4+ICsJLnJl c2V0ID0geGhjaV9oaXN0Yl9zZXR1cCwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgaGNf ZHJpdmVyIF9fcmVhZF9tb3N0bHkgeGhjaV9oaXN0Yl9oY19kcml2ZXI7Cj4+ICtzdGF0aWMgaW50 IHhoY2lfaGlzdGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gK3sKPj4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+PiArCXN0cnVjdCB4aGNpX2hjZF9o aXN0YiAqaGlzdGI7Cj4+ICsJY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyOwo+PiArCXN0 cnVjdCB1c2JfaGNkICpoY2Q7Cj4+ICsJc3RydWN0IHhoY2lfaGNkICp4aGNpOwo+PiArCXN0cnVj dCByZXNvdXJjZSAqcmVzOwo+PiArCWludCBpcnE7Cj4+ICsJaW50IHJldCA9IC1FTk9ERVY7Cj4+ ICsKPj4gKwlpZiAodXNiX2Rpc2FibGVkKCkpCj4+ICsJCXJldHVybiAtRU5PREVWOwo+PiArCj4+ ICsJZHJpdmVyID0gJnhoY2lfaGlzdGJfaGNfZHJpdmVyOwo+PiArCWhpc3RiID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKCpoaXN0YiksIEdGUF9LRVJORUwpOwo+PiArCWlmICghaGlzdGIpCj4+ ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJaGlzdGItPmRldiA9IGRldjsKPj4gKwo+PiAr CWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Cj4+ICsJaWYgKGlycSA8IDApCj4+ICsJ CXJldHVybiBpcnE7Cj4+ICsKPj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwg SU9SRVNPVVJDRV9NRU0sIDApOwo+PiArCWhpc3RiLT5jdHJsID0gZGV2bV9pb3JlbWFwX3Jlc291 cmNlKCZwZGV2LT5kZXYsIHJlcyk7Cj4+ICsJaWYgKElTX0VSUihoaXN0Yi0+Y3RybCkpCj4+ICsJ CXJldHVybiBQVFJfRVJSKGhpc3RiLT5jdHJsKTsKPj4gKwo+PiArCXJldCA9IHhoY2lfaGlzdGJf Y2xrc19nZXQoaGlzdGIpOwo+PiArCWlmIChyZXQpCj4+ICsJCXJldHVybiByZXQ7Cj4+ICsKPj4g KwloaXN0Yi0+c29mdF9yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCAic29mdCIp Owo+PiArCWlmIChJU19FUlIoaGlzdGItPnNvZnRfcmVzZXQpKSB7Cj4+ICsJCWRldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIGdldCBzb2Z0IHJlc2V0XG4iKTsKPj4gKwkJcmV0dXJuIFBUUl9FUlIoaGlz dGItPnNvZnRfcmVzZXQpOwo+PiArCX0KPj4gKwo+PiArCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7 Cj4+ICsJcG1fcnVudGltZV9nZXRfc3luYyhkZXYpOwo+PiArCWRldmljZV9lbmFibGVfYXN5bmNf c3VzcGVuZChkZXYpOwo+PiArCj4+ICsJLyogSW5pdGlhbGl6ZSBkbWFfbWFzayBhbmQgY29oZXJl bnRfZG1hX21hc2sgdG8gMzItYml0cyAqLwo+PiArCXJldCA9IGRtYV9zZXRfbWFza19hbmRfY29o ZXJlbnQoZGV2LCBETUFfQklUX01BU0soMzIpKTsKPj4gKwlpZiAocmV0KQo+PiArCQlyZXR1cm4g cmV0Owo+PiArCj4+ICsJaGNkID0gdXNiX2NyZWF0ZV9oY2QoZHJpdmVyLCBkZXYsIGRldl9uYW1l KGRldikpOwo+PiArCWlmICghaGNkKSB7Cj4+ICsJCXJldCA9IC1FTk9NRU07Cj4+ICsJCWdvdG8g ZGlzYWJsZV9wbTsKPj4gKwl9Cj4+ICsKPj4gKwloY2QtPnJlZ3MgPSBoaXN0Yi0+Y3RybDsKPj4g KwloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0Owo+PiArCWhjZC0+cnNyY19sZW4gPSByZXNv dXJjZV9zaXplKHJlcyk7Cj4+ICsKPj4gKwloaXN0Yi0+aGNkID0gaGNkOwo+PiArCWRldl9zZXRf ZHJ2ZGF0YShoY2QtPnNlbGYuY29udHJvbGxlciwgaGlzdGIpOwo+PiArCj4+ICsJcmV0ID0geGhj aV9oaXN0Yl9ob3N0X2VuYWJsZShoaXN0Yik7Cj4+ICsJaWYgKHJldCkKPj4gKwkJZ290byBwdXRf aGNkOwo+PiArCj4+ICsJeGhjaSA9IGhjZF90b194aGNpKGhjZCk7Cj4+ICsKPj4gKwlkZXZpY2Vf d2FrZXVwX2VuYWJsZShoY2QtPnNlbGYuY29udHJvbGxlcik7Cj4+ICsKPj4gKwl4aGNpLT5tYWlu X2hjZCA9IGhjZDsKPj4gKwl4aGNpLT5zaGFyZWRfaGNkID0gdXNiX2NyZWF0ZV9zaGFyZWRfaGNk KGRyaXZlciwgZGV2LCBkZXZfbmFtZShkZXYpLAo+PiArCQkJCQkJIGhjZCk7Cj4+ICsJaWYgKCF4 aGNpLT5zaGFyZWRfaGNkKSB7Cj4+ICsJCXJldCA9IC1FTk9NRU07Cj4+ICsJCWdvdG8gZGlzYWJs ZV9ob3N0Owo+PiArCX0KPj4gKwo+PiArCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFG X1NIQVJFRCk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJZ290byBwdXRfdXNiM19oY2Q7Cj4+ICsKPj4g KwlpZiAoSENDX01BWF9QU0EoeGhjaS0+aGNjX3BhcmFtcykgPj0gNCkKPj4gKwkJeGhjaS0+c2hh cmVkX2hjZC0+Y2FuX2RvX3N0cmVhbXMgPSAxOwo+PiArCj4+ICsJcmV0ID0gdXNiX2FkZF9oY2Qo eGhjaS0+c2hhcmVkX2hjZCwgaXJxLCBJUlFGX1NIQVJFRCk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJ Z290byBkZWFsbG9jX3VzYjJfaGNkOwo+PiArCj4+ICsJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNw ZW5kKGRldik7Cj4+ICsJcG1fcnVudGltZV9wdXRfbm9pZGxlKGRldik7Cj4+ICsKPj4gKwkvKgo+ PiArCSAqIFByZXZlbnQgcnVudGltZSBwbSBmcm9tIGJlaW5nIG9uIGFzIGRlZmF1bHQsIHVzZXJz IHNob3VsZCBlbmFibGUKPj4gKwkgKiBydW50aW1lIHBtIHVzaW5nIHBvd2VyL2NvbnRyb2wgaW4g c3lzZnMuCj4+ICsJICovCj4+ICsJcG1fcnVudGltZV9mb3JiaWQoZGV2KTsKPj4gKwo+IEFyZSB5 b3Ugc3VyZSBtYWtlIHVzZSBvZiB0aGUgZGVmYXVsdCB2YWx1ZSB4aGNpLT5pbW9kX2ludGVydmFs ID09IDAgPwo+Cj4+ICsJcmV0dXJuIDA7Cj4+ICsKPj4gK2RlYWxsb2NfdXNiMl9oY2Q6Cj4+ICsJ dXNiX3JlbW92ZV9oY2QoaGNkKTsKPj4gK3B1dF91c2IzX2hjZDoKPj4gKwl1c2JfcHV0X2hjZCh4 aGNpLT5zaGFyZWRfaGNkKTsKPj4gK2Rpc2FibGVfaG9zdDoKPj4gKwl4aGNpX2hpc3RiX2hvc3Rf ZGlzYWJsZShoaXN0Yik7Cj4+ICtwdXRfaGNkOgo+PiArCXVzYl9wdXRfaGNkKGhjZCk7Cj4+ICtk aXNhYmxlX3BtOgo+PiArCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsKPj4gKwlwbV9ydW50aW1l X2Rpc2FibGUoZGV2KTsKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBpbnQgeGhjaV9oaXN0Yl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQo+PiAr ewo+PiArCXN0cnVjdCB4aGNpX2hjZF9oaXN0YiAqaGlzdGIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0 YShkZXYpOwo+PiArCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBoaXN0Yi0+aGNkOwo+PiArCXN0cnVj dCB4aGNpX2hjZAkqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7Cj4+ICsKPj4gKwl4aGNpLT54aGNf c3RhdGUgfD0gWEhDSV9TVEFURV9SRU1PVklORzsKPj4gKwo+PiArCXVzYl9yZW1vdmVfaGNkKHho Y2ktPnNoYXJlZF9oY2QpOwo+PiArCWRldmljZV93YWtldXBfZGlzYWJsZSgmZGV2LT5kZXYpOwo+ PiArCj4+ICsJdXNiX3JlbW92ZV9oY2QoaGNkKTsKPj4gKwl1c2JfcHV0X2hjZCh4aGNpLT5zaGFy ZWRfaGNkKTsKPj4gKwo+PiArCXhoY2lfaGlzdGJfaG9zdF9kaXNhYmxlKGhpc3RiKTsKPj4gKwl1 c2JfcHV0X2hjZChoY2QpOwo+PiArCXBtX3J1bnRpbWVfcHV0X3N5bmMoJmRldi0+ZGV2KTsKPj4g KwlwbV9ydW50aW1lX2Rpc2FibGUoJmRldi0+ZGV2KTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHhoY2lfaGlzdGJfc3VzcGVuZChz dHJ1Y3QgZGV2aWNlICpkZXYpCj4+ICt7Cj4+ICsJc3RydWN0IHhoY2lfaGNkX2hpc3RiICpoaXN0 YiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+PiArCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBoaXN0 Yi0+aGNkOwo+PiArCXN0cnVjdCB4aGNpX2hjZAkqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7Cj4+ ICsJaW50IHJldDsKPj4gKwo+PiArCXJldCA9IHhoY2lfc3VzcGVuZCh4aGNpLCBkZXZpY2VfbWF5 X3dha2V1cChkZXYpKTsKPj4gKwo+PiArCWlmICghZGV2aWNlX21heV93YWtldXAoZGV2KSkKPj4g KwkJeGhjaV9oaXN0Yl9ob3N0X2Rpc2FibGUoaGlzdGIpOwo+PiArCj4+ICsJcmV0dXJuIHJldDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCB4aGNpX2hpc3RiX3Jlc3Vt ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+ICt7Cj4+ICsJc3RydWN0IHhoY2lfaGNkX2hpc3RiICpo aXN0YiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+PiArCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBo aXN0Yi0+aGNkOwo+PiArCXN0cnVjdCB4aGNpX2hjZCAqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7 Cj4+ICsKPj4gKwlpZiAoIWRldmljZV9tYXlfd2FrZXVwKGRldikpCj4+ICsJCXhoY2lfaGlzdGJf aG9zdF9lbmFibGUoaGlzdGIpOwo+PiArCj4+ICsJcmV0dXJuIHhoY2lfcmVzdW1lKHhoY2ksIDAp Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgeGhjaV9oaXN0 Yl9wbV9vcHMgPSB7Cj4+ICsJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMoeGhjaV9oaXN0Yl9zdXNw ZW5kLCB4aGNpX2hpc3RiX3Jlc3VtZSkKPj4gK307Cj4+ICsjZGVmaW5lIERFVl9QTV9PUFMgKElT X0VOQUJMRUQoQ09ORklHX1BNKSA/ICZ4aGNpX2hpc3RiX3BtX29wcyA6IE5VTEwpCj4+ICsKPj4g KyNpZmRlZiBDT05GSUdfT0YKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGhp c3RiX3hoY2lfb2ZfbWF0Y2hbXSA9IHsKPj4gKwl7IC5jb21wYXRpYmxlID0gImhpc2lsaWNvbixo aTM3OThjdjIwMC14aGNpIn0sCj4+ICsJeyB9LAo+PiArfTsKPj4gK01PRFVMRV9ERVZJQ0VfVEFC TEUob2YsIGhpc3RiX3hoY2lfb2ZfbWF0Y2gpOwo+PiArI2VuZGlmCj4+ICsKPj4gK3N0YXRpYyBz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGhpc3RiX3hoY2lfZHJpdmVyID0gewo+PiArCS5wcm9iZQk9 IHhoY2lfaGlzdGJfcHJvYmUsCj4+ICsJLnJlbW92ZQk9IHhoY2lfaGlzdGJfcmVtb3ZlLAo+PiAr CS5kcml2ZXIJPSB7Cj4+ICsJCS5uYW1lID0gInhoY2ktaGlzdGIiLAo+PiArCQkucG0gPSBERVZf UE1fT1BTLAo+PiArCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoaGlzdGJfeGhjaV9v Zl9tYXRjaCksCj4+ICsJfSwKPj4gK307Cj4+ICtNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnhoY2kt aGlzdGIiKTsKPj4gKwo+PiArc3RhdGljIGludCBfX2luaXQgeGhjaV9oaXN0Yl9pbml0KHZvaWQp Cj4+ICt7Cj4+ICsJeGhjaV9pbml0X2RyaXZlcigmeGhjaV9oaXN0Yl9oY19kcml2ZXIsICZ4aGNp X2hpc3RiX292ZXJyaWRlcyk7Cj4+ICsJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigm aGlzdGJfeGhjaV9kcml2ZXIpOwo+PiArfQo+PiArbW9kdWxlX2luaXQoeGhjaV9oaXN0Yl9pbml0 KTsKPj4gKwo+PiArc3RhdGljIHZvaWQgX19leGl0IHhoY2lfaGlzdGJfZXhpdCh2b2lkKQo+PiAr ewo+PiArCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZoaXN0Yl94aGNpX2RyaXZlcik7Cj4+ ICt9Cj4+ICttb2R1bGVfZXhpdCh4aGNpX2hpc3RiX2V4aXQpOwo+PiArCj4+ICtNT0RVTEVfREVT Q1JJUFRJT04oIkhpU2lsaWNvbiBTVEIgeEhDSSBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIik7Cj4+ ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0tLQpUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMg bGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgtdXNiIiBpbgp0aGUgYm9keSBv ZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZwpNb3JlIG1ham9yZG9tbyBp bmZvIGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwK