We reduced the clocks slowly after a boost event based on the
observation that the smoothness of animations suffered. However, since
reducing the evalution intervals, we should be able to respond to the
rapidly fluctuating workload of a simple desktop animation and so
restore the more aggressive downclocking.

References: 2a8862d2f3da ("drm/i915: Reduce the RPS shock")
Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
Reviewed-by: Andi Shyti <andi.sh...@intel.com>
---
 drivers/gpu/drm/i915/gt/intel_rps.c | 20 ++++----------------
 1 file changed, 4 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_rps.c 
b/drivers/gpu/drm/i915/gt/intel_rps.c
index a2ff98706fef..0db543b2ac28 100644
--- a/drivers/gpu/drm/i915/gt/intel_rps.c
+++ b/drivers/gpu/drm/i915/gt/intel_rps.c
@@ -1693,30 +1693,18 @@ static void rps_work(struct work_struct *work)
                adj = 0;
        }
 
-       rps->last_adj = adj;
-
        /*
-        * Limit deboosting and boosting to keep ourselves at the extremes
-        * when in the respective power modes (i.e. slowly decrease frequencies
-        * while in the HIGH_POWER zone and slowly increase frequencies while
-        * in the LOW_POWER zone). On idle, we will hit the timeout and drop
-        * to the next level quickly, and conversely if busy we expect to
-        * hit a waitboost and rapidly switch into max power.
-        */
-       if ((adj < 0 && rps->power.mode == HIGH_POWER) ||
-           (adj > 0 && rps->power.mode == LOW_POWER))
-               rps->last_adj = 0;
-
-       /* sysfs frequency interfaces may have snuck in while servicing the
-        * interrupt
+        * sysfs frequency limits may have snuck in while
+        * servicing the interrupt
         */
        new_freq += adj;
        new_freq = clamp_t(int, new_freq, min, max);
 
        if (intel_rps_set(rps, new_freq)) {
                drm_dbg(&i915->drm, "Failed to set new GPU frequency\n");
-               rps->last_adj = 0;
+               adj = 0;
        }
+       rps->last_adj = adj;
 
        mutex_unlock(&rps->lock);
 
-- 
2.20.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to