PCI/MSI: irqchip: Fix PCI_MSI dependencies

The PCI_MSI symbol is used inconsistently throughout the tree, with some
drivers using 'select' and others using 'depends on', or using conditional
selects.  This keeps causing problems; the latest one is a result of
ARCH_ALPINE using a 'select' statement to enable its platform-specific MSI
driver without enabling MSI:

  warning: (ARCH_ALPINE) selects ALPINE_MSI which has unmet direct dependencies (PCI && PCI_MSI)
  drivers/irqchip/irq-alpine-msi.c:104:15: error: variable 'alpine_msix_domain_info' has initializer but incomplete type
   static struct msi_domain_info alpine_msix_domain_info = {
		 ^~~~~~~~~~~~~~~
  drivers/irqchip/irq-alpine-msi.c:105:2: error: unknown field 'flags' specified in initializer
    .flags = MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
    ^
  drivers/irqchip/irq-alpine-msi.c:105:11: error: 'MSI_FLAG_USE_DEF_DOM_OPS' undeclared here (not in a function)
    .flags = MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
	     ^~~~~~~~~~~~~~~~~~~~~~~~

There is little reason to enable PCI support for a platform that uses MSI
but then leave MSI disabled at compile time.

Select PCI_MSI from irqchips that implement MSI, and make PCI host bridges
that use MSI on ARM depend on PCI_MSI_IRQ_DOMAIN.

For all three architectures that support PCI_MSI_IRQ_DOMAIN (ARM, ARM64,
X86), enable it by default whenever MSI is enabled.

[bhelgaas: changelog, omit crypto config change]
Suggested-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Marc Zyngier <marc.zyngier@arm.com>
This commit is contained in:
Arnd Bergmann 2016-06-15 15:47:33 -05:00 committed by Bjorn Helgaas
parent af8c34ce6a
commit 3ee803641e
5 changed files with 31 additions and 24 deletions

View File

@ -715,7 +715,7 @@ config ARCH_VIRT
depends on ARCH_MULTI_V7 depends on ARCH_MULTI_V7
select ARM_AMBA select ARM_AMBA
select ARM_GIC select ARM_GIC
select ARM_GIC_V2M if PCI_MSI select ARM_GIC_V2M if PCI
select ARM_GIC_V3 select ARM_GIC_V3
select ARM_PSCI select ARM_PSCI
select HAVE_ARM_ARCH_TIMER select HAVE_ARM_ARCH_TIMER

View File

@ -20,9 +20,9 @@ config ARM64
select ARM_ARCH_TIMER select ARM_ARCH_TIMER
select ARM_GIC select ARM_GIC
select AUDIT_ARCH_COMPAT_GENERIC select AUDIT_ARCH_COMPAT_GENERIC
select ARM_GIC_V2M if PCI_MSI select ARM_GIC_V2M if PCI
select ARM_GIC_V3 select ARM_GIC_V3
select ARM_GIC_V3_ITS if PCI_MSI select ARM_GIC_V3_ITS if PCI
select ARM_PSCI_FW select ARM_PSCI_FW
select BUILDTIME_EXTABLE_SORT select BUILDTIME_EXTABLE_SORT
select CLONE_BACKWARDS select CLONE_BACKWARDS

View File

@ -15,9 +15,9 @@ config ARM_GIC_MAX_NR
config ARM_GIC_V2M config ARM_GIC_V2M
bool bool
depends on ARM_GIC depends on PCI
depends on PCI && PCI_MSI select ARM_GIC
select PCI_MSI_IRQ_DOMAIN select PCI_MSI
config GIC_NON_BANKED config GIC_NON_BANKED
bool bool
@ -31,7 +31,8 @@ config ARM_GIC_V3
config ARM_GIC_V3_ITS config ARM_GIC_V3_ITS
bool bool
select PCI_MSI_IRQ_DOMAIN depends on PCI
depends on PCI_MSI
config ARM_NVIC config ARM_NVIC
bool bool
@ -56,13 +57,13 @@ config ARM_VIC_NR
config ARMADA_370_XP_IRQ config ARMADA_370_XP_IRQ
bool bool
select GENERIC_IRQ_CHIP select GENERIC_IRQ_CHIP
select PCI_MSI_IRQ_DOMAIN if PCI_MSI select PCI_MSI if PCI
config ALPINE_MSI config ALPINE_MSI
bool bool
depends on PCI && PCI_MSI depends on PCI
select PCI_MSI
select GENERIC_IRQ_CHIP select GENERIC_IRQ_CHIP
select PCI_MSI_IRQ_DOMAIN
config ATMEL_AIC_IRQ config ATMEL_AIC_IRQ
bool bool
@ -111,7 +112,6 @@ config HISILICON_IRQ_MBIGEN
bool bool
select ARM_GIC_V3 select ARM_GIC_V3
select ARM_GIC_V3_ITS select ARM_GIC_V3_ITS
select GENERIC_MSI_IRQ_DOMAIN
config IMGPDC_IRQ config IMGPDC_IRQ
bool bool
@ -244,12 +244,10 @@ config IRQ_MXS
config MVEBU_ODMI config MVEBU_ODMI
bool bool
select GENERIC_MSI_IRQ_DOMAIN
config LS_SCFG_MSI config LS_SCFG_MSI
def_bool y if SOC_LS1021A || ARCH_LAYERSCAPE def_bool y if SOC_LS1021A || ARCH_LAYERSCAPE
depends on PCI && PCI_MSI depends on PCI && PCI_MSI
select PCI_MSI_IRQ_DOMAIN
config PARTITION_PERCPU config PARTITION_PERCPU
bool bool

View File

@ -25,7 +25,7 @@ config PCI_MSI
If you don't know what to do here, say Y. If you don't know what to do here, say Y.
config PCI_MSI_IRQ_DOMAIN config PCI_MSI_IRQ_DOMAIN
bool def_bool ARM || ARM64 || X86
depends on PCI_MSI depends on PCI_MSI
select GENERIC_MSI_IRQ_DOMAIN select GENERIC_MSI_IRQ_DOMAIN

View File

@ -3,8 +3,9 @@ menu "PCI host controller drivers"
config PCI_DRA7XX config PCI_DRA7XX
bool "TI DRA7xx PCIe controller" bool "TI DRA7xx PCIe controller"
select PCIE_DW
depends on OF && HAS_IOMEM && TI_PIPE3 depends on OF && HAS_IOMEM && TI_PIPE3
depends on PCI_MSI_IRQ_DOMAIN
select PCIE_DW
help help
Enables support for the PCIe controller in the DRA7xx SoC. There Enables support for the PCIe controller in the DRA7xx SoC. There
are two instances of PCIe controller in DRA7xx. This controller can are two instances of PCIe controller in DRA7xx. This controller can
@ -20,7 +21,7 @@ config PCI_MVEBU
config PCIE_XILINX_NWL config PCIE_XILINX_NWL
bool "NWL PCIe Core" bool "NWL PCIe Core"
depends on ARCH_ZYNQMP depends on ARCH_ZYNQMP
select PCI_MSI_IRQ_DOMAIN if PCI_MSI depends on PCI_MSI_IRQ_DOMAIN
help help
Say 'Y' here if you want kernel support for Xilinx Say 'Y' here if you want kernel support for Xilinx
NWL PCIe controller. The controller can act as Root Port NWL PCIe controller. The controller can act as Root Port
@ -29,6 +30,7 @@ config PCIE_XILINX_NWL
config PCIE_DW_PLAT config PCIE_DW_PLAT
bool "Platform bus based DesignWare PCIe Controller" bool "Platform bus based DesignWare PCIe Controller"
depends on PCI_MSI_IRQ_DOMAIN
select PCIE_DW select PCIE_DW
---help--- ---help---
This selects the DesignWare PCIe controller support. Select this if This selects the DesignWare PCIe controller support. Select this if
@ -40,16 +42,19 @@ config PCIE_DW_PLAT
config PCIE_DW config PCIE_DW
bool bool
depends on PCI_MSI_IRQ_DOMAIN
config PCI_EXYNOS config PCI_EXYNOS
bool "Samsung Exynos PCIe controller" bool "Samsung Exynos PCIe controller"
depends on SOC_EXYNOS5440 depends on SOC_EXYNOS5440
depends on PCI_MSI_IRQ_DOMAIN
select PCIEPORTBUS select PCIEPORTBUS
select PCIE_DW select PCIE_DW
config PCI_IMX6 config PCI_IMX6
bool "Freescale i.MX6 PCIe controller" bool "Freescale i.MX6 PCIe controller"
depends on SOC_IMX6Q depends on SOC_IMX6Q
depends on PCI_MSI_IRQ_DOMAIN
select PCIEPORTBUS select PCIEPORTBUS
select PCIE_DW select PCIE_DW
@ -72,8 +77,7 @@ config PCI_RCAR_GEN2
config PCIE_RCAR config PCIE_RCAR
bool "Renesas R-Car PCIe controller" bool "Renesas R-Car PCIe controller"
depends on ARCH_RENESAS || (ARM && COMPILE_TEST) depends on ARCH_RENESAS || (ARM && COMPILE_TEST)
select PCI_MSI depends on PCI_MSI_IRQ_DOMAIN
select PCI_MSI_IRQ_DOMAIN
help help
Say Y here if you want PCIe controller support on R-Car SoCs. Say Y here if you want PCIe controller support on R-Car SoCs.
@ -92,6 +96,7 @@ config PCI_HOST_GENERIC
config PCIE_SPEAR13XX config PCIE_SPEAR13XX
bool "STMicroelectronics SPEAr PCIe controller" bool "STMicroelectronics SPEAr PCIe controller"
depends on ARCH_SPEAR13XX depends on ARCH_SPEAR13XX
depends on PCI_MSI_IRQ_DOMAIN
select PCIEPORTBUS select PCIEPORTBUS
select PCIE_DW select PCIE_DW
help help
@ -100,6 +105,7 @@ config PCIE_SPEAR13XX
config PCI_KEYSTONE config PCI_KEYSTONE
bool "TI Keystone PCIe controller" bool "TI Keystone PCIe controller"
depends on ARCH_KEYSTONE depends on ARCH_KEYSTONE
depends on PCI_MSI_IRQ_DOMAIN
select PCIE_DW select PCIE_DW
select PCIEPORTBUS select PCIEPORTBUS
help help
@ -120,7 +126,6 @@ config PCI_XGENE
depends on ARCH_XGENE depends on ARCH_XGENE
depends on OF depends on OF
select PCIEPORTBUS select PCIEPORTBUS
select PCI_MSI_IRQ_DOMAIN if PCI_MSI
help help
Say Y here if you want internal PCI support on APM X-Gene SoC. Say Y here if you want internal PCI support on APM X-Gene SoC.
There are 5 internal PCIe ports available. Each port is GEN3 capable There are 5 internal PCIe ports available. Each port is GEN3 capable
@ -128,7 +133,8 @@ config PCI_XGENE
config PCI_XGENE_MSI config PCI_XGENE_MSI
bool "X-Gene v1 PCIe MSI feature" bool "X-Gene v1 PCIe MSI feature"
depends on PCI_XGENE && PCI_MSI depends on PCI_XGENE
depends on PCI_MSI_IRQ_DOMAIN
default y default y
help help
Say Y here if you want PCIe MSI support for the APM X-Gene v1 SoC. Say Y here if you want PCIe MSI support for the APM X-Gene v1 SoC.
@ -137,6 +143,7 @@ config PCI_XGENE_MSI
config PCI_LAYERSCAPE config PCI_LAYERSCAPE
bool "Freescale Layerscape PCIe controller" bool "Freescale Layerscape PCIe controller"
depends on OF && (ARM || ARCH_LAYERSCAPE) depends on OF && (ARM || ARCH_LAYERSCAPE)
depends on PCI_MSI_IRQ_DOMAIN
select PCIE_DW select PCIE_DW
select MFD_SYSCON select MFD_SYSCON
help help
@ -177,8 +184,7 @@ config PCIE_IPROC_BCMA
config PCIE_IPROC_MSI config PCIE_IPROC_MSI
bool "Broadcom iProc PCIe MSI support" bool "Broadcom iProc PCIe MSI support"
depends on PCIE_IPROC_PLATFORM || PCIE_IPROC_BCMA depends on PCIE_IPROC_PLATFORM || PCIE_IPROC_BCMA
depends on PCI_MSI depends on PCI_MSI_IRQ_DOMAIN
select PCI_MSI_IRQ_DOMAIN
default ARCH_BCM_IPROC default ARCH_BCM_IPROC
help help
Say Y here if you want to enable MSI support for Broadcom's iProc Say Y here if you want to enable MSI support for Broadcom's iProc
@ -195,8 +201,8 @@ config PCIE_ALTERA
config PCIE_ALTERA_MSI config PCIE_ALTERA_MSI
bool "Altera PCIe MSI feature" bool "Altera PCIe MSI feature"
depends on PCIE_ALTERA && PCI_MSI depends on PCIE_ALTERA
select PCI_MSI_IRQ_DOMAIN depends on PCI_MSI_IRQ_DOMAIN
help help
Say Y here if you want PCIe MSI support for the Altera FPGA. Say Y here if you want PCIe MSI support for the Altera FPGA.
This MSI driver supports Altera MSI to GIC controller IP. This MSI driver supports Altera MSI to GIC controller IP.
@ -204,6 +210,7 @@ config PCIE_ALTERA_MSI
config PCI_HISI config PCI_HISI
depends on OF && ARM64 depends on OF && ARM64
bool "HiSilicon Hip05 and Hip06 SoCs PCIe controllers" bool "HiSilicon Hip05 and Hip06 SoCs PCIe controllers"
depends on PCI_MSI_IRQ_DOMAIN
select PCIEPORTBUS select PCIEPORTBUS
select PCIE_DW select PCIE_DW
help help
@ -213,6 +220,7 @@ config PCI_HISI
config PCIE_QCOM config PCIE_QCOM
bool "Qualcomm PCIe controller" bool "Qualcomm PCIe controller"
depends on ARCH_QCOM && OF depends on ARCH_QCOM && OF
depends on PCI_MSI_IRQ_DOMAIN
select PCIE_DW select PCIE_DW
select PCIEPORTBUS select PCIEPORTBUS
help help
@ -237,6 +245,7 @@ config PCI_HOST_THUNDER_ECAM
config PCIE_ARMADA_8K config PCIE_ARMADA_8K
bool "Marvell Armada-8K PCIe controller" bool "Marvell Armada-8K PCIe controller"
depends on ARCH_MVEBU depends on ARCH_MVEBU
depends on PCI_MSI_IRQ_DOMAIN
select PCIE_DW select PCIE_DW
select PCIEPORTBUS select PCIEPORTBUS
help help