public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
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.

  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