diff mbox series

[U-Boot] dm: core: Round up size when allocating so that it is cache line aligned

Message ID 1505820230-30199-1-git-send-email-faiz_abbas@ti.com
State Accepted
Commit 5924da1dfe56d32a45b8adf29bdc8caf788bd4c8
Delegated to: Simon Glass
Headers show
Series [U-Boot] dm: core: Round up size when allocating so that it is cache line aligned | expand

Commit Message

Faiz Abbas Sept. 19, 2017, 11:23 a.m. UTC
The size variable may not be always be a mulitple of
ARCH_DMA_MINALIGN and using it to flush cache leads to cache
misaligned warnings.

Therefore, round up the size to a multiple of ARCH_DMA_MINLAIGN
when allocating private data.

Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
---
 drivers/core/device.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Bin Meng Sept. 19, 2017, 12:12 p.m. UTC | #1
Hi Faiz,

On Tue, Sep 19, 2017 at 7:23 PM, Faiz Abbas <faiz_abbas@ti.com> wrote:
> The size variable may not be always be a mulitple of
> ARCH_DMA_MINALIGN and using it to flush cache leads to cache
> misaligned warnings.
>
> Therefore, round up the size to a multiple of ARCH_DMA_MINLAIGN
> when allocating private data.
>
> Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
> ---
>  drivers/core/device.c | 1 +
>  1 file changed, 1 insertion(+)
>

Isn't DM_FLAG_ALLOC_PRIV_DMA sufficient?

Regards,
Bin
Faiz Abbas Sept. 19, 2017, 12:28 p.m. UTC | #2
Hi Bin,

On Tuesday 19 September 2017 05:42 PM, Bin Meng wrote:
> Hi Faiz,
> 
> On Tue, Sep 19, 2017 at 7:23 PM, Faiz Abbas <faiz_abbas@ti.com> wrote:
>> The size variable may not be always be a mulitple of
>> ARCH_DMA_MINALIGN and using it to flush cache leads to cache
>> misaligned warnings.
>>
>> Therefore, round up the size to a multiple of ARCH_DMA_MINLAIGN
>> when allocating private data.
>>
>> Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
>> ---
>>  drivers/core/device.c | 1 +
>>  1 file changed, 1 insertion(+)
>>
> 
> Isn't DM_FLAG_ALLOC_PRIV_DMA sufficient?

The check_cache_range function checks both the beginning and the
end of the range given to it for cache alignment.
DM_FLAG_ALLOC_PRIV_DMA aligns only the base address but the end
address decided by size need not be at a multiple of ARCH_DMA_MINALIGN.

Thanks,
Faiz
Simon Glass Sept. 25, 2017, 2:13 a.m. UTC | #3
On 19 September 2017 at 05:23, Faiz Abbas <faiz_abbas@ti.com> wrote:
> The size variable may not be always be a mulitple of
> ARCH_DMA_MINALIGN and using it to flush cache leads to cache
> misaligned warnings.
>
> Therefore, round up the size to a multiple of ARCH_DMA_MINLAIGN
> when allocating private data.
>
> Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
> ---
>  drivers/core/device.c | 1 +
>  1 file changed, 1 insertion(+)

Reviewed-by: Simon Glass <sjg@chromium.org>
Simon Glass Sept. 29, 2017, 9 p.m. UTC | #4
On 19 September 2017 at 05:23, Faiz Abbas <faiz_abbas@ti.com> wrote:
> The size variable may not be always be a mulitple of
> ARCH_DMA_MINALIGN and using it to flush cache leads to cache
> misaligned warnings.
>
> Therefore, round up the size to a multiple of ARCH_DMA_MINLAIGN
> when allocating private data.
>
> Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
> ---
>  drivers/core/device.c | 1 +
>  1 file changed, 1 insertion(+)

Reviewed-by: Simon Glass <sjg@chromium.org>

Applied to u-boot-dm thanks!
diff mbox series

Patch

diff --git a/drivers/core/device.c b/drivers/core/device.c
index 5463d1f..96dfb21 100644
--- a/drivers/core/device.c
+++ b/drivers/core/device.c
@@ -254,6 +254,7 @@  static void *alloc_priv(int size, uint flags)
 	void *priv;
 
 	if (flags & DM_FLAG_ALLOC_PRIV_DMA) {
+		size = ROUND(size, ARCH_DMA_MINALIGN);
 		priv = memalign(ARCH_DMA_MINALIGN, size);
 		if (priv) {
 			memset(priv, '\0', size);