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: Chunfeng Yun Message-Id: <1525427980.25162.36.camel@mhfsdcap03> Date: Fri, 4 May 2018 17:59:40 +0800 To: sunjg79@163.com 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: SGkgSmlhbmd1bywKCk9uIEZyaSwgMjAxOC0wNS0wNCBhdCAxNzoyMCArMDgwMCwgc3Vuamc3OUAx NjMuY29tIHdyb3RlOgo+IEZyb206IEppYW5ndW8gU3VuIDxzdW5qaWFuZ3VvMUBodWF3ZWkuY29t Pgo+IAo+IFRoaXMgY29tbWl0IGFkZHMgc3VwcG9ydCBmb3IgSGlTaWxpY29uIFNUQiB4SENJIGhv c3QgY29udHJvbGxlci4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBKaWFuZ3VvIFN1biA8c3Vuamlhbmd1 bzFAaHVhd2VpLmNvbT4KPiAtLS0KPiAgZHJpdmVycy91c2IvaG9zdC9LY29uZmlnICAgICAgfCAg IDcgKwo+ICBkcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlICAgICB8ICAgMSArCj4gIGRyaXZlcnMv dXNiL2hvc3QveGhjaS1oaXN0Yi5jIHwgNDA5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwo+ICAzIGZpbGVzIGNoYW5nZWQsIDQxNyBpbnNlcnRpb25zKCspCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGlzdGIuYwo+IAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25m aWcKPiBpbmRleCA1ZDk1OGRhLi5jODEzZmM0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL2hv c3QvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwo+IEBAIC01Miw2ICs1 MiwxMyBAQCBjb25maWcgVVNCX1hIQ0lfUExBVEZPUk0KPiAgCj4gIAkgIElmIHVuc3VyZSwgc2F5 IE4uCj4gIAo+ICtjb25maWcgVVNCX1hIQ0lfSElTVEIKPiArCXRyaXN0YXRlICJ4SENJIHN1cHBv cnQgZm9yIEhpU2lsaWNvbiBTVEIgU29DcyIKPiArCWRlcGVuZHMgb24gVVNCX1hIQ0lfUExBVEZP Uk0gJiYgKEFSQ0hfSElTSSB8fCBDT01QSUxFX1RFU1QpCj4gKwloZWxwCj4gKwkgIFNheSAnWScg dG8gZW5hYmxlIHRoZSBzdXBwb3J0IGZvciB0aGUgeEhDSSBob3N0IGNvbnRyb2xsZXIKPiArCSAg Zm91bmQgaW4gSGlTaWxpY29uIFNUQiBTb0NzLgo+ICsKPiAgY29uZmlnIFVTQl9YSENJX01USwo+ ICAJdHJpc3RhdGUgInhIQ0kgc3VwcG9ydCBmb3IgTWVkaWFUZWsgU29DcyIKPiAgCXNlbGVjdCBN RkRfU1lTQ09OCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUgYi9kcml2 ZXJzL3VzYi9ob3N0L01ha2VmaWxlCj4gaW5kZXggOGE4Y2ZmZS4uOWI2NjljOSAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy91c2IvaG9zdC9N YWtlZmlsZQo+IEBAIC03NCw2ICs3NCw3IEBAIG9iai0kKENPTkZJR19VU0JfRkhDSV9IQ0QpCSs9 IGZoY2kubwo+ICBvYmotJChDT05GSUdfVVNCX1hIQ0lfSENEKQkrPSB4aGNpLWhjZC5vCj4gIG9i ai0kKENPTkZJR19VU0JfWEhDSV9QQ0kpCSs9IHhoY2ktcGNpLm8KPiAgb2JqLSQoQ09ORklHX1VT Ql9YSENJX1BMQVRGT1JNKSArPSB4aGNpLXBsYXQtaGNkLm8KPiArb2JqLSQoQ09ORklHX1VTQl9Y SENJX0hJU1RCKQkrPSB4aGNpLWhpc3RiLm8KPiAgb2JqLSQoQ09ORklHX1VTQl9YSENJX01USykJ Kz0geGhjaS1tdGsubwo+ICBvYmotJChDT05GSUdfVVNCX1hIQ0lfVEVHUkEpCSs9IHhoY2ktdGVn cmEubwo+ICBvYmotJChDT05GSUdfVVNCX1NMODExX0hDRCkJKz0gc2w4MTEtaGNkLm8KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWhpc3RiLmMgYi9kcml2ZXJzL3VzYi9ob3N0 L3hoY2ktaGlzdGIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNWVj NTQ5Zgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGlzdGIu Ywo+IEBAIC0wLDAgKzEsNDA5IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wCj4gKy8qCj4gKyAqIHhIQ0kgaG9zdCBjb250cm9sbGVyIGRyaXZlciBmb3IgSGlTaWxpY29u IFNUQiBTb0NzCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEhpU2lsaWNvbiBD by4sIEx0ZC4gaHR0cDovL3d3dy5oaXNpbGljb24uY29tCj4gKyAqCj4gKyAqIEF1dGhvcnM6IEpp YW5ndW8gU3VuIDxzdW5qaWFuZ3VvMUBodWF3ZWkuY29tPgo+ICsgKgo+ICsgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gKyAq IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCj4gKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KTm8gbmVlZCBhbnltb3JlIGlmIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyIGlzIHBy b3ZpZGVkCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8 bGludXgvZG1hLW1hcHBpbmcuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5j bHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgpOb3QgdXNlZAo+ICsjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZv cm1fZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9yZWdtYXAuaD4KZGl0dG8KPiArI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+Cj4gKwo+ ICsjaW5jbHVkZSAieGhjaS5oIgo+ICsKPiArI2RlZmluZSBHVFhUSFJDRkcJCTB4YzEwOAo+ICsj ZGVmaW5lIEdSWFRIUkNGRwkJMHhjMTBjCj4gKyNkZWZpbmUgUkVHX0dVU0IyUEhZQ0ZHMAkweGMy MDAKPiArI2RlZmluZSBCSVRfVVRNSV84XzE2CQlCSVQoMykKPiArI2RlZmluZSBCSVRfVVRNSV9V TFBJCQlCSVQoNCkKPiArI2RlZmluZSBCSVRfRlJFRUNMS19FWElTVAlCSVQoMzApCj4gKwo+ICsj ZGVmaW5lIFJFR19HVVNCM1BJUEVDVEwwCTB4YzJjMAo+ICsjZGVmaW5lIFVTQjNfREVFTVBIQVNJ U19NQVNLCUdFTk1BU0soMiwgMSkKPiArI2RlZmluZSBVU0IzX0RFRU1QSEFTSVMwCUJJVCgxKQo+ ICsjZGVmaW5lIFVTQjNfVFhfTUFSR0lOMQkJQklUKDQpCj4gKwo+ICtzdHJ1Y3QgeGhjaV9oY2Rf aGlzdGIgewo+ICsJc3RydWN0IGRldmljZQkJKmRldjsKPiArCXN0cnVjdCB1c2JfaGNkCQkqaGNk Owo+ICsJdm9pZCBfX2lvbWVtCQkqY3RybDsKPiArCXN0cnVjdCBjbGsJCSpidXNfY2xrOwo+ICsJ c3RydWN0IGNsawkJKnV0bWlfY2xrOwo+ICsJc3RydWN0IGNsawkJKnBpcGVfY2xrOwo+ICsJc3Ry dWN0IGNsawkJKnN1c3BlbmRfY2xrOwo+ICsJc3RydWN0IHJlc2V0X2NvbnRyb2wJKnNvZnRfcmVz ZXQ7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB4aGNpX2hjZF9oaXN0YiAqaGNk X3RvX2hpc3RiKHN0cnVjdCB1c2JfaGNkICpoY2QpCj4gK3sKPiArCXJldHVybiBkZXZfZ2V0X2Ry dmRhdGEoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHhoY2lf aGlzdGJfY29uZmlnKHN0cnVjdCB4aGNpX2hjZF9oaXN0YiAqaGlzdGIpCj4gK3sKPiArCXN0cnVj dCBkZXZpY2Vfbm9kZSAqbnAgPSBoaXN0Yi0+ZGV2LT5vZl9ub2RlOwo+ICsJdTMyIHJlZ3ZhbDsK PiArCj4gKwlpZiAob2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKG5wLCAicGh5cy1uYW1lcyIsICJp bm5vIikgPj0gMCkgewo+ICsJCS8qIFVTQjIgUEhZIGNob3NlIHVscGkgOGJpdCBpbnRlcmZhY2Ug Ki8KPiArCQlyZWd2YWwgPSByZWFkbChoaXN0Yi0+Y3RybCArIFJFR19HVVNCMlBIWUNGRzApOwo+ ICsJCXJlZ3ZhbCAmPSB+QklUX1VUTUlfVUxQSTsKPiArCQlyZWd2YWwgJj0gfihCSVRfVVRNSV84 XzE2KTsKPiArCQlyZWd2YWwgJj0gfkJJVF9GUkVFQ0xLX0VYSVNUOwo+ICsJCXdyaXRlbChyZWd2 YWwsIGhpc3RiLT5jdHJsICsgUkVHX0dVU0IyUEhZQ0ZHMCk7Cj4gKwl9Cj4gKwo+ICsJaWYgKG9m X3Byb3BlcnR5X21hdGNoX3N0cmluZyhucCwgInBoeXMtbmFtZXMiLCAiY29tYm8iKSA+PSAwKSB7 Cj4gKwkJLyoKPiArCQkgKiB3cml0ZSAweDAxMGMwMDEyIHRvIEdVU0IzUElQRUNUTDAKPiArCQkg KiBHVVNCM1BJUEVDVEwwWzU6M10gPSAwMTAgOiBUeCBNYXJnaW4gPSA5MDBtViAsCj4gKwkJICog ZGVjcmVhc2UgVFggdm9sdGFnZQo+ICsJCSAqIEdVU0IzUElQRUNUTDBbMjoxXSA9IDAxIDogVHgg RGVlbXBoYXNpcyA9IC0zLjVkQiwKPiArCQkgKiByZWZlciB0byB4SENJIHNwZWMKPiArCQkgKi8K PiArCQlyZWd2YWwgPSByZWFkbChoaXN0Yi0+Y3RybCArIFJFR19HVVNCM1BJUEVDVEwwKTsKPiAr CQlyZWd2YWwgJj0gflVTQjNfREVFTVBIQVNJU19NQVNLOwo+ICsJCXJlZ3ZhbCB8PSBVU0IzX0RF RU1QSEFTSVMwOwo+ICsJCXJlZ3ZhbCB8PSBVU0IzX1RYX01BUkdJTjE7Cj4gKwkJd3JpdGVsKHJl Z3ZhbCwgaGlzdGItPmN0cmwgKyBSRUdfR1VTQjNQSVBFQ1RMMCk7Cj4gKwl9Cj4gKwo+ICsJd3Jp dGVsKDB4MjMxMDAwMDAsIGhpc3RiLT5jdHJsICsgR1RYVEhSQ0ZHKTsKPiArCXdyaXRlbCgweDIz MTAwMDAwLCBoaXN0Yi0+Y3RybCArIEdSWFRIUkNGRyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgeGhjaV9oaXN0Yl9jbGtzX2dldChzdHJ1Y3QgeGhjaV9oY2RfaGlz dGIgKmhpc3RiKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBoaXN0Yi0+ZGV2Owo+ICsK PiArCWhpc3RiLT5idXNfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImJ1cyIpOwo+ICsJaWYgKElT X0VSUihoaXN0Yi0+YnVzX2NsaykpIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWwgdG8gZ2V0IGJ1 cyBjbGtcbiIpOwo+ICsJCXJldHVybiBQVFJfRVJSKGhpc3RiLT5idXNfY2xrKTsKPiArCX0KPiAr Cj4gKwloaXN0Yi0+dXRtaV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAidXRtaSIpOwo+ICsJaWYg KElTX0VSUihoaXN0Yi0+dXRtaV9jbGspKSB7Cj4gKwkJZGV2X2VycihkZXYsICJmYWlsIHRvIGdl dCB1dG1pIGNsa1xuIik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoaGlzdGItPnV0bWlfY2xrKTsKPiAr CX0KPiArCj4gKwloaXN0Yi0+cGlwZV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGlwZSIpOwo+ ICsJaWYgKElTX0VSUihoaXN0Yi0+cGlwZV9jbGspKSB7Cj4gKwkJZGV2X2VycihkZXYsICJmYWls IHRvIGdldCBwaXBlIGNsa1xuIik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoaGlzdGItPnBpcGVfY2xr KTsKPiArCX0KPiArCj4gKwloaXN0Yi0+c3VzcGVuZF9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAi c3VzcGVuZCIpOwo+ICsJaWYgKElTX0VSUihoaXN0Yi0+c3VzcGVuZF9jbGspKSB7Cj4gKwkJZGV2 X2VycihkZXYsICJmYWlsIHRvIGdldCBzdXNwZW5kIGNsa1xuIik7Cj4gKwkJcmV0dXJuIFBUUl9F UlIoaGlzdGItPnN1c3BlbmRfY2xrKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsK PiArc3RhdGljIGludCB4aGNpX2hpc3RiX2hvc3RfZW5hYmxlKHN0cnVjdCB4aGNpX2hjZF9oaXN0 YiAqaGlzdGIpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5h YmxlKGhpc3RiLT5idXNfY2xrKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGhpc3RiLT5k ZXYsICJmYWlsZWQgdG8gZW5hYmxlIGJ1cyBjbGtcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9 Cj4gKwo+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhpc3RiLT51dG1pX2Nsayk7Cj4gKwlp ZiAocmV0KSB7Cj4gKwkJZGV2X2VycihoaXN0Yi0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSB1dG1p IGNsa1xuIik7Cj4gKwkJZ290byBlcnJfdXRtaV9jbGs7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gY2xr X3ByZXBhcmVfZW5hYmxlKGhpc3RiLT5waXBlX2Nsayk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2 X2VycihoaXN0Yi0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBwaXBlIGNsa1xuIik7Cj4gKwkJZ290 byBlcnJfcGlwZV9jbGs7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhp c3RiLT5zdXNwZW5kX2Nsayk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihoaXN0Yi0+ZGV2 LCAiZmFpbGVkIHRvIGVuYWJsZSBzdXNwZW5kIGNsa1xuIik7Cj4gKwkJZ290byBlcnJfc3VzcGVu ZF9jbGs7Cj4gKwl9Cj4gKwo+ICsJcmVzZXRfY29udHJvbF9kZWFzc2VydChoaXN0Yi0+c29mdF9y ZXNldCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfc3VzcGVuZF9jbGs6Cj4gKwljbGtf ZGlzYWJsZV91bnByZXBhcmUoaGlzdGItPnBpcGVfY2xrKTsKPiArZXJyX3BpcGVfY2xrOgo+ICsJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhpc3RiLT51dG1pX2Nsayk7Cj4gK2Vycl91dG1pX2NsazoK PiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShoaXN0Yi0+YnVzX2Nsayk7Cj4gKwo+ICsJcmV0dXJu IHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgeGhjaV9oaXN0Yl9ob3N0X2Rpc2FibGUoc3Ry dWN0IHhoY2lfaGNkX2hpc3RiICpoaXN0YikKPiArewo+ICsJcmVzZXRfY29udHJvbF9hc3NlcnQo aGlzdGItPnNvZnRfcmVzZXQpOwo+ICsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShoaXN0Yi0+ c3VzcGVuZF9jbGspOwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhpc3RiLT5waXBlX2Nsayk7 Cj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGlzdGItPnV0bWlfY2xrKTsKPiArCWNsa19kaXNh YmxlX3VucHJlcGFyZShoaXN0Yi0+YnVzX2Nsayk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHho Y2lfaGlzdGJfcXVpcmtzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHhoY2lfaGNkICp4aGNp KQo+ICt7Cj4gKwkvKgo+ICsJICogQXMgb2Ygbm93IHBsYXRmb3JtIGRyaXZlcnMgZG9uJ3QgcHJv dmlkZSBNU0kgc3VwcG9ydCBzbyB3ZSBlbnN1cmUKPiArCSAqIGhlcmUgdGhhdCB0aGUgZ2VuZXJp YyBjb2RlIGRvZXMgbm90IHRyeSB0byBtYWtlIGEgcGNpX2RldiBmcm9tIG91cgo+ICsJICogZGV2 IHN0cnVjdCBpbiBvcmRlciB0byBzZXR1cCBNU0kKPiArCSAqLwo+ICsJeGhjaS0+cXVpcmtzIHw9 IFhIQ0lfUExBVDsKPiArfQo+ICsKPiArLyogY2FsbGVkIGR1cmluZyBwcm9iZSgpIGFmdGVyIGNo aXAgcmVzZXQgY29tcGxldGVzICovCj4gK3N0YXRpYyBpbnQgeGhjaV9oaXN0Yl9zZXR1cChzdHJ1 Y3QgdXNiX2hjZCAqaGNkKQo+ICt7Cj4gKwlzdHJ1Y3QgeGhjaV9oY2RfaGlzdGIgKmhpc3RiID0g aGNkX3RvX2hpc3RiKGhjZCk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmICh1c2JfaGNkX2lzX3By aW1hcnlfaGNkKGhjZCkpIHsKPiArCQlyZXQgPSB4aGNpX2hpc3RiX2NvbmZpZyhoaXN0Yik7Cj4g KwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSB4aGNpX2dl bl9zZXR1cChoY2QsIHhoY2lfaGlzdGJfcXVpcmtzKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJu IHJldDsKbm8gbmVlZCB0ZXN0IEByZXQgaGVyZQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeGhjaV9kcml2ZXJfb3ZlcnJpZGVzIHhoY2lfaGlzdGJf b3ZlcnJpZGVzIF9faW5pdGNvbnN0ID0gewo+ICsJLnJlc2V0ID0geGhjaV9oaXN0Yl9zZXR1cCwK PiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaGNfZHJpdmVyIF9fcmVhZF9tb3N0bHkgeGhjaV9o aXN0Yl9oY19kcml2ZXI7Cj4gK3N0YXRpYyBpbnQgeGhjaV9oaXN0Yl9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ ZGV2Owo+ICsJc3RydWN0IHhoY2lfaGNkX2hpc3RiICpoaXN0YjsKPiArCWNvbnN0IHN0cnVjdCBo Y19kcml2ZXIgKmRyaXZlcjsKPiArCXN0cnVjdCB1c2JfaGNkICpoY2Q7Cj4gKwlzdHJ1Y3QgeGhj aV9oY2QgKnhoY2k7Cj4gKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiArCWludCBpcnE7Cj4gKwlp bnQgcmV0ID0gLUVOT0RFVjsKPiArCj4gKwlpZiAodXNiX2Rpc2FibGVkKCkpCj4gKwkJcmV0dXJu IC1FTk9ERVY7Cj4gKwo+ICsJZHJpdmVyID0gJnhoY2lfaGlzdGJfaGNfZHJpdmVyOwo+ICsJaGlz dGIgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmhpc3RiKSwgR0ZQX0tFUk5FTCk7Cj4gKwlp ZiAoIWhpc3RiKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWhpc3RiLT5kZXYgPSBkZXY7 Cj4gKwo+ICsJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKPiArCWlmIChpcnEgPCAw KQo+ICsJCXJldHVybiBpcnE7Cj4gKwo+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBk ZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPiArCWhpc3RiLT5jdHJsID0gZGV2bV9pb3JlbWFwX3Jl c291cmNlKCZwZGV2LT5kZXYsIHJlcyk7Cj4gKwlpZiAoSVNfRVJSKGhpc3RiLT5jdHJsKSkKPiAr CQlyZXR1cm4gUFRSX0VSUihoaXN0Yi0+Y3RybCk7Cj4gKwo+ICsJcmV0ID0geGhjaV9oaXN0Yl9j bGtzX2dldChoaXN0Yik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJaGlz dGItPnNvZnRfcmVzZXQgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KGRldiwgInNvZnQiKTsKPiAr CWlmIChJU19FUlIoaGlzdGItPnNvZnRfcmVzZXQpKSB7Cj4gKwkJZGV2X2VycihkZXYsICJmYWls ZWQgdG8gZ2V0IHNvZnQgcmVzZXRcbiIpOwo+ICsJCXJldHVybiBQVFJfRVJSKGhpc3RiLT5zb2Z0 X3Jlc2V0KTsKPiArCX0KPiArCj4gKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOwo+ICsJcG1fcnVu dGltZV9nZXRfc3luYyhkZXYpOwo+ICsJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5kKGRldik7 Cj4gKwo+ICsJLyogSW5pdGlhbGl6ZSBkbWFfbWFzayBhbmQgY29oZXJlbnRfZG1hX21hc2sgdG8g MzItYml0cyAqLwo+ICsJcmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXYsIERNQV9C SVRfTUFTSygzMikpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWhjZCA9 IHVzYl9jcmVhdGVfaGNkKGRyaXZlciwgZGV2LCBkZXZfbmFtZShkZXYpKTsKPiArCWlmICghaGNk KSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGRpc2FibGVfcG07Cj4gKwl9Cj4gKwo+ ICsJaGNkLT5yZWdzID0gaGlzdGItPmN0cmw7Cj4gKwloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0 YXJ0Owo+ICsJaGNkLT5yc3JjX2xlbiA9IHJlc291cmNlX3NpemUocmVzKTsKPiArCj4gKwloaXN0 Yi0+aGNkID0gaGNkOwo+ICsJZGV2X3NldF9kcnZkYXRhKGhjZC0+c2VsZi5jb250cm9sbGVyLCBo aXN0Yik7Cj4gKwo+ICsJcmV0ID0geGhjaV9oaXN0Yl9ob3N0X2VuYWJsZShoaXN0Yik7Cj4gKwlp ZiAocmV0KQo+ICsJCWdvdG8gcHV0X2hjZDsKPiArCj4gKwl4aGNpID0gaGNkX3RvX3hoY2koaGNk KTsKPiArCj4gKwlkZXZpY2Vfd2FrZXVwX2VuYWJsZShoY2QtPnNlbGYuY29udHJvbGxlcik7Cj4g Kwo+ICsJeGhjaS0+bWFpbl9oY2QgPSBoY2Q7Cj4gKwl4aGNpLT5zaGFyZWRfaGNkID0gdXNiX2Ny ZWF0ZV9zaGFyZWRfaGNkKGRyaXZlciwgZGV2LCBkZXZfbmFtZShkZXYpLAo+ICsJCQkJCQkgaGNk KTsKPiArCWlmICgheGhjaS0+c2hhcmVkX2hjZCkgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJ Z290byBkaXNhYmxlX2hvc3Q7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCBp cnEsIElSUUZfU0hBUkVEKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBwdXRfdXNiM19oY2Q7Cj4g Kwo+ICsJaWYgKEhDQ19NQVhfUFNBKHhoY2ktPmhjY19wYXJhbXMpID49IDQpCj4gKwkJeGhjaS0+ c2hhcmVkX2hjZC0+Y2FuX2RvX3N0cmVhbXMgPSAxOwo+ICsKPiArCXJldCA9IHVzYl9hZGRfaGNk KHhoY2ktPnNoYXJlZF9oY2QsIGlycSwgSVJRRl9TSEFSRUQpOwo+ICsJaWYgKHJldCkKPiArCQln b3RvIGRlYWxsb2NfdXNiMl9oY2Q7Cj4gKwo+ICsJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNwZW5k KGRldik7Cj4gKwlwbV9ydW50aW1lX3B1dF9ub2lkbGUoZGV2KTsKPiArCj4gKwkvKgo+ICsJICog UHJldmVudCBydW50aW1lIHBtIGZyb20gYmVpbmcgb24gYXMgZGVmYXVsdCwgdXNlcnMgc2hvdWxk IGVuYWJsZQo+ICsJICogcnVudGltZSBwbSB1c2luZyBwb3dlci9jb250cm9sIGluIHN5c2ZzLgo+ ICsJICovCj4gKwlwbV9ydW50aW1lX2ZvcmJpZChkZXYpOwo+ICsKQXJlIHlvdSBzdXJlIG1ha2Ug dXNlIG9mIHRoZSBkZWZhdWx0IHZhbHVlIHhoY2ktPmltb2RfaW50ZXJ2YWwgPT0gMCA/Cgo+ICsJ cmV0dXJuIDA7Cj4gKwo+ICtkZWFsbG9jX3VzYjJfaGNkOgo+ICsJdXNiX3JlbW92ZV9oY2QoaGNk KTsKPiArcHV0X3VzYjNfaGNkOgo+ICsJdXNiX3B1dF9oY2QoeGhjaS0+c2hhcmVkX2hjZCk7Cj4g K2Rpc2FibGVfaG9zdDoKPiArCXhoY2lfaGlzdGJfaG9zdF9kaXNhYmxlKGhpc3RiKTsKPiArcHV0 X2hjZDoKPiArCXVzYl9wdXRfaGNkKGhjZCk7Cj4gK2Rpc2FibGVfcG06Cj4gKwlwbV9ydW50aW1l X3B1dF9zeW5jKGRldik7Cj4gKwlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKPiArCj4gKwlyZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHhoY2lfaGlzdGJfcmVtb3ZlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IHhoY2lfaGNkX2hpc3RiICpoaXN0 YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7Cj4gKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0g aGlzdGItPmhjZDsKPiArCXN0cnVjdCB4aGNpX2hjZAkqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7 Cj4gKwo+ICsJeGhjaS0+eGhjX3N0YXRlIHw9IFhIQ0lfU1RBVEVfUkVNT1ZJTkc7Cj4gKwo+ICsJ dXNiX3JlbW92ZV9oY2QoeGhjaS0+c2hhcmVkX2hjZCk7Cj4gKwlkZXZpY2Vfd2FrZXVwX2Rpc2Fi bGUoJmRldi0+ZGV2KTsKPiArCj4gKwl1c2JfcmVtb3ZlX2hjZChoY2QpOwo+ICsJdXNiX3B1dF9o Y2QoeGhjaS0+c2hhcmVkX2hjZCk7Cj4gKwo+ICsJeGhjaV9oaXN0Yl9ob3N0X2Rpc2FibGUoaGlz dGIpOwo+ICsJdXNiX3B1dF9oY2QoaGNkKTsKPiArCXBtX3J1bnRpbWVfcHV0X3N5bmMoJmRldi0+ ZGV2KTsKPiArCXBtX3J1bnRpbWVfZGlzYWJsZSgmZGV2LT5kZXYpOwo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHhoY2lfaGlzdGJfc3VzcGVu ZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCB4aGNpX2hjZF9oaXN0YiAqaGlz dGIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBoaXN0 Yi0+aGNkOwo+ICsJc3RydWN0IHhoY2lfaGNkCSp4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKPiAr CWludCByZXQ7Cj4gKwo+ICsJcmV0ID0geGhjaV9zdXNwZW5kKHhoY2ksIGRldmljZV9tYXlfd2Fr ZXVwKGRldikpOwo+ICsKPiArCWlmICghZGV2aWNlX21heV93YWtldXAoZGV2KSkKPiArCQl4aGNp X2hpc3RiX2hvc3RfZGlzYWJsZShoaXN0Yik7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsK PiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCB4aGNpX2hpc3RiX3Jlc3VtZShzdHJ1Y3QgZGV2 aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCB4aGNpX2hjZF9oaXN0YiAqaGlzdGIgPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsKPiArCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBoaXN0Yi0+aGNkOwo+ICsJ c3RydWN0IHhoY2lfaGNkICp4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKPiArCj4gKwlpZiAoIWRl dmljZV9tYXlfd2FrZXVwKGRldikpCj4gKwkJeGhjaV9oaXN0Yl9ob3N0X2VuYWJsZShoaXN0Yik7 Cj4gKwo+ICsJcmV0dXJuIHhoY2lfcmVzdW1lKHhoY2ksIDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGRldl9wbV9vcHMgeGhjaV9oaXN0Yl9wbV9vcHMgPSB7Cj4gKwlTRVRfU1lT VEVNX1NMRUVQX1BNX09QUyh4aGNpX2hpc3RiX3N1c3BlbmQsIHhoY2lfaGlzdGJfcmVzdW1lKQo+ ICt9Owo+ICsjZGVmaW5lIERFVl9QTV9PUFMgKElTX0VOQUJMRUQoQ09ORklHX1BNKSA/ICZ4aGNp X2hpc3RiX3BtX29wcyA6IE5VTEwpCj4gKwo+ICsjaWZkZWYgQ09ORklHX09GCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGhpc3RiX3hoY2lfb2ZfbWF0Y2hbXSA9IHsKPiArCXsg LmNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpMzc5OGN2MjAwLXhoY2kifSwKPiArCXsgfSwKPiAr fTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaGlzdGJfeGhjaV9vZl9tYXRjaCk7Cj4gKyNl bmRpZgo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaGlzdGJfeGhjaV9kcml2 ZXIgPSB7Cj4gKwkucHJvYmUJPSB4aGNpX2hpc3RiX3Byb2JlLAo+ICsJLnJlbW92ZQk9IHhoY2lf aGlzdGJfcmVtb3ZlLAo+ICsJLmRyaXZlcgk9IHsKPiArCQkubmFtZSA9ICJ4aGNpLWhpc3RiIiwK PiArCQkucG0gPSBERVZfUE1fT1BTLAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0 cihoaXN0Yl94aGNpX29mX21hdGNoKSwKPiArCX0sCj4gK307Cj4gK01PRFVMRV9BTElBUygicGxh dGZvcm06eGhjaS1oaXN0YiIpOwo+ICsKPiArc3RhdGljIGludCBfX2luaXQgeGhjaV9oaXN0Yl9p bml0KHZvaWQpCj4gK3sKPiArCXhoY2lfaW5pdF9kcml2ZXIoJnhoY2lfaGlzdGJfaGNfZHJpdmVy LCAmeGhjaV9oaXN0Yl9vdmVycmlkZXMpOwo+ICsJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdp c3RlcigmaGlzdGJfeGhjaV9kcml2ZXIpOwo+ICt9Cj4gK21vZHVsZV9pbml0KHhoY2lfaGlzdGJf aW5pdCk7Cj4gKwo+ICtzdGF0aWMgdm9pZCBfX2V4aXQgeGhjaV9oaXN0Yl9leGl0KHZvaWQpCj4g K3sKPiArCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZoaXN0Yl94aGNpX2RyaXZlcik7Cj4g K30KPiArbW9kdWxlX2V4aXQoeGhjaV9oaXN0Yl9leGl0KTsKPiArCj4gK01PRFVMRV9ERVNDUklQ VElPTigiSGlTaWxpY29uIFNUQiB4SENJIEhvc3QgQ29udHJvbGxlciBEcml2ZXIiKTsKPiArTU9E VUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotLS0KVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6 IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LXVzYiIgaW4KdGhlIGJvZHkgb2YgYSBt ZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcKTW9yZSBtYWpvcmRvbW8gaW5mbyBh dCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sCg==