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

Commit 2d9700c8 authored by Ray Zhang's avatar Ray Zhang Committed by Gerrit - the friendly Code Review server
Browse files

Revert "drm/msm/sde: delay reset frame by a frame for posted trigger"



This reverts commit 6773daeb.

Change-Id: Iaf291607ff50fad4f70f4a2f2d749ffd06556eb8
Signed-off-by: default avatarRay Zhang <rayz@codeaurora.org>
parent 32cd282d
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -4094,13 +4094,14 @@ static void _sde_crtc_remove_pipe_flush(struct drm_crtc *crtc)
}

/**
 * sde_crtc_reset_hw - attempt hardware reset on errors
 * _sde_crtc_reset_hw - attempt hardware reset on errors
 * @crtc: Pointer to DRM crtc instance
 * @old_state: Pointer to crtc state for previous commit
 * @recovery_events: Whether or not recovery events are enabled
 * Returns: Zero if current commit should still be attempted
 */
int sde_crtc_reset_hw(struct drm_crtc *crtc, struct drm_crtc_state *old_state,
static int _sde_crtc_reset_hw(struct drm_crtc *crtc,
		struct drm_crtc_state *old_state,
		bool recovery_events)
{
	struct drm_plane *plane_halt[MAX_PLANES];
@@ -4298,10 +4299,9 @@ void sde_crtc_commit_kickoff(struct drm_crtc *crtc,
	struct msm_drm_private *priv;
	struct sde_kms *sde_kms;
	struct sde_crtc_state *cstate;
	bool is_error, reset_req;
	bool is_error, reset_req, recovery_events;
	unsigned long flags;
	enum sde_crtc_idle_pc_state idle_pc_state;
	struct sde_encoder_kickoff_params params = { 0 };

	if (!crtc) {
		SDE_ERROR("invalid argument\n");
@@ -4335,6 +4335,7 @@ void sde_crtc_commit_kickoff(struct drm_crtc *crtc,
	idle_pc_state = sde_crtc_get_property(cstate, CRTC_PROP_IDLE_PC_STATE);

	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
		struct sde_encoder_kickoff_params params = { 0 };

		if (encoder->crtc != crtc)
			continue;
@@ -4349,6 +4350,9 @@ void sde_crtc_commit_kickoff(struct drm_crtc *crtc,
		if (sde_encoder_prepare_for_kickoff(encoder, &params))
			reset_req = true;

		recovery_events =
			sde_encoder_recovery_events_enabled(encoder);

		if (idle_pc_state != IDLE_PC_NONE)
			sde_encoder_control_idle_pc(encoder,
			    (idle_pc_state == IDLE_PC_ENABLE) ? true : false);
@@ -4359,11 +4363,7 @@ void sde_crtc_commit_kickoff(struct drm_crtc *crtc,
	 * preparing for the kickoff
	 */
	if (reset_req) {
		sde_crtc->frame_trigger_mode = params.frame_trigger_mode;
		if (sde_crtc->frame_trigger_mode
					!= FRAME_DONE_WAIT_POSTED_START &&
					sde_crtc_reset_hw(crtc, old_state,
					params.recovery_events_enabled))
		if (_sde_crtc_reset_hw(crtc, old_state, recovery_events))
			is_error = true;
	}

+0 −26
Original line number Diff line number Diff line
@@ -227,7 +227,6 @@ struct sde_crtc_fps_info {
 * @rp_lock       : serialization lock for resource pool
 * @rp_head       : list of active resource pool
 * @plane_mask_old: keeps track of the planes used in the previous commit
 * @frame_trigger_mode: frame trigger mode
 */
struct sde_crtc {
	struct drm_crtc base;
@@ -306,7 +305,6 @@ struct sde_crtc {

	/* blob for histogram data */
	struct drm_property_blob *hist_blob;
	enum frame_trigger_mode_type frame_trigger_mode;
};

#define to_sde_crtc(x) container_of(x, struct sde_crtc, base)
@@ -544,30 +542,6 @@ static inline int sde_crtc_frame_pending(struct drm_crtc *crtc)
	return atomic_read(&sde_crtc->frame_pending);
}

/**
 * sde_crtc_reset_hw - attempt hardware reset on errors
 * @crtc: Pointer to DRM crtc instance
 * @old_state: Pointer to crtc state for previous commit
 * @recovery_events: Whether or not recovery events are enabled
 * Returns: Zero if current commit should still be attempted
 */
int sde_crtc_reset_hw(struct drm_crtc *crtc, struct drm_crtc_state *old_state,
	bool recovery_events);

/**
 * sde_crtc_request_frame_reset - requests for next frame reset
 * @crtc: Pointer to drm crtc object
 */
static inline int sde_crtc_request_frame_reset(struct drm_crtc *crtc)
{
	struct sde_crtc *sde_crtc = to_sde_crtc(crtc);

	if (sde_crtc->frame_trigger_mode == FRAME_DONE_WAIT_POSTED_START)
		sde_crtc_reset_hw(crtc, crtc->state, false);

	return 0;
}

/**
 * sde_crtc_vblank - enable or disable vblanks for this crtc
 * @crtc: Pointer to drm crtc object
+0 −3
Original line number Diff line number Diff line
@@ -4683,9 +4683,6 @@ int sde_encoder_prepare_for_kickoff(struct drm_encoder *drm_enc,
	for (i = 0; i < sde_enc->num_phys_encs; i++) {
		phys = sde_enc->phys_encs[i];
		params->is_primary = sde_enc->disp_info.is_primary;
		params->frame_trigger_mode = sde_enc->frame_trigger_mode;
		params->recovery_events_enabled =
					sde_enc->recovery_events_enabled;
		if (phys) {
			if (phys->ops.prepare_for_kickoff) {
				rc = phys->ops.prepare_for_kickoff(
+0 −2
Original line number Diff line number Diff line
@@ -60,14 +60,12 @@ struct sde_encoder_hw_resources {
 * @affected_displays:  bitmask, bit set means the ROI of the commit lies within
 *                      the bounds of the physical display at the bit index
 * @recovery_events_enabled: indicates status of client for recoovery events
 * @frame_trigger_mode: indicates frame trigger mode
 */
struct sde_encoder_kickoff_params {
	u32 inline_rotate_prefill;
	u32 is_primary;
	unsigned long affected_displays;
	bool recovery_events_enabled;
	enum frame_trigger_mode_type frame_trigger_mode;
};

/**
+0 −1
Original line number Diff line number Diff line
@@ -1220,7 +1220,6 @@ static void sde_kms_wait_for_commit_done(struct msm_kms *kms,
		ret = sde_encoder_wait_for_event(encoder, MSM_ENC_COMMIT_DONE);
		if (ret && ret != -EWOULDBLOCK) {
			SDE_ERROR("wait for commit done returned %d\n", ret);
			sde_crtc_request_frame_reset(crtc);
			break;
		}