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: [03/18] xhci: hisilicon: support HiSilicon STB xHCI host controller From: Mathias Nyman Message-Id: <1526910006-26104-4-git-send-email-mathias.nyman@linux.intel.com> Date: Mon, 21 May 2018 16:39:51 +0300 To: gregkh@linuxfoundation.org Cc: linux-usb@vger.kernel.org, Jianguo Sun , Mathias Nyman List-ID: RnJvbTogSmlhbmd1byBTdW4gPHN1bmppYW5ndW8xQGh1YXdlaS5jb20+CgpUaGlzIGNvbW1pdCBh ZGRzIHN1cHBvcnQgZm9yIEhpU2lsaWNvbiBTVEIgeEhDSSBob3N0IGNvbnRyb2xsZXIuClRoZXJl IGFyZSB0d28geEhDSSBob3N0IGNvbnRyb2xsZXJzIG9uIEhpU2lsaWNvbiBTVEIgU29Dcy4gRWFj aApvbmUgcmVxdWlyZXMgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGJlZm9yZSBleHBvc2luZyBp bnRlcmZhY2UKY29tcGxpYW50IHdpdGggeEhDSS4KClJldmlld2VkLWJ5OiBDaHVuZmVuZyBZdW4g PGNodW5mZW5nLnl1bkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IEppYW5ndW8gU3VuIDxz dW5qaWFuZ3VvMUBodWF3ZWkuY29tPgpTaWduZWQtb2ZmLWJ5OiBNYXRoaWFzIE55bWFuIDxtYXRo aWFzLm55bWFuQGxpbnV4LmludGVsLmNvbT4KLS0tCiBkcml2ZXJzL3VzYi9ob3N0L0tjb25maWcg ICAgICB8ICAgNyArCiBkcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlICAgICB8ICAgMSArCiBkcml2 ZXJzL3VzYi9ob3N0L3hoY2ktaGlzdGIuYyB8IDQxMCArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNDE4IGluc2VydGlvbnMoKykKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGlzdGIuYwoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwpp bmRleCA1ZDk1OGRhLi5jODEzZmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25m aWcKKysrIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCkBAIC01Miw2ICs1MiwxMyBAQCBjb25m aWcgVVNCX1hIQ0lfUExBVEZPUk0KIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIFVT Ql9YSENJX0hJU1RCCisJdHJpc3RhdGUgInhIQ0kgc3VwcG9ydCBmb3IgSGlTaWxpY29uIFNUQiBT b0NzIgorCWRlcGVuZHMgb24gVVNCX1hIQ0lfUExBVEZPUk0gJiYgKEFSQ0hfSElTSSB8fCBDT01Q SUxFX1RFU1QpCisJaGVscAorCSAgU2F5ICdZJyB0byBlbmFibGUgdGhlIHN1cHBvcnQgZm9yIHRo ZSB4SENJIGhvc3QgY29udHJvbGxlcgorCSAgZm91bmQgaW4gSGlTaWxpY29uIFNUQiBTb0NzLgor CiBjb25maWcgVVNCX1hIQ0lfTVRLCiAJdHJpc3RhdGUgInhIQ0kgc3VwcG9ydCBmb3IgTWVkaWFU ZWsgU29DcyIKIAlzZWxlY3QgTUZEX1NZU0NPTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9z dC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKaW5kZXggOGE4Y2ZmZS4uOWI2 NjljOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJz L3VzYi9ob3N0L01ha2VmaWxlCkBAIC03NCw2ICs3NCw3IEBAIG9iai0kKENPTkZJR19VU0JfRkhD SV9IQ0QpCSs9IGZoY2kubwogb2JqLSQoQ09ORklHX1VTQl9YSENJX0hDRCkJKz0geGhjaS1oY2Qu bwogb2JqLSQoQ09ORklHX1VTQl9YSENJX1BDSSkJKz0geGhjaS1wY2kubwogb2JqLSQoQ09ORklH X1VTQl9YSENJX1BMQVRGT1JNKSArPSB4aGNpLXBsYXQtaGNkLm8KK29iai0kKENPTkZJR19VU0Jf WEhDSV9ISVNUQikJKz0geGhjaS1oaXN0Yi5vCiBvYmotJChDT05GSUdfVVNCX1hIQ0lfTVRLKQkr PSB4aGNpLW10ay5vCiBvYmotJChDT05GSUdfVVNCX1hIQ0lfVEVHUkEpCSs9IHhoY2ktdGVncmEu bwogb2JqLSQoQ09ORklHX1VTQl9TTDgxMV9IQ0QpCSs9IHNsODExLWhjZC5vCmRpZmYgLS1naXQg YS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGlzdGIuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1o aXN0Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZjAwMTYKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGlzdGIuYwpAQCAtMCwwICsxLDQx MCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiB4SENJIGhv c3QgY29udHJvbGxlciBkcml2ZXIgZm9yIEhpU2lsaWNvbiBTVEIgU29DcworICoKKyAqIENvcHly aWdodCAoQykgMjAxNy0yMDE4IEhpU2lsaWNvbiBDby4sIEx0ZC4gaHR0cDovL3d3dy5oaXNpbGlj b24uY29tCisgKgorICogQXV0aG9yczogSmlhbmd1byBTdW4gPHN1bmppYW5ndW8xQGh1YXdlaS5j b20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1t YXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgv cmVzZXQuaD4KKworI2luY2x1ZGUgInhoY2kuaCIKKworI2RlZmluZSBHVFhUSFJDRkcJCTB4YzEw OAorI2RlZmluZSBHUlhUSFJDRkcJCTB4YzEwYworI2RlZmluZSBSRUdfR1VTQjJQSFlDRkcwCTB4 YzIwMAorI2RlZmluZSBCSVRfVVRNSV84XzE2CQlCSVQoMykKKyNkZWZpbmUgQklUX1VUTUlfVUxQ SQkJQklUKDQpCisjZGVmaW5lIEJJVF9GUkVFQ0xLX0VYSVNUCUJJVCgzMCkKKworI2RlZmluZSBS RUdfR1VTQjNQSVBFQ1RMMAkweGMyYzAKKyNkZWZpbmUgVVNCM19ERUVNUEhBU0lTX01BU0sJR0VO TUFTSygyLCAxKQorI2RlZmluZSBVU0IzX0RFRU1QSEFTSVMwCUJJVCgxKQorI2RlZmluZSBVU0Iz X1RYX01BUkdJTjEJCUJJVCg0KQorCitzdHJ1Y3QgeGhjaV9oY2RfaGlzdGIgeworCXN0cnVjdCBk ZXZpY2UJCSpkZXY7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJdm9pZCBfX2lvbWVtCQkqY3Ry bDsKKwlzdHJ1Y3QgY2xrCQkqYnVzX2NsazsKKwlzdHJ1Y3QgY2xrCQkqdXRtaV9jbGs7CisJc3Ry dWN0IGNsawkJKnBpcGVfY2xrOworCXN0cnVjdCBjbGsJCSpzdXNwZW5kX2NsazsKKwlzdHJ1Y3Qg cmVzZXRfY29udHJvbAkqc29mdF9yZXNldDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHho Y2lfaGNkX2hpc3RiICpoY2RfdG9faGlzdGIoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlyZXR1 cm4gZGV2X2dldF9kcnZkYXRhKGhjZC0+c2VsZi5jb250cm9sbGVyKTsKK30KKworc3RhdGljIGlu dCB4aGNpX2hpc3RiX2NvbmZpZyhzdHJ1Y3QgeGhjaV9oY2RfaGlzdGIgKmhpc3RiKQoreworCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBoaXN0Yi0+ZGV2LT5vZl9ub2RlOworCXUzMiByZWd2YWw7 CisKKwlpZiAob2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKG5wLCAicGh5cy1uYW1lcyIsICJpbm5v IikgPj0gMCkgeworCQkvKiBVU0IyIFBIWSBjaG9zZSB1bHBpIDhiaXQgaW50ZXJmYWNlICovCisJ CXJlZ3ZhbCA9IHJlYWRsKGhpc3RiLT5jdHJsICsgUkVHX0dVU0IyUEhZQ0ZHMCk7CisJCXJlZ3Zh bCAmPSB+QklUX1VUTUlfVUxQSTsKKwkJcmVndmFsICY9IH4oQklUX1VUTUlfOF8xNik7CisJCXJl Z3ZhbCAmPSB+QklUX0ZSRUVDTEtfRVhJU1Q7CisJCXdyaXRlbChyZWd2YWwsIGhpc3RiLT5jdHJs ICsgUkVHX0dVU0IyUEhZQ0ZHMCk7CisJfQorCisJaWYgKG9mX3Byb3BlcnR5X21hdGNoX3N0cmlu ZyhucCwgInBoeXMtbmFtZXMiLCAiY29tYm8iKSA+PSAwKSB7CisJCS8qCisJCSAqIHdyaXRlIDB4 MDEwYzAwMTIgdG8gR1VTQjNQSVBFQ1RMMAorCQkgKiBHVVNCM1BJUEVDVEwwWzU6M10gPSAwMTAg OiBUeCBNYXJnaW4gPSA5MDBtViAsCisJCSAqIGRlY3JlYXNlIFRYIHZvbHRhZ2UKKwkJICogR1VT QjNQSVBFQ1RMMFsyOjFdID0gMDEgOiBUeCBEZWVtcGhhc2lzID0gLTMuNWRCLAorCQkgKiByZWZl ciB0byB4SENJIHNwZWMKKwkJICovCisJCXJlZ3ZhbCA9IHJlYWRsKGhpc3RiLT5jdHJsICsgUkVH X0dVU0IzUElQRUNUTDApOworCQlyZWd2YWwgJj0gflVTQjNfREVFTVBIQVNJU19NQVNLOworCQly ZWd2YWwgfD0gVVNCM19ERUVNUEhBU0lTMDsKKwkJcmVndmFsIHw9IFVTQjNfVFhfTUFSR0lOMTsK KwkJd3JpdGVsKHJlZ3ZhbCwgaGlzdGItPmN0cmwgKyBSRUdfR1VTQjNQSVBFQ1RMMCk7CisJfQor CisJd3JpdGVsKDB4MjMxMDAwMDAsIGhpc3RiLT5jdHJsICsgR1RYVEhSQ0ZHKTsKKwl3cml0ZWwo MHgyMzEwMDAwMCwgaGlzdGItPmN0cmwgKyBHUlhUSFJDRkcpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgeGhjaV9oaXN0Yl9jbGtzX2dldChzdHJ1Y3QgeGhjaV9oY2RfaGlzdGIgKmhp c3RiKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGhpc3RiLT5kZXY7CisKKwloaXN0Yi0+YnVz X2NsayA9IGRldm1fY2xrX2dldChkZXYsICJidXMiKTsKKwlpZiAoSVNfRVJSKGhpc3RiLT5idXNf Y2xrKSkgeworCQlkZXZfZXJyKGRldiwgImZhaWwgdG8gZ2V0IGJ1cyBjbGtcbiIpOworCQlyZXR1 cm4gUFRSX0VSUihoaXN0Yi0+YnVzX2Nsayk7CisJfQorCisJaGlzdGItPnV0bWlfY2xrID0gZGV2 bV9jbGtfZ2V0KGRldiwgInV0bWkiKTsKKwlpZiAoSVNfRVJSKGhpc3RiLT51dG1pX2NsaykpIHsK KwkJZGV2X2VycihkZXYsICJmYWlsIHRvIGdldCB1dG1pIGNsa1xuIik7CisJCXJldHVybiBQVFJf RVJSKGhpc3RiLT51dG1pX2Nsayk7CisJfQorCisJaGlzdGItPnBpcGVfY2xrID0gZGV2bV9jbGtf Z2V0KGRldiwgInBpcGUiKTsKKwlpZiAoSVNfRVJSKGhpc3RiLT5waXBlX2NsaykpIHsKKwkJZGV2 X2VycihkZXYsICJmYWlsIHRvIGdldCBwaXBlIGNsa1xuIik7CisJCXJldHVybiBQVFJfRVJSKGhp c3RiLT5waXBlX2Nsayk7CisJfQorCisJaGlzdGItPnN1c3BlbmRfY2xrID0gZGV2bV9jbGtfZ2V0 KGRldiwgInN1c3BlbmQiKTsKKwlpZiAoSVNfRVJSKGhpc3RiLT5zdXNwZW5kX2NsaykpIHsKKwkJ ZGV2X2VycihkZXYsICJmYWlsIHRvIGdldCBzdXNwZW5kIGNsa1xuIik7CisJCXJldHVybiBQVFJf RVJSKGhpc3RiLT5zdXNwZW5kX2Nsayk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgeGhjaV9oaXN0Yl9ob3N0X2VuYWJsZShzdHJ1Y3QgeGhjaV9oY2RfaGlzdGIgKmhpc3RiKQor eworCWludCByZXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaGlzdGItPmJ1c19jbGsp OworCWlmIChyZXQpIHsKKwkJZGV2X2VycihoaXN0Yi0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBi dXMgY2xrXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFi bGUoaGlzdGItPnV0bWlfY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGlzdGItPmRldiwg ImZhaWxlZCB0byBlbmFibGUgdXRtaSBjbGtcbiIpOworCQlnb3RvIGVycl91dG1pX2NsazsKKwl9 CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaGlzdGItPnBpcGVfY2xrKTsKKwlpZiAocmV0 KSB7CisJCWRldl9lcnIoaGlzdGItPmRldiwgImZhaWxlZCB0byBlbmFibGUgcGlwZSBjbGtcbiIp OworCQlnb3RvIGVycl9waXBlX2NsazsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUo aGlzdGItPnN1c3BlbmRfY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGlzdGItPmRldiwg ImZhaWxlZCB0byBlbmFibGUgc3VzcGVuZCBjbGtcbiIpOworCQlnb3RvIGVycl9zdXNwZW5kX2Ns azsKKwl9CisKKwlyZXNldF9jb250cm9sX2RlYXNzZXJ0KGhpc3RiLT5zb2Z0X3Jlc2V0KTsKKwor CXJldHVybiAwOworCitlcnJfc3VzcGVuZF9jbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhp c3RiLT5waXBlX2Nsayk7CitlcnJfcGlwZV9jbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhp c3RiLT51dG1pX2Nsayk7CitlcnJfdXRtaV9jbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhp c3RiLT5idXNfY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHhoY2lfaGlz dGJfaG9zdF9kaXNhYmxlKHN0cnVjdCB4aGNpX2hjZF9oaXN0YiAqaGlzdGIpCit7CisJcmVzZXRf Y29udHJvbF9hc3NlcnQoaGlzdGItPnNvZnRfcmVzZXQpOworCisJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGhpc3RiLT5zdXNwZW5kX2Nsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhpc3RiLT5w aXBlX2Nsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhpc3RiLT51dG1pX2Nsayk7CisJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKGhpc3RiLT5idXNfY2xrKTsKK30KKworc3RhdGljIHZvaWQgeGhj aV9oaXN0Yl9xdWlya3Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kp Cit7CisJLyoKKwkgKiBBcyBvZiBub3cgcGxhdGZvcm0gZHJpdmVycyBkb24ndCBwcm92aWRlIE1T SSBzdXBwb3J0IHNvIHdlIGVuc3VyZQorCSAqIGhlcmUgdGhhdCB0aGUgZ2VuZXJpYyBjb2RlIGRv ZXMgbm90IHRyeSB0byBtYWtlIGEgcGNpX2RldiBmcm9tIG91cgorCSAqIGRldiBzdHJ1Y3QgaW4g b3JkZXIgdG8gc2V0dXAgTVNJCisJICovCisJeGhjaS0+cXVpcmtzIHw9IFhIQ0lfUExBVDsKK30K KworLyogY2FsbGVkIGR1cmluZyBwcm9iZSgpIGFmdGVyIGNoaXAgcmVzZXQgY29tcGxldGVzICov CitzdGF0aWMgaW50IHhoY2lfaGlzdGJfc2V0dXAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlz dHJ1Y3QgeGhjaV9oY2RfaGlzdGIgKmhpc3RiID0gaGNkX3RvX2hpc3RiKGhjZCk7CisJaW50IHJl dDsKKworCWlmICh1c2JfaGNkX2lzX3ByaW1hcnlfaGNkKGhjZCkpIHsKKwkJcmV0ID0geGhjaV9o aXN0Yl9jb25maWcoaGlzdGIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwly ZXR1cm4geGhjaV9nZW5fc2V0dXAoaGNkLCB4aGNpX2hpc3RiX3F1aXJrcyk7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgeGhjaV9kcml2ZXJfb3ZlcnJpZGVzIHhoY2lfaGlzdGJfb3ZlcnJpZGVz IF9faW5pdGNvbnN0ID0geworCS5yZXNldCA9IHhoY2lfaGlzdGJfc2V0dXAsCit9OworCitzdGF0 aWMgc3RydWN0IGhjX2RyaXZlciBfX3JlYWRfbW9zdGx5IHhoY2lfaGlzdGJfaGNfZHJpdmVyOwor c3RhdGljIGludCB4aGNpX2hpc3RiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgeGhjaV9oY2Rf aGlzdGIgKmhpc3RiOworCWNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlcjsKKwlzdHJ1Y3Qg dXNiX2hjZCAqaGNkOworCXN0cnVjdCB4aGNpX2hjZCAqeGhjaTsKKwlzdHJ1Y3QgcmVzb3VyY2Ug KnJlczsKKwlpbnQgaXJxOworCWludCByZXQgPSAtRU5PREVWOworCisJaWYgKHVzYl9kaXNhYmxl ZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRyaXZlciA9ICZ4aGNpX2hpc3RiX2hjX2RyaXZl cjsKKwloaXN0YiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaGlzdGIpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIWhpc3RiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhpc3RiLT5kZXYgPSBkZXY7 CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKQorCQly ZXR1cm4gaXJxOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VS Q0VfTUVNLCAwKTsKKwloaXN0Yi0+Y3RybCA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ ZGV2LCByZXMpOworCWlmIChJU19FUlIoaGlzdGItPmN0cmwpKQorCQlyZXR1cm4gUFRSX0VSUiho aXN0Yi0+Y3RybCk7CisKKwlyZXQgPSB4aGNpX2hpc3RiX2Nsa3NfZ2V0KGhpc3RiKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJaGlzdGItPnNvZnRfcmVzZXQgPSBkZXZtX3Jlc2V0X2Nv bnRyb2xfZ2V0KGRldiwgInNvZnQiKTsKKwlpZiAoSVNfRVJSKGhpc3RiLT5zb2Z0X3Jlc2V0KSkg eworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgc29mdCByZXNldFxuIik7CisJCXJldHVy biBQVFJfRVJSKGhpc3RiLT5zb2Z0X3Jlc2V0KTsKKwl9CisKKwlwbV9ydW50aW1lX2VuYWJsZShk ZXYpOworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsKKwlkZXZpY2VfZW5hYmxlX2FzeW5jX3N1 c3BlbmQoZGV2KTsKKworCS8qIEluaXRpYWxpemUgZG1hX21hc2sgYW5kIGNvaGVyZW50X2RtYV9t YXNrIHRvIDMyLWJpdHMgKi8KKwlyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGRldiwg RE1BX0JJVF9NQVNLKDMyKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWhjZCA9IHVz Yl9jcmVhdGVfaGNkKGRyaXZlciwgZGV2LCBkZXZfbmFtZShkZXYpKTsKKwlpZiAoIWhjZCkgewor CQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGRpc2FibGVfcG07CisJfQorCisJaGNkLT5yZWdzID0g aGlzdGItPmN0cmw7CisJaGNkLT5yc3JjX3N0YXJ0ID0gcmVzLT5zdGFydDsKKwloY2QtPnJzcmNf bGVuID0gcmVzb3VyY2Vfc2l6ZShyZXMpOworCisJaGlzdGItPmhjZCA9IGhjZDsKKwlkZXZfc2V0 X2RydmRhdGEoaGNkLT5zZWxmLmNvbnRyb2xsZXIsIGhpc3RiKTsKKworCXJldCA9IHhoY2lfaGlz dGJfaG9zdF9lbmFibGUoaGlzdGIpOworCWlmIChyZXQpCisJCWdvdG8gcHV0X2hjZDsKKworCXho Y2kgPSBoY2RfdG9feGhjaShoY2QpOworCisJZGV2aWNlX3dha2V1cF9lbmFibGUoaGNkLT5zZWxm LmNvbnRyb2xsZXIpOworCisJeGhjaS0+bWFpbl9oY2QgPSBoY2Q7CisJeGhjaS0+c2hhcmVkX2hj ZCA9IHVzYl9jcmVhdGVfc2hhcmVkX2hjZChkcml2ZXIsIGRldiwgZGV2X25hbWUoZGV2KSwKKwkJ CQkJCSBoY2QpOworCWlmICgheGhjaS0+c2hhcmVkX2hjZCkgeworCQlyZXQgPSAtRU5PTUVNOwor CQlnb3RvIGRpc2FibGVfaG9zdDsKKwl9CisKKwlpZiAoZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9v bChkZXYsICJ1c2IyLWxwbS1kaXNhYmxlIikpCisJCXhoY2ktPnF1aXJrcyB8PSBYSENJX0hXX0xQ TV9ESVNBQkxFOworCisJaWYgKGRldmljZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LCAidXNiMy1s cG0tY2FwYWJsZSIpKQorCQl4aGNpLT5xdWlya3MgfD0gWEhDSV9MUE1fU1VQUE9SVDsKKworCS8q IGltb2RfaW50ZXJ2YWwgaXMgdGhlIGludGVycnVwdCBtb2RlcmF0aW9uIHZhbHVlIGluIG5hbm9z ZWNvbmRzLiAqLworCXhoY2ktPmltb2RfaW50ZXJ2YWwgPSA0MDAwMDsKKwlkZXZpY2VfcHJvcGVy dHlfcmVhZF91MzIoZGV2LCAiaW1vZC1pbnRlcnZhbC1ucyIsCisJCQkJICZ4aGNpLT5pbW9kX2lu dGVydmFsKTsKKworCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX1NIQVJFRCk7CisJ aWYgKHJldCkKKwkJZ290byBwdXRfdXNiM19oY2Q7CisKKwlpZiAoSENDX01BWF9QU0EoeGhjaS0+ aGNjX3BhcmFtcykgPj0gNCkKKwkJeGhjaS0+c2hhcmVkX2hjZC0+Y2FuX2RvX3N0cmVhbXMgPSAx OworCisJcmV0ID0gdXNiX2FkZF9oY2QoeGhjaS0+c2hhcmVkX2hjZCwgaXJxLCBJUlFGX1NIQVJF RCk7CisJaWYgKHJldCkKKwkJZ290byBkZWFsbG9jX3VzYjJfaGNkOworCisJZGV2aWNlX2VuYWJs ZV9hc3luY19zdXNwZW5kKGRldik7CisJcG1fcnVudGltZV9wdXRfbm9pZGxlKGRldik7CisKKwkv KgorCSAqIFByZXZlbnQgcnVudGltZSBwbSBmcm9tIGJlaW5nIG9uIGFzIGRlZmF1bHQsIHVzZXJz IHNob3VsZCBlbmFibGUKKwkgKiBydW50aW1lIHBtIHVzaW5nIHBvd2VyL2NvbnRyb2wgaW4gc3lz ZnMuCisJICovCisJcG1fcnVudGltZV9mb3JiaWQoZGV2KTsKKworCXJldHVybiAwOworCitkZWFs bG9jX3VzYjJfaGNkOgorCXVzYl9yZW1vdmVfaGNkKGhjZCk7CitwdXRfdXNiM19oY2Q6CisJdXNi X3B1dF9oY2QoeGhjaS0+c2hhcmVkX2hjZCk7CitkaXNhYmxlX2hvc3Q6CisJeGhjaV9oaXN0Yl9o b3N0X2Rpc2FibGUoaGlzdGIpOworcHV0X2hjZDoKKwl1c2JfcHV0X2hjZChoY2QpOworZGlzYWJs ZV9wbToKKwlwbV9ydW50aW1lX3B1dF9zeW5jKGRldik7CisJcG1fcnVudGltZV9kaXNhYmxlKGRl dik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHhoY2lfaGlzdGJfcmVtb3ZlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgeGhjaV9oY2RfaGlzdGIgKmhp c3RiID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0g aGlzdGItPmhjZDsKKwlzdHJ1Y3QgeGhjaV9oY2QJKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOwor CisJeGhjaS0+eGhjX3N0YXRlIHw9IFhIQ0lfU1RBVEVfUkVNT1ZJTkc7CisKKwl1c2JfcmVtb3Zl X2hjZCh4aGNpLT5zaGFyZWRfaGNkKTsKKwlkZXZpY2Vfd2FrZXVwX2Rpc2FibGUoJmRldi0+ZGV2 KTsKKworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJdXNiX3B1dF9oY2QoeGhjaS0+c2hhcmVkX2hj ZCk7CisKKwl4aGNpX2hpc3RiX2hvc3RfZGlzYWJsZShoaXN0Yik7CisJdXNiX3B1dF9oY2QoaGNk KTsKKwlwbV9ydW50aW1lX3B1dF9zeW5jKCZkZXYtPmRldik7CisJcG1fcnVudGltZV9kaXNhYmxl KCZkZXYtPmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX21heWJlX3VudXNl ZCB4aGNpX2hpc3RiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB4aGNp X2hjZF9oaXN0YiAqaGlzdGIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hj ZCAqaGNkID0gaGlzdGItPmhjZDsKKwlzdHJ1Y3QgeGhjaV9oY2QJKnhoY2kgPSBoY2RfdG9feGhj aShoY2QpOworCWludCByZXQ7CisKKwlyZXQgPSB4aGNpX3N1c3BlbmQoeGhjaSwgZGV2aWNlX21h eV93YWtldXAoZGV2KSk7CisKKwlpZiAoIWRldmljZV9tYXlfd2FrZXVwKGRldikpCisJCXhoY2lf aGlzdGJfaG9zdF9kaXNhYmxlKGhpc3RiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBp bnQgX19tYXliZV91bnVzZWQgeGhjaV9oaXN0Yl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQor eworCXN0cnVjdCB4aGNpX2hjZF9oaXN0YiAqaGlzdGIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK KwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gaGlzdGItPmhjZDsKKwlzdHJ1Y3QgeGhjaV9oY2QgKnho Y2kgPSBoY2RfdG9feGhjaShoY2QpOworCisJaWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKQor CQl4aGNpX2hpc3RiX2hvc3RfZW5hYmxlKGhpc3RiKTsKKworCXJldHVybiB4aGNpX3Jlc3VtZSh4 aGNpLCAwKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHhoY2lfaGlzdGJf cG1fb3BzID0geworCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHhoY2lfaGlzdGJfc3VzcGVuZCwg eGhjaV9oaXN0Yl9yZXN1bWUpCit9OworI2RlZmluZSBERVZfUE1fT1BTIChJU19FTkFCTEVEKENP TkZJR19QTSkgPyAmeGhjaV9oaXN0Yl9wbV9vcHMgOiBOVUxMKQorCisjaWZkZWYgQ09ORklHX09G CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBoaXN0Yl94aGNpX29mX21hdGNoW10g PSB7CisJeyAuY29tcGF0aWJsZSA9ICJoaXNpbGljb24saGkzNzk4Y3YyMDAteGhjaSJ9LAorCXsg fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBoaXN0Yl94aGNpX29mX21hdGNoKTsKKyNl bmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBoaXN0Yl94aGNpX2RyaXZlciA9 IHsKKwkucHJvYmUJPSB4aGNpX2hpc3RiX3Byb2JlLAorCS5yZW1vdmUJPSB4aGNpX2hpc3RiX3Jl bW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZSA9ICJ4aGNpLWhpc3RiIiwKKwkJLnBtID0gREVW X1BNX09QUywKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKGhpc3RiX3hoY2lfb2Zf bWF0Y2gpLAorCX0sCit9OworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp4aGNpLWhpc3RiIik7CisK K3N0YXRpYyBpbnQgX19pbml0IHhoY2lfaGlzdGJfaW5pdCh2b2lkKQoreworCXhoY2lfaW5pdF9k cml2ZXIoJnhoY2lfaGlzdGJfaGNfZHJpdmVyLCAmeGhjaV9oaXN0Yl9vdmVycmlkZXMpOworCXJl dHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmhpc3RiX3hoY2lfZHJpdmVyKTsKK30KK21v ZHVsZV9pbml0KHhoY2lfaGlzdGJfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB4aGNpX2hp c3RiX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaGlzdGJfeGhj aV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoeGhjaV9oaXN0Yl9leGl0KTsKKworTU9EVUxFX0RF U0NSSVBUSU9OKCJIaVNpbGljb24gU1RCIHhIQ0kgSG9zdCBDb250cm9sbGVyIERyaXZlciIpOwor TU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo=