[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: Xen-ARM EFI/ACPI problems (was: Re: [PATCH 0/4] xen/arm: Unbreak ACPI)
On Fri, Oct 16, 2020 at 03:33:23PM -0700, Elliott Mitchell wrote: > On the device I'm on (Raspberry PI 4B with Tianocore -> GRUB -> Xen) I > discovered a SPCR table shows up if I boot with the device the output is > plugged into is powered down. I'm guessing this causes Tianocore to > advise GRUB/Linux/Xen to boot with a serial console (presenting a Serial > Port Console Redirect table), whereas if the display device is > functioning the absense of SPCR is supposed to indicate console on > framebuffer. > > This means the ACPI_FAILURE case in acpi_iomem_deny_access() simply needs > to be filled in similar to how it likely is on x86. Allocate a serial > port for Xen's use as console, present it to domain 0 as hvc0, and hide > it from domain 0. Looks like things are worse than I thought. Upon examining some of my `dmesg` copies it looks like Linux interprets the ignore_uart field in STAO tables as applying strictly to the UART referenced in the SPCR table. As such, when booted with the framebuffer available, Linux thinks it can freely access the UART found in the hardware table. The specification for the STAO table is apparently garbage since it only allows a hypervisor to tell a VM to ignore a single UART. Instead it really needs to be possible to mask arbitrary devices. :-( As such, for ARM devices which can include framebuffers, I'm guessing Xen will need to either pass a modified table to domain 0, or simulate the device sufficiently to prevent concurrent access. This could be as simple as simulating a MMIO page which discards all writes. > Next issue for me will be getting the framebuffer operational. > Apparently the Xen-ARM EFI implementation doesn't provide any EFI > variables to domain 0? Jan Beulich, your name was mentioned as person > likely to have ideas for getting Linux's efifb code operational Xen-ARM. There may be multiple pieces to this. For the framebuffer this might be as simple as parsing the BGRT table and ensuring the addresses are directly mapped to domain 0. I just noticed in dmesg, "efi_bgrt: Ignoring BGRT: invalid image address". I'm guessing one thing got remapped, but a second didn't. The other need for EFI variable access is for modifying EFI's boot process. While I suspect it may be feasible for most users to reboot to a kernel directly on hardware to update GRUB/other bootloader, adding an extra step increases the potential for a failure at the Wrong Time. -- (\___(\___(\______ --=> 8-) EHM <=-- ______/)___/)___/) \BS ( | ehem+sigmsg@xxxxxxx PGP 87145445 | ) / \_CS\ | _____ -O #include <stddisclaimer.h> O- _____ | / _/ 8A19\___\_|_/58D2 7E3D DDF4 7BA6 <-PGP-> 41D1 B375 37D0 8714\_|_/___/5445
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |