40 lines
1.2 KiB
Diff
40 lines
1.2 KiB
Diff
---
|
|
grub-core/video/efi_gop.c | 11 ++++++++++-
|
|
1 file changed, 10 insertions(+), 1 deletion(-)
|
|
|
|
--- a/grub-core/video/efi_gop.c
|
|
+++ b/grub-core/video/efi_gop.c
|
|
@@ -358,6 +358,7 @@ grub_video_gop_setup (unsigned int width
|
|
grub_err_t err;
|
|
unsigned bpp;
|
|
int found = 0;
|
|
+ int avoid_low_resolution = 1;
|
|
unsigned long long best_volume = 0;
|
|
unsigned int preferred_width = 0, preferred_height = 0;
|
|
grub_uint8_t *buffer;
|
|
@@ -376,8 +377,11 @@ grub_video_gop_setup (unsigned int width
|
|
}
|
|
}
|
|
|
|
+again:
|
|
/* Keep current mode if possible. */
|
|
- if (gop->mode->info)
|
|
+ if (gop->mode->info &&
|
|
+ (!avoid_low_resolution ||
|
|
+ (gop->mode->info->width >= 800 && gop->mode->info->height >= 600)))
|
|
{
|
|
bpp = grub_video_gop_get_bpp (gop->mode->info);
|
|
if (bpp && ((width == gop->mode->info->width
|
|
@@ -450,6 +454,11 @@ grub_video_gop_setup (unsigned int width
|
|
|
|
if (!found)
|
|
{
|
|
+ if (avoid_low_resolution && gop->mode->info)
|
|
+ {
|
|
+ avoid_low_resolution = 0;
|
|
+ goto again;
|
|
+ }
|
|
grub_dprintf ("video", "GOP: no mode found\n");
|
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "no matching mode found");
|
|
}
|