On Sat, Nov 05, 2016 at 04:11:11PM +0100, Christian Zigotzky wrote:
After your commit "console: don't prefer first registered if DT specifies
stdout-path" [1] we couldn't see any kernel boot messages anymore. I
restored the old code and after that I was able to see the messages again.
System: Nemo board with P.A. Semi PA6T PowerPC CPU
I understand your idea of this patch but unfortunately it doesn't work with
our system. There isn't a possibility to modify the DT.
I faced the same issue today with PowerBook G4.
/sys/firmware/devicetree/base/chosen # hexdump -C linux,stdout-path
00000000 2f 70 63 69 40 66 30 30 30 30 30 30 30 2f 4e 56 |/pci@f0000000/NV|
00000010 44 41 2c 50 61 72 65 6e 74 40 31 30 2f 4e 56 44 |DA,Parent@10/NVD|
00000020 41 2c 44 69 73 70 6c 61 79 2d 41 40 30 00 |A,Display-A@0.|
0000002e
# dmesg|grep -i console
[ 0.000000] bootconsole [udbg0] enabled
[ 0.000774] Console: colour dummy device 80x25
[ 2.288125] Console: switching to colour frame buffer device 128x48
[ 4.318611] Warning: unable to open an initial console.
A workaround seems to be explicitly pass console=tty0 on the kernel
command line...
A.
We have created a patch for removing your commit but I hope you have a
better idea.
Cheers,
Christian
[1] https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=05fd007e46296afb24d15c7d589d535e5a5b9d5c
quoted hunk
diff -rupN a/drivers/of/base.c b/drivers/of/base.c
--- a/drivers/of/base.c 2016-10-29 22:52:02.000000000 +0200
+++ b/drivers/of/base.c 2016-11-04 11:59:07.049568281 +0100
@@ -2077,8 +2077,6 @@ void of_alias_scan(void * (*dt_alloc)(u6
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 -rupN a/include/linux/console.h b/include/linux/console.h
--- a/include/linux/console.h 2016-10-29 22:52:02.000000000 +0200
+++ b/include/linux/console.h 2016-11-04 12:00:22.808701652 +0100
@@ -173,12 +173,6 @@ static inline void console_sysfs_notify(
#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 -rupN a/kernel/printk/printk.c b/kernel/printk/printk.c
--- a/kernel/printk/printk.c 2016-10-29 22:52:02.000000000 +0200
+++ b/kernel/printk/printk.c 2016-11-04 12:04:36.083094450 +0100
@@ -253,17 +253,6 @@ 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;
@@ -2657,7 +2646,7 @@ void register_console(struct console *ne
* didn't select a console we take the first one
* that registers here.
*/
- if (preferred_console < 0 && !of_specified_console) {
+ if (preferred_console < 0) {
if (newcon->index < 0)
newcon->index = 0;
if (newcon->setup == NULL ||