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 28295C433EF for ; Tue, 14 Jun 2022 07:47:57 +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:From:In-Reply-To:MIME-Version: References:Message-ID:Subject:Cc:To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=X+I0LQFZAOQSc/Nyl5esq3tQJ0TctPGkjVlHNrUDHCE=; b=JILo4oNMERaI75oNuBJD/GBBVq ey6ULkT/l/QM2H0ic2la+hVasCrwck9xsMpXllHoMzPMP2mughDpO7YgqHf1PZUqGTPW0R/P+HtIc jcwfewspy2sJfW/rhh3a2sZPjUgVFAlijyLE0VYCGmAEXkeC2Ji/69CPqKNL95R8QHEhxot6sEzcV pvgrxNzpj15GVjfdK9/cFO5jGNtZzLMHFirTq0ZkGdIKlGDdw8URNxznGHiNDCUmkkNv1kwcHyRq8 NWWpqMrbIsK9s1WgSjEJfAaMAIAjNEzN/7nSycyn1bqF/C4H35dYYTNyY6oVqYWK9E5iaxd3GCBf5 brdWRuYw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o11GY-0082B3-TR; Tue, 14 Jun 2022 07:47:10 +0000 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o11GV-00828K-CV for linux-mtd@lists.infradead.org; Tue, 14 Jun 2022 07:47:09 +0000 Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o11GN-0006RO-JR; Tue, 14 Jun 2022 09:46:59 +0200 Received: from sha by ptx.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1o11GL-0001au-QR; Tue, 14 Jun 2022 09:46:57 +0200 Date: Tue, 14 Jun 2022 09:46:57 +0200 To: =?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= Cc: Srinivas Kandagatla , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Tom Rini , Ahmad Fatoum , linux-arm-kernel@lists.infradead.org, u-boot@lists.denx.de, devicetree@vger.kernel.org, linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, =?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= Subject: Re: [PATCH V3 2/2] nvmem: add driver handling U-Boot environment variables Message-ID: <20220614074657.GQ2387@pengutronix.de> References: <20220611204651.19947-1-zajec5@gmail.com> <20220611204651.19947-2-zajec5@gmail.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20220611204651.19947-2-zajec5@gmail.com> X-Sent-From: Pengutronix Hildesheim X-URL: http://www.pengutronix.de/ X-IRC: #ptxdist @freenode X-Accept-Language: de,en X-Accept-Content-Type: text/plain X-Uptime: 09:30:47 up 75 days, 20:00, 71 users, load average: 0.18, 0.17, 0.14 User-Agent: Mutt/1.10.1 (2018-07-13) From: Sascha Hauer X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0 X-SA-Exim-Mail-From: sha@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-mtd@lists.infradead.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220614_004707_675394_15499BCD X-CRM114-Status: GOOD ( 48.03 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org T24gU2F0LCBKdW4gMTEsIDIwMjIgYXQgMTA6NDY6NTFQTSArMDIwMCwgUmFmYcWCIE1pxYJlY2tp IHdyb3RlOgo+IEZyb206IFJhZmHFgiBNacWCZWNraSA8cmFmYWxAbWlsZWNraS5wbD4KPiAKPiBV LUJvb3Qgc3RvcmVzIGl0cyBzZXR1cCBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIEl0J3MgYSBs aXN0IG9mCj4ga2V5LXZhbHVlIHBhaXJzIHN0b3JlZCBvbiBmbGFzaCBkZXZpY2Ugd2l0aCBhIGN1 c3RvbSBoZWFkZXIuCj4gCj4gVGhpcyBjb21taXQgYWRkcyBhbiBOVk1FTSBkcml2ZXIgdGhhdDoK PiAxLiBQcm92aWRlcyBOVk1FTSBhY2Nlc3MgdG8gZW52aXJvbm1lbnQgdmFycyBiaW5hcnkgZGF0 YQo+IDIuIEV4dHJhY3RzIHZhcmlhYmxlcyBhcyBOVk1FTSBjZWxscwo+IAo+IEN1cnJlbnQgTGlu dXgncyBOVk1FTSBzeXNmcyBBUEkgYWxsb3dzIHJlYWRpbmcgd2hvbGUgTlZNRU0gZGF0YSBibG9j ay4KPiBJdCBjYW4gYmUgdXNlZCBieSB1c2VyLXNwYWNlIHRvb2xzIGZvciByZWFkaW5nIFUtQm9v dCBlbnYgdmFycyBibG9jawo+IHdpdGhvdXQgdGhlIGhhc3NsZSBvZiBmaW5kaW5nIGl0cyBsb2Nh dGlvbi4gUGFyc2luZyB3aWxsIHN0aWxsIG5lZWQgdG8KPiBiZSByZS1kb25lIHRoZXJlLgo+IAo+ IEtlcm5lbC1wYXJzZWQgTlZNRU0gY2VsbHMgY2FuIGJlIHJlYWQgaG93ZXZlciBieSBMaW51eCBk cml2ZXJzLiBUaGlzIG1heQo+IGJlIHVlc2Z1bCBmb3IgRXRoZXJuZXQgZHJpdmVycyBmb3IgcmVh ZGluZyBkZXZpY2UgTUFDIGFkZHJlc3Mgd2hpY2ggaXMKPiBvZnRlbiBzdG9yZWQgYXMgVS1Cb290 IGVudiB2YXJpYWJsZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBSYWZhxYIgTWnFgmVja2kgPHJhZmFs QG1pbGVja2kucGw+Cj4gLS0tCj4gVjM6IFVzZSBvZl9nZXRfbXRkX2RldmljZV9ieV9ub2RlKCkg KHRoYW5rcyBBaG1hZCkgJiB1cGRhdGUgZGVzY3JpcHRpb24KPiBWMjogRHJvcCBBUkNIX0JDTTQ5 MDggZGVwZW5kZW5jeSBhcyB0aGVyZSBhcmUgcGxlbnR5IGFyY2hpdGVjdHVyZXMgdXNpbmcKPiAg ICAgVS1Cb290IGJvb3Rsb2FkZXIuIFRoYW5rcyBTcmluaXZhcy4KPiAKPiBBcyBub3RpY2VkIGJ5 IEFobWFkIGEgbWlzc2luZyBOVk1FTSBzdWJzeXN0ZW0gZmVhdHVyZSBpcyB1c2VyLXNwYWNlCj4g YWNjZXNzIHRvIHBhcnNlZCBOVk1FTSBjZWxscy4gVGhhdCBpcyBzb21ldGhpbmcgSSBzdGFydGVk IHdvcmtpbmcgb24KPiBzb21lIHRpbWUgYWdvIGFuZCBJJ20gcGxhbm5pbmcgdG8gZ2V0IGJhY2sg dG8gYXQgc29tZSBwb2ludCwgcGxlYXNlCj4gY2hlY2s6Cj4gW1BBVENIIDIvMl0gbnZtZW06IGV4 cG9zZSBOVk1FTSBjZWxscyBpbiBzeXNmcwo+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwv MjAyMTEyMjAwNjQ3MzAuMjg4MDYtMi16YWplYzVAZ21haWwuY29tLwo+IC0tLQo+ICBNQUlOVEFJ TkVSUyAgICAgICAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvbnZtZW0vS2NvbmZpZyAgICAg IHwgIDExICsrCj4gIGRyaXZlcnMvbnZtZW0vTWFrZWZpbGUgICAgIHwgICAyICsKPiAgZHJpdmVy cy9udm1lbS91LWJvb3QtZW52LmMgfCAyMzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+ICA0IGZpbGVzIGNoYW5nZWQsIDI0NSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL252bWVtL3UtYm9vdC1lbnYuYwo+IAo+IGRpZmYgLS1naXQgYS9N QUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCj4gaW5kZXggNDc1ZTI4MzY1Mzg1Li40M2I0MjdmYTc2 YjAgMTAwNjQ0Cj4gLS0tIGEvTUFJTlRBSU5FUlMKPiArKysgYi9NQUlOVEFJTkVSUwo+IEBAIC0y MDQxMSw2ICsyMDQxMSw3IEBAIFUtQk9PVCBFTlZJUk9OTUVOVCBWQVJJQUJMRVMKPiAgTToJUmFm YcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgo+ICBTOglNYWludGFpbmVkCj4gIEY6CURv Y3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9udm1lbS91LWJvb3QsZW52LnlhbWwKPiAr RjoJZHJpdmVycy9udm1lbS91LWJvb3QtZW52LmMKPiAgCj4gIFVBQ0NFIEFDQ0VMRVJBVE9SIEZS QU1FV09SSwo+ICBNOglaaGFuZ2ZlaSBHYW8gPHpoYW5nZmVpLmdhb0BsaW5hcm8ub3JnPgo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL252bWVtL0tjb25maWcgYi9kcml2ZXJzL252bWVtL0tjb25maWcK PiBpbmRleCBkNzJkODc5YTZkMzQuLjVmMWIzMmI5NTNiOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L252bWVtL0tjb25maWcKPiArKysgYi9kcml2ZXJzL252bWVtL0tjb25maWcKPiBAQCAtMzQ0LDQg KzM0NCwxNSBAQCBjb25maWcgTlZNRU1fQVBQTEVfRUZVU0VTCj4gIAkgIFRoaXMgZHJpdmVyIGNh biBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsCj4gIAkg IGJlIGNhbGxlZCBudm1lbS1hcHBsZS1lZnVzZXMuCj4gIAo+ICtjb25maWcgTlZNRU1fVV9CT09U X0VOVgo+ICsJdHJpc3RhdGUgIlUtQm9vdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc3VwcG9ydCIK PiArCWRlcGVuZHMgb24gT0YgJiYgTVRECj4gKwlzZWxlY3QgQ1JDMzIKPiArCWhlbHAKPiArCSAg VS1Cb290IHN0b3JlcyBpdHMgc2V0dXAgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBUaGlzIGRy aXZlciBhZGRzCj4gKwkgIHN1cHBvcnQgZm9yIHZlcmlmeWluZyAmIGV4cG9ydGluZyBzdWNoIGRh dGEuIEl0IGFsc28gZXhwb3NlcyB2YXJpYWJsZXMKPiArCSAgYXMgTlZNRU0gY2VsbHMgc28gdGhl eSBjYW4gYmUgcmVmZXJlbmNlZCBieSBvdGhlciBkcml2ZXJzLgo+ICsKPiArCSAgSWYgY29tcGls ZWQgYXMgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIG52bWVtX3UtYm9vdC1lbnYuCj4gKwo+ICBl bmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL252bWVtL01ha2VmaWxlIGIvZHJpdmVycy9udm1l bS9NYWtlZmlsZQo+IGluZGV4IGM3MTBiNjRmOWZlNC4uMzk5Zjk5NzJkNDViIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvbnZtZW0vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL252bWVtL01ha2VmaWxl Cj4gQEAgLTY5LDMgKzY5LDUgQEAgb2JqLSQoQ09ORklHX05WTUVNX0FQUExFX0VGVVNFUykJKz0g bnZtZW0tYXBwbGUtZWZ1c2VzLm8KPiAgbnZtZW0tYXBwbGUtZWZ1c2VzLXkgCQk6PSBhcHBsZS1l ZnVzZXMubwo+ICBvYmotJChDT05GSUdfTUlDUk9DSElQX09UUEMpCSs9IG52bWVtLW1pY3JvY2hp cC1vdHBjLm8KPiAgbnZtZW0tbWljcm9jaGlwLW90cGMteQkJOj0gbWljcm9jaGlwLW90cGMubwo+ ICtvYmotJChDT05GSUdfTlZNRU1fVV9CT09UX0VOVikJKz0gbnZtZW1fdS1ib290LWVudi5vCj4g K252bWVtX3UtYm9vdC1lbnYteQkJOj0gdS1ib290LWVudi5vCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvbnZtZW0vdS1ib290LWVudi5jIGIvZHJpdmVycy9udm1lbS91LWJvb3QtZW52LmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uOTJjMmRkMTFkOTlmCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvbnZtZW0vdS1ib290LWVudi5jCj4gQEAgLTAsMCAr MSwyMzEgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ICsv Kgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjIgUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tp LnBsPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgo+ICsjaW5jbHVkZSA8 bGludXgvbW9kX2RldmljZXRhYmxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L252bWVtLWNvbnN1 bWVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9udm1lbS1wcm92aWRlci5oPgo+ICsjaW5jbHVkZSA8 bGludXgvb2ZfZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4K PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArCj4gK2VudW0gdV9ib290X2Vudl9mb3JtYXQg ewo+ICsJVV9CT09UX0ZPUk1BVF9TSU5HTEUsCj4gKwlVX0JPT1RfRk9STUFUX1JFRFVOREFOVCwK PiArfTsKPiArCj4gK3N0cnVjdCB1X2Jvb3RfZW52IHsKPiArCXN0cnVjdCBkZXZpY2UgKmRldjsK PiArCWVudW0gdV9ib290X2Vudl9mb3JtYXQgZm9ybWF0Owo+ICsKPiArCS8qIFBhcmVudCBkZXZp Y2UgKi8KPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkOwo+ICsJc2l6ZV90IG9mZnNldDsKPiArCXNp emVfdCBzaXplOwo+ICsKPiArCS8qIENlbGxzICovCj4gKwlzdHJ1Y3QgbnZtZW1fY2VsbF9pbmZv ICpjZWxsczsKPiArCWludCBuY2VsbHM7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdV9ib290X2Vudl9p bWFnZV9zaW5nbGUgewo+ICsJX19sZTMyIGNyYzMyOwo+ICsJdWludDhfdCBkYXRhWzBdOwo+ICt9 IF9fcGFja2VkOwo+ICsKPiArc3RydWN0IHVfYm9vdF9lbnZfaW1hZ2VfcmVkdW5kYW50IHsKPiAr CV9fbGUzMiBjcmMzMjsKPiArCXU4IG1hcms7Cj4gKwl1aW50OF90IGRhdGFbMF07Cj4gK30gX19w YWNrZWQ7Cj4gKwo+ICtzdGF0aWMgaW50IHVfYm9vdF9lbnZfcmVhZCh2b2lkICpjb250ZXh0LCB1 bnNpZ25lZCBpbnQgb2Zmc2V0LCB2b2lkICp2YWwsCj4gKwkJCSAgIHNpemVfdCBieXRlcykKPiAr ewo+ICsJc3RydWN0IHVfYm9vdF9lbnYgKnByaXYgPSBjb250ZXh0Owo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gcHJpdi0+ZGV2Owo+ICsJc2l6ZV90IGJ5dGVzX3JlYWQ7Cj4gKwlpbnQgZXJyOwo+ ICsKPiArCWVyciA9IG10ZF9yZWFkKHByaXYtPm10ZCwgcHJpdi0+b2Zmc2V0ICsgb2Zmc2V0LCBi eXRlcywgJmJ5dGVzX3JlYWQsIHZhbCk7Cj4gKwlpZiAoZXJyICYmICFtdGRfaXNfYml0ZmxpcChl cnIpKSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBmcm9tIG10ZDogJWRcbiIs IGVycik7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwlpZiAoYnl0ZXNfcmVhZCAhPSBi eXRlcykgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgJXpkIGJ5dGVzXG4iLCBi eXRlcyk7Cj4gKwkJcmV0dXJuIC1FSU87Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgdV9ib290X2Vudl9hZGRfY2VsbHMoc3RydWN0IHVfYm9vdF9lbnYgKnBy aXYsIHVpbnQ4X3QgKmJ1ZiwKPiArCQkJCXNpemVfdCBkYXRhX29mZnNldCwgc2l6ZV90IGRhdGFf bGVuKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7Cj4gKwljaGFyICpk YXRhID0gYnVmICsgZGF0YV9vZmZzZXQ7Cj4gKwljaGFyICp2YXIsICp2YWx1ZSwgKmVxOwo+ICsJ aW50IGlkeDsKPiArCj4gKwlwcml2LT5uY2VsbHMgPSAwOwo+ICsJZm9yICh2YXIgPSBkYXRhOyB2 YXIgPCBkYXRhICsgZGF0YV9sZW4gJiYgKnZhcjsgdmFyICs9IHN0cmxlbih2YXIpICsgMSkKPiAr CQlwcml2LT5uY2VsbHMrKzsKPiArCj4gKwlwcml2LT5jZWxscyA9IGRldm1fa2NhbGxvYyhkZXYs IHByaXYtPm5jZWxscywgc2l6ZW9mKCpwcml2LT5jZWxscyksIEdGUF9LRVJORUwpOwo+ICsJaWYg KCFwcml2LT5jZWxscykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlmb3IgKHZhciA9IGRh dGEsIGlkeCA9IDA7Cj4gKwkgICAgIHZhciA8IGRhdGEgKyBkYXRhX2xlbiAmJiAqdmFyOwo+ICsJ ICAgICB2YXIgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgKyAxLCBpZHgrKykgewo+ICsJCWVxID0g c3RyY2hyKHZhciwgJz0nKTsKPiArCQlpZiAoIWVxKQo+ICsJCQlicmVhazsKPiArCQkqZXEgPSAn XDAnOwo+ICsJCXZhbHVlID0gZXEgKyAxOwo+ICsKPiArCQlwcml2LT5jZWxsc1tpZHhdLm5hbWUg PSBkZXZtX2tzdHJkdXAoZGV2LCB2YXIsIEdGUF9LRVJORUwpOwo+ICsJCWlmICghcHJpdi0+Y2Vs bHNbaWR4XS5uYW1lKQo+ICsJCQlyZXR1cm4gLUVOT01FTTsKPiArCQlwcml2LT5jZWxsc1tpZHhd Lm9mZnNldCA9IGRhdGFfb2Zmc2V0ICsgdmFsdWUgLSBkYXRhOwo+ICsJCXByaXYtPmNlbGxzW2lk eF0uYnl0ZXMgPSBzdHJsZW4odmFsdWUpOwo+ICsJfQo+ICsKPiArCWlmIChXQVJOX09OKGlkeCAh PSBwcml2LT5uY2VsbHMpKQo+ICsJCXByaXYtPm5jZWxscyA9IGlkeDsKPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCB1X2Jvb3RfZW52X3BhcnNlKHN0cnVjdCB1X2Jvb3Rf ZW52ICpwcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7Cj4gKwlz aXplX3QgY3JjMzJfZGF0YV9vZmZzZXQ7Cj4gKwlzaXplX3QgY3JjMzJfZGF0YV9sZW47Cj4gKwlz aXplX3QgY3JjMzJfb2Zmc2V0Owo+ICsJc2l6ZV90IGRhdGFfb2Zmc2V0Owo+ICsJc2l6ZV90IGRh dGFfbGVuOwo+ICsJdWludDMyX3QgY3JjMzI7Cj4gKwl1aW50MzJfdCBjYWxjOwo+ICsJc2l6ZV90 IGJ5dGVzOwo+ICsJdWludDhfdCAqYnVmOwo+ICsJaW50IGVycjsKPiArCj4gKwlidWYgPSBrY2Fs bG9jKDEsIHByaXYtPnNpemUsIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFidWYpIHsKPiArCQllcnIg PSAtRU5PTUVNOwo+ICsJCWdvdG8gZXJyX291dDsKPiArCX0KPiArCj4gKwllcnIgPSBtdGRfcmVh ZChwcml2LT5tdGQsIHByaXYtPm9mZnNldCwgcHJpdi0+c2l6ZSwgJmJ5dGVzLCBidWYpOwo+ICsJ aWYgKChlcnIgJiYgIW10ZF9pc19iaXRmbGlwKGVycikpIHx8IGJ5dGVzICE9IHByaXYtPnNpemUp IHsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFkIGZyb20gbXRkOiAlZFxuIiwgZXJy KTsKPiArCQlnb3RvIGVycl9rZnJlZTsKPiArCX0KPiArCj4gKwlzd2l0Y2ggKHByaXYtPmZvcm1h dCkgewo+ICsJY2FzZSBVX0JPT1RfRk9STUFUX1NJTkdMRToKPiArCQljcmMzMl9vZmZzZXQgPSBv ZmZzZXRvZihzdHJ1Y3QgdV9ib290X2Vudl9pbWFnZV9zaW5nbGUsIGNyYzMyKTsKPiArCQljcmMz Ml9kYXRhX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1X2Jvb3RfZW52X2ltYWdlX3NpbmdsZSwg ZGF0YSk7Cj4gKwkJZGF0YV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdV9ib290X2Vudl9pbWFn ZV9zaW5nbGUsIGRhdGEpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBVX0JPT1RfRk9STUFUX1JFRFVO REFOVDoKPiArCQljcmMzMl9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdV9ib290X2Vudl9pbWFn ZV9yZWR1bmRhbnQsIGNyYzMyKTsKPiArCQljcmMzMl9kYXRhX29mZnNldCA9IG9mZnNldG9mKHN0 cnVjdCB1X2Jvb3RfZW52X2ltYWdlX3JlZHVuZGFudCwgbWFyayk7Cj4gKwkJZGF0YV9vZmZzZXQg PSBvZmZzZXRvZihzdHJ1Y3QgdV9ib290X2Vudl9pbWFnZV9yZWR1bmRhbnQsIGRhdGEpOwo+ICsJ CWJyZWFrOwo+ICsJfQo+ICsJY3JjMzIgPSBsZTMyX3RvX2NwdSgqKHVpbnQzMl90ICopKGJ1ZiAr IGNyYzMyX29mZnNldCkpOwo+ICsJY3JjMzJfZGF0YV9sZW4gPSBwcml2LT5zaXplIC0gY3JjMzJf ZGF0YV9vZmZzZXQ7Cj4gKwlkYXRhX2xlbiA9IHByaXYtPnNpemUgLSBkYXRhX29mZnNldDsKPiAr Cj4gKwljYWxjID0gY3JjMzIofjAsIGJ1ZiArIGNyYzMyX2RhdGFfb2Zmc2V0LCBjcmMzMl9kYXRh X2xlbikgXiB+MEw7Cj4gKwlpZiAoY2FsYyAhPSBjcmMzMikgewo+ICsJCWRldl9lcnIoZGV2LCAi SW52YWxpZCBjYWxjdWxhdGVkIENSQzMyOiAweCUwOHggKGV4cGVjdGVkOiAweCUwOHgpXG4iLCBj YWxjLCBjcmMzMik7Cj4gKwkJZXJyID0gLUVJTlZBTDsKPiArCQlnb3RvIGVycl9rZnJlZTsKPiAr CX0KPiArCj4gKwlidWZbcHJpdi0+c2l6ZSAtIDFdID0gJ1wwJzsKPiArCWVyciA9IHVfYm9vdF9l bnZfYWRkX2NlbGxzKHByaXYsIGJ1ZiwgZGF0YV9vZmZzZXQsIGRhdGFfbGVuKTsKPiArCWlmIChl cnIpCj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGNlbGxzOiAlZFxuIiwgZXJyKTsK PiArCj4gK2Vycl9rZnJlZToKPiArCWtmcmVlKGJ1Zik7Cj4gK2Vycl9vdXQ6Cj4gKwlyZXR1cm4g ZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB1X2Jvb3Rf ZW52X29mX21hdGNoX3RhYmxlW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gInUtYm9vdCxlbnYi LCAuZGF0YSA9ICh2b2lkICopVV9CT09UX0ZPUk1BVF9TSU5HTEUsIH0sCj4gKwl7IC5jb21wYXRp YmxlID0gInUtYm9vdCxlbnYtcmVkdW5kYW50LWJvb2wiLCAuZGF0YSA9ICh2b2lkICopVV9CT09U X0ZPUk1BVF9SRURVTkRBTlQsIH0sCj4gKwl7IC5jb21wYXRpYmxlID0gInUtYm9vdCxlbnYtcmVk dW5kYW50LWNvdW50IiwgLmRhdGEgPSAodm9pZCAqKVVfQk9PVF9GT1JNQVRfUkVEVU5EQU5ULCB9 LAo+ICsJe30sCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHVfYm9vdF9lbnZfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IG52bWVtX2NvbmZpZyBjb25m aWcgPSB7Cj4gKwkJLm5hbWUgPSAidS1ib290LWVudiIsCj4gKwkJLnJlZ19yZWFkID0gdV9ib290 X2Vudl9yZWFkLAo+ICsJfTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4g KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOwo+ICsJY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCAqb2ZfaWQ7Cj4gKwlzdHJ1Y3QgdV9ib290X2VudiAqcHJpdjsKPiArCWlu dCBlcnI7Cj4gKwo+ICsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdG UF9LRVJORUwpOwo+ICsJaWYgKCFwcml2KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJcHJpdi0+ ZGV2ID0gZGV2Owo+ICsKPiArCW9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKHVfYm9vdF9lbnZfb2Zf bWF0Y2hfdGFibGUsIGRldik7Cj4gKwlpZiAoIW9mX2lkKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ ICsJcHJpdi0+Zm9ybWF0ID0gKHVpbnRwdHJfdClvZl9pZC0+ZGF0YTsKPiArCj4gKwlpZiAob2Zf cHJvcGVydHlfcmVhZF91MzIobnAsICJyZWciLCAodTMyICopJnByaXYtPm9mZnNldCkgfHwKPiAr CSAgICBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgInJlZyIsIDEsICh1MzIgKikmcHJp di0+c2l6ZSkpIHsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFkIFwicmVnXCIgcHJv cGVydHlcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXByaXYtPm10ZCA9 IG9mX2dldF9tdGRfZGV2aWNlX2J5X25vZGUobnAtPnBhcmVudCk7Cj4gKwlpZiAoSVNfRVJSKHBy aXYtPm10ZCkpIHsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgJXBPRiBNVEQ6ICVs ZFxuIiwgbnAtPnBhcmVudCwgUFRSX0VSUihwcml2LT5tdGQpKTsKPiArCQlyZXR1cm4gUFRSX0VS Uihwcml2LT5tdGQpOwo+ICsJfQoKUGFydGl0aW9ucyBhcmUgbXRkIGRldmljZXMgdGhlbXNlbHZl cyBhbmQgdGhlIG10ZCBsYXllciBkaXJlY3RseQphc3NvY2lhdGVzIHRoZXNlIGRldmljZXMgdG8g dGhlaXIgT0Ygbm9kZSwgc28gaXQgc2hvdWxkIGJlIHBvc3NpYmxlCnRvIGRvIGEgb2ZfZ2V0X210 ZF9kZXZpY2VfYnlfbm9kZShucCkgd2hpY2ggZ2V0cyB5b3UgdGhlIHBhcnRpdGlvbi4KWW91IGNh biB1c2UgdGhlIHdob2xlIG10ZCBkZXZpY2UgdGhlbiBhbmQgZG8gbm90IGhhdmUgdG8gZmlkZGxl IHdpdGgKcmVnIHByb3BlcnRpZXMsIG9mZnNldHMgYW5kIHNpemVzIGluIHlvdXIgZHJpdmVyIHlv dXJzZWxmLgoKU2FzY2hhCgotLSAKUGVuZ3V0cm9uaXggZS5LLiAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKU3RldWVyd2FsZGVyIFN0ci4g MjEgICAgICAgICAgICAgICAgICAgICAgIHwgaHR0cDovL3d3dy5wZW5ndXRyb25peC5kZS8gIHwK MzExMzcgSGlsZGVzaGVpbSwgR2VybWFueSAgICAgICAgICAgICAgICAgIHwgUGhvbmU6ICs0OS01 MTIxLTIwNjkxNy0wICAgIHwKQW10c2dlcmljaHQgSGlsZGVzaGVpbSwgSFJBIDI2ODYgICAgICAg ICAgIHwgRmF4OiAgICs0OS01MTIxLTIwNjkxNy01NTU1IHwKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lvbiBt YWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1tdGQvCg== 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 C6C8EC43334 for ; Tue, 14 Jun 2022 07:48:30 +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:From:In-Reply-To:MIME-Version: References:Message-ID:Subject:Cc:To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=wJj8ccNj21thjTgkhbtcbLBOo7pd3x4N0r7iiVZroV8=; b=uZfujOzDWk1NYK70r9MlFWawET MYVlX3qexKOQvleBC0KHa0q+7QOB0V+gi91SaWeAvRljEzPzLK5SQjgdtJUX+W93OsQwldkZ4ZvwR fYpwa/V4vMD6REiRuW/hnv3S4Cl+74CWMCh6sZlKBgE6E8lS/jXLBNmmce4GI/iuixy7sgn+nqceP SGiFeNE/xInt8wRo8jgsP9TITLBambpWM8trjPrQfwgaaQFOlGOc9ArBIC9A86HE93wuKOSQ0MbqX EXo46sOv4rIbMpANU+WwcjtYVT+esJMiuL4wXi3H1+La40j996o/WZ6nTMc4t/aIkisD6u8YY94QQ eUdFKPcQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o11Ge-0082C8-FL; Tue, 14 Jun 2022 07:47:16 +0000 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o11GV-00828H-DG for linux-arm-kernel@lists.infradead.org; Tue, 14 Jun 2022 07:47:09 +0000 Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o11GN-0006RO-JR; Tue, 14 Jun 2022 09:46:59 +0200 Received: from sha by ptx.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1o11GL-0001au-QR; Tue, 14 Jun 2022 09:46:57 +0200 Date: Tue, 14 Jun 2022 09:46:57 +0200 To: =?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= Cc: Srinivas Kandagatla , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Tom Rini , Ahmad Fatoum , linux-arm-kernel@lists.infradead.org, u-boot@lists.denx.de, devicetree@vger.kernel.org, linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, =?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= Subject: Re: [PATCH V3 2/2] nvmem: add driver handling U-Boot environment variables Message-ID: <20220614074657.GQ2387@pengutronix.de> References: <20220611204651.19947-1-zajec5@gmail.com> <20220611204651.19947-2-zajec5@gmail.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20220611204651.19947-2-zajec5@gmail.com> X-Sent-From: Pengutronix Hildesheim X-URL: http://www.pengutronix.de/ X-IRC: #ptxdist @freenode X-Accept-Language: de,en X-Accept-Content-Type: text/plain X-Uptime: 09:30:47 up 75 days, 20:00, 71 users, load average: 0.18, 0.17, 0.14 User-Agent: Mutt/1.10.1 (2018-07-13) From: Sascha Hauer X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0 X-SA-Exim-Mail-From: sha@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-arm-kernel@lists.infradead.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220614_004707_675769_E8BB4012 X-CRM114-Status: GOOD ( 48.59 ) X-BeenThere: linux-arm-kernel@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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gU2F0LCBKdW4gMTEsIDIwMjIgYXQgMTA6NDY6NTFQTSArMDIwMCwgUmFmYcWCIE1pxYJlY2tp IHdyb3RlOgo+IEZyb206IFJhZmHFgiBNacWCZWNraSA8cmFmYWxAbWlsZWNraS5wbD4KPiAKPiBV LUJvb3Qgc3RvcmVzIGl0cyBzZXR1cCBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIEl0J3MgYSBs aXN0IG9mCj4ga2V5LXZhbHVlIHBhaXJzIHN0b3JlZCBvbiBmbGFzaCBkZXZpY2Ugd2l0aCBhIGN1 c3RvbSBoZWFkZXIuCj4gCj4gVGhpcyBjb21taXQgYWRkcyBhbiBOVk1FTSBkcml2ZXIgdGhhdDoK PiAxLiBQcm92aWRlcyBOVk1FTSBhY2Nlc3MgdG8gZW52aXJvbm1lbnQgdmFycyBiaW5hcnkgZGF0 YQo+IDIuIEV4dHJhY3RzIHZhcmlhYmxlcyBhcyBOVk1FTSBjZWxscwo+IAo+IEN1cnJlbnQgTGlu dXgncyBOVk1FTSBzeXNmcyBBUEkgYWxsb3dzIHJlYWRpbmcgd2hvbGUgTlZNRU0gZGF0YSBibG9j ay4KPiBJdCBjYW4gYmUgdXNlZCBieSB1c2VyLXNwYWNlIHRvb2xzIGZvciByZWFkaW5nIFUtQm9v dCBlbnYgdmFycyBibG9jawo+IHdpdGhvdXQgdGhlIGhhc3NsZSBvZiBmaW5kaW5nIGl0cyBsb2Nh dGlvbi4gUGFyc2luZyB3aWxsIHN0aWxsIG5lZWQgdG8KPiBiZSByZS1kb25lIHRoZXJlLgo+IAo+ IEtlcm5lbC1wYXJzZWQgTlZNRU0gY2VsbHMgY2FuIGJlIHJlYWQgaG93ZXZlciBieSBMaW51eCBk cml2ZXJzLiBUaGlzIG1heQo+IGJlIHVlc2Z1bCBmb3IgRXRoZXJuZXQgZHJpdmVycyBmb3IgcmVh ZGluZyBkZXZpY2UgTUFDIGFkZHJlc3Mgd2hpY2ggaXMKPiBvZnRlbiBzdG9yZWQgYXMgVS1Cb290 IGVudiB2YXJpYWJsZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBSYWZhxYIgTWnFgmVja2kgPHJhZmFs QG1pbGVja2kucGw+Cj4gLS0tCj4gVjM6IFVzZSBvZl9nZXRfbXRkX2RldmljZV9ieV9ub2RlKCkg KHRoYW5rcyBBaG1hZCkgJiB1cGRhdGUgZGVzY3JpcHRpb24KPiBWMjogRHJvcCBBUkNIX0JDTTQ5 MDggZGVwZW5kZW5jeSBhcyB0aGVyZSBhcmUgcGxlbnR5IGFyY2hpdGVjdHVyZXMgdXNpbmcKPiAg ICAgVS1Cb290IGJvb3Rsb2FkZXIuIFRoYW5rcyBTcmluaXZhcy4KPiAKPiBBcyBub3RpY2VkIGJ5 IEFobWFkIGEgbWlzc2luZyBOVk1FTSBzdWJzeXN0ZW0gZmVhdHVyZSBpcyB1c2VyLXNwYWNlCj4g YWNjZXNzIHRvIHBhcnNlZCBOVk1FTSBjZWxscy4gVGhhdCBpcyBzb21ldGhpbmcgSSBzdGFydGVk IHdvcmtpbmcgb24KPiBzb21lIHRpbWUgYWdvIGFuZCBJJ20gcGxhbm5pbmcgdG8gZ2V0IGJhY2sg dG8gYXQgc29tZSBwb2ludCwgcGxlYXNlCj4gY2hlY2s6Cj4gW1BBVENIIDIvMl0gbnZtZW06IGV4 cG9zZSBOVk1FTSBjZWxscyBpbiBzeXNmcwo+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwv MjAyMTEyMjAwNjQ3MzAuMjg4MDYtMi16YWplYzVAZ21haWwuY29tLwo+IC0tLQo+ICBNQUlOVEFJ TkVSUyAgICAgICAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvbnZtZW0vS2NvbmZpZyAgICAg IHwgIDExICsrCj4gIGRyaXZlcnMvbnZtZW0vTWFrZWZpbGUgICAgIHwgICAyICsKPiAgZHJpdmVy cy9udm1lbS91LWJvb3QtZW52LmMgfCAyMzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+ICA0IGZpbGVzIGNoYW5nZWQsIDI0NSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL252bWVtL3UtYm9vdC1lbnYuYwo+IAo+IGRpZmYgLS1naXQgYS9N QUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCj4gaW5kZXggNDc1ZTI4MzY1Mzg1Li40M2I0MjdmYTc2 YjAgMTAwNjQ0Cj4gLS0tIGEvTUFJTlRBSU5FUlMKPiArKysgYi9NQUlOVEFJTkVSUwo+IEBAIC0y MDQxMSw2ICsyMDQxMSw3IEBAIFUtQk9PVCBFTlZJUk9OTUVOVCBWQVJJQUJMRVMKPiAgTToJUmFm YcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgo+ICBTOglNYWludGFpbmVkCj4gIEY6CURv Y3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9udm1lbS91LWJvb3QsZW52LnlhbWwKPiAr RjoJZHJpdmVycy9udm1lbS91LWJvb3QtZW52LmMKPiAgCj4gIFVBQ0NFIEFDQ0VMRVJBVE9SIEZS QU1FV09SSwo+ICBNOglaaGFuZ2ZlaSBHYW8gPHpoYW5nZmVpLmdhb0BsaW5hcm8ub3JnPgo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL252bWVtL0tjb25maWcgYi9kcml2ZXJzL252bWVtL0tjb25maWcK PiBpbmRleCBkNzJkODc5YTZkMzQuLjVmMWIzMmI5NTNiOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L252bWVtL0tjb25maWcKPiArKysgYi9kcml2ZXJzL252bWVtL0tjb25maWcKPiBAQCAtMzQ0LDQg KzM0NCwxNSBAQCBjb25maWcgTlZNRU1fQVBQTEVfRUZVU0VTCj4gIAkgIFRoaXMgZHJpdmVyIGNh biBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsCj4gIAkg IGJlIGNhbGxlZCBudm1lbS1hcHBsZS1lZnVzZXMuCj4gIAo+ICtjb25maWcgTlZNRU1fVV9CT09U X0VOVgo+ICsJdHJpc3RhdGUgIlUtQm9vdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc3VwcG9ydCIK PiArCWRlcGVuZHMgb24gT0YgJiYgTVRECj4gKwlzZWxlY3QgQ1JDMzIKPiArCWhlbHAKPiArCSAg VS1Cb290IHN0b3JlcyBpdHMgc2V0dXAgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBUaGlzIGRy aXZlciBhZGRzCj4gKwkgIHN1cHBvcnQgZm9yIHZlcmlmeWluZyAmIGV4cG9ydGluZyBzdWNoIGRh dGEuIEl0IGFsc28gZXhwb3NlcyB2YXJpYWJsZXMKPiArCSAgYXMgTlZNRU0gY2VsbHMgc28gdGhl eSBjYW4gYmUgcmVmZXJlbmNlZCBieSBvdGhlciBkcml2ZXJzLgo+ICsKPiArCSAgSWYgY29tcGls ZWQgYXMgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIG52bWVtX3UtYm9vdC1lbnYuCj4gKwo+ICBl bmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL252bWVtL01ha2VmaWxlIGIvZHJpdmVycy9udm1l bS9NYWtlZmlsZQo+IGluZGV4IGM3MTBiNjRmOWZlNC4uMzk5Zjk5NzJkNDViIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvbnZtZW0vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL252bWVtL01ha2VmaWxl Cj4gQEAgLTY5LDMgKzY5LDUgQEAgb2JqLSQoQ09ORklHX05WTUVNX0FQUExFX0VGVVNFUykJKz0g bnZtZW0tYXBwbGUtZWZ1c2VzLm8KPiAgbnZtZW0tYXBwbGUtZWZ1c2VzLXkgCQk6PSBhcHBsZS1l ZnVzZXMubwo+ICBvYmotJChDT05GSUdfTUlDUk9DSElQX09UUEMpCSs9IG52bWVtLW1pY3JvY2hp cC1vdHBjLm8KPiAgbnZtZW0tbWljcm9jaGlwLW90cGMteQkJOj0gbWljcm9jaGlwLW90cGMubwo+ ICtvYmotJChDT05GSUdfTlZNRU1fVV9CT09UX0VOVikJKz0gbnZtZW1fdS1ib290LWVudi5vCj4g K252bWVtX3UtYm9vdC1lbnYteQkJOj0gdS1ib290LWVudi5vCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvbnZtZW0vdS1ib290LWVudi5jIGIvZHJpdmVycy9udm1lbS91LWJvb3QtZW52LmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uOTJjMmRkMTFkOTlmCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvbnZtZW0vdS1ib290LWVudi5jCj4gQEAgLTAsMCAr MSwyMzEgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ICsv Kgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjIgUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tp LnBsPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgo+ICsjaW5jbHVkZSA8 bGludXgvbW9kX2RldmljZXRhYmxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L252bWVtLWNvbnN1 bWVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9udm1lbS1wcm92aWRlci5oPgo+ICsjaW5jbHVkZSA8 bGludXgvb2ZfZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4K PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArCj4gK2VudW0gdV9ib290X2Vudl9mb3JtYXQg ewo+ICsJVV9CT09UX0ZPUk1BVF9TSU5HTEUsCj4gKwlVX0JPT1RfRk9STUFUX1JFRFVOREFOVCwK PiArfTsKPiArCj4gK3N0cnVjdCB1X2Jvb3RfZW52IHsKPiArCXN0cnVjdCBkZXZpY2UgKmRldjsK PiArCWVudW0gdV9ib290X2Vudl9mb3JtYXQgZm9ybWF0Owo+ICsKPiArCS8qIFBhcmVudCBkZXZp Y2UgKi8KPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkOwo+ICsJc2l6ZV90IG9mZnNldDsKPiArCXNp emVfdCBzaXplOwo+ICsKPiArCS8qIENlbGxzICovCj4gKwlzdHJ1Y3QgbnZtZW1fY2VsbF9pbmZv ICpjZWxsczsKPiArCWludCBuY2VsbHM7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdV9ib290X2Vudl9p bWFnZV9zaW5nbGUgewo+ICsJX19sZTMyIGNyYzMyOwo+ICsJdWludDhfdCBkYXRhWzBdOwo+ICt9 IF9fcGFja2VkOwo+ICsKPiArc3RydWN0IHVfYm9vdF9lbnZfaW1hZ2VfcmVkdW5kYW50IHsKPiAr CV9fbGUzMiBjcmMzMjsKPiArCXU4IG1hcms7Cj4gKwl1aW50OF90IGRhdGFbMF07Cj4gK30gX19w YWNrZWQ7Cj4gKwo+ICtzdGF0aWMgaW50IHVfYm9vdF9lbnZfcmVhZCh2b2lkICpjb250ZXh0LCB1 bnNpZ25lZCBpbnQgb2Zmc2V0LCB2b2lkICp2YWwsCj4gKwkJCSAgIHNpemVfdCBieXRlcykKPiAr ewo+ICsJc3RydWN0IHVfYm9vdF9lbnYgKnByaXYgPSBjb250ZXh0Owo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gcHJpdi0+ZGV2Owo+ICsJc2l6ZV90IGJ5dGVzX3JlYWQ7Cj4gKwlpbnQgZXJyOwo+ ICsKPiArCWVyciA9IG10ZF9yZWFkKHByaXYtPm10ZCwgcHJpdi0+b2Zmc2V0ICsgb2Zmc2V0LCBi eXRlcywgJmJ5dGVzX3JlYWQsIHZhbCk7Cj4gKwlpZiAoZXJyICYmICFtdGRfaXNfYml0ZmxpcChl cnIpKSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBmcm9tIG10ZDogJWRcbiIs IGVycik7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwlpZiAoYnl0ZXNfcmVhZCAhPSBi eXRlcykgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgJXpkIGJ5dGVzXG4iLCBi eXRlcyk7Cj4gKwkJcmV0dXJuIC1FSU87Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgdV9ib290X2Vudl9hZGRfY2VsbHMoc3RydWN0IHVfYm9vdF9lbnYgKnBy aXYsIHVpbnQ4X3QgKmJ1ZiwKPiArCQkJCXNpemVfdCBkYXRhX29mZnNldCwgc2l6ZV90IGRhdGFf bGVuKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7Cj4gKwljaGFyICpk YXRhID0gYnVmICsgZGF0YV9vZmZzZXQ7Cj4gKwljaGFyICp2YXIsICp2YWx1ZSwgKmVxOwo+ICsJ aW50IGlkeDsKPiArCj4gKwlwcml2LT5uY2VsbHMgPSAwOwo+ICsJZm9yICh2YXIgPSBkYXRhOyB2 YXIgPCBkYXRhICsgZGF0YV9sZW4gJiYgKnZhcjsgdmFyICs9IHN0cmxlbih2YXIpICsgMSkKPiAr CQlwcml2LT5uY2VsbHMrKzsKPiArCj4gKwlwcml2LT5jZWxscyA9IGRldm1fa2NhbGxvYyhkZXYs IHByaXYtPm5jZWxscywgc2l6ZW9mKCpwcml2LT5jZWxscyksIEdGUF9LRVJORUwpOwo+ICsJaWYg KCFwcml2LT5jZWxscykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlmb3IgKHZhciA9IGRh dGEsIGlkeCA9IDA7Cj4gKwkgICAgIHZhciA8IGRhdGEgKyBkYXRhX2xlbiAmJiAqdmFyOwo+ICsJ ICAgICB2YXIgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgKyAxLCBpZHgrKykgewo+ICsJCWVxID0g c3RyY2hyKHZhciwgJz0nKTsKPiArCQlpZiAoIWVxKQo+ICsJCQlicmVhazsKPiArCQkqZXEgPSAn XDAnOwo+ICsJCXZhbHVlID0gZXEgKyAxOwo+ICsKPiArCQlwcml2LT5jZWxsc1tpZHhdLm5hbWUg PSBkZXZtX2tzdHJkdXAoZGV2LCB2YXIsIEdGUF9LRVJORUwpOwo+ICsJCWlmICghcHJpdi0+Y2Vs bHNbaWR4XS5uYW1lKQo+ICsJCQlyZXR1cm4gLUVOT01FTTsKPiArCQlwcml2LT5jZWxsc1tpZHhd Lm9mZnNldCA9IGRhdGFfb2Zmc2V0ICsgdmFsdWUgLSBkYXRhOwo+ICsJCXByaXYtPmNlbGxzW2lk eF0uYnl0ZXMgPSBzdHJsZW4odmFsdWUpOwo+ICsJfQo+ICsKPiArCWlmIChXQVJOX09OKGlkeCAh PSBwcml2LT5uY2VsbHMpKQo+ICsJCXByaXYtPm5jZWxscyA9IGlkeDsKPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCB1X2Jvb3RfZW52X3BhcnNlKHN0cnVjdCB1X2Jvb3Rf ZW52ICpwcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7Cj4gKwlz aXplX3QgY3JjMzJfZGF0YV9vZmZzZXQ7Cj4gKwlzaXplX3QgY3JjMzJfZGF0YV9sZW47Cj4gKwlz aXplX3QgY3JjMzJfb2Zmc2V0Owo+ICsJc2l6ZV90IGRhdGFfb2Zmc2V0Owo+ICsJc2l6ZV90IGRh dGFfbGVuOwo+ICsJdWludDMyX3QgY3JjMzI7Cj4gKwl1aW50MzJfdCBjYWxjOwo+ICsJc2l6ZV90 IGJ5dGVzOwo+ICsJdWludDhfdCAqYnVmOwo+ICsJaW50IGVycjsKPiArCj4gKwlidWYgPSBrY2Fs bG9jKDEsIHByaXYtPnNpemUsIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFidWYpIHsKPiArCQllcnIg PSAtRU5PTUVNOwo+ICsJCWdvdG8gZXJyX291dDsKPiArCX0KPiArCj4gKwllcnIgPSBtdGRfcmVh ZChwcml2LT5tdGQsIHByaXYtPm9mZnNldCwgcHJpdi0+c2l6ZSwgJmJ5dGVzLCBidWYpOwo+ICsJ aWYgKChlcnIgJiYgIW10ZF9pc19iaXRmbGlwKGVycikpIHx8IGJ5dGVzICE9IHByaXYtPnNpemUp IHsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFkIGZyb20gbXRkOiAlZFxuIiwgZXJy KTsKPiArCQlnb3RvIGVycl9rZnJlZTsKPiArCX0KPiArCj4gKwlzd2l0Y2ggKHByaXYtPmZvcm1h dCkgewo+ICsJY2FzZSBVX0JPT1RfRk9STUFUX1NJTkdMRToKPiArCQljcmMzMl9vZmZzZXQgPSBv ZmZzZXRvZihzdHJ1Y3QgdV9ib290X2Vudl9pbWFnZV9zaW5nbGUsIGNyYzMyKTsKPiArCQljcmMz Ml9kYXRhX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1X2Jvb3RfZW52X2ltYWdlX3NpbmdsZSwg ZGF0YSk7Cj4gKwkJZGF0YV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdV9ib290X2Vudl9pbWFn ZV9zaW5nbGUsIGRhdGEpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBVX0JPT1RfRk9STUFUX1JFRFVO REFOVDoKPiArCQljcmMzMl9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdV9ib290X2Vudl9pbWFn ZV9yZWR1bmRhbnQsIGNyYzMyKTsKPiArCQljcmMzMl9kYXRhX29mZnNldCA9IG9mZnNldG9mKHN0 cnVjdCB1X2Jvb3RfZW52X2ltYWdlX3JlZHVuZGFudCwgbWFyayk7Cj4gKwkJZGF0YV9vZmZzZXQg PSBvZmZzZXRvZihzdHJ1Y3QgdV9ib290X2Vudl9pbWFnZV9yZWR1bmRhbnQsIGRhdGEpOwo+ICsJ CWJyZWFrOwo+ICsJfQo+ICsJY3JjMzIgPSBsZTMyX3RvX2NwdSgqKHVpbnQzMl90ICopKGJ1ZiAr IGNyYzMyX29mZnNldCkpOwo+ICsJY3JjMzJfZGF0YV9sZW4gPSBwcml2LT5zaXplIC0gY3JjMzJf ZGF0YV9vZmZzZXQ7Cj4gKwlkYXRhX2xlbiA9IHByaXYtPnNpemUgLSBkYXRhX29mZnNldDsKPiAr Cj4gKwljYWxjID0gY3JjMzIofjAsIGJ1ZiArIGNyYzMyX2RhdGFfb2Zmc2V0LCBjcmMzMl9kYXRh X2xlbikgXiB+MEw7Cj4gKwlpZiAoY2FsYyAhPSBjcmMzMikgewo+ICsJCWRldl9lcnIoZGV2LCAi SW52YWxpZCBjYWxjdWxhdGVkIENSQzMyOiAweCUwOHggKGV4cGVjdGVkOiAweCUwOHgpXG4iLCBj YWxjLCBjcmMzMik7Cj4gKwkJZXJyID0gLUVJTlZBTDsKPiArCQlnb3RvIGVycl9rZnJlZTsKPiAr CX0KPiArCj4gKwlidWZbcHJpdi0+c2l6ZSAtIDFdID0gJ1wwJzsKPiArCWVyciA9IHVfYm9vdF9l bnZfYWRkX2NlbGxzKHByaXYsIGJ1ZiwgZGF0YV9vZmZzZXQsIGRhdGFfbGVuKTsKPiArCWlmIChl cnIpCj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGNlbGxzOiAlZFxuIiwgZXJyKTsK PiArCj4gK2Vycl9rZnJlZToKPiArCWtmcmVlKGJ1Zik7Cj4gK2Vycl9vdXQ6Cj4gKwlyZXR1cm4g ZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB1X2Jvb3Rf ZW52X29mX21hdGNoX3RhYmxlW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gInUtYm9vdCxlbnYi LCAuZGF0YSA9ICh2b2lkICopVV9CT09UX0ZPUk1BVF9TSU5HTEUsIH0sCj4gKwl7IC5jb21wYXRp YmxlID0gInUtYm9vdCxlbnYtcmVkdW5kYW50LWJvb2wiLCAuZGF0YSA9ICh2b2lkICopVV9CT09U X0ZPUk1BVF9SRURVTkRBTlQsIH0sCj4gKwl7IC5jb21wYXRpYmxlID0gInUtYm9vdCxlbnYtcmVk dW5kYW50LWNvdW50IiwgLmRhdGEgPSAodm9pZCAqKVVfQk9PVF9GT1JNQVRfUkVEVU5EQU5ULCB9 LAo+ICsJe30sCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHVfYm9vdF9lbnZfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IG52bWVtX2NvbmZpZyBjb25m aWcgPSB7Cj4gKwkJLm5hbWUgPSAidS1ib290LWVudiIsCj4gKwkJLnJlZ19yZWFkID0gdV9ib290 X2Vudl9yZWFkLAo+ICsJfTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4g KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOwo+ICsJY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCAqb2ZfaWQ7Cj4gKwlzdHJ1Y3QgdV9ib290X2VudiAqcHJpdjsKPiArCWlu dCBlcnI7Cj4gKwo+ICsJcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdG UF9LRVJORUwpOwo+ICsJaWYgKCFwcml2KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJcHJpdi0+ ZGV2ID0gZGV2Owo+ICsKPiArCW9mX2lkID0gb2ZfbWF0Y2hfZGV2aWNlKHVfYm9vdF9lbnZfb2Zf bWF0Y2hfdGFibGUsIGRldik7Cj4gKwlpZiAoIW9mX2lkKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ ICsJcHJpdi0+Zm9ybWF0ID0gKHVpbnRwdHJfdClvZl9pZC0+ZGF0YTsKPiArCj4gKwlpZiAob2Zf cHJvcGVydHlfcmVhZF91MzIobnAsICJyZWciLCAodTMyICopJnByaXYtPm9mZnNldCkgfHwKPiAr CSAgICBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgInJlZyIsIDEsICh1MzIgKikmcHJp di0+c2l6ZSkpIHsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFkIFwicmVnXCIgcHJv cGVydHlcbiIpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXByaXYtPm10ZCA9 IG9mX2dldF9tdGRfZGV2aWNlX2J5X25vZGUobnAtPnBhcmVudCk7Cj4gKwlpZiAoSVNfRVJSKHBy aXYtPm10ZCkpIHsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgJXBPRiBNVEQ6ICVs ZFxuIiwgbnAtPnBhcmVudCwgUFRSX0VSUihwcml2LT5tdGQpKTsKPiArCQlyZXR1cm4gUFRSX0VS Uihwcml2LT5tdGQpOwo+ICsJfQoKUGFydGl0aW9ucyBhcmUgbXRkIGRldmljZXMgdGhlbXNlbHZl cyBhbmQgdGhlIG10ZCBsYXllciBkaXJlY3RseQphc3NvY2lhdGVzIHRoZXNlIGRldmljZXMgdG8g dGhlaXIgT0Ygbm9kZSwgc28gaXQgc2hvdWxkIGJlIHBvc3NpYmxlCnRvIGRvIGEgb2ZfZ2V0X210 ZF9kZXZpY2VfYnlfbm9kZShucCkgd2hpY2ggZ2V0cyB5b3UgdGhlIHBhcnRpdGlvbi4KWW91IGNh biB1c2UgdGhlIHdob2xlIG10ZCBkZXZpY2UgdGhlbiBhbmQgZG8gbm90IGhhdmUgdG8gZmlkZGxl IHdpdGgKcmVnIHByb3BlcnRpZXMsIG9mZnNldHMgYW5kIHNpemVzIGluIHlvdXIgZHJpdmVyIHlv dXJzZWxmLgoKU2FzY2hhCgotLSAKUGVuZ3V0cm9uaXggZS5LLiAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKU3RldWVyd2FsZGVyIFN0ci4g MjEgICAgICAgICAgICAgICAgICAgICAgIHwgaHR0cDovL3d3dy5wZW5ndXRyb25peC5kZS8gIHwK MzExMzcgSGlsZGVzaGVpbSwgR2VybWFueSAgICAgICAgICAgICAgICAgIHwgUGhvbmU6ICs0OS01 MTIxLTIwNjkxNy0wICAgIHwKQW10c2dlcmljaHQgSGlsZGVzaGVpbSwgSFJBIDI2ODYgICAgICAg ICAgIHwgRmF4OiAgICs0OS01MTIxLTIwNjkxNy01NTU1IHwKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0 CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 37158C433EF for ; Tue, 14 Jun 2022 07:47:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230510AbiFNHrR (ORCPT ); Tue, 14 Jun 2022 03:47:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35462 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239917AbiFNHrN (ORCPT ); Tue, 14 Jun 2022 03:47:13 -0400 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6C0FD3D4B7 for ; Tue, 14 Jun 2022 00:47:11 -0700 (PDT) Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o11GN-0006RO-JR; Tue, 14 Jun 2022 09:46:59 +0200 Received: from sha by ptx.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1o11GL-0001au-QR; Tue, 14 Jun 2022 09:46:57 +0200 Date: Tue, 14 Jun 2022 09:46:57 +0200 To: =?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= Cc: Srinivas Kandagatla , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Tom Rini , Ahmad Fatoum , linux-arm-kernel@lists.infradead.org, u-boot@lists.denx.de, devicetree@vger.kernel.org, linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org, =?utf-8?B?UmFmYcWCIE1pxYJlY2tp?= Subject: Re: [PATCH V3 2/2] nvmem: add driver handling U-Boot environment variables Message-ID: <20220614074657.GQ2387@pengutronix.de> References: <20220611204651.19947-1-zajec5@gmail.com> <20220611204651.19947-2-zajec5@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20220611204651.19947-2-zajec5@gmail.com> X-Sent-From: Pengutronix Hildesheim X-URL: http://www.pengutronix.de/ X-IRC: #ptxdist @freenode X-Accept-Language: de,en X-Accept-Content-Type: text/plain X-Uptime: 09:30:47 up 75 days, 20:00, 71 users, load average: 0.18, 0.17, 0.14 User-Agent: Mutt/1.10.1 (2018-07-13) From: Sascha Hauer X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0 X-SA-Exim-Mail-From: sha@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: devicetree@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org On Sat, Jun 11, 2022 at 10:46:51PM +0200, Rafał Miłecki wrote: > From: Rafał Miłecki > > U-Boot stores its setup as environment variables. It's a list of > key-value pairs stored on flash device with a custom header. > > This commit adds an NVMEM driver that: > 1. Provides NVMEM access to environment vars binary data > 2. Extracts variables as NVMEM cells > > Current Linux's NVMEM sysfs API allows reading whole NVMEM data block. > It can be used by user-space tools for reading U-Boot env vars block > without the hassle of finding its location. Parsing will still need to > be re-done there. > > Kernel-parsed NVMEM cells can be read however by Linux drivers. This may > be uesful for Ethernet drivers for reading device MAC address which is > often stored as U-Boot env variable. > > Signed-off-by: Rafał Miłecki > --- > V3: Use of_get_mtd_device_by_node() (thanks Ahmad) & update description > V2: Drop ARCH_BCM4908 dependency as there are plenty architectures using > U-Boot bootloader. Thanks Srinivas. > > As noticed by Ahmad a missing NVMEM subsystem feature is user-space > access to parsed NVMEM cells. That is something I started working on > some time ago and I'm planning to get back to at some point, please > check: > [PATCH 2/2] nvmem: expose NVMEM cells in sysfs > https://lore.kernel.org/lkml/20211220064730.28806-2-zajec5@gmail.com/ > --- > MAINTAINERS | 1 + > drivers/nvmem/Kconfig | 11 ++ > drivers/nvmem/Makefile | 2 + > drivers/nvmem/u-boot-env.c | 231 +++++++++++++++++++++++++++++++++++++ > 4 files changed, 245 insertions(+) > create mode 100644 drivers/nvmem/u-boot-env.c > > diff --git a/MAINTAINERS b/MAINTAINERS > index 475e28365385..43b427fa76b0 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -20411,6 +20411,7 @@ U-BOOT ENVIRONMENT VARIABLES > M: Rafał Miłecki > S: Maintained > F: Documentation/devicetree/bindings/nvmem/u-boot,env.yaml > +F: drivers/nvmem/u-boot-env.c > > UACCE ACCELERATOR FRAMEWORK > M: Zhangfei Gao > diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig > index d72d879a6d34..5f1b32b953b9 100644 > --- a/drivers/nvmem/Kconfig > +++ b/drivers/nvmem/Kconfig > @@ -344,4 +344,15 @@ config NVMEM_APPLE_EFUSES > This driver can also be built as a module. If so, the module will > be called nvmem-apple-efuses. > > +config NVMEM_U_BOOT_ENV > + tristate "U-Boot environment variables support" > + depends on OF && MTD > + select CRC32 > + help > + U-Boot stores its setup as environment variables. This driver adds > + support for verifying & exporting such data. It also exposes variables > + as NVMEM cells so they can be referenced by other drivers. > + > + If compiled as module it will be called nvmem_u-boot-env. > + > endif > diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile > index c710b64f9fe4..399f9972d45b 100644 > --- a/drivers/nvmem/Makefile > +++ b/drivers/nvmem/Makefile > @@ -69,3 +69,5 @@ obj-$(CONFIG_NVMEM_APPLE_EFUSES) += nvmem-apple-efuses.o > nvmem-apple-efuses-y := apple-efuses.o > obj-$(CONFIG_MICROCHIP_OTPC) += nvmem-microchip-otpc.o > nvmem-microchip-otpc-y := microchip-otpc.o > +obj-$(CONFIG_NVMEM_U_BOOT_ENV) += nvmem_u-boot-env.o > +nvmem_u-boot-env-y := u-boot-env.o > diff --git a/drivers/nvmem/u-boot-env.c b/drivers/nvmem/u-boot-env.c > new file mode 100644 > index 000000000000..92c2dd11d99f > --- /dev/null > +++ b/drivers/nvmem/u-boot-env.c > @@ -0,0 +1,231 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* > + * Copyright (C) 2022 Rafał Miłecki > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +enum u_boot_env_format { > + U_BOOT_FORMAT_SINGLE, > + U_BOOT_FORMAT_REDUNDANT, > +}; > + > +struct u_boot_env { > + struct device *dev; > + enum u_boot_env_format format; > + > + /* Parent device */ > + struct mtd_info *mtd; > + size_t offset; > + size_t size; > + > + /* Cells */ > + struct nvmem_cell_info *cells; > + int ncells; > +}; > + > +struct u_boot_env_image_single { > + __le32 crc32; > + uint8_t data[0]; > +} __packed; > + > +struct u_boot_env_image_redundant { > + __le32 crc32; > + u8 mark; > + uint8_t data[0]; > +} __packed; > + > +static int u_boot_env_read(void *context, unsigned int offset, void *val, > + size_t bytes) > +{ > + struct u_boot_env *priv = context; > + struct device *dev = priv->dev; > + size_t bytes_read; > + int err; > + > + err = mtd_read(priv->mtd, priv->offset + offset, bytes, &bytes_read, val); > + if (err && !mtd_is_bitflip(err)) { > + dev_err(dev, "Failed to read from mtd: %d\n", err); > + return err; > + } > + > + if (bytes_read != bytes) { > + dev_err(dev, "Failed to read %zd bytes\n", bytes); > + return -EIO; > + } > + > + return 0; > +} > + > +static int u_boot_env_add_cells(struct u_boot_env *priv, uint8_t *buf, > + size_t data_offset, size_t data_len) > +{ > + struct device *dev = priv->dev; > + char *data = buf + data_offset; > + char *var, *value, *eq; > + int idx; > + > + priv->ncells = 0; > + for (var = data; var < data + data_len && *var; var += strlen(var) + 1) > + priv->ncells++; > + > + priv->cells = devm_kcalloc(dev, priv->ncells, sizeof(*priv->cells), GFP_KERNEL); > + if (!priv->cells) > + return -ENOMEM; > + > + for (var = data, idx = 0; > + var < data + data_len && *var; > + var = value + strlen(value) + 1, idx++) { > + eq = strchr(var, '='); > + if (!eq) > + break; > + *eq = '\0'; > + value = eq + 1; > + > + priv->cells[idx].name = devm_kstrdup(dev, var, GFP_KERNEL); > + if (!priv->cells[idx].name) > + return -ENOMEM; > + priv->cells[idx].offset = data_offset + value - data; > + priv->cells[idx].bytes = strlen(value); > + } > + > + if (WARN_ON(idx != priv->ncells)) > + priv->ncells = idx; > + > + return 0; > +} > + > +static int u_boot_env_parse(struct u_boot_env *priv) > +{ > + struct device *dev = priv->dev; > + size_t crc32_data_offset; > + size_t crc32_data_len; > + size_t crc32_offset; > + size_t data_offset; > + size_t data_len; > + uint32_t crc32; > + uint32_t calc; > + size_t bytes; > + uint8_t *buf; > + int err; > + > + buf = kcalloc(1, priv->size, GFP_KERNEL); > + if (!buf) { > + err = -ENOMEM; > + goto err_out; > + } > + > + err = mtd_read(priv->mtd, priv->offset, priv->size, &bytes, buf); > + if ((err && !mtd_is_bitflip(err)) || bytes != priv->size) { > + dev_err(dev, "Failed to read from mtd: %d\n", err); > + goto err_kfree; > + } > + > + switch (priv->format) { > + case U_BOOT_FORMAT_SINGLE: > + crc32_offset = offsetof(struct u_boot_env_image_single, crc32); > + crc32_data_offset = offsetof(struct u_boot_env_image_single, data); > + data_offset = offsetof(struct u_boot_env_image_single, data); > + break; > + case U_BOOT_FORMAT_REDUNDANT: > + crc32_offset = offsetof(struct u_boot_env_image_redundant, crc32); > + crc32_data_offset = offsetof(struct u_boot_env_image_redundant, mark); > + data_offset = offsetof(struct u_boot_env_image_redundant, data); > + break; > + } > + crc32 = le32_to_cpu(*(uint32_t *)(buf + crc32_offset)); > + crc32_data_len = priv->size - crc32_data_offset; > + data_len = priv->size - data_offset; > + > + calc = crc32(~0, buf + crc32_data_offset, crc32_data_len) ^ ~0L; > + if (calc != crc32) { > + dev_err(dev, "Invalid calculated CRC32: 0x%08x (expected: 0x%08x)\n", calc, crc32); > + err = -EINVAL; > + goto err_kfree; > + } > + > + buf[priv->size - 1] = '\0'; > + err = u_boot_env_add_cells(priv, buf, data_offset, data_len); > + if (err) > + dev_err(dev, "Failed to add cells: %d\n", err); > + > +err_kfree: > + kfree(buf); > +err_out: > + return err; > +} > + > +static const struct of_device_id u_boot_env_of_match_table[] = { > + { .compatible = "u-boot,env", .data = (void *)U_BOOT_FORMAT_SINGLE, }, > + { .compatible = "u-boot,env-redundant-bool", .data = (void *)U_BOOT_FORMAT_REDUNDANT, }, > + { .compatible = "u-boot,env-redundant-count", .data = (void *)U_BOOT_FORMAT_REDUNDANT, }, > + {}, > +}; > + > +static int u_boot_env_probe(struct platform_device *pdev) > +{ > + struct nvmem_config config = { > + .name = "u-boot-env", > + .reg_read = u_boot_env_read, > + }; > + struct device *dev = &pdev->dev; > + struct device_node *np = dev->of_node; > + const struct of_device_id *of_id; > + struct u_boot_env *priv; > + int err; > + > + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); > + if (!priv) > + return -ENOMEM; > + priv->dev = dev; > + > + of_id = of_match_device(u_boot_env_of_match_table, dev); > + if (!of_id) > + return -EINVAL; > + priv->format = (uintptr_t)of_id->data; > + > + if (of_property_read_u32(np, "reg", (u32 *)&priv->offset) || > + of_property_read_u32_index(np, "reg", 1, (u32 *)&priv->size)) { > + dev_err(dev, "Failed to read \"reg\" property\n"); > + return -EINVAL; > + } > + > + priv->mtd = of_get_mtd_device_by_node(np->parent); > + if (IS_ERR(priv->mtd)) { > + dev_err(dev, "Failed to get %pOF MTD: %ld\n", np->parent, PTR_ERR(priv->mtd)); > + return PTR_ERR(priv->mtd); > + } Partitions are mtd devices themselves and the mtd layer directly associates these devices to their OF node, so it should be possible to do a of_get_mtd_device_by_node(np) which gets you the partition. You can use the whole mtd device then and do not have to fiddle with reg properties, offsets and sizes in your driver yourself. Sascha -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |