Hi Joonyoung,
2015-01-29 Joonyoung Shim jy0922.shim@samsung.com:
The exynos_update_plane functions can be called from set_plane as well as set_crtc and pageflip. Currently the plane displayed by set_plane isn't called exynos_plane_on function and if plane is disabled, it calls exynos_plane_off, so it causes disharmory of plane on/off.
This is caused from commit e7cd81111041 ("drm/exynos: Don't touch DPMS when updating overlay planes").
Make .update_plane function called only by set_plane and call exynos_plane_on in it.
Signed-off-by: Joonyoung Shim jy0922.shim@samsung.com
drivers/gpu/drm/exynos/exynos_drm_crtc.c | 4 ++-- drivers/gpu/drm/exynos/exynos_drm_plane.c | 21 ++++++++++++++++++++- drivers/gpu/drm/exynos/exynos_drm_plane.h | 2 +- 3 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c index dac8f90..2765f7e 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c @@ -129,7 +129,7 @@ static int exynos_drm_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, crtc_w = fb->width - x; crtc_h = fb->height - y;
- return exynos_update_plane(crtc->primary, crtc, fb, 0, 0,
- return exynos_plane_update(crtc->primary, crtc, fb, 0, 0, crtc_w, crtc_h, x, y, crtc_w, crtc_h);
This patch goes in the opposite direction of the clean up to support atomic modesetting on exynos (see my patches for atomic modesetting here[0]) In my latest series there was an effort to unify all places we update a plane under exynos_update_plane() and this is a essential step for atomic modesetting.
My proposal to solve this issue would just be calling exynos_plane_dpms() on exynos_drm_crtc_mode_set_base() and leave the rest as is. This would fix the disharmory of plane on/off. I'll send a patch for this in a bit.
[0] https://git.kernel.org/cgit/linux/kernel/git/padovan/drm-exynos.git/log/?h=a...
Gustavo