2019-12-12 22:54:45

by Arvind Sankar

[permalink] [raw]
Subject: efi/gop: do we need to check ConOut any more?

Since commit 38cb5ef4473c ("X86: Improve GOP detection in the EFI boot
stub") we check for a GOP device that implements ConOut protocol to find
our primary output device. The commit log says that this was done to
avoid problems with the ConSplitter device, which exports a virtual GOP
interface. The original version by Matt Fleming checked for PCIIO
protocol, with a note that says there are some Apple machines have GOPs
without hardware, I assume that that was the same case, GOPs from
ConSplitter.

However, since commit 540f4c0e894f ("efi/libstub: Skip GOP with
PIXEL_BLT_ONLY format") we skip GOP's that don't have a framebuffer.

Looking at the EDK2 implementation of ConSplitter, the virtual GOP will
advertise a framebuffer iff it is attached to exactly one GOP device, in
which case it passes through all the information. If it is attached to a
UGA device or to more than one GOP, it will show as a non-framebuffer
GOP, so we will skip it anyway in those cases.

Given that, is it still necessary to check for conout at all, or would
it be enough to rely on the framebuffer check?

PS I hope I got the latest email addresses correct for everyone


2019-12-13 10:07:33

by Ard Biesheuvel

[permalink] [raw]
Subject: Re: efi/gop: do we need to check ConOut any more?

On Thu, 12 Dec 2019 at 23:23, Arvind Sankar <[email protected]> wrote:
>
> Since commit 38cb5ef4473c ("X86: Improve GOP detection in the EFI boot
> stub") we check for a GOP device that implements ConOut protocol to find
> our primary output device. The commit log says that this was done to
> avoid problems with the ConSplitter device, which exports a virtual GOP
> interface. The original version by Matt Fleming checked for PCIIO
> protocol, with a note that says there are some Apple machines have GOPs
> without hardware, I assume that that was the same case, GOPs from
> ConSplitter.
>
> However, since commit 540f4c0e894f ("efi/libstub: Skip GOP with
> PIXEL_BLT_ONLY format") we skip GOP's that don't have a framebuffer.
>
> Looking at the EDK2 implementation of ConSplitter, the virtual GOP will
> advertise a framebuffer iff it is attached to exactly one GOP device, in
> which case it passes through all the information. If it is attached to a
> UGA device or to more than one GOP, it will show as a non-framebuffer
> GOP, so we will skip it anyway in those cases.
>
> Given that, is it still necessary to check for conout at all, or would
> it be enough to rely on the framebuffer check?
>

If it doesn't hurt to check, I'd prefer to keep it in. UEFI is a can
of worms, given how many buggy implementations exist in the field.