spi: dw: Fix detecting FIFO depth
PATCH 1/1 spi: dw: Fix detecting FIFO depth
Current code tries to find the highest valid fifo depth by checking the value it wrote to DW_SPI_TXFLTR. There are a few problems in current code:
1) There is an off-by-one in dws->fifo_len setting because it assumes the latest register write fails so the latest valid value should be fifo - 1.
2) We know the depth could be from 2 to 256 from HW spec, so it is not necessary to test fifo == 257. In the case fifo is 257, it means the latest valid setting is fifo = 256. So after the for loop iteration, we should check fifo == 2 case instead of fifo == 257 if detecting the FIFO depth fails.
This patch fixes above issues.
--- drivers/spi/spi-dw.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/spi/spi-dw.c +2 -2
@@ -621,13 +621,13 @@ static void spi_hw_init(struct dw_spi *dws)if (!dws->fifo_len) {u32 fifo; -for (fifo =2 ; fifo <=257 ; fifo++) { +for (fifo =2 ; fifo <=256 ; fifo++) {dw_writew (dws,DW_SPI_TXFLTR , fifo);if (fifo !=dw_readw (dws,DW_SPI_TXFLTR ))break ; } - dws->fifo_len = (fifo ==257 ) ?0 : fifo; + dws->fifo_len = (fifo ==2 ) ?0 : fifo -1 ;dw_writew (dws,DW_SPI_TXFLTR ,0 ); } }
Signature · 8 lines
1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-spi" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Mark Brown
AppliedQuoted 4 lines · Axel Lin
Current code tries to find the highest valid fifo depth by checking the value it wrote to
DW_SPI_TXFLTR. There are a few problems in current code:
1) There is an off-by-one indws->fifo_lensetting because it assumes the latest register write fails so the latest valid value should be fifo - 1.
Applied, thanks.