public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Siarhei Siamashka <siarhei.siamashka@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [linux-sunxi] [PATCH 3/2] net/designware: reorder struct dw_eth_dev to pack more efficiently.
Date: Wed, 14 May 2014 10:44:13 +0300	[thread overview]
Message-ID: <20140514104413.2fd33f97@i7> (raw)
In-Reply-To: <1398970918.19277.181.camel@hastur.hellion.org.uk>

On Thu, 01 May 2014 20:01:58 +0100
Ian Campbell <ijc@hellion.org.uk> wrote:

> The {tx,rx}_mac_descrtable fields are aligned to ARCH_DMA_MINALIGN, which could
> be 256 or even larger. That means there is a potentially huge hole in the
> struct before those fields, so move them to the front where they are better
> packed.
> 
> Moving them to the front also helps ensure that so long as dw_eth_dev is
> properly aligned (which it is since "net/designware: ensure device private data
> is DMA aligned.") the {tx,rx}_mac_descrtable will be too, or at least avoids
> having to worry too much about compiler specifics.
> 
> Signed-off-by: Ian Campbell <ijc@hellion.org.uk>
> Cc: Alexey Brodkin <abrodkin@synopsys.com>
> ---
>  drivers/net/designware.h | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/designware.h b/drivers/net/designware.h
> index 382b0c7..6d94b3a 100644
> --- a/drivers/net/designware.h
> +++ b/drivers/net/designware.h
> @@ -215,13 +215,13 @@ struct dmamacdescr {
>  #endif
>  
>  struct dw_eth_dev {
> +	struct dmamacdescr tx_mac_descrtable[CONFIG_TX_DESCR_NUM];
> +	struct dmamacdescr rx_mac_descrtable[CONFIG_RX_DESCR_NUM];
> +
>  	u32 interface;
>  	u32 tx_currdescnum;
>  	u32 rx_currdescnum;
>  
> -	struct dmamacdescr tx_mac_descrtable[CONFIG_TX_DESCR_NUM];
> -	struct dmamacdescr rx_mac_descrtable[CONFIG_RX_DESCR_NUM];
> -
>  	char txbuffs[TX_TOTAL_BUFSIZE];
>  	char rxbuffs[RX_TOTAL_BUFSIZE];

After this reordering, txbuffs and rxbuffs buffers become DMA unaligned.
And they are also used with the cache flush/invalidate operations all
over the place, causing all the same "v7_dcache_inval_range - start
address is not aligned" failures.

The txbuffs/rxbuffs buffers probably should immediately follow
dmamacdescr structs and also have their own alignment enforcement
attribute.

As for the buffer sizes, we have the following defines:

#define CONFIG_TX_DESCR_NUM	16
#define CONFIG_RX_DESCR_NUM	16
#define CONFIG_ETH_BUFSIZE	2048
#define TX_TOTAL_BUFSIZE	(CONFIG_ETH_BUFSIZE * CONFIG_TX_DESCR_NUM)
#define RX_TOTAL_BUFSIZE	(CONFIG_ETH_BUFSIZE * CONFIG_RX_DESCR_NUM)

CONFIG_ETH_BUFSIZE is a power of two, which is good. Still maybe an
extra assertion check to verify/confirm that it is divisible by the
cache line size would make the code cleaner? But that's just a nitpick,
because the "v7_dcache_inval_range" function is noisy enough if anything
is wrong :-)

-- 
Best regards,
Siarhei Siamashka

  parent reply	other threads:[~2014-05-14  7:44 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-28 19:50 [U-Boot] [PATCH v2 2/2] net/designware: ensure cache invalidations are aligned to ARCH_DMA_MINALIGN Ian Campbell
2014-05-01 19:01 ` [U-Boot] [PATCH 3/2] net/designware: reorder struct dw_eth_dev to pack more efficiently Ian Campbell
2014-05-01 19:23   ` Marek Vasut
2014-05-14  7:44   ` Siarhei Siamashka [this message]
2014-05-14  7:52     ` [U-Boot] [linux-sunxi] " Ian Campbell
2014-05-14  8:01       ` Siarhei Siamashka
2014-05-14  8:32         ` Siarhei Siamashka
2014-05-14  9:25           ` Ian Campbell
2014-05-14  9:49         ` Marek Vasut

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=20140514104413.2fd33f97@i7 \
    --to=siarhei.siamashka@gmail.com \
    --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