drm/i915: Make sure cursor has enough ddb for the selected wm level
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 12 Mar 2019 20:58:40 +0000 (22:58 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 20 Mar 2019 15:16:16 +0000 (17:16 +0200)
We use a fixed ddb allocation for the cursor. Now the calculation
actually makes sure we have enough ddb space, but let's double check
anyway.

Cc: Neel Desai <neel.desai@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190312205844.6339-6-ville.syrjala@linux.intel.com
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
drivers/gpu/drm/i915/intel_pm.c

index b35a55a..d54b70d 100644 (file)
@@ -4401,10 +4401,17 @@ skl_allocate_pipe_ddb(struct intel_crtc_state *cstate,
        for (level = ilk_wm_max_level(dev_priv); level >= 0; level--) {
                blocks = 0;
                for_each_plane_id_on_crtc(intel_crtc, plane_id) {
-                       if (plane_id == PLANE_CURSOR)
+                       wm = &cstate->wm.skl.optimal.planes[plane_id];
+
+                       if (plane_id == PLANE_CURSOR) {
+                               if (WARN_ON(wm->wm[level].min_ddb_alloc >
+                                           total[PLANE_CURSOR])) {
+                                       blocks = U32_MAX;
+                                       break;
+                               }
                                continue;
+                       }
 
-                       wm = &cstate->wm.skl.optimal.planes[plane_id];
                        blocks += wm->wm[level].min_ddb_alloc;
                        blocks += wm->uv_wm[level].min_ddb_alloc;
                }