From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Lechner Subject: [PATCH v3 4/6] drm/tinydrm: add support for LEGO MINDSTORMS EV3 LCD Date: Thu, 3 Aug 2017 17:33:48 -0500 Message-ID: <1501799630-1650-5-git-send-email-david@lechnology.com> References: <1501799630-1650-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: <1501799630-1650-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 , Kevin Hilman , Sekhar Nori , linux-kernel@vger.kernel.org, Rob Herring , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org TEVHTyBNSU5EU1RPUk1TIEVWMyBoYXMgYW4gTENEIHdpdGggYSBTVDc1ODYgY29udHJvbGxlci4g VGhpcyBhZGRzIGEgbmV3Cm1vZHVsZSBmb3IgdGhlIFNUNzU4NiBjb250cm9sbGVyIHdpdGggcGFy YW1ldGVycyBmb3IgdGhlIExFR08gTUlORFNUT1JNUwpFVjMgTENEIGRpc3BsYXkuCgpTaWduZWQt b2ZmLWJ5OiBEYXZpZCBMZWNobmVyIDxkYXZpZEBsZWNobm9sb2d5LmNvbT4KLS0tCiBNQUlOVEFJ TkVSUyAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArCiBkcml2ZXJzL2dwdS9kcm0vdGlueWRy bS9LY29uZmlnICB8ICAxMCArCiBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9NYWtlZmlsZSB8ICAg MSArCiBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9zdDc1ODYuYyB8IDQ2NiArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgNDgzIGluc2VydGlv bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9zdDc1ODYu YwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggYTFlNzcyZS4u OTY0M2Y5NSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTQz NjUsNiArNDM2NSwxMiBAQCBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2dwdS9kcm0vdGlueWRy bS9yZXBhcGVyLmMKIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5 L3JlcGFwZXIudHh0CiAKK0RSTSBEUklWRVIgRk9SIFNJVFJPTklYIFNUNzU4NiBQQU5FTFMKK006 CURhdmlkIExlY2huZXIgPGRhdmlkQGxlY2hub2xvZ3kuY29tPgorUzoJTWFpbnRhaW5lZAorRjoJ ZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vc3Q3NTg2LmMKK0Y6CURvY3VtZW50YXRpb24vZGV2aWNl dHJlZS9iaW5kaW5ncy9kaXNwbGF5L3N0NzU4Ni50eHQKKwogRFJNIERSSVZFUiBGT1IgUkFHRSAx MjggVklERU8gQ0FSRFMKIFM6CU9ycGhhbiAvIE9ic29sZXRlCiBGOglkcml2ZXJzL2dwdS9kcm0v cjEyOC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL0tjb25maWcgYi9kcml2 ZXJzL2dwdS9kcm0vdGlueWRybS9LY29uZmlnCmluZGV4IGYxN2MzY2EuLjJlNzkwZTcgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3Rpbnlkcm0vS2NvbmZpZwpAQCAtMzIsMyArMzIsMTMgQEAgY29uZmlnIFRJTllEUk1fUkVQ QVBFUgogCSAgMi43MSIgVEZUIEVQRCBQYW5lbCAoRTIyNzFDUzAyMSkKIAogCSAgSWYgTSBpcyBz ZWxlY3RlZCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJlcGFwZXIuCisKK2NvbmZpZyBUSU5Z RFJNX1NUNzU4NgorCXRyaXN0YXRlICJEUk0gc3VwcG9ydCBmb3IgU2l0cm9uaXggU1Q3NTg2IGRp c3BsYXkgcGFuZWxzIgorCWRlcGVuZHMgb24gRFJNX1RJTllEUk0gJiYgU1BJCisJc2VsZWN0IFRJ TllEUk1fTUlQSV9EQkkKKwloZWxwCisJICBEUk0gZHJpdmVyIGZvciB0aGUgZm9sbG93aW5nIFNp dHJvbml4IFNUNzU4NiBwYW5lbHM6CisJICAqIExFR08gTUlORFNUT1JNUyBFVjMKKworCSAgSWYg TSBpcyBzZWxlY3RlZCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHN0NzU4Ni4KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3Rp bnlkcm0vTWFrZWZpbGUKaW5kZXggOTViYjRkNC4uMGMxODRiZCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3Rpbnlkcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0v TWFrZWZpbGUKQEAgLTYsMyArNiw0IEBAIG9iai0kKENPTkZJR19USU5ZRFJNX01JUElfREJJKQkJ Kz0gbWlwaS1kYmkubwogIyBEaXNwbGF5cwogb2JqLSQoQ09ORklHX1RJTllEUk1fTUkwMjgzUVQp CQkrPSBtaTAyODNxdC5vCiBvYmotJChDT05GSUdfVElOWURSTV9SRVBBUEVSKQkJKz0gcmVwYXBl ci5vCitvYmotJChDT05GSUdfVElOWURSTV9TVDc1ODYpCQkrPSBzdDc1ODYubwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vc3Q3NTg2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdGlu eWRybS9zdDc1ODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWUyMjZk Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vc3Q3NTg2LmMKQEAg LTAsMCArMSw0NjYgQEAKKy8qCisgKiBEUk0gZHJpdmVyIGZvciBTaXRyb25peCBTVDc1ODYgcGFu ZWxzCisgKgorICogQ29weXJpZ2h0IDIwMTcgRGF2aWQgTGVjaG5lciA8ZGF2aWRAbGVjaG5vbG9n eS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgor ICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+CisjaW5jbHVkZSA8bGlu dXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGxpbnV4L3Byb3BlcnR5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+ CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxh eS5oPgorCisjaW5jbHVkZSA8ZHJtL3Rpbnlkcm0vbWlwaS1kYmkuaD4KKyNpbmNsdWRlIDxkcm0v dGlueWRybS90aW55ZHJtLWhlbHBlcnMuaD4KKworLyogY29udHJvbGxlci1zcGVjaWZpYyBjb21t YW5kcyAqLworI2RlZmluZSBTVDc1ODZfRElTUF9NT0RFX0dSQVkJMHgzOAorI2RlZmluZSBTVDc1 ODZfRElTUF9NT0RFX01PTk8JMHgzOQorI2RlZmluZSBTVDc1ODZfRU5BQkxFX0REUkFNCTB4M2EK KyNkZWZpbmUgU1Q3NTg2X1NFVF9ESVNQX0RVVFkJMHhiMAorI2RlZmluZSBTVDc1ODZfU0VUX1BB UlRfRElTUAkweGI0CisjZGVmaW5lIFNUNzU4Nl9TRVRfTkxJTkVfSU5WCTB4YjUKKyNkZWZpbmUg U1Q3NTg2X1NFVF9WT1AJCTB4YzAKKyNkZWZpbmUgU1Q3NTg2X1NFVF9CSUFTX1NZU1RFTQkweGMz CisjZGVmaW5lIFNUNzU4Nl9TRVRfQk9PU1RfTEVWRUwJMHhjNAorI2RlZmluZSBTVDc1ODZfU0VU X1ZPUF9PRkZTRVQJMHhjNworI2RlZmluZSBTVDc1ODZfRU5BQkxFX0FOQUxPRwkweGQwCisjZGVm aW5lIFNUNzU4Nl9BVVRPX1JFQURfQ1RSTAkweGQ3CisjZGVmaW5lIFNUNzU4Nl9PVFBfUldfQ1RS TAkweGUwCisjZGVmaW5lIFNUNzU4Nl9PVFBfQ1RSTF9PVVQJMHhlMQorI2RlZmluZSBTVDc1ODZf T1RQX1JFQUQJCTB4ZTMKKworI2RlZmluZSBTVDc1ODZfRElTUF9DVFJMX01YCUJJVCg2KQorI2Rl ZmluZSBTVDc1ODZfRElTUF9DVFJMX01ZCUJJVCg3KQorCitzdGF0aWMgdm9pZCBzdDc1ODZfeHJn Yjg4ODhfdG9fZ3JheTMzMih1OCAqZHN0LCB2b2lkICp2YWRkciwKKwkJCQkgICAgICAgc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpj bGlwKQoreworCXNpemVfdCBsZW4gPSAoY2xpcC0+eDIgLSBjbGlwLT54MSkgKiAoY2xpcC0+eTIg LSBjbGlwLT55MSk7CisJdW5zaWduZWQgaW50IHgsIHk7CisJdTggKnNyYywgKmJ1ZiwgdmFsOwor CisJLyogMyBwaXhlbHMgcGVyIGJ5dGUsIHNvIGdyb3cgY2xpcCB0byBuZWFyZXN0IG11bHRpcGxl IG9mIDMgKi8KKwljbGlwLT54MSA9IGNsaXAtPngxIC8gMyAqIDM7CisJY2xpcC0+eDIgPSAoY2xp cC0+eDIgKyAyKSAvIDMgKiAzOworCisJYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwor CWlmICghYnVmKQorCQlyZXR1cm47CisKKwl0aW55ZHJtX3hyZ2I4ODg4X3RvX2dyYXk4KGJ1Ziwg dmFkZHIsIGZiLCBjbGlwKTsKKwlzcmMgPSBidWY7CisKKwlmb3IgKHkgPSBjbGlwLT55MTsgeSA8 IGNsaXAtPnkyOyB5KyspIHsKKwkJZm9yICh4ID0gY2xpcC0+eDE7IHggPCBjbGlwLT54MjsgeCAr PSAzKSB7CisJCQl2YWwgPSAqc3JjKysgJiAweGMwOworCQkJaWYgKHZhbCAmIDB4YzApCisJCQkJ dmFsIHw9IDB4MjA7CisJCQl2YWwgfD0gKCpzcmMrKyAmIDB4YzApID4+IDM7CisJCQlpZiAodmFs ICYgMHgxOCkKKwkJCQl2YWwgfD0gMHgwNDsKKwkJCXZhbCB8PSAqc3JjKysgPj4gNjsKKwkJCSpk c3QrKyA9IH52YWw7CisJCX0KKwl9CisKKwkvKiBub3cgYWRqdXN0IHRoZSBjbGlwIHNvIGl0IGFw cGxpZXMgdG8gZHN0ICovCisJY2xpcC0+eDEgLz0gMzsKKwljbGlwLT54MiAvPSAzOworCisJa2Zy ZWUoYnVmKTsKK30KKworc3RhdGljIGludCBzdDc1ODZfYnVmX2NvcHkodm9pZCAqZHN0LCBzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCSAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlw KQoreworCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9vYmogPSBkcm1fZmJfY21hX2dl dF9nZW1fb2JqKGZiLCAwKTsKKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICppbXBvcnRfYXR0 YWNoID0gY21hX29iai0+YmFzZS5pbXBvcnRfYXR0YWNoOworCXN0cnVjdCBkcm1fZm9ybWF0X25h bWVfYnVmIGZvcm1hdF9uYW1lOworCXZvaWQgKnNyYyA9IGNtYV9vYmotPnZhZGRyOworCWludCBy ZXQgPSAwOworCisJaWYgKGltcG9ydF9hdHRhY2gpIHsKKwkJcmV0ID0gZG1hX2J1Zl9iZWdpbl9j cHVfYWNjZXNzKGltcG9ydF9hdHRhY2gtPmRtYWJ1ZiwKKwkJCQkJICAgICAgIERNQV9GUk9NX0RF VklDRSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXN3aXRjaCAoZmItPmZv cm1hdC0+Zm9ybWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4OgorCQlzdDc1ODZfeHJn Yjg4ODhfdG9fZ3JheTMzMihkc3QsIHNyYywgZmIsIGNsaXApOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQlkZXZfZXJyX29uY2UoZmItPmRldi0+ZGV2LCAiRm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQ6 ICVzXG4iLAorCQkJICAgICBkcm1fZ2V0X2Zvcm1hdF9uYW1lKGZiLT5mb3JtYXQtPmZvcm1hdCwK KwkJCQkJCSAmZm9ybWF0X25hbWUpKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQor CisJaWYgKGltcG9ydF9hdHRhY2gpCisJCWRtYV9idWZfZW5kX2NwdV9hY2Nlc3MoaW1wb3J0X2F0 dGFjaC0+ZG1hYnVmLCBETUFfRlJPTV9ERVZJQ0UpOworCisJcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCBzdDc1ODZfZmJfZGlydHkoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkg ICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJICAg dW5zaWduZWQgaW50IGNvbG9yLCBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHMsCisJCQkgICB1 bnNpZ25lZCBpbnQgbnVtX2NsaXBzKQoreworCXN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldiA9 IGZiLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBtaXBpX2RiaSAqbWlwaSA9IG1pcGlfZGJp X2Zyb21fdGlueWRybSh0ZGV2KTsKKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwOworCWludCBy ZXQgPSAwOworCisJbXV0ZXhfbG9jaygmdGRldi0+ZGlydHlfbG9jayk7CisKKwlpZiAoIW1pcGkt PmVuYWJsZWQpCisJCWdvdG8gb3V0X3VubG9jazsKKworCS8qIGZiZGV2IGNhbiBmbHVzaCBldmVu IHdoZW4gd2UncmUgbm90IGludGVyZXN0ZWQgKi8KKwlpZiAodGRldi0+cGlwZS5wbGFuZS5mYiAh PSBmYikKKwkJZ290byBvdXRfdW5sb2NrOworCisJdGlueWRybV9tZXJnZV9jbGlwcygmY2xpcCwg Y2xpcHMsIG51bV9jbGlwcywgZmxhZ3MsIGZiLT53aWR0aCwKKwkJCSAgICBmYi0+aGVpZ2h0KTsK KworCURSTV9ERUJVRygiRmx1c2hpbmcgW0ZCOiVkXSB4MT0ldSwgeDI9JXUsIHkxPSV1LCB5Mj0l dVxuIiwgZmItPmJhc2UuaWQsCisJCSAgY2xpcC54MSwgY2xpcC54MiwgY2xpcC55MSwgY2xpcC55 Mik7CisKKwlyZXQgPSBzdDc1ODZfYnVmX2NvcHkobWlwaS0+dHhfYnVmLCBmYiwgJmNsaXApOwor CWlmIChyZXQpCisJCWdvdG8gb3V0X3VubG9jazsKKworCS8qIE5COiBzdDc1ODZfYnVmX2NvcHko KSBtb2RpZmllcyBjbGlwICovCisKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIE1JUElfRENTX1NF VF9DT0xVTU5fQUREUkVTUywKKwkJCSAoY2xpcC54MSA+PiA4KSAmIDB4RkYsIGNsaXAueDEgJiAw eEZGLAorCQkJIChjbGlwLngyID4+IDgpICYgMHhGRiwgKGNsaXAueDIgLSAxKSAmIDB4RkYpOwor CW1pcGlfZGJpX2NvbW1hbmQobWlwaSwgTUlQSV9EQ1NfU0VUX1BBR0VfQUREUkVTUywKKwkJCSAo Y2xpcC55MSA+PiA4KSAmIDB4RkYsIGNsaXAueTEgJiAweEZGLAorCQkJIChjbGlwLnkyID4+IDgp ICYgMHhGRiwgKGNsaXAueTIgLSAxKSAmIDB4RkYpOworCisJcmV0ID0gbWlwaV9kYmlfY29tbWFu ZF9idWYobWlwaSwgTUlQSV9EQ1NfV1JJVEVfTUVNT1JZX1NUQVJULAorCQkJCSAgICh1OCAqKW1p cGktPnR4X2J1ZiwKKwkJCQkgICAoY2xpcC54MiAtIGNsaXAueDEpICogKGNsaXAueTIgLSBjbGlw LnkxKSk7CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZ0ZGV2LT5kaXJ0eV9sb2NrKTsK KworCWlmIChyZXQpCisJCWRldl9lcnJfb25jZShmYi0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gdXBk YXRlIGRpc3BsYXkgJWRcbiIsCisJCQkgICAgIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBzdDc1ODZfZmJfZnVuY3Mg PSB7CisJLmRlc3Ryb3kJPSBkcm1fZmJfY21hX2Rlc3Ryb3ksCisJLmNyZWF0ZV9oYW5kbGUJPSBk cm1fZmJfY21hX2NyZWF0ZV9oYW5kbGUsCisJLmRpcnR5CQk9IHN0NzU4Nl9mYl9kaXJ0eSwKK307 CisKK3ZvaWQgc3Q3NTg2X3BpcGVfZW5hYmxlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlw ZSAqcGlwZSwKKwkJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1 Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYgPSBwaXBlX3RvX3Rpbnlkcm0ocGlwZSk7CisJc3RydWN0 IG1pcGlfZGJpICptaXBpID0gbWlwaV9kYmlfZnJvbV90aW55ZHJtKHRkZXYpOworCXN0cnVjdCBk cm1fZnJhbWVidWZmZXIgKmZiID0gcGlwZS0+cGxhbmUuZmI7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gdGRldi0+ZHJtLT5kZXY7CisJaW50IHJldDsKKwl1OCBhZGRyX21vZGU7CisKKwlEUk1fREVC VUdfS01TKCJcbiIpOworCisJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShtaXBpLT5yZWd1bGF0b3Ip OworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIHJlZ3VsYXRv ciAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCW1pcGlfZGJpX2h3X3Jlc2V0KG1pcGkp OworCXJldCA9IG1pcGlfZGJpX2NvbW1hbmQobWlwaSwgU1Q3NTg2X0FVVE9fUkVBRF9DVFJMLCAw eDlmKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRXJyb3Igc2VuZGluZyBjb21tYW5k ICVkXG4iLCByZXQpOworCQlyZWd1bGF0b3JfZGlzYWJsZShtaXBpLT5yZWd1bGF0b3IpOworCQly ZXR1cm47CisJfQorCisJbWlwaV9kYmlfY29tbWFuZChtaXBpLCBTVDc1ODZfT1RQX1JXX0NUUkws IDB4MDApOworCisJbXNsZWVwKDEwKTsKKworCW1pcGlfZGJpX2NvbW1hbmQobWlwaSwgU1Q3NTg2 X09UUF9SRUFEKTsKKworCW1zbGVlcCgyMCk7CisKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIFNU NzU4Nl9PVFBfQ1RSTF9PVVQpOworCW1pcGlfZGJpX2NvbW1hbmQobWlwaSwgTUlQSV9EQ1NfRVhJ VF9TTEVFUF9NT0RFKTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIE1JUElfRENTX1NFVF9ESVNQ TEFZX09GRik7CisKKwltc2xlZXAoNTApOworCisJbWlwaV9kYmlfY29tbWFuZChtaXBpLCBTVDc1 ODZfU0VUX1ZPUF9PRkZTRVQsIDB4MDApOworCW1pcGlfZGJpX2NvbW1hbmQobWlwaSwgU1Q3NTg2 X1NFVF9WT1AsIDB4ZTMsIDB4MDApOworCW1pcGlfZGJpX2NvbW1hbmQobWlwaSwgU1Q3NTg2X1NF VF9CSUFTX1NZU1RFTSwgMHgwMik7CisJbWlwaV9kYmlfY29tbWFuZChtaXBpLCBTVDc1ODZfU0VU X0JPT1NUX0xFVkVMLCAweDA0KTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIFNUNzU4Nl9FTkFC TEVfQU5BTE9HLCAweDFkKTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIFNUNzU4Nl9TRVRfTkxJ TkVfSU5WLCAweDAwKTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIFNUNzU4Nl9ESVNQX01PREVf R1JBWSk7CisJbWlwaV9kYmlfY29tbWFuZChtaXBpLCBTVDc1ODZfRU5BQkxFX0REUkFNLCAweDAy KTsKKworCXN3aXRjaCAobWlwaS0+cm90YXRpb24pIHsKKwlkZWZhdWx0OgorCQlhZGRyX21vZGUg PSAweDAwOworCQlicmVhazsKKwljYXNlIDkwOgorCQlhZGRyX21vZGUgPSBTVDc1ODZfRElTUF9D VFJMX01ZOworCQlicmVhazsKKwljYXNlIDE4MDoKKwkJYWRkcl9tb2RlID0gU1Q3NTg2X0RJU1Bf Q1RSTF9NWCB8IFNUNzU4Nl9ESVNQX0NUUkxfTVk7CisJCWJyZWFrOworCWNhc2UgMjcwOgorCQlh ZGRyX21vZGUgPSBTVDc1ODZfRElTUF9DVFJMX01YOworCQlicmVhazsKKwl9CisJbWlwaV9kYmlf Y29tbWFuZChtaXBpLCBNSVBJX0RDU19TRVRfQUREUkVTU19NT0RFLCBhZGRyX21vZGUpOworCisJ bWlwaV9kYmlfY29tbWFuZChtaXBpLCBTVDc1ODZfU0VUX0RJU1BfRFVUWSwgMHg3Zik7CisJbWlw aV9kYmlfY29tbWFuZChtaXBpLCBTVDc1ODZfU0VUX1BBUlRfRElTUCwgMHhhMCk7CisJbWlwaV9k YmlfY29tbWFuZChtaXBpLCBNSVBJX0RDU19TRVRfUEFSVElBTF9BUkVBLCAweDAwLCAweDAwLCAw eDAwLCAweDc3KTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIE1JUElfRENTX0VYSVRfSU5WRVJU X01PREUpOworCisJbXNsZWVwKDEwMCk7CisKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIE1JUElf RENTX1NFVF9ESVNQTEFZX09OKTsKKworCW1pcGktPmVuYWJsZWQgPSB0cnVlOworCisJaWYgKGZi KQorCQlmYi0+ZnVuY3MtPmRpcnR5KGZiLCBOVUxMLCAwLCAwLCBOVUxMLCAwKTsKKworCXRpbnlk cm1fZW5hYmxlX2JhY2tsaWdodChtaXBpLT5iYWNrbGlnaHQpOworfQorCitzdGF0aWMgdm9pZCBz dDc1ODZfcGlwZV9kaXNhYmxlKHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSkK K3sKKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYgPSBwaXBlX3RvX3Rpbnlkcm0ocGlwZSk7 CisJc3RydWN0IG1pcGlfZGJpICptaXBpID0gbWlwaV9kYmlfZnJvbV90aW55ZHJtKHRkZXYpOwor CisJRFJNX0RFQlVHX0tNUygiXG4iKTsKKworCWlmICghbWlwaS0+ZW5hYmxlZCkKKwkJcmV0dXJu OworCisJbWlwaS0+ZW5hYmxlZCA9IGZhbHNlOworCXRpbnlkcm1fZGlzYWJsZV9iYWNrbGlnaHQo bWlwaS0+YmFja2xpZ2h0KTsKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIE1JUElfRENTX1NFVF9E SVNQTEFZX09GRik7CisJcmVndWxhdG9yX2Rpc2FibGUobWlwaS0+cmVndWxhdG9yKTsKK30KKwor c3RhdGljIGNvbnN0IHUzMiBzdDc1ODZfZm9ybWF0c1tdID0geworCURSTV9GT1JNQVRfWFJHQjg4 ODgsCit9OworCitzdGF0aWMgaW50IHN0NzU4Nl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry dWN0IG1pcGlfZGJpICptaXBpLAorCQljb25zdCBzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3Bp cGVfZnVuY3MgKnBpcGVfZnVuY3MsCisJCXN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIsIGNvbnN0 IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQl1bnNpZ25lZCBpbnQgcm90YXRpb24p Cit7CisJc2l6ZV90IGJ1ZnNpemUgPSAobW9kZS0+dmRpc3BsYXkgKyAyKSAvIDMgKiBtb2RlLT5o ZGlzcGxheTsKKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYgPSAmbWlwaS0+dGlueWRybTsK KwlpbnQgcmV0OworCisJbXV0ZXhfaW5pdCgmbWlwaS0+Y21kbG9jayk7CisKKwltaXBpLT50eF9i dWYgPSBkZXZtX2ttYWxsb2MoZGV2LCBidWZzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1pcGkt PnR4X2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBkZXZtX3Rpbnlkcm1faW5pdChk ZXYsIHRkZXYsICZzdDc1ODZfZmJfZnVuY3MsIGRyaXZlcik7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCXJldCA9IHRpbnlkcm1fZGlzcGxheV9waXBlX2luaXQodGRldiwgcGlwZV9mdW5j cywKKwkJCQkJRFJNX01PREVfQ09OTkVDVE9SX1ZJUlRVQUwsCisJCQkJCXN0NzU4Nl9mb3JtYXRz LAorCQkJCQlBUlJBWV9TSVpFKHN0NzU4Nl9mb3JtYXRzKSwKKwkJCQkJbW9kZSwgcm90YXRpb24p OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl0ZGV2LT5kcm0tPm1vZGVfY29uZmlnLnBy ZWZlcnJlZF9kZXB0aCA9IDMyOworCW1pcGktPnJvdGF0aW9uID0gcm90YXRpb247CisKKwlkcm1f bW9kZV9jb25maWdfcmVzZXQodGRldi0+ZHJtKTsKKworCURSTV9ERUJVR19LTVMoInByZWZlcnJl ZF9kZXB0aD0ldSwgcm90YXRpb24gPSAldVxuIiwKKwkJICAgICAgdGRldi0+ZHJtLT5tb2RlX2Nv bmZpZy5wcmVmZXJyZWRfZGVwdGgsIHJvdGF0aW9uKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2Z1bmNzIHN0NzU4Nl9waXBl X2Z1bmNzID0geworCS5lbmFibGUJCT0gc3Q3NTg2X3BpcGVfZW5hYmxlLAorCS5kaXNhYmxlCT0g c3Q3NTg2X3BpcGVfZGlzYWJsZSwKKwkudXBkYXRlCQk9IHRpbnlkcm1fZGlzcGxheV9waXBlX3Vw ZGF0ZSwKKwkucHJlcGFyZV9mYgk9IHRpbnlkcm1fZGlzcGxheV9waXBlX3ByZXBhcmVfZmIsCit9 OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgc3Q3NTg2X21vZGUgPSB7 CisJVElOWURSTV9NT0RFKDE3OCwgMTI4LCAzNywgMjcpLAorfTsKKworREVGSU5FX0RSTV9HRU1f Q01BX0ZPUFMoc3Q3NTg2X2ZvcHMpOworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgc3Q3NTg2 X2RyaXZlciA9IHsKKwkuZHJpdmVyX2ZlYXR1cmVzCT0gRFJJVkVSX0dFTSB8IERSSVZFUl9NT0RF U0VUIHwgRFJJVkVSX1BSSU1FIHwKKwkJCQkgIERSSVZFUl9BVE9NSUMsCisJLmZvcHMJCQk9ICZz dDc1ODZfZm9wcywKKwlUSU5ZRFJNX0dFTV9EUklWRVJfT1BTLAorCS5sYXN0Y2xvc2UJCT0gdGlu eWRybV9sYXN0Y2xvc2UsCisJLmRlYnVnZnNfaW5pdAkJPSBtaXBpX2RiaV9kZWJ1Z2ZzX2luaXQs CisJLm5hbWUJCQk9ICJzdDc1ODYiLAorCS5kZXNjCQkJPSAiU2l0cm9uaXggU1Q3NTg2IiwKKwku ZGF0ZQkJCT0gIjIwMTcwODAxIiwKKwkubWFqb3IJCQk9IDEsCisJLm1pbm9yCQkJPSAwLAorfTsK Kworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3Q3NTg2X29mX21hdGNoW10gPSB7 CisJeyAuY29tcGF0aWJsZSA9ICJsZWdvLGV2My1sY2QiIH0sCisJe30sCit9OworTU9EVUxFX0RF VklDRV9UQUJMRShvZiwgc3Q3NTg2X29mX21hdGNoKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBz cGlfZGV2aWNlX2lkIHN0NzU4Nl9pZFtdID0geworCXsgImV2My1sY2QiLCAwIH0sCisJeyB9LAor fTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoc3BpLCBzdDc1ODZfaWQpOworCitzdGF0aWMgaW50IHN0 NzU4Nl9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZzcGktPmRldjsKKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXY7CisJc3RydWN0IG1p cGlfZGJpICptaXBpOworCXN0cnVjdCBncGlvX2Rlc2MgKmRjOworCXUzMiByb3RhdGlvbiA9IDA7 CisJaW50IHJldDsKKworCW1pcGkgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1pcGkpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIW1pcGkpCisJCXJldHVybiAtRU5PTUVNOworCisJbWlwaS0+cmVz ZXQgPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsICJyZXNldCIsIEdQSU9EX09VVF9ISUdI KTsKKwlpZiAoSVNfRVJSKG1pcGktPnJlc2V0KSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0 byBnZXQgZ3BpbyAncmVzZXQnXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIobWlwaS0+cmVzZXQpOwor CX0KKworCWRjID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCAiZGMiLCBHUElPRF9PVVRf TE9XKTsKKwlpZiAoSVNfRVJSKGRjKSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQg Z3BpbyAnZGMnXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGMpOworCX0KKworCW1pcGktPnJlZ3Vs YXRvciA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJwb3dlciIpOworCWlmIChJU19FUlIobWlw aS0+cmVndWxhdG9yKSkKKwkJcmV0dXJuIFBUUl9FUlIobWlwaS0+cmVndWxhdG9yKTsKKworCW1p cGktPmJhY2tsaWdodCA9IHRpbnlkcm1fb2ZfZmluZF9iYWNrbGlnaHQoZGV2KTsKKwlpZiAoSVNf RVJSKG1pcGktPmJhY2tsaWdodCkpCisJCXJldHVybiBQVFJfRVJSKG1pcGktPmJhY2tsaWdodCk7 CisKKwlkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAicm90YXRpb24iLCAmcm90YXRpb24p OworCisJcmV0ID0gbWlwaV9kYmlfc3BpX2luaXQoc3BpLCBtaXBpLCBkYyk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCS8qIENhbm5vdCByZWFkIGZyb20gdGhpcyBjb250cm9sbGVyIHZp YSBTUEkgKi8KKwltaXBpLT5yZWFkX2NvbW1hbmRzID0gTlVMTDsKKworCS8qCisJICogd2UgYXJl IHVzaW5nIDgtYml0IGRhdGEsIHNvIHdlIGFyZSBub3QgYWN0dWFsbHkgc3dhcHBpbmcgYW55dGhp bmcsCisJICogYnV0IHNldHRpbmcgbWlwaS0+c3dhcF9ieXRlcyBtYWtlcyBtaXBpX2RiaV90eXBl YzNfY29tbWFuZCgpIGRvIHRoZQorCSAqIHJpZ2h0IHRoaW5nIGFuZCBub3QgdXNlIDE2LWJpdCB0 cmFuc2ZlcnMgKHdoaWNoIHJlc3VsdHMgaW4gc3dhcHBlZAorCSAqIGJ5dGVzIG9uIGxpdHRsZS1l bmRpYW4gc3lzdGVtcyBhbmQgY2F1c2VzIG91dCBvZiBvcmRlciBkYXRhIHRvIGJlCisJICogc2Vu dCB0byB0aGUgZGlzcGxheSkuCisJICovCisJbWlwaS0+c3dhcF9ieXRlcyA9IHRydWU7CisKKwly ZXQgPSBzdDc1ODZfaW5pdCgmc3BpLT5kZXYsIG1pcGksICZzdDc1ODZfcGlwZV9mdW5jcywgJnN0 NzU4Nl9kcml2ZXIsCisJCQkgICZzdDc1ODZfbW9kZSwgcm90YXRpb24pOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwl0ZGV2ID0gJm1pcGktPnRpbnlkcm07CisKKwlyZXQgPSBkZXZtX3Rp bnlkcm1fcmVnaXN0ZXIodGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNwaV9z ZXRfZHJ2ZGF0YShzcGksIG1pcGkpOworCisJRFJNX0RFQlVHX0RSSVZFUigiSW5pdGlhbGl6ZWQg JXM6JXMgQCV1TUh6IG9uIG1pbm9yICVkXG4iLAorCQkJIHRkZXYtPmRybS0+ZHJpdmVyLT5uYW1l LCBkZXZfbmFtZShkZXYpLAorCQkJIHNwaS0+bWF4X3NwZWVkX2h6IC8gMTAwMDAwMCwKKwkJCSB0 ZGV2LT5kcm0tPnByaW1hcnktPmluZGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9p ZCBzdDc1ODZfc2h1dGRvd24oc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgbWlw aV9kYmkgKm1pcGkgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKworCXRpbnlkcm1fc2h1dGRvd24o Jm1pcGktPnRpbnlkcm0pOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHN0NzU4Nl9w bV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWlwaV9kYmkgKm1pcGkg PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiB0aW55ZHJtX3N1c3BlbmQoJm1pcGkt PnRpbnlkcm0pOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHN0NzU4Nl9wbV9yZXN1 bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtaXBpX2RiaSAqbWlwaSA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHRpbnlkcm1fcmVzdW1lKCZtaXBpLT50aW55ZHJt KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHN0NzU4Nl9wbV9vcHMgPSB7 CisJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMoc3Q3NTg2X3BtX3N1c3BlbmQsIHN0NzU4Nl9wbV9y ZXN1bWUpCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgc3Q3NTg2X3NwaV9kcml2ZXIg PSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAic3Q3NTg2IiwKKwkJLm93bmVyID0gVEhJU19N T0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IHN0NzU4Nl9vZl9tYXRjaCwKKwkJLnBtID0gJnN0 NzU4Nl9wbV9vcHMsCisJfSwKKwkuaWRfdGFibGUgPSBzdDc1ODZfaWQsCisJLnByb2JlID0gc3Q3 NTg2X3Byb2JlLAorCS5zaHV0ZG93biA9IHN0NzU4Nl9zaHV0ZG93biwKK307Cittb2R1bGVfc3Bp X2RyaXZlcihzdDc1ODZfc3BpX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiU2l0cm9u aXggU1Q3NTg2IERSTSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmlkIExlY2huZXIgPGRh dmlkQGxlY2hub2xvZ3kuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotLSAKMi43LjQK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=