# SPDX-License-Identifier: GPL-2.0

menu "PCI controller drivers"
	depends on PCI

config PCI_AARDVARK
	tristate "Aardvark PCIe controller"
	depends on (ARCH_MVEBU && ARM64) || COMPILE_TEST
	depends on OF
	depends on PCI_MSI
	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_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
	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 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
	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 PCI_VERSATILE
	bool "ARM Versatile PB PCI controller"
	depends on ARCH_VERSATILE || COMPILE_TEST

config PCIE_BRCMSTB
	tristate "Broadcom Brcmstb PCIe controller"
	depends on ARCH_BRCMSTB || ARCH_BCM2835 || ARCH_BCMBCA || \
		   BMIPS_GENERIC || COMPILE_TEST
	depends on OF
	depends on PCI_MSI
	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 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 BCMA PCIe controller"
	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
	default ARCH_BCM_IPROC
	help
	  Say Y here if you want to enable MSI support for Broadcom's iProc
	  PCIe controller

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 PCI_FTPCI100
	bool "Faraday Technology FTPCI100 PCI controller"
	depends on OF
	default ARCH_GEMINI

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_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 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 VMD
	depends on PCI_MSI && X86_64 && !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 PCI_LOONGSON
	bool "LOONGSON PCIe 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 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 PCIE_MEDIATEK
	tristate "MediaTek PCIe controller"
	depends on ARCH_AIROHA || ARCH_MEDIATEK || COMPILE_TEST
	depends on OF
	depends on PCI_MSI
	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
	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 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.

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

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

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

config PCIE_RCAR_HOST
	bool "Renesas R-Car PCIe controller (host mode)"
	depends on ARCH_RENESAS || COMPILE_TEST
	depends on PCI_MSI
	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 controller (endpoint mode)"
	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_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_ROCKCHIP
	bool
	depends on PCI

config PCIE_ROCKCHIP_HOST
	tristate "Rockchip PCIe controller (host mode)"
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	depends on OF
	depends on PCI_MSI
	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 controller (endpoint mode)"
	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 PCI_V3_SEMI
	bool "V3 Semiconductor PCI controller"
	depends on OF
	depends on ARM || COMPILE_TEST
	default ARCH_INTEGRATOR_AP

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
	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 PCIE_XILINX
	bool "Xilinx AXI PCIe controller"
	depends on OF
	depends on PCI_MSI
	help
	  Say 'Y' here if you want kernel to support the Xilinx AXI PCIe
	  Host Bridge driver.

config PCIE_XILINX_DMA_PL
	bool "Xilinx DMA PL PCIe host bridge support"
	depends on ARCH_ZYNQMP || COMPILE_TEST
	depends on PCI_MSI
	select PCI_HOST_COMMON
	help
	  Say 'Y' here if you want kernel support for the Xilinx PL DMA
	  PCIe host bridge. The controller is a Soft IP which can act as
	  Root Port. If your system provides Xilinx PCIe host controller
	  bridge DMA as Soft IP say 'Y'; if you are not sure, say 'N'.

config PCIE_XILINX_NWL
	bool "Xilinx NWL PCIe controller"
	depends on ARCH_ZYNQMP || COMPILE_TEST
	depends on PCI_MSI
	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 PCIE_XILINX_CPM
	bool "Xilinx Versal CPM PCI controller"
	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.

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