[PATCH v3 0/9] arch,sysfb,efi: Support EDID on non-x86 EFI systems

Thomas Zimmermann posted 9 patches 5 days, 6 hours ago
arch/arm64/kernel/image-vars.h                |  2 +-
arch/loongarch/kernel/efi.c                   | 38 ++++-----
arch/loongarch/kernel/image-vars.h            |  2 +-
arch/riscv/kernel/image-vars.h                |  2 +-
arch/x86/kernel/kexec-bzimage64.c             |  4 +-
arch/x86/kernel/setup.c                       | 16 ++--
arch/x86/video/video-common.c                 |  4 +-
drivers/firmware/efi/earlycon.c               | 42 +++++-----
drivers/firmware/efi/efi-init.c               | 46 ++++++-----
drivers/firmware/efi/efi.c                    |  4 +-
drivers/firmware/efi/libstub/Makefile         |  2 +-
drivers/firmware/efi/libstub/efi-stub-entry.c | 36 +++++++--
drivers/firmware/efi/libstub/efi-stub.c       | 49 +++++++----
drivers/firmware/efi/libstub/efistub.h        |  7 +-
.../firmware/efi/libstub/primary_display.c    | 41 ++++++++++
drivers/firmware/efi/libstub/screen_info.c    | 53 ------------
drivers/firmware/efi/libstub/zboot.c          |  6 +-
drivers/firmware/efi/sysfb_efi.c              | 81 ++++++++++---------
drivers/firmware/sysfb.c                      | 13 +--
drivers/firmware/sysfb_simplefb.c             |  2 +-
drivers/gpu/drm/sysfb/efidrm.c                | 14 ++--
drivers/gpu/drm/sysfb/vesadrm.c               | 14 ++--
drivers/hv/vmbus_drv.c                        |  6 +-
drivers/pci/vgaarb.c                          |  4 +-
drivers/video/Kconfig                         |  8 +-
drivers/video/fbdev/core/fbmon.c              |  8 +-
drivers/video/fbdev/efifb.c                   | 10 ++-
drivers/video/fbdev/vesafb.c                  | 10 ++-
drivers/video/fbdev/vga16fb.c                 |  8 +-
drivers/video/screen_info_pci.c               |  5 +-
include/linux/efi.h                           |  9 ++-
include/linux/screen_info.h                   |  2 -
include/linux/sysfb.h                         | 23 ++++--
include/video/edid.h                          |  4 -
34 files changed, 321 insertions(+), 254 deletions(-)
create mode 100644 drivers/firmware/efi/libstub/primary_display.c
delete mode 100644 drivers/firmware/efi/libstub/screen_info.c
[PATCH v3 0/9] arch,sysfb,efi: Support EDID on non-x86 EFI systems
Posted by Thomas Zimmermann 5 days, 6 hours ago
Replace screen_info and edid_info with sysfb_primary_device of type
struct sysfb_display_info. Update all users. Then implement EDID support
in the kernel EFI code.

Sysfb DRM drivers currently fetch the global edid_info directly, when
they should get that information together with the screen_info from their
device. Wrapping screen_info and edid_info in sysfb_primary_display and
passing this to drivers enables this.

Replacing both with sysfb_primary_display has been motivate by the EFI
stub. EFI wants to transfer EDID via config table in a single entry.
Using struct sysfb_display_info this will become easily possible. Hence
accept some churn in architecture code for the long-term improvements.

Patches 1 and 2 reduce the exposure of screen_info in EFI-related code.

Patch 3 adds struct sysfb_display_info.

Patch 4 replaces scren_info with sysfb_primary_display. This results in
several changes throught the kernel, but is really just a refactoring.

Patch 5 updates sysfb to transfer sysfb_primary_display to the related
drivers.

Patch 6 moves edid_info into sysfb_primary_display. This resolves some
drivers' reference to the global edid_info, but also makes the EDID data
available on non-x86 architectures.

Patches 7 and 8 add support for EDID transfers on non-x86 EFI systems.

Patch 9 cleans up the config-table allocation to be easier to understand.

v3:
- replace SCREEN_INFO table entry (Ard)
- merge libstub patch into kernel patch
v2:
- combine v1 of the series at [1] plus changes from [2] and [3].

