[PATCH v1] drm: Do not allow to set NOFB for active primary plane
Ville Syrjälä
ville.syrjala at linux.intel.com
Mon Apr 15 12:36:08 UTC 2019
On Mon, Apr 15, 2019 at 10:58:47AM +0300, Stanislav Lisovskiy wrote:
> There was an issue reported from end users, confirmed
> also locally that when user executes xrandr --output <some DP>
> --rotate left/right, the other eDP screen gets blank after rotation.
>
> Investigation showed that reason was that primary plane
> was that screen was for some reason disabled, while cursor
> plane was still enabled.
> After some effort it turns out that userspace might wrongly
> assign NOFB to active primary plane for some reason.
>
> Then this gets detected in drm_atomic_helper_check_plane_state,
> called from ->plane_check and plane gets deactivated, leaving
> the screen blank and cursor visible. This can be cured by reboot
> or xrandr off/on sequence for that crtc.
>
> This patch is proposal to fix the issue by forbiding fb removal
> from active primary plane. If one needs to remove fb plane must be
> disabled first.
>
> Not sure if this is correct, however it fixes the issue at least.
It is not. Removing the fb (and crtc) is how you disable a plane.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110375
> Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy at intel.com>
> ---
> drivers/gpu/drm/drm_atomic_uapi.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
> index ea797d4c82ee..e2f078b302f3 100644
> --- a/drivers/gpu/drm/drm_atomic_uapi.c
> +++ b/drivers/gpu/drm/drm_atomic_uapi.c
> @@ -229,6 +229,15 @@ drm_atomic_set_fb_for_plane(struct drm_plane_state *plane_state,
> {
> struct drm_plane *plane = plane_state->plane;
>
> + if (!fb) {
> + if (plane->state->visible && plane->type == DRM_PLANE_TYPE_PRIMARY) {a
.visible is not even computed yet when this is called.
> + DRM_DEBUG_ATOMIC("Not allowed to set [NOFB] for active"
> + " primary [PLANE:%d:%s] - disable first",
> + plane->base.id, plane->name);
> + return;
> + }
> + }
> +
> if (fb)
> DRM_DEBUG_ATOMIC("Set [FB:%d] for [PLANE:%d:%s] state %p\n",
> fb->base.id, plane->base.id, plane->name,
> --
> 2.17.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Ville Syrjälä
Intel
More information about the dri-devel
mailing list