PCie2USB Card on Apalis iMX6

I am testing MCS9990 on Apalis i.MX6 2GB with Ixora board. The PCIe is fixed at PCIe 1.0. The MCS9990 card can be recognized.

root@apalis-imx6:~# lspci
00:00.0 PCI bridge: Synopsys, Inc. Device abcd (rev 01)
01:00.0 USB controller: MosChip Semiconductor Technology Ltd. MCS9990 PCIe to 4-Port USB 2.0 Host Controller
01:00.1 USB controller: MosChip Semiconductor Technology Ltd. MCS9990 PCIe to 4‐Port USB 2.0 Host Controller
01:00.2 USB controller: MosChip Semiconductor Technology Ltd. MCS9990 PCIe to 4‐Port USB 2.0 Host Controller
01:00.3 USB controller: MosChip Semiconductor Technology Ltd. MCS9990 PCIe to 4‐Port USB 2.0 Host Controller
01:00.4 USB controller: MosChip Semiconductor Technology Ltd. MCS9990 PCIe to 4‐Port USB 2.0 Host Controller
01:00.5 USB controller: MosChip Semiconductor Technology Ltd. MCS9990 PCIe to 4‐Port USB 2.0 Host Controller
01:00.6 USB controller: MosChip Semiconductor Technology Ltd. MCS9990 PCIe to 4‐Port USB 2.0 Host Controller
01:00.7 USB controller: MosChip Semiconductor Technology Ltd. MCS9990 PCIe to 4‐Port USB 2.0 Host Controller
root@apalis-imx6:~# lsusb
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

But the usb stick can’t be seen when plugged into MCS9990 card. There is some kernel error when poweoff.

   37.818297] systemd-shutdown[1]: Powering off.
