From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bibby Hsieh Subject: [PATCH v1 4/7] drm/mediatek: add hdmi driver for different hardware Date: Mon, 14 May 2018 15:52:40 +0800 Message-ID: <20180514075243.5442-5-bibby.hsieh@mediatek.com> References: <20180514075243.5442-1-bibby.hsieh@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180514075243.5442-1-bibby.hsieh@mediatek.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: David Airlie , Matthias Brugger , Daniel Vetter , dri-devel@lists.freedesktop.org, linux-mediatek@lists.infradead.org Cc: chunhui dai , linux-kernel@vger.kernel.org, Cawa Cheng , Mao Huang , Thierry Reding , Yingjoe Chen , Sascha Hauer , linux-arm-kernel@lists.infradead.org List-Id: linux-mediatek@lists.infradead.org RnJvbTogY2h1bmh1aSBkYWkgPGNodW5odWkuZGFpQG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2gg YWRkcyBoZG1pIGRyaXZlciBzdXBwb3QgZm9yIGJvdGggTVQyNzAxIGFuZCBNVDc2MjMuCkFuZCBh bHNvIHN1cHBvcnQgb3RoZXIgKGV4aXN0aW5nIG9yIGZ1dHVyZSkgY2hpcHMgdGhhdCB1c2UKdGhl IHNhbWUgYmluZGluZyBhbmQgZHJpdmVyLgoKU2lnbmVkLW9mZi1ieTogQ2h1bmh1aSBEYWkgPGNo dW5odWkuZGFpQG1lZGlhdGVrLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFr ZWZpbGUgICAgICAgICAgICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2hkbWkuYyAgICAgICAgICAgIHwgIDkxICsrKysrLS0tCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2hkbWkuaCAgICAgICAgICAgIHwgIDI4ICsrKwogZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19oZG1pX3BoeS5jICAgICAgICB8IDE1NyArKysrKysrKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfbXQyNzAxX2hkbWlfcGh5LmMgfCAzMDcgKysrKysrKysrKysrKysr KysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19tdDgxNzNfaGRtaV9waHku YyB8IDEyOSArLS0tLS0tLS0tLQogNyBmaWxlcyBjaGFuZ2VkLCA1NjggaW5zZXJ0aW9ucygrKSwg MTQ5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfaGRtaV9waHkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfbXQyNzAxX2hkbWlfcGh5LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUK aW5kZXggY2U4M2MzOTZhNzQyLi40NDQ2NDg5M2MxY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFr ZWZpbGUKQEAgLTE4LDYgKzE4LDggQEAgb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykgKz0gbWVk aWF0ZWstZHJtLm8KIG1lZGlhdGVrLWRybS1oZG1pLW9ianMgOj0gbXRrX2NlYy5vIFwKIAkJCSAg bXRrX2hkbWkubyBcCiAJCQkgIG10a19oZG1pX2RkYy5vIFwKLQkJCSAgbXRrX210ODE3M19oZG1p X3BoeS5vCisJCQkgIG10a19tdDI3MDFfaGRtaV9waHkubyBcCisJCQkgIG10a19tdDgxNzNfaGRt aV9waHkubyBcCisJCQkgIG10a19oZG1pX3BoeS5vCiAKIG9iai0kKENPTkZJR19EUk1fTUVESUFU RUtfSERNSSkgKz0gbWVkaWF0ZWstZHJtLWhkbWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hk bWkuYwppbmRleCA1OWExMTAyNmRjZWIuLjg1ZTI4MDk2MmFhZCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19oZG1pLmMKQEAgLTIzMyw2ICsyMzMsNyBAQCBzdGF0aWMgdm9pZCBtdGtfaGRtaV9o d192aWRfYmxhY2soc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGJsYWNrKQogc3RhdGljIHZv aWQgbXRrX2hkbWlfaHdfbWFrZV9yZWdfd3JpdGFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBi b29sIGVuYWJsZSkKIHsKIAlzdHJ1Y3QgYXJtX3NtY2NjX3JlcyByZXM7CisJc3RydWN0IG10a19o ZG1pX3BoeSAqaGRtaV9waHkgPSBwaHlfZ2V0X2RydmRhdGEoaGRtaS0+cGh5KTsKIAogCS8qCiAJ ICogTVQ4MTczIEhETUkgaGFyZHdhcmUgaGFzIGFuIG91dHB1dCBjb250cm9sIGJpdCB0byBlbmFi bGUvZGlzYWJsZSBIRE1JCkBAIC0yNDAsOCArMjQxLDEzIEBAIHN0YXRpYyB2b2lkIG10a19oZG1p X2h3X21ha2VfcmVnX3dyaXRhYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUp CiAJICogVGhlIEFSTSB0cnVzdGVkIGZpcm13YXJlIHByb3ZpZGVzIGFuIEFQSSBmb3IgdGhlIEhE TUkgZHJpdmVyIHRvIHNldAogCSAqIHRoaXMgY29udHJvbCBiaXQgdG8gZW5hYmxlIEhETUkgb3V0 cHV0IGluIHN1cGVydmlzb3IgbW9kZS4KIAkgKi8KLQlhcm1fc21jY2Nfc21jKE1US19TSVBfU0VU X0FVVEhPUklaRURfU0VDVVJFX1JFRywgMHgxNDAwMDkwNCwgMHg4MDAwMDAwMCwKLQkJICAgICAg MCwgMCwgMCwgMCwgMCwgJnJlcyk7CisJaWYgKGhkbWlfcGh5LT5jb25mICYmIGhkbWlfcGh5LT5j b25mLT50el9lbmFibGVkKQorCQlhcm1fc21jY2Nfc21jKE1US19TSVBfU0VUX0FVVEhPUklaRURf U0VDVVJFX1JFRywgMHgxNDAwMDkwNCwKKwkJCSAgICAgIDB4ODAwMDAwMDAsIDAsIDAsIDAsIDAs IDAsICZyZXMpOworCWVsc2UKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAs CisJCQkJICAgaGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lTX0NGRzIwLAorCQkJCSAgIEhETUlf UFNFQ1VSX0VOLCBlbmFibGUgPyAwIDogSERNSV9QU0VDVVJfRU4pOwogCiAJcmVnbWFwX3VwZGF0 ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcy MCwKIAkJCSAgIEhETUlfUENMS19GUkVFX1JVTiwgZW5hYmxlID8gSERNSV9QQ0xLX0ZSRUVfUlVO IDogMCk7CkBAIC0xNDM3LDYgKzE0NDMsNyBAQCBzdGF0aWMgaW50IG10a19oZG1pX2R0X3BhcnNl X3BkYXRhKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpj ZWNfcGRldjsKIAlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CiAJc3RydWN0IHJlc291cmNlICptZW07 CisJY29uc3QgY2hhciAqcGh5X25hbWU7CiAJaW50IHJldDsKIAogCXJldCA9IG10a19oZG1pX2dl dF9hbGxfY2xrKGhkbWksIG5wKTsKQEAgLTE0NDUsOSArMTQ1MiwyMCBAQCBzdGF0aWMgaW50IG10 a19oZG1pX2R0X3BhcnNlX3BkYXRhKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKIAkJcmV0dXJuIHJl dDsKIAl9CiAKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgInBoeS1uYW1lcyIs ICZwaHlfbmFtZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g cmVhZCBwaHktbmFtZXM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwloZG1pLT5w aHkgPSBkZXZtX3BoeV9nZXQoZGV2LCBwaHlfbmFtZSk7CisJaWYgKElTX0VSUihoZG1pLT5waHkp KSB7CisJCXJldCA9IFBUUl9FUlIoaGRtaS0+cGh5KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gZ2V0IEhETUkgUEhZOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAkvKiBU aGUgQ0VDIG1vZHVsZSBoYW5kbGVzIEhETUkgaG90cGx1ZyBkZXRlY3Rpb24gKi8KLQljZWNfbnAg PSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShucC0+cGFyZW50LCBOVUxMLAotCQkJCQkgIm1lZGlh dGVrLG10ODE3My1jZWMiKTsKKwljZWNfbnAgPSBvZl9wYXJzZV9waGFuZGxlKG5wLCAiY2VjIiwg MCk7CiAJaWYgKCFjZWNfbnApIHsKIAkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZmluZCBDRUMg bm9kZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTQ4Niw4ICsxNTA0LDE0IEBAIHN0YXRp YyBpbnQgbXRrX2hkbWlfZHRfcGFyc2VfcGRhdGEoc3RydWN0IG10a19oZG1pICpoZG1pLAogCQly ZXR1cm4gUFRSX0VSUihoZG1pLT5yZWdzKTsKIAogCXJlbW90ZSA9IG9mX2dyYXBoX2dldF9yZW1v dGVfbm9kZShucCwgMSwgMCk7Ci0JaWYgKCFyZW1vdGUpCi0JCXJldHVybiAtRUlOVkFMOworCWlm ICghcmVtb3RlKSB7CisJCWkyY19ucCA9IG9mX3BhcnNlX3BoYW5kbGUobnAsICJkZGMtaTJjLWJ1 cyIsIDApOworCQlpZiAoIWkyY19ucCkgeworCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZmlu ZCBkZGMtaTJjLWJ1cyBub2RlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWdvdG8g ZmluZF9kZGNfYWRwdDsKKwl9CiAKIAlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHJlbW90 ZSwgImhkbWktY29ubmVjdG9yIikpIHsKIAkJaGRtaS0+bmV4dF9icmlkZ2UgPSBvZl9kcm1fZmlu ZF9icmlkZ2UocmVtb3RlKTsKQEAgLTE1MDcsNiArMTUzMSw3IEBAIHN0YXRpYyBpbnQgbXRrX2hk bWlfZHRfcGFyc2VfcGRhdGEoc3RydWN0IG10a19oZG1pICpoZG1pLAogCX0KIAlvZl9ub2RlX3B1 dChyZW1vdGUpOwogCitmaW5kX2RkY19hZHB0OgogCWhkbWktPmRkY19hZHB0ID0gb2ZfZmluZF9p MmNfYWRhcHRlcl9ieV9ub2RlKGkyY19ucCk7CiAJaWYgKCFoZG1pLT5kZGNfYWRwdCkgewogCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgZGRjIGkyYyBhZGFwdGVyIGJ5IG5vZGVcbiIpOwpA QCAtMTU3NSw2ICsxNjAwLDExIEBAIHN0YXRpYyBpbnQgbXRrX2hkbWlfYXVkaW9faHdfcGFyYW1z KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJaGRtaV9wYXJhbXMuYXVkX2kyc19m bXQgPSBIRE1JX0kyU19NT0RFX0kyU18yNEJJVDsKIAkJaGRtaV9wYXJhbXMuYXVkX21jbGsgPSBI RE1JX0FVRF9NQ0xLXzEyOEZTOwogCQlicmVhazsKKwljYXNlIEhETUlfU1BESUY6CisJCWhkbWlf cGFyYW1zLmF1ZF9jb2RlYyA9IEhETUlfQVVESU9fQ09ESU5HX1RZUEVfUENNOworCQloZG1pX3Bh cmFtcy5hdWRfc2FtcGVfc2l6ZSA9IEhETUlfQVVESU9fU0FNUExFX1NJWkVfMTY7CisJCWhkbWlf cGFyYW1zLmF1ZF9pbnB1dF90eXBlID0gSERNSV9BVURfSU5QVVRfU1BESUY7CisJCWJyZWFrOwog CWRlZmF1bHQ6CiAJCWRldl9lcnIoaGRtaS0+ZGV2LCAiJXM6IEludmFsaWQgREFJIGZvcm1hdCAl ZFxuIiwgX19mdW5jX18sCiAJCQlkYWlmbXQtPmZtdCk7CkBAIC0xNjUwLDE1ICsxNjgwLDE2IEBA IHN0YXRpYyB2b2lkIG10a19oZG1pX3JlZ2lzdGVyX2F1ZGlvX2RyaXZlcihzdHJ1Y3QgZGV2aWNl ICpkZXYpCiAJCS5tYXhfaTJzX2NoYW5uZWxzID0gMiwKIAkJLmkycyA9IDEsCiAJfTsKLQlzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCi0JcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdp c3Rlcl9kYXRhKGRldiwgSERNSV9DT0RFQ19EUlZfTkFNRSwKLQkJCQkJICAgICBQTEFURk9STV9E RVZJRF9BVVRPLCAmY29kZWNfZGF0YSwKLQkJCQkJICAgICBzaXplb2YoY29kZWNfZGF0YSkpOwot CWlmIChJU19FUlIocGRldikpCisJc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7 CisKKwlpZiAoIXBkZXYpIHsKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRh KGRldiwgSERNSV9DT0RFQ19EUlZfTkFNRSwKKwkJCQkJCSAgICAgUExBVEZPUk1fREVWSURfTk9O RSwKKwkJCQkJCSAgICAgJmNvZGVjX2RhdGEsCisJCQkJCQkgICAgIHNpemVvZihjb2RlY19kYXRh KSk7CisJCURSTV9JTkZPKCIlcyBkcml2ZXIgYm91bmQgdG8gSERNSVxuIiwgSERNSV9DT0RFQ19E UlZfTkFNRSk7CisJfQogCQlyZXR1cm47Ci0KLQlEUk1fSU5GTygiJXMgZHJpdmVyIGJvdW5kIHRv IEhETUlcbiIsIEhETUlfQ09ERUNfRFJWX05BTUUpOwogfQogCiBzdGF0aWMgaW50IG10a19kcm1f aGRtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMTY3MiwxOCArMTcw MywxMiBAQCBzdGF0aWMgaW50IG10a19kcm1faGRtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWhkbWktPmRldiA9IGRldjsKKwltdGtf aGRtaV9yZWdpc3Rlcl9hdWRpb19kcml2ZXIoZGV2KTsKIAogCXJldCA9IG10a19oZG1pX2R0X3Bh cnNlX3BkYXRhKGhkbWksIHBkZXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQloZG1p LT5waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCAiaGRtaSIpOwotCWlmIChJU19FUlIoaGRtaS0+cGh5 KSkgewotCQlyZXQgPSBQVFJfRVJSKGhkbWktPnBoeSk7Ci0JCWRldl9lcnIoZGV2LCAiRmFpbGVk IHRvIGdldCBIRE1JIFBIWTogJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCiAJcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgaGRtaSk7CiAKIAlyZXQgPSBtdGtfaGRtaV9vdXRwdXRf aW5pdChoZG1pKTsKQEAgLTE2OTIsOCArMTcxNyw2IEBAIHN0YXRpYyBpbnQgbXRrX2RybV9oZG1p X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCXJldHVybiByZXQ7CiAJfQog Ci0JbXRrX2hkbWlfcmVnaXN0ZXJfYXVkaW9fZHJpdmVyKGRldik7Ci0KIAloZG1pLT5icmlkZ2Uu ZnVuY3MgPSAmbXRrX2hkbWlfYnJpZGdlX2Z1bmNzOwogCWhkbWktPmJyaWRnZS5vZl9ub2RlID0g cGRldi0+ZGV2Lm9mX25vZGU7CiAJZHJtX2JyaWRnZV9hZGQoJmhkbWktPmJyaWRnZSk7CkBAIC0x NzA0LDcgKzE3MjcsNiBAQCBzdGF0aWMgaW50IG10a19kcm1faGRtaV9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQogCQlnb3RvIGVycl9icmlkZ2VfcmVtb3ZlOwogCX0KIAotCWRl dl9kYmcoZGV2LCAibWVkaWF0ZWsgaGRtaSBwcm9iZSBzdWNjZXNzXG4iKTsKIAlyZXR1cm4gMDsK IAogZXJyX2JyaWRnZV9yZW1vdmU6CkBAIC0xNzczLDggKzE3OTUsMjUgQEAgc3RhdGljIHN0cnVj dCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBtdGtfaGRtaV9kcml2ZXJzW10gPSB7CiAKIHN0YXRp YyBpbnQgX19pbml0IG10a19oZG1pdHhfaW5pdCh2b2lkKQogewotCXJldHVybiBwbGF0Zm9ybV9y ZWdpc3Rlcl9kcml2ZXJzKG10a19oZG1pX2RyaXZlcnMsCi0JCQkJCSBBUlJBWV9TSVpFKG10a19o ZG1pX2RyaXZlcnMpKTsKKwlpbnQgcmV0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUobXRrX2hkbWlfZHJpdmVycyk7IGkrKykgeworCQlyZXQgPSBwbGF0Zm9ybV9kcml2 ZXJfcmVnaXN0ZXIobXRrX2hkbWlfZHJpdmVyc1tpXSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlw cl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciAlcyBkcml2ZXI6ICVkXG4iLAorCQkJICAgICAgIG10 a19oZG1pX2RyaXZlcnNbaV0tPmRyaXZlci5uYW1lLCByZXQpOworCQkJZ290byBlcnI7CisJCX0K Kwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJcGxhdGZvcm1f ZHJpdmVyX3VucmVnaXN0ZXIobXRrX2hkbWlfZHJpdmVyc1tpXSk7CisKKwlyZXR1cm4gcmV0Owog fQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbXRrX2hkbWl0eF9leGl0KHZvaWQpCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuaCBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfaGRtaS5oCmluZGV4IDYzNzFiM2RlMWZmNi4uYTQ1NDZiODMzMjlmIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuaAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuaApAQCAtMTMsMTEgKzEzLDM5IEBACiAgKi8KICNp Zm5kZWYgX01US19IRE1JX0NUUkxfSAogI2RlZmluZSBfTVRLX0hETUlfQ1RSTF9ICisjaW5jbHVk ZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgor CitzdHJ1Y3QgbXRrX2hkbWlfcGh5X2NvbmYgeworCWJvb2wgdHpfZW5hYmxlZDsKKwljb25zdCBz dHJ1Y3QgY2xrX29wcyAqaGRtaV9waHlfY2xrX29wczsKKwljb25zdCBzdHJ1Y3QgcGh5X29wcyAq aGRtaV9waHlfZGV2X29wczsKK307CisKK3N0cnVjdCBtdGtfaGRtaV9waHkgeworCXZvaWQgX19p b21lbSAqcmVnczsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG10a19oZG1pX3BoeV9j b25mICpjb25mOworCXN0cnVjdCBjbGsgKnBsbDsKKwlzdHJ1Y3QgY2xrX2h3IHBsbF9odzsKKwl1 bnNpZ25lZCBsb25nIHBsbF9yYXRlOworCXVuc2lnbmVkIGNoYXIgZHJ2X2ltcF9jbGs7CisJdW5z aWduZWQgY2hhciBkcnZfaW1wX2QyOworCXVuc2lnbmVkIGNoYXIgZHJ2X2ltcF9kMTsKKwl1bnNp Z25lZCBjaGFyIGRydl9pbXBfZDA7CisJdW5zaWduZWQgaW50IGliaWFzOworCXVuc2lnbmVkIGlu dCBpYmlhc191cDsKK307CiAKIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXI7CiAKIGV4dGVybiBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19jZWNfZHJpdmVyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgbXRrX2hkbWlfZGRjX2RyaXZlcjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJp dmVyIG10a19oZG1pX3BoeV9kcml2ZXI7CitleHRlcm4gc3RydWN0IG10a19oZG1pX3BoeV9jb25m IG10a19oZG1pX3BoeV84MTczX2NvbmY7CitleHRlcm4gc3RydWN0IG10a19oZG1pX3BoeV9jb25m IG10a19oZG1pX3BoeV8yNzAxX2NvbmY7CisKIAogI2VuZGlmIC8qIF9NVEtfSERNSV9DVFJMX0gg Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9waHkuYyBi L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9waHkuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjMyNTc5MGFiZDQ2OQotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9waHkuYwpAQCAtMCwwICsxLDE1NyBA QAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQg KGMpIDIwMTggTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlh dGVrLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgv Y2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGlu dXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVk ZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNs dWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisjaW5jbHVkZSAibXRr X2hkbWkuaCIKKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGh5X2Nsa19nZXRfb3BzKHN0cnVjdCBt dGtfaGRtaV9waHkgKmhkbWlfcGh5LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGNsa19vcHMgKipv cHMpCit7CisJaWYgKGhkbWlfcGh5ICYmIGhkbWlfcGh5LT5jb25mICYmIGhkbWlfcGh5LT5jb25m LT5oZG1pX3BoeV9jbGtfb3BzKQorCQkqb3BzID0gaGRtaV9waHktPmNvbmYtPmhkbWlfcGh5X2Ns a19vcHM7CisJZWxzZQorCQlkZXZfZXJyKGhkbWlfcGh5LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGNs ayBvcHMgb2YgcGh5XG4iKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfb3BzICoKK210 a19oZG1pX3BoeV9kZXZfZ2V0X29wcyhjb25zdCBzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3Bo eSkKK3sKKwlpZiAoaGRtaV9waHkgJiYgaGRtaV9waHktPmNvbmYgJiYgaGRtaV9waHktPmNvbmYt PmhkbWlfcGh5X2Rldl9vcHMpCisJCXJldHVybiBoZG1pX3BoeS0+Y29uZi0+aGRtaV9waHlfZGV2 X29wczsKKwlkZXZfZXJyKGhkbWlfcGh5LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGRldiBvcHMgb2Yg cGh5XG4iKTsKKwkJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeTsKKwlzdHJ1Y3Qg cmVzb3VyY2UgKm1lbTsKKwlzdHJ1Y3QgY2xrICpyZWZfY2xrOworCWNvbnN0IGNoYXIgKnJlZl9j bGtfbmFtZTsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBjbGtfaW5pdCA9IHsKKwkJLm51bV9wYXJl bnRzID0gMSwKKwkJLnBhcmVudF9uYW1lcyA9IChjb25zdCBjaGFyICogY29uc3QgKikmcmVmX2Ns a19uYW1lLAorCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5UIHwgQ0xLX1NFVF9SQVRFX0dB VEUsCisJfTsKKworCXN0cnVjdCBwaHkgKnBoeTsKKwlzdHJ1Y3QgcGh5X3Byb3ZpZGVyICpwaHlf cHJvdmlkZXI7CisJaW50IHJldDsKKworCWhkbWlfcGh5ID0gZGV2bV9remFsbG9jKGRldiwgc2l6 ZW9mKCpoZG1pX3BoeSksIEdGUF9LRVJORUwpOworCWlmICghaGRtaV9waHkpCisJCXJldHVybiAt RU5PTUVNOworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0Vf TUVNLCAwKTsKKwloZG1pX3BoeS0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIG1l bSk7CisJaWYgKElTX0VSUihoZG1pX3BoeS0+cmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihoZG1p X3BoeS0+cmVncyk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBtZW1vcnkgcmVzb3Vy Y2U6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlZl9jbGsgPSBkZXZtX2Ns a19nZXQoZGV2LCAicGxsX3JlZiIpOworCWlmIChJU19FUlIocmVmX2NsaykpIHsKKwkJcmV0ID0g UFRSX0VSUihyZWZfY2xrKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBQ TEwgcmVmZXJlbmNlIGNsb2NrOiAlZFxuIiwKKwkJCXJldCk7CisJCXJldHVybiByZXQ7CisJfQor CXJlZl9jbGtfbmFtZSA9IF9fY2xrX2dldF9uYW1lKHJlZl9jbGspOworCisJcmV0ID0gb2ZfcHJv cGVydHlfcmVhZF9zdHJpbmcoZGV2LT5vZl9ub2RlLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwKKwkJ CQkgICAgICAmY2xrX2luaXQubmFtZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYs ICJGYWlsZWQgdG8gcmVhZCBjbG9jay1vdXRwdXQtbmFtZXM6ICVkXG4iLCByZXQpOworCQlyZXR1 cm4gcmV0OworCX0KKworCWhkbWlfcGh5LT5kZXYgPSBkZXY7CisJaGRtaV9waHktPmNvbmYgPQor CQkoc3RydWN0IG10a19oZG1pX3BoeV9jb25mICopb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRl dik7CisJbXRrX2hkbWlfcGh5X2Nsa19nZXRfb3BzKGhkbWlfcGh5LCAmY2xrX2luaXQub3BzKTsK KwloZG1pX3BoeS0+cGxsX2h3LmluaXQgPSAmY2xrX2luaXQ7CisJaGRtaV9waHktPnBsbCA9IGRl dm1fY2xrX3JlZ2lzdGVyKGRldiwgJmhkbWlfcGh5LT5wbGxfaHcpOworCWlmIChJU19FUlIoaGRt aV9waHktPnBsbCkpIHsKKwkJcmV0ID0gUFRSX0VSUihoZG1pX3BoeS0+cGxsKTsKKwkJZGV2X2Vy cihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgUExMOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJtZWRp YXRlayxpYmlhcyIsCisJCQkJICAgJmhkbWlfcGh5LT5pYmlhcyk7CisJaWYgKHJldCA8IDApIHsK KwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBpYmlhczogJWRcbiIsIHJldCk7 CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LT5v Zl9ub2RlLCAibWVkaWF0ZWssaWJpYXNfdXAiLAorCQkJCSAgICZoZG1pX3BoeS0+aWJpYXNfdXAp OworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQg aWJpYXMgdXA6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9pbmZvKGRl diwgIlVzaW5nIGRlZmF1bHQgVFggRFJWIGltcGVkYW5jZTogNC4yay8zNlxuIik7CisJaGRtaV9w aHktPmRydl9pbXBfY2xrID0gMHgzMDsKKwloZG1pX3BoeS0+ZHJ2X2ltcF9kMiA9IDB4MzA7CisJ aGRtaV9waHktPmRydl9pbXBfZDEgPSAweDMwOworCWhkbWlfcGh5LT5kcnZfaW1wX2QwID0gMHgz MDsKKworCXBoeSA9IGRldm1fcGh5X2NyZWF0ZShkZXYsIE5VTEwsIG10a19oZG1pX3BoeV9kZXZf Z2V0X29wcyhoZG1pX3BoeSkpOworCWlmIChJU19FUlIocGh5KSkgeworCQlkZXZfZXJyKGRldiwg IkZhaWxlZCB0byBjcmVhdGUgSERNSSBQSFlcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwaHkpOwor CX0KKwlwaHlfc2V0X2RydmRhdGEocGh5LCBoZG1pX3BoeSk7CisKKwlwaHlfcHJvdmlkZXIgPSBk ZXZtX29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVfeGxhdGUpOwor CWlmIChJU19FUlIocGh5X3Byb3ZpZGVyKSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBy ZWdpc3RlciBIRE1JIFBIWVxuIik7CisJCXJldHVybiBQVFJfRVJSKHBoeV9wcm92aWRlcik7CisJ fQorCisJcmV0dXJuIG9mX2Nsa19hZGRfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfc3Jj X3NpbXBsZV9nZXQsCisJCQkJICAgaGRtaV9waHktPnBsbCk7Cit9CisKK3N0YXRpYyBpbnQgbXRr X2hkbWlfcGh5X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVy biAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfaGRtaV9waHlf bWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10MjcwMS1oZG1pLXBoeSIs CisJICAuZGF0YSA9ICZtdGtfaGRtaV9waHlfMjcwMV9jb25mLAorCX0sCisJeyAuY29tcGF0aWJs ZSA9ICJtZWRpYXRlayxtdDgxNzMtaGRtaS1waHkiLAorCSAgLmRhdGEgPSAmbXRrX2hkbWlfcGh5 XzgxNzNfY29uZiwKKwl9LAorCXt9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtf aGRtaV9waHlfZHJpdmVyID0geworCS5wcm9iZSA9IG10a19oZG1pX3BoeV9wcm9iZSwKKwkucmVt b3ZlID0gbXRrX2hkbWlfcGh5X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRp YXRlay1oZG1pLXBoeSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19oZG1pX3BoeV9tYXRjaCwK Kwl9LAorfTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYVRlayBIRE1JIFBIWSBEcml2ZXIi KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2hkbWlfcmVncy5oCmluZGV4IGE1Y2IwN2QxMmM5Yy4uZTUzYzY2NDY1NzFjIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmgKQEAgLTIyNyw2ICsyMjcsNyBAQAogI2Rl ZmluZSBERUVQX0NPTE9SX0VOCQkJQklUKDApCiAjZGVmaW5lIEhETUlfQVVESU9fVEVTVF9TRUwJ CUJJVCg4KQogI2RlZmluZSBIRE1JMlAwX0VOCQkJQklUKDExKQorI2RlZmluZSBIRE1JX1BTRUNV Ul9FTgkJCUJJVCgxNSkKICNkZWZpbmUgSERNSV9PVVRfRklGT19FTgkJQklUKDE2KQogI2RlZmlu ZSBIRE1JX09VVF9GSUZPX0NMS19JTlYJCUJJVCgxNykKICNkZWZpbmUgTUhMX01PREVfT04JCQlC SVQoMjgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210MjcwMV9o ZG1pX3BoeS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19tdDI3MDFfaGRtaV9waHku YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhhZjVlNmMxYWVjYwot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbXQyNzAxX2hk bWlfcGh5LmMKQEAgLTAsMCArMSwzMDcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wCisvKgorICpDb3B5cmlnaHQgKGMpIDIwMTggTWVkaWFUZWsgSW5jLgorICpBdXRob3I6 IENodW5odWkgRGFpIDxjaHVuaHVpLmRhaUBtZWRpYXRlay5jb20+CisgKi8KKworI2luY2x1ZGUg PGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgorI2luY2x1ZGUg PGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxs aW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNs dWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVk ZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlICJt dGtfaGRtaS5oIgorCisjZGVmaW5lIEhETUlfQ09OMAkweDAwCisjZGVmaW5lIFJHX0hETUlUWF9E UlZfSUJJQVMJCSgwKQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lCSUFTX01BU0sJKDB4M0YgPDwg MCkKKyNkZWZpbmUgUkdfSERNSVRYX0VOX1NFUgkJKDEyKQorI2RlZmluZSBSR19IRE1JVFhfRU5f U0VSX01BU0sJCSgweDBGIDw8IDEyKQorI2RlZmluZSBSR19IRE1JVFhfRU5fU0xETwkJKDE2KQor I2RlZmluZSBSR19IRE1JVFhfRU5fU0xET19NQVNLCQkoMHgwRiA8PCAxNikKKyNkZWZpbmUgUkdf SERNSVRYX0VOX1BSRUQJCSgyMCkKKyNkZWZpbmUgUkdfSERNSVRYX0VOX1BSRURfTUFTSwkJKDB4 MEYgPDwgMjApCisjZGVmaW5lIFJHX0hETUlUWF9FTl9JTVAJCSgyNCkKKyNkZWZpbmUgUkdfSERN SVRYX0VOX0lNUF9NQVNLCQkoMHgwRiA8PCAyNCkKKyNkZWZpbmUgUkdfSERNSVRYX0VOX0RSVgkJ KDI4KQorI2RlZmluZSBSR19IRE1JVFhfRU5fRFJWX01BU0sJCSgweDBGIDw8IDI4KQorCisjZGVm aW5lIEhETUlfQ09OMQkweDA0CisjZGVmaW5lIFJHX0hETUlUWF9QUkVEX0lCSUFTCQkoMTgpCisj ZGVmaW5lIFJHX0hETUlUWF9QUkVEX0lCSUFTX01BU0sJKDB4MEYgPDwgMTgpCisjZGVmaW5lIFJH X0hETUlUWF9QUkVEX0lNUAkJKDB4MDEgPDwgMjIpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1Q CQkoMjYpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX01BU0sJCSgweDNGIDw8IDI2KQorCisj ZGVmaW5lIEhETUlfQ09OMgkweDA4CisjZGVmaW5lIFJHX0hETUlUWF9FTl9UWF9DS0xETwkJKDB4 MDEgPDwgMCkKKyNkZWZpbmUgUkdfSERNSVRYX0VOX1RYX1BPU0RJVgkJKDB4MDEgPDwgMSkKKyNk ZWZpbmUgUkdfSERNSVRYX1RYX1BPU0RJVgkJKDMpCisjZGVmaW5lIFJHX0hETUlUWF9UWF9QT1NE SVZfTUFTSwkoMHgwMyA8PCAzKQorI2RlZmluZSBSR19IRE1JVFhfRU5fTUJJQVMJCSgweDAxIDw8 IDYpCisjZGVmaW5lIFJHX0hETUlUWF9NQklBU19MUEZfRU4JCSgweDAxIDw8IDcpCisKKyNkZWZp bmUgSERNSV9DT040CTB4MTAKKyNkZWZpbmUgUkdfSERNSVRYX1JFU0VSVkVfTUFTSwkJKDB4RkZG RkZGRkYgPDwgMCkKKworI2RlZmluZSBIRE1JX0NPTjYJMHgxOAorI2RlZmluZSBSR19IVFBMTF9C UgkJCSgwKQorI2RlZmluZSBSR19IVFBMTF9CUl9NQVNLCQkoMHgwMyA8PCAwKQorI2RlZmluZSBS R19IVFBMTF9CQwkJCSgyKQorI2RlZmluZSBSR19IVFBMTF9CQ19NQVNLCQkoMHgwMyA8PCAyKQor I2RlZmluZSBSR19IVFBMTF9CUAkJCSg0KQorI2RlZmluZSBSR19IVFBMTF9CUF9NQVNLCQkoMHgw RiA8PCA0KQorI2RlZmluZSBSR19IVFBMTF9JUgkJCSg4KQorI2RlZmluZSBSR19IVFBMTF9JUl9N QVNLCQkoMHgwRiA8PCA4KQorI2RlZmluZSBSR19IVFBMTF9JQwkJCSgxMikKKyNkZWZpbmUgUkdf SFRQTExfSUNfTUFTSwkJKDB4MEYgPDwgMTIpCisjZGVmaW5lIFJHX0hUUExMX1BPU0RJVgkJCSgx NikKKyNkZWZpbmUgUkdfSFRQTExfUE9TRElWX01BU0sJCSgweDAzIDw8IDE2KQorI2RlZmluZSBS R19IVFBMTF9QUkVESVYJCQkoMTgpCisjZGVmaW5lIFJHX0hUUExMX1BSRURJVl9NQVNLCQkoMHgw MyA8PCAxOCkKKyNkZWZpbmUgUkdfSFRQTExfRkJLU0VMCQkJKDIwKQorI2RlZmluZSBSR19IVFBM TF9GQktTRUxfTUFTSwkJKDB4MDMgPDwgMjApCisjZGVmaW5lIFJHX0hUUExMX1JMSF9FTgkJCSgw eDAxIDw8IDIyKQorI2RlZmluZSBSR19IVFBMTF9GQktESVYJCQkoMjQpCisjZGVmaW5lIFJHX0hU UExMX0ZCS0RJVl9NQVNLCQkoMHg3RiA8PCAyNCkKKyNkZWZpbmUgUkdfSFRQTExfRU4JCQkoMHgw MSA8PCAzMSkKKworI2RlZmluZSBIRE1JX0NPTjcJMHgxYworI2RlZmluZSBSR19IVFBMTF9BVVRP S19FTgkJKDB4MDEgPDwgMjMpCisjZGVmaW5lIFJHX0hUUExMX0RJVkVOCQkJKDI4KQorI2RlZmlu ZSBSR19IVFBMTF9ESVZFTl9NQVNLCQkoMHgwNyA8PCAyOCkKKworc3RhdGljIGlubGluZSBzdHJ1 Y3QgbXRrX2hkbWlfcGh5ICp0b19tdGtfaGRtaV9wbGwoc3RydWN0IGNsa19odyAqaHcpCit7CisJ cmV0dXJuIGNvbnRhaW5lcl9vZihodywgc3RydWN0IG10a19oZG1pX3BoeSwgcGxsX2h3KTsKK30K Kworc3RhdGljIGlubGluZSB2b2lkIG10a19oZG1pX3BsbF9tYXNrKHN0cnVjdCBtdGtfaGRtaV9w aHkgKmhkbWlfcGh5LCB1MzIgb2Zmc2V0LAorCQkJCSAgICAgdTMyIHZhbCwgdTMyIG1hc2spCit7 CisJdTMyIHRtcCA9IHJlYWRsKGhkbWlfcGh5LT5yZWdzICArIG9mZnNldCkgJiB+bWFzazsKKwor CXRtcCB8PSAodmFsICYgbWFzayk7CisJd3JpdGVsKHRtcCwgaGRtaV9waHktPnJlZ3MgKyBvZmZz ZXQpOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3BsbF9lbmFibGUoc3RydWN0IGNsa19odyAq aHcpCit7CisJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSB0b19tdGtfaGRtaV9wbGwo aHcpOworCisJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09ONywgUkdfSFRQTExf QVVUT0tfRU4sCisJCQkgIFJHX0hUUExMX0FVVE9LX0VOKTsKKwltdGtfaGRtaV9wbGxfbWFzayho ZG1pX3BoeSwgSERNSV9DT042LCAwLCBSR19IVFBMTF9STEhfRU4pOworCW10a19oZG1pX3BsbF9t YXNrKGhkbWlfcGh5LCBIRE1JX0NPTjYsICgweDMgPDwgUkdfSFRQTExfUE9TRElWKSwKKwkJCSAg UkdfSFRQTExfUE9TRElWX01BU0spOworCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1J X0NPTjIsIFJHX0hETUlUWF9FTl9NQklBUywKKwkJCSAgUkdfSERNSVRYX0VOX01CSUFTKTsKKwl1 c2xlZXBfcmFuZ2UoODAsIDEwMCk7CisJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlf Q09ONiwgUkdfSFRQTExfRU4sIFJHX0hUUExMX0VOKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1p X3BoeSwgSERNSV9DT04yLCBSR19IRE1JVFhfRU5fVFhfQ0tMRE8sCisJCQkgIFJHX0hETUlUWF9F Tl9UWF9DS0xETyk7CisJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMCwgKDB4 ZiA8PCBSR19IRE1JVFhfRU5fU0xETyksCisJCQkgIFJHX0hETUlUWF9FTl9TTERPX01BU0spOwor CXVzbGVlcF9yYW5nZSg4MCwgMTAwKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERN SV9DT04yLCBSR19IRE1JVFhfTUJJQVNfTFBGX0VOLAorCQkJICBSR19IRE1JVFhfTUJJQVNfTFBG X0VOKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04yLCBSR19IRE1JVFhf RU5fVFhfUE9TRElWLAorCQkJICBSR19IRE1JVFhfRU5fVFhfUE9TRElWKTsKKwltdGtfaGRtaV9w bGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCAoMHhmIDw8IFJHX0hETUlUWF9FTl9TRVIpLAor CQkJICBSR19IRE1JVFhfRU5fU0VSX01BU0spOworCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5 LCBIRE1JX0NPTjAsICgweGYgPDwgUkdfSERNSVRYX0VOX1BSRUQpLAorCQkJICBSR19IRE1JVFhf RU5fUFJFRF9NQVNLKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCAo MHhmIDw8IFJHX0hETUlUWF9FTl9EUlYpLAorCQkJICBSR19IRE1JVFhfRU5fRFJWX01BU0spOwor CXVzbGVlcF9yYW5nZSg4MCwgMTAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRr X2hkbWlfcGxsX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpCit7CisJc3RydWN0IG10a19oZG1p X3BoeSAqaGRtaV9waHkgPSB0b19tdGtfaGRtaV9wbGwoaHcpOworCisJbXRrX2hkbWlfcGxsX21h c2soaGRtaV9waHksIEhETUlfQ09OMCwgMCwgUkdfSERNSVRYX0VOX0RSVl9NQVNLKTsKKwltdGtf aGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCAwLCBSR19IRE1JVFhfRU5fUFJFRF9N QVNLKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCAwLCBSR19IRE1J VFhfRU5fU0VSX01BU0spOworCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjIs IDAsIFJHX0hETUlUWF9FTl9UWF9QT1NESVYpOworCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5 LCBIRE1JX0NPTjIsIDAsIFJHX0hETUlUWF9NQklBU19MUEZfRU4pOworCXVzbGVlcF9yYW5nZSg4 MCwgMTAwKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCAwLCBSR19I RE1JVFhfRU5fU0xET19NQVNLKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9D T04yLCAwLCBSR19IRE1JVFhfRU5fVFhfQ0tMRE8pOworCW10a19oZG1pX3BsbF9tYXNrKGhkbWlf cGh5LCBIRE1JX0NPTjYsIDAsIFJHX0hUUExMX0VOKTsKKwl1c2xlZXBfcmFuZ2UoODAsIDEwMCk7 CisJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMiwgMCwgUkdfSERNSVRYX0VO X01CSUFTKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT042LCAwLCBSR19I VFBMTF9QT1NESVZfTUFTSyk7CisJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09O NiwgMCwgUkdfSFRQTExfUkxIX0VOKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERN SV9DT043LCAwLCBSR19IVFBMTF9BVVRPS19FTik7CisJdXNsZWVwX3JhbmdlKDgwLCAxMDApOwor fQorCitzdGF0aWMgaW50IG10a19oZG1pX3BsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywg dW5zaWduZWQgbG9uZyByYXRlLAorCQkJCSB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQorewor CXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRrX2hkbWlfcGxsKGh3KTsKKwl1 MzIgcG9zX2RpdjsKKworCWlmIChyYXRlIDw9IDY0MDAwMDAwKQorCQlwb3NfZGl2ID0gMzsKKwll bHNlIGlmIChyYXRlIDw9IDEyODAwMDAwKQorCQlwb3NfZGl2ID0gMTsKKwllbHNlCisJCXBvc19k aXYgPSAxOworCisJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09ONiwgKDB4MyA8 PCBSR19IVFBMTF9QUkVESVYpLAorCQkJICBSR19IVFBMTF9QUkVESVZfTUFTSyk7CisJbXRrX2hk bWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09ONiwgKDB4MyA8PCBSR19IVFBMTF9QT1NESVYp LAorCQkJICBSR19IVFBMTF9QT1NESVZfTUFTSyk7CisJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9w aHksIEhETUlfQ09ONiwgKDB4MSA8PCBSR19IVFBMTF9JQyksCisJCQkgIFJHX0hUUExMX0lDX01B U0spOworCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjYsICgweDEgPDwgUkdf SFRQTExfSVIpLAorCQkJICBSR19IVFBMTF9JUl9NQVNLKTsKKwltdGtfaGRtaV9wbGxfbWFzayho ZG1pX3BoeSwgSERNSV9DT04yLCAocG9zX2RpdiA8PCBSR19IRE1JVFhfVFhfUE9TRElWKSwKKwkJ CSAgUkdfSERNSVRYX1RYX1BPU0RJVl9NQVNLKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3Bo eSwgSERNSV9DT042LCAoMSA8PCBSR19IVFBMTF9GQktTRUwpLAorCQkJICBSR19IVFBMTF9GQktT RUxfTUFTSyk7CisJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09ONiwgKDE5IDw8 IFJHX0hUUExMX0ZCS0RJViksCisJCQkgIFJHX0hUUExMX0ZCS0RJVl9NQVNLKTsKKwltdGtfaGRt aV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT043LCAoMHgyIDw8IFJHX0hUUExMX0RJVkVOKSwK KwkJCSAgUkdfSFRQTExfRElWRU5fTUFTSyk7CisJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHks IEhETUlfQ09ONiwgKDB4YyA8PCBSR19IVFBMTF9CUCksCisJCQkgIFJHX0hUUExMX0JQX01BU0sp OworCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjYsICgweDIgPDwgUkdfSFRQ TExfQkMpLAorCQkJICBSR19IVFBMTF9CQ19NQVNLKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1p X3BoeSwgSERNSV9DT042LCAoMHgxIDw8IFJHX0hUUExMX0JSKSwKKwkJCSAgUkdfSFRQTExfQlJf TUFTSyk7CisKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLCAwLCBSR19I RE1JVFhfUFJFRF9JTVApOworCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEs ICgweDMgPDwgUkdfSERNSVRYX1BSRURfSUJJQVMpLAorCQkJICBSR19IRE1JVFhfUFJFRF9JQklB U19NQVNLKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCAoMHgwIDw8 IFJHX0hETUlUWF9FTl9JTVApLAorCQkJICBSR19IRE1JVFhfRU5fSU1QX01BU0spOworCW10a19o ZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsICgweDI4IDw8IFJHX0hETUlUWF9EUlZf SU1QKSwKKwkJCSAgUkdfSERNSVRYX0RSVl9JTVBfTUFTSyk7CisJbXRrX2hkbWlfcGxsX21hc2so aGRtaV9waHksIEhETUlfQ09ONCwgMHgyOCwgUkdfSERNSVRYX1JFU0VSVkVfTUFTSyk7CisJbXRr X2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMCwgKDB4YSA8PCBSR19IRE1JVFhfRFJW X0lCSUFTKSwKKwkJCSAgUkdfSERNSVRYX0RSVl9JQklBU19NQVNLKTsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGxvbmcgbXRrX2hkbWlfcGxsX3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAqaHcs IHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyAqcGFyZW50X3JhdGUp Cit7CisJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSB0b19tdGtfaGRtaV9wbGwoaHcp OworCisJaGRtaV9waHktPnBsbF9yYXRlID0gcmF0ZTsKKwlyZXR1cm4gcmF0ZTsKK30KKworc3Rh dGljIHVuc2lnbmVkIGxvbmcgbXRrX2hkbWlfcGxsX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcg Kmh3LAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0cnVjdCBt dGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRrX2hkbWlfcGxsKGh3KTsKKworCXJldHVybiBo ZG1pX3BoeS0+cGxsX3JhdGU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBtdGtf aGRtaV9waHlfcGxsX29wcyA9IHsKKwkuZW5hYmxlID0gbXRrX2hkbWlfcGxsX2VuYWJsZSwKKwku ZGlzYWJsZSA9IG10a19oZG1pX3BsbF9kaXNhYmxlLAorCS5zZXRfcmF0ZSA9IG10a19oZG1pX3Bs bF9zZXRfcmF0ZSwKKwkucm91bmRfcmF0ZSA9IG10a19oZG1pX3BsbF9yb3VuZF9yYXRlLAorCS5y ZWNhbGNfcmF0ZSA9IG10a19oZG1pX3BsbF9yZWNhbGNfcmF0ZSwKK307CisKK3N0YXRpYyB2b2lk IG10a19oZG1pX3BoeV9lbmFibGVfdG1kcyhzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSkK K3sKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT043LCBSR19IVFBMTF9BVVRP S19FTiwKKwkJCSAgUkdfSFRQTExfQVVUT0tfRU4pOworCW10a19oZG1pX3BsbF9tYXNrKGhkbWlf cGh5LCBIRE1JX0NPTjYsIDAsIFJHX0hUUExMX1JMSF9FTik7CisJbXRrX2hkbWlfcGxsX21hc2so aGRtaV9waHksIEhETUlfQ09ONiwgKDB4MyA8PCBSR19IVFBMTF9QT1NESVYpLAorCQkJICBSR19I VFBMTF9QT1NESVZfTUFTSyk7CisJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09O MiwgUkdfSERNSVRYX0VOX01CSUFTLAorCQkJICBSR19IRE1JVFhfRU5fTUJJQVMpOworCXVzbGVl cF9yYW5nZSg4MCwgMTAwKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT042 LCBSR19IVFBMTF9FTiwgUkdfSFRQTExfRU4pOworCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5 LCBIRE1JX0NPTjIsIFJHX0hETUlUWF9FTl9UWF9DS0xETywKKwkJCSAgUkdfSERNSVRYX0VOX1RY X0NLTERPKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCAoMHhmIDw8 IFJHX0hETUlUWF9FTl9TTERPKSwKKwkJCSAgUkdfSERNSVRYX0VOX1NMRE9fTUFTSyk7CisJdXNs ZWVwX3JhbmdlKDgwLCAxMDApOworCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NP TjIsIFJHX0hETUlUWF9NQklBU19MUEZfRU4sCisJCQkgIFJHX0hETUlUWF9NQklBU19MUEZfRU4p OworCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjIsIFJHX0hETUlUWF9FTl9U WF9QT1NESVYsCisJCQkgIFJHX0hETUlUWF9FTl9UWF9QT1NESVYpOworCW10a19oZG1pX3BsbF9t YXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsICgweGYgPDwgUkdfSERNSVRYX0VOX1NFUiksCisJCQkg IFJHX0hETUlUWF9FTl9TRVJfTUFTSyk7CisJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhE TUlfQ09OMCwgKDB4ZiA8PCBSR19IRE1JVFhfRU5fUFJFRCksCisJCQkgIFJHX0hETUlUWF9FTl9Q UkVEX01BU0spOworCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsICgweGYg PDwgUkdfSERNSVRYX0VOX0RSViksCisJCQkgIFJHX0hETUlUWF9FTl9EUlZfTUFTSyk7CisJdXNs ZWVwX3JhbmdlKDgwLCAxMDApOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9waHlfZGlzYWJs ZV90bWRzKHN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5KQoreworCW10a19oZG1pX3BsbF9t YXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsIDAsIFJHX0hETUlUWF9FTl9EUlZfTUFTSyk7CisJbXRr X2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMCwgMCwgUkdfSERNSVRYX0VOX1BSRURf TUFTSyk7CisJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMCwgMCwgUkdfSERN SVRYX0VOX1NFUl9NQVNLKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04y LCAwLCBSR19IRE1JVFhfRU5fVFhfUE9TRElWKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3Bo eSwgSERNSV9DT04yLCAwLCBSR19IRE1JVFhfTUJJQVNfTFBGX0VOKTsKKwl1c2xlZXBfcmFuZ2Uo ODAsIDEwMCk7CisJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMCwgMCwgUkdf SERNSVRYX0VOX1NMRE9fTUFTSyk7CisJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlf Q09OMiwgMCwgUkdfSERNSVRYX0VOX1RYX0NLTERPKTsKKwltdGtfaGRtaV9wbGxfbWFzayhoZG1p X3BoeSwgSERNSV9DT042LCAwLCBSR19IVFBMTF9FTik7CisJdXNsZWVwX3JhbmdlKDgwLCAxMDAp OworCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjIsIDAsIFJHX0hETUlUWF9F Tl9NQklBUyk7CisJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09ONiwgMCwgUkdf SFRQTExfUE9TRElWX01BU0spOworCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NP TjYsIDAsIFJHX0hUUExMX1JMSF9FTik7CisJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhE TUlfQ09ONywgMCwgUkdfSFRQTExfQVVUT0tfRU4pOworCXVzbGVlcF9yYW5nZSg4MCwgMTAwKTsK K30KKworc3RhdGljIGludCBtdGtfaGRtaV9waHlfcG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQor eworCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7 CisJaW50IHJldDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShoZG1pX3BoeS0+cGxsKTsK KwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW10a19oZG1pX3BoeV9lbmFibGVfdG1k cyhoZG1pX3BoeSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9waHlf cG93ZXJfb2ZmKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1p X3BoeSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCisJbXRrX2hkbWlfcGh5X2Rpc2FibGVfdG1k cyhoZG1pX3BoeSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWlfcGh5LT5wbGwpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5X29wcyBtdGtfaGRtaV9waHlf ZGV2X29wcyA9IHsKKwkucG93ZXJfb24gPSBtdGtfaGRtaV9waHlfcG93ZXJfb24sCisJLnBvd2Vy X29mZiA9IG10a19oZG1pX3BoeV9wb3dlcl9vZmYsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCit9 OworCitzdHJ1Y3QgbXRrX2hkbWlfcGh5X2NvbmYgbXRrX2hkbWlfcGh5XzI3MDFfY29uZiA9IHsK KwkudHpfZW5hYmxlZCA9IGZhbHNlLAorCS5oZG1pX3BoeV9jbGtfb3BzID0gJm10a19oZG1pX3Bo eV9wbGxfb3BzLAorCS5oZG1pX3BoeV9kZXZfb3BzID0gJm10a19oZG1pX3BoeV9kZXZfb3BzLAor fTsKKworTU9EVUxFX0FVVEhPUigiQ2h1bmh1aSBEYWkgPGNodW5odWkuZGFpQG1lZGlhdGVrLmNv bT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWFUZWsgSERNSSBQSFkgRHJpdmVyIik7CitN T0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX210ODE3M19oZG1pX3BoeS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19tdDgxNzNfaGRtaV9waHkuYwppbmRleCA1MWNiOWNmYjY2NDYuLjFhMzVmZGQ0MDVkOCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19tdDgxNzNfaGRtaV9waHkuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19oZG1pX3BoeS5jCkBAIC0y MSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4 L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSAi bXRrX2hkbWkuaCIKIAogI2RlZmluZSBIRE1JX0NPTjAJCTB4MDAKICNkZWZpbmUgUkdfSERNSVRY X1BMTF9FTgkJQklUKDMxKQpAQCAtMTIzLDIwICsxMjQsNiBAQAogI2RlZmluZSBSR1NfSERNSVRY XzVUMV9FREcJCSgweGYgPDwgNCkKICNkZWZpbmUgUkdTX0hETUlUWF9QTFVHX1RTVAkJQklUKDAp CiAKLXN0cnVjdCBtdGtfaGRtaV9waHkgewotCXZvaWQgX19pb21lbSAqcmVnczsKLQlzdHJ1Y3Qg ZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGNsayAqcGxsOwotCXN0cnVjdCBjbGtfaHcgcGxsX2h3Owot CXVuc2lnbmVkIGxvbmcgcGxsX3JhdGU7Ci0JdTggZHJ2X2ltcF9jbGs7Ci0JdTggZHJ2X2ltcF9k MjsKLQl1OCBkcnZfaW1wX2QxOwotCXU4IGRydl9pbXBfZDA7Ci0JdTMyIGliaWFzOwotCXUzMiBp Ymlhc191cDsKLX07Ci0KIHN0YXRpYyBjb25zdCB1OCBQUkVESVZbM11bNF0gPSB7CiAJezB4MCwg MHgwLCAweDAsIDB4MH0sCS8qIDI3TWh6ICovCiAJezB4MSwgMHgxLCAweDEsIDB4MX0sCS8qIDc0 TWh6ICovCkBAIC0zNjcsNyArMzU0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbXRrX2hkbWlf cGxsX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAogCXJldHVybiBoZG1pX3BoeS0+cGxs X3JhdGU7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyBtdGtfaGRtaV9wbGxfb3Bz ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIG10a19oZG1pX3BoeV9wbGxfb3BzID0g ewogCS5wcmVwYXJlID0gbXRrX2hkbWlfcGxsX3ByZXBhcmUsCiAJLnVucHJlcGFyZSA9IG10a19o ZG1pX3BsbF91bnByZXBhcmUsCiAJLnNldF9yYXRlID0gbXRrX2hkbWlfcGxsX3NldF9yYXRlLApA QCAtNDE0LDExOCArNDAxLDE2IEBAIHN0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3Bvd2VyX29mZihz dHJ1Y3QgcGh5ICpwaHkpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5 X29wcyBtdGtfaGRtaV9waHlfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfb3BzIG10 a19oZG1pX3BoeV9kZXZfb3BzID0gewogCS5wb3dlcl9vbiA9IG10a19oZG1pX3BoeV9wb3dlcl9v biwKIAkucG93ZXJfb2ZmID0gbXRrX2hkbWlfcGh5X3Bvd2VyX29mZiwKIAkub3duZXIgPSBUSElT X01PRFVMRSwKIH07CiAKLXN0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsK LQlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsK LQlzdHJ1Y3QgY2xrICpyZWZfY2xrOwotCWNvbnN0IGNoYXIgKnJlZl9jbGtfbmFtZTsKLQlzdHJ1 Y3QgY2xrX2luaXRfZGF0YSBjbGtfaW5pdCA9IHsKLQkJLm9wcyA9ICZtdGtfaGRtaV9wbGxfb3Bz LAotCQkubnVtX3BhcmVudHMgPSAxLAotCQkucGFyZW50X25hbWVzID0gKGNvbnN0IGNoYXIgKiBj b25zdCAqKSZyZWZfY2xrX25hbWUsCi0JCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQgfCBD TEtfU0VUX1JBVEVfR0FURSwKLQl9OwotCXN0cnVjdCBwaHkgKnBoeTsKLQlzdHJ1Y3QgcGh5X3By b3ZpZGVyICpwaHlfcHJvdmlkZXI7Ci0JaW50IHJldDsKLQotCWhkbWlfcGh5ID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKCpoZG1pX3BoeSksIEdGUF9LRVJORUwpOwotCWlmICghaGRtaV9waHkp Ci0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYs IElPUkVTT1VSQ0VfTUVNLCAwKTsKLQloZG1pX3BoeS0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNv dXJjZShkZXYsIG1lbSk7Ci0JaWYgKElTX0VSUihoZG1pX3BoeS0+cmVncykpIHsKLQkJcmV0ID0g UFRSX0VSUihoZG1pX3BoeS0+cmVncyk7Ci0JCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBt ZW1vcnkgcmVzb3VyY2U6ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJlZl9j bGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGxsX3JlZiIpOwotCWlmIChJU19FUlIocmVmX2Nsaykp IHsKLQkJcmV0ID0gUFRSX0VSUihyZWZfY2xrKTsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFp bGVkIHRvIGdldCBQTEwgcmVmZXJlbmNlIGNsb2NrOiAlZFxuIiwKLQkJCXJldCk7Ci0JCXJldHVy biByZXQ7Ci0JfQotCXJlZl9jbGtfbmFtZSA9IF9fY2xrX2dldF9uYW1lKHJlZl9jbGspOwotCi0J cmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LT5vZl9ub2RlLCAiY2xvY2stb3V0cHV0 LW5hbWVzIiwKLQkJCQkgICAgICAmY2xrX2luaXQubmFtZSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJ ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBjbG9jay1vdXRwdXQtbmFtZXM6ICVkXG4iLCBy ZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWhkbWlfcGh5LT5wbGxfaHcuaW5pdCA9ICZjbGtf aW5pdDsKLQloZG1pX3BoeS0+cGxsID0gZGV2bV9jbGtfcmVnaXN0ZXIoZGV2LCAmaGRtaV9waHkt PnBsbF9odyk7Ci0JaWYgKElTX0VSUihoZG1pX3BoeS0+cGxsKSkgewotCQlyZXQgPSBQVFJfRVJS KGhkbWlfcGh5LT5wbGwpOwotCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBQTEw6 ICVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldCA9IG9mX3Byb3BlcnR5X3Jl YWRfdTMyKGRldi0+b2Zfbm9kZSwgIm1lZGlhdGVrLGliaWFzIiwKLQkJCQkgICAmaGRtaV9waHkt PmliaWFzKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQg dG8gZ2V0IGliaWFzOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXQgPSBv Zl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJtZWRpYXRlayxpYmlhc191cCIsCi0J CQkJICAgJmhkbWlfcGh5LT5pYmlhc191cCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2Vycigm cGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBpYmlhcyB1cDogJWRcbiIsIHJldCk7Ci0JCXJldHVy biByZXQ7Ci0JfQotCi0JZGV2X2luZm8oZGV2LCAiVXNpbmcgZGVmYXVsdCBUWCBEUlYgaW1wZWRh bmNlOiA0LjJrLzM2XG4iKTsKLQloZG1pX3BoeS0+ZHJ2X2ltcF9jbGsgPSAweDMwOwotCWhkbWlf cGh5LT5kcnZfaW1wX2QyID0gMHgzMDsKLQloZG1pX3BoeS0+ZHJ2X2ltcF9kMSA9IDB4MzA7Ci0J aGRtaV9waHktPmRydl9pbXBfZDAgPSAweDMwOwotCi0JcGh5ID0gZGV2bV9waHlfY3JlYXRlKGRl diwgTlVMTCwgJm10a19oZG1pX3BoeV9vcHMpOwotCWlmIChJU19FUlIocGh5KSkgewotCQlkZXZf ZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgSERNSSBQSFlcbiIpOwotCQlyZXR1cm4gUFRSX0VS UihwaHkpOwotCX0KLQlwaHlfc2V0X2RydmRhdGEocGh5LCBoZG1pX3BoeSk7Ci0KLQlwaHlfcHJv dmlkZXIgPSBkZXZtX29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVf eGxhdGUpOwotCWlmIChJU19FUlIocGh5X3Byb3ZpZGVyKSkKLQkJcmV0dXJuIFBUUl9FUlIocGh5 X3Byb3ZpZGVyKTsKLQotCWhkbWlfcGh5LT5kZXYgPSBkZXY7Ci0JcmV0dXJuIG9mX2Nsa19hZGRf cHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQsCi0JCQkJICAgaGRt aV9waHktPnBsbCk7Ci19Ci0KLXN0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3JlbW92ZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qg c3RydWN0IG9mX2RldmljZV9pZCBtdGtfaGRtaV9waHlfbWF0Y2hbXSA9IHsKLQl7IC5jb21wYXRp YmxlID0gIm1lZGlhdGVrLG10ODE3My1oZG1pLXBoeSIsIH0sCi0Je30sCi19OwotCi1zdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX3BoeV9kcml2ZXIgPSB7Ci0JLnByb2JlID0gbXRrX2hk bWlfcGh5X3Byb2JlLAotCS5yZW1vdmUgPSBtdGtfaGRtaV9waHlfcmVtb3ZlLAotCS5kcml2ZXIg PSB7Ci0JCS5uYW1lID0gIm1lZGlhdGVrLWhkbWktcGh5IiwKLQkJLm9mX21hdGNoX3RhYmxlID0g bXRrX2hkbWlfcGh5X21hdGNoLAotCX0sCitzdHJ1Y3QgbXRrX2hkbWlfcGh5X2NvbmYgbXRrX2hk bWlfcGh5XzgxNzNfY29uZiA9IHsKKwkudHpfZW5hYmxlZCA9IHRydWUsCisJLmhkbWlfcGh5X2Ns a19vcHMgPSAmbXRrX2hkbWlfcGh5X3BsbF9vcHMsCisJLmhkbWlfcGh5X2Rldl9vcHMgPSAmbXRr X2hkbWlfcGh5X2Rldl9vcHMsCiB9OwogCiBNT0RVTEVfQVVUSE9SKCJKaWUgUWl1IDxqaWUucWl1 QG1lZGlhdGVrLmNvbT4iKTsKLS0gCjIuMTIuNQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCg==