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

Commit 505b5897 authored by Linux Build Service Account's avatar Linux Build Service Account
Browse files

Merge 5d29dc42 on remote branch

Change-Id: I253fd41710ebd953cc1c7fb55a407eb7536a2346
parents ffeaaf58 5d29dc42
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1562,7 +1562,7 @@ static ssize_t debugfs_esd_trigger_check(struct file *file,
						display->trusted_vm_env);
		if (rc) {
			DSI_ERR("Failed to trigger ESD attack\n");
			goto error;
			goto unlock;
		}
	}

+2 −2
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
 * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
 */

#ifndef _DSI_PARSER_H_
@@ -204,7 +204,7 @@ static inline struct dsi_parser_utils *dsi_parser_get_of_utils(void)
		.get_child_count = of_get_child_count,
		.get_available_child_count = of_get_available_child_count,
		.find_property = of_find_property,
		.get_next_child = of_get_next_child,
		.get_next_child = of_get_next_available_child,
		.count_u32_elems = of_property_count_u32_elems,
		.get_named_gpio = of_get_named_gpio,
	};
+5 −1
Original line number Diff line number Diff line
@@ -1993,6 +1993,7 @@ static void _sde_clear_ltm_merge_mode(struct sde_crtc *sde_crtc)
	}

	sde_crtc->ltm_merge_clear_pending = false;
	SDE_EVT32(DRMID(&sde_crtc->base), num_mixers, sde_crtc->ltm_merge_clear_pending);
	spin_unlock_irqrestore(&sde_crtc->ltm_lock, irq_flags);
}

@@ -2346,6 +2347,7 @@ void sde_cp_crtc_destroy_properties(struct drm_crtc *crtc)
	sde_crtc->ltm_buffer_cnt = 0;
	sde_crtc->ltm_hist_en = false;
	sde_crtc->ltm_merge_clear_pending = false;
	SDE_EVT32(DRMID(crtc), sde_crtc->ltm_merge_clear_pending);
	sde_crtc->hist_irq_idx = -1;

	mutex_destroy(&sde_crtc->crtc_cp_lock);
@@ -2391,7 +2393,6 @@ void sde_cp_crtc_suspend(struct drm_crtc *crtc)

	spin_lock_irqsave(&sde_crtc->ltm_lock, irq_flags);
	sde_crtc->ltm_hist_en = false;
	sde_crtc->ltm_merge_clear_pending = false;
	spin_unlock_irqrestore(&sde_crtc->ltm_lock, irq_flags);

	if (ad_suspend)
@@ -2424,6 +2425,7 @@ void sde_cp_crtc_clear(struct drm_crtc *crtc)
	list_del_init(&sde_crtc->dirty_list);
	list_del_init(&sde_crtc->ad_active);
	list_del_init(&sde_crtc->ad_dirty);
	sde_crtc->cp_pu_feature_mask = 0;
	mutex_unlock(&sde_crtc->crtc_cp_lock);

	spin_lock_irqsave(&sde_crtc->spin_lock, flags);
@@ -3833,6 +3835,7 @@ static void _sde_cp_crtc_disable_ltm_hist(struct sde_crtc *sde_crtc,
	spin_lock_irqsave(&sde_crtc->ltm_lock, irq_flags);
	sde_crtc->ltm_hist_en = false;
	sde_crtc->ltm_merge_clear_pending = true;
	SDE_EVT32(DRMID(&sde_crtc->base), sde_crtc->ltm_merge_clear_pending);
	INIT_LIST_HEAD(&sde_crtc->ltm_buf_free);
	INIT_LIST_HEAD(&sde_crtc->ltm_buf_busy);
	for (i = 0; i < sde_crtc->ltm_buffer_cnt; i++)
@@ -3905,6 +3908,7 @@ static void sde_cp_ltm_hist_interrupt_cb(void *arg, int irq_idx)
				0);
		}
		sde_crtc->ltm_merge_clear_pending = true;
		SDE_EVT32(DRMID(&sde_crtc->base), sde_crtc->ltm_merge_clear_pending);
		spin_unlock_irqrestore(&sde_crtc->ltm_lock, irq_flags);
		DRM_DEBUG_DRIVER("LTM histogram is disabled\n");
		return;
+1 −0
Original line number Diff line number Diff line
@@ -3303,6 +3303,7 @@ static void sde_crtc_atomic_begin(struct drm_crtc *crtc,
		if (encoder->crtc != crtc)
			continue;

		sde_encoder_trigger_rsc_state_change(encoder);
		/* encoder will trigger pending mask now */
		sde_encoder_trigger_kickoff_pending(encoder);
	}
+40 −0
Original line number Diff line number Diff line
@@ -3806,6 +3806,46 @@ bool sde_encoder_check_curr_mode(struct drm_encoder *drm_enc, u32 mode)
	return (disp_info->curr_panel_mode == mode);
}

void sde_encoder_trigger_rsc_state_change(struct drm_encoder *drm_enc)
{
	struct sde_encoder_virt *sde_enc = NULL;
	int ret = 0;

	sde_enc = to_sde_encoder_virt(drm_enc);

	if (!sde_enc)
		return;

	mutex_lock(&sde_enc->rc_lock);
	/*
	 * In dual display case when secondary comes out of
	 * idle make sure RSC solver mode is disabled before
	 * setting CTL_PREPARE.
	 */
	if (!sde_enc->cur_master ||
		!sde_encoder_check_curr_mode(drm_enc, MSM_DISPLAY_CMD_MODE) ||
		sde_enc->disp_info.display_type == SDE_CONNECTOR_PRIMARY ||
		sde_enc->rc_state != SDE_ENC_RC_STATE_IDLE)
		goto end;

	/* enable all the clks and resources */
	ret = _sde_encoder_resource_control_helper(drm_enc, true);
	if (ret) {
		SDE_ERROR_ENC(sde_enc, "rc in state %d\n", sde_enc->rc_state);
		SDE_EVT32(DRMID(drm_enc), sde_enc->rc_state, SDE_EVTLOG_ERROR);
		goto end;
	}

	_sde_encoder_update_rsc_client(drm_enc, true);

	SDE_EVT32(DRMID(drm_enc), sde_enc->rc_state, SDE_ENC_RC_STATE_ON);
	sde_enc->rc_state = SDE_ENC_RC_STATE_ON;

end:
	mutex_unlock(&sde_enc->rc_lock);
}


void sde_encoder_trigger_kickoff_pending(struct drm_encoder *drm_enc)
{
	struct sde_encoder_virt *sde_enc;
Loading