linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Paul Burton <paul.burton@imgtec.com>
To: <linux-mips@linux-mips.org>
Cc: Ralf Baechle <ralf@linux-mips.org>,
	Paul Burton <paul.burton@imgtec.com>, Tejun Heo <tj@kernel.org>,
	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
	Tony Luck <tony.luck@intel.com>, Jiri Slaby <jslaby@suse.cz>,
	Daniel Vetter <daniel.vetter@ffwll.ch>,
	Russell King <rmk+kernel@arm.linux.org.uk>,
	Emil Velikov <emil.l.velikov@gmail.com>,
	Ivan Delalande <colona@arista.com>,
	Thierry Reding <treding@nvidia.com>,
	Petr Mladek <pmladek@suse.com>, <linux-kernel@vger.kernel.org>,
	Geliang Tang <geliangtang@163.com>,
	Dave Young <dyoung@redhat.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	<devicetree@vger.kernel.org>, Rob Herring <robh+dt@kernel.org>,
	Frank Rowand <frowand.list@gmail.com>,
	Mathias Krause <minipli@googlemail.com>,
	Andrew Morton <akpm@linux-foundation.org>
Subject: [PATCH] console: Don't prefer first registered if DT specifies stdout-path
Date: Tue, 9 Aug 2016 13:50:10 +0100	[thread overview]
Message-ID: <20160809125010.14150-1-paul.burton@imgtec.com> (raw)

If a device tree specifies a preferred device for kernel console output
via the stdout-path or linux,stdout-path chosen node properties or the
stdout alias then the kernel ought to honor it & output the kernel
console to that device. As it stands, this isn't the case. Whilst we
parse the stdout-path properties & set an of_stdout variable from
of_alias_scan(), and use that from of_console_check() to determine
whether to add a console device as a preferred console whilst
registering it, we also prefer the first registered console if no other
has been selected at the time of its registration.

This means that if a console other than the one the device tree selects
via stdout-path is registered first, we will switch to using it & when
the stdout-path console is later registered the call to
add_preferred_console() via of_console_check() is too late to do
anything useful. In practice this seems to mean that we switch to the
dummy console device fairly early & see no further console output:

    Console: colour dummy device 80x25
    console [tty0] enabled
    bootconsole [ns16550a0] disabled

Fix this by not automatically preferring the first registered console if
one is specified by the device tree. This allows consoles to be
registered but not enabled, and once the driver for the console selected
by stdout-path calls of_console_check() the driver will be added to the
list of preferred consoles before any other console has been enabled.
When that console is then registered via register_console() it will be
enabled as expected.

Signed-off-by: Paul Burton <paul.burton@imgtec.com>

---

 drivers/of/base.c       |  2 ++
 include/linux/console.h |  6 ++++++
 kernel/printk/printk.c  | 13 ++++++++++++-
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/drivers/of/base.c b/drivers/of/base.c
index ebf84e3..2ea6877 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -1974,6 +1974,8 @@ void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align))
 			name = of_get_property(of_aliases, "stdout", NULL);
 		if (name)
 			of_stdout = of_find_node_opts_by_path(name, &of_stdout_options);
+		if (of_stdout)
+			console_set_by_of();
 	}
 
 	if (!of_aliases)
diff --git a/include/linux/console.h b/include/linux/console.h
index 98c8615..71cc04f 100644
--- a/include/linux/console.h
+++ b/include/linux/console.h
@@ -166,6 +166,12 @@ static inline void console_sysfs_notify(void)
 #endif
 extern bool console_suspend_enabled;
 
+#ifdef CONFIG_OF
+extern void console_set_by_of(void);
+#else
+static inline void console_set_by_of(void);
+#endif
+
 /* Suspend and resume console messages over PM events */
 extern void suspend_console(void);
 extern void resume_console(void);
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 60cdf63..f1f03ca 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -149,6 +149,17 @@ static int preferred_console = -1;
 int console_set_on_cmdline;
 EXPORT_SYMBOL(console_set_on_cmdline);
 
