[PATCH RFC 02/40] common: add an option to skip DM pre-relocation
Casey Connolly
casey.connolly at linaro.org
Thu Mar 19 21:56:24 CET 2026
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 at linaro.org>
---
Kconfig | 12 ++++++++++++
common/board_f.c | 11 ++++++++++-
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/Kconfig b/Kconfig
index ce25ea24a60f..2f7677f47f16 100644
--- a/Kconfig
+++ b/Kconfig
@@ -473,8 +473,20 @@ config SKIP_RELOCATE
help
Skips relocation of U-Boot allowing for systems that have extremely
limited RAM to run U-Boot.
+config SKIP_EARLY_DM
+ bool "Skips initialising device model pre-relocation"
+ help
+ Enable this option to skip scanning and probing devices prior to
+ U-Boot relocation (during board_f). Unless console support is disabled
+ a serial port is still required, however this can be found through
+ /chosen/stdout-path in FDT. If the serial port relies on other devices
+ like clocks these will also be bound and probed on demand.
+
+ This can speed up time to interactive console by about 50%, particularly
+ when combined with OF_LIVE.
+
endif # EXPERT
config PHYS_64BIT
bool "64bit physical address support"
diff --git a/common/board_f.c b/common/board_f.c
index df2b0dc899bf..2713438cc18f 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -813,9 +813,18 @@ static int initf_dm(void)
if (!CONFIG_IS_ENABLED(SYS_MALLOC_F))
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;
ret = dm_autoprobe();
--
2.51.0
More information about the U-Boot
mailing list