45 lines
1.6 KiB
Diff
45 lines
1.6 KiB
Diff
|
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;
|
||
|
}
|
||
|
|