Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package grub2 for openSUSE:Factory checked in at 2025-04-09 21:49:16 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/grub2 (Old) and /work/SRC/openSUSE:Factory/.grub2.new.1907 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "grub2" Wed Apr 9 21:49:16 2025 rev:356 rq:1267829 version:2.12 Changes: -------- --- /work/SRC/openSUSE:Factory/grub2/grub2.changes 2025-04-02 17:06:30.672116459 +0200 +++ /work/SRC/openSUSE:Factory/.grub2.new.1907/grub2.changes 2025-04-09 21:49:18.687695574 +0200 @@ -1,0 +2,12 @@ +Tue Apr 1 09:44:49 UTC 2025 - Thomas Zimmermann <tzimmerm...@suse.com> + +- Add grub2-provide-edid.patch: Grub2 already retrieves the EDID + from video adapters. Copy the raw data into the Linux kernel boot + parameters, so that Linux can use this information. The necessary + fields have been present in the boot parameters since at least + commit f8eeaaf41803 ("[PATCH] Make the bzImage format + self-terminating"), but never used. Within the kernel, the EDID + data will be propagated to graphics drivers and finally to user + space. (bsc#1240624) + +------------------------------------------------------------------- New: ---- grub2-provide-edid.patch BETA DEBUG BEGIN: New: - Add grub2-provide-edid.patch: Grub2 already retrieves the EDID from video adapters. Copy the raw data into the Linux kernel boot BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ grub2.spec ++++++ --- /var/tmp/diff_new_pack.9T2NSk/_old 2025-04-09 21:49:22.243845321 +0200 +++ /var/tmp/diff_new_pack.9T2NSk/_new 2025-04-09 21:49:22.247845490 +0200 @@ -446,6 +446,7 @@ Patch273: 0009-appendedsig-documentation.patch Patch274: 0001-ofpath-Add-error-check-in-NVMEoF-device-translation.patch Patch275: grub2-btrfs-filter-non-subvol-mount.patch +Patch276: grub2-provide-edid.patch %if 0%{?suse_version} < 1600 Requires: gettext-runtime ++++++ grub2-provide-edid.patch ++++++ Index: grub-2.12/grub-core/video/video.c =================================================================== --- grub-2.12.orig/grub-core/video/video.c +++ grub-2.12/grub-core/video/video.c @@ -89,6 +89,27 @@ grub_video_get_info_and_fini (struct gru 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) + return grub_error (GRUB_ERR_BAD_DEVICE, "no video mode activated"); + + grub_memset (edid_info, 0, sizeof (*edid_info)); + + if (grub_video_adapter_active->get_edid) + { + err = grub_video_adapter_active->get_edid (edid_info); + if (err) + return err; + } + + return GRUB_ERR_NONE; +} + /* Determine optimized blitting formation for specified video mode info. */ enum grub_video_blit_format grub_video_get_blit_format (struct grub_video_mode_info *mode_info) Index: grub-2.12/include/grub/video.h =================================================================== --- grub-2.12.orig/include/grub/video.h +++ grub-2.12/include/grub/video.h @@ -445,6 +445,8 @@ grub_err_t EXPORT_FUNC (grub_video_get_i grub_err_t EXPORT_FUNC (grub_video_get_info_and_fini) (struct grub_video_mode_info *mode_info, void **framebuffer); +grub_err_t EXPORT_FUNC (grub_video_get_edid) (struct grub_video_edid_info *edid_info); + enum grub_video_blit_format EXPORT_FUNC(grub_video_get_blit_format) (struct grub_video_mode_info *mode_info); grub_err_t grub_video_set_palette (unsigned int start, unsigned int count, Index: grub-2.12/grub-core/loader/i386/linux.c =================================================================== --- grub-2.12.orig/grub-core/loader/i386/linux.c +++ grub-2.12/grub-core/loader/i386/linux.c @@ -234,6 +234,7 @@ grub_e820_add_region (struct grub_e820_m 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,17 @@ grub_linux_setup_video (struct linux_ker if (driver_id == GRUB_VIDEO_DRIVER_NONE) return 1; + grub_video_get_edid (&edid_info); /* ignore errors */ + + /* + * 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 +350,17 @@ grub_linux_setup_video (struct linux_ker } #endif + if (grub_le_to_cpu16 (params->version) >= 0x0208) + { + grub_memcpy (params->v0208.edid_info, &edid_info, + sizeof (params->v0208.edid_info)); + } + else if (grub_le_to_cpu16 (params->version) >= 0x0206) + { + grub_memcpy (params->v0206.edid_info, &edid_info, + sizeof (params->v0206.edid_info)); + } + return GRUB_ERR_NONE; } Index: grub-2.12/include/grub/i386/linux.h =================================================================== --- grub-2.12.orig/include/grub/i386/linux.h +++ grub-2.12/include/grub/i386/linux.h @@ -250,14 +250,15 @@ struct linux_kernel_params grub_uint32_t ext_ramdisk_size; /* 0xc4 */ grub_uint32_t ext_cmd_line_ptr; /* 0xc8 */ - grub_uint8_t padding7[0x1b8 - 0xcc]; + grub_uint8_t padding7[0x140 - 0xcc]; union { struct { + grub_uint8_t padding7_1[0x1b8 - 0x140]; grub_uint32_t efi_system_table; /* 1b8 */ - grub_uint32_t padding7_1; /* 1bc */ + grub_uint32_t padding7_2; /* 1bc */ grub_uint32_t efi_signature; /* 1c0 */ grub_uint32_t efi_mem_desc_size; /* 1c4 */ grub_uint32_t efi_mem_desc_version; /* 1c8 */ @@ -266,8 +267,7 @@ struct linux_kernel_params } v0204; struct { - grub_uint32_t padding7_1; /* 1b8 */ - grub_uint32_t padding7_2; /* 1bc */ + grub_uint8_t edid_info[128]; /* 140 */ grub_uint32_t efi_signature; /* 1c0 */ grub_uint32_t efi_system_table; /* 1c4 */ grub_uint32_t efi_mem_desc_size; /* 1c8 */ @@ -277,8 +277,7 @@ struct linux_kernel_params } v0206; struct { - grub_uint32_t padding7_1; /* 1b8 */ - grub_uint32_t padding7_2; /* 1bc */ + grub_uint8_t edid_info[128]; /* 140 */ grub_uint32_t efi_signature; /* 1c0 */ grub_uint32_t efi_system_table; /* 1c4 */ grub_uint32_t efi_mem_desc_size; /* 1c8 */