Browse Source

serial: Allow serial to be absent in TPL

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>
Simon Glass 6 years ago
parent
commit
aa0ffe8eb9
3 changed files with 17 additions and 2 deletions
  1. 10 0
      drivers/serial/Kconfig
  2. 4 0
      drivers/serial/serial-uclass.c
  3. 3 2
      lib/hang.c

+ 10 - 0
drivers/serial/Kconfig

@@ -53,6 +53,16 @@ config SPL_SERIAL_PRESENT
 	  This option enables the full UART in SPL, so if is it disabled,
 	  This option enables the full UART in SPL, so if is it disabled,
 	  the full UART driver will be omitted, thus saving space.
 	  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
 # Logic to allow us to use the imply keyword to set what the default port
 # should be.  The default is otherwise 1.
 # should be.  The default is otherwise 1.
 config CONS_INDEX_0
 config CONS_INDEX_0

+ 4 - 0
drivers/serial/serial-uclass.c

@@ -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"
 #error "Serial is required before relocation - define CONFIG_$(SPL_)SYS_MALLOC_F_LEN to make this work"
 #endif
 #endif
 
 
+#if CONFIG_IS_ENABLED(SERIAL_PRESENT)
 static int serial_check_stdout(const void *blob, struct udevice **devp)
 static int serial_check_stdout(const void *blob, struct udevice **devp)
 {
 {
 	int node;
 	int node;
@@ -150,12 +151,15 @@ static void serial_find_console_or_panic(void)
 	panic_str("No serial driver found");
 	panic_str("No serial driver found");
 #endif
 #endif
 }
 }
+#endif /* CONFIG_SERIAL_PRESENT */
 
 
 /* Called prior to relocation */
 /* Called prior to relocation */
 int serial_init(void)
 int serial_init(void)
 {
 {
+#if CONFIG_IS_ENABLED(SERIAL_PRESENT)
 	serial_find_console_or_panic();
 	serial_find_console_or_panic();
 	gd->flags |= GD_FLG_SERIAL_READY;
 	gd->flags |= GD_FLG_SERIAL_READY;
+#endif
 
 
 	return 0;
 	return 0;
 }
 }

+ 3 - 2
lib/hang.c

@@ -20,8 +20,9 @@
  */
  */
 void hang(void)
 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");
 	puts("### ERROR ### Please RESET the board ###\n");
 #endif
 #endif
 	bootstage_error(BOOTSTAGE_ID_NEED_RESET);
 	bootstage_error(BOOTSTAGE_ID_NEED_RESET);