# SPDX-License-Identifier: GPL-2.0

menu "PCI controller drivers"
	depends on PCI

config PCI_MVEBU
	tristate "Marvell EBU PCIe controller"
	depends on ARCH_MVEBU || ARCH_DOVE || COMPILE_TEST
	depends on MVEBU_MBUS
	depends on ARM
	depends on OF
	select PCI_BRIDGE_EMUL
	help
	 Add support for Marvell EBU PCIe controller. This PCIe controller
	 is used on 32-bit Marvell ARM SoCs: Dove, Kirkwood, Armada 370,
	 Armada XP, Armada 375, Armada 38x and Armada 39x.

config PCI_AARDVARK
	tristate "Aardvark PCIe controller"
	depends on (ARCH_MVEBU && ARM64) || COMPILE_TEST
	depends on OF
	depends on PCI_MSI_IRQ_DOMAIN
	select PCI_BRIDGE_EMUL
	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 || COMPILE_TEST
	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
	default ARCH_GEMINI

config PCI_IXP4XX
	bool "Intel IXP4xx PCI controller"
	depends on ARM && OF
	depends on ARCH_IXP4XX || COMPILE_TEST
	default ARCH_IXP4XX
	help
	  Say Y here if you want support for the PCI host controller found
	  in the Intel IXP4xx XScale-based network processor SoC.

config PCI_TEGRA
	bool "NVIDIA Tegra PCIe controller"
	depends on ARCH_TEGRA || COMPILE_TEST
	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 ARCH_RENESAS || COMPILE_TEST
	depends on ARM
	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_HOST
	bool "Renesas R-Car PCIe host controller"
	depends on ARCH_RENESAS || COMPILE_TEST
	depends on PCI_MSI_IRQ_DOMAIN
	help
	  Say Y here if you want PCIe controller support on R-Car SoCs in host
	  mode.

config PCIE_RCAR_EP
	bool "Renesas R-Car PCIe endpoint controller"
	depends on ARCH_RENESAS || COMPILE_TEST
	depends on PCI_ENDPOINT
	help
	  Say Y here if you want PCIe controller support on R-Car SoCs in
	  endpoint mode.

config PCI_HOST_COMMON
	tristate
	select PCI_ECAM

config PCI_HOST_GENERIC
	tristate "Generic PCI host controller"
	depends on 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 OF || COMPILE_TEST
	depends on PCI_MSI_IRQ_DOMAIN
	help
	  Say 'Y' here if you want kernel to support the Xilinx AXI PCIe
	  Host Bridge driver.

config PCIE_XILINX_CPM
	bool "Xilinx Versal CPM host bridge support"
	depends on ARCH_ZYNQMP || COMPILE_TEST
	select PCI_HOST_COMMON
	help
	  Say 'Y' here if you want kernel support for the
	  Xilinx Versal CPM host bridge.

config PCI_XGENE
	bool "X-Gene PCIe controller"
	depends on ARM64 || COMPILE_TEST
	depends on OF || (ACPI && PCI_QUIRKS)
	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 || COMPILE_TEST
	default ARCH_INTEGRATOR_AP

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

config PCIE_IPROC
	tristate
	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
	tristate "Altera PCIe controller"
	depends on ARM || NIOS2 || ARM64 || COMPILE_TEST
	help
	  Say Y here if you want to enable PCIe controller support on Altera
	  FPGA.

config PCIE_ALTERA_MSI
	tristate "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 || COMPILE_TEST
	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 || COMPILE_TEST
	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
	bool
	depends on PCI

config PCIE_ROCKCHIP_HOST
	tristate "Rockchip PCIe host controller"
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	depends on OF
	depends on PCI_MSI_IRQ_DOMAIN
	select MFD_SYSCON
	select PCIE_ROCKCHIP
	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_ROCKCHIP_EP
	bool "Rockchip PCIe endpoint controller"
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	depends on OF
	depends on PCI_ENDPOINT
	select MFD_SYSCON
	select PCIE_ROCKCHIP
	help
	  Say Y here if you want to support Rockchip PCIe controller in
	  endpoint mode on Rockchip SoC. There is 1 internal PCIe port
	  available to support GEN2 with 4 slots.

