drm/i915/gt: Clear rc6 residency trackers across suspend
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 14 Jan 2020 10:56:48 +0000 (10:56 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 14 Jan 2020 12:55:13 +0000 (12:55 +0000)
On suspend, the rc6 residency counters (stored in HW registers) will be
lost and cleared. However, we keep track of the rc6 residency to provide
a continuous 64b sampling, and if we see the HW value go backwards, we
assume it overflowed and add on 32b/40b -- an interesting artifact when
sampling across suspend.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200114105648.2172026-2-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/gt/intel_rc6.c

index 9e303c29d6e35bd4233c0a1fd69a640bd0579a03..04eeb7740e53ab370e0df467c42cb5d0b187da34 100644 (file)
@@ -542,6 +542,8 @@ void intel_rc6_init(struct intel_rc6 *rc6)
 
 void intel_rc6_sanitize(struct intel_rc6 *rc6)
 {
+       memset(rc6->prev_hw_residency, 0, sizeof(rc6->prev_hw_residency));
+
        if (rc6->enabled) { /* unbalanced suspend/resume */
                rpm_get(rc6);
                rc6->enabled = false;