From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andres Rodriguez Subject: [PATCH 01/13] drm/amdgpu: refactor MQD/HQD initialization Date: Fri, 3 Feb 2017 23:51:30 -0500 Message-ID: <20170204045142.5596-2-andresx7@gmail.com> References: <20170204045142.5596-1-andresx7@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170204045142.5596-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: Alexander.Deucher-5C7GfCeVMHo@public.gmane.org, jay-gJmSnxjMpeIFV7jr3Ov9Ew@public.gmane.org, Felix.Kuehling-5C7GfCeVMHo@public.gmane.org, Andres Rodriguez , John.Bridgman-5C7GfCeVMHo@public.gmane.org VGhlIE1RRCBwcm9ncmFtbWluZyBzZXF1ZW5jZSBjdXJyZW50bHkgZXhpc3RzIGluIDMgZGlmZmVy ZW50IHBsYWNlcy4KUmVmYWN0b3IgaXQgdG8gYWJzb3JiIGFsbCB0aGUgZHVwbGljYXRlcy4KClRo ZSBzdWNjZXNzIHBhdGggcmVtYWlucyBtb3N0bHkgaWRlbnRpY2FsIGV4Y2VwdCBmb3IgYSBzbGln aHRseQpkaWZmZXJlbnQgb3JkZXIgaW4gdGhlIG5vbi1raXEgY2FzZS4gVGhpcyBzaG91bGRuJ3Qg bWF0dGVyIGlmIHRoZSBIUUQKaXMgZGlzYWJsZWQuCgpUaGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMg aGF2ZSBiZWVuIHVwZGF0ZWQgdG8gZGVhbCB3aXRoIHRoZSBuZXcgY29kZQpzdHJ1Y3R1cmUuCgpT aWduZWQtb2ZmLWJ5OiBBbmRyZXMgUm9kcmlndWV6IDxhbmRyZXN4N0BnbWFpbC5jb20+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y3XzAuYyB8IDQ0NyArKysrKysrKysrKysr KysrKystLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjhf MC5jIHwgNDE3ICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdl ZCwgMzg3IGluc2VydGlvbnMoKyksIDQ3NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjdfMC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvZ2Z4X3Y3XzAuYwppbmRleCBlMzU4OWI1Li4wZDc5MDVlIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjdfMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2dmeF92N18wLmMKQEAgLTQ5LDYgKzQ5LDggQEAKIAogI2RlZmluZSBHRlg3X05V TV9HRlhfUklOR1MgICAgIDEKICNkZWZpbmUgR0ZYN19OVU1fQ09NUFVURV9SSU5HUyA4CisjZGVm aW5lIEdGWDdfTUVDX0hQRF9TSVpFICAgICAgMjA0OAorCiAKIHN0YXRpYyB2b2lkIGdmeF92N18w X3NldF9yaW5nX2Z1bmNzKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KTsKIHN0YXRpYyB2b2lk IGdmeF92N18wX3NldF9pcnFfZnVuY3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwpAQCAt Mjc5MSw4ICsyNzkzLDYgQEAgc3RhdGljIHZvaWQgZ2Z4X3Y3XzBfbWVjX2Zpbmkoc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFkZXYpCiAJfQogfQogCi0jZGVmaW5lIE1FQ19IUERfU0laRSAyMDQ4Ci0K IHN0YXRpYyBpbnQgZ2Z4X3Y3XzBfbWVjX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYp CiB7CiAJaW50IHI7CkBAIC0yODEwLDcgKzI4MTAsNyBAQCBzdGF0aWMgaW50IGdmeF92N18wX21l Y19pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCiAJaWYgKGFkZXYtPmdmeC5tZWMu aHBkX2VvcF9vYmogPT0gTlVMTCkgewogCQlyID0gYW1kZ3B1X2JvX2NyZWF0ZShhZGV2LAotCQkJ CSAgICAgYWRldi0+Z2Z4Lm1lYy5udW1fbWVjICphZGV2LT5nZngubWVjLm51bV9waXBlICogTUVD X0hQRF9TSVpFICogMiwKKwkJCQkgICAgIGFkZXYtPmdmeC5tZWMubnVtX21lYyAqIGFkZXYtPmdm eC5tZWMubnVtX3BpcGUgKiBHRlg3X01FQ19IUERfU0laRSAqIDIsCiAJCQkJICAgICBQQUdFX1NJ WkUsIHRydWUsCiAJCQkJICAgICBBTURHUFVfR0VNX0RPTUFJTl9HVFQsIDAsIE5VTEwsIE5VTEws CiAJCQkJICAgICAmYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaik7CkBAIC0yODQwLDcgKzI4NDAs NyBAQCBzdGF0aWMgaW50IGdmeF92N18wX21lY19pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2KQogCX0KIAogCS8qIGNsZWFyIG1lbW9yeS4gIE5vdCBzdXJlIGlmIHRoaXMgaXMgcmVxdWly ZWQgb3Igbm90ICovCi0JbWVtc2V0KGhwZCwgMCwgYWRldi0+Z2Z4Lm1lYy5udW1fbWVjICphZGV2 LT5nZngubWVjLm51bV9waXBlICogTUVDX0hQRF9TSVpFICogMik7CisJbWVtc2V0KGhwZCwgMCwg YWRldi0+Z2Z4Lm1lYy5udW1fbWVjICogYWRldi0+Z2Z4Lm1lYy5udW1fcGlwZSAqIEdGWDdfTUVD X0hQRF9TSVpFICogMik7CiAKIAlhbWRncHVfYm9fa3VubWFwKGFkZXYtPmdmeC5tZWMuaHBkX2Vv cF9vYmopOwogCWFtZGdwdV9ib191bnJlc2VydmUoYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaik7 CkBAIC0yOTE1LDI0NyArMjkxNSwyODIgQEAgc3RydWN0IGJvbmFpcmVfbXFkCiAJdTMyIGludGVy cnVwdF9xdWV1ZVs2NF07CiB9OwogCi0vKioKLSAqIGdmeF92N18wX2NwX2NvbXB1dGVfcmVzdW1l IC0gc2V0dXAgdGhlIGNvbXB1dGUgcXVldWUgcmVnaXN0ZXJzCi0gKgotICogQGFkZXY6IGFtZGdw dV9kZXZpY2UgcG9pbnRlcgotICoKLSAqIFByb2dyYW0gdGhlIGNvbXB1dGUgcXVldWVzIGFuZCB0 ZXN0IHRoZW0gdG8gbWFrZSBzdXJlIHRoZXkKLSAqIGFyZSB3b3JraW5nLgotICogUmV0dXJucyAw IGZvciBzdWNjZXNzLCBlcnJvciBmb3IgZmFpbHVyZS4KLSAqLwotc3RhdGljIGludCBnZnhfdjdf MF9jcF9jb21wdXRlX3Jlc3VtZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3N0YXRpYyB2 b2lkIGdmeF92N18wX2NvbXB1dGVfcGlwZV9pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LCBpbnQgbWUsIGludCBwaXBlKQogewotCWludCByLCBpLCBqOwotCXUzMiB0bXA7Ci0JYm9vbCB1 c2VfZG9vcmJlbGwgPSB0cnVlOwotCXU2NCBocWRfZ3B1X2FkZHI7Ci0JdTY0IG1xZF9ncHVfYWRk cjsKIAl1NjQgZW9wX2dwdV9hZGRyOwotCXU2NCB3Yl9ncHVfYWRkcjsKLQl1MzIgKmJ1ZjsKLQlz dHJ1Y3QgYm9uYWlyZV9tcWQgKm1xZDsKLQlzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmc7Ci0KLQkv KiBmaXggdXAgY2hpY2tlbiBiaXRzICovCi0JdG1wID0gUlJFRzMyKG1tQ1BfQ1BGX0RFQlVHKTsK LQl0bXAgfD0gKDEgPDwgMjMpOwotCVdSRUczMihtbUNQX0NQRl9ERUJVRywgdG1wKTsKKwl1MzIg dG1wOworCXNpemVfdCBlb3Bfb2Zmc2V0ID0gbWUgKiBwaXBlICogR0ZYN19NRUNfSFBEX1NJWkUg KiAyOwogCi0JLyogaW5pdCB0aGUgcGlwZXMgKi8KIAltdXRleF9sb2NrKCZhZGV2LT5zcmJtX211 dGV4KTsKLQlmb3IgKGkgPSAwOyBpIDwgKGFkZXYtPmdmeC5tZWMubnVtX3BpcGUgKiBhZGV2LT5n ZngubWVjLm51bV9tZWMpOyBpKyspIHsKLQkJaW50IG1lID0gKGkgPCA0KSA/IDEgOiAyOwotCQlp bnQgcGlwZSA9IChpIDwgNCkgPyBpIDogKGkgLSA0KTsKKwllb3BfZ3B1X2FkZHIgPSBhZGV2LT5n ZngubWVjLmhwZF9lb3BfZ3B1X2FkZHIgKyBlb3Bfb2Zmc2V0OwogCi0JCWVvcF9ncHVfYWRkciA9 IGFkZXYtPmdmeC5tZWMuaHBkX2VvcF9ncHVfYWRkciArIChpICogTUVDX0hQRF9TSVpFICogMik7 CisJY2lrX3NyYm1fc2VsZWN0KGFkZXYsIG1lLCBwaXBlLCAwLCAwKTsKIAotCQljaWtfc3JibV9z ZWxlY3QoYWRldiwgbWUsIHBpcGUsIDAsIDApOworCS8qIHdyaXRlIHRoZSBFT1AgYWRkciAqLwor CVdSRUczMihtbUNQX0hQRF9FT1BfQkFTRV9BRERSLCBlb3BfZ3B1X2FkZHIgPj4gOCk7CisJV1JF RzMyKG1tQ1BfSFBEX0VPUF9CQVNFX0FERFJfSEksIHVwcGVyXzMyX2JpdHMoZW9wX2dwdV9hZGRy KSA+PiA4KTsKIAotCQkvKiB3cml0ZSB0aGUgRU9QIGFkZHIgKi8KLQkJV1JFRzMyKG1tQ1BfSFBE X0VPUF9CQVNFX0FERFIsIGVvcF9ncHVfYWRkciA+PiA4KTsKLQkJV1JFRzMyKG1tQ1BfSFBEX0VP UF9CQVNFX0FERFJfSEksIHVwcGVyXzMyX2JpdHMoZW9wX2dwdV9hZGRyKSA+PiA4KTsKKwkvKiBz ZXQgdGhlIFZNSUQgYXNzaWduZWQgKi8KKwlXUkVHMzIobW1DUF9IUERfRU9QX1ZNSUQsIDApOwog Ci0JCS8qIHNldCB0aGUgVk1JRCBhc3NpZ25lZCAqLwotCQlXUkVHMzIobW1DUF9IUERfRU9QX1ZN SUQsIDApOworCS8qIHNldCB0aGUgRU9QIHNpemUsIHJlZ2lzdGVyIHZhbHVlIGlzIDJeKEVPUF9T SVpFKzEpIGR3b3JkcyAqLworCXRtcCA9IFJSRUczMihtbUNQX0hQRF9FT1BfQ09OVFJPTCk7CisJ dG1wICY9IH5DUF9IUERfRU9QX0NPTlRST0xfX0VPUF9TSVpFX01BU0s7CisJdG1wIHw9IG9yZGVy X2Jhc2VfMihHRlg3X01FQ19IUERfU0laRSAvIDgpOworCVdSRUczMihtbUNQX0hQRF9FT1BfQ09O VFJPTCwgdG1wKTsKIAotCQkvKiBzZXQgdGhlIEVPUCBzaXplLCByZWdpc3RlciB2YWx1ZSBpcyAy XihFT1BfU0laRSsxKSBkd29yZHMgKi8KLQkJdG1wID0gUlJFRzMyKG1tQ1BfSFBEX0VPUF9DT05U Uk9MKTsKLQkJdG1wICY9IH5DUF9IUERfRU9QX0NPTlRST0xfX0VPUF9TSVpFX01BU0s7Ci0JCXRt cCB8PSBvcmRlcl9iYXNlXzIoTUVDX0hQRF9TSVpFIC8gOCk7Ci0JCVdSRUczMihtbUNQX0hQRF9F T1BfQ09OVFJPTCwgdG1wKTsKLQl9CiAJY2lrX3NyYm1fc2VsZWN0KGFkZXYsIDAsIDAsIDAsIDAp OwogCW11dGV4X3VubG9jaygmYWRldi0+c3JibV9tdXRleCk7Cit9CiAKLQkvKiBpbml0IHRoZSBx dWV1ZXMuICBKdXN0IHR3byBmb3Igbm93LiAqLwotCWZvciAoaSA9IDA7IGkgPCBhZGV2LT5nZngu bnVtX2NvbXB1dGVfcmluZ3M7IGkrKykgewotCQlyaW5nID0gJmFkZXYtPmdmeC5jb21wdXRlX3Jp bmdbaV07CitzdGF0aWMgaW50IGdmeF92N18wX21xZF9kZWFjdGl2YXRlKHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2KQoreworCWludCBpOwogCi0JCWlmIChyaW5nLT5tcWRfb2JqID09IE5VTEwp IHsKLQkJCXIgPSBhbWRncHVfYm9fY3JlYXRlKGFkZXYsCi0JCQkJCSAgICAgc2l6ZW9mKHN0cnVj dCBib25haXJlX21xZCksCi0JCQkJCSAgICAgUEFHRV9TSVpFLCB0cnVlLAotCQkJCQkgICAgIEFN REdQVV9HRU1fRE9NQUlOX0dUVCwgMCwgTlVMTCwgTlVMTCwKLQkJCQkJICAgICAmcmluZy0+bXFk X29iaik7Ci0JCQlpZiAocikgewotCQkJCWRldl93YXJuKGFkZXYtPmRldiwgIiglZCkgY3JlYXRl IE1RRCBibyBmYWlsZWRcbiIsIHIpOwotCQkJCXJldHVybiByOwotCQkJfQorCS8qIGRpc2FibGUg dGhlIHF1ZXVlIGlmIGl0J3MgYWN0aXZlICovCisJaWYgKFJSRUczMihtbUNQX0hRRF9BQ1RJVkUp ICYgMSkgeworCQlXUkVHMzIobW1DUF9IUURfREVRVUVVRV9SRVFVRVNULCAxKTsKKwkJZm9yIChp ID0gMDsgaSA8IGFkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCQlpZiAoIShSUkVHMzIobW1D UF9IUURfQUNUSVZFKSAmIDEpKQorCQkJCWJyZWFrOworCQkJdWRlbGF5KDEpOwogCQl9CiAKLQkJ ciA9IGFtZGdwdV9ib19yZXNlcnZlKHJpbmctPm1xZF9vYmosIGZhbHNlKTsKLQkJaWYgKHVubGlr ZWx5KHIgIT0gMCkpIHsKLQkJCWdmeF92N18wX2NwX2NvbXB1dGVfZmluaShhZGV2KTsKLQkJCXJl dHVybiByOwotCQl9Ci0JCXIgPSBhbWRncHVfYm9fcGluKHJpbmctPm1xZF9vYmosIEFNREdQVV9H RU1fRE9NQUlOX0dUVCwKLQkJCQkgICZtcWRfZ3B1X2FkZHIpOwotCQlpZiAocikgewotCQkJZGV2 X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBwaW4gTVFEIGJvIGZhaWxlZFxuIiwgcik7Ci0JCQlnZnhf djdfMF9jcF9jb21wdXRlX2ZpbmkoYWRldik7Ci0JCQlyZXR1cm4gcjsKLQkJfQotCQlyID0gYW1k Z3B1X2JvX2ttYXAocmluZy0+bXFkX29iaiwgKHZvaWQgKiopJmJ1Zik7Ci0JCWlmIChyKSB7Ci0J CQlkZXZfd2FybihhZGV2LT5kZXYsICIoJWQpIG1hcCBNUUQgYm8gZmFpbGVkXG4iLCByKTsKLQkJ CWdmeF92N18wX2NwX2NvbXB1dGVfZmluaShhZGV2KTsKLQkJCXJldHVybiByOwotCQl9CisJCWlm IChpID09IGFkZXYtPnVzZWNfdGltZW91dCkKKwkJCXJldHVybiAtRVRJTUVET1VUOwogCi0JCS8q IGluaXQgdGhlIG1xZCBzdHJ1Y3QgKi8KLQkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKHN0cnVjdCBi b25haXJlX21xZCkpOworCQlXUkVHMzIobW1DUF9IUURfREVRVUVVRV9SRVFVRVNULCAwKTsKKwkJ V1JFRzMyKG1tQ1BfSFFEX1BRX1JQVFIsIDApOworCQlXUkVHMzIobW1DUF9IUURfUFFfV1BUUiwg MCk7CisJfQogCi0JCW1xZCA9IChzdHJ1Y3QgYm9uYWlyZV9tcWQgKilidWY7Ci0JCW1xZC0+aGVh ZGVyID0gMHhDMDMxMDgwMDsKLQkJbXFkLT5zdGF0aWNfdGhyZWFkX21nbXQwMVswXSA9IDB4ZmZm ZmZmZmY7Ci0JCW1xZC0+c3RhdGljX3RocmVhZF9tZ210MDFbMV0gPSAweGZmZmZmZmZmOwotCQlt cWQtPnN0YXRpY190aHJlYWRfbWdtdDIzWzBdID0gMHhmZmZmZmZmZjsKLQkJbXFkLT5zdGF0aWNf dGhyZWFkX21nbXQyM1sxXSA9IDB4ZmZmZmZmZmY7CisJcmV0dXJuIDA7Cit9CiAKLQkJbXV0ZXhf bG9jaygmYWRldi0+c3JibV9tdXRleCk7Ci0JCWNpa19zcmJtX3NlbGVjdChhZGV2LCByaW5nLT5t ZSwKLQkJCQlyaW5nLT5waXBlLAotCQkJCXJpbmctPnF1ZXVlLCAwKTsKK3N0YXRpYyB2b2lkIGdm eF92N18wX21xZF9pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkJICAgICBzdHJ1 Y3QgYm9uYWlyZV9tcWQgKm1xZCwKKwkJCSAgICAgdWludDY0X3QgbXFkX2dwdV9hZGRyLAorCQkJ ICAgICBzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcpCit7CisJdTY0IGhxZF9ncHVfYWRkcjsKKwl1 NjQgd2JfZ3B1X2FkZHI7CiAKLQkJLyogZGlzYWJsZSB3cHRyIHBvbGxpbmcgKi8KLQkJdG1wID0g UlJFRzMyKG1tQ1BfUFFfV1BUUl9QT0xMX0NOVEwpOwotCQl0bXAgJj0gfkNQX1BRX1dQVFJfUE9M TF9DTlRMX19FTl9NQVNLOwotCQlXUkVHMzIobW1DUF9QUV9XUFRSX1BPTExfQ05UTCwgdG1wKTsK KwkvKiBpbml0IHRoZSBtcWQgc3RydWN0ICovCisJbWVtc2V0KG1xZCwgMCwgc2l6ZW9mKHN0cnVj dCBib25haXJlX21xZCkpOwogCi0JCS8qIGVuYWJsZSBkb29yYmVsbD8gKi8KLQkJbXFkLT5xdWV1 ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCA9Ci0JCQlSUkVHMzIobW1DUF9IUURf UFFfRE9PUkJFTExfQ09OVFJPTCk7Ci0JCWlmICh1c2VfZG9vcmJlbGwpCi0JCQltcWQtPnF1ZXVl X3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sIHw9IENQX0hRRF9QUV9ET09SQkVMTF9D T05UUk9MX19ET09SQkVMTF9FTl9NQVNLOwotCQllbHNlCi0JCQltcWQtPnF1ZXVlX3N0YXRlLmNw X2hxZF9wcV9kb29yYmVsbF9jb250cm9sICY9IH5DUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9f RE9PUkJFTExfRU5fTUFTSzsKLQkJV1JFRzMyKG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0ws Ci0JCSAgICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sKTsK LQotCQkvKiBkaXNhYmxlIHRoZSBxdWV1ZSBpZiBpdCdzIGFjdGl2ZSAqLwotCQltcWQtPnF1ZXVl X3N0YXRlLmNwX2hxZF9kZXF1ZXVlX3JlcXVlc3QgPSAwOwotCQltcWQtPnF1ZXVlX3N0YXRlLmNw X2hxZF9wcV9ycHRyID0gMDsKLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0cj0gMDsK LQkJaWYgKFJSRUczMihtbUNQX0hRRF9BQ1RJVkUpICYgMSkgewotCQkJV1JFRzMyKG1tQ1BfSFFE X0RFUVVFVUVfUkVRVUVTVCwgMSk7Ci0JCQlmb3IgKGogPSAwOyBqIDwgYWRldi0+dXNlY190aW1l b3V0OyBqKyspIHsKLQkJCQlpZiAoIShSUkVHMzIobW1DUF9IUURfQUNUSVZFKSAmIDEpKQotCQkJ CQlicmVhazsKLQkJCQl1ZGVsYXkoMSk7Ci0JCQl9Ci0JCQlXUkVHMzIobW1DUF9IUURfREVRVUVV RV9SRVFVRVNULCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9kZXF1ZXVlX3JlcXVlc3QpOwotCQkJ V1JFRzMyKG1tQ1BfSFFEX1BRX1JQVFIsIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3JwdHIp OwotCQkJV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFIsIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3Bx X3dwdHIpOwotCQl9CisJbXFkLT5oZWFkZXIgPSAweEMwMzEwODAwOworCW1xZC0+c3RhdGljX3Ro cmVhZF9tZ210MDFbMF0gPSAweGZmZmZmZmZmOworCW1xZC0+c3RhdGljX3RocmVhZF9tZ210MDFb MV0gPSAweGZmZmZmZmZmOworCW1xZC0+c3RhdGljX3RocmVhZF9tZ210MjNbMF0gPSAweGZmZmZm ZmZmOworCW1xZC0+c3RhdGljX3RocmVhZF9tZ210MjNbMV0gPSAweGZmZmZmZmZmOwogCi0JCS8q IHNldCB0aGUgcG9pbnRlciB0byB0aGUgTVFEICovCi0JCW1xZC0+cXVldWVfc3RhdGUuY3BfbXFk X2Jhc2VfYWRkciA9IG1xZF9ncHVfYWRkciAmIDB4ZmZmZmZmZmM7Ci0JCW1xZC0+cXVldWVfc3Rh dGUuY3BfbXFkX2Jhc2VfYWRkcl9oaSA9IHVwcGVyXzMyX2JpdHMobXFkX2dwdV9hZGRyKTsKLQkJ V1JFRzMyKG1tQ1BfTVFEX0JBU0VfQUREUiwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRfYmFzZV9h ZGRyKTsKLQkJV1JFRzMyKG1tQ1BfTVFEX0JBU0VfQUREUl9ISSwgbXFkLT5xdWV1ZV9zdGF0ZS5j cF9tcWRfYmFzZV9hZGRyX2hpKTsKLQkJLyogc2V0IE1RRCB2bWlkIHRvIDAgKi8KLQkJbXFkLT5x dWV1ZV9zdGF0ZS5jcF9tcWRfY29udHJvbCA9IFJSRUczMihtbUNQX01RRF9DT05UUk9MKTsKLQkJ bXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRfY29udHJvbCAmPSB+Q1BfTVFEX0NPTlRST0xfX1ZNSURf TUFTSzsKLQkJV1JFRzMyKG1tQ1BfTVFEX0NPTlRST0wsIG1xZC0+cXVldWVfc3RhdGUuY3BfbXFk X2NvbnRyb2wpOwotCi0JCS8qIHNldCB0aGUgcG9pbnRlciB0byB0aGUgSFFELCB0aGlzIGlzIHNp bWlsYXIgQ1BfUkIwX0JBU0UvX0hJICovCi0JCWhxZF9ncHVfYWRkciA9IHJpbmctPmdwdV9hZGRy ID4+IDg7Ci0JCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Jhc2UgPSBocWRfZ3B1X2FkZHI7 Ci0JCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Jhc2VfaGkgPSB1cHBlcl8zMl9iaXRzKGhx ZF9ncHVfYWRkcik7Ci0JCVdSRUczMihtbUNQX0hRRF9QUV9CQVNFLCBtcWQtPnF1ZXVlX3N0YXRl LmNwX2hxZF9wcV9iYXNlKTsKLQkJV1JFRzMyKG1tQ1BfSFFEX1BRX0JBU0VfSEksIG1xZC0+cXVl dWVfc3RhdGUuY3BfaHFkX3BxX2Jhc2VfaGkpOwotCi0JCS8qIHNldCB1cCB0aGUgSFFELCB0aGlz IGlzIHNpbWlsYXIgdG8gQ1BfUkIwX0NOVEwgKi8KLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRf cHFfY29udHJvbCA9IFJSRUczMihtbUNQX0hRRF9QUV9DT05UUk9MKTsKLQkJbXFkLT5xdWV1ZV9z dGF0ZS5jcF9ocWRfcHFfY29udHJvbCAmPQotCQkJfihDUF9IUURfUFFfQ09OVFJPTF9fUVVFVUVf U0laRV9NQVNLIHwKLQkJCQkJQ1BfSFFEX1BRX0NPTlRST0xfX1JQVFJfQkxPQ0tfU0laRV9NQVNL KTsKLQotCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9jb250cm9sIHw9Ci0JCQlvcmRlcl9i YXNlXzIocmluZy0+cmluZ19zaXplIC8gOCk7Ci0JCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3Bx X2NvbnRyb2wgfD0KLQkJCShvcmRlcl9iYXNlXzIoQU1ER1BVX0dQVV9QQUdFX1NJWkUvOCkgPDwg OCk7CisJLyogZW5hYmxlIGRvb3JiZWxsPyAqLworCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3Bx X2Rvb3JiZWxsX2NvbnRyb2wgPQorCQlSUkVHMzIobW1DUF9IUURfUFFfRE9PUkJFTExfQ09OVFJP TCk7CisJaWYgKHJpbmctPnVzZV9kb29yYmVsbCkKKwkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRf cHFfZG9vcmJlbGxfY29udHJvbCB8PSBDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9fRE9PUkJF TExfRU5fTUFTSzsKKwllbHNlCisJCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxs X2NvbnRyb2wgJj0gfkNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVMTF9FTl9NQVNL OworCisJLyogc2V0IHRoZSBwb2ludGVyIHRvIHRoZSBNUUQgKi8KKwltcWQtPnF1ZXVlX3N0YXRl LmNwX21xZF9iYXNlX2FkZHIgPSBtcWRfZ3B1X2FkZHIgJiAweGZmZmZmZmZjOworCW1xZC0+cXVl dWVfc3RhdGUuY3BfbXFkX2Jhc2VfYWRkcl9oaSA9IHVwcGVyXzMyX2JpdHMobXFkX2dwdV9hZGRy KTsKKworCS8qIHNldCBNUUQgdm1pZCB0byAwICovCisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9tcWRf Y29udHJvbCA9IFJSRUczMihtbUNQX01RRF9DT05UUk9MKTsKKwltcWQtPnF1ZXVlX3N0YXRlLmNw X21xZF9jb250cm9sICY9IH5DUF9NUURfQ09OVFJPTF9fVk1JRF9NQVNLOworCisJLyogc2V0IHRo ZSBwb2ludGVyIHRvIHRoZSBIUUQsIHRoaXMgaXMgc2ltaWxhciBDUF9SQjBfQkFTRS9fSEkgKi8K KwlocWRfZ3B1X2FkZHIgPSByaW5nLT5ncHVfYWRkciA+PiA4OworCW1xZC0+cXVldWVfc3RhdGUu Y3BfaHFkX3BxX2Jhc2UgPSBocWRfZ3B1X2FkZHI7CisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRf cHFfYmFzZV9oaSA9IHVwcGVyXzMyX2JpdHMoaHFkX2dwdV9hZGRyKTsKKworCS8qIHNldCB1cCB0 aGUgSFFELCB0aGlzIGlzIHNpbWlsYXIgdG8gQ1BfUkIwX0NOVEwgKi8KKwltcWQtPnF1ZXVlX3N0 YXRlLmNwX2hxZF9wcV9jb250cm9sID0gUlJFRzMyKG1tQ1BfSFFEX1BRX0NPTlRST0wpOworCW1x ZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2NvbnRyb2wgJj0KKwkJfihDUF9IUURfUFFfQ09OVFJP TF9fUVVFVUVfU0laRV9NQVNLIHwKKwkJCQlDUF9IUURfUFFfQ09OVFJPTF9fUlBUUl9CTE9DS19T SVpFX01BU0spOworCisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfY29udHJvbCB8PQorCQlv cmRlcl9iYXNlXzIocmluZy0+cmluZ19zaXplIC8gOCk7CisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9o cWRfcHFfY29udHJvbCB8PQorCQkob3JkZXJfYmFzZV8yKEFNREdQVV9HUFVfUEFHRV9TSVpFLzgp IDw8IDgpOwogI2lmZGVmIF9fQklHX0VORElBTgotCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9w cV9jb250cm9sIHw9Ci0JCQkyIDw8IENQX0hRRF9QUV9DT05UUk9MX19FTkRJQU5fU1dBUF9fU0hJ RlQ7CisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfY29udHJvbCB8PQorCQkyIDw8IENQX0hR RF9QUV9DT05UUk9MX19FTkRJQU5fU1dBUF9fU0hJRlQ7CiAjZW5kaWYKLQkJbXFkLT5xdWV1ZV9z dGF0ZS5jcF9ocWRfcHFfY29udHJvbCAmPQotCQkJfihDUF9IUURfUFFfQ09OVFJPTF9fVU5PUkRf RElTUEFUQ0hfTUFTSyB8CisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfY29udHJvbCAmPQor CQl+KENQX0hRRF9QUV9DT05UUk9MX19VTk9SRF9ESVNQQVRDSF9NQVNLIHwKIAkJCQlDUF9IUURf UFFfQ09OVFJPTF9fUk9RX1BRX0lCX0ZMSVBfTUFTSyB8CiAJCQkJQ1BfSFFEX1BRX0NPTlRST0xf X1BRX1ZPTEFUSUxFX01BU0spOwotCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9jb250cm9s IHw9Ci0JCQlDUF9IUURfUFFfQ09OVFJPTF9fUFJJVl9TVEFURV9NQVNLIHwKLQkJCUNQX0hRRF9Q UV9DT05UUk9MX19LTURfUVVFVUVfTUFTSzsgLyogYXNzdW1pbmcga2VybmVsIHF1ZXVlIGNvbnRy b2wgKi8KLQkJV1JFRzMyKG1tQ1BfSFFEX1BRX0NPTlRST0wsIG1xZC0+cXVldWVfc3RhdGUuY3Bf aHFkX3BxX2NvbnRyb2wpOwotCi0JCS8qIG9ubHkgdXNlZCBpZiBDUF9QUV9XUFRSX1BPTExfQ05U TC5DUF9QUV9XUFRSX1BPTExfQ05UTF9fRU5fTUFTSz0xICovCi0JCXdiX2dwdV9hZGRyID0gYWRl di0+d2IuZ3B1X2FkZHIgKyAocmluZy0+d3B0cl9vZmZzICogNCk7Ci0JCW1xZC0+cXVldWVfc3Rh dGUuY3BfaHFkX3BxX3dwdHJfcG9sbF9hZGRyID0gd2JfZ3B1X2FkZHIgJiAweGZmZmZmZmZjOwot CQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRyX3BvbGxfYWRkcl9oaSA9IHVwcGVyXzMy X2JpdHMod2JfZ3B1X2FkZHIpICYgMHhmZmZmOwotCQlXUkVHMzIobW1DUF9IUURfUFFfV1BUUl9Q T0xMX0FERFIsIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3dwdHJfcG9sbF9hZGRyKTsKLQkJ V1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFJfUE9MTF9BRERSX0hJLAotCQkgICAgICAgbXFkLT5xdWV1 ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0cl9wb2xsX2FkZHJfaGkpOwotCi0JCS8qIHNldCB0aGUgd2Ig YWRkcmVzcyB3ZXRoZXIgaXQncyBlbmFibGVkIG9yIG5vdCAqLwotCQl3Yl9ncHVfYWRkciA9IGFk ZXYtPndiLmdwdV9hZGRyICsgKHJpbmctPnJwdHJfb2ZmcyAqIDQpOwotCQltcWQtPnF1ZXVlX3N0 YXRlLmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyID0gd2JfZ3B1X2FkZHIgJiAweGZmZmZmZmZj OwotCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRyX2hpID0KLQkJ CXVwcGVyXzMyX2JpdHMod2JfZ3B1X2FkZHIpICYgMHhmZmZmOwotCQlXUkVHMzIobW1DUF9IUURf UFFfUlBUUl9SRVBPUlRfQUREUiwKLQkJICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3Bx X3JwdHJfcmVwb3J0X2FkZHIpOwotCQlXUkVHMzIobW1DUF9IUURfUFFfUlBUUl9SRVBPUlRfQURE Ul9ISSwKLQkJICAgICAgIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3JwdHJfcmVwb3J0X2Fk ZHJfaGkpOwotCi0JCS8qIGVuYWJsZSB0aGUgZG9vcmJlbGwgaWYgcmVxdWVzdGVkICovCi0JCWlm ICh1c2VfZG9vcmJlbGwpIHsKLQkJCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxs X2NvbnRyb2wgPQotCQkJCVJSRUczMihtbUNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MKTsKLQkJ CW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wgJj0KLQkJCQl+Q1Bf SFFEX1BRX0RPT1JCRUxMX0NPTlRST0xfX0RPT1JCRUxMX09GRlNFVF9NQVNLOwotCQkJbXFkLT5x dWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCB8PQotCQkJCShyaW5nLT5kb29y YmVsbF9pbmRleCA8PAotCQkJCSBDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9fRE9PUkJFTExf T0ZGU0VUX19TSElGVCk7Ci0JCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9j b250cm9sIHw9Ci0JCQkJQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0xfX0RPT1JCRUxMX0VOX01B U0s7Ci0JCQltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sICY9Ci0J CQkJfihDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTF9fRE9PUkJFTExfU09VUkNFX01BU0sgfAot CQkJCUNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVMTF9ISVRfTUFTSyk7CisJbXFk LT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfY29udHJvbCB8PQorCQlDUF9IUURfUFFfQ09OVFJPTF9f UFJJVl9TVEFURV9NQVNLIHwKKwkJQ1BfSFFEX1BRX0NPTlRST0xfX0tNRF9RVUVVRV9NQVNLOyAv KiBhc3N1bWluZyBrZXJuZWwgcXVldWUgY29udHJvbCAqLwogCi0JCX0gZWxzZSB7Ci0JCQltcWQt PnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sID0gMDsKKwkvKiBvbmx5IHVz ZWQgaWYgQ1BfUFFfV1BUUl9QT0xMX0NOVEwuQ1BfUFFfV1BUUl9QT0xMX0NOVExfX0VOX01BU0s9 MSAqLworCXdiX2dwdV9hZGRyID0gYWRldi0+d2IuZ3B1X2FkZHIgKyAocmluZy0+d3B0cl9vZmZz ICogNCk7CisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0cl9wb2xsX2FkZHIgPSB3Yl9n cHVfYWRkciAmIDB4ZmZmZmZmZmM7CisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0cl9w b2xsX2FkZHJfaGkgPSB1cHBlcl8zMl9iaXRzKHdiX2dwdV9hZGRyKSAmIDB4ZmZmZjsKKworCS8q IHNldCB0aGUgd2IgYWRkcmVzcyB3ZXRoZXIgaXQncyBlbmFibGVkIG9yIG5vdCAqLworCXdiX2dw dV9hZGRyID0gYWRldi0+d2IuZ3B1X2FkZHIgKyAocmluZy0+cnB0cl9vZmZzICogNCk7CisJbXFk LT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0cl9yZXBvcnRfYWRkciA9IHdiX2dwdV9hZGRyICYg MHhmZmZmZmZmYzsKKwltcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9hZGRy X2hpID0KKwkJdXBwZXJfMzJfYml0cyh3Yl9ncHVfYWRkcikgJiAweGZmZmY7CisKKwkvKiBlbmFi bGUgdGhlIGRvb3JiZWxsIGlmIHJlcXVlc3RlZCAqLworCWlmIChyaW5nLT51c2VfZG9vcmJlbGwp IHsKKwkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCA9CisJCQlS UkVHMzIobW1DUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTCk7CisJCW1xZC0+cXVldWVfc3RhdGUu Y3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wgJj0KKwkJCX5DUF9IUURfUFFfRE9PUkJFTExfQ09O VFJPTF9fRE9PUkJFTExfT0ZGU0VUX01BU0s7CisJCW1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3Bx X2Rvb3JiZWxsX2NvbnRyb2wgfD0KKwkJCShyaW5nLT5kb29yYmVsbF9pbmRleCA8PAorCQkJIENQ X0hRRF9QUV9ET09SQkVMTF9DT05UUk9MX19ET09SQkVMTF9PRkZTRVRfX1NISUZUKTsKKwkJbXFk LT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCB8PQorCQkJQ1BfSFFEX1BR X0RPT1JCRUxMX0NPTlRST0xfX0RPT1JCRUxMX0VOX01BU0s7CisJCW1xZC0+cXVldWVfc3RhdGUu Y3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wgJj0KKwkJCX4oQ1BfSFFEX1BRX0RPT1JCRUxMX0NP TlRST0xfX0RPT1JCRUxMX1NPVVJDRV9NQVNLIHwKKwkJCQkJQ1BfSFFEX1BRX0RPT1JCRUxMX0NP TlRST0xfX0RPT1JCRUxMX0hJVF9NQVNLKTsKKworCX0gZWxzZSB7CisJCW1xZC0+cXVldWVfc3Rh dGUuY3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wgPSAwOworCX0KKworCS8qIHJlYWQgYW5kIHdy aXRlIHBvaW50ZXJzLCBzaW1pbGFyIHRvIENQX1JCMF9XUFRSL19SUFRSICovCisJcmluZy0+d3B0 ciA9IDA7CisJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0ciA9IHJpbmctPndwdHI7CisJ bXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0ciA9IFJSRUczMihtbUNQX0hRRF9QUV9SUFRS KTsKKworCS8qIHNldCB0aGUgdm1pZCBmb3IgdGhlIHF1ZXVlICovCisJbXFkLT5xdWV1ZV9zdGF0 ZS5jcF9ocWRfdm1pZCA9IDA7CisKKwkvKiBhY3RpdmF0ZSB0aGUgcXVldWUgKi8KKwltcWQtPnF1 ZXVlX3N0YXRlLmNwX2hxZF9hY3RpdmUgPSAxOworfQorCitzdGF0aWMgaW50IGdmeF92N18wX21x ZF9jb21taXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCisJCQkgICAgICAgc3RydWN0IGJv bmFpcmVfbXFkICptcWQpCit7CisJdTMyIHRtcDsKKworCS8qIGRpc2FibGUgd3B0ciBwb2xsaW5n ICovCisJdG1wID0gUlJFRzMyKG1tQ1BfUFFfV1BUUl9QT0xMX0NOVEwpOworCXRtcCA9IFJFR19T RVRfRklFTEQodG1wLCBDUF9QUV9XUFRSX1BPTExfQ05UTCwgRU4sIDApOworCVdSRUczMihtbUNQ X1BRX1dQVFJfUE9MTF9DTlRMLCB0bXApOworCisJLyogcHJvZ3JhbSBNUUQgZmllbGQgdG8gSFcg Ki8KKwlXUkVHMzIobW1DUF9NUURfQkFTRV9BRERSLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX21xZF9i YXNlX2FkZHIpOworCVdSRUczMihtbUNQX01RRF9CQVNFX0FERFJfSEksIG1xZC0+cXVldWVfc3Rh dGUuY3BfbXFkX2Jhc2VfYWRkcl9oaSk7CisJV1JFRzMyKG1tQ1BfTVFEX0NPTlRST0wsIG1xZC0+ cXVldWVfc3RhdGUuY3BfbXFkX2NvbnRyb2wpOworCVdSRUczMihtbUNQX0hRRF9QUV9CQVNFLCBt cWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV9iYXNlKTsKKwlXUkVHMzIobW1DUF9IUURfUFFfQkFT RV9ISSwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfYmFzZV9oaSk7CisJV1JFRzMyKG1tQ1Bf SFFEX1BRX0NPTlRST0wsIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX2NvbnRyb2wpOworCVdS RUczMihtbUNQX0hRRF9QUV9XUFRSX1BPTExfQUREUiwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRf cHFfd3B0cl9wb2xsX2FkZHIpOworCVdSRUczMihtbUNQX0hRRF9QUV9XUFRSX1BPTExfQUREUl9I SSwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfd3B0cl9wb2xsX2FkZHJfaGkpOworCVdSRUcz MihtbUNQX0hRRF9QUV9SUFRSX1JFUE9SVF9BRERSLCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9w cV9ycHRyX3JlcG9ydF9hZGRyKTsKKwlXUkVHMzIobW1DUF9IUURfUFFfUlBUUl9SRVBPUlRfQURE Ul9ISSwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfcHFfcnB0cl9yZXBvcnRfYWRkcl9oaSk7CisJ V1JFRzMyKG1tQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wsIG1xZC0+cXVldWVfc3RhdGUuY3Bf aHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wpOworCVdSRUczMihtbUNQX0hRRF9QUV9XUFRSLCBtcWQt PnF1ZXVlX3N0YXRlLmNwX2hxZF9wcV93cHRyKTsKKwlXUkVHMzIobW1DUF9IUURfVk1JRCwgbXFk LT5xdWV1ZV9zdGF0ZS5jcF9ocWRfdm1pZCk7CisKKwkvKiBhY3RpdmF0ZSB0aGUgSFFEICovCisJ V1JFRzMyKG1tQ1BfSFFEX0FDVElWRSwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfYWN0aXZlKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdmeF92N18wX2NvbXB1dGVfcXVldWVfaW5p dChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgaW50IHJpbmdfaWQpCit7CisJaW50IHI7CisJ dTY0IG1xZF9ncHVfYWRkcjsKKwlzdHJ1Y3QgYm9uYWlyZV9tcWQgKm1xZDsKKwlzdHJ1Y3QgYW1k Z3B1X3JpbmcgKnJpbmcgPSAmYWRldi0+Z2Z4LmNvbXB1dGVfcmluZ1tyaW5nX2lkXTsKKworCWlm IChyaW5nLT5tcWRfb2JqID09IE5VTEwpIHsKKwkJciA9IGFtZGdwdV9ib19jcmVhdGUoYWRldiwK KwkJCQlzaXplb2Yoc3RydWN0IGJvbmFpcmVfbXFkKSwKKwkJCQlQQUdFX1NJWkUsIHRydWUsCisJ CQkJQU1ER1BVX0dFTV9ET01BSU5fR1RULCAwLCBOVUxMLCBOVUxMLAorCQkJCSZyaW5nLT5tcWRf b2JqKTsKKwkJaWYgKHIpIHsKKwkJCWRldl93YXJuKGFkZXYtPmRldiwgIiglZCkgY3JlYXRlIE1R RCBibyBmYWlsZWRcbiIsIHIpOworCQkJcmV0dXJuIHI7CiAJCX0KLQkJV1JFRzMyKG1tQ1BfSFFE X1BRX0RPT1JCRUxMX0NPTlRST0wsCi0JCSAgICAgICBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hxZF9w cV9kb29yYmVsbF9jb250cm9sKTsKKwl9CisKKwlyID0gYW1kZ3B1X2JvX3Jlc2VydmUocmluZy0+ bXFkX29iaiwgZmFsc2UpOworCWlmICh1bmxpa2VseShyICE9IDApKQorCQlnb3RvIG91dDsKKwor CXIgPSBhbWRncHVfYm9fcGluKHJpbmctPm1xZF9vYmosIEFNREdQVV9HRU1fRE9NQUlOX0dUVCwK KwkJCSZtcWRfZ3B1X2FkZHIpOworCWlmIChyKSB7CisJCWRldl93YXJuKGFkZXYtPmRldiwgIigl ZCkgcGluIE1RRCBibyBmYWlsZWRcbiIsIHIpOworCQlnb3RvIG91dF91bnJlc2VydmU7CisJfQor CXIgPSBhbWRncHVfYm9fa21hcChyaW5nLT5tcWRfb2JqLCAodm9pZCAqKikmbXFkKTsKKwlpZiAo cikgeworCQlkZXZfd2FybihhZGV2LT5kZXYsICIoJWQpIG1hcCBNUUQgYm8gZmFpbGVkXG4iLCBy KTsKKwkJZ290byBvdXRfdW5yZXNlcnZlOworCX0KKworCW11dGV4X2xvY2soJmFkZXYtPnNyYm1f bXV0ZXgpOworCWNpa19zcmJtX3NlbGVjdChhZGV2LCByaW5nLT5tZSwgcmluZy0+cGlwZSwgcmlu Zy0+cXVldWUsIDApOwogCi0JCS8qIHJlYWQgYW5kIHdyaXRlIHBvaW50ZXJzLCBzaW1pbGFyIHRv IENQX1JCMF9XUFRSL19SUFRSICovCi0JCXJpbmctPndwdHIgPSAwOwotCQltcWQtPnF1ZXVlX3N0 YXRlLmNwX2hxZF9wcV93cHRyID0gcmluZy0+d3B0cjsKLQkJV1JFRzMyKG1tQ1BfSFFEX1BRX1dQ VFIsIG1xZC0+cXVldWVfc3RhdGUuY3BfaHFkX3BxX3dwdHIpOwotCQltcWQtPnF1ZXVlX3N0YXRl LmNwX2hxZF9wcV9ycHRyID0gUlJFRzMyKG1tQ1BfSFFEX1BRX1JQVFIpOworCWdmeF92N18wX21x ZF9pbml0KGFkZXYsIG1xZCwgbXFkX2dwdV9hZGRyLCByaW5nKTsKKwlnZnhfdjdfMF9tcWRfZGVh Y3RpdmF0ZShhZGV2KTsKKwlnZnhfdjdfMF9tcWRfY29tbWl0KGFkZXYsIG1xZCk7CiAKLQkJLyog c2V0IHRoZSB2bWlkIGZvciB0aGUgcXVldWUgKi8KLQkJbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRf dm1pZCA9IDA7Ci0JCVdSRUczMihtbUNQX0hRRF9WTUlELCBtcWQtPnF1ZXVlX3N0YXRlLmNwX2hx ZF92bWlkKTsKKwljaWtfc3JibV9zZWxlY3QoYWRldiwgMCwgMCwgMCwgMCk7CisJbXV0ZXhfdW5s b2NrKCZhZGV2LT5zcmJtX211dGV4KTsKIAotCQkvKiBhY3RpdmF0ZSB0aGUgcXVldWUgKi8KLQkJ bXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfYWN0aXZlID0gMTsKLQkJV1JFRzMyKG1tQ1BfSFFEX0FD VElWRSwgbXFkLT5xdWV1ZV9zdGF0ZS5jcF9ocWRfYWN0aXZlKTsKKwlhbWRncHVfYm9fa3VubWFw KHJpbmctPm1xZF9vYmopOworb3V0X3VucmVzZXJ2ZToKKwlhbWRncHVfYm9fdW5yZXNlcnZlKHJp bmctPm1xZF9vYmopOworb3V0OgorCXJldHVybiAwOworfQorCisvKioKKyAqIGdmeF92N18wX2Nw X2NvbXB1dGVfcmVzdW1lIC0gc2V0dXAgdGhlIGNvbXB1dGUgcXVldWUgcmVnaXN0ZXJzCisgKgor ICogQGFkZXY6IGFtZGdwdV9kZXZpY2UgcG9pbnRlcgorICoKKyAqIFByb2dyYW0gdGhlIGNvbXB1 dGUgcXVldWVzIGFuZCB0ZXN0IHRoZW0gdG8gbWFrZSBzdXJlIHRoZXkKKyAqIGFyZSB3b3JraW5n LgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBlcnJvciBmb3IgZmFpbHVyZS4KKyAqLworc3Rh dGljIGludCBnZnhfdjdfMF9jcF9jb21wdXRlX3Jlc3VtZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldikKK3sKKwlpbnQgciwgaSwgajsKKwl1MzIgdG1wOworCXN0cnVjdCBhbWRncHVfcmluZyAq cmluZzsKIAotCQljaWtfc3JibV9zZWxlY3QoYWRldiwgMCwgMCwgMCwgMCk7Ci0JCW11dGV4X3Vu bG9jaygmYWRldi0+c3JibV9tdXRleCk7CisJLyogZml4IHVwIGNoaWNrZW4gYml0cyAqLworCXRt cCA9IFJSRUczMihtbUNQX0NQRl9ERUJVRyk7CisJdG1wIHw9ICgxIDw8IDIzKTsKKwlXUkVHMzIo bW1DUF9DUEZfREVCVUcsIHRtcCk7CiAKLQkJYW1kZ3B1X2JvX2t1bm1hcChyaW5nLT5tcWRfb2Jq KTsKLQkJYW1kZ3B1X2JvX3VucmVzZXJ2ZShyaW5nLT5tcWRfb2JqKTsKKwkvKiBpbml0IHRoZSBw aXBlcyAqLworCWZvciAoaSA9IDA7IGkgPCBhZGV2LT5nZngubWVjLm51bV9tZWM7IGkrKykKKwkJ Zm9yIChqID0gMDsgaiA8IGFkZXYtPmdmeC5tZWMubnVtX3BpcGU7IGorKykKKwkJCWdmeF92N18w X2NvbXB1dGVfcGlwZV9pbml0KGFkZXYsIGksIGopOwogCi0JCXJpbmctPnJlYWR5ID0gdHJ1ZTsK KwkvKiBpbml0IHRoZSBxdWV1ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWRldi0+Z2Z4Lm51bV9j b21wdXRlX3JpbmdzOyBpKyspIHsKKwkJciA9IGdmeF92N18wX2NvbXB1dGVfcXVldWVfaW5pdChh ZGV2LCBpKTsKKwkJaWYgKHIpIHsKKwkJCWdmeF92N18wX2NwX2NvbXB1dGVfZmluaShhZGV2KTsK KwkJCXJldHVybiByOworCQl9CiAJfQogCiAJZ2Z4X3Y3XzBfY3BfY29tcHV0ZV9lbmFibGUoYWRl diwgdHJ1ZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRldi0+Z2Z4Lm51bV9jb21wdXRlX3Jpbmdz OyBpKyspIHsKIAkJcmluZyA9ICZhZGV2LT5nZnguY29tcHV0ZV9yaW5nW2ldOwotCisJCXJpbmct PnJlYWR5ID0gdHJ1ZTsKIAkJciA9IGFtZGdwdV9yaW5nX3Rlc3RfcmluZyhyaW5nKTsKIAkJaWYg KHIpCiAJCQlyaW5nLT5yZWFkeSA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvZ2Z4X3Y4XzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92 OF8wLmMKaW5kZXggMzVmOWNkOC4uY2Y3MzhlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvZ2Z4X3Y4XzAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9n ZnhfdjhfMC5jCkBAIC01Myw2ICs1Myw4IEBACiAKICNkZWZpbmUgR0ZYOF9OVU1fR0ZYX1JJTkdT ICAgICAxCiAjZGVmaW5lIEdGWDhfTlVNX0NPTVBVVEVfUklOR1MgOAorI2RlZmluZSBHRlg4X01F Q19IUERfU0laRSAyMDQ4CisKIAogI2RlZmluZSBUT1BBWl9HQl9BRERSX0NPTkZJR19HT0xERU4g MHgyMjAxMDAwMQogI2RlZmluZSBDQVJSSVpPX0dCX0FERFJfQ09ORklHX0dPTERFTiAweDIyMDEw MDAxCkBAIC0xNDE2LDcgKzE0MTgsNyBAQCBzdGF0aWMgdm9pZCBnZnhfdjhfMF9raXFfZnJlZV9y aW5nKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKIAlpcnEtPmRhdGEgPSBOVUxMOwogfQogCi0j ZGVmaW5lIE1FQ19IUERfU0laRSAyMDQ4CisjZGVmaW5lIEdGWDhfTUVDX0hQRF9TSVpFIDIwNDgK IAogc3RhdGljIGludCBnZnhfdjhfMF9tZWNfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl dikKIHsKQEAgLTE0MzMsNyArMTQzNSw3IEBAIHN0YXRpYyBpbnQgZ2Z4X3Y4XzBfbWVjX2luaXQo c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiAKIAlpZiAoYWRldi0+Z2Z4Lm1lYy5ocGRfZW9w X29iaiA9PSBOVUxMKSB7CiAJCXIgPSBhbWRncHVfYm9fY3JlYXRlKGFkZXYsCi0JCQkJICAgICBh ZGV2LT5nZngubWVjLm51bV9xdWV1ZSAqIE1FQ19IUERfU0laRSwKKwkJCQkgICAgIGFkZXYtPmdm eC5tZWMubnVtX3F1ZXVlICogR0ZYOF9NRUNfSFBEX1NJWkUsCiAJCQkJICAgICBQQUdFX1NJWkUs IHRydWUsCiAJCQkJICAgICBBTURHUFVfR0VNX0RPTUFJTl9HVFQsIDAsIE5VTEwsIE5VTEwsCiAJ CQkJICAgICAmYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX29iaik7CkBAIC0xNDYyLDcgKzE0NjQsNyBA QCBzdGF0aWMgaW50IGdmeF92OF8wX21lY19pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQogCQlyZXR1cm4gcjsKIAl9CiAKLQltZW1zZXQoaHBkLCAwLCBhZGV2LT5nZngubWVjLm51bV9x dWV1ZSAqIE1FQ19IUERfU0laRSk7CisJbWVtc2V0KGhwZCwgMCwgYWRldi0+Z2Z4Lm1lYy5udW1f cXVldWUgKiBHRlg4X01FQ19IUERfU0laRSk7CiAKIAlhbWRncHVfYm9fa3VubWFwKGFkZXYtPmdm eC5tZWMuaHBkX2VvcF9vYmopOwogCWFtZGdwdV9ib191bnJlc2VydmUoYWRldi0+Z2Z4Lm1lYy5o cGRfZW9wX29iaik7CkBAIC0xNDg0LDcgKzE0ODYsNyBAQCBzdGF0aWMgaW50IGdmeF92OF8wX2tp cV9pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCXUzMiAqaHBkOwogCXN0cnVjdCBh bWRncHVfa2lxICpraXEgPSAmYWRldi0+Z2Z4LmtpcTsKIAotCXIgPSBhbWRncHVfYm9fY3JlYXRl X2tlcm5lbChhZGV2LCBNRUNfSFBEX1NJWkUsIFBBR0VfU0laRSwKKwlyID0gYW1kZ3B1X2JvX2Ny ZWF0ZV9rZXJuZWwoYWRldiwgR0ZYOF9NRUNfSFBEX1NJWkUsIFBBR0VfU0laRSwKIAkJCQkgICAg QU1ER1BVX0dFTV9ET01BSU5fR1RULCAma2lxLT5lb3Bfb2JqLAogCQkJCSAgICAma2lxLT5lb3Bf Z3B1X2FkZHIsICh2b2lkICoqKSZocGQpOwogCWlmIChyKSB7CkBAIC0xNDkyLDcgKzE0OTQsNyBA QCBzdGF0aWMgaW50IGdmeF92OF8wX2tpcV9pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQogCQlyZXR1cm4gcjsKIAl9CiAKLQltZW1zZXQoaHBkLCAwLCBNRUNfSFBEX1NJWkUpOworCW1l bXNldChocGQsIDAsIEdGWDhfTUVDX0hQRF9TSVpFKTsKIAogCWFtZGdwdV9ib19rdW5tYXAoa2lx LT5lb3Bfb2JqKTsKIApAQCAtNDY1Nyw2ICs0NjU5LDkgQEAgc3RhdGljIGludCBnZnhfdjhfMF9t cWRfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKIAl1aW50NjRfdCBocWRfZ3B1X2Fk ZHIsIHdiX2dwdV9hZGRyLCBlb3BfYmFzZV9hZGRyOwogCXVpbnQzMl90IHRtcDsKIAorCS8qIGlu aXQgdGhlIG1xZCBzdHJ1Y3QgKi8KKwltZW1zZXQobXFkLCAwLCBzaXplb2Yoc3RydWN0IHZpX21x ZCkpOworCiAJbXFkLT5oZWFkZXIgPSAweEMwMzEwODAwOwogCW1xZC0+Y29tcHV0ZV9waXBlbGlu ZXN0YXRfZW5hYmxlID0gMHgwMDAwMDAwMTsKIAltcWQtPmNvbXB1dGVfc3RhdGljX3RocmVhZF9t Z210X3NlMCA9IDB4ZmZmZmZmZmY7CkBAIC00NjcyLDcgKzQ2NzcsNyBAQCBzdGF0aWMgaW50IGdm eF92OF8wX21xZF9pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAogCS8qIHNldCB0aGUg RU9QIHNpemUsIHJlZ2lzdGVyIHZhbHVlIGlzIDJeKEVPUF9TSVpFKzEpIGR3b3JkcyAqLwogCXRt cCA9IFJSRUczMihtbUNQX0hRRF9FT1BfQ09OVFJPTCk7CiAJdG1wID0gUkVHX1NFVF9GSUVMRCh0 bXAsIENQX0hRRF9FT1BfQ09OVFJPTCwgRU9QX1NJWkUsCi0JCQkob3JkZXJfYmFzZV8yKE1FQ19I UERfU0laRSAvIDQpIC0gMSkpOworCQkJKG9yZGVyX2Jhc2VfMihHRlg4X01FQ19IUERfU0laRSAv IDQpIC0gMSkpOwogCiAJbXFkLT5jcF9ocWRfZW9wX2NvbnRyb2wgPSB0bXA7CiAKQEAgLTQ2ODgs MTEgKzQ2OTMsNiBAQCBzdGF0aWMgaW50IGdmeF92OF8wX21xZF9pbml0KHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2LAogCiAJbXFkLT5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCA9IHRtcDsK IAotCS8qIGRpc2FibGUgdGhlIHF1ZXVlIGlmIGl0J3MgYWN0aXZlICovCi0JbXFkLT5jcF9ocWRf ZGVxdWV1ZV9yZXF1ZXN0ID0gMDsKLQltcWQtPmNwX2hxZF9wcV9ycHRyID0gMDsKLQltcWQtPmNw X2hxZF9wcV93cHRyID0gMDsKLQogCS8qIHNldCB0aGUgcG9pbnRlciB0byB0aGUgTVFEICovCiAJ bXFkLT5jcF9tcWRfYmFzZV9hZGRyX2xvID0gbXFkX2dwdV9hZGRyICYgMHhmZmZmZmZmYzsKIAlt cWQtPmNwX21xZF9iYXNlX2FkZHJfaGkgPSB1cHBlcl8zMl9iaXRzKG1xZF9ncHVfYWRkcik7CkBA IC00NzY4LDEyICs0NzY4LDU0IEBAIHN0YXRpYyBpbnQgZ2Z4X3Y4XzBfbXFkX2luaXQoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2Z4X3Y4 XzBfa2lxX2luaXRfcmVnaXN0ZXIoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCi0JCQkJICAg ICAgc3RydWN0IHZpX21xZCAqbXFkLAotCQkJCSAgICAgIHN0cnVjdCBhbWRncHVfcmluZyAqcmlu ZykKK3N0YXRpYyBpbnQgZ2Z4X3Y4XzBfbXFkX2RlYWN0aXZhdGUoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCit7CisJaW50IGk7CisKKwkvKiBkaXNhYmxlIHRoZSBxdWV1ZSBpZiBpdCdzIGFj dGl2ZSAqLworCWlmIChSUkVHMzIobW1DUF9IUURfQUNUSVZFKSAmIDEpIHsKKwkJV1JFRzMyKG1t Q1BfSFFEX0RFUVVFVUVfUkVRVUVTVCwgMSk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGV2LT51c2Vj X3RpbWVvdXQ7IGkrKykgeworCQkJaWYgKCEoUlJFRzMyKG1tQ1BfSFFEX0FDVElWRSkgJiAxKSkK KwkJCQlicmVhazsKKwkJCXVkZWxheSgxKTsKKwkJfQorCisJCWlmIChpID09IGFkZXYtPnVzZWNf dGltZW91dCkKKwkJCXJldHVybiAtRVRJTUVET1VUOworCisJCVdSRUczMihtbUNQX0hRRF9ERVFV RVVFX1JFUVVFU1QsIDApOworCQlXUkVHMzIobW1DUF9IUURfUFFfUlBUUiwgMCk7CisJCVdSRUcz MihtbUNQX0hRRF9QUV9XUFRSLCAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgZ2Z4X3Y4XzBfZW5hYmxlX2Rvb3JiZWxsKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCBi b29sIGVuYWJsZSkKK3sKKwl1aW50MzJfdCB0bXA7CisKKwlpZiAoIWVuYWJsZSkKKwkJcmV0dXJu OworCisJaWYgKChhZGV2LT5hc2ljX3R5cGUgPT0gQ0hJUF9DQVJSSVpPKSB8fAorCQkJKGFkZXYt PmFzaWNfdHlwZSA9PSBDSElQX0ZJSkkpIHx8CisJCQkoYWRldi0+YXNpY190eXBlID09IENISVBf U1RPTkVZKSB8fAorCQkJKGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX1BPTEFSSVMxMSkgfHwKKwkJ CShhZGV2LT5hc2ljX3R5cGUgPT0gQ0hJUF9QT0xBUklTMTApKSB7CisJCVdSRUczMihtbUNQX01F Q19ET09SQkVMTF9SQU5HRV9MT1dFUiwgQU1ER1BVX0RPT1JCRUxMX0tJUSA8PCAyKTsKKwkJV1JF RzMyKG1tQ1BfTUVDX0RPT1JCRUxMX1JBTkdFX1VQUEVSLCBBTURHUFVfRE9PUkJFTExfTUVDX1JJ Tkc3IDw8IDIpOworCX0KKworCXRtcCA9IFJSRUczMihtbUNQX1BRX1NUQVRVUyk7CisJdG1wID0g UkVHX1NFVF9GSUVMRCh0bXAsIENQX1BRX1NUQVRVUywgRE9PUkJFTExfRU5BQkxFLCAxKTsKKwlX UkVHMzIobW1DUF9QUV9TVEFUVVMsIHRtcCk7Cit9CisKK3N0YXRpYyBpbnQgZ2Z4X3Y4XzBfbXFk X2NvbW1pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgc3RydWN0IHZpX21xZCAqbXFkKQog ewogCXVpbnQzMl90IHRtcDsKLQlpbnQgajsKIAogCS8qIGRpc2FibGUgd3B0ciBwb2xsaW5nICov CiAJdG1wID0gUlJFRzMyKG1tQ1BfUFFfV1BUUl9QT0xMX0NOVEwpOwpAQCAtNDc4OSwxOCArNDgz MSwxMCBAQCBzdGF0aWMgaW50IGdmeF92OF8wX2tpcV9pbml0X3JlZ2lzdGVyKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2LAogCS8qIGVuYWJsZSBkb29yYmVsbD8gKi8KIAlXUkVHMzIobW1DUF9I UURfUFFfRE9PUkJFTExfQ09OVFJPTCwgbXFkLT5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJvbCk7 CiAKLQkvKiBkaXNhYmxlIHRoZSBxdWV1ZSBpZiBpdCdzIGFjdGl2ZSAqLwotCWlmIChSUkVHMzIo bW1DUF9IUURfQUNUSVZFKSAmIDEpIHsKLQkJV1JFRzMyKG1tQ1BfSFFEX0RFUVVFVUVfUkVRVUVT VCwgMSk7Ci0JCWZvciAoaiA9IDA7IGogPCBhZGV2LT51c2VjX3RpbWVvdXQ7IGorKykgewotCQkJ aWYgKCEoUlJFRzMyKG1tQ1BfSFFEX0FDVElWRSkgJiAxKSkKLQkJCQlicmVhazsKLQkJCXVkZWxh eSgxKTsKLQkJfQotCQlXUkVHMzIobW1DUF9IUURfREVRVUVVRV9SRVFVRVNULCBtcWQtPmNwX2hx ZF9kZXF1ZXVlX3JlcXVlc3QpOwotCQlXUkVHMzIobW1DUF9IUURfUFFfUlBUUiwgbXFkLT5jcF9o cWRfcHFfcnB0cik7Ci0JCVdSRUczMihtbUNQX0hRRF9QUV9XUFRSLCBtcWQtPmNwX2hxZF9wcV93 cHRyKTsKLQl9CisJLyogc2V0IHBxIHJlYWQvd3JpdGUgcG9pbnRlcnMgKi8KKwlXUkVHMzIobW1D UF9IUURfREVRVUVVRV9SRVFVRVNULCBtcWQtPmNwX2hxZF9kZXF1ZXVlX3JlcXVlc3QpOworCVdS RUczMihtbUNQX0hRRF9QUV9SUFRSLCBtcWQtPmNwX2hxZF9wcV9ycHRyKTsKKwlXUkVHMzIobW1D UF9IUURfUFFfV1BUUiwgbXFkLT5jcF9ocWRfcHFfd3B0cik7CiAKIAkvKiBzZXQgdGhlIHBvaW50 ZXIgdG8gdGhlIE1RRCAqLwogCVdSRUczMihtbUNQX01RRF9CQVNFX0FERFIsIG1xZC0+Y3BfbXFk X2Jhc2VfYWRkcl9sbyk7CkBAIC00ODI3LDE2ICs0ODYxLDYgQEAgc3RhdGljIGludCBnZnhfdjhf MF9raXFfaW5pdF9yZWdpc3RlcihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKIAlXUkVHMzIo bW1DUF9IUURfUFFfV1BUUl9QT0xMX0FERFJfSEksIG1xZC0+Y3BfaHFkX3BxX3dwdHJfcG9sbF9h ZGRyX2hpKTsKIAogCS8qIGVuYWJsZSB0aGUgZG9vcmJlbGwgaWYgcmVxdWVzdGVkICovCi0JaWYg KHJpbmctPnVzZV9kb29yYmVsbCkgewotCQlpZiAoKGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX0NB UlJJWk8pIHx8Ci0JCQkJKGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX0ZJSkkpIHx8Ci0JCQkJKGFk ZXYtPmFzaWNfdHlwZSA9PSBDSElQX1NUT05FWSkpIHsKLQkJCVdSRUczMihtbUNQX01FQ19ET09S QkVMTF9SQU5HRV9MT1dFUiwKLQkJCQkJCUFNREdQVV9ET09SQkVMTF9LSVEgPDwgMik7Ci0JCQlX UkVHMzIobW1DUF9NRUNfRE9PUkJFTExfUkFOR0VfVVBQRVIsCi0JCQkJCQlBTURHUFVfRE9PUkJF TExfTUVDX1JJTkc3IDw8IDIpOwotCQl9Ci0JfQogCVdSRUczMihtbUNQX0hRRF9QUV9ET09SQkVM TF9DT05UUk9MLCBtcWQtPmNwX2hxZF9wcV9kb29yYmVsbF9jb250cm9sKTsKIAogCS8qIHJlc2V0 IHJlYWQgYW5kIHdyaXRlIHBvaW50ZXJzLCBzaW1pbGFyIHRvIENQX1JCMF9XUFRSL19SUFRSICov CkBAIC00ODUwLDE2ICs0ODc0LDEwIEBAIHN0YXRpYyBpbnQgZ2Z4X3Y4XzBfa2lxX2luaXRfcmVn aXN0ZXIoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCiAJLyogYWN0aXZhdGUgdGhlIHF1ZXVl ICovCiAJV1JFRzMyKG1tQ1BfSFFEX0FDVElWRSwgbXFkLT5jcF9ocWRfYWN0aXZlKTsKIAotCWlm IChyaW5nLT51c2VfZG9vcmJlbGwpIHsKLQkJdG1wID0gUlJFRzMyKG1tQ1BfUFFfU1RBVFVTKTsK LQkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX1BRX1NUQVRVUywgRE9PUkJFTExfRU5BQkxF LCAxKTsKLQkJV1JFRzMyKG1tQ1BfUFFfU1RBVFVTLCB0bXApOwotCX0KLQogCXJldHVybiAwOwog fQogCi1zdGF0aWMgaW50IGdmeF92OF8wX2tpcV9pbml0X3F1ZXVlKHN0cnVjdCBhbWRncHVfcmlu ZyAqcmluZywKK3N0YXRpYyBpbnQgZ2Z4X3Y4XzBfa2lxX3F1ZXVlX2luaXQoc3RydWN0IGFtZGdw dV9yaW5nICpyaW5nLAogCQkJCSAgIHN0cnVjdCB2aV9tcWQgKm1xZCwKIAkJCQkgICB1NjQgbXFk X2dwdV9hZGRyKQogewpAQCAtNDg3NiwxNSArNDg5NCwxOCBAQCBzdGF0aWMgaW50IGdmeF92OF8w X2tpcV9pbml0X3F1ZXVlKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKIAkJZ2Z4X3Y4XzBfa2lx X3NldHRpbmcoJmtpcS0+cmluZyk7CiAJfSBlbHNlCiAJCWVvcF9ncHVfYWRkciA9IGFkZXYtPmdm eC5tZWMuaHBkX2VvcF9ncHVfYWRkciArCi0JCQkJCXJpbmctPnF1ZXVlICogTUVDX0hQRF9TSVpF OworCQkJCQlyaW5nLT5xdWV1ZSAqIEdGWDhfTUVDX0hQRF9TSVpFOwogCiAJbXV0ZXhfbG9jaygm YWRldi0+c3JibV9tdXRleCk7CiAJdmlfc3JibV9zZWxlY3QoYWRldiwgcmluZy0+bWUsIHJpbmct PnBpcGUsIHJpbmctPnF1ZXVlLCAwKTsKIAogCWdmeF92OF8wX21xZF9pbml0KGFkZXYsIG1xZCwg bXFkX2dwdV9hZGRyLCBlb3BfZ3B1X2FkZHIsIHJpbmcpOwogCi0JaWYgKGlzX2tpcSkKLQkJZ2Z4 X3Y4XzBfa2lxX2luaXRfcmVnaXN0ZXIoYWRldiwgbXFkLCByaW5nKTsKKwlpZiAoaXNfa2lxKSB7 CisJCWdmeF92OF8wX21xZF9kZWFjdGl2YXRlKGFkZXYpOworCQlnZnhfdjhfMF9lbmFibGVfZG9v cmJlbGwoYWRldiwgcmluZy0+dXNlX2Rvb3JiZWxsKTsKKwkJZ2Z4X3Y4XzBfbXFkX2NvbW1pdChh ZGV2LCBtcWQpOworCX0KIAogCXZpX3NyYm1fc2VsZWN0KGFkZXYsIDAsIDAsIDAsIDApOwogCW11 dGV4X3VubG9jaygmYWRldi0+c3JibV9tdXRleCk7CkBAIC00OTIxLDkgKzQ5NDIsMTAgQEAgc3Rh dGljIGludCBnZnhfdjhfMF9raXFfc2V0dXBfcXVldWUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYsCiAJdTMyICpidWY7CiAJaW50IHIgPSAwOwogCi0JciA9IGFtZGdwdV9ib19jcmVhdGVfa2Vy bmVsKGFkZXYsIHNpemVvZihzdHJ1Y3QgdmlfbXFkKSwgUEFHRV9TSVpFLAotCQkJCSAgICBBTURH UFVfR0VNX0RPTUFJTl9HVFQsICZyaW5nLT5tcWRfb2JqLAotCQkJCSAgICAmbXFkX2dwdV9hZGRy LCAodm9pZCAqKikmYnVmKTsKKwlyID0gYW1kZ3B1X2JvX2NyZWF0ZV9rZXJuZWwoYWRldiwgc2l6 ZW9mKHN0cnVjdCB2aV9tcWQpLAorCQkJUEFHRV9TSVpFLCBBTURHUFVfR0VNX0RPTUFJTl9HVFQs CisJCQkmcmluZy0+bXFkX29iaiwgJm1xZF9ncHVfYWRkciwKKwkJCSh2b2lkICoqKSZidWYpOwog CWlmIChyKSB7CiAJCWRldl93YXJuKGFkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgcmluZyBt cWQgb2IgKCVkKSIsIHIpOwogCQlyZXR1cm4gcjsKQEAgLTQ5MzMsNyArNDk1NSw3IEBAIHN0YXRp YyBpbnQgZ2Z4X3Y4XzBfa2lxX3NldHVwX3F1ZXVlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LAogCW1lbXNldChidWYsIDAsIHNpemVvZihzdHJ1Y3QgdmlfbXFkKSk7CiAJbXFkID0gKHN0cnVj dCB2aV9tcWQgKilidWY7CiAKLQlyID0gZ2Z4X3Y4XzBfa2lxX2luaXRfcXVldWUocmluZywgbXFk LCBtcWRfZ3B1X2FkZHIpOworCXIgPSBnZnhfdjhfMF9raXFfcXVldWVfaW5pdChyaW5nLCBtcWQs IG1xZF9ncHVfYWRkcik7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCkBAIC00OTc5LDI0NiArNTAw MSw5OSBAQCBzdGF0aWMgaW50IGdmeF92OF8wX2tpcV9yZXN1bWUoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2Z4X3Y4XzBfY3BfY29tcHV0 ZV9yZXN1bWUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCitzdGF0aWMgaW50IGdmeF92OF8w X2NvbXB1dGVfcXVldWVfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKKwkJCQkgICAg ICAgaW50IHJpbmdfaWQpCiB7Ci0JaW50IHIsIGksIGo7Ci0JdTMyIHRtcDsKLQlib29sIHVzZV9k b29yYmVsbCA9IHRydWU7Ci0JdTY0IGhxZF9ncHVfYWRkcjsKLQl1NjQgbXFkX2dwdV9hZGRyOwor CWludCByOwogCXU2NCBlb3BfZ3B1X2FkZHI7Ci0JdTY0IHdiX2dwdV9hZGRyOwotCXUzMiAqYnVm OworCXU2NCBtcWRfZ3B1X2FkZHI7CiAJc3RydWN0IHZpX21xZCAqbXFkOworCXN0cnVjdCBhbWRn cHVfcmluZyAqcmluZyA9ICZhZGV2LT5nZnguY29tcHV0ZV9yaW5nW3JpbmdfaWRdOwogCi0JLyog aW5pdCB0aGUgcXVldWVzLiAgKi8KLQlmb3IgKGkgPSAwOyBpIDwgYWRldi0+Z2Z4Lm51bV9jb21w dXRlX3JpbmdzOyBpKyspIHsKLQkJc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nID0gJmFkZXYtPmdm eC5jb21wdXRlX3JpbmdbaV07Ci0KLQkJaWYgKHJpbmctPm1xZF9vYmogPT0gTlVMTCkgewotCQkJ ciA9IGFtZGdwdV9ib19jcmVhdGUoYWRldiwKLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IHZpX21x ZCksCi0JCQkJCSAgICAgUEFHRV9TSVpFLCB0cnVlLAotCQkJCQkgICAgIEFNREdQVV9HRU1fRE9N QUlOX0dUVCwgMCwgTlVMTCwKLQkJCQkJICAgICBOVUxMLCAmcmluZy0+bXFkX29iaik7Ci0JCQlp ZiAocikgewotCQkJCWRldl93YXJuKGFkZXYtPmRldiwgIiglZCkgY3JlYXRlIE1RRCBibyBmYWls ZWRcbiIsIHIpOwotCQkJCXJldHVybiByOwotCQkJfQotCQl9Ci0KLQkJciA9IGFtZGdwdV9ib19y ZXNlcnZlKHJpbmctPm1xZF9vYmosIGZhbHNlKTsKLQkJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsK LQkJCWdmeF92OF8wX2NwX2NvbXB1dGVfZmluaShhZGV2KTsKLQkJCXJldHVybiByOwotCQl9Ci0J CXIgPSBhbWRncHVfYm9fcGluKHJpbmctPm1xZF9vYmosIEFNREdQVV9HRU1fRE9NQUlOX0dUVCwK LQkJCQkgICZtcWRfZ3B1X2FkZHIpOwotCQlpZiAocikgewotCQkJZGV2X3dhcm4oYWRldi0+ZGV2 LCAiKCVkKSBwaW4gTVFEIGJvIGZhaWxlZFxuIiwgcik7Ci0JCQlnZnhfdjhfMF9jcF9jb21wdXRl X2ZpbmkoYWRldik7Ci0JCQlyZXR1cm4gcjsKLQkJfQotCQlyID0gYW1kZ3B1X2JvX2ttYXAocmlu Zy0+bXFkX29iaiwgKHZvaWQgKiopJmJ1Zik7CisJaWYgKHJpbmctPm1xZF9vYmogPT0gTlVMTCkg eworCQlyID0gYW1kZ3B1X2JvX2NyZWF0ZShhZGV2LAorCQkJCXNpemVvZihzdHJ1Y3QgdmlfbXFk KSwKKwkJCQlQQUdFX1NJWkUsIHRydWUsCisJCQkJQU1ER1BVX0dFTV9ET01BSU5fR1RULCAwLCBO VUxMLAorCQkJCU5VTEwsICZyaW5nLT5tcWRfb2JqKTsKIAkJaWYgKHIpIHsKLQkJCWRldl93YXJu KGFkZXYtPmRldiwgIiglZCkgbWFwIE1RRCBibyBmYWlsZWRcbiIsIHIpOwotCQkJZ2Z4X3Y4XzBf Y3BfY29tcHV0ZV9maW5pKGFkZXYpOworCQkJZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBjcmVh dGUgTVFEIGJvIGZhaWxlZFxuIiwgcik7CiAJCQlyZXR1cm4gcjsKIAkJfQorCX0KIAotCQkvKiBp bml0IHRoZSBtcWQgc3RydWN0ICovCi0JCW1lbXNldChidWYsIDAsIHNpemVvZihzdHJ1Y3Qgdmlf bXFkKSk7Ci0KLQkJbXFkID0gKHN0cnVjdCB2aV9tcWQgKilidWY7Ci0JCW1xZC0+aGVhZGVyID0g MHhDMDMxMDgwMDsKLQkJbXFkLT5jb21wdXRlX3BpcGVsaW5lc3RhdF9lbmFibGUgPSAweDAwMDAw MDAxOwotCQltcWQtPmNvbXB1dGVfc3RhdGljX3RocmVhZF9tZ210X3NlMCA9IDB4ZmZmZmZmZmY7 Ci0JCW1xZC0+Y29tcHV0ZV9zdGF0aWNfdGhyZWFkX21nbXRfc2UxID0gMHhmZmZmZmZmZjsKLQkJ bXFkLT5jb21wdXRlX3N0YXRpY190aHJlYWRfbWdtdF9zZTIgPSAweGZmZmZmZmZmOwotCQltcWQt PmNvbXB1dGVfc3RhdGljX3RocmVhZF9tZ210X3NlMyA9IDB4ZmZmZmZmZmY7Ci0JCW1xZC0+Y29t cHV0ZV9taXNjX3Jlc2VydmVkID0gMHgwMDAwMDAwMzsKLQotCQltdXRleF9sb2NrKCZhZGV2LT5z cmJtX211dGV4KTsKLQkJdmlfc3JibV9zZWxlY3QoYWRldiwgcmluZy0+bWUsCi0JCQkgICAgICAg cmluZy0+cGlwZSwKLQkJCSAgICAgICByaW5nLT5xdWV1ZSwgMCk7Ci0KLQkJZW9wX2dwdV9hZGRy ID0gYWRldi0+Z2Z4Lm1lYy5ocGRfZW9wX2dwdV9hZGRyICsgKGkgKiBNRUNfSFBEX1NJWkUpOwot CQllb3BfZ3B1X2FkZHIgPj49IDg7Ci0KLQkJLyogd3JpdGUgdGhlIEVPUCBhZGRyICovCi0JCVdS RUczMihtbUNQX0hRRF9FT1BfQkFTRV9BRERSLCBlb3BfZ3B1X2FkZHIpOwotCQlXUkVHMzIobW1D UF9IUURfRU9QX0JBU0VfQUREUl9ISSwgdXBwZXJfMzJfYml0cyhlb3BfZ3B1X2FkZHIpKTsKLQot CQkvKiBzZXQgdGhlIFZNSUQgYXNzaWduZWQgKi8KLQkJV1JFRzMyKG1tQ1BfSFFEX1ZNSUQsIDAp OwotCi0JCS8qIHNldCB0aGUgRU9QIHNpemUsIHJlZ2lzdGVyIHZhbHVlIGlzIDJeKEVPUF9TSVpF KzEpIGR3b3JkcyAqLwotCQl0bXAgPSBSUkVHMzIobW1DUF9IUURfRU9QX0NPTlRST0wpOwotCQl0 bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfSFFEX0VPUF9DT05UUk9MLCBFT1BfU0laRSwKLQkJ CQkgICAgKG9yZGVyX2Jhc2VfMihNRUNfSFBEX1NJWkUgLyA0KSAtIDEpKTsKLQkJV1JFRzMyKG1t Q1BfSFFEX0VPUF9DT05UUk9MLCB0bXApOwotCi0JCS8qIGRpc2FibGUgd3B0ciBwb2xsaW5nICov Ci0JCXRtcCA9IFJSRUczMihtbUNQX1BRX1dQVFJfUE9MTF9DTlRMKTsKLQkJdG1wID0gUkVHX1NF VF9GSUVMRCh0bXAsIENQX1BRX1dQVFJfUE9MTF9DTlRMLCBFTiwgMCk7Ci0JCVdSRUczMihtbUNQ X1BRX1dQVFJfUE9MTF9DTlRMLCB0bXApOwotCi0JCW1xZC0+Y3BfaHFkX2VvcF9iYXNlX2FkZHJf bG8gPQotCQkJUlJFRzMyKG1tQ1BfSFFEX0VPUF9CQVNFX0FERFIpOwotCQltcWQtPmNwX2hxZF9l b3BfYmFzZV9hZGRyX2hpID0KLQkJCVJSRUczMihtbUNQX0hRRF9FT1BfQkFTRV9BRERSX0hJKTsK LQotCQkvKiBlbmFibGUgZG9vcmJlbGw/ICovCi0JCXRtcCA9IFJSRUczMihtbUNQX0hRRF9QUV9E T09SQkVMTF9DT05UUk9MKTsKLQkJaWYgKHVzZV9kb29yYmVsbCkgewotCQkJdG1wID0gUkVHX1NF VF9GSUVMRCh0bXAsIENQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MLCBET09SQkVMTF9FTiwgMSk7 Ci0JCX0gZWxzZSB7Ci0JCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfSFFEX1BRX0RPT1JC RUxMX0NPTlRST0wsIERPT1JCRUxMX0VOLCAwKTsKLQkJfQotCQlXUkVHMzIobW1DUF9IUURfUFFf RE9PUkJFTExfQ09OVFJPTCwgdG1wKTsKLQkJbXFkLT5jcF9ocWRfcHFfZG9vcmJlbGxfY29udHJv bCA9IHRtcDsKLQotCQkvKiBkaXNhYmxlIHRoZSBxdWV1ZSBpZiBpdCdzIGFjdGl2ZSAqLwotCQlt cWQtPmNwX2hxZF9kZXF1ZXVlX3JlcXVlc3QgPSAwOwotCQltcWQtPmNwX2hxZF9wcV9ycHRyID0g MDsKLQkJbXFkLT5jcF9ocWRfcHFfd3B0cj0gMDsKLQkJaWYgKFJSRUczMihtbUNQX0hRRF9BQ1RJ VkUpICYgMSkgewotCQkJV1JFRzMyKG1tQ1BfSFFEX0RFUVVFVUVfUkVRVUVTVCwgMSk7Ci0JCQlm b3IgKGogPSAwOyBqIDwgYWRldi0+dXNlY190aW1lb3V0OyBqKyspIHsKLQkJCQlpZiAoIShSUkVH MzIobW1DUF9IUURfQUNUSVZFKSAmIDEpKQotCQkJCQlicmVhazsKLQkJCQl1ZGVsYXkoMSk7Ci0J CQl9Ci0JCQlXUkVHMzIobW1DUF9IUURfREVRVUVVRV9SRVFVRVNULCBtcWQtPmNwX2hxZF9kZXF1 ZXVlX3JlcXVlc3QpOwotCQkJV1JFRzMyKG1tQ1BfSFFEX1BRX1JQVFIsIG1xZC0+Y3BfaHFkX3Bx X3JwdHIpOwotCQkJV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFIsIG1xZC0+Y3BfaHFkX3BxX3dwdHIp OwotCQl9CisJciA9IGFtZGdwdV9ib19yZXNlcnZlKHJpbmctPm1xZF9vYmosIGZhbHNlKTsKKwlp ZiAodW5saWtlbHkociAhPSAwKSkKKwkJZ290byBvdXQ7CiAKLQkJLyogc2V0IHRoZSBwb2ludGVy IHRvIHRoZSBNUUQgKi8KLQkJbXFkLT5jcF9tcWRfYmFzZV9hZGRyX2xvID0gbXFkX2dwdV9hZGRy ICYgMHhmZmZmZmZmYzsKLQkJbXFkLT5jcF9tcWRfYmFzZV9hZGRyX2hpID0gdXBwZXJfMzJfYml0 cyhtcWRfZ3B1X2FkZHIpOwotCQlXUkVHMzIobW1DUF9NUURfQkFTRV9BRERSLCBtcWQtPmNwX21x ZF9iYXNlX2FkZHJfbG8pOwotCQlXUkVHMzIobW1DUF9NUURfQkFTRV9BRERSX0hJLCBtcWQtPmNw X21xZF9iYXNlX2FkZHJfaGkpOwotCi0JCS8qIHNldCBNUUQgdm1pZCB0byAwICovCi0JCXRtcCA9 IFJSRUczMihtbUNQX01RRF9DT05UUk9MKTsKLQkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQ X01RRF9DT05UUk9MLCBWTUlELCAwKTsKLQkJV1JFRzMyKG1tQ1BfTVFEX0NPTlRST0wsIHRtcCk7 Ci0JCW1xZC0+Y3BfbXFkX2NvbnRyb2wgPSB0bXA7Ci0KLQkJLyogc2V0IHRoZSBwb2ludGVyIHRv IHRoZSBIUUQsIHRoaXMgaXMgc2ltaWxhciBDUF9SQjBfQkFTRS9fSEkgKi8KLQkJaHFkX2dwdV9h ZGRyID0gcmluZy0+Z3B1X2FkZHIgPj4gODsKLQkJbXFkLT5jcF9ocWRfcHFfYmFzZV9sbyA9IGhx ZF9ncHVfYWRkcjsKLQkJbXFkLT5jcF9ocWRfcHFfYmFzZV9oaSA9IHVwcGVyXzMyX2JpdHMoaHFk X2dwdV9hZGRyKTsKLQkJV1JFRzMyKG1tQ1BfSFFEX1BRX0JBU0UsIG1xZC0+Y3BfaHFkX3BxX2Jh c2VfbG8pOwotCQlXUkVHMzIobW1DUF9IUURfUFFfQkFTRV9ISSwgbXFkLT5jcF9ocWRfcHFfYmFz ZV9oaSk7Ci0KLQkJLyogc2V0IHVwIHRoZSBIUUQsIHRoaXMgaXMgc2ltaWxhciB0byBDUF9SQjBf Q05UTCAqLwotCQl0bXAgPSBSUkVHMzIobW1DUF9IUURfUFFfQ09OVFJPTCk7Ci0JCXRtcCA9IFJF R19TRVRfRklFTEQodG1wLCBDUF9IUURfUFFfQ09OVFJPTCwgUVVFVUVfU0laRSwKLQkJCQkgICAg KG9yZGVyX2Jhc2VfMihyaW5nLT5yaW5nX3NpemUgLyA0KSAtIDEpKTsKLQkJdG1wID0gUkVHX1NF VF9GSUVMRCh0bXAsIENQX0hRRF9QUV9DT05UUk9MLCBSUFRSX0JMT0NLX1NJWkUsCi0JCQkgICAg ICAgKChvcmRlcl9iYXNlXzIoQU1ER1BVX0dQVV9QQUdFX1NJWkUgLyA0KSAtIDEpIDw8IDgpKTsK LSNpZmRlZiBfX0JJR19FTkRJQU4KLQkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9Q UV9DT05UUk9MLCBFTkRJQU5fU1dBUCwgMSk7Ci0jZW5kaWYKLQkJdG1wID0gUkVHX1NFVF9GSUVM RCh0bXAsIENQX0hRRF9QUV9DT05UUk9MLCBVTk9SRF9ESVNQQVRDSCwgMCk7Ci0JCXRtcCA9IFJF R19TRVRfRklFTEQodG1wLCBDUF9IUURfUFFfQ09OVFJPTCwgUk9RX1BRX0lCX0ZMSVAsIDApOwot CQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfSFFEX1BRX0NPTlRST0wsIFBSSVZfU1RBVEUs IDEpOwotCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfSFFEX1BRX0NPTlRST0wsIEtNRF9R VUVVRSwgMSk7Ci0JCVdSRUczMihtbUNQX0hRRF9QUV9DT05UUk9MLCB0bXApOwotCQltcWQtPmNw X2hxZF9wcV9jb250cm9sID0gdG1wOwotCi0JCS8qIHNldCB0aGUgd2IgYWRkcmVzcyB3ZXRoZXIg aXQncyBlbmFibGVkIG9yIG5vdCAqLwotCQl3Yl9ncHVfYWRkciA9IGFkZXYtPndiLmdwdV9hZGRy ICsgKHJpbmctPnJwdHJfb2ZmcyAqIDQpOwotCQltcWQtPmNwX2hxZF9wcV9ycHRyX3JlcG9ydF9h ZGRyX2xvID0gd2JfZ3B1X2FkZHIgJiAweGZmZmZmZmZjOwotCQltcWQtPmNwX2hxZF9wcV9ycHRy X3JlcG9ydF9hZGRyX2hpID0KLQkJCXVwcGVyXzMyX2JpdHMod2JfZ3B1X2FkZHIpICYgMHhmZmZm OwotCQlXUkVHMzIobW1DUF9IUURfUFFfUlBUUl9SRVBPUlRfQUREUiwKLQkJICAgICAgIG1xZC0+ Y3BfaHFkX3BxX3JwdHJfcmVwb3J0X2FkZHJfbG8pOwotCQlXUkVHMzIobW1DUF9IUURfUFFfUlBU Ul9SRVBPUlRfQUREUl9ISSwKLQkJICAgICAgIG1xZC0+Y3BfaHFkX3BxX3JwdHJfcmVwb3J0X2Fk ZHJfaGkpOwotCi0JCS8qIG9ubHkgdXNlZCBpZiBDUF9QUV9XUFRSX1BPTExfQ05UTC5DUF9QUV9X UFRSX1BPTExfQ05UTF9fRU5fTUFTSz0xICovCi0JCXdiX2dwdV9hZGRyID0gYWRldi0+d2IuZ3B1 X2FkZHIgKyAocmluZy0+d3B0cl9vZmZzICogNCk7Ci0JCW1xZC0+Y3BfaHFkX3BxX3dwdHJfcG9s bF9hZGRyX2xvID0gd2JfZ3B1X2FkZHIgJiAweGZmZmZmZmZjOwotCQltcWQtPmNwX2hxZF9wcV93 cHRyX3BvbGxfYWRkcl9oaSA9IHVwcGVyXzMyX2JpdHMod2JfZ3B1X2FkZHIpICYgMHhmZmZmOwot CQlXUkVHMzIobW1DUF9IUURfUFFfV1BUUl9QT0xMX0FERFIsIG1xZC0+Y3BfaHFkX3BxX3dwdHJf cG9sbF9hZGRyX2xvKTsKLQkJV1JFRzMyKG1tQ1BfSFFEX1BRX1dQVFJfUE9MTF9BRERSX0hJLAot CQkgICAgICAgbXFkLT5jcF9ocWRfcHFfd3B0cl9wb2xsX2FkZHJfaGkpOwotCi0JCS8qIGVuYWJs ZSB0aGUgZG9vcmJlbGwgaWYgcmVxdWVzdGVkICovCi0JCWlmICh1c2VfZG9vcmJlbGwpIHsKLQkJ CWlmICgoYWRldi0+YXNpY190eXBlID09IENISVBfQ0FSUklaTykgfHwKLQkJCSAgICAoYWRldi0+ YXNpY190eXBlID09IENISVBfRklKSSkgfHwKLQkJCSAgICAoYWRldi0+YXNpY190eXBlID09IENI SVBfU1RPTkVZKSB8fAotCQkJICAgIChhZGV2LT5hc2ljX3R5cGUgPT0gQ0hJUF9QT0xBUklTMTEp IHx8Ci0JCQkgICAgKGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX1BPTEFSSVMxMCkgfHwKLQkJCSAg ICAoYWRldi0+YXNpY190eXBlID09IENISVBfUE9MQVJJUzEyKSkgewotCQkJCVdSRUczMihtbUNQ X01FQ19ET09SQkVMTF9SQU5HRV9MT1dFUiwKLQkJCQkgICAgICAgQU1ER1BVX0RPT1JCRUxMX0tJ USA8PCAyKTsKLQkJCQlXUkVHMzIobW1DUF9NRUNfRE9PUkJFTExfUkFOR0VfVVBQRVIsCi0JCQkJ ICAgICAgIEFNREdQVV9ET09SQkVMTF9NRUNfUklORzcgPDwgMik7Ci0JCQl9Ci0JCQl0bXAgPSBS UkVHMzIobW1DUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTCk7Ci0JCQl0bXAgPSBSRUdfU0VUX0ZJ RUxEKHRtcCwgQ1BfSFFEX1BRX0RPT1JCRUxMX0NPTlRST0wsCi0JCQkJCSAgICBET09SQkVMTF9P RkZTRVQsIHJpbmctPmRvb3JiZWxsX2luZGV4KTsKLQkJCXRtcCA9IFJFR19TRVRfRklFTEQodG1w LCBDUF9IUURfUFFfRE9PUkJFTExfQ09OVFJPTCwgRE9PUkJFTExfRU4sIDEpOwotCQkJdG1wID0g UkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MLCBET09SQkVMTF9T T1VSQ0UsIDApOwotCQkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIENQX0hRRF9QUV9ET09SQkVM TF9DT05UUk9MLCBET09SQkVMTF9ISVQsIDApOwotCQkJbXFkLT5jcF9ocWRfcHFfZG9vcmJlbGxf Y29udHJvbCA9IHRtcDsKKwlyID0gYW1kZ3B1X2JvX3BpbihyaW5nLT5tcWRfb2JqLCBBTURHUFVf R0VNX0RPTUFJTl9HVFQsCisJCQkmbXFkX2dwdV9hZGRyKTsKKwlpZiAocikgeworCQlkZXZfd2Fy bihhZGV2LT5kZXYsICIoJWQpIHBpbiBNUUQgYm8gZmFpbGVkXG4iLCByKTsKKwkJZ290byBvdXRf dW5yZXNlcnZlOworCX0KKwlyID0gYW1kZ3B1X2JvX2ttYXAocmluZy0+bXFkX29iaiwgKHZvaWQg KiopJm1xZCk7CisJaWYgKHIpIHsKKwkJZGV2X3dhcm4oYWRldi0+ZGV2LCAiKCVkKSBtYXAgTVFE IGJvIGZhaWxlZFxuIiwgcik7CisJCWdvdG8gb3V0X3VucmVzZXJ2ZTsKKwl9CiAKLQkJfSBlbHNl IHsKLQkJCW1xZC0+Y3BfaHFkX3BxX2Rvb3JiZWxsX2NvbnRyb2wgPSAwOwotCQl9Ci0JCVdSRUcz MihtbUNQX0hRRF9QUV9ET09SQkVMTF9DT05UUk9MLAotCQkgICAgICAgbXFkLT5jcF9ocWRfcHFf ZG9vcmJlbGxfY29udHJvbCk7Ci0KLQkJLyogcmVzZXQgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMs IHNpbWlsYXIgdG8gQ1BfUkIwX1dQVFIvX1JQVFIgKi8KLQkJcmluZy0+d3B0ciA9IDA7Ci0JCW1x ZC0+Y3BfaHFkX3BxX3dwdHIgPSByaW5nLT53cHRyOwotCQlXUkVHMzIobW1DUF9IUURfUFFfV1BU UiwgbXFkLT5jcF9ocWRfcHFfd3B0cik7Ci0JCW1xZC0+Y3BfaHFkX3BxX3JwdHIgPSBSUkVHMzIo bW1DUF9IUURfUFFfUlBUUik7Ci0KLQkJLyogc2V0IHRoZSB2bWlkIGZvciB0aGUgcXVldWUgKi8K LQkJbXFkLT5jcF9ocWRfdm1pZCA9IDA7Ci0JCVdSRUczMihtbUNQX0hRRF9WTUlELCBtcWQtPmNw X2hxZF92bWlkKTsKLQotCQl0bXAgPSBSUkVHMzIobW1DUF9IUURfUEVSU0lTVEVOVF9TVEFURSk7 Ci0JCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBDUF9IUURfUEVSU0lTVEVOVF9TVEFURSwgUFJF TE9BRF9TSVpFLCAweDUzKTsKLQkJV1JFRzMyKG1tQ1BfSFFEX1BFUlNJU1RFTlRfU1RBVEUsIHRt cCk7Ci0JCW1xZC0+Y3BfaHFkX3BlcnNpc3RlbnRfc3RhdGUgPSB0bXA7Ci0JCWlmIChhZGV2LT5h c2ljX3R5cGUgPT0gQ0hJUF9TVE9ORVkgfHwKLQkJCWFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX1BP TEFSSVMxMSB8fAotCQkJYWRldi0+YXNpY190eXBlID09IENISVBfUE9MQVJJUzEwIHx8Ci0JCQlh ZGV2LT5hc2ljX3R5cGUgPT0gQ0hJUF9QT0xBUklTMTIpIHsKLQkJCXRtcCA9IFJSRUczMihtbUNQ X01FMV9QSVBFM19JTlRfQ05UTCk7Ci0JCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfTUUx X1BJUEUzX0lOVF9DTlRMLCBHRU5FUklDMl9JTlRfRU5BQkxFLCAxKTsKLQkJCVdSRUczMihtbUNQ X01FMV9QSVBFM19JTlRfQ05UTCwgdG1wKTsKLQkJfQorCWVvcF9ncHVfYWRkciA9IGFkZXYtPmdm eC5tZWMuaHBkX2VvcF9ncHVfYWRkciArIChyaW5nX2lkICogR0ZYOF9NRUNfSFBEX1NJWkUpOwor CWVvcF9ncHVfYWRkciA+Pj0gODsKKworCS8qIGluaXQgdGhlIG1xZCBzdHJ1Y3QgKi8KKwltZW1z ZXQobXFkLCAwLCBzaXplb2Yoc3RydWN0IHZpX21xZCkpOworCisJbXV0ZXhfbG9jaygmYWRldi0+ c3JibV9tdXRleCk7CisJdmlfc3JibV9zZWxlY3QoYWRldiwgcmluZy0+bWUsIHJpbmctPnBpcGUs IHJpbmctPnF1ZXVlLCAwKTsKKworCWdmeF92OF8wX21xZF9pbml0KGFkZXYsIG1xZCwgbXFkX2dw dV9hZGRyLCBlb3BfZ3B1X2FkZHIsIHJpbmcpOwogCi0JCS8qIGFjdGl2YXRlIHRoZSBxdWV1ZSAq LwotCQltcWQtPmNwX2hxZF9hY3RpdmUgPSAxOwotCQlXUkVHMzIobW1DUF9IUURfQUNUSVZFLCBt cWQtPmNwX2hxZF9hY3RpdmUpOworCWdmeF92OF8wX21xZF9kZWFjdGl2YXRlKGFkZXYpOworCWdm eF92OF8wX2VuYWJsZV9kb29yYmVsbChhZGV2LCByaW5nLT51c2VfZG9vcmJlbGwpOworCWdmeF92 OF8wX21xZF9jb21taXQoYWRldiwgbXFkKTsKIAotCQl2aV9zcmJtX3NlbGVjdChhZGV2LCAwLCAw LCAwLCAwKTsKLQkJbXV0ZXhfdW5sb2NrKCZhZGV2LT5zcmJtX211dGV4KTsKKwl2aV9zcmJtX3Nl bGVjdChhZGV2LCAwLCAwLCAwLCAwKTsKKwltdXRleF91bmxvY2soJmFkZXYtPnNyYm1fbXV0ZXgp OworCisJYW1kZ3B1X2JvX2t1bm1hcChyaW5nLT5tcWRfb2JqKTsKK291dF91bnJlc2VydmU6CisJ YW1kZ3B1X2JvX3VucmVzZXJ2ZShyaW5nLT5tcWRfb2JqKTsKK291dDoKKwlyZXR1cm4gcjsKK30K IAotCQlhbWRncHVfYm9fa3VubWFwKHJpbmctPm1xZF9vYmopOwotCQlhbWRncHVfYm9fdW5yZXNl cnZlKHJpbmctPm1xZF9vYmopOworc3RhdGljIGludCBnZnhfdjhfMF9jcF9jb21wdXRlX3Jlc3Vt ZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKK3sKKwlpbnQgciwgaTsKKwl1MzIgdG1wOwor CXN0cnVjdCBhbWRncHVfcmluZyAqcmluZzsKKworCS8qIFN0YXRpbmcgd2l0aCBnZnh2OCwgYWxs IHRoZSBwaXBlIHNwZWNpZmljIHN0YXRlIHdhcyByZW1vdmVkCisJICogVGhlIGZpZWxkcyBoYXZl IGJlZW4gbW92ZWQgdG8gYmUgcGVyLUhRRCBub3cuICovCisKKwkvKiBpbml0IHRoZSBxdWV1ZXMg Ki8KKwlmb3IgKGkgPSAwOyBpIDwgYWRldi0+Z2Z4Lm51bV9jb21wdXRlX3JpbmdzOyBpKyspIHsK KwkJciA9IGdmeF92OF8wX2NvbXB1dGVfcXVldWVfaW5pdChhZGV2LCBpKTsKKwkJaWYgKHIpIHsK KwkJCWdmeF92OF8wX2NwX2NvbXB1dGVfZmluaShhZGV2KTsKKwkJCXJldHVybiByOworCQl9CiAJ fQogCi0JaWYgKHVzZV9kb29yYmVsbCkgewotCQl0bXAgPSBSUkVHMzIobW1DUF9QUV9TVEFUVVMp OwotCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfUFFfU1RBVFVTLCBET09SQkVMTF9FTkFC TEUsIDEpOwotCQlXUkVHMzIobW1DUF9QUV9TVEFUVVMsIHRtcCk7CisJaWYgKGFkZXYtPmFzaWNf dHlwZSA9PSBDSElQX1NUT05FWSB8fAorCSAgICBhZGV2LT5hc2ljX3R5cGUgPT0gQ0hJUF9QT0xB UklTMTEgfHwKKwkgICAgYWRldi0+YXNpY190eXBlID09IENISVBfUE9MQVJJUzEwIHx8CisJICAg IGFkZXYtPmFzaWNfdHlwZSA9PSBDSElQX1BPTEFSSVMxMikgeworCQl0bXAgPSBSUkVHMzIobW1D UF9NRTFfUElQRTNfSU5UX0NOVEwpOworCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQ1BfTUUx X1BJUEUzX0lOVF9DTlRMLCBHRU5FUklDMl9JTlRfRU5BQkxFLCAxKTsKKwkJV1JFRzMyKG1tQ1Bf TUUxX1BJUEUzX0lOVF9DTlRMLCB0bXApOwogCX0KIAogCWdmeF92OF8wX2NwX2NvbXB1dGVfZW5h YmxlKGFkZXYsIHRydWUpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5udW1fY29tcHV0 ZV9yaW5nczsgaSsrKSB7Ci0JCXN0cnVjdCBhbWRncHVfcmluZyAqcmluZyA9ICZhZGV2LT5nZngu Y29tcHV0ZV9yaW5nW2ldOworCQlyaW5nID0gJmFkZXYtPmdmeC5jb21wdXRlX3JpbmdbaV07CiAK IAkJcmluZy0+cmVhZHkgPSB0cnVlOwogCQlyID0gYW1kZ3B1X3JpbmdfdGVzdF9yaW5nKHJpbmcp OwotLSAKMi45LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=