linux-serial.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] serial: earlycon: Allow earlier DT scan is acpi=off
@ 2020-04-28 16:22 Daniel Thompson
  2020-04-30  0:40 ` Doug Anderson
  0 siblings, 1 reply; 3+ messages in thread
From: Daniel Thompson @ 2020-04-28 16:22 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Daniel Thompson, Jiri Slaby, Douglas Anderson, Sumit Garg,
	linux-serial, linux-kernel, patches

Currently if the kernel has support for ACPI SPCR parsing then earlycon
without arguments is processed later than the full earlycon=...
alternative.

If ACPI has been explicitly disabled on the kernel command line then
there is not need to defer since the ACPI code (both x86 and arm64)
will never actually run.

Or, put another way it allows lazy people to throw "acpi=off earlycon"
onto the command line of a DT systems and be confident the console will
start as early as possible without them having to lookup the driver
and address needed for a specific platform.

Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
---
 drivers/tty/serial/earlycon.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/drivers/tty/serial/earlycon.c b/drivers/tty/serial/earlycon.c
index 2ae9190b64bb..ebb648aacb47 100644
--- a/drivers/tty/serial/earlycon.c
+++ b/drivers/tty/serial/earlycon.c
@@ -215,6 +215,31 @@ int __init setup_earlycon(char *buf)
  */
 bool earlycon_acpi_spcr_enable __initdata;

+/*
+ * This takes a sneaky peek at other boot arguments (which may not have
+ * been parsed at this point in the boot) to check whether ACPI has
+ * been explicitly disabled. If it is explicitly disabled then there is
+ * no reason to defer initialization of the early console.
+ */
+static bool earlycon_check_for_acpi_off(void)
+{
+	static const char token[] = "acpi=off";
+	const char *arg;
+	char before, after;
+
+	arg = strstr(boot_command_line, token);
+	while (arg) {
+		before = arg == boot_command_line ? ' ' : arg[-1];
+		after = arg[sizeof(token)-1];
+		if (isspace(before) && (isspace(after) || after == '\0'))
+			return true;
+
+		arg = strstr(arg+1, token);
+	}
+
+	return false;
+}
+
 /* early_param wrapper for setup_earlycon() */
 static int __init param_setup_earlycon(char *buf)
 {
@@ -222,7 +247,8 @@ static int __init param_setup_earlycon(char *buf)

 	/* Just 'earlycon' is a valid param for devicetree and ACPI SPCR. */
 	if (!buf || !buf[0]) {
-		if (IS_ENABLED(CONFIG_ACPI_SPCR_TABLE)) {
+		if (IS_ENABLED(CONFIG_ACPI_SPCR_TABLE) &&
+		    !earlycon_check_for_acpi_off()) {
 			earlycon_acpi_spcr_enable = true;
 			return 0;
 		} else if (!buf) {
--
2.25.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-04-30 12:09 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-28 16:22 [PATCH] serial: earlycon: Allow earlier DT scan is acpi=off Daniel Thompson
2020-04-30  0:40 ` Doug Anderson
2020-04-30 12:09   ` Daniel Thompson

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).