Lines Matching refs:rc6
41 static struct intel_gt *rc6_to_gt(struct intel_rc6 *rc6) in rc6_to_gt() argument
43 return container_of(rc6, struct intel_gt, rc6); in rc6_to_gt()
61 static void gen11_rc6_enable(struct intel_rc6 *rc6) in gen11_rc6_enable() argument
63 struct intel_gt *gt = rc6_to_gt(rc6); in gen11_rc6_enable()
80 for_each_engine(engine, rc6_to_gt(rc6), id) in gen11_rc6_enable()
118 rc6->ctl_enable = GEN6_RC_CTL_RC6_ENABLE; in gen11_rc6_enable()
120 rc6->ctl_enable = in gen11_rc6_enable()
147 static void gen9_rc6_enable(struct intel_rc6 *rc6) in gen9_rc6_enable() argument
149 struct intel_uncore *uncore = rc6_to_uncore(rc6); in gen9_rc6_enable()
154 if (GRAPHICS_VER(rc6_to_i915(rc6)) >= 11) { in gen9_rc6_enable()
157 } else if (IS_SKYLAKE(rc6_to_i915(rc6))) { in gen9_rc6_enable()
169 for_each_engine(engine, rc6_to_gt(rc6), id) in gen9_rc6_enable()
203 rc6->ctl_enable = in gen9_rc6_enable()
212 if (!NEEDS_WaRsDisableCoarsePowerGating(rc6_to_i915(rc6))) in gen9_rc6_enable()
217 static void gen8_rc6_enable(struct intel_rc6 *rc6) in gen8_rc6_enable() argument
219 struct intel_uncore *uncore = rc6_to_uncore(rc6); in gen8_rc6_enable()
227 for_each_engine(engine, rc6_to_gt(rc6), id) in gen8_rc6_enable()
233 rc6->ctl_enable = in gen8_rc6_enable()
239 static void gen6_rc6_enable(struct intel_rc6 *rc6) in gen6_rc6_enable() argument
241 struct intel_uncore *uncore = rc6_to_uncore(rc6); in gen6_rc6_enable()
242 struct drm_i915_private *i915 = rc6_to_i915(rc6); in gen6_rc6_enable()
254 for_each_engine(engine, rc6_to_gt(rc6), id) in gen6_rc6_enable()
269 rc6->ctl_enable = in gen6_rc6_enable()
275 ret = snb_pcode_read(rc6_to_gt(rc6)->uncore, GEN6_PCODE_READ_RC6VIDS, &rc6vids, NULL); in gen6_rc6_enable()
285 ret = snb_pcode_write(rc6_to_gt(rc6)->uncore, GEN6_PCODE_WRITE_RC6VIDS, rc6vids); in gen6_rc6_enable()
293 static int chv_rc6_init(struct intel_rc6 *rc6) in chv_rc6_init() argument
295 struct intel_uncore *uncore = rc6_to_uncore(rc6); in chv_rc6_init()
296 struct drm_i915_private *i915 = rc6_to_i915(rc6); in chv_rc6_init()
314 static int vlv_rc6_init(struct intel_rc6 *rc6) in vlv_rc6_init() argument
316 struct drm_i915_private *i915 = rc6_to_i915(rc6); in vlv_rc6_init()
317 struct intel_uncore *uncore = rc6_to_uncore(rc6); in vlv_rc6_init()
364 rc6->pctx = pctx; in vlv_rc6_init()
368 static void chv_rc6_enable(struct intel_rc6 *rc6) in chv_rc6_enable() argument
370 struct intel_uncore *uncore = rc6_to_uncore(rc6); in chv_rc6_enable()
379 for_each_engine(engine, rc6_to_gt(rc6), id) in chv_rc6_enable()
393 rc6->ctl_enable = GEN7_RC_CTL_TO_MODE; in chv_rc6_enable()
396 static void vlv_rc6_enable(struct intel_rc6 *rc6) in vlv_rc6_enable() argument
398 struct intel_uncore *uncore = rc6_to_uncore(rc6); in vlv_rc6_enable()
406 for_each_engine(engine, rc6_to_gt(rc6), id) in vlv_rc6_enable()
419 rc6->ctl_enable = in vlv_rc6_enable()
423 static bool bxt_check_bios_rc6_setup(struct intel_rc6 *rc6) in bxt_check_bios_rc6_setup() argument
425 struct intel_uncore *uncore = rc6_to_uncore(rc6); in bxt_check_bios_rc6_setup()
426 struct drm_i915_private *i915 = rc6_to_i915(rc6); in bxt_check_bios_rc6_setup()
486 static bool rc6_supported(struct intel_rc6 *rc6) in rc6_supported() argument
488 struct drm_i915_private *i915 = rc6_to_i915(rc6); in rc6_supported()
496 if (is_mock_gt(rc6_to_gt(rc6))) in rc6_supported()
499 if (IS_GEN9_LP(i915) && !bxt_check_bios_rc6_setup(rc6)) { in rc6_supported()
508 static void rpm_get(struct intel_rc6 *rc6) in rpm_get() argument
510 GEM_BUG_ON(rc6->wakeref); in rpm_get()
511 pm_runtime_get_sync(rc6_to_i915(rc6)->drm.dev); in rpm_get()
512 rc6->wakeref = true; in rpm_get()
515 static void rpm_put(struct intel_rc6 *rc6) in rpm_put() argument
517 GEM_BUG_ON(!rc6->wakeref); in rpm_put()
518 pm_runtime_put(rc6_to_i915(rc6)->drm.dev); in rpm_put()
519 rc6->wakeref = false; in rpm_put()
522 static bool pctx_corrupted(struct intel_rc6 *rc6) in pctx_corrupted() argument
524 struct drm_i915_private *i915 = rc6_to_i915(rc6); in pctx_corrupted()
529 if (intel_uncore_read(rc6_to_uncore(rc6), GEN8_RC6_CTX_INFO)) in pctx_corrupted()
537 static void __intel_rc6_disable(struct intel_rc6 *rc6) in __intel_rc6_disable() argument
539 struct drm_i915_private *i915 = rc6_to_i915(rc6); in __intel_rc6_disable()
540 struct intel_uncore *uncore = rc6_to_uncore(rc6); in __intel_rc6_disable()
541 struct intel_gt *gt = rc6_to_gt(rc6); in __intel_rc6_disable()
554 static void rc6_res_reg_init(struct intel_rc6 *rc6) in rc6_res_reg_init() argument
556 memset(rc6->res_reg, INVALID_MMIO_REG.reg, sizeof(rc6->res_reg)); in rc6_res_reg_init()
558 switch (rc6_to_gt(rc6)->type) { in rc6_res_reg_init()
560 rc6->res_reg[INTEL_RC6_RES_RC6] = MTL_MEDIA_MC6; in rc6_res_reg_init()
563 rc6->res_reg[INTEL_RC6_RES_RC6_LOCKED] = GEN6_GT_GFX_RC6_LOCKED; in rc6_res_reg_init()
564 rc6->res_reg[INTEL_RC6_RES_RC6] = GEN6_GT_GFX_RC6; in rc6_res_reg_init()
565 rc6->res_reg[INTEL_RC6_RES_RC6p] = GEN6_GT_GFX_RC6p; in rc6_res_reg_init()
566 rc6->res_reg[INTEL_RC6_RES_RC6pp] = GEN6_GT_GFX_RC6pp; in rc6_res_reg_init()
571 void intel_rc6_init(struct intel_rc6 *rc6) in intel_rc6_init() argument
573 struct drm_i915_private *i915 = rc6_to_i915(rc6); in intel_rc6_init()
577 rpm_get(rc6); in intel_rc6_init()
579 if (!rc6_supported(rc6)) in intel_rc6_init()
582 rc6_res_reg_init(rc6); in intel_rc6_init()
585 err = chv_rc6_init(rc6); in intel_rc6_init()
587 err = vlv_rc6_init(rc6); in intel_rc6_init()
592 __intel_rc6_disable(rc6); in intel_rc6_init()
594 rc6->supported = err == 0; in intel_rc6_init()
597 void intel_rc6_sanitize(struct intel_rc6 *rc6) in intel_rc6_sanitize() argument
599 memset(rc6->prev_hw_residency, 0, sizeof(rc6->prev_hw_residency)); in intel_rc6_sanitize()
601 if (rc6->enabled) { /* unbalanced suspend/resume */ in intel_rc6_sanitize()
602 rpm_get(rc6); in intel_rc6_sanitize()
603 rc6->enabled = false; in intel_rc6_sanitize()
606 if (rc6->supported) in intel_rc6_sanitize()
607 __intel_rc6_disable(rc6); in intel_rc6_sanitize()
610 void intel_rc6_enable(struct intel_rc6 *rc6) in intel_rc6_enable() argument
612 struct drm_i915_private *i915 = rc6_to_i915(rc6); in intel_rc6_enable()
613 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_enable()
615 if (!rc6->supported) in intel_rc6_enable()
618 GEM_BUG_ON(rc6->enabled); in intel_rc6_enable()
623 chv_rc6_enable(rc6); in intel_rc6_enable()
625 vlv_rc6_enable(rc6); in intel_rc6_enable()
627 gen11_rc6_enable(rc6); in intel_rc6_enable()
629 gen9_rc6_enable(rc6); in intel_rc6_enable()
631 gen8_rc6_enable(rc6); in intel_rc6_enable()
633 gen6_rc6_enable(rc6); in intel_rc6_enable()
635 rc6->manual = rc6->ctl_enable & GEN6_RC_CTL_RC6_ENABLE; in intel_rc6_enable()
637 rc6->ctl_enable = 0; in intel_rc6_enable()
641 if (unlikely(pctx_corrupted(rc6))) in intel_rc6_enable()
645 rpm_put(rc6); in intel_rc6_enable()
646 rc6->enabled = true; in intel_rc6_enable()
649 void intel_rc6_unpark(struct intel_rc6 *rc6) in intel_rc6_unpark() argument
651 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_unpark()
653 if (!rc6->enabled) in intel_rc6_unpark()
657 set(uncore, GEN6_RC_CONTROL, rc6->ctl_enable); in intel_rc6_unpark()
660 void intel_rc6_park(struct intel_rc6 *rc6) in intel_rc6_park() argument
662 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_park()
665 if (!rc6->enabled) in intel_rc6_park()
668 if (unlikely(pctx_corrupted(rc6))) { in intel_rc6_park()
669 intel_rc6_disable(rc6); in intel_rc6_park()
673 if (!rc6->manual) in intel_rc6_park()
679 if (HAS_RC6pp(rc6_to_i915(rc6))) in intel_rc6_park()
681 else if (HAS_RC6p(rc6_to_i915(rc6))) in intel_rc6_park()
688 void intel_rc6_disable(struct intel_rc6 *rc6) in intel_rc6_disable() argument
690 if (!rc6->enabled) in intel_rc6_disable()
693 rpm_get(rc6); in intel_rc6_disable()
694 rc6->enabled = false; in intel_rc6_disable()
696 __intel_rc6_disable(rc6); in intel_rc6_disable()
699 void intel_rc6_fini(struct intel_rc6 *rc6) in intel_rc6_fini() argument
703 intel_rc6_disable(rc6); in intel_rc6_fini()
705 pctx = fetch_and_zero(&rc6->pctx); in intel_rc6_fini()
709 if (rc6->wakeref) in intel_rc6_fini()
710 rpm_put(rc6); in intel_rc6_fini()
758 u64 intel_rc6_residency_ns(struct intel_rc6 *rc6, enum intel_rc6_res_type id) in intel_rc6_residency_ns() argument
760 struct drm_i915_private *i915 = rc6_to_i915(rc6); in intel_rc6_residency_ns()
761 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_residency_ns()
763 i915_reg_t reg = rc6->res_reg[id]; in intel_rc6_residency_ns()
768 if (!rc6->supported) in intel_rc6_residency_ns()
802 prev_hw = rc6->prev_hw_residency[id]; in intel_rc6_residency_ns()
803 rc6->prev_hw_residency[id] = time_hw; in intel_rc6_residency_ns()
812 time_hw += rc6->cur_residency[id]; in intel_rc6_residency_ns()
813 rc6->cur_residency[id] = time_hw; in intel_rc6_residency_ns()
821 u64 intel_rc6_residency_us(struct intel_rc6 *rc6, enum intel_rc6_res_type id) in intel_rc6_residency_us() argument
823 return DIV_ROUND_UP_ULL(intel_rc6_residency_ns(rc6, id), 1000); in intel_rc6_residency_us()
830 i915_reg_t reg = gt->rc6.res_reg[id]; in intel_rc6_print_residency()
836 intel_rc6_residency_us(>->rc6, id)); in intel_rc6_print_residency()