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)

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"
