mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 20:46:48 +02:00
mmc: sdhci: allow drivers to pre-allocate bounce buffer
Allow platform drivers to pre-allocate bounce buffer by checking if host->bounce_buffer is already set before attempting allocation. This enables platforms with specific DMA constraints (such as 32-bit DMA on controllers that cannot access high memory) to use their own reserved memory regions for the bounce buffer. Suggested-by: Adrian Hunter <adrian.hunter@intel.com> Signed-off-by: Albert Yang <yangzh0906@thundersoft.com> Acked-by: Adrian Hunter <adrian.hunter@intel.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
d515962316
commit
ef7eb1a709
|
|
@ -4193,6 +4193,12 @@ static void sdhci_allocate_bounce_buffer(struct sdhci_host *host)
|
|||
unsigned int bounce_size;
|
||||
int ret;
|
||||
|
||||
/* Drivers may have already allocated the buffer */
|
||||
if (host->bounce_buffer) {
|
||||
bounce_size = host->bounce_buffer_size;
|
||||
max_blocks = bounce_size / 512;
|
||||
goto out;
|
||||
}
|
||||
/*
|
||||
* Cap the bounce buffer at 64KB. Using a bigger bounce buffer
|
||||
* has diminishing returns, this is probably because SD/MMC
|
||||
|
|
@ -4241,6 +4247,7 @@ static void sdhci_allocate_bounce_buffer(struct sdhci_host *host)
|
|||
|
||||
host->bounce_buffer_size = bounce_size;
|
||||
|
||||
out:
|
||||
/* Lie about this since we're bouncing */
|
||||
mmc->max_segs = max_blocks;
|
||||
mmc->max_seg_size = bounce_size;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user