serial: Allow serial to be absent in TPL
authorSimon Glass <sjg@chromium.org>
Mon, 1 Oct 2018 18:22:20 +0000 (12:22 -0600)
committerSimon Glass <sjg@chromium.org>
Tue, 9 Oct 2018 10:40:27 +0000 (04:40 -0600)
At present this option applies to SPL, but it should be available in TPL
also, and separately. Change to using CONFIG_IS_ENABLED(), add a new
Kconfig option and fix up hang().

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/serial/Kconfig
drivers/serial/serial-uclass.c
lib/hang.c

index 83f8c94d028ccc036ec5121f16dea37ca3146c35..597db4b9cbba9b644edeedcf01f9483cff23ff47 100644 (file)
@@ -53,6 +53,16 @@ config SPL_SERIAL_PRESENT
          This option enables the full UART in SPL, so if is it disabled,
          the full UART driver will be omitted, thus saving space.
 
+config TPL_SERIAL_PRESENT
+       bool "Provide a serial driver in TPL"
+       depends on DM_SERIAL
+       default y
+       help
+         In very space-constrained devices even the full UART driver is too
+         large. In this case the debug UART can still be used in some cases.
+         This option enables the full UART in TPL, so if is it disabled,
+         the full UART driver will be omitted, thus saving space.
+
 # Logic to allow us to use the imply keyword to set what the default port
 # should be.  The default is otherwise 1.
 config CONS_INDEX_0
index ffdcae0931869e8e7b8b488613aa79015c38229d..e50f0aa851061fd2a1f00fa2f5225a699bf55f5e 100644 (file)
@@ -26,6 +26,7 @@ static const unsigned long baudrate_table[] = CONFIG_SYS_BAUDRATE_TABLE;
 #error "Serial is required before relocation - define CONFIG_$(SPL_)SYS_MALLOC_F_LEN to make this work"
 #endif
 
+#if CONFIG_IS_ENABLED(SERIAL_PRESENT)
 static int serial_check_stdout(const void *blob, struct udevice **devp)
 {
        int node;
@@ -150,12 +151,15 @@ static void serial_find_console_or_panic(void)
        panic_str("No serial driver found");
 #endif
 }
+#endif /* CONFIG_SERIAL_PRESENT */
 
 /* Called prior to relocation */
 int serial_init(void)
 {
+#if CONFIG_IS_ENABLED(SERIAL_PRESENT)
        serial_find_console_or_panic();
        gd->flags |= GD_FLG_SERIAL_READY;
+#endif
 
        return 0;
 }
index bf56f4c662ab508d236ef3c9b3ea628dd9691671..c5a78694be6f8217c45cb8cef8d2d081b2e433f0 100644 (file)
@@ -20,8 +20,9 @@
  */
 void hang(void)
 {
-#if !defined(CONFIG_SPL_BUILD) || (defined(CONFIG_SPL_LIBCOMMON_SUPPORT) && \
-               defined(CONFIG_SPL_SERIAL_SUPPORT))
+#if !defined(CONFIG_SPL_BUILD) || \
+               (CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT) && \
+                CONFIG_IS_ENABLED(SERIAL_SUPPORT))
        puts("### ERROR ### Please RESET the board ###\n");
 #endif
        bootstage_error(BOOTSTAGE_ID_NEED_RESET);