From: Mario Limonciello <mario.limonciello@xxxxxxx> On a mobile system with an AMD integrated GPU + NVIDIA discrete GPU the AMD GPU is not being selected by some desktop environments for any rendering tasks. This is because the neither GPU is being treated as "boot_vga" but that is what some environments use to select a GPU [1]. The VGA arbiter driver only looks at devices that report as PCI display VGA class devices. Neither GPU on the system is a display VGA class device: c5:00.0 3D controller: NVIDIA Corporation Device 2db9 (rev a1) c6:00.0 Display controller: Advanced Micro Devices, Inc. [AMD/ATI] Device 150e (rev d1) This series introduces a new helper to find PCI display class devices and adjusts various places in the kernel to use it. It also adjust the VGA arbiter code to consider all these devices as the VGA arbiter code does manage to select the correct device by looking at which device is using the firmware framebuffer. v1->v2: * Split helper to it's own patch * Add patches to use helper elsewhere in kernel * Simplify logic instead of making more passes Mario Limonciello (6): PCI: Add helper for checking if a PCI device is a display controller vfio/pci: Use pci_is_display() vga_switcheroo: Use pci_is_display() iommu/vt-d: Use pci_is_display() ALSA: hda: Use pci_is_display() vgaarb: Look at all PCI display devices in VGA arbiter drivers/gpu/vga/vga_switcheroo.c | 2 +- drivers/iommu/intel/iommu.c | 2 +- drivers/pci/pci-sysfs.c | 2 +- drivers/pci/vgaarb.c | 8 ++++---- drivers/vfio/pci/vfio_pci_igd.c | 3 +-- include/linux/pci.h | 15 +++++++++++++++ sound/hda/hdac_i915.c | 2 +- sound/pci/hda/hda_intel.c | 4 ++-- 8 files changed, 26 insertions(+), 12 deletions(-) base-commit: e04c78d86a9699d136910cfc0bdcf01087e3267e -- 2.43.0