# SPDX-License-Identifier: GPL-2.0-only
menu "Mapping drivers for chip access"
	depends on MTD!=n
	depends on HAS_IOMEM

config MTD_COMPLEX_MAPPINGS
	bool "Support non-linear mappings of flash chips"
	help
	  This causes the chip drivers to allow for complicated
	  paged mappings of flash chips.

config MTD_PHYSMAP
	tristate "Flash device in physical memory map"
	depends on MTD_CFI || MTD_JEDECPROBE || MTD_ROM || MTD_RAM || MTD_LPDDR
	help
	  This provides a 'mapping' driver which allows the NOR Flash and
	  ROM driver code to communicate with chips which are mapped
	  physically into the CPU's memory. You will need to configure
	  the physical address and size of the flash chips on your
	  particular board as well as the bus width, either statically
	  with config options or at run-time.

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

config MTD_PHYSMAP_COMPAT
	bool "Physmap compat support"
	depends on MTD_PHYSMAP
	default n
	help
	  Setup a simple mapping via the Kconfig options.  Normally the
	  physmap configuration options are done via your board's
	  resource file.

	  If unsure, say N here.

config MTD_PHYSMAP_START
	hex "Physical start address of flash mapping"
	depends on MTD_PHYSMAP_COMPAT
	default "0x8000000"
	help
	  This is the physical memory location at which the flash chips
	  are mapped on your particular target board. Refer to the
	  memory map which should hopefully be in the documentation for
	  your board.

config MTD_PHYSMAP_LEN
	hex "Physical length of flash mapping"
	depends on MTD_PHYSMAP_COMPAT
	default "0"
	help
	  This is the total length of the mapping of the flash chips on
	  your particular board. If there is space, or aliases, in the
	  physical memory map between the chips, this could be larger
	  than the total amount of flash present. Refer to the memory
	  map which should hopefully be in the documentation for your
	  board.

config MTD_PHYSMAP_BANKWIDTH
	int "Bank width in octets"
	depends on MTD_PHYSMAP_COMPAT
	default "2"
	help
	  This is the total width of the data bus of the flash devices
	  in octets. For example, if you have a data bus width of 32
	  bits, you would set the bus width octet value to 4. This is
	  used internally by the CFI drivers.

config MTD_PHYSMAP_OF
	bool "Memory device in physical memory map based on OF description"
	depends on OF && MTD_PHYSMAP
	help
	  This provides a 'mapping' driver which allows the NOR Flash, ROM
	  and RAM driver code to communicate with chips which are mapped
	  physically into the CPU's memory. The mapping description here is
	  taken from OF device tree.

config MTD_PHYSMAP_VERSATILE
	bool "ARM Versatile OF-based physical memory map handling"
	depends on MTD_PHYSMAP_OF
	depends on MFD_SYSCON
	default y if (ARCH_INTEGRATOR || ARCH_VERSATILE || ARCH_REALVIEW)
	help
	  This provides some extra DT physmap parsing for the ARM Versatile
	  platforms, basically to add a VPP (write protection) callback so
	  the flash can be taken out of write protection.

config MTD_PHYSMAP_GEMINI
	bool "Cortina Gemini OF-based physical memory map handling"
	depends on MTD_PHYSMAP_OF
	depends on MFD_SYSCON
	select MTD_COMPLEX_MAPPINGS
	default ARCH_GEMINI
	help
	  This provides some extra DT physmap parsing for the Gemini
	  platforms, some detection and setting up parallel mode on the
	  external interface.

config MTD_PHYSMAP_IXP4XX
	bool "Intel IXP4xx OF-based physical memory map handling"
	depends on MTD_PHYSMAP_OF
	depends on ARM
	select MTD_COMPLEX_MAPPINGS
	select MTD_CFI_BE_BYTE_SWAP if CPU_BIG_ENDIAN
	default ARCH_IXP4XX
	help
	  This provides some extra DT physmap parsing for the Intel IXP4xx
	  platforms, some elaborate endianness handling in particular.