[1] https://lore.kernel.org/dri-devel/20251121135624.494768-1-tzimmermann@suse.de/
[2] https://lore.kernel.org/dri-devel/20251015160816.525825-1-tzimmermann@suse.de/
[3] https://lore.kernel.org/linux-efi/20251119123011.1187249-5-ardb+git@google.com/

Thomas Zimmermann (9):
  efi: earlycon: Reduce number of references to global screen_info
  efi: sysfb_efi: Reduce number of references to global screen_info
  sysfb: Add struct sysfb_display_info
  sysfb: Replace screen_info with sysfb_primary_display
  sysfb: Pass sysfb_primary_display to devices
  sysfb: Move edid_info into sysfb_primary_display
  efi: Refactor init_primary_display() helpers
  efi: Support EDID information
  efi: libstub: Simplify interfaces for primary_display

 arch/arm64/kernel/image-vars.h                |  2 +-
 arch/loongarch/kernel/efi.c                   | 38 ++++-----
 arch/loongarch/kernel/image-vars.h            |  2 +-
 arch/riscv/kernel/image-vars.h                |  2 +-
 arch/x86/kernel/kexec-bzimage64.c             |  4 +-
 arch/x86/kernel/setup.c                       | 16 ++--
 arch/x86/video/video-common.c                 |  4 +-
 drivers/firmware/efi/earlycon.c               | 42 +++++-----
 drivers/firmware/efi/efi-init.c               | 46 ++++++-----
 drivers/firmware/efi/efi.c                    |  4 +-
 drivers/firmware/efi/libstub/Makefile         |  2 +-
 drivers/firmware/efi/libstub/efi-stub-entry.c | 36 +++++++--
 drivers/firmware/efi/libstub/efi-stub.c       | 49 +++++++----
 drivers/firmware/efi/libstub/efistub.h        |  7 +-
 .../firmware/efi/libstub/primary_display.c    | 41 ++++++++++
 drivers/firmware/efi/libstub/screen_info.c    | 53 ------------
 drivers/firmware/efi/libstub/zboot.c          |  6 +-
 drivers/firmware/efi/sysfb_efi.c              | 81 ++++++++++---------
 drivers/firmware/sysfb.c                      | 13 +--
 drivers/firmware/sysfb_simplefb.c             |  2 +-
 drivers/gpu/drm/sysfb/efidrm.c                | 14 ++--
 drivers/gpu/drm/sysfb/vesadrm.c               | 14 ++--
 drivers/hv/vmbus_drv.c                        |  6 +-
 drivers/pci/vgaarb.c                          |  4 +-
 drivers/video/Kconfig                         |  8 +-
 drivers/video/fbdev/core/fbmon.c              |  8 +-
 drivers/video/fbdev/efifb.c                   | 10 ++-
 drivers/video/fbdev/vesafb.c                  | 10 ++-
 drivers/video/fbdev/vga16fb.c                 |  8 +-
 drivers/video/screen_info_pci.c               |  5 +-
 include/linux/efi.h                           |  9 ++-
 include/linux/screen_info.h                   |  2 -
 include/linux/sysfb.h                         | 23 ++++--
 include/video/edid.h                          |  4 -
 34 files changed, 321 insertions(+), 254 deletions(-)
 create mode 100644 drivers/firmware/efi/libstub/primary_display.c
 delete mode 100644 drivers/firmware/efi/libstub/screen_info.c


base-commit: d724c6f85e80a23ed46b7ebc6e38b527c09d64f5
-- 
2.51.1
Re: [PATCH v3 0/9] arch,sysfb,efi: Support EDID on non-x86 EFI systems
Posted by Richard Lyu 4 days, 19 hours ago
Hi Thomas,

I am attempting to test this patch series but encountered merge conflicts when applying it to various trees.
Could you please clarify the specific base commit (or branch/tag) this series was generated against?

When testing on the next branch on commits 7a2ff00 and e41ef37, I hit a conflict on PATCH v3 4/9:
patching file drivers/pci/vgaarb.c
Hunk #2 FAILED at 557.
1 out of 2 hunks FAILED -- rejects in file drivers/pci/vgaarb.c

