From: Piotr Redlewski Subject: [RFC 6/7] drm/amdgpu/uvd4: add hardware specific functions for uvd 4.0 Date: Wed, 8 Nov 2017 23:38:38 +0100 Message-ID: <20171108223839.579-7-predlewski@gmail.com> References: <20171108223839.579-1-predlewski@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20171108223839.579-1-predlewski-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org QWRkIGxvZ2ljIGZvciBzdGFydGluZywgc3RvcHBpbmcsIHN1c3BlbmRpbmcgYW5kIHJlc3VtaW5n IHV2ZCBibG9jawoKU2lnbmVkLW9mZi1ieTogUGlvdHIgUmVkbGV3c2tpIDxwcmVkbGV3c2tpQGdt YWlsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjZfMC5jIHwgICA3 IC0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NpLmMgICAgICAgfCAyNTAgKysrKysrKysr KysrKysrKy0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NpZC5oICAgICAgfCAgMjIgKy0K IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3V2ZF92NF8wLmMgfCA0ODggKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA3MzYgaW5zZXJ0aW9ucygr KSwgMzEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvZ2Z4X3Y2XzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92Nl8wLmMKaW5k ZXggOTQzMGQ0ODA5YjUzLi4wNzQ0MTE3ZWU3ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2dmeF92Nl8wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv Z2Z4X3Y2XzAuYwpAQCAtMTY5NSwxMyArMTY5NSw2IEBAIHN0YXRpYyB2b2lkIGdmeF92Nl8wX2dw dV9pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCVdSRUczMihtbURNQV9USUxJTkdf Q09ORklHICsgRE1BMF9SRUdJU1RFUl9PRkZTRVQsIGdiX2FkZHJfY29uZmlnKTsKIAlXUkVHMzIo bW1ETUFfVElMSU5HX0NPTkZJRyArIERNQTFfUkVHSVNURVJfT0ZGU0VULCBnYl9hZGRyX2NvbmZp Zyk7CiAKLSNpZiAwCi0JaWYgKGFkZXYtPmhhc191dmQpIHsKLQkJV1JFRzMyKG1tVVZEX1VERUNf QUREUl9DT05GSUcsIGdiX2FkZHJfY29uZmlnKTsKLQkJV1JFRzMyKG1tVVZEX1VERUNfREJfQURE Ul9DT05GSUcsIGdiX2FkZHJfY29uZmlnKTsKLQkJV1JFRzMyKG1tVVZEX1VERUNfREJXX0FERFJf Q09ORklHLCBnYl9hZGRyX2NvbmZpZyk7Ci0JfQotI2VuZGlmCiAJZ2Z4X3Y2XzBfdGlsaW5nX21v ZGVfdGFibGVfaW5pdChhZGV2KTsKIAogCWdmeF92Nl8wX3NldHVwX3JiKGFkZXYpOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvc2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L3NpLmMKaW5kZXggMmFjMWMyYmU4Y2E0Li5iYzZmZDFmZjRmODYgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3NpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvc2kuYwpAQCAtOTcxLDYgKzk3MSwyOCBAQCBzdGF0aWMgdm9pZCBzaV9zbWNf d3JlZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdTMyIHJlZywgdTMyIHYpCiAJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmYWRldi0+c21jX2lkeF9sb2NrLCBmbGFncyk7CiB9CiAKK3N0YXRp YyB1MzIgc2lfdXZkX2N0eF9ycmVnKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1MzIgcmVn KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHI7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmYWRldi0+dXZkX2N0eF9pZHhfbG9jaywgZmxhZ3MpOworCVdSRUczMihtbVVWRF9DVFhfSU5E RVgsICgocmVnKSAmIDB4MWZmKSk7CisJciA9IFJSRUczMihtbVVWRF9DVFhfREFUQSk7CisJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmYWRldi0+dXZkX2N0eF9pZHhfbG9jaywgZmxhZ3MpOworCXJl dHVybiByOworfQorCitzdGF0aWMgdm9pZCBzaV91dmRfY3R4X3dyZWcoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsIHUzMiByZWcsIHUzMiB2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisK KwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRldi0+dXZkX2N0eF9pZHhfbG9jaywgZmxhZ3MpOworCVdS RUczMihtbVVWRF9DVFhfSU5ERVgsICgocmVnKSAmIDB4MWZmKSk7CisJV1JFRzMyKG1tVVZEX0NU WF9EQVRBLCAodikpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkZXYtPnV2ZF9jdHhfaWR4 X2xvY2ssIGZsYWdzKTsKK30KKwogc3RhdGljIHN0cnVjdCBhbWRncHVfYWxsb3dlZF9yZWdpc3Rl cl9lbnRyeSBzaV9hbGxvd2VkX3JlYWRfcmVnaXN0ZXJzW10gPSB7CiAJe0dSQk1fU1RBVFVTfSwK IAl7R0JfQUREUl9DT05GSUd9LApAQCAtMTIxOSw5ICsxMjQxLDIzMSBAQCBzdGF0aWMgdTMyIHNp X2dldF94Y2xrKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCXJldHVybiByZWZlcmVuY2Vf Y2xvY2s7CiB9CiAKLS8veHh4Om5vdCBpbXBsZW1lbnRlZAorCitzdGF0aWMgdW5zaWduZWQgc2lf dXZkX2NhbGNfdXBsbF9wb3N0X2Rpdih1bnNpZ25lZCB2Y29fZnJlcSwKKwkJCQkJICAgICAgdW5z aWduZWQgdGFyZ2V0X2ZyZXEsCisJCQkJCSAgICAgIHVuc2lnbmVkIHBkX21pbiwKKwkJCQkJICAg ICAgdW5zaWduZWQgcGRfZXZlbikKK3sKKwl1bnNpZ25lZCBwb3N0X2RpdiA9IHZjb19mcmVxIC8g dGFyZ2V0X2ZyZXE7CisKKwkvKiBhZGp1c3QgdG8gcG9zdCBkaXZpZGVyIG1pbmltdW0gdmFsdWUg Ki8KKwlpZiAocG9zdF9kaXYgPCBwZF9taW4pCisJCXBvc3RfZGl2ID0gcGRfbWluOworCisJLyog d2UgYWx3YXkgbmVlZCBhIGZyZXF1ZW5jeSBsZXNzIHRoYW4gb3IgZXF1YWwgdGhlIHRhcmdldCAq LworCWlmICgodmNvX2ZyZXEgLyBwb3N0X2RpdikgPiB0YXJnZXRfZnJlcSkKKwkJcG9zdF9kaXYg Kz0gMTsKKworCS8qIHBvc3QgZGl2aWRlcnMgYWJvdmUgYSBjZXJ0YWluIHZhbHVlIG11c3QgYmUg ZXZlbiAqLworCWlmIChwb3N0X2RpdiA+IHBkX2V2ZW4gJiYgcG9zdF9kaXYgJSAyKQorCQlwb3N0 X2RpdiArPSAxOworCisJcmV0dXJuIHBvc3RfZGl2OworfQorCisvKioKKyAqIHNpX3V2ZF9jYWxj X3VwbGxfZGl2aWRlcnMgLSBjYWxjIFVQTEwgY2xvY2sgZGl2aWRlcnMKKyAqCisgKiBAYWRldjog YW1kZ3B1X2RldmljZSBwb2ludGVyCisgKiBAdmNsazogd2FudGVkIFZDTEsKKyAqIEBkY2xrOiB3 YW50ZWQgRENMSworICogQHZjb19taW46IG1pbmltdW0gVkNPIGZyZXF1ZW5jeQorICogQHZjb19t YXg6IG1heGltdW0gVkNPIGZyZXF1ZW5jeQorICogQGZiX2ZhY3RvcjogZmFjdG9yIHRvIG11bHRp cGx5IHZjbyBmcmVxIHdpdGgKKyAqIEBmYl9tYXNrOiBsaW1pdCBhbmQgYml0bWFzayBmb3IgZmVl ZGJhY2sgZGl2aWRlcgorICogQHBkX21pbjogcG9zdCBkaXZpZGVyIG1pbmltdW0KKyAqIEBwZF9t YXg6IHBvc3QgZGl2aWRlciBtYXhpbXVtCisgKiBAcGRfZXZlbjogcG9zdCBkaXZpZGVyIG11c3Qg YmUgZXZlbiBhYm92ZSB0aGlzIHZhbHVlCisgKiBAb3B0aW1hbF9mYl9kaXY6IHJlc3VsdGluZyBm ZWVkYmFjayBkaXZpZGVyCisgKiBAb3B0aW1hbF92Y2xrX2RpdjogcmVzdWx0aW5nIHZjbGsgcG9z dCBkaXZpZGVyCisgKiBAb3B0aW1hbF9kY2xrX2RpdjogcmVzdWx0aW5nIGRjbGsgcG9zdCBkaXZp ZGVyCisgKgorICogQ2FsY3VsYXRlIGRpdmlkZXJzIGZvciBVVkRzIFVQTEwgKFI2eHgtU0ksIGV4 Y2VwdCBBUFVzKS4KKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzIC1FSU5WQUwgb24gZXJyb3Iu CisgKi8KK2ludCBzaV91dmRfY2FsY191cGxsX2RpdmlkZXJzKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2LAorCQkJCSAgdW5zaWduZWQgdmNsaywgdW5zaWduZWQgZGNsaywKKwkJCQkgIHVuc2ln bmVkIHZjb19taW4sIHVuc2lnbmVkIHZjb19tYXgsCisJCQkJICB1bnNpZ25lZCBmYl9mYWN0b3Is IHVuc2lnbmVkIGZiX21hc2ssCisJCQkJICB1bnNpZ25lZCBwZF9taW4sIHVuc2lnbmVkIHBkX21h eCwKKwkJCQkgIHVuc2lnbmVkIHBkX2V2ZW4sCisJCQkJICB1bnNpZ25lZCAqb3B0aW1hbF9mYl9k aXYsCisJCQkJICB1bnNpZ25lZCAqb3B0aW1hbF92Y2xrX2RpdiwKKwkJCQkgIHVuc2lnbmVkICpv cHRpbWFsX2RjbGtfZGl2KQoreworCXVuc2lnbmVkIHZjb19mcmVxLCByZWZfZnJlcSA9IGFkZXYt PmNsb2NrLnNwbGwucmVmZXJlbmNlX2ZyZXE7CisKKwkvKiBzdGFydCBvZmYgd2l0aCBzb21ldGhp bmcgbGFyZ2UgKi8KKwl1bnNpZ25lZCBvcHRpbWFsX3Njb3JlID0gfjA7CisKKwkvKiBsb29wIHRo cm91Z2ggdmNvIGZyb20gbG93IHRvIGhpZ2ggKi8KKwl2Y29fbWluID0gbWF4KG1heCh2Y29fbWlu LCB2Y2xrKSwgZGNsayk7CisJZm9yICh2Y29fZnJlcSA9IHZjb19taW47IHZjb19mcmVxIDw9IHZj b19tYXg7IHZjb19mcmVxICs9IDEwMCkgeworCisJCXVpbnQ2NF90IGZiX2RpdiA9ICh1aW50NjRf dCl2Y29fZnJlcSAqIGZiX2ZhY3RvcjsKKwkJdW5zaWduZWQgdmNsa19kaXYsIGRjbGtfZGl2LCBz Y29yZTsKKworCQlkb19kaXYoZmJfZGl2LCByZWZfZnJlcSk7CisKKwkJLyogZmIgZGl2IG91dCBv ZiByYW5nZSA/ICovCisJCWlmIChmYl9kaXYgPiBmYl9tYXNrKQorCQkJYnJlYWs7IC8qIGl0IGNh biBvbHkgZ2V0IHdvcnNlICovCisKKwkJZmJfZGl2ICY9IGZiX21hc2s7CisKKwkJLyogY2FsYyB2 Y2xrIGRpdmlkZXIgd2l0aCBjdXJyZW50IHZjbyBmcmVxICovCisJCXZjbGtfZGl2ID0gc2lfdXZk X2NhbGNfdXBsbF9wb3N0X2Rpdih2Y29fZnJlcSwgdmNsaywKKwkJCQkJCSAgICAgcGRfbWluLCBw ZF9ldmVuKTsKKwkJaWYgKHZjbGtfZGl2ID4gcGRfbWF4KQorCQkJYnJlYWs7IC8qIHZjbyBpcyB0 b28gYmlnLCBpdCBoYXMgdG8gc3RvcCAqLworCisJCS8qIGNhbGMgZGNsayBkaXZpZGVyIHdpdGgg Y3VycmVudCB2Y28gZnJlcSAqLworCQlkY2xrX2RpdiA9IHNpX3V2ZF9jYWxjX3VwbGxfcG9zdF9k aXYodmNvX2ZyZXEsIGRjbGssCisJCQkJCQkgICAgIHBkX21pbiwgcGRfZXZlbik7CisJCWlmICh2 Y2xrX2RpdiA+IHBkX21heCkKKwkJCWJyZWFrOyAvKiB2Y28gaXMgdG9vIGJpZywgaXQgaGFzIHRv IHN0b3AgKi8KKworCQkvKiBjYWxjIHNjb3JlIHdpdGggY3VycmVudCB2Y28gZnJlcSAqLworCQlz Y29yZSA9IHZjbGsgLSAodmNvX2ZyZXEgLyB2Y2xrX2RpdikgKyBkY2xrIC0gKHZjb19mcmVxIC8g ZGNsa19kaXYpOworCisJCS8qIGRldGVybWluZSBpZiB0aGlzIHZjbyBzZXR0aW5nIGlzIGJldHRl ciB0aGFuIGN1cnJlbnQgb3B0aW1hbCBzZXR0aW5ncyAqLworCQlpZiAoc2NvcmUgPCBvcHRpbWFs X3Njb3JlKSB7CisJCQkqb3B0aW1hbF9mYl9kaXYgPSBmYl9kaXY7CisJCQkqb3B0aW1hbF92Y2xr X2RpdiA9IHZjbGtfZGl2OworCQkJKm9wdGltYWxfZGNsa19kaXYgPSBkY2xrX2RpdjsKKwkJCW9w dGltYWxfc2NvcmUgPSBzY29yZTsKKwkJCWlmIChvcHRpbWFsX3Njb3JlID09IDApCisJCQkJYnJl YWs7IC8qIGl0IGNhbid0IGdldCBiZXR0ZXIgdGhhbiB0aGlzICovCisJCX0KKwl9CisKKwkvKiBk aWQgd2UgZm91bmQgYSB2YWxpZCBzZXR1cCA/ICovCisJaWYgKG9wdGltYWxfc2NvcmUgPT0gfjAp CisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzaV91dmRfc2VuZF91 cGxsX2N0bHJlcShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCSAgICB1bnNpZ25lZCBj Z191cGxsX2Z1bmNfY250bCkKK3sKKwl1bnNpZ25lZCBpOworCisJLyogbWFrZSBzdXJlIFVQTExf Q1RMUkVRIGlzIGRlYXNzZXJ0ZWQgKi8KKwlXUkVHMzJfUChjZ191cGxsX2Z1bmNfY250bCwgMCwg flVQTExfQ1RMUkVRX01BU0spOworCisJbWRlbGF5KDEwKTsKKworCS8qIGFzc2VydCBVUExMX0NU TFJFUSAqLworCVdSRUczMl9QKGNnX3VwbGxfZnVuY19jbnRsLCBVUExMX0NUTFJFUV9NQVNLLCB+ VVBMTF9DVExSRVFfTUFTSyk7CisKKwkvKiB3YWl0IGZvciBDVExBQ0sgYW5kIENUTEFDSzIgdG8g Z2V0IGFzc2VydGVkICovCisJZm9yIChpID0gMDsgaSA8IDEwMDsgKytpKSB7CisJCXVpbnQzMl90 IG1hc2sgPSBVUExMX0NUTEFDS19NQVNLIHwgVVBMTF9DVExBQ0syX01BU0s7CisJCWlmICgoUlJF RzMyKGNnX3VwbGxfZnVuY19jbnRsKSAmIG1hc2spID09IG1hc2spCisJCQlicmVhazsKKwkJbWRl bGF5KDEwKTsKKwl9CisKKwkvKiBkZWFzc2VydCBVUExMX0NUTFJFUSAqLworCVdSRUczMl9QKGNn X3VwbGxfZnVuY19jbnRsLCAwLCB+VVBMTF9DVExSRVFfTUFTSyk7CisKKwlpZiAoaSA9PSAxMDAp IHsKKwkJRFJNX0VSUk9SKCJUaW1lb3V0IHNldHRpbmcgVVZEIGNsb2NrcyFcbiIpOworCQlyZXR1 cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzaV9zZXRf dXZkX2Nsb2NrcyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdTMyIHZjbGssIHUzMiBkY2xr KQogeworCXVuc2lnbmVkIGZiX2RpdiA9IDAsIHZjbGtfZGl2ID0gMCwgZGNsa19kaXYgPSAwOwor CWludCByOworCisJLyogYnlwYXNzIHZjbGsgYW5kIGRjbGsgd2l0aCBiY2xrICovCisJV1JFRzMy X1AoQ0dfVVBMTF9GVU5DX0NOVExfMiwKKwkJVkNMS19TUkNfU0VMKDEpIHwgRENMS19TUkNfU0VM KDEpLAorCQl+KFZDTEtfU1JDX1NFTF9NQVNLIHwgRENMS19TUkNfU0VMX01BU0spKTsKKworCS8q IHB1dCBQTEwgaW4gYnlwYXNzIG1vZGUgKi8KKwlXUkVHMzJfUChDR19VUExMX0ZVTkNfQ05UTCwg VVBMTF9CWVBBU1NfRU5fTUFTSywgflVQTExfQllQQVNTX0VOX01BU0spOworCisJaWYgKCF2Y2xr IHx8ICFkY2xrKSB7CisJCS8qIGtlZXAgdGhlIEJ5cGFzcyBtb2RlICovCisJCXJldHVybiAwOwor CX0KKworCXIgPSBzaV91dmRfY2FsY191cGxsX2RpdmlkZXJzKGFkZXYsIHZjbGssIGRjbGssIDEy NTAwMCwgMjUwMDAwLAorCQkJCQkgIDE2Mzg0LCAweDAzRkZGRkZGLCAwLCAxMjgsIDUsCisJCQkJ CSAgJmZiX2RpdiwgJnZjbGtfZGl2LCAmZGNsa19kaXYpOworCisJaWYgKHIpCisJCXJldHVybiBy OworCisJLyogc2V0IFJFU0VUX0FOVElfTVVYIHRvIDAgKi8KKwlXUkVHMzJfUChDR19VUExMX0ZV TkNfQ05UTF81LCAwLCB+UkVTRVRfQU5USV9NVVhfTUFTSyk7CisKKwkvKiBzZXQgVkNPX01PREUg dG8gMSAqLworCVdSRUczMl9QKENHX1VQTExfRlVOQ19DTlRMLCBVUExMX1ZDT19NT0RFX01BU0ss IH5VUExMX1ZDT19NT0RFX01BU0spOworCisJLyogZGlzYWJsZSBzbGVlcCBtb2RlICovCisJV1JF RzMyX1AoQ0dfVVBMTF9GVU5DX0NOVEwsIDAsIH5VUExMX1NMRUVQX01BU0spOworCisJLyogZGVh c3NlcnQgVVBMTF9SRVNFVCAqLworCVdSRUczMl9QKENHX1VQTExfRlVOQ19DTlRMLCAwLCB+VVBM TF9SRVNFVF9NQVNLKTsKKworCW1kZWxheSgxKTsKKworCXIgPSBzaV91dmRfc2VuZF91cGxsX2N0 bHJlcShhZGV2LCBDR19VUExMX0ZVTkNfQ05UTCk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJ LyogYXNzZXJ0IFVQTExfUkVTRVQgYWdhaW4gKi8KKwlXUkVHMzJfUChDR19VUExMX0ZVTkNfQ05U TCwgVVBMTF9SRVNFVF9NQVNLLCB+VVBMTF9SRVNFVF9NQVNLKTsKKworCS8qIGRpc2FibGUgc3By ZWFkIHNwZWN0cnVtLiAqLworCVdSRUczMl9QKENHX1VQTExfU1BSRUFEX1NQRUNUUlVNLCAwLCB+ U1NFTl9NQVNLKTsKKworCS8qIHNldCBmZWVkYmFjayBkaXZpZGVyICovCisJV1JFRzMyX1AoQ0df VVBMTF9GVU5DX0NOVExfMywgVVBMTF9GQl9ESVYoZmJfZGl2KSwgflVQTExfRkJfRElWX01BU0sp OworCisJLyogc2V0IHJlZiBkaXZpZGVyIHRvIDAgKi8KKwlXUkVHMzJfUChDR19VUExMX0ZVTkNf Q05UTCwgMCwgflVQTExfUkVGX0RJVl9NQVNLKTsKKworCWlmIChmYl9kaXYgPCAzMDcyMDApCisJ CVdSRUczMl9QKENHX1VQTExfRlVOQ19DTlRMXzQsIDAsIH5VUExMX1NQQVJFX0lTUEFSRTkpOwor CWVsc2UKKwkJV1JFRzMyX1AoQ0dfVVBMTF9GVU5DX0NOVExfNCwgVVBMTF9TUEFSRV9JU1BBUkU5 LCB+VVBMTF9TUEFSRV9JU1BBUkU5KTsKKworCS8qIHNldCBQRElWX0EgYW5kIFBESVZfQiAqLwor CVdSRUczMl9QKENHX1VQTExfRlVOQ19DTlRMXzIsCisJCVVQTExfUERJVl9BKHZjbGtfZGl2KSB8 IFVQTExfUERJVl9CKGRjbGtfZGl2KSwKKwkJfihVUExMX1BESVZfQV9NQVNLIHwgVVBMTF9QRElW X0JfTUFTSykpOworCisJLyogZ2l2ZSB0aGUgUExMIHNvbWUgdGltZSB0byBzZXR0bGUgKi8KKwlt ZGVsYXkoMTUpOworCisJLyogZGVhc3NlcnQgUExMX1JFU0VUICovCisJV1JFRzMyX1AoQ0dfVVBM TF9GVU5DX0NOVEwsIDAsIH5VUExMX1JFU0VUX01BU0spOworCisJbWRlbGF5KDE1KTsKKworCS8q IHN3aXRjaCBmcm9tIGJ5cGFzcyBtb2RlIHRvIG5vcm1hbCBtb2RlICovCisJV1JFRzMyX1AoQ0df VVBMTF9GVU5DX0NOVEwsIDAsIH5VUExMX0JZUEFTU19FTl9NQVNLKTsKKworCXIgPSBzaV91dmRf c2VuZF91cGxsX2N0bHJlcShhZGV2LCBDR19VUExMX0ZVTkNfQ05UTCk7CisJaWYgKHIpCisJCXJl dHVybiByOworCisJLyogc3dpdGNoIFZDTEsgYW5kIERDTEsgc2VsZWN0aW9uICovCisJV1JFRzMy X1AoQ0dfVVBMTF9GVU5DX0NOVExfMiwKKwkJVkNMS19TUkNfU0VMKDIpIHwgRENMS19TUkNfU0VM KDIpLAorCQl+KFZDTEtfU1JDX1NFTF9NQVNLIHwgRENMS19TUkNfU0VMX01BU0spKTsKKworCW1k ZWxheSgxMDApOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNjAsOCArMTUwNCw4IEBAIHN0YXRp YyBpbnQgc2lfY29tbW9uX2Vhcmx5X2luaXQodm9pZCAqaGFuZGxlKQogCWFkZXYtPnBjaWVfd3Jl ZyA9ICZzaV9wY2llX3dyZWc7CiAJYWRldi0+cGNpZXBfcnJlZyA9ICZzaV9wY2llcF9ycmVnOwog CWFkZXYtPnBjaWVwX3dyZWcgPSAmc2lfcGNpZXBfd3JlZzsKLQlhZGV2LT51dmRfY3R4X3JyZWcg PSBOVUxMOwotCWFkZXYtPnV2ZF9jdHhfd3JlZyA9IE5VTEw7CisJYWRldi0+dXZkX2N0eF9ycmVn ID0gJnNpX3V2ZF9jdHhfcnJlZzsKKwlhZGV2LT51dmRfY3R4X3dyZWcgPSAmc2lfdXZkX2N0eF93 cmVnOwogCWFkZXYtPmRpZHRfcnJlZyA9IE5VTEw7CiAJYWRldi0+ZGlkdF93cmVnID0gTlVMTDsK IApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvc2lkLmggYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9zaWQuaAppbmRleCA0MjU1NmUyZmFmZDQuLjFmYmU2MmU5NWM5 NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvc2lkLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvc2lkLmgKQEAgLTE2MjEsMjcgKzE2MjEsNyBAQAogLyoK ICAqIFVWRAogICovCi0jZGVmaW5lIFVWRF9VREVDX0FERFJfQ09ORklHCQkJCTB4M2JkMwotI2Rl ZmluZSBVVkRfVURFQ19EQl9BRERSX0NPTkZJRwkJCQkweDNiZDQKLSNkZWZpbmUgVVZEX1VERUNf REJXX0FERFJfQ09ORklHCQkJMHgzYmQ1Ci0jZGVmaW5lIFVWRF9SQkNfUkJfUlBUUgkJCQkJMHgz ZGE0Ci0jZGVmaW5lIFVWRF9SQkNfUkJfV1BUUgkJCQkJMHgzZGE1Ci0jZGVmaW5lIFVWRF9TVEFU VVMJCQkJCTB4M2RhZgotCi0jZGVmaW5lCVVWRF9DR0NfQ1RSTAkJCQkJMHgzZGMyCi0jCWRlZmlu ZSBEQ00JCQkJCSgxIDw8IDApCi0jCWRlZmluZSBDR19EVCh4KQkJCQkJKCh4KSA8PCAyKQotIwlk ZWZpbmUgQ0dfRFRfTUFTSwkJCQkoMHhmIDw8IDIpCi0jCWRlZmluZSBDTEtfT0QoeCkJCQkJKCh4 KSA8PCA2KQotIwlkZWZpbmUgQ0xLX09EX01BU0sJCQkJKDB4MWYgPDwgNikKLQotIC8qIFVWRCBD VFggaW5kaXJlY3QgKi8KLSNkZWZpbmUJVVZEX0NHQ19NRU1fQ1RSTAkJCQkweEMwCi0jZGVmaW5l CVVWRF9DR0NfQ1RSTDIJCQkJCTB4QzEKLSMJZGVmaW5lIERZTl9PUl9FTgkJCQkoMSA8PCAwKQot IwlkZWZpbmUgRFlOX1JSX0VOCQkJCSgxIDw8IDEpCi0jCWRlZmluZSBHX0RJVl9JRCh4KQkJCQko KHgpIDw8IDIpCi0jCWRlZmluZSBHX0RJVl9JRF9NQVNLCQkJCSgweDcgPDwgMikKKyNkZWZpbmUg VVZEX1ZDUFVfQ0hJUF9JRAkJCQkweDNkMzUKIAogLyoKICAqIFBNNApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvdXZkX3Y0XzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L3V2ZF92NF8wLmMKaW5kZXggY2ZhNjk1OWRiNDNkLi5lNWY1ZTE5NjU3ZmEgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3V2ZF92NF8wLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvdXZkX3Y0XzAuYwpAQCAtMzYsOCArMzYsMTIgQEAKIAogI2lu Y2x1ZGUgImJpZi9iaWZfM18wX2QuaCIKIAorc3RhdGljIHZvaWQgdXZkX3Y0XzBfbWNfcmVzdW1l KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKIHN0YXRpYyB2b2lkIHV2ZF92NF8wX3NldF9y aW5nX2Z1bmNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKIHN0YXRpYyB2b2lkIHV2ZF92 NF8wX3NldF9pcnFfZnVuY3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOworc3RhdGljIGlu dCB1dmRfdjRfMF9zdGFydChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7CitzdGF0aWMgdm9p ZCB1dmRfdjRfMF9zdG9wKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKK3N0YXRpYyB2b2lk IHV2ZF92NF8wX3NldF9kY20oc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJvb2wgc3dfbW9k ZSk7CiAKIC8qKgogICogdXZkX3Y0XzBfcmluZ19nZXRfcnB0ciAtIGdldCByZWFkIHBvaW50ZXIK QEAgLTExNCw2ICsxMTgsOCBAQCBzdGF0aWMgaW50IHV2ZF92NF8wX3N3X2luaXQodm9pZCAqaGFu ZGxlKQogCXNwcmludGYocmluZy0+bmFtZSwgInV2ZCIpOwogCXIgPSBhbWRncHVfcmluZ19pbml0 KGFkZXYsIHJpbmcsIDUxMiwgJmFkZXYtPnV2ZC5pcnEsIDApOwogCisJLyogVE9ETzogbW92ZSBt YyBwcm9ncmFtbWluZyB0byBodyBpbml0ICovCisJdXZkX3Y0XzBfbWNfcmVzdW1lKGFkZXYpOwog CXJldHVybiByOwogfQogCkBAIC0xMjksNiArMTM1LDMzMyBAQCBzdGF0aWMgaW50IHV2ZF92NF8w X3N3X2Zpbmkodm9pZCAqaGFuZGxlKQogCXJldHVybiBhbWRncHVfdXZkX3N3X2ZpbmkoYWRldik7 CiB9CiAKK3N0YXRpYyB2b2lkIHV2ZF92NF8wX2VuYWJsZV9tZ2NnKHN0cnVjdCBhbWRncHVfZGV2 aWNlICphZGV2LAorCQkJCSBib29sIGVuYWJsZSkKK3sKKwl1MzIgb3JpZywgZGF0YTsKKworCWlm IChlbmFibGUgJiYgKGFkZXYtPmNnX2ZsYWdzICYgQU1EX0NHX1NVUFBPUlRfVVZEX01HQ0cpKSB7 CisJCWRhdGEgPSBSUkVHMzJfVVZEX0NUWChpeFVWRF9DR0NfTUVNX0NUUkwpOworCQlkYXRhIHw9 IDB4M2ZmZjsKKwkJV1JFRzMyX1VWRF9DVFgoaXhVVkRfQ0dDX01FTV9DVFJMLCBkYXRhKTsKKwor CQlvcmlnID0gZGF0YSA9IFJSRUczMihtbVVWRF9DR0NfQ1RSTCk7CisJCWRhdGEgfD0gVVZEX0NH Q19DVFJMX19EWU5fQ0xPQ0tfTU9ERV9NQVNLOworCQlpZiAob3JpZyAhPSBkYXRhKQorCQkJV1JF RzMyKG1tVVZEX0NHQ19DVFJMLCBkYXRhKTsKKworCQlXUkVHMzJfU01DKFNNQ19DR19JTkRfU1RB UlQgKyBDR19DR1RUX0xPQ0FMXzAsIDApOworCQlXUkVHMzJfU01DKFNNQ19DR19JTkRfU1RBUlQg KyBDR19DR1RUX0xPQ0FMXzEsIDApOworCX0gZWxzZSB7CisJCWRhdGEgPSBSUkVHMzJfVVZEX0NU WChpeFVWRF9DR0NfTUVNX0NUUkwpOworCQlkYXRhICY9IH4weDNmZmY7CisJCVdSRUczMl9VVkRf Q1RYKGl4VVZEX0NHQ19NRU1fQ1RSTCwgZGF0YSk7CisKKwkJb3JpZyA9IGRhdGEgPSBSUkVHMzIo bW1VVkRfQ0dDX0NUUkwpOworCQlkYXRhICY9IH5VVkRfQ0dDX0NUUkxfX0RZTl9DTE9DS19NT0RF X01BU0s7CisJCWlmIChvcmlnICE9IGRhdGEpCisJCQlXUkVHMzIobW1VVkRfQ0dDX0NUUkwsIGRh dGEpOworCisJCVdSRUczMl9TTUMoU01DX0NHX0lORF9TVEFSVCArIENHX0NHVFRfTE9DQUxfMCwg MHhmZmZmZmZmZik7CisJCVdSRUczMl9TTUMoU01DX0NHX0lORF9TVEFSVCArIENHX0NHVFRfTE9D QUxfMSwgMHhmZmZmZmZmZik7CisJfQorfQorCisvKioKKyAqIHV2ZF92NF8wX2h3X2luaXQgLSBz dGFydCBhbmQgdGVzdCBVVkQgYmxvY2sKKyAqCisgKiBAYWRldjogYW1kZ3B1X2RldmljZSBwb2lu dGVyCisgKgorICogSW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUsIGJvb3QgdXAgdGhlIFZDUFUgYW5k IGRvIHNvbWUgdGVzdGluZworICovCitzdGF0aWMgaW50IHV2ZF92NF8wX2h3X2luaXQodm9pZCAq aGFuZGxlKQoreworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gKHN0cnVjdCBhbWRncHVf ZGV2aWNlICopaGFuZGxlOworCXN0cnVjdCBhbWRncHVfcmluZyAqcmluZyA9ICZhZGV2LT51dmQu cmluZzsKKwl1aW50MzJfdCB0bXA7CisJaW50IHI7CisKKwl1dmRfdjRfMF9lbmFibGVfbWdjZyhh ZGV2LCB0cnVlKTsKKwlhbWRncHVfYXNpY19zZXRfdXZkX2Nsb2NrcyhhZGV2LCA1MzMwMCwgNDAw MDApOworCXV2ZF92NF8wX3N0YXJ0KGFkZXYpOworCisJcmluZy0+cmVhZHkgPSB0cnVlOworCXIg PSBhbWRncHVfcmluZ190ZXN0X3JpbmcocmluZyk7CisJaWYgKHIpIHsKKwkJcmluZy0+cmVhZHkg PSBmYWxzZTsKKwkJZ290byBkb25lOworCX0KKworCXIgPSBhbWRncHVfcmluZ19hbGxvYyhyaW5n LCAxMCk7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJhbWRncHU6IHJpbmcgZmFpbGVkIHRvIGxv Y2sgVVZEIHJpbmcgKCVkKS5cbiIsIHIpOworCQlnb3RvIGRvbmU7CisJfQorCisJdG1wID0gUEFD S0VUMChtbVVWRF9TRU1BX1dBSVRfRkFVTFRfVElNRU9VVF9DTlRMLCAwKTsKKwlhbWRncHVfcmlu Z193cml0ZShyaW5nLCB0bXApOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4RkZGRkYpOwor CisJdG1wID0gUEFDS0VUMChtbVVWRF9TRU1BX1dBSVRfSU5DT01QTEVURV9USU1FT1VUX0NOVEws IDApOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIHRtcCk7CisJYW1kZ3B1X3Jpbmdfd3JpdGUo cmluZywgMHhGRkZGRik7CisKKwl0bXAgPSBQQUNLRVQwKG1tVVZEX1NFTUFfU0lHTkFMX0lOQ09N UExFVEVfVElNRU9VVF9DTlRMLCAwKTsKKwlhbWRncHVfcmluZ193cml0ZShyaW5nLCB0bXApOwor CWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4RkZGRkYpOworCisJLyogQ2xlYXIgdGltZW91dCBz dGF0dXMgYml0cyAqLworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIFBBQ0tFVDAobW1VVkRfU0VN QV9USU1FT1VUX1NUQVRVUywgMCkpOworCWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDB4OCk7CisK KwlhbWRncHVfcmluZ193cml0ZShyaW5nLCBQQUNLRVQwKG1tVVZEX1NFTUFfQ05UTCwgMCkpOwor CWFtZGdwdV9yaW5nX3dyaXRlKHJpbmcsIDMpOworCisJYW1kZ3B1X3JpbmdfY29tbWl0KHJpbmcp OworCitkb25lOgorCWlmICghcikKKwkJRFJNX0lORk8oIlVWRCBpbml0aWFsaXplZCBzdWNjZXNz ZnVsbHkuXG4iKTsKKworCXJldHVybiByOworfQorCisvKioKKyAqIHV2ZF92NF8wX2h3X2Zpbmkg LSBzdG9wIHRoZSBoYXJkd2FyZSBibG9jaworICoKKyAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBv aW50ZXIKKyAqCisgKiBTdG9wIHRoZSBVVkQgYmxvY2ssIG1hcmsgcmluZyBhcyBub3QgcmVhZHkg YW55IG1vcmUKKyAqLworc3RhdGljIGludCB1dmRfdjRfMF9od19maW5pKHZvaWQgKmhhbmRsZSkK K3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq KWhhbmRsZTsKKwlzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcgPSAmYWRldi0+dXZkLnJpbmc7CisK KwlpZiAoUlJFRzMyKG1tVVZEX1NUQVRVUykgIT0gMCkKKwkJdXZkX3Y0XzBfc3RvcChhZGV2KTsK KworCXJpbmctPnJlYWR5ID0gZmFsc2U7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1 dmRfdjRfMF9zdXNwZW5kKHZvaWQgKmhhbmRsZSkKK3sKKwlpbnQgcjsKKwlzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKKworCXIgPSB1 dmRfdjRfMF9od19maW5pKGFkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXJldHVybiBh bWRncHVfdXZkX3N1c3BlbmQoYWRldik7Cit9CisKK3N0YXRpYyBpbnQgdXZkX3Y0XzBfcmVzdW1l KHZvaWQgKmhhbmRsZSkKK3sKKwlpbnQgcjsKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9 IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsKKworCXIgPSBhbWRncHVfdXZkX3Jlc3Vt ZShhZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlyZXR1cm4gdXZkX3Y0XzBfaHdfaW5p dChhZGV2KTsKK30KKworLyoqCisgKiB1dmRfdjRfMF9zdGFydCAtIHN0YXJ0IFVWRCBibG9jawor ICoKKyAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50ZXIKKyAqCisgKiBTZXR1cCBhbmQgc3Rh cnQgdGhlIFVWRCBibG9jaworICovCitzdGF0aWMgaW50IHV2ZF92NF8wX3N0YXJ0KHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2KQoreworCXN0cnVjdCBhbWRncHVfcmluZyAqcmluZyA9ICZhZGV2 LT51dmQucmluZzsKKwl1aW50MzJfdCByYl9idWZzejsKKwlpbnQgaSwgaiwgcjsKKwl1MzIgdG1w OworCS8qIGRpc2FibGUgYnl0ZSBzd2FwcGluZyAqLworCXUzMiBsbWlfc3dhcF9jbnRsID0gMDsK Kwl1MzIgbXBfc3dhcF9jbnRsID0gMDsKKworCS8qIHNldCB1dmQgYnVzeSAqLworCVdSRUczMl9Q KG1tVVZEX1NUQVRVUywgMTw8MiwgfigxPDwyKSk7CisKKwl1dmRfdjRfMF9zZXRfZGNtKGFkZXYs IHRydWUpOworCVdSRUczMihtbVVWRF9DR0NfR0FURSwgMCk7CisKKwkvKiB0YWtlIFVWRCBibG9j ayBvdXQgb2YgcmVzZXQgKi8KKwlXUkVHMzJfUChtbVNSQk1fU09GVF9SRVNFVCwgMCwgflNSQk1f U09GVF9SRVNFVF9fU09GVF9SRVNFVF9VVkRfTUFTSyk7CisJbWRlbGF5KDUpOworCisJLyogZW5h YmxlIFZDUFUgY2xvY2sgKi8KKwlXUkVHMzIobW1VVkRfVkNQVV9DTlRMLCAgMSA8PCA5KTsKKwor CS8qIGRpc2FibGUgaW50ZXJ1cHQgKi8KKwlXUkVHMzJfUChtbVVWRF9NQVNUSU5UX0VOLCAwLCB+ KDEgPDwgMSkpOworCisjaWZkZWYgX19CSUdfRU5ESUFOCisJLyogc3dhcCAoOCBpbiAzMikgUkIg YW5kIElCICovCisJbG1pX3N3YXBfY250bCA9IDB4YTsKKwltcF9zd2FwX2NudGwgPSAwOworI2Vu ZGlmCisJV1JFRzMyKG1tVVZEX0xNSV9TV0FQX0NOVEwsIGxtaV9zd2FwX2NudGwpOworCVdSRUcz MihtbVVWRF9NUF9TV0FQX0NOVEwsIG1wX3N3YXBfY250bCk7CisJLyogaW5pdGlhbGl6ZSBVVkQg bWVtb3J5IGNvbnRyb2xsZXIgKi8KKwlXUkVHMzIobW1VVkRfTE1JX0NUUkwsIDB4MjAzMTA4KTsK KworCXRtcCA9IFJSRUczMihtbVVWRF9NUENfQ05UTCk7CisJV1JFRzMyKG1tVVZEX01QQ19DTlRM LCB0bXAgfCAweDEwKTsKKworCVdSRUczMihtbVVWRF9NUENfU0VUX01VWEEwLCAweDQwYzIwNDAp OworCVdSRUczMihtbVVWRF9NUENfU0VUX01VWEExLCAweDApOworCVdSRUczMihtbVVWRF9NUENf U0VUX01VWEIwLCAweDQwYzIwNDApOworCVdSRUczMihtbVVWRF9NUENfU0VUX01VWEIxLCAweDAp OworCVdSRUczMihtbVVWRF9NUENfU0VUX0FMVSwgMCk7CisJV1JFRzMyKG1tVVZEX01QQ19TRVRf TVVYLCAweDg4KTsKKworCXV2ZF92NF8wX21jX3Jlc3VtZShhZGV2KTsKKworCXRtcCA9IFJSRUcz Ml9VVkRfQ1RYKGl4VVZEX0xNSV9DQUNIRV9DVFJMKTsKKwlXUkVHMzJfVVZEX0NUWChpeFVWRF9M TUlfQ0FDSEVfQ1RSTCwgdG1wICYgKH4weDEwKSk7CisKKwkvKiBlbmFibGUgVU1DICovCisJV1JF RzMyX1AobW1VVkRfTE1JX0NUUkwyLCAwLCB+KDEgPDwgOCkpOworCisJV1JFRzMyX1AobW1VVkRf U09GVF9SRVNFVCwgMCwgflVWRF9TT0ZUX1JFU0VUX19MTUlfU09GVF9SRVNFVF9NQVNLKTsKKwor CVdSRUczMl9QKG1tVVZEX1NPRlRfUkVTRVQsIDAsIH5VVkRfU09GVF9SRVNFVF9fTE1JX1VNQ19T T0ZUX1JFU0VUX01BU0spOworCisJV1JFRzMyX1AobW1VVkRfU09GVF9SRVNFVCwgMCwgflVWRF9T T0ZUX1JFU0VUX19WQ1BVX1NPRlRfUkVTRVRfTUFTSyk7CisKKwltZGVsYXkoMTApOworCisJZm9y IChpID0gMDsgaSA8IDEwOyArK2kpIHsKKwkJdWludDMyX3Qgc3RhdHVzOworCQlmb3IgKGogPSAw OyBqIDwgMTAwOyArK2opIHsKKwkJCXN0YXR1cyA9IFJSRUczMihtbVVWRF9TVEFUVVMpOworCQkJ aWYgKHN0YXR1cyAmIDIpCisJCQkJYnJlYWs7CisJCQltZGVsYXkoMTApOworCQl9CisJCXIgPSAw OworCQlpZiAoc3RhdHVzICYgMikKKwkJCWJyZWFrOworCisJCURSTV9FUlJPUigiVVZEIG5vdCBy ZXNwb25kaW5nLCB0cnlpbmcgdG8gcmVzZXQgdGhlIFZDUFUhISFcbiIpOworCQlXUkVHMzJfUCht bVVWRF9TT0ZUX1JFU0VULCBVVkRfU09GVF9SRVNFVF9fVkNQVV9TT0ZUX1JFU0VUX01BU0ssCisJ CQkJflVWRF9TT0ZUX1JFU0VUX19WQ1BVX1NPRlRfUkVTRVRfTUFTSyk7CisJCW1kZWxheSgxMCk7 CisJCVdSRUczMl9QKG1tVVZEX1NPRlRfUkVTRVQsIDAsIH5VVkRfU09GVF9SRVNFVF9fVkNQVV9T T0ZUX1JFU0VUX01BU0spOworCQltZGVsYXkoMTApOworCQlyID0gLTE7CisJfQorCisJaWYgKHIp IHsKKwkJRFJNX0VSUk9SKCJVVkQgbm90IHJlc3BvbmRpbmcsIGdpdmluZyB1cCEhIVxuIik7CisJ CXJldHVybiByOworCX0KKworCS8qIGVuYWJsZSBpbnRlcnVwdCAqLworCVdSRUczMl9QKG1tVVZE X01BU1RJTlRfRU4sIDM8PDEsIH4oMyA8PCAxKSk7CisKKwlXUkVHMzJfUChtbVVWRF9TVEFUVVMs IDAsIH4oMTw8MikpOworCisJLyogZm9yY2UgUkJDIGludG8gaWRsZSBzdGF0ZSAqLworCVdSRUcz MihtbVVWRF9SQkNfUkJfQ05UTCwgMHgxMTAxMDEwMSk7CisKKwkvKiBTZXQgdGhlIHdyaXRlIHBv aW50ZXIgZGVsYXkgKi8KKwlXUkVHMzIobW1VVkRfUkJDX1JCX1dQVFJfQ05UTCwgMCk7CisKKwkv KiBwcm9ncmFtbSB0aGUgNEdCIG1lbW9yeSBzZWdtZW50IGZvciBycHRyIGFuZCByaW5nIGJ1ZmZl ciAqLworCVdSRUczMihtbVVWRF9MTUlfRVhUNDBfQUREUiwgdXBwZXJfMzJfYml0cyhyaW5nLT5n cHVfYWRkcikgfAorCQkJCSAgICgweDcgPDwgMTYpIHwgKDB4MSA8PCAzMSkpOworCisJLyogSW5p dGlhbGl6ZSB0aGUgcmluZyBidWZmZXIncyByZWFkIGFuZCB3cml0ZSBwb2ludGVycyAqLworCVdS RUczMihtbVVWRF9SQkNfUkJfUlBUUiwgMHgwKTsKKworCXJpbmctPndwdHIgPSBSUkVHMzIobW1V VkRfUkJDX1JCX1JQVFIpOworCVdSRUczMihtbVVWRF9SQkNfUkJfV1BUUiwgbG93ZXJfMzJfYml0 cyhyaW5nLT53cHRyKSk7CisKKwkvKiBzZXQgdGhlIHJpbmcgYWRkcmVzcyAqLworCVdSRUczMiht bVVWRF9SQkNfUkJfQkFTRSwgcmluZy0+Z3B1X2FkZHIpOworCisJLyogU2V0IHJpbmcgYnVmZmVy IHNpemUgKi8KKwlyYl9idWZzeiA9IG9yZGVyX2Jhc2VfMihyaW5nLT5yaW5nX3NpemUpOworCXJi X2J1ZnN6ID0gKDB4MSA8PCA4KSB8IHJiX2J1ZnN6OworCVdSRUczMl9QKG1tVVZEX1JCQ19SQl9D TlRMLCByYl9idWZzeiwgfjB4MTFmMWYpOworCisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiB1 dmRfdjRfMF9zdG9wIC0gc3RvcCBVVkQgYmxvY2sKKyAqCisgKiBAYWRldjogYW1kZ3B1X2Rldmlj ZSBwb2ludGVyCisgKgorICogc3RvcCB0aGUgVVZEIGJsb2NrCisgKi8KK3N0YXRpYyB2b2lkIHV2 ZF92NF8wX3N0b3Aoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJdWludDMyX3QgaSwg ajsKKwl1aW50MzJfdCBzdGF0dXM7CisKKwlXUkVHMzIobW1VVkRfUkJDX1JCX0NOVEwsIDB4MTEw MTAxMDEpOworCisJZm9yIChpID0gMDsgaSA8IDEwOyArK2kpIHsKKwkJZm9yIChqID0gMDsgaiA8 IDEwMDsgKytqKSB7CisJCQlzdGF0dXMgPSBSUkVHMzIobW1VVkRfU1RBVFVTKTsKKwkJCWlmIChz dGF0dXMgJiAyKQorCQkJCWJyZWFrOworCQkJbWRlbGF5KDEpOworCQl9CisJCWlmIChzdGF0dXMg JiAyKQorCQkJYnJlYWs7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDEwOyArK2kpIHsKKwkJZm9y IChqID0gMDsgaiA8IDEwMDsgKytqKSB7CisJCQlzdGF0dXMgPSBSUkVHMzIobW1VVkRfTE1JX1NU QVRVUyk7CisJCQlpZiAoc3RhdHVzICYgMHhmKQorCQkJCWJyZWFrOworCQkJbWRlbGF5KDEpOwor CQl9CisJCWlmIChzdGF0dXMgJiAweGYpCisJCQlicmVhazsKKwl9CisKKwkvKiBTdGFsbCBVTUMg YW5kIHJlZ2lzdGVyIGJ1cyBiZWZvcmUgcmVzZXR0aW5nIFZDUFUgKi8KKwlXUkVHMzJfUChtbVVW RF9MTUlfQ1RSTDIsIDEgPDwgOCwgfigxIDw8IDgpKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsg KytpKSB7CisJCWZvciAoaiA9IDA7IGogPCAxMDA7ICsraikgeworCQkJc3RhdHVzID0gUlJFRzMy KG1tVVZEX0xNSV9TVEFUVVMpOworCQkJaWYgKHN0YXR1cyAmIDB4MjQwKQorCQkJCWJyZWFrOwor CQkJbWRlbGF5KDEpOworCQl9CisJCWlmIChzdGF0dXMgJiAweDI0MCkKKwkJCWJyZWFrOworCX0K KworCVdSRUczMl9QKDB4M0Q0OSwgMCwgfigxIDw8IDIpKTsKKworCVdSRUczMl9QKG1tVVZEX1ZD UFVfQ05UTCwgMCwgfigxIDw8IDkpKTsKKworCS8qIHB1dCBMTUksIFZDUFUsIFJCQyBldGMuLi4g aW50byByZXNldCAqLworCVdSRUczMihtbVVWRF9TT0ZUX1JFU0VULCBVVkRfU09GVF9SRVNFVF9f TE1JX1NPRlRfUkVTRVRfTUFTSyB8CisJCVVWRF9TT0ZUX1JFU0VUX19WQ1BVX1NPRlRfUkVTRVRf TUFTSyB8CisJCVVWRF9TT0ZUX1JFU0VUX19MTUlfVU1DX1NPRlRfUkVTRVRfTUFTSyk7CisKKwlX UkVHMzIobW1VVkRfU1RBVFVTLCAwKTsKKworCXV2ZF92NF8wX3NldF9kY20oYWRldiwgZmFsc2Up OworfQorCiAvKioKICAqIHV2ZF92NF8wX3JpbmdfZW1pdF9mZW5jZSAtIGVtaXQgYW4gZmVuY2Ug JiB0cmFwIGNvbW1hbmQKICAqCkBAIC0yNDUsNiArNTc4LDEyNiBAQCBzdGF0aWMgdm9pZCB1dmRf djRfMF9yaW5nX2VtaXRfaWIoc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nLAogCWFtZGdwdV9yaW5n X3dyaXRlKHJpbmcsIGliLT5sZW5ndGhfZHcpOwogfQogCisvKioKKyAqIHV2ZF92NF8wX21jX3Jl c3VtZSAtIG1lbW9yeSBjb250cm9sbGVyIHByb2dyYW1taW5nCisgKgorICogQGFkZXY6IGFtZGdw dV9kZXZpY2UgcG9pbnRlcgorICoKKyAqIExldCB0aGUgVVZEIG1lbW9yeSBjb250cm9sbGVyIGtu b3cgaXQncyBvZmZzZXRzCisgKi8KK3N0YXRpYyB2b2lkIHV2ZF92NF8wX21jX3Jlc3VtZShzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwl1aW50NjRfdCBhZGRyOworCXVpbnQzMl90IHNp emUsIGNoaXBfaWQ7CisJY29uc3Qgc3RydWN0IGNvbW1vbl9maXJtd2FyZV9oZWFkZXIgKmhkcjsK KworCWhkciA9IChjb25zdCBzdHJ1Y3QgY29tbW9uX2Zpcm13YXJlX2hlYWRlciAqKWFkZXYtPnV2 ZC5mdy0+ZGF0YTsKKwkvKiBwcm9ncmFtbSB0aGUgVkNQVSBtZW1vcnkgY29udHJvbGxlciBiaXRz IDAtMjcgKi8KKwlhZGRyID0gKGFkZXYtPnV2ZC5ncHVfYWRkciArIEFNREdQVV9VVkRfRklSTVdB UkVfT0ZGU0VUKSA+PiAzOworCXNpemUgPSAoQU1ER1BVX0dQVV9QQUdFX0FMSUdOKGxlMzJfdG9f Y3B1KGhkci0+dWNvZGVfc2l6ZV9ieXRlcykgKyA4KSAtCisJCUFNREdQVV9VVkRfRklSTVdBUkVf T0ZGU0VUKSA+PiAzOworCVdSRUczMihtbVVWRF9WQ1BVX0NBQ0hFX09GRlNFVDAsIGFkZHIpOwor CVdSRUczMihtbVVWRF9WQ1BVX0NBQ0hFX1NJWkUwLCBzaXplKTsKKworCWFkZHIgKz0gc2l6ZTsK KwlzaXplID0gQU1ER1BVX1VWRF9IRUFQX1NJWkUgPj4gMzsKKwlXUkVHMzIobW1VVkRfVkNQVV9D QUNIRV9PRkZTRVQxLCBhZGRyKTsKKwlXUkVHMzIobW1VVkRfVkNQVV9DQUNIRV9TSVpFMSwgc2l6 ZSk7CisKKwlhZGRyICs9IHNpemU7CisJc2l6ZSA9IChBTURHUFVfVVZEX1NUQUNLX1NJWkUgKwor CSAgICAgICAoQU1ER1BVX1VWRF9TRVNTSU9OX1NJWkUgKiBhZGV2LT51dmQubWF4X2hhbmRsZXMp KSA+PiAzOworCVdSRUczMihtbVVWRF9WQ1BVX0NBQ0hFX09GRlNFVDIsIGFkZHIpOworCVdSRUcz MihtbVVWRF9WQ1BVX0NBQ0hFX1NJWkUyLCBzaXplKTsKKworCS8qIGJpdHMgMjgtMzEgKi8KKwlh ZGRyID0gKGFkZXYtPnV2ZC5ncHVfYWRkciA+PiAyOCkgJiAweEY7CisJV1JFRzMyKG1tVVZEX0xN SV9BRERSX0VYVCwgKGFkZHIgPDwgMTIpIHwgKGFkZHIgPDwgMCkpOworCisJLyogYml0cyAzMi0z OSAqLworCWFkZHIgPSAoYWRldi0+dXZkLmdwdV9hZGRyID4+IDMyKSAmIDB4RkY7CisJV1JFRzMy KG1tVVZEX0xNSV9FWFQ0MF9BRERSLCBhZGRyIHwgKDB4OSA8PCAxNikgfCAoMHgxIDw8IDMxKSk7 CisKKwlXUkVHMzIobW1VVkRfVURFQ19BRERSX0NPTkZJRywgYWRldi0+Z2Z4LmNvbmZpZy5nYl9h ZGRyX2NvbmZpZyk7CisJV1JFRzMyKG1tVVZEX1VERUNfREJfQUREUl9DT05GSUcsIGFkZXYtPmdm eC5jb25maWcuZ2JfYWRkcl9jb25maWcpOworCVdSRUczMihtbVVWRF9VREVDX0RCV19BRERSX0NP TkZJRywgYWRldi0+Z2Z4LmNvbmZpZy5nYl9hZGRyX2NvbmZpZyk7CisKKwkvKiB0ZWxsIGZpcm13 YXJlIHdoaWNoIGhhcmR3YXJlIGl0IGlzIHJ1bm5pbmcgb24gKi8KKwlzd2l0Y2ggKGFkZXYtPmFz aWNfdHlwZSkgeworCWNhc2UgQ0hJUF9UQUhJVEk6CisJCWNoaXBfaWQgPSAweDAxMDAwMDE0Owor CQlicmVhazsKKwljYXNlIENISVBfVkVSREU6CisJCWNoaXBfaWQgPSAweDAxMDAwMDE1OworCQli cmVhazsKKwljYXNlIENISVBfUElUQ0FJUk46CisJY2FzZSBDSElQX09MQU5EOgorCQljaGlwX2lk ID0gMHgwMTAwMDAxNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKwlXUkVH MzIoVVZEX1ZDUFVfQ0hJUF9JRCwgY2hpcF9pZCk7Cit9CisKK3N0YXRpYyB2b2lkIHV2ZF92NF8w X3NldF9kY20oc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkgICAgIGJvb2wgc3dfbW9k ZSkKK3sKKwl1MzIgdG1wLCB0bXAyOworCisJV1JFRzMyX0ZJRUxEKFVWRF9DR0NfR0FURSwgUkVH UywgMCk7CisKKwl0bXAgPSBSUkVHMzIobW1VVkRfQ0dDX0NUUkwpOworCXRtcCAmPSB+KFVWRF9D R0NfQ1RSTF9fQ0xLX09GRl9ERUxBWV9NQVNLIHwgVVZEX0NHQ19DVFJMX19DTEtfR0FURV9ETFlf VElNRVJfTUFTSyk7CisJdG1wIHw9IFVWRF9DR0NfQ1RSTF9fRFlOX0NMT0NLX01PREVfTUFTSyB8 CisJCSgxIDw8IFVWRF9DR0NfQ1RSTF9fQ0xLX0dBVEVfRExZX1RJTUVSX19TSElGVCkgfAorCQko NCA8PCBVVkRfQ0dDX0NUUkxfX0NMS19PRkZfREVMQVlfX1NISUZUKTsKKworCWlmIChzd19tb2Rl KSB7CisJCXRtcCAmPSB+MHg3ZmZmZjgwMDsKKwkJdG1wMiA9IFVWRF9DR0NfQ1RSTDJfX0RZTl9P Q0xLX1JBTVBfRU5fTUFTSyB8CisJCQlVVkRfQ0dDX0NUUkwyX19EWU5fUkNMS19SQU1QX0VOX01B U0sgfAorCQkJKDcgPDwgVVZEX0NHQ19DVFJMMl9fR0FURVJfRElWX0lEX19TSElGVCk7CisJfSBl bHNlIHsKKwkJdG1wIHw9IDB4N2ZmZmY4MDA7CisJCXRtcDIgPSAwOworCX0KKworCVdSRUczMiht bVVWRF9DR0NfQ1RSTCwgdG1wKTsKKwlXUkVHMzJfVVZEX0NUWChpeFVWRF9DR0NfQ1RSTDIsIHRt cDIpOworfQorCitzdGF0aWMgYm9vbCB1dmRfdjRfMF9pc19pZGxlKHZvaWQgKmhhbmRsZSkKK3sK KwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhh bmRsZTsKKworCXJldHVybiAhKFJSRUczMihtbVNSQk1fU1RBVFVTKSAmIFNSQk1fU1RBVFVTX19V VkRfQlVTWV9NQVNLKTsKK30KKworc3RhdGljIGludCB1dmRfdjRfMF93YWl0X2Zvcl9pZGxlKHZv aWQgKmhhbmRsZSkKK3sKKwl1bnNpZ25lZCBpOworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOworCisJZm9yIChpID0gMDsgaSA8IGFk ZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCWlmICghKFJSRUczMihtbVNSQk1fU1RBVFVTKSAm IFNSQk1fU1RBVFVTX19VVkRfQlVTWV9NQVNLKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4g LUVUSU1FRE9VVDsKK30KKworc3RhdGljIGludCB1dmRfdjRfMF9zb2Z0X3Jlc2V0KHZvaWQgKmhh bmRsZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqKWhhbmRsZTsKKworCXV2ZF92NF8wX3N0b3AoYWRldik7CisKKwlXUkVHMzJfUChtbVNS Qk1fU09GVF9SRVNFVCwgU1JCTV9TT0ZUX1JFU0VUX19TT0ZUX1JFU0VUX1VWRF9NQVNLLCB+U1JC TV9TT0ZUX1JFU0VUX19TT0ZUX1JFU0VUX1VWRF9NQVNLKTsKKwltZGVsYXkoNSk7CisKKwlyZXR1 cm4gdXZkX3Y0XzBfc3RhcnQoYWRldik7Cit9CisKIHN0YXRpYyBpbnQgdXZkX3Y0XzBfc2V0X2lu dGVycnVwdF9zdGF0ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKIAkJCQkJc3RydWN0IGFt ZGdwdV9pcnFfc3JjICpzb3VyY2UsCiAJCQkJCXVuc2lnbmVkIGludCB0eXBlLApAQCAtMjYzLDEy ICs3MTYsNDcgQEAgc3RhdGljIGludCB1dmRfdjRfMF9wcm9jZXNzX2ludGVycnVwdChzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiwKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB1dmRfdjRf MF9zZXRfY2xvY2tnYXRpbmdfc3RhdGUodm9pZCAqaGFuZGxlLAorCQkJCQkgIGVudW0gYW1kX2Ns b2NrZ2F0aW5nX3N0YXRlIHN0YXRlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHV2 ZF92NF8wX3NldF9wb3dlcmdhdGluZ19zdGF0ZSh2b2lkICpoYW5kbGUsCisJCQkJCSAgZW51bSBh bWRfcG93ZXJnYXRpbmdfc3RhdGUgc3RhdGUpCit7CisJLyogVGhpcyBkb2Vzbid0IGFjdHVhbGx5 IHBvd2VyZ2F0ZSB0aGUgVVZEIGJsb2NrLgorCSAqIFRoYXQncyBkb25lIGluIHRoZSBkcG0gY29k ZSB2aWEgdGhlIFNNQy4gIFRoaXMKKwkgKiBqdXN0IHJlLWluaXRzIHRoZSBibG9jayBhcyBuZWNl c3NhcnkuICBUaGUgYWN0dWFsCisJICogZ2F0aW5nIHN0aWxsIGhhcHBlbnMgaW4gdGhlIGRwbSBj b2RlLiAgV2Ugc2hvdWxkCisJICogcmV2aXNpdCB0aGlzIHdoZW4gdGhlcmUgaXMgYSBjbGVhbmVy IGxpbmUgYmV0d2VlbgorCSAqIHRoZSBzbWMgYW5kIHRoZSBodyBibG9ja3MKKwkgKi8KKwlzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhhbmRsZTsK KworCWlmIChzdGF0ZSA9PSBBTURfUEdfU1RBVEVfR0FURSkgeworCQl1dmRfdjRfMF9zdG9wKGFk ZXYpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gdXZkX3Y0XzBfc3RhcnQoYWRl dik7CisJfQorfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFtZF9pcF9mdW5jcyB1dmRfdjRfMF9p cF9mdW5jcyA9IHsKIAkubmFtZSA9ICJ1dmRfdjRfMCIsCiAJLmVhcmx5X2luaXQgPSB1dmRfdjRf MF9lYXJseV9pbml0LAogCS5sYXRlX2luaXQgPSBOVUxMLAogCS5zd19pbml0ID0gdXZkX3Y0XzBf c3dfaW5pdCwKIAkuc3dfZmluaSA9IHV2ZF92NF8wX3N3X2ZpbmksCisJLmh3X2luaXQgPSB1dmRf djRfMF9od19pbml0LAorCS5od19maW5pID0gdXZkX3Y0XzBfaHdfZmluaSwKKwkuc3VzcGVuZCA9 IHV2ZF92NF8wX3N1c3BlbmQsCisJLnJlc3VtZSA9IHV2ZF92NF8wX3Jlc3VtZSwKKwkuaXNfaWRs ZSA9IHV2ZF92NF8wX2lzX2lkbGUsCisJLndhaXRfZm9yX2lkbGUgPSB1dmRfdjRfMF93YWl0X2Zv cl9pZGxlLAorCS5zb2Z0X3Jlc2V0ID0gdXZkX3Y0XzBfc29mdF9yZXNldCwKKwkuc2V0X2Nsb2Nr Z2F0aW5nX3N0YXRlID0gdXZkX3Y0XzBfc2V0X2Nsb2NrZ2F0aW5nX3N0YXRlLAorCS5zZXRfcG93 ZXJnYXRpbmdfc3RhdGUgPSB1dmRfdjRfMF9zZXRfcG93ZXJnYXRpbmdfc3RhdGUsCiB9OwogCiBz dGF0aWMgY29uc3Qgc3RydWN0IGFtZGdwdV9yaW5nX2Z1bmNzIHV2ZF92NF8wX3JpbmdfZnVuY3Mg PSB7Ci0tIAoyLjE1LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=