menuconfig SPI
	bool "SPI Support"
	help
	  The "Serial Peripheral Interface" is a low level synchronous
          protocol.  Chips that support SPI can have data transfer rates
          up to several tens of Mbit/sec.  Chips are addressed with a
          controller and a chipselect.  Most SPI slaves don't support
          dynamic device discovery; some are even write-only or read-only.

          SPI is widely used by microcontrollers to talk with sensors,
          eeprom and flash memory, codecs and various other controller
          chips, analog to digital (and d-to-a) converters, and more.
          MMC and SD cards can be accessed using SPI protocol; and for
          DataFlash cards used in MMC sockets, SPI must always be used.

          SPI is one of a family of similar protocols using a four wire
          interface (select, clock, data in, data out) including Microwire
          (half duplex), SSP, SSI, and PSP.  This driver framework should
          work with most such devices and controllers.

if SPI

config DM_SPI
	bool "Enable Driver Model for SPI drivers"
	depends on DM
	help
	  Enable driver model for SPI. The SPI slave interface
	  (spi_setup_slave(), spi_xfer(), etc.) is then implemented by
	  the SPI uclass. Drivers provide methods to access the SPI
	  buses that they control. The uclass interface is defined in
	  include/spi.h. The existing spi_slave structure is attached
	  as 'parent data' to every slave on each bus. Slaves
	  typically use driver-private data instead of extending the
	  spi_slave structure.

config SPI_MEM
	bool "SPI memory extension"
	help
	  Enable this option if you want to enable the SPI memory extension.
	  This extension is meant to simplify interaction with SPI memories
	  by providing an high-level interface to send memory-like commands.

config SPI_DIRMAP
	bool "SPI direct mapping"
	depends on SPI_MEM
	help
	  Enable the SPI direct mapping API. Most modern SPI controllers can
	  directly map a SPI memory (or a portion of the SPI memory) in the CPU
	  address space. Most of the time this brings significant performance
	  improvements as it automates the whole process of sending SPI memory
	  operations every time a new region is accessed.

if DM_SPI

config ALTERA_SPI
	bool "Altera SPI driver"
	help
	  Enable the Altera SPI driver. This driver can be used to
	  access the SPI NOR flash on platforms embedding this Altera
	  IP core. Please find details on the "Embedded Peripherals IP
	  User Guide" of Altera.

config APPLE_SPI
	bool "Apple SPI driver"
	default y if ARCH_APPLE
	help
	  Enable the Apple SPI driver. This driver can be used to
	  access the SPI flash and keyboard on machines based on Apple SoCs.

config ATCSPI200_SPI
	bool "Andestech ATCSPI200 SPI driver"
	help
	  Enable the Andestech ATCSPI200 SPI driver. This driver can be
	  used to access the SPI flash on AE3XX and AE250 platforms embedding
	  this Andestech IP core.

config ATH79_SPI
	bool "Atheros SPI driver"
	depends on ARCH_ATH79
	help
	  Enable the Atheros ar7xxx/ar9xxx SoC SPI driver, it was used
	  to access SPI NOR flash and other SPI peripherals. This driver
	  uses driver model and requires a device tree binding to operate.
	  please refer to doc/device-tree-bindings/spi/spi-ath79.txt.

config ATMEL_QSPI
	bool "Atmel Quad SPI Controller"
	depends on ARCH_AT91
	help
	  Enable the Atmel Quad SPI controller in master mode. This driver
	  does not support generic SPI. The implementation supports only the
	  spi-mem interface.

config ATMEL_SPI
	bool "Atmel SPI driver"
	depends on ARCH_AT91
	default y if ARCH_AT91
	help
	  This enables driver for the Atmel SPI Controller, present on
	  many AT91 (ARM) chips. This driver can be used to access
	  the SPI Flash, such as AT25DF321.

config BCM63XX_HSSPI
	bool "BCM63XX HSSPI driver"
	depends on (ARCH_BMIPS || ARCH_BCMBCA)
	help
	  Enable the BCM63XX HSSPI driver. This driver can be used to
	  access the SPI NOR flash on platforms embedding this Broadcom
	  SPI core.

