Hi, On Wed, Nov 17, 2021 at 5:31 AM Vinod Koul <vkoul@xxxxxxxxxx> wrote: > > @@ -346,17 +346,20 @@ spi_gsi_callback_result(void *cb, const struct dmaengine_result *result) > { > struct spi_master *spi = cb; > > + spi->cur_msg->status = -EIO; > if (result->result != DMA_TRANS_NOERROR) { > dev_err(&spi->dev, "DMA txn failed: %d\n", result->result); > return; > } Don't you want to call spi_finalize_current_transfer() in the case of a DMA error? Otherwise I think you're still going to wait for a timeout? ...and then when you get the timeout then spi_transfer_wait() will return -ETIMEDOUT and that will overwrite your -EIO, won't it? -Doug