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()
56 static void gen11_rc6_enable(struct intel_rc6 *rc6) in gen11_rc6_enable() argument
58 struct intel_gt *gt = rc6_to_gt(rc6); in gen11_rc6_enable()
75 for_each_engine(engine, rc6_to_gt(rc6), id) in gen11_rc6_enable()
113 rc6->ctl_enable = GEN6_RC_CTL_RC6_ENABLE; in gen11_rc6_enable()
115 rc6->ctl_enable = in gen11_rc6_enable()
135 static void gen9_rc6_enable(struct intel_rc6 *rc6) in gen9_rc6_enable() argument
137 struct intel_uncore *uncore = rc6_to_uncore(rc6); in gen9_rc6_enable()
142 if (GRAPHICS_VER(rc6_to_i915(rc6)) >= 11) { in gen9_rc6_enable()
145 } else if (IS_SKYLAKE(rc6_to_i915(rc6))) { in gen9_rc6_enable()
157 for_each_engine(engine, rc6_to_gt(rc6), id) in gen9_rc6_enable()
191 rc6->ctl_enable = in gen9_rc6_enable()
200 if (!NEEDS_WaRsDisableCoarsePowerGating(rc6_to_i915(rc6))) in gen9_rc6_enable()
205 static void gen8_rc6_enable(struct intel_rc6 *rc6) in gen8_rc6_enable() argument
207 struct intel_uncore *uncore = rc6_to_uncore(rc6); in gen8_rc6_enable()
215 for_each_engine(engine, rc6_to_gt(rc6), id) in gen8_rc6_enable()
221 rc6->ctl_enable = in gen8_rc6_enable()
227 static void gen6_rc6_enable(struct intel_rc6 *rc6) in gen6_rc6_enable() argument
229 struct intel_uncore *uncore = rc6_to_uncore(rc6); in gen6_rc6_enable()
230 struct drm_i915_private *i915 = rc6_to_i915(rc6); in gen6_rc6_enable()
242 for_each_engine(engine, rc6_to_gt(rc6), id) in gen6_rc6_enable()
257 rc6->ctl_enable = in gen6_rc6_enable()
263 ret = snb_pcode_read(rc6_to_gt(rc6)->uncore, GEN6_PCODE_READ_RC6VIDS, &rc6vids, NULL); in gen6_rc6_enable()
273 ret = snb_pcode_write(rc6_to_gt(rc6)->uncore, GEN6_PCODE_WRITE_RC6VIDS, rc6vids); in gen6_rc6_enable()
281 static int chv_rc6_init(struct intel_rc6 *rc6) in chv_rc6_init() argument
283 struct intel_uncore *uncore = rc6_to_uncore(rc6); in chv_rc6_init()
284 struct drm_i915_private *i915 = rc6_to_i915(rc6); in chv_rc6_init()
302 static int vlv_rc6_init(struct intel_rc6 *rc6) in vlv_rc6_init() argument
304 struct drm_i915_private *i915 = rc6_to_i915(rc6); in vlv_rc6_init()
305 struct intel_uncore *uncore = rc6_to_uncore(rc6); in vlv_rc6_init()
352 rc6->pctx = pctx; in vlv_rc6_init()
356 static void chv_rc6_enable(struct intel_rc6 *rc6) in chv_rc6_enable() argument
358 struct intel_uncore *uncore = rc6_to_uncore(rc6); in chv_rc6_enable()
367 for_each_engine(engine, rc6_to_gt(rc6), id) in chv_rc6_enable()
381 rc6->ctl_enable = GEN7_RC_CTL_TO_MODE; in chv_rc6_enable()
384 static void vlv_rc6_enable(struct intel_rc6 *rc6) in vlv_rc6_enable() argument
386 struct intel_uncore *uncore = rc6_to_uncore(rc6); in vlv_rc6_enable()
394 for_each_engine(engine, rc6_to_gt(rc6), id) in vlv_rc6_enable()
407 rc6->ctl_enable = in vlv_rc6_enable()
411 bool intel_check_bios_c6_setup(struct intel_rc6 *rc6) in intel_check_bios_c6_setup() argument
413 if (!rc6->bios_state_captured) { in intel_check_bios_c6_setup()
414 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_check_bios_c6_setup()
418 rc6->bios_rc_state = intel_uncore_read(uncore, GEN6_RC_STATE); in intel_check_bios_c6_setup()
420 rc6->bios_state_captured = true; in intel_check_bios_c6_setup()
423 return rc6->bios_rc_state & RC_SW_TARGET_STATE_MASK; in intel_check_bios_c6_setup()
426 static bool bxt_check_bios_rc6_setup(struct intel_rc6 *rc6) in bxt_check_bios_rc6_setup() argument
428 struct intel_uncore *uncore = rc6_to_uncore(rc6); in bxt_check_bios_rc6_setup()
429 struct drm_i915_private *i915 = rc6_to_i915(rc6); in bxt_check_bios_rc6_setup()
489 static bool rc6_supported(struct intel_rc6 *rc6) in rc6_supported() argument
491 struct drm_i915_private *i915 = rc6_to_i915(rc6); in rc6_supported()
492 struct intel_gt *gt = rc6_to_gt(rc6); in rc6_supported()
500 if (is_mock_gt(rc6_to_gt(rc6))) in rc6_supported()
503 if (IS_GEN9_LP(i915) && !bxt_check_bios_rc6_setup(rc6)) { in rc6_supported()
510 !intel_check_bios_c6_setup(rc6)) { in rc6_supported()
525 static void rpm_get(struct intel_rc6 *rc6) in rpm_get() argument
527 GEM_BUG_ON(rc6->wakeref); in rpm_get()
528 pm_runtime_get_sync(rc6_to_i915(rc6)->drm.dev); in rpm_get()
529 rc6->wakeref = true; in rpm_get()
532 static void rpm_put(struct intel_rc6 *rc6) in rpm_put() argument
534 GEM_BUG_ON(!rc6->wakeref); in rpm_put()
535 pm_runtime_put(rc6_to_i915(rc6)->drm.dev); in rpm_put()
536 rc6->wakeref = false; in rpm_put()
539 static bool pctx_corrupted(struct intel_rc6 *rc6) in pctx_corrupted() argument
541 struct drm_i915_private *i915 = rc6_to_i915(rc6); in pctx_corrupted()
546 if (intel_uncore_read(rc6_to_uncore(rc6), GEN8_RC6_CTX_INFO)) in pctx_corrupted()
554 static void __intel_rc6_disable(struct intel_rc6 *rc6) in __intel_rc6_disable() argument
556 struct drm_i915_private *i915 = rc6_to_i915(rc6); in __intel_rc6_disable()
557 struct intel_uncore *uncore = rc6_to_uncore(rc6); in __intel_rc6_disable()
558 struct intel_gt *gt = rc6_to_gt(rc6); in __intel_rc6_disable()
571 static void rc6_res_reg_init(struct intel_rc6 *rc6) in rc6_res_reg_init() argument
577 switch (rc6_to_gt(rc6)->type) { in rc6_res_reg_init()
589 memcpy(rc6->res_reg, res_reg, sizeof(res_reg)); in rc6_res_reg_init()
592 void intel_rc6_init(struct intel_rc6 *rc6) in intel_rc6_init() argument
594 struct drm_i915_private *i915 = rc6_to_i915(rc6); in intel_rc6_init()
598 rpm_get(rc6); in intel_rc6_init()
600 if (!rc6_supported(rc6)) in intel_rc6_init()
603 rc6_res_reg_init(rc6); in intel_rc6_init()
606 err = chv_rc6_init(rc6); in intel_rc6_init()
608 err = vlv_rc6_init(rc6); in intel_rc6_init()
613 __intel_rc6_disable(rc6); in intel_rc6_init()
615 rc6->supported = err == 0; in intel_rc6_init()
618 void intel_rc6_sanitize(struct intel_rc6 *rc6) in intel_rc6_sanitize() argument
620 memset(rc6->prev_hw_residency, 0, sizeof(rc6->prev_hw_residency)); in intel_rc6_sanitize()
622 if (rc6->enabled) { /* unbalanced suspend/resume */ in intel_rc6_sanitize()
623 rpm_get(rc6); in intel_rc6_sanitize()
624 rc6->enabled = false; in intel_rc6_sanitize()
627 if (rc6->supported) in intel_rc6_sanitize()
628 __intel_rc6_disable(rc6); in intel_rc6_sanitize()
631 void intel_rc6_enable(struct intel_rc6 *rc6) in intel_rc6_enable() argument
633 struct drm_i915_private *i915 = rc6_to_i915(rc6); in intel_rc6_enable()
634 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_enable()
636 if (!rc6->supported) in intel_rc6_enable()
639 GEM_BUG_ON(rc6->enabled); in intel_rc6_enable()
644 chv_rc6_enable(rc6); in intel_rc6_enable()
646 vlv_rc6_enable(rc6); in intel_rc6_enable()
648 gen11_rc6_enable(rc6); in intel_rc6_enable()
650 gen9_rc6_enable(rc6); in intel_rc6_enable()
652 gen8_rc6_enable(rc6); in intel_rc6_enable()
654 gen6_rc6_enable(rc6); in intel_rc6_enable()
656 rc6->manual = rc6->ctl_enable & GEN6_RC_CTL_RC6_ENABLE; in intel_rc6_enable()
658 rc6->ctl_enable = 0; in intel_rc6_enable()
662 if (unlikely(pctx_corrupted(rc6))) in intel_rc6_enable()
666 rpm_put(rc6); in intel_rc6_enable()
667 rc6->enabled = true; in intel_rc6_enable()
670 void intel_rc6_unpark(struct intel_rc6 *rc6) in intel_rc6_unpark() argument
672 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_unpark()
674 if (!rc6->enabled) in intel_rc6_unpark()
678 intel_uncore_write_fw(uncore, GEN6_RC_CONTROL, rc6->ctl_enable); in intel_rc6_unpark()
681 void intel_rc6_park(struct intel_rc6 *rc6) in intel_rc6_park() argument
683 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_park()
686 if (!rc6->enabled) in intel_rc6_park()
689 if (unlikely(pctx_corrupted(rc6))) { in intel_rc6_park()
690 intel_rc6_disable(rc6); in intel_rc6_park()
694 if (!rc6->manual) in intel_rc6_park()
700 if (HAS_RC6pp(rc6_to_i915(rc6))) in intel_rc6_park()
702 else if (HAS_RC6p(rc6_to_i915(rc6))) in intel_rc6_park()
709 void intel_rc6_disable(struct intel_rc6 *rc6) in intel_rc6_disable() argument
711 if (!rc6->enabled) in intel_rc6_disable()
714 rpm_get(rc6); in intel_rc6_disable()
715 rc6->enabled = false; in intel_rc6_disable()
717 __intel_rc6_disable(rc6); in intel_rc6_disable()
720 void intel_rc6_fini(struct intel_rc6 *rc6) in intel_rc6_fini() argument
723 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_fini()
725 intel_rc6_disable(rc6); in intel_rc6_fini()
728 if (IS_METEORLAKE(rc6_to_i915(rc6)) && rc6->bios_state_captured) in intel_rc6_fini()
729 intel_uncore_write_fw(uncore, GEN6_RC_STATE, rc6->bios_rc_state); in intel_rc6_fini()
731 pctx = fetch_and_zero(&rc6->pctx); in intel_rc6_fini()
735 if (rc6->wakeref) in intel_rc6_fini()
736 rpm_put(rc6); in intel_rc6_fini()
784 u64 intel_rc6_residency_ns(struct intel_rc6 *rc6, enum intel_rc6_res_type id) in intel_rc6_residency_ns() argument
786 struct drm_i915_private *i915 = rc6_to_i915(rc6); in intel_rc6_residency_ns()
787 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_residency_ns()
789 i915_reg_t reg = rc6->res_reg[id]; in intel_rc6_residency_ns()
794 if (!rc6->supported) in intel_rc6_residency_ns()
828 prev_hw = rc6->prev_hw_residency[id]; in intel_rc6_residency_ns()
829 rc6->prev_hw_residency[id] = time_hw; in intel_rc6_residency_ns()
838 time_hw += rc6->cur_residency[id]; in intel_rc6_residency_ns()
839 rc6->cur_residency[id] = time_hw; in intel_rc6_residency_ns()
847 u64 intel_rc6_residency_us(struct intel_rc6 *rc6, enum intel_rc6_res_type id) in intel_rc6_residency_us() argument
849 return DIV_ROUND_UP_ULL(intel_rc6_residency_ns(rc6, id), 1000); in intel_rc6_residency_us()
856 i915_reg_t reg = gt->rc6.res_reg[id]; in intel_rc6_print_residency()
862 intel_rc6_residency_us(>->rc6, id)); in intel_rc6_print_residency()