summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAswin Murugan <[email protected]>2026-07-15 23:00:00 +0530
committerTom Rini <[email protected]>2026-07-28 12:30:55 -0600
commit8eb3f9ef9e0de0dcea4aa85d770d6aebdb577f4a (patch)
tree973e7f793d829176ad8614f09b5a358e0a1dddb3
parent1a86b8764f8fc13599faf247b4d2f78b4fc6cd3d (diff)
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 <[email protected]>
-rw-r--r--drivers/serial/serial-uclass.c10
-rw-r--r--drivers/serial/serial_msm_geni.c5
2 files changed, 13 insertions, 2 deletions
diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c
index 7b381ca12a0..9be2ad270ad 100644
--- a/drivers/serial/serial-uclass.c
+++ b/drivers/serial/serial-uclass.c
@@ -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;
diff --git a/drivers/serial/serial_msm_geni.c b/drivers/serial/serial_msm_geni.c
index ae4015e0fdc..ff91e0018fa 100644
--- a/drivers/serial/serial_msm_geni.c
+++ b/drivers/serial/serial_msm_geni.c
@@ -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);