config BCMBCA_HSSPI
	bool "BCMBCA HSSPI driver"
	depends on ARCH_BCMBCA && HAVE_SPI_CS_CTRL
	help
	  This enables support for the High Speed SPI controller present on
	  newer Broadcom BCMBCA SoCs. These SoCs include an updated SPI controller
	  that adds the capability to allow the driver to control chip select
	  explicitly.

config BCM63XX_SPI
	bool "BCM6348 SPI driver"
	depends on ARCH_BMIPS
	help
	  Enable the BCM6348/BCM6358 SPI driver. This driver can be used to
	  access the SPI NOR flash on platforms embedding these Broadcom
	  SPI cores.

config BCMSTB_SPI
	bool "BCMSTB SPI driver"
	depends on ARCH_BCMSTB
	help
	  Enable the Broadcom set-top box SPI driver. This driver can
	  be used to access the SPI flash on platforms embedding this
	  Broadcom SPI core.

config CORTINA_SFLASH
	bool "Cortina-Access Serial Flash controller driver"
	depends on DM_SPI && SPI_MEM
	help
	  Enable the Cortina-Access Serial Flash controller driver. This driver
	  can be used to access the SPI NOR/NAND flash on platforms embedding this
	  Cortina-Access IP core.

config CADENCE_QSPI
	bool "Cadence QSPI driver"
	help
	  Enable the Cadence Quad-SPI (QSPI) driver. This driver can be
	  used to access the SPI NOR flash on platforms embedding this
	  Cadence IP core.

config HAS_CQSPI_REF_CLK
	bool "Cadence QSPI static reference clock"
	depends on CADENCE_QSPI

config CQSPI_REF_CLK
	int "Cadence QSPI reference clock value in Hz"
	depends on HAS_CQSPI_REF_CLK

config CADENCE_OSPI_VERSAL
	bool "Configure Versal OSPI"
	depends on (ARCH_VERSAL || ARCH_VERSAL_NET || ARCH_VERSAL2) && CADENCE_QSPI
	imply DM_GPIO
	help
	  This option is used to enable Versal OSPI DMA operations which
	  are used for ospi flash read using cadence qspi controller.

config CF_SPI
        bool "ColdFire SPI driver"
        depends on M68K
        help
          Enable the ColdFire SPI driver. This driver can be used on
          some m68k SoCs.

config CV1800B_SPIF
	bool "Sophgo cv1800b SPI Flash Controller driver"
	depends on SPI_MEM
	help
	  Enable the Sophgo cv1800b SPI Flash Controller driver. This driver
	  can be used to access the SPI NOR flash on platforms embedding this
	  Sophgo cv1800b IP core.

config DAVINCI_SPI
	bool "Davinci & Keystone SPI driver"
	depends on ARCH_DAVINCI || ARCH_KEYSTONE
	help
	  Enable the Davinci SPI driver

config DESIGNWARE_SPI
	bool "Designware SPI driver"
	help
	  Enable the Designware SPI driver. This driver can be used to
	  access the SPI NOR flash on platforms embedding this Designware
	  IP core.

config EXYNOS_SPI
	bool "Samsung Exynos SPI driver"
	depends on ARCH_EXYNOS
	help
	  Enable the Samsung Exynos SPI driver. This driver can be used to
	  access the SPI NOR flash on platforms embedding this Samsung
	  Exynos IP core.

config FSL_DSPI
	bool "Freescale DSPI driver"
	depends on FSL_LAYERSCAPE || ARCH_VF610 || ARCH_LS1021A || ARCH_LS1028A
	help
	  Enable the Freescale DSPI driver. This driver can be used to
	  access the SPI NOR flash and SPI Data flash on platforms embedding
	  this Freescale DSPI IP core. LS102xA and Colibri VF50/VF61 platforms
	  use this driver.

