The IRQ handler signature does not match the expected signature, so let's fix that. The data argument is unused anyway. --- a/libgloss/or1k/or1k_uart.c 2024-05-09 13:34:05.290587255 +0200 +++ b/libgloss/or1k/or1k_uart.c 2024-05-09 13:33:36.794072659 +0200 @@ -90,7 +90,7 @@ void (*_or1k_uart_read_cb)(char c); * This is the interrupt handler that is registered for the callback * function. */ -void _or1k_uart_interrupt_handler(uint32_t data) +void _or1k_uart_interrupt_handler(void *data) { uint8_t iir = REG8(IIR); --- a/libgloss/or1k/or1k_uart.h 2024-05-09 13:34:40.180397343 +0200 +++ b/libgloss/or1k/or1k_uart.h 2024-05-09 13:33:36.794072659 +0200 @@ -30,7 +30,7 @@ extern void (*_or1k_uart_read_cb)(char c /** * The UART interrupt handler */ -void _or1k_uart_interrupt_handler(uint32_t data); +void _or1k_uart_interrupt_handler(void *data); /** * Initialize UART