mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 23:12:32 +00:00
33 lines
1.0 KiB
Diff
33 lines
1.0 KiB
Diff
|
From 7d87e7c1dbf0be8015daec4ae7eb2a87147915d5 Mon Sep 17 00:00:00 2001
|
||
|
From: Phil Elwell <phil@raspberrypi.org>
|
||
|
Date: Wed, 13 Mar 2019 14:19:11 +0000
|
||
|
Subject: [PATCH 384/703] bcm2835-sdhost: Allow for sg entries that cross pages
|
||
|
|
||
|
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;
|
||
|
|