From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: Re: [PATCH v7 7/8] drm/i915: Decode system memory bandwidth Date: Thu, 08 Dec 2016 21:55:13 -0200 Message-ID: <1481241313.2375.81.camel@intel.com> References: <20161201154940.24446-1-mahesh1.kumar@intel.com> <20161201154940.24446-8-mahesh1.kumar@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id A62736E1EF for ; Thu, 8 Dec 2016 23:55:29 +0000 (UTC) In-Reply-To: <20161201154940.24446-8-mahesh1.kumar@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Mahesh Kumar , intel-gfx@lists.freedesktop.org Cc: maarten.lankhorst@intel.com List-Id: intel-gfx@lists.freedesktop.org RW0gUXVpLCAyMDE2LTEyLTAxIMOgcyAyMToxOSArMDUzMCwgTWFoZXNoIEt1bWFyIGVzY3JldmV1 Ogo+IFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IHRvIGRlY29kZSBzeXN0ZW0gbWVtb3J5IGJhbmR3 aWR0aAo+IHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgYXJiaXRyYXRlZCBkaXNwbGF5IG1lbW9yeSBw ZXJjZW50YWdlCj4gY2FsY3VsYXRpb24gaW4gR0VOOSBiYXNlZCBzeXN0ZW0uCj4gCj4gQ2hhbmdl cyBmcm9tIHYxOgo+IMKgLSBBZGRyZXNzIGNvbW1lbnRzIGZyb20gUGF1bG8KPiDCoC0gaW1wbGVt ZW50IGRlY29kZSBmdW5jdGlvbiBmb3IgU0tML0tCTCBhbHNvCj4gQ2hhbmdlcyBmcm9tIHYyOgo+ IMKgLSBSZXdyaXRlIHRoZSBjb2RlIGFzIHBlciBIVyB0ZWFtIGlucHV0cwo+IMKgLSBBZGRyZXNz ZXMgcmV2aWV3IGNvbW1lbnRzCj4gQ2hhbmdlcyBmcm9tIHYzOgo+IMKgLSBGaXggY29tcGlsYXRp b24gd2FybmluZwo+IAo+IFNpZ25lZC1vZmYtYnk6IE1haGVzaCBLdW1hciA8bWFoZXNoMS5rdW1h ckBpbnRlbC5jb20+CgpBcyBhIGdlbmVyYWwgY29tbWVudCwgaW5kZW50YXRpb24gaXMgd2VpcmQg b24gYWxsIG11bHRpLWxpbmUKc3RhdGVtZW50cy4gQWxzbywgbW9zdCBjb21tZW50cyBhcmUgbWlz c2luZyBwZXJpb2RzIGFuZCBhcmUgbm90IDgwLQpjb2x1bW4gYWxpZ25lZC4gQW5kIGEgbG90IG9m IHRoZSBjb21tZW50cyBqdXN0IHNheSB3aGF0IHRoZSBjb2RlCmFscmVhZHkgZG9lcyBpbnN0ZWFk IG9mIGV4cGxhaW5pbmcgd2h5IHRoZSBjb2RlIGRvZXMgd2hhdCBpdCBkb2VzLCBzbwpwZXJoYXBz IHdlIGNvdWxkIGp1c3QgcmVtb3ZlIHRoZW0uIENvbW1lbnRzIHNob3VsZCBleHBsYWluIHdoeSB0 aGUgY29kZQppcyB3cml0dGVuIHRoZSB3YXkgaXQgaXMsIG5vdCB0cmFuc2xhdGUgZnJvbSBDIHRv IEVuZ2xpc2guCgoKPiAtLS0KPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgfCAx NzMKPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gwqBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIHzCoMKgMTIgKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3JlZy5oIHzCoMKgMzcgKysrKysrKysrCj4gwqAzIGZpbGVzIGNoYW5nZWQsIDIy MiBpbnNlcnRpb25zKCspCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmMKPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiBpbmRleCAxYzY4 OWI2Li4wYWM3MTIyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gQEAgLTk3OSw2ICs5 NzksMTczIEBAIHN0YXRpYyB2b2lkIGludGVsX3Nhbml0aXplX29wdGlvbnMoc3RydWN0Cj4gZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gwqAJRFJNX0RFQlVHX0RSSVZFUigidXNlIEdQVSBz ZW1wYWhvcmVzPyAlc1xuIiwKPiB5ZXNubyhpOTE1LnNlbWFwaG9yZXMpKTsKPiDCoH0KPiDCoAo+ ICtzdGF0aWMgaW5saW5lIGVudW0gcmFuayBza2xfbWVtZGV2X2dldF9jaGFubmVsX3JhbmsodWlu dDMyX3QgdmFsKQoKV2h5IGlubGluZT8gVGhpcyBpcyBhbHJlYWR5IHN0YXRpYywgbGVhdmUgaXQg dXAgdG8gdGhlIGNvbXBpbGVyIHRvCmRlY2lkZSBpZiBpdCdzIGJldHRlciB0byBpbmxpbmUgb3Ig bm90LgoKCj4gK3sKPiArCXVpbnQ4X3QgbF9yYW5rLCBzX3Jhbms7Cj4gKwl1aW50OF90IGxfc2l6 ZSwgc19zaXplOwo+ICsJZW51bSByYW5rIGNoX3JhbmsgPSBEUkFNX1JBTktfU0lOR0xFOwoKT3B0 aW9uYWwgc3VnZ2VzdGlvbjogZ2V0IHJpZCBvZiB0aGlzIHZhcmlhYmxlLCBqdXN0IHJldHVybiB0 aGUKYXBwcm9wcmlhdGUgdmFsdWVzIG9uY2Ugd2UgZGlzY292ZXIgdGhlbS4KCgo+ICsKPiArCWxf c2l6ZSA9ICh2YWwgPj4gU0tMX0RSQU1fU0laRV9MX1NISUZUKSAmCj4gU0tMX0RSQU1fU0laRV9N QVNLOwo+ICsJc19zaXplID0gKHZhbCA+PiBTS0xfRFJBTV9TSVpFX1NfU0hJRlQpICYKPiBTS0xf RFJBTV9TSVpFX01BU0s7Cj4gKwlsX3JhbmsgPSAodmFsID4+IFNLTF9EUkFNX1JBTktfTF9TSElG VCkgJgo+IFNLTF9EUkFNX1JBTktfTUFTSzsKPiArCXNfcmFuayA9ICh2YWwgPj4gU0tMX0RSQU1f UkFOS19TX1NISUZUKSAmCj4gU0tMX0RSQU1fUkFOS19NQVNLOwoKVmFsaWRhdGUgb3VyIGFzc3Vt cHRpb25zOgoKV0FSTl9PTihsX3NpemUgPT0gMCAmJiBzX3NpemUgPT0gMCk7CgpPciB3ZSBjb3Vs ZCBldmVuIGRvIHRoZSBhcHByb3ByaWF0ZSBjaGVjayBhbmQgcmV0dXJuIERSQU1fUkFOS19JTlZB TElELApidXQgdGhlbiB3ZSdkIGhhdmUgdG8gcmVzdHJ1Y3R1cmUgaG93IG91ciBjYWxsZXIgY2Fs bHMgdXMsIG1heWJlIG1vdmluZwpzb21lIGNvZGUgdG8gdGhpcyBmdW5jdGlvbi4KCgo+ICsKPiAr CS8qCj4gKwnCoCogSWYgYW55IG9mIHRoZSBzbG90IGhhcyBkdWFsIHJhbmsgbWVtb3J5IGNvbnNp ZGVyCj4gKwnCoCogZHVhbCByYW5rIG1lbW9yeSBjaGFubmVsCj4gKwnCoCovCgpUaGUgY29tbWVu dCBzYXlzIGp1c3Qgd2hhdCB0aGUgY29kZSBhbHJlYWR5IHNheXMuIFdoYXQgd291bGQgYmUKaW50 ZXJlc3RpbmcgdG8gc2VlIGluIHRoZSBjb21tZW50IGlzIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB3 ZSBkbyBpdCB0aGUKd2F5IHdlIGRvLgoKCj4gKwlpZiAobF9yYW5rID09IFNLTF9EUkFNX1JBTktf RFVBTCB8fCBzX3JhbmsgPT0KPiBTS0xfRFJBTV9SQU5LX0RVQUwpCj4gKwkJY2hfcmFuayA9IERS QU1fUkFOS19EVUFMOwo+IAo+ICsKPiArCS8qCj4gKwnCoCogSWYgYm90aCB0aGUgc2xvdCBoYXMg c2luZ2xlIHJhbmsgbWVtb3J5IHRoZW4KPiBjb25maWd1cmF0aW9uCj4gKwnCoCogaXMgZHVhbCBy YW5rIG1lbW9yeQo+ICsJwqAqLwoKVGhlIGNvbW1lbnQgc2F5cyBqdXN0IHdoYXQgdGhlIGNvZGUg YWxyZWFkeSBzYXlzLiBXaGF0IHdvdWxkIGJlCmludGVyZXN0aW5nIHRvIHNlZSBpbiB0aGUgY29t bWVudCBpcyBhbiBleHBsYW5hdGlvbiBvZiB3aHkgd2UgZG8gaXQgdGhlCndheSB3ZSBkby4KCgoK PiArCWlmICgobF9zaXplICYmIGxfcmFuayA9PSBTS0xfRFJBTV9SQU5LX1NJTkdMRSkgJiYKPiAr CQkoc19zaXplICYmIHNfcmFuayA9PSBTS0xfRFJBTV9SQU5LX1NJTkdMRSkpCj4gKwkJY2hfcmFu ayA9IERSQU1fUkFOS19EVUFMOwo+ICsJcmV0dXJuIGNoX3Jhbms7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQKPiArc2tsX2dldF9tZW1kZXZfaW5mbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gK3sKPiArCXN0cnVjdCBtZW1kZXZfaW5mbyAqbWVtZGV2X2luZm8gPSAmZGV2X3By aXYtPm1lbWRldl9pbmZvOwo+ICsJdWludDMyX3QgbWVtX2ZyZXFfa2h6Owo+ICsJdWludDMyX3Qg dmFsOwo+ICsJZW51bSByYW5rIGNoMF9yYW5rID0gRFJBTV9SQU5LX0lOVkFMSUQsIGNoMV9yYW5r ID0KPiBEUkFNX1JBTktfSU5WQUxJRDsKPiArCj4gKwl2YWwgPSBJOTE1X1JFQUQoU0tMX01DX0JJ T1NfREFUQV8wXzBfMF9NQ0hCQVJfUENVKTsKPiArCW1lbV9mcmVxX2toeiA9ICh2YWwgJiBTS0xf UkVRX0RBVEFfTUFTSykgKgo+ICsJCQkJU0tMX01FTU9SWV9GUkVRX01VTFRJUExJRVJfS0haOwoK T3B0aW9uYWwgc3VnZ2VzdGlvbjogcGVyaGFwcyBleHRlbmQgdGhlIG1lbW9yeV9mcmVxX211bHRp cGxpZXIgdG8gSFoKYW5kIHRoZW4gbGF0ZXIgY3V0IHRoZSBsYXN0IDMgZGlnaXRzIHNvIHRoZSBy b3VuZGluZyBlcnJvcnMgZ2V0CnJlc3RyaWN0ZWQgdG8gdGhlIHVuaXRzIHdlJ2xsIGN1dD8gQWxz bywgaWYgd2UgZG8gdGhlIG1hdGggdXNpbmcgdGhlICI0CiogbnVtIC8gMyIgd2UgY2FuIHRyeSB0 byByZWR1Y2UgdGhlIHJvdW5kaW5nIGVycm9ycyBldmVuIG1vcmUuCgpJIGdldCBhbm5veWVkIHRo YXQgaXQgc2F5cyBteSBzeXN0ZW0gYmFuZHdpZHRoIGlzIDI1NjAwMDMyLCB3aGlsZSB0aGUKY29y cmVjdCBudW1iZXIgaXMgZXhhY3RseSAyNTYwMDAwMC4KClRoaXMgYXBwbGllcyB0byB0aGUgQlhU IGNvZGUgdG9vLgoKPiArCj4gKwl2YWwgPSBJOTE1X1JFQUQoU0tMX01BRF9ESU1NX0NIMF8wXzBf MF9NQ0hCQVJfTUNNQUlOKTsKPiArCWlmICh2YWwgIT0gMHgwKSB7Cj4gKwkJbWVtZGV2X2luZm8t Pm51bV9jaGFubmVscysrOwo+ICsJCWNoMF9yYW5rID0gc2tsX21lbWRldl9nZXRfY2hhbm5lbF9y YW5rKHZhbCk7Cj4gKwl9CgpPcHRpb25hbCBzdWdnZXN0aW9uOgoKSGVyZSdzIGhvdyBJIHdvdWxk IGhhdmUgaW1wbGVtZW50ZWQgdGhpczoKCmNoMF9yYW5rID0gc2tsX21lbWRldl9nZXRfY2hhbm5l bF9yYW5rKDApOwppZiAoY2gwX3JhbmsgIT0gRFJBTV9SQU5LX0lOVkFMSUQpCgltZW1kZXZfaW5m by0+bnVtX2NoYW5uZWxzKys7CgpUaGlzIHdheSB3ZSdkIG1vdmUgYWxsIHRoZSBsb2dpYyBhcm91 bmQgdGhpcyByZWdpc3RlciB0bwpza2xfbWVtZGV2X2dldF9jaGFubmVsX3JhbmsoKSwgYW5kIHdl J2QgYWxzbyBiZSBhYmxlIHRvIGdldCByaWQgb2YgdGhlCmluaXRpYWxpemF0aW9ucyBoZXJlLgoK QnV0IHRoaXMgaXMganVzdCBhIHN1Z2dlc3Rpb24gaW4gY2FzZSB5b3UgYWdyZWUgd2l0aCBtZS4g RmVlbCBmcmVlIHRvCmxlYXZlIHRoZSBjb2RlIHRoZSB3YXkgaXQgaXMuCgoKPiArCj4gKwl2YWwg PSBJOTE1X1JFQUQoU0tMX01BRF9ESU1NX0NIMV8wXzBfMF9NQ0hCQVJfTUNNQUlOKTsKPiArCWlm ICh2YWwgIT0gMHgwKSB7Cj4gKwkJbWVtZGV2X2luZm8tPm51bV9jaGFubmVscysrOwo+ICsJCWNo MV9yYW5rID0gc2tsX21lbWRldl9nZXRfY2hhbm5lbF9yYW5rKHZhbCk7Cj4gKwl9Cj4gKwo+ICsJ aWYgKG1lbWRldl9pbmZvLT5udW1fY2hhbm5lbHMgPT0gMCkgewo+ICsJCURSTV9FUlJPUigiTnVt YmVyIG9mIG1lbSBjaGFubmVscyBhcmUgemVyb1xuIik7CgpJJ20gbm90IGEgbmF0aXZlIEVuZ2xp c2ggc3BlYWtlciwgYnV0IEkgd291bGQgc3VwcG9zZSB0aGF0IHMvYXJlL2lzLwp3b3VsZCBtYWtl IHRoZSBzZW50ZW5jZSBjb3JyZWN0ICh0aGUgbnVtYmVyIGlzIHplcm8pLiBXaGlsZSBhdCBpdCwg d2h5Cm5vdCBzL21lbS9tZW1vcnkvIHRvbyB0byBtYWtlIHRoZSBjb2RlIHNvdW5kIGEgbGl0dGxl IG1vcmUgZm9ybWFsPwoKCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJbWVtZGV2 X2luZm8tPmJhbmR3aWR0aF9rYnBzID0gKG1lbWRldl9pbmZvLT5udW1fY2hhbm5lbHMgKgo+ICsJ CQkJCQkJbWVtX2ZyZXFfa2h6Cj4gKiA4KTsKPiArCj4gKwlpZiAobWVtZGV2X2luZm8tPmJhbmR3 aWR0aF9rYnBzID09IDApIHsKPiArCQlEUk1fRVJST1IoIkNvdWxkbid0IGdldCBzeXN0ZW0gbWVt b3J5IGJhbmR3aWR0aFxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwltZW1kZXZf aW5mby0+dmFsaWQgPSB0cnVlOwoKTXkgcHJldmlvdXMgY29tbWVudCBhYm91dCBvd25lcnNoaXAg b2YgdGhpcyB2YXJpYWJsZSBzdGlsbCBhcHBsaWVzLgoKCj4gKwo+ICsJLyoKPiArCcKgKiBJZiBh bnkgb2YgY2hhbm5lbCBpcyBzaW5nbGUgcmFuayBjaGFubmVsLAoKQWdhaW4sIG5vdCBhIG5hdGl2 ZSBFbmdsaXNoIHNwZWFrZXIsIGJ1dCAiYW55IG9mIGNoYW5uZWwiIHNvdW5kcwppbmNvcnJlY3Qg dG8gbWUuIEJ1dCBhbnl3YXksIHRoZSBjb21tZW50IG9ubHkgc2F5cyB3aGF0IHRoZSBjb2RlCmFs cmVhZHkgc2F5cy4gV2h5IGRvIHdlIGRvIGl0IGxpa2UgdGhpcz8KCgo+ICsJwqAqIGNvbnNpZGVy IHNpbmdsZSByYW5rIG1lbW9yeQo+ICsJwqAqLwo+ICsJaWYgKGNoMF9yYW5rID09IERSQU1fUkFO S19TSU5HTEUgfHwgY2gxX3JhbmsgPT0KPiBEUkFNX1JBTktfU0lOR0xFKQo+ICsJCW1lbWRldl9p bmZvLT5yYW5rID0gRFJBTV9SQU5LX1NJTkdMRTsKPiArCWVsc2UKPiArCQltZW1kZXZfaW5mby0+ cmFuayA9IG1heChjaDBfcmFuaywgY2gxX3JhbmspOwoKSSBjYW4ndCB0aGluayBvZiBhbnkgc2l0 dWF0aW9uIHdoZXJlIHRoaXMgd291bGRuJ3QgZW5kIHdpdGgKRFJBTV9SQU5LX0RVQUwsIHNvIHdl IG1pZ2h0IGp1c3QgYXNzaWduIGl0IHRvIHRoZSB2YXJpYWJsZS4KCgo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK2J4dF9nZXRfbWVtZGV2X2luZm8oc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgbWVtZGV2X2luZm8gKm1l bWRldl9pbmZvID0gJmRldl9wcml2LT5tZW1kZXZfaW5mbzsKPiArCXVpbnQzMl90IGRyYW1fY2hh bm5lbHM7Cj4gKwl1aW50MzJfdCBtZW1fZnJlcV9raHosIHZhbDsKPiArCXVpbnQ4X3QgbnVtX2Fj dGl2ZV9jaGFubmVsczsKPiArCWludCBpOwo+ICsKPiArCXZhbCA9IEk5MTVfUkVBRChCWFRfUF9D Ul9NQ19CSU9TX1JFUV8wXzBfMCk7Cj4gKwltZW1fZnJlcV9raHogPSAoKHZhbCAmIEJYVF9SRVFf REFUQV9NQVNLKSAqCj4gKwkJCQlCWFRfTUVNT1JZX0ZSRVFfTVVMVElQTElFUl9LSFopOwo+ICsK PiArCWRyYW1fY2hhbm5lbHMgPSAodmFsID4+IEJYVF9EUkFNX0NIQU5ORUxfQUNUSVZFX1NISUZU KSAmCj4gKwkJCQkJQlhUX0RSQU1fQ0hBTk5FTF9BQ1RJVkVfTUFTSwo+IDsKPiArCW51bV9hY3Rp dmVfY2hhbm5lbHMgPSBod2VpZ2h0MzIoZHJhbV9jaGFubmVscyk7Cj4gKwo+ICsJbWVtZGV2X2lu Zm8tPmJhbmR3aWR0aF9rYnBzID0gKG1lbV9mcmVxX2toeiAqCj4gbnVtX2FjdGl2ZV9jaGFubmVs cyAqIDQpOwo+ICsKPiArCWlmIChtZW1kZXZfaW5mby0+YmFuZHdpZHRoX2ticHMgPT0gMCkgewo+ ICsJCURSTV9FUlJPUigiQ291bGRuJ3QgZ2V0IHN5c3RlbSBtZW1vcnkgYmFuZHdpZHRoXG4iKTsK PiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCW1lbWRldl9pbmZvLT52YWxpZCA9IHRydWU7 Cj4gKwo+ICsJLyoKPiArCcKgKiBOb3cgcmVhZCBlYWNoIERVTklUOC85LzEwLzExIHRvIGNoZWNr IHRoZSByYW5rIG9mIGVhY2gKPiBkaW1tcy4KPiArCcKgKi8KPiArCWZvciAoaSA9IDA7IGkgPCBC WFRfRF9DUl9EUlAwX0RVTklUX01BWDsgaSsrKSB7Cj4gKwkJdmFsID0gSTkxNV9SRUFEKEJYVF9E X0NSX0RSUDBfRFVOSVQoaSkpOwo+ICsJCWlmICh2YWwgIT0gMHhGRkZGRkZGRikgewo+ICsJCQl1 aW50OF90IHJhbms7Cj4gKwkJCWVudW0gcmFuayBjaF9yYW5rOwo+ICsKPiArCQkJbWVtZGV2X2lu Zm8tPm51bV9jaGFubmVscysrOwo+ICsJCQlyYW5rID0gdmFsICYgQlhUX0RSQU1fUkFOS19NQVNL OwoKU2hvdWxkbid0IHRoZSBjb2RlIGhlcmUgYmU6ICJpZiBvbmUgb2YgdGhlc2UgdHdvIGJpdHMg YXJlIGVuYWJsZWQgdGhlbgp3ZSdyZSBSQU5LX1NJTkdMRSwgaWYgYm90aCBiaXRzIGFyZSBlbmFi bGVkIHRoZW4gd2UncmUgUkFOS19EVUFMLApvdGhlcndpc2UgaW52YWxpZCI/IElmIG5vdCwgd2h5 PwoKSW4gb3RoZXIgd29yZHM6IGlzIHJhbms9MHgyIHJlYWxseSBpbnZhbGlkPyBJc24ndCBpdCBq dXN0IHNpbmdsZSByYW5rPwoKCj4gKwkJCWlmIChyYW5rID09IEJYVF9EUkFNX1JBTktfU0lOR0xF KQo+ICsJCQkJY2hfcmFuayA9IERSQU1fUkFOS19TSU5HTEU7Cj4gKwkJCWVsc2UgaWYgKHJhbmsg PT0gQlhUX0RSQU1fUkFOS19EVUFMKQo+ICsJCQkJY2hfcmFuayA9IERSQU1fUkFOS19EVUFMOwo+ ICsJCQllbHNlCj4gKwkJCQljaF9yYW5rID0gRFJBTV9SQU5LX0lOVkFMSUQ7Cj4gKwo+ICsJCQkv Kgo+ICsJCQnCoCogSWYgYW55IG9mIGNoYW5uZWwgaXMgaGF2aW5nIHNpbmdsZSByYW5rCj4gbWVt b3J5CgpBZ2FpbiwgImFueSBvZiBjaGFubmVsIi4KCj4gKwkJCcKgKiBjb25zaWRlciBtZW1vcnkg YXMgc2luZ2xlIHJhbmsKPiArCQkJwqAqLwo+ICsJCQlpZiAobWVtZGV2X2luZm8tPnJhbmsgPT0g RFJBTV9SQU5LX0lOVkFMSUQpCj4gKwkJCQltZW1kZXZfaW5mby0+cmFuayA9IGNoX3Jhbms7Cj4g KwkJCWVsc2UgaWYgKGNoX3JhbmsgPT0gRFJBTV9SQU5LX1NJTkdMRSkKPiArCQkJCW1lbWRldl9p bmZvLT5yYW5rID0KPiBEUkFNX1JBTktfU0lOR0xFOwo+ICsJCX0KPiArCX0KClNLTCByZXR1cm5z IC1FSU5WQUwgaWYgd2UgZW5kIHVwIHdpdGggRFJBTV9SQU5LX0lOVkFMSUQgaW4gbWVtZGV2X2lu Zm8tCj5yYW5rLiBJIHRoaW5rIHdlIGNvdWxkIGRvIHRoYXQgaW4gQlhUIHRvbzogZWl0aGVyIHdl IGhhdmUgYWxsIHRoZQppbmZvcm1hdGlvbiB0byBub3QgYXBwbHkgdGhlIHdvcmthcm91bmQsIG9y IHdlIGdpdmUgdXAuCgoKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtp bnRlbF9nZXRfbWVtZGV2X2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ ICt7Cj4gKwlzdHJ1Y3QgbWVtZGV2X2luZm8gKm1lbWRldl9pbmZvID0gJmRldl9wcml2LT5tZW1k ZXZfaW5mbzsKPiArCWludCByZXQ7Cj4gKwo+ICsJbWVtZGV2X2luZm8tPnZhbGlkID0gZmFsc2U7 Cj4gKwltZW1kZXZfaW5mby0+cmFuayA9IERSQU1fUkFOS19JTlZBTElEOwo+ICsJbWVtZGV2X2lu Zm8tPm51bV9jaGFubmVscyA9IDA7Cj4gKwo+ICsJaWYgKCFJU19HRU45KGRldl9wcml2KSkKPiAr CQlyZXR1cm47Cj4gKwo+ICsJaWYgKElTX0JST1hUT04oZGV2X3ByaXYpKQo+ICsJCXJldCA9IGJ4 dF9nZXRfbWVtZGV2X2luZm8oZGV2X3ByaXYpOwo+ICsJZWxzZQo+ICsJCXJldCA9IHNrbF9nZXRf bWVtZGV2X2luZm8oZGV2X3ByaXYpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJ RFJNX0RFQlVHX0RSSVZFUigiRFJBTSBiYW5kd2lkdGg6ICV1IEtCcHMgdG90YWwtY2hhbm5lbHM6 Cj4gJXVcbiIsCj4gKwkJCQltZW1kZXZfaW5mby0+YmFuZHdpZHRoX2ticHMsCj4gKwkJCQltZW1k ZXZfaW5mby0+bnVtX2NoYW5uZWxzKTsKPiArCWlmIChtZW1kZXZfaW5mby0+cmFuayA9PSBEUkFN X1JBTktfSU5WQUxJRCkKPiArCQlEUk1fSU5GTygiQ291bmxkIG5vdCBnZXQgbWVtb3J5IHJhbmsg aW5mb1xuIik7CgpTcGVsbGluZyBtaXN0YWtlIGhlcmUuIEFuZCBzaW5jZSB5b3UgdXNlICJDb3Vs ZG4ndCIgaW5zdGVhZCBvZiAiQ291bGQKbm90IiBpbiBhbGwgdGhlIG90aGVyIG1lc3NhZ2VzLCBJ J2Qga2VlcCB0aGUgc2FtZSBwYXR0ZXJuLgoKQnV0IGlmIHlvdSBhY2NlcHQgbXkgc3VnZ2VzdGlv biBhYm92ZSwgd2UnbGwgbmV2ZXIgcHJpbnQgdGhpcyBtZXNzYWdlCmFueXdheS4KCgo+ICsJZWxz ZSB7Cj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiRFJBTSByYW5rOiAlcyByYW5rXG4iLAo+ICsJCQkJ KG1lbWRldl9pbmZvLT5yYW5rID09Cj4gRFJBTV9SQU5LX0RVQUwpID8KPiArCQkJCQkJImR1YWwi IDogInNpbmdsZSIpOwo+ICsJfQo+ICt9Cj4gKwo+ICsKClR3byB3aGl0ZSBzcGFjZXMgaGVyZS4K Cgo+IMKgLyoqCj4gwqAgKiBpOTE1X2RyaXZlcl9pbml0X2h3IC0gc2V0dXAgc3RhdGUgcmVxdWly aW5nIGRldmljZSBhY2Nlc3MKPiDCoCAqIEBkZXZfcHJpdjogZGV2aWNlIHByaXZhdGUKPiBAQCAt MTA4MSw2ICsxMjQ4LDEyIEBAIHN0YXRpYyBpbnQgaTkxNV9kcml2ZXJfaW5pdF9odyhzdHJ1Y3QK PiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiDCoAkJCURSTV9ERUJVR19EUklWRVIoImNh bid0IGVuYWJsZSBNU0kiKTsKPiDCoAl9Cj4gwqAKPiArCS8qCj4gKwnCoCogRmlsbCB0aGUgbWVt ZGV2IHN0cnVjdHVyZSB0byBnZXQgdGhlIHN5c3RlbSByYXcgYmFuZHdpZHRoCj4gKwnCoCogVGhp cyB3aWxsIGJlIHVzZWQgYnkgV00gYWxnb3JpdGhtLCB0byBpbXBsZW1lbnQgR0VOOQo+IGJhc2Vk IFdBCj4gKwnCoCovCj4gKwlpbnRlbF9nZXRfbWVtZGV2X2luZm8oZGV2X3ByaXYpOwo+ICsKPiDC oAlyZXR1cm4gMDsKPiDCoAo+IMKgb3V0X2dndHQ6Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgK PiBpbmRleCBiNzhkYzlhLi42OTIxM2E0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4g QEAgLTIyOTcsNiArMjI5NywxOCBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4gwqAJCWJv b2wgZGlzdHJ1c3RfYmlvc193bTsKPiDCoAl9IHdtOwo+IMKgCj4gKwlzdHJ1Y3QgbWVtZGV2X2lu Zm8gewo+ICsJCWJvb2wgdmFsaWQ7Cj4gKwkJdWludDMyX3QgYmFuZHdpZHRoX2ticHM7Cj4gKwkJ dWludDhfdCBudW1fY2hhbm5lbHM7Cj4gKwkJZW51bSByYW5rIHsKPiArCQkJRFJBTV9SQU5LX0lO VkFMSUQgPSAwLAo+ICsJCQlEUkFNX1JBTktfU0lOR0xFLAo+ICsJCQlEUkFNX1JBTktfRFVBTAo+ ICsJCX0gcmFuazsKClRoaXMgd2FzIHByZXZpb3VzbHkgYW4gYW5vbnltb3VzIGVudW0gKGVudW0g eyAuLi4gfSByYW5rOyksIGJ1dCBub3cKaXQncyAiZW51bSByYW5rIiwgd2hpY2ggaXMgdG9vIGdl bmVyaWMgZm9yIGEgLmggZmlsZS4gRWl0aGVyIHVzZSBhIG1vcmUKc3BlY2lmaWMgbmFtZSAoZW51 bSBtZW1kZXZfcmFuaz8pIG9yIHRyeSB0byBtYWtlIGl0IGFub255bW91cyBhZ2Fpbi4KCgo+ICsJ fSBtZW1kZXZfaW5mbzsKPiArCj4gKwo+IMKgCXN0cnVjdCBpOTE1X3J1bnRpbWVfcG0gcG07Cj4g wqAKPiDCoAlzdHJ1Y3Qgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlZy5oCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4gaW5kZXggNjQ5MzE5 ZC4uZTdlZmRkMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+IEBAIC04MDE1LDYgKzgw MTUsNDMgQEAgZW51bSB7Cj4gwqAjZGVmaW5lwqDCoERDX1NUQVRFX0RFQlVHX01BU0tfQ09SRVMJ KDE8PDApCj4gwqAjZGVmaW5lwqDCoERDX1NUQVRFX0RFQlVHX01BU0tfTUVNT1JZX1VQCSgxPDwx KQo+IMKgCj4gKyNkZWZpbmUgQlhUX1BfQ1JfTUNfQklPU19SRVFfMF8wXzAJX01NSU8oTUNIQkFS X01JUlJPUl9CQVNFX1MKPiBOQiArIDB4NzExNCkKPiArI2RlZmluZSBCWFRfUkVRX0RBVEFfTUFT SwkJCTB4M0YKPiArI2RlZmluZSBCWFRfRFJBTV9BQ1RJVkVfQ0hBTk5FTF9TSElGVAkJMTIKPiAr I2RlZmluZSBCWFRfRFJBTV9BQ1RJVkVfQ0hBTk5FTF9NQVNLCQkweEYKCldlJ3JlIG5vdCB1c2lu ZyB0aGVzZSB0d28gZGVmaW5pdGlvbnMgYW55d2hlcmUuCgoKPiArLyoKPiArICogQklPUyBwcm9n cmFtcyB0aGlzIGZpZWxkIG9mIFJFUV9EQVRBIFs1OjBdIGluIGludGVnZXIKPiArICogbXVsdGlw bGUgb2YgMTMzMzMzIEtIeiAoMTMzLjMzTUh6KQo+ICsgKi8KCk5vdyB0aGF0IHdlJ3JlIHVzaW5n IGRlY2ltYWwgb24gdGhlIGRlZmluaXRpb24sIEkgZG9uJ3QgdGhpbmsgdGhpcwpjb21tZW50IGlz IHVzZWZ1bC4KCgo+ICsjZGVmaW5lCUJYVF9NRU1PUllfRlJFUV9NVUxUSVBMSUVSX0tIWgkJMTMz MzMzCgpXZSBkb24ndCB1c2UgdGFicyBsaWtlIHRoYXQgaW4gb3VyIGRlZmluaXRpb25zLgoKCj4g KyNkZWZpbmUgQlhUX0RfQ1JfRFJQMF9EVU5JVDgJCQkweDEwMDAKPiArI2RlZmluZSBCWFRfRF9D Ul9EUlAwX0RVTklUOQkJCTB4MTIwMAo+ICsjZGVmaW5lIEJYVF9EX0NSX0RSUDBfRFVOSVRfTUFY CQkJNAo+ICsjZGVmaW5lIF9NTUlPX01DSEJBUl9EVU5JVCh4LCBhLCBiKSBfTU1JTyhNQ0hCQVJf TUlSUk9SX0JBU0VfU05CICsKPiAoYSkgKyAoeCkqKChiKS0oYSkpKQo+ICsjZGVmaW5lIEJYVF9E X0NSX0RSUDBfRFVOSVQoeCkJX01NSU9fTUNIQkFSX0RVTklUKHgsCj4gQlhUX0RfQ1JfRFJQMF9E VU5JVDgsIEJYVF9EX0NSX0RSUDBfRFVOSVQ5KQoKQnV0IHRoZW4gQlhUX0RfQ1JfRFJQMF9EVU5J VCgxKSBtZWFucyBEVU5JVDkgaW5zdGVhZCBvZiBEVU5JVDEuLi4KVGhhdCdzIHZlcnkgdW5pbnR1 aXRpdmUuCgoKPiArI2RlZmluZSBCWFRfRFJBTV9DSEFOTkVMX0FDVElWRV9TSElGVAkJMTIKPiAr I2RlZmluZSBCWFRfRFJBTV9DSEFOTkVMX0FDVElWRV9NQVNLCQkweEYKClRoZXNlIHR3byBkZWZp bml0aW9ucyBkb24ndCBiZWxvbmcgdG8gdGhlIHJlZ2lzdGVyIGltbWVkaWF0ZWx5IGFib3ZlLgoK Cj4gKyNkZWZpbmUgQlhUX0RSQU1fUkFOS19NQVNLCQkJMHgzCj4gKyNkZWZpbmUgQlhUX0RSQU1f UkFOS19TSU5HTEUJCQkweDEKPiArI2RlZmluZSBCWFRfRFJBTV9SQU5LX0RVQUwJCQkweDMKPiAr Cj4gKy8qCj4gKyAqIFNLTCBtZW1vcnkgZnJlcXVlbnkgbXVsdGlwbGllciBpcyAyNjY2NjcgS0h6 ICgyNjYuNjcgTUh6KQoKcy9mcmVxdWVueS9mcmVxdWVuY3kvCgpBbHNvLCB0aGlzIGlzIG5vdCBo b3cgd2UgZG8gb25lLWxpbmUgY29tbWVudHMuCgpBbmQgbm93IHRoYXQgdGhlIG51bWJlciBpcyBp biBkZWNpbWFsIHdlIHByb2JhYmx5IGRvbid0IGV2ZW4gbmVlZCB0aGUKY29tbWVudCBoZXJlIHNp bmNlIHRoZSBkZWZpbml0aW9uIGlzIGEgbGl0dGxlIG1vcmUgb2J2aW91cy4KCj4gKyAqLwo+ICsj ZGVmaW5lCVNLTF9NRU1PUllfRlJFUV9NVUxUSVBMSUVSX0tIWgkJMjY2NjY3CgpXZSBkb24ndCB1 c2UgdGFicyBsaWtlIHRoYXQgaW4gb3VyIGRlZmluaXRpb25zLgoKCj4gKyNkZWZpbmUgU0tMX01D X0JJT1NfREFUQV8wXzBfMF9NQ0hCQVJfUENVCV9NTUlPKE1DSEJBUl9NSVJST1IKPiBfQkFTRV9T TkIgKyAweDVFMDQpCj4gKyNkZWZpbmUgU0tMX1JFUV9EQVRBX01BU0sJCQkoMHhGIDw8IDApCgpC bGFuayBsaW5lcyBzZXBhcmF0aW5nIGRpZmZlcmVudCByZWdpc3RlcnMgd291bGQgYmUgZ29vZC4K Cgo+ICsjZGVmaW5lIFNLTF9NQURfRElNTV9DSDBfMF8wXzBfTUNIQkFSX01DTUFJTglfTU1JTyhN Q0hCQVJfTUlSCj4gUk9SX0JBU0VfU05CICsgMHg1MDBDKQo+ICsjZGVmaW5lIFNLTF9NQURfRElN TV9DSDFfMF8wXzBfTUNIQkFSX01DTUFJTglfTU1JTyhNQ0hCQVJfTUlSCj4gUk9SX0JBU0VfU05C ICsgMHg1MDEwKQo+ICsjZGVmaW5lIFNLTF9EUkFNX1NJWkVfTUFTSwkJCTB4MUYKCjB4M0YKCgo+ ICsjZGVmaW5lIFNLTF9EUkFNX1NJWkVfTF9TSElGVAkJCTAKPiArI2RlZmluZSBTS0xfRFJBTV9T SVpFX1NfU0hJRlQJCQkxNgo+ICsjZGVmaW5lIFNLTF9EUkFNX1JBTktfTUFTSwkJCTB4MQo+ICsj ZGVmaW5lIFNLTF9EUkFNX1JBTktfTF9TSElGVAkJCTEwCj4gKyNkZWZpbmUgU0tMX0RSQU1fUkFO S19TX1NISUZUCQkJMjYKPiArI2RlZmluZSBTS0xfRFJBTV9SQU5LX1NJTkdMRQkJCTB4MAo+ICsj ZGVmaW5lIFNLTF9EUkFNX1JBTktfRFVBTAkJCTB4MQo+ICsKPiDCoC8qIFBsZWFzZSBzZWUgaHN3 X3JlYWRfZGNvbXAoKSBhbmQgaHN3X3dyaXRlX2Rjb21wKCkgYmVmb3JlIHVzaW5nCj4gdGhpcyBy ZWdpc3RlciwKPiDCoCAqIHNpbmNlIG9uIEhTVyB3ZSBjYW4ndCB3cml0ZSB0byBpdCB1c2luZyBJ OTE1X1dSSVRFLiAqLwo+IMKgI2RlZmluZSBEX0NPTVBfSFNXCQkJX01NSU8oTUNIQkFSX01JUlJP Ul9CQVNFX1MKPiBOQiArIDB4NUYwQykKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vaW50ZWwtZ2Z4Cg==