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()
526 static void rpm_get(struct intel_rc6 *rc6) in rpm_get() argument
528 GEM_BUG_ON(rc6->wakeref); in rpm_get()
529 pm_runtime_get_sync(rc6_to_i915(rc6)->drm.dev); in rpm_get()
530 rc6->wakeref = true; in rpm_get()
533 static void rpm_put(struct intel_rc6 *rc6) in rpm_put() argument
535 GEM_BUG_ON(!rc6->wakeref); in rpm_put()
536 pm_runtime_put(rc6_to_i915(rc6)->drm.dev); in rpm_put()
537 rc6->wakeref = false; in rpm_put()
540 static bool pctx_corrupted(struct intel_rc6 *rc6) in pctx_corrupted() argument
542 struct drm_i915_private *i915 = rc6_to_i915(rc6); in pctx_corrupted()
547 if (intel_uncore_read(rc6_to_uncore(rc6), GEN8_RC6_CTX_INFO)) in pctx_corrupted()
555 static void __intel_rc6_disable(struct intel_rc6 *rc6) in __intel_rc6_disable() argument
557 struct drm_i915_private *i915 = rc6_to_i915(rc6); in __intel_rc6_disable()
558 struct intel_uncore *uncore = rc6_to_uncore(rc6); in __intel_rc6_disable()
559 struct intel_gt *gt = rc6_to_gt(rc6); in __intel_rc6_disable()
572 static void rc6_res_reg_init(struct intel_rc6 *rc6) in rc6_res_reg_init() argument
578 switch (rc6_to_gt(rc6)->type) { in rc6_res_reg_init()
590 memcpy(rc6->res_reg, res_reg, sizeof(res_reg)); in rc6_res_reg_init()
593 void intel_rc6_init(struct intel_rc6 *rc6) in intel_rc6_init() argument
595 struct drm_i915_private *i915 = rc6_to_i915(rc6); in intel_rc6_init()
599 rpm_get(rc6); in intel_rc6_init()
601 if (!rc6_supported(rc6)) in intel_rc6_init()
604 rc6_res_reg_init(rc6); in intel_rc6_init()
607 err = chv_rc6_init(rc6); in intel_rc6_init()
609 err = vlv_rc6_init(rc6); in intel_rc6_init()
614 __intel_rc6_disable(rc6); in intel_rc6_init()
616 rc6->supported = err == 0; in intel_rc6_init()
619 void intel_rc6_sanitize(struct intel_rc6 *rc6) in intel_rc6_sanitize() argument
621 memset(rc6->prev_hw_residency, 0, sizeof(rc6->prev_hw_residency)); in intel_rc6_sanitize()
623 if (rc6->enabled) { /* unbalanced suspend/resume */ in intel_rc6_sanitize()
624 rpm_get(rc6); in intel_rc6_sanitize()
625 rc6->enabled = false; in intel_rc6_sanitize()
628 if (rc6->supported) in intel_rc6_sanitize()
629 __intel_rc6_disable(rc6); in intel_rc6_sanitize()
632 void intel_rc6_enable(struct intel_rc6 *rc6) in intel_rc6_enable() argument
634 struct drm_i915_private *i915 = rc6_to_i915(rc6); in intel_rc6_enable()
635 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_enable()
637 if (!rc6->supported) in intel_rc6_enable()
640 GEM_BUG_ON(rc6->enabled); in intel_rc6_enable()
645 chv_rc6_enable(rc6); in intel_rc6_enable()
647 vlv_rc6_enable(rc6); in intel_rc6_enable()
649 gen11_rc6_enable(rc6); in intel_rc6_enable()
651 gen9_rc6_enable(rc6); in intel_rc6_enable()
653 gen8_rc6_enable(rc6); in intel_rc6_enable()
655 gen6_rc6_enable(rc6); in intel_rc6_enable()
657 rc6->manual = rc6->ctl_enable & GEN6_RC_CTL_RC6_ENABLE; in intel_rc6_enable()
659 rc6->ctl_enable = 0; in intel_rc6_enable()
663 if (unlikely(pctx_corrupted(rc6))) in intel_rc6_enable()
667 rpm_put(rc6); in intel_rc6_enable()
668 rc6->enabled = true; in intel_rc6_enable()
671 void intel_rc6_unpark(struct intel_rc6 *rc6) in intel_rc6_unpark() argument
673 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_unpark()
675 if (!rc6->enabled) in intel_rc6_unpark()
679 intel_uncore_write_fw(uncore, GEN6_RC_CONTROL, rc6->ctl_enable); in intel_rc6_unpark()
682 void intel_rc6_park(struct intel_rc6 *rc6) in intel_rc6_park() argument
684 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_park()
687 if (!rc6->enabled) in intel_rc6_park()
690 if (unlikely(pctx_corrupted(rc6))) { in intel_rc6_park()
691 intel_rc6_disable(rc6); in intel_rc6_park()
695 if (!rc6->manual) in intel_rc6_park()
701 if (HAS_RC6pp(rc6_to_i915(rc6))) in intel_rc6_park()
703 else if (HAS_RC6p(rc6_to_i915(rc6))) in intel_rc6_park()
710 void intel_rc6_disable(struct intel_rc6 *rc6) in intel_rc6_disable() argument
712 if (!rc6->enabled) in intel_rc6_disable()
715 rpm_get(rc6); in intel_rc6_disable()
716 rc6->enabled = false; in intel_rc6_disable()
718 __intel_rc6_disable(rc6); in intel_rc6_disable()
721 void intel_rc6_fini(struct intel_rc6 *rc6) in intel_rc6_fini() argument
724 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_fini()
726 intel_rc6_disable(rc6); in intel_rc6_fini()
729 if (IS_METEORLAKE(rc6_to_i915(rc6)) && rc6->bios_state_captured) in intel_rc6_fini()
730 intel_uncore_write_fw(uncore, GEN6_RC_STATE, rc6->bios_rc_state); in intel_rc6_fini()
732 pctx = fetch_and_zero(&rc6->pctx); in intel_rc6_fini()
736 if (rc6->wakeref) in intel_rc6_fini()
737 rpm_put(rc6); in intel_rc6_fini()
785 u64 intel_rc6_residency_ns(struct intel_rc6 *rc6, enum intel_rc6_res_type id) in intel_rc6_residency_ns() argument
787 struct drm_i915_private *i915 = rc6_to_i915(rc6); in intel_rc6_residency_ns()
788 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_residency_ns()
790 i915_reg_t reg = rc6->res_reg[id]; in intel_rc6_residency_ns()
795 if (!rc6->supported) in intel_rc6_residency_ns()
829 prev_hw = rc6->prev_hw_residency[id]; in intel_rc6_residency_ns()
830 rc6->prev_hw_residency[id] = time_hw; in intel_rc6_residency_ns()
839 time_hw += rc6->cur_residency[id]; in intel_rc6_residency_ns()
840 rc6->cur_residency[id] = time_hw; in intel_rc6_residency_ns()
848 u64 intel_rc6_residency_us(struct intel_rc6 *rc6, enum intel_rc6_res_type id) in intel_rc6_residency_us() argument
850 return DIV_ROUND_UP_ULL(intel_rc6_residency_ns(rc6, id), 1000); in intel_rc6_residency_us()
857 i915_reg_t reg = gt->rc6.res_reg[id]; in intel_rc6_print_residency()
863 intel_rc6_residency_us(>->rc6, id)); in intel_rc6_print_residency()