# 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_NPEM
	bool "Native PCIe Enclosure Management"
	depends on LEDS_CLASS=y
	help
	  Support for Native PCIe Enclosure Management. It allows managing LED
	  indications in storage enclosures. Enclosure must support following
	  indications: OK, Locate, Fail, Rebuild, other indications are
	  optional.

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"
source "drivers/pci/pwrctl/Kconfig"

endif
