diff options
Diffstat (limited to 'target/linux/brcm2708/patches-4.1/0182-backport-spi-bcm2835-BUG-fix-wrong-use-of-PAGE_MASK.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.1/0182-backport-spi-bcm2835-BUG-fix-wrong-use-of-PAGE_MASK.patch | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.1/0182-backport-spi-bcm2835-BUG-fix-wrong-use-of-PAGE_MASK.patch b/target/linux/brcm2708/patches-4.1/0182-backport-spi-bcm2835-BUG-fix-wrong-use-of-PAGE_MASK.patch new file mode 100644 index 0000000000..cbe4b29f05 --- /dev/null +++ b/target/linux/brcm2708/patches-4.1/0182-backport-spi-bcm2835-BUG-fix-wrong-use-of-PAGE_MASK.patch @@ -0,0 +1,44 @@ +From 6460bf849143979acff90f3664f78bf3907aad0f Mon Sep 17 00:00:00 2001 +From: Martin Sperl <kernel@martin.sperl.org> +Date: Thu, 10 Sep 2015 09:32:14 +0000 +Subject: [PATCH 182/203] backport: spi: bcm2835: BUG: fix wrong use of + PAGE_MASK + +There is a bug in the alignment checking of transfers, +that results in DMA not being used for un-aligned +transfers that do not cross page-boundries, which is valid. + +This is due to a missconception of the meaning PAGE_MASK +when implementing that check originally - (PAGE_SIZE - 1) +should have been used instead. + +Also fixes a copy/paste error. + +Reported-by: <robert@axium.co.nz> +Signed-off-by: Martin Sperl <kernel@martin.sperl.org> +Signed-off-by: Mark Brown <broonie@kernel.org> +Cc: stable@vger.kernel.org +--- + drivers/spi/spi-bcm2835.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/drivers/spi/spi-bcm2835.c ++++ b/drivers/spi/spi-bcm2835.c +@@ -386,14 +386,14 @@ static bool bcm2835_spi_can_dma(struct s + /* otherwise we only allow transfers within the same page + * to avoid wasting time on dma_mapping when it is not practical + */ +- if (((size_t)tfr->tx_buf & PAGE_MASK) + tfr->len > PAGE_SIZE) { ++ if (((size_t)tfr->tx_buf & (PAGE_SIZE - 1)) + tfr->len > PAGE_SIZE) { + dev_warn_once(&spi->dev, + "Unaligned spi tx-transfer bridging page\n"); + return false; + } +- if (((size_t)tfr->rx_buf & PAGE_MASK) + tfr->len > PAGE_SIZE) { ++ if (((size_t)tfr->rx_buf & (PAGE_SIZE - 1)) + tfr->len > PAGE_SIZE) { + dev_warn_once(&spi->dev, +- "Unaligned spi tx-transfer bridging page\n"); ++ "Unaligned spi rx-transfer bridging page\n"); + return false; + } + |