]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/amdgpu: adjust drm_firmware_drivers_only() handling
authorAlex Deucher <alexander.deucher@amd.com>
Fri, 14 Mar 2025 00:52:38 +0000 (20:52 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 18 Mar 2025 18:03:38 +0000 (14:03 -0400)
Move to probe so we can check the PCI device type and
only apply the drm_firmware_drivers_only() check for
PCI DISPLAY classes.  Also add a module parameter to
override the nomodeset kernel parameter as a workaround
for platforms that have this hardcoded on their kernel
command lines.

Reviewed-by: Kent Russell <kent.russell@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c

index 1e77fdc9c7d12b66f885146689cd39f77ded5fb6..f62456da0ba5b9abe0082b3ea97f944ebaf0915e 100644 (file)
@@ -176,6 +176,7 @@ uint amdgpu_sdma_phase_quantum = 32;
 char *amdgpu_disable_cu;
 char *amdgpu_virtual_display;
 bool enforce_isolation;
+int amdgpu_modeset = -1;
 
 /* Specifies the default granularity for SVM, used in buffer
  * migration and restoration of backing memory when handling
@@ -1037,6 +1038,13 @@ module_param_named(user_partt_mode, amdgpu_user_partt_mode, uint, 0444);
 module_param(enforce_isolation, bool, 0444);
 MODULE_PARM_DESC(enforce_isolation, "enforce process isolation between graphics and compute . enforce_isolation = on");
 
+/**
+ * DOC: modeset (int)
+ * Override nomodeset (1 = override, -1 = auto). The default is -1 (auto).
+ */
+MODULE_PARM_DESC(modeset, "Override nomodeset (1 = enable, -1 = auto)");
+module_param_named(modeset, amdgpu_modeset, int, 0444);
+
 /**
  * DOC: seamless (int)
  * Seamless boot will keep the image on the screen during the boot process.
@@ -2257,6 +2265,12 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
        int ret, retry = 0, i;
        bool supports_atomic = false;
 
+       if ((pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA ||
+           (pdev->class >> 8) == PCI_CLASS_DISPLAY_OTHER) {
+               if (drm_firmware_drivers_only() && amdgpu_modeset == -1)
+                       return -EINVAL;
+       }
+
        /* skip devices which are owned by radeon */
        for (i = 0; i < ARRAY_SIZE(amdgpu_unsupported_pciidlist); i++) {
                if (amdgpu_unsupported_pciidlist[i] == pdev->device)