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

Commit 0ce6ca89 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "disp: msm: sde: revert to previous smmu state upon failure to switch"

parents f36e7f71 ad97f0cf
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1781,6 +1781,8 @@ int sde_crtc_get_secure_transition_ops(struct drm_crtc *crtc,
		return -EINVAL;

	smmu_state = &sde_kms->smmu_state;
	smmu_state->prev_state = smmu_state->state;

	sde_crtc = to_sde_crtc(crtc);
	secure_level = sde_crtc_get_secure_level(crtc, crtc->state);
	catalog = sde_kms->catalog;
+17 −5
Original line number Diff line number Diff line
@@ -528,12 +528,24 @@ static int _sde_kms_secure_ctrl(struct sde_kms *sde_kms, struct drm_crtc *crtc,
end:
	smmu_state->sui_misr_state = NONE;
	smmu_state->transition_type = NONE;
	smmu_state->transition_error = ret ? true : false;
	smmu_state->transition_error = false;

	SDE_DEBUG("crtc %d: old_state %d, new_state %d, sec_lvl %d, ret %d\n",
			DRMID(crtc), old_smmu_state, smmu_state->state,
			smmu_state->secure_level, ret);
	SDE_EVT32(DRMID(crtc), smmu_state->state, smmu_state->transition_type,
	/*
	 * If switch failed, toggling secure_level is enough since
	 * there are only two secure levels - secure/non-secure
	 */
	if (ret) {
		smmu_state->transition_error = true;
		smmu_state->state = smmu_state->prev_state;
		smmu_state->secure_level = !smmu_state->secure_level;
	}

	SDE_DEBUG(
		"crtc %d: old_state %d, req_state %d, new_state %d, sec_lvl %d, ret %d\n",
			DRMID(crtc), smmu_state->prev_state, old_smmu_state,
			smmu_state->state, smmu_state->secure_level, ret);
	SDE_EVT32(DRMID(crtc), smmu_state->prev_state,
			smmu_state->state, smmu_state->transition_type,
			smmu_state->transition_error, smmu_state->secure_level,
			smmu_state->sui_misr_state, ret, SDE_EVTLOG_FUNC_EXIT);

+2 −0
Original line number Diff line number Diff line
@@ -187,12 +187,14 @@ enum frame_trigger_mode_type {
/**
 * struct sde_kms_smmu_state_data: stores the smmu state and transition type
 * @state: current state of smmu context banks
 * @prev_state: previous state of smmu context banks
 * @secure_level: secure level cached from crtc
 * @transition_type: transition request type
 * @transition_error: whether there is error while transitioning the state
 */
struct sde_kms_smmu_state_data {
	uint32_t state;
	uint32_t prev_state;
	uint32_t secure_level;
	uint32_t transition_type;
	uint32_t transition_error;