AMD-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Hamza Mahfooz <hamza.mahfooz@amd.com>
To: <amd-gfx@lists.freedesktop.org>
Cc: Harry Wentland <harry.wentland@amd.com>,
	Leo Li <sunpeng.li@amd.com>,
	Rodrigo Siqueira <rodrigo.siqueira@amd.com>,
	Hamza Mahfooz <hamza.mahfooz@amd.com>,
	Aurabindo Pillai <aurabindo.pillai@amd.com>,
	"Roman Li" <roman.li@amd.com>, Wayne Lin <wayne.lin@amd.com>,
	Tom Chung <chiahsuan.chung@amd.com>,
	Fangzhi Zuo <jerry.zuo@amd.com>,
	Zaeem Mohamed <zaeem.mohamed@amd.com>,
	Solomon Chiu <solomon.chiu@amd.com>,
	Daniel Wheeler <daniel.wheeler@amd.com>,
	Yihan Zhu <Yihan.Zhu@amd.com>, <stable@vger.kernel.org>,
	Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Subject: [PATCH 13/16] drm/amd/display: update pipe selection policy to check head pipe
Date: Tue, 5 Nov 2024 15:22:14 -0500	[thread overview]
Message-ID: <20241105202341.154036-14-hamza.mahfooz@amd.com> (raw)
In-Reply-To: <20241105202341.154036-1-hamza.mahfooz@amd.com>

From: Yihan Zhu <Yihan.Zhu@amd.com>

[Why]
No check on head pipe during the dml to dc hw mapping will allow illegal
pipe usage. This will result in a wrong pipe topology to cause mpcc tree
totally mess up then cause a display hang.

[How]
Avoid to use the pipe is head in all check and avoid ODM slice during
preferred pipe check.

Cc: stable@vger.kernel.org
Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Signed-off-by: Yihan Zhu <Yihan.Zhu@amd.com>
Signed-off-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
---
 .../display/dc/dml2/dml2_dc_resource_mgmt.c   | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dml2/dml2_dc_resource_mgmt.c b/drivers/gpu/drm/amd/display/dc/dml2/dml2_dc_resource_mgmt.c
index 6eccf0241d85..9be9ed7e01d3 100644
--- a/drivers/gpu/drm/amd/display/dc/dml2/dml2_dc_resource_mgmt.c
+++ b/drivers/gpu/drm/amd/display/dc/dml2/dml2_dc_resource_mgmt.c
@@ -258,12 +258,23 @@ static unsigned int find_preferred_pipe_candidates(const struct dc_state *existi
 	 * However this condition comes with a caveat. We need to ignore pipes that will
 	 * require a change in OPP but still have the same stream id. For example during
 	 * an MPC to ODM transiton.
+	 *
+	 * Adding check to avoid pipe select on the head pipe by utilizing dc resource
+	 * helper function resource_get_primary_dpp_pipe and comparing the pipe index.
 	 */
 	if (existing_state) {
 		for (i = 0; i < pipe_count; i++) {
 			if (existing_state->res_ctx.pipe_ctx[i].stream && existing_state->res_ctx.pipe_ctx[i].stream->stream_id == stream_id) {
+				struct pipe_ctx *head_pipe =
+					resource_get_primary_dpp_pipe(&existing_state->res_ctx.pipe_ctx[i]);
+
+				// we should always respect the head pipe from selection
+				if (head_pipe && head_pipe->pipe_idx == i)
+					continue;
 				if (existing_state->res_ctx.pipe_ctx[i].plane_res.hubp &&
-					existing_state->res_ctx.pipe_ctx[i].plane_res.hubp->opp_id != i)
+					existing_state->res_ctx.pipe_ctx[i].plane_res.hubp->opp_id != i &&
+						(existing_state->res_ctx.pipe_ctx[i].prev_odm_pipe ||
+						existing_state->res_ctx.pipe_ctx[i].next_odm_pipe))
 					continue;
 
 				preferred_pipe_candidates[num_preferred_candidates++] = i;
@@ -292,6 +303,12 @@ static unsigned int find_last_resort_pipe_candidates(const struct dc_state *exis
 	 */
 	if (existing_state) {
 		for (i  = 0; i < pipe_count; i++) {
+			struct pipe_ctx *head_pipe =
+				resource_get_primary_dpp_pipe(&existing_state->res_ctx.pipe_ctx[i]);
+
+			// we should always respect the head pipe from selection
+			if (head_pipe && head_pipe->pipe_idx == i)
+				continue;
 			if ((existing_state->res_ctx.pipe_ctx[i].plane_res.hubp &&
 				existing_state->res_ctx.pipe_ctx[i].plane_res.hubp->opp_id != i) ||
 				existing_state->res_ctx.pipe_ctx[i].stream_res.tg)
-- 
2.46.1


  parent reply	other threads:[~2024-11-05 20:24 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-05 20:22 [PATCH 00/16] DC Patches November 5, 2024 Hamza Mahfooz
2024-11-05 20:22 ` [PATCH 01/16] drm/amd/display: Refactor HPD IRQ error checking flow Hamza Mahfooz
2024-11-05 20:22 ` [PATCH 02/16] drm/amd/display: Change parameters to fix certain compiler errors Hamza Mahfooz
2024-11-05 20:22 ` [PATCH 03/16] drm/amd/display: Change some variable name of psr Hamza Mahfooz
2024-11-05 20:22 ` [PATCH 04/16] drm/amd/display: Fix Panel Replay not update screen correctly Hamza Mahfooz
2024-11-06 20:25   ` Mario Limonciello
2024-11-07 14:15     ` Mario Limonciello
2024-11-07 15:03       ` Mario Limonciello
2024-11-05 20:22 ` [PATCH 05/16] drm/amd/display: Adding flag for forced MST blocked discovery Hamza Mahfooz
2024-11-05 20:22 ` [PATCH 06/16] drm/amd/display: Read DP tunneling support only for DPIA endpoints Hamza Mahfooz
2024-11-05 20:22 ` [PATCH 07/16] drm/amd/display: always blank stream before disable crtc Hamza Mahfooz
2024-11-05 20:22 ` [PATCH 08/16] drm/amd/display: disabling p-state checks for DCN31 and DCN314 Hamza Mahfooz
2024-11-05 20:22 ` [PATCH 09/16] drm/amd/display: Update SPL Taps Required For Integer Scaling Hamza Mahfooz
2024-11-05 20:22 ` [PATCH 10/16] drm/amd/display: Use region6 size in fw_meta_info Hamza Mahfooz
2024-11-05 20:22 ` [PATCH 11/16] drm/amd/display: Handle dml allocation failure to avoid crash Hamza Mahfooz
2024-11-05 20:22 ` [PATCH 12/16] drm/amd/display: Require minimum VBlank size for stutter optimization Hamza Mahfooz
2024-11-05 20:22 ` Hamza Mahfooz [this message]
2024-11-05 20:22 ` [PATCH 14/16] drm/amd/display: Remove unused code Hamza Mahfooz
2024-11-05 20:22 ` [PATCH 15/16] drm/amd/display: Adjust VSDB parser for replay feature Hamza Mahfooz
2024-11-05 20:22 ` [PATCH 16/16] drm/amd/display: 3.2.309 Hamza Mahfooz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241105202341.154036-14-hamza.mahfooz@amd.com \
    --to=hamza.mahfooz@amd.com \
    --cc=Yihan.Zhu@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=aurabindo.pillai@amd.com \
    --cc=chiahsuan.chung@amd.com \
    --cc=daniel.wheeler@amd.com \
    --cc=harry.wentland@amd.com \
    --cc=jerry.zuo@amd.com \
    --cc=nicholas.kazlauskas@amd.com \
    --cc=rodrigo.siqueira@amd.com \
    --cc=roman.li@amd.com \
    --cc=solomon.chiu@amd.com \
    --cc=stable@vger.kernel.org \
    --cc=sunpeng.li@amd.com \
    --cc=wayne.lin@amd.com \
    --cc=zaeem.mohamed@amd.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox