From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhinav Kumar Subject: [PATCH v3 1/2] drm/panel: Add support for Truly NT35597 panel Date: Wed, 23 May 2018 18:44:00 -0700 Message-ID: <1527126241-23491-1-git-send-email-abhinavk@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: thierry.reding@gmail.com, linux-arm-msm@vger.kernel.org, Abhinav Kumar , hoegsberg@google.com, chandanu@codeaurora.org List-Id: linux-arm-msm@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIFRydWx5IE5UMzU1OTcgcGFuZWwgdXNlZAppbiBNU00gcmVmZXJlbmNl IHBsYXRmb3Jtcy4KClRoaXMgcGFuZWwgc3VwcG9ydHMgYm90aCBzaW5nbGUgRFNJIGFuZCBkdWFs IERTSQptb2Rlcy4KCkhvd2V2ZXIsIHRoaXMgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBvbmx5 IGZvcgpkdWFsIERTSSBtb2RlLgoKQ2hhbmdlcyBpbiB2MzoKLSBDaGFuZ2VzIHRvIGNvbW1pdCB0 ZXh0Ci0gU2VwYXJhdGVkIHRoZSBkb2N1bWVudGF0aW9uIGZyb20gdGhlIGRyaXZlciBpdHNlbGYK LSBJbXByb3ZlZCB0aGUgZG9jdW1lbnRhdGlvbiB0byBjb3ZlciB0aGUgcG9ydCBpbmZvcm1hdGlv bgotIEZvcm1hdHRpbmcgZml4ZXMgYW5kIGNoYW5nZXMgaW4gZGVsYXlzIGluIHBhbmVsIHNlcXVl bmNlcwotIENsZWFuZWQgdXAgcHJvYmUgZnVuY3Rpb24KClNpZ25lZC1vZmYtYnk6IEFyY2hpdCBU YW5lamEgPGFyY2hpdHRAY29kZWF1cm9yYS5vcmc+ClNpZ25lZC1vZmYtYnk6IEFiaGluYXYgS3Vt YXIgPGFiaGluYXZrQGNvZGVhdXJvcmEub3JnPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9L Y29uZmlnICAgICAgICAgICAgICAgfCAgIDggKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2Vm aWxlICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1 bHktbnQzNTU5Ny5jIHwgNTg4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMg Y2hhbmdlZCwgNTk3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vcGFuZWwvcGFuZWwtdHJ1bHktbnQzNTU5Ny5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3BhbmVsL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwppbmRl eCAyNTY4MmZmLi4yZmNkOWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2Nv bmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwpAQCAtMTc3LDQgKzE3Nywx MiBAQCBjb25maWcgRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYKIAkgIFNheSBZIGhlcmUgaWYg eW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBTaXRyb25peAogCSAgU1Q3Nzg5ViBj b250cm9sbGVyIGZvciAyNDB4MzIwIExDRCBwYW5lbHMKIAorY29uZmlnIERSTV9QQU5FTF9UUlVM WV9OVDM1NTk3X1dRWEdBCisJdHJpc3RhdGUgIlRydWx5IFdRWEdBIgorCWRlcGVuZHMgb24gT0YK KwlkZXBlbmRzIG9uIERSTV9NSVBJX0RTSQorCXNlbGVjdCBWSURFT01PREVfSEVMUEVSUworCWhl bHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFRydWx5 IE5UMzU1OTcgV1FYR0EgRHVhbCBEU0kKKwkgIFZpZGVvIE1vZGUgcGFuZWwKIGVuZG1lbnUKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9NYWtlZmlsZQppbmRleCBmMjZlZmMxLi4wNTZlYTkzIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01h a2VmaWxlCkBAIC0xOCwzICsxOCw0IEBAIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0VJS09fNDNX VkYxRykgKz0gcGFuZWwtc2Vpa28tNDN3dmYxZy5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NI QVJQX0xRMTAxUjFTWDAxKSArPSBwYW5lbC1zaGFycC1scTEwMXIxc3gwMS5vCiBvYmotJChDT05G SUdfRFJNX1BBTkVMX1NIQVJQX0xTMDQzVDFMRTAxKSArPSBwYW5lbC1zaGFycC1sczA0M3QxbGUw MS5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYpICs9IHBhbmVsLXNp dHJvbml4LXN0Nzc4OXYubworb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9UUlVMWV9OVDM1NTk3X1dR WEdBKSArPSBwYW5lbC10cnVseS1udDM1NTk3Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9wYW5lbC10cnVseS1udDM1NTk3LmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFu ZWwtdHJ1bHktbnQzNTU5Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUy OTA4NmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtdHJ1 bHktbnQzNTU5Ny5jCkBAIC0wLDAgKzEsNTg4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMAorLyogQ29weXJpZ2h0IChjKSAyMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisg KiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGlu dXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVk ZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9j b25zdW1lci5oPgorCisjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+CisjaW5jbHVkZSA8 dmlkZW8vb2ZfdmlkZW9tb2RlLmg+CisjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+CisKKyNp bmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX21pcGlfZHNpLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVndWxh dG9yX25hbWVzW10gPSB7CisJInZkZGEiLAorCSJ2ZGlzcHAiLAorCSJ2ZGlzcG4iCit9OworCitz dGF0aWMgdW5zaWduZWQgbG9uZyByZWd1bGF0b3JfZW5hYmxlX2xvYWRzW10gPSB7CisJNjIwMDAs CisJMTAwMDAwLAorCTEwMDAwMAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVndWxhdG9y X2Rpc2FibGVfbG9hZHNbXSA9IHsKKwk4MCwKKwkxMDAsCisJMTAwCit9OworCitzdHJ1Y3QgdHJ1 bHlfd3F4Z2EgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX3BhbmVsIHBhbmVs OworCisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbQVJSQVlfU0laRShyZWd1 bGF0b3JfbmFtZXMpXTsKKworCXN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87CisJc3RydWN0 IGdwaW9fZGVzYyAqbW9kZV9ncGlvOworCisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2ts aWdodDsKKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOworCisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZHNpWzJdOworCisJYm9vbCBwcmVwYXJlZDsKKwlib29sIGVuYWJsZWQ7Cit9OworCitzdGF0aWMg aW5saW5lIHN0cnVjdCB0cnVseV93cXhnYSAqcGFuZWxfdG9fdHJ1bHlfd3F4Z2Eoc3RydWN0IGRy bV9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwYW5lbCwgc3RydWN0IHRy dWx5X3dxeGdhLCBwYW5lbCk7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcG93ZXJfb24o c3RydWN0IHRydWx5X3dxeGdhICpjdHgpCit7CisJaW50IHJldCwgaTsKKworCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpOyBpKyspIHsKKwkJcmV0ID0gcmVndWxhdG9y X3NldF9sb2FkKGN0eC0+c3VwcGxpZXNbaV0uY29uc3VtZXIsCisJCQkJCXJlZ3VsYXRvcl9lbmFi bGVfbG9hZHNbaV0pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBy ZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwgY3R4LT5zdXBw bGllcyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwltc2xlZXAoMjApOworCWdw aW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDEpOworCW1zbGVlcCgyMCk7CisJZ3Bpb2Rf c2V0X3ZhbHVlKGN0eC0+cmVzZXRfZ3BpbywgMCk7CisJbXNsZWVwKDIwKTsKKwlncGlvZF9zZXRf dmFsdWUoY3R4LT5yZXNldF9ncGlvLCAxKTsKKwltc2xlZXAoNTApOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgdHJ1bHlfd3F4Z2FfcG93ZXJfb2ZmKHN0cnVjdCB0cnVseV93cXhnYSAq Y3R4KQoreworCWludCByZXQsIGk7CisKKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlv LCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpOyBpKysp IHsKKwkJcmV0ID0gcmVndWxhdG9yX3NldF9sb2FkKGN0eC0+c3VwcGxpZXNbaV0uY29uc3VtZXIs CisJCQkJcmVndWxhdG9yX2Rpc2FibGVfbG9hZHNbaV0pOworCQlpZiAocmV0KQorCQkJcmV0dXJu IHJldDsKKwl9CisKKwlyZXR1cm4gcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGN0 eC0+c3VwcGxpZXMpLCBjdHgtPnN1cHBsaWVzKTsKK30KKworc3RhdGljIGludCB0cnVseV93cXhn YV9kaXNhYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCB0cnVseV93cXhn YSAqY3R4ID0gcGFuZWxfdG9fdHJ1bHlfd3F4Z2EocGFuZWwpOworCisJaWYgKCFjdHgtPmVuYWJs ZWQpCisJCXJldHVybiAwOworCisJaWYgKGN0eC0+YmFja2xpZ2h0KSB7CisJCWN0eC0+YmFja2xp Z2h0LT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1BPV0VSRE9XTjsKKwkJYmFja2xpZ2h0X3VwZGF0 ZV9zdGF0dXMoY3R4LT5iYWNrbGlnaHQpOworCX0KKworCWN0eC0+ZW5hYmxlZCA9IGZhbHNlOwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRydWx5X3dxeGdhX3VucHJlcGFyZShzdHJ1Y3Qg ZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgdHJ1bHlfd3F4Z2EgKmN0eCA9IHBhbmVsX3Rv X3RydWx5X3dxeGdhKHBhbmVsKTsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICoqZHNpcyA9IGN0 eC0+ZHNpOworCWludCByZXQgPSAwLCBpOworCisJaWYgKCFjdHgtPnByZXBhcmVkKQorCQlyZXR1 cm4gMDsKKworCWRzaXNbMF0tPm1vZGVfZmxhZ3MgPSAwOworCWRzaXNbMV0tPm1vZGVfZmxhZ3Mg PSAwOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJaWYgKG1pcGlfZHNpX2Rjc19zZXRf ZGlzcGxheV9vZmYoZHNpc1tpXSkgPCAwKQorCQkJcmV0ID0gLUVDT01NOworCisJbXNsZWVwKDEy MCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlpZiAobWlwaV9kc2lfZGNzX2VudGVy X3NsZWVwX21vZGUoZHNpc1tpXSkgPCAwKQorCQkJcmV0ID0gLUVDT01NOworCisJdHJ1bHlfd3F4 Z2FfcG93ZXJfb2ZmKGN0eCk7CisKKwljdHgtPnByZXBhcmVkID0gZmFsc2U7CisJcmV0dXJuIHJl dDsKK30KKworI2RlZmluZSBNQVhfTEVOCTUKK3N0cnVjdCB7CisJdTggY29tbWFuZHNbTUFYX0xF Tl07CisJaW50IHNpemU7Cit9IHBhbmVsX2NtZHNbXSA9IHsgLyogQ01EMl9QMCAqLworCQkgICB7 IHsgMHhmZiwgMHgyMCB9LCAyIH0sCisJCSAgIHsgeyAweGZiLCAweDAxIH0sIDIgfSwKKwkJICAg eyB7IDB4MDAsIDB4MDEgfSwgMiB9LAorCQkgICB7IHsgMHgwMSwgMHg1NSB9LCAyIH0sCisJCSAg IHsgeyAweDAyLCAweDQ1IH0sIDIgfSwKKwkJICAgeyB7IDB4MDUsIDB4NDAgfSwgMiB9LAorCQkg ICB7IHsgMHgwNiwgMHgxOSB9LCAyIH0sCisJCSAgIHsgeyAweDA3LCAweDFlIH0sIDIgfSwKKwkJ ICAgeyB7IDB4MGIsIDB4NzMgfSwgMiB9LAorCQkgICB7IHsgMHgwYywgMHg3MyB9LCAyIH0sCisJ CSAgIHsgeyAweDBlLCAweGIwIH0sIDIgfSwKKwkJICAgeyB7IDB4MGYsIDB4YWUgfSwgMiB9LAor CQkgICB7IHsgMHgxMSwgMHhiOCB9LCAyIH0sCisJCSAgIHsgeyAweDEzLCAweDAwIH0sIDIgfSwK KwkJICAgeyB7IDB4NTgsIDB4ODAgfSwgMiB9LAorCQkgICB7IHsgMHg1OSwgMHgwMSB9LCAyIH0s CisJCSAgIHsgeyAweDVhLCAweDAwIH0sIDIgfSwKKwkJICAgeyB7IDB4NWIsIDB4MDEgfSwgMiB9 LAorCQkgICB7IHsgMHg1YywgMHg4MCB9LCAyIH0sCisJCSAgIHsgeyAweDVkLCAweDgxIH0sIDIg fSwKKwkJICAgeyB7IDB4NWUsIDB4MDAgfSwgMiB9LAorCQkgICB7IHsgMHg1ZiwgMHgwMSB9LCAy IH0sCisJCSAgIHsgeyAweDcyLCAweDExIH0sIDIgfSwKKwkJICAgeyB7IDB4NjgsIDB4MDMgfSwg MiB9LAorCQkgICAvKiBDTUQyX1A0ICovCisJCSAgIHsgeyAweEZGLCAweDI0IH0sIDIgfSwKKwkJ ICAgeyB7IDB4RkIsIDB4MDEgfSwgMiB9LAorCQkgICB7IHsgMHgwMCwgMHgxQyB9LCAyIH0sCisJ CSAgIHsgeyAweDAxLCAweDBCIH0sIDIgfSwKKwkJICAgeyB7IDB4MDIsIDB4MEMgfSwgMiB9LAor CQkgICB7IHsgMHgwMywgMHgwMSB9LCAyIH0sCisJCSAgIHsgeyAweDA0LCAweDBGIH0sIDIgfSwK KwkJICAgeyB7IDB4MDUsIDB4MTAgfSwgMiB9LAorCQkgICB7IHsgMHgwNiwgMHgxMCB9LCAyIH0s CisJCSAgIHsgeyAweDA3LCAweDEwIH0sIDIgfSwKKwkJICAgeyB7IDB4MDgsIDB4ODkgfSwgMiB9 LAorCQkgICB7IHsgMHgwOSwgMHg4QSB9LCAyIH0sCisJCSAgIHsgeyAweDBBLCAweDEzIH0sIDIg fSwKKwkJICAgeyB7IDB4MEIsIDB4MTMgfSwgMiB9LAorCQkgICB7IHsgMHgwQywgMHgxNSB9LCAy IH0sCisJCSAgIHsgeyAweDBELCAweDE1IH0sIDIgfSwKKwkJICAgeyB7IDB4MEUsIDB4MTcgfSwg MiB9LAorCQkgICB7IHsgMHgwRiwgMHgxNyB9LCAyIH0sCisJCSAgIHsgeyAweDEwLCAweDFDIH0s IDIgfSwKKwkJICAgeyB7IDB4MTEsIDB4MEIgfSwgMiB9LAorCQkgICB7IHsgMHgxMiwgMHgwQyB9 LCAyIH0sCisJCSAgIHsgeyAweDEzLCAweDAxIH0sIDIgfSwKKwkJICAgeyB7IDB4MTQsIDB4MEYg fSwgMiB9LAorCQkgICB7IHsgMHgxNSwgMHgxMCB9LCAyIH0sCisJCSAgIHsgeyAweDE2LCAweDEw IH0sIDIgfSwKKwkJICAgeyB7IDB4MTcsIDB4MTAgfSwgMiB9LAorCQkgICB7IHsgMHgxOCwgMHg4 OSB9LCAyIH0sCisJCSAgIHsgeyAweDE5LCAweDhBIH0sIDIgfSwKKwkJICAgeyB7IDB4MUEsIDB4 MTMgfSwgMiB9LAorCQkgICB7IHsgMHgxQiwgMHgxMyB9LCAyIH0sCisJCSAgIHsgeyAweDFDLCAw eDE1IH0sIDIgfSwKKwkJICAgeyB7IDB4MUQsIDB4MTUgfSwgMiB9LAorCQkgICB7IHsgMHgxRSwg MHgxNyB9LCAyIH0sCisJCSAgIHsgeyAweDFGLCAweDE3IH0sIDIgfSwKKwkJICAgLyogU1RWICov CisJCSAgIHsgeyAweDIwLCAweDQwIH0sIDIgfSwKKwkJICAgeyB7IDB4MjEsIDB4MDEgfSwgMiB9 LAorCQkgICB7IHsgMHgyMiwgMHgwMCB9LCAyIH0sCisJCSAgIHsgeyAweDIzLCAweDQwIH0sIDIg fSwKKwkJICAgeyB7IDB4MjQsIDB4NDAgfSwgMiB9LAorCQkgICB7IHsgMHgyNSwgMHg2RCB9LCAy IH0sCisJCSAgIHsgeyAweDI2LCAweDQwIH0sIDIgfSwKKwkJICAgeyB7IDB4MjcsIDB4NDAgfSwg MiB9LAorCQkgICAvKiBWZW5kICovCisJCSAgIHsgeyAweEUwLCAweDAwIH0sIDIgfSwKKwkJICAg eyB7IDB4REMsIDB4MjEgfSwgMiB9LAorCQkgICB7IHsgMHhERCwgMHgyMiB9LCAyIH0sCisJCSAg IHsgeyAweERFLCAweDA3IH0sIDIgfSwKKwkJICAgeyB7IDB4REYsIDB4MDcgfSwgMiB9LAorCQkg ICB7IHsgMHhFMywgMHg2RCB9LCAyIH0sCisJCSAgIHsgeyAweEUxLCAweDA3IH0sIDIgfSwKKwkJ ICAgeyB7IDB4RTIsIDB4MDcgfSwgMiB9LAorCQkgICAvKiBVRCAqLworCQkgICB7IHsgMHgyOSwg MHhEOCB9LCAyIH0sCisJCSAgIHsgeyAweDJBLCAweDJBIH0sIDIgfSwKKwkJICAgLyogQ0xLICov CisJCSAgIHsgeyAweDRCLCAweDAzIH0sIDIgfSwKKwkJICAgeyB7IDB4NEMsIDB4MTEgfSwgMiB9 LAorCQkgICB7IHsgMHg0RCwgMHgxMCB9LCAyIH0sCisJCSAgIHsgeyAweDRFLCAweDAxIH0sIDIg fSwKKwkJICAgeyB7IDB4NEYsIDB4MDEgfSwgMiB9LAorCQkgICB7IHsgMHg1MCwgMHgxMCB9LCAy IH0sCisJCSAgIHsgeyAweDUxLCAweDAwIH0sIDIgfSwKKwkJICAgeyB7IDB4NTIsIDB4ODAgfSwg MiB9LAorCQkgICB7IHsgMHg1MywgMHgwMCB9LCAyIH0sCisJCSAgIHsgeyAweDU2LCAweDAwIH0s IDIgfSwKKwkJICAgeyB7IDB4NTQsIDB4MDcgfSwgMiB9LAorCQkgICB7IHsgMHg1OCwgMHgwNyB9 LCAyIH0sCisJCSAgIHsgeyAweDU1LCAweDI1IH0sIDIgfSwKKwkJICAgLyogUmVzZXQgWERPTkIg Ki8KKwkJICAgeyB7IDB4NUIsIDB4NDMgfSwgMiB9LAorCQkgICB7IHsgMHg1QywgMHgwMCB9LCAy IH0sCisJCSAgIHsgeyAweDVGLCAweDczIH0sIDIgfSwKKwkJICAgeyB7IDB4NjAsIDB4NzMgfSwg MiB9LAorCQkgICB7IHsgMHg2MywgMHgyMiB9LCAyIH0sCisJCSAgIHsgeyAweDY0LCAweDAwIH0s IDIgfSwKKwkJICAgeyB7IDB4NjcsIDB4MDggfSwgMiB9LAorCQkgICB7IHsgMHg2OCwgMHgwNCB9 LCAyIH0sCisJCSAgIC8qIFJlc29sdXRpb246MTQ0MHgyNTYwICovCisJCSAgIHsgeyAweDcyLCAw eDAyIH0sIDIgfSwKKwkJICAgLyogbXV4ICovCisJCSAgIHsgeyAweDdBLCAweDgwIH0sIDIgfSwK KwkJICAgeyB7IDB4N0IsIDB4OTEgfSwgMiB9LAorCQkgICB7IHsgMHg3QywgMHhEOCB9LCAyIH0s CisJCSAgIHsgeyAweDdELCAweDYwIH0sIDIgfSwKKwkJICAgeyB7IDB4N0YsIDB4MTUgfSwgMiB9 LAorCQkgICB7IHsgMHg3NSwgMHgxNSB9LCAyIH0sCisJCSAgIC8qIEFCT0ZGICovCisJCSAgIHsg eyAweEIzLCAweEMwIH0sIDIgfSwKKwkJICAgeyB7IDB4QjQsIDB4MDAgfSwgMiB9LAorCQkgICB7 IHsgMHhCNSwgMHgwMCB9LCAyIH0sCisJCSAgIC8qIFNvdXJjZSBFUSAqLworCQkgICB7IHsgMHg3 OCwgMHgwMCB9LCAyIH0sCisJCSAgIHsgeyAweDc5LCAweDAwIH0sIDIgfSwKKwkJICAgeyB7IDB4 ODAsIDB4MDAgfSwgMiB9LAorCQkgICB7IHsgMHg4MywgMHgwMCB9LCAyIH0sCisJCSAgIC8qIEZQ IEJQICovCisJCSAgIHsgeyAweDkzLCAweDBBIH0sIDIgfSwKKwkJICAgeyB7IDB4OTQsIDB4MEEg fSwgMiB9LAorCQkgICAvKiBJbnZlcnNpb24gVHlwZSAqLworCQkgICB7IHsgMHg4QSwgMHgwMCB9 LCAyIH0sCisJCSAgIHsgeyAweDlCLCAweEZGIH0sIDIgfSwKKwkJICAgLyogSU1HU1dBUCA9MSBA UG9ydFN3YXA9MSAqLworCQkgICB7IHsgMHg5RCwgMHhCMCB9LCAyIH0sCisJCSAgIHsgeyAweDlG LCAweDYzIH0sIDIgfSwKKwkJICAgeyB7IDB4OTgsIDB4MTAgfSwgMiB9LAorCQkgICAvKiBGUk0g Ki8KKwkJICAgeyB7IDB4RUMsIDB4MDAgfSwgMiB9LAorCQkgICAvKiBDTUQxICovCisJCSAgIHsg eyAweEZGLCAweDEwIH0sIDIgfSwKKwkJICAgIC8qIFZCUCtWU0E9LFZGUCA9IDEwSCAqLworCQkg ICB7IHsgMHgzQiwgMHgwMywgMHgwQSwgMHgwQSwgfSwgNCB9LAorCQkgICAvKiBGVEUgb24gKi8K KwkJICAgeyB7IDB4MzUsIDB4MDAgfSwgMiB9LAorCQkgICAvKiBFTl9CSyA9MShhdXRvIGJsYWNr KSAqLworCQkgICB7IHsgMHhFNSwgMHgwMSB9LCAyIH0sCisJCSAgIC8qIENNRCBtb2RlKDEwKSBW RE8gbW9kZSgwMykgKi8KKwkJICAgeyB7IDB4QkIsIDB4MDMgfSwgMiB9LAorCQkgICAvKiBOb24g UmVsb2FkIE1UUCAqLworCQkgICB7IHsgMHhGQiwgMHgwMSB9LCAyIH0sCit9OworCitzdGF0aWMg aW50IHRydWx5X3dxeGdhX3ByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3Ry dWN0IHRydWx5X3dxeGdhICpjdHggPSBwYW5lbF90b190cnVseV93cXhnYShwYW5lbCk7CisJc3Ry dWN0IG1pcGlfZHNpX2RldmljZSAqKmRzaXMgPSBjdHgtPmRzaTsKKwlzdHJ1Y3QgbWlwaV9kc2lf ZGV2aWNlICpkOworCWludCByZXQsIGksIGo7CisKKwlpZiAoY3R4LT5wcmVwYXJlZCkKKwkJcmV0 dXJuIDA7CisKKwlyZXQgPSB0cnVseV93cXhnYV9wb3dlcl9vbihjdHgpOworCWlmIChyZXQgPCAw KQorCQlyZXR1cm4gcmV0OworCisJZHNpc1swXS0+bW9kZV9mbGFncyB8PSBNSVBJX0RTSV9NT0RF X0xQTTsKKwlkc2lzWzFdLT5tb2RlX2ZsYWdzIHw9IE1JUElfRFNJX01PREVfTFBNOworCisJZm9y IChqID0gMDsgaiA8IEFSUkFZX1NJWkUocGFuZWxfY21kcyk7IGorKykgeworCQlmb3IgKGkgPSAw OyBpIDwgMjsgaSsrKSB7CisJCQlkID0gZHNpc1tpXTsKKwkJCXJldCA9IG1pcGlfZHNpX2Rjc193 cml0ZV9idWZmZXIoZHNpc1tpXSwKKwkJCQkJcGFuZWxfY21kc1tqXS5jb21tYW5kcywKKwkJCQkJ cGFuZWxfY21kc1tqXS5zaXplKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJZGV2X2VycihjdHgt PmRldiwgImZhaWxlZCB0byBjbWQgbm8gJWQsIGVycjogJWRcbiIsCisJCQkJCQlqLCByZXQpOwor CQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsr KQorCQlpZiAobWlwaV9kc2lfZGNzX2V4aXRfc2xlZXBfbW9kZShkc2lzW2ldKSA8IDApIHsKKwkJ CWRldl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8gZXhpdCBzbGVlcCBtb2RlXG4iKTsKKwkJCXJl dHVybiAtRUNPTU07CisJCX0KKwltc2xlZXAoNzgpOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkr KykKKwkJaWYgKG1pcGlfZHNpX2Rjc19zZXRfZGlzcGxheV9vbihkc2lzW2ldKSA8IDApIHsKKwkJ CWRldl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8gc2VuZCBkaXNwbGF5IG9uXG4iKTsKKwkJCXJl dHVybiAtRUNPTU07CisJCX0KKwltc2xlZXAoNzgpOworCisJY3R4LT5wcmVwYXJlZCA9IHRydWU7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cnVseV93cXhnYV9lbmFibGUoc3RydWN0 IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBwYW5lbF90 b190cnVseV93cXhnYShwYW5lbCk7CisKKwlpZiAoY3R4LT5lbmFibGVkKQorCQlyZXR1cm4gMDsK KworCWlmIChjdHgtPmJhY2tsaWdodCkgeworCQljdHgtPmJhY2tsaWdodC0+cHJvcHMucG93ZXIg PSBGQl9CTEFOS19VTkJMQU5LOworCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhjdHgtPmJhY2ts aWdodCk7CisJfQorCWN0eC0+ZW5hYmxlZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGludCB0cnVseV93cXhnYV9nZXRfbW9kZXMoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7 CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IHBhbmVsLT5jb25uZWN0b3I7CisJ c3RydWN0IHRydWx5X3dxeGdhICpjdHggPSBwYW5lbF90b190cnVseV93cXhnYShwYW5lbCk7CisJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisKKwltb2RlID0gZHJtX21vZGVfY3JlYXRl KGNvbm5lY3Rvci0+ZGV2KTsKKwlpZiAoIW1vZGUpIHsKKwkJZGV2X2VycihjdHgtPmRldiwgImZh aWxlZCB0byBjcmVhdGUgYSBuZXcgZGlzcGxheSBtb2RlXG4iKTsKKwkJcmV0dXJuIDA7CisJfQor CisJZHJtX2Rpc3BsYXlfbW9kZV9mcm9tX3ZpZGVvbW9kZSgmY3R4LT52bSwgbW9kZSk7CisJY29u bmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW0gPSA3NDsKKwljb25uZWN0b3ItPmRpc3BsYXlf aW5mby5oZWlnaHRfbW0gPSAxMzE7CisJbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVS IHwgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CisJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0 b3IsIG1vZGUpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Bh bmVsX2Z1bmNzIHRydWx5X3dxeGdhX2RybV9mdW5jcyA9IHsKKwkuZGlzYWJsZSA9IHRydWx5X3dx eGdhX2Rpc2FibGUsCisJLnVucHJlcGFyZSA9IHRydWx5X3dxeGdhX3VucHJlcGFyZSwKKwkucHJl cGFyZSA9IHRydWx5X3dxeGdhX3ByZXBhcmUsCisJLmVuYWJsZSA9IHRydWx5X3dxeGdhX2VuYWJs ZSwKKwkuZ2V0X21vZGVzID0gdHJ1bHlfd3F4Z2FfZ2V0X21vZGVzLAorfTsKKworc3RhdGljIGlu dCB0cnVseV93cXhnYV9wYW5lbF9hZGQoc3RydWN0IHRydWx5X3dxeGdhICpjdHgpCit7CisJc3Ry dWN0IGRldmljZSAqZGV2ID0gY3R4LT5kZXY7CisJaW50IHJldCwgaTsKKworCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpOyBpKyspCisJCWN0eC0+c3VwcGxpZXNbaV0u c3VwcGx5ID0gcmVndWxhdG9yX25hbWVzW2ldOworCisJcmV0ID0gZGV2bV9yZWd1bGF0b3JfYnVs a19nZXQoZGV2LCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpLAorCQkJCSAgICAgIGN0eC0+c3Vw cGxpZXMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJY3R4LT5yZXNldF9ncGlv ID0gZGV2bV9ncGlvZF9nZXQoZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfSElHSCk7CisJaWYgKElT X0VSUihjdHgtPnJlc2V0X2dwaW8pKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCByZXNl dC1ncGlvcyAlbGRcbiIsCisJCQlQVFJfRVJSKGN0eC0+cmVzZXRfZ3BpbykpOworCQlyZXR1cm4g UFRSX0VSUihjdHgtPnJlc2V0X2dwaW8pOworCX0KKworCWN0eC0+bW9kZV9ncGlvID0gZGV2bV9n cGlvZF9nZXQoZGV2LCAibW9kZSIsIEdQSU9EX09VVF9MT1cpOworCWlmIChJU19FUlIoY3R4LT5t b2RlX2dwaW8pKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBtb2RlIGdwaW8gJWxkXG4i LAorCQkJUFRSX0VSUihjdHgtPm1vZGVfZ3BpbykpOworCQljdHgtPm1vZGVfZ3BpbyA9IE5VTEw7 CisJCXJldHVybiBQVFJfRVJSKGN0eC0+bW9kZV9ncGlvKTsKKwl9CisKKwkvKiBkdWFsIHBvcnQg Ki8KKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5tb2RlX2dwaW8sIDApOworCisJcmV0ID0gb2ZfZ2V0 X3ZpZGVvbW9kZShkZXYtPm9mX25vZGUsICZjdHgtPnZtLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJ cmV0dXJuIHJldDsKKworCWRybV9wYW5lbF9pbml0KCZjdHgtPnBhbmVsKTsKKwljdHgtPnBhbmVs LmRldiA9IGRldjsKKwljdHgtPnBhbmVsLmZ1bmNzID0gJnRydWx5X3dxeGdhX2RybV9mdW5jczsK Kwlkcm1fcGFuZWxfYWRkKCZjdHgtPnBhbmVsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg dm9pZCB0cnVseV93cXhnYV9wYW5lbF9kZWwoc3RydWN0IHRydWx5X3dxeGdhICpjdHgpCit7CisJ aWYgKGN0eC0+cGFuZWwuZGV2KQorCQlkcm1fcGFuZWxfcmVtb3ZlKCZjdHgtPnBhbmVsKTsKK30K Kworc3RhdGljIGludCB0cnVseV93cXhnYV9wcm9iZShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpk c2kpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRzaS0+ZGV2OworCXN0cnVjdCB0cnVseV93 cXhnYSAqY3R4OworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKnNlY29uZGFyeTsKKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKmRzaTE7CisJc3RydWN0IG1pcGlfZHNpX2hvc3QgKmRzaTFfaG9zdDsKKwlp bnQgcmV0ID0gMDsKKwljb25zdCBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlX2luZm8gaW5mbyA9IHsu dHlwZSA9ICJ0cnVseW50MzU1OTciLAorCQkuY2hhbm5lbCA9IDAsCisJCS5ub2RlID0gTlVMTCwK Kwl9OworCisJY3R4ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVM KTsKKworCWlmICghY3R4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2RzaV9jdHg7 CisJfQorCisJLyogVGhpcyBkZXZpY2UgcmVwcmVzZW50cyBpdHNlbGYgYXMgb25lIHdpdGgKKwkg KiB0d28gaW5wdXQgcG9ydHMgd2hpY2ggYXJlIGZlZCBieSB0aGUgb3V0cHV0CisJICogcG9ydHMg b2YgdGhlIHR3byBEU0kgY29udHJvbGxlcnMgLiBUaGUgRFNJMAorCSAqIGlzIHRoZSBtYXN0ZXIg Y29udHJvbGxlciBhbmQgaGFzIG1vc3Qgb2YgdGhlCisJICogcGFuZWwgcmVsYXRlZCBpbmZvIGlu IGl0cyBjaGlsZCBub2RlLgorCSAqLworCisJZHNpMSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfbm9k ZShkc2ktPmRldi5vZl9ub2RlLCAxLCAtMSk7CisJaWYgKCFkc2kxKSB7CisJCWRldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIGdldCByZW1vdGUgbm9kZSBmb3Igc2Vjb25kYXJ5IERTSVxuIik7CisJCXJl dCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2dldF9yZW1vdGU7CisJfQorCisJZHNpMV9ob3N0ID0g b2ZfZmluZF9taXBpX2RzaV9ob3N0X2J5X25vZGUoZHNpMSk7CisJaWYgKCFkc2kxX2hvc3QpIHsK KwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZmluZCBkc2kgaG9zdFxuIik7CisJCXJldCA9IC1F UFJPQkVfREVGRVI7CisJCWdvdG8gZXJyX2hvc3Q7CisJfQorCisJb2Zfbm9kZV9wdXQoZHNpMSk7 CisKKwkvKiByZWdpc3RlciB0aGUgc2Vjb25kIERTSSBkZXZpY2UgKi8KKwlzZWNvbmRhcnkgPSBt aXBpX2RzaV9kZXZpY2VfcmVnaXN0ZXJfZnVsbChkc2kxX2hvc3QsICZpbmZvKTsKKworCWlmIChJ U19FUlIoc2Vjb25kYXJ5KSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgZHNp IGRldmljZVxuIik7CisJCXJldCA9IFBUUl9FUlIoZHNpKTsKKwkJZ290byBlcnJfZHNpX2Rldmlj ZTsKKwl9CisKKwltaXBpX2RzaV9zZXRfZHJ2ZGF0YShkc2ksIGN0eCk7CisKKwljdHgtPmRldiA9 IGRldjsKKwljdHgtPmRzaVswXSA9IGRzaTsKKwljdHgtPmRzaVsxXSA9IHNlY29uZGFyeTsKKwor CXJldCA9IHRydWx5X3dxeGdhX3BhbmVsX2FkZChjdHgpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vy cihkZXYsICJmYWlsZWQgdG8gYWRkIHBhbmVsXG4iKTsKKwkJZ290byBlcnJfcGFuZWxfYWRkOwor CX0KKworCS8qIGNvbmZpZ3VyZSBtYXN0ZXIgRFNJIGRldmljZSAqLworCWRzaS0+bGFuZXMgPSA0 OworCWRzaS0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKKwlkc2ktPm1vZGVfZmxhZ3Mg PSBNSVBJX0RTSV9NT0RFX1ZJREVPIHwgTUlQSV9EU0lfQ0xPQ0tfTk9OX0NPTlRJTlVPVVMgfAor CQkJCQkJTUlQSV9EU0lfTU9ERV9MUE07CisKKwlyZXQgPSBtaXBpX2RzaV9hdHRhY2goZHNpKTsK KwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIm1hc3RlciBkc2kgYXR0YWNoIGZhaWxl ZFxuIik7CisJCWdvdG8gZXJyX2RzaV9hdHRhY2g7CisJfQorCisJLyogY29uZmlndXJlIHNlY29u ZGFyeSBEU0kgZGV2aWNlICovCisJc2Vjb25kYXJ5LT5sYW5lcyA9IDQ7CisJc2Vjb25kYXJ5LT5m b3JtYXQgPSBNSVBJX0RTSV9GTVRfUkdCODg4OworCXNlY29uZGFyeS0+bW9kZV9mbGFncyA9IE1J UElfRFNJX01PREVfVklERU8gfAorCQlNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUyB8CisJ CU1JUElfRFNJX01PREVfTFBNOworCisJcmV0ID0gbWlwaV9kc2lfYXR0YWNoKHNlY29uZGFyeSk7 CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJtaXBpX2RzaV9hdHRhY2ggb24gc2Vj b25kYXJ5IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2RzaV9hdHRhY2hfc2VjOworCX0KKworCXJl dHVybiAwOworCitlcnJfZHNpX2F0dGFjaF9zZWM6CisJbWlwaV9kc2lfZGV0YWNoKGN0eC0+ZHNp WzBdKTsKK2Vycl9kc2lfYXR0YWNoOgorCXRydWx5X3dxeGdhX3BhbmVsX2RlbChjdHgpOworZXJy X3BhbmVsX2FkZDoKKwltaXBpX2RzaV9kZXZpY2VfdW5yZWdpc3RlcihzZWNvbmRhcnkpOworZXJy X2RzaV9kZXZpY2U6CitlcnJfaG9zdDoKKwlvZl9ub2RlX3B1dChkc2kxKTsKK2Vycl9nZXRfcmVt b3RlOgorZXJyX2RzaV9jdHg6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0cnVseV93 cXhnYV9yZW1vdmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCB0cnVs eV93cXhnYSAqY3R4ID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsKKworCWlmIChjdHgtPmRz aVswXSkKKwkJbWlwaV9kc2lfZGV0YWNoKGN0eC0+ZHNpWzBdKTsKKwlpZiAoY3R4LT5kc2lbMV0p IHsKKwkJbWlwaV9kc2lfZGV0YWNoKGN0eC0+ZHNpWzFdKTsKKwkJbWlwaV9kc2lfZGV2aWNlX3Vu cmVnaXN0ZXIoY3R4LT5kc2lbMV0pOworCX0KKwl0cnVseV93cXhnYV9wYW5lbF9kZWwoY3R4KTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB0cnVs eV93cXhnYV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAidHJ1bHksbnQzNTU5NyIs IH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdHJ1bHlfd3F4Z2Ffb2ZfbWF0 Y2gpOworCitzdGF0aWMgc3RydWN0IG1pcGlfZHNpX2RyaXZlciB0cnVseV93cXhnYV9kcml2ZXIg PSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicGFuZWxfdHJ1bHlfbnQzNTU5NyIsCisJCS5v Zl9tYXRjaF90YWJsZSA9IHRydWx5X3dxeGdhX29mX21hdGNoLAorCX0sCisJLnByb2JlID0gdHJ1 bHlfd3F4Z2FfcHJvYmUsCisJLnJlbW92ZSA9IHRydWx5X3dxeGdhX3JlbW92ZSwKK307Cittb2R1 bGVfbWlwaV9kc2lfZHJpdmVyKHRydWx5X3dxeGdhX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQ VElPTigiVHJ1bHkgTlQzNTU5NyBEU0kgUGFuZWwgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgi R1BMIHYyIik7Ci0tIApUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMgYSBt ZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFi b3JhdGl2ZSBQcm9qZWN0CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWwK