Commit ad90860b authored by Mario Limonciello (AMD)'s avatar Mario Limonciello (AMD)
Browse files

fbcon: Use screen info to find primary device



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: default avatarThomas Zimmermann <tzimmermann@suse.de>
Suggested-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Suggested-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Reviewed-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Link: https://lore.kernel.org/r/20250811162606.587759-4-superm1@kernel.org


Signed-off-by: default avatarMario Limonciello (AMD) <superm1@kernel.org>
parent 337bf13a
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -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,11 @@ EXPORT_SYMBOL(pgprot_framebuffer);

bool video_is_primary_device(struct device *dev)
{
#ifdef CONFIG_SCREEN_INFO
	struct screen_info *si = &screen_info;
	struct resource res[SCREEN_INFO_MAX_RESOURCES];
	ssize_t i, numres;
#endif
	struct pci_dev *pdev;

	if (!dev_is_pci(dev))
@@ -34,7 +40,24 @@ 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
	numres = screen_info_resources(si, res, ARRAY_SIZE(res));
	for (i = 0; i < numres; ++i) {
		if (!(res[i].flags & IORESOURCE_MEM))
			continue;

		if (pci_find_resource(pdev, &res[i]))
			return true;
	}
#endif

	return false;
}
EXPORT_SYMBOL(video_is_primary_device);