[U-Boot] [PATCH] Add ability for arch code to make changes before we boot

Wolfgang Denk wd at denx.de
Wed Aug 26 22:46:43 CEST 2009


Dear Kumar Gala,

In message <1250276442-28463-1-git-send-email-galak at kernel.crashing.org> you wrote:
> Added a arch_preboot() function that cpu specific code can implement to
> allow for various modifications to the state of the machine right before
> we boot.  This can be useful to setup register state to a specific
> configuration.
> 
> Signed-off-by: Kumar Gala <galak at kernel.crashing.org>
> ---
>  common/cmd_bootm.c |   10 ++++++++++
>  1 files changed, 10 insertions(+), 0 deletions(-)
> 
> diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
> index 86c8122..766889a 100644
> --- a/common/cmd_bootm.c
> +++ b/common/cmd_bootm.c
> @@ -166,6 +166,13 @@ void __arch_lmb_reserve(struct lmb *lmb)
>  }
>  void arch_lmb_reserve(struct lmb *lmb) __attribute__((weak, alias("__arch_lmb_reserve")));
>  
> +/* Allow for arch specific config before we boot */
> +void __arch_preboot(void)

As this is only used when booting an OS (and not for example when
starting a standalone program) we should probably write:

	/* Allow for arch specific code before booting the OS */
	void __arch_preboot_os()
	...

> +{
> +	/* please define platform specific arch_preboot() */
> +}
> +void arch_preboot(void) __attribute__((weak, alias("__arch_preboot")));
> +
>  #if defined(__ARM__)
>    #define IH_INITRD_ARCH IH_ARCH_ARM
>  #elif defined(__avr32__)
> @@ -543,6 +550,7 @@ int do_bootm_subcommand (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
>  			break;
>  		case BOOTM_STATE_OS_GO:

Hm... maybe this could / should be handled in BOOTM_STATE_OS_PREP
state? 

>  			disable_interrupts();
> +			arch_preboot();

And maybe we should mode disable_interrupts() into the default
implementation of arch_preboot_os() ?

>  			boot_fn(BOOTM_STATE_OS_GO, argc, argv, &images);
>  			break;
>  	}
> @@ -673,6 +681,8 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
>  		return 1;
>  	}
>  
> +	arch_preboot();
> +
>  	boot_fn(0, argc, argv, &images);

But this would change behaviour here. Eventually to the better?

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Niklaus Wirth has lamented that, whereas Europeans pronounce his name
correctly  (Ni-klows  Virt),  Americans  invariably  mangle  it  into
(Nick-les  Worth).  Which  is to say that Europeans call him by name,
but Americans call him by value.


More information about the U-Boot mailing list