From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3549CC433F5 for ; Mon, 22 Nov 2021 08:58:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Ri3h0keWfQaHghiX0h+h78fmTf7SPaN1L8+l/tvvIwI=; b=208WICqyz6CGo8 NOZXx716YzBF4M/8I6668kHH9ItZlC4ua/xCs12R864NQuARWbKhnwhI0ATuC+muNFnCXUeyLakEE krS7HaFHAA6J3+mrZipHpLRQ1AevEbGm31BsCormHaVW3JlmJTDdiBk/C+OsNob28BywxwBOAexwC MavkJ7VLByGe/yb+7gKsTX0VVUBJd8GXn8G68txqPbPxKRr5xsuQ8M5ZRYA4H6WA+BVJihoqWhIGM ulo7Vf2dYdPPi3wEuH9WisUOouvYjXlQezTAYCVsLZZ9eX166Re5GpzVqytiKTEr4jH8rEtdADHAt Zknu/t+tq+7I+wHyJFaQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mp59y-00FRZt-Ta; Mon, 22 Nov 2021 08:58:47 +0000 Received: from relay12.mail.gandi.net ([217.70.178.232]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mp58z-00FR3x-GW; Mon, 22 Nov 2021 08:57:48 +0000 Received: (Authenticated sender: miquel.raynal@bootlin.com) by relay12.mail.gandi.net (Postfix) with ESMTPSA id 9BB2F20000E; Mon, 22 Nov 2021 08:57:37 +0000 (UTC) Date: Mon, 22 Nov 2021 09:57:37 +0100 From: Miquel Raynal To: "xiangsheng.hou" Cc: , , , , , , , , , , , , Subject: Re: [RFC,v3 2/5] mtd: ecc: realize Mediatek HW ECC driver Message-ID: <20211122095737.66c239b4@xps13> In-Reply-To: <3cef133445bf7eea64c7e3aea180a28abbaae638.camel@mediatek.com> References: <20211022024021.14665-1-xiangsheng.hou@mediatek.com> <20211022024021.14665-3-xiangsheng.hou@mediatek.com> <20211109131829.30a82ea4@xps13> <3cef133445bf7eea64c7e3aea180a28abbaae638.camel@mediatek.com> Organization: Bootlin X-Mailer: Claws Mail 3.17.7 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211122_005745_891254_9E23A01F X-CRM114-Status: GOOD ( 41.54 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org SGkgeGlhbmdzaGVuZywKCnhpYW5nc2hlbmcuaG91QG1lZGlhdGVrLmNvbSB3cm90ZSBvbiBGcmks IDEyIE5vdiAyMDIxIDE2OjQwOjA0ICswODAwOgoKPiBIaSBNaXF1ZWwsCj4gCj4gT24gVHVlLCAy MDIxLTExLTA5IGF0IDEzOjE4ICswMTAwLCBNaXF1ZWwgUmF5bmFsIHdyb3RlOgo+ID4gSGkgWGlh bmdzaGVuZywKPiA+IAo+ID4geGlhbmdzaGVuZy5ob3VAbWVkaWF0ZWsuY29tIHdyb3RlIG9uIEZy aSwgMjIgT2N0IDIwMjEgMTA6NDA6MTggKzA4MDA6Cj4gPiAgIAo+ID4gPiBUaGUgdjMgZHJpdmVy IHJlYWxpemUgTWVkaWF0ZWsgSFcgRUNDIGVuZ2luZSB3aXRoIHBpcGVsaW5lZAo+ID4gPiBjYXNl LiAgCj4gPiAKPiA+IHYzIGRyaXZlcj8gSSBndWVzcyB5b3UgYXJlIHRhbGtpbmcgYWJvdXQgdGhl IGhhcmR3YXJlPwo+ID4gICAKPiAKPiBKdXN0IHN0YW5kYXJkIGZvciB0aGUgUkZDIHYzIHBhdGNo Lgo+IAo+ID4gSSBkb24ndCB0aGluayAncmVhbGl6ZScgbWFrZXMgbXVjaCBzZW5zZSBoZXJlLiBQ ZXJoYXBzIHRoZSB0aXRsZQo+ID4gY291bGQKPiA+IGJlOgo+ID4gIm10ZDogZWNjOiBtdGs6IENv bnZlcnQgdG8gdGhlIEVDQyBpbmZyYXN0cnVjdHVyZQo+ID4gICAKPiAKPiBJIHdpbGwgZml4IGl0 IGF0IG5leHQgaXRlcmF0aW9uLgo+IAo+ID4gPiAKPiA+ID4gU2lnbmVkLW9mZi1ieTogWGlhbmdz aGVuZyBIb3UgPHhpYW5nc2hlbmcuaG91QG1lZGlhdGVrLmNvbT4KPiA+ID4gLS0tCj4gPiA+ICBk cml2ZXJzL210ZC9uYW5kL2NvcmUuYyAgICAgfCAgMTAgKy0KPiA+ID4gIGRyaXZlcnMvbXRkL25h bmQvZWNjLmMgICAgICB8ICA4OCArKysrKysrCj4gPiA+ICBkcml2ZXJzL210ZC9uYW5kL210a19l Y2MuYyAgfCA0ODgKPiA+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g PiA+ICBpbmNsdWRlL2xpbnV4L210ZC9tdGtfZWNjLmggfCAgMzggKysrCj4gPiA+ICBpbmNsdWRl L2xpbnV4L210ZC9uYW5kLmggICAgfCAgMTEgKwo+ID4gPiAgNSBmaWxlcyBjaGFuZ2VkLCA2MzIg aW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL210ZC9uYW5kL2NvcmUuYyBiL2RyaXZlcnMvbXRkL25hbmQvY29yZS5jCj4gPiA+IGlu ZGV4IDVlMTNhMDNkMmIzMi4uYjIyOGI0ZDEzYjdhIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJz L210ZC9uYW5kL2NvcmUuYwo+ID4gPiArKysgYi9kcml2ZXJzL210ZC9uYW5kL2NvcmUuYwo+ID4g PiBAQCAtMjMyLDcgKzIzMiw5IEBAIHN0YXRpYyBpbnQgbmFuZGRldl9nZXRfZWNjX2VuZ2luZShz dHJ1Y3QKPiA+ID4gbmFuZF9kZXZpY2UgKm5hbmQpCj4gPiA+ICAJCW5hbmQtPmVjYy5lbmdpbmUg PSBuYW5kX2VjY19nZXRfb25fZGllX2h3X2VuZ2luZShuYW5kKTsKPiA+ID4gIAkJYnJlYWs7Cj4g PiA+ICAJY2FzZSBOQU5EX0VDQ19FTkdJTkVfVFlQRV9PTl9IT1NUOgo+ID4gPiAtCQlwcl9lcnIo Ik9uLWhvc3QgaGFyZHdhcmUgRUNDIGVuZ2luZXMgbm90IHN1cHBvcnRlZAo+ID4gPiB5ZXRcbiIp Owo+ID4gPiArCQluYW5kLT5lY2MuZW5naW5lID0KPiA+ID4gbmFuZF9lY2NfZ2V0X29uX2hvc3Rf aHdfZW5naW5lKG5hbmQpOwo+ID4gPiArCQlpZiAoUFRSX0VSUihuYW5kLT5lY2MuZW5naW5lKSA9 PSAtRVBST0JFX0RFRkVSKQo+ID4gPiArCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7ICAKPiA+IAo+ ID4gUGxlYXNlIGJhc2UgeW91ciBzZXJpZXMgb24gdG9wIG9mIG15IHByZXZpb3VzIHdvcmsgKGV2 ZW4gaWYgbm90IDEwMCUKPiA+IHN0YWJsZSB5ZXQpIHRvIGF2b2lkIGxlYWtpbmcgY29yZSBjaGFu Z2VzIGhlcmUuIFRoZXkgYWxyZWFkeSBleGlzdCwKPiA+IG5vCj4gPiBuZWVkIHRvIGR1cGxpY2F0 ZSB0aGVtLiAgCj4gCj4gV2lsbCBiZSByZW1vZWQgaW4gbmV4dCBpdGVyYXRpb24uCj4gCj4gPiA+ ICtzdGF0aWMgaW50IG10Nzk4Nl9lY2NfcmVnc1tdID0gewo+ID4gPiArCVtFQ0NfRU5DUEFSMDBd ID0gICAgICAgIDB4MzAwLAo+ID4gPiArCVtFQ0NfRU5DSVJRX0VOXSA9ICAgICAgIDB4ODAsCj4g PiA+ICsJW0VDQ19FTkNJUlFfU1RBXSA9ICAgICAgMHg4NCwKPiA+ID4gKwlbRUNDX0RFQ0RPTkVd ID0gICAgICAgICAweDEyNCwKPiA+ID4gKwlbRUNDX0RFQ0lSUV9FTl0gPSAgICAgICAweDIwMCwK PiA+ID4gKwlbRUNDX0RFQ0lSUV9TVEFdID0gICAgICAweDIwNCwKPiA+ID4gK307Cj4gPiA+ICsK PiA+ID4gIHN0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZWNjX3dhaXRfaWRsZShzdHJ1Y3QgbXRrX2Vj YyAqZWNjLAo+ID4gPiAgCQkJCSAgICAgZW51bSBtdGtfZWNjX29wZXJhdGlvbiBvcCkKPiA+ID4g IHsKPiA+ID4gQEAgLTQ0Nyw2ICs0NjQsNDY0IEBAIHVuc2lnbmVkIGludCBtdGtfZWNjX2dldF9w YXJpdHlfYml0cyhzdHJ1Y3QKPiA+ID4gbXRrX2VjYyAqZWNjKQo+ID4gPiAgfQo+ID4gPiAgRVhQ T1JUX1NZTUJPTChtdGtfZWNjX2dldF9wYXJpdHlfYml0cyk7Cj4gPiA+ICAKPiA+ID4gK3N0YXRp YyBpbmxpbmUgaW50IGRhdGFfb2ZmKHN0cnVjdCBuYW5kX2RldmljZSAqbmFuZCwgaW50IGkpICAK PiA+IAo+ID4gUGxlYXNlIGFsd2F5cyBwcmVmaXggYWxsIHlvdXIgaGVscGVycyB3aXRoIG10a19l Y2NfCj4gPiAgIAo+ID4gPiArewo+ID4gPiArCWludCBlY2NzaXplID0gbmFuZC0+ZWNjLmN0eC5j b25mLnN0ZXBfc2l6ZTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiBpICogZWNjc2l6ZTsKPiA+ID4g K30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGlubGluZSBpbnQgZmRtX29mZihzdHJ1Y3QgbmFuZF9k ZXZpY2UgKm5hbmQsIGludCBpKSAgCj4gPiAKPiA+IFdoYXQgaXMgZmRtPyAgCj4gCj4gQXMgdGFs a2VkIGluIHRoZSBzZXQvZ2V0IE9PQiBieXRlcyBzZXJpZXMsIGZkbSBzdGFuZCBmb3IgZmxhc2gg ZGlzawo+IG1hbmFnZW1lbnQgZGF0YS4gSXRgcyBPT0IgYnl0ZXMgYmVzaWRlcyB0aGUgZWNjIHBh cml0eSBpbiBlYWNoIHNlY3Rvcgo+IE9PQiBhcmVhLiBUaGF0IGlzIGZyZWUgT09CIGJ5dGVzIGFu ZCB0aGUgQkJNLgo+IAo+ID4gICAKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgbXRrX2VjY19lbmdp bmUgKmVuZyA9IG5hbmQtPmVjYy5jdHgucHJpdjsKPiA+ID4gKwlpbnQgcG9pOwo+ID4gPiArCj4g PiA+ICsJaWYgKGkgPCBlbmctPmJhZF9tYXJrLnNlYykgIAo+ID4gCj4gPiBzZWMgZG9lcyBub3Qg bWVhbiBhbnl0aGluZyB0byBtZSAgCj4gCj4gc2VjIHN0YW5kYXJkIGZvciBzZWN0b3Igc2luY2Ug bXRrIEVDQyBlbmdpbmUgb3JnYW5pemUgZGF0YSBhcyBzZWN0b3IgaW4KPiB1bml0LiBBbmQgdGhl cmUgaGF2ZSBCQk0gc3dhcCBvcGVyYXRpb24gaW4gZWNjIGRyaXZlciB0byBlbnN1cmUgQkJNCj4g cG9zaXRpb24gY29uc2lzdGVudCB3aXRoIG5hbmQgc3BlY2lmaWNhdGlvbi4gUGxlYXNlIHJlZmVy IHRvIHRoZQo+IHNldC9nZXQgb29iIHNlcmllcy4KCkFzIGEgZ2VuZXJhbCBydWxlLCB5b3UgbWF5 IHJlZmVyIHRvIHRoZSBkYXRhc2hlZXQga2V5d29yZHMgYmVjYXVzZSBpdCdzCmVhc2llciB3aGVu IHJlYWRpbmcgdGhlIGRyaXZlciBhbmQgdGhlIGRvYyBidXQgaW4gZ2VuZXJhbCBJIHdpbGwgYXNr CnlvdSB0byBiZSB2ZXJ5IGNsZWFyIGFib3V0IHRoZSB0ZXJtcyB5b3UgdXNlOiB0aGUgTkFORCBj b3JlIGNvbnRhaW5zCnRlbnMgb2YgZGlmZmVyZW50IGRyaXZlcnMsIGFsbCBjb21pbmcgZnJvbSBk aWZmZXJlbnQgY29tcGFuaWVzIHdpdGgKZGlmZmVyZW50IHdvcmRpbmdzLiBQbGVhc2UgdHJ5IHRv IHRyYW5zbGF0ZSB0aGUgTVRLIHdvcmtpbmcgaW50bwpzb21ldGhpbmcgdGhhdCBpcyB1bmRlcnN0 YW5kYWJsZSBmcm9tIHNvbWVvbmUgbm90IGluIHlvdXIgY29tcGFueS4KCkZETSBpcyBub3QgYSBn ZW5lcmljIHRlcm0sIHNlY3RvciBpcyBub3QgdGhlIHdvcmQgd2UgZ2VuZXJhbGx5IHVzZQood2hp Y2ggaW4gZ2VuZXJhbCByZWZlcnMgdG8gZGlza3MpLCBldGMuCgo+ID4gPiArCQlwb2kgPSAoaSAr IDEpICogZW5nLT5mZG1fc2l6ZTsKPiA+ID4gKwllbHNlIGlmIChpID09IGVuZy0+YmFkX21hcmsu c2VjKQo+ID4gPiArCQlwb2kgPSAwOwo+ID4gPiArCWVsc2UKPiA+ID4gKwkJcG9pID0gaSAqIGVu Zy0+ZmRtX3NpemU7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gcG9pOwo+ID4gPiArfQo+ID4gPiAr Cj4gPiA+ICtzdGF0aWMgaW5saW5lIGludCBtdGtfZWNjX2RhdGFfbGVuKHN0cnVjdCBuYW5kX2Rl dmljZSAqbmFuZCkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgbXRrX2VjY19lbmdpbmUgKmVuZyA9 IG5hbmQtPmVjYy5jdHgucHJpdjsKPiA+ID4gKwlpbnQgZWNjc2l6ZSA9IG5hbmQtPmVjYy5jdHgu Y29uZi5zdGVwX3NpemU7Cj4gPiA+ICsJaW50IGVjY2J5dGVzID0gZW5nLT5vb2JfZWNjOwo+ID4g PiArCj4gPiA+ICsJcmV0dXJuIGVjY3NpemUgKyBlbmctPmZkbV9zaXplICsgZWNjYnl0ZXM7Cj4g PiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbmxpbmUgdTggKm10a19lY2Nfc2VjX3B0cihz dHJ1Y3QgbmFuZF9kZXZpY2UgKm5hbmQsICBpbnQKPiA+ID4gaSkKPiA+ID4gK3sKPiA+ID4gKwlz dHJ1Y3QgbXRrX2VjY19lbmdpbmUgKmVuZyA9IG5hbmQtPmVjYy5jdHgucHJpdjsKPiA+ID4gKwo+ ID4gPiArCXJldHVybiBlbmctPnBhZ2VfYnVmICsgaSAqIG10a19lY2NfZGF0YV9sZW4obmFuZCk7 Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbmxpbmUgdTggKm10a19lY2NfZmRtX3B0 cihzdHJ1Y3QgbmFuZF9kZXZpY2UgKm5hbmQsIGludCBpKQo+ID4gPiArewo+ID4gPiArCXN0cnVj dCBtdGtfZWNjX2VuZ2luZSAqZW5nID0gbmFuZC0+ZWNjLmN0eC5wcml2Owo+ID4gPiArCWludCBl Y2NzaXplID0gbmFuZC0+ZWNjLmN0eC5jb25mLnN0ZXBfc2l6ZTsKPiA+ID4gKwo+ID4gPiArCXJl dHVybiBlbmctPnBhZ2VfYnVmICsgaSAqIG10a19lY2NfZGF0YV9sZW4obmFuZCkgKyBlY2NzaXpl Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZCBtdGtfZWNjX25vX2JhZF9tYXJr X3N3YXAoc3RydWN0IG5hbmRfZGV2aWNlICphLCB1OCAqYiwKPiA+ID4gKwkJCQkJCQl1OCAqYykK PiA+ID4gK3sKPiA+ID4gKwkvKiBub3AgKi8KPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGlj IHZvaWQgbXRrX2VjY19iYWRfbWFya19zd2FwKHN0cnVjdCBuYW5kX2RldmljZSAqbmFuZCwgdTgK PiA+ID4gKmRhdGFidWYsCj4gPiA+ICsJCQkJCQkJdTggKm9vYmJ1ZikKPiA+ID4gK3sKPiA+ID4g KwlzdHJ1Y3QgbXRrX2VjY19lbmdpbmUgKmVuZyA9IG5hbmQtPmVjYy5jdHgucHJpdjsKPiA+ID4g KwlpbnQgc3RlcF9zaXplID0gbmFuZC0+ZWNjLmN0eC5jb25mLnN0ZXBfc2l6ZTsKPiA+ID4gKwl1 MzIgYmFkX3BvcyA9IGVuZy0+YmFkX21hcmsucG9zOwo+ID4gPiArCj4gPiA+ICsJYmFkX3BvcyAr PSBlbmctPmJhZF9tYXJrLnNlYyAqIHN0ZXBfc2l6ZTsKPiA+ID4gKwo+ID4gPiArCXN3YXAob29i YnVmWzBdLCBkYXRhYnVmW2JhZF9wb3NdKTsgIAo+ID4gCj4gPiBwbGVhc2UgY2hhbmdlICJiYWQi IG9yICJiYWQgbWFyayIgYnkgImJibSIgd2hpY2ggaXMgdGhlIG5hbWUgdXNlZAo+ID4gZXZlcnl3 aGVyZSBlbHNlIGluIHRoaXMgc3Vic3lzdGVtLgo+ID4gICAKPiAKPiBXaWxsIGZpeCB0aGVzZSBh dCBuZXh0IGl0ZXJhdGlvbi4KPiAKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQg bXRrX2VjY19zZXRfYmFkX21hcmtfY3RsKHN0cnVjdCBtdGtfZWNjX2JhZF9tYXJrX2N0bAo+ID4g PiAqYm1fY3RsLAo+ID4gPiArCQkJCSAgICAgc3RydWN0IG10ZF9pbmZvICptdGQpCj4gPiA+ICt7 Cj4gPiA+ICsJc3RydWN0IG5hbmRfZGV2aWNlICpuYW5kID0gbXRkX3RvX25hbmRkZXYobXRkKTsK PiA+ID4gKwo+ID4gPiArCWlmIChtdGQtPndyaXRlc2l6ZSA9PSA1MTIpIHsKPiA+ID4gKwkJYm1f Y3RsLT5ibV9zd2FwID0gbXRrX2VjY19ub19iYWRfbWFya19zd2FwOwo+ID4gPiArCX0gZWxzZSB7 Cj4gPiA+ICsJCWJtX2N0bC0+Ym1fc3dhcCA9IG10a19lY2NfYmFkX21hcmtfc3dhcDsKPiA+ID4g KwkJYm1fY3RsLT5zZWMgPSBtdGQtPndyaXRlc2l6ZSAvIG10a19lY2NfZGF0YV9sZW4obmFuZCk7 Cj4gPiA+ICsJCWJtX2N0bC0+cG9zID0gbXRkLT53cml0ZXNpemUgJSBtdGtfZWNjX2RhdGFfbGVu KG5hbmQpOyAgCj4gPiAKPiA+IHNlYz8gcG9zPyB3aGF0IGRvZXMgdGhpcyBtZWFuPyAgCj4gCj4g c2VjIHN0YW5kIGZvciBzZWN0b3IgYW5kIHBvcyBzdGFuZCBmb3IgcG9zaXRpb24uCj4gCj4gbXRr X2VjY19zZXRfYmFkX21hcmtfY3RsIGZ1bmN0aW9uIGlzIHRoZSBsb2dpYyB0byBjYWxjdWxhdGUg dGhlIEJCTQo+IHN3YXAgYXQgd2hpY2ggc2VjdG9yIGFuZCB0aGUgcG9zaXRpb24gaW4gdGhlIHNl Y3Rvci4KPiAKPiA+ID4gKyAqCj4gPiA+ICsgKiBNZWRpYXRlayBIVyBFQ0MgZW5naW5lIG9yZ2Fu aXplIGRhdGEvb29iIGZyZWUvb29iIGVjYyBieQo+ID4gPiBzZWN0b3IsCj4gPiA+ICsgKiB0aGUg ZGF0YSBmb3JtYXQgZm9yIG9uZSBwYWdlIGFzIGJlbGxvdzoKPiA+ID4gKyAqIHx8ICAgICAgICAg IHNlY3RvciAwICAgICAgICAgfHwgICAgICAgICAgc2VjdG9yIDEgICAgICAgICB8fAo+ID4gPiAu Li4KPiA+ID4gKyAqIHx8IGRhdGEgfCAgIGZkbSAgICB8IG9vYiBlY2MgfHwgZGF0YSB8fCAgIGZk bSAgIHwgb29iIGVjYyB8fAo+ID4gPiAuLi4KPiA+ID4gKyAqCj4gPiA+ICsgKiBUZXJlZm9yZSwg aXRgcyBuZWNlc3NhcnkgdG8gY292ZXJ0IGRhdGEgd2hlbiByZWFkL3dyaXRlIGluCj4gPiA+IE1U RF9PUFNfUkFXLiAgCj4gPiAKPiA+IGl0IGlzIC4uLiBjb252ZXJ0IC4uLiByZWFkaW5nL3dyaXRp bmcgaW4gcmF3IG1vZGUuCj4gPiAgIAo+ID4gPiArICogVGhlc2UgZGF0YSBpbmNsdWRlIGJhZCBt YXJrLCBzZWN0b3IgZGF0YSwgZmRtIGRhdGEgYW5kIG9vYiBlY2MuCj4gPiA+ICsgKi8KPiA+ID4g K3N0YXRpYyB2b2lkIG10a19lY2NfZGF0YV9mb3JtYXQoc3RydWN0IG5hbmRfZGV2aWNlICpuYW5k LAo+ID4gPiArCQkJdTggKmRhdGFidWYsIHU4ICpvb2JidWYsIGJvb2wgd3JpdGUpCj4gPiA+ICt7 Cj4gPiA+ICsJc3RydWN0IG10a19lY2NfZW5naW5lICplbmcgPSBuYW5kLT5lY2MuY3R4LnByaXY7 Cj4gPiA+ICsJaW50IHN0ZXBfc2l6ZSA9IG5hbmQtPmVjYy5jdHguY29uZi5zdGVwX3NpemU7Cj4g PiA+ICsJaW50IGk7Cj4gPiA+ICsKPiA+ID4gKwlpZiAod3JpdGUpIHsKPiA+ID4gKwkJZm9yIChp ID0gMDsgaSA8IGVuZy0+bnN0ZXBzOyBpKyspIHsKPiA+ID4gKwkJCWlmIChpID09IGVuZy0+YmFk X21hcmsuc2VjKQo+ID4gPiArCQkJCWVuZy0+YmFkX21hcmsuYm1fc3dhcChuYW5kLAo+ID4gPiAr CQkJCQkJZGF0YWJ1Ziwgb29iYnVmKTsKPiA+ID4gKwkJCW1lbWNweShtdGtfZWNjX3NlY19wdHIo bmFuZCwgaSksCj4gPiA+ICsJCQkJICAgZGF0YWJ1ZiArIGRhdGFfb2ZmKG5hbmQsIGkpLAo+ID4g PiBzdGVwX3NpemUpOwo+ID4gPiArCj4gPiA+ICsJCQltZW1jcHkobXRrX2VjY19mZG1fcHRyKG5h bmQsIGkpLAo+ID4gPiArCQkJCSAgIG9vYmJ1ZiArIGZkbV9vZmYobmFuZCwgaSksCj4gPiA+ICsJ CQkJICAgZW5nLT5mZG1fc2l6ZSk7Cj4gPiA+ICsKPiA+ID4gKwkJCW1lbWNweShtdGtfZWNjX2Zk bV9wdHIobmFuZCwgaSkgKyBlbmctICAKPiA+ID4gPmZkbV9zaXplLCAgCj4gPiA+ICsJCQkJICAg b29iYnVmICsgZW5nLT5mZG1fc2l6ZSAqIGVuZy0+bnN0ZXBzIAo+ID4gPiArCj4gPiA+ICsJCQkJ ICAgaSAqIGVuZy0+b29iX2VjYywKPiA+ID4gKwkJCQkgICBlbmctPm9vYl9lY2MpOwo+ID4gPiAr Cj4gPiA+ICsJCQkvKiBzd2FwIGJhY2sgd2hlbiB3cml0ZSAqLwo+ID4gPiArCQkJaWYgKGkgPT0g ZW5nLT5iYWRfbWFyay5zZWMpCj4gPiA+ICsJCQkJZW5nLT5iYWRfbWFyay5ibV9zd2FwKG5hbmQs Cj4gPiA+ICsJCQkJCQlkYXRhYnVmLCBvb2JidWYpOwo+ID4gPiArCQl9Cj4gPiA+ICsJfSBlbHNl IHsKPiA+ID4gKwkJZm9yIChpID0gMDsgaSA8IGVuZy0+bnN0ZXBzOyBpKyspIHsKPiA+ID4gKwkJ CW1lbWNweShkYXRhYnVmICsgZGF0YV9vZmYobmFuZCwgaSksCj4gPiA+ICsJCQkJICAgbXRrX2Vj Y19zZWNfcHRyKG5hbmQsIGkpLAo+ID4gPiBzdGVwX3NpemUpOwo+ID4gPiArCj4gPiA+ICsJCQlt ZW1jcHkob29iYnVmICsgZmRtX29mZihuYW5kLCBpKSwKPiA+ID4gKwkJCQkgICBtdGtfZWNjX3Nl Y19wdHIobmFuZCwgaSkgKwo+ID4gPiBzdGVwX3NpemUsCj4gPiA+ICsJCQkJICAgZW5nLT5mZG1f c2l6ZSk7Cj4gPiA+ICsKPiA+ID4gKwkJCW1lbWNweShvb2JidWYgKyBlbmctPmZkbV9zaXplICog ZW5nLT5uc3RlcHMgKwo+ID4gPiArCQkJCSAgIGkgKiBlbmctPm9vYl9lY2MsCj4gPiA+ICsJCQkJ ICAgbXRrX2VjY19zZWNfcHRyKG5hbmQsIGkpICsgc3RlcF9zaXplCj4gPiA+ICsJCQkJICAgKyBl bmctPmZkbV9zaXplLAo+ID4gPiArCQkJCSAgIGVuZy0+b29iX2VjYyk7Cj4gPiA+ICsKPiA+ID4g KwkJCWlmIChpID09IGVuZy0+YmFkX21hcmsuc2VjKQo+ID4gPiArCQkJCWVuZy0+YmFkX21hcmsu Ym1fc3dhcChuYW5kLAo+ID4gPiArCQkJCQkJZGF0YWJ1Ziwgb29iYnVmKTsKPiA+ID4gKwkJfQo+ ID4gPiArCX0KPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgbXRrX2VjY19mZG1f c2hpZnQoc3RydWN0IG5hbmRfZGV2aWNlICpuYW5kLAo+ID4gPiArCQkJCXU4ICpkc3RfYnVmLCB1 OCAqc3JjX2J1ZikKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgbXRrX2VjY19lbmdpbmUgKmVuZyA9 IG5hbmQtPmVjYy5jdHgucHJpdjsKPiA+ID4gKwl1OCAqcG9pOwo+ID4gPiArCWludCBpOwo+ID4g PiArCj4gPiA+ICsJZm9yIChpID0gMDsgaSA8IGVuZy0+bnN0ZXBzOyBpKyspIHsKPiA+ID4gKwkJ aWYgKGkgPCBlbmctPmJhZF9tYXJrLnNlYykKPiA+ID4gKwkJCXBvaSA9IHNyY19idWYgKyAoaSAr IDEpICogZW5nLT5mZG1fc2l6ZTsKPiA+ID4gKwkJZWxzZSBpZiAoaSA9PSBlbmctPmJhZF9tYXJr LnNlYykKPiA+ID4gKwkJCXBvaSA9IHNyY19idWY7Cj4gPiA+ICsJCWVsc2UKPiA+ID4gKwkJCXBv aSA9IHNyY19idWYgKyBpICogZW5nLT5mZG1fc2l6ZTsKPiA+ID4gKwo+ID4gPiArCQltZW1jcHko ZHN0X2J1ZiArIGkgKiBlbmctPmZkbV9zaXplLCBwb2ksIGVuZy0gIAo+ID4gPiA+ZmRtX3NpemUp OyAgCj4gPiA+ICsJfQo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtpbnQgbXRrX2VjY19wcmVwYXJl X2lvX3JlcV9waXBlbGluZWQoc3RydWN0IG5hbmRfZGV2aWNlICpuYW5kLAo+ID4gPiArCQkJCQkg IHN0cnVjdCBuYW5kX3BhZ2VfaW9fcmVxICpyZXEpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IG10 a19lY2NfZW5naW5lICplbmcgPSBuYW5kLT5lY2MuY3R4LnByaXY7Cj4gPiA+ICsJc3RydWN0IG10 ZF9pbmZvICptdGQgPSBuYW5kZGV2X3RvX210ZChuYW5kKTsKPiA+ID4gKwl1OCAqYnVmID0gZW5n LT5wYWdlX2J1ZjsKPiA+ID4gKwo+ID4gPiArCW5hbmRfZWNjX3R3ZWFrX3JlcSgmZW5nLT5yZXFf Y3R4LCByZXEpOwo+ID4gPiArCj4gPiA+ICsJaWYgKHJlcS0+bW9kZSA9PSBNVERfT1BTX1JBVykg ewo+ID4gPiArCQlpZiAocmVxLT50eXBlID09IE5BTkRfUEFHRV9XUklURSkgewo+ID4gPiArCQkJ LyogY2hhbmdlIGRhdGEvb29iIGJ1ZiB0byBNVEsgSFcgRUNDIGRhdGEKPiA+ID4gZm9ybWF0ICov Cj4gPiA+ICsJCQltdGtfZWNjX2RhdGFfZm9ybWF0KG5hbmQsIHJlcS0+ZGF0YWJ1Zi5pbiwKPiA+ ID4gKwkJCQkJcmVxLT5vb2JidWYuaW4sIHRydWUpOwo+ID4gPiArCQkJcmVxLT5kYXRhYnVmLm91 dCA9IGJ1ZjsKPiA+ID4gKwkJCXJlcS0+b29iYnVmLm91dCA9IGJ1ZiArIG5hbmQtPm1lbW9yZy5w YWdlc2l6ZTsKPiA+ID4gKwkJfQo+ID4gPiArCX0gZWxzZSB7Cj4gPiA+ICsJCWVuZy0+ZWNjX2Nm Zy5vcCA9IEVDQ19ERUNPREU7Cj4gPiA+ICsJCWlmIChyZXEtPnR5cGUgPT0gTkFORF9QQUdFX1dS SVRFKSB7Cj4gPiA+ICsJCQltZW1zZXQoZW5nLT5vb2JfYnVmLCAweGZmLCBuYW5kLSAgCj4gPiA+ ID5tZW1vcmcub29ic2l6ZSk7ICAKPiA+ID4gKwkJCW10ZF9vb2JsYXlvdXRfc2V0X2RhdGFieXRl cyhtdGQsIHJlcS0gIAo+ID4gPiA+b29iYnVmLm91dCwgIAo+ID4gPiArCQkJCQkJCWVuZy0+b29i X2J1ZiwKPiA+ID4gKwkJCQkJCQlyZXEtPm9vYm9mZnMsCj4gPiA+ICsJCQkJCQkJbXRkLT5vb2Jh dmFpbCk7Cj4gPiA+ICsJCQllbmctPmJhZF9tYXJrLmJtX3N3YXAobmFuZCwKPiA+ID4gKwkJCQkJ CXJlcS0+ZGF0YWJ1Zi5pbiwgZW5nLSAgCj4gPiA+ID5vb2JfYnVmKTsgIAo+ID4gPiArCQkJbXRr X2VjY19mZG1fc2hpZnQobmFuZCwgcmVxLT5vb2JidWYuaW4sCj4gPiA+ICsJCQkJCQllbmctPm9v Yl9idWYpOwo+ID4gPiArCj4gPiA+ICsJCQllbmctPmVjY19jZmcub3AgPSBFQ0NfRU5DT0RFOwo+ ID4gPiArCQl9Cj4gPiA+ICsKPiA+ID4gKwkJZW5nLT5lY2NfY2ZnLm1vZGUgPSBFQ0NfTkZJX01P REU7Cj4gPiA+ICsJCWVuZy0+ZWNjX2NmZy5zZWN0b3JzID0gZW5nLT5uc3RlcHM7Cj4gPiA+ICsJ CXJldHVybiBtdGtfZWNjX2VuYWJsZShlbmctPmVjYywgJmVuZy0+ZWNjX2NmZyk7Cj4gPiA+ICsJ fQo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK2ludCBt dGtfZWNjX2ZpbmlzaF9pb19yZXFfcGlwZWxpbmVkKHN0cnVjdCBuYW5kX2RldmljZSAqbmFuZCwK PiA+ID4gKwkJCQkJICBzdHJ1Y3QgbmFuZF9wYWdlX2lvX3JlcSAqcmVxKQo+ID4gPiArewo+ID4g PiArCXN0cnVjdCBtdGtfZWNjX2VuZ2luZSAqZW5nID0gbmFuZC0+ZWNjLmN0eC5wcml2Owo+ID4g PiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZGRldl90b19tdGQobmFuZCk7Cj4gPiA+ICsJ c3RydWN0IG10a19lY2Nfc3RhdHMgc3RhdHM7Cj4gPiA+ICsJdTggKmJ1ZiA9IGVuZy0+cGFnZV9i dWY7Cj4gPiA+ICsJaW50IHJldDsKPiA+ID4gKwo+ID4gPiArCWlmIChyZXEtPnR5cGUgPT0gTkFO RF9QQUdFX1dSSVRFKSB7Cj4gPiA+ICsJCWlmIChyZXEtPm1vZGUgIT0gTVREX09QU19SQVcpIHsK PiA+ID4gKwkJCW10a19lY2NfZGlzYWJsZShlbmctPmVjYyk7Cj4gPiA+ICsJCQltdGtfZWNjX2Zk bV9zaGlmdChuYW5kLCBlbmctPm9vYl9idWYsCj4gPiA+ICsJCQkJCXJlcS0+b29iYnVmLmluKTsK PiA+ID4gKwkJCWVuZy0+YmFkX21hcmsuYm1fc3dhcChuYW5kLAo+ID4gPiArCQkJCQlyZXEtPmRh dGFidWYuaW4sIGVuZy0+b29iX2J1Zik7Cj4gPiA+ICsJCX0KPiA+ID4gKwkJbmFuZF9lY2NfcmVz dG9yZV9yZXEoJmVuZy0+cmVxX2N0eCwgcmVxKTsKPiA+ID4gKwo+ID4gPiArCQlyZXR1cm4gMDsK PiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlpZiAocmVxLT5tb2RlID09IE1URF9PUFNfUkFXKSB7 Cj4gPiA+ICsJCW1lbWNweShidWYsIHJlcS0+ZGF0YWJ1Zi5pbiwKPiA+ID4gKwkJCSAgIG5hbmQt Pm1lbW9yZy5wYWdlc2l6ZSk7Cj4gPiA+ICsJCW1lbWNweShidWYgKyBuYW5kLT5tZW1vcmcucGFn ZXNpemUsCj4gPiA+ICsJCQkgICByZXEtPm9vYmJ1Zi5pbiwgbmFuZC0+bWVtb3JnLm9vYnNpemUp Owo+ID4gPiArCj4gPiA+ICsJCS8qIGNoYW5nZSBNVEsgSFcgRUNDIGRhdGEgZm9ybWF0IHRvIGRh dGEvb29iIGJ1ZiAqLwo+ID4gPiArCQltdGtfZWNjX2RhdGFfZm9ybWF0KG5hbmQsIHJlcS0+ZGF0 YWJ1Zi5pbiwKPiA+ID4gKwkJCQlyZXEtPm9vYmJ1Zi5pbiwgZmFsc2UpOwo+ID4gPiArCQluYW5k X2VjY19yZXN0b3JlX3JlcSgmZW5nLT5yZXFfY3R4LCByZXEpOwo+ID4gPiArCj4gPiA+ICsJCXJl dHVybiAwOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCXJldCA9IG10a19lY2Nfd2FpdF9kb25l KGVuZy0+ZWNjLCBFQ0NfREVDT0RFKTsKPiA+ID4gKwlpZiAocmV0KQo+ID4gPiArCQlyZXR1cm4g LUVUSU1FRE9VVDsgIAo+ID4gCj4gPiAgWW91IHNob3VsZCBnbyB0byBhbiBlcnJvciBwYXRoIGFu ZCBkaXNhYmxlIHRoZSBlbmdpbmUuICAKPiA+ID4gICAKPiAKPiBJIFdpbGwgZml4IHRoaXMgYW5k IG90aGVyIGNvZGluZyBzdHlsZSBpc3N1ZSBhdCBuZXh0IGl0ZXJhdGlvbi4KPiAKPiBUaGFua3MK PiBYaWFuZ3NoZW5nIEhvdQoKClRoYW5rcywKTWlxdcOobAoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtbWVkaWF0ZWsgbWFpbGluZyBsaXN0Ckxp bnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tZWRpYXRlawo=