config FSL_QSPI
	bool "Freescale QSPI driver"
	imply SPI_FLASH_BAR
	help
	  Enable the Freescale Quad-SPI (QSPI) driver. This driver can be
	  used to access the SPI NOR flash on platforms embedding this
	  Freescale IP core.

config FSL_QSPI_AHB_FULL_MAP
	bool "Use full AHB memory map space"
	depends on FSL_QSPI
	default y if ARCH_MX6 || ARCH_MX7 || ARCH_MX7ULP || ARCH_IMX8M
	help
	  Enable the Freescale QSPI driver to use full AHB memory map space for
	  flash access.

config GXP_SPI
	bool "SPI driver for GXP"
	imply SPI_FLASH_BAR
	help
	  Enable support for SPI on GXP.

config ICH_SPI
	bool "Intel ICH SPI driver"
	depends on X86
	help
	  Enable the Intel ICH SPI driver. This driver can be used to
	  access the SPI NOR flash on platforms embedding this Intel
	  ICH IP core.

config IPROC_QSPI
	bool "Broadcom iProc QSPI Flash Controller driver"
	help
	  Enable Broadcom iProc QSPI Flash Controller driver.
	  This driver can be used to access the SPI NOR flash.

config KIRKWOOD_SPI
	bool "Marvell Kirkwood SPI Driver"
	depends on ARCH_KIRKWOOD || ARCH_MVEBU
	help
	  Enable support for SPI on various Marvell SoCs, such as
	  Kirkwood and Armada 375.

config MESON_SPIFC
	bool "Amlogic Meson SPI Flash Controller driver"
	depends on ARCH_MESON
	help
	  Enable the Amlogic Meson SPI Flash Controller SPIFC) driver.
	  This driver can be used to access the SPI NOR flash chips on
	  Amlogic Meson SoCs.

config MICROCHIP_COREQSPI
	bool "Microchip FPGA QSPI Controller driver"
	help
	  Enable the QSPI driver for Microchip FPGA QSPI controllers.
	  This driver can be used on Polarfire SoC.

config MESON_SPIFC_A1
	bool "Amlogic Meson A1 SPI Flash Controller driver"
	depends on ARCH_MESON
	help
	  Enable the Amlogic A1 SPI Flash Controller (SPIFC) driver.
	  This driver can be used to access the SPI NOR/NAND flash chips
	  with STR mode frequency up to 98MHz. Dual and quad modes are
	  supported by controller.

config MPC8XX_SPI
	bool "MPC8XX SPI Driver"
	depends on MPC8xx && DM_GPIO
	help
	  Enable support for SPI on MPC8XX

config MPC8XXX_SPI
	bool "MPC8XXX SPI Driver"
	depends on MPC83xx || MPC85xx
	help
	  Enable support for SPI on the MPC8XXX PowerPC SoCs.

config MSCC_BB_SPI
	bool "MSCC bitbang SPI driver"
	depends on SOC_VCOREIII
	help
	  Enable MSCC bitbang SPI driver. This driver can be used on
	  MSCC SOCs.

config MT7620_SPI
	bool "MediaTek MT7620 SPI driver"
	depends on SOC_MT7620
	help
	  Enable the MT7620 SPI driver. This driver can be used to access
	  generic SPI devices on MediaTek MT7620 SoC.

config MT7621_SPI
	bool "MediaTek MT7621 SPI driver"
	depends on SOC_MT7621 || SOC_MT7628
	help
	  Enable the MT7621 SPI driver. This driver can be used to access
	  the SPI NOR flash on platforms embedding this Ralink / MediaTek
	  SPI core, like MT7621/7628/7688.

config MTK_SNOR
	bool "Mediatek SPI-NOR controller driver"
	depends on SPI_MEM
	help
	  Enable the Mediatek SPINOR controller driver. This driver has
          better read/write performance with NOR.

