From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xiaojie Yuan Subject: [PATCH v2] drm/amdgpu: add DP audio support for si dce6 (v2) Date: Wed, 22 Feb 2017 11:33:55 +0800 Message-ID: <1487734435-27287-1-git-send-email-Xiaojie.Yuan@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: 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: Xiaojie Yuan djI6IHJlZmluZSBkY2VfdjZfMF9hdWRpb19lbmRwdF93cmVnKCkgYW5kIHVuaWZ5IGluY29uc2lz dGVudCBtZXRob2QgbmFtZXMKClNpZ25lZC1vZmYtYnk6IFhpYW9qaWUgWXVhbiA8WGlhb2ppZS5Z dWFuQGFtZC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZGNlX3Y2XzAuYyAg ICAgICAgICAgICAgfCA0NTcgKysrKysrKysrKysrKysrKysrKy0tCiAuLi4vZHJtL2FtZC9pbmNs dWRlL2FzaWNfcmVnL2RjZS9kY2VfNl8wX3NoX21hc2suaCB8ICAgMiArCiAyIGZpbGVzIGNoYW5n ZWQsIDQyMyBpbnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9kY2VfdjZfMC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvZGNlX3Y2XzAuYwppbmRleCA5NDg3N2NiLi5jYjUxMzdjIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9kY2VfdjZfMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2RjZV92Nl8wLmMKQEAgLTExOCwxNCArMTE4LDI3IEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3Qgewogc3RhdGljIHUzMiBkY2VfdjZfMF9hdWRpb19lbmRwdF9ycmVnKHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2LAogCQkJCSAgICAgdTMyIGJsb2NrX29mZnNldCwgdTMyIHJlZykKIHsK LQlEUk1fSU5GTygieHh4eDogZGNlX3Y2XzBfYXVkaW9fZW5kcHRfcnJlZyAtLS0tbm8gaW1wbCEh ISFcbiIpOwotCXJldHVybiAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHI7CisKKwlz cGluX2xvY2tfaXJxc2F2ZSgmYWRldi0+YXVkaW9fZW5kcHRfaWR4X2xvY2ssIGZsYWdzKTsKKwlX UkVHMzIobW1BWkFMSUFfRjBfQ09ERUNfRU5EUE9JTlRfSU5ERVggKyBibG9ja19vZmZzZXQsIHJl Zyk7CisJciA9IFJSRUczMihtbUFaQUxJQV9GMF9DT0RFQ19FTkRQT0lOVF9EQVRBICsgYmxvY2tf b2Zmc2V0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGV2LT5hdWRpb19lbmRwdF9pZHhf bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyB2b2lkIGRjZV92Nl8wX2F1 ZGlvX2VuZHB0X3dyZWcoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCiAJCQkJICAgICAgdTMy IGJsb2NrX29mZnNldCwgdTMyIHJlZywgdTMyIHYpCiB7Ci0JRFJNX0lORk8oInh4eHg6IGRjZV92 Nl8wX2F1ZGlvX2VuZHB0X3dyZWcgLS0tLW5vIGltcGwhISEhXG4iKTsKKwl1bnNpZ25lZCBsb25n IGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkZXYtPmF1ZGlvX2VuZHB0X2lkeF9sb2Nr LCBmbGFncyk7CisJV1JFRzMyKG1tQVpBTElBX0YwX0NPREVDX0VORFBPSU5UX0lOREVYICsgYmxv Y2tfb2Zmc2V0LAorCQlyZWcgfCBBWkFMSUFfRjBfQ09ERUNfRU5EUE9JTlRfSU5ERVhfX0FaQUxJ QV9FTkRQT0lOVF9SRUdfV1JJVEVfRU5fTUFTSyk7CisJV1JFRzMyKG1tQVpBTElBX0YwX0NPREVD X0VORFBPSU5UX0RBVEEgKyBibG9ja19vZmZzZXQsIHYpOworCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmFkZXYtPmF1ZGlvX2VuZHB0X2lkeF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBib29s IGRjZV92Nl8wX2lzX2luX3ZibGFuayhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgaW50IGNy dGMpCkBAIC0xMjMxLDE3ICsxMjQ0LDE3IEBAIHN0YXRpYyB2b2lkIGRjZV92Nl8wX2JhbmR3aWR0 aF91cGRhdGUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiAJCWRjZV92Nl8wX3Byb2dyYW1f d2F0ZXJtYXJrcyhhZGV2LCBhZGV2LT5tb2RlX2luZm8uY3J0Y3NbaSsxXSwgbGJfc2l6ZSwgbnVt X2hlYWRzKTsKIAl9CiB9Ci0vKgorCiBzdGF0aWMgdm9pZCBkY2VfdjZfMF9hdWRpb19nZXRfY29u bmVjdGVkX3BpbnMoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiB7CiAJaW50IGk7Ci0JdTMy IG9mZnNldCwgdG1wOworCXUzMiB0bXA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRldi0+bW9kZV9p bmZvLmF1ZGlvLm51bV9waW5zOyBpKyspIHsKLQkJb2Zmc2V0ID0gYWRldi0+bW9kZV9pbmZvLmF1 ZGlvLnBpbltpXS5vZmZzZXQ7Ci0JCXRtcCA9IFJSRUczMl9BVURJT19FTkRQVChvZmZzZXQsCi0J CQkJICAgICAgQVpfRjBfQ09ERUNfUElOX0NPTlRST0xfUkVTUE9OU0VfQ09ORklHVVJBVElPTl9E RUZBVUxUKTsKLQkJaWYgKCgodG1wICYgUE9SVF9DT05ORUNUSVZJVFlfTUFTSykgPj4gUE9SVF9D T05ORUNUSVZJVFlfU0hJRlQpID09IDEpCisJCXRtcCA9IFJSRUczMl9BVURJT19FTkRQVChhZGV2 LT5tb2RlX2luZm8uYXVkaW8ucGluW2ldLm9mZnNldCwKKwkJCQlpeEFaQUxJQV9GMF9DT0RFQ19Q SU5fQ09OVFJPTF9SRVNQT05TRV9DT05GSUdVUkFUSU9OX0RFRkFVTFQpOworCQlpZiAoUkVHX0dF VF9GSUVMRCh0bXAsIEFaQUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJPTF9SRVNQT05TRV9DT05GSUdV UkFUSU9OX0RFRkFVTFQsCisJCQkJCVBPUlRfQ09OTkVDVElWSVRZKSkKIAkJCWFkZXYtPm1vZGVf aW5mby5hdWRpby5waW5baV0uY29ubmVjdGVkID0gZmFsc2U7CiAJCWVsc2UKIAkJCWFkZXYtPm1v ZGVfaW5mby5hdWRpby5waW5baV0uY29ubmVjdGVkID0gdHJ1ZTsKQEAgLTEyNjMsNDUgKzEyNzYs MjA2IEBAIHN0YXRpYyBzdHJ1Y3QgYW1kZ3B1X2F1ZGlvX3BpbiAqZGNlX3Y2XzBfYXVkaW9fZ2V0 X3BpbihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRlCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRp YyB2b2lkIGRjZV92Nl8wX2FmbXRfYXVkaW9fc2VsZWN0X3BpbihzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIpCitzdGF0aWMgdm9pZCBkY2VfdjZfMF9hdWRpb19zZWxlY3RfcGluKHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlcikKIHsKIAlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGVu Y29kZXItPmRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGFtZGdwdV9lbmNvZGVyICphbWRncHVf ZW5jb2RlciA9IHRvX2FtZGdwdV9lbmNvZGVyKGVuY29kZXIpOwogCXN0cnVjdCBhbWRncHVfZW5j b2Rlcl9hdG9tX2RpZyAqZGlnID0gYW1kZ3B1X2VuY29kZXItPmVuY19wcml2OwotCXUzMiBvZmZz ZXQ7CiAKIAlpZiAoIWRpZyB8fCAhZGlnLT5hZm10IHx8ICFkaWctPmFmbXQtPnBpbikKIAkJcmV0 dXJuOwogCi0Jb2Zmc2V0ID0gZGlnLT5hZm10LT5vZmZzZXQ7Ci0KLQlXUkVHMzIoQUZNVF9BVURJ T19TUkNfQ09OVFJPTCArIG9mZnNldCwKLQkgICAgICAgQUZNVF9BVURJT19TUkNfU0VMRUNUKGRp Zy0+YWZtdC0+cGluLT5pZCkpOwotCisJV1JFRzMyKG1tQUZNVF9BVURJT19TUkNfQ09OVFJPTCAr IGRpZy0+YWZtdC0+b2Zmc2V0LAorCSAgICAgICBSRUdfU0VUX0ZJRUxEKDAsIEFGTVRfQVVESU9f U1JDX0NPTlRST0wsIEFGTVRfQVVESU9fU1JDX1NFTEVDVCwKKwkJICAgICAgICAgICAgIGRpZy0+ YWZtdC0+cGluLT5pZCkpOwogfQogCiBzdGF0aWMgdm9pZCBkY2VfdjZfMF9hdWRpb193cml0ZV9s YXRlbmN5X2ZpZWxkcyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCiAJCQkJCQlzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKIHsKLQlEUk1fSU5GTygieHh4eDogZGNlX3Y2XzBfYXVk aW9fd3JpdGVfbGF0ZW5jeV9maWVsZHMtLS1ubyBpbXAhISEhIVxuIik7CisJc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYgPSBlbmNvZGVyLT5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBhbWRn cHVfZW5jb2RlciAqYW1kZ3B1X2VuY29kZXIgPSB0b19hbWRncHVfZW5jb2RlcihlbmNvZGVyKTsK KwlzdHJ1Y3QgYW1kZ3B1X2VuY29kZXJfYXRvbV9kaWcgKmRpZyA9IGFtZGdwdV9lbmNvZGVyLT5l bmNfcHJpdjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBhbWRn cHVfY29ubmVjdG9yICphbWRncHVfY29ubmVjdG9yID0gTlVMTDsKKwlpbnQgaW50ZXJsYWNlID0g MDsKKwl1MzIgdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZlbmNvZGVy LT5kZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWlmIChjb25uZWN0 b3ItPmVuY29kZXIgPT0gZW5jb2RlcikgeworCQkJYW1kZ3B1X2Nvbm5lY3RvciA9IHRvX2FtZGdw dV9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFhbWRn cHVfY29ubmVjdG9yKSB7CisJCURSTV9FUlJPUigiQ291bGRuJ3QgZmluZCBlbmNvZGVyJ3MgY29u bmVjdG9yXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RF X0ZMQUdfSU5URVJMQUNFKQorCQlpbnRlcmxhY2UgPSAxOworCisJaWYgKGNvbm5lY3Rvci0+bGF0 ZW5jeV9wcmVzZW50W2ludGVybGFjZV0pIHsKKwkJdG1wID0gUkVHX1NFVF9GSUVMRCgwLCBBWkFM SUFfRjBfQ09ERUNfUElOX0NPTlRST0xfUkVTUE9OU0VfTElQU1lOQywKKwkJCQlWSURFT19MSVBT WU5DLCBjb25uZWN0b3ItPnZpZGVvX2xhdGVuY3lbaW50ZXJsYWNlXSk7CisJCXRtcCA9IFJFR19T RVRfRklFTEQodG1wLCBBWkFMSUFfRjBfQ09ERUNfUElOX0NPTlRST0xfUkVTUE9OU0VfTElQU1lO QywKKwkJCQlBVURJT19MSVBTWU5DLCBjb25uZWN0b3ItPmF1ZGlvX2xhdGVuY3lbaW50ZXJsYWNl XSk7CisJfSBlbHNlIHsKKwkJdG1wID0gUkVHX1NFVF9GSUVMRCgwLCBBWkFMSUFfRjBfQ09ERUNf UElOX0NPTlRST0xfUkVTUE9OU0VfTElQU1lOQywKKwkJCQlWSURFT19MSVBTWU5DLCAwKTsKKwkJ dG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIEFaQUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJPTF9SRVNQ T05TRV9MSVBTWU5DLAorCQkJCUFVRElPX0xJUFNZTkMsIDApOworCX0KKwlXUkVHMzJfQVVESU9f RU5EUFQoZGlnLT5hZm10LT5waW4tPm9mZnNldCwKKwkJCSAgIGl4QVpBTElBX0YwX0NPREVDX1BJ Tl9DT05UUk9MX1JFU1BPTlNFX0xJUFNZTkMsIHRtcCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRjZV92 Nl8wX2F1ZGlvX3dyaXRlX3NwZWFrZXJfYWxsb2NhdGlvbihzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIpCiB7Ci0JRFJNX0lORk8oInh4eHg6IGRjZV92Nl8wX2F1ZGlvX3dyaXRlX3NwZWFrZXJf YWxsb2NhdGlvbi0tLW5vIGltcCEhISEhXG4iKTsKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diA9IGVuY29kZXItPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGFtZGdwdV9lbmNvZGVyICph bWRncHVfZW5jb2RlciA9IHRvX2FtZGdwdV9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCBhbWRn cHVfZW5jb2Rlcl9hdG9tX2RpZyAqZGlnID0gYW1kZ3B1X2VuY29kZXItPmVuY19wcml2OworCXN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGFtZGdwdV9jb25uZWN0b3Ig KmFtZGdwdV9jb25uZWN0b3IgPSBOVUxMOworCXU4ICpzYWRiID0gTlVMTDsKKwlpbnQgc2FkX2Nv dW50OworCXUzMiB0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmVuY29k ZXItPmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaWYgKGNvbm5l Y3Rvci0+ZW5jb2RlciA9PSBlbmNvZGVyKSB7CisJCQlhbWRncHVfY29ubmVjdG9yID0gdG9fYW1k Z3B1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWFt ZGdwdV9jb25uZWN0b3IpIHsKKwkJRFJNX0VSUk9SKCJDb3VsZG4ndCBmaW5kIGVuY29kZXIncyBj b25uZWN0b3JcbiIpOworCQlyZXR1cm47CisJfQorCisJc2FkX2NvdW50ID0gZHJtX2VkaWRfdG9f c3BlYWtlcl9hbGxvY2F0aW9uKGFtZGdwdV9jb25uZWN0b3JfZWRpZChjb25uZWN0b3IpLCAmc2Fk Yik7CisJaWYgKHNhZF9jb3VudCA8IDApIHsKKwkJRFJNX0VSUk9SKCJDb3VsZG4ndCByZWFkIFNw ZWFrZXIgQWxsb2NhdGlvbiBEYXRhIEJsb2NrOiAlZFxuIiwgc2FkX2NvdW50KTsKKwkJc2FkX2Nv dW50ID0gMDsKKwl9CisKKwkvKiBwcm9ncmFtIHRoZSBzcGVha2VyIGFsbG9jYXRpb24gKi8KKwl0 bXAgPSBSUkVHMzJfQVVESU9fRU5EUFQoZGlnLT5hZm10LT5waW4tPm9mZnNldCwKKwkJCWl4QVpB TElBX0YwX0NPREVDX1BJTl9DT05UUk9MX0NIQU5ORUxfU1BFQUtFUik7CisJdG1wID0gUkVHX1NF VF9GSUVMRCh0bXAsIEFaQUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJPTF9DSEFOTkVMX1NQRUFLRVIs CisJCQlIRE1JX0NPTk5FQ1RJT04sIDApOworCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBBWkFM SUFfRjBfQ09ERUNfUElOX0NPTlRST0xfQ0hBTk5FTF9TUEVBS0VSLAorCQkJRFBfQ09OTkVDVElP TiwgMCk7CisKKwlpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05O RUNUT1JfRGlzcGxheVBvcnQpCisJCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBBWkFMSUFfRjBf Q09ERUNfUElOX0NPTlRST0xfQ0hBTk5FTF9TUEVBS0VSLAorCQkJCURQX0NPTk5FQ1RJT04sIDEp OworCWVsc2UKKwkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIEFaQUxJQV9GMF9DT0RFQ19QSU5f Q09OVFJPTF9DSEFOTkVMX1NQRUFLRVIsCisJCQkJSERNSV9DT05ORUNUSU9OLCAxKTsKKworCWlm IChzYWRfY291bnQpCisJCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBBWkFMSUFfRjBfQ09ERUNf UElOX0NPTlRST0xfQ0hBTk5FTF9TUEVBS0VSLAorCQkJCVNQRUFLRVJfQUxMT0NBVElPTiwgc2Fk YlswXSk7CisJZWxzZQorCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQVpBTElBX0YwX0NPREVD X1BJTl9DT05UUk9MX0NIQU5ORUxfU1BFQUtFUiwKKwkJCQlTUEVBS0VSX0FMTE9DQVRJT04sIDUp OyAvKiBzdGVyZW8gKi8KKworCVdSRUczMl9BVURJT19FTkRQVChkaWctPmFmbXQtPnBpbi0+b2Zm c2V0LAorCQkJaXhBWkFMSUFfRjBfQ09ERUNfUElOX0NPTlRST0xfQ0hBTk5FTF9TUEVBS0VSLCB0 bXApOworCisJa2ZyZWUoc2FkYik7CiB9CiAKIHN0YXRpYyB2b2lkIGRjZV92Nl8wX2F1ZGlvX3dy aXRlX3NhZF9yZWdzKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIHsKLQlEUk1fSU5GTygi eHh4eDogZGNlX3Y2XzBfYXVkaW9fd3JpdGVfc2FkX3JlZ3MtLS1ubyBpbXAhISEhIVxuIik7CisJ c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBlbmNvZGVyLT5kZXYtPmRldl9wcml2YXRlOwor CXN0cnVjdCBhbWRncHVfZW5jb2RlciAqYW1kZ3B1X2VuY29kZXIgPSB0b19hbWRncHVfZW5jb2Rl cihlbmNvZGVyKTsKKwlzdHJ1Y3QgYW1kZ3B1X2VuY29kZXJfYXRvbV9kaWcgKmRpZyA9IGFtZGdw dV9lbmNvZGVyLT5lbmNfcHJpdjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwor CXN0cnVjdCBhbWRncHVfY29ubmVjdG9yICphbWRncHVfY29ubmVjdG9yID0gTlVMTDsKKwlzdHJ1 Y3QgY2VhX3NhZCAqc2FkczsKKwlpbnQgaSwgc2FkX2NvdW50OworCisJc3RhdGljIGNvbnN0IHUx NiBlbGRfcmVnX3RvX3R5cGVbXVsyXSA9IHsKKwkJeyBpeEFaQUxJQV9GMF9DT0RFQ19QSU5fQ09O VFJPTF9BVURJT19ERVNDUklQVE9SMCwgSERNSV9BVURJT19DT0RJTkdfVFlQRV9QQ00gfSwKKwkJ eyBpeEFaQUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJPTF9BVURJT19ERVNDUklQVE9SMSwgSERNSV9B VURJT19DT0RJTkdfVFlQRV9BQzMgfSwKKwkJeyBpeEFaQUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJP TF9BVURJT19ERVNDUklQVE9SMiwgSERNSV9BVURJT19DT0RJTkdfVFlQRV9NUEVHMSB9LAorCQl7 IGl4QVpBTElBX0YwX0NPREVDX1BJTl9DT05UUk9MX0FVRElPX0RFU0NSSVBUT1IzLCBIRE1JX0FV RElPX0NPRElOR19UWVBFX01QMyB9LAorCQl7IGl4QVpBTElBX0YwX0NPREVDX1BJTl9DT05UUk9M X0FVRElPX0RFU0NSSVBUT1I0LCBIRE1JX0FVRElPX0NPRElOR19UWVBFX01QRUcyIH0sCisJCXsg aXhBWkFMSUFfRjBfQ09ERUNfUElOX0NPTlRST0xfQVVESU9fREVTQ1JJUFRPUjUsIEhETUlfQVVE SU9fQ09ESU5HX1RZUEVfQUFDX0xDIH0sCisJCXsgaXhBWkFMSUFfRjBfQ09ERUNfUElOX0NPTlRS T0xfQVVESU9fREVTQ1JJUFRPUjYsIEhETUlfQVVESU9fQ09ESU5HX1RZUEVfRFRTIH0sCisJCXsg aXhBWkFMSUFfRjBfQ09ERUNfUElOX0NPTlRST0xfQVVESU9fREVTQ1JJUFRPUjcsIEhETUlfQVVE SU9fQ09ESU5HX1RZUEVfQVRSQUMgfSwKKwkJeyBpeEFaQUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJP TF9BVURJT19ERVNDUklQVE9SOSwgSERNSV9BVURJT19DT0RJTkdfVFlQRV9FQUMzIH0sCisJCXsg aXhBWkFMSUFfRjBfQ09ERUNfUElOX0NPTlRST0xfQVVESU9fREVTQ1JJUFRPUjEwLCBIRE1JX0FV RElPX0NPRElOR19UWVBFX0RUU19IRCB9LAorCQl7IGl4QVpBTElBX0YwX0NPREVDX1BJTl9DT05U Uk9MX0FVRElPX0RFU0NSSVBUT1IxMSwgSERNSV9BVURJT19DT0RJTkdfVFlQRV9NTFAgfSwKKwkJ eyBpeEFaQUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJPTF9BVURJT19ERVNDUklQVE9SMTMsIEhETUlf QVVESU9fQ09ESU5HX1RZUEVfV01BX1BSTyB9LAorCX07CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5 KGNvbm5lY3RvciwgJmVuY29kZXItPmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhl YWQpIHsKKwkJaWYgKGNvbm5lY3Rvci0+ZW5jb2RlciA9PSBlbmNvZGVyKSB7CisJCQlhbWRncHVf Y29ubmVjdG9yID0gdG9fYW1kZ3B1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCQkJYnJlYWs7CisJ CX0KKwl9CisKKwlpZiAoIWFtZGdwdV9jb25uZWN0b3IpIHsKKwkJRFJNX0VSUk9SKCJDb3VsZG4n dCBmaW5kIGVuY29kZXIncyBjb25uZWN0b3JcbiIpOworCQlyZXR1cm47CisJfQorCisJc2FkX2Nv dW50ID0gZHJtX2VkaWRfdG9fc2FkKGFtZGdwdV9jb25uZWN0b3JfZWRpZChjb25uZWN0b3IpLCAm c2Fkcyk7CisJaWYgKHNhZF9jb3VudCA8PSAwKSB7CisJCURSTV9FUlJPUigiQ291bGRuJ3QgcmVh ZCBTQURzOiAlZFxuIiwgc2FkX2NvdW50KTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGVsZF9yZWdfdG9fdHlwZSk7IGkrKykgeworCQl1MzIgdG1wID0gMDsK KwkJdTggc3RlcmVvX2ZyZXFzID0gMDsKKwkJaW50IG1heF9jaGFubmVscyA9IC0xOworCQlpbnQg ajsKKworCQlmb3IgKGogPSAwOyBqIDwgc2FkX2NvdW50OyBqKyspIHsKKwkJCXN0cnVjdCBjZWFf c2FkICpzYWQgPSAmc2Fkc1tqXTsKKworCQkJaWYgKHNhZC0+Zm9ybWF0ID09IGVsZF9yZWdfdG9f dHlwZVtpXVsxXSkgeworCQkJCWlmIChzYWQtPmNoYW5uZWxzID4gbWF4X2NoYW5uZWxzKSB7CisJ CQkJCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBBWkFMSUFfRjBfQ09ERUNfUElOX0NPTlRST0xf QVVESU9fREVTQ1JJUFRPUjAsCisJCQkJCQkJTUFYX0NIQU5ORUxTLCBzYWQtPmNoYW5uZWxzKTsK KwkJCQkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIEFaQUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJP TF9BVURJT19ERVNDUklQVE9SMCwKKwkJCQkJCQlERVNDUklQVE9SX0JZVEVfMiwgc2FkLT5ieXRl Mik7CisJCQkJCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBBWkFMSUFfRjBfQ09ERUNfUElOX0NP TlRST0xfQVVESU9fREVTQ1JJUFRPUjAsCisJCQkJCQkJU1VQUE9SVEVEX0ZSRVFVRU5DSUVTLCBz YWQtPmZyZXEpOworCQkJCQltYXhfY2hhbm5lbHMgPSBzYWQtPmNoYW5uZWxzOworCQkJCX0KKwor CQkJCWlmIChzYWQtPmZvcm1hdCA9PSBIRE1JX0FVRElPX0NPRElOR19UWVBFX1BDTSkKKwkJCQkJ c3RlcmVvX2ZyZXFzIHw9IHNhZC0+ZnJlcTsKKwkJCQllbHNlCisJCQkJCWJyZWFrOworCQkJfQor CQl9CisKKwkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIEFaQUxJQV9GMF9DT0RFQ19QSU5fQ09O VFJPTF9BVURJT19ERVNDUklQVE9SMCwKKwkJCQlTVVBQT1JURURfRlJFUVVFTkNJRVNfU1RFUkVP LCBzdGVyZW9fZnJlcXMpOworCQlXUkVHMzJfQVVESU9fRU5EUFQoZGlnLT5hZm10LT5waW4tPm9m ZnNldCwgZWxkX3JlZ190b190eXBlW2ldWzBdLCB0bXApOworCX0KKworCWtmcmVlKHNhZHMpOwog CiB9Ci0qLworCiBzdGF0aWMgdm9pZCBkY2VfdjZfMF9hdWRpb19lbmFibGUoc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYsCiAJCQkJICBzdHJ1Y3QgYW1kZ3B1X2F1ZGlvX3BpbiAqcGluLAogCQkJ CSAgYm9vbCBlbmFibGUpCiB7Ci0JRFJNX0lORk8oInh4eHg6IGRjZV92Nl8wX2F1ZGlvX2VuYWJs ZS0tLW5vIGltcCEhISEhXG4iKTsKKwlpZiAoIXBpbikKKwkJcmV0dXJuOworCisJV1JFRzMyX0FV RElPX0VORFBUKHBpbi0+b2Zmc2V0LCBpeEFaQUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJPTF9IT1Rf UExVR19DT05UUk9MLAorCQkJZW5hYmxlID8gQVpBTElBX0YwX0NPREVDX1BJTl9DT05UUk9MX0hP VF9QTFVHX0NPTlRST0xfX0FVRElPX0VOQUJMRURfTUFTSyA6IDApOwogfQogCiBzdGF0aWMgY29u c3QgdTMyIHBpbl9vZmZzZXRzWzddID0KQEAgLTEzMTcsMTIgKzE0OTEsNDQgQEAgc3RhdGljIGNv bnN0IHUzMiBwaW5fb2Zmc2V0c1s3XSA9CiAKIHN0YXRpYyBpbnQgZGNlX3Y2XzBfYXVkaW9faW5p dChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIHsKKwlpbnQgaTsKKworCWlmICghYW1kZ3B1 X2F1ZGlvKQorCQlyZXR1cm4gMDsKKworCWFkZXYtPm1vZGVfaW5mby5hdWRpby5lbmFibGVkID0g dHJ1ZTsKKworCWFkZXYtPm1vZGVfaW5mby5hdWRpby5udW1fcGlucyA9IDc7CisKKwlmb3IgKGkg PSAwOyBpIDwgYWRldi0+bW9kZV9pbmZvLmF1ZGlvLm51bV9waW5zOyBpKyspIHsKKwkJYWRldi0+ bW9kZV9pbmZvLmF1ZGlvLnBpbltpXS5jaGFubmVscyA9IC0xOworCQlhZGV2LT5tb2RlX2luZm8u YXVkaW8ucGluW2ldLnJhdGUgPSAtMTsKKwkJYWRldi0+bW9kZV9pbmZvLmF1ZGlvLnBpbltpXS5i aXRzX3Blcl9zYW1wbGUgPSAtMTsKKwkJYWRldi0+bW9kZV9pbmZvLmF1ZGlvLnBpbltpXS5zdGF0 dXNfYml0cyA9IDA7CisJCWFkZXYtPm1vZGVfaW5mby5hdWRpby5waW5baV0uY2F0ZWdvcnlfY29k ZSA9IDA7CisJCWFkZXYtPm1vZGVfaW5mby5hdWRpby5waW5baV0uY29ubmVjdGVkID0gZmFsc2U7 CisJCWFkZXYtPm1vZGVfaW5mby5hdWRpby5waW5baV0ub2Zmc2V0ID0gcGluX29mZnNldHNbaV07 CisJCWFkZXYtPm1vZGVfaW5mby5hdWRpby5waW5baV0uaWQgPSBpOworCQlkY2VfdjZfMF9hdWRp b19lbmFibGUoYWRldiwgJmFkZXYtPm1vZGVfaW5mby5hdWRpby5waW5baV0sIGZhbHNlKTsKKwl9 CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZGNlX3Y2XzBfYXVkaW9fZmluaShzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIHsKKwlpbnQgaTsKIAorCWlmICghYW1kZ3B1X2F1ZGlv KQorCQlyZXR1cm47CisKKwlpZiAoIWFkZXYtPm1vZGVfaW5mby5hdWRpby5lbmFibGVkKQorCQly ZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRldi0+bW9kZV9pbmZvLmF1ZGlvLm51bV9waW5z OyBpKyspCisJCWRjZV92Nl8wX2F1ZGlvX2VuYWJsZShhZGV2LCAmYWRldi0+bW9kZV9pbmZvLmF1 ZGlvLnBpbltpXSwgZmFsc2UpOworCisJYWRldi0+bW9kZV9pbmZvLmF1ZGlvLmVuYWJsZWQgPSBm YWxzZTsKIH0KIAogLyoKQEAgLTEzMzEsMjggKzE1MzcsMjA0IEBAIHN0YXRpYyB2b2lkIGRjZV92 Nl8wX2FmbXRfdXBkYXRlX0FDUihzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIHVpbnQzMl90 IGNsb2NrCiAJRFJNX0lORk8oInh4eHg6IGRjZV92Nl8wX2FmbXRfdXBkYXRlX0FDUi0tLW5vIGlt cCEhISEhXG4iKTsKIH0KICovCi0vKgotICogYnVpbGQgYSBIRE1JIFZpZGVvIEluZm8gRnJhbWUK LSAqLwotLyoKLXN0YXRpYyB2b2lkIGRjZV92Nl8wX2FmbXRfdXBkYXRlX2F2aV9pbmZvZnJhbWUo c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAotCQkJCQkgICAgICAgdm9pZCAqYnVmZmVyLCBz aXplX3Qgc2l6ZSkKKworc3RhdGljIHZvaWQgZGNlX3Y2XzBfYXVkaW9fc2V0X2F2aV9pbmZvZnJh bWUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCQkgICAgICAgc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKm1vZGUpCiB7Ci0JRFJNX0lORk8oInh4eHg6IGRjZV92Nl8wX2FmbXRfdXBk YXRlX2F2aV9pbmZvZnJhbWUtLS1ubyBpbXAhISEhIVxuIik7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGRldi0+ ZGV2X3ByaXZhdGU7CisJc3RydWN0IGFtZGdwdV9lbmNvZGVyICphbWRncHVfZW5jb2RlciA9IHRv X2FtZGdwdV9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCBhbWRncHVfZW5jb2Rlcl9hdG9tX2Rp ZyAqZGlnID0gYW1kZ3B1X2VuY29kZXItPmVuY19wcml2OworCXN0cnVjdCBoZG1pX2F2aV9pbmZv ZnJhbWUgZnJhbWU7CisJdTggYnVmZmVyW0hETUlfSU5GT0ZSQU1FX0hFQURFUl9TSVpFICsgSERN SV9BVklfSU5GT0ZSQU1FX1NJWkVdOworCXVpbnQ4X3QgKnBheWxvYWQgPSBidWZmZXIgKyAzOwor CXVpbnQ4X3QgKmhlYWRlciA9IGJ1ZmZlcjsKKwlzc2l6ZV90IGVycjsKKwl1MzIgdG1wOworCisJ ZXJyID0gZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9kZSgmZnJhbWUsIG1v ZGUpOworCWlmIChlcnIgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldHVwIEFWSSBp bmZvZnJhbWU6ICV6ZFxuIiwgZXJyKTsKKwkJcmV0dXJuOworCX0KKworCWVyciA9IGhkbWlfYXZp X2luZm9mcmFtZV9wYWNrKCZmcmFtZSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJaWYgKGVy ciA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcGFjayBBVkkgaW5mb2ZyYW1lOiAlemRc biIsIGVycik7CisJCXJldHVybjsKKwl9CisKKwlXUkVHMzIobW1BRk1UX0FWSV9JTkZPMCArIGRp Zy0+YWZtdC0+b2Zmc2V0LAorCSAgICAgICBwYXlsb2FkWzB4MF0gfCAocGF5bG9hZFsweDFdIDw8 IDgpIHwgKHBheWxvYWRbMHgyXSA8PCAxNikgfCAocGF5bG9hZFsweDNdIDw8IDI0KSk7CisJV1JF RzMyKG1tQUZNVF9BVklfSU5GTzEgKyBkaWctPmFmbXQtPm9mZnNldCwKKwkgICAgICAgcGF5bG9h ZFsweDRdIHwgKHBheWxvYWRbMHg1XSA8PCA4KSB8IChwYXlsb2FkWzB4Nl0gPDwgMTYpIHwgKHBh eWxvYWRbMHg3XSA8PCAyNCkpOworCVdSRUczMihtbUFGTVRfQVZJX0lORk8yICsgZGlnLT5hZm10 LT5vZmZzZXQsCisJICAgICAgIHBheWxvYWRbMHg4XSB8IChwYXlsb2FkWzB4OV0gPDwgOCkgfCAo cGF5bG9hZFsweEFdIDw8IDE2KSB8IChwYXlsb2FkWzB4Ql0gPDwgMjQpKTsKKwlXUkVHMzIobW1B Rk1UX0FWSV9JTkZPMyArIGRpZy0+YWZtdC0+b2Zmc2V0LAorCSAgICAgICBwYXlsb2FkWzB4Q10g fCAocGF5bG9hZFsweERdIDw8IDgpIHwgKGhlYWRlclsxXSA8PCAyNCkpOworCisJdG1wID0gUlJF RzMyKG1tSERNSV9JTkZPRlJBTUVfQ09OVFJPTDEgKyBkaWctPmFmbXQtPm9mZnNldCk7CisJLyog YW55dGhpbmcgb3RoZXIgdGhhbiAwICovCisJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIEhETUlf SU5GT0ZSQU1FX0NPTlRST0wxLAorCQkJSERNSV9BVURJT19JTkZPX0xJTkUsIDIpOworCVdSRUcz MihtbUhETUlfSU5GT0ZSQU1FX0NPTlRST0wxICsgZGlnLT5hZm10LT5vZmZzZXQsIHRtcCk7CiB9 CiAKIHN0YXRpYyB2b2lkIGRjZV92Nl8wX2F1ZGlvX3NldF9kdG8oc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyLCB1MzIgY2xvY2spCiB7Ci0JRFJNX0lORk8oInh4eHg6IGRjZV92Nl8wX2F1ZGlv X3NldF9kdG8tLS1ubyBpbXAhISEhIVxuIik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVu Y29kZXItPmRldjsKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGRldi0+ZGV2X3ByaXZh dGU7CisJc3RydWN0IGFtZGdwdV9jcnRjICphbWRncHVfY3J0YyA9IHRvX2FtZGdwdV9jcnRjKGVu Y29kZXItPmNydGMpOworCXUzMiB0bXA7CisKKwkvKgorCSAqIFR3byBkdG9zOiBnZW5lcmFsbHkg dXNlIGR0bzAgZm9yIGhkbWksIGR0bzEgZm9yIGRwLgorCSAqIEV4cHJlc3MgWzI0TUh6IC8gdGFy Z2V0IHBpeGVsIGNsb2NrXSBhcyBhbiBleGFjdCByYXRpb25hbAorCSAqIG51bWJlciAoY29lZmZp Y2llbnQgb2YgdHdvIGludGVnZXIgbnVtYmVycy4gIERDQ0dfQVVESU9fRFRPeF9QSEFTRQorCSAq IGlzIHRoZSBudW1lcmF0b3IsIERDQ0dfQVVESU9fRFRPeF9NT0RVTEUgaXMgdGhlIGRlbm9taW5h dG9yCisJICovCisJdG1wID0gUlJFRzMyKG1tRENDR19BVURJT19EVE9fU09VUkNFKTsKKwl0bXAg PSBSRUdfU0VUX0ZJRUxEKHRtcCwgRENDR19BVURJT19EVE9fU09VUkNFLAorCQkJRENDR19BVURJ T19EVE8wX1NPVVJDRV9TRUwsIGFtZGdwdV9jcnRjLT5jcnRjX2lkKTsKKwl0bXAgPSBSRUdfU0VU X0ZJRUxEKHRtcCwgRENDR19BVURJT19EVE9fU09VUkNFLCBEQ0NHX0FVRElPX0RUT19TRUwsIDEp OworCVdSRUczMihtbURDQ0dfQVVESU9fRFRPX1NPVVJDRSwgdG1wKTsKKwlXUkVHMzIobW1EQ0NH X0FVRElPX0RUTzFfUEhBU0UsIDI0MDAwKTsKKwlXUkVHMzIobW1EQ0NHX0FVRElPX0RUTzFfTU9E VUxFLCBjbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGRjZV92Nl8wX2F1ZGlvX3NldF9wYWNrZXQo c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBkZXYtPmRldl9w cml2YXRlOworCXN0cnVjdCBhbWRncHVfZW5jb2RlciAqYW1kZ3B1X2VuY29kZXIgPSB0b19hbWRn cHVfZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3QgYW1kZ3B1X2VuY29kZXJfYXRvbV9kaWcgKmRp ZyA9IGFtZGdwdV9lbmNvZGVyLT5lbmNfcHJpdjsKKwl1MzIgdG1wOworCisJdG1wID0gUlJFRzMy KG1tQUZNVF9JTkZPRlJBTUVfQ09OVFJPTDAgKyBkaWctPmFmbXQtPm9mZnNldCk7CisJdG1wID0g UkVHX1NFVF9GSUVMRCh0bXAsIEFGTVRfSU5GT0ZSQU1FX0NPTlRST0wwLCBBRk1UX0FVRElPX0lO Rk9fVVBEQVRFLCAxKTsKKwlXUkVHMzIobW1BRk1UX0lORk9GUkFNRV9DT05UUk9MMCArIGRpZy0+ YWZtdC0+b2Zmc2V0LCB0bXApOworCisJdG1wID0gUlJFRzMyKG1tQUZNVF82MDk1OF8wICsgZGln LT5hZm10LT5vZmZzZXQpOworCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBBRk1UXzYwOTU4XzAs IEFGTVRfNjA5NThfQ1NfQ0hBTk5FTF9OVU1CRVJfTCwgMSk7CisJV1JFRzMyKG1tQUZNVF82MDk1 OF8wICsgZGlnLT5hZm10LT5vZmZzZXQsIHRtcCk7CisKKwl0bXAgPSBSUkVHMzIobW1BRk1UXzYw OTU4XzEgKyBkaWctPmFmbXQtPm9mZnNldCk7CisJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIEFG TVRfNjA5NThfMSwgQUZNVF82MDk1OF9DU19DSEFOTkVMX05VTUJFUl9SLCAyKTsKKwlXUkVHMzIo bW1BRk1UXzYwOTU4XzEgKyBkaWctPmFmbXQtPm9mZnNldCwgdG1wKTsKKworCXRtcCA9IFJSRUcz MihtbUFGTVRfNjA5NThfMiArIGRpZy0+YWZtdC0+b2Zmc2V0KTsKKwl0bXAgPSBSRUdfU0VUX0ZJ RUxEKHRtcCwgQUZNVF82MDk1OF8yLCBBRk1UXzYwOTU4X0NTX0NIQU5ORUxfTlVNQkVSXzIsIDMp OworCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBBRk1UXzYwOTU4XzIsIEFGTVRfNjA5NThfQ1Nf Q0hBTk5FTF9OVU1CRVJfMywgNCk7CisJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIEFGTVRfNjA5 NThfMiwgQUZNVF82MDk1OF9DU19DSEFOTkVMX05VTUJFUl80LCA1KTsKKwl0bXAgPSBSRUdfU0VU X0ZJRUxEKHRtcCwgQUZNVF82MDk1OF8yLCBBRk1UXzYwOTU4X0NTX0NIQU5ORUxfTlVNQkVSXzUs IDYpOworCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBBRk1UXzYwOTU4XzIsIEFGTVRfNjA5NThf Q1NfQ0hBTk5FTF9OVU1CRVJfNiwgNyk7CisJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIEFGTVRf NjA5NThfMiwgQUZNVF82MDk1OF9DU19DSEFOTkVMX05VTUJFUl83LCA4KTsKKwlXUkVHMzIobW1B Rk1UXzYwOTU4XzIgKyBkaWctPmFmbXQtPm9mZnNldCwgdG1wKTsKKworCXRtcCA9IFJSRUczMiht bUFGTVRfQVVESU9fUEFDS0VUX0NPTlRST0wyICsgZGlnLT5hZm10LT5vZmZzZXQpOworCXRtcCA9 IFJFR19TRVRfRklFTEQodG1wLCBBRk1UX0FVRElPX1BBQ0tFVF9DT05UUk9MMiwgQUZNVF9BVURJ T19DSEFOTkVMX0VOQUJMRSwgMHhmZik7CisJV1JFRzMyKG1tQUZNVF9BVURJT19QQUNLRVRfQ09O VFJPTDIgKyBkaWctPmFmbXQtPm9mZnNldCwgdG1wKTsKKworCXRtcCA9IFJSRUczMihtbUhETUlf QVVESU9fUEFDS0VUX0NPTlRST0wgKyBkaWctPmFmbXQtPm9mZnNldCk7CisJdG1wID0gUkVHX1NF VF9GSUVMRCh0bXAsIEhETUlfQVVESU9fUEFDS0VUX0NPTlRST0wsIEhETUlfQVVESU9fREVMQVlf RU4sIDEpOworCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBIRE1JX0FVRElPX1BBQ0tFVF9DT05U Uk9MLCBIRE1JX0FVRElPX1BBQ0tFVFNfUEVSX0xJTkUsIDMpOworCVdSRUczMihtbUhETUlfQVVE SU9fUEFDS0VUX0NPTlRST0wgKyBkaWctPmFmbXQtPm9mZnNldCwgdG1wKTsKKworCXRtcCA9IFJS RUczMihtbUFGTVRfQVVESU9fUEFDS0VUX0NPTlRST0wgKyBkaWctPmFmbXQtPm9mZnNldCk7CisJ dG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIEFGTVRfQVVESU9fUEFDS0VUX0NPTlRST0wsIEFGTVRf UkVTRVRfRklGT19XSEVOX0FVRElPX0RJUywgMSk7CisJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAs IEFGTVRfQVVESU9fUEFDS0VUX0NPTlRST0wsIEFGTVRfNjA5NThfQ1NfVVBEQVRFLCAxKTsKKwlX UkVHMzIobW1BRk1UX0FVRElPX1BBQ0tFVF9DT05UUk9MICsgZGlnLT5hZm10LT5vZmZzZXQsIHRt cCk7CiB9Ci0qLwotLyoKLSAqIHVwZGF0ZSB0aGUgaW5mbyBmcmFtZXMgd2l0aCB0aGUgZGF0YSBm cm9tIHRoZSBjdXJyZW50IGRpc3BsYXkgbW9kZQotICovCisKK3N0YXRpYyB2b2lkIGRjZV92Nl8w X2F1ZGlvX3NldF9tdXRlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgYm9vbCBtdXRlKQor eworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBhbWRncHVfZW5jb2Rl ciAqYW1kZ3B1X2VuY29kZXIgPSB0b19hbWRncHVfZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3Qg YW1kZ3B1X2VuY29kZXJfYXRvbV9kaWcgKmRpZyA9IGFtZGdwdV9lbmNvZGVyLT5lbmNfcHJpdjsK Kwl1MzIgdG1wOworCisJdG1wID0gUlJFRzMyKG1tSERNSV9HQyArIGRpZy0+YWZtdC0+b2Zmc2V0 KTsKKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgSERNSV9HQywgSERNSV9HQ19BVk1VVEUsIG11 dGUgPyAxIDogMCk7CisJV1JFRzMyKG1tSERNSV9HQyArIGRpZy0+YWZtdC0+b2Zmc2V0LCB0bXAp OworfQorCitzdGF0aWMgdm9pZCBkY2VfdjZfMF9hdWRpb19kcF9lbmFibGUoc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyLCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gZGV2LT5kZXZf cHJpdmF0ZTsKKwlzdHJ1Y3QgYW1kZ3B1X2VuY29kZXIgKmFtZGdwdV9lbmNvZGVyID0gdG9fYW1k Z3B1X2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IGFtZGdwdV9lbmNvZGVyX2F0b21fZGlnICpk aWcgPSBhbWRncHVfZW5jb2Rlci0+ZW5jX3ByaXY7CisJdTMyIHRtcDsKKworCWlmIChlbmFibGUp IHsKKwkJdG1wID0gUlJFRzMyKG1tQUZNVF9BVURJT19QQUNLRVRfQ09OVFJPTCArIGRpZy0+YWZt dC0+b2Zmc2V0KTsKKwkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIEFGTVRfQVVESU9fUEFDS0VU X0NPTlRST0wsIEFGTVRfQVVESU9fU0FNUExFX1NFTkQsIDEpOworCQlXUkVHMzIobW1BRk1UX0FV RElPX1BBQ0tFVF9DT05UUk9MICsgZGlnLT5hZm10LT5vZmZzZXQsIHRtcCk7CisKKwkJdG1wID0g UlJFRzMyKG1tRFBfU0VDX1RJTUVTVEFNUCArIGRpZy0+YWZtdC0+b2Zmc2V0KTsKKwkJdG1wID0g UkVHX1NFVF9GSUVMRCh0bXAsIERQX1NFQ19USU1FU1RBTVAsIERQX1NFQ19USU1FU1RBTVBfTU9E RSwgMSk7CisJCVdSRUczMihtbURQX1NFQ19USU1FU1RBTVAgKyBkaWctPmFmbXQtPm9mZnNldCwg dG1wKTsKKworCQl0bXAgPSBSUkVHMzIobW1EUF9TRUNfQ05UTCArIGRpZy0+YWZtdC0+b2Zmc2V0 KTsKKwkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIERQX1NFQ19DTlRMLCBEUF9TRUNfQVNQX0VO QUJMRSwgMSk7CisJCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBEUF9TRUNfQ05UTCwgRFBfU0VD X0FUUF9FTkFCTEUsIDEpOworCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgRFBfU0VDX0NOVEws IERQX1NFQ19BSVBfRU5BQkxFLCAxKTsKKwkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIERQX1NF Q19DTlRMLCBEUF9TRUNfU1RSRUFNX0VOQUJMRSwgMSk7CisJCVdSRUczMihtbURQX1NFQ19DTlRM ICsgZGlnLT5hZm10LT5vZmZzZXQsIHRtcCk7CisJfSBlbHNlIHsKKwkJV1JFRzMyKG1tRFBfU0VD X0NOVEwgKyBkaWctPmFmbXQtPm9mZnNldCwgMCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBkY2Vf djZfMF9hZm10X3NldG1vZGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCQkJCSAgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7Ci0JRFJNX0lORk8oInh4eHg6IGRjZV92Nl8w X2FmbXRfc2V0bW9kZSAtLS0tbm8gaW1wbCAhISEhISEhIVxuIik7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGRl di0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGFtZGdwdV9lbmNvZGVyICphbWRncHVfZW5jb2RlciA9 IHRvX2FtZGdwdV9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCBhbWRncHVfZW5jb2Rlcl9hdG9t X2RpZyAqZGlnID0gYW1kZ3B1X2VuY29kZXItPmVuY19wcml2OworCXN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3I7CisJc3RydWN0IGFtZGdwdV9jb25uZWN0b3IgKmFtZGdwdV9jb25uZWN0 b3IgPSBOVUxMOworCisJaWYgKCFkaWcgfHwgIWRpZy0+YWZtdCkKKwkJcmV0dXJuOworCisJbGlz dF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZlbmNvZGVyLT5kZXYtPm1vZGVfY29uZmlnLmNv bm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWlmIChjb25uZWN0b3ItPmVuY29kZXIgPT0gZW5jb2Rl cikgeworCQkJYW1kZ3B1X2Nvbm5lY3RvciA9IHRvX2FtZGdwdV9jb25uZWN0b3IoY29ubmVjdG9y KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFhbWRncHVfY29ubmVjdG9yKSB7CisJCURS TV9FUlJPUigiQ291bGRuJ3QgZmluZCBlbmNvZGVyJ3MgY29ubmVjdG9yXG4iKTsKKwkJcmV0dXJu OworCX0KKworCWlmICghZGlnLT5hZm10LT5lbmFibGVkKQorCQlyZXR1cm47CisKKwlkaWctPmFm bXQtPnBpbiA9IGRjZV92Nl8wX2F1ZGlvX2dldF9waW4oYWRldik7CisJaWYgKCFkaWctPmFmbXQt PnBpbikKKwkJcmV0dXJuOworCisJLyogZGlzYWJsZSBhdWRpbyBiZWZvcmUgc2V0dGluZyB1cCBo dyAqLworCWRjZV92Nl8wX2F1ZGlvX2VuYWJsZShhZGV2LCBkaWctPmFmbXQtPnBpbiwgZmFsc2Up OworCisJZGNlX3Y2XzBfYXVkaW9fc2V0X211dGUoZW5jb2RlciwgdHJ1ZSk7CisJZGNlX3Y2XzBf YXVkaW9fd3JpdGVfc3BlYWtlcl9hbGxvY2F0aW9uKGVuY29kZXIpOworCWRjZV92Nl8wX2F1ZGlv X3dyaXRlX3NhZF9yZWdzKGVuY29kZXIpOworCWRjZV92Nl8wX2F1ZGlvX3dyaXRlX2xhdGVuY3lf ZmllbGRzKGVuY29kZXIsIG1vZGUpOworCWRjZV92Nl8wX2F1ZGlvX3NldF9kdG8oZW5jb2Rlciwg YWRldi0+Y2xvY2suZGVmYXVsdF9kaXNwY2xrICogMTApOworCWRjZV92Nl8wX2F1ZGlvX3NldF9w YWNrZXQoZW5jb2Rlcik7CisJZGNlX3Y2XzBfYXVkaW9fc2VsZWN0X3BpbihlbmNvZGVyKTsKKwlk Y2VfdjZfMF9hdWRpb19zZXRfYXZpX2luZm9mcmFtZShlbmNvZGVyLCBtb2RlKTsKKwlkY2VfdjZf MF9hdWRpb19zZXRfbXV0ZShlbmNvZGVyLCBmYWxzZSk7CisJZGNlX3Y2XzBfYXVkaW9fZHBfZW5h YmxlKGVuY29kZXIsIDEpOworCisJLyogZW5hYmxlIGF1ZGlvIGFmdGVyIHNldHRpbmcgdXAgaHcg Ki8KKwlkY2VfdjZfMF9hdWRpb19lbmFibGUoYWRldiwgZGlnLT5hZm10LT5waW4sIHRydWUpOwog fQogCiBzdGF0aWMgdm9pZCBkY2VfdjZfMF9hZm10X2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIsIGJvb2wgZW5hYmxlKQpAQCAtMTM2OCw2ICsxNzUwLDcgQEAgc3RhdGljIHZvaWQg ZGNlX3Y2XzBfYWZtdF9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBib29sIGVu YWJsZSkKIAkvKiBTaWxlbnQsIHI2MDBfaGRtaV9lbmFibGUgd2lsbCByYWlzZSBXQVJOIGZvciB1 cyAqLwogCWlmIChlbmFibGUgJiYgZGlnLT5hZm10LT5lbmFibGVkKQogCQlyZXR1cm47CisKIAlp ZiAoIWVuYWJsZSAmJiAhZGlnLT5hZm10LT5lbmFibGVkKQogCQlyZXR1cm47CiAKQEAgLTI3ODEs NiArMzE2NCw3IEBAIGRjZV92Nl8wX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyLAogewogCiAJc3RydWN0IGFtZGdwdV9lbmNvZGVyICphbWRncHVfZW5jb2RlciA9 IHRvX2FtZGdwdV9lbmNvZGVyKGVuY29kZXIpOworCWludCBlbSA9IGFtZGdwdV9hdG9tYmlvc19l bmNvZGVyX2dldF9lbmNvZGVyX21vZGUoZW5jb2Rlcik7CiAKIAlhbWRncHVfZW5jb2Rlci0+cGl4 ZWxfY2xvY2sgPSBhZGp1c3RlZF9tb2RlLT5jbG9jazsKIApAQCAtMjc5MCw3ICszMTc0LDcgQEAg ZGNlX3Y2XzBfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCiAJ Lyogc2V0IHNjYWxlciBjbGVhcnMgdGhpcyBvbiBzb21lIGNoaXBzICovCiAJZGNlX3Y2XzBfc2V0 X2ludGVybGVhdmUoZW5jb2Rlci0+Y3J0YywgbW9kZSk7CiAKLQlpZiAoYW1kZ3B1X2F0b21iaW9z X2VuY29kZXJfZ2V0X2VuY29kZXJfbW9kZShlbmNvZGVyKSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9I RE1JKSB7CisJaWYgKGVtID09IEFUT01fRU5DT0RFUl9NT0RFX0hETUkgfHwgRU5DT0RFUl9NT0RF X0lTX0RQKGVtKSkgewogCQlkY2VfdjZfMF9hZm10X2VuYWJsZShlbmNvZGVyLCB0cnVlKTsKIAkJ ZGNlX3Y2XzBfYWZtdF9zZXRtb2RlKGVuY29kZXIsIGFkanVzdGVkX21vZGUpOwogCX0KQEAgLTI4 NTIsMTEgKzMyMzYsMTIgQEAgc3RhdGljIHZvaWQgZGNlX3Y2XzBfZW5jb2Rlcl9kaXNhYmxlKHN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIAogCXN0cnVjdCBhbWRncHVfZW5jb2RlciAqYW1k Z3B1X2VuY29kZXIgPSB0b19hbWRncHVfZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3QgYW1kZ3B1 X2VuY29kZXJfYXRvbV9kaWcgKmRpZzsKKwlpbnQgZW0gPSBhbWRncHVfYXRvbWJpb3NfZW5jb2Rl cl9nZXRfZW5jb2Rlcl9tb2RlKGVuY29kZXIpOwogCiAJYW1kZ3B1X2F0b21iaW9zX2VuY29kZXJf ZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7CiAKIAlpZiAoYW1kZ3B1X2F0b21iaW9z X2VuY29kZXJfaXNfZGlnaXRhbChlbmNvZGVyKSkgewotCQlpZiAoYW1kZ3B1X2F0b21iaW9zX2Vu Y29kZXJfZ2V0X2VuY29kZXJfbW9kZShlbmNvZGVyKSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9IRE1J KQorCQlpZiAoZW0gPT0gQVRPTV9FTkNPREVSX01PREVfSERNSSB8fCBFTkNPREVSX01PREVfSVNf RFAoZW0pKQogCQkJZGNlX3Y2XzBfYWZtdF9lbmFibGUoZW5jb2RlciwgZmFsc2UpOwogCQlkaWcg PSBhbWRncHVfZW5jb2Rlci0+ZW5jX3ByaXY7CiAJCWRpZy0+ZGlnX2VuY29kZXIgPSAtMTsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9kY2UvZGNlXzZf MF9zaF9tYXNrLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvZGNlL2Rj ZV82XzBfc2hfbWFzay5oCmluZGV4IDlhNGQ0YzIuLmFiZTA1YmMgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9kY2UvZGNlXzZfMF9zaF9tYXNrLmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL2RjZS9kY2VfNl8wX3NoX21h c2suaApAQCAtOTA2LDYgKzkwNiw4IEBACiAjZGVmaW5lIEFaQUxJQV9GMF9DT0RFQ19FTkRQT0lO VF9EQVRBX19BWkFMSUFfRU5EUE9JTlRfUkVHX0RBVEFfX1NISUZUIDB4MDAwMDAwMDAKICNkZWZp bmUgQVpBTElBX0YwX0NPREVDX0VORFBPSU5UX0lOREVYX19BWkFMSUFfRU5EUE9JTlRfUkVHX0lO REVYX01BU0sgMHgwMDAwMDBmZkwKICNkZWZpbmUgQVpBTElBX0YwX0NPREVDX0VORFBPSU5UX0lO REVYX19BWkFMSUFfRU5EUE9JTlRfUkVHX0lOREVYX19TSElGVCAweDAwMDAwMDAwCisjZGVmaW5l IEFaQUxJQV9GMF9DT0RFQ19FTkRQT0lOVF9JTkRFWF9fQVpBTElBX0VORFBPSU5UX1JFR19XUklU RV9FTl9NQVNLIDB4MDAwMDAxMDBMCisjZGVmaW5lIEFaQUxJQV9GMF9DT0RFQ19FTkRQT0lOVF9J TkRFWF9fQVpBTElBX0VORFBPSU5UX1JFR19XUklURV9FTl9fU0hJRlQgMHgwMDAwMDAwOAogI2Rl ZmluZSBBWkFMSUFfRjBfQ09ERUNfRlVOQ1RJT05fQ09OVFJPTF9DT05WRVJURVJfU1lOQ0hST05J WkFUSU9OX19DT05WRVJURVJfU1lOQ0hST05JWkFUSU9OX01BU0sgMHgwMDAwMDAzZkwKICNkZWZp bmUgQVpBTElBX0YwX0NPREVDX0ZVTkNUSU9OX0NPTlRST0xfQ09OVkVSVEVSX1NZTkNIUk9OSVpB VElPTl9fQ09OVkVSVEVSX1NZTkNIUk9OSVpBVElPTl9fU0hJRlQgMHgwMDAwMDAwMAogI2RlZmlu ZSBBWkFMSUFfRjBfQ09ERUNfRlVOQ1RJT05fQ09OVFJPTF9QT1dFUl9TVEFURV9fQ0xLU1RPUE9L X01BU0sgMHgwMDAwMDIwMEwKLS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2FtZC1nZngK