Ths plane is enabled after the crtc is setted first, so first turn off
the plane than the crtc. If not, it can occur some side effects because
it may have to use any information of crtc when turns off the plane.

Signed-off-by: Joonyoung Shim <jy0922.shim at samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park at samsung.com>
---
 drivers/gpu/drm/drm_crtc.c |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index e2c9386..73eeace 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -329,6 +329,15 @@ void drm_framebuffer_cleanup(struct drm_framebuffer *fb)
        struct drm_mode_set set;
        int ret;

+       list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
+               if (plane->fb == fb) {
+                       /* should turn off the plane */
+                       ret = plane->funcs->disable_plane(plane);
+                       if (ret)
+                               DRM_ERROR("failed to disable plane with busy 
fb\n");
+               }
+       }
+
        /* remove from any CRTC */
        list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
                if (crtc->fb == fb) {
@@ -342,15 +351,6 @@ void drm_framebuffer_cleanup(struct drm_framebuffer *fb)
                }
        }

-       list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
-               if (plane->fb == fb) {
-                       /* should turn off the crtc */
-                       ret = plane->funcs->disable_plane(plane);
-                       if (ret)
-                               DRM_ERROR("failed to disable plane with busy 
fb\n");
-               }
-       }
-
        drm_mode_object_put(dev, &fb->base);
        list_del(&fb->head);
        dev->mode_config.num_fb--;
-- 
1.7.5.4

Reply via email to