From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Griffin Subject: [PATCH RESEND v5 2/5] usb: host: ohci-st: Add OHCI driver support for ST STB devices Date: Fri, 5 Sep 2014 18:23:46 +0100 Message-ID: <1409937829-23708-3-git-send-email-peter.griffin@linaro.org> References: <1409937829-23708-1-git-send-email-peter.griffin@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1409937829-23708-1-git-send-email-peter.griffin@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, stern@rowland.harvard.edu, gregkh@linuxfoundation.org, srinivas.kandagatla@gmail.com, maxime.coquelin@st.com, patrice.chotard@st.com, arnd@arndb.de Cc: peter.griffin@linaro.org, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, lee.jones@linaro.org List-Id: devicetree@vger.kernel.org VGhpcyBwYXRjaCBhZGRzIHRoZSBnbHVlIGNvZGUgcmVxdWlyZWQgdG8gZW5zdXJlIHRoZSBvbi1j aGlwIE9IQ0kKY29udHJvbGxlciB3b3JrcyBvbiBTVGkgY29uc3VtZXIgZWxlY3Ryb25pY3MgU29D J3MgZnJvbSBTVE1pY3JvZWxlY3Ryb25pY3MuCgpJdCBtYWlubHkgbWFuYWdlcyB0aGUgc2V0dGlu ZyBhbmQgZW5hYmxpbmcgb2YgdGhlIHJlbGV2YW50IGNsb2NrcyBhbmQgbWFuYWdlcwp0aGUgcmVz ZXQgLyBwb3dlciBzaWduYWxzIHRvIHRoZSBJUCBibG9jay4KClNpZ25lZC1vZmYtYnk6IFBldGVy IEdyaWZmaW4gPHBldGVyLmdyaWZmaW5AbGluYXJvLm9yZz4KLS0tCiBkcml2ZXJzL3VzYi9ob3N0 L0tjb25maWcgICB8ICAgOCArKwogZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZSAgfCAgIDEgKwog ZHJpdmVycy91c2IvaG9zdC9vaGNpLXN0LmMgfCAzMzkgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDM0OCBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvaG9zdC9vaGNpLXN0LmMKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcK aW5kZXggODI4MDBhNy4uNjA5ZWZlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9LY29u ZmlnCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwpAQCAtNzYxLDYgKzc2MSwxNCBAQCBj b25maWcgVVNCX0hDRF9TU0IKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIFVTQl9I Q0RfU1QKKwl0cmlzdGF0ZSAiU1QgVVNCIGRyaXZlciBmb3IgU1QgU29DIFNlcmllcyIKKwlkZXBl bmRzIG9uIEFSQ0hfU1RJICYmIE9GCisJc2VsZWN0IEdFTkVSSUNfUEhZCisJaGVscAorCSAgRW5h YmxlIHN1cHBvcnQgZm9yIHRoZSBvbi1jaGlwIE9IQ0kgJiBFSENJIGNvbnRyb2xsZXIgZm91bmQg b24KKwkgIFNUTWljcm9lbGVjdHJvbmljcyBjb25zdW1lciBlbGVjdHJvbmljcyBTb0Mncy4KKwog Y29uZmlnIFVTQl9IQ0RfVEVTVF9NT0RFCiAJYm9vbCAiSENEIHRlc3QgbW9kZSBzdXBwb3J0Igog CS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUgYi9kcml2 ZXJzL3VzYi9ob3N0L01ha2VmaWxlCmluZGV4IDE0NGMwMzguLmFlMmRiMGIgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvaG9zdC9NYWtlZmls ZQpAQCAtNzcsMyArNzcsNCBAQCBvYmotJChDT05GSUdfVVNCX0hDRF9TU0IpCSs9IHNzYi1oY2Qu bwogb2JqLSQoQ09ORklHX1VTQl9GVVNCSDIwMF9IQ0QpCSs9IGZ1c2JoMjAwLWhjZC5vCiBvYmot JChDT05GSUdfVVNCX0ZPVEcyMTBfSENEKQkrPSBmb3RnMjEwLWhjZC5vCiBvYmotJChDT05GSUdf VVNCX01BWDM0MjFfSENEKQkrPSBtYXgzNDIxLWhjZC5vCitvYmotJChDT05GSUdfVVNCX0hDRF9T VCkJKz0gZWhjaS1zdC5vIG9oY2ktc3QubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9v aGNpLXN0LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi43MzhkNmM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Iv aG9zdC9vaGNpLXN0LmMKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBTVCBPSENJIGRyaXZlcgor ICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTVE1pY3JvZWxlY3Ryb25pY3Mg4oCTIEFsbCBSaWdo dHMgUmVzZXJ2ZWQKKyAqCisgKiBBdXRob3I6IFBldGVyIEdyaWZmaW4gPHBldGVyLmdyaWZmaW5A bGluYXJvLm9yZz4KKyAqCisgKiBEZXJpdmVkIGZyb20gb2hjaS1wbGF0Zm9ybS5jCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8 bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVk ZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkv cGh5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu dXgvcmVzZXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb2hjaV9wZHJpdmVyLmg+CisjaW5jbHVk ZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2hjZC5oPgorCisjaW5jbHVkZSAi b2hjaS5oIgorI2luY2x1ZGUgInVzYi1zdC1jb21tb24uaCIKKworI2RlZmluZSBEUklWRVJfREVT QyAiT0hDSSBTVE1pY3JvZWxlY3Ryb25pY3MgZHJpdmVyIgorCisjZGVmaW5lIGhjZF90b19vaGNp X3ByaXYoaCkgKChzdHJ1Y3Qgc3RfcGxhdGZvcm1fcHJpdiAqKWhjZF90b19vaGNpKGgpLT5wcml2 KQorCitzdGF0aWMgY29uc3QgY2hhciBoY2RfbmFtZVtdID0gIm9oY2ktc3QiOworCitzdGF0aWMg aW50IHN0X29oY2lfcGxhdGZvcm1fcG93ZXJfb24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2 KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwor CXN0cnVjdCBzdF9wbGF0Zm9ybV9wcml2ICpwcml2ID0gaGNkX3RvX29oY2lfcHJpdihoY2QpOwor CWludCBjbGssIHJldDsKKworCXJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocHJpdi0+cHdy KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcmVzZXRfY29udHJvbF9kZWFz c2VydChwcml2LT5yc3QpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2Fzc2VydF9wb3dlcjsKKwor CS8qIHNvbWUgU29DcyBkb24ndCBoYXZlIGEgZGVkaWNhdGVkIDQ4TWh6IGNsb2NrLCBidXQgdGhv c2UgdGhhdCBkbworCSAgIG5lZWQgdGhlIHJhdGUgdG8gYmUgZXhwbGljaXRseSBzZXQgKi8KKwlp ZiAocHJpdi0+Y2xrNDgpIHsKKwkJcmV0ID0gY2xrX3NldF9yYXRlKHByaXYtPmNsazQ4LCA0ODAw MDAwMCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9hc3NlcnRfcmVzZXQ7CisJfQorCisJZm9y IChjbGsgPSAwOyBjbGsgPCBVU0JfTUFYX0NMS1MgJiYgcHJpdi0+Y2xrc1tjbGtdOyBjbGsrKykg eworCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0+Y2xrc1tjbGtdKTsKKwkJaWYgKHJl dCkKKwkJCWdvdG8gZXJyX2Rpc2FibGVfY2xrczsKKwl9CisKKwlyZXQgPSBwaHlfaW5pdChwcml2 LT5waHkpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2Rpc2FibGVfY2xrczsKKworCXJldCA9IHBo eV9wb3dlcl9vbihwcml2LT5waHkpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2V4aXRfcGh5Owor CisJcmV0dXJuIDA7CisKK2Vycl9leGl0X3BoeToKKwlwaHlfZXhpdChwcml2LT5waHkpOworZXJy X2Rpc2FibGVfY2xrczoKKwl3aGlsZSAoLS1jbGsgPj0gMCkKKwkJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKHByaXYtPmNsa3NbY2xrXSk7CitlcnJfYXNzZXJ0X3Jlc2V0OgorCXJlc2V0X2NvbnRyb2xf YXNzZXJ0KHByaXYtPnJzdCk7CitlcnJfYXNzZXJ0X3Bvd2VyOgorCXJlc2V0X2NvbnRyb2xfYXNz ZXJ0KHByaXYtPnB3cik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzdF9vaGNp X3BsYXRmb3JtX3Bvd2VyX29mZihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3Ry dWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHN0 X3BsYXRmb3JtX3ByaXYgKnByaXYgPSBoY2RfdG9fb2hjaV9wcml2KGhjZCk7CisKKwlpbnQgY2xr OworCisJcmVzZXRfY29udHJvbF9hc3NlcnQocHJpdi0+cHdyKTsKKworCXJlc2V0X2NvbnRyb2xf YXNzZXJ0KHByaXYtPnJzdCk7CisKKwlwaHlfcG93ZXJfb2ZmKHByaXYtPnBoeSk7CisKKwlwaHlf ZXhpdChwcml2LT5waHkpOworCisJZm9yIChjbGsgPSBVU0JfTUFYX0NMS1MgLSAxOyBjbGsgPj0g MDsgY2xrLS0pCisJCWlmIChwcml2LT5jbGtzW2Nsa10pCisJCQljbGtfZGlzYWJsZV91bnByZXBh cmUocHJpdi0+Y2xrc1tjbGtdKTsKK30KKworc3RhdGljIHN0cnVjdCBoY19kcml2ZXIgX19yZWFk X21vc3RseSBvaGNpX3BsYXRmb3JtX2hjX2RyaXZlcjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBv aGNpX2RyaXZlcl9vdmVycmlkZXMgcGxhdGZvcm1fb3ZlcnJpZGVzIF9faW5pdGNvbnN0ID0gewor CS5wcm9kdWN0X2Rlc2MgPQkJIlNUIE9IQ0kgY29udHJvbGxlciIsCisJLmV4dHJhX3ByaXZfc2l6 ZSA9CXNpemVvZihzdHJ1Y3Qgc3RfcGxhdGZvcm1fcHJpdiksCit9OworCitzdGF0aWMgc3RydWN0 IHVzYl9vaGNpX3BkYXRhIG9oY2lfcGxhdGZvcm1fZGVmYXVsdHMgPSB7CisJLnBvd2VyX29uID0J CXN0X29oY2lfcGxhdGZvcm1fcG93ZXJfb24sCisJLnBvd2VyX3N1c3BlbmQgPQlzdF9vaGNpX3Bs YXRmb3JtX3Bvd2VyX29mZiwKKwkucG93ZXJfb2ZmID0JCXN0X29oY2lfcGxhdGZvcm1fcG93ZXJf b2ZmLAorfTsKKworc3RhdGljIGludCBzdF9vaGNpX3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCXN0cnVjdCByZXNv dXJjZSAqcmVzX21lbTsKKwlzdHJ1Y3QgdXNiX29oY2lfcGRhdGEgKnBkYXRhID0gJm9oY2lfcGxh dGZvcm1fZGVmYXVsdHM7CisJc3RydWN0IHN0X3BsYXRmb3JtX3ByaXYgKnByaXY7CisJc3RydWN0 IG9oY2lfaGNkICpvaGNpOworCWludCBlcnIsIGlycSwgY2xrID0gMDsKKworCWlmICh1c2JfZGlz YWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRl diwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJubyBpcnEgcHJv dmlkZWQiKTsKKwkJcmV0dXJuIGlycTsKKwl9CisKKwlyZXNfbWVtID0gcGxhdGZvcm1fZ2V0X3Jl c291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzX21lbSkgeworCQlkZXZf ZXJyKCZkZXYtPmRldiwgIm5vIG1lbW9yeSByZXNvdXJjZSBwcm92aWRlZCIpOworCQlyZXR1cm4g LUVOWElPOworCX0KKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZvaGNpX3BsYXRmb3JtX2hjX2Ry aXZlciwgJmRldi0+ZGV2LAorCQkJZGV2X25hbWUoJmRldi0+ZGV2KSk7CisJaWYgKCFoY2QpCisJ CXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBoY2QpOworCWRl di0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBwZGF0YTsKKwlwcml2ID0gaGNkX3RvX29oY2lfcHJpdiho Y2QpOworCW9oY2kgPSBoY2RfdG9fb2hjaShoY2QpOworCisJcHJpdi0+cGh5ID0gZGV2bV9waHlf Z2V0KCZkZXYtPmRldiwgInVzYiIpOworCWlmIChJU19FUlIocHJpdi0+cGh5KSkgeworCQllcnIg PSBQVFJfRVJSKHByaXYtPnBoeSk7CisJCWdvdG8gZXJyX3B1dF9oY2Q7CisJfQorCisJZm9yIChj bGsgPSAwOyBjbGsgPCBVU0JfTUFYX0NMS1M7IGNsaysrKSB7CisJCXByaXYtPmNsa3NbY2xrXSA9 IG9mX2Nsa19nZXQoZGV2LT5kZXYub2Zfbm9kZSwgY2xrKTsKKwkJaWYgKElTX0VSUihwcml2LT5j bGtzW2Nsa10pKSB7CisJCQllcnIgPSBQVFJfRVJSKHByaXYtPmNsa3NbY2xrXSk7CisJCQlpZiAo ZXJyID09IC1FUFJPQkVfREVGRVIpCisJCQkJZ290byBlcnJfcHV0X2Nsa3M7CisJCQlwcml2LT5j bGtzW2Nsa10gPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBzb21lIFNvQ3MgZG9u J3QgaGF2ZSBhIGRlZGljYXRlZCA0OE1oeiBjbG9jaywgYnV0IHRob3NlIHRoYXQKKwkgICBkbyBu ZWVkIHRoZSByYXRlIHRvIGJlIGV4cGxpY2l0bHkgc2V0ICovCisJcHJpdi0+Y2xrNDggPSBkZXZt X2Nsa19nZXQoJmRldi0+ZGV2LCAiY2xrNDgiKTsKKwlpZiAoSVNfRVJSKHByaXYtPmNsazQ4KSkg eworCQlkZXZfaW5mbygmZGV2LT5kZXYsICI0OE1IeiBjbGsgbm90IGZvdW5kXG4iKTsKKwkJcHJp di0+Y2xrNDggPSBOVUxMOworCX0KKworCXByaXYtPnB3ciA9IGRldm1fcmVzZXRfY29udHJvbF9n ZXRfb3B0aW9uYWwoJmRldi0+ZGV2LCAicG93ZXIiKTsKKwlpZiAoSVNfRVJSKHByaXYtPnB3cikp IHsKKwkJZXJyID0gUFRSX0VSUihwcml2LT5wd3IpOworCQlnb3RvIGVycl9wdXRfY2xrczsKKwl9 CisKKwlwcml2LT5yc3QgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0X29wdGlvbmFsKCZkZXYtPmRl diwgInNvZnRyZXNldCIpOworCWlmIChJU19FUlIocHJpdi0+cnN0KSkgeworCQllcnIgPSBQVFJf RVJSKHByaXYtPnJzdCk7CisJCWdvdG8gZXJyX3B1dF9jbGtzOworCX0KKworCWlmIChwZGF0YS0+ cG93ZXJfb24pIHsKKwkJZXJyID0gcGRhdGEtPnBvd2VyX29uKGRldik7CisJCWlmIChlcnIgPCAw KQorCQkJZ290byBlcnJfcG93ZXI7CisJfQorCisJaGNkLT5yc3JjX3N0YXJ0ID0gcmVzX21lbS0+ c3RhcnQ7CisJaGNkLT5yc3JjX2xlbiA9IHJlc291cmNlX3NpemUocmVzX21lbSk7CisKKwloY2Qt PnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJmRldi0+ZGV2LCByZXNfbWVtKTsKKwlpZiAo SVNfRVJSKGhjZC0+cmVncykpIHsKKwkJZXJyID0gUFRSX0VSUihoY2QtPnJlZ3MpOworCQlnb3Rv IGVycl9wb3dlcjsKKwl9CisJZXJyID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfU0hBUkVE KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9wb3dlcjsKKworCWRldmljZV93YWtldXBfZW5hYmxl KGhjZC0+c2VsZi5jb250cm9sbGVyKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaGNk KTsKKworCXJldHVybiBlcnI7CisKK2Vycl9wb3dlcjoKKwlpZiAocGRhdGEtPnBvd2VyX29mZikK KwkJcGRhdGEtPnBvd2VyX29mZihkZXYpOworCitlcnJfcHV0X2Nsa3M6CisJd2hpbGUgKC0tY2xr ID49IDApCisJCWNsa19wdXQocHJpdi0+Y2xrc1tjbGtdKTsKK2Vycl9wdXRfaGNkOgorCWlmIChw ZGF0YSA9PSAmb2hjaV9wbGF0Zm9ybV9kZWZhdWx0cykKKwkJZGV2LT5kZXYucGxhdGZvcm1fZGF0 YSA9IE5VTEw7CisKKwl1c2JfcHV0X2hjZChoY2QpOworCisJcmV0dXJuIGVycjsKK30KKworc3Rh dGljIGludCBzdF9vaGNpX3BsYXRmb3JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpk ZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7 CisJc3RydWN0IHVzYl9vaGNpX3BkYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJmRldi0+ ZGV2KTsKKwlzdHJ1Y3Qgc3RfcGxhdGZvcm1fcHJpdiAqcHJpdiA9IGhjZF90b19vaGNpX3ByaXYo aGNkKTsKKwlpbnQgY2xrOworCisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKworCWlmIChwZGF0YS0+ cG93ZXJfb2ZmKQorCQlwZGF0YS0+cG93ZXJfb2ZmKGRldik7CisKKworCWZvciAoY2xrID0gMDsg Y2xrIDwgVVNCX01BWF9DTEtTICYmIHByaXYtPmNsa3NbY2xrXTsgY2xrKyspCisJCWNsa19wdXQo cHJpdi0+Y2xrc1tjbGtdKTsKKworCXVzYl9wdXRfaGNkKGhjZCk7CisKKwlpZiAocGRhdGEgPT0g Jm9oY2lfcGxhdGZvcm1fZGVmYXVsdHMpCisJCWRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBOVUxM OworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKworc3RhdGljIGlu dCBzdF9vaGNpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNk ICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX29oY2lfcGRhdGEgKnBk YXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYg PQorCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCWJv b2wgZG9fd2FrZXVwID0gZGV2aWNlX21heV93YWtldXAoZGV2KTsKKwlpbnQgcmV0OworCisJcmV0 ID0gb2hjaV9zdXNwZW5kKGhjZCwgZG9fd2FrZXVwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJaWYgKHBkYXRhLT5wb3dlcl9zdXNwZW5kKQorCQlwZGF0YS0+cG93ZXJfc3VzcGVuZChw ZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3Rfb2hjaV9yZXN1bWUoc3Ry dWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRh dGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX29oY2lfcGRhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0 YShkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPQorCQljb250YWluZXJfb2Yo ZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCWludCBlcnI7CisKKwlpZiAocGRh dGEtPnBvd2VyX29uKSB7CisJCWVyciA9IHBkYXRhLT5wb3dlcl9vbihwZGV2KTsKKwkJaWYgKGVy ciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCW9oY2lfcmVzdW1lKGhjZCwgZmFsc2UpOwor CXJldHVybiAwOworfQorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoc3Rfb2hjaV9wbV9vcHMs IHN0X29oY2lfc3VzcGVuZCwgc3Rfb2hjaV9yZXN1bWUpOworCisjZW5kaWYgLyogQ09ORklHX1BN X1NMRUVQICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN0X29oY2lfcGxh dGZvcm1faWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJzdCxzdC1vaGNpLTMwMHgiLCB9LAor CXsgLyogc2VudGluZWwgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHN0X29oY2lf cGxhdGZvcm1faWRzKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9wbGF0 Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHN0X29oY2lfcGxhdGZvcm1fcHJvYmUsCisJLnJl bW92ZQkJPSBzdF9vaGNpX3BsYXRmb3JtX3JlbW92ZSwKKwkuc2h1dGRvd24JPSB1c2JfaGNkX3Bs YXRmb3JtX3NodXRkb3duLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzdC1vaGNpIiwKKyNp ZmRlZiBDT05GSUdfUE1fU0xFRVAKKwkJLnBtCT0gJnN0X29oY2lfcG1fb3BzLAorI2VuZGlmCisJ CS5vZl9tYXRjaF90YWJsZSA9IHN0X29oY2lfcGxhdGZvcm1faWRzLAorCX0KK307CisKK3N0YXRp YyBpbnQgX19pbml0IG9oY2lfcGxhdGZvcm1faW5pdCh2b2lkKQoreworCWlmICh1c2JfZGlzYWJs ZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwcl9pbmZvKCIlczogIiBEUklWRVJfREVTQyAi XG4iLCBoY2RfbmFtZSk7CisKKwlvaGNpX2luaXRfZHJpdmVyKCZvaGNpX3BsYXRmb3JtX2hjX2Ry aXZlciwgJnBsYXRmb3JtX292ZXJyaWRlcyk7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdp c3Rlcigmb2hjaV9wbGF0Zm9ybV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQob2hjaV9wbGF0Zm9y bV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG9oY2lfcGxhdGZvcm1fY2xlYW51cCh2b2lk KQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX3BsYXRmb3JtX2RyaXZlcik7 Cit9Cittb2R1bGVfZXhpdChvaGNpX3BsYXRmb3JtX2NsZWFudXApOworCitNT0RVTEVfREVTQ1JJ UFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0FVVEhPUigiUGV0ZXIgR3JpZmZpbiA8cGV0ZXIu Z3JpZmZpbkBsaW5hcm8ub3JnPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotLSAKMS45LjEK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1h cm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5v cmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0t a2VybmVsCg==