# 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

if NVMEM_SYSFS

config EEPROM_AT24
	tristate "I2C EEPROMs / RAMs / ROMs from most vendors"
	depends on I2C && SYSFS
	select REGMAP
	select REGMAP_I2C
	help
	  Enable this driver to get read/write support to most I2C EEPROMs
	  and compatible devices like FRAMs, SRAMs, ROMs etc. After you
	  configure the driver to know about each chip on your target
	  board.  Use these generic chip names, instead of vendor-specific
	  ones like at24c64, 24lc02 or fm24c04:

	     24c00, 24c01, 24c02, spd (readonly 24c02), 24c04, 24c08,
	     24c16, 24c32, 24c64, 24c128, 24c256, 24c512, 24c1024, 24c2048

	  Unless you like data loss puzzles, always be sure that any chip
	  you configure as a 24c32 (32 kbit) or larger is NOT really a
	  24c16 (16 kbit) or smaller, and vice versa. Marking the chip
	  as read-only won't help recover from this. Also, if your chip
	  has any software write-protect mechanism you may want to review the
	  code to make sure this driver won't turn it on by accident.

	  If you use this with an SMBus adapter instead of an I2C adapter,
	  full functionality is not available.  Only smaller devices are
	  supported (24c16 and below, max 4 kByte).

	  This driver can also be built as a module.  If so, the module
	  will be called at24.

config EEPROM_AT25
	tristate "SPI EEPROMs (FRAMs) from most vendors"
	depends on SPI && SYSFS
	select SPI_MEM
	help
	  Enable this driver to get read/write support to most SPI EEPROMs
	  and Cypress FRAMs,
	  after you configure the board init code to know about each eeprom
	  on your target board.

	  This driver can also be built as a module.  If so, the module
	  will be called at25.

config EEPROM_93XX46
	tristate "Microwire EEPROM 93XX46 support"
	depends on SPI && SYSFS
	select REGMAP
	help
	  Driver for the microwire EEPROM chipsets 93xx46x. The driver
	  supports both read and write commands and also the command to
	  erase the whole EEPROM.

	  This driver can also be built as a module.  If so, the module
	  will be called eeprom_93xx46.

	  If unsure, say N.

config EEPROM_EE1004
	tristate "SPD EEPROMs on DDR4 memory modules"
	depends on I2C && SYSFS
	help
	  Enable this driver to get read support to SPD EEPROMs following
	  the JEDEC EE1004 standard. These are typically found on DDR4
	  SDRAM memory modules.

	  This driver can also be built as a module.  If so, the module
	  will be called ee1004.

config EEPROM_M24LR
	tristate "STMicroelectronics M24LR RFID/NFC EEPROM support"
	depends on I2C && SYSFS
	select REGMAP_I2C
	help
	  This enables support for STMicroelectronics M24LR RFID/NFC EEPROM
	  chips. These dual-interface devices expose two I2C addresses:
	  one for EEPROM memory access and another for control and system
	  configuration (e.g. UID, password handling).

	  This driver provides a sysfs interface for control functions and
	  integrates with the nvmem subsystem for EEPROM access.

	  To compile this driver as a module, choose M here: the
	  module will be called m24lr.

endif # NVMEM_SYSFS

config NVMEM_AIROHA_SMC_EFUSES
	tristate "Airoha SMC eFuse support"
	depends on ARM64
	depends on ARCH_AIROHA || COMPILE_TEST
	depends on HAVE_ARM_SMCCC
	default ARCH_AIROHA
	help
	  Say y here to enable support for reading eFuses on Airoha AN7581
	  SoCs. These are e.g. used to store factory programmed
	  calibration data required for the PCIe or the USB-C PHY or Thermal.

	  This driver can also be built as a module. If so, the module will
	  be called nvmem-airoha-smc-efuses.

config NVMEM_AN8855_EFUSE
	tristate "Airoha AN8855 eFuse support"
	depends on COMPILE_TEST
	help
	  Say y here to enable support for reading eFuses on Airoha AN8855
	  Switch. These are e.g. used to store factory programmed
	  calibration data required for the PHY.

	  This driver can also be built as a module. If so, the module will
	  be called nvmem-an8855-efuse.

config NVMEM_APPLE_EFUSES
	tristate "Apple eFuse support"
	depends on ARCH_APPLE || COMPILE_TEST
	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_APPLE_SPMI
	tristate "Apple SPMI NVMEM"
	depends on ARCH_APPLE || COMPILE_TEST
	depends on SPMI
	select REGMAP_SPMI
	help
	  Say y here to build a driver to expose NVMEM cells for a set of power
	  and RTC-related settings on a SPMI-attached PMIC present on Apple
	  devices, such as Apple Silicon Macs.

	  This driver can also be built as a module. If so, the module
	  will be called apple-nvmem-spmi.

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 || ARCH_LAN969X || 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_MAX77759
	tristate "Maxim Integrated MAX77759 NVMEM Support"
	depends on MFD_MAX77759
	default MFD_MAX77759
	help
	  Say Y here to include support for the user-accessible storage found
	  in Maxim Integrated MAX77759 PMICs. This IC provides space for 30
	  bytes of storage.

	  This driver can also be built as a module. If so, the module
	  will be called nvmem-max77759.

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_S32G_OCOTP
	tristate "S32G SoC OCOTP support"
	depends on ARCH_S32
	help
	  This is a driver for the 'OCOTP' peripheral available on S32G
	  platforms.

	  If you say Y here, you will get support for the One Time
	  Programmable memory pages.

config NVMEM_QCOM_QFPROM
	tristate "Qualcomm 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 "Qualcomm 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_QNAP_MCU_EEPROM
	tristate "QNAP MCU EEPROM Support"
	depends on MFD_QNAP_MCU
	help
	  Say y here to enable support for accessing the EEPROM attached to
	  QNAP MCU devices. This EEPROM contains additional runtime device
	  information, like MAC addresses for ethernet devices that do not
	  contain their own mac storage.

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_RCAR_EFUSE
	tristate "Renesas R-Car Gen4 E-FUSE support"
	depends on (ARCH_RENESAS && ARM64) || COMPILE_TEST
	help
	  Enable support for reading the fuses in the E-FUSE or OTP
	  non-volatile memory block on Renesas R-Car Gen4 SoCs.

	  This driver can also be built as a module. If so, the module
	  will be called nvmem-rcar-efuse.

config NVMEM_RMEM
	tristate "Reserved Memory Based Driver Support"
	depends on HAS_IOMEM
	select CRC32
	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 NVMEM_LAYOUT_U_BOOT_ENV
	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 # NVMEM
