On Tue, Sep 16, 2025 at 01:48:45PM +0200, Thomas Zimmermann wrote: > The Linux kernel's struct bootparams provides a field at offset 0x140 > for storing an EDID header. Copy the video adapter's data to the field. > > The edid_info field was added in 2003 (see "[FBDEV] EDID support from > OpenFirmware on PPC platoforms and from the BIOS on intel platforms."), > but only got useable in 2004 (see "[PATCH] Fix EDID_INFO in zero-page"). > The boot protocol was at version 2.03 at that time. > > The field was never used much, but with the recent addition of the efidrm > and vesadrm drivers to the kernel, it becomes much more useful. As with > the initial screen setup, these drivers can make use of the provided > EDID information for basic display output. > > Signed-off-by: Thomas Zimmermann <[email protected]>
Reviewed-by: Daniel Kiper <[email protected]> But a few nits below... > --- > grub-core/loader/i386/linux.c | 16 ++++++++++++++++ > grub-core/video/video.c | 21 +++++++++++++++++++++ > include/grub/video.h | 2 ++ > 3 files changed, 39 insertions(+) > > diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c > index 12731feb2..afc8699bf 100644 > --- a/grub-core/loader/i386/linux.c > +++ b/grub-core/loader/i386/linux.c > @@ -234,6 +234,7 @@ grub_e820_add_region (struct grub_boot_e820_entry > *e820_entry, int *e820_num, > static grub_err_t > grub_linux_setup_video (struct linux_kernel_params *params) > { > + struct grub_video_edid_info edid_info; > struct grub_video_mode_info mode_info; > void *framebuffer; > grub_err_t err; > @@ -245,6 +246,19 @@ grub_linux_setup_video (struct linux_kernel_params > *params) > if (driver_id == GRUB_VIDEO_DRIVER_NONE) > return 1; > > + err = grub_video_get_edid (&edid_info); > + if (err) if (err != GRUB_ERR_NONE) > + grub_memset (&edid_info, 0, sizeof (edid_info)); > + > + /* > + * We cannot transfer any extensions. Therefore clear > + * the extension flag from the checksum and set the > + * field to zero. Adding the extension flag to the > + * checksum does the trick. > + */ > + edid_info.checksum += edid_info.extension_flag; > + edid_info.extension_flag = 0; > + > err = grub_video_get_info_and_fini (&mode_info, &framebuffer); > > if (err) > @@ -338,6 +352,8 @@ grub_linux_setup_video (struct linux_kernel_params > *params) > } > #endif > > + grub_memcpy (params->edid_info, &edid_info, sizeof (params->edid_info)); > + > return GRUB_ERR_NONE; > } > > diff --git a/grub-core/video/video.c b/grub-core/video/video.c > index 8937da745..b92b7036d 100644 > --- a/grub-core/video/video.c > +++ b/grub-core/video/video.c > @@ -89,6 +89,27 @@ grub_video_get_info_and_fini (struct grub_video_mode_info > *mode_info, > return GRUB_ERR_NONE; > } > > +/* Get information about connected display. */ > +grub_err_t > +grub_video_get_edid (struct grub_video_edid_info *edid_info) > +{ > + grub_err_t err; > + > + if (! grub_video_adapter_active) if (grub_video_adapter_active == NULL) > + return grub_error (GRUB_ERR_BAD_DEVICE, "no video mode activated"); > + > + if (grub_video_adapter_active->get_edid) if (grub_video_adapter_active->get_edid != NULL) > + { > + err = grub_video_adapter_active->get_edid (edid_info); > + if (err) if (err != GRUB_ERR_NONE) > + return err; > + } > + else > + grub_memset (edid_info, 0, sizeof (*edid_info)); > + > + return GRUB_ERR_NONE; > +} Please fix the issues, add all RBs which you got and repost the patch... Daniel _______________________________________________ Grub-devel mailing list [email protected] https://lists.gnu.org/mailman/listinfo/grub-devel
