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
This commit is contained in:
parent
d770e558e2
commit
2a3fffd458
|
@ -386,14 +386,14 @@ static bool bcm2835_spi_can_dma(struct spi_master *master,
|
|||
/* 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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue