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

Commit 01f8a969 authored by Archit Taneja's avatar Archit Taneja Committed by Rob Clark
Browse files

drm/msm/mdp5: Bring back pipe_lock to mdp5_plane struct



We'd previously moved the pipe_lock spinlock to the hwpipe struct. Bring
it back to mdp5_plane. We will need this because an mdp5_plane in the
future could comprise of 2 hw pipes. It makes more sense to have a single
lock to protect the registers for the hw pipes used by a plane, rather
than trying to take individual locks per hwpipe when committing a
configuration.

Signed-off-by: default avatarArchit Taneja <architt@codeaurora.org>
Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
parent 1225bb2b
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -135,7 +135,5 @@ struct mdp5_hw_pipe *mdp5_pipe_init(enum mdp5_pipe pipe,
	hwpipe->caps = caps;
	hwpipe->flush_mask = mdp_ctl_flush_mask_pipe(pipe);

	spin_lock_init(&hwpipe->pipe_lock);

	return hwpipe;
}
+0 −1
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ struct mdp5_hw_pipe {
	const char *name;
	enum mdp5_pipe pipe;

	spinlock_t pipe_lock;     /* protect REG_MDP5_PIPE_* registers */
	uint32_t reg_offset;
	uint32_t caps;

+7 −2
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@
struct mdp5_plane {
	struct drm_plane base;

	spinlock_t pipe_lock;     /* protect REG_MDP5_PIPE_* registers */

	uint32_t nformats;
	uint32_t formats[32];
};
@@ -719,6 +721,7 @@ static int mdp5_plane_mode_set(struct drm_plane *plane,
		struct drm_crtc *crtc, struct drm_framebuffer *fb,
		struct drm_rect *src, struct drm_rect *dest)
{
	struct mdp5_plane *mdp5_plane = to_mdp5_plane(plane);
	struct drm_plane_state *pstate = plane->state;
	struct mdp5_hw_pipe *hwpipe = to_mdp5_plane_state(pstate)->hwpipe;
	struct mdp5_kms *mdp5_kms = get_kms(plane);
@@ -798,7 +801,7 @@ static int mdp5_plane_mode_set(struct drm_plane *plane,
	hflip = !!(rotation & DRM_REFLECT_X);
	vflip = !!(rotation & DRM_REFLECT_Y);

	spin_lock_irqsave(&hwpipe->pipe_lock, flags);
	spin_lock_irqsave(&mdp5_plane->pipe_lock, flags);

	mdp5_write(mdp5_kms, REG_MDP5_PIPE_SRC_IMG_SIZE(pipe),
			MDP5_PIPE_SRC_IMG_SIZE_WIDTH(min(fb->width, src_w)) |
@@ -877,7 +880,7 @@ static int mdp5_plane_mode_set(struct drm_plane *plane,

	set_scanout_locked(plane, fb);

	spin_unlock_irqrestore(&hwpipe->pipe_lock, flags);
	spin_unlock_irqrestore(&mdp5_plane->pipe_lock, flags);

	return ret;
}
@@ -998,6 +1001,8 @@ struct drm_plane *mdp5_plane_init(struct drm_device *dev,
	mdp5_plane->nformats = mdp_get_formats(mdp5_plane->formats,
		ARRAY_SIZE(mdp5_plane->formats), false);

	spin_lock_init(&mdp5_plane->pipe_lock);

	if (type == DRM_PLANE_TYPE_CURSOR)
		ret = drm_universal_plane_init(dev, plane, 0xff,
				&mdp5_cursor_plane_funcs,