On Thu, 15 May 2014 10:55:41 +0100 Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> wrote: > In the move over to use BIOS connector configs, we lost the ability to > force a specific set of connectors on or off. Try to remedy that by > dropping back to the old behavior if we detect a hard coded connector > config that tries to enable a connector (disabling is easy!). > > Based on earlier patches by Jesse Barnes. > > v2: Remove Jesse's patch > > Reported-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: Jesse Barnes <jbarnes@xxxxxxxxxxxxxxxx> > Cc: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_fbdev.c | 35 +++++++++++++---------------------- > 1 file changed, 13 insertions(+), 22 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c > index f5821c0..cc2dd5e 100644 > --- a/drivers/gpu/drm/i915/intel_fbdev.c > +++ b/drivers/gpu/drm/i915/intel_fbdev.c > @@ -306,24 +306,6 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, > int num_connectors_enabled = 0; > int num_connectors_detected = 0; > > - /* > - * If the user specified any force options, just bail here > - * and use that config. > - */ > - for (i = 0; i < fb_helper->connector_count; i++) { > - struct drm_fb_helper_connector *fb_conn; > - struct drm_connector *connector; > - > - fb_conn = fb_helper->connector_info[i]; > - connector = fb_conn->connector; > - > - if (!enabled[i]) > - continue; > - > - if (connector->force != DRM_FORCE_UNSPECIFIED) > - return false; > - } > - > save_enabled = kcalloc(dev->mode_config.num_connector, sizeof(bool), > GFP_KERNEL); > if (!save_enabled) > @@ -349,8 +331,18 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, > continue; > } > > + if (connector->force == DRM_FORCE_OFF) { > + DRM_DEBUG_KMS("connector %s is disabled by user, skipping\n", > + drm_get_connector_name(connector)); > + enabled[i] = false; > + continue; > + } > + > encoder = connector->encoder; > if (!encoder || WARN_ON(!encoder->crtc)) { > + if (connector->force > DRM_FORCE_OFF) > + goto bail; > + > DRM_DEBUG_KMS("connector %s has no encoder or crtc, skipping\n", > drm_get_connector_name(connector)); > enabled[i] = false; > @@ -369,8 +361,7 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, > for (j = 0; j < fb_helper->connector_count; j++) { > if (crtcs[j] == new_crtc) { > DRM_DEBUG_KMS("fallback: cloned configuration\n"); > - fallback = true; > - goto out; > + goto bail; > } > } > > @@ -418,7 +409,7 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, > } > crtcs[i] = new_crtc; > > - DRM_DEBUG_KMS("connector %s on pipe %d [CRTC:%d]: %dx%d%s\n", > + DRM_DEBUG_KMS("connector %s on pipe %c [CRTC:%d]: %dx%d%s\n", > drm_get_connector_name(connector), > pipe_name(to_intel_crtc(encoder->crtc)->pipe), > encoder->crtc->base.id, > @@ -441,8 +432,8 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper, > fallback = true; > } > > -out: > if (fallback) { > +bail: > DRM_DEBUG_KMS("Not using firmware configuration\n"); > memcpy(enabled, save_enabled, dev->mode_config.num_connector); > kfree(save_enabled); Could use a few more comments, e.g. the > DRM_FORCE_OFF, but not a blocker: Reviewed-by: Jesse Barnes <jbarnes@xxxxxxxxxxxxxxxx> -- Jesse Barnes, Intel Open Source Technology Center _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx