Commit eaef5b3c authored by Stuart Summers's avatar Stuart Summers Committed by Chris Wilson

drm/i915: Refactor instdone loops on new subslice functions

Refactor instdone loops to use the new intel_sseu_has_subslice
function.
Signed-off-by: default avatarStuart Summers <stuart.summers@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190823160307.180813-10-stuart.summers@intel.com
parent e1210bbf
...@@ -948,6 +948,7 @@ void intel_engine_get_instdone(struct intel_engine_cs *engine, ...@@ -948,6 +948,7 @@ void intel_engine_get_instdone(struct intel_engine_cs *engine,
struct intel_instdone *instdone) struct intel_instdone *instdone)
{ {
struct drm_i915_private *i915 = engine->i915; struct drm_i915_private *i915 = engine->i915;
const struct sseu_dev_info *sseu = &RUNTIME_INFO(i915)->sseu;
struct intel_uncore *uncore = engine->uncore; struct intel_uncore *uncore = engine->uncore;
u32 mmio_base = engine->mmio_base; u32 mmio_base = engine->mmio_base;
int slice; int slice;
...@@ -965,7 +966,7 @@ void intel_engine_get_instdone(struct intel_engine_cs *engine, ...@@ -965,7 +966,7 @@ void intel_engine_get_instdone(struct intel_engine_cs *engine,
instdone->slice_common = instdone->slice_common =
intel_uncore_read(uncore, GEN7_SC_INSTDONE); intel_uncore_read(uncore, GEN7_SC_INSTDONE);
for_each_instdone_slice_subslice(i915, slice, subslice) { for_each_instdone_slice_subslice(i915, sseu, slice, subslice) {
instdone->sampler[slice][subslice] = instdone->sampler[slice][subslice] =
read_subslice_reg(engine, slice, subslice, read_subslice_reg(engine, slice, subslice,
GEN7_SAMPLER_INSTDONE); GEN7_SAMPLER_INSTDONE);
......
...@@ -576,20 +576,18 @@ intel_engine_is_virtual(const struct intel_engine_cs *engine) ...@@ -576,20 +576,18 @@ intel_engine_is_virtual(const struct intel_engine_cs *engine)
return engine->flags & I915_ENGINE_IS_VIRTUAL; return engine->flags & I915_ENGINE_IS_VIRTUAL;
} }
#define instdone_slice_mask(dev_priv__) \ #define instdone_has_slice(dev_priv___, sseu___, slice___) \
(IS_GEN(dev_priv__, 7) ? \ ((IS_GEN(dev_priv___, 7) ? 1 : ((sseu___)->slice_mask)) & BIT(slice___))
1 : RUNTIME_INFO(dev_priv__)->sseu.slice_mask)
#define instdone_has_subslice(dev_priv__, sseu__, slice__, subslice__) \
#define instdone_subslice_mask(dev_priv__) \ (IS_GEN(dev_priv__, 7) ? (1 & BIT(subslice__)) : \
(IS_GEN(dev_priv__, 7) ? \ intel_sseu_has_subslice(sseu__, 0, subslice__))
1 : RUNTIME_INFO(dev_priv__)->sseu.subslice_mask[0])
#define for_each_instdone_slice_subslice(dev_priv_, sseu_, slice_, subslice_) \
#define for_each_instdone_slice_subslice(dev_priv__, slice__, subslice__) \ for ((slice_) = 0, (subslice_) = 0; (slice_) < I915_MAX_SLICES; \
for ((slice__) = 0, (subslice__) = 0; \ (subslice_) = ((subslice_) + 1) % I915_MAX_SUBSLICES, \
(slice__) < I915_MAX_SLICES; \ (slice_) += ((subslice_) == 0)) \
(subslice__) = ((subslice__) + 1) < I915_MAX_SUBSLICES ? (subslice__) + 1 : 0, \ for_each_if((instdone_has_slice(dev_priv_, sseu_, slice_)) && \
(slice__) += ((subslice__) == 0)) \ (instdone_has_subslice(dev_priv_, sseu_, slice_, \
for_each_if((BIT(slice__) & instdone_slice_mask(dev_priv__)) && \ subslice_)))
(BIT(subslice__) & instdone_subslice_mask(dev_priv__)))
#endif /* __INTEL_ENGINE_TYPES_H__ */ #endif /* __INTEL_ENGINE_TYPES_H__ */
...@@ -53,6 +53,7 @@ static bool instdone_unchanged(u32 current_instdone, u32 *old_instdone) ...@@ -53,6 +53,7 @@ static bool instdone_unchanged(u32 current_instdone, u32 *old_instdone)
static bool subunits_stuck(struct intel_engine_cs *engine) static bool subunits_stuck(struct intel_engine_cs *engine)
{ {
struct drm_i915_private *dev_priv = engine->i915; struct drm_i915_private *dev_priv = engine->i915;
const struct sseu_dev_info *sseu = &RUNTIME_INFO(dev_priv)->sseu;
struct intel_instdone instdone; struct intel_instdone instdone;
struct intel_instdone *accu_instdone = &engine->hangcheck.instdone; struct intel_instdone *accu_instdone = &engine->hangcheck.instdone;
bool stuck; bool stuck;
...@@ -71,7 +72,7 @@ static bool subunits_stuck(struct intel_engine_cs *engine) ...@@ -71,7 +72,7 @@ static bool subunits_stuck(struct intel_engine_cs *engine)
stuck &= instdone_unchanged(instdone.slice_common, stuck &= instdone_unchanged(instdone.slice_common,
&accu_instdone->slice_common); &accu_instdone->slice_common);
for_each_instdone_slice_subslice(dev_priv, slice, subslice) { for_each_instdone_slice_subslice(dev_priv, sseu, slice, subslice) {
stuck &= instdone_unchanged(instdone.sampler[slice][subslice], stuck &= instdone_unchanged(instdone.sampler[slice][subslice],
&accu_instdone->sampler[slice][subslice]); &accu_instdone->sampler[slice][subslice]);
stuck &= instdone_unchanged(instdone.row[slice][subslice], stuck &= instdone_unchanged(instdone.row[slice][subslice],
......
...@@ -996,6 +996,7 @@ static void i915_instdone_info(struct drm_i915_private *dev_priv, ...@@ -996,6 +996,7 @@ static void i915_instdone_info(struct drm_i915_private *dev_priv,
struct seq_file *m, struct seq_file *m,
struct intel_instdone *instdone) struct intel_instdone *instdone)
{ {
const struct sseu_dev_info *sseu = &RUNTIME_INFO(dev_priv)->sseu;
int slice; int slice;
int subslice; int subslice;
...@@ -1011,11 +1012,11 @@ static void i915_instdone_info(struct drm_i915_private *dev_priv, ...@@ -1011,11 +1012,11 @@ static void i915_instdone_info(struct drm_i915_private *dev_priv,
if (INTEL_GEN(dev_priv) <= 6) if (INTEL_GEN(dev_priv) <= 6)
return; return;
for_each_instdone_slice_subslice(dev_priv, slice, subslice) for_each_instdone_slice_subslice(dev_priv, sseu, slice, subslice)
seq_printf(m, "\t\tSAMPLER_INSTDONE[%d][%d]: 0x%08x\n", seq_printf(m, "\t\tSAMPLER_INSTDONE[%d][%d]: 0x%08x\n",
slice, subslice, instdone->sampler[slice][subslice]); slice, subslice, instdone->sampler[slice][subslice]);
for_each_instdone_slice_subslice(dev_priv, slice, subslice) for_each_instdone_slice_subslice(dev_priv, sseu, slice, subslice)
seq_printf(m, "\t\tROW_INSTDONE[%d][%d]: 0x%08x\n", seq_printf(m, "\t\tROW_INSTDONE[%d][%d]: 0x%08x\n",
slice, subslice, instdone->row[slice][subslice]); slice, subslice, instdone->row[slice][subslice]);
} }
......
...@@ -421,6 +421,7 @@ static void err_compression_marker(struct drm_i915_error_state_buf *m) ...@@ -421,6 +421,7 @@ static void err_compression_marker(struct drm_i915_error_state_buf *m)
static void error_print_instdone(struct drm_i915_error_state_buf *m, static void error_print_instdone(struct drm_i915_error_state_buf *m,
const struct drm_i915_error_engine *ee) const struct drm_i915_error_engine *ee)
{ {
const struct sseu_dev_info *sseu = &RUNTIME_INFO(m->i915)->sseu;
int slice; int slice;
int subslice; int subslice;
...@@ -436,12 +437,12 @@ static void error_print_instdone(struct drm_i915_error_state_buf *m, ...@@ -436,12 +437,12 @@ static void error_print_instdone(struct drm_i915_error_state_buf *m,
if (INTEL_GEN(m->i915) <= 6) if (INTEL_GEN(m->i915) <= 6)
return; return;
for_each_instdone_slice_subslice(m->i915, slice, subslice) for_each_instdone_slice_subslice(m->i915, sseu, slice, subslice)
err_printf(m, " SAMPLER_INSTDONE[%d][%d]: 0x%08x\n", err_printf(m, " SAMPLER_INSTDONE[%d][%d]: 0x%08x\n",
slice, subslice, slice, subslice,
ee->instdone.sampler[slice][subslice]); ee->instdone.sampler[slice][subslice]);
for_each_instdone_slice_subslice(m->i915, slice, subslice) for_each_instdone_slice_subslice(m->i915, sseu, slice, subslice)
err_printf(m, " ROW_INSTDONE[%d][%d]: 0x%08x\n", err_printf(m, " ROW_INSTDONE[%d][%d]: 0x%08x\n",
slice, subslice, slice, subslice,
ee->instdone.row[slice][subslice]); ee->instdone.row[slice][subslice]);
......
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