Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4c60fac1 authored by Emil Velikov's avatar Emil Velikov Committed by Dave Airlie
Browse files

drm/nouveau: consider CLASS_DISPLAY_3D devices while detecting dsm/optimus

The present code assumes that optimus is present whenever two
VGA (PCI_CLASS_DISPLAY_VGA) devices are present. This does not
seem to be the case of newer laptops with optimus, in which
case the nvidia gpu is a PCI_CLASS_DISPLAY_3D device.

Rework the logic so that we count both VGA and 3D devices,
when contemplating if optimus is present on the platform.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=70208


Signed-off-by: default avatarEmil Velikov <emil.l.velikov@gmail.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 4a15cdff
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -317,6 +317,16 @@ static bool nouveau_dsm_detect(void)
			has_optimus = 1;
	}

	while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_3D << 8, pdev)) != NULL) {
		vga_count++;

		retval = nouveau_dsm_pci_probe(pdev);
		if (retval & NOUVEAU_DSM_HAS_MUX)
			has_dsm |= 1;
		if (retval & NOUVEAU_DSM_HAS_OPT)
			has_optimus = 1;
	}

	/* find the optimus DSM or the old v1 DSM */
	if (has_optimus == 1) {
		acpi_get_name(nouveau_dsm_priv.dhandle, ACPI_FULL_PATHNAME,