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

drm/i915/sseu: Move sseu_info under gt_info

SSEUs are a GT capability, so track them under gt_info.

Signed-off-by: Venkata Sandeep Dhanalakota <venkata.s.dhanalakota@intel.com>
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Andi Shyti <andi.shyti@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20200708003952.21831-8-daniele.ceraolospurio@intel.com

authored by

Venkata Sandeep Dhanalakota and committed by
Chris Wilson
0b6613c6 9b413f01

+49 -46
+4 -3
drivers/gpu/drm/i915/gem/i915_gem_context.c
··· 1400 1400 } 1401 1401 1402 1402 int 1403 - i915_gem_user_to_context_sseu(struct drm_i915_private *i915, 1403 + i915_gem_user_to_context_sseu(struct intel_gt *gt, 1404 1404 const struct drm_i915_gem_context_param_sseu *user, 1405 1405 struct intel_sseu *context) 1406 1406 { 1407 - const struct sseu_dev_info *device = &RUNTIME_INFO(i915)->sseu; 1407 + const struct sseu_dev_info *device = &gt->info.sseu; 1408 + struct drm_i915_private *i915 = gt->i915; 1408 1409 1409 1410 /* No zeros in any field. */ 1410 1411 if (!user->slice_mask || !user->subslice_mask || ··· 1538 1537 goto out_ce; 1539 1538 } 1540 1539 1541 - ret = i915_gem_user_to_context_sseu(i915, &user_sseu, &sseu); 1540 + ret = i915_gem_user_to_context_sseu(ce->engine->gt, &user_sseu, &sseu); 1542 1541 if (ret) 1543 1542 goto out_ce; 1544 1543
+1 -1
drivers/gpu/drm/i915/gem/i915_gem_context.h
··· 225 225 struct i915_lut_handle *i915_lut_handle_alloc(void); 226 226 void i915_lut_handle_free(struct i915_lut_handle *lut); 227 227 228 - int i915_gem_user_to_context_sseu(struct drm_i915_private *i915, 228 + int i915_gem_user_to_context_sseu(struct intel_gt *gt, 229 229 const struct drm_i915_gem_context_param_sseu *user, 230 230 struct intel_sseu *context); 231 231
+4 -1
drivers/gpu/drm/i915/gem/selftests/i915_gem_context.c
··· 1229 1229 int inst = 0; 1230 1230 int ret = 0; 1231 1231 1232 - if (INTEL_GEN(i915) < 9 || !RUNTIME_INFO(i915)->sseu.has_slice_pg) 1232 + if (INTEL_GEN(i915) < 9) 1233 1233 return 0; 1234 1234 1235 1235 if (flags & TEST_RESET) ··· 1253 1253 break; 1254 1254 1255 1255 if (hweight32(engine->sseu.slice_mask) < 2) 1256 + continue; 1257 + 1258 + if (!engine->gt->info.sseu.has_slice_pg) 1256 1259 continue; 1257 1260 1258 1261 /*
+1 -1
drivers/gpu/drm/i915/gt/intel_context_sseu.c
··· 30 30 *cs++ = MI_STORE_DWORD_IMM_GEN4 | MI_USE_GGTT; 31 31 *cs++ = lower_32_bits(offset); 32 32 *cs++ = upper_32_bits(offset); 33 - *cs++ = intel_sseu_make_rpcs(rq->engine->i915, &sseu); 33 + *cs++ = intel_sseu_make_rpcs(rq->engine->gt, &sseu); 34 34 35 35 intel_ring_advance(rq, cs); 36 36
+2 -2
drivers/gpu/drm/i915/gt/intel_engine_cs.c
··· 709 709 710 710 /* Use the whole device by default */ 711 711 engine->sseu = 712 - intel_sseu_from_device_info(&RUNTIME_INFO(engine->i915)->sseu); 712 + intel_sseu_from_device_info(&engine->gt->info.sseu); 713 713 714 714 intel_engine_init_workarounds(engine); 715 715 intel_engine_init_whitelist(engine); ··· 1075 1075 struct intel_instdone *instdone) 1076 1076 { 1077 1077 struct drm_i915_private *i915 = engine->i915; 1078 - const struct sseu_dev_info *sseu = &RUNTIME_INFO(i915)->sseu; 1078 + const struct sseu_dev_info *sseu = &engine->gt->info.sseu; 1079 1079 struct intel_uncore *uncore = engine->uncore; 1080 1080 u32 mmio_base = engine->mmio_base; 1081 1081 int slice;
+2
drivers/gpu/drm/i915/gt/intel_gt.c
··· 655 655 struct drm_printer *p) 656 656 { 657 657 drm_printf(p, "available engines: %x\n", info->engine_mask); 658 + 659 + intel_sseu_dump(&info->sseu, p); 658 660 }
+3
drivers/gpu/drm/i915/gt/intel_gt_types.h
··· 116 116 117 117 /* Media engine access to SFC per instance */ 118 118 u8 vdbox_sfc_access; 119 + 120 + /* Slice/subslice/EU info */ 121 + struct sseu_dev_info sseu; 119 122 } info; 120 123 }; 121 124
+1 -1
drivers/gpu/drm/i915/gt/intel_lrc.c
··· 3422 3422 /* RPCS */ 3423 3423 if (engine->class == RENDER_CLASS) { 3424 3424 regs[CTX_R_PWR_CLK_STATE] = 3425 - intel_sseu_make_rpcs(engine->i915, &ce->sseu); 3425 + intel_sseu_make_rpcs(engine->gt, &ce->sseu); 3426 3426 3427 3427 i915_oa_init_reg_state(ce, engine); 3428 3428 }
+2 -1
drivers/gpu/drm/i915/gt/intel_rps.c
··· 1062 1062 static int chv_rps_max_freq(struct intel_rps *rps) 1063 1063 { 1064 1064 struct drm_i915_private *i915 = rps_to_i915(rps); 1065 + struct intel_gt *gt = rps_to_gt(rps); 1065 1066 u32 val; 1066 1067 1067 1068 val = vlv_punit_read(i915, FB_GFX_FMAX_AT_VMAX_FUSE); 1068 1069 1069 - switch (RUNTIME_INFO(i915)->sseu.eu_total) { 1070 + switch (gt->info.sseu.eu_total) { 1070 1071 case 8: 1071 1072 /* (2 * 4) config */ 1072 1073 val >>= FB_GFX_FMAX_AT_VMAX_2SS4EU_FUSE_SHIFT;
+10 -9
drivers/gpu/drm/i915/gt/intel_sseu.c
··· 128 128 129 129 static void gen12_sseu_info_init(struct intel_gt *gt) 130 130 { 131 - struct sseu_dev_info *sseu = &RUNTIME_INFO(gt->i915)->sseu; 131 + struct sseu_dev_info *sseu = &gt->info.sseu; 132 132 struct intel_uncore *uncore = gt->uncore; 133 133 u32 dss_en; 134 134 u16 eu_en = 0; ··· 163 163 164 164 static void gen11_sseu_info_init(struct intel_gt *gt) 165 165 { 166 - struct sseu_dev_info *sseu = &RUNTIME_INFO(gt->i915)->sseu; 166 + struct sseu_dev_info *sseu = &gt->info.sseu; 167 167 struct intel_uncore *uncore = gt->uncore; 168 168 u32 ss_en; 169 169 u8 eu_en; ··· 192 192 static void gen10_sseu_info_init(struct intel_gt *gt) 193 193 { 194 194 struct intel_uncore *uncore = gt->uncore; 195 - struct sseu_dev_info *sseu = &RUNTIME_INFO(gt->i915)->sseu; 195 + struct sseu_dev_info *sseu = &gt->info.sseu; 196 196 const u32 fuse2 = intel_uncore_read(uncore, GEN8_FUSE2); 197 197 const int eu_mask = 0xff; 198 198 u32 subslice_mask, eu_en; ··· 268 268 269 269 static void cherryview_sseu_info_init(struct intel_gt *gt) 270 270 { 271 - struct sseu_dev_info *sseu = &RUNTIME_INFO(gt->i915)->sseu; 271 + struct sseu_dev_info *sseu = &gt->info.sseu; 272 272 u32 fuse; 273 273 u8 subslice_mask = 0; 274 274 ··· 325 325 { 326 326 struct drm_i915_private *i915 = gt->i915; 327 327 struct intel_device_info *info = mkwrite_device_info(i915); 328 - struct sseu_dev_info *sseu = &RUNTIME_INFO(i915)->sseu; 328 + struct sseu_dev_info *sseu = &gt->info.sseu; 329 329 struct intel_uncore *uncore = gt->uncore; 330 330 u32 fuse2, eu_disable, subslice_mask; 331 331 const u8 eu_mask = 0xff; ··· 430 430 431 431 static void bdw_sseu_info_init(struct intel_gt *gt) 432 432 { 433 - struct sseu_dev_info *sseu = &RUNTIME_INFO(gt->i915)->sseu; 433 + struct sseu_dev_info *sseu = &gt->info.sseu; 434 434 struct intel_uncore *uncore = gt->uncore; 435 435 int s, ss; 436 436 u32 fuse2, subslice_mask, eu_disable[3]; /* s_max */ ··· 516 516 static void hsw_sseu_info_init(struct intel_gt *gt) 517 517 { 518 518 struct drm_i915_private *i915 = gt->i915; 519 - struct sseu_dev_info *sseu = &RUNTIME_INFO(gt->i915)->sseu; 519 + struct sseu_dev_info *sseu = &gt->info.sseu; 520 520 u32 fuse1; 521 521 u8 subslice_mask = 0; 522 522 int s, ss; ··· 601 601 gen12_sseu_info_init(gt); 602 602 } 603 603 604 - u32 intel_sseu_make_rpcs(struct drm_i915_private *i915, 604 + u32 intel_sseu_make_rpcs(struct intel_gt *gt, 605 605 const struct intel_sseu *req_sseu) 606 606 { 607 - const struct sseu_dev_info *sseu = &RUNTIME_INFO(i915)->sseu; 607 + struct drm_i915_private *i915 = gt->i915; 608 + const struct sseu_dev_info *sseu = &gt->info.sseu; 608 609 bool subslice_pg = sseu->has_subslice_pg; 609 610 u8 slices, subslices; 610 611 u32 rpcs = 0;
+1 -1
drivers/gpu/drm/i915/gt/intel_sseu.h
··· 98 98 99 99 void intel_sseu_info_init(struct intel_gt *gt); 100 100 101 - u32 intel_sseu_make_rpcs(struct drm_i915_private *i915, 101 + u32 intel_sseu_make_rpcs(struct intel_gt *gt, 102 102 const struct intel_sseu *req_sseu); 103 103 104 104 void intel_sseu_dump(const struct sseu_dev_info *sseu, struct drm_printer *p);
+4 -4
drivers/gpu/drm/i915/gt/intel_workarounds.c
··· 404 404 static void skl_tune_iz_hashing(struct intel_engine_cs *engine, 405 405 struct i915_wa_list *wal) 406 406 { 407 - struct drm_i915_private *i915 = engine->i915; 407 + struct intel_gt *gt = engine->gt; 408 408 u8 vals[3] = { 0, 0, 0 }; 409 409 unsigned int i; 410 410 ··· 415 415 * Only consider slices where one, and only one, subslice has 7 416 416 * EUs 417 417 */ 418 - if (!is_power_of_2(RUNTIME_INFO(i915)->sseu.subslice_7eu[i])) 418 + if (!is_power_of_2(gt->info.sseu.subslice_7eu[i])) 419 419 continue; 420 420 421 421 /* ··· 424 424 * 425 425 * -> 0 <= ss <= 3; 426 426 */ 427 - ss = ffs(RUNTIME_INFO(i915)->sseu.subslice_7eu[i]) - 1; 427 + ss = ffs(gt->info.sseu.subslice_7eu[i]) - 1; 428 428 vals[i] = 3 - ss; 429 429 } 430 430 ··· 1036 1036 static void 1037 1037 wa_init_mcr(struct drm_i915_private *i915, struct i915_wa_list *wal) 1038 1038 { 1039 - const struct sseu_dev_info *sseu = &RUNTIME_INFO(i915)->sseu; 1039 + const struct sseu_dev_info *sseu = &i915->gt.info.sseu; 1040 1040 unsigned int slice, subslice; 1041 1041 u32 l3_en, mcr, mcr_mask; 1042 1042
+1 -2
drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
··· 68 68 static void __guc_ads_init(struct intel_guc *guc) 69 69 { 70 70 struct intel_gt *gt = guc_to_gt(guc); 71 - struct drm_i915_private *dev_priv = gt->i915; 72 71 struct __guc_ads_blob *blob = guc->ads_blob; 73 72 const u32 skipped_size = LRC_PPHWSP_SZ * PAGE_SIZE + LR_HW_CONTEXT_SIZE; 74 73 u32 base; ··· 99 100 } 100 101 101 102 /* System info */ 102 - blob->system_info.slice_enabled = hweight8(RUNTIME_INFO(dev_priv)->sseu.slice_mask); 103 + blob->system_info.slice_enabled = hweight8(gt->info.sseu.slice_mask); 103 104 blob->system_info.rcs_enabled = 1; 104 105 blob->system_info.bcs_enabled = 1; 105 106
+5 -5
drivers/gpu/drm/i915/i915_debugfs.c
··· 1327 1327 struct drm_i915_private *dev_priv = node_to_i915(m->private); 1328 1328 struct drm_printer p = drm_seq_file_printer(m); 1329 1329 1330 - intel_sseu_print_topology(&RUNTIME_INFO(dev_priv)->sseu, &p); 1330 + intel_sseu_print_topology(&dev_priv->gt.info.sseu, &p); 1331 1331 1332 1332 return 0; 1333 1333 } ··· 1628 1628 struct sseu_dev_info *sseu) 1629 1629 { 1630 1630 #define SS_MAX 6 1631 - const struct intel_runtime_info *info = RUNTIME_INFO(dev_priv); 1631 + const struct intel_gt_info *info = &dev_priv->gt.info; 1632 1632 u32 s_reg[SS_MAX], eu_reg[2 * SS_MAX], eu_mask[2]; 1633 1633 int s, ss; 1634 1634 ··· 1685 1685 struct sseu_dev_info *sseu) 1686 1686 { 1687 1687 #define SS_MAX 3 1688 - const struct intel_runtime_info *info = RUNTIME_INFO(dev_priv); 1688 + const struct intel_gt_info *info = &dev_priv->gt.info; 1689 1689 u32 s_reg[SS_MAX], eu_reg[2 * SS_MAX], eu_mask[2]; 1690 1690 int s, ss; 1691 1691 ··· 1743 1743 static void bdw_sseu_device_status(struct drm_i915_private *dev_priv, 1744 1744 struct sseu_dev_info *sseu) 1745 1745 { 1746 - const struct intel_runtime_info *info = RUNTIME_INFO(dev_priv); 1746 + const struct intel_gt_info *info = &dev_priv->gt.info; 1747 1747 u32 slice_info = I915_READ(GEN8_GT_SLICE_INFO); 1748 1748 int s; 1749 1749 ··· 1806 1806 static int i915_sseu_status(struct seq_file *m, void *unused) 1807 1807 { 1808 1808 struct drm_i915_private *dev_priv = node_to_i915(m->private); 1809 - const struct intel_runtime_info *info = RUNTIME_INFO(dev_priv); 1809 + const struct intel_gt_info *info = &dev_priv->gt.info; 1810 1810 struct sseu_dev_info sseu; 1811 1811 intel_wakeref_t wakeref; 1812 1812
+1 -1
drivers/gpu/drm/i915/i915_getparam.c
··· 12 12 struct drm_file *file_priv) 13 13 { 14 14 struct drm_i915_private *i915 = to_i915(dev); 15 - const struct sseu_dev_info *sseu = &RUNTIME_INFO(i915)->sseu; 15 + const struct sseu_dev_info *sseu = &i915->gt.info.sseu; 16 16 drm_i915_getparam_t *param = data; 17 17 int value; 18 18
+2 -2
drivers/gpu/drm/i915/i915_gpu_error.c
··· 426 426 static void error_print_instdone(struct drm_i915_error_state_buf *m, 427 427 const struct intel_engine_coredump *ee) 428 428 { 429 - const struct sseu_dev_info *sseu = &RUNTIME_INFO(m->i915)->sseu; 429 + const struct sseu_dev_info *sseu = &ee->engine->gt->info.sseu; 430 430 int slice; 431 431 int subslice; 432 432 ··· 626 626 627 627 intel_device_info_print_static(&error->device_info, &p); 628 628 intel_device_info_print_runtime(&error->runtime_info, &p); 629 - intel_sseu_print_topology(&error->runtime_info.sseu, &p); 630 629 intel_gt_info_print(&error->gt->info, &p); 630 + intel_sseu_print_topology(&error->gt->info.sseu, &p); 631 631 intel_driver_caps_print(&error->driver_caps, &p); 632 632 } 633 633
+4 -5
drivers/gpu/drm/i915/i915_perf.c
··· 2196 2196 if (!intel_context_pin_if_active(ce)) 2197 2197 continue; 2198 2198 2199 - flex->value = intel_sseu_make_rpcs(ctx->i915, &ce->sseu); 2199 + flex->value = intel_sseu_make_rpcs(ce->engine->gt, &ce->sseu); 2200 2200 err = gen8_modify_context(ce, flex, count); 2201 2201 2202 2202 intel_context_unpin(ce); ··· 2340 2340 if (engine->class != RENDER_CLASS) 2341 2341 continue; 2342 2342 2343 - regs[0].value = intel_sseu_make_rpcs(i915, &ce->sseu); 2343 + regs[0].value = intel_sseu_make_rpcs(engine->gt, &ce->sseu); 2344 2344 2345 2345 err = gen8_modify_self(ce, regs, num_regs, active); 2346 2346 if (err) ··· 2740 2740 get_default_sseu_config(struct intel_sseu *out_sseu, 2741 2741 struct intel_engine_cs *engine) 2742 2742 { 2743 - const struct sseu_dev_info *devinfo_sseu = 2744 - &RUNTIME_INFO(engine->i915)->sseu; 2743 + const struct sseu_dev_info *devinfo_sseu = &engine->gt->info.sseu; 2745 2744 2746 2745 *out_sseu = intel_sseu_from_device_info(devinfo_sseu); 2747 2746 ··· 2765 2766 drm_sseu->engine.engine_instance != engine->uabi_instance) 2766 2767 return -EINVAL; 2767 2768 2768 - return i915_gem_user_to_context_sseu(engine->i915, drm_sseu, out_sseu); 2769 + return i915_gem_user_to_context_sseu(engine->gt, drm_sseu, out_sseu); 2769 2770 } 2770 2771 2771 2772 /**
+1 -1
drivers/gpu/drm/i915/i915_query.c
··· 31 31 static int query_topology_info(struct drm_i915_private *dev_priv, 32 32 struct drm_i915_query_item *query_item) 33 33 { 34 - const struct sseu_dev_info *sseu = &RUNTIME_INFO(dev_priv)->sseu; 34 + const struct sseu_dev_info *sseu = &dev_priv->gt.info.sseu; 35 35 struct drm_i915_query_topology_info topo; 36 36 u32 slice_length, subslice_length, eu_length, total_length; 37 37 int ret;
-3
drivers/gpu/drm/i915/intel_device_info.c
··· 29 29 #include "display/intel_de.h" 30 30 #include "intel_device_info.h" 31 31 #include "i915_drv.h" 32 - #include "gt/intel_sseu.h" 33 32 34 33 #define PLATFORM_NAME(x) [INTEL_##x] = #x 35 34 static const char * const platform_names[] = { ··· 114 115 void intel_device_info_print_runtime(const struct intel_runtime_info *info, 115 116 struct drm_printer *p) 116 117 { 117 - intel_sseu_dump(&info->sseu, p); 118 - 119 118 drm_printf(p, "rawclk rate: %u kHz\n", info->rawclk_freq); 120 119 drm_printf(p, "CS timestamp frequency: %u Hz\n", 121 120 info->cs_timestamp_frequency_hz);
-3
drivers/gpu/drm/i915/intel_device_info.h
··· 219 219 u8 num_sprites[I915_MAX_PIPES]; 220 220 u8 num_scalers[I915_MAX_PIPES]; 221 221 222 - /* Slice/subslice/EU info */ 223 - struct sseu_dev_info sseu; 224 - 225 222 u32 rawclk_freq; 226 223 227 224 u32 cs_timestamp_frequency_hz;