Skip to content
Snippets Groups Projects
board_f.c 24.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • #ifdef CONFIG_X86
    /*
     * For now this code is only used on x86.
     *
     * init_sequence_f_r is the list of init functions which are run when
     * U-Boot is executing from Flash with a semi-limited 'C' environment.
     * The following limitations must be considered when implementing an
     * '_f_r' function:
     *  - 'static' variables are read-only
     *  - Global Data (gd->xxx) is read/write
     *
     * The '_f_r' sequence must, as a minimum, copy U-Boot to RAM (if
     * supported).  It _should_, if possible, copy global data to RAM and
     * initialise the CPU caches (to speed up the relocation process)
     *
     * NOTE: At present only x86 uses this route, but it is intended that
     * all archs will move to this when generic relocation is implemented.
     */
    static init_fnc_t init_sequence_f_r[] = {
    	init_cache_f_r,
    	copy_uboot_to_ram,
    	clear_bss,
    	do_elf_reloc_fixups,
    
    	NULL,
    };
    
    void board_init_f_r(void)
    {
    	if (initcall_run_list(init_sequence_f_r))
    		hang();
    
    	/*
    	 * U-Boot has been copied into SDRAM, the BSS has been cleared etc.
    	 * Transfer execution from Flash to RAM by calculating the address
    	 * of the in-RAM copy of board_init_r() and calling it
    	 */
    	(board_init_r + gd->reloc_off)(gd, gd->relocaddr);
    
    	/* NOTREACHED - board_init_r() does not return */
    	hang();
    }
    #endif /* CONFIG_X86 */