arm: Move bootstage record for board_init_f() to after arch_cpu_init()
The timer may be inited in arch_cpu_init() so it is not safe to make a
bootstage mark before this is called. Arrange the code to fix this.
Note: The question was raised as to why we don't keep all archs in sync.
PowerPC doesn't have specific bootstage markers at present (although it
does use boot progress). I hope that the generic board series will solve
this problem in general, but in the meantime this is a real problem, and
only in ARM.
We now get a correct time for board_init_f:
Timer summary in microseconds:
       Mark    Elapsed  Stage
          0          0  reset
    100,000    100,000  spl_start
    848,530    748,530  board_init_f
    907,301     58,771  board_init_r
    910,478      3,177  board_init
Signed-off-by: Simon Glass <sjg@chromium.org>
			
			
This commit is contained in:
		
							parent
							
								
									fe34f8dc8c
								
							
						
					
					
						commit
						2f8d8d6b3a
					
				|  | @ -232,8 +232,17 @@ int __power_init_board(void) | |||
| int power_init_board(void) | ||||
| 	__attribute__((weak, alias("__power_init_board"))); | ||||
| 
 | ||||
| 	/* Record the board_init_f() bootstage (after arch_cpu_init()) */ | ||||
| static int mark_bootstage(void) | ||||
| { | ||||
| 	bootstage_mark_name(BOOTSTAGE_ID_START_UBOOT_F, "board_init_f"); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| init_fnc_t *init_sequence[] = { | ||||
| 	arch_cpu_init,		/* basic arch cpu dependent setup */ | ||||
| 	mark_bootstage, | ||||
| #ifdef CONFIG_OF_CONTROL | ||||
| 	fdtdec_check_fdt, | ||||
| #endif | ||||
|  | @ -277,8 +286,6 @@ void board_init_f(ulong bootflag) | |||
| 	void *new_fdt = NULL; | ||||
| 	size_t fdt_size = 0; | ||||
| 
 | ||||
| 	bootstage_mark_name(BOOTSTAGE_ID_START_UBOOT_F, "board_init_f"); | ||||
| 
 | ||||
| 	memset((void *)gd, 0, sizeof(gd_t)); | ||||
| 
 | ||||
| 	gd->mon_len = _bss_end_ofs; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue