From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yannick Fertre Subject: [PATCH v5 04/10] drm/stm: Add STM32 LTDC driver Date: Tue, 28 Mar 2017 11:44:47 +0200 Message-ID: <1490694293-18358-5-git-send-email-yannick.fertre@st.com> References: <1490694293-18358-1-git-send-email-yannick.fertre@st.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1490694293-18358-1-git-send-email-yannick.fertre@st.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Alexandre TORGUE , Thierry Reding , David Airlie , Maxime Coquelin , Russell King , Mark Rutland , Rob Herring , Arnd Bergmann , Benjamin Gaignard , Yannick Fertre Cc: devicetree@vger.kernel.org, kernel@stlinux.com, Philippe Cornu , Fabien Dessenne , dri-devel@lists.freedesktop.org, Mickael Reulier , Vincent Abriou , Gabriel FERNANDEZ , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org VGhpcyBjb250cm9sbGVyIHByb3ZpZGVzIG91dHB1dCBzaWduYWxzIHRvIGludGVyZmFjZSBkaXJl Y3RseSBhIHZhcmlldHkKb2YgTENEIGFuZCBURlQgcGFuZWxzLiBUaGVzZSBvdXRwdXQgc2lnbmFs cyBhcmU6IFJHQiBzaWduYWxzCih1cCB0byAyNGJwcCksIHZlcnRpY2FsICYgaG9yaXpvbnRhbCBz eW5jaHJvbmlzYXRpb25zLCBkYXRhIGVuYWJsZSBhbmQKdGhlIHBpeGVsIGNsb2NrLgoKU2lnbmVk LW9mZi1ieTogWWFubmljayBGZXJ0cmUgPHlhbm5pY2suZmVydHJlQHN0LmNvbT4KLS0tCiBkcml2 ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgIHwgICAgMyArLQogZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3N0bS9LY29uZmlnICB8ICAgMTYgKwog ZHJpdmVycy9ncHUvZHJtL3N0bS9NYWtlZmlsZSB8ICAgIDcgKwogZHJpdmVycy9ncHUvZHJtL3N0 bS9kcnYuYyAgICB8ICAyMjEgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9zdG0vbHRkYy5jICAg fCAxMjEwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVy cy9ncHUvZHJtL3N0bS9sdGRjLmggICB8ICAgNDAgKysKIDcgZmlsZXMgY2hhbmdlZCwgMTQ5NyBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3N0bS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3N0 bS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9zdG0vZHJ2LmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vc3RtL2x0ZGMuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9zdG0vbHRkYy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCA3OGQ3ZmMw Li5kZDU3NjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2 ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMjAzLDcgKzIwMyw2IEBAIGNvbmZpZyBEUk1fVkdFTQog CSAgYXMgdXNlZCBieSBNZXNhJ3Mgc29mdHdhcmUgcmVuZGVyZXIgZm9yIGVuaGFuY2VkIHBlcmZv cm1hbmNlLgogCSAgSWYgTSBpcyBzZWxlY3RlZCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZn ZW0uCiAKLQogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL0tjb25maWciCiAKIHNvdXJj ZSAiZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWciCkBAIC0yNDYsNiArMjQ1LDggQEAg c291cmNlICJkcml2ZXJzL2dwdS9kcm0vZnNsLWRjdS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZl cnMvZ3B1L2RybS90ZWdyYS9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9zdG0v S2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyIKIAogc291 cmNlICJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggNTlmMGY5 Yi4uYWE2MmRlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtODIsNiArODIsNyBAQCBvYmotJChDT05GSUdfRFJN X0JPQ0hTKSArPSBib2Nocy8KIG9iai0kKENPTkZJR19EUk1fVklSVElPX0dQVSkgKz0gdmlydGlv Lwogb2JqLSQoQ09ORklHX0RSTV9NU00pICs9IG1zbS8KIG9iai0kKENPTkZJR19EUk1fVEVHUkEp ICs9IHRlZ3JhLworb2JqLSQoQ09ORklHX0RSTV9TVE0pICs9IHN0bS8KIG9iai0kKENPTkZJR19E Uk1fU1RJKSArPSBzdGkvCiBvYmotJChDT05GSUdfRFJNX0lNWCkgKz0gaW14Lwogb2JqLSQoQ09O RklHX0RSTV9NRURJQVRFSykgKz0gbWVkaWF0ZWsvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vc3RtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vc3RtL0tjb25maWcKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM0ODE3ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9zdG0vS2NvbmZpZwpAQCAtMCwwICsxLDE2IEBACitjb25maWcgRFJNX1NUTQor CXRyaXN0YXRlICJEUk0gU3VwcG9ydCBmb3IgU1RNaWNyb2VsZWN0cm9uaWNzIFNvQyBTZXJpZXMi CisJZGVwZW5kcyBvbiBEUk0gJiYgKEFSQ0hfU1RNMzIgfHwgQVJDSF9NVUxUSVBMQVRGT1JNKQor CXNlbGVjdCBEUk1fS01TX0hFTFBFUgorCXNlbGVjdCBEUk1fR0VNX0NNQV9IRUxQRVIKKwlzZWxl Y3QgRFJNX0tNU19DTUFfSEVMUEVSCisJc2VsZWN0IERSTV9QQU5FTAorCXNlbGVjdCBWSURFT01P REVfSEVMUEVSUworCXNlbGVjdCBGQl9QUk9WSURFX0dFVF9GQl9VTk1BUFBFRF9BUkVBCisJZGVm YXVsdCB5CisKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIG9uLWNoaXAgZGlzcGxh eSBjb250cm9sbGVyIG9uCisJICBTVE1pY3JvZWxlY3Ryb25pY3MgU1RNMzIgTUNVcy4KKwkgIFRv IGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1 bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHN0bS1kcm0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vc3RtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3N0bS9NYWtlZmlsZQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTE0ZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL3N0bS9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKK2NjZmxhZ3MteSA6PSAt SWluY2x1ZGUvZHJtCisKK3N0bS1kcm0teSA6PSBcCisJZHJ2Lm8gXAorCWx0ZGMubworCitvYmot JChDT05GSUdfRFJNX1NUTSkgKz0gc3RtLWRybS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vc3RtL2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3N0bS9kcnYuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi44M2FiNDhmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL3N0bS9kcnYuYwpAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg U1RNaWNyb2VsZWN0cm9uaWNzIFNBIDIwMTcKKyAqCisgKiBBdXRob3JzOiBQaGlsaXBwZSBDb3Ju dSA8cGhpbGlwcGUuY29ybnVAc3QuY29tPgorICogICAgICAgICAgWWFubmljayBGZXJ0cmUgPHlh bm5pY2suZmVydHJlQHN0LmNvbT4KKyAqICAgICAgICAgIEZhYmllbiBEZXNzZW5uZSA8ZmFiaWVu LmRlc3Nlbm5lQHN0LmNvbT4KKyAqICAgICAgICAgIE1pY2thZWwgUmV1bGllciA8bWlja2FlbC5y ZXVsaWVyQHN0LmNvbT4KKyAqCisgKiBMaWNlbnNlIHRlcm1zOiAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgKEdQTCksIHZlcnNpb24gMgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb21wb25l bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVy Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgorCisjaW5jbHVkZSAibHRk Yy5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FCQkic3RtIgorI2RlZmluZSBEUklWRVJfREVTQwkJ IlNUTWljcm9lbGVjdHJvbmljcyBTb0MgRFJNIgorI2RlZmluZSBEUklWRVJfREFURQkJIjIwMTcw MzMwIgorI2RlZmluZSBEUklWRVJfTUFKT1IJCTEKKyNkZWZpbmUgRFJJVkVSX01JTk9SCQkwCisj ZGVmaW5lIERSSVZFUl9QQVRDSF9MRVZFTAkwCisKKyNkZWZpbmUgU1RNX01BWF9GQl9XSURUSAky MDQ4CisjZGVmaW5lIFNUTV9NQVhfRkJfSEVJR0hUCTIwNDggLyogc2FtZSBhcyB3aWR0aCB0byBo YW5kbGUgb3JpZW50YXRpb24gKi8KKworc3RhdGljIHZvaWQgZHJ2X291dHB1dF9wb2xsX2NoYW5n ZWQoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYpCit7CisJc3RydWN0IGx0ZGNfZGV2aWNlICpsZGV2 ID0gZGRldi0+ZGV2X3ByaXZhdGU7CisKKwlkcm1fZmJkZXZfY21hX2hvdHBsdWdfZXZlbnQobGRl di0+ZmJkZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5j cyBkcnZfbW9kZV9jb25maWdfZnVuY3MgPSB7CisJLmZiX2NyZWF0ZSA9IGRybV9mYl9jbWFfY3Jl YXRlLAorCS5vdXRwdXRfcG9sbF9jaGFuZ2VkID0gZHJ2X291dHB1dF9wb2xsX2NoYW5nZWQsCisJ LmF0b21pY19jaGVjayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLAorCS5hdG9taWNfY29tbWl0 ID0gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0LAorfTsKKworc3RhdGljIHZvaWQgZHJ2X2xhc3Rj bG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldikKK3sKKwlzdHJ1Y3QgbHRkY19kZXZpY2UgKmxk ZXYgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKworCURSTV9ERUJVRygiJXNcbiIsIF9fZnVuY19fKTsK KworCWRybV9mYmRldl9jbWFfcmVzdG9yZV9tb2RlKGxkZXYtPmZiZGV2KTsKK30KKworREVGSU5F X0RSTV9HRU1fQ01BX0ZPUFMoZHJ2X2RyaXZlcl9mb3BzKTsKKworc3RhdGljIHN0cnVjdCBkcm1f ZHJpdmVyIGRydl9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9NT0RFU0VU IHwgRFJJVkVSX0dFTSB8IERSSVZFUl9QUklNRSB8CisJCQkgICBEUklWRVJfQVRPTUlDLAorCS5s YXN0Y2xvc2UgPSBkcnZfbGFzdGNsb3NlLAorCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLmRlc2Mg PSBEUklWRVJfREVTQywKKwkuZGF0ZSA9IERSSVZFUl9EQVRFLAorCS5tYWpvciA9IERSSVZFUl9N QUpPUiwKKwkubWlub3IgPSBEUklWRVJfTUlOT1IsCisJLnBhdGNobGV2ZWwgPSBEUklWRVJfUEFU Q0hfTEVWRUwsCisJLmZvcHMgPSAmZHJ2X2RyaXZlcl9mb3BzLAorCS5kdW1iX2NyZWF0ZSA9IGRy bV9nZW1fY21hX2R1bWJfY3JlYXRlLAorCS5kdW1iX21hcF9vZmZzZXQgPSBkcm1fZ2VtX2NtYV9k dW1iX21hcF9vZmZzZXQsCisJLmR1bWJfZGVzdHJveSA9IGRybV9nZW1fZHVtYl9kZXN0cm95LAor CS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJp bWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9mcmVl X29iamVjdF91bmxvY2tlZCA9IGRybV9nZW1fY21hX2ZyZWVfb2JqZWN0LAorCS5nZW1fdm1fb3Bz ID0gJmRybV9nZW1fY21hX3ZtX29wcywKKwkuZ2VtX3ByaW1lX2V4cG9ydCA9IGRybV9nZW1fcHJp bWVfZXhwb3J0LAorCS5nZW1fcHJpbWVfaW1wb3J0ID0gZHJtX2dlbV9wcmltZV9pbXBvcnQsCisJ LmdlbV9wcmltZV9nZXRfc2dfdGFibGUgPSBkcm1fZ2VtX2NtYV9wcmltZV9nZXRfc2dfdGFibGUs CisJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBkcm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRf c2dfdGFibGUsCisJLmdlbV9wcmltZV92bWFwID0gZHJtX2dlbV9jbWFfcHJpbWVfdm1hcCwKKwku Z2VtX3ByaW1lX3Z1bm1hcCA9IGRybV9nZW1fY21hX3ByaW1lX3Z1bm1hcCwKKwkuZ2VtX3ByaW1l X21tYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwLAorCS5lbmFibGVfdmJsYW5rID0gbHRkY19j cnRjX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbHRkY19jcnRjX2Rpc2FibGVf dmJsYW5rLAorfTsKKworc3RhdGljIGludCBkcnZfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGRl dikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNl KGRkZXYtPmRldik7CisJc3RydWN0IGRybV9mYmRldl9jbWEgKmZiZGV2OworCXN0cnVjdCBsdGRj X2RldmljZSAqbGRldjsKKwlpbnQgcmV0OworCisJRFJNX0RFQlVHKCIlc1xuIiwgX19mdW5jX18p OworCisJbGRldiA9IGRldm1fa3phbGxvYyhkZGV2LT5kZXYsIHNpemVvZigqbGRldiksIEdGUF9L RVJORUwpOworCWlmICghbGRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZGV2LT5kZXZfcHJp dmF0ZSA9ICh2b2lkICopbGRldjsKKworCWRybV9tb2RlX2NvbmZpZ19pbml0KGRkZXYpOworCisJ LyoKKwkgKiBzZXQgbWF4IHdpZHRoIGFuZCBoZWlnaHQgYXMgZGVmYXVsdCB2YWx1ZS4KKwkgKiB0 aGlzIHZhbHVlIHdvdWxkIGJlIHVzZWQgdG8gY2hlY2sgZnJhbWVidWZmZXIgc2l6ZSBsaW1pdGF0 aW9uCisJICogYXQgZHJtX21vZGVfYWRkZmIoKS4KKwkgKi8KKwlkZGV2LT5tb2RlX2NvbmZpZy5t aW5fd2lkdGggPSAwOworCWRkZXYtPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSAwOworCWRkZXYt Pm1vZGVfY29uZmlnLm1heF93aWR0aCA9IFNUTV9NQVhfRkJfV0lEVEg7CisJZGRldi0+bW9kZV9j b25maWcubWF4X2hlaWdodCA9IFNUTV9NQVhfRkJfSEVJR0hUOworCWRkZXYtPm1vZGVfY29uZmln LmZ1bmNzID0gJmRydl9tb2RlX2NvbmZpZ19mdW5jczsKKworCXJldCA9IGx0ZGNfbG9hZChkZGV2 KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCWRybV9tb2RlX2NvbmZpZ19yZXNldChkZGV2 KTsKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoZGRldik7CisKKwlpZiAoZGRldi0+bW9kZV9j b25maWcubnVtX2Nvbm5lY3RvcikgeworCQlsZGV2ID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJCWZi ZGV2ID0gZHJtX2ZiZGV2X2NtYV9pbml0KGRkZXYsIDE2LAorCQkJCQkgICBkZGV2LT5tb2RlX2Nv bmZpZy5udW1fY29ubmVjdG9yKTsKKwkJaWYgKElTX0VSUihmYmRldikpIHsKKwkJCURSTV9ERUJV RygiV2FybmluZzogZmFpbHMgdG8gY3JlYXRlIGZiZGV2XG4iKTsKKwkJCWZiZGV2ID0gTlVMTDsK KwkJfQorCQlsZGV2LT5mYmRldiA9IGZiZGV2OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRh KHBkZXYsIGRkZXYpOworCisJcmV0dXJuIDA7CitlcnI6CisJZHJtX21vZGVfY29uZmlnX2NsZWFu dXAoZGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZHJ2X3VubG9hZChzdHJ1 Y3QgZHJtX2RldmljZSAqZGRldikKK3sKKwlzdHJ1Y3QgbHRkY19kZXZpY2UgKmxkZXYgPSBkZGV2 LT5kZXZfcHJpdmF0ZTsKKworCURSTV9ERUJVRygiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChs ZGV2LT5mYmRldikgeworCQlkcm1fZmJkZXZfY21hX2ZpbmkobGRldi0+ZmJkZXYpOworCQlsZGV2 LT5mYmRldiA9IE5VTEw7CisJfQorCWRybV9rbXNfaGVscGVyX3BvbGxfZmluaShkZGV2KTsKKwls dGRjX3VubG9hZChkZGV2KTsKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkZGV2KTsKK30KKwor c3RhdGljIGludCBzdG1fZHJtX3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGRldjsKKwlpbnQgcmV0OworCisJRFJNX0RFQlVHKCIlc1xuIiwgX19mdW5jX18p OworCisJZG1hX3NldF9jb2hlcmVudF9tYXNrKGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisKKwlk ZGV2ID0gZHJtX2Rldl9hbGxvYygmZHJ2X2RyaXZlciwgZGV2KTsKKwlpZiAoSVNfRVJSKGRkZXYp KQorCQlyZXR1cm4gUFRSX0VSUihkZGV2KTsKKworCXJldCA9IGRydl9sb2FkKGRkZXYpOworCWlm IChyZXQpCisJCWdvdG8gZXJyX3VucmVmOworCisJcmV0ID0gZHJtX2Rldl9yZWdpc3RlcihkZGV2 LCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl91bnJlZjsKKworCXJldHVybiAwOworCitlcnJf dW5yZWY6CisJZHJtX2Rldl91bnJlZihkZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbnQgc3RtX2RybV9wbGF0Zm9ybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk ZXYpOworCisJRFJNX0RFQlVHKCIlc1xuIiwgX19mdW5jX18pOworCisJZHJtX2Rldl91bnJlZ2lz dGVyKGRkZXYpOworCWRydl91bmxvYWQoZGRldik7CisJZHJtX2Rldl91bnJlZihkZGV2KTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkcnZfZHRf aWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJzdCxzdG0zMi1sdGRjIn0sCisJeyAvKiBlbmQg bm9kZSAqLyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGRydl9kdF9pZHMpOworCitz dGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdG1fZHJtX3BsYXRmb3JtX2RyaXZlciA9IHsK KwkucHJvYmUgPSBzdG1fZHJtX3BsYXRmb3JtX3Byb2JlLAorCS5yZW1vdmUgPSBzdG1fZHJtX3Bs YXRmb3JtX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IERSSVZFUl9OQU1FLAorCQku b2ZfbWF0Y2hfdGFibGUgPSBkcnZfZHRfaWRzLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1f ZHJpdmVyKHN0bV9kcm1fcGxhdGZvcm1fZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiUGhpbGlw cGUgQ29ybnUgPHBoaWxpcHBlLmNvcm51QHN0LmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIllhbm5p Y2sgRmVydHJlIDx5YW5uaWNrLmZlcnRyZUBzdC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJGYWJp ZW4gRGVzc2VubmUgPGZhYmllbi5kZXNzZW5uZUBzdC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJN aWNrYWVsIFJldWxpZXIgPG1pY2thZWwucmV1bGllckBzdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJ UFRJT04oIlNUTWljcm9lbGVjdHJvbmljcyBTVCBEUk0gTFREQyBkcml2ZXIiKTsKK01PRFVMRV9M SUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdG0vbHRkYy5j IGIvZHJpdmVycy9ncHUvZHJtL3N0bS9sdGRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uOTIyZjAyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdG0v bHRkYy5jCkBAIC0wLDAgKzEsMTIxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgU1RNaWNyb2Vs ZWN0cm9uaWNzIFNBIDIwMTcKKyAqCisgKiBBdXRob3JzOiBQaGlsaXBwZSBDb3JudSA8cGhpbGlw cGUuY29ybnVAc3QuY29tPgorICogICAgICAgICAgWWFubmljayBGZXJ0cmUgPHlhbm5pY2suZmVy dHJlQHN0LmNvbT4KKyAqICAgICAgICAgIEZhYmllbiBEZXNzZW5uZSA8ZmFiaWVuLmRlc3Nlbm5l QHN0LmNvbT4KKyAqICAgICAgICAgIE1pY2thZWwgUmV1bGllciA8bWlja2FlbC5yZXVsaWVyQHN0 LmNvbT4KKyAqCisgKiBMaWNlbnNlIHRlcm1zOiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug KEdQTCksIHZlcnNpb24gMgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRl IDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5j bHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgorCisjaW5j bHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9m Yl9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fb2YuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KKworI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5o PgorCisjaW5jbHVkZSAibHRkYy5oIgorCisjZGVmaW5lIE5CX0NSVEMgMQorI2RlZmluZSBDUlRD X01BU0sgR0VOTUFTSyhOQl9DUlRDIC0gMSwgMCkKKworI2RlZmluZSBNQVhfSVJRIDQKKworI2Rl ZmluZSBIV1ZFUl8xMDIwMCAweDAxMDIwMAorI2RlZmluZSBIV1ZFUl8xMDMwMCAweDAxMDMwMAor I2RlZmluZSBIV1ZFUl8yMDEwMSAweDAyMDEwMQorCisvKgorICogVGhlIGFkZHJlc3Mgb2Ygc29t ZSByZWdpc3RlcnMgZGVwZW5kcyBvbiB0aGUgSFcgdmVyc2lvbjogc3VjaCByZWdpc3RlcnMgaGF2 ZQorICogYW4gZXh0cmEgb2Zmc2V0IHNwZWNpZmllZCB3aXRoIHJlZ19vZnMuCisgKi8KKyNkZWZp bmUgUkVHX09GU19OT05FCTAKKyNkZWZpbmUgUkVHX09GU180CTQgLyogSW5zZXJ0aW9uIG9mICJM YXllciBDb25maWd1cmF0aW9uIDIiIHJlZyAqLworI2RlZmluZSBSRUdfT0ZTCQkobGRldi0+Y2Fw cy5yZWdfb2ZzKQorI2RlZmluZSBMQVlfT0ZTCQkweDgwCS8qIFJlZ2lzdGVyIE9mZnNldCBiZXR3 ZWVuIDIgbGF5ZXJzICovCisKKy8qIEdsb2JhbCByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5l IExURENfSURSCTB4MDAwMCAvKiBJRGVudGlmaWNhdGlvbiAqLworI2RlZmluZSBMVERDX0xDUgkw eDAwMDQgLyogTGF5ZXIgQ291bnQgKi8KKyNkZWZpbmUgTFREQ19TU0NSCTB4MDAwOCAvKiBTeW5j aHJvbml6YXRpb24gU2l6ZSBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIExURENfQlBDUgkweDAw MEMgLyogQmFjayBQb3JjaCBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIExURENfQVdDUgkweDAw MTAgLyogQWN0aXZlIFdpZHRoIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTFREQ19UV0NSCTB4 MDAxNCAvKiBUb3RhbCBXaWR0aCBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIExURENfR0NSCTB4 MDAxOCAvKiBHbG9iYWwgQ29udHJvbCAqLworI2RlZmluZSBMVERDX0dDMVIJMHgwMDFDIC8qIEds b2JhbCBDb25maWd1cmF0aW9uIDEgKi8KKyNkZWZpbmUgTFREQ19HQzJSCTB4MDAyMCAvKiBHbG9i YWwgQ29uZmlndXJhdGlvbiAyICovCisjZGVmaW5lIExURENfU1JDUgkweDAwMjQgLyogU2hhZG93 IFJlbG9hZCBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIExURENfR0FDUgkweDAwMjggLyogR0Ft bWEgQ29ycmVjdGlvbiAqLworI2RlZmluZSBMVERDX0JDQ1IJMHgwMDJDIC8qIEJhY2tncm91bmQg Q29sb3IgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBMVERDX0lFUgkweDAwMzQgLyogSW50ZXJy dXB0IEVuYWJsZSAqLworI2RlZmluZSBMVERDX0lTUgkweDAwMzggLyogSW50ZXJydXB0IFN0YXR1 cyAqLworI2RlZmluZSBMVERDX0lDUgkweDAwM0MgLyogSW50ZXJydXB0IENsZWFyICovCisjZGVm aW5lIExURENfTElQQ1IJMHgwMDQwIC8qIExpbmUgSW50ZXJydXB0IFBvc2l0aW9uIENvbmZpZ3Vy YXRpb24gKi8KKyNkZWZpbmUgTFREQ19DUFNSCTB4MDA0NCAvKiBDdXJyZW50IFBvc2l0aW9uIFN0 YXR1cyAqLworI2RlZmluZSBMVERDX0NEU1IJMHgwMDQ4IC8qIEN1cnJlbnQgRGlzcGxheSBTdGF0 dXMgKi8KKworLyogTGF5ZXIgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBMVERDX0wxTEMx UgkoMHgwMDgwKQkgICAvKiBMMSBMYXllciBDb25maWd1cmF0aW9uIDEgKi8KKyNkZWZpbmUgTFRE Q19MMUxDMlIJKDB4MDA4NCkJICAgLyogTDEgTGF5ZXIgQ29uZmlndXJhdGlvbiAyICovCisjZGVm aW5lIExURENfTDFDUgkoMHgwMDg0ICsgUkVHX09GUykgLyogTDEgQ29udHJvbCAqLworI2RlZmlu ZSBMVERDX0wxV0hQQ1IJKDB4MDA4OCArIFJFR19PRlMpIC8qIEwxIFdpbmRvdyBIb3IgUG9zaXRp b24gQ29uZmlnICovCisjZGVmaW5lIExURENfTDFXVlBDUgkoMHgwMDhDICsgUkVHX09GUykgLyog TDEgV2luZG93IFZlcnQgUG9zaXRpb24gQ29uZmlnICovCisjZGVmaW5lIExURENfTDFDS0NSCSgw eDAwOTAgKyBSRUdfT0ZTKSAvKiBMMSBDb2xvciBLZXlpbmcgQ29uZmlndXJhdGlvbiAqLworI2Rl ZmluZSBMVERDX0wxUEZDUgkoMHgwMDk0ICsgUkVHX09GUykgLyogTDEgUGl4ZWwgRm9ybWF0IENv bmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTFREQ19MMUNBQ1IJKDB4MDA5OCArIFJFR19PRlMpIC8q IEwxIENvbnN0YW50IEFscGhhIENvbmZpZyAqLworI2RlZmluZSBMVERDX0wxRENDUgkoMHgwMDlD ICsgUkVHX09GUykgLyogTDEgRGVmYXVsdCBDb2xvciBDb25maWd1cmF0aW9uICovCisjZGVmaW5l IExURENfTDFCRkNSCSgweDAwQTAgKyBSRUdfT0ZTKSAvKiBMMSBCbGVuZCBGYWN0b3JzIENvbmZp Z3VyYXRpb24gKi8KKyNkZWZpbmUgTFREQ19MMUZCQkNSCSgweDAwQTQgKyBSRUdfT0ZTKSAvKiBM MSBGcmFtZUJ1ZmZlciBCdXMgQ29udHJvbCAqLworI2RlZmluZSBMVERDX0wxQUZCQ1IJKDB4MDBB OCArIFJFR19PRlMpIC8qIEwxIEF1eEZCIENvbnRyb2wgKi8KKyNkZWZpbmUgTFREQ19MMUNGQkFS CSgweDAwQUMgKyBSRUdfT0ZTKSAvKiBMMSBDb2xvciBGcmFtZUJ1ZmZlciBBZGRyZXNzICovCisj ZGVmaW5lIExURENfTDFDRkJMUgkoMHgwMEIwICsgUkVHX09GUykgLyogTDEgQ29sb3IgRnJhbWVC dWZmZXIgTGVuZ3RoICovCisjZGVmaW5lIExURENfTDFDRkJMTlIJKDB4MDBCNCArIFJFR19PRlMp IC8qIEwxIENvbG9yIEZyYW1lQnVmZmVyIExpbmUgTmIgKi8KKyNkZWZpbmUgTFREQ19MMUFGQkFS CSgweDAwQjggKyBSRUdfT0ZTKSAvKiBMMSBBdXhGQiBBZGRyZXNzICovCisjZGVmaW5lIExURENf TDFBRkJMUgkoMHgwMEJDICsgUkVHX09GUykgLyogTDEgQXV4RkIgTGVuZ3RoICovCisjZGVmaW5l IExURENfTDFBRkJMTlIJKDB4MDBDMCArIFJFR19PRlMpIC8qIEwxIEF1eEZCIExpbmUgTnVtYmVy ICovCisjZGVmaW5lIExURENfTDFDTFVUV1IJKDB4MDBDNCArIFJFR19PRlMpIC8qIEwxIENMVVQg V3JpdGUgKi8KKyNkZWZpbmUgTFREQ19MMVlTMVIJKDB4MDBFMCArIFJFR19PRlMpIC8qIEwxIFlD YkNyIFNjYWxlIDEgKi8KKyNkZWZpbmUgTFREQ19MMVlTMlIJKDB4MDBFNCArIFJFR19PRlMpIC8q IEwxIFlDYkNyIFNjYWxlIDIgKi8KKworLyogQml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIFNT Q1JfVlNICUdFTk1BU0soMTAsIDApCS8qIFZlcnRpY2FsIFN5bmNocm9uaXphdGlvbiBIZWlnaHQg Ki8KKyNkZWZpbmUgU1NDUl9IU1cJR0VOTUFTSygyNywgMTYpCS8qIEhvcml6b250YWwgU3luY2hy b25pemF0aW9uIFdpZHRoICovCisKKyNkZWZpbmUgQlBDUl9BVkJQCUdFTk1BU0soMTAsIDApCS8q IEFjY3VtdWxhdGVkIFZlcnRpY2FsIEJhY2sgUG9yY2ggKi8KKyNkZWZpbmUgQlBDUl9BSEJQCUdF Tk1BU0soMjcsIDE2KQkvKiBBY2N1bXVsYXRlZCBIb3Jpem9udGFsIEJhY2sgUG9yY2ggKi8KKwor I2RlZmluZSBBV0NSX0FBSAlHRU5NQVNLKDEwLCAwKQkvKiBBY2N1bXVsYXRlZCBBY3RpdmUgSGVp Z2h0ICovCisjZGVmaW5lIEFXQ1JfQUFXCUdFTk1BU0soMjcsIDE2KQkvKiBBY2N1bXVsYXRlZCBB Y3RpdmUgV2lkdGggKi8KKworI2RlZmluZSBUV0NSX1RPVEFMSAlHRU5NQVNLKDEwLCAwKQkvKiBU T1RBTCBIZWlnaHQgKi8KKyNkZWZpbmUgVFdDUl9UT1RBTFcJR0VOTUFTSygyNywgMTYpCS8qIFRP VEFMIFdpZHRoICovCisKKyNkZWZpbmUgR0NSX0xURENFTglCSVQoMCkJCS8qIExUREMgRU5hYmxl ICovCisjZGVmaW5lIEdDUl9ERU4JCUJJVCgxNikJCS8qIERpdGhlciBFTmFibGUgKi8KKyNkZWZp bmUgR0NSX1BDUE9MCUJJVCgyOCkJCS8qIFBpeGVsIENsb2NrIFBPTGFyaXR5ICovCisjZGVmaW5l IEdDUl9ERVBPTAlCSVQoMjkpCQkvKiBEYXRhIEVuYWJsZSBQT0xhcml0eSAqLworI2RlZmluZSBH Q1JfVlNQT0wJQklUKDMwKQkJLyogVmVydGljYWwgU3luY2hybyBQT0xhcml0eSAqLworI2RlZmlu ZSBHQ1JfSFNQT0wJQklUKDMxKQkJLyogSG9yaXpvbnRhbCBTeW5jaHJvIFBPTGFyaXR5ICovCisK KyNkZWZpbmUgR0MxUl9XQkNICUdFTk1BU0soMywgMCkJLyogV2lkdGggb2YgQmx1ZSBDSGFubmVs IG91dHB1dCAqLworI2RlZmluZSBHQzFSX1dHQ0gJR0VOTUFTSyg3LCA0KQkvKiBXaWR0aCBvZiBH cmVlbiBDaGFubmVsIG91dHB1dCAqLworI2RlZmluZSBHQzFSX1dSQ0gJR0VOTUFTSygxMSwgOCkJ LyogV2lkdGggb2YgUmVkIENoYW5uZWwgb3V0cHV0ICovCisjZGVmaW5lIEdDMVJfUEJFTglCSVQo MTIpCQkvKiBQcmVjaXNlIEJsZW5kaW5nIEVOYWJsZSAqLworI2RlZmluZSBHQzFSX0RUCQlHRU5N QVNLKDE1LCAxNCkJLyogRGl0aGVyaW5nIFRlY2huaXF1ZSAqLworI2RlZmluZSBHQzFSX0dDVAlH RU5NQVNLKDE5LCAxNykJLyogR2FtbWEgQ29ycmVjdGlvbiBUZWNobmlxdWUgKi8KKyNkZWZpbmUg R0MxUl9TSFJFTglCSVQoMjEpCQkvKiBTSGFkb3cgUmVnaXN0ZXJzIEVOYWJsZWQgKi8KKyNkZWZp bmUgR0MxUl9CQ1AJQklUKDIyKQkJLyogQmFja2dyb3VuZCBDb2xvdXIgUHJvZ3JhbW1hYmxlICov CisjZGVmaW5lIEdDMVJfQkJFTglCSVQoMjMpCQkvKiBCYWNrZ3JvdW5kIEJsZW5kaW5nIEVOYWJs ZWQgKi8KKyNkZWZpbmUgR0MxUl9MTklQCUJJVCgyNCkJCS8qIExpbmUgTnVtYmVyIElSUSBQb3Np dGlvbiAqLworI2RlZmluZSBHQzFSX1RQCQlCSVQoMjUpCQkvKiBUaW1pbmcgUHJvZ3JhbW1hYmxl ICovCisjZGVmaW5lIEdDMVJfSVBQCUJJVCgyNikJCS8qIElSUSBQb2xhcml0eSBQcm9ncmFtbWFi bGUgKi8KKyNkZWZpbmUgR0MxUl9TUFAJQklUKDI3KQkJLyogU3luYyBQb2xhcml0eSBQcm9ncmFt bWFibGUgKi8KKyNkZWZpbmUgR0MxUl9EV1AJQklUKDI4KQkJLyogRGl0aGVyIFdpZHRoIFByb2dy YW1tYWJsZSAqLworI2RlZmluZSBHQzFSX1NUUkVOCUJJVCgyOSkJCS8qIFNUYXR1cyBSZWdpc3Rl cnMgRU5hYmxlZCAqLworI2RlZmluZSBHQzFSX0JNRU4JQklUKDMxKQkJLyogQmxpbmQgTW9kZSBF TmFibGVkICovCisKKyNkZWZpbmUgR0MyUl9FRENBCUJJVCgwKQkJLyogRXh0ZXJuYWwgRGlzcGxh eSBDb250cm9sIEFiaWxpdHkgICovCisjZGVmaW5lIEdDMlJfU1RTQUVOCUJJVCgxKQkJLyogU2xh dmUgVGltaW5nIFN5bmMgQWJpbGl0eSBFTmFibGVkICovCisjZGVmaW5lIEdDMlJfRFZBRU4JQklU KDIpCQkvKiBEdWFsLVZpZXcgQWJpbGl0eSBFTmFibGVkICovCisjZGVmaW5lIEdDMlJfRFBBRU4J QklUKDMpCQkvKiBEdWFsLVBvcnQgQWJpbGl0eSBFTmFibGVkICovCisjZGVmaW5lIEdDMlJfQlcJ CUdFTk1BU0soNiwgNCkJLyogQnVzIFdpZHRoIChsb2cyIG9mIG5iIG9mIGJ5dGVzKSAqLworI2Rl ZmluZSBHQzJSX0VEQ0VOCUJJVCg3KQkJLyogRXh0ZXJuYWwgRGlzcGxheSBDb250cm9sIEVOYWJs ZWQgKi8KKworI2RlZmluZSBTUkNSX0lNUglCSVQoMCkJCS8qIElNbWVkaWF0ZSBSZWxvYWQgKi8K KyNkZWZpbmUgU1JDUl9WQlIJQklUKDEpCQkvKiBWZXJ0aWNhbCBCbGFua2luZyBSZWxvYWQgKi8K KworI2RlZmluZSBCQ0NSX0JDQkxBQ0sJMHgwMAkJLyogQmFja2dyb3VuZCBDb2xvciBCTEFDSyAq LworI2RlZmluZSBCQ0NSX0JDQkxVRQlHRU5NQVNLKDcsIDApCS8qIEJhY2tncm91bmQgQ29sb3Ig QkxVRSAqLworI2RlZmluZSBCQ0NSX0JDR1JFRU4JR0VOTUFTSygxNSwgOCkJLyogQmFja2dyb3Vu ZCBDb2xvciBHUkVFTiAqLworI2RlZmluZSBCQ0NSX0JDUkVECUdFTk1BU0soMjMsIDE2KQkvKiBC YWNrZ3JvdW5kIENvbG9yIFJFRCAqLworI2RlZmluZSBCQ0NSX0JDV0hJVEUJR0VOTUFTSygyMywg MCkJLyogQmFja2dyb3VuZCBDb2xvciBXSElURSAqLworCisjZGVmaW5lIElFUl9MSUUJCUJJVCgw KQkJLyogTGluZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIElFUl9GVUlFCUJJVCgxKQkJ LyogRmlmbyBVbmRlcnJ1biBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIElFUl9URVJSSUUJ QklUKDIpCQkvKiBUcmFuc2ZlciBFUlJvciBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIElF Ul9SUklFCUJJVCgzKQkJLyogUmVnaXN0ZXIgUmVsb2FkIEludGVycnVwdCBlbmFibGUgKi8KKwor I2RlZmluZSBJU1JfTElGCQlCSVQoMCkJCS8qIExpbmUgSW50ZXJydXB0IEZsYWcgKi8KKyNkZWZp bmUgSVNSX0ZVSUYJQklUKDEpCQkvKiBGaWZvIFVuZGVycnVuIEludGVycnVwdCBGbGFnICovCisj ZGVmaW5lIElTUl9URVJSSUYJQklUKDIpCQkvKiBUcmFuc2ZlciBFUlJvciBJbnRlcnJ1cHQgRmxh ZyAqLworI2RlZmluZSBJU1JfUlJJRglCSVQoMykJCS8qIFJlZ2lzdGVyIFJlbG9hZCBJbnRlcnJ1 cHQgRmxhZyAqLworCisjZGVmaW5lIExYQ1JfTEVOCUJJVCgwKQkJLyogTGF5ZXIgRU5hYmxlICov CisjZGVmaW5lIExYQ1JfQ09MS0VOCUJJVCgxKQkJLyogQ29sb3IgS2V5aW5nIEVuYWJsZSAqLwor I2RlZmluZSBMWENSX0NMVVRFTglCSVQoNCkJCS8qIENvbG9yIExvb2stVXAgVGFibGUgRU5hYmxl ICovCisKKyNkZWZpbmUgTFhXSFBDUl9XSFNUUE9TCUdFTk1BU0soMTEsIDApCS8qIFdpbmRvdyBI b3Jpem9udGFsIFN0YXJUIFBPU2l0aW9uICovCisjZGVmaW5lIExYV0hQQ1JfV0hTUFBPUwlHRU5N QVNLKDI3LCAxNikJLyogV2luZG93IEhvcml6b250YWwgU3RvUCBQT1NpdGlvbiAqLworCisjZGVm aW5lIExYV1ZQQ1JfV1ZTVFBPUwlHRU5NQVNLKDEwLCAwKQkvKiBXaW5kb3cgVmVydGljYWwgU3Rh clQgUE9TaXRpb24gKi8KKyNkZWZpbmUgTFhXVlBDUl9XVlNQUE9TCUdFTk1BU0soMjYsIDE2KQkv KiBXaW5kb3cgVmVydGljYWwgU3RvUCBQT1NpdGlvbiAqLworCisjZGVmaW5lIExYUEZDUl9QRglH RU5NQVNLKDIsIDApCS8qIFBpeGVsIEZvcm1hdCAqLworCisjZGVmaW5lIExYQ0FDUl9DT05TVEEJ R0VOTUFTSyg3LCAwKQkvKiBDT05TVGFudCBBbHBoYSAqLworCisjZGVmaW5lIExYQkZDUl9CRjIJ R0VOTUFTSygyLCAwKQkvKiBCbGVuZGluZyBGYWN0b3IgMiAqLworI2RlZmluZSBMWEJGQ1JfQkYx CUdFTk1BU0soMTAsIDgpCS8qIEJsZW5kaW5nIEZhY3RvciAxICovCisKKyNkZWZpbmUgTFhDRkJM Ul9DRkJMTAlHRU5NQVNLKDEyLCAwKQkvKiBDb2xvciBGcmFtZSBCdWZmZXIgTGluZSBMZW5ndGgg Ki8KKyNkZWZpbmUgTFhDRkJMUl9DRkJQCUdFTk1BU0soMjgsIDE2KQkvKiBDb2xvciBGcmFtZSBC dWZmZXIgUGl0Y2ggaW4gYnl0ZXMgKi8KKworI2RlZmluZSBMWENGQkxOUl9DRkJMTglHRU5NQVNL KDEwLCAwKQkgLyogQ29sb3IgRnJhbWUgQnVmZmVyIExpbmUgTnVtYmVyICovCisKKyNkZWZpbmUg SFNQT0xfQUwgICAwCQkvKiBIb3Jpem9udGFsIFN5bmMgUE9MYXJpdHkgQWN0aXZlIExvdyAqLwor I2RlZmluZSBWU1BPTF9BTCAgIDAJCS8qIFZlcnRpY2FsIFN5bmMgUE9MYXJpdHkgQWN0aXZlIExv dyAqLworI2RlZmluZSBERVBPTF9BTCAgIDAJCS8qIERhdGEgRW5hYmxlIFBPTGFyaXR5IEFjdGl2 ZSBMb3cgKi8KKyNkZWZpbmUgUENQT0xfSVBDICAwCQkvKiBJbnB1dCBQaXhlbCBDbG9jayAqLwor I2RlZmluZSBIU1BPTF9BSCAgIEdDUl9IU1BPTAkvKiBIb3Jpem9udGFsIFN5bmMgUE9MYXJpdHkg QWN0aXZlIEhpZ2ggKi8KKyNkZWZpbmUgVlNQT0xfQUggICBHQ1JfVlNQT0wJLyogVmVydGljYWwg U3luYyBQT0xhcml0eSBBY3RpdmUgSGlnaCAqLworI2RlZmluZSBERVBPTF9BSCAgIEdDUl9ERVBP TAkvKiBEYXRhIEVuYWJsZSBQT0xhcml0eSBBY3RpdmUgSGlnaCAqLworI2RlZmluZSBQQ1BPTF9J SVBDIEdDUl9QQ1BPTAkvKiBJbnZlcnRlZCBJbnB1dCBQaXhlbCBDbG9jayAqLworI2RlZmluZSBD T05TVEFfTUFYIDB4RkYJCS8qIENPTlNUYW50IEFscGhhIE1BWD0gMS4wICovCisjZGVmaW5lIEJG MV9QQVhDQSAgMHg2MDAJLyogUGl4ZWwgQWxwaGEgeCBDb25zdGFudCBBbHBoYSAqLworI2RlZmlu ZSBCRjFfQ0EgICAgIDB4NDAwCS8qIENvbnN0YW50IEFscGhhICovCisjZGVmaW5lIEJGMl8xUEFY Q0EgMHgwMDcJLyogMSAtIChQaXhlbCBBbHBoYSB4IENvbnN0YW50IEFscGhhKSAqLworI2RlZmlu ZSBCRjJfMUNBCSAgIDB4MDA1CS8qIDEgLSBDb25zdGFudCBBbHBoYSAqLworCisjZGVmaW5lIE5C X1BGICAgICAgICAgICA4ICAgICAgIC8qIE1heCBuYiBvZiBIVyBwaXhlbCBmb3JtYXQgKi8KKwor ZW51bSBsdGRjX3BpeF9mbXQgeworCVBGX05PTkUsCisJLyogUkdCIGZvcm1hdHMgKi8KKwlQRl9B UkdCODg4OCwgICAgLyogQVJHQiBbMzIgYml0c10gKi8KKwlQRl9SR0JBODg4OCwgICAgLyogUkdC QSBbMzIgYml0c10gKi8KKwlQRl9SR0I4ODgsICAgICAgLyogUkdCIFsyNCBiaXRzXSAqLworCVBG X1JHQjU2NSwgICAgICAvKiBSR0IgWzE2IGJpdHNdICovCisJUEZfQVJHQjE1NTUsICAgIC8qIEFS R0IgQToxIGJpdCBSR0I6MTUgYml0cyBbMTYgYml0c10gKi8KKwlQRl9BUkdCNDQ0NCwgICAgLyog QVJHQiBBOjQgYml0cyBSL0cvQjogNCBiaXRzIGVhY2ggWzE2IGJpdHNdICovCisJLyogSW5kZXhl ZCBmb3JtYXRzICovCisJUEZfTDgsICAgICAgICAgIC8qIEluZGV4ZWQgOCBiaXRzIFs4IGJpdHNd ICovCisJUEZfQUw0NCwgICAgICAgIC8qIEFscGhhOjQgYml0cyArIGluZGV4ZWQgNCBiaXRzIFs4 IGJpdHNdICovCisJUEZfQUw4OCAgICAgICAgIC8qIEFscGhhOjggYml0cyArIGluZGV4ZWQgOCBi aXRzIFsxNiBiaXRzXSAqLworfTsKKworLyogVGhlIGluZGV4IGdpdmVzIHRoZSBlbmNvZGluZyBv ZiB0aGUgcGl4ZWwgZm9ybWF0IGZvciBhbiBIVyB2ZXJzaW9uICovCitzdGF0aWMgY29uc3QgZW51 bSBsdGRjX3BpeF9mbXQgbHRkY19waXhfZm10X2EwW05CX1BGXSA9IHsKKwlQRl9BUkdCODg4OCwJ LyogMHgwMCAqLworCVBGX1JHQjg4OCwJLyogMHgwMSAqLworCVBGX1JHQjU2NSwJLyogMHgwMiAq LworCVBGX0FSR0IxNTU1LAkvKiAweDAzICovCisJUEZfQVJHQjQ0NDQsCS8qIDB4MDQgKi8KKwlQ Rl9MOCwJCS8qIDB4MDUgKi8KKwlQRl9BTDQ0LAkvKiAweDA2ICovCisJUEZfQUw4OAkJLyogMHgw NyAqLworfTsKKworc3RhdGljIGNvbnN0IGVudW0gbHRkY19waXhfZm10IGx0ZGNfcGl4X2ZtdF9h MVtOQl9QRl0gPSB7CisJUEZfQVJHQjg4ODgsCS8qIDB4MDAgKi8KKwlQRl9SR0I4ODgsCS8qIDB4 MDEgKi8KKwlQRl9SR0I1NjUsCS8qIDB4MDIgKi8KKwlQRl9SR0JBODg4OCwJLyogMHgwMyAqLwor CVBGX0FMNDQsCS8qIDB4MDQgKi8KKwlQRl9MOCwJCS8qIDB4MDUgKi8KKwlQRl9BUkdCMTU1NSwJ LyogMHgwNiAqLworCVBGX0FSR0I0NDQ0CS8qIDB4MDcgKi8KK307CisKK3N0YXRpYyBpbmxpbmUg dTMyIHJlZ19yZWFkKHZvaWQgX19pb21lbSAqYmFzZSwgdTMyIHJlZykKK3sKKwlyZXR1cm4gcmVh ZGxfcmVsYXhlZChiYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlZ193cml0 ZSh2b2lkIF9faW9tZW0gKmJhc2UsIHUzMiByZWcsIHUzMiB2YWwpCit7CisJd3JpdGVsX3JlbGF4 ZWQodmFsLCBiYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlZ19zZXQodm9p ZCBfX2lvbWVtICpiYXNlLCB1MzIgcmVnLCB1MzIgbWFzaykKK3sKKwlyZWdfd3JpdGUoYmFzZSwg cmVnLCByZWdfcmVhZChiYXNlLCByZWcpIHwgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCByZWdfY2xlYXIodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgcmVnLCB1MzIgbWFzaykKK3sKKwly ZWdfd3JpdGUoYmFzZSwgcmVnLCByZWdfcmVhZChiYXNlLCByZWcpICYgfm1hc2spOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQgcmVnX3VwZGF0ZV9iaXRzKHZvaWQgX19pb21lbSAqYmFzZSwgdTMy IHJlZywgdTMyIG1hc2ssCisJCQkJICAgdTMyIHZhbCkKK3sKKwlyZWdfd3JpdGUoYmFzZSwgcmVn LCAocmVnX3JlYWQoYmFzZSwgcmVnKSAmIH5tYXNrKSB8IHZhbCk7Cit9CisKK3N0YXRpYyBpbmxp bmUgc3RydWN0IGx0ZGNfZGV2aWNlICpjcnRjX3RvX2x0ZGMoc3RydWN0IGRybV9jcnRjICpjcnRj KQoreworCXJldHVybiAoc3RydWN0IGx0ZGNfZGV2aWNlICopY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0 ZTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbHRkY19kZXZpY2UgKnBsYW5lX3RvX2x0ZGMo c3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJcmV0dXJuIChzdHJ1Y3QgbHRkY19kZXZpY2Ug KilwbGFuZS0+ZGV2LT5kZXZfcHJpdmF0ZTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbHRk Y19kZXZpY2UgKmVuY29kZXJfdG9fbHRkYyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuYykKK3sKKwly ZXR1cm4gKHN0cnVjdCBsdGRjX2RldmljZSAqKWVuYy0+ZGV2LT5kZXZfcHJpdmF0ZTsKK30KKwor c3RhdGljIGlubGluZSBzdHJ1Y3QgbHRkY19kZXZpY2UgKmNvbm5lY3Rvcl90b19sdGRjKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb24pCit7CisJcmV0dXJuIChzdHJ1Y3QgbHRkY19kZXZpY2UgKilj b24tPmRldi0+ZGV2X3ByaXZhdGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBsdGRjX3BpeF9m bXQgdG9fbHRkY19waXhlbGZvcm1hdCh1MzIgZHJtX2ZtdCkKK3sKKwllbnVtIGx0ZGNfcGl4X2Zt dCBwZjsKKworCXN3aXRjaCAoZHJtX2ZtdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoK KwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJCXBmID0gUEZfQVJHQjg4ODg7CisJCWJyZWFr OworCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUkdCWDg4ODg6 CisJCXBmID0gUEZfUkdCQTg4ODg7CisJCWJyZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6 CisJCXBmID0gUEZfUkdCODg4OworCQlicmVhazsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogor CQlwZiA9IFBGX1JHQjU2NTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0FSR0IxNTU1Ogor CWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTU1NToKKwkJcGYgPSBQRl9BUkdCMTU1NTsKKwkJYnJlYWs7 CisJY2FzZSBEUk1fRk9STUFUX0FSR0I0NDQ0OgorCWNhc2UgRFJNX0ZPUk1BVF9YUkdCNDQ0NDoK KwkJcGYgPSBQRl9BUkdCNDQ0NDsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0M4OgorCQlw ZiA9IFBGX0w4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwZiA9IFBGX05PTkU7CisJCWJyZWFr OworCS8qIE5vdGU6IFRoZXJlIGFyZSBubyBEUk1fRk9STUFUIGZvciBBTDQ0IGFuZCBBTDg4ICov CisJfQorCisJcmV0dXJuIHBmOworfQorCitzdGF0aWMgaW5saW5lIHUzMiB0b19kcm1fcGl4ZWxm b3JtYXQoZW51bSBsdGRjX3BpeF9mbXQgcGYpCit7CisJc3dpdGNoIChwZikgeworCWNhc2UgUEZf QVJHQjg4ODg6CisJCXJldHVybiBEUk1fRk9STUFUX0FSR0I4ODg4OworCWNhc2UgUEZfUkdCQTg4 ODg6CisJCXJldHVybiBEUk1fRk9STUFUX1JHQkE4ODg4OworCWNhc2UgUEZfUkdCODg4OgorCQly ZXR1cm4gRFJNX0ZPUk1BVF9SR0I4ODg7CisJY2FzZSBQRl9SR0I1NjU6CisJCXJldHVybiBEUk1f Rk9STUFUX1JHQjU2NTsKKwljYXNlIFBGX0FSR0IxNTU1OgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9B UkdCMTU1NTsKKwljYXNlIFBGX0FSR0I0NDQ0OgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9BUkdCNDQ0 NDsKKwljYXNlIFBGX0w4OgorCQlyZXR1cm4gRFJNX0ZPUk1BVF9DODsKKwljYXNlIFBGX0FMNDQ6 IC8qIE5vIERSTSBzdXBwb3J0ICovCisJY2FzZSBQRl9BTDg4OiAvKiBObyBEUk0gc3VwcG9ydCAq LworCWNhc2UgUEZfTk9ORToKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRp YyBpcnFyZXR1cm5fdCBsdGRjX2lycV90aHJlYWQoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0 cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gYXJnOworCXN0cnVjdCBsdGRjX2RldmljZSAqbGRldiA9 IGRkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IGRybV9jcnRjX2Zy b21faW5kZXgoZGRldiwgMCk7CisKKwkvKiBMaW5lIElSUSA6IHRyaWdnZXIgdGhlIHZibGFuayBl dmVudCAqLworCWlmIChsZGV2LT5pcnFfc3RhdHVzICYgSVNSX0xJRikKKwkJZHJtX2NydGNfaGFu ZGxlX3ZibGFuayhjcnRjKTsKKworCS8qIFNhdmUgRklGTyBVbmRlcnJ1biAmIFRyYW5zZmVyIEVy cm9yIHN0YXR1cyAqLworCW11dGV4X2xvY2soJmxkZXYtPmVycl9sb2NrKTsKKwlpZiAobGRldi0+ aXJxX3N0YXR1cyAmIElTUl9GVUlGKQorCQlsZGV2LT5lcnJvcl9zdGF0dXMgfD0gSVNSX0ZVSUY7 CisJaWYgKGxkZXYtPmlycV9zdGF0dXMgJiBJU1JfVEVSUklGKQorCQlsZGV2LT5lcnJvcl9zdGF0 dXMgfD0gSVNSX1RFUlJJRjsKKwltdXRleF91bmxvY2soJmxkZXYtPmVycl9sb2NrKTsKKworCXJl dHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGx0ZGNfaXJxKGludCBp cnEsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGFyZzsKKwlzdHJ1 Y3QgbHRkY19kZXZpY2UgKmxkZXYgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKKworCS8qIFJlYWQgJiBD bGVhciB0aGUgaW50ZXJydXB0IHN0YXR1cyAqLworCWxkZXYtPmlycV9zdGF0dXMgPSByZWdfcmVh ZChsZGV2LT5yZWdzLCBMVERDX0lTUik7CisJcmVnX3dyaXRlKGxkZXYtPnJlZ3MsIExURENfSUNS LCBsZGV2LT5pcnFfc3RhdHVzKTsKKworCXJldHVybiBJUlFfV0FLRV9USFJFQUQ7Cit9CisKKy8q CisgKiBEUk1fQ1JUQworICovCisKK3N0YXRpYyB2b2lkIGx0ZGNfY3J0Y19sb2FkX2x1dChzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGx0ZGNfZGV2aWNlICpsZGV2ID0gY3J0Y190 b19sdGRjKGNydGMpOworCXVuc2lnbmVkIGludCBpLCBsYXk7CisKKwlmb3IgKGxheSA9IDA7IGxh eSA8IGxkZXYtPmNhcHMubmJfbGF5ZXJzOyBsYXkrKykKKwkJZm9yIChpID0gMDsgaSA8IDI1Njsg aSsrKQorCQkJcmVnX3dyaXRlKGxkZXYtPnJlZ3MsIExURENfTDFDTFVUV1IgKyBsYXkgKiBMQVlf T0ZTLAorCQkJCSAgbGRldi0+Y2x1dFtpXSk7Cit9CisKK3N0YXRpYyB2b2lkIGx0ZGNfY3J0Y19l bmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBsdGRjX2RldmljZSAqbGRl diA9IGNydGNfdG9fbHRkYyhjcnRjKTsKKworCURSTV9ERUJVR19EUklWRVIoIlxuIik7CisKKwkv KiBTZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIHZhbHVlICovCisJcmVnX3dyaXRlKGxkZXYtPnJl Z3MsIExURENfQkNDUiwgQkNDUl9CQ0JMQUNLKTsKKworCS8qIEVuYWJsZSBJUlEgKi8KKwlyZWdf c2V0KGxkZXYtPnJlZ3MsIExURENfSUVSLCBJRVJfUlJJRSB8IElFUl9GVUlFIHwgSUVSX1RFUlJJ RSk7CisKKwkvKiBJbW1lZGlhdGVseSBjb21taXQgdGhlIHBsYW5lcyAqLworCXJlZ19zZXQobGRl di0+cmVncywgTFREQ19TUkNSLCBTUkNSX0lNUik7CisKKwkvKiBFbmFibGUgTFREQyAqLworCXJl Z19zZXQobGRldi0+cmVncywgTFREQ19HQ1IsIEdDUl9MVERDRU4pOworCisJZHJtX2NydGNfdmJs YW5rX29uKGNydGMpOworfQorCitzdGF0aWMgdm9pZCBsdGRjX2NydGNfZGlzYWJsZShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGx0ZGNfZGV2aWNlICpsZGV2ID0gY3J0Y190b19s dGRjKGNydGMpOworCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50ID0gY3J0 Yy0+c3RhdGUtPmV2ZW50OworCisJRFJNX0RFQlVHX0RSSVZFUigiXG4iKTsKKworCWlmICghY3J0 Yy0+ZW5hYmxlZCkgeworCQlEUk1fREVCVUdfRFJJVkVSKCJhbHJlYWR5IGRpc2FibGVkXG4iKTsK KwkJcmV0dXJuOworCX0KKworCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7CisKKwkvKiBkaXNh YmxlIExUREMgKi8KKwlyZWdfY2xlYXIobGRldi0+cmVncywgTFREQ19HQ1IsIEdDUl9MVERDRU4p OworCisJLyogZGlzYWJsZSBJUlEgKi8KKwlyZWdfY2xlYXIobGRldi0+cmVncywgTFREQ19JRVIs IElFUl9SUklFIHwgSUVSX0ZVSUUgfCBJRVJfVEVSUklFKTsKKworCS8qIGltbWVkaWF0ZWx5IGNv bW1pdCBkaXNhYmxlIG9mIGxheWVycyBiZWZvcmUgc3dpdGNoaW5nIG9mZiBMVERDICovCisJcmVn X3NldChsZGV2LT5yZWdzLCBMVERDX1NSQ1IsIFNSQ1JfSU1SKTsKKworCWlmIChldmVudCkgewor CQljcnRjLT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOworCisJCXNwaW5fbG9ja19pcnEoJmNydGMtPmRl di0+ZXZlbnRfbG9jayk7CisJCWlmIChjcnRjLT5zdGF0ZS0+YWN0aXZlICYmIGRybV9jcnRjX3Zi bGFua19nZXQoY3J0YykgPT0gMCkKKwkJCWRybV9jcnRjX2FybV92YmxhbmtfZXZlbnQoY3J0Yywg ZXZlbnQpOworCQllbHNlCisJCQlkcm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBldmVu dCk7CisJCXNwaW5fdW5sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwl9Cit9CisK K3N0YXRpYyB2b2lkIGx0ZGNfY3J0Y19tb2RlX3NldF9ub2ZiKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKK3sKKwlzdHJ1Y3QgbHRkY19kZXZpY2UgKmxkZXYgPSBjcnRjX3RvX2x0ZGMoY3J0Yyk7CisJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21v ZGU7CisJc3RydWN0IHZpZGVvbW9kZSB2bTsKKwlpbnQgcmF0ZSA9IG1vZGUtPmNsb2NrICogMTAw MDsKKwl1MzIgaHN5bmMsIHZzeW5jLCBhY2N1bV9oYnAsIGFjY3VtX3ZicCwgYWNjdW1fYWN0X3cs IGFjY3VtX2FjdF9oOworCXUzMiB0b3RhbF93aWR0aCwgdG90YWxfaGVpZ2h0OworCXUzMiB2YWw7 CisKKwlkcm1fZGlzcGxheV9tb2RlX3RvX3ZpZGVvbW9kZShtb2RlLCAmdm0pOworCisJRFJNX0RF QlVHX0RSSVZFUigiQ1JUQzolZCBtb2RlOiVzXG4iLCBjcnRjLT5iYXNlLmlkLCBtb2RlLT5uYW1l KTsKKwlEUk1fREVCVUdfRFJJVkVSKCJWaWRlbyBtb2RlOiAlZHglZCIsIHZtLmhhY3RpdmUsIHZt LnZhY3RpdmUpOworCURSTV9ERUJVR19EUklWRVIoIiBoZnAgJWQgaGJwICVkIGhzbCAlZCB2ZnAg JWQgdmJwICVkIHZzbCAlZFxuIiwKKwkJCSB2bS5oZnJvbnRfcG9yY2gsIHZtLmhiYWNrX3BvcmNo LCB2bS5oc3luY19sZW4sCisJCQkgdm0udmZyb250X3BvcmNoLCB2bS52YmFja19wb3JjaCwgdm0u dnN5bmNfbGVuKTsKKworCS8qIENvbnZlcnQgdmlkZW8gdGltaW5ncyB0byBsdGRjIHRpbWluZ3Mg Ki8KKwloc3luYyA9IHZtLmhzeW5jX2xlbiAtIDE7CisJdnN5bmMgPSB2bS52c3luY19sZW4gLSAx OworCWFjY3VtX2hicCA9IGhzeW5jICsgdm0uaGJhY2tfcG9yY2g7CisJYWNjdW1fdmJwID0gdnN5 bmMgKyB2bS52YmFja19wb3JjaDsKKwlhY2N1bV9hY3RfdyA9IGFjY3VtX2hicCArIHZtLmhhY3Rp dmU7CisJYWNjdW1fYWN0X2ggPSBhY2N1bV92YnAgKyB2bS52YWN0aXZlOworCXRvdGFsX3dpZHRo ID0gYWNjdW1fYWN0X3cgKyB2bS5oZnJvbnRfcG9yY2g7CisJdG90YWxfaGVpZ2h0ID0gYWNjdW1f YWN0X2ggKyB2bS52ZnJvbnRfcG9yY2g7CisKKwljbGtfZGlzYWJsZShsZGV2LT5waXhlbF9jbGsp OworCisJaWYgKGNsa19zZXRfcmF0ZShsZGV2LT5waXhlbF9jbGssIHJhdGUpIDwgMCkgeworCQlE Uk1fRVJST1IoIkNhbm5vdCBzZXQgcmF0ZSAoJWRIeikgZm9yIHBpeGVsIGNsa1xuIiwgcmF0ZSk7 CisJCXJldHVybjsKKwl9CisKKwljbGtfZW5hYmxlKGxkZXYtPnBpeGVsX2Nsayk7CisKKwkvKiBD b25maWd1cmVzIHRoZSBIUywgVlMsIERFIGFuZCBQQyBwb2xhcml0aWVzLiAqLworCXZhbCA9IEhT UE9MX0FMIHwgSFNQT0xfQUwgfCBERVBPTF9BTCB8IFBDUE9MX0lQQzsKKworCWlmICh2bS5mbGFn cyAmIERJU1BMQVlfRkxBR1NfSFNZTkNfSElHSCkKKwkJdmFsIHw9IEhTUE9MX0FIOworCisJaWYg KHZtLmZsYWdzICYgRElTUExBWV9GTEFHU19WU1lOQ19ISUdIKQorCQl2YWwgfD0gVlNQT0xfQUg7 CisKKwlpZiAodm0uZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX0RFX0hJR0gpCisJCXZhbCB8PSBERVBP TF9BSDsKKworCWlmICh2bS5mbGFncyAmIERJU1BMQVlfRkxBR1NfUElYREFUQV9ORUdFREdFKQor CQl2YWwgfD0gUENQT0xfSUlQQzsKKworCXJlZ191cGRhdGVfYml0cyhsZGV2LT5yZWdzLCBMVERD X0dDUiwKKwkJCUdDUl9IU1BPTCB8IEdDUl9WU1BPTCB8IEdDUl9ERVBPTCB8IEdDUl9QQ1BPTCwg dmFsKTsKKworCS8qIFNldCBTeW5jaHJvbml6YXRpb24gc2l6ZSAqLworCXZhbCA9IChoc3luYyA8 PCAxNikgfCB2c3luYzsKKwlyZWdfdXBkYXRlX2JpdHMobGRldi0+cmVncywgTFREQ19TU0NSLCBT U0NSX1ZTSCB8IFNTQ1JfSFNXLCB2YWwpOworCisJLyogU2V0IEFjY3VtdWxhdGVkIEJhY2sgcG9y Y2ggKi8KKwl2YWwgPSAoYWNjdW1faGJwIDw8IDE2KSB8IGFjY3VtX3ZicDsKKwlyZWdfdXBkYXRl X2JpdHMobGRldi0+cmVncywgTFREQ19CUENSLCBCUENSX0FWQlAgfCBCUENSX0FIQlAsIHZhbCk7 CisKKwkvKiBTZXQgQWNjdW11bGF0ZWQgQWN0aXZlIFdpZHRoICovCisJdmFsID0gKGFjY3VtX2Fj dF93IDw8IDE2KSB8IGFjY3VtX2FjdF9oOworCXJlZ191cGRhdGVfYml0cyhsZGV2LT5yZWdzLCBM VERDX0FXQ1IsIEFXQ1JfQUFXIHwgQVdDUl9BQUgsIHZhbCk7CisKKwkvKiBTZXQgdG90YWwgd2lk dGggJiBoZWlnaHQgKi8KKwl2YWwgPSAodG90YWxfd2lkdGggPDwgMTYpIHwgdG90YWxfaGVpZ2h0 OworCXJlZ191cGRhdGVfYml0cyhsZGV2LT5yZWdzLCBMVERDX1RXQ1IsIFRXQ1JfVE9UQUxIIHwg VFdDUl9UT1RBTFcsIHZhbCk7CisKKwlyZWdfd3JpdGUobGRldi0+cmVncywgTFREQ19MSVBDUiwg KGFjY3VtX2FjdF9oICsgMSkpOworfQorCitzdGF0aWMgdm9pZCBsdGRjX2NydGNfYXRvbWljX2Zs dXNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg Km9sZF9jcnRjX3N0YXRlKQoreworCXN0cnVjdCBsdGRjX2RldmljZSAqbGRldiA9IGNydGNfdG9f bHRkYyhjcnRjKTsKKwlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudCA9IGNy dGMtPnN0YXRlLT5ldmVudDsKKworCURSTV9ERUJVR19BVE9NSUMoIlxuIik7CisKKwkvKiBDb21t aXQgc2hhZG93IHJlZ2lzdGVycyA9IHVwZGF0ZSBwbGFuZXMgYXQgbmV4dCB2YmxhbmsgKi8KKwly ZWdfc2V0KGxkZXYtPnJlZ3MsIExURENfU1JDUiwgU1JDUl9WQlIpOworCisJaWYgKGV2ZW50KSB7 CisJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7CisKKwkJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ ZGV2LT5ldmVudF9sb2NrKTsKKwkJaWYgKGRybV9jcnRjX3ZibGFua19nZXQoY3J0YykgPT0gMCkK KwkJCWRybV9jcnRjX2FybV92YmxhbmtfZXZlbnQoY3J0YywgZXZlbnQpOworCQllbHNlCisJCQlk cm1fY3J0Y19zZW5kX3ZibGFua19ldmVudChjcnRjLCBldmVudCk7CisJCXNwaW5fdW5sb2NrX2ly cSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Ny dGNfaGVscGVyX2Z1bmNzIGx0ZGNfY3J0Y19oZWxwZXJfZnVuY3MgPSB7CisJLmxvYWRfbHV0ID0g bHRkY19jcnRjX2xvYWRfbHV0LAorCS5lbmFibGUgPSBsdGRjX2NydGNfZW5hYmxlLAorCS5kaXNh YmxlID0gbHRkY19jcnRjX2Rpc2FibGUsCisJLm1vZGVfc2V0X25vZmIgPSBsdGRjX2NydGNfbW9k ZV9zZXRfbm9mYiwKKwkuYXRvbWljX2ZsdXNoID0gbHRkY19jcnRjX2F0b21pY19mbHVzaCwKK307 CisKK2ludCBsdGRjX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiwg dW5zaWduZWQgaW50IHBpcGUpCit7CisJc3RydWN0IGx0ZGNfZGV2aWNlICpsZGV2ID0gZGRldi0+ ZGV2X3ByaXZhdGU7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJcbiIpOworCXJlZ19zZXQobGRldi0+ cmVncywgTFREQ19JRVIsIElFUl9MSUUpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbHRkY19j cnRjX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2LCB1bnNpZ25lZCBpbnQg cGlwZSkKK3sKKwlzdHJ1Y3QgbHRkY19kZXZpY2UgKmxkZXYgPSBkZGV2LT5kZXZfcHJpdmF0ZTsK KworCURSTV9ERUJVR19EUklWRVIoIlxuIik7CisJcmVnX2NsZWFyKGxkZXYtPnJlZ3MsIExURENf SUVSLCBJRVJfTElFKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBsdGRjX2Ny dGNfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBkcm1fY3J0Y19jbGVhbnVwLAorCS5zZXRfY29uZmln ID0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKKwkucGFnZV9mbGlwID0gZHJtX2F0b21p Y19oZWxwZXJfcGFnZV9mbGlwLAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2NydGNfcmVz ZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2R1 cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBl cl9jcnRjX2Rlc3Ryb3lfc3RhdGUsCit9OworCisvKgorICogRFJNX1BMQU5FCisgKi8KKworc3Rh dGljIGludCBsdGRjX3BsYW5lX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK KwkJCQkgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsKKwl1MzIgc3JjX3gsIHNyY195LCBzcmNfdywgc3Jj X2g7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJcbiIpOworCisJaWYgKCFmYikKKwkJcmV0dXJuIDA7 CisKKwkvKiBjb252ZXJ0IHNyY18gZnJvbSAxNjoxNiBmb3JtYXQgKi8KKwlzcmNfeCA9IHN0YXRl LT5zcmNfeCA+PiAxNjsKKwlzcmNfeSA9IHN0YXRlLT5zcmNfeSA+PiAxNjsKKwlzcmNfdyA9IHN0 YXRlLT5zcmNfdyA+PiAxNjsKKwlzcmNfaCA9IHN0YXRlLT5zcmNfaCA+PiAxNjsKKworCS8qIFJl amVjdCBzY2FsaW5nICovCisJaWYgKChzcmNfdyAhPSBzdGF0ZS0+Y3J0Y193KSB8fCAoc3JjX2gg IT0gc3RhdGUtPmNydGNfaCkpIHsKKwkJRFJNX0VSUk9SKCJTY2FsaW5nIGlzIG5vdCBzdXBwb3J0 ZWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkIGx0ZGNfcGxhbmVfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJ CQkgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZHN0YXRlKQoreworCXN0cnVjdCBsdGRj X2RldmljZSAqbGRldiA9IHBsYW5lX3RvX2x0ZGMocGxhbmUpOworCXN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKnN0YXRlID0gcGxhbmUtPnN0YXRlOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi ID0gc3RhdGUtPmZiOworCXUzMiBsb2ZzID0gcGxhbmUtPmluZGV4ICogTEFZX09GUzsKKwl1MzIg eDAgPSBzdGF0ZS0+Y3J0Y194OworCXUzMiB4MSA9IHN0YXRlLT5jcnRjX3ggKyBzdGF0ZS0+Y3J0 Y193IC0gMTsKKwl1MzIgeTAgPSBzdGF0ZS0+Y3J0Y195OworCXUzMiB5MSA9IHN0YXRlLT5jcnRj X3kgKyBzdGF0ZS0+Y3J0Y19oIC0gMTsKKwl1MzIgc3JjX3gsIHNyY195LCBzcmNfdywgc3JjX2g7 CisJdTMyIHZhbCwgcGl0Y2hfaW5fYnl0ZXMsIGxpbmVfbGVuZ3RoLCBwYWRkciwgYWhicCwgYXZi cCwgYnBjcjsKKwllbnVtIGx0ZGNfcGl4X2ZtdCBwZjsKKworCWlmICghc3RhdGUtPmNydGMgfHwg IWZiKSB7CisJCURSTV9ERUJVR19EUklWRVIoImZiIG9yIGNydGMgTlVMTCIpOworCQlyZXR1cm47 CisJfQorCisJLyogY29udmVydCBzcmNfIGZyb20gMTY6MTYgZm9ybWF0ICovCisJc3JjX3ggPSBz dGF0ZS0+c3JjX3ggPj4gMTY7CisJc3JjX3kgPSBzdGF0ZS0+c3JjX3kgPj4gMTY7CisJc3JjX3cg PSBzdGF0ZS0+c3JjX3cgPj4gMTY7CisJc3JjX2ggPSBzdGF0ZS0+c3JjX2ggPj4gMTY7CisKKwlE Uk1fREVCVUdfRFJJVkVSKAorCQkicGxhbmU6JWQgZmI6JWQgKCVkeCVkKUAoJWQsJWQpIC0+ICgl ZHglZClAKCVkLCVkKVxuIiwKKwkJcGxhbmUtPmJhc2UuaWQsIGZiLT5iYXNlLmlkLAorCQlzcmNf dywgc3JjX2gsIHNyY194LCBzcmNfeSwKKwkJc3RhdGUtPmNydGNfdywgc3RhdGUtPmNydGNfaCwg c3RhdGUtPmNydGNfeCwgc3RhdGUtPmNydGNfeSk7CisKKwlicGNyID0gcmVnX3JlYWQobGRldi0+ cmVncywgTFREQ19CUENSKTsKKwlhaGJwID0gKGJwY3IgJiBCUENSX0FIQlApID4+IDE2OworCWF2 YnAgPSBicGNyICYgQlBDUl9BVkJQOworCisJLyogQ29uZmlndXJlcyB0aGUgaG9yaXpvbnRhbCBz dGFydCBhbmQgc3RvcCBwb3NpdGlvbiAqLworCXZhbCA9ICgoeDEgKyAxICsgYWhicCkgPDwgMTYp ICsgKHgwICsgMSArIGFoYnApOworCXJlZ191cGRhdGVfYml0cyhsZGV2LT5yZWdzLCBMVERDX0wx V0hQQ1IgKyBsb2ZzLAorCQkJTFhXSFBDUl9XSFNUUE9TIHwgTFhXSFBDUl9XSFNQUE9TLCB2YWwp OworCisJLyogQ29uZmlndXJlcyB0aGUgdmVydGljYWwgc3RhcnQgYW5kIHN0b3AgcG9zaXRpb24g Ki8KKwl2YWwgPSAoKHkxICsgMSArIGF2YnApIDw8IDE2KSArICh5MCArIDEgKyBhdmJwKTsKKwly ZWdfdXBkYXRlX2JpdHMobGRldi0+cmVncywgTFREQ19MMVdWUENSICsgbG9mcywKKwkJCUxYV1ZQ Q1JfV1ZTVFBPUyB8IExYV1ZQQ1JfV1ZTUFBPUywgdmFsKTsKKworCS8qIFNwZWNpZmllcyB0aGUg cGl4ZWwgZm9ybWF0ICovCisJcGYgPSB0b19sdGRjX3BpeGVsZm9ybWF0KGZiLT5mb3JtYXQtPmZv cm1hdCk7CisJZm9yICh2YWwgPSAwOyB2YWwgPCBOQl9QRjsgdmFsKyspCisJCWlmIChsZGV2LT5j YXBzLnBpeF9mbXRfaHdbdmFsXSA9PSBwZikKKwkJCWJyZWFrOworCisJaWYgKHZhbCA9PSBOQl9Q RikgeworCQlEUk1fRVJST1IoIlBpeGVsIGZvcm1hdCAlLjRzIG5vdCBzdXBwb3J0ZWRcbiIsCisJ CQkgIChjaGFyICopJmZiLT5mb3JtYXQtPmZvcm1hdCk7CisJCXZhbCA9IDA7IC8qIHNldCBieSBk ZWZhdWx0IEFSR0IgMzIgYml0cyAqLworCX0KKwlyZWdfdXBkYXRlX2JpdHMobGRldi0+cmVncywg TFREQ19MMVBGQ1IgKyBsb2ZzLCBMWFBGQ1JfUEYsIHZhbCk7CisKKwkvKiBDb25maWd1cmVzIHRo ZSBjb2xvciBmcmFtZSBidWZmZXIgcGl0Y2ggaW4gYnl0ZXMgJiBsaW5lIGxlbmd0aCAqLworCXBp dGNoX2luX2J5dGVzID0gZmItPnBpdGNoZXNbMF07CisJbGluZV9sZW5ndGggPSBkcm1fZm9ybWF0 X3BsYW5lX2NwcChmYi0+Zm9ybWF0LT5mb3JtYXQsIDApICoKKwkJICAgICAgKHgxIC0geDAgKyAx KSArIChsZGV2LT5jYXBzLmJ1c193aWR0aCA+PiAzKSAtIDE7CisJdmFsID0gKChwaXRjaF9pbl9i eXRlcyA8PCAxNikgfCBsaW5lX2xlbmd0aCk7CisJcmVnX3VwZGF0ZV9iaXRzKGxkZXYtPnJlZ3Ms IExURENfTDFDRkJMUiArIGxvZnMsCisJCQlMWENGQkxSX0NGQkxMIHwgTFhDRkJMUl9DRkJQLCB2 YWwpOworCisJLyogU3BlY2lmaWVzIHRoZSBjb25zdGFudCBhbHBoYSB2YWx1ZSAqLworCXZhbCA9 IENPTlNUQV9NQVg7CisJcmVnX3VwZGF0ZV9iaXRzKGxkZXYtPnJlZ3MsIExURENfTDFDQUNSICsg bG9mcywKKwkJCUxYQ0FDUl9DT05TVEEsIHZhbCk7CisKKwkvKiBTcGVjaWZpZXMgdGhlIGJsZW5k aW5nIGZhY3RvcnMgKi8KKwl2YWwgPSBCRjFfUEFYQ0EgfCBCRjJfMVBBWENBOworCXJlZ191cGRh dGVfYml0cyhsZGV2LT5yZWdzLCBMVERDX0wxQkZDUiArIGxvZnMsCisJCQlMWEJGQ1JfQkYyIHwg TFhCRkNSX0JGMSwgdmFsKTsKKworCS8qIENvbmZpZ3VyZXMgdGhlIGZyYW1lIGJ1ZmZlciBsaW5l IG51bWJlciAqLworCXZhbCA9IHkxIC0geTAgKyAxOworCXJlZ191cGRhdGVfYml0cyhsZGV2LT5y ZWdzLCBMVERDX0wxQ0ZCTE5SICsgbG9mcywKKwkJCUxYQ0ZCTE5SX0NGQkxOLCB2YWwpOworCisJ LyogU2V0cyB0aGUgRkIgYWRkcmVzcyAqLworCXBhZGRyID0gKHUzMilkcm1fZmJfY21hX2dldF9n ZW1fYWRkcihmYiwgc3RhdGUsIDApOworCisJRFJNX0RFQlVHX0RSSVZFUigiZmI6IHBoeXMgMHgl MDh4IiwgcGFkZHIpOworCXJlZ193cml0ZShsZGV2LT5yZWdzLCBMVERDX0wxQ0ZCQVIgKyBsb2Zz LCBwYWRkcik7CisKKwkvKiBFbmFibGUgbGF5ZXIgYW5kIENMVVQgaWYgbmVlZGVkICovCisJdmFs ID0gZmItPmZvcm1hdC0+Zm9ybWF0ID09IERSTV9GT1JNQVRfQzggPyBMWENSX0NMVVRFTiA6IDA7 CisJdmFsIHw9IExYQ1JfTEVOOworCXJlZ191cGRhdGVfYml0cyhsZGV2LT5yZWdzLCBMVERDX0wx Q1IgKyBsb2ZzLAorCQkJTFhDUl9MRU4gfCBMWENSX0NMVVRFTiwgdmFsKTsKKworCW11dGV4X2xv Y2soJmxkZXYtPmVycl9sb2NrKTsKKwlpZiAobGRldi0+ZXJyb3Jfc3RhdHVzICYgSVNSX0ZVSUYp IHsKKwkJRFJNX0RFQlVHX0RSSVZFUigiRmlmbyB1bmRlcnJ1blxuIik7CisJCWxkZXYtPmVycm9y X3N0YXR1cyAmPSB+SVNSX0ZVSUY7CisJfQorCWlmIChsZGV2LT5lcnJvcl9zdGF0dXMgJiBJU1Jf VEVSUklGKSB7CisJCURSTV9ERUJVR19EUklWRVIoIlRyYW5zZmVyIGVycm9yXG4iKTsKKwkJbGRl di0+ZXJyb3Jfc3RhdHVzICY9IH5JU1JfVEVSUklGOworCX0KKwltdXRleF91bmxvY2soJmxkZXYt PmVycl9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgbHRkY19wbGFuZV9hdG9taWNfZGlzYWJsZShz dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl ICpvbGRzdGF0ZSkKK3sKKwlzdHJ1Y3QgbHRkY19kZXZpY2UgKmxkZXYgPSBwbGFuZV90b19sdGRj KHBsYW5lKTsKKwl1MzIgbG9mcyA9IHBsYW5lLT5pbmRleCAqIExBWV9PRlM7CisKKwkvKiBkaXNh YmxlIGxheWVyICovCisJcmVnX2NsZWFyKGxkZXYtPnJlZ3MsIExURENfTDFDUiArIGxvZnMsIExY Q1JfTEVOKTsKKworCURSTV9ERUJVR19EUklWRVIoIkNSVEM6JWQgcGxhbmU6JWRcbiIsCisJCQkg b2xkc3RhdGUtPmNydGMtPmJhc2UuaWQsIHBsYW5lLT5iYXNlLmlkKTsKK30KKworc3RhdGljIHN0 cnVjdCBkcm1fcGxhbmVfZnVuY3MgbHRkY19wbGFuZV9mdW5jcyA9IHsKKwkudXBkYXRlX3BsYW5l ID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNhYmxlX3BsYW5lID0gZHJt X2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveSA9IGRybV9wbGFuZV9jbGVh bnVwLAorCS5zZXRfcHJvcGVydHkgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9zZXRfcHJvcGVy dHksCisJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVzZXQsCisJLmF0b21pY19k dXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3RhdGUs CisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZGVzdHJv eV9zdGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5j cyBsdGRjX3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsKKwkuYXRvbWljX2NoZWNrID0gbHRkY19wbGFu ZV9hdG9taWNfY2hlY2ssCisJLmF0b21pY191cGRhdGUgPSBsdGRjX3BsYW5lX2F0b21pY191cGRh dGUsCisJLmF0b21pY19kaXNhYmxlID0gbHRkY19wbGFuZV9hdG9taWNfZGlzYWJsZSwKK307CisK K3N0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lICpsdGRjX3BsYW5lX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGRldiwKKwkJCQkJICAgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlKQoreworCXVuc2ln bmVkIGxvbmcgcG9zc2libGVfY3J0Y3MgPSBDUlRDX01BU0s7CisJc3RydWN0IGx0ZGNfZGV2aWNl ICpsZGV2ID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGRldi0+ ZGV2OworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOworCXVuc2lnbmVkIGludCBpLCBuYl9mbXQg PSAwOworCXUzMiBmb3JtYXRzW05CX1BGXTsKKwl1MzIgZHJtX2ZtdDsKKwlpbnQgcmV0OworCisJ LyogR2V0IHN1cHBvcnRlZCBwaXhlbCBmb3JtYXRzICovCisJZm9yIChpID0gMDsgaSA8IE5CX1BG OyBpKyspIHsKKwkJZHJtX2ZtdCA9IHRvX2RybV9waXhlbGZvcm1hdChsZGV2LT5jYXBzLnBpeF9m bXRfaHdbaV0pOworCQlpZiAoIWRybV9mbXQpCisJCQljb250aW51ZTsKKwkJZm9ybWF0c1tuYl9m bXQrK10gPSBkcm1fZm10OworCX0KKworCXBsYW5lID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9m KCpwbGFuZSksIEdGUF9LRVJORUwpOworCWlmICghcGxhbmUpCisJCXJldHVybiAwOworCisJcmV0 ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRkZXYsIHBsYW5lLCBwb3NzaWJsZV9jcnRjcywK KwkJCQkgICAgICAgJmx0ZGNfcGxhbmVfZnVuY3MsIGZvcm1hdHMsIG5iX2ZtdCwKKwkJCQkgICAg ICAgdHlwZSwgTlVMTCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAwOworCisJZHJtX3BsYW5l X2hlbHBlcl9hZGQocGxhbmUsICZsdGRjX3BsYW5lX2hlbHBlcl9mdW5jcyk7CisKKwlEUk1fREVC VUdfRFJJVkVSKCJwbGFuZTolZCBjcmVhdGVkXG4iLCBwbGFuZS0+YmFzZS5pZCk7CisKKwlyZXR1 cm4gcGxhbmU7Cit9CisKK3N0YXRpYyB2b2lkIGx0ZGNfcGxhbmVfZGVzdHJveV9hbGwoc3RydWN0 IGRybV9kZXZpY2UgKmRkZXYpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsICpwbGFuZV90 ZW1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBsYW5lLCBwbGFuZV90ZW1wLAorCQkJ CSAmZGRldi0+bW9kZV9jb25maWcucGxhbmVfbGlzdCwgaGVhZCkKKwkJZHJtX3BsYW5lX2NsZWFu dXAocGxhbmUpOworfQorCitzdGF0aWMgaW50IGx0ZGNfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZGV2LCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGx0ZGNfZGV2aWNl ICpsZGV2ID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwg Km92ZXJsYXk7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJlczsKKworCXByaW1hcnkgPSBsdGRj X3BsYW5lX2NyZWF0ZShkZGV2LCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKKwlpZiAoIXByaW1h cnkpIHsKKwkJRFJNX0VSUk9SKCJDYW4gbm90IGNyZWF0ZSBwcmltYXJ5IHBsYW5lXG4iKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVzID0gZHJtX2NydGNfaW5pdF93aXRoX3BsYW5lcyhk ZGV2LCBjcnRjLCBwcmltYXJ5LCBOVUxMLAorCQkJCQkmbHRkY19jcnRjX2Z1bmNzLCBOVUxMKTsK KwlpZiAocmVzKSB7CisJCURSTV9FUlJPUigiQ2FuIG5vdCBpbml0aWFsaXplIENSVENcbiIpOwor CQlnb3RvIGNsZWFudXA7CisJfQorCisJZHJtX2NydGNfaGVscGVyX2FkZChjcnRjLCAmbHRkY19j cnRjX2hlbHBlcl9mdW5jcyk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJDUlRDOiVkIGNyZWF0ZWRc biIsIGNydGMtPmJhc2UuaWQpOworCisJLyogQWRkIHBsYW5lcy4gTm90ZSA6IHRoZSBmaXJzdCBs YXllciBpcyB1c2VkIGJ5IHByaW1hcnkgcGxhbmUgKi8KKwlmb3IgKGkgPSAxOyBpIDwgbGRldi0+ Y2Fwcy5uYl9sYXllcnM7IGkrKykgeworCQlvdmVybGF5ID0gbHRkY19wbGFuZV9jcmVhdGUoZGRl diwgRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWSk7CisJCWlmICghb3ZlcmxheSkgeworCQkJcmVzID0g LUVOT01FTTsKKwkJCURSTV9FUlJPUigiQ2FuIG5vdCBjcmVhdGUgb3ZlcmxheSBwbGFuZSAlZFxu IiwgaSk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworY2xlYW51 cDoKKwlsdGRjX3BsYW5lX2Rlc3Ryb3lfYWxsKGRkZXYpOworCXJldHVybiByZXM7Cit9CisKKy8q CisgKiBEUk1fRU5DT0RFUgorICovCisKK3N0YXRpYyB2b2lkIGx0ZGNfcmdiX2VuY29kZXJfZW5h YmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgbHRkY19kZXZpY2Ug KmxkZXYgPSBlbmNvZGVyX3RvX2x0ZGMoZW5jb2Rlcik7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJc biIpOworCisJZHJtX3BhbmVsX3ByZXBhcmUobGRldi0+cGFuZWwpOworCWRybV9wYW5lbF9lbmFi bGUobGRldi0+cGFuZWwpOworfQorCitzdGF0aWMgdm9pZCBsdGRjX3JnYl9lbmNvZGVyX2Rpc2Fi bGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBsdGRjX2RldmljZSAq bGRldiA9IGVuY29kZXJfdG9fbHRkYyhlbmNvZGVyKTsKKworCURSTV9ERUJVR19EUklWRVIoIlxu Iik7CisKKwlkcm1fcGFuZWxfZGlzYWJsZShsZGV2LT5wYW5lbCk7CisJZHJtX3BhbmVsX3VucHJl cGFyZShsZGV2LT5wYW5lbCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJf aGVscGVyX2Z1bmNzIGx0ZGNfcmdiX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5lbmFibGUg PSBsdGRjX3JnYl9lbmNvZGVyX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGx0ZGNfcmdiX2VuY29kZXJf ZGlzYWJsZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgbHRk Y19yZ2JfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGRybV9lbmNvZGVyX2NsZWFudXAs Cit9OworCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICpsdGRjX3JnYl9lbmNvZGVyX2NyZWF0 ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldikKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXI7CisKKwllbmNvZGVyID0gZGV2bV9remFsbG9jKGRkZXYtPmRldiwgc2l6ZW9mKCplbmNvZGVy KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbmNvZGVyKQorCQlyZXR1cm4gTlVMTDsKKworCWVuY29k ZXItPnBvc3NpYmxlX2NydGNzID0gQ1JUQ19NQVNLOworCWVuY29kZXItPnBvc3NpYmxlX2Nsb25l cyA9IDA7IC8qIE5vIGNsb25pbmcgc3VwcG9ydCAqLworCisJZHJtX2VuY29kZXJfaW5pdChkZGV2 LCBlbmNvZGVyLCAmbHRkY19yZ2JfZW5jb2Rlcl9mdW5jcywKKwkJCSBEUk1fTU9ERV9FTkNPREVS X0xWRFMsIE5VTEwpOworCisJZHJtX2VuY29kZXJfaGVscGVyX2FkZChlbmNvZGVyLCAmbHRkY19y Z2JfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOworCisJRFJNX0RFQlVHX0RSSVZFUigiUkdCIGVuY29k ZXI6JWQgY3JlYXRlZFxuIiwgZW5jb2Rlci0+YmFzZS5pZCk7CisKKwlyZXR1cm4gZW5jb2RlcjsK K30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAqbHRkY19yZ2JfZW5jb2Rlcl9maW5kKHN0 cnVjdCBkcm1fZGV2aWNlICpkZGV2KQoreworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsK KworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRkZXYtPm1vZGVfY29uZmlnLmVuY29k ZXJfbGlzdCwgaGVhZCkgeworCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlID09IERSTV9NT0RF X0VOQ09ERVJfTFZEUykKKwkJCXJldHVybiBlbmNvZGVyOworCX0KKworCXJldHVybiBOVUxMOwor fQorCitzdGF0aWMgaW50IGx0ZGNfY3JlYXRlX2VuY29kZXJzKHN0cnVjdCBkcm1fZGV2aWNlICpk ZGV2KQoreworCXN0cnVjdCBsdGRjX2RldmljZSAqbGRldiA9IGRkZXYtPmRldl9wcml2YXRlOwor CXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKworCURSTV9ERUJVR19EUklWRVIoIlxuIik7 CisKKwlpZiAobGRldi0+cGFuZWwpIHsKKwkJZW5jb2RlciA9IGx0ZGNfcmdiX2VuY29kZXJfY3Jl YXRlKGRkZXYpOworCQlpZiAoIWVuY29kZXIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworLyoKKyAqIERSTV9DT05ORUNUT1IKKyAqLworCitzdGF0aWMgaW50IGx0 ZGNfcmdiX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVj dCBsdGRjX2RldmljZSAqbGRldiA9IGRkZXYtPmRldl9wcml2YXRlOworCWludCByZXQgPSAwOwor CisJRFJNX0RFQlVHX0RSSVZFUigiXG4iKTsKKworCWlmIChsZGV2LT5wYW5lbCkKKwkJcmV0ID0g ZHJtX3BhbmVsX2dldF9tb2RlcyhsZGV2LT5wYW5lbCk7CisKKwlyZXR1cm4gcmV0IDwgMCA/IDAg OiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgbHRk Y19yZ2JfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0gbHRkY19yZ2Jf Y29ubmVjdG9yX2dldF9tb2RlcywKK307CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3Rh dHVzCitsdGRjX3JnYl9jb25uZWN0b3JfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJc3RydWN0IGx0ZGNfZGV2aWNlICpsZGV2ID0gY29ubmVj dG9yX3RvX2x0ZGMoY29ubmVjdG9yKTsKKworCXJldHVybiBsZGV2LT5wYW5lbCA/IGNvbm5lY3Rv cl9zdGF0dXNfY29ubmVjdGVkIDoKKwkgICAgICAgY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0 ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGx0ZGNfcmdiX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJRFJNX0RFQlVHX0RSSVZFUigiXG4iKTsKKwor CWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xl YW51cChjb25uZWN0b3IpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jf ZnVuY3MgbHRkY19yZ2JfY29ubmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3Np bmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRldGVjdCA9IGx0ZGNfcmdiX2Nvbm5lY3Rvcl9kZXRl Y3QsCisJLmRlc3Ryb3kgPSBsdGRjX3JnYl9jb25uZWN0b3JfZGVzdHJveSwKKwkucmVzZXQgPSBk cm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3Rh dGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9t aWNfZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0 YXRlLAorfTsKKworc3RydWN0IGRybV9jb25uZWN0b3IgKmx0ZGNfcmdiX2Nvbm5lY3Rvcl9jcmVh dGUoc3RydWN0IGRybV9kZXZpY2UgKmRkZXYpCit7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcjsKKwlpbnQgZXJyOworCisJY29ubmVjdG9yID0gZGV2bV9remFsbG9jKGRkZXYtPmRl diwgc2l6ZW9mKCpjb25uZWN0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbm5lY3Rvcikgewor CQlEUk1fRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBjb25uZWN0b3JcbiIpOworCQlyZXR1cm4g TlVMTDsKKwl9CisKKwljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7 CisKKwllcnIgPSBkcm1fY29ubmVjdG9yX2luaXQoZGRldiwgY29ubmVjdG9yLCAmbHRkY19yZ2Jf Y29ubmVjdG9yX2Z1bmNzLAorCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUyk7CisJaWYgKGVy cikgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbm5lY3RvclxuIik7CisJ CXJldHVybiBOVUxMOworCX0KKworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3Is ICZsdGRjX3JnYl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKworCURSTV9ERUJVR19EUklWRVIo IlJHQiBjb25uZWN0b3I6JWQgY3JlYXRlZFxuIiwgY29ubmVjdG9yLT5iYXNlLmlkKTsKKworCXJl dHVybiBjb25uZWN0b3I7Cit9CisKK3N0YXRpYyBpbnQgbHRkY19nZXRfY2FwcyhzdHJ1Y3QgZHJt X2RldmljZSAqZGRldikKK3sKKwlzdHJ1Y3QgbHRkY19kZXZpY2UgKmxkZXYgPSBkZGV2LT5kZXZf cHJpdmF0ZTsKKwl1MzIgYnVzX3dpZHRoX2xvZzIsIGxjciwgZ2MycjsKKworCS8qIGF0IGxlYXN0 IDEgbGF5ZXIgbXVzdCBiZSBtYW5hZ2VkICovCisJbGNyID0gcmVnX3JlYWQobGRldi0+cmVncywg TFREQ19MQ1IpOworCisJbGRldi0+Y2Fwcy5uYl9sYXllcnMgPSBtYXhfdChpbnQsIGxjciwgMSk7 CisKKwkvKiBzZXQgZGF0YSBidXMgd2lkdGggKi8KKwlnYzJyID0gcmVnX3JlYWQobGRldi0+cmVn cywgTFREQ19HQzJSKTsKKwlidXNfd2lkdGhfbG9nMiA9IChnYzJyICYgR0MyUl9CVykgPj4gNDsK KwlsZGV2LT5jYXBzLmJ1c193aWR0aCA9IDggPDwgYnVzX3dpZHRoX2xvZzI7CisJbGRldi0+Y2Fw cy5od192ZXJzaW9uID0gcmVnX3JlYWQobGRldi0+cmVncywgTFREQ19JRFIpOworCisJc3dpdGNo IChsZGV2LT5jYXBzLmh3X3ZlcnNpb24pIHsKKwljYXNlIEhXVkVSXzEwMjAwOgorCWNhc2UgSFdW RVJfMTAzMDA6CisJCWxkZXYtPmNhcHMucmVnX29mcyA9IFJFR19PRlNfTk9ORTsKKwkJbGRldi0+ Y2Fwcy5waXhfZm10X2h3ID0gbHRkY19waXhfZm10X2EwOworCQlicmVhazsKKwljYXNlIEhXVkVS XzIwMTAxOgorCQlsZGV2LT5jYXBzLnJlZ19vZnMgPSBSRUdfT0ZTXzQ7CisJCWxkZXYtPmNhcHMu cGl4X2ZtdF9odyA9IGx0ZGNfcGl4X2ZtdF9hMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0 dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3Bh bmVsICpsdGRjX2dldF9wYW5lbChzdHJ1Y3QgZHJtX2RldmljZSAqZGRldikKK3sKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSBkZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+ b2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVudGl0eSwgKnBvcnQgPSBOVUxMOworCXN0 cnVjdCBkcm1fcGFuZWwgKnBhbmVsID0gTlVMTDsKKworCURSTV9ERUJVR19EUklWRVIoIlxuIik7 CisKKwkvKgorCSAqIFBhcnNlIGx0ZGMgbm9kZSB0byBnZXQgcmVtb3RlIHBvcnQgYW5kIGZpbmQg UkdCIHBhbmVsIC8gSERNSSBzbGF2ZQorCSAqIElmIGEgZHNpIG9yIGEgYnJpZGdlIChoZG1pLCBs dmRzLi4uKSBpcyBjb25uZWN0ZWQgdG8gbHRkYywKKwkgKiBhIHJlbW90ZSBwb3J0ICYgUkdCIHBh bmVsIHdpbGwgbm90IGJlIGZvdW5kLgorCSAqLworCWZvcl9lYWNoX2VuZHBvaW50X29mX25vZGUo bnAsIGVudGl0eSkgeworCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUoZW50aXR5KSkKKwkJ CWNvbnRpbnVlOworCisJCXBvcnQgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVu dGl0eSk7CisJCWlmIChwb3J0KSB7CisJCQlwYW5lbCA9IG9mX2RybV9maW5kX3BhbmVsKHBvcnQp OworCQkJb2Zfbm9kZV9wdXQocG9ydCk7CisJCQlpZiAocGFuZWwpIHsKKwkJCQlEUk1fREVCVUdf RFJJVkVSKCJyZW1vdGUgcGFuZWwgJXNcbiIsCisJCQkJCQkgcG9ydC0+ZnVsbF9uYW1lKTsKKwkJ CX0gZWxzZSB7CisJCQkJRFJNX0RFQlVHX0RSSVZFUigicGFuZWwgbWlzc2luZ1xuIik7CisJCQkJ b2Zfbm9kZV9wdXQoZW50aXR5KTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBwYW5lbDsKK30K KworaW50IGx0ZGNfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGRldikKK3sKKwlzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRkZXYtPmRldik7CisJc3Ry dWN0IGx0ZGNfZGV2aWNlICpsZGV2ID0gZGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRldmlj ZSAqZGV2ID0gZGRldi0+ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25v ZGU7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IgPSBOVUxMOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgcmVz ZXRfY29udHJvbCAqcnN0YzsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCWludCBpcnEsIHJldCwg aTsKKworCURSTV9ERUJVR19EUklWRVIoIlxuIik7CisKKwlsZGV2LT5wYW5lbCA9IGx0ZGNfZ2V0 X3BhbmVsKGRkZXYpOworCWlmICghbGRldi0+cGFuZWwpCisJCXJldHVybiAtRVBST0JFX0RFRkVS OworCisJcnN0YyA9IG9mX3Jlc2V0X2NvbnRyb2xfZ2V0KG5wLCBOVUxMKTsKKworCW11dGV4X2lu aXQoJmxkZXYtPmVycl9sb2NrKTsKKworCWxkZXYtPnBpeGVsX2NsayA9IGRldm1fY2xrX2dldChk ZXYsICJsY2QiKTsKKwlpZiAoSVNfRVJSKGxkZXYtPnBpeGVsX2NsaykpIHsKKwkJRFJNX0VSUk9S KCJVbmFibGUgdG8gZ2V0IGxjZCBjbG9ja1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwor CWlmIChjbGtfcHJlcGFyZV9lbmFibGUobGRldi0+cGl4ZWxfY2xrKSkgeworCQlEUk1fRVJST1Io IlVuYWJsZSB0byBwcmVwYXJlIHBpeGVsIGNsb2NrXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJ fQorCisJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMpKSB7CisJCURSTV9F UlJPUigiVW5hYmxlIHRvIGdldCByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0K KworCWxkZXYtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCAmcmVzKTsKKwlpZiAo SVNfRVJSKGxkZXYtPnJlZ3MpKSB7CisJCURSTV9FUlJPUigiVW5hYmxlIHRvIGdldCBsdGRjIHJl Z2lzdGVyc1xuIik7CisJCXJldHVybiBQVFJfRVJSKGxkZXYtPnJlZ3MpOworCX0KKworCWZvciAo aSA9IDA7IGkgPCBNQVhfSVJROyBpKyspIHsKKwkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2 LCBpKTsKKwkJaWYgKGlycSA8IDApCisJCQljb250aW51ZTsKKworCQlyZXQgPSBkZXZtX3JlcXVl c3RfdGhyZWFkZWRfaXJxKGRldiwgaXJxLCBsdGRjX2lycSwKKwkJCQkJCWx0ZGNfaXJxX3RocmVh ZCwgSVJRRl9PTkVTSE9ULAorCQkJCQkJZGV2X25hbWUoZGV2KSwgZGRldik7CisJCWlmIChyZXQp IHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIExUREMgaW50ZXJydXB0XG4iKTsK KwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlpZiAoIUlTX0VSUihyc3RjKSkKKwkJcmVzZXRf Y29udHJvbF9kZWFzc2VydChyc3RjKTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCXJl Z19jbGVhcihsZGV2LT5yZWdzLCBMVERDX0lFUiwKKwkJICBJRVJfTElFIHwgSUVSX1JSSUUgfCBJ RVJfRlVJRSB8IElFUl9URVJSSUUpOworCisJcmV0ID0gbHRkY19nZXRfY2FwcyhkZGV2KTsKKwlp ZiAocmV0KSB7CisJCURSTV9FUlJPUigiaGFyZHdhcmUgaWRlbnRpZmllciAoMHglMDh4KSBub3Qg c3VwcG9ydGVkIVxuIiwKKwkJCSAgbGRldi0+Y2Fwcy5od192ZXJzaW9uKTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlEUk1fSU5GTygibHRkYyBodyB2ZXJzaW9uIDB4JTA4eCAtIHJlYWR5XG4iLCBs ZGV2LT5jYXBzLmh3X3ZlcnNpb24pOworCisJaWYgKGx0ZGNfY3JlYXRlX2VuY29kZXJzKGRkZXYp KSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBlbmNvZGVyc1xuIik7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCWlmIChsZGV2LT5wYW5lbCkgeworCQllbmNvZGVyID0gbHRkY19y Z2JfZW5jb2Rlcl9maW5kKGRkZXYpOworCQlpZiAoIWVuY29kZXIpIHsKKwkJCURSTV9FUlJPUigi RmFpbGVkIHRvIGZpbmQgUkdCIGVuY29kZXJcbiIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdv dG8gZXJyOworCQl9CisKKwkJY29ubmVjdG9yID0gbHRkY19yZ2JfY29ubmVjdG9yX2NyZWF0ZShk ZGV2KTsKKwkJaWYgKCFjb25uZWN0b3IpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNyZWF0 ZSBSR0IgY29ubmVjdG9yXG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGVycjsKKwkJ fQorCisJCXJldCA9IGRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3Is IGVuY29kZXIpOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBhdHRhY2gg Y29ubmVjdG9yIHRvIGVuY29kZXJcbiIpOworCQkJZ290byBlcnI7CisJCX0KKworCQlkcm1fcGFu ZWxfYXR0YWNoKGxkZXYtPnBhbmVsLCBjb25uZWN0b3IpOworCX0KKworCWNydGMgPSBkZXZtX2t6 YWxsb2MoZGV2LCBzaXplb2YoKmNydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNydGMpIHsKKwkJ RFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgY3J0Y1xuIik7CisJCXJldCA9IC1FTk9NRU07 CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IGx0ZGNfY3J0Y19pbml0KGRkZXYsIGNydGMpOwor CWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdCBjcnRjXG4iKTsKKwkJZ290 byBlcnI7CisJfQorCisJcmV0ID0gZHJtX3ZibGFua19pbml0KGRkZXYsIE5CX0NSVEMpOworCWlm IChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgY2FsbGluZyBkcm1fdmJsYW5rX2luaXQoKVxu Iik7CisJCWdvdG8gZXJyOworCX0KKworCS8qIEFsbG93IHVzYWdlIG9mIHZibGFuayB3aXRob3V0 IGhhdmluZyB0byBjYWxsIGRybV9pcnFfaW5zdGFsbCAqLworCWRkZXYtPmlycV9lbmFibGVkID0g MTsKKworCXJldHVybiAwOworZXJyOgorCWlmIChsZGV2LT5wYW5lbCkKKwkJZHJtX3BhbmVsX2Rl dGFjaChsZGV2LT5wYW5lbCk7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUobGRldi0+cGl4ZWxf Y2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbHRkY191bmxvYWQoc3RydWN0IGRybV9k ZXZpY2UgKmRkZXYpCit7CisJc3RydWN0IGx0ZGNfZGV2aWNlICpsZGV2ID0gZGRldi0+ZGV2X3By aXZhdGU7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJcbiIpOworCisJZHJtX3ZibGFua19jbGVhbnVw KGRkZXYpOworCisJaWYgKGxkZXYtPnBhbmVsKQorCQlkcm1fcGFuZWxfZGV0YWNoKGxkZXYtPnBh bmVsKTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShsZGV2LT5waXhlbF9jbGspOworfQorCitN T0RVTEVfQVVUSE9SKCJQaGlsaXBwZSBDb3JudSA8cGhpbGlwcGUuY29ybnVAc3QuY29tPiIpOwor TU9EVUxFX0FVVEhPUigiWWFubmljayBGZXJ0cmUgPHlhbm5pY2suZmVydHJlQHN0LmNvbT4iKTsK K01PRFVMRV9BVVRIT1IoIkZhYmllbiBEZXNzZW5uZSA8ZmFiaWVuLmRlc3Nlbm5lQHN0LmNvbT4i KTsKK01PRFVMRV9BVVRIT1IoIk1pY2thZWwgUmV1bGllciA8bWlja2FlbC5yZXVsaWVyQHN0LmNv bT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU1RNaWNyb2VsZWN0cm9uaWNzIFNUIERSTSBMVERD IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3N0bS9sdGRjLmggYi9kcml2ZXJzL2dwdS9kcm0vc3RtL2x0ZGMuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2E5YzczCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3N0bS9sdGRjLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHly aWdodCAoQykgU1RNaWNyb2VsZWN0cm9uaWNzIFNBIDIwMTcKKyAqCisgKiBBdXRob3JzOiBQaGls aXBwZSBDb3JudSA8cGhpbGlwcGUuY29ybnVAc3QuY29tPgorICogICAgICAgICAgWWFubmljayBG ZXJ0cmUgPHlhbm5pY2suZmVydHJlQHN0LmNvbT4KKyAqICAgICAgICAgIEZhYmllbiBEZXNzZW5u ZSA8ZmFiaWVuLmRlc3Nlbm5lQHN0LmNvbT4KKyAqICAgICAgICAgIE1pY2thZWwgUmV1bGllciA8 bWlja2FlbC5yZXVsaWVyQHN0LmNvbT4KKyAqCisgKiBMaWNlbnNlIHRlcm1zOiAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgKEdQTCksIHZlcnNpb24gMgorICovCisKKyNpZm5kZWYgX0xURENf SF8KKyNkZWZpbmUgX0xURENfSF8KKworc3RydWN0IGx0ZGNfY2FwcyB7CisJdTMyIGh3X3ZlcnNp b247CQkvKiBoYXJkd2FyZSB2ZXJzaW9uICovCisJdTMyIG5iX2xheWVyczsJCS8qIG51bWJlciBv ZiBzdXBwb3J0ZWQgbGF5ZXJzICovCisJdTMyIHJlZ19vZnM7CQkvKiByZWdpc3RlciBvZmZzZXQg Zm9yIGFwcGxpY2FibGUgcmVncyAqLworCXUzMiBidXNfd2lkdGg7CQkvKiBidXMgd2lkdGggKDMy IG9yIDY0IGJpdHMpICovCisJY29uc3QgdTMyICpwaXhfZm10X2h3OwkvKiBzdXBwb3J0ZWQgcGl4 ZWwgZm9ybWF0cyAqLworfTsKKworc3RydWN0IGx0ZGNfZGV2aWNlIHsKKwlzdHJ1Y3QgZHJtX2Zi ZGV2X2NtYSAqZmJkZXY7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBjbGsgKnBpeGVs X2NsazsJLyogbGNkIHBpeGVsIGNsb2NrICovCisJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7CisJ c3RydWN0IG11dGV4IGVycl9sb2NrOwkvKiBwcm90ZWN0aW5nIGVycm9yX3N0YXR1cyAqLworCXN0 cnVjdCBsdGRjX2NhcHMgY2FwczsKKwl1MzIgY2x1dFsyNTZdOwkJLyogY29sb3IgbG9vayB1cCB0 YWJsZSAqLworCXUzMiBlcnJvcl9zdGF0dXM7CisJdTMyIGlycV9zdGF0dXM7Cit9OworCitpbnQg bHRkY19jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQg aW50IHBpcGUpOwordm9pZCBsdGRjX2NydGNfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUpOworaW50IGx0ZGNfbG9hZChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGRldik7Cit2b2lkIGx0ZGNfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2KTsK KworI2VuZGlmCi0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v ZHJpLWRldmVsCg==