From mboxrd@z Thu Jan 1 00:00:00 1970 From: Cyrille Pitchen Subject: Re: [PATCH v4 6/7] mtd: spi-nor: Use the spi_mem_xx() API Date: Wed, 23 May 2018 17:56:03 +0200 Message-ID: <4ecb6215-699b-b714-cab5-cb237e883ec7@microchip.com> References: <20180426161820.2852-1-boris.brezillon@bootlin.com> <20180426161820.2852-7-boris.brezillon@bootlin.com> <6a39f071-186e-7009-994d-af845ce3f75d@microchip.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Yogesh Gaur , Vignesh R , Kamal Dasu , Maxime Chevallier , Peter Pan , Frieder Schrempf , =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= To: Boris Brezillon , David Woodhouse , Brian Norris , Marek Vasut , Richard Weinberger , Cyrille Pitchen , , Miquel Raynal , Mark Brown , Return-path: In-Reply-To: <6a39f071-186e-7009-994d-af845ce3f75d@microchip.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+gldm-linux-mtd-36=gmane.org@lists.infradead.org List-Id: linux-spi.vger.kernel.org CgpMZSAyMy8wNS8yMDE4IMOgIDE3OjQ0LCBDeXJpbGxlIFBpdGNoZW4gYSDDqWNyaXTCoDoKPiBI aSBhbGwsCj4gCj4gTGUgMjYvMDQvMjAxOCDDoCAxODoxOCwgQm9yaXMgQnJlemlsbG9uIGEgw6lj cml0wqA6Cj4+IFRoZSBzcGlfbWVtX3h4eCgpIEFQSSBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvIHJl cGxhY2UgdGhlCj4+IHNwaV9mbGFzaF9yZWFkKCkgb25lLiBNYWtlIHVzZSBvZiBpdCBzbyB3ZSBj YW4gZ2V0IHJpZCBvZgo+PiBzcGlfZmxhc2hfcmVhZCgpLgo+Pgo+PiBOb3RlIHRoYXQgdXNpbmcg c3BpX21lbV94eCgpIGFsc28gc2ltcGxpZmllcyB0aGUgY29kZSBiZWNhdXNlIHRoaXMgQVBJCj4+ IHRha2VzIGNhcmUgb2YgdXNpbmcgdGhlIHJlZ3VsYXIgc3BpX3N5bmMoKSBpbnRlcmZhY2Ugd2hl biB0aGUgb3B0aW1pemVkCj4+IC0+bWVtX29wcyBpbnRlcmZhY2UgaXMgbm90IGltcGxlbWVudGVk IGJ5IHRoZSBjb250cm9sbGVyLkhpIGEKPj4KPj4gU2lnbmVkLW9mZi1ieTogQm9yaXMgQnJlemls bG9uIDxib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5jb20+Cj4+IC0tLQo+PiBDaGFuZ2VzIGluIHY0 Ogo+PiAtIG5vbmUKPj4KPj4gQ2hhbmdlcyBpbiB2MzoKPj4gLSBub25lCj4+Cj4+IENoYW5nZXMg aW4gdjI6Cj4+IC0gaW5jbHVkZSBzcGktbWVtLmgKPj4gLSB0cmVhdCBvcC0+YWRkci52YWwgZGlm ZmVyZW50bHkgc2luY2UgaXQncyBub3cgYW4gdTY0Cj4+IC0gUmVwbGFjZSBTUElfTUVNX09QX0RB VEFfT1VUKCkgYnkgU1BJX01FTV9PUF9EQVRBX0lOKCkgaW4gbTI1cDgwX3JlYWQoKQo+PiAtLS0K Pj4gIGRyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZyAgfCAgIDEgKwo+PiAgZHJpdmVycy9tdGQv ZGV2aWNlcy9tMjVwODAuYyB8IDIzNiArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCj4+ICAyIGZpbGVzIGNoYW5nZWQsIDgwIGluc2VydGlvbnMoKyksIDE1NyBkZWxl dGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZyBi L2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZwo+PiBpbmRleCA2ZGVmNTQ0NWUwM2UuLjU3YjAy YzRiM2Y2MyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCj4+ICsr KyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZwo+PiBAQCAtODEsNiArODEsNyBAQCBjb25m aWcgTVREX0RBVEFGTEFTSF9PVFAKPj4gIGNvbmZpZyBNVERfTTI1UDgwCj4+ICAJdHJpc3RhdGUg IlN1cHBvcnQgbW9zdCBTUEkgRmxhc2ggY2hpcHMgKEFUMjZERiwgTTI1UCwgVzI1WCwgLi4uKSIK Pj4gIAlkZXBlbmRzIG9uIFNQSV9NQVNURVIgJiYgTVREX1NQSV9OT1IKPj4gKwlzZWxlY3QgU1BJ X01FTQo+PiAgCWhlbHAKPj4gIAkgIFRoaXMgZW5hYmxlcyBhY2Nlc3MgdG8gbW9zdCBtb2Rlcm4g U1BJIGZsYXNoIGNoaXBzLCB1c2VkIGZvcgo+PiAgCSAgcHJvZ3JhbSBhbmQgZGF0YSBzdG9yYWdl LiAgIFNlcmllcyBzdXBwb3J0ZWQgaW5jbHVkZSBBdG1lbCBBVDI2REYsCj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVw ODAuYwo+PiBpbmRleCBhNGUxOGY2YWFhMzMuLjNkYzAyMmQzYjUzZSAxMDA2NDQKPj4gLS0tIGEv ZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYwo+PiArKysgYi9kcml2ZXJzL210ZC9kZXZpY2Vz L20yNXA4MC5jCj4+IEBAIC0yNCwxMiArMjQsMTMgQEAKPj4gICNpbmNsdWRlIDxsaW51eC9tdGQv cGFydGl0aW9ucy5oPgo+PiAgCj4+ICAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgo+PiArI2lu Y2x1ZGUgPGxpbnV4L3NwaS9zcGktbWVtLmg+Cj4+ICAjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNo Lmg+Cj4+ICAjaW5jbHVkZSA8bGludXgvbXRkL3NwaS1ub3IuaD4KPj4gIAo+PiAgI2RlZmluZQlN QVhfQ01EX1NJWkUJCTYKPj4gIHN0cnVjdCBtMjVwIHsKPj4gLQlzdHJ1Y3Qgc3BpX2RldmljZQkq c3BpOwo+PiArCXN0cnVjdCBzcGlfbWVtCQkqc3BpbWVtOwo+PiAgCXN0cnVjdCBzcGlfbm9yCQlz cGlfbm9yOwo+PiAgCXU4CQkJY29tbWFuZFtNQVhfQ01EX1NJWkVdOwo+PiAgfTsKPj4gQEAgLTM3 LDk3ICszOCw2OCBAQCBzdHJ1Y3QgbTI1cCB7Cj4+ICBzdGF0aWMgaW50IG0yNXA4MF9yZWFkX3Jl ZyhzdHJ1Y3Qgc3BpX25vciAqbm9yLCB1OCBjb2RlLCB1OCAqdmFsLCBpbnQgbGVuKQo+PiAgewo+ PiAgCXN0cnVjdCBtMjVwICpmbGFzaCA9IG5vci0+cHJpdjsKPj4gLQlzdHJ1Y3Qgc3BpX2Rldmlj ZSAqc3BpID0gZmxhc2gtPnNwaTsKPj4gKwlzdHJ1Y3Qgc3BpX21lbV9vcCBvcCA9IFNQSV9NRU1f T1AoU1BJX01FTV9PUF9DTUQoY29kZSwgMSksCj4+ICsJCQkJCSAgU1BJX01FTV9PUF9OT19BRERS LAo+PiArCQkJCQkgIFNQSV9NRU1fT1BfTk9fRFVNTVksCj4+ICsJCQkJCSAgU1BJX01FTV9PUF9E QVRBX0lOKGxlbiwgdmFsLCAxKSk7Cj4+ICAJaW50IHJldDsKPj4gIAo+PiAtCXJldCA9IHNwaV93 cml0ZV90aGVuX3JlYWQoc3BpLCAmY29kZSwgMSwgdmFsLCBsZW4pOwo+PiArCXJldCA9IHNwaV9t ZW1fZXhlY19vcChmbGFzaC0+c3BpbWVtLCAmb3ApOwo+PiAgCWlmIChyZXQgPCAwKQo+PiAtCQlk ZXZfZXJyKCZzcGktPmRldiwgImVycm9yICVkIHJlYWRpbmcgJXhcbiIsIHJldCwgY29kZSk7Cj4+ ICsJCWRldl9lcnIoJmZsYXNoLT5zcGltZW0tPnNwaS0+ZGV2LCAiZXJyb3IgJWQgcmVhZGluZyAl eFxuIiwgcmV0LAo+PiArCQkJY29kZSk7Cj4+ICAKPj4gIAlyZXR1cm4gcmV0Owo+PiAgfQo+PiAg Cj4+IC1zdGF0aWMgdm9pZCBtMjVwX2FkZHIyY21kKHN0cnVjdCBzcGlfbm9yICpub3IsIHVuc2ln bmVkIGludCBhZGRyLCB1OCAqY21kKQo+PiAtewo+PiAtCS8qIG9wY29kZSBpcyBpbiBjbWRbMF0g Ki8KPj4gLQljbWRbMV0gPSBhZGRyID4+IChub3ItPmFkZHJfd2lkdGggKiA4IC0gIDgpOwo+PiAt CWNtZFsyXSA9IGFkZHIgPj4gKG5vci0+YWRkcl93aWR0aCAqIDggLSAxNik7Cj4+IC0JY21kWzNd ID0gYWRkciA+PiAobm9yLT5hZGRyX3dpZHRoICogOCAtIDI0KTsKPj4gLQljbWRbNF0gPSBhZGRy ID4+IChub3ItPmFkZHJfd2lkdGggKiA4IC0gMzIpOwo+PiAtfQo+PiAtCj4+IC1zdGF0aWMgaW50 IG0yNXBfY21kc3ooc3RydWN0IHNwaV9ub3IgKm5vcikKPj4gLXsKPj4gLQlyZXR1cm4gMSArIG5v ci0+YWRkcl93aWR0aDsKPj4gLX0KPj4gLQo+PiAgc3RhdGljIGludCBtMjVwODBfd3JpdGVfcmVn KHN0cnVjdCBzcGlfbm9yICpub3IsIHU4IG9wY29kZSwgdTggKmJ1ZiwgaW50IGxlbikKPj4gIHsK Pj4gIAlzdHJ1Y3QgbTI1cCAqZmxhc2ggPSBub3ItPnByaXY7Cj4+IC0Jc3RydWN0IHNwaV9kZXZp Y2UgKnNwaSA9IGZsYXNoLT5zcGk7Cj4+IC0KPj4gLQlmbGFzaC0+Y29tbWFuZFswXSA9IG9wY29k ZTsKPj4gLQlpZiAoYnVmKQo+PiAtCQltZW1jcHkoJmZsYXNoLT5jb21tYW5kWzFdLCBidWYsIGxl bik7Cj4+ICsJc3RydWN0IHNwaV9tZW1fb3Agb3AgPSBTUElfTUVNX09QKFNQSV9NRU1fT1BfQ01E KG9wY29kZSwgMSksCj4+ICsJCQkJCSAgU1BJX01FTV9PUF9OT19BRERSLAo+PiArCQkJCQkgIFNQ SV9NRU1fT1BfTk9fRFVNTVksCj4gCj4gSSBkaWRuJ3QgdGVzdCBub3IgY29tcGlsZWQgdG8gdmVy aWZ5IGJ1dCBJIGhhdmUgc29tZSBkb3VidDoKPiBoZXJlIHRoZSAnb3AnIHZhcmlhYmxlIGlzIGFs bG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIGJvdGggZGVmaW5pdGlvbnMKPiBvZiBTUElfTUVNX09Q X05PX0FERFIgYW5kIFNQSV9NRU1fT1BfTk9fRFVNTVkgbWFjcm9zIGFyZSB7IH0uCj4gCj4gSXQg bWlnaHQgYmUgc29tZSBydWxlIG9mIHRoZSBDIGxhbmd1YWdlIHRoYXQgSSBpZ25vcmUgYnV0IGFy ZSB3ZSBndWFyYW50ZWVkCj4gdGhhdCB0aGUgLm5ieXRlcyBtZW1iZXIgb2YgYm90aCBzdHJ1Y3R1 cmVzIGlzIGFjdHVhbGx5IGluaXRpYWxpemVkIHRvIDAgPwo+IAo+IEkgd291bGQgc2F5IG5vOiBJ IHRoaW5rIHNpbmNlIHRoZSBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbGwK PiBtZW1iZXJzIG5vdCBiZWluZyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGFyZSBsZWZ0IHVuaW5p dGlhbGl6ZWQgYnkgdGhlCj4gY29tcGlsZXIgd2hlbiBpdCBnZW5lcmF0ZXMgdGhlIGFzc2VtYmxl ciBjb2RlLiBIb3dldmVyLCBJJ20gbm90IDEwMCUgc3VyZSBvZgo+IHRoYXQuCj4KCkFjdHVhbGx5 LCBJJ20gcmVhZGluZyB0aGF0IHdpdGggQzk5IGV4dGVuc2lvbnMsICJvbWl0dGVkIGZpZWxkIG1l bWJlcnMgYXJlCmltcGxpY2l0bHkgaW5pdGlhbGl6ZWQgdGhlIHNhbWUgYXMgb2JqZWN0cyB0aGF0 IGhhdmUgc3RhdGljIHN0b3JhZ2UgZHVyYXRpb24uIgpodHRwczovL2djYy5nbnUub3JnL29ubGlu ZWRvY3MvZ2NjL0Rlc2lnbmF0ZWQtSW5pdHMuaHRtbAoKc29ycnkgZm9yIHRoZSBub2lzZSEKIAo+ IEFueXdheSwgd2hhdCBhYm91dCBleHBsaWNpdGx5IHNldCB0aGUgLm5ieXRlcyBtZW1iZXIgdG8g MCBpbiB0aGUgZGVmaW5pdGlvbgo+IG9mIFNQSV9NRU1fT1BfTk8qIGhlbHBlciBtYWNyb3MgPwo+ IAo+PiArCQkJCQkgIFNQSV9NRU1fT1BfREFUQV9PVVQobGVuLCBidWYsIDEpKTsKPj4gIAo+PiAt CXJldHVybiBzcGlfd3JpdGUoc3BpLCBmbGFzaC0+Y29tbWFuZCwgbGVuICsgMSk7Cj4+ICsJcmV0 dXJuIHNwaV9tZW1fZXhlY19vcChmbGFzaC0+c3BpbWVtLCAmb3ApOwo+PiAgfQo+PiAgCj4+ICBz dGF0aWMgc3NpemVfdCBtMjVwODBfd3JpdGUoc3RydWN0IHNwaV9ub3IgKm5vciwgbG9mZl90IHRv LCBzaXplX3QgbGVuLAo+PiAgCQkJICAgIGNvbnN0IHVfY2hhciAqYnVmKQo+PiAgewo+PiAgCXN0 cnVjdCBtMjVwICpmbGFzaCA9IG5vci0+cHJpdjsKPj4gLQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3Bp ID0gZmxhc2gtPnNwaTsKPj4gLQl1bnNpZ25lZCBpbnQgaW5zdF9uYml0cywgYWRkcl9uYml0cywg ZGF0YV9uYml0cywgZGF0YV9pZHg7Cj4+IC0Jc3RydWN0IHNwaV90cmFuc2ZlciB0WzNdID0ge307 Cj4+IC0Jc3RydWN0IHNwaV9tZXNzYWdlIG07Cj4+IC0JaW50IGNtZF9zeiA9IG0yNXBfY21kc3oo bm9yKTsKPj4gLQlzc2l6ZV90IHJldDsKPj4gKwlzdHJ1Y3Qgc3BpX21lbV9vcCBvcCA9Cj4+ICsJ CQlTUElfTUVNX09QKFNQSV9NRU1fT1BfQ01EKG5vci0+cHJvZ3JhbV9vcGNvZGUsIDEpLAo+PiAr CQkJCSAgIFNQSV9NRU1fT1BfQUREUihub3ItPmFkZHJfd2lkdGgsIHRvLCAxKSwKPj4gKwkJCQkg ICBTUElfTUVNX09QX0RVTU1ZKDAsIDEpLAo+IAo+IFdoeSBkbyB5b3UgdXNlIFNQSV9NRU1fT1Bf RFVNTVkoMCwgMSkgaGVyZSBpbnN0ZWFkIG9mIFNQSV9NRU1fT1BfTk9fRFVNTVkoKSA/Cj4gCj4g QmVzdCByZWdhcmRzLAo+IAo+IEN5cmlsbGUKPiAKPj4gKwkJCQkgICBTUElfTUVNX09QX0RBVEFf T1VUKGxlbiwgYnVmLCAxKSk7Cj4+ICsJc2l6ZV90IHJlbWFpbmluZyA9IGxlbjsKPj4gKwlpbnQg cmV0Owo+PiAgCj4+ICAJLyogZ2V0IHRyYW5zZmVyIHByb3RvY29scy4gKi8KPj4gLQlpbnN0X25i aXRzID0gc3BpX25vcl9nZXRfcHJvdG9jb2xfaW5zdF9uYml0cyhub3ItPndyaXRlX3Byb3RvKTsK Pj4gLQlhZGRyX25iaXRzID0gc3BpX25vcl9nZXRfcHJvdG9jb2xfYWRkcl9uYml0cyhub3ItPndy aXRlX3Byb3RvKTsKPj4gLQlkYXRhX25iaXRzID0gc3BpX25vcl9nZXRfcHJvdG9jb2xfZGF0YV9u Yml0cyhub3ItPndyaXRlX3Byb3RvKTsKPj4gLQo+PiAtCXNwaV9tZXNzYWdlX2luaXQoJm0pOwo+ PiArCW9wLmNtZC5idXN3aWR0aCA9IHNwaV9ub3JfZ2V0X3Byb3RvY29sX2luc3RfbmJpdHMobm9y LT53cml0ZV9wcm90byk7Cj4+ICsJb3AuYWRkci5idXN3aWR0aCA9IHNwaV9ub3JfZ2V0X3Byb3Rv Y29sX2FkZHJfbmJpdHMobm9yLT53cml0ZV9wcm90byk7Cj4+ICsJb3AuZHVtbXkuYnVzd2lkdGgg PSBvcC5hZGRyLmJ1c3dpZHRoOwo+PiArCW9wLmRhdGEuYnVzd2lkdGggPSBzcGlfbm9yX2dldF9w cm90b2NvbF9kYXRhX25iaXRzKG5vci0+d3JpdGVfcHJvdG8pOwo+PiAgCj4+ICAJaWYgKG5vci0+ cHJvZ3JhbV9vcGNvZGUgPT0gU1BJTk9SX09QX0FBSV9XUCAmJiBub3ItPnNzdF93cml0ZV9zZWNv bmQpCj4+IC0JCWNtZF9zeiA9IDE7Cj4+IC0KPj4gLQlmbGFzaC0+Y29tbWFuZFswXSA9IG5vci0+ cHJvZ3JhbV9vcGNvZGU7Cj4+IC0JbTI1cF9hZGRyMmNtZChub3IsIHRvLCBmbGFzaC0+Y29tbWFu ZCk7Cj4+ICsJCW9wLmFkZHIubmJ5dGVzID0gMDsKPj4gIAo+PiAtCXRbMF0udHhfYnVmID0gZmxh c2gtPmNvbW1hbmQ7Cj4+IC0JdFswXS50eF9uYml0cyA9IGluc3RfbmJpdHM7Cj4+IC0JdFswXS5s ZW4gPSBjbWRfc3o7Cj4+IC0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMF0sICZtKTsKPj4gLQo+ PiAtCS8qIHNwbGl0IHRoZSBvcCBjb2RlIGFuZCBhZGRyZXNzIGJ5dGVzIGludG8gdHdvIHRyYW5z ZmVycyBpZiBuZWVkZWQuICovCj4+IC0JZGF0YV9pZHggPSAxOwo+PiAtCWlmIChhZGRyX25iaXRz ICE9IGluc3RfbmJpdHMpIHsKPj4gLQkJdFswXS5sZW4gPSAxOwo+PiArCXdoaWxlIChyZW1haW5p bmcpIHsKPj4gKwkJb3AuZGF0YS5uYnl0ZXMgPSByZW1haW5pbmcgPCBVSU5UX01BWCA/IHJlbWFp bmluZyA6IFVJTlRfTUFYOwo+PiArCQlyZXQgPSBzcGlfbWVtX2FkanVzdF9vcF9zaXplKGZsYXNo LT5zcGltZW0sICZvcCk7Cj4+ICsJCWlmIChyZXQpCj4+ICsJCQlyZXR1cm4gcmV0Owo+PiAgCj4+ IC0JCXRbMV0udHhfYnVmID0gJmZsYXNoLT5jb21tYW5kWzFdOwo+PiAtCQl0WzFdLnR4X25iaXRz ID0gYWRkcl9uYml0czsKPj4gLQkJdFsxXS5sZW4gPSBjbWRfc3ogLSAxOwo+PiAtCQlzcGlfbWVz c2FnZV9hZGRfdGFpbCgmdFsxXSwgJm0pOwo+PiArCQlyZXQgPSBzcGlfbWVtX2V4ZWNfb3AoZmxh c2gtPnNwaW1lbSwgJm9wKTsKPj4gKwkJaWYgKHJldCkKPj4gKwkJCXJldHVybiByZXQ7Cj4+ICAK Pj4gLQkJZGF0YV9pZHggPSAyOwo+PiArCQlvcC5hZGRyLnZhbCArPSBvcC5kYXRhLm5ieXRlczsK Pj4gKwkJcmVtYWluaW5nIC09IG9wLmRhdGEubmJ5dGVzOwo+PiArCQlvcC5kYXRhLmJ1Zi5vdXQg Kz0gb3AuZGF0YS5uYnl0ZXM7Cj4+ICAJfQo+PiAgCj4+IC0JdFtkYXRhX2lkeF0udHhfYnVmID0g YnVmOwo+PiAtCXRbZGF0YV9pZHhdLnR4X25iaXRzID0gZGF0YV9uYml0czsKPj4gLQl0W2RhdGFf aWR4XS5sZW4gPSBsZW47Cj4+IC0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbZGF0YV9pZHhdLCAm bSk7Cj4+IC0KPj4gLQlyZXQgPSBzcGlfc3luYyhzcGksICZtKTsKPj4gLQlpZiAocmV0KQo+PiAt CQlyZXR1cm4gcmV0Owo+PiAtCj4+IC0JcmV0ID0gbS5hY3R1YWxfbGVuZ3RoIC0gY21kX3N6Owo+ PiAtCWlmIChyZXQgPCAwKQo+PiAtCQlyZXR1cm4gLUVJTzsKPj4gLQlyZXR1cm4gcmV0Owo+PiAr CXJldHVybiBsZW47Cj4+ICB9Cj4+ICAKPj4gIC8qCj4+IEBAIC0xMzgsOTIgKzExMCwzOSBAQCBz dGF0aWMgc3NpemVfdCBtMjVwODBfcmVhZChzdHJ1Y3Qgc3BpX25vciAqbm9yLCBsb2ZmX3QgZnJv bSwgc2l6ZV90IGxlbiwKPj4gIAkJCSAgIHVfY2hhciAqYnVmKQo+PiAgewo+PiAgCXN0cnVjdCBt MjVwICpmbGFzaCA9IG5vci0+cHJpdjsKPj4gLQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gZmxh c2gtPnNwaTsKPj4gLQl1bnNpZ25lZCBpbnQgaW5zdF9uYml0cywgYWRkcl9uYml0cywgZGF0YV9u Yml0cywgZGF0YV9pZHg7Cj4+IC0Jc3RydWN0IHNwaV90cmFuc2ZlciB0WzNdOwo+PiAtCXN0cnVj dCBzcGlfbWVzc2FnZSBtOwo+PiAtCXVuc2lnbmVkIGludCBkdW1teSA9IG5vci0+cmVhZF9kdW1t eTsKPj4gLQlzc2l6ZV90IHJldDsKPj4gLQlpbnQgY21kX3N6Owo+PiArCXN0cnVjdCBzcGlfbWVt X29wIG9wID0KPj4gKwkJCVNQSV9NRU1fT1AoU1BJX01FTV9PUF9DTUQobm9yLT5yZWFkX29wY29k ZSwgMSksCj4+ICsJCQkJICAgU1BJX01FTV9PUF9BRERSKG5vci0+YWRkcl93aWR0aCwgZnJvbSwg MSksCj4+ICsJCQkJICAgU1BJX01FTV9PUF9EVU1NWShub3ItPnJlYWRfZHVtbXksIDEpLAo+PiAr CQkJCSAgIFNQSV9NRU1fT1BfREFUQV9JTihsZW4sIGJ1ZiwgMSkpOwo+PiArCXNpemVfdCByZW1h aW5pbmcgPSBsZW47Cj4+ICsJaW50IHJldDsKPj4gIAo+PiAgCS8qIGdldCB0cmFuc2ZlciBwcm90 b2NvbHMuICovCj4+IC0JaW5zdF9uYml0cyA9IHNwaV9ub3JfZ2V0X3Byb3RvY29sX2luc3RfbmJp dHMobm9yLT5yZWFkX3Byb3RvKTsKPj4gLQlhZGRyX25iaXRzID0gc3BpX25vcl9nZXRfcHJvdG9j b2xfYWRkcl9uYml0cyhub3ItPnJlYWRfcHJvdG8pOwo+PiAtCWRhdGFfbmJpdHMgPSBzcGlfbm9y X2dldF9wcm90b2NvbF9kYXRhX25iaXRzKG5vci0+cmVhZF9wcm90byk7Cj4+ICsJb3AuY21kLmJ1 c3dpZHRoID0gc3BpX25vcl9nZXRfcHJvdG9jb2xfaW5zdF9uYml0cyhub3ItPnJlYWRfcHJvdG8p Owo+PiArCW9wLmFkZHIuYnVzd2lkdGggPSBzcGlfbm9yX2dldF9wcm90b2NvbF9hZGRyX25iaXRz KG5vci0+cmVhZF9wcm90byk7Cj4+ICsJb3AuZHVtbXkuYnVzd2lkdGggPSBvcC5hZGRyLmJ1c3dp ZHRoOwo+PiArCW9wLmRhdGEuYnVzd2lkdGggPSBzcGlfbm9yX2dldF9wcm90b2NvbF9kYXRhX25i aXRzKG5vci0+cmVhZF9wcm90byk7Cj4+ICAKPj4gIAkvKiBjb252ZXJ0IHRoZSBkdW1teSBjeWNs ZXMgdG8gdGhlIG51bWJlciBvZiBieXRlcyAqLwo+PiAtCWR1bW15ID0gKGR1bW15ICogYWRkcl9u Yml0cykgLyA4Owo+PiAtCj4+IC0JaWYgKHNwaV9mbGFzaF9yZWFkX3N1cHBvcnRlZChzcGkpKSB7 Cj4+IC0JCXN0cnVjdCBzcGlfZmxhc2hfcmVhZF9tZXNzYWdlIG1zZzsKPj4gLQo+PiAtCQltZW1z ZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOwo+PiArCW9wLmR1bW15Lm5ieXRlcyA9IChub3ItPnJl YWRfZHVtbXkgKiBvcC5kdW1teS5idXN3aWR0aCkgLyA4Owo+PiAgCj4+IC0JCW1zZy5idWYgPSBi dWY7Cj4+IC0JCW1zZy5mcm9tID0gZnJvbTsKPj4gLQkJbXNnLmxlbiA9IGxlbjsKPj4gLQkJbXNn LnJlYWRfb3Bjb2RlID0gbm9yLT5yZWFkX29wY29kZTsKPj4gLQkJbXNnLmFkZHJfd2lkdGggPSBu b3ItPmFkZHJfd2lkdGg7Cj4+IC0JCW1zZy5kdW1teV9ieXRlcyA9IGR1bW15Owo+PiAtCQltc2cu b3Bjb2RlX25iaXRzID0gaW5zdF9uYml0czsKPj4gLQkJbXNnLmFkZHJfbmJpdHMgPSBhZGRyX25i aXRzOwo+PiAtCQltc2cuZGF0YV9uYml0cyA9IGRhdGFfbmJpdHM7Cj4+IC0KPj4gLQkJcmV0ID0g c3BpX2ZsYXNoX3JlYWQoc3BpLCAmbXNnKTsKPj4gLQkJaWYgKHJldCA8IDApCj4+ICsJd2hpbGUg KHJlbWFpbmluZykgewo+PiArCQlvcC5kYXRhLm5ieXRlcyA9IHJlbWFpbmluZyA8IFVJTlRfTUFY ID8gcmVtYWluaW5nIDogVUlOVF9NQVg7Cj4+ICsJCXJldCA9IHNwaV9tZW1fYWRqdXN0X29wX3Np emUoZmxhc2gtPnNwaW1lbSwgJm9wKTsKPj4gKwkJaWYgKHJldCkKPj4gIAkJCXJldHVybiByZXQ7 Cj4+IC0JCXJldHVybiBtc2cucmV0bGVuOwo+PiAtCX0KPj4gIAo+PiAtCXNwaV9tZXNzYWdlX2lu aXQoJm0pOwo+PiAtCW1lbXNldCh0LCAwLCAoc2l6ZW9mIHQpKTsKPj4gLQo+PiAtCWZsYXNoLT5j b21tYW5kWzBdID0gbm9yLT5yZWFkX29wY29kZTsKPj4gLQltMjVwX2FkZHIyY21kKG5vciwgZnJv bSwgZmxhc2gtPmNvbW1hbmQpOwo+PiAtCj4+IC0JdFswXS50eF9idWYgPSBmbGFzaC0+Y29tbWFu ZDsKPj4gLQl0WzBdLnR4X25iaXRzID0gaW5zdF9uYml0czsKPj4gLQl0WzBdLmxlbiA9IG0yNXBf Y21kc3oobm9yKSArIGR1bW15Owo+PiAtCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7 Cj4+IC0KPj4gLQkvKgo+PiAtCSAqIFNldCBhbGwgZHVtbXkvbW9kZSBjeWNsZSBiaXRzIHRvIGF2 b2lkIHNlbmRpbmcgc29tZSBtYW51ZmFjdHVyZXIKPj4gLQkgKiBzcGVjaWZpYyBwYXR0ZXJuLCB3 aGljaCBtaWdodCBtYWtlIHRoZSBtZW1vcnkgZW50ZXIgaXRzIENvbnRpbnVvdXMKPj4gLQkgKiBS ZWFkIG1vZGUgYnkgbWlzdGFrZS4KPj4gLQkgKiBCYXNlZCBvbiB0aGUgZGlmZmVyZW50IG1vZGUg Y3ljbGUgYml0IHBhdHRlcm5zIGxpc3RlZCBhbmQgZGVzY3JpYmVkCj4+IC0JICogaW4gdGhlIEpF U0QyMTZCIHNwZWNpZmljYXRpb24sIHRoZSAweGZmIHZhbHVlIHdvcmtzIGZvciBhbGwgbWVtb3Jp ZXMKPj4gLQkgKiBhbmQgYWxsIG1hbnVmYWN0dXJlcnMuCj4+IC0JICovCj4+IC0JY21kX3N6ID0g dFswXS5sZW47Cj4+IC0JbWVtc2V0KGZsYXNoLT5jb21tYW5kICsgY21kX3N6IC0gZHVtbXksIDB4 ZmYsIGR1bW15KTsKPj4gLQo+PiAtCS8qIHNwbGl0IHRoZSBvcCBjb2RlIGFuZCBhZGRyZXNzIGJ5 dGVzIGludG8gdHdvIHRyYW5zZmVycyBpZiBuZWVkZWQuICovCj4+IC0JZGF0YV9pZHggPSAxOwo+ PiAtCWlmIChhZGRyX25iaXRzICE9IGluc3RfbmJpdHMpIHsKPj4gLQkJdFswXS5sZW4gPSAxOwo+ PiAtCj4+IC0JCXRbMV0udHhfYnVmID0gJmZsYXNoLT5jb21tYW5kWzFdOwo+PiAtCQl0WzFdLnR4 X25iaXRzID0gYWRkcl9uYml0czsKPj4gLQkJdFsxXS5sZW4gPSBjbWRfc3ogLSAxOwo+PiAtCQlz cGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsxXSwgJm0pOwo+PiArCQlyZXQgPSBzcGlfbWVtX2V4ZWNf b3AoZmxhc2gtPnNwaW1lbSwgJm9wKTsKPj4gKwkJaWYgKHJldCkKPj4gKwkJCXJldHVybiByZXQ7 Cj4+ICAKPj4gLQkJZGF0YV9pZHggPSAyOwo+PiArCQlvcC5hZGRyLnZhbCArPSBvcC5kYXRhLm5i eXRlczsKPj4gKwkJcmVtYWluaW5nIC09IG9wLmRhdGEubmJ5dGVzOwo+PiArCQlvcC5kYXRhLmJ1 Zi5pbiArPSBvcC5kYXRhLm5ieXRlczsKPj4gIAl9Cj4+ICAKPj4gLQl0W2RhdGFfaWR4XS5yeF9i dWYgPSBidWY7Cj4+IC0JdFtkYXRhX2lkeF0ucnhfbmJpdHMgPSBkYXRhX25iaXRzOwo+PiAtCXRb ZGF0YV9pZHhdLmxlbiA9IG1pbjMobGVuLCBzcGlfbWF4X3RyYW5zZmVyX3NpemUoc3BpKSwKPj4g LQkJCSAgICAgICBzcGlfbWF4X21lc3NhZ2Vfc2l6ZShzcGkpIC0gY21kX3N6KTsKPj4gLQlzcGlf bWVzc2FnZV9hZGRfdGFpbCgmdFtkYXRhX2lkeF0sICZtKTsKPj4gLQo+PiAtCXJldCA9IHNwaV9z eW5jKHNwaSwgJm0pOwo+PiAtCWlmIChyZXQpCj4+IC0JCXJldHVybiByZXQ7Cj4+IC0KPj4gLQly ZXQgPSBtLmFjdHVhbF9sZW5ndGggLSBjbWRfc3o7Cj4+IC0JaWYgKHJldCA8IDApCj4+IC0JCXJl dHVybiAtRUlPOwo+PiAtCXJldHVybiByZXQ7Cj4+ICsJcmV0dXJuIGxlbjsKPj4gIH0KPj4gIAo+ PiAgLyoKPj4gQEAgLTIzMSw4ICsxNTAsOSBAQCBzdGF0aWMgc3NpemVfdCBtMjVwODBfcmVhZChz dHJ1Y3Qgc3BpX25vciAqbm9yLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKPj4gICAqIG1hdGNo ZXMgd2hhdCB0aGUgUkVBRCBjb21tYW5kIHN1cHBvcnRzLCBhdCBsZWFzdCB1bnRpbCB0aGlzIGRy aXZlcgo+PiAgICogdW5kZXJzdGFuZHMgRkFTVF9SRUFEIChmb3IgY2xvY2tzIG92ZXIgMjUgTUh6 KS4KPj4gICAqLwo+PiAtc3RhdGljIGludCBtMjVwX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpz cGkpCj4+ICtzdGF0aWMgaW50IG0yNXBfcHJvYmUoc3RydWN0IHNwaV9tZW0gKnNwaW1lbSkKPj4g IHsKPj4gKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gc3BpbWVtLT5zcGk7Cj4+ICAJc3RydWN0 IGZsYXNoX3BsYXRmb3JtX2RhdGEJKmRhdGE7Cj4+ICAJc3RydWN0IG0yNXAgKmZsYXNoOwo+PiAg CXN0cnVjdCBzcGlfbm9yICpub3I7Cj4+IEBAIC0yNDQsOSArMTY0LDkgQEAgc3RhdGljIGludCBt MjVwX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCj4+ICAJY2hhciAqZmxhc2hfbmFtZTsK Pj4gIAlpbnQgcmV0Owo+PiAgCj4+IC0JZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJnNwaS0+ZGV2 KTsKPj4gKwlkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmc3BpbWVtLT5zcGktPmRldik7Cj4+ICAK Pj4gLQlmbGFzaCA9IGRldm1fa3phbGxvYygmc3BpLT5kZXYsIHNpemVvZigqZmxhc2gpLCBHRlBf S0VSTkVMKTsKPj4gKwlmbGFzaCA9IGRldm1fa3phbGxvYygmc3BpbWVtLT5zcGktPmRldiwgc2l6 ZW9mKCpmbGFzaCksIEdGUF9LRVJORUwpOwo+PiAgCWlmICghZmxhc2gpCj4+ICAJCXJldHVybiAt RU5PTUVNOwo+PiAgCj4+IEBAIC0yNTgsMTIgKzE3OCwxMiBAQCBzdGF0aWMgaW50IG0yNXBfcHJv YmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKPj4gIAlub3ItPndyaXRlX3JlZyA9IG0yNXA4MF93 cml0ZV9yZWc7Cj4+ICAJbm9yLT5yZWFkX3JlZyA9IG0yNXA4MF9yZWFkX3JlZzsKPj4gIAo+PiAt CW5vci0+ZGV2ID0gJnNwaS0+ZGV2Owo+PiArCW5vci0+ZGV2ID0gJnNwaW1lbS0+c3BpLT5kZXY7 Cj4+ICAJc3BpX25vcl9zZXRfZmxhc2hfbm9kZShub3IsIHNwaS0+ZGV2Lm9mX25vZGUpOwo+PiAg CW5vci0+cHJpdiA9IGZsYXNoOwo+PiAgCj4+ICAJc3BpX3NldF9kcnZkYXRhKHNwaSwgZmxhc2gp Owo+PiAtCWZsYXNoLT5zcGkgPSBzcGk7Cj4+ICsJZmxhc2gtPnNwaW1lbSA9IHNwaW1lbTsKPj4g IAo+PiAgCWlmIChzcGktPm1vZGUgJiBTUElfUlhfUVVBRCkgewo+PiAgCQlod2NhcHMubWFzayB8 PSBTTk9SX0hXQ0FQU19SRUFEXzFfMV80Owo+PiBAQCAtMzAzLDkgKzIyMyw5IEBAIHN0YXRpYyBp bnQgbTI1cF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQo+PiAgfQo+PiAgCj4+ICAKPj4g LXN0YXRpYyBpbnQgbTI1cF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKPj4gK3N0YXRp YyBpbnQgbTI1cF9yZW1vdmUoc3RydWN0IHNwaV9tZW0gKnNwaW1lbSkKPj4gIHsKPj4gLQlzdHJ1 Y3QgbTI1cAkqZmxhc2ggPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKPj4gKwlzdHJ1Y3QgbTI1cAkq Zmxhc2ggPSBzcGlfbWVtX2dldF9kcnZkYXRhKHNwaW1lbSk7Cj4+ICAKPj4gIAlzcGlfbm9yX3Jl c3RvcmUoJmZsYXNoLT5zcGlfbm9yKTsKPj4gIAo+PiBAQCAtMzEzLDkgKzIzMyw5IEBAIHN0YXRp YyBpbnQgbTI1cF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKPj4gIAlyZXR1cm4gbXRk X2RldmljZV91bnJlZ2lzdGVyKCZmbGFzaC0+c3BpX25vci5tdGQpOwo+PiAgfQo+PiAgCj4+IC1z dGF0aWMgdm9pZCBtMjVwX3NodXRkb3duKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCj4+ICtzdGF0 aWMgdm9pZCBtMjVwX3NodXRkb3duKHN0cnVjdCBzcGlfbWVtICpzcGltZW0pCj4+ICB7Cj4+IC0J c3RydWN0IG0yNXAgKmZsYXNoID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7Cj4+ICsJc3RydWN0IG0y NXAgKmZsYXNoID0gc3BpX21lbV9nZXRfZHJ2ZGF0YShzcGltZW0pOwo+PiAgCj4+ICAJc3BpX25v cl9yZXN0b3JlKCZmbGFzaC0+c3BpX25vcik7Cj4+ICB9Cj4+IEBAIC0zODYsMTIgKzMwNiwxNCBA QCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtMjVwX29mX3RhYmxlW10gPSB7Cj4+ ICB9Owo+PiAgTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbTI1cF9vZl90YWJsZSk7Cj4+ICAKPj4g LXN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBtMjVwODBfZHJpdmVyID0gewo+PiAtCS5kcml2ZXIg PSB7Cj4+IC0JCS5uYW1lCT0gIm0yNXA4MCIsCj4+IC0JCS5vZl9tYXRjaF90YWJsZSA9IG0yNXBf b2ZfdGFibGUsCj4+ICtzdGF0aWMgc3RydWN0IHNwaV9tZW1fZHJpdmVyIG0yNXA4MF9kcml2ZXIg PSB7Cj4+ICsJLnNwaWRydiA9IHsKPj4gKwkJLmRyaXZlciA9IHsKPj4gKwkJCS5uYW1lCT0gIm0y NXA4MCIsCj4+ICsJCQkub2ZfbWF0Y2hfdGFibGUgPSBtMjVwX29mX3RhYmxlLAo+PiArCQl9LAo+ PiArCQkuaWRfdGFibGUJPSBtMjVwX2lkcywKPj4gIAl9LAo+PiAtCS5pZF90YWJsZQk9IG0yNXBf aWRzLAo+PiAgCS5wcm9iZQk9IG0yNXBfcHJvYmUsCj4+ICAJLnJlbW92ZQk9IG0yNXBfcmVtb3Zl LAo+PiAgCS5zaHV0ZG93bgk9IG0yNXBfc2h1dGRvd24sCj4+IEBAIC00MDIsNyArMzI0LDcgQEAg c3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIG0yNXA4MF9kcml2ZXIgPSB7Cj4+ICAJICovCj4+ICB9 Owo+PiAgCj4+IC1tb2R1bGVfc3BpX2RyaXZlcihtMjVwODBfZHJpdmVyKTsKPj4gK21vZHVsZV9z cGlfbWVtX2RyaXZlcihtMjVwODBfZHJpdmVyKTsKPj4gIAo+PiAgTU9EVUxFX0xJQ0VOU0UoIkdQ TCIpOwo+PiAgTU9EVUxFX0FVVEhPUigiTWlrZSBMYXZlbmRlciIpOwo+Pgo+IAo+IF9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IExpbnV4IE1U RCBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdAo+IGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtbXRkLwo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4IE1URCBkaXNjdXNzaW9uIG1haWxpbmcg bGlzdApodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW10 ZC8K