Hello,
I am working with a custom carrier board for the congatec i.mx6 SOM. The carrier board has a Exar Corp. Serial Controller XR17V358 connected through PCIe. I have enabled support for the serial controller through the following menuconfig options:
Device Drivers -->
Character devices -->
Serial drivers -->
8250/16550 and compatible serial support (CONFIG_SERIAL_8250)
8250/16550 PCI device support (CONFIG_SERIAL_8250_PCI)
(8) Maximum number of 8250/16550 serial ports (CONFIG_SERIAL_8250_NR_UARTS)
(8) Maximum number of 8250/16550 serial ports to register at runtime (CONFIG_SERIAL_8250_RUNTIME_UARTS)
Extended 8250/16550 serial driver options (CONFIG_SERIAL_8250_EXTENDED)
Support more than 4 legacy serial ports (CONFIG_SERIAL_8250_MANY_PORTS)
Support for sharing serial interrupts (CONFIG_SERIAL_8250_SHARE_IRQ)
The module seems to load correctly and in dev I have ttyS0 through ttys7. Using stty on the dev devices original caused and error and I fixed that by following this post Nobody Cared issue .
Now when I try to read or write to the serial device the kernel prints out the following messages about an irq issue:
irq 155: nobody cared (try booting with the "irqpoll" option)
CPU: 0 PID: 651 Comm: sh Not tainted 3.14.28-1.0.0_qmx6+g644b035 #1
[<800155f0>] (unwind_backtrace) from [<800116d4>] (show_stack+0x10/0x14)
[<800116d4>] (show_stack) from [<806ad1d8>] (dump_stack+0x7c/0xbc)
[<806ad1d8>] (dump_stack) from [<8006a0b8>] (__report_bad_irq+0x28/0xc4)
[<8006a0b8>] (__report_bad_irq) from [<8006a628>] (note_interrupt+0x260/0x2b0)
[<8006a628>] (note_interrupt) from [<8006834c>] (handle_irq_event_percpu+0x118/0x180)
[<8006834c>] (handle_irq_event_percpu) from [<800683f0>] (handle_irq_event+0x3c/0x5c)
[<800683f0>] (handle_irq_event) from [<8006b234>] (handle_fasteoi_irq+0x84/0x14c)
[<8006b234>] (handle_fasteoi_irq) from [<80067a48>] (generic_handle_irq+0x2c/0x3c)
[<80067a48>] (generic_handle_irq) from [<8000ed4c>] (handle_IRQ+0x40/0x90)
[<8000ed4c>] (handle_IRQ) from [<8000856c>] (gic_handle_irq+0x2c/0x5c)
[<8000856c>] (gic_handle_irq) from [<800121c0>] (__irq_svc+0x40/0x70)
Exception stack(0xd8867b38 to 0xd8867b80)
7b20: 00000000 00404100
7b40: 80d84e40 00000000 00000282 0000c080 00007458 00005398 d8866000 000080d0
7b60: 00000000 00000000 80014cd0 d8867b80 80031684 80031694 20080113 ffffffff
[<800121c0>] (__irq_svc) from [<80031694>] (__do_softirq+0xc8/0x248)
[<80031694>] (__do_softirq) from [<80031a9c>] (irq_exit+0xb8/0xf4)
[<80031a9c>] (irq_exit) from [<8000ed50>] (handle_IRQ+0x44/0x90)
[<8000ed50>] (handle_IRQ) from [<8000856c>] (gic_handle_irq+0x2c/0x5c)
[<8000856c>] (gic_handle_irq) from [<800121c0>] (__irq_svc+0x40/0x70)
Exception stack(0xd8867c08 to 0xd8867c50)
7c00: 80d82184 00000001 00000000 d8867ca4 00000000 80d82180
7c20: 00000000 00000141 00000001 000080d0 00000000 00000000 00000000 d8867c50
7c40: 80d81080 800a0720 60080013 ffffffff
[<800121c0>] (__irq_svc) from [<800a0720>] (get_page_from_freelist+0x38/0x5b0)
[<800a0720>] (get_page_from_freelist) from [<800a1808>] (__alloc_pages_nodemask+0x128/0x978)
[<800a1808>] (__alloc_pages_nodemask) from [<800a2068>] (__get_free_pages+0x10/0x24)
[<800a2068>] (__get_free_pages) from [<8031fb78>] (uart_startup.part.13+0x148/0x19c)
[<8031fb78>] (uart_startup.part.13) from [<80320504>] (uart_open+0xe8/0x15c)
[<80320504>] (uart_open) from [<80305d80>] (tty_open+0x164/0x60c)
[<80305d80>] (tty_open) from [<800d976c>] (chrdev_open+0xa4/0x178)
[<800d976c>] (chrdev_open) from [<800d4000>] (do_dentry_open.isra.17+0x110/0x294)
[<800d4000>] (do_dentry_open.isra.17) from [<800d4254>] (finish_open+0x20/0x38)
[<800d4254>] (finish_open) from [<800e1f10>] (do_last.isra.58+0x6dc/0xc34)
[<800e1f10>] (do_last.isra.58) from [<800e251c>] (path_openat+0xb4/0x5c8)
[<800e251c>] (path_openat) from [<800e3938>] (do_filp_open+0x2c/0x88)
[<800e3938>] (do_filp_open) from [<800d51c4>] (do_sys_open+0x104/0x1c8)
[<800d51c4>] (do_sys_open) from [<8000e460>] (ret_fast_syscall+0x0/0x30)
handlers:
[<802cbe08>] pcie_pme_irq
Disabling IRQ #155
Looking at the i.mx6 datasheet irq 155 is a pcie interrupt. I am not sure what to look at from this point. Could the serial controller driver not be handling the interrupt correctly?
Thank you for any help.
Suggestions for the first round of checks:
1. Use the BSP kernel.
2. Make sure i.MX6 PCIe support is correctly enabled in the kernel configuration. See i.MX Linux Reference Manual,
Section 41.2.2.
3. Check that the kernel recognizes your PCIe card, use `lspci' or `cat /proc/bus/pci/devices
4. Check that the interrupt is owned by your driver: `cat /proc/interrupts`
NXP i.MX Linux BSP and accompanying documentation can be obtained from here:
Embedded Linux for i.MX Applications Processo|NXP
Have a great day,
Platon
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------