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

Commit f9b1d6ac authored by Jayaprakash's avatar Jayaprakash
Browse files

disp: msm: sde: add enc_id check before decrement avail HW resources



Add changes to commit and decrement only those
hardware resources which are required for the modeset.

Timeline of Commit C1 with CWB modeset:
---> Atomic_check
	Primary encoder has allocated required HW resources.
 	CWB encoder has allocated required HW resources.
---> Atomic_commit
	On primary encoder, connector is seamless hence
	there is no virt_modeset call.
	On CWB encoder, there is virt_mode_set call
	and during commit HW blocks there is unconditional
	decrement for all the HW blocks with rsvp_nxt.

This change ensures hardware blocks are available during
dp display mode validations.

Change-Id: Ifd9439cfc96e727c3093af5f47802c8367775cd7
Signed-off-by: default avatarJayaprakash <jmadiset@codeaurora.org>
parent 51ff9080
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -5950,14 +5950,6 @@ int sde_encoder_update_caps_for_cont_splash(struct drm_encoder *encoder,
		return ret;
	}

	ret = sde_rm_reserve(&sde_kms->rm, encoder, encoder->crtc->state,
			conn->state, false);
	if (ret) {
		SDE_ERROR_ENC(sde_enc,
			"failed to reserve hw resources, %d\n", ret);
		return ret;
	}

	if (sde_conn->encoder) {
		conn->state->best_encoder = sde_conn->encoder;
		SDE_DEBUG_ENC(sde_enc,
@@ -5968,6 +5960,14 @@ int sde_encoder_update_caps_for_cont_splash(struct drm_encoder *encoder,
				conn->base.id);
	}

	ret = sde_rm_reserve(&sde_kms->rm, encoder, encoder->crtc->state,
			conn->state, false);
	if (ret) {
		SDE_ERROR_ENC(sde_enc,
			"failed to reserve hw resources, %d\n", ret);
		return ret;
	}

	SDE_DEBUG_ENC(sde_enc, "connector topology = %llu\n",
			sde_connector_get_topology_name(conn));
	drm_mode = &encoder->crtc->state->adjusted_mode;
+2 −1
Original line number Diff line number Diff line
@@ -2024,7 +2024,8 @@ static int _sde_rm_commit_rsvp(
	/* Swap next rsvp to be the active */
	for (type = 0; type < SDE_HW_BLK_MAX; type++) {
		list_for_each_entry(blk, &rm->hw_blks[type], list) {
			if (blk->rsvp_nxt) {
			if (blk->rsvp_nxt && conn_state->best_encoder->base.id
					 == blk->rsvp_nxt->enc_id) {
				blk->rsvp = blk->rsvp_nxt;
				blk->rsvp_nxt = NULL;
				_sde_rm_dec_resource_info(rm,