menuconfig MTD
	tristate "Memory Technology Device (MTD) support"
	depends on GENERIC_IO
	help
	  Memory Technology Devices are flash, RAM and similar chips, often
	  used for solid state file systems on embedded devices. This option
	  will provide the generic support for MTD drivers to register
	  themselves with the kernel and for potential users of MTD devices
	  to enumerate the devices which are present and obtain a handle on
	  them. It will also allow you to select individual drivers for
	  particular hardware and users of MTD devices. If unsure, say N.

if MTD

config MTD_TESTS
	tristate "MTD tests support (DANGEROUS)"
	depends on m
	help
	  This option includes various MTD tests into compilation. The tests
	  should normally be compiled as kernel modules. The modules perform
	  various checks and verifications when loaded.

	  WARNING: some of the tests will ERASE entire MTD device which they
	  test. Do not use these tests unless you really know what you do.

config MTD_REDBOOT_PARTS
	tristate "RedBoot partition table parsing"
	---help---
	  RedBoot is a ROM monitor and bootloader which deals with multiple
	  'images' in flash devices by putting a table one of the erase
	  blocks on the device, similar to a partition table, which gives
	  the offsets, lengths and names of all the images stored in the
	  flash.

	  If you need code which can detect and parse this table, and register
	  MTD 'partitions' corresponding to each image in the table, enable
	  this option.

	  You will still need the parsing functions to be called by the driver
	  for your particular device. It won't happen automatically. The
	  SA1100 map driver (CONFIG_MTD_SA1100) has an option for this, for
	  example.

if MTD_REDBOOT_PARTS

config MTD_REDBOOT_DIRECTORY_BLOCK
	int "Location of RedBoot partition table"
	default "-1"
	---help---
	  This option is the Linux counterpart to the
	  CYGNUM_REDBOOT_FIS_DIRECTORY_BLOCK RedBoot compile time
	  option.

	  The option specifies which Flash sectors holds the RedBoot
	  partition table.  A zero or positive value gives an absolute
	  erase block number. A negative value specifies a number of
	  sectors before the end of the device.

	  For example "2" means block number 2, "-1" means the last
	  block and "-2" means the penultimate block.

config MTD_REDBOOT_PARTS_UNALLOCATED
	bool "Include unallocated flash regions"
	help
	  If you need to register each unallocated flash region as a MTD
	  'partition', enable this option.

config MTD_REDBOOT_PARTS_READONLY
	bool "Force read-only for RedBoot system images"
	help
	  If you need to force read-only for 'RedBoot', 'RedBoot Config' and
	  'FIS directory' images, enable this option.

endif # MTD_REDBOOT_PARTS

config MTD_CMDLINE_PARTS
	tristate "Command line partition table parsing"
	depends on MTD
	---help---
	  Allow generic configuration of the MTD partition tables via the kernel
	  command line. Multiple flash resources are supported for hardware where
	  different kinds of flash memory are available.

	  You will still need the parsing functions to be called by the driver
	  for your particular device. It won't happen automatically. The
	  SA1100 map driver (CONFIG_MTD_SA1100) has an option for this, for
	  example.

	  The format for the command line is as follows:

	  mtdparts=<mtddef>[;<mtddef]
	  <mtddef>  := <mtd-id>:<partdef>[,<partdef>]
	  <partdef> := <size>[@offset][<name>][ro]
	  <mtd-id>  := unique id used in mapping driver/device
	  <size>    := standard linux memsize OR "-" to denote all
	  remaining space
	  <name>    := (NAME)

	  Due to the way Linux handles the command line, no spaces are
	  allowed in the partition definition, including mtd id's and partition
	  names.

	  Examples:

	  1 flash resource (mtd-id "sa1100"), with 1 single writable partition:
	  mtdparts=sa1100:-

	  Same flash, but 2 named partitions, the first one being read-only:
	  mtdparts=sa1100:256k(ARMboot)ro,-(root)

	  If unsure, say 'N'.

