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 void intel_rc6_init(struct intel_rc6 *rc6) in intel_rc6_init() argument
556 struct drm_i915_private *i915 = rc6_to_i915(rc6); in intel_rc6_init()
560 rpm_get(rc6); in intel_rc6_init()
562 if (!rc6_supported(rc6)) in intel_rc6_init()
566 err = chv_rc6_init(rc6); in intel_rc6_init()
568 err = vlv_rc6_init(rc6); in intel_rc6_init()
573 __intel_rc6_disable(rc6); in intel_rc6_init()
575 rc6->supported = err == 0; in intel_rc6_init()
578 void intel_rc6_sanitize(struct intel_rc6 *rc6) in intel_rc6_sanitize() argument
580 memset(rc6->prev_hw_residency, 0, sizeof(rc6->prev_hw_residency)); in intel_rc6_sanitize()
582 if (rc6->enabled) { /* unbalanced suspend/resume */ in intel_rc6_sanitize()
583 rpm_get(rc6); in intel_rc6_sanitize()
584 rc6->enabled = false; in intel_rc6_sanitize()
587 if (rc6->supported) in intel_rc6_sanitize()
588 __intel_rc6_disable(rc6); in intel_rc6_sanitize()
591 void intel_rc6_enable(struct intel_rc6 *rc6) in intel_rc6_enable() argument
593 struct drm_i915_private *i915 = rc6_to_i915(rc6); in intel_rc6_enable()
594 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_enable()
596 if (!rc6->supported) in intel_rc6_enable()
599 GEM_BUG_ON(rc6->enabled); in intel_rc6_enable()
604 chv_rc6_enable(rc6); in intel_rc6_enable()
606 vlv_rc6_enable(rc6); in intel_rc6_enable()
608 gen11_rc6_enable(rc6); in intel_rc6_enable()
610 gen9_rc6_enable(rc6); in intel_rc6_enable()
612 gen8_rc6_enable(rc6); in intel_rc6_enable()
614 gen6_rc6_enable(rc6); in intel_rc6_enable()
616 rc6->manual = rc6->ctl_enable & GEN6_RC_CTL_RC6_ENABLE; in intel_rc6_enable()
618 rc6->ctl_enable = 0; in intel_rc6_enable()
622 if (unlikely(pctx_corrupted(rc6))) in intel_rc6_enable()
626 rpm_put(rc6); in intel_rc6_enable()
627 rc6->enabled = true; in intel_rc6_enable()
630 void intel_rc6_unpark(struct intel_rc6 *rc6) in intel_rc6_unpark() argument
632 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_unpark()
634 if (!rc6->enabled) in intel_rc6_unpark()
638 set(uncore, GEN6_RC_CONTROL, rc6->ctl_enable); in intel_rc6_unpark()
641 void intel_rc6_park(struct intel_rc6 *rc6) in intel_rc6_park() argument
643 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_park()
646 if (!rc6->enabled) in intel_rc6_park()
649 if (unlikely(pctx_corrupted(rc6))) { in intel_rc6_park()
650 intel_rc6_disable(rc6); in intel_rc6_park()
654 if (!rc6->manual) in intel_rc6_park()
660 if (HAS_RC6pp(rc6_to_i915(rc6))) in intel_rc6_park()
662 else if (HAS_RC6p(rc6_to_i915(rc6))) in intel_rc6_park()
669 void intel_rc6_disable(struct intel_rc6 *rc6) in intel_rc6_disable() argument
671 if (!rc6->enabled) in intel_rc6_disable()
674 rpm_get(rc6); in intel_rc6_disable()
675 rc6->enabled = false; in intel_rc6_disable()
677 __intel_rc6_disable(rc6); in intel_rc6_disable()
680 void intel_rc6_fini(struct intel_rc6 *rc6) in intel_rc6_fini() argument
684 intel_rc6_disable(rc6); in intel_rc6_fini()
686 pctx = fetch_and_zero(&rc6->pctx); in intel_rc6_fini()
690 if (rc6->wakeref) in intel_rc6_fini()
691 rpm_put(rc6); in intel_rc6_fini()
739 u64 intel_rc6_residency_ns(struct intel_rc6 *rc6, const i915_reg_t reg) in intel_rc6_residency_ns() argument
741 struct drm_i915_private *i915 = rc6_to_i915(rc6); in intel_rc6_residency_ns()
742 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_residency_ns()
749 if (!rc6->supported) in intel_rc6_residency_ns()
761 if (drm_WARN_ON_ONCE(&i915->drm, i >= ARRAY_SIZE(rc6->cur_residency))) in intel_rc6_residency_ns()
795 prev_hw = rc6->prev_hw_residency[i]; in intel_rc6_residency_ns()
796 rc6->prev_hw_residency[i] = time_hw; in intel_rc6_residency_ns()
805 time_hw += rc6->cur_residency[i]; in intel_rc6_residency_ns()
806 rc6->cur_residency[i] = time_hw; in intel_rc6_residency_ns()
814 u64 intel_rc6_residency_us(struct intel_rc6 *rc6, i915_reg_t reg) in intel_rc6_residency_us() argument
816 return DIV_ROUND_UP_ULL(intel_rc6_residency_ns(rc6, reg), 1000); in intel_rc6_residency_us()