menuconfig PCI
	bool "PCI support"
	depends on DM
	default y if PPC
	help
	  Enable support for PCI (Peripheral Interconnect Bus), a type of bus
	  used on some devices to allow the CPU to communicate with its
	  peripherals.

	  This subsystem requires driver model.

if PCI

config DM_PCI_COMPAT
	bool "Enable compatible functions for PCI"
	help
	  Enable compatibility functions for PCI so that old code can be used
	  with CONFIG_PCI enabled. This should be used as an interim
	  measure when porting a board to use driver model for PCI. Once the
	  board is fully supported, this option should be disabled.

config SYS_PCI_64BIT
	bool "Enable 64-bit PCI resources"
	default y if PPC
	help
	  Enable 64-bit PCI resource access.

config PCI_AARDVARK
	bool "Enable Aardvark PCIe driver"
	depends on DM_GPIO
	depends on ARMADA_3700
	help
	  Say Y here if you want to enable PCIe controller support on
	  Armada37x0 SoCs. The PCIe controller on Armada37x0 is based on
	  Aardvark hardware.

config PCI_PNP
	bool "Enable Plug & Play support for PCI"
	default y
	help
	  Enable PCI memory and I/O space resource allocation and assignment.

config SPL_PCI_PNP
	bool "Enable Plug & Play support for PCI"
	help
	  Enable PCI memory and I/O space resource allocation and assignment.
	  This is required to auto configure the enumerated devices.

config PCI_REGION_MULTI_ENTRY
	bool "Enable Multiple entries of region type MEMORY in ranges for PCI"
	help
	  Enable PCI memory regions to be of multiple entry. Multiple entry
	  here refers to allow more than one count of address ranges for MEMORY
	  region type. This helps to add support for SoC's like OcteonTX/TX2
	  where every peripheral is on the PCI bus.

config PCI_CONFIG_HOST_BRIDGE
	bool "Configure PCI host bridges"
	default y if X86

config PCI_MAP_SYSTEM_MEMORY
	bool "Map local system memory from a virtual base address"
	depends on MIPS
	help
	  Say Y if base address of system memory is being used as a virtual address
	  instead of a physical address (e.g. on MIPS). The PCI core will then remap
	  the virtual memory base address to a physical address when adding the PCI
	  region of type PCI_REGION_SYS_MEMORY.
	  This should only be required on MIPS where CFG_SYS_SDRAM_BASE is still
	  being used as virtual address.

config PCI_SRIOV
	bool "Enable Single Root I/O Virtualization support for PCI"
	help
	  Say Y here if you want to enable PCI Single Root I/O Virtualization
	  capability support. This helps to enumerate Virtual Function devices
	  if available on a PCI Physical Function device and probe for
	  applicable drivers.

config PCI_ENHANCED_ALLOCATION
	bool "Enable support for Enhanced Allocation of resources"
	default y
	help
	  Enable support for Enhanced Allocation which can be used by supported
	  devices in place of traditional BARS for allocation of resources.

config PCI_ARID
        bool "Enable Alternate Routing-ID support for PCI"
        help
          Say Y here if you want to enable Alternate Routing-ID capability
          support on PCI devices. This helps to skip some devices in BDF
          scan that are not present.

config PCI_SCAN_SHOW
	bool "Show PCI devices during startup"
	depends on PCIE_IMX

config PCIE_ECAM_GENERIC
	bool "Generic ECAM-based PCI host controller support"
	help
	  Say Y here if you want to enable support for generic ECAM-based
	  PCIe host controllers, such as the one emulated by QEMU.

config PCIE_ECAM_SYNQUACER
	bool "SynQuacer ECAM-based PCI host controller support"
	select PCI_INIT_R
	select PCI_REGION_MULTI_ENTRY
	help
	  Say Y here if you want to enable support for Socionext
	  SynQuacer SoC's ECAM-based PCIe host controllers.
	  Note that this must be configured when boot because Linux driver
	  expects the PCIe RC has been configured in the bootloader.

config PCIE_APPLE
	bool "Enable Apple PCIe driver"
	depends on ARCH_APPLE
	imply PCI_INIT_R
	default y
	help
	  Say Y here if you want to enable PCIe controller support on
	  Apple SoCs.

config PCI_GT64120
	bool "GT64120 PCI support"
	depends on MIPS

config PCI_PHYTIUM
	bool "Phytium PCIe support"
	help
	  Say Y here if you want to enable PCIe controller support on
	  Phytium SoCs.

config PCIE_DW_MVEBU
	bool "Enable Armada-8K PCIe driver (DesignWare core)"
	depends on ARMADA_8K
	help
	  Say Y here if you want to enable PCIe controller support on
	  Armada-8K SoCs. The PCIe controller on Armada-8K is based on
	  DesignWare hardware.

