Message ID | 1b7d3e84b1128f42c1887dd2fb9cdf390f541bc1.1680371809.git.christophe.leroy@csgroup.eu (mailing list archive) |
---|---|
State | Accepted |
Commit | c20c57d9868d7f9fd1b2904c7801b07e128f6322 |
Headers | show |
Series | [v1,1/5] spi: fsl-spi: Fix CPM/QE mode Litte Endian | expand |
On Sat, 01 Apr 2023 19:59:46 +0200, Christophe Leroy wrote: > CPM has the same problem as QE so for CPM also use the fix added > by commit 0398fb70940e ("spi/spi_mpc8xxx: Fix QE mode Litte Endian"): > > CPM mode uses Little Endian so words > 8 bits are byte swapped. > Workaround this by always enforcing wordsize 8 for 16 and 32 bits > words. Unfortunately this will not work for LSB transfers > where wordsize is > 8 bits so disable these for now. > > [...] Applied to https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next Thanks! [1/5] spi: fsl-spi: Fix CPM/QE mode Litte Endian commit: c20c57d9868d7f9fd1b2904c7801b07e128f6322 [2/5] spi: fsl-spi: Re-organise transfer bits_per_word adaptation commit: 8a5299a1278eadf1e08a598a5345c376206f171e [3/5] spi: fsl-cpm: Use 16 bit mode for large transfers with even size commit: fc96ec826bced75cc6b9c07a4ac44bbf651337ab [4/5] spi: fsl-spi: Change mspi_apply_cpu_mode_quirks() to void commit: 99aebb3c1b418d865461aa0813ef1b55285cbda4 [5/5] spi: fsl-spi: No need to check transfer length versus word size commit: 4084c8ca1266ba09554de8df19aac82b6dd2e079 All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed. If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark
diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c index 93152144fd2e..5602f052b2b5 100644 --- a/drivers/spi/spi-fsl-spi.c +++ b/drivers/spi/spi-fsl-spi.c @@ -181,8 +181,8 @@ static int mspi_apply_qe_mode_quirks(struct spi_mpc8xxx_cs *cs, struct spi_device *spi, int bits_per_word) { - /* QE uses Little Endian for words > 8 - * so transform all words > 8 into 8 bits + /* CPM/QE uses Little Endian for words > 8 + * so transform 16 and 32 bits words into 8 bits * Unfortnatly that doesn't work for LSB so * reject these for now */ /* Note: 32 bits word, LSB works iff @@ -190,9 +190,11 @@ static int mspi_apply_qe_mode_quirks(struct spi_mpc8xxx_cs *cs, if (spi->mode & SPI_LSB_FIRST && bits_per_word > 8) return -EINVAL; - if (bits_per_word > 8) + if (bits_per_word <= 8) + return bits_per_word; + if (bits_per_word == 16 || bits_per_word == 32) return 8; /* pretend its 8 bits */ - return bits_per_word; + return -EINVAL; } static int fsl_spi_setup_transfer(struct spi_device *spi, @@ -222,7 +224,7 @@ static int fsl_spi_setup_transfer(struct spi_device *spi, bits_per_word = mspi_apply_cpu_mode_quirks(cs, spi, mpc8xxx_spi, bits_per_word); - else if (mpc8xxx_spi->flags & SPI_QE) + else bits_per_word = mspi_apply_qe_mode_quirks(cs, spi, bits_per_word);
CPM has the same problem as QE so for CPM also use the fix added by commit 0398fb70940e ("spi/spi_mpc8xxx: Fix QE mode Litte Endian"): CPM mode uses Little Endian so words > 8 bits are byte swapped. Workaround this by always enforcing wordsize 8 for 16 and 32 bits words. Unfortunately this will not work for LSB transfers where wordsize is > 8 bits so disable these for now. Also limit the workaround to 16 and 32 bits words because it can only work for multiples of 8-bits. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Cc: Joakim Tjernlund <Joakim.Tjernlund@infinera.com> Fixes: 0398fb70940e ("spi/spi_mpc8xxx: Fix QE mode Litte Endian") --- drivers/spi/spi-fsl-spi.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)