+#ifdef CONFIG_OF
+static bool of_specified_console;
+
+void console_set_by_of(void)
+{
+	of_specified_console = true;
+}
+#else
+# define of_specified_console false
+#endif
+
 /* Flag: console code may call schedule() */
 static int console_may_schedule;
 
@@ -2509,7 +2520,7 @@ void register_console(struct console *newcon)
 	 *	didn't select a console we take the first one
 	 *	that registers here.
 	 */
-	if (preferred_console < 0) {
+	if (preferred_console < 0 && !of_specified_console) {
 		if (newcon->index < 0)
 			newcon->index = 0;
 		if (newcon->setup == NULL ||
-- 
2.9.2

             reply	other threads:[~2016-08-09 12:50 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-09 12:50 Paul Burton [this message]
2016-08-09 14:12 ` [PATCH] console: Don't prefer first registered if DT specifies stdout-path kbuild test robot
2016-08-09 15:10 ` kbuild test robot
2016-08-09 15:19 ` [PATCH v2] " Paul Burton
2016-08-09 21:57   ` Andrew Morton
2016-10-16 18:07   ` Andreas Schwab
2016-10-17 10:33     ` Paul Burton
2016-10-17 17:39       ` Andreas Schwab
2016-10-18  9:18         ` [PATCH] console: use first console if stdout-path device doesn't appear Paul Burton
2016-10-18 18:58           ` Andreas Schwab
2016-10-30  9:46             ` Andreas Schwab
2016-10-31  5:28               ` Michael Ellerman
2016-10-31 12:14                 ` [PATCH v2] " Paul Burton
2016-10-31 15:50                   ` Paul Burton
2016-10-31 19:21                     ` Larry Finger
2016-10-31 23:09                     ` Sergey Senozhatsky
2016-10-31 23:31                       ` Larry Finger
2016-11-03 12:57                         ` [PATCH v3] " Paul Burton
2016-11-03 17:40                           ` Sergey Senozhatsky
2016-11-03 21:17                             ` Paul Burton
2016-11-04 15:44                               ` Sergey Senozhatsky
2016-11-04  8:05                           ` Andreas Schwab
     [not found]                           ` <8737j3n18r.fsf@concordia.ellerman.id.au>
2016-11-07  9:18                             ` Paul Burton
2016-11-07 15:26                               ` Larry Finger
2016-11-07 17:21                                 ` Paul Burton
2016-11-07 18:27                                   ` Larry Finger
2016-11-08 13:21                                     ` revert 05fd007e46296afb (was: [PATCH v3] console: use first console if stdout-path device doesn't appear) Sergey Senozhatsky
2016-11-03 13:04                         ` [PATCH v2] console: use first console if stdout-path device doesn't appear Paul Burton
2016-11-01  4:39                       ` Michael Ellerman
2016-10-31 15:58                   ` Larry Finger
2016-10-31 12:23                 ` [PATCH] " Paul Burton
2016-10-18  9:21         ` [PATCH v2] console: Don't prefer first registered if DT specifies stdout-path Paul Burton

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=20160809125010.14150-1-paul.burton@imgtec.com \
    --to=paul.burton@imgtec.com \
    --cc=akpm@linux-foundation.org \
    --cc=colona@arista.com \
    --cc=daniel.vetter@ffwll.ch \
    --cc=devicetree@vger.kernel.org \
    --cc=dyoung@redhat.com \
    --cc=emil.l.velikov@gmail.com \
    --cc=frowand.list@gmail.com \
    --cc=geliangtang@163.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jslaby@suse.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@linux-mips.org \
    --cc=minipli@googlemail.com \
    --cc=pmladek@suse.com \
    --cc=ralf@linux-mips.org \
    --cc=rmk+kernel@arm.linux.org.uk \
    --cc=robh+dt@kernel.org \
    --cc=sergey.senozhatsky@gmail.com \
    --cc=tj@kernel.org \
    --cc=tony.luck@intel.com \
    --cc=treding@nvidia.com \
    /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).