Commit 532f7a7f authored by Ville Syrjälä's avatar Ville Syrjälä

drm/i915: Calculate IPS linetime watermark based on future cdclk

Use the cdclk we're going to be using when the pipe gets enabled to
compute the IPS linetime watermark. The current cdclk frequency is
irrelevant at this point since it can still change.

Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1461940278-17122-1-git-send-email-ville.syrjala@linux.intel.comReviewed-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
parent c033666a
...@@ -2012,10 +2012,10 @@ static void ilk_compute_wm_level(const struct drm_i915_private *dev_priv, ...@@ -2012,10 +2012,10 @@ static void ilk_compute_wm_level(const struct drm_i915_private *dev_priv,
} }
static uint32_t static uint32_t
hsw_compute_linetime_wm(struct drm_device *dev, hsw_compute_linetime_wm(const struct intel_crtc_state *cstate)
struct intel_crtc_state *cstate)
{ {
struct drm_i915_private *dev_priv = dev->dev_private; const struct intel_atomic_state *intel_state =
to_intel_atomic_state(cstate->base.state);
const struct drm_display_mode *adjusted_mode = const struct drm_display_mode *adjusted_mode =
&cstate->base.adjusted_mode; &cstate->base.adjusted_mode;
u32 linetime, ips_linetime; u32 linetime, ips_linetime;
...@@ -2024,7 +2024,7 @@ hsw_compute_linetime_wm(struct drm_device *dev, ...@@ -2024,7 +2024,7 @@ hsw_compute_linetime_wm(struct drm_device *dev,
return 0; return 0;
if (WARN_ON(adjusted_mode->crtc_clock == 0)) if (WARN_ON(adjusted_mode->crtc_clock == 0))
return 0; return 0;
if (WARN_ON(dev_priv->cdclk_freq == 0)) if (WARN_ON(intel_state->cdclk == 0))
return 0; return 0;
/* The WM are computed with base on how long it takes to fill a single /* The WM are computed with base on how long it takes to fill a single
...@@ -2033,7 +2033,7 @@ hsw_compute_linetime_wm(struct drm_device *dev, ...@@ -2033,7 +2033,7 @@ hsw_compute_linetime_wm(struct drm_device *dev,
linetime = DIV_ROUND_CLOSEST(adjusted_mode->crtc_htotal * 1000 * 8, linetime = DIV_ROUND_CLOSEST(adjusted_mode->crtc_htotal * 1000 * 8,
adjusted_mode->crtc_clock); adjusted_mode->crtc_clock);
ips_linetime = DIV_ROUND_CLOSEST(adjusted_mode->crtc_htotal * 1000 * 8, ips_linetime = DIV_ROUND_CLOSEST(adjusted_mode->crtc_htotal * 1000 * 8,
dev_priv->cdclk_freq); intel_state->cdclk);
return PIPE_WM_LINETIME_IPS_LINETIME(ips_linetime) | return PIPE_WM_LINETIME_IPS_LINETIME(ips_linetime) |
PIPE_WM_LINETIME_TIME(linetime); PIPE_WM_LINETIME_TIME(linetime);
...@@ -2352,7 +2352,7 @@ static int ilk_compute_pipe_wm(struct intel_crtc_state *cstate) ...@@ -2352,7 +2352,7 @@ static int ilk_compute_pipe_wm(struct intel_crtc_state *cstate)
pipe_wm->wm[0] = pipe_wm->raw_wm[0]; pipe_wm->wm[0] = pipe_wm->raw_wm[0];
if (IS_HASWELL(dev) || IS_BROADWELL(dev)) if (IS_HASWELL(dev) || IS_BROADWELL(dev))
pipe_wm->linetime = hsw_compute_linetime_wm(dev, cstate); pipe_wm->linetime = hsw_compute_linetime_wm(cstate);
if (!ilk_validate_pipe_wm(dev, pipe_wm)) if (!ilk_validate_pipe_wm(dev, pipe_wm))
return -EINVAL; return -EINVAL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment