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

Commit a6803190 authored by Veera Sundaram Sankaran's avatar Veera Sundaram Sankaran
Browse files

drm/msm/sde: avoid misr_setup through debugfs during sui



Move the secure-ui in-progress check from the common
function to the misr debugfs setup, as it is the only
path that has to be restricted.

Change-Id: Ib5b6f49e8f4d183091d11e36c4bf31efe54b6a93
Signed-off-by: default avatarVeera Sundaram Sankaran <veeras@codeaurora.org>
parent e00d2a35
Loading
Loading
Loading
Loading
+16 −16
Original line number Diff line number Diff line
@@ -5381,7 +5381,6 @@ int sde_crtc_helper_reset_custom_properties(struct drm_crtc *crtc,

void sde_crtc_misr_setup(struct drm_crtc *crtc, bool enable, u32 frame_count)
{
	struct sde_kms *sde_kms;
	struct sde_crtc *sde_crtc;
	struct sde_crtc_mixer *m;
	int i;
@@ -5392,20 +5391,6 @@ void sde_crtc_misr_setup(struct drm_crtc *crtc, bool enable, u32 frame_count)
	}
	sde_crtc = to_sde_crtc(crtc);

	sde_kms = _sde_crtc_get_kms(crtc);
	if (!sde_kms) {
		SDE_ERROR("invalid sde_kms\n");
		return;
	}

	mutex_lock(&sde_crtc->crtc_lock);
	if (sde_kms_is_secure_session_inprogress(sde_kms)) {
		SDE_DEBUG("crtc:%d misr enable/disable not allowed\n",
				DRMID(crtc));
		mutex_unlock(&sde_crtc->crtc_lock);
		return;
	}

	sde_crtc->misr_enable = enable;
	sde_crtc->misr_frame_count = frame_count;
	for (i = 0; i < sde_crtc->num_mixers; ++i) {
@@ -5416,7 +5401,6 @@ void sde_crtc_misr_setup(struct drm_crtc *crtc, bool enable, u32 frame_count)

		m->hw_lm->ops.setup_misr(m->hw_lm, enable, frame_count);
	}
	mutex_unlock(&sde_crtc->crtc_lock);
}

#ifdef CONFIG_DEBUG_FS
@@ -5573,6 +5557,7 @@ static ssize_t _sde_crtc_misr_setup(struct file *file,
	char buf[MISR_BUFF_SIZE + 1];
	u32 frame_count, enable;
	size_t buff_copy;
	struct sde_kms *sde_kms;

	if (!file || !file->private_data)
		return -EINVAL;
@@ -5580,6 +5565,12 @@ static ssize_t _sde_crtc_misr_setup(struct file *file,
	sde_crtc = file->private_data;
	crtc = &sde_crtc->base;

	sde_kms = _sde_crtc_get_kms(crtc);
	if (!sde_kms) {
		SDE_ERROR("invalid sde_kms\n");
		return -EINVAL;
	}

	buff_copy = min_t(size_t, count, MISR_BUFF_SIZE);
	if (copy_from_user(buf, user_buf, buff_copy)) {
		SDE_ERROR("buffer copy failed\n");
@@ -5595,7 +5586,16 @@ static ssize_t _sde_crtc_misr_setup(struct file *file,
	if (rc)
		return rc;

	mutex_lock(&sde_crtc->crtc_lock);
	if (sde_kms_is_secure_session_inprogress(sde_kms)) {
		SDE_DEBUG("crtc:%d misr enable/disable not allowed\n",
				DRMID(crtc));
		goto end;
	}
	sde_crtc_misr_setup(crtc, enable, frame_count);

end:
	mutex_unlock(&sde_crtc->crtc_lock);
	_sde_crtc_power_enable(sde_crtc, false);

	return count;