menu "SPI Flash Support"

config DM_SPI_FLASH
	bool "Enable Driver Model for SPI flash"
	depends on DM && DM_SPI
	help
	  Enable driver model for SPI flash. This SPI flash interface
	  (spi_flash_probe(), spi_flash_write(), etc.) is then
	  implemented by the SPI flash uclass. There is one standard
	  SPI flash driver which knows how to probe most chips
	  supported by U-Boot. The uclass interface is defined in
	  include/spi_flash.h, but is currently fully compatible
	  with the old interface to avoid confusion and duplication
	  during the transition parent. SPI and SPI flash must be
	  enabled together (it is not possible to use driver model
	  for one and not the other).

config SPI_FLASH_SANDBOX
	bool "Support sandbox SPI flash device"
	depends on SANDBOX && DM_SPI_FLASH
	help
	  Since sandbox cannot access real devices, an emulation mechanism is
	  provided instead. Drivers can be connected up to the sandbox SPI
	  bus (see CONFIG_SANDBOX_SPI) and SPI traffic will be routed to this
	  device. Typically the contents of the emulated SPI flash device is
	  stored in a file on the host filesystem.

config SPI_FLASH
	bool "Legacy SPI Flash Interface support"
	help
	  Enable the legacy SPI flash support. This will include basic
	  standard support for things like probing, read / write, and
	  erasing through cmd_sf interface.

	  If unsure, say N

config SPI_FLASH_BAR
	bool "SPI flash Bank/Extended address register support"
	depends on SPI_FLASH
	help
	  Enable the SPI flash Bank/Extended address register support.
	  Bank/Extended address registers are used to access the flash
	  which has size > 16MiB in 3-byte addressing.

config SF_DUAL_FLASH
	bool "SPI DUAL flash memory support"
	depends on SPI_FLASH
	help
	  Enable this option to support two flash memories connected to a single
	  controller. Currently Xilinx Zynq qspi supports this.

if SPI_FLASH

config SPI_FLASH_ATMEL
	bool "Atmel SPI flash support"
	help
	  Add support for various Atmel SPI flash chips (AT45xxx and AT25xxx)

config SPI_FLASH_EON
	bool "EON SPI flash support"
	help
	  Add support for various EON SPI flash chips (EN25xxx)

config SPI_FLASH_GIGADEVICE
	bool "GigaDevice SPI flash support"
	help
	  Add support for various GigaDevice SPI flash chips (GD25xxx)

config SPI_FLASH_ISSI
	bool "ISSI SPI flash support"
	help
	  Add support for various ISSI SPI flash chips (ISxxx)

config SPI_FLASH_MACRONIX
	bool "Macronix SPI flash support"
	help
	  Add support for various Macronix SPI flash chips (MX25Lxxx)

config SPI_FLASH_SPANSION
	bool "Spansion SPI flash support"
	help
	  Add support for various Spansion SPI flash chips (S25FLxxx)

config SPI_FLASH_STMICRO
	bool "STMicro SPI flash support"
	help
	  Add support for various STMicro SPI flash chips (M25Pxxx and N25Qxxx)

config SPI_FLASH_SST
	bool "SST SPI flash support"
	help
	  Add support for various SST SPI flash chips (SST25xxx)

config SPI_FLASH_WINBOND
	bool "Winbond SPI flash support"
	help
	  Add support for various Winbond SPI flash chips (W25xxx)

config SPI_FLASH_XMC
	bool "XMC SPI flash support"
	help
	  Add support for various XMC (Wuhan Xinxin Semiconductor
	  Manufacturing Corp.) SPI flash chips (XM25xxx)

endif

config SPI_FLASH_USE_4K_SECTORS
	bool "Use small 4096 B erase sectors"
	depends on SPI_FLASH
	default y
	help
	  Many flash memories support erasing small (4096 B) sectors. Depending
	  on the usage this feature may provide performance gain in comparison
	  to erasing whole blocks (32/64 KiB).
	  Changing a small part of the flash's contents is usually faster with
	  small sectors. On the other hand erasing should be faster when using
	  64 KiB block instead of 16 × 4 KiB sectors.

	  Please note that some tools/drivers/filesystems may not work with
	  4096 B erase size (e.g. UBIFS requires 15 KiB as a minimum).

config SPI_FLASH_DATAFLASH
	bool "AT45xxx DataFlash support"
	depends on SPI_FLASH && DM_SPI_FLASH
	help
	  Enable the access for SPI-flash-based AT45xxx DataFlash chips.
	  DataFlash is a kind of SPI flash. Most AT45 chips have two buffers
	  in each chip, which may be used for double buffered I/O; but this
	  driver doesn't (yet) use these for any kind of i/o overlap or prefetching.

	  Sometimes DataFlash is packaged in MMC-format cards, although the
	  MMC stack can't (yet?) distinguish between MMC and DataFlash
	  protocols during enumeration.

	  If unsure, say N

config SPI_FLASH_MTD
	bool "SPI Flash MTD support"
	depends on SPI_FLASH
	help
          Enable the MTD support for spi flash layer, this adapter is for
	  translating mtd_read/mtd_write commands into spi_flash_read/write
	  commands. It is not intended to use it within sf_cmd or the SPI
	  flash subsystem. Such an adapter is needed for subsystems like
	  UBI which can only operate on top of the MTD layer.

	  If unsure, say N

endmenu # menu "SPI Flash Support"
