From patchwork Wed Dec 22 19:23:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= X-Patchwork-Id: 1572307 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=RqdKRmRy; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=dLkU6AGw; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3D04bY7z9s3q for ; Thu, 23 Dec 2021 06:24:16 +1100 (AEDT) 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: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:In-Reply-To:References: List-Owner; bh=8nyvSriegkhk6rFUV0qCSfizIv8ZxApPAWPjCZ0yZPE=; b=RqdKRmRyBv+34h W0AKhMAwPwnV/9fWqvu7RrwYA7tboOHHA51MMrr0iaIaVj0PqFI8lE34xRWR7ql4JPMT0RY0R1fKd XLENZDpdXOxD1QWegTIxVGxZuzUQxI9URgcIqEBxY7YUbRki+SA4wDqeahqAsSAyBH0LgyX8bgweW CORysh4saVcqOcgsPL4v/OV9DhBYbohpy7CCYS5q//LISngg/obskn8rPRKrC6p2cEfsjZmubGK8s hWAdcS1FuwrE1vrtCFy79QUAzLynIeYlWAEABp4ifHa4zxs2reaIVHNX5cMgqBCitrdZLo49WZqzu wgajXDDQeyL+cDxEO36Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n07D3-00BDhB-QG; Wed, 22 Dec 2021 19:23:33 +0000 Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n07D1-00BDfs-4Z for linux-mtd@lists.infradead.org; Wed, 22 Dec 2021 19:23:32 +0000 Received: by mail-lj1-x22e.google.com with SMTP id p8so5386050ljo.5 for ; Wed, 22 Dec 2021 11:23:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=lmbFZL+w3ae5fA8Ekugn4kVFo17QFX/FP2wMDhmpXOY=; b=dLkU6AGwDBB6d4GVp30/fEalwT0Rx9ebq1BcO5klzW6rkEb/e+tG1O3AOZR/yJTtQQ aIAo3/NHhIu8dhs0GITQUxLl9a2TZfCwsquZNOdTt72wm6dz/qR76e3EjalYEOp/+s5q hMwb0T07cV/AYLAF0NaHxzhkPBWO/NOXC1s74QJBqoHaH5M9F/il4HB26iMWhbveWczd XE/rInO3uHgT9TxKdKjGzigX/JRyvv1PFGVeZHfo2RfNGjhYSEwBvMMHrWWsuKziMzPh 6VWfQdvFfkU5PgYYHUiqnu77heZjTKNFSqmbeKxBVC58bbZWnuGHx7ucjYIMbRiPoq7W D7Hg== 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:mime-version :content-transfer-encoding; bh=lmbFZL+w3ae5fA8Ekugn4kVFo17QFX/FP2wMDhmpXOY=; b=mVPK7F/8eE6UVbgrQa30Njeu4h2gII4fHkB0SMg81ikknlS3JSJCeDcIEExz9seyMT Kx+kaGb75PjeWFragKzhVkKqAWQKCmYXgVG0/obdgdBFLm2UEnLYxybUAYt2TFUO9kQe 7woVMC8Ndrb+Bb5iwLNtpZcid6Ehzdnvd1T8VtxOHuHbiwnvh8RkdGg7CsJzOfIZw68G Ctkq7XtuiJc2Cq/oRa79C2716XadDefCP5bIDxUSDCmDLoOfA8bi42eSO87YyYCpDzDw Fme8pfrTd0QW0tvqAlgaW/J9hGNcOmtkd22aLP/2a/tczdQP1cSOeA9nnXBEbGdCXtUR wDlQ== X-Gm-Message-State: AOAM531To5sRkDv2BITjX/eHoN+lTQFNE6xJFzgaaEbdFWWgRJUVEUS9 CAe1SVrsSVMIhHlE42rf/NkrqA8kEwc= X-Google-Smtp-Source: ABdhPJyH7Sk5P7qxvMVO//EGRVpJIfX+mHzWGnfgzVV5YTrnxZvCPZsAr1ZxxgF2O6AXROF/SfJVlw== X-Received: by 2002:a2e:a4b6:: with SMTP id g22mr2867341ljm.447.1640201007302; Wed, 22 Dec 2021 11:23:27 -0800 (PST) Received: from localhost.lan (ip-194-187-74-233.konfederacka.maverick.com.pl. [194.187.74.233]) by smtp.gmail.com with ESMTPSA id q10sm242070lfm.163.2021.12.22.11.23.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Dec 2021 11:23:26 -0800 (PST) From: =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= To: Srinivas Kandagatla , Rob Herring , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= Subject: [PATCH 1/3] mtd: core: call devm_of_platform_populate() for MTD devices Date: Wed, 22 Dec 2021 20:23:18 +0100 Message-Id: <20211222192320.21974-1-zajec5@gmail.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211222_112331_209561_A23031D3 X-CRM114-Status: GOOD ( 12.70 ) X-Spam-Score: 0.1 (/) X-Spam-Report: =?unknown-8bit?q?Spam_detection_software=2C_running_on_the_sy?= =?unknown-8bit?q?stem_=22bombadil=2Einfradead=2Eorg=22=2C?= =?unknown-8bit?q?_has_NOT_identified_this_incoming_email_as_spam=2E__The_ori?= =?unknown-8bit?q?ginal?= =?unknown-8bit?q?_message_has_been_attached_to_this_so_you_can_view_it_or_la?= =?unknown-8bit?q?bel?= =?unknown-8bit?q?_similar_future_email=2E__If_you_have_any_questions=2C_see?= =?unknown-8bit?q?_the_administrator_of_that_system_for_details=2E?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_Content_preview=3A__From=3A_Rafa=C5=82_Mi=C5=82ecki_This_a?= =?unknown-8bit?q?dds_support_for_bindings_present?= =?unknown-8bit?q?_in_MTD_devices_=28applies_to_partitions_too=29_nodes=2E_Th?= =?unknown-8bit?q?e_purpose_of_this_change?= =?unknown-8bit?q?_is_to_allow_drivers_handle_MTD_device_=28partition=29_data?= =?unknown-8bit?q?=2E_Some_partitions_may?= =?unknown-8bit?b?IGNvbnRhaW4gWy4uLl0g?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_Content_analysis_details=3A___=280=2E1_points=2C_5=2E0_req?= =?unknown-8bit?q?uired=29?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_pts_rule_name______________description?= =?unknown-8bit?q?_----_----------------------_------------------------------?= =?unknown-8bit?q?--------------------?= =?unknown-8bit?q?_-0=2E0_RCVD=5FIN=5FDNSWL=5FNONE_____RBL=3A_Sender_listed_a?= =?unknown-8bit?q?t_https=3A//www=2Ednswl=2Eorg/=2C?= =?unknown-8bit?q?_no_trust?= =?unknown-8bit?b?IFsyYTAwOjE0NTA6NDg2NDoyMDowOjA6MDoyMmUgbGlzdGVkIGluXQ==?= =?unknown-8bit?b?IFtsaXN0LmRuc3dsLm9yZ10=?= =?unknown-8bit?q?_-0=2E0_SPF=5FPASS_______________SPF=3A_sender_matches_SPF_?= =?unknown-8bit?q?record?= =?unknown-8bit?q?_0=2E0_SPF=5FHELO=5FNONE__________SPF=3A_HELO_does_not_publ?= =?unknown-8bit?q?ish_an_SPF_Record?= =?unknown-8bit?q?_0=2E0_FREEMAIL=5FFROM__________Sender_email_is_commonly_ab?= =?unknown-8bit?q?used_enduser_mail?= =?unknown-8bit?q?_provider?= =?unknown-8bit?q?_=5Bzajec5=5Bat=5Dgmail=2Ecom=5D?= =?unknown-8bit?q?_0=2E2_FREEMAIL=5FENVFROM=5FEND=5FDIGIT_Envelope-from_freem?= =?unknown-8bit?q?ail_username_ends?= =?unknown-8bit?q?_in_digit?= =?unknown-8bit?q?_=5Bzajec5=5Bat=5Dgmail=2Ecom=5D?= =?unknown-8bit?q?_-0=2E1_DKIM=5FVALID=5FAU__________Message_has_a_valid_DKIM?= =?unknown-8bit?q?_or_DK_signature_from?= =?unknown-8bit?q?_author=27s_domain?= =?unknown-8bit?q?_-0=2E1_DKIM=5FVALID_____________Message_has_at_least_one_v?= =?unknown-8bit?q?alid_DKIM_or_DK_signature?= =?unknown-8bit?q?_0=2E1_DKIM=5FSIGNED____________Message_has_a_DKIM_or_DK_si?= =?unknown-8bit?q?gnature=2C_not_necessarily?= =?unknown-8bit?q?_valid?= =?unknown-8bit?q?_-0=2E1_DKIM=5FVALID=5FEF__________Message_has_a_valid_DKIM?= =?unknown-8bit?q?_or_DK_signature_from?= =?unknown-8bit?q?_envelope-from_domain?= 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: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Rafał Miłecki This adds support for bindings present in MTD devices (applies to partitions too) nodes. The purpose of this change is to allow drivers handle MTD device (partition) data. Some partitions may contain info that requires parsing & processing. An example can be U-Boot partition that contains block with environment variables somehwere in a middle. That block should be described in DT and parsed by a specific driver. Signed-off-by: Rafał Miłecki --- drivers/mtd/mtdcore.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c index 70f492dce158..07b75e6ca111 100644 --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -690,6 +691,9 @@ int add_mtd_device(struct mtd_info *mtd) not->add(mtd); mutex_unlock(&mtd_table_mutex); + + devm_of_platform_populate(&mtd->dev); + /* We _know_ we aren't being removed, because our caller is still holding us here. So none of this try_ nonsense, and no bitching about it From patchwork Wed Dec 22 19:23:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= X-Patchwork-Id: 1572309 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=mu8y6UvJ; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=Xiyb+qLC; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3D716M6z9sR4 for ; Thu, 23 Dec 2021 06:24:23 +1100 (AEDT) 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=9oqv8SGPZSeaL/Pw6cc6G/bKeNRGjR9iHoWocTX5NLU=; b=mu8y6UvJQitaEA Y+ol8zZuJhyMdpvzi7iQQ1JMyXUtGToRSmQrVFU1xD84nPWF5HSyGieuinj6y7NTFY061nOQYfBGH c5P5Gstzjdtv4sZcOuZI1aMrtDR7oDMeapzfygQO7gSqN6bZNFu9JOdMYmsjCz2o7Kd75C9sK8z8l KF4Cpglni8EaIf7qrGMUDy79t0OCv+goJRA4TEk8vpV1jJj2uFn6Sm/7TEBdv8V0WvjhXmkFDKS67 EgWFUEVTQPG2Z99xsVSPkHbh7dGBNgUDmHqxp81vrLzZberTqlGQ+rzILZS1fmtpgRlOs28xQqAP3 u501Q0Tykqnw7jKpdo9A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n07DG-00BDih-85; Wed, 22 Dec 2021 19:23:46 +0000 Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n07D1-00BDft-1A for linux-mtd@lists.infradead.org; Wed, 22 Dec 2021 19:23:32 +0000 Received: by mail-lf1-x12f.google.com with SMTP id bt1so7448776lfb.13 for ; Wed, 22 Dec 2021 11:23:30 -0800 (PST) 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=nnMHNj6u7HaHgpLVLKeM6nSGjSJw2q61Bxw5Xl/ukmM=; b=Xiyb+qLClCl7Pu3HgsGA1CRIe4oxKjaxidZtnc2DhR71a0wt6QbvrsXQ+GkeN3mNQi 5fjoJyR5RfCHD6wZ8pJlJ2eeVcitm2Rk7YZ/JoFYRcZB715QIj75Mcd1VcneXf/MlA1O fuOFY2opBTvmP1vj3T7kn0m+/elI9kwvTx7h1JeV1/Uwxmi7u9UEGBOsv2GfKHV5WsU+ ckTpY6CigzGd2F9k4GkiZO/Mjex/gL4sJZHj27ygx+brHfevAwIKi7+XgSNAqk71vVmZ 3uyHorjbfpoCRvzJ20xG90RuyoReVd8URTQn/8UCg5aDQBqwvDq9qa7o3wFMDRNNVBJJ yV6A== 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=nnMHNj6u7HaHgpLVLKeM6nSGjSJw2q61Bxw5Xl/ukmM=; b=f5+CTihJEe2hQPmznRKnExG+7fqj7qOLge9dYTkBShfW5xmGNAp3225APBKKaqmsbw Z7kICG4G3LfFYKTncB+WQki238C6Qs9BOggLMse4jXMhU32vniT4N8okRZq9P2HReEBG UZxpCIjUjVBVEuDKj9u1zf3ZdRUCrJuucmRf8fq1EYSgKXwzpxmtWy54D89oR2/OxoMk 0TUzpKht1D7F3gXt/4gvq/F+zJXiv1kmP5VKsusNiqV5axgRrk4d0RP0bz0EQ4p+YApL xXFfJ+jjVGsw2i/H62w293RAS0hoPrtQNrMrT/i8aOSYADKxh8mlY7gyqU+oNUi1c+t7 +kFA== X-Gm-Message-State: AOAM533hbzh2lfO292BMezB/c4+bpFsjsSgeTs6iUU+cuRL5bRo6wRii LCq9IkyebW6J3RaXOLZKdzk= X-Google-Smtp-Source: ABdhPJxrlcBFE05Qdt3pla4vKu9cuel8MOEK+s8D2N0uphrADifmn9B4e9V0aEdS4UAho1nrT/S2Jw== X-Received: by 2002:a05:6512:40d:: with SMTP id u13mr3236080lfk.327.1640201009043; Wed, 22 Dec 2021 11:23:29 -0800 (PST) Received: from localhost.lan (ip-194-187-74-233.konfederacka.maverick.com.pl. [194.187.74.233]) by smtp.gmail.com with ESMTPSA id q10sm242070lfm.163.2021.12.22.11.23.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Dec 2021 11:23:28 -0800 (PST) From: =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= To: Srinivas Kandagatla , Rob Herring , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= Subject: [PATCH 2/3] dt-bindings: nvmem: add U-Boot environment variables binding Date: Wed, 22 Dec 2021 20:23:19 +0100 Message-Id: <20211222192320.21974-2-zajec5@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211222192320.21974-1-zajec5@gmail.com> References: <20211222192320.21974-1-zajec5@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211222_112331_110294_8B7F38EA X-CRM114-Status: GOOD ( 15.70 ) X-Spam-Score: 0.1 (/) X-Spam-Report: =?unknown-8bit?q?Spam_detection_software=2C_running_on_the_sy?= =?unknown-8bit?q?stem_=22bombadil=2Einfradead=2Eorg=22=2C?= =?unknown-8bit?q?_has_NOT_identified_this_incoming_email_as_spam=2E__The_ori?= =?unknown-8bit?q?ginal?= =?unknown-8bit?q?_message_has_been_attached_to_this_so_you_can_view_it_or_la?= =?unknown-8bit?q?bel?= =?unknown-8bit?q?_similar_future_email=2E__If_you_have_any_questions=2C_see?= =?unknown-8bit?q?_the_administrator_of_that_system_for_details=2E?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_Content_preview=3A__From=3A_Rafa=C5=82_Mi=C5=82ecki_This_b?= =?unknown-8bit?q?inding_allows_describing_a_=28part?= =?unknown-8bit?q?_of=29_MTD_device_=28partition=29_that_contains_a_block_wit?= =?unknown-8bit?q?h_environment_variables=2E?= =?unknown-8bit?q?_Operating_system_usually_needs_to_parse_that_block_to_read?= =?unknown-8bit?q?_variables_values?= =?unknown-8bit?b?IHRoYXQgbWF5IFsuLi5dIA==?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_Content_analysis_details=3A___=280=2E1_points=2C_5=2E0_req?= =?unknown-8bit?q?uired=29?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_pts_rule_name______________description?= =?unknown-8bit?q?_----_----------------------_------------------------------?= =?unknown-8bit?q?--------------------?= =?unknown-8bit?q?_-0=2E0_RCVD=5FIN=5FDNSWL=5FNONE_____RBL=3A_Sender_listed_a?= =?unknown-8bit?q?t_https=3A//www=2Ednswl=2Eorg/=2C?= =?unknown-8bit?q?_no_trust?= =?unknown-8bit?b?IFsyYTAwOjE0NTA6NDg2NDoyMDowOjA6MDoxMmYgbGlzdGVkIGluXQ==?= =?unknown-8bit?b?IFtsaXN0LmRuc3dsLm9yZ10=?= =?unknown-8bit?q?_-0=2E0_SPF=5FPASS_______________SPF=3A_sender_matches_SPF_?= =?unknown-8bit?q?record?= =?unknown-8bit?q?_0=2E0_SPF=5FHELO=5FNONE__________SPF=3A_HELO_does_not_publ?= =?unknown-8bit?q?ish_an_SPF_Record?= =?unknown-8bit?q?_0=2E0_FREEMAIL=5FFROM__________Sender_email_is_commonly_ab?= =?unknown-8bit?q?used_enduser_mail?= =?unknown-8bit?q?_provider?= =?unknown-8bit?q?_=5Bzajec5=5Bat=5Dgmail=2Ecom=5D?= =?unknown-8bit?q?_0=2E2_FREEMAIL=5FENVFROM=5FEND=5FDIGIT_Envelope-from_freem?= =?unknown-8bit?q?ail_username_ends?= =?unknown-8bit?q?_in_digit?= =?unknown-8bit?q?_=5Bzajec5=5Bat=5Dgmail=2Ecom=5D?= =?unknown-8bit?q?_-0=2E1_DKIM=5FVALID=5FAU__________Message_has_a_valid_DKIM?= =?unknown-8bit?q?_or_DK_signature_from?= =?unknown-8bit?q?_author=27s_domain?= =?unknown-8bit?q?_-0=2E1_DKIM=5FVALID_____________Message_has_at_least_one_v?= =?unknown-8bit?q?alid_DKIM_or_DK_signature?= =?unknown-8bit?q?_0=2E1_DKIM=5FSIGNED____________Message_has_a_DKIM_or_DK_si?= =?unknown-8bit?q?gnature=2C_not_necessarily?= =?unknown-8bit?q?_valid?= =?unknown-8bit?q?_-0=2E1_DKIM=5FVALID=5FEF__________Message_has_a_valid_DKIM?= =?unknown-8bit?q?_or_DK_signature_from?= =?unknown-8bit?q?_envelope-from_domain?= 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: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Rafał Miłecki This binding allows describing a (part of) MTD device (partition) that contains a block with environment variables. Operating system usually needs to parse that block to read variables values that may affect booting process & device configuration. Signed-off-by: Rafał Miłecki --- .../devicetree/bindings/nvmem/u-boot,env.yaml | 56 +++++++++++++++++++ MAINTAINERS | 5 ++ 2 files changed, 61 insertions(+) create mode 100644 Documentation/devicetree/bindings/nvmem/u-boot,env.yaml diff --git a/Documentation/devicetree/bindings/nvmem/u-boot,env.yaml b/Documentation/devicetree/bindings/nvmem/u-boot,env.yaml new file mode 100644 index 000000000000..0f808868fff3 --- /dev/null +++ b/Documentation/devicetree/bindings/nvmem/u-boot,env.yaml @@ -0,0 +1,56 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/nvmem/u-boot,env.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: U-Boot environment variables + +description: | + U-Boot uses environment variables to store device parameters and + configuration. They may be used for booting process, setup or keeping end user + interesting info. + + Data is stored on flash partition in a U-Boot specific format (CRC32 and NUL + separated key-value pairs). + + This binding allows specifying data location and format (default one or vendor + specific). + +maintainers: + - Rafał Miłecki + +allOf: + - $ref: nvmem.yaml# + +properties: + compatible: + enum: + - u,boot,env + - brcm,env + + reg: + maxItems: 1 + +unevaluatedProperties: false + +examples: + - | + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "uboot"; + reg = <0x0 0x100000>; + + #address-cells = <1>; + #size-cells = <1>; + + nvmem@10000 { + compatible = "u,boot,env"; + reg = <0x10000 0x10000>; + }; + }; + }; diff --git a/MAINTAINERS b/MAINTAINERS index 67558097bb66..271c29c84c7d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -19624,6 +19624,11 @@ W: http://linuxtv.org T: git git://linuxtv.org/media_tree.git F: drivers/media/pci/tw686x/ +U-BOOT ENVIRONMENT VARIABLES +M: Rafał Miłecki +S: Maintained +F: Documentation/devicetree/bindings/nvmem/u-boot,env.yaml + UACCE ACCELERATOR FRAMEWORK M: Zhangfei Gao M: Zhou Wang From patchwork Wed Dec 22 19:23:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= X-Patchwork-Id: 1572310 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=yQ3iki2O; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=cJjioB/h; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JK3DL5Lqfz9s3q for ; Thu, 23 Dec 2021 06:24:34 +1100 (AEDT) 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=5K1AgixvmtA14OPfmHii6g+8O7bBT+jUQlhCJ8O1D0I=; b=yQ3iki2OirbXu5 tmH87kxWUzb1imTNzj+grHl4fkkO4u1YmpMZCRBkttVmXMWgMzevJLD3pCgfcl02O4Lfe9wrrRDzk Ieocb6JLrR9Hs7bOimhDON40wujKtEJDcxRqr/a+aAnX270ea55mUXI7L75xlpaWjRryUPCSqT5qL 5m91BDgAjhaqAvZo1uC9RmubsbDk9vIYMClHEBaLybxNDzuVMMTvfkWA2JIo7W5NMs7luAmI9tklf j5zmdtkflGdUW5LCuSJrXJY/vj9RLWeJGze3JdGkAEcq4ceEkCaBq7yCAU7Q6eHjGbSYBCWdVjhif KQT8qicjU7QIOmgALSwQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n07DS-00BDjN-RT; Wed, 22 Dec 2021 19:23:58 +0000 Received: from mail-lj1-x232.google.com ([2a00:1450:4864:20::232]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n07D3-00BDgg-6K for linux-mtd@lists.infradead.org; Wed, 22 Dec 2021 19:23:34 +0000 Received: by mail-lj1-x232.google.com with SMTP id i63so5392991lji.3 for ; Wed, 22 Dec 2021 11:23:32 -0800 (PST) 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=KCFi6Q8pBpxmwtXpGyK7AP439ce4VvXx32qzmws3x1E=; b=cJjioB/hxUJh2u4hbdtQPn4hjYG0gi6K00gDF3V2XdiQ6mlcRK/ja/dJLi55dbRlbp YhnVDmJWU/sto6DcOOTtUo0uHMqRQ6DvQ8J1VeYoho1Ft145DhoV5RtR5KLNaC9zds6K MOolsvX2LZJTvua9QY+8b5s2BvZaXNR86APSDtzavnSMd4uLIyDtYPSv1L8PZ4M6/oMz fEOpp1aEdHuYSWweMkeH7wBCVmyAQWxNCapdxfrmmdOoLA4ZabJIhXg2U9zrwOzxv6Iq 5/GRmpXyyIkEI/fC9Ba0+H6DA6eD8NbF2jBJdHWhc9AgOO+GDM/ZfMR2H/l1okbVTkyM A7xQ== 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=KCFi6Q8pBpxmwtXpGyK7AP439ce4VvXx32qzmws3x1E=; b=tOtxu4suDxCPvY2W8okoWiDbBm3abFdvoNfROF8Ljqjtqs8svK4g2TOkBus2WUFZ06 xScQnzfmi6jUpOd0OHnw2X6GPebW3lF7X+9gtucmhEnq3j1LwXW2xdEVZMq/KuIoLiEL EJ5Yd6mWl+8IaBoMQuVWx6C3LoxGysC0WbUMnoqNgJwXp+17u7CCTSH3af13suIz8XJ1 a/xTH+SCueCspD7YZ0kUH22fEHMZTxbBbyxnOnL4TLjSteBcTODxsuhvti8Xb2j1xI60 0u9agKg5TQCv1CeBlQTEuSy2mZHLCAU9ASxrhaN1J88LNFMRzud9kvAbYQaRi58ntm8g 4PJw== X-Gm-Message-State: AOAM531WO32lG0fpxEklWaaHAH8Lf5io/bwBub7r/QXGvHIWlgnTIf2x C94PE4FpcB6WDk5OIhbtEjFScBbZkgU= X-Google-Smtp-Source: ABdhPJwp84y8P1DWDVWXYwLYsBSWE/jSSjLctWrdXYF0jAJ1+P8bh0JzGcFJ6J7VjoWD56VLghaADA== X-Received: by 2002:a2e:a917:: with SMTP id j23mr1851642ljq.317.1640201011450; Wed, 22 Dec 2021 11:23:31 -0800 (PST) Received: from localhost.lan (ip-194-187-74-233.konfederacka.maverick.com.pl. [194.187.74.233]) by smtp.gmail.com with ESMTPSA id q10sm242070lfm.163.2021.12.22.11.23.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Dec 2021 11:23:31 -0800 (PST) From: =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= To: Srinivas Kandagatla , Rob Herring , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, =?utf-8?b?UmFmYcWCIE1pxYJlY2tp?= Subject: [PATCH 3/3] nvmem: add driver handling U-Boot environment variables Date: Wed, 22 Dec 2021 20:23:20 +0100 Message-Id: <20211222192320.21974-3-zajec5@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211222192320.21974-1-zajec5@gmail.com> References: <20211222192320.21974-1-zajec5@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211222_112333_273741_006B1733 X-CRM114-Status: GOOD ( 26.35 ) X-Spam-Score: 0.1 (/) X-Spam-Report: =?unknown-8bit?q?Spam_detection_software=2C_running_on_the_sy?= =?unknown-8bit?q?stem_=22bombadil=2Einfradead=2Eorg=22=2C?= =?unknown-8bit?q?_has_NOT_identified_this_incoming_email_as_spam=2E__The_ori?= =?unknown-8bit?q?ginal?= =?unknown-8bit?q?_message_has_been_attached_to_this_so_you_can_view_it_or_la?= =?unknown-8bit?q?bel?= =?unknown-8bit?q?_similar_future_email=2E__If_you_have_any_questions=2C_see?= =?unknown-8bit?q?_the_administrator_of_that_system_for_details=2E?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_Content_preview=3A__From=3A_Rafa=C5=82_Mi=C5=82ecki_U-Boot?= =?unknown-8bit?q?_binary_contains_a_block_of_environment?= =?unknown-8bit?q?_variables_=28NVMEM=29_that_should_be_parsed_and_exposed_as?= =?unknown-8bit?q?_NVMEM_cells=2E_Signed-off-by=3A?= =?unknown-8bit?q?_Rafa=C5=82_Mi=C5=82ecki_---_MAINTAINERS_=7C_1_+_drivers/nv?= =?unknown-8bit?q?mem/Kconfig_=7C_10_++_drivers/nvmem/Makefile?= =?unknown-8bit?q?_=7C_2_+_drivers/nvmem/u-boot-env=2Ec_=7C_236_+++++++++++++?= =?unknown-8bit?q?++++++++++++++++++++++++?= =?unknown-8bit?b?IDQgZmlsZXMgY2hhbmdlZCBbLi4uXSA=?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_Content_analysis_details=3A___=280=2E1_points=2C_5=2E0_req?= =?unknown-8bit?q?uired=29?= =?unknown-8bit?q?_?= =?unknown-8bit?q?_pts_rule_name______________description?= =?unknown-8bit?q?_----_----------------------_------------------------------?= =?unknown-8bit?q?--------------------?= =?unknown-8bit?q?_-0=2E0_RCVD=5FIN=5FDNSWL=5FNONE_____RBL=3A_Sender_listed_a?= =?unknown-8bit?q?t_https=3A//www=2Ednswl=2Eorg/=2C?= =?unknown-8bit?q?_no_trust?= =?unknown-8bit?b?IFsyYTAwOjE0NTA6NDg2NDoyMDowOjA6MDoyMzIgbGlzdGVkIGluXQ==?= =?unknown-8bit?b?IFtsaXN0LmRuc3dsLm9yZ10=?= =?unknown-8bit?q?_-0=2E0_SPF=5FPASS_______________SPF=3A_sender_matches_SPF_?= =?unknown-8bit?q?record?= =?unknown-8bit?q?_0=2E0_SPF=5FHELO=5FNONE__________SPF=3A_HELO_does_not_publ?= =?unknown-8bit?q?ish_an_SPF_Record?= =?unknown-8bit?q?_0=2E0_FREEMAIL=5FFROM__________Sender_email_is_commonly_ab?= =?unknown-8bit?q?used_enduser_mail?= =?unknown-8bit?q?_provider?= =?unknown-8bit?q?_=5Bzajec5=5Bat=5Dgmail=2Ecom=5D?= =?unknown-8bit?q?_0=2E2_FREEMAIL=5FENVFROM=5FEND=5FDIGIT_Envelope-from_freem?= =?unknown-8bit?q?ail_username_ends?= =?unknown-8bit?q?_in_digit?= =?unknown-8bit?q?_=5Bzajec5=5Bat=5Dgmail=2Ecom=5D?= =?unknown-8bit?q?_-0=2E1_DKIM=5FVALID=5FAU__________Message_has_a_valid_DKIM?= =?unknown-8bit?q?_or_DK_signature_from?= =?unknown-8bit?q?_author=27s_domain?= =?unknown-8bit?q?_-0=2E1_DKIM=5FVALID_____________Message_has_at_least_one_v?= =?unknown-8bit?q?alid_DKIM_or_DK_signature?= =?unknown-8bit?q?_0=2E1_DKIM=5FSIGNED____________Message_has_a_DKIM_or_DK_si?= =?unknown-8bit?q?gnature=2C_not_necessarily?= =?unknown-8bit?q?_valid?= =?unknown-8bit?q?_-0=2E1_DKIM=5FVALID=5FEF__________Message_has_a_valid_DKIM?= =?unknown-8bit?q?_or_DK_signature_from?= =?unknown-8bit?q?_envelope-from_domain?= 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: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Rafał Miłecki U-Boot binary contains a block of environment variables (NVMEM) that should be parsed and exposed as NVMEM cells. Signed-off-by: Rafał Miłecki Reported-by: kernel test robot --- MAINTAINERS | 1 + drivers/nvmem/Kconfig | 10 ++ drivers/nvmem/Makefile | 2 + drivers/nvmem/u-boot-env.c | 236 +++++++++++++++++++++++++++++++++++++ 4 files changed, 249 insertions(+) create mode 100644 drivers/nvmem/u-boot-env.c diff --git a/MAINTAINERS b/MAINTAINERS index 271c29c84c7d..cc9bdeb33b64 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -19628,6 +19628,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 da414617a54d..af9115852412 100644 --- a/drivers/nvmem/Kconfig +++ b/drivers/nvmem/Kconfig @@ -300,4 +300,14 @@ config NVMEM_BRCM_NVRAM This driver provides support for Broadcom's NVRAM that can be accessed using I/O mapping. +config NVMEM_U_BOOT_ENV + tristate "U-Boot environment variables support" + depends on ARCH_BCM4908 || COMPILE_TEST + depends on OF + help + This driver adds support for parsing U-Boot environment variables + stored on flash partition. + + If compiled as module it will be called nvmem_u-boot-env. + endif diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile index dcbbde35b6a8..772904cdebdb 100644 --- a/drivers/nvmem/Makefile +++ b/drivers/nvmem/Makefile @@ -61,3 +61,5 @@ obj-$(CONFIG_NVMEM_RMEM) += nvmem-rmem.o nvmem-rmem-y := rmem.o obj-$(CONFIG_NVMEM_BRCM_NVRAM) += nvmem_brcm_nvram.o nvmem_brcm_nvram-y := brcm_nvram.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..a932b3d3c63b --- /dev/null +++ b/drivers/nvmem/u-boot-env.c @@ -0,0 +1,236 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2021 Rafał Miłecki + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum u_boot_env_format { + U_BOOT_FORMAT_DEFAULT, + U_BOOT_FORMAT_BRCM, +}; + +struct u_boot_env { + struct device *dev; + enum u_boot_env_format format; + struct mtd_info *mtd; + size_t offset; + size_t size; + struct nvmem_cell_info *cells; + int ncells; +}; + +struct u_boot_env_image { + __le32 crc32; + uint8_t data[0]; +} __packed; + +struct u_boot_brcm_header { + __le32 unk; + __le32 len; +} __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 err; + } + + return 0; +} + +static int u_boot_env_add_cells(struct u_boot_env *priv, size_t data_offset, + uint8_t *data, size_t len) +{ + struct device *dev = priv->dev; + char *var, *value, *eq; + int idx; + + priv->ncells = 0; + for (var = data; var < (char *)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 < (char *)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 - (char *)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; + struct u_boot_env_image *image; + size_t image_offset; + size_t image_len; + uint32_t crc32; + size_t bytes; + uint8_t *buf; + int err; + + image_offset = 0; + image_len = priv->size; + if (priv->format == U_BOOT_FORMAT_BRCM) { + struct u_boot_brcm_header header; + + err = mtd_read(priv->mtd, priv->offset, sizeof(header), &bytes, + (uint8_t *)&header); + if (err && !mtd_is_bitflip(err)) { + dev_err(dev, "Failed to read from mtd: %d\n", err); + return err; + } + + image_offset = sizeof(header); + image_len = le32_to_cpu(header.len); + } + dev_info(dev, "offset:0x%08x len:0x%08x\n", image_offset, image_len); + + buf = kcalloc(1, image_len, GFP_KERNEL); + if (!buf) { + err = -ENOMEM; + goto err_out; + } + image = (struct u_boot_env_image *)buf; + + err = mtd_read(priv->mtd, priv->offset + image_offset, image_len, &bytes, buf); + if (err && !mtd_is_bitflip(err)) { + dev_err(dev, "Failed to read from mtd: %d\n", err); + goto err_kfree; + } + + crc32 = crc32(~0, buf + 4, image_len - 4) ^ ~0L; + if (crc32 != le32_to_cpu(image->crc32)) { + dev_err(dev, "Invalid calculated CRC32: 0x%08x\n", crc32); + err = -EINVAL; + goto err_kfree; + } + + buf[image_len - 1] = '\0'; + err = u_boot_env_add_cells(priv, image_offset + sizeof(*image), + buf + sizeof(*image), + image_len - sizeof(*image)); + 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_DEFAULT, }, + { .compatible = "brcm,env", .data = (void *)U_BOOT_FORMAT_BRCM, }, + {}, +}; + +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; + const char *label; + 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", &priv->offset) || + of_property_read_u32_index(np, "reg", 1, &priv->size)) { + dev_err(dev, "Failed to read \"reg\" property\n"); + return -EINVAL; + } + + label = of_get_property(np->parent, "label", NULL); + if (!label) + label = np->parent->name; + + priv->mtd = get_mtd_device_nm(label); + if (IS_ERR(priv->mtd)) { + dev_err(dev, "Failed to find \"%s\" MTD device: %ld\n", label, 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, + }, +}; + +static int __init u_boot_env_init(void) +{ + return platform_driver_register(&u_boot_env_driver); +} + +subsys_initcall_sync(u_boot_env_init); + +MODULE_AUTHOR("Rafał Miłecki"); +MODULE_LICENSE("GPL"); +MODULE_DEVICE_TABLE(of, u_boot_env_of_match_table);