diff --git a/drivers/can/can_mcux_flexcan.c b/drivers/can/can_mcux_flexcan.c index e7a46159647..a840c7b6c78 100644 --- a/drivers/can/can_mcux_flexcan.c +++ b/drivers/can/can_mcux_flexcan.c @@ -731,8 +731,6 @@ static inline void mcux_flexcan_transfer_rx_idle(const struct device *dev, function(dev, &frame, arg); /* Setup RX message buffer to receive next message */ - FLEXCAN_SetRxMbConfig(config->base, mb, - &data->rx_cbs[alloc].mb_config, true); xfer.frame = &data->rx_cbs[alloc].frame; xfer.mbIdx = mb; status = FLEXCAN_TransferReceiveNonBlocking(config->base, @@ -775,6 +773,9 @@ static FLEXCAN_CALLBACK(mcux_flexcan_transfer_callback) break; case kStatus_FLEXCAN_RxOverflow: __fallthrough; + case kStatus_Fail: + /* If reading an RX MB failed mark it as idle to be reprocessed. */ + __fallthrough; case kStatus_FLEXCAN_RxIdle: mcux_flexcan_transfer_rx_idle(data->dev, mb); break;