# SPDX-License-Identifier: GPL-2.0

menu "DesignWare PCI Core Support"
	depends on PCI

config PCIE_DW
	bool

config PCIE_DW_HOST
	bool
	select PCIE_DW

config PCIE_DW_EP
	bool
	select PCIE_DW

config PCI_DRA7XX
	tristate

config PCI_DRA7XX_HOST
	tristate "TI DRA7xx PCIe controller Host Mode"
	depends on SOC_DRA7XX || COMPILE_TEST
	depends on OF && HAS_IOMEM && TI_PIPE3
	depends on PCI_MSI
	select PCIE_DW_HOST
	select PCI_DRA7XX
	default y if SOC_DRA7XX
	help
	  Enables support for the PCIe controller in the DRA7xx SoC to work in
	  host mode. There are two instances of PCIe controller in DRA7xx.
	  This controller can work either as EP or RC. In order to enable
	  host-specific features PCI_DRA7XX_HOST must be selected and in order
	  to enable device-specific features PCI_DRA7XX_EP must be selected.
	  This uses the DesignWare core.

config PCI_DRA7XX_EP
	tristate "TI DRA7xx PCIe controller Endpoint Mode"
	depends on SOC_DRA7XX || COMPILE_TEST
	depends on OF && HAS_IOMEM && TI_PIPE3
	depends on PCI_ENDPOINT
	select PCIE_DW_EP
	select PCI_DRA7XX
	help
	  Enables support for the PCIe controller in the DRA7xx SoC to work in
	  endpoint mode. There are two instances of PCIe controller in DRA7xx.
	  This controller can work either as EP or RC. In order to enable
	  host-specific features PCI_DRA7XX_HOST must be selected and in order
	  to enable device-specific features PCI_DRA7XX_EP must be selected.
	  This uses the DesignWare core.

config PCIE_DW_PLAT
	bool

config PCIE_DW_PLAT_HOST
	bool "Platform bus based DesignWare PCIe Controller - Host mode"
	depends on PCI_MSI
	select PCIE_DW_HOST
	select PCIE_DW_PLAT
	help
	  Enables support for the PCIe controller in the Designware IP to
	  work in host mode. There are two instances of PCIe controller in
	  Designware IP.
	  This controller can work either as EP or RC. In order to enable
	  host-specific features PCIE_DW_PLAT_HOST must be selected and in
	  order to enable device-specific features PCI_DW_PLAT_EP must be
	  selected.

config PCIE_DW_PLAT_EP
	bool "Platform bus based DesignWare PCIe Controller - Endpoint mode"
	depends on PCI && PCI_MSI
	depends on PCI_ENDPOINT
	select PCIE_DW_EP
	select PCIE_DW_PLAT
	help
	  Enables support for the PCIe controller in the Designware IP to
	  work in endpoint mode. There are two instances of PCIe controller
	  in Designware IP.
	  This controller can work either as EP or RC. In order to enable
	  host-specific features PCIE_DW_PLAT_HOST must be selected and in
	  order to enable device-specific features PCI_DW_PLAT_EP must be
	  selected.

config PCI_EXYNOS
	tristate "Samsung Exynos PCIe controller"
	depends on ARCH_EXYNOS || COMPILE_TEST
	depends on PCI_MSI
	select PCIE_DW_HOST
	help
	  Enables support for the PCIe controller in the Samsung Exynos SoCs
	  to work in host mode. The PCI controller is based on the DesignWare
	  hardware and therefore the driver re-uses the DesignWare core
	  functions to implement the driver.

config PCI_IMX6
	bool

config PCI_IMX6_HOST
	bool "Freescale i.MX6/7/8 PCIe controller host mode"
	depends on ARCH_MXC || COMPILE_TEST
	depends on PCI_MSI
	select PCIE_DW_HOST
	select PCI_IMX6
	help
	  Enables support for the PCIe controller in the i.MX SoCs to
	  work in Root Complex mode. The PCI controller on i.MX is based
	  on DesignWare hardware and therefore the driver re-uses the
	  DesignWare core functions to implement the driver.