config MTD_PHYSMAP_GPIO_ADDR
	bool "GPIO-assisted Flash Chip Support"
	depends on MTD_PHYSMAP
	depends on GPIOLIB || COMPILE_TEST
	depends on MTD_COMPLEX_MAPPINGS
	help
	  Extend the physmap driver to allow flashes to be partially
	  physically addressed and assisted by GPIOs.

config MTD_PMC_MSP_EVM
	tristate "CFI Flash device mapped on PMC-Sierra MSP"
	depends on PMC_MSP && MTD_CFI
	help
	  This provides a 'mapping' driver which supports the way
	  in which user-programmable flash chips are connected on the
	  PMC-Sierra MSP eval/demo boards.

choice
	prompt "Maximum mappable memory available for flash IO"
	depends on MTD_PMC_MSP_EVM
	default MSP_FLASH_MAP_LIMIT_32M

config MSP_FLASH_MAP_LIMIT_32M
	bool "32M"

endchoice

config MSP_FLASH_MAP_LIMIT
	hex
	default "0x02000000"
	depends on MSP_FLASH_MAP_LIMIT_32M

config MTD_SUN_UFLASH
	tristate "Sun Microsystems userflash support"
	depends on SPARC && MTD_CFI && PCI
	help
	  This provides a 'mapping' driver which supports the way in
	  which user-programmable flash chips are connected on various
	  Sun Microsystems boardsets.  This driver will require CFI support
	  in the kernel, so if you did not enable CFI previously, do that now.

config MTD_SC520CDP
	tristate "CFI Flash device mapped on AMD SC520 CDP"
	depends on (MELAN || COMPILE_TEST) && MTD_CFI
	help
	  The SC520 CDP board has two banks of CFI-compliant chips and one
	  Dual-in-line JEDEC chip. This 'mapping' driver supports that
	  arrangement, implementing three MTD devices.

config MTD_NETSC520
	tristate "CFI Flash device mapped on AMD NetSc520"
	depends on (MELAN || COMPILE_TEST) && MTD_CFI
	help
	  This enables access routines for the flash chips on the AMD NetSc520
	  demonstration board. If you have one of these boards and would like
	  to use the flash chips on it, say 'Y'.

config MTD_TS5500
	tristate "JEDEC Flash device mapped on Technologic Systems TS-5500"
	depends on TS5500 || COMPILE_TEST
	select MTD_JEDECPROBE
	select MTD_CFI_AMDSTD
	help
	  This provides a driver for the on-board flash of the Technologic
	  System's TS-5500 board. The 2MB flash is split into 3 partitions
	  which are accessed as separate MTD devices.

	  mtd0 and mtd2 are the two BIOS drives, which use the resident
	  flash disk (RFD) flash translation layer.

	  mtd1 allows you to reprogram your BIOS. BE VERY CAREFUL.

	  Note that jumper 3 ("Write Enable Drive A") must be set
	  otherwise detection won't succeed.

config MTD_SBC_GXX
	tristate "CFI Flash device mapped on Arcom SBC-GXx boards"
	depends on X86 && MTD_CFI_INTELEXT && MTD_COMPLEX_MAPPINGS
	help
	  This provides a driver for the on-board flash of Arcom Control
	  Systems' SBC-GXn family of boards, formerly known as SBC-MediaGX.
	  By default the flash is split into 3 partitions which are accessed
	  as separate MTD devices. This board utilizes Intel StrataFlash.
	  More info at
	  <http://www.arcomcontrols.com/products/icp/pc104/processors/SBC_GX1.htm>.

config MTD_PXA2XX
	tristate "CFI Flash device mapped on Intel XScale PXA2xx based boards"
	depends on (PXA25x || PXA27x) && MTD_CFI_INTELEXT
	help
	  This provides a driver for the NOR flash attached to a PXA2xx chip.

config MTD_SCx200_DOCFLASH
	tristate "Flash device mapped with DOCCS on NatSemi SCx200"
	depends on SCx200 && MTD_CFI
	help
	  Enable support for a flash chip mapped using the DOCCS signal on a
	  National Semiconductor SCx200 processor.

	  If you don't know what to do here, say N.

	  If compiled as a module, it will be called scx200_docflash.

