diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index cc3c2d9eb7f40dc9825d26e096cab82cf073b6ec..c198dbad3e8286f5b202228206891f4ef58d995e 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c @@ -755,12 +755,15 @@ static bool vlv_compute_drain_latency(struct drm_crtc *crtc, return false; entries = DIV_ROUND_UP(clock, 1000) * pixel_size; - if (IS_CHERRYVIEW(dev)) - *prec_mult = (entries > 32) ? 16 : 8; - else - *prec_mult = (entries > 128) ? 64 : 32; + + *prec_mult = IS_CHERRYVIEW(dev) ? 16 : 64; *drain_latency = (64 * (*prec_mult) * 4) / entries; + if (*drain_latency > DRAIN_LATENCY_MASK) { + *prec_mult /= 2; + *drain_latency = (64 * (*prec_mult) * 4) / entries; + } + if (*drain_latency > DRAIN_LATENCY_MASK) *drain_latency = DRAIN_LATENCY_MASK;