svn commit: r358989 - in head/stand/efi: libefi loader loader/arch/arm loader/arch/arm64

Ruslan Garipov brigadir15 at gmail.com
Wed Mar 18 16:40:24 UTC 2020


On 3/17/2020 5:16 PM, Tomoaki AOKI wrote:
> Hi! Thanks for your respond.
> 
> Unfortunately, no.
> I'm running on ThinkPad P52, which has no com connector installed.
> No USB serial interface connected.
> 
> `efi-show -g global -v ConOut` on loader prompt shows
> 
> global NV,BS,RS ConOut =
> PciRoot(0,0)/Pci((0x1,oxo)/Pci(0x0,0x0)/AcpiAdr(0x80010100)
> 
> Moreover, my previous idea didn't help.
> 
> Neither
>  console="vidconsole"
>  console="eficonsole"
>  console="efi_console"
> nor
>  console="efi"
> in /boot/loader.conf works.
> 
> Defining / undefining TERM_EMU on build are untested.
> 
> Is there any setting for /boot/loader.conf to control the behavior?
> 
> 
> Regards.
> 
> 
> On Mon, 16 Mar 2020 08:26:56 +0200
> Toomas Soome <tsoome at me.com> wrote:
> 
>> Hi!
>>
>> This means, your system has UART serial device 〓 you can check this from loader prompt: efi-show -g global -v ConOut or with efivar from running system. This w			ould trigger efi console driver to use TERM_EMU, which can be turned off by user and doing that would cause ESC sequences to be passed directly to console. Might that be true in your case?
>>
>> rgds,
>> toomas
>>
>>> On 15. Mar 2020, at 17:17, Tomoaki AOKI <junchoon at dec.sakura.ne.jp> wrote:
>>>
>>> Hi.
>>>
>>> This broke loader menu display on efifb. At least on amd64.
>>> ESC sequences without ESC character are shown.
>>> Key input (at least 1, 2 and enter) works OK.
>>> I suspect outputs for SIO is sent to efifb and ESC codes are ignored.
>>>
>>> Reverting this fixes the issue.
I got the same issue with loader menu when was upgrading from r358827 to
r359028 (x86-64).

But unfortunately the broken menu is just a part of my problem.  The
real pain is that a FreeBSD 13.0-CURRENT system hosted by VMware ESXi or
Workstation doesn't boot anymore after r358989.  An ugly workaround[1]
(exiting from the loader menu into the loader prompt, running ls or
show, scrolling the result down and then executing boot) I found some
time ago doesn't work anymore.  After running boot/boot -s/selecting
menu item, a hypervisor just shuts session down with the following
message: ``The firmware encountered an unexpected exception. The virtual
machine cannot boot.''

The virtual guests don't have any UART (even USB) serial devices in
their settings.  efi-show prints result similar to what Tomoaki got:

OK efi-show -g global -v CounOut
global NV,BS,RS ConOut = PciRoot(0x0)/Pci(0x2,0x0)/AcpiAdr(0x80014310)

Undefining TERM_EMU doesn't help.  I had completely removed CFLAGS
assignment with TERM_EMU from stand/efi/libefi/Makefile and rebuilt
kernel/world -- nothing changed.  I don't define TERM_EMU in my
make.conf or/and src.conf.

Reverting this revision fix booting (and menu, of course).

FreeBSD on physical hardware boots just fine with this revision, but has
corrupted loader menu.

Toomas, please help us to fix this.  I can live with the broken menu,
but I don't want to revert this revision every time I will upgrade my
virtual machines after r359028 now.

[1]
https://old.reddit.com/r/freebsd/comments/drxqlm/failed_to_do_efi_boot_on_a_vmware_virtual_machine/f6om6p2/
>>>
>>> Not tried (not enough time for now as I'm mainly using stable/12),
>>> but possibly calling efi_cons_probe() from efi_cons_init() would be
>>> needed, as ome codes are moved from the latter to the former.
>>>
>>>
>>>> Author: tsoome
>>>> Date: Sat Mar 14 06:36:03 2020
>>>> New Revision: 358989
>>>> URL: https://svnweb.freebsd.org/changeset/base/358989
>>>>
>>>> Log:
>>>>  loader: add comconsole implementation on top of SIO protocol
>>>>
>>>>  Provide comconsole on top of SIO for arm platforms (x86 does use bios
>>> version).
>>>>
>>>> Added:
>>>>  head/stand/efi/loader/efiserialio.c   (contents, props changed)
>>>> Modified:
>>>>  head/stand/efi/libefi/efi_console.c
>>>>  head/stand/efi/loader/arch/arm/Makefile.inc
>>>>  head/stand/efi/loader/arch/arm64/Makefile.inc
>>>>  head/stand/efi/loader/conf.c
>>>>  head/stand/efi/loader/main.c
>>>>
>>>> Modified: head/stand/efi/libefi/efi_console.c
>>>> ==============================================================================
>>>> --- head/stand/efi/libefi/efi_console.c	Sat Mar 14 05:57:22
>>> 2020	(r358988)
>>>> +++ head/stand/efi/libefi/efi_console.c
>>> Sat Mar 14 06:36:03 2020	(r358989)
>>>> @@ -377,9 +377,22 @@ efi_cons_respond(void *s __unused, const void *buf __u
>>>> {
>>>> }
>>>>
>>>> +/*
>>>> + * Set up conin/conout/coninex to make sure we have input ready.
>>>> + */
>>>> static void
>>>> efi_cons_probe(struct console *cp)
>>>> {
>>>> +	EFI_STATUS status;
>>>> +
>>>> +	conout = ST->ConOut;
>>>> +	conin = ST->ConIn;
>>>> +
>>>> +	status = BS->OpenProtocol(ST->ConsoleInHandle,
>>> &simple_input_ex_guid,
>>>> +	    (void **)&coninex, IH, NULL,
>>> EFI_OPEN_PROTOCOL_GET_PROTOCOL);
>>>> +	if (status != EFI_SUCCESS)
>>>> +		coninex = NULL;
>>>> +
>>>> 	cp->c_flags |= C_PRESENTIN | C_PRESENTOUT;
>>>> }
>>>>
>>>> @@ -889,15 +902,7 @@ efi_cons_init(int arg)
>>>> 	if (conin != NULL)
>>>> 		return (0);
>>>>
>>>> -	conout = ST->ConOut;
>>>> -	conin = ST->ConIn;
>>>> -
>>>> 	conout->EnableCursor(conout, TRUE);
>>>> -	status = BS->OpenProtocol(ST->ConsoleInHandle,
>>> &simple_input_ex_guid,
>>>> -	    (void **)&coninex, IH, NULL,
>>> EFI_OPEN_PROTOCOL_GET_PROTOCOL);
>>>> -	if (status != EFI_SUCCESS)
>>>> -		coninex = NULL;
>>>> -
>>>> 	if (efi_cons_update_mode())
>>>> 		return (0);
>>>>
>>>>
>>>> Modified: head/stand/efi/loader/arch/arm/Makefile.inc
>>>> ==============================================================================
>>>> --- head/stand/efi/loader/arch/arm/Makefile.inc	Sat Mar 14
>>> 05:57:22 2020	(r358988)
>>>> +++ head/stand/efi/loader/arch/arm/Makefile.inc	Sat Mar 14 06:36:03
>>> 2020	(r358989)
>>>> @@ -1,6 +1,7 @@
>>>> # $FreeBSD$
>>>>
>>>> SRCS+=	exec.c \
>>>> +	efiserialio.c \
>>>> 	start.S
>>>>
>>>> HAVE_FDT=yes
>>>
>>> (Snip)
>>>
>>>> @@ -930,7 +936,6 @@ main(int argc, CHAR16 *argv[])
>>>> 	if (!has_kbd && (howto & RB_PROBE))
>>>> 		howto |= RB_SERIAL | RB_MULTIPLE;
>>>> 	howto &= ~RB_PROBE;
>>>> -	uhowto = parse_uefi_con_out();
>>>>
>>>> 	/*
>>>> 	 * Read additional environment variables from the boot device's
>>>
>>> -- 
>>> Tomoaki AOKI    <junchoon at dec.sakura.ne.jp>
>>
>>
> 
> 


More information about the svn-src-head mailing list