mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-09-22 09:34:56 +02:00
spi: qcom-qspi: Correct max DMA length to avoid 64K boundary failure
commit90ef2f2961upstream. The maximum size for a DMA data descriptor is 64KB-1 because the size field in HW is 16 bits wide. For this reason, transfers fail at 64KB and beyond. Lower max_dma_len to 60KB so larger transfers are split into multiple DMA blocks and do not hit the failing 64KB boundary. 60KB is chosen as a safe round number below the 64KB-1 hardware limit while satisfying alignment requirements. Tested on x1e80100 (Hamoa) with SPI-NOR flash (/dev/mtd0): Without patch: dd if=/dev/mtd0 of=/tmp/spi_dump.bin bs=32768 count=2 # works dd if=/dev/mtd0 of=/tmp/spi_dump.bin bs=65536 count=1 # fails With patch: dd if=/dev/mtd0 of=/tmp/spi_dump.bin bs=65536 count=1 # works Fixes:b5762d9560("spi: spi-qcom-qspi: Add DMA mode support") Cc: stable@vger.kernel.org Signed-off-by: Vijaya Krishna Nivarthi <vijaya.nivarthi@oss.qualcomm.com> Link: https://patch.msgid.link/20260722092358.459943-1-vnivarth@qti.qualcomm.com Signed-off-by: Mark Brown <broonie@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
47cef9b444
commit
fc673c4eb2
@@ -759,7 +759,8 @@ static int qcom_qspi_probe(struct platform_device *pdev)
|
||||
return dev_err_probe(dev, ret, "could not set DMA mask\n");
|
||||
|
||||
host->max_speed_hz = 300000000;
|
||||
host->max_dma_len = 65536; /* as per HPG */
|
||||
/* as per HPG, it is 64KB, limit to 60KB to avoid boundary condition failures */
|
||||
host->max_dma_len = 0xf000;
|
||||
host->dma_alignment = QSPI_ALIGN_REQ;
|
||||
host->num_chipselect = QSPI_NUM_CS;
|
||||
host->bus_num = -1;
|
||||
|
||||
Reference in New Issue
Block a user