fc29fd821d
Current layout support was initially written without modules support in mind. When the requirement for module support rose, the existing base was improved to adopt modularization support, but kind of a design flaw was introduced. With the existing implementation, when a storage device registers into NVMEM, the core tries to hook a layout (if any) and populates its cells immediately. This means, if the hardware description expects a layout to be hooked up, but no driver was provided for that, the storage medium will fail to probe and try later from scratch. Even if we consider that the hardware description shall be correct, we could still probe the storage device (especially if it contains the rootfs). One way to overcome this situation is to consider the layouts as devices, and leverage the native notifier mechanism. When a new NVMEM device is registered, we can populate its nvmem-layout child, if any, and wait for the matching to be done in order to get the cells (the waiting can be easily done with the NVMEM notifiers). If the layout driver is compiled as a module, it should automatically be loaded. This way, there is no strong order to enforce, any NVMEM device creation or NVMEM layout driver insertion will be observed as a new event which may lead to the creation of additional cells, without disturbing the probes with costly (and sometimes endless) deferrals. In order to achieve that goal we create a new bus for the nvmem-layouts with minimal logic to match nvmem-layout devices with nvmem-layout drivers. All this infrastructure code is created in the layouts.c file. Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> Tested-by: Rafał Miłecki <rafal@milecki.pl> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Link: https://lore.kernel.org/r/20231215111536.316972-7-srinivas.kandagatla@linaro.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
422 lines
13 KiB
Plaintext
422 lines
13 KiB
Plaintext
# SPDX-License-Identifier: GPL-2.0-only
|
|
menuconfig NVMEM
|
|
bool "NVMEM Support"
|
|
imply NVMEM_LAYOUTS
|
|
help
|
|
Support for NVMEM(Non Volatile Memory) devices like EEPROM, EFUSES...
|
|
|
|
This framework is designed to provide a generic interface to NVMEM
|
|
from both the Linux Kernel and the userspace.
|
|
|
|
If unsure, say no.
|
|
|
|
if NVMEM
|
|
|
|
config NVMEM_SYSFS
|
|
bool "/sys/bus/nvmem/devices/*/nvmem (sysfs interface)"
|
|
depends on SYSFS
|
|
default y
|
|
help
|
|
Say Y here to add a sysfs interface for NVMEM.
|
|
|
|
This interface is mostly used by userspace applications to
|
|
read/write directly into nvmem.
|
|
|
|
# Layouts
|
|
|
|
source "drivers/nvmem/layouts/Kconfig"
|
|
|
|
# Devices
|
|
|
|
config NVMEM_APPLE_EFUSES
|
|
tristate "Apple eFuse support"
|
|
depends on ARCH_APPLE || COMPILE_TEST
|
|
default ARCH_APPLE
|
|
help
|
|
Say y here to enable support for reading eFuses on Apple SoCs
|
|
such as the M1. These are e.g. used to store factory programmed
|
|
calibration data required for the PCIe or the USB-C PHY.
|
|
|
|
This driver can also be built as a module. If so, the module will
|
|
be called nvmem-apple-efuses.
|
|
|
|
config NVMEM_BCM_OCOTP
|
|
tristate "Broadcom On-Chip OTP Controller support"
|
|
depends on ARCH_BCM_IPROC || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
default ARCH_BCM_IPROC
|
|
help
|
|
Say y here to enable read/write access to the Broadcom OTP
|
|
controller.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem-bcm-ocotp.
|
|
|
|
config NVMEM_BRCM_NVRAM
|
|
tristate "Broadcom's NVRAM support"
|
|
depends on ARCH_BCM_5301X || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
select GENERIC_NET_UTILS
|
|
help
|
|
This driver provides support for Broadcom's NVRAM that can be accessed
|
|
using I/O mapping.
|
|
|
|
config NVMEM_IMX_IIM
|
|
tristate "i.MX IC Identification Module support"
|
|
depends on ARCH_MXC || COMPILE_TEST
|
|
help
|
|
This is a driver for the IC Identification Module (IIM) available on
|
|
i.MX SoCs, providing access to 4 Kbits of programmable
|
|
eFuses.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem-imx-iim.
|
|
|
|
config NVMEM_IMX_OCOTP
|
|
tristate "i.MX 6/7/8 On-Chip OTP Controller support"
|
|
depends on ARCH_MXC || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
help
|
|
This is a driver for the On-Chip OTP Controller (OCOTP) available on
|
|
i.MX6 SoCs, providing access to 4 Kbits of one-time programmable
|
|
eFuses.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem-imx-ocotp.
|
|
|
|
config NVMEM_IMX_OCOTP_ELE
|
|
tristate "i.MX On-Chip OTP Controller support"
|
|
depends on ARCH_MXC || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
depends on OF
|
|
help
|
|
This is a driver for the On-Chip OTP Controller (OCOTP)
|
|
available on i.MX SoCs which has ELE.
|
|
|
|
config NVMEM_IMX_OCOTP_SCU
|
|
tristate "i.MX8 SCU On-Chip OTP Controller support"
|
|
depends on IMX_SCU
|
|
depends on HAVE_ARM_SMCCC
|
|
help
|
|
This is a driver for the SCU On-Chip OTP Controller (OCOTP)
|
|
available on i.MX8 SoCs.
|
|
|
|
config NVMEM_JZ4780_EFUSE
|
|
tristate "JZ4780 EFUSE Memory Support"
|
|
depends on MACH_INGENIC || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
depends on OF
|
|
select REGMAP_MMIO
|
|
help
|
|
Say Y here to include support for JZ4780 efuse memory found on
|
|
all JZ4780 SoC based devices.
|
|
To compile this driver as a module, choose M here: the module
|
|
will be called nvmem_jz4780_efuse.
|
|
|
|
config NVMEM_LAN9662_OTPC
|
|
tristate "Microchip LAN9662 OTP controller support"
|
|
depends on SOC_LAN966 || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
help
|
|
This driver enables the OTP controller available on Microchip LAN9662
|
|
SoCs. It controls the access to the OTP memory connected to it.
|
|
|
|
config NVMEM_LAYERSCAPE_SFP
|
|
tristate "Layerscape SFP (Security Fuse Processor) support"
|
|
depends on ARCH_LAYERSCAPE || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
select REGMAP_MMIO
|
|
help
|
|
This driver provides support to read the eFuses on Freescale
|
|
Layerscape SoC's. For example, the vendor provides a per part
|
|
unique ID there.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called layerscape-sfp.
|
|
|
|
config NVMEM_LPC18XX_EEPROM
|
|
tristate "NXP LPC18XX EEPROM Memory Support"
|
|
depends on ARCH_LPC18XX || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
help
|
|
Say Y here to include support for NXP LPC18xx EEPROM memory found in
|
|
NXP LPC185x/3x and LPC435x/3x/2x/1x devices.
|
|
To compile this driver as a module, choose M here: the module
|
|
will be called nvmem_lpc18xx_eeprom.
|
|
|
|
config NVMEM_LPC18XX_OTP
|
|
tristate "NXP LPC18XX OTP Memory Support"
|
|
depends on ARCH_LPC18XX || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
help
|
|
Say Y here to include support for NXP LPC18xx OTP memory found on
|
|
all LPC18xx and LPC43xx devices.
|
|
To compile this driver as a module, choose M here: the module
|
|
will be called nvmem_lpc18xx_otp.
|
|
|
|
config NVMEM_MESON_EFUSE
|
|
tristate "Amlogic Meson GX eFuse Support"
|
|
depends on (ARCH_MESON || COMPILE_TEST) && MESON_SM
|
|
help
|
|
This is a driver to retrieve specific values from the eFuse found on
|
|
the Amlogic Meson GX SoCs.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem_meson_efuse.
|
|
|
|
config NVMEM_MESON_MX_EFUSE
|
|
tristate "Amlogic Meson6/Meson8/Meson8b eFuse Support"
|
|
depends on ARCH_MESON || COMPILE_TEST
|
|
help
|
|
This is a driver to retrieve specific values from the eFuse found on
|
|
the Amlogic Meson6, Meson8 and Meson8b SoCs.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem_meson_mx_efuse.
|
|
|
|
config NVMEM_MICROCHIP_OTPC
|
|
tristate "Microchip OTPC support"
|
|
depends on ARCH_AT91 || COMPILE_TEST
|
|
help
|
|
This driver enable the OTP controller available on Microchip SAMA7G5
|
|
SoCs. It controls the access to the OTP memory connected to it.
|
|
|
|
config NVMEM_MTK_EFUSE
|
|
tristate "Mediatek SoCs EFUSE support"
|
|
depends on ARCH_MEDIATEK || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
help
|
|
This is a driver to access hardware related data like sensor
|
|
calibration, HDMI impedance etc.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called efuse-mtk.
|
|
|
|
config NVMEM_MXS_OCOTP
|
|
tristate "Freescale MXS On-Chip OTP Memory Support"
|
|
depends on ARCH_MXS || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
help
|
|
If you say Y here, you will get readonly access to the
|
|
One Time Programmable memory pages that are stored
|
|
on the Freescale i.MX23/i.MX28 processor.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem-mxs-ocotp.
|
|
|
|
config NVMEM_NINTENDO_OTP
|
|
tristate "Nintendo Wii and Wii U OTP Support"
|
|
depends on WII || COMPILE_TEST
|
|
help
|
|
This is a driver exposing the OTP of a Nintendo Wii or Wii U console.
|
|
|
|
This memory contains common and per-console keys, signatures and
|
|
related data required to access peripherals.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem-nintendo-otp.
|
|
|
|
config NVMEM_QCOM_QFPROM
|
|
tristate "QCOM QFPROM Support"
|
|
depends on ARCH_QCOM || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
help
|
|
Say y here to enable QFPROM support. The QFPROM provides access
|
|
functions for QFPROM data to rest of the drivers via nvmem interface.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem_qfprom.
|
|
|
|
config NVMEM_QCOM_SEC_QFPROM
|
|
tristate "QCOM SECURE QFPROM Support"
|
|
depends on ARCH_QCOM || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
depends on OF
|
|
select QCOM_SCM
|
|
help
|
|
Say y here to enable secure QFPROM support. The secure QFPROM provides access
|
|
functions for QFPROM data to rest of the drivers via nvmem interface.
|
|
|
|
This driver can also be built as a module. If so, the module will be called
|
|
nvmem_sec_qfprom.
|
|
|
|
config NVMEM_RAVE_SP_EEPROM
|
|
tristate "Rave SP EEPROM Support"
|
|
depends on RAVE_SP_CORE
|
|
help
|
|
Say y here to enable Rave SP EEPROM support.
|
|
|
|
config NVMEM_RMEM
|
|
tristate "Reserved Memory Based Driver Support"
|
|
depends on HAS_IOMEM
|
|
help
|
|
This driver maps reserved memory into an nvmem device. It might be
|
|
useful to expose information left by firmware in memory.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem-rmem.
|
|
|
|
config NVMEM_ROCKCHIP_EFUSE
|
|
tristate "Rockchip eFuse Support"
|
|
depends on ARCH_ROCKCHIP || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
help
|
|
This is a simple driver to dump specified values of Rockchip SoC
|
|
from eFuse, such as cpu-leakage.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem_rockchip_efuse.
|
|
|
|
config NVMEM_ROCKCHIP_OTP
|
|
tristate "Rockchip OTP controller support"
|
|
depends on ARCH_ROCKCHIP || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
help
|
|
This is a simple driver to dump specified values of Rockchip SoC
|
|
from OTP, such as cpu-leakage.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem_rockchip_otp.
|
|
|
|
config NVMEM_SC27XX_EFUSE
|
|
tristate "Spreadtrum SC27XX eFuse Support"
|
|
depends on MFD_SC27XX_PMIC || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
help
|
|
This is a simple driver to dump specified values of Spreadtrum
|
|
SC27XX PMICs from eFuse.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem-sc27xx-efuse.
|
|
|
|
config NVMEM_SNVS_LPGPR
|
|
tristate "Support for Low Power General Purpose Register"
|
|
depends on ARCH_MXC || COMPILE_TEST
|
|
help
|
|
This is a driver for Low Power General Purpose Register (LPGPR) available on
|
|
i.MX6 and i.MX7 SoCs in Secure Non-Volatile Storage (SNVS) of this chip.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem-snvs-lpgpr.
|
|
|
|
config NVMEM_SPMI_SDAM
|
|
tristate "SPMI SDAM Support"
|
|
depends on SPMI
|
|
help
|
|
This driver supports the Shared Direct Access Memory Module on
|
|
Qualcomm Technologies, Inc. PMICs. It provides the clients
|
|
an interface to read/write to the SDAM module's shared memory.
|
|
|
|
config NVMEM_SPRD_EFUSE
|
|
tristate "Spreadtrum SoC eFuse Support"
|
|
depends on ARCH_SPRD || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
help
|
|
This is a simple driver to dump specified values of Spreadtrum
|
|
SoCs from eFuse.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem-sprd-efuse.
|
|
|
|
config NVMEM_STM32_BSEC_OPTEE_TA
|
|
def_bool NVMEM_STM32_ROMEM && OPTEE
|
|
help
|
|
Say y here to enable the accesses to STM32MP SoC OTPs by the OP-TEE
|
|
trusted application STM32MP BSEC.
|
|
|
|
This library is a used by stm32-romem driver or included in the module
|
|
called nvmem-stm32-romem.
|
|
|
|
config NVMEM_STM32_ROMEM
|
|
tristate "STMicroelectronics STM32 factory-programmed memory support"
|
|
depends on ARCH_STM32 || COMPILE_TEST
|
|
depends on OPTEE || !OPTEE
|
|
help
|
|
Say y here to enable read-only access for STMicroelectronics STM32
|
|
factory-programmed memory area.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem-stm32-romem.
|
|
|
|
config NVMEM_SUNPLUS_OCOTP
|
|
tristate "Sunplus SoC OTP support"
|
|
depends on SOC_SP7021 || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
help
|
|
This is a driver for the On-chip OTP controller (OCOTP) available
|
|
on Sunplus SoCs. It provides access to 128 bytes of one-time
|
|
programmable eFuse.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem-sunplus-ocotp.
|
|
|
|
config NVMEM_SUNXI_SID
|
|
tristate "Allwinner SoCs SID support"
|
|
depends on ARCH_SUNXI
|
|
help
|
|
This is a driver for the 'security ID' available on various Allwinner
|
|
devices.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem_sunxi_sid.
|
|
|
|
config NVMEM_U_BOOT_ENV
|
|
tristate "U-Boot environment variables support"
|
|
depends on OF && MTD
|
|
select CRC32
|
|
select GENERIC_NET_UTILS
|
|
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.
|
|
|
|
Currently this drivers works only with env variables on top of MTD.
|
|
|
|
If compiled as module it will be called nvmem_u-boot-env.
|
|
|
|
config NVMEM_UNIPHIER_EFUSE
|
|
tristate "UniPhier SoCs eFuse support"
|
|
depends on ARCH_UNIPHIER || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
help
|
|
This is a simple driver to dump specified values of UniPhier SoC
|
|
from eFuse.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem-uniphier-efuse.
|
|
|
|
config NVMEM_VF610_OCOTP
|
|
tristate "VF610 SoC OCOTP support"
|
|
depends on SOC_VF610 || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
help
|
|
This is a driver for the 'OCOTP' peripheral available on Vybrid
|
|
devices like VF5xx and VF6xx.
|
|
|
|
This driver can also be build as a module. If so, the module will
|
|
be called nvmem-vf610-ocotp.
|
|
|
|
config NVMEM_ZYNQMP
|
|
tristate "Xilinx ZYNQMP SoC nvmem firmware support"
|
|
depends on ARCH_ZYNQMP
|
|
help
|
|
This is a driver to access hardware related data like
|
|
soc revision, IDCODE... etc by using the firmware
|
|
interface.
|
|
|
|
If sure, say yes. If unsure, say no.
|
|
|
|
config NVMEM_QORIQ_EFUSE
|
|
tristate "NXP QorIQ eFuse support"
|
|
depends on PPC_85xx || COMPILE_TEST
|
|
depends on HAS_IOMEM
|
|
help
|
|
This driver provides read support for the eFuses (SFP) on NXP QorIQ
|
|
series SoC's. This includes secure boot settings, the globally unique
|
|
NXP ID 'FUIDR' and the OEM unique ID 'OUIDR'.
|
|
|
|
This driver can also be built as a module. If so, the module
|
|
will be called nvmem_qoriq_efuse.
|
|
|
|
endif
|