From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xiaojie Yuan Subject: [PATCH] drm/amdgpu: add DP audio support for si dce6 Date: Mon, 20 Feb 2017 18:16:26 +0800 Message-ID: <1487585786-29676-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 U2lnbmVkLW9mZi1ieTogWGlhb2ppZSBZdWFuIDxYaWFvamllLll1YW5AYW1kLmNvbT4KLS0tCiBk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9kY2VfdjZfMC5jICAgICAgICAgICAgICB8IDQ1NyAr KysrKysrKysrKysrKysrKysrLS0KIC4uLi9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvZGNlL2Rj ZV82XzBfc2hfbWFzay5oIHwgICAyICsKIDIgZmlsZXMgY2hhbmdlZCwgNDI1IGluc2VydGlvbnMo KyksIDM0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2RjZV92Nl8wLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9kY2VfdjZfMC5jCmlu ZGV4IDk0ODc3Y2IuLmVjMmYxMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2RjZV92Nl8wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZGNlX3Y2XzAu YwpAQCAtMTE4LDE0ICsxMTgsMzEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CiBzdGF0aWMgdTMy IGRjZV92Nl8wX2F1ZGlvX2VuZHB0X3JyZWcoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCiAJ CQkJICAgICB1MzIgYmxvY2tfb2Zmc2V0LCB1MzIgcmVnKQogewotCURSTV9JTkZPKCJ4eHh4OiBk Y2VfdjZfMF9hdWRpb19lbmRwdF9ycmVnIC0tLS1ubyBpbXBsISEhIVxuIik7Ci0JcmV0dXJuIDA7 CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZh ZGV2LT5hdWRpb19lbmRwdF9pZHhfbG9jaywgZmxhZ3MpOworCVdSRUczMihtbUFaQUxJQV9GMF9D T0RFQ19FTkRQT0lOVF9JTkRFWCArIGJsb2NrX29mZnNldCwgcmVnKTsKKwlyID0gUlJFRzMyKG1t QVpBTElBX0YwX0NPREVDX0VORFBPSU5UX0RBVEEgKyBibG9ja19vZmZzZXQpOworCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmFkZXYtPmF1ZGlvX2VuZHB0X2lkeF9sb2NrLCBmbGFncyk7CisKKwly ZXR1cm4gcjsKIH0KIAogc3RhdGljIHZvaWQgZGNlX3Y2XzBfYXVkaW9fZW5kcHRfd3JlZyhzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKIAkJCQkgICAgICB1MzIgYmxvY2tfb2Zmc2V0LCB1MzIg cmVnLCB1MzIgdikKIHsKLQlEUk1fSU5GTygieHh4eDogZGNlX3Y2XzBfYXVkaW9fZW5kcHRfd3Jl ZyAtLS0tbm8gaW1wbCEhISFcbiIpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHRtcDsK KworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGV2LT5hdWRpb19lbmRwdF9pZHhfbG9jaywgZmxhZ3Mp OworCXRtcCA9IFJFR19TRVRfRklFTEQoMCwgQVpBTElBX0YwX0NPREVDX0VORFBPSU5UX0lOREVY LAorCQkJQVpBTElBX0VORFBPSU5UX1JFR19JTkRFWCwgcmVnKTsKKwl0bXAgPSBSRUdfU0VUX0ZJ RUxEKHRtcCwgQVpBTElBX0YwX0NPREVDX0VORFBPSU5UX0lOREVYLAorCQkJQVpBTElBX0VORFBP SU5UX1JFR19XUklURV9FTiwgMSk7CisJV1JFRzMyKG1tQVpBTElBX0YwX0NPREVDX0VORFBPSU5U X0lOREVYICsgYmxvY2tfb2Zmc2V0LCB0bXApOworCVdSRUczMihtbUFaQUxJQV9GMF9DT0RFQ19F TkRQT0lOVF9EQVRBICsgYmxvY2tfb2Zmc2V0LCB2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZhZGV2LT5hdWRpb19lbmRwdF9pZHhfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgYm9vbCBk Y2VfdjZfMF9pc19pbl92Ymxhbmsoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGludCBjcnRj KQpAQCAtMTIzMSwxNyArMTI0OCwxNyBAQCBzdGF0aWMgdm9pZCBkY2VfdjZfMF9iYW5kd2lkdGhf dXBkYXRlKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCQlkY2VfdjZfMF9wcm9ncmFtX3dh dGVybWFya3MoYWRldiwgYWRldi0+bW9kZV9pbmZvLmNydGNzW2krMV0sIGxiX3NpemUsIG51bV9o ZWFkcyk7CiAJfQogfQotLyoKKwogc3RhdGljIHZvaWQgZGNlX3Y2XzBfYXVkaW9fZ2V0X2Nvbm5l Y3RlZF9waW5zKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogewogCWludCBpOwotCXUzMiBv ZmZzZXQsIHRtcDsKKwl1MzIgdG1wOwogCiAJZm9yIChpID0gMDsgaSA8IGFkZXYtPm1vZGVfaW5m by5hdWRpby5udW1fcGluczsgaSsrKSB7Ci0JCW9mZnNldCA9IGFkZXYtPm1vZGVfaW5mby5hdWRp by5waW5baV0ub2Zmc2V0OwotCQl0bXAgPSBSUkVHMzJfQVVESU9fRU5EUFQob2Zmc2V0LAotCQkJ CSAgICAgIEFaX0YwX0NPREVDX1BJTl9DT05UUk9MX1JFU1BPTlNFX0NPTkZJR1VSQVRJT05fREVG QVVMVCk7Ci0JCWlmICgoKHRtcCAmIFBPUlRfQ09OTkVDVElWSVRZX01BU0spID4+IFBPUlRfQ09O TkVDVElWSVRZX1NISUZUKSA9PSAxKQorCQl0bXAgPSBSUkVHMzJfQVVESU9fRU5EUFQoYWRldi0+ bW9kZV9pbmZvLmF1ZGlvLnBpbltpXS5vZmZzZXQsCisJCQkJaXhBWkFMSUFfRjBfQ09ERUNfUElO X0NPTlRST0xfUkVTUE9OU0VfQ09ORklHVVJBVElPTl9ERUZBVUxUKTsKKwkJaWYgKFJFR19HRVRf RklFTEQodG1wLCBBWkFMSUFfRjBfQ09ERUNfUElOX0NPTlRST0xfUkVTUE9OU0VfQ09ORklHVVJB VElPTl9ERUZBVUxULAorCQkJCQlQT1JUX0NPTk5FQ1RJVklUWSkpCiAJCQlhZGV2LT5tb2RlX2lu Zm8uYXVkaW8ucGluW2ldLmNvbm5lY3RlZCA9IGZhbHNlOwogCQllbHNlCiAJCQlhZGV2LT5tb2Rl X2luZm8uYXVkaW8ucGluW2ldLmNvbm5lY3RlZCA9IHRydWU7CkBAIC0xMjY4LDQwICsxMjg1LDIw MSBAQCBzdGF0aWMgdm9pZCBkY2VfdjZfMF9hZm10X2F1ZGlvX3NlbGVjdF9waW4oc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyKQogCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gZW5jb2Rl ci0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgYW1kZ3B1X2VuY29kZXIgKmFtZGdwdV9lbmNv ZGVyID0gdG9fYW1kZ3B1X2VuY29kZXIoZW5jb2Rlcik7CiAJc3RydWN0IGFtZGdwdV9lbmNvZGVy X2F0b21fZGlnICpkaWcgPSBhbWRncHVfZW5jb2Rlci0+ZW5jX3ByaXY7Ci0JdTMyIG9mZnNldDsK IAogCWlmICghZGlnIHx8ICFkaWctPmFmbXQgfHwgIWRpZy0+YWZtdC0+cGluKQogCQlyZXR1cm47 CiAKLQlvZmZzZXQgPSBkaWctPmFmbXQtPm9mZnNldDsKLQotCVdSRUczMihBRk1UX0FVRElPX1NS Q19DT05UUk9MICsgb2Zmc2V0LAotCSAgICAgICBBRk1UX0FVRElPX1NSQ19TRUxFQ1QoZGlnLT5h Zm10LT5waW4tPmlkKSk7Ci0KKwlXUkVHMzIobW1BRk1UX0FVRElPX1NSQ19DT05UUk9MICsgZGln LT5hZm10LT5vZmZzZXQsCisJICAgICAgIFJFR19TRVRfRklFTEQoMCwgQUZNVF9BVURJT19TUkNf Q09OVFJPTCwgQUZNVF9BVURJT19TUkNfU0VMRUNULAorCQkgICAgICAgICAgICAgZGlnLT5hZm10 LT5waW4tPmlkKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRjZV92Nl8wX2F1ZGlvX3dyaXRlX2xhdGVu Y3lfZmllbGRzKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKIAkJCQkJCXN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlKQogewotCURSTV9JTkZPKCJ4eHh4OiBkY2VfdjZfMF9hdWRpb193 cml0ZV9sYXRlbmN5X2ZpZWxkcy0tLW5vIGltcCEhISEhXG4iKTsKKwlzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiA9IGVuY29kZXItPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGFtZGdwdV9l bmNvZGVyICphbWRncHVfZW5jb2RlciA9IHRvX2FtZGdwdV9lbmNvZGVyKGVuY29kZXIpOworCXN0 cnVjdCBhbWRncHVfZW5jb2Rlcl9hdG9tX2RpZyAqZGlnID0gYW1kZ3B1X2VuY29kZXItPmVuY19w cml2OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGFtZGdwdV9j b25uZWN0b3IgKmFtZGdwdV9jb25uZWN0b3IgPSBOVUxMOworCWludCBpbnRlcmxhY2UgPSAwOwor CXUzMiB0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmVuY29kZXItPmRl di0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaWYgKGNvbm5lY3Rvci0+ ZW5jb2RlciA9PSBlbmNvZGVyKSB7CisJCQlhbWRncHVfY29ubmVjdG9yID0gdG9fYW1kZ3B1X2Nv bm5lY3Rvcihjb25uZWN0b3IpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWFtZGdwdV9j b25uZWN0b3IpIHsKKwkJRFJNX0VSUk9SKCJDb3VsZG4ndCBmaW5kIGVuY29kZXIncyBjb25uZWN0 b3JcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxB R19JTlRFUkxBQ0UpCisJCWludGVybGFjZSA9IDE7CisKKwlpZiAoY29ubmVjdG9yLT5sYXRlbmN5 X3ByZXNlbnRbaW50ZXJsYWNlXSkgeworCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKDAsIEFaQUxJQV9G MF9DT0RFQ19QSU5fQ09OVFJPTF9SRVNQT05TRV9MSVBTWU5DLAorCQkJCVZJREVPX0xJUFNZTkMs IGNvbm5lY3Rvci0+dmlkZW9fbGF0ZW5jeVtpbnRlcmxhY2VdKTsKKwkJdG1wID0gUkVHX1NFVF9G SUVMRCh0bXAsIEFaQUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJPTF9SRVNQT05TRV9MSVBTWU5DLAor CQkJCUFVRElPX0xJUFNZTkMsIGNvbm5lY3Rvci0+YXVkaW9fbGF0ZW5jeVtpbnRlcmxhY2VdKTsK Kwl9IGVsc2UgeworCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKDAsIEFaQUxJQV9GMF9DT0RFQ19QSU5f Q09OVFJPTF9SRVNQT05TRV9MSVBTWU5DLAorCQkJCVZJREVPX0xJUFNZTkMsIDApOworCQl0bXAg PSBSRUdfU0VUX0ZJRUxEKHRtcCwgQVpBTElBX0YwX0NPREVDX1BJTl9DT05UUk9MX1JFU1BPTlNF X0xJUFNZTkMsCisJCQkJQVVESU9fTElQU1lOQywgMCk7CisJfQorCVdSRUczMl9BVURJT19FTkRQ VChkaWctPmFmbXQtPnBpbi0+b2Zmc2V0LAorCQkJICAgaXhBWkFMSUFfRjBfQ09ERUNfUElOX0NP TlRST0xfUkVTUE9OU0VfTElQU1lOQywgdG1wKTsKIH0KIAogc3RhdGljIHZvaWQgZGNlX3Y2XzBf YXVkaW9fd3JpdGVfc3BlYWtlcl9hbGxvY2F0aW9uKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rl cikKIHsKLQlEUk1fSU5GTygieHh4eDogZGNlX3Y2XzBfYXVkaW9fd3JpdGVfc3BlYWtlcl9hbGxv Y2F0aW9uLS0tbm8gaW1wISEhISFcbiIpOworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0g ZW5jb2Rlci0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgYW1kZ3B1X2VuY29kZXIgKmFtZGdw dV9lbmNvZGVyID0gdG9fYW1kZ3B1X2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IGFtZGdwdV9l bmNvZGVyX2F0b21fZGlnICpkaWcgPSBhbWRncHVfZW5jb2Rlci0+ZW5jX3ByaXY7CisJc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgYW1kZ3B1X2Nvbm5lY3RvciAqYW1k Z3B1X2Nvbm5lY3RvciA9IE5VTEw7CisJdTggKnNhZGIgPSBOVUxMOworCWludCBzYWRfY291bnQ7 CisJdTMyIHRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZW5jb2Rlci0+ ZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpZiAoY29ubmVjdG9y LT5lbmNvZGVyID09IGVuY29kZXIpIHsKKwkJCWFtZGdwdV9jb25uZWN0b3IgPSB0b19hbWRncHVf Y29ubmVjdG9yKGNvbm5lY3Rvcik7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghYW1kZ3B1 X2Nvbm5lY3RvcikgeworCQlEUk1fRVJST1IoIkNvdWxkbid0IGZpbmQgZW5jb2RlcidzIGNvbm5l Y3RvclxuIik7CisJCXJldHVybjsKKwl9CisKKwlzYWRfY291bnQgPSBkcm1fZWRpZF90b19zcGVh a2VyX2FsbG9jYXRpb24oYW1kZ3B1X2Nvbm5lY3Rvcl9lZGlkKGNvbm5lY3RvciksICZzYWRiKTsK KwlpZiAoc2FkX2NvdW50IDwgMCkgeworCQlEUk1fRVJST1IoIkNvdWxkbid0IHJlYWQgU3BlYWtl ciBBbGxvY2F0aW9uIERhdGEgQmxvY2s6ICVkXG4iLCBzYWRfY291bnQpOworCQlzYWRfY291bnQg PSAwOworCX0KKworCS8qIHByb2dyYW0gdGhlIHNwZWFrZXIgYWxsb2NhdGlvbiAqLworCXRtcCA9 IFJSRUczMl9BVURJT19FTkRQVChkaWctPmFmbXQtPnBpbi0+b2Zmc2V0LAorCQkJaXhBWkFMSUFf RjBfQ09ERUNfUElOX0NPTlRST0xfQ0hBTk5FTF9TUEVBS0VSKTsKKwl0bXAgPSBSRUdfU0VUX0ZJ RUxEKHRtcCwgQVpBTElBX0YwX0NPREVDX1BJTl9DT05UUk9MX0NIQU5ORUxfU1BFQUtFUiwKKwkJ CUhETUlfQ09OTkVDVElPTiwgMCk7CisJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIEFaQUxJQV9G MF9DT0RFQ19QSU5fQ09OVFJPTF9DSEFOTkVMX1NQRUFLRVIsCisJCQlEUF9DT05ORUNUSU9OLCAw KTsKKworCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RP Ul9EaXNwbGF5UG9ydCkKKwkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIEFaQUxJQV9GMF9DT0RF Q19QSU5fQ09OVFJPTF9DSEFOTkVMX1NQRUFLRVIsCisJCQkJRFBfQ09OTkVDVElPTiwgMSk7CisJ ZWxzZQorCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQVpBTElBX0YwX0NPREVDX1BJTl9DT05U Uk9MX0NIQU5ORUxfU1BFQUtFUiwKKwkJCQlIRE1JX0NPTk5FQ1RJT04sIDEpOworCisJaWYgKHNh ZF9jb3VudCkKKwkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIEFaQUxJQV9GMF9DT0RFQ19QSU5f Q09OVFJPTF9DSEFOTkVMX1NQRUFLRVIsCisJCQkJU1BFQUtFUl9BTExPQ0FUSU9OLCBzYWRiWzBd KTsKKwllbHNlCisJCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBBWkFMSUFfRjBfQ09ERUNfUElO X0NPTlRST0xfQ0hBTk5FTF9TUEVBS0VSLAorCQkJCVNQRUFLRVJfQUxMT0NBVElPTiwgNSk7IC8q IHN0ZXJlbyAqLworCisJV1JFRzMyX0FVRElPX0VORFBUKGRpZy0+YWZtdC0+cGluLT5vZmZzZXQs CisJCQlpeEFaQUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJPTF9DSEFOTkVMX1NQRUFLRVIsIHRtcCk7 CisKKwlrZnJlZShzYWRiKTsKIH0KIAogc3RhdGljIHZvaWQgZGNlX3Y2XzBfYXVkaW9fd3JpdGVf c2FkX3JlZ3Moc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogewotCURSTV9JTkZPKCJ4eHh4 OiBkY2VfdjZfMF9hdWRpb193cml0ZV9zYWRfcmVncy0tLW5vIGltcCEhISEhXG4iKTsKKwlzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGVuY29kZXItPmRldi0+ZGV2X3ByaXZhdGU7CisJc3Ry dWN0IGFtZGdwdV9lbmNvZGVyICphbWRncHVfZW5jb2RlciA9IHRvX2FtZGdwdV9lbmNvZGVyKGVu Y29kZXIpOworCXN0cnVjdCBhbWRncHVfZW5jb2Rlcl9hdG9tX2RpZyAqZGlnID0gYW1kZ3B1X2Vu Y29kZXItPmVuY19wcml2OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3Ry dWN0IGFtZGdwdV9jb25uZWN0b3IgKmFtZGdwdV9jb25uZWN0b3IgPSBOVUxMOworCXN0cnVjdCBj ZWFfc2FkICpzYWRzOworCWludCBpLCBzYWRfY291bnQ7CisKKwlzdGF0aWMgY29uc3QgdTE2IGVs ZF9yZWdfdG9fdHlwZVtdWzJdID0geworCQl7IGl4QVpBTElBX0YwX0NPREVDX1BJTl9DT05UUk9M X0FVRElPX0RFU0NSSVBUT1IwLCBIRE1JX0FVRElPX0NPRElOR19UWVBFX1BDTSB9LAorCQl7IGl4 QVpBTElBX0YwX0NPREVDX1BJTl9DT05UUk9MX0FVRElPX0RFU0NSSVBUT1IxLCBIRE1JX0FVRElP X0NPRElOR19UWVBFX0FDMyB9LAorCQl7IGl4QVpBTElBX0YwX0NPREVDX1BJTl9DT05UUk9MX0FV RElPX0RFU0NSSVBUT1IyLCBIRE1JX0FVRElPX0NPRElOR19UWVBFX01QRUcxIH0sCisJCXsgaXhB WkFMSUFfRjBfQ09ERUNfUElOX0NPTlRST0xfQVVESU9fREVTQ1JJUFRPUjMsIEhETUlfQVVESU9f Q09ESU5HX1RZUEVfTVAzIH0sCisJCXsgaXhBWkFMSUFfRjBfQ09ERUNfUElOX0NPTlRST0xfQVVE SU9fREVTQ1JJUFRPUjQsIEhETUlfQVVESU9fQ09ESU5HX1RZUEVfTVBFRzIgfSwKKwkJeyBpeEFa QUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJPTF9BVURJT19ERVNDUklQVE9SNSwgSERNSV9BVURJT19D T0RJTkdfVFlQRV9BQUNfTEMgfSwKKwkJeyBpeEFaQUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJPTF9B VURJT19ERVNDUklQVE9SNiwgSERNSV9BVURJT19DT0RJTkdfVFlQRV9EVFMgfSwKKwkJeyBpeEFa QUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJPTF9BVURJT19ERVNDUklQVE9SNywgSERNSV9BVURJT19D T0RJTkdfVFlQRV9BVFJBQyB9LAorCQl7IGl4QVpBTElBX0YwX0NPREVDX1BJTl9DT05UUk9MX0FV RElPX0RFU0NSSVBUT1I5LCBIRE1JX0FVRElPX0NPRElOR19UWVBFX0VBQzMgfSwKKwkJeyBpeEFa QUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJPTF9BVURJT19ERVNDUklQVE9SMTAsIEhETUlfQVVESU9f Q09ESU5HX1RZUEVfRFRTX0hEIH0sCisJCXsgaXhBWkFMSUFfRjBfQ09ERUNfUElOX0NPTlRST0xf QVVESU9fREVTQ1JJUFRPUjExLCBIRE1JX0FVRElPX0NPRElOR19UWVBFX01MUCB9LAorCQl7IGl4 QVpBTElBX0YwX0NPREVDX1BJTl9DT05UUk9MX0FVRElPX0RFU0NSSVBUT1IxMywgSERNSV9BVURJ T19DT0RJTkdfVFlQRV9XTUFfUFJPIH0sCisJfTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29u bmVjdG9yLCAmZW5jb2Rlci0+ZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkg eworCQlpZiAoY29ubmVjdG9yLT5lbmNvZGVyID09IGVuY29kZXIpIHsKKwkJCWFtZGdwdV9jb25u ZWN0b3IgPSB0b19hbWRncHVfY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJCQlicmVhazsKKwkJfQor CX0KKworCWlmICghYW1kZ3B1X2Nvbm5lY3RvcikgeworCQlEUk1fRVJST1IoIkNvdWxkbid0IGZp bmQgZW5jb2RlcidzIGNvbm5lY3RvclxuIik7CisJCXJldHVybjsKKwl9CisKKwlzYWRfY291bnQg PSBkcm1fZWRpZF90b19zYWQoYW1kZ3B1X2Nvbm5lY3Rvcl9lZGlkKGNvbm5lY3RvciksICZzYWRz KTsKKwlpZiAoc2FkX2NvdW50IDw9IDApIHsKKwkJRFJNX0VSUk9SKCJDb3VsZG4ndCByZWFkIFNB RHM6ICVkXG4iLCBzYWRfY291bnQpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUoZWxkX3JlZ190b190eXBlKTsgaSsrKSB7CisJCXUzMiB0bXAgPSAwOworCQl1 OCBzdGVyZW9fZnJlcXMgPSAwOworCQlpbnQgbWF4X2NoYW5uZWxzID0gLTE7CisJCWludCBqOwor CisJCWZvciAoaiA9IDA7IGogPCBzYWRfY291bnQ7IGorKykgeworCQkJc3RydWN0IGNlYV9zYWQg KnNhZCA9ICZzYWRzW2pdOworCisJCQlpZiAoc2FkLT5mb3JtYXQgPT0gZWxkX3JlZ190b190eXBl W2ldWzFdKSB7CisJCQkJaWYgKHNhZC0+Y2hhbm5lbHMgPiBtYXhfY2hhbm5lbHMpIHsKKwkJCQkJ dG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIEFaQUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJPTF9BVURJ T19ERVNDUklQVE9SMCwKKwkJCQkJCQlNQVhfQ0hBTk5FTFMsIHNhZC0+Y2hhbm5lbHMpOworCQkJ CQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQVpBTElBX0YwX0NPREVDX1BJTl9DT05UUk9MX0FV RElPX0RFU0NSSVBUT1IwLAorCQkJCQkJCURFU0NSSVBUT1JfQllURV8yLCBzYWQtPmJ5dGUyKTsK KwkJCQkJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIEFaQUxJQV9GMF9DT0RFQ19QSU5fQ09OVFJP TF9BVURJT19ERVNDUklQVE9SMCwKKwkJCQkJCQlTVVBQT1JURURfRlJFUVVFTkNJRVMsIHNhZC0+ ZnJlcSk7CisJCQkJCW1heF9jaGFubmVscyA9IHNhZC0+Y2hhbm5lbHM7CisJCQkJfQorCisJCQkJ aWYgKHNhZC0+Zm9ybWF0ID09IEhETUlfQVVESU9fQ09ESU5HX1RZUEVfUENNKQorCQkJCQlzdGVy ZW9fZnJlcXMgfD0gc2FkLT5mcmVxOworCQkJCWVsc2UKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0K KworCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQVpBTElBX0YwX0NPREVDX1BJTl9DT05UUk9M X0FVRElPX0RFU0NSSVBUT1IwLAorCQkJCVNVUFBPUlRFRF9GUkVRVUVOQ0lFU19TVEVSRU8sIHN0 ZXJlb19mcmVxcyk7CisJCVdSRUczMl9BVURJT19FTkRQVChkaWctPmFmbXQtPnBpbi0+b2Zmc2V0 LCBlbGRfcmVnX3RvX3R5cGVbaV1bMF0sIHRtcCk7CisJfQorCisJa2ZyZWUoc2Fkcyk7CiAKIH0K LSovCisKIHN0YXRpYyB2b2lkIGRjZV92Nl8wX2F1ZGlvX2VuYWJsZShzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiwKIAkJCQkgIHN0cnVjdCBhbWRncHVfYXVkaW9fcGluICpwaW4sCiAJCQkJICBi b29sIGVuYWJsZSkKIHsKLQlEUk1fSU5GTygieHh4eDogZGNlX3Y2XzBfYXVkaW9fZW5hYmxlLS0t bm8gaW1wISEhISFcbiIpOworCWlmICghcGluKQorCQlyZXR1cm47CisKKwlXUkVHMzJfQVVESU9f RU5EUFQocGluLT5vZmZzZXQsIGl4QVpBTElBX0YwX0NPREVDX1BJTl9DT05UUk9MX0hPVF9QTFVH X0NPTlRST0wsCisJCQllbmFibGUgPyBBWkFMSUFfRjBfQ09ERUNfUElOX0NPTlRST0xfSE9UX1BM VUdfQ09OVFJPTF9fQVVESU9fRU5BQkxFRF9NQVNLIDogMCk7CiB9CiAKIHN0YXRpYyBjb25zdCB1 MzIgcGluX29mZnNldHNbN10gPQpAQCAtMTMxNywxMiArMTQ5NSw0NCBAQCBzdGF0aWMgY29uc3Qg dTMyIHBpbl9vZmZzZXRzWzddID0KIAogc3RhdGljIGludCBkY2VfdjZfMF9hdWRpb19pbml0KHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogeworCWludCBpOworCisJaWYgKCFhbWRncHVfYXVk aW8pCisJCXJldHVybiAwOworCisJYWRldi0+bW9kZV9pbmZvLmF1ZGlvLmVuYWJsZWQgPSB0cnVl OworCisJYWRldi0+bW9kZV9pbmZvLmF1ZGlvLm51bV9waW5zID0gNzsKKworCWZvciAoaSA9IDA7 IGkgPCBhZGV2LT5tb2RlX2luZm8uYXVkaW8ubnVtX3BpbnM7IGkrKykgeworCQlhZGV2LT5tb2Rl X2luZm8uYXVkaW8ucGluW2ldLmNoYW5uZWxzID0gLTE7CisJCWFkZXYtPm1vZGVfaW5mby5hdWRp by5waW5baV0ucmF0ZSA9IC0xOworCQlhZGV2LT5tb2RlX2luZm8uYXVkaW8ucGluW2ldLmJpdHNf cGVyX3NhbXBsZSA9IC0xOworCQlhZGV2LT5tb2RlX2luZm8uYXVkaW8ucGluW2ldLnN0YXR1c19i aXRzID0gMDsKKwkJYWRldi0+bW9kZV9pbmZvLmF1ZGlvLnBpbltpXS5jYXRlZ29yeV9jb2RlID0g MDsKKwkJYWRldi0+bW9kZV9pbmZvLmF1ZGlvLnBpbltpXS5jb25uZWN0ZWQgPSBmYWxzZTsKKwkJ YWRldi0+bW9kZV9pbmZvLmF1ZGlvLnBpbltpXS5vZmZzZXQgPSBwaW5fb2Zmc2V0c1tpXTsKKwkJ YWRldi0+bW9kZV9pbmZvLmF1ZGlvLnBpbltpXS5pZCA9IGk7CisJCWRjZV92Nl8wX2F1ZGlvX2Vu YWJsZShhZGV2LCAmYWRldi0+bW9kZV9pbmZvLmF1ZGlvLnBpbltpXSwgZmFsc2UpOworCX0KKwog CXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBkY2VfdjZfMF9hdWRpb19maW5pKHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2KQogeworCWludCBpOworCisJaWYgKCFhbWRncHVfYXVkaW8pCisJ CXJldHVybjsKKworCWlmICghYWRldi0+bW9kZV9pbmZvLmF1ZGlvLmVuYWJsZWQpCisJCXJldHVy bjsKIAorCWZvciAoaSA9IDA7IGkgPCBhZGV2LT5tb2RlX2luZm8uYXVkaW8ubnVtX3BpbnM7IGkr KykKKwkJZGNlX3Y2XzBfYXVkaW9fZW5hYmxlKGFkZXYsICZhZGV2LT5tb2RlX2luZm8uYXVkaW8u cGluW2ldLCBmYWxzZSk7CisKKwlhZGV2LT5tb2RlX2luZm8uYXVkaW8uZW5hYmxlZCA9IGZhbHNl OwogfQogCiAvKgpAQCAtMTMzMSwyOCArMTU0MSwyMDQgQEAgc3RhdGljIHZvaWQgZGNlX3Y2XzBf YWZtdF91cGRhdGVfQUNSKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgdWludDMyX3QgY2xv Y2sKIAlEUk1fSU5GTygieHh4eDogZGNlX3Y2XzBfYWZtdF91cGRhdGVfQUNSLS0tbm8gaW1wISEh ISFcbiIpOwogfQogKi8KLS8qCi0gKiBidWlsZCBhIEhETUkgVmlkZW8gSW5mbyBGcmFtZQotICov Ci0vKgorCiBzdGF0aWMgdm9pZCBkY2VfdjZfMF9hZm10X3VwZGF0ZV9hdmlfaW5mb2ZyYW1lKHN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKLQkJCQkJICAgICAgIHZvaWQgKmJ1ZmZlciwgc2l6 ZV90IHNpemUpCisJCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKIHsK LQlEUk1fSU5GTygieHh4eDogZGNlX3Y2XzBfYWZtdF91cGRhdGVfYXZpX2luZm9mcmFtZS0tLW5v IGltcCEhISEhXG4iKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2Owor CXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qg YW1kZ3B1X2VuY29kZXIgKmFtZGdwdV9lbmNvZGVyID0gdG9fYW1kZ3B1X2VuY29kZXIoZW5jb2Rl cik7CisJc3RydWN0IGFtZGdwdV9lbmNvZGVyX2F0b21fZGlnICpkaWcgPSBhbWRncHVfZW5jb2Rl ci0+ZW5jX3ByaXY7CisJc3RydWN0IGhkbWlfYXZpX2luZm9mcmFtZSBmcmFtZTsKKwl1OCBidWZm ZXJbSERNSV9JTkZPRlJBTUVfSEVBREVSX1NJWkUgKyBIRE1JX0FWSV9JTkZPRlJBTUVfU0laRV07 CisJdWludDhfdCAqcGF5bG9hZCA9IGJ1ZmZlciArIDM7CisJdWludDhfdCAqaGVhZGVyID0gYnVm ZmVyOworCXNzaXplX3QgZXJyOworCXUzMiB0bXA7CisKKwllcnIgPSBkcm1faGRtaV9hdmlfaW5m b2ZyYW1lX2Zyb21fZGlzcGxheV9tb2RlKCZmcmFtZSwgbW9kZSk7CisJaWYgKGVyciA8IDApIHsK KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gc2V0dXAgQVZJIGluZm9mcmFtZTogJXpkXG4iLCBlcnIp OworCQlyZXR1cm47CisJfQorCisJZXJyID0gaGRtaV9hdmlfaW5mb2ZyYW1lX3BhY2soJmZyYW1l LCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlpZiAoZXJyIDwgMCkgeworCQlEUk1fRVJST1Io ImZhaWxlZCB0byBwYWNrIEFWSSBpbmZvZnJhbWU6ICV6ZFxuIiwgZXJyKTsKKwkJcmV0dXJuOwor CX0KKworCVdSRUczMihtbUFGTVRfQVZJX0lORk8wICsgZGlnLT5hZm10LT5vZmZzZXQsCisJICAg ICAgIHBheWxvYWRbMHgwXSB8IChwYXlsb2FkWzB4MV0gPDwgOCkgfCAocGF5bG9hZFsweDJdIDw8 IDE2KSB8IChwYXlsb2FkWzB4M10gPDwgMjQpKTsKKwlXUkVHMzIobW1BRk1UX0FWSV9JTkZPMSAr IGRpZy0+YWZtdC0+b2Zmc2V0LAorCSAgICAgICBwYXlsb2FkWzB4NF0gfCAocGF5bG9hZFsweDVd IDw8IDgpIHwgKHBheWxvYWRbMHg2XSA8PCAxNikgfCAocGF5bG9hZFsweDddIDw8IDI0KSk7CisJ V1JFRzMyKG1tQUZNVF9BVklfSU5GTzIgKyBkaWctPmFmbXQtPm9mZnNldCwKKwkgICAgICAgcGF5 bG9hZFsweDhdIHwgKHBheWxvYWRbMHg5XSA8PCA4KSB8IChwYXlsb2FkWzB4QV0gPDwgMTYpIHwg KHBheWxvYWRbMHhCXSA8PCAyNCkpOworCVdSRUczMihtbUFGTVRfQVZJX0lORk8zICsgZGlnLT5h Zm10LT5vZmZzZXQsCisJICAgICAgIHBheWxvYWRbMHhDXSB8IChwYXlsb2FkWzB4RF0gPDwgOCkg fCAoaGVhZGVyWzFdIDw8IDI0KSk7CisKKwl0bXAgPSBSUkVHMzIobW1IRE1JX0lORk9GUkFNRV9D T05UUk9MMSArIGRpZy0+YWZtdC0+b2Zmc2V0KTsKKwkvKiBhbnl0aGluZyBvdGhlciB0aGFuIDAg Ki8KKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgSERNSV9JTkZPRlJBTUVfQ09OVFJPTDEsCisJ CQlIRE1JX0FVRElPX0lORk9fTElORSwgMik7CisJV1JFRzMyKG1tSERNSV9JTkZPRlJBTUVfQ09O VFJPTDEgKyBkaWctPmFmbXQtPm9mZnNldCwgdG1wKTsKIH0KIAogc3RhdGljIHZvaWQgZGNlX3Y2 XzBfYXVkaW9fc2V0X2R0byhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIHUzMiBjbG9jaykK IHsKLQlEUk1fSU5GTygieHh4eDogZGNlX3Y2XzBfYXVkaW9fc2V0X2R0by0tLW5vIGltcCEhISEh XG4iKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgYW1kZ3B1X2Ny dGMgKmFtZGdwdV9jcnRjID0gdG9fYW1kZ3B1X2NydGMoZW5jb2Rlci0+Y3J0Yyk7CisJdTMyIHRt cDsKKworCS8qCisJICogVHdvIGR0b3M6IGdlbmVyYWxseSB1c2UgZHRvMCBmb3IgaGRtaSwgZHRv MSBmb3IgZHAuCisJICogRXhwcmVzcyBbMjRNSHogLyB0YXJnZXQgcGl4ZWwgY2xvY2tdIGFzIGFu IGV4YWN0IHJhdGlvbmFsCisJICogbnVtYmVyIChjb2VmZmljaWVudCBvZiB0d28gaW50ZWdlciBu dW1iZXJzLiAgRENDR19BVURJT19EVE94X1BIQVNFCisJICogaXMgdGhlIG51bWVyYXRvciwgREND R19BVURJT19EVE94X01PRFVMRSBpcyB0aGUgZGVub21pbmF0b3IKKwkgKi8KKwl0bXAgPSBSUkVH MzIobW1EQ0NHX0FVRElPX0RUT19TT1VSQ0UpOworCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBE Q0NHX0FVRElPX0RUT19TT1VSQ0UsCisJCQlEQ0NHX0FVRElPX0RUTzBfU09VUkNFX1NFTCwgYW1k Z3B1X2NydGMtPmNydGNfaWQpOworCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBEQ0NHX0FVRElP X0RUT19TT1VSQ0UsIERDQ0dfQVVESU9fRFRPX1NFTCwgMSk7CisJV1JFRzMyKG1tRENDR19BVURJ T19EVE9fU09VUkNFLCB0bXApOworCVdSRUczMihtbURDQ0dfQVVESU9fRFRPMV9QSEFTRSwgMjQw MDApOworCVdSRUczMihtbURDQ0dfQVVESU9fRFRPMV9NT0RVTEUsIGNsb2NrKTsKK30KKworc3Rh dGljIHZvaWQgZGNlX3Y2XzBfc2V0X2F1ZGlvX3BhY2tldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGFtZGdw dV9lbmNvZGVyICphbWRncHVfZW5jb2RlciA9IHRvX2FtZGdwdV9lbmNvZGVyKGVuY29kZXIpOwor CXN0cnVjdCBhbWRncHVfZW5jb2Rlcl9hdG9tX2RpZyAqZGlnID0gYW1kZ3B1X2VuY29kZXItPmVu Y19wcml2OworCXUzMiB0bXA7CisKKwl0bXAgPSBSUkVHMzIobW1BRk1UX0lORk9GUkFNRV9DT05U Uk9MMCArIGRpZy0+YWZtdC0+b2Zmc2V0KTsKKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQUZN VF9JTkZPRlJBTUVfQ09OVFJPTDAsIEFGTVRfQVVESU9fSU5GT19VUERBVEUsIDEpOworCVdSRUcz MihtbUFGTVRfSU5GT0ZSQU1FX0NPTlRST0wwICsgZGlnLT5hZm10LT5vZmZzZXQsIHRtcCk7CisK Kwl0bXAgPSBSUkVHMzIobW1BRk1UXzYwOTU4XzAgKyBkaWctPmFmbXQtPm9mZnNldCk7CisJdG1w ID0gUkVHX1NFVF9GSUVMRCh0bXAsIEFGTVRfNjA5NThfMCwgQUZNVF82MDk1OF9DU19DSEFOTkVM X05VTUJFUl9MLCAxKTsKKwlXUkVHMzIobW1BRk1UXzYwOTU4XzAgKyBkaWctPmFmbXQtPm9mZnNl dCwgdG1wKTsKKworCXRtcCA9IFJSRUczMihtbUFGTVRfNjA5NThfMSArIGRpZy0+YWZtdC0+b2Zm c2V0KTsKKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQUZNVF82MDk1OF8xLCBBRk1UXzYwOTU4 X0NTX0NIQU5ORUxfTlVNQkVSX1IsIDIpOworCVdSRUczMihtbUFGTVRfNjA5NThfMSArIGRpZy0+ YWZtdC0+b2Zmc2V0LCB0bXApOworCisJdG1wID0gUlJFRzMyKG1tQUZNVF82MDk1OF8yICsgZGln LT5hZm10LT5vZmZzZXQpOworCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBBRk1UXzYwOTU4XzIs IEFGTVRfNjA5NThfQ1NfQ0hBTk5FTF9OVU1CRVJfMiwgMyk7CisJdG1wID0gUkVHX1NFVF9GSUVM RCh0bXAsIEFGTVRfNjA5NThfMiwgQUZNVF82MDk1OF9DU19DSEFOTkVMX05VTUJFUl8zLCA0KTsK Kwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQUZNVF82MDk1OF8yLCBBRk1UXzYwOTU4X0NTX0NI QU5ORUxfTlVNQkVSXzQsIDUpOworCXRtcCA9IFJFR19TRVRfRklFTEQodG1wLCBBRk1UXzYwOTU4 XzIsIEFGTVRfNjA5NThfQ1NfQ0hBTk5FTF9OVU1CRVJfNSwgNik7CisJdG1wID0gUkVHX1NFVF9G SUVMRCh0bXAsIEFGTVRfNjA5NThfMiwgQUZNVF82MDk1OF9DU19DSEFOTkVMX05VTUJFUl82LCA3 KTsKKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQUZNVF82MDk1OF8yLCBBRk1UXzYwOTU4X0NT X0NIQU5ORUxfTlVNQkVSXzcsIDgpOworCVdSRUczMihtbUFGTVRfNjA5NThfMiArIGRpZy0+YWZt dC0+b2Zmc2V0LCB0bXApOworCisJdG1wID0gUlJFRzMyKG1tQUZNVF9BVURJT19QQUNLRVRfQ09O VFJPTDIgKyBkaWctPmFmbXQtPm9mZnNldCk7CisJdG1wID0gUkVHX1NFVF9GSUVMRCh0bXAsIEFG TVRfQVVESU9fUEFDS0VUX0NPTlRST0wyLCBBRk1UX0FVRElPX0NIQU5ORUxfRU5BQkxFLCAweGZm KTsKKwlXUkVHMzIobW1BRk1UX0FVRElPX1BBQ0tFVF9DT05UUk9MMiArIGRpZy0+YWZtdC0+b2Zm c2V0LCB0bXApOworCisJdG1wID0gUlJFRzMyKG1tSERNSV9BVURJT19QQUNLRVRfQ09OVFJPTCAr IGRpZy0+YWZtdC0+b2Zmc2V0KTsKKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgSERNSV9BVURJ T19QQUNLRVRfQ09OVFJPTCwgSERNSV9BVURJT19ERUxBWV9FTiwgMSk7CisJdG1wID0gUkVHX1NF VF9GSUVMRCh0bXAsIEhETUlfQVVESU9fUEFDS0VUX0NPTlRST0wsIEhETUlfQVVESU9fUEFDS0VU U19QRVJfTElORSwgMyk7CisJV1JFRzMyKG1tSERNSV9BVURJT19QQUNLRVRfQ09OVFJPTCArIGRp Zy0+YWZtdC0+b2Zmc2V0LCB0bXApOworCisJdG1wID0gUlJFRzMyKG1tQUZNVF9BVURJT19QQUNL RVRfQ09OVFJPTCArIGRpZy0+YWZtdC0+b2Zmc2V0KTsKKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRt cCwgQUZNVF9BVURJT19QQUNLRVRfQ09OVFJPTCwgQUZNVF9SRVNFVF9GSUZPX1dIRU5fQVVESU9f RElTLCAxKTsKKwl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgQUZNVF9BVURJT19QQUNLRVRfQ09O VFJPTCwgQUZNVF82MDk1OF9DU19VUERBVEUsIDEpOworCVdSRUczMihtbUFGTVRfQVVESU9fUEFD S0VUX0NPTlRST0wgKyBkaWctPmFmbXQtPm9mZnNldCwgdG1wKTsKIH0KLSovCi0vKgotICogdXBk YXRlIHRoZSBpbmZvIGZyYW1lcyB3aXRoIHRoZSBkYXRhIGZyb20gdGhlIGN1cnJlbnQgZGlzcGxh eSBtb2RlCi0gKi8KKworc3RhdGljIHZvaWQgZGNlX3Y2XzBfYXVkaW9fc2V0X211dGUoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyLCBib29sIG11dGUpCit7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGRldi0+ ZGV2X3ByaXZhdGU7CisJc3RydWN0IGFtZGdwdV9lbmNvZGVyICphbWRncHVfZW5jb2RlciA9IHRv X2FtZGdwdV9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCBhbWRncHVfZW5jb2Rlcl9hdG9tX2Rp ZyAqZGlnID0gYW1kZ3B1X2VuY29kZXItPmVuY19wcml2OworCXUzMiB0bXA7CisKKwl0bXAgPSBS UkVHMzIobW1IRE1JX0dDICsgZGlnLT5hZm10LT5vZmZzZXQpOworCXRtcCA9IFJFR19TRVRfRklF TEQodG1wLCBIRE1JX0dDLCBIRE1JX0dDX0FWTVVURSwgbXV0ZSA/IDEgOiAwKTsKKwlXUkVHMzIo bW1IRE1JX0dDICsgZGlnLT5hZm10LT5vZmZzZXQsIHRtcCk7Cit9CisKK3N0YXRpYyB2b2lkIGRj ZV92Nl8wX2F1ZGlvX2RwX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGJvb2wg ZW5hYmxlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBhbWRn cHVfZW5jb2RlciAqYW1kZ3B1X2VuY29kZXIgPSB0b19hbWRncHVfZW5jb2RlcihlbmNvZGVyKTsK KwlzdHJ1Y3QgYW1kZ3B1X2VuY29kZXJfYXRvbV9kaWcgKmRpZyA9IGFtZGdwdV9lbmNvZGVyLT5l bmNfcHJpdjsKKwl1MzIgdG1wOworCisJaWYgKGVuYWJsZSkgeworCQl0bXAgPSBSUkVHMzIobW1B Rk1UX0FVRElPX1BBQ0tFVF9DT05UUk9MICsgZGlnLT5hZm10LT5vZmZzZXQpOworCQl0bXAgPSBS RUdfU0VUX0ZJRUxEKHRtcCwgQUZNVF9BVURJT19QQUNLRVRfQ09OVFJPTCwgQUZNVF9BVURJT19T QU1QTEVfU0VORCwgMSk7CisJCVdSRUczMihtbUFGTVRfQVVESU9fUEFDS0VUX0NPTlRST0wgKyBk aWctPmFmbXQtPm9mZnNldCwgdG1wKTsKKworCQl0bXAgPSBSUkVHMzIobW1EUF9TRUNfVElNRVNU QU1QICsgZGlnLT5hZm10LT5vZmZzZXQpOworCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgRFBf U0VDX1RJTUVTVEFNUCwgRFBfU0VDX1RJTUVTVEFNUF9NT0RFLCAxKTsKKwkJV1JFRzMyKG1tRFBf U0VDX1RJTUVTVEFNUCArIGRpZy0+YWZtdC0+b2Zmc2V0LCB0bXApOworCisJCXRtcCA9IFJSRUcz MihtbURQX1NFQ19DTlRMICsgZGlnLT5hZm10LT5vZmZzZXQpOworCQl0bXAgPSBSRUdfU0VUX0ZJ RUxEKHRtcCwgRFBfU0VDX0NOVEwsIERQX1NFQ19BU1BfRU5BQkxFLCAxKTsKKwkJdG1wID0gUkVH X1NFVF9GSUVMRCh0bXAsIERQX1NFQ19DTlRMLCBEUF9TRUNfQVRQX0VOQUJMRSwgMSk7CisJCXRt cCA9IFJFR19TRVRfRklFTEQodG1wLCBEUF9TRUNfQ05UTCwgRFBfU0VDX0FJUF9FTkFCTEUsIDEp OworCQl0bXAgPSBSRUdfU0VUX0ZJRUxEKHRtcCwgRFBfU0VDX0NOVEwsIERQX1NFQ19TVFJFQU1f RU5BQkxFLCAxKTsKKwkJV1JFRzMyKG1tRFBfU0VDX0NOVEwgKyBkaWctPmFmbXQtPm9mZnNldCwg dG1wKTsKKwl9IGVsc2UgeworCQlXUkVHMzIobW1EUF9TRUNfQ05UTCArIGRpZy0+YWZtdC0+b2Zm c2V0LCAwKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGRjZV92Nl8wX2FmbXRfc2V0bW9kZShzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCiAJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSkKIHsKLQlEUk1fSU5GTygieHh4eDogZGNlX3Y2XzBfYWZtdF9zZXRtb2RlIC0tLS1ubyBp bXBsICEhISEhISEhXG4iKTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2 OworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1 Y3QgYW1kZ3B1X2VuY29kZXIgKmFtZGdwdV9lbmNvZGVyID0gdG9fYW1kZ3B1X2VuY29kZXIoZW5j b2Rlcik7CisJc3RydWN0IGFtZGdwdV9lbmNvZGVyX2F0b21fZGlnICpkaWcgPSBhbWRncHVfZW5j b2Rlci0+ZW5jX3ByaXY7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1 Y3QgYW1kZ3B1X2Nvbm5lY3RvciAqYW1kZ3B1X2Nvbm5lY3RvciA9IE5VTEw7CisKKwlpZiAoIWRp ZyB8fCAhZGlnLT5hZm10KQorCQlyZXR1cm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5l Y3RvciwgJmVuY29kZXItPmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsK KwkJaWYgKGNvbm5lY3Rvci0+ZW5jb2RlciA9PSBlbmNvZGVyKSB7CisJCQlhbWRncHVfY29ubmVj dG9yID0gdG9fYW1kZ3B1X2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCQkJYnJlYWs7CisJCX0KKwl9 CisKKwlpZiAoIWFtZGdwdV9jb25uZWN0b3IpIHsKKwkJRFJNX0VSUk9SKCJDb3VsZG4ndCBmaW5k IGVuY29kZXIncyBjb25uZWN0b3JcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFkaWctPmFm bXQtPmVuYWJsZWQpCisJCXJldHVybjsKKworCWRpZy0+YWZtdC0+cGluID0gZGNlX3Y2XzBfYXVk aW9fZ2V0X3BpbihhZGV2KTsKKwlpZiAoIWRpZy0+YWZtdC0+cGluKQorCQlyZXR1cm47CisKKwkv KiBkaXNhYmxlIGF1ZGlvIGJlZm9yZSBzZXR0aW5nIHVwIGh3ICovCisJZGNlX3Y2XzBfYXVkaW9f ZW5hYmxlKGFkZXYsIGRpZy0+YWZtdC0+cGluLCBmYWxzZSk7CisKKwlkY2VfdjZfMF9hdWRpb19z ZXRfbXV0ZShlbmNvZGVyLCB0cnVlKTsKKwlkY2VfdjZfMF9hdWRpb193cml0ZV9zcGVha2VyX2Fs bG9jYXRpb24oZW5jb2Rlcik7CisJZGNlX3Y2XzBfYXVkaW9fd3JpdGVfc2FkX3JlZ3MoZW5jb2Rl cik7CisJZGNlX3Y2XzBfYXVkaW9fd3JpdGVfbGF0ZW5jeV9maWVsZHMoZW5jb2RlciwgbW9kZSk7 CisJZGNlX3Y2XzBfYXVkaW9fc2V0X2R0byhlbmNvZGVyLCBhZGV2LT5jbG9jay5kZWZhdWx0X2Rp c3BjbGsgKiAxMCk7CisJZGNlX3Y2XzBfc2V0X2F1ZGlvX3BhY2tldChlbmNvZGVyKTsKKwlkY2Vf djZfMF9hZm10X2F1ZGlvX3NlbGVjdF9waW4oZW5jb2Rlcik7CisJZGNlX3Y2XzBfYWZtdF91cGRh dGVfYXZpX2luZm9mcmFtZShlbmNvZGVyLCBtb2RlKTsKKwlkY2VfdjZfMF9hdWRpb19zZXRfbXV0 ZShlbmNvZGVyLCBmYWxzZSk7CisJZGNlX3Y2XzBfYXVkaW9fZHBfZW5hYmxlKGVuY29kZXIsIDEp OworCisJLyogZW5hYmxlIGF1ZGlvIGFmdGVyIHNldHRpbmcgdXAgaHcgKi8KKwlkY2VfdjZfMF9h dWRpb19lbmFibGUoYWRldiwgZGlnLT5hZm10LT5waW4sIHRydWUpOwogfQogCiBzdGF0aWMgdm9p ZCBkY2VfdjZfMF9hZm10X2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsIGJvb2wg ZW5hYmxlKQpAQCAtMTM2OCw2ICsxNzU0LDcgQEAgc3RhdGljIHZvaWQgZGNlX3Y2XzBfYWZtdF9l bmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBib29sIGVuYWJsZSkKIAkvKiBTaWxl bnQsIHI2MDBfaGRtaV9lbmFibGUgd2lsbCByYWlzZSBXQVJOIGZvciB1cyAqLwogCWlmIChlbmFi bGUgJiYgZGlnLT5hZm10LT5lbmFibGVkKQogCQlyZXR1cm47CisKIAlpZiAoIWVuYWJsZSAmJiAh ZGlnLT5hZm10LT5lbmFibGVkKQogCQlyZXR1cm47CiAKQEAgLTI3ODEsNiArMzE2OCw3IEBAIGRj ZV92Nl8wX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogewog CiAJc3RydWN0IGFtZGdwdV9lbmNvZGVyICphbWRncHVfZW5jb2RlciA9IHRvX2FtZGdwdV9lbmNv ZGVyKGVuY29kZXIpOworCWludCBlbSA9IGFtZGdwdV9hdG9tYmlvc19lbmNvZGVyX2dldF9lbmNv ZGVyX21vZGUoZW5jb2Rlcik7CiAKIAlhbWRncHVfZW5jb2Rlci0+cGl4ZWxfY2xvY2sgPSBhZGp1 c3RlZF9tb2RlLT5jbG9jazsKIApAQCAtMjc5MCw3ICszMTc4LDcgQEAgZGNlX3Y2XzBfZW5jb2Rl cl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCiAJLyogc2V0IHNjYWxlciBj bGVhcnMgdGhpcyBvbiBzb21lIGNoaXBzICovCiAJZGNlX3Y2XzBfc2V0X2ludGVybGVhdmUoZW5j b2Rlci0+Y3J0YywgbW9kZSk7CiAKLQlpZiAoYW1kZ3B1X2F0b21iaW9zX2VuY29kZXJfZ2V0X2Vu Y29kZXJfbW9kZShlbmNvZGVyKSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9IRE1JKSB7CisJaWYgKGVt ID09IEFUT01fRU5DT0RFUl9NT0RFX0hETUkgfHwgRU5DT0RFUl9NT0RFX0lTX0RQKGVtKSkgewog CQlkY2VfdjZfMF9hZm10X2VuYWJsZShlbmNvZGVyLCB0cnVlKTsKIAkJZGNlX3Y2XzBfYWZtdF9z ZXRtb2RlKGVuY29kZXIsIGFkanVzdGVkX21vZGUpOwogCX0KQEAgLTI4NTIsMTEgKzMyNDAsMTIg QEAgc3RhdGljIHZvaWQgZGNlX3Y2XzBfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlcikKIAogCXN0cnVjdCBhbWRncHVfZW5jb2RlciAqYW1kZ3B1X2VuY29kZXIgPSB0 b19hbWRncHVfZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3QgYW1kZ3B1X2VuY29kZXJfYXRvbV9k aWcgKmRpZzsKKwlpbnQgZW0gPSBhbWRncHVfYXRvbWJpb3NfZW5jb2Rlcl9nZXRfZW5jb2Rlcl9t b2RlKGVuY29kZXIpOwogCiAJYW1kZ3B1X2F0b21iaW9zX2VuY29kZXJfZHBtcyhlbmNvZGVyLCBE Uk1fTU9ERV9EUE1TX09GRik7CiAKIAlpZiAoYW1kZ3B1X2F0b21iaW9zX2VuY29kZXJfaXNfZGln aXRhbChlbmNvZGVyKSkgewotCQlpZiAoYW1kZ3B1X2F0b21iaW9zX2VuY29kZXJfZ2V0X2VuY29k ZXJfbW9kZShlbmNvZGVyKSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9IRE1JKQorCQlpZiAoZW0gPT0g QVRPTV9FTkNPREVSX01PREVfSERNSSB8fCBFTkNPREVSX01PREVfSVNfRFAoZW0pKQogCQkJZGNl X3Y2XzBfYWZtdF9lbmFibGUoZW5jb2RlciwgZmFsc2UpOwogCQlkaWcgPSBhbWRncHVfZW5jb2Rl ci0+ZW5jX3ByaXY7CiAJCWRpZy0+ZGlnX2VuY29kZXIgPSAtMTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvaW5jbHVkZS9hc2ljX3JlZy9kY2UvZGNlXzZfMF9zaF9tYXNrLmggYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvYXNpY19yZWcvZGNlL2RjZV82XzBfc2hfbWFzay5o CmluZGV4IDlhNGQ0YzIuLmFiZTA1YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv aW5jbHVkZS9hc2ljX3JlZy9kY2UvZGNlXzZfMF9zaF9tYXNrLmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9pbmNsdWRlL2FzaWNfcmVnL2RjZS9kY2VfNl8wX3NoX21hc2suaApAQCAtOTA2LDYg KzkwNiw4IEBACiAjZGVmaW5lIEFaQUxJQV9GMF9DT0RFQ19FTkRQT0lOVF9EQVRBX19BWkFMSUFf RU5EUE9JTlRfUkVHX0RBVEFfX1NISUZUIDB4MDAwMDAwMDAKICNkZWZpbmUgQVpBTElBX0YwX0NP REVDX0VORFBPSU5UX0lOREVYX19BWkFMSUFfRU5EUE9JTlRfUkVHX0lOREVYX01BU0sgMHgwMDAw MDBmZkwKICNkZWZpbmUgQVpBTElBX0YwX0NPREVDX0VORFBPSU5UX0lOREVYX19BWkFMSUFfRU5E UE9JTlRfUkVHX0lOREVYX19TSElGVCAweDAwMDAwMDAwCisjZGVmaW5lIEFaQUxJQV9GMF9DT0RF Q19FTkRQT0lOVF9JTkRFWF9fQVpBTElBX0VORFBPSU5UX1JFR19XUklURV9FTl9NQVNLIDB4MDAw MDAxMDBMCisjZGVmaW5lIEFaQUxJQV9GMF9DT0RFQ19FTkRQT0lOVF9JTkRFWF9fQVpBTElBX0VO RFBPSU5UX1JFR19XUklURV9FTl9fU0hJRlQgMHgwMDAwMDAwOAogI2RlZmluZSBBWkFMSUFfRjBf Q09ERUNfRlVOQ1RJT05fQ09OVFJPTF9DT05WRVJURVJfU1lOQ0hST05JWkFUSU9OX19DT05WRVJU RVJfU1lOQ0hST05JWkFUSU9OX01BU0sgMHgwMDAwMDAzZkwKICNkZWZpbmUgQVpBTElBX0YwX0NP REVDX0ZVTkNUSU9OX0NPTlRST0xfQ09OVkVSVEVSX1NZTkNIUk9OSVpBVElPTl9fQ09OVkVSVEVS X1NZTkNIUk9OSVpBVElPTl9fU0hJRlQgMHgwMDAwMDAwMAogI2RlZmluZSBBWkFMSUFfRjBfQ09E RUNfRlVOQ1RJT05fQ09OVFJPTF9QT1dFUl9TVEFURV9fQ0xLU1RPUE9LX01BU0sgMHgwMDAwMDIw MEwKLS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK