diff options
Diffstat (limited to 'target/linux/brcm2708/patches-4.19/950-0603-drm-vc4-Iterate-over-all-planes-in-vc4_crtc_-dis-en-.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.19/950-0603-drm-vc4-Iterate-over-all-planes-in-vc4_crtc_-dis-en-.patch | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.19/950-0603-drm-vc4-Iterate-over-all-planes-in-vc4_crtc_-dis-en-.patch b/target/linux/brcm2708/patches-4.19/950-0603-drm-vc4-Iterate-over-all-planes-in-vc4_crtc_-dis-en-.patch new file mode 100644 index 0000000000..2ac3d85923 --- /dev/null +++ b/target/linux/brcm2708/patches-4.19/950-0603-drm-vc4-Iterate-over-all-planes-in-vc4_crtc_-dis-en-.patch @@ -0,0 +1,57 @@ +From c5cbf3c3564e932c94bc4d2156b79136f15221a3 Mon Sep 17 00:00:00 2001 +From: Dave Stevenson <dave.stevenson@raspberrypi.org> +Date: Wed, 10 Apr 2019 17:42:37 +0100 +Subject: [PATCH 603/782] drm: vc4: Iterate over all planes in + vc4_crtc_[dis|en]able + +Fixes a FIXME where the overlay plane wouldn't be restored. + +Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org> +--- + drivers/gpu/drm/vc4/vc4_firmware_kms.c | 20 +++++++++++--------- + 1 file changed, 11 insertions(+), 9 deletions(-) + +--- a/drivers/gpu/drm/vc4/vc4_firmware_kms.c ++++ b/drivers/gpu/drm/vc4/vc4_firmware_kms.c +@@ -598,6 +598,8 @@ static void vc4_crtc_mode_set_nofb(struc + + static void vc4_crtc_disable(struct drm_crtc *crtc, struct drm_crtc_state *old_state) + { ++ struct drm_plane *plane; ++ + drm_crtc_vblank_off(crtc); + + /* Always turn the planes off on CRTC disable. In DRM, planes +@@ -607,23 +609,23 @@ static void vc4_crtc_disable(struct drm_ + * give us a CRTC-level control for that. + */ + +- vc4_plane_atomic_disable(crtc->cursor, crtc->cursor->state); +- vc4_plane_atomic_disable(crtc->primary, crtc->primary->state); +- +- /* FIXME: Disable overlay planes */ ++ drm_atomic_crtc_for_each_plane(plane, crtc) ++ vc4_plane_atomic_disable(plane, plane->state); + } + + static void vc4_crtc_enable(struct drm_crtc *crtc, struct drm_crtc_state *old_state) + { ++ struct drm_plane *plane; ++ + drm_crtc_vblank_on(crtc); ++ + /* Unblank the planes (if they're supposed to be displayed). */ ++ drm_atomic_crtc_for_each_plane(plane, crtc) ++ if (plane->state->fb) ++ vc4_plane_set_blank(plane, plane->state->visible); ++} + +- if (crtc->primary->state->fb) +- vc4_plane_set_blank(crtc->primary, false); +- if (crtc->cursor->state->fb) +- vc4_plane_set_blank(crtc->cursor, crtc->cursor->state); + +- /* FIXME: Enable overlay planes */ + } + + static int vc4_crtc_atomic_check(struct drm_crtc *crtc, |