Welcome to the Linux Foundation Forum!

Question about serial8050_tx_threshold_handle_irq()

wadhiros
wadhiros Posts: 1

Hi All.
I am testing the uart driver for Altera 16550 soft ip and kernel version is 5.2.rc3.

When my test application sends data in quantities by the cycle of the 32ms, I’m faced with the following problem,
(My test application is only transfer the data and data size is less than 64byte).

“irq 46: nobody cared (try booting with the “irqpoll” option)”

I investigate about this issue, I found that serial8250_interrupt function always returns UNHANDLED code.
serial8250_interrupt() calls serial8050_tx_threshold_handle_irq() and serial8050_tx_threshold_handle_irq() alway return 0 too.
This is a pieces of the code of serial8050_tx_threshold_handle_irq function.

—>Start code of serial8050_tx_threshold_handle_irq()
/* TX Threshold IRQ triggered so load up FIFO */
if ((iir & UART_IIR_ID) == UART_IIR_THRI){
struct uart_8250_port *up = up_to_u8250p(port);

spin_lock_irqsave(&port->lock, flags);
serial8250_tx_chars(up); <-----[1]
spin_unlock_irqrestore(&port->lock, flags);
}
iir = serial_port_in(port, UART_IIR); <-----[2]
return(serial8250_handle_irq(port, iir));
<------End of the code of serial8050_tx_threshold_handle_irq()

Please see [1].
After calling serial8250_tx_chars(), UART_IER_THRI bit of IER register is cleared.
So, iir value is always 0xC1 and return value of serial8050_tx_threshold_handle_irq() is always 0.(see [2])

When if statement is executed, I think "return code" should be '1'.
Am I wrong?
Please advice me.

Categories

Upcoming Training