From 9c63141025ed5554891a1e4ae9be221f64ec0888 Mon Sep 17 00:00:00 2001 From: Koen Vandeputte Date: Thu, 21 Mar 2019 15:08:26 +0100 Subject: [PATCH] imx6: fix legacy IRQ support (4.19) 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 --- ...-init-if-MSIs-have-been-explicitly-d.patch | 48 +++++++++++++++++++ target/linux/imx6/config-4.19 | 2 + 2 files changed, 50 insertions(+) create mode 100644 target/linux/generic/backport-4.19/030-PCI-dwc-skip-MSI-init-if-MSIs-have-been-explicitly-d.patch diff --git a/target/linux/generic/backport-4.19/030-PCI-dwc-skip-MSI-init-if-MSIs-have-been-explicitly-d.patch b/target/linux/generic/backport-4.19/030-PCI-dwc-skip-MSI-init-if-MSIs-have-been-explicitly-d.patch new file mode 100644 index 0000000000..d87dfd26ef --- /dev/null +++ b/target/linux/generic/backport-4.19/030-PCI-dwc-skip-MSI-init-if-MSIs-have-been-explicitly-d.patch @@ -0,0 +1,48 @@ +From 26a3cdb73644090ff9a2fb68775ef61d361a8883 Mon Sep 17 00:00:00 2001 +From: Lucas Stach +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 +Signed-off-by: Lucas Stach +Signed-off-by: Lorenzo Pieralisi +Acked-by: Gustavo Pimentel +Cc: stable@vger.kernel.org +Signed-off-by: Greg Kroah-Hartman +--- + 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 + diff --git a/target/linux/imx6/config-4.19 b/target/linux/imx6/config-4.19 index 3ff2d902cb..9fada9a01a 100644 --- a/target/linux/imx6/config-4.19 +++ b/target/linux/imx6/config-4.19 @@ -65,6 +65,8 @@ CONFIG_CLKSRC_IMX_GPT=y CONFIG_CLKSRC_MMIO=y CONFIG_CLONE_BACKWARDS=y CONFIG_CLZ_TAB=y +CONFIG_CMDLINE="pci=nomsi" +CONFIG_CMDLINE_EXTEND=y CONFIG_COMMON_CLK=y CONFIG_CPUFREQ_DT=y CONFIG_CPUFREQ_DT_PLATDEV=y -- 2.30.2