Lines Matching refs:rc6
36 static struct intel_gt *rc6_to_gt(struct intel_rc6 *rc6) in rc6_to_gt() argument
38 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()
282 static int chv_rc6_init(struct intel_rc6 *rc6) in chv_rc6_init() argument
284 struct intel_uncore *uncore = rc6_to_uncore(rc6); in chv_rc6_init()
285 struct drm_i915_private *i915 = rc6_to_i915(rc6); in chv_rc6_init()
303 static int vlv_rc6_init(struct intel_rc6 *rc6) in vlv_rc6_init() argument
305 struct drm_i915_private *i915 = rc6_to_i915(rc6); in vlv_rc6_init()
306 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 static bool bxt_check_bios_rc6_setup(struct intel_rc6 *rc6) in bxt_check_bios_rc6_setup() argument
413 struct intel_uncore *uncore = rc6_to_uncore(rc6); in bxt_check_bios_rc6_setup()
414 struct drm_i915_private *i915 = rc6_to_i915(rc6); in bxt_check_bios_rc6_setup()
474 static bool rc6_supported(struct intel_rc6 *rc6) in rc6_supported() argument
476 struct drm_i915_private *i915 = rc6_to_i915(rc6); in rc6_supported()
484 if (is_mock_gt(rc6_to_gt(rc6))) in rc6_supported()
487 if (IS_GEN9_LP(i915) && !bxt_check_bios_rc6_setup(rc6)) { in rc6_supported()
496 static void rpm_get(struct intel_rc6 *rc6) in rpm_get() argument
498 GEM_BUG_ON(rc6->wakeref); in rpm_get()
499 pm_runtime_get_sync(rc6_to_i915(rc6)->drm.dev); in rpm_get()
500 rc6->wakeref = true; in rpm_get()
503 static void rpm_put(struct intel_rc6 *rc6) in rpm_put() argument
505 GEM_BUG_ON(!rc6->wakeref); in rpm_put()
506 pm_runtime_put(rc6_to_i915(rc6)->drm.dev); in rpm_put()
507 rc6->wakeref = false; in rpm_put()
510 static bool pctx_corrupted(struct intel_rc6 *rc6) in pctx_corrupted() argument
512 struct drm_i915_private *i915 = rc6_to_i915(rc6); in pctx_corrupted()
517 if (intel_uncore_read(rc6_to_uncore(rc6), GEN8_RC6_CTX_INFO)) in pctx_corrupted()
525 static void __intel_rc6_disable(struct intel_rc6 *rc6) in __intel_rc6_disable() argument
527 struct drm_i915_private *i915 = rc6_to_i915(rc6); in __intel_rc6_disable()
528 struct intel_uncore *uncore = rc6_to_uncore(rc6); in __intel_rc6_disable()
529 struct intel_gt *gt = rc6_to_gt(rc6); in __intel_rc6_disable()
542 void intel_rc6_init(struct intel_rc6 *rc6) in intel_rc6_init() argument
544 struct drm_i915_private *i915 = rc6_to_i915(rc6); in intel_rc6_init()
548 rpm_get(rc6); in intel_rc6_init()
550 if (!rc6_supported(rc6)) in intel_rc6_init()
554 err = chv_rc6_init(rc6); in intel_rc6_init()
556 err = vlv_rc6_init(rc6); in intel_rc6_init()
561 __intel_rc6_disable(rc6); in intel_rc6_init()
563 rc6->supported = err == 0; in intel_rc6_init()
566 void intel_rc6_sanitize(struct intel_rc6 *rc6) in intel_rc6_sanitize() argument
568 memset(rc6->prev_hw_residency, 0, sizeof(rc6->prev_hw_residency)); in intel_rc6_sanitize()
570 if (rc6->enabled) { /* unbalanced suspend/resume */ in intel_rc6_sanitize()
571 rpm_get(rc6); in intel_rc6_sanitize()
572 rc6->enabled = false; in intel_rc6_sanitize()
575 if (rc6->supported) in intel_rc6_sanitize()
576 __intel_rc6_disable(rc6); in intel_rc6_sanitize()
579 void intel_rc6_enable(struct intel_rc6 *rc6) in intel_rc6_enable() argument
581 struct drm_i915_private *i915 = rc6_to_i915(rc6); in intel_rc6_enable()
582 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_enable()
584 if (!rc6->supported) in intel_rc6_enable()
587 GEM_BUG_ON(rc6->enabled); in intel_rc6_enable()
592 chv_rc6_enable(rc6); in intel_rc6_enable()
594 vlv_rc6_enable(rc6); in intel_rc6_enable()
596 gen11_rc6_enable(rc6); in intel_rc6_enable()
598 gen9_rc6_enable(rc6); in intel_rc6_enable()
600 gen8_rc6_enable(rc6); in intel_rc6_enable()
602 gen6_rc6_enable(rc6); in intel_rc6_enable()
604 rc6->manual = rc6->ctl_enable & GEN6_RC_CTL_RC6_ENABLE; in intel_rc6_enable()
606 rc6->ctl_enable = 0; in intel_rc6_enable()
610 if (unlikely(pctx_corrupted(rc6))) in intel_rc6_enable()
614 rpm_put(rc6); in intel_rc6_enable()
615 rc6->enabled = true; in intel_rc6_enable()
618 void intel_rc6_unpark(struct intel_rc6 *rc6) in intel_rc6_unpark() argument
620 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_unpark()
622 if (!rc6->enabled) in intel_rc6_unpark()
626 set(uncore, GEN6_RC_CONTROL, rc6->ctl_enable); in intel_rc6_unpark()
629 void intel_rc6_park(struct intel_rc6 *rc6) in intel_rc6_park() argument
631 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_park()
634 if (!rc6->enabled) in intel_rc6_park()
637 if (unlikely(pctx_corrupted(rc6))) { in intel_rc6_park()
638 intel_rc6_disable(rc6); in intel_rc6_park()
642 if (!rc6->manual) in intel_rc6_park()
648 if (HAS_RC6pp(rc6_to_i915(rc6))) in intel_rc6_park()
650 else if (HAS_RC6p(rc6_to_i915(rc6))) in intel_rc6_park()
657 void intel_rc6_disable(struct intel_rc6 *rc6) in intel_rc6_disable() argument
659 if (!rc6->enabled) in intel_rc6_disable()
662 rpm_get(rc6); in intel_rc6_disable()
663 rc6->enabled = false; in intel_rc6_disable()
665 __intel_rc6_disable(rc6); in intel_rc6_disable()
668 void intel_rc6_fini(struct intel_rc6 *rc6) in intel_rc6_fini() argument
672 intel_rc6_disable(rc6); in intel_rc6_fini()
674 pctx = fetch_and_zero(&rc6->pctx); in intel_rc6_fini()
678 if (rc6->wakeref) in intel_rc6_fini()
679 rpm_put(rc6); in intel_rc6_fini()
727 u64 intel_rc6_residency_ns(struct intel_rc6 *rc6, const i915_reg_t reg) in intel_rc6_residency_ns() argument
729 struct drm_i915_private *i915 = rc6_to_i915(rc6); in intel_rc6_residency_ns()
730 struct intel_uncore *uncore = rc6_to_uncore(rc6); in intel_rc6_residency_ns()
737 if (!rc6->supported) in intel_rc6_residency_ns()
749 if (drm_WARN_ON_ONCE(&i915->drm, i >= ARRAY_SIZE(rc6->cur_residency))) in intel_rc6_residency_ns()
783 prev_hw = rc6->prev_hw_residency[i]; in intel_rc6_residency_ns()
784 rc6->prev_hw_residency[i] = time_hw; in intel_rc6_residency_ns()
793 time_hw += rc6->cur_residency[i]; in intel_rc6_residency_ns()
794 rc6->cur_residency[i] = time_hw; in intel_rc6_residency_ns()
802 u64 intel_rc6_residency_us(struct intel_rc6 *rc6, i915_reg_t reg) in intel_rc6_residency_us() argument
804 return DIV_ROUND_UP_ULL(intel_rc6_residency_ns(rc6, reg), 1000); in intel_rc6_residency_us()