On Sat, Apr 19, 2014 at 9:30 AM, Ian Campbell <i...@hellion.org.uk> wrote:
> On Sun, 2014-04-13 at 23:45 -0400, Shixin Zeng wrote: > > Hi, > > > > I compiled the current u-boot from > > https://github.com/jwrdegoede/u-boot-sunxi.git for cubieboard2, and > > wrote it to the SD card. I was trying to boot the kernel on my > > computer over network by tftp, however it failed when I ran "dhcp" or > > "tftp" command in uboot with a tons of: > > > > > > ERROR: v7_dcache_inval_range - start address is not aligned - 0x7fb677e0 > > ERROR: v7_dcache_inval_range - stop address is not aligned - 0x7fb67820 > > I'm seeing this on Cubieboard2 and Cubietruck. It appears to be down to > a change to the upstream designware driver: > > commit 50b0df814b0f75c08a3d45a017016a75af3edb5d > Author: Alexey Brodkin <alexey.brod...@synopsys.com> > Date: Wed Jan 22 20:49:09 2014 +0400 > > net/designware: make driver compatible with data cache > > Up until now this driver only worked with data cache disabled. > To make it work with enabled data cache following changes were > required: > > * Flush Tx/Rx buffer descriptors their modification > * Invalidate Tx/Rx buffer descriptors before reading its values > * Flush cache for data passed from CPU to GMAC > * Invalidate cache for data passed from GMAC to CPU > > > http://git.denx.de/?p=u-boot.git;a=commit;h=50b0df814b0f75c08a3d45a017016a75af3edb5d > > I suppose this was only tested on some architecture which allows DMA > flush/invaidation at a fairly fine granularity (at least down to 4 byte > boundaries) > > Making sure that struct dw_eth_dev is DMA aligned helps with the > invalidate of the descriptors in dw_eth_recv (see below) but with that > the invalidate of the txrx_status field in dw_eth_send is still > problematic -- the field is only 4 bytes, so although the descriptor is > aligned the end is not. > > Indeed, with this change, I now get these errors instead: Loading: ERROR: v7_dcache_inval_range - stop address is not aligned - 0x7fb663c4 ERROR: v7_dcache_inval_range - stop address is not aligned - 0x7fb66404 ERROR: v7_dcache_inval_range - stop address is not aligned - 0x7fb6f401 Best Regards Shixin Zeng > Ian. > > > commit 8878d858ede12584b885fa9439f9093bf2186a90 > Author: Ian Campbell <i...@hellion.org.uk> > Date: Sat Apr 19 14:16:04 2014 +0100 > > net/designware: ensure device private data is DMA aligned. > > struct dw_eth_dev contains fields which are accessed via DMA, so make > sure it > is aligned to a dma boundary. Without this I see: > ERROR: v7_dcache_inval_range - start address is not aligned - > 0x7fb677e0 > > Signed-off-by: Ian Campbell <ian.campb...@citrix.com> > > diff --git a/drivers/net/designware.c b/drivers/net/designware.c > index 6ece479..1120f70 100644 > --- a/drivers/net/designware.c > +++ b/drivers/net/designware.c > @@ -412,7 +412,8 @@ int designware_initialize(ulong base_addr, u32 > interface) > * Since the priv structure contains the descriptors which need a > strict > * buswidth alignment, memalign is used to allocate memory > */ > - priv = (struct dw_eth_dev *) memalign(16, sizeof(struct > dw_eth_dev)); > + priv = (struct dw_eth_dev *) memalign(ARCH_DMA_MINALIGN, > + sizeof(struct dw_eth_dev)); > if (!priv) { > free(dev); > return -ENOMEM; > > > -- > You received this message because you are subscribed to the Google Groups > "linux-sunxi" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to linux-sunxi+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. >
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot