AMD-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
To: <amd-gfx@lists.freedesktop.org>
Cc: stylon.wang@amd.com, Sunpeng.Li@amd.com, Harry.Wentland@amd.com,
	qingqing.zhuo@amd.com, Rodrigo.Siqueira@amd.com,
	roman.li@amd.com, solomon.chiu@amd.com,
	Jerry Zuo <Jerry.Zuo@amd.com>,
	Aurabindo.Pillai@amd.com, hersen wu <hersenxs.wu@amd.com>,
	hamza.mahfooz@amd.com, wayne.lin@amd.com,
	Bhawanpreet.Lakha@amd.com, agustin.gutierrez@amd.com,
	pavle.kotarac@amd.com
Subject: [PATCH 07/31] drm/amd/display: add mst port output bw check
Date: Fri, 17 Jun 2022 15:34:48 -0400	[thread overview]
Message-ID: <20220617193512.3471076-8-Rodrigo.Siqueira@amd.com> (raw)
In-Reply-To: <20220617193512.3471076-1-Rodrigo.Siqueira@amd.com>

From: hersen wu <hersenxs.wu@amd.com>

[Why]
when connect one 4k@144hz dp to dsc mst hub, 4k@144hz mode is in valid
mode list. but some mst hub port output bandwidth does not support
4k@144hz.

[How]
add mst port output bandwidth checks, include full_pbn, branch max
throughput mps.

Reviewed-by: Jerry Zuo <Jerry.Zuo@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: hersen wu <hersenxs.wu@amd.com>
---
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |  8 +++--
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h |  3 +-
 .../display/amdgpu_dm/amdgpu_dm_mst_types.c   | 36 +++++++++++++++++++
 .../display/amdgpu_dm/amdgpu_dm_mst_types.h   |  4 +++
 4 files changed, 48 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index c2fc32dac712..ea91149ec3e6 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -7259,7 +7259,11 @@ create_validate_stream_for_sink(struct amdgpu_dm_connector *aconnector,
 			break;
 		}
 
