Re: [PATCH v8 0/9] Support for block device NVMEM providers

Srinivas Kandagatla <[email protected]>
Newsgroups org.kernel.vger.linux-bluetooth,org.infradead.lists.ath10k,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-block,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel,org.kernel.vger.linux-mmc,org.kernel.vger.linux-wireless,org.kernel.vger.netdev
Message-ID <[email protected]>

On 7/3/26 2:45 PM, Loic Poulain wrote:
> On embedded devices, it is common for factory provisioning to store
> device-specific information, such as Ethernet or WiFi MAC addresses,
> in a dedicated area of an eMMC partition. This avoids the need for
> and additional EEPROM/OTP and leverages the persistence of eMMC.
> 
> One example is the Arduino UNO-Q, where the WiFi MAC address and the
> Bluetooth Device address are stored in the eMMC Boot1 partition.
> 
> Until now, accessing this information required a custom bootloader
> to read the data and inject it into the Device Tree before handing
> control over to the kernel. This approach is fragile and leads to
> device-specific workarounds.
> 
> Rather than adding a new NVMEM provider specifically to the eMMC
> subsystem, the new support operates at the block layer, allowing any
> block device to behave like other non-volatile memories such as EEPROM
> or OTP.
> 
> This series builds on earlier work by Daniel Golle that enables block
> devices to act as NVMEM providers:
> https://lore.kernel.org/all/6061aa4201030b9bb2f8d03ef32a564fdb786ed1.1709667858.git.daniel@makrotopia.org/
> 
> It also introduces an NVMEM layout description for the Arduino UNO-Q,
> allowing device-specific data stored in the eMMC Boot1 partition to
> be accessed in a standard way.
> 
> WiFi and Ethernet already support retrieving MAC addresses from NVMEM.
> Bluetooth requires similar support, which is also addressed.
> 
> Note that this is currently limited to MMC-backed block devices, as
> only the MMC core associates a firmware node with the block device
> (add_disk_fwnode). This can be easily extended in the future to
> support additional block drivers.
> 
> Signed-off-by: Loic Poulain <[email protected]>

What is the merge strategy here, Am happy to take it via nvmem tree if
all the non nvmem patches are acked or reviewed-by.

