drm/i915: Fix g4x cxsr enable condition
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 14 May 2021 12:57:39 +0000 (15:57 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 22 Sep 2021 13:48:44 +0000 (16:48 +0300)
The intention was to check whether the primary plane is enabled
without any sprites planes being enabled. Instead we ended up checking
whether just any one of the planes is enabled. g4x isn't vlv/chv and
cxsr only works with the primary plane. Fix the check to examine the
bitmask of active planes rather than the number of bits set in said
bitmask.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210514125751.17075-3-ville.syrjala@linux.intel.com
Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
drivers/gpu/drm/i915/intel_pm.c

index 9452f5af070d68dc0cb57708d68d96045f73310d..456bc6e16fc98f6a9a43b3351de91037bfbf6211 100644 (file)
@@ -1376,8 +1376,7 @@ static int g4x_compute_pipe_wm(struct intel_atomic_state *state,
        struct intel_crtc_state *crtc_state =
                intel_atomic_get_new_crtc_state(state, crtc);
        struct g4x_wm_state *wm_state = &crtc_state->wm.g4x.optimal;
-       int num_active_planes = hweight8(crtc_state->active_planes &
-                                        ~BIT(PLANE_CURSOR));
+       u8 active_planes = crtc_state->active_planes & ~BIT(PLANE_CURSOR);
        const struct g4x_pipe_wm *raw;
        const struct intel_plane_state *old_plane_state;
        const struct intel_plane_state *new_plane_state;
@@ -1417,7 +1416,7 @@ static int g4x_compute_pipe_wm(struct intel_atomic_state *state,
        wm_state->sr.cursor = raw->plane[PLANE_CURSOR];
        wm_state->sr.fbc = raw->fbc;
 
-       wm_state->cxsr = num_active_planes == BIT(PLANE_PRIMARY);
+       wm_state->cxsr = active_planes == BIT(PLANE_PRIMARY);
 
        level = G4X_WM_LEVEL_HPLL;
        if (!g4x_raw_crtc_wm_is_valid(crtc_state, level))