@@ -4749,10 +4749,9 @@ static int __lrc_timestamp(const struct lrc_timestamp *arg, bool preempt)
return err;
}
-static int live_lrc_timestamp(void *arg)
+static int __live_lrc_timestamp(struct intel_gt *gt, bool rcs)
{
struct lrc_timestamp data = {};
- struct intel_gt *gt = arg;
enum intel_engine_id id;
const u32 poison[] = {
0,
@@ -4774,6 +4773,12 @@ static int live_lrc_timestamp(void *arg)
unsigned long heartbeat;
int i, err = 0;
+ if (rcs && data.engine->class != RENDER_CLASS)
+ continue;
+
+ if (!rcs && data.engine->class == RENDER_CLASS)
+ continue;
+
engine_heartbeat_disable(data.engine, &heartbeat);
for (i = 0; i < ARRAY_SIZE(data.ce); i++) {
@@ -4825,6 +4830,20 @@ static int live_lrc_timestamp(void *arg)
return 0;
}
+static int live_lrc_timestamp_rcs(void *arg)
+{
+ struct intel_gt *gt = arg;
+
+ return __live_lrc_timestamp(gt, true);
+}
+
+static int live_lrc_timestamp_xcs(void *arg)
+{
+ struct intel_gt *gt = arg;
+
+ return __live_lrc_timestamp(gt, false);
+}
+
static struct i915_vma *
create_user_vma(struct i915_address_space *vm, unsigned long size)
{
@@ -5748,7 +5767,8 @@ int intel_lrc_live_selftests(struct drm_i915_private *i915)
SUBTEST(live_lrc_state),
SUBTEST(live_lrc_gpr),
SUBTEST(live_lrc_indirect_ctx_bb),
- SUBTEST(live_lrc_timestamp),
+ SUBTEST(live_lrc_timestamp_rcs),
+ SUBTEST(live_lrc_timestamp_xcs),
SUBTEST(live_lrc_garbage),
SUBTEST(live_pphwsp_runtime),
SUBTEST(live_lrc_isolation),
We use different workarounds for render engine than for other engines. Split the selftest according to these types so that we get error rates per workaround. Signed-off-by: Mika Kuoppala <mika.kuoppala@linux.intel.com> --- drivers/gpu/drm/i915/gt/selftest_lrc.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-)