Re: git: df065f699f1f - main - stand: More sensible defaults when ConOut is missing

From: Toomas Soome <tsoome_at_me.com>
Date: Fri, 23 Sep 2022 22:26:18 UTC

> On 24. Sep 2022, at 00:29, John Baldwin <jhb@FreeBSD.org> wrote:
> 
> On 8/26/22 9:18 PM, Warner Losh wrote:
>> The branch main has been updated by imp:
>> URL: https://cgit.FreeBSD.org/src/commit/?id=df065f699f1ff819bb9607c44a6754275ab335ed
>> commit df065f699f1ff819bb9607c44a6754275ab335ed
>> Author:     Warner Losh <imp@FreeBSD.org>
>> AuthorDate: 2022-08-26 21:46:33 +0000
>> Commit:     Warner Losh <imp@FreeBSD.org>
>> CommitDate: 2022-08-27 04:17:56 +0000
>>     stand: More sensible defaults when ConOut is missing
>>          When ConOut is missing, we used to default to serial. Except we did it
>>     in the worst way possible by just setting the howto bits and not
>>     updating the console setting, which lead to weird behavior where we'd
>>     get some things on the video port, others on serial.
>>          Instead, set console to "efi,comconsole" for this case. Also set
>>     RB_MULTIPLE always (so we get dual consoles from the kernel) and or in
>>     RB_SERIAL when we can't find GOPs that suggest the precense of a video
>>     console. This will put output in the most places and have a sensible
>>     default for 'primary' console.
>>          Sponsored by:           Netflix
>>     Reviewed by:            emaste, manu
>>     Differential Revision:  https://reviews.freebsd.org/D36299
> 
> One possibly surprising result of this is that I did not get dual console
> output on my rpi after this.  (Curiously this only affected my arm64 image
> but not my armv7 image.)  Loader output goes to both, but kernel output is
> only on the video console (which I don't normally use for my pi).  (Also,
> none of the ANSI escape sequences used by the loader work on the pi's video
> console, so once the menu starts it just looks like raw ANSI code garbage
> until the kernel starts booting.)

If RB_SERIAL | RB_MULTIPLE is returned from parse_uefi_con_out(), we do keep “text” mode, meaning, we output to UEFI console with Simple Text Output protocol.

ANSI code like garbage on screen means there is no interpreter and we end up sending sequences to console UEFI video console has no idea how to handle those; if serial port is also bound to console output, the Simple Text Output protocol does not pass ESC through, so terminal emulator at the other end of the serial link also does draw garbage. 

So, garbage means “text" mode + no TERM_EMU is defined at build time.

rgds,
toomas

> 
> Not sure if this warrants UPDATING as the effect is that the serial console
> seems to stop working?  The lack of working dual console output is perhaps
> the only real bug.  Not sure what is up there.
> 
> -- 
> John Baldwin