Browse Source

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>
Arnd Bergmann 9 years ago
parent
commit
3ee803641e
5 changed files with 31 additions and 24 deletions
  1. 1 1
      arch/arm/Kconfig
  2. 2 2
      arch/arm64/Kconfig
  3. 8 10
      drivers/irqchip/Kconfig
  4. 1 1
      drivers/pci/Kconfig
  5. 19 10
      drivers/pci/host/Kconfig

+ 1 - 1
arch/arm/Kconfig

@@ -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

+ 2 - 2
arch/arm64/Kconfig

@@ -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

+ 8 - 10
drivers/irqchip/Kconfig

@@ -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 && PCI_MSI
-	select PCI_MSI_IRQ_DOMAIN
+	depends on PCI
+	select ARM_GIC
+	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

+ 1 - 1
drivers/pci/Kconfig

@@ -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
 
 

+ 19 - 10
drivers/pci/host/Kconfig

@@ -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
-	select PCI_MSI_IRQ_DOMAIN
+	depends on 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
-	select PCI_MSI_IRQ_DOMAIN
+	depends on 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
-	select PCI_MSI_IRQ_DOMAIN
+	depends on PCIE_ALTERA
+	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