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

Commit 30874eb9 authored by Dhaval Patel's avatar Dhaval Patel Committed by Amine Najahi
Browse files

drm/msm/sde: increase ahb bus vote on first frame



Increase ahb bus vote on first frame after idle
pc because that will program the complete mdss
register space.

Change-Id: I360d43656f753c70acb51395a978998412354b64
Signed-off-by: default avatarDhaval Patel <pdhaval@codeaurora.org>
parent 74ca2d03
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -265,6 +265,8 @@ struct sde_encoder_virt {
	struct sde_rect cur_conn_roi;
	struct sde_rect prv_conn_roi;
	struct drm_crtc *crtc;

	bool elevated_ahb_vote;
};

#define to_sde_encoder_virt(x) container_of(x, struct sde_encoder_virt, base)
@@ -1849,6 +1851,7 @@ static int _sde_encoder_resource_control_helper(struct drm_encoder *drm_enc,
			return rc;
		}

		sde_enc->elevated_ahb_vote = true;
		/* enable DSI clks */
		rc = sde_connector_clk_ctrl(sde_enc->cur_master->connector,
				true);
@@ -3298,6 +3301,8 @@ static void _sde_encoder_kickoff_phys(struct sde_encoder_virt *sde_enc)
	struct sde_hw_ctl *ctl;
	uint32_t i, pending_flush;
	unsigned long lock_flags;
	struct msm_drm_private *priv = NULL;
	struct sde_kms *sde_kms = NULL;

	if (!sde_enc) {
		SDE_ERROR("invalid encoder\n");
@@ -3375,6 +3380,20 @@ static void _sde_encoder_kickoff_phys(struct sde_encoder_virt *sde_enc)
	_sde_encoder_trigger_start(sde_enc->cur_master);

	spin_unlock_irqrestore(&sde_enc->enc_spinlock, lock_flags);

	if (sde_enc->elevated_ahb_vote) {
		priv = sde_enc->base.dev->dev_private;
		if (priv != NULL) {
			sde_kms = to_sde_kms(priv->kms);
			if (sde_kms != NULL) {
				sde_power_scale_reg_bus(&priv->phandle,
						sde_kms->core_client,
						VOTE_INDEX_LOW,
						false);
			}
		}
		sde_enc->elevated_ahb_vote = false;
	}
}

static void _sde_encoder_ppsplit_swap_intf_for_right_only_update(
+8 −0
Original line number Diff line number Diff line
@@ -926,6 +926,12 @@ static void sde_kms_prepare_commit(struct msm_kms *kms,
		return;
	}

	if (sde_kms->first_kickoff) {
		sde_power_scale_reg_bus(&priv->phandle, sde_kms->core_client,
			VOTE_INDEX_HIGH, false);
		sde_kms->first_kickoff = false;
	}

	for_each_crtc_in_state(state, crtc, crtc_state, i) {
		list_for_each_entry(encoder, &dev->mode_config.encoder_list,
				head) {
@@ -3073,8 +3079,10 @@ static void sde_kms_handle_power_event(u32 event_type, void *usr)
	if (event_type == SDE_POWER_EVENT_POST_ENABLE) {
		sde_irq_update(msm_kms, true);
		sde_vbif_init_memtypes(sde_kms);
		sde_kms->first_kickoff = true;
	} else if (event_type == SDE_POWER_EVENT_PRE_DISABLE) {
		sde_irq_update(msm_kms, false);
		sde_kms->first_kickoff = false;
	}
}

+2 −0
Original line number Diff line number Diff line
@@ -288,6 +288,8 @@ struct sde_kms {
	atomic_t detach_sec_cb;
	atomic_t detach_all_cb;
	struct mutex secure_transition_lock;

	bool first_kickoff;
};

struct vsync_info {