[U-Boot] [PATCH 06/51] mmc: dw_mmc: Fix cache alignment issue

Chin Liang See clsee at altera.com
Wed Oct 1 11:45:30 CEST 2014


Hi Marek,

On Sun, 2014-09-21 at 14:58 +0200, marex at denx.de wrote:
> The DMA descriptors used by the DW MMC block must be aligned to cacheline
> size, otherwise we are unable to properly flush/inval cache over them and
> we get data corruption.
> 
> The reason I chose this approach of expanding the structure is because
> the driver allocates the descriptors in bulk. This approach does waste
> space by inserting slop inbetween the descriptors, but it makes access
> to the descriptors easy as the compiler does know the real size of the
> structure. It also makes cache operations easy, since the size of the
> structure is cache aligned and the structure start address is as well.
> 
> Signed-off-by: Marek Vasut <marex at denx.de>
> Cc: Chin Liang See <clsee at altera.com>
> Cc: Dinh Nguyen <dinguyen at altera.com>
> Cc: Albert Aribaud <albert.u.boot at aribaud.net>
> Cc: Tom Rini <trini at ti.com>
> Cc: Wolfgang Denk <wd at denx.de>
> Cc: Pavel Machek <pavel at denx.de>
> Cc: Pantelis Antoniou <panto at antoniou-consulting.com>
> ---
>  include/dwmmc.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/include/dwmmc.h b/include/dwmmc.h
> index b67f11b..109f7c8 100644
> --- a/include/dwmmc.h
> +++ b/include/dwmmc.h
> @@ -157,7 +157,7 @@ struct dwmci_idmac {
>  	u32 cnt;
>  	u32 addr;
>  	u32 next_addr;
> -};
> +} __aligned(ARCH_DMA_MINALIGN);
>  

Wonder the ALLOC_CACHE_ALIGN_BUFFER within function dwmci_send_cmd at
drivers/mmc/dw_mmc.c already take care this?

Thanks
Chin Liang

>  static inline void dwmci_writel(struct dwmci_host *host, int reg, u32 val)
>  {




More information about the U-Boot mailing list