1menuconfig PCI
2	bool "PCI support"
3	depends on DM
4	default y if PPC
5	help
6	  Enable support for PCI (Peripheral Interconnect Bus), a type of bus
7	  used on some devices to allow the CPU to communicate with its
8	  peripherals.
9
10	  This subsystem requires driver model.
11
12if PCI
13
14config DM_PCI_COMPAT
15	bool "Enable compatible functions for PCI"
16	help
17	  Enable compatibility functions for PCI so that old code can be used
18	  with CONFIG_PCI enabled. This should be used as an interim
19	  measure when porting a board to use driver model for PCI. Once the
20	  board is fully supported, this option should be disabled.
21
22config SYS_PCI_64BIT
23	bool "Enable 64-bit PCI resources"
24	default y if PPC
25	help
26	  Enable 64-bit PCI resource access.
27
28config PCI_AARDVARK
29	bool "Enable Aardvark PCIe driver"
30	depends on DM_GPIO
31	depends on ARMADA_3700
32	help
33	  Say Y here if you want to enable PCIe controller support on
34	  Armada37x0 SoCs. The PCIe controller on Armada37x0 is based on
35	  Aardvark hardware.
36
37config PCI_PNP
38	bool "Enable Plug & Play support for PCI"
39	default y
40	help
41	  Enable PCI memory and I/O space resource allocation and assignment.
42
43config SPL_PCI_PNP
44	bool "Enable Plug & Play support for PCI in SPL"
45	depends on SPL_PCI
46	help
47	  Enable PCI memory and I/O space resource allocation and assignment.
48
49	  This is required to auto configure the enumerated devices.
50
51	  This is normally not done in SPL, but can be enabled if devices must
52	  be set up in the SPL phase. Often it is enough to manually configure
53	  one device, so this option can be disabled.
54
55config PCI_REGION_MULTI_ENTRY
56	bool "Enable Multiple entries of region type MEMORY in ranges for PCI"
57	help
58	  Enable PCI memory regions to be of multiple entry. Multiple entry
59	  here refers to allow more than one count of address ranges for MEMORY
60	  region type. This helps to add support for SoC's like OcteonTX/TX2
61	  where every peripheral is on the PCI bus.
62
63config PCI_CONFIG_HOST_BRIDGE
64	bool "Configure PCI host bridges"
65	default y if X86
66
67config PCI_MAP_SYSTEM_MEMORY
68	bool "Map local system memory from a virtual base address"
69	depends on MIPS
70	default y if !ARCH_MAP_SYSMEM
71	help
72	  Say Y if base address of system memory is being used as a virtual address
73	  instead of a physical address (e.g. on MIPS). The PCI core will then remap
74	  the virtual memory base address to a physical address when adding the PCI
75	  region of type PCI_REGION_SYS_MEMORY.
76	  This should only be required on MIPS where CFG_SYS_SDRAM_BASE is still
77	  being used as virtual address.
78
79config PCI_BRIDGE_MEM_ALIGNMENT
80	hex "Alignment boundary of PCI memory resource allocation"
81	default 0x10000 if TARGET_BOSTON
82	default 0x100000
83	help
84	  Specify a boundary for alignment of PCI memory resource allocation,
85	  this is normally 0x100000 (1MB) but can be reduced to accommodate
86	  hardware with tight bridge range if hardware allows.
87
88config PCI_SRIOV
89	bool "Enable Single Root I/O Virtualization support for PCI"
90	help
91	  Say Y here if you want to enable PCI Single Root I/O Virtualization
92	  capability support. This helps to enumerate Virtual Function devices
93	  if available on a PCI Physical Function device and probe for
94	  applicable drivers.
95
96config PCI_ENHANCED_ALLOCATION
97	bool "Enable support for Enhanced Allocation of resources"
98	default y
99	help
100	  Enable support for Enhanced Allocation which can be used by supported
101	  devices in place of traditional BARS for allocation of resources.
102
103config PCI_ARID
104        bool "Enable Alternate Routing-ID support for PCI"
105        help
106          Say Y here if you want to enable Alternate Routing-ID capability
107          support on PCI devices. This helps to skip some devices in BDF
108          scan that are not present.
109
110config PCI_SCAN_SHOW
111	bool "Show PCI devices during startup"
112	depends on PCIE_IMX
113
114config PCIE_ECAM_GENERIC
115	bool "Generic ECAM-based PCI host controller support"
116	help
117	  Say Y here if you want to enable support for generic ECAM-based
118	  PCIe host controllers, such as the one emulated by QEMU.
119
120config PCIE_ECAM_SYNQUACER
121	bool "SynQuacer ECAM-based PCI host controller support"
122	select PCI_INIT_R
123	select PCI_REGION_MULTI_ENTRY
124	help
125	  Say Y here if you want to enable support for Socionext
126	  SynQuacer SoC's ECAM-based PCIe host controllers.
127	  Note that this must be configured when boot because Linux driver
128	  expects the PCIe RC has been configured in the bootloader.
129
130config PCIE_APPLE
131	bool "Enable Apple PCIe driver"
132	depends on ARCH_APPLE
133	imply PCI_INIT_R
134	select SYS_PCI_64BIT
135	default y
136	help
137	  Say Y here if you want to enable PCIe controller support on
138	  Apple SoCs.
139
140config PCI_FTPCI100
141	bool "Enable Faraday FTPCI100 PCI Bridge Controller driver"
142	help
143	  Say Y here if you want to enable Faraday FTPCI100 PCI.
144	  FTPCI100 IP is used in SoC chip designs.
145
146config PCI_GT64120
147	bool "GT64120 PCI support"
148	depends on MIPS
149
150config PCIE_CDNS_TI
151	bool "TI K3 PCIe support"
152	help
153	  Say Y here to enable support for the Cadence PCIe Controller
154	  on TI's K3 SoCs.
155
156config PCI_PHYTIUM
157	bool "Phytium PCIe support"
158	help
159	  Say Y here if you want to enable PCIe controller support on
160	  Phytium SoCs.
161
162config PCIE_DW_MVEBU
163	bool "Enable Armada-8K PCIe driver (DesignWare core)"
164	depends on ARMADA_8K
165	help
166	  Say Y here if you want to enable PCIe controller support on
167	  Armada-8K SoCs. The PCIe controller on Armada-8K is based on
168	  DesignWare hardware.
169
170config PCIE_DW_SIFIVE
171	bool "Enable SiFive FU740 PCIe"
172	depends on CLK_SIFIVE_PRCI
173	depends on RESET_SIFIVE
174	depends on SIFIVE_GPIO
175	select PCIE_DW_COMMON
176	help
177	  Say Y here if you want to enable PCIe controller support on
178	  FU740.
179
180config SYS_FSL_PCI_VER_3_X
181	bool
182
183config PCIE_FSL
184	bool "FSL PowerPC PCIe support"
185	select SYS_FSL_PCI_VER_3_X if ARCH_T2080 || ARCH_T4240
186	help
187	  Say Y here if you want to enable PCIe controller support on FSL
188	  PowerPC MPC85xx, MPC86xx, B series, P series and T series SoCs.
189	  This driver does not support SRIO_PCIE_BOOT feature.
190
191config PCI_MPC85XX
192	bool "MPC85XX PowerPC PCI support"
193	help
194	  Say Y here if you want to enable PCI controller support on FSL
195	  PowerPC MPC85xx SoC.
196
197config PCI_MSC01
198	bool "MSC01 PCI support"
199	depends on TARGET_MALTA
200
201config PCI_RCAR_GEN2
202	bool "Renesas R-Car Gen2 PCIe driver"
203	depends on RCAR_32
204	help
205	  Say Y here if you want to enable PCIe controller support on
206	  Renesas R-Car Gen2 SoCs. The PCIe controller on R-Car Gen2 is
207	  also used to access EHCI USB controller on the SoC.
208
209config PCI_RCAR_GEN3
210	bool "Renesas R-Car Gen3 PCIe driver"
211	depends on RCAR_GEN3
212	help
213	  Say Y here if you want to enable PCIe controller support on
214	  Renesas R-Car Gen3 SoCs.
215
216config PCI_SANDBOX
217	bool "Sandbox PCI support"
218	depends on SANDBOX
219	help
220	  Support PCI on sandbox, as an emulated bus. This permits testing of
221	  PCI feature such as bus scanning, device configuration and device
222	  access. The available (emulated) devices are defined statically in
223	  the device tree but the normal PCI scan technique is used to find
224	  then.
225
226config SH7751_PCI
227	bool "SH7751 PCI controller support"
228	depends on SH
229	help
230	  SuperH PCI Bridge Configuration
231
232config PCI_TEGRA
233	bool "Tegra PCI support"
234	depends on ARCH_TEGRA
235	depends on (TEGRA186 && POWER_DOMAIN) || (!TEGRA186)
236	help
237	  Enable support for the PCIe controller found on some generations of
238	  Tegra. Tegra20 has 2 root ports with a total of 4 lanes, Tegra30 has
239	  3 root ports with a total of 6 lanes and Tegra124 has 2 root ports
240	  with a total of 5 lanes. Some boards require this for Ethernet
241	  support to work (e.g. beaver, jetson-tk1).
242
243config PCI_OCTEONTX
244	bool "OcteonTX PCI support"
245	depends on (ARCH_OCTEONTX || ARCH_OCTEONTX2)
246	help
247	  Enable support for the OcteonTX/TX2 SoC family ECAM/PEM controllers.
248	  These controllers provide PCI configuration access to all on-board
249	  peripherals so it should only be disabled for testing purposes
250
251config PCIE_OCTEON
252	bool "MIPS Octeon PCIe support"
253	depends on ARCH_OCTEON
254	help
255	  Enable support for the MIPS Octeon SoC family PCIe controllers.
256
257config PCI_XILINX
258	bool "Xilinx AXI Bridge for PCI Express"
259	help
260	  Enable support for the Xilinx AXI bridge for PCI express, an IP block
261	  which can be used on some generations of Xilinx FPGAs.
262
263config PCIE_LAYERSCAPE
264	bool
265
266config PCIE_LAYERSCAPE_RC
267	bool "Layerscape PCIe Root Complex mode support"
268	select PCIE_LAYERSCAPE
269	help
270	  Enable Layerscape PCIe Root Complex mode driver support. The Layerscape
271	  SoC may have one or several PCIe controllers. Each controller can be
272	  configured to Root Complex mode by clearing the corresponding bit of
273	  RCW[HOST_AGT_PEX].
274
275config PCI_IOMMU_EXTRA_MAPPINGS
276	bool "Support for specifying extra IOMMU mappings for PCI"
277	depends on PCIE_LAYERSCAPE_RC
278	help
279	  Enable support for specifying extra IOMMU mappings for PCI
280	  controllers through a special env var called "pci_iommu_extra" or
281	  through a device tree property named "pci-iommu-extra" placed in
282	  the node describing the PCI controller.
283	  The intent is to cover SR-IOV scenarios which need mappings for VFs
284	  and PCI hot-plug scenarios. More documentation can be found under:
285	    arch/arm/cpu/armv8/fsl-layerscape/doc/README.pci_iommu_extra
286
287config PCIE_LAYERSCAPE_EP
288	bool "Layerscape PCIe Endpoint mode support"
289	select PCIE_LAYERSCAPE
290	select PCI_ENDPOINT
291	help
292	  Enable Layerscape PCIe Endpoint mode driver support. The Layerscape
293	  SoC may have one or several PCIe controllers. Each controller can be
294	  configured to Endpoint mode by setting the corresponding bit of
295	  RCW[HOST_AGT_PEX].
296
297config PCIE_LAYERSCAPE_GEN4
298	bool "Layerscape Gen4 PCIe support"
299	help
300	  Support PCIe Gen4 on NXP Layerscape SoCs, which may have one or
301	  several PCIe controllers. The PCIe controller can work in RC or
302	  EP mode according to RCW[HOST_AGT_PEX] setting.
303
304config FSL_PCIE_COMPAT
305	string "PCIe compatible of Kernel DT"
306	depends on PCIE_LAYERSCAPE_RC || PCIE_LAYERSCAPE_GEN4
307	default "fsl,ls1012a-pcie" if ARCH_LS1012A
308	default "fsl,ls1028a-pcie" if ARCH_LS1028A
309	default "fsl,ls1043a-pcie" if ARCH_LS1043A
310	default "fsl,ls1046a-pcie" if ARCH_LS1046A
311	default "fsl,ls2080a-pcie" if ARCH_LS2080A
312	default "fsl,ls1088a-pcie" if ARCH_LS1088A
313	default "fsl,ls2088a-pcie" if ARCH_LX2160A || ARCH_LX2162A
314	default "fsl,ls1021a-pcie" if ARCH_LS1021A
315	help
316	  This compatible is used to find pci controller node in Kernel DT
317	  to complete fixup.
318
319config FSL_PCIE_EP_COMPAT
320	string "PCIe EP compatible of Kernel DT"
321	depends on PCIE_LAYERSCAPE_RC || PCIE_LAYERSCAPE_GEN4
322	default "fsl,ls-pcie-ep"
323	help
324	  This compatible is used to find pci controller ep node in Kernel DT
325	  to complete fixup.
326
327config PCIE_IMX
328	bool "i.MX PCIe support"
329	depends on ARCH_MX6
330
331config PCIE_INTEL_FPGA
332	bool "Intel FPGA PCIe support"
333	help
334	  Say Y here if you want to enable PCIe controller support on Intel
335	  FPGA, example Stratix 10.
336
337config PCIE_IPROC
338	bool "Iproc PCIe support"
339	help
340	  Broadcom iProc PCIe controller driver.
341	  Say Y here if you want to enable Broadcom iProc PCIe controller,
342
343config PCI_MVEBU
344	bool "Enable Kirkwood / Armada 370/XP/375/38x PCIe driver"
345	depends on (ARCH_KIRKWOOD || ARCH_MVEBU)
346	select MISC
347	select DM_RESET
348	select DM_GPIO
349	help
350	  Say Y here if you want to enable PCIe controller support on
351	  Kirkwood and Armada 370/XP/375/38x SoCs.
352
353config PCIE_DW_COMMON
354	bool
355
356config PCI_KEYSTONE
357	bool "TI Keystone PCIe controller"
358	select PCIE_DW_COMMON
359	help
360	  Say Y here if you want to enable PCI controller support on AM654 SoC.
361
362config PCIE_MEDIATEK
363	bool "MediaTek PCIe Gen2 controller"
364	depends on ARCH_MEDIATEK
365	help
366	  Say Y here if you want to enable Gen2 PCIe controller,
367	  which could be found on MT7623 SoC family.
368
369config PCIE_MEDIATEK_GEN3
370	bool "MediaTek PCIe Gen3 controller"
371	depends on ARCH_MEDIATEK
372	help
373	  Say Y here if you want to enable Gen3 PCIe controller,
374	  which could be found on the Mediatek Filogic SoC family.
375
376config PCIE_DW_MESON
377	bool "Amlogic Meson DesignWare based PCIe controller"
378	depends on ARCH_MESON
379	select PCIE_DW_COMMON
380	help
381	  Say Y here if you want to enable DW PCIe controller support on
382	  Amlogic SoCs.
383
384config PCIE_DW_QCOM
385	bool "Qualcomm DesignWare based PCIe controller"
386	depends on ARCH_SNAPDRAGON
387	select PCIE_DW_COMMON
388	help
389	  Say Y here if you want to enable DW PCIe controller support on
390	  Qualcomm SoCs.
391
392config PCI_RCAR_GEN4
393	bool "Renesas R-Car Gen4 PCIe driver"
394	depends on RCAR_GEN4
395	select DM_RESET
396	select DM_GPIO
397	select PCIE_DW_COMMON
398	help
399	  Say Y here if you want to enable PCIe controller support on
400	  Renesas R-Car Gen4 SoCs.
401
402config PCIE_ROCKCHIP
403	bool "Enable Rockchip PCIe driver"
404	depends on ARCH_ROCKCHIP
405	select PHY_ROCKCHIP_PCIE
406	default y if ROCKCHIP_RK3399
407	help
408	  Say Y here if you want to enable PCIe controller support on
409	  Rockchip SoCs.
410
411config PCIE_DW_ROCKCHIP
412	bool "Rockchip DesignWare based PCIe controller"
413	depends on ARCH_ROCKCHIP
414	select PCIE_DW_COMMON
415	select PHY_ROCKCHIP_SNPS_PCIE3
416	help
417	  Say Y here if you want to enable DW PCIe controller support on
418	  Rockchip SoCs.
419
420config PCI_BRCMSTB
421	bool "Broadcom STB PCIe controller"
422	depends on ARCH_BCM283X
423	help
424	  Say Y here if you want to enable support for PCIe controller
425	  on Broadcom set-top-box (STB) SoCs.
426	  This driver currently supports only BCM2711 SoC and RC mode
427	  of the controller.
428
429config PCIE_UNIPHIER
430	bool "Socionext UniPhier PCIe driver"
431	depends on ARCH_UNIPHIER
432	select PHY_UNIPHIER_PCIE
433	help
434	  Say Y here if you want to enable PCIe controller support on
435	  UniPhier SoCs.
436
437config PCIE_XILINX_NWL
438	bool "Xilinx NWL PCIe controller"
439	depends on ARCH_ZYNQMP
440	help
441	 Say 'Y' here if you want support for Xilinx / AMD NWL PCIe
442	 controller as Root Port.
443
444config PCIE_PLDA_COMMON
445	bool
446
447config PCIE_STARFIVE_JH7110
448	bool "Enable Starfive JH7110 PCIe driver"
449	select PCIE_PLDA_COMMON
450	imply STARFIVE_JH7110
451	imply CLK_JH7110
452	imply RESET_JH7110
453	help
454	  Say Y here if you want to enable PLDA XpressRich PCIe controller
455	  support on StarFive JH7110 SoC.
456
457config PCIE_DW_IMX
458	bool "i.MX DW PCIe controller support"
459	depends on ARCH_IMX8M
460	select PCIE_DW_COMMON
461	select DM_REGULATOR
462	select REGMAP
463	select SYSCON
464	help
465	  Say Y here if you want to enable DW PCIe controller support on
466	  iMX SoCs.
467
468endif
469