1# SPDX-License-Identifier: GPL-2.0
2
3menu "PCI controller drivers"
4	depends on PCI
5
6config PCI_HOST_COMMON
7	tristate
8	select PCI_ECAM
9
10config PCI_AARDVARK
11	tristate "Aardvark PCIe controller"
12	depends on (ARCH_MVEBU && ARM64) || COMPILE_TEST
13	depends on OF
14	depends on PCI_MSI
15	select PCI_BRIDGE_EMUL
16	help
17	 Add support for Aardvark 64bit PCIe Host Controller. This
18	 controller is part of the South Bridge of the Marvel Armada
19	 3700 SoC.
20
21config PCIE_ALTERA
22	tristate "Altera PCIe controller"
23	depends on ARM || NIOS2 || ARM64 || COMPILE_TEST
24	help
25	  Say Y here if you want to enable PCIe controller support on Altera
26	  FPGA.
27
28config PCIE_ALTERA_MSI
29	tristate "Altera PCIe MSI feature"
30	depends on PCIE_ALTERA
31	depends on PCI_MSI
32	help
33	  Say Y here if you want PCIe MSI support for the Altera FPGA.
34	  This MSI driver supports Altera MSI to GIC controller IP.
35
36config PCIE_APPLE_MSI_DOORBELL_ADDR
37	hex
38	default 0xfffff000
39	depends on PCIE_APPLE
40
41config PCIE_APPLE
42	tristate "Apple PCIe controller"
43	depends on ARCH_APPLE || COMPILE_TEST
44	depends on OF
45	depends on PCI_MSI
46	select PCI_HOST_COMMON
47	select IRQ_MSI_LIB
48	help
49	  Say Y here if you want to enable PCIe controller support on Apple
50	  system-on-chips, like the Apple M1. This is required for the USB
51	  type-A ports, Ethernet, Wi-Fi, and Bluetooth.
52
53	  If unsure, say Y if you have an Apple Silicon system.
54
55config PCI_VERSATILE
56	bool "ARM Versatile PB PCI controller"
57	depends on ARCH_VERSATILE || COMPILE_TEST
58
59config PCIE_BRCMSTB
60	tristate "Broadcom Brcmstb PCIe controller"
61	depends on ARCH_BRCMSTB || ARCH_BCM2835 || ARCH_BCMBCA || \
62		   BMIPS_GENERIC || COMPILE_TEST
63	depends on OF
64	depends on PCI_MSI
65	default ARCH_BRCMSTB || BMIPS_GENERIC
66	help
67	  Say Y here to enable PCIe host controller support for
68	  Broadcom STB based SoCs, like the Raspberry Pi 4.
69
70config PCIE_IPROC
71	tristate
72	help
73	  This enables the iProc PCIe core controller support for Broadcom's
74	  iProc family of SoCs. An appropriate bus interface driver needs
75	  to be enabled to select this.
76
77config PCIE_IPROC_PLATFORM
78	tristate "Broadcom iProc PCIe platform bus driver"
79	depends on ARCH_BCM_IPROC || (ARM && COMPILE_TEST)
80	depends on OF
81	select PCIE_IPROC
82	default ARCH_BCM_IPROC
83	help
84	  Say Y here if you want to use the Broadcom iProc PCIe controller
85	  through the generic platform bus interface
86
87config PCIE_IPROC_BCMA
88	tristate "Broadcom iProc BCMA PCIe controller"
89	depends on ARM && (ARCH_BCM_IPROC || COMPILE_TEST)
90	select PCIE_IPROC
91	select BCMA
92	default ARCH_BCM_5301X
93	help
94	  Say Y here if you want to use the Broadcom iProc PCIe controller
95	  through the BCMA bus interface
96
97config PCIE_IPROC_MSI
98	bool "Broadcom iProc PCIe MSI support"
99	depends on PCIE_IPROC_PLATFORM || PCIE_IPROC_BCMA
100	depends on PCI_MSI
101	default ARCH_BCM_IPROC
102	help
103	  Say Y here if you want to enable MSI support for Broadcom's iProc
104	  PCIe controller
105
106config PCI_HOST_THUNDER_PEM
107	bool "Cavium Thunder PCIe controller to off-chip devices"
108	depends on ARM64 || COMPILE_TEST
109	depends on OF || (ACPI && PCI_QUIRKS)
110	select PCI_HOST_COMMON
111	help
112	  Say Y here if you want PCIe support for CN88XX Cavium Thunder SoCs.
113
114config PCI_HOST_THUNDER_ECAM
115	bool "Cavium Thunder ECAM controller to on-chip devices on pass-1.x silicon"
116	depends on ARM64 || COMPILE_TEST
117	depends on OF || (ACPI && PCI_QUIRKS)
118	select PCI_HOST_COMMON
119	help
120	  Say Y here if you want ECAM support for CN88XX-Pass-1.x Cavium Thunder SoCs.
121
122config PCI_FTPCI100
123	bool "Faraday Technology FTPCI100 PCI controller"
124	depends on OF
125	default ARCH_GEMINI
126
127config PCI_HOST_GENERIC
128	tristate "Generic PCI host controller"
129	depends on OF
130	select PCI_HOST_COMMON
131	select IRQ_DOMAIN
132	help
133	  Say Y here if you want to support a simple generic PCI host
134	  controller, such as the one emulated by kvmtool.
135
136config PCIE_HISI_ERR
137	depends on ACPI_APEI_GHES && (ARM64 || COMPILE_TEST)
138	bool "HiSilicon HIP PCIe controller error handling driver"
139	help
140	  Say Y here if you want error handling support
141	  for the PCIe controller's errors on HiSilicon HIP SoCs
142
143config PCI_IXP4XX
144	bool "Intel IXP4xx PCI controller"
145	depends on ARM && OF
146	depends on ARCH_IXP4XX || COMPILE_TEST
147	default ARCH_IXP4XX
148	help
149	  Say Y here if you want support for the PCI host controller found
150	  in the Intel IXP4xx XScale-based network processor SoC.
151
152config VMD
153	depends on PCI_MSI && X86_64 && !UML
154	tristate "Intel Volume Management Device Driver"
155	help
156	  Adds support for the Intel Volume Management Device (VMD). VMD is a
157	  secondary PCI host bridge that allows PCI Express root ports,
158	  and devices attached to them, to be removed from the default
159	  PCI domain and placed within the VMD domain. This provides
160	  more bus resources than are otherwise possible with a
161	  single domain. If you know your system provides one of these and
162	  has devices attached to it, say Y; if you are not sure, say N.
163
164	  To compile this driver as a module, choose M here: the
165	  module will be called vmd.
166
167config PCI_LOONGSON
168	bool "LOONGSON PCIe controller"
169	depends on MACH_LOONGSON64 || COMPILE_TEST
170	depends on OF || ACPI
171	depends on PCI_QUIRKS
172	default MACH_LOONGSON64
173	help
174	  Say Y here if you want to enable PCI controller support on
175	  Loongson systems.
176
177config PCI_MVEBU
178	tristate "Marvell EBU PCIe controller"
179	depends on ARCH_MVEBU || ARCH_DOVE || COMPILE_TEST
180	depends on MVEBU_MBUS
181	depends on ARM
182	depends on OF
183	select PCI_BRIDGE_EMUL
184	help
185	 Add support for Marvell EBU PCIe controller. This PCIe controller
186	 is used on 32-bit Marvell ARM SoCs: Dove, Kirkwood, Armada 370,
187	 Armada XP, Armada 375, Armada 38x and Armada 39x.
188
189config PCIE_MEDIATEK
190	tristate "MediaTek PCIe controller"
191	depends on ARCH_AIROHA || ARCH_MEDIATEK || COMPILE_TEST
192	depends on OF
193	depends on PCI_MSI
194	help
195	  Say Y here if you want to enable PCIe controller support on
196	  MediaTek SoCs.
197
198config PCIE_MEDIATEK_GEN3
199	tristate "MediaTek Gen3 PCIe controller"
200	depends on ARCH_AIROHA || ARCH_MEDIATEK || COMPILE_TEST
201	depends on PCI_MSI
202	help
203	  Adds support for PCIe Gen3 MAC controller for MediaTek SoCs.
204	  This PCIe controller is compatible with Gen3, Gen2 and Gen1 speed,
205	  and support up to 256 MSI interrupt numbers for
206	  multi-function devices.
207
208	  Say Y here if you want to enable Gen3 PCIe controller support on
209	  MediaTek SoCs.
210
211config PCIE_MT7621
212	tristate "MediaTek MT7621 PCIe controller"
213	depends on SOC_MT7621 || COMPILE_TEST
214	select PHY_MT7621_PCI
215	default SOC_MT7621
216	help
217	  This selects a driver for the MediaTek MT7621 PCIe Controller.
218
219config PCI_HYPERV_INTERFACE
220	tristate "Microsoft Hyper-V PCI Interface"
221	depends on ((X86 && X86_64) || ARM64) && HYPERV && PCI_MSI
222	help
223	  The Hyper-V PCI Interface is a helper driver that allows other
224	  drivers to have a common interface with the Hyper-V PCI frontend
225	  driver.
226
227config PCI_TEGRA
228	bool "NVIDIA Tegra PCIe controller"
229	depends on ARCH_TEGRA || COMPILE_TEST
230	depends on PCI_MSI
231	select IRQ_MSI_LIB
232	help
233	  Say Y here if you want support for the PCIe host controller found
234	  on NVIDIA Tegra SoCs.
235
236config PCIE_RCAR_HOST
237	bool "Renesas R-Car PCIe controller (host mode)"
238	depends on ARCH_RENESAS || COMPILE_TEST
239	depends on PCI_MSI
240	help
241	  Say Y here if you want PCIe controller support on R-Car SoCs in host
242	  mode.
243
244config PCIE_RCAR_EP
245	bool "Renesas R-Car PCIe controller (endpoint mode)"
246	depends on ARCH_RENESAS || COMPILE_TEST
247	depends on PCI_ENDPOINT
248	help
249	  Say Y here if you want PCIe controller support on R-Car SoCs in
250	  endpoint mode.
251
252config PCI_RCAR_GEN2
253	bool "Renesas R-Car Gen2 Internal PCI controller"
254	depends on ARCH_RENESAS || COMPILE_TEST
255	depends on ARM
256	help
257	  Say Y here if you want internal PCI support on R-Car Gen2 SoC.
258	  There are 3 internal PCI controllers available with a single
259	  built-in EHCI/OHCI host controller present on each one.
260
261config PCIE_ROCKCHIP
262	bool
263	depends on PCI
264
265config PCIE_ROCKCHIP_HOST
266	tristate "Rockchip PCIe controller (host mode)"
267	depends on ARCH_ROCKCHIP || COMPILE_TEST
268	depends on OF
269	depends on PCI_MSI
270	select MFD_SYSCON
271	select PCIE_ROCKCHIP
272	help
273	  Say Y here if you want internal PCI support on Rockchip SoC.
274	  There is 1 internal PCIe port available to support GEN2 with
275	  4 slots.
276
277config PCIE_ROCKCHIP_EP
278	bool "Rockchip PCIe controller (endpoint mode)"
279	depends on ARCH_ROCKCHIP || COMPILE_TEST
280	depends on OF
281	depends on PCI_ENDPOINT
282	select MFD_SYSCON
283	select PCIE_ROCKCHIP
284	help
285	  Say Y here if you want to support Rockchip PCIe controller in
286	  endpoint mode on Rockchip SoC. There is 1 internal PCIe port
287	  available to support GEN2 with 4 slots.
288
289config PCI_V3_SEMI
290	bool "V3 Semiconductor PCI controller"
291	depends on OF
292	depends on ARM || COMPILE_TEST
293	default ARCH_INTEGRATOR_AP
294
295config PCI_XGENE
296	bool "X-Gene PCIe controller"
297	depends on ARM64 || COMPILE_TEST
298	depends on OF || (ACPI && PCI_QUIRKS)
299	help
300	  Say Y here if you want internal PCI support on APM X-Gene SoC.
301	  There are 5 internal PCIe ports available. Each port is GEN3 capable
302	  and have varied lanes from x1 to x8.
303
304config PCI_XGENE_MSI
305	bool "X-Gene v1 PCIe MSI feature"
306	depends on PCI_XGENE
307	depends on PCI_MSI
308	select IRQ_MSI_LIB
309	default y
310	help
311	  Say Y here if you want PCIe MSI support for the APM X-Gene v1 SoC.
312	  This MSI driver supports 5 PCIe ports on the APM X-Gene v1 SoC.
313
314config PCIE_XILINX
315	bool "Xilinx AXI PCIe controller"
316	depends on OF
317	depends on PCI_MSI
318	help
319	  Say 'Y' here if you want kernel to support the Xilinx AXI PCIe
320	  Host Bridge driver.
321
322config PCIE_XILINX_DMA_PL
323	bool "Xilinx DMA PL PCIe host bridge support"
324	depends on ARCH_ZYNQMP || COMPILE_TEST
325	depends on PCI_MSI
326	select PCI_HOST_COMMON
327	help
328	  Say 'Y' here if you want kernel support for the Xilinx PL DMA
329	  PCIe host bridge. The controller is a Soft IP which can act as
330	  Root Port. If your system provides Xilinx PCIe host controller
331	  bridge DMA as Soft IP say 'Y'; if you are not sure, say 'N'.
332
333config PCIE_XILINX_NWL
334	bool "Xilinx NWL PCIe controller"
335	depends on ARCH_ZYNQMP || COMPILE_TEST
336	depends on PCI_MSI
337	help
338	 Say 'Y' here if you want kernel support for Xilinx
339	 NWL PCIe controller. The controller can act as Root Port
340	 or End Point. The current option selection will only
341	 support root port enabling.
342
343config PCIE_XILINX_CPM
344	bool "Xilinx Versal CPM PCI controller"
345	depends on ARCH_ZYNQMP || COMPILE_TEST
346	select PCI_HOST_COMMON
347	help
348	  Say 'Y' here if you want kernel support for the
349	  Xilinx Versal CPM host bridge.
350
351source "drivers/pci/controller/cadence/Kconfig"
352source "drivers/pci/controller/dwc/Kconfig"
353source "drivers/pci/controller/mobiveil/Kconfig"
354source "drivers/pci/controller/plda/Kconfig"
355endmenu
356