# 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_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 || 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_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_RCAR_EFUSE
	tristate "Renesas R-Car Gen4 E-FUSE support"
	depends on (ARCH_RENESAS && ARM64) || COMPILE_TEST
	depends on NVMEM
	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
