dm: Make driver model available before board_init()
For some boards board_init() will change GPIOs, so we need to have driver model available before then. Adjust the board init to arrange this, but enable it for driver model only, just to be safe. This does create additional #ifdef logic, but it is safer than trying to make a pervasive change which may cause some boards to break. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
294b91a581
commit
9fb02491fe
@ -715,6 +715,15 @@ init_fnc_t init_sequence_r[] = {
|
||||
/* TODO: could x86/PPC have this also perhaps? */
|
||||
#ifdef CONFIG_ARM
|
||||
initr_caches,
|
||||
#endif
|
||||
initr_reloc_global_data,
|
||||
initr_barrier,
|
||||
initr_malloc,
|
||||
bootstage_relocate,
|
||||
#ifdef CONFIG_DM
|
||||
initr_dm,
|
||||
#endif
|
||||
#ifdef CONFIG_ARM
|
||||
board_init, /* Setup chipselects */
|
||||
#endif
|
||||
/*
|
||||
@ -726,16 +735,7 @@ init_fnc_t init_sequence_r[] = {
|
||||
#ifdef CONFIG_CLOCKS
|
||||
set_cpu_clk_info, /* Setup clock information */
|
||||
#endif
|
||||
initr_reloc_global_data,
|
||||
initr_barrier,
|
||||
initr_malloc,
|
||||
bootstage_relocate,
|
||||
#ifdef CONFIG_DM_SERIAL
|
||||
stdio_init,
|
||||
#endif
|
||||
#ifdef CONFIG_DM
|
||||
initr_dm,
|
||||
#endif
|
||||
stdio_init_tables,
|
||||
initr_serial,
|
||||
initr_announce,
|
||||
INIT_FUNC_WATCHDOG_RESET
|
||||
@ -821,9 +821,7 @@ init_fnc_t init_sequence_r[] = {
|
||||
*/
|
||||
initr_pci,
|
||||
#endif
|
||||
#ifndef CONFIG_DM_SERIAL
|
||||
stdio_init,
|
||||
#endif
|
||||
stdio_add_devices,
|
||||
initr_jumptable,
|
||||
#ifdef CONFIG_API
|
||||
initr_api,
|
||||
|
@ -215,7 +215,7 @@ int stdio_deregister(const char *devname)
|
||||
}
|
||||
#endif /* CONFIG_SYS_STDIO_DEREGISTER */
|
||||
|
||||
int stdio_init (void)
|
||||
int stdio_init_tables(void)
|
||||
{
|
||||
#if defined(CONFIG_NEEDS_MANUAL_RELOC)
|
||||
/* already relocated for current ARM implementation */
|
||||
@ -232,6 +232,11 @@ int stdio_init (void)
|
||||
/* Initialize the list */
|
||||
INIT_LIST_HEAD(&(devs.list));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int stdio_add_devices(void)
|
||||
{
|
||||
#ifdef CONFIG_SYS_I2C
|
||||
i2c_init_all();
|
||||
#else
|
||||
@ -265,5 +270,14 @@ int stdio_init (void)
|
||||
#ifdef CONFIG_CBMEM_CONSOLE
|
||||
cbmemc_init();
|
||||
#endif
|
||||
return (0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int stdio_init(void)
|
||||
{
|
||||
stdio_init_tables();
|
||||
stdio_add_devices();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -78,7 +78,29 @@ extern char *stdio_names[MAX_FILES];
|
||||
*/
|
||||
int stdio_register (struct stdio_dev * dev);
|
||||
int stdio_register_dev(struct stdio_dev *dev, struct stdio_dev **devp);
|
||||
int stdio_init (void);
|
||||
|
||||
/**
|
||||
* stdio_init_tables() - set up stdio tables ready for devices
|
||||
*
|
||||
* This does not add any devices, but just prepares stdio for use.
|
||||
*/
|
||||
int stdio_init_tables(void);
|
||||
|
||||
/**
|
||||
* stdio_add_devices() - Add stdio devices to the table
|
||||
*
|
||||
* This makes calls to all the various subsystems that use stdio, to make
|
||||
* them register with stdio.
|
||||
*/
|
||||
int stdio_add_devices(void);
|
||||
|
||||
/**
|
||||
* stdio_init() - Sets up stdio ready for use
|
||||
*
|
||||
* This calls stdio_init_tables() and stdio_add_devices()
|
||||
*/
|
||||
int stdio_init(void);
|
||||
|
||||
void stdio_print_current_devices(void);
|
||||
#ifdef CONFIG_SYS_STDIO_DEREGISTER
|
||||
int stdio_deregister(const char *devname);
|
||||
|
Loading…
Reference in New Issue
Block a user