Hello,
I get some trouble with the PCIe, problem occur with Pcie legacy interrupt, interrupt never fire.
i.MX6 with Apalis Evaluation Board
i.MX7 with Sabre RevD
Tested with Linux rel_imx_4.1.15_2.1.0_ga:
In this release all works also pcie legacy interrupt.
Linux rel_imx_4.9.x_1.0.0_ga:
In this release legacy interrupt is broken, and not working.
MSI interrupt working.
My Pcie endpoint is a Ath9K and Ath10k.
Consideration over Linux Pcie Host driver.
The pci Host code in linux is hardly-changed from 4.1 to 4.9, so i think some change break, imx6/7 initialization.
A big change of Designware host drivers is example ATU support added.
In i.MX6/7 Manual is not described how PCIe RootComplex is connected i.MX6/7 platform.
Other Pcie Host drivers
Other Soc with "i suppose" same Pcie silicon implementations, initialize legacy interrupt, and handle it.
I'm referring to: pci-exynos.c and pci-keystone-dw.c
It also write some register, called IRQ_INTA_ASSERT and friends.
So, i think a help from NXP is required for let this works in Linux 4.9 and later.
Regards,
Andrea
Solved! Go to Solution.
Solution is to disable MSI:
u-boot
setenv mmcargs setenv bootargs console=${console} root=${mmcroot} pci=nomsi
saveenv
BR
Mark
Hi,
I do not know if this could help. It seems that I am facing the similar issue with the legacy interrupt (imx8 kernel 4.9). I think the below test could prove that. I changed the ath10k driver to legacy mode(see patch below). after that the wlan driver failed to bring up. However in default mode the wlan driver works fine. In default it uses MSI interrupt.
diff -uNr kernel-source-patched/drivers/net/wireless/ath/ath10k/pci.c kernel-source-debug/drivers/net/wireless/ath/ath10k/pci.c
--- kernel-source-patched/drivers/net/wireless/ath/ath10k/pci.c 2018-04-16 10:57:55.504484324 +0100
+++ kernel-source-debug/drivers/net/wireless/ath/ath10k/pci.c 2018-05-23 13:43:48.270960913 +0100
@@ -38,11 +38,11 @@
ATH10K_PCI_RESET_WARM_ONLY = 1,
};
-static unsigned int ath10k_pci_irq_mode = ATH10K_PCI_IRQ_AUTO;
+static unsigned int ath10k_pci_irq_mode = ATH10K_PCI_IRQ_LEGACY;
static unsigned int ath10k_pci_reset_mode = ATH10K_PCI_RESET_AUTO;
module_param_named(irq_mode, ath10k_pci_irq_mode, uint, 0644);
-MODULE_PARM_DESC(irq_mode, "0: auto, 1: legacy, 2: msi (default: 0)");
+MODULE_PARM_DESC(irq_mode, "0: auto, 1: legacy, 2: msi (default: 1)");
module_param_named(reset_mode, ath10k_pci_reset_mode, uint, 0644);
MODULE_PARM_DESC(reset_mode, "0: auto, 1: warm only (default: 0)");
==dmesg legacy==
....
[ 2.362793] ath10k_pci 0000:01:00.0: pci irq legacy oper_irq_mode 1 irq_mode 1 reset_mode 0
.....
[ 10.271765] ath10k_pci 0000:01:00.0: failed to connect htt (-110)
....
Solution is to disable MSI:
u-boot
setenv mmcargs setenv bootargs console=${console} root=${mmcroot} pci=nomsi
saveenv
BR
Mark