config PCI_IMX6_EP
	bool "Freescale i.MX6/7/8 PCIe controller endpoint mode"
	depends on ARCH_MXC || COMPILE_TEST
	depends on PCI_ENDPOINT
	select PCIE_DW_EP
	select PCI_IMX6
	help
	  Enables support for the PCIe controller in the i.MX SoCs to
	  work in endpoint mode. The PCI controller on i.MX is based
	  on DesignWare hardware and therefore the driver re-uses the
	  DesignWare core functions to implement the driver.

config PCIE_SPEAR13XX
	bool "STMicroelectronics SPEAr PCIe controller"
	depends on ARCH_SPEAR13XX || COMPILE_TEST
	depends on PCI_MSI
	select PCIE_DW_HOST
	help
	  Say Y here if you want PCIe support on SPEAr13XX SoCs.

config PCI_KEYSTONE
	bool

config PCI_KEYSTONE_HOST
	bool "PCI Keystone Host Mode"
	depends on ARCH_KEYSTONE || ARCH_K3 || COMPILE_TEST
	depends on PCI_MSI
	select PCIE_DW_HOST
	select PCI_KEYSTONE
	help
	  Enables support for the PCIe controller in the Keystone SoC to
	  work in host mode. The PCI controller on Keystone is based on
	  DesignWare hardware and therefore the driver re-uses the
	  DesignWare core functions to implement the driver.

config PCI_KEYSTONE_EP
	bool "PCI Keystone Endpoint Mode"
	depends on ARCH_KEYSTONE || ARCH_K3 || COMPILE_TEST
	depends on PCI_ENDPOINT
	select PCIE_DW_EP
	select PCI_KEYSTONE
	help
	  Enables support for the PCIe controller in the Keystone SoC to
	  work in endpoint mode. The PCI controller on Keystone is based
	  on DesignWare hardware and therefore the driver re-uses the
	  DesignWare core functions to implement the driver.

config PCI_LAYERSCAPE
	bool "Freescale Layerscape PCIe controller - Host mode"
	depends on OF && (ARM || ARCH_LAYERSCAPE || COMPILE_TEST)
	depends on PCI_MSI
	select PCIE_DW_HOST
	select MFD_SYSCON
	help
	  Say Y here if you want to enable PCIe controller support on Layerscape
	  SoCs to work in Host mode.
	  This controller can work either as EP or RC. The RCW[HOST_AGT_PEX]
	  determines which PCIe controller works in EP mode and which PCIe
	  controller works in RC mode.

config PCI_LAYERSCAPE_EP
	bool "Freescale Layerscape PCIe controller - Endpoint mode"
	depends on OF && (ARM || ARCH_LAYERSCAPE || COMPILE_TEST)
	depends on PCI_ENDPOINT
	select PCIE_DW_EP
	help
	  Say Y here if you want to enable PCIe controller support on Layerscape
	  SoCs to work in Endpoint mode.
	  This controller can work either as EP or RC. The RCW[HOST_AGT_PEX]
	  determines which PCIe controller works in EP mode and which PCIe
	  controller works in RC mode.

config PCI_HISI
	depends on OF && (ARM64 || COMPILE_TEST)
	bool "HiSilicon Hip05 and Hip06 SoCs PCIe controllers"
	depends on PCI_MSI
	select PCIE_DW_HOST
	select PCI_HOST_COMMON
	help
	  Say Y here if you want PCIe controller support on HiSilicon
	  Hip05 and Hip06 SoCs

config PCIE_QCOM
	bool "Qualcomm PCIe controller"
	depends on OF && (ARCH_QCOM || COMPILE_TEST)
	depends on PCI_MSI
	select PCIE_DW_HOST
	select CRC8
	help
	  Say Y here to enable PCIe controller support on Qualcomm SoCs. The
	  PCIe controller uses the DesignWare core plus Qualcomm-specific
	  hardware wrappers.

config PCIE_QCOM_EP
	tristate "Qualcomm PCIe controller - Endpoint mode"
	depends on OF && (ARCH_QCOM || COMPILE_TEST)
	depends on PCI_ENDPOINT
	select PCIE_DW_EP
	help
	  Say Y here to enable support for the PCIe controllers on Qualcomm SoCs
	  to work in endpoint mode. The PCIe controller uses the DesignWare core
	  plus Qualcomm-specific hardware wrappers.

