Bug 61671

Summary: i915 silently fails to load on generation >= 6 gpus with nomodeset
Product: Drivers Reporter: Sylvia Else (sylviabz832)
Component: Video(DRI - Intel)Assignee: intel-gfx-bugs (intel-gfx-bugs)
Status: RESOLVED INVALID    
Severity: normal CC: chris, daniel, intel-gfx-bugs
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 3.10.12 Subsystem:
Regression: No Bisected commit-id:

Description Sylvia Else 2013-09-19 11:51:49 UTC
It appears that i915 cannot function without modeset on generation >= 6 gpus, and in that situation the i915_driver_load function returns -ENODEV. If "nomodeset" makes no sense for those gpus, then maybe it should be ignored, but at least an error message would be helpful.
Comment 1 Chris Wilson 2013-09-19 11:59:16 UTC
You request nomodeset, you get nomodeset. Where is the failure in expectations?
Comment 2 Sylvia Else 2013-09-19 12:18:43 UTC
The failure in expectation is that the driver will run, but not modeset, not that the driver will just bail out without comment.

It's not as if most people actually ever write a kernel command line. The command line is supplied to them as part of the software they've installed. There may be a valid reason for i915 not loading if nomodeset is specified, but a simple one line message stating the reason would give people a chance to seek help as to the real problem, rather than obscure things like

[2.317467] [drm:drm_pci_agp_init] *ERROR* Cannot initialize the agpgart module.
[2.317529] DRM: Fill_in_dev failed.

which is what they get now.
Comment 3 Chris Wilson 2013-09-19 12:24:55 UTC
But you disable the entire driver? Just exactly what miracles are you expecting?
Comment 4 Daniel Vetter 2013-09-19 12:28:30 UTC
To elaborate: There is not non-kms driver available for your platform. Never was.

If your distro sets this, then the kernel/gfx maintainers of your distro better know what they're doing. That btw applies in general to setting random options for i915 - the defaults are there usually for good reasons.
Comment 5 Jani Nikula 2013-09-19 13:59:35 UTC
Well, since there's plenty of old, ill-advised tips out there to try nomodeset, we could just do something along the lines of:

diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index be5120f7..70499e5 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1468,8 +1468,11 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
 	info = (struct intel_device_info *) flags;
 
 	/* Refuse to load on gen6+ without kms enabled. */
-	if (info->gen >= 6 && !drm_core_check_feature(dev, DRIVER_MODESET))
+	if (info->gen >= 6 && !drm_core_check_feature(dev, DRIVER_MODESET)) {
+		DRM_INFO("This hardware requires kernel modesetting (KMS).\n"
+			 "See CONFIG_DRM_I915_KMS, nomodeset, and/or i915.modeset parameters.\n");
 		return -ENODEV;
+	}
 
 	/* i915 has 4 more counters */
 	dev->counters += 4;
Comment 6 Sylvia Else 2013-09-20 01:50:13 UTC
That seems a sensible solution, and once there is a definite error message, stuff can be posted to forums explaining what that message means for the uninformed, and will hopefully be found on a Google search.