Commit 05e8155a authored by Ville Syrjälä's avatar Ville Syrjälä

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: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200225171125.28885-5-ville.syrjala@linux.intel.comReviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
parent 06812bd9
...@@ -3833,7 +3833,7 @@ static u16 intel_get_ddb_size(struct drm_i915_private *dev_priv) ...@@ -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[] = ...@@ -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[] = ...@@ -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, ...@@ -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, ...@@ -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.
......
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