FAILED: patch "[PATCH] spi: tegra114: Don't fail set_cs_timing when delays are zero" failed to apply to 5.15-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x 4426e6b4ecf632bb75d973051e1179b8bfac2320
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2025050535-ducking-playroom-1844@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 4426e6b4ecf632bb75d973051e1179b8bfac2320 Mon Sep 17 00:00:00 2001
From: Aaron Kling <[email protected]>
Date: Wed, 23 Apr 2025 21:03:03 -0500
Subject: [PATCH] spi: tegra114: Don't fail set_cs_timing when delays are zero
The original code would skip null delay pointers, but when the pointers were converted to point within the spi_device struct, the check was not updated to skip delays of zero. Hence all spi devices that didn't set delays would fail to probe.
drivers/spi/spi-tegra114.c +3 -3
@@ -728,9 +728,9 @@ static int tegra_spi_set_hw_cs_timing(struct spi_device *spi)u32 inactive_cycles;u8 cs_state; -if (setup->unit !=SPI_DELAY_UNIT_SCK || - hold->unit !=SPI_DELAY_UNIT_SCK || - inactive->unit !=SPI_DELAY_UNIT_SCK ) { +if ((setup->unit && setup->unit !=SPI_DELAY_UNIT_SCK ) || + (hold->unit && hold->unit !=SPI_DELAY_UNIT_SCK ) || + (inactive->unit && inactive->unit !=SPI_DELAY_UNIT_SCK )) {dev_err (&spi->dev,"Invalid delay unit %d, should be SPI_DELAY_UNIT_SCK\n" ,SPI_DELAY_UNIT_SCK );
Sasha Levin
maintainerPATCH 1/2 spi: tegra114: Remove unnecessary NULL-pointer checks
From: Alexander Danilenko <[email protected]>
[ Upstream commit 373c36bf7914e3198ac2654dede499f340c52950 ]
cs_setup, cs_hold and cs_inactive points to fields of spi_device struct, so there is no sense in checking them for NULL.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
Stable-dep-of: 4426e6b4ecf6 ("spi: tegra114: Don't fail set_cs_timing when delays are zero")
--- drivers/spi/spi-tegra114.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-)
drivers/spi/spi-tegra114.c +7 -11
@@ -723,27 +723,23 @@ static int tegra_spi_set_hw_cs_timing(struct spi_device *spi)struct spi_delay *setup = &spi->cs_setup;struct spi_delay *hold = &spi->cs_hold;struct spi_delay *inactive = &spi->cs_inactive; -u8 setup_dly, hold_dly, inactive_dly; +u8 setup_dly, hold_dly;u32 setup_hold;u32 spi_cs_timing;u32 inactive_cycles;u8 cs_state; -if ((setup && setup->unit !=SPI_DELAY_UNIT_SCK ) || - (hold && hold->unit !=SPI_DELAY_UNIT_SCK ) || - (inactive && inactive->unit !=SPI_DELAY_UNIT_SCK )) { +if (setup->unit !=SPI_DELAY_UNIT_SCK || + hold->unit !=SPI_DELAY_UNIT_SCK || + inactive->unit !=SPI_DELAY_UNIT_SCK ) {dev_err (&spi->dev,"Invalid delay unit %d, should be SPI_DELAY_UNIT_SCK\n" ,SPI_DELAY_UNIT_SCK );return -EINVAL ; } - setup_dly = setup ? setup->value :0 ; - hold_dly = hold ? hold->value :0 ; - inactive_dly = inactive ? inactive->value :0 ; - - setup_dly =min_t (u8, setup_dly,MAX_SETUP_HOLD_CYCLES ); - hold_dly =min_t (u8, hold_dly,MAX_SETUP_HOLD_CYCLES ); + setup_dly =min_t (u8, setup->value,MAX_SETUP_HOLD_CYCLES ); + hold_dly =min_t (u8, hold->value,MAX_SETUP_HOLD_CYCLES );if (setup_dly && hold_dly) { setup_hold =SPI_SETUP_HOLD (setup_dly -1 , hold_dly -1 ); spi_cs_timing = SPI_CS_SETUP_HOLD(tspi->spi_cs_timing1,
@@ -755,7 +751,7 @@ static int tegra_spi_set_hw_cs_timing(struct spi_device *spi) } } - inactive_cycles =min_t (u8, inactive_dly,MAX_INACTIVE_CYCLES ); + inactive_cycles =min_t (u8, inactive->value,MAX_INACTIVE_CYCLES );if (inactive_cycles) inactive_cycles--; cs_state = inactive_cycles ?0 :1 ;
Signature · 1 line
2.50.1
Sasha Levin
maintainerPATCH 2/2 spi: tegra114: Don't fail set_cs_timing when delays are zero
From: Aaron Kling <[email protected]>
[ Upstream commit 4426e6b4ecf632bb75d973051e1179b8bfac2320 ]
The original code would skip null delay pointers, but when the pointers were converted to point within the spi_device struct, the check was not updated to skip delays of zero. Hence all spi devices that didn't set delays would fail to probe.
--- drivers/spi/spi-tegra114.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/spi/spi-tegra114.c +3 -3
@@ -729,9 +729,9 @@ static int tegra_spi_set_hw_cs_timing(struct spi_device *spi)u32 inactive_cycles;u8 cs_state; -if (setup->unit !=SPI_DELAY_UNIT_SCK || - hold->unit !=SPI_DELAY_UNIT_SCK || - inactive->unit !=SPI_DELAY_UNIT_SCK ) { +if ((setup->unit && setup->unit !=SPI_DELAY_UNIT_SCK ) || + (hold->unit && hold->unit !=SPI_DELAY_UNIT_SCK ) || + (inactive->unit && inactive->unit !=SPI_DELAY_UNIT_SCK )) {dev_err (&spi->dev,"Invalid delay unit %d, should be SPI_DELAY_UNIT_SCK\n" ,SPI_DELAY_UNIT_SCK );
Signature · 1 line
2.50.1