Received: by 2002:a05:7412:361b:b0:f9:2edb:3e4d with SMTP id ie27csp55556rdb; Sun, 17 Dec 2023 14:19:31 -0800 (PST) X-Google-Smtp-Source: AGHT+IE1l+kvdvun4lGSN26s2xl0SDw1m4FTxdCXroP9IzC9DpiYwj22vybSOZ7+CTjVRr2eLfKz X-Received: by 2002:a50:c18a:0:b0:552:9915:fab1 with SMTP id m10-20020a50c18a000000b005529915fab1mr2664424edf.47.1702851571776; Sun, 17 Dec 2023 14:19:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702851571; cv=none; d=google.com; s=arc-20160816; b=p+9wn3LJGiMW4h1yuxxCCRSBu+Fomva2lB0yN7eoWNGYLS6SdQjDtkJ/69z/4YBL5b Ur9xoi6QqSq7ffJ92v5ziU6CjNlKGm9HQuAdyVe4aBZPIVGVmTg4QonQVqfNvT4GwNu5 Ww7OgDupdwExf/B07BUxFHfNUYrJ+DTVF+uXHAUW/x6fStTC4zLNuZJtX7KFoXEGV2KI dp/R1vqLJmQJOap+zlwE/juhPAHk/jxdabQk5DcvmambqCUXQsjONiGZ9vH9GeboPv28 A9BNp1qxnrKcJainPQND/C+gelwQVBhic6HRqT1taElcDnNyidUMWY9Ma6k3nvT8ri/i n4yQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-disposition:mime-version:list-unsubscribe:list-subscribe :list-id:precedence:message-id:subject:to:from:date; bh=mqMnOccq9LQ+uwhlWHyKUg3+dSrgQCHaBEBP898RHcc=; fh=75NJMYqoRo4jeDl32jx04p3D1q0Fgi4sqch+OCznfHk=; b=NZ3SQO9Tb1OEiFkU53FLlgOshkPTHXXKqK8V9LE4P2ecmDOfwjko9279YsDJ09Swc2 kcrMoguF1kW33k1iWYy7BZCBBFtE43+S78QXKwcZQeiEpNchCqBjLDhSW00Gn/1vlVh8 DcYOitIOL3jG4iDB0sMk8ER0h+VHvFXB9YAyyUAWEHI3+X8hFe+L52ztz0HtvyPdf99t z8eDIMFKQtXtPKxJK6524YmrO2HtSWlflSsN4weX6KCAsecixAgraL9e4/WY5bxJ/Vx1 Tbpx2v/xuuNDjLfos5XkxebiAngnB+Lq5jHpDZzXrq7hkIUb/1AYFT9oQEsHWExJJ6mn Kj6A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-2845-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-2845-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id ec46-20020a0564020d6e00b0055358c78db8si108332edb.260.2023.12.17.14.19.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Dec 2023 14:19:31 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-2845-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel+bounces-2845-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-2845-linux.lists.archive=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id 87F991F21F6D for ; Sun, 17 Dec 2023 22:19:31 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id F329249F8D; Sun, 17 Dec 2023 22:19:22 +0000 (UTC) X-Original-To: linux-kernel@vger.kernel.org Received: from pidgin.makrotopia.org (pidgin.makrotopia.org [185.142.180.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2634B49F77; Sun, 17 Dec 2023 22:19:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=makrotopia.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=makrotopia.org Received: from local by pidgin.makrotopia.org with esmtpsa (TLS1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.96.2) (envelope-from ) id 1rEzTc-0001aP-1I; Sun, 17 Dec 2023 22:19:13 +0000 Date: Sun, 17 Dec 2023 22:19:10 +0000 From: Daniel Golle To: Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Daniel Golle , linux-mtd@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 0/7] mtd: ubi: allow UBI volumes to provide NVMEM Message-ID: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Similar to how MAC addresses and Wi-Fi calibration data would be stored inside an MTD partition on devices coming with NOR flash, a UBI volume is used by some vendors in the same way on devices with NAND flash. The goal of this series is to support such embedded Linux devices which got NVMEM bits stored inside a UBI volume. Representing the UBI volume in the Device Tree and adding a phandle to be referenced by NVMEM consumers allows such devices to come up with their correct MAC addresses and device-specific Wi-Fi calibration data loaded. In order for NVMEM bits to be available for other drivers, attaching UBI devices has to be moved from late_initcall (which is too late for other drivers) to happen earlier. As an alternative to the existing kernel cmdline parameter the Device Tree property 'compatible = "linux,ubi";' inside an MTD partition can be used to have that MTD device attached as UBI device. MTD partitions which serve as UBI devices may have a "volumes" subnode with volumes, and volumes may have an "nvmem-layout" object which will trigger the creation of an emulated NVMEM device on top of the UBI volume. In this way, other drivers (think: Ethernet, Wi-Fi) can resolve and acquire NVMEM bits using the usual device tree phandle, just this time the NVMEM content is read from a UBI volume. This series is a follow-up and contains most patches of the previous series "mtd: ubi: behave like a good MTD citizen"[1] which was meant in preparation for implementing the NVMEM provider. [1]: https://patchwork.ozlabs.org/project/linux-mtd/list/?series=353177&state=%2A&archive=both Changes since v5: * fix whitespace problems in dt-schema additions Changes since v4: * split ubi_open_volume_path() breaking out reusable parts for new match_volume_desc() function as suggested by Richard Weinberger. Doing the same for ubi_open_volume_nm() doesn't work as we are working on struct ubi_volume_info in match_volume_desc() while ubi_open_volume_nm() is working on struct ubi_volume. That reduces the common part to a string comparision and length check which doesn't seem worth breaking out of the existing function. * drop patches and changes not strictly needed for NVMEM use-case: - don't handle ubi detach on MTD removal notification. It was not done until now and the locking hell I was facing when trying to implement that is non trivial. - don't relocate the call to ubiblock device creation to the notification handler - change ubiblock only as far as needed to handle creation from cmdline parameter when a volume is added. * improve commit messages and comments Changes since v3: * dt-bindings fixes as requested Changes since v2: * include dt-bindings additions Changes since v1: * include patch to fix exiting Kconfig formatting issues * fix typo and indentation in Kconfig Daniel Golle (7): dt-bindings: mtd: add basic bindings for UBI dt-bindings: mtd: ubi-volume: allow UBI volumes to provide NVMEM mtd: ubi: block: use notifier to create ubiblock from parameter mtd: ubi: attach from device tree mtd: ubi: introduce pre-removal notification for UBI volumes mtd: ubi: populate ubi volume fwnode mtd: ubi: provide NVMEM layer over UBI volumes .../bindings/mtd/partitions/linux,ubi.yaml | 75 +++++++ .../bindings/mtd/partitions/ubi-volume.yaml | 40 ++++ drivers/mtd/ubi/Kconfig | 12 ++ drivers/mtd/ubi/Makefile | 1 + drivers/mtd/ubi/block.c | 136 ++++++------- drivers/mtd/ubi/build.c | 154 ++++++++++---- drivers/mtd/ubi/kapi.c | 56 ++++-- drivers/mtd/ubi/nvmem.c | 188 ++++++++++++++++++ drivers/mtd/ubi/ubi.h | 3 + drivers/mtd/ubi/vmt.c | 44 +++- include/linux/mtd/ubi.h | 2 + 11 files changed, 579 insertions(+), 132 deletions(-) create mode 100644 Documentation/devicetree/bindings/mtd/partitions/linux,ubi.yaml create mode 100644 Documentation/devicetree/bindings/mtd/partitions/ubi-volume.yaml create mode 100644 drivers/mtd/ubi/nvmem.c -- 2.43.0