From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hoegeun Kwon Subject: [PATCH v2 2/4] drm/panel: Add support for s6e63j0x03 panel driver Date: Thu, 15 Jun 2017 19:03:28 +0900 Message-ID: <1497521010-8429-3-git-send-email-hoegeun.kwon@samsung.com> References: <1497521010-8429-1-git-send-email-hoegeun.kwon@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-reply-to: <1497521010-8429-1-git-send-email-hoegeun.kwon@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: thierry.reding@gmail.com, airlied@linux.ie, robh+dt@kernel.org, mark.rutland@arm.com, catalin.marinas@arm.com, will.deacon@arm.com, kgene@kernel.org, krzk@kernel.org Cc: devicetree@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, javier@osg.samsung.com, Hyungwon Hwang , Hoegeun Kwon , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org VGhpcyBwYXRjaCBhZGRzIE1JUEktRFNJIGJhc2VkIFM2RTYzSjBYMDMgQU1PTEVEIExDRCBwYW5l bCBkcml2ZXIKd2hpY2ggdXNlcyBtaXBpX2RzaSBidXMgdG8gY29tbXVuaWNhdGUgd2l0aCBwYW5l bC4gVGhlIHBhbmVsIGhhcwozMjDDlzMyMCByZXNvbHV0aW9uIGluIDEuNjMiIHBoeXNpY2FsIHBh bmVsLiBUaGlzIHBhbmVsIGlzIHVzZWQgaW4KU2Ftc3VuZyBHYWxheHkgR2VhciAyLgoKU2lnbmVk LW9mZi1ieTogSW5raSBEYWUgPGlua2kuZGFlQHNhbXN1bmcuY29tPgpTaWduZWQtb2ZmLWJ5OiBI eXVuZ3dvbiBId2FuZyA8aHVtYW4uaHdhbmdAc2Ftc3VuZy5jb20+ClNpZ25lZC1vZmYtYnk6IEhv ZWdldW4gS3dvbiA8aG9lZ2V1bi5rd29uQHNhbXN1bmcuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9LY29uZmlnICAgICAgICAgICAgICAgICAgICB8ICAgNyArCiBkcml2ZXJzL2dwdS9k cm0vcGFuZWwvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUv ZHJtL3BhbmVsL3BhbmVsLXNhbXN1bmctczZlNjNqMHgwMy5jIHwgNDc2ICsrKysrKysrKysrKysr KysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDQ4NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXNhbXN1bmctczZlNjNqMHgwMy5j CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgYi9kcml2ZXJzL2dw dS9kcm0vcGFuZWwvS2NvbmZpZwppbmRleCAzZTI5YTk5Li4zZjRhZmRlIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwv S2NvbmZpZwpAQCAtNjgsNiArNjgsMTMgQEAgY29uZmlnIERSTV9QQU5FTF9TQU1TVU5HX1M2RTNI QTIKIAlkZXBlbmRzIG9uIERSTV9NSVBJX0RTSQogCXNlbGVjdCBWSURFT01PREVfSEVMUEVSUwog Citjb25maWcgRFJNX1BBTkVMX1NBTVNVTkdfUzZFNjNKMFgwMworCXRyaXN0YXRlICJTYW1zdW5n IFM2RTYzSjBYMDMgRFNJIGNvbW1hbmQgbW9kZSBwYW5lbCIKKwlkZXBlbmRzIG9uIE9GCisJZGVw ZW5kcyBvbiBEUk1fTUlQSV9EU0kKKwlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UK KwlzZWxlY3QgVklERU9NT0RFX0hFTFBFUlMKKwogY29uZmlnIERSTV9QQU5FTF9TQU1TVU5HX1M2 RThBQTAKIAl0cmlzdGF0ZSAiU2Ftc3VuZyBTNkU4QUEwIERTSSB2aWRlbyBtb2RlIHBhbmVsIgog CWRlcGVuZHMgb24gT0YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmls ZSBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQppbmRleCAyOTJiM2M3Li5mMDI4MjY5 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQCBvYmotJChDT05GSUdfRFJN X1BBTkVMX0xHX0xHNDU3MykgKz0gcGFuZWwtbGctbGc0NTczLm8KIG9iai0kKENPTkZJR19EUk1f UEFORUxfUEFOQVNPTklDX1ZWWDEwRjAzNE4wMCkgKz0gcGFuZWwtcGFuYXNvbmljLXZ2eDEwZjAz NG4wMC5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NBTVNVTkdfTEQ5MDQwKSArPSBwYW5lbC1z YW1zdW5nLWxkOTA0MC5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NBTVNVTkdfUzZFM0hBMikg Kz0gcGFuZWwtc2Ftc3VuZy1zNmUzaGEyLm8KK29iai0kKENPTkZJR19EUk1fUEFORUxfU0FNU1VO R19TNkU2M0owWDAzKSArPSBwYW5lbC1zYW1zdW5nLXM2ZTYzajB4MDMubwogb2JqLSQoQ09ORklH X0RSTV9QQU5FTF9TQU1TVU5HX1M2RThBQTApICs9IHBhbmVsLXNhbXN1bmctczZlOGFhMC5vCiBv YmotJChDT05GSUdfRFJNX1BBTkVMX1NIQVJQX0xRMTAxUjFTWDAxKSArPSBwYW5lbC1zaGFycC1s cTEwMXIxc3gwMS5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NIQVJQX0xTMDQzVDFMRTAxKSAr PSBwYW5lbC1zaGFycC1sczA0M3QxbGUwMS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v cGFuZWwvcGFuZWwtc2Ftc3VuZy1zNmU2M2oweDAzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwv cGFuZWwtc2Ftc3VuZy1zNmU2M2oweDAzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uZGQwMzhiYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9w YW5lbC1zYW1zdW5nLXM2ZTYzajB4MDMuYwpAQCAtMCwwICsxLDQ3NiBAQAorLyoKKyAqIE1JUEkt RFNJIGJhc2VkIFM2RTYzSjBYMDMgQU1PTEVEIGxjZCAxLjYzIGluY2ggcGFuZWwgZHJpdmVyLgor ICoKKyAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBM dGQKKyAqCisgKiBJbmtpIERhZSA8aW5raS5kYWVAc2Ftc3VuZy5jb20+CisgKiBIb2VnZXVuIEt3 b24gPGhvZWdldW4ua3dvbkBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICov CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+ CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3Vs YXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5oPgorCisjZGVm aW5lIE1DU19MRVZFTDJfS0VZCQkweGYwCisjZGVmaW5lIE1DU19NVFBfS0VZCQkweGYxCisjZGVm aW5lIE1DU19NVFBfU0VUMwkJMHhkNAorCisjZGVmaW5lIE1JTl9CUklHSFRORVNTCQkwCisjZGVm aW5lIE1BWF9CUklHSFRORVNTCQkxMDAKKyNkZWZpbmUgREVGQVVMVF9CUklHSFRORVNTCTgwCisK KyNkZWZpbmUgTlVNX0dBTU1BX1NURVBTCQk5CisjZGVmaW5lIEdBTU1BX0NNRF9DTlQJCTI4CisK K3N0cnVjdCBzNmU2M2oweDAzIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9w YW5lbCBwYW5lbDsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmxfZGV2OworCisJc3RydWN0 IHJlZ3VsYXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbMl07CisJc3RydWN0IGdwaW9fZGVzYyAqcmVz ZXRfZ3BpbzsKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdhbW1hX3RibFtOVU1f R0FNTUFfU1RFUFNdW0dBTU1BX0NNRF9DTlRdID0geworCXsJLyogR2FtbWEgMTAgKi8KKwkJTUNT X01UUF9TRVQzLAorCQkweDAwLCAweDAwLCAweDAwLCAweDdmLCAweDdmLCAweDdmLCAweDUyLCAw eDZiLCAweDZmLCAweDI2LAorCQkweDI4LCAweDJkLCAweDI4LCAweDI2LCAweDI3LCAweDMzLCAw eDM0LCAweDMyLCAweDM2LCAweDM2LAorCQkweDM1LCAweDAwLCAweGFiLCAweDAwLCAweGFlLCAw eDAwLCAweGJmCisJfSwKKwl7CS8qIGdhbW1hIDMwICovCisJCU1DU19NVFBfU0VUMywKKwkJMHgw MCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg3ZiwgMHg3ZiwgMHg0ZSwgMHg2NCwgMHg2OSwgMHgyNiwK KwkJMHgyNywgMHgyYSwgMHgyOCwgMHgyOSwgMHgyNywgMHgzMSwgMHgzMiwgMHgzMSwgMHgzNSwg MHgzNCwKKwkJMHgzNSwgMHgwMCwgMHhjNCwgMHgwMCwgMHhjYSwgMHgwMCwgMHhkYworCX0sCisJ ewkvKiBnYW1tYSA2MCAqLworCQlNQ1NfTVRQX1NFVDMsCisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4 NjUsIDB4N2IsIDB4N2QsIDB4NWYsIDB4NjcsIDB4NjgsIDB4MmEsCisJCTB4MjgsIDB4MjksIDB4 MjgsIDB4MmEsIDB4MjcsIDB4MzEsIDB4MmYsIDB4MzAsIDB4MzQsIDB4MzMsCisJCTB4MzQsIDB4 MDAsIDB4ZDksIDB4MDAsIDB4ZTQsIDB4MDAsIDB4ZjUKKwl9LAorCXsJLyogZ2FtbWEgOTAgKi8K KwkJTUNTX01UUF9TRVQzLAorCQkweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDZmLCAweDcxLCAw eDY3LCAweDZhLCAweDZjLCAweDI5LAorCQkweDI4LCAweDI4LCAweDI4LCAweDI5LCAweDI3LCAw eDMwLCAweDJlLCAweDMwLCAweDMyLCAweDMxLAorCQkweDMxLCAweDAwLCAweGVhLCAweDAwLCAw eGY2LCAweDAxLCAweDA5CisJfSwKKwl7CS8qIGdhbW1hIDEyMCAqLworCQlNQ1NfTVRQX1NFVDMs CisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4M2QsIDB4NjYsIDB4NjgsIDB4NjksIDB4NjksIDB4Njks IDB4MjgsCisJCTB4MjgsIDB4MjcsIDB4MjgsIDB4MjgsIDB4MjcsIDB4MzAsIDB4MmUsIDB4MmYs IDB4MzEsIDB4MzEsCisJCTB4MzAsIDB4MDAsIDB4ZjksIDB4MDEsIDB4MDUsIDB4MDEsIDB4MWIK Kwl9LAorCXsJLyogZ2FtbWEgMTUwICovCisJCU1DU19NVFBfU0VUMywKKwkJMHgwMCwgMHgwMCwg MHgwMCwgMHgzMSwgMHg1MSwgMHg1MywgMHg2NiwgMHg2NiwgMHg2NywgMHgyOCwKKwkJMHgyOSwg MHgyNywgMHgyOCwgMHgyNywgMHgyNywgMHgyZSwgMHgyZCwgMHgyZSwgMHgzMSwgMHgzMSwKKwkJ MHgzMCwgMHgwMSwgMHgwNCwgMHgwMSwgMHgxMSwgMHgwMSwgMHgyOQorCX0sCisJewkvKiBnYW1t YSAyMDAgKi8KKwkJTUNTX01UUF9TRVQzLAorCQkweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDRm LCAweDUxLCAweDY3LCAweDY1LCAweDY1LCAweDI5LAorCQkweDJhLCAweDI4LCAweDI3LCAweDI1 LCAweDI2LCAweDJkLCAweDJjLCAweDJjLCAweDMwLCAweDMwLAorCQkweDMwLCAweDAxLCAweDE0 LCAweDAxLCAweDIzLCAweDAxLCAweDNiCisJfSwKKwl7CS8qIGdhbW1hIDI0MCAqLworCQlNQ1Nf TVRQX1NFVDMsCisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4NGQsIDB4NTAsIDB4NjUsIDB4 NjMsIDB4NjQsIDB4MmEsCisJCTB4MmMsIDB4MjksIDB4MjYsIDB4MjQsIDB4MjUsIDB4MmMsIDB4 MmIsIDB4MmIsIDB4MzAsIDB4MzAsCisJCTB4MzAsIDB4MDEsIDB4MWUsIDB4MDEsIDB4MmYsIDB4 MDEsIDB4NDcKKwl9LAorCXsJLyogZ2FtbWEgMzAwICovCisJCU1DU19NVFBfU0VUMywKKwkJMHgw MCwgMHgwMCwgMHgwMCwgMHgzOCwgMHg2MSwgMHg2NCwgMHg2NSwgMHg2MywgMHg2NCwgMHgyOCwK KwkJMHgyYSwgMHgyNywgMHgyNiwgMHgyMywgMHgyNSwgMHgyYiwgMHgyYiwgMHgyYSwgMHgzMCwg MHgyZiwKKwkJMHgzMCwgMHgwMSwgMHgyZCwgMHgwMSwgMHgzZiwgMHgwMSwgMHg1NworCX0KK307 CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHM2ZTYzajB4MDMgKnBhbmVsX3RvX3M2ZTYzajB4MDMo c3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwYW5lbCwg c3RydWN0IHM2ZTYzajB4MDMsIHBhbmVsKTsKK30KKworc3RhdGljIGlubGluZSBzc2l6ZV90IHM2 ZTYzajB4MDNfZGNzX3dyaXRlX3NlcShzdHJ1Y3QgczZlNjNqMHgwMyAqY3R4LAorCQkJCQljb25z dCB2b2lkICpzZXEsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNp ID0gdG9fbWlwaV9kc2lfZGV2aWNlKGN0eC0+ZGV2KTsKKworCXJldHVybiBtaXBpX2RzaV9kY3Nf d3JpdGVfYnVmZmVyKGRzaSwgc2VxLCBsZW4pOworfQorCisjZGVmaW5lIHM2ZTYzajB4MDNfZGNz X3dyaXRlX3NlcV9zdGF0aWMoY3R4LCBzZXEuLi4pIGRvIHsJXAorCXN0YXRpYyBjb25zdCB1OCBk W10gPSB7IHNlcSB9OwkJCQlcCisJaW50IHJldDsJCQkJCQlcCisJcmV0ID0gczZlNjNqMHgwM19k Y3Nfd3JpdGVfc2VxKGN0eCwgZCwgQVJSQVlfU0laRShkKSk7CVwKKwlpZiAocmV0IDwgMCkJCQkJ CQlcCisJCXJldHVybiByZXQ7CQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHM2ZTYzajB4 MDNfY2FsbF93cml0ZV9mdW5jKHJldCwgZnVuYykgZG8gewlcCisJcmV0ID0gKGZ1bmMpOwkJCQkJ XAorCWlmIChyZXQgPCAwKQkJCQkJXAorCQlyZXR1cm4gcmV0OwkJCQlcCit9IHdoaWxlICgwKQor CitzdGF0aWMgaW5saW5lIGludCBzNmU2M2oweDAzX2VuYWJsZV9sdjJfY29tbWFuZChzdHJ1Y3Qg czZlNjNqMHgwMyAqY3R4KQoreworCXM2ZTYzajB4MDNfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4 LCBNQ1NfTEVWRUwyX0tFWSwgMHg1YSwgMHg1YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bmxpbmUgaW50IHM2ZTYzajB4MDNfYXBwbHlfbXRwX2tleShzdHJ1Y3QgczZlNjNqMHgwMyAqY3R4 LCBib29sIG9uKQoreworCWlmIChvbikKKwkJczZlNjNqMHgwM19kY3Nfd3JpdGVfc2VxX3N0YXRp YyhjdHgsIE1DU19NVFBfS0VZLCAweDVhLCAweDVhKTsKKwllbHNlCisJCXM2ZTYzajB4MDNfZGNz X3dyaXRlX3NlcV9zdGF0aWMoY3R4LCBNQ1NfTVRQX0tFWSwgMHhhNSwgMHhhNSk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBzNmU2M2oweDAzX3Bvd2VyX29uKHN0cnVjdCBzNmU2M2ow eDAzICpjdHgpCit7CisJaW50IHJldDsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShB UlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpLCBjdHgtPnN1cHBsaWVzKTsKKwlpZiAocmV0IDwgMCkK KwkJcmV0dXJuIHJldDsKKworCW1zbGVlcCgzMCk7CisKKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5y ZXNldF9ncGlvLCAxKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisJZ3Bpb2Rfc2V0X3Zh bHVlKGN0eC0+cmVzZXRfZ3BpbywgMCk7CisJdXNsZWVwX3JhbmdlKDUwMDAsIDYwMDApOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczZlNjNqMHgwM19wb3dlcl9vZmYoc3RydWN0IHM2 ZTYzajB4MDMgKmN0eCkKK3sKKwlyZXR1cm4gcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9T SVpFKGN0eC0+c3VwcGxpZXMpLCBjdHgtPnN1cHBsaWVzKTsKK30KKworc3RhdGljIHVuc2lnbmVk IGludCBzNmU2M2oweDAzX2dldF9icmlnaHRuZXNzX2luZGV4KHVuc2lnbmVkIGludCBicmlnaHRu ZXNzKQoreworCXVuc2lnbmVkIGludCBpbmRleDsKKworCWluZGV4ID0gYnJpZ2h0bmVzcyAvIChN QVhfQlJJR0hUTkVTUyAvIE5VTV9HQU1NQV9TVEVQUyk7CisKKwlpZiAoaW5kZXggPj0gTlVNX0dB TU1BX1NURVBTKQorCQlpbmRleCA9IE5VTV9HQU1NQV9TVEVQUyAtIDE7CisKKwlyZXR1cm4gaW5k ZXg7Cit9CisKK3N0YXRpYyBpbnQgczZlNjNqMHgwM191cGRhdGVfZ2FtbWEoc3RydWN0IHM2ZTYz ajB4MDMgKmN0eCwKKwkJCQkJdW5zaWduZWQgaW50IGJyaWdodG5lc3MpCit7CisJc3RydWN0IGJh Y2tsaWdodF9kZXZpY2UgKmJsX2RldiA9IGN0eC0+YmxfZGV2OworCXVuc2lnbmVkIGludCBpbmRl eCA9IHM2ZTYzajB4MDNfZ2V0X2JyaWdodG5lc3NfaW5kZXgoYnJpZ2h0bmVzcyk7CisJaW50IHJl dDsKKworCXM2ZTYzajB4MDNfY2FsbF93cml0ZV9mdW5jKHJldCwgczZlNjNqMHgwM19hcHBseV9t dHBfa2V5KGN0eCwgdHJ1ZSkpOworCXM2ZTYzajB4MDNfY2FsbF93cml0ZV9mdW5jKHJldCwKKwkJ czZlNjNqMHgwM19kY3Nfd3JpdGVfc2VxKGN0eCwgZ2FtbWFfdGJsW2luZGV4XSwgR0FNTUFfQ01E X0NOVCkpOworCXM2ZTYzajB4MDNfY2FsbF93cml0ZV9mdW5jKHJldCwgczZlNjNqMHgwM19hcHBs eV9tdHBfa2V5KGN0eCwgZmFsc2UpKTsKKworCWJsX2Rldi0+cHJvcHMuYnJpZ2h0bmVzcyA9IGJy aWdodG5lc3M7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNmU2M2oweDAzX3NldF9i cmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibF9kZXYpCit7CisJc3RydWN0IHM2 ZTYzajB4MDMgKmN0eCA9IChzdHJ1Y3QgczZlNjNqMHgwMyAqKWJsX2dldF9kYXRhKGJsX2Rldik7 CisJdW5zaWduZWQgaW50IGJyaWdodG5lc3MgPSBibF9kZXYtPnByb3BzLmJyaWdodG5lc3M7CisJ aW50IHJldDsKKworCXM2ZTYzajB4MDNfY2FsbF93cml0ZV9mdW5jKHJldCwKKwkJczZlNjNqMHgw M191cGRhdGVfZ2FtbWEoY3R4LCBicmlnaHRuZXNzKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIHM2ZTYzajB4MDNfYmxfb3BzID0geworCS51 cGRhdGVfc3RhdHVzID0gczZlNjNqMHgwM19zZXRfYnJpZ2h0bmVzcywKK307CisKK3N0YXRpYyBp bnQgczZlNjNqMHgwM19kaXNhYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVj dCBzNmU2M2oweDAzICpjdHggPSBwYW5lbF90b19zNmU2M2oweDAzKHBhbmVsKTsKKwlzdHJ1Y3Qg bWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYpOworCWlu dCByZXQ7CisKKwlzNmU2M2oweDAzX2NhbGxfd3JpdGVfZnVuYyhyZXQsIG1pcGlfZHNpX2Rjc19z ZXRfZGlzcGxheV9vZmYoZHNpKSk7CisJY3R4LT5ibF9kZXYtPnByb3BzLnBvd2VyID0gRkJfQkxB TktfTk9STUFMOworCisJczZlNjNqMHgwM19jYWxsX3dyaXRlX2Z1bmMocmV0LCBtaXBpX2RzaV9k Y3NfZW50ZXJfc2xlZXBfbW9kZShkc2kpKTsKKwltc2xlZXAoMTIwKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IHM2ZTYzajB4MDNfdW5wcmVwYXJlKHN0cnVjdCBkcm1fcGFuZWwgKnBh bmVsKQoreworCXN0cnVjdCBzNmU2M2oweDAzICpjdHggPSBwYW5lbF90b19zNmU2M2oweDAzKHBh bmVsKTsKKwlpbnQgcmV0OworCisJcmV0ID0gczZlNjNqMHgwM19wb3dlcl9vZmYoY3R4KTsKKwlp ZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWN0eC0+YmxfZGV2LT5wcm9wcy5wb3dlciA9 IEZCX0JMQU5LX1BPV0VSRE9XTjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM2ZTYz ajB4MDNfcGFuZWxfaW5pdChzdHJ1Y3QgczZlNjNqMHgwMyAqY3R4KQoreworCXN0cnVjdCBtaXBp X2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2RldmljZShjdHgtPmRldik7CisJaW50IHJl dDsKKworCXM2ZTYzajB4MDNfY2FsbF93cml0ZV9mdW5jKHJldCwgczZlNjNqMHgwM19lbmFibGVf bHYyX2NvbW1hbmQoY3R4KSk7CisJczZlNjNqMHgwM19jYWxsX3dyaXRlX2Z1bmMocmV0LCBzNmU2 M2oweDAzX2FwcGx5X210cF9rZXkoY3R4LCB0cnVlKSk7CisKKwkvKiBzZXQgcG9yY2ggYWRqdXN0 bWVudCAqLworCXM2ZTYzajB4MDNfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4LCAweGYyLCAweDFj LCAweDI4KTsKKwkvKiBzZXQgZnJhbWUgZnJlcSAqLworCXM2ZTYzajB4MDNfZGNzX3dyaXRlX3Nl cV9zdGF0aWMoY3R4LCAweGI1LCAweDAwLCAweDAyLCAweDAwKTsKKwkvKiBzZXQgY2FzZXQsIHBh c2V0ICovCisJczZlNjNqMHgwM19jYWxsX3dyaXRlX2Z1bmMocmV0LAorCQltaXBpX2RzaV9kY3Nf c2V0X2NvbHVtbl9hZGRyZXNzKGRzaSwgMHgwMDE0LCAweDAxNTMpKTsKKwlzNmU2M2oweDAzX2Nh bGxfd3JpdGVfZnVuYyhyZXQsCisJCW1pcGlfZHNpX2Rjc19zZXRfcGFnZV9hZGRyZXNzKGRzaSwg MHgwMDAwLCAweDAxM2YpKTsKKwkvKiBzZXQgbHRwcyB0aW1taW5nIDAsIDEgKi8KKwlzNmU2M2ow eDAzX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgMHhmOCwgMHgwOCwgMHgwOCwgMHgwOCwgMHgx NywgMHgwMCwKKwkJCQkJCQkweDJhLCAweDAyLCAweDI2LCAweDAwLAorCQkJCQkJCTB4MDAsIDB4 MDIsIDB4MDAsIDB4MDApOworCXM2ZTYzajB4MDNfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4LCAw eGY3LCAweDAyKTsKKwkvKiBzZXQgcGFyYW0gcG9zIHRlX2VkZ2UgKi8KKwlzNmU2M2oweDAzX2Rj c193cml0ZV9zZXFfc3RhdGljKGN0eCwgMHhiMCwgMHgwMSk7CisJLyogc2V0IHRlIHJpc2luZyBl ZGdlICovCisJczZlNjNqMHgwM19kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIDB4ZTIsIDB4MGYp OworCS8qIHNldCBwYXJhbSBwb3MgZGVmYXVsdCAqLworCXM2ZTYzajB4MDNfZGNzX3dyaXRlX3Nl cV9zdGF0aWMoY3R4LCAweGIwLCAweDAwKTsKKworCXM2ZTYzajB4MDNfY2FsbF93cml0ZV9mdW5j KHJldCwgbWlwaV9kc2lfZGNzX2V4aXRfc2xlZXBfbW9kZShkc2kpKTsKKworCXM2ZTYzajB4MDNf Y2FsbF93cml0ZV9mdW5jKHJldCwgczZlNjNqMHgwM19hcHBseV9tdHBfa2V5KGN0eCwgZmFsc2Up KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM2ZTYzajB4MDNfcHJlcGFyZShzdHJ1 Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgczZlNjNqMHgwMyAqY3R4ID0gcGFuZWxf dG9fczZlNjNqMHgwMyhwYW5lbCk7CisJaW50IHJldDsKKworCXJldCA9IHM2ZTYzajB4MDNfcG93 ZXJfb24oY3R4KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHM2ZTYz ajB4MDNfcGFuZWxfaW5pdChjdHgpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKKworCWN0 eC0+YmxfZGV2LT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX05PUk1BTDsKKworCXJldHVybiAwOwor CitlcnI6CisJczZlNjNqMHgwM19wb3dlcl9vZmYoY3R4KTsKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50IHM2ZTYzajB4MDNfZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQorewor CXN0cnVjdCBzNmU2M2oweDAzICpjdHggPSBwYW5lbF90b19zNmU2M2oweDAzKHBhbmVsKTsKKwlz dHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYp OworCWludCByZXQ7CisKKwltc2xlZXAoMTIwKTsKKworCXM2ZTYzajB4MDNfY2FsbF93cml0ZV9m dW5jKHJldCwgczZlNjNqMHgwM19hcHBseV9tdHBfa2V5KGN0eCwgdHJ1ZSkpOworCisJLyogc2V0 IGVsdnNzX2NvbmQgKi8KKwlzNmU2M2oweDAzX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgMHhi MSwgMHgwMCwgMHgwOSk7CisJLyogc2V0IHBvcyAqLworCXM2ZTYzajB4MDNfZGNzX3dyaXRlX3Nl cV9zdGF0aWMoY3R4LCBNSVBJX0RDU19TRVRfQUREUkVTU19NT0RFLCAweDQwKTsKKwkvKiBzZXQg ZGVmYXVsdCB3aGl0ZSBicmlnaHRuZXNzICovCisJczZlNjNqMHgwM19jYWxsX3dyaXRlX2Z1bmMo cmV0LAorCQltaXBpX2RzaV9kY3Nfc2V0X2Rpc3BsYXlfYnJpZ2h0bmVzcyhkc2ksIDB4MDBmZikp OworCS8qIHNldCB3aGlsdGUgY3RybCAqLworCXM2ZTYzajB4MDNfZGNzX3dyaXRlX3NlcV9zdGF0 aWMoY3R4LAorCQkJCQlNSVBJX0RDU19XUklURV9DT05UUk9MX0RJU1BMQVksIDB4MjApOworCS8q IHNldCBhY2wgb2ZmICovCisJczZlNjNqMHgwM19kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIE1J UElfRENTX1dSSVRFX1BPV0VSX1NBVkUsIDB4MDApOworCisJczZlNjNqMHgwM19jYWxsX3dyaXRl X2Z1bmMocmV0LAorCQltaXBpX2RzaV9kY3Nfc2V0X3RlYXJfb24oZHNpLCBNSVBJX0RTSV9EQ1Nf VEVBUl9NT0RFX1ZCTEFOSykpOworCisJczZlNjNqMHgwM19jYWxsX3dyaXRlX2Z1bmMocmV0LCBz NmU2M2oweDAzX2FwcGx5X210cF9rZXkoY3R4LCBmYWxzZSkpOworCisJczZlNjNqMHgwM19jYWxs X3dyaXRlX2Z1bmMocmV0LCBtaXBpX2RzaV9kY3Nfc2V0X2Rpc3BsYXlfb24oZHNpKSk7CisJY3R4 LT5ibF9kZXYtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgZGVmYXVsdF9tb2RlID0g eworCS5jbG9jayA9IDQ2NDksCisJLmhkaXNwbGF5ID0gMzIwLAorCS5oc3luY19zdGFydCA9IDMy MCArIDEsCisJLmhzeW5jX2VuZCA9IDMyMCArIDEgKyAxLAorCS5odG90YWwgPSAzMjAgKyAxICsg MSArIDEsCisJLnZkaXNwbGF5ID0gMzIwLAorCS52c3luY19zdGFydCA9IDMyMCArIDE1MCwKKwku dnN5bmNfZW5kID0gMzIwICsgMTUwICsgMSwKKwkudnRvdGFsID0gMzIwICsgMTUwICsgMSArIDIs CisJLnZyZWZyZXNoID0gMzAsCisJLmZsYWdzID0gMCwKK307CisKK3N0YXRpYyBpbnQgczZlNjNq MHgwM19nZXRfbW9kZXMoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciA9IHBhbmVsLT5jb25uZWN0b3I7CisJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGU7CisKKwltb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKHBhbmVsLT5kcm0s ICZkZWZhdWx0X21vZGUpOworCWlmICghbW9kZSkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBh ZGQgbW9kZSAldXgldXhAJXVcbiIsCisJCQkJZGVmYXVsdF9tb2RlLmhkaXNwbGF5LCBkZWZhdWx0 X21vZGUudmRpc3BsYXksCisJCQkJZGVmYXVsdF9tb2RlLnZyZWZyZXNoKTsKKwkJcmV0dXJuIC1F Tk9NRU07CisJfQorCisJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CisKKwltb2RlLT50eXBlID0g RFJNX01PREVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsKKwlkcm1fbW9k ZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7CisKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5m by53aWR0aF9tbSA9IDI5OworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbSA9IDI5 OworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BhbmVsX2Z1bmNz IHM2ZTYzajB4MDNfZnVuY3MgPSB7CisJLmRpc2FibGUgPSBzNmU2M2oweDAzX2Rpc2FibGUsCisJ LnVucHJlcGFyZSA9IHM2ZTYzajB4MDNfdW5wcmVwYXJlLAorCS5wcmVwYXJlID0gczZlNjNqMHgw M19wcmVwYXJlLAorCS5lbmFibGUgPSBzNmU2M2oweDAzX2VuYWJsZSwKKwkuZ2V0X21vZGVzID0g czZlNjNqMHgwM19nZXRfbW9kZXMsCit9OworCitzdGF0aWMgaW50IHM2ZTYzajB4MDNfcHJvYmUo c3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZk c2ktPmRldjsKKwlzdHJ1Y3QgczZlNjNqMHgwMyAqY3R4OworCWludCByZXQ7CisKKwljdHggPSBk ZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IHM2ZTYzajB4MDMpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIWN0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltaXBpX2RzaV9zZXRfZHJ2ZGF0YShk c2ksIGN0eCk7CisKKwljdHgtPmRldiA9IGRldjsKKworCWRzaS0+bGFuZXMgPSAxOworCWRzaS0+ Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKKwlkc2ktPm1vZGVfZmxhZ3MgPSBNSVBJX0RT SV9NT0RFX0VPVF9QQUNLRVQ7CisKKwljdHgtPnN1cHBsaWVzWzBdLnN1cHBseSA9ICJ2ZGQzIjsK KwljdHgtPnN1cHBsaWVzWzFdLnN1cHBseSA9ICJ2Y2kiOworCXJldCA9IGRldm1fcmVndWxhdG9y X2J1bGtfZ2V0KGRldiwgQVJSQVlfU0laRShjdHgtPnN1cHBsaWVzKSwKKwkJCQkgICAgICBjdHgt PnN1cHBsaWVzKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBn ZXQgcmVndWxhdG9yczogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY3R4LT5y ZXNldF9ncGlvID0gZGV2bV9ncGlvZF9nZXQoZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfTE9XKTsK KwlpZiAoSVNfRVJSKGN0eC0+cmVzZXRfZ3BpbykpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3Qg Z2V0IHJlc2V0LWdwaW86ICVsZFxuIiwKKwkJCQlQVFJfRVJSKGN0eC0+cmVzZXRfZ3BpbykpOwor CQlyZXR1cm4gUFRSX0VSUihjdHgtPnJlc2V0X2dwaW8pOworCX0KKworCWRybV9wYW5lbF9pbml0 KCZjdHgtPnBhbmVsKTsKKwljdHgtPnBhbmVsLmRldiA9IGRldjsKKwljdHgtPnBhbmVsLmZ1bmNz ID0gJnM2ZTYzajB4MDNfZnVuY3M7CisKKwljdHgtPmJsX2RldiA9IGJhY2tsaWdodF9kZXZpY2Vf cmVnaXN0ZXIoInM2ZTYzajB4MDMiLCBkZXYsIGN0eCwKKwkJCQkJCSZzNmU2M2oweDAzX2JsX29w cywgTlVMTCk7CisJaWYgKElTX0VSUihjdHgtPmJsX2RldikpIHsKKwkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0IGRldmljZVxuIik7CisJCXJldHVybiBQVFJfRVJS KGN0eC0+YmxfZGV2KTsKKwl9CisKKwljdHgtPmJsX2Rldi0+cHJvcHMubWF4X2JyaWdodG5lc3Mg PSBNQVhfQlJJR0hUTkVTUzsKKwljdHgtPmJsX2Rldi0+cHJvcHMuYnJpZ2h0bmVzcyA9IERFRkFV TFRfQlJJR0hUTkVTUzsKKwljdHgtPmJsX2Rldi0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19QT1dF UkRPV047CisKKwlyZXQgPSBkcm1fcGFuZWxfYWRkKCZjdHgtPnBhbmVsKTsKKwlpZiAocmV0IDwg MCkKKwkJZ290byB1bnJlZ2lzdGVyX2JhY2tsaWdodDsKKworCXJldCA9IG1pcGlfZHNpX2F0dGFj aChkc2kpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHJlbW92ZV9wYW5lbDsKKworCXJldHVybiBy ZXQ7CisKK3JlbW92ZV9wYW5lbDoKKwlkcm1fcGFuZWxfcmVtb3ZlKCZjdHgtPnBhbmVsKTsKKwor dW5yZWdpc3Rlcl9iYWNrbGlnaHQ6CisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGN0eC0+ YmxfZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgczZlNjNqMHgwM19yZW1v dmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCBzNmU2M2oweDAzICpj dHggPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShkc2kpOworCisJbWlwaV9kc2lfZGV0YWNoKGRzaSk7 CisJZHJtX3BhbmVsX3JlbW92ZSgmY3R4LT5wYW5lbCk7CisKKwliYWNrbGlnaHRfZGV2aWNlX3Vu cmVnaXN0ZXIoY3R4LT5ibF9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIHM2ZTYzajB4MDNfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRp YmxlID0gInNhbXN1bmcsczZlNjNqMHgwMyIgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBzNmU2M2oweDAzX29mX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBtaXBpX2RzaV9k cml2ZXIgczZlNjNqMHgwM19kcml2ZXIgPSB7CisJLnByb2JlID0gczZlNjNqMHgwM19wcm9iZSwK KwkucmVtb3ZlID0gczZlNjNqMHgwM19yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAi cGFuZWxfc2Ftc3VuZ19zNmU2M2oweDAzIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gczZlNjNqMHgw M19vZl9tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9taXBpX2RzaV9kcml2ZXIoczZlNjNqMHgwM19k cml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJJbmtpIERhZSA8aW5raS5kYWVAc2Ftc3VuZy5jb20+ Iik7CitNT0RVTEVfQVVUSE9SKCJIb2VnZXVuIEt3b24gPGhvZWdldW4ua3dvbkBzYW1zdW5nLmNv bT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTUlQSS1EU0kgYmFzZWQgczZlNjNqMHgwMyBBTU9M RUQgTENEIFBhbmVsIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotLSAKMS45 LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1k ZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=