Index: /trunk/modules/vci_spi/caba/source/src/vci_spi.cpp
===================================================================
--- /trunk/modules/vci_spi/caba/source/src/vci_spi.cpp	(revision 591)
+++ /trunk/modules/vci_spi/caba/source/src/vci_spi.cpp	(revision 592)
@@ -161,4 +161,6 @@
 		    if (s_dma_bsy) 
 			data |= SPI_CTRL_DMA_BSY;
+		    if (r_dma_error) 
+			data |= SPI_CTRL_DMA_ERR;
 		    data |= (uint32_t)r_ctrl_char_len.read();
 		    r_rdata = data;
@@ -256,5 +258,4 @@
 	r_spi_clk_ignore = r_ctrl_cpha;
 	r_spi_bit_count = r_ctrl_char_len;
-	r_spi_out = (r_txrx[(r_ctrl_char_len -1)/ 64] >> ((r_ctrl_char_len - 1) % 64)) & (uint64_t)0x0000000000000001ULL;
 	if (r_dma_count != 0) {
 		if (r_read.read())
@@ -264,4 +265,5 @@
 	} else if (r_spi_bsy.read() && !r_spi_done.read()) {
 	    r_spi_fsm = S_XMIT;
+	    r_spi_out = (r_txrx[(r_ctrl_char_len -1)/ 64] >> ((r_ctrl_char_len - 1) % 64)) & (uint64_t)0x0000000000000001ULL;
 	}
 	break;
@@ -294,5 +296,4 @@
     case S_DMA_SEND:
 	r_spi_out = 1;
-	r_txrx[0] = 0xffffffff;
 	r_spi_clk_counter = r_divider.read();
 	r_spi_clk = 0;
@@ -305,4 +306,5 @@
 		    (typename vci_param::data_t)r_txrx[0]);
 	        r_spi_word_count = r_spi_word_count - 1;
+		r_txrx[0] = 0xffffffff;
 	        if ( r_spi_word_count == 0 ) {
 		    r_spi_fsm = S_DMA_SEND_END;
Index: /trunk/modules/vci_spi/include/soclib/vcispi.h
===================================================================
--- /trunk/modules/vci_spi/include/soclib/vcispi.h	(revision 591)
+++ /trunk/modules/vci_spi/include/soclib/vcispi.h	(revision 592)
@@ -41,4 +41,5 @@
 };
 
+#define SPI_CTRL_DMA_ERR	(1 << 17) /* R   DMA error                    */
 #define SPI_CTRL_DMA_BSY	(1 << 16) /* R   DMA in progress              */
 #define SPI_CTRL_CPOL		(1 << 15) /* R/W Clock polarity               */
