ae87402752
The entirety of pci_iomap.c is guarded by an #ifdef CONFIG_PCI. It, consequently, does not belong to lib/ because it is not generic infrastructure. Move pci_iomap.c to drivers/pci/ and implement the necessary changes to Makefiles and Kconfigs. Update MAINTAINERS file. Update Documentation. Link: https://lore.kernel.org/r/20240131090023.12331-3-pstanner@redhat.com [bhelgaas: squash in https://lore.kernel.org/r/20240212150934.24559-1-pstanner@redhat.com] Suggested-by: Danilo Krummrich <dakr@redhat.com> Signed-off-by: Philipp Stanner <pstanner@redhat.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Arnd Bergmann <arnd@arndb.de>
301 lines
8.3 KiB
Plaintext
301 lines
8.3 KiB
Plaintext
# SPDX-License-Identifier: GPL-2.0
|
|
#
|
|
# PCI configuration
|
|
#
|
|
|
|
# select this to offer the PCI prompt
|
|
config HAVE_PCI
|
|
bool
|
|
|
|
# select this to unconditionally force on PCI support
|
|
config FORCE_PCI
|
|
bool
|
|
select HAVE_PCI
|
|
select PCI
|
|
|
|
# select this to provide a generic PCI iomap,
|
|
# without PCI itself having to be defined
|
|
config GENERIC_PCI_IOMAP
|
|
bool
|
|
|
|
menuconfig PCI
|
|
bool "PCI support"
|
|
depends on HAVE_PCI
|
|
help
|
|
This option enables support for the PCI local bus, including
|
|
support for PCI-X and the foundations for PCI Express support.
|
|
Say 'Y' here unless you know what you are doing.
|
|
|
|
if PCI
|
|
|
|
config PCI_DOMAINS
|
|
bool
|
|
depends on PCI
|
|
|
|
config PCI_DOMAINS_GENERIC
|
|
bool
|
|
select PCI_DOMAINS
|
|
|
|
config PCI_SYSCALL
|
|
bool
|
|
|
|
source "drivers/pci/pcie/Kconfig"
|
|
|
|
config PCI_MSI
|
|
bool "Message Signaled Interrupts (MSI and MSI-X)"
|
|
select GENERIC_MSI_IRQ
|
|
help
|
|
This allows device drivers to enable MSI (Message Signaled
|
|
Interrupts). Message Signaled Interrupts enable a device to
|
|
generate an interrupt using an inbound Memory Write on its
|
|
PCI bus instead of asserting a device IRQ pin.
|
|
|
|
Use of PCI MSI interrupts can be disabled at kernel boot time
|
|
by using the 'pci=nomsi' option. This disables MSI for the
|
|
entire system.
|
|
|
|
If you don't know what to do here, say Y.
|
|
|
|
config PCI_MSI_ARCH_FALLBACKS
|
|
bool
|
|
|
|
config PCI_QUIRKS
|
|
default y
|
|
bool "Enable PCI quirk workarounds" if EXPERT
|
|
help
|
|
This enables workarounds for various PCI chipset bugs/quirks.
|
|
Disable this only if your target machine is unaffected by PCI
|
|
quirks.
|
|
|
|
config PCI_DEBUG
|
|
bool "PCI Debugging"
|
|
depends on DEBUG_KERNEL
|
|
help
|
|
Say Y here if you want the PCI core to produce a bunch of debug
|
|
messages to the system log. Select this if you are having a
|
|
problem with PCI support and want to see more of what is going on.
|
|
|
|
When in doubt, say N.
|
|
|
|
config PCI_REALLOC_ENABLE_AUTO
|
|
bool "Enable PCI resource re-allocation detection"
|
|
depends on PCI_IOV
|
|
help
|
|
Say Y here if you want the PCI core to detect if PCI resource
|
|
re-allocation needs to be enabled. You can always use pci=realloc=on
|
|
or pci=realloc=off to override it. It will automatically
|
|
re-allocate PCI resources if SR-IOV BARs have not been allocated by
|
|
the BIOS.
|
|
|
|
When in doubt, say N.
|
|
|
|
config PCI_STUB
|
|
tristate "PCI Stub driver"
|
|
help
|
|
Say Y or M here if you want be able to reserve a PCI device
|
|
when it is going to be assigned to a guest operating system.
|
|
|
|
When in doubt, say N.
|
|
|
|
config PCI_PF_STUB
|
|
tristate "PCI PF Stub driver"
|
|
depends on PCI_IOV
|
|
help
|
|
Say Y or M here if you want to enable support for devices that
|
|
require SR-IOV support, while at the same time the PF (Physical
|
|
Function) itself is not providing any actual services on the
|
|
host itself such as storage or networking.
|
|
|
|
When in doubt, say N.
|
|
|
|
config XEN_PCIDEV_FRONTEND
|
|
tristate "Xen PCI Frontend"
|
|
depends on XEN_PV
|
|
select PCI_XEN
|
|
select XEN_XENBUS_FRONTEND
|
|
default y
|
|
help
|
|
The PCI device frontend driver allows the kernel to import arbitrary
|
|
PCI devices from a PCI backend to support PCI driver domains.
|
|
|
|
config PCI_ATS
|
|
bool
|
|
|
|
config PCI_DOE
|
|
bool
|
|
|
|
config PCI_ECAM
|
|
bool
|
|
|
|
config PCI_LOCKLESS_CONFIG
|
|
bool
|
|
|
|
config PCI_BRIDGE_EMUL
|
|
bool
|
|
|
|
config PCI_IOV
|
|
bool "PCI IOV support"
|
|
select PCI_ATS
|
|
help
|
|
I/O Virtualization is a PCI feature supported by some devices
|
|
which allows them to create virtual devices which share their
|
|
physical resources.
|
|
|
|
If unsure, say N.
|
|
|
|
config PCI_PRI
|
|
bool "PCI PRI support"
|
|
select PCI_ATS
|
|
help
|
|
PRI is the PCI Page Request Interface. It allows PCI devices that are
|
|
behind an IOMMU to recover from page faults.
|
|
|
|
If unsure, say N.
|
|
|
|
config PCI_PASID
|
|
bool "PCI PASID support"
|
|
select PCI_ATS
|
|
help
|
|
Process Address Space Identifiers (PASIDs) can be used by PCI devices
|
|
to access more than one IO address space at the same time. To make
|
|
use of this feature an IOMMU is required which also supports PASIDs.
|
|
Select this option if you have such an IOMMU and want to compile the
|
|
driver for it into your kernel.
|
|
|
|
If unsure, say N.
|
|
|
|
config PCI_P2PDMA
|
|
bool "PCI peer-to-peer transfer support"
|
|
depends on ZONE_DEVICE
|
|
#
|
|
# The need for the scatterlist DMA bus address flag means PCI P2PDMA
|
|
# requires 64bit
|
|
#
|
|
depends on 64BIT
|
|
select GENERIC_ALLOCATOR
|
|
select NEED_SG_DMA_FLAGS
|
|
help
|
|
Enables drivers to do PCI peer-to-peer transactions to and from
|
|
BARs that are exposed in other devices that are the part of
|
|
the hierarchy where peer-to-peer DMA is guaranteed by the PCI
|
|
specification to work (ie. anything below a single PCI bridge).
|
|
|
|
Many PCIe root complexes do not support P2P transactions and
|
|
it's hard to tell which support it at all, so at this time,
|
|
P2P DMA transactions must be between devices behind the same root
|
|
port.
|
|
|
|
If unsure, say N.
|
|
|
|
config PCI_LABEL
|
|
def_bool y if (DMI || ACPI)
|
|
select NLS
|
|
|
|
config PCI_HYPERV
|
|
tristate "Hyper-V PCI Frontend"
|
|
depends on ((X86 && X86_64) || ARM64) && HYPERV && PCI_MSI && SYSFS
|
|
select PCI_HYPERV_INTERFACE
|
|
help
|
|
The PCI device frontend driver allows the kernel to import arbitrary
|
|
PCI devices from a PCI backend to support PCI driver domains.
|
|
|
|
config PCI_DYNAMIC_OF_NODES
|
|
bool "Create Device tree nodes for PCI devices"
|
|
depends on OF_IRQ
|
|
select OF_DYNAMIC
|
|
help
|
|
This option enables support for generating device tree nodes for some
|
|
PCI devices. Thus, the driver of this kind can load and overlay
|
|
flattened device tree for its downstream devices.
|
|
|
|
Once this option is selected, the device tree nodes will be generated
|
|
for all PCI bridges.
|
|
|
|
choice
|
|
prompt "PCI Express hierarchy optimization setting"
|
|
default PCIE_BUS_DEFAULT
|
|
depends on PCI && EXPERT
|
|
help
|
|
MPS (Max Payload Size) and MRRS (Max Read Request Size) are PCIe
|
|
device parameters that affect performance and the ability to
|
|
support hotplug and peer-to-peer DMA.
|
|
|
|
The following choices set the MPS and MRRS optimization strategy
|
|
at compile-time. The choices are the same as those offered for
|
|
the kernel command-line parameter 'pci', i.e.,
|
|
'pci=pcie_bus_tune_off', 'pci=pcie_bus_safe',
|
|
'pci=pcie_bus_perf', and 'pci=pcie_bus_peer2peer'.
|
|
|
|
This is a compile-time setting and can be overridden by the above
|
|
command-line parameters. If unsure, choose PCIE_BUS_DEFAULT.
|
|
|
|
config PCIE_BUS_TUNE_OFF
|
|
bool "Tune Off"
|
|
depends on PCI
|
|
help
|
|
Use the BIOS defaults; don't touch MPS at all. This is the same
|
|
as booting with 'pci=pcie_bus_tune_off'.
|
|
|
|
config PCIE_BUS_DEFAULT
|
|
bool "Default"
|
|
depends on PCI
|
|
help
|
|
Default choice; ensure that the MPS matches upstream bridge.
|
|
|
|
config PCIE_BUS_SAFE
|
|
bool "Safe"
|
|
depends on PCI
|
|
help
|
|
Use largest MPS that boot-time devices support. If you have a
|
|
closed system with no possibility of adding new devices, this
|
|
will use the largest MPS that's supported by all devices. This
|
|
is the same as booting with 'pci=pcie_bus_safe'.
|
|
|
|
config PCIE_BUS_PERFORMANCE
|
|
bool "Performance"
|
|
depends on PCI
|
|
help
|
|
Use MPS and MRRS for best performance. Ensure that a given
|
|
device's MPS is no larger than its parent MPS, which allows us to
|
|
keep all switches/bridges to the max MPS supported by their
|
|
parent. This is the same as booting with 'pci=pcie_bus_perf'.
|
|
|
|
config PCIE_BUS_PEER2PEER
|
|
bool "Peer2peer"
|
|
depends on PCI
|
|
help
|
|
Set MPS = 128 for all devices. MPS configuration effected by the
|
|
other options could cause the MPS on one root port to be
|
|
different than that of the MPS on another, which may cause
|
|
hot-added devices or peer-to-peer DMA to fail. Set MPS to the
|
|
smallest possible value (128B) system-wide to avoid these issues.
|
|
This is the same as booting with 'pci=pcie_bus_peer2peer'.
|
|
|
|
endchoice
|
|
|
|
config VGA_ARB
|
|
bool "VGA Arbitration" if EXPERT
|
|
default y
|
|
depends on (PCI && !S390)
|
|
help
|
|
Some "legacy" VGA devices implemented on PCI typically have the same
|
|
hard-decoded addresses as they did on ISA. When multiple PCI devices
|
|
are accessed at same time they need some kind of coordination. Please
|
|
see Documentation/gpu/vgaarbiter.rst for more details. Select this to
|
|
enable VGA arbiter.
|
|
|
|
config VGA_ARB_MAX_GPUS
|
|
int "Maximum number of GPUs"
|
|
default 16
|
|
depends on VGA_ARB
|
|
help
|
|
Reserves space in the kernel to maintain resource locking for
|
|
multiple GPUS. The overhead for each GPU is very small.
|
|
|
|
source "drivers/pci/hotplug/Kconfig"
|
|
source "drivers/pci/controller/Kconfig"
|
|
source "drivers/pci/endpoint/Kconfig"
|
|
source "drivers/pci/switch/Kconfig"
|
|
|
|
endif
|