Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 844f9111 authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Daniel Vetter
Browse files

drm/atomic: Make prepare_fb/cleanup_fb only take state, v3.



This removes the need to separately track fb changes i915.
That will be done as a separate commit, however.

Changes since v1:
- Add dri-devel to cc.
- Fix a check in intel's prepare and cleanup fb to take rotation
  into account.
Changes since v2:
- Split out i915 changes to a separate commit.

Cc: dri-devel@lists.freedesktop.org
Signed-off-by: default avatarMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: default avatarDaniel Stone <daniels@collabora.com>
[danvet: Squash in msm fixup from Maarten.]
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 825926d8
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -712,11 +712,13 @@ static int atmel_hlcdc_plane_atomic_check(struct drm_plane *p,
}

static int atmel_hlcdc_plane_prepare_fb(struct drm_plane *p,
					struct drm_framebuffer *fb,
					const struct drm_plane_state *new_state)
{
	struct atmel_hlcdc_plane *plane = drm_plane_to_atmel_hlcdc_plane(p);

	if (!new_state->fb)
		return 0;

	return atmel_hlcdc_layer_update_start(&plane->layer);
}

+6 −15
Original line number Diff line number Diff line
@@ -1111,17 +1111,14 @@ int drm_atomic_helper_prepare_planes(struct drm_device *dev,
		const struct drm_plane_helper_funcs *funcs;
		struct drm_plane *plane = state->planes[i];
		struct drm_plane_state *plane_state = state->plane_states[i];
		struct drm_framebuffer *fb;

		if (!plane)
			continue;

		funcs = plane->helper_private;

		fb = plane_state->fb;

		if (fb && funcs->prepare_fb) {
			ret = funcs->prepare_fb(plane, fb, plane_state);
		if (funcs->prepare_fb) {
			ret = funcs->prepare_fb(plane, plane_state);
			if (ret)
				goto fail;
		}
@@ -1134,17 +1131,14 @@ int drm_atomic_helper_prepare_planes(struct drm_device *dev,
		const struct drm_plane_helper_funcs *funcs;
		struct drm_plane *plane = state->planes[i];
		struct drm_plane_state *plane_state = state->plane_states[i];
		struct drm_framebuffer *fb;

		if (!plane)
			continue;

		funcs = plane->helper_private;

		fb = state->plane_states[i]->fb;

		if (fb && funcs->cleanup_fb)
			funcs->cleanup_fb(plane, fb, plane_state);
		if (funcs->cleanup_fb)
			funcs->cleanup_fb(plane, plane_state);

	}

@@ -1300,14 +1294,11 @@ void drm_atomic_helper_cleanup_planes(struct drm_device *dev,

	for_each_plane_in_state(old_state, plane, plane_state, i) {
		const struct drm_plane_helper_funcs *funcs;
		struct drm_framebuffer *old_fb;

		funcs = plane->helper_private;

		old_fb = plane_state->fb;

		if (old_fb && funcs->cleanup_fb)
			funcs->cleanup_fb(plane, old_fb, plane_state);
		if (funcs->cleanup_fb)
			funcs->cleanup_fb(plane, plane_state);
	}
}
EXPORT_SYMBOL(drm_atomic_helper_cleanup_planes);
+3 −3
Original line number Diff line number Diff line
@@ -426,7 +426,7 @@ int drm_plane_helper_commit(struct drm_plane *plane,

	if (plane_funcs->prepare_fb && plane_state->fb &&
	    plane_state->fb != old_fb) {
		ret = plane_funcs->prepare_fb(plane, plane_state->fb,
		ret = plane_funcs->prepare_fb(plane,
					      plane_state);
		if (ret)
			goto out;
@@ -479,8 +479,8 @@ int drm_plane_helper_commit(struct drm_plane *plane,
		ret = 0;
	}

	if (plane_funcs->cleanup_fb && old_fb)
		plane_funcs->cleanup_fb(plane, old_fb, plane_state);
	if (plane_funcs->cleanup_fb)
		plane_funcs->cleanup_fb(plane, plane_state);
out:
	if (plane_state) {
		if (plane->funcs->atomic_destroy_state)
+4 −5
Original line number Diff line number Diff line
@@ -13313,10 +13313,10 @@ static void intel_shared_dpll_init(struct drm_device *dev)
 */
int
intel_prepare_plane_fb(struct drm_plane *plane,
		       struct drm_framebuffer *fb,
		       const struct drm_plane_state *new_state)
{
	struct drm_device *dev = plane->dev;
	struct drm_framebuffer *fb = new_state->fb;
	struct intel_plane *intel_plane = to_intel_plane(plane);
	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
	struct drm_i915_gem_object *old_obj = intel_fb_obj(plane->fb);
@@ -13354,19 +13354,18 @@ intel_prepare_plane_fb(struct drm_plane *plane,
 */
void
intel_cleanup_plane_fb(struct drm_plane *plane,
		       struct drm_framebuffer *fb,
		       const struct drm_plane_state *old_state)
{
	struct drm_device *dev = plane->dev;
	struct drm_i915_gem_object *obj = intel_fb_obj(fb);
	struct drm_i915_gem_object *obj = intel_fb_obj(old_state->fb);

	if (WARN_ON(!obj))
	if (!obj)
		return;

	if (plane->type != DRM_PLANE_TYPE_CURSOR ||
	    !INTEL_INFO(dev)->cursor_needs_physical) {
		mutex_lock(&dev->struct_mutex);
		intel_unpin_fb_obj(fb, old_state);
		intel_unpin_fb_obj(old_state->fb, old_state);
		mutex_unlock(&dev->struct_mutex);
	}
}
+0 −2
Original line number Diff line number Diff line
@@ -1038,10 +1038,8 @@ void intel_finish_page_flip(struct drm_device *dev, int pipe);
void intel_finish_page_flip_plane(struct drm_device *dev, int plane);
void intel_check_page_flip(struct drm_device *dev, int pipe);
int intel_prepare_plane_fb(struct drm_plane *plane,
			   struct drm_framebuffer *fb,
			   const struct drm_plane_state *new_state);
void intel_cleanup_plane_fb(struct drm_plane *plane,
			    struct drm_framebuffer *fb,
			    const struct drm_plane_state *old_state);
int intel_plane_atomic_get_property(struct drm_plane *plane,
				    const struct drm_plane_state *state,
Loading