From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lucas De Marchi Subject: [PATCH v3 15/23] drm/i915/tgl: Implement TGL DisplayPort training sequence Date: Fri, 23 Aug 2019 01:20:47 -0700 Message-ID: <20190823082055.5992-16-lucas.demarchi@intel.com> References: <20190823082055.5992-1-lucas.demarchi@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 781236EC2C for ; Fri, 23 Aug 2019 08:54:11 +0000 (UTC) In-Reply-To: <20190823082055.5992-1-lucas.demarchi@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogSm9zw6kgUm9iZXJ0byBkZSBTb3V6YSA8am9zZS5zb3V6YUBpbnRlbC5jb20+CgpPbiBU R0wgc29tZSByZWdpc3RlcnMgbW92ZWQgZnJvbSBEREkgdG8gdHJhbnNjb2RlciBhbmQgdGhlCkRp c3BsYXlQb3J0IHRyYWluaW5nIHNlcXVlbmNlIGhhcyBhIHNlcGFyYXRlIEJTcGVjIHBhZ2UuCgpJ IHN0YXJ0ZWQgYWRkaW5nICdpZnMnIHRvIHRoZSBvcmlnaW5hbCBpbnRlbF9kZGlfcHJlX2VuYWJs ZV9kcCgpIGJ1dAppdCB3YXMgYmVjb21pbmcgcmVhbGx5IGhhcmQgdG8gZm9sbG93LCBzbyBhIG5l dyBhbmQgY2xlYW5lciBmdW5jdGlvbgpmb3IgVEdMIHdhcyBhZGRlZCB3aXRoIGNvbW1lbnRzIG9m IGFsbCBzdGVwcy4gSXQncyBzaW1pbGFyIHRvIElDTCwKYnV0IGRpZmZlcmVudCBlbm91Z2ggdG8g ZGVzZXJ2ZSBhIG5ldyBmdW5jdGlvbi4KClRoZSByZXN0IG9mIERpc3BsYXlQb3J0IGVuYWJsZSBh bmQgdGhlIHdob2xlIGRpc2FibGUgc2VxdWVuY2VzCnJlbWFpbmVkIHRoZSBzYW1lLgoKdjI6IEZF QyBhbmQgRFNDIHNob3VsZCBiZSBlbmFibGVkIG9uIHNpbmsgc2lkZSBiZWZvcmUgc3RhcnQgbGlu awp0cmFpbmluZyhNYWFydGVuIHJlcG9ydGVkIGFuZCBNYW5hc2kgY29uZmlybWVkIHRoZSBEU0Mg cGFydCkKCnYzOiBBZGQgY2FsbCB0byBlbmFibGUgRkVDIG9uIHN0ZXAgNy5sKE1hbmFzaSkKCkJT cGVjOiA0OTE5MApDYzogTWFhcnRlbiBMYW5raG9yc3QgPG1hYXJ0ZW4ubGFua2hvcnN0QGxpbnV4 LmludGVsLmNvbT4KQ2M6IE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+ CkNjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgpTaWdu ZWQtb2ZmLWJ5OiBKb3PDqSBSb2JlcnRvIGRlIFNvdXphIDxqb3NlLnNvdXphQGludGVsLmNvbT4K U2lnbmVkLW9mZi1ieTogTHVjYXMgRGUgTWFyY2hpIDxsdWNhcy5kZW1hcmNoaUBpbnRlbC5jb20+ ClJldmlld2VkLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXgu aW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMg fCAxMzkgKysrKysrKysrKysrKysrKysrKysrKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3Bs YXkvaW50ZWxfZHAuYyAgfCAgIDggKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTM5IGluc2VydGlvbnMo KyksIDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlz cGxheS9pbnRlbF9kZGkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRp LmMKaW5kZXggM2ViNzNkYmFmOWZkLi42MDAxN2E1ZjVmYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGRpLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kZGkuYwpAQCAtMTc2MSw3ICsxNzYxLDE0IEBAIHZvaWQgaW50ZWxf ZGRpX3NldF92Y19wYXlsb2FkX2FsbG9jKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj cnRjX3N0YXRlLAogCUk5MTVfV1JJVEUoVFJBTlNfRERJX0ZVTkNfQ1RMKGNwdV90cmFuc2NvZGVy KSwgdGVtcCk7CiB9CiAKLXZvaWQgaW50ZWxfZGRpX2VuYWJsZV90cmFuc2NvZGVyX2Z1bmMoY29u c3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCisvKgorICogUmV0dXJucyB0 aGUgVFJBTlNfRERJX0ZVTkNfQ1RMIHZhbHVlIGJhc2VkIG9uIENSVEMgc3RhdGUuCisgKgorICog T25seSBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IGludGVsX2RkaV9lbmFibGVfdHJhbnNjb2Rlcl9m dW5jKCkgYW5kCisgKiBpbnRlbF9kZGlfY29uZmlnX3RyYW5zY29kZXJfZnVuYygpLgorICovCitz dGF0aWMgdTMyCitpbnRlbF9kZGlfdHJhbnNjb2Rlcl9mdW5jX3JlZ192YWxfZ2V0KGNvbnN0IHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQogewogCXN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMpOwogCXN0cnVjdCBp bnRlbF9lbmNvZGVyICplbmNvZGVyID0gaW50ZWxfZGRpX2dldF9jcnRjX2VuY29kZXIoY3J0Yyk7 CkBAIC0xODUyLDYgKzE4NTksMzMgQEAgdm9pZCBpbnRlbF9kZGlfZW5hYmxlX3RyYW5zY29kZXJf ZnVuYyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKIAkJdGVtcCB8 PSBERElfUE9SVF9XSURUSChjcnRjX3N0YXRlLT5sYW5lX2NvdW50KTsKIAl9CiAKKwlyZXR1cm4g dGVtcDsKK30KKwordm9pZCBpbnRlbF9kZGlfZW5hYmxlX3RyYW5zY29kZXJfZnVuYyhjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0 YyAqY3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjKTsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKKwll bnVtIHRyYW5zY29kZXIgY3B1X3RyYW5zY29kZXIgPSBjcnRjX3N0YXRlLT5jcHVfdHJhbnNjb2Rl cjsKKwl1MzIgdGVtcDsKKworCXRlbXAgPSBpbnRlbF9kZGlfdHJhbnNjb2Rlcl9mdW5jX3JlZ192 YWxfZ2V0KGNydGNfc3RhdGUpOworCUk5MTVfV1JJVEUoVFJBTlNfRERJX0ZVTkNfQ1RMKGNwdV90 cmFuc2NvZGVyKSwgdGVtcCk7Cit9CisKKy8qCisgKiBTYW1lIGFzIGludGVsX2RkaV9lbmFibGVf dHJhbnNjb2Rlcl9mdW5jKCkgYnV0IGl0IGRvIG5vdCBzZXQgdGhlIGVuYWJsZSBiaXQKKyAqLwor c3RhdGljIHZvaWQKK2ludGVsX2RkaV9jb25maWdfdHJhbnNjb2Rlcl9mdW5jKGNvbnN0IHN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQoreworCXN0cnVjdCBpbnRlbF9jcnRjICpj cnRjID0gdG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMpOworCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY3J0Yy0+YmFzZS5kZXYpOworCWVudW0g dHJhbnNjb2RlciBjcHVfdHJhbnNjb2RlciA9IGNydGNfc3RhdGUtPmNwdV90cmFuc2NvZGVyOwor CXUzMiB0ZW1wOworCisJdGVtcCA9IGludGVsX2RkaV90cmFuc2NvZGVyX2Z1bmNfcmVnX3ZhbF9n ZXQoY3J0Y19zdGF0ZSk7CisJdGVtcCAmPSB+VFJBTlNfRERJX0ZVTkNfRU5BQkxFOwogCUk5MTVf V1JJVEUoVFJBTlNfRERJX0ZVTkNfQ1RMKGNwdV90cmFuc2NvZGVyKSwgdGVtcCk7CiB9CiAKQEAg LTMxNzUsOSArMzIwOSw5NCBAQCBzdGF0aWMgdm9pZCBpbnRlbF9kZGlfZGlzYWJsZV9mZWNfc3Rh dGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCiAJUE9TVElOR19SRUFEKGN0bCk7CiB9 CiAKLXN0YXRpYyB2b2lkIGludGVsX2RkaV9wcmVfZW5hYmxlX2RwKHN0cnVjdCBpbnRlbF9lbmNv ZGVyICplbmNvZGVyLAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKLQkJCQkgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5f c3RhdGUpCitzdGF0aWMgdm9pZCB0Z2xfZGRpX3ByZV9lbmFibGVfZHAoc3RydWN0IGludGVsX2Vu Y29kZXIgKmVuY29kZXIsCisJCQkJICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0 Y19zdGF0ZSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0 YXRlKQoreworCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoJmVu Y29kZXItPmJhc2UpOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoZW5jb2Rlci0+YmFzZS5kZXYpOworCWVudW0gcGh5IHBoeSA9IGludGVsX3BvcnRfdG9fcGh5 KGRldl9wcml2LCBlbmNvZGVyLT5wb3J0KTsKKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpk aWdfcG9ydCA9IGVuY190b19kaWdfcG9ydCgmZW5jb2Rlci0+YmFzZSk7CisJYm9vbCBpc19tc3Qg PSBpbnRlbF9jcnRjX2hhc190eXBlKGNydGNfc3RhdGUsIElOVEVMX09VVFBVVF9EUF9NU1QpOwor CWludCBsZXZlbCA9IGludGVsX2RkaV9kcF9sZXZlbChpbnRlbF9kcCk7CisKKwlpbnRlbF9kcF9z ZXRfbGlua19wYXJhbXMoaW50ZWxfZHAsIGNydGNfc3RhdGUtPnBvcnRfY2xvY2ssCisJCQkJIGNy dGNfc3RhdGUtPmxhbmVfY291bnQsIGlzX21zdCk7CisKKwkvKiAxLmEgZ290IG9uIGludGVsX2F0 b21pY19jb21taXRfdGFpbCgpICovCisKKwkvKiAyLiAqLworCWludGVsX2VkcF9wYW5lbF9vbihp bnRlbF9kcCk7CisKKwkvKgorCSAqIDEuYiwgMy4gYW5kIDQuIGlzIGRvbmUgYmVmb3JlIHRnbF9k ZGlfcHJlX2VuYWJsZV9kcCgpIGJ5OgorCSAqIGhhc3dlbGxfY3J0Y19lbmFibGUoKS0+aW50ZWxf ZW5jb2RlcnNfcHJlX3BsbF9lbmFibGUoKSBhbmQKKwkgKiBoYXN3ZWxsX2NydGNfZW5hYmxlKCkt PmludGVsX2VuYWJsZV9zaGFyZWRfZHBsbCgpCisJICovCisKKwkvKiA1LiAqLworCWlmICghaW50 ZWxfcGh5X2lzX3RjKGRldl9wcml2LCBwaHkpIHx8CisJICAgIGRpZ19wb3J0LT50Y19tb2RlICE9 IFRDX1BPUlRfVEJUX0FMVCkKKwkJaW50ZWxfZGlzcGxheV9wb3dlcl9nZXQoZGV2X3ByaXYsCisJ CQkJCWRpZ19wb3J0LT5kZGlfaW9fcG93ZXJfZG9tYWluKTsKKworCS8qIDYuICovCisJaWNsX3By b2dyYW1fbWdfZHBfbW9kZShkaWdfcG9ydCk7CisKKwkvKgorCSAqIDcuYSAtIFN0ZXBzIGluIHRo aXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgZXhlY3V0ZWQgb3ZlciBNU1QKKwkgKiBtYXN0ZXIs IHdoYXQgd2lsbCBiZSB0YWtlbiBpbiBjYXJlIGJ5IE1TVCBob29rCisJICogaW50ZWxfbXN0X3By ZV9lbmFibGVfZHAoKQorCSAqLworCWludGVsX2RkaV9lbmFibGVfcGlwZV9jbG9jayhjcnRjX3N0 YXRlKTsKKworCS8qIDcuYiAqLworCWludGVsX2RkaV9jb25maWdfdHJhbnNjb2Rlcl9mdW5jKGNy dGNfc3RhdGUpOworCisJLyogNy5kICovCisJaWNsX2Rpc2FibGVfcGh5X2Nsb2NrX2dhdGluZyhk aWdfcG9ydCk7CisKKwkvKiA3LmUgKi8KKwlpY2xfZGRpX3Zzd2luZ19zZXF1ZW5jZShlbmNvZGVy LCBjcnRjX3N0YXRlLT5wb3J0X2Nsb2NrLCBsZXZlbCwKKwkJCQllbmNvZGVyLT50eXBlKTsKKwor CS8qIDcuZiAqLworCWlmIChpbnRlbF9waHlfaXNfY29tYm8oZGV2X3ByaXYsIHBoeSkpIHsKKwkJ Ym9vbCBsYW5lX3JldmVyc2FsID0KKwkJCWRpZ19wb3J0LT5zYXZlZF9wb3J0X2JpdHMgJiBERElf QlVGX1BPUlRfUkVWRVJTQUw7CisKKwkJaW50ZWxfY29tYm9fcGh5X3Bvd2VyX3VwX2xhbmVzKGRl dl9wcml2LCBwaHksIGZhbHNlLAorCQkJCQkgICAgICAgY3J0Y19zdGF0ZS0+bGFuZV9jb3VudCwK KwkJCQkJICAgICAgIGxhbmVfcmV2ZXJzYWwpOworCX0KKworCS8qIDcuZyAqLworCWludGVsX2Rk aV9pbml0X2RwX2J1Zl9yZWcoZW5jb2Rlcik7CisKKwlpZiAoIWlzX21zdCkKKwkJaW50ZWxfZHBf c2lua19kcG1zKGludGVsX2RwLCBEUk1fTU9ERV9EUE1TX09OKTsKKworCWludGVsX2RwX3Npbmtf c2V0X2RlY29tcHJlc3Npb25fc3RhdGUoaW50ZWxfZHAsIGNydGNfc3RhdGUsIHRydWUpOworCS8q CisJICogRERJIEZFQzogImFudGljaXBhdGVzIGVuYWJsaW5nIEZFQyBlbmNvZGluZyBzZXRzIHRo ZSBGRUNfUkVBRFkgYml0CisJICogaW4gdGhlIEZFQ19DT05GSUdVUkFUSU9OIHJlZ2lzdGVyIHRv IDEgYmVmb3JlIGluaXRpYXRpbmcgbGluaworCSAqIHRyYWluaW5nCisJICovCisJaW50ZWxfZHBf c2lua19zZXRfZmVjX3JlYWR5KGludGVsX2RwLCBjcnRjX3N0YXRlKTsKKwkvKiA3LmMsIDcuaCwg Ny5pLCA3LmogKi8KKwlpbnRlbF9kcF9zdGFydF9saW5rX3RyYWluKGludGVsX2RwKTsKKworCS8q IDcuayAqLworCWludGVsX2RwX3N0b3BfbGlua190cmFpbihpbnRlbF9kcCk7CisKKwkvKiA3Lmwg Ki8KKwlpbnRlbF9kZGlfZW5hYmxlX2ZlYyhlbmNvZGVyLCBjcnRjX3N0YXRlKTsKKwlpbnRlbF9k c2NfZW5hYmxlKGVuY29kZXIsIGNydGNfc3RhdGUpOworfQorCitzdGF0aWMgdm9pZCBoc3dfZGRp X3ByZV9lbmFibGVfZHAoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCisJCQkJICBjb25z dCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCQkgIGNvbnN0IHN0cnVj dCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQogewogCXN0cnVjdCBpbnRlbF9kcCAq aW50ZWxfZHAgPSBlbmNfdG9faW50ZWxfZHAoJmVuY29kZXItPmJhc2UpOwogCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZW5jb2Rlci0+YmFzZS5kZXYpOwpAQCAt MzI0Myw2ICszMzYyLDE4IEBAIHN0YXRpYyB2b2lkIGludGVsX2RkaV9wcmVfZW5hYmxlX2RwKHN0 cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAogCWludGVsX2RzY19lbmFibGUoZW5jb2Rlciwg Y3J0Y19zdGF0ZSk7CiB9CiAKK3N0YXRpYyB2b2lkIGludGVsX2RkaV9wcmVfZW5hYmxlX2RwKHN0 cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0 b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gdG9faTkxNShlbmNvZGVyLT5iYXNlLmRldik7CisKKwlpZiAoSU5URUxfR0VOKGRldl9w cml2KSA+PSAxMikKKwkJdGdsX2RkaV9wcmVfZW5hYmxlX2RwKGVuY29kZXIsIGNydGNfc3RhdGUs IGNvbm5fc3RhdGUpOworCWVsc2UKKwkJaHN3X2RkaV9wcmVfZW5hYmxlX2RwKGVuY29kZXIsIGNy dGNfc3RhdGUsIGNvbm5fc3RhdGUpOworfQorCiBzdGF0aWMgdm9pZCBpbnRlbF9kZGlfcHJlX2Vu YWJsZV9oZG1pKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAogCQkJCSAgICAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCQkJCSAgICAgIGNvbnN0IHN0 cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv ZGlzcGxheS9pbnRlbF9kcC5jCmluZGV4IDk0MzM5MmZhYWVhMi4uZWNlNjM3NWJmNjVkIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jCkBAIC00MDEwLDEzICs0MDEwLDEz IEBAIHZvaWQgaW50ZWxfZHBfc2V0X2lkbGVfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKQogCUk5MTVfV1JJVEUoY3RsLCB2YWwpOwogCiAJLyoKLQkgKiBPbiBQT1JUX0Egd2Ug Y2FuIGhhdmUgb25seSBlRFAgaW4gU1NUIG1vZGUuIFRoZXJlIHRoZSBvbmx5IHJlYXNvbgotCSAq IHdlIG5lZWQgdG8gc2V0IGlkbGUgdHJhbnNtaXNzaW9uIG1vZGUgaXMgdG8gd29yayBhcm91bmQg YSBIVyBpc3N1ZQotCSAqIHdoZXJlIHdlIGVuYWJsZSB0aGUgcGlwZSB3aGlsZSBub3QgaW4gaWRs ZSBsaW5rLXRyYWluaW5nIG1vZGUuCisJICogVW50aWwgVEdMIG9uIFBPUlRfQSB3ZSBjYW4gaGF2 ZSBvbmx5IGVEUCBpbiBTU1QgbW9kZS4gVGhlcmUgdGhlIG9ubHkKKwkgKiByZWFzb24gd2UgbmVl ZCB0byBzZXQgaWRsZSB0cmFuc21pc3Npb24gbW9kZSBpcyB0byB3b3JrIGFyb3VuZCBhIEhXCisJ ICogaXNzdWUgd2hlcmUgd2UgZW5hYmxlIHRoZSBwaXBlIHdoaWxlIG5vdCBpbiBpZGxlIGxpbmst dHJhaW5pbmcgbW9kZS4KIAkgKiBJbiB0aGlzIGNhc2UgdGhlcmUgaXMgcmVxdWlyZW1lbnQgdG8g d2FpdCBmb3IgYSBtaW5pbXVtIG51bWJlciBvZgogCSAqIGlkbGUgcGF0dGVybnMgdG8gYmUgc2Vu dC4KIAkgKi8KLQlpZiAocG9ydCA9PSBQT1JUX0EpCisJaWYgKHBvcnQgPT0gUE9SVF9BICYmIElO VEVMX0dFTihkZXZfcHJpdikgPCAxMikKIAkJcmV0dXJuOwogCiAJaWYgKGludGVsX2RlX3dhaXRf Zm9yX3NldChkZXZfcHJpdiwgc3RhdHVzLAotLSAKMi4yMy4wCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVs LWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=