2019-09-19 14:43:19 +00:00
|
|
|
From 44db7882be675cdf2d89741af5bbeba41b3e25af Mon Sep 17 00:00:00 2001
|
2019-07-09 18:32:28 +00:00
|
|
|
From: Phil Elwell <phil@raspberrypi.org>
|
|
|
|
Date: Wed, 13 Mar 2019 14:19:11 +0000
|
2019-09-19 14:43:19 +00:00
|
|
|
Subject: [PATCH 378/806] bcm2835-sdhost: Allow for sg entries that cross pages
|
2019-07-09 18:32:28 +00:00
|
|
|
|
|
|
|
The dma_complete handling code calculates a virtual address for a page
|
|
|
|
then adds an offset, but if the offset is more than a page and HIGHMEM
|
|
|
|
is in use then the summed address could be in an unmapped (or just
|
|
|
|
incorrect) page.
|
|
|
|
|
|
|
|
The upstream SDHOST driver allows for this possibility - copy the code
|
|
|
|
that does so.
|
|
|
|
|
|
|
|
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|
|
|
---
|
|
|
|
drivers/mmc/host/bcm2835-sdhost.c | 5 +++++
|
|
|
|
1 file changed, 5 insertions(+)
|
|
|
|
|
|
|
|
--- a/drivers/mmc/host/bcm2835-sdhost.c
|
|
|
|
+++ b/drivers/mmc/host/bcm2835-sdhost.c
|
|
|
|
@@ -543,6 +543,11 @@ static void bcm2835_sdhost_dma_complete(
|
|
|
|
void *page;
|
|
|
|
u32 *buf;
|
|
|
|
|
|
|
|
+ if (host->drain_offset & PAGE_MASK) {
|
|
|
|
+ host->drain_page += host->drain_offset >> PAGE_SHIFT;
|
|
|
|
+ host->drain_offset &= ~PAGE_MASK;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
page = kmap_atomic(host->drain_page);
|
|
|
|
buf = page + host->drain_offset;
|
|
|
|
|