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

Commit 0a5946ea authored by Sandeep Panda's avatar Sandeep Panda
Browse files

drm/msm/sde: fix ESD check scheduling issue



In the current implementation ESD check is enabled
to run when encoder enable happens. But encoder enable
also gets called for dfps change use cases. This is
causing the ESD thread not run in regular intervals.
So move the enabling of ESD check as part of CRTC
enable sequence.

Change-Id: I6fa9e9a0a6894f0a25f010ff744612216711eb85
Signed-off-by: default avatarSandeep Panda <spanda@codeaurora.org>
parent d5d55ba0
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -4240,13 +4240,15 @@ static void sde_crtc_enable(struct drm_crtc *crtc)
	struct sde_crtc_irq_info *node = NULL;
	struct drm_event event;
	u32 power_on;
	int ret;
	int ret, i;
	struct sde_crtc_state *cstate;

	if (!crtc || !crtc->dev || !crtc->dev->dev_private) {
		SDE_ERROR("invalid crtc\n");
		return;
	}
	priv = crtc->dev->dev_private;
	cstate = to_sde_crtc_state(crtc->state);

	if (!sde_kms_power_resource_is_enabled(crtc->dev)) {
		SDE_ERROR("power resource is not enabled\n");
@@ -4315,6 +4317,10 @@ static void sde_crtc_enable(struct drm_crtc *crtc)
		SDE_POWER_EVENT_POST_ENABLE | SDE_POWER_EVENT_POST_DISABLE |
		SDE_POWER_EVENT_PRE_DISABLE,
		sde_crtc_handle_power_event, crtc, sde_crtc->name);

	/* Enable ESD thread */
	for (i = 0; i < cstate->num_connectors; i++)
		sde_connector_schedule_status_work(cstate->connectors[i], true);
}

struct plane_state {
+0 −5
Original line number Diff line number Diff line
@@ -2412,7 +2412,6 @@ static void sde_encoder_virt_enable(struct drm_encoder *drm_enc)
	struct msm_compression_info *comp_info = NULL;
	struct drm_display_mode *cur_mode = NULL;
	struct msm_mode_info mode_info;
	struct drm_connector *drm_conn = NULL;

	if (!drm_enc) {
		SDE_ERROR("invalid encoder\n");
@@ -2503,10 +2502,6 @@ static void sde_encoder_virt_enable(struct drm_encoder *drm_enc)
		sde_enc->cur_master->ops.enable(sde_enc->cur_master);

	_sde_encoder_virt_enable_helper(drm_enc);

	/* Enable ESD thread */
	drm_conn = sde_enc->cur_master->connector;
	sde_connector_schedule_status_work(drm_conn, true);
}

static void sde_encoder_virt_disable(struct drm_encoder *drm_enc)