--srini
> ---
> Changes in v8:
> - block: Fix bdev->bd_nvmem on registering failure (sashiko)
> - net: of_net: of_get_nvmem_eui48() now also rejects all-ones cells (sashiko)
> - Bluetooth: mgmt: account for HCI_QUIRK_USE_BDADDR_NVMEM in
>   is_configured() and get_missing_options() (sashiko)
> - Reword blk-nvmem KCONFIG help text to satisfy checkpatch
> - Link to v7: https://lore.kernel.org/r/[email protected]
> 
> Changes in v7:
> - Rework bindings/dts so that the eMMC boot partition can be a nvmem fixed-layout
>   and not a child of fixed-partition. (Rob)
> - Add Support for fixed-layout as the nvmem device node itself
> - Remove "block: partitions: of: Skip child nodes without reg property"
>   This is no more required in this series and will be submitted separately (Rob)
> - Add missing linux/cleanup.h and linux/device.h includes (Bartosz)
> - simplify nvmem_register() error path using dev_err_probe() (Bartosz)
> - nvmem_device forward declaration to blk_types.h (Bartosz)
> - Add hci_dev_get_bd_addr_from_nvmem() kernel-doc for return value (Piotr)
> - Link to v6: https://lore.kernel.org/r/[email protected]
> 
> Changes in v6:
> - blk_nvmem_add() returns int, error properly propagated (Bartosz)
> - Redundant if (bdev->bd_nvmem) guard removed in blk_nvmem_del() (Bartosz)
> - Size guard changed from UINT_MAX → INT_MAX to avoid signed overflow in config.size (sashiko)
> - BLK_OPEN_RESTRICT_WRITES removed from blk_nvmem_reg_read() (sashiko)
> - Link to v5: https://lore.kernel.org/r/[email protected]
> 
> Changes in v5:
> - Fixed ath10k binding issue + extended commit message (Krzysztof)
> - Moved blk-nvmem handling to block core instead of a class_interface
>   This allows correct/robust integration with block device life cycle (Bartosz).
> - block: partitions: of: Skip child nodes without reg property (sashiko)
> - Link to v4: https://lore.kernel.org/r/[email protected]
> 
> Changes in v4:
> - Fix squash issue (dts commit incorrectly squashed) (Konrad)
> - Use devres for nvmem resources (Bartosz)
> - use __free() destructor helper when possible (Bartosz)
> - Fix value return checking for bdev_file_open_by_dev
> - Link to v3: https://lore.kernel.org/r/[email protected]
> 
> Changes in v3:
> - Fixed missing 'fixed-partitions' compatible in partition (Rob)
> - Fixed clashing nvmem cells, document calibration along mac (Sashiko)
> - Remove workaround to handle dangling nvmem references after
>   unregistering, this is a generic nvmem framework issue handled
>   in Bartosz's series:
>    https://lore.kernel.org/all/[email protected]/
> - Validate mac (is_valid_ether_addr) before copying to output buffer
> - Link to v2: https://lore.kernel.org/r/[email protected]
> 
> Changes in v2:
> - Fix example nvmem-layout cells to use compatible = "mac-base"
> - Squash WiFi MAC and Bluetooth BD address consumer patches into the nvmem layout patch
> - Fix possible use-after-free in blk-nvmem: bnv (nvmem priv) linked to nvmem lifetime
> - Simplify nvmem-cell-names from items: - const: to plain const:
> - Factor out common NVMEM EUI-48 retrieval logic
> - Reorder changes
> - Link to v1: https://lore.kernel.org/r/[email protected]
> 
> ---
> Daniel Golle (1):
>       block: implement NVMEM provider
> 
> Loic Poulain (8):
>       dt-bindings: mmc: Document fixed-layout NVMEM provider support
>       dt-bindings: net: wireless: qcom,ath10k: Document NVMEM cells
>       dt-bindings: bluetooth: qcom: Add NVMEM BD address cell
>       nvmem: layouts: Support fixed-layout as the nvmem device node itself
>       net: of_net: Add of_get_nvmem_eui48() helper for EUI-48 lookup
>       Bluetooth: hci_sync: Add NVMEM-backed BD address retrieval
>       Bluetooth: qca: Set NVMEM BD address quirks when address is invalid
>       arm64: dts: qcom: arduino-imola: Describe NVMEM layout for WiFi/BT addresses
> 
>  .../devicetree/bindings/mmc/mmc-card.yaml          |  23 ++++-
>  .../net/bluetooth/qcom,bluetooth-common.yaml       |   9 ++
>  .../bindings/net/wireless/qcom,ath10k.yaml         |  16 +++
>  arch/arm64/boot/dts/qcom/qrb2210-arduino-imola.dts |  32 ++++++
>  block/Kconfig                                      |  11 +++
>  block/Makefile                                     |   1 +
>  block/blk-nvmem.c                                  | 110 +++++++++++++++++++++
>  block/blk.h                                        |   8 ++
>  block/genhd.c                                      |   4 +
>  drivers/bluetooth/btqca.c                          |   5 +-
>  drivers/nvmem/layouts.c                            |  13 ++-
>  include/linux/blk_types.h                          |   4 +
>  include/linux/of_net.h                             |   7 ++
>  include/net/bluetooth/hci.h                        |  18 ++++
>  net/bluetooth/hci_sync.c                           |  41 +++++++-
>  net/bluetooth/mgmt.c                               |   6 +-
>  net/core/of_net.c                                  |  52 +++++++---
>  17 files changed, 342 insertions(+), 18 deletions(-)
> ---
> base-commit: dffcfe75c722be66aa2669fb335528edb0590671
> change-id: 20260428-block-as-nvmem-4b308e8bda9a
> 
> Best regards,
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.