# SPDX-License-Identifier: GPL-2.0

menu "PCI host controller drivers"
	depends on PCI

config PCI_MVEBU
	bool "Marvell EBU PCIe controller"
	depends on ARCH_MVEBU || ARCH_DOVE
	depends on ARM
	depends on OF

config PCI_AARDVARK
	bool "Aardvark PCIe controller"
	depends on ARCH_MVEBU && ARM64
	depends on OF
	depends on PCI_MSI_IRQ_DOMAIN
	help
	 Add support for Aardvark 64bit PCIe Host Controller. This
	 controller is part of the South Bridge of the Marvel Armada
	 3700 SoC.

config PCIE_XILINX_NWL
	bool "NWL PCIe Core"
	depends on ARCH_ZYNQMP
	depends on PCI_MSI_IRQ_DOMAIN
	help
	 Say 'Y' here if you want kernel support for Xilinx
	 NWL PCIe controller. The controller can act as Root Port
	 or End Point. The current option selection will only
	 support root port enabling.

config PCI_FTPCI100
	bool "Faraday Technology FTPCI100 PCI controller"
	depends on OF
	depends on ARM
	default ARCH_GEMINI

config PCI_TEGRA
	bool "NVIDIA Tegra PCIe controller"
	depends on ARCH_TEGRA
	depends on PCI_MSI_IRQ_DOMAIN
	help
	  Say Y here if you want support for the PCIe host controller found
	  on NVIDIA Tegra SoCs.

config PCI_RCAR_GEN2
	bool "Renesas R-Car Gen2 Internal PCI controller"
	depends on ARM
	depends on ARCH_RENESAS || COMPILE_TEST
	help
	  Say Y here if you want internal PCI support on R-Car Gen2 SoC.
	  There are 3 internal PCI controllers available with a single
	  built-in EHCI/OHCI host controller present on each one.

config PCIE_RCAR
	bool "Renesas R-Car PCIe controller"
	depends on ARCH_RENESAS || (ARM && COMPILE_TEST)
	depends on PCI_MSI_IRQ_DOMAIN
	help
	  Say Y here if you want PCIe controller support on R-Car SoCs.

config PCI_HOST_COMMON
	bool
	select PCI_ECAM

config PCI_HOST_GENERIC
	bool "Generic PCI host controller"
	depends on (ARM || ARM64) && OF
	select PCI_HOST_COMMON
	select IRQ_DOMAIN
	help
	  Say Y here if you want to support a simple generic PCI host
	  controller, such as the one emulated by kvmtool.

config PCIE_XILINX
	bool "Xilinx AXI PCIe host bridge support"
	depends on ARCH_ZYNQ || MICROBLAZE || (MIPS && PCI_DRIVERS_GENERIC)
	help
	  Say 'Y' here if you want kernel to support the Xilinx AXI PCIe
	  Host Bridge driver.

config PCI_XGENE
	bool "X-Gene PCIe controller"
	depends on ARM64
	depends on OF || (ACPI && PCI_QUIRKS)
	select PCIEPORTBUS
	help
	  Say Y here if you want internal PCI support on APM X-Gene SoC.
	  There are 5 internal PCIe ports available. Each port is GEN3 capable
	  and have varied lanes from x1 to x8.

config PCI_XGENE_MSI
	bool "X-Gene v1 PCIe MSI feature"
	depends on PCI_XGENE
	depends on PCI_MSI_IRQ_DOMAIN
	default y
	help
	  Say Y here if you want PCIe MSI support for the APM X-Gene v1 SoC.
	  This MSI driver supports 5 PCIe ports on the APM X-Gene v1 SoC.

config PCI_V3_SEMI
	bool "V3 Semiconductor PCI controller"
	depends on OF
	depends on ARM
	default ARCH_INTEGRATOR_AP

config PCI_VERSATILE
	bool "ARM Versatile PB PCI controller"
	depends on ARCH_VERSATILE

config PCIE_IPROC
	tristate
	select PCI_DOMAINS
	help
	  This enables the iProc PCIe core controller support for Broadcom's
	  iProc family of SoCs. An appropriate bus interface driver needs
	  to be enabled to select this.

