i.MX6/7 Pcie legacy interrupt

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

i.MX6/7 Pcie legacy interrupt

Jump to solution
3,999 Views
andreagreco
Contributor I

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

Tags (1)
1 Solution
2,804 Views
MT
NXP Employee
NXP Employee

Solution is to disable MSI:

u-boot

setenv mmcargs setenv bootargs console=${console} root=${mmcroot} pci=nomsi

saveenv

BR

Mark

View solution in original post

0 Kudos
Reply
2 Replies
2,804 Views
garyjiang
Contributor II

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)

....

0 Kudos
Reply
2,805 Views
MT
NXP Employee
NXP Employee

Solution is to disable MSI:

u-boot

setenv mmcargs setenv bootargs console=${console} root=${mmcroot} pci=nomsi

saveenv

BR

Mark

0 Kudos
Reply