The PCIe DWC host controller is now using MSI (Message-signaled-interrupts) by default. While ath9k itself does support MSI here, a lot of wlan adapters do not. Avoid non-functioning cards by simply continue to disable MSI for now. This can be done by appending "pci=nomsi" to the boot cmdline. Also an extra fix needs to be backported which avoids MSI initialization which prevented legacy IRQ's init from taking over. Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
		
			
				
	
	
		
			49 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 26a3cdb73644090ff9a2fb68775ef61d361a8883 Mon Sep 17 00:00:00 2001
 | 
						|
From: Lucas Stach <l.stach@pengutronix.de>
 | 
						|
Date: Wed, 27 Feb 2019 17:52:19 +0100
 | 
						|
Subject: [PATCH] PCI: dwc: skip MSI init if MSIs have been explicitly disabled
 | 
						|
 | 
						|
commit 3afc8299f39a27b60e1519a28e18878ce878e7dd upstream.
 | 
						|
 | 
						|
Since 7c5925afbc58 (PCI: dwc: Move MSI IRQs allocation to IRQ domains
 | 
						|
hierarchical API) the MSI init claims one of the controller IRQs as a
 | 
						|
chained IRQ line for the MSI controller. On some designs, like the i.MX6,
 | 
						|
this line is shared with a PCIe legacy IRQ. When the line is claimed for
 | 
						|
the MSI domain, any device trying to use this legacy IRQs will fail to
 | 
						|
request this IRQ line.
 | 
						|
 | 
						|
As MSI and legacy IRQs are already mutually exclusive on the DWC core,
 | 
						|
as the core won't forward any legacy IRQs once any MSI has been enabled,
 | 
						|
users wishing to use legacy IRQs already need to explictly disable MSI
 | 
						|
support (usually via the pci=nomsi kernel commandline option). To avoid
 | 
						|
any issues with MSI conflicting with legacy IRQs, just skip all of the
 | 
						|
DWC MSI initalization, including the IRQ line claim, when MSI is disabled.
 | 
						|
 | 
						|
Fixes: 7c5925afbc58 ("PCI: dwc: Move MSI IRQs allocation to IRQ domains hierarchical API")
 | 
						|
Tested-by: Tim Harvey <tharvey@gateworks.com>
 | 
						|
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
 | 
						|
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
 | 
						|
Acked-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
 | 
						|
Cc: stable@vger.kernel.org
 | 
						|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 | 
						|
---
 | 
						|
 drivers/pci/controller/dwc/pcie-designware-host.c | 2 +-
 | 
						|
 1 file changed, 1 insertion(+), 1 deletion(-)
 | 
						|
 | 
						|
diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
 | 
						|
index 0fa9e8fdce66..b56e22262a77 100644
 | 
						|
--- a/drivers/pci/controller/dwc/pcie-designware-host.c
 | 
						|
+++ b/drivers/pci/controller/dwc/pcie-designware-host.c
 | 
						|
@@ -439,7 +439,7 @@ int dw_pcie_host_init(struct pcie_port *pp)
 | 
						|
 	if (ret)
 | 
						|
 		pci->num_viewport = 2;
 | 
						|
 
 | 
						|
-	if (IS_ENABLED(CONFIG_PCI_MSI)) {
 | 
						|
+	if (IS_ENABLED(CONFIG_PCI_MSI) && pci_msi_enabled()) {
 | 
						|
 		/*
 | 
						|
 		 * If a specific SoC driver needs to change the
 | 
						|
 		 * default number of vectors, it needs to implement
 | 
						|
-- 
 | 
						|
2.17.1
 | 
						|
 |