From mboxrd@z Thu Jan 1 00:00:00 1970 From: Huang Rui Subject: [PATCH 129/138] drm/amd/powerplay: add sys interface to set pp_od_clk_voltage for smu Date: Fri, 25 Jan 2019 18:25:36 +0800 Message-ID: <1548411945-12396-130-git-send-email-ray.huang@amd.com> References: <1548411945-12396-1-git-send-email-ray.huang@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1548411945-12396-1-git-send-email-ray.huang-5C7GfCeVMHo@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: Likun Gao , Kevin Wang , Chengming Gui RnJvbTogTGlrdW4gR2FvIDxMaWt1bi5HYW9AYW1kLmNvbT4KCkFkZCBzeXMgaW50ZXJmYWNlIHRv IHNldCBwcF9vZF9jbGtfdm9sdGFnZSBmb3Igc211LgoKU2lnbmVkLW9mZi1ieTogTGlrdW4gR2Fv IDxMaWt1bi5HYW9AYW1kLmNvbT4KUmV2aWV3ZWQtYnk6IEh1YW5nIFJ1aSA8cmF5Lmh1YW5nQGFt ZC5jb20+ClJldmlld2VkLWJ5OiBLZXZpbiBXYW5nIDxrZXZpbjEud2FuZ0BhbWQuY29tPgotLS0K IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9wbS5jICAgICAgICAgfCAgMzAgKyst LQogZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaW5jL2FtZGdwdV9zbXUuaCB8ICAgNyAr CiBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS92ZWdhMjBfcHB0LmMgICAgIHwgMjIzICsr KysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMjUwIGluc2VydGlvbnMo KyksIDEwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3BtLmMK aW5kZXggMWE4MWExZC4uMDNlZWE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X3BtLmMKQEAgLTY1MCwxOSArNjUwLDI5IEBAIHN0YXRpYyBzc2l6ZV90IGFtZGdwdV9zZXRfcHBf b2RfY2xrX3ZvbHRhZ2Uoc3RydWN0IGRldmljZSAqZGV2LAogCQkJdG1wX3N0cisrOwogCX0KIAot CWlmIChhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MtPm9kbl9lZGl0X2RwbV90YWJsZSkKLQkJcmV0 ID0gYW1kZ3B1X2RwbV9vZG5fZWRpdF9kcG1fdGFibGUoYWRldiwgdHlwZSwKLQkJCQkJCXBhcmFt ZXRlciwgcGFyYW1ldGVyX3NpemUpOworCWlmIChpc19zdXBwb3J0X3N3X3NtdShhZGV2KSkgewor CQlyZXQgPSBzbXVfb2RfZWRpdF9kcG1fdGFibGUoJmFkZXYtPnNtdSwgdHlwZSwKKwkJCQkJICAg IHBhcmFtZXRlciwgcGFyYW1ldGVyX3NpemUpOwogCi0JaWYgKHJldCkKLQkJcmV0dXJuIC1FSU5W QUw7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlpZiAoYWRl di0+cG93ZXJwbGF5LnBwX2Z1bmNzLT5vZG5fZWRpdF9kcG1fdGFibGUpCisJCQlyZXQgPSBhbWRn cHVfZHBtX29kbl9lZGl0X2RwbV90YWJsZShhZGV2LCB0eXBlLAorCQkJCQkJcGFyYW1ldGVyLCBw YXJhbWV0ZXJfc2l6ZSk7CiAKLQlpZiAodHlwZSA9PSBQUF9PRF9DT01NSVRfRFBNX1RBQkxFKSB7 Ci0JCWlmIChhZGV2LT5wb3dlcnBsYXkucHBfZnVuY3MtPmRpc3BhdGNoX3Rhc2tzKSB7Ci0JCQlh bWRncHVfZHBtX2Rpc3BhdGNoX3Rhc2soYWRldiwgQU1EX1BQX1RBU0tfUkVBREpVU1RfUE9XRVJf U1RBVEUsIE5VTEwpOwotCQkJcmV0dXJuIGNvdW50OwotCQl9IGVsc2UgeworCQlpZiAocmV0KQog CQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKHR5cGUgPT0gUFBfT0RfQ09NTUlUX0RQTV9UQUJM RSkgeworCQkJaWYgKGFkZXYtPnBvd2VycGxheS5wcF9mdW5jcy0+ZGlzcGF0Y2hfdGFza3MpIHsK KwkJCQlhbWRncHVfZHBtX2Rpc3BhdGNoX3Rhc2soYWRldiwKKwkJCQkJCUFNRF9QUF9UQVNLX1JF QURKVVNUX1BPV0VSX1NUQVRFLAorCQkJCQkJTlVMTCk7CisJCQkJcmV0dXJuIGNvdW50OworCQkJ fSBlbHNlIHsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KIAkJfQogCX0KIApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaW5jL2FtZGdwdV9zbXUuaCBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2luYy9hbWRncHVfc211LmgKaW5kZXggMGQ4YzYwMS4u ZGRjZmJkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaW5jL2Ft ZGdwdV9zbXUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9pbmMvYW1kZ3B1 X3NtdS5oCkBAIC0zMTAsNiArMzEwLDggQEAgc3RydWN0IHNtdV90YWJsZV9jb250ZXh0CiAJdWlu dDMyX3QJCQkqb2Rfc2V0dGluZ3NfbWluOwogCXZvaWQJCQkJKm92ZXJkcml2ZV90YWJsZTsKIAl2 b2lkCQkJCSpvZDhfc2V0dGluZ3M7CisJYm9vbAkJCQlvZF9nZnhjbGtfdXBkYXRlOworCWJvb2wJ CQkJb2RfbWVtY2xrX3VwZGF0ZTsKIH07CiAKIHN0cnVjdCBzbXVfZHBtX2NvbnRleHQgewpAQCAt NDE3LDYgKzQxOSw5IEBAIHN0cnVjdCBwcHRhYmxlX2Z1bmNzIHsKIAlpbnQgKCpzZXRfb2RfcGVy Y2VudGFnZSkoc3RydWN0IHNtdV9jb250ZXh0ICpzbXUsCiAJCQkJIGVudW0gcHBfY2xvY2tfdHlw ZSB0eXBlLAogCQkJCSB1aW50MzJfdCB2YWx1ZSk7CisJaW50ICgqb2RfZWRpdF9kcG1fdGFibGUp KHN0cnVjdCBzbXVfY29udGV4dCAqc211LAorCQkJCSBlbnVtIFBQX09EX0RQTV9UQUJMRV9DT01N QU5EIHR5cGUsCisJCQkJIGxvbmcgKmlucHV0LCB1aW50MzJfdCBzaXplKTsKIAlpbnQgKCpnZXRf Y2xvY2tfYnlfdHlwZV93aXRoX2xhdGVuY3kpKHN0cnVjdCBzbXVfY29udGV4dCAqc211LAogCQkJ CQkgICAgICBlbnVtIGFtZF9wcF9jbG9ja190eXBlIHR5cGUsCiAJCQkJCSAgICAgIHN0cnVjdApA QCAtNjAzLDYgKzYwOCw4IEBAIHN0cnVjdCBzbXVfZnVuY3MKIAkoKHNtdSktPnBwdF9mdW5jcy0+ Z2V0X29kX3BlcmNlbnRhZ2UgPyAoc211KS0+cHB0X2Z1bmNzLT5nZXRfb2RfcGVyY2VudGFnZSgo c211KSwgKHR5cGUpKSA6IDApCiAjZGVmaW5lIHNtdV9zZXRfb2RfcGVyY2VudGFnZShzbXUsIHR5 cGUsIHZhbHVlKSBcCiAJKChzbXUpLT5wcHRfZnVuY3MtPnNldF9vZF9wZXJjZW50YWdlID8gKHNt dSktPnBwdF9mdW5jcy0+c2V0X29kX3BlcmNlbnRhZ2UoKHNtdSksICh0eXBlKSwgKHZhbHVlKSkg OiAwKQorI2RlZmluZSBzbXVfb2RfZWRpdF9kcG1fdGFibGUoc211LCB0eXBlLCBpbnB1dCwgc2l6 ZSkgXAorCSgoc211KS0+cHB0X2Z1bmNzLT5vZF9lZGl0X2RwbV90YWJsZSA/IChzbXUpLT5wcHRf ZnVuY3MtPm9kX2VkaXRfZHBtX3RhYmxlKChzbXUpLCAodHlwZSksIChpbnB1dCksIChzaXplKSkg OiAwKQogI2RlZmluZSBzbXVfc3RhcnRfdGhlcm1hbF9jb250cm9sKHNtdSkgXAogCSgoc211KS0+ ZnVuY3MtPnN0YXJ0X3RoZXJtYWxfY29udHJvbD8gKHNtdSktPmZ1bmNzLT5zdGFydF90aGVybWFs X2NvbnRyb2woKHNtdSkpIDogMCkKICNkZWZpbmUgc211X3JlYWRfc2Vuc29yKHNtdSwgc2Vuc29y LCBkYXRhLCBzaXplKSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxh eS92ZWdhMjBfcHB0LmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS92ZWdhMjBfcHB0 LmMKaW5kZXggOWUzMGQ5Mi4uNzc0NTMxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9wb3dlcnBsYXkvdmVnYTIwX3BwdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJw bGF5L3ZlZ2EyMF9wcHQuYwpAQCAtMTk4NSw2ICsxOTg1LDIyOCBAQCBzdGF0aWMgaW50IHZlZ2Ey MF9zZXRfb2RfcGVyY2VudGFnZShzdHJ1Y3Qgc211X2NvbnRleHQgKnNtdSwKIAlyZXR1cm4gMDsK IH0KIAorc3RhdGljIGludCB2ZWdhMjBfb2RuX2VkaXRfZHBtX3RhYmxlKHN0cnVjdCBzbXVfY29u dGV4dCAqc211LAorCQkJCSAgICAgZW51bSBQUF9PRF9EUE1fVEFCTEVfQ09NTUFORCB0eXBlLAor CQkJCSAgICAgbG9uZyAqaW5wdXQsIHVpbnQzMl90IHNpemUpCit7CisJc3RydWN0IHNtdV90YWJs ZV9jb250ZXh0ICp0YWJsZV9jb250ZXh0ID0gJnNtdS0+c211X3RhYmxlOworCU92ZXJEcml2ZVRh YmxlX3QgKm9kX3RhYmxlID0KKwkJKE92ZXJEcml2ZVRhYmxlX3QgKikodGFibGVfY29udGV4dC0+ b3ZlcmRyaXZlX3RhYmxlKTsKKwlzdHJ1Y3Qgc211X2RwbV9jb250ZXh0ICpzbXVfZHBtID0gJnNt dS0+c211X2RwbTsKKwlzdHJ1Y3QgdmVnYTIwX2RwbV90YWJsZSAqZHBtX3RhYmxlID0gTlVMTDsK KwlzdHJ1Y3QgdmVnYTIwX3NpbmdsZV9kcG1fdGFibGUgKnNpbmdsZV9kcG1fdGFibGU7CisJc3Ry dWN0IHZlZ2EyMF9vZDhfc2V0dGluZ3MgKm9kOF9zZXR0aW5ncyA9CisJCShzdHJ1Y3QgdmVnYTIw X29kOF9zZXR0aW5ncyAqKXRhYmxlX2NvbnRleHQtPm9kOF9zZXR0aW5nczsKKwlzdHJ1Y3QgcHBf Y2xvY2tfbGV2ZWxzX3dpdGhfbGF0ZW5jeSBjbG9ja3M7CisJaW50MzJfdCBpbnB1dF9pbmRleCwg aW5wdXRfY2xrLCBpbnB1dF92b2wsIGk7CisJaW50IG9kOF9pZCwgcmV0OworCisJZHBtX3RhYmxl ID0gc211X2RwbS0+ZHBtX2NvbnRleHQ7CisKKwlpZiAoIWlucHV0KSB7CisJCXByX3dhcm4oIk5V TEwgdXNlciBpbnB1dCBmb3IgY2xvY2sgYW5kIHZvbHRhZ2VcbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFBQX09EX0VESVRfU0NMS19WRERDX1RB QkxFOgorCQlpZiAoIShvZDhfc2V0dGluZ3MtPm9kOF9zZXR0aW5nc19hcnJheVtPRDhfU0VUVElO R19HRlhDTEtfRk1JTl0uZmVhdHVyZV9pZCAmJgorCQkgICAgICBvZDhfc2V0dGluZ3MtPm9kOF9z ZXR0aW5nc19hcnJheVtPRDhfU0VUVElOR19HRlhDTEtfRk1BWF0uZmVhdHVyZV9pZCkpIHsKKwkJ CXByX2luZm8oIlNjbGsgbWluL21heCBmcmVxdWVuY3kgb3ZlcmRyaXZlIG5vdCBzdXBwb3J0ZWRc biIpOworCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IHNp emU7IGkgKz0gMikgeworCQkJaWYgKGkgKyAyID4gc2l6ZSkgeworCQkJCXByX2luZm8oImludmFs aWQgbnVtYmVyIG9mIGlucHV0IHBhcmFtZXRlcnMgJWRcbiIsIHNpemUpOworCQkJCXJldHVybiAt RUlOVkFMOworCQkJfQorCisJCQlpbnB1dF9pbmRleCA9IGlucHV0W2ldOworCQkJaW5wdXRfY2xr ID0gaW5wdXRbaSArIDFdOworCisJCQlpZiAoaW5wdXRfaW5kZXggIT0gMCAmJiBpbnB1dF9pbmRl eCAhPSAxKSB7CisJCQkJcHJfaW5mbygiSW52YWxpZCBpbmRleCAlZFxuIiwgaW5wdXRfaW5kZXgp OworCQkJCXByX2luZm8oIlN1cHBvcnQgbWluL21heCBzY2xrIGZyZXF1ZW5jeSBzZXR0aW5nb25s eSB3aGljaCBpbmRleCBieSAwLzFcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJ CQlpZiAoaW5wdXRfY2xrIDwgb2Q4X3NldHRpbmdzLT5vZDhfc2V0dGluZ3NfYXJyYXlbT0Q4X1NF VFRJTkdfR0ZYQ0xLX0ZNSU5dLm1pbl92YWx1ZSB8fAorCQkJICAgIGlucHV0X2NsayA+IG9kOF9z ZXR0aW5ncy0+b2Q4X3NldHRpbmdzX2FycmF5W09EOF9TRVRUSU5HX0dGWENMS19GTUFYXS5tYXhf dmFsdWUpIHsKKwkJCQlwcl9pbmZvKCJjbG9jayBmcmVxICVkIGlzIG5vdCB3aXRoaW4gYWxsb3dl ZCByYW5nZSBbJWQgLSAlZF1cbiIsCisJCQkJCWlucHV0X2NsaywKKwkJCQkJb2Q4X3NldHRpbmdz LT5vZDhfc2V0dGluZ3NfYXJyYXlbT0Q4X1NFVFRJTkdfR0ZYQ0xLX0ZNSU5dLm1pbl92YWx1ZSwK KwkJCQkJb2Q4X3NldHRpbmdzLT5vZDhfc2V0dGluZ3NfYXJyYXlbT0Q4X1NFVFRJTkdfR0ZYQ0xL X0ZNQVhdLm1heF92YWx1ZSk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWlmIChp bnB1dF9pbmRleCA9PSAwICYmIG9kX3RhYmxlLT5HZnhjbGtGbWluICE9IGlucHV0X2Nsaykgewor CQkJCW9kX3RhYmxlLT5HZnhjbGtGbWluID0gaW5wdXRfY2xrOworCQkJCXRhYmxlX2NvbnRleHQt Pm9kX2dmeGNsa191cGRhdGUgPSB0cnVlOworCQkJfSBlbHNlIGlmIChpbnB1dF9pbmRleCA9PSAx ICYmIG9kX3RhYmxlLT5HZnhjbGtGbWF4ICE9IGlucHV0X2NsaykgeworCQkJCW9kX3RhYmxlLT5H ZnhjbGtGbWF4ID0gaW5wdXRfY2xrOworCQkJCXRhYmxlX2NvbnRleHQtPm9kX2dmeGNsa191cGRh dGUgPSB0cnVlOworCQkJfQorCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIFBQX09EX0VESVRfTUNM S19WRERDX1RBQkxFOgorCQlpZiAoIW9kOF9zZXR0aW5ncy0+b2Q4X3NldHRpbmdzX2FycmF5W09E OF9TRVRUSU5HX1VDTEtfRk1BWF0uZmVhdHVyZV9pZCkgeworCQkJcHJfaW5mbygiTWNsayBtYXgg ZnJlcXVlbmN5IG92ZXJkcml2ZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCXJldHVybiAtRU9QTk9U U1VQUDsKKwkJfQorCisJCXNpbmdsZV9kcG1fdGFibGUgPSAmKGRwbV90YWJsZS0+bWVtX3RhYmxl KTsKKwkJcmV0ID0gdmVnYTIwX2dldF9jbGtfdGFibGUoc211LCAmY2xvY2tzLCBzaW5nbGVfZHBt X3RhYmxlKTsKKwkJaWYgKHJldCkgeworCQkJcHJfZXJyKCJBdHRlbXB0IHRvIGdldCBtZW1vcnkg Y2xrIGxldmVscyBGYWlsZWQhIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJZm9yIChpID0g MDsgaSA8IHNpemU7IGkgKz0gMikgeworCQkJaWYgKGkgKyAyID4gc2l6ZSkgeworCQkJCXByX2lu Zm8oImludmFsaWQgbnVtYmVyIG9mIGlucHV0IHBhcmFtZXRlcnMgJWRcbiIsCisJCQkJCSBzaXpl KTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQkJaW5wdXRfaW5kZXggPSBpbnB1dFtp XTsKKwkJCWlucHV0X2NsayA9IGlucHV0W2kgKyAxXTsKKworCQkJaWYgKGlucHV0X2luZGV4ICE9 IDEpIHsKKwkJCQlwcl9pbmZvKCJJbnZhbGlkIGluZGV4ICVkXG4iLCBpbnB1dF9pbmRleCk7CisJ CQkJcHJfaW5mbygiU3VwcG9ydCBtYXggTWNsayBmcmVxdWVuY3kgc2V0dGluZyBvbmx5IHdoaWNo IGluZGV4IGJ5IDFcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlpZiAoaW5w dXRfY2xrIDwgY2xvY2tzLmRhdGFbMF0uY2xvY2tzX2luX2toeiAvIDEwMDAgfHwKKwkJCSAgICBp bnB1dF9jbGsgPiBvZDhfc2V0dGluZ3MtPm9kOF9zZXR0aW5nc19hcnJheVtPRDhfU0VUVElOR19V Q0xLX0ZNQVhdLm1heF92YWx1ZSkgeworCQkJCXByX2luZm8oImNsb2NrIGZyZXEgJWQgaXMgbm90 IHdpdGhpbiBhbGxvd2VkIHJhbmdlIFslZCAtICVkXVxuIiwKKwkJCQkJaW5wdXRfY2xrLAorCQkJ CQljbG9ja3MuZGF0YVswXS5jbG9ja3NfaW5fa2h6IC8gMTAwMCwKKwkJCQkJb2Q4X3NldHRpbmdz LT5vZDhfc2V0dGluZ3NfYXJyYXlbT0Q4X1NFVFRJTkdfVUNMS19GTUFYXS5tYXhfdmFsdWUpOwor CQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlpZiAoaW5wdXRfaW5kZXggPT0gMSAmJiBv ZF90YWJsZS0+VWNsa0ZtYXggIT0gaW5wdXRfY2xrKSB7CisJCQkJdGFibGVfY29udGV4dC0+b2Rf Z2Z4Y2xrX3VwZGF0ZSA9IHRydWU7CisJCQkJb2RfdGFibGUtPlVjbGtGbWF4ID0gaW5wdXRfY2xr OworCQkJfQorCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIFBQX09EX0VESVRfVkREQ19DVVJWRToK KwkJaWYgKCEob2Q4X3NldHRpbmdzLT5vZDhfc2V0dGluZ3NfYXJyYXlbT0Q4X1NFVFRJTkdfR0ZY Q0xLX0ZSRVExXS5mZWF0dXJlX2lkICYmCisJCSAgICAgIG9kOF9zZXR0aW5ncy0+b2Q4X3NldHRp bmdzX2FycmF5W09EOF9TRVRUSU5HX0dGWENMS19GUkVRMl0uZmVhdHVyZV9pZCAmJgorCQkgICAg ICBvZDhfc2V0dGluZ3MtPm9kOF9zZXR0aW5nc19hcnJheVtPRDhfU0VUVElOR19HRlhDTEtfRlJF UTNdLmZlYXR1cmVfaWQgJiYKKwkJICAgICAgb2Q4X3NldHRpbmdzLT5vZDhfc2V0dGluZ3NfYXJy YXlbT0Q4X1NFVFRJTkdfR0ZYQ0xLX1ZPTFRBR0UxXS5mZWF0dXJlX2lkICYmCisJCSAgICAgIG9k OF9zZXR0aW5ncy0+b2Q4X3NldHRpbmdzX2FycmF5W09EOF9TRVRUSU5HX0dGWENMS19WT0xUQUdF Ml0uZmVhdHVyZV9pZCAmJgorCQkgICAgICBvZDhfc2V0dGluZ3MtPm9kOF9zZXR0aW5nc19hcnJh eVtPRDhfU0VUVElOR19HRlhDTEtfVk9MVEFHRTNdLmZlYXR1cmVfaWQpKSB7CisJCQlwcl9pbmZv KCJWb2x0YWdlIGN1cnZlIGNhbGlicmF0ZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCXJldHVybiAt RU9QTk9UU1VQUDsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IDMpIHsKKwkJ CWlmIChpICsgMyA+IHNpemUpIHsKKwkJCQlwcl9pbmZvKCJpbnZhbGlkIG51bWJlciBvZiBpbnB1 dCBwYXJhbWV0ZXJzICVkXG4iLAorCQkJCQlzaXplKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJ CX0KKworCQkJaW5wdXRfaW5kZXggPSBpbnB1dFtpXTsKKwkJCWlucHV0X2NsayA9IGlucHV0W2kg KyAxXTsKKwkJCWlucHV0X3ZvbCA9IGlucHV0W2kgKyAyXTsKKworCQkJaWYgKGlucHV0X2luZGV4 ID4gMikgeworCQkJCXByX2luZm8oIlNldHRpbmcgZm9yIHBvaW50ICVkIGlzIG5vdCBzdXBwb3J0 ZWRcbiIsCisJCQkJCWlucHV0X2luZGV4ICsgMSk7CisJCQkJcHJfaW5mbygiVGhyZWUgc3VwcG9y dGVkIHBvaW50cyBpbmRleCBieSAwLCAxLCAyXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJ CX0KKworCQkJb2Q4X2lkID0gT0Q4X1NFVFRJTkdfR0ZYQ0xLX0ZSRVExICsgMiAqIGlucHV0X2lu ZGV4OworCQkJaWYgKGlucHV0X2NsayA8IG9kOF9zZXR0aW5ncy0+b2Q4X3NldHRpbmdzX2FycmF5 W29kOF9pZF0ubWluX3ZhbHVlIHx8CisJCQkgICAgaW5wdXRfY2xrID4gb2Q4X3NldHRpbmdzLT5v ZDhfc2V0dGluZ3NfYXJyYXlbb2Q4X2lkXS5tYXhfdmFsdWUpIHsKKwkJCQlwcl9pbmZvKCJjbG9j ayBmcmVxICVkIGlzIG5vdCB3aXRoaW4gYWxsb3dlZCByYW5nZSBbJWQgLSAlZF1cbiIsCisJCQkJ CWlucHV0X2NsaywKKwkJCQkJb2Q4X3NldHRpbmdzLT5vZDhfc2V0dGluZ3NfYXJyYXlbb2Q4X2lk XS5taW5fdmFsdWUsCisJCQkJCW9kOF9zZXR0aW5ncy0+b2Q4X3NldHRpbmdzX2FycmF5W29kOF9p ZF0ubWF4X3ZhbHVlKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQkJb2Q4X2lkID0g T0Q4X1NFVFRJTkdfR0ZYQ0xLX1ZPTFRBR0UxICsgMiAqIGlucHV0X2luZGV4OworCQkJaWYgKGlu cHV0X3ZvbCA8IG9kOF9zZXR0aW5ncy0+b2Q4X3NldHRpbmdzX2FycmF5W29kOF9pZF0ubWluX3Zh bHVlIHx8CisJCQkgICAgaW5wdXRfdm9sID4gb2Q4X3NldHRpbmdzLT5vZDhfc2V0dGluZ3NfYXJy YXlbb2Q4X2lkXS5tYXhfdmFsdWUpIHsKKwkJCQlwcl9pbmZvKCJjbG9jayB2b2x0YWdlICVkIGlz IG5vdCB3aXRoaW4gYWxsb3dlZCByYW5nZSBbJWQtICVkXVxuIiwKKwkJCQkJaW5wdXRfdm9sLAor CQkJCQlvZDhfc2V0dGluZ3MtPm9kOF9zZXR0aW5nc19hcnJheVtvZDhfaWRdLm1pbl92YWx1ZSwK KwkJCQkJb2Q4X3NldHRpbmdzLT5vZDhfc2V0dGluZ3NfYXJyYXlbb2Q4X2lkXS5tYXhfdmFsdWUp OworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQlzd2l0Y2ggKGlucHV0X2luZGV4KSB7 CisJCQljYXNlIDA6CisJCQkJb2RfdGFibGUtPkdmeGNsa0ZyZXExID0gaW5wdXRfY2xrOworCQkJ CW9kX3RhYmxlLT5HZnhjbGtWb2x0MSA9IGlucHV0X3ZvbCAqIFZPTFRBR0VfU0NBTEU7CisJCQkJ YnJlYWs7CisJCQljYXNlIDE6CisJCQkJb2RfdGFibGUtPkdmeGNsa0ZyZXEyID0gaW5wdXRfY2xr OworCQkJCW9kX3RhYmxlLT5HZnhjbGtWb2x0MiA9IGlucHV0X3ZvbCAqIFZPTFRBR0VfU0NBTEU7 CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJb2RfdGFibGUtPkdmeGNsa0ZyZXEzID0gaW5w dXRfY2xrOworCQkJCW9kX3RhYmxlLT5HZnhjbGtWb2x0MyA9IGlucHV0X3ZvbCAqIFZPTFRBR0Vf U0NBTEU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlicmVhazsKKworCWNhc2UgUFBfT0Rf UkVTVE9SRV9ERUZBVUxUX1RBQkxFOgorCQlyZXQgPSBzbXVfdXBkYXRlX3RhYmxlKHNtdSwgVEFC TEVfT1ZFUkRSSVZFLCB0YWJsZV9jb250ZXh0LT5vdmVyZHJpdmVfdGFibGUsIGZhbHNlKTsKKwkJ aWYgKHJldCkgeworCQkJcHJfZXJyKCJGYWlsZWQgdG8gZXhwb3J0IG92ZXIgZHJpdmUgdGFibGUh XG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgUFBfT0RfQ09N TUlUX0RQTV9UQUJMRToKKwkJcmV0ID0gc211X3VwZGF0ZV90YWJsZShzbXUsIFRBQkxFX09WRVJE UklWRSwgdGFibGVfY29udGV4dC0+b3ZlcmRyaXZlX3RhYmxlLCB0cnVlKTsKKwkJaWYgKHJldCkg eworCQkJcHJfZXJyKCJGYWlsZWQgdG8gaW1wb3J0IG92ZXIgZHJpdmUgdGFibGUhXG4iKTsKKwkJ CXJldHVybiByZXQ7CisJCX0KKworCQkvKiByZXRyaWV2ZSB1cGRhdGVkIGdmeGNsayB0YWJsZSAq LworCQlpZiAodGFibGVfY29udGV4dC0+b2RfZ2Z4Y2xrX3VwZGF0ZSkgeworCQkJdGFibGVfY29u dGV4dC0+b2RfZ2Z4Y2xrX3VwZGF0ZSA9IGZhbHNlOworCQkJc2luZ2xlX2RwbV90YWJsZSA9ICYo ZHBtX3RhYmxlLT5nZnhfdGFibGUpOworCisJCQlpZiAoc211X2ZlYXR1cmVfaXNfZW5hYmxlZChz bXUsIEZFQVRVUkVfRFBNX0dGWENMS19CSVQpKSB7CisJCQkJcmV0ID0gdmVnYTIwX3NldF9zaW5n bGVfZHBtX3RhYmxlKHNtdSwgc2luZ2xlX2RwbV90YWJsZSwKKwkJCQkJCQkJICBQUENMS19HRlhD TEspOworCQkJCWlmIChyZXQpIHsKKwkJCQkJcHJfZXJyKCJbU2V0b3ZlcmRyaXZlXSBmYWlsZWQg dG8gcmVmcmVzaCBkcG0gdGFibGUhXG4iKTsKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQl9CisJCQl9 IGVsc2UgeworCQkJCXNpbmdsZV9kcG1fdGFibGUtPmNvdW50ID0gMTsKKwkJCQlzaW5nbGVfZHBt X3RhYmxlLT5kcG1fbGV2ZWxzWzBdLnZhbHVlID0gc211LT5zbXVfdGFibGUuYm9vdF92YWx1ZXMu Z2Z4Y2xrIC8gMTAwOworCQkJfQorCQl9CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBw cHRhYmxlX2Z1bmNzIHZlZ2EyMF9wcHRfZnVuY3MgPSB7CiAJLmFsbG9jX2RwbV9jb250ZXh0ID0g dmVnYTIwX2FsbG9jYXRlX2RwbV9jb250ZXh0LAogCS5zdG9yZV9wb3dlcnBsYXlfdGFibGUgPSB2 ZWdhMjBfc3RvcmVfcG93ZXJwbGF5X3RhYmxlLApAQCAtMjAwNiw2ICsyMjI4LDcgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCBwcHRhYmxlX2Z1bmNzIHZlZ2EyMF9wcHRfZnVuY3MgPSB7CiAJLmZvcmNl X3BlcmZvcm1hbmNlX2xldmVsID0gdmVnYTIwX2ZvcmNlX3BlcmZvcm1hbmNlX2xldmVsLAogCS51 cGRhdGVfc3BlY2lmaWVkX29kOF92YWx1ZSA9IHZlZ2EyMF91cGRhdGVfc3BlY2lmaWVkX29kOF92 YWx1ZSwKIAkuc2V0X29kX3BlcmNlbnRhZ2UgPSB2ZWdhMjBfc2V0X29kX3BlcmNlbnRhZ2UsCisJ Lm9kX2VkaXRfZHBtX3RhYmxlID0gdmVnYTIwX29kbl9lZGl0X2RwbV90YWJsZSwKIH07CiAKIHZv aWQgdmVnYTIwX3NldF9wcHRfZnVuY3Moc3RydWN0IHNtdV9jb250ZXh0ICpzbXUpCi0tIAoyLjcu NAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdm eCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==