Commit 4f4dc37e authored by Thomas Zimmermann's avatar Thomas Zimmermann

drm/mgag200: Reorganize before dropping simple-KMS helpers

Move around some modesetting code before dropping simple-KMS helpers.
Makes the next patch more readable. No functional changes.
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-7-tzimmermann@suse.de
parent ed2ef21f
...@@ -603,42 +603,31 @@ static void mgag200_disable_display(struct mga_device *mdev) ...@@ -603,42 +603,31 @@ static void mgag200_disable_display(struct mga_device *mdev)
WREG_ECRT(0x01, crtcext1); WREG_ECRT(0x01, crtcext1);
} }
/* static void mgag200_handle_damage(struct mga_device *mdev, const struct iosys_map *vmap,
* Connector struct drm_framebuffer *fb, const struct drm_rect *clip)
*/
static int mgag200_vga_connector_helper_get_modes(struct drm_connector *connector)
{ {
struct mga_device *mdev = to_mga_device(connector->dev); void __iomem *dst = mdev->vram;
int ret; void *vaddr = vmap[0].vaddr; /* TODO: Use mapping abstraction properly */
/*
* Protect access to I/O registers from concurrent modesetting
* by acquiring the I/O-register lock.
*/
mutex_lock(&mdev->rmmio_lock);
ret = drm_connector_helper_get_modes_from_ddc(connector);
mutex_unlock(&mdev->rmmio_lock);
return ret; dst += drm_fb_clip_offset(fb->pitches[0], fb->format, clip);
drm_fb_memcpy_toio(dst, fb->pitches[0], vaddr, fb, clip);
} }
static const struct drm_connector_helper_funcs mga_vga_connector_helper_funcs = {
.get_modes = mgag200_vga_connector_helper_get_modes,
};
static const struct drm_connector_funcs mga_vga_connector_funcs = {
.reset = drm_atomic_helper_connector_reset,
.fill_modes = drm_helper_probe_single_connector_modes,
.destroy = drm_connector_cleanup,
.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
};
/* /*
* Simple Display Pipe * Simple Display Pipe
*/ */
static const uint32_t mgag200_simple_display_pipe_formats[] = {
DRM_FORMAT_XRGB8888,
DRM_FORMAT_RGB565,
DRM_FORMAT_RGB888,
};
static const uint64_t mgag200_simple_display_pipe_fmtmods[] = {
DRM_FORMAT_MOD_LINEAR,
DRM_FORMAT_MOD_INVALID
};
static enum drm_mode_status static enum drm_mode_status
mgag200_simple_display_pipe_mode_valid(struct drm_simple_display_pipe *pipe, mgag200_simple_display_pipe_mode_valid(struct drm_simple_display_pipe *pipe,
const struct drm_display_mode *mode) const struct drm_display_mode *mode)
...@@ -670,17 +659,6 @@ mgag200_simple_display_pipe_mode_valid(struct drm_simple_display_pipe *pipe, ...@@ -670,17 +659,6 @@ mgag200_simple_display_pipe_mode_valid(struct drm_simple_display_pipe *pipe,
return MODE_OK; return MODE_OK;
} }
static void
mgag200_handle_damage(struct mga_device *mdev, struct drm_framebuffer *fb,
struct drm_rect *clip, const struct iosys_map *map)
{
void __iomem *dst = mdev->vram;
void *vmap = map->vaddr; /* TODO: Use mapping abstraction properly */
dst += drm_fb_clip_offset(fb->pitches[0], fb->format, clip);
drm_fb_memcpy_toio(dst, fb->pitches[0], vmap, fb, clip);
}
static void static void
mgag200_simple_display_pipe_enable(struct drm_simple_display_pipe *pipe, mgag200_simple_display_pipe_enable(struct drm_simple_display_pipe *pipe,
struct drm_crtc_state *crtc_state, struct drm_crtc_state *crtc_state,
...@@ -728,7 +706,7 @@ mgag200_simple_display_pipe_enable(struct drm_simple_display_pipe *pipe, ...@@ -728,7 +706,7 @@ mgag200_simple_display_pipe_enable(struct drm_simple_display_pipe *pipe,
mgag200_enable_display(mdev); mgag200_enable_display(mdev);
mgag200_handle_damage(mdev, fb, &fullscreen, &shadow_plane_state->data[0]); mgag200_handle_damage(mdev, shadow_plane_state->data, fb, &fullscreen);
/* 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);
...@@ -809,7 +787,7 @@ mgag200_simple_display_pipe_update(struct drm_simple_display_pipe *pipe, ...@@ -809,7 +787,7 @@ mgag200_simple_display_pipe_update(struct drm_simple_display_pipe *pipe,
drm_atomic_helper_damage_iter_init(&iter, old_state, state); drm_atomic_helper_damage_iter_init(&iter, old_state, state);
drm_atomic_for_each_plane_damage(&iter, &damage) { drm_atomic_for_each_plane_damage(&iter, &damage) {
mgag200_handle_damage(mdev, fb, &damage, &shadow_plane_state->data[0]); mgag200_handle_damage(mdev, shadow_plane_state->data, fb, &damage);
} }
/* 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);
...@@ -877,15 +855,36 @@ mgag200_simple_display_pipe_funcs = { ...@@ -877,15 +855,36 @@ mgag200_simple_display_pipe_funcs = {
DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS, DRM_GEM_SIMPLE_DISPLAY_PIPE_SHADOW_PLANE_FUNCS,
}; };
static const uint32_t mgag200_simple_display_pipe_formats[] = { /*
DRM_FORMAT_XRGB8888, * Connector
DRM_FORMAT_RGB565, */
DRM_FORMAT_RGB888,
static int mgag200_vga_connector_helper_get_modes(struct drm_connector *connector)
{
struct mga_device *mdev = to_mga_device(connector->dev);
int ret;
/*
* Protect access to I/O registers from concurrent modesetting
* by acquiring the I/O-register lock.
*/
mutex_lock(&mdev->rmmio_lock);
ret = drm_connector_helper_get_modes_from_ddc(connector);
mutex_unlock(&mdev->rmmio_lock);
return ret;
}
static const struct drm_connector_helper_funcs mga_vga_connector_helper_funcs = {
.get_modes = mgag200_vga_connector_helper_get_modes,
}; };
static const uint64_t mgag200_simple_display_pipe_fmtmods[] = { static const struct drm_connector_funcs mga_vga_connector_funcs = {
DRM_FORMAT_MOD_LINEAR, .reset = drm_atomic_helper_connector_reset,
DRM_FORMAT_MOD_INVALID .fill_modes = drm_helper_probe_single_connector_modes,
.destroy = drm_connector_cleanup,
.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
}; };
/* /*
......
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