config MTD_AFS_PARTS
	tristate "ARM Firmware Suite partition parsing"
	depends on (ARM || ARM64)
	---help---
	  The ARM Firmware Suite allows the user to divide flash devices into
	  multiple 'images'. Each such image has a header containing its name
	  and offset/size etc.

	  If you need code which can detect and parse these tables, and
	  register MTD 'partitions' corresponding to each image detected,
	  enable this option.

	  You will still need the parsing functions to be called by the driver
	  for your particular device. It won't happen automatically. The
	  'physmap' map driver (CONFIG_MTD_PHYSMAP) does this, for example.

config MTD_OF_PARTS
	tristate "OpenFirmware partitioning information support"
	default y
	depends on OF
	help
	  This provides a partition parsing function which derives
	  the partition map from the children of the flash node,
	  as described in Documentation/devicetree/bindings/mtd/partition.txt.

config MTD_AR7_PARTS
	tristate "TI AR7 partitioning support"
	---help---
	  TI AR7 partitioning support

config MTD_BCM63XX_PARTS
	tristate "BCM63XX CFE partitioning support"
	depends on BCM63XX || BMIPS_GENERIC || COMPILE_TEST
	select CRC32
	help
	  This provides partions parsing for BCM63xx devices with CFE
	  bootloaders.

config MTD_BCM47XX_PARTS
	tristate "BCM47XX partitioning support"
	depends on BCM47XX || ARCH_BCM_5301X
	help
	  This provides partitions parser for devices based on BCM47xx
	  boards.

menu "Partition parsers"
source "drivers/mtd/parsers/Kconfig"
endmenu

comment "User Modules And Translation Layers"

#
# MTD block device support is select'ed if needed
#
config MTD_BLKDEVS
	tristate

config MTD_BLOCK
	tristate "Caching block device access to MTD devices"
	depends on BLOCK
	select MTD_BLKDEVS
	---help---
	  Although most flash chips have an erase size too large to be useful
	  as block devices, it is possible to use MTD devices which are based
	  on RAM chips in this manner. This block device is a user of MTD
	  devices performing that function.

	  At the moment, it is also required for the Journalling Flash File
	  System(s) to obtain a handle on the MTD device when it's mounted
	  (although JFFS and JFFS2 don't actually use any of the functionality
	  of the mtdblock device).

	  Later, it may be extended to perform read/erase/modify/write cycles
	  on flash chips to emulate a smaller block size. Needless to say,
	  this is very unsafe, but could be useful for file systems which are
	  almost never written to.

	  You do not need this option for use with the DiskOnChip devices. For
	  those, enable NFTL support (CONFIG_NFTL) instead.

config MTD_BLOCK_RO
	tristate "Readonly block device access to MTD devices"
	depends on MTD_BLOCK!=y && BLOCK
	select MTD_BLKDEVS
	help
	  This allows you to mount read-only file systems (such as cramfs)
	  from an MTD device, without the overhead (and danger) of the caching
	  driver.

	  You do not need this option for use with the DiskOnChip devices. For
	  those, enable NFTL support (CONFIG_NFTL) instead.

config FTL
	tristate "FTL (Flash Translation Layer) support"
	depends on BLOCK
	select MTD_BLKDEVS
	---help---
	  This provides support for the original Flash Translation Layer which
	  is part of the PCMCIA specification. It uses a kind of pseudo-
	  file system on a flash device to emulate a block device with
	  512-byte sectors, on top of which you put a 'normal' file system.

	  You may find that the algorithms used in this code are patented
	  unless you live in the Free World where software patents aren't
	  legal - in the USA you are only permitted to use this on PCMCIA
	  hardware, although under the terms of the GPL you're obviously
	  permitted to copy, modify and distribute the code as you wish. Just
	  not use it.

