1menuconfig SPI
2	bool "SPI Support"
3	help
4	  The "Serial Peripheral Interface" is a low level synchronous
5          protocol.  Chips that support SPI can have data transfer rates
6          up to several tens of Mbit/sec.  Chips are addressed with a
7          controller and a chipselect.  Most SPI slaves don't support
8          dynamic device discovery; some are even write-only or read-only.
9
10          SPI is widely used by microcontrollers to talk with sensors,
11          eeprom and flash memory, codecs and various other controller
12          chips, analog to digital (and d-to-a) converters, and more.
13          MMC and SD cards can be accessed using SPI protocol; and for
14          DataFlash cards used in MMC sockets, SPI must always be used.
15
16          SPI is one of a family of similar protocols using a four wire
17          interface (select, clock, data in, data out) including Microwire
18          (half duplex), SSP, SSI, and PSP.  This driver framework should
19          work with most such devices and controllers.
20
21if SPI
22
23config DM_SPI
24	bool "Enable Driver Model for SPI drivers"
25	depends on DM
26	help
27	  Enable driver model for SPI. The SPI slave interface
28	  (spi_setup_slave(), spi_xfer(), etc.) is then implemented by
29	  the SPI uclass. Drivers provide methods to access the SPI
30	  buses that they control. The uclass interface is defined in
31	  include/spi.h. The existing spi_slave structure is attached
32	  as 'parent data' to every slave on each bus. Slaves
33	  typically use driver-private data instead of extending the
34	  spi_slave structure.
35
36config SPI_MEM
37	bool "SPI memory extension"
38	help
39	  Enable this option if you want to enable the SPI memory extension.
40	  This extension is meant to simplify interaction with SPI memories
41	  by providing an high-level interface to send memory-like commands.
42
43if DM_SPI
44
45config ALTERA_SPI
46	bool "Altera SPI driver"
47	help
48	  Enable the Altera SPI driver. This driver can be used to
49	  access the SPI NOR flash on platforms embedding this Altera
50	  IP core. Please find details on the "Embedded Peripherals IP
51	  User Guide" of Altera.
52
53config ATCSPI200_SPI
54	bool "Andestech ATCSPI200 SPI driver"
55	help
56	  Enable the Andestech ATCSPI200 SPI driver. This driver can be
57	  used to access the SPI flash on AE3XX and AE250 platforms embedding
58	  this Andestech IP core.
59
60config ATH79_SPI
61	bool "Atheros SPI driver"
62	depends on ARCH_ATH79
63	help
64	  Enable the Atheros ar7xxx/ar9xxx SoC SPI driver, it was used
65	  to access SPI NOR flash and other SPI peripherals. This driver
66	  uses driver model and requires a device tree binding to operate.
67	  please refer to doc/device-tree-bindings/spi/spi-ath79.txt.
68
69config ATMEL_QSPI
70	bool "Atmel Quad SPI Controller"
71	depends on ARCH_AT91
72	help
73	  Enable the Atmel Quad SPI controller in master mode. This driver
74	  does not support generic SPI. The implementation supports only the
75	  spi-mem interface.
76
77config ATMEL_SPI
78	bool "Atmel SPI driver"
79	default y if ARCH_AT91
80	help
81	  This enables driver for the Atmel SPI Controller, present on
82	  many AT91 (ARM) chips. This driver can be used to access
83	  the SPI Flash, such as AT25DF321.
84
85config BCM63XX_HSSPI
86	bool "BCM63XX HSSPI driver"
87	depends on (ARCH_BMIPS || ARCH_BCM68360 || \
88		    ARCH_BCM6858 || ARCH_BCM63158)
89	help
90	  Enable the BCM6328 HSSPI driver. This driver can be used to
91	  access the SPI NOR flash on platforms embedding this Broadcom
92	  SPI core.
93
94config BCM63XX_SPI
95	bool "BCM6348 SPI driver"
96	depends on ARCH_BMIPS
97	help
98	  Enable the BCM6348/BCM6358 SPI driver. This driver can be used to
99	  access the SPI NOR flash on platforms embedding these Broadcom
100	  SPI cores.
101
102config BCMSTB_SPI
103	bool "BCMSTB SPI driver"
104	help
105	  Enable the Broadcom set-top box SPI driver. This driver can
106	  be used to access the SPI flash on platforms embedding this
107	  Broadcom SPI core.
108
109config CORTINA_SFLASH
110	bool "Cortina-Access Serial Flash controller driver"
111	depends on DM_SPI && SPI_MEM
112	help
113	  Enable the Cortina-Access Serial Flash controller driver. This driver
114	  can be used to access the SPI NOR/NAND flash on platforms embedding this
115	  Cortina-Access IP core.
116
117config CADENCE_QSPI
118	bool "Cadence QSPI driver"
119	help
120	  Enable the Cadence Quad-SPI (QSPI) driver. This driver can be
121	  used to access the SPI NOR flash on platforms embedding this
122	  Cadence IP core.
123
124config CF_SPI
125        bool "ColdFire SPI driver"
126        help
127          Enable the ColdFire SPI driver. This driver can be used on
128          some m68k SoCs.
129
130config DAVINCI_SPI
131	bool "Davinci & Keystone SPI driver"
132	depends on ARCH_DAVINCI || ARCH_KEYSTONE
133	help
134	  Enable the Davinci SPI driver
135
136config DESIGNWARE_SPI
137	bool "Designware SPI driver"
138	help
139	  Enable the Designware SPI driver. This driver can be used to
140	  access the SPI NOR flash on platforms embedding this Designware
141	  IP core.
142
143config EXYNOS_SPI
144	bool "Samsung Exynos SPI driver"
145	help
146	  Enable the Samsung Exynos SPI driver. This driver can be used to
147	  access the SPI NOR flash on platforms embedding this Samsung
148	  Exynos IP core.
149
150config FSL_DSPI
151	bool "Freescale DSPI driver"
152	help
153	  Enable the Freescale DSPI driver. This driver can be used to
154	  access the SPI NOR flash and SPI Data flash on platforms embedding
155	  this Freescale DSPI IP core. LS102xA and Colibri VF50/VF61 platforms
156	  use this driver.
157
158config FSL_QSPI
159	bool "Freescale QSPI driver"
160	imply SPI_FLASH_BAR
161	help
162	  Enable the Freescale Quad-SPI (QSPI) driver. This driver can be
163	  used to access the SPI NOR flash on platforms embedding this
164	  Freescale IP core.
165
166config FSL_QSPI_AHB_FULL_MAP
167	bool "Use full AHB memory map space"
168	depends on FSL_QSPI
169	default y if ARCH_MX6 || ARCH_MX7 || ARCH_MX7ULP || ARCH_IMX8M
170	help
171	  Enable the Freescale QSPI driver to use full AHB memory map space for
172	  flash access.
173
174config ICH_SPI
175	bool "Intel ICH SPI driver"
176	help
177	  Enable the Intel ICH SPI driver. This driver can be used to
178	  access the SPI NOR flash on platforms embedding this Intel
179	  ICH IP core.
180
181config KIRKWOOD_SPI
182	bool "Marvell Kirkwood SPI Driver"
183	help
184	  Enable support for SPI on various Marvell SoCs, such as
185	  Kirkwood and Armada 375.
186
187config MESON_SPIFC
188	bool "Amlogic Meson SPI Flash Controller driver"
189	depends on ARCH_MESON
190	help
191	  Enable the Amlogic Meson SPI Flash Controller SPIFC) driver.
192	  This driver can be used to access the SPI NOR flash chips on
193	  Amlogic Meson SoCs.
194
195config MPC8XX_SPI
196	bool "MPC8XX SPI Driver"
197	depends on MPC8xx
198	help
199	  Enable support for SPI on MPC8XX
200
201config MPC8XXX_SPI
202	bool "MPC8XXX SPI Driver"
203	help
204	  Enable support for SPI on the MPC8XXX PowerPC SoCs.
205
206config MSCC_BB_SPI
207	bool "MSCC bitbang SPI driver"
208	depends on SOC_VCOREIII
209	help
210	  Enable MSCC bitbang SPI driver. This driver can be used on
211	  MSCC SOCs.
212
213config MT7620_SPI
214	bool "MediaTek MT7620 SPI driver"
215	depends on SOC_MT7620
216	help
217	  Enable the MT7620 SPI driver. This driver can be used to access
218	  generic SPI devices on MediaTek MT7620 SoC.
219
220config MT7621_SPI
221	bool "MediaTek MT7621 SPI driver"
222	depends on SOC_MT7628
223	help
224	  Enable the MT7621 SPI driver. This driver can be used to access
225	  the SPI NOR flash on platforms embedding this Ralink / MediaTek
226	  SPI core, like MT7621/7628/7688.
227
228config MTK_SNOR
229	bool "Mediatek SPI-NOR controller driver"
230	depends on SPI_MEM
231	help
232	  Enable the Mediatek SPINOR controller driver. This driver has
233          better read/write performance with NOR.
234
235config MTK_SNFI_SPI
236	bool "Mediatek SPI memory controller driver"
237	depends on SPI_MEM
238	help
239	  Enable the Mediatek SPI memory controller driver. This driver is
240	  originally based on the MediaTek SNFI IP core. It can only be
241	  used to access SPI memory devices like SPI-NOR or SPI-NAND on
242	  platforms embedding this IP core, like MT7622/M7629.
243
244config MVEBU_A3700_SPI
245	bool "Marvell Armada 3700 SPI driver"
246	select CLK_ARMADA_3720
247	help
248	  Enable the Marvell Armada 3700 SPI driver. This driver can be
249	  used to access the SPI NOR flash on platforms embedding this
250	  Marvell IP core.
251
252config MXS_SPI
253	bool "MXS SPI Driver"
254	help
255	  Enable the MXS SPI controller driver. This driver can be used
256	  on the i.MX23 and i.MX28 SoCs.
257
258config SPI_MXIC
259	bool "Macronix MX25F0A SPI controller"
260	help
261	  Enable the Macronix MX25F0A SPI controller driver. This driver
262	  can be used to access the SPI flash on platforms embedding
263	  this Macronix IP core.
264
265config NXP_FSPI
266	bool "NXP FlexSPI driver"
267	depends on SPI_MEM
268	help
269	  Enable the NXP FlexSPI (FSPI) driver. This driver can be used to
270	  access the SPI NOR flash on platforms embedding this NXP IP core.
271
272config OCTEON_SPI
273	bool "Octeon SPI driver"
274	depends on ARCH_OCTEON || ARCH_OCTEONTX || ARCH_OCTEONTX2
275	help
276	  Enable the Octeon SPI driver. This driver can be used to
277	  access the SPI NOR flash on Octeon II/III and OcteonTX/TX2
278	  SoC platforms.
279
280config OMAP3_SPI
281	bool "McSPI driver for OMAP"
282	help
283	  SPI master controller for OMAP24XX and later Multichannel SPI
284	  (McSPI). This driver be used to access SPI chips on platforms
285	  embedding this OMAP3 McSPI IP core.
286
287config PIC32_SPI
288	bool "Microchip PIC32 SPI driver"
289	depends on MACH_PIC32
290	help
291	  Enable the Microchip PIC32 SPI driver. This driver can be used
292	  to access the SPI NOR flash, MMC-over-SPI on platforms based on
293	  Microchip PIC32 family devices.
294
295config PL022_SPI
296	bool "ARM AMBA PL022 SSP controller driver"
297	depends on ARM
298	help
299	  This selects the ARM(R) AMBA(R) PrimeCell PL022 SSP
300	  controller. If you have an embedded system with an AMBA(R)
301	  bus and a PL022 controller, say Y or M here.
302
303config SPI_QUP
304	bool "Qualcomm SPI controller with QUP interface"
305	depends on ARCH_IPQ40XX
306	help
307	  Qualcomm Universal Peripheral (QUP) core is an AHB slave that
308	  provides a common data path (an output FIFO and an input FIFO)
309	  for serial peripheral interface (SPI) mini-core. SPI in master
310	  mode supports up to 50MHz, up to four chip selects, programmable
311	  data path from 4 bits to 32 bits and numerous protocol variants.
312
313config RENESAS_RPC_SPI
314	bool "Renesas RPC SPI driver"
315	depends on RCAR_GEN3 || RZA1
316	imply SPI_FLASH_BAR
317	help
318	  Enable the Renesas RPC SPI driver, used to access SPI NOR flash
319	  on Renesas RCar Gen3 SoCs. This uses driver model and requires a
320	  device tree binding to operate.
321
322config ROCKCHIP_SFC
323	bool "Rockchip SFC Driver"
324	help
325	  Enable the Rockchip SFC Driver for SPI NOR flash. This device is
326	  a limited purpose SPI controller for driving NOR flash on certain
327	  Rockchip SoCs. This uses driver model and requires a device tree
328	  binding to operate.
329
330config ROCKCHIP_SPI
331	bool "Rockchip SPI driver"
332	help
333	  Enable the Rockchip SPI driver, used to access SPI NOR flash and
334	  other SPI peripherals (such as the Chrome OS EC) on Rockchip SoCs.
335	  This uses driver model and requires a device tree binding to
336	  operate.
337
338config SANDBOX_SPI
339	bool "Sandbox SPI driver"
340	depends on SANDBOX && DM
341	help
342	  Enable SPI support for sandbox. This is an emulation of a real SPI
343	  bus. Devices can be attached to the bus using the device tree
344	  which specifies the driver to use. As an example, see this device
345	  tree fragment from sandbox.dts. It shows that the SPI bus has a
346	  single flash device on chip select 0 which is emulated by the driver
347	  for "sandbox,spi-flash", which is in drivers/mtd/spi/sandbox.c.
348
349	  spi@0 {
350		#address-cells = <1>;
351		#size-cells = <0>;
352		reg = <0>;
353		compatible = "sandbox,spi";
354		cs-gpios = <0>, <&gpio_a 0>;
355		flash@0 {
356			reg = <0>;
357			compatible = "spansion,m25p16", "jedec,spi-nor";
358			spi-max-frequency = <40000000>;
359			sandbox,filename = "spi.bin";
360		};
361	  };
362
363config SPI_SIFIVE
364	bool "SiFive SPI driver"
365	help
366	  This driver supports the SiFive SPI IP. If unsure say N.
367	  Enable the SiFive SPI controller driver.
368
369	  The SiFive SPI controller driver is found on various SiFive SoCs.
370
371config SOFT_SPI
372	bool "Soft SPI driver"
373	help
374	 Enable Soft SPI driver. This driver is to use GPIO simulate
375	 the SPI protocol.
376
377config SPI_SUNXI
378	bool "Allwinner SoC SPI controllers"
379	default ARCH_SUNXI
380	help
381	  Enable the Allwinner SoC SPi controller driver.
382
383	  Same controller driver can reuse in all Allwinner SoC variants.
384
385config STM32_QSPI
386	bool "STM32F7 QSPI driver"
387	depends on STM32F4 || STM32F7 || ARCH_STM32MP
388	help
389	  Enable the STM32F7 Quad-SPI (QSPI) driver. This driver can be
390	  used to access the SPI NOR flash chips on platforms embedding
391	  this ST IP core.
392
393config STM32_SPI
394	bool "STM32 SPI driver"
395	depends on ARCH_STM32MP
396	help
397	  Enable the STM32 Serial Peripheral Interface (SPI) driver for STM32MP
398	  SoCs. This uses driver model and requires a device tree binding to
399	  operate.
400
401config TEGRA114_SPI
402	bool "nVidia Tegra114 SPI driver"
403	help
404	  Enable the nVidia Tegra114 SPI driver. This driver can be used to
405	  access the SPI NOR flash on platforms embedding this nVidia Tegra114
406	  IP core.
407
408	  This controller is different than the older SoCs SPI controller and
409	  also register interface get changed with this controller.
410
411config TEGRA20_SFLASH
412	bool "nVidia Tegra20 Serial Flash controller driver"
413	help
414	  Enable the nVidia Tegra20 Serial Flash controller driver. This driver
415	  can be used to access the SPI NOR flash on platforms embedding this
416	  nVidia Tegra20 IP core.
417
418config TEGRA20_SLINK
419	bool "nVidia Tegra20/Tegra30 SLINK driver"
420	help
421	  Enable the nVidia Tegra20/Tegra30 SLINK driver. This driver can
422	  be used to access the SPI NOR flash on platforms embedding this
423	  nVidia Tegra20/Tegra30 IP cores.
424
425config TEGRA210_QSPI
426	bool "nVidia Tegra210 QSPI driver"
427	help
428	  Enable the Tegra Quad-SPI (QSPI) driver for T210. This driver
429	  be used to access SPI chips on platforms embedding this
430	  NVIDIA Tegra210 IP core.
431
432config TI_QSPI
433	bool "TI QSPI driver"
434	imply TI_EDMA3
435	help
436	  Enable the TI Quad-SPI (QSPI) driver for DRA7xx and AM43xx evms.
437	  This driver support spi flash single, quad and memory reads.
438
439config UNIPHIER_SPI
440	bool "Socionext UniPhier SPI driver"
441	depends on ARCH_UNIPHIER
442	help
443	  Enable the Socionext UniPhier SPI driver. This driver can
444	  be used to access SPI chips on platforms embedding this
445	  UniPhier IP core.
446
447config XILINX_SPI
448	bool "Xilinx SPI driver"
449	help
450	  Enable the Xilinx SPI driver from the Xilinx EDK. This SPI
451	  controller support 8 bit SPI transfers only, with or w/o FIFO.
452	  For more info on Xilinx SPI Register Definitions and Overview
453	  see driver file - drivers/spi/xilinx_spi.c
454
455config ZYNQ_SPI
456	bool "Zynq SPI driver"
457	help
458	  Enable the Zynq SPI driver. This driver can be used to
459	  access the SPI NOR flash on platforms embedding this Zynq
460	  SPI IP core.
461
462config ZYNQ_QSPI
463	bool "Zynq QSPI driver"
464	imply SPI_FLASH_BAR
465	help
466	  Enable the Zynq Quad-SPI (QSPI) driver. This driver can be
467	  used to access the SPI NOR flash on platforms embedding this
468	  Zynq QSPI IP core. This IP is used to connect the flash in
469	  4-bit qspi, 8-bit dual stacked and shared 4-bit dual parallel.
470
471config ZYNQMP_GQSPI
472	bool "Configure ZynqMP Generic QSPI"
473	help
474	  This option is used to enable ZynqMP QSPI controller driver which
475	  is used to communicate with qspi flash devices.
476
477endif # if DM_SPI
478
479config FSL_ESPI
480	bool "Freescale eSPI driver"
481	imply SPI_FLASH_BAR
482	help
483	  Enable the Freescale eSPI driver. This driver can be used to
484	  access the SPI interface and SPI NOR flash on platforms embedding
485	  this Freescale eSPI IP core.
486
487config SH_QSPI
488	bool "Renesas Quad SPI driver"
489	help
490	  Enable the Renesas Quad SPI controller driver. This driver can be
491	  used on Renesas SoCs.
492
493config MXC_SPI
494	bool "MXC SPI Driver"
495	help
496	  Enable the MXC SPI controller driver. This driver can be used
497	  on various i.MX SoCs such as i.MX31/35/51/6/7.
498
499config SYNQUACER_SPI
500	bool "Socionext SynQuacer HS-SPI driver"
501	depends on ARCH_SYNQUACER
502	help
503	  Enable the Socionext HS-SPI driver for SynQuacer. This driver can
504	  be used to access the SPI interface and SPI NOR flash on platforms
505	  embedding this HS-SPI IP core.
506
507endif # menu "SPI Support"
508