From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 07/12] drm/i915: Move DP link retraining into intel_dp_detect() Date: Thu, 28 Jul 2016 23:15:22 +0300 Message-ID: <20160728201522.GT4329@intel.com> References: <1469717448-4297-1-git-send-email-ville.syrjala@linux.intel.com> <1469717448-4297-8-git-send-email-ville.syrjala@linux.intel.com> <20160728194853.GA23736@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 8A8006E272 for ; Thu, 28 Jul 2016 20:15:28 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20160728194853.GA23736@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Manasi Navare Cc: Ander Conselvan de Oliveira , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBKdWwgMjgsIDIwMTYgYXQgMTI6NDg6NTNQTSAtMDcwMCwgTWFuYXNpIE5hdmFyZSB3 cm90ZToKPiBPbiBUaHUsIEp1bCAyOCwgMjAxNiBhdCAwNTo1MDo0M1BNICswMzAwLCB2aWxsZS5z eXJqYWxhQGxpbnV4LmludGVsLmNvbSB3cm90ZToKPiA+IEZyb206IFZpbGxlIFN5cmrDpGzDpCA8 dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPiAKPiA+IERQIGxpbmsgcmV0cmFpbmlu ZyBuZWVkcyB0byBncmFiIHNvbWUgbW9kZXNldCBsb2NrcyB0byBub3QgcmFjZSB3aXRoCj4gPiBt b2Rlc2V0cywgc28gd2UgY2FuJ3QgcmVhbGx5IGRvIGl0IHNhZmVseSBmcm9tIHRoZSBocGRfcHVs c2UsIGxlc3Qgd2UKPiA+IHJpc2sgZGVhZGxvY2tpbmcgZHVlIHRvIE1TVCBzaWRlYmFuZCBzdHVm Zi4KPiA+IAo+ID4gTW92ZSB0aGUgbGluayByZXRyYWluaW5nIHRvIGhhcHBlbiBmcm9tIHRoZSBo b3RwbHVnIHdvcmsgaW5zdGVhZC4KPiA+IERvaW5nIGF0IHRoZSBlbmQgb2YgaW50ZWxfZHBfZGV0 ZWN0KCkgc2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgaW4gY2FzZQo+ID4gdGhlIHNpbmsgYWxyZWFk eSBnb3QgZGlzY29ubmVjdGVkLCBpbiB3aGljaCBjYXNlIHJldHJhaW5pbmcgaXMKPiA+IHBvaW50 bGVzcy4KPiA+IAo+ID4gVG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gc2NoZWR1bGUgdGhlIGhv dHBsdWcgd29yaywgd2UnbGwganVzdCBjaGVjawo+ID4gdGhlIHNpbmsgbGFuZSBzdGF0dXMgd2l0 aG91dCBsb2NrcyBmcm9tIGhwZF9wdWxzZS4gQSBsaXR0bGUgcmFjeQo+ID4gc3RpbGwgZWcuIGR1 ZSB0byB1c2VpbmcgaW50ZWxfZHAtPmxhbmVfY291bnQsIGJ1dCBubyBsZXNzIHJhY3kgdGhhbgo+ ID4gd2hhdCB3ZSBhbHJlYWR5IGhhZC4gV2UnbGwgcmVwZWF0IHRoZSBjaGVjayBpbiBmcm9tIGlu dGVsX2RwX2RldGVjdCgpCj4gPiB3aXRoIHByb3BlciBsb2NraW5nLCB3aGVyZSB3ZSdsbCBhbHNv IGNoZWNrIGlmIHRoZSBsaW5rIGFzIGFjdHVhbGx5Cj4gPiBhY3RpdmUgb3Igbm90Lgo+ID4gCj4g PiBDYzogQW5kZXIgQ29uc2VsdmFuIGRlIE9saXZlaXJhIDxhbmRlci5jb25zZWx2YW4uZGUub2xp dmVpcmFAaW50ZWwuY29tPgo+ID4gQ2M6IEppbSBCcmlkZSA8amltLmJyaWRlQGxpbnV4LmludGVs LmNvbT4KPiA+IENjOiBNYW5hc2kgRCBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+ Cj4gPiBDYzogRHVyZ2Fkb3NzIFIgPGR1cmdhZG9zcy5yQGludGVsLmNvbT4KPiA+IFNpZ25lZC1v ZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4g PiAtLS0KPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIHwgMTU0ICsrKysrKysr KysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ICAxIGZpbGUgY2hhbmdlZCwgNjYg aW5zZXJ0aW9ucygrKSwgODggZGVsZXRpb25zKC0pCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZHAuYwo+ID4gaW5kZXggNGE0MTg0YzIxOTg5Li42NzViODNmNTdhMDcgMTAwNjQ0Cj4gPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcC5jCj4gPiBAQCAtMzg0MiwxNSArMzg0Miw2IEBAIGludGVsX2RwX2No ZWNrX21zdF9zdGF0dXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiA+ICAJCWJyZXQgPSBp bnRlbF9kcF9nZXRfc2lua19pcnFfZXNpKGludGVsX2RwLCBlc2kpOwo+ID4gIGdvX2FnYWluOgo+ ID4gIAkJaWYgKGJyZXQgPT0gdHJ1ZSkgewo+ID4gLQo+ID4gLQkJCS8qIGNoZWNrIGxpbmsgc3Rh dHVzIC0gZXNpWzEwXSA9IDB4MjAwYyAqLwo+ID4gLQkJCWlmIChpbnRlbF9kcC0+YWN0aXZlX3N0 cmVhbXMgJiYKPiA+IC0JCQkgICAgIWRybV9kcF9jaGFubmVsX2VxX29rKCZlc2lbMTBdLCBpbnRl bF9kcC0+bGFuZV9jb3VudCkpIHsKPiA+IC0JCQkJRFJNX0RFQlVHX0tNUygiY2hhbm5lbCBFUSBu b3Qgb2ssIHJldHJhaW5pbmdcbiIpOwo+ID4gLQkJCQlpbnRlbF9kcF9zdGFydF9saW5rX3RyYWlu KGludGVsX2RwKTsKPiA+IC0JCQkJaW50ZWxfZHBfc3RvcF9saW5rX3RyYWluKGludGVsX2RwKTsK PiA+IC0JCQl9Cj4gPiAtCj4gPiAgCQkJRFJNX0RFQlVHX0tNUygiZ290IGVzaSAlM3BoXG4iLCBl c2kpOwo+ID4gIAkJCXJldCA9IGRybV9kcF9tc3RfaHBkX2lycSgmaW50ZWxfZHAtPm1zdF9tZ3Is IGVzaSwgJmhhbmRsZWQpOwo+ID4gIAo+ID4gQEAgLTM4ODYsMzQgKzM4NzcsNDIgQEAgZ29fYWdh aW46Cj4gPiAgCXJldHVybiAtRUlOVkFMOwo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgdm9pZAo+ ID4gLWludGVsX2RwX2NoZWNrX2xpbmtfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp Cj4gPiArc3RhdGljIGJvb2wKPiA+ICtpbnRlbF9kcF9saW5rX25lZWRzX3JldHJhaW4oc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCkKPiA+ICB7Cj4gPiAtCXN0cnVjdCBpbnRlbF9lbmNvZGVyICpp bnRlbF9lbmNvZGVyID0gJmRwX3RvX2RpZ19wb3J0KGludGVsX2RwKS0+YmFzZTsKPiA+IC0Jc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGludGVsX2RwX3RvX2RldihpbnRlbF9kcCk7Cj4gPiAgCXU4 IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdOwo+ID4gIAo+ID4gLQlXQVJOX09OKCFk cm1fbW9kZXNldF9pc19sb2NrZWQoJmRldi0+bW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCkp Owo+ID4gKwlpZiAoaW50ZWxfZHAtPmFjdGl2ZV9zdHJlYW1zID09IDApCj4gPiArCQlyZXR1cm4g ZmFsc2U7Cj4gPiArCj4gPiArCWlmIChpbnRlbF9kcC0+Y29tcGxpYW5jZV90ZXN0X3R5cGUgPT0g RFBfVEVTVF9MSU5LX1RSQUlOSU5HKQo+ID4gKwkJcmV0dXJuIHRydWU7Cj4gPiAgCj4gPiAgCWlm ICghaW50ZWxfZHBfZ2V0X2xpbmtfc3RhdHVzKGludGVsX2RwLCBsaW5rX3N0YXR1cykpIHsKPiA+ ICAJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBsaW5rIHN0YXR1c1xuIik7Cj4gPiAtCQlyZXR1 cm47Cj4gPiArCQlyZXR1cm4gZmFsc2U7Cj4gPiAgCX0KPiA+ICAKPiA+IC0JaWYgKCFpbnRlbF9l bmNvZGVyLT5iYXNlLmNydGMpCj4gPiAtCQlyZXR1cm47Cj4gPiArCXJldHVybiAhZHJtX2RwX2No YW5uZWxfZXFfb2sobGlua19zdGF0dXMsIGludGVsX2RwLT5sYW5lX2NvdW50KTsKPiAKPiBBY2Nv cmRpbmcgdG8gdGhlIERQIHNwZWMsIHdlIHNob3VsZCBhbHNvIGNoZWNrIGZvciB0aGUgY2xvY2sg cmVjb3ZlcnkgYml0IGluIERQQ0QKPiBXZSBzaG91bGQgYWxzbyBhZGQgYSBjaGVjayBkcm1fZHBf Y2xvY2tfcmVjb3Zlcnlfb2sobGlua19zdGF0dXMsIGludGVsX2RwLT5sYW5lX2NvdW50KQoKSSB0 aGluayBkcm1fZHBfY2hhbm5lbF9lcV9vaygpIGNoZWNrcyBhbGwgdGhlIGJpdHM6IElOVEVSTEFO RV9BTElHTl9ET05FLApDUl9ET05FLCBFUV9ET05FLCBhbmQgU1lNQk9MX0xPQ0tFRC4KCkFueXdh eXMsIHdoaWxlIEkgd2FzIGxvb2tpbmcgYXQgdGhlIHNob3J0IHB1bHNlIGhhbmRsaW5nIGEgYml0 IG1vcmUsIEkgY2FtZQp0byB0aGUgY29uY2x1c2lvbiB0aGF0IHdlIHNob3VsZCByZXdyaXRlIGl0 IGEgYml0LgoKVGhlIENUUyBkb2NzIHNlZW0gdG8gc2F5IHRoYXQgd2UncmUgZXhwZWN0ZWQgdG8g cmVhZCBEUENEIDB4MjAwLTB4MjA1IG9uIApzaG9ydCBwdWxzZSwgYW5kIHVzZSB0aGF0IGluZm9y bWF0aW9uIHRvIGRldGVybWluZSB3aGF0IHdlIHNob3VsZCBkby4KQ3VycmVudGx5IHdlIGRvbid0 IGRvIHRoYXQuCgpTbyBJIHdhcyB0aHVua2luZyB0aGF0IHdlJ2QgYWRqdXN0IHRoZSBsaW5rX3N0 YXR1cyBzdHVmZiB0byByZWFkIDB4MjAwLTB4MjA3Cmluc3RlYWQgb2YgMHgyMDItMHgyMDcsIGxp a2Ugc286Ci0jZGVmaW5lIERQX0xJTktfU1RBVFVTX1NJWkUgICAgICAgNgorI2RlZmluZSBEUF9M SU5LX1NUQVRVU19TSVpFICAgICAgIDgKCiBzdGF0aWMgdTggZHBfbGlua19zdGF0dXMoY29uc3Qg dTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0sIGludCByKQogewotICAgICAgIHJl dHVybiBsaW5rX3N0YXR1c1tyIC0gRFBfTEFORTBfMV9TVEFUVVNdOworICAgICAgIHJldHVybiBs aW5rX3N0YXR1c1tyIC0gRFBfU0lOS19DT1VOVF07CiB9CgpBbmQgdGhlbiB3ZSdkIHVzZSBzb21l dGhpbmcgbGlrZSB0aGlzIGFzIG91ciBzaG9ydCBwdWxzZSBoYW5kbGVyOgoKc3RhdGljIGJvb2wK aW50ZWxfZHBfc2hvcnRfcHVsc2Uoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKewogICAgICAg IHU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdLCB0bXA7CgogICAgICAgIC8qICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg ICAqIENsZWFyaW5nIGNvbXBsaWFuY2UgdGVzdCB2YXJpYWJsZXMgdG8gYWxsb3cgY2FwdHVyaW5n ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog ICAgICAgICAqIG9mIHZhbHVlcyBmb3IgbmV4dCBhdXRvbWF0ZWQgdGVzdCByZXF1ZXN0LiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAqLwogICAgICAgIGludGVsX2RwLT5jb21wbGlhbmNlX3Rlc3RfYWN0aXZl ID0gMDsKICAgICAgICBpbnRlbF9kcC0+Y29tcGxpYW5jZV90ZXN0X3R5cGUgPSAwOwogICAgICAg IGludGVsX2RwLT5jb21wbGlhbmNlX3Rlc3RfZGF0YSA9IDA7CgogICAgICAgIGlmICghaW50ZWxf ZHBfZ2V0X2xpbmtfc3RhdHVzKGludGVsX2RwLCBsaW5rX3N0YXR1cykpCiAgICAgICAgICAgICAg ICByZXR1cm4gZmFsc2U7CgogICAgICAgIHRtcCA9IGRybV9kcF9saW5rX3N0YXR1cyhsaW5rX3N0 YXR1cywgRFBfREVWSUNFX1NFUlZJQ0VfSVJRX1ZFQ1RPUik7CiAgICAgICAgaWYgKHRtcCkKICAg ICAgICAgICAgICAgIGRybV9kcF9kcGNkX3dyaXRlYigmaW50ZWxfZHAtPmF1eCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBEUF9ERVZJQ0VfU0VSVklDRV9JUlFfVkVDVE9SLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCk7CgogICAgICAgIGlmICh0bXAg JiBEUF9BVVRPTUFURURfVEVTVF9SRVFVRVNUKQogICAgICAgICAgICAgICAgRFJNX0RFQlVHX0RS SVZFUigiVGVzdCByZXF1ZXN0IGluIHNob3J0IHB1bHNlIG5vdCBoYW5kbGVkXG4iKTsKICAgICAg ICBpZiAodG1wICYgKERQX0NQX0lSUSB8IERQX1NJTktfU1BFQ0lGSUNfSVJRKSkKICAgICAgICAg ICAgICAgIERSTV9ERUJVR19EUklWRVIoIkNQIG9yIHNpbmsgc3BlY2lmaWMgaXJxIHVuaGFuZGxl ZFxuIik7CgogICAgICAgIHRtcCA9IGRybV9kcF9saW5rX3N0YXR1cyhsaW5rX3N0YXR1cywgRFBf TEFORV9BTElHTl9TVEFUVVNfVVBEQVRFRCk7CiAgICAgICAgaWYgKHRtcCAmIERQX0RPV05TVFJF QU1fUE9SVF9TVEFUVVNfQ0hBTkdFRCkKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAg ICAgICAgdG1wID0gZHJtX2RwX2xpbmtfc3RhdHVzKGxpbmtfc3RhdHVzLCBEUF9TSU5LX0NPVU5U KTsKICAgICAgICBpZiAoRFBfR0VUX1NJTktfQ09VTlQodG1wKSAhPSBpbnRlbF9kcC0+c2lua19j b3VudCkKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgaWYgKGludGVsX2Rw LT5hY3RpdmVfc3RyZWFtcyAhPSAwICYmCiAgICAgICAgICAgICFkcm1fZHBfY2hhbm5lbF9lcV9v ayhsaW5rX3N0YXR1cywgaW50ZWxfZHAtPmxhbmVfY291bnQpKQogICAgICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKfQoKYW5kIG9idmlvdXNseSBmaWxsIGlu IHdoYXRldmVyIGVsc2Ugc2luayBpcnEgaGFuZGxpbmcgd2UgbmVlZC4KClRob3VnaHRzPyBEb2Vz IHRoYXQgbG9vayBzYW5lPwoKPHNuaXA+Cj4gPiAgCj4gPiAgc3RhdGljIGVudW0gZHJtX2Nvbm5l Y3Rvcl9zdGF0dXMKPiA+ICBpbnRlbF9kcF9kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwgYm9vbCBmb3JjZSkKPiA+ICB7Cj4gPiAgCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAgPSBpbnRlbF9hdHRhY2hlZF9kcChjb25uZWN0b3IpOwo+ID4gLQlzdHJ1Y3QgaW50ZWxfZGln aXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKPiA+ IC0Jc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIgPSAmaW50ZWxfZGlnX3BvcnQt PmJhc2U7Cj4gPiAgCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvciA9IHRv X2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwo+ID4gKwllbnVtIGRybV9jb25uZWN0b3Jfc3Rh dHVzIHN0YXR1czsKPiA+ICAKPiA+ICAJRFJNX0RFQlVHX0tNUygiW0NPTk5FQ1RPUjolZDolc11c biIsCj4gPiAgCQkgICAgICBjb25uZWN0b3ItPmJhc2UuaWQsIGNvbm5lY3Rvci0+bmFtZSk7Cj4g PiAgCj4gPiAtCWlmIChpbnRlbF9kcC0+aXNfbXN0KSB7Cj4gPiAtCQkvKiBNU1QgZGV2aWNlcyBh cmUgZGlzY29ubmVjdGVkIGZyb20gYSBtb25pdG9yIFBPViAqLwo+ID4gLQkJaW50ZWxfZHBfdW5z ZXRfZWRpZChpbnRlbF9kcCk7Cj4gPiAtCQlpZiAoaW50ZWxfZW5jb2Rlci0+dHlwZSAhPSBJTlRF TF9PVVRQVVRfRURQKQo+ID4gLQkJCWludGVsX2VuY29kZXItPnR5cGUgPSBJTlRFTF9PVVRQVVRf RFA7Cj4gPiAtCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cj4gPiAtCX0K PiA+IC0KPiA+IC0JLyogSWYgZnVsbCBkZXRlY3QgaXMgbm90IHBlcmZvcm1lZCB5ZXQsIGRvIGEg ZnVsbCBkZXRlY3QgKi8KPiA+IC0JaWYgKCFpbnRlbF9kcC0+ZGV0ZWN0X2RvbmUpCj4gPiAtCQlp bnRlbF9kcF9sb25nX3B1bHNlKGludGVsX2RwLT5hdHRhY2hlZF9jb25uZWN0b3IpOwo+ID4gKwlz dGF0dXMgPSBpbnRlbF9kcF9sb25nX3B1bHNlKGludGVsX2Nvbm5lY3Rvcik7Cj4gPiAgCj4gPiAt CWludGVsX2RwLT5kZXRlY3RfZG9uZSA9IGZhbHNlOwo+ID4gKwlpZiAoc3RhdHVzID09IGNvbm5l Y3Rvcl9zdGF0dXNfY29ubmVjdGVkIHx8IGludGVsX2RwLT5pc19tc3QpCj4gCj4gV2h5YSByZSB3 ZSBub3QgY2hlY2tpbmcgZm9yICghaW50ZWxfZW5jb2Rlci0+Y3J0Yy5iYXNlKSBiZWZvcmUgcmV0 cmFpbmluZz8KPiBJIGhhZCBzZWVuIGlzc3VlcyB3aXRoIGNvbm5lY3RlZCBib290IGNhc2Ugd2hl biBjb25uZWN0b3Igc3RhdHVzIGlzIGNvbm5lY3RlZCBhbmQgaWYgaXQKPiB0cmllcyB0byByZXRy YWluIGl0IGZhaWxzIHdpdGggcmV0cmllcyBiZWNhdXNlIHRoZXJlIGlzIG5vIGFjdGl2ZSBwaXBl LiBJbiB0aGF0Cj4gY2FzZSBpdCBzaG91bGQgbm90IGF0dGVtcHQgdG8gcmV0cmFpbi4KCkkgY2hh bmdlZCBpdCB0byB1c2UgaW50ZWxfZHAtPmFjdGl2ZV9zdHJlYW1zIGluc3RlYWQuIFRoYXQnbGwg d29yayBmb3IgTVNUCmFzIHdlbGwgYXMgU1NULiBDaGVja2luZyBmb3IgdGhlIGNydGMgd291bGQg b25seSBjb3ZlciBTU1QuCgo+IAo+IAo+ID4gKwkJaW50ZWxfZHBfbGlua19yZXRyYWluKGludGVs X2RwKTsKPiA+ICAKPiA+IC0JaWYgKGlzX2VkcChpbnRlbF9kcCkgfHwgaW50ZWxfY29ubmVjdG9y LT5kZXRlY3RfZWRpZCkKPiA+IC0JCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsK PiA+IC0JZWxzZQo+ID4gLQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+ ID4gKwlyZXR1cm4gc3RhdHVzOwo+ID4gIH0KPiA+ICAKPiA+ICBzdGF0aWMgdm9pZAo+ID4gQEAg LTQ3MDYsMzkgKzQ2ODIsNDEgQEAgaW50ZWxfZHBfaHBkX3B1bHNlKHN0cnVjdCBpbnRlbF9kaWdp dGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LCBib29sIGxvbmdfaHBkKQo+ID4gIAkJICAgICAgcG9y dF9uYW1lKGludGVsX2RpZ19wb3J0LT5wb3J0KSwKPiA+ICAJCSAgICAgIGxvbmdfaHBkID8gImxv bmciIDogInNob3J0Iik7Cj4gPiAgCj4gPiArCWlmIChsb25nX2hwZCkKPiA+ICsJCXJldHVybiBJ UlFfTk9ORTsKPiA+ICsKPiA+ICAJcG93ZXJfZG9tYWluID0gaW50ZWxfZGlzcGxheV9wb3J0X2F1 eF9wb3dlcl9kb21haW4oaW50ZWxfZW5jb2Rlcik7Cj4gPiAgCWludGVsX2Rpc3BsYXlfcG93ZXJf Z2V0KGRldl9wcml2LCBwb3dlcl9kb21haW4pOwo+ID4gIAo+ID4gLQlpZiAobG9uZ19ocGQpIHsK PiA+IC0JCWludGVsX2RwX2xvbmdfcHVsc2UoaW50ZWxfZHAtPmF0dGFjaGVkX2Nvbm5lY3Rvcik7 Cj4gPiAtCQlpZiAoaW50ZWxfZHAtPmlzX21zdCkKPiA+IC0JCQlyZXQgPSBJUlFfSEFORExFRDsK PiA+IC0JCWdvdG8gcHV0X3Bvd2VyOwo+ID4gLQo+ID4gLQl9IGVsc2Ugewo+ID4gLQkJaWYgKGlu dGVsX2RwLT5pc19tc3QpIHsKPiA+IC0JCQlpZiAoaW50ZWxfZHBfY2hlY2tfbXN0X3N0YXR1cyhp bnRlbF9kcCkgPT0gLUVJTlZBTCkgewo+ID4gLQkJCQkvKgo+ID4gLQkJCQkgKiBJZiB3ZSB3ZXJl IGluIE1TVCBtb2RlLCBhbmQgZGV2aWNlIGlzIG5vdAo+ID4gLQkJCQkgKiB0aGVyZSwgZ2V0IG91 dCBvZiBNU1QgbW9kZQo+ID4gLQkJCQkgKi8KPiA+IC0JCQkJRFJNX0RFQlVHX0tNUygiTVNUIGRl dmljZSBtYXkgaGF2ZSBkaXNhcHBlYXJlZCAlZCB2cyAlZFxuIiwKPiA+IC0JCQkJCSAgICAgIGlu dGVsX2RwLT5pc19tc3QsIGludGVsX2RwLT5tc3RfbWdyLm1zdF9zdGF0ZSk7Cj4gPiAtCQkJCWlu dGVsX2RwLT5pc19tc3QgPSBmYWxzZTsKPiA+IC0JCQkJZHJtX2RwX21zdF90b3BvbG9neV9tZ3Jf c2V0X21zdCgmaW50ZWxfZHAtPm1zdF9tZ3IsCj4gPiAtCQkJCQkJCQlpbnRlbF9kcC0+aXNfbXN0 KTsKPiA+IC0JCQkJZ290byBwdXRfcG93ZXI7Cj4gPiAtCQkJfQo+ID4gLQkJfQo+ID4gLQo+ID4g LQkJaWYgKCFpbnRlbF9kcC0+aXNfbXN0KSB7Cj4gPiAtCQkJaWYgKCFpbnRlbF9kcF9zaG9ydF9w dWxzZShpbnRlbF9kcCkpIHsKPiA+IC0JCQkJaW50ZWxfZHBfbG9uZ19wdWxzZShpbnRlbF9kcC0+ YXR0YWNoZWRfY29ubmVjdG9yKTsKPiA+IC0JCQkJZ290byBwdXRfcG93ZXI7Cj4gPiAtCQkJfQo+ ID4gKwlpZiAoaW50ZWxfZHAtPmlzX21zdCkgewo+ID4gKwkJaWYgKGludGVsX2RwX2NoZWNrX21z dF9zdGF0dXMoaW50ZWxfZHApID09IC1FSU5WQUwpIHsKPiA+ICsJCQkvKgo+ID4gKwkJCSAqIElm IHdlIHdlcmUgaW4gTVNUIG1vZGUsIGFuZCBkZXZpY2UgaXMgbm90Cj4gPiArCQkJICogdGhlcmUs IGdldCBvdXQgb2YgTVNUIG1vZGUKPiA+ICsJCQkgKi8KPiA+ICsJCQlEUk1fREVCVUdfS01TKCJN U1QgZGV2aWNlIG1heSBoYXZlIGRpc2FwcGVhcmVkICVkIHZzICVkXG4iLAo+ID4gKwkJCQkgICAg ICBpbnRlbF9kcC0+aXNfbXN0LCBpbnRlbF9kcC0+bXN0X21nci5tc3Rfc3RhdGUpOwo+ID4gKwkJ CWludGVsX2RwLT5pc19tc3QgPSBmYWxzZTsKPiA+ICsJCQlkcm1fZHBfbXN0X3RvcG9sb2d5X21n cl9zZXRfbXN0KCZpbnRlbF9kcC0+bXN0X21nciwKPiA+ICsJCQkJCQkJaW50ZWxfZHAtPmlzX21z dCk7Cj4gPiArCQkJZ290byBwdXRfcG93ZXI7Cj4gPiAgCQl9Cj4gPiArCX0gZWxzZSB7Cj4gPiAr CQlpZiAoIWludGVsX2RwX3Nob3J0X3B1bHNlKGludGVsX2RwKSkKPiA+ICsJCQlnb3RvIHB1dF9w b3dlcjsKPiA+ICAJfQo+ID4gIAo+ID4gKwkvKgo+ID4gKwkgKiBMaW5rIHJldHJhaW5pbmcgaGFw cGVucyBmcm9tIHRoZSBob3RwbHVnIHdvcmssCj4gPiArCSAqIGNoZWNrIGlmIHdlIG1pZ2h0IG5l ZWQgdG8gc2NoZHVsZSBpdC4KPiA+ICsJICoKPiA+ICsJICogVGhlcmUgaGFzIGJlZW4ga25vd24g aXNzdWVzIG9mIGxpbmsgbG9zcwo+ID4gKwkgKiB0cmlnZ2VycmluZyBsb25nIHB1bHNlLCBzbyBs ZXQncyBjaGVjayBib3RoCj4gPiArCSAqIGZvciBzaG9ydCBhbmQgbG9uZyBwdWxzZS4KPiA+ICsJ ICovCj4gPiArCWlmIChpbnRlbF9kcF9saW5rX25lZWRzX3JldHJhaW4oaW50ZWxfZHApKQo+ID4g KwkJZ290byBwdXRfcG93ZXI7Cj4gPiArCj4gPiAgCXJldCA9IElSUV9IQU5ETEVEOwo+ID4gIAo+ ID4gIHB1dF9wb3dlcjoKPiA+IC0tIAo+ID4gMi43LjQKPiA+IAoKLS0gClZpbGxlIFN5cmrDpGzD pApJbnRlbCBPVEMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cg==