FAILED: patch "[PATCH] spi: bcm2835: Fix 3-wire mode if DMA is enabled" failed to apply to 5.2-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 5.2-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]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 8d8bef50365847134b51c1ec46786bc2873e4e47 Mon Sep 17 00:00:00 2001
From: Lukas Wunner <[email protected]>
Date: Wed, 3 Jul 2019 12:29:31 +0200
Subject: [PATCH] spi: bcm2835: Fix 3-wire mode if DMA is enabled
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Commit 6935224da248 ("spi: bcm2835: enable support of 3-wire mode") added 3-wire support to the BCM2835 SPI driver by setting the REN bit (Read Enable) in the CS register when receiving data. The REN bit puts the transmitter in high-impedance state. The driver recognizes that data is to be received by checking whether the rx_buf of a transfer is non-NULL.
Commit 3ecd37edaa2a ("spi: bcm2835: enable dma modes for transfers meeting certain conditions") subsequently broke 3-wire support because it set the SPI_MASTER_MUST_RX flag which causes spi_map_msg() to replace rx_buf with a dummy buffer if it is NULL. As a result, rx_buf is *always* non-NULL if DMA is enabled.
Reinstate 3-wire support by not only checking whether rx_buf is non-NULL, but also checking that it is not the dummy buffer.
drivers/spi/spi-bcm2835.c +2 -1
@@ -834,7 +834,8 @@ static int bcm2835_spi_transfer_one(struct spi_controller *ctlr,bcm2835_wr (bs,BCM2835_SPI_CLK , cdiv);/* handle all the 3-wire mode */ -if ((spi->mode &SPI_3WIRE ) && (tfr->rx_buf)) +if (spi->mode &SPI_3WIRE && tfr->rx_buf && + tfr->rx_buf != ctlr->dummy_rx) cs |=BCM2835_SPI_CS_REN ;else cs &= ~BCM2835_SPI_CS_REN ;
Quoted 1 line · On Wed, Aug 07, 2019 at 06:48:07PM +0200, [email protected] wrote:
The patch below does not apply to the 5.2-stable tree.
That's odd, it works for me:
$ git fetch linux-stable $ git checkout linux-stable/linux-5.2.y Checking out files: 100% (43562/43562), done. HEAD is now at 5697a9d... Linux 5.2.7 $ git am /tmp/pt Applying: spi: bcm2835: Fix 3-wire mode if DMA is enabled
Could you be a little more specific why it couldn't be applied when you tried it?
Thanks,
Lukas
Quoted 58 lines
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]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From
8d8bef50365847134b51c1ec46786bc2873e4e47Mon Sep 17 00:00:00 2001
From: Lukas Wunner <[email protected]>
Date: Wed, 3 Jul 2019 12:29:31 +0200
Subject: [PATCH] spi: bcm2835: Fix 3-wire mode if DMA is enabled
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bitCommit
6935224da248("spi: bcm2835: enable support of 3-wire mode") added 3-wire support to the BCM2835 SPI driver by setting the REN bit (Read Enable) in the CS register when receiving data. The REN bit puts the transmitter in high-impedance state. The driver recognizes that data is to be received by checking whether therx_bufof a transfer is non-NULL.Commit
3ecd37edaa2a("spi: bcm2835: enable dma modes for transfers meeting certain conditions") subsequently broke 3-wire support because it set theSPI_MASTER_MUST_RXflag which causesspi_map_msg()to replacerx_bufwith a dummy buffer if it is NULL. As a result,rx_bufis *always* non-NULL if DMA is enabled.Reinstate 3-wire support by not only checking whether
rx_bufis non-NULL, but also checking that it is not the dummy buffer.Fixes 3ecd37edaa2a ("spi: bcm2835: enable dma modes for transfers meeting certain conditions")Reported-by Nuno Sá <[email protected]>Signed-off-by Lukas Wunner <[email protected]>Cc [email protected] # v4.2+Cc Martin Sperl <[email protected]>Acked-by Stefan Wahren <[email protected]>Link https://lore.kernel.org/r/328318841455e505370ef8ecad97b646c033dc8a.1562148527.git.lukas@wunner.de open hereSigned-off-by Mark Brown <[email protected]>drivers/spi/spi-bcm2835.c +2
-1@@ -834,7 +834,8 @@ static int bcm2835_spi_transfer_one(struct spi_controller *ctlr,bcm2835_wr (bs,BCM2835_SPI_CLK , cdiv);/* handle all the 3-wire mode */ -if ((spi->mode &SPI_3WIRE ) && (tfr->rx_buf)) +if (spi->mode &SPI_3WIRE && tfr->rx_buf && + tfr->rx_buf != ctlr->dummy_rx) cs |=BCM2835_SPI_CS_REN ;else cs &= ~BCM2835_SPI_CS_REN ;
Greg KH
maintainerQuoted 12 lines · Lukas Wunner
Quoted 1 line · On Wed, Aug 07, 2019 at 06:48:07PM +0200, [email protected] wrote:
The patch below does not apply to the 5.2-stable tree.
That's odd, it works for me:
$ git fetch linux-stable $ git checkout linux-stable/linux-5.2.y Checking out files: 100% (43562/43562), done. HEAD is now at 5697a9d... Linux 5.2.7 $ git am /tmp/pt Applying: spi: bcm2835: Fix 3-wire mode if DMA is enabled
Quoted 2 lines
Could you be a little more specific why it couldn't be applied when you tried it?
Sorry, that's the problem of form letters, sometimes they are wrong :(
The patch applies everywhere, but breaks the build in all trees. So it needs to be modified to build properly. I need to write up a different error message for this type of failure one of these days, luckily it is pretty rare.
thanks,
greg k-h
Lukas Wunner
Acked-by Stefan WahrenQuoted 5 lines · Greg KH
Quoted 2 lines · Lukas Wunner
Quoted 1 line · On Wed, Aug 07, 2019 at 06:48:07PM +0200, [email protected] wrote:
The patch below does not apply to the 5.2-stable tree.
The patch applies everywhere, but breaks the build in all trees.
Ugh, yes you are right, my apologies.
The reason is that v5.3 converted spi-bcm2835.c to use the "spi_controller" nomenclature instead of "spi_master" with commit 5f336ea53b6b ("spi: bcm2835: Replace spi_master by spi_controller").
The replacement patch below should hopefully not break the build. It's the same as upstream commit 8d8bef503658, except one occurrence of "ctlr" is replaced by "master".
Thanks!
-- >8 --
From 8d8bef50365847134b51c1ec46786bc2873e4e47 Mon Sep 17 00:00:00 2001
From: Lukas Wunner <[email protected]>
Date: Wed, 3 Jul 2019 12:29:31 +0200
Subject: [PATCH] spi: bcm2835: Fix 3-wire mode if DMA is enabled
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Commit 6935224da248 ("spi: bcm2835: enable support of 3-wire mode") added 3-wire support to the BCM2835 SPI driver by setting the REN bit (Read Enable) in the CS register when receiving data. The REN bit puts the transmitter in high-impedance state. The driver recognizes that data is to be received by checking whether the rx_buf of a transfer is non-NULL.
Commit 3ecd37edaa2a ("spi: bcm2835: enable dma modes for transfers meeting certain conditions") subsequently broke 3-wire support because it set the SPI_MASTER_MUST_RX flag which causes spi_map_msg() to replace rx_buf with a dummy buffer if it is NULL. As a result, rx_buf is *always* non-NULL if DMA is enabled.
Reinstate 3-wire support by not only checking whether rx_buf is non-NULL, but also checking that it is not the dummy buffer.
drivers/spi/spi-bcm2835.c +2 -1
@@ -834,7 +834,8 @@ static int bcm2835_spi_transfer_one(struct spi_master *master,bcm2835_wr (bs,BCM2835_SPI_CLK , cdiv);/* handle all the 3-wire mode */ -if ((spi->mode &SPI_3WIRE ) && (tfr->rx_buf)) +if (spi->mode &SPI_3WIRE && tfr->rx_buf && + tfr->rx_buf != master->dummy_rx) cs |=BCM2835_SPI_CS_REN ;else cs &= ~BCM2835_SPI_CS_REN ;
Greg KH
maintainerQuoted 9 lines · Lukas Wunner
Quoted 5 lines · Greg KH
Quoted 2 lines · Lukas Wunner
Quoted 1 line · On Wed, Aug 07, 2019 at 06:48:07PM +0200, [email protected] wrote:
The patch below does not apply to the 5.2-stable tree.
The patch applies everywhere, but breaks the build in all trees.
Ugh, yes you are right, my apologies.
Quoted 8 lines
The reason is that v5.3 converted
spi-bcm2835.cto use the "spi_controller" nomenclature instead of "spi_master" with commit5f336ea53b6b("spi: bcm2835: Replacespi_masterbyspi_controller").The replacement patch below should hopefully not break the build. It's the same as upstream commit
8d8bef503658, except one occurrence of "ctlr" is replaced by "master".
Thanks for this, now queued up.
greg k-h