[PATCH] efi_loader: allow to disable GOP support

Heinrich Schuchardt xypron.glpk at gmx.de
Wed Jun 16 16:25:35 CEST 2021


Am 16. Juni 2021 16:18:35 MESZ schrieb Peter Robinson <pbrobinson at gmail.com>:
>On Wed, Jun 16, 2021 at 3:11 PM Icenowy Zheng <icenowy at aosc.io> wrote:
>>
>> 在 2021-06-16星期三的 15:06 +0100,Peter Robinson写道:
>> > On Wed, Jun 16, 2021 at 1:20 PM Icenowy Zheng <icenowy at aosc.io>
>> > wrote:
>> > >
>> > > 在 2021-06-16星期三的 06:59 +0200,Heinrich Schuchardt写道:
>> > > > Am 15. Juni 2021 23:10:28 MESZ schrieb Icenowy Zheng
>> > > > <icenowy at aosc.io>:
>> > > > > Sometimes EFI GOP support may be not wanted (e.g. because the
>> > > > > operating
>> > > > > system cannot operate well with it) even if video support in
>U-
>> > > > > Boot
>> > > > > is
>> > > > > needed.
>> > > >
>> > > > Which OS has which problem?
>> > > > Why don't you fix the OS?
>> > >
>> > > I'm trying RK3399 with Linux. EFIFB never works as intended
>(maybe
>> > > it's
>> > > because IOMMU is reconfigured), and rockchipdrmfb will be fb1
>> > > (leave
>> > > non-working EFIFB as fb0), makes fbcon unusable.
>> >
>> > It's due to bugs in Linux, it will be fixed in 5.14 with these
>> > patches
>> > from our Fedora testing:
>> >
>https://lists.freedesktop.org/archives/dri-devel/2021-May/306803.html
>>
>> I think this patch should get backported.
>
>I have no problems with that so feel free to propose it to the stable
>kernels.
>
>> BTW a point of using EFI boot is to support existing distros, which
>> won't have this patch.
>
>Sure, but UEFI doesn't guarantee there aren't bugs in kernels or
>firmware though, it certainly makes things more straight forward but
>it's no silver bullet.
>

https://passthroughpo.st/explaining-csm-efifboff-setting-boot-gpu-manually/ refers to a Linux command line parameter that could be used:

video=efifb:off

Best regards

Heinrich



>> >
>> > There's also this enhancement, also should land in 5.14, which is
>> > dependent on the feature that's in the second link:
>> >
>> >
>https://lists.freedesktop.org/archives/dri-devel/2021-May/306803.html
>> >
>https://lists.freedesktop.org/archives/dri-devel/2021-April/303291.html
>> >
>> > With that first patch it mostly works for me, the second two series
>> > improves on that some more.
>> >
>> > Peter
>> >
>> > > The second problem has a proposed fix, but the first problem is
>> > > mystery.
>> > >
>> > > >
>> > > > Best regards
>> > > >
>> > > > Heinrich
>> > > >
>> > > >
>> > > > >
>> > > > > Allow to disable EFI GOP support with a Kconfig option.
>> > > > >
>> > > > > Signed-off-by: Icenowy Zheng <icenowy at aosc.io>
>> > > > > ---
>> > > > > lib/efi_loader/Kconfig     |  8 ++++++++
>> > > > > lib/efi_loader/Makefile    |  3 +--
>> > > > > lib/efi_loader/efi_setup.c | 11 ++++++-----
>> > > > > 3 files changed, 15 insertions(+), 7 deletions(-)
>> > > > >
>> > > > > diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
>> > > > > index 6242caceb7..5ba0ce6a44 100644
>> > > > > --- a/lib/efi_loader/Kconfig
>> > > > > +++ b/lib/efi_loader/Kconfig
>> > > > > @@ -282,6 +282,14 @@ config EFI_HAVE_RUNTIME_RESET
>> > > > >         depends on ARCH_BCM283X || FSL_LAYERSCAPE ||
>PSCI_RESET
>> > > > > ||
>> > > > > \
>> > > > >                    SANDBOX || SYSRESET_X86
>> > > > >
>> > > > > +config EFI_GOP_PROTOCOL
>> > > > > +       bool "EFI_GOP_PROTOCOL support"
>> > > > > +       default y
>> > > > > +       depends on DM_VIDEO || LCD
>> > > > > +       help
>> > > > > +         Provide a EFI_GOP_PROTOCOL implementation using the
>> > > > > graphics
>> > > > > +         hardware initialized by U-Boot.
>> > > > > +
>> > > > > config EFI_GRUB_ARM32_WORKAROUND
>> > > > >         bool "Workaround for GRUB on 32bit ARM"
>> > > > >         default n if ARCH_BCM283X || ARCH_SUNXI || ARCH_QEMU
>> > > > > diff --git a/lib/efi_loader/Makefile
>b/lib/efi_loader/Makefile
>> > > > > index fd344cea29..826563d9a7 100644
>> > > > > --- a/lib/efi_loader/Makefile
>> > > > > +++ b/lib/efi_loader/Makefile
>> > > > > @@ -54,8 +54,7 @@ obj-$(CONFIG_EFI_VARIABLES_PRESEED) +=
>> > > > > efi_var_seed.o
>> > > > > endif
>> > > > > obj-y += efi_watchdog.o
>> > > > > obj-$(CONFIG_EFI_ESRT) += efi_esrt.o
>> > > > > -obj-$(CONFIG_LCD) += efi_gop.o
>> > > > > -obj-$(CONFIG_DM_VIDEO) += efi_gop.o
>> > > > > +obj-$(CONFIG_EFI_GOP_PROTOCOL) += efi_gop.o
>> > > > > obj-$(CONFIG_PARTITIONS) += efi_disk.o
>> > > > > obj-$(CONFIG_NET) += efi_net.o
>> > > > > obj-$(CONFIG_GENERATE_ACPI_TABLE) += efi_acpi.o
>> > > > > diff --git a/lib/efi_loader/efi_setup.c
>> > > > > b/lib/efi_loader/efi_setup.c
>> > > > > index 3c5cf9a435..98deb63777 100644
>> > > > > --- a/lib/efi_loader/efi_setup.c
>> > > > > +++ b/lib/efi_loader/efi_setup.c
>> > > > > @@ -254,11 +254,12 @@ efi_status_t efi_init_obj_list(void)
>> > > > >         if (ret != EFI_SUCCESS)
>> > > > >                 goto out;
>> > > > >
>> > > > > -#if defined(CONFIG_LCD) || defined(CONFIG_DM_VIDEO)
>> > > > > -       ret = efi_gop_register();
>> > > > > -       if (ret != EFI_SUCCESS)
>> > > > > -               goto out;
>> > > > > -#endif
>> > > > > +       if (IS_ENABLED(CONFIG_EFI_GOP_PROTOCOL)) {
>> > > > > +               ret = efi_gop_register();
>> > > > > +               if (ret != EFI_SUCCESS)
>> > > > > +                       goto out;
>> > > > > +       }
>> > > > > +
>> > > > > #ifdef CONFIG_NET
>> > > > >         ret = efi_net_register();
>> > > > >         if (ret != EFI_SUCCESS)
>> > >
>>



More information about the U-Boot mailing list