diff options
Diffstat (limited to 'drivers/spi/spi-fsl-dspi.c')
| -rw-r--r-- | drivers/spi/spi-fsl-dspi.c | 24 | 
1 files changed, 10 insertions, 14 deletions
diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 442cff71a0d2..8428b69c858b 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c @@ -185,6 +185,7 @@ struct fsl_dspi {  	struct spi_transfer			*cur_transfer;  	struct spi_message			*cur_msg;  	struct chip_data			*cur_chip; +	size_t					progress;  	size_t					len;  	const void				*tx;  	void					*rx; @@ -586,21 +587,14 @@ static void dspi_tcfq_write(struct fsl_dspi *dspi)  	dspi->tx_cmd |= SPI_PUSHR_CMD_CTCNT;  	if (dspi->devtype_data->xspi_mode && dspi->bits_per_word > 16) { -		/* Write two TX FIFO entries first, and then the corresponding -		 * CMD FIFO entry. +		/* Write the CMD FIFO entry first, and then the two +		 * corresponding TX FIFO entries.  		 */  		u32 data = dspi_pop_tx(dspi); -		if (dspi->cur_chip->ctar_val & SPI_CTAR_LSBFE) { -			/* LSB */ -			tx_fifo_write(dspi, data & 0xFFFF); -			tx_fifo_write(dspi, data >> 16); -		} else { -			/* MSB */ -			tx_fifo_write(dspi, data >> 16); -			tx_fifo_write(dspi, data & 0xFFFF); -		}  		cmd_fifo_write(dspi); +		tx_fifo_write(dspi, data & 0xFFFF); +		tx_fifo_write(dspi, data >> 16);  	} else {  		/* Write one entry to both TX FIFO and CMD FIFO  		 * simultaneously. @@ -658,7 +652,7 @@ static int dspi_rxtx(struct fsl_dspi *dspi)  	u32 spi_tcr;  	spi_take_timestamp_post(dspi->ctlr, dspi->cur_transfer, -				dspi->tx - dspi->bytes_per_word, !dspi->irq); +				dspi->progress, !dspi->irq);  	/* Get transfer counter (in number of SPI transfers). It was  	 * reset to 0 when transfer(s) were started. @@ -667,6 +661,7 @@ static int dspi_rxtx(struct fsl_dspi *dspi)  	spi_tcnt = SPI_TCR_GET_TCNT(spi_tcr);  	/* Update total number of bytes that were transferred */  	msg->actual_length += spi_tcnt * dspi->bytes_per_word; +	dspi->progress += spi_tcnt;  	trans_mode = dspi->devtype_data->trans_mode;  	if (trans_mode == DSPI_EOQ_MODE) @@ -679,7 +674,7 @@ static int dspi_rxtx(struct fsl_dspi *dspi)  		return 0;  	spi_take_timestamp_pre(dspi->ctlr, dspi->cur_transfer, -			       dspi->tx, !dspi->irq); +			       dspi->progress, !dspi->irq);  	if (trans_mode == DSPI_EOQ_MODE)  		dspi_eoq_write(dspi); @@ -768,6 +763,7 @@ static int dspi_transfer_one_message(struct spi_controller *ctlr,  		dspi->rx = transfer->rx_buf;  		dspi->rx_end = dspi->rx + transfer->len;  		dspi->len = transfer->len; +		dspi->progress = 0;  		/* Validated transfer specific frame size (defaults applied) */  		dspi->bits_per_word = transfer->bits_per_word;  		if (transfer->bits_per_word <= 8) @@ -789,7 +785,7 @@ static int dspi_transfer_one_message(struct spi_controller *ctlr,  				     SPI_CTARE_DTCP(1));  		spi_take_timestamp_pre(dspi->ctlr, dspi->cur_transfer, -				       dspi->tx, !dspi->irq); +				       dspi->progress, !dspi->irq);  		trans_mode = dspi->devtype_data->trans_mode;  		switch (trans_mode) {  | 
