Dear Wolfgang Denk,
> Yes, and this is correct. board_init_f != board_early_init_f

To make it crystal clear now:

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.

Best Regards,
Reinhard
_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to