summaryrefslogtreecommitdiffstats
path: root/drivers/firmware/sysfb.c
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2023-03-14 13:31:02 +0100
committerArd Biesheuvel <ardb@kernel.org>2023-03-18 11:44:57 +0100
commit3615c78673c332b69aaacefbcde5937c5c706686 (patch)
treec63398d817c40b282da616d2192c6f2ab3696905 /drivers/firmware/sysfb.c
parentf59a7ec1e69fc23946175b8c0d7e0fd21f94f8c9 (diff)
downloadlinux-stable-3615c78673c332b69aaacefbcde5937c5c706686.tar.gz
linux-stable-3615c78673c332b69aaacefbcde5937c5c706686.tar.bz2
linux-stable-3615c78673c332b69aaacefbcde5937c5c706686.zip
efi: sysfb_efi: Fix DMI quirks not working for simpledrm
Commit 8633ef82f101 ("drivers/firmware: consolidate EFI framebuffer setup for all arches") moved the sysfb_apply_efi_quirks() call in sysfb_init() from before the [sysfb_]parse_mode() call to after it. But sysfb_apply_efi_quirks() modifies the global screen_info struct which [sysfb_]parse_mode() parses, so doing it later is too late. This has broken all DMI based quirks for correcting wrong firmware efifb settings when simpledrm is used. To fix this move the sysfb_apply_efi_quirks() call back to its old place and split the new setup of the efifb_fwnode (which requires the platform_device) into its own function and call that at the place of the moved sysfb_apply_efi_quirks(pd) calls. Fixes: 8633ef82f101 ("drivers/firmware: consolidate EFI framebuffer setup for all arches") Cc: stable@vger.kernel.org Cc: Javier Martinez Canillas <javierm@redhat.com> Cc: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Diffstat (limited to 'drivers/firmware/sysfb.c')
-rw-r--r--drivers/firmware/sysfb.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/firmware/sysfb.c b/drivers/firmware/sysfb.c
index 3fd3563d962b..3c197db42c9d 100644
--- a/drivers/firmware/sysfb.c
+++ b/drivers/firmware/sysfb.c
@@ -81,6 +81,8 @@ static __init int sysfb_init(void)
if (disabled)
goto unlock_mutex;
+ sysfb_apply_efi_quirks();
+
/* try to create a simple-framebuffer device */
compatible = sysfb_parse_mode(si, &mode);
if (compatible) {
@@ -107,7 +109,7 @@ static __init int sysfb_init(void)
goto unlock_mutex;
}
- sysfb_apply_efi_quirks(pd);
+ sysfb_set_efifb_fwnode(pd);
ret = platform_device_add_data(pd, si, sizeof(*si));
if (ret)