From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Lechner Subject: [PATCH v1 2/2] drm/tinydrm: add driver for ILI9225 panels Date: Tue, 7 Nov 2017 21:52:16 -0600 Message-ID: <1510113136-6788-3-git-send-email-david@lechnology.com> References: <1510113136-6788-1-git-send-email-david@lechnology.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1510113136-6788-1-git-send-email-david@lechnology.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 , David Lechner , Rob Herring , linux-kernel@vger.kernel.org List-Id: devicetree@vger.kernel.org VGhpcyBhZGRzIGEgbmV3IGRyaXZlciBmb3IgZGlzcGxheSBwYW5lbHMgYmFzZWQgb24gdGhlIEls aXRlayBJTEk5MjI1CmNvbnRyb2xsZXIuCgpUaGlzIHdhcyBkZXZlbG9wZWQgZm9yIGEgbm8tbmFt ZSBwYW5lbCB3aXRoIGEgcmVkIFBDQiB0aGF0IGlzIGNvbW1vbmx5Cm1hcmtldGVkIGZvciBBcmR1 aW5vLiBTZWUgPGh0dHBzOi8vZ2l0aHViLmNvbS9Oa2F3dS9URlRfMjJfSUxJOTIyNT4uCgpJIHJl YWxseSBkaWQgdHJ5IHZlcnkgaGFyZCB0byBmaW5kIGEgbWFrZSBhbmQgbW9kZWwgZm9yIHRoaXMg cGFuZWwsIGJ1dAp0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgb25lLCBzbyB0aGUgYmVzdCBJIGNh biBkbyBpcyBvZmZlciB0aGUgcGljdHVyZQppbiB0aGUgbGluayBhYm92ZSBmb3IgaWRlbnRpZmlj YXRpb24uCgpTaWduZWQtb2ZmLWJ5OiBEYXZpZCBMZWNobmVyIDxkYXZpZEBsZWNobm9sb2d5LmNv bT4KLS0tCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKwogZHJpdmVy cy9ncHUvZHJtL3Rpbnlkcm0vS2NvbmZpZyAgIHwgIDEwICsKIGRyaXZlcnMvZ3B1L2RybS90aW55 ZHJtL01ha2VmaWxlICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9pbGk5MjI1LmMg fCA1NDcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hh bmdlZCwgNTY0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vdGlueWRybS9pbGk5MjI1LmMKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlO RVJTCmluZGV4IDBkNzdmMjIuLjcyNDA0ZjMgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBi L01BSU5UQUlORVJTCkBAIC00MzcyLDYgKzQzNzIsMTIgQEAgVDoJZ2l0IGdpdDovL2Fub25naXQu ZnJlZWRlc2t0b3Aub3JnL2RybS9kcm0tbWlzYwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9n cHUvZHJtL3R2ZTIwMC8KIAorRFJNIERSSVZFUiBGT1IgSUxJVEVLIElMSTkyMjUgUEFORUxTCitN OglEYXZpZCBMZWNobmVyIDxkYXZpZEBsZWNobm9sb2d5LmNvbT4KK1M6CU1haW50YWluZWQKK0Y6 CWRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2lsaTkyMjUuYworRjoJRG9jdW1lbnRhdGlvbi9kZXZp Y2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvaWxpOTIyNS50eHQKKwogRFJNIERSSVZFUiBGT1IgSU5U RUwgSTgxMCBWSURFTyBDQVJEUwogUzoJT3JwaGFuIC8gT2Jzb2xldGUKIEY6CWRyaXZlcnMvZ3B1 L2RybS9pODEwLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vS2NvbmZpZyBi L2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL0tjb25maWcKaW5kZXggMmU3OTBlNy4uOTBjNWJkNSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vS2NvbmZpZworKysgYi9kcml2ZXJz L2dwdS9kcm0vdGlueWRybS9LY29uZmlnCkBAIC0xMiw2ICsxMiwxNiBAQCBtZW51Y29uZmlnIERS TV9USU5ZRFJNCiBjb25maWcgVElOWURSTV9NSVBJX0RCSQogCXRyaXN0YXRlCiAKK2NvbmZpZyBU SU5ZRFJNX0lMSTkyMjUKKwl0cmlzdGF0ZSAiRFJNIHN1cHBvcnQgZm9yIElMSTkyMjUgZGlzcGxh eSBwYW5lbHMiCisJZGVwZW5kcyBvbiBEUk1fVElOWURSTSAmJiBTUEkKKwlzZWxlY3QgVElOWURS TV9NSVBJX0RCSQorCWhlbHAKKwkgIERSTSBkcml2ZXIgZm9yIHRoZSBmb2xsb3dpbmcgSWxpdGVr IElMSTkyMjUgcGFuZWxzOgorCSAgKiBOby1uYW1lIDIuMiIgY29sb3Igc2NyZWVuIG1vZHVsZQor CisJICBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaWxpOTIyNS4K KwogY29uZmlnIFRJTllEUk1fTUkwMjgzUVQKIAl0cmlzdGF0ZSAiRFJNIHN1cHBvcnQgZm9yIE1J MDI4M1FUIgogCWRlcGVuZHMgb24gRFJNX1RJTllEUk0gJiYgU1BJCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vdGlueWRybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL01h a2VmaWxlCmluZGV4IDBjMTg0YmQuLjhhZWVlNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS90aW55ZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL01ha2VmaWxl CkBAIC00LDYgKzQsNyBAQCBvYmotJChDT05GSUdfRFJNX1RJTllEUk0pCQkrPSBjb3JlLwogb2Jq LSQoQ09ORklHX1RJTllEUk1fTUlQSV9EQkkpCQkrPSBtaXBpLWRiaS5vCiAKICMgRGlzcGxheXMK K29iai0kKENPTkZJR19USU5ZRFJNX0lMSTkyMjUpCQkrPSBpbGk5MjI1Lm8KIG9iai0kKENPTkZJ R19USU5ZRFJNX01JMDI4M1FUKQkJKz0gbWkwMjgzcXQubwogb2JqLSQoQ09ORklHX1RJTllEUk1f UkVQQVBFUikJCSs9IHJlcGFwZXIubwogb2JqLSQoQ09ORklHX1RJTllEUk1fU1Q3NTg2KQkJKz0g c3Q3NTg2Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2lsaTkyMjUuYyBi L2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2lsaTkyMjUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi4wN2UxYjhiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L3Rpbnlkcm0vaWxpOTIyNS5jCkBAIC0wLDAgKzEsNTQ3IEBACisvKgorICogRFJNIGRyaXZlciBm b3IgSWxpdGVrIElMSTkyMjUgcGFuZWxzCisgKgorICogQ29weXJpZ2h0IDIwMTcgRGF2aWQgTGVj aG5lciA8ZGF2aWRAbGVjaG5vbG9neS5jb20+CisgKgorICogTG90cyBvZiBjb2RlIGNvcGllZCBm cm9tIG1pcGktZGJpLmMKKyAqIENvcHlyaWdodCAyMDE2IE5vcmFsZiBUcsO4bm5lcworICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+ CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3Vt ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9wZXJ0 eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rp c3BsYXkuaD4KKworI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBlci5oPgor I2luY2x1ZGUgPGRybS90aW55ZHJtL21pcGktZGJpLmg+CisjaW5jbHVkZSA8ZHJtL3Rpbnlkcm0v dGlueWRybS1oZWxwZXJzLmg+CisKKyNkZWZpbmUgSUxJOTIyNV9EUklWRVJfUkVBRF9DT0RFCTB4 MDAKKyNkZWZpbmUgSUxJOTIyNV9EUklWRVJfT1VUUFVUX0NPTlRST0wJMHgwMQorI2RlZmluZSBJ TEk5MjI1X0xDRF9BQ19EUklWSU5HX0NPTlRST0wJMHgwMgorI2RlZmluZSBJTEk5MjI1X0VOVFJZ X01PREUJCTB4MDMKKyNkZWZpbmUgSUxJOTIyNV9ESVNQTEFZX0NPTlRST0xfMQkweDA3CisjZGVm aW5lIElMSTkyMjVfQkxBTktfUEVSSU9EX0NPTlRST0xfMQkweDA4CisjZGVmaW5lIElMSTkyMjVf RlJBTUVfQ1lDTEVfQ09OVFJPTAkweDBiCisjZGVmaW5lIElMSTkyMjVfSU5URVJGQUNFX0NPTlRS T0wJMHgwYworI2RlZmluZSBJTEk5MjI1X09TQ0lMTEFUSU9OX0NPTlRST0wJMHgwZgorI2RlZmlu ZSBJTEk5MjI1X1BPV0VSX0NPTlRST0xfMQkJMHgxMAorI2RlZmluZSBJTEk5MjI1X1BPV0VSX0NP TlRST0xfMgkJMHgxMQorI2RlZmluZSBJTEk5MjI1X1BPV0VSX0NPTlRST0xfMwkJMHgxMgorI2Rl ZmluZSBJTEk5MjI1X1BPV0VSX0NPTlRST0xfNAkJMHgxMworI2RlZmluZSBJTEk5MjI1X1BPV0VS X0NPTlRST0xfNQkJMHgxNAorI2RlZmluZSBJTEk5MjI1X1ZDSV9SRUNZQ0xJTkcJCTB4MTUKKyNk ZWZpbmUgSUxJOTIyNV9SQU1fQUREUkVTU19TRVRfMQkweDIwCisjZGVmaW5lIElMSTkyMjVfUkFN X0FERFJFU1NfU0VUXzIJMHgyMQorI2RlZmluZSBJTEk5MjI1X1dSSVRFX0RBVEFfVE9fR1JBTQkw eDIyCisjZGVmaW5lIElMSTkyMjVfU09GVFdBUkVfUkVTRVQJCTB4MjgKKyNkZWZpbmUgSUxJOTIy NV9HQVRFX1NDQU5fQ09OVFJPTAkweDMwCisjZGVmaW5lIElMSTkyMjVfVkVSVElDQUxfU0NST0xM XzEJMHgzMQorI2RlZmluZSBJTEk5MjI1X1ZFUlRJQ0FMX1NDUk9MTF8yCTB4MzIKKyNkZWZpbmUg SUxJOTIyNV9WRVJUSUNBTF9TQ1JPTExfMwkweDMzCisjZGVmaW5lIElMSTkyMjVfUEFSVElBTF9E UklWSU5HX1BPU18xCTB4MzQKKyNkZWZpbmUgSUxJOTIyNV9QQVJUSUFMX0RSSVZJTkdfUE9TXzIJ MHgzNQorI2RlZmluZSBJTEk5MjI1X0hPUklaX1dJTkRPV19BRERSXzEJMHgzNgorI2RlZmluZSBJ TEk5MjI1X0hPUklaX1dJTkRPV19BRERSXzIJMHgzNworI2RlZmluZSBJTEk5MjI1X1ZFUlRfV0lO RE9XX0FERFJfMQkweDM4CisjZGVmaW5lIElMSTkyMjVfVkVSVF9XSU5ET1dfQUREUl8yCTB4MzkK KyNkZWZpbmUgSUxJOTIyNV9HQU1NQV9DT05UUk9MXzEJCTB4NTAKKyNkZWZpbmUgSUxJOTIyNV9H QU1NQV9DT05UUk9MXzIJCTB4NTEKKyNkZWZpbmUgSUxJOTIyNV9HQU1NQV9DT05UUk9MXzMJCTB4 NTIKKyNkZWZpbmUgSUxJOTIyNV9HQU1NQV9DT05UUk9MXzQJCTB4NTMKKyNkZWZpbmUgSUxJOTIy NV9HQU1NQV9DT05UUk9MXzUJCTB4NTQKKyNkZWZpbmUgSUxJOTIyNV9HQU1NQV9DT05UUk9MXzYJ CTB4NTUKKyNkZWZpbmUgSUxJOTIyNV9HQU1NQV9DT05UUk9MXzcJCTB4NTYKKyNkZWZpbmUgSUxJ OTIyNV9HQU1NQV9DT05UUk9MXzgJCTB4NTcKKyNkZWZpbmUgSUxJOTIyNV9HQU1NQV9DT05UUk9M XzkJCTB4NTgKKyNkZWZpbmUgSUxJOTIyNV9HQU1NQV9DT05UUk9MXzEwCTB4NTkKKworc3RhdGlj IGludCBpbGk5MjI1X2J1Zl9jb3B5KHZvaWQgKmRzdCwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq ZmIsCisJCQkgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXAsIGJvb2wgc3dhcCkKK3sKKwlz dHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpjbWFfb2JqID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29i aihmYiwgMCk7CisJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqaW1wb3J0X2F0dGFjaCA9IGNt YV9vYmotPmJhc2UuaW1wb3J0X2F0dGFjaDsKKwlzdHJ1Y3QgZHJtX2Zvcm1hdF9uYW1lX2J1ZiBm b3JtYXRfbmFtZTsKKwl2b2lkICpzcmMgPSBjbWFfb2JqLT52YWRkcjsKKwlpbnQgcmV0ID0gMDsK KworCWlmIChpbXBvcnRfYXR0YWNoKSB7CisJCXJldCA9IGRtYV9idWZfYmVnaW5fY3B1X2FjY2Vz cyhpbXBvcnRfYXR0YWNoLT5kbWFidWYsCisJCQkJCSAgICAgICBETUFfRlJPTV9ERVZJQ0UpOwor CQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlzd2l0Y2ggKGZiLT5mb3JtYXQtPmZv cm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJCWlmIChzd2FwKQorCQkJdGlueWRy bV9zd2FiMTYoZHN0LCBzcmMsIGZiLCBjbGlwKTsKKwkJZWxzZQorCQkJdGlueWRybV9tZW1jcHko ZHN0LCBzcmMsIGZiLCBjbGlwKTsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4 OgorCQl0aW55ZHJtX3hyZ2I4ODg4X3RvX3JnYjU2NShkc3QsIHNyYywgZmIsIGNsaXAsIHN3YXAp OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyX29uY2UoZmItPmRldi0+ZGV2LCAiRm9y bWF0IGlzIG5vdCBzdXBwb3J0ZWQ6ICVzXG4iLAorCQkJICAgICBkcm1fZ2V0X2Zvcm1hdF9uYW1l KGZiLT5mb3JtYXQtPmZvcm1hdCwKKwkJCQkJCSAmZm9ybWF0X25hbWUpKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJaWYgKGltcG9ydF9hdHRhY2gpCisJCXJldCA9IGRtYV9idWZfZW5kX2Nw dV9hY2Nlc3MoaW1wb3J0X2F0dGFjaC0+ZG1hYnVmLAorCQkJCQkgICAgIERNQV9GUk9NX0RFVklD RSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpbGk5MjI1X2ZiX2RpcnR5KHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 LCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkgICAgdW5zaWduZWQgaW50IGNvbG9yLCBzdHJ1Y3Qg ZHJtX2NsaXBfcmVjdCAqY2xpcHMsCisJCQkgICAgdW5zaWduZWQgaW50IG51bV9jbGlwcykKK3sK KwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpjbWFfb2JqID0gZHJtX2ZiX2NtYV9nZXRfZ2Vt X29iaihmYiwgMCk7CisJc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2ID0gZmItPmRldi0+ZGV2 X3ByaXZhdGU7CisJc3RydWN0IG1pcGlfZGJpICptaXBpID0gbWlwaV9kYmlfZnJvbV90aW55ZHJt KHRkZXYpOworCWJvb2wgc3dhcCA9IG1pcGktPnN3YXBfYnl0ZXM7CisJc3RydWN0IGRybV9jbGlw X3JlY3QgY2xpcDsKKwl1OCB4X3N0YXJ0LCB5X3N0YXJ0OworCXU4IHgxLCB4MiwgeTEsIHkyOwor CWludCByZXQgPSAwOworCWJvb2wgZnVsbDsKKwl2b2lkICp0cjsKKworCW11dGV4X2xvY2soJnRk ZXYtPmRpcnR5X2xvY2spOworCisJaWYgKCFtaXBpLT5lbmFibGVkKQorCQlnb3RvIG91dF91bmxv Y2s7CisKKwkvKiBmYmRldiBjYW4gZmx1c2ggZXZlbiB3aGVuIHdlJ3JlIG5vdCBpbnRlcmVzdGVk ICovCisJaWYgKHRkZXYtPnBpcGUucGxhbmUuZmIgIT0gZmIpCisJCWdvdG8gb3V0X3VubG9jazsK KworCWZ1bGwgPSB0aW55ZHJtX21lcmdlX2NsaXBzKCZjbGlwLCBjbGlwcywgbnVtX2NsaXBzLCBm bGFncywKKwkJCQkgICBmYi0+d2lkdGgsIGZiLT5oZWlnaHQpOworCisJRFJNX0RFQlVHKCJGbHVz aGluZyBbRkI6JWRdIHgxPSV1LCB4Mj0ldSwgeTE9JXUsIHkyPSV1XG4iLCBmYi0+YmFzZS5pZCwK KwkJICBjbGlwLngxLCBjbGlwLngyLCBjbGlwLnkxLCBjbGlwLnkyKTsKKworCWlmICghbWlwaS0+ ZGMgfHwgIWZ1bGwgfHwgc3dhcCB8fAorCSAgICBmYi0+Zm9ybWF0LT5mb3JtYXQgPT0gRFJNX0ZP Uk1BVF9YUkdCODg4OCkgeworCQl0ciA9IG1pcGktPnR4X2J1ZjsKKwkJcmV0ID0gaWxpOTIyNV9i dWZfY29weShtaXBpLT50eF9idWYsIGZiLCAmY2xpcCwgc3dhcCk7CisJCWlmIChyZXQpCisJCQln b3RvIG91dF91bmxvY2s7CisJfSBlbHNlIHsKKwkJdHIgPSBjbWFfb2JqLT52YWRkcjsKKwl9CisK Kwlzd2l0Y2ggKG1pcGktPnJvdGF0aW9uKSB7CisJZGVmYXVsdDoKKwkJeDEgPSBjbGlwLngxOwor CQl4MiA9IGNsaXAueDIgLSAxOworCQl5MSA9IGNsaXAueTE7CisJCXkyID0gY2xpcC55MiAtIDE7 CisJCXhfc3RhcnQgPSB4MTsKKwkJeV9zdGFydCA9IHkxOworCQlicmVhazsKKwljYXNlIDkwOgor CQl4MSA9IGNsaXAueTE7CisJCXgyID0gY2xpcC55MiAtIDE7CisJCXkxID0gZmItPndpZHRoIC0g Y2xpcC54MjsKKwkJeTIgPSBmYi0+d2lkdGggLSBjbGlwLngxIC0gMTsKKwkJeF9zdGFydCA9IHgx OworCQl5X3N0YXJ0ID0geTI7CisJCWJyZWFrOworCWNhc2UgMTgwOgorCQl4MSA9IGZiLT53aWR0 aCAtIGNsaXAueDI7CisJCXgyID0gZmItPndpZHRoIC0gY2xpcC54MSAtIDE7CisJCXkxID0gZmIt PmhlaWdodCAtIGNsaXAueTI7CisJCXkyID0gZmItPmhlaWdodCAtIGNsaXAueTEgLSAxOworCQl4 X3N0YXJ0ID0geDI7CisJCXlfc3RhcnQgPSB5MjsKKwkJYnJlYWs7CisJY2FzZSAyNzA6CisJCXgx ID0gZmItPmhlaWdodCAtIGNsaXAueTI7CisJCXgyID0gZmItPmhlaWdodCAtIGNsaXAueTEgLSAx OworCQl5MSA9IGNsaXAueDE7CisJCXkyID0gY2xpcC54MiAtIDE7CisJCXhfc3RhcnQgPSB4MjsK KwkJeV9zdGFydCA9IHkxOworCQlicmVhazsKKwl9CisKKwltaXBpX2RiaV9jb21tYW5kKG1pcGks IElMSTkyMjVfSE9SSVpfV0lORE9XX0FERFJfMSwgMHgwMCwgeDIpOworCW1pcGlfZGJpX2NvbW1h bmQobWlwaSwgSUxJOTIyNV9IT1JJWl9XSU5ET1dfQUREUl8yLCAweDAwLCB4MSk7CisJbWlwaV9k YmlfY29tbWFuZChtaXBpLCBJTEk5MjI1X1ZFUlRfV0lORE9XX0FERFJfMSwgMHgwMCwgeTIpOwor CW1pcGlfZGJpX2NvbW1hbmQobWlwaSwgSUxJOTIyNV9WRVJUX1dJTkRPV19BRERSXzIsIDB4MDAs IHkxKTsKKworCW1pcGlfZGJpX2NvbW1hbmQobWlwaSwgSUxJOTIyNV9SQU1fQUREUkVTU19TRVRf MSwgMHgwMCwgeF9zdGFydCk7CisJbWlwaV9kYmlfY29tbWFuZChtaXBpLCBJTEk5MjI1X1JBTV9B RERSRVNTX1NFVF8yLCAweDAwLCB5X3N0YXJ0KTsKKworCXJldCA9IG1pcGlfZGJpX2NvbW1hbmRf YnVmKG1pcGksIElMSTkyMjVfV1JJVEVfREFUQV9UT19HUkFNLCB0ciwKKwkJCQkoY2xpcC54MiAt IGNsaXAueDEpICogKGNsaXAueTIgLSBjbGlwLnkxKSAqIDIpOworCitvdXRfdW5sb2NrOgorCW11 dGV4X3VubG9jaygmdGRldi0+ZGlydHlfbG9jayk7CisKKwlpZiAocmV0KQorCQlkZXZfZXJyX29u Y2UoZmItPmRldi0+ZGV2LCAiRmFpbGVkIHRvIHVwZGF0ZSBkaXNwbGF5ICVkXG4iLAorCQkJICAg ICByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZnJh bWVidWZmZXJfZnVuY3MgaWxpOTIyNV9mYl9mdW5jcyA9IHsKKwkuZGVzdHJveQk9IGRybV9nZW1f ZmJfZGVzdHJveSwKKwkuY3JlYXRlX2hhbmRsZQk9IGRybV9nZW1fZmJfY3JlYXRlX2hhbmRsZSwK KwkuZGlydHkJCT0gaWxpOTIyNV9mYl9kaXJ0eSwKK307CisKK3N0YXRpYyB2b2lkIGlsaTkyMjVf cGlwZV9lbmFibGUoc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlICpwaXBlLAorCQkJCXN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgdGlueWRybV9kZXZp Y2UgKnRkZXYgPSBwaXBlX3RvX3Rpbnlkcm0ocGlwZSk7CisJc3RydWN0IG1pcGlfZGJpICptaXBp ID0gbWlwaV9kYmlfZnJvbV90aW55ZHJtKHRkZXYpOworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiID0gcGlwZS0+cGxhbmUuZmI7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdGRldi0+ZHJtLT5k ZXY7CisJaW50IHJldDsKKwl1OCBhbV9pZDsKKworCURSTV9ERUJVR19LTVMoIlxuIik7CisKKwlt aXBpX2RiaV9od19yZXNldChtaXBpKTsKKworCS8qCisJICogVGhlcmUgZG9uJ3Qgc2VlbSB0byBi ZSB0d28gZXhhbXBsZSBpbml0IHNlcXVlbmNlcyB0aGF0IG1hdGNoLCBzbworCSAqIHVzaW5nIHRo ZSBvbmUgZnJvbSB0aGUgcG9wdWxhciBBcmR1aW5vIGxpYnJhcnkgZm9yIHRoaXMgZGlzcGxheS4K KwkgKiBodHRwczovL2dpdGh1Yi5jb20vTmthd3UvVEZUXzIyX0lMSTkyMjUvYmxvYi9tYXN0ZXIv c3JjL1RGVF8yMl9JTEk5MjI1LmNwcAorCSAqLworCisJcmV0ID0gbWlwaV9kYmlfY29tbWFuZCht aXBpLCBJTEk5MjI1X1BPV0VSX0NPTlRST0xfMSwgMHgwMCwgMHgwMCk7CisJaWYgKHJldCkgewor CQlEUk1fREVWX0VSUk9SKGRldiwgIkVycm9yIHNlbmRpbmcgY29tbWFuZCAlZFxuIiwgcmV0KTsK KwkJcmV0dXJuOworCX0KKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkyMjVfUE9XRVJfQ09O VFJPTF8yLCAweDAwLCAweDAwKTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkyMjVfUE9X RVJfQ09OVFJPTF8zLCAweDAwLCAweDAwKTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTky MjVfUE9XRVJfQ09OVFJPTF80LCAweDAwLCAweDAwKTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGks IElMSTkyMjVfUE9XRVJfQ09OVFJPTF81LCAweDAwLCAweDAwKTsKKworCW1zbGVlcCg0MCk7CisK KwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkyMjVfUE9XRVJfQ09OVFJPTF8yLCAweDAwLCAw eDE4KTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkyMjVfUE9XRVJfQ09OVFJPTF8zLCAw eDYxLCAweDIxKTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkyMjVfUE9XRVJfQ09OVFJP TF80LCAweDAwLCAweDZmKTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkyMjVfUE9XRVJf Q09OVFJPTF81LCAweDQ5LCAweDVmKTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkyMjVf UE9XRVJfQ09OVFJPTF8xLCAweDA4LCAweDAwKTsKKworCW1zbGVlcCgxMCk7CisKKwltaXBpX2Ri aV9jb21tYW5kKG1pcGksIElMSTkyMjVfUE9XRVJfQ09OVFJPTF8yLCAweDEwLCAweDNiKTsKKwor CW1zbGVlcCg1MCk7CisKKwlzd2l0Y2ggKG1pcGktPnJvdGF0aW9uKSB7CisJZGVmYXVsdDoKKwkJ YW1faWQgPSAweDMwOworCQlicmVhazsKKwljYXNlIDkwOgorCQlhbV9pZCA9IDB4MTg7CisJCWJy ZWFrOworCWNhc2UgMTgwOgorCQlhbV9pZCA9IDB4MDA7CisJCWJyZWFrOworCWNhc2UgMjcwOgor CQlhbV9pZCA9IDB4Mjg7CisJCWJyZWFrOworCX0KKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElM STkyMjVfRFJJVkVSX09VVFBVVF9DT05UUk9MLCAweDAxLCAweDFjKTsKKwltaXBpX2RiaV9jb21t YW5kKG1pcGksIElMSTkyMjVfTENEX0FDX0RSSVZJTkdfQ09OVFJPTCwgMHgwMSwgMHgwMCk7CisJ bWlwaV9kYmlfY29tbWFuZChtaXBpLCBJTEk5MjI1X0VOVFJZX01PREUsIDB4MTAsIGFtX2lkKTsK KwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkyMjVfRElTUExBWV9DT05UUk9MXzEsIDB4MDAs IDB4MDApOworCW1pcGlfZGJpX2NvbW1hbmQobWlwaSwgSUxJOTIyNV9CTEFOS19QRVJJT0RfQ09O VFJPTF8xLCAweDA4LCAweDA4KTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkyMjVfRlJB TUVfQ1lDTEVfQ09OVFJPTCwgMHgxMSwgMHgwMCk7CisJbWlwaV9kYmlfY29tbWFuZChtaXBpLCBJ TEk5MjI1X0lOVEVSRkFDRV9DT05UUk9MLCAweDAwLCAweDAwKTsKKwltaXBpX2RiaV9jb21tYW5k KG1pcGksIElMSTkyMjVfT1NDSUxMQVRJT05fQ09OVFJPTCwgMHgwZCwgMHgwMSk7CisJbWlwaV9k YmlfY29tbWFuZChtaXBpLCBJTEk5MjI1X1ZDSV9SRUNZQ0xJTkcsIDB4MDAsIDB4MjApOworCW1p cGlfZGJpX2NvbW1hbmQobWlwaSwgSUxJOTIyNV9SQU1fQUREUkVTU19TRVRfMSwgMHgwMCwgMHgw MCk7CisJbWlwaV9kYmlfY29tbWFuZChtaXBpLCBJTEk5MjI1X1JBTV9BRERSRVNTX1NFVF8yLCAw eDAwLCAweDAwKTsKKworCW1pcGlfZGJpX2NvbW1hbmQobWlwaSwgSUxJOTIyNV9HQVRFX1NDQU5f Q09OVFJPTCwgMHgwMCwgMHgwMCk7CisJbWlwaV9kYmlfY29tbWFuZChtaXBpLCBJTEk5MjI1X1ZF UlRJQ0FMX1NDUk9MTF8xLCAweDAwLCAweGRiKTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElM STkyMjVfVkVSVElDQUxfU0NST0xMXzIsIDB4MDAsIDB4MDApOworCW1pcGlfZGJpX2NvbW1hbmQo bWlwaSwgSUxJOTIyNV9WRVJUSUNBTF9TQ1JPTExfMywgMHgwMCwgMHgwMCk7CisJbWlwaV9kYmlf Y29tbWFuZChtaXBpLCBJTEk5MjI1X1BBUlRJQUxfRFJJVklOR19QT1NfMSwgMHgwMCwgMHhkYik7 CisJbWlwaV9kYmlfY29tbWFuZChtaXBpLCBJTEk5MjI1X1BBUlRJQUxfRFJJVklOR19QT1NfMiwg MHgwMCwgMHgwMCk7CisKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkyMjVfR0FNTUFfQ09O VFJPTF8xLCAweDAwLCAweDAwKTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkyMjVfR0FN TUFfQ09OVFJPTF8yLCAweDA4LCAweDA4KTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTky MjVfR0FNTUFfQ09OVFJPTF8zLCAweDA4LCAweDBhKTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGks IElMSTkyMjVfR0FNTUFfQ09OVFJPTF80LCAweDAwLCAweDBhKTsKKwltaXBpX2RiaV9jb21tYW5k KG1pcGksIElMSTkyMjVfR0FNTUFfQ09OVFJPTF81LCAweDBhLCAweDA4KTsKKwltaXBpX2RiaV9j b21tYW5kKG1pcGksIElMSTkyMjVfR0FNTUFfQ09OVFJPTF82LCAweDA4LCAweDA4KTsKKwltaXBp X2RiaV9jb21tYW5kKG1pcGksIElMSTkyMjVfR0FNTUFfQ09OVFJPTF83LCAweDAwLCAweDAwKTsK KwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkyMjVfR0FNTUFfQ09OVFJPTF84LCAweDBhLCAw eDAwKTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkyMjVfR0FNTUFfQ09OVFJPTF85LCAw eDA3LCAweDEwKTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkyMjVfR0FNTUFfQ09OVFJP TF8xMCwgMHgwNywgMHgxMCk7CisKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkyMjVfRElT UExBWV9DT05UUk9MXzEsIDB4MDAsIDB4MTIpOworCisJbXNsZWVwKDUwKTsKKworCW1pcGlfZGJp X2NvbW1hbmQobWlwaSwgSUxJOTIyNV9ESVNQTEFZX0NPTlRST0xfMSwgMHgxMCwgMHgxNyk7CisK KwltaXBpLT5lbmFibGVkID0gdHJ1ZTsKKworCWlmIChmYikKKwkJZmItPmZ1bmNzLT5kaXJ0eShm YiwgTlVMTCwgMCwgMCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGlsaTkyMjVfcGlwZV9k aXNhYmxlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSkKK3sKKwlzdHJ1Y3Qg dGlueWRybV9kZXZpY2UgKnRkZXYgPSBwaXBlX3RvX3Rpbnlkcm0ocGlwZSk7CisJc3RydWN0IG1p cGlfZGJpICptaXBpID0gbWlwaV9kYmlfZnJvbV90aW55ZHJtKHRkZXYpOworCisJRFJNX0RFQlVH X0tNUygiXG4iKTsKKworCWlmICghbWlwaS0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJbWlwaV9k YmlfY29tbWFuZChtaXBpLCBJTEk5MjI1X0RJU1BMQVlfQ09OVFJPTF8xLCAweDAwLCAweDAwKTsK Kwltc2xlZXAoNTApOworCW1pcGlfZGJpX2NvbW1hbmQobWlwaSwgSUxJOTIyNV9QT1dFUl9DT05U Uk9MXzIsIDB4MDAsIDB4MDcpOworCW1zbGVlcCg1MCk7CisJbWlwaV9kYmlfY29tbWFuZChtaXBp LCBJTEk5MjI1X1BPV0VSX0NPTlRST0xfMSwgMHgwYSwgMHgwMik7CisKKwltaXBpLT5lbmFibGVk ID0gZmFsc2U7Cit9CisKK3N0YXRpYyB1MzIgaWxpOTIyNV9zcGlfY21kX21heF9zcGVlZChzdHJ1 Y3Qgc3BpX2RldmljZSAqc3BpLCBzaXplX3QgbGVuKQoreworCWlmIChsZW4gPiA2NCkKKwkJcmV0 dXJuIDA7IC8qIHVzZSBkZWZhdWx0ICovCisKKwlyZXR1cm4gbWluX3QodTMyLCAxMDAwMDAwMCwg c3BpLT5tYXhfc3BlZWRfaHopOworfQorCitzdGF0aWMgaW50IGlsaTkyMjVfY29tbWFuZChzdHJ1 Y3QgbWlwaV9kYmkgKm1pcGksIHU4IGNtZCwgdTggKnBhciwgc2l6ZV90IG51bSkKK3sKKwlzdHJ1 Y3Qgc3BpX2RldmljZSAqc3BpID0gbWlwaS0+c3BpOworCXVuc2lnbmVkIGludCBicHcgPSA4Owor CXUzMiBzcGVlZF9oejsKKwlpbnQgcmV0OworCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG1p cGktPmRjLCAwKTsKKwlzcGVlZF9oeiA9IGlsaTkyMjVfc3BpX2NtZF9tYXhfc3BlZWQoc3BpLCAx KTsKKwlyZXQgPSB0aW55ZHJtX3NwaV90cmFuc2ZlcihzcGksIHNwZWVkX2h6LCBOVUxMLCA4LCAm Y21kLCAxKTsKKwlpZiAocmV0IHx8ICFudW0pCisJCXJldHVybiByZXQ7CisKKwlpZiAoY21kID09 IElMSTkyMjVfV1JJVEVfREFUQV9UT19HUkFNICYmICFtaXBpLT5zd2FwX2J5dGVzKQorCQlicHcg PSAxNjsKKworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChtaXBpLT5kYywgMSk7CisJc3BlZWRf aHogPSBpbGk5MjI1X3NwaV9jbWRfbWF4X3NwZWVkKHNwaSwgbnVtKTsKKworCXJldHVybiB0aW55 ZHJtX3NwaV90cmFuc2ZlcihzcGksIHNwZWVkX2h6LCBOVUxMLCBicHcsIHBhciwgbnVtKTsKK30K Kworc3RhdGljIGludCBpbGk5MjI1X3NwaV9pbml0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0 cnVjdCBtaXBpX2RiaSAqbWlwaSwKKwkJCSAgICBzdHJ1Y3QgZ3Bpb19kZXNjICpkYykKK3sKKwlz aXplX3QgdHhfc2l6ZSA9IHRpbnlkcm1fc3BpX21heF90cmFuc2Zlcl9zaXplKHNwaSwgMCk7CisJ c3RydWN0IGRldmljZSAqZGV2ID0gJnNwaS0+ZGV2OworCWludCByZXQ7CisKKwlpZiAodHhfc2l6 ZSA8IDE2KSB7CisJCURSTV9FUlJPUigiU1BJIHRyYW5zbWl0IGJ1ZmZlciB0b28gc21hbGw6ICV6 dVxuIiwgdHhfc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogRXZlbiB0 aG91Z2ggaXQncyBub3QgdGhlIFNQSSBkZXZpY2UgdGhhdCBkb2VzIERNQSAodGhlIG1hc3RlciBk b2VzKSwKKwkgKiB0aGUgZG1hIG1hc2sgaXMgbmVjZXNzYXJ5IGZvciB0aGUgZG1hX2FsbG9jX3dj KCkgaW4KKwkgKiBkcm1fZ2VtX2NtYV9jcmVhdGUoKS4gVGhlIGRtYV9hZGRyIHJldHVybmVkIHdp bGwgYmUgYSBwaHlzaWNhbAorCSAqIGFkZHJlc3Mgd2hpY2ggbWlnaHQgYmUgZGlmZmVyZW50IGZy b20gdGhlIGJ1cyBhZGRyZXNzLCBidXQgdGhpcyBpcworCSAqIG5vdCBhIHByb2JsZW0gc2luY2Ug dGhlIGFkZHJlc3Mgd2lsbCBub3QgYmUgdXNlZC4KKwkgKiBUaGUgdmlydHVhbCBhZGRyZXNzIGlz IHVzZWQgaW4gdGhlIHRyYW5zZmVyIGFuZCB0aGUgU1BJIGNvcmUKKwkgKiByZS1tYXBzIGl0IG9u IHRoZSBTUEkgbWFzdGVyIGRldmljZSB1c2luZyB0aGUgRE1BIHN0cmVhbWluZyBBUEkKKwkgKiAo c3BpX21hcF9idWYoKSkuCisJICovCisJaWYgKCFkZXYtPmNvaGVyZW50X2RtYV9tYXNrKSB7CisJ CXJldCA9IGRtYV9jb2VyY2VfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soMzIp KTsKKwkJaWYgKHJldCkgeworCQkJZGV2X3dhcm4oZGV2LCAiRmFpbGVkIHRvIHNldCBkbWEgbWFz ayAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwltaXBpLT5zcGkgPSBz cGk7CisKKwltaXBpLT5jb21tYW5kID0gaWxpOTIyNV9jb21tYW5kOworCW1pcGktPmRjID0gZGM7 CisJaWYgKHRpbnlkcm1fbWFjaGluZV9saXR0bGVfZW5kaWFuKCkgJiYKKwkgICAgIXRpbnlkcm1f c3BpX2Jwd19zdXBwb3J0ZWQoc3BpLCAxNikpCisJCW1pcGktPnN3YXBfYnl0ZXMgPSB0cnVlOwor CisJRFJNX0RFQlVHX0RSSVZFUigiU1BJIHNwZWVkOiAldU1IelxuIiwgc3BpLT5tYXhfc3BlZWRf aHogLyAxMDAwMDAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgdTMyIGlsaTky MjVfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfUkdCNTY1LAorCURSTV9GT1JNQVRfWFJHQjg4 ODgsCit9OworCitzdGF0aWMgaW50IGlsaTkyMjVfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBtaXBpX2RiaSAqbWlwaSwKKwkJCWNvbnN0IHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlf cGlwZV9mdW5jcyAqcGlwZV9mdW5jcywKKwkJCXN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIsCisJ CQljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCXVuc2lnbmVkIGludCBy b3RhdGlvbikKK3sKKwlzaXplX3QgYnVmc2l6ZSA9IG1vZGUtPnZkaXNwbGF5ICogbW9kZS0+aGRp c3BsYXkgKiBzaXplb2YodTE2KTsKKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYgPSAmbWlw aS0+dGlueWRybTsKKwlpbnQgcmV0OworCisJaWYgKCFtaXBpLT5jb21tYW5kKQorCQlyZXR1cm4g LUVJTlZBTDsKKworCW11dGV4X2luaXQoJm1pcGktPmNtZGxvY2spOworCisJbWlwaS0+dHhfYnVm ID0gZGV2bV9rbWFsbG9jKGRldiwgYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtaXBpLT50 eF9idWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gZGV2bV90aW55ZHJtX2luaXQoZGV2 LCB0ZGV2LCAmaWxpOTIyNV9mYl9mdW5jcywgZHJpdmVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJcmV0ID0gdGlueWRybV9kaXNwbGF5X3BpcGVfaW5pdCh0ZGV2LCBwaXBlX2Z1bmNz LAorCQkJCQlEUk1fTU9ERV9DT05ORUNUT1JfVklSVFVBTCwKKwkJCQkJaWxpOTIyNV9mb3JtYXRz LAorCQkJCQlBUlJBWV9TSVpFKGlsaTkyMjVfZm9ybWF0cyksIG1vZGUsCisJCQkJCXJvdGF0aW9u KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdGRldi0+ZHJtLT5tb2RlX2NvbmZpZy5w cmVmZXJyZWRfZGVwdGggPSAxNjsKKwltaXBpLT5yb3RhdGlvbiA9IHJvdGF0aW9uOworCisJZHJt X21vZGVfY29uZmlnX3Jlc2V0KHRkZXYtPmRybSk7CisKKwlEUk1fREVCVUdfS01TKCJwcmVmZXJy ZWRfZGVwdGg9JXUsIHJvdGF0aW9uID0gJXVcbiIsCisJCSAgICAgIHRkZXYtPmRybS0+bW9kZV9j b25maWcucHJlZmVycmVkX2RlcHRoLCByb3RhdGlvbik7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9mdW5jcyBpbGk5MjI1X3Bp cGVfZnVuY3MgPSB7CisJLmVuYWJsZQkJPSBpbGk5MjI1X3BpcGVfZW5hYmxlLAorCS5kaXNhYmxl CT0gaWxpOTIyNV9waXBlX2Rpc2FibGUsCisJLnVwZGF0ZQkJPSB0aW55ZHJtX2Rpc3BsYXlfcGlw ZV91cGRhdGUsCisJLnByZXBhcmVfZmIJPSB0aW55ZHJtX2Rpc3BsYXlfcGlwZV9wcmVwYXJlX2Zi LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGlsaTkyMjVfbW9k ZSA9IHsKKwlUSU5ZRFJNX01PREUoMTc2LCAyMjAsIDM1LCA0NCksCit9OworCitERUZJTkVfRFJN X0dFTV9DTUFfRk9QUyhpbGk5MjI1X2ZvcHMpOworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIg aWxpOTIyNV9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcwk9IERSSVZFUl9HRU0gfCBEUklW RVJfTU9ERVNFVCB8IERSSVZFUl9QUklNRSB8CisJCQkJICBEUklWRVJfQVRPTUlDLAorCS5mb3Bz CQkJPSAmaWxpOTIyNV9mb3BzLAorCVRJTllEUk1fR0VNX0RSSVZFUl9PUFMsCisJLmxhc3RjbG9z ZQkJPSB0aW55ZHJtX2xhc3RjbG9zZSwKKwkubmFtZQkJCT0gImlsaTkyMjUiLAorCS5kZXNjCQkJ PSAiSWxpdGVrIElMSTkyMjUiLAorCS5kYXRlCQkJPSAiMjAxNzExMDYiLAorCS5tYWpvcgkJCT0g MSwKKwkubWlub3IJCQk9IDAsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBpbGk5MjI1X29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJnZW5lcmljLDIuMmlu LTE3NngyMjAtaWxpOTIyNS10ZnQiIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShv ZiwgaWxpOTIyNV9vZl9tYXRjaCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9p ZCBpbGk5MjI1X2lkW10gPSB7CisJeyAiMi4yaW4tMTc2eDIyMC1pbGk5MjI1LXRmdCIsIDAgfSwK Kwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShzcGksIGlsaTkyMjVfaWQpOworCitzdGF0 aWMgaW50IGlsaTkyMjVfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmc3BpLT5kZXY7CisJc3RydWN0IG1pcGlfZGJpICptaXBpOworCXN0cnVj dCBncGlvX2Rlc2MgKnJzOworCXUzMiByb3RhdGlvbiA9IDA7CisJaW50IHJldDsKKworCW1pcGkg PSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1pcGkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1p cGkpCisJCXJldHVybiAtRU5PTUVNOworCisJbWlwaS0+cmVzZXQgPSBkZXZtX2dwaW9kX2dldChk ZXYsICJyZXNldCIsIEdQSU9EX09VVF9ISUdIKTsKKwlpZiAoSVNfRVJSKG1pcGktPnJlc2V0KSkg eworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBnZXQgZ3BpbyAncmVzZXQnXG4iKTsK KwkJcmV0dXJuIFBUUl9FUlIobWlwaS0+cmVzZXQpOworCX0KKworCXJzID0gZGV2bV9ncGlvZF9n ZXQoZGV2LCAicnMiLCBHUElPRF9PVVRfTE9XKTsKKwlpZiAoSVNfRVJSKHJzKSkgeworCQlEUk1f REVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBnZXQgZ3BpbyAncnMnXG4iKTsKKwkJcmV0dXJuIFBU Ul9FUlIocnMpOworCX0KKworCWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsICJyb3RhdGlv biIsICZyb3RhdGlvbik7CisKKwlyZXQgPSBpbGk5MjI1X3NwaV9pbml0KHNwaSwgbWlwaSwgcnMp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBpbGk5MjI1X2luaXQoJnNwaS0+ ZGV2LCBtaXBpLCAmaWxpOTIyNV9waXBlX2Z1bmNzLAorCQkJICAgJmlsaTkyMjVfZHJpdmVyLCAm aWxpOTIyNV9tb2RlLCByb3RhdGlvbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNw aV9zZXRfZHJ2ZGF0YShzcGksIG1pcGkpOworCisJcmV0dXJuIGRldm1fdGlueWRybV9yZWdpc3Rl cigmbWlwaS0+dGlueWRybSk7Cit9CisKK3N0YXRpYyB2b2lkIGlsaTkyMjVfc2h1dGRvd24oc3Ry dWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgbWlwaV9kYmkgKm1pcGkgPSBzcGlfZ2V0 X2RydmRhdGEoc3BpKTsKKworCXRpbnlkcm1fc2h1dGRvd24oJm1pcGktPnRpbnlkcm0pOworfQor CitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgaWxpOTIyNV9zcGlfZHJpdmVyID0geworCS5kcml2 ZXIgPSB7CisJCS5uYW1lID0gImlsaTkyMjUiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJ Lm9mX21hdGNoX3RhYmxlID0gaWxpOTIyNV9vZl9tYXRjaCwKKwl9LAorCS5pZF90YWJsZSA9IGls aTkyMjVfaWQsCisJLnByb2JlID0gaWxpOTIyNV9wcm9iZSwKKwkuc2h1dGRvd24gPSBpbGk5MjI1 X3NodXRkb3duLAorfTsKK21vZHVsZV9zcGlfZHJpdmVyKGlsaTkyMjVfc3BpX2RyaXZlcik7CisK K01PRFVMRV9ERVNDUklQVElPTigiSWxpdGVrIElMSTkyMjUgRFJNIGRyaXZlciIpOworTU9EVUxF X0FVVEhPUigiRGF2aWQgTGVjaG5lciA8ZGF2aWRAbGVjaG5vbG9neS5jb20+Iik7CitNT0RVTEVf TElDRU5TRSgiR1BMIik7Ci0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZHJpLWRldmVsCg==