diff options
author | Dave Airlie <airlied@redhat.com> | 2020-03-30 15:56:03 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2020-03-30 15:56:12 +1000 |
commit | 700d6ab987f3b5e28b13b5993e5a9a975c5604e2 (patch) | |
tree | 40b889d77610547e044eda44641c1772f391676f /drivers/gpu/drm/i915/gt/intel_rps.c | |
parent | c0ca5437c5098f70af51974e9e790260c18582a0 (diff) | |
parent | 2bdd4c28baff29163808677a70942de2b45f17dc (diff) | |
download | kernel_replicant_linux-700d6ab987f3b5e28b13b5993e5a9a975c5604e2.tar.gz kernel_replicant_linux-700d6ab987f3b5e28b13b5993e5a9a975c5604e2.tar.bz2 kernel_replicant_linux-700d6ab987f3b5e28b13b5993e5a9a975c5604e2.zip |
Merge tag 'drm-intel-next-fixes-2020-03-27' of git://anongit.freedesktop.org/drm/drm-intel into drm-next
Fixes for instability on Baytrail and Haswell;
Ice Lake RPS; Sandy Bridge RC6; and few others around
GT hangchec/reset; livelock; and a null dereference.
Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200327081607.GA3082710@intel.com
Diffstat (limited to 'drivers/gpu/drm/i915/gt/intel_rps.c')
-rw-r--r-- | drivers/gpu/drm/i915/gt/intel_rps.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/gt/intel_rps.c b/drivers/gpu/drm/i915/gt/intel_rps.c index 87f9638d2cbf..cfaf141bac4d 100644 --- a/drivers/gpu/drm/i915/gt/intel_rps.c +++ b/drivers/gpu/drm/i915/gt/intel_rps.c @@ -770,6 +770,19 @@ void intel_rps_park(struct intel_rps *rps) intel_uncore_forcewake_get(rps_to_uncore(rps), FORCEWAKE_MEDIA); rps_set(rps, rps->idle_freq, false); intel_uncore_forcewake_put(rps_to_uncore(rps), FORCEWAKE_MEDIA); + + /* + * Since we will try and restart from the previously requested + * frequency on unparking, treat this idle point as a downclock + * interrupt and reduce the frequency for resume. If we park/unpark + * more frequently than the rps worker can run, we will not respond + * to any EI and never see a change in frequency. + * + * (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); } void intel_rps_boost(struct i915_request *rq) |