On Thu, Sep 10, 2015 at 06:59:07PM +0300, ville.syrj...@linux.intel.com wrote:
> From: Ville Syrjälä <ville.syrj...@linux.intel.com>
> 
> The dotclock is often calculated in encoder .get_config(), so we
> shouldn't copy the adjusted_mode to hwmode until we have read out the
> dotclock.
> 
> Gets rid of some warnings like these:
> [drm:drm_calc_timestamping_constants [drm]] *ERROR* crtc 21: Can't calculate 
> constants, dotclock = 0!
> [drm:i915_get_vblank_timestamp] crtc 0 is disabled
> 
> v2: Steal Maarten's idea to move crtc->mode etc. assignment too

Tested and looks good. Here's a bug fixed by this patch.

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

Reviewed-by: Patrik Jakobsson <patrik.jakobs...@linux.intel.com>
> 
> Cc: Maarten Lankhorst <maarten.lankho...@linux.intel.com>
> Cc: Patrik Jakobsson <patrik.jakobs...@linux.intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 57 
> +++++++++++++++++++-----------------
>  1 file changed, 30 insertions(+), 27 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c 
> b/drivers/gpu/drm/i915/intel_display.c
> index af48c1e..f5673c8 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -15094,33 +15094,6 @@ static void intel_modeset_readout_hw_state(struct 
> drm_device *dev)
>               crtc->base.state->active = crtc->active;
>               crtc->base.enabled = crtc->active;
>  
> -             memset(&crtc->base.mode, 0, sizeof(crtc->base.mode));
> -             if (crtc->base.state->active) {
> -                     intel_mode_from_pipe_config(&crtc->base.mode, 
> crtc->config);
> -                     
> intel_mode_from_pipe_config(&crtc->base.state->adjusted_mode, crtc->config);
> -                     WARN_ON(drm_atomic_set_mode_for_crtc(crtc->base.state, 
> &crtc->base.mode));
> -
> -                     /*
> -                      * The initial mode needs to be set in order to keep
> -                      * the atomic core happy. It wants a valid mode if the
> -                      * crtc's enabled, so we do the above call.
> -                      *
> -                      * At this point some state updated by the connectors
> -                      * in their ->detect() callback has not run yet, so
> -                      * no recalculation can be done yet.
> -                      *
> -                      * Even if we could do a recalculation and modeset
> -                      * right now it would cause a double modeset if
> -                      * fbdev or userspace chooses a different initial mode.
> -                      *
> -                      * If that happens, someone indicated they wanted a
> -                      * mode change, which means it's safe to do a full
> -                      * recalculation.
> -                      */
> -                     crtc->base.state->mode.private_flags = 
> I915_MODE_FLAG_INHERITED;
> -             }
> -
> -             crtc->base.hwmode = crtc->config->base.adjusted_mode;
>               readout_plane_state(crtc, 
> to_intel_crtc_state(crtc->base.state));
>  
>               DRM_DEBUG_KMS("[CRTC:%d] hw state readout: %s\n",
> @@ -15180,6 +15153,36 @@ static void intel_modeset_readout_hw_state(struct 
> drm_device *dev)
>                             connector->base.name,
>                             connector->base.encoder ? "enabled" : "disabled");
>       }
> +
> +     for_each_intel_crtc(dev, crtc) {
> +             crtc->base.hwmode = crtc->config->base.adjusted_mode;
> +
> +             memset(&crtc->base.mode, 0, sizeof(crtc->base.mode));
> +             if (crtc->base.state->active) {
> +                     intel_mode_from_pipe_config(&crtc->base.mode, 
> crtc->config);
> +                     
> intel_mode_from_pipe_config(&crtc->base.state->adjusted_mode, crtc->config);
> +                     WARN_ON(drm_atomic_set_mode_for_crtc(crtc->base.state, 
> &crtc->base.mode));
> +
> +                     /*
> +                      * The initial mode needs to be set in order to keep
> +                      * the atomic core happy. It wants a valid mode if the
> +                      * crtc's enabled, so we do the above call.
> +                      *
> +                      * At this point some state updated by the connectors
> +                      * in their ->detect() callback has not run yet, so
> +                      * no recalculation can be done yet.
> +                      *
> +                      * Even if we could do a recalculation and modeset
> +                      * right now it would cause a double modeset if
> +                      * fbdev or userspace chooses a different initial mode.
> +                      *
> +                      * If that happens, someone indicated they wanted a
> +                      * mode change, which means it's safe to do a full
> +                      * recalculation.
> +                      */
> +                     crtc->base.state->mode.private_flags = 
> I915_MODE_FLAG_INHERITED;
> +             }
> +     }
>  }
>  
>  /* Scan out the current hw modeset state,
> -- 
> 2.4.6
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to