Skip to content

Commit

Permalink
drm/i915/gt: Apply the aggressive downclocking to parking
Browse files Browse the repository at this point in the history
We treat parking as a manual RPS timeout event, and downclock the GPU
for the next unpark and batch execution. However, having restored the
aggressive downclocking and observed that we have very light workloads
whose only interaction is through the manual parking events, carry over
the aggressive downclocking to the fake RPS events.

References: 21abf0b ("drm/i915/gt: Treat idling as a RPS downclock event")
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Andi Shyti <andi.shyti@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200429205446.3259-5-chris@chris-wilson.co.uk
  • Loading branch information
Chris Wilson committed Apr 29, 2020
1 parent 36d516b commit 3f88dde
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions drivers/gpu/drm/i915/gt/intel_rps.c
Original file line number Diff line number Diff line change
Expand Up @@ -822,8 +822,6 @@ void intel_rps_unpark(struct intel_rps *rps)
rps->min_freq_softlimit,
rps->max_freq_softlimit));

rps->last_adj = 0;

mutex_unlock(&rps->lock);

rps->pm_iir = 0;
Expand All @@ -838,6 +836,8 @@ void intel_rps_unpark(struct intel_rps *rps)

void intel_rps_park(struct intel_rps *rps)
{
int adj;

if (!intel_rps_clear_active(rps))
return;

Expand Down Expand Up @@ -876,8 +876,13 @@ void intel_rps_park(struct intel_rps *rps)
* (Note we accommodate Cherryview's limitation of only using an
* even bin by applying it to all.)
*/
rps->cur_freq =
max_t(int, round_down(rps->cur_freq - 1, 2), rps->min_freq);
adj = rps->last_adj;
if (adj < 0)
adj *= 2;
else /* CHV needs even encode values */
adj = -2;
rps->last_adj = adj;
rps->cur_freq = max_t(int, rps->cur_freq + adj, rps->min_freq);

GT_TRACE(rps_to_gt(rps), "park:%x\n", rps->cur_freq);
}
Expand Down

0 comments on commit 3f88dde

Please sign in to comment.