summaryrefslogtreecommitdiffstats
path: root/common/console.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/console.c')
-rw-r--r--common/console.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/common/console.c b/common/console.c
index 329bc72493..aa9e3ce0f5 100644
--- a/common/console.c
+++ b/common/console.c
@@ -31,6 +31,8 @@
#include <kfifo.h>
#include <module.h>
#include <poller.h>
+#include <magicvar.h>
+#include <globalvar.h>
#include <linux/list.h>
#include <linux/stringify.h>
#include <debug_ll.h>
@@ -140,6 +142,26 @@ static void console_init_early(void)
initialized = CONSOLE_INITIALIZED_BUFFER;
}
+static void console_set_stdoutpath(struct console_device *cdev)
+{
+ int id;
+ char *str;
+
+ if (!cdev->linux_console_name)
+ return;
+
+ id = of_alias_get_id(cdev->dev->device_node, "serial");
+ if (id < 0)
+ return;
+
+ str = asprintf("console=%s%d,%dn8", cdev->linux_console_name,
+ id, cdev->baudrate);
+
+ globalvar_add_simple("linux.bootargs.console", str);
+
+ free(str);
+}
+
int console_register(struct console_device *newcdev)
{
struct device_d *dev = &newcdev->class_dev;
@@ -169,8 +191,10 @@ int console_register(struct console_device *newcdev)
activate = 1;
}
- if (newcdev->dev && of_device_is_stdout_path(newcdev->dev))
+ if (newcdev->dev && of_device_is_stdout_path(newcdev->dev)) {
activate = 1;
+ console_set_stdoutpath(newcdev);
+ }
list_add_tail(&newcdev->list, &console_list);
@@ -357,3 +381,6 @@ int ctrlc (void)
}
EXPORT_SYMBOL(ctrlc);
#endif /* ARCH_HAS_CTRC */
+
+BAREBOX_MAGICVAR_NAMED(global_linux_bootargs_console, global.linux.bootargs.console,
+ "console= argument for Linux from the linux,stdout-path property in /chosen node");