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

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
Loading
Loading
Loading
Loading
+47 −48
Original line number Original line Diff line number Diff line
@@ -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 */

	dst += drm_fb_clip_offset(fb->pitches[0], fb->format, clip);
	drm_fb_memcpy_toio(dst, fb->pitches[0], vaddr, fb, clip);
}


/*
/*
	 * Protect access to I/O registers from concurrent modesetting
 * Simple Display Pipe
	 * 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 uint32_t mgag200_simple_display_pipe_formats[] = {
}
	DRM_FORMAT_XRGB8888,

	DRM_FORMAT_RGB565,
static const struct drm_connector_helper_funcs mga_vga_connector_helper_funcs = {
	DRM_FORMAT_RGB888,
	.get_modes  = mgag200_vga_connector_helper_get_modes,
};
};


static const struct drm_connector_funcs mga_vga_connector_funcs = {
static const uint64_t mgag200_simple_display_pipe_fmtmods[] = {
	.reset                  = drm_atomic_helper_connector_reset,
	DRM_FORMAT_MOD_LINEAR,
	.fill_modes             = drm_helper_probe_single_connector_modes,
	DRM_FORMAT_MOD_INVALID
	.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
 */

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,
	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,


	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,


	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 = {
	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,
};
};


/*
/*