From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Griffin Subject: [PATCH v6 2/5] usb: host: ohci-st: Add OHCI driver support for ST STB devices Date: Mon, 8 Sep 2014 13:04:45 +0100 Message-ID: <1410177888-26710-3-git-send-email-peter.griffin@linaro.org> References: <1410177888-26710-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: <1410177888-26710-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 ZHJpdmVycy91c2IvaG9zdC9vaGNpLXN0LmMgfCAzNDkgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDM1OCBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvaG9zdC9vaGNpLXN0LmMKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcK aW5kZXggODI4MDBhNy4uNjA5ZWZlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9LY29u ZmlnCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwpAQCAtNzYxLDYgKzc2MSwxNCBAQCBj b25maWcgVVNCX0hDRF9TU0IKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIFVTQl9I Q0RfU1QKKwl0cmlzdGF0ZSAiU1QgVVNCIGRyaXZlciBmb3IgU1QgU29DIFNlcmllcyIKKwlkZXBl bmRzIG9uIEFSQ0hfU1RJICYmIE9GCisJc2VsZWN0IEdFTkVSSUNfUEhZCisJaGVscAorCSAgRW5h YmxlIHN1cHBvcnQgZm9yIHRoZSBvbi1jaGlwIE9IQ0kgJiBFSENJIGNvbnRyb2xsZXIgZm91bmQg b24KKwkgIFNUTWljcm9lbGVjdHJvbmljcyBjb25zdW1lciBlbGVjdHJvbmljcyBTb0Mncy4KKwog Y29uZmlnIFVTQl9IQ0RfVEVTVF9NT0RFCiAJYm9vbCAiSENEIHRlc3QgbW9kZSBzdXBwb3J0Igog CS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUgYi9kcml2 ZXJzL3VzYi9ob3N0L01ha2VmaWxlCmluZGV4IDE0NGMwMzguLmFlMmRiMGIgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvaG9zdC9NYWtlZmls ZQpAQCAtNzcsMyArNzcsNCBAQCBvYmotJChDT05GSUdfVVNCX0hDRF9TU0IpCSs9IHNzYi1oY2Qu bwogb2JqLSQoQ09ORklHX1VTQl9GVVNCSDIwMF9IQ0QpCSs9IGZ1c2JoMjAwLWhjZC5vCiBvYmot JChDT05GSUdfVVNCX0ZPVEcyMTBfSENEKQkrPSBmb3RnMjEwLWhjZC5vCiBvYmotJChDT05GSUdf VVNCX01BWDM0MjFfSENEKQkrPSBtYXgzNDIxLWhjZC5vCitvYmotJChDT05GSUdfVVNCX0hDRF9T VCkJKz0gZWhjaS1zdC5vIG9oY2ktc3QubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9v aGNpLXN0LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5kZjkwMjhlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Iv aG9zdC9vaGNpLXN0LmMKQEAgLTAsMCArMSwzNDkgQEAKKy8qCisgKiBTVCBPSENJIGRyaXZlcgor ICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTVE1pY3JvZWxlY3Ryb25pY3Mg4oCTIEFsbCBSaWdo dHMgUmVzZXJ2ZWQKKyAqCisgKiBBdXRob3I6IFBldGVyIEdyaWZmaW4gPHBldGVyLmdyaWZmaW5A bGluYXJvLm9yZz4KKyAqCisgKiBEZXJpdmVkIGZyb20gb2hjaS1wbGF0Zm9ybS5jCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8 bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVk ZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkv cGh5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu dXgvcmVzZXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb2hjaV9wZHJpdmVyLmg+CisjaW5jbHVk ZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2hjZC5oPgorCisjaW5jbHVkZSAi b2hjaS5oIgorCisjZGVmaW5lIFVTQl9NQVhfQ0xLUyAzCisKK3N0cnVjdCBzdF9vaGNpX3BsYXRm b3JtX3ByaXYgeworCXN0cnVjdCBjbGsgKmNsa3NbVVNCX01BWF9DTEtTXTsKKwlzdHJ1Y3QgY2xr ICpjbGs0ODsKKwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0OworCXN0cnVjdCByZXNldF9jb250 cm9sICpwd3I7CisJc3RydWN0IHBoeSAqcGh5OworfTsKKworI2RlZmluZSBEUklWRVJfREVTQyAi T0hDSSBTVE1pY3JvZWxlY3Ryb25pY3MgZHJpdmVyIgorCisjZGVmaW5lIGhjZF90b19vaGNpX3By aXYoaCkgXAorCSgoc3RydWN0IHN0X29oY2lfcGxhdGZvcm1fcHJpdiAqKWhjZF90b19vaGNpKGgp LT5wcml2KQorCitzdGF0aWMgY29uc3QgY2hhciBoY2RfbmFtZVtdID0gIm9oY2ktc3QiOworCitz dGF0aWMgaW50IHN0X29oY2lfcGxhdGZvcm1fcG93ZXJfb24oc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShk ZXYpOworCXN0cnVjdCBzdF9vaGNpX3BsYXRmb3JtX3ByaXYgKnByaXYgPSBoY2RfdG9fb2hjaV9w cml2KGhjZCk7CisJaW50IGNsaywgcmV0OworCisJcmV0ID0gcmVzZXRfY29udHJvbF9kZWFzc2Vy dChwcml2LT5wd3IpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSByZXNldF9j b250cm9sX2RlYXNzZXJ0KHByaXYtPnJzdCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfYXNzZXJ0 X3Bvd2VyOworCisJLyogc29tZSBTb0NzIGRvbid0IGhhdmUgYSBkZWRpY2F0ZWQgNDhNaHogY2xv Y2ssIGJ1dCB0aG9zZSB0aGF0IGRvCisJICAgbmVlZCB0aGUgcmF0ZSB0byBiZSBleHBsaWNpdGx5 IHNldCAqLworCWlmIChwcml2LT5jbGs0OCkgeworCQlyZXQgPSBjbGtfc2V0X3JhdGUocHJpdi0+ Y2xrNDgsIDQ4MDAwMDAwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2Fzc2VydF9yZXNldDsK Kwl9CisKKwlmb3IgKGNsayA9IDA7IGNsayA8IFVTQl9NQVhfQ0xLUyAmJiBwcml2LT5jbGtzW2Ns a107IGNsaysrKSB7CisJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5jbGtzW2Nsa10p OworCQlpZiAocmV0KQorCQkJZ290byBlcnJfZGlzYWJsZV9jbGtzOworCX0KKworCXJldCA9IHBo eV9pbml0KHByaXYtPnBoeSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZGlzYWJsZV9jbGtzOwor CisJcmV0ID0gcGh5X3Bvd2VyX29uKHByaXYtPnBoeSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJf ZXhpdF9waHk7CisKKwlyZXR1cm4gMDsKKworZXJyX2V4aXRfcGh5OgorCXBoeV9leGl0KHByaXYt PnBoeSk7CitlcnJfZGlzYWJsZV9jbGtzOgorCXdoaWxlICgtLWNsayA+PSAwKQorCQljbGtfZGlz YWJsZV91bnByZXBhcmUocHJpdi0+Y2xrc1tjbGtdKTsKK2Vycl9hc3NlcnRfcmVzZXQ6CisJcmVz ZXRfY29udHJvbF9hc3NlcnQocHJpdi0+cnN0KTsKK2Vycl9hc3NlcnRfcG93ZXI6CisJcmVzZXRf Y29udHJvbF9hc3NlcnQocHJpdi0+cHdyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2 b2lkIHN0X29oY2lfcGxhdGZvcm1fcG93ZXJfb2ZmKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRl dikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsK KwlzdHJ1Y3Qgc3Rfb2hjaV9wbGF0Zm9ybV9wcml2ICpwcml2ID0gaGNkX3RvX29oY2lfcHJpdiho Y2QpOworCisJaW50IGNsazsKKworCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHByaXYtPnB3cik7CisK KwlyZXNldF9jb250cm9sX2Fzc2VydChwcml2LT5yc3QpOworCisJcGh5X3Bvd2VyX29mZihwcml2 LT5waHkpOworCisJcGh5X2V4aXQocHJpdi0+cGh5KTsKKworCWZvciAoY2xrID0gVVNCX01BWF9D TEtTIC0gMTsgY2xrID49IDA7IGNsay0tKQorCQlpZiAocHJpdi0+Y2xrc1tjbGtdKQorCQkJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmNsa3NbY2xrXSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg aGNfZHJpdmVyIF9fcmVhZF9tb3N0bHkgb2hjaV9wbGF0Zm9ybV9oY19kcml2ZXI7CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgb2hjaV9kcml2ZXJfb3ZlcnJpZGVzIHBsYXRmb3JtX292ZXJyaWRlcyBf X2luaXRjb25zdCA9IHsKKwkucHJvZHVjdF9kZXNjID0JCSJTVCBPSENJIGNvbnRyb2xsZXIiLAor CS5leHRyYV9wcml2X3NpemUgPQlzaXplb2Yoc3RydWN0IHN0X29oY2lfcGxhdGZvcm1fcHJpdiks Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9vaGNpX3BkYXRhIG9oY2lfcGxhdGZvcm1fZGVmYXVs dHMgPSB7CisJLnBvd2VyX29uID0JCXN0X29oY2lfcGxhdGZvcm1fcG93ZXJfb24sCisJLnBvd2Vy X3N1c3BlbmQgPQlzdF9vaGNpX3BsYXRmb3JtX3Bvd2VyX29mZiwKKwkucG93ZXJfb2ZmID0JCXN0 X29oY2lfcGxhdGZvcm1fcG93ZXJfb2ZmLAorfTsKKworc3RhdGljIGludCBzdF9vaGNpX3BsYXRm b3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hj ZCAqaGNkOworCXN0cnVjdCByZXNvdXJjZSAqcmVzX21lbTsKKwlzdHJ1Y3QgdXNiX29oY2lfcGRh dGEgKnBkYXRhID0gJm9oY2lfcGxhdGZvcm1fZGVmYXVsdHM7CisJc3RydWN0IHN0X29oY2lfcGxh dGZvcm1fcHJpdiAqcHJpdjsKKwlzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2k7CisJaW50IGVyciwgaXJx LCBjbGsgPSAwOworCisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwor CWlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZf ZXJyKCZkZXYtPmRldiwgIm5vIGlycSBwcm92aWRlZCIpOworCQlyZXR1cm4gaXJxOworCX0KKwor CXJlc19tZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7 CisJaWYgKCFyZXNfbWVtKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibm8gbWVtb3J5IHJlc291 cmNlIHByb3ZpZGVkIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJaGNkID0gdXNiX2NyZWF0 ZV9oY2QoJm9oY2lfcGxhdGZvcm1faGNfZHJpdmVyLCAmZGV2LT5kZXYsCisJCQlkZXZfbmFtZSgm ZGV2LT5kZXYpKTsKKwlpZiAoIWhjZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9z ZXRfZHJ2ZGF0YShkZXYsIGhjZCk7CisJZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHBkYXRhOwor CXByaXYgPSBoY2RfdG9fb2hjaV9wcml2KGhjZCk7CisJb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7 CisKKwlwcml2LT5waHkgPSBkZXZtX3BoeV9nZXQoJmRldi0+ZGV2LCAidXNiIik7CisJaWYgKElT X0VSUihwcml2LT5waHkpKSB7CisJCWVyciA9IFBUUl9FUlIocHJpdi0+cGh5KTsKKwkJZ290byBl cnJfcHV0X2hjZDsKKwl9CisKKwlmb3IgKGNsayA9IDA7IGNsayA8IFVTQl9NQVhfQ0xLUzsgY2xr KyspIHsKKwkJcHJpdi0+Y2xrc1tjbGtdID0gb2ZfY2xrX2dldChkZXYtPmRldi5vZl9ub2RlLCBj bGspOworCQlpZiAoSVNfRVJSKHByaXYtPmNsa3NbY2xrXSkpIHsKKwkJCWVyciA9IFBUUl9FUlIo cHJpdi0+Y2xrc1tjbGtdKTsKKwkJCWlmIChlcnIgPT0gLUVQUk9CRV9ERUZFUikKKwkJCQlnb3Rv IGVycl9wdXRfY2xrczsKKwkJCXByaXYtPmNsa3NbY2xrXSA9IE5VTEw7CisJCQlicmVhazsKKwkJ fQorCX0KKworCS8qIHNvbWUgU29DcyBkb24ndCBoYXZlIGEgZGVkaWNhdGVkIDQ4TWh6IGNsb2Nr LCBidXQgdGhvc2UgdGhhdAorCSAgIGRvIG5lZWQgdGhlIHJhdGUgdG8gYmUgZXhwbGljaXRseSBz ZXQgKi8KKwlwcml2LT5jbGs0OCA9IGRldm1fY2xrX2dldCgmZGV2LT5kZXYsICJjbGs0OCIpOwor CWlmIChJU19FUlIocHJpdi0+Y2xrNDgpKSB7CisJCWRldl9pbmZvKCZkZXYtPmRldiwgIjQ4TUh6 IGNsayBub3QgZm91bmRcbiIpOworCQlwcml2LT5jbGs0OCA9IE5VTEw7CisJfQorCisJcHJpdi0+ cHdyID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9vcHRpb25hbCgmZGV2LT5kZXYsICJwb3dlciIp OworCWlmIChJU19FUlIocHJpdi0+cHdyKSkgeworCQllcnIgPSBQVFJfRVJSKHByaXYtPnB3cik7 CisJCWdvdG8gZXJyX3B1dF9jbGtzOworCX0KKworCXByaXYtPnJzdCA9IGRldm1fcmVzZXRfY29u dHJvbF9nZXRfb3B0aW9uYWwoJmRldi0+ZGV2LCAic29mdHJlc2V0Iik7CisJaWYgKElTX0VSUihw cml2LT5yc3QpKSB7CisJCWVyciA9IFBUUl9FUlIocHJpdi0+cnN0KTsKKwkJZ290byBlcnJfcHV0 X2Nsa3M7CisJfQorCisJaWYgKHBkYXRhLT5wb3dlcl9vbikgeworCQllcnIgPSBwZGF0YS0+cG93 ZXJfb24oZGV2KTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycl9wb3dlcjsKKwl9CisKKwlo Y2QtPnJzcmNfc3RhcnQgPSByZXNfbWVtLT5zdGFydDsKKwloY2QtPnJzcmNfbGVuID0gcmVzb3Vy Y2Vfc2l6ZShyZXNfbWVtKTsKKworCWhjZC0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgm ZGV2LT5kZXYsIHJlc19tZW0pOworCWlmIChJU19FUlIoaGNkLT5yZWdzKSkgeworCQllcnIgPSBQ VFJfRVJSKGhjZC0+cmVncyk7CisJCWdvdG8gZXJyX3Bvd2VyOworCX0KKwllcnIgPSB1c2JfYWRk X2hjZChoY2QsIGlycSwgSVJRRl9TSEFSRUQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3Bvd2Vy OworCisJZGV2aWNlX3dha2V1cF9lbmFibGUoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOworCisJcGxh dGZvcm1fc2V0X2RydmRhdGEoZGV2LCBoY2QpOworCisJcmV0dXJuIGVycjsKKworZXJyX3Bvd2Vy OgorCWlmIChwZGF0YS0+cG93ZXJfb2ZmKQorCQlwZGF0YS0+cG93ZXJfb2ZmKGRldik7CisKK2Vy cl9wdXRfY2xrczoKKwl3aGlsZSAoLS1jbGsgPj0gMCkKKwkJY2xrX3B1dChwcml2LT5jbGtzW2Ns a10pOworZXJyX3B1dF9oY2Q6CisJaWYgKHBkYXRhID09ICZvaGNpX3BsYXRmb3JtX2RlZmF1bHRz KQorCQlkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gTlVMTDsKKworCXVzYl9wdXRfaGNkKGhjZCk7 CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHN0X29oY2lfcGxhdGZvcm1fcmVtb3Zl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0g cGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX29oY2lfcGRhdGEgKnBkYXRh ID0gZGV2X2dldF9wbGF0ZGF0YSgmZGV2LT5kZXYpOworCXN0cnVjdCBzdF9vaGNpX3BsYXRmb3Jt X3ByaXYgKnByaXYgPSBoY2RfdG9fb2hjaV9wcml2KGhjZCk7CisJaW50IGNsazsKKworCXVzYl9y ZW1vdmVfaGNkKGhjZCk7CisKKwlpZiAocGRhdGEtPnBvd2VyX29mZikKKwkJcGRhdGEtPnBvd2Vy X29mZihkZXYpOworCisKKwlmb3IgKGNsayA9IDA7IGNsayA8IFVTQl9NQVhfQ0xLUyAmJiBwcml2 LT5jbGtzW2Nsa107IGNsaysrKQorCQljbGtfcHV0KHByaXYtPmNsa3NbY2xrXSk7CisKKwl1c2Jf cHV0X2hjZChoY2QpOworCisJaWYgKHBkYXRhID09ICZvaGNpX3BsYXRmb3JtX2RlZmF1bHRzKQor CQlkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gTlVMTDsKKworCXJldHVybiAwOworfQorCisjaWZk ZWYgQ09ORklHX1BNX1NMRUVQCisKK3N0YXRpYyBpbnQgc3Rfb2hjaV9zdXNwZW5kKHN0cnVjdCBk ZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRl dik7CisJc3RydWN0IHVzYl9vaGNpX3BkYXRhICpwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsK KwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0KKwkJY29udGFpbmVyX29mKGRldiwgc3Ry dWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKKwlib29sIGRvX3dha2V1cCA9IGRldmljZV9tYXlf d2FrZXVwKGRldik7CisJaW50IHJldDsKKworCXJldCA9IG9oY2lfc3VzcGVuZChoY2QsIGRvX3dh a2V1cCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChwZGF0YS0+cG93ZXJfc3Vz cGVuZCkKKwkJcGRhdGEtPnBvd2VyX3N1c3BlbmQocGRldik7CisKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW50IHN0X29oY2lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1 Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9vaGNp X3BkYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoZGV2KTsKKwlzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2ID0KKwkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSwgZGV2KTsKKwlpbnQgZXJyOworCisJaWYgKHBkYXRhLT5wb3dlcl9vbikgeworCQllcnIgPSBw ZGF0YS0+cG93ZXJfb24ocGRldik7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9 CisKKwlvaGNpX3Jlc3VtZShoY2QsIGZhbHNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIFNJ TVBMRV9ERVZfUE1fT1BTKHN0X29oY2lfcG1fb3BzLCBzdF9vaGNpX3N1c3BlbmQsIHN0X29oY2lf cmVzdW1lKTsKKworI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLworCitzdGF0aWMgY29uc3Qg c3RydWN0IG9mX2RldmljZV9pZCBzdF9vaGNpX3BsYXRmb3JtX2lkc1tdID0geworCXsgLmNvbXBh dGlibGUgPSAic3Qsc3Qtb2hjaS0zMDB4IiwgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0KK307CitN T0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzdF9vaGNpX3BsYXRmb3JtX2lkcyk7CisKK3N0YXRpYyBz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZQkJ PSBzdF9vaGNpX3BsYXRmb3JtX3Byb2JlLAorCS5yZW1vdmUJCT0gc3Rfb2hjaV9wbGF0Zm9ybV9y ZW1vdmUsCisJLnNodXRkb3duCT0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKKwkuZHJpdmVy CQk9IHsKKwkJLm5hbWUJPSAic3Qtb2hjaSIsCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCisJCS5w bQk9ICZzdF9vaGNpX3BtX29wcywKKyNlbmRpZgorCQkub2ZfbWF0Y2hfdGFibGUgPSBzdF9vaGNp X3BsYXRmb3JtX2lkcywKKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBvaGNpX3BsYXRmb3Jt X2luaXQodm9pZCkKK3sKKwlpZiAodXNiX2Rpc2FibGVkKCkpCisJCXJldHVybiAtRU5PREVWOwor CisJcHJfaW5mbygiJXM6ICIgRFJJVkVSX0RFU0MgIlxuIiwgaGNkX25hbWUpOworCisJb2hjaV9p bml0X2RyaXZlcigmb2hjaV9wbGF0Zm9ybV9oY19kcml2ZXIsICZwbGF0Zm9ybV9vdmVycmlkZXMp OworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9oY2lfcGxhdGZvcm1fZHJpdmVy KTsKK30KK21vZHVsZV9pbml0KG9oY2lfcGxhdGZvcm1faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9f ZXhpdCBvaGNpX3BsYXRmb3JtX2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5y ZWdpc3Rlcigmb2hjaV9wbGF0Zm9ybV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQob2hjaV9wbGF0 Zm9ybV9jbGVhbnVwKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVM RV9BVVRIT1IoIlBldGVyIEdyaWZmaW4gPHBldGVyLmdyaWZmaW5AbGluYXJvLm9yZz4iKTsKK01P RFVMRV9MSUNFTlNFKCJHUEwiKTsKLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=