From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jianwei Wang Subject: [PATCH 1/2] drm/layerscape: Add HDMI support for DCU DRM driver Date: Thu, 27 Aug 2015 12:19:57 +0800 Message-ID: <1440649198-27244-1-git-send-email-jianwei.wang.chn@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: devicetree@vger.kernel.org, Xiubo Li , Alison Wang , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org U29tZSBGcmVlc2NhbGUgU29DcywgdGhlcmUgaGFzIGFuIERWSS9IRE1JIGNvbnRyb2xsZXIgYW5k IGEgUEhZLAphdHRhY2hlZCB0byBvbmUgb2YgdGhlaXIgZGlzcGxheSBjb250cm9sbGVyIHVuaXQn cyBMQ0RDIGludGVyZmFjZXMuClRoaXMgcGF0Y2ggYWRkcyBhIGRyaXZlciBmb3IgU2lJOTAyeC4g VGhlIFNpSTkwMnggaXMgYSBIRE1JCnRyYW5zbWl0dGVyIEl0IHN1cHBvcnRzIHJlc29sdXRpb25z IGZyb20gc3RhbmRhcmQgZGVmaW5pdGlvbgo0ODBpL3AgYW5kIDU3NmkvcCBhbGwgdGhlIHdheSB0 byBoaWdoLWRlZmluaXRpb24gNzIwcCwgMTA4MGksCmFuZCAxMDgwcCwgdGhlIGhpZ2hlc3QgcmVz b2x1dGlvbiBzdXBwb3J0ZWQgYnkgSERUVnMgdG9kYXkuCgpTaWduZWQtb2ZmLWJ5OiBBbGlzb24g V2FuZyA8YjE4OTY1QGZyZWVzY2FsZS5jb20+ClNpZ25lZC1vZmYtYnk6IFhpdWJvIExpIDxsaXhp dWJvQGNtc3MuY2hpbmFtb2JpbGUuY29tPgpTaWduZWQtb2ZmLWJ5OiBKaWFud2VpIFdhbmcgPGpp YW53ZWkud2FuZy5jaG5AZ21haWwuY29tPgotLS0KIC4uLi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Zp ZGVvL1NpSTkwMngudHh0ICAgICAgICAgIHwgIDE3ICsKIGRyaXZlcnMvZ3B1L2RybS9mc2wtZGN1 L01ha2VmaWxlICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9mc2wt ZGN1L2ZzbF9kY3VfZHJtX2hkbWkuYyAgICAgICAgIHwgNjM5ICsrKysrKysrKysrKysrKysrKysr KwogZHJpdmVycy9ncHUvZHJtL2ZzbC1kY3UvZnNsX2RjdV9kcm1fa21zLmMgICAgICAgICAgfCAg MTAgKwogZHJpdmVycy9ncHUvZHJtL2ZzbC1kY3UvZnNsX2RjdV9kcm1fb3V0cHV0LmggICAgICAg fCAgMTAgKwogNSBmaWxlcyBjaGFuZ2VkLCA2NzcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92aWRlby9TaUk5MDJ4LnR4 dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9mc2wtZGN1L2ZzbF9kY3VfZHJt X2hkbWkuYwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92 aWRlby9TaUk5MDJ4LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92aWRl by9TaUk5MDJ4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzA0NDk5 Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Zp ZGVvL1NpSTkwMngudHh0CkBAIC0wLDAgKzEsMTcgQEAKK0RldmljZS1UcmVlIGJpbmRpbmdzIGZv ciB0aGUgU2lJOTAyeCBoZG1pIHRyYW5zbWl0dGVyLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgor LSBjb21wYXRpYmxlOiAJU2hvdWxkIGJlICJzaWk5MDJ4Ii4KKy0gcmVnOiAJCVRoZSBJMkMgYWRk cmVzcyBvZiB0aGUgZGV2aWNlLgorLSBpbnRlcnJ1cHRzOglJbnRlcnJ1cHQgbnVtYmVyIHRvIHRo ZSBjcHUuCisKK0V4YW1wbGU6CisKKyZpMmMxIHsKKyAgICAgICBzdGF0dXMgPSAib2theSI7Cisg ICAgICAgaGRtaTogc2lpOTAyMmFAMzkgeworICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAic2lp OTAyeCI7CisgICAgICAgICAgICAgcmVnID0gPDB4Mzk+OworICAgICAgICAgICAgIGludGVycnVw dHMgPSA8R0lDX1NQSSAxNjcgSVJRX1RZUEVfRURHRV9SSVNJTkc+OworICAgICAgIH07Cit9Owpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2ZzbC1kY3UvTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vZnNsLWRjdS9NYWtlZmlsZQppbmRleCA2ZWExNTIzLi45OGNhY2MyIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vZnNsLWRjdS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0v ZnNsLWRjdS9NYWtlZmlsZQpAQCAtMSw2ICsxLDcgQEAKIGZzbC1kY3UtZHJtLXkgOj0gZnNsX2Rj dV9kcm1fZHJ2Lm8gXAogCQkgZnNsX2RjdV9kcm1fa21zLm8gXAogCQkgZnNsX2RjdV9kcm1fcmdi Lm8gXAorCQkgZnNsX2RjdV9kcm1faGRtaS5vIFwKIAkJIGZzbF9kY3VfZHJtX3BsYW5lLm8gXAog CQkgZnNsX2RjdV9kcm1fY3J0Yy5vIFwKIAkJIGZzbF9kY3VfZHJtX2ZiZGV2Lm8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9mc2wtZGN1L2ZzbF9kY3VfZHJtX2hkbWkuYyBiL2RyaXZlcnMv Z3B1L2RybS9mc2wtZGN1L2ZzbF9kY3VfZHJtX2hkbWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5iOTFjOGNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2ZzbC1kY3UvZnNsX2RjdV9kcm1faGRtaS5jCkBAIC0wLDAgKzEsNjM5IEBACisvKgorICogQ29w eXJpZ2h0IDIwMTUgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBGcmVlc2Nh bGUgRENVIGRybSBkZXZpY2UgZHJpdmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9m IHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KyAqLworCisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5 Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2lu Y2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5j bHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1 ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorI2luY2x1 ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgorI2luY2x1ZGUgPHZpZGVvL29mX2Rpc3BsYXlfdGltaW5n Lmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hl bHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2VkaWQuaD4KKworI2luY2x1ZGUgImZzbF9kY3VfZHJtX2Rydi5oIgorI2luY2x1ZGUgImZz bF9kY3VfZHJtX291dHB1dC5oIgorCisjZGVmaW5lIFNJSTkwMlhfSU5QVVRfQlVTX0ZNVAkweDA4 CisjZGVmaW5lIFNJSTkwMlhfVFBJX0FWSV9JTlBVVF9GTVQJMHgwOQorI2RlZmluZSBTSUk5MDJY X1RQSV9BVklfT1VUUFVUX0ZNVAkweDBBCisjZGVmaW5lIFNJSTkwMlhfU1lTX0NPTlRST0wJMHgx QQorI2RlZmluZSBTSUk5MDJYX1NZU19DVFJfRERDX1JFUQlCSVQoMikKKyNkZWZpbmUgU0lJOTAy WF9TWVNfQ1RSX0REQ19CVVNfQVZBSQkoQklUKDIpIHwgQklUKDEpKQorI2RlZmluZSBTSUk5MDJY X1RQSV9GQU1JTFlfREVWX0lECTB4MUIKKyNkZWZpbmUgU0lJOTAyWF9UUElfREVWX1JFVl9JRAkw eDFDCisjZGVmaW5lIFNJSTkwMlhfVFBJX1JFVl9MRVZFTF9JRAkweDFECisjZGVmaW5lIFNJSTkw MlhfUE9XRVJfU1RBVEUJMHgxRQorI2RlZmluZSBTSUk5MDJYX1RQSV9BVURJT19DRkcwCTB4MjQK KyNkZWZpbmUgU0lJOTAyWF9UUElfQVVESU9fQ0ZHMQkweDI1CisjZGVmaW5lIFNJSTkwMlhfVFBJ X0FVRElPX0NGRzIJMHgyNgorI2RlZmluZSBTSUk5MDJYX1RQSV9BVURJT19DRkczCTB4MjcKKyNk ZWZpbmUgU0lJOTAyWF9UUElfSERDUF9SRVYJMHgzMAorI2RlZmluZSBTSUk5MDJYX1RQSV9JTlRf RU5BQkxFCTB4M0MKKyNkZWZpbmUgU0lJOTAyWF9UUElfSU5UX1NUQVRVUwkweDNECisjZGVmaW5l IFNJSTkwMlhfVFBJX0lOVF9QTFVHX0lOCUJJVCgyKQorI2RlZmluZSBTSUk5MDJYX0dFTkVSQUxf UFVSUE9TRV9JTzAJMHhCQworI2RlZmluZSBTSUk5MDJYX0dFTkVSQUxfUFVSUE9TRV9JTzEJMHhC RAorI2RlZmluZSBTSUk5MDJYX0dFTkVSQUxfUFVSUE9TRV9JTzIJMHhCRQorI2RlZmluZSBTSUk5 MDJYX1RSQU5TX01PREVfRElGRgkweEM3CisKK2Jvb2wgZ19lbmFibGVfaGRtaTsKKworc3RydWN0 IHNpaTkwMnhfZGF0YSB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgZGVs YXllZF93b3JrIGRldF93b3JrOworCXN0cnVjdCBmYl9pbmZvICpmYmk7CisJc3RydWN0IGZzbF9k Y3VfZHJtX2hkbWljb24gKmhkbWljb247Cit9ICpzaWk5MDJ4OworCitzdGF0aWMgc3RydWN0IGky Y19jbGllbnQgKnNpaTkwMnhfdG9faTJjKHN0cnVjdCBzaWk5MDJ4X2RhdGEgKnNpaTkwMngpCit7 CisJcmV0dXJuIHNpaTkwMngtPmNsaWVudDsKK30KKworc3RhdGljIHMzMiBzaWk5MDJ4X3dyaXRl KGNvbnN0IHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgdTggY29tbWFuZCwgdTggdmFs dWUpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBjb21tYW5k LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBzMzIgc2lpOTAyeF9yZWFkKGNvbnN0IHN0cnVjdCBpMmNf Y2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQpCit7CisJaW50IHZhbDsKKworCXZhbCA9IGkyY19z bWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIGNvbW1hbmQpOworCisJcmV0dXJuIHZhbCAmIDB4 ZmY7Cit9CisKK3N0YXRpYyB2b2lkIHNpaTkwMnhfcG93ZXJfdXBfdHgoc3RydWN0IHNpaTkwMnhf ZGF0YSAqc2lpOTAyeCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc2lpOTAyeF90 b19pMmMoc2lpOTAyeCk7CisJaW50IHZhbDsKKworCXZhbCA9IHNpaTkwMnhfcmVhZChjbGllbnQs IFNJSTkwMlhfUE9XRVJfU1RBVEUpOworCXZhbCAmPSB+MHgzOworCXNpaTkwMnhfd3JpdGUoY2xp ZW50LCBTSUk5MDJYX1BPV0VSX1NUQVRFLCB2YWwpOworfQorCitzdGF0aWMgaW50IHNpaTkwMnhf Z2V0X2VkaWRfcHJlY29uZmlnKHZvaWQpCit7CisJaW50IG9sZCwgZGF0LCByZXQgPSAwLCBjbnQg PSAxMDA7CisKKwlvbGQgPSBzaWk5MDJ4X3JlYWQoc2lpOTAyeC0+Y2xpZW50LCBTSUk5MDJYX1NZ U19DT05UUk9MKTsKKworCXNpaTkwMnhfd3JpdGUoc2lpOTAyeC0+Y2xpZW50LCBTSUk5MDJYX1NZ U19DT05UUk9MLAorCQkgICAgICBvbGQgfCBTSUk5MDJYX1NZU19DVFJfRERDX1JFUSk7CisJZG8g eworCQljbnQtLTsKKwkJbXNsZWVwKDIwKTsKKwkJZGF0ID0gc2lpOTAyeF9yZWFkKHNpaTkwMngt PmNsaWVudCwgU0lJOTAyWF9TWVNfQ09OVFJPTCk7CisJfSB3aGlsZSAoKCEoZGF0ICYgMHgyKSkg JiYgY250KTsKKworCWlmICghY250KSB7CisJCXJldCA9IC0xOworCQlnb3RvIGRvbmU7CisJfQor CisJc2lpOTAyeF93cml0ZShzaWk5MDJ4LT5jbGllbnQsIFNJSTkwMlhfU1lTX0NPTlRST0wsCisJ CSAgICAgIG9sZCB8IFNJSTkwMlhfU1lTX0NUUl9ERENfQlVTX0FWQUkpOworCitkb25lOgorCXNp aTkwMnhfd3JpdGUoc2lpOTAyeC0+Y2xpZW50LCBTSUk5MDJYX1NZU19DT05UUk9MLCBvbGQpOwor CXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBlZGlkICpzaWk5MDJ4X2RybV9nZXRfZWRpZChzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgc3RydWN0IGkyY19hZGFwdGVyICph ZGFwdGVyKQoreworCWludCBvbGQsIGRhdCwgY250ID0gMTAwOworCXN0cnVjdCBlZGlkICplZGlk OworCisJb2xkID0gc2lpOTAyeF9yZWFkKHNpaTkwMngtPmNsaWVudCwgU0lJOTAyWF9TWVNfQ09O VFJPTCk7CisKKwlzaWk5MDJ4X3dyaXRlKHNpaTkwMngtPmNsaWVudCwgU0lJOTAyWF9TWVNfQ09O VFJPTCwKKwkJICAgICAgb2xkIHwgU0lJOTAyWF9TWVNfQ1RSX0REQ19SRVEpOworCWRvIHsKKwkJ Y250LS07CisJCW1zbGVlcCgyMCk7CisJCWRhdCA9IHNpaTkwMnhfcmVhZChzaWk5MDJ4LT5jbGll bnQsIFNJSTkwMlhfU1lTX0NPTlRST0wpOworCX0gd2hpbGUgKCghKGRhdCAmIDB4MikpICYmIGNu dCk7CisKKwlpZiAoIWNudCkgeworCQllZGlkID0gTlVMTDsKKwkJZ290byBkb25lOworCX0KKwor CXNpaTkwMnhfd3JpdGUoc2lpOTAyeC0+Y2xpZW50LCBTSUk5MDJYX1NZU19DT05UUk9MLAorCQkg ICAgICBvbGQgfCBTSUk5MDJYX1NZU19DVFJfRERDX0JVU19BVkFJKTsKKworCS8qIGVkaWQgcmVh ZGluZyAqLworCWVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLCBhZGFwdGVyKTsKKworCWNu dCA9IDEwMDsKKwlkbyB7CisJCWNudC0tOworCQlzaWk5MDJ4X3dyaXRlKHNpaTkwMngtPmNsaWVu dCwgU0lJOTAyWF9TWVNfQ09OVFJPTCwKKwkJCSAgICAgIG9sZCAmIH5TSUk5MDJYX1NZU19DVFJf RERDX0JVU19BVkFJKTsKKwkJbXNsZWVwKDIwKTsKKwkJZGF0ID0gc2lpOTAyeF9yZWFkKHNpaTkw MngtPmNsaWVudCwgU0lJOTAyWF9TWVNfQ09OVFJPTCk7CisJfSB3aGlsZSAoKGRhdCAmIDB4Nikg JiYgY250KTsKKworCWlmICghY250KQorCQllZGlkID0gTlVMTDsKKworZG9uZToKKwlzaWk5MDJ4 X3dyaXRlKHNpaTkwMngtPmNsaWVudCwgU0lJOTAyWF9TWVNfQ09OVFJPTCwgb2xkKTsKKwlyZXR1 cm4gZWRpZDsKK30KKworc3RhdGljIHZvaWQgZGV0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3Qg KndvcmspCit7CisJc3RydWN0IGZiX2luZm8gKmZiaSA9IHNpaTkwMngtPmZiaTsKKwlzdHJ1Y3Qg ZnNsX2RjdV9kcm1faGRtaWNvbiAqaGRtaWNvbiA9IHNpaTkwMngtPmhkbWljb247CisJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGhkbWljb24tPmNvbm5lY3Rvci5kZXY7CisJaW50IHZhbDsKKwor CXZhbCA9IHNpaTkwMnhfcmVhZChzaWk5MDJ4LT5jbGllbnQsIFNJSTkwMlhfVFBJX0lOVF9TVEFU VVMpOworCWlmICghKHZhbCAmIDB4MSkgJiYgIWdfZW5hYmxlX2hkbWkpCisJCWdvdG8gZXJyOwor CisJLyogY2FibGUgY29ubmVjdGlvbiBjaGFuZ2VzICovCisJaWYgKHZhbCAmIFNJSTkwMlhfVFBJ X0lOVF9QTFVHX0lOIHx8IGdfZW5hYmxlX2hkbWkpIHsKKwkJaGRtaWNvbi0+c3RhdHVzID0gY29u bmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisKKwkJLyogbWFrZSBzdXJlIGZiIGlzIHBvd2VyZG93 biAqLworCQljb25zb2xlX2xvY2soKTsKKwkJZmJfYmxhbmsoZmJpLCBGQl9CTEFOS19QT1dFUkRP V04pOworCQljb25zb2xlX3VubG9jaygpOworCisJCWNvbnNvbGVfbG9jaygpOworCQlmYl9ibGFu ayhmYmksIEZCX0JMQU5LX1VOQkxBTkspOworCQljb25zb2xlX3VubG9jaygpOworCX0gZWxzZSB7 CisJCWNvbnNvbGVfbG9jaygpOworCQlmYl9ibGFuayhmYmksIEZCX0JMQU5LX1BPV0VSRE9XTik7 CisJCWNvbnNvbGVfdW5sb2NrKCk7CisJfQorCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChkZXYp OworCitlcnI6CisJc2lpOTAyeF93cml0ZShzaWk5MDJ4LT5jbGllbnQsIFNJSTkwMlhfVFBJX0lO VF9TVEFUVVMsIHZhbCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaWk5MDJ4X2RldGVjdF9o YW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJaWYgKGdfZW5hYmxlX2hkbWkpCisJCWdf ZW5hYmxlX2hkbWkgPSBmYWxzZTsKKworCWlmIChzaWk5MDJ4LT5mYmkpCisJCXNjaGVkdWxlX2Rl bGF5ZWRfd29yaygmc2lpOTAyeC0+ZGV0X3dvcmssCisJCQkJICAgICAgbXNlY3NfdG9famlmZmll cygyMCkpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgc2lpOTAyeF9w b3dlcm9uKHZvaWQpCit7CisJLyogVHVybiBvbiBEVkkgb3IgSERNSSAqLworCXNpaTkwMnhfd3Jp dGUoc2lpOTAyeC0+Y2xpZW50LCBTSUk5MDJYX1NZU19DT05UUk9MLCAweDAwKTsKK30KKworc3Rh dGljIHZvaWQgc2lpOTAyeF9wb3dlcm9mZih2b2lkKQoreworCS8qIGRpc2FibGUgdG1kcyBiZWZv cmUgY2hhbmdpbmcgcmVzb2x1dGlvbiAqLworCXNpaTkwMnhfd3JpdGUoc2lpOTAyeC0+Y2xpZW50 LCBTSUk5MDJYX1NZU19DT05UUk9MLCAweDEwKTsKK30KKworc3RhdGljIGludCBzaWk5MDJ4X2Zi X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkgICAgdW5zaWduZWQgbG9uZyB2 YWwsIHZvaWQgKnYpCit7CisJc3RydWN0IGZiX2V2ZW50ICpldmVudCA9IHY7CisJc3RydWN0IGZi X2luZm8gKmZiaSA9IGV2ZW50LT5pbmZvOworCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIEZCX0VW RU5UX0ZCX1JFR0lTVEVSRUQ6CisJCWlmIChzaWk5MDJ4LT5mYmkpCisJCQlicmVhazsKKwkJc2lp OTAyeC0+ZmJpID0gZmJpOworCQlpZiAoZ19lbmFibGVfaGRtaSAmJiBzaWk5MDJ4LT5mYmkpIHsK KwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc2lpOTAyeC0+ZGV0X3dvcmssCisJCQkJCSAgICAg IG1zZWNzX3RvX2ppZmZpZXMoMjApKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEZCX0VWRU5UX01P REVfQ0hBTkdFOgorCQlicmVhazsKKwljYXNlIEZCX0VWRU5UX0JMQU5LOgorCQlpZiAoKigoaW50 ICopZXZlbnQtPmRhdGEpID09IEZCX0JMQU5LX1VOQkxBTkspCisJCQlzaWk5MDJ4X3Bvd2Vyb24o KTsKKwkJZWxzZQorCQkJc2lpOTAyeF9wb3dlcm9mZigpOworCQlicmVhazsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2lpOTAyeF9jaGlwX2lkKHN0cnVjdCBzaWk5MDJ4X2Rh dGEgKnNpaTkwMngpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNpaTkwMnhfdG9f aTJjKHNpaTkwMngpOworCWludCB2YWw7CisKKwkvKiByZWFkIGRldmljZSBJRCAqLworCXZhbCA9 IHNpaTkwMnhfcmVhZChjbGllbnQsIFNJSTkwMlhfVFBJX0ZBTUlMWV9ERVZfSUQpOworCXByX2lu Zm8oIlNpaTkwMng6IHJlYWQgaWQgPSAweCUwMlgiLCB2YWwpOworCXZhbCA9IHNpaTkwMnhfcmVh ZChjbGllbnQsIFNJSTkwMlhfVFBJX0RFVl9SRVZfSUQpOworCXByX2luZm8oIi0weCUwMlgiLCB2 YWwpOworCXZhbCA9IHNpaTkwMnhfcmVhZChjbGllbnQsIFNJSTkwMlhfVFBJX1JFVl9MRVZFTF9J RCk7CisJcHJfaW5mbygiLTB4JTAyWCIsIHZhbCk7CisJdmFsID0gc2lpOTAyeF9yZWFkKGNsaWVu dCwgU0lJOTAyWF9UUElfSERDUF9SRVYpOworCXByX2luZm8oIi0weCUwMlhcbiIsIHZhbCk7Cit9 CisKK3N0YXRpYyBpbnQgc2lpOTAyeF9pbml0aWFsaXplKHN0cnVjdCBzaWk5MDJ4X2RhdGEgKnNp aTkwMngpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHNpaTkwMnhfdG9faTJjKHNp aTkwMngpOworCWludCByZXQsIGNudDsKKworCWZvciAoY250ID0gMDsgY250IDwgNTsgY250Kysp IHsKKwkJLyogU2V0IDkwMnggaW4gaGFyZHdhcmUgVFBJIG1vZGUgb24gYW5kIGp1bXAgb3V0IG9m IEQzIHN0YXRlICovCisJCXJldCA9IHNpaTkwMnhfd3JpdGUoY2xpZW50LCBTSUk5MDJYX1RSQU5T X01PREVfRElGRiwgMHgwMCk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisJfQorCWlmICgw ICE9IHJldCkKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJjb3VuZCBub3QgZmluZCBkZXZpY2Vc biIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2lpOTAyeF9lbmFibGVfc291 cmNlKHN0cnVjdCBzaWk5MDJ4X2RhdGEgKnNpaTkwMngpCit7CisJc3RydWN0IGkyY19jbGllbnQg KmNsaWVudCA9IHNpaTkwMnhfdG9faTJjKHNpaTkwMngpOworCWludCB2YWw7CisKKwlzaWk5MDJ4 X3dyaXRlKGNsaWVudCwgU0lJOTAyWF9HRU5FUkFMX1BVUlBPU0VfSU8wLCAweDAxKTsKKwlzaWk5 MDJ4X3dyaXRlKGNsaWVudCwgU0lJOTAyWF9HRU5FUkFMX1BVUlBPU0VfSU8xLCAweDgyKTsKKwl2 YWwgPSBzaWk5MDJ4X3JlYWQoY2xpZW50LCBTSUk5MDJYX0dFTkVSQUxfUFVSUE9TRV9JTzIpOwor CXZhbCB8PSAweDE7CisJc2lpOTAyeF93cml0ZShjbGllbnQsIFNJSTkwMlhfR0VORVJBTF9QVVJQ T1NFX0lPMiwgdmFsKTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBuYiA9IHsK Kwkubm90aWZpZXJfY2FsbCA9IHNpaTkwMnhfZmJfZXZlbnQsCit9OworCitzdGF0aWMgaW50IHNp aTkwMnhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSBjb25zdCBzdHJ1Y3Qg aTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gdG9faTJj X2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKKwlpbnQgcmV0LCBlcnI7CisKKwlpZiAoIWdf ZW5hYmxlX2hkbWkpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlv bmFsaXR5KGFkYXAsIEkyQ19GVU5DX1NNQlVTX0JZVEUpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ ZGV2LCAiaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkgZXJyb3JcbiIpOworCQlyZXR1cm4gLUVOT0RF VjsKKwl9CisKKwlzaWk5MDJ4ID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKCpz aWk5MDJ4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzaWk5MDJ4KQorCQlyZXR1cm4gLUVOT01FTTsK KworCXNpaTkwMngtPmNsaWVudCA9IGNsaWVudDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50 LCBzaWk5MDJ4KTsKKworCWVyciA9IHNpaTkwMnhfaW5pdGlhbGl6ZShzaWk5MDJ4KTsKKwlpZiAo ZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2lpOTAyeF9jaGlwX2lkKHNpaTkwMngpOworCXNpaTkw MnhfcG93ZXJfdXBfdHgoc2lpOTAyeCk7CisJc2lpOTAyeF9lbmFibGVfc291cmNlKHNpaTkwMngp OworCisJaWYgKHNpaTkwMnhfZ2V0X2VkaWRfcHJlY29uZmlnKCkgPCAwKQorCQlkZXZfd2Fybigm Y2xpZW50LT5kZXYsICJSZWFkIGVkaWQgcHJlY29uZmlnIGZhaWxlZFxuIik7CisKKwlpZiAoY2xp ZW50LT5pcnEpIHsKKwkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmY2xpZW50LT5kZXYsIGNsaWVu dC0+aXJxLAorCQkJCSAgICAgICBzaWk5MDJ4X2RldGVjdF9oYW5kbGVyLCAwLAorCQkJCSAgICAg ICAiU0lJOTAyeF9kZXQiLCBzaWk5MDJ4KTsKKwkJaWYgKHJldCA8IDApCisJCQlkZXZfd2Fybigm Y2xpZW50LT5kZXYsCisJCQkJICJjb3VuZCBub3QgcmVxdWVzdCBkZXQgaXJxICVkXG4iLAorCQkJ CSBjbGllbnQtPmlycSk7CisJCWVsc2UgeworCQkJSU5JVF9ERUxBWUVEX1dPUksoJnNpaTkwMngt PmRldF93b3JrLCBkZXRfd29ya2VyKTsKKwkJCS8qZW5hYmxlIGNhYmxlIGhvdCBwbHVnIGlycSov CisJCQlzaWk5MDJ4X3dyaXRlKGNsaWVudCwgU0lJOTAyWF9UUElfSU5UX0VOQUJMRSwgMHgwMSk7 CisJCX0KKwl9CisKKwlmYl9yZWdpc3Rlcl9jbGllbnQoJm5iKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IHNpaTkwMnhfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7 CisJZmJfdW5yZWdpc3Rlcl9jbGllbnQoJm5iKTsKKwlzaWk5MDJ4X3Bvd2Vyb2ZmKCk7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzaWk5MDJ4X2lk W10gPSB7CisJeyAic2lpOTAyeCIsIDAgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxF KGkyYywgc2lpOTAyeF9pZCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNp aTkwMnhfZHRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJzaWk5MDJ4IiwgfSwKKwl7IC8q IHNlbnRpbmVsICovIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzaWk5MDJ4X2R0X2lk cyk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzaWk5MDJ4X2kyY19kcml2ZXIgPSB7CisJ LmRyaXZlciA9IHsKKwkJLm5hbWUgPSAic2lpOTAyeCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxF LAorCQkub2ZfbWF0Y2hfdGFibGUgPSBzaWk5MDJ4X2R0X2lkcywKKwl9LAorCS5wcm9iZSA9IHNp aTkwMnhfcHJvYmUsCisJLnJlbW92ZSA9IHNpaTkwMnhfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHNp aTkwMnhfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBlbmFibGVfaGRtaV9zZXR1cChjaGFy ICpzdHIpCit7CisJZ19lbmFibGVfaGRtaSA9IHRydWU7CisKKwlyZXR1cm4gMTsKK30KK19fc2V0 dXAoImhkbWkiLCBlbmFibGVfaGRtaV9zZXR1cCk7CisKK3N0YXRpYyBpbnQKK2ZzbF9kY3VfZHJt X2hkbWllbmNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkg c3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAorCQkJCSBzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg ZnNsX2RjdV9kcm1faGRtaWVuY19kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikK K3sKK30KKworc3RhdGljIHZvaWQgZnNsX2RjdV9kcm1faGRtaWVuY19lbmFibGUoc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyKQoreworfQorCitzdGF0aWMgdm9pZCBmc2xfZGN1X2RybV9oZG1p ZW5jX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQkJIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFk anVzdGVkX21vZGUpCit7CisJc3RydWN0IHZpZGVvbW9kZSB2bTsKKwl1MTYgZGF0YVs0XTsKKwl1 MzIgcmVmcmVzaDsKKwl1OCAqdG1wOworCWludCBpOworCisJLyogUG93ZXIgdXAgKi8KKwlzaWk5 MDJ4X3Bvd2VyX3VwX3R4KHNpaTkwMngpOworCisJZHJtX2Rpc3BsYXlfbW9kZV90b192aWRlb21v ZGUobW9kZSwgJnZtKTsKKwlkYXRhWzBdID0gUElDT1MyS0haKHZtLnBpeGVsY2xvY2spIC8gMTA7 CisJZGF0YVsyXSA9IHZtLmhzeW5jX2xlbiArIHZtLmhiYWNrX3BvcmNoICsKKwkJICB2bS5oYWN0 aXZlICsgdm0uaGZyb250X3BvcmNoOworCWRhdGFbM10gPSB2bS52c3luY19sZW4gKyB2bS52ZnJv bnRfcG9yY2ggKworCQkgIHZtLnZhY3RpdmUgKyB2bS52YmFja19wb3JjaDsKKwlyZWZyZXNoID0g ZGF0YVsyXSAqIGRhdGFbM107CisJcmVmcmVzaCA9IChQSUNPUzJLSFoodm0ucGl4ZWxjbG9jaykg KiAxMDAwKSAvIHJlZnJlc2g7CisJZGF0YVsxXSA9IHJlZnJlc2ggKiAxMDA7CisKKwl0bXAgPSAo dTggKilkYXRhOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCXNpaTkwMnhfd3JpdGUoc2lp OTAyeC0+Y2xpZW50LCBpLCB0bXBbaV0pOworCisJLyogaW5wdXQgYnVzL3BpeGVsOiBmdWxsIHBp eGVsIHdpZGUgKDI0Yml0KSwgcmlzaW5nIGVkZ2UgKi8KKwlzaWk5MDJ4X3dyaXRlKHNpaTkwMngt PmNsaWVudCwgU0lJOTAyWF9JTlBVVF9CVVNfRk1ULCAweDcwKTsKKwkvKiBTZXQgaW5wdXQgZm9y bWF0IHRvIFJHQiAqLworCXNpaTkwMnhfd3JpdGUoc2lpOTAyeC0+Y2xpZW50LCBTSUk5MDJYX1RQ SV9BVklfSU5QVVRfRk1ULCAweDAwKTsKKwkvKiBzZXQgb3V0cHV0IGZvcm1hdCB0byBSR0IgKi8K KwlzaWk5MDJ4X3dyaXRlKHNpaTkwMngtPmNsaWVudCwgU0lJOTAyWF9UUElfQVZJX09VVFBVVF9G TVQsIDB4MDApOworCS8qIGF1ZGlvIHNldHVwICovCisJc2lpOTAyeF93cml0ZShzaWk5MDJ4LT5j bGllbnQsIFNJSTkwMlhfVFBJX0FVRElPX0NGRzEsIDB4MDApOworCXNpaTkwMnhfd3JpdGUoc2lp OTAyeC0+Y2xpZW50LCBTSUk5MDJYX1RQSV9BVURJT19DRkcyLCAweDQwKTsKKwlzaWk5MDJ4X3dy aXRlKHNpaTkwMngtPmNsaWVudCwgU0lJOTAyWF9UUElfQVVESU9fQ0ZHMywgMHgwMCk7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIGVuY29kZXJfaGVs cGVyX2Z1bmNzID0geworCS5hdG9taWNfY2hlY2sgPSBmc2xfZGN1X2RybV9oZG1pZW5jX2F0b21p Y19jaGVjaywKKwkuZGlzYWJsZSA9IGZzbF9kY3VfZHJtX2hkbWllbmNfZGlzYWJsZSwKKwkuZW5h YmxlID0gZnNsX2RjdV9kcm1faGRtaWVuY19lbmFibGUsCisJLm1vZGVfc2V0ID0gZnNsX2RjdV9k cm1faGRtaWVuY19tb2RlX3NldCwKK307CisKK3N0YXRpYyB2b2lkIGZzbF9kY3VfZHJtX2hkbWll bmNfZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJZHJtX2VuY29kZXJf Y2xlYW51cChlbmNvZGVyKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9m dW5jcyBlbmNvZGVyX2Z1bmNzID0geworCS5kZXN0cm95ID0gZnNsX2RjdV9kcm1faGRtaWVuY19k ZXN0cm95LAorfTsKKworaW50IGZzbF9kY3VfZHJtX2hkbWllbmNfY3JlYXRlKHN0cnVjdCBmc2xf ZGN1X2RybV9kZXZpY2UgKmZzbF9kZXYsCisJCQkgICAgICAgc3RydWN0IGRybV9jcnRjICpjcnRj KQoreworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlpbnQgcmV0OworCisJZW5jb2Rl ciA9IGRldm1fa3phbGxvYyhmc2xfZGV2LT5kZXYsIHNpemVvZigqZW5jb2RlciksIEdGUF9LRVJO RUwpOworCWlmICghZW5jb2RlcikKKwkJcmV0dXJuIC0xOworCisJZW5jb2Rlci0+cG9zc2libGVf Y3J0Y3MgPSAxOworCXJldCA9IGRybV9lbmNvZGVyX2luaXQoZnNsX2Rldi0+ZHJtLCBlbmNvZGVy LCAmZW5jb2Rlcl9mdW5jcywKKwkJCSAgICAgICBEUk1fTU9ERV9FTkNPREVSX1RNRFMpOworCWlm IChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZHJtX2VuY29kZXJfaGVscGVyX2FkZChlbmNv ZGVyLCAmZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOworCWVuY29kZXItPmNydGMgPSBjcnRjOworCisJ cmV0dXJuIDA7Cit9CisKKwlzdHJ1Y3QgZnNsX2RjdV9kcm1faGRtaWNvbiAqaGRtaWNvbjsKKyNk ZWZpbmUgdG9fZnNsX2RjdV9kcm1faGRtaWNvbihjb25uZWN0b3IpIFwKKwljb250YWluZXJfb2Yo Y29ubmVjdG9yLCBzdHJ1Y3QgZnNsX2RjdV9kcm1faGRtaWNvbiwgY29ubmVjdG9yKQorCitzdGF0 aWMgc3RydWN0IGRybV9lbmNvZGVyICpmc2xfZGN1X2RybV9oZG1pX2ZpbmRfZW5jb2RlcihzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwor CWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9s aXN0LCBoZWFkKSB7CisJCWlmIChlbmNvZGVyLT5lbmNvZGVyX3R5cGUgPT0gRFJNX01PREVfRU5D T0RFUl9UTURTKQorCQkJcmV0dXJuIGVuY29kZXI7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisK K3N0YXRpYyB2b2lkIGZzbF9kY3VfZHJtX2hkbWljb25fZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yKQoreworCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3Ip OworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworfQorCitzdGF0aWMgZW51bSBk cm1fY29ubmVjdG9yX3N0YXR1cworZnNsX2RjdV9kcm1faGRtaWNvbl9kZXRlY3Qoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKK3sKKwlzdHJ1Y3QgZnNsX2RjdV9k cm1faGRtaWNvbiAqaGRtaWNvbiA9IHRvX2ZzbF9kY3VfZHJtX2hkbWljb24oY29ubmVjdG9yKTsK KworCWlmIChoZG1pY29uLT5zdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQp CisJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwllbHNlCisJCXJldHVy biBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fY29ubmVjdG9yX2Z1bmNzIGZzbF9kY3VfZHJtX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKKwkuYXRv bWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNh dGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29u bmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCisJLmRlc3Ryb3kgPSBmc2xfZGN1X2RybV9oZG1pY29uX2Rl c3Ryb3ksCisJLmRldGVjdCA9IGZzbF9kY3VfZHJtX2hkbWljb25fZGV0ZWN0LAorCS5kcG1zID0g ZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVs cGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLnJlc2V0ID0gZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fZW5jb2RlciAq Citmc2xfZGN1X2RybV9oZG1pY29uX2Jlc3RfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsK KworCXJldHVybiBmc2xfZGN1X2RybV9oZG1pX2ZpbmRfZW5jb2RlcihkZXYpOworfQorCitzdGF0 aWMgaW50IGZzbF9kY3VfZHJtX2hkbWljb25fZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2 OworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IHRvX2kyY19hZGFwdGVyKHNpaTkwMngtPmNs aWVudC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGU7CisJaW50IHJldDsKKworCWVkaWQgPSBzaWk5MDJ4X2RybV9nZXRfZWRp ZChjb25uZWN0b3IsIGFkYXApOworCWlmIChlZGlkKSB7CisJCWRybV9tb2RlX2Nvbm5lY3Rvcl91 cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIGVkaWQpOworCQlyZXQgPSBkcm1fYWRkX2Vk aWRfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKKwkJa2ZyZWUoZWRpZCk7CisJfSBlbHNlIHsKKwkJ ZGV2X2RiZyhkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgZWRpZFxuIik7CisJfQorCisJbGlzdF9m b3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yLT5wcm9iZWRfbW9kZXMsIGhlYWQpIHsKKwkJ aWYgKG1vZGUtPmhkaXNwbGF5ID09IDEwMjQgfHwgbW9kZS0+dmRpc3BsYXkgPT0gNzY4KQorCQkJ bW9kZS0+dHlwZSB8PSBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsKKwkJZWxzZQorCQkJbW9kZS0+ dHlwZSAmPSB+RFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CisJfQorCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGludCBmc2xfZGN1X2RybV9oZG1pY29uX21vZGVfdmFsaWQoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSkKK3sKKwlpZiAobW9kZS0+aGRpc3BsYXkgPiAxMDI0KQorCQlyZXR1cm4gTU9ERV9WSVJUVUFM X1g7CisJZWxzZSBpZgkobW9kZS0+dmRpc3BsYXkgPiA3NjgpCisJCXJldHVybiBNT0RFX1ZJUlRV QUxfWTsKKworCXJldHVybiBNT0RFX09LOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9j b25uZWN0b3JfaGVscGVyX2Z1bmNzIGNvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmJlc3Rf ZW5jb2RlciA9IGZzbF9kY3VfZHJtX2hkbWljb25fYmVzdF9lbmNvZGVyLAorCS5nZXRfbW9kZXMg PSBmc2xfZGN1X2RybV9oZG1pY29uX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IGZzbF9kY3Vf ZHJtX2hkbWljb25fbW9kZV92YWxpZCwKK307CisKK2ludCBmc2xfZGN1X2RybV9oZG1pY29uX2Ny ZWF0ZShzdHJ1Y3QgZnNsX2RjdV9kcm1fZGV2aWNlICpmc2xfZGV2KQoreworCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBmc2xfZGV2LT5kcm07CisJc3RydWN0IGZzbF9kY3VfZHJtX2hkbWljb24g KmhkbWljb247CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXI7CisJaW50IHJldDsKKworCWkyY19hZGRfZHJpdmVyKCZzaWk5MDJ4 X2kyY19kcml2ZXIpOworCisJaGRtaWNvbiA9IGRldm1fa3phbGxvYyhmc2xfZGV2LT5kZXYsCisJ CQkgICAgICAgc2l6ZW9mKHN0cnVjdCBmc2xfZGN1X2RybV9oZG1pY29uKSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCFoZG1pY29uKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvbm5lY3RvciA9ICZoZG1p Y29uLT5jb25uZWN0b3I7CisJc2lpOTAyeC0+aGRtaWNvbiA9IGhkbWljb247CisKKwljb25uZWN0 b3ItPmRpc3BsYXlfaW5mby53aWR0aF9tbSA9IDA7CisJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8u aGVpZ2h0X21tID0gMDsKKwljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9I UEQ7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoZnNsX2Rldi0+ZHJtLCBjb25uZWN0b3Is CisJCQkJICZmc2xfZGN1X2RybV9jb25uZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5F Q1RPUl9IRE1JQSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwljb25uZWN0b3It PmRwbXMgPSBEUk1fTU9ERV9EUE1TX09GRjsKKwlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoY29u bmVjdG9yLCAmY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9y ZWdpc3Rlcihjb25uZWN0b3IpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9jbGVhbnVwOwor CisJZW5jb2RlciA9IGZzbF9kY3VfZHJtX2hkbWlfZmluZF9lbmNvZGVyKGRldik7CisJaWYgKCFl bmNvZGVyKQorCQlnb3RvIGVycl9jbGVhbnVwOworCXJldCA9IGRybV9tb2RlX2Nvbm5lY3Rvcl9h dHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOworCWlmIChyZXQgPCAwKQorCQlnb3Rv IGVycl9zeXNmczsKKworCWNvbm5lY3Rvci0+ZW5jb2RlciA9IGVuY29kZXI7CisKKwlkcm1fb2Jq ZWN0X3Byb3BlcnR5X3NldF92YWx1ZQorCQkoJmNvbm5lY3Rvci0+YmFzZSwgZnNsX2Rldi0+ZHJt LT5tb2RlX2NvbmZpZy5kcG1zX3Byb3BlcnR5LAorCQlEUk1fTU9ERV9EUE1TX09GRik7CisKKwly ZXR1cm4gMDsKKworZXJyX3N5c2ZzOgorCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0 b3IpOworZXJyX2NsZWFudXA6CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7CisJ cmV0dXJuIHJldDsKK30KKworTU9EVUxFX0FVVEhPUigiRnJlZXNjYWxlIFNlbWljb25kdWN0b3Is IEluYy4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU0lJOTAyeCBEVkkvSERNSSBkcml2ZXIiKTsK K01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9mc2wt ZGN1L2ZzbF9kY3VfZHJtX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL2ZzbC1kY3UvZnNsX2RjdV9k cm1fa21zLmMKaW5kZXggMGVmNTk1OS4uZjQyZWY1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2ZzbC1kY3UvZnNsX2RjdV9kcm1fa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ZzbC1k Y3UvZnNsX2RjdV9kcm1fa21zLmMKQEAgLTE3LDEwICsxNywxOCBAQAogI2luY2x1ZGUgImZzbF9k Y3VfZHJtX2NydGMuaCIKICNpbmNsdWRlICJmc2xfZGN1X2RybV9kcnYuaCIKIAorc3RhdGljIHZv aWQgZnNsX2RjdV9kcm1fb3V0cHV0X3BvbGxfY2hhbmdlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQoreworCXN0cnVjdCBmc2xfZGN1X2RybV9kZXZpY2UgKmZzbF9kZXYgPSBkZXYtPmRldl9wcml2 YXRlOworCisJZHJtX2ZiZGV2X2NtYV9ob3RwbHVnX2V2ZW50KGZzbF9kZXYtPmZiZGV2KTsKK30K Kwogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgZnNsX2RjdV9kcm1f bW9kZV9jb25maWdfZnVuY3MgPSB7CiAJLmF0b21pY19jaGVjayA9IGRybV9hdG9taWNfaGVscGVy X2NoZWNrLAogCS5hdG9taWNfY29tbWl0ID0gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0LAogCS5m Yl9jcmVhdGUgPSBkcm1fZmJfY21hX2NyZWF0ZSwKKwkub3V0cHV0X3BvbGxfY2hhbmdlZCA9IGZz bF9kY3VfZHJtX291dHB1dF9wb2xsX2NoYW5nZWQsCiB9OwogCiBpbnQgZnNsX2RjdV9kcm1fbW9k ZXNldF9pbml0KHN0cnVjdCBmc2xfZGN1X2RybV9kZXZpY2UgKmZzbF9kZXYpCkBAIC0zNiw3ICs0 NCw5IEBAIGludCBmc2xfZGN1X2RybV9tb2Rlc2V0X2luaXQoc3RydWN0IGZzbF9kY3VfZHJtX2Rl dmljZSAqZnNsX2RldikKIAlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoZnNsX2Rldi0+ZHJtKTsK IAlmc2xfZGN1X2RybV9jcnRjX2NyZWF0ZShmc2xfZGV2KTsKIAlmc2xfZGN1X2RybV9lbmNvZGVy X2NyZWF0ZShmc2xfZGV2LCAmZnNsX2Rldi0+Y3J0Yyk7CisJZnNsX2RjdV9kcm1faGRtaWVuY19j cmVhdGUoZnNsX2RldiwgJmZzbF9kZXYtPmNydGMpOwogCWZzbF9kY3VfZHJtX2Nvbm5lY3Rvcl9j cmVhdGUoZnNsX2RldiwgJmZzbF9kZXYtPmVuY29kZXIpOworCWZzbF9kY3VfZHJtX2hkbWljb25f Y3JlYXRlKGZzbF9kZXYpOwogCWRybV9tb2RlX2NvbmZpZ19yZXNldChmc2xfZGV2LT5kcm0pOwog CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZnNsLWRjdS9mc2xfZGN1 X2RybV9vdXRwdXQuaCBiL2RyaXZlcnMvZ3B1L2RybS9mc2wtZGN1L2ZzbF9kY3VfZHJtX291dHB1 dC5oCmluZGV4IDcwOTMxMDkuLmZlYWIxNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9m c2wtZGN1L2ZzbF9kY3VfZHJtX291dHB1dC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9mc2wtZGN1 L2ZzbF9kY3VfZHJtX291dHB1dC5oCkBAIC0xOCw2ICsxOCwxMiBAQCBzdHJ1Y3QgZnNsX2RjdV9k cm1fY29ubmVjdG9yIHsKIAlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKIH07CiAKK3N0cnVjdCBm c2xfZGN1X2RybV9oZG1pY29uIHsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uZWN0b3I7CisJ c3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0 YXR1czsKK307CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZzbF9kY3VfZHJtX2Nvbm5lY3RvciAq CiB0b19mc2xfZGN1X2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29uKQogewpAQCAt MjksNSArMzUsOSBAQCBpbnQgZnNsX2RjdV9kcm1fY29ubmVjdG9yX2NyZWF0ZShzdHJ1Y3QgZnNs X2RjdV9kcm1fZGV2aWNlICpmc2xfZGV2LAogCQkJCSBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIpOwogaW50IGZzbF9kY3VfZHJtX2VuY29kZXJfY3JlYXRlKHN0cnVjdCBmc2xfZGN1X2RybV9k ZXZpY2UgKmZzbF9kZXYsCiAJCQkgICAgICAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKK2ludCBm c2xfZGN1X2RybV9oZG1pY29uX2NyZWF0ZShzdHJ1Y3QgZnNsX2RjdV9kcm1fZGV2aWNlICpmc2xf ZGV2KTsKK2ludCBmc2xfZGN1X2RybV9oZG1pZW5jX2NyZWF0ZShzdHJ1Y3QgZnNsX2RjdV9kcm1f ZGV2aWNlICpmc2xfZGV2LAorCQkJICAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CisKIAog I2VuZGlmIC8qIF9fRlNMX0RDVV9EUk1fQ09OTkVDVE9SX0hfXyAqLwotLSAKMi4xLjAuMjcuZzk2 ZGIzMjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==