From: Albert ARIBAUD <albert.u.boot@aribaud.net>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] arm1136: cosmetic: Remove double test on CONFIG_SYS_DCACHE_OFF
Date: Fri, 5 Oct 2012 20:15:33 +0200 [thread overview]
Message-ID: <20121005201533.592a4de6@lilith> (raw)
In-Reply-To: <222499073.6244840.1349458594856.JavaMail.root@advansee.com>
Hi Beno?t,
On Fri, 5 Oct 2012 19:36:34 +0200 (CEST), Beno?t Th?baudeau
<benoit.thebaudeau@advansee.com> wrote:
> Hi Albert,
>
> On Friday, October 5, 2012 7:05:19 PM, Albert ARIBAUD wrote:
> > Hi Beno?t,
> >
> > On Thu, 4 Oct 2012 18:57:19 +0200 (CEST), Beno?t Th?baudeau
> > <benoit.thebaudeau@advansee.com> wrote:
> >
> > > Hi Albert,
> > >
> > > On Thursday, October 4, 2012 3:39:41 PM, Albert ARIBAUD wrote:
> > > > Hi Beno?t,
> > > >
> > > > On Tue, 14 Aug 2012 15:17:09 +0200 (CEST), Beno?t Th?baudeau
> > > > <benoit.thebaudeau@advansee.com> wrote:
> > > >
> > > > > Remove a redundant '#ifndef CONFIG_SYS_DCACHE_OFF' nested in
> > > > > the
> > > > > same #ifndef.
> > > > >
> > > > > Signed-off-by: Beno?t Th?baudeau
> > > > > <benoit.thebaudeau@advansee.com>
> > > > > Cc: Albert Aribaud <albert.u.boot@aribaud.net>
> > > > > ---
> > > > > .../arch/arm/cpu/arm1136/cpu.c | 2 --
> > > > > 1 file changed, 2 deletions(-)
> > > > >
> > > > > diff --git u-boot-4d3c95f.orig/arch/arm/cpu/arm1136/cpu.c
> > > > > u-boot-4d3c95f/arch/arm/cpu/arm1136/cpu.c
> > > > > index b98e3d9..1136c1d 100644
> > > > > --- u-boot-4d3c95f.orig/arch/arm/cpu/arm1136/cpu.c
> > > > > +++ u-boot-4d3c95f/arch/arm/cpu/arm1136/cpu.c
> > > > > @@ -146,9 +146,7 @@ void enable_caches(void)
> > > > > #ifndef CONFIG_SYS_ICACHE_OFF
> > > > > icache_enable();
> > > > > #endif
> > > > > -#ifndef CONFIG_SYS_DCACHE_OFF
> > > > > dcache_enable();
> > > > > -#endif
> > > > > }
> > > > >
> > > > > #else /* #ifndef CONFIG_SYS_DCACHE_OFF */
> > > >
> > > > I'll NAK this one because:
> > > >
> > > > 1) obviously the big #ifndef CONFIG_SYS_DCACHE_OFF / #else
> > > > /#endif is
> > > > there to provide either working D$ functions or empty ones;
> > > >
> > > > 2) enable_caches() exists only in the "then" branch, not at all
> > > > in
> > > > the
> > > > "else" branch, which makes it a surprising exception;
> > > >
> > > > 3) enable_caches() is the only function in the if/then/else
> > > > acting on
> > > > I$
> > > > as well as D$;
> > > >
> > > > ... so I suspect it did not actually belong in the big
> > > > if/then/else
> > > > in
> > > > the first place and should not be modified but moved after the
> > > > #endif.
> > >
> > > I agree, simply because with the current code, enable_caches() does
> > > not enable
> > > icache if CONFIG_SYS_ICACHE_OFF is not defined but
> > > CONFIG_SYS_DCACHE_OFF is.
> > >
> > > But is it enough to move it? We could indeed move it after the
> > > #endif, but also
> > > change it to:
> > >
> > > ---
> > > #if !defined(CONFIG_SYS_ICACHE_OFF) ||
> > > !defined(CONFIG_SYS_DCACHE_OFF)
> > > void enable_caches(void)
> > > {
> > > #ifndef CONFIG_SYS_ICACHE_OFF
> > > icache_enable();
> > > #endif
> > > #ifndef CONFIG_SYS_DCACHE_OFF
> > > dcache_enable();
> > > #endif
> > > }
> > > #endif
> > > ---
> > >
> > > In that way, the default __enable_caches() from cache.c (outputting
> > > "WARNING: Caches not enabled\n") would be linked if both
> > > CONFIG_SYS_ICACHE_OFF
> > > and CONFIG_SYS_DCACHE_OFF are defined.
> > >
> > > Do you agree?
> >
> > When CONFIG_SYS_DCACHE_OFF, dcache functions are not compiled out,
> > they
> > are compiled in but empty. IOW, even with caches off, the API remains
> > callable albeit useless. This is done so that client code does not
> > have to test CONFIG_SYS_DCACHE_OFF before deciding to call the API or
> > not.
> >
> > Therefore, for consistency, enable_caches() should be defined and
> > empty
> > even when both CONFIG_SYS_DCACHE_OFF and CONFIG_SYS_ICACHE_OFF are
> > defined, which is not the case in the example above due to the
> > enclosing #if/#endif.
>
> In the example, enable_caches() is still defined if both CONFIG_SYS_DCACHE_OFF
> and CONFIG_SYS_ICACHE_OFF are defined. See arch/arm/lib/cache.c:
> ---
> /*
> * Default implementation of enable_caches()
> * Real implementation should be in platform code
> */
> void __enable_caches(void)
> {
> puts("WARNING: Caches not enabled\n");
> }
> void enable_caches(void)
> __attribute__((weak, alias("__enable_caches")));
> ---
>
> But you're right, it's not empty in this case. Is it that you want to remove
> this message in this case?
>
> This default implementation is used in the same way for several other ARM
> targets.
OK, I see your point: enable_cache() needs not be defined here if
caches are #define'd out, because there is a weak default definition
in arch/arm/lib/cache.c that just prints a warning about caches not
being enabled.
But then, the same holds for flush_dcache_all and flush_cache, which
are not compiled out from as enable_cache is -- and if they were, then
the arch/arm/lib/cache.c versions would kick in, and those are not
empty, especially __flush_cache which contains a conditional call to...
arm1136_cache_flush()
That is certainly not consistent... And on second thought, not defining
a cache-related function at cpu level if caches are compiled out is
more sensible than defining it empty.
All this could undergo a greater change to move cpu-specifics out of
the ARM library so that all lib functions are empty or generic, and
define cpu-specific functions only if caches are compiled in... But
I won't ask for something that's far beyond the goal of your patch.
Conclusion: V2 is good as it is. I'll apply it on /next.
> Best regards,
> Beno?t
Amicalement,
--
Albert.
next prev parent reply other threads:[~2012-10-05 18:15 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-14 13:17 [U-Boot] [PATCH] arm1136: cosmetic: Remove double test on CONFIG_SYS_DCACHE_OFF Benoît Thébaudeau
2012-10-04 13:39 ` Albert ARIBAUD
2012-10-04 16:57 ` Benoît Thébaudeau
2012-10-05 17:05 ` Albert ARIBAUD
2012-10-05 17:36 ` Benoît Thébaudeau
2012-10-05 18:15 ` Albert ARIBAUD [this message]
2012-10-04 20:04 ` [U-Boot] [PATCH v2] arm1136: Fix enable_caches() Benoît Thébaudeau
2012-10-05 18:23 ` Albert ARIBAUD
2012-10-31 14:41 ` Benoît Thébaudeau
2012-11-10 11:29 ` Albert ARIBAUD
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=20121005201533.592a4de6@lilith \
--to=albert.u.boot@aribaud.net \
--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