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.

	  This is normally not done in SPL, but can be enabled if devices must
	  be set up in the SPL phase. Often it is enough to manually configure
	  one device, so this option can be disabled.

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
