From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: Re: [PATCH RESEND 3/5] mtd: nand: Cleanup/rework the atmel_nand driver Date: Tue, 14 Feb 2017 14:27:04 +0100 Message-ID: <20170214142704.621170dd@bbrezillon> References: <1485535324-28393-1-git-send-email-boris.brezillon@free-electrons.com> <1485535324-28393-4-git-send-email-boris.brezillon@free-electrons.com> <1be79cf2-0318-8d07-0df4-911db18f5285@atmel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1be79cf2-0318-8d07-0df4-911db18f5285@atmel.com> 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: Nicolas Ferre Cc: Mark Rutland , Linus Walleij , linux-mtd@lists.infradead.org, Cyrille Pitchen , Hans-Christian Egtvedt , Alexandre Courbot , Vinod Koul , Richard Weinberger , Marek Vasut , Haavard Skinnemoen , devicetree@vger.kernel.org, Pawel Moll , Ian Campbell , Kumar Gala , linux-gpio@vger.kernel.org, Rob Herring , Dan Williams , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Wenyou Yang , Josh Wu , dmaengine@vger.kernel.org, Alexandre Belloni , Brian Norris List-Id: linux-gpio@vger.kernel.org T24gVHVlLCAxNCBGZWIgMjAxNyAxMzo1ODozMCArMDEwMApOaWNvbGFzIEZlcnJlIDxuaWNvbGFz LmZlcnJlQGF0bWVsLmNvbT4gd3JvdGU6CgpbLi5dCgo+ID4gIG9iai0kKENPTkZJR19NVERfTkFO RF9PTUFQMikgCQkrPSBvbWFwMl9uYW5kLm8KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9u YW5kL2F0bWVsL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbmFuZC9hdG1lbC9NYWtlZmlsZQo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uMTViYzRhMDE0ZjMz Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL210ZC9uYW5kL2F0bWVsL01ha2Vm aWxlCj4gPiBAQCAtMCwwICsxLDQgQEAKPiA+ICtvYmotJChDT05GSUdfTVREX05BTkRfQVRNRUwp CSs9IGF0bWVsLW5hbmQtY29udHJvbGxlci5vIGF0bWVsLXBtZWNjLm8KPiA+ICsKPiA+ICthdG1l bC1uYW5kLWNvbnRyb2xsZXItb2Jqcwk6PSBuZmMubyAgCj4gCj4gSSBoYXZlIGRvdWJ0cyBhYm91 dCB0aGUgbmFtZSAibmZjIiBhcyB3ZSBoYXZlICphIHBhcnQqIG9mIHRoZSBuZXdlc3QKPiBuYW5k IGZsYXNoIGNvbnRyb2xsZXIgYW5kIGl0cyBhc3NvY2lhdGVkIHJlZ2lzdGVyIHNldCB0aGF0IGlz IG5hbWVkCj4gIk5GQyIgaW4gdGhlIGRhdGFzaGVldDogaXQgbWF5IGxlYWQgdG8gc29tZSBraW5k IG9mIGNvbmZ1c2lvbi4uLgoKT2theSwgSSdsbCByZW5hbWUgaXQgbmFuZC1jb250cm9sbGVyLmMu Cgo+IAo+IAo+ID4gK2F0bWVsLXBtZWNjLW9ianMJCTo9IHBtZWNjLm8KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL210ZC9uYW5kL2F0bWVsL25mYy5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdG1lbC9u ZmMuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uMzE3 M2U1ZjZjNDUwCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL210ZC9uYW5kL2F0 bWVsL25mYy5jCj4gPiBAQCAtMCwwICsxLDIxNjggQEAKPiA+ICsvKgo+ID4gKyAqIMKpIENvcHly aWdodCAyMDE2IEFUTUVMICAKPiAKPiBZZXMsIEkga25vdyBpdCBjb21lcyBmcm9tIHRoZSBwcmV2 aW91cyBkcml2ZXIgYnV0IGNvdWxkIHlvdSBwbGVhc2UKPiByZW1vdmUgdGhlIFVURi04IChvciBv dGhlciBjaGFyYWN0ZXIgZW5jb2RpbmcpLgoKU3VyZS4KCj4gCj4gPiArICogwqkgQ29weXJpZ2h0 IDIwMTYgRnJlZSBFbGVjdHJvbnMgIAo+IAo+IDIwMTc/CgpZZXAuIEkgc3RhcnRlZCB0aGlzIHdv cmsgaW4gMjAxNiwgaGVuY2UgdGhlIHdyb25nIHllYXIuCgpbLi4uXQoKPiA+ICtzdGF0aWMgaW5s aW5lIHN0cnVjdCBhdG1lbF9uYW5kICp0b19hdG1lbF9uYW5kKHN0cnVjdCBuYW5kX2NoaXAgKmNo aXApCj4gPiArewo+ID4gKwlyZXR1cm4gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhdG1lbF9u YW5kLCBiYXNlKTsKPiA+ICt9Cj4gPiArCj4gPiArZW51bSBhdG1lbF9zYW1hNV9kYXRhX3hmZXIg eyAgCj4gCj4gV2VsbCwgc2FtYTUgd291bGQgdGhlbiBtZWFuICJhbGwgY29udHJvbGxlcnMgY29t cGF0aWJsZSB3aXRoIHRoZSBvbmUKPiBmb3VuZCBvbiBzYW1hNWQzIi4uLiBBbmQgZXZlbiBpZiBz b21lIFNvQyBkb2Vzbid0IGNvbnRhaW4gdGhlIHN1YnN0cmlnCj4gInNhbWE1Ii4uLiBTbyBtYXli ZSB0aGluayBhYm91dCBhbm90aGVyIHdheSB0byBnZW5lcmljYWxseSBjYWxsIHRoaXMKPiB2YXJp YW50IG9mIHRoZSBuYW5kIGZsYXNoIGNvbnRyb2xsZXIuLi4KCkhvdyBhYm91dCBlbnVtIGF0bWVs X25mY19kYXRhX3hmZXIgaGVyZSAuLi4KCj4gCj4gPiArCUFUTUVMX05GQ19OT19EQVRBLAo+ID4g KwlBVE1FTF9ORkNfUkVBRF9EQVRBLAo+ID4gKwlBVE1FTF9ORkNfV1JJVEVfREFUQSwKPiA+ICt9 Owo+ID4gKwo+ID4gK3N0cnVjdCBhdG1lbF9zYW1hNV9vcCB7CgouLi4gc3RydWN0IGF0bWVsX25m Y19vcCBoZXJlIC4uLgoKPiA+ICsJdTggY3M7Cj4gPiArCXU4IG5jbWRzOwo+ID4gKwl1OCBjbWRz WzJdOwo+ID4gKwl1OCBuYWRkcnM7Cj4gPiArCXU4IGFkZHJzWzVdOwo+ID4gKwllbnVtIGF0bWVs X3NhbWE1X2RhdGFfeGZlciBkYXRhOwo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IGF0bWVsX25m YzsgIAo+IAo+IEhlcmUgYWdhaW46IG5pdHBpY2tpbmcgYWJvdXQgbmFtZXMsIGJ1dCBuZmMgY2Fu IGJlIGNvbmZ1c2luZyB3aXRoIHRoZQo+IE5GQyByZWdpc3RlciBkZWZpbmVkIGluIHRoZSBkYXRh c2hlZXQuCgouLi4gYW5kIHN0cnVjdCBhdG1lbF9zbWNfbmFuZF9jb250cm9sbGVyIGhlcmUuIFRo aXMgd2F5IHRoZSBvYmplY3RzCnJlbGF0ZWQgdG8gdGhlIE5GQyBibG9jayAodGhlIG9uZSBkZXNj cmliZWQgaW4gdGhlIGRhdGFzaGVldCkgYXJlCmNvbnRhaW5pbmcgdGhlIHRlcm0gJ25mYycuCgo+ IAo+IEFuIGlkZWE6IHdoZW4geW91IGZpbmQgZ29vZCBuYW1pbmcgc2NoZW1lLCB5b3UgY2FuIGFk ZCBhIGxpdHRsZSBnbG9zc2FyeQo+IGluIHRoZSBoZWFkZXIgdG8gZXhwbGFpbiBhY3JvbnltcyBh bmQgbmFtaW5nIGNvbnZlbnRpb24gb2YgdGhlIGRyaXZlciBsaWtlOgo+IGh0dHA6Ly9seHIuZnJl ZS1lbGVjdHJvbnMuY29tL3NvdXJjZS9kcml2ZXJzL2RtYS9hdF9oZG1hYy5jI0wzMwo+IAoKU3Vy ZS4KClsuLi5dCgo+ID4gK3N0YXRpYyBpbnQgYXRtZWxfc2FtYTVfbmZjX2V4ZWNfb3Aoc3RydWN0 IGF0bWVsX3NhbWE1X25mYyAqbmZjKQo+ID4gK3sKPiA+ICsJdTMyIGFkZHIsIHZhbCwgd2FpdCA9 IEFUTUVMX0hTTUNfTkZDX1NSX0NNRERPTkU7Cj4gPiArCXU4ICphZGRycyA9IG5mYy0+b3AuYWRk cnM7Cj4gPiArCXVuc2lnbmVkIGludCBvcCA9IDA7Cj4gPiArCWludCBpLCByZXQ7Cj4gPiArCj4g PiArCWZvciAoaSA9IDA7IGkgPCBuZmMtPm9wLm5jbWRzOyBpKyspCj4gPiArCQlvcCB8PSBBVE1F TF9ORkNfQ01EKGksIG5mYy0+b3AuY21kc1tpXSk7Cj4gPiArCj4gPiArCWlmIChuZmMtPm9wLm5h ZGRycyA9PSA1KSAgCj4gCj4gVXNlIGEgI2RlZmluZSBmb3IgdGhpcyB2YWx1ZS4KClllcC4KCj4g Cj4gPiArCQlyZWdtYXBfd3JpdGUobmZjLT5iYXNlLnNtYywgQVRNRUxfSFNNQ19ORkNfQUREUiwg KmFkZHJzKyspOwo+ID4gKwo+ID4gKwlvcCB8PSBBVE1FTF9ORkNfQ1NJRChuZmMtPm9wLmNzKSB8 Cj4gPiArCSAgICAgIEFUTUVMX05GQ19BQ1lDTEUobmZjLT5vcC5uYWRkcnMpOwo+ID4gKwo+ID4g KwlpZiAobmZjLT5vcC5uY21kcyA+IDEpCj4gPiArCQlvcCB8PSBBVE1FTF9ORkNfVkNNRDI7Cj4g PiArCj4gPiArCWFkZHIgPSBhZGRyc1swXSB8IChhZGRyc1sxXSA8PCA4KSB8IChhZGRyc1syXSA8 PCAxNikgfAo+ID4gKwkgICAgICAgKGFkZHJzWzNdIDw8IDI0KTsKPiA+ICsKPiA+ICsJaWYgKG5m Yy0+b3AuZGF0YSAhPSBBVE1FTF9ORkNfTk9fREFUQSkgewo+ID4gKwkJb3AgfD0gQVRNRUxfTkZD X0RBVEFFTjsKPiA+ICsJCXdhaXQgfD0gQVRNRUxfSFNNQ19ORkNfU1JfWEZSRE9ORTsKPiA+ICsK PiA+ICsJCWlmIChuZmMtPm9wLmRhdGEgPT0gQVRNRUxfTkZDX1dSSVRFX0RBVEEpCj4gPiArCQkJ b3AgfD0gQVRNRUxfTkZDX05GQ1dSOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8qIENsZWFyIGFsbCBm bGFncy4gKi8KPiA+ICsJcmVnbWFwX3JlYWQobmZjLT5iYXNlLnNtYywgQVRNRUxfSFNNQ19ORkNf U1IsICZ2YWwpOwo+ID4gKwo+ID4gKwkvKiBTZW5kIHRoZSBjb21tYW5kLiAqLwo+ID4gKwlyZWdt YXBfd3JpdGUobmZjLT5pbywgb3AsIGFkZHIpOwo+ID4gKwo+ID4gKwlyZXQgPSBhdG1lbF9zYW1h NV9uZmNfd2FpdChuZmMsIHdhaXQsIHRydWUsIDApOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZGV2 X2VycihuZmMtPmJhc2UuZGV2LAo+ID4gKwkJCSJGYWlsZWQgdG8gc2VuZCBOQU5EIGNvbW1hbmQg KGVyciA9ICVkKSEiLAo+ID4gKwkJCXJldCk7Cj4gPiArCj4gPiArCS8qIFJlc2V0IHRoZSBvcCBz dGF0ZS4gKi8KPiA+ICsJbWVtc2V0KCZuZmMtPm9wLCAwLCBzaXplb2YobmZjLT5vcCkpOwo+ID4g Kwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBhdG1lbF9z YW1hNV9uZmNfY21kX2N0cmwoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBkYXQsCj4gPiArCQkJ CSAgICAgdW5zaWduZWQgaW50IGN0cmwpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbmFuZF9jaGlwICpj aGlwID0gbXRkX3RvX25hbmQobXRkKTsKPiA+ICsJc3RydWN0IGF0bWVsX25hbmQgKm5hbmQgPSB0 b19hdG1lbF9uYW5kKGNoaXApOwo+ID4gKwlzdHJ1Y3QgYXRtZWxfc2FtYTVfbmZjICpuZmMgPSB0 b19zYW1hNV9uZmMoY2hpcC0+Y29udHJvbGxlcik7Cj4gPiArCj4gPiArCWlmIChjdHJsICYgTkFO RF9BTEUpIHsKPiA+ICsJCWlmIChuZmMtPm9wLm5hZGRycyA+IDQpICAKPiAKPiBIZXJlIGFsc28s IEkgZ3Vlc3MgaXQncyB0aGUgc2FtZSB0ZXN0IGFzICJpZiAobmZjLT5vcC5uYWRkcnMgPT0gNSki Cj4gYWJvdmU6IHNvIHRyeSB0byB1c2Ugc2FtZSB0ZXN0IHRvIG1ha2UgdXMgdW5kZXJzdGFuZCB0 aGF0IGl0J3MgdGhlIHNhbWUKPiBjb25kaXRpb24uIFdpdGggdGhlICNkZWZpbmVkIHZhbHVlIGl0 IGFsc28gc2hvdWxkIGhlbHAuLi4KCkluZGVlZCwgd2Ugc2hvdWxkIGhhdmUgdGhlIHNhbWUgY29u ZGl0aW9uIGhlcmUuCgo+IAo+ID4gKwkJCXJldHVybjsKPiA+ICsKPiA+ICsJCW5mYy0+b3AuYWRk cnNbbmZjLT5vcC5uYWRkcnMrK10gPSBkYXQ7Cj4gPiArCX0gZWxzZSBpZiAoY3RybCAmIE5BTkRf Q0xFKSB7Cj4gPiArCQlpZiAobmZjLT5vcC5uY21kcyA+IDEpCj4gPiArCQkJcmV0dXJuOwo+ID4g Kwo+ID4gKwkJbmZjLT5vcC5jbWRzW25mYy0+b3AubmNtZHMrK10gPSBkYXQ7Cj4gPiArCX0KPiA+ ICsKPiA+ICsJaWYgKGRhdCA9PSBOQU5EX0NNRF9OT05FKSB7Cj4gPiArCQluZmMtPm9wLmNzID0g bmFuZC0+YWN0aXZlY3MtPmlkOwo+ID4gKwkJYXRtZWxfc2FtYTVfbmZjX2V4ZWNfb3AobmZjKTsK PiA+ICsJfQo+ID4gK30KPiA+ICsKClsuLi5dCgo+ID4gK3N0YXRpYyBpbnQgYXRtZWxfc2FtYTVf bmZjX3BtZWNjX3JlYWRfcGcoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgdTggKmJ1ZiwKPiA+ICsJ CQkJCSBib29sIG9vYl9yZXF1aXJlZCwgaW50IHBhZ2UsIGJvb2wgcmF3KQo+ID4gK3sKPiA+ICsJ c3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsKPiA+ICsJc3RydWN0IGF0 bWVsX25hbmQgKm5hbmQgPSB0b19hdG1lbF9uYW5kKGNoaXApOwo+ID4gKwlzdHJ1Y3QgYXRtZWxf c2FtYTVfbmZjICpuZmMgPSB0b19zYW1hNV9uZmMoY2hpcC0+Y29udHJvbGxlcik7Cj4gPiArCWlu dCByZXQ7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIE9wdGltaXplZCByZWFkIHBhZ2UgYWNjZXNz b3JzIG9ubHkgd29yayB3aGVuIHRoZSBOQU5EIFIvQiBwaW4gaXMKPiA+ICsJICogY29ubmVjdGVk IHRvIGEgbmF0aXZlIFNvQyBSL0IgcGluLiBJZiB0aGF0J3Mgbm90IHRoZSBjYXNlLCBmYWxsYmFj awo+ID4gKwkgKiB0byB0aGUgbm9uLW9wdGltaXplZCBvbmUuCj4gPiArCSAqLwo+ID4gKwlpZiAo bmFuZC0+YWN0aXZlY3MtPnJiLnR5cGUgIT0gQVRNRUxfTkFORF9OQVRJVkVfUkIpIHsgIAo+IAo+ IENhbid0IHdlIG9wdGltaXplIHRoaXMgcGF0aCBieSBub3QgaGF2aW5nIHRvIHRlc3QgdGhpcyBm b3IgZWFjaCBwYWdlIHJlYWQ/CgpIbSwgaXQncyByZWFsbHkgbmVnbGlnaWJsZSB0byB0aGUgYW1v dW50IG9mIHRpbWUgeW91J2xsIHNwZW5kIHJlYWRpbmcKdGhlIHBhZ2UgYW5kIGNvcnJlY3Rpbmcg ZXJyb3JzLiBEb24ndCB0aGluayBpdCdzIHdvcnRoIHRyeWluZyB0bwpvcHRpbWl6ZSB0aGF0LgoK PiAKPiA+ICsJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFEMCwgMHgwMCwgcGFnZSk7 Cj4gPiArCj4gPiArCQlyZXR1cm4gYXRtZWxfbmZjX3BtZWNjX3JlYWRfcGcoY2hpcCwgYnVmLCBv b2JfcmVxdWlyZWQsIHBhZ2UsCj4gPiArCQkJCQkgICAgICAgcmF3KTsKPiA+ICsJfQo+ID4gKwo+ ID4gKwluZmMtPm9wLmNtZHNbbmZjLT5vcC5uY21kcysrXSA9IE5BTkRfQ01EX1JFQUQwOwo+ID4g Kwo+ID4gKwlpZiAobXRkLT53cml0ZXNpemUgPiA1MTIpCj4gPiArCQluZmMtPm9wLmNtZHNbbmZj LT5vcC5uY21kcysrXSA9IE5BTkRfQ01EX1JFQURTVEFSVDsKPiA+ICsKPiA+ICsJYXRtZWxfc2Ft YTVfbmZjX3NldF9vcF9hZGRyKGNoaXAsIHBhZ2UsIDB4MCk7Cj4gPiArCW5mYy0+b3AuY3MgPSBu YW5kLT5hY3RpdmVjcy0+aWQ7Cj4gPiArCW5mYy0+b3AuZGF0YSA9IEFUTUVMX05GQ19SRUFEX0RB VEE7Cj4gPiArCj4gPiArCXJldCA9IGF0bWVsX25mY19wbWVjY19lbmFibGUoY2hpcCwgTkFORF9F Q0NfUkVBRCwgcmF3KTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCj4g PiArCXJldCA9IGF0bWVsX3NhbWE1X25mY19leGVjX29wKG5mYyk7Cj4gPiArCWlmIChyZXQpIHsK PiA+ICsJCWF0bWVsX25mY19wbWVjY19kaXNhYmxlKGNoaXAsIHJhdyk7Cj4gPiArCQlkZXZfZXJy KG5mYy0+YmFzZS5kZXYsCj4gPiArCQkJIkZhaWxlZCB0byBsb2FkIE5BTkQgcGFnZSBkYXRhIChl cnIgPSAlZClcbiIsCj4gPiArCQkJcmV0KTsKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCX0KPiA+ ICsKPiA+ICsJYXRtZWxfc2FtYTVfbmZjX2NvcHlfZnJvbV9zcmFtKGNoaXAsIGJ1ZiwgZmFsc2Up Owo+ID4gKwlhdG1lbF9uYW5kX3JlYWRfYnVmKG10ZCwgY2hpcC0+b29iX3BvaSwgbXRkLT5vb2Jz aXplKTsKPiA+ICsKPiA+ICsJcmV0ID0gYXRtZWxfbmZjX3BtZWNjX2NvcnJlY3RfZGF0YShjaGlw LCBidWYsIHJhdyk7Cj4gPiArCj4gPiArCWF0bWVsX25mY19wbWVjY19kaXNhYmxlKGNoaXAsIHJh dyk7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQoKClsuLi5dCgo+ID4gK3N0YXRpYyB2 b2lkIGF0bWVsX3NhbWE1X25mY19uYW5kX2luaXQoc3RydWN0IGF0bWVsX25mYyAqbmZjLAo+ID4g KwkJCQkgICAgICBzdHJ1Y3QgYXRtZWxfbmFuZCAqbmFuZCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBu YW5kX2NoaXAgKmNoaXAgPSAmbmFuZC0+YmFzZTsKPiA+ICsKPiA+ICsJYXRtZWxfbmZjX25hbmRf aW5pdChuZmMsIG5hbmQpOwo+ID4gKwo+ID4gKwkvKiBPdmVybG9hZCBzb21lIG1ldGhvZHMgZm9y IHRoZSBTQU1BNSBjb250cm9sbGVyLiAqLyAgCj4gCj4gImZvciB0aGUgU0FNQTVEMy1jb21wYXRp YmxlIGNvbnRyb2xsZXIiCgpJJ2xsIHByb2JhYmx5IGNoYW5nZSB0aGUgY29tbWVudCBhZnRlciBy ZW5hbWluZyBldmVyeXRoaW5nIGFzIHlvdQpzdWdnZXN0ZWQuCgo+IAo+ID4gKwljaGlwLT5jbWRf Y3RybCA9IGF0bWVsX3NhbWE1X25mY19jbWRfY3RybDsKPiA+ICsJY2hpcC0+c2VsZWN0X2NoaXAg PSBhdG1lbF9zYW1hNV9uZmNfc2VsZWN0X2NoaXA7Cj4gPiArfQo+ID4gKwoKWy4uLl0KCj4gPiAr c3RhdGljIGludCBhdG1lbF9uZmNfbmFuZF9yZWdpc3RlcihzdHJ1Y3QgYXRtZWxfbmFuZCAqbmFu ZCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSAmbmFuZC0+YmFzZTsKPiA+ ICsJc3RydWN0IGF0bWVsX25mYyAqbmZjID0gdG9fbmZjKGNoaXAtPmNvbnRyb2xsZXIpOwo+ID4g KwlzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEobmZjLT5k ZXYpOwo+ID4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOwo+ID4g Kwljb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMgPSBOVUxMOwo+ID4gKwlpbnQgbnBh cnRzID0gMCwgcmV0Owo+ID4gKwo+ID4gKwlpZiAobmZjLT5jYXBzLT5sZWdhY3lfb2ZfYmluZGlu Z3MgfHwgIW5mYy0+ZGV2LT5vZl9ub2RlKSB7Cj4gPiArCQkvKgo+ID4gKwkJICogV2Uga2VlcCB0 aGUgTVREIG5hbWUgdW5jaGFuZ2VkIHRvIGF2b2lkIGJyZWFraW5nIHBsYXRmb3Jtcwo+ID4gKwkJ ICogd2hlcmUgdGhlIE1URCBjbWRsaW5lIHBhcnNlciBpcyB1c2VkIGFuZCB0aGUgYm9vdGxvYWRl cgo+ID4gKwkJICogaGFzIG5vdCBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgbmFtaW5nIHNj aGVtZS4KPiA+ICsJCSAqLwo+ID4gKwkJbXRkLT5uYW1lID0gImF0bWVsX25hbmQiOwo+ID4gKwl9 IGVsc2UgaWYgKCFtdGQtPm5hbWUpIHsKPiA+ICsJCS8qCj4gPiArCQkgKiBJZiB0aGUgbmV3IGJp bmRpbmdzIGFyZSB1c2VkIGFuZCB0aGUgYm9vdGxvYWRlciBoYXMgbm90IGJlZW4KPiA+ICsJCSAq IHVwZGF0ZWQgdG8gcGFzcyBhIG5ldyBtdGRwYXJ0cyBwYXJhbWV0ZXIgb24gdGhlIGNtZGxpbmUs IHlvdQo+ID4gKwkJICogc2hvdWxkIGRlZmluZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5IGluIHlv dXIgbmFuZCBub2RlOgo+ID4gKwkJICoKPiA+ICsJCSAqCWxhYmVsID0gImF0bWVsX25hbmQiOyAg Cj4gCj4gSSBkb24ndCBzZWUgdGhpcyBpbiB0aGUgbmV3IGJpbmRpbmcgZG9jdW1lbnRhdGlvbi4g SXQgaXMgdXNlZnVsIHRvCj4gZG9jdW1lbnQgaXQuCgpXZWxsLCBJJ20gbm90IHN1cmUgdGhpcyBp cyBzb21ldGhpbmcgd2UgY2FuL3Nob3VsZCBkb2N1bWVudCBpbiB0aGUgRFQKYmluZGluZ3MgZG9j LgoKPiAKPiAKPiA+ICsJCSAqCj4gPiArCQkgKiBUaGlzIHdheSwgbXRkLT5uYW1lIHdpbGwgYmUg c2V0IGJ5IHRoZSBjb3JlIHdoZW4KPiA+ICsJCSAqIG5hbmRfc2V0X2ZsYXNoX25vZGUoKSBpcyBj YWxsZWQuCj4gPiArCQkgKi8KPiA+ICsJCW10ZC0+bmFtZSA9IGRldm1fa2FzcHJpbnRmKG5mYy0+ ZGV2LCBHRlBfS0VSTkVMLAo+ID4gKwkJCQkJICAgIiVzOm5hbmQuJWQiLCBkZXZfbmFtZShuZmMt PmRldiksCj4gPiArCQkJCQkgICBuYW5kLT5jc1swXS5pZCk7Cj4gPiArCQlpZiAoIW10ZC0+bmFt ZSkgewo+ID4gKwkJCWRldl9lcnIobmZjLT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgbXRkLT5u YW1lXG4iKTsKPiA+ICsJCQlyZXR1cm4gLUVOT01FTTsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ ID4gKwlyZXQgPSBuYW5kX3NjYW5fdGFpbChtdGQpOwo+ID4gKwlpZiAocmV0KSB7Cj4gPiArCQlk ZXZfZXJyKG5mYy0+ZGV2LCAibmFuZF9zY2FuX3RhaWwoKSBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+ ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlpZiAocGRhdGEpIHsKPiA+ICsJ CXBhcnRzID0gcGRhdGEtPnBhcnRzOwo+ID4gKwkJbnBhcnRzID0gcGRhdGEtPm51bV9wYXJ0czsK PiA+ICsJfQo+ID4gKwo+ID4gKwlyZXQgPSBtdGRfZGV2aWNlX3JlZ2lzdGVyKG10ZCwgcGFydHMs IG5wYXJ0cyk7Cj4gPiArCWlmIChyZXQpIHsKPiA+ICsJCWRldl9lcnIobmZjLT5kZXYsICJGYWls ZWQgdG8gcmVnaXN0ZXIgbXRkIGRldmljZTogJWRcbiIsIHJldCk7Cj4gPiArCQluYW5kX2NsZWFu dXAoY2hpcCk7Cj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwl9Cj4gPiArCj4gPiArCWxpc3RfYWRk X3RhaWwoJm5hbmQtPm5vZGUsICZuZmMtPmNoaXBzKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4g PiArfQo+ID4gKwo+ID4gK3N0cnVjdCBncGlvX2Rlc2MgKmF0bWVsX25hbmRfb2ZfZ2V0X2dwaW8o c3RydWN0IGF0bWVsX25mYyAqbmZjLAo+ID4gKwkJCQkJIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAs Cj4gPiArCQkJCQkgY29uc3QgY2hhciAqbmFtZSwgaW50IGluZGV4LAo+ID4gKwkJCQkJIGVudW0g Z3Bpb2RfZmxhZ3MgZmxhZ3MpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvOwo+ ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlncGlvID0gZGV2bV9nZXRfaW5kZXhfZ3Bpb2RfZnJv bV9jaGlsZChuZmMtPmRldiwgbmFtZSwgaW5kZXgsCj4gPiArCQkJCQkgICAgICAgJm5wLT5md25v ZGUpOwo+ID4gKwlpZiAoSVNfRVJSKGdwaW8pKSB7Cj4gPiArCQlpZiAoUFRSX0VSUihncGlvKSA9 PSAtRU5PRU5UKQo+ID4gKwkJCXJldHVybiBOVUxMOwo+ID4gKwo+ID4gKwkJcmV0dXJuIGdwaW87 Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKCEoZmxhZ3MgJiBHUElPRF9GTEFHU19CSVRfRElSX1NF VCkpCj4gPiArCQlyZXR1cm4gZ3BpbzsKPiA+ICsKPiA+ICsJLyogUHJvY2VzcyBmbGFncyAqLyAg Cj4gCj4gTml0OiAiLiIgYXQgdGhlIGVuZCBsaWtlIG90aGVyIGNvbW1lbnRzIGluIHRoZSBmaWxl CgpJJ2xsIGZpeCB0aGF0LgoKPiAKPiA+ICsJaWYgKGZsYWdzICYgR1BJT0RfRkxBR1NfQklUX0RJ Ul9PVVQpCj4gPiArCQlyZXQgPSBncGlvZF9kaXJlY3Rpb25fb3V0cHV0KGdwaW8sCj4gPiArCQkJ CQkhIShmbGFncyAmIEdQSU9EX0ZMQUdTX0JJVF9ESVJfVkFMKSk7Cj4gPiArCWVsc2UKPiA+ICsJ CXJldCA9IGdwaW9kX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKPiA+ICsKPiA+ICsJaWYgKHJldCkK PiA+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gPiArCj4gPiArCXJldHVybiBncGlvOwo+ID4g K30KPiA+ICsKWy4uLl0KCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdG1lbC9w bWVjYy5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdG1lbC9wbWVjYy5jCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi45YmFjY2FlNWQ1YTUKPiA+IC0tLSAvZGV2 L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvbXRkL25hbmQvYXRtZWwvcG1lY2MuYwo+ID4gQEAgLTAs MCArMSwxMDExIEBACj4gPiArLyoKPiA+ICsgKiDCqSBDb3B5cmlnaHQgMjAxNiBBVE1FTAo+ID4g KyAqIMKpIENvcHlyaWdodCAyMDE2IEZyZWUgRWxlY3Ryb25zICAKPiAKPiBEaXR0byBhYm91dCAo YykKCldpbGwgcmVtb3ZlIHRoaXMgVVRGOCBjaGFycy4KClsuLi5dCgo+ID4gKwo+ID4gK3N0YXRp YyB2b2lkIGF0bWVsX3BtZWNjX2dlbl9zeW5kcm9tZShzdHJ1Y3QgYXRtZWxfcG1lY2NfdXNlciAq dXNlciwgaW50IHNlY3RvcikKPiA+ICt7Cj4gPiArCWludCBzdHJlbmd0aCA9IGdldF9zdHJlbmd0 aCh1c2VyKTsKPiA+ICsJdTMyIHZhbHVlOwo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJLyogRmls bCBvZGQgc3luZHJvbWVzICovCj4gPiArCWZvciAoaSA9IDA7IGkgPCBzdHJlbmd0aDsgaSsrKSB7 Cj4gPiArCQl2YWx1ZSA9IHJlYWRsX3JlbGF4ZWQodXNlci0+cG1lY2MtPnJlZ3MuYmFzZSArCj4g PiArCQkJCSAgICAgIEFUTUVMX1BNRUNDX1JFTShzZWN0b3IsIGkgLyAyKSk7Cj4gPiArCQlpZiAo aSAmIDEpCj4gPiArCQkJdmFsdWUgPj49IDE2Owo+ID4gKwo+ID4gKwkJdXNlci0+cGFydGlhbF9z eW5bKDIgKiBpKSArIDFdID0gdmFsdWU7Cj4gPiArCX0KPiA+ICt9ICAKPiAKPiBXaGF0IGFib3V0 IHNheWluZyBzb21ld2hlcmUgaW4gdGhpcyBmaWxlIChoZWFkZXI/KSB0aGF0IGFsbCB0aGlzCj4g Y29tcHV0YXRpb24gaXMgZGVzY3JpYmVkIGluIHRoZSBwcm9kdWN0IGRhdGFzaGVldCBhbmQgdGhh dCBhIGhhcmR3YXJlCj4gc29mdHdhcmUgYml0IGNvcnJlY3Rpb24gaXMgcHV0IGluIHBsYWNlIGZv bGxvd2luZyB0aGUgcmVjb21hbmRhdGlvbiBvZgo+IHRoZSBkYXRhc2hlZXQ/CgpTdXJlLgoKQWN0 dWFsbHksIGFmdGVyIGxvb2tpbmcgYXQgdGhlIHNvZnR3YXJlIGJjaCBjb2RlIChsaWIvYmNoLmMp LCBJIHRoaW5rCndlIGNhbiByZS11c2UgYSBmZXcgdGhpbmdzIGluc3RlYWQgb2Ygb3Blbi1jb2Rp bmcgaXQgaGVyZSwgYnV0IHRoYXQncwpub3QgZm9yIHRoaXMgcm91bmQgOy0pLgoKVGhhbmtzIGZv ciB0aGUgcmV2aWV3LgoKUmVnYXJkcywKCkJvcmlzCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=