menu "SPI Flash Support"

config DM_SPI_FLASH
	bool "Enable Driver Model for SPI flash"
	depends on DM && DM_SPI
	imply SPI_FLASH
	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 "SPI Flash Core Interface support"
	select SPI_MEM
	help
	  Enable the SPI flash Core support. This will include basic
	  standard support for things like probing, read / write, and
	  erasing through cmd_sf interface.

	  If unsure, say N

config SF_DEFAULT_BUS
	int "SPI Flash default bus identifier"
	depends on SPI_FLASH || DM_SPI_FLASH
	default 0
	help
	  The default bus may be provided by the platform
	  to handle the common case when only a single serial
	  flash is present on the system.

config SF_DEFAULT_CS
	int "SPI Flash default Chip-select"
	depends on SPI_FLASH || DM_SPI_FLASH
	default 0
	help
	  The default chip select may be provided by the platform
	  to handle the common case when only a single serial
	  flash is present on the system.

config SF_DEFAULT_MODE
	hex "SPI Flash default mode (see include/spi.h)"
	depends on SPI_FLASH || DM_SPI_FLASH
	default 3
	help
	  The default mode may be provided by the platform
	  to handle the common case when only a single serial
	  flash is present on the system.
	  Not used for boot with device tree; the SPI driver reads
	  speed and mode from plat values computed from
	  available node.

config SF_DEFAULT_SPEED
	int "SPI Flash default speed in Hz"
	depends on SPI_FLASH || DM_SPI_FLASH
	default 1000000
	help
	  The default speed may be provided by the platform
	  to handle the common case when only a single serial
	  flash is present on the system.
	  Not used for boot with device tree; the SPI driver reads
	  speed and mode from plat values computed from
	  available node.

if SPI_FLASH

config SPI_FLASH_SFDP_SUPPORT
	bool "SFDP table parsing support for SPI NOR flashes"
	depends on !SPI_FLASH_BAR
	help
	 Enable support for parsing and auto discovery of parameters for
	 SPI NOR flashes using Serial Flash Discoverable Parameters (SFDP)
	 tables as per JESD216 standard.

config SPI_FLASH_BAR
	bool "SPI flash Bank/Extended address register support"
	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 SPI_FLASH_UNLOCK_ALL
	bool "Unlock the entire SPI flash on u-boot startup"
	default y
	help
	 Some flashes tend to power up with the software write protection
	 bits set. If this option is set, the whole flash will be unlocked.

	 For legacy reasons, this option default to y. But if you intend to
	 actually use the software protection bits you should say n here.

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

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 && MTD
	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

config SPL_SPI_FLASH_MTD
	bool "SPI flash MTD support for SPL"
	depends on SPI_FLASH
	help
          Enable the MTD support for the SPI flash layer in SPL.

	  If unsure, say N

endmenu # menu "SPI Flash Support"