config PCIE_DW_SIFIVE
	bool "Enable SiFive FU740 PCIe"
	depends on CLK_SIFIVE_PRCI
	depends on RESET_SIFIVE
	depends on SIFIVE_GPIO
	select PCIE_DW_COMMON
	help
	  Say Y here if you want to enable PCIe controller support on
	  FU740.

config SYS_FSL_PCI_VER_3_X
	bool

config PCIE_FSL
	bool "FSL PowerPC PCIe support"
	select SYS_FSL_PCI_VER_3_X if ARCH_T2080 || ARCH_T4240
	help
	  Say Y here if you want to enable PCIe controller support on FSL
	  PowerPC MPC85xx, MPC86xx, B series, P series and T series SoCs.
	  This driver does not support SRIO_PCIE_BOOT feature.

config PCI_MPC85XX
	bool "MPC85XX PowerPC PCI support"
	help
	  Say Y here if you want to enable PCI controller support on FSL
	  PowerPC MPC85xx SoC.

config PCI_MSC01
	bool "MSC01 PCI support"
	depends on TARGET_MALTA

config PCI_RCAR_GEN2
	bool "Renesas RCar Gen2 PCIe driver"
	depends on RCAR_32
	help
	  Say Y here if you want to enable PCIe controller support on
	  Renesas RCar Gen2 SoCs. The PCIe controller on RCar Gen2 is
	  also used to access EHCI USB controller on the SoC.

config PCI_RCAR_GEN3
	bool "Renesas RCar Gen3 PCIe driver"
	depends on RCAR_GEN3
	help
	  Say Y here if you want to enable PCIe controller support on
	  Renesas RCar Gen3 SoCs.

config PCI_SANDBOX
	bool "Sandbox PCI support"
	depends on SANDBOX
	help
	  Support PCI on sandbox, as an emulated bus. This permits testing of
	  PCI feature such as bus scanning, device configuration and device
	  access. The available (emulated) devices are defined statically in
	  the device tree but the normal PCI scan technique is used to find
	  then.

config SH7751_PCI
	bool "SH7751 PCI controller support"
	depends on SH
	help
	  SuperH PCI Bridge Configuration

config PCI_TEGRA
	bool "Tegra PCI support"
	depends on ARCH_TEGRA
	depends on (TEGRA186 && POWER_DOMAIN) || (!TEGRA186)
	help
	  Enable support for the PCIe controller found on some generations of
	  Tegra. Tegra20 has 2 root ports with a total of 4 lanes, Tegra30 has
	  3 root ports with a total of 6 lanes and Tegra124 has 2 root ports
	  with a total of 5 lanes. Some boards require this for Ethernet
	  support to work (e.g. beaver, jetson-tk1).

config PCI_OCTEONTX
	bool "OcteonTX PCI support"
	depends on (ARCH_OCTEONTX || ARCH_OCTEONTX2)
	help
	  Enable support for the OcteonTX/TX2 SoC family ECAM/PEM controllers.
	  These controllers provide PCI configuration access to all on-board
	  peripherals so it should only be disabled for testing purposes

config PCIE_OCTEON
	bool "MIPS Octeon PCIe support"
	depends on ARCH_OCTEON
	help
	  Enable support for the MIPS Octeon SoC family PCIe controllers.

config PCI_XILINX
	bool "Xilinx AXI Bridge for PCI Express"
	help
	  Enable support for the Xilinx AXI bridge for PCI express, an IP block
	  which can be used on some generations of Xilinx FPGAs.

config PCIE_LAYERSCAPE
	bool

config PCIE_LAYERSCAPE_RC
	bool "Layerscape PCIe Root Complex mode support"
	select PCIE_LAYERSCAPE
	help
	  Enable Layerscape PCIe Root Complex mode driver support. The Layerscape
	  SoC may have one or several PCIe controllers. Each controller can be
	  configured to Root Complex mode by clearing the corresponding bit of
	  RCW[HOST_AGT_PEX].

config PCI_IOMMU_EXTRA_MAPPINGS
	bool "Support for specifying extra IOMMU mappings for PCI"
	depends on PCIE_LAYERSCAPE_RC
	help
	  Enable support for specifying extra IOMMU mappings for PCI
	  controllers through a special env var called "pci_iommu_extra" or
	  through a device tree property named "pci-iommu-extra" placed in
	  the node describing the PCI controller.
	  The intent is to cover SR-IOV scenarios which need mappings for VFs
	  and PCI hot-plug scenarios. More documentation can be found under:
	    arch/arm/cpu/armv8/fsl-layerscape/doc/README.pci_iommu_extra

config PCIE_LAYERSCAPE_EP
	bool "Layerscape PCIe Endpoint mode support"
	select PCIE_LAYERSCAPE
	select PCI_ENDPOINT
	help
	  Enable Layerscape PCIe Endpoint mode driver support. The Layerscape
	  SoC may have one or several PCIe controllers. Each controller can be
	  configured to Endpoint mode by setting the corresponding bit of
	  RCW[HOST_AGT_PEX].