config PCIE_ARMADA_8K
	bool "Marvell Armada-8K PCIe controller"
	depends on ARCH_MVEBU || COMPILE_TEST
	depends on PCI_MSI
	select PCIE_DW_HOST
	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 and therefore the driver re-uses the
	  DesignWare core functions to implement the driver.

config PCIE_ARTPEC6
	bool

config PCIE_ARTPEC6_HOST
	bool "Axis ARTPEC-6 PCIe controller Host Mode"
	depends on MACH_ARTPEC6 || COMPILE_TEST
	depends on PCI_MSI
	select PCIE_DW_HOST
	select PCIE_ARTPEC6
	help
	  Enables support for the PCIe controller in the ARTPEC-6 SoC to work in
	  host mode. This uses the DesignWare core.

config PCIE_ARTPEC6_EP
	bool "Axis ARTPEC-6 PCIe controller Endpoint Mode"
	depends on MACH_ARTPEC6 || COMPILE_TEST
	depends on PCI_ENDPOINT
	select PCIE_DW_EP
	select PCIE_ARTPEC6
	help
	  Enables support for the PCIe controller in the ARTPEC-6 SoC to work in
	  endpoint mode. This uses the DesignWare core.

config PCIE_BT1
	tristate "Baikal-T1 PCIe controller"
	depends on MIPS_BAIKAL_T1 || COMPILE_TEST
	depends on PCI_MSI
	select PCIE_DW_HOST
	help
	  Enables support for the PCIe controller in the Baikal-T1 SoC to work
	  in host mode. It's based on the Synopsys DWC PCIe v4.60a IP-core.

config PCIE_ROCKCHIP_DW_HOST
	bool "Rockchip DesignWare PCIe controller"
	select PCIE_DW
	select PCIE_DW_HOST
	depends on PCI_MSI
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	depends on OF
	help
	  Enables support for the DesignWare PCIe controller in the
	  Rockchip SoC except RK3399.

config PCIE_INTEL_GW
	bool "Intel Gateway PCIe host controller support"
	depends on OF && (X86 || COMPILE_TEST)
	depends on PCI_MSI
	select PCIE_DW_HOST
	help
	  Say 'Y' here to enable PCIe Host controller support on Intel
	  Gateway SoCs.
	  The PCIe controller uses the DesignWare core plus Intel-specific
	  hardware wrappers.

config PCIE_KEEMBAY
	bool

config PCIE_KEEMBAY_HOST
	bool "Intel Keem Bay PCIe controller - Host mode"
	depends on ARCH_KEEMBAY || COMPILE_TEST
	depends on PCI_MSI
	select PCIE_DW_HOST
	select PCIE_KEEMBAY
	help
	  Say 'Y' here to enable support for the PCIe controller in Keem Bay
	  to work in host mode.
	  The PCIe controller is based on DesignWare Hardware and uses
	  DesignWare core functions.

config PCIE_KEEMBAY_EP
	bool "Intel Keem Bay PCIe controller - Endpoint mode"
	depends on ARCH_KEEMBAY || COMPILE_TEST
	depends on PCI_MSI
	depends on PCI_ENDPOINT
	select PCIE_DW_EP
	select PCIE_KEEMBAY
	help
	  Say 'Y' here to enable support for the PCIe controller in Keem Bay
	  to work in endpoint mode.
	  The PCIe controller is based on DesignWare Hardware and uses
	  DesignWare core functions.

config PCIE_KIRIN
	depends on OF && (ARM64 || COMPILE_TEST)
	tristate "HiSilicon Kirin series SoCs PCIe controllers"
	depends on PCI_MSI
	select PCIE_DW_HOST
	help
	  Say Y here if you want PCIe controller support
	  on HiSilicon Kirin series SoCs.

config PCIE_HISI_STB
	bool "HiSilicon STB SoCs PCIe controllers"
	depends on ARCH_HISI || COMPILE_TEST
	depends on PCI_MSI
	select PCIE_DW_HOST
	help
	  Say Y here if you want PCIe controller support on HiSilicon STB SoCs

