From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andres Rodriguez Subject: [PATCH 02/17] drm/amdgpu: refactor MQD/HQD initialization v3 Date: Mon, 17 Apr 2017 18:47:58 -0400 Message-ID: <20170417224813.3173-3-andresx7@gmail.com> References: <20170417224813.3173-1-andresx7@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170417224813.3173-1-andresx7-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 Cc: andresx7-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org VGhlIE1RRCBwcm9ncmFtbWluZyBzZXF1ZW5jZSBjdXJyZW50bHkgZXhpc3RzIGluIDMgZGlmZmVy ZW50IHBsYWNlcy4KUmVmYWN0b3IgaXQgdG8gYWJzb3JiIGFsbCB0aGUgZHVwbGljYXRlcy4KClRo ZSBzdWNjZXNzIHBhdGggcmVtYWlucyBtb3N0bHkgaWRlbnRpY2FsIGV4Y2VwdCBmb3IgYSBzbGln aHRseQpkaWZmZXJlbnQgb3JkZXIgaW4gdGhlIG5vbi1raXEgY2FzZS4gVGhpcyBzaG91bGRuJ3Qg bWF0dGVyIGlmIHRoZSBIUUQKaXMgZGlzYWJsZWQuCgpUaGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMg aGF2ZSBiZWVuIHVwZGF0ZWQgdG8gZGVhbCB3aXRoIHRoZSBuZXcgY29kZQpzdHJ1Y3R1cmUuCgp2 MjogdGhlIG5vbi1raXEgcGF0aCBmb3IgZ2Z4djggd2FzIGRyb3BwZWQgaW4gdGhlIHJlYmFzZQp2 Mzogc3BsaXQgTUVDX0hQRF9TSVpFIHJlbmFtZSwgZHJvcHBlZCBkb29yYmVsbCBjaGFuZ2VzCgpS ZXZpZXdlZC1ieTogRWR3YXJkIE8nQ2FsbGFnaGFuIDxmdW5mdW5jdG9yQGZvbGtsb3JlMTk4NC5u ZXQ+CkFja2VkLWJ5OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+ CkFja2VkLWJ5OiBGZWxpeCBLdWVobGluZyA8RmVsaXguS3VlaGxpbmdAYW1kLmNvbT4KU2lnbmVk LW9mZi1ieTogQW5kcmVzIFJvZHJpZ3VleiA8YW5kcmVzeDdAZ21haWwuY29tPgotLS0KIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92N18wLmMgfCA0MzkgKysrKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y4XzAuYyB8 ICA3OCArKystLS0KIDIgZmlsZXMgY2hhbmdlZCwgMjcxIGluc2VydGlvbnMoKyksIDI0NiBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjdf MC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y3XzAuYwppbmRleCAzYjk4MTYy Li40ZTZhNjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjdf MC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92N18wLmMKQEAgLTI5Mjcs MjgxICsyOTI3LDMxNiBAQCBzdHJ1Y3QgYm9uYWlyZV9tcWQKIAl1MzIgcGVyZl9jb3VudGVyX2Vu YWJsZTsKIAl1MzIgcGdtWzJdOwogCXUzMiB0YmFbMl07CiAJdTMyIHRtYVsyXTsKIAl1MzIgcGdt X3JzcmNbMl07CiAJdTMyIHZtaWQ7CiAJdTMyIHJlc291cmNlX2xpbWl0czsKIAl1MzIgc3RhdGlj X3RocmVhZF9tZ210MDFbMl07CiAJdTMyIHRtcF9yaW5nX3NpemU7CiAJdTMyIHN0YXRpY190aHJl YWRfbWdtdDIzWzJdOwogCXUzMiByZXN0YXJ0WzNdOwogCXUzMiB0aHJlYWRfdHJhY2VfZW5hYmxl OwogCXUzMiByZXNlcnZlZDE7CiAJdTMyIHVzZXJfZGF0YVsxNl07CiAJdTMyIHZndGNzX2ludm9r ZV9jb3VudFsyXTsKIAlzdHJ1Y3QgaHFkX3JlZ2lzdGVycyBxdWV1ZV9zdGF0ZTsKIAl1MzIgZGVx dWV1ZV9jbnRyOwogCXUzMiBpbnRlcnJ1cHRfcXVldWVbNjRdOwogfTsKIAotLyoqCi0gKiBnZnhf djdfMF9jcF9jb21wdXRlX3Jlc3VtZSAtIHNldHVwIHRoZSBjb21wdXRlIHF1ZXVlIHJlZ2lzdGVy cwotICoKLSAqIEBhZGV2OiBhbWRncHVfZGV2aWNlIHBvaW50ZXIKLSAqCi0gKiBQcm9ncmFtIHRo ZSBjb21wdXRlIHF1ZXVlcyBhbmQgdGVzdCB0aGVtIHRvIG1ha2Ugc3VyZSB0aGV5Ci0gKiBhcmUg d29ya2luZy4KLSAqIFJldHVybnMgMCBmb3Igc3VjY2VzcywgZXJyb3IgZm9yIGZhaWx1cmUuCi0g Ki8KLXN0YXRpYyBpbnQgZ2Z4X3Y3XzBfY3BfY29tcHV0ZV9yZXN1bWUoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCitzdGF0aWMgdm9pZCBnZnhfdjdfMF9jb21wdXRlX3BpcGVfaW5pdChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgaW50IG1lLCBpbnQgcGlwZSkKIHsKLQlpbnQgciwgaSwg ajsKLQl1MzIgdG1wOwotCWJvb2wgdXNlX2Rvb3JiZWxsID0gdHJ1ZTsKLQl1NjQgaHFkX2dwdV9h ZGRyOwotCXU2NCBtcWRfZ3B1X2FkZHI7CiAJdTY0IGVvcF9ncHVfYWRkcjsKLQl1NjQgd2JfZ3B1 X2FkZHI7Ci0JdTMyICpidWY7Ci0Jc3RydWN0IGJvbmFpcmVfbXFkICptcWQ7Ci0Jc3RydWN0IGFt ZGdwdV9yaW5nICpyaW5nOwotCi0JLyogZml4IHVwIGNoaWNrZW4gYml0cyAqLwotCXRtcCA9IFJS RUczMihtbUNQX0NQRl9ERUJVRyk7Ci0JdG1wIHw9ICgxIDw8IDIzKTsKLQlXUkVHMzIobW1DUF9D UEZfREVCVUcsIHRtcCk7CisJdTMyIHRtcDsKKwlzaXplX3QgZW9wX29mZnNldCA9IG1lICogcGlw ZSAqIEdGWDdfTUVDX0hQRF9TSVpFICogMjsKIAotCS8qIGluaXQgdGhlIHBpcGVzICovCiAJbXV0 ZXhfbG9jaygmYWRldi0+c3JibV9tdXRleCk7Ci0JZm9yIChpID0gMDsgaSA8IChhZGV2LT5nZngu bWVjLm51bV9waXBlICogYWRldi0+Z2Z4Lm1lYy5udW1fbWVjKTsgaSsrKSB7Ci0JCWludCBtZSA9 IChpIDwgNCkgPyAxIDogMjsKLQkJaW50IHBpcGUgPSAoaSA8IDQpID8gaSA6IChpIC0gNCk7CisJ ZW9wX2dwdV9hZGRyID0gYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX2dwdV9hZGRyICsgZW9wX29mZnNl dDsKIAotCQllb3BfZ3B1X2FkZHIgPSBhZGV2LT5nZngubWVjLmhwZF9lb3BfZ3B1X2FkZHIgKyAo aSAqIEdGWDdfTUVDX0hQRF9TSVpFICogMik7CisJY2lrX3NyYm1fc2VsZWN0KGFkZXYsIG1lLCBw aXBlLCAwLCAwKTsKIAotCQljaWtfc3JibV9zZWxlY3QoYWRldiwgbWUsIHBpcGUsIDAsIDApOwor CS8qIHdyaXRlIHRoZSBFT1AgYWRkciAqLworCVdSRUczMihtbUNQX0hQRF9FT1BfQkFTRV9BRERS LCBlb3BfZ3B1X2FkZHIgPj4gOCk7CisJV1JFRzMyKG1tQ1BfSFBEX0VPUF9CQVNFX0FERFJfSEks IHVwcGVyXzMyX2JpdHMoZW9wX2dwdV9hZGRyKSA+PiA4KTsKIAotCQkvKiB3cml0ZSB0aGUgRU9Q IGFkZHIgKi8KLQkJV1JFRzMyKG1tQ1BfSFBEX0VPUF9CQVNFX0FERFIsIGVvcF9ncHVfYWRkciA+ PiA4KTsKLQkJV1JFRzMyKG1tQ1BfSFBEX0VPUF9CQVNFX0FERFJfSEksIHVwcGVyXzMyX2JpdHMo ZW9wX2dwdV9hZGRyKSA+PiA4KTsKKwkvKiBzZXQgdGhlIFZNSUQgYXNzaWduZWQgKi8KKwlXUkVH MzIobW1DUF9IUERfRU9QX1ZNSUQsIDApOwogCi0JCS8qIHNldCB0aGUgVk1JRCBhc3NpZ25lZCAq LwotCQlXUkVHMzIobW1DUF9IUERfRU9QX1ZNSUQsIDApOworCS8qIHNldCB0aGUgRU9QIHNpemUs IHJlZ2lzdGVyIHZhbHVlIGlzIDJeKEVPUF9TSVpFKzEpIGR3b3JkcyAqLworCXRtcCA9IFJSRUcz MihtbUNQX0hQRF9FT1BfQ09OVFJPTCk7CisJdG1wICY9IH5DUF9IUERfRU9QX0NPTlRST0xfX0VP UF9TSVpFX01BU0s7CisJdG1wIHw9IG9yZGVyX2Jhc2VfMihHRlg3X01FQ19IUERfU0laRSAvIDgp OworCVdSRUczMihtbUNQX0hQRF9FT1BfQ09OVFJPTCwgdG1wKTsKIAotCQkvKiBzZXQgdGhlIEVP UCBzaXplLCByZWdpc3RlciB2YWx1ZSBpcyAyXihFT1BfU0laRSsxKSBkd29yZHMgKi8KLQkJdG1w ID0gUlJFRzMyKG1tQ1BfSFBEX0VPUF9DT05UUk9MKTsKLQkJdG1wICY9IH5DUF9IUERfRU9QX0NP TlRST0xfX0VPUF9TSVpFX01BU0s7Ci0JCXRtcCB8PSBvcmRlcl9iYXNlXzIoR0ZYN19NRUNfSFBE X1NJWkUgLyA4KTsKLQkJV1JFRzMyKG1tQ1BfSFBEX0VPUF9DT05UUk9MLCB0bXApOwotCX0KIAlj aWtfc3JibV9zZWxlY3QoYWRldiwgMCwgMCwgMCwgMCk7CiAJbXV0ZXhfdW5sb2NrKCZhZGV2LT5z cmJtX211dGV4KTsKK30KIAotCS8qIGluaXQgdGhlIHF1ZXVlcy4gIEp1c3QgdHdvIGZvciBub3cu ICovCi0JZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5udW1fY29tcHV0ZV9yaW5nczsgaSsrKSB7 Ci0JCXJpbmcgPSAmYWRldi0+Z2Z4LmNvbXB1dGVfcmluZ1tpXTsKK3N0YXRpYyBpbnQgZ2Z4X3Y3 XzBfbXFkX2RlYWN0aXZhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCit7CisJaW50IGk7 CiAKLQkJaWYgKHJpbmctPm1xZF9vYmogPT0gTlVMTCkgewotCQkJciA9IGFtZGdwdV9ib19jcmVh dGUoYWRldiwKLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IGJvbmFpcmVfbXFkKSwKLQkJCQkJICAg ICBQQUdFX1NJWkUsIHRydWUsCi0JCQkJCSAgICAgQU1ER1BVX0dFTV9ET01BSU5fR1RULCAwLCBO VUxMLCBOVUxMLAotCQkJCQkgICAgICZyaW5nLT5tcWRfb2JqKTsKLQkJCWlmIChyKSB7Ci0JCQkJ ZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBjcmVhdGUgTVFEIGJvIGZhaWxlZFxuIiwgcik7Ci0J CQkJcmV0dXJuIHI7Ci0JCQl9CisJLyogZGlzYWJsZSB0aGUgcXVldWUgaWYgaXQncyBhY3RpdmUg Ki8KKwlpZiAoUlJFRzMyKG1tQ1BfSFFEX0FDVElWRSkgJiAxKSB7CisJCVdSRUczMihtbUNQX0hR RF9ERVFVRVVFX1JFUVVFU1QsIDEpOworCQlmb3IgKGkgPSAwOyBpIDwgYWRldi0+dXNlY190aW1l b3V0OyBpKyspIHsKKwkJCWlmICghKFJSRUczMihtbUNQX0hRRF9BQ1RJVkUpICYgMSkpCisJCQkJ YnJlYWs7CisJCQl1ZGVsYXkoMSk7CiAJCX0KIAotCQlyID0gYW1kZ3B1X2JvX3Jlc2VydmUocmlu Zy0+bXFkX29iaiwgZmFsc2UpOwotCQlpZiAodW5saWtlbHkociAhPSAwKSkgewotCQkJZ2Z4X3Y3 XzBfY3BfY29tcHV0ZV9maW5pKGFkZXYpOwotCQkJcmV0dXJuIHI7Ci0JCX0KLQkJciA9IGFtZGdw dV9ib19waW4ocmluZy0+bXFkX29iaiwgQU1ER1BVX0dFTV9ET01BSU5fR1RULAotCQkJCSAgJm1x ZF9ncHVfYWRkcik7Ci0JCWlmIChyKSB7Ci0JCQlkZXZfd2FybihhZGV2LT5kZXYsICIoJWQpIHBp biBNUUQgYm8gZmFpbGVkXG4iLCByKTsKLQkJCWdmeF92N18wX2NwX2NvbXB1dGVfZmluaShhZGV2 KTsKLQkJCXJldHVybiByOwotCQl9Ci0JCXIgPSBhbWRncHVfYm9fa21hcChyaW5nLT5tcWRfb2Jq LCAodm9pZCAqKikmYnVmKTsKLQkJaWYgKHIpIHsKLQkJCWRldl93YXJuKGFkZXYtPmRldiwgIigl ZCkgbWFwIE1RRCBibyBmYWlsZWRcbiIsIHIpOwotCQkJZ2Z4X3Y3XzBfY3BfY29tcHV0ZV9maW5p KGFkZXYpOwotCQkJcmV0dXJuIHI7Ci0JCX0KKwkJaWYgKGkgPT0gYWRldi0+dXNlY190aW1lb3V0 KQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAKLQkJLyogaW5pdCB0aGUgbXFkIHN0cnVjdCAqLwot CQltZW1zZXQoYnVmLCAwLCBzaXplb2Yoc3RydWN0IGJvbmFpcmVfbXFkKSk7CisJCVdSRUczMiht bUNQX0hRRF9ERVFVRVVFX1JFUVVFU1QsIDApOworCQlXUkVHMzIobW1DUF9IUURfUFFfUlBUUiwg MCk7CisJCVdSRUczMihtbUNQX0hRRF9QUV9XUFRSLCAwKTsKKwl9CiAKLQkJbXFkID0gKHN0cnVj dCBib25haXJlX21xZCAqKWJ1ZjsKLQkJbXFkLT5oZWFkZXIgPSAweEMwMzEwODAwOwotCQltcWQt PnN0YXRpY190aHJlYWRfbWdtdDAxWzBdID0gMHhmZmZmZmZmZjsKLQkJbXFkLT5zdGF0aWNfdGhy ZWFkX21nbXQwMVsxXSA9IDB4ZmZmZmZmZmY7Ci0JCW1xZC0+c3RhdGljX3RocmVhZF9tZ210MjNb MF0gPSAweGZmZmZmZmZmOwotCQltcWQtPnN0YXRpY190aHJlYWRfbWdtdDIzWzFdID0gMHhmZmZm ZmZmZjsKKwlyZXR1cm4gMDsKK30KIAotCQltdXRleF9sb2NrKCZhZGV2LT5zcmJtX211dGV4KTsK LQkJY2lrX3NyYm1fc2VsZWN0KGFkZXYsIHJpbmctPm1lLAotCQkJCXJpbmctPnBpcGUsCi0JCQkJ cmluZy0+cXVldWUsIDApOworc3RhdGljIHZvaWQgZ2Z4X3Y3XzBfbXFkX2luaXQoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkgICAgIHN0cnVjdCBib25haXJlX21xZCAqbXFkLAorCQkJ ICAgICB1aW50NjRfdCBtcWRfZ3B1X2FkZHIsCisJCQkgICAgIHN0cnVjdCBhbWRncHVfcmluZyAq cmluZykKK3sKKwl1NjQgaHFkX2dwdV9hZGRyOworCXU2NCB3Yl9ncHVfYWRkcjsKIAotCQkvKiBk aXNhYmxlIHdwdHIgcG9sbGluZyAqLwotCQl0bXAgPSBSUkVHMzIobW1DUF9QUV9XUFRSX1BPTExf Q05UTCk7Ci0JCXRtcCAmPSB+Q1BfUFFfV1BUUl9QT0xMX0NOVExfX0VOX01BU0s7Ci0JCVdSRUcz MihtbUNQX1BRX1dQVFJfUE9MTF9DTlRMLCB0bXApOworCS8qIGluaXQgdGhlIG1xZCBzdHJ1Y3Qg Ki8KKwltZW1zZXQobXFkLCAwLCBzaXplb2Yoc3RydWN0IGJvbmFpcmVfbXFkKSk7CiAKLQkJLyog ZW5hYmxlIGRvb3JiZWxsPyAqLwotCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVs bF9jb250cm9sID0KLQkJCVJSRUczMihtbUNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MKTsKLQkJ aWYgKHVzZV9kb29yYmVsbCkKLQkJCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxs X2NvbnRyb2wgfD0gQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0xfX0RPT1JCRUxMX0VOX01BU0s7 Ci0JCWVsc2UKLQkJCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wg Jj0gfkNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVMTF9FTl9NQVNLOwotCQlXUkVH MzIobW1DUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTCwKLQkJICAgICAgIG1xZC0+cXVldWVfc3Rh dGUuY3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wpOwotCi0JCS8qIGRpc2FibGUgdGhlIHF1ZXVl IGlmIGl0J3MgYWN0aXZlICovCi0JCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX2RlcXVldWVfcmVx dWVzdCA9IDA7Ci0JCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3JwdHIgPSAwOwotCQltcWQt PnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRyPSAwOwotCQlpZiAoUlJFRzMyKG1tQ1BfSFFEX0FD VElWRSkgJiAxKSB7Ci0JCQlXUkVHMzIobW1DUF9IUURfREVRVUVVRV9SRVFVRVNULCAxKTsKLQkJ CWZvciAoaiA9IDA7IGogPCBhZGV2LT51c2VjX3RpbWVvdXQ7IGorKykgewotCQkJCWlmICghKFJS RUczMihtbUNQX0hRRF9BQ1RJVkUpICYgMSkpCi0JCQkJCWJyZWFrOwotCQkJCXVkZWxheSgxKTsK LQkJCX0KLQkJCVdSRUczMihtbUNQX0hRRF9ERVFVRVVFX1JFUVVFU1QsIG1xZC0+cXVldWVfc3Rh dGUuY3BfaHFkX2RlcXVldWVfcmVxdWVzdCk7Ci0JCQlXUkVHMzIobW1DUF9IUURfUFFfUlBUUiwg bXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0cik7Ci0JCQlXUkVHMzIobW1DUF9IUURfUFFf V1BUUiwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0cik7Ci0JCX0KKwltcWQtPmhlYWRl ciA9IDB4QzAzMTA4MDA7CisJbXFkLT5zdGF0aWNfdGhyZWFkX21nbXQwMVswXSA9IDB4ZmZmZmZm ZmY7CisJbXFkLT5zdGF0aWNfdGhyZWFkX21nbXQwMVsxXSA9IDB4ZmZmZmZmZmY7CisJbXFkLT5z dGF0aWNfdGhyZWFkX21nbXQyM1swXSA9IDB4ZmZmZmZmZmY7CisJbXFkLT5zdGF0aWNfdGhyZWFk X21nbXQyM1sxXSA9IDB4ZmZmZmZmZmY7CiAKLQkJLyogc2V0IHRoZSBwb2ludGVyIHRvIHRoZSBN UUQgKi8KLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRfYmFzZV9hZGRyID0gbXFkX2dwdV9hZGRy ICYgMHhmZmZmZmZmYzsKLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRfYmFzZV9hZGRyX2hpID0g dXBwZXJfMzJfYml0cyhtcWRfZ3B1X2FkZHIpOwotCQlXUkVHMzIobW1DUF9NUURfQkFTRV9BRERS LCBtcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9iYXNlX2FkZHIpOwotCQlXUkVHMzIobW1DUF9NUURf QkFTRV9BRERSX0hJLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9iYXNlX2FkZHJfaGkpOwotCQkv KiBzZXQgTVFEIHZtaWQgdG8gMCAqLwotCQltcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9jb250cm9s ID0gUlJFRzMyKG1tQ1BfTVFEX0NPTlRST0wpOwotCQltcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9j b250cm9sICY9IH5DUF9NUURfQ09OVFJPTF9fVk1JRF9NQVNLOwotCQlXUkVHMzIobW1DUF9NUURf Q09OVFJPTCwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRfY29udHJvbCk7Ci0KLQkJLyogc2V0IHRo ZSBwb2ludGVyIHRvIHRoZSBIUUQsIHRoaXMgaXMgc2ltaWxhciBDUF9SQjBfQkFTRS9fSEkgKi8K LQkJaHFkX2dwdV9hZGRyID0gcmluZy0+Z3B1X2FkZHIgPj4gODsKLQkJbXFkLT5xdWV1ZV9zdGF0 ZS5jcF9ocWRfcHFfYmFzZSA9IGhxZF9ncHVfYWRkcjsKLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9o cWRfcHFfYmFzZV9oaSA9IHVwcGVyXzMyX2JpdHMoaHFkX2dwdV9hZGRyKTsKLQkJV1JFRzMyKG1t Q1BfSFFEX1BRX0JBU0UsIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Jhc2UpOwotCQlXUkVH MzIobW1DUF9IUURfUFFfQkFTRV9ISSwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfYmFzZV9o aSk7Ci0KLQkJLyogc2V0IHVwIHRoZSBIUUQsIHRoaXMgaXMgc2ltaWxhciB0byBDUF9SQjBfQ05U TCAqLwotCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9jb250cm9sID0gUlJFRzMyKG1tQ1Bf SFFEX1BRX0NPTlRST0wpOwotCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9jb250cm9sICY9 Ci0JCQl+KENQX0hRRF9QUV9DT05UUk9MX19RVUVVRV9TSVpFX01BU0sgfAotCQkJCQlDUF9IUURf UFFfQ09OVFJPTF9fUlBUUl9CTE9DS19TSVpFX01BU0spOwotCi0JCW1xZC0+cXVldWVfc3RhdGUu Y3BfaHFkX3BxX2NvbnRyb2wgfD0KLQkJCW9yZGVyX2Jhc2VfMihyaW5nLT5yaW5nX3NpemUgLyA4 KTsKLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfY29udHJvbCB8PQotCQkJKG9yZGVyX2Jh c2VfMihBTURHUFVfR1BVX1BBR0VfU0laRS84KSA8PCA4KTsKKwkvKiBlbmFibGUgZG9vcmJlbGw/ ICovCisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCA9CisJCVJS RUczMihtbUNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MKTsKKwlpZiAocmluZy0+dXNlX2Rvb3Ji ZWxsKQorCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sIHw9IENQ X0hRRF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVMTF9FTl9NQVNLOworCWVsc2UKKwkJbXFk LT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCAmPSB+Q1BfSFFEX1BRX0RP T1JCRUxMX0NPTlRST0xfX0RPT1JCRUxMX0VOX01BU0s7CisKKwkvKiBzZXQgdGhlIHBvaW50ZXIg dG8gdGhlIE1RRCAqLworCW1xZC0+cXVldWVfc3RhdGUuY3BfbXFkX2Jhc2VfYWRkciA9IG1xZF9n cHVfYWRkciAmIDB4ZmZmZmZmZmM7CisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRfYmFzZV9hZGRy X2hpID0gdXBwZXJfMzJfYml0cyhtcWRfZ3B1X2FkZHIpOworCisJLyogc2V0IE1RRCB2bWlkIHRv IDAgKi8KKwltcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9jb250cm9sID0gUlJFRzMyKG1tQ1BfTVFE X0NPTlRST0wpOworCW1xZC0+cXVldWVfc3RhdGUuY3BfbXFkX2NvbnRyb2wgJj0gfkNQX01RRF9D T05UUk9MX19WTUlEX01BU0s7CisKKwkvKiBzZXQgdGhlIHBvaW50ZXIgdG8gdGhlIEhRRCwgdGhp cyBpcyBzaW1pbGFyIENQX1JCMF9CQVNFL19ISSAqLworCWhxZF9ncHVfYWRkciA9IHJpbmctPmdw dV9hZGRyID4+IDg7CisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfYmFzZSA9IGhxZF9ncHVf YWRkcjsKKwltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9iYXNlX2hpID0gdXBwZXJfMzJfYml0 cyhocWRfZ3B1X2FkZHIpOworCisJLyogc2V0IHVwIHRoZSBIUUQsIHRoaXMgaXMgc2ltaWxhciB0 byBDUF9SQjBfQ05UTCAqLworCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2NvbnRyb2wgPSBS UkVHMzIobW1DUF9IUURfUFFfQ09OVFJPTCk7CisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFf Y29udHJvbCAmPQorCQl+KENQX0hRRF9QUV9DT05UUk9MX19RVUVVRV9TSVpFX01BU0sgfAorCQkJ CUNQX0hRRF9QUV9DT05UUk9MX19SUFRSX0JMT0NLX1NJWkVfTUFTSyk7CisKKwltcWQtPnF1ZXVl X3N0YXRlLmNwX2hxZF9wcV9jb250cm9sIHw9CisJCW9yZGVyX2Jhc2VfMihyaW5nLT5yaW5nX3Np emUgLyA4KTsKKwltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9jb250cm9sIHw9CisJCShvcmRl cl9iYXNlXzIoQU1ER1BVX0dQVV9QQUdFX1NJWkUvOCkgPDwgOCk7CiAjaWZkZWYgX19CSUdfRU5E SUFOCi0JCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2NvbnRyb2wgfD0KLQkJCTIgPDwgQ1Bf SFFEX1BRX0NPTlRST0xfX0VORElBTl9TV0FQX19TSElGVDsKKwltcWQtPnF1ZXVlX3N0YXRlLmNw X2hxZF9wcV9jb250cm9sIHw9CisJCTIgPDwgQ1BfSFFEX1BRX0NPTlRST0xfX0VORElBTl9TV0FQ X19TSElGVDsKICNlbmRpZgotCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9jb250cm9sICY9 Ci0JCQl+KENQX0hRRF9QUV9DT05UUk9MX19VTk9SRF9ESVNQQVRDSF9NQVNLIHwKKwltcWQtPnF1 ZXVlX3N0YXRlLmNwX2hxZF9wcV9jb250cm9sICY9CisJCX4oQ1BfSFFEX1BRX0NPTlRST0xfX1VO T1JEX0RJU1BBVENIX01BU0sgfAogCQkJCUNQX0hRRF9QUV9DT05UUk9MX19ST1FfUFFfSUJfRkxJ UF9NQVNLIHwKIAkJCQlDUF9IUURfUFFfQ09OVFJPTF9fUFFfVk9MQVRJTEVfTUFTSyk7Ci0JCW1x ZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2NvbnRyb2wgfD0KLQkJCUNQX0hRRF9QUV9DT05UUk9M X19QUklWX1NUQVRFX01BU0sgfAotCQkJQ1BfSFFEX1BRX0NPTlRST0xfX0tNRF9RVUVVRV9NQVNL OyAvKiBhc3N1bWluZyBrZXJuZWwgcXVldWUgY29udHJvbCAqLwotCQlXUkVHMzIobW1DUF9IUURf UFFfQ09OVFJPTCwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfY29udHJvbCk7Ci0KLQkJLyog b25seSB1c2VkIGlmIENQX1BRX1dQVFJfUE9MTF9DTlRMLkNQX1BRX1dQVFJfUE9MTF9DTlRMX19F Tl9NQVNLPTEgKi8KLQkJd2JfZ3B1X2FkZHIgPSBhZGV2LT53Yi5ncHVfYWRkciArIChyaW5nLT53 cHRyX29mZnMgKiA0KTsKLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0cl9wb2xsX2Fk ZHIgPSB3Yl9ncHVfYWRkciAmIDB4ZmZmZmZmZmM7Ci0JCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFk X3BxX3dwdHJfcG9sbF9hZGRyX2hpID0gdXBwZXJfMzJfYml0cyh3Yl9ncHVfYWRkcikgJiAweGZm ZmY7Ci0JCVdSRUczMihtbUNQX0hRRF9QUV9XUFRSX1BPTExfQUREUiwgbXFkLT5xdWV1ZV9zdGF0 ZS5jcF9ocWRfcHFfd3B0cl9wb2xsX2FkZHIpOwotCQlXUkVHMzIobW1DUF9IUURfUFFfV1BUUl9Q T0xMX0FERFJfSEksCi0JCSAgICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRyX3Bv bGxfYWRkcl9oaSk7Ci0KLQkJLyogc2V0IHRoZSB3YiBhZGRyZXNzIHdldGhlciBpdCdzIGVuYWJs ZWQgb3Igbm90ICovCi0JCXdiX2dwdV9hZGRyID0gYWRldi0+d2IuZ3B1X2FkZHIgKyAocmluZy0+ cnB0cl9vZmZzICogNCk7Ci0JCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3JwdHJfcmVwb3J0 X2FkZHIgPSB3Yl9ncHVfYWRkciAmIDB4ZmZmZmZmZmM7Ci0JCW1xZC0+cXVldWVfc3RhdGUuY3Bf aHFkX3BxX3JwdHJfcmVwb3J0X2FkZHJfaGkgPQotCQkJdXBwZXJfMzJfYml0cyh3Yl9ncHVfYWRk cikgJiAweGZmZmY7Ci0JCVdSRUczMihtbUNQX0hRRF9QUV9SUFRSX1JFUE9SVF9BRERSLAotCQkg ICAgICAgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0cl9yZXBvcnRfYWRkcik7Ci0JCVdS RUczMihtbUNQX0hRRF9QUV9SUFRSX1JFUE9SVF9BRERSX0hJLAotCQkgICAgICAgbXFkLT5xdWV1 ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0cl9yZXBvcnRfYWRkcl9oaSk7Ci0KLQkJLyogZW5hYmxlIHRo ZSBkb29yYmVsbCBpZiByZXF1ZXN0ZWQgKi8KLQkJaWYgKHVzZV9kb29yYmVsbCkgewotCQkJbXFk LT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCA9Ci0JCQkJUlJFRzMyKG1t Q1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wpOwotCQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRf cHFfZG9vcmJlbGxfY29udHJvbCAmPQotCQkJCX5DUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9f RE9PUkJFTExfT0ZGU0VUX01BU0s7Ci0JCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29y YmVsbF9jb250cm9sIHw9Ci0JCQkJKHJpbmctPmRvb3JiZWxsX2luZGV4IDw8Ci0JCQkJIENQX0hR RF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVMTF9PRkZTRVRfX1NISUZUKTsKLQkJCW1xZC0+ cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wgfD0KLQkJCQlDUF9IUURfUFFf RE9PUkJFTExfQ09OVFJPTF9fRE9PUkJFTExfRU5fTUFTSzsKLQkJCW1xZC0+cXVldWVfc3RhdGUu Y3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wgJj0KLQkJCQl+KENQX0hRRF9QUV9ET09SQkVMTF9D T05UUk9MX19ET09SQkVMTF9TT1VSQ0VfTUFTSyB8Ci0JCQkJQ1BfSFFEX1BRX0RPT1JCRUxMX0NP TlRST0xfX0RPT1JCRUxMX0hJVF9NQVNLKTsKKwltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9j b250cm9sIHw9CisJCUNQX0hRRF9QUV9DT05UUk9MX19QUklWX1NUQVRFX01BU0sgfAorCQlDUF9I UURfUFFfQ09OVFJPTF9fS01EX1FVRVVFX01BU0s7IC8qIGFzc3VtaW5nIGtlcm5lbCBxdWV1ZSBj b250cm9sICovCiAKLQkJfSBlbHNlIHsKLQkJCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rv b3JiZWxsX2NvbnRyb2wgPSAwOworCS8qIG9ubHkgdXNlZCBpZiBDUF9QUV9XUFRSX1BPTExfQ05U TC5DUF9QUV9XUFRSX1BPTExfQ05UTF9fRU5fTUFTSz0xICovCisJd2JfZ3B1X2FkZHIgPSBhZGV2 LT53Yi5ncHVfYWRkciArIChyaW5nLT53cHRyX29mZnMgKiA0KTsKKwltcWQtPnF1ZXVlX3N0YXRl LmNwX2hxZF9wcV93cHRyX3BvbGxfYWRkciA9IHdiX2dwdV9hZGRyICYgMHhmZmZmZmZmYzsKKwlt cWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRyX3BvbGxfYWRkcl9oaSA9IHVwcGVyXzMyX2Jp dHMod2JfZ3B1X2FkZHIpICYgMHhmZmZmOworCisJLyogc2V0IHRoZSB3YiBhZGRyZXNzIHdldGhl ciBpdCdzIGVuYWJsZWQgb3Igbm90ICovCisJd2JfZ3B1X2FkZHIgPSBhZGV2LT53Yi5ncHVfYWRk ciArIChyaW5nLT5ycHRyX29mZnMgKiA0KTsKKwltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9y cHRyX3JlcG9ydF9hZGRyID0gd2JfZ3B1X2FkZHIgJiAweGZmZmZmZmZjOworCW1xZC0+cXVldWVf c3RhdGUuY3BfaHFkX3BxX3JwdHJfcmVwb3J0X2FkZHJfaGkgPQorCQl1cHBlcl8zMl9iaXRzKHdi X2dwdV9hZGRyKSAmIDB4ZmZmZjsKKworCS8qIGVuYWJsZSB0aGUgZG9vcmJlbGwgaWYgcmVxdWVz dGVkICovCisJaWYgKHJpbmctPnVzZV9kb29yYmVsbCkgeworCQltcWQtPnF1ZXVlX3N0YXRlLmNw X2hxZF9wcV9kb29yYmVsbF9jb250cm9sID0KKwkJCVJSRUczMihtbUNQX0hRRF9QUV9ET09SQkVM TF9DT05UUk9MKTsKKwkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJv bCAmPQorCQkJfkNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVMTF9PRkZTRVRfTUFT SzsKKwkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCB8PQorCQkJ KHJpbmctPmRvb3JiZWxsX2luZGV4IDw8CisJCQkgQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0xf X0RPT1JCRUxMX09GRlNFVF9fU0hJRlQpOworCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9k b29yYmVsbF9jb250cm9sIHw9CisJCQlDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9fRE9PUkJF TExfRU5fTUFTSzsKKwkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJv bCAmPQorCQkJfihDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9fRE9PUkJFTExfU09VUkNFX01B U0sgfAorCQkJCQlDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9fRE9PUkJFTExfSElUX01BU0sp OworCisJfSBlbHNlIHsKKwkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29u dHJvbCA9IDA7CisJfQorCisJLyogcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMsIHNpbWlsYXIgdG8g Q1BfUkIwX1dQVFIvX1JQVFIgKi8KKwlyaW5nLT53cHRyID0gMDsKKwltcWQtPnF1ZXVlX3N0YXRl LmNwX2hxZF9wcV93cHRyID0gbG93ZXJfMzJfYml0cyhyaW5nLT53cHRyKTsKKwltcWQtPnF1ZXVl X3N0YXRlLmNwX2hxZF9wcV9ycHRyID0gUlJFRzMyKG1tQ1BfSFFEX1BRX1JQVFIpOworCisJLyog c2V0IHRoZSB2bWlkIGZvciB0aGUgcXVldWUgKi8KKwltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF92 bWlkID0gMDsKKworCS8qIGFjdGl2YXRlIHRoZSBxdWV1ZSAqLworCW1xZC0+cXVldWVfc3RhdGUu Y3BfaHFkX2FjdGl2ZSA9IDE7Cit9CisKK3N0YXRpYyBpbnQgZ2Z4X3Y3XzBfbXFkX2NvbW1pdChz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCSAgICAgICBzdHJ1Y3QgYm9uYWlyZV9tcWQg Km1xZCkKK3sKKwl1MzIgdG1wOworCisJLyogZGlzYWJsZSB3cHRyIHBvbGxpbmcgKi8KKwl0bXAg PSBSUkVHMzIobW1DUF9QUV9XUFRSX1BPTExfQ05UTCk7CisJdG1wID0gUkVHX1NFVF9GSUVMRCh0 bXAsIENQX1BRX1dQVFJfUE9MTF9DTlRMLCBFTiwgMCk7CisJV1JFRzMyKG1tQ1BfUFFfV1BUUl9Q T0xMX0NOVEwsIHRtcCk7CisKKwkvKiBwcm9ncmFtIE1RRCBmaWVsZCB0byBIVyAqLworCVdSRUcz MihtbUNQX01RRF9CQVNFX0FERFIsIG1xZC0+cXVldWVfc3RhdGUuY3BfbXFkX2Jhc2VfYWRkcik7 CisJV1JFRzMyKG1tQ1BfTVFEX0JBU0VfQUREUl9ISSwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRf YmFzZV9hZGRyX2hpKTsKKwlXUkVHMzIobW1DUF9NUURfQ09OVFJPTCwgbXFkLT5xdWV1ZV9zdGF0 ZS5jcF9tcWRfY29udHJvbCk7CisJV1JFRzMyKG1tQ1BfSFFEX1BRX0JBU0UsIG1xZC0+cXVldWVf c3RhdGUuY3BfaHFkX3BxX2Jhc2UpOworCVdSRUczMihtbUNQX0hRRF9QUV9CQVNFX0hJLCBtcWQt PnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9iYXNlX2hpKTsKKwlXUkVHMzIobW1DUF9IUURfUFFfQ09O VFJPTCwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfY29udHJvbCk7CisJV1JFRzMyKG1tQ1Bf SFFEX1BRX1dQVFJfUE9MTF9BRERSLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRyX3Bv bGxfYWRkcik7CisJV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFJfUE9MTF9BRERSX0hJLCBtcWQtPnF1 ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRyX3BvbGxfYWRkcl9oaSk7CisJV1JFRzMyKG1tQ1BfSFFE X1BRX1JQVFJfUkVQT1JUX0FERFIsIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3JwdHJfcmVw b3J0X2FkZHIpOworCVdSRUczMihtbUNQX0hRRF9QUV9SUFRSX1JFUE9SVF9BRERSX0hJLCBtcWQt PnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyX2hpKTsKKwlXUkVHMzIobW1D UF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTCwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9v cmJlbGxfY29udHJvbCk7CisJV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFIsIG1xZC0+cXVldWVfc3Rh dGUuY3BfaHFkX3BxX3dwdHIpOworCVdSRUczMihtbUNQX0hRRF9WTUlELCBtcWQtPnF1ZXVlX3N0 YXRlLmNwX2hxZF92bWlkKTsKKworCS8qIGFjdGl2YXRlIHRoZSBIUUQgKi8KKwlXUkVHMzIobW1D UF9IUURfQUNUSVZFLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9hY3RpdmUpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgZ2Z4X3Y3XzBfY29tcHV0ZV9xdWV1ZV9pbml0KHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2LCBpbnQgcmluZ19pZCkKK3sKKwlpbnQgcjsKKwl1NjQgbXFkX2dw dV9hZGRyOworCXN0cnVjdCBib25haXJlX21xZCAqbXFkOworCXN0cnVjdCBhbWRncHVfcmluZyAq cmluZyA9ICZhZGV2LT5nZnguY29tcHV0ZV9yaW5nW3JpbmdfaWRdOworCisJaWYgKHJpbmctPm1x ZF9vYmogPT0gTlVMTCkgeworCQlyID0gYW1kZ3B1X2JvX2NyZWF0ZShhZGV2LAorCQkJCXNpemVv ZihzdHJ1Y3QgYm9uYWlyZV9tcWQpLAorCQkJCVBBR0VfU0laRSwgdHJ1ZSwKKwkJCQlBTURHUFVf R0VNX0RPTUFJTl9HVFQsIDAsIE5VTEwsIE5VTEwsCisJCQkJJnJpbmctPm1xZF9vYmopOworCQlp ZiAocikgeworCQkJZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBjcmVhdGUgTVFEIGJvIGZhaWxl ZFxuIiwgcik7CisJCQlyZXR1cm4gcjsKIAkJfQotCQlXUkVHMzIobW1DUF9IUURfUFFfRE9PUkJF TExfQ09OVFJPTCwKLQkJICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxs X2NvbnRyb2wpOworCX0KIAotCQkvKiByZWFkIGFuZCB3cml0ZSBwb2ludGVycywgc2ltaWxhciB0 byBDUF9SQjBfV1BUUi9fUlBUUiAqLwotCQlyaW5nLT53cHRyID0gMDsKLQkJbXFkLT5xdWV1ZV9z dGF0ZS5jcF9ocWRfcHFfd3B0ciA9IGxvd2VyXzMyX2JpdHMocmluZy0+d3B0cik7Ci0JCVdSRUcz MihtbUNQX0hRRF9QUV9XUFRSLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRyKTsKLQkJ bXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0ciA9IFJSRUczMihtbUNQX0hRRF9QUV9SUFRS KTsKKwlyID0gYW1kZ3B1X2JvX3Jlc2VydmUocmluZy0+bXFkX29iaiwgZmFsc2UpOworCWlmICh1 bmxpa2VseShyICE9IDApKQorCQlnb3RvIG91dDsKIAotCQkvKiBzZXQgdGhlIHZtaWQgZm9yIHRo ZSBxdWV1ZSAqLwotCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF92bWlkID0gMDsKLQkJV1JFRzMy KG1tQ1BfSFFEX1ZNSUQsIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3ZtaWQpOworCXIgPSBhbWRn cHVfYm9fcGluKHJpbmctPm1xZF9vYmosIEFNREdQVV9HRU1fRE9NQUlOX0dUVCwKKwkJCSZtcWRf Z3B1X2FkZHIpOworCWlmIChyKSB7CisJCWRldl93YXJuKGFkZXYtPmRldiwgIiglZCkgcGluIE1R RCBibyBmYWlsZWRcbiIsIHIpOworCQlnb3RvIG91dF91bnJlc2VydmU7CisJfQorCXIgPSBhbWRn cHVfYm9fa21hcChyaW5nLT5tcWRfb2JqLCAodm9pZCAqKikmbXFkKTsKKwlpZiAocikgeworCQlk ZXZfd2FybihhZGV2LT5kZXYsICIoJWQpIG1hcCBNUUQgYm8gZmFpbGVkXG4iLCByKTsKKwkJZ290 byBvdXRfdW5yZXNlcnZlOworCX0KIAotCQkvKiBhY3RpdmF0ZSB0aGUgcXVldWUgKi8KLQkJbXFk LT5xdWV1ZV9zdGF0ZS5jcF9ocWRfYWN0aXZlID0gMTsKLQkJV1JFRzMyKG1tQ1BfSFFEX0FDVElW RSwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfYWN0aXZlKTsKKwltdXRleF9sb2NrKCZhZGV2LT5z cmJtX211dGV4KTsKKwljaWtfc3JibV9zZWxlY3QoYWRldiwgcmluZy0+bWUsIHJpbmctPnBpcGUs IHJpbmctPnF1ZXVlLCAwKTsKIAotCQljaWtfc3JibV9zZWxlY3QoYWRldiwgMCwgMCwgMCwgMCk7 Ci0JCW11dGV4X3VubG9jaygmYWRldi0+c3JibV9tdXRleCk7CisJZ2Z4X3Y3XzBfbXFkX2luaXQo YWRldiwgbXFkLCBtcWRfZ3B1X2FkZHIsIHJpbmcpOworCWdmeF92N18wX21xZF9kZWFjdGl2YXRl KGFkZXYpOworCWdmeF92N18wX21xZF9jb21taXQoYWRldiwgbXFkKTsKIAotCQlhbWRncHVfYm9f a3VubWFwKHJpbmctPm1xZF9vYmopOwotCQlhbWRncHVfYm9fdW5yZXNlcnZlKHJpbmctPm1xZF9v YmopOworCWNpa19zcmJtX3NlbGVjdChhZGV2LCAwLCAwLCAwLCAwKTsKKwltdXRleF91bmxvY2so JmFkZXYtPnNyYm1fbXV0ZXgpOwogCi0JCXJpbmctPnJlYWR5ID0gdHJ1ZTsKKwlhbWRncHVfYm9f a3VubWFwKHJpbmctPm1xZF9vYmopOworb3V0X3VucmVzZXJ2ZToKKwlhbWRncHVfYm9fdW5yZXNl cnZlKHJpbmctPm1xZF9vYmopOworb3V0OgorCXJldHVybiAwOworfQorCisvKioKKyAqIGdmeF92 N18wX2NwX2NvbXB1dGVfcmVzdW1lIC0gc2V0dXAgdGhlIGNvbXB1dGUgcXVldWUgcmVnaXN0ZXJz CisgKgorICogQGFkZXY6IGFtZGdwdV9kZXZpY2UgcG9pbnRlcgorICoKKyAqIFByb2dyYW0gdGhl IGNvbXB1dGUgcXVldWVzIGFuZCB0ZXN0IHRoZW0gdG8gbWFrZSBzdXJlIHRoZXkKKyAqIGFyZSB3 b3JraW5nLgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBlcnJvciBmb3IgZmFpbHVyZS4KKyAq Lworc3RhdGljIGludCBnZnhfdjdfMF9jcF9jb21wdXRlX3Jlc3VtZShzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldikKK3sKKwlpbnQgciwgaSwgajsKKwl1MzIgdG1wOworCXN0cnVjdCBhbWRncHVf cmluZyAqcmluZzsKKworCS8qIGZpeCB1cCBjaGlja2VuIGJpdHMgKi8KKwl0bXAgPSBSUkVHMzIo bW1DUF9DUEZfREVCVUcpOworCXRtcCB8PSAoMSA8PCAyMyk7CisJV1JFRzMyKG1tQ1BfQ1BGX0RF QlVHLCB0bXApOworCisJLyogaW5pdCB0aGUgcGlwZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWRl di0+Z2Z4Lm1lYy5udW1fbWVjOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBhZGV2LT5nZngubWVj Lm51bV9waXBlOyBqKyspCisJCQlnZnhfdjdfMF9jb21wdXRlX3BpcGVfaW5pdChhZGV2LCBpLCBq KTsKKworCS8qIGluaXQgdGhlIHF1ZXVlcyAqLworCWZvciAoaSA9IDA7IGkgPCBhZGV2LT5nZngu bnVtX2NvbXB1dGVfcmluZ3M7IGkrKykgeworCQlyID0gZ2Z4X3Y3XzBfY29tcHV0ZV9xdWV1ZV9p bml0KGFkZXYsIGkpOworCQlpZiAocikgeworCQkJZ2Z4X3Y3XzBfY3BfY29tcHV0ZV9maW5pKGFk ZXYpOworCQkJcmV0dXJuIHI7CisJCX0KIAl9CiAKIAlnZnhfdjdfMF9jcF9jb21wdXRlX2VuYWJs ZShhZGV2LCB0cnVlKTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGV2LT5nZngubnVtX2NvbXB1dGVf cmluZ3M7IGkrKykgewogCQlyaW5nID0gJmFkZXYtPmdmeC5jb21wdXRlX3JpbmdbaV07Ci0KKwkJ cmluZy0+cmVhZHkgPSB0cnVlOwogCQlyID0gYW1kZ3B1X3JpbmdfdGVzdF9yaW5nKHJpbmcpOwog CQlpZiAocikKIAkJCXJpbmctPnJlYWR5ID0gZmFsc2U7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAK IHN0YXRpYyB2b2lkIGdmeF92N18wX2NwX2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diwgYm9vbCBlbmFibGUpCiB7CiAJZ2Z4X3Y3XzBfY3BfZ2Z4X2VuYWJsZShhZGV2LCBlbmFibGUp OwogCWdmeF92N18wX2NwX2NvbXB1dGVfZW5hYmxlKGFkZXYsIGVuYWJsZSk7CiB9CiAKIHN0YXRp YyBpbnQgZ2Z4X3Y3XzBfY3BfbG9hZF9taWNyb2NvZGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYpCiB7CiAJaW50IHI7CiAKIAlyID0gZ2Z4X3Y3XzBfY3BfZ2Z4X2xvYWRfbWljcm9jb2RlKGFk ZXYpOwogCWlmIChyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4 X3Y4XzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92OF8wLmMKaW5kZXggZmM5 NGMzYS4uYjY3MDMwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4 X3Y4XzAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjhfMC5jCkBAIC00 NzM1LDc5ICs0NzM1LDk4IEBAIHN0YXRpYyBpbnQgZ2Z4X3Y4XzBfa2lxX2tjcV9kaXNhYmxlKHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCWFtZGdwdV9yaW5nX3dyaXRlKGtpcV9yaW5nLCAo c2NyYXRjaCAtIFBBQ0tFVDNfU0VUX1VDT05GSUdfUkVHX1NUQVJUKSk7CiAJYW1kZ3B1X3Jpbmdf d3JpdGUoa2lxX3JpbmcsIDB4REVBREJFRUYpOwogCWFtZGdwdV9yaW5nX2NvbW1pdChraXFfcmlu Zyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKIAkJdG1w ID0gUlJFRzMyKHNjcmF0Y2gpOwogCQlpZiAodG1wID09IDB4REVBREJFRUYpCiAJCQlicmVhazsK IAkJRFJNX1VERUxBWSgxKTsKIAl9CiAJaWYgKGkgPj0gYWRldi0+dXNlY190aW1lb3V0KSB7CiAJ CURSTV9FUlJPUigiS0NRIGVuYWJsZSBmYWlsZWQgKHNjcmF0Y2goMHglMDRYKT0weCUwOFgpXG4i LAogCQkJICBzY3JhdGNoLCB0bXApOwogCQlyID0gLUVJTlZBTDsKIAl9CiAJYW1kZ3B1X2dmeF9z Y3JhdGNoX2ZyZWUoYWRldiwgc2NyYXRjaCk7CiAKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIGlu dCBnZnhfdjhfMF9kZWFjdGl2YXRlX2hxZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdTMy IHJlcSkKK3sKKwlpbnQgaSwgciA9IDA7CisKKwlpZiAoUlJFRzMyKG1tQ1BfSFFEX0FDVElWRSkg JiBDUF9IUURfQUNUSVZFX19BQ1RJVkVfTUFTSykgeworCQlXUkVHMzJfRklFTEQoQ1BfSFFEX0RF UVVFVUVfUkVRVUVTVCwgREVRVUVVRV9SRVEsIHJlcSk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGV2 LT51c2VjX3RpbWVvdXQ7IGkrKykgeworCQkJaWYgKCEoUlJFRzMyKG1tQ1BfSFFEX0FDVElWRSkg JiBDUF9IUURfQUNUSVZFX19BQ1RJVkVfTUFTSykpCisJCQkJYnJlYWs7CisJCQl1ZGVsYXkoMSk7 CisJCX0KKwkJaWYgKGkgPT0gYWRldi0+dXNlY190aW1lb3V0KQorCQkJciA9IC1FVElNRURPVVQ7 CisJfQorCVdSRUczMihtbUNQX0hRRF9ERVFVRVVFX1JFUVVFU1QsIDApOworCVdSRUczMihtbUNQ X0hRRF9QUV9SUFRSLCAwKTsKKwlXUkVHMzIobW1DUF9IUURfUFFfV1BUUiwgMCk7CisKKwlyZXR1 cm4gcjsKK30KKwogc3RhdGljIGludCBnZnhfdjhfMF9tcWRfaW5pdChzdHJ1Y3QgYW1kZ3B1X3Jp bmcgKnJpbmcpCiB7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSByaW5nLT5hZGV2Owog CXN0cnVjdCB2aV9tcWQgKm1xZCA9IHJpbmctPm1xZF9wdHI7CiAJdWludDY0X3QgaHFkX2dwdV9h ZGRyLCB3Yl9ncHVfYWRkciwgZW9wX2Jhc2VfYWRkcjsKIAl1aW50MzJfdCB0bXA7CiAKKwkvKiBp bml0IHRoZSBtcWQgc3RydWN0ICovCisJbWVtc2V0KG1xZCwgMCwgc2l6ZW9mKHN0cnVjdCB2aV9t cWQpKTsKKwogCW1xZC0+aGVhZGVyID0gMHhDMDMxMDgwMDsKIAltcWQtPmNvbXB1dGVfcGlwZWxp bmVzdGF0X2VuYWJsZSA9IDB4MDAwMDAwMDE7CiAJbXFkLT5jb21wdXRlX3N0YXRpY190aHJlYWRf bWdtdF9zZTAgPSAweGZmZmZmZmZmOwogCW1xZC0+Y29tcHV0ZV9zdGF0aWNfdGhyZWFkX21nbXRf c2UxID0gMHhmZmZmZmZmZjsKIAltcWQtPmNvbXB1dGVfc3RhdGljX3RocmVhZF9tZ210X3NlMiA9 IDB4ZmZmZmZmZmY7CiAJbXFkLT5jb21wdXRlX3N0YXRpY190aHJlYWRfbWdtdF9zZTMgPSAweGZm ZmZmZmZmOwogCW1xZC0+Y29tcHV0ZV9taXNjX3Jlc2VydmVkID0gMHgwMDAwMDAwMzsKIAogCWVv cF9iYXNlX2FkZHIgPSByaW5nLT5lb3BfZ3B1X2FkZHIgPj4gODsKIAltcWQtPmNwX2hxZF9lb3Bf YmFzZV9hZGRyX2xvID0gZW9wX2Jhc2VfYWRkcjsKIAltcWQtPmNwX2hxZF9lb3BfYmFzZV9hZGRy X2hpID0gdXBwZXJfMzJfYml0cyhlb3BfYmFzZV9hZGRyKTsKIAogCS8qIHNldCB0aGUgRU9QIHNp emUsIHJlZ2lzdGVyIHZhbHVlIGlzIDJeKEVPUF9TSVpFKzEpIGR3b3JkcyAqLwogCXRtcCA9IFJS RUczMihtbUNQX0hRRF9FT1BfQ09OVFJPTCk7CiAJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQ X0hRRF9FT1BfQ09OVFJPTCwgRU9QX1NJWkUsCiAJCQkob3JkZXJfYmFzZV8yKEdGWDhfTUVDX0hQ RF9TSVpFIC8gNCkgLSAxKSk7CiAKIAltcWQtPmNwX2hxZF9lb3BfY29udHJvbCA9IHRtcDsKIAog CS8qIGVuYWJsZSBkb29yYmVsbD8gKi8KIAl0bXAgPSBSRUdfU0VUX0ZJRUxEKFJSRUczMihtbUNQ X0hRRF9QUV9ET09SQkVMTF9DT05UUk9MKSwKIAkJCSAgICBDUF9IUURfUFFfRE9PUkJFTExfQ09O VFJPTCwKIAkJCSAgICBET09SQkVMTF9FTiwKIAkJCSAgICByaW5nLT51c2VfZG9vcmJlbGwgPyAx IDogMCk7CiAKIAltcWQtPmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sID0gdG1wOwogCi0JLyog ZGlzYWJsZSB0aGUgcXVldWUgaWYgaXQncyBhY3RpdmUgKi8KLQltcWQtPmNwX2hxZF9kZXF1ZXVl X3JlcXVlc3QgPSAwOwotCW1xZC0+Y3BfaHFkX3BxX3JwdHIgPSAwOwotCW1xZC0+Y3BfaHFkX3Bx X3dwdHIgPSAwOwotCiAJLyogc2V0IHRoZSBwb2ludGVyIHRvIHRoZSBNUUQgKi8KIAltcWQtPmNw X21xZF9iYXNlX2FkZHJfbG8gPSByaW5nLT5tcWRfZ3B1X2FkZHIgJiAweGZmZmZmZmZjOwogCW1x ZC0+Y3BfbXFkX2Jhc2VfYWRkcl9oaSA9IHVwcGVyXzMyX2JpdHMocmluZy0+bXFkX2dwdV9hZGRy KTsKIAogCS8qIHNldCBNUUQgdm1pZCB0byAwICovCiAJdG1wID0gUlJFRzMyKG1tQ1BfTVFEX0NP TlRST0wpOwogCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBDUF9NUURfQ09OVFJPTCwgVk1JRCwg MCk7CiAJbXFkLT5jcF9tcWRfY29udHJvbCA9IHRtcDsKIAogCS8qIHNldCB0aGUgcG9pbnRlciB0 byB0aGUgSFFELCB0aGlzIGlzIHNpbWlsYXIgQ1BfUkIwX0JBU0UvX0hJICovCiAJaHFkX2dwdV9h ZGRyID0gcmluZy0+Z3B1X2FkZHIgPj4gODsKIAltcWQtPmNwX2hxZF9wcV9iYXNlX2xvID0gaHFk X2dwdV9hZGRyOwogCW1xZC0+Y3BfaHFkX3BxX2Jhc2VfaGkgPSB1cHBlcl8zMl9iaXRzKGhxZF9n cHVfYWRkcik7CiAKIAkvKiBzZXQgdXAgdGhlIEhRRCwgdGhpcyBpcyBzaW1pbGFyIHRvIENQX1JC MF9DTlRMICovCiAJdG1wID0gUlJFRzMyKG1tQ1BfSFFEX1BRX0NPTlRST0wpOwogCXRtcCA9IFJF R19TRVRfRklFTEQodG1wLCBDUF9IUURfUFFfQ09OVFJPTCwgUVVFVUVfU0laRSwKIAkJCSAgICAo b3JkZXJfYmFzZV8yKHJpbmctPnJpbmdfc2l6ZSAvIDQpIC0gMSkpOwogCXRtcCA9IFJFR19TRVRf RklFTEQodG1wLCBDUF9IUURfUFFfQ09OVFJPTCwgUlBUUl9CTE9DS19TSVpFLAogCQkJKChvcmRl cl9iYXNlXzIoQU1ER1BVX0dQVV9QQUdFX1NJWkUgLyA0KSAtIDEpIDw8IDgpKTsKQEAgLTQ4NjMs MTU3ICs0ODgyLDE0OSBAQCBzdGF0aWMgaW50IGdmeF92OF8wX21xZF9pbml0KHN0cnVjdCBhbWRn cHVfcmluZyAqcmluZykKIAkvKiBzZXQgTVRZUEUgKi8KIAl0bXAgPSBSUkVHMzIobW1DUF9IUURf SUJfQ09OVFJPTCk7CiAJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9JQl9DT05UUk9M LCBNSU5fSUJfQVZBSUxfU0laRSwgMyk7CiAJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hR RF9JQl9DT05UUk9MLCBNVFlQRSwgMyk7CiAJbXFkLT5jcF9ocWRfaWJfY29udHJvbCA9IHRtcDsK IAogCXRtcCA9IFJSRUczMihtbUNQX0hRRF9JUV9USU1FUik7CiAJdG1wID0gUkVHX1NFVF9GSUVM RCh0bXAsIENQX0hRRF9JUV9USU1FUiwgTVRZUEUsIDMpOwogCW1xZC0+Y3BfaHFkX2lxX3RpbWVy ID0gdG1wOwogCiAJdG1wID0gUlJFRzMyKG1tQ1BfSFFEX0NUWF9TQVZFX0NPTlRST0wpOwogCXRt cCA9IFJFR19TRVRfRklFTEQodG1wLCBDUF9IUURfQ1RYX1NBVkVfQ09OVFJPTCwgTVRZUEUsIDMp OwogCW1xZC0+Y3BfaHFkX2N0eF9zYXZlX2NvbnRyb2wgPSB0bXA7CiAKIAkvKiBhY3RpdmF0ZSB0 aGUgcXVldWUgKi8KIAltcWQtPmNwX2hxZF9hY3RpdmUgPSAxOwogCiAJcmV0dXJuIDA7CiB9CiAK LXN0YXRpYyBpbnQgZ2Z4X3Y4XzBfa2lxX2luaXRfcmVnaXN0ZXIoc3RydWN0IGFtZGdwdV9yaW5n ICpyaW5nKQorc3RhdGljIGludCBnZnhfdjhfMF9tcWRfY29tbWl0KHN0cnVjdCBhbWRncHVfcmlu ZyAqcmluZykKIHsKIAlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7CiAJ c3RydWN0IHZpX21xZCAqbXFkID0gcmluZy0+bXFkX3B0cjsKLQlpbnQgajsKIAogCS8qIGRpc2Fi bGUgd3B0ciBwb2xsaW5nICovCiAJV1JFRzMyX0ZJRUxEKENQX1BRX1dQVFJfUE9MTF9DTlRMLCBF TiwgMCk7CiAKIAlXUkVHMzIobW1DUF9IUURfRU9QX0JBU0VfQUREUiwgbXFkLT5jcF9ocWRfZW9w X2Jhc2VfYWRkcl9sbyk7CiAJV1JFRzMyKG1tQ1BfSFFEX0VPUF9CQVNFX0FERFJfSEksIG1xZC0+ Y3BfaHFkX2VvcF9iYXNlX2FkZHJfaGkpOwogCiAJLyogc2V0IHRoZSBFT1Agc2l6ZSwgcmVnaXN0 ZXIgdmFsdWUgaXMgMl4oRU9QX1NJWkUrMSkgZHdvcmRzICovCiAJV1JFRzMyKG1tQ1BfSFFEX0VP UF9DT05UUk9MLCBtcWQtPmNwX2hxZF9lb3BfY29udHJvbCk7CiAKIAkvKiBlbmFibGUgZG9vcmJl bGw/ICovCiAJV1JFRzMyKG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wsIG1xZC0+Y3BfaHFk X3BxX2Rvb3JiZWxsX2NvbnRyb2wpOwogCi0JLyogZGlzYWJsZSB0aGUgcXVldWUgaWYgaXQncyBh Y3RpdmUgKi8KLQlpZiAoUlJFRzMyKG1tQ1BfSFFEX0FDVElWRSkgJiBDUF9IUURfQUNUSVZFX19B Q1RJVkVfTUFTSykgewotCQlXUkVHMzIobW1DUF9IUURfREVRVUVVRV9SRVFVRVNULCAxKTsKLQkJ Zm9yIChqID0gMDsgaiA8IGFkZXYtPnVzZWNfdGltZW91dDsgaisrKSB7Ci0JCQlpZiAoIShSUkVH MzIobW1DUF9IUURfQUNUSVZFKSAmIENQX0hRRF9BQ1RJVkVfX0FDVElWRV9NQVNLKSkKLQkJCQli cmVhazsKLQkJCXVkZWxheSgxKTsKLQkJfQotCQlXUkVHMzIobW1DUF9IUURfREVRVUVVRV9SRVFV RVNULCBtcWQtPmNwX2hxZF9kZXF1ZXVlX3JlcXVlc3QpOwotCQlXUkVHMzIobW1DUF9IUURfUFFf UlBUUiwgbXFkLT5jcF9ocWRfcHFfcnB0cik7Ci0JCVdSRUczMihtbUNQX0hRRF9QUV9XUFRSLCBt cWQtPmNwX2hxZF9wcV93cHRyKTsKLQl9CisJLyogc2V0IHBxIHJlYWQvd3JpdGUgcG9pbnRlcnMg Ki8KKwlXUkVHMzIobW1DUF9IUURfREVRVUVVRV9SRVFVRVNULCBtcWQtPmNwX2hxZF9kZXF1ZXVl X3JlcXVlc3QpOworCVdSRUczMihtbUNQX0hRRF9QUV9SUFRSLCBtcWQtPmNwX2hxZF9wcV9ycHRy KTsKKwlXUkVHMzIobW1DUF9IUURfUFFfV1BUUiwgbXFkLT5jcF9ocWRfcHFfd3B0cik7CiAKIAkv KiBzZXQgdGhlIHBvaW50ZXIgdG8gdGhlIE1RRCAqLwogCVdSRUczMihtbUNQX01RRF9CQVNFX0FE RFIsIG1xZC0+Y3BfbXFkX2Jhc2VfYWRkcl9sbyk7CiAJV1JFRzMyKG1tQ1BfTVFEX0JBU0VfQURE Ul9ISSwgbXFkLT5jcF9tcWRfYmFzZV9hZGRyX2hpKTsKIAogCS8qIHNldCBNUUQgdm1pZCB0byAw ICovCiAJV1JFRzMyKG1tQ1BfTVFEX0NPTlRST0wsIG1xZC0+Y3BfbXFkX2NvbnRyb2wpOwogCiAJ Lyogc2V0IHRoZSBwb2ludGVyIHRvIHRoZSBIUUQsIHRoaXMgaXMgc2ltaWxhciBDUF9SQjBfQkFT RS9fSEkgKi8KIAlXUkVHMzIobW1DUF9IUURfUFFfQkFTRSwgbXFkLT5jcF9ocWRfcHFfYmFzZV9s byk7CiAJV1JFRzMyKG1tQ1BfSFFEX1BRX0JBU0VfSEksIG1xZC0+Y3BfaHFkX3BxX2Jhc2VfaGkp OwogCiAJLyogc2V0IHVwIHRoZSBIUUQsIHRoaXMgaXMgc2ltaWxhciB0byBDUF9SQjBfQ05UTCAq LwogCVdSRUczMihtbUNQX0hRRF9QUV9DT05UUk9MLCBtcWQtPmNwX2hxZF9wcV9jb250cm9sKTsK IAogCS8qIHNldCB0aGUgd2IgYWRkcmVzcyB3aGV0aGVyIGl0J3MgZW5hYmxlZCBvciBub3QgKi8K IAlXUkVHMzIobW1DUF9IUURfUFFfUlBUUl9SRVBPUlRfQUREUiwKIAkJCQltcWQtPmNwX2hxZF9w cV9ycHRyX3JlcG9ydF9hZGRyX2xvKTsKIAlXUkVHMzIobW1DUF9IUURfUFFfUlBUUl9SRVBPUlRf QUREUl9ISSwKIAkJCQltcWQtPmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyX2hpKTsKIAogCS8q IG9ubHkgdXNlZCBpZiBDUF9QUV9XUFRSX1BPTExfQ05UTC5DUF9QUV9XUFRSX1BPTExfQ05UTF9f RU5fTUFTSz0xICovCiAJV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFJfUE9MTF9BRERSLCBtcWQtPmNw X2hxZF9wcV93cHRyX3BvbGxfYWRkcl9sbyk7CiAJV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFJfUE9M TF9BRERSX0hJLCBtcWQtPmNwX2hxZF9wcV93cHRyX3BvbGxfYWRkcl9oaSk7CiAKKwkvKiBlbmFi bGUgdGhlIGRvb3JiZWxsIGlmIHJlcXVlc3RlZCAqLwogCVdSRUczMihtbUNQX0hRRF9QUV9ET09S QkVMTF9DT05UUk9MLCBtcWQtPmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sKTsKIAogCS8qIHJl c2V0IHJlYWQgYW5kIHdyaXRlIHBvaW50ZXJzLCBzaW1pbGFyIHRvIENQX1JCMF9XUFRSL19SUFRS ICovCiAJV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFIsIG1xZC0+Y3BfaHFkX3BxX3dwdHIpOwogCiAJ Lyogc2V0IHRoZSB2bWlkIGZvciB0aGUgcXVldWUgKi8KIAlXUkVHMzIobW1DUF9IUURfVk1JRCwg bXFkLT5jcF9ocWRfdm1pZCk7CiAKIAlXUkVHMzIobW1DUF9IUURfUEVSU0lTVEVOVF9TVEFURSwg bXFkLT5jcF9ocWRfcGVyc2lzdGVudF9zdGF0ZSk7CiAKIAkvKiBhY3RpdmF0ZSB0aGUgcXVldWUg Ki8KIAlXUkVHMzIobW1DUF9IUURfQUNUSVZFLCBtcWQtPmNwX2hxZF9hY3RpdmUpOwogCiAJcmV0 dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZ2Z4X3Y4XzBfa2lxX2luaXRfcXVldWUoc3RydWN0IGFt ZGdwdV9yaW5nICpyaW5nKQogewogCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+ YWRldjsKIAlzdHJ1Y3QgdmlfbXFkICptcWQgPSByaW5nLT5tcWRfcHRyOwogCWludCBtcWRfaWR4 ID0gQU1ER1BVX01BWF9DT01QVVRFX1JJTkdTOwogCiAJZ2Z4X3Y4XzBfa2lxX3NldHRpbmcocmlu Zyk7CiAKIAlpZiAoYWRldi0+Z2Z4LmluX3Jlc2V0KSB7IC8qIGZvciBHUFVfUkVTRVQgY2FzZSAq LwogCQkvKiByZXNldCBNUUQgdG8gYSBjbGVhbiBzdGF0dXMgKi8KIAkJaWYgKGFkZXYtPmdmeC5t ZWMubXFkX2JhY2t1cFttcWRfaWR4XSkKIAkJCW1lbWNweShtcWQsIGFkZXYtPmdmeC5tZWMubXFk X2JhY2t1cFttcWRfaWR4XSwgc2l6ZW9mKCptcWQpKTsKIAogCQkvKiByZXNldCByaW5nIGJ1ZmZl ciAqLwogCQlyaW5nLT53cHRyID0gMDsKIAkJYW1kZ3B1X3JpbmdfY2xlYXJfcmluZyhyaW5nKTsK IAogCQltdXRleF9sb2NrKCZhZGV2LT5zcmJtX211dGV4KTsKIAkJdmlfc3JibV9zZWxlY3QoYWRl diwgcmluZy0+bWUsIHJpbmctPnBpcGUsIHJpbmctPnF1ZXVlLCAwKTsKLQkJZ2Z4X3Y4XzBfa2lx X2luaXRfcmVnaXN0ZXIocmluZyk7CisJCWdmeF92OF8wX2RlYWN0aXZhdGVfaHFkKGFkZXYsIDEp OworCQlnZnhfdjhfMF9tcWRfY29tbWl0KHJpbmcpOwogCQl2aV9zcmJtX3NlbGVjdChhZGV2LCAw LCAwLCAwLCAwKTsKIAkJbXV0ZXhfdW5sb2NrKCZhZGV2LT5zcmJtX211dGV4KTsKIAl9IGVsc2Ug ewotCQltZW1zZXQoKHZvaWQgKiltcWQsIDAsIHNpemVvZigqbXFkKSk7CiAJCW11dGV4X2xvY2so JmFkZXYtPnNyYm1fbXV0ZXgpOwogCQl2aV9zcmJtX3NlbGVjdChhZGV2LCByaW5nLT5tZSwgcmlu Zy0+cGlwZSwgcmluZy0+cXVldWUsIDApOwogCQlnZnhfdjhfMF9tcWRfaW5pdChyaW5nKTsKLQkJ Z2Z4X3Y4XzBfa2lxX2luaXRfcmVnaXN0ZXIocmluZyk7CisJCWdmeF92OF8wX2RlYWN0aXZhdGVf aHFkKGFkZXYsIDEpOworCQlnZnhfdjhfMF9tcWRfY29tbWl0KHJpbmcpOwogCQl2aV9zcmJtX3Nl bGVjdChhZGV2LCAwLCAwLCAwLCAwKTsKIAkJbXV0ZXhfdW5sb2NrKCZhZGV2LT5zcmJtX211dGV4 KTsKIAogCQlpZiAoYWRldi0+Z2Z4Lm1lYy5tcWRfYmFja3VwW21xZF9pZHhdKQogCQkJbWVtY3B5 KGFkZXYtPmdmeC5tZWMubXFkX2JhY2t1cFttcWRfaWR4XSwgbXFkLCBzaXplb2YoKm1xZCkpOwog CX0KIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGdmeF92OF8wX2tjcV9pbml0X3F1ZXVl KHN0cnVjdCBhbWRncHVfcmluZyAqcmluZykKIHsKIAlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diA9IHJpbmctPmFkZXY7CiAJc3RydWN0IHZpX21xZCAqbXFkID0gcmluZy0+bXFkX3B0cjsKIAlp bnQgbXFkX2lkeCA9IHJpbmcgLSAmYWRldi0+Z2Z4LmNvbXB1dGVfcmluZ1swXTsKIAogCWlmICgh YWRldi0+Z2Z4LmluX3Jlc2V0ICYmICFhZGV2LT5nZnguaW5fc3VzcGVuZCkgewotCQltZW1zZXQo KHZvaWQgKiltcWQsIDAsIHNpemVvZigqbXFkKSk7CiAJCW11dGV4X2xvY2soJmFkZXYtPnNyYm1f bXV0ZXgpOwogCQl2aV9zcmJtX3NlbGVjdChhZGV2LCByaW5nLT5tZSwgcmluZy0+cGlwZSwgcmlu Zy0+cXVldWUsIDApOwogCQlnZnhfdjhfMF9tcWRfaW5pdChyaW5nKTsKIAkJdmlfc3JibV9zZWxl Y3QoYWRldiwgMCwgMCwgMCwgMCk7CiAJCW11dGV4X3VubG9jaygmYWRldi0+c3JibV9tdXRleCk7 CiAKIAkJaWYgKGFkZXYtPmdmeC5tZWMubXFkX2JhY2t1cFttcWRfaWR4XSkKIAkJCW1lbWNweShh ZGV2LT5nZngubWVjLm1xZF9iYWNrdXBbbXFkX2lkeF0sIG1xZCwgc2l6ZW9mKCptcWQpKTsKIAl9 IGVsc2UgaWYgKGFkZXYtPmdmeC5pbl9yZXNldCkgeyAvKiBmb3IgR1BVX1JFU0VUIGNhc2UgKi8K IAkJLyogcmVzZXQgTVFEIHRvIGEgY2xlYW4gc3RhdHVzICovCiAJCWlmIChhZGV2LT5nZngubWVj Lm1xZF9iYWNrdXBbbXFkX2lkeF0pCiAJCQltZW1jcHkobXFkLCBhZGV2LT5nZngubWVjLm1xZF9i YWNrdXBbbXFkX2lkeF0sIHNpemVvZigqbXFkKSk7CiAKIAkJLyogcmVzZXQgcmluZyBidWZmZXIg Ki8KIAkJcmluZy0+d3B0ciA9IDA7CiAJCWFtZGdwdV9yaW5nX2NsZWFyX3JpbmcocmluZyk7CiAJ fQogCiAJcmV0dXJuIDA7CiB9CkBAIC01Mjg0LDYxICs1Mjk1LDQwIEBAIHN0YXRpYyBib29sIGdm eF92OF8wX2NoZWNrX3NvZnRfcmVzZXQodm9pZCAqaGFuZGxlKQogCS8qIFNSQk1fU1RBVFVTICov CiAJdG1wID0gUlJFRzMyKG1tU1JCTV9TVEFUVVMpOwogCWlmIChSRUdfR0VUX0ZJRUxEKHRtcCwg U1JCTV9TVEFUVVMsIEdSQk1fUlFfUEVORElORykpCiAJCXNyYm1fc29mdF9yZXNldCA9IFJFR19T RVRfRklFTEQoc3JibV9zb2Z0X3Jlc2V0LAogCQkJCQkJU1JCTV9TT0ZUX1JFU0VULCBTT0ZUX1JF U0VUX0dSQk0sIDEpOwogCWlmIChSRUdfR0VUX0ZJRUxEKHRtcCwgU1JCTV9TVEFUVVMsIFNFTV9C VVNZKSkKIAkJc3JibV9zb2Z0X3Jlc2V0ID0gUkVHX1NFVF9GSUVMRChzcmJtX3NvZnRfcmVzZXQs CiAJCQkJCQlTUkJNX1NPRlRfUkVTRVQsIFNPRlRfUkVTRVRfU0VNLCAxKTsKIAogCWlmIChncmJt X3NvZnRfcmVzZXQgfHwgc3JibV9zb2Z0X3Jlc2V0KSB7CiAJCWFkZXYtPmdmeC5ncmJtX3NvZnRf cmVzZXQgPSBncmJtX3NvZnRfcmVzZXQ7CiAJCWFkZXYtPmdmeC5zcmJtX3NvZnRfcmVzZXQgPSBz cmJtX3NvZnRfcmVzZXQ7CiAJCXJldHVybiB0cnVlOwogCX0gZWxzZSB7CiAJCWFkZXYtPmdmeC5n cmJtX3NvZnRfcmVzZXQgPSAwOwogCQlhZGV2LT5nZnguc3JibV9zb2Z0X3Jlc2V0ID0gMDsKIAkJ cmV0dXJuIGZhbHNlOwogCX0KIH0KIAotc3RhdGljIGludCBnZnhfdjhfMF9kZWFjdGl2YXRlX2hx ZChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdTMyIHJlcSkKLXsKLQlpbnQgaSwgciA9IDA7 Ci0KLQlpZiAoUlJFRzMyKG1tQ1BfSFFEX0FDVElWRSkgJiBDUF9IUURfQUNUSVZFX19BQ1RJVkVf TUFTSykgewotCQlXUkVHMzJfRklFTEQoQ1BfSFFEX0RFUVVFVUVfUkVRVUVTVCwgREVRVUVVRV9S RVEsIHJlcSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewot CQkJaWYgKCEoUlJFRzMyKG1tQ1BfSFFEX0FDVElWRSkgJiBDUF9IUURfQUNUSVZFX19BQ1RJVkVf TUFTSykpCi0JCQkJYnJlYWs7Ci0JCQl1ZGVsYXkoMSk7Ci0JCX0KLQkJaWYgKGkgPT0gYWRldi0+ dXNlY190aW1lb3V0KQotCQkJciA9IC1FVElNRURPVVQ7Ci0JfQotCVdSRUczMihtbUNQX0hRRF9E RVFVRVVFX1JFUVVFU1QsIDApOwotCVdSRUczMihtbUNQX0hRRF9QUV9SUFRSLCAwKTsKLQlXUkVH MzIobW1DUF9IUURfUFFfV1BUUiwgMCk7Ci0KLQlyZXR1cm4gcjsKLX0KLQogc3RhdGljIGludCBn ZnhfdjhfMF9wcmVfc29mdF9yZXNldCh2b2lkICpoYW5kbGUpCiB7CiAJc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CiAJdTMyIGdyYm1f c29mdF9yZXNldCA9IDAsIHNyYm1fc29mdF9yZXNldCA9IDA7CiAKIAlpZiAoKCFhZGV2LT5nZngu Z3JibV9zb2Z0X3Jlc2V0KSAmJgogCSAgICAoIWFkZXYtPmdmeC5zcmJtX3NvZnRfcmVzZXQpKQog CQlyZXR1cm4gMDsKIAogCWdyYm1fc29mdF9yZXNldCA9IGFkZXYtPmdmeC5ncmJtX3NvZnRfcmVz ZXQ7CiAJc3JibV9zb2Z0X3Jlc2V0ID0gYWRldi0+Z2Z4LnNyYm1fc29mdF9yZXNldDsKIAogCS8q IHN0b3AgdGhlIHJsYyAqLwogCWdmeF92OF8wX3JsY19zdG9wKGFkZXYpOwogCiAJaWYgKFJFR19H RVRfRklFTEQoZ3JibV9zb2Z0X3Jlc2V0LCBHUkJNX1NPRlRfUkVTRVQsIFNPRlRfUkVTRVRfQ1Ap IHx8CiAJICAgIFJFR19HRVRfRklFTEQoZ3JibV9zb2Z0X3Jlc2V0LCBHUkJNX1NPRlRfUkVTRVQs IFNPRlRfUkVTRVRfR0ZYKSkKIAkJLyogRGlzYWJsZSBHRlggcGFyc2luZy9wcmVmZXRjaGluZyAq LwogCQlnZnhfdjhfMF9jcF9nZnhfZW5hYmxlKGFkZXYsIGZhbHNlKTsKIAotLSAKMi45LjMKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFp bGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=