From mboxrd@z Thu Jan 1 00:00:00 1970 From: Clint Taylor Subject: Re: [PATCH 04/10] drm/i915: CHV DDR DVFS support and another watermark rewrite Date: Fri, 26 Jun 2015 13:21:44 -0700 Message-ID: <558DB458.10202@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> <20150626194812.GD5176@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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 1CC2E89235 for ; Fri, 26 Jun 2015 13:24:05 -0700 (PDT) In-Reply-To: <20150626194812.GD5176@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: =?windows-1252?Q?Ville_Syrj=E4l=E4?= Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMDYvMjYvMjAxNSAxMjo0OCBQTSwgVmlsbGUgU3lyasOkbMOkIHdyb3RlOgo+IE9uIEZyaSwg SnVuIDI2LCAyMDE1IGF0IDEwOjU2OjMzQU0gLTA3MDAsIENsaW50IFRheWxvciB3cm90ZToKPj4g T24gMDYvMjQvMjAxNSAxMjowMCBQTSwgdmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20gd3Jv dGU6Cj4+PiBGcm9tOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwu Y29tPgo+Pj4KPj4+IFR1cm5zIG91dCB0aGUgVkxWL0NIViBzeXN0ZW0gYWdlbnQgZG9lc24ndCB1 bmRlcnN0YW5kIG1lbW9yeQo+Pj4gbGF0ZW5jaWVzLCBzbyB0cnlpbmcgdG8gcmVseSBvbiB0aGUg UE5EIGRlYWRsaW5lIG1lY2hhbmlzbSBpcyBub3QKPj4+IGdvaW5nIHRvIGZseSBlc3BlY2lhbGx5 IHdoZW4gRERSIERWRlMgaXMgZW5hYmxlZC4gQ3VycmVudGx5IHdlIHRyeSB0bwo+Pj4gYXZvaWQg dGhlIHByb2JsZW1zIGJ5IGx5aW5nIHRvIHRoZSBzeXN0ZW0gYWdlbnQgYWJvdXQgdGhlIGRlYWRs aW5lcwo+Pj4gYW5kIHNldHRpbmcgdGhlIEZJRk8gd2F0ZXJtYXJrcyB0byA4IGNhY2hlbGluZXMu IFRoaXMgaG93ZXZlciBsZWFkcyB0bwo+Pj4gYmFkIG1lbW9yeSBzZWxmIHJlZnJlc2ggcmVzaWRl bmN5Lgo+Pj4KPj4+IFNvIGluIG9yZGVyIHRvIHNhdG9zZnkgZXZlcnlvbmUgd2UnbGwganVzdCBn aXZlIHVwIG9uIHRoZSBkZWFkbGluZQo+Pj4gc2NoZW1lIGFuZCBwcm9ncmFtIHRoZSB3YXRlcm1h cmtzIG9sZCBzY2hvb2wgYmFzZWQgb24gdGhlIHdvcnN0IGNhc2UKPj4+IG1lbW9yeSBsYXRlbmN5 Lgo+Pj4KPj4+IEkndmUgbW9kZWxsZWQgdGhpcyBhIGJpdCBvbiB0aGUgSUxLKyBhcHByb2FjaCB3 aGVyZSB3ZSBjb21wdXRlIG11bHRpcGxlCj4+PiBzZXRzIG9mIHdhdGVybWFya3MgZm9yIGVhY2gg cGlwZSAoUE0yLFBNNSxERFIgRFZGUykgYW5kIHdoZW4gbWVyZ2UgdGhldAo+Pj4gYXBwcm9wcmlh dGUgb25lIGxhdGVyIHdpdGggdGhlIHdhdGVybWFya3MgZnJvbSBvdGhlciBwaXBlcy4gVGhlcmUg aXNuJ3QKPj4+IHRvbyBtdWNoIHRvIG1lcmdlIGFjdHVhbGx5IHNpbmNlIGVhY2ggcGlwZSBoYXMg YSB0b3RhbGx5IGluZGVwZW5kZW50Cj4+PiBGSUZPICh3ZWxsIGFwYXJ0IGZyb20gdGhlIG1lc3Mg d2l0aCB0aGUgcGFydGlhbGx5IHNoYXJlZCBEU1BBUkIKPj4+IHJlZ2lzdGVycyksIGJ1dCBzdGls bCBkZWNvcHVsaW5nIHRoZSBwaXBlcyBmcm9tIGVhY2ggb3RoZXIgc2VlbXMgbGlrZSBhCj4+PiBn b29kIGlkZWEuCj4+Pgo+Pj4gRXZlbnR1YWxseSB3ZSdsbCB3YW50IHRvIHBlcmZvcm0gdGhlIHdh dGVybWFyayB1cGRhdGUgaW4gdHdvIHBoYXNlcwo+Pj4gYXJvdW5kIHRoZSBwbGFuZSB1cGRhdGUg dG8gYXZvaWQgdW5kZXJydW5zIGR1ZSB0byB0aGUgc2luZ2xlIGJ1ZmZlcmVkCj4+PiB3YXRlcm1h cmsgcmVnaXN0ZXJzLiBCdXQgdGhhdCdzIHN0aWxsIGluIGxpbWJvIGZvciBJTEsrIHRvbywgc28g SSd2ZSBub3QKPj4+IGdvbmUgdGhhdCBmYXIgeWV0IGZvciBWTFYvQ0hWIGVpdGhlci4KPj4+Cj4+ PiBTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50 ZWwuY29tPgo+Pj4gLS0tCj4+PiAgICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAg ICAgfCAgMjggKy0tCj4+PiAgICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMg fCAgIDYgKy0KPj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oICAgICB8ICAx MSArKwo+Pj4gICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyAgICAgIHwgMzE4ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4+PiAgICA0IGZpbGVzIGNoYW5nZWQs IDM0NSBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmgKPj4+IGluZGV4IDUxNGFkY2YuLjM3Y2M2NTMgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oCj4+PiBAQCAtMjc2LDYgKzI3NiwxMiBAQCBzdHJ1Y3QgaTkxNV9ob3RwbHVn IHsKPj4+ICAgIAkJCSAgICAmZGV2LT5tb2RlX2NvbmZpZy5wbGFuZV9saXN0LAlcCj4+PiAgICAJ CQkgICAgYmFzZS5oZWFkKQo+Pj4KPj4+ICsjZGVmaW5lIGZvcl9lYWNoX2ludGVsX3BsYW5lX29u X2NydGMoZGV2LCBpbnRlbF9jcnRjLCBpbnRlbF9wbGFuZSkJXAo+Pj4gKwlsaXN0X2Zvcl9lYWNo X2VudHJ5KGludGVsX3BsYW5lLAkJCQlcCj4+PiArCQkJICAgICYoZGV2KS0+bW9kZV9jb25maWcu cGxhbmVfbGlzdCwJCVwKPj4+ICsJCQkgICAgYmFzZS5oZWFkKQkJCQkJXAo+Pj4gKwkJaWYgKChp bnRlbF9wbGFuZSktPnBpcGUgPT0gKGludGVsX2NydGMpLT5waXBlKQo+Pj4gKwo+Pj4gICAgI2Rl ZmluZSBmb3JfZWFjaF9pbnRlbF9jcnRjKGRldiwgaW50ZWxfY3J0YykgXAo+Pj4gICAgCWxpc3Rf Zm9yX2VhY2hfZW50cnkoaW50ZWxfY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LCBi YXNlLmhlYWQpCj4+Pgo+Pj4gQEAgLTE0OTgsMTggKzE1MDQsMjAgQEAgc3RydWN0IGlsa193bV92 YWx1ZXMgewo+Pj4gICAgCWVudW0gaW50ZWxfZGRiX3BhcnRpdGlvbmluZyBwYXJ0aXRpb25pbmc7 Cj4+PiAgICB9Owo+Pj4KPj4+IC1zdHJ1Y3Qgdmx2X3dtX3ZhbHVlcyB7Cj4+PiAtCXN0cnVjdCB7 Cj4+PiAtCQl1aW50MTZfdCBwcmltYXJ5Owo+Pj4gLQkJdWludDE2X3Qgc3ByaXRlWzJdOwo+Pj4g LQkJdWludDhfdCBjdXJzb3I7Cj4+PiAtCX0gcGlwZVszXTsKPj4+ICtzdHJ1Y3Qgdmx2X3BpcGVf d20gewo+Pj4gKwl1aW50MTZfdCBwcmltYXJ5Owo+Pj4gKwl1aW50MTZfdCBzcHJpdGVbMl07Cj4+ PiArCXVpbnQ4X3QgY3Vyc29yOwo+Pj4gK307Cj4+Pgo+Pj4gLQlzdHJ1Y3Qgewo+Pj4gLQkJdWlu dDE2X3QgcGxhbmU7Cj4+PiAtCQl1aW50OF90IGN1cnNvcjsKPj4+IC0JfSBzcjsKPj4+ICtzdHJ1 Y3Qgdmx2X3NyX3dtIHsKPj4+ICsJdWludDE2X3QgcGxhbmU7Cj4+PiArCXVpbnQ4X3QgY3Vyc29y Owo+Pj4gK307Cj4+Pgo+Pj4gK3N0cnVjdCB2bHZfd21fdmFsdWVzIHsKPj4+ICsJc3RydWN0IHZs dl9waXBlX3dtIHBpcGVbM107Cj4+PiArCXN0cnVjdCB2bHZfc3Jfd20gc3I7Cj4+PiAgICAJc3Ry dWN0IHsKPj4+ICAgIAkJdWludDhfdCBjdXJzb3I7Cj4+PiAgICAJCXVpbnQ4X3Qgc3ByaXRlWzJd Owo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+Pj4gaW5kZXggYjE1ZDU3Zi4u MTQyNDMyMCAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3Bs YXkuYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4+PiBA QCAtNDY5MCw4ICs0NjkwLDExIEBAIGludGVsX3ByZV9kaXNhYmxlX3ByaW1hcnkoc3RydWN0IGRy bV9jcnRjICpjcnRjKQo+Pj4gICAgCSAqIGV2ZW50IHdoaWNoIGlzIGFmdGVyIHRoZSB2Ymxhbmsg c3RhcnQgZXZlbnQsIHNvIHdlIG5lZWQgdG8gaGF2ZSBhCj4+PiAgICAJICogd2FpdC1mb3ItdmJs YW5rIGJldHdlZW4gZGlzYWJsaW5nIHRoZSBwbGFuZSBhbmQgdGhlIHBpcGUuCj4+PiAgICAJICov Cj4+PiAtCWlmIChIQVNfR01DSF9ESVNQTEFZKGRldikpCj4+PiArCWlmIChIQVNfR01DSF9ESVNQ TEFZKGRldikpIHsKPj4+ICAgIAkJaW50ZWxfc2V0X21lbW9yeV9jeHNyKGRldl9wcml2LCBmYWxz ZSk7Cj4+PiArCQlkZXZfcHJpdi0+d20udmx2LmN4c3IgPSBmYWxzZTsKPj4+ICsJCWludGVsX3dh aXRfZm9yX3ZibGFuayhkZXYsIHBpcGUpOwo+Pj4gKwl9Cj4+Pgo+Pj4gICAgCS8qCj4+PiAgICAJ ICogRklYTUUgSVBTIHNob3VsZCBiZSBmaW5lIGFzIGxvbmcgYXMgb25lIHBsYW5lIGlzCj4+PiBA QCAtNjAwNSw3ICs2MDA4LDYgQEAgc3RhdGljIHZvaWQgdmFsbGV5dmlld19jcnRjX2VuYWJsZShz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCj4+Pgo+Pj4gICAgCWludGVsX2NydGNfbG9hZF9sdXQoY3J0 Yyk7Cj4+Pgo+Pj4gLQlpbnRlbF91cGRhdGVfd2F0ZXJtYXJrcyhjcnRjKTsKPj4+ICAgIAlpbnRl bF9lbmFibGVfcGlwZShpbnRlbF9jcnRjKTsKPj4+Cj4+PiAgICAJYXNzZXJ0X3ZibGFua19kaXNh YmxlZChjcnRjKTsKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4+PiBpbmRleCAzNjczYTcx Li5mMjZhNjgwIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2 LmgKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4+PiBAQCAtNDYy LDYgKzQ2MiwxNSBAQCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSB7Cj4+PiAgICAJZW51bSBwaXBl IGhzd193b3JrYXJvdW5kX3BpcGU7Cj4+PiAgICB9Owo+Pj4KPj4+ICtzdHJ1Y3Qgdmx2X3dtX3N0 YXRlIHsKPj4+ICsJc3RydWN0IHZsdl9waXBlX3dtIHdtWzNdOwo+Pj4gKwlzdHJ1Y3Qgdmx2X3Ny X3dtIHNyWzNdOwo+Pj4gKwl1aW50OF90IG51bV9hY3RpdmVfcGxhbmVzOwo+Pj4gKwl1aW50OF90 IG51bV9sZXZlbHM7Cj4+PiArCXVpbnQ4X3QgbGV2ZWw7Cj4+PiArCWJvb2wgY3hzcjsKPj4+ICt9 Owo+Pj4gKwo+Pj4gICAgc3RydWN0IGludGVsX3BpcGVfd20gewo+Pj4gICAgCXN0cnVjdCBpbnRl bF93bV9sZXZlbCB3bVs1XTsKPj4+ICAgIAl1aW50MzJfdCBsaW5ldGltZTsKPj4+IEBAIC01NjQs NiArNTczLDggQEAgc3RydWN0IGludGVsX2NydGMgewo+Pj4KPj4+ICAgIAkvKiBzY2FsZXJzIGF2 YWlsYWJsZSBvbiB0aGlzIGNydGMgKi8KPj4+ICAgIAlpbnQgbnVtX3NjYWxlcnM7Cj4+PiArCj4+ PiArCXN0cnVjdCB2bHZfd21fc3RhdGUgd21fc3RhdGU7Cj4+PiAgICB9Owo+Pj4KPj4+ICAgIHN0 cnVjdCBpbnRlbF9wbGFuZV93bV9wYXJhbWV0ZXJzIHsKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0u Ywo+Pj4gaW5kZXggZTY3NTQ4ZC4uZDA0NmU1ZiAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3BtLmMKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BtLmMKPj4+IEBAIC0zMzUsOCArMzM1LDYgQEAgdm9pZCBpbnRlbF9zZXRfbWVtb3J5X2N4c3Io c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBib29sIGVuYWJsZSkKPj4+ICAgIAlp ZiAoSVNfVkFMTEVZVklFVyhkZXYpKSB7Cj4+PiAgICAJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEZf VkxWLCBlbmFibGUgPyBGV19DU1BXUkRXTkVOIDogMCk7Cj4+PiAgICAJCVBPU1RJTkdfUkVBRChG V19CTENfU0VMRl9WTFYpOwo+Pj4gLQkJaWYgKElTX0NIRVJSWVZJRVcoZGV2KSkKPj4+IC0JCQlj aHZfc2V0X21lbW9yeV9wbTUoZGV2X3ByaXYsIGVuYWJsZSk7Cj4+PiAgICAJfSBlbHNlIGlmIChJ U19HNFgoZGV2KSB8fCBJU19DUkVTVExJTkUoZGV2KSkgewo+Pj4gICAgCQlJOTE1X1dSSVRFKEZX X0JMQ19TRUxGLCBlbmFibGUgPyBGV19CTENfU0VMRl9FTiA6IDApOwo+Pj4gICAgCQlQT1NUSU5H X1JFQUQoRldfQkxDX1NFTEYpOwo+Pj4gQEAgLTkyOSw4ICs5MjcsNiBAQCBzdGF0aWMgdm9pZCB2 bHZfd3JpdGVfd21fdmFsdWVzKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAo+Pj4gICAgCX0KPj4+ Cj4+PiAgICAJUE9TVElOR19SRUFEKERTUEZXMSk7Cj4+PiAtCj4+PiAtCWRldl9wcml2LT53bS52 bHYgPSAqd207Cj4+PiAgICB9Cj4+Pgo+Pj4gICAgI3VuZGVmIEZXX1dNX1ZMVgo+Pj4gQEAgLTEw MTQsNiArMTAxMCw3MiBAQCBlbnVtIHZsdl93bV9sZXZlbCB7Cj4+PiAgICAJVkxWX1dNX05VTV9M RVZFTFMgPSAxLAo+Pj4gICAgfTsKPj4+Cj4+PiArLyogbGF0ZW5jeSBtdXN0IGJlIGluIDAuMXVz IHVuaXRzLiAqLwo+Pj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmx2X3dtX21ldGhvZDIodW5zaWdu ZWQgaW50IHBpeGVsX3JhdGUsCj4+PiArCQkJCSAgIHVuc2lnbmVkIGludCBwaXBlX2h0b3RhbCwK Pj4+ICsJCQkJICAgdW5zaWduZWQgaW50IGhvcml6X3BpeGVscywKPj4+ICsJCQkJICAgdW5zaWdu ZWQgaW50IGJ5dGVzX3Blcl9waXhlbCwKPj4+ICsJCQkJICAgdW5zaWduZWQgaW50IGxhdGVuY3kp Cj4+PiArewo+Pj4gKwl1bnNpZ25lZCBpbnQgcmV0Owo+Pj4gKwo+Pj4gKwlyZXQgPSAobGF0ZW5j eSAqIHBpeGVsX3JhdGUpIC8gKHBpcGVfaHRvdGFsICogMTAwMDApOwo+Pj4gKwlyZXQgPSAocmV0 ICsgMSkgKiBob3Jpel9waXhlbHMgKiBieXRlc19wZXJfcGl4ZWw7Cj4+PiArCXJldCA9IERJVl9S T1VORF9VUChyZXQsIDY0KTsKPj4+ICsKPj4+ICsJcmV0dXJuIHJldDsKPj4+ICt9Cj4+PiArCj4+ PiArc3RhdGljIHZvaWQgdmx2X3NldHVwX3dtX2xhdGVuY3koc3RydWN0IGRybV9kZXZpY2UgKmRl dikKPj4+ICt7Cj4+PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7Cj4+PiArCj4+PiArCS8qIGFsbCBsYXRlbmNpZXMgaW4gdXNlYyAqLwo+Pj4g KwlkZXZfcHJpdi0+d20ucHJpX2xhdGVuY3lbVkxWX1dNX0xFVkVMX1BNMl0gPSAzOwo+Pj4gKwo+ Pj4gKwlpZiAoSVNfQ0hFUlJZVklFVyhkZXZfcHJpdikpIHsKPj4+ICsJCWRldl9wcml2LT53bS5w cmlfbGF0ZW5jeVtWTFZfV01fTEVWRUxfUE01XSA9IDEyOwo+Pj4gKwkJZGV2X3ByaXYtPndtLnBy aV9sYXRlbmN5W1ZMVl9XTV9MRVZFTF9ERFJfRFZGU10gPSAzMzsKPj4KPj4gbml0ICNkZWZpbmVz IGZvciB0aGVzZSBtYWdpYyB2YWx1ZXMgcGxlYXNlCj4KPiBXaGF0J3MgdGhlIHBvaW50IG9mIGRv aW5nIHRoYXQ/IFRoZXNlIHZhbHVlcyBhcmUgbm90IHJlcGVhdGVkIGFueXdoZXJlCj4gZWxzZS4K Pgo+Pgo+Pj4gKwl9Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB1aW50MTZfdCB2bHZfY29tcHV0 ZV93bV9sZXZlbChzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+Pj4gKwkJCQkgICAgIHN0cnVj dCBpbnRlbF9jcnRjICpjcnRjLAo+Pj4gKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqc3RhdGUsCj4+PiArCQkJCSAgICAgaW50IGxldmVsKQo+Pj4gK3sKPj4+ICsJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShwbGFuZS0+YmFzZS5kZXYp Owo+Pj4gKwlpbnQgY2xvY2ssIGh0b3RhbCwgcGl4ZWxfc2l6ZSwgd2lkdGgsIHdtOwo+Pj4gKwo+ Pj4gKwlpZiAoZGV2X3ByaXYtPndtLnByaV9sYXRlbmN5W2xldmVsXSA9PSAwKQo+Pj4gKwkJcmV0 dXJuIFVTSFJUX01BWDsKPj4+ICsKPj4+ICsJaWYgKCFzdGF0ZS0+dmlzaWJsZSkKPj4+ICsJCXJl dHVybiAwOwo+Pj4gKwo+Pj4gKwlwaXhlbF9zaXplID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoc3Rh dGUtPmJhc2UuZmItPnBpeGVsX2Zvcm1hdCwgMCk7Cj4+PiArCWNsb2NrID0gY3J0Yy0+Y29uZmln LT5iYXNlLmFkanVzdGVkX21vZGUuY3J0Y19jbG9jazsKPj4+ICsJaHRvdGFsID0gY3J0Yy0+Y29u ZmlnLT5iYXNlLmFkanVzdGVkX21vZGUuY3J0Y19odG90YWw7Cj4+PiArCXdpZHRoID0gY3J0Yy0+ Y29uZmlnLT5waXBlX3NyY193Owo+Pj4gKwlpZiAoV0FSTl9PTihodG90YWwgPT0gMCkpCj4+PiAr CQlodG90YWwgPSAxOwo+Pj4gKwo+Pj4gKwlpZiAocGxhbmUtPmJhc2UudHlwZSA9PSBEUk1fUExB TkVfVFlQRV9DVVJTT1IpIHsKPj4+ICsJCS8qCj4+PiArCQkgKiBGSVhNRSB0aGUgZm9ybXVsYSBn aXZlcyB2YWx1ZXMgdGhhdCBhcmUKPj4+ICsJCSAqIHRvbyBiaWcgZm9yIHRoZSBjdXJzb3IgRklG TywgYW5kIGhlbmNlIHdlCj4+PiArCQkgKiB3b3VsZCBuZXZlciBiZSBhYmxlIHRvIHVzZSBjdXJz b3JzLiBGb3IKPj4+ICsJCSAqIG5vdyBqdXN0IGhhcmRjb2RlIHRoZSB3YXRlcm1hcmsuCj4+PiAr CQkgKi8KPj4+ICsJCXdtID0gNjM7Cj4+Cj4+IEhhcmQgY29kaW5nIHRvIG1heGltdW0gdmFsdWUg b2YgNjMuIFNob3VsZCBwcm9iYWJseSBiZSBwcm9ncmFtbWVkIHRvCj4+IHdvcnN0IGNhc2UgaW5z dGVhZCBvZiBtYXhpbXVtLgo+Cj4gSSBoYXZlIG5vIGlkZWEgd2hhdCdzIHRoZSB3b3JzdCBjYXNl LiBJIHdhcyB0b28gbGF6eSB0byB0cnkgdG8KPiBlbXBpcmljYWxseSBkZWR1Y2Ugc29tZSBraW5k IG9mIG51bWJlci9mb3JtdWxhIHRoYXQgd29ya3MgYWxsIHRoZSB0aW1lLgo+IFNpbmNlIGl0J3Mg YSB2ZXJ5IHNtYWxsIHBsYW5lIHVzdWFsbHkgaGFyZGNvZGluZyBpdCBsaWtlIHRoaXMgc2hvdWxk bid0Cj4gaHVydCB0b28gbXVjaCAoSSBob3BlKS4gV2UgY2FuJ3QgZ28gYWJvdmUgNjMsIHNvIGlm IHRoYXQgZmFpbHMgd2UncmUKPiBzY3Jld2VkIGFueXdheS4KPgoKNjMgZ2V0cyBpbnZlcnRlZCB0 byAwIGFuZCB3ZSBhcmUgc2NyZXdlZCBpZiB0aGF0IGRvZXNuJ3Qgd29yay4KCj4+PiArCX0gZWxz ZSB7Cj4+PiArCQl3bSA9IHZsdl93bV9tZXRob2QyKGNsb2NrLCBodG90YWwsIHdpZHRoLCBwaXhl bF9zaXplLAo+Pj4gKwkJCQkgICAgZGV2X3ByaXYtPndtLnByaV9sYXRlbmN5W2xldmVsXSAqIDEw KTsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlyZXR1cm4gbWluX3QoaW50LCB3bSwgVVNIUlRfTUFYKTsK Pj4+ICt9Cj4+PiArCj4+PiAgICBzdGF0aWMgYm9vbCB2bHZfY29tcHV0ZV9zcl93bShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAo+Pj4gICAgCQkJICAgICAgc3RydWN0IHZsdl93bV92YWx1ZXMgKndt KQo+Pj4gICAgewo+Pj4gQEAgLTExMDUsNiArMTE2NywyNDkgQEAgc3RhdGljIHZvaWQgdmFsbGV5 dmlld191cGRhdGVfd20oc3RydWN0IGRybV9jcnRjICpjcnRjKQo+Pj4KPj4+ICAgIAlpZiAoY3hz cl9lbmFibGVkKQo+Pj4gICAgCQlpbnRlbF9zZXRfbWVtb3J5X2N4c3IoZGV2X3ByaXYsIHRydWUp Owo+Pj4gKwo+Pj4gKwlkZXZfcHJpdi0+d20udmx2ID0gd207Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0 YXRpYyB2b2lkIHZsdl9pbnZlcnRfd21zKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjKQo+Pj4gK3sK Pj4+ICsJc3RydWN0IHZsdl93bV9zdGF0ZSAqd21fc3RhdGUgPSAmY3J0Yy0+d21fc3RhdGU7Cj4+ PiArCWludCBsZXZlbDsKPj4+ICsKPj4+ICsJZm9yIChsZXZlbCA9IDA7IGxldmVsIDwgd21fc3Rh dGUtPm51bV9sZXZlbHM7IGxldmVsKyspIHsKPj4+ICsJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBjcnRjLT5iYXNlLmRldjsKPj4+ICsJCWNvbnN0IGludCBzcl9maWZvX3NpemUgPSBJTlRFTF9J TkZPKGRldiktPm51bV9waXBlcyAqIDUxMiAtIDE7Cj4+PiArCQlzdHJ1Y3QgaW50ZWxfcGxhbmUg KnBsYW5lOwo+Pj4gKwo+Pj4gKwkJd21fc3RhdGUtPnNyW2xldmVsXS5wbGFuZSA9IHNyX2ZpZm9f c2l6ZSAtIHdtX3N0YXRlLT5zcltsZXZlbF0ucGxhbmU7Cj4+PiArCQl3bV9zdGF0ZS0+c3JbbGV2 ZWxdLmN1cnNvciA9IDYzIC0gd21fc3RhdGUtPnNyW2xldmVsXS5jdXJzb3I7Cj4+PiArCj4+PiAr CQlmb3JfZWFjaF9pbnRlbF9wbGFuZV9vbl9jcnRjKGRldiwgY3J0YywgcGxhbmUpIHsKPj4+ICsJ CQlzd2l0Y2ggKHBsYW5lLT5iYXNlLnR5cGUpIHsKPj4+ICsJCQkJaW50IHNwcml0ZTsKPj4+ICsJ CQljYXNlIERSTV9QTEFORV9UWVBFX0NVUlNPUjoKPj4+ICsJCQkJd21fc3RhdGUtPndtW2xldmVs XS5jdXJzb3IgPSBwbGFuZS0+d20uZmlmb19zaXplIC0KPj4+ICsJCQkJCXdtX3N0YXRlLT53bVts ZXZlbF0uY3Vyc29yOwo+Pj4gKwkJCQlicmVhazsKPj4+ICsJCQljYXNlIERSTV9QTEFORV9UWVBF X1BSSU1BUlk6Cj4+PiArCQkJCXdtX3N0YXRlLT53bVtsZXZlbF0ucHJpbWFyeSA9IHBsYW5lLT53 bS5maWZvX3NpemUgLQo+Pj4gKwkJCQkJd21fc3RhdGUtPndtW2xldmVsXS5wcmltYXJ5Owo+Pj4g KwkJCQlicmVhazsKPj4+ICsJCQljYXNlIERSTV9QTEFORV9UWVBFX09WRVJMQVk6Cj4+PiArCQkJ CXNwcml0ZSA9IHBsYW5lLT5wbGFuZTsKPj4+ICsJCQkJd21fc3RhdGUtPndtW2xldmVsXS5zcHJp dGVbc3ByaXRlXSA9IHBsYW5lLT53bS5maWZvX3NpemUgLQo+Pj4gKwkJCQkJd21fc3RhdGUtPndt W2xldmVsXS5zcHJpdGVbc3ByaXRlXTsKPj4+ICsJCQkJYnJlYWs7Cj4+PiArCQkJfQo+Pj4gKwkJ fQo+Pj4gKwl9Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIF92bHZfY29tcHV0ZV93bShz dHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YykKPj4+ICt7Cj4+PiArCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjcnRjLT5iYXNlLmRldjsKPj4+ICsJc3RydWN0IHZsdl93bV9zdGF0ZSAqd21fc3RhdGUg PSAmY3J0Yy0+d21fc3RhdGU7Cj4+PiArCXN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmU7Cj4+PiAr CWludCBzcl9maWZvX3NpemUgPSBJTlRFTF9JTkZPKGRldiktPm51bV9waXBlcyAqIDUxMiAtIDE7 Cj4+PiArCWludCBsZXZlbDsKPj4+ICsKPj4+ICsJbWVtc2V0KHdtX3N0YXRlLCAwLCBzaXplb2Yo KndtX3N0YXRlKSk7Cj4+PiArCj4+PiArCXdtX3N0YXRlLT5jeHNyID0gY3J0Yy0+cGlwZSAhPSBQ SVBFX0M7Cj4+PiArCWlmIChJU19DSEVSUllWSUVXKGRldikpCj4+PiArCQl3bV9zdGF0ZS0+bnVt X2xldmVscyA9IENIVl9XTV9OVU1fTEVWRUxTOwo+Pj4gKwllbHNlCj4+PiArCQl3bV9zdGF0ZS0+ bnVtX2xldmVscyA9IFZMVl9XTV9OVU1fTEVWRUxTOwo+Pj4gKwo+Pj4gKwl3bV9zdGF0ZS0+bnVt X2FjdGl2ZV9wbGFuZXMgPSAwOwo+Pj4gKwlmb3JfZWFjaF9pbnRlbF9wbGFuZV9vbl9jcnRjKGRl diwgY3J0YywgcGxhbmUpIHsKPj4+ICsJCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqc3RhdGUg PQo+Pj4gKwkJCXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lLT5iYXNlLnN0YXRlKTsKPj4+ICsK Pj4+ICsJCWlmIChwbGFuZS0+YmFzZS50eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikKPj4+ ICsJCQljb250aW51ZTsKPj4+ICsKPj4+ICsJCWlmIChzdGF0ZS0+dmlzaWJsZSkKPj4+ICsJCQl3 bV9zdGF0ZS0+bnVtX2FjdGl2ZV9wbGFuZXMrKzsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwlpZiAod21f c3RhdGUtPm51bV9hY3RpdmVfcGxhbmVzICE9IDEpCj4+PiArCQl3bV9zdGF0ZS0+Y3hzciA9IGZh bHNlOwo+Pj4gKwo+Pj4gKwlpZiAod21fc3RhdGUtPmN4c3IpIHsKPj4+ICsJCWZvciAobGV2ZWwg PSAwOyBsZXZlbCA8IHdtX3N0YXRlLT5udW1fbGV2ZWxzOyBsZXZlbCsrKSB7Cj4+PiArCQkJd21f c3RhdGUtPnNyW2xldmVsXS5wbGFuZSA9IHNyX2ZpZm9fc2l6ZTsKPj4+ICsJCQl3bV9zdGF0ZS0+ c3JbbGV2ZWxdLmN1cnNvciA9IDYzOwo+Pj4gKwkJfQo+Pj4gKwl9Cj4+PiArCj4+PiArCWZvcl9l YWNoX2ludGVsX3BsYW5lX29uX2NydGMoZGV2LCBjcnRjLCBwbGFuZSkgewo+Pj4gKwkJc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpzdGF0ZSA9Cj4+PiArCQkJdG9faW50ZWxfcGxhbmVfc3RhdGUo cGxhbmUtPmJhc2Uuc3RhdGUpOwo+Pj4gKwo+Pj4gKwkJaWYgKCFzdGF0ZS0+dmlzaWJsZSkKPj4+ ICsJCQljb250aW51ZTsKPj4+ICsKPj4+ICsJCS8qIG5vcm1hbCB3YXRlcm1hcmtzICovCj4+PiAr CQlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPCB3bV9zdGF0ZS0+bnVtX2xldmVsczsgbGV2ZWwrKykg ewo+Pj4gKwkJCWludCB3bSA9IHZsdl9jb21wdXRlX3dtX2xldmVsKHBsYW5lLCBjcnRjLCBzdGF0 ZSwgbGV2ZWwpOwo+Pj4gKwkJCWludCBtYXhfd20gPSBwbGFuZS0+YmFzZS50eXBlID09IERSTV9Q TEFORV9UWVBFX0NVUlNPUiA/IDYzIDogNTExOwo+Pj4gKwo+Pj4gKwkJCS8qIGhhY2sgKi8KPj4+ ICsJCQlpZiAoV0FSTl9PTihsZXZlbCA9PSAwICYmIHdtID4gbWF4X3dtKSkKPj4+ICsJCQkJd20g PSBtYXhfd207Cj4+PiArCj4+PiArCQkJaWYgKHdtID4gcGxhbmUtPndtLmZpZm9fc2l6ZSkKPj4+ ICsJCQkJYnJlYWs7Cj4+PiArCj4+PiArCQkJc3dpdGNoIChwbGFuZS0+YmFzZS50eXBlKSB7Cj4+ PiArCQkJCWludCBzcHJpdGU7Cj4+PiArCQkJY2FzZSBEUk1fUExBTkVfVFlQRV9DVVJTT1I6Cj4+ PiArCQkJCXdtX3N0YXRlLT53bVtsZXZlbF0uY3Vyc29yID0gd207Cj4+PiArCQkJCWJyZWFrOwo+ Pj4gKwkJCWNhc2UgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWToKPj4+ICsJCQkJd21fc3RhdGUtPndt W2xldmVsXS5wcmltYXJ5ID0gd207Cj4+PiArCQkJCWJyZWFrOwo+Pj4gKwkJCWNhc2UgRFJNX1BM QU5FX1RZUEVfT1ZFUkxBWToKPj4+ICsJCQkJc3ByaXRlID0gcGxhbmUtPnBsYW5lOwo+Pj4gKwkJ CQl3bV9zdGF0ZS0+d21bbGV2ZWxdLnNwcml0ZVtzcHJpdGVdID0gd207Cj4+PiArCQkJCWJyZWFr Owo+Pj4gKwkJCX0KPj4+ICsJCX0KPj4+ICsKPj4+ICsJCXdtX3N0YXRlLT5udW1fbGV2ZWxzID0g bGV2ZWw7Cj4+PiArCj4+PiArCQlpZiAoIXdtX3N0YXRlLT5jeHNyKQo+Pj4gKwkJCWNvbnRpbnVl Owo+Pj4gKwo+Pj4gKwkJLyogbWF4ZmlmbyB3YXRlcm1hcmtzICovCj4+PiArCQlzd2l0Y2ggKHBs YW5lLT5iYXNlLnR5cGUpIHsKPj4+ICsJCQlpbnQgc3ByaXRlLCBsZXZlbDsKPj4+ICsJCWNhc2Ug RFJNX1BMQU5FX1RZUEVfQ1VSU09SOgo+Pj4gKwkJCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IHdt X3N0YXRlLT5udW1fbGV2ZWxzOyBsZXZlbCsrKQo+Pj4gKwkJCQl3bV9zdGF0ZS0+c3JbbGV2ZWxd LmN1cnNvciA9Cj4+PiArCQkJCQl3bV9zdGF0ZS0+c3JbbGV2ZWxdLmN1cnNvcjsKPj4+ICsJCQli cmVhazsKPj4+ICsJCWNhc2UgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWToKPj4+ICsJCQlmb3IgKGxl dmVsID0gMDsgbGV2ZWwgPCB3bV9zdGF0ZS0+bnVtX2xldmVsczsgbGV2ZWwrKykKPj4+ICsJCQkJ d21fc3RhdGUtPnNyW2xldmVsXS5wbGFuZSA9Cj4+PiArCQkJCQltaW4od21fc3RhdGUtPnNyW2xl dmVsXS5wbGFuZSwKPj4+ICsJCQkJCSAgICB3bV9zdGF0ZS0+d21bbGV2ZWxdLnByaW1hcnkpOwo+ Pj4gKwkJCWJyZWFrOwo+Pj4gKwkJY2FzZSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZOgo+Pj4gKwkJ CXNwcml0ZSA9IHBsYW5lLT5wbGFuZTsKPj4+ICsJCQlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPCB3 bV9zdGF0ZS0+bnVtX2xldmVsczsgbGV2ZWwrKykKPj4+ICsJCQkJd21fc3RhdGUtPnNyW2xldmVs XS5wbGFuZSA9Cj4+PiArCQkJCQltaW4od21fc3RhdGUtPnNyW2xldmVsXS5wbGFuZSwKPj4+ICsJ CQkJCSAgICB3bV9zdGF0ZS0+d21bbGV2ZWxdLnNwcml0ZVtzcHJpdGVdKTsKPj4+ICsJCQlicmVh azsKPj4+ICsJCX0KPj4+ICsJfQo+Pj4gKwo+Pj4gKwkvKiBjbGVhciBhbnkgKHBhcnRpYWxseSkg ZmlsbGVkIGludmFsaWQgbGV2ZWxzICovCj4+PiArCWZvciAobGV2ZWwgPSB3bV9zdGF0ZS0+bnVt X2xldmVsczsgbGV2ZWwgPCBDSFZfV01fTlVNX0xFVkVMUzsgbGV2ZWwrKykgewo+Pj4gKwkJbWVt c2V0KCZ3bV9zdGF0ZS0+d21bbGV2ZWxdLCAwLCBzaXplb2Yod21fc3RhdGUtPndtW2xldmVsXSkp Owo+Pj4gKwkJbWVtc2V0KCZ3bV9zdGF0ZS0+c3JbbGV2ZWxdLCAwLCBzaXplb2Yod21fc3RhdGUt PnNyW2xldmVsXSkpOwo+Pj4gKwl9Cj4+PiArCj4+PiArCXZsdl9pbnZlcnRfd21zKGNydGMpOwo+ Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCB2bHZfbWVyZ2Vfd20oc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKPj4+ICsJCQkgc3RydWN0IHZsdl93bV92YWx1ZXMgKndtKQo+Pj4gK3sKPj4+ICsJ c3RydWN0IGludGVsX2NydGMgKmNydGM7Cj4+PiArCWludCBudW1fYWN0aXZlX2NydGNzID0gMDsK Pj4+ICsKPj4+ICsJaWYgKElTX0NIRVJSWVZJRVcoZGV2KSkKPj4+ICsJCXdtLT5sZXZlbCA9IFZM Vl9XTV9MRVZFTF9ERFJfRFZGUzsKPj4+ICsJZWxzZQo+Pj4gKwkJd20tPmxldmVsID0gVkxWX1dN X0xFVkVMX1BNMjsKPj4+ICsJd20tPmN4c3IgPSB0cnVlOwo+Pj4gKwo+Pj4gKwlmb3JfZWFjaF9p bnRlbF9jcnRjKGRldiwgY3J0Yykgewo+Pj4gKwkJY29uc3Qgc3RydWN0IHZsdl93bV9zdGF0ZSAq d21fc3RhdGUgPSAmY3J0Yy0+d21fc3RhdGU7Cj4+PiArCj4+PiArCQlpZiAoIWNydGMtPmFjdGl2 ZSkKPj4+ICsJCQljb250aW51ZTsKPj4+ICsKPj4+ICsJCWlmICghd21fc3RhdGUtPmN4c3IpCj4+ PiArCQkJd20tPmN4c3IgPSBmYWxzZTsKPj4+ICsKPj4+ICsJCW51bV9hY3RpdmVfY3J0Y3MrKzsK Pj4+ICsJCXdtLT5sZXZlbCA9IG1pbl90KGludCwgd20tPmxldmVsLCB3bV9zdGF0ZS0+bnVtX2xl dmVscyAtIDEpOwo+Pj4gKwl9Cj4+PiArCj4+PiArCWlmIChudW1fYWN0aXZlX2NydGNzICE9IDEp Cj4+PiArCQl3bS0+Y3hzciA9IGZhbHNlOwo+Pj4gKwo+Pj4gKwlmb3JfZWFjaF9pbnRlbF9jcnRj KGRldiwgY3J0Yykgewo+Pj4gKwkJc3RydWN0IHZsdl93bV9zdGF0ZSAqd21fc3RhdGUgPSAmY3J0 Yy0+d21fc3RhdGU7Cj4+PiArCQllbnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7Cj4+PiArCj4+ PiArCQlpZiAoIWNydGMtPmFjdGl2ZSkKPj4+ICsJCQljb250aW51ZTsKPj4+ICsKPj4+ICsJCXdt LT5waXBlW3BpcGVdID0gd21fc3RhdGUtPndtW3dtLT5sZXZlbF07Cj4+PiArCQlpZiAod20tPmN4 c3IpCj4+PiArCQkJd20tPnNyID0gd21fc3RhdGUtPnNyW3dtLT5sZXZlbF07Cj4+PiArCj4+PiAr CQl3bS0+ZGRsW3BpcGVdLnByaW1hcnkgPSBERExfUFJFQ0lTSU9OX0hJR0ggfCAyOwo+Pj4gKwkJ d20tPmRkbFtwaXBlXS5zcHJpdGVbMF0gPSBERExfUFJFQ0lTSU9OX0hJR0ggfCAyOwo+Pj4gKwkJ d20tPmRkbFtwaXBlXS5zcHJpdGVbMV0gPSBERExfUFJFQ0lTSU9OX0hJR0ggfCAyOwo+Pj4gKwkJ d20tPmRkbFtwaXBlXS5jdXJzb3IgPSBERExfUFJFQ0lTSU9OX0hJR0ggfCAyOwo+Pgo+PiBEaWQg d2UgcmVhbGx5IGRlY2lkZSB0aGF0IDB4MiB3YXMgdGhlIGZpbmFsIGNvcnJlY3QgdmFsdWUgZm9y IHRoZSBETAo+PiByZWdpc3RlcnM/IEkgZmlndXJlZCB3ZSB3b3VsZCBiZSBydW5uaW5nIDB4NyBm b3IgQ0hWLgo+Cj4gSSdtIHdhcnkgb2YgaW5jcmVhc2luZyBpdCB0b28gbXVjaC4gVGhhdCdsbCBn aXZlIHRoZSBzeXN0ZW0gYWdlbnQgYQo+IGJldHRlciBjaGFuY2Ugb2YgbWFraW5nIGEgbWVzcyBv ZiB0aGluZ3MuCj4KCkl0IGRvZXMgYXBwZWFyIHRvIHdvcmsgYXQgYSBsZXZlbCBvZiAyIGFuZCBn aXZlcyB1cyByb29tIGZvciBpbXByb3ZlbWVudCAKaWYgdGhlcmUgaXMgYSBwZXJmb3JtYW5jZSBw cm9ibGVtIGluIHRoZSBmdXJ0dXJlCgo+Pgo+Pj4gKwl9Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRp YyB2b2lkIHZsdl91cGRhdGVfd20oc3RydWN0IGRybV9jcnRjICpjcnRjKQo+Pj4gK3sKPj4+ICsJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKPj4+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPj4+ICsJc3RydWN0IGludGVs X2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwo+Pj4gKwllbnVtIHBpcGUg cGlwZSA9IGludGVsX2NydGMtPnBpcGU7Cj4+PiArCXN0cnVjdCB2bHZfd21fdmFsdWVzIHdtID0g e307Cj4+PiArCj4+PiArCV92bHZfY29tcHV0ZV93bShpbnRlbF9jcnRjKTsKPj4+ICsJdmx2X21l cmdlX3dtKGRldiwgJndtKTsKPj4+ICsKPj4+ICsJaWYgKG1lbWNtcCgmZGV2X3ByaXYtPndtLnZs diwgJndtLCBzaXplb2Yod20pKSA9PSAwKQo+Pj4gKwkJcmV0dXJuOwo+Pj4gKwo+Pj4gKwlpZiAo d20ubGV2ZWwgPCBWTFZfV01fTEVWRUxfRERSX0RWRlMgJiYKPj4+ICsJICAgIGRldl9wcml2LT53 bS52bHYubGV2ZWwgPj0gVkxWX1dNX0xFVkVMX0REUl9EVkZTKQo+Pj4gKwkJY2h2X3NldF9tZW1v cnlfZHZmcyhkZXZfcHJpdiwgZmFsc2UpOwo+Pj4gKwo+Pj4gKwlpZiAod20ubGV2ZWwgPCBWTFZf V01fTEVWRUxfUE01ICYmCj4+PiArCSAgICBkZXZfcHJpdi0+d20udmx2LmxldmVsID49IFZMVl9X TV9MRVZFTF9QTTUpCj4+PiArCQljaHZfc2V0X21lbW9yeV9wbTUoZGV2X3ByaXYsIGZhbHNlKTsK Pj4+ICsKPj4+ICsJaWYgKCF3bS5jeHNyICYmIGRldl9wcml2LT53bS52bHYuY3hzcikgewo+Pj4g KwkJaW50ZWxfc2V0X21lbW9yeV9jeHNyKGRldl9wcml2LCBmYWxzZSk7Cj4+PiArCQlpbnRlbF93 YWl0X2Zvcl92YmxhbmsoZGV2LCBwaXBlKTsKPj4+ICsJfQo+Pj4gKwo+Pj4gKwl2bHZfd3JpdGVf d21fdmFsdWVzKGludGVsX2NydGMsICZ3bSk7Cj4+PiArCj4+PiArCURSTV9ERUJVR19LTVMoIlNl dHRpbmcgRklGTyB3YXRlcm1hcmtzIC0gJWM6IHBsYW5lPSVkLCBjdXJzb3I9JWQsICIKPj4+ICsJ CSAgICAgICJzcHJpdGUwPSVkLCBzcHJpdGUxPSVkLCBTUjogcGxhbmU9JWQsIGN1cnNvcj0lZCBs ZXZlbD0lZCBjeHNyPSVkXG4iLAo+Pj4gKwkJICAgICAgcGlwZV9uYW1lKHBpcGUpLCB3bS5waXBl W3BpcGVdLnByaW1hcnksIHdtLnBpcGVbcGlwZV0uY3Vyc29yLAo+Pj4gKwkJICAgICAgd20ucGlw ZVtwaXBlXS5zcHJpdGVbMF0sIHdtLnBpcGVbcGlwZV0uc3ByaXRlWzFdLAo+Pj4gKwkJICAgICAg d20uc3IucGxhbmUsIHdtLnNyLmN1cnNvciwgd20ubGV2ZWwsIHdtLmN4c3IpOwo+Pj4gKwo+Pgo+ PiBMb3ZlIHRoZSBkZXRhaWxlZCBEUk1fREVCVUdfS01TIC0gb2YgY291cnNlIGl0cyBzaG93aW5n IHRoZSBvbmx5IHJlYWwKPj4gaXNzdWUgSSBoYXZlIGZvdW5kIGluIHRoZSBzZXJpZXMgdGhhdCB0 aGUgY3Vyc29yIHdhdGVybWFyayBpcyBiZWluZwo+PiBwcm9ncmFtbWVkIGludmVydGVkLiA2MyB3 aGVuIHRoZSBjdXJzb3IgaXMgZGlzYWJsZWQgYW5kIDAgd2hlbiBpdHMKPj4gZW5hYmxlZC4gVGhp cyBsZWFkcyB0byBhbiBTUlIlIGluY3JlYXNlIG9mIH4xMCUgd2hlbiB0aGUgY3Vyc29yIGlzCj4+ IGVuYWJsZWQuCj4+Cj4+IC8vIEN1cnNvciBkaXNhYmxlZAo+PiBbIDI2NjIuMzU1MjE4XSBbZHJt OnZsdl91cGRhdGVfd21dIFNldHRpbmcgRklGTyB3YXRlcm1hcmtzIC0gQToKPj4gcGxhbmU9MzQw LCBjdXJzb3I9NjMsIHNwcml0ZTA9MCwgc3ByaXRlMT0wLCBTUjogcGxhbmU9MTM2NCwgY3Vyc29y PTAKPj4gbGV2ZWw9MiBjeHNyPTEKPj4KPj4gLy8gQ3Vyc29yIEVuYWJsZWQKPj4gWyAyNjY3LjUz MTA0OV0gW2RybTp2bHZfdXBkYXRlX3dtXSBTZXR0aW5nIEZJRk8gd2F0ZXJtYXJrcyAtIEE6Cj4+ IHBsYW5lPTM0MCwgY3Vyc29yPTAsIHNwcml0ZTA9MCwgc3ByaXRlMT0wLCBTUjogcGxhbmU9MTM2 NCwgY3Vyc29yPTAKPj4gbGV2ZWw9MiBjeHNyPTEKPj4KPj4gSSBoYXZlbid0IGZvdW5kIHRoZSBs aW5lIG9mIGNvZGUgdGhhdCBhY3R1YWxseSBpbnZlcnRzIHRoaXMgcHJvZ3JhbW1pbmcuCj4+IEkg d2lsbCBjb250aW51ZSB0byBpbnZlc3RpZ2F0ZSBkdXJpbmcgdGVzdGluZyBvZiB0aGlzIHNlcmll cy4KPgo+IHZsdl9pbnZlcnRfd21zKCkKPgo+IFRoYXQncyBkb25lIG9uIHB1cnBvc2Ugc2luY2Ug Y2FsY3VsYXRpbmcgdGhlIHdhdGVybWFya3MgdGhlICJyaWdodCB3YXkKPiB1cCIgZmlyc3QgbWFr ZXMgbWFrZXMgaXQgZWFzaWVyIHRvIHRoaW5rIGFib3V0IHRoZW0gKGllLiB0byBjb21wYXJlIHdp dGgKPiB0aGUgRklGTyBzaXplLCBhbmQgdG8gbWVyZ2UgdGhlIHBsYW5lIFNSIHdhdGVybWFyayku IEl0IGFsc28gbWFrZSB0aGluZ3MKPiBsb29rcyBtb3JlIElMSy1saWtlIHNpbmNlIElMSysgdGFr ZSB0aGUgd2F0ZXJtYXJrcyBpbiB0aGUgbm9uLWludmVydGVkCj4gZm9ybS4KPgoKSSB3YXNuJ3Qg YXdhcmUgdGhlIHJlZ2lzdGVycyB3ZXJlIGludmVydGVkIGNvbXBhcmVkIHRvIElMSysuIFRoaXMg aXMgdGhlIApvbmx5IHJlYWwgaXNzdWUgSSBoYWQgd2l0aCB0aGUgc2VyaWVzIGFuZCBhZnRlciB0 ZXN0aW5nIGhlcmUgYnkgd3JpdGluZyAKNjMgaW50byB0aGUgcmVnaXN0ZXIgSSBhZ3JlZSB0aGF0 IHRoaXMgaXNuJ3QgcmVhbGx5IGEgcHJvYmxlbS4KClJldmlld2VkLWJ5OiBDbGludCBUYXlsb3Ig PENsaW50b24uQS5UYXlsb3JAaW50ZWwuY29tPgpUZXN0ZWQtYnk6IENsaW50IFRheWxvciA8Q2xp bnRvbi5BLlRheWxvckBpbnRlbC5jb20+Cgo+Pgo+Pgo+Pj4gKwlpZiAod20uY3hzciAmJiAhZGV2 X3ByaXYtPndtLnZsdi5jeHNyKSB7Cj4+PiArCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2LCBw aXBlKTsKPj4+ICsJCWludGVsX3NldF9tZW1vcnlfY3hzcihkZXZfcHJpdiwgdHJ1ZSk7Cj4+PiAr CX0KPj4+ICsKPj4+ICsJaWYgKHdtLmxldmVsID49IFZMVl9XTV9MRVZFTF9QTTUgJiYKPj4+ICsJ ICAgIGRldl9wcml2LT53bS52bHYubGV2ZWwgPCBWTFZfV01fTEVWRUxfUE01KQo+Pj4gKwkJY2h2 X3NldF9tZW1vcnlfcG01KGRldl9wcml2LCB0cnVlKTsKPj4+ICsKPj4+ICsJaWYgKHdtLmxldmVs ID49IFZMVl9XTV9MRVZFTF9ERFJfRFZGUyAmJgo+Pj4gKwkgICAgZGV2X3ByaXYtPndtLnZsdi5s ZXZlbCA8IFZMVl9XTV9MRVZFTF9ERFJfRFZGUykKPj4+ICsJCWNodl9zZXRfbWVtb3J5X2R2ZnMo ZGV2X3ByaXYsIHRydWUpOwo+Pj4gKwo+Pj4gKwlkZXZfcHJpdi0+d20udmx2ID0gd207Cj4+PiAg ICB9Cj4+Pgo+Pj4gICAgc3RhdGljIHZvaWQgdmFsbGV5dmlld191cGRhdGVfc3ByaXRlX3dtKHN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+Pj4gQEAgLTY4MjMsOCArNzEyOCw5IEBAIHZvaWQgaW50 ZWxfaW5pdF9wbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+Pj4gICAgCQllbHNlIGlmIChJTlRF TF9JTkZPKGRldiktPmdlbiA9PSA4KQo+Pj4gICAgCQkJZGV2X3ByaXYtPmRpc3BsYXkuaW5pdF9j bG9ja19nYXRpbmcgPSBicm9hZHdlbGxfaW5pdF9jbG9ja19nYXRpbmc7Cj4+PiAgICAJfSBlbHNl IGlmIChJU19DSEVSUllWSUVXKGRldikpIHsKPj4+IC0JCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0 ZV93bSA9IHZhbGxleXZpZXdfdXBkYXRlX3dtOwo+Pj4gLQkJZGV2X3ByaXYtPmRpc3BsYXkudXBk YXRlX3Nwcml0ZV93bSA9IHZhbGxleXZpZXdfdXBkYXRlX3Nwcml0ZV93bTsKPj4+ICsJCXZsdl9z ZXR1cF93bV9sYXRlbmN5KGRldik7Cj4+PiArCj4+PiArCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRh dGVfd20gPSB2bHZfdXBkYXRlX3dtOwo+Pj4gICAgCQlkZXZfcHJpdi0+ZGlzcGxheS5pbml0X2Ns b2NrX2dhdGluZyA9Cj4+PiAgICAJCQljaGVycnl2aWV3X2luaXRfY2xvY2tfZ2F0aW5nOwo+Pj4g ICAgCX0gZWxzZSBpZiAoSVNfVkFMTEVZVklFVyhkZXYpKSB7Cj4+Pgo+CgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0 CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=