288 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			288 lines
		
	
	
		
			7.9 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
 | ||
| 
 | ||
| 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_IRQ_DOMAIN
 | ||
| 	def_bool y
 | ||
| 	depends on PCI_MSI
 | ||
| 	select GENERIC_MSI_IRQ_DOMAIN
 | ||
| 
 | ||
| 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
 | ||
| 	help
 | ||
| 	  Enableѕ 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 && PCI_MSI_IRQ_DOMAIN && 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.
 | ||
| 
 | ||
| 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
 |