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

Commit ef26f669 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "drm/msm/sde: add sde_crtc lock to protect sde_crtc mixers" into dev/msm-4.14-display

parents 2d6f0a68 cf8a8395
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -3289,24 +3289,27 @@ static int _sde_crtc_check_dest_scaler_data(struct drm_crtc *crtc,

	SDE_DEBUG("crtc%d\n", crtc->base.id);

	mutex_lock(&sde_crtc->crtc_lock);

	if (!cstate->ds_dirty) {
		SDE_DEBUG("dest scaler property not set, skip validation\n");
		return 0;
		goto end;
	}

	if (!kms || !kms->catalog) {
		SDE_ERROR("crtc%d: invalid parameters\n", crtc->base.id);
		return -EINVAL;
		ret = -EINVAL;
		goto end;
	}

	if (!kms->catalog->mdp[0].has_dest_scaler) {
		SDE_DEBUG("dest scaler feature not supported\n");
		return 0;
		goto end;
	}

	if (!sde_crtc->num_mixers) {
		SDE_DEBUG("mixers not allocated\n");
		return 0;
		goto end;
	}

	ret = _sde_validate_hw_resources(sde_crtc);
@@ -3485,10 +3488,12 @@ static int _sde_crtc_check_dest_scaler_data(struct drm_crtc *crtc,
			cstate->ds_dirty = false;
	}

	return 0;
	goto end;

err:
	cstate->ds_dirty = false;
end:
	mutex_unlock(&sde_crtc->crtc_lock);
	return ret;
}

@@ -3608,12 +3613,12 @@ static void _sde_crtc_setup_mixers(struct drm_crtc *crtc)
	struct sde_crtc *sde_crtc = to_sde_crtc(crtc);
	struct drm_encoder *enc;

	mutex_lock(&sde_crtc->crtc_lock);
	sde_crtc->num_ctls = 0;
	sde_crtc->num_mixers = 0;
	sde_crtc->mixers_swapped = false;
	memset(sde_crtc->mixers, 0, sizeof(sde_crtc->mixers));

	mutex_lock(&sde_crtc->crtc_lock);
	/* Check for mixers on all encoders attached to this crtc */
	list_for_each_entry(enc, &crtc->dev->mode_config.encoder_list, head) {
		if (enc->crtc != crtc)