drm: Resurrect atomic rmfb code, v3
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Wed, 25 Jan 2017 11:30:47 +0000 (12:30 +0100)
committerJani Nikula <jani.nikula@intel.com>
Wed, 15 Feb 2017 13:40:57 +0000 (15:40 +0200)
commit1592364de3912dad264262f4bcc61552984c9523
treeaf56aa8c0edc37d11e55f7fe82aa48a5dbdfeaf4
parent2220fc1ab363e6fab1f321430d69be17a8b92bd7
drm: Resurrect atomic rmfb code, v3

This was somehow lost between v3 and the merged version in Maarten's
patch merged as:

commit f2d580b9a8149735cbc4b59c4a8df60173658140
Author: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Date:   Wed May 4 14:38:26 2016 +0200

    drm/core: Do not preserve framebuffer on rmfb, v4.

This introduces a slight behavioral change to rmfb. Instead of
disabling a crtc when the primary plane is disabled, we try to
preserve it.

Apart from old versions of the vmwgfx xorg driver, there is
nothing depending on rmfb disabling a crtc. Since vmwgfx is
a legacy driver we can safely only disable the plane with atomic.

If this commit is rejected by the driver then we will still fall
back to the old behavior and turn off the crtc.

v2:
- Remove plane->fb assignment, done by drm_atomic_clean_old_fb.
- Add WARN_ON when atomic_remove_fb fails.
- Always call drm_atomic_state_put.
v3:
- Use drm_drv_uses_atomic_modeset
- Handle the case where the first plane-disable-only commit fails
  with -EINVAL. Some drivers do not support this, fall back to
  disabling all crtc's in this case.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/66fc3da5-697b-1613-0a67-a5293209f0dc@linux.intel.com
drivers/gpu/drm/drm_atomic.c
drivers/gpu/drm/drm_crtc_internal.h
drivers/gpu/drm/drm_framebuffer.c