[U-Boot] what is the purpose of the "init_f" function pointer in struct post_test?

continuing my journey through u-boot POST code, and i can see the "init_f" function pointer here:
struct post_test { char *name; char *cmd; char *desc; int flags; int (*test) (int flags); int (*init_f) (void); <----- void (*reloc) (void); unsigned long testid; };
but what *specific* issue was it introduced to solve?
i can see over in common/board_f.c the sequence of init routines, including this snippet:
#if defined(CONFIG_ARM) || defined(CONFIG_X86) || defined(CONFIG_NDS32) || \ defined(CONFIG_MICROBLAZE) || defined(CONFIG_AVR32) dram_init, /* configure available RAM banks */ #endif #if defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_M68K) init_func_ram, #endif #ifdef CONFIG_POST post_init_f, <----- #endif INIT_FUNC_WATCHDOG_RESET #if defined(CONFIG_SYS_DRAM_TEST) testdram, #endif /* CONFIG_SYS_DRAM_TEST */ INIT_FUNC_WATCHDOG_RESET
#ifdef CONFIG_POST init_post, #endif
so, first, it seems clear that those callbacks are meant to be invoked immediately after configuring RAM but before testing it. and over in post/post.c, we have:
int post_init_f(void) { int res = 0; unsigned int i;
for (i = 0; i < post_list_size; i++) { struct post_test *test = post_list + i;
if (test->init_f && test->init_f()) res = -1; }
gd->post_init_f_time = post_time_ms(0); if (!gd->post_init_f_time) printf("%s: post_time_ms not implemented\n", __FILE__);
return res; }
so if any tests have that pointer set, the corresponding routine will be invoked.
so i can see that the post_init_f() routine is useful for setting the start time of these tests (if, in fact, there are any), but i'm still unclear on the value of allowing POST tests to register a routine to be invoked at *precisely* that point in the startup.
what is so magical about allowing POST test routines at that exact point?
rday
participants (1)
-
Robert P. J. Day