# 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
	depends on MMU
	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 "Enable PCI Data Object Exchange (DOE) support"
	help
	  Say Y here if you want be able to communicate with PCIe DOE
	  mailboxes.

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 PCIE_TPH
	bool "TLP Processing Hints"
	help
	  This option adds support for PCIe TLP Processing Hints (TPH).
	  TPH allows endpoint devices to provide optimization hints, such as
	  desired caching behavior, for requests that target memory space.
	  These hints, called Steering Tags, can empower the system hardware
	  to optimize the utilization of platform resources.

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_VMBUS && PCI_MSI && SYSFS
	select PCI_HYPERV_INTERFACE
	select IRQ_MSI_LIB
	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)
	select SCREEN_INFO if X86
	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/pwrctrl/Kconfig"

endif
