From mboxrd@z Thu Jan 1 00:00:00 1970 From: Qiang Yu Subject: [PATCH RFC 08/24] drm/lima: add lima core driver Date: Fri, 18 May 2018 17:27:59 +0800 Message-ID: <20180518092815.25280-9-yuq825@gmail.com> References: <20180518092815.25280-1-yuq825@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180518092815.25280-1-yuq825@gmail.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: Simon Shields , Marek Vasut , Connor Abbott , Neil Armstrong , Andrei Paulau <7134956@gmail.com>, Vasily Khoruzhick , Qiang Yu , Erico Nunes List-Id: devicetree@vger.kernel.org RnJvbTogTGltYSBQcm9qZWN0IERldmVsb3BlcnMgPGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmc+CgpTaWduZWQtb2ZmLWJ5OiBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4KU2lnbmVk LW9mZi1ieTogSGVpa28gU3R1ZWJuZXIgPGhlaWtvQHNudGVjaC5kZT4KU2lnbmVkLW9mZi1ieTog RXJpY28gTnVuZXMgPG51bmVzLmVyaWNvQGdtYWlsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0v bGltYS9saW1hX2Rydi5jIHwgNDY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2Rydi5oIHwgIDc3ICsrKysrKwogMiBmaWxlcyBjaGFu Z2VkLCA1NDMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9saW1hL2xpbWFfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX2Rydi5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kcnYu YyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi40ZGYyNGE2Y2ZmZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vbGltYS9saW1hX2Rydi5jCkBAIC0wLDAgKzEsNDY2IEBACisvKgorICogQ29w eXJpZ2h0IChDKSAyMDE3LTIwMTggTGltYSBQcm9qZWN0CisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNs dWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29m dHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykg QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwg V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICog QVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP UiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKwor I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+ CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorI2luY2x1ZGUgPGRybS9kcm1fcHJpbWUuaD4KKyNp bmNsdWRlIDxkcm0vbGltYV9kcm0uaD4KKworI2luY2x1ZGUgImxpbWFfZHJ2LmgiCisjaW5jbHVk ZSAibGltYV9nZW0uaCIKKyNpbmNsdWRlICJsaW1hX2dlbV9wcmltZS5oIgorI2luY2x1ZGUgImxp bWFfdm0uaCIKKworaW50IGxpbWFfc2NoZWRfdGltZW91dF9tcyA9IDA7CitpbnQgbGltYV9zY2hl ZF9tYXhfdGFza3MgPSAzMjsKK2ludCBsaW1hX21heF9tZW0gPSAtMTsKKworTU9EVUxFX1BBUk1f REVTQyhzY2hlZF90aW1lb3V0X21zLCAidGFzayBydW4gdGltZW91dCBpbiBtcyAoMCA9IG5vIHRp bWVvdXQgKGRlZmF1bHQpKSIpOworbW9kdWxlX3BhcmFtX25hbWVkKHNjaGVkX3RpbWVvdXRfbXMs IGxpbWFfc2NoZWRfdGltZW91dF9tcywgaW50LCAwNDQ0KTsKKworTU9EVUxFX1BBUk1fREVTQyhz Y2hlZF9tYXhfdGFza3MsICJtYXggcXVldWVkIHRhc2sgbnVtIGluIGEgY29udGV4dCAoZGVmYXVs dCAzMikiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChzY2hlZF9tYXhfdGFza3MsIGxpbWFfc2NoZWRf bWF4X3Rhc2tzLCBpbnQsIDA0NDQpOworCitNT0RVTEVfUEFSTV9ERVNDKG1heF9tZW0sICJNYXgg bWVtb3J5IHNpemUgaW4gTUIgY2FuIGJlIHVzZWQgKDwwID0gYXV0bykiKTsKK21vZHVsZV9wYXJh bV9uYW1lZChtYXhfbWVtLCBsaW1hX21heF9tZW0sIGludCwgMDQ0NCk7CisKK3N0YXRpYyBpbnQg bGltYV9pb2N0bF9pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVj dCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2xpbWFfaW5mbyAqaW5mbyA9IGRhdGE7 CisJc3RydWN0IGxpbWFfZGV2aWNlICpsZGV2ID0gdG9fbGltYV9kZXYoZGV2KTsKKworCXN3aXRj aCAobGRldi0+aWQpIHsKKwljYXNlIGxpbWFfZ3B1X21hbGk0MDA6CisJCWluZm8tPmdwdV9pZCA9 IExJTUFfSU5GT19HUFVfTUFMSTQwMDsKKwkJYnJlYWs7CisJY2FzZSBsaW1hX2dwdV9tYWxpNDUw OgorCQlpbmZvLT5ncHVfaWQgPSBMSU1BX0lORk9fR1BVX01BTEk0NTA7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpbmZvLT5udW1fcHAgPSBsZGV2LT5waXBl W2xpbWFfcGlwZV9wcF0ubnVtX3Byb2Nlc3NvcjsKKwlpbmZvLT52YV9zdGFydCA9IGxkZXYtPnZh X3N0YXJ0OworCWluZm8tPnZhX2VuZCA9IGxkZXYtPnZhX2VuZDsKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBsaW1hX2lvY3RsX2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBkcm1fbGltYV9n ZW1fY3JlYXRlICphcmdzID0gZGF0YTsKKworCWlmIChhcmdzLT5mbGFncykKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlpZiAoYXJncy0+c2l6ZSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJl dHVybiBsaW1hX2dlbV9jcmVhdGVfaGFuZGxlKGRldiwgZmlsZSwgYXJncy0+c2l6ZSwgYXJncy0+ ZmxhZ3MsICZhcmdzLT5oYW5kbGUpOworfQorCitzdGF0aWMgaW50IGxpbWFfaW9jdGxfZ2VtX2lu Zm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpm aWxlKQoreworCXN0cnVjdCBkcm1fbGltYV9nZW1faW5mbyAqYXJncyA9IGRhdGE7CisKKwlyZXR1 cm4gbGltYV9nZW1fbW1hcF9vZmZzZXQoZmlsZSwgYXJncy0+aGFuZGxlLCAmYXJncy0+b2Zmc2V0 KTsKK30KKworc3RhdGljIGludCBsaW1hX2lvY3RsX2dlbV92YShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRybV9s aW1hX2dlbV92YSAqYXJncyA9IGRhdGE7CisKKwlzd2l0Y2ggKGFyZ3MtPm9wKSB7CisJY2FzZSBM SU1BX1ZBX09QX01BUDoKKwkJcmV0dXJuIGxpbWFfZ2VtX3ZhX21hcChmaWxlLCBhcmdzLT5oYW5k bGUsIGFyZ3MtPmZsYWdzLCBhcmdzLT52YSk7CisJY2FzZSBMSU1BX1ZBX09QX1VOTUFQOgorCQly ZXR1cm4gbGltYV9nZW1fdmFfdW5tYXAoZmlsZSwgYXJncy0+aGFuZGxlLCBhcmdzLT52YSk7CisJ ZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW50IGxpbWFfaW9j dGxfZ2VtX3N1Ym1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRybV9saW1hX2dlbV9zdWJtaXRfaW4gKmFyZ3Mg PSBkYXRhOworCXN0cnVjdCBsaW1hX2RldmljZSAqbGRldiA9IHRvX2xpbWFfZGV2KGRldik7CisJ c3RydWN0IGxpbWFfZHJtX3ByaXYgKnByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKKwlzdHJ1Y3Qg ZHJtX2xpbWFfZ2VtX3N1Ym1pdF9ibyAqYm9zOworCXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVy ICp2YnM7CisJdW5pb24gZHJtX2xpbWFfZ2VtX3N1Ym1pdF9kZXAgKmRlcHMgPSBOVUxMOworCXN0 cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGU7CisJc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFz azsKKwlzdHJ1Y3QgbGltYV9jdHggKmN0eDsKKwlzdHJ1Y3QgbGltYV9zdWJtaXQgc3VibWl0ID0g ezB9OworCWludCBlcnIgPSAwLCBzaXplOworCisJaWYgKGFyZ3MtPnBpcGUgPj0gbGltYV9waXBl X251bSB8fCBhcmdzLT5ucl9ib3MgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXJn cy0+ZmxhZ3MgJiB+KExJTUFfU1VCTUlUX0ZMQUdfRVhQTElDSVRfRkVOQ0UgfAorCQkJICAgIExJ TUFfU1VCTUlUX0ZMQUdfU1lOQ19GRF9PVVQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBpcGUg PSBsZGV2LT5waXBlICsgYXJncy0+cGlwZTsKKwlpZiAoYXJncy0+ZnJhbWVfc2l6ZSAhPSBwaXBl LT5mcmFtZV9zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNpemUgPSBhcmdzLT5ucl9ib3Mg KiAoc2l6ZW9mKCpzdWJtaXQuYm9zKSArIHNpemVvZigqc3VibWl0LnZicykpICsKKwkJYXJncy0+ bnJfZGVwcyAqIHNpemVvZigqc3VibWl0LmRlcHMpOworCWJvcyA9IGt6YWxsb2Moc2l6ZSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFib3MpCisJCXJldHVybiAtRU5PTUVNOworCisJc2l6ZSA9IGFyZ3Mt Pm5yX2JvcyAqIHNpemVvZigqc3VibWl0LmJvcyk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJvcywg dTY0X3RvX3VzZXJfcHRyKGFyZ3MtPmJvcyksIHNpemUpKSB7CisJCWVyciA9IC1FRkFVTFQ7CisJ CWdvdG8gb3V0MDsKKwl9CisKKwl2YnMgPSAodm9pZCAqKWJvcyArIHNpemU7CisKKwlpZiAoYXJn cy0+bnJfZGVwcykgeworCQlkZXBzID0gKHZvaWQgKil2YnMgKyBhcmdzLT5ucl9ib3MgKiBzaXpl b2YoKnN1Ym1pdC52YnMpOworCQlzaXplID0gYXJncy0+bnJfZGVwcyAqIHNpemVvZigqc3VibWl0 LmRlcHMpOworCQlpZiAoY29weV9mcm9tX3VzZXIoZGVwcywgdTY0X3RvX3VzZXJfcHRyKGFyZ3Mt PmRlcHMpLCBzaXplKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0MDsKKwkJfQor CX0KKworCXRhc2sgPSBrbWVtX2NhY2hlX3phbGxvYyhwaXBlLT50YXNrX3NsYWIsIEdGUF9LRVJO RUwpOworCWlmICghdGFzaykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDA7CisJfQor CisJdGFzay0+ZnJhbWUgPSB0YXNrICsgMTsKKwlpZiAoY29weV9mcm9tX3VzZXIodGFzay0+ZnJh bWUsIHU2NF90b191c2VyX3B0cihhcmdzLT5mcmFtZSksIGFyZ3MtPmZyYW1lX3NpemUpKSB7CisJ CWVyciA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0MTsKKwl9CisKKwllcnIgPSBwaXBlLT50YXNrX3Zh bGlkYXRlKHBpcGUsIHRhc2spOworCWlmIChlcnIpCisJCWdvdG8gb3V0MTsKKworCWN0eCA9IGxp bWFfY3R4X2dldCgmcHJpdi0+Y3R4X21nciwgYXJncy0+Y3R4KTsKKwlpZiAoIWN0eCkgeworCQll cnIgPSAtRU5PRU5UOworCQlnb3RvIG91dDE7CisJfQorCisJc3VibWl0LnBpcGUgPSBhcmdzLT5w aXBlOworCXN1Ym1pdC5ib3MgPSBib3M7CisJc3VibWl0LnZicyA9IHZiczsKKwlzdWJtaXQubnJf Ym9zID0gYXJncy0+bnJfYm9zOworCXN1Ym1pdC50YXNrID0gdGFzazsKKwlzdWJtaXQuY3R4ID0g Y3R4OworCXN1Ym1pdC5kZXBzID0gZGVwczsKKwlzdWJtaXQubnJfZGVwcyA9IGFyZ3MtPm5yX2Rl cHM7CisJc3VibWl0LmZsYWdzID0gYXJncy0+ZmxhZ3M7CisKKwllcnIgPSBsaW1hX2dlbV9zdWJt aXQoZmlsZSwgJnN1Ym1pdCk7CisJaWYgKCFlcnIpIHsKKwkJc3RydWN0IGRybV9saW1hX2dlbV9z dWJtaXRfb3V0ICpvdXQgPSBkYXRhOworCQlvdXQtPmZlbmNlID0gc3VibWl0LmZlbmNlOworCQlv dXQtPmRvbmUgPSBzdWJtaXQuZG9uZTsKKwkJb3V0LT5zeW5jX2ZkID0gc3VibWl0LnN5bmNfZmQ7 CisJfQorCisJbGltYV9jdHhfcHV0KGN0eCk7CitvdXQxOgorCWlmIChlcnIpCisJCWttZW1fY2Fj aGVfZnJlZShwaXBlLT50YXNrX3NsYWIsIHRhc2spOworb3V0MDoKKwlrZnJlZShib3MpOworCXJl dHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbGltYV93YWl0X2ZlbmNlKHN0cnVjdCBkbWFfZmVu Y2UgKmZlbmNlLCB1NjQgdGltZW91dF9ucykKK3sKKwlzaWduZWQgbG9uZyByZXQ7CisKKwlpZiAo IXRpbWVvdXRfbnMpCisJCXJldCA9IGRtYV9mZW5jZV9pc19zaWduYWxlZChmZW5jZSkgPyAwIDog LUVCVVNZOworCWVsc2UgeworCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBsaW1hX3RpbWVvdXRf dG9famlmZmllcyh0aW1lb3V0X25zKTsKKworCQkvKiBtdXN0IHVzZSBsb25nIGZvciByZXN1bHQg Y2hlY2sgYmVjYXVzZSBpbiA2NGJpdCBhcmNoIGludAorCQkgKiB3aWxsIG92ZXJmbG93IGlmIHRp bWVvdXQgaXMgdG9vIGxhcmdlIGFuZCBnZXQgPDAgcmVzdWx0CisJCSAqLworCQlyZXQgPSBkbWFf ZmVuY2Vfd2FpdF90aW1lb3V0KGZlbmNlLCB0cnVlLCB0aW1lb3V0KTsKKwkJaWYgKHJldCA9PSAw KQorCQkJcmV0ID0gdGltZW91dCA/IC1FVElNRURPVVQgOiAtRUJVU1k7CisJCWVsc2UgaWYgKHJl dCA+IDApCisJCQlyZXQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQg bGltYV9pb2N0bF93YWl0X2ZlbmNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs IHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2xpbWFfd2FpdF9mZW5jZSAq YXJncyA9IGRhdGE7CisJc3RydWN0IGxpbWFfZHJtX3ByaXYgKnByaXYgPSBmaWxlLT5kcml2ZXJf cHJpdjsKKwlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKKwlpbnQgZXJyID0gMDsKKworCWZlbmNl ID0gbGltYV9jdHhfZ2V0X25hdGl2ZV9mZW5jZSgmcHJpdi0+Y3R4X21nciwgYXJncy0+Y3R4LAor CQkJCQkgIGFyZ3MtPnBpcGUsIGFyZ3MtPnNlcSk7CisJaWYgKElTX0VSUihmZW5jZSkpCisJCXJl dHVybiBQVFJfRVJSKGZlbmNlKTsKKworCWlmIChmZW5jZSkgeworCQllcnIgPSBsaW1hX3dhaXRf ZmVuY2UoZmVuY2UsIGFyZ3MtPnRpbWVvdXRfbnMpOworCQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsK Kwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGxpbWFfaW9jdGxfZ2VtX3dhaXQo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxl KQoreworCXN0cnVjdCBkcm1fbGltYV9nZW1fd2FpdCAqYXJncyA9IGRhdGE7CisKKwlpZiAoIShh cmdzLT5vcCAmIChMSU1BX0dFTV9XQUlUX1JFQUR8TElNQV9HRU1fV0FJVF9XUklURSkpKQorCSAg ICByZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBsaW1hX2dlbV93YWl0KGZpbGUsIGFyZ3MtPmhh bmRsZSwgYXJncy0+b3AsIGFyZ3MtPnRpbWVvdXRfbnMpOworfQorCitzdGF0aWMgaW50IGxpbWFf aW9jdGxfY3R4KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2xpbWFfY3R4ICphcmdzID0gZGF0YTsKKwlzdHJ1 Y3QgbGltYV9kcm1fcHJpdiAqcHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2OworCXN0cnVjdCBsaW1h X2RldmljZSAqbGRldiA9IHRvX2xpbWFfZGV2KGRldik7CisKKwlpZiAoYXJncy0+b3AgPT0gTElN QV9DVFhfT1BfQ1JFQVRFKQorCQlyZXR1cm4gbGltYV9jdHhfY3JlYXRlKGxkZXYsICZwcml2LT5j dHhfbWdyLCAmYXJncy0+aWQpOworCWVsc2UgaWYgKGFyZ3MtPm9wID09IExJTUFfQ1RYX09QX0ZS RUUpCisJCXJldHVybiBsaW1hX2N0eF9mcmVlKCZwcml2LT5jdHhfbWdyLCBhcmdzLT5pZCk7CisK KwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBsaW1hX2RybV9kcml2ZXJfb3Blbihz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJaW50IGVy cjsKKwlzdHJ1Y3QgbGltYV9kcm1fcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmxk ZXYgPSB0b19saW1hX2RldihkZXYpOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPnZt ID0gbGltYV92bV9jcmVhdGUobGRldik7CisJaWYgKCFwcml2LT52bSkgeworCQllcnIgPSAtRU5P TUVNOworCQlnb3RvIGVycl9vdXQwOworCX0KKworICAgICAgICBsaW1hX2N0eF9tZ3JfaW5pdCgm cHJpdi0+Y3R4X21ncik7CisKKwlmaWxlLT5kcml2ZXJfcHJpdiA9IHByaXY7CisJcmV0dXJuIDA7 CisKK2Vycl9vdXQwOgorCWtmcmVlKHByaXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2 b2lkIGxpbWFfZHJtX2RyaXZlcl9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IGxpbWFfZHJtX3ByaXYgKnByaXYgPSBmaWxl LT5kcml2ZXJfcHJpdjsKKworICAgICAgICBsaW1hX2N0eF9tZ3JfZmluaSgmcHJpdi0+Y3R4X21n cik7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZHJtX2RyaXZlcl9wb3N0Y2xvc2Uoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBsaW1hX2Ry bV9wcml2ICpwcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7CisKKwlsaW1hX3ZtX3B1dChwcml2LT52 bSk7CisJa2ZyZWUocHJpdik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2lvY3RsX2Rl c2MgbGltYV9kcm1fZHJpdmVyX2lvY3Rsc1tdID0geworCURSTV9JT0NUTF9ERUZfRFJWKExJTUFf SU5GTywgbGltYV9pb2N0bF9pbmZvLCBEUk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKKwlEUk1f SU9DVExfREVGX0RSVihMSU1BX0dFTV9DUkVBVEUsIGxpbWFfaW9jdGxfZ2VtX2NyZWF0ZSwgRFJN X0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RMX0RFRl9EUlYoTElNQV9HRU1fSU5G TywgbGltYV9pb2N0bF9nZW1faW5mbywgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCisJRFJN X0lPQ1RMX0RFRl9EUlYoTElNQV9HRU1fVkEsIGxpbWFfaW9jdGxfZ2VtX3ZhLCBEUk1fQVVUSHxE Uk1fUkVOREVSX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGX0RSVihMSU1BX0dFTV9TVUJNSVQsIGxp bWFfaW9jdGxfZ2VtX3N1Ym1pdCwgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lP Q1RMX0RFRl9EUlYoTElNQV9XQUlUX0ZFTkNFLCBsaW1hX2lvY3RsX3dhaXRfZmVuY2UsIERSTV9B VVRIfERSTV9SRU5ERVJfQUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJWKExJTUFfR0VNX1dBSVQs IGxpbWFfaW9jdGxfZ2VtX3dhaXQsIERSTV9BVVRIfERSTV9SRU5ERVJfQUxMT1cpLAorCURSTV9J T0NUTF9ERUZfRFJWKExJTUFfQ1RYLCBsaW1hX2lvY3RsX2N0eCwgRFJNX0FVVEh8RFJNX1JFTkRF Ul9BTExPVyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsaW1h X2RybV9kcml2ZXJfZm9wcyA9IHsKKwkub3duZXIgICAgICAgICAgICAgID0gVEhJU19NT0RVTEUs CisJLm9wZW4gICAgICAgICAgICAgICA9IGRybV9vcGVuLAorCS5yZWxlYXNlICAgICAgICAgICAg PSBkcm1fcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgICAgID0gZHJtX2lvY3RsLAorI2lmZGVm IENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsICAgICAgID0gZHJtX2NvbXBhdF9pb2N0bCwK KyNlbmRpZgorCS5tbWFwICAgICAgICAgICAgICAgPSBsaW1hX2dlbV9tbWFwLAorfTsKKworc3Rh dGljIHN0cnVjdCBkcm1fZHJpdmVyIGxpbWFfZHJtX2RyaXZlciA9IHsKKwkuZHJpdmVyX2ZlYXR1 cmVzICAgID0gRFJJVkVSX1JFTkRFUiB8IERSSVZFUl9HRU0gfCBEUklWRVJfUFJJTUUsCisJLm9w ZW4gICAgICAgICAgICAgICA9IGxpbWFfZHJtX2RyaXZlcl9vcGVuLAorCS5wcmVjbG9zZSAgICAg ICAgICAgPSBsaW1hX2RybV9kcml2ZXJfcHJlY2xvc2UsCisJLnBvc3RjbG9zZSAgICAgICAgICA9 IGxpbWFfZHJtX2RyaXZlcl9wb3N0Y2xvc2UsCisJLmlvY3RscyAgICAgICAgICAgICA9IGxpbWFf ZHJtX2RyaXZlcl9pb2N0bHMsCisJLm51bV9pb2N0bHMgICAgICAgICA9IEFSUkFZX1NJWkUobGlt YV9kcm1fZHJpdmVyX2lvY3RscyksCisJLmZvcHMgICAgICAgICAgICAgICA9ICZsaW1hX2RybV9k cml2ZXJfZm9wcywKKwkuZ2VtX2ZyZWVfb2JqZWN0X3VubG9ja2VkID0gbGltYV9nZW1fZnJlZV9v YmplY3QsCisJLmdlbV9vcGVuX29iamVjdCAgICA9IGxpbWFfZ2VtX29iamVjdF9vcGVuLAorCS5n ZW1fY2xvc2Vfb2JqZWN0ICAgPSBsaW1hX2dlbV9vYmplY3RfY2xvc2UsCisJLm5hbWUgICAgICAg ICAgICAgICA9ICJsaW1hIiwKKwkuZGVzYyAgICAgICAgICAgICAgID0gImxpbWEgRFJNIiwKKwku ZGF0ZSAgICAgICAgICAgICAgID0gIjIwMTcwMzI1IiwKKwkubWFqb3IgICAgICAgICAgICAgID0g MSwKKwkubWlub3IgICAgICAgICAgICAgID0gMCwKKwkucGF0Y2hsZXZlbCAgICAgICAgID0gMCwK KworCS5wcmltZV9mZF90b19oYW5kbGUgPSBkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRsZSwKKwku Z2VtX3ByaW1lX2ltcG9ydCAgID0gZHJtX2dlbV9wcmltZV9pbXBvcnQsCisJLmdlbV9wcmltZV9p bXBvcnRfc2dfdGFibGUgPSBsaW1hX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUsCisJLnByaW1l X2hhbmRsZV90b19mZCA9IGRybV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkLAorCS5nZW1fcHJpbWVf ZXhwb3J0ICAgPSBkcm1fZ2VtX3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX3Jlc19vYmogID0g bGltYV9nZW1fcHJpbWVfcmVzX29iaiwKKwkuZ2VtX3ByaW1lX2dldF9zZ190YWJsZSA9IGxpbWFf Z2VtX3ByaW1lX2dldF9zZ190YWJsZSwKK307CisKK3N0YXRpYyBpbnQgbGltYV9wZGV2X3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICps ZGV2OworCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2OworCWludCBlcnI7CisKKwlsZGV2ID0gZGV2 bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqbGRldiksIEdGUF9LRVJORUwpOworCWlmICgh bGRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsZGV2LT5wZGV2ID0gcGRldjsKKwlsZGV2LT5k ZXYgPSAmcGRldi0+ZGV2OworCWxkZXYtPmlkID0gKGVudW0gbGltYV9ncHVfaWQpb2ZfZGV2aWNl X2dldF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRl diwgbGRldik7CisKKwkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgRFJNIGRldmljZS4g Ki8KKwlkZGV2ID0gZHJtX2Rldl9hbGxvYygmbGltYV9kcm1fZHJpdmVyLCAmcGRldi0+ZGV2KTsK KwlpZiAoSVNfRVJSKGRkZXYpKQorCQlyZXR1cm4gUFRSX0VSUihkZGV2KTsKKworCWRkZXYtPmRl dl9wcml2YXRlID0gbGRldjsKKwlsZGV2LT5kZGV2ID0gZGRldjsKKworCWVyciA9IGxpbWFfZGV2 aWNlX2luaXQobGRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYXRh bCBlcnJvciBkdXJpbmcgR1BVIGluaXRcbiIpOworCQlnb3RvIGVycl9vdXQwOworCX0KKworCS8q CisJICogUmVnaXN0ZXIgdGhlIERSTSBkZXZpY2Ugd2l0aCB0aGUgY29yZSBhbmQgdGhlIGNvbm5l Y3RvcnMgd2l0aAorCSAqIHN5c2ZzLgorCSAqLworCWVyciA9IGRybV9kZXZfcmVnaXN0ZXIoZGRl diwgMCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX291dDE7CisKKwlyZXR1cm4gMDsKKwor ZXJyX291dDE6CisJbGltYV9kZXZpY2VfZmluaShsZGV2KTsKK2Vycl9vdXQwOgorCWRybV9kZXZf dW5yZWYoZGRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBsaW1hX3BkZXZfcmVt b3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGxpbWFfZGV2aWNl ICpsZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRkZXYgPSBsZGV2LT5kZGV2OworCisJZHJtX2Rldl91bnJlZ2lzdGVyKGRkZXYpOworCWxpbWFf ZGV2aWNlX2ZpbmkobGRldik7CisJZHJtX2Rldl91bnJlZihkZGV2KTsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZHRfbWF0Y2hbXSA9IHsKKwl7IC5j b21wYXRpYmxlID0gImFybSxtYWxpLTQwMCIsIC5kYXRhID0gKHZvaWQgKilsaW1hX2dwdV9tYWxp NDAwIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhcm0sbWFsaS00NTAiLCAuZGF0YSA9ICh2b2lkICop bGltYV9ncHVfbWFsaTQ1MCB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZHRf bWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBsaW1hX3BsYXRmb3JtX2Ry aXZlciA9IHsKKwkucHJvYmUgICAgICA9IGxpbWFfcGRldl9wcm9iZSwKKwkucmVtb3ZlICAgICA9 IGxpbWFfcGRldl9yZW1vdmUsCisJLmRyaXZlciAgICAgPSB7CisJCS5uYW1lICAgPSAibGltYSIs CisJCS5vZl9tYXRjaF90YWJsZSA9IGR0X21hdGNoLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBs aW1hX2NoZWNrX21vZHVsZV9wYXJhbSh2b2lkKQoreworCWlmIChsaW1hX3NjaGVkX21heF90YXNr cyA8IDQpCisJCWxpbWFfc2NoZWRfbWF4X3Rhc2tzID0gNDsKKwllbHNlCisJCWxpbWFfc2NoZWRf bWF4X3Rhc2tzID0gcm91bmR1cF9wb3dfb2ZfdHdvKGxpbWFfc2NoZWRfbWF4X3Rhc2tzKTsKKwor CWlmIChsaW1hX21heF9tZW0gPCAzMikKKwkJbGltYV9tYXhfbWVtID0gLTE7Cit9CisKK3N0YXRp YyBpbnQgX19pbml0IGxpbWFfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlsaW1hX2NoZWNr X21vZHVsZV9wYXJhbSgpOworCXJldCA9IGxpbWFfc2NoZWRfc2xhYl9pbml0KCk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbGlt YV9wbGF0Zm9ybV9kcml2ZXIpOworCWlmIChyZXQpCisJCWxpbWFfc2NoZWRfc2xhYl9maW5pKCk7 CisKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQobGltYV9pbml0KTsKKworc3RhdGljIHZv aWQgX19leGl0IGxpbWFfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVy KCZsaW1hX3BsYXRmb3JtX2RyaXZlcik7CisJbGltYV9zY2hlZF9zbGFiX2ZpbmkoKTsKK30KK21v ZHVsZV9leGl0KGxpbWFfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkxpbWEgUHJvamVjdCBEZXZl bG9wZXJzIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxpbWEgRFJNIERyaXZlciIpOworTU9EVUxF X0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGlt YV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZHJ2LmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yZjVmNTFkYTIxZGIKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2Rydi5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisg KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBMaW1hIFByb2plY3QKKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl IGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks CisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhP UihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us CisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAq LworI2lmbmRlZiBfX0xJTUFfRFJWX0hfXworI2RlZmluZSBfX0xJTUFfRFJWX0hfXworCisjaW5j bHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vdHRtL3R0bV9leGVjYnVmX3V0aWwuaD4K KworI2luY2x1ZGUgImxpbWFfY3R4LmgiCisKK2V4dGVybiBpbnQgbGltYV9zY2hlZF90aW1lb3V0 X21zOworZXh0ZXJuIGludCBsaW1hX3NjaGVkX21heF90YXNrczsKK2V4dGVybiBpbnQgbGltYV9t YXhfbWVtOworCitzdHJ1Y3QgbGltYV92bTsKK3N0cnVjdCBsaW1hX2JvOworc3RydWN0IGxpbWFf c2NoZWRfdGFzazsKKworc3RydWN0IGRybV9saW1hX2dlbV9zdWJtaXRfYm87CisKKyNkZWZpbmUg RFJNX0ZJTEVfUEFHRV9PRkZTRVQgKDB4MTAwMDAwMDAwVUxMID4+IFBBR0VfU0hJRlQpCisKK3N0 cnVjdCBsaW1hX2RybV9wcml2IHsKKwlzdHJ1Y3QgbGltYV92bSAqdm07CisJc3RydWN0IGxpbWFf Y3R4X21nciBjdHhfbWdyOworfTsKKworc3RydWN0IGxpbWFfc3VibWl0IHsKKwlzdHJ1Y3QgbGlt YV9jdHggKmN0eDsKKwlpbnQgcGlwZTsKKwl1MzIgZmxhZ3M7CisKKwlzdHJ1Y3QgZHJtX2xpbWFf Z2VtX3N1Ym1pdF9ibyAqYm9zOworCXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyICp2YnM7CisJ dTMyIG5yX2JvczsKKworCXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVmZmVyIHZtX3BkX3ZiOworCXN0 cnVjdCB3d19hY3F1aXJlX2N0eCB0aWNrZXQ7CisJc3RydWN0IGxpc3RfaGVhZCBkdXBsaWNhdGVz OworCXN0cnVjdCBsaXN0X2hlYWQgdmFsaWRhdGVkOworCisJdW5pb24gZHJtX2xpbWFfZ2VtX3N1 Ym1pdF9kZXAgKmRlcHM7CisJdTMyIG5yX2RlcHM7CisKKwlzdHJ1Y3QgbGltYV9zY2hlZF90YXNr ICp0YXNrOworCisJdWludDMyX3QgZmVuY2U7CisJdWludDMyX3QgZG9uZTsKKwlpbnQgc3luY19m ZDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpbWFfZHJtX3ByaXYgKgordG9fbGltYV9k cm1fcHJpdihzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJcmV0dXJuIGZpbGUtPmRyaXZlcl9w cml2OworfQorCisjZW5kaWYKLS0gCjIuMTcuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCg==