Commit 5cd062e3 authored by Thomas Zimmermann's avatar Thomas Zimmermann

drm/mgag200: Set SCROFF in primary-plane code

The SCROFF bit controls reading the primary plane's scanout buffer
from video memory. Set it from primary-plane code, instead of CRTC
code.

v3:
	* only flip SCROFF when enabling/disabling the plane (Jocelyn)
Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarJocelyn Falempe <jfalempe@redhat.com>
Tested-by: default avatarJocelyn Falempe <jfalempe@redhat.com>
Acked-by: default avatarSam Ravnborg <sam@ravnborg.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20220728124103.30159-9-tzimmermann@suse.de
parent 1baf9127
...@@ -549,7 +549,7 @@ static void mgag200_g200ev_set_hiprilvl(struct mga_device *mdev) ...@@ -549,7 +549,7 @@ static void mgag200_g200ev_set_hiprilvl(struct mga_device *mdev)
static void mgag200_enable_display(struct mga_device *mdev) static void mgag200_enable_display(struct mga_device *mdev)
{ {
u8 seq0, seq1, crtcext1; u8 seq0, crtcext1;
RREG_SEQ(0x00, seq0); RREG_SEQ(0x00, seq0);
seq0 |= MGAREG_SEQ0_SYNCRST | seq0 |= MGAREG_SEQ0_SYNCRST |
...@@ -563,12 +563,6 @@ static void mgag200_enable_display(struct mga_device *mdev) ...@@ -563,12 +563,6 @@ static void mgag200_enable_display(struct mga_device *mdev)
mga_wait_vsync(mdev); mga_wait_vsync(mdev);
mga_wait_busy(mdev); mga_wait_busy(mdev);
RREG_SEQ(0x01, seq1);
seq1 &= ~MGAREG_SEQ1_SCROFF;
WREG_SEQ(0x01, seq1);
msleep(20);
RREG_ECRT(0x01, crtcext1); RREG_ECRT(0x01, crtcext1);
crtcext1 &= ~MGAREG_CRTCEXT1_VSYNCOFF; crtcext1 &= ~MGAREG_CRTCEXT1_VSYNCOFF;
crtcext1 &= ~MGAREG_CRTCEXT1_HSYNCOFF; crtcext1 &= ~MGAREG_CRTCEXT1_HSYNCOFF;
...@@ -577,7 +571,7 @@ static void mgag200_enable_display(struct mga_device *mdev) ...@@ -577,7 +571,7 @@ static void mgag200_enable_display(struct mga_device *mdev)
static void mgag200_disable_display(struct mga_device *mdev) static void mgag200_disable_display(struct mga_device *mdev)
{ {
u8 seq0, seq1, crtcext1; u8 seq0, crtcext1;
RREG_SEQ(0x00, seq0); RREG_SEQ(0x00, seq0);
seq0 &= ~MGAREG_SEQ0_SYNCRST; seq0 &= ~MGAREG_SEQ0_SYNCRST;
...@@ -590,12 +584,6 @@ static void mgag200_disable_display(struct mga_device *mdev) ...@@ -590,12 +584,6 @@ static void mgag200_disable_display(struct mga_device *mdev)
mga_wait_vsync(mdev); mga_wait_vsync(mdev);
mga_wait_busy(mdev); mga_wait_busy(mdev);
RREG_SEQ(0x01, seq1);
seq1 |= MGAREG_SEQ1_SCROFF;
WREG_SEQ(0x01, seq1);
msleep(20);
RREG_ECRT(0x01, crtcext1); RREG_ECRT(0x01, crtcext1);
crtcext1 |= MGAREG_CRTCEXT1_VSYNCOFF | crtcext1 |= MGAREG_CRTCEXT1_VSYNCOFF |
MGAREG_CRTCEXT1_HSYNCOFF; MGAREG_CRTCEXT1_HSYNCOFF;
...@@ -673,6 +661,7 @@ static void mgag200_primary_plane_helper_atomic_update(struct drm_plane *plane, ...@@ -673,6 +661,7 @@ static void mgag200_primary_plane_helper_atomic_update(struct drm_plane *plane,
struct drm_framebuffer *fb = plane_state->fb; struct drm_framebuffer *fb = plane_state->fb;
struct drm_atomic_helper_damage_iter iter; struct drm_atomic_helper_damage_iter iter;
struct drm_rect damage; struct drm_rect damage;
u8 seq1;
if (!fb) if (!fb)
return; return;
...@@ -685,11 +674,27 @@ static void mgag200_primary_plane_helper_atomic_update(struct drm_plane *plane, ...@@ -685,11 +674,27 @@ static void mgag200_primary_plane_helper_atomic_update(struct drm_plane *plane,
/* Always scanout image at VRAM offset 0 */ /* Always scanout image at VRAM offset 0 */
mgag200_set_startadd(mdev, (u32)0); mgag200_set_startadd(mdev, (u32)0);
mgag200_set_offset(mdev, fb); 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);
}
} }
static void mgag200_primary_plane_helper_atomic_disable(struct drm_plane *plane, static void mgag200_primary_plane_helper_atomic_disable(struct drm_plane *plane,
struct drm_atomic_state *old_state) struct drm_atomic_state *old_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);
}
static const struct drm_plane_helper_funcs mgag200_primary_plane_helper_funcs = { static const struct drm_plane_helper_funcs mgag200_primary_plane_helper_funcs = {
DRM_GEM_SHADOW_PLANE_HELPER_FUNCS, DRM_GEM_SHADOW_PLANE_HELPER_FUNCS,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment