From mboxrd@z Thu Jan 1 00:00:00 1970 From: Inki Dae Subject: [PATCH 2/3] drm/panel: add s6e63j0x03 LCD Panel driver Date: Fri, 28 Nov 2014 20:39:50 +0900 Message-ID: <1417174791-7339-3-git-send-email-inki.dae@samsung.com> References: <1417174791-7339-1-git-send-email-inki.dae@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-reply-to: <1417174791-7339-1-git-send-email-inki.dae@samsung.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, devicetree@vger.kernel.org Cc: mark.rutland@arm.com, linux-samsung-soc@vger.kernel.org, pawel.moll@arm.com, ijc+devicetree@hellion.org.uk, a.hajda@samsung.com, robh+dt@kernel.org, galak@codeaurora.org, kgene.kim@samsung.com List-Id: devicetree@vger.kernel.org VGhpcyBwYXRjaCBhZGRzIE1JUEktRFNJIGJhc2VkIFM2RTYzSjBYMDMgQU1PTEVEIExDRCBQYW5l bCBkcml2ZXIKd2hpY2ggdXNlcyBtaXBpX2RzaSBidXMgdG8gY29tbXVuaWNhdGUgd2l0aCBQYW5l bC4KClNpZ25lZC1vZmYtYnk6IElua2kgRGFlIDxpbmtpLmRhZUBzYW1zdW5nLmNvbT4KQWNrZWQt Ynk6IEt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL3BhbmVsL0tjb25maWcgICAgICAgICAgICB8ICAgIDYgKwogZHJpdmVycy9ncHUv ZHJtL3BhbmVsL01ha2VmaWxlICAgICAgICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3Bh bmVsL3BhbmVsLXM2ZTYzajB4MDMuYyB8ICA2OTMgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiAzIGZpbGVzIGNoYW5nZWQsIDcwMCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXM2ZTYzajB4MDMuYwoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tj b25maWcKaW5kZXggYmVlOWY3Mi4uYmMxMzNlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L3BhbmVsL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKQEAgLTI3 LDQgKzI3LDEwIEBAIGNvbmZpZyBEUk1fUEFORUxfUzZFOEFBMAogCXNlbGVjdCBEUk1fTUlQSV9E U0kKIAlzZWxlY3QgVklERU9NT0RFX0hFTFBFUlMKIAorY29uZmlnIERSTV9QQU5FTF9TNkU2M0ow WDAzCisJdHJpc3RhdGUgIlM2RTYzSjBYMDMgRFNJIHZpZGVvIG1vZGUgcGFuZWwiCisJZGVwZW5k cyBvbiBPRgorCXNlbGVjdCBEUk1fTUlQSV9EU0kKKwlzZWxlY3QgVklERU9NT0RFX0hFTFBFUlMK KwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlIGIv ZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCmluZGV4IDhiOTI5MjEuLjdmMzZkYzIgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dw dS9kcm0vcGFuZWwvTWFrZWZpbGUKQEAgLTEsMyArMSw0IEBACiBvYmotJChDT05GSUdfRFJNX1BB TkVMX1NJTVBMRSkgKz0gcGFuZWwtc2ltcGxlLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfTEQ5 MDQwKSArPSBwYW5lbC1sZDkwNDAubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TNkU4QUEwKSAr PSBwYW5lbC1zNmU4YWEwLm8KK29iai0kKENPTkZJR19EUk1fUEFORUxfUzZFNjNKMFgwMykgKz0g cGFuZWwtczZlNjNqMHgwMy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFu ZWwtczZlNjNqMHgwMy5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXM2ZTYzajB4MDMu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjhkOGNhCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXM2ZTYzajB4MDMuYwpAQCAtMCww ICsxLDY5MyBAQAorLyoKKyAqIE1JUEktRFNJIGJhc2VkIFM2RTYzSjBYMDMgQU1PTEVEIGxjZCAx LjYzIGluY2ggcGFuZWwgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBTYW1zdW5n IEVsZWN0cm9uaWNzIENvLiwgTHRkCisgKgorICogSW5raSBEYWUsIDxpbmtpLmRhZUBzYW1zdW5n LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwu aD4KKworI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+ CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgv YmFja2xpZ2h0Lmg+CisKKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4KKyNpbmNsdWRl IDx2aWRlby9vZl92aWRlb21vZGUuaD4KKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KKwor I2RlZmluZSBHQU1NQV9MRVZFTF9OVU0JCTMwCisjZGVmaW5lIE1UUF9JRF9MRU4JCTYKKy8qIE1h bnVmYWN0dXJlciBDb21tYW5kIFNldCAqLworI2RlZmluZSBNQ1NfTVRQX0lECQkweEQzCisKKyNk ZWZpbmUgTUNTX01UUF9TRVQzCQkweGQ0CisjZGVmaW5lIE1DU19NVFBfS0VZCQkweGYxCisKKyNk ZWZpbmUgTUlOX0JSSUdIVE5FU1MJCTAKKyNkZWZpbmUgTUFYX0JSSUdIVE5FU1MJCTEwMAorI2Rl ZmluZSBERUZBVUxUX0JSSUdIVE5FU1MJODAKKworI2RlZmluZSBHQU1NQV9DTURfQ05UCTI4Cisj ZGVmaW5lIE1BWF9HQU1NQV9DTlQJMTEKKworc3RydWN0IHM2ZTYzajB4MDMgeworCXN0cnVjdCBk ZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX3BhbmVsIHBhbmVsOworCXN0cnVjdCBiYWNrbGlnaHRf ZGV2aWNlICpibF9kZXY7CisKKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1sy XTsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvOworCXUzMiBwb3dlcl9vbl9kZWxheTsK Kwl1MzIgcG93ZXJfb2ZmX2RlbGF5OworCXUzMiByZXNldF9kZWxheTsKKwl1MzIgaW5pdF9kZWxh eTsKKwlib29sIGZsaXBfaG9yaXpvbnRhbDsKKwlib29sIGZsaXBfdmVydGljYWw7CisJc3RydWN0 IHZpZGVvbW9kZSB2bTsKKwl1MzIgd2lkdGhfbW07CisJdTMyIGhlaWdodF9tbTsKKworCWludCBw b3dlcjsKKworCS8qIFRoaXMgZmllbGQgaXMgdGVzdGVkIGJ5IGZ1bmN0aW9ucyBkaXJlY3RseSBh Y2Nlc3NpbmcgRFNJIGJ1cyBiZWZvcmUKKwkgKiB0cmFuc2ZlciwgdHJhbnNmZXIgaXMgc2tpcHBl ZCBpZiBpdCBpcyBzZXQuIEluIGNhc2Ugb2YgdHJhbnNmZXIKKwkgKiBmYWlsdXJlIG9yIHVuZXhw ZWN0ZWQgcmVzcG9uc2UgdGhlIGZpZWxkIGlzIHNldCB0byBlcnJvciB2YWx1ZS4KKwkgKiBTdWNo IGNvbnN0cnVjdCBhbGxvd3MgdG8gZWxpbWluYXRlIG1hbnkgY2hlY2tzIGluIGhpZ2hlciBsZXZl bAorCSAqIGZ1bmN0aW9ucy4KKwkgKi8KKwlpbnQgZXJyb3I7Cit9OworCitzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBHQU1NQV8xMFtdID0geworCU1DU19NVFBfU0VUMywKKwkweDAwLCAweDAw LCAweDAwLCAweDdmLCAweDdmLCAweDdmLCAweDUyLCAweDZiLCAweDZmLCAweDI2LCAweDI4LCAw eDJkLAorCTB4MjgsIDB4MjYsIDB4MjcsIDB4MzMsIDB4MzQsIDB4MzIsIDB4MzYsIDB4MzYsIDB4 MzUsIDB4MDAsIDB4YWIsIDB4MDAsCisJMHhhZSwgMHgwMCwgMHhiZgorfTsKKworc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgR0FNTUFfMzBbXSA9IHsKKwlNQ1NfTVRQX1NFVDMsCisJMHgwMCwg MHgwMCwgMHgwMCwgMHg3MCwgMHg3ZiwgMHg3ZiwgMHg0ZSwgMHg2NCwgMHg2OSwgMHgyNiwgMHgy NywgMHgyYSwKKwkweDI4LCAweDI5LCAweDI3LCAweDMxLCAweDMyLCAweDMxLCAweDM1LCAweDM0 LCAweDM1LCAweDAwLCAweGM0LCAweDAwLAorCTB4Y2EsIDB4MDAsIDB4ZGMKK307CisKK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIEdBTU1BXzYwW10gPSB7CisJTUNTX01UUF9TRVQzLAorCTB4 MDAsIDB4MDAsIDB4MDAsIDB4NjUsIDB4N2IsIDB4N2QsIDB4NWYsIDB4NjcsIDB4NjgsIDB4MmEs IDB4MjgsIDB4MjksCisJMHgyOCwgMHgyYSwgMHgyNywgMHgzMSwgMHgyZiwgMHgzMCwgMHgzNCwg MHgzMywgMHgzNCwgMHgwMCwgMHhkOSwgMHgwMCwKKwkweGU0LCAweDAwLCAweGY1Cit9OworCitz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBHQU1NQV85MFtdID0geworCU1DU19NVFBfU0VUMywK KwkweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDZmLCAweDcxLCAweDY3LCAweDZhLCAweDZjLCAw eDI5LCAweDI4LCAweDI4LAorCTB4MjgsIDB4MjksIDB4MjcsIDB4MzAsIDB4MmUsIDB4MzAsIDB4 MzIsIDB4MzEsIDB4MzEsIDB4MDAsIDB4ZWEsIDB4MDAsCisJMHhmNiwgMHgwMSwgMHgwOQorfTsK Kworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgR0FNTUFfMTIwW10gPSB7CisJTUNTX01UUF9T RVQzLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4M2QsIDB4NjYsIDB4NjgsIDB4NjksIDB4NjksIDB4 NjksIDB4MjgsIDB4MjgsIDB4MjcsCisJMHgyOCwgMHgyOCwgMHgyNywgMHgzMCwgMHgyZSwgMHgy ZiwgMHgzMSwgMHgzMSwgMHgzMCwgMHgwMCwgMHhmOSwgMHgwMSwKKwkweDA1LCAweDAxLCAweDFi Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBHQU1NQV8xNTBbXSA9IHsKKwlNQ1Nf TVRQX1NFVDMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgzMSwgMHg1MSwgMHg1MywgMHg2NiwgMHg2 NiwgMHg2NywgMHgyOCwgMHgyOSwgMHgyNywKKwkweDI4LCAweDI3LCAweDI3LCAweDJlLCAweDJk LCAweDJlLCAweDMxLCAweDMxLCAweDMwLCAweDAxLCAweDA0LCAweDAxLAorCTB4MTEsIDB4MDEs IDB4MjkKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIEdBTU1BXzIwMFtdID0gewor CU1DU19NVFBfU0VUMywKKwkweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDRmLCAweDUxLCAweDY3 LCAweDY1LCAweDY1LCAweDI5LCAweDJhLCAweDI4LAorCTB4MjcsIDB4MjUsIDB4MjYsIDB4MmQs IDB4MmMsIDB4MmMsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MDEsIDB4MTQsIDB4MDEsCisJMHgyMywg MHgwMSwgMHgzYgorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgR0FNTUFfMjQwW10g PSB7CisJTUNTX01UUF9TRVQzLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4NGQsIDB4NTAs IDB4NjUsIDB4NjMsIDB4NjQsIDB4MmEsIDB4MmMsIDB4MjksCisJMHgyNiwgMHgyNCwgMHgyNSwg MHgyYywgMHgyYiwgMHgyYiwgMHgzMCwgMHgzMCwgMHgzMCwgMHgwMSwgMHgxZSwgMHgwMSwKKwkw eDJmLCAweDAxLCAweDQ3Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBHQU1NQV8z MDBbXSA9IHsKKwlNQ1NfTVRQX1NFVDMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHg2MSwg MHg2NCwgMHg2NSwgMHg2MywgMHg2NCwgMHgyOCwgMHgyYSwgMHgyNywKKwkweDI2LCAweDIzLCAw eDI1LCAweDJiLCAweDJiLCAweDJhLCAweDMwLCAweDJmLCAweDMwLCAweDAxLCAweDJkLCAweDAx LAorCTB4M2YsIDB4MDEsIDB4NTcKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpn YW1tYV90YmxbTUFYX0dBTU1BX0NOVF0gPSB7CisJR0FNTUFfMTAsCisJR0FNTUFfMzAsCisJR0FN TUFfNjAsCisJR0FNTUFfOTAsCisJR0FNTUFfMTIwLAorCUdBTU1BXzE1MCwKKwlHQU1NQV8yMDAs CisJR0FNTUFfMjAwLAorCUdBTU1BXzI0MCwKKwlHQU1NQV8zMDAsCisJR0FNTUFfMzAwCit9Owor CitzdGF0aWMgaW5saW5lIHN0cnVjdCBzNmU2M2oweDAzICpwYW5lbF90b19zNmU2M2oweDAzKHN0 cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXJldHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0 cnVjdCBzNmU2M2oweDAzLCBwYW5lbCk7Cit9CisKK3N0YXRpYyBpbnQgczZlNjNqMHgwM19jbGVh cl9lcnJvcihzdHJ1Y3QgczZlNjNqMHgwMyAqY3R4KQoreworCWludCByZXQgPSBjdHgtPmVycm9y OworCisJY3R4LT5lcnJvciA9IDA7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgczZl NjNqMHgwM19kY3Nfd3JpdGUoc3RydWN0IHM2ZTYzajB4MDMgKmN0eCwgY29uc3Qgdm9pZCAqZGF0 YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19taXBp X2RzaV9kZXZpY2UoY3R4LT5kZXYpOworCWludCByZXQ7CisKKwlpZiAoY3R4LT5lcnJvciA8IDAp CisJCXJldHVybjsKKworCXJldCA9IG1pcGlfZHNpX2Rjc193cml0ZShkc2ksIGRhdGEsIGxlbik7 CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihjdHgtPmRldiwgImVycm9yICVkIHdyaXRpbmcg ZGNzIHNlcTogJSpwaFxuIiwgcmV0LCBsZW4sCisJCQlkYXRhKTsKKwkJY3R4LT5lcnJvciA9IHJl dDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgczZlNjNqMHgwM19kY3NfcmVhZChzdHJ1Y3QgczZlNjNq MHgwMyAqY3R4LCB1OCBjbWQsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IG1p cGlfZHNpX2RldmljZSAqZHNpID0gdG9fbWlwaV9kc2lfZGV2aWNlKGN0eC0+ZGV2KTsKKwlpbnQg cmV0OworCisJaWYgKGN0eC0+ZXJyb3IgPCAwKQorCQlyZXR1cm4gY3R4LT5lcnJvcjsKKworCXJl dCA9IG1pcGlfZHNpX2Rjc19yZWFkKGRzaSwgY21kLCBkYXRhLCBsZW4pOworCWlmIChyZXQgPCAw KSB7CisJCWRldl9lcnIoY3R4LT5kZXYsICJlcnJvciAlZCByZWFkaW5nIGRjcyBzZXEoJSN4KVxu IiwgcmV0LCBjbWQpOworCQljdHgtPmVycm9yID0gcmV0OworCX0KKworCXJldHVybiByZXQ7Cit9 CisKKyNkZWZpbmUgczZlNjNqMHgwM19kY3Nfd3JpdGVfc2VxKGN0eCwgc2VxLi4uKSBcCisoe1wK Kwljb25zdCB1OCBkW10gPSB7IHNlcSB9O1wKKwlCVUlMRF9CVUdfT05fTVNHKEFSUkFZX1NJWkUo ZCkgPiA2NCwgIkRDUyBzZXF1ZW5jZSB0b28gYmlnIGZvciBzdGFjayIpO1wKKwlzNmU2M2oweDAz X2Rjc193cml0ZShjdHgsIGQsIEFSUkFZX1NJWkUoZCkpO1wKK30pCisKKyNkZWZpbmUgczZlNjNq MHgwM19kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIHNlcS4uLikgXAorKHtcCisJc3RhdGljIGNv bnN0IHU4IGRbXSA9IHsgc2VxIH07XAorCXM2ZTYzajB4MDNfZGNzX3dyaXRlKGN0eCwgZCwgQVJS QVlfU0laRShkKSk7XAorfSkKKworc3RhdGljIHZvaWQgczZlNjNqMHgwM190ZXN0X2xldmVsXzFf a2V5X29uKHN0cnVjdCBzNmU2M2oweDAzICpjdHgpCit7CisJczZlNjNqMHgwM19kY3Nfd3JpdGVf c2VxX3N0YXRpYyhjdHgsIDB4ZjAsIDB4NWEsIDB4NWEpOworfQorCitzdGF0aWMgdm9pZCBzNmU2 M2oweDAzX3Rlc3RfbGV2ZWxfMl9rZXlfb24oc3RydWN0IHM2ZTYzajB4MDMgKmN0eCkKK3sKKwlz NmU2M2oweDAzX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgMHhmMSwgMHg1YSwgMHg1YSk7Cit9 CisKK3N0YXRpYyB2b2lkIHM2ZTYzajB4MDNfcG9yY2hfYWRqdXN0bWVudChzdHJ1Y3QgczZlNjNq MHgwMyAqY3R4KQoreworCXM2ZTYzajB4MDNfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4LCAweGYy LCAweDFjLCAweDI4KTsKK30KKworc3RhdGljIHZvaWQgczZlNjNqMHgwM19mcmFtZV9mcmVxKHN0 cnVjdCBzNmU2M2oweDAzICpjdHgpCit7CisJczZlNjNqMHgwM19kY3Nfd3JpdGVfc2VxX3N0YXRp YyhjdHgsIDB4YjUsIDB4MDAsIDB4MDIsIDB4MDApOworfQorCitzdGF0aWMgdm9pZCBzNmU2M2ow eDAzX21lbV9hZGRyX3NldF8wKHN0cnVjdCBzNmU2M2oweDAzICpjdHgpCit7CisJczZlNjNqMHgw M19kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIDB4MmEsIDB4MDAsIDB4MTQsIDB4MDEsIDB4NTMp OworfQorCitzdGF0aWMgdm9pZCBzNmU2M2oweDAzX21lbV9hZGRyX3NldF8xKHN0cnVjdCBzNmU2 M2oweDAzICpjdHgpCit7CisJczZlNjNqMHgwM19kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIDB4 MmIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4M2YpOworfQorCitzdGF0aWMgdm9pZCBzNmU2M2oweDAz X2x0cHNfdGltbWluZ19zZXRfMF82MGh6KHN0cnVjdCBzNmU2M2oweDAzICpjdHgpCit7CisJczZl NjNqMHgwM19kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsCisJCQkweGY4LCAweDA4LCAweDA4LCAw eDA4LCAweDE3LCAweDAwLCAweDJhLCAweDAyLAorCQkJMHgyNiwgMHgwMCwgMHgwMCwgMHgwMiwg MHgwMCwgMHgwMCk7Cit9CisKK3N0YXRpYyB2b2lkIHM2ZTYzajB4MDNfbHRwc190aW1taW5nX3Nl dF8xKHN0cnVjdCBzNmU2M2oweDAzICpjdHgpCit7CisJczZlNjNqMHgwM19kY3Nfd3JpdGVfc2Vx X3N0YXRpYyhjdHgsIDB4ZjcsIDB4MDIpOworfQorCitzdGF0aWMgdm9pZCBzNmU2M2oweDAzX3Bh cmFtX3Bvc190ZV9lZGdlKHN0cnVjdCBzNmU2M2oweDAzICpjdHgpCit7CisJczZlNjNqMHgwM19k Y3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIDB4YjAsIDB4MDEpOworfQorCitzdGF0aWMgdm9pZCBz NmU2M2oweDAzX3RlX3Jpc2luZ19lZGdlKHN0cnVjdCBzNmU2M2oweDAzICpjdHgpCit7CisJczZl NjNqMHgwM19kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIDB4ZTIsIDB4MGYpOworfQorCitzdGF0 aWMgdm9pZCBzNmU2M2oweDAzX3BhcmFtX3Bvc19kZWZhdWx0KHN0cnVjdCBzNmU2M2oweDAzICpj dHgpCit7CisJczZlNjNqMHgwM19kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIDB4YjAsIDB4MDAp OworfQorCitzdGF0aWMgdm9pZCBzNmU2M2oweDAzX2VsdnNzX2NvbmQoc3RydWN0IHM2ZTYzajB4 MDMgKmN0eCkKK3sKKwlzNmU2M2oweDAzX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgMHhiMSwg MHgwMCwgMHgwOSk7Cit9CisKK3N0YXRpYyB2b2lkIHM2ZTYzajB4MDNfc2V0X3BvcyhzdHJ1Y3Qg czZlNjNqMHgwMyAqY3R4KQoreworCXM2ZTYzajB4MDNfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4 LCAweDM2LCAweDQwKTsKK30KKworc3RhdGljIHZvaWQgczZlNjNqMHgwM193aGl0ZV9icmlnaHRu ZXNzX2RlZmF1bHQoc3RydWN0IHM2ZTYzajB4MDMgKmN0eCkKK3sKKwlzNmU2M2oweDAzX2Rjc193 cml0ZV9zZXFfc3RhdGljKGN0eCwgMHg1MSwgMHhmZik7Cit9CisKK3N0YXRpYyB2b2lkIHM2ZTYz ajB4MDNfd2hpdGVfY3RybChzdHJ1Y3QgczZlNjNqMHgwMyAqY3R4KQoreworCXM2ZTYzajB4MDNf ZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4LCAweDUzLCAweDIwKTsKK30KKworc3RhdGljIHZvaWQg czZlNjNqMHgwM19hY2xfb2ZmKHN0cnVjdCBzNmU2M2oweDAzICpjdHgpCit7CisJczZlNjNqMHgw M19kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIDB4NTUsIDB4MDApOworfQorCitzdGF0aWMgdm9p ZCBzNmU2M2oweDAzX3Rlc3RfbGV2ZWxfMl9rZXlfb2ZmKHN0cnVjdCBzNmU2M2oweDAzICpjdHgp Cit7CisJczZlNjNqMHgwM19kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIDB4ZjEsIDB4YTUsIDB4 YTUpOworfQorCitzdGF0aWMgdm9pZCBzNmU2M2oweDAzX2FwcGx5X210cF9rZXkoc3RydWN0IHM2 ZTYzajB4MDMgKmN0eCwgYm9vbCBvbikKK3sKKwlpZiAob24pCisJCXM2ZTYzajB4MDNfZGNzX3dy aXRlX3NlcShjdHgsIE1DU19NVFBfS0VZLCAweDVhLCAweDVhKTsKKwllbHNlCisJCXM2ZTYzajB4 MDNfZGNzX3dyaXRlX3NlcShjdHgsIE1DU19NVFBfS0VZLCAweGE1LCAweGE1KTsKK30KKworc3Rh dGljIHZvaWQgczZlNjNqMHgwM19zZXRfbWF4aW11bV9yZXR1cm5fcGFja2V0X3NpemUoc3RydWN0 IHM2ZTYzajB4MDMgKmN0eCwKKwkJCQkJCQl1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qg bWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYpOworCWNv bnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyAqb3BzID0gZHNpLT5ob3N0LT5vcHM7CisKKwlp ZiAob3BzICYmIG9wcy0+dHJhbnNmZXIpIHsKKwkJdW5zaWduZWQgY2hhciBidWZbXSA9IHtzaXpl LCAwfTsKKwkJc3RydWN0IG1pcGlfZHNpX21zZyBtc2cgPSB7CisJCQkuY2hhbm5lbCA9IGRzaS0+ Y2hhbm5lbCwKKwkJCS50eXBlID0gTUlQSV9EU0lfU0VUX01BWElNVU1fUkVUVVJOX1BBQ0tFVF9T SVpFLAorCQkJLnR4X2xlbiA9IHNpemVvZihidWYpLAorCQkJLnR4X2J1ZiA9IGJ1ZgorCQl9Owor CQlpbnQgcmV0OworCisJCXJldCA9IG9wcy0+dHJhbnNmZXIoZHNpLT5ob3N0LCAmbXNnKTsKKwkJ aWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8gdHJhbnNmZXIg bWVzc2FnZS5cbiIpOworCQkJY3R4LT5lcnJvciA9IHJldDsKKwkJfQorCX0KK30KKworc3RhdGlj IHZvaWQgczZlNjNqMHgwM19yZWFkX210cF9pZChzdHJ1Y3QgczZlNjNqMHgwMyAqY3R4KQorewor CXVuc2lnbmVkIGNoYXIgaWRbTVRQX0lEX0xFTl07CisJaW50IHJldDsKKworCXM2ZTYzajB4MDNf dGVzdF9sZXZlbF8yX2tleV9vbihjdHgpOworCisJczZlNjNqMHgwM19zZXRfbWF4aW11bV9yZXR1 cm5fcGFja2V0X3NpemUoY3R4LCBNVFBfSURfTEVOKTsKKwlyZXQgPSBzNmU2M2oweDAzX2Rjc19y ZWFkKGN0eCwgTUNTX01UUF9JRCwgaWQsIE1UUF9JRF9MRU4pOworCWlmIChyZXQgPCBBUlJBWV9T SVpFKGlkKSB8fCBpZFswXSA9PSAweDAwKSB7CisJCWRldl9lcnIoY3R4LT5kZXYsICJyZWFkIGlk IGZhaWxlZFxuIik7CisJCWN0eC0+ZXJyb3IgPSAtRUlPOworCQlyZXR1cm47CisJfQorCisJczZl NjNqMHgwM190ZXN0X2xldmVsXzJfa2V5X29mZihjdHgpOworCisJZGV2X2luZm8oY3R4LT5kZXYs ICJJRDogMHglMDJ4LCAweCUwMngsIDB4JTAyeFxuIiwgaWRbM10sIGlkWzJdLCBpZFs1XSk7Cit9 CisKK3N0YXRpYyB2b2lkIHM2ZTYzajB4MDNfc2V0X3NlcXVlbmNlKHN0cnVjdCBzNmU2M2oweDAz ICpjdHgpCit7CisJLyogVGVzdCBrZXkgZW5hYmxlICovCisJczZlNjNqMHgwM190ZXN0X2xldmVs XzFfa2V5X29uKGN0eCk7CisJczZlNjNqMHgwM190ZXN0X2xldmVsXzJfa2V5X29uKGN0eCk7CisK KwlzNmU2M2oweDAzX3BvcmNoX2FkanVzdG1lbnQoY3R4KTsKKwlzNmU2M2oweDAzX2ZyYW1lX2Zy ZXEoY3R4KTsKKwlzNmU2M2oweDAzX2ZyYW1lX2ZyZXEoY3R4KTsKKwlzNmU2M2oweDAzX21lbV9h ZGRyX3NldF8wKGN0eCk7CisJczZlNjNqMHgwM19tZW1fYWRkcl9zZXRfMShjdHgpOworCisJczZl NjNqMHgwM19sdHBzX3RpbW1pbmdfc2V0XzBfNjBoeihjdHgpOworCXM2ZTYzajB4MDNfbHRwc190 aW1taW5nX3NldF8xKGN0eCk7CisKKwlzNmU2M2oweDAzX3BhcmFtX3Bvc190ZV9lZGdlKGN0eCk7 CisJczZlNjNqMHgwM190ZV9yaXNpbmdfZWRnZShjdHgpOworCXM2ZTYzajB4MDNfcGFyYW1fcG9z X2RlZmF1bHQoY3R4KTsKKworCXM2ZTYzajB4MDNfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4LCBN SVBJX0RDU19FWElUX1NMRUVQX01PREUpOworCW1zbGVlcCgxMjApOworCisJLyogZXRjIGNvbmRp dGlvbiBzZXR0aW5nICovCisJczZlNjNqMHgwM19lbHZzc19jb25kKGN0eCk7CisJczZlNjNqMHgw M19zZXRfcG9zKGN0eCk7CisKKwkvKiBicmlnaHRuZXNzIHNldHRpbmcgKi8KKwlzNmU2M2oweDAz X3doaXRlX2JyaWdodG5lc3NfZGVmYXVsdChjdHgpOworCXM2ZTYzajB4MDNfd2hpdGVfY3RybChj dHgpOworCXM2ZTYzajB4MDNfYWNsX29mZihjdHgpOworCisJczZlNjNqMHgwM19kY3Nfd3JpdGVf c2VxX3N0YXRpYyhjdHgsIE1JUElfRENTX1NFVF9URUFSX09OKTsKKwlzNmU2M2oweDAzX3Rlc3Rf bGV2ZWxfMl9rZXlfb2ZmKGN0eCk7CisKKwkvKiBkaXNwbGF5IG9uICovCisJczZlNjNqMHgwM19k Y3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIE1JUElfRENTX1NFVF9ESVNQTEFZX09OKTsKK30KKwor c3RhdGljIGludCBzNmU2M2oweDAzX3Bvd2VyX29uKHN0cnVjdCBzNmU2M2oweDAzICpjdHgpCit7 CisJaW50IHJldDsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKGN0 eC0+c3VwcGxpZXMpLCBjdHgtPnN1cHBsaWVzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJl dDsKKworCXVzbGVlcF9yYW5nZShjdHgtPnBvd2VyX29uX2RlbGF5ICogMTAwMCwKKwkJCShjdHgt PnBvd2VyX29uX2RlbGF5ICsgMSkgKiAxMDAwKTsKKworCWdwaW9kX3NldF92YWx1ZShjdHgtPnJl c2V0X2dwaW8sIDApOworCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKKwlncGlvZF9zZXRfdmFs dWUoY3R4LT5yZXNldF9ncGlvLCAxKTsKKworCXVzbGVlcF9yYW5nZShjdHgtPnJlc2V0X2RlbGF5 ICogMTAwMCwKKwkJCShjdHgtPnJlc2V0X2RlbGF5ICsgMSkgKiAxMDAwKTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IHM2ZTYzajB4MDNfcG93ZXJfb2ZmKHN0cnVjdCBzNmU2M2oweDAz ICpjdHgpCit7CisJaW50IHJldDsKKworCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dwaW8s IDApOworCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGN0eC0+c3Vw cGxpZXMpLCBjdHgtPnN1cHBsaWVzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM2ZTYzajB4MDNfZ2V0X2JyaWdodG5lc3Moc3Ry dWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsX2RldikKK3sKKwlyZXR1cm4gYmxfZGV2LT5wcm9wcy5i cmlnaHRuZXNzOworfQorCitzdGF0aWMgaW50IHM2ZTYzajB4MDNfZ2V0X2JyaWdodG5lc3NfaW5k ZXgodW5zaWduZWQgaW50IGJyaWdodG5lc3MpCit7CisJaW50IGluZGV4OworCisJc3dpdGNoIChi cmlnaHRuZXNzKSB7CisJY2FzZSAwIC4uLiAyMDoKKwkJaW5kZXggPSAwOworCQlicmVhazsKKwlj YXNlIDIxIC4uLiA0MDoKKwkJaW5kZXggPSAyOworCQlicmVhazsKKwljYXNlIDQxIC4uLiA2MDoK KwkJaW5kZXggPSA0OworCQlicmVhazsKKwljYXNlIDYxIC4uLiA4MDoKKwkJaW5kZXggPSA2Owor CQlicmVhazsKKwlkZWZhdWx0OgorCQlpbmRleCA9IDEwOworCQlicmVhazsKKwl9CisKKwlyZXR1 cm4gaW5kZXg7Cit9CisKK3N0YXRpYyB2b2lkIHM2ZTYzajB4MDNfdXBkYXRlX2dhbW1hKHN0cnVj dCBzNmU2M2oweDAzICpjdHgsCisJCQkJCXVuc2lnbmVkIGludCBicmlnaHRuZXNzKQoreworCWlu dCBpbmRleCA9IHM2ZTYzajB4MDNfZ2V0X2JyaWdodG5lc3NfaW5kZXgoYnJpZ2h0bmVzcyk7CisK KwlzNmU2M2oweDAzX2FwcGx5X210cF9rZXkoY3R4LCB0cnVlKTsKKworCXM2ZTYzajB4MDNfZGNz X3dyaXRlKGN0eCwgZ2FtbWFfdGJsW2luZGV4XSwgR0FNTUFfQ01EX0NOVCk7CisKKwlzNmU2M2ow eDAzX2FwcGx5X210cF9rZXkoY3R4LCBmYWxzZSk7Cit9CisKK3N0YXRpYyBpbnQgczZlNjNqMHgw M19zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmxfZGV2KQoreworCXN0 cnVjdCBzNmU2M2oweDAzICpjdHggPSAoc3RydWN0IHM2ZTYzajB4MDMgKilibF9nZXRfZGF0YShi bF9kZXYpOworCXVuc2lnbmVkIGludCBicmlnaHRuZXNzID0gYmxfZGV2LT5wcm9wcy5icmlnaHRu ZXNzOworCisJaWYgKGJyaWdodG5lc3MgPCBNSU5fQlJJR0hUTkVTUyB8fAorCQlicmlnaHRuZXNz ID4gYmxfZGV2LT5wcm9wcy5tYXhfYnJpZ2h0bmVzcykgeworCQlkZXZfZXJyKGN0eC0+ZGV2LCAi YnJpZ2h0bmVzc1sldV0gaXMgaW52YWxpZCB2YWx1ZVxuIiwKKwkJCWJyaWdodG5lc3MpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY3R4LT5wb3dlciA+IEZCX0JMQU5LX1VOQkxBTksp IHsKKwkJZGV2X2VycihjdHgtPmRldiwgInBhbmVsIGlzIG5vdCBpbiBmYiB1bmJsYW5rIHN0YXRl XG4iKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlzNmU2M2oweDAzX3VwZGF0ZV9nYW1tYShj dHgsIGJyaWdodG5lc3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg YmFja2xpZ2h0X29wcyBzNmU2M2oweDAzX2JsX29wcyA9IHsKKwkuZ2V0X2JyaWdodG5lc3MgPSBz NmU2M2oweDAzX2dldF9icmlnaHRuZXNzLAorCS51cGRhdGVfc3RhdHVzID0gczZlNjNqMHgwM19z ZXRfYnJpZ2h0bmVzcywKK307CisKKworc3RhdGljIGludCBzNmU2M2oweDAzX2VuYWJsZShzdHJ1 Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNmU2 M2oweDAzX2Rpc2FibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgczZlNjNqMHgwM19wcmVwYXJlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVs KQoreworCXN0cnVjdCBzNmU2M2oweDAzICpjdHggPSBwYW5lbF90b19zNmU2M2oweDAzKHBhbmVs KTsKKwlpbnQgcmV0OworCisJcmV0ID0gczZlNjNqMHgwM19wb3dlcl9vbihjdHgpOworCWlmIChy ZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJczZlNjNqMHgwM19yZWFkX210cF9pZChjdHgpOwor CisJczZlNjNqMHgwM19zZXRfc2VxdWVuY2UoY3R4KTsKKwlyZXQgPSBjdHgtPmVycm9yOworCisJ aWYgKHJldCA8IDApCisJCXJldHVybiBzNmU2M2oweDAzX2Rpc2FibGUocGFuZWwpOworCisJY3R4 LT5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IHM2ZTYzajB4MDNfdW5wcmVwYXJlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0 cnVjdCBzNmU2M2oweDAzICpjdHggPSBwYW5lbF90b19zNmU2M2oweDAzKHBhbmVsKTsKKwlpbnQg cmV0OworCisJczZlNjNqMHgwM19kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIE1JUElfRENTX1NF VF9ESVNQTEFZX09GRik7CisJczZlNjNqMHgwM19kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIE1J UElfRENTX0VOVEVSX1NMRUVQX01PREUpOworCisJczZlNjNqMHgwM19jbGVhcl9lcnJvcihjdHgp OworCisJdXNsZWVwX3JhbmdlKGN0eC0+cG93ZXJfb2ZmX2RlbGF5ICogMTAwMCwKKwkJCShjdHgt PnBvd2VyX29mZl9kZWxheSArIDEpICogMTAwMCk7CisKKwlyZXQgPSBzNmU2M2oweDAzX3Bvd2Vy X29mZihjdHgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gczZlNjNqMHgwM19wcmVwYXJlKHBh bmVsKTsKKworCWN0eC0+cG93ZXIgPSBGQl9CTEFOS19QT1dFUkRPV047CisKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgaW50IHM2ZTYzajB4MDNfZ2V0X21vZGVzKHN0cnVjdCBkcm1fcGFuZWwg KnBhbmVsKQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBwYW5lbC0+Y29u bmVjdG9yOworCXN0cnVjdCBzNmU2M2oweDAzICpjdHggPSBwYW5lbF90b19zNmU2M2oweDAzKHBh bmVsKTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKKworCW1vZGUgPSBkcm1fbW9k ZV9jcmVhdGUoY29ubmVjdG9yLT5kZXYpOworCWlmICghbW9kZSkgeworCQlEUk1fRVJST1IoImZh aWxlZCB0byBjcmVhdGUgYSBuZXcgZGlzcGxheSBtb2RlXG4iKTsKKwkJcmV0dXJuIDA7CisJfQor CisJZHJtX2Rpc3BsYXlfbW9kZV9mcm9tX3ZpZGVvbW9kZSgmY3R4LT52bSwgbW9kZSk7CisJbW9k ZS0+d2lkdGhfbW0gPSBjdHgtPndpZHRoX21tOworCW1vZGUtPmhlaWdodF9tbSA9IGN0eC0+aGVp Z2h0X21tOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLndpZHRoX21tID0gbW9kZS0+d2lkdGhf bW07CisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uaGVpZ2h0X21tID0gbW9kZS0+aGVpZ2h0X21t OworCisJbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJNX01PREVfVFlQRV9Q UkVGRVJSRUQ7CisJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOworCisJcmV0 dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BhbmVsX2Z1bmNzIHM2ZTYzajB4 MDNfZHJtX2Z1bmNzID0geworCS5lbmFibGUgPSBzNmU2M2oweDAzX2VuYWJsZSwKKwkuZGlzYWJs ZSA9IHM2ZTYzajB4MDNfZGlzYWJsZSwKKwkucHJlcGFyZT0gczZlNjNqMHgwM19wcmVwYXJlLAor CS51bnByZXBhcmUgPSBzNmU2M2oweDAzX3VucHJlcGFyZSwKKwkuZ2V0X21vZGVzID0gczZlNjNq MHgwM19nZXRfbW9kZXMsCit9OworCitzdGF0aWMgaW50IHM2ZTYzajB4MDNfcGFyc2VfZHQoc3Ry dWN0IHM2ZTYzajB4MDMgKmN0eCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjdHgtPmRldjsK KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCWludCByZXQ7CisKKwly ZXQgPSBvZl9nZXRfdmlkZW9tb2RlKG5wLCAmY3R4LT52bSwgMCk7CisJaWYgKHJldCA8IDApCisJ CXJldHVybiByZXQ7CisKKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInBvd2VyLW9uLWRlbGF5 IiwgJmN0eC0+cG93ZXJfb25fZGVsYXkpOworCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicG93 ZXItb2ZmLWRlbGF5IiwgJmN0eC0+cG93ZXJfb2ZmX2RlbGF5KTsKKwlvZl9wcm9wZXJ0eV9yZWFk X3UzMihucCwgInJlc2V0LWRlbGF5IiwgJmN0eC0+cmVzZXRfZGVsYXkpOworCW9mX3Byb3BlcnR5 X3JlYWRfdTMyKG5wLCAiaW5pdC1kZWxheSIsICZjdHgtPmluaXRfZGVsYXkpOworCisJY3R4LT5m bGlwX2hvcml6b250YWwgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJmbGlwLWhvcml6b250 YWwiKTsKKwljdHgtPmZsaXBfdmVydGljYWwgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJm bGlwLXZlcnRpY2FsIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHM2ZTYzajB4 MDNfcHJvYmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZkc2ktPmRldjsKKwlzdHJ1Y3QgczZlNjNqMHgwMyAqY3R4OworCWludCByZXQ7CisK KwljdHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IHM2ZTYzajB4MDMpLCBHRlBf S0VSTkVMKTsKKwlpZiAoIWN0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltaXBpX2RzaV9zZXRf ZHJ2ZGF0YShkc2ksIGN0eCk7CisKKwljdHgtPmRldiA9IGRldjsKKworCWRzaS0+bGFuZXMgPSAx OworCWRzaS0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKKwlkc2ktPm1vZGVfZmxhZ3Mg PSBNSVBJX0RTSV9NT0RFX0VPVF9QQUNLRVQgfCBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUOwor CisJcmV0ID0gczZlNjNqMHgwM19wYXJzZV9kdChjdHgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1 cm4gcmV0OworCisJY3R4LT5zdXBwbGllc1swXS5zdXBwbHkgPSAidmRkMyI7CisJY3R4LT5zdXBw bGllc1sxXS5zdXBwbHkgPSAidmNpIjsKKwlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldChk ZXYsIEFSUkFZX1NJWkUoY3R4LT5zdXBwbGllcyksCisJCQkJICAgICAgY3R4LT5zdXBwbGllcyk7 CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHJlZ3VsYXRv cnM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWN0eC0+cmVzZXRfZ3BpbyA9 IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInJlc2V0IiwgR1BJT0RfT1VUX0hJR0gpOworCWlmIChJU19F UlIoY3R4LT5yZXNldF9ncGlvKSkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgcmVzZXQt Z3Bpb3MgJWxkXG4iLAorCQkJCVBUUl9FUlIoY3R4LT5yZXNldF9ncGlvKSk7CisJCXJldHVybiBQ VFJfRVJSKGN0eC0+cmVzZXRfZ3Bpbyk7CisJfQorCisJY3R4LT5wb3dlciA9IEZCX0JMQU5LX1BP V0VSRE9XTjsKKworCWRybV9wYW5lbF9pbml0KCZjdHgtPnBhbmVsKTsKKwljdHgtPnBhbmVsLmRl diA9IGRldjsKKwljdHgtPnBhbmVsLmZ1bmNzID0gJnM2ZTYzajB4MDNfZHJtX2Z1bmNzOworCisJ Y3R4LT5ibF9kZXYgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJzNmU2M2oweDAzIiwgZGV2 LCBjdHgsCisJCQkJCQkmczZlNjNqMHgwM19ibF9vcHMsIE5VTEwpOworCWlmIChJU19FUlIoY3R4 LT5ibF9kZXYpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGJhY2tsaWdo dCBkZXZpY2VcbiIpOworCQlyZXR1cm4gUFRSX0VSUihjdHgtPmJsX2Rldik7CisJfQorCisJY3R4 LT5ibF9kZXYtPnByb3BzLm1heF9icmlnaHRuZXNzID0gTUFYX0JSSUdIVE5FU1M7CisJY3R4LT5i bF9kZXYtPnByb3BzLmJyaWdodG5lc3MgPSBERUZBVUxUX0JSSUdIVE5FU1M7CisKKwlyZXQgPSBk cm1fcGFuZWxfYWRkKCZjdHgtPnBhbmVsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfdW5y ZWdpc3Rlcl9iYWNrbGlnaHQ7CisKKwlyZXQgPSBtaXBpX2RzaV9hdHRhY2goZHNpKTsKKwlpZiAo cmV0IDwgMCkKKwkJZ290byBlcnJfcmVtb3ZlX3BhbmVsOworCisJcmV0dXJuIHJldDsKKworZXJy X3JlbW92ZV9wYW5lbDoKKwkJZHJtX3BhbmVsX3JlbW92ZSgmY3R4LT5wYW5lbCk7CisKK2Vycl91 bnJlZ2lzdGVyX2JhY2tsaWdodDoKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoY3R4LT5i bF9kZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzNmU2M2oweDAzX3JlbW92 ZShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCit7CisJc3RydWN0IHM2ZTYzajB4MDMgKmN0 eCA9IG1pcGlfZHNpX2dldF9kcnZkYXRhKGRzaSk7CisKKwltaXBpX2RzaV9kZXRhY2goZHNpKTsK Kwlkcm1fcGFuZWxfcmVtb3ZlKCZjdHgtPnBhbmVsKTsKKworCWJhY2tsaWdodF9kZXZpY2VfdW5y ZWdpc3RlcihjdHgtPmJsX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBv Zl9kZXZpY2VfaWQgczZlNjNqMHgwM19vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAi c2Ftc3VuZyxzNmU2M2oweDAzIiB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2Ys IHM2ZTYzajB4MDNfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IG1pcGlfZHNpX2RyaXZlciBz NmU2M2oweDAzX2RyaXZlciA9IHsKKwkucHJvYmUgPSBzNmU2M2oweDAzX3Byb2JlLAorCS5yZW1v dmUgPSBzNmU2M2oweDAzX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJwYW5lbF9z NmU2M2oweDAzIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9 IHM2ZTYzajB4MDNfb2ZfbWF0Y2gsCisJfSwKK307Cittb2R1bGVfbWlwaV9kc2lfZHJpdmVyKHM2 ZTYzajB4MDNfZHJpdmVyKTsKLS0gCjEuNy45LjUKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCg==