lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <56798EC7.1030804@laposte.net>
Date:	Tue, 22 Dec 2015 18:56:23 +0100
From:	Sebastian Frias <sf84@...oste.net>
To:	Peter Hurley <peter@...leysoftware.com>
CC:	Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
	linux-serial@...r.kernel.org, LKML <linux-kernel@...r.kernel.org>,
	mason <slash.tmp@...e.fr>,
	Måns Rullgård <mans@...sr.com>
Subject: Re: [RFC PATCH] always probe UART HW when options are not specified

On 12/21/2015 05:50 PM, Sebastian Frias wrote:
>> You need to use the format documented in
>> Documentation/kernel-parameters.text:
>>
>>     console=    [KNL] Output console device and options.
>>
>>         uart[8250],io,<addr>[,options]
>>         uart[8250],mmio,<addr>[,options]
>>         uart[8250],mmio16,<addr>[,options]
>>         uart[8250],mmio32,<addr>[,options]
>>         uart[8250],0x<addr>[,options]
>>             Start an early, polled-mode console on the 8250/16550
>>             UART at the specified I/O port or MMIO address,
>>             switching to the matching ttyS device later.
>>             MMIO inter-register address stride is either 8-bit
>>             (mmio), 16-bit (mmio16), or 32-bit (mmio32).
>>             If none of [io|mmio|mmio16|mmio32], <addr> is assumed
>>             to be equivalent to 'mmio'. 'options' are specified in
>>             the same format described for ttyS above; if unspecified,
>>             the h/w is not re-initialized.
>>
>> The iotype and the uart address are not options.
>
> Do you mean they are mandatory?
> How do they relate to the keys present on the DT? Because the device is
> already described in the DT:
>
>          uart: serial@...00 {
>              compatible = "ralink,rt2880-uart";
>              reg = <0x10700 0x30>;
>              interrupts = <1 IRQ_TYPE_LEVEL_HIGH>;
>              clock-frequency = <7372800>;
>              reg-shift = <2>;
>          };
>
> Are we supposed to duplicate such information (ie: addr) in the
> commandline as well?
>

By the way, I tried using the following command line 
'console=uart,mmio32,0x10700,115200n8r mem=256M earlyprintk debug 
ignore_loglevel' but I think I'm still missing something regarding this, 
because it does not work, here's a log of Linux 4.1.13+:


1: [arch/arm/kernel/setup.c:932] setup_arch(): r1 = 0xf34, r2 = 
0x803b3b50, cmdline ''
1: [arch/arm/kernel/devtree.c:195] arch_get_next_mach(): infoBegin 
0xc024faac, mdesc 0xc024faac
1: [arch/arm/kernel/devtree.c:195] arch_get_next_mach(): infoBegin 
0xc024faac, mdesc 0xc024fb14
1: [drivers/of/fdt.c:106] of_fdt_is_compatible(): sigma,tango4 vs 
sigma,vantage-1172
1: [arch/arm/kernel/devtree.c:195] arch_get_next_mach(): infoBegin 
0xc024faac, mdesc 0xc024fb7c
1: [drivers/of/fdt.c:749] of_flat_dt_match_machine(): Machine model: 
Sigma Designs SMP8758 Vantage-1172 Rev E1
1: [arch/arm/kernel/devtree.c:256] setup_machine_fdt(): about to call 
early_init_dt_scan_nodes
1: [drivers/of/fdt.c:1057] early_init_dt_scan_nodes(): bootcmdline ''
1: [drivers/of/fdt.c:1062] early_init_dt_scan_nodes(): bootcmdline after 
of_scan_flat_dt 'console=uart,mmio32,0x10700,115200n8r mem=256M 
earlyprintk debug ignore_loglevel'
1: [arch/arm/kernel/setup.c:946] setup_arch(): using DT at r2
1: [arch/arm/kernel/setup.c:949] setup_arch(): machine name Sigma Tango DT
1: [arch/arm/kernel/setup.c:967] setup_arch(): before parse_early_param
1: [init/main.c:468] parse_early_param(): bootcmdline 
'console=uart,mmio32,0x10700,115200n8r mem=256M earlyprintk debug 
ignore_loglevel'
1: [init/main.c:473] parse_early_param(): mark
1: [init/main.c:428] do_early_param(): enter with: 'console' 
'uart,mmio32,0x10700,115200n8r'
1: [init/main.c:446] do_early_param(): 'earlycon', setup_func 0xc024b868
1: [drivers/tty/serial/earlycon.c:214] param_setup_earlycon(): 
'uart,mmio32,0x10700,115200n8r'
1: [drivers/tty/serial/earlycon.c:181] setup_earlycon(): 
'uart,mmio32,0x10700,115200n8r'
1: [drivers/tty/serial/earlycon.c:132] register_earlycon(): 
'mmio32,0x10700,115200n8r' 'uart'
1: [drivers/tty/serial/earlycon.c:86] parse_options(): 
'mmio32,0x10700,115200n8r'
1: [drivers/tty/serial/earlycon.c:91] parse_options(): addr 0x00010700, 
options '115200n8r'
1: [drivers/tty/serial/earlycon.c:117] parse_options(): Early serial 
console at MMIO32 0x10700 (options '115200n8r')
1: [drivers/tty/serial/earlycon.c:138] register_earlycon(): '(null)'
1: [drivers/tty/serial/earlycon.c:62] earlycon_map(): paddr 0x00010700 
size 64

As you can see, now that the options are more complete, the match for 
"earlycon" succeeds, but it does not work, the last log is in 
earlycon_map() function.
When using just "console=uart", the "earlycon" match will fail but a 
match for "earlyprink" will succeed. That one will hook printch() from 
the arch-dependent code to a somewhat simpler 'earlycon' 
(arch/arm/kernel/early_printk.c).

I think the code is the same on mainline.

Also, regarding my previous question about using a HW described in DT 
for earlycon, I noticed there's a of_setup_earlycon() in 
drivers/tty/serial/earlycon.c but that is hooked to 
drivers/of/fdt.c:setup_of_earlycon() which is not called. I do have 
CONFIG_SERIAL_EARLYCON=y.

I also have a similar issue (ie: get blocked right after the call to 
earlycon_map function, log is obviously different from above) if attempt 
to use of_setup_earlycon.
My DT has roughly:

	aliases {
		serial0 = &uart;
	};

	chosen {
	       bootargs = "earlycon console mem=256M earlyprintk debug 
ignore_loglevel";
	       stdout-path = "serial0:115200n8";
	};

	uart: serial@...00 {
		compatible = "ralink,rt2880-uart";
		reg = <0x10700 0x30>;
		interrupts = <1 IRQ_TYPE_LEVEL_HIGH>;
		clock-frequency = <7372800>;
		reg-shift = <2>;
	};


and then I hack drivers/tty/serial/8250/8250_early.c by adding:

	OF_EARLYCON_DECLARE(rt2880, "ralink,rt2880-uart", early_serial8250_setup);

at the end of the file, trying to mimic commit 
d05f15707bb7659d2b863fafa1a918f286d74a63

I'm still trying to figure out the right bootargs, so that's why both 
"earlycon" and "console" are there. Suggestions welcome.

Thanks in advance and Merry Christmas!




--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