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 6AB87CCA47A for ; Sat, 11 Jun 2022 20:47:44 +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:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=WER9yxj56Om3QzSJ0aFJJJzBi5au9+R5aZ/bm7MMs4U=; b=JSs1DZqou1sVUL R7QuLzi5yzDwgYcRekgoMRTqcfl89p3hJMRcDoyLaFDG6UKXknFEYcCtBmeai/+rPCUFQoTruD9O3 fnYOjFrlVxskjNLmMH/LfyP9CJL9O0yckNNRajLN+z9yurw/7RLpH4aax3k4wXGvqxUWA9e9HMcyr Depz2DvWkubLadXVdvginy1OwA4PJeIp31pCsUSFDIK1owwKd619QyCzV9/URjaR9U/H5WEvijOD/ 3g6M714LJhb5ICAWVUBZgxoUg5IPBJSr4W683CeOPQZlF+PmwBhXMWzBj7iXKv2ZsCP4zwQM0epBk YcQHlkhuuWFEOK/q8F1Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o081A-00EUAe-4F; Sat, 11 Jun 2022 20:47:36 +0000 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o080n-00EU5G-By; Sat, 11 Jun 2022 20:47:15 +0000 Received: by mail-ej1-x62d.google.com with SMTP id fu3so4140581ejc.7; Sat, 11 Jun 2022 13:47:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=pPGokfyfSUs/WTSM4zIFDX4BDdVMjvsS1wW+kXKgMVY=; b=fTdCyj5sKkyo5gZl9XuSnBt6drXY+MIoleIJ/Qkr9ddIiQ05qtqFTyOnrapd0QZ1ac apv0FIMWMS/LZyfB47w7iih7ypugBr6cUL8HUB/ipmdLg2WS9A7uFQ1BOWG+wXKhIy+F jF9FTGNVwKqdUYYzU4YOliGeOstfXgEIvjtP5o4w4H7YVQJ55mun6qNNNBheHJ41Rulb k5PlER238rl+8V7wmcBDEG8kI9xyoYOWgynn35QlrxoCxc/5Y6yV5b1Xwj7QZ8cagMHv uJDuKJVTztQTcBcfgM+mJ1reBkosq6gAu8ZaNdYjHv4vLxuvQSm7P5UUiTFiuEHLwK7p F8Mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=pPGokfyfSUs/WTSM4zIFDX4BDdVMjvsS1wW+kXKgMVY=; b=34KuQHx2LotbmlcqWIvlg53ybJ6UL+3i0m87xxTnmlo3olLa85UW2SBLo8poObYpgH bkJD3Sg4CZNvDL6XjiHCCksBn1uml6eW3vW/NsojBo2M0Z8wIieuWJefvDLDyDU1/xIk My2OFM+3EXkNzO7IH4KJUEt6PfNxeV8u6eYKRQ57YzV7wUc6pis3ph9gWthfZCMmaSKT UomuFFGTyOzFIt3i2zwsLpteqU6da8OLXnBmRX0tTP/jx66aM9f0Ge88QeMYHs3Cm5Iz ECEDTMx9Rd/LIPbBL1Z52PFZ1pBCswhZBBkHjNo72yr6Bna8625G5um7QJgPvwnaDmOG mkxw== X-Gm-Message-State: AOAM532kdThkH3nB3io7VLv2EtOy8glCWwFlvHLeDa5Sxt/EeARyLaDy ccFo3IqqF6XaBM+YDSX29Ak= X-Google-Smtp-Source: ABdhPJx7p/cGZivP+olSItsthDuwBJ/mAJsBXdvGeqVO/BYZhJAdnS+vc4xqnr3HiuxA2uqhAJmm7Q== X-Received: by 2002:a17:906:64d6:b0:712:1022:492b with SMTP id p22-20020a17090664d600b007121022492bmr11715611ejn.264.1654980431147; Sat, 11 Jun 2022 13:47:11 -0700 (PDT) Received: from localhost.lan (ip-194-187-74-233.konfederacka.maverick.com.pl. [194.187.74.233]) by smtp.gmail.com with ESMTPSA id 22-20020a170906301600b006f52dbc192bsm1490672ejz.37.2022.06.11.13.47.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jun 2022 13:47:10 -0700 (PDT) From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= To: Srinivas Kandagatla , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra Cc: 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?q?Rafa=C5=82=20Mi=C5=82ecki?= Subject: [PATCH V3 2/2] nvmem: add driver handling U-Boot environment variables Date: Sat, 11 Jun 2022 22:46:51 +0200 Message-Id: <20220611204651.19947-2-zajec5@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220611204651.19947-1-zajec5@gmail.com> References: <20220611204651.19947-1-zajec5@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220611_134713_462924_C2F5DD00 X-CRM114-Status: GOOD ( 28.74 ) 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 RnJvbTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgoKVS1Cb290IHN0b3JlcyBp dHMgc2V0dXAgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBJdCdzIGEgbGlzdCBvZgprZXktdmFs dWUgcGFpcnMgc3RvcmVkIG9uIGZsYXNoIGRldmljZSB3aXRoIGEgY3VzdG9tIGhlYWRlci4KClRo aXMgY29tbWl0IGFkZHMgYW4gTlZNRU0gZHJpdmVyIHRoYXQ6CjEuIFByb3ZpZGVzIE5WTUVNIGFj Y2VzcyB0byBlbnZpcm9ubWVudCB2YXJzIGJpbmFyeSBkYXRhCjIuIEV4dHJhY3RzIHZhcmlhYmxl cyBhcyBOVk1FTSBjZWxscwoKQ3VycmVudCBMaW51eCdzIE5WTUVNIHN5c2ZzIEFQSSBhbGxvd3Mg cmVhZGluZyB3aG9sZSBOVk1FTSBkYXRhIGJsb2NrLgpJdCBjYW4gYmUgdXNlZCBieSB1c2VyLXNw YWNlIHRvb2xzIGZvciByZWFkaW5nIFUtQm9vdCBlbnYgdmFycyBibG9jawp3aXRob3V0IHRoZSBo YXNzbGUgb2YgZmluZGluZyBpdHMgbG9jYXRpb24uIFBhcnNpbmcgd2lsbCBzdGlsbCBuZWVkIHRv CmJlIHJlLWRvbmUgdGhlcmUuCgpLZXJuZWwtcGFyc2VkIE5WTUVNIGNlbGxzIGNhbiBiZSByZWFk IGhvd2V2ZXIgYnkgTGludXggZHJpdmVycy4gVGhpcyBtYXkKYmUgdWVzZnVsIGZvciBFdGhlcm5l dCBkcml2ZXJzIGZvciByZWFkaW5nIGRldmljZSBNQUMgYWRkcmVzcyB3aGljaCBpcwpvZnRlbiBz dG9yZWQgYXMgVS1Cb290IGVudiB2YXJpYWJsZS4KClNpZ25lZC1vZmYtYnk6IFJhZmHFgiBNacWC ZWNraSA8cmFmYWxAbWlsZWNraS5wbD4KLS0tClYzOiBVc2Ugb2ZfZ2V0X210ZF9kZXZpY2VfYnlf bm9kZSgpICh0aGFua3MgQWhtYWQpICYgdXBkYXRlIGRlc2NyaXB0aW9uClYyOiBEcm9wIEFSQ0hf QkNNNDkwOCBkZXBlbmRlbmN5IGFzIHRoZXJlIGFyZSBwbGVudHkgYXJjaGl0ZWN0dXJlcyB1c2lu ZwogICAgVS1Cb290IGJvb3Rsb2FkZXIuIFRoYW5rcyBTcmluaXZhcy4KCkFzIG5vdGljZWQgYnkg QWhtYWQgYSBtaXNzaW5nIE5WTUVNIHN1YnN5c3RlbSBmZWF0dXJlIGlzIHVzZXItc3BhY2UKYWNj ZXNzIHRvIHBhcnNlZCBOVk1FTSBjZWxscy4gVGhhdCBpcyBzb21ldGhpbmcgSSBzdGFydGVkIHdv cmtpbmcgb24Kc29tZSB0aW1lIGFnbyBhbmQgSSdtIHBsYW5uaW5nIHRvIGdldCBiYWNrIHRvIGF0 IHNvbWUgcG9pbnQsIHBsZWFzZQpjaGVjazoKW1BBVENIIDIvMl0gbnZtZW06IGV4cG9zZSBOVk1F TSBjZWxscyBpbiBzeXNmcwpodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21sLzIwMjExMjIwMDY0 NzMwLjI4ODA2LTItemFqZWM1QGdtYWlsLmNvbS8KLS0tCiBNQUlOVEFJTkVSUyAgICAgICAgICAg ICAgICB8ICAgMSArCiBkcml2ZXJzL252bWVtL0tjb25maWcgICAgICB8ICAxMSArKwogZHJpdmVy cy9udm1lbS9NYWtlZmlsZSAgICAgfCAgIDIgKwogZHJpdmVycy9udm1lbS91LWJvb3QtZW52LmMg fCAyMzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFu Z2VkLCAyNDUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbnZtZW0v dS1ib290LWVudi5jCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRl eCA0NzVlMjgzNjUzODUuLjQzYjQyN2ZhNzZiMCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysr IGIvTUFJTlRBSU5FUlMKQEAgLTIwNDExLDYgKzIwNDExLDcgQEAgVS1CT09UIEVOVklST05NRU5U IFZBUklBQkxFUwogTToJUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgogUzoJTWFp bnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL252bWVtL3UtYm9v dCxlbnYueWFtbAorRjoJZHJpdmVycy9udm1lbS91LWJvb3QtZW52LmMKIAogVUFDQ0UgQUNDRUxF UkFUT1IgRlJBTUVXT1JLCiBNOglaaGFuZ2ZlaSBHYW8gPHpoYW5nZmVpLmdhb0BsaW5hcm8ub3Jn PgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lbS9LY29uZmlnIGIvZHJpdmVycy9udm1lbS9LY29u ZmlnCmluZGV4IGQ3MmQ4NzlhNmQzNC4uNWYxYjMyYjk1M2I5IDEwMDY0NAotLS0gYS9kcml2ZXJz L252bWVtL0tjb25maWcKKysrIGIvZHJpdmVycy9udm1lbS9LY29uZmlnCkBAIC0zNDQsNCArMzQ0 LDE1IEBAIGNvbmZpZyBOVk1FTV9BUFBMRV9FRlVTRVMKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNv IGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsCiAJICBiZSBjYWxs ZWQgbnZtZW0tYXBwbGUtZWZ1c2VzLgogCitjb25maWcgTlZNRU1fVV9CT09UX0VOVgorCXRyaXN0 YXRlICJVLUJvb3QgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBP RiAmJiBNVEQKKwlzZWxlY3QgQ1JDMzIKKwloZWxwCisJICBVLUJvb3Qgc3RvcmVzIGl0cyBzZXR1 cCBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFRoaXMgZHJpdmVyIGFkZHMKKwkgIHN1cHBvcnQg Zm9yIHZlcmlmeWluZyAmIGV4cG9ydGluZyBzdWNoIGRhdGEuIEl0IGFsc28gZXhwb3NlcyB2YXJp YWJsZXMKKwkgIGFzIE5WTUVNIGNlbGxzIHNvIHRoZXkgY2FuIGJlIHJlZmVyZW5jZWQgYnkgb3Ro ZXIgZHJpdmVycy4KKworCSAgSWYgY29tcGlsZWQgYXMgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVk IG52bWVtX3UtYm9vdC1lbnYuCisKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWVtL01h a2VmaWxlIGIvZHJpdmVycy9udm1lbS9NYWtlZmlsZQppbmRleCBjNzEwYjY0ZjlmZTQuLjM5OWY5 OTcyZDQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lbS9NYWtlZmlsZQorKysgYi9kcml2ZXJz L252bWVtL01ha2VmaWxlCkBAIC02OSwzICs2OSw1IEBAIG9iai0kKENPTkZJR19OVk1FTV9BUFBM RV9FRlVTRVMpCSs9IG52bWVtLWFwcGxlLWVmdXNlcy5vCiBudm1lbS1hcHBsZS1lZnVzZXMteSAJ CTo9IGFwcGxlLWVmdXNlcy5vCiBvYmotJChDT05GSUdfTUlDUk9DSElQX09UUEMpCSs9IG52bWVt LW1pY3JvY2hpcC1vdHBjLm8KIG52bWVtLW1pY3JvY2hpcC1vdHBjLXkJCTo9IG1pY3JvY2hpcC1v dHBjLm8KK29iai0kKENPTkZJR19OVk1FTV9VX0JPT1RfRU5WKQkrPSBudm1lbV91LWJvb3QtZW52 Lm8KK252bWVtX3UtYm9vdC1lbnYteQkJOj0gdS1ib290LWVudi5vCmRpZmYgLS1naXQgYS9kcml2 ZXJzL252bWVtL3UtYm9vdC1lbnYuYyBiL2RyaXZlcnMvbnZtZW0vdS1ib290LWVudi5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTJjMmRkMTFkOTlmCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9udm1lbS91LWJvb3QtZW52LmMKQEAgLTAsMCArMSwyMzEgQEAK Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBDb3B5cmln aHQgKEMpIDIwMjIgUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgorICovCisKKyNp bmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5o PgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4K KyNpbmNsdWRlIDxsaW51eC9udm1lbS1jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L252bWVt LXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu dXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCitlbnVtIHVf Ym9vdF9lbnZfZm9ybWF0IHsKKwlVX0JPT1RfRk9STUFUX1NJTkdMRSwKKwlVX0JPT1RfRk9STUFU X1JFRFVOREFOVCwKK307CisKK3N0cnVjdCB1X2Jvb3RfZW52IHsKKwlzdHJ1Y3QgZGV2aWNlICpk ZXY7CisJZW51bSB1X2Jvb3RfZW52X2Zvcm1hdCBmb3JtYXQ7CisKKwkvKiBQYXJlbnQgZGV2aWNl ICovCisJc3RydWN0IG10ZF9pbmZvICptdGQ7CisJc2l6ZV90IG9mZnNldDsKKwlzaXplX3Qgc2l6 ZTsKKworCS8qIENlbGxzICovCisJc3RydWN0IG52bWVtX2NlbGxfaW5mbyAqY2VsbHM7CisJaW50 IG5jZWxsczsKK307CisKK3N0cnVjdCB1X2Jvb3RfZW52X2ltYWdlX3NpbmdsZSB7CisJX19sZTMy IGNyYzMyOworCXVpbnQ4X3QgZGF0YVswXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB1X2Jvb3Rf ZW52X2ltYWdlX3JlZHVuZGFudCB7CisJX19sZTMyIGNyYzMyOworCXU4IG1hcms7CisJdWludDhf dCBkYXRhWzBdOworfSBfX3BhY2tlZDsKKworc3RhdGljIGludCB1X2Jvb3RfZW52X3JlYWQodm9p ZCAqY29udGV4dCwgdW5zaWduZWQgaW50IG9mZnNldCwgdm9pZCAqdmFsLAorCQkJICAgc2l6ZV90 IGJ5dGVzKQoreworCXN0cnVjdCB1X2Jvb3RfZW52ICpwcml2ID0gY29udGV4dDsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CisJc2l6ZV90IGJ5dGVzX3JlYWQ7CisJaW50IGVycjsK KworCWVyciA9IG10ZF9yZWFkKHByaXYtPm10ZCwgcHJpdi0+b2Zmc2V0ICsgb2Zmc2V0LCBieXRl cywgJmJ5dGVzX3JlYWQsIHZhbCk7CisJaWYgKGVyciAmJiAhbXRkX2lzX2JpdGZsaXAoZXJyKSkg eworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFkIGZyb20gbXRkOiAlZFxuIiwgZXJyKTsK KwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoYnl0ZXNfcmVhZCAhPSBieXRlcykgeworCQlkZXZf ZXJyKGRldiwgIkZhaWxlZCB0byByZWFkICV6ZCBieXRlc1xuIiwgYnl0ZXMpOworCQlyZXR1cm4g LUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1X2Jvb3RfZW52X2FkZF9j ZWxscyhzdHJ1Y3QgdV9ib290X2VudiAqcHJpdiwgdWludDhfdCAqYnVmLAorCQkJCXNpemVfdCBk YXRhX29mZnNldCwgc2l6ZV90IGRhdGFfbGVuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBy aXYtPmRldjsKKwljaGFyICpkYXRhID0gYnVmICsgZGF0YV9vZmZzZXQ7CisJY2hhciAqdmFyLCAq dmFsdWUsICplcTsKKwlpbnQgaWR4OworCisJcHJpdi0+bmNlbGxzID0gMDsKKwlmb3IgKHZhciA9 IGRhdGE7IHZhciA8IGRhdGEgKyBkYXRhX2xlbiAmJiAqdmFyOyB2YXIgKz0gc3RybGVuKHZhcikg KyAxKQorCQlwcml2LT5uY2VsbHMrKzsKKworCXByaXYtPmNlbGxzID0gZGV2bV9rY2FsbG9jKGRl diwgcHJpdi0+bmNlbGxzLCBzaXplb2YoKnByaXYtPmNlbGxzKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFwcml2LT5jZWxscykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKHZhciA9IGRhdGEsIGlk eCA9IDA7CisJICAgICB2YXIgPCBkYXRhICsgZGF0YV9sZW4gJiYgKnZhcjsKKwkgICAgIHZhciA9 IHZhbHVlICsgc3RybGVuKHZhbHVlKSArIDEsIGlkeCsrKSB7CisJCWVxID0gc3RyY2hyKHZhciwg Jz0nKTsKKwkJaWYgKCFlcSkKKwkJCWJyZWFrOworCQkqZXEgPSAnXDAnOworCQl2YWx1ZSA9IGVx ICsgMTsKKworCQlwcml2LT5jZWxsc1tpZHhdLm5hbWUgPSBkZXZtX2tzdHJkdXAoZGV2LCB2YXIs IEdGUF9LRVJORUwpOworCQlpZiAoIXByaXYtPmNlbGxzW2lkeF0ubmFtZSkKKwkJCXJldHVybiAt RU5PTUVNOworCQlwcml2LT5jZWxsc1tpZHhdLm9mZnNldCA9IGRhdGFfb2Zmc2V0ICsgdmFsdWUg LSBkYXRhOworCQlwcml2LT5jZWxsc1tpZHhdLmJ5dGVzID0gc3RybGVuKHZhbHVlKTsKKwl9CisK KwlpZiAoV0FSTl9PTihpZHggIT0gcHJpdi0+bmNlbGxzKSkKKwkJcHJpdi0+bmNlbGxzID0gaWR4 OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdV9ib290X2Vudl9wYXJzZShzdHJ1Y3Qg dV9ib290X2VudiAqcHJpdikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CisJ c2l6ZV90IGNyYzMyX2RhdGFfb2Zmc2V0OworCXNpemVfdCBjcmMzMl9kYXRhX2xlbjsKKwlzaXpl X3QgY3JjMzJfb2Zmc2V0OworCXNpemVfdCBkYXRhX29mZnNldDsKKwlzaXplX3QgZGF0YV9sZW47 CisJdWludDMyX3QgY3JjMzI7CisJdWludDMyX3QgY2FsYzsKKwlzaXplX3QgYnl0ZXM7CisJdWlu dDhfdCAqYnVmOworCWludCBlcnI7CisKKwlidWYgPSBrY2FsbG9jKDEsIHByaXYtPnNpemUsIEdG UF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291 dDsKKwl9CisKKwllcnIgPSBtdGRfcmVhZChwcml2LT5tdGQsIHByaXYtPm9mZnNldCwgcHJpdi0+ c2l6ZSwgJmJ5dGVzLCBidWYpOworCWlmICgoZXJyICYmICFtdGRfaXNfYml0ZmxpcChlcnIpKSB8 fCBieXRlcyAhPSBwcml2LT5zaXplKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQg ZnJvbSBtdGQ6ICVkXG4iLCBlcnIpOworCQlnb3RvIGVycl9rZnJlZTsKKwl9CisKKwlzd2l0Y2gg KHByaXYtPmZvcm1hdCkgeworCWNhc2UgVV9CT09UX0ZPUk1BVF9TSU5HTEU6CisJCWNyYzMyX29m ZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1X2Jvb3RfZW52X2ltYWdlX3NpbmdsZSwgY3JjMzIpOwor CQljcmMzMl9kYXRhX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1X2Jvb3RfZW52X2ltYWdlX3Np bmdsZSwgZGF0YSk7CisJCWRhdGFfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVfYm9vdF9lbnZf aW1hZ2Vfc2luZ2xlLCBkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBVX0JPT1RfRk9STUFUX1JFRFVO REFOVDoKKwkJY3JjMzJfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVfYm9vdF9lbnZfaW1hZ2Vf cmVkdW5kYW50LCBjcmMzMik7CisJCWNyYzMyX2RhdGFfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0 IHVfYm9vdF9lbnZfaW1hZ2VfcmVkdW5kYW50LCBtYXJrKTsKKwkJZGF0YV9vZmZzZXQgPSBvZmZz ZXRvZihzdHJ1Y3QgdV9ib290X2Vudl9pbWFnZV9yZWR1bmRhbnQsIGRhdGEpOworCQlicmVhazsK Kwl9CisJY3JjMzIgPSBsZTMyX3RvX2NwdSgqKHVpbnQzMl90ICopKGJ1ZiArIGNyYzMyX29mZnNl dCkpOworCWNyYzMyX2RhdGFfbGVuID0gcHJpdi0+c2l6ZSAtIGNyYzMyX2RhdGFfb2Zmc2V0Owor CWRhdGFfbGVuID0gcHJpdi0+c2l6ZSAtIGRhdGFfb2Zmc2V0OworCisJY2FsYyA9IGNyYzMyKH4w LCBidWYgKyBjcmMzMl9kYXRhX29mZnNldCwgY3JjMzJfZGF0YV9sZW4pIF4gfjBMOworCWlmIChj YWxjICE9IGNyYzMyKSB7CisJCWRldl9lcnIoZGV2LCAiSW52YWxpZCBjYWxjdWxhdGVkIENSQzMy OiAweCUwOHggKGV4cGVjdGVkOiAweCUwOHgpXG4iLCBjYWxjLCBjcmMzMik7CisJCWVyciA9IC1F SU5WQUw7CisJCWdvdG8gZXJyX2tmcmVlOworCX0KKworCWJ1Zltwcml2LT5zaXplIC0gMV0gPSAn XDAnOworCWVyciA9IHVfYm9vdF9lbnZfYWRkX2NlbGxzKHByaXYsIGJ1ZiwgZGF0YV9vZmZzZXQs IGRhdGFfbGVuKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhZGQgY2Vs bHM6ICVkXG4iLCBlcnIpOworCitlcnJfa2ZyZWU6CisJa2ZyZWUoYnVmKTsKK2Vycl9vdXQ6CisJ cmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdV9ib290 X2Vudl9vZl9tYXRjaF90YWJsZVtdID0geworCXsgLmNvbXBhdGlibGUgPSAidS1ib290LGVudiIs IC5kYXRhID0gKHZvaWQgKilVX0JPT1RfRk9STUFUX1NJTkdMRSwgfSwKKwl7IC5jb21wYXRpYmxl ID0gInUtYm9vdCxlbnYtcmVkdW5kYW50LWJvb2wiLCAuZGF0YSA9ICh2b2lkICopVV9CT09UX0ZP Uk1BVF9SRURVTkRBTlQsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJ1LWJvb3QsZW52LXJlZHVuZGFu dC1jb3VudCIsIC5kYXRhID0gKHZvaWQgKilVX0JPT1RfRk9STUFUX1JFRFVOREFOVCwgfSwKKwl7 fSwKK307CisKK3N0YXRpYyBpbnQgdV9ib290X2Vudl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQoreworCXN0cnVjdCBudm1lbV9jb25maWcgY29uZmlnID0geworCQkubmFtZSA9 ICJ1LWJvb3QtZW52IiwKKwkJLnJlZ19yZWFkID0gdV9ib290X2Vudl9yZWFkLAorCX07CisJc3Ry dWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0g ZGV2LT5vZl9ub2RlOworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkOworCXN0cnVj dCB1X2Jvb3RfZW52ICpwcml2OworCWludCBlcnI7CisKKwlwcml2ID0gZGV2bV9remFsbG9jKGRl diwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVO T01FTTsKKwlwcml2LT5kZXYgPSBkZXY7CisKKwlvZl9pZCA9IG9mX21hdGNoX2RldmljZSh1X2Jv b3RfZW52X29mX21hdGNoX3RhYmxlLCBkZXYpOworCWlmICghb2ZfaWQpCisJCXJldHVybiAtRUlO VkFMOworCXByaXYtPmZvcm1hdCA9ICh1aW50cHRyX3Qpb2ZfaWQtPmRhdGE7CisKKwlpZiAob2Zf cHJvcGVydHlfcmVhZF91MzIobnAsICJyZWciLCAodTMyICopJnByaXYtPm9mZnNldCkgfHwKKwkg ICAgb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgobnAsICJyZWciLCAxLCAodTMyICopJnByaXYt PnNpemUpKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgXCJyZWdcIiBwcm9wZXJ0 eVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByaXYtPm10ZCA9IG9mX2dldF9tdGRf ZGV2aWNlX2J5X25vZGUobnAtPnBhcmVudCk7CisJaWYgKElTX0VSUihwcml2LT5tdGQpKSB7CisJ CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCAlcE9GIE1URDogJWxkXG4iLCBucC0+cGFyZW50 LCBQVFJfRVJSKHByaXYtPm10ZCkpOworCQlyZXR1cm4gUFRSX0VSUihwcml2LT5tdGQpOworCX0K KworCWVyciA9IHVfYm9vdF9lbnZfcGFyc2UocHJpdik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVy cjsKKworCWNvbmZpZy5kZXYgPSBkZXY7CisJY29uZmlnLmNlbGxzID0gcHJpdi0+Y2VsbHM7CisJ Y29uZmlnLm5jZWxscyA9IHByaXYtPm5jZWxsczsKKwljb25maWcucHJpdiA9IHByaXY7CisJY29u ZmlnLnNpemUgPSBwcml2LT5zaXplOworCisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZtX252 bWVtX3JlZ2lzdGVyKGRldiwgJmNvbmZpZykpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3Jt X2RyaXZlciB1X2Jvb3RfZW52X2RyaXZlciA9IHsKKwkucHJvYmUgPSB1X2Jvb3RfZW52X3Byb2Jl LAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInVfYm9vdF9lbnYiLAorCQkub2ZfbWF0Y2hfdGFi bGUgPSB1X2Jvb3RfZW52X29mX21hdGNoX3RhYmxlLAorCX0sCit9OworbW9kdWxlX3BsYXRmb3Jt X2RyaXZlcih1X2Jvb3RfZW52X2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIlJhZmHFgiBNacWC ZWNraSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwg dV9ib290X2Vudl9vZl9tYXRjaF90YWJsZSk7Ci0tIAoyLjM0LjEKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXggTVREIGRpc2N1c3Np b24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGlu Zm8vbGludXgtbXRkLwo= 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 16FFBC43334 for ; Sat, 11 Jun 2022 20:48:29 +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:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=6VAbzi8jIDCA8zBVLp8LWBC9qvz/8rxNMmaDioS9Dfw=; b=L/d5iT5NysG707 FPiKhPSon0UipYRvDzhobneXezVW1XIpE6QRL43WZ/UebBMqqiE5/2Sqo72xrnjNKge3h4fJYseHS Wy8ZjneMQ8gjcHQxTwL7qnDTeQrAssPZdVu+CSMUMe6tjZgl6PEIw19Yj4/D094FO9aTj1wAMbS2s PI6W5hw7NzYCY3VjWj0Df+CArsLUn0C+2yzt0uqqj/0Qg00nVn3Ff2auEiaAbaHYjNxpK8MEdNihv dDM/VFIJmZgllLlHR//6WpZZxmgz5grBfShcfFjdEGf/5I/7aM5z4stptJ1nXciw2kpKEu+0P1rkf k1AmHnex4pOp/1ZlidTw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1o0811-00EU80-LY; Sat, 11 Jun 2022 20:47:27 +0000 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1o080n-00EU5G-By; Sat, 11 Jun 2022 20:47:15 +0000 Received: by mail-ej1-x62d.google.com with SMTP id fu3so4140581ejc.7; Sat, 11 Jun 2022 13:47:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=pPGokfyfSUs/WTSM4zIFDX4BDdVMjvsS1wW+kXKgMVY=; b=fTdCyj5sKkyo5gZl9XuSnBt6drXY+MIoleIJ/Qkr9ddIiQ05qtqFTyOnrapd0QZ1ac apv0FIMWMS/LZyfB47w7iih7ypugBr6cUL8HUB/ipmdLg2WS9A7uFQ1BOWG+wXKhIy+F jF9FTGNVwKqdUYYzU4YOliGeOstfXgEIvjtP5o4w4H7YVQJ55mun6qNNNBheHJ41Rulb k5PlER238rl+8V7wmcBDEG8kI9xyoYOWgynn35QlrxoCxc/5Y6yV5b1Xwj7QZ8cagMHv uJDuKJVTztQTcBcfgM+mJ1reBkosq6gAu8ZaNdYjHv4vLxuvQSm7P5UUiTFiuEHLwK7p F8Mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=pPGokfyfSUs/WTSM4zIFDX4BDdVMjvsS1wW+kXKgMVY=; b=34KuQHx2LotbmlcqWIvlg53ybJ6UL+3i0m87xxTnmlo3olLa85UW2SBLo8poObYpgH bkJD3Sg4CZNvDL6XjiHCCksBn1uml6eW3vW/NsojBo2M0Z8wIieuWJefvDLDyDU1/xIk My2OFM+3EXkNzO7IH4KJUEt6PfNxeV8u6eYKRQ57YzV7wUc6pis3ph9gWthfZCMmaSKT UomuFFGTyOzFIt3i2zwsLpteqU6da8OLXnBmRX0tTP/jx66aM9f0Ge88QeMYHs3Cm5Iz ECEDTMx9Rd/LIPbBL1Z52PFZ1pBCswhZBBkHjNo72yr6Bna8625G5um7QJgPvwnaDmOG mkxw== X-Gm-Message-State: AOAM532kdThkH3nB3io7VLv2EtOy8glCWwFlvHLeDa5Sxt/EeARyLaDy ccFo3IqqF6XaBM+YDSX29Ak= X-Google-Smtp-Source: ABdhPJx7p/cGZivP+olSItsthDuwBJ/mAJsBXdvGeqVO/BYZhJAdnS+vc4xqnr3HiuxA2uqhAJmm7Q== X-Received: by 2002:a17:906:64d6:b0:712:1022:492b with SMTP id p22-20020a17090664d600b007121022492bmr11715611ejn.264.1654980431147; Sat, 11 Jun 2022 13:47:11 -0700 (PDT) Received: from localhost.lan (ip-194-187-74-233.konfederacka.maverick.com.pl. [194.187.74.233]) by smtp.gmail.com with ESMTPSA id 22-20020a170906301600b006f52dbc192bsm1490672ejz.37.2022.06.11.13.47.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jun 2022 13:47:10 -0700 (PDT) From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= To: Srinivas Kandagatla , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra Cc: 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?q?Rafa=C5=82=20Mi=C5=82ecki?= Subject: [PATCH V3 2/2] nvmem: add driver handling U-Boot environment variables Date: Sat, 11 Jun 2022 22:46:51 +0200 Message-Id: <20220611204651.19947-2-zajec5@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220611204651.19947-1-zajec5@gmail.com> References: <20220611204651.19947-1-zajec5@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220611_134713_462924_C2F5DD00 X-CRM114-Status: GOOD ( 28.74 ) 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 RnJvbTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgoKVS1Cb290IHN0b3JlcyBp dHMgc2V0dXAgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBJdCdzIGEgbGlzdCBvZgprZXktdmFs dWUgcGFpcnMgc3RvcmVkIG9uIGZsYXNoIGRldmljZSB3aXRoIGEgY3VzdG9tIGhlYWRlci4KClRo aXMgY29tbWl0IGFkZHMgYW4gTlZNRU0gZHJpdmVyIHRoYXQ6CjEuIFByb3ZpZGVzIE5WTUVNIGFj Y2VzcyB0byBlbnZpcm9ubWVudCB2YXJzIGJpbmFyeSBkYXRhCjIuIEV4dHJhY3RzIHZhcmlhYmxl cyBhcyBOVk1FTSBjZWxscwoKQ3VycmVudCBMaW51eCdzIE5WTUVNIHN5c2ZzIEFQSSBhbGxvd3Mg cmVhZGluZyB3aG9sZSBOVk1FTSBkYXRhIGJsb2NrLgpJdCBjYW4gYmUgdXNlZCBieSB1c2VyLXNw YWNlIHRvb2xzIGZvciByZWFkaW5nIFUtQm9vdCBlbnYgdmFycyBibG9jawp3aXRob3V0IHRoZSBo YXNzbGUgb2YgZmluZGluZyBpdHMgbG9jYXRpb24uIFBhcnNpbmcgd2lsbCBzdGlsbCBuZWVkIHRv CmJlIHJlLWRvbmUgdGhlcmUuCgpLZXJuZWwtcGFyc2VkIE5WTUVNIGNlbGxzIGNhbiBiZSByZWFk IGhvd2V2ZXIgYnkgTGludXggZHJpdmVycy4gVGhpcyBtYXkKYmUgdWVzZnVsIGZvciBFdGhlcm5l dCBkcml2ZXJzIGZvciByZWFkaW5nIGRldmljZSBNQUMgYWRkcmVzcyB3aGljaCBpcwpvZnRlbiBz dG9yZWQgYXMgVS1Cb290IGVudiB2YXJpYWJsZS4KClNpZ25lZC1vZmYtYnk6IFJhZmHFgiBNacWC ZWNraSA8cmFmYWxAbWlsZWNraS5wbD4KLS0tClYzOiBVc2Ugb2ZfZ2V0X210ZF9kZXZpY2VfYnlf bm9kZSgpICh0aGFua3MgQWhtYWQpICYgdXBkYXRlIGRlc2NyaXB0aW9uClYyOiBEcm9wIEFSQ0hf QkNNNDkwOCBkZXBlbmRlbmN5IGFzIHRoZXJlIGFyZSBwbGVudHkgYXJjaGl0ZWN0dXJlcyB1c2lu ZwogICAgVS1Cb290IGJvb3Rsb2FkZXIuIFRoYW5rcyBTcmluaXZhcy4KCkFzIG5vdGljZWQgYnkg QWhtYWQgYSBtaXNzaW5nIE5WTUVNIHN1YnN5c3RlbSBmZWF0dXJlIGlzIHVzZXItc3BhY2UKYWNj ZXNzIHRvIHBhcnNlZCBOVk1FTSBjZWxscy4gVGhhdCBpcyBzb21ldGhpbmcgSSBzdGFydGVkIHdv cmtpbmcgb24Kc29tZSB0aW1lIGFnbyBhbmQgSSdtIHBsYW5uaW5nIHRvIGdldCBiYWNrIHRvIGF0 IHNvbWUgcG9pbnQsIHBsZWFzZQpjaGVjazoKW1BBVENIIDIvMl0gbnZtZW06IGV4cG9zZSBOVk1F TSBjZWxscyBpbiBzeXNmcwpodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21sLzIwMjExMjIwMDY0 NzMwLjI4ODA2LTItemFqZWM1QGdtYWlsLmNvbS8KLS0tCiBNQUlOVEFJTkVSUyAgICAgICAgICAg ICAgICB8ICAgMSArCiBkcml2ZXJzL252bWVtL0tjb25maWcgICAgICB8ICAxMSArKwogZHJpdmVy cy9udm1lbS9NYWtlZmlsZSAgICAgfCAgIDIgKwogZHJpdmVycy9udm1lbS91LWJvb3QtZW52LmMg fCAyMzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFu Z2VkLCAyNDUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbnZtZW0v dS1ib290LWVudi5jCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRl eCA0NzVlMjgzNjUzODUuLjQzYjQyN2ZhNzZiMCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysr IGIvTUFJTlRBSU5FUlMKQEAgLTIwNDExLDYgKzIwNDExLDcgQEAgVS1CT09UIEVOVklST05NRU5U IFZBUklBQkxFUwogTToJUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgogUzoJTWFp bnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL252bWVtL3UtYm9v dCxlbnYueWFtbAorRjoJZHJpdmVycy9udm1lbS91LWJvb3QtZW52LmMKIAogVUFDQ0UgQUNDRUxF UkFUT1IgRlJBTUVXT1JLCiBNOglaaGFuZ2ZlaSBHYW8gPHpoYW5nZmVpLmdhb0BsaW5hcm8ub3Jn PgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lbS9LY29uZmlnIGIvZHJpdmVycy9udm1lbS9LY29u ZmlnCmluZGV4IGQ3MmQ4NzlhNmQzNC4uNWYxYjMyYjk1M2I5IDEwMDY0NAotLS0gYS9kcml2ZXJz L252bWVtL0tjb25maWcKKysrIGIvZHJpdmVycy9udm1lbS9LY29uZmlnCkBAIC0zNDQsNCArMzQ0 LDE1IEBAIGNvbmZpZyBOVk1FTV9BUFBMRV9FRlVTRVMKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNv IGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsCiAJICBiZSBjYWxs ZWQgbnZtZW0tYXBwbGUtZWZ1c2VzLgogCitjb25maWcgTlZNRU1fVV9CT09UX0VOVgorCXRyaXN0 YXRlICJVLUJvb3QgZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBP RiAmJiBNVEQKKwlzZWxlY3QgQ1JDMzIKKwloZWxwCisJICBVLUJvb3Qgc3RvcmVzIGl0cyBzZXR1 cCBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFRoaXMgZHJpdmVyIGFkZHMKKwkgIHN1cHBvcnQg Zm9yIHZlcmlmeWluZyAmIGV4cG9ydGluZyBzdWNoIGRhdGEuIEl0IGFsc28gZXhwb3NlcyB2YXJp YWJsZXMKKwkgIGFzIE5WTUVNIGNlbGxzIHNvIHRoZXkgY2FuIGJlIHJlZmVyZW5jZWQgYnkgb3Ro ZXIgZHJpdmVycy4KKworCSAgSWYgY29tcGlsZWQgYXMgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVk IG52bWVtX3UtYm9vdC1lbnYuCisKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWVtL01h a2VmaWxlIGIvZHJpdmVycy9udm1lbS9NYWtlZmlsZQppbmRleCBjNzEwYjY0ZjlmZTQuLjM5OWY5 OTcyZDQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9udm1lbS9NYWtlZmlsZQorKysgYi9kcml2ZXJz L252bWVtL01ha2VmaWxlCkBAIC02OSwzICs2OSw1IEBAIG9iai0kKENPTkZJR19OVk1FTV9BUFBM RV9FRlVTRVMpCSs9IG52bWVtLWFwcGxlLWVmdXNlcy5vCiBudm1lbS1hcHBsZS1lZnVzZXMteSAJ CTo9IGFwcGxlLWVmdXNlcy5vCiBvYmotJChDT05GSUdfTUlDUk9DSElQX09UUEMpCSs9IG52bWVt LW1pY3JvY2hpcC1vdHBjLm8KIG52bWVtLW1pY3JvY2hpcC1vdHBjLXkJCTo9IG1pY3JvY2hpcC1v dHBjLm8KK29iai0kKENPTkZJR19OVk1FTV9VX0JPT1RfRU5WKQkrPSBudm1lbV91LWJvb3QtZW52 Lm8KK252bWVtX3UtYm9vdC1lbnYteQkJOj0gdS1ib290LWVudi5vCmRpZmYgLS1naXQgYS9kcml2 ZXJzL252bWVtL3UtYm9vdC1lbnYuYyBiL2RyaXZlcnMvbnZtZW0vdS1ib290LWVudi5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTJjMmRkMTFkOTlmCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9udm1lbS91LWJvb3QtZW52LmMKQEAgLTAsMCArMSwyMzEgQEAK Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBDb3B5cmln aHQgKEMpIDIwMjIgUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgorICovCisKKyNp bmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5o PgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4K KyNpbmNsdWRlIDxsaW51eC9udm1lbS1jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L252bWVt LXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu dXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCitlbnVtIHVf Ym9vdF9lbnZfZm9ybWF0IHsKKwlVX0JPT1RfRk9STUFUX1NJTkdMRSwKKwlVX0JPT1RfRk9STUFU X1JFRFVOREFOVCwKK307CisKK3N0cnVjdCB1X2Jvb3RfZW52IHsKKwlzdHJ1Y3QgZGV2aWNlICpk ZXY7CisJZW51bSB1X2Jvb3RfZW52X2Zvcm1hdCBmb3JtYXQ7CisKKwkvKiBQYXJlbnQgZGV2aWNl ICovCisJc3RydWN0IG10ZF9pbmZvICptdGQ7CisJc2l6ZV90IG9mZnNldDsKKwlzaXplX3Qgc2l6 ZTsKKworCS8qIENlbGxzICovCisJc3RydWN0IG52bWVtX2NlbGxfaW5mbyAqY2VsbHM7CisJaW50 IG5jZWxsczsKK307CisKK3N0cnVjdCB1X2Jvb3RfZW52X2ltYWdlX3NpbmdsZSB7CisJX19sZTMy IGNyYzMyOworCXVpbnQ4X3QgZGF0YVswXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB1X2Jvb3Rf ZW52X2ltYWdlX3JlZHVuZGFudCB7CisJX19sZTMyIGNyYzMyOworCXU4IG1hcms7CisJdWludDhf dCBkYXRhWzBdOworfSBfX3BhY2tlZDsKKworc3RhdGljIGludCB1X2Jvb3RfZW52X3JlYWQodm9p ZCAqY29udGV4dCwgdW5zaWduZWQgaW50IG9mZnNldCwgdm9pZCAqdmFsLAorCQkJICAgc2l6ZV90 IGJ5dGVzKQoreworCXN0cnVjdCB1X2Jvb3RfZW52ICpwcml2ID0gY29udGV4dDsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CisJc2l6ZV90IGJ5dGVzX3JlYWQ7CisJaW50IGVycjsK KworCWVyciA9IG10ZF9yZWFkKHByaXYtPm10ZCwgcHJpdi0+b2Zmc2V0ICsgb2Zmc2V0LCBieXRl cywgJmJ5dGVzX3JlYWQsIHZhbCk7CisJaWYgKGVyciAmJiAhbXRkX2lzX2JpdGZsaXAoZXJyKSkg eworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFkIGZyb20gbXRkOiAlZFxuIiwgZXJyKTsK KwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoYnl0ZXNfcmVhZCAhPSBieXRlcykgeworCQlkZXZf ZXJyKGRldiwgIkZhaWxlZCB0byByZWFkICV6ZCBieXRlc1xuIiwgYnl0ZXMpOworCQlyZXR1cm4g LUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1X2Jvb3RfZW52X2FkZF9j ZWxscyhzdHJ1Y3QgdV9ib290X2VudiAqcHJpdiwgdWludDhfdCAqYnVmLAorCQkJCXNpemVfdCBk YXRhX29mZnNldCwgc2l6ZV90IGRhdGFfbGVuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBy aXYtPmRldjsKKwljaGFyICpkYXRhID0gYnVmICsgZGF0YV9vZmZzZXQ7CisJY2hhciAqdmFyLCAq dmFsdWUsICplcTsKKwlpbnQgaWR4OworCisJcHJpdi0+bmNlbGxzID0gMDsKKwlmb3IgKHZhciA9 IGRhdGE7IHZhciA8IGRhdGEgKyBkYXRhX2xlbiAmJiAqdmFyOyB2YXIgKz0gc3RybGVuKHZhcikg KyAxKQorCQlwcml2LT5uY2VsbHMrKzsKKworCXByaXYtPmNlbGxzID0gZGV2bV9rY2FsbG9jKGRl diwgcHJpdi0+bmNlbGxzLCBzaXplb2YoKnByaXYtPmNlbGxzKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFwcml2LT5jZWxscykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKHZhciA9IGRhdGEsIGlk eCA9IDA7CisJICAgICB2YXIgPCBkYXRhICsgZGF0YV9sZW4gJiYgKnZhcjsKKwkgICAgIHZhciA9 IHZhbHVlICsgc3RybGVuKHZhbHVlKSArIDEsIGlkeCsrKSB7CisJCWVxID0gc3RyY2hyKHZhciwg Jz0nKTsKKwkJaWYgKCFlcSkKKwkJCWJyZWFrOworCQkqZXEgPSAnXDAnOworCQl2YWx1ZSA9IGVx ICsgMTsKKworCQlwcml2LT5jZWxsc1tpZHhdLm5hbWUgPSBkZXZtX2tzdHJkdXAoZGV2LCB2YXIs IEdGUF9LRVJORUwpOworCQlpZiAoIXByaXYtPmNlbGxzW2lkeF0ubmFtZSkKKwkJCXJldHVybiAt RU5PTUVNOworCQlwcml2LT5jZWxsc1tpZHhdLm9mZnNldCA9IGRhdGFfb2Zmc2V0ICsgdmFsdWUg LSBkYXRhOworCQlwcml2LT5jZWxsc1tpZHhdLmJ5dGVzID0gc3RybGVuKHZhbHVlKTsKKwl9CisK KwlpZiAoV0FSTl9PTihpZHggIT0gcHJpdi0+bmNlbGxzKSkKKwkJcHJpdi0+bmNlbGxzID0gaWR4 OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdV9ib290X2Vudl9wYXJzZShzdHJ1Y3Qg dV9ib290X2VudiAqcHJpdikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CisJ c2l6ZV90IGNyYzMyX2RhdGFfb2Zmc2V0OworCXNpemVfdCBjcmMzMl9kYXRhX2xlbjsKKwlzaXpl X3QgY3JjMzJfb2Zmc2V0OworCXNpemVfdCBkYXRhX29mZnNldDsKKwlzaXplX3QgZGF0YV9sZW47 CisJdWludDMyX3QgY3JjMzI7CisJdWludDMyX3QgY2FsYzsKKwlzaXplX3QgYnl0ZXM7CisJdWlu dDhfdCAqYnVmOworCWludCBlcnI7CisKKwlidWYgPSBrY2FsbG9jKDEsIHByaXYtPnNpemUsIEdG UF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291 dDsKKwl9CisKKwllcnIgPSBtdGRfcmVhZChwcml2LT5tdGQsIHByaXYtPm9mZnNldCwgcHJpdi0+ c2l6ZSwgJmJ5dGVzLCBidWYpOworCWlmICgoZXJyICYmICFtdGRfaXNfYml0ZmxpcChlcnIpKSB8 fCBieXRlcyAhPSBwcml2LT5zaXplKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQg ZnJvbSBtdGQ6ICVkXG4iLCBlcnIpOworCQlnb3RvIGVycl9rZnJlZTsKKwl9CisKKwlzd2l0Y2gg KHByaXYtPmZvcm1hdCkgeworCWNhc2UgVV9CT09UX0ZPUk1BVF9TSU5HTEU6CisJCWNyYzMyX29m ZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1X2Jvb3RfZW52X2ltYWdlX3NpbmdsZSwgY3JjMzIpOwor CQljcmMzMl9kYXRhX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1X2Jvb3RfZW52X2ltYWdlX3Np bmdsZSwgZGF0YSk7CisJCWRhdGFfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVfYm9vdF9lbnZf aW1hZ2Vfc2luZ2xlLCBkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBVX0JPT1RfRk9STUFUX1JFRFVO REFOVDoKKwkJY3JjMzJfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVfYm9vdF9lbnZfaW1hZ2Vf cmVkdW5kYW50LCBjcmMzMik7CisJCWNyYzMyX2RhdGFfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0 IHVfYm9vdF9lbnZfaW1hZ2VfcmVkdW5kYW50LCBtYXJrKTsKKwkJZGF0YV9vZmZzZXQgPSBvZmZz ZXRvZihzdHJ1Y3QgdV9ib290X2Vudl9pbWFnZV9yZWR1bmRhbnQsIGRhdGEpOworCQlicmVhazsK Kwl9CisJY3JjMzIgPSBsZTMyX3RvX2NwdSgqKHVpbnQzMl90ICopKGJ1ZiArIGNyYzMyX29mZnNl dCkpOworCWNyYzMyX2RhdGFfbGVuID0gcHJpdi0+c2l6ZSAtIGNyYzMyX2RhdGFfb2Zmc2V0Owor CWRhdGFfbGVuID0gcHJpdi0+c2l6ZSAtIGRhdGFfb2Zmc2V0OworCisJY2FsYyA9IGNyYzMyKH4w LCBidWYgKyBjcmMzMl9kYXRhX29mZnNldCwgY3JjMzJfZGF0YV9sZW4pIF4gfjBMOworCWlmIChj YWxjICE9IGNyYzMyKSB7CisJCWRldl9lcnIoZGV2LCAiSW52YWxpZCBjYWxjdWxhdGVkIENSQzMy OiAweCUwOHggKGV4cGVjdGVkOiAweCUwOHgpXG4iLCBjYWxjLCBjcmMzMik7CisJCWVyciA9IC1F SU5WQUw7CisJCWdvdG8gZXJyX2tmcmVlOworCX0KKworCWJ1Zltwcml2LT5zaXplIC0gMV0gPSAn XDAnOworCWVyciA9IHVfYm9vdF9lbnZfYWRkX2NlbGxzKHByaXYsIGJ1ZiwgZGF0YV9vZmZzZXQs IGRhdGFfbGVuKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhZGQgY2Vs bHM6ICVkXG4iLCBlcnIpOworCitlcnJfa2ZyZWU6CisJa2ZyZWUoYnVmKTsKK2Vycl9vdXQ6CisJ cmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdV9ib290 X2Vudl9vZl9tYXRjaF90YWJsZVtdID0geworCXsgLmNvbXBhdGlibGUgPSAidS1ib290LGVudiIs IC5kYXRhID0gKHZvaWQgKilVX0JPT1RfRk9STUFUX1NJTkdMRSwgfSwKKwl7IC5jb21wYXRpYmxl ID0gInUtYm9vdCxlbnYtcmVkdW5kYW50LWJvb2wiLCAuZGF0YSA9ICh2b2lkICopVV9CT09UX0ZP Uk1BVF9SRURVTkRBTlQsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJ1LWJvb3QsZW52LXJlZHVuZGFu dC1jb3VudCIsIC5kYXRhID0gKHZvaWQgKilVX0JPT1RfRk9STUFUX1JFRFVOREFOVCwgfSwKKwl7 fSwKK307CisKK3N0YXRpYyBpbnQgdV9ib290X2Vudl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQoreworCXN0cnVjdCBudm1lbV9jb25maWcgY29uZmlnID0geworCQkubmFtZSA9 ICJ1LWJvb3QtZW52IiwKKwkJLnJlZ19yZWFkID0gdV9ib290X2Vudl9yZWFkLAorCX07CisJc3Ry dWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0g ZGV2LT5vZl9ub2RlOworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkOworCXN0cnVj dCB1X2Jvb3RfZW52ICpwcml2OworCWludCBlcnI7CisKKwlwcml2ID0gZGV2bV9remFsbG9jKGRl diwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVO T01FTTsKKwlwcml2LT5kZXYgPSBkZXY7CisKKwlvZl9pZCA9IG9mX21hdGNoX2RldmljZSh1X2Jv b3RfZW52X29mX21hdGNoX3RhYmxlLCBkZXYpOworCWlmICghb2ZfaWQpCisJCXJldHVybiAtRUlO VkFMOworCXByaXYtPmZvcm1hdCA9ICh1aW50cHRyX3Qpb2ZfaWQtPmRhdGE7CisKKwlpZiAob2Zf cHJvcGVydHlfcmVhZF91MzIobnAsICJyZWciLCAodTMyICopJnByaXYtPm9mZnNldCkgfHwKKwkg ICAgb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgobnAsICJyZWciLCAxLCAodTMyICopJnByaXYt PnNpemUpKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgXCJyZWdcIiBwcm9wZXJ0 eVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByaXYtPm10ZCA9IG9mX2dldF9tdGRf ZGV2aWNlX2J5X25vZGUobnAtPnBhcmVudCk7CisJaWYgKElTX0VSUihwcml2LT5tdGQpKSB7CisJ CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCAlcE9GIE1URDogJWxkXG4iLCBucC0+cGFyZW50 LCBQVFJfRVJSKHByaXYtPm10ZCkpOworCQlyZXR1cm4gUFRSX0VSUihwcml2LT5tdGQpOworCX0K KworCWVyciA9IHVfYm9vdF9lbnZfcGFyc2UocHJpdik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVy cjsKKworCWNvbmZpZy5kZXYgPSBkZXY7CisJY29uZmlnLmNlbGxzID0gcHJpdi0+Y2VsbHM7CisJ Y29uZmlnLm5jZWxscyA9IHByaXYtPm5jZWxsczsKKwljb25maWcucHJpdiA9IHByaXY7CisJY29u ZmlnLnNpemUgPSBwcml2LT5zaXplOworCisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkZXZtX252 bWVtX3JlZ2lzdGVyKGRldiwgJmNvbmZpZykpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3Jt X2RyaXZlciB1X2Jvb3RfZW52X2RyaXZlciA9IHsKKwkucHJvYmUgPSB1X2Jvb3RfZW52X3Byb2Jl LAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInVfYm9vdF9lbnYiLAorCQkub2ZfbWF0Y2hfdGFi bGUgPSB1X2Jvb3RfZW52X29mX21hdGNoX3RhYmxlLAorCX0sCit9OworbW9kdWxlX3BsYXRmb3Jt X2RyaXZlcih1X2Jvb3RfZW52X2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIlJhZmHFgiBNacWC ZWNraSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwg dV9ib290X2Vudl9vZl9tYXRjaF90YWJsZSk7Ci0tIAoyLjM0LjEKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg== 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 503E4C433EF for ; Sat, 11 Jun 2022 20:47:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231990AbiFKUr0 (ORCPT ); Sat, 11 Jun 2022 16:47:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40084 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231890AbiFKUrY (ORCPT ); Sat, 11 Jun 2022 16:47:24 -0400 Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B217CD6; Sat, 11 Jun 2022 13:47:12 -0700 (PDT) Received: by mail-ej1-x62f.google.com with SMTP id m20so4108188ejj.10; Sat, 11 Jun 2022 13:47:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=pPGokfyfSUs/WTSM4zIFDX4BDdVMjvsS1wW+kXKgMVY=; b=fTdCyj5sKkyo5gZl9XuSnBt6drXY+MIoleIJ/Qkr9ddIiQ05qtqFTyOnrapd0QZ1ac apv0FIMWMS/LZyfB47w7iih7ypugBr6cUL8HUB/ipmdLg2WS9A7uFQ1BOWG+wXKhIy+F jF9FTGNVwKqdUYYzU4YOliGeOstfXgEIvjtP5o4w4H7YVQJ55mun6qNNNBheHJ41Rulb k5PlER238rl+8V7wmcBDEG8kI9xyoYOWgynn35QlrxoCxc/5Y6yV5b1Xwj7QZ8cagMHv uJDuKJVTztQTcBcfgM+mJ1reBkosq6gAu8ZaNdYjHv4vLxuvQSm7P5UUiTFiuEHLwK7p F8Mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=pPGokfyfSUs/WTSM4zIFDX4BDdVMjvsS1wW+kXKgMVY=; b=pSm8qDd3/y3qeRmMchV/OsJHvyR23yl7bIBit1vIUMOgduCA4DUm3lhZYIp9/QAygr g3dmno5KjQaPNLGKW6nPQ4G0vi8HuEinNI4YQuZxm5x/hxnVtqVFgArHOx39IOT7vC0z XfmrfI3d+Q/KpSOMeQ4BHSeGOY2lDd31qG4Q0qlerq9/8GTZZ/4TEbEcwZn2pddZtGJ/ ghuXRSzaqsvUPwbFVtlxa8hSKhq0qX6lzvuxyF9yoUcVXbN3TZ69AwPqp35pK8Hz6C/r wSqn8HlGGGTTvpaim1ebp+ezRB5BfJLoegaveAah48RdFDX74J7hvKxBSyaylmg0ClM7 xx3Q== X-Gm-Message-State: AOAM5311LkqBaUd6i29DbEBB9OyVzjoVMp0atVyIqz66PkaY4ok6jiM6 CRF/8g8qIDdVfpUy7moWHpw= X-Google-Smtp-Source: ABdhPJx7p/cGZivP+olSItsthDuwBJ/mAJsBXdvGeqVO/BYZhJAdnS+vc4xqnr3HiuxA2uqhAJmm7Q== X-Received: by 2002:a17:906:64d6:b0:712:1022:492b with SMTP id p22-20020a17090664d600b007121022492bmr11715611ejn.264.1654980431147; Sat, 11 Jun 2022 13:47:11 -0700 (PDT) Received: from localhost.lan (ip-194-187-74-233.konfederacka.maverick.com.pl. [194.187.74.233]) by smtp.gmail.com with ESMTPSA id 22-20020a170906301600b006f52dbc192bsm1490672ejz.37.2022.06.11.13.47.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 11 Jun 2022 13:47:10 -0700 (PDT) From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= To: Srinivas Kandagatla , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra Cc: 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?q?Rafa=C5=82=20Mi=C5=82ecki?= Subject: [PATCH V3 2/2] nvmem: add driver handling U-Boot environment variables Date: Sat, 11 Jun 2022 22:46:51 +0200 Message-Id: <20220611204651.19947-2-zajec5@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220611204651.19947-1-zajec5@gmail.com> References: <20220611204651.19947-1-zajec5@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org 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); + } + + err = u_boot_env_parse(priv); + if (err) + return err; + + config.dev = dev; + config.cells = priv->cells; + config.ncells = priv->ncells; + config.priv = priv; + config.size = priv->size; + + return PTR_ERR_OR_ZERO(devm_nvmem_register(dev, &config)); +} + +static struct platform_driver u_boot_env_driver = { + .probe = u_boot_env_probe, + .driver = { + .name = "u_boot_env", + .of_match_table = u_boot_env_of_match_table, + }, +}; +module_platform_driver(u_boot_env_driver); + +MODULE_AUTHOR("Rafał Miłecki"); +MODULE_LICENSE("GPL"); +MODULE_DEVICE_TABLE(of, u_boot_env_of_match_table); -- 2.34.1