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
next prev 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