| From bf52dc49ba0101f648b4c3ea26b812061406b0d4 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@linux.intel.com> |
| Date: Sat, 27 Mar 2021 02:59:45 +0200 |
| Subject: drm/i915: Don't zero out the Y plane's watermarks |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| |
| commit bf52dc49ba0101f648b4c3ea26b812061406b0d4 upstream. |
| |
| Don't zero out the watermarks for the Y plane since we've already |
| computed them when computing the UV plane's watermarks (since the |
| UV plane always appears before ethe Y plane when iterating through |
| the planes). |
| |
| This leads to allocating no DDB for the Y plane since .min_ddb_alloc |
| also gets zeroed. And that of course leads to underruns when scanning |
| out planar formats. |
| |
| Cc: stable@vger.kernel.org |
| Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> |
| Fixes: dbf71381d733 ("drm/i915: Nuke intel_atomic_crtc_state_for_each_plane_state() from skl+ wm code") |
| Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20210327005945.4929-1-ville.syrjala@linux.intel.com |
| Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com> |
| (cherry picked from commit f99b805fb9413ff007ca0b6add871737664117dd) |
| Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/gpu/drm/i915/intel_pm.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/gpu/drm/i915/intel_pm.c |
| +++ b/drivers/gpu/drm/i915/intel_pm.c |
| @@ -5539,12 +5539,12 @@ static int icl_build_plane_wm(struct int |
| struct skl_plane_wm *wm = &crtc_state->wm.skl.raw.planes[plane_id]; |
| int ret; |
| |
| - memset(wm, 0, sizeof(*wm)); |
| - |
| /* Watermarks calculated in master */ |
| if (plane_state->planar_slave) |
| return 0; |
| |
| + memset(wm, 0, sizeof(*wm)); |
| + |
| if (plane_state->planar_linked_plane) { |
| const struct drm_framebuffer *fb = plane_state->hw.fb; |
| enum plane_id y_plane_id = plane_state->planar_linked_plane->id; |