From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 04/10] drm/i915: CHV DDR DVFS support and another watermark rewrite Date: Fri, 26 Jun 2015 22:48:12 +0300 Message-ID: <20150626194812.GD5176@intel.com> References: <1435172410-9834-1-git-send-email-ville.syrjala@linux.intel.com> <1435172410-9834-5-git-send-email-ville.syrjala@linux.intel.com> <558D9251.6000302@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id 6AD4C6E31D for ; Fri, 26 Jun 2015 12:48:25 -0700 (PDT) Content-Disposition: inline In-Reply-To: <558D9251.6000302@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Clint Taylor Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBKdW4gMjYsIDIwMTUgYXQgMTA6NTY6MzNBTSAtMDcwMCwgQ2xpbnQgVGF5bG9yIHdy b3RlOgo+IE9uIDA2LzI0LzIwMTUgMTI6MDAgUE0sIHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tIHdyb3RlOgo+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4 LmludGVsLmNvbT4KPiA+Cj4gPiBUdXJucyBvdXQgdGhlIFZMVi9DSFYgc3lzdGVtIGFnZW50IGRv ZXNuJ3QgdW5kZXJzdGFuZCBtZW1vcnkKPiA+IGxhdGVuY2llcywgc28gdHJ5aW5nIHRvIHJlbHkg b24gdGhlIFBORCBkZWFkbGluZSBtZWNoYW5pc20gaXMgbm90Cj4gPiBnb2luZyB0byBmbHkgZXNw ZWNpYWxseSB3aGVuIEREUiBEVkZTIGlzIGVuYWJsZWQuIEN1cnJlbnRseSB3ZSB0cnkgdG8KPiA+ IGF2b2lkIHRoZSBwcm9ibGVtcyBieSBseWluZyB0byB0aGUgc3lzdGVtIGFnZW50IGFib3V0IHRo ZSBkZWFkbGluZXMKPiA+IGFuZCBzZXR0aW5nIHRoZSBGSUZPIHdhdGVybWFya3MgdG8gOCBjYWNo ZWxpbmVzLiBUaGlzIGhvd2V2ZXIgbGVhZHMgdG8KPiA+IGJhZCBtZW1vcnkgc2VsZiByZWZyZXNo IHJlc2lkZW5jeS4KPiA+Cj4gPiBTbyBpbiBvcmRlciB0byBzYXRvc2Z5IGV2ZXJ5b25lIHdlJ2xs IGp1c3QgZ2l2ZSB1cCBvbiB0aGUgZGVhZGxpbmUKPiA+IHNjaGVtZSBhbmQgcHJvZ3JhbSB0aGUg d2F0ZXJtYXJrcyBvbGQgc2Nob29sIGJhc2VkIG9uIHRoZSB3b3JzdCBjYXNlCj4gPiBtZW1vcnkg bGF0ZW5jeS4KPiA+Cj4gPiBJJ3ZlIG1vZGVsbGVkIHRoaXMgYSBiaXQgb24gdGhlIElMSysgYXBw cm9hY2ggd2hlcmUgd2UgY29tcHV0ZSBtdWx0aXBsZQo+ID4gc2V0cyBvZiB3YXRlcm1hcmtzIGZv ciBlYWNoIHBpcGUgKFBNMixQTTUsRERSIERWRlMpIGFuZCB3aGVuIG1lcmdlIHRoZXQKPiA+IGFw cHJvcHJpYXRlIG9uZSBsYXRlciB3aXRoIHRoZSB3YXRlcm1hcmtzIGZyb20gb3RoZXIgcGlwZXMu IFRoZXJlIGlzbid0Cj4gPiB0b28gbXVjaCB0byBtZXJnZSBhY3R1YWxseSBzaW5jZSBlYWNoIHBp cGUgaGFzIGEgdG90YWxseSBpbmRlcGVuZGVudAo+ID4gRklGTyAod2VsbCBhcGFydCBmcm9tIHRo ZSBtZXNzIHdpdGggdGhlIHBhcnRpYWxseSBzaGFyZWQgRFNQQVJCCj4gPiByZWdpc3RlcnMpLCBi dXQgc3RpbGwgZGVjb3B1bGluZyB0aGUgcGlwZXMgZnJvbSBlYWNoIG90aGVyIHNlZW1zIGxpa2Ug YQo+ID4gZ29vZCBpZGVhLgo+ID4KPiA+IEV2ZW50dWFsbHkgd2UnbGwgd2FudCB0byBwZXJmb3Jt IHRoZSB3YXRlcm1hcmsgdXBkYXRlIGluIHR3byBwaGFzZXMKPiA+IGFyb3VuZCB0aGUgcGxhbmUg dXBkYXRlIHRvIGF2b2lkIHVuZGVycnVucyBkdWUgdG8gdGhlIHNpbmdsZSBidWZmZXJlZAo+ID4g d2F0ZXJtYXJrIHJlZ2lzdGVycy4gQnV0IHRoYXQncyBzdGlsbCBpbiBsaW1ibyBmb3IgSUxLKyB0 b28sIHNvIEkndmUgbm90Cj4gPiBnb25lIHRoYXQgZmFyIHlldCBmb3IgVkxWL0NIViBlaXRoZXIu Cj4gPgo+ID4gU2lnbmVkLW9mZi1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxp bnV4LmludGVsLmNvbT4KPiA+IC0tLQo+ID4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oICAgICAgfCAgMjggKy0tCj4gPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3Bs YXkuYyB8ICAgNiArLQo+ID4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAg fCAgMTEgKysKPiA+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyAgICAgIHwgMzE4 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4gPiAgIDQgZmlsZXMgY2hhbmdl ZCwgMzQ1IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQo+ID4KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaAo+ID4gaW5kZXggNTE0YWRjZi4uMzdjYzY1MyAxMDA2NDQKPiA+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKPiA+IEBAIC0yNzYsNiArMjc2LDEyIEBAIHN0cnVjdCBpOTE1X2hvdHBs dWcgewo+ID4gICAJCQkgICAgJmRldi0+bW9kZV9jb25maWcucGxhbmVfbGlzdCwJXAo+ID4gICAJ CQkgICAgYmFzZS5oZWFkKQo+ID4KPiA+ICsjZGVmaW5lIGZvcl9lYWNoX2ludGVsX3BsYW5lX29u X2NydGMoZGV2LCBpbnRlbF9jcnRjLCBpbnRlbF9wbGFuZSkJXAo+ID4gKwlsaXN0X2Zvcl9lYWNo X2VudHJ5KGludGVsX3BsYW5lLAkJCQlcCj4gPiArCQkJICAgICYoZGV2KS0+bW9kZV9jb25maWcu cGxhbmVfbGlzdCwJCVwKPiA+ICsJCQkgICAgYmFzZS5oZWFkKQkJCQkJXAo+ID4gKwkJaWYgKChp bnRlbF9wbGFuZSktPnBpcGUgPT0gKGludGVsX2NydGMpLT5waXBlKQo+ID4gKwo+ID4gICAjZGVm aW5lIGZvcl9lYWNoX2ludGVsX2NydGMoZGV2LCBpbnRlbF9jcnRjKSBcCj4gPiAgIAlsaXN0X2Zv cl9lYWNoX2VudHJ5KGludGVsX2NydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgYmFz ZS5oZWFkKQo+ID4KPiA+IEBAIC0xNDk4LDE4ICsxNTA0LDIwIEBAIHN0cnVjdCBpbGtfd21fdmFs dWVzIHsKPiA+ICAgCWVudW0gaW50ZWxfZGRiX3BhcnRpdGlvbmluZyBwYXJ0aXRpb25pbmc7Cj4g PiAgIH07Cj4gPgo+ID4gLXN0cnVjdCB2bHZfd21fdmFsdWVzIHsKPiA+IC0Jc3RydWN0IHsKPiA+ IC0JCXVpbnQxNl90IHByaW1hcnk7Cj4gPiAtCQl1aW50MTZfdCBzcHJpdGVbMl07Cj4gPiAtCQl1 aW50OF90IGN1cnNvcjsKPiA+IC0JfSBwaXBlWzNdOwo+ID4gK3N0cnVjdCB2bHZfcGlwZV93bSB7 Cj4gPiArCXVpbnQxNl90IHByaW1hcnk7Cj4gPiArCXVpbnQxNl90IHNwcml0ZVsyXTsKPiA+ICsJ dWludDhfdCBjdXJzb3I7Cj4gPiArfTsKPiA+Cj4gPiAtCXN0cnVjdCB7Cj4gPiAtCQl1aW50MTZf dCBwbGFuZTsKPiA+IC0JCXVpbnQ4X3QgY3Vyc29yOwo+ID4gLQl9IHNyOwo+ID4gK3N0cnVjdCB2 bHZfc3Jfd20gewo+ID4gKwl1aW50MTZfdCBwbGFuZTsKPiA+ICsJdWludDhfdCBjdXJzb3I7Cj4g PiArfTsKPiA+Cj4gPiArc3RydWN0IHZsdl93bV92YWx1ZXMgewo+ID4gKwlzdHJ1Y3Qgdmx2X3Bp cGVfd20gcGlwZVszXTsKPiA+ICsJc3RydWN0IHZsdl9zcl93bSBzcjsKPiA+ICAgCXN0cnVjdCB7 Cj4gPiAgIAkJdWludDhfdCBjdXJzb3I7Cj4gPiAgIAkJdWludDhfdCBzcHJpdGVbMl07Cj4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiBpbmRleCBiMTVkNTdmLi4xNDI0MzIw IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKPiA+IEBAIC00Njkw LDggKzQ2OTAsMTEgQEAgaW50ZWxfcHJlX2Rpc2FibGVfcHJpbWFyeShzdHJ1Y3QgZHJtX2NydGMg KmNydGMpCj4gPiAgIAkgKiBldmVudCB3aGljaCBpcyBhZnRlciB0aGUgdmJsYW5rIHN0YXJ0IGV2 ZW50LCBzbyB3ZSBuZWVkIHRvIGhhdmUgYQo+ID4gICAJICogd2FpdC1mb3ItdmJsYW5rIGJldHdl ZW4gZGlzYWJsaW5nIHRoZSBwbGFuZSBhbmQgdGhlIHBpcGUuCj4gPiAgIAkgKi8KPiA+IC0JaWYg KEhBU19HTUNIX0RJU1BMQVkoZGV2KSkKPiA+ICsJaWYgKEhBU19HTUNIX0RJU1BMQVkoZGV2KSkg ewo+ID4gICAJCWludGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwgZmFsc2UpOwo+ID4gKwkJ ZGV2X3ByaXYtPndtLnZsdi5jeHNyID0gZmFsc2U7Cj4gPiArCQlpbnRlbF93YWl0X2Zvcl92Ymxh bmsoZGV2LCBwaXBlKTsKPiA+ICsJfQo+ID4KPiA+ICAgCS8qCj4gPiAgIAkgKiBGSVhNRSBJUFMg c2hvdWxkIGJlIGZpbmUgYXMgbG9uZyBhcyBvbmUgcGxhbmUgaXMKPiA+IEBAIC02MDA1LDcgKzYw MDgsNiBAQCBzdGF0aWMgdm9pZCB2YWxsZXl2aWV3X2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKPiA+Cj4gPiAgIAlpbnRlbF9jcnRjX2xvYWRfbHV0KGNydGMpOwo+ID4KPiA+IC0J aW50ZWxfdXBkYXRlX3dhdGVybWFya3MoY3J0Yyk7Cj4gPiAgIAlpbnRlbF9lbmFibGVfcGlwZShp bnRlbF9jcnRjKTsKPiA+Cj4gPiAgIAlhc3NlcnRfdmJsYW5rX2Rpc2FibGVkKGNydGMpOwo+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+IGluZGV4IDM2NzNhNzEuLmYyNmE2ODAgMTAwNjQ0 Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiA+IEBAIC00NjIsNiArNDYyLDE1IEBAIHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlIHsKPiA+ICAgCWVudW0gcGlwZSBoc3dfd29ya2Fyb3VuZF9w aXBlOwo+ID4gICB9Owo+ID4KPiA+ICtzdHJ1Y3Qgdmx2X3dtX3N0YXRlIHsKPiA+ICsJc3RydWN0 IHZsdl9waXBlX3dtIHdtWzNdOwo+ID4gKwlzdHJ1Y3Qgdmx2X3NyX3dtIHNyWzNdOwo+ID4gKwl1 aW50OF90IG51bV9hY3RpdmVfcGxhbmVzOwo+ID4gKwl1aW50OF90IG51bV9sZXZlbHM7Cj4gPiAr CXVpbnQ4X3QgbGV2ZWw7Cj4gPiArCWJvb2wgY3hzcjsKPiA+ICt9Owo+ID4gKwo+ID4gICBzdHJ1 Y3QgaW50ZWxfcGlwZV93bSB7Cj4gPiAgIAlzdHJ1Y3QgaW50ZWxfd21fbGV2ZWwgd21bNV07Cj4g PiAgIAl1aW50MzJfdCBsaW5ldGltZTsKPiA+IEBAIC01NjQsNiArNTczLDggQEAgc3RydWN0IGlu dGVsX2NydGMgewo+ID4KPiA+ICAgCS8qIHNjYWxlcnMgYXZhaWxhYmxlIG9uIHRoaXMgY3J0YyAq Lwo+ID4gICAJaW50IG51bV9zY2FsZXJzOwo+ID4gKwo+ID4gKwlzdHJ1Y3Qgdmx2X3dtX3N0YXRl IHdtX3N0YXRlOwo+ID4gICB9Owo+ID4KPiA+ICAgc3RydWN0IGludGVsX3BsYW5lX3dtX3BhcmFt ZXRlcnMgewo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCj4gPiBpbmRleCBlNjc1NDhkLi5kMDQ2 ZTVmIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwo+ID4gQEAgLTMzNSw4ICszMzUs NiBAQCB2b2lkIGludGVsX3NldF9tZW1vcnlfY3hzcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsIGJvb2wgZW5hYmxlKQo+ID4gICAJaWYgKElTX1ZBTExFWVZJRVcoZGV2KSkgewo+ ID4gICAJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEZfVkxWLCBlbmFibGUgPyBGV19DU1BXUkRXTkVO IDogMCk7Cj4gPiAgIAkJUE9TVElOR19SRUFEKEZXX0JMQ19TRUxGX1ZMVik7Cj4gPiAtCQlpZiAo SVNfQ0hFUlJZVklFVyhkZXYpKQo+ID4gLQkJCWNodl9zZXRfbWVtb3J5X3BtNShkZXZfcHJpdiwg ZW5hYmxlKTsKPiA+ICAgCX0gZWxzZSBpZiAoSVNfRzRYKGRldikgfHwgSVNfQ1JFU1RMSU5FKGRl dikpIHsKPiA+ICAgCQlJOTE1X1dSSVRFKEZXX0JMQ19TRUxGLCBlbmFibGUgPyBGV19CTENfU0VM Rl9FTiA6IDApOwo+ID4gICAJCVBPU1RJTkdfUkVBRChGV19CTENfU0VMRik7Cj4gPiBAQCAtOTI5 LDggKzkyNyw2IEBAIHN0YXRpYyB2b2lkIHZsdl93cml0ZV93bV92YWx1ZXMoc3RydWN0IGludGVs X2NydGMgKmNydGMsCj4gPiAgIAl9Cj4gPgo+ID4gICAJUE9TVElOR19SRUFEKERTUEZXMSk7Cj4g PiAtCj4gPiAtCWRldl9wcml2LT53bS52bHYgPSAqd207Cj4gPiAgIH0KPiA+Cj4gPiAgICN1bmRl ZiBGV19XTV9WTFYKPiA+IEBAIC0xMDE0LDYgKzEwMTAsNzIgQEAgZW51bSB2bHZfd21fbGV2ZWwg ewo+ID4gICAJVkxWX1dNX05VTV9MRVZFTFMgPSAxLAo+ID4gICB9Owo+ID4KPiA+ICsvKiBsYXRl bmN5IG11c3QgYmUgaW4gMC4xdXMgdW5pdHMuICovCj4gPiArc3RhdGljIHVuc2lnbmVkIGludCB2 bHZfd21fbWV0aG9kMih1bnNpZ25lZCBpbnQgcGl4ZWxfcmF0ZSwKPiA+ICsJCQkJICAgdW5zaWdu ZWQgaW50IHBpcGVfaHRvdGFsLAo+ID4gKwkJCQkgICB1bnNpZ25lZCBpbnQgaG9yaXpfcGl4ZWxz LAo+ID4gKwkJCQkgICB1bnNpZ25lZCBpbnQgYnl0ZXNfcGVyX3BpeGVsLAo+ID4gKwkJCQkgICB1 bnNpZ25lZCBpbnQgbGF0ZW5jeSkKPiA+ICt7Cj4gPiArCXVuc2lnbmVkIGludCByZXQ7Cj4gPiAr Cj4gPiArCXJldCA9IChsYXRlbmN5ICogcGl4ZWxfcmF0ZSkgLyAocGlwZV9odG90YWwgKiAxMDAw MCk7Cj4gPiArCXJldCA9IChyZXQgKyAxKSAqIGhvcml6X3BpeGVscyAqIGJ5dGVzX3Blcl9waXhl bDsKPiA+ICsJcmV0ID0gRElWX1JPVU5EX1VQKHJldCwgNjQpOwo+ID4gKwo+ID4gKwlyZXR1cm4g cmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCB2bHZfc2V0dXBfd21fbGF0ZW5jeShz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiA+ICsKPiA+ICsJLyogYWxsIGxhdGVu Y2llcyBpbiB1c2VjICovCj4gPiArCWRldl9wcml2LT53bS5wcmlfbGF0ZW5jeVtWTFZfV01fTEVW RUxfUE0yXSA9IDM7Cj4gPiArCj4gPiArCWlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSkgewo+ ID4gKwkJZGV2X3ByaXYtPndtLnByaV9sYXRlbmN5W1ZMVl9XTV9MRVZFTF9QTTVdID0gMTI7Cj4g PiArCQlkZXZfcHJpdi0+d20ucHJpX2xhdGVuY3lbVkxWX1dNX0xFVkVMX0REUl9EVkZTXSA9IDMz Owo+IAo+IG5pdCAjZGVmaW5lcyBmb3IgdGhlc2UgbWFnaWMgdmFsdWVzIHBsZWFzZQoKV2hhdCdz IHRoZSBwb2ludCBvZiBkb2luZyB0aGF0PyBUaGVzZSB2YWx1ZXMgYXJlIG5vdCByZXBlYXRlZCBh bnl3aGVyZQplbHNlLgoKPiAKPiA+ICsJfQo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdWludDE2 X3Qgdmx2X2NvbXB1dGVfd21fbGV2ZWwoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiA+ICsJ CQkJICAgICBzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKPiA+ICsJCQkJICAgICBjb25zdCBzdHJ1 Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKnN0YXRlLAo+ID4gKwkJCQkgICAgIGludCBsZXZlbCkKPiA+ ICt7Cj4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUocGxh bmUtPmJhc2UuZGV2KTsKPiA+ICsJaW50IGNsb2NrLCBodG90YWwsIHBpeGVsX3NpemUsIHdpZHRo LCB3bTsKPiA+ICsKPiA+ICsJaWYgKGRldl9wcml2LT53bS5wcmlfbGF0ZW5jeVtsZXZlbF0gPT0g MCkKPiA+ICsJCXJldHVybiBVU0hSVF9NQVg7Cj4gPiArCj4gPiArCWlmICghc3RhdGUtPnZpc2li bGUpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJcGl4ZWxfc2l6ZSA9IGRybV9mb3JtYXRf cGxhbmVfY3BwKHN0YXRlLT5iYXNlLmZiLT5waXhlbF9mb3JtYXQsIDApOwo+ID4gKwljbG9jayA9 IGNydGMtPmNvbmZpZy0+YmFzZS5hZGp1c3RlZF9tb2RlLmNydGNfY2xvY2s7Cj4gPiArCWh0b3Rh bCA9IGNydGMtPmNvbmZpZy0+YmFzZS5hZGp1c3RlZF9tb2RlLmNydGNfaHRvdGFsOwo+ID4gKwl3 aWR0aCA9IGNydGMtPmNvbmZpZy0+cGlwZV9zcmNfdzsKPiA+ICsJaWYgKFdBUk5fT04oaHRvdGFs ID09IDApKQo+ID4gKwkJaHRvdGFsID0gMTsKPiA+ICsKPiA+ICsJaWYgKHBsYW5lLT5iYXNlLnR5 cGUgPT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKSB7Cj4gPiArCQkvKgo+ID4gKwkJICogRklYTUUg dGhlIGZvcm11bGEgZ2l2ZXMgdmFsdWVzIHRoYXQgYXJlCj4gPiArCQkgKiB0b28gYmlnIGZvciB0 aGUgY3Vyc29yIEZJRk8sIGFuZCBoZW5jZSB3ZQo+ID4gKwkJICogd291bGQgbmV2ZXIgYmUgYWJs ZSB0byB1c2UgY3Vyc29ycy4gRm9yCj4gPiArCQkgKiBub3cganVzdCBoYXJkY29kZSB0aGUgd2F0 ZXJtYXJrLgo+ID4gKwkJICovCj4gPiArCQl3bSA9IDYzOwo+IAo+IEhhcmQgY29kaW5nIHRvIG1h eGltdW0gdmFsdWUgb2YgNjMuIFNob3VsZCBwcm9iYWJseSBiZSBwcm9ncmFtbWVkIHRvIAo+IHdv cnN0IGNhc2UgaW5zdGVhZCBvZiBtYXhpbXVtLgoKSSBoYXZlIG5vIGlkZWEgd2hhdCdzIHRoZSB3 b3JzdCBjYXNlLiBJIHdhcyB0b28gbGF6eSB0byB0cnkgdG8KZW1waXJpY2FsbHkgZGVkdWNlIHNv bWUga2luZCBvZiBudW1iZXIvZm9ybXVsYSB0aGF0IHdvcmtzIGFsbCB0aGUgdGltZS4KU2luY2Ug aXQncyBhIHZlcnkgc21hbGwgcGxhbmUgdXN1YWxseSBoYXJkY29kaW5nIGl0IGxpa2UgdGhpcyBz aG91bGRuJ3QKaHVydCB0b28gbXVjaCAoSSBob3BlKS4gV2UgY2FuJ3QgZ28gYWJvdmUgNjMsIHNv IGlmIHRoYXQgZmFpbHMgd2UncmUKc2NyZXdlZCBhbnl3YXkuCgo+ID4gKwl9IGVsc2Ugewo+ID4g KwkJd20gPSB2bHZfd21fbWV0aG9kMihjbG9jaywgaHRvdGFsLCB3aWR0aCwgcGl4ZWxfc2l6ZSwK PiA+ICsJCQkJICAgIGRldl9wcml2LT53bS5wcmlfbGF0ZW5jeVtsZXZlbF0gKiAxMCk7Cj4gPiAr CX0KPiA+ICsKPiA+ICsJcmV0dXJuIG1pbl90KGludCwgd20sIFVTSFJUX01BWCk7Cj4gPiArfQo+ ID4gKwo+ID4gICBzdGF0aWMgYm9vbCB2bHZfY29tcHV0ZV9zcl93bShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAo+ID4gICAJCQkgICAgICBzdHJ1Y3Qgdmx2X3dtX3ZhbHVlcyAqd20pCj4gPiAgIHsK PiA+IEBAIC0xMTA1LDYgKzExNjcsMjQ5IEBAIHN0YXRpYyB2b2lkIHZhbGxleXZpZXdfdXBkYXRl X3dtKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+Cj4gPiAgIAlpZiAoY3hzcl9lbmFibGVkKQo+ ID4gICAJCWludGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwgdHJ1ZSk7Cj4gPiArCj4gPiAr CWRldl9wcml2LT53bS52bHYgPSB3bTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgdmx2 X2ludmVydF93bXMoc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4gPiArewo+ID4gKwlzdHJ1Y3Qg dmx2X3dtX3N0YXRlICp3bV9zdGF0ZSA9ICZjcnRjLT53bV9zdGF0ZTsKPiA+ICsJaW50IGxldmVs Owo+ID4gKwo+ID4gKwlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPCB3bV9zdGF0ZS0+bnVtX2xldmVs czsgbGV2ZWwrKykgewo+ID4gKwkJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJhc2Uu ZGV2Owo+ID4gKwkJY29uc3QgaW50IHNyX2ZpZm9fc2l6ZSA9IElOVEVMX0lORk8oZGV2KS0+bnVt X3BpcGVzICogNTEyIC0gMTsKPiA+ICsJCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7Cj4gPiAr Cj4gPiArCQl3bV9zdGF0ZS0+c3JbbGV2ZWxdLnBsYW5lID0gc3JfZmlmb19zaXplIC0gd21fc3Rh dGUtPnNyW2xldmVsXS5wbGFuZTsKPiA+ICsJCXdtX3N0YXRlLT5zcltsZXZlbF0uY3Vyc29yID0g NjMgLSB3bV9zdGF0ZS0+c3JbbGV2ZWxdLmN1cnNvcjsKPiA+ICsKPiA+ICsJCWZvcl9lYWNoX2lu dGVsX3BsYW5lX29uX2NydGMoZGV2LCBjcnRjLCBwbGFuZSkgewo+ID4gKwkJCXN3aXRjaCAocGxh bmUtPmJhc2UudHlwZSkgewo+ID4gKwkJCQlpbnQgc3ByaXRlOwo+ID4gKwkJCWNhc2UgRFJNX1BM QU5FX1RZUEVfQ1VSU09SOgo+ID4gKwkJCQl3bV9zdGF0ZS0+d21bbGV2ZWxdLmN1cnNvciA9IHBs YW5lLT53bS5maWZvX3NpemUgLQo+ID4gKwkJCQkJd21fc3RhdGUtPndtW2xldmVsXS5jdXJzb3I7 Cj4gPiArCQkJCWJyZWFrOwo+ID4gKwkJCWNhc2UgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWToKPiA+ ICsJCQkJd21fc3RhdGUtPndtW2xldmVsXS5wcmltYXJ5ID0gcGxhbmUtPndtLmZpZm9fc2l6ZSAt Cj4gPiArCQkJCQl3bV9zdGF0ZS0+d21bbGV2ZWxdLnByaW1hcnk7Cj4gPiArCQkJCWJyZWFrOwo+ ID4gKwkJCWNhc2UgRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWToKPiA+ICsJCQkJc3ByaXRlID0gcGxh bmUtPnBsYW5lOwo+ID4gKwkJCQl3bV9zdGF0ZS0+d21bbGV2ZWxdLnNwcml0ZVtzcHJpdGVdID0g cGxhbmUtPndtLmZpZm9fc2l6ZSAtCj4gPiArCQkJCQl3bV9zdGF0ZS0+d21bbGV2ZWxdLnNwcml0 ZVtzcHJpdGVdOwo+ID4gKwkJCQlicmVhazsKPiA+ICsJCQl9Cj4gPiArCQl9Cj4gPiArCX0KPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgX3Zsdl9jb21wdXRlX3dtKHN0cnVjdCBpbnRlbF9j cnRjICpjcnRjKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmJh c2UuZGV2Owo+ID4gKwlzdHJ1Y3Qgdmx2X3dtX3N0YXRlICp3bV9zdGF0ZSA9ICZjcnRjLT53bV9z dGF0ZTsKPiA+ICsJc3RydWN0IGludGVsX3BsYW5lICpwbGFuZTsKPiA+ICsJaW50IHNyX2ZpZm9f c2l6ZSA9IElOVEVMX0lORk8oZGV2KS0+bnVtX3BpcGVzICogNTEyIC0gMTsKPiA+ICsJaW50IGxl dmVsOwo+ID4gKwo+ID4gKwltZW1zZXQod21fc3RhdGUsIDAsIHNpemVvZigqd21fc3RhdGUpKTsK PiA+ICsKPiA+ICsJd21fc3RhdGUtPmN4c3IgPSBjcnRjLT5waXBlICE9IFBJUEVfQzsKPiA+ICsJ aWYgKElTX0NIRVJSWVZJRVcoZGV2KSkKPiA+ICsJCXdtX3N0YXRlLT5udW1fbGV2ZWxzID0gQ0hW X1dNX05VTV9MRVZFTFM7Cj4gPiArCWVsc2UKPiA+ICsJCXdtX3N0YXRlLT5udW1fbGV2ZWxzID0g VkxWX1dNX05VTV9MRVZFTFM7Cj4gPiArCj4gPiArCXdtX3N0YXRlLT5udW1fYWN0aXZlX3BsYW5l cyA9IDA7Cj4gPiArCWZvcl9lYWNoX2ludGVsX3BsYW5lX29uX2NydGMoZGV2LCBjcnRjLCBwbGFu ZSkgewo+ID4gKwkJc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICpzdGF0ZSA9Cj4gPiArCQkJdG9f aW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPmJhc2Uuc3RhdGUpOwo+ID4gKwo+ID4gKwkJaWYgKHBs YW5lLT5iYXNlLnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKQo+ID4gKwkJCWNvbnRpbnVl Owo+ID4gKwo+ID4gKwkJaWYgKHN0YXRlLT52aXNpYmxlKQo+ID4gKwkJCXdtX3N0YXRlLT5udW1f YWN0aXZlX3BsYW5lcysrOwo+ID4gKwl9Cj4gPiArCj4gPiArCWlmICh3bV9zdGF0ZS0+bnVtX2Fj dGl2ZV9wbGFuZXMgIT0gMSkKPiA+ICsJCXdtX3N0YXRlLT5jeHNyID0gZmFsc2U7Cj4gPiArCj4g PiArCWlmICh3bV9zdGF0ZS0+Y3hzcikgewo+ID4gKwkJZm9yIChsZXZlbCA9IDA7IGxldmVsIDwg d21fc3RhdGUtPm51bV9sZXZlbHM7IGxldmVsKyspIHsKPiA+ICsJCQl3bV9zdGF0ZS0+c3JbbGV2 ZWxdLnBsYW5lID0gc3JfZmlmb19zaXplOwo+ID4gKwkJCXdtX3N0YXRlLT5zcltsZXZlbF0uY3Vy c29yID0gNjM7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJZm9yX2VhY2hfaW50ZWxfcGxh bmVfb25fY3J0YyhkZXYsIGNydGMsIHBsYW5lKSB7Cj4gPiArCQlzdHJ1Y3QgaW50ZWxfcGxhbmVf c3RhdGUgKnN0YXRlID0KPiA+ICsJCQl0b19pbnRlbF9wbGFuZV9zdGF0ZShwbGFuZS0+YmFzZS5z dGF0ZSk7Cj4gPiArCj4gPiArCQlpZiAoIXN0YXRlLT52aXNpYmxlKQo+ID4gKwkJCWNvbnRpbnVl Owo+ID4gKwo+ID4gKwkJLyogbm9ybWFsIHdhdGVybWFya3MgKi8KPiA+ICsJCWZvciAobGV2ZWwg PSAwOyBsZXZlbCA8IHdtX3N0YXRlLT5udW1fbGV2ZWxzOyBsZXZlbCsrKSB7Cj4gPiArCQkJaW50 IHdtID0gdmx2X2NvbXB1dGVfd21fbGV2ZWwocGxhbmUsIGNydGMsIHN0YXRlLCBsZXZlbCk7Cj4g PiArCQkJaW50IG1heF93bSA9IHBsYW5lLT5iYXNlLnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfQ1VS U09SID8gNjMgOiA1MTE7Cj4gPiArCj4gPiArCQkJLyogaGFjayAqLwo+ID4gKwkJCWlmIChXQVJO X09OKGxldmVsID09IDAgJiYgd20gPiBtYXhfd20pKQo+ID4gKwkJCQl3bSA9IG1heF93bTsKPiA+ ICsKPiA+ICsJCQlpZiAod20gPiBwbGFuZS0+d20uZmlmb19zaXplKQo+ID4gKwkJCQlicmVhazsK PiA+ICsKPiA+ICsJCQlzd2l0Y2ggKHBsYW5lLT5iYXNlLnR5cGUpIHsKPiA+ICsJCQkJaW50IHNw cml0ZTsKPiA+ICsJCQljYXNlIERSTV9QTEFORV9UWVBFX0NVUlNPUjoKPiA+ICsJCQkJd21fc3Rh dGUtPndtW2xldmVsXS5jdXJzb3IgPSB3bTsKPiA+ICsJCQkJYnJlYWs7Cj4gPiArCQkJY2FzZSBE Uk1fUExBTkVfVFlQRV9QUklNQVJZOgo+ID4gKwkJCQl3bV9zdGF0ZS0+d21bbGV2ZWxdLnByaW1h cnkgPSB3bTsKPiA+ICsJCQkJYnJlYWs7Cj4gPiArCQkJY2FzZSBEUk1fUExBTkVfVFlQRV9PVkVS TEFZOgo+ID4gKwkJCQlzcHJpdGUgPSBwbGFuZS0+cGxhbmU7Cj4gPiArCQkJCXdtX3N0YXRlLT53 bVtsZXZlbF0uc3ByaXRlW3Nwcml0ZV0gPSB3bTsKPiA+ICsJCQkJYnJlYWs7Cj4gPiArCQkJfQo+ ID4gKwkJfQo+ID4gKwo+ID4gKwkJd21fc3RhdGUtPm51bV9sZXZlbHMgPSBsZXZlbDsKPiA+ICsK PiA+ICsJCWlmICghd21fc3RhdGUtPmN4c3IpCj4gPiArCQkJY29udGludWU7Cj4gPiArCj4gPiAr CQkvKiBtYXhmaWZvIHdhdGVybWFya3MgKi8KPiA+ICsJCXN3aXRjaCAocGxhbmUtPmJhc2UudHlw ZSkgewo+ID4gKwkJCWludCBzcHJpdGUsIGxldmVsOwo+ID4gKwkJY2FzZSBEUk1fUExBTkVfVFlQ RV9DVVJTT1I6Cj4gPiArCQkJZm9yIChsZXZlbCA9IDA7IGxldmVsIDwgd21fc3RhdGUtPm51bV9s ZXZlbHM7IGxldmVsKyspCj4gPiArCQkJCXdtX3N0YXRlLT5zcltsZXZlbF0uY3Vyc29yID0KPiA+ ICsJCQkJCXdtX3N0YXRlLT5zcltsZXZlbF0uY3Vyc29yOwo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJ Y2FzZSBEUk1fUExBTkVfVFlQRV9QUklNQVJZOgo+ID4gKwkJCWZvciAobGV2ZWwgPSAwOyBsZXZl bCA8IHdtX3N0YXRlLT5udW1fbGV2ZWxzOyBsZXZlbCsrKQo+ID4gKwkJCQl3bV9zdGF0ZS0+c3Jb bGV2ZWxdLnBsYW5lID0KPiA+ICsJCQkJCW1pbih3bV9zdGF0ZS0+c3JbbGV2ZWxdLnBsYW5lLAo+ ID4gKwkJCQkJICAgIHdtX3N0YXRlLT53bVtsZXZlbF0ucHJpbWFyeSk7Cj4gPiArCQkJYnJlYWs7 Cj4gPiArCQljYXNlIERSTV9QTEFORV9UWVBFX09WRVJMQVk6Cj4gPiArCQkJc3ByaXRlID0gcGxh bmUtPnBsYW5lOwo+ID4gKwkJCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IHdtX3N0YXRlLT5udW1f bGV2ZWxzOyBsZXZlbCsrKQo+ID4gKwkJCQl3bV9zdGF0ZS0+c3JbbGV2ZWxdLnBsYW5lID0KPiA+ ICsJCQkJCW1pbih3bV9zdGF0ZS0+c3JbbGV2ZWxdLnBsYW5lLAo+ID4gKwkJCQkJICAgIHdtX3N0 YXRlLT53bVtsZXZlbF0uc3ByaXRlW3Nwcml0ZV0pOwo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJfQo+ ID4gKwl9Cj4gPiArCj4gPiArCS8qIGNsZWFyIGFueSAocGFydGlhbGx5KSBmaWxsZWQgaW52YWxp ZCBsZXZlbHMgKi8KPiA+ICsJZm9yIChsZXZlbCA9IHdtX3N0YXRlLT5udW1fbGV2ZWxzOyBsZXZl bCA8IENIVl9XTV9OVU1fTEVWRUxTOyBsZXZlbCsrKSB7Cj4gPiArCQltZW1zZXQoJndtX3N0YXRl LT53bVtsZXZlbF0sIDAsIHNpemVvZih3bV9zdGF0ZS0+d21bbGV2ZWxdKSk7Cj4gPiArCQltZW1z ZXQoJndtX3N0YXRlLT5zcltsZXZlbF0sIDAsIHNpemVvZih3bV9zdGF0ZS0+c3JbbGV2ZWxdKSk7 Cj4gPiArCX0KPiA+ICsKPiA+ICsJdmx2X2ludmVydF93bXMoY3J0Yyk7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyB2b2lkIHZsdl9tZXJnZV93bShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4g KwkJCSBzdHJ1Y3Qgdmx2X3dtX3ZhbHVlcyAqd20pCj4gPiArewo+ID4gKwlzdHJ1Y3QgaW50ZWxf Y3J0YyAqY3J0YzsKPiA+ICsJaW50IG51bV9hY3RpdmVfY3J0Y3MgPSAwOwo+ID4gKwo+ID4gKwlp ZiAoSVNfQ0hFUlJZVklFVyhkZXYpKQo+ID4gKwkJd20tPmxldmVsID0gVkxWX1dNX0xFVkVMX0RE Ul9EVkZTOwo+ID4gKwllbHNlCj4gPiArCQl3bS0+bGV2ZWwgPSBWTFZfV01fTEVWRUxfUE0yOwo+ ID4gKwl3bS0+Y3hzciA9IHRydWU7Cj4gPiArCj4gPiArCWZvcl9lYWNoX2ludGVsX2NydGMoZGV2 LCBjcnRjKSB7Cj4gPiArCQljb25zdCBzdHJ1Y3Qgdmx2X3dtX3N0YXRlICp3bV9zdGF0ZSA9ICZj cnRjLT53bV9zdGF0ZTsKPiA+ICsKPiA+ICsJCWlmICghY3J0Yy0+YWN0aXZlKQo+ID4gKwkJCWNv bnRpbnVlOwo+ID4gKwo+ID4gKwkJaWYgKCF3bV9zdGF0ZS0+Y3hzcikKPiA+ICsJCQl3bS0+Y3hz ciA9IGZhbHNlOwo+ID4gKwo+ID4gKwkJbnVtX2FjdGl2ZV9jcnRjcysrOwo+ID4gKwkJd20tPmxl dmVsID0gbWluX3QoaW50LCB3bS0+bGV2ZWwsIHdtX3N0YXRlLT5udW1fbGV2ZWxzIC0gMSk7Cj4g PiArCX0KPiA+ICsKPiA+ICsJaWYgKG51bV9hY3RpdmVfY3J0Y3MgIT0gMSkKPiA+ICsJCXdtLT5j eHNyID0gZmFsc2U7Cj4gPiArCj4gPiArCWZvcl9lYWNoX2ludGVsX2NydGMoZGV2LCBjcnRjKSB7 Cj4gPiArCQlzdHJ1Y3Qgdmx2X3dtX3N0YXRlICp3bV9zdGF0ZSA9ICZjcnRjLT53bV9zdGF0ZTsK PiA+ICsJCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKPiA+ICsKPiA+ICsJCWlmICghY3J0 Yy0+YWN0aXZlKQo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwo+ID4gKwkJd20tPnBpcGVbcGlwZV0g PSB3bV9zdGF0ZS0+d21bd20tPmxldmVsXTsKPiA+ICsJCWlmICh3bS0+Y3hzcikKPiA+ICsJCQl3 bS0+c3IgPSB3bV9zdGF0ZS0+c3Jbd20tPmxldmVsXTsKPiA+ICsKPiA+ICsJCXdtLT5kZGxbcGlw ZV0ucHJpbWFyeSA9IERETF9QUkVDSVNJT05fSElHSCB8IDI7Cj4gPiArCQl3bS0+ZGRsW3BpcGVd LnNwcml0ZVswXSA9IERETF9QUkVDSVNJT05fSElHSCB8IDI7Cj4gPiArCQl3bS0+ZGRsW3BpcGVd LnNwcml0ZVsxXSA9IERETF9QUkVDSVNJT05fSElHSCB8IDI7Cj4gPiArCQl3bS0+ZGRsW3BpcGVd LmN1cnNvciA9IERETF9QUkVDSVNJT05fSElHSCB8IDI7Cj4gCj4gRGlkIHdlIHJlYWxseSBkZWNp ZGUgdGhhdCAweDIgd2FzIHRoZSBmaW5hbCBjb3JyZWN0IHZhbHVlIGZvciB0aGUgREwgCj4gcmVn aXN0ZXJzPyBJIGZpZ3VyZWQgd2Ugd291bGQgYmUgcnVubmluZyAweDcgZm9yIENIVi4KCkknbSB3 YXJ5IG9mIGluY3JlYXNpbmcgaXQgdG9vIG11Y2guIFRoYXQnbGwgZ2l2ZSB0aGUgc3lzdGVtIGFn ZW50IGEKYmV0dGVyIGNoYW5jZSBvZiBtYWtpbmcgYSBtZXNzIG9mIHRoaW5ncy4KCj4gCj4gPiAr CX0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgdmx2X3VwZGF0ZV93bShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ ZGV2Owo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOwo+ID4gKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2Ny dGMoY3J0Yyk7Cj4gPiArCWVudW0gcGlwZSBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKPiA+ICsJ c3RydWN0IHZsdl93bV92YWx1ZXMgd20gPSB7fTsKPiA+ICsKPiA+ICsJX3Zsdl9jb21wdXRlX3dt KGludGVsX2NydGMpOwo+ID4gKwl2bHZfbWVyZ2Vfd20oZGV2LCAmd20pOwo+ID4gKwo+ID4gKwlp ZiAobWVtY21wKCZkZXZfcHJpdi0+d20udmx2LCAmd20sIHNpemVvZih3bSkpID09IDApCj4gPiAr CQlyZXR1cm47Cj4gPiArCj4gPiArCWlmICh3bS5sZXZlbCA8IFZMVl9XTV9MRVZFTF9ERFJfRFZG UyAmJgo+ID4gKwkgICAgZGV2X3ByaXYtPndtLnZsdi5sZXZlbCA+PSBWTFZfV01fTEVWRUxfRERS X0RWRlMpCj4gPiArCQljaHZfc2V0X21lbW9yeV9kdmZzKGRldl9wcml2LCBmYWxzZSk7Cj4gPiAr Cj4gPiArCWlmICh3bS5sZXZlbCA8IFZMVl9XTV9MRVZFTF9QTTUgJiYKPiA+ICsJICAgIGRldl9w cml2LT53bS52bHYubGV2ZWwgPj0gVkxWX1dNX0xFVkVMX1BNNSkKPiA+ICsJCWNodl9zZXRfbWVt b3J5X3BtNShkZXZfcHJpdiwgZmFsc2UpOwo+ID4gKwo+ID4gKwlpZiAoIXdtLmN4c3IgJiYgZGV2 X3ByaXYtPndtLnZsdi5jeHNyKSB7Cj4gPiArCQlpbnRlbF9zZXRfbWVtb3J5X2N4c3IoZGV2X3By aXYsIGZhbHNlKTsKPiA+ICsJCWludGVsX3dhaXRfZm9yX3ZibGFuayhkZXYsIHBpcGUpOwo+ID4g Kwl9Cj4gPiArCj4gPiArCXZsdl93cml0ZV93bV92YWx1ZXMoaW50ZWxfY3J0YywgJndtKTsKPiA+ ICsKPiA+ICsJRFJNX0RFQlVHX0tNUygiU2V0dGluZyBGSUZPIHdhdGVybWFya3MgLSAlYzogcGxh bmU9JWQsIGN1cnNvcj0lZCwgIgo+ID4gKwkJICAgICAgInNwcml0ZTA9JWQsIHNwcml0ZTE9JWQs IFNSOiBwbGFuZT0lZCwgY3Vyc29yPSVkIGxldmVsPSVkIGN4c3I9JWRcbiIsCj4gPiArCQkgICAg ICBwaXBlX25hbWUocGlwZSksIHdtLnBpcGVbcGlwZV0ucHJpbWFyeSwgd20ucGlwZVtwaXBlXS5j dXJzb3IsCj4gPiArCQkgICAgICB3bS5waXBlW3BpcGVdLnNwcml0ZVswXSwgd20ucGlwZVtwaXBl XS5zcHJpdGVbMV0sCj4gPiArCQkgICAgICB3bS5zci5wbGFuZSwgd20uc3IuY3Vyc29yLCB3bS5s ZXZlbCwgd20uY3hzcik7Cj4gPiArCj4gCj4gTG92ZSB0aGUgZGV0YWlsZWQgRFJNX0RFQlVHX0tN UyAtIG9mIGNvdXJzZSBpdHMgc2hvd2luZyB0aGUgb25seSByZWFsIAo+IGlzc3VlIEkgaGF2ZSBm b3VuZCBpbiB0aGUgc2VyaWVzIHRoYXQgdGhlIGN1cnNvciB3YXRlcm1hcmsgaXMgYmVpbmcgCj4g cHJvZ3JhbW1lZCBpbnZlcnRlZC4gNjMgd2hlbiB0aGUgY3Vyc29yIGlzIGRpc2FibGVkIGFuZCAw IHdoZW4gaXRzIAo+IGVuYWJsZWQuIFRoaXMgbGVhZHMgdG8gYW4gU1JSJSBpbmNyZWFzZSBvZiB+ MTAlIHdoZW4gdGhlIGN1cnNvciBpcyAKPiBlbmFibGVkLgo+IAo+IC8vIEN1cnNvciBkaXNhYmxl ZAo+IFsgMjY2Mi4zNTUyMThdIFtkcm06dmx2X3VwZGF0ZV93bV0gU2V0dGluZyBGSUZPIHdhdGVy bWFya3MgLSBBOiAKPiBwbGFuZT0zNDAsIGN1cnNvcj02Mywgc3ByaXRlMD0wLCBzcHJpdGUxPTAs IFNSOiBwbGFuZT0xMzY0LCBjdXJzb3I9MCAKPiBsZXZlbD0yIGN4c3I9MQo+IAo+IC8vIEN1cnNv ciBFbmFibGVkCj4gWyAyNjY3LjUzMTA0OV0gW2RybTp2bHZfdXBkYXRlX3dtXSBTZXR0aW5nIEZJ Rk8gd2F0ZXJtYXJrcyAtIEE6IAo+IHBsYW5lPTM0MCwgY3Vyc29yPTAsIHNwcml0ZTA9MCwgc3By aXRlMT0wLCBTUjogcGxhbmU9MTM2NCwgY3Vyc29yPTAgCj4gbGV2ZWw9MiBjeHNyPTEKPiAKPiBJ IGhhdmVuJ3QgZm91bmQgdGhlIGxpbmUgb2YgY29kZSB0aGF0IGFjdHVhbGx5IGludmVydHMgdGhp cyBwcm9ncmFtbWluZy4gCj4gSSB3aWxsIGNvbnRpbnVlIHRvIGludmVzdGlnYXRlIGR1cmluZyB0 ZXN0aW5nIG9mIHRoaXMgc2VyaWVzLgoKdmx2X2ludmVydF93bXMoKQoKVGhhdCdzIGRvbmUgb24g cHVycG9zZSBzaW5jZSBjYWxjdWxhdGluZyB0aGUgd2F0ZXJtYXJrcyB0aGUgInJpZ2h0IHdheQp1 cCIgZmlyc3QgbWFrZXMgbWFrZXMgaXQgZWFzaWVyIHRvIHRoaW5rIGFib3V0IHRoZW0gKGllLiB0 byBjb21wYXJlIHdpdGgKdGhlIEZJRk8gc2l6ZSwgYW5kIHRvIG1lcmdlIHRoZSBwbGFuZSBTUiB3 YXRlcm1hcmspLiBJdCBhbHNvIG1ha2UgdGhpbmdzCmxvb2tzIG1vcmUgSUxLLWxpa2Ugc2luY2Ug SUxLKyB0YWtlIHRoZSB3YXRlcm1hcmtzIGluIHRoZSBub24taW52ZXJ0ZWQKZm9ybS4KCj4gCj4g Cj4gPiArCWlmICh3bS5jeHNyICYmICFkZXZfcHJpdi0+d20udmx2LmN4c3IpIHsKPiA+ICsJCWlu dGVsX3dhaXRfZm9yX3ZibGFuayhkZXYsIHBpcGUpOwo+ID4gKwkJaW50ZWxfc2V0X21lbW9yeV9j eHNyKGRldl9wcml2LCB0cnVlKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAod20ubGV2ZWwgPj0g VkxWX1dNX0xFVkVMX1BNNSAmJgo+ID4gKwkgICAgZGV2X3ByaXYtPndtLnZsdi5sZXZlbCA8IFZM Vl9XTV9MRVZFTF9QTTUpCj4gPiArCQljaHZfc2V0X21lbW9yeV9wbTUoZGV2X3ByaXYsIHRydWUp Owo+ID4gKwo+ID4gKwlpZiAod20ubGV2ZWwgPj0gVkxWX1dNX0xFVkVMX0REUl9EVkZTICYmCj4g PiArCSAgICBkZXZfcHJpdi0+d20udmx2LmxldmVsIDwgVkxWX1dNX0xFVkVMX0REUl9EVkZTKQo+ ID4gKwkJY2h2X3NldF9tZW1vcnlfZHZmcyhkZXZfcHJpdiwgdHJ1ZSk7Cj4gPiArCj4gPiArCWRl dl9wcml2LT53bS52bHYgPSB3bTsKPiA+ICAgfQo+ID4KPiA+ICAgc3RhdGljIHZvaWQgdmFsbGV5 dmlld191cGRhdGVfc3ByaXRlX3dtKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ID4gQEAgLTY4 MjMsOCArNzEyOCw5IEBAIHZvaWQgaW50ZWxfaW5pdF9wbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQo+ID4gICAJCWVsc2UgaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuID09IDgpCj4gPiAgIAkJCWRl dl9wcml2LT5kaXNwbGF5LmluaXRfY2xvY2tfZ2F0aW5nID0gYnJvYWR3ZWxsX2luaXRfY2xvY2tf Z2F0aW5nOwo+ID4gICAJfSBlbHNlIGlmIChJU19DSEVSUllWSUVXKGRldikpIHsKPiA+IC0JCWRl dl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IHZhbGxleXZpZXdfdXBkYXRlX3dtOwo+ID4gLQkJ ZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3Nwcml0ZV93bSA9IHZhbGxleXZpZXdfdXBkYXRlX3Nw cml0ZV93bTsKPiA+ICsJCXZsdl9zZXR1cF93bV9sYXRlbmN5KGRldik7Cj4gPiArCj4gPiArCQlk ZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSB2bHZfdXBkYXRlX3dtOwo+ID4gICAJCWRldl9w cml2LT5kaXNwbGF5LmluaXRfY2xvY2tfZ2F0aW5nID0KPiA+ICAgCQkJY2hlcnJ5dmlld19pbml0 X2Nsb2NrX2dhdGluZzsKPiA+ICAgCX0gZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXYpKSB7Cj4g PgoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbCBPVEMKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK