# 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 "Freescale i.MX6/7/8 PCIe controller"
	depends on ARCH_MXC || COMPILE_TEST
	depends on PCI_MSI
	select PCIE_DW_HOST

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
