mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 10:33:41 +02:00
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: Thomas Zimmermann <tzimmermann@suse.de> Suggested-by: Thomas Zimmermann <tzimmermann@suse.de> Suggested-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Bjorn Helgaas <bhelgaas@google.com> Link: https://lore.kernel.org/r/20250811162606.587759-4-superm1@kernel.org Signed-off-by: Mario Limonciello (AMD) <superm1@kernel.org>
This commit is contained in:
parent
337bf13aa9
commit
ad90860bd1
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
|
#include <linux/screen_info.h>
|
||||||
#include <linux/vgaarb.h>
|
#include <linux/vgaarb.h>
|
||||||
|
|
||||||
#include <asm/video.h>
|
#include <asm/video.h>
|
||||||
|
|
@ -27,6 +28,11 @@ EXPORT_SYMBOL(pgprot_framebuffer);
|
||||||
|
|
||||||
bool video_is_primary_device(struct device *dev)
|
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;
|
struct pci_dev *pdev;
|
||||||
|
|
||||||
if (!dev_is_pci(dev))
|
if (!dev_is_pci(dev))
|
||||||
|
|
@ -34,7 +40,24 @@ bool video_is_primary_device(struct device *dev)
|
||||||
|
|
||||||
pdev = to_pci_dev(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);
|
EXPORT_SYMBOL(video_is_primary_device);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user