common: add an option to skip DM pre-relocation

For some platforms like Qualcomm, it isn't necessary to perform a full
DM init and scan prior to relocation, it's also particularly slow since
it runs with dcache disabled and prior to building the livetree.

The only device which needs to be probed pre-reloc is the serial
port (otherwise U-Boot will panic), however this can be found through
/chosen/stdout-path.

Therefore we can avoid scanning the entire FDT and binding devices,
instead just binding the serial port and clock driver on-demand.

This decreases the total time from power on to reaching the interactive
U-Boot shell be about 50% (from ~2.8s to 1.8s).

Signed-off-by: Casey Connolly <casey.connolly@linaro.org>
This commit is contained in:
Casey Connolly
2026-04-01 16:15:18 +02:00
committed by Tom Rini
parent 968164b686
commit f5e96fdffc
2 changed files with 22 additions and 1 deletions

View File

@@ -814,7 +814,16 @@ static int initf_dm(void)
return 0;
bootstage_start(BOOTSTAGE_ID_ACCUM_DM_F, "dm_f");
ret = dm_init_and_scan(true);
/*
* If SKIP_EARLY_DM is set then we just create an empty device
* model, the serial port will still be bound later through
* serial_find_console_or_panic() via /chosen/stdout-path
*/
if (!CONFIG_IS_ENABLED(SKIP_EARLY_DM))
ret = dm_init_and_scan(true);
else
ret = dm_init(false);
if (ret)
return ret;