public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Marek Vasut <marex@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [linux-sunxi] Uboot error: address not aligned in v7_dcache_inval_range
Date: Sat, 26 Apr 2014 20:27:00 +0200	[thread overview]
Message-ID: <201404262027.00954.marex@denx.de> (raw)
In-Reply-To: <1397914214.19277.50.camel@hastur.hellion.org.uk>

On Saturday, April 19, 2014 at 03:30:14 PM, Ian Campbell 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.Brodkin@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=50b0df814b0f75c08a3d45a017016a7
> 5af3edb5d
> 
> 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)

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.

When reordering the struct dw_eth_dev {}, make sure to add a comment about the 
alignment.

Best regards,
Marek Vasut

  parent reply	other threads:[~2014-04-26 18:27 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CAOay_bwoK_U8aNJuu0CSMhvUAzkVHvN=VzPiK=2cB2+bcah0FA@mail.gmail.com>
2014-04-19 13:30 ` [U-Boot] [linux-sunxi] Uboot error: address not aligned in v7_dcache_inval_range Ian Campbell
2014-04-19 13:52   ` [U-Boot] [PATCH 1/3] net/designware: ensure device private data is DMA aligned Ian Campbell
2014-04-24 17:22     ` Alexey Brodkin
2014-04-26 18:27     ` Marek Vasut
2014-04-19 13:52   ` [U-Boot] [PATCH 2/3] net/designware: invalidate entire descriptor in dw_eth_send Ian Campbell
     [not found]     ` <jwv38h9v2cg.fsf-monnier+gmane.comp.hardware.netbook.arm.sunxi@gnu.org>
2014-04-19 14:32       ` [U-Boot] [linux-sunxi] " Ian Campbell
2014-04-24 17:41     ` [U-Boot] " Alexey Brodkin
2014-04-24 19:14       ` Ian Campbell
2014-04-25  8:48         ` Alexey Brodkin
2014-04-27 18:47           ` Ian Campbell
2014-04-28 12:05             ` Alexey Brodkin
2014-04-28 19:34               ` Ian Campbell
2014-04-25  0:58       ` Stefan Monnier
2014-04-19 13:52   ` [U-Boot] [PATCH 3/3] net/designware: align cache invalidation on rx Ian Campbell
2014-04-20  5:43     ` [U-Boot] [linux-sunxi] " Shixin Zeng
2014-04-20  5:16   ` [U-Boot] [linux-sunxi] Uboot error: address not aligned in v7_dcache_inval_range Shixin Zeng
2014-04-26 18:27   ` Marek Vasut [this message]
2014-04-27 18:40     ` Ian Campbell
2014-04-27 19:14       ` Marek Vasut
2014-04-28 19:55     ` Ian Campbell
2014-04-28 20:21       ` Marek Vasut
2014-05-01 18:43         ` Ian Campbell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201404262027.00954.marex@denx.de \
    --to=marex@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox