From: Liyin Zhang <[email protected]> When the data length to be written exceeds 256 bytes, the spi-zynqmp-gqspi driver issues GENFIFO entries using a combination of exponent and immediate modes, with the immediate transfers aligned to 4 bytes. Accordingly, when filling the TX FIFO, the data is also padded to achieve 4-byte alignment. However, when filling the last incomplete 4-byte chunk of xqspi->txbuf, the local variable intermediate is not initialized, causing the padding bytes to contain random values. Initialize intermediate to 0xFFFFFFFF to avoid this issue. In addition, after the final memcpy, count should be assigned first before clearing xqspi->bytes_to_transfer.
Signed-off-by: Liyin Zhang <[email protected]> --- drivers/spi/spi-zynqmp-gqspi.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/spi/spi-zynqmp-gqspi.c b/drivers/spi/spi-zynqmp-gqspi.c index 244f2e6859cf..478288b90c0a 100644 --- a/drivers/spi/spi-zynqmp-gqspi.c +++ b/drivers/spi/spi-zynqmp-gqspi.c @@ -689,11 +689,12 @@ static void zynqmp_qspi_filltxfifo(struct zynqmp_qspi *xqspi, int size) xqspi->bytes_to_transfer -= 4; count += 4; } else { + intermediate = 0xFFFFFFFF; memcpy(&intermediate, xqspi->txbuf, xqspi->bytes_to_transfer); xqspi->txbuf += xqspi->bytes_to_transfer; - xqspi->bytes_to_transfer = 0; count += xqspi->bytes_to_transfer; + xqspi->bytes_to_transfer = 0; } zynqmp_gqspi_write(xqspi, GQSPI_TXD_OFST, intermediate); } -- 2.34.1
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#15929): https://lists.yoctoproject.org/g/linux-yocto/message/15929 Mute This Topic: https://lists.yoctoproject.org/mt/116216168/21656 Group Owner: [email protected] Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