config MTK_SNFI_SPI
	bool "Mediatek SPI memory controller driver"
	depends on SPI_MEM
	help
	  Enable the Mediatek SPI memory controller driver. This driver is
	  originally based on the MediaTek SNFI IP core. It can only be
	  used to access SPI memory devices like SPI-NOR or SPI-NAND on
	  platforms embedding this IP core, like MT7622/M7629.

config MTK_SPIM
	bool "Mediatek SPI-MEM master controller driver"
	depends on SPI_MEM
	help
	  Enable MediaTek SPI-MEM master controller driver. This driver mainly
	  supports SPI flashes. You can use single, dual or quad mode
	  transmission on this controller.

config MVEBU_A3700_SPI
	bool "Marvell Armada 3700 SPI driver"
	select CLK_ARMADA_3720
	help
	  Enable the Marvell Armada 3700 SPI driver. This driver can be
	  used to access the SPI NOR flash on platforms embedding this
	  Marvell IP core.

config MXS_SPI
	bool "MXS SPI Driver"
	depends on MACH_IMX
	help
	  Enable the MXS SPI controller driver. This driver can be used
	  on the i.MX23 and i.MX28 SoCs.

config SPI_MXIC
	bool "Macronix MX25F0A SPI controller"
	help
	  Enable the Macronix MX25F0A SPI controller driver. This driver
	  can be used to access the SPI flash on platforms embedding
	  this Macronix IP core.

config NPCM_FIU_SPI
	bool "FIU driver for Nuvoton NPCM SoC"
	help
	  This enables support for the Flash Interface Unit SPI controller
	  in master mode.

config NPCM_PSPI
	bool "PSPI driver for Nuvoton NPCM SoC"
	help
	  PSPI driver for NPCM SoC

config NXP_FSPI
	bool "NXP FlexSPI driver"
	depends on SPI_MEM
	help
	  Enable the NXP FlexSPI (FSPI) driver. This driver can be used to
	  access the SPI NOR flash on platforms embedding this NXP IP core.

config OCTEON_SPI
	bool "Octeon SPI driver"
	depends on ARCH_OCTEON || ARCH_OCTEONTX || ARCH_OCTEONTX2
	help
	  Enable the Octeon SPI driver. This driver can be used to
	  access the SPI NOR flash on Octeon II/III and OcteonTX/TX2
	  SoC platforms.

config OMAP3_SPI
	bool "McSPI driver for OMAP"
	help
	  SPI master controller for OMAP24XX and later Multichannel SPI
	  (McSPI). This driver be used to access SPI chips on platforms
	  embedding this OMAP3 McSPI IP core.

config PIC32_SPI
	bool "Microchip PIC32 SPI driver"
	depends on MACH_PIC32
	help
	  Enable the Microchip PIC32 SPI driver. This driver can be used
	  to access the SPI NOR flash, MMC-over-SPI on platforms based on
	  Microchip PIC32 family devices.

config PL022_SPI
	bool "ARM AMBA PL022 SSP controller driver"
	depends on ARM
	help
	  This selects the ARM(R) AMBA(R) PrimeCell PL022 SSP
	  controller. If you have an embedded system with an AMBA(R)
	  bus and a PL022 controller, say Y or M here.

config SPI_QUP
	bool "Qualcomm SPI controller with QUP interface"
	depends on ARCH_IPQ40XX
	help
	  Qualcomm Universal Peripheral (QUP) core is an AHB slave that
	  provides a common data path (an output FIFO and an input FIFO)
	  for serial peripheral interface (SPI) mini-core. SPI in master
	  mode supports up to 50MHz, up to four chip selects, programmable
	  data path from 4 bits to 32 bits and numerous protocol variants.

config RENESAS_RPC_SPI
	bool "Renesas RPC SPI driver"
	depends on RCAR_64 || RZA1
	imply SPI_FLASH_SFDP_SUPPORT
	help
	  Enable the Renesas RPC SPI driver, used to access SPI NOR flash
	  on Renesas RCar Gen3 SoCs. This uses driver model and requires a
	  device tree binding to operate.

