From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH 07/12] drm/i915: Move DP link retraining into intel_dp_detect() Date: Fri, 29 Jul 2016 14:45:29 -0700 Message-ID: <20160729214529.GB25660@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> <20160728201522.GT4329@intel.com> <20160729003614.GB23736@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id CBE826EA54 for ; Fri, 29 Jul 2016 21:32:50 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20160729003614.GB23736@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: Ander Conselvan de Oliveira , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBKdWwgMjgsIDIwMTYgYXQgMDU6MzY6MTRQTSAtMDcwMCwgTWFuYXNpIE5hdmFyZSB3 cm90ZToKPiBPbiBUaHUsIEp1bCAyOCwgMjAxNiBhdCAxMToxNToyMlBNICswMzAwLCBWaWxsZSBT eXJqw6Rsw6Qgd3JvdGU6Cj4gPiBPbiBUaHUsIEp1bCAyOCwgMjAxNiBhdCAxMjo0ODo1M1BNIC0w NzAwLCBNYW5hc2kgTmF2YXJlIHdyb3RlOgo+ID4gPiBPbiBUaHUsIEp1bCAyOCwgMjAxNiBhdCAw NTo1MDo0M1BNICswMzAwLCB2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbSB3cm90ZToKPiA+ ID4gPiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29t Pgo+ID4gPiA+IAo+ID4gPiA+IERQIGxpbmsgcmV0cmFpbmluZyBuZWVkcyB0byBncmFiIHNvbWUg bW9kZXNldCBsb2NrcyB0byBub3QgcmFjZSB3aXRoCj4gPiA+ID4gbW9kZXNldHMsIHNvIHdlIGNh bid0IHJlYWxseSBkbyBpdCBzYWZlbHkgZnJvbSB0aGUgaHBkX3B1bHNlLCBsZXN0IHdlCj4gPiA+ ID4gcmlzayBkZWFkbG9ja2luZyBkdWUgdG8gTVNUIHNpZGViYW5kIHN0dWZmLgo+ID4gPiA+IAo+ ID4gPiA+IE1vdmUgdGhlIGxpbmsgcmV0cmFpbmluZyB0byBoYXBwZW4gZnJvbSB0aGUgaG90cGx1 ZyB3b3JrIGluc3RlYWQuCj4gPiA+ID4gRG9pbmcgYXQgdGhlIGVuZCBvZiBpbnRlbF9kcF9kZXRl Y3QoKSBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSBpbiBjYXNlCj4gPiA+ID4gdGhlIHNpbmsgYWxy ZWFkeSBnb3QgZGlzY29ubmVjdGVkLCBpbiB3aGljaCBjYXNlIHJldHJhaW5pbmcgaXMKPiA+ID4g PiBwb2ludGxlc3MuCj4gPiA+ID4gCj4gPiA+ID4gVG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8g c2NoZWR1bGUgdGhlIGhvdHBsdWcgd29yaywgd2UnbGwganVzdCBjaGVjawo+ID4gPiA+IHRoZSBz aW5rIGxhbmUgc3RhdHVzIHdpdGhvdXQgbG9ja3MgZnJvbSBocGRfcHVsc2UuIEEgbGl0dGxlIHJh Y3kKPiA+ID4gPiBzdGlsbCBlZy4gZHVlIHRvIHVzZWluZyBpbnRlbF9kcC0+bGFuZV9jb3VudCwg YnV0IG5vIGxlc3MgcmFjeSB0aGFuCj4gPiA+ID4gd2hhdCB3ZSBhbHJlYWR5IGhhZC4gV2UnbGwg cmVwZWF0IHRoZSBjaGVjayBpbiBmcm9tIGludGVsX2RwX2RldGVjdCgpCj4gPiA+ID4gd2l0aCBw cm9wZXIgbG9ja2luZywgd2hlcmUgd2UnbGwgYWxzbyBjaGVjayBpZiB0aGUgbGluayBhcyBhY3R1 YWxseQo+ID4gPiA+IGFjdGl2ZSBvciBub3QuCj4gPiA+ID4gCj4gPiA+ID4gQ2M6IEFuZGVyIENv bnNlbHZhbiBkZSBPbGl2ZWlyYSA8YW5kZXIuY29uc2VsdmFuLmRlLm9saXZlaXJhQGludGVsLmNv bT4KPiA+ID4gPiBDYzogSmltIEJyaWRlIDxqaW0uYnJpZGVAbGludXguaW50ZWwuY29tPgo+ID4g PiA+IENjOiBNYW5hc2kgRCBOYXZhcmUgPG1hbmFzaS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gPiA+ ID4gQ2M6IER1cmdhZG9zcyBSIDxkdXJnYWRvc3MuckBpbnRlbC5jb20+Cj4gPiA+ID4gU2lnbmVk LW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4K PiA+ID4gPiAtLS0KPiA+ID4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyB8IDE1 NCArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gPiA+ID4gIDEgZmls ZSBjaGFuZ2VkLCA2NiBpbnNlcnRpb25zKCspLCA4OCBkZWxldGlvbnMoLSkKPiA+ID4gPiAKPiA+ ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiA+ID4gPiBpbmRleCA0YTQxODRjMjE5ODkuLjY3 NWI4M2Y1N2EwNyAxMDA2NDQKPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kcC5jCj4gPiA+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+ID4g PiA+IEBAIC0zODQyLDE1ICszODQyLDYgQEAgaW50ZWxfZHBfY2hlY2tfbXN0X3N0YXR1cyhzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ID4gPiA+ICAJCWJyZXQgPSBpbnRlbF9kcF9nZXRfc2lu a19pcnFfZXNpKGludGVsX2RwLCBlc2kpOwo+ID4gPiA+ICBnb19hZ2FpbjoKPiA+ID4gPiAgCQlp ZiAoYnJldCA9PSB0cnVlKSB7Cj4gPiA+ID4gLQo+ID4gPiA+IC0JCQkvKiBjaGVjayBsaW5rIHN0 YXR1cyAtIGVzaVsxMF0gPSAweDIwMGMgKi8KPiA+ID4gPiAtCQkJaWYgKGludGVsX2RwLT5hY3Rp dmVfc3RyZWFtcyAmJgo+ID4gPiA+IC0JCQkgICAgIWRybV9kcF9jaGFubmVsX2VxX29rKCZlc2lb MTBdLCBpbnRlbF9kcC0+bGFuZV9jb3VudCkpIHsKPiA+ID4gPiAtCQkJCURSTV9ERUJVR19LTVMo ImNoYW5uZWwgRVEgbm90IG9rLCByZXRyYWluaW5nXG4iKTsKPiA+ID4gPiAtCQkJCWludGVsX2Rw X3N0YXJ0X2xpbmtfdHJhaW4oaW50ZWxfZHApOwo+ID4gPiA+IC0JCQkJaW50ZWxfZHBfc3RvcF9s aW5rX3RyYWluKGludGVsX2RwKTsKPiA+ID4gPiAtCQkJfQo+ID4gPiA+IC0KPiA+ID4gPiAgCQkJ RFJNX0RFQlVHX0tNUygiZ290IGVzaSAlM3BoXG4iLCBlc2kpOwo+ID4gPiA+ICAJCQlyZXQgPSBk cm1fZHBfbXN0X2hwZF9pcnEoJmludGVsX2RwLT5tc3RfbWdyLCBlc2ksICZoYW5kbGVkKTsKPiA+ ID4gPiAgCj4gPiA+ID4gQEAgLTM4ODYsMzQgKzM4NzcsNDIgQEAgZ29fYWdhaW46Cj4gPiA+ID4g IAlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiAgfQo+ID4gPiA+ICAKPiA+ID4gPiAtc3RhdGljIHZv aWQKPiA+ID4gPiAtaW50ZWxfZHBfY2hlY2tfbGlua19zdGF0dXMoc3RydWN0IGludGVsX2RwICpp bnRlbF9kcCkKPiA+ID4gPiArc3RhdGljIGJvb2wKPiA+ID4gPiAraW50ZWxfZHBfbGlua19uZWVk c19yZXRyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gPiA+ID4gIHsKPiA+ID4gPiAt CXN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVyID0gJmRwX3RvX2RpZ19wb3J0KGlu dGVsX2RwKS0+YmFzZTsKPiA+ID4gPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9k cF90b19kZXYoaW50ZWxfZHApOwo+ID4gPiA+ICAJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFU VVNfU0laRV07Cj4gPiA+ID4gIAo+ID4gPiA+IC0JV0FSTl9PTighZHJtX21vZGVzZXRfaXNfbG9j a2VkKCZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgpKTsKPiA+ID4gPiArCWlmIChp bnRlbF9kcC0+YWN0aXZlX3N0cmVhbXMgPT0gMCkKPiA+ID4gPiArCQlyZXR1cm4gZmFsc2U7Cj4g PiA+ID4gKwo+ID4gPiA+ICsJaWYgKGludGVsX2RwLT5jb21wbGlhbmNlX3Rlc3RfdHlwZSA9PSBE UF9URVNUX0xJTktfVFJBSU5JTkcpCj4gPiA+ID4gKwkJcmV0dXJuIHRydWU7Cj4gPiA+ID4gIAo+ ID4gPiA+ICAJaWYgKCFpbnRlbF9kcF9nZXRfbGlua19zdGF0dXMoaW50ZWxfZHAsIGxpbmtfc3Rh dHVzKSkgewo+ID4gPiA+ICAJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBsaW5rIHN0YXR1c1xu Iik7Cj4gPiA+ID4gLQkJcmV0dXJuOwo+ID4gPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ID4gPiAg CX0KPiA+ID4gPiAgCj4gPiA+ID4gLQlpZiAoIWludGVsX2VuY29kZXItPmJhc2UuY3J0YykKPiA+ ID4gPiAtCQlyZXR1cm47Cj4gPiA+ID4gKwlyZXR1cm4gIWRybV9kcF9jaGFubmVsX2VxX29rKGxp bmtfc3RhdHVzLCBpbnRlbF9kcC0+bGFuZV9jb3VudCk7Cj4gPiA+IAo+ID4gPiBBY2NvcmRpbmcg dG8gdGhlIERQIHNwZWMsIHdlIHNob3VsZCBhbHNvIGNoZWNrIGZvciB0aGUgY2xvY2sgcmVjb3Zl cnkgYml0IGluIERQQ0QKPiA+ID4gV2Ugc2hvdWxkIGFsc28gYWRkIGEgY2hlY2sgZHJtX2RwX2Ns b2NrX3JlY292ZXJ5X29rKGxpbmtfc3RhdHVzLCBpbnRlbF9kcC0+bGFuZV9jb3VudCkKPiA+IAo+ ID4gSSB0aGluayBkcm1fZHBfY2hhbm5lbF9lcV9vaygpIGNoZWNrcyBhbGwgdGhlIGJpdHM6IElO VEVSTEFORV9BTElHTl9ET05FLAo+ID4gQ1JfRE9ORSwgRVFfRE9ORSwgYW5kIFNZTUJPTF9MT0NL RUQuCj4gCj4gSXQgb25seSBjaGVja3MgZm9yIEVRX0RPTkUgYW5kIElOVEVSTEFORV9BTElHTl9E T05FLgo+IGRybV9kcF9jbG9ja19yZWNvdmVyeV9vaygpIGNoZWNrcyBmb3IgRFBfTEFORV9DUl9E T05FIGJpdC4KPiA+IAo+ID4gQW55d2F5cywgd2hpbGUgSSB3YXMgbG9va2luZyBhdCB0aGUgc2hv cnQgcHVsc2UgaGFuZGxpbmcgYSBiaXQgbW9yZSwgSSBjYW1lCj4gPiB0byB0aGUgY29uY2x1c2lv biB0aGF0IHdlIHNob3VsZCByZXdyaXRlIGl0IGEgYml0Lgo+ID4gCj4gPiBUaGUgQ1RTIGRvY3Mg c2VlbSB0byBzYXkgdGhhdCB3ZSdyZSBleHBlY3RlZCB0byByZWFkIERQQ0QgMHgyMDAtMHgyMDUg b24gCj4gPiBzaG9ydCBwdWxzZSwgYW5kIHVzZSB0aGF0IGluZm9ybWF0aW9uIHRvIGRldGVybWlu ZSB3aGF0IHdlIHNob3VsZCBkby4KPiA+IEN1cnJlbnRseSB3ZSBkb24ndCBkbyB0aGF0Lgo+ID4g Cj4gPiBTbyBJIHdhcyB0aHVua2luZyB0aGF0IHdlJ2QgYWRqdXN0IHRoZSBsaW5rX3N0YXR1cyBz dHVmZiB0byByZWFkIDB4MjAwLTB4MjA3Cj4gPiBpbnN0ZWFkIG9mIDB4MjAyLTB4MjA3LCBsaWtl IHNvOgo+ID4gLSNkZWZpbmUgRFBfTElOS19TVEFUVVNfU0laRSAgICAgICA2Cj4gPiArI2RlZmlu ZSBEUF9MSU5LX1NUQVRVU19TSVpFICAgICAgIDgKPiA+IAo+ID4gIHN0YXRpYyB1OCBkcF9saW5r X3N0YXR1cyhjb25zdCB1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSwgaW50IHIp Cj4gPiAgewo+ID4gLSAgICAgICByZXR1cm4gbGlua19zdGF0dXNbciAtIERQX0xBTkUwXzFfU1RB VFVTXTsKPiA+ICsgICAgICAgcmV0dXJuIGxpbmtfc3RhdHVzW3IgLSBEUF9TSU5LX0NPVU5UXTsK PiA+ICB9Cj4gPiAKPiA+IEFuZCB0aGVuIHdlJ2QgdXNlIHNvbWV0aGluZyBsaWtlIHRoaXMgYXMg b3VyIHNob3J0IHB1bHNlIGhhbmRsZXI6Cj4gPiAKPiA+IHN0YXRpYyBib29sCj4gPiBpbnRlbF9k cF9zaG9ydF9wdWxzZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ID4gewo+ID4gICAgICAg ICB1OCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSwgdG1wOwo+ID4gCj4gPiAgICAg ICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAo+ID4gICAgICAgICAgKiBDbGVhcmluZyBjb21wbGlhbmNlIHRlc3QgdmFyaWFibGVzIHRvIGFs bG93IGNhcHR1cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKPiA+ICAgICAgICAgICogb2YgdmFsdWVzIGZvciBuZXh0IGF1dG9tYXRlZCB0 ZXN0IHJlcXVlc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCj4gPiAgICAgICAgICAqLwo+ID4gICAgICAgICBpbnRlbF9k cC0+Y29tcGxpYW5jZV90ZXN0X2FjdGl2ZSA9IDA7Cj4gPiAgICAgICAgIGludGVsX2RwLT5jb21w bGlhbmNlX3Rlc3RfdHlwZSA9IDA7Cj4gPiAgICAgICAgIGludGVsX2RwLT5jb21wbGlhbmNlX3Rl c3RfZGF0YSA9IDA7Cj4gPiAKPiA+ICAgICAgICAgaWYgKCFpbnRlbF9kcF9nZXRfbGlua19zdGF0 dXMoaW50ZWxfZHAsIGxpbmtfc3RhdHVzKSkKPiA+ICAgICAgICAgICAgICAgICByZXR1cm4gZmFs c2U7Cj4gPiAKPiA+ICAgICAgICAgdG1wID0gZHJtX2RwX2xpbmtfc3RhdHVzKGxpbmtfc3RhdHVz LCBEUF9ERVZJQ0VfU0VSVklDRV9JUlFfVkVDVE9SKTsKPiA+ICAgICAgICAgaWYgKHRtcCkKPiA+ ICAgICAgICAgICAgICAgICBkcm1fZHBfZHBjZF93cml0ZWIoJmludGVsX2RwLT5hdXgsCj4gPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERQX0RFVklDRV9TRVJWSUNFX0lSUV9W RUNUT1IsCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCk7Cj4gPiAK PiA+ICAgICAgICAgaWYgKHRtcCAmIERQX0FVVE9NQVRFRF9URVNUX1JFUVVFU1QpCj4gPiAgICAg ICAgICAgICAgICAgRFJNX0RFQlVHX0RSSVZFUigiVGVzdCByZXF1ZXN0IGluIHNob3J0IHB1bHNl IG5vdCBoYW5kbGVkXG4iKTsKPiA+ICAgICAgICAgaWYgKHRtcCAmIChEUF9DUF9JUlEgfCBEUF9T SU5LX1NQRUNJRklDX0lSUSkpCj4gPiAgICAgICAgICAgICAgICAgRFJNX0RFQlVHX0RSSVZFUigi Q1Agb3Igc2luayBzcGVjaWZpYyBpcnEgdW5oYW5kbGVkXG4iKTsKPiA+IAo+ID4gICAgICAgICB0 bXAgPSBkcm1fZHBfbGlua19zdGF0dXMobGlua19zdGF0dXMsIERQX0xBTkVfQUxJR05fU1RBVFVT X1VQREFURUQpOwo+ID4gICAgICAgICBpZiAodG1wICYgRFBfRE9XTlNUUkVBTV9QT1JUX1NUQVRV U19DSEFOR0VEKQo+ID4gICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiA+IAo+ID4gICAg ICAgICB0bXAgPSBkcm1fZHBfbGlua19zdGF0dXMobGlua19zdGF0dXMsIERQX1NJTktfQ09VTlQp Owo+ID4gICAgICAgICBpZiAoRFBfR0VUX1NJTktfQ09VTlQodG1wKSAhPSBpbnRlbF9kcC0+c2lu a19jb3VudCkKPiA+ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gPiAKPiA+ICAgICAg ICAgaWYgKGludGVsX2RwLT5hY3RpdmVfc3RyZWFtcyAhPSAwICYmCj4gPiAgICAgICAgICAgICAh ZHJtX2RwX2NoYW5uZWxfZXFfb2sobGlua19zdGF0dXMsIGludGVsX2RwLT5sYW5lX2NvdW50KSkK PiA+ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gPiAKPiA+ICAgICAgICAgcmV0dXJu IHRydWU7Cj4gPiB9Cj4gPiAKPiA+IGFuZCBvYnZpb3VzbHkgZmlsbCBpbiB3aGF0ZXZlciBlbHNl IHNpbmsgaXJxIGhhbmRsaW5nIHdlIG5lZWQuCj4gPiAKPiA+IFRob3VnaHRzPyBEb2VzIHRoYXQg bG9vayBzYW5lPwo+IAo+IFllcyBhbGwgdGhlIExpbmsgbWFpbnRlbmFuY2UgdGVzdHMgaW4gQ1RT IHNwZWMgZXhwZWN0IERQQ0QgcmVnaXN0ZXJzCj4gMDIwMGgtMDIwNWggdG8gYmUgcmVhZCBvbiBs b3NzIG9mIHN5bWJvbCBsb2NrIG9yIGxvc3Mgb2YgY2xvY2sgcmVjb3ZlcnkuCj4gU28gSSB0aGlu ayBpdCBtYWtlcyBzZW5zZSB0byByZWFkIDAyMDAtMDIwNWguCj4gCj4gPiAKPiA+IDxzbmlwPgo+ ID4gPiA+ICAKPiA+ID4gPiAgc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKPiA+ID4g PiAgaW50ZWxfZHBfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wg Zm9yY2UpCj4gPiA+ID4gIHsKPiA+ID4gPiAgCXN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAgPSBp bnRlbF9hdHRhY2hlZF9kcChjb25uZWN0b3IpOwo+ID4gPiA+IC0Jc3RydWN0IGludGVsX2RpZ2l0 YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBkcF90b19kaWdfcG9ydChpbnRlbF9kcCk7Cj4gPiA+ ID4gLQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlciA9ICZpbnRlbF9kaWdfcG9y dC0+YmFzZTsKPiA+ID4gPiAgCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3Rv ciA9IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwo+ID4gPiA+ICsJZW51bSBkcm1fY29u bmVjdG9yX3N0YXR1cyBzdGF0dXM7Cj4gPiA+ID4gIAo+ID4gPiA+ICAJRFJNX0RFQlVHX0tNUygi W0NPTk5FQ1RPUjolZDolc11cbiIsCj4gPiA+ID4gIAkJICAgICAgY29ubmVjdG9yLT5iYXNlLmlk LCBjb25uZWN0b3ItPm5hbWUpOwo+ID4gPiA+ICAKPiA+ID4gPiAtCWlmIChpbnRlbF9kcC0+aXNf bXN0KSB7Cj4gPiA+ID4gLQkJLyogTVNUIGRldmljZXMgYXJlIGRpc2Nvbm5lY3RlZCBmcm9tIGEg bW9uaXRvciBQT1YgKi8KPiA+ID4gPiAtCQlpbnRlbF9kcF91bnNldF9lZGlkKGludGVsX2RwKTsK PiA+ID4gPiAtCQlpZiAoaW50ZWxfZW5jb2Rlci0+dHlwZSAhPSBJTlRFTF9PVVRQVVRfRURQKQo+ ID4gPiA+IC0JCQlpbnRlbF9lbmNvZGVyLT50eXBlID0gSU5URUxfT1VUUFVUX0RQOwo+ID4gPiA+ IC0JCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKPiA+ID4gPiAtCX0KPiA+ ID4gPiAtCj4gPiA+ID4gLQkvKiBJZiBmdWxsIGRldGVjdCBpcyBub3QgcGVyZm9ybWVkIHlldCwg ZG8gYSBmdWxsIGRldGVjdCAqLwo+ID4gPiA+IC0JaWYgKCFpbnRlbF9kcC0+ZGV0ZWN0X2RvbmUp Cj4gPiA+ID4gLQkJaW50ZWxfZHBfbG9uZ19wdWxzZShpbnRlbF9kcC0+YXR0YWNoZWRfY29ubmVj dG9yKTsKPiA+ID4gPiArCXN0YXR1cyA9IGludGVsX2RwX2xvbmdfcHVsc2UoaW50ZWxfY29ubmVj dG9yKTsKPiA+ID4gPiAgCj4gPiA+ID4gLQlpbnRlbF9kcC0+ZGV0ZWN0X2RvbmUgPSBmYWxzZTsK PiA+ID4gPiArCWlmIChzdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgfHwgaW50 ZWxfZHAtPmlzX21zdCkKPiA+ID4gCj4gPiA+IFdoeWEgcmUgd2Ugbm90IGNoZWNraW5nIGZvciAo IWludGVsX2VuY29kZXItPmNydGMuYmFzZSkgYmVmb3JlIHJldHJhaW5pbmc/Cj4gPiA+IEkgaGFk IHNlZW4gaXNzdWVzIHdpdGggY29ubmVjdGVkIGJvb3QgY2FzZSB3aGVuIGNvbm5lY3RvciBzdGF0 dXMgaXMgY29ubmVjdGVkIGFuZCBpZiBpdAo+ID4gPiB0cmllcyB0byByZXRyYWluIGl0IGZhaWxz IHdpdGggcmV0cmllcyBiZWNhdXNlIHRoZXJlIGlzIG5vIGFjdGl2ZSBwaXBlLiBJbiB0aGF0Cj4g PiA+IGNhc2UgaXQgc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHJldHJhaW4uCj4gPiAKPiA+IEkgY2hh bmdlZCBpdCB0byB1c2UgaW50ZWxfZHAtPmFjdGl2ZV9zdHJlYW1zIGluc3RlYWQuIFRoYXQnbGwg d29yayBmb3IgTVNUCj4gPiBhcyB3ZWxsIGFzIFNTVC4gQ2hlY2tpbmcgZm9yIHRoZSBjcnRjIHdv dWxkIG9ubHkgY292ZXIgU1NULgo+ID4gCj4gPiA+IAo+ID4gPiAKPiA+ID4gPiArCQlpbnRlbF9k cF9saW5rX3JldHJhaW4oaW50ZWxfZHApOwo+ID4gPiA+ICAKPiA+ID4gPiAtCWlmIChpc19lZHAo aW50ZWxfZHApIHx8IGludGVsX2Nvbm5lY3Rvci0+ZGV0ZWN0X2VkaWQpCj4gPiA+ID4gLQkJcmV0 dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwo+ID4gPiA+IC0JZWxzZQo+ID4gPiA+IC0J CXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKPiA+ID4gPiArCXJldHVybiBz dGF0dXM7Cj4gPiA+ID4gIH0KPiA+ID4gPiAgCj4gPiA+ID4gIHN0YXRpYyB2b2lkCj4gPiA+ID4g QEAgLTQ3MDYsMzkgKzQ2ODIsNDEgQEAgaW50ZWxfZHBfaHBkX3B1bHNlKHN0cnVjdCBpbnRlbF9k aWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LCBib29sIGxvbmdfaHBkKQo+ID4gPiA+ICAJCSAg ICAgIHBvcnRfbmFtZShpbnRlbF9kaWdfcG9ydC0+cG9ydCksCj4gPiA+ID4gIAkJICAgICAgbG9u Z19ocGQgPyAibG9uZyIgOiAic2hvcnQiKTsKPiA+ID4gPiAgCj4gPiA+ID4gKwlpZiAobG9uZ19o cGQpCj4gPiA+ID4gKwkJcmV0dXJuIElSUV9OT05FOwo+ID4gPiA+ICsKPiA+ID4gPiAgCXBvd2Vy X2RvbWFpbiA9IGludGVsX2Rpc3BsYXlfcG9ydF9hdXhfcG93ZXJfZG9tYWluKGludGVsX2VuY29k ZXIpOwo+ID4gPiA+ICAJaW50ZWxfZGlzcGxheV9wb3dlcl9nZXQoZGV2X3ByaXYsIHBvd2VyX2Rv bWFpbik7Cj4gPiA+ID4gIAo+ID4gPiA+IC0JaWYgKGxvbmdfaHBkKSB7Cj4gPiA+ID4gLQkJaW50 ZWxfZHBfbG9uZ19wdWxzZShpbnRlbF9kcC0+YXR0YWNoZWRfY29ubmVjdG9yKTsKPiA+ID4gPiAt CQlpZiAoaW50ZWxfZHAtPmlzX21zdCkKPiA+ID4gPiAtCQkJcmV0ID0gSVJRX0hBTkRMRUQ7Cj4g PiA+ID4gLQkJZ290byBwdXRfcG93ZXI7Cj4gPiA+ID4gLQo+ID4gPiA+IC0JfSBlbHNlIHsKPiA+ ID4gPiAtCQlpZiAoaW50ZWxfZHAtPmlzX21zdCkgewo+ID4gPiA+IC0JCQlpZiAoaW50ZWxfZHBf Y2hlY2tfbXN0X3N0YXR1cyhpbnRlbF9kcCkgPT0gLUVJTlZBTCkgewo+ID4gPiA+IC0JCQkJLyoK PiA+ID4gPiAtCQkJCSAqIElmIHdlIHdlcmUgaW4gTVNUIG1vZGUsIGFuZCBkZXZpY2UgaXMgbm90 Cj4gPiA+ID4gLQkJCQkgKiB0aGVyZSwgZ2V0IG91dCBvZiBNU1QgbW9kZQo+ID4gPiA+IC0JCQkJ ICovCj4gPiA+ID4gLQkJCQlEUk1fREVCVUdfS01TKCJNU1QgZGV2aWNlIG1heSBoYXZlIGRpc2Fw cGVhcmVkICVkIHZzICVkXG4iLAo+ID4gPiA+IC0JCQkJCSAgICAgIGludGVsX2RwLT5pc19tc3Qs IGludGVsX2RwLT5tc3RfbWdyLm1zdF9zdGF0ZSk7Cj4gPiA+ID4gLQkJCQlpbnRlbF9kcC0+aXNf bXN0ID0gZmFsc2U7Cj4gPiA+ID4gLQkJCQlkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9zZXRfbXN0 KCZpbnRlbF9kcC0+bXN0X21nciwKPiA+ID4gPiAtCQkJCQkJCQlpbnRlbF9kcC0+aXNfbXN0KTsK PiA+ID4gPiAtCQkJCWdvdG8gcHV0X3Bvd2VyOwo+ID4gPiA+IC0JCQl9Cj4gPiA+ID4gLQkJfQo+ ID4gPiA+IC0KPiA+ID4gPiAtCQlpZiAoIWludGVsX2RwLT5pc19tc3QpIHsKPiA+ID4gPiAtCQkJ aWYgKCFpbnRlbF9kcF9zaG9ydF9wdWxzZShpbnRlbF9kcCkpIHsKPiA+ID4gPiAtCQkJCWludGVs X2RwX2xvbmdfcHVsc2UoaW50ZWxfZHAtPmF0dGFjaGVkX2Nvbm5lY3Rvcik7Cj4gPiA+ID4gLQkJ CQlnb3RvIHB1dF9wb3dlcjsKPiA+ID4gPiAtCQkJfQo+ID4gPiA+ICsJaWYgKGludGVsX2RwLT5p c19tc3QpIHsKPiA+ID4gPiArCQlpZiAoaW50ZWxfZHBfY2hlY2tfbXN0X3N0YXR1cyhpbnRlbF9k cCkgPT0gLUVJTlZBTCkgewo+ID4gPiA+ICsJCQkvKgo+ID4gPiA+ICsJCQkgKiBJZiB3ZSB3ZXJl IGluIE1TVCBtb2RlLCBhbmQgZGV2aWNlIGlzIG5vdAo+ID4gPiA+ICsJCQkgKiB0aGVyZSwgZ2V0 IG91dCBvZiBNU1QgbW9kZQo+ID4gPiA+ICsJCQkgKi8KPiA+ID4gPiArCQkJRFJNX0RFQlVHX0tN UygiTVNUIGRldmljZSBtYXkgaGF2ZSBkaXNhcHBlYXJlZCAlZCB2cyAlZFxuIiwKPiA+ID4gPiAr CQkJCSAgICAgIGludGVsX2RwLT5pc19tc3QsIGludGVsX2RwLT5tc3RfbWdyLm1zdF9zdGF0ZSk7 Cj4gPiA+ID4gKwkJCWludGVsX2RwLT5pc19tc3QgPSBmYWxzZTsKPiA+ID4gPiArCQkJZHJtX2Rw X21zdF90b3BvbG9neV9tZ3Jfc2V0X21zdCgmaW50ZWxfZHAtPm1zdF9tZ3IsCj4gPiA+ID4gKwkJ CQkJCQlpbnRlbF9kcC0+aXNfbXN0KTsKPiA+ID4gPiArCQkJZ290byBwdXRfcG93ZXI7Cj4gPiA+ ID4gIAkJfQo+ID4gPiA+ICsJfSBlbHNlIHsKPiA+ID4gPiArCQlpZiAoIWludGVsX2RwX3Nob3J0 X3B1bHNlKGludGVsX2RwKSkKPiA+ID4gPiArCQkJZ290byBwdXRfcG93ZXI7Cj4gPiA+ID4gIAl9 Cj4gPiA+ID4gIAo+ID4gPiA+ICsJLyoKPiA+ID4gPiArCSAqIExpbmsgcmV0cmFpbmluZyBoYXBw ZW5zIGZyb20gdGhlIGhvdHBsdWcgd29yaywKPiA+ID4gPiArCSAqIGNoZWNrIGlmIHdlIG1pZ2h0 IG5lZWQgdG8gc2NoZHVsZSBpdC4KPiA+ID4gPiArCSAqCj4gPiA+ID4gKwkgKiBUaGVyZSBoYXMg YmVlbiBrbm93biBpc3N1ZXMgb2YgbGluayBsb3NzCj4gPiA+ID4gKwkgKiB0cmlnZ2VycmluZyBs b25nIHB1bHNlLCBzbyBsZXQncyBjaGVjayBib3RoCj4gPiA+ID4gKwkgKiBmb3Igc2hvcnQgYW5k IGxvbmcgcHVsc2UuCj4gPiA+ID4gKwkgKi8KPiA+ID4gPiArCWlmIChpbnRlbF9kcF9saW5rX25l ZWRzX3JldHJhaW4oaW50ZWxfZHApKQo+ID4gPiA+ICsJCWdvdG8gcHV0X3Bvd2VyOwoKV2hhdCBo YXBwZW5zIGluIGNhc2Ugb2YgbGluayBsb3NzIHRyaWdnZXJpbmcgbG9uZyBwdWxzZSwgZG9lcyB0 aGlzIGxpbmsgcmV0cmFpbmluZwphbHNvIGdldCBoYW5kbGVkIGluIGludGVsX2RwX2RldGVjdCgp PwoKTWFuYXNpCj4gPiA+ID4gKwo+ID4gPiA+ICAJcmV0ID0gSVJRX0hBTkRMRUQ7Cj4gPiA+ID4g IAo+ID4gPiA+ICBwdXRfcG93ZXI6Cj4gPiA+ID4gLS0gCj4gPiA+ID4gMi43LjQKPiA+ID4gPiAK PiA+IAo+ID4gLS0gCj4gPiBWaWxsZSBTeXJqw6Rsw6QKPiA+IEludGVsIE9UQwo+IF9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeApfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK