drm/i915: Use a sentinel to terminate the dbuf slice arrays
Make life a bit simpler by sticking a sentinel at the end of the dbuf slice arrays. This way we don't need to pass in the size. Also unify the types (u8 vs. u32) for active_pipes. Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200225171125.28885-5-ville.syrjala@linux.intel.com Reviewed-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
parent
06812bd9ac
commit
05e8155afe
1 changed files with 13 additions and 21 deletions
|
@ -3833,7 +3833,7 @@ static u16 intel_get_ddb_size(struct drm_i915_private *dev_priv)
|
||||||
}
|
}
|
||||||
|
|
||||||
static u8 skl_compute_dbuf_slices(const struct intel_crtc_state *crtc_state,
|
static u8 skl_compute_dbuf_slices(const struct intel_crtc_state *crtc_state,
|
||||||
u32 active_pipes);
|
u8 active_pipes);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
skl_ddb_get_pipe_allocation_limits(struct drm_i915_private *dev_priv,
|
skl_ddb_get_pipe_allocation_limits(struct drm_i915_private *dev_priv,
|
||||||
|
@ -4218,6 +4218,7 @@ static const struct dbuf_slice_conf_entry icl_allowed_dbufs[] =
|
||||||
[PIPE_C] = BIT(DBUF_S2),
|
[PIPE_C] = BIT(DBUF_S2),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -4340,16 +4341,15 @@ static const struct dbuf_slice_conf_entry tgl_allowed_dbufs[] =
|
||||||
[PIPE_D] = BIT(DBUF_S2),
|
[PIPE_D] = BIT(DBUF_S2),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
static u8 compute_dbuf_slices(enum pipe pipe,
|
static u8 compute_dbuf_slices(enum pipe pipe, u8 active_pipes,
|
||||||
u32 active_pipes,
|
const struct dbuf_slice_conf_entry *dbuf_slices)
|
||||||
const struct dbuf_slice_conf_entry *dbuf_slices,
|
|
||||||
int size)
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < size; i++) {
|
for (i = 0; i < dbuf_slices[i].active_pipes; i++) {
|
||||||
if (dbuf_slices[i].active_pipes == active_pipes)
|
if (dbuf_slices[i].active_pipes == active_pipes)
|
||||||
return dbuf_slices[i].dbuf_mask[pipe];
|
return dbuf_slices[i].dbuf_mask[pipe];
|
||||||
}
|
}
|
||||||
|
@ -4361,8 +4361,7 @@ static u8 compute_dbuf_slices(enum pipe pipe,
|
||||||
* returns correspondent DBuf slice mask as stated in BSpec for particular
|
* returns correspondent DBuf slice mask as stated in BSpec for particular
|
||||||
* platform.
|
* platform.
|
||||||
*/
|
*/
|
||||||
static u32 icl_compute_dbuf_slices(enum pipe pipe,
|
static u8 icl_compute_dbuf_slices(enum pipe pipe, u8 active_pipes)
|
||||||
u32 active_pipes)
|
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* FIXME: For ICL this is still a bit unclear as prev BSpec revision
|
* FIXME: For ICL this is still a bit unclear as prev BSpec revision
|
||||||
|
@ -4376,32 +4375,25 @@ static u32 icl_compute_dbuf_slices(enum pipe pipe,
|
||||||
* still here - we will need it once those additional constraints
|
* still here - we will need it once those additional constraints
|
||||||
* pop up.
|
* pop up.
|
||||||
*/
|
*/
|
||||||
return compute_dbuf_slices(pipe, active_pipes,
|
return compute_dbuf_slices(pipe, active_pipes, icl_allowed_dbufs);
|
||||||
icl_allowed_dbufs,
|
|
||||||
ARRAY_SIZE(icl_allowed_dbufs));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 tgl_compute_dbuf_slices(enum pipe pipe,
|
static u8 tgl_compute_dbuf_slices(enum pipe pipe, u8 active_pipes)
|
||||||
u32 active_pipes)
|
|
||||||
{
|
{
|
||||||
return compute_dbuf_slices(pipe, active_pipes,
|
return compute_dbuf_slices(pipe, active_pipes, tgl_allowed_dbufs);
|
||||||
tgl_allowed_dbufs,
|
|
||||||
ARRAY_SIZE(tgl_allowed_dbufs));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static u8 skl_compute_dbuf_slices(const struct intel_crtc_state *crtc_state,
|
static u8 skl_compute_dbuf_slices(const struct intel_crtc_state *crtc_state,
|
||||||
u32 active_pipes)
|
u8 active_pipes)
|
||||||
{
|
{
|
||||||
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);
|
||||||
enum pipe pipe = crtc->pipe;
|
enum pipe pipe = crtc->pipe;
|
||||||
|
|
||||||
if (IS_GEN(dev_priv, 12))
|
if (IS_GEN(dev_priv, 12))
|
||||||
return tgl_compute_dbuf_slices(pipe,
|
return tgl_compute_dbuf_slices(pipe, active_pipes);
|
||||||
active_pipes);
|
|
||||||
else if (IS_GEN(dev_priv, 11))
|
else if (IS_GEN(dev_priv, 11))
|
||||||
return icl_compute_dbuf_slices(pipe,
|
return icl_compute_dbuf_slices(pipe, active_pipes);
|
||||||
active_pipes);
|
|
||||||
/*
|
/*
|
||||||
* For anything else just return one slice yet.
|
* For anything else just return one slice yet.
|
||||||
* Should be extended for other platforms.
|
* Should be extended for other platforms.
|
||||||
|
|
Loading…
Add table
Reference in a new issue