1 # SPDX-License-Identifier: GPL-2.0
2 #
3 # PCI configuration
4 #
5 
6 # select this to offer the PCI prompt
7 config HAVE_PCI
8 	bool
9 
10 # select this to unconditionally force on PCI support
11 config FORCE_PCI
12 	bool
13 	select HAVE_PCI
14 	select PCI
15 
16 # select this to provide a generic PCI iomap,
17 # without PCI itself having to be defined
18 config GENERIC_PCI_IOMAP
19 	bool
20 
21 menuconfig PCI
22 	bool "PCI support"
23 	depends on HAVE_PCI
24 	help
25 	  This option enables support for the PCI local bus, including
26 	  support for PCI-X and the foundations for PCI Express support.
27 	  Say 'Y' here unless you know what you are doing.
28 
29 if PCI
30 
31 config PCI_DOMAINS
32 	bool
33 	depends on PCI
34 
35 config PCI_DOMAINS_GENERIC
36 	bool
37 	select PCI_DOMAINS
38 
39 config PCI_SYSCALL
40 	bool
41 
42 source "drivers/pci/pcie/Kconfig"
43 
44 config PCI_MSI
45 	bool "Message Signaled Interrupts (MSI and MSI-X)"
46 	select GENERIC_MSI_IRQ
47 	help
48 	   This allows device drivers to enable MSI (Message Signaled
49 	   Interrupts).  Message Signaled Interrupts enable a device to
50 	   generate an interrupt using an inbound Memory Write on its
51 	   PCI bus instead of asserting a device IRQ pin.
52 
53 	   Use of PCI MSI interrupts can be disabled at kernel boot time
54 	   by using the 'pci=nomsi' option.  This disables MSI for the
55 	   entire system.
56 
57 	   If you don't know what to do here, say Y.
58 
59 config PCI_MSI_ARCH_FALLBACKS
60 	bool
61 
62 config PCI_QUIRKS
63 	default y
64 	bool "Enable PCI quirk workarounds" if EXPERT
65 	help
66 	  This enables workarounds for various PCI chipset bugs/quirks.
67 	  Disable this only if your target machine is unaffected by PCI
68 	  quirks.
69 
70 config PCI_DEBUG
71 	bool "PCI Debugging"
72 	depends on DEBUG_KERNEL
73 	help
74 	  Say Y here if you want the PCI core to produce a bunch of debug
75 	  messages to the system log.  Select this if you are having a
76 	  problem with PCI support and want to see more of what is going on.
77 
78 	  When in doubt, say N.
79 
80 config PCI_REALLOC_ENABLE_AUTO
81 	bool "Enable PCI resource re-allocation detection"
82 	depends on PCI_IOV
83 	help
84 	  Say Y here if you want the PCI core to detect if PCI resource
85 	  re-allocation needs to be enabled. You can always use pci=realloc=on
86 	  or pci=realloc=off to override it.  It will automatically
87 	  re-allocate PCI resources if SR-IOV BARs have not been allocated by
88 	  the BIOS.
89 
90 	  When in doubt, say N.
91 
92 config PCI_STUB
93 	tristate "PCI Stub driver"
94 	help
95 	  Say Y or M here if you want be able to reserve a PCI device
96 	  when it is going to be assigned to a guest operating system.
97 
98 	  When in doubt, say N.
99 
100 config PCI_PF_STUB
101 	tristate "PCI PF Stub driver"
102 	depends on PCI_IOV
103 	help
104 	  Say Y or M here if you want to enable support for devices that
105 	  require SR-IOV support, while at the same time the PF (Physical
106 	  Function) itself is not providing any actual services on the
107 	  host itself such as storage or networking.
108 
109 	  When in doubt, say N.
110 
111 config XEN_PCIDEV_FRONTEND
112 	tristate "Xen PCI Frontend"
113 	depends on XEN_PV
114 	select PCI_XEN
115 	select XEN_XENBUS_FRONTEND
116 	default y
117 	help
118 	  The PCI device frontend driver allows the kernel to import arbitrary
119 	  PCI devices from a PCI backend to support PCI driver domains.
120 
121 config PCI_ATS
122 	bool
123 
124 config PCI_DOE
125 	bool
126 
127 config PCI_ECAM
128 	bool
129 
130 config PCI_LOCKLESS_CONFIG
131 	bool
132 
133 config PCI_BRIDGE_EMUL
134 	bool
135 
136 config PCI_IOV
137 	bool "PCI IOV support"
138 	select PCI_ATS
139 	help
140 	  I/O Virtualization is a PCI feature supported by some devices
141 	  which allows them to create virtual devices which share their
142 	  physical resources.
143 
144 	  If unsure, say N.
145 
146 config PCI_NPEM
147 	bool "Native PCIe Enclosure Management"
148 	depends on LEDS_CLASS=y
149 	help
150 	  Support for Native PCIe Enclosure Management. It allows managing LED
151 	  indications in storage enclosures. Enclosure must support following
152 	  indications: OK, Locate, Fail, Rebuild, other indications are
153 	  optional.
154 
155 config PCI_PRI
156 	bool "PCI PRI support"
157 	select PCI_ATS
158 	help
159 	  PRI is the PCI Page Request Interface. It allows PCI devices that are
160 	  behind an IOMMU to recover from page faults.
161 
162 	  If unsure, say N.
163 
164 config PCI_PASID
165 	bool "PCI PASID support"
166 	select PCI_ATS
167 	help
168 	  Process Address Space Identifiers (PASIDs) can be used by PCI devices
169 	  to access more than one IO address space at the same time. To make
170 	  use of this feature an IOMMU is required which also supports PASIDs.
171 	  Select this option if you have such an IOMMU and want to compile the
172 	  driver for it into your kernel.
173 
174 	  If unsure, say N.
175 
176 config PCI_P2PDMA
177 	bool "PCI peer-to-peer transfer support"
178 	depends on ZONE_DEVICE
179 	#
180 	# The need for the scatterlist DMA bus address flag means PCI P2PDMA
181 	# requires 64bit
182 	#
183 	depends on 64BIT
184 	select GENERIC_ALLOCATOR
185 	select NEED_SG_DMA_FLAGS
186 	help
187 	  Enables drivers to do PCI peer-to-peer transactions to and from
188 	  BARs that are exposed in other devices that are the part of
189 	  the hierarchy where peer-to-peer DMA is guaranteed by the PCI
190 	  specification to work (ie. anything below a single PCI bridge).
191 
192 	  Many PCIe root complexes do not support P2P transactions and
193 	  it's hard to tell which support it at all, so at this time,
194 	  P2P DMA transactions must be between devices behind the same root
195 	  port.
196 
197 	  If unsure, say N.
198 
199 config PCI_LABEL
200 	def_bool y if (DMI || ACPI)
201 	select NLS
202 
203 config PCI_HYPERV
204 	tristate "Hyper-V PCI Frontend"
205 	depends on ((X86 && X86_64) || ARM64) && HYPERV && PCI_MSI && SYSFS
206 	select PCI_HYPERV_INTERFACE
207 	help
208 	  The PCI device frontend driver allows the kernel to import arbitrary
209 	  PCI devices from a PCI backend to support PCI driver domains.
210 
211 config PCI_DYNAMIC_OF_NODES
212 	bool "Create Device tree nodes for PCI devices"
213 	depends on OF_IRQ
214 	select OF_DYNAMIC
215 	help
216 	  This option enables support for generating device tree nodes for some
217 	  PCI devices. Thus, the driver of this kind can load and overlay
218 	  flattened device tree for its downstream devices.
219 
220 	  Once this option is selected, the device tree nodes will be generated
221 	  for all PCI bridges.
222 
223 choice
224 	prompt "PCI Express hierarchy optimization setting"
225 	default PCIE_BUS_DEFAULT
226 	depends on PCI && EXPERT
227 	help
228 	  MPS (Max Payload Size) and MRRS (Max Read Request Size) are PCIe
229 	  device parameters that affect performance and the ability to
230 	  support hotplug and peer-to-peer DMA.
231 
232 	  The following choices set the MPS and MRRS optimization strategy
233 	  at compile-time.  The choices are the same as those offered for
234 	  the kernel command-line parameter 'pci', i.e.,
235 	  'pci=pcie_bus_tune_off', 'pci=pcie_bus_safe',
236 	  'pci=pcie_bus_perf', and 'pci=pcie_bus_peer2peer'.
237 
238 	  This is a compile-time setting and can be overridden by the above
239 	  command-line parameters.  If unsure, choose PCIE_BUS_DEFAULT.
240 
241 config PCIE_BUS_TUNE_OFF
242 	bool "Tune Off"
243 	depends on PCI
244 	help
245 	  Use the BIOS defaults; don't touch MPS at all.  This is the same
246 	  as booting with 'pci=pcie_bus_tune_off'.
247 
248 config PCIE_BUS_DEFAULT
249 	bool "Default"
250 	depends on PCI
251 	help
252 	  Default choice; ensure that the MPS matches upstream bridge.
253 
254 config PCIE_BUS_SAFE
255 	bool "Safe"
256 	depends on PCI
257 	help
258 	  Use largest MPS that boot-time devices support.  If you have a
259 	  closed system with no possibility of adding new devices, this
260 	  will use the largest MPS that's supported by all devices.  This
261 	  is the same as booting with 'pci=pcie_bus_safe'.
262 
263 config PCIE_BUS_PERFORMANCE
264 	bool "Performance"
265 	depends on PCI
266 	help
267 	  Use MPS and MRRS for best performance.  Ensure that a given
268 	  device's MPS is no larger than its parent MPS, which allows us to
269 	  keep all switches/bridges to the max MPS supported by their
270 	  parent.  This is the same as booting with 'pci=pcie_bus_perf'.
271 
272 config PCIE_BUS_PEER2PEER
273 	bool "Peer2peer"
274 	depends on PCI
275 	help
276 	  Set MPS = 128 for all devices.  MPS configuration effected by the
277 	  other options could cause the MPS on one root port to be
278 	  different than that of the MPS on another, which may cause
279 	  hot-added devices or peer-to-peer DMA to fail.  Set MPS to the
280 	  smallest possible value (128B) system-wide to avoid these issues.
281 	  This is the same as booting with 'pci=pcie_bus_peer2peer'.
282 
283 endchoice
284 
285 config VGA_ARB
286 	bool "VGA Arbitration" if EXPERT
287 	default y
288 	depends on (PCI && !S390)
289 	help
290 	  Some "legacy" VGA devices implemented on PCI typically have the same
291 	  hard-decoded addresses as they did on ISA. When multiple PCI devices
292 	  are accessed at same time they need some kind of coordination. Please
293 	  see Documentation/gpu/vgaarbiter.rst for more details. Select this to
294 	  enable VGA arbiter.
295 
296 config VGA_ARB_MAX_GPUS
297 	int "Maximum number of GPUs"
298 	default 16
299 	depends on VGA_ARB
300 	help
301 	  Reserves space in the kernel to maintain resource locking for
302 	  multiple GPUS.  The overhead for each GPU is very small.
303 
304 source "drivers/pci/hotplug/Kconfig"
305 source "drivers/pci/controller/Kconfig"
306 source "drivers/pci/endpoint/Kconfig"
307 source "drivers/pci/switch/Kconfig"
308 source "drivers/pci/pwrctl/Kconfig"
309 
310 endif
311