Commit 89f2e7ab authored by Matt Roper's avatar Matt Roper

drm/i915/dg2: Report INSTDONE_GEOM values in error state

Xe_HPG adds some additional INSTDONE_GEOM debug registers; the Mesa team
has indicated that having these reported in the error state would be
useful for debugging GPU hangs.  These registers are replicated per-DSS
with gslice steering.

Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
Acked-by: default avatarLionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: default avatarMatt Atwood <matthew.s.atwood@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210805163647.801064-4-matthew.d.roper@intel.com
parent fa9899da
...@@ -1202,6 +1202,13 @@ void intel_engine_get_instdone(const struct intel_engine_cs *engine, ...@@ -1202,6 +1202,13 @@ void intel_engine_get_instdone(const struct intel_engine_cs *engine,
GEN7_ROW_INSTDONE); GEN7_ROW_INSTDONE);
} }
} }
if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 55)) {
for_each_instdone_gslice_dss_xehp(i915, sseu, iter, slice, subslice)
instdone->geom_svg[slice][subslice] =
read_subslice_reg(engine, slice, subslice,
XEHPG_INSTDONE_GEOM_SVG);
}
} else if (GRAPHICS_VER(i915) >= 7) { } else if (GRAPHICS_VER(i915) >= 7) {
instdone->instdone = instdone->instdone =
intel_uncore_read(uncore, RING_INSTDONE(mmio_base)); intel_uncore_read(uncore, RING_INSTDONE(mmio_base));
......
...@@ -69,6 +69,9 @@ struct intel_instdone { ...@@ -69,6 +69,9 @@ struct intel_instdone {
u32 slice_common_extra[2]; u32 slice_common_extra[2];
u32 sampler[GEN_MAX_GSLICES][I915_MAX_SUBSLICES]; u32 sampler[GEN_MAX_GSLICES][I915_MAX_SUBSLICES];
u32 row[GEN_MAX_GSLICES][I915_MAX_SUBSLICES]; u32 row[GEN_MAX_GSLICES][I915_MAX_SUBSLICES];
/* Added in XeHPG */
u32 geom_svg[GEN_MAX_GSLICES][I915_MAX_SUBSLICES];
}; };
/* /*
......
...@@ -431,6 +431,7 @@ static void error_print_instdone(struct drm_i915_error_state_buf *m, ...@@ -431,6 +431,7 @@ static void error_print_instdone(struct drm_i915_error_state_buf *m,
const struct sseu_dev_info *sseu = &ee->engine->gt->info.sseu; const struct sseu_dev_info *sseu = &ee->engine->gt->info.sseu;
int slice; int slice;
int subslice; int subslice;
int iter;
err_printf(m, " INSTDONE: 0x%08x\n", err_printf(m, " INSTDONE: 0x%08x\n",
ee->instdone.instdone); ee->instdone.instdone);
...@@ -445,8 +446,6 @@ static void error_print_instdone(struct drm_i915_error_state_buf *m, ...@@ -445,8 +446,6 @@ static void error_print_instdone(struct drm_i915_error_state_buf *m,
return; return;
if (GRAPHICS_VER_FULL(m->i915) >= IP_VER(12, 50)) { if (GRAPHICS_VER_FULL(m->i915) >= IP_VER(12, 50)) {
int iter;
for_each_instdone_gslice_dss_xehp(m->i915, sseu, iter, slice, subslice) for_each_instdone_gslice_dss_xehp(m->i915, sseu, iter, 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,
...@@ -471,6 +470,13 @@ static void error_print_instdone(struct drm_i915_error_state_buf *m, ...@@ -471,6 +470,13 @@ static void error_print_instdone(struct drm_i915_error_state_buf *m,
if (GRAPHICS_VER(m->i915) < 12) if (GRAPHICS_VER(m->i915) < 12)
return; return;
if (GRAPHICS_VER_FULL(m->i915) >= IP_VER(12, 55)) {
for_each_instdone_gslice_dss_xehp(m->i915, sseu, iter, slice, subslice)
err_printf(m, " GEOM_SVGUNIT_INSTDONE[%d][%d]: 0x%08x\n",
slice, subslice,
ee->instdone.geom_svg[slice][subslice]);
}
err_printf(m, " SC_INSTDONE_EXTRA: 0x%08x\n", err_printf(m, " SC_INSTDONE_EXTRA: 0x%08x\n",
ee->instdone.slice_common_extra[0]); ee->instdone.slice_common_extra[0]);
err_printf(m, " SC_INSTDONE_EXTRA2: 0x%08x\n", err_printf(m, " SC_INSTDONE_EXTRA2: 0x%08x\n",
......
...@@ -2695,6 +2695,7 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg) ...@@ -2695,6 +2695,7 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg)
#define GEN12_SC_INSTDONE_EXTRA2 _MMIO(0x7108) #define GEN12_SC_INSTDONE_EXTRA2 _MMIO(0x7108)
#define GEN7_SAMPLER_INSTDONE _MMIO(0xe160) #define GEN7_SAMPLER_INSTDONE _MMIO(0xe160)
#define GEN7_ROW_INSTDONE _MMIO(0xe164) #define GEN7_ROW_INSTDONE _MMIO(0xe164)
#define XEHPG_INSTDONE_GEOM_SVG _MMIO(0x666c)
#define MCFG_MCR_SELECTOR _MMIO(0xfd0) #define MCFG_MCR_SELECTOR _MMIO(0xfd0)
#define SF_MCR_SELECTOR _MMIO(0xfd8) #define SF_MCR_SELECTOR _MMIO(0xfd8)
#define GEN8_MCR_SELECTOR _MMIO(0xfdc) #define GEN8_MCR_SELECTOR _MMIO(0xfdc)
......
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