[U-Boot] RFC: Aligning arch initialisation sequences

Reinhard Meyer u-boot at emk-elektronik.de
Sun Nov 14 14:46:30 CET 2010


Dear Wolfgang Denk,

To make it crystal clear now, and put the complete context:

That simple change would rid us of all alignment concerns:
Setting stack to end of initial storage will certainly
be aligned, and the auto_gd will be aligned as the
toolchain deems necessary.

We would not need GENERATED_GBL_DATA_SIZE anymore.

The auto_gd space on stack will be valid even into the call
to relocate_code.

> void board_init_f (ulong bootflag)
> {
> 	bd_t *bd;
> 	init_fnc_t **init_fnc_ptr;
> 	gd_t *id;
> 	ulong addr, addr_sp;
> +	gd_t auto_gd;
>
> 	/* Pointer is writable since we allocated a register for it */
> -	gd = (gd_t *) (CONFIG_SYS_INIT_SP_ADDR);
> +	gd =&auto_gd;
> 	/* compiler optimization barrier needed for GCC>= 3.4 */
> /* Q: why is that needed anyway ??? */
> 	__asm__ __volatile__("": : :"memory");
>
> 	memset ((void*)gd, 0, sizeof (gd_t));
> ....
> 	debug ("relocation Offset is: %08lx\n", gd->reloc_off);
> 	memcpy (id, (void *)gd, sizeof (gd_t));
>
> 	relocate_code (addr_sp, id, addr);
>
> 	/* NOTREACHED - relocate_code() does not return */
> }
>
> This, and setting CONFIG_SYS_INIT_SP_ADDR to an aligned value in
> initial storage (SRAM, pinned down Cache, or other) removes alot
> of the headache about making stuff aligned.
>

This three line change DOES NOT propose any different method
of handling gd other then it is currently done.

It is ONLY a more elegant way to allocate the pre-relocation
storage for gd.

Best Regards,
Reinhard


More information about the U-Boot mailing list