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

Christoph Müllner christoph.muellner at theobroma-systems.com
Wed May 8 10:59:23 UTC 2019



On 08.05.19 12:52, Marek Vasut wrote:
> On 5/8/19 7:26 AM, Peng Fan wrote:
>> Hi Kever,
>>
>>> Subject: [PATCH] bouncebuf: add feature to support buffer only available in
>>> DRAM
>>>
>>> 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.
>>> +
>>
>> I think introduce a new GEN_BB_FORCE flags might be better, no need to
>> introduce new kconfig entry, and it will be easier for others to use, if
>> there are other controllers has same limitation.
> 
> Is the bounce buffer really the right place to put per-driver DMA
> restrictions ?

Also note that this patch addresses the exact same problem,
that my bouncebuffer mach_is_dmaable() series tackles.


More information about the U-Boot mailing list