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: <1525425645-17246-3-git-send-email-sunjg79@163.com> Date: Fri, 4 May 2018 17:20:45 +0800 To: mathias.nyman@intel.com, gregkh@linuxfoundation.org, robh+dt@kernel.org Cc: shawn.guo@linaro.org, xuejiancheng@hisilicon.com, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, Jianguo Sun List-ID: RnJvbTogSmlhbmd1byBTdW4gPHN1bmppYW5ndW8xQGh1YXdlaS5jb20+CgpUaGlzIGNvbW1pdCBh ZGRzIHN1cHBvcnQgZm9yIEhpU2lsaWNvbiBTVEIgeEhDSSBob3N0IGNvbnRyb2xsZXIuCgpTaWdu ZWQtb2ZmLWJ5OiBKaWFuZ3VvIFN1biA8c3Vuamlhbmd1bzFAaHVhd2VpLmNvbT4KLS0tCiBkcml2 ZXJzL3VzYi9ob3N0L0tjb25maWcgICAgICB8ICAgNyArCiBkcml2ZXJzL3VzYi9ob3N0L01ha2Vm aWxlICAgICB8ICAgMSArCiBkcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGlzdGIuYyB8IDQwOSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg NDE3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9ob3N0L3ho Y2ktaGlzdGIuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZl cnMvdXNiL2hvc3QvS2NvbmZpZwppbmRleCA1ZDk1OGRhLi5jODEzZmM0IDEwMDY0NAotLS0gYS9k cml2ZXJzL3VzYi9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCkBA IC01Miw2ICs1MiwxMyBAQCBjb25maWcgVVNCX1hIQ0lfUExBVEZPUk0KIAogCSAgSWYgdW5zdXJl LCBzYXkgTi4KIAorY29uZmlnIFVTQl9YSENJX0hJU1RCCisJdHJpc3RhdGUgInhIQ0kgc3VwcG9y dCBmb3IgSGlTaWxpY29uIFNUQiBTb0NzIgorCWRlcGVuZHMgb24gVVNCX1hIQ0lfUExBVEZPUk0g JiYgKEFSQ0hfSElTSSB8fCBDT01QSUxFX1RFU1QpCisJaGVscAorCSAgU2F5ICdZJyB0byBlbmFi bGUgdGhlIHN1cHBvcnQgZm9yIHRoZSB4SENJIGhvc3QgY29udHJvbGxlcgorCSAgZm91bmQgaW4g SGlTaWxpY29uIFNUQiBTb0NzLgorCiBjb25maWcgVVNCX1hIQ0lfTVRLCiAJdHJpc3RhdGUgInhI Q0kgc3VwcG9ydCBmb3IgTWVkaWFUZWsgU29DcyIKIAlzZWxlY3QgTUZEX1NZU0NPTgpkaWZmIC0t Z2l0IGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZp bGUKaW5kZXggOGE4Y2ZmZS4uOWI2NjljOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9N YWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCkBAIC03NCw2ICs3NCw3IEBA IG9iai0kKENPTkZJR19VU0JfRkhDSV9IQ0QpCSs9IGZoY2kubwogb2JqLSQoQ09ORklHX1VTQl9Y SENJX0hDRCkJKz0geGhjaS1oY2Qubwogb2JqLSQoQ09ORklHX1VTQl9YSENJX1BDSSkJKz0geGhj aS1wY2kubwogb2JqLSQoQ09ORklHX1VTQl9YSENJX1BMQVRGT1JNKSArPSB4aGNpLXBsYXQtaGNk Lm8KK29iai0kKENPTkZJR19VU0JfWEhDSV9ISVNUQikJKz0geGhjaS1oaXN0Yi5vCiBvYmotJChD T05GSUdfVVNCX1hIQ0lfTVRLKQkrPSB4aGNpLW10ay5vCiBvYmotJChDT05GSUdfVVNCX1hIQ0lf VEVHUkEpCSs9IHhoY2ktdGVncmEubwogb2JqLSQoQ09ORklHX1VTQl9TTDgxMV9IQ0QpCSs9IHNs ODExLWhjZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGlzdGIuYyBiL2Ry aXZlcnMvdXNiL2hvc3QveGhjaS1oaXN0Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjVlYzU0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kt aGlzdGIuYwpAQCAtMCwwICsxLDQwOSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAKKy8qCisgKiB4SENJIGhvc3QgY29udHJvbGxlciBkcml2ZXIgZm9yIEhpU2lsaWNvbiBT VEIgU29DcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEhpU2lsaWNvbiBDby4sIEx0 ZC4gaHR0cDovL3d3dy5oaXNpbGljb24uY29tCisgKgorICogQXV0aG9yczogSmlhbmd1byBTdW4g PHN1bmppYW5ndW8xQGh1YXdlaS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24g MiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisj aW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+Cisj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRl IDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+ CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKwor I2luY2x1ZGUgInhoY2kuaCIKKworI2RlZmluZSBHVFhUSFJDRkcJCTB4YzEwOAorI2RlZmluZSBH UlhUSFJDRkcJCTB4YzEwYworI2RlZmluZSBSRUdfR1VTQjJQSFlDRkcwCTB4YzIwMAorI2RlZmlu ZSBCSVRfVVRNSV84XzE2CQlCSVQoMykKKyNkZWZpbmUgQklUX1VUTUlfVUxQSQkJQklUKDQpCisj ZGVmaW5lIEJJVF9GUkVFQ0xLX0VYSVNUCUJJVCgzMCkKKworI2RlZmluZSBSRUdfR1VTQjNQSVBF Q1RMMAkweGMyYzAKKyNkZWZpbmUgVVNCM19ERUVNUEhBU0lTX01BU0sJR0VOTUFTSygyLCAxKQor I2RlZmluZSBVU0IzX0RFRU1QSEFTSVMwCUJJVCgxKQorI2RlZmluZSBVU0IzX1RYX01BUkdJTjEJ CUJJVCg0KQorCitzdHJ1Y3QgeGhjaV9oY2RfaGlzdGIgeworCXN0cnVjdCBkZXZpY2UJCSpkZXY7 CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJdm9pZCBfX2lvbWVtCQkqY3RybDsKKwlzdHJ1Y3Qg Y2xrCQkqYnVzX2NsazsKKwlzdHJ1Y3QgY2xrCQkqdXRtaV9jbGs7CisJc3RydWN0IGNsawkJKnBp cGVfY2xrOworCXN0cnVjdCBjbGsJCSpzdXNwZW5kX2NsazsKKwlzdHJ1Y3QgcmVzZXRfY29udHJv bAkqc29mdF9yZXNldDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhoY2lfaGNkX2hpc3Ri ICpoY2RfdG9faGlzdGIoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlyZXR1cm4gZGV2X2dldF9k cnZkYXRhKGhjZC0+c2VsZi5jb250cm9sbGVyKTsKK30KKworc3RhdGljIGludCB4aGNpX2hpc3Ri X2NvbmZpZyhzdHJ1Y3QgeGhjaV9oY2RfaGlzdGIgKmhpc3RiKQoreworCXN0cnVjdCBkZXZpY2Vf bm9kZSAqbnAgPSBoaXN0Yi0+ZGV2LT5vZl9ub2RlOworCXUzMiByZWd2YWw7CisKKwlpZiAob2Zf cHJvcGVydHlfbWF0Y2hfc3RyaW5nKG5wLCAicGh5cy1uYW1lcyIsICJpbm5vIikgPj0gMCkgewor CQkvKiBVU0IyIFBIWSBjaG9zZSB1bHBpIDhiaXQgaW50ZXJmYWNlICovCisJCXJlZ3ZhbCA9IHJl YWRsKGhpc3RiLT5jdHJsICsgUkVHX0dVU0IyUEhZQ0ZHMCk7CisJCXJlZ3ZhbCAmPSB+QklUX1VU TUlfVUxQSTsKKwkJcmVndmFsICY9IH4oQklUX1VUTUlfOF8xNik7CisJCXJlZ3ZhbCAmPSB+QklU X0ZSRUVDTEtfRVhJU1Q7CisJCXdyaXRlbChyZWd2YWwsIGhpc3RiLT5jdHJsICsgUkVHX0dVU0Iy UEhZQ0ZHMCk7CisJfQorCisJaWYgKG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhucCwgInBoeXMt bmFtZXMiLCAiY29tYm8iKSA+PSAwKSB7CisJCS8qCisJCSAqIHdyaXRlIDB4MDEwYzAwMTIgdG8g R1VTQjNQSVBFQ1RMMAorCQkgKiBHVVNCM1BJUEVDVEwwWzU6M10gPSAwMTAgOiBUeCBNYXJnaW4g PSA5MDBtViAsCisJCSAqIGRlY3JlYXNlIFRYIHZvbHRhZ2UKKwkJICogR1VTQjNQSVBFQ1RMMFsy OjFdID0gMDEgOiBUeCBEZWVtcGhhc2lzID0gLTMuNWRCLAorCQkgKiByZWZlciB0byB4SENJIHNw ZWMKKwkJICovCisJCXJlZ3ZhbCA9IHJlYWRsKGhpc3RiLT5jdHJsICsgUkVHX0dVU0IzUElQRUNU TDApOworCQlyZWd2YWwgJj0gflVTQjNfREVFTVBIQVNJU19NQVNLOworCQlyZWd2YWwgfD0gVVNC M19ERUVNUEhBU0lTMDsKKwkJcmVndmFsIHw9IFVTQjNfVFhfTUFSR0lOMTsKKwkJd3JpdGVsKHJl Z3ZhbCwgaGlzdGItPmN0cmwgKyBSRUdfR1VTQjNQSVBFQ1RMMCk7CisJfQorCisJd3JpdGVsKDB4 MjMxMDAwMDAsIGhpc3RiLT5jdHJsICsgR1RYVEhSQ0ZHKTsKKwl3cml0ZWwoMHgyMzEwMDAwMCwg aGlzdGItPmN0cmwgKyBHUlhUSFJDRkcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg eGhjaV9oaXN0Yl9jbGtzX2dldChzdHJ1Y3QgeGhjaV9oY2RfaGlzdGIgKmhpc3RiKQoreworCXN0 cnVjdCBkZXZpY2UgKmRldiA9IGhpc3RiLT5kZXY7CisKKwloaXN0Yi0+YnVzX2NsayA9IGRldm1f Y2xrX2dldChkZXYsICJidXMiKTsKKwlpZiAoSVNfRVJSKGhpc3RiLT5idXNfY2xrKSkgeworCQlk ZXZfZXJyKGRldiwgImZhaWwgdG8gZ2V0IGJ1cyBjbGtcbiIpOworCQlyZXR1cm4gUFRSX0VSUiho aXN0Yi0+YnVzX2Nsayk7CisJfQorCisJaGlzdGItPnV0bWlfY2xrID0gZGV2bV9jbGtfZ2V0KGRl diwgInV0bWkiKTsKKwlpZiAoSVNfRVJSKGhpc3RiLT51dG1pX2NsaykpIHsKKwkJZGV2X2Vycihk ZXYsICJmYWlsIHRvIGdldCB1dG1pIGNsa1xuIik7CisJCXJldHVybiBQVFJfRVJSKGhpc3RiLT51 dG1pX2Nsayk7CisJfQorCisJaGlzdGItPnBpcGVfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBp cGUiKTsKKwlpZiAoSVNfRVJSKGhpc3RiLT5waXBlX2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJm YWlsIHRvIGdldCBwaXBlIGNsa1xuIik7CisJCXJldHVybiBQVFJfRVJSKGhpc3RiLT5waXBlX2Ns ayk7CisJfQorCisJaGlzdGItPnN1c3BlbmRfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInN1c3Bl bmQiKTsKKwlpZiAoSVNfRVJSKGhpc3RiLT5zdXNwZW5kX2NsaykpIHsKKwkJZGV2X2VycihkZXYs ICJmYWlsIHRvIGdldCBzdXNwZW5kIGNsa1xuIik7CisJCXJldHVybiBQVFJfRVJSKGhpc3RiLT5z dXNwZW5kX2Nsayk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeGhjaV9oaXN0 Yl9ob3N0X2VuYWJsZShzdHJ1Y3QgeGhjaV9oY2RfaGlzdGIgKmhpc3RiKQoreworCWludCByZXQ7 CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaGlzdGItPmJ1c19jbGspOworCWlmIChyZXQp IHsKKwkJZGV2X2VycihoaXN0Yi0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBidXMgY2xrXG4iKTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaGlzdGItPnV0 bWlfY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGlzdGItPmRldiwgImZhaWxlZCB0byBl bmFibGUgdXRtaSBjbGtcbiIpOworCQlnb3RvIGVycl91dG1pX2NsazsKKwl9CisKKwlyZXQgPSBj bGtfcHJlcGFyZV9lbmFibGUoaGlzdGItPnBpcGVfY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9l cnIoaGlzdGItPmRldiwgImZhaWxlZCB0byBlbmFibGUgcGlwZSBjbGtcbiIpOworCQlnb3RvIGVy cl9waXBlX2NsazsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaGlzdGItPnN1c3Bl bmRfY2xrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGlzdGItPmRldiwgImZhaWxlZCB0byBl bmFibGUgc3VzcGVuZCBjbGtcbiIpOworCQlnb3RvIGVycl9zdXNwZW5kX2NsazsKKwl9CisKKwly ZXNldF9jb250cm9sX2RlYXNzZXJ0KGhpc3RiLT5zb2Z0X3Jlc2V0KTsKKworCXJldHVybiAwOwor CitlcnJfc3VzcGVuZF9jbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhpc3RiLT5waXBlX2Ns ayk7CitlcnJfcGlwZV9jbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhpc3RiLT51dG1pX2Ns ayk7CitlcnJfdXRtaV9jbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhpc3RiLT5idXNfY2xr KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHhoY2lfaGlzdGJfaG9zdF9kaXNh YmxlKHN0cnVjdCB4aGNpX2hjZF9oaXN0YiAqaGlzdGIpCit7CisJcmVzZXRfY29udHJvbF9hc3Nl cnQoaGlzdGItPnNvZnRfcmVzZXQpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhpc3RiLT5z dXNwZW5kX2Nsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhpc3RiLT5waXBlX2Nsayk7CisJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhpc3RiLT51dG1pX2Nsayk7CisJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGhpc3RiLT5idXNfY2xrKTsKK30KKworc3RhdGljIHZvaWQgeGhjaV9oaXN0Yl9xdWly a3Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCit7CisJLyoKKwkg KiBBcyBvZiBub3cgcGxhdGZvcm0gZHJpdmVycyBkb24ndCBwcm92aWRlIE1TSSBzdXBwb3J0IHNv IHdlIGVuc3VyZQorCSAqIGhlcmUgdGhhdCB0aGUgZ2VuZXJpYyBjb2RlIGRvZXMgbm90IHRyeSB0 byBtYWtlIGEgcGNpX2RldiBmcm9tIG91cgorCSAqIGRldiBzdHJ1Y3QgaW4gb3JkZXIgdG8gc2V0 dXAgTVNJCisJICovCisJeGhjaS0+cXVpcmtzIHw9IFhIQ0lfUExBVDsKK30KKworLyogY2FsbGVk IGR1cmluZyBwcm9iZSgpIGFmdGVyIGNoaXAgcmVzZXQgY29tcGxldGVzICovCitzdGF0aWMgaW50 IHhoY2lfaGlzdGJfc2V0dXAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgeGhjaV9o Y2RfaGlzdGIgKmhpc3RiID0gaGNkX3RvX2hpc3RiKGhjZCk7CisJaW50IHJldDsKKworCWlmICh1 c2JfaGNkX2lzX3ByaW1hcnlfaGNkKGhjZCkpIHsKKwkJcmV0ID0geGhjaV9oaXN0Yl9jb25maWco aGlzdGIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSB4aGNpX2dl bl9zZXR1cChoY2QsIHhoY2lfaGlzdGJfcXVpcmtzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB4aGNpX2RyaXZlcl9v dmVycmlkZXMgeGhjaV9oaXN0Yl9vdmVycmlkZXMgX19pbml0Y29uc3QgPSB7CisJLnJlc2V0ID0g eGhjaV9oaXN0Yl9zZXR1cCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGNfZHJpdmVyIF9fcmVhZF9t b3N0bHkgeGhjaV9oaXN0Yl9oY19kcml2ZXI7CitzdGF0aWMgaW50IHhoY2lfaGlzdGJfcHJvYmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm cGRldi0+ZGV2OworCXN0cnVjdCB4aGNpX2hjZF9oaXN0YiAqaGlzdGI7CisJY29uc3Qgc3RydWN0 IGhjX2RyaXZlciAqZHJpdmVyOworCXN0cnVjdCB1c2JfaGNkICpoY2Q7CisJc3RydWN0IHhoY2lf aGNkICp4aGNpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpcnE7CisJaW50IHJldCA9 IC1FTk9ERVY7CisKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJ ZHJpdmVyID0gJnhoY2lfaGlzdGJfaGNfZHJpdmVyOworCWhpc3RiID0gZGV2bV9remFsbG9jKGRl diwgc2l6ZW9mKCpoaXN0YiksIEdGUF9LRVJORUwpOworCWlmICghaGlzdGIpCisJCXJldHVybiAt RU5PTUVNOworCisJaGlzdGItPmRldiA9IGRldjsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEo cGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJCXJldHVybiBpcnE7CisKKwlyZXMgPSBwbGF0Zm9y bV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWhpc3RiLT5jdHJsID0g ZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihoaXN0 Yi0+Y3RybCkpCisJCXJldHVybiBQVFJfRVJSKGhpc3RiLT5jdHJsKTsKKworCXJldCA9IHhoY2lf aGlzdGJfY2xrc19nZXQoaGlzdGIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwloaXN0 Yi0+c29mdF9yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZGV2LCAic29mdCIpOworCWlm IChJU19FUlIoaGlzdGItPnNvZnRfcmVzZXQpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRv IGdldCBzb2Z0IHJlc2V0XG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaGlzdGItPnNvZnRfcmVzZXQp OworCX0KKworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisJcG1fcnVudGltZV9nZXRfc3luYyhk ZXYpOworCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZChkZXYpOworCisJLyogSW5pdGlhbGl6 ZSBkbWFfbWFzayBhbmQgY29oZXJlbnRfZG1hX21hc2sgdG8gMzItYml0cyAqLworCXJldCA9IGRt YV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoZHJpdmVyLCBkZXYsIGRl dl9uYW1lKGRldikpOworCWlmICghaGNkKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZGlz YWJsZV9wbTsKKwl9CisKKwloY2QtPnJlZ3MgPSBoaXN0Yi0+Y3RybDsKKwloY2QtPnJzcmNfc3Rh cnQgPSByZXMtPnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSByZXNvdXJjZV9zaXplKHJlcyk7CisK KwloaXN0Yi0+aGNkID0gaGNkOworCWRldl9zZXRfZHJ2ZGF0YShoY2QtPnNlbGYuY29udHJvbGxl ciwgaGlzdGIpOworCisJcmV0ID0geGhjaV9oaXN0Yl9ob3N0X2VuYWJsZShoaXN0Yik7CisJaWYg KHJldCkKKwkJZ290byBwdXRfaGNkOworCisJeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CisKKwlk ZXZpY2Vfd2FrZXVwX2VuYWJsZShoY2QtPnNlbGYuY29udHJvbGxlcik7CisKKwl4aGNpLT5tYWlu X2hjZCA9IGhjZDsKKwl4aGNpLT5zaGFyZWRfaGNkID0gdXNiX2NyZWF0ZV9zaGFyZWRfaGNkKGRy aXZlciwgZGV2LCBkZXZfbmFtZShkZXYpLAorCQkJCQkJIGhjZCk7CisJaWYgKCF4aGNpLT5zaGFy ZWRfaGNkKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZGlzYWJsZV9ob3N0OworCX0KKwor CXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX1NIQVJFRCk7CisJaWYgKHJldCkKKwkJ Z290byBwdXRfdXNiM19oY2Q7CisKKwlpZiAoSENDX01BWF9QU0EoeGhjaS0+aGNjX3BhcmFtcykg Pj0gNCkKKwkJeGhjaS0+c2hhcmVkX2hjZC0+Y2FuX2RvX3N0cmVhbXMgPSAxOworCisJcmV0ID0g dXNiX2FkZF9oY2QoeGhjaS0+c2hhcmVkX2hjZCwgaXJxLCBJUlFGX1NIQVJFRCk7CisJaWYgKHJl dCkKKwkJZ290byBkZWFsbG9jX3VzYjJfaGNkOworCisJZGV2aWNlX2VuYWJsZV9hc3luY19zdXNw ZW5kKGRldik7CisJcG1fcnVudGltZV9wdXRfbm9pZGxlKGRldik7CisKKwkvKgorCSAqIFByZXZl bnQgcnVudGltZSBwbSBmcm9tIGJlaW5nIG9uIGFzIGRlZmF1bHQsIHVzZXJzIHNob3VsZCBlbmFi bGUKKwkgKiBydW50aW1lIHBtIHVzaW5nIHBvd2VyL2NvbnRyb2wgaW4gc3lzZnMuCisJICovCisJ cG1fcnVudGltZV9mb3JiaWQoZGV2KTsKKworCXJldHVybiAwOworCitkZWFsbG9jX3VzYjJfaGNk OgorCXVzYl9yZW1vdmVfaGNkKGhjZCk7CitwdXRfdXNiM19oY2Q6CisJdXNiX3B1dF9oY2QoeGhj aS0+c2hhcmVkX2hjZCk7CitkaXNhYmxlX2hvc3Q6CisJeGhjaV9oaXN0Yl9ob3N0X2Rpc2FibGUo aGlzdGIpOworcHV0X2hjZDoKKwl1c2JfcHV0X2hjZChoY2QpOworZGlzYWJsZV9wbToKKwlwbV9y dW50aW1lX3B1dF9zeW5jKGRldik7CisJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IHhoY2lfaGlzdGJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgeGhjaV9oY2RfaGlzdGIgKmhpc3RiID0gcGxhdGZv cm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gaGlzdGItPmhjZDsK KwlzdHJ1Y3QgeGhjaV9oY2QJKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOworCisJeGhjaS0+eGhj X3N0YXRlIHw9IFhIQ0lfU1RBVEVfUkVNT1ZJTkc7CisKKwl1c2JfcmVtb3ZlX2hjZCh4aGNpLT5z aGFyZWRfaGNkKTsKKwlkZXZpY2Vfd2FrZXVwX2Rpc2FibGUoJmRldi0+ZGV2KTsKKworCXVzYl9y ZW1vdmVfaGNkKGhjZCk7CisJdXNiX3B1dF9oY2QoeGhjaS0+c2hhcmVkX2hjZCk7CisKKwl4aGNp X2hpc3RiX2hvc3RfZGlzYWJsZShoaXN0Yik7CisJdXNiX3B1dF9oY2QoaGNkKTsKKwlwbV9ydW50 aW1lX3B1dF9zeW5jKCZkZXYtPmRldik7CisJcG1fcnVudGltZV9kaXNhYmxlKCZkZXYtPmRldik7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX21heWJlX3VudXNlZCB4aGNpX2hpc3Ri X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB4aGNpX2hjZF9oaXN0YiAq aGlzdGIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gaGlz dGItPmhjZDsKKwlzdHJ1Y3QgeGhjaV9oY2QJKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOworCWlu dCByZXQ7CisKKwlyZXQgPSB4aGNpX3N1c3BlbmQoeGhjaSwgZGV2aWNlX21heV93YWtldXAoZGV2 KSk7CisKKwlpZiAoIWRldmljZV9tYXlfd2FrZXVwKGRldikpCisJCXhoY2lfaGlzdGJfaG9zdF9k aXNhYmxlKGhpc3RiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19tYXliZV91 bnVzZWQgeGhjaV9oaXN0Yl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB4 aGNpX2hjZF9oaXN0YiAqaGlzdGIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNi X2hjZCAqaGNkID0gaGlzdGItPmhjZDsKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2RfdG9f eGhjaShoY2QpOworCisJaWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKQorCQl4aGNpX2hpc3Ri X2hvc3RfZW5hYmxlKGhpc3RiKTsKKworCXJldHVybiB4aGNpX3Jlc3VtZSh4aGNpLCAwKTsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHhoY2lfaGlzdGJfcG1fb3BzID0gewor CVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHhoY2lfaGlzdGJfc3VzcGVuZCwgeGhjaV9oaXN0Yl9y ZXN1bWUpCit9OworI2RlZmluZSBERVZfUE1fT1BTIChJU19FTkFCTEVEKENPTkZJR19QTSkgPyAm eGhjaV9oaXN0Yl9wbV9vcHMgOiBOVUxMKQorCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCBoaXN0Yl94aGNpX29mX21hdGNoW10gPSB7CisJeyAuY29t cGF0aWJsZSA9ICJoaXNpbGljb24saGkzNzk4Y3YyMDAteGhjaSJ9LAorCXsgfSwKK307CitNT0RV TEVfREVWSUNFX1RBQkxFKG9mLCBoaXN0Yl94aGNpX29mX21hdGNoKTsKKyNlbmRpZgorCitzdGF0 aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBoaXN0Yl94aGNpX2RyaXZlciA9IHsKKwkucHJvYmUJ PSB4aGNpX2hpc3RiX3Byb2JlLAorCS5yZW1vdmUJPSB4aGNpX2hpc3RiX3JlbW92ZSwKKwkuZHJp dmVyCT0geworCQkubmFtZSA9ICJ4aGNpLWhpc3RiIiwKKwkJLnBtID0gREVWX1BNX09QUywKKwkJ Lm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKGhpc3RiX3hoY2lfb2ZfbWF0Y2gpLAorCX0s Cit9OworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp4aGNpLWhpc3RiIik7CisKK3N0YXRpYyBpbnQg X19pbml0IHhoY2lfaGlzdGJfaW5pdCh2b2lkKQoreworCXhoY2lfaW5pdF9kcml2ZXIoJnhoY2lf aGlzdGJfaGNfZHJpdmVyLCAmeGhjaV9oaXN0Yl9vdmVycmlkZXMpOworCXJldHVybiBwbGF0Zm9y bV9kcml2ZXJfcmVnaXN0ZXIoJmhpc3RiX3hoY2lfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHho Y2lfaGlzdGJfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB4aGNpX2hpc3RiX2V4aXQodm9p ZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaGlzdGJfeGhjaV9kcml2ZXIpOwor fQorbW9kdWxlX2V4aXQoeGhjaV9oaXN0Yl9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJI aVNpbGljb24gU1RCIHhIQ0kgSG9zdCBDb250cm9sbGVyIERyaXZlciIpOworTU9EVUxFX0xJQ0VO U0UoIkdQTCB2MiIpOwo=