From: Ville Syrjälä <ville.syrj...@linux.intel.com>

Docs tell us that on g4x we have to compute the SR watermarks
using 4 bytes per pixel. I'm going to assume that only applies
to 1 and 2 byte per pixel formats, and not 8 byte per pixel
formats. That seems like a recipe for an insufficient watermark
which could lead to underruns. Use the maximum of the two numbers
instead.

Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
---
 drivers/gpu/drm/i915/intel_pm.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 8f82cb72d3a6..f275698e859d 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -1115,6 +1115,8 @@ static u16 g4x_compute_wm(const struct intel_crtc_state 
*crtc_state,
        if (!intel_wm_plane_visible(crtc_state, plane_state))
                return 0;
 
+       cpp = plane_state->base.fb->format->cpp[0];
+
        /*
         * Not 100% sure which way ELK should go here as the
         * spec only says CL/CTG should assume 32bpp and BW
@@ -1128,9 +1130,7 @@ static u16 g4x_compute_wm(const struct intel_crtc_state 
*crtc_state,
         */
        if (IS_GM45(dev_priv) && plane->id == PLANE_PRIMARY &&
            level != G4X_WM_LEVEL_NORMAL)
-               cpp = 4;
-       else
-               cpp = plane_state->base.fb->format->cpp[0];
+               cpp = max(cpp, 4u);
 
        clock = adjusted_mode->crtc_clock;
        htotal = adjusted_mode->crtc_htotal;
-- 
2.21.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to