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

Commit fcff63b1 authored by Jayaprakash's avatar Jayaprakash Committed by Gerrit - the friendly Code Review server
Browse files

drm/msm/sde: add plane check in continuous splash case



In dual display continuous splash case, there are certain
scenarios where pipe being used in secondary display at boot up
is allocated by primary crtc. Add check to return failure
in such cases.

Change-Id: I9047b6e7f91e59a9daff5089abb41017c068b449
Signed-off-by: default avatarJayaprakash <jmadiset@codeaurora.org>
parent e80972da
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
@@ -3583,6 +3583,43 @@ static int _sde_plane_validate_scaler_v2(struct sde_plane *psde,
	return 0;
}

static int _sde_plane_validate_shared_crtc(struct sde_plane *psde,
				struct drm_plane_state *state)
{
	struct sde_kms *sde_kms;
	struct sde_splash_display *splash_display;
	int i, j;

	sde_kms = _sde_plane_get_kms(&psde->base);

	if (!sde_kms || !state->crtc)
		return 0;

	for (i = 0; i < MAX_DSI_DISPLAYS; i++) {
		splash_display = &sde_kms->splash_data.splash_display[i];

		if (splash_display && splash_display->cont_splash_enabled &&
			splash_display->encoder &&
			state->crtc != splash_display->encoder->crtc) {

			for (j = 0; j < MAX_DATA_PATH_PER_DSIPLAY; j++) {

				if (splash_display->pipes[j].sspp ==
						psde->pipe) {
					SDE_ERROR_PLANE(psde,
					"pipe:%d used in cont-splash on crtc:%d\n",
					psde->pipe,
					splash_display->encoder->crtc->base.id);
					return -EINVAL;
				}
			}
		}
	}

	return 0;

}

static int sde_plane_sspp_atomic_check(struct drm_plane *plane,
		struct drm_plane_state *state)
{
@@ -3722,6 +3759,8 @@ static int sde_plane_sspp_atomic_check(struct drm_plane *plane,
				rstate->out_fb_height,
				src.w, src.h, deci_w, deci_h)) {
		ret = -EINVAL;
	} else if (_sde_plane_validate_shared_crtc(psde, state)) {
		ret = -EINVAL;
	}

	/* check excl rect configs */