From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: [RESEND][PATCH 1/2] console: add new CONSOLE_ACTIVATE_ALL_FALLBACK option
Date: Fri, 26 Jul 2024 14:26:22 +0200 [thread overview]
Message-ID: <20240726122623.3566935-1-a.fatoum@pengutronix.de> (raw)
We already have three CONSOLE_ACTIVATE options and every one of them has
drawbacks:
- ACTIVATE_ALL: May write barebox log to external devices like MCUs
that don't expect it
- ACTIVATE_FIRST: Not applicable for most systems that probe from
device tree, where the order of probe is not necessarily fixed,
so what console is first may change over updates
- ACTIVATE_NONE: has a misleading name and may leave the user without
any consoles at all if nothing else activates a console
Let's add a new option and make it the default, which avoids all these
issues: Like ACTIVATE_NONE, it expects board code, DT or environment to
enable a console and if none of them do it falls back to activating all
consoles, so the user isn't kept in the dark with an error instructing
the user to fix this.
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
Sent out second patch only by mistake instead of both...
---
common/Kconfig | 19 ++++++++++++++++++-
common/console.c | 27 +++++++++++++++++++++++++++
2 files changed, 45 insertions(+), 1 deletion(-)
diff --git a/common/Kconfig b/common/Kconfig
index 31360892aeef..2dda5ce5743a 100644
--- a/common/Kconfig
+++ b/common/Kconfig
@@ -812,7 +812,7 @@ endchoice
choice
prompt "Console activation strategy"
depends on CONSOLE_FULL
- default CONSOLE_ACTIVATE_FIRST
+ default CONSOLE_ACTIVATE_ALL_FALLBACK
config CONSOLE_ACTIVATE_FIRST
bool
@@ -831,6 +831,23 @@ config CONSOLE_ACTIVATE_ALL
Only the first registered console will have the full startup
log though.
+config CONSOLE_ACTIVATE_ALL_FALLBACK
+ bool
+ prompt "activate all consoles as fallback"
+ help
+ This option is similar to CONFIG_CONSOLE_ACTIVATE_NONE in that it
+ leaves consoles disabled on startup. If by the end of barebox
+ startup, no consoles have been activated via board code, device
+ tree or environment, barebox will enable all registered consoles
+ as fallback, so the user has a chance to see output.
+
+ This will be indicated by a fat error, so the user knows that
+ the configuration needs to be fixed. If you don't see any
+ output at all, consider trying again after enabling
+ CONFIG_CONSOLE_ACTIVATE_ALL, so consoles are activated immediately
+ at registration time and/or with CONFIG_DEBUG_LL, so barebox output
+ is written even before console drivers were registered.
+
config CONSOLE_ACTIVATE_NONE
prompt "leave all consoles disabled"
bool
diff --git a/common/console.c b/common/console.c
index 73b4c4d4db01..e83a3e1e2d7f 100644
--- a/common/console.c
+++ b/common/console.c
@@ -450,6 +450,33 @@ int console_unregister(struct console_device *cdev)
}
EXPORT_SYMBOL(console_unregister);
+static int console_activate_all_fallback(void)
+{
+ int activate = CONSOLE_STDIOE;
+ struct console_device *cdev;
+
+ for_each_console(cdev) {
+ if (cdev->f_active & (CONSOLE_STDOUT | CONSOLE_STDERR))
+ return 0;
+ }
+
+ if (IS_ENABLED(CONFIG_CONSOLE_DISABLE_INPUT))
+ activate &= ~CONSOLE_STDIN;
+
+ for_each_console(cdev)
+ console_set_active(cdev, activate);
+
+ /*
+ * This is last resort, so the user is not kept in the dark.
+ * Writing to all consoles is a bad idea as the devices at the
+ * other side might get confused by it, thus the error log level.
+ */
+ pr_err("No consoles were activated. Activating all consoles as fallback!\n");
+
+ return 0;
+}
+postenvironment_initcall(console_activate_all_fallback);
+
static int getc_raw(void)
{
struct console_device *cdev;
--
2.39.2
next reply other threads:[~2024-07-26 12:27 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-26 12:26 Ahmad Fatoum [this message]
2024-07-26 12:26 ` [RESEND][PATCH 2/2] common: clarify help text for CONFIG_CONSOLE_ACTIVATE_* options Ahmad Fatoum
2024-07-30 8:09 ` [RESEND][PATCH 1/2] console: add new CONSOLE_ACTIVATE_ALL_FALLBACK option Sascha Hauer
2024-07-30 8:33 ` Ahmad Fatoum
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=20240726122623.3566935-1-a.fatoum@pengutronix.de \
--to=a.fatoum@pengutronix.de \
--cc=barebox@lists.infradead.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