From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mahesh Kumar Subject: Re: [PATCH v7 7/8] drm/i915: Decode system memory bandwidth Date: Wed, 15 Feb 2017 20:30:13 +0530 Message-ID: References: <20161201154940.24446-1-mahesh1.kumar@intel.com> <20161201154940.24446-8-mahesh1.kumar@intel.com> <1481241313.2375.81.camel@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id CE8E36E956 for ; Wed, 15 Feb 2017 14:57:44 +0000 (UTC) In-Reply-To: <1481241313.2375.81.camel@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Paulo Zanoni , intel-gfx@lists.freedesktop.org Cc: maarten.lankhorst@intel.com List-Id: intel-gfx@lists.freedesktop.org SGksCgoKT24gRnJpZGF5IDA5IERlY2VtYmVyIDIwMTYgMDU6MjUgQU0sIFBhdWxvIFphbm9uaSB3 cm90ZToKPiBFbSBRdWksIDIwMTYtMTItMDEgw6BzIDIxOjE5ICswNTMwLCBNYWhlc2ggS3VtYXIg ZXNjcmV2ZXU6Cj4+IFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IHRvIGRlY29kZSBzeXN0ZW0gbWVt b3J5IGJhbmR3aWR0aAo+PiB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIGFyYml0cmF0ZWQgZGlzcGxh eSBtZW1vcnkgcGVyY2VudGFnZQo+PiBjYWxjdWxhdGlvbiBpbiBHRU45IGJhc2VkIHN5c3RlbS4K Pj4KPj4gQ2hhbmdlcyBmcm9tIHYxOgo+PiAgIC0gQWRkcmVzcyBjb21tZW50cyBmcm9tIFBhdWxv Cj4+ICAgLSBpbXBsZW1lbnQgZGVjb2RlIGZ1bmN0aW9uIGZvciBTS0wvS0JMIGFsc28KPj4gQ2hh bmdlcyBmcm9tIHYyOgo+PiAgIC0gUmV3cml0ZSB0aGUgY29kZSBhcyBwZXIgSFcgdGVhbSBpbnB1 dHMKPj4gICAtIEFkZHJlc3NlcyByZXZpZXcgY29tbWVudHMKPj4gQ2hhbmdlcyBmcm9tIHYzOgo+ PiAgIC0gRml4IGNvbXBpbGF0aW9uIHdhcm5pbmcKPj4KPj4gU2lnbmVkLW9mZi1ieTogTWFoZXNo IEt1bWFyIDxtYWhlc2gxLmt1bWFyQGludGVsLmNvbT4KPiBBcyBhIGdlbmVyYWwgY29tbWVudCwg aW5kZW50YXRpb24gaXMgd2VpcmQgb24gYWxsIG11bHRpLWxpbmUKPiBzdGF0ZW1lbnRzLiBBbHNv LCBtb3N0IGNvbW1lbnRzIGFyZSBtaXNzaW5nIHBlcmlvZHMgYW5kIGFyZSBub3QgODAtCj4gY29s dW1uIGFsaWduZWQuIEFuZCBhIGxvdCBvZiB0aGUgY29tbWVudHMganVzdCBzYXkgd2hhdCB0aGUg Y29kZQo+IGFscmVhZHkgZG9lcyBpbnN0ZWFkIG9mIGV4cGxhaW5pbmcgd2h5IHRoZSBjb2RlIGRv ZXMgd2hhdCBpdCBkb2VzLCBzbwo+IHBlcmhhcHMgd2UgY291bGQganVzdCByZW1vdmUgdGhlbS4g Q29tbWVudHMgc2hvdWxkIGV4cGxhaW4gd2h5IHRoZSBjb2RlCj4gaXMgd3JpdHRlbiB0aGUgd2F5 IGl0IGlzLCBub3QgdHJhbnNsYXRlIGZyb20gQyB0byBFbmdsaXNoLgo+Cj4KPj4gLS0tCj4+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyB8IDE3Mwo+PiArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaCB8ICAxMiArKysKPj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIHwgIDM3 ICsrKysrKysrKwo+PiAgIDMgZmlsZXMgY2hhbmdlZCwgMjIyIGluc2VydGlvbnMoKykKPj4KPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPj4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4+IGluZGV4IDFjNjg5YjYuLjBhYzcxMjIgMTAwNjQ0 Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+PiBAQCAtOTc5LDYgKzk3OSwxNzMgQEAgc3RhdGlj IHZvaWQgaW50ZWxfc2FuaXRpemVfb3B0aW9ucyhzdHJ1Y3QKPj4gZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCj4+ICAgCURSTV9ERUJVR19EUklWRVIoInVzZSBHUFUgc2VtcGFob3Jlcz8gJXNc biIsCj4+IHllc25vKGk5MTUuc2VtYXBob3JlcykpOwo+PiAgIH0KPj4gICAKPj4gK3N0YXRpYyBp bmxpbmUgZW51bSByYW5rIHNrbF9tZW1kZXZfZ2V0X2NoYW5uZWxfcmFuayh1aW50MzJfdCB2YWwp Cj4gV2h5IGlubGluZT8gVGhpcyBpcyBhbHJlYWR5IHN0YXRpYywgbGVhdmUgaXQgdXAgdG8gdGhl IGNvbXBpbGVyIHRvCj4gZGVjaWRlIGlmIGl0J3MgYmV0dGVyIHRvIGlubGluZSBvciBub3QuCnJl bW92ZWQgaW5saW5lIGluIG5ldyBzZXJpZXMKPgo+PiArewo+PiArCXVpbnQ4X3QgbF9yYW5rLCBz X3Jhbms7Cj4+ICsJdWludDhfdCBsX3NpemUsIHNfc2l6ZTsKPj4gKwllbnVtIHJhbmsgY2hfcmFu ayA9IERSQU1fUkFOS19TSU5HTEU7Cj4gT3B0aW9uYWwgc3VnZ2VzdGlvbjogZ2V0IHJpZCBvZiB0 aGlzIHZhcmlhYmxlLCBqdXN0IHJldHVybiB0aGUKPiBhcHByb3ByaWF0ZSB2YWx1ZXMgb25jZSB3 ZSBkaXNjb3ZlciB0aGVtLgpkb25lCj4KPj4gKwo+PiArCWxfc2l6ZSA9ICh2YWwgPj4gU0tMX0RS QU1fU0laRV9MX1NISUZUKSAmCj4+IFNLTF9EUkFNX1NJWkVfTUFTSzsKPj4gKwlzX3NpemUgPSAo dmFsID4+IFNLTF9EUkFNX1NJWkVfU19TSElGVCkgJgo+PiBTS0xfRFJBTV9TSVpFX01BU0s7Cj4+ ICsJbF9yYW5rID0gKHZhbCA+PiBTS0xfRFJBTV9SQU5LX0xfU0hJRlQpICYKPj4gU0tMX0RSQU1f UkFOS19NQVNLOwo+PiArCXNfcmFuayA9ICh2YWwgPj4gU0tMX0RSQU1fUkFOS19TX1NISUZUKSAm Cj4+IFNLTF9EUkFNX1JBTktfTUFTSzsKPiBWYWxpZGF0ZSBvdXIgYXNzdW1wdGlvbnM6Cj4KPiBX QVJOX09OKGxfc2l6ZSA9PSAwICYmIHNfc2l6ZSA9PSAwKTsKPgo+IE9yIHdlIGNvdWxkIGV2ZW4g ZG8gdGhlIGFwcHJvcHJpYXRlIGNoZWNrIGFuZCByZXR1cm4gRFJBTV9SQU5LX0lOVkFMSUQsCj4g YnV0IHRoZW4gd2UnZCBoYXZlIHRvIHJlc3RydWN0dXJlIGhvdyBvdXIgY2FsbGVyIGNhbGxzIHVz LCBtYXliZSBtb3ZpbmcKPiBzb21lIGNvZGUgdG8gdGhpcyBmdW5jdGlvbi4KbWFkZSB0aGUgYWRq dXN0bWVudAo+Cj4+ICsKPj4gKwkvKgo+PiArCSAqIElmIGFueSBvZiB0aGUgc2xvdCBoYXMgZHVh bCByYW5rIG1lbW9yeSBjb25zaWRlcgo+PiArCSAqIGR1YWwgcmFuayBtZW1vcnkgY2hhbm5lbAo+ PiArCSAqLwo+IFRoZSBjb21tZW50IHNheXMganVzdCB3aGF0IHRoZSBjb2RlIGFscmVhZHkgc2F5 cy4gV2hhdCB3b3VsZCBiZQo+IGludGVyZXN0aW5nIHRvIHNlZSBpbiB0aGUgY29tbWVudCBpcyBh biBleHBsYW5hdGlvbiBvZiB3aHkgd2UgZG8gaXQgdGhlCj4gd2F5IHdlIGRvLgp1cGRhdGVkCj4K Pj4gKwlpZiAobF9yYW5rID09IFNLTF9EUkFNX1JBTktfRFVBTCB8fCBzX3JhbmsgPT0KPj4gU0tM X0RSQU1fUkFOS19EVUFMKQo+PiArCQljaF9yYW5rID0gRFJBTV9SQU5LX0RVQUw7Cj4+Cj4+ICsK Pj4gKwkvKgo+PiArCSAqIElmIGJvdGggdGhlIHNsb3QgaGFzIHNpbmdsZSByYW5rIG1lbW9yeSB0 aGVuCj4+IGNvbmZpZ3VyYXRpb24KPj4gKwkgKiBpcyBkdWFsIHJhbmsgbWVtb3J5Cj4+ICsJICov Cj4gVGhlIGNvbW1lbnQgc2F5cyBqdXN0IHdoYXQgdGhlIGNvZGUgYWxyZWFkeSBzYXlzLiBXaGF0 IHdvdWxkIGJlCj4gaW50ZXJlc3RpbmcgdG8gc2VlIGluIHRoZSBjb21tZW50IGlzIGFuIGV4cGxh bmF0aW9uIG9mIHdoeSB3ZSBkbyBpdCB0aGUKPiB3YXkgd2UgZG8uCj4KPgo+PiArCWlmICgobF9z aXplICYmIGxfcmFuayA9PSBTS0xfRFJBTV9SQU5LX1NJTkdMRSkgJiYKPj4gKwkJKHNfc2l6ZSAm JiBzX3JhbmsgPT0gU0tMX0RSQU1fUkFOS19TSU5HTEUpKQo+PiArCQljaF9yYW5rID0gRFJBTV9S QU5LX0RVQUw7Cj4+ICsJcmV0dXJuIGNoX3Jhbms7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQK Pj4gK3NrbF9nZXRfbWVtZGV2X2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+PiArewo+PiArCXN0cnVjdCBtZW1kZXZfaW5mbyAqbWVtZGV2X2luZm8gPSAmZGV2X3ByaXYt Pm1lbWRldl9pbmZvOwo+PiArCXVpbnQzMl90IG1lbV9mcmVxX2toejsKPj4gKwl1aW50MzJfdCB2 YWw7Cj4+ICsJZW51bSByYW5rIGNoMF9yYW5rID0gRFJBTV9SQU5LX0lOVkFMSUQsIGNoMV9yYW5r ID0KPj4gRFJBTV9SQU5LX0lOVkFMSUQ7Cj4+ICsKPj4gKwl2YWwgPSBJOTE1X1JFQUQoU0tMX01D X0JJT1NfREFUQV8wXzBfMF9NQ0hCQVJfUENVKTsKPj4gKwltZW1fZnJlcV9raHogPSAodmFsICYg U0tMX1JFUV9EQVRBX01BU0spICoKPj4gKwkJCQlTS0xfTUVNT1JZX0ZSRVFfTVVMVElQTElFUl9L SFo7Cj4gT3B0aW9uYWwgc3VnZ2VzdGlvbjogcGVyaGFwcyBleHRlbmQgdGhlIG1lbW9yeV9mcmVx X211bHRpcGxpZXIgdG8gSFoKPiBhbmQgdGhlbiBsYXRlciBjdXQgdGhlIGxhc3QgMyBkaWdpdHMg c28gdGhlIHJvdW5kaW5nIGVycm9ycyBnZXQKPiByZXN0cmljdGVkIHRvIHRoZSB1bml0cyB3ZSds bCBjdXQ/IEFsc28sIGlmIHdlIGRvIHRoZSBtYXRoIHVzaW5nIHRoZSAiNAo+ICogbnVtIC8gMyIg d2UgY2FuIHRyeSB0byByZWR1Y2UgdGhlIHJvdW5kaW5nIGVycm9ycyBldmVuIG1vcmUuCj4KPiBJ IGdldCBhbm5veWVkIHRoYXQgaXQgc2F5cyBteSBzeXN0ZW0gYmFuZHdpZHRoIGlzIDI1NjAwMDMy LCB3aGlsZSB0aGUKPiBjb3JyZWN0IG51bWJlciBpcyBleGFjdGx5IDI1NjAwMDAwLgo+Cj4gVGhp cyBhcHBsaWVzIHRvIHRoZSBCWFQgY29kZSB0b28uCk1vZGlmaWVkIHRvIHdvcmsgb24gSHogJiB0 aGVuIGNvbnZlcnQgdG8gS0h6Cj4KPj4gKwo+PiArCXZhbCA9IEk5MTVfUkVBRChTS0xfTUFEX0RJ TU1fQ0gwXzBfMF8wX01DSEJBUl9NQ01BSU4pOwo+PiArCWlmICh2YWwgIT0gMHgwKSB7Cj4+ICsJ CW1lbWRldl9pbmZvLT5udW1fY2hhbm5lbHMrKzsKPj4gKwkJY2gwX3JhbmsgPSBza2xfbWVtZGV2 X2dldF9jaGFubmVsX3JhbmsodmFsKTsKPj4gKwl9Cj4gT3B0aW9uYWwgc3VnZ2VzdGlvbjoKPgo+ IEhlcmUncyBob3cgSSB3b3VsZCBoYXZlIGltcGxlbWVudGVkIHRoaXM6Cj4KPiBjaDBfcmFuayA9 IHNrbF9tZW1kZXZfZ2V0X2NoYW5uZWxfcmFuaygwKTsKPiBpZiAoY2gwX3JhbmsgIT0gRFJBTV9S QU5LX0lOVkFMSUQpCj4gCW1lbWRldl9pbmZvLT5udW1fY2hhbm5lbHMrKzsKPgo+IFRoaXMgd2F5 IHdlJ2QgbW92ZSBhbGwgdGhlIGxvZ2ljIGFyb3VuZCB0aGlzIHJlZ2lzdGVyIHRvCj4gc2tsX21l bWRldl9nZXRfY2hhbm5lbF9yYW5rKCksIGFuZCB3ZSdkIGFsc28gYmUgYWJsZSB0byBnZXQgcmlk IG9mIHRoZQo+IGluaXRpYWxpemF0aW9ucyBoZXJlLgo+Cj4gQnV0IHRoaXMgaXMganVzdCBhIHN1 Z2dlc3Rpb24gaW4gY2FzZSB5b3UgYWdyZWUgd2l0aCBtZS4gRmVlbCBmcmVlIHRvCj4gbGVhdmUg dGhlIGNvZGUgdGhlIHdheSBpdCBpcy4Kc3VnZ2VzdGlvbiB0YWtlbiA6KQo+Cj4+ICsKPj4gKwl2 YWwgPSBJOTE1X1JFQUQoU0tMX01BRF9ESU1NX0NIMV8wXzBfMF9NQ0hCQVJfTUNNQUlOKTsKPj4g KwlpZiAodmFsICE9IDB4MCkgewo+PiArCQltZW1kZXZfaW5mby0+bnVtX2NoYW5uZWxzKys7Cj4+ ICsJCWNoMV9yYW5rID0gc2tsX21lbWRldl9nZXRfY2hhbm5lbF9yYW5rKHZhbCk7Cj4+ICsJfQo+ PiArCj4+ICsJaWYgKG1lbWRldl9pbmZvLT5udW1fY2hhbm5lbHMgPT0gMCkgewo+PiArCQlEUk1f RVJST1IoIk51bWJlciBvZiBtZW0gY2hhbm5lbHMgYXJlIHplcm9cbiIpOwo+IEknbSBub3QgYSBu YXRpdmUgRW5nbGlzaCBzcGVha2VyLCBidXQgSSB3b3VsZCBzdXBwb3NlIHRoYXQgcy9hcmUvaXMv Cj4gd291bGQgbWFrZSB0aGUgc2VudGVuY2UgY29ycmVjdCAodGhlIG51bWJlciBpcyB6ZXJvKS4g V2hpbGUgYXQgaXQsIHdoeQo+IG5vdCBzL21lbS9tZW1vcnkvIHRvbyB0byBtYWtlIHRoZSBjb2Rl IHNvdW5kIGEgbGl0dGxlIG1vcmUgZm9ybWFsPwo+Cj4KPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ ICsJfQo+PiArCj4+ICsJbWVtZGV2X2luZm8tPmJhbmR3aWR0aF9rYnBzID0gKG1lbWRldl9pbmZv LT5udW1fY2hhbm5lbHMgKgo+PiArCQkJCQkJCW1lbV9mcmVxX2toego+PiAqIDgpOwo+PiArCj4+ ICsJaWYgKG1lbWRldl9pbmZvLT5iYW5kd2lkdGhfa2JwcyA9PSAwKSB7Cj4+ICsJCURSTV9FUlJP UigiQ291bGRuJ3QgZ2V0IHN5c3RlbSBtZW1vcnkgYmFuZHdpZHRoXG4iKTsKPj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4+ICsJfQo+PiArCW1lbWRldl9pbmZvLT52YWxpZCA9IHRydWU7Cj4gTXkgcHJl dmlvdXMgY29tbWVudCBhYm91dCBvd25lcnNoaXAgb2YgdGhpcyB2YXJpYWJsZSBzdGlsbCBhcHBs aWVzLgo+Ck5vdyBhc3NpZ25pbmcgbWVtZGV2X2luZm8tPiB2YWxpZCB0byB0cnVlLCBvbmx5IGlm IGJhbmR3aWR0aCAmIHJhbmsgYm90aCAKdGhlIGluZm9ybWF0aW9uIGFyZSB2YWxpZAo+PiArCj4+ ICsJLyoKPj4gKwkgKiBJZiBhbnkgb2YgY2hhbm5lbCBpcyBzaW5nbGUgcmFuayBjaGFubmVsLAo+ IEFnYWluLCBub3QgYSBuYXRpdmUgRW5nbGlzaCBzcGVha2VyLCBidXQgImFueSBvZiBjaGFubmVs IiBzb3VuZHMKPiBpbmNvcnJlY3QgdG8gbWUuIEJ1dCBhbnl3YXksIHRoZSBjb21tZW50IG9ubHkg c2F5cyB3aGF0IHRoZSBjb2RlCj4gYWxyZWFkeSBzYXlzLiBXaHkgZG8gd2UgZG8gaXQgbGlrZSB0 aGlzPwo+Cj4KPj4gKwkgKiBjb25zaWRlciBzaW5nbGUgcmFuayBtZW1vcnkKPj4gKwkgKi8KPj4g KwlpZiAoY2gwX3JhbmsgPT0gRFJBTV9SQU5LX1NJTkdMRSB8fCBjaDFfcmFuayA9PQo+PiBEUkFN X1JBTktfU0lOR0xFKQo+PiArCQltZW1kZXZfaW5mby0+cmFuayA9IERSQU1fUkFOS19TSU5HTEU7 Cj4+ICsJZWxzZQo+PiArCQltZW1kZXZfaW5mby0+cmFuayA9IG1heChjaDBfcmFuaywgY2gxX3Jh bmspOwo+IEkgY2FuJ3QgdGhpbmsgb2YgYW55IHNpdHVhdGlvbiB3aGVyZSB0aGlzIHdvdWxkbid0 IGVuZCB3aXRoCj4gRFJBTV9SQU5LX0RVQUwsIHNvIHdlIG1pZ2h0IGp1c3QgYXNzaWduIGl0IHRv IHRoZSB2YXJpYWJsZS4KSWYgdGhlcmUgaXMgb25seSBvbmUgZHVhbC1yYW5rIERSQU0gaW5zdGFs bGVkIG91dCBvZiA0LWRpbW1zLCB0aGVuIAplaXRoZXIgY2gwX3Jhbmsgb3IgY2gxX3Jhbmsgd2ls bCBiZSBJOTE1X0RSQU1fRFVBTF9SQU5LICYgb3RoZXIgd2lsbCBiZSAKSU5WQUxJRCwKaW4gdGhh dCBjYXNlIHdlJ2xsIGhhdmUgcmFuayBhcyBEUkFNX1JBTktfRFVBTC4KPgo+PiArCj4+ICsJcmV0 dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQKPj4gK2J4dF9nZXRfbWVtZGV2X2luZm8o c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiArewo+PiArCXN0cnVjdCBtZW1k ZXZfaW5mbyAqbWVtZGV2X2luZm8gPSAmZGV2X3ByaXYtPm1lbWRldl9pbmZvOwo+PiArCXVpbnQz Ml90IGRyYW1fY2hhbm5lbHM7Cj4+ICsJdWludDMyX3QgbWVtX2ZyZXFfa2h6LCB2YWw7Cj4+ICsJ dWludDhfdCBudW1fYWN0aXZlX2NoYW5uZWxzOwo+PiArCWludCBpOwo+PiArCj4+ICsJdmFsID0g STkxNV9SRUFEKEJYVF9QX0NSX01DX0JJT1NfUkVRXzBfMF8wKTsKPj4gKwltZW1fZnJlcV9raHog PSAoKHZhbCAmIEJYVF9SRVFfREFUQV9NQVNLKSAqCj4+ICsJCQkJQlhUX01FTU9SWV9GUkVRX01V TFRJUExJRVJfS0haKTsKPj4gKwo+PiArCWRyYW1fY2hhbm5lbHMgPSAodmFsID4+IEJYVF9EUkFN X0NIQU5ORUxfQUNUSVZFX1NISUZUKSAmCj4+ICsJCQkJCUJYVF9EUkFNX0NIQU5ORUxfQUNUSVZF X01BU0sKPj4gOwo+PiArCW51bV9hY3RpdmVfY2hhbm5lbHMgPSBod2VpZ2h0MzIoZHJhbV9jaGFu bmVscyk7Cj4+ICsKPj4gKwltZW1kZXZfaW5mby0+YmFuZHdpZHRoX2ticHMgPSAobWVtX2ZyZXFf a2h6ICoKPj4gbnVtX2FjdGl2ZV9jaGFubmVscyAqIDQpOwo+PiArCj4+ICsJaWYgKG1lbWRldl9p bmZvLT5iYW5kd2lkdGhfa2JwcyA9PSAwKSB7Cj4+ICsJCURSTV9FUlJPUigiQ291bGRuJ3QgZ2V0 IHN5c3RlbSBtZW1vcnkgYmFuZHdpZHRoXG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJ fQo+PiArCW1lbWRldl9pbmZvLT52YWxpZCA9IHRydWU7Cj4+ICsKPj4gKwkvKgo+PiArCSAqIE5v dyByZWFkIGVhY2ggRFVOSVQ4LzkvMTAvMTEgdG8gY2hlY2sgdGhlIHJhbmsgb2YgZWFjaAo+PiBk aW1tcy4KPj4gKwkgKi8KPj4gKwlmb3IgKGkgPSAwOyBpIDwgQlhUX0RfQ1JfRFJQMF9EVU5JVF9N QVg7IGkrKykgewo+PiArCQl2YWwgPSBJOTE1X1JFQUQoQlhUX0RfQ1JfRFJQMF9EVU5JVChpKSk7 Cj4+ICsJCWlmICh2YWwgIT0gMHhGRkZGRkZGRikgewo+PiArCQkJdWludDhfdCByYW5rOwo+PiAr CQkJZW51bSByYW5rIGNoX3Jhbms7Cj4+ICsKPj4gKwkJCW1lbWRldl9pbmZvLT5udW1fY2hhbm5l bHMrKzsKPj4gKwkJCXJhbmsgPSB2YWwgJiBCWFRfRFJBTV9SQU5LX01BU0s7Cj4gU2hvdWxkbid0 IHRoZSBjb2RlIGhlcmUgYmU6ICJpZiBvbmUgb2YgdGhlc2UgdHdvIGJpdHMgYXJlIGVuYWJsZWQg dGhlbgo+IHdlJ3JlIFJBTktfU0lOR0xFLCBpZiBib3RoIGJpdHMgYXJlIGVuYWJsZWQgdGhlbiB3 ZSdyZSBSQU5LX0RVQUwsCj4gb3RoZXJ3aXNlIGludmFsaWQiPyBJZiBub3QsIHdoeT8KPgo+IElu IG90aGVyIHdvcmRzOiBpcyByYW5rPTB4MiByZWFsbHkgaW52YWxpZD8gSXNuJ3QgaXQganVzdCBz aW5nbGUgcmFuaz8KcmFuaz0weDIgaXMgYW4gaW52YWxpZCBlbnRyeS4gIkVuYWJsZSBSYW5rIDA6 IE11c3QgYmUgc2V0IHRvIDEgdG8gZW5hYmxlIAp1c2Ugb2YgdGhpcyByYW5rLiBOb3RlOiBTZXR0 aW5nIHRoaXMgYml0IHRvIDAgaXMgbm90IGEgZnVuY3Rpb25hbCBtb2RlIgoiRW5hYmxlIFJhbmsg MCIgYml0IGNhbid0IGJlIGEgMCBhbnlob3cuCj4KPgo+PiArCQkJaWYgKHJhbmsgPT0gQlhUX0RS QU1fUkFOS19TSU5HTEUpCj4+ICsJCQkJY2hfcmFuayA9IERSQU1fUkFOS19TSU5HTEU7Cj4+ICsJ CQllbHNlIGlmIChyYW5rID09IEJYVF9EUkFNX1JBTktfRFVBTCkKPj4gKwkJCQljaF9yYW5rID0g RFJBTV9SQU5LX0RVQUw7Cj4+ICsJCQllbHNlCj4+ICsJCQkJY2hfcmFuayA9IERSQU1fUkFOS19J TlZBTElEOwo+PiArCj4+ICsJCQkvKgo+PiArCQkJICogSWYgYW55IG9mIGNoYW5uZWwgaXMgaGF2 aW5nIHNpbmdsZSByYW5rCj4+IG1lbW9yeQo+IEFnYWluLCAiYW55IG9mIGNoYW5uZWwiLgo+Cj4+ ICsJCQkgKiBjb25zaWRlciBtZW1vcnkgYXMgc2luZ2xlIHJhbmsKPj4gKwkJCSAqLwo+PiArCQkJ aWYgKG1lbWRldl9pbmZvLT5yYW5rID09IERSQU1fUkFOS19JTlZBTElEKQo+PiArCQkJCW1lbWRl dl9pbmZvLT5yYW5rID0gY2hfcmFuazsKPj4gKwkJCWVsc2UgaWYgKGNoX3JhbmsgPT0gRFJBTV9S QU5LX1NJTkdMRSkKPj4gKwkJCQltZW1kZXZfaW5mby0+cmFuayA9Cj4+IERSQU1fUkFOS19TSU5H TEU7Cj4+ICsJCX0KPj4gKwl9Cj4gU0tMIHJldHVybnMgLUVJTlZBTCBpZiB3ZSBlbmQgdXAgd2l0 aCBEUkFNX1JBTktfSU5WQUxJRCBpbiBtZW1kZXZfaW5mby0KPj4gcmFuay4gSSB0aGluayB3ZSBj b3VsZCBkbyB0aGF0IGluIEJYVCB0b286IGVpdGhlciB3ZSBoYXZlIGFsbCB0aGUKPiBpbmZvcm1h dGlvbiB0byBub3QgYXBwbHkgdGhlIHdvcmthcm91bmQsIG9yIHdlIGdpdmUgdXAuCmRvbmUsIHJl dHVybmluZyBpbnZhbGlkIGlmIHJhbmsgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS4KPgo+ Cj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkCj4+ICtpbnRlbF9nZXRf bWVtZGV2X2luZm8oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+PiArewo+PiAr CXN0cnVjdCBtZW1kZXZfaW5mbyAqbWVtZGV2X2luZm8gPSAmZGV2X3ByaXYtPm1lbWRldl9pbmZv Owo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwltZW1kZXZfaW5mby0+dmFsaWQgPSBmYWxzZTsKPj4g KwltZW1kZXZfaW5mby0+cmFuayA9IERSQU1fUkFOS19JTlZBTElEOwo+PiArCW1lbWRldl9pbmZv LT5udW1fY2hhbm5lbHMgPSAwOwo+PiArCj4+ICsJaWYgKCFJU19HRU45KGRldl9wcml2KSkKPj4g KwkJcmV0dXJuOwo+PiArCj4+ICsJaWYgKElTX0JST1hUT04oZGV2X3ByaXYpKQo+PiArCQlyZXQg PSBieHRfZ2V0X21lbWRldl9pbmZvKGRldl9wcml2KTsKPj4gKwllbHNlCj4+ICsJCXJldCA9IHNr bF9nZXRfbWVtZGV2X2luZm8oZGV2X3ByaXYpOwo+PiArCWlmIChyZXQpCj4+ICsJCXJldHVybjsK Pj4gKwo+PiArCURSTV9ERUJVR19EUklWRVIoIkRSQU0gYmFuZHdpZHRoOiAldSBLQnBzIHRvdGFs LWNoYW5uZWxzOgo+PiAldVxuIiwKPj4gKwkJCQltZW1kZXZfaW5mby0+YmFuZHdpZHRoX2ticHMs Cj4+ICsJCQkJbWVtZGV2X2luZm8tPm51bV9jaGFubmVscyk7Cj4+ICsJaWYgKG1lbWRldl9pbmZv LT5yYW5rID09IERSQU1fUkFOS19JTlZBTElEKQo+PiArCQlEUk1fSU5GTygiQ291bmxkIG5vdCBn ZXQgbWVtb3J5IHJhbmsgaW5mb1xuIik7Cj4gU3BlbGxpbmcgbWlzdGFrZSBoZXJlLiBBbmQgc2lu Y2UgeW91IHVzZSAiQ291bGRuJ3QiIGluc3RlYWQgb2YgIkNvdWxkCj4gbm90IiBpbiBhbGwgdGhl IG90aGVyIG1lc3NhZ2VzLCBJJ2Qga2VlcCB0aGUgc2FtZSBwYXR0ZXJuLgo+Cj4gQnV0IGlmIHlv dSBhY2NlcHQgbXkgc3VnZ2VzdGlvbiBhYm92ZSwgd2UnbGwgbmV2ZXIgcHJpbnQgdGhpcyBtZXNz YWdlCj4gYW55d2F5Lgo+Cj4KPj4gKwllbHNlIHsKPj4gKwkJRFJNX0RFQlVHX0RSSVZFUigiRFJB TSByYW5rOiAlcyByYW5rXG4iLAo+PiArCQkJCShtZW1kZXZfaW5mby0+cmFuayA9PQo+PiBEUkFN X1JBTktfRFVBTCkgPwo+PiArCQkJCQkJImR1YWwiIDogInNpbmdsZSIpOwo+PiArCX0KPj4gK30K Pj4gKwo+PiArCj4gVHdvIHdoaXRlIHNwYWNlcyBoZXJlLgo+Cj4KPj4gICAvKioKPj4gICAgKiBp OTE1X2RyaXZlcl9pbml0X2h3IC0gc2V0dXAgc3RhdGUgcmVxdWlyaW5nIGRldmljZSBhY2Nlc3MK Pj4gICAgKiBAZGV2X3ByaXY6IGRldmljZSBwcml2YXRlCj4+IEBAIC0xMDgxLDYgKzEyNDgsMTIg QEAgc3RhdGljIGludCBpOTE1X2RyaXZlcl9pbml0X2h3KHN0cnVjdAo+PiBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPj4gICAJCQlEUk1fREVCVUdfRFJJVkVSKCJjYW4ndCBlbmFibGUgTVNJ Iik7Cj4+ICAgCX0KPj4gICAKPj4gKwkvKgo+PiArCSAqIEZpbGwgdGhlIG1lbWRldiBzdHJ1Y3R1 cmUgdG8gZ2V0IHRoZSBzeXN0ZW0gcmF3IGJhbmR3aWR0aAo+PiArCSAqIFRoaXMgd2lsbCBiZSB1 c2VkIGJ5IFdNIGFsZ29yaXRobSwgdG8gaW1wbGVtZW50IEdFTjkKPj4gYmFzZWQgV0EKPj4gKwkg Ki8KPj4gKwlpbnRlbF9nZXRfbWVtZGV2X2luZm8oZGV2X3ByaXYpOwo+PiArCj4+ICAgCXJldHVy biAwOwo+PiAgIAo+PiAgIG91dF9nZ3R0Ogo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPj4g aW5kZXggYjc4ZGM5YS4uNjkyMTNhNCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+ IEBAIC0yMjk3LDYgKzIyOTcsMTggQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewo+PiAgIAkJ Ym9vbCBkaXN0cnVzdF9iaW9zX3dtOwo+PiAgIAl9IHdtOwo+PiAgIAo+PiArCXN0cnVjdCBtZW1k ZXZfaW5mbyB7Cj4+ICsJCWJvb2wgdmFsaWQ7Cj4+ICsJCXVpbnQzMl90IGJhbmR3aWR0aF9rYnBz Owo+PiArCQl1aW50OF90IG51bV9jaGFubmVsczsKPj4gKwkJZW51bSByYW5rIHsKPj4gKwkJCURS QU1fUkFOS19JTlZBTElEID0gMCwKPj4gKwkJCURSQU1fUkFOS19TSU5HTEUsCj4+ICsJCQlEUkFN X1JBTktfRFVBTAo+PiArCQl9IHJhbms7Cj4gVGhpcyB3YXMgcHJldmlvdXNseSBhbiBhbm9ueW1v dXMgZW51bSAoZW51bSB7IC4uLiB9IHJhbms7KSwgYnV0IG5vdwo+IGl0J3MgImVudW0gcmFuayIs IHdoaWNoIGlzIHRvbyBnZW5lcmljIGZvciBhIC5oIGZpbGUuIEVpdGhlciB1c2UgYSBtb3JlCj4g c3BlY2lmaWMgbmFtZSAoZW51bSBtZW1kZXZfcmFuaz8pIG9yIHRyeSB0byBtYWtlIGl0IGFub255 bW91cyBhZ2Fpbi4KY2hhbmdlZCB0byBtZW1kZXZfcmFuay4KPgo+PiArCX0gbWVtZGV2X2luZm87 Cj4+ICsKPj4gKwo+PiAgIAlzdHJ1Y3QgaTkxNV9ydW50aW1lX3BtIHBtOwo+PiAgIAo+PiAgIAlz dHJ1Y3Qgewo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPj4gaW5kZXggNjQ5MzE5ZC4uZTdl ZmRkMCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCj4+IEBAIC04MDE1LDYgKzgwMTUs NDMgQEAgZW51bSB7Cj4+ICAgI2RlZmluZSAgRENfU1RBVEVfREVCVUdfTUFTS19DT1JFUwkoMTw8 MCkKPj4gICAjZGVmaW5lICBEQ19TVEFURV9ERUJVR19NQVNLX01FTU9SWV9VUAkoMTw8MSkKPj4g ICAKPj4gKyNkZWZpbmUgQlhUX1BfQ1JfTUNfQklPU19SRVFfMF8wXzAJX01NSU8oTUNIQkFSX01J UlJPUl9CQVNFX1MKPj4gTkIgKyAweDcxMTQpCj4+ICsjZGVmaW5lIEJYVF9SRVFfREFUQV9NQVNL CQkJMHgzRgo+PiArI2RlZmluZSBCWFRfRFJBTV9BQ1RJVkVfQ0hBTk5FTF9TSElGVAkJMTIKPj4g KyNkZWZpbmUgQlhUX0RSQU1fQUNUSVZFX0NIQU5ORUxfTUFTSwkJMHhGCj4gV2UncmUgbm90IHVz aW5nIHRoZXNlIHR3byBkZWZpbml0aW9ucyBhbnl3aGVyZS4KVGhlc2UgYXJlIGR1cGxpY2F0ZSBm b3IgZGVmaW5pdGlvbiBiZWxvdywgbXkgbWlzdGFrZSwgcmVtb3ZpbmcgdGhlbS4KPgo+PiArLyoK Pj4gKyAqIEJJT1MgcHJvZ3JhbXMgdGhpcyBmaWVsZCBvZiBSRVFfREFUQSBbNTowXSBpbiBpbnRl Z2VyCj4+ICsgKiBtdWx0aXBsZSBvZiAxMzMzMzMgS0h6ICgxMzMuMzNNSHopCj4+ICsgKi8KPiBO b3cgdGhhdCB3ZSdyZSB1c2luZyBkZWNpbWFsIG9uIHRoZSBkZWZpbml0aW9uLCBJIGRvbid0IHRo aW5rIHRoaXMKPiBjb21tZW50IGlzIHVzZWZ1bC4KPgo+Cj4+ICsjZGVmaW5lCUJYVF9NRU1PUllf RlJFUV9NVUxUSVBMSUVSX0tIWgkJMTMzMzMzCj4gV2UgZG9uJ3QgdXNlIHRhYnMgbGlrZSB0aGF0 IGluIG91ciBkZWZpbml0aW9ucy4KPgo+Cj4+ICsjZGVmaW5lIEJYVF9EX0NSX0RSUDBfRFVOSVQ4 CQkJMHgxMDAwCj4+ICsjZGVmaW5lIEJYVF9EX0NSX0RSUDBfRFVOSVQ5CQkJMHgxMjAwCj4+ICsj ZGVmaW5lIEJYVF9EX0NSX0RSUDBfRFVOSVRfTUFYCQkJNAo+PiArI2RlZmluZSBfTU1JT19NQ0hC QVJfRFVOSVQoeCwgYSwgYikgX01NSU8oTUNIQkFSX01JUlJPUl9CQVNFX1NOQiArCj4+IChhKSAr ICh4KSooKGIpLShhKSkpCj4+ICsjZGVmaW5lIEJYVF9EX0NSX0RSUDBfRFVOSVQoeCkJX01NSU9f TUNIQkFSX0RVTklUKHgsCj4+IEJYVF9EX0NSX0RSUDBfRFVOSVQ4LCBCWFRfRF9DUl9EUlAwX0RV TklUOSkKPiBCdXQgdGhlbiBCWFRfRF9DUl9EUlAwX0RVTklUKDEpIG1lYW5zIERVTklUOSBpbnN0 ZWFkIG9mIERVTklUMS4uLgo+IFRoYXQncyB2ZXJ5IHVuaW50dWl0aXZlLgpub3cgY2hhbmdlZCBp dCB0byBwYXNzIDgtMTEgdG8gdGhpcyBtYWNybywgKGZyb20gc3RhcnQgdG8gZW5kIG9mIGR1bml0 KQo+Cj4KPj4gKyNkZWZpbmUgQlhUX0RSQU1fQ0hBTk5FTF9BQ1RJVkVfU0hJRlQJCTEyCj4+ICsj ZGVmaW5lIEJYVF9EUkFNX0NIQU5ORUxfQUNUSVZFX01BU0sJCTB4Rgo+IFRoZXNlIHR3byBkZWZp bml0aW9ucyBkb24ndCBiZWxvbmcgdG8gdGhlIHJlZ2lzdGVyIGltbWVkaWF0ZWx5IGFib3ZlLgo+ Cj4KPj4gKyNkZWZpbmUgQlhUX0RSQU1fUkFOS19NQVNLCQkJMHgzCj4+ICsjZGVmaW5lIEJYVF9E UkFNX1JBTktfU0lOR0xFCQkJMHgxCj4+ICsjZGVmaW5lIEJYVF9EUkFNX1JBTktfRFVBTAkJCTB4 Mwo+PiArCj4+ICsvKgo+PiArICogU0tMIG1lbW9yeSBmcmVxdWVueSBtdWx0aXBsaWVyIGlzIDI2 NjY2NyBLSHogKDI2Ni42NyBNSHopCj4gcy9mcmVxdWVueS9mcmVxdWVuY3kvCj4KPiBBbHNvLCB0 aGlzIGlzIG5vdCBob3cgd2UgZG8gb25lLWxpbmUgY29tbWVudHMuCj4KPiBBbmQgbm93IHRoYXQg dGhlIG51bWJlciBpcyBpbiBkZWNpbWFsIHdlIHByb2JhYmx5IGRvbid0IGV2ZW4gbmVlZCB0aGUK PiBjb21tZW50IGhlcmUgc2luY2UgdGhlIGRlZmluaXRpb24gaXMgYSBsaXR0bGUgbW9yZSBvYnZp b3VzLgo+Cj4+ICsgKi8KPj4gKyNkZWZpbmUJU0tMX01FTU9SWV9GUkVRX01VTFRJUExJRVJfS0ha CQkyNjY2NjcKPiBXZSBkb24ndCB1c2UgdGFicyBsaWtlIHRoYXQgaW4gb3VyIGRlZmluaXRpb25z Lgo+Cj4KPj4gKyNkZWZpbmUgU0tMX01DX0JJT1NfREFUQV8wXzBfMF9NQ0hCQVJfUENVCV9NTUlP KE1DSEJBUl9NSVJST1IKPj4gX0JBU0VfU05CICsgMHg1RTA0KQo+PiArI2RlZmluZSBTS0xfUkVR X0RBVEFfTUFTSwkJCSgweEYgPDwgMCkKPiBCbGFuayBsaW5lcyBzZXBhcmF0aW5nIGRpZmZlcmVu dCByZWdpc3RlcnMgd291bGQgYmUgZ29vZC4KPgo+Cj4+ICsjZGVmaW5lIFNLTF9NQURfRElNTV9D SDBfMF8wXzBfTUNIQkFSX01DTUFJTglfTU1JTyhNQ0hCQVJfTUlSCj4+IFJPUl9CQVNFX1NOQiAr IDB4NTAwQykKPj4gKyNkZWZpbmUgU0tMX01BRF9ESU1NX0NIMV8wXzBfMF9NQ0hCQVJfTUNNQUlO CV9NTUlPKE1DSEJBUl9NSVIKPj4gUk9SX0JBU0VfU05CICsgMHg1MDEwKQo+PiArI2RlZmluZSBT S0xfRFJBTV9TSVpFX01BU0sJCQkweDFGCj4gMHgzRgpmaXhlZC4KcGF0Y2ggaXMgcHVzaGVkIGFz IGEgbmV3IHNlcmllcyBAIApodHRwczovL3BhdGNod29yay5mcmVlZGVza3RvcC5vcmcvc2VyaWVz LzE4ODQyLwoKUmVnYXJkcywKLU1haGVzaAoKPgo+Cj4+ICsjZGVmaW5lIFNLTF9EUkFNX1NJWkVf TF9TSElGVAkJCTAKPj4gKyNkZWZpbmUgU0tMX0RSQU1fU0laRV9TX1NISUZUCQkJMTYKPj4gKyNk ZWZpbmUgU0tMX0RSQU1fUkFOS19NQVNLCQkJMHgxCj4+ICsjZGVmaW5lIFNLTF9EUkFNX1JBTktf TF9TSElGVAkJCTEwCj4+ICsjZGVmaW5lIFNLTF9EUkFNX1JBTktfU19TSElGVAkJCTI2Cj4+ICsj ZGVmaW5lIFNLTF9EUkFNX1JBTktfU0lOR0xFCQkJMHgwCj4+ICsjZGVmaW5lIFNLTF9EUkFNX1JB TktfRFVBTAkJCTB4MQo+PiArCj4+ICAgLyogUGxlYXNlIHNlZSBoc3dfcmVhZF9kY29tcCgpIGFu ZCBoc3dfd3JpdGVfZGNvbXAoKSBiZWZvcmUgdXNpbmcKPj4gdGhpcyByZWdpc3RlciwKPj4gICAg KiBzaW5jZSBvbiBIU1cgd2UgY2FuJ3Qgd3JpdGUgdG8gaXQgdXNpbmcgSTkxNV9XUklURS4gKi8K Pj4gICAjZGVmaW5lIERfQ09NUF9IU1cJCQlfTU1JTyhNQ0hCQVJfTUlSUk9SX0JBU0VfUwo+PiBO QiArIDB4NUYwQykKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=