From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCHv6 5/5] drm/i915/dp: Enable Upfront link training for typeC DP support on BXT Date: Wed, 25 May 2016 18:35:19 +0300 Message-ID: <20160525153519.GK4329@intel.com> References: <1463734742-13088-1-git-send-email-durgadoss.r@intel.com> <1463734742-13088-6-git-send-email-durgadoss.r@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 612C96E991 for ; Wed, 25 May 2016 15:35:48 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1463734742-13088-6-git-send-email-durgadoss.r@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Durgadoss R Cc: ander.conselvan.de.oliveira@intel.com, intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBNYXkgMjAsIDIwMTYgYXQgMDI6Mjk6MDJQTSArMDUzMCwgRHVyZ2Fkb3NzIFIgd3Jv dGU6Cj4gVG8gc3VwcG9ydCBVU0IgdHlwZSBDIGFsdGVybmF0ZSBEUCBtb2RlLCB0aGUgZGlzcGxh eSBkcml2ZXIgbmVlZHMgdG8KPiBrbm93IHRoZSBudW1iZXIgb2YgbGFuZXMgcmVxdWlyZWQgYnkg dGhlIERQIHBhbmVsIGFzIHdlbGwgYXMgbnVtYmVyCj4gb2YgbGFuZXMgdGhhdCBjYW4gYmUgc3Vw cG9ydGVkIGJ5IHRoZSB0eXBlLUMgY2FibGUuIFNvbWV0aW1lcywgdGhlCj4gdHlwZS1DIGNhYmxl IG1heSBsaW1pdCB0aGUgYmFuZHdpZHRoIGV2ZW4gaWYgUGFuZWwgY2FuIHN1cHBvcnQKPiBtb3Jl IGxhbmVzLiBUbyBhZGRyZXNzIHRoZXNlIHNjZW5hcmlvcywgdGhlIGRpc3BsYXkgZHJpdmVyIHdp bGwKPiBzdGFydCBsaW5rIHRyYWluaW5nIHdpdGggbWF4IGxhbmVzLCBhbmQgaWYgdGhhdCBmYWls cywgdGhlIGRyaXZlcgo+IGZhbGxzIGJhY2sgdG8geDIgbGFuZXM7IGFuZCByZXBlYXRzIHRoaXMg cHJvY2VkdXJlIGZvciBhbGwKPiBiYW5kd2lkdGgvbGFuZSBjb25maWd1cmF0aW9ucy4KPiAKPiAq IFNpbmNlIGxpbmsgdHJhaW5pbmcgaXMgZG9uZSBiZWZvcmUgbW9kZXNldCBvbmx5IHRoZSBwb3J0 Cj4gICAoYW5kIG5vdCBwaXBlL3BsYW5lcykgYW5kIGl0cyBhc3NvY2lhdGVkIFBMTHMgYXJlIGVu YWJsZWQuCj4gKiBPbiBEUCBob3RwbHVnOiBEaXJlY3RseSBzdGFydCBsaW5rIHRyYWluaW5nIG9u IHRoZSBEUCBlbmNvZGVyLgo+ICogT24gQ29ubmVjdGVkIGJvb3Qgc2NlbmFyaW9zOiBXaGVuIGJv b3RlZCB3aXRoIGFuIExGUCBhbmQgYSBEUCwKPiAgIHNvbWV0aW1lcyBCSU9TIGJyaW5ncyB1cCBE UC4gSW4gdGhlc2UgY2FzZXMsIHdlIGRpc2FibGUgdGhlCj4gICBjcnRjIGFuZCB0aGVuIGRvIHVw ZnJvbnQgbGluayB0cmFpbmluZzsgYW5kIGJyaW5nIGl0IGJhY2sgdXAuCj4gKiBBbGwgbG9jYWwg Y2hhbmdlcyBtYWRlIGZvciB1cGZyb250IGxpbmsgdHJhaW5pbmcgYXJlIHJlc2V0Cj4gICB0byB0 aGVpciBwcmV2aW91cyB2YWx1ZXMgb25jZSBpdCBpcyBkb25lOyBzbyB0aGF0IHRoZQo+ICAgc3Vi c2VxdWVudCBtb2Rlc2V0IGlzIG5vdCBhd2FyZSBvZiB0aGVzZSBjaGFuZ2VzLgo+IAo+IENoYW5n ZXMgc2luY2UgdjU6Cj4gKiBNb3ZlZCByZXRyeSBsb2dpYyBpbiB1cGZyb250IHRvIGludGVsX2Rw LmMgc28gdGhhdCBpdAo+ICAgY2FuIGJlIHVzZWQgZm9yIGFsbCBwbGF0Zm9ybXMuCj4gQ2hhbmdl cyBzaW5jZSB2NDoKPiAqIFJlbW92ZWQgdXNhZ2Ugb2YgY3J0Y19zdGF0ZSBpbiB1cGZyb250IGxp bmsgdHJhaW5pbmc7Cj4gICBIZW5jZSBubyBuZWVkIHRvIGZpbmQgZnJlZSBjcnRjIHRvIGRvIHVw ZnJvbnQgbm93Lgo+ICogUmUtZW5hYmxlIGNydGMgaWYgaXQgd2FzIGRpc2FibGVkIGZvciB1cGZy b250Lgo+ICogVXNlIHNlcGFyYXRlIHZhcmlhYmxlcyB0byB0cmFjayBtYXggbGFuZSBjb3VudAo+ ICAgYW5kIGxpbmsgcmF0ZSBmb3VuZCBieSB1cGZyb250LCB3aXRob3V0IG1vZGlmeWluZwo+ICAg dGhlIG9yaWdpbmFsIERQQ0QgcmVhZCBmcm9tIHBhbmVsLgo+IENoYW5nZXMgc2luY2UgdjM6Cj4g KiBGaXhlZCBhIHJldHVybiB2YWx1ZSBvbiBCWFQgY2hlY2sKPiAqIFJld29ya2VkIG9uIHRvcCBv ZiBieHRfZGRpX3BsbF9zZWxlY3Qgc3BsaXQgZnJvbSBBbmRlcgo+ICogUmVuYW1lZCBmcm9tIGRk aV91cGZyb250IHRvIGJ4dF91cGZyb250IHNpbmNlIHRoZQo+ICAgdXBmcm9udCBsb2dpYyBpbmNs dWRlcyBCWFQgc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBub3cuCj4gQ2hhbmdlcyBzaW5jZSB2MjoK PiAqIFJlYmFzZWQgb24gdG9wIG9mIGxhdGVzdCBkcGxsX21nci5jIGNvZGUgYW5kCj4gICBsYXRl c3QgSFBEIHJlbGF0ZWQgY2xlYW4gdXBzLgo+ICogQ29ycmVjdGVkIHJldHVybiB2YWx1ZXMgZnJv bSB1cGZyb250IChBbmRlcikKPiAqIENvcnJlY3RlZCBhdG9taWMgbG9ja2luZyBmb3IgdXBmcm9u dCBpbiBpbnRlbF9kcC5jIChWaWxsZSkKPiBDaGFuZ2VzIHNpbmNlIHYxOgo+ICogIGFsbCBwbGwg cmVsYXRlZCBmdW5jdGlvbnMgaW5zaWRlIGRkaS5jCj4gCj4gU2lnbmVkLW9mZi1ieTogRHVyZ2Fk b3NzIFIgPGR1cmdhZG9zcy5yQGludGVsLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZGRpLmMgfCAgNDUgKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9kcC5jICB8IDE3OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggfCAgIDggKysKPiAgMyBmaWxlcyBj aGFuZ2VkLCAyMjYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kZGkuYwo+IGluZGV4IDdlNjMzMWEuLjhkMjI0YmYgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGRpLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kZGkuYwo+IEBAIC0yMzMwLDYgKzIzMzAsNTEgQEAgaW50ZWxfZGRpX2luaXRfaGRt aV9jb25uZWN0b3Ioc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQpCj4g IAlyZXR1cm4gY29ubmVjdG9yOwo+ICB9Cj4gIAo+ICtib29sIGludGVsX2J4dF91cGZyb250X2xp bmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiArCQkJCWludCBjbG9jaywgdWlu dDhfdCBsYW5lX2NvdW50KQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0 b3IgPSBpbnRlbF9kcC0+YXR0YWNoZWRfY29ubmVjdG9yOwo+ICsJc3RydWN0IGludGVsX2VuY29k ZXIgKmVuY29kZXIgPSBjb25uZWN0b3ItPmVuY29kZXI7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2UuZGV2KTsKPiArCXN0cnVjdCBp bnRlbF9zaGFyZWRfZHBsbCAqcGxsOwo+ICsJc3RydWN0IGludGVsX3NoYXJlZF9kcGxsX2NvbmZp ZyB0bXBfcGxsX2NvbmZpZzsKPiArCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmRpZ19wb3J0 ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwo+ICsJZW51bSBpbnRlbF9kcGxsX2lkIGRwbGxf aWQgPSAoZW51bSBpbnRlbF9kcGxsX2lkKWRpZ19wb3J0LT5wb3J0Owo+ICsKPiArCS8qCj4gKwkg KiBGSVhNRTogV29ya3Mgb25seSBmb3IgQlhULgo+ICsJICogU2VsZWN0IHRoZSByZXF1aXJlZCBQ TEwuIFRoaXMgd29ya3MgZm9yIHBsYXRmb3JtcyB3aGVyZQo+ICsJICogdGhlcmUgaXMgbm8gc2hh cmVkIERQTEwuCj4gKwkgKi8KPiArCXBsbCA9ICZkZXZfcHJpdi0+c2hhcmVkX2RwbGxzW2RwbGxf aWRdOwo+ICsJaWYgKFdBUk5fT04ocGxsLT5hY3RpdmVfbWFzaykpIHsKPiArCQlEUk1fRVJST1Io IlNoYXJlZCBEUExMIGFscmVhZHkgaW4gdXNlLiBhY3RpdmVfbWFzazoleFxuIiwgcGxsLT5hY3Rp dmVfbWFzayk7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCXRtcF9wbGxfY29uZmln ID0gcGxsLT5jb25maWc7Cj4gKwo+ICsJaWYgKCFieHRfZGRpX2RwX3NldF9kcGxsX2h3X3N0YXRl KGNsb2NrLCAmcGxsLT5jb25maWcuaHdfc3RhdGUpKSB7Cj4gKwkJRFJNX0VSUk9SKCJDb3VsZCBu b3Qgc2V0dXAgRFBMTFxuIik7Cj4gKwkJcGxsLT5jb25maWcgPSB0bXBfcGxsX2NvbmZpZzsKPiAr CQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJLyogRW5hYmxlIFBMTCBmb2xsb3dlZCBieSBw b3J0ICovCj4gKwlwbGwtPmZ1bmNzLmVuYWJsZShkZXZfcHJpdiwgcGxsKTsKPiArCWludGVsX2Rk aV9wcmVfZW5hYmxlX2RwKGVuY29kZXIsIGNsb2NrLCBsYW5lX2NvdW50LCBwbGwpOwo+ICsKPiAr CURSTV9ERUJVR19LTVMoIlVwZnJvbnQgbGluayB0cmFpbiAlczogbGlua19jbG9jazolZCBsYW5l czolZFxuIiwKPiArCWludGVsX2RwLT50cmFpbl9zZXRfdmFsaWQgPyAiUGFzc2VkIiA6ICJGYWls ZWQiLCBjbG9jaywgbGFuZV9jb3VudCk7Cj4gKwo+ICsJLyogRGlzYWJsZSBwb3J0IGZvbGxvd2Vk IGJ5IFBMTCBmb3IgbmV4dCByZXRyeS9jbGVhbiB1cCAqLwo+ICsJaW50ZWxfZGRpX3Bvc3RfZGlz YWJsZShlbmNvZGVyKTsKPiArCXBsbC0+ZnVuY3MuZGlzYWJsZShkZXZfcHJpdiwgcGxsKTsKPiAr Cj4gKwlwbGwtPmNvbmZpZyA9IHRtcF9wbGxfY29uZmlnOwo+ICsJcmV0dXJuIGludGVsX2RwLT50 cmFpbl9zZXRfdmFsaWQ7Cj4gK30KPiArCj4gIHZvaWQgaW50ZWxfZGRpX2luaXQoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgZW51bSBwb3J0IHBvcnQpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cC5jCj4gaW5kZXggOTViYTVhYS4uNmVjYWEzMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9kcC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAu Ywo+IEBAIC0xNDcsMTggKzE0NywyOCBAQCBpbnRlbF9kcF9tYXhfbGlua19idyhzdHJ1Y3QgaW50 ZWxfZHAgICppbnRlbF9kcCkKPiAgCQltYXhfbGlua19idyA9IERQX0xJTktfQldfMV82MjsKPiAg CQlicmVhazsKPiAgCX0KPiAtCXJldHVybiBtYXhfbGlua19idzsKPiArCS8qCj4gKwkgKiBMaW1p dCBtYXggbGluayBidyB3LnIudCB0byB0aGUgbWF4IHZhbHVlIGZvdW5kCj4gKwkgKiB1c2luZyBV cGZyb250IGxpbmsgdHJhaW5pbmcgYWxzby4KPiArCSAqLwo+ICsJcmV0dXJuIG1pbihtYXhfbGlu a19idywgaW50ZWxfZHAtPm1heF9saW5rX2J3X3VwZnJvbnQpOwoKVGhpcyBkb24ndCBmZWVsIGxp a2UgdGhlIHJpZ2h0IHBsYWNlIGZvciB0aGlzLiBJJ3ZlIHRyaWVkIHRvIG1vdmUKdXMgYXdheSBm cm9tIHRoZSBsaW5rX2J3IHVzYWdlIHRvIHVzaW5nIHByb3BlciByYXRlIG51bWJlcnMuCgpUaGlz IHNob3VsZCBwcm9iYWJseSBiZSBoYW5kbGVkIHNvbWV3aGVyZSBpbiBpbnRlbF9kcF9jb21tb25f cmF0ZXMoKQpvciBwZXJoYXBzIGp1c3QgaW4gaW50ZWxfZHBfbWF4X2xpbmtfcmF0ZSgpLgoKPiAg fQo+ICAKPiAgc3RhdGljIHU4IGludGVsX2RwX21heF9sYW5lX2NvdW50KHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHApCj4gIHsKPiAgCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2Rp Z19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwo+IC0JdTggc291cmNlX21heCwgc2lu a19tYXg7Cj4gKwl1OCB0ZW1wLCBzb3VyY2VfbWF4LCBzaW5rX21heDsKPiAgCj4gIAlzb3VyY2Vf bWF4ID0gaW50ZWxfZGlnX3BvcnQtPm1heF9sYW5lczsKPiAgCXNpbmtfbWF4ID0gZHJtX2RwX21h eF9sYW5lX2NvdW50KGludGVsX2RwLT5kcGNkKTsKPiAgCj4gLQlyZXR1cm4gbWluKHNvdXJjZV9t YXgsIHNpbmtfbWF4KTsKPiArCXRlbXAgPSBtaW4oc291cmNlX21heCwgc2lua19tYXgpOwo+ICsK PiArCS8qCj4gKwkgKiBMaW1pdCBtYXggbGFuZXMgdy5yLnQgdG8gdGhlIG1heCB2YWx1ZSBmb3Vu ZAo+ICsJICogdXNpbmcgVXBmcm9udCBsaW5rIHRyYWluaW5nIGFsc28uCj4gKwkgKi8KPiArCXJl dHVybiBtaW4odGVtcCwgaW50ZWxfZHAtPm1heF9sYW5lc191cGZyb250KTsKPiAgfQo+ICAKPiAg LyoKPiBAQCAtMTU5MCw2ICsxNjAwLDE1IEBAIHZvaWQgaW50ZWxfZHBfc2V0X2xpbmtfcGFyYW1z KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gIAlpbnRlbF9kcC0+bGFuZV9jb3VudCA9IGxh bmVfY291bnQ7Cj4gIH0KPiAgCj4gK3N0YXRpYyB2b2lkIGludGVsX2RwX2luaXRfdXBmcm9udF9w YXJhbXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiArewo+ICsJaWYgKFdBUk5fT04oaW50 ZWxfZHAtPnVwZnJvbnRfZG9uZSkpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWludGVsX2RwLT5tYXhf bGlua19id191cGZyb250ID0gaW50ZWxfZHAtPmRwY2RbRFBfTUFYX0xJTktfUkFURV07Cj4gKwlp bnRlbF9kcC0+bWF4X2xhbmVzX3VwZnJvbnQgPSBkcm1fZHBfbWF4X2xhbmVfY291bnQoaW50ZWxf ZHAtPmRwY2QpOwo+ICt9Cj4gKwo+ICBzdGF0aWMgdm9pZCBpbnRlbF9kcF9wcmVwYXJlKHN0cnVj dCBpbnRlbF9lbmNvZGVyICplbmNvZGVyKQo+ICB7Cj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gZW5jb2Rlci0+YmFzZS5kZXY7Cj4gQEAgLTM0MjQsNiArMzQ0MywxNiBAQCBpbnRlbF9kcF9n ZXRfZHBjZChzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICAJCWludGVsX2RwLT5udW1fc2lu a19yYXRlcyA9IGk7Cj4gIAl9Cj4gIAo+ICsJLyoKPiArCSAqIFRoZSBsaW5rX2J3IGFuZCBsYW5l IGNvdW50IHZhdWVzIGFyZSBpbml0aWFsaXplZCB0byBNQVggcG9zc2libGUKPiArCSAqIHZhbHVl IGZvciBhbGwgZW5jb2RlciB0eXBlcyBpLmUgRFAsIGVEUCwgRFAtTVNULCBzbyB0aGF0IHRoZQo+ ICsJICogaW50ZWxfZHBfbWF4X3tsaW5rX2J3L2xhbmVfY291bnR9IEFQSXMgZG8gbm90IGhhdmUg dG8gd29ycnkKPiArCSAqIGFib3V0IGVuY29kZXIgdHlwZXMuIFRoZXkgZnVydGhlciBjYXAgdGhl IG1heCB3LnIudCB0aGUgdXBmcm9udAo+ICsJICogdmFsdWVzIGFsc28uCj4gKwkgKi8KPiArCWlm ICghaW50ZWxfZHAtPnVwZnJvbnRfZG9uZSkKPiArCQlpbnRlbF9kcF9pbml0X3VwZnJvbnRfcGFy YW1zKGludGVsX2RwKTsKCldpdGggYWxsIHRoZSBtb2Rlc2V0IGxvY2tzIGludm9sdmVkIHRoZXJl LCBJIGhhdmUgYSBiYWQgZmVlbGluZyB0aGlzCmVuZHMgdXAgZ2V0dGluZyBjYWxsZWQgZnJvbSB0 aGUgaHBkIHB1bHNlIHdvcmsgYXQgdGhlIHdyb25nIHRpbWUKcGVyaGFwcyBsZWFkaW5nIHRvIGEg ZGVhZGxvY2suCgo+ICsKPiAgCWludGVsX2RwX3ByaW50X3JhdGVzKGludGVsX2RwKTsKPiAgCj4g IAlpZiAoIShpbnRlbF9kcC0+ZHBjZFtEUF9ET1dOU1RSRUFNUE9SVF9QUkVTRU5UXSAmCj4gQEAg LTQxNDAsNiArNDE2OSwxMzIgQEAgaW50ZWxfZHBfdW5zZXRfZWRpZChzdHJ1Y3QgaW50ZWxfZHAg KmludGVsX2RwKQo+ICAJaW50ZWxfZHAtPmhhc19hdWRpbyA9IGZhbHNlOwo+ICB9Cj4gIAo+ICtz dGF0aWMgaW50IGludGVsX2RwX3VwZnJvbnRfY3J0Y19kaXNhYmxlKHN0cnVjdCBpbnRlbF9jcnRj ICpjcnRjLAo+ICsJCQkJc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICpjdHgsCj4gKwkJ CQlib29sIGVuYWJsZSkKPiArewo+ICsJaW50IHJldDsKPiArCXN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZTsKPiArCXN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwo+ICsJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2UuZGV2Owo+ICsJZW51bSBwaXBlIHBp cGUgPSBjcnRjLT5waXBlOwo+ICsKPiArCXN0YXRlID0gZHJtX2F0b21pY19zdGF0ZV9hbGxvYyhk ZXYpOwo+ICsJaWYgKCFzdGF0ZSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlzdGF0ZS0+ YWNxdWlyZV9jdHggPSBjdHg7Cj4gKwo+ICsJY3J0Y19zdGF0ZSA9IGludGVsX2F0b21pY19nZXRf Y3J0Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7Cj4gKwlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKSB7Cj4g KwkJcmV0ID0gUFRSX0VSUihjcnRjX3N0YXRlKTsKPiArCQlkcm1fYXRvbWljX3N0YXRlX2ZyZWUo c3RhdGUpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJRFJNX0RFQlVHX0tNUygiJXNh YmxpbmcgY3J0YyAlYyAlcyB1cGZyb250IGxpbmsgdHJhaW5cbiIsCj4gKwkJCWVuYWJsZSA/ICJF biIgOiAiRGlzIiwKPiArCQkJcGlwZV9uYW1lKHBpcGUpLAo+ICsJCQllbmFibGUgPyAiYWZ0ZXIi IDogImJlZm9yZSIpOwo+ICsKPiArCWNydGNfc3RhdGUtPmJhc2UuYWN0aXZlID0gZW5hYmxlOwo+ ICsJcmV0ID0gZHJtX2F0b21pY19jb21taXQoc3RhdGUpOwo+ICsJaWYgKHJldCkKPiArCQlkcm1f YXRvbWljX3N0YXRlX2ZyZWUoc3RhdGUpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4g K3N0YXRpYyBib29sIF9faW50ZWxfZHBfdXBmcm9udF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHAsCj4gKwkJCQlpbnQgY2xvY2ssIHVpbnQ4X3QgbGFuZV9jb3VudCkKPiArewo+ ICsJc3RydWN0IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQgPSBkcF90b19kaWdf cG9ydChpbnRlbF9kcCk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQo+ ICsJCQkJdG9faTkxNShpbnRlbF9kaWdfcG9ydC0+YmFzZS5iYXNlLmRldik7Cj4gKwo+ICsJaWYg KElTX0JST1hUT04oZGV2X3ByaXYpKQo+ICsJCXJldHVybiBpbnRlbF9ieHRfdXBmcm9udF9saW5r X3RyYWluKGludGVsX2RwLCBjbG9jaywgbGFuZV9jb3VudCk7Cj4gKwkvKiBPdGhlciBwbGF0Zm9y bSBjYWxscyBnbyBoZXJlICovCj4gKwo+ICsJLyogUmV0dXJuIHRydWUgZm9yIHVuc3VwcG9ydGVk IHBsYXRmb3JtcyAqLwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArc3RhdGljIGJvb2wgaW50ZWxf ZHBfdXBmcm9udF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiAr CXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0gZHBfdG9fZGlnX3Bv cnQoaW50ZWxfZHApOwo+ICsJc3RydWN0IGludGVsX2VuY29kZXIgKmludGVsX2VuY29kZXIgPSAm aW50ZWxfZGlnX3BvcnQtPmJhc2U7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxf ZW5jb2Rlci0+YmFzZS5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYg PSB0b19pOTE1KGRldik7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2 LT5tb2RlX2NvbmZpZzsKPiArCXN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCBjdHg7Cj4g KwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YzsKPiArCXN0cnVjdCBkcm1fY3J0YyAqY3J0 YyA9IE5VTEw7Cj4gKwlpbnQgcmV0Owo+ICsJYm9vbCBkb25lID0gZmFsc2U7Cj4gKwl1aW50OF90 IGxhbmVfY291bnQsIG1heF9sYW5lcyA9IGludGVsX2RwLT5tYXhfbGFuZXNfdXBmcm9udDsKPiAr CWludCBjb21tb25fcmF0ZXNbRFBfTUFYX1NVUFBPUlRFRF9SQVRFU10gPSB7fTsKPiArCWludCBj bG9jaywgY29tbW9uX2xlbjsKPiArCj4gKwljb21tb25fbGVuID0gaW50ZWxfZHBfY29tbW9uX3Jh dGVzKGludGVsX2RwLCBjb21tb25fcmF0ZXMpOwo+ICsJaWYgKFdBUk5fT04oY29tbW9uX2xlbiA8 PSAwKSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoIUlTX0JST1hUT04oZGV2KSkKPiArCQly ZXR1cm4gMDsKPiArCj4gKwlkcm1fbW9kZXNldF9hY3F1aXJlX2luaXQoJmN0eCwgMCk7Cj4gK3Jl dHJ5Ogo+ICsJcmV0ID0gZHJtX21vZGVzZXRfbG9jaygmY29uZmlnLT5jb25uZWN0aW9uX211dGV4 LCAmY3R4KTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBleGl0X2ZhaWw7Cj4gKwo+ICsJaWYgKGlu dGVsX2VuY29kZXItPmJhc2UuY3J0Yykgewo+ICsJCWNydGMgPSBpbnRlbF9lbmNvZGVyLT5iYXNl LmNydGM7Cj4gKwo+ICsJCXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmNydGMtPm11dGV4LCAmY3R4 KTsKPiArCQlpZiAocmV0KQo+ICsJCQlnb3RvIGV4aXRfZmFpbDsKPiArCj4gKwkJcmV0ID0gZHJt X21vZGVzZXRfbG9jaygmY3J0Yy0+cHJpbWFyeS0+bXV0ZXgsICZjdHgpOwo+ICsJCWlmIChyZXQp Cj4gKwkJCWdvdG8gZXhpdF9mYWlsOwo+ICsKPiArCQlpbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0 YyhjcnRjKTsKPiArCQlyZXQgPSBpbnRlbF9kcF91cGZyb250X2NydGNfZGlzYWJsZShpbnRlbF9j cnRjLCAmY3R4LCBmYWxzZSk7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byBleGl0X2ZhaWw7CgpN YWdpY2FsbHkgZGlzYWJsaW5nIHN0dWZmIGRvZW5zJ3Qgc2VlbSByaWdodC4gT1RPSCBJIGRvbid0 IGhhdmUgYSBnb29kCmlkZWEgaG93IHdlJ2QgZG8gdGhpcyBpZiB0aGUgdXNlciB5YW5rcyB0aGUg Y2FibGUgYW5kIHBsdWdzIGl0IGJhY2sgaW4KYmVmb3JlIHVzZXJzcGFjZSBoYXMgaGFkIGEgY2hh bmNlIHRvIHNodXQgZG93biB0aGUgcGlwZShzKS4gUG9zdHBvbmUgdGhlCmRldGVjdGlvbiB1bnRp bCBpdCdzIGFsbCBjbGVhciwgb3Igc29tZXRoaW5nPyBBbnlvbmUgaGF2ZSBnb29kIGlkZWFzIGZv cgp0aGF0PwoKPiArCX0KPiArCj4gKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHBsbF9sb2NrKTsK PiArCj4gKwlmb3IgKGxhbmVfY291bnQgPSBtYXhfbGFuZXM7IGxhbmVfY291bnQgPj0gMSAmJiAh ZG9uZTsgbGFuZV9jb3VudCA+Pj0gMSkgewo+ICsJCWZvciAoY2xvY2sgPSBjb21tb25fbGVuIC0g MTsgY2xvY2sgPj0gMCAmJiAhZG9uZTsgY2xvY2stLSkgewo+ICsJCQlkb25lID0gX19pbnRlbF9k cF91cGZyb250X2xpbmtfdHJhaW4oaW50ZWxfZHAsCj4gKwkJCQkJY29tbW9uX3JhdGVzW2Nsb2Nr XSwgbGFuZV9jb3VudCk7Cj4gKwkJCWlmIChkb25lKSB7Cj4gKwkJCQlpbnRlbF9kcC0+bWF4X2xh bmVzX3VwZnJvbnQgPSBsYW5lX2NvdW50Owo+ICsJCQkJaW50ZWxfZHAtPm1heF9saW5rX2J3X3Vw ZnJvbnQgPQo+ICsJCQkJCWRybV9kcF9saW5rX3JhdGVfdG9fYndfY29kZShjb21tb25fcmF0ZXNb Y2xvY2tdKTsKPiArCQkJCWJyZWFrOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsKPiArCW11dGV4 X3VubG9jaygmZGV2X3ByaXYtPmRwbGxfbG9jayk7Cj4gKwo+ICsJaWYgKGNydGMpCj4gKwkJcmV0 ID0gaW50ZWxfZHBfdXBmcm9udF9jcnRjX2Rpc2FibGUoaW50ZWxfY3J0YywgJmN0eCwgdHJ1ZSk7 Cj4gKwo+ICtleGl0X2ZhaWw6Cj4gKwlpZiAocmV0ID09IC1FREVBRExLKSB7Cj4gKwkJZHJtX21v ZGVzZXRfYmFja29mZigmY3R4KTsKPiArCQlnb3RvIHJldHJ5Owo+ICsJfQo+ICsJZHJtX21vZGVz ZXRfZHJvcF9sb2NrcygmY3R4KTsKPiArCWRybV9tb2Rlc2V0X2FjcXVpcmVfZmluaSgmY3R4KTsK PiArCXJldHVybiBkb25lOwo+ICt9Cj4gKwo+ICBzdGF0aWMgdm9pZAo+ICBpbnRlbF9kcF9sb25n X3B1bHNlKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3RvcikKPiAgewo+IEBA IC00MTUwLDcgKzQzMDUsNyBAQCBpbnRlbF9kcF9sb25nX3B1bHNlKHN0cnVjdCBpbnRlbF9jb25u ZWN0b3IgKmludGVsX2Nvbm5lY3RvcikKPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25u ZWN0b3ItPmRldjsKPiAgCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzOwo+ICAJZW51 bSBpbnRlbF9kaXNwbGF5X3Bvd2VyX2RvbWFpbiBwb3dlcl9kb21haW47Cj4gLQlib29sIHJldDsK PiArCWJvb2wgcmV0LCBkb191cGZyb250X2xpbmtfdHJhaW47Cj4gIAl1OCBzaW5rX2lycV92ZWN0 b3I7Cj4gIAo+ICAJcG93ZXJfZG9tYWluID0gaW50ZWxfZGlzcGxheV9wb3J0X2F1eF9wb3dlcl9k b21haW4oaW50ZWxfZW5jb2Rlcik7Cj4gQEAgLTQyMzUsMTAgKzQzOTAsMjIgQEAgaW50ZWxfZHBf bG9uZ19wdWxzZShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0b3IpCj4gIAkJ CURSTV9ERUJVR19EUklWRVIoIkNQIG9yIHNpbmsgc3BlY2lmaWMgaXJxIHVuaGFuZGxlZFxuIik7 Cj4gIAl9Cj4gIAo+ICsJLyogRG8gbm90IGRvIHVwZnJvbnQgbGluayB0cmFpbiwgaWYgaXQgaXMg YSBjb21wbGlhbmNlIHJlcXVlc3QgKi8KPiArCWRvX3VwZnJvbnRfbGlua190cmFpbiA9ICFpbnRl bF9kcC0+dXBmcm9udF9kb25lICYmCj4gKwkJaW50ZWxfZW5jb2Rlci0+dHlwZSA9PSBJTlRFTF9P VVRQVVRfRElTUExBWVBPUlQgJiYKPiArCQlpbnRlbF9kcC0+Y29tcGxpYW5jZV90ZXN0X3R5cGUg IT0gRFBfVEVTVF9MSU5LX1RSQUlOSU5HOwo+ICsKPiArCWlmIChkb191cGZyb250X2xpbmtfdHJh aW4pIHsKPiArCQlpbnRlbF9kcC0+dXBmcm9udF9kb25lID0gaW50ZWxfZHBfdXBmcm9udF9saW5r X3RyYWluKGludGVsX2RwKTsKPiArCQlpZiAoIWludGVsX2RwLT51cGZyb250X2RvbmUpCj4gKwkJ CXN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+ICsJfQo+ICsKPiAgb3V0 Ogo+IC0JaWYgKChzdGF0dXMgIT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpICYmCj4gLQkg ICAgKGludGVsX2RwLT5pc19tc3QgPT0gZmFsc2UpKQo+ICsJaWYgKHN0YXR1cyAhPSBjb25uZWN0 b3Jfc3RhdHVzX2Nvbm5lY3RlZCAmJiAhaW50ZWxfZHAtPmlzX21zdCkgewo+ICAJCWludGVsX2Rw X3Vuc2V0X2VkaWQoaW50ZWxfZHApOwo+ICsJCWludGVsX2RwLT51cGZyb250X2RvbmUgPSBmYWxz ZTsKPiArCX0KPiAgCj4gIAlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dCh0b19pOTE1KGRldiksIHBv d2VyX2RvbWFpbik7Cj4gIAlyZXR1cm47Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBpbmRl eCBiY2Y1NzBmLi4wNjBlYTliIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2Rydi5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiBAQCAt ODMyLDYgKzgzMiwxMiBAQCBzdHJ1Y3QgaW50ZWxfZHAgewo+ICAJZW51bSBoZG1pX2ZvcmNlX2F1 ZGlvIGZvcmNlX2F1ZGlvOwo+ICAJYm9vbCBsaW1pdGVkX2NvbG9yX3JhbmdlOwo+ICAJYm9vbCBj b2xvcl9yYW5nZV9hdXRvOwo+ICsKPiArCS8qIFVwZnJvbnQgbGluayB0cmFpbiBwYXJhbWV0ZXJz ICovCj4gKwlpbnQgbWF4X2xpbmtfYndfdXBmcm9udDsKPiArCXVpbnQ4X3QgbWF4X2xhbmVzX3Vw ZnJvbnQ7Cj4gKwlib29sIHVwZnJvbnRfZG9uZTsKPiArCj4gIAl1aW50OF90IGRwY2RbRFBfUkVD RUlWRVJfQ0FQX1NJWkVdOwo+ICAJdWludDhfdCBwc3JfZHBjZFtFRFBfUFNSX1JFQ0VJVkVSX0NB UF9TSVpFXTsKPiAgCXVpbnQ4X3QgZG93bnN0cmVhbV9wb3J0c1tEUF9NQVhfRE9XTlNUUkVBTV9Q T1JUU107Cj4gQEAgLTExMTMsNiArMTExOSw4IEBAIHZvaWQgaW50ZWxfZGRpX2Nsb2NrX2dldChz dHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwKPiAgCQkJIHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpwaXBlX2NvbmZpZyk7Cj4gIHZvaWQgaW50ZWxfZGRpX3NldF92Y19wYXlsb2FkX2FsbG9j KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgYm9vbCBzdGF0ZSk7Cj4gIHVpbnQzMl90IGRkaV9zaWdu YWxfbGV2ZWxzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ICtib29sIGludGVsX2J4dF91 cGZyb250X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiArCQkJCWludCBj bG9jaywgdWludDhfdCBsYW5lX2NvdW50KTsKPiAgCj4gIC8qIGludGVsX2Zyb250YnVmZmVyLmMg Ki8KPiAgdm9pZCBpbnRlbF9mYl9vYmpfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLAo+IC0tIAo+IDEuOS4xCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4CgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsIE9UQwpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK