You're missing a "netif_wake_queue done" here. There's probably an interrupt associated with this event. Add a print if that IRQ is active right after reading the IRQ status register
Done, only on enter in m_can_isr "m_can_isr: ir=", not exit. If there are a RX traffic on but, the latchup happens very quickly. Last dmesg lines from https://pastebin.com/yBv9xcWg: [ 396.390714] tcan4x5x spi6.0 can2: m_can_tx_handler m_can_tx_fifo_full [ 396.390955] tcan4x5x spi6.0 can2: m_can_isr: ir=0x5800 [ 396.391091] tcan4x5x spi6.0 can2: m_can_isr: netif_wake_queue done [ 396.391109] tcan4x5x spi6.0 can2: m_can_start_xmit netif_stop_queue done [ 396.391282] tcan4x5x spi6.0 can2: m_can_tx_handler m_can_tx_fifo_full [ 396.391534] tcan4x5x spi6.0 can2: m_can_isr: ir=0x5800 [ 396.391670] tcan4x5x spi6.0 can2: m_can_isr: netif_wake_queue done [ 396.391689] tcan4x5x spi6.0 can2: m_can_start_xmit netif_stop_queue done [ 396.391865] tcan4x5x spi6.0 can2: m_can_tx_handler m_can_tx_fifo_full [ 396.392134] tcan4x5x spi6.0 can2: m_can_isr: ir=0x1 [ 396.392537] tcan4x5x spi6.0 can2: m_can_isr: ir=0x5800 [ 396.392673] tcan4x5x spi6.0 can2: m_can_isr: netif_wake_queue done [ 396.392692] tcan4x5x spi6.0 can2: m_can_start_xmit netif_stop_queue done [ 396.392862] tcan4x5x spi6.0 can2: m_can_tx_handler m_can_tx_fifo_full