From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lucas Stach Subject: Re: [PATCH v7 6/6] mailbox: Add support for i.MX7D messaging unit Date: Thu, 26 Jul 2018 10:07:22 +0200 Message-ID: <1532592442.32306.19.camel@pengutronix.de> References: <20180726065331.6186-1-o.rempel@pengutronix.de> <20180726065331.6186-7-o.rempel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180726065331.6186-7-o.rempel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Oleksij Rempel , Shawn Guo , Fabio Estevam , Rob Herring , Mark Rutland , "A.s. Dong" , Vladimir Zapolskiy , Jassi Brar Cc: kernel@pengutronix.de, devicetree@vger.kernel.org, dl-linux-imx , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org QW0gRG9ubmVyc3RhZywgZGVuIDI2LjA3LjIwMTgsIDA4OjUzICswMjAwIHNjaHJpZWIgT2xla3Np aiBSZW1wZWw6Cj4gVGhlIE1haWxib3ggY29udHJvbGxlciBpcyBhYmxlIHRvIHNlbmQgbWVzc2Fn ZXMgKHVwIHRvIDQgMzIgYml0IHdvcmRzKQo+IGJldHdlZW4gdGhlIGVuZHBvaW50cy4KPiAKPiBU aGlzIGRyaXZlciB3YXMgdGVzdGVkIHVzaW5nIHRoZSBtYWlsYm94LXRlc3QgZHJpdmVyIHNlbmRp bmcgbWVzc2FnZXMKPiBiZXR3ZWVuIHRoZSBDb3J0ZXgtQTcgYW5kIHRoZSBDb3J0ZXgtTTQuCj4g Cj4gPiBSZXZpZXdlZC1ieTogVmxhZGltaXIgWmFwb2xza2l5IDx2ekBtbGVpYS5jb20+Cj4gPiBS ZXZpZXdlZC1ieTogRG9uZyBBaXNoZW5nIDxhaXNoZW5nLmRvbmdAbnhwLmNvbT4KPiBTaWduZWQt b2ZmLWJ5OiBPbGVrc2lqIFJlbXBlbCA8by5yZW1wZWxAcGVuZ3V0cm9uaXguZGU+CgpSZXZpZXdl ZC1ieTogTHVjYXMgU3RhY2ggPGwuc3RhY2hAcGVuZ3V0cm9uaXguZGU+Cgo+IC0tLQo+IMKgZHJp dmVycy9tYWlsYm94L0tjb25maWfCoMKgwqDCoMKgwqDCoHzCoMKgwqA2ICsKPiDCoGRyaXZlcnMv bWFpbGJveC9NYWtlZmlsZcKgwqDCoMKgwqDCoHzCoMKgwqAyICsKPiDCoGRyaXZlcnMvbWFpbGJv eC9pbXgtbWFpbGJveC5jIHwgMjc2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK PiDCoDMgZmlsZXMgY2hhbmdlZCwgMjg0IGluc2VydGlvbnMoKykKPiDCoGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL21haWxib3gvaW14LW1haWxib3guYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL21haWxib3gvS2NvbmZpZyBiL2RyaXZlcnMvbWFpbGJveC9LY29uZmlnCj4gaW5kZXggYTJi YjI3NDQ2ZGNlLi43OTA2MGRkYzM4MGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tYWlsYm94L0tj b25maWcKPiArKysgYi9kcml2ZXJzL21haWxib3gvS2NvbmZpZwo+IEBAIC0xNSw2ICsxNSwxMiBA QCBjb25maWcgQVJNX01IVQo+ID4gwqAJwqDCoFRoZSBjb250cm9sbGVyIGhhcyAzIG1haWxib3gg Y2hhbm5lbHMsIHRoZSBsYXN0IG9mIHdoaWNoIGNhbiBiZQo+ID4gwqAJwqDCoHVzZWQgaW4gU2Vj dXJlIG1vZGUgb25seS4KPiDCoAo+ICtjb25maWcgSU1YX01CT1gKPiA+ICsJdHJpc3RhdGUgImku TVggTWFpbGJveCIKPiA+ICsJZGVwZW5kcyBvbiBBUkNIX01YQyB8fCBDT01QSUxFX1RFU1QKPiA+ ICsJaGVscAo+ID4gKwnCoMKgTWFpbGJveCBpbXBsZW1lbnRhdGlvbiBmb3IgaS5NWCBNZXNzYWdp bmcgVW5pdCAoTVUpLgo+ICsKPiDCoGNvbmZpZyBQTEFURk9STV9NSFUKPiA+IMKgCXRyaXN0YXRl ICJQbGF0Zm9ybSBNSFUgTWFpbGJveCIKPiA+IMKgCWRlcGVuZHMgb24gT0YKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9tYWlsYm94L01ha2VmaWxlIGIvZHJpdmVycy9tYWlsYm94L01ha2VmaWxlCj4g aW5kZXggY2MyM2MzYTQzZmNkLi5iYTJmZTFiNmRkNjIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9t YWlsYm94L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9tYWlsYm94L01ha2VmaWxlCj4gPiBAQCAt Nyw2ICs3LDggQEAgb2JqLSQoQ09ORklHX01BSUxCT1hfVEVTVCkJKz0gbWFpbGJveC10ZXN0Lm8K PiDCoAo+ID4gwqBvYmotJChDT05GSUdfQVJNX01IVSkJKz0gYXJtX21odS5vCj4gwqAKPiA+ICtv YmotJChDT05GSUdfSU1YX01CT1gpCSs9IGlteC1tYWlsYm94Lm8KPiArCj4gPiDCoG9iai0kKENP TkZJR19QTEFURk9STV9NSFUpCSs9IHBsYXRmb3JtX21odS5vCj4gwqAKPiA+IMKgb2JqLSQoQ09O RklHX1BMMzIwX01CT1gpCSs9IHBsMzIwLWlwYy5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFp bGJveC9pbXgtbWFpbGJveC5jIGIvZHJpdmVycy9tYWlsYm94L2lteC1tYWlsYm94LmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZWNmZGRjYTVlMzFjCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvbWFpbGJveC9pbXgtbWFpbGJveC5jCj4gQEAgLTAs MCArMSwyNzYgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoK PiArICogQ29weXJpZ2h0IChjKSAyMDE4IFBlbmd1dHJvbml4LCBPbGVrc2lqIFJlbXBlbCA8by5y ZW1wZWxAcGVuZ3V0cm9uaXguZGU+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5o Pgo+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pby5o Pgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tYWlsYm94 X2NvbnRyb2xsZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8 bGludXgvb2ZfZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gKwo+ICsvKiBU cmFuc21pdCBSZWdpc3RlciAqLwo+ID4gKyNkZWZpbmUgSU1YX01VX3hUUm4oeCkJCSgweDAwICsg NCAqICh4KSkKPiArLyogUmVjZWl2ZSBSZWdpc3RlciAqLwo+ID4gKyNkZWZpbmUgSU1YX01VX3hS Um4oeCkJCSgweDEwICsgNCAqICh4KSkKPiArLyogU3RhdHVzIFJlZ2lzdGVyICovCj4gPiArI2Rl ZmluZSBJTVhfTVVfeFNSCQkweDIwCj4gPiArI2RlZmluZSBJTVhfTVVfeFNSX1RFbih4KQlCSVQo MjAgKyAoMyAtICh4KSkpCj4gPiArI2RlZmluZSBJTVhfTVVfeFNSX1JGbih4KQlCSVQoMjQgKyAo MyAtICh4KSkpCj4gPiArI2RlZmluZSBJTVhfTVVfeFNSX0JSRElQCUJJVCg5KQo+ICsKPiArLyog Q29udHJvbCBSZWdpc3RlciAqLwo+ID4gKyNkZWZpbmUgSU1YX01VX3hDUgkJMHgyNAo+ICsvKiBU cmFuc21pdCBJbnRlcnJ1cHQgRW5hYmxlICovCj4gPiArI2RlZmluZSBJTVhfTVVfeENSX1RJRW4o eCkJQklUKDIwICsgKDMgLSAoeCkpKQo+ICsvKiBSZWNlaXZlIEludGVycnVwdCBFbmFibGUgKi8K PiA+ICsjZGVmaW5lIElNWF9NVV94Q1JfUklFbih4KQlCSVQoMjQgKyAoMyAtICh4KSkpCj4gKwo+ ID4gKyNkZWZpbmUgSU1YX01VX0NIQU5TCTR1Cj4gKwo+ICtzdHJ1Y3QgaW14X211X2Nvbl9wcml2 IHsKPiA+ID4gKwlpbnQJCQlpcnE7Cj4gPiA+ICsJdW5zaWduZWQgaW50CQlpZHg7Cj4gPiA+ICsJ Y2hhcgkJCSppcnFfZGVzYzsKPiArfTsKPiArCj4gK3N0cnVjdCBpbXhfbXVfcHJpdiB7Cj4gPiA+ ICsJc3RydWN0IGRldmljZQkJKmRldjsKPiA+ID4gKwl2b2lkIF9faW9tZW0JCSpiYXNlOwo+ID4g PiArCXNwaW5sb2NrX3QJCXhjcl9sb2NrOyAvKiBjb250cm9sIHJlZ2lzdGVyIGxvY2sgKi8KPiAr Cj4gPiA+ICsJc3RydWN0IG1ib3hfY29udHJvbGxlcgltYm94Owo+ID4gPiArCXN0cnVjdCBtYm94 X2NoYW4JbWJveF9jaGFuc1tJTVhfTVVfQ0hBTlNdOwo+ICsKPiA+ICsJc3RydWN0IGlteF9tdV9j b25fcHJpdsKgwqBjb25fcHJpdltJTVhfTVVfQ0hBTlNdOwo+ID4gPiArCXN0cnVjdCBjbGsJCSpj bGs7Cj4gKwo+ID4gPiArCWJvb2wJCQlzaWRlX2I7Cj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0 IGlteF9tdV9wcml2ICp0b19pbXhfbXVfcHJpdihzdHJ1Y3QgbWJveF9jb250cm9sbGVyICptYm94 KQo+ICt7Cj4gPiArCXJldHVybiBjb250YWluZXJfb2YobWJveCwgc3RydWN0IGlteF9tdV9wcml2 LCBtYm94KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW14X211X3dyaXRlKHN0cnVjdCBpbXhf bXVfcHJpdiAqcHJpdiwgdTMyIHZhbCwgdTMyIG9mZnMpCj4gK3sKPiA+ICsJaW93cml0ZTMyKHZh bCwgcHJpdi0+YmFzZSArIG9mZnMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTMyIGlteF9tdV9yZWFk KHN0cnVjdCBpbXhfbXVfcHJpdiAqcHJpdiwgdTMyIG9mZnMpCj4gK3sKPiA+ICsJcmV0dXJuIGlv cmVhZDMyKHByaXYtPmJhc2UgKyBvZmZzKTsKPiArfQo+ICsKPiArc3RhdGljIHUzMiBpbXhfbXVf eGNyX3JtdyhzdHJ1Y3QgaW14X211X3ByaXYgKnByaXYsIHUzMiBzZXQsIHUzMiBjbHIpCj4gK3sK PiA+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiA+ICsJdTMyIHZhbDsKPiArCj4gPiArCXNwaW5f bG9ja19pcnFzYXZlKCZwcml2LT54Y3JfbG9jaywgZmxhZ3MpOwo+ID4gKwl2YWwgPSBpbXhfbXVf cmVhZChwcml2LCBJTVhfTVVfeENSKTsKPiA+ICsJdmFsICY9IH5jbHI7Cj4gPiArCXZhbCB8PSBz ZXQ7Cj4gPiArCWlteF9tdV93cml0ZShwcml2LCB2YWwsIElNWF9NVV94Q1IpOwo+ID4gKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT54Y3JfbG9jaywgZmxhZ3MpOwo+ICsKPiA+ICsJcmV0 dXJuIHZhbDsKPiArfQo+ICsKPiArc3RhdGljIGlycXJldHVybl90IGlteF9tdV9pc3IoaW50IGly cSwgdm9pZCAqcCkKPiArewo+ID4gKwlzdHJ1Y3QgbWJveF9jaGFuICpjaGFuID0gcDsKPiA+ICsJ c3RydWN0IGlteF9tdV9wcml2ICpwcml2ID0gdG9faW14X211X3ByaXYoY2hhbi0+bWJveCk7Cj4g PiArCXN0cnVjdCBpbXhfbXVfY29uX3ByaXYgKmNwID0gY2hhbi0+Y29uX3ByaXY7Cj4gPiArCXUz MiB2YWwsIGN0cmwsIGRhdDsKPiArCj4gPiArCWN0cmwgPSBpbXhfbXVfcmVhZChwcml2LCBJTVhf TVVfeENSKTsKPiA+ICsJdmFsID0gaW14X211X3JlYWQocHJpdiwgSU1YX01VX3hTUik7Cj4gPiAr CXZhbCAmPSBJTVhfTVVfeFNSX1RFbihjcC0+aWR4KSB8IElNWF9NVV94U1JfUkZuKGNwLT5pZHgp Owo+ID4gKwl2YWwgJj0gY3RybCAmIChJTVhfTVVfeENSX1RJRW4oY3AtPmlkeCkgfCBJTVhfTVVf eENSX1JJRW4oY3AtPmlkeCkpOwo+ID4gKwlpZiAoIXZhbCkKPiA+ICsJCXJldHVybiBJUlFfTk9O RTsKPiArCj4gPiArCWlmICh2YWwgJiBJTVhfTVVfeFNSX1RFbihjcC0+aWR4KSkgewo+ID4gKwkJ aW14X211X3hjcl9ybXcocHJpdiwgMCwgSU1YX01VX3hDUl9USUVuKGNwLT5pZHgpKTsKPiA+ICsJ CW1ib3hfY2hhbl90eGRvbmUoY2hhbiwgMCk7Cj4gPiArCX0KPiArCj4gPiArCWlmICh2YWwgJiBJ TVhfTVVfeFNSX1JGbihjcC0+aWR4KSkgewo+ID4gKwkJZGF0ID0gaW14X211X3JlYWQocHJpdiwg SU1YX01VX3hSUm4oY3AtPmlkeCkpOwo+ID4gKwkJbWJveF9jaGFuX3JlY2VpdmVkX2RhdGEoY2hh biwgKHZvaWQgKikmZGF0KTsKPiA+ICsJfQo+ICsKPiA+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpbXhfbXVfbGFzdF90eF9kb25lKHN0cnVjdCBtYm94X2No YW4gKmNoYW4pCj4gK3sKPiA+ICsJc3RydWN0IGlteF9tdV9wcml2ICpwcml2ID0gdG9faW14X211 X3ByaXYoY2hhbi0+bWJveCk7Cj4gPiArCXN0cnVjdCBpbXhfbXVfY29uX3ByaXYgKmNwID0gY2hh bi0+Y29uX3ByaXY7Cj4gKwo+ID4gKwkvKiB0ZXN0IGlmIHRyYW5zbWl0IHJlZ2lzdGVyIGlzIGVt cHR5ICovCj4gPiArCXJldHVybiBpbXhfbXVfcmVhZChwcml2LCBJTVhfTVVfeFNSKSAmIElNWF9N VV94U1JfVEVuKGNwLT5pZHgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlteF9tdV9zZW5kX2Rh dGEoc3RydWN0IG1ib3hfY2hhbiAqY2hhbiwgdm9pZCAqZGF0YSkKPiArewo+ID4gKwlzdHJ1Y3Qg aW14X211X3ByaXYgKnByaXYgPSB0b19pbXhfbXVfcHJpdihjaGFuLT5tYm94KTsKPiA+ICsJc3Ry dWN0IGlteF9tdV9jb25fcHJpdiAqY3AgPSBjaGFuLT5jb25fcHJpdjsKPiA+ICsJdTMyICphcmcg PSBkYXRhOwo+ICsKPiA+ICsJaWYgKCFpbXhfbXVfbGFzdF90eF9kb25lKGNoYW4pKQo+ID4gKwkJ cmV0dXJuIC1FQlVTWTsKPiArCj4gPiArCWlteF9tdV93cml0ZShwcml2LCAqYXJnLCBJTVhfTVVf eFRSbihjcC0+aWR4KSk7Cj4gPiArCWlteF9tdV94Y3Jfcm13KHByaXYsIElNWF9NVV94U1JfVEVu KGNwLT5pZHgpLCAwKTsKPiArCj4gPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGlteF9tdV9zdGFydHVwKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pCj4gK3sKPiA+ICsJc3RydWN0 IGlteF9tdV9wcml2ICpwcml2ID0gdG9faW14X211X3ByaXYoY2hhbi0+bWJveCk7Cj4gPiArCXN0 cnVjdCBpbXhfbXVfY29uX3ByaXYgKmNwID0gY2hhbi0+Y29uX3ByaXY7Cj4gPiArCWludCByZXQ7 Cj4gKwo+ID4gKwljcC0+aXJxX2Rlc2MgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgImlteF9tdV9j aGFuWyVpXSIsIGNwLT5pZHgpOwo+ID4gKwlpZiAoIWNwLT5pcnFfZGVzYykKPiA+ICsJCXJldHVy biAtRU5PTUVNOwo+ICsKPiA+ICsJcmV0ID0gcmVxdWVzdF9pcnEoY3AtPmlycSwgaW14X211X2lz ciwgSVJRRl9TSEFSRUQsIGNwLT5pcnFfZGVzYywKPiA+ICsJCQnCoMKgY2hhbik7Cj4gPiArCWlm IChyZXQpIHsKPiA+ICsJCWRldl9lcnIocHJpdi0+ZGV2LAo+ID4gKwkJCSJVbmFibGUgdG8gYWNx dWlyZSBJUlEgJWRcbiIsIGNwLT5pcnEpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ICsK PiA+ICsJaW14X211X3hjcl9ybXcocHJpdiwgSU1YX01VX3hDUl9SSUVuKGNwLT5pZHgpLCAwKTsK PiArCj4gPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpbXhfbXVfc2h1dGRv d24oc3RydWN0IG1ib3hfY2hhbiAqY2hhbikKPiArewo+ID4gKwlzdHJ1Y3QgaW14X211X3ByaXYg KnByaXYgPSB0b19pbXhfbXVfcHJpdihjaGFuLT5tYm94KTsKPiA+ICsJc3RydWN0IGlteF9tdV9j b25fcHJpdiAqY3AgPSBjaGFuLT5jb25fcHJpdjsKPiArCj4gPiArCWlteF9tdV94Y3Jfcm13KHBy aXYsIDAsCj4gPiArCQnCoMKgwqBJTVhfTVVfeENSX1RJRW4oY3AtPmlkeCkgfCBJTVhfTVVfeENS X1JJRW4oY3AtPmlkeCkpOwo+ICsKPiA+ICsJZnJlZV9pcnEoY3AtPmlycSwgY2hhbik7Cj4gPiAr CWtmcmVlKGNwLT5pcnFfZGVzYyk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWJv eF9jaGFuX29wcyBpbXhfbXVfb3BzID0gewo+ID4gKwkuc2VuZF9kYXRhID0gaW14X211X3NlbmRf ZGF0YSwKPiA+ICsJLnN0YXJ0dXAgPSBpbXhfbXVfc3RhcnR1cCwKPiA+ICsJLnNodXRkb3duID0g aW14X211X3NodXRkb3duLAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgaW14X211X2luaXRfZ2Vu ZXJpYyhzdHJ1Y3QgaW14X211X3ByaXYgKnByaXYpCj4gK3sKPiA+ICsJaWYgKHByaXYtPnNpZGVf YikKPiA+ICsJCXJldHVybjsKPiArCj4gPiArCS8qIFNldCBkZWZhdWx0IE1VIGNvbmZpZ3VyYXRp b24gKi8KPiA+ICsJaW14X211X3dyaXRlKHByaXYsIDAsIElNWF9NVV94Q1IpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGlteF9tdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ ICt7Cj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gPiArCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7Cj4gPiArCXN0cnVjdCByZXNvdXJjZSAqaW9t ZW07Cj4gPiArCXN0cnVjdCBpbXhfbXVfcHJpdiAqcHJpdjsKPiA+ICsJdW5zaWduZWQgaW50IGk7 Cj4gPiArCWludCBpcnEsIHJldDsKPiArCj4gPiArCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBz aXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFwcml2KQo+ID4gKwkJcmV0dXJu IC1FTk9NRU07Cj4gKwo+ID4gKwlwcml2LT5kZXYgPSBkZXY7Cj4gKwo+ID4gKwlpb21lbSA9IHBs YXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4gPiArCXByaXYt PmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgaW9tZW0pOwo+ID4gKwlp ZiAoSVNfRVJSKHByaXYtPmJhc2UpKQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+YmFzZSk7 Cj4gKwo+ID4gKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwo+ID4gKwlpZiAoaXJx IDwgMCkKPiA+ICsJCXJldHVybiBpcnE7Cj4gKwo+ID4gKwlwcml2LT5jbGsgPSBkZXZtX2Nsa19n ZXQoZGV2LCBOVUxMKTsKPiA+ICsJaWYgKElTX0VSUihwcml2LT5jbGspKSB7Cj4gPiArCQlpZiAo UFRSX0VSUihwcml2LT5jbGspICE9IC1FTk9FTlQpCj4gPiArCQkJcmV0dXJuIFBUUl9FUlIocHJp di0+Y2xrKTsKPiArCj4gPiArCQlwcml2LT5jbGsgPSBOVUxMOwo+ID4gKwl9Cj4gKwo+ID4gKwly ZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0+Y2xrKTsKPiA+ICsJaWYgKHJldCkgewo+ID4g KwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIGNsb2NrXG4iKTsKPiA+ICsJCXJldHVy biByZXQ7Cj4gPiArCX0KPiArCj4gPiArCWZvciAoaSA9IDA7IGkgPCBJTVhfTVVfQ0hBTlM7IGkr Kykgewo+ID4gKwkJc3RydWN0IGlteF9tdV9jb25fcHJpdiAqY3AgPSAmcHJpdi0+Y29uX3ByaXZb aV07Cj4gKwo+ID4gKwkJY3AtPmlkeCA9IGk7Cj4gPiArCQljcC0+aXJxID0gaXJxOwo+ID4gKwkJ cHJpdi0+bWJveF9jaGFuc1tpXS5jb25fcHJpdiA9IGNwOwo+ID4gKwl9Cj4gKwo+ID4gKwlwcml2 LT5zaWRlX2IgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJmc2wsbXUtc2lkZS1iIik7Cj4g Kwo+ID4gKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+eGNyX2xvY2spOwo+ICsKPiA+ICsJcHJpdi0+ bWJveC5kZXYgPSBkZXY7Cj4gPiArCXByaXYtPm1ib3gub3BzID0gJmlteF9tdV9vcHM7Cj4gPiAr CXByaXYtPm1ib3guY2hhbnMgPSBwcml2LT5tYm94X2NoYW5zOwo+ID4gKwlwcml2LT5tYm94Lm51 bV9jaGFucyA9IElNWF9NVV9DSEFOUzsKPiA+ICsJcHJpdi0+bWJveC50eGRvbmVfaXJxID0gdHJ1 ZTsKPiArCj4gPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOwo+ICsKPiA+ICsJ aW14X211X2luaXRfZ2VuZXJpYyhwcml2KTsKPiArCj4gPiArCXJldHVybiBtYm94X2NvbnRyb2xs ZXJfcmVnaXN0ZXIoJnByaXYtPm1ib3gpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlteF9tdV9y ZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ID4gKwlzdHJ1Y3QgaW14 X211X3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCj4gPiArCW1i b3hfY29udHJvbGxlcl91bnJlZ2lzdGVyKCZwcml2LT5tYm94KTsKPiA+ICsJY2xrX2Rpc2FibGVf dW5wcmVwYXJlKHByaXYtPmNsayk7Cj4gKwo+ID4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaW14X211X2R0X2lkc1tdID0gewo+ID4gKwl7 IC5jb21wYXRpYmxlID0gImZzbCxpbXg2c3gtbXUiIH0sCj4gPiArCXsgfSwKPiArfTsKPiArTU9E VUxFX0RFVklDRV9UQUJMRShvZiwgaW14X211X2R0X2lkcyk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBpbXhfbXVfZHJpdmVyID0gewo+ID4gPiArCS5wcm9iZQkJPSBpbXhf bXVfcHJvYmUsCj4gPiA+ICsJLnJlbW92ZQkJPSBpbXhfbXVfcmVtb3ZlLAo+ID4gKwkuZHJpdmVy ID0gewo+ID4gPiArCQkubmFtZQk9ICJpbXhfbXUiLAo+ID4gKwkJLm9mX21hdGNoX3RhYmxlID0g aW14X211X2R0X2lkcywKPiA+ICsJfSwKPiArfTsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihp bXhfbXVfZHJpdmVyKTsKPiArCj4gPiArTU9EVUxFX0FVVEhPUigiT2xla3NpaiBSZW1wZWwgPG8u cmVtcGVsQHBlbmd1dHJvbml4LmRlPiIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk1lc3NhZ2Ug VW5pdCBkcml2ZXIgZm9yIGkuTVgiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtl cm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5l bAo=