# SPDX-License-Identifier: GPL-2.0

menu "DesignWare-based PCIe controllers"
	depends on PCI

config PCIE_DW
	bool

config PCIE_DW_HOST
	bool
	select PCIE_DW

config PCIE_DW_EP
	bool
	select PCIE_DW

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 PCI_MESON
	tristate "Amlogic 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_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 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 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 controller"
	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_KIRIN
	depends on OF && (ARM64 || COMPILE_TEST)
	tristate "HiSilicon Kirin PCIe controller"
	depends on PCI_MSI
	select PCIE_DW_HOST
	select REGMAP_MMIO
	help
	  Say Y here if you want PCIe controller support
	  on HiSilicon Kirin series SoCs.

config PCIE_HISI_STB
	bool "HiSilicon STB PCIe controller"
	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 PCIE_INTEL_GW
	bool "Intel Gateway PCIe controller "
	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_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_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_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 PCIE_QCOM
	bool "Qualcomm PCIe controller (host mode)"
	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_RCAR_GEN4
	tristate

config PCIE_RCAR_GEN4_HOST
	tristate "Renesas R-Car Gen4 PCIe controller (host mode)"
	depends on ARCH_RENESAS || COMPILE_TEST
	depends on PCI_MSI
	select PCIE_DW_HOST
	select PCIE_RCAR_GEN4
	help
	  Say Y here if you want PCIe controller (host mode) on R-Car Gen4 SoCs.
	  To compile this driver as a module, choose M here: the module will be
	  called pcie-rcar-gen4.ko. This uses the DesignWare core.

config PCIE_RCAR_GEN4_EP
	tristate "Renesas R-Car Gen4 PCIe controller (endpoint mode)"
	depends on ARCH_RENESAS || COMPILE_TEST
	depends on PCI_ENDPOINT
	select PCIE_DW_EP
	select PCIE_RCAR_GEN4
	help
	  Say Y here if you want PCIe controller (endpoint mode) on R-Car Gen4
	  SoCs. To compile this driver as a module, choose M here: the module
	  will be called pcie-rcar-gen4.ko. This uses the DesignWare 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 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 PCIE_FU740
	bool "SiFive FU740 PCIe controller"
	depends on PCI_MSI
	depends on ARCH_SIFIVE || COMPILE_TEST
	select PCIE_DW_HOST
	help
	  Say Y here if you want PCIe controller support for the SiFive
	  FU740.

config PCIE_UNIPHIER
	bool "Socionext UniPhier PCIe controller (host mode)"
	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 controller (endpoint mode)"
	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_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_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 PCI_KEYSTONE
	bool

config PCI_KEYSTONE_HOST
	bool "TI Keystone PCIe controller (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 "TI Keystone PCIe controller (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 PCIE_VISCONTI_HOST
	bool "Toshiba Visconti PCIe controller"
	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.

endmenu