config NFTL
	tristate "NFTL (NAND Flash Translation Layer) support"
	depends on BLOCK
	select MTD_BLKDEVS
	---help---
	  This provides support for the NAND Flash Translation Layer which is
	  used on M-Systems' DiskOnChip devices. It uses a kind of pseudo-
	  file system on a flash device to emulate a block device with
	  512-byte sectors, on top of which you put a 'normal' file system.

	  You may find that the algorithms used in this code are patented
	  unless you live in the Free World where software patents aren't
	  legal - in the USA you are only permitted to use this on DiskOnChip
	  hardware, although under the terms of the GPL you're obviously
	  permitted to copy, modify and distribute the code as you wish. Just
	  not use it.

config NFTL_RW
	bool "Write support for NFTL"
	depends on NFTL
	help
	  Support for writing to the NAND Flash Translation Layer, as used
	  on the DiskOnChip.

config INFTL
	tristate "INFTL (Inverse NAND Flash Translation Layer) support"
	depends on BLOCK
	select MTD_BLKDEVS
	---help---
	  This provides support for the Inverse NAND Flash Translation
	  Layer which is used on M-Systems' newer DiskOnChip devices. It
	  uses a kind of pseudo-file system on a flash device to emulate
	  a block device with 512-byte sectors, on top of which you put
	  a 'normal' file system.

	  You may find that the algorithms used in this code are patented
	  unless you live in the Free World where software patents aren't
	  legal - in the USA you are only permitted to use this on DiskOnChip
	  hardware, although under the terms of the GPL you're obviously
	  permitted to copy, modify and distribute the code as you wish. Just
	  not use it.

config RFD_FTL
        tristate "Resident Flash Disk (Flash Translation Layer) support"
	depends on BLOCK
	select MTD_BLKDEVS
	---help---
	  This provides support for the flash translation layer known
	  as the Resident Flash Disk (RFD), as used by the Embedded BIOS
	  of General Software. There is a blurb at:

		http://www.gensw.com/pages/prod/bios/rfd.htm

config SSFDC
	tristate "NAND SSFDC (SmartMedia) read only translation layer"
	depends on BLOCK
	select MTD_BLKDEVS
	help
	  This enables read only access to SmartMedia formatted NAND
	  flash. You can mount it with FAT file system.


config SM_FTL
	tristate "SmartMedia/xD new translation layer"
	depends on BLOCK
	select MTD_BLKDEVS
	select MTD_NAND_ECC
	help
	  This enables EXPERIMENTAL R/W support for SmartMedia/xD
	  FTL (Flash translation layer).
	  Write support is only lightly tested, therefore this driver
	  isn't recommended to use with valuable data (anyway if you have
	  valuable data, do backups regardless of software/hardware you
	  use, because you never know what will eat your data...)
	  If you only need R/O access, you can use older R/O driver
	  (CONFIG_SSFDC)

config MTD_OOPS
	tristate "Log panic/oops to an MTD buffer"
	help
	  This enables panic and oops messages to be logged to a circular
	  buffer in a flash partition where it can be read back at some
	  later point.

config MTD_SWAP
	tristate "Swap on MTD device support"
	depends on MTD && SWAP
	select MTD_BLKDEVS
	help
	  Provides volatile block device driver on top of mtd partition
          suitable for swapping.  The mapping of written blocks is not saved.
	  The driver provides wear leveling by storing erase counter into the
	  OOB.

config MTD_PARTITIONED_MASTER
	bool "Retain master device when partitioned"
	default n
	depends on MTD
	help
	  For historical reasons, by default, either a master is present or
	  several partitions are present, but not both. The concern was that
	  data listed in multiple partitions was dangerous; however, SCSI does
	  this and it is frequently useful for applications. This config option
	  leaves the master in even if the device is partitioned. It also makes
	  the parent of the partition device be the master device, rather than
	  what lies behind the master.

source "drivers/mtd/chips/Kconfig"

source "drivers/mtd/maps/Kconfig"

source "drivers/mtd/devices/Kconfig"

source "drivers/mtd/nand/Kconfig"

source "drivers/mtd/onenand/Kconfig"

source "drivers/mtd/lpddr/Kconfig"

source "drivers/mtd/spi-nor/Kconfig"

source "drivers/mtd/ubi/Kconfig"

endif # MTD
