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:44:32 +0200 Message-ID: <6a39f071-186e-7009-994d-af845ce3f75d@microchip.com> References: <20180426161820.2852-1-boris.brezillon@bootlin.com> <20180426161820.2852-7-boris.brezillon@bootlin.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: <20180426161820.2852-7-boris.brezillon@bootlin.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 SGkgYWxsLAoKTGUgMjYvMDQvMjAxOCDDoCAxODoxOCwgQm9yaXMgQnJlemlsbG9uIGEgw6ljcml0 wqA6Cj4gVGhlIHNwaV9tZW1feHh4KCkgQVBJIGhhcyBiZWVuIGludHJvZHVjZWQgdG8gcmVwbGFj ZSB0aGUKPiBzcGlfZmxhc2hfcmVhZCgpIG9uZS4gTWFrZSB1c2Ugb2YgaXQgc28gd2UgY2FuIGdl dCByaWQgb2YKPiBzcGlfZmxhc2hfcmVhZCgpLgo+IAo+IE5vdGUgdGhhdCB1c2luZyBzcGlfbWVt X3h4KCkgYWxzbyBzaW1wbGlmaWVzIHRoZSBjb2RlIGJlY2F1c2UgdGhpcyBBUEkKPiB0YWtlcyBj YXJlIG9mIHVzaW5nIHRoZSByZWd1bGFyIHNwaV9zeW5jKCkgaW50ZXJmYWNlIHdoZW4gdGhlIG9w dGltaXplZAo+IC0+bWVtX29wcyBpbnRlcmZhY2UgaXMgbm90IGltcGxlbWVudGVkIGJ5IHRoZSBj b250cm9sbGVyLkhpIGEKPiAKPiBTaWduZWQtb2ZmLWJ5OiBCb3JpcyBCcmV6aWxsb24gPGJvcmlz LmJyZXppbGxvbkBib290bGluLmNvbT4KPiAtLS0KPiBDaGFuZ2VzIGluIHY0Ogo+IC0gbm9uZQo+ IAo+IENoYW5nZXMgaW4gdjM6Cj4gLSBub25lCj4gCj4gQ2hhbmdlcyBpbiB2MjoKPiAtIGluY2x1 ZGUgc3BpLW1lbS5oCj4gLSB0cmVhdCBvcC0+YWRkci52YWwgZGlmZmVyZW50bHkgc2luY2UgaXQn cyBub3cgYW4gdTY0Cj4gLSBSZXBsYWNlIFNQSV9NRU1fT1BfREFUQV9PVVQoKSBieSBTUElfTUVN X09QX0RBVEFfSU4oKSBpbiBtMjVwODBfcmVhZCgpCj4gLS0tCj4gIGRyaXZlcnMvbXRkL2Rldmlj ZXMvS2NvbmZpZyAgfCAgIDEgKwo+ICBkcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jIHwgMjM2 ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgMiBmaWxlcyBj aGFuZ2VkLCA4MCBpbnNlcnRpb25zKCspLCAxNTcgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2Nv bmZpZwo+IGluZGV4IDZkZWY1NDQ1ZTAzZS4uNTdiMDJjNGIzZjYzIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2Nv bmZpZwo+IEBAIC04MSw2ICs4MSw3IEBAIGNvbmZpZyBNVERfREFUQUZMQVNIX09UUAo+ICBjb25m aWcgTVREX00yNVA4MAo+ICAJdHJpc3RhdGUgIlN1cHBvcnQgbW9zdCBTUEkgRmxhc2ggY2hpcHMg KEFUMjZERiwgTTI1UCwgVzI1WCwgLi4uKSIKPiAgCWRlcGVuZHMgb24gU1BJX01BU1RFUiAmJiBN VERfU1BJX05PUgo+ICsJc2VsZWN0IFNQSV9NRU0KPiAgCWhlbHAKPiAgCSAgVGhpcyBlbmFibGVz IGFjY2VzcyB0byBtb3N0IG1vZGVybiBTUEkgZmxhc2ggY2hpcHMsIHVzZWQgZm9yCj4gIAkgIHBy b2dyYW0gYW5kIGRhdGEgc3RvcmFnZS4gICBTZXJpZXMgc3VwcG9ydGVkIGluY2x1ZGUgQXRtZWwg QVQyNkRGLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jIGIvZHJp dmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYwo+IGluZGV4IGE0ZTE4ZjZhYWEzMy4uM2RjMDIyZDNi NTNlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKPiArKysgYi9k cml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCj4gQEAgLTI0LDEyICsyNCwxMyBAQAo+ICAjaW5j bHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KPiAgCj4gICNpbmNsdWRlIDxsaW51eC9zcGkv c3BpLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLW1lbS5oPgo+ICAjaW5jbHVkZSA8bGlu dXgvc3BpL2ZsYXNoLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9tdGQvc3BpLW5vci5oPgo+ICAKPiAg I2RlZmluZQlNQVhfQ01EX1NJWkUJCTYKPiAgc3RydWN0IG0yNXAgewo+IC0Jc3RydWN0IHNwaV9k ZXZpY2UJKnNwaTsKPiArCXN0cnVjdCBzcGlfbWVtCQkqc3BpbWVtOwo+ICAJc3RydWN0IHNwaV9u b3IJCXNwaV9ub3I7Cj4gIAl1OAkJCWNvbW1hbmRbTUFYX0NNRF9TSVpFXTsKPiAgfTsKPiBAQCAt MzcsOTcgKzM4LDY4IEBAIHN0cnVjdCBtMjVwIHsKPiAgc3RhdGljIGludCBtMjVwODBfcmVhZF9y ZWcoc3RydWN0IHNwaV9ub3IgKm5vciwgdTggY29kZSwgdTggKnZhbCwgaW50IGxlbikKPiAgewo+ ICAJc3RydWN0IG0yNXAgKmZsYXNoID0gbm9yLT5wcml2Owo+IC0Jc3RydWN0IHNwaV9kZXZpY2Ug KnNwaSA9IGZsYXNoLT5zcGk7Cj4gKwlzdHJ1Y3Qgc3BpX21lbV9vcCBvcCA9IFNQSV9NRU1fT1Ao U1BJX01FTV9PUF9DTUQoY29kZSwgMSksCj4gKwkJCQkJICBTUElfTUVNX09QX05PX0FERFIsCj4g KwkJCQkJICBTUElfTUVNX09QX05PX0RVTU1ZLAo+ICsJCQkJCSAgU1BJX01FTV9PUF9EQVRBX0lO KGxlbiwgdmFsLCAxKSk7Cj4gIAlpbnQgcmV0Owo+ICAKPiAtCXJldCA9IHNwaV93cml0ZV90aGVu X3JlYWQoc3BpLCAmY29kZSwgMSwgdmFsLCBsZW4pOwo+ICsJcmV0ID0gc3BpX21lbV9leGVjX29w KGZsYXNoLT5zcGltZW0sICZvcCk7Cj4gIAlpZiAocmV0IDwgMCkKPiAtCQlkZXZfZXJyKCZzcGkt PmRldiwgImVycm9yICVkIHJlYWRpbmcgJXhcbiIsIHJldCwgY29kZSk7Cj4gKwkJZGV2X2Vycigm Zmxhc2gtPnNwaW1lbS0+c3BpLT5kZXYsICJlcnJvciAlZCByZWFkaW5nICV4XG4iLCByZXQsCj4g KwkJCWNvZGUpOwo+ICAKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIG0y NXBfYWRkcjJjbWQoc3RydWN0IHNwaV9ub3IgKm5vciwgdW5zaWduZWQgaW50IGFkZHIsIHU4ICpj bWQpCj4gLXsKPiAtCS8qIG9wY29kZSBpcyBpbiBjbWRbMF0gKi8KPiAtCWNtZFsxXSA9IGFkZHIg Pj4gKG5vci0+YWRkcl93aWR0aCAqIDggLSAgOCk7Cj4gLQljbWRbMl0gPSBhZGRyID4+IChub3It PmFkZHJfd2lkdGggKiA4IC0gMTYpOwo+IC0JY21kWzNdID0gYWRkciA+PiAobm9yLT5hZGRyX3dp ZHRoICogOCAtIDI0KTsKPiAtCWNtZFs0XSA9IGFkZHIgPj4gKG5vci0+YWRkcl93aWR0aCAqIDgg LSAzMik7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgbTI1cF9jbWRzeihzdHJ1Y3Qgc3BpX25vciAq bm9yKQo+IC17Cj4gLQlyZXR1cm4gMSArIG5vci0+YWRkcl93aWR0aDsKPiAtfQo+IC0KPiAgc3Rh dGljIGludCBtMjVwODBfd3JpdGVfcmVnKHN0cnVjdCBzcGlfbm9yICpub3IsIHU4IG9wY29kZSwg dTggKmJ1ZiwgaW50IGxlbikKPiAgewo+ICAJc3RydWN0IG0yNXAgKmZsYXNoID0gbm9yLT5wcml2 Owo+IC0Jc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGZsYXNoLT5zcGk7Cj4gLQo+IC0JZmxhc2gt PmNvbW1hbmRbMF0gPSBvcGNvZGU7Cj4gLQlpZiAoYnVmKQo+IC0JCW1lbWNweSgmZmxhc2gtPmNv bW1hbmRbMV0sIGJ1ZiwgbGVuKTsKPiArCXN0cnVjdCBzcGlfbWVtX29wIG9wID0gU1BJX01FTV9P UChTUElfTUVNX09QX0NNRChvcGNvZGUsIDEpLAo+ICsJCQkJCSAgU1BJX01FTV9PUF9OT19BRERS LAo+ICsJCQkJCSAgU1BJX01FTV9PUF9OT19EVU1NWSwKCkkgZGlkbid0IHRlc3Qgbm9yIGNvbXBp bGVkIHRvIHZlcmlmeSBidXQgSSBoYXZlIHNvbWUgZG91YnQ6CmhlcmUgdGhlICdvcCcgdmFyaWFi bGUgaXMgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgYm90aCBkZWZpbml0aW9ucwpvZiBTUElf TUVNX09QX05PX0FERFIgYW5kIFNQSV9NRU1fT1BfTk9fRFVNTVkgbWFjcm9zIGFyZSB7IH0uCgpJ dCBtaWdodCBiZSBzb21lIHJ1bGUgb2YgdGhlIEMgbGFuZ3VhZ2UgdGhhdCBJIGlnbm9yZSBidXQg YXJlIHdlIGd1YXJhbnRlZWQKdGhhdCB0aGUgLm5ieXRlcyBtZW1iZXIgb2YgYm90aCBzdHJ1Y3R1 cmVzIGlzIGFjdHVhbGx5IGluaXRpYWxpemVkIHRvIDAgPwoKSSB3b3VsZCBzYXkgbm86IEkgdGhp bmsgc2luY2UgdGhlIHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFsbAptZW1i ZXJzIG5vdCBiZWluZyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGFyZSBsZWZ0IHVuaW5pdGlhbGl6 ZWQgYnkgdGhlCmNvbXBpbGVyIHdoZW4gaXQgZ2VuZXJhdGVzIHRoZSBhc3NlbWJsZXIgY29kZS4g SG93ZXZlciwgSSdtIG5vdCAxMDAlIHN1cmUgb2YKdGhhdC4KCkFueXdheSwgd2hhdCBhYm91dCBl eHBsaWNpdGx5IHNldCB0aGUgLm5ieXRlcyBtZW1iZXIgdG8gMCBpbiB0aGUgZGVmaW5pdGlvbgpv ZiBTUElfTUVNX09QX05PKiBoZWxwZXIgbWFjcm9zID8KCj4gKwkJCQkJICBTUElfTUVNX09QX0RB VEFfT1VUKGxlbiwgYnVmLCAxKSk7Cj4gIAo+IC0JcmV0dXJuIHNwaV93cml0ZShzcGksIGZsYXNo LT5jb21tYW5kLCBsZW4gKyAxKTsKPiArCXJldHVybiBzcGlfbWVtX2V4ZWNfb3AoZmxhc2gtPnNw aW1lbSwgJm9wKTsKPiAgfQo+ICAKPiAgc3RhdGljIHNzaXplX3QgbTI1cDgwX3dyaXRlKHN0cnVj dCBzcGlfbm9yICpub3IsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKPiAgCQkJICAgIGNvbnN0IHVf Y2hhciAqYnVmKQo+ICB7Cj4gIAlzdHJ1Y3QgbTI1cCAqZmxhc2ggPSBub3ItPnByaXY7Cj4gLQlz dHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gZmxhc2gtPnNwaTsKPiAtCXVuc2lnbmVkIGludCBpbnN0 X25iaXRzLCBhZGRyX25iaXRzLCBkYXRhX25iaXRzLCBkYXRhX2lkeDsKPiAtCXN0cnVjdCBzcGlf dHJhbnNmZXIgdFszXSA9IHt9Owo+IC0Jc3RydWN0IHNwaV9tZXNzYWdlIG07Cj4gLQlpbnQgY21k X3N6ID0gbTI1cF9jbWRzeihub3IpOwo+IC0Jc3NpemVfdCByZXQ7Cj4gKwlzdHJ1Y3Qgc3BpX21l bV9vcCBvcCA9Cj4gKwkJCVNQSV9NRU1fT1AoU1BJX01FTV9PUF9DTUQobm9yLT5wcm9ncmFtX29w Y29kZSwgMSksCj4gKwkJCQkgICBTUElfTUVNX09QX0FERFIobm9yLT5hZGRyX3dpZHRoLCB0bywg MSksCj4gKwkJCQkgICBTUElfTUVNX09QX0RVTU1ZKDAsIDEpLAoKV2h5IGRvIHlvdSB1c2UgU1BJ X01FTV9PUF9EVU1NWSgwLCAxKSBoZXJlIGluc3RlYWQgb2YgU1BJX01FTV9PUF9OT19EVU1NWSgp ID8KCkJlc3QgcmVnYXJkcywKCkN5cmlsbGUKCj4gKwkJCQkgICBTUElfTUVNX09QX0RBVEFfT1VU KGxlbiwgYnVmLCAxKSk7Cj4gKwlzaXplX3QgcmVtYWluaW5nID0gbGVuOwo+ICsJaW50IHJldDsK PiAgCj4gIAkvKiBnZXQgdHJhbnNmZXIgcHJvdG9jb2xzLiAqLwo+IC0JaW5zdF9uYml0cyA9IHNw aV9ub3JfZ2V0X3Byb3RvY29sX2luc3RfbmJpdHMobm9yLT53cml0ZV9wcm90byk7Cj4gLQlhZGRy X25iaXRzID0gc3BpX25vcl9nZXRfcHJvdG9jb2xfYWRkcl9uYml0cyhub3ItPndyaXRlX3Byb3Rv KTsKPiAtCWRhdGFfbmJpdHMgPSBzcGlfbm9yX2dldF9wcm90b2NvbF9kYXRhX25iaXRzKG5vci0+ d3JpdGVfcHJvdG8pOwo+IC0KPiAtCXNwaV9tZXNzYWdlX2luaXQoJm0pOwo+ICsJb3AuY21kLmJ1 c3dpZHRoID0gc3BpX25vcl9nZXRfcHJvdG9jb2xfaW5zdF9uYml0cyhub3ItPndyaXRlX3Byb3Rv KTsKPiArCW9wLmFkZHIuYnVzd2lkdGggPSBzcGlfbm9yX2dldF9wcm90b2NvbF9hZGRyX25iaXRz KG5vci0+d3JpdGVfcHJvdG8pOwo+ICsJb3AuZHVtbXkuYnVzd2lkdGggPSBvcC5hZGRyLmJ1c3dp ZHRoOwo+ICsJb3AuZGF0YS5idXN3aWR0aCA9IHNwaV9ub3JfZ2V0X3Byb3RvY29sX2RhdGFfbmJp dHMobm9yLT53cml0ZV9wcm90byk7Cj4gIAo+ICAJaWYgKG5vci0+cHJvZ3JhbV9vcGNvZGUgPT0g U1BJTk9SX09QX0FBSV9XUCAmJiBub3ItPnNzdF93cml0ZV9zZWNvbmQpCj4gLQkJY21kX3N6ID0g MTsKPiAtCj4gLQlmbGFzaC0+Y29tbWFuZFswXSA9IG5vci0+cHJvZ3JhbV9vcGNvZGU7Cj4gLQlt MjVwX2FkZHIyY21kKG5vciwgdG8sIGZsYXNoLT5jb21tYW5kKTsKPiArCQlvcC5hZGRyLm5ieXRl cyA9IDA7Cj4gIAo+IC0JdFswXS50eF9idWYgPSBmbGFzaC0+Y29tbWFuZDsKPiAtCXRbMF0udHhf bmJpdHMgPSBpbnN0X25iaXRzOwo+IC0JdFswXS5sZW4gPSBjbWRfc3o7Cj4gLQlzcGlfbWVzc2Fn ZV9hZGRfdGFpbCgmdFswXSwgJm0pOwo+IC0KPiAtCS8qIHNwbGl0IHRoZSBvcCBjb2RlIGFuZCBh ZGRyZXNzIGJ5dGVzIGludG8gdHdvIHRyYW5zZmVycyBpZiBuZWVkZWQuICovCj4gLQlkYXRhX2lk eCA9IDE7Cj4gLQlpZiAoYWRkcl9uYml0cyAhPSBpbnN0X25iaXRzKSB7Cj4gLQkJdFswXS5sZW4g PSAxOwo+ICsJd2hpbGUgKHJlbWFpbmluZykgewo+ICsJCW9wLmRhdGEubmJ5dGVzID0gcmVtYWlu aW5nIDwgVUlOVF9NQVggPyByZW1haW5pbmcgOiBVSU5UX01BWDsKPiArCQlyZXQgPSBzcGlfbWVt X2FkanVzdF9vcF9zaXplKGZsYXNoLT5zcGltZW0sICZvcCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJ cmV0dXJuIHJldDsKPiAgCj4gLQkJdFsxXS50eF9idWYgPSAmZmxhc2gtPmNvbW1hbmRbMV07Cj4g LQkJdFsxXS50eF9uYml0cyA9IGFkZHJfbmJpdHM7Cj4gLQkJdFsxXS5sZW4gPSBjbWRfc3ogLSAx Owo+IC0JCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzFdLCAmbSk7Cj4gKwkJcmV0ID0gc3BpX21l bV9leGVjX29wKGZsYXNoLT5zcGltZW0sICZvcCk7Cj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJu IHJldDsKPiAgCj4gLQkJZGF0YV9pZHggPSAyOwo+ICsJCW9wLmFkZHIudmFsICs9IG9wLmRhdGEu bmJ5dGVzOwo+ICsJCXJlbWFpbmluZyAtPSBvcC5kYXRhLm5ieXRlczsKPiArCQlvcC5kYXRhLmJ1 Zi5vdXQgKz0gb3AuZGF0YS5uYnl0ZXM7Cj4gIAl9Cj4gIAo+IC0JdFtkYXRhX2lkeF0udHhfYnVm ID0gYnVmOwo+IC0JdFtkYXRhX2lkeF0udHhfbmJpdHMgPSBkYXRhX25iaXRzOwo+IC0JdFtkYXRh X2lkeF0ubGVuID0gbGVuOwo+IC0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbZGF0YV9pZHhdLCAm bSk7Cj4gLQo+IC0JcmV0ID0gc3BpX3N5bmMoc3BpLCAmbSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJl dHVybiByZXQ7Cj4gLQo+IC0JcmV0ID0gbS5hY3R1YWxfbGVuZ3RoIC0gY21kX3N6Owo+IC0JaWYg KHJldCA8IDApCj4gLQkJcmV0dXJuIC1FSU87Cj4gLQlyZXR1cm4gcmV0Owo+ICsJcmV0dXJuIGxl bjsKPiAgfQo+ICAKPiAgLyoKPiBAQCAtMTM4LDkyICsxMTAsMzkgQEAgc3RhdGljIHNzaXplX3Qg bTI1cDgwX3JlYWQoc3RydWN0IHNwaV9ub3IgKm5vciwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4s Cj4gIAkJCSAgIHVfY2hhciAqYnVmKQo+ICB7Cj4gIAlzdHJ1Y3QgbTI1cCAqZmxhc2ggPSBub3It PnByaXY7Cj4gLQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gZmxhc2gtPnNwaTsKPiAtCXVuc2ln bmVkIGludCBpbnN0X25iaXRzLCBhZGRyX25iaXRzLCBkYXRhX25iaXRzLCBkYXRhX2lkeDsKPiAt CXN0cnVjdCBzcGlfdHJhbnNmZXIgdFszXTsKPiAtCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwo+IC0J dW5zaWduZWQgaW50IGR1bW15ID0gbm9yLT5yZWFkX2R1bW15Owo+IC0Jc3NpemVfdCByZXQ7Cj4g LQlpbnQgY21kX3N6Owo+ICsJc3RydWN0IHNwaV9tZW1fb3Agb3AgPQo+ICsJCQlTUElfTUVNX09Q KFNQSV9NRU1fT1BfQ01EKG5vci0+cmVhZF9vcGNvZGUsIDEpLAo+ICsJCQkJICAgU1BJX01FTV9P UF9BRERSKG5vci0+YWRkcl93aWR0aCwgZnJvbSwgMSksCj4gKwkJCQkgICBTUElfTUVNX09QX0RV TU1ZKG5vci0+cmVhZF9kdW1teSwgMSksCj4gKwkJCQkgICBTUElfTUVNX09QX0RBVEFfSU4obGVu LCBidWYsIDEpKTsKPiArCXNpemVfdCByZW1haW5pbmcgPSBsZW47Cj4gKwlpbnQgcmV0Owo+ICAK PiAgCS8qIGdldCB0cmFuc2ZlciBwcm90b2NvbHMuICovCj4gLQlpbnN0X25iaXRzID0gc3BpX25v cl9nZXRfcHJvdG9jb2xfaW5zdF9uYml0cyhub3ItPnJlYWRfcHJvdG8pOwo+IC0JYWRkcl9uYml0 cyA9IHNwaV9ub3JfZ2V0X3Byb3RvY29sX2FkZHJfbmJpdHMobm9yLT5yZWFkX3Byb3RvKTsKPiAt CWRhdGFfbmJpdHMgPSBzcGlfbm9yX2dldF9wcm90b2NvbF9kYXRhX25iaXRzKG5vci0+cmVhZF9w cm90byk7Cj4gKwlvcC5jbWQuYnVzd2lkdGggPSBzcGlfbm9yX2dldF9wcm90b2NvbF9pbnN0X25i aXRzKG5vci0+cmVhZF9wcm90byk7Cj4gKwlvcC5hZGRyLmJ1c3dpZHRoID0gc3BpX25vcl9nZXRf cHJvdG9jb2xfYWRkcl9uYml0cyhub3ItPnJlYWRfcHJvdG8pOwo+ICsJb3AuZHVtbXkuYnVzd2lk dGggPSBvcC5hZGRyLmJ1c3dpZHRoOwo+ICsJb3AuZGF0YS5idXN3aWR0aCA9IHNwaV9ub3JfZ2V0 X3Byb3RvY29sX2RhdGFfbmJpdHMobm9yLT5yZWFkX3Byb3RvKTsKPiAgCj4gIAkvKiBjb252ZXJ0 IHRoZSBkdW1teSBjeWNsZXMgdG8gdGhlIG51bWJlciBvZiBieXRlcyAqLwo+IC0JZHVtbXkgPSAo ZHVtbXkgKiBhZGRyX25iaXRzKSAvIDg7Cj4gLQo+IC0JaWYgKHNwaV9mbGFzaF9yZWFkX3N1cHBv cnRlZChzcGkpKSB7Cj4gLQkJc3RydWN0IHNwaV9mbGFzaF9yZWFkX21lc3NhZ2UgbXNnOwo+IC0K PiAtCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOwo+ICsJb3AuZHVtbXkubmJ5dGVzID0g KG5vci0+cmVhZF9kdW1teSAqIG9wLmR1bW15LmJ1c3dpZHRoKSAvIDg7Cj4gIAo+IC0JCW1zZy5i dWYgPSBidWY7Cj4gLQkJbXNnLmZyb20gPSBmcm9tOwo+IC0JCW1zZy5sZW4gPSBsZW47Cj4gLQkJ bXNnLnJlYWRfb3Bjb2RlID0gbm9yLT5yZWFkX29wY29kZTsKPiAtCQltc2cuYWRkcl93aWR0aCA9 IG5vci0+YWRkcl93aWR0aDsKPiAtCQltc2cuZHVtbXlfYnl0ZXMgPSBkdW1teTsKPiAtCQltc2cu b3Bjb2RlX25iaXRzID0gaW5zdF9uYml0czsKPiAtCQltc2cuYWRkcl9uYml0cyA9IGFkZHJfbmJp dHM7Cj4gLQkJbXNnLmRhdGFfbmJpdHMgPSBkYXRhX25iaXRzOwo+IC0KPiAtCQlyZXQgPSBzcGlf Zmxhc2hfcmVhZChzcGksICZtc2cpOwo+IC0JCWlmIChyZXQgPCAwKQo+ICsJd2hpbGUgKHJlbWFp bmluZykgewo+ICsJCW9wLmRhdGEubmJ5dGVzID0gcmVtYWluaW5nIDwgVUlOVF9NQVggPyByZW1h aW5pbmcgOiBVSU5UX01BWDsKPiArCQlyZXQgPSBzcGlfbWVtX2FkanVzdF9vcF9zaXplKGZsYXNo LT5zcGltZW0sICZvcCk7Cj4gKwkJaWYgKHJldCkKPiAgCQkJcmV0dXJuIHJldDsKPiAtCQlyZXR1 cm4gbXNnLnJldGxlbjsKPiAtCX0KPiAgCj4gLQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKPiAtCW1l bXNldCh0LCAwLCAoc2l6ZW9mIHQpKTsKPiAtCj4gLQlmbGFzaC0+Y29tbWFuZFswXSA9IG5vci0+ cmVhZF9vcGNvZGU7Cj4gLQltMjVwX2FkZHIyY21kKG5vciwgZnJvbSwgZmxhc2gtPmNvbW1hbmQp Owo+IC0KPiAtCXRbMF0udHhfYnVmID0gZmxhc2gtPmNvbW1hbmQ7Cj4gLQl0WzBdLnR4X25iaXRz ID0gaW5zdF9uYml0czsKPiAtCXRbMF0ubGVuID0gbTI1cF9jbWRzeihub3IpICsgZHVtbXk7Cj4g LQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOwo+IC0KPiAtCS8qCj4gLQkgKiBTZXQg YWxsIGR1bW15L21vZGUgY3ljbGUgYml0cyB0byBhdm9pZCBzZW5kaW5nIHNvbWUgbWFudWZhY3R1 cmVyCj4gLQkgKiBzcGVjaWZpYyBwYXR0ZXJuLCB3aGljaCBtaWdodCBtYWtlIHRoZSBtZW1vcnkg ZW50ZXIgaXRzIENvbnRpbnVvdXMKPiAtCSAqIFJlYWQgbW9kZSBieSBtaXN0YWtlLgo+IC0JICog QmFzZWQgb24gdGhlIGRpZmZlcmVudCBtb2RlIGN5Y2xlIGJpdCBwYXR0ZXJucyBsaXN0ZWQgYW5k IGRlc2NyaWJlZAo+IC0JICogaW4gdGhlIEpFU0QyMTZCIHNwZWNpZmljYXRpb24sIHRoZSAweGZm IHZhbHVlIHdvcmtzIGZvciBhbGwgbWVtb3JpZXMKPiAtCSAqIGFuZCBhbGwgbWFudWZhY3R1cmVy cy4KPiAtCSAqLwo+IC0JY21kX3N6ID0gdFswXS5sZW47Cj4gLQltZW1zZXQoZmxhc2gtPmNvbW1h bmQgKyBjbWRfc3ogLSBkdW1teSwgMHhmZiwgZHVtbXkpOwo+IC0KPiAtCS8qIHNwbGl0IHRoZSBv cCBjb2RlIGFuZCBhZGRyZXNzIGJ5dGVzIGludG8gdHdvIHRyYW5zZmVycyBpZiBuZWVkZWQuICov Cj4gLQlkYXRhX2lkeCA9IDE7Cj4gLQlpZiAoYWRkcl9uYml0cyAhPSBpbnN0X25iaXRzKSB7Cj4g LQkJdFswXS5sZW4gPSAxOwo+IC0KPiAtCQl0WzFdLnR4X2J1ZiA9ICZmbGFzaC0+Y29tbWFuZFsx XTsKPiAtCQl0WzFdLnR4X25iaXRzID0gYWRkcl9uYml0czsKPiAtCQl0WzFdLmxlbiA9IGNtZF9z eiAtIDE7Cj4gLQkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMV0sICZtKTsKPiArCQlyZXQgPSBz cGlfbWVtX2V4ZWNfb3AoZmxhc2gtPnNwaW1lbSwgJm9wKTsKPiArCQlpZiAocmV0KQo+ICsJCQly ZXR1cm4gcmV0Owo+ICAKPiAtCQlkYXRhX2lkeCA9IDI7Cj4gKwkJb3AuYWRkci52YWwgKz0gb3Au ZGF0YS5uYnl0ZXM7Cj4gKwkJcmVtYWluaW5nIC09IG9wLmRhdGEubmJ5dGVzOwo+ICsJCW9wLmRh dGEuYnVmLmluICs9IG9wLmRhdGEubmJ5dGVzOwo+ICAJfQo+ICAKPiAtCXRbZGF0YV9pZHhdLnJ4 X2J1ZiA9IGJ1ZjsKPiAtCXRbZGF0YV9pZHhdLnJ4X25iaXRzID0gZGF0YV9uYml0czsKPiAtCXRb ZGF0YV9pZHhdLmxlbiA9IG1pbjMobGVuLCBzcGlfbWF4X3RyYW5zZmVyX3NpemUoc3BpKSwKPiAt CQkJICAgICAgIHNwaV9tYXhfbWVzc2FnZV9zaXplKHNwaSkgLSBjbWRfc3opOwo+IC0Jc3BpX21l c3NhZ2VfYWRkX3RhaWwoJnRbZGF0YV9pZHhdLCAmbSk7Cj4gLQo+IC0JcmV0ID0gc3BpX3N5bmMo c3BpLCAmbSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JcmV0ID0gbS5h Y3R1YWxfbGVuZ3RoIC0gY21kX3N6Owo+IC0JaWYgKHJldCA8IDApCj4gLQkJcmV0dXJuIC1FSU87 Cj4gLQlyZXR1cm4gcmV0Owo+ICsJcmV0dXJuIGxlbjsKPiAgfQo+ICAKPiAgLyoKPiBAQCAtMjMx LDggKzE1MCw5IEBAIHN0YXRpYyBzc2l6ZV90IG0yNXA4MF9yZWFkKHN0cnVjdCBzcGlfbm9yICpu b3IsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAo+ICAgKiBtYXRjaGVzIHdoYXQgdGhlIFJFQUQg Y29tbWFuZCBzdXBwb3J0cywgYXQgbGVhc3QgdW50aWwgdGhpcyBkcml2ZXIKPiAgICogdW5kZXJz dGFuZHMgRkFTVF9SRUFEIChmb3IgY2xvY2tzIG92ZXIgMjUgTUh6KS4KPiAgICovCj4gLXN0YXRp YyBpbnQgbTI1cF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQo+ICtzdGF0aWMgaW50IG0y NXBfcHJvYmUoc3RydWN0IHNwaV9tZW0gKnNwaW1lbSkKPiAgewo+ICsJc3RydWN0IHNwaV9kZXZp Y2UgKnNwaSA9IHNwaW1lbS0+c3BpOwo+ICAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEJKmRh dGE7Cj4gIAlzdHJ1Y3QgbTI1cCAqZmxhc2g7Cj4gIAlzdHJ1Y3Qgc3BpX25vciAqbm9yOwo+IEBA IC0yNDQsOSArMTY0LDkgQEAgc3RhdGljIGludCBtMjVwX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNl ICpzcGkpCj4gIAljaGFyICpmbGFzaF9uYW1lOwo+ICAJaW50IHJldDsKPiAgCj4gLQlkYXRhID0g ZGV2X2dldF9wbGF0ZGF0YSgmc3BpLT5kZXYpOwo+ICsJZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEo JnNwaW1lbS0+c3BpLT5kZXYpOwo+ICAKPiAtCWZsYXNoID0gZGV2bV9remFsbG9jKCZzcGktPmRl diwgc2l6ZW9mKCpmbGFzaCksIEdGUF9LRVJORUwpOwo+ICsJZmxhc2ggPSBkZXZtX2t6YWxsb2Mo JnNwaW1lbS0+c3BpLT5kZXYsIHNpemVvZigqZmxhc2gpLCBHRlBfS0VSTkVMKTsKPiAgCWlmICgh Zmxhc2gpCj4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gIAo+IEBAIC0yNTgsMTIgKzE3OCwxMiBAQCBz dGF0aWMgaW50IG0yNXBfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKPiAgCW5vci0+d3Jp dGVfcmVnID0gbTI1cDgwX3dyaXRlX3JlZzsKPiAgCW5vci0+cmVhZF9yZWcgPSBtMjVwODBfcmVh ZF9yZWc7Cj4gIAo+IC0Jbm9yLT5kZXYgPSAmc3BpLT5kZXY7Cj4gKwlub3ItPmRldiA9ICZzcGlt ZW0tPnNwaS0+ZGV2Owo+ICAJc3BpX25vcl9zZXRfZmxhc2hfbm9kZShub3IsIHNwaS0+ZGV2Lm9m X25vZGUpOwo+ICAJbm9yLT5wcml2ID0gZmxhc2g7Cj4gIAo+ICAJc3BpX3NldF9kcnZkYXRhKHNw aSwgZmxhc2gpOwo+IC0JZmxhc2gtPnNwaSA9IHNwaTsKPiArCWZsYXNoLT5zcGltZW0gPSBzcGlt ZW07Cj4gIAo+ICAJaWYgKHNwaS0+bW9kZSAmIFNQSV9SWF9RVUFEKSB7Cj4gIAkJaHdjYXBzLm1h c2sgfD0gU05PUl9IV0NBUFNfUkVBRF8xXzFfNDsKPiBAQCAtMzAzLDkgKzIyMyw5IEBAIHN0YXRp YyBpbnQgbTI1cF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQo+ICB9Cj4gIAo+ICAKPiAt c3RhdGljIGludCBtMjVwX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQo+ICtzdGF0aWMg aW50IG0yNXBfcmVtb3ZlKHN0cnVjdCBzcGlfbWVtICpzcGltZW0pCj4gIHsKPiAtCXN0cnVjdCBt MjVwCSpmbGFzaCA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOwo+ICsJc3RydWN0IG0yNXAJKmZsYXNo ID0gc3BpX21lbV9nZXRfZHJ2ZGF0YShzcGltZW0pOwo+ICAKPiAgCXNwaV9ub3JfcmVzdG9yZSgm Zmxhc2gtPnNwaV9ub3IpOwo+ICAKPiBAQCAtMzEzLDkgKzIzMyw5IEBAIHN0YXRpYyBpbnQgbTI1 cF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKPiAgCXJldHVybiBtdGRfZGV2aWNlX3Vu cmVnaXN0ZXIoJmZsYXNoLT5zcGlfbm9yLm10ZCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIG0y NXBfc2h1dGRvd24oc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKPiArc3RhdGljIHZvaWQgbTI1cF9z aHV0ZG93bihzdHJ1Y3Qgc3BpX21lbSAqc3BpbWVtKQo+ICB7Cj4gLQlzdHJ1Y3QgbTI1cCAqZmxh c2ggPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKPiArCXN0cnVjdCBtMjVwICpmbGFzaCA9IHNwaV9t ZW1fZ2V0X2RydmRhdGEoc3BpbWVtKTsKPiAgCj4gIAlzcGlfbm9yX3Jlc3RvcmUoJmZsYXNoLT5z cGlfbm9yKTsKPiAgfQo+IEBAIC0zODYsMTIgKzMwNiwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCBtMjVwX29mX3RhYmxlW10gPSB7Cj4gIH07Cj4gIE1PRFVMRV9ERVZJQ0Vf VEFCTEUob2YsIG0yNXBfb2ZfdGFibGUpOwo+ICAKPiAtc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVy IG0yNXA4MF9kcml2ZXIgPSB7Cj4gLQkuZHJpdmVyID0gewo+IC0JCS5uYW1lCT0gIm0yNXA4MCIs Cj4gLQkJLm9mX21hdGNoX3RhYmxlID0gbTI1cF9vZl90YWJsZSwKPiArc3RhdGljIHN0cnVjdCBz cGlfbWVtX2RyaXZlciBtMjVwODBfZHJpdmVyID0gewo+ICsJLnNwaWRydiA9IHsKPiArCQkuZHJp dmVyID0gewo+ICsJCQkubmFtZQk9ICJtMjVwODAiLAo+ICsJCQkub2ZfbWF0Y2hfdGFibGUgPSBt MjVwX29mX3RhYmxlLAo+ICsJCX0sCj4gKwkJLmlkX3RhYmxlCT0gbTI1cF9pZHMsCj4gIAl9LAo+ IC0JLmlkX3RhYmxlCT0gbTI1cF9pZHMsCj4gIAkucHJvYmUJPSBtMjVwX3Byb2JlLAo+ICAJLnJl bW92ZQk9IG0yNXBfcmVtb3ZlLAo+ICAJLnNodXRkb3duCT0gbTI1cF9zaHV0ZG93biwKPiBAQCAt NDAyLDcgKzMyNCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBtMjVwODBfZHJpdmVyID0g ewo+ICAJICovCj4gIH07Cj4gIAo+IC1tb2R1bGVfc3BpX2RyaXZlcihtMjVwODBfZHJpdmVyKTsK PiArbW9kdWxlX3NwaV9tZW1fZHJpdmVyKG0yNXA4MF9kcml2ZXIpOwo+ICAKPiAgTU9EVUxFX0xJ Q0VOU0UoIkdQTCIpOwo+ICBNT0RVTEVfQVVUSE9SKCJNaWtlIExhdmVuZGVyIik7Cj4gCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgg TVREIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtbXRkLwo=