menuconfig PCI
	bool "PCI support"
	depends on DM
	default y if PPC
	select DM_PCI
	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.

config DM_PCI
	bool
	help
	  Use driver model for PCI. Driver model is the new method for
	  orgnising devices in U-Boot. For PCI, driver model keeps track of
	  available PCI devices, allows scanning of PCI buses and provides
	  device configuration support.

if PCI

config DM_PCI_COMPAT
	bool "Enable compatible functions for PCI"
	depends on DM_PCI
	help
	  Enable compatibility functions for PCI so that old code can be used
	  with CONFIG_DM_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 PCI_AARDVARK
	bool "Enable Aardvark PCIe driver"
	default n
	depends on DM_PCI
	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"
	depends on PCI || DM_PCI
	default y
	help
	  Enable PCI memory and I/O space resource allocation and assignment.

config PCI_REGION_MULTI_ENTRY
	bool "Enable Multiple entries of region type MEMORY in ranges for PCI"
	depends on PCI || DM_PCI
	default n
	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_MAP_SYSTEM_MEMORY
	bool "Map local system memory from a virtual base address"
	depends on PCI || DM_PCI
	depends on MIPS
	default n
	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 CONFIG_SYS_SDRAM_BASE is still
	  being used as virtual address.

config PCI_SRIOV
	bool "Enable Single Root I/O Virtualization support for PCI"
	depends on PCI || DM_PCI
	default n
	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_ARID
        bool "Enable Alternate Routing-ID support for PCI"
        depends on PCI || DM_PCI
        default n
        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 PCIE_ECAM_GENERIC
	bool "Generic ECAM-based PCI host controller support"
	default n
	depends on DM_PCI
	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"
	default n
	depends on DM_PCI
	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 PCI_PHYTIUM
	bool "Phytium PCIe support"
	depends on DM_PCI
	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 DM_PCI
	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 PCIE_FSL
	bool "FSL PowerPC PCIe support"
	depends on DM_PCI
	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"
	depends on DM_PCI
	help
	  Say Y here if you want to enable PCI controller support on FSL
	  PowerPC MPC85xx SoC.

config PCI_RCAR_GEN2
	bool "Renesas RCar Gen2 PCIe driver"
	depends on DM_PCI
	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 DM_PCI
	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 && DM_PCI
	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 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"
	depends on DM_PCI
	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
	default n

config PCIE_LAYERSCAPE_RC
	bool "Layerscape PCIe Root Complex mode support"
	depends on DM_PCI
	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"
	depends on DM_PCI
	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"
	depends on DM_PCI
	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,lx2160a-pcie" if ARCH_LX2160A
	default "fsl,ls2088a-pcie" if 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,lx2160a-pcie-ep" if ARCH_LX2160A
	default "fsl,ls-pcie-ep"
	help
	  This compatible is used to find pci controller ep node in Kernel DT
	  to complete fixup.

config PCIE_INTEL_FPGA
	bool "Intel FPGA PCIe support"
	depends on DM_PCI
	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"
	depends on DM_PCI
	help
	  Broadcom iProc PCIe controller driver.
	  Say Y here if you want to enable Broadcom iProc PCIe controller,

config PCI_MVEBU
	bool "Enable Armada XP/38x PCIe driver"
	depends on ARCH_MVEBU
	select DM_PCI
	select MISC
	help
	  Say Y here if you want to enable PCIe controller support on
	  Armada XP/38x SoCs.

config PCIE_DW_COMMON
	bool
	select DM_PCI

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 DM_PCI
	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 DM_PCI
	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 DM_PCI
	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 DM_PCI
	depends on ARCH_UNIPHIER
	select PHY_UNIPHIER_PCIE
	help
	  Say Y here if you want to enable PCIe controller support on
	  UniPhier SoCs.

endif
