drm/i915: Warn about odd rps values on CHV
CHV wants even rps opcodes so print a warning of the min/max/rpe/rp1 values are odd, and warn if an odd value slips through to valleyview_set_rps() and truncate it to an even value. Also add a comment to chv_freq_opcode() to make sure no one changes the code without considering this requirement. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Deepak S <deepak.s@linux.intel.com> [danvet: Help git along in applying the patch, somehow it silently ended up in the vlv init_gt_powersave function.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
cbce710709
commit
1c14762d0c
1 changed files with 11 additions and 0 deletions
|
@ -3477,6 +3477,10 @@ void valleyview_set_rps(struct drm_device *dev, u8 val)
|
|||
dev_priv->rps.cur_freq,
|
||||
vlv_gpu_freq(dev_priv, val), val);
|
||||
|
||||
if (WARN_ONCE(IS_CHERRYVIEW(dev) && (val & 1),
|
||||
"Odd GPU freq value\n"))
|
||||
val &= ~1;
|
||||
|
||||
if (val != dev_priv->rps.cur_freq)
|
||||
vlv_punit_write(dev_priv, PUNIT_REG_GPU_FREQ_REQ, val);
|
||||
|
||||
|
@ -4364,6 +4368,12 @@ static void cherryview_init_gt_powersave(struct drm_device *dev)
|
|||
vlv_gpu_freq(dev_priv, dev_priv->rps.min_freq),
|
||||
dev_priv->rps.min_freq);
|
||||
|
||||
WARN_ONCE((dev_priv->rps.max_freq |
|
||||
dev_priv->rps.efficient_freq |
|
||||
dev_priv->rps.rp1_freq |
|
||||
dev_priv->rps.min_freq) & 1,
|
||||
"Odd GPU freq values\n");
|
||||
|
||||
/* Preserve min/max settings in case of re-init */
|
||||
if (dev_priv->rps.max_freq_softlimit == 0)
|
||||
dev_priv->rps.max_freq_softlimit = dev_priv->rps.max_freq;
|
||||
|
@ -7566,6 +7576,7 @@ static int chv_freq_opcode(struct drm_i915_private *dev_priv, int val)
|
|||
return -1;
|
||||
}
|
||||
|
||||
/* CHV needs even values */
|
||||
opcode = (DIV_ROUND_CLOSEST((val * 2 * mul), dev_priv->rps.cz_freq) * 2);
|
||||
|
||||
return opcode;
|
||||
|
|
Loading…
Add table
Reference in a new issue