When testing against 3a86608 (Linux 6.18-rc1), the following conflicts occurred:
patching file drivers/gpu/drm/sysfb/efidrm.c
Hunk #1 FAILED at 24.
1 out of 2 hunks FAILED -- rejects in file drivers/gpu/drm/sysfb/efidrm.c
patching file drivers/gpu/drm/sysfb/vesadrm.c
Hunk #1 FAILED at 25.
1 out of 2 hunks FAILED -- rejects in file drivers/gpu/drm/sysfb/vesadrm.c

Please let me know the correct base, and I will retest.

Thanks,
Richard Lyu

On 2025/11/26 17:03, Thomas Zimmermann wrote:
> Replace screen_info and edid_info with sysfb_primary_device of type
> struct sysfb_display_info. Update all users. Then implement EDID support
> in the kernel EFI code.
> 
> Sysfb DRM drivers currently fetch the global edid_info directly, when
> they should get that information together with the screen_info from their
> device. Wrapping screen_info and edid_info in sysfb_primary_display and
> passing this to drivers enables this.
> 
> Replacing both with sysfb_primary_display has been motivate by the EFI
> stub. EFI wants to transfer EDID via config table in a single entry.
> Using struct sysfb_display_info this will become easily possible. Hence
> accept some churn in architecture code for the long-term improvements.
> 
> Patches 1 and 2 reduce the exposure of screen_info in EFI-related code.
> 
> Patch 3 adds struct sysfb_display_info.
> 
> Patch 4 replaces scren_info with sysfb_primary_display. This results in
> several changes throught the kernel, but is really just a refactoring.
> 
> Patch 5 updates sysfb to transfer sysfb_primary_display to the related
> drivers.
> 
> Patch 6 moves edid_info into sysfb_primary_display. This resolves some
> drivers' reference to the global edid_info, but also makes the EDID data
> available on non-x86 architectures.
> 
> Patches 7 and 8 add support for EDID transfers on non-x86 EFI systems.
> 
> Patch 9 cleans up the config-table allocation to be easier to understand.
> 
> v3:
> - replace SCREEN_INFO table entry (Ard)
> - merge libstub patch into kernel patch
> v2:
> - combine v1 of the series at [1] plus changes from [2] and [3].
> 
> [1] https://lore.kernel.org/dri-devel/20251121135624.494768-1-tzimmermann@suse.de/
> [2] https://lore.kernel.org/dri-devel/20251015160816.525825-1-tzimmermann@suse.de/
> [3] https://lore.kernel.org/linux-efi/20251119123011.1187249-5-ardb+git@google.com/
> 
> Thomas Zimmermann (9):
>   efi: earlycon: Reduce number of references to global screen_info
>   efi: sysfb_efi: Reduce number of references to global screen_info
>   sysfb: Add struct sysfb_display_info
>   sysfb: Replace screen_info with sysfb_primary_display
>   sysfb: Pass sysfb_primary_display to devices
>   sysfb: Move edid_info into sysfb_primary_display
>   efi: Refactor init_primary_display() helpers
>   efi: Support EDID information
>   efi: libstub: Simplify interfaces for primary_display
> 
>  arch/arm64/kernel/image-vars.h                |  2 +-
>  arch/loongarch/kernel/efi.c                   | 38 ++++-----
>  arch/loongarch/kernel/image-vars.h            |  2 +-
>  arch/riscv/kernel/image-vars.h                |  2 +-
>  arch/x86/kernel/kexec-bzimage64.c             |  4 +-
>  arch/x86/kernel/setup.c                       | 16 ++--
>  arch/x86/video/video-common.c                 |  4 +-
>  drivers/firmware/efi/earlycon.c               | 42 +++++-----
>  drivers/firmware/efi/efi-init.c               | 46 ++++++-----
>  drivers/firmware/efi/efi.c                    |  4 +-
>  drivers/firmware/efi/libstub/Makefile         |  2 +-
>  drivers/firmware/efi/libstub/efi-stub-entry.c | 36 +++++++--
>  drivers/firmware/efi/libstub/efi-stub.c       | 49 +++++++----
>  drivers/firmware/efi/libstub/efistub.h        |  7 +-
>  .../firmware/efi/libstub/primary_display.c    | 41 ++++++++++
>  drivers/firmware/efi/libstub/screen_info.c    | 53 ------------
>  drivers/firmware/efi/libstub/zboot.c          |  6 +-
>  drivers/firmware/efi/sysfb_efi.c              | 81 ++++++++++---------
>  drivers/firmware/sysfb.c                      | 13 +--
>  drivers/firmware/sysfb_simplefb.c             |  2 +-
>  drivers/gpu/drm/sysfb/efidrm.c                | 14 ++--
>  drivers/gpu/drm/sysfb/vesadrm.c               | 14 ++--
>  drivers/hv/vmbus_drv.c                        |  6 +-
>  drivers/pci/vgaarb.c                          |  4 +-
>  drivers/video/Kconfig                         |  8 +-
>  drivers/video/fbdev/core/fbmon.c              |  8 +-
>  drivers/video/fbdev/efifb.c                   | 10 ++-
>  drivers/video/fbdev/vesafb.c                  | 10 ++-
>  drivers/video/fbdev/vga16fb.c                 |  8 +-
>  drivers/video/screen_info_pci.c               |  5 +-
>  include/linux/efi.h                           |  9 ++-
>  include/linux/screen_info.h                   |  2 -
>  include/linux/sysfb.h                         | 23 ++++--
>  include/video/edid.h                          |  4 -
>  34 files changed, 321 insertions(+), 254 deletions(-)
>  create mode 100644 drivers/firmware/efi/libstub/primary_display.c
>  delete mode 100644 drivers/firmware/efi/libstub/screen_info.c
> 
> 
> base-commit: d724c6f85e80a23ed46b7ebc6e38b527c09d64f5
> -- 
> 2.51.1
>
Re: [PATCH v3 0/9] arch,sysfb,efi: Support EDID on non-x86 EFI systems
Posted by Thomas Zimmermann 4 days, 14 hours ago
Hi

