
On Wed, Jun 16, 2021 at 1:20 PM Icenowy Zheng icenowy@aosc.io wrote:
在 2021-06-16星期三的 06:59 +0200,Heinrich Schuchardt写道:
Am 15. Juni 2021 23:10:28 MESZ schrieb Icenowy Zheng icenowy@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
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@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)