From: Mario Limonciello <mario.limoncie...@amd.com> On systems with non VGA GPUs fbcon can't find the primary GPU because video_is_primary_device() only checks the VGA arbiter.
Add a screen info check to video_is_primary_device() so that callers can get accurate data on such systems. Reviewed-by: Thomas Zimmermann <tzimmerm...@suse.de> Suggested-by: Thomas Zimmermann <tzimmerm...@suse.de> Signed-off-by: Mario Limonciello <mario.limoncie...@amd.com> --- v8: * add guards for the non CONFIG_SCREEN_INFO case v5: * Only change video-common.c v4: * use helper --- arch/x86/video/video-common.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/arch/x86/video/video-common.c b/arch/x86/video/video-common.c index 81fc97a2a837a..4bbfffec4b640 100644 --- a/arch/x86/video/video-common.c +++ b/arch/x86/video/video-common.c @@ -9,6 +9,7 @@ #include <linux/module.h> #include <linux/pci.h> +#include <linux/screen_info.h> #include <linux/vgaarb.h> #include <asm/video.h> @@ -27,6 +28,9 @@ EXPORT_SYMBOL(pgprot_framebuffer); bool video_is_primary_device(struct device *dev) { +#ifdef CONFIG_SCREEN_INFO + struct screen_info *si = &screen_info; +#endif struct pci_dev *pdev; if (!dev_is_pci(dev)) @@ -34,7 +38,18 @@ bool video_is_primary_device(struct device *dev) pdev = to_pci_dev(dev); - return (pdev == vga_default_device()); + if (!pci_is_display(pdev)) + return false; + + if (pdev == vga_default_device()) + return true; + +#ifdef CONFIG_SCREEN_INFO + if (pdev == screen_info_pci_dev(si)) + return true; +#endif + + return false; } EXPORT_SYMBOL(video_is_primary_device); -- 2.43.0