diff --git a/software/kernel/spi-ocores.c b/software/kernel/spi-ocores.c
index ac930fa723673586efec437c813109e207808c88..0cb8e55c7687eb6b11d3837e5c87d1156b39c965 100644
--- a/software/kernel/spi-ocores.c
+++ b/software/kernel/spi-ocores.c
@@ -467,18 +467,23 @@ static int spi_ocores_sw_xfer_next_init(struct spi_ocores *sp)
 		sp->cur_xfer = list_next_entry(sp->cur_xfer, transfer_list);
 	}
 
-	if (WARN(!sp->cur_xfer, "Invalid SPI transfer"))
-		return -EINVAL;
+	if (WARN(!sp->cur_xfer, "Invalid SPI transfer")) {
+		sp->master->cur_msg->status = -EINVAL;
+		return sp->master->cur_msg->status;
+	}
 
 	nbits = spi_ocores_hw_xfer_bits_per_word(sp);
-	if ((nbits - 1) & (~SPI_OCORES_CTRL_CHAR_LEN))
-		return -EINVAL;
+	if ((nbits - 1) & (~SPI_OCORES_CTRL_CHAR_LEN)) {
+		sp->master->cur_msg->status = -EINVAL;
+		return sp->master->cur_msg->status;
+	}
 
 	if ((sp->cur_xfer->len << 3) < nbits) {
 		dev_err(&sp->master->dev,
 			"Invalid transfer length %d (bits_per_word %d)\n",
 			sp->cur_xfer->len, nbits);
-		return -EINVAL;
+		sp->master->cur_msg->status = -EINVAL;
+		return sp->master->cur_msg->status;
 	}
 
 	ctrl = sp->ctrl_base;