config MTD_AMD76XROM
	tristate "BIOS flash chip on AMD76x southbridge"
	depends on X86 && MTD_JEDECPROBE
	help
	  Support for treating the BIOS flash chip on AMD76x motherboards
	  as an MTD device - with this you can reprogram your BIOS.

	  BE VERY CAREFUL.

config MTD_ICHXROM
	tristate "BIOS flash chip on Intel Controller Hub 2/3/4/5"
	depends on X86 && MTD_JEDECPROBE
	help
	  Support for treating the BIOS flash chip on ICHX motherboards
	  as an MTD device - with this you can reprogram your BIOS.

	  BE VERY CAREFUL.

config MTD_ESB2ROM
	tristate "BIOS flash chip on Intel ESB Controller Hub 2"
	depends on X86 && MTD_JEDECPROBE && PCI
	help
	  Support for treating the BIOS flash chip on ESB2 motherboards
	  as an MTD device - with this you can reprogram your BIOS.

	  BE VERY CAREFUL.

config MTD_CK804XROM
	tristate "BIOS flash chip on Nvidia CK804"
	depends on X86 && MTD_JEDECPROBE && PCI
	help
	  Support for treating the BIOS flash chip on nvidia motherboards
	  as an MTD device - with this you can reprogram your BIOS.

	  BE VERY CAREFUL.

config MTD_SCB2_FLASH
	tristate "BIOS flash chip on Intel SCB2 boards"
	depends on X86 && MTD_JEDECPROBE && PCI
	help
	  Support for treating the BIOS flash chip on Intel SCB2 boards
	  as an MTD device - with this you can reprogram your BIOS.

	  BE VERY CAREFUL.

config MTD_TSUNAMI
	tristate "Flash chips on Tsunami TIG bus"
	depends on ALPHA_TSUNAMI && MTD_COMPLEX_MAPPINGS
	help
	  Support for the flash chip on Tsunami TIG bus.

config MTD_NETtel
	tristate "CFI flash device on SnapGear/SecureEdge"
	depends on X86 && MTD_JEDECPROBE
	help
	  Support for flash chips on NETtel/SecureEdge/SnapGear boards.

config MTD_LANTIQ
	tristate "Lantiq SoC NOR support"
	depends on LANTIQ
	help
	  Support for NOR flash attached to the Lantiq SoC's External Bus Unit.

config MTD_L440GX
	tristate "BIOS flash chip on Intel L440GX boards"
	depends on X86 && MTD_JEDECPROBE
	help
	  Support for treating the BIOS flash chip on Intel L440GX motherboards
	  as an MTD device - with this you can reprogram your BIOS.

	  BE VERY CAREFUL.

config MTD_CFI_FLAGADM
	tristate "CFI Flash device mapping on FlagaDM"
	depends on PPC_8xx && MTD_CFI
	help
	  Mapping for the Flaga digital module. If you don't have one, ignore
	  this setting.

config MTD_SOLUTIONENGINE
	tristate "CFI Flash device mapped on Hitachi SolutionEngine"
	depends on SOLUTION_ENGINE && MTD_CFI && MTD_REDBOOT_PARTS
	help
	  This enables access to the flash chips on the Hitachi SolutionEngine and
	  similar boards. Say 'Y' if you are building a kernel for such a board.

config MTD_SA1100
	tristate "CFI Flash device mapped on StrongARM SA11x0"
	depends on MTD_CFI && ARCH_SA1100
	help
	  This enables access to the flash chips on most platforms based on
	  the SA1100 and SA1110, including the Assabet and the Compaq iPAQ.
	  If you have such a board, say 'Y'.

config MTD_DC21285
	tristate "CFI Flash device mapped on DC21285 Footbridge"
	depends on MTD_CFI && ARCH_FOOTBRIDGE && MTD_COMPLEX_MAPPINGS
	help
	  This provides a driver for the flash accessed using Intel's
	  21285 bridge used with Intel's StrongARM processors. More info at
	  <https://www.intel.com/design/bridge/docs/21285_documentation.htm>.

