Problem with the commit "console: don't prefer first registered if DT specifies stdout-path"

Aaro Koskinen aaro.koskinen at iki.fi
Sun Nov 6 03:32:06 AEDT 2016


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 at f0000000/NV|
00000010  44 41 2c 50 61 72 65 6e  74 40 31 30 2f 4e 56 44  |DA,Parent at 10/NVD|
00000020  41 2c 44 69 73 70 6c 61  79 2d 41 40 30 00        |A,Display-A at 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

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



More information about the Linuxppc-dev mailing list