-		dc_result = dc_validate_stream(adev->dm.dc, stream);
+		if (stream->signal == SIGNAL_TYPE_DISPLAY_PORT_MST)
+			dc_result = dm_dp_mst_is_port_support_mode(aconnector, stream);
+
+		if (dc_result == DC_OK)
+			dc_result = dc_validate_stream(adev->dm.dc, stream);
 
 		if (dc_result != DC_OK) {
 			DRM_DEBUG_KMS("Mode %dx%d (clk %d) failed DC validation with error %d (%s)\n",
@@ -7559,7 +7563,7 @@ static void dm_encoder_helper_disable(struct drm_encoder *encoder)
 
 }
 
-static int convert_dc_color_depth_into_bpc (enum dc_color_depth display_color_depth)
+int convert_dc_color_depth_into_bpc(enum dc_color_depth display_color_depth)
 {
 	switch (display_color_depth) {
 		case COLOR_DEPTH_666:
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
index cbd2e8f2ae50..8241a3795762 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
@@ -583,7 +583,6 @@ struct amdgpu_dm_connector {
 	struct drm_dp_mst_port *port;
 	struct amdgpu_dm_connector *mst_port;
 	struct drm_dp_aux *dsc_aux;
-
 	/* TODO see if we can merge with ddc_bus or make a dm_connector */
 	struct amdgpu_i2c_adapter *i2c;
 
@@ -747,4 +746,6 @@ int dm_atomic_get_state(struct drm_atomic_state *state,
 struct amdgpu_dm_connector *
 amdgpu_dm_find_first_crtc_matching_connector(struct drm_atomic_state *state,
 					     struct drm_crtc *crtc);
+
+int convert_dc_color_depth_into_bpc(enum dc_color_depth display_color_depth);
 #endif /* __AMDGPU_DM_H__ */
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
index d005bb6a2956..ee5d6fa34a6b 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
@@ -1353,4 +1353,40 @@ bool pre_validate_dsc(struct drm_atomic_state *state,
 
 	return (ret == 0);
 }
+
 #endif
+
+enum dc_status dm_dp_mst_is_port_support_mode(
+	struct amdgpu_dm_connector *aconnector,
+	struct dc_stream_state *stream)
+{
+	int bpp, pbn, branch_max_throughput_mps = 0;
+
+	/* check if mode could be supported within fUll_pbn */
+	bpp = convert_dc_color_depth_into_bpc(stream->timing.display_color_depth) * 3;
+	pbn = drm_dp_calc_pbn_mode(stream->timing.pix_clk_100hz / 10, bpp, false);
+	if (pbn > aconnector->port->full_pbn)
+		return DC_FAIL_BANDWIDTH_VALIDATE;
+
+	/* check is mst dsc output bandwidth branch_overall_throughput_0_mps */
+	switch (stream->timing.pixel_encoding) {
+	case PIXEL_ENCODING_RGB:
+	case PIXEL_ENCODING_YCBCR444:
+		branch_max_throughput_mps =
+			aconnector->dc_sink->dsc_caps.dsc_dec_caps.branch_overall_throughput_0_mps;
+		break;
+	case PIXEL_ENCODING_YCBCR422:
+	case PIXEL_ENCODING_YCBCR420:
+		branch_max_throughput_mps =
+			aconnector->dc_sink->dsc_caps.dsc_dec_caps.branch_overall_throughput_1_mps;
+		break;
+	default:
+		break;
+	}
+
+	if (branch_max_throughput_mps != 0 &&
+		((stream->timing.pix_clk_100hz / 10) >  branch_max_throughput_mps * 1000))
+		return DC_FAIL_BANDWIDTH_VALIDATE;
+
+	return DC_OK;
+}
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h
index 2e13027d9b88..b92a7c5671aa 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h
@@ -63,4 +63,8 @@ bool pre_validate_dsc(struct drm_atomic_state *state,
 		      struct dm_atomic_state **dm_state_ptr,
 		      struct dsc_mst_fairness_vars *vars);
 
+enum dc_status dm_dp_mst_is_port_support_mode(
+	struct amdgpu_dm_connector *aconnector,
+	struct dc_stream_state *stream);
+
 #endif
-- 
2.25.1


  parent reply	other threads:[~2022-06-17 19:35 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-17 19:34 [PATCH 00/31] DC Patches June 17, 2022 Rodrigo Siqueira
2022-06-17 19:34 ` [PATCH 01/31] drm/amd/display: Remove compiler warning Rodrigo Siqueira
2022-06-17 19:34 ` [PATCH 02/31] drm/amd/display: Revert "drm/amd/display: Add flag to detect dpms force off during HPD" Rodrigo Siqueira
2022-06-17 19:34 ` [PATCH 03/31] drm/amd/display: Revert "drm/amd/display: turn DPMS off on connector unplug" Rodrigo Siqueira
2022-06-17 19:34 ` [PATCH 04/31] drm/amd/display: Release remote dc_sink under mst scenario Rodrigo Siqueira
2022-06-17 19:34 ` [PATCH 05/31] drm/amd/display: Take emulated dc_sink into account for HDCP Rodrigo Siqueira
2022-06-17 19:34 ` [PATCH 06/31] drm/amd/display: Drop unnecessary detect link code Rodrigo Siqueira
2022-06-17 19:34 ` Rodrigo Siqueira [this message]
2022-06-17 19:34 ` [PATCH 08/31] drm/amd/display: Fix eDP not light up on resume Rodrigo Siqueira
2022-06-17 19:34 ` [PATCH 09/31] drm/amd/display: Turn off internal backlight when plugging external monitor Rodrigo Siqueira
2022-06-17 19:34 ` [PATCH 10/31] drm/amd/display: Add SMU logging code Rodrigo Siqueira
2022-06-17 19:34 ` [PATCH 11/31] drm/amd/display: Fix DC warning at driver load Rodrigo Siqueira
2022-06-17 19:34 ` [PATCH 12/31] drm/amd/display: Change HDMI judgement condition Rodrigo Siqueira
2022-06-17 19:34 ` [PATCH 13/31] drm/amd/display: Enrich the log in MST payload update Rodrigo Siqueira
2022-06-17 19:34 ` [PATCH 14/31] drm/amd/display: Fix in overriding DP drive settings Rodrigo Siqueira
2022-06-17 19:34 ` [PATCH 15/31] drm/amd/display: rename lane_settings to hw_lane_settings Rodrigo Siqueira
2022-06-17 19:34 ` [PATCH 16/31] drm/amd/display: refactor function transmitter_to_phy_id Rodrigo Siqueira
2022-06-17 19:51   ` Nathan Chancellor
2022-06-20 15:32     ` Rodrigo Siqueira Jordao
2022-06-17 19:34 ` [PATCH 17/31] drm/amd/display: Change initializer to single brace Rodrigo Siqueira
2022-06-17 19:34 ` [PATCH 18/31] drm/amd/display: Fix typo in override_lane_settings Rodrigo Siqueira
2022-06-17 19:35 ` [PATCH 19/31] drm/amd/display: Handle downstream LTTPR with fixed VS sequence Rodrigo Siqueira
2022-06-17 19:35 ` [PATCH 20/31] drm/amd/display: Remove unused vendor specific w/a Rodrigo Siqueira
2022-06-17 19:35 ` [PATCH 21/31] drm/amd/display: extract update stream allocation to link_hwss Rodrigo Siqueira
2022-06-17 19:35 ` [PATCH 22/31] drm/amd/display: Fix in dp link-training when updating payload allocation table Rodrigo Siqueira
2022-06-17 19:35 ` [PATCH 23/31] drm/amd/display: Check minimum disp_clk and dpp_clk debug option Rodrigo Siqueira
2022-06-17 19:35 ` [PATCH 24/31] drm/amd/display: Update DPPCLK programming sequence Rodrigo Siqueira
2022-06-17 19:35 ` [PATCH 25/31] drm/amd/display: Fix divide-by-zero in DPPCLK and DISPCLK calculation Rodrigo Siqueira
2022-06-17 19:35 ` [PATCH 26/31] drm/amd/display: Update SW state correctly for FCLK Rodrigo Siqueira
2022-06-17 19:35 ` [PATCH 27/31] drm/amd/display: Get VCO frequency from registers Rodrigo Siqueira
2022-06-17 19:35 ` [PATCH 28/31] drm/amd/display: Implement a pme workaround function Rodrigo Siqueira
2022-06-17 19:35 ` [PATCH 29/31] drm/amd/display: Update hook dcn32_funcs Rodrigo Siqueira
2022-06-17 19:35 ` [PATCH 30/31] drm/amd/display: Drop duplicate define Rodrigo Siqueira
2022-06-17 19:35 ` [PATCH 31/31] drm/amd/display: 3.2.191 Rodrigo Siqueira
2022-06-20 13:30 ` [PATCH 00/31] DC Patches June 17, 2022 Wheeler, Daniel

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=20220617193512.3471076-8-Rodrigo.Siqueira@amd.com \
    --to=rodrigo.siqueira@amd.com \
    --cc=Aurabindo.Pillai@amd.com \
    --cc=Bhawanpreet.Lakha@amd.com \
    --cc=Harry.Wentland@amd.com \
    --cc=Jerry.Zuo@amd.com \
    --cc=Sunpeng.Li@amd.com \
    --cc=agustin.gutierrez@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=hamza.mahfooz@amd.com \
    --cc=hersenxs.wu@amd.com \
    --cc=pavle.kotarac@amd.com \
    --cc=qingqing.zhuo@amd.com \
    --cc=roman.li@amd.com \
    --cc=solomon.chiu@amd.com \
    --cc=stylon.wang@amd.com \
    --cc=wayne.lin@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