config MTD_IXP4XX
	tristate "CFI Flash device mapped on Intel IXP4xx based systems"
	depends on MTD_CFI && MTD_COMPLEX_MAPPINGS && ARCH_IXP4XX
	help
	  This enables MTD access to flash devices on platforms based
	  on Intel's IXP4xx family of network processors such as the
	  IXDP425 and Coyote. If you have an IXP4xx based board and
	  would like to use the flash chips on it, say 'Y'.

config MTD_IMPA7
	tristate "JEDEC Flash device mapped on impA7"
	depends on ARM && MTD_JEDECPROBE
	help
	  This enables access to the NOR Flash on the impA7 board of
	  implementa GmbH. If you have such a board, say 'Y' here.

# This needs CFI or JEDEC, depending on the cards found.
config MTD_PCI
	tristate "PCI MTD driver"
	depends on PCI && MTD_COMPLEX_MAPPINGS
	help
	  Mapping for accessing flash devices on add-in cards like the Intel XScale
	  IQ80310 card, and the Intel EBSA285 card in blank ROM programming mode
	  (please see the manual for the link settings).

	  If you are not sure, say N.

config MTD_PCMCIA
	tristate "PCMCIA MTD driver"
	depends on PCMCIA && MTD_COMPLEX_MAPPINGS
	help
	  Map driver for accessing PCMCIA linear flash memory cards. These
	  cards are usually around 4-16MiB in size. This does not include
	  Compact Flash cards which are treated as IDE devices.

config MTD_PCMCIA_ANONYMOUS
	bool "Use PCMCIA MTD drivers for anonymous PCMCIA cards"
	depends on MTD_PCMCIA
	help
	  If this option is enabled, PCMCIA cards which do not report
	  anything about themselves are assumed to be MTD cards.

	  If unsure, say N.

config MTD_UCLINUX
	bool "Generic uClinux RAM/ROM filesystem support"
	depends on (MTD_RAM=y || MTD_ROM=y) && (!MMU || COLDFIRE)
	help
	  Map driver to support image based filesystems for uClinux.

config MTD_INTEL_VR_NOR
	tristate "NOR flash on Intel Vermilion Range Expansion Bus CS0"
	depends on PCI
	help
	  Map driver for a NOR flash bank located on the Expansion Bus of the
	  Intel Vermilion Range chipset.

config MTD_RBTX4939
	tristate "Map driver for RBTX4939 board"
	depends on TOSHIBA_RBTX4939 && MTD_CFI && MTD_COMPLEX_MAPPINGS
	help
	  Map driver for NOR flash chips on RBTX4939 board.

config MTD_PLATRAM
	tristate "Map driver for platform device RAM (mtd-ram)"
	select MTD_RAM
	help
	  Map driver for RAM areas described via the platform device
	  system.

	  This selection automatically selects the map_ram driver.

config MTD_VMU
	tristate "Map driver for Dreamcast VMU"
	depends on MAPLE
	help
	  This driver enables access to the Dreamcast Visual Memory Unit (VMU).

	  Most Dreamcast users will want to say Y here.

	  To build this as a module select M here, the module will be called
	  vmu-flash.

config MTD_PISMO
	tristate "MTD discovery driver for PISMO modules"
	depends on I2C
	depends on ARCH_VERSATILE
	help
	  This driver allows for discovery of PISMO modules - see
	  <http://www.pismoworld.org/>.  These are small modules containing
	  up to five memory devices (eg, SRAM, flash, DOC) described by an
	  I2C EEPROM.

	  This driver does not create any MTD maps itself; instead it
	  creates MTD physmap and MTD SRAM platform devices.  If you
	  enable this option, you should consider enabling MTD_PHYSMAP
	  and/or MTD_PLATRAM according to the devices on your module.

	  When built as a module, it will be called pismo.ko

endmenu