[   38.251990] irq 152: nobody cared (try booting with the "irqpoll" option)
[   38.259030] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.14.52 #8
[   38.265236] Backtrace: 
[   38.267858] [<80011dbc>] (dump_backtrace) from [<80011fcc>] (show_stack+0x18/0x1c)
[   38.275672]  r7:00000000 r6:00000098 r5:808ee748 r4:00000000
[   38.281714] [<80011fb4>] (show_stack) from [<806664b8>] (dump_stack+0x7c/0x8c)
[   38.289194] [<8066643c>] (dump_stack) from [<800734cc>] (__report_bad_irq+0x30/0xd4)
[   38.297182]  r5:ce0113c0 r4:ce01141c
[   38.300979] [<8007349c>] (__report_bad_irq) from [<80073ac0>] (note_interrupt+0x2a4/0x2f4)
[   38.309500]  r9:ce0113c0 r8:00000098 r7:00000000 r6:00000098 r5:00000000 r4:ce0113c0
[   38.317707] [<8007381c>] (note_interrupt) from [<80071578>] (handle_irq_event_percpu+0x144/0x1a0)
[   38.326852]  r10:80913dc0 r9:ce0113c0 r8:00000098 r7:00000000 r6:00000000 r5:00000000
[   38.335128]  r4:00000000 r3:00000000
[   38.338919] [<80071434>] (handle_irq_event_percpu) from [<80071620>] (handle_irq_event+0x4c/0x6c)
[   38.348063]  r10:808d0000 r9:00000001 r8:00000001 r7:f4a00100 r6:808d1ed0 r5:ce01141c
[   38.356339]  r4:ce0113c0
[   38.359022] [<800715d4>] (handle_irq_event) from [<800747d0>] (handle_fasteoi_irq+0x88/0x160)
[   38.367808]  r7:f4a00100 r6:808d1ed0 r5:00000098 r4:ce0113c0
[   38.373826] [<80074748>] (handle_fasteoi_irq) from [<80070b74>] (generic_handle_irq+0x34/0x44)
[   38.382703]  r5:00000098 r4:00000098
[   38.386499] [<80070b40>] (generic_handle_irq) from [<8000f000>] (handle_IRQ+0x48/0x98)
[   38.394663]  r5:00000098 r4:808cddbc
[   38.398457] [<8000efb8>] (handle_IRQ) from [<80008520>] (gic_handle_irq+0x34/0x64)
[   38.406264]  r7:f4a00100 r6:808d1dd0 r5:808d8978 r4:f4a0010c
[   38.412288] [<800084ec>] (gic_handle_irq) from [<80012ac0>] (__irq_svc+0x40/0x50)
[   38.420007] Exception stack(0x808d1dd0 to 0x808d1e18)
[   38.425233] 1dc0:                                     00000001 80915a00 00000000 00000000
[   38.433676] 1de0: 00000282 00000057 808d0000 f4a00100 00000001 00000001 808d0000 808d1e74
[   38.442114] 1e00: 80915a00 808d1e18 800344a8 80034548 20010113 ffffffff
[   38.448939]  r7:808d1e04 r6:ffffffff r5:20010113 r4:80034548
[   38.454969] [<80034488>] (__do_softirq) from [<80034968>] (irq_exit+0xb0/0xf8)
[   38.462419]  r10:808d0000 r9:00000001 r8:00000001 r7:f4a00100 r6:00000000 r5:00000057
[   38.470697]  r4:808d0000
[   38.473381] [<800348b8>] (irq_exit) from [<8000f004>] (handle_IRQ+0x4c/0x98)
[   38.480654]  r5:00000057 r4:808cddbc
[   38.484446] [<8000efb8>] (handle_IRQ) from [<80008520>] (gic_handle_irq+0x34/0x64)
[   38.492255]  r7:f4a00100 r6:808d1ed0 r5:808d8978 r4:f4a0010c
[   38.498277] [<800084ec>] (gic_handle_irq) from [<80012ac0>] (__irq_svc+0x40/0x50)
[   38.505996] Exception stack(0x808d1ed0 to 0x808d1f18)
[   38.511223] 1ec0:                                     808d1f18 3b9aca00 ce3db036 00000008
[   38.519666] 1ee0: d0f0d010 808de3d8 ce394b36 00000008 00000001 00000001 808d0000 808d1f4c
[   38.528104] 1f00: 00000017 808d1f18 00000009 80499ac8 00010013 ffffffff
[   38.534930]  r7:808d1f04 r6:ffffffff r5:00010013 r4:80499ac8
[   38.540966] [<80499a70>] (cpuidle_enter_state) from [<80499c60>] (cpuidle_idle_call+0x104/0x158)
[   38.550023]  r8:d0f0d014 r7:808de3d8 r6:8096b598 r5:00000000 r4:d0f0d010
[   38.557157] [<80499b5c>] (cpuidle_idle_call) from [<8000f3b4>] (arch_cpu_idle+0x10/0x4c)
[   38.565502]  r9:80913dbe r8:8066e70c r7:808d0000 r6:808d8574 r5:808d8510 r4:808d0000
[   38.573709] [<8000f3a4>] (arch_cpu_idle) from [<80070ae0>] (cpu_startup_entry+0x104/0x144)
[   38.582252] [<800709dc>] (cpu_startup_entry) from [<8066384c>] (rest_init+0x7c/0x80)
[   38.590238]  r7:ffffffff
[   38.592929] [<806637d0>] (rest_init) from [<8087dbc4>] (start_kernel+0x354/0x360)
[   38.612173] [<8087d870>] (start_kernel) from [<10008074>] (0x10008074)
[   38.630514] handlers:
[   38.644410] [<802ebe20>] imx6_pcie_msi_handler
[   38.660513] [<8041b36c>] usb_hcd_irq
[   38.675629] Disabling IRQ #152

irq 152 ~ 155 are assigned to MCS9990 device.

152:     100001          0          0          0       GIC 152  mx6-pcie-msi, ehci_hcd:usb5
153:          0          0          0          0       GIC 153  ehci_hcd:usb4
154:          0          0          0          0       GIC 154  ehci_hcd:usb3
155:          0          0          0          0       GIC 155  ehci_hcd:usb2

Boot option ‘irqpoll’ will lead to errors from mmc.

You can try using legacy PCIe interrupts instead of MSI, just pass pci=nomsi in kernel command line.

Thanks Dominik. It works now.