Am 27.11.25 um 03:20 schrieb Richard Lyu:
> Hi Thomas,
>
> I am attempting to test this patch series but encountered merge conflicts when applying it to various trees.
> Could you please clarify the specific base commit (or branch/tag) this series was generated against?

Thanks for testing.

>
> When testing on the next branch on commits 7a2ff00 and e41ef37, I hit a conflict on PATCH v3 4/9:
> patching file drivers/pci/vgaarb.c
> Hunk #2 FAILED at 557.
> 1 out of 2 hunks FAILED -- rejects in file drivers/pci/vgaarb.c
>
> When testing against 3a86608 (Linux 6.18-rc1), the following conflicts occurred:
> patching file drivers/gpu/drm/sysfb/efidrm.c
> Hunk #1 FAILED at 24.
> 1 out of 2 hunks FAILED -- rejects in file drivers/gpu/drm/sysfb/efidrm.c
> patching file drivers/gpu/drm/sysfb/vesadrm.c
> Hunk #1 FAILED at 25.
> 1 out of 2 hunks FAILED -- rejects in file drivers/gpu/drm/sysfb/vesadrm.c
>
> Please let me know the correct base, and I will retest.

It's in the cover letter: d724c6f85e80a23ed46b7ebc6e38b527c09d64f5 The 
commit is in linux-next. The idea is that the EFI tree can pick up the 
changes easily in the next cycle. linux-next seemed like the best 
choice. Best regards Thomas
>
> Thanks,
> Richard Lyu
>
> On 2025/11/26 17:03, Thomas Zimmermann wrote:
>> Replace screen_info and edid_info with sysfb_primary_device of type
>> struct sysfb_display_info. Update all users. Then implement EDID support
>> in the kernel EFI code.
>>
>> Sysfb DRM drivers currently fetch the global edid_info directly, when
>> they should get that information together with the screen_info from their
>> device. Wrapping screen_info and edid_info in sysfb_primary_display and
>> passing this to drivers enables this.
>>
>> Replacing both with sysfb_primary_display has been motivate by the EFI
>> stub. EFI wants to transfer EDID via config table in a single entry.
>> Using struct sysfb_display_info this will become easily possible. Hence
>> accept some churn in architecture code for the long-term improvements.
>>
>> Patches 1 and 2 reduce the exposure of screen_info in EFI-related code.
>>
>> Patch 3 adds struct sysfb_display_info.
>>
>> Patch 4 replaces scren_info with sysfb_primary_display. This results in
>> several changes throught the kernel, but is really just a refactoring.
>>
>> Patch 5 updates sysfb to transfer sysfb_primary_display to the related
>> drivers.
>>
>> Patch 6 moves edid_info into sysfb_primary_display. This resolves some
>> drivers' reference to the global edid_info, but also makes the EDID data
>> available on non-x86 architectures.
>>
>> Patches 7 and 8 add support for EDID transfers on non-x86 EFI systems.
>>
>> Patch 9 cleans up the config-table allocation to be easier to understand.
>>
>> v3:
>> - replace SCREEN_INFO table entry (Ard)
>> - merge libstub patch into kernel patch
>> v2:
>> - combine v1 of the series at [1] plus changes from [2] and [3].
>>
>> [1] https://lore.kernel.org/dri-devel/20251121135624.494768-1-tzimmermann@suse.de/
>> [2] https://lore.kernel.org/dri-devel/20251015160816.525825-1-tzimmermann@suse.de/
>> [3] https://lore.kernel.org/linux-efi/20251119123011.1187249-5-ardb+git@google.com/
>>
>> Thomas Zimmermann (9):
>>    efi: earlycon: Reduce number of references to global screen_info
>>    efi: sysfb_efi: Reduce number of references to global screen_info
>>    sysfb: Add struct sysfb_display_info
>>    sysfb: Replace screen_info with sysfb_primary_display
>>    sysfb: Pass sysfb_primary_display to devices
>>    sysfb: Move edid_info into sysfb_primary_display
>>    efi: Refactor init_primary_display() helpers
>>    efi: Support EDID information
>>    efi: libstub: Simplify interfaces for primary_display
>>
>>   arch/arm64/kernel/image-vars.h                |  2 +-
>>   arch/loongarch/kernel/efi.c                   | 38 ++++-----
>>   arch/loongarch/kernel/image-vars.h            |  2 +-
>>   arch/riscv/kernel/image-vars.h                |  2 +-
>>   arch/x86/kernel/kexec-bzimage64.c             |  4 +-
>>   arch/x86/kernel/setup.c                       | 16 ++--
>>   arch/x86/video/video-common.c                 |  4 +-
>>   drivers/firmware/efi/earlycon.c               | 42 +++++-----
>>   drivers/firmware/efi/efi-init.c               | 46 ++++++-----
>>   drivers/firmware/efi/efi.c                    |  4 +-
>>   drivers/firmware/efi/libstub/Makefile         |  2 +-
>>   drivers/firmware/efi/libstub/efi-stub-entry.c | 36 +++++++--
>>   drivers/firmware/efi/libstub/efi-stub.c       | 49 +++++++----
>>   drivers/firmware/efi/libstub/efistub.h        |  7 +-
>>   .../firmware/efi/libstub/primary_display.c    | 41 ++++++++++
>>   drivers/firmware/efi/libstub/screen_info.c    | 53 ------------
>>   drivers/firmware/efi/libstub/zboot.c          |  6 +-
>>   drivers/firmware/efi/sysfb_efi.c              | 81 ++++++++++---------
>>   drivers/firmware/sysfb.c                      | 13 +--
>>   drivers/firmware/sysfb_simplefb.c             |  2 +-
>>   drivers/gpu/drm/sysfb/efidrm.c                | 14 ++--
>>   drivers/gpu/drm/sysfb/vesadrm.c               | 14 ++--
>>   drivers/hv/vmbus_drv.c                        |  6 +-
>>   drivers/pci/vgaarb.c                          |  4 +-
>>   drivers/video/Kconfig                         |  8 +-
>>   drivers/video/fbdev/core/fbmon.c              |  8 +-
>>   drivers/video/fbdev/efifb.c                   | 10 ++-
>>   drivers/video/fbdev/vesafb.c                  | 10 ++-
>>   drivers/video/fbdev/vga16fb.c                 |  8 +-
>>   drivers/video/screen_info_pci.c               |  5 +-
>>   include/linux/efi.h                           |  9 ++-
>>   include/linux/screen_info.h                   |  2 -
>>   include/linux/sysfb.h                         | 23 ++++--
>>   include/video/edid.h                          |  4 -
>>   34 files changed, 321 insertions(+), 254 deletions(-)
>>   create mode 100644 drivers/firmware/efi/libstub/primary_display.c
>>   delete mode 100644 drivers/firmware/efi/libstub/screen_info.c
>>
>>
>> base-commit: d724c6f85e80a23ed46b7ebc6e38b527c09d64f5
>> -- 
>> 2.51.1
>>

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)