xref: /linux/drivers/pci/Kconfig (revision a474d3fbe287625c6c1cfc56c2a456c5fb7c479e)
17328c8f4SBjorn Helgaas# SPDX-License-Identifier: GPL-2.0
21da177e4SLinus Torvalds#
31da177e4SLinus Torvalds# PCI configuration
41da177e4SLinus Torvalds#
55f8fc432SBogicevic Sasa
6eb01d42aSChristoph Hellwig# select this to offer the PCI prompt
7eb01d42aSChristoph Hellwigconfig HAVE_PCI
8eb01d42aSChristoph Hellwig	bool
9eb01d42aSChristoph Hellwig
10eb01d42aSChristoph Hellwig# select this to unconditionally force on PCI support
11eb01d42aSChristoph Hellwigconfig FORCE_PCI
12eb01d42aSChristoph Hellwig	bool
13eb01d42aSChristoph Hellwig	select HAVE_PCI
14eb01d42aSChristoph Hellwig	select PCI
15eb01d42aSChristoph Hellwig
16eb01d42aSChristoph Hellwigmenuconfig PCI
17eb01d42aSChristoph Hellwig	bool "PCI support"
18eb01d42aSChristoph Hellwig	depends on HAVE_PCI
19eb01d42aSChristoph Hellwig	help
20eb01d42aSChristoph Hellwig	  This option enables support for the PCI local bus, including
21eb01d42aSChristoph Hellwig	  support for PCI-X and the foundations for PCI Express support.
22eb01d42aSChristoph Hellwig	  Say 'Y' here unless you know what you are doing.
23eb01d42aSChristoph Hellwig
242e8cb2cfSRob Herringif PCI
252e8cb2cfSRob Herring
262eac9c2dSChristoph Hellwigconfig PCI_DOMAINS
272eac9c2dSChristoph Hellwig	bool
282eac9c2dSChristoph Hellwig	depends on PCI
292eac9c2dSChristoph Hellwig
302eac9c2dSChristoph Hellwigconfig PCI_DOMAINS_GENERIC
312eac9c2dSChristoph Hellwig	bool
322eac9c2dSChristoph Hellwig	select PCI_DOMAINS
332eac9c2dSChristoph Hellwig
3420f1b79dSChristoph Hellwigconfig PCI_SYSCALL
3520f1b79dSChristoph Hellwig	bool
3620f1b79dSChristoph Hellwig
375f8fc432SBogicevic Sasasource "drivers/pci/pcie/Kconfig"
385f8fc432SBogicevic Sasa
391da177e4SLinus Torvaldsconfig PCI_MSI
401da177e4SLinus Torvalds	bool "Message Signaled Interrupts (MSI and MSI-X)"
41*a474d3fbSThomas Gleixner	select GENERIC_MSI_IRQ_DOMAIN
4238b6a1cfSJiang Liu	select GENERIC_MSI_IRQ
431da177e4SLinus Torvalds	help
441da177e4SLinus Torvalds	   This allows device drivers to enable MSI (Message Signaled
451da177e4SLinus Torvalds	   Interrupts).  Message Signaled Interrupts enable a device to
461da177e4SLinus Torvalds	   generate an interrupt using an inbound Memory Write on its
471da177e4SLinus Torvalds	   PCI bus instead of asserting a device IRQ pin.
481da177e4SLinus Torvalds
49309e57dfSMatthew Wilcox	   Use of PCI MSI interrupts can be disabled at kernel boot time
50309e57dfSMatthew Wilcox	   by using the 'pci=nomsi' option.  This disables MSI for the
51309e57dfSMatthew Wilcox	   entire system.
52309e57dfSMatthew Wilcox
533196180aSJesse Barnes	   If you don't know what to do here, say Y.
541da177e4SLinus Torvalds
55077ee78eSThomas Gleixnerconfig PCI_MSI_ARCH_FALLBACKS
56077ee78eSThomas Gleixner	bool
57077ee78eSThomas Gleixner
5803ea2263SRandy Dunlapconfig PCI_QUIRKS
5903ea2263SRandy Dunlap	default y
6003ea2263SRandy Dunlap	bool "Enable PCI quirk workarounds" if EXPERT
6103ea2263SRandy Dunlap	help
6203ea2263SRandy Dunlap	  This enables workarounds for various PCI chipset bugs/quirks.
6303ea2263SRandy Dunlap	  Disable this only if your target machine is unaffected by PCI
6403ea2263SRandy Dunlap	  quirks.
6503ea2263SRandy Dunlap
661da177e4SLinus Torvaldsconfig PCI_DEBUG
671da177e4SLinus Torvalds	bool "PCI Debugging"
682e8cb2cfSRob Herring	depends on DEBUG_KERNEL
691da177e4SLinus Torvalds	help
701da177e4SLinus Torvalds	  Say Y here if you want the PCI core to produce a bunch of debug
711da177e4SLinus Torvalds	  messages to the system log.  Select this if you are having a
721da177e4SLinus Torvalds	  problem with PCI support and want to see more of what is going on.
731da177e4SLinus Torvalds
741da177e4SLinus Torvalds	  When in doubt, say N.
751da177e4SLinus Torvalds
76b07f2ebcSYinghai Luconfig PCI_REALLOC_ENABLE_AUTO
77b07f2ebcSYinghai Lu	bool "Enable PCI resource re-allocation detection"
78ad581f86SSascha El-Sharkawy	depends on PCI_IOV
79b07f2ebcSYinghai Lu	help
80b07f2ebcSYinghai Lu	  Say Y here if you want the PCI core to detect if PCI resource
81b07f2ebcSYinghai Lu	  re-allocation needs to be enabled. You can always use pci=realloc=on
82ad581f86SSascha El-Sharkawy	  or pci=realloc=off to override it.  It will automatically
83ad581f86SSascha El-Sharkawy	  re-allocate PCI resources if SR-IOV BARs have not been allocated by
84ad581f86SSascha El-Sharkawy	  the BIOS.
85b07f2ebcSYinghai Lu
86b07f2ebcSYinghai Lu	  When in doubt, say N.
87b07f2ebcSYinghai Lu
88c70e0d9dSChris Wrightconfig PCI_STUB
89c70e0d9dSChris Wright	tristate "PCI Stub driver"
90c70e0d9dSChris Wright	help
91c70e0d9dSChris Wright	  Say Y or M here if you want be able to reserve a PCI device
92c70e0d9dSChris Wright	  when it is going to be assigned to a guest operating system.
93c70e0d9dSChris Wright
94c70e0d9dSChris Wright	  When in doubt, say N.
95c70e0d9dSChris Wright
96a8ccf8a6SAlexander Duyckconfig PCI_PF_STUB
97a8ccf8a6SAlexander Duyck	tristate "PCI PF Stub driver"
98a8ccf8a6SAlexander Duyck	depends on PCI_IOV
99a8ccf8a6SAlexander Duyck	help
100a8ccf8a6SAlexander Duyck	  Say Y or M here if you want to enable support for devices that
1014a57f58fSRandy Dunlap	  require SR-IOV support, while at the same time the PF (Physical
1024a57f58fSRandy Dunlap	  Function) itself is not providing any actual services on the
1034a57f58fSRandy Dunlap	  host itself such as storage or networking.
104a8ccf8a6SAlexander Duyck
105a8ccf8a6SAlexander Duyck	  When in doubt, say N.
106a8ccf8a6SAlexander Duyck
107956a9202SRyan Wilsonconfig XEN_PCIDEV_FRONTEND
108956a9202SRyan Wilson	tristate "Xen PCI Frontend"
109e243ae95SJan Beulich	depends on XEN_PV
110956a9202SRyan Wilson	select PCI_XEN
111fce263c1SKonrad Rzeszutek Wilk	select XEN_XENBUS_FRONTEND
112956a9202SRyan Wilson	default y
113956a9202SRyan Wilson	help
114956a9202SRyan Wilson	  The PCI device frontend driver allows the kernel to import arbitrary
115956a9202SRyan Wilson	  PCI devices from a PCI backend to support PCI driver domains.
116956a9202SRyan Wilson
117db3c33c6SJoerg Roedelconfig PCI_ATS
118db3c33c6SJoerg Roedel	bool
119db3c33c6SJoerg Roedel
1209d24322eSJonathan Cameronconfig PCI_DOE
1219d24322eSJonathan Cameron	bool
1229d24322eSJonathan Cameron
12335ff9477SJayachandran Cconfig PCI_ECAM
12435ff9477SJayachandran C	bool
12535ff9477SJayachandran C
126714fe383SThomas Gleixnerconfig PCI_LOCKLESS_CONFIG
127714fe383SThomas Gleixner	bool
128714fe383SThomas Gleixner
12923a5fba4SThomas Petazzoniconfig PCI_BRIDGE_EMUL
13023a5fba4SThomas Petazzoni	bool
13123a5fba4SThomas Petazzoni
132d1b054daSYu Zhaoconfig PCI_IOV
133d1b054daSYu Zhao	bool "PCI IOV support"
134db3c33c6SJoerg Roedel	select PCI_ATS
135d1b054daSYu Zhao	help
136d1b054daSYu Zhao	  I/O Virtualization is a PCI feature supported by some devices
137d1b054daSYu Zhao	  which allows them to create virtual devices which share their
138d1b054daSYu Zhao	  physical resources.
139d1b054daSYu Zhao
140d1b054daSYu Zhao	  If unsure, say N.
141204d49a5SBjorn Helgaas
142c320b976SJoerg Roedelconfig PCI_PRI
143c320b976SJoerg Roedel	bool "PCI PRI support"
144c320b976SJoerg Roedel	select PCI_ATS
145c320b976SJoerg Roedel	help
146c320b976SJoerg Roedel	  PRI is the PCI Page Request Interface. It allows PCI devices that are
147c320b976SJoerg Roedel	  behind an IOMMU to recover from page faults.
148c320b976SJoerg Roedel
149c320b976SJoerg Roedel	  If unsure, say N.
150c320b976SJoerg Roedel
151086ac11fSJoerg Roedelconfig PCI_PASID
152086ac11fSJoerg Roedel	bool "PCI PASID support"
153086ac11fSJoerg Roedel	select PCI_ATS
154086ac11fSJoerg Roedel	help
155086ac11fSJoerg Roedel	  Process Address Space Identifiers (PASIDs) can be used by PCI devices
156086ac11fSJoerg Roedel	  to access more than one IO address space at the same time. To make
157086ac11fSJoerg Roedel	  use of this feature an IOMMU is required which also supports PASIDs.
158086ac11fSJoerg Roedel	  Select this option if you have such an IOMMU and want to compile the
159086ac11fSJoerg Roedel	  driver for it into your kernel.
160086ac11fSJoerg Roedel
161086ac11fSJoerg Roedel	  If unsure, say N.
162086ac11fSJoerg Roedel
16352916982SLogan Gunthorpeconfig PCI_P2PDMA
16452916982SLogan Gunthorpe	bool "PCI peer-to-peer transfer support"
1652e8cb2cfSRob Herring	depends on ZONE_DEVICE
16642399301SLogan Gunthorpe	#
16742399301SLogan Gunthorpe	# The need for the scatterlist DMA bus address flag means PCI P2PDMA
16842399301SLogan Gunthorpe	# requires 64bit
16942399301SLogan Gunthorpe	#
17042399301SLogan Gunthorpe	depends on 64BIT
17152916982SLogan Gunthorpe	select GENERIC_ALLOCATOR
17252916982SLogan Gunthorpe	help
17352916982SLogan Gunthorpe	  Enableѕ drivers to do PCI peer-to-peer transactions to and from
17452916982SLogan Gunthorpe	  BARs that are exposed in other devices that are the part of
17552916982SLogan Gunthorpe	  the hierarchy where peer-to-peer DMA is guaranteed by the PCI
17652916982SLogan Gunthorpe	  specification to work (ie. anything below a single PCI bridge).
17752916982SLogan Gunthorpe
17852916982SLogan Gunthorpe	  Many PCIe root complexes do not support P2P transactions and
17952916982SLogan Gunthorpe	  it's hard to tell which support it at all, so at this time,
180d1bbf38aSBjorn Helgaas	  P2P DMA transactions must be between devices behind the same root
18152916982SLogan Gunthorpe	  port.
18252916982SLogan Gunthorpe
18352916982SLogan Gunthorpe	  If unsure, say N.
18452916982SLogan Gunthorpe
1858a226e00SRandy Dunlapconfig PCI_LABEL
1868a226e00SRandy Dunlap	def_bool y if (DMI || ACPI)
1878a226e00SRandy Dunlap	select NLS
18845361a4fSThomas Petazzoni
1894daace0dSJake Oshinsconfig PCI_HYPERV
1904daace0dSJake Oshins	tristate "Hyper-V PCI Frontend"
191*a474d3fbSThomas Gleixner	depends on ((X86 && X86_64) || ARM64) && HYPERV && PCI_MSI && SYSFS
192348dd93eSHaiyang Zhang	select PCI_HYPERV_INTERFACE
1934daace0dSJake Oshins	help
1944daace0dSJake Oshins	  The PCI device frontend driver allows the kernel to import arbitrary
1954daace0dSJake Oshins	  PCI devices from a PCI backend to support PCI driver domains.
1964daace0dSJake Oshins
197b0e85c3cSJim Quinlanchoice
198b0e85c3cSJim Quinlan	prompt "PCI Express hierarchy optimization setting"
199b0e85c3cSJim Quinlan	default PCIE_BUS_DEFAULT
200b0e85c3cSJim Quinlan	depends on PCI && EXPERT
201b0e85c3cSJim Quinlan	help
202b0e85c3cSJim Quinlan	  MPS (Max Payload Size) and MRRS (Max Read Request Size) are PCIe
203b0e85c3cSJim Quinlan	  device parameters that affect performance and the ability to
204b0e85c3cSJim Quinlan	  support hotplug and peer-to-peer DMA.
205b0e85c3cSJim Quinlan
206b0e85c3cSJim Quinlan	  The following choices set the MPS and MRRS optimization strategy
207b0e85c3cSJim Quinlan	  at compile-time.  The choices are the same as those offered for
208b0e85c3cSJim Quinlan	  the kernel command-line parameter 'pci', i.e.,
209b0e85c3cSJim Quinlan	  'pci=pcie_bus_tune_off', 'pci=pcie_bus_safe',
210b0e85c3cSJim Quinlan	  'pci=pcie_bus_perf', and 'pci=pcie_bus_peer2peer'.
211b0e85c3cSJim Quinlan
212b0e85c3cSJim Quinlan	  This is a compile-time setting and can be overridden by the above
213b0e85c3cSJim Quinlan	  command-line parameters.  If unsure, choose PCIE_BUS_DEFAULT.
214b0e85c3cSJim Quinlan
215b0e85c3cSJim Quinlanconfig PCIE_BUS_TUNE_OFF
216b0e85c3cSJim Quinlan	bool "Tune Off"
217b0e85c3cSJim Quinlan	depends on PCI
218b0e85c3cSJim Quinlan	help
219b0e85c3cSJim Quinlan	  Use the BIOS defaults; don't touch MPS at all.  This is the same
220b0e85c3cSJim Quinlan	  as booting with 'pci=pcie_bus_tune_off'.
221b0e85c3cSJim Quinlan
222b0e85c3cSJim Quinlanconfig PCIE_BUS_DEFAULT
223b0e85c3cSJim Quinlan	bool "Default"
224b0e85c3cSJim Quinlan	depends on PCI
225b0e85c3cSJim Quinlan	help
226b0e85c3cSJim Quinlan	  Default choice; ensure that the MPS matches upstream bridge.
227b0e85c3cSJim Quinlan
228b0e85c3cSJim Quinlanconfig PCIE_BUS_SAFE
229b0e85c3cSJim Quinlan	bool "Safe"
230b0e85c3cSJim Quinlan	depends on PCI
231b0e85c3cSJim Quinlan	help
232b0e85c3cSJim Quinlan	  Use largest MPS that boot-time devices support.  If you have a
233b0e85c3cSJim Quinlan	  closed system with no possibility of adding new devices, this
234b0e85c3cSJim Quinlan	  will use the largest MPS that's supported by all devices.  This
235b0e85c3cSJim Quinlan	  is the same as booting with 'pci=pcie_bus_safe'.
236b0e85c3cSJim Quinlan
237b0e85c3cSJim Quinlanconfig PCIE_BUS_PERFORMANCE
238b0e85c3cSJim Quinlan	bool "Performance"
239b0e85c3cSJim Quinlan	depends on PCI
240b0e85c3cSJim Quinlan	help
241b0e85c3cSJim Quinlan	  Use MPS and MRRS for best performance.  Ensure that a given
242b0e85c3cSJim Quinlan	  device's MPS is no larger than its parent MPS, which allows us to
243b0e85c3cSJim Quinlan	  keep all switches/bridges to the max MPS supported by their
244b0e85c3cSJim Quinlan	  parent.  This is the same as booting with 'pci=pcie_bus_perf'.
245b0e85c3cSJim Quinlan
246b0e85c3cSJim Quinlanconfig PCIE_BUS_PEER2PEER
247b0e85c3cSJim Quinlan	bool "Peer2peer"
248b0e85c3cSJim Quinlan	depends on PCI
249b0e85c3cSJim Quinlan	help
250b0e85c3cSJim Quinlan	  Set MPS = 128 for all devices.  MPS configuration effected by the
251b0e85c3cSJim Quinlan	  other options could cause the MPS on one root port to be
252b0e85c3cSJim Quinlan	  different than that of the MPS on another, which may cause
253b0e85c3cSJim Quinlan	  hot-added devices or peer-to-peer DMA to fail.  Set MPS to the
254b0e85c3cSJim Quinlan	  smallest possible value (128B) system-wide to avoid these issues.
255b0e85c3cSJim Quinlan	  This is the same as booting with 'pci=pcie_bus_peer2peer'.
256b0e85c3cSJim Quinlan
257b0e85c3cSJim Quinlanendchoice
258b0e85c3cSJim Quinlan
2591d38fe6eSBjorn Helgaasconfig VGA_ARB
2601d38fe6eSBjorn Helgaas	bool "VGA Arbitration" if EXPERT
2611d38fe6eSBjorn Helgaas	default y
2621d38fe6eSBjorn Helgaas	depends on (PCI && !S390)
2631d38fe6eSBjorn Helgaas	help
2641d38fe6eSBjorn Helgaas	  Some "legacy" VGA devices implemented on PCI typically have the same
2651d38fe6eSBjorn Helgaas	  hard-decoded addresses as they did on ISA. When multiple PCI devices
2661d38fe6eSBjorn Helgaas	  are accessed at same time they need some kind of coordination. Please
2671d38fe6eSBjorn Helgaas	  see Documentation/gpu/vgaarbiter.rst for more details. Select this to
2681d38fe6eSBjorn Helgaas	  enable VGA arbiter.
2691d38fe6eSBjorn Helgaas
2701d38fe6eSBjorn Helgaasconfig VGA_ARB_MAX_GPUS
2711d38fe6eSBjorn Helgaas	int "Maximum number of GPUs"
2721d38fe6eSBjorn Helgaas	default 16
2731d38fe6eSBjorn Helgaas	depends on VGA_ARB
2741d38fe6eSBjorn Helgaas	help
2751d38fe6eSBjorn Helgaas	  Reserves space in the kernel to maintain resource locking for
2761d38fe6eSBjorn Helgaas	  multiple GPUS.  The overhead for each GPU is very small.
2771d38fe6eSBjorn Helgaas
27830b5b880STero Roponensource "drivers/pci/hotplug/Kconfig"
2796e0832faSShawn Linsource "drivers/pci/controller/Kconfig"
2805e8cb403SKishon Vijay Abraham Isource "drivers/pci/endpoint/Kconfig"
281080b47deSLogan Gunthorpesource "drivers/pci/switch/Kconfig"
2822e8cb2cfSRob Herring
2832e8cb2cfSRob Herringendif
284