# SPDX-License-Identifier: GPL-2.0-only
menu "Self-contained MTD device drivers"
	depends on MTD!=n
	depends on HAS_IOMEM

config MTD_PMC551
	tristate "Ramix PMC551 PCI Mezzanine RAM card support"
	depends on PCI
	help
	  This provides a MTD device driver for the Ramix PMC551 RAM PCI card
	  from Ramix Inc. <http://www.ramix.com/products/memory/pmc551.html>.
	  These devices come in memory configurations from 32M - 1G.  If you
	  have one, you probably want to enable this.

	  If this driver is compiled as a module you get the ability to select
	  the size of the aperture window pointing into the devices memory.
	  What this means is that if you have a 1G card, normally the kernel
	  will use a 1G memory map as its view of the device.  As a module,
	  you can select a 1M window into the memory and the driver will
	  "slide" the window around the PMC551's memory.  This was
	  particularly useful on the 2.2 kernels on PPC architectures as there
	  was limited kernel space to deal with.

config MTD_PMC551_BUGFIX
	bool "PMC551 256M DRAM Bugfix"
	depends on MTD_PMC551
	help
	  Some of Ramix's PMC551 boards with 256M configurations have invalid
	  column and row mux values.  This option will fix them, but will
	  break other memory configurations.  If unsure say N.

config MTD_PMC551_DEBUG
	bool "PMC551 Debugging"
	depends on MTD_PMC551
	help
	  This option makes the PMC551 more verbose during its operation and
	  is only really useful if you are developing on this driver or
	  suspect a possible hardware or driver bug.  If unsure say N.

config MTD_MS02NV
	tristate "DEC MS02-NV NVRAM module support"
	depends on MACH_DECSTATION
	help
	  This is an MTD driver for the DEC's MS02-NV (54-20948-01) battery
	  backed-up NVRAM module.  The module was originally meant as an NFS
	  accelerator.  Say Y here if you have a DECstation 5000/2x0 or a
	  DECsystem 5900 equipped with such a module.

	  If you want to compile this driver as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you want),
	  say M here and read <file:Documentation/kbuild/modules.rst>.
	  The module will be called ms02-nv.

config MTD_DATAFLASH
	tristate "Support for AT45xxx DataFlash"
	depends on SPI_MASTER
	help
	  This enables access to AT45xxx DataFlash chips, using SPI.
	  Sometimes DataFlash chips are packaged inside MMC-format
	  cards; at this writing, the MMC stack won't handle those.

config MTD_DATAFLASH_WRITE_VERIFY
	bool "Verify DataFlash page writes"
	depends on MTD_DATAFLASH
	help
	  This adds an extra check when data is written to the flash.
	  It may help if you are verifying chip setup (timings etc) on
	  your board.  There is a rare possibility that even though the
	  device thinks the write was successful, a bit could have been
	  flipped accidentally due to device wear or something else.

config MTD_DATAFLASH_OTP
	bool "DataFlash OTP support (Security Register)"
	depends on MTD_DATAFLASH
	help
	  Newer DataFlash chips (revisions C and D) support 128 bytes of
	  one-time-programmable (OTP) data.  The first half may be written
	  (once) with up to 64 bytes of data, such as a serial number or
	  other key product data.  The second half is programmed with a
	  unique-to-each-chip bit pattern at the factory.

config MTD_MCHP23K256
	tristate "Microchip 23K256 SRAM"
	depends on SPI_MASTER
	help
	  This enables access to Microchip 23K256 SRAM chips, using SPI.

	  Set up your spi devices with the right board-specific
	  platform data, or a device tree description if you want to
	  specify device partitioning

config MTD_MCHP48L640
	tristate "Microchip 48L640 EERAM"
	depends on SPI_MASTER
	help
	  This enables access to Microchip 48L640 EERAM chips, using SPI.

config MTD_SPEAR_SMI
	tristate "SPEAR MTD NOR Support through SMI controller"
	depends on PLAT_SPEAR || COMPILE_TEST
	default y
	help
	  This enable SNOR support on SPEAR platforms using SMI controller

