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: Thu, 28 Jul 2016 12:48:53 -0700 Message-ID: <20160728194853.GA23736@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> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id EF48E6E8B4 for ; Thu, 28 Jul 2016 19:35:55 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1469717448-4297-8-git-send-email-ville.syrjala@linux.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.syrjala@linux.intel.com Cc: Ander Conselvan de Oliveira , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBKdWwgMjgsIDIwMTYgYXQgMDU6NTA6NDNQTSArMDMwMCwgdmlsbGUuc3lyamFsYUBs aW51eC5pbnRlbC5jb20gd3JvdGU6Cj4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJq YWxhQGxpbnV4LmludGVsLmNvbT4KPiAKPiBEUCBsaW5rIHJldHJhaW5pbmcgbmVlZHMgdG8gZ3Jh YiBzb21lIG1vZGVzZXQgbG9ja3MgdG8gbm90IHJhY2Ugd2l0aAo+IG1vZGVzZXRzLCBzbyB3ZSBj YW4ndCByZWFsbHkgZG8gaXQgc2FmZWx5IGZyb20gdGhlIGhwZF9wdWxzZSwgbGVzdCB3ZQo+IHJp c2sgZGVhZGxvY2tpbmcgZHVlIHRvIE1TVCBzaWRlYmFuZCBzdHVmZi4KPiAKPiBNb3ZlIHRoZSBs aW5rIHJldHJhaW5pbmcgdG8gaGFwcGVuIGZyb20gdGhlIGhvdHBsdWcgd29yayBpbnN0ZWFkLgo+ IERvaW5nIGF0IHRoZSBlbmQgb2YgaW50ZWxfZHBfZGV0ZWN0KCkgc2VlbXMgbGlrZSBhIGdvb2Qg cGxhY2UgaW4gY2FzZQo+IHRoZSBzaW5rIGFscmVhZHkgZ290IGRpc2Nvbm5lY3RlZCwgaW4gd2hp Y2ggY2FzZSByZXRyYWluaW5nIGlzCj4gcG9pbnRsZXNzLgo+IAo+IFRvIGRldGVybWluZSBpZiB3 ZSBuZWVkIHRvIHNjaGVkdWxlIHRoZSBob3RwbHVnIHdvcmssIHdlJ2xsIGp1c3QgY2hlY2sKPiB0 aGUgc2luayBsYW5lIHN0YXR1cyB3aXRob3V0IGxvY2tzIGZyb20gaHBkX3B1bHNlLiBBIGxpdHRs ZSByYWN5Cj4gc3RpbGwgZWcuIGR1ZSB0byB1c2VpbmcgaW50ZWxfZHAtPmxhbmVfY291bnQsIGJ1 dCBubyBsZXNzIHJhY3kgdGhhbgo+IHdoYXQgd2UgYWxyZWFkeSBoYWQuIFdlJ2xsIHJlcGVhdCB0 aGUgY2hlY2sgaW4gZnJvbSBpbnRlbF9kcF9kZXRlY3QoKQo+IHdpdGggcHJvcGVyIGxvY2tpbmcs IHdoZXJlIHdlJ2xsIGFsc28gY2hlY2sgaWYgdGhlIGxpbmsgYXMgYWN0dWFsbHkKPiBhY3RpdmUg b3Igbm90Lgo+IAo+IENjOiBBbmRlciBDb25zZWx2YW4gZGUgT2xpdmVpcmEgPGFuZGVyLmNvbnNl bHZhbi5kZS5vbGl2ZWlyYUBpbnRlbC5jb20+Cj4gQ2M6IEppbSBCcmlkZSA8amltLmJyaWRlQGxp bnV4LmludGVsLmNvbT4KPiBDYzogTWFuYXNpIEQgTmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVAaW50 ZWwuY29tPgo+IENjOiBEdXJnYWRvc3MgUiA8ZHVyZ2Fkb3NzLnJAaW50ZWwuY29tPgo+IFNpZ25l ZC1vZmYtYnk6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+ Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgfCAxNTQgKysrKysrKysr KysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgNjYgaW5z ZXJ0aW9ucygrKSwgODggZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4g aW5kZXggNGE0MTg0YzIxOTg5Li42NzViODNmNTdhMDcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2RwLmMKPiBAQCAtMzg0MiwxNSArMzg0Miw2IEBAIGludGVsX2RwX2NoZWNrX21zdF9zdGF0dXMo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgCQlicmV0ID0gaW50ZWxfZHBfZ2V0X3Npbmtf aXJxX2VzaShpbnRlbF9kcCwgZXNpKTsKPiAgZ29fYWdhaW46Cj4gIAkJaWYgKGJyZXQgPT0gdHJ1 ZSkgewo+IC0KPiAtCQkJLyogY2hlY2sgbGluayBzdGF0dXMgLSBlc2lbMTBdID0gMHgyMDBjICov Cj4gLQkJCWlmIChpbnRlbF9kcC0+YWN0aXZlX3N0cmVhbXMgJiYKPiAtCQkJICAgICFkcm1fZHBf Y2hhbm5lbF9lcV9vaygmZXNpWzEwXSwgaW50ZWxfZHAtPmxhbmVfY291bnQpKSB7Cj4gLQkJCQlE Uk1fREVCVUdfS01TKCJjaGFubmVsIEVRIG5vdCBvaywgcmV0cmFpbmluZ1xuIik7Cj4gLQkJCQlp bnRlbF9kcF9zdGFydF9saW5rX3RyYWluKGludGVsX2RwKTsKPiAtCQkJCWludGVsX2RwX3N0b3Bf bGlua190cmFpbihpbnRlbF9kcCk7Cj4gLQkJCX0KPiAtCj4gIAkJCURSTV9ERUJVR19LTVMoImdv dCBlc2kgJTNwaFxuIiwgZXNpKTsKPiAgCQkJcmV0ID0gZHJtX2RwX21zdF9ocGRfaXJxKCZpbnRl bF9kcC0+bXN0X21nciwgZXNpLCAmaGFuZGxlZCk7Cj4gIAo+IEBAIC0zODg2LDM0ICszODc3LDQy IEBAIGdvX2FnYWluOgo+ICAJcmV0dXJuIC1FSU5WQUw7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lk Cj4gLWludGVsX2RwX2NoZWNrX2xpbmtfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp Cj4gK3N0YXRpYyBib29sCj4gK2ludGVsX2RwX2xpbmtfbmVlZHNfcmV0cmFpbihzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwKQo+ICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5j b2RlciA9ICZkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2U7Cj4gLQlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gaW50ZWxfZHBfdG9fZGV2KGludGVsX2RwKTsKPiAgCXU4IGxpbmtfc3RhdHVz W0RQX0xJTktfU1RBVFVTX1NJWkVdOwo+ICAKPiAtCVdBUk5fT04oIWRybV9tb2Rlc2V0X2lzX2xv Y2tlZCgmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0aW9uX211dGV4KSk7Cj4gKwlpZiAoaW50ZWxf ZHAtPmFjdGl2ZV9zdHJlYW1zID09IDApCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWlmIChp bnRlbF9kcC0+Y29tcGxpYW5jZV90ZXN0X3R5cGUgPT0gRFBfVEVTVF9MSU5LX1RSQUlOSU5HKQo+ ICsJCXJldHVybiB0cnVlOwo+ICAKPiAgCWlmICghaW50ZWxfZHBfZ2V0X2xpbmtfc3RhdHVzKGlu dGVsX2RwLCBsaW5rX3N0YXR1cykpIHsKPiAgCQlEUk1fRVJST1IoIkZhaWxlZCB0byBnZXQgbGlu ayBzdGF0dXNcbiIpOwo+IC0JCXJldHVybjsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gIAl9Cj4gIAo+ IC0JaWYgKCFpbnRlbF9lbmNvZGVyLT5iYXNlLmNydGMpCj4gLQkJcmV0dXJuOwo+ICsJcmV0dXJu ICFkcm1fZHBfY2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgaW50ZWxfZHAtPmxhbmVfY291bnQp OwoKQWNjb3JkaW5nIHRvIHRoZSBEUCBzcGVjLCB3ZSBzaG91bGQgYWxzbyBjaGVjayBmb3IgdGhl IGNsb2NrIHJlY292ZXJ5IGJpdCBpbiBEUENECldlIHNob3VsZCBhbHNvIGFkZCBhIGNoZWNrIGRy bV9kcF9jbG9ja19yZWNvdmVyeV9vayhsaW5rX3N0YXR1cywgaW50ZWxfZHAtPmxhbmVfY291bnQp Cgo+ICt9Cj4gIAo+IC0JaWYgKCF0b19pbnRlbF9jcnRjKGludGVsX2VuY29kZXItPmJhc2UuY3J0 YyktPmFjdGl2ZSkKPiAtCQlyZXR1cm47Cj4gK3N0YXRpYyB2b2lkCj4gK2ludGVsX2RwX2xpbmtf cmV0cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxf ZW5jb2RlciAqZW5jb2RlciA9ICZkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2U7Cj4gKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZHBfdG9fZGV2KGludGVsX2RwKTsKPiArCj4g Kwlkcm1fbW9kZXNldF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgsIE5V TEwpOwo+ICAKPiAtCS8qIGlmIGxpbmsgdHJhaW5pbmcgaXMgcmVxdWVzdGVkIHdlIHNob3VsZCBw ZXJmb3JtIGl0IGFsd2F5cyAqLwo+IC0JaWYgKChpbnRlbF9kcC0+Y29tcGxpYW5jZV90ZXN0X3R5 cGUgPT0gRFBfVEVTVF9MSU5LX1RSQUlOSU5HKSB8fAo+IC0JICAgICghZHJtX2RwX2NoYW5uZWxf ZXFfb2sobGlua19zdGF0dXMsIGludGVsX2RwLT5sYW5lX2NvdW50KSkpIHsKCj4gKwlpZiAoaW50 ZWxfZHBfbGlua19uZWVkc19yZXRyYWluKGludGVsX2RwKSkgewo+ICAJCURSTV9ERUJVR19LTVMo IiVzOiBjaGFubmVsIEVRIG5vdCBvaywgcmV0cmFpbmluZ1xuIiwKPiAtCQkJICAgICAgaW50ZWxf ZW5jb2Rlci0+YmFzZS5uYW1lKTsKPiArCQkJICAgICAgZW5jb2Rlci0+YmFzZS5uYW1lKTsKPiAr Cj4gIAkJaW50ZWxfZHBfc3RhcnRfbGlua190cmFpbihpbnRlbF9kcCk7Cj4gIAkJaW50ZWxfZHBf c3RvcF9saW5rX3RyYWluKGludGVsX2RwKTsKPiAgCX0KPiArCj4gKwlkcm1fbW9kZXNldF91bmxv Y2soJmRldi0+bW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCk7Cj4gIH0KPiAgCj4gIC8qCj4g QEAgLTM5MzIsNyArMzkzMSw2IEBAIGludGVsX2RwX2NoZWNrX2xpbmtfc3RhdHVzKHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHApCj4gIHN0YXRpYyBib29sCj4gIGludGVsX2RwX3Nob3J0X3B1bHNl KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gIHsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBpbnRlbF9kcF90b19kZXYoaW50ZWxfZHApOwo+ICAJdTggc2lua19pcnFfdmVjdG9yOwo+ ICAJdTggb2xkX3NpbmtfY291bnQgPSBpbnRlbF9kcC0+c2lua19jb3VudDsKPiAgCWJvb2wgcmV0 Owo+IEBAIC0zOTcyLDEwICszOTcwLDYgQEAgaW50ZWxfZHBfc2hvcnRfcHVsc2Uoc3RydWN0IGlu dGVsX2RwICppbnRlbF9kcCkKPiAgCQkJRFJNX0RFQlVHX0RSSVZFUigiQ1Agb3Igc2luayBzcGVj aWZpYyBpcnEgdW5oYW5kbGVkXG4iKTsKPiAgCX0KPiAgCj4gLQlkcm1fbW9kZXNldF9sb2NrKCZk ZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgsIE5VTEwpOwo+IC0JaW50ZWxfZHBfY2hl Y2tfbGlua19zdGF0dXMoaW50ZWxfZHApOwo+IC0JZHJtX21vZGVzZXRfdW5sb2NrKCZkZXYtPm1v ZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgpOwo+IC0KPiAgCXJldHVybiB0cnVlOwo+ICB9Cj4g IAo+IEBAIC0zOTg2LDYgKzM5ODAsOCBAQCBpbnRlbF9kcF9kZXRlY3RfZHBjZChzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwKQo+ICAJdWludDhfdCAqZHBjZCA9IGludGVsX2RwLT5kcGNkOwo+ICAJ dWludDhfdCB0eXBlOwo+ICAKPiArCVdBUk5fT04oaXNfZWRwKGludGVsX2RwKSk7Cj4gKwo+ICAJ aWYgKCFpbnRlbF9kcF9nZXRfZHBjZChpbnRlbF9kcCkpCj4gIAkJcmV0dXJuIGNvbm5lY3Rvcl9z dGF0dXNfZGlzY29ubmVjdGVkOwo+ICAKPiBAQCAtNDIxOCw3ICs0MjE0LDcgQEAgaW50ZWxfZHBf dW5zZXRfZWRpZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICAJaW50ZWxfZHAtPmhhc19h dWRpbyA9IGZhbHNlOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZAo+ICtzdGF0aWMgZW51bSBkcm1f Y29ubmVjdG9yX3N0YXR1cwo+ICBpbnRlbF9kcF9sb25nX3B1bHNlKHN0cnVjdCBpbnRlbF9jb25u ZWN0b3IgKmludGVsX2Nvbm5lY3RvcikKPiAgewo+ICAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciA9ICZpbnRlbF9jb25uZWN0b3ItPmJhc2U7Cj4gQEAgLTQyNzMsMTggKzQyNjksMTIg QEAgaW50ZWxfZHBfbG9uZ19wdWxzZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25u ZWN0b3IpCj4gIAkJICovCj4gIAkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0 ZWQ7Cj4gIAkJZ290byBvdXQ7Cj4gLQl9IGVsc2UgaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09IGNv bm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKSB7Cj4gLQkJLyoKPiAtCQkgKiBJZiBkaXNwbGF5IHdh cyBjb25uZWN0ZWQgYWxyZWFkeSBhbmQgaXMgc3RpbGwgY29ubmVjdGVkCj4gLQkJICogY2hlY2sg bGlua3Mgc3RhdHVzLCB0aGVyZSBoYXMgYmVlbiBrbm93biBpc3N1ZXMgb2YKPiAtCQkgKiBsaW5r IGxvc3MgdHJpZ2dlcnJpbmcgbG9uZyBwdWxzZSEhISEKPiAtCQkgKi8KPiAtCQlkcm1fbW9kZXNl dF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgsIE5VTEwpOwo+IC0JCWlu dGVsX2RwX2NoZWNrX2xpbmtfc3RhdHVzKGludGVsX2RwKTsKPiAtCQlkcm1fbW9kZXNldF91bmxv Y2soJmRldi0+bW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCk7Cj4gLQkJZ290byBvdXQ7Cj4g IAl9Cj4gIAo+ICsJLyogY29ubmVjdGVkLT5jb25uZWN0ZWQsIG5vdGhpbmcgdG8gZG8gKi8KPiAr CWlmIChjb25uZWN0b3ItPnN0YXR1cyA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkKPiAr CQlnb3RvIG91dDsKPiArCj4gIAkvKgo+ICAJICogQ2xlYXJpbmcgTkFDSyBhbmQgZGVmZXIgY291 bnRzIHRvIGdldCB0aGVpciBleGFjdCB2YWx1ZXMKPiAgCSAqIHdoaWxlIHJlYWRpbmcgRURJRCB3 aGljaCBhcmUgcmVxdWlyZWQgYnkgQ29tcGxpYW5jZSB0ZXN0cwo+IEBAIC00Mjk2LDcgKzQyODYs NiBAQCBpbnRlbF9kcF9sb25nX3B1bHNlKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nv bm5lY3RvcikKPiAgCWludGVsX2RwX3NldF9lZGlkKGludGVsX2RwKTsKPiAgCj4gIAlzdGF0dXMg PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKPiAtCWludGVsX2RwLT5kZXRlY3RfZG9uZSA9 IHRydWU7Cj4gIAo+ICAJLyogVHJ5IHRvIHJlYWQgdGhlIHNvdXJjZSBvZiB0aGUgaW50ZXJydXB0 ICovCj4gIAlpZiAoaW50ZWxfZHAtPmRwY2RbRFBfRFBDRF9SRVZdID49IDB4MTEgJiYKPiBAQCAt NDMxMyw0MyArNDMwMiwzMCBAQCBpbnRlbF9kcF9sb25nX3B1bHNlKHN0cnVjdCBpbnRlbF9jb25u ZWN0b3IgKmludGVsX2Nvbm5lY3RvcikKPiAgCX0KPiAgCj4gIG91dDoKPiAtCWlmICgoc3RhdHVz ICE9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKSAmJgo+IC0JICAgIChpbnRlbF9kcC0+aXNf bXN0ID09IGZhbHNlKSkKPiArCWlmIChzdGF0dXMgIT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0 ZWQpCj4gIAkJaW50ZWxfZHBfdW5zZXRfZWRpZChpbnRlbF9kcCk7Cj4gIAo+ICAJaW50ZWxfZGlz cGxheV9wb3dlcl9wdXQodG9faTkxNShkZXYpLCBwb3dlcl9kb21haW4pOwo+IC0JcmV0dXJuOwo+ ICsKPiArCXJldHVybiBzdGF0dXM7Cj4gIH0KPiAgCj4gIHN0YXRpYyBlbnVtIGRybV9jb25uZWN0 b3Jfc3RhdHVzCj4gIGludGVsX2RwX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yLCBib29sIGZvcmNlKQo+ICB7Cj4gIAlzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwID0gaW50 ZWxfYXR0YWNoZWRfZHAoY29ubmVjdG9yKTsKPiAtCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQg KmludGVsX2RpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwo+IC0Jc3RydWN0IGlu dGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIgPSAmaW50ZWxfZGlnX3BvcnQtPmJhc2U7Cj4gIAlz dHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3IgPSB0b19pbnRlbF9jb25uZWN0 b3IoY29ubmVjdG9yKTsKPiArCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzOwo+ICAK PiAgCURSTV9ERUJVR19LTVMoIltDT05ORUNUT1I6JWQ6JXNdXG4iLAo+ICAJCSAgICAgIGNvbm5l Y3Rvci0+YmFzZS5pZCwgY29ubmVjdG9yLT5uYW1lKTsKPiAgCj4gLQlpZiAoaW50ZWxfZHAtPmlz X21zdCkgewo+IC0JCS8qIE1TVCBkZXZpY2VzIGFyZSBkaXNjb25uZWN0ZWQgZnJvbSBhIG1vbml0 b3IgUE9WICovCj4gLQkJaW50ZWxfZHBfdW5zZXRfZWRpZChpbnRlbF9kcCk7Cj4gLQkJaWYgKGlu dGVsX2VuY29kZXItPnR5cGUgIT0gSU5URUxfT1VUUFVUX0VEUCkKPiAtCQkJaW50ZWxfZW5jb2Rl ci0+dHlwZSA9IElOVEVMX09VVFBVVF9EUDsKPiAtCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19k aXNjb25uZWN0ZWQ7Cj4gLQl9Cj4gLQo+IC0JLyogSWYgZnVsbCBkZXRlY3QgaXMgbm90IHBlcmZv cm1lZCB5ZXQsIGRvIGEgZnVsbCBkZXRlY3QgKi8KPiAtCWlmICghaW50ZWxfZHAtPmRldGVjdF9k b25lKQo+IC0JCWludGVsX2RwX2xvbmdfcHVsc2UoaW50ZWxfZHAtPmF0dGFjaGVkX2Nvbm5lY3Rv cik7Cj4gKwlzdGF0dXMgPSBpbnRlbF9kcF9sb25nX3B1bHNlKGludGVsX2Nvbm5lY3Rvcik7Cj4g IAo+IC0JaW50ZWxfZHAtPmRldGVjdF9kb25lID0gZmFsc2U7Cj4gKwlpZiAoc3RhdHVzID09IGNv bm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIHx8IGludGVsX2RwLT5pc19tc3QpCgpXaHlhIHJlIHdl IG5vdCBjaGVja2luZyBmb3IgKCFpbnRlbF9lbmNvZGVyLT5jcnRjLmJhc2UpIGJlZm9yZSByZXRy YWluaW5nPwpJIGhhZCBzZWVuIGlzc3VlcyB3aXRoIGNvbm5lY3RlZCBib290IGNhc2Ugd2hlbiBj b25uZWN0b3Igc3RhdHVzIGlzIGNvbm5lY3RlZCBhbmQgaWYgaXQKdHJpZXMgdG8gcmV0cmFpbiBp dCBmYWlscyB3aXRoIHJldHJpZXMgYmVjYXVzZSB0aGVyZSBpcyBubyBhY3RpdmUgcGlwZS4gSW4g dGhhdApjYXNlIGl0IHNob3VsZCBub3QgYXR0ZW1wdCB0byByZXRyYWluLgoKCj4gKwkJaW50ZWxf ZHBfbGlua19yZXRyYWluKGludGVsX2RwKTsKPiAgCj4gLQlpZiAoaXNfZWRwKGludGVsX2RwKSB8 fCBpbnRlbF9jb25uZWN0b3ItPmRldGVjdF9lZGlkKQo+IC0JCXJldHVybiBjb25uZWN0b3Jfc3Rh dHVzX2Nvbm5lY3RlZDsKPiAtCWVsc2UKPiAtCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNj b25uZWN0ZWQ7Cj4gKwlyZXR1cm4gc3RhdHVzOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZAo+IEBA IC00NzA2LDM5ICs0NjgyLDQxIEBAIGludGVsX2RwX2hwZF9wdWxzZShzdHJ1Y3QgaW50ZWxfZGln aXRhbF9wb3J0ICppbnRlbF9kaWdfcG9ydCwgYm9vbCBsb25nX2hwZCkKPiAgCQkgICAgICBwb3J0 X25hbWUoaW50ZWxfZGlnX3BvcnQtPnBvcnQpLAo+ICAJCSAgICAgIGxvbmdfaHBkID8gImxvbmci IDogInNob3J0Iik7Cj4gIAo+ICsJaWYgKGxvbmdfaHBkKQo+ICsJCXJldHVybiBJUlFfTk9ORTsK PiArCj4gIAlwb3dlcl9kb21haW4gPSBpbnRlbF9kaXNwbGF5X3BvcnRfYXV4X3Bvd2VyX2RvbWFp bihpbnRlbF9lbmNvZGVyKTsKPiAgCWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LCBw b3dlcl9kb21haW4pOwo+ICAKPiAtCWlmIChsb25nX2hwZCkgewo+IC0JCWludGVsX2RwX2xvbmdf cHVsc2UoaW50ZWxfZHAtPmF0dGFjaGVkX2Nvbm5lY3Rvcik7Cj4gLQkJaWYgKGludGVsX2RwLT5p c19tc3QpCj4gLQkJCXJldCA9IElSUV9IQU5ETEVEOwo+IC0JCWdvdG8gcHV0X3Bvd2VyOwo+IC0K PiAtCX0gZWxzZSB7Cj4gLQkJaWYgKGludGVsX2RwLT5pc19tc3QpIHsKPiAtCQkJaWYgKGludGVs X2RwX2NoZWNrX21zdF9zdGF0dXMoaW50ZWxfZHApID09IC1FSU5WQUwpIHsKPiAtCQkJCS8qCj4g LQkJCQkgKiBJZiB3ZSB3ZXJlIGluIE1TVCBtb2RlLCBhbmQgZGV2aWNlIGlzIG5vdAo+IC0JCQkJ ICogdGhlcmUsIGdldCBvdXQgb2YgTVNUIG1vZGUKPiAtCQkJCSAqLwo+IC0JCQkJRFJNX0RFQlVH X0tNUygiTVNUIGRldmljZSBtYXkgaGF2ZSBkaXNhcHBlYXJlZCAlZCB2cyAlZFxuIiwKPiAtCQkJ CQkgICAgICBpbnRlbF9kcC0+aXNfbXN0LCBpbnRlbF9kcC0+bXN0X21nci5tc3Rfc3RhdGUpOwo+ IC0JCQkJaW50ZWxfZHAtPmlzX21zdCA9IGZhbHNlOwo+IC0JCQkJZHJtX2RwX21zdF90b3BvbG9n eV9tZ3Jfc2V0X21zdCgmaW50ZWxfZHAtPm1zdF9tZ3IsCj4gLQkJCQkJCQkJaW50ZWxfZHAtPmlz X21zdCk7Cj4gLQkJCQlnb3RvIHB1dF9wb3dlcjsKPiAtCQkJfQo+IC0JCX0KPiAtCj4gLQkJaWYg KCFpbnRlbF9kcC0+aXNfbXN0KSB7Cj4gLQkJCWlmICghaW50ZWxfZHBfc2hvcnRfcHVsc2UoaW50 ZWxfZHApKSB7Cj4gLQkJCQlpbnRlbF9kcF9sb25nX3B1bHNlKGludGVsX2RwLT5hdHRhY2hlZF9j b25uZWN0b3IpOwo+IC0JCQkJZ290byBwdXRfcG93ZXI7Cj4gLQkJCX0KPiArCWlmIChpbnRlbF9k cC0+aXNfbXN0KSB7Cj4gKwkJaWYgKGludGVsX2RwX2NoZWNrX21zdF9zdGF0dXMoaW50ZWxfZHAp ID09IC1FSU5WQUwpIHsKPiArCQkJLyoKPiArCQkJICogSWYgd2Ugd2VyZSBpbiBNU1QgbW9kZSwg YW5kIGRldmljZSBpcyBub3QKPiArCQkJICogdGhlcmUsIGdldCBvdXQgb2YgTVNUIG1vZGUKPiAr CQkJICovCj4gKwkJCURSTV9ERUJVR19LTVMoIk1TVCBkZXZpY2UgbWF5IGhhdmUgZGlzYXBwZWFy ZWQgJWQgdnMgJWRcbiIsCj4gKwkJCQkgICAgICBpbnRlbF9kcC0+aXNfbXN0LCBpbnRlbF9kcC0+ bXN0X21nci5tc3Rfc3RhdGUpOwo+ICsJCQlpbnRlbF9kcC0+aXNfbXN0ID0gZmFsc2U7Cj4gKwkJ CWRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyX3NldF9tc3QoJmludGVsX2RwLT5tc3RfbWdyLAo+ICsJ CQkJCQkJaW50ZWxfZHAtPmlzX21zdCk7Cj4gKwkJCWdvdG8gcHV0X3Bvd2VyOwo+ICAJCX0KPiAr CX0gZWxzZSB7Cj4gKwkJaWYgKCFpbnRlbF9kcF9zaG9ydF9wdWxzZShpbnRlbF9kcCkpCj4gKwkJ CWdvdG8gcHV0X3Bvd2VyOwo+ICAJfQo+ICAKPiArCS8qCj4gKwkgKiBMaW5rIHJldHJhaW5pbmcg aGFwcGVucyBmcm9tIHRoZSBob3RwbHVnIHdvcmssCj4gKwkgKiBjaGVjayBpZiB3ZSBtaWdodCBu ZWVkIHRvIHNjaGR1bGUgaXQuCj4gKwkgKgo+ICsJICogVGhlcmUgaGFzIGJlZW4ga25vd24gaXNz dWVzIG9mIGxpbmsgbG9zcwo+ICsJICogdHJpZ2dlcnJpbmcgbG9uZyBwdWxzZSwgc28gbGV0J3Mg Y2hlY2sgYm90aAo+ICsJICogZm9yIHNob3J0IGFuZCBsb25nIHB1bHNlLgo+ICsJICovCj4gKwlp ZiAoaW50ZWxfZHBfbGlua19uZWVkc19yZXRyYWluKGludGVsX2RwKSkKPiArCQlnb3RvIHB1dF9w b3dlcjsKPiArCj4gIAlyZXQgPSBJUlFfSEFORExFRDsKPiAgCj4gIHB1dF9wb3dlcjoKPiAtLSAK PiAyLjcuNAo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK