[U-Boot] [linux-sunxi] Uboot error: address not aligned in v7_dcache_inval_range
Marek Vasut
marex at denx.de
Sun Apr 27 21:14:13 CEST 2014
On Sunday, April 27, 2014 at 08:40:50 PM, Ian Campbell wrote:
> On Sat, 2014-04-26 at 20:27 +0200, Marek Vasut wrote:
> > This was a sheer luck this ever worked. Looking at the entire driver, to
> > fix all your issues with DMA and caches, it would be sufficient to
> > re-align "struct dw_eth_dev" properly.
> >
> > See drivers/net/designware.h:
> > 1) struct dmamacdescr {} is already __aligned(ARCH_DMA_MINALIGN)
> >
> > => This structure, if aligned in memory to proper boundary, can be
> > flushed/
> >
> > invalidated without problems.
> >
> > 2) struct dw_eth_dev {} can be aligned to ANY 4-byte boundary
> >
> > But this structure contains two arrays of struct dmamacdescr {} ,
> > which each have their elements' lenght aligned to ARCH_DMA_MINALIGN
> >
> > Solution:
> >
> > Your patch [1/3] and reorder the structure in designware.h so that the
> > struct dmamacdescr tx_mac_descrtable[]
> > struct dmamacdescr rx_mac_descrtable[]
> > are first and anything that does not need to be aligned follows. This
> > way, the DMA descriptors will always be aligned and you need not worry
> > about the flushes. You don't even need to ROUNDUP their length, since
> > they are already fine.
>
> That sounds like a good plan. I'll take a look.
>
> > When reordering the struct dw_eth_dev {}, make sure to add a comment
> > about the alignment.
>
> Of course.
Thanks
Best regards,
Marek Vasut
More information about the U-Boot
mailing list