[U-Boot] [PATCH 01/10] arm: Compile cache_disable() with -O2 to avoid failure

Marek Vasut marex at denx.de
Sat Nov 3 09:32:34 CET 2012


Dear Simon Glass,

> It is good to have these functions written in C instead of assembler,
> but with -O0 the cache_disable() function doesn't return. Rather than
> revert to assembler, this fix just forces this to be built with -O2.
> 
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>  arch/arm/lib/cache-cp15.c |   10 ++++++++++
>  1 files changed, 10 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/lib/cache-cp15.c b/arch/arm/lib/cache-cp15.c
> index 939de10..8f8385d 100644
> --- a/arch/arm/lib/cache-cp15.c
> +++ b/arch/arm/lib/cache-cp15.c
> @@ -110,6 +110,16 @@ static void cache_enable(uint32_t cache_bit)
>  	set_cr(reg | cache_bit);
>  }
> 
> +/*
> + * Big hack warning!
> + *
> + * Devs like to compile with -O0 to get a nice debugging illusion. But
> this + * function does not survive that since -O0 causes the compiler to
> read the + * PC back from the stack after the dcache flush. Might it be
> possible to fix + * this by flushing the write buffer?
> + */
> +static void cache_disable(uint32_t cache_bit) __attribute__
> ((optimize(2))); +
>  /* cache_bit must be either CR_I or CR_C */
>  static void cache_disable(uint32_t cache_bit)
>  {

Uh, are you sure this is right ?

Best regards,
Marek Vasut


More information about the U-Boot mailing list