mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 01:11:51 -04:00
drm/xe: Fix a bug in pc_adjust_freq_bounds()
In cases where min frequency was actually greater than BMG_MIN_FREQ,
we were not using the updated min frequency as there was a missing
call to pc_action_query_task_state() between the two settings of
min frequency. Since we know what min_freq was last set, use that
cached value while comparing to BMG_MIN_FREQ to fix this issue.
v2: pc->freq_ready is not set until after pc_adjust_freq_bounds(). Stay
with pc_action_query_task_state() instead.
v3: Update commit message (Stuart)
Fixes: bdde16c9ac ("drm/xe/bmg: Update Wa_14022085890")
Signed-off-by: Balasubramani Vivekanandan <balasubramani.vivekanandan@intel.com>
Signed-off-by: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
Reviewed-by: Stuart Summers <stuart.summers@intel.com>
Link: https://patch.msgid.link/20260805234649.2076384-1-vinay.belgaumkar@intel.com
(cherry picked from commit a2c2d2b13a9ea9494d2d76b46273833111749507)
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
This commit is contained in:
committed by
Thomas Hellström
parent
f110dbbfa2
commit
5cf82c8cec
@@ -911,6 +911,7 @@ static bool pc_needs_min_freq_change(struct xe_guc_pc *pc)
|
||||
static int pc_adjust_freq_bounds(struct xe_guc_pc *pc)
|
||||
{
|
||||
int ret;
|
||||
u32 min_freq;
|
||||
|
||||
lockdep_assert_held(&pc->freq_lock);
|
||||
|
||||
@@ -933,8 +934,14 @@ static int pc_adjust_freq_bounds(struct xe_guc_pc *pc)
|
||||
* Same thing happens for Server platforms where min is listed as
|
||||
* RPMax
|
||||
*/
|
||||
if (pc_get_min_freq(pc) > pc->rp0_freq)
|
||||
min_freq = pc_get_min_freq(pc);
|
||||
if (min_freq > pc->rp0_freq) {
|
||||
ret = pc_set_min_freq(pc, pc->rp0_freq);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
min_freq = pc->rp0_freq;
|
||||
}
|
||||
|
||||
/*
|
||||
* Setting GT RP min frequency to 1.2GHz by default for
|
||||
@@ -947,8 +954,8 @@ static int pc_adjust_freq_bounds(struct xe_guc_pc *pc)
|
||||
* we aren't expecting high power output across board
|
||||
*
|
||||
*/
|
||||
if (pc_needs_min_freq_change(pc))
|
||||
ret = pc_set_min_freq(pc, max(BMG_MIN_FREQ, pc_get_min_freq(pc)));
|
||||
if (pc_needs_min_freq_change(pc) && min_freq < BMG_MIN_FREQ)
|
||||
ret = pc_set_min_freq(pc, BMG_MIN_FREQ);
|
||||
|
||||
out:
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user