2015-12-17 09:29:22 +00:00
|
|
|
From cf5cb87ad3bd6549cc18aa880bfadd3707c75f93 Mon Sep 17 00:00:00 2001
|
2015-10-26 09:01:05 +00:00
|
|
|
From: Martin Sperl <kernel@martin.sperl.org>
|
|
|
|
Date: Thu, 10 Sep 2015 09:32:14 +0000
|
2015-12-17 09:29:22 +00:00
|
|
|
Subject: [PATCH 182/222] backport: spi: bcm2835: BUG: fix wrong use of
|
2015-10-26 09:01:05 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|