Skip to content

Commit

Permalink
drm/i915: Decouple cdclk calculation from modeset checks
Browse files Browse the repository at this point in the history
We need to calculate cdclk after watermarks/ddb has been calculated
as with recent hw CDCLK needs to be adjusted accordingly to DBuf
requirements, which is not possible with current code organization.

Setting CDCLK according to DBuf BW requirements and not just rejecting
if it doesn't satisfy BW requirements, will allow us to save power when
it is possible and gain additional bandwidth when it's needed - i.e
boosting both our power management and perfomance capabilities.

This patch is preparation for that, first we now extract modeset
calculation from modeset checks, in order to call it after wm/ddb
has been calculated.

v2: - Extract only intel_modeset_calc_cdclk from intel_modeset_checks
      (Ville Syrjälä)

v3: - Clear plls after intel_modeset_calc_cdclk

v4: - Added r-b from previous revision to commit message

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200519131117.17190-2-stanislav.lisovskiy@intel.com
  • Loading branch information
Stanislav Lisovskiy authored and Manasi Navare committed May 21, 2020
1 parent aedbe0a commit c93b9b2
Showing 1 changed file with 12 additions and 10 deletions.
22 changes: 12 additions & 10 deletions drivers/gpu/drm/i915/display/intel_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -14567,12 +14567,6 @@ static int intel_modeset_checks(struct intel_atomic_state *state)
return ret;
}

ret = intel_modeset_calc_cdclk(state);
if (ret)
return ret;

intel_modeset_clear_plls(state);

if (IS_HASWELL(dev_priv))
return hsw_mode_set_planes_workaround(state);

Expand Down Expand Up @@ -14904,10 +14898,6 @@ static int intel_atomic_check(struct drm_device *dev,
goto fail;
}

ret = intel_atomic_check_crtcs(state);
if (ret)
goto fail;

intel_fbc_choose_crtc(dev_priv, state);
ret = calc_watermark_data(state);
if (ret)
Expand All @@ -14917,6 +14907,18 @@ static int intel_atomic_check(struct drm_device *dev,
if (ret)
goto fail;

if (any_ms) {
ret = intel_modeset_calc_cdclk(state);
if (ret)
return ret;

intel_modeset_clear_plls(state);
}

ret = intel_atomic_check_crtcs(state);
if (ret)
goto fail;

for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
new_crtc_state, i) {
if (!needs_modeset(new_crtc_state) &&
Expand Down

0 comments on commit c93b9b2

Please sign in to comment.