Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915/gt: Use hw_engine_masks as reset_domains

We need a way to reset engines by their reset domains.
This change sets up way to fetch reset domains of each
engine globally.

Changes since V1:
- Use static reset domain array - Ville and Tvrtko
- Use BUG_ON at appropriate place - Tvrtko

Signed-off-by: Tejas Upadhyay <tejaskumarx.surendrakumar.upadhyay@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211206081026.4024401-1-tejaskumarx.surendrakumar.upadhyay@intel.com

authored by

Tejas Upadhyay and committed by
Rodrigo Vivi
20cddfcc 97c8ef44

+35 -27
+32
drivers/gpu/drm/i915/gt/intel_engine_cs.c
··· 325 325 engine->id = id; 326 326 engine->legacy_idx = INVALID_ENGINE; 327 327 engine->mask = BIT(id); 328 + if (GRAPHICS_VER(gt->i915) >= 11) { 329 + static const u32 engine_reset_domains[] = { 330 + [RCS0] = GEN11_GRDOM_RENDER, 331 + [BCS0] = GEN11_GRDOM_BLT, 332 + [VCS0] = GEN11_GRDOM_MEDIA, 333 + [VCS1] = GEN11_GRDOM_MEDIA2, 334 + [VCS2] = GEN11_GRDOM_MEDIA3, 335 + [VCS3] = GEN11_GRDOM_MEDIA4, 336 + [VCS4] = GEN11_GRDOM_MEDIA5, 337 + [VCS5] = GEN11_GRDOM_MEDIA6, 338 + [VCS6] = GEN11_GRDOM_MEDIA7, 339 + [VCS7] = GEN11_GRDOM_MEDIA8, 340 + [VECS0] = GEN11_GRDOM_VECS, 341 + [VECS1] = GEN11_GRDOM_VECS2, 342 + [VECS2] = GEN11_GRDOM_VECS3, 343 + [VECS3] = GEN11_GRDOM_VECS4, 344 + }; 345 + GEM_BUG_ON(id >= ARRAY_SIZE(engine_reset_domains) || 346 + !engine_reset_domains[id]); 347 + engine->reset_domain = engine_reset_domains[id]; 348 + } else { 349 + static const u32 engine_reset_domains[] = { 350 + [RCS0] = GEN6_GRDOM_RENDER, 351 + [BCS0] = GEN6_GRDOM_BLT, 352 + [VCS0] = GEN6_GRDOM_MEDIA, 353 + [VCS1] = GEN8_GRDOM_MEDIA2, 354 + [VECS0] = GEN6_GRDOM_VECS, 355 + }; 356 + GEM_BUG_ON(id >= ARRAY_SIZE(engine_reset_domains) || 357 + !engine_reset_domains[id]); 358 + engine->reset_domain = engine_reset_domains[id]; 359 + } 328 360 engine->i915 = i915; 329 361 engine->gt = gt; 330 362 engine->uncore = gt->uncore;
+1
drivers/gpu/drm/i915/gt/intel_engine_types.h
··· 318 318 unsigned int guc_id; 319 319 320 320 intel_engine_mask_t mask; 321 + u32 reset_domain; 321 322 /** 322 323 * @logical_mask: logical mask of engine, reported to user space via 323 324 * query IOCTL and used to communicate with the GuC in logical space.
+2 -27
drivers/gpu/drm/i915/gt/intel_reset.c
··· 297 297 intel_engine_mask_t engine_mask, 298 298 unsigned int retry) 299 299 { 300 - static const u32 hw_engine_mask[] = { 301 - [RCS0] = GEN6_GRDOM_RENDER, 302 - [BCS0] = GEN6_GRDOM_BLT, 303 - [VCS0] = GEN6_GRDOM_MEDIA, 304 - [VCS1] = GEN8_GRDOM_MEDIA2, 305 - [VECS0] = GEN6_GRDOM_VECS, 306 - }; 307 300 struct intel_engine_cs *engine; 308 301 u32 hw_mask; 309 302 ··· 307 314 308 315 hw_mask = 0; 309 316 for_each_engine_masked(engine, gt, engine_mask, tmp) { 310 - GEM_BUG_ON(engine->id >= ARRAY_SIZE(hw_engine_mask)); 311 - hw_mask |= hw_engine_mask[engine->id]; 317 + hw_mask |= engine->reset_domain; 312 318 } 313 319 } 314 320 ··· 484 492 intel_engine_mask_t engine_mask, 485 493 unsigned int retry) 486 494 { 487 - static const u32 hw_engine_mask[] = { 488 - [RCS0] = GEN11_GRDOM_RENDER, 489 - [BCS0] = GEN11_GRDOM_BLT, 490 - [VCS0] = GEN11_GRDOM_MEDIA, 491 - [VCS1] = GEN11_GRDOM_MEDIA2, 492 - [VCS2] = GEN11_GRDOM_MEDIA3, 493 - [VCS3] = GEN11_GRDOM_MEDIA4, 494 - [VCS4] = GEN11_GRDOM_MEDIA5, 495 - [VCS5] = GEN11_GRDOM_MEDIA6, 496 - [VCS6] = GEN11_GRDOM_MEDIA7, 497 - [VCS7] = GEN11_GRDOM_MEDIA8, 498 - [VECS0] = GEN11_GRDOM_VECS, 499 - [VECS1] = GEN11_GRDOM_VECS2, 500 - [VECS2] = GEN11_GRDOM_VECS3, 501 - [VECS3] = GEN11_GRDOM_VECS4, 502 - }; 503 495 struct intel_engine_cs *engine; 504 496 intel_engine_mask_t tmp; 505 497 u32 reset_mask, unlock_mask = 0; ··· 494 518 } else { 495 519 reset_mask = 0; 496 520 for_each_engine_masked(engine, gt, engine_mask, tmp) { 497 - GEM_BUG_ON(engine->id >= ARRAY_SIZE(hw_engine_mask)); 498 - reset_mask |= hw_engine_mask[engine->id]; 521 + reset_mask |= engine->reset_domain; 499 522 ret = gen11_lock_sfc(engine, &reset_mask, &unlock_mask); 500 523 if (ret) 501 524 goto sfc_unlock;