aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2016-12-20 10:39:02 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-01-19 14:18:06 -0500
commit5bdb57418845ce068cd5272fbfc15d6ec6a94c7f (patch)
tree0a74a1919146a64aa053efd8d73fe3832cd0d8fe /drivers/gpu/drm
parent699fbc4cb7d4ba30865f978750f0364cebabb31c (diff)
drm/i915: Move the min_pixclk[] handling to the end of readout
commit 00b2b7288299a8c73c0c37b531a075ba5c849e67 upstream. Trying to determine the pixel rate of the pipe can't be done until we know the clock, which means it can't be done until the encoder .get_config() hooks have been called. So let's move the min_pixclk[] stuff to the end of intel_modeset_readout_hw_state() when we actually have gathered all the required infromation. Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Cc: Mika Kahola <mika.kahola@intel.com> Cc: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com> Fixes: 565602d7501a ("drm/i915: Do not acquire crtc state to check clock during modeset, v4.") Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20161220153902.15621-1-ville.syrjala@linux.intel.com Reviewed-by: Ander Conselvan de Oliveira <conselvan2@gmail.com> Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> (cherry picked from commit aca1ebf491518910df156f3dab6a66306bb52e28) Signed-off-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index c9e83f39ec0a..869b29fe9ec4 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -16749,7 +16749,6 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
16749 16749
16750 for_each_intel_crtc(dev, crtc) { 16750 for_each_intel_crtc(dev, crtc) {
16751 struct intel_crtc_state *crtc_state = crtc->config; 16751 struct intel_crtc_state *crtc_state = crtc->config;
16752 int pixclk = 0;
16753 16752
16754 __drm_atomic_helper_crtc_destroy_state(&crtc_state->base); 16753 __drm_atomic_helper_crtc_destroy_state(&crtc_state->base);
16755 memset(crtc_state, 0, sizeof(*crtc_state)); 16754 memset(crtc_state, 0, sizeof(*crtc_state));
@@ -16761,23 +16760,9 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
16761 crtc->base.enabled = crtc_state->base.enable; 16760 crtc->base.enabled = crtc_state->base.enable;
16762 crtc->active = crtc_state->base.active; 16761 crtc->active = crtc_state->base.active;
16763 16762
16764 if (crtc_state->base.active) { 16763 if (crtc_state->base.active)
16765 dev_priv->active_crtcs |= 1 << crtc->pipe; 16764 dev_priv->active_crtcs |= 1 << crtc->pipe;
16766 16765
16767 if (INTEL_GEN(dev_priv) >= 9 || IS_BROADWELL(dev_priv))
16768 pixclk = ilk_pipe_pixel_rate(crtc_state);
16769 else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
16770 pixclk = crtc_state->base.adjusted_mode.crtc_clock;
16771 else
16772 WARN_ON(dev_priv->display.modeset_calc_cdclk);
16773
16774 /* pixel rate mustn't exceed 95% of cdclk with IPS on BDW */
16775 if (IS_BROADWELL(dev_priv) && crtc_state->ips_enabled)
16776 pixclk = DIV_ROUND_UP(pixclk * 100, 95);
16777 }
16778
16779 dev_priv->min_pixclk[crtc->pipe] = pixclk;
16780
16781 readout_plane_state(crtc); 16766 readout_plane_state(crtc);
16782 16767
16783 DRM_DEBUG_KMS("[CRTC:%d:%s] hw state readout: %s\n", 16768 DRM_DEBUG_KMS("[CRTC:%d:%s] hw state readout: %s\n",
@@ -16851,6 +16836,8 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
16851 } 16836 }
16852 16837
16853 for_each_intel_crtc(dev, crtc) { 16838 for_each_intel_crtc(dev, crtc) {
16839 int pixclk = 0;
16840
16854 crtc->base.hwmode = crtc->config->base.adjusted_mode; 16841 crtc->base.hwmode = crtc->config->base.adjusted_mode;
16855 16842
16856 memset(&crtc->base.mode, 0, sizeof(crtc->base.mode)); 16843 memset(&crtc->base.mode, 0, sizeof(crtc->base.mode));
@@ -16878,10 +16865,23 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
16878 */ 16865 */
16879 crtc->base.state->mode.private_flags = I915_MODE_FLAG_INHERITED; 16866 crtc->base.state->mode.private_flags = I915_MODE_FLAG_INHERITED;
16880 16867
16868 if (INTEL_GEN(dev_priv) >= 9 || IS_BROADWELL(dev_priv))
16869 pixclk = ilk_pipe_pixel_rate(crtc->config);
16870 else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
16871 pixclk = crtc->config->base.adjusted_mode.crtc_clock;
16872 else
16873 WARN_ON(dev_priv->display.modeset_calc_cdclk);
16874
16875 /* pixel rate mustn't exceed 95% of cdclk with IPS on BDW */
16876 if (IS_BROADWELL(dev_priv) && crtc->config->ips_enabled)
16877 pixclk = DIV_ROUND_UP(pixclk * 100, 95);
16878
16881 drm_calc_timestamping_constants(&crtc->base, &crtc->base.hwmode); 16879 drm_calc_timestamping_constants(&crtc->base, &crtc->base.hwmode);
16882 update_scanline_offset(crtc); 16880 update_scanline_offset(crtc);
16883 } 16881 }
16884 16882
16883 dev_priv->min_pixclk[crtc->pipe] = pixclk;
16884
16885 intel_pipe_config_sanity_check(dev_priv, crtc->config); 16885 intel_pipe_config_sanity_check(dev_priv, crtc->config);
16886 } 16886 }
16887} 16887}