config ROCKCHIP_SFC
	bool "Rockchip SFC Driver"
	select BOUNCE_BUFFER
	help
	  Enable the Rockchip SFC Driver for SPI NOR flash. This device is
	  a limited purpose SPI controller for driving NOR flash on certain
	  Rockchip SoCs. This uses driver model and requires a device tree
	  binding to operate.

config ROCKCHIP_SPI
	bool "Rockchip SPI driver"
	help
	  Enable the Rockchip SPI driver, used to access SPI NOR flash and
	  other SPI peripherals (such as the Chrome OS EC) on Rockchip SoCs.
	  This uses driver model and requires a device tree binding to
	  operate.

config SANDBOX_SPI
	bool "Sandbox SPI driver"
	depends on SANDBOX && DM
	help
	  Enable SPI support for sandbox. This is an emulation of a real SPI
	  bus. Devices can be attached to the bus using the device tree
	  which specifies the driver to use. As an example, see this device
	  tree fragment from sandbox.dts. It shows that the SPI bus has a
	  single flash device on chip select 0 which is emulated by the driver
	  for "sandbox,spi-flash", which is in drivers/mtd/spi/sandbox.c.

	  spi@0 {
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <0>;
		compatible = "sandbox,spi";
		cs-gpios = <0>, <&gpio_a 0>;
		flash@0 {
			reg = <0>;
			compatible = "spansion,m25p16", "jedec,spi-nor";
			spi-max-frequency = <40000000>;
			sandbox,filename = "spi.bin";
		};
	  };

config SANDBOX_SPI_MAX_BUS
	int
	depends on SANDBOX
	default 1

config SANDBOX_SPI_MAX_CS
	int
	depends on SANDBOX
	default 10

config SPI_ASPEED_SMC
	bool "ASPEED SPI flash controller driver"
	depends on DM_SPI && SPI_MEM
	help
	  Enable ASPEED SPI flash controller driver for AST2500
	  and AST2600 SoCs.

config SPI_SIFIVE
	bool "SiFive SPI driver"
	help
	  This driver supports the SiFive SPI IP. If unsure say N.
	  Enable the SiFive SPI controller driver.

	  The SiFive SPI controller driver is found on various SiFive SoCs.

config SOFT_SPI
	bool "Soft SPI driver"
	help
	 Enable Soft SPI driver. This driver is to use GPIO simulate
	 the SPI protocol.

config SPI_SN_F_OSPI
	tristate "Socionext F_OSPI SPI flash controller"
	depends on SPI_MEM
	help
	  This enables support for the Socionext F_OSPI controller
	  for connecting an SPI flash memory over up to 8-bit wide bus.
	  It supports indirect access mode only.

config SPI_SUNXI
	bool "Allwinner SoC SPI controllers"
	default ARCH_SUNXI
	help
	  Enable the Allwinner SoC SPi controller driver.

	  Same controller driver can reuse in all Allwinner SoC variants.

config STM32_QSPI
	bool "STM32F7 QSPI driver"
	depends on STM32F4 || STM32F7 || ARCH_STM32MP
	help
	  Enable the STM32F7 Quad-SPI (QSPI) driver. This driver can be
	  used to access the SPI NOR flash chips on platforms embedding
	  this ST IP core.

config STM32_SPI
	bool "STM32 SPI driver"
	depends on ARCH_STM32MP
	help
	  Enable the STM32 Serial Peripheral Interface (SPI) driver for STM32MP
	  SoCs. This uses driver model and requires a device tree binding to
	  operate.

config TEGRA114_SPI
	bool "nVidia Tegra114 SPI driver"
	depends on ARCH_TEGRA
	help
	  Enable the nVidia Tegra114 SPI driver. This driver can be used to
	  access the SPI NOR flash on platforms embedding this nVidia Tegra114
	  IP core.

	  This controller is different than the older SoCs SPI controller and
	  also register interface get changed with this controller.

