jffs2-reduce-stack-usage-in-jffs2_build_xattr_subsystem.patch
btrfs-fix-race-when-deleting-quota-root-from-the-dirty-cow-roots-list.patch
arm-orion5x-fix-d2net-gpio-initialization.patch
+spi-spi-fsl-spi-remove-always-true-conditional-in-fsl_spi_do_one_msg.patch
+spi-spi-fsl-spi-relax-message-sanity-checking-a-little.patch
+spi-spi-fsl-spi-allow-changing-bits_per_word-while-cs-is-still-active.patch
--- /dev/null
+From a798a7086c38d91d304132c194cff9f02197f5cd Mon Sep 17 00:00:00 2001
+From: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
+Date: Wed, 27 Mar 2019 14:30:51 +0000
+Subject: spi: spi-fsl-spi: allow changing bits_per_word while CS is still active
+
+From: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
+
+commit a798a7086c38d91d304132c194cff9f02197f5cd upstream.
+
+Commit c9bfcb315104 (spi_mpc83xx: much improved driver) introduced
+logic to ensure bits_per_word and speed_hz stay the same for a series
+of spi_transfers with CS active, arguing that
+
+ The current driver may cause glitches on SPI CLK line since one
+ must disable the SPI controller before changing any HW settings.
+
+This sounds quite reasonable. So this is a quite naive attempt at
+relaxing this sanity checking to only ensure that speed_hz is
+constant - in the faint hope that if we do not causes changes to the
+clock-related fields of the SPMODE register (DIV16 and PM), those
+glitches won't appear.
+
+The purpose of this change is to allow automatically optimizing large
+transfers to use 32 bits-per-word; taking one interrupt for every byte
+is extremely slow.
+
+Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/spi/spi-fsl-spi.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+--- a/drivers/spi/spi-fsl-spi.c
++++ b/drivers/spi/spi-fsl-spi.c
+@@ -339,7 +339,7 @@ static int fsl_spi_do_one_msg(struct spi
+ struct spi_transfer *t, *first;
+ unsigned int cs_change;
+ const int nsecs = 50;
+- int status;
++ int status, last_bpw;
+
+ /*
+ * In CPU mode, optimize large byte transfers to use larger
+@@ -378,21 +378,22 @@ static int fsl_spi_do_one_msg(struct spi
+ if (cs_change)
+ first = t;
+ cs_change = t->cs_change;
+- if ((first->bits_per_word != t->bits_per_word) ||
+- (first->speed_hz != t->speed_hz)) {
++ if (first->speed_hz != t->speed_hz) {
+ dev_err(&spi->dev,
+- "bits_per_word/speed_hz cannot change while CS is active\n");
++ "speed_hz cannot change while CS is active\n");
+ return -EINVAL;
+ }
+ }
+
++ last_bpw = -1;
+ cs_change = 1;
+ status = -EINVAL;
+ list_for_each_entry(t, &m->transfers, transfer_list) {
+- if (cs_change)
++ if (cs_change || last_bpw != t->bits_per_word)
+ status = fsl_spi_setup_transfer(spi, t);
+ if (status < 0)
+ break;
++ last_bpw = t->bits_per_word;
+
+ if (cs_change) {
+ fsl_spi_chipselect(spi, BITBANG_CS_ACTIVE);
--- /dev/null
+From 17ecffa289489e8442306bbc62ebb964e235cdad Mon Sep 17 00:00:00 2001
+From: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
+Date: Wed, 27 Mar 2019 14:30:51 +0000
+Subject: spi: spi-fsl-spi: relax message sanity checking a little
+
+From: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
+
+commit 17ecffa289489e8442306bbc62ebb964e235cdad upstream.
+
+The comment says that we should not allow changes (to
+bits_per_word/speed_hz) while CS is active, and indeed the code below
+does fsl_spi_setup_transfer() when the ->cs_change of the previous
+spi_transfer was set (and for the very first transfer).
+
+So the sanity checking is a bit too strict - we can change it to
+follow the same logic as is used by the actual transfer loop.
+
+Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/spi/spi-fsl-spi.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+--- a/drivers/spi/spi-fsl-spi.c
++++ b/drivers/spi/spi-fsl-spi.c
+@@ -373,13 +373,15 @@ static int fsl_spi_do_one_msg(struct spi
+ }
+
+ /* Don't allow changes if CS is active */
+- first = list_first_entry(&m->transfers, struct spi_transfer,
+- transfer_list);
++ cs_change = 1;
+ list_for_each_entry(t, &m->transfers, transfer_list) {
++ if (cs_change)
++ first = t;
++ cs_change = t->cs_change;
+ if ((first->bits_per_word != t->bits_per_word) ||
+ (first->speed_hz != t->speed_hz)) {
+ dev_err(&spi->dev,
+- "bits_per_word/speed_hz should be same for the same SPI transfer\n");
++ "bits_per_word/speed_hz cannot change while CS is active\n");
+ return -EINVAL;
+ }
+ }
--- /dev/null
+From 24c363623361b430fb79459ca922e816e6f48603 Mon Sep 17 00:00:00 2001
+From: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
+Date: Wed, 27 Mar 2019 14:30:50 +0000
+Subject: spi: spi-fsl-spi: remove always-true conditional in fsl_spi_do_one_msg
+
+From: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
+
+commit 24c363623361b430fb79459ca922e816e6f48603 upstream.
+
+__spi_validate() in the generic SPI code sets ->speed_hz and
+->bits_per_word to non-zero values, so this condition is always true.
+
+Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
+Signed-off-by: Mark Brown <broonie@kernel.org>
+Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/spi/spi-fsl-spi.c | 10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+--- a/drivers/spi/spi-fsl-spi.c
++++ b/drivers/spi/spi-fsl-spi.c
+@@ -387,12 +387,10 @@ static int fsl_spi_do_one_msg(struct spi
+ cs_change = 1;
+ status = -EINVAL;
+ list_for_each_entry(t, &m->transfers, transfer_list) {
+- if (t->bits_per_word || t->speed_hz) {
+- if (cs_change)
+- status = fsl_spi_setup_transfer(spi, t);
+- if (status < 0)
+- break;
+- }
++ if (cs_change)
++ status = fsl_spi_setup_transfer(spi, t);
++ if (status < 0)
++ break;
+
+ if (cs_change) {
+ fsl_spi_chipselect(spi, BITBANG_CS_ACTIVE);