Unverified Commit 9f0c21ba authored by Carlos Song's avatar Carlos Song Committed by Mark Brown
Browse files

spi: spi-fsl-lpspi: fix watermark truncation caused by type cast



't->len' is an unsigned integer, while 'watermark' and 'txfifosize' are
u8. Using min_t with typeof(watermark) forces both values to be cast to
u8, which truncates len when it exceeds 255. For example, len = 4096
becomes 0 after casting, resulting in an incorrect watermark value.

Use a wider type in min_t to avoid truncation and ensure the correct
minimum value is applied.

Fixes: a7500503 ("spi: spi-fsl-lpspi: use min_t() to improve code")
Signed-off-by: default avatarCarlos Song <carlos.song@nxp.com>
Reviewed-by: default avatarDaniel Baluta <daniel.baluta@nxp.com>
Link: https://patch.msgid.link/20251117030355.1359081-1-carlos.song@nxp.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 295fe840
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -486,7 +486,13 @@ static int fsl_lpspi_setup_transfer(struct spi_controller *controller,
		fsl_lpspi->tx = fsl_lpspi_buf_tx_u32;
	}

	fsl_lpspi->watermark = min_t(typeof(fsl_lpspi->watermark),
	/*
	 * t->len is 'unsigned' and txfifosize and watermrk is 'u8', force
	 * type cast is inevitable. When len > 255, len will be truncated in min_t(),
	 * it caused wrong watermark set. 'unsigned int' is as the designated type
	 * for min_t() to avoid truncation.
	 */
	fsl_lpspi->watermark = min_t(unsigned int,
				     fsl_lpspi->txfifosize,
				     t->len);