[PATCH] efi_loader: allow to disable GOP support

Icenowy Zheng icenowy at aosc.io
Wed Jun 16 16:09:39 CEST 2021


在 2021-06-16星期三的 15:20 +0200,Heinrich Schuchardt写道:
> Am 16. Juni 2021 14:19:41 MESZ schrieb Icenowy Zheng
> <icenowy at aosc.io>:
> > 在 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.
> 
> The GOP driver is not available after ExitBootServices. You can't use
> it after the EFI stub hands over to main Linux.

I think Linux will remember a FB address before ExitBootServices, and
continue to use it then.

> 
> Shouldn't the Panfrost driver and Mesa be used for RK3399?   
> https://wiki.debian.org/PanfrostLima ,   
> https://www.collabora.com/news-and-blog/blog/2019/08/06/rockpi-panfrost-wayland/
> 

Well, you made a common error that thinks on embedded systems GPUs are
responsible for display. It's not, for display (not 3D rendering)
rockchipdrm is the driver.

> Best regards
> 
> Heinrich
> 
> 
> > 
> > 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