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

Commit fed3e2d8 authored by Guchun Chen's avatar Guchun Chen
Browse files

Revert "drm: msm: sde: remove user commit validity check"



This reverts commit b80fa288.

This change can't guarante the sequence of smmu operation for
early splash case, and more, the commit validity check is
mandatory to avoid potential glitch during display handoff.
So revert this change.

Change-Id: Ic8327dedc1357ed5d8ef6ca490390ce66b7eb986
Signed-off-by: default avatarGuchun Chen <guchunc@codeaurora.org>
parent a0209303
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -345,7 +345,7 @@ static void sde_kms_prepare_commit(struct msm_kms *kms,

	if (sde_kms->splash_info.handoff &&
		sde_kms->splash_info.display_splash_enabled)
		sde_splash_lk_stop_splash(kms);
		sde_splash_lk_stop_splash(kms, state);

	sde_power_resource_enable(&priv->phandle,
			sde_kms->core_client, true);
+27 −2
Original line number Diff line number Diff line
@@ -367,6 +367,29 @@ static int _sde_splash_free_module_resource(struct msm_mmu *mmu,
	return 0;
}

static bool _sde_splash_validate_commit(struct sde_kms *sde_kms,
					struct drm_atomic_state *state)
{
	int i, nplanes;
	struct drm_plane *plane;
	struct drm_device *dev = sde_kms->dev;

	nplanes = dev->mode_config.num_total_plane;

	for (i = 0; i < nplanes; i++) {
		plane = state->planes[i];

		/*
		 * As plane state has been swapped, we need to check
		 * fb in state->planes, not fb in state->plane_state.
		 */
		if (plane && plane->fb)
			return true;
	}

	return false;
}

__ref int sde_splash_init(struct sde_power_handle *phandle, struct msm_kms *kms)
{
	struct sde_kms *sde_kms;
@@ -860,7 +883,8 @@ int sde_splash_free_resource(struct msm_kms *kms,
 * 1. Notify LK to stop display splash.
 * 2. Set DOMAIN_ATTR_EARLY_MAP to 1 to enable stage 1 translation in iommu.
 */
int sde_splash_lk_stop_splash(struct msm_kms *kms)
int sde_splash_lk_stop_splash(struct msm_kms *kms,
				struct drm_atomic_state *state)
{
	struct sde_splash_info *sinfo;
	struct msm_mmu *mmu;
@@ -876,7 +900,8 @@ int sde_splash_lk_stop_splash(struct msm_kms *kms)

	/* Monitor LK's status and tell it to exit. */
	mutex_lock(&sde_splash_lock);
	if (sinfo->display_splash_enabled) {
	if (_sde_splash_validate_commit(sde_kms, state) &&
			sinfo->display_splash_enabled) {
		if (_sde_splash_lk_check(sde_kms->hw_intr))
			_sde_splash_notify_lk_stop_splash(sde_kms->hw_intr);

+2 −1
Original line number Diff line number Diff line
@@ -120,7 +120,8 @@ void sde_splash_setup_connector_count(struct sde_splash_info *sinfo,
 *
 * Tell LK to stop display splash once one valid user commit arrives.
 */
int sde_splash_lk_stop_splash(struct msm_kms *kms);
int sde_splash_lk_stop_splash(struct msm_kms *kms,
				struct drm_atomic_state *state);

/**
 * sde_splash_free_resource.