config MTD_SST25L
	tristate "Support SST25L (non JEDEC) SPI Flash chips"
	depends on SPI_MASTER
	help
	  This enables access to the non JEDEC SST25L SPI flash chips, used
	  for program and data storage.

	  Set up your spi devices with the right board-specific platform data,
	  if you want to specify device partitioning.

config MTD_BCM47XXSFLASH
	tristate "Support for serial flash on BCMA bus"
	depends on BCMA_SFLASH && (MIPS || ARM)
	help
	  BCMA bus can have various flash memories attached, they are
	  registered by bcma as platform devices. This enables driver for
	  serial flash memories.

config MTD_SLRAM
	tristate "Uncached system RAM"
	help
	  If your CPU cannot cache all of the physical memory in your machine,
	  you can still use it for storage or swap by using this driver to
	  present it to the system as a Memory Technology Device.

config MTD_PHRAM
	tristate "Physical system RAM"
	help
	  This is a re-implementation of the slram driver above.

	  Use this driver to access physical memory that the kernel proper
	  doesn't have access to, memory beyond the mem=xxx limit, nvram,
	  memory on the video card, etc...

config MTD_LART
	tristate "28F160xx flash driver for LART"
	depends on SA1100_LART
	help
	  This enables the flash driver for LART. Please note that you do
	  not need any mapping/chip driver for LART. This one does it all
	  for you, so go disable all of those if you enabled some of them (:

config MTD_MTDRAM
	tristate "Test driver using RAM"
	help
	  This enables a test MTD device driver which uses vmalloc() to
	  provide storage.  You probably want to say 'N' unless you're
	  testing stuff.

config MTDRAM_TOTAL_SIZE
	int "MTDRAM device size in KiB"
	depends on MTD_MTDRAM
	default "4096"
	help
	  This allows you to configure the total size of the MTD device
	  emulated by the MTDRAM driver.  If the MTDRAM driver is built
	  as a module, it is also possible to specify this as a parameter when
	  loading the module.

config MTDRAM_ERASE_SIZE
	int "MTDRAM erase block size in KiB"
	depends on MTD_MTDRAM
	default "128"
	help
	  This allows you to configure the size of the erase blocks in the
	  device emulated by the MTDRAM driver.  If the MTDRAM driver is built
	  as a module, it is also possible to specify this as a parameter when
	  loading the module.

config MTD_BLOCK2MTD
	tristate "MTD using block device"
	depends on BLOCK
	help
	  This driver allows a block device to appear as an MTD. It would
	  generally be used in the following cases:

	  Using Compact Flash as an MTD, these usually present themselves to
	  the system as an ATA drive.
	  Testing MTD users (eg JFFS2) on large media and media that might
	  be removed during a write (using the floppy drive).

config MTD_POWERNV_FLASH
	tristate "powernv flash MTD driver"
	depends on PPC_POWERNV
	help
	  This provides an MTD device to access flash on powernv OPAL
	  platforms from Linux. This device abstracts away the
	  firmware interface for flash access.

comment "Disk-On-Chip Device Drivers"

config MTD_DOCG3
	tristate "M-Systems Disk-On-Chip G3"
	select BCH
	select BCH_CONST_PARAMS if !MTD_NAND_ECC_SW_BCH
	select BITREVERSE
	help
	  This provides an MTD device driver for the M-Systems DiskOnChip
	  G3 devices.

	  The driver provides access to G3 DiskOnChip, distributed by
	  M-Systems and now Sandisk. The support is very experimental,
	  and doesn't give access to any write operations.

config MTD_ST_SPI_FSM
	tristate "ST Microelectronics SPI FSM Serial Flash Controller"
	depends on ARCH_STI
	help
	  This provides an MTD device driver for the ST Microelectronics
	  SPI Fast Sequence Mode (FSM) Serial Flash Controller and support
	  for a subset of connected Serial Flash devices.

if MTD_DOCG3
config BCH_CONST_M
	default 14
config BCH_CONST_T
	default 4
endif

endmenu
