Date: Wed, 25 Sep 2024 12:59:28 -0700 From: Matt Simerson <matt@tnpi.net> To: freebsd-current@freebsd.org Subject: Re: UEFI + SOL / COM ports = boot hang Message-ID: <8E7B326A-1459-459A-AD9D-EF261D847F69@tnpi.net> In-Reply-To: <5FA60E35-C839-468F-A4E3-710FD4DEFAC8@tnpi.net> References: <5FA60E35-C839-468F-A4E3-710FD4DEFAC8@tnpi.net>
next in thread | previous in thread | raw e-mail | index | archive | help
The default state of this server is that FreeBSD hangs when booting off = UEFI and the COM ports are enabled. That seems to be because console = includes or adds "efi" by default. Under every circumstance I've tested, = when console contains "efi", the server hangs at the same point shown in = the first message. The workaround I've found is setting: console=3D"comconsole" FreeBSD assumes that COM 1 is serial, which likely fails to initialize = and so with only that setting, the video console remains primary. When = that happens, I get no Beastie boot menu on either console. Since the = server is now bootable with COM ports, I can tell the kernel where to = find the serial port: # without the next 2 lines, the serial console isn't found and the video = console remains primary comconsole_port=3D"0x2F8" comconsole_speed=3D"115200" And now it boots, I get the Beastie menu on the serial console, and = later the FreeBSD kernel reports: Dual Console: Serial Primary, Video Secondary Changing the settings in BIOS related to console redirection seem not to = matter much at all. Pretty much any combination of settings works. This isn't perfect. The UEFI video console is certainly nicer, and I'd = prefer to have it be primary and serial be secondary. But I cannot = include 'efi' in loader.conf console setting while the COM ports are = enabled else FreeBSD hangs. The contents of the EFI variable ConOut with console ports disabled: # efivar -p -d 8be4df61-93ca-11d2-aa0d-00e098032b8c-ConOut 8be4df61-93ca-11d2-aa0d-00e098032b8c-ConOut : = PciRoot(0x0)/Pci(0x1c,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/AcpiAdr(0x80010100) With console ports enabled and console=3D"comconsole": # efivar -p -d 8be4df61-93ca-11d2-aa0d-00e098032b8c-ConOut 8be4df61-93ca-11d2-aa0d-00e098032b8c-ConOut : = PciRoot(0x0)/Pci(0x1c,0x0)/Pci(0x0,0x0)/Pci(0x0,0x0)/AcpiAdr(0x80010100),/= PciRoot(0x0)/Pci(0x1f,0x0)/Serial(0x0)/Uart(115200,8,N,1)/UartFlowCtrl(Har= dware)/VenUtf8(),/PciRoot(0x0)/Pci(0x1f,0x0)/Serial(0x1)/Uart(115200,8,N,1= )/UartFlowCtrl(Hardware)/VenUtf8() =46rom dmesg: EFI framebuffer information: addr, size 0x9c000000, 0x300000 dimensions 1024 x 768 stride 1024 masks 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 .... VT(efifb): resolution 1024x768 ... vgapci0: <VGA-compatible display> port 0x2000-0x207f mem = 0x9c000000-0x9cffffff,0x9d000000-0x9d01ffff irq 16 at device 0.0 = numa-domain 0 on pci2 vgapci0: Boot video device I was hoping that setting hw.uart.console=3D"io:0x2f8,br:115200" in = loader.conf would help, but the server still hangs if 'efi' is included = in the console list. Messing with hint.uart.N as suggested in = https://wiki.freebsd.org/SerialConsole didn't help, I'm guessing that's = because those settings aren't used by loader.efi. Any ideas or pointers for other settings which may enable the EFI = console to be primary while also having a serial console? Thanks, Matt > On Sep 23, 2024, at 3:22=E2=80=AFPM, Matt Simerson <matt@tnpi.net> = wrote: >=20 > I have a Quanta D52B-1U server. When I boot it via legacy BIOS, there = is no issue. When I boot with UEFI and COM ports & console redirection = disabled, there is no issue. However, when boot UEFI and enable the COM = ports and/or console redirection, the server hangs at boot time right = here: >=20 > Version 2.20.1276. Copyright (C) 2023 American Megatrends, Inc.BIOS = Date: 12/04/2023 17:24:26 Ver: 3B28.Q102=20 > Consoles: EFI console > Reading loader env vars from /efi/freebsd/loader.env > Setting currdev to disk0p1: > FreeBSD/amd64 EFI loader, Revision 1.1 >=20 > Command line arguments: loader.efi > Image base: 0x5e993000 > EFI version: 2.70 > EFI Firmware: American Megatrends (rev 5.14) > Console: efi (0x20000000) > Load Path: \EFI\FREEBSD\LOADER.EFI > Load Device: = PciRoot(0x9)/Pci(0x0,0x0)/Pci(0x0,0x0)/NVMe(0x1,00-01-30-54-9D-E4-D2-5C)/H= D(1,GPT,F669D424-7170-11EF-83D1-A0369F6BA978,0x28,0x82000) > BootCurrent: 0000 > BootOrder: 0000[*] 0003 0006 0007 0002 0008 > BootInfo Path: = HD(1,GPT,F669D424-7170-11EF-83D1-A0369F6BA978,0x28,0x82000)/\EFI\FREEBSD\L= OADER.EFI > Ignoring Boot0000: Only one DP found > Trying ESP: = PciRoot(0x9)/Pci(0x0,0x0)/Pci(0x0,0x0)/NVMe(0x1,00-01-30-54-9D-E4-D2-5C)/H= D(1,GPT,F669D424-7170-11EF-83D1-A0369F6BA978,0x28,0x82000) > Setting currdev to disk0p1: > Trying: = PciRoot(0x9)/Pci(0x0,0x0)/Pci(0x0,0x0)/NVMe(0x1,00-01-30-54-9D-E4-D2-5C)/H= D(2,GPT,4F537B49-7176-11EF-83D1-A0369F6BA978,0x82028,0x1000000) > Setting currdev to disk0p2: > Trying: = PciRoot(0x9)/Pci(0x0,0x0)/Pci(0x0,0x0)/NVMe(0x1,00-01-30-54-9D-E4-D2-5C)/H= D(3,GPT,B6D8B384-7176-11EFLoading /boot/defaults/loader.conf86860) > Loading /boot/defaults/loader.confdefault: > Loading /boot/device.hints > Loading /boot/loader.conf > Loading /boot/loader.conf.local > | >=20 > On one occasion, I left it setting there for minutes. >=20 > I currently have FreeBSD 14.1 installed and I also replicated this = when booting off a FreeBSD 15.0-CURRENT ISO.=20 >=20 > The chipset is Intel C621 & C624. Output from dmesg is here. >=20 > BIOS settings which enable console redirection and SOL are: >=20 > Super IO > Port 0, Disabled or Enabled (IO=3D3F8h, IRQ=3D4) > Port 1, Enabled (IO=3D2F8h, IRQ=3D3) <-- SOL port > Serial Port Console Redirection > COM0 > Console Redirection, Port is Disabled > SOL > Console Redirection, [Enabled] > Console Redirection Settings, (VT100, 115200, None) > Legacy Console Redirection Settings > Redirection COM Port: SOL (other option: COM0) > Serial Port for OOB Management/Windows EMS > Console Redirection: Enabled > Console Redirection Settings, Out-of-Band Mgmt Port: SOL (other = option: COM0) > Console Redirection Settings, (VT100, 115200, None) >=20 > There are variations on those settings which work for getting BIOS = POST messages and the FreeBSD loader messages redirected to the IPMI SOL = port. However, any combination that works also causes FreeBSD to hang = at exactly the same spot. >=20 > I'm accustomed to adding a few lines to loader.conf to tell FreeBSD = how to direct console output, but nothing added there makes any = difference. I've twiddled the hint.uart.* knobs in /boot/device.hints to = no avail. >=20 > This is what works on my Dell R630: >=20 > # console port via IPMI & DRAC > boot_multicons=3D"YES" > boot_serial=3D"YES" > console=3D"efi,comconsole" > # for legacy BIOS > #console=3D"comconsole,vidconsole" > comconsole_speed=3D"115200" >=20 > How does one go about troubleshooting this? >=20 > Matt
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?8E7B326A-1459-459A-AD9D-EF261D847F69>