[U-Boot] [PATCH] bouncebuf: add feature to support buffer only available in DRAM

Kever Yang kever.yang at rock-chips.com
Tue May 7 13:51:22 UTC 2019


Some DMA which inside peripheral controller can only access space in
DRAM area, the target address outside DRAM is not available.
eg. Rockchip MMC contrller's internal DMA can only access DRAM area.

Add Kconfig option and driver for people who need it.

Signed-off-by: Kever Yang <kever.yang at rock-chips.com>
---

 common/bouncebuf.c  | 9 +++++++++
 drivers/mmc/Kconfig | 6 ++++++
 2 files changed, 15 insertions(+)

diff --git a/common/bouncebuf.c b/common/bouncebuf.c
index a7098e2caf..7ff2f488a4 100644
--- a/common/bouncebuf.c
+++ b/common/bouncebuf.c
@@ -10,6 +10,8 @@
 #include <errno.h>
 #include <bouncebuf.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 static int addr_aligned(struct bounce_buffer *state)
 {
 	const ulong align_mask = ARCH_DMA_MINALIGN - 1;
@@ -26,6 +28,13 @@ static int addr_aligned(struct bounce_buffer *state)
 		return 0;
 	}
 
+#ifdef MMC_BUF_IN_DRAM
+	if (((ulong)state->user_buffer < CONFIG_SYS_SDRAM_BASE) ||
+	    ((ulong)state->user_buffer > gd->ram_top)) {
+		debug("Not support buffer address %p\n", state->user_buffer);
+		return 0;
+	}
+#endif
 	/* Aligned */
 	return 1;
 }
diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig
index c23299ea96..e852ee6175 100644
--- a/drivers/mmc/Kconfig
+++ b/drivers/mmc/Kconfig
@@ -671,6 +671,12 @@ config FSL_ESDHC
 	  This selects support for the eSDHC (enhanced secure digital host
 	  controller) found on numerous Freescale/NXP SoCs.
 
+config MMC_BUF_IN_DRAM
+	bool "Only buffer in DRAM is available"
+	help
+	  This selects support those controller whose internal DMA can only
+	  access SDRAM spaces and other spaces are not available.
+
 endmenu
 
 config SYS_FSL_ERRATUM_ESDHC111
-- 
2.20.1



More information about the U-Boot mailing list