Arnd Bergmann wrote:
> A configuration that enables earlycon but not the core console
> code causes a link error:
>
> drivers/built-in.o: In function `setup_earlycon':
> drivers/tty/serial/earlycon.c:70: undefined reference to `uart_parse_earlycon'

CONFIG_SERIAL_EARLYCON should not require CONFIG_SERIAL_CORE_CONSOLE.
Move uart_parse_earlycon() and compile if either CONFIG_SERIAL_CORE_CONSOLE
or CONFIG_SERIAL_EARLYCON.

Reported-by: Arnd Bergmann <[email protected]>
Signed-off-by: Peter Hurley <[email protected]>
---

NB: The diff moves everything else around uart_parse_earlycon() :/

 drivers/tty/serial/serial_core.c | 90 ++++++++++++++++++++--------------------
 1 file changed, 46 insertions(+), 44 deletions(-)

diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index eec067d..4d42b13 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -1762,50 +1762,7 @@ static const struct file_operations uart_proc_fops = {
 };
 #endif
 
-#if defined(CONFIG_SERIAL_CORE_CONSOLE) || defined(CONFIG_CONSOLE_POLL)
-/**
- *     uart_console_write - write a console message to a serial port
- *     @port: the port to write the message
- *     @s: array of characters
- *     @count: number of characters in string to write
- *     @putchar: function to write character to port
- */
-void uart_console_write(struct uart_port *port, const char *s,
-                       unsigned int count,
-                       void (*putchar)(struct uart_port *, int))
-{
-       unsigned int i;
-
-       for (i = 0; i < count; i++, s++) {
-               if (*s == '\n')
-                       putchar(port, '\r');
-               putchar(port, *s);
-       }
-}
-EXPORT_SYMBOL_GPL(uart_console_write);
-
-/*
- *     Check whether an invalid uart number has been specified, and
- *     if so, search for the first available port that does have
- *     console support.
- */
-struct uart_port * __init
-uart_get_console(struct uart_port *ports, int nr, struct console *co)
-{
-       int idx = co->index;
-
-       if (idx < 0 || idx >= nr || (ports[idx].iobase == 0 &&
-                                    ports[idx].membase == NULL))
-               for (idx = 0; idx < nr; idx++)
-                       if (ports[idx].iobase != 0 ||
-                           ports[idx].membase != NULL)
-                               break;
-
-       co->index = idx;
-
-       return ports + idx;
-}
-
+#if defined(CONFIG_SERIAL_CORE_CONSOLE) || defined(CONFIG_SERIAL_EARLYCON)
 /**
  *     uart_parse_earlycon - Parse earlycon options
  *     @p:       ptr to 2nd field (ie., just beyond '<name>,')
@@ -1851,6 +1808,51 @@ int uart_parse_earlycon(char *p, unsigned char *iotype, 
unsigned long *addr,
        return 0;
 }
 EXPORT_SYMBOL_GPL(uart_parse_earlycon);
+#endif
+
+#if defined(CONFIG_SERIAL_CORE_CONSOLE) || defined(CONFIG_CONSOLE_POLL)
+/**
+ *     uart_console_write - write a console message to a serial port
+ *     @port: the port to write the message
+ *     @s: array of characters
+ *     @count: number of characters in string to write
+ *     @putchar: function to write character to port
+ */
+void uart_console_write(struct uart_port *port, const char *s,
+                       unsigned int count,
+                       void (*putchar)(struct uart_port *, int))
+{
+       unsigned int i;
+
+       for (i = 0; i < count; i++, s++) {
+               if (*s == '\n')
+                       putchar(port, '\r');
+               putchar(port, *s);
+       }
+}
+EXPORT_SYMBOL_GPL(uart_console_write);
+
+/*
+ *     Check whether an invalid uart number has been specified, and
+ *     if so, search for the first available port that does have
+ *     console support.
+ */
+struct uart_port * __init
+uart_get_console(struct uart_port *ports, int nr, struct console *co)
+{
+       int idx = co->index;
+
+       if (idx < 0 || idx >= nr || (ports[idx].iobase == 0 &&
+                                    ports[idx].membase == NULL))
+               for (idx = 0; idx < nr; idx++)
+                       if (ports[idx].iobase != 0 ||
+                           ports[idx].membase != NULL)
+                               break;
+
+       co->index = idx;
+
+       return ports + idx;
+}
 
 /**
  *     uart_parse_options - Parse serial port baud/parity/bits/flow control.
-- 
2.3.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to