Loading all_video for EFI can cause video issues in some cases since GRUB Bochs/Cirrus drivers may conflict with native EFI drivers. Change default behavior for EFI to only load EFI specific video modules. Also include a new environment variable to restore the old behavior if needed.
Fixes: https://savannah.gnu.org/bugs/index.php?66200 Signed-off-by: Andrew Hamilton <[email protected]> --- docs/grub.texi | 7 +++++++ util/grub-mkconfig.in | 3 ++- util/grub.d/00_header.in | 16 +++++++++++++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/docs/grub.texi b/docs/grub.texi index 5b23ae47b..1ec5d3566 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -1642,6 +1642,13 @@ This option is unset by default, and is deprecated in favour of the less confusing @samp{GRUB_TIMEOUT_STYLE=countdown} or @samp{GRUB_TIMEOUT_STYLE=hidden}. +@item GRUB_FORCE_EFI_ALL_VIDEO +When set to true, this will allow grub-mkconfig to generate a GRUB config +that supports loading the all_video module on the EFI platform instead of +just the efi_gop and efi_uga modules. + +This option is unset by default. + @end table For more detailed customisation of @command{grub-mkconfig}'s output, you may diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in index 32c480dae..45787a1d1 100644 --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in @@ -255,7 +255,8 @@ export GRUB_DEFAULT \ GRUB_ENABLE_CRYPTODISK \ GRUB_BADRAM \ GRUB_OS_PROBER_SKIP_LIST \ - GRUB_DISABLE_SUBMENU + GRUB_DISABLE_SUBMENU \ + GRUB_FORCE_EFI_ALL_VIDEO if test "x${grub_cfg}" != "x"; then rm -f "${grub_cfg}.new" diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in index 9d36feda3..77834cfaf 100644 --- a/util/grub.d/00_header.in +++ b/util/grub.d/00_header.in @@ -124,10 +124,24 @@ if [ -n "${GRUB_VIDEO_BACKEND}" ]; then insmod ${GRUB_VIDEO_BACKEND} EOF else +# For EFI, use EFI video drivers only by default to avoid conflict between +# GRUB Bochs/Cirrus and native EFI drivers. If GRUB_FORCE_EFI_ALL_VIDEO is +# set/true then defer back to all_video even for EFI. +if [ "${GRUB_FORCE_EFI_ALL_VIDEO}" = "1" ]; then + cat <<EOF + if [ x\$feature_all_video_module = xy ]; then +EOF +else # GRUB_FORCE_EFI_ALL_VIDEO is not set true + cat <<EOF + if [ x\$grub_platform = xefi ]; then + insmod efi_gop + insmod efi_uga + elif [ x\$feature_all_video_module = xy ]; then +EOF +fi # end GRUB_FORCE_EFI_ALL_VIDEO # If all_video.mod isn't available load all modules available # with versions prior to introduction of all_video.mod cat <<EOF - if [ x\$feature_all_video_module = xy ]; then insmod all_video else insmod efi_gop -- 2.43.0 _______________________________________________ Grub-devel mailing list [email protected] https://lists.gnu.org/mailman/listinfo/grub-devel
