From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: [PATCH RFC v9 15/20] drm: panel: Add support for Himax HX8369A MIPI DSI panel Date: Thu, 12 Feb 2015 14:01:38 +0800 Message-ID: <1423720903-24806-16-git-send-email-Ying.Liu@freescale.com> References: <1423720903-24806-1-git-send-email-Ying.Liu@freescale.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1423720903-24806-1-git-send-email-Ying.Liu@freescale.com> 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: stefan.wahren@i2se.com, devicetree@vger.kernel.org, linux@arm.linux.org.uk, kernel@pengutronix.de, sboyd@codeaurora.org, linux-kernel@vger.kernel.org, a.hajda@samsung.com, andy.yan@rock-chips.com, mturquette@linaro.org, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEhpbWF4IEhYODM2OUEgTUlQSSBEU0kgcGFuZWwu CgpSZXZpZXdlZC1ieTogQW5kcnplaiBIYWpkYSA8YS5oYWpkYUBzYW1zdW5nLmNvbT4KU2lnbmVk LW9mZi1ieTogTGl1IFlpbmcgPFlpbmcuTGl1QGZyZWVzY2FsZS5jb20+Ci0tLQp2OC0+djk6CiAq IFJlYmFzZSBvbnRvIHRoZSBpbXgtZHJtL25leHQgYnJhbmNoIG9mIFBoaWxpcHAgWmFiZWwncyBv cGVuIGdpdCByZXBvc2l0b3J5LgogKiBBZGQgZHJpdmVyIGNvcHlyaWdodCBmb3IgMjAxNS4KCnY3 LT52ODoKICogUmVtb3ZlIHNldmVyYWwgdW5uZWNlc3NhcnkgaGVhZGVycyBpbmNsdWRlZCBpbiB0 aGUgZHJpdmVyLgoKdjYtPnY3OgogKiBBZGRyZXNzIEFuZHJ6ZWogSGFqZGEncyBmb2xsb3dpbmcg Y29tbWVudHMuCiAqIFNpbXBsaWZ5IHRoZSByZXR1cm4gbG9naWMgaW4gaHg4MzY5YV9kY3Nfd3Jp dGUoKS4KICogUmVwbGFjZSB0aGUgbWFjcm8gaHg4MzY5YV9kc2lfaW5pdF9oZWxwZXIoKSB3aXRo IGEgZnVuY3Rpb24gYXJyYXkgdG8gaW1wcm92ZQogICB0aGUgY29kZSBxdWFsaXR5LgogKiBIYW5k bGUgZXJyb3IgY2FzZXMgZHVyaW5nIGdldHRpbmcgZ3Bpb3MgaW4gcHJvYmUoKS4KICogQWRkICdS ZXZpZXdlZC1ieTogQW5kcnplaiBIYWpkYSA8YS5oYWpkYUBzYW1zdW5nLmNvbT4nLgoKdjUtPnY2 OgogKiBNYWtlIHRoZSBjaGVja3BhdGNoLnBsIHNjcmlwdCBiZSBoYXBwaWVyLgogKiBEbyBub3Qg c2V0IHRoZSBkc2kgY2hhbm5lbCBudW1iZXIgdG8gYmUgemVybyBpbiBwcm9iZSgpLCBiZWNhdXNl IHRoZSBNSVBJIERTSQogICBidXMgZHJpdmVyIHdvdWxkIHNldCBpdC4KCnY0LT52NToKICogQWRk cmVzcyBBbmRyemVqIEhhamRhJ3MgY29tbWVudHMuCiAqIEdldCB0aGUgYnMtZ3Bpb3MgcHJvcGVy dHkgaW5zdGVhZCBvZiB0aGUgYnNbMzowXS1ncGlvcyBwcm9wZXJ0aWVzLgogKiBJbXBsZW1lbnQg ZXJyb3IgcHJvcGFnYXRpb24gZm9yIHBhbmVsIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb25zLgogKiBP dGhlciBtaW5vciBjaGFuZ2VzIHRvIGltcHJvdmUgdGhlIGNvZGUgcXVhbGl0eS4KCnYzLT52NDoK ICogTW92ZSB0aGUgcmVsZXZhbnQgZHQtYmluZGluZ3MgdG8gYSBzZXBhcmF0ZSBwYXRjaCB0byBh ZGRyZXNzIFN0ZWZhbgogICBXYWhyZW4ncyBjb21tZW50LgoKdjItPnYzOgogKiBTb3J0IHRoZSBp bmNsdWRlZCBoZWFkZXIgZmlsZXMgYWxwaGFiZXRpY2FsbHkuCgp2MS0+djI6CiAqIEFkZHJlc3Mg YWxtb3N0IGFsbCBjb21tZW50cyBmcm9tIFRoaWVycnkgUmVkaW5nLgogKiBSZW1vdmUgc2V2ZXJh bCBEVCBwcm9wZXJ0aWVzIGFzIHRoZXkgY2FuIGJlIGltcGxpZWQgYnkgdGhlIGNvbXBhdGlibGUg c3RyaW5nLgogKiBBZGQgdGhlIEhJTUFYL2hpbWF4IHByZWZpeGVzIHRvIHRoZSBkcml2ZXIncyBL Y29uZmlnIG5hbWUgYW5kIGRyaXZlciBuYW1lLgogKiBNb3ZlIHRoZSBkcml2ZXIncyBNYWtlZmls ZSBlbnRyeSBwbGFjZSB0byBzb3J0IHRoZSBlbnRyaWVzIGFscGhhYmV0aWNhbGx5LgogKiBSZXVz ZSBzZXZlcmFsIHN0YW5kYXJkIERDUyBmdW5jdGlvbnMgaW5zdGVhZCBvZiBpbnZlbnRpbmcgd2hl ZWxzLgogKiBNb3ZlIHRoZSBwYW5lbCByZXNldHRpbmcgYW5kIHBvd2VyIGxvZ2ljcyB0byB0aGUg ZHJpdmVyIHByb2JlL3JlbW92ZSBzdGFnZXMuCiAgIFRoaXMgbWF5IHNpbXBsaWZ5IHBhbmVsIHBy ZXBhcmUvdW5wcmVwYXJlIGhvb2tzLiBUaGUgcG93ZXIgY29uc3VtcHRpb24gc2hvdWxkCiAgIG5v dCBjaGFuZ2UgYSBsb3QgYXQgRFBNUyBzaW5jZSB0aGUgcGFuZWwgZW50ZXJzIHNsZWVwIG1vZGUg YXQgdGhhdCB0aW1lLgogKiBBZGQgdGhlIG1vZHVsZSBhdXRob3IuCiAqIE90aGVyIG1pbm9yIGNo YW5nZXMsIHN1Y2ggYXMgY29kaW5nIHN0eWxlIGlzc3Vlcy4KCiBkcml2ZXJzL2dwdS9kcm0vcGFu ZWwvS2NvbmZpZyAgICAgICAgICAgICAgIHwgICA1ICsKIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9N YWtlZmlsZSAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVs LWhpbWF4LWh4ODM2OWEuYyB8IDYxMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZp bGVzIGNoYW5nZWQsIDYxNiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3BhbmVsL3BhbmVsLWhpbWF4LWh4ODM2OWEuYwoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcK aW5kZXggZDg0NTgzNy4uY2Q2ZmJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVs L0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKQEAgLTE3LDYgKzE3 LDExIEBAIGNvbmZpZyBEUk1fUEFORUxfU0lNUExFCiAJICB0aGF0IGl0IGNhbiBiZSBhdXRvbWF0 aWNhbGx5IHR1cm5lZCBvZmYgd2hlbiB0aGUgcGFuZWwgZ29lcyBpbnRvIGEKIAkgIGxvdyBwb3dl ciBzdGF0ZS4KIAorY29uZmlnIERSTV9QQU5FTF9ISU1BWF9IWDgzNjlBCisJdHJpc3RhdGUgIkhp bWF4IEhYODM2OUEgcGFuZWwiCisJZGVwZW5kcyBvbiBPRgorCXNlbGVjdCBEUk1fTUlQSV9EU0kK KwogY29uZmlnIERSTV9QQU5FTF9MRDkwNDAKIAl0cmlzdGF0ZSAiTEQ5MDQwIFJHQi9TUEkgcGFu ZWwiCiAJZGVwZW5kcyBvbiBPRiAmJiBTUEkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9w YW5lbC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQppbmRleCA0YjJh MDQzLi5kNWRiZTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUK KysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAogb2Jq LSQoQ09ORklHX0RSTV9QQU5FTF9TSU1QTEUpICs9IHBhbmVsLXNpbXBsZS5vCitvYmotJChDT05G SUdfRFJNX1BBTkVMX0hJTUFYX0hYODM2OUEpICs9IHBhbmVsLWhpbWF4LWh4ODM2OWEubwogb2Jq LSQoQ09ORklHX0RSTV9QQU5FTF9MRDkwNDApICs9IHBhbmVsLWxkOTA0MC5vCiBvYmotJChDT05G SUdfRFJNX1BBTkVMX1M2RThBQTApICs9IHBhbmVsLXM2ZThhYTAubwogb2JqLSQoQ09ORklHX0RS TV9QQU5FTF9TSEFSUF9MUTEwMVIxU1gwMSkgKz0gcGFuZWwtc2hhcnAtbHExMDFyMXN4MDEubwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLWhpbWF4LWh4ODM2OWEuYyBi L2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1oaW1heC1oeDgzNjlhLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ5ZTM5NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1oaW1heC1oeDgzNjlhLmMKQEAgLTAsMCArMSw2MTAgQEAK Ky8qCisgKiBIaW1heCBIWDgzNjlBIHBhbmVsIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMp IDIwMTEtMjAxNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gU2Ftc3VuZyBzNmU4YWEwIHBh bmVsIGRyaXZlci4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorCisjaW5jbHVkZSA8 bGludXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorCisjZGVmaW5lIFdSRElTQlYJCTB4 NTEKKyNkZWZpbmUgV1JDVFJMRAkJMHg1MworI2RlZmluZSBXUkNBQkMJCTB4NTUKKyNkZWZpbmUg U0VUUE9XRVIJMHhiMQorI2RlZmluZSBTRVRESVNQCQkweGIyCisjZGVmaW5lIFNFVENZQwkJMHhi NAorI2RlZmluZSBTRVRWQ09NCQkweGI2CisjZGVmaW5lIFNFVEVYVEMJCTB4YjkKKyNkZWZpbmUg U0VUTUlQSQkJMHhiYQorI2RlZmluZSBTRVRQQU5FTAkweGNjCisjZGVmaW5lIFNFVEdJUAkJMHhk NQorI2RlZmluZSBTRVRHQU1NQQkweGUwCisKKyNkZWZpbmUgSFg4MzY5QV9NSU5fQlJJR0hUTkVT UwkweDAwCisjZGVmaW5lIEhYODM2OUFfTUFYX0JSSUdIVE5FU1MJMHhmZgorCitlbnVtIGh4ODM2 OWFfbXB1X2ludGVyZmFjZSB7CisJSFg4MzY5QV9EQklfVFlQRV9BXzhCSVQsCisJSFg4MzY5QV9E QklfVFlQRV9BXzlCSVQsCisJSFg4MzY5QV9EQklfVFlQRV9BXzE2QklULAorCUhYODM2OUFfREJJ X1RZUEVfQV8xOEJJVCwKKwlIWDgzNjlBX0RCSV9UWVBFX0JfOEJJVCwKKwlIWDgzNjlBX0RCSV9U WVBFX0JfOUJJVCwKKwlIWDgzNjlBX0RCSV9UWVBFX0JfMTZCSVQsCisJSFg4MzY5QV9EQklfVFlQ RV9CXzE4QklULAorCUhYODM2OUFfRFNJX0NNRF9NT0RFLAorCUhYODM2OUFfREJJX1RZUEVfQl8y NEJJVCwKKwlIWDgzNjlBX0RTSV9WSURFT19NT0RFLAorCUhYODM2OUFfTURESSwKKwlIWDgzNjlB X0RQSV9EQklfVFlQRV9DX09QVDEsCisJSFg4MzY5QV9EUElfREJJX1RZUEVfQ19PUFQyLAorCUhY ODM2OUFfRFBJX0RCSV9UWVBFX0NfT1BUMworfTsKKworZW51bSBoeDgzNjlhX3Jlc29sdXRpb24g eworCUhYODM2OUFfUkVTXzQ4MF84NjQsCisJSFg4MzY5QV9SRVNfNDgwXzg1NCwKKwlIWDgzNjlB X1JFU180ODBfODAwLAorCUhYODM2OUFfUkVTXzQ4MF82NDAsCisJSFg4MzY5QV9SRVNfMzYwXzY0 MCwKKwlIWDgzNjlBX1JFU180ODBfNzIwLAorfTsKKworc3RydWN0IGh4ODM2OWFfcGFuZWxfZGVz YyB7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CisKKwkvKiBtcyAqLwor CXVuc2lnbmVkIGludCBwb3dlcl9vbl9kZWxheTsKKwl1bnNpZ25lZCBpbnQgcmVzZXRfZGVsYXk7 CisKKwl1bnNpZ25lZCBpbnQgZHNpX2xhbmVzOworfTsKKworc3RydWN0IGh4ODM2OWEgeworCXN0 cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX3BhbmVsIHBhbmVsOworCisJY29uc3Qgc3Ry dWN0IGh4ODM2OWFfcGFuZWxfZGVzYyAqcGQ7CisKKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0 YSBzdXBwbGllc1s1XTsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvOworCXN0cnVjdCBn cGlvX2Rlc2MgKmJzX2dwaW9bNF07CisJdTggcmVzX3NlbDsKK307CisKK3N0YXRpYyBpbmxpbmUg c3RydWN0IGh4ODM2OWEgKnBhbmVsX3RvX2h4ODM2OWEoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwp Cit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwYW5lbCwgc3RydWN0IGh4ODM2OWEsIHBhbmVsKTsK K30KKworc3RhdGljIGludCBoeDgzNjlhX2Rjc193cml0ZShzdHJ1Y3QgaHg4MzY5YSAqY3R4LCBj b25zdCBjaGFyICpmdW5jLAorCQkJICAgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQor eworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2RldmljZShjdHgt PmRldik7CisJc3NpemVfdCByZXQ7CisKKwlyZXQgPSBtaXBpX2RzaV9kY3Nfd3JpdGVfYnVmZmVy KGRzaSwgZGF0YSwgbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihjdHgtPmRldiwgIiVz IGZhaWxlZDogJWRcbiIsIGZ1bmMsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBo eDgzNjlhX2Rjc193cml0ZV9zZXEoY3R4LCBzZXEuLi4pIFwKKyh7IFwKKwljb25zdCB1OCBkW10g PSB7IHNlcSB9OyBcCisJQlVJTERfQlVHX09OX01TRyhBUlJBWV9TSVpFKGQpID4gNjQsIFwKKwkJ CSAiRENTIHNlcXVlbmNlIHRvbyBiaWcgZm9yIHN0YWNrIik7IFwKKwloeDgzNjlhX2Rjc193cml0 ZShjdHgsIF9fZnVuY19fLCBkLCBBUlJBWV9TSVpFKGQpKTsgXAorfSkKKworI2RlZmluZSBoeDgz NjlhX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgc2VxLi4uKSBcCisoeyBcCisJc3RhdGljIGNv bnN0IHU4IGRbXSA9IHsgc2VxIH07IFwKKwloeDgzNjlhX2Rjc193cml0ZShjdHgsIF9fZnVuY19f LCBkLCBBUlJBWV9TSVpFKGQpKTsgXAorfSkKKworc3RhdGljIGludCBoeDgzNjlhX2RzaV9zZXRf ZGlzcGxheV9yZWxhdGVkX3JlZ2lzdGVyKHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJdTggc2Vj X3AgPSAoY3R4LT5yZXNfc2VsIDw8IDQpIHwgMHgwMzsKKworCXJldHVybiBoeDgzNjlhX2Rjc193 cml0ZV9zZXEoY3R4LCBTRVRESVNQLCAweDAwLCBzZWNfcCwgMHgwMywKKwkJCSAgIDB4MDMsIDB4 NzAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkgICAweDAwLCAweDAzLCAweDAz LCAweDAwLCAweDAxKTsKK30KKworc3RhdGljIGludCBoeDgzNjlhX2RzaV9zZXRfZGlzcGxheV93 YXZlZm9ybV9jeWNsZShzdHJ1Y3QgaHg4MzY5YSAqY3R4KQoreworCXJldHVybiBoeDgzNjlhX2Rj c193cml0ZV9zZXFfc3RhdGljKGN0eCwgU0VUQ1lDLCAweDAwLCAweDFkLAorCQkJCQkweDVmLCAw eDBlLCAweDA2KTsKK30KKworc3RhdGljIGludCBoeDgzNjlhX2RzaV9zZXRfZ2lwKHN0cnVjdCBo eDgzNjlhICpjdHgpCit7CisJcmV0dXJuIGh4ODM2OWFfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4 LCBTRVRHSVAsIDB4MDAsIDB4MDQsCisJCQkJIDB4MDMsIDB4MDAsIDB4MDEsIDB4MDUsIDB4MWMs IDB4NzAsCisJCQkJIDB4MDEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDYsCisJCQkJIDB4 NTEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDYsCisJCQkJIDB4NTAsIDB4MDcsIDB4MDcs IDB4MGYsIDB4MDQpOworfQorCitzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF9wb3dlcihzdHJ1 Y3QgaHg4MzY5YSAqY3R4KQoreworCXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9zZXFfc3RhdGlj KGN0eCwgU0VUUE9XRVIsIDB4MDEsIDB4MDAsCisJCQkJICAgMHgzNCwgMHgwNiwgMHgwMCwgMHgw ZiwgMHgwZiwgMHgyYSwKKwkJCQkgICAweDMyLCAweDNmLCAweDNmLCAweDA3LCAweDNhLCAweDAx LAorCQkJCSAgIDB4ZTYsIDB4ZTYsIDB4ZTYsIDB4ZTYsIDB4ZTYpOworfQorCitzdGF0aWMgaW50 IGh4ODM2OWFfZHNpX3NldF92Y29tX3ZvbHRhZ2Uoc3RydWN0IGh4ODM2OWEgKmN0eCkKK3sKKwly ZXR1cm4gaHg4MzY5YV9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIFNFVFZDT00sIDB4NTYsIDB4 NTYpOworfQorCitzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF9wYW5lbChzdHJ1Y3QgaHg4MzY5 YSAqY3R4KQoreworCXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgU0VU UEFORUwsIDB4MDIpOworfQorCitzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF9nYW1tYV9jdXJ2 ZShzdHJ1Y3QgaHg4MzY5YSAqY3R4KQoreworCXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9zZXFf c3RhdGljKGN0eCwgU0VUR0FNTUEsIDB4MDAsIDB4MWQsCisJCQkJICAgMHgyMiwgMHgzOCwgMHgz ZCwgMHgzZiwgMHgyZSwgMHg0YSwKKwkJCQkgICAweDA2LCAweDBkLCAweDBmLCAweDEzLCAweDE1 LCAweDEzLAorCQkJCSAgIDB4MTYsIDB4MTAsIDB4MTksIDB4MDAsIDB4MWQsIDB4MjIsCisJCQkJ ICAgMHgzOCwgMHgzZCwgMHgzZiwgMHgyZSwgMHg0YSwgMHgwNiwKKwkJCQkgICAweDBkLCAweDBm LCAweDEzLCAweDE1LCAweDEzLCAweDE2LAorCQkJCSAgIDB4MTAsIDB4MTkpOworfQorCitzdGF0 aWMgaW50IGh4ODM2OWFfZHNpX3NldF9taXBpKHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJdTgg ZWxldmVudGhfcCA9IGN0eC0+cGQtPmRzaV9sYW5lcyA9PSAyID8gMHgxMSA6IDB4MTA7CisKKwly ZXR1cm4gaHg4MzY5YV9kY3Nfd3JpdGVfc2VxKGN0eCwgU0VUTUlQSSwgMHgwMCwgMHhhMCwgMHhj NiwKKwkJCQkgMHgwMCwgMHgwYSwgMHgwMCwgMHgxMCwgMHgzMCwgMHg2ZiwKKwkJCQkgMHgwMiwg ZWxldmVudGhfcCwgMHgxOCwgMHg0MCk7Cit9CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfc2V0 X2ludGVyZmFjZV9waXhlbF9mb21hdChzdHJ1Y3QgaHg4MzY5YSAqY3R4KQoreworCXN0cnVjdCBt aXBpX2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2RldmljZShjdHgtPmRldik7CisJdTgg Zm9ybWF0OworCWludCByZXQ7CisKKwlzd2l0Y2ggKGRzaS0+Zm9ybWF0KSB7CisJY2FzZSBNSVBJ X0RTSV9GTVRfUkdCODg4OgorCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKKwkJZm9ybWF0ID0g MHg3NzsKKwkJYnJlYWs7CisJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1OgorCQlmb3JtYXQgPSAw eDU1OworCQlicmVhazsKKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZfUEFDS0VEOgorCQlmb3Jt YXQgPSAweDY2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGN0eC0+ZGV2LCAidW5z dXBwb3J0ZWQgRFNJIHBpeGVsIGZvcm1hdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CXJldCA9IG1pcGlfZHNpX2Rjc19zZXRfcGl4ZWxfZm9ybWF0KGRzaSwgZm9ybWF0KTsKKwlpZiAo cmV0IDwgMCkKKwkJZGV2X2VycihjdHgtPmRldiwgIiVzIGZhaWxlZDogJWRcbiIsIF9fZnVuY19f LCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfc2V0X2Nv bHVtbl9hZGRyZXNzKHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJc3RydWN0IG1pcGlfZHNpX2Rl dmljZSAqZHNpID0gdG9fbWlwaV9kc2lfZGV2aWNlKGN0eC0+ZGV2KTsKKwljb25zdCBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGN0eC0+cGQtPm1vZGU7CisJaW50IHJldDsKKworCXJl dCA9IG1pcGlfZHNpX2Rjc19zZXRfY29sdW1uX2FkZHJlc3MoZHNpLCAwLCBtb2RlLT5oZGlzcGxh eSAtIDEpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGN0eC0+ZGV2LCAiJXMgZmFpbGVkOiAl ZFxuIiwgX19mdW5jX18sIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBoeDgz NjlhX2RzaV9zZXRfcGFnZV9hZGRyZXNzKHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJc3RydWN0 IG1pcGlfZHNpX2RldmljZSAqZHNpID0gdG9fbWlwaV9kc2lfZGV2aWNlKGN0eC0+ZGV2KTsKKwlj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGN0eC0+cGQtPm1vZGU7CisJaW50 IHJldDsKKworCXJldCA9IG1pcGlfZHNpX2Rjc19zZXRfcGFnZV9hZGRyZXNzKGRzaSwgMCwgbW9k ZS0+dmRpc3BsYXkgLSAxKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihjdHgtPmRldiwgIiVz IGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbnQgaHg4MzY5YV9kc2lfd3JpdGVfZGlzcGxheV9icmlnaHRuZXNzKHN0cnVjdCBoeDgzNjlh ICpjdHgsCisJCQkJCQl1OCBicmlnaHRuZXNzKQoreworCXJldHVybiBoeDgzNjlhX2Rjc193cml0 ZV9zZXEoY3R4LCBXUkRJU0JWLCBicmlnaHRuZXNzKTsKK30KKworc3RhdGljIGludCBoeDgzNjlh X2RzaV93cml0ZV9jYWJjKHN0cnVjdCBoeDgzNjlhICpjdHgpCit7CisJcmV0dXJuIGh4ODM2OWFf ZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4LCBXUkNBQkMsIDB4MDEpOworfQorCitzdGF0aWMgaW50 IGh4ODM2OWFfZHNpX3dyaXRlX2NvbnRyb2xfZGlzcGxheShzdHJ1Y3QgaHg4MzY5YSAqY3R4KQor eworCXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgV1JDVFJMRCwgMHgy NCk7Cit9CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfcGFuZWxfaW5pdChzdHJ1Y3QgaHg4MzY5 YSAqY3R4KQoreworCWludCAoKmZ1bmNzW10pKHN0cnVjdCBoeDgzNjlhICpjdHgpID0geworCQlo eDgzNjlhX2RzaV9zZXRfZGlzcGxheV9yZWxhdGVkX3JlZ2lzdGVyLAorCQloeDgzNjlhX2RzaV9z ZXRfZGlzcGxheV93YXZlZm9ybV9jeWNsZSwKKwkJaHg4MzY5YV9kc2lfc2V0X2dpcCwKKwkJaHg4 MzY5YV9kc2lfc2V0X3Bvd2VyLAorCQloeDgzNjlhX2RzaV9zZXRfdmNvbV92b2x0YWdlLAorCQlo eDgzNjlhX2RzaV9zZXRfcGFuZWwsCisJCWh4ODM2OWFfZHNpX3NldF9nYW1tYV9jdXJ2ZSwKKwkJ aHg4MzY5YV9kc2lfc2V0X21pcGksCisJCWh4ODM2OWFfZHNpX3NldF9pbnRlcmZhY2VfcGl4ZWxf Zm9tYXQsCisJCWh4ODM2OWFfZHNpX3NldF9jb2x1bW5fYWRkcmVzcywKKwkJaHg4MzY5YV9kc2lf c2V0X3BhZ2VfYWRkcmVzcywKKwkJaHg4MzY5YV9kc2lfd3JpdGVfY2FiYywKKwkJaHg4MzY5YV9k c2lfd3JpdGVfY29udHJvbF9kaXNwbGF5LAorCX07CisJaW50IHJldCwgaTsKKworCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGZ1bmNzKTsgaSsrKSB7CisJCXJldCA9IGZ1bmNzW2ldKGN0eCk7 CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBoeDgzNjlhX2RzaV9zZXRfZXh0ZW5zaW9uX2NvbW1hbmQoc3RydWN0IGh4ODM2OWEgKmN0 eCkKK3sKKwlyZXR1cm4gaHg4MzY5YV9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIFNFVEVYVEMs IDB4ZmYsIDB4ODMsIDB4NjkpOworfQorCitzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF9tYXhp bXVtX3JldHVybl9wYWNrZXRfc2l6ZShzdHJ1Y3QgaHg4MzY5YSAqY3R4LAorCQkJCQkJICAgICAg dTE2IHNpemUpCit7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpID0gdG9fbWlwaV9kc2lf ZGV2aWNlKGN0eC0+ZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gbWlwaV9kc2lfc2V0X21heGlt dW1fcmV0dXJuX3BhY2tldF9zaXplKGRzaSwgc2l6ZSk7CisJaWYgKHJldCA8IDApCisJCWRldl9l cnIoY3R4LT5kZXYsCisJCQkiZXJyb3IgJWQgc2V0dGluZyBtYXhpbXVtIHJldHVybiBwYWNrZXQg c2l6ZSB0byAlZFxuIiwKKwkJCXJldCwgc2l6ZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IGludCBoeDgzNjlhX2RzaV9zZXRfc2VxdWVuY2Uoc3RydWN0IGh4ODM2OWEgKmN0eCkKK3sKKwlz dHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYp OworCWludCByZXQ7CisKKwlyZXQgPSBoeDgzNjlhX2RzaV9zZXRfZXh0ZW5zaW9uX2NvbW1hbmQo Y3R4KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBoeDgzNjlhX2RzaV9z ZXRfbWF4aW11bV9yZXR1cm5fcGFja2V0X3NpemUoY3R4LCA0KTsKKwlpZiAocmV0IDwgMCkKKwkJ Z290byBvdXQ7CisKKwlyZXQgPSBoeDgzNjlhX2RzaV9wYW5lbF9pbml0KGN0eCk7CisJaWYgKHJl dCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gbWlwaV9kc2lfZGNzX2V4aXRfc2xlZXBfbW9k ZShkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8g ZXhpdCBzbGVlcCBtb2RlOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0g bWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X29uKGRzaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2 X2VycihjdHgtPmRldiwgImZhaWxlZCB0byBzZXQgZGlzcGxheSBvbjogJWRcbiIsIHJldCk7CisJ CWdvdG8gb3V0OworCX0KKworCS8qCisJICogSXQncyBuZWNlc3NhcnkgdG8gd2FpdCAxMjBtc2Vj IGFmdGVyIHNlbmRpbmcgdGhlIFNsZWVwIE91dAorCSAqIGNvbW1hbmQgYmVmb3JlIFNsZWVwIElu IGNvbW1hbmQgY2FuIGJlIHNlbnQsIGFjY29yZGluZyB0bworCSAqIHRoZSBIWDgzNjlBIGRhdGEg c2hlZXQuCisJICovCisJbXNsZWVwKDEyMCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCBoeDgzNjlhX2RzaV9kaXNhYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQorewor CXN0cnVjdCBoeDgzNjlhICpjdHggPSBwYW5lbF90b19oeDgzNjlhKHBhbmVsKTsKKworCXJldHVy biBoeDgzNjlhX2RzaV93cml0ZV9kaXNwbGF5X2JyaWdodG5lc3MoY3R4LAorCQkJCQkJSFg4MzY5 QV9NSU5fQlJJR0hUTkVTUyk7Cit9CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfdW5wcmVwYXJl KHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBoeDgzNjlhICpjdHggPSBwYW5l bF90b19oeDgzNjlhKHBhbmVsKTsKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19t aXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBtaXBpX2RzaV9k Y3NfZW50ZXJfc2xlZXBfbW9kZShkc2kpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY3R4 LT5kZXYsICJmYWlsZWQgdG8gZW50ZXIgc2xlZXAgbW9kZTogJWRcbiIsIHJldCk7CisJCWdvdG8g b3V0OworCX0KKworCXJldCA9IG1pcGlfZHNpX2Rjc19zZXRfZGlzcGxheV9vZmYoZHNpKTsKKwlp ZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIHNldCBkaXNwbGF5 IG9mZjogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVGhpcyBpcyB0 byBhbGxvdyB0aW1lIGZvciB0aGUgc3VwcGx5IHZvbHRhZ2VzIGFuZCBjbG9jaworCSAqIGNpcmN1 aXRzIHRvIHN0YWJsaXplLCBhY2NvcmRpbmcgdG8gdGhlIEhYODM2OUEgZGF0YSBzaGVldC4KKwkg Ki8KKwltc2xlZXAoNSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBoeDgz NjlhX2RzaV9wcmVwYXJlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBoeDgz NjlhICpjdHggPSBwYW5lbF90b19oeDgzNjlhKHBhbmVsKTsKKworCXJldHVybiBoeDgzNjlhX2Rz aV9zZXRfc2VxdWVuY2UoY3R4KTsKK30KKworc3RhdGljIGludCBoeDgzNjlhX2RzaV9lbmFibGUo c3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IGh4ODM2OWEgKmN0eCA9IHBhbmVs X3RvX2h4ODM2OWEocGFuZWwpOworCisJcmV0dXJuIGh4ODM2OWFfZHNpX3dyaXRlX2Rpc3BsYXlf YnJpZ2h0bmVzcyhjdHgsCisJCQkJCQlIWDgzNjlBX01BWF9CUklHSFRORVNTKTsKK30KKworc3Rh dGljIGludCBoeDgzNjlhX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gcGFuZWwtPmNvbm5lY3RvcjsKKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtID0gcGFuZWwtPmRybTsKKwlzdHJ1Y3QgaHg4MzY5YSAqY3R4ID0g cGFuZWxfdG9faHg4MzY5YShwYW5lbCk7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7 CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm0gPSBjdHgtPnBkLT5tb2RlOworCisJ bW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkcm0sIG0pOworCWlmICghbW9kZSkgeworCQlkZXZf ZXJyKGRybS0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBtb2RlICV1eCV1QCV1XG4iLAorCQkJbS0+aGRp c3BsYXksIG0tPnZkaXNwbGF5LCBtLT52cmVmcmVzaCk7CisJCXJldHVybiAwOworCX0KKworCWRy bV9tb2RlX3NldF9uYW1lKG1vZGUpOworCW1vZGUtPnR5cGUgPSBEUk1fTU9ERV9UWVBFX0RSSVZF UiB8IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOworCisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8u YnBjID0gODsKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0aF9tbSA9IG1vZGUtPndpZHRo X21tOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbSA9IG1vZGUtPmhlaWdodF9t bTsKKworCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsKKworCXJldHVybiAx OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYW5lbF9mdW5jcyBoeDgzNjlhX2RzaV9k cm1fZnVuY3MgPSB7CisJLmRpc2FibGUgPSBoeDgzNjlhX2RzaV9kaXNhYmxlLAorCS51bnByZXBh cmUgPSBoeDgzNjlhX2RzaV91bnByZXBhcmUsCisJLnByZXBhcmUgPSBoeDgzNjlhX2RzaV9wcmVw YXJlLAorCS5lbmFibGUgPSBoeDgzNjlhX2RzaV9lbmFibGUsCisJLmdldF9tb2RlcyA9IGh4ODM2 OWFfZ2V0X21vZGVzLAorfTsKKworc3RhdGljIGludCBoeDgzNjlhX3Bvd2VyX29uKHN0cnVjdCBo eDgzNjlhICpjdHgpCit7CisJaW50IHJldDsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJs ZShBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpLCBjdHgtPnN1cHBsaWVzKTsKKwlpZiAocmV0IDwg MCkKKwkJcmV0dXJuIHJldDsKKworCW1zbGVlcChjdHgtPnBkLT5wb3dlcl9vbl9kZWxheSk7CisK KwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAxKTsKKwl1c2xlZXBfcmFuZ2UoNTAs IDYwKTsKKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldF9ncGlvLCAwKTsKKworCW1zbGVlcChj dHgtPnBkLT5yZXNldF9kZWxheSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoeDgz NjlhX3Bvd2VyX29mZihzdHJ1Y3QgaHg4MzY5YSAqY3R4KQoreworCXJldHVybiByZWd1bGF0b3Jf YnVsa19kaXNhYmxlKEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyksIGN0eC0+c3VwcGxpZXMpOwor fQorCitzdGF0aWMgdm9pZCBoeDgzNjlhX3ZtX3RvX3Jlc19zZWwoc3RydWN0IGh4ODM2OWEgKmN0 eCkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IGN0eC0+cGQtPm1v ZGU7CisKKwlzd2l0Y2ggKG1vZGUtPmhkaXNwbGF5KSB7CisJY2FzZSA0ODA6CisJCXN3aXRjaCAo bW9kZS0+dmRpc3BsYXkpIHsKKwkJY2FzZSA4NjQ6CisJCQljdHgtPnJlc19zZWwgPSBIWDgzNjlB X1JFU180ODBfODY0OworCQkJYnJlYWs7CisJCWNhc2UgODU0OgorCQkJY3R4LT5yZXNfc2VsID0g SFg4MzY5QV9SRVNfNDgwXzg1NDsKKwkJCWJyZWFrOworCQljYXNlIDgwMDoKKwkJCWN0eC0+cmVz X3NlbCA9IEhYODM2OUFfUkVTXzQ4MF84MDA7CisJCQlicmVhazsKKwkJY2FzZSA2NDA6CisJCQlj dHgtPnJlc19zZWwgPSBIWDgzNjlBX1JFU180ODBfNjQwOworCQkJYnJlYWs7CisJCWNhc2UgNzIw OgorCQkJY3R4LT5yZXNfc2VsID0gSFg4MzY5QV9SRVNfNDgwXzcyMDsKKwkJCWJyZWFrOworCQlk ZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAzNjA6CisJCWlmIChtb2Rl LT52ZGlzcGxheSA9PSA2NDApCisJCQljdHgtPnJlc19zZWwgPSBIWDgzNjlBX1JFU18zNjBfNjQw OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSB0cnVseV90ZnQ0ODA4MDBfMTZfZV9tb2RlID0geworCS5j bG9jayA9IDI2NDAwLAorCS5oZGlzcGxheSA9IDQ4MCwKKwkuaHN5bmNfc3RhcnQgPSA0ODAgKyA4 LAorCS5oc3luY19lbmQgPSA0ODAgKyA4ICsgOCwKKwkuaHRvdGFsID0gNDgwICsgOCArIDggKyA4 LAorCS52ZGlzcGxheSA9IDgwMCwKKwkudnN5bmNfc3RhcnQgPSA4MDAgKyA2LAorCS52c3luY19l bmQgPSA4MDAgKyA2ICsgNiwKKwkudnRvdGFsID0gODAwICsgNiArIDYgKyA2LAorCS52cmVmcmVz aCA9IDYwLAorCS53aWR0aF9tbSA9IDQ1LAorCS5oZWlnaHRfbW0gPSA3NiwKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgaHg4MzY5YV9wYW5lbF9kZXNjIHRydWx5X3RmdDQ4MDgwMF8xNl9lX2Rz aSA9IHsKKwkubW9kZSA9ICZ0cnVseV90ZnQ0ODA4MDBfMTZfZV9tb2RlLAorCS5wb3dlcl9vbl9k ZWxheSA9IDEwLAorCS5yZXNldF9kZWxheSA9IDEwLAorCS5kc2lfbGFuZXMgPSAyLAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaHg4MzY5YV9kc2lfb2ZfbWF0Y2hbXSA9 IHsKKwl7CisJCS5jb21wYXRpYmxlID0gInRydWx5LHRmdDQ4MDgwMC0xNi1lLWRzaSIsCisJCS5k YXRhID0gJnRydWx5X3RmdDQ4MDgwMF8xNl9lX2RzaSwKKwl9LCB7CisJCS8qIHNlbnRpbmVsICov CisJfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBoeDgzNjlhX2RzaV9vZl9tYXRjaCk7 CisKK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfcHJvYmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZHNpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkc2ktPmRldjsKKwljb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkICpvZl9pZCA9CisJCQlvZl9tYXRjaF9kZXZpY2UoaHg4MzY5YV9kc2lfb2Zf bWF0Y2gsIGRldik7CisJc3RydWN0IGh4ODM2OWEgKmN0eDsKKwlpbnQgcmV0LCBpOworCisJY3R4 ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0 eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljdHgtPmRldiA9IGRldjsKKworCWlmIChvZl9pZCkg eworCQljdHgtPnBkID0gb2ZfaWQtPmRhdGE7CisJfSBlbHNlIHsKKwkJZGV2X2VycihkZXYsICJj YW5ub3QgZmluZCBjb21wYXRpYmxlIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0K KworCWh4ODM2OWFfdm1fdG9fcmVzX3NlbChjdHgpOworCisJY3R4LT5zdXBwbGllc1swXS5zdXBw bHkgPSAidmRkMSI7CisJY3R4LT5zdXBwbGllc1sxXS5zdXBwbHkgPSAidmRkMiI7CisJY3R4LT5z dXBwbGllc1syXS5zdXBwbHkgPSAidmRkMyI7CisJY3R4LT5zdXBwbGllc1szXS5zdXBwbHkgPSAi ZHNpLXZjYyI7CisJY3R4LT5zdXBwbGllc1s0XS5zdXBwbHkgPSAidnBwIjsKKwlyZXQgPSBkZXZt X3JlZ3VsYXRvcl9idWxrX2dldChkZXYsIEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyksCisJCQkJ ICAgICAgY3R4LT5zdXBwbGllcyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2luZm8oZGV2LCAi ZmFpbGVkIHRvIGdldCByZWd1bGF0b3JzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwljdHgtPnJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dldChkZXYsICJyZXNldCIsIEdQSU9E X09VVF9MT1cpOworCWlmIChJU19FUlIoY3R4LT5yZXNldF9ncGlvKSkgeworCQlkZXZfaW5mbyhk ZXYsICJjYW5ub3QgZ2V0IHJlc2V0LWdwaW9zICVsZFxuIiwKKwkJCSBQVFJfRVJSKGN0eC0+cmVz ZXRfZ3BpbykpOworCQlyZXR1cm4gUFRSX0VSUihjdHgtPnJlc2V0X2dwaW8pOworCX0KKworCWZv ciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJY3R4LT5ic19ncGlvW2ldID0gZGV2bV9ncGlvZF9n ZXRfaW5kZXhfb3B0aW9uYWwoZGV2LCAiYnMiLCBpLAorCQkJCQkJCQlHUElPRF9PVVRfSElHSCk7 CisJCWlmICghSVNfRVJSX09SX05VTEwoY3R4LT5ic19ncGlvW2ldKSkgeworCQkJZGV2X2RiZyhk ZXYsICJicyVkLWdwaW8gaXMgY29uZmlndXJlZFxuIiwgaSk7CisJCX0gZWxzZSBpZiAoSVNfRVJS KGN0eC0+YnNfZ3Bpb1tpXSkpIHsKKwkJCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBnZXQgYnMl ZC1ncGlvXG4iLCBpKTsKKwkJCXJldHVybiBQVFJfRVJSKGN0eC0+YnNfZ3Bpb1tpXSk7CisJCX0K Kwl9CisKKwlyZXQgPSBoeDgzNjlhX3Bvd2VyX29uKGN0eCk7CisJaWYgKHJldCA8IDApIHsKKwkJ ZGV2X2VycihkZXYsICJjYW5ub3QgcG93ZXIgb25cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwor CWRybV9wYW5lbF9pbml0KCZjdHgtPnBhbmVsKTsKKwljdHgtPnBhbmVsLmRldiA9IGRldjsKKwlj dHgtPnBhbmVsLmZ1bmNzID0gJmh4ODM2OWFfZHNpX2RybV9mdW5jczsKKworCXJldCA9IGRybV9w YW5lbF9hZGQoJmN0eC0+cGFuZWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJ bWlwaV9kc2lfc2V0X2RydmRhdGEoZHNpLCBjdHgpOworCisJZHNpLT5sYW5lcyA9IGN0eC0+cGQt PmRzaV9sYW5lczsKKwlkc2ktPmZvcm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7CisJZHNpLT5t b2RlX2ZsYWdzID0gTUlQSV9EU0lfTU9ERV9WSURFTyB8CisJCQkgIE1JUElfRFNJX01PREVfVklE RU9fQlVSU1QgfAorCQkJICBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0U7CisJcmV0ID0g bWlwaV9kc2lfYXR0YWNoKGRzaSk7CisJaWYgKHJldCA8IDApCisJCWRybV9wYW5lbF9yZW1vdmUo JmN0eC0+cGFuZWwpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBoeDgzNjlhX2Rz aV9yZW1vdmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCBoeDgzNjlh ICpjdHggPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShkc2kpOworCisJbWlwaV9kc2lfZGV0YWNoKGRz aSk7CisJZHJtX3BhbmVsX3JlbW92ZSgmY3R4LT5wYW5lbCk7CisJcmV0dXJuIGh4ODM2OWFfcG93 ZXJfb2ZmKGN0eCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWlwaV9kc2lfZHJpdmVyIGh4ODM2OWFf ZHNpX2RyaXZlciA9IHsKKwkucHJvYmUgPSBoeDgzNjlhX2RzaV9wcm9iZSwKKwkucmVtb3ZlID0g aHg4MzY5YV9kc2lfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInBhbmVsLWh4ODM2 OWEtZHNpIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gaHg4MzY5YV9kc2lfb2ZfbWF0Y2gsCisJfSwK K307Cittb2R1bGVfbWlwaV9kc2lfZHJpdmVyKGh4ODM2OWFfZHNpX2RyaXZlcik7CisKK01PRFVM RV9ERVNDUklQVElPTigiSGltYXggSFg4MzY5QSBwYW5lbCBkcml2ZXIiKTsKK01PRFVMRV9BVVRI T1IoIkxpdSBZaW5nIDxZaW5nLkxpdUBmcmVlc2NhbGUuY29tPiIpOworTU9EVUxFX0xJQ0VOU0Uo IkdQTCB2MiIpOwotLSAKMi4xLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v ZHJpLWRldmVsCg==