config PCIE_LAYERSCAPE_GEN4
	bool "Layerscape Gen4 PCIe support"
	help
	  Support PCIe Gen4 on NXP Layerscape SoCs, which may have one or
	  several PCIe controllers. The PCIe controller can work in RC or
	  EP mode according to RCW[HOST_AGT_PEX] setting.

config FSL_PCIE_COMPAT
	string "PCIe compatible of Kernel DT"
	depends on PCIE_LAYERSCAPE_RC || PCIE_LAYERSCAPE_GEN4
	default "fsl,ls1012a-pcie" if ARCH_LS1012A
	default "fsl,ls1028a-pcie" if ARCH_LS1028A
	default "fsl,ls1043a-pcie" if ARCH_LS1043A
	default "fsl,ls1046a-pcie" if ARCH_LS1046A
	default "fsl,ls2080a-pcie" if ARCH_LS2080A
	default "fsl,ls1088a-pcie" if ARCH_LS1088A
	default "fsl,ls2088a-pcie" if ARCH_LX2160A || ARCH_LX2162A
	default "fsl,ls1021a-pcie" if ARCH_LS1021A
	help
	  This compatible is used to find pci controller node in Kernel DT
	  to complete fixup.

config FSL_PCIE_EP_COMPAT
	string "PCIe EP compatible of Kernel DT"
	depends on PCIE_LAYERSCAPE_RC || PCIE_LAYERSCAPE_GEN4
	default "fsl,ls-pcie-ep"
	help
	  This compatible is used to find pci controller ep node in Kernel DT
	  to complete fixup.

config PCIE_IMX
	bool "i.MX PCIe support"
	depends on ARCH_MX6

config PCIE_INTEL_FPGA
	bool "Intel FPGA PCIe support"
	help
	  Say Y here if you want to enable PCIe controller support on Intel
	  FPGA, example Stratix 10.

config PCIE_IPROC
	bool "Iproc PCIe support"
	help
	  Broadcom iProc PCIe controller driver.
	  Say Y here if you want to enable Broadcom iProc PCIe controller,

config PCI_MVEBU
	bool "Enable Kirkwood / Armada 370/XP/375/38x PCIe driver"
	depends on (ARCH_KIRKWOOD || ARCH_MVEBU)
	select MISC
	select DM_RESET
	select DM_GPIO
	help
	  Say Y here if you want to enable PCIe controller support on
	  Kirkwood and Armada 370/XP/375/38x SoCs.

config PCIE_DW_COMMON
	bool

config PCI_KEYSTONE
	bool "TI Keystone PCIe controller"
	select PCIE_DW_COMMON
	help
	  Say Y here if you want to enable PCI controller support on AM654 SoC.

config PCIE_MEDIATEK
	bool "MediaTek PCIe Gen2 controller"
	depends on ARCH_MEDIATEK
	help
	  Say Y here if you want to enable Gen2 PCIe controller,
	  which could be found on MT7623 SoC family.

config PCIE_DW_MESON
	bool "Amlogic Meson DesignWare based PCIe controller"
	depends on ARCH_MESON
	select PCIE_DW_COMMON
	help
	  Say Y here if you want to enable DW PCIe controller support on
	  Amlogic SoCs.

config PCIE_ROCKCHIP
	bool "Enable Rockchip PCIe driver"
	depends on ARCH_ROCKCHIP
	select PHY_ROCKCHIP_PCIE
	default y if ROCKCHIP_RK3399
	help
	  Say Y here if you want to enable PCIe controller support on
	  Rockchip SoCs.

config PCIE_DW_ROCKCHIP
	bool "Rockchip DesignWare based PCIe controller"
	depends on ARCH_ROCKCHIP
	select PCIE_DW_COMMON
	select PHY_ROCKCHIP_SNPS_PCIE3
	help
	  Say Y here if you want to enable DW PCIe controller support on
	  Rockchip SoCs.

config PCI_BRCMSTB
	bool "Broadcom STB PCIe controller"
	depends on ARCH_BCM283X
	help
	  Say Y here if you want to enable support for PCIe controller
	  on Broadcom set-top-box (STB) SoCs.
	  This driver currently supports only BCM2711 SoC and RC mode
	  of the controller.

config PCIE_UNIPHIER
	bool "Socionext UniPhier PCIe driver"
	depends on ARCH_UNIPHIER
	select PHY_UNIPHIER_PCIE
	help
	  Say Y here if you want to enable PCIe controller support on
	  UniPhier SoCs.

config PCIE_XILINX_NWL
	bool "Xilinx NWL PCIe controller"
	depends on ARCH_ZYNQMP
	help
	 Say 'Y' here if you want support for Xilinx / AMD NWL PCIe
	 controller as Root Port.

endif