config PCIE_MEDIATEK
	tristate "MediaTek PCIe controller"
	depends on ARCH_AIROHA || ARCH_MEDIATEK || COMPILE_TEST
	depends on OF
	depends on PCI_MSI_IRQ_DOMAIN
	help
	  Say Y here if you want to enable PCIe controller support on
	  MediaTek SoCs.

config PCIE_MEDIATEK_GEN3
	tristate "MediaTek Gen3 PCIe controller"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on PCI_MSI_IRQ_DOMAIN
	help
	  Adds support for PCIe Gen3 MAC controller for MediaTek SoCs.
	  This PCIe controller is compatible with Gen3, Gen2 and Gen1 speed,
	  and support up to 256 MSI interrupt numbers for
	  multi-function devices.

	  Say Y here if you want to enable Gen3 PCIe controller support on
	  MediaTek SoCs.

config VMD
	depends on PCI_MSI && X86_64 && SRCU && !UML
	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.

config PCIE_BRCMSTB
	tristate "Broadcom Brcmstb PCIe host controller"
	depends on ARCH_BRCMSTB || ARCH_BCM2835 || ARCH_BCM4908 || \
		   BMIPS_GENERIC || COMPILE_TEST
	depends on OF
	depends on PCI_MSI_IRQ_DOMAIN
	default ARCH_BRCMSTB || BMIPS_GENERIC
	help
	  Say Y here to enable PCIe host controller support for
	  Broadcom STB based SoCs, like the Raspberry Pi 4.

config PCI_HYPERV_INTERFACE
	tristate "Hyper-V PCI Interface"
	depends on ((X86 && X86_64) || ARM64) && HYPERV && PCI_MSI && PCI_MSI_IRQ_DOMAIN
	help
	  The Hyper-V PCI Interface is a helper driver allows other drivers to
	  have a common interface with the Hyper-V PCI frontend driver.

config PCI_LOONGSON
	bool "LOONGSON PCI Controller"
	depends on MACH_LOONGSON64 || COMPILE_TEST
	depends on OF || ACPI
	depends on PCI_QUIRKS
	default MACH_LOONGSON64
	help
	  Say Y here if you want to enable PCI controller support on
	  Loongson systems.

config PCIE_MICROCHIP_HOST
	bool "Microchip AXI PCIe host bridge support"
	depends on PCI_MSI && OF
	select PCI_MSI_IRQ_DOMAIN
	select GENERIC_MSI_IRQ_DOMAIN
	select PCI_HOST_COMMON
	help
	  Say Y here if you want kernel to support the Microchip AXI PCIe
	  Host Bridge driver.

config PCIE_HISI_ERR
	depends on ACPI_APEI_GHES && (ARM64 || COMPILE_TEST)
	bool "HiSilicon HIP PCIe controller error handling driver"
	help
	  Say Y here if you want error handling support
	  for the PCIe controller's errors on HiSilicon HIP SoCs

config PCIE_APPLE_MSI_DOORBELL_ADDR
	hex
	default 0xfffff000
	depends on PCIE_APPLE

config PCIE_APPLE
	tristate "Apple PCIe controller"
	depends on ARCH_APPLE || COMPILE_TEST
	depends on OF
	depends on PCI_MSI_IRQ_DOMAIN
	select PCI_HOST_COMMON
	help
	  Say Y here if you want to enable PCIe controller support on Apple
	  system-on-chips, like the Apple M1. This is required for the USB
	  type-A ports, Ethernet, Wi-Fi, and Bluetooth.

	  If unsure, say Y if you have an Apple Silicon system.

config PCIE_MT7621
	tristate "MediaTek MT7621 PCIe Controller"
	depends on SOC_MT7621 || COMPILE_TEST
	select PHY_MT7621_PCI
	default SOC_MT7621
	help
	  This selects a driver for the MediaTek MT7621 PCIe Controller.

source "drivers/pci/controller/dwc/Kconfig"
source "drivers/pci/controller/mobiveil/Kconfig"
source "drivers/pci/controller/cadence/Kconfig"
endmenu
