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 0x0
	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_SMART_HWCAPS
	bool "Smart hardware capability detection based on SPI MEM supports_op() hook"
	default y
	help
	 Enable support for smart hardware capability detection based on SPI
	 MEM supports_op() hook that lets controllers express whether they
	 can support a type of operation in a much more refined way compared
	 to using flags like SPI_RX_DUAL, SPI_TX_QUAD, etc.

config SPI_FLASH_SOFT_RESET
	bool "Software Reset support for SPI NOR flashes"
	help
	 Enable support for xSPI Software Reset. It will be used to switch from
	 Octal DTR mode to legacy mode on shutdown and boot (if enabled).

config SPI_FLASH_SOFT_RESET_ON_BOOT
	bool "Perform a Software Reset on boot on flashes that boot in stateful mode"
	depends on SPI_FLASH_SOFT_RESET
	help
	 Perform a Software Reset on boot to allow detecting flashes that are
	 handed to us in Octal DTR mode. Do not enable this config on flashes
	 that are not supposed to be handed to U-Boot in Octal DTR mode, even
	 if they _do_ support the Soft Reset sequence.

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 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_S28HS512T
	bool "Cypress S28HS512T chip support"
	depends on SPI_FLASH_SPANSION
	help
	 Add support for the Cypress S28HS512T chip. This is a separate config
	 because the fixup hooks for this flash add extra size overhead. Boards
	 that don't use the flash can disable this to save space.

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

config SPI_FLASH_MT35XU
	bool "Micron MT35XU chip support"
	depends on SPI_FLASH_STMICRO
	help
	 Add support for the Micron MT35XU chip. This is a separate config
	 because the fixup hooks for this flash add extra size overhead. Boards
	 that don't use the flash can disable this to save space.

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)

config SPI_FLASH_XTX
	bool "XTX SPI flash support"
	help
	  Add support for various XTX (XTX Technology Limited)
	  SPI flash chips (XT25xxx).

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"
