forked from Minki/linux
drm/i915: Extract skl SAGV checking
Introduce platform dependent SAGV checking in combination with bandwidth state pipe SAGV mask. This is preparation to adding TGL support, which requires different way of SAGV checking. v2, v3, v4, v5, v6: Fix rebase conflict v7: - Nuke icl specific function, use skl for icl as well, gen specific active_pipes check to be added in the next patch(Ville) v8: - Use more generic intel_crtc_can_enable_sagv for checking(Ville) Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200513093816.11466-3-stanislav.lisovskiy@intel.com
This commit is contained in:
parent
d9162348db
commit
1d0a6c8486
@ -3804,7 +3804,7 @@ void intel_sagv_post_plane_update(struct intel_atomic_state *state)
|
|||||||
intel_enable_sagv(dev_priv);
|
intel_enable_sagv(dev_priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool intel_crtc_can_enable_sagv(const struct intel_crtc_state *crtc_state)
|
static bool skl_crtc_can_enable_sagv(const struct intel_crtc_state *crtc_state)
|
||||||
{
|
{
|
||||||
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
|
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
|
||||||
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||||
@ -3853,6 +3853,11 @@ static bool intel_crtc_can_enable_sagv(const struct intel_crtc_state *crtc_state
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool intel_crtc_can_enable_sagv(const struct intel_crtc_state *crtc_state)
|
||||||
|
{
|
||||||
|
return skl_crtc_can_enable_sagv(crtc_state);
|
||||||
|
}
|
||||||
|
|
||||||
bool intel_can_enable_sagv(const struct intel_bw_state *bw_state)
|
bool intel_can_enable_sagv(const struct intel_bw_state *bw_state)
|
||||||
{
|
{
|
||||||
if (bw_state->active_pipes && !is_power_of_2(bw_state->active_pipes))
|
if (bw_state->active_pipes && !is_power_of_2(bw_state->active_pipes))
|
||||||
@ -3865,7 +3870,7 @@ static int intel_compute_sagv_mask(struct intel_atomic_state *state)
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct intel_crtc *crtc;
|
struct intel_crtc *crtc;
|
||||||
struct intel_crtc_state *new_crtc_state;
|
const struct intel_crtc_state *new_crtc_state;
|
||||||
struct intel_bw_state *new_bw_state = NULL;
|
struct intel_bw_state *new_bw_state = NULL;
|
||||||
const struct intel_bw_state *old_bw_state = NULL;
|
const struct intel_bw_state *old_bw_state = NULL;
|
||||||
int i;
|
int i;
|
||||||
@ -3889,6 +3894,7 @@ static int intel_compute_sagv_mask(struct intel_atomic_state *state)
|
|||||||
|
|
||||||
new_bw_state->active_pipes =
|
new_bw_state->active_pipes =
|
||||||
intel_calc_active_pipes(state, old_bw_state->active_pipes);
|
intel_calc_active_pipes(state, old_bw_state->active_pipes);
|
||||||
|
|
||||||
if (new_bw_state->active_pipes != old_bw_state->active_pipes) {
|
if (new_bw_state->active_pipes != old_bw_state->active_pipes) {
|
||||||
ret = intel_atomic_lock_global_state(&new_bw_state->base);
|
ret = intel_atomic_lock_global_state(&new_bw_state->base);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
Loading…
Reference in New Issue
Block a user