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_NOR_BOOT_SOFT_RESET_EXT_INVERT
	bool "Command extension type is INVERT for Software Reset on boot"
	default n
	help
	 Because of SFDP information can not be get before boot.
	 So define command extension type is INVERT when Software Reset on boot only.

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 && SPL
	help
          Enable the MTD support for the SPI flash layer in SPL.

	  If unsure, say N

endmenu # menu "SPI Flash Support"