config TEGRA20_SFLASH
	bool "nVidia Tegra20 Serial Flash controller driver"
	depends on ARCH_TEGRA
	help
	  Enable the nVidia Tegra20 Serial Flash controller driver. This driver
	  can be used to access the SPI NOR flash on platforms embedding this
	  nVidia Tegra20 IP core.

config TEGRA20_SLINK
	bool "nVidia Tegra20/Tegra30 SLINK driver"
	depends on ARCH_TEGRA
	help
	  Enable the nVidia Tegra20/Tegra30 SLINK driver. This driver can
	  be used to access the SPI NOR flash on platforms embedding this
	  nVidia Tegra20/Tegra30 IP cores.

config TEGRA210_QSPI
	bool "nVidia Tegra210 QSPI driver"
	depends on ARCH_TEGRA
	help
	  Enable the Tegra Quad-SPI (QSPI) driver for T210. This driver
	  be used to access SPI chips on platforms embedding this
	  NVIDIA Tegra210 IP core.

config TI_QSPI
	bool "TI QSPI driver"
	imply TI_EDMA3
	depends on ARCH_OMAP2PLUS
	help
	  Enable the TI Quad-SPI (QSPI) driver for DRA7xx and AM43xx evms.
	  This driver support spi flash single, quad and memory reads.

config UNIPHIER_SPI
	bool "Socionext UniPhier SPI driver"
	depends on ARCH_UNIPHIER
	help
	  Enable the Socionext UniPhier SPI driver. This driver can
	  be used to access SPI chips on platforms embedding this
	  UniPhier IP core.

config XILINX_SPI
	bool "Xilinx SPI driver"
	help
	  Enable the Xilinx SPI driver from the Xilinx EDK. This SPI
	  controller support 8 bit SPI transfers only, with or w/o FIFO.
	  For more info on Xilinx SPI Register Definitions and Overview
	  see driver file - drivers/spi/xilinx_spi.c

config ZYNQ_SPI
	bool "Zynq SPI driver"
	help
	  Enable the Zynq SPI driver. This driver can be used to
	  access the SPI NOR flash on platforms embedding this Zynq
	  SPI IP core.

config ZYNQ_QSPI
	bool "Zynq QSPI driver"
	imply SPI_FLASH_BAR
	help
	  Enable the Zynq Quad-SPI (QSPI) driver. This driver can be
	  used to access the SPI NOR flash on platforms embedding this
	  Zynq QSPI IP core. This IP is used to connect the flash in
	  4-bit qspi, 8-bit dual stacked and shared 4-bit dual parallel.

config ZYNQMP_GQSPI
	bool "Configure ZynqMP Generic QSPI"
	help
	  This option is used to enable ZynqMP QSPI controller driver which
	  is used to communicate with qspi flash devices.

config SPI_STACKED_PARALLEL
	bool "Enable support for stacked or parallel memories"
	help
	 Enable support for stacked/or parallel memories. This functionality
	 may appear on Xilinx hardware. By default this is disabled.

endif # if DM_SPI

config FSL_ESPI
	bool "Freescale eSPI driver"
	depends on MPC85xx
	imply SPI_FLASH_BAR
	help
	  Enable the Freescale eSPI driver. This driver can be used to
	  access the SPI interface and SPI NOR flash on platforms embedding
	  this Freescale eSPI IP core.

config SH_QSPI
	bool "Renesas Quad SPI driver"
	depends on ARCH_RENESAS
	help
	  Enable the Renesas Quad SPI controller driver. This driver can be
	  used on Renesas SoCs.

config MXC_SPI
	bool "MXC SPI Driver"
	depends on MACH_IMX
	help
	  Enable the MXC SPI controller driver. This driver can be used
	  on various i.MX SoCs such as i.MX31/35/51/6/7.

config SYNQUACER_SPI
	bool "Socionext SynQuacer HS-SPI driver"
	depends on ARCH_SYNQUACER
	help
	  Enable the Socionext HS-SPI driver for SynQuacer. This driver can
	  be used to access the SPI interface and SPI NOR flash on platforms
	  embedding this HS-SPI IP core.

endif # menu "SPI Support"
