serial: avoid redundant early UART initialization

When DEBUG_UART and SKIP_EARLY_DM are enabled, the serial console
is still probed before relocation even though DEBUG_UART already
configures the UART and provides early console output. The debug
UART configuration is sufficient until relocation, making full
serial driver initialization at this stage unnecessary.
Furthermore, the initialization is slow since it runs with dcache
disabled and is repeated again after relocation.

Skip pre-relocation serial probing in this configuration and
defer full UART initialization until after relocation. Update the
GENI UART probe logic accordingly.

This removes redundant UART initialization and improves boot
performance.

Signed-off-by: Aswin Murugan <aswin.murugan@oss.qualcomm.com>
This commit is contained in:
Aswin Murugan
2026-07-28 12:30:55 -06:00
committed by Tom Rini
parent 1a86b8764f
commit 8eb3f9ef9e
2 changed files with 13 additions and 2 deletions
+10
View File
@@ -190,6 +190,16 @@ int fetch_baud_from_dtb(void)
int serial_init(void)
{
#if CONFIG_IS_ENABLED(SERIAL_PRESENT)
/*
* Skip serial device probe before relocation if debug UART is enabled
* and early DM is skipped. Debug UART will handle console output during
* early boot. Full serial initialization happens in serial_initialize()
* after relocation.
*/
if ((CONFIG_IS_ENABLED(DEBUG_UART) && CONFIG_IS_ENABLED(SKIP_EARLY_DM)) &&
!(gd->flags & GD_FLG_RELOC))
return 0;
serial_find_console_or_panic();
if (gd->cur_serial_dev)
gd->flags |= GD_FLG_SERIAL_READY;
+3 -2
View File
@@ -555,8 +555,9 @@ static int msm_serial_probe(struct udevice *dev)
if (ret < 0)
return ret;
/* No need to reinitialize the UART after relocation */
if (gd->flags & GD_FLG_RELOC)
/* Skip re-init after relocation if debug UART and early DM skip are not enabled */
if ((!CONFIG_IS_ENABLED(DEBUG_UART) && !CONFIG_IS_ENABLED(SKIP_EARLY_DM)) &&
(gd->flags & GD_FLG_RELOC))
return 0;
geni_serial_init(dev);