arm: K3: common: Allow for early console functionality
authorAndreas Dannenberg <dannenberg@ti.com>
Thu, 15 Aug 2019 20:55:28 +0000 (15:55 -0500)
committerTom Rini <trini@konsulko.com>
Fri, 11 Oct 2019 14:07:33 +0000 (10:07 -0400)
Implement an early console functionality in SPL that can be used before
the main console is being brought up. This helps in situations where the
main console is dependent on System Firmware (SYSFW) being up and running,
which is usually not the case during the very early stages of boot. Using
this early console functionality will allow for an alternate serial port
to be used to support things like UART-based boot and early diagnostic
messages until the main console is ready to get activated.

Signed-off-by: Andreas Dannenberg <dannenberg@ti.com>
arch/arm/mach-k3/Kconfig
arch/arm/mach-k3/common.c
arch/arm/mach-k3/common.h

index de1c1cc73f377e5406b83fc5f1e66260815672fc..5583241943f34e9c1aa5c41452d71bb4acee500a 100644 (file)
@@ -66,6 +66,27 @@ config SYS_K3_BOOT_CORE_ID
        int
        default 16
 
+config K3_EARLY_CONS
+       bool "Activate to allow for an early console during SPL"
+       depends on SPL
+       help
+         Turn this option on to enable an early console functionality in SPL
+         before the main console is being brought up. This can be useful in
+         situations where the main console is dependent on System Firmware
+         (SYSFW) being up and running, which is usually not the case during
+         the very early stages of boot. Using this early console functionality
+         will allow for an alternate serial port to be used to support things
+         like UART-based boot and early diagnostic messages until the main
+         console is ready to get activated.
+
+config K3_EARLY_CONS_IDX
+       depends on K3_EARLY_CONS
+       int "Index of serial device to use for SPL early console"
+       default 1
+       help
+         Use this option to set the index of the serial device to be used
+         for the early console during SPL execution.
+
 config K3_LOAD_SYSFW
        bool
        depends on SPL
index c16afc654fb455eb1975015c5bf9d92b18e251dd..6c453b9af43fc62caf5cc5edf8f5047da14444bf 100644 (file)
@@ -27,6 +27,32 @@ struct ti_sci_handle *get_ti_sci_handle(void)
        return (struct ti_sci_handle *)ti_sci_get_handle_from_sysfw(dev);
 }
 
+DECLARE_GLOBAL_DATA_PTR;
+
+#ifdef CONFIG_K3_EARLY_CONS
+int early_console_init(void)
+{
+       struct udevice *dev;
+       int ret;
+
+       gd->baudrate = CONFIG_BAUDRATE;
+
+       ret = uclass_get_device_by_seq(UCLASS_SERIAL, CONFIG_K3_EARLY_CONS_IDX,
+                                      &dev);
+       if (ret) {
+               printf("Error getting serial dev for early console! (%d)\n",
+                      ret);
+               return ret;
+       }
+
+       gd->cur_serial_dev = dev;
+       gd->flags |= GD_FLG_SERIAL_READY;
+       gd->have_console = 1;
+
+       return 0;
+}
+#endif
+
 #ifdef CONFIG_SYS_K3_SPL_ATF
 void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
 {
index ac7e80d9af21f274eaeb294b18c72d61841d9a4e..ab68e14de8bef6b4ff9b2a482af75751787f3a21 100644 (file)
@@ -9,3 +9,4 @@
 #include <asm/armv7_mpu.h>
 
 void setup_k3_mpu_regions(void);
+int early_console_init(void);