Enable the primary plane for mgag200 hardware via atomic_enable.
Atomic helpers invoke this callback only when the plane becomes
active.

Signed-off-by: Thomas Zimmermann <tzimmerm...@suse.de>
---
 drivers/gpu/drm/mgag200/mgag200_drv.h  |  3 +++
 drivers/gpu/drm/mgag200/mgag200_mode.c | 19 ++++++++++++-------
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/mgag200/mgag200_drv.h 
b/drivers/gpu/drm/mgag200/mgag200_drv.h
index 9e604dbb8e44..57c7edcab602 100644
--- a/drivers/gpu/drm/mgag200/mgag200_drv.h
+++ b/drivers/gpu/drm/mgag200/mgag200_drv.h
@@ -375,12 +375,15 @@ int mgag200_primary_plane_helper_atomic_check(struct 
drm_plane *plane,
                                              struct drm_atomic_state 
*new_state);
 void mgag200_primary_plane_helper_atomic_update(struct drm_plane *plane,
                                                struct drm_atomic_state 
*old_state);
+void mgag200_primary_plane_helper_atomic_enable(struct drm_plane *plane,
+                                               struct drm_atomic_state *state);
 void mgag200_primary_plane_helper_atomic_disable(struct drm_plane *plane,
                                                 struct drm_atomic_state 
*old_state);
 #define MGAG200_PRIMARY_PLANE_HELPER_FUNCS \
        DRM_GEM_SHADOW_PLANE_HELPER_FUNCS, \
        .atomic_check = mgag200_primary_plane_helper_atomic_check, \
        .atomic_update = mgag200_primary_plane_helper_atomic_update, \
+       .atomic_enable = mgag200_primary_plane_helper_atomic_enable, \
        .atomic_disable = mgag200_primary_plane_helper_atomic_disable
 
 #define MGAG200_PRIMARY_PLANE_FUNCS \
diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c 
b/drivers/gpu/drm/mgag200/mgag200_mode.c
index 47e86eadb239..0f2dd26755df 100644
--- a/drivers/gpu/drm/mgag200/mgag200_mode.c
+++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
@@ -501,7 +501,6 @@ void mgag200_primary_plane_helper_atomic_update(struct 
drm_plane *plane,
        struct drm_framebuffer *fb = plane_state->fb;
        struct drm_atomic_helper_damage_iter iter;
        struct drm_rect damage;
-       u8 seq1;
 
        drm_atomic_helper_damage_iter_init(&iter, old_plane_state, plane_state);
        drm_atomic_for_each_plane_damage(&iter, &damage) {
@@ -511,13 +510,19 @@ void mgag200_primary_plane_helper_atomic_update(struct 
drm_plane *plane,
        /* Always scanout image at VRAM offset 0 */
        mgag200_set_startadd(mdev, (u32)0);
        mgag200_set_offset(mdev, fb);
+}
 
-       if (!old_plane_state->crtc && plane_state->crtc) { // enabling
-               RREG_SEQ(0x01, seq1);
-               seq1 &= ~MGAREG_SEQ1_SCROFF;
-               WREG_SEQ(0x01, seq1);
-               msleep(20);
-       }
+void mgag200_primary_plane_helper_atomic_enable(struct drm_plane *plane,
+                                               struct drm_atomic_state *state)
+{
+       struct drm_device *dev = plane->dev;
+       struct mga_device *mdev = to_mga_device(dev);
+       u8 seq1;
+
+       RREG_SEQ(0x01, seq1);
+       seq1 &= ~MGAREG_SEQ1_SCROFF;
+       WREG_SEQ(0x01, seq1);
+       msleep(20);
 }
 
 void mgag200_primary_plane_helper_atomic_disable(struct drm_plane *plane,
-- 
2.39.1

Reply via email to