From: Prarit Bhargava <prarit@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: Prarit Bhargava <prarit@redhat.com>,
Mark Salter <msalter@redhat.com>, Al Stone <ahs3@redhat.com>,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
Len Brown <len.brown@intel.com>, Pavel Machek <pavel@ucw.cz>,
x86@kernel.org, Petr Mladek <pmladek@suse.com>,
Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
Steven Rostedt <rostedt@goodmis.org>,
Kees Cook <keescook@chromium.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-pm@vger.kernel.org
Subject: [PATCH] console: Add console=auto option
Date: Thu, 16 Aug 2018 10:10:55 -0400 [thread overview]
Message-ID: <20180816141055.451-1-prarit@redhat.com> (raw)
ACPI may contain an SPCR table that defines a default system console.
On ARM if the table is present then the SPCR console is enabled by default.
On x86 the SPCR console is used if 'earlycon' (no parameters) is
specified as a kernel parameter and is used only as the early console.
To use the SPCR data as a console a user must boot with 'earlycon',
grep logs & specify a console= kernel parameter, and then reboot again.
Add 'console=auto' that enables a firmware or hardware console, and on
x86 enable the SPCR console if 'console=auto' is specified.
Tested on systems with and without an ACPI SPCR. The following kernel
parameters were also tested:
console=ttyS0,115200 works
earlycon works (early console only)
console=auto works (full console as expected)
no console or earlycon arguments works (no output as expected)
Signed-off-by: Prarit Bhargava <prarit@redhat.com>
Cc: Mark Salter <msalter@redhat.com>
Cc: Al Stone <ahs3@redhat.com>
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: Len Brown <len.brown@intel.com>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: x86@kernel.org
Cc: Petr Mladek <pmladek@suse.com>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Kees Cook <keescook@chromium.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: linux-pm@vger.kernel.org
---
Documentation/admin-guide/kernel-parameters.txt | 1 +
arch/x86/kernel/acpi/boot.c | 5 +++++
include/linux/console.h | 1 +
kernel/printk/printk.c | 10 ++++++++++
4 files changed, 17 insertions(+)
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index a32f2a126791..dd057224f33b 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -635,6 +635,7 @@
hvc<n> Use the hypervisor console device <n>. This is for
both Xen and PowerPC hypervisors.
+ auto [X86] Enable ACPI SPCR console
If the device connected to the port is not a TTY but a braille
device, prepend "brl," before the device type, for instance
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index 3b20607d581b..fb2616ba3b21 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -1771,3 +1771,8 @@ void __init arch_reserve_mem_area(acpi_physical_address addr, size_t size)
e820__range_add(addr, size, E820_TYPE_ACPI);
e820__update_table_print();
}
+
+void __init arch_console_setup(void)
+{
+ acpi_parse_spcr(false, true);
+}
diff --git a/include/linux/console.h b/include/linux/console.h
index dfd6b0e97855..b802f62289a9 100644
--- a/include/linux/console.h
+++ b/include/linux/console.h
@@ -181,6 +181,7 @@ extern int is_console_locked(void);
extern int braille_register_console(struct console *, int index,
char *console_options, char *braille_options);
extern int braille_unregister_console(struct console *);
+int arch_console_setup(void);
#ifdef CONFIG_TTY
extern void console_sysfs_notify(void);
#else
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 247808333ba4..b74eba44183e 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -2078,6 +2078,11 @@ static int __init console_msg_format_setup(char *str)
}
__setup("console_msg_format=", console_msg_format_setup);
+int __init __weak arch_console_setup(void)
+{
+ return 0;
+}
+
/*
* Set up a console. Called via do_early_param() in init/main.c
* for each "console=" parameter in the boot command line.
@@ -2088,6 +2093,11 @@ static int __init console_setup(char *str)
char *s, *options, *brl_options = NULL;
int idx;
+ if (!strcmp(str, "auto")) {
+ arch_console_setup();
+ return 1;
+ }
+
if (_braille_console_setup(&str, &brl_options))
return 1;
--
2.14.4
next reply other threads:[~2018-08-16 14:11 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-16 14:10 Prarit Bhargava [this message]
2018-08-16 15:09 ` [PATCH] console: Add console=auto option Greg Kroah-Hartman
2018-08-16 15:28 ` Prarit Bhargava
2018-08-16 15:33 ` Steven Rostedt
2018-08-16 17:23 ` Prarit Bhargava
2018-08-16 17:39 ` [PATCH v2] " Prarit Bhargava
2018-08-17 8:19 ` Petr Mladek
2018-08-17 10:26 ` Prarit Bhargava
2018-08-17 9:38 ` Sergey Senozhatsky
2018-08-17 10:36 ` Prarit Bhargava
2018-08-17 10:50 ` Sergey Senozhatsky
2018-08-17 11:06 ` Prarit Bhargava
2018-08-17 12:57 ` Petr Mladek
2018-08-29 12:54 ` Prarit Bhargava
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180816141055.451-1-prarit@redhat.com \
--to=prarit@redhat.com \
--cc=ahs3@redhat.com \
--cc=gregkh@linuxfoundation.org \
--cc=keescook@chromium.org \
--cc=len.brown@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=msalter@redhat.com \
--cc=pavel@ucw.cz \
--cc=pmladek@suse.com \
--cc=rjw@rjwysocki.net \
--cc=rostedt@goodmis.org \
--cc=sergey.senozhatsky@gmail.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).