From: Alexey Brodkin <Alexey.Brodkin@synopsys.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] Unaligned flush_dcache_range in axs101.c
Date: Mon, 11 Apr 2016 18:13:59 +0000 [thread overview]
Message-ID: <1460398438.5119.73.camel@synopsys.com> (raw)
In-Reply-To: <570BE4D8.9050303@denx.de>
Hi Marek,
On Mon, 2016-04-11 at 19:54 +0200, Marek Vasut wrote:
> On 04/11/2016 07:48 PM, Alexey Brodkin wrote:
> >
> > Hi Alex,
> >
> > On Mon, 2016-04-04 at 09:38 +0200, Alexander Graf wrote:
> > >
> > > Hi Alexey,
> > >
> > > Marek just pointed out to me the fact that flush_dcache_range on arm
> > > expects cache line aligned arguments. However, it seems like in axs101.c
> > > we have an unaligned cache flush:
> > >
> > > ? flush_dcache_range(RESET_VECTOR_ADDR, RESET_VECTOR_ADDR + sizeof(int));
> > >
> > > Could you please verify whether this is correct and if not just send a
> > > quick patch to fix it?
> > First this code is for support of Synopsys DesignWare AXS10x boards.
> > And AFAIK there's no such board that may sport ARM CPU instead or ARC.
> > So I'm wondering how did you bumped into that [issue?]?
> >
> > Then I'm not really sure if there's a common requirement for arguments of
> > flush_dcache_range(). At least in "include/common.h" there's no comment about
> > that.
> Such comment should then be added. Sub-cacheline flush/invalidate calls
> can corrupt surrounding data.
Well this is not that simple really.
For example that's what we have on ARC:
[1] We may deal with each cache line separately. And BTW that's what we have
? ? now in U-boot, see?http://git.denx.de/?p=u-boot.git;a=blob;f=arch/arc/lib/cache.c#l328
? ? In that case we only mention address of cache line start and regardless of its length
? ? line will be processed by HW.
[2] We may although deal with ranges as well (still this is not implemented in u-boot yet).
? ? In that case we need to set addresses of range beginning and end.
? ? But if start address falls actually in the middle of cache line it will be processed.
? ? And the same is valid for end of the region.
So from above I may conclude that it's more important to place data properly in memory.
I.e. if you put 2 completely independent substances in 1 cache line you won't be able to
deal with cache entries for them separately (at least on ARC).
I'm not really sure if ARM or any other arch in hardware may invalidate/writeback only part of
one cache line - that might very well be the case.
But in the original case my implementation makes perfect sense because what it does
it writes back instructions modified by the active CPU so others may see these changes.
and here I'd like ideally to have an option to write back only 1 CPU word (because that's
what I really modified) but this is not possible due to described above limitations of our HW.
-Alexey
next prev parent reply other threads:[~2016-04-11 18:13 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-04 7:38 [U-Boot] Unaligned flush_dcache_range in axs101.c Alexander Graf
2016-04-11 17:48 ` Alexey Brodkin
2016-04-11 17:54 ` Marek Vasut
2016-04-11 18:13 ` Alexey Brodkin [this message]
2016-04-11 18:48 ` Marek Vasut
2016-04-15 13:00 ` Alexey Brodkin
2016-04-15 13:49 ` Marek Vasut
2016-05-26 11:39 ` Alexey Brodkin
2016-05-26 12:07 ` Vineet Gupta
2016-05-27 13:21 ` 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=1460398438.5119.73.camel@synopsys.com \
--to=alexey.brodkin@synopsys.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