config PCI_MESON
	tristate "MESON PCIe controller"
	default m if ARCH_MESON
	depends on PCI_MSI
	select PCIE_DW_HOST
	help
	  Say Y here if you want to enable PCI controller support on Amlogic
	  SoCs. The PCI controller on Amlogic is based on DesignWare hardware
	  and therefore the driver re-uses the DesignWare core functions to
	  implement the driver.

config PCIE_TEGRA194
	tristate

config PCIE_TEGRA194_HOST
	tristate "NVIDIA Tegra194 (and later) PCIe controller - Host Mode"
	depends on ARCH_TEGRA_194_SOC || COMPILE_TEST
	depends on PCI_MSI
	select PCIE_DW_HOST
	select PHY_TEGRA194_P2U
	select PCIE_TEGRA194
	help
	  Enables support for the PCIe controller in the NVIDIA Tegra194 SoC to
	  work in host mode. There are two instances of PCIe controllers in
	  Tegra194. This controller can work either as EP or RC. In order to
	  enable host-specific features PCIE_TEGRA194_HOST must be selected and
	  in order to enable device-specific features PCIE_TEGRA194_EP must be
	  selected. This uses the DesignWare core.

config PCIE_TEGRA194_EP
	tristate "NVIDIA Tegra194 (and later) PCIe controller - Endpoint Mode"
	depends on ARCH_TEGRA_194_SOC || COMPILE_TEST
	depends on PCI_ENDPOINT
	select PCIE_DW_EP
	select PHY_TEGRA194_P2U
	select PCIE_TEGRA194
	help
	  Enables support for the PCIe controller in the NVIDIA Tegra194 SoC to
	  work in endpoint mode. There are two instances of PCIe controllers in
	  Tegra194. This controller can work either as EP or RC. In order to
	  enable host-specific features PCIE_TEGRA194_HOST must be selected and
	  in order to enable device-specific features PCIE_TEGRA194_EP must be
	  selected. This uses the DesignWare core.

config PCIE_VISCONTI_HOST
	bool "Toshiba Visconti PCIe controllers"
	depends on ARCH_VISCONTI || COMPILE_TEST
	depends on PCI_MSI
	select PCIE_DW_HOST
	help
	  Say Y here if you want PCIe controller support on Toshiba Visconti SoC.
	  This driver supports TMPV7708 SoC.

config PCIE_UNIPHIER
	bool "Socionext UniPhier PCIe host controllers"
	depends on ARCH_UNIPHIER || COMPILE_TEST
	depends on OF && HAS_IOMEM
	depends on PCI_MSI
	select PCIE_DW_HOST
	help
	  Say Y here if you want PCIe host controller support on UniPhier SoCs.
	  This driver supports LD20 and PXs3 SoCs.

config PCIE_UNIPHIER_EP
	bool "Socionext UniPhier PCIe endpoint controllers"
	depends on ARCH_UNIPHIER || COMPILE_TEST
	depends on OF && HAS_IOMEM
	depends on PCI_ENDPOINT
	select PCIE_DW_EP
	help
	  Say Y here if you want PCIe endpoint controller support on
	  UniPhier SoCs. This driver supports Pro5 SoC.

config PCIE_AL
	bool "Amazon Annapurna Labs PCIe controller"
	depends on OF && (ARM64 || COMPILE_TEST)
	depends on PCI_MSI
	select PCIE_DW_HOST
	select PCI_ECAM
	help
	  Say Y here to enable support of the Amazon's Annapurna Labs PCIe
	  controller IP on Amazon SoCs. The PCIe controller uses the DesignWare
	  core plus Annapurna Labs proprietary hardware wrappers. This is
	  required only for DT-based platforms. ACPI platforms with the
	  Annapurna Labs PCIe controller don't need to enable this.

config PCIE_FU740
	bool "SiFive FU740 PCIe host controller"
	depends on PCI_MSI
	depends on SOC_SIFIVE || COMPILE_TEST
	select PCIE_DW_HOST
	help
	  Say Y here if you want PCIe controller support for the SiFive
	  FU740.

endmenu
