[U-Boot] [PATCH] x86: Add a default implementation for cleanup_before_linux.

Graeme Russ graeme.russ at gmail.com
Tue Dec 6 03:04:09 CET 2011


Hi Gabe,

On Tue, Dec 6, 2011 at 12:55 PM, Gabe Black <gabeblack at chromium.org> wrote:
> This function provides an opportunity for some last minute cleanup and
> reconfiguration before control is handed over to Linux. It's possible this
> may need to do something in the future, but for now it's left empty. It's set
> up as a weak symbol so it can be overridden if necessary on a case by case
> basis.
>
> Signed-off-by: Gabe Black <gabeblack at chromium.org>
> ---
>  arch/x86/cpu/cpu.c                |    8 ++++++++
>  arch/x86/include/asm/u-boot-x86.h |    1 +
>  2 files changed, 9 insertions(+), 0 deletions(-)
>
> diff --git a/arch/x86/cpu/cpu.c b/arch/x86/cpu/cpu.c
> index 61d0b69..3a2a64a 100644
> --- a/arch/x86/cpu/cpu.c
> +++ b/arch/x86/cpu/cpu.c
> @@ -86,6 +86,14 @@ static void reload_gdt(void)
>                     : : "m" (gdt) : "ecx");
>  }
>
> +int x86_cleanup_before_linux(void)
> +{
> +       return 0;
> +}
> +int cleanup_before_linux(void)
> +       __attribute__((weak, alias("x86_cleanup_before_linux")));
> +
> +
>  int x86_cpu_init_f(void)
>  {
>        const u32 em_rst = ~X86_CR0_EM;
> diff --git a/arch/x86/include/asm/u-boot-x86.h b/arch/x86/include/asm/u-boot-x86.h
> index 755f88a..8cc4be6 100644
> --- a/arch/x86/include/asm/u-boot-x86.h
> +++ b/arch/x86/include/asm/u-boot-x86.h
> @@ -37,6 +37,7 @@ int x86_cpu_init_r(void);
>  int cpu_init_r(void);
>  int x86_cpu_init_f(void);
>  int cpu_init_f(void);
> +int cleanup_before_linux(void);
>
>  /* cpu/.../timer.c */
>  void timer_isr(void *);
> --
> 1.7.3.1

Hmmm, interesting...

sc520 already has a function to put the board into maximal PC/AT
compatibility mode because, quite frankly, that was the easiest way to get
Linux working. So this seems to be a logical extension of that hook...

However, I while ago I had a crack at cleaning up the U-Boot init sequence
using a concept blantantly stolen from Linux[1],[2]. I wonder if it might
be worth looking at a similar solution here. That would allow CPU, arch
and board specific 'cleanups' to be dynamically defined without having to
do a whole bunch of background plumbing...

Regards,

Graeme

[1] http://patchwork.ozlabs.org/patch/110316/ and
[2] http://patchwork.ozlabs.org/patch/110515/


More information about the U-Boot mailing list