drm/i915/icl: Enable 2nd DBuf slice only when needed
ICL has two slices of DBuf, each slice of size 1024 blocks. We should not always enable slice-2. It should be enabled only if display total required BW is > 12GBps OR more than 1 pipes are enabled. Changes since V1: - typecast total_data_rate to u64 before multiplication to solve any possible overflow (Rodrigo) - fix where skl_wm_get_hw_state was memsetting ddb, resulting enabled_slices to become zero - Fix the logic of calculating ddb_size Changes since V2: - If no-crtc is part of commit required_slices will have value "0", don't try to disable DBuf slice. Changes since V3: - Create a generic helper to enable/disable slice - don't return early if total_data_rate is 0, it may be cursor only commit, or atomic modeset without any plane. Changes since V4: - Solve checkpatch warnings - use kernel types u8/u64 instead of uint8_t/uint64_t Changes since V5: - Rebase Signed-off-by: Mahesh Kumar <mahesh1.kumar@intel.com> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20180426142517.16643-3-mahesh1.kumar@intel.com
This commit is contained in:

committed by
Rodrigo Vivi

parent
74bd8004e4
commit
aa9664ffe8
@@ -12258,6 +12258,8 @@ static void skl_update_crtcs(struct drm_atomic_state *state)
|
||||
bool progress;
|
||||
enum pipe pipe;
|
||||
int i;
|
||||
u8 hw_enabled_slices = dev_priv->wm.skl_hw.ddb.enabled_slices;
|
||||
u8 required_slices = intel_state->wm_results.ddb.enabled_slices;
|
||||
|
||||
const struct skl_ddb_entry *entries[I915_MAX_PIPES] = {};
|
||||
|
||||
@@ -12266,6 +12268,10 @@ static void skl_update_crtcs(struct drm_atomic_state *state)
|
||||
if (new_crtc_state->active)
|
||||
entries[i] = &to_intel_crtc_state(old_crtc_state)->wm.skl.ddb;
|
||||
|
||||
/* If 2nd DBuf slice required, enable it here */
|
||||
if (INTEL_GEN(dev_priv) >= 11 && required_slices > hw_enabled_slices)
|
||||
icl_dbuf_slices_update(dev_priv, required_slices);
|
||||
|
||||
/*
|
||||
* Whenever the number of active pipes changes, we need to make sure we
|
||||
* update the pipes in the right order so that their ddb allocations
|
||||
@@ -12316,6 +12322,10 @@ static void skl_update_crtcs(struct drm_atomic_state *state)
|
||||
progress = true;
|
||||
}
|
||||
} while (progress);
|
||||
|
||||
/* If 2nd DBuf slice is no more required disable it */
|
||||
if (INTEL_GEN(dev_priv) >= 11 && required_slices < hw_enabled_slices)
|
||||
icl_dbuf_slices_update(dev_priv, required_slices);
|
||||
}
|
||||
|
||||
static void intel_atomic_helper_free_state(struct drm_i915_private *dev_priv)
|
||||
|
Reference in New Issue
Block a user