From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH 5/5] drm/amdgpu: Refactor GPU reset for XGMI hive case. Date: Thu, 22 Nov 2018 12:16:53 +0100 Message-ID: <8e9f51a4-7f0a-c435-c507-34eea96e0b08@gmail.com> References: <1542823821-15631-1-git-send-email-andrey.grodzovsky@amd.com> <1542823821-15631-6-git-send-email-andrey.grodzovsky@amd.com> <5f257299-4833-82b7-83ec-75bf02c4e441@amd.com> Reply-To: christian.koenig-5C7GfCeVMHo@public.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <5f257299-4833-82b7-83ec-75bf02c4e441-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "Grodzovsky, Andrey" , "Liu, Shaoyun" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: "Deucher, Alexander" , "Liu, Monk" SG93IGFib3V0IHVzaW5nIGEgbG9jayBwZXIgaGl2ZSBhbmQgdGhlbiBhY3F1aXJpbmcgdGhhdCB3 aXRoIHRyeWxvY2soKSAKaW5zdGVhZD8KClRoaXMgd2F5IHlvdSBzaG91bGQgYXQgbGVhc3QgY2F0 Y2ggY2FzZXMgd2hlcmUgbXVsdGlwbGUgY2F1c2VzIHRyeSB0byAKcmVzZXQgdGhlIHNhbWUgaGl2 ZSBhdCB0aGUgc2FtZSB0aW1lLiBUcnVlIHRoYXQgdGhlcmUgaXMgc3RpbGwgc29tZSAKcmFjaW5n IGludm9sdmVkLCBidXQgaXQncyBhdCBsZWFzdCBhIGdvb2Qgc3RhcnQuCgoKCkFkZGl0aW9uYWwg dG8gdGhhdCBJIHdvdWxkIHRyeSBpbXByb3ZlIHRoZSBwcmUsIG1pZGRsZSwgcG9zdCBoYW5kbGlu ZyAKdG93YXJkcyBjaGVja2luZyBpZiB3ZSBtYWRlIHNvbWUgcHJvZ3Jlc3MgaW4gYmV0d2Vlbi4K CkluIG90aGVyIHdvcmRzIHdlIHN0b3AgYWxsIHNjaGVkdWxlcnMgaW4gdGhlIHByZSBoYW5kbGlu ZyBhbmQgZGlzY29ubmVjdCAKdGhlIHNjaGVkdWxlciBmZW5jZXMgZnJvbSB0aGUgaGFyZHdhcmUg ZmVuY2UgbGlrZSBJIGRpZCBpbiBwYXRjaCAKImRybS9zY2hlZDogZml4IHRpbWVvdXQgaGFuZGxp bmcgdjIiLgoKVGhlbiBiZWZvcmUgd2UgZG8gdGhlIGFjdHVhbCByZXNldCBpbiB0aGUgbWlkZGxl IGhhbmRsaW5nIHdlIGNoZWNrIGlmIAp0aGUgb2ZmZW5kaW5nIGpvYiBoYXMgY29tcGxldGVkIG9y IGF0IGxlYXN0IG1hZGUgc29tZSBwcm9ncmVzcyBpbiB0aGUgCm1lYW50aW1lLiBJbiB0aGUgY2Fz ZSBvZiBhIG1hbnVhbCByZXNldCB3ZSBza2lwIHRoYXQgYmVjYXVzZSB3ZSBkb24ndCAKaGF2ZSBh biBvZmZlbmRpbmcgam9iIHRvIGNoZWNrLgoKSW4gdGhlIHBvc3QgaGFuZGxpbmcgd2Ugc3RpdGNo IGV2ZXJ5dGhpbmcgdG9nZXRoZXIgYWdhaW4gYW5kIHN0YXJ0IHRoZSAKc2NoZWR1bGVyIHRvIGdv IG9uIHdpdGggam9iIHN1Ym1pc3Npb24uCgpDaHJpc3RpYW4uCgpBbSAyMS4xMS4xOCB1bSAyMzow MiBzY2hyaWViIEdyb2R6b3Zza3ksIEFuZHJleToKPiBEZXBlbmRzIHdoYXQgd2FzIHRoZSByZWFz b24gZm9yIHRyaWdnZXJpbmcgdGhlIHJlc2V0IGZvciB0aGF0IG5vZGUgaG93Cj4gZG8gd2Uga25v dyA/Cj4gSWYgdGhlIHJlYXNvbiB3YXMgUkFTIGVycm9yIHRoYXQgcHJvYmFibHkgbm90IGhhcmQg dG8gY2hlY2sgYWxsIGVycm9ycwo+IGFyZSBjbGVhcmVkLCBidXQKPiBpZiB0aGUgcmVhc29uIHdh cyBqb2IgdGltZW91dCBvbiB0aGF0IHNwZWNpZmljIG5vZGUgSSB3aWxsIG5lZWQgdG8KPiByZWNo ZWNrIHRoYXQgbm8gam9icyBhcmUgbGVmdCBpbiBpbmNvbXBsZXRlIHN0YXRlCj4gc3RhdGUuIEFu ZCBpZiB0aGUgcmVhc29uIGlzIG1hbnVhbCBncHUgcmVzZXQgdHJpZ2dlciBmcm9tIHN5c2ZzLCB0 aGVuCj4gd2hhdCdzIHRoZSBwb2xpY3kgPwo+IFNvdW5kcyB0byBtZSBpdCdzIGp1c3QgZWFzaWVy IHRvIGdvIGFoZWFkIGFuZCBhbGxvdyBhbGwgdGhlIHBlbmRpbmcKPiByZXNldHMgdG8gcHJvY2Vl ZCB1bmxlc3MgdGhlcmUgaXMKPiBhIGNsZWFyIGFuZCBxdWljayBjcml0ZXJpYSB5b3UgY2FuIGNo ZWNrIGFmdGVyIHlvdSBncmFiIHRoZSBtdXRleCB0aGVuCj4gc3VyZSAtIGJ1dCBJIGRvbid0IGtu b3cgd2hhdCBpdCB3b3VsZCBiZS4KPgo+IEFuZHJleQo+Cj4gT24gMTEvMjEvMjAxOCAwMzo0OSBQ TSwgTGl1LCBTaGFveXVuIHdyb3RlOgo+PiBJIHNhdyB5b3UgdXNlIHRoZcKgIGdsb2JhbCB4Z21p X211dGV4IHRvIHByZXZlbnQgY29uY3VycmVudCByZXNldCB0byBiZQo+PiB0cmlnZ2VyZWQgYnkg ZGlmZmVyZW50IG5vZGVzICzCoCBidXQgYWZ0ZXIgdGhlwqAgbXV0ZXggYmVlbiByZWxlYXNlZCAs Cj4+IGN1cnJlbnQgbm9kZSBtYXkgZ3JhcCB0aGUgbXV0ZXggYW5kIGNvbnRpbnVlIHRvIGRvIGFu b3RoZXIgcmVzZXQgLgo+PiBNYXliZcKgIHdlIHNob3VsZCBjaGVjayB0aGUgR1BVIHN0YXR1cyBh bmTCoCBza2lwIHRoZcKgIHJlc2V0IGluIHRoaXMgY2FzZQo+PiBzaW5jZSB0aGXCoCBHUFUgbWF5 IGFscmVhZHkgYmUgaW4gZ29vZCBzdGF0ZSAuCj4+Cj4+IFJlZ2FyZHMKPj4KPj4gc2hhb3l1bi5s aXUKPj4KPj4gT24gMjAxOC0xMS0yMSAxOjEwIHAubS4sIEFuZHJleSBHcm9kem92c2t5IHdyb3Rl Ogo+Pj4gRm9yIFhHTUkgaGl2ZSBjYXNlIGRvIHJlc2V0IGluIHN0ZXBzIHdoZXJlIGVhY2ggc3Rl cCBpdGVyYXRlcyBvdmVyCj4+PiBhbGwgZGV2cyBpbiBoaXZlLiBUaGlzIGVzcGVjaWFsbHkgaW1w b3J0YW50IGZvciBhc2ljIHJlc2V0Cj4+PiBzaW5jZSBhbGwgUFNQIEZXIGluIGhpdmUgbXVzdCBj b21lIHVwIHdpdGhpbiBhIGxpbWl0ZWQgdGltZQo+Pj4gKGFyb3VuZCAxIHNlYykgdG8gcHJvcGVy cGx5IG5lZ290aWF0ZSB0aGUgbGluay4KPj4+IERvIHRoaXMgYnkgIHJlZmFjdG9yaW5nICBhbWRn cHVfZGV2aWNlX2dwdV9yZWNvdmVyIGFuZCBhbWRncHVfZGV2aWNlX3Jlc2V0Cj4+PiBpbnRvIHBy ZV9hc2ljX3Jlc2V0LCBhc2ljX3Jlc2V0IGFuZCBwb3N0X2FzaWNfcmVzZXQgZnVuY3Rpb25zIHdo ZXJlIGlzIHBhcnQKPj4+IGlzIGV4ZWN0dWVkIGZvciBhbGwgdGhlIEdQVXMgaW4gdGhlIGhpdmUg YmVmb3JlIGdvaW5nIHRvIHRoZSBuZXh0IHN0ZXAuCj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogQW5k cmV5IEdyb2R6b3Zza3kgPGFuZHJleS5ncm9kem92c2t5QGFtZC5jb20+Cj4+PiAtLS0KPj4+ICAg ICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaCAgICAgICAgfCAgIDUgKy0KPj4+ ICAgICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmMgfCAzNzUgKysr KysrKysrKysrKysrKysrKystLS0tLS0tLS0KPj4+ICAgICAyIGZpbGVzIGNoYW5nZWQsIDI2NCBp bnNlcnRpb25zKCspLCAxMTYgZGVsZXRpb25zKC0pCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1LmgKPj4+IGluZGV4IDRlZjVmN2EuLmJkMDZkNDUgMTAwNjQ0Cj4+PiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaAo+Pj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgKPj4+IEBAIC0xMDI2LDYgKzEwMjYsOSBAQCBzdHJ1Y3Qg YW1kZ3B1X2RldmljZSB7Cj4+PiAgICAgCXVuc2lnbmVkIGxvbmcgbGFzdF9tbV9pbmRleDsKPj4+ ICAgICAJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9ncHVfcmVzZXQ7Cj4+PiAg ICAgCXN0cnVjdCBtdXRleCAgbG9ja19yZXNldDsKPj4+ICsKPj4+ICsJaW50IGFzaWNfcmVzZXRf cmVzOwo+Pj4gKwlpbnQgcmVzY2hlZDsKPj4+ICAgICB9Owo+Pj4gICAgIAo+Pj4gICAgIHN0YXRp YyBpbmxpbmUgc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFtZGdwdV90dG1fYWRldihzdHJ1Y3QgdHRt X2JvX2RldmljZSAqYmRldikKPj4+IEBAIC0xMjMyLDcgKzEyMzUsNyBAQCBzdHJ1Y3QgYW1kZ3B1 X2hpdmVfaW5mbzsKPj4+ICAgICAKPj4+ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICphbWRncHVfeGdt aV9nZXRfYWRldl9saXN0X2hhbmRsZShzdHJ1Y3QgYW1kZ3B1X2hpdmVfaW5mbyAqaGl2ZSk7Cj4+ PiAgICAgc3RydWN0IGFtZGdwdV9oaXZlX2luZm8gKmFtZGdwdV9nZXRfeGdtaV9oaXZlKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2KTsKPj4+IC1pbnQgYW1kZ3B1X3hnbWlfdXBkYXRlX3RvcG9s b2d5KHN0cnVjdCBhbWRncHVfaGl2ZV9pbmZvICpoaXZlKTsKPj4+ICtpbnQgYW1kZ3B1X3hnbWlf dXBkYXRlX3RvcG9sb2d5KHN0cnVjdCBhbWRncHVfaGl2ZV9pbmZvICpoaXZlLCBzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldik7Cj4+PiAgICAgaW50IGFtZGdwdV94Z21pX2FkZF9kZXZpY2Uoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpOwo+Pj4gICAgIAo+Pj4gICAgIC8qCj4+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jIGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jCj4+PiBpbmRleCBjYjA2ZTY4Li44 ZTk0ZDdmIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X2RldmljZS5jCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2 aWNlLmMKPj4+IEBAIC0zMTU3LDg2ICszMTU3LDYgQEAgc3RhdGljIGludCBhbWRncHVfZGV2aWNl X3JlY292ZXJfdnJhbShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4+ICAgICAJcmV0dXJu IDA7Cj4+PiAgICAgfQo+Pj4gICAgIAo+Pj4gLS8qKgo+Pj4gLSAqIGFtZGdwdV9kZXZpY2VfcmVz ZXQgLSByZXNldCBBU0lDL0dQVSBmb3IgYmFyZS1tZXRhbCBvciBwYXNzdGhyb3VnaAo+Pj4gLSAq Cj4+PiAtICogQGFkZXY6IGFtZGdwdSBkZXZpY2UgcG9pbnRlcgo+Pj4gLSAqCj4+PiAtICogYXR0 ZW1wdCB0byBkbyBzb2Z0LXJlc2V0IG9yIGZ1bGwtcmVzZXQgYW5kIHJlaW5pdGlhbGl6ZSBBc2lj Cj4+PiAtICogcmV0dXJuIDAgbWVhbnMgc3VjY2VlZGVkIG90aGVyd2lzZSBmYWlsZWQKPj4+IC0g Ki8KPj4+IC1zdGF0aWMgaW50IGFtZGdwdV9kZXZpY2VfcmVzZXQoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYpCj4+PiAtewo+Pj4gLQlib29sIG5lZWRfZnVsbF9yZXNldCwgdnJhbV9sb3N0ID0g MDsKPj4+IC0JaW50IHI7Cj4+PiAtCj4+PiAtCW5lZWRfZnVsbF9yZXNldCA9IGFtZGdwdV9kZXZp Y2VfaXBfbmVlZF9mdWxsX3Jlc2V0KGFkZXYpOwo+Pj4gLQo+Pj4gLQlpZiAoIW5lZWRfZnVsbF9y ZXNldCkgewo+Pj4gLQkJYW1kZ3B1X2RldmljZV9pcF9wcmVfc29mdF9yZXNldChhZGV2KTsKPj4+ IC0JCXIgPSBhbWRncHVfZGV2aWNlX2lwX3NvZnRfcmVzZXQoYWRldik7Cj4+PiAtCQlhbWRncHVf ZGV2aWNlX2lwX3Bvc3Rfc29mdF9yZXNldChhZGV2KTsKPj4+IC0JCWlmIChyIHx8IGFtZGdwdV9k ZXZpY2VfaXBfY2hlY2tfc29mdF9yZXNldChhZGV2KSkgewo+Pj4gLQkJCURSTV9JTkZPKCJzb2Z0 IHJlc2V0IGZhaWxlZCwgd2lsbCBmYWxsYmFjayB0byBmdWxsIHJlc2V0IVxuIik7Cj4+PiAtCQkJ bmVlZF9mdWxsX3Jlc2V0ID0gdHJ1ZTsKPj4+IC0JCX0KPj4+IC0JfQo+Pj4gLQo+Pj4gLQlpZiAo bmVlZF9mdWxsX3Jlc2V0KSB7Cj4+PiAtCQlyID0gYW1kZ3B1X2RldmljZV9pcF9zdXNwZW5kKGFk ZXYpOwo+Pj4gLQo+Pj4gLXJldHJ5Ogo+Pj4gLQkJciA9IGFtZGdwdV9hc2ljX3Jlc2V0KGFkZXYp Owo+Pj4gLQkJLyogcG9zdCBjYXJkICovCj4+PiAtCQlhbWRncHVfYXRvbV9hc2ljX2luaXQoYWRl di0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7Cj4+PiAtCj4+PiAtCQlpZiAoIXIpIHsKPj4+IC0J CQlkZXZfaW5mbyhhZGV2LT5kZXYsICJHUFUgcmVzZXQgc3VjY2VlZGVkLCB0cnlpbmcgdG8gcmVz dW1lXG4iKTsKPj4+IC0JCQlyID0gYW1kZ3B1X2RldmljZV9pcF9yZXN1bWVfcGhhc2UxKGFkZXYp Owo+Pj4gLQkJCWlmIChyKQo+Pj4gLQkJCQlnb3RvIG91dDsKPj4+IC0KPj4+IC0JCQl2cmFtX2xv c3QgPSBhbWRncHVfZGV2aWNlX2NoZWNrX3ZyYW1fbG9zdChhZGV2KTsKPj4+IC0JCQlpZiAodnJh bV9sb3N0KSB7Cj4+PiAtCQkJCURSTV9FUlJPUigiVlJBTSBpcyBsb3N0IVxuIik7Cj4+PiAtCQkJ CWF0b21pY19pbmMoJmFkZXYtPnZyYW1fbG9zdF9jb3VudGVyKTsKPj4+IC0JCQl9Cj4+PiAtCj4+ PiAtCQkJciA9IGFtZGdwdV9ndHRfbWdyX3JlY292ZXIoCj4+PiAtCQkJCSZhZGV2LT5tbWFuLmJk ZXYubWFuW1RUTV9QTF9UVF0pOwo+Pj4gLQkJCWlmIChyKQo+Pj4gLQkJCQlnb3RvIG91dDsKPj4+ IC0KPj4+IC0JCQlyID0gYW1kZ3B1X2RldmljZV9md19sb2FkaW5nKGFkZXYpOwo+Pj4gLQkJCWlm IChyKQo+Pj4gLQkJCQlyZXR1cm4gcjsKPj4+IC0KPj4+IC0JCQlyID0gYW1kZ3B1X2RldmljZV9p cF9yZXN1bWVfcGhhc2UyKGFkZXYpOwo+Pj4gLQkJCWlmIChyKQo+Pj4gLQkJCQlnb3RvIG91dDsK Pj4+IC0KPj4+IC0JCQlpZiAodnJhbV9sb3N0KQo+Pj4gLQkJCQlhbWRncHVfZGV2aWNlX2ZpbGxf cmVzZXRfbWFnaWMoYWRldik7Cj4+PiAtCQl9Cj4+PiAtCX0KPj4+IC0KPj4+IC1vdXQ6Cj4+PiAt CWlmICghcikgewo+Pj4gLQkJYW1kZ3B1X2lycV9ncHVfcmVzZXRfcmVzdW1lX2hlbHBlcihhZGV2 KTsKPj4+IC0JCXIgPSBhbWRncHVfaWJfcmluZ190ZXN0cyhhZGV2KTsKPj4+IC0JCWlmIChyKSB7 Cj4+PiAtCQkJZGV2X2VycihhZGV2LT5kZXYsICJpYiByaW5nIHRlc3QgZmFpbGVkICglZCkuXG4i LCByKTsKPj4+IC0JCQlyID0gYW1kZ3B1X2RldmljZV9pcF9zdXNwZW5kKGFkZXYpOwo+Pj4gLQkJ CW5lZWRfZnVsbF9yZXNldCA9IHRydWU7Cj4+PiAtCQkJZ290byByZXRyeTsKPj4+IC0JCX0KPj4+ IC0JfQo+Pj4gLQo+Pj4gLQlpZiAoIXIpCj4+PiAtCQlyID0gYW1kZ3B1X2RldmljZV9yZWNvdmVy X3ZyYW0oYWRldik7Cj4+PiAtCj4+PiAtCXJldHVybiByOwo+Pj4gLX0KPj4+ICAgICAKPj4+ICAg ICAvKioKPj4+ICAgICAgKiBhbWRncHVfZGV2aWNlX3Jlc2V0X3NyaW92IC0gcmVzZXQgQVNJQyBm b3IgU1ItSU9WIHZmCj4+PiBAQCAtMzMzNSwzMSArMzI1NSwxNiBAQCBib29sIGFtZGdwdV9kZXZp Y2Vfc2hvdWxkX3JlY292ZXJfZ3B1KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+Pj4gICAg IAkJcmV0dXJuIGZhbHNlOwo+Pj4gICAgIH0KPj4+ICAgICAKPj4+IC0vKioKPj4+IC0gKiBhbWRn cHVfZGV2aWNlX2dwdV9yZWNvdmVyIC0gcmVzZXQgdGhlIGFzaWMgYW5kIHJlY292ZXIgc2NoZWR1 bGVyCj4+PiAtICoKPj4+IC0gKiBAYWRldjogYW1kZ3B1IGRldmljZSBwb2ludGVyCj4+PiAtICog QGpvYjogd2hpY2ggam9iIHRyaWdnZXIgaGFuZwo+Pj4gLSAqCj4+PiAtICogQXR0ZW1wdCB0byBy ZXNldCB0aGUgR1BVIGlmIGl0IGhhcyBodW5nIChhbGwgYXNpY3MpLgo+Pj4gLSAqIFJldHVybnMg MCBmb3Igc3VjY2VzcyBvciBhbiBlcnJvciBvbiBmYWlsdXJlLgo+Pj4gLSAqLwo+Pj4gLWludCBh bWRncHVfZGV2aWNlX2dwdV9yZWNvdmVyKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4g LQkJCSAgICAgIHN0cnVjdCBhbWRncHVfam9iICpqb2IpCj4+PiAtewo+Pj4gLQlpbnQgaSwgciwg cmVzY2hlZDsKPj4+IC0KPj4+IC0JZGV2X2luZm8oYWRldi0+ZGV2LCAiR1BVIHJlc2V0IGJlZ2lu IVxuIik7Cj4+PiAtCj4+PiAtCW11dGV4X2xvY2soJmFkZXYtPmxvY2tfcmVzZXQpOwo+Pj4gLQlh dG9taWNfaW5jKCZhZGV2LT5ncHVfcmVzZXRfY291bnRlcik7Cj4+PiAtCWFkZXYtPmluX2dwdV9y ZXNldCA9IDE7Cj4+PiAgICAgCj4+PiAtCS8qIEJsb2NrIGtmZCAqLwo+Pj4gLQlhbWRncHVfYW1k a2ZkX3ByZV9yZXNldChhZGV2KTsKPj4+ICtzdGF0aWMgaW50IGFtZGdwdV9kZXZpY2VfcHJlX2Fz aWNfcmVzZXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+PiArCQkJCQlzdHJ1Y3QgYW1k Z3B1X2pvYiAqam9iLAo+Pj4gKwkJCQkJYm9vbCAqbmVlZF9mdWxsX3Jlc2V0X2FyZykKPj4+ICt7 Cj4+PiArCWludCBpLCByID0gMDsKPj4+ICsJYm9vbCBuZWVkX2Z1bGxfcmVzZXQgID0gKm5lZWRf ZnVsbF9yZXNldF9hcmc7Cj4+PiAgICAgCj4+PiAgICAgCS8qIGJsb2NrIFRUTSAqLwo+Pj4gLQly ZXNjaGVkID0gdHRtX2JvX2xvY2tfZGVsYXllZF93b3JrcXVldWUoJmFkZXYtPm1tYW4uYmRldik7 Cj4+PiArCWFkZXYtPnJlc2NoZWQgPSB0dG1fYm9fbG9ja19kZWxheWVkX3dvcmtxdWV1ZSgmYWRl di0+bW1hbi5iZGV2KTsKPj4+ICAgICAKPj4+ICAgICAJLyogYmxvY2sgYWxsIHNjaGVkdWxlcnMg YW5kIHJlc2V0IGdpdmVuIGpvYidzIHJpbmcgKi8KPj4+ICAgICAJZm9yIChpID0gMDsgaSA8IEFN REdQVV9NQVhfUklOR1M7ICsraSkgewo+Pj4gQEAgLTMzNzksMTAgKzMyODQsMTIxIEBAIGludCBh bWRncHVfZGV2aWNlX2dwdV9yZWNvdmVyKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4g ICAgIAkJYW1kZ3B1X2ZlbmNlX2RyaXZlcl9mb3JjZV9jb21wbGV0aW9uKHJpbmcpOwo+Pj4gICAg IAl9Cj4+PiAgICAgCj4+PiAtCWlmIChhbWRncHVfc3Jpb3ZfdmYoYWRldikpCj4+PiAtCQlyID0g YW1kZ3B1X2RldmljZV9yZXNldF9zcmlvdihhZGV2LCBqb2IgPyBmYWxzZSA6IHRydWUpOwo+Pj4g LQllbHNlCj4+PiAtCQlyID0gYW1kZ3B1X2RldmljZV9yZXNldChhZGV2KTsKPj4+ICsJaWYgKCFh bWRncHVfc3Jpb3ZfdmYoYWRldikpIHsKPj4+ICsKPj4+ICsJCWlmICghbmVlZF9mdWxsX3Jlc2V0 KQo+Pj4gKwkJCW5lZWRfZnVsbF9yZXNldCA9IGFtZGdwdV9kZXZpY2VfaXBfbmVlZF9mdWxsX3Jl c2V0KGFkZXYpOwo+Pj4gKwo+Pj4gKwkJaWYgKCFuZWVkX2Z1bGxfcmVzZXQpIHsKPj4+ICsJCQlh bWRncHVfZGV2aWNlX2lwX3ByZV9zb2Z0X3Jlc2V0KGFkZXYpOwo+Pj4gKwkJCXIgPSBhbWRncHVf ZGV2aWNlX2lwX3NvZnRfcmVzZXQoYWRldik7Cj4+PiArCQkJYW1kZ3B1X2RldmljZV9pcF9wb3N0 X3NvZnRfcmVzZXQoYWRldik7Cj4+PiArCQkJaWYgKHIgfHwgYW1kZ3B1X2RldmljZV9pcF9jaGVj a19zb2Z0X3Jlc2V0KGFkZXYpKSB7Cj4+PiArCQkJCURSTV9JTkZPKCJzb2Z0IHJlc2V0IGZhaWxl ZCwgd2lsbCBmYWxsYmFjayB0byBmdWxsIHJlc2V0IVxuIik7Cj4+PiArCQkJCW5lZWRfZnVsbF9y ZXNldCA9IHRydWU7Cj4+PiArCQkJfQo+Pj4gKwkJfQo+Pj4gKwo+Pj4gKwkJaWYgKG5lZWRfZnVs bF9yZXNldCkKPj4+ICsJCQlyID0gYW1kZ3B1X2RldmljZV9pcF9zdXNwZW5kKGFkZXYpOwo+Pj4g Kwo+Pj4gKwkJKm5lZWRfZnVsbF9yZXNldF9hcmcgPSBuZWVkX2Z1bGxfcmVzZXQ7Cj4+PiArCX0K Pj4+ICsKPj4+ICsJcmV0dXJuIHI7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgYW1kZ3B1 X2RvX2FzaWNfcmVzZXQoc3RydWN0IGFtZGdwdV9oaXZlX2luZm8gKmhpdmUsCj4+PiArCQkJICAg ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRldmljZV9saXN0X2hhbmRsZSwKPj4+ICsJCQkgICAgICAg Ym9vbCAqbmVlZF9mdWxsX3Jlc2V0X2FyZykKPj4+ICt7Cj4+PiArCXN0cnVjdCBhbWRncHVfZGV2 aWNlICp0bXBfYWRldiA9IE5VTEw7Cj4+PiArCWJvb2wgbmVlZF9mdWxsX3Jlc2V0ID0gKm5lZWRf ZnVsbF9yZXNldF9hcmcsIHZyYW1fbG9zdCA9IGZhbHNlOwo+Pj4gKwlpbnQgciA9IDA7Cj4+PiAr Cj4+PiArCS8qCj4+PiArCSAqIEFTSUMgcmVzZXQgaGFzIHRvIGJlIGRvbmUgb24gYWxsIEhHTUkg aGl2ZSBub2RlcyBBU0FQCj4+PiArCSAqIHRvIGFsbG93IHByb3BlciBsaW5rcyBuZWdvdGlhdGlv biBpbiBGVyAod2l0aGluIDEgc2VjKQo+Pj4gKwkgKi8KPj4+ICsJaWYgKG5lZWRfZnVsbF9yZXNl dCkgewo+Pj4gKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfYWRldiwgZGV2aWNlX2xpc3RfaGFu ZGxlLCBnbWMueGdtaS5oZWFkKSB7Cj4+PiArCQkJciA9IGFtZGdwdV9hc2ljX3Jlc2V0KHRtcF9h ZGV2KTsKPj4+ICsJCQlpZiAocikKPj4+ICsJCQkJRFJNX1dBUk4oIkFTSUMgcmVzZXQgZmFpbGVk IHdpdGggZXJyIHIsICVkIGZvciBkcm0gZGV2LCAlcyIsCj4+PiArCQkJCQkgciwgdG1wX2FkZXYt PmRkZXYtPnVuaXF1ZSk7Cj4+PiArCQl9Cj4+PiArCX0KPj4+ICsKPj4+ICsKPj4+ICsJbGlzdF9m b3JfZWFjaF9lbnRyeSh0bXBfYWRldiwgZGV2aWNlX2xpc3RfaGFuZGxlLCBnbWMueGdtaS5oZWFk KSB7Cj4+PiArCQlpZiAobmVlZF9mdWxsX3Jlc2V0KSB7Cj4+PiArCQkJLyogcG9zdCBjYXJkICov Cj4+PiArCQkJaWYgKGFtZGdwdV9hdG9tX2FzaWNfaW5pdCh0bXBfYWRldi0+bW9kZV9pbmZvLmF0 b21fY29udGV4dCkpCj4+PiArCQkJCURSTV9XQVJOKCJhc2ljIGF0b20gaW5pdCBmYWlsZWQhIik7 Cj4+PiArCj4+PiArCQkJaWYgKCFyKSB7Cj4+PiArCQkJCWRldl9pbmZvKHRtcF9hZGV2LT5kZXYs ICJHUFUgcmVzZXQgc3VjY2VlZGVkLCB0cnlpbmcgdG8gcmVzdW1lXG4iKTsKPj4+ICsJCQkJciA9 IGFtZGdwdV9kZXZpY2VfaXBfcmVzdW1lX3BoYXNlMSh0bXBfYWRldik7Cj4+PiArCQkJCWlmIChy KQo+Pj4gKwkJCQkJZ290byBvdXQ7Cj4+PiArCj4+PiArCQkJCXZyYW1fbG9zdCA9IGFtZGdwdV9k ZXZpY2VfY2hlY2tfdnJhbV9sb3N0KHRtcF9hZGV2KTsKPj4+ICsJCQkJaWYgKHZyYW1fbG9zdCkg ewo+Pj4gKwkJCQkJRFJNX0VSUk9SKCJWUkFNIGlzIGxvc3QhXG4iKTsKPj4+ICsJCQkJCWF0b21p Y19pbmMoJnRtcF9hZGV2LT52cmFtX2xvc3RfY291bnRlcik7Cj4+PiArCQkJCX0KPj4+ICsKPj4+ ICsJCQkJciA9IGFtZGdwdV9ndHRfbWdyX3JlY292ZXIoCj4+PiArCQkJCQkmdG1wX2FkZXYtPm1t YW4uYmRldi5tYW5bVFRNX1BMX1RUXSk7Cj4+PiArCQkJCWlmIChyKQo+Pj4gKwkJCQkJZ290byBv dXQ7Cj4+PiArCj4+PiArCQkJCXIgPSBhbWRncHVfZGV2aWNlX2Z3X2xvYWRpbmcodG1wX2FkZXYp Owo+Pj4gKwkJCQlpZiAocikKPj4+ICsJCQkJCXJldHVybiByOwo+Pj4gKwo+Pj4gKwkJCQlyID0g YW1kZ3B1X2RldmljZV9pcF9yZXN1bWVfcGhhc2UyKHRtcF9hZGV2KTsKPj4+ICsJCQkJaWYgKHIp Cj4+PiArCQkJCQlnb3RvIG91dDsKPj4+ICsKPj4+ICsJCQkJaWYgKHZyYW1fbG9zdCkKPj4+ICsJ CQkJCWFtZGdwdV9kZXZpY2VfZmlsbF9yZXNldF9tYWdpYyh0bXBfYWRldik7Cj4+PiArCj4+PiAr CQkJCS8qIFVwZGF0ZSBQU1AgRlcgdG9wb2xvZ3kgYWZ0ZXIgcmVzZXQgKi8KPj4+ICsJCQkJaWYg KHRtcF9hZGV2LT5nbWMueGdtaS5udW1fcGh5c2ljYWxfbm9kZXMgPiAxKQo+Pj4gKwkJCQkJciA9 IGFtZGdwdV94Z21pX3VwZGF0ZV90b3BvbG9neShoaXZlLCB0bXBfYWRldik7Cj4+PiArCQkJfQo+ Pj4gKwkJfQo+Pj4gKwo+Pj4gKwo+Pj4gK291dDoKPj4+ICsJCWlmICghcikgewo+Pj4gKwkJCWFt ZGdwdV9pcnFfZ3B1X3Jlc2V0X3Jlc3VtZV9oZWxwZXIodG1wX2FkZXYpOwo+Pj4gKwkJCXIgPSBh bWRncHVfaWJfcmluZ190ZXN0cyh0bXBfYWRldik7Cj4+PiArCQkJaWYgKHIpIHsKPj4+ICsJCQkJ ZGV2X2Vycih0bXBfYWRldi0+ZGV2LCAiaWIgcmluZyB0ZXN0IGZhaWxlZCAoJWQpLlxuIiwgcik7 Cj4+PiArCQkJCXIgPSBhbWRncHVfZGV2aWNlX2lwX3N1c3BlbmQodG1wX2FkZXYpOwo+Pj4gKwkJ CQluZWVkX2Z1bGxfcmVzZXQgPSB0cnVlOwo+Pj4gKwkJCQlyID0gLUVBR0FJTjsKPj4+ICsJCQkJ Z290byBlbmQ7Cj4+PiArCQkJfQo+Pj4gKwkJfQo+Pj4gKwo+Pj4gKwkJaWYgKCFyKQo+Pj4gKwkJ CXIgPSBhbWRncHVfZGV2aWNlX3JlY292ZXJfdnJhbSh0bXBfYWRldik7Cj4+PiArCQllbHNlCj4+ PiArCQkJdG1wX2FkZXYtPmFzaWNfcmVzZXRfcmVzID0gcjsKPj4+ICsJfQo+Pj4gKwo+Pj4gK2Vu ZDoKPj4+ICsJKm5lZWRfZnVsbF9yZXNldF9hcmcgPSBuZWVkX2Z1bGxfcmVzZXQ7Cj4+PiArCXJl dHVybiByOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBhbWRncHVfZGV2aWNlX3Bvc3Rf YXNpY19yZXNldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+ICsJCQkJCSAgc3RydWN0 IGFtZGdwdV9qb2IgKmpvYikKPj4+ICt7Cj4+PiArCWludCBpOwo+Pj4gICAgIAo+Pj4gICAgIAlm b3IgKGkgPSAwOyBpIDwgQU1ER1BVX01BWF9SSU5HUzsgKytpKSB7Cj4+PiAgICAgCQlzdHJ1Y3Qg YW1kZ3B1X3JpbmcgKnJpbmcgPSBhZGV2LT5yaW5nc1tpXTsKPj4+IEBAIC0zMzk0LDcgKzM0MTAs NyBAQCBpbnQgYW1kZ3B1X2RldmljZV9ncHVfcmVjb3ZlcihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiwKPj4+ICAgICAJCSAqIG9yIGFsbCByaW5ncyAoaW4gdGhlIGNhc2UgQGpvYiBpcyBOVUxM KQo+Pj4gICAgIAkJICogYWZ0ZXIgYWJvdmUgYW1kZ3B1X3Jlc2V0IGFjY29tcGxpc2hlZAo+Pj4g ICAgIAkJICovCj4+PiAtCQlpZiAoKCFqb2IgfHwgam9iLT5iYXNlLnNjaGVkID09ICZyaW5nLT5z Y2hlZCkgJiYgIXIpCj4+PiArCQlpZiAoKCFqb2IgfHwgam9iLT5iYXNlLnNjaGVkID09ICZyaW5n LT5zY2hlZCkgJiYgIWFkZXYtPmFzaWNfcmVzZXRfcmVzKQo+Pj4gICAgIAkJCWRybV9zY2hlZF9q b2JfcmVjb3ZlcnkoJnJpbmctPnNjaGVkKTsKPj4+ICAgICAKPj4+ICAgICAJCWt0aHJlYWRfdW5w YXJrKHJpbmctPnNjaGVkLnRocmVhZCk7Cj4+PiBAQCAtMzQwNCwyMSArMzQyMCwxNTAgQEAgaW50 IGFtZGdwdV9kZXZpY2VfZ3B1X3JlY292ZXIoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+ PiAgICAgCQlkcm1faGVscGVyX3Jlc3VtZV9mb3JjZV9tb2RlKGFkZXYtPmRkZXYpOwo+Pj4gICAg IAl9Cj4+PiAgICAgCj4+PiAtCXR0bV9ib191bmxvY2tfZGVsYXllZF93b3JrcXVldWUoJmFkZXYt Pm1tYW4uYmRldiwgcmVzY2hlZCk7Cj4+PiArCXR0bV9ib191bmxvY2tfZGVsYXllZF93b3JrcXVl dWUoJmFkZXYtPm1tYW4uYmRldiwgYWRldi0+cmVzY2hlZCk7Cj4+PiAgICAgCj4+PiAtCWlmIChy KSB7Cj4+PiAtCQkvKiBiYWQgbmV3cywgaG93IHRvIHRlbGwgaXQgdG8gdXNlcnNwYWNlID8gKi8K Pj4+IC0JCWRldl9pbmZvKGFkZXYtPmRldiwgIkdQVSByZXNldCglZCkgZmFpbGVkXG4iLCBhdG9t aWNfcmVhZCgmYWRldi0+Z3B1X3Jlc2V0X2NvdW50ZXIpKTsKPj4+IC0JCWFtZGdwdV92Zl9lcnJv cl9wdXQoYWRldiwgQU1ER0lNX0VSUk9SX1ZGX0dQVV9SRVNFVF9GQUlMLCAwLCByKTsKPj4+IC0J fSBlbHNlIHsKPj4+IC0JCWRldl9pbmZvKGFkZXYtPmRldiwgIkdQVSByZXNldCglZCkgc3VjY2Vl ZGVkIVxuIixhdG9taWNfcmVhZCgmYWRldi0+Z3B1X3Jlc2V0X2NvdW50ZXIpKTsKPj4+IC0JfQo+ Pj4gKwlhZGV2LT5hc2ljX3Jlc2V0X3JlcyA9IGFkZXYtPnJlc2NoZWQgPSAwOwo+Pj4gKwo+Pj4g K30KPj4+ICAgICAKPj4+ICtzdGF0aWMgdm9pZCBhbWRncHVfbG9ja19hZGV2KHN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2KQo+Pj4gK3sKPj4+ICsJbXV0ZXhfbG9jaygmYWRldi0+bG9ja19yZXNl dCk7Cj4+PiArCWF0b21pY19pbmMoJmFkZXYtPmdwdV9yZXNldF9jb3VudGVyKTsKPj4+ICsJYWRl di0+aW5fZ3B1X3Jlc2V0ID0gMTsKPj4+ICsJLyogQmxvY2sga2ZkICovCj4+PiArCWFtZGdwdV9h bWRrZmRfcHJlX3Jlc2V0KGFkZXYpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBhbWRn cHVfdW5sb2NrX2FkZXYoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4+PiArewo+Pj4gICAg IAkvKnVubG9jayBrZmQgKi8KPj4+ICAgICAJYW1kZ3B1X2FtZGtmZF9wb3N0X3Jlc2V0KGFkZXYp Owo+Pj4gICAgIAlhbWRncHVfdmZfZXJyb3JfdHJhbnNfYWxsKGFkZXYpOwo+Pj4gICAgIAlhZGV2 LT5pbl9ncHVfcmVzZXQgPSAwOwo+Pj4gICAgIAltdXRleF91bmxvY2soJmFkZXYtPmxvY2tfcmVz ZXQpOwo+Pj4gK30KPj4+ICsKPj4+ICsKPj4+ICsvKioKPj4+ICsgKiBhbWRncHVfZGV2aWNlX2dw dV9yZWNvdmVyIC0gcmVzZXQgdGhlIGFzaWMgYW5kIHJlY292ZXIgc2NoZWR1bGVyCj4+PiArICoK Pj4+ICsgKiBAYWRldjogYW1kZ3B1IGRldmljZSBwb2ludGVyCj4+PiArICogQGpvYjogd2hpY2gg am9iIHRyaWdnZXIgaGFuZwo+Pj4gKyAqCj4+PiArICogQXR0ZW1wdCB0byByZXNldCB0aGUgR1BV IGlmIGl0IGhhcyBodW5nIChhbGwgYXNpY3MpLgo+Pj4gKyAqIEF0dGVtcHQgdG8gZG8gc29mdC1y ZXNldCBvciBmdWxsLXJlc2V0IGFuZCByZWluaXRpYWxpemUgQXNpYwo+Pj4gKyAqIFJldHVybnMg MCBmb3Igc3VjY2VzcyBvciBhbiBlcnJvciBvbiBmYWlsdXJlLgo+Pj4gKyAqLwo+Pj4gKwo+Pj4g K2ludCBhbWRncHVfZGV2aWNlX2dwdV9yZWNvdmVyKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LAo+Pj4gKwkJCSAgICAgIHN0cnVjdCBhbWRncHVfam9iICpqb2IpCj4+PiArewo+Pj4gKwlpbnQg cjsKPj4+ICsJc3RydWN0IGFtZGdwdV9oaXZlX2luZm8gKmhpdmUgPSBOVUxMOwo+Pj4gKwlib29s IG5lZWRfZnVsbF9yZXNldCA9IGZhbHNlOwo+Pj4gKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqdG1w X2FkZXYgPSBOVUxMOwo+Pj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZV9saXN0LCAqZGV2aWNl X2xpc3RfaGFuZGxlID0gIE5VTEw7Cj4+PiArCj4+PiArCUlOSVRfTElTVF9IRUFEKCZkZXZpY2Vf bGlzdCk7Cj4+PiArCj4+PiArCWRldl9pbmZvKGFkZXYtPmRldiwgIkdQVSByZXNldCBiZWdpbiFc biIpOwo+Pj4gKwo+Pj4gKwkvKgo+Pj4gKwkgKiBJbiBjYXNlIG9mIFhHTUkgaGl2ZSBkaXNhbGxv dyBjb25jdXJyZW50IHJlc2V0cyB0byBiZSB0cmlnZ2VyZWQKPj4+ICsJICogYnkgZGlmZmVyZW50 IG5vZGVzLgo+Pj4gKwkgKi8KPj4+ICsJaWYgKGFkZXYtPmdtYy54Z21pLm51bV9waHlzaWNhbF9u b2RlcyA+IDEpCj4+PiArCQltdXRleF9sb2NrKCZ4Z21pX211dGV4KTsKPj4+ICsKPj4+ICsJLyog U3RhcnQgd2l0aCBhZGV2IHByZSBhc2ljIHJlc2V0IGZpcnN0IGZvciBzb2Z0IHJlc2V0IGNoZWNr LiovCj4+PiArCWFtZGdwdV9sb2NrX2FkZXYoYWRldik7Cj4+PiArCXIgPSBhbWRncHVfZGV2aWNl X3ByZV9hc2ljX3Jlc2V0KGFkZXYsCj4+PiArCQkJCQkgam9iLAo+Pj4gKwkJCQkJICZuZWVkX2Z1 bGxfcmVzZXQpOwo+Pj4gKwlpZiAocikgewo+Pj4gKwkJLypUT0RPIFNob3VsZCB3ZSBzdG9wID8q Lwo+Pj4gKwkJRFJNX0VSUk9SKCJHUFUgcHJlIGFzaWMgcmVzZXQgZmFpbGVkIHdpdGggZXJyLCAl ZCBmb3IgZHJtIGRldiwgJXMgIiwKPj4+ICsJCQkgIHIsIGFkZXYtPmRkZXYtPnVuaXF1ZSk7Cj4+ PiArCQlhZGV2LT5hc2ljX3Jlc2V0X3JlcyA9IHI7Cj4+PiArCX0KPj4+ICsKPj4+ICsJLyogQnVp bGQgbGlzdCBvZiBkZXZpY2VzIHRvIHJlc2V0ICovCj4+PiArCWlmICAobmVlZF9mdWxsX3Jlc2V0 ICYmIGFkZXYtPmdtYy54Z21pLm51bV9waHlzaWNhbF9ub2RlcyA+IDEpIHsKPj4+ICsJCWhpdmUg PSBhbWRncHVfZ2V0X3hnbWlfaGl2ZShhZGV2KTsKPj4+ICsJCWlmICghaGl2ZSkgewo+Pj4gKwkJ CXIgPSAtRU5PREVWOwo+Pj4gKwo+Pj4gKwkJCWFtZGdwdV91bmxvY2tfYWRldihhZGV2KTsKPj4+ ICsKPj4+ICsJCQlpZiAoYWRldi0+Z21jLnhnbWkubnVtX3BoeXNpY2FsX25vZGVzID4gMSkKPj4+ ICsJCQkJbXV0ZXhfdW5sb2NrKCZ4Z21pX211dGV4KTsKPj4+ICsJCQlyZXR1cm4gcjsKPj4+ICsJ CX0KPj4+ICsKPj4+ICsJCS8qCj4+PiArCQkgKiBJbiBjYXNlIHdlIGFyZSBpbiBYR01JIGhpdmUg bW9kZSBkZXZpY2UgcmVzZXQgaXMgZG9uZSBmb3IgYWxsIHRoZQo+Pj4gKwkJICogbm9kZXMgaW4g dGhlIGhpdmUgdG8gcmV0cmFpbiBhbGwgWEdNSSBsaW5rcyBhbmQgaGVuY2UgdGhlIHJlc2V0Cj4+ PiArCQkgKiBzZXF1ZW5jZSBpcyBleGVjdXRlZCBpbiBsb29wIG9uIGFsbCBub2Rlcy4KPj4+ICsJ CSAqLwo+Pj4gKwkJZGV2aWNlX2xpc3RfaGFuZGxlID0gYW1kZ3B1X3hnbWlfZ2V0X2FkZXZfbGlz dF9oYW5kbGUoaGl2ZSk7Cj4+PiArCX0gZWxzZSB7Cj4+PiArCQlsaXN0X2FkZF90YWlsKCZhZGV2 LT5nbWMueGdtaS5oZWFkLCAmZGV2aWNlX2xpc3QpOwo+Pj4gKwkJZGV2aWNlX2xpc3RfaGFuZGxl ID0gJmRldmljZV9saXN0Owo+Pj4gKwl9Cj4+PiArCj4+PiArcmV0cnk6CS8qIFJlc3Qgb2YgYWRl dnMgcHJlIGFzaWMgcmVzZXQgZnJvbSBYR01JIGhpdmUuICovCj4+PiArCWxpc3RfZm9yX2VhY2hf ZW50cnkodG1wX2FkZXYsIGRldmljZV9saXN0X2hhbmRsZSwgZ21jLnhnbWkuaGVhZCkgewo+Pj4g Kwo+Pj4gKwkJaWYgKHRtcF9hZGV2ID09IGFkZXYpCj4+PiArCQkJY29udGludWU7Cj4+PiArCj4+ PiArCQlkZXZfaW5mbyh0bXBfYWRldi0+ZGV2LCAiR1BVIHJlc2V0IGJlZ2luIGZvciBkcm0gZGV2 ICVzIVxuIiwgYWRldi0+ZGRldi0+dW5pcXVlKTsKPj4+ICsKPj4+ICsJCWFtZGdwdV9sb2NrX2Fk ZXYodG1wX2FkZXYpOwo+Pj4gKwkJciA9IGFtZGdwdV9kZXZpY2VfcHJlX2FzaWNfcmVzZXQodG1w X2FkZXYsCj4+PiArCQkJCQkJIE5VTEwsCj4+PiArCQkJCQkJICZuZWVkX2Z1bGxfcmVzZXQpOwo+ Pj4gKwkJLypUT0RPIFNob3VsZCB3ZSBzdG9wID8qLwo+Pj4gKwkJaWYgKHIpIHsKPj4+ICsJCQlE Uk1fRVJST1IoIkdQVSBwcmUgYXNpYyByZXNldCBmYWlsZWQgd2l0aCBlcnIsICVkIGZvciBkcm0g ZGV2LCAlcyAiLAo+Pj4gKwkJCQkgIHIsIHRtcF9hZGV2LT5kZGV2LT51bmlxdWUpOwo+Pj4gKwkJ CXRtcF9hZGV2LT5hc2ljX3Jlc2V0X3JlcyA9IHI7Cj4+PiArCQl9Cj4+PiArCX0KPj4+ICsKPj4+ ICsJLyogQWN0dWFsIEFTSUMgcmVzZXRzIGlmIG5lZWRlZC4qLwo+Pj4gKwkvKiBUT0RPIEltcGxl bWVudCBYR01JIGhpdmUgcmVzZXQgbG9naWMgZm9yIFNSSU9WICovCj4+PiArCWlmIChhbWRncHVf c3Jpb3ZfdmYoYWRldikpIHsKPj4+ICsJCXIgPSBhbWRncHVfZGV2aWNlX3Jlc2V0X3NyaW92KGFk ZXYsIGpvYiA/IGZhbHNlIDogdHJ1ZSk7Cj4+PiArCQlpZiAocikKPj4+ICsJCQlhZGV2LT5hc2lj X3Jlc2V0X3JlcyA9IHI7Cj4+PiArCX0gZWxzZSB7Cj4+PiArCQlyICA9IGFtZGdwdV9kb19hc2lj X3Jlc2V0KGhpdmUsIGRldmljZV9saXN0X2hhbmRsZSwgJm5lZWRfZnVsbF9yZXNldCk7Cj4+PiAr CQlpZiAociAmJiByID09IC1FQUdBSU4pCj4+PiArCQkJZ290byByZXRyeTsKPj4+ICsJfQo+Pj4g Kwo+Pj4gKwkvKiBQb3N0IEFTSUMgcmVzZXQgZm9yIGFsbCBkZXZzIC4qLwo+Pj4gKwlsaXN0X2Zv cl9lYWNoX2VudHJ5KHRtcF9hZGV2LCBkZXZpY2VfbGlzdF9oYW5kbGUsIGdtYy54Z21pLmhlYWQp IHsKPj4+ICsJCWFtZGdwdV9kZXZpY2VfcG9zdF9hc2ljX3Jlc2V0KHRtcF9hZGV2LCB0bXBfYWRl diA9PSBhZGV2ID8gam9iIDogTlVMTCk7Cj4+PiArCj4+PiArCQlpZiAocikgewo+Pj4gKwkJCS8q IGJhZCBuZXdzLCBob3cgdG8gdGVsbCBpdCB0byB1c2Vyc3BhY2UgPyAqLwo+Pj4gKwkJCWRldl9p bmZvKHRtcF9hZGV2LT5kZXYsICJHUFUgcmVzZXQoJWQpIGZhaWxlZFxuIiwgYXRvbWljX3JlYWQo JmFkZXYtPmdwdV9yZXNldF9jb3VudGVyKSk7Cj4+PiArCQkJYW1kZ3B1X3ZmX2Vycm9yX3B1dCh0 bXBfYWRldiwgQU1ER0lNX0VSUk9SX1ZGX0dQVV9SRVNFVF9GQUlMLCAwLCByKTsKPj4+ICsJCX0g ZWxzZSB7Cj4+PiArCQkJZGV2X2luZm8odG1wX2FkZXYtPmRldiwgIkdQVSByZXNldCglZCkgc3Vj Y2VlZGVkIVxuIiwgYXRvbWljX3JlYWQoJmFkZXYtPmdwdV9yZXNldF9jb3VudGVyKSk7Cj4+PiAr CQl9Cj4+PiArCj4+PiArCQlhbWRncHVfdW5sb2NrX2FkZXYodG1wX2FkZXYpOwo+Pj4gKwl9Cj4+ PiArCj4+PiArCWlmIChhZGV2LT5nbWMueGdtaS5udW1fcGh5c2ljYWxfbm9kZXMgPiAxKQo+Pj4g KwkJbXV0ZXhfdW5sb2NrKCZ4Z21pX211dGV4KTsKPj4+ICsKPj4+ICsJaWYgKHIpCj4+PiArCQlk ZXZfaW5mbyhhZGV2LT5kZXYsICJHUFUgcmVzZXQgZW5kIHdpdGggcmV0ID0gJWRcbiIsIHIpOwo+ Pj4gICAgIAlyZXR1cm4gcjsKPj4+ICAgICB9Cj4+PiAgICAgCj4gX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBhbWQtZ2Z4IG1haWxpbmcgbGlzdAo+IGFt ZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2FtZC1nZngK