config PCIE_IPROC_PLATFORM
	tristate "Broadcom iProc PCIe platform bus driver"
	depends on ARCH_BCM_IPROC || (ARM && COMPILE_TEST)
	depends on OF
	select PCIE_IPROC
	default ARCH_BCM_IPROC
	help
	  Say Y here if you want to use the Broadcom iProc PCIe controller
	  through the generic platform bus interface

config PCIE_IPROC_BCMA
	tristate "Broadcom iProc PCIe BCMA bus driver"
	depends on ARM && (ARCH_BCM_IPROC || COMPILE_TEST)
	select PCIE_IPROC
	select BCMA
	default ARCH_BCM_5301X
	help
	  Say Y here if you want to use the Broadcom iProc PCIe controller
	  through the BCMA bus interface

config PCIE_IPROC_MSI
	bool "Broadcom iProc PCIe MSI support"
	depends on PCIE_IPROC_PLATFORM || PCIE_IPROC_BCMA
	depends on PCI_MSI_IRQ_DOMAIN
	default ARCH_BCM_IPROC
	help
	  Say Y here if you want to enable MSI support for Broadcom's iProc
	  PCIe controller

config PCIE_ALTERA
	bool "Altera PCIe controller"
	depends on ARM || NIOS2
	depends on OF_PCI
	select PCI_DOMAINS
	help
	  Say Y here if you want to enable PCIe controller support on Altera
	  FPGA.

config PCIE_ALTERA_MSI
	bool "Altera PCIe MSI feature"
	depends on PCIE_ALTERA
	depends on PCI_MSI_IRQ_DOMAIN
	help
	  Say Y here if you want PCIe MSI support for the Altera FPGA.
	  This MSI driver supports Altera MSI to GIC controller IP.

config PCI_HOST_THUNDER_PEM
	bool "Cavium Thunder PCIe controller to off-chip devices"
	depends on ARM64
	depends on OF || (ACPI && PCI_QUIRKS)
	select PCI_HOST_COMMON
	help
	  Say Y here if you want PCIe support for CN88XX Cavium Thunder SoCs.

config PCI_HOST_THUNDER_ECAM
	bool "Cavium Thunder ECAM controller to on-chip devices on pass-1.x silicon"
	depends on ARM64
	depends on OF || (ACPI && PCI_QUIRKS)
	select PCI_HOST_COMMON
	help
	  Say Y here if you want ECAM support for CN88XX-Pass-1.x Cavium Thunder SoCs.

config PCIE_ROCKCHIP
	tristate "Rockchip PCIe controller"
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	depends on OF
	depends on PCI_MSI_IRQ_DOMAIN
	select MFD_SYSCON
	help
	  Say Y here if you want internal PCI support on Rockchip SoC.
	  There is 1 internal PCIe port available to support GEN2 with
	  4 slots.

config PCIE_MEDIATEK
	bool "MediaTek PCIe controller"
	depends on (ARM || ARM64) && (ARCH_MEDIATEK || COMPILE_TEST)
	depends on OF
	depends on PCI
	select PCIEPORTBUS
	help
	  Say Y here if you want to enable PCIe controller support on
	  MediaTek SoCs.

config PCIE_TANGO_SMP8759
	bool "Tango SMP8759 PCIe controller (DANGEROUS)"
	depends on ARCH_TANGO && PCI_MSI && OF
	depends on BROKEN
	select PCI_HOST_COMMON
	help
	  Say Y here to enable PCIe controller support for Sigma Designs
	  Tango SMP8759-based systems.

	  Note: The SMP8759 controller multiplexes PCI config and MMIO
	  accesses, and Linux doesn't provide a way to serialize them.
	  This can lead to data corruption if drivers perform concurrent
	  config and MMIO accesses.

config VMD
	depends on PCI_MSI && X86_64 && SRCU
	tristate "Intel Volume Management Device Driver"
	---help---
	  Adds support for the Intel Volume Management Device (VMD). VMD is a
	  secondary PCI host bridge that allows PCI Express root ports,
	  and devices attached to them, to be removed from the default
	  PCI domain and placed within the VMD domain. This provides
	  more bus resources than are otherwise possible with a
	  single domain. If you know your system provides one of these and
	  has devices attached to it, say Y; if you are not sure, say N.

	  To compile this driver as a module, choose M here: the
	  module will be called vmd.

endmenu
