]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
drm/i915/guc/slpc: Apply min softlimit correctly
authorVinay Belgaumkar <vinay.belgaumkar@intel.com>
Wed, 21 Jun 2023 01:42:57 +0000 (18:42 -0700)
committerRoxana Nicolescu <roxana.nicolescu@canonical.com>
Mon, 2 Oct 2023 15:19:59 +0000 (17:19 +0200)
BugLink: https://bugs.launchpad.net/bugs/2034469
[ Upstream commit 3e49de73fb89272dea01ba420c7ccbcf6b96aed7 ]

The scenario being fixed here is depicted in the following sequence-

modprobe i915
echo 1 > /sys/class/drm/card0/gt/gt0/slpc_ignore_eff_freq
echo 300 > /sys/class/drm/card0/gt_min_freq_mhz (RPn)
cat /sys/class/drm/card0/gt_cur_freq_mhz --> cur == RPn as expected
echo 1 > /sys/kernel/debug/dri/0/gt0/reset --> reset
cat /sys/class/drm/card0/gt_min_freq_mhz --> cached freq is RPn
cat /sys/class/drm/card0/gt_cur_freq_mhz --> it's not RPn, but RPe!!

When SLPC reinitializes, it sets SLPC min freq to efficient frequency.
Even if we disable efficient freq post that, we should restore the cached
min freq (via H2G) for it to take effect.

v2: Clarify commit message (Ashutosh)

Fixes: 95ccf312a1e4 ("drm/i915/guc/slpc: Allow SLPC to use efficient frequency")
Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Signed-off-by: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230621014257.1769564-1-vinay.belgaumkar@intel.com
(cherry picked from commit da86b2b13f1d1ca26745b951ac94421f3137539a)
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.c

index 63464933cbcebb72e3b4a13ff21f5b57e35f67c1..c697a662a851c9e9e108ebc0139f33f7a6bc5b3a 100644 (file)
@@ -601,7 +601,7 @@ static int slpc_set_softlimits(struct intel_guc_slpc *slpc)
                if (unlikely(ret))
                        return ret;
                slpc_to_gt(slpc)->defaults.min_freq = slpc->min_freq_softlimit;
-       } else if (slpc->min_freq_softlimit != slpc->min_freq) {
+       } else {
                return intel_guc_slpc_set_min_freq(slpc,
                                                   slpc->min_freq_softlimit);
        }