* FAILED: patch "[PATCH] drm/amd/display: Reduce accessing remote DPCD overhead" failed to apply to 6.12-stable tree
@ 2025-01-20 14:18 gregkh
2025-02-04 10:13 ` [PATCH 6.12.y] drm/amd/display: Reduce accessing remote DPCD overhead Wayne Lin
0 siblings, 1 reply; 5+ messages in thread
From: gregkh @ 2025-01-20 14:18 UTC (permalink / raw)
To: Wayne.Lin, alexander.deucher, chiahsuan.chung, daniel.wheeler,
jerry.zuo, mario.limonciello
Cc: stable
The patch below does not apply to the 6.12-stable tree.
If someone wants it applied there, or to any other stable or longterm
tree, then please email the backport, including the original git commit
id to <stable@vger.kernel.org>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.12.y
git checkout FETCH_HEAD
git cherry-pick -x adb4998f4928a17d91be054218a902ba9f8c1f93
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<stable@vger.kernel.org>' --in-reply-to '2025012032-phoenix-crushing-da7a@gregkh' --subject-prefix 'PATCH 6.12.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From adb4998f4928a17d91be054218a902ba9f8c1f93 Mon Sep 17 00:00:00 2001
From: Wayne Lin <Wayne.Lin@amd.com>
Date: Mon, 9 Dec 2024 15:25:35 +0800
Subject: [PATCH] drm/amd/display: Reduce accessing remote DPCD overhead
[Why]
Observed frame rate get dropped by tool like glxgear. Even though the
output to monitor is 60Hz, the rendered frame rate drops to 30Hz lower.
It's due to code path in some cases will trigger
dm_dp_mst_is_port_support_mode() to read out remote Link status to
assess the available bandwidth for dsc maniplation. Overhead of keep
reading remote DPCD is considerable.
[How]
Store the remote link BW in mst_local_bw and use end-to-end full_pbn
as an indicator to decide whether update the remote link bw or not.
Whenever we need the info to assess the BW, visit the stored one first.
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3720
Fixes: fa57924c76d9 ("drm/amd/display: Refactor function dm_dp_mst_is_port_support_mode()")
Cc: Mario Limonciello <mario.limonciello@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Jerry Zuo <jerry.zuo@amd.com>
Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 4a9a918545455a5979c6232fcf61ed3d8f0db3ae)
Cc: stable@vger.kernel.org
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 6464a8378387..2227cd8e4a89 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
@@ -697,6 +697,8 @@ struct amdgpu_dm_connector {
struct drm_dp_mst_port *mst_output_port;
struct amdgpu_dm_connector *mst_root;
struct drm_dp_aux *dsc_aux;
+ uint32_t mst_local_bw;
+ uint16_t vc_full_pbn;
struct mutex handle_mst_msg_ready;
/* TODO see if we can merge with ddc_bus or make a dm_connector */
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 aadaa61ac5ac..1080075ccb17 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
@@ -155,6 +155,17 @@ amdgpu_dm_mst_connector_late_register(struct drm_connector *connector)
return 0;
}
+
+static inline void
+amdgpu_dm_mst_reset_mst_connector_setting(struct amdgpu_dm_connector *aconnector)
+{
+ aconnector->drm_edid = NULL;
+ aconnector->dsc_aux = NULL;
+ aconnector->mst_output_port->passthrough_aux = NULL;
+ aconnector->mst_local_bw = 0;
+ aconnector->vc_full_pbn = 0;
+}
+
static void
amdgpu_dm_mst_connector_early_unregister(struct drm_connector *connector)
{
@@ -182,9 +193,7 @@ amdgpu_dm_mst_connector_early_unregister(struct drm_connector *connector)
dc_sink_release(dc_sink);
aconnector->dc_sink = NULL;
- aconnector->drm_edid = NULL;
- aconnector->dsc_aux = NULL;
- port->passthrough_aux = NULL;
+ amdgpu_dm_mst_reset_mst_connector_setting(aconnector);
}
aconnector->mst_status = MST_STATUS_DEFAULT;
@@ -504,9 +513,7 @@ dm_dp_mst_detect(struct drm_connector *connector,
dc_sink_release(aconnector->dc_sink);
aconnector->dc_sink = NULL;
- aconnector->drm_edid = NULL;
- aconnector->dsc_aux = NULL;
- port->passthrough_aux = NULL;
+ amdgpu_dm_mst_reset_mst_connector_setting(aconnector);
amdgpu_dm_set_mst_status(&aconnector->mst_status,
MST_REMOTE_EDID | MST_ALLOCATE_NEW_PAYLOAD | MST_CLEAR_ALLOCATED_PAYLOAD,
@@ -1819,9 +1826,18 @@ enum dc_status dm_dp_mst_is_port_support_mode(
struct drm_dp_mst_port *immediate_upstream_port = NULL;
uint32_t end_link_bw = 0;
- /*Get last DP link BW capability*/
- if (dp_get_link_current_set_bw(&aconnector->mst_output_port->aux, &end_link_bw)) {
- if (stream_kbps > end_link_bw) {
+ /*Get last DP link BW capability. Mode shall be supported by Legacy peer*/
+ if (aconnector->mst_output_port->pdt != DP_PEER_DEVICE_DP_LEGACY_CONV &&
+ aconnector->mst_output_port->pdt != DP_PEER_DEVICE_NONE) {
+ if (aconnector->vc_full_pbn != aconnector->mst_output_port->full_pbn) {
+ dp_get_link_current_set_bw(&aconnector->mst_output_port->aux, &end_link_bw);
+ aconnector->vc_full_pbn = aconnector->mst_output_port->full_pbn;
+ aconnector->mst_local_bw = end_link_bw;
+ } else {
+ end_link_bw = aconnector->mst_local_bw;
+ }
+
+ if (end_link_bw > 0 && stream_kbps > end_link_bw) {
DRM_DEBUG_DRIVER("MST_DSC dsc decode at last link."
"Mode required bw can't fit into last link\n");
return DC_FAIL_BANDWIDTH_VALIDATE;
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 6.12.y] drm/amd/display: Reduce accessing remote DPCD overhead
2025-01-20 14:18 FAILED: patch "[PATCH] drm/amd/display: Reduce accessing remote DPCD overhead" failed to apply to 6.12-stable tree gregkh
@ 2025-02-04 10:13 ` Wayne Lin
2025-02-04 10:22 ` Greg KH
2025-02-04 16:34 ` Sasha Levin
0 siblings, 2 replies; 5+ messages in thread
From: Wayne Lin @ 2025-02-04 10:13 UTC (permalink / raw)
To: stable
Cc: Wayne Lin, Mario Limonciello, Alex Deucher, Jerry Zuo, Tom Chung,
Daniel Wheeler
[Why]
Observed frame rate get dropped by tool like glxgear. Even though the
output to monitor is 60Hz, the rendered frame rate drops to 30Hz lower.
It's due to code path in some cases will trigger
dm_dp_mst_is_port_support_mode() to read out remote Link status to
assess the available bandwidth for dsc maniplation. Overhead of keep
reading remote DPCD is considerable.
[How]
Store the remote link BW in mst_local_bw and use end-to-end full_pbn
as an indicator to decide whether update the remote link bw or not.
Whenever we need the info to assess the BW, visit the stored one first.
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3720
Fixes: fa57924c76d9 ("drm/amd/display: Refactor function dm_dp_mst_is_port_support_mode()")
Cc: Mario Limonciello <mario.limonciello@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Jerry Zuo <jerry.zuo@amd.com>
Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 4a9a918545455a5979c6232fcf61ed3d8f0db3ae)
Cc: stable@vger.kernel.org
(cherry picked from commit adb4998f4928a17d91be054218a902ba9f8c1f93)
Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
---
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 2 ++
.../display/amdgpu_dm/amdgpu_dm_mst_types.c | 34 ++++++++++++++-----
2 files changed, 27 insertions(+), 9 deletions(-)
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 a0bc2c0ac04d..20ad72d1b0d9 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
@@ -697,6 +697,8 @@ struct amdgpu_dm_connector {
struct drm_dp_mst_port *mst_output_port;
struct amdgpu_dm_connector *mst_root;
struct drm_dp_aux *dsc_aux;
+ uint32_t mst_local_bw;
+ uint16_t vc_full_pbn;
struct mutex handle_mst_msg_ready;
/* TODO see if we can merge with ddc_bus or make a dm_connector */
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 3d624ae6d9bd..754dbc544f03 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
@@ -155,6 +155,17 @@ amdgpu_dm_mst_connector_late_register(struct drm_connector *connector)
return 0;
}
+
+static inline void
+amdgpu_dm_mst_reset_mst_connector_setting(struct amdgpu_dm_connector *aconnector)
+{
+ aconnector->edid = NULL;
+ aconnector->dsc_aux = NULL;
+ aconnector->mst_output_port->passthrough_aux = NULL;
+ aconnector->mst_local_bw = 0;
+ aconnector->vc_full_pbn = 0;
+}
+
static void
amdgpu_dm_mst_connector_early_unregister(struct drm_connector *connector)
{
@@ -182,9 +193,7 @@ amdgpu_dm_mst_connector_early_unregister(struct drm_connector *connector)
dc_sink_release(dc_sink);
aconnector->dc_sink = NULL;
- aconnector->edid = NULL;
- aconnector->dsc_aux = NULL;
- port->passthrough_aux = NULL;
+ amdgpu_dm_mst_reset_mst_connector_setting(aconnector);
}
aconnector->mst_status = MST_STATUS_DEFAULT;
@@ -500,9 +509,7 @@ dm_dp_mst_detect(struct drm_connector *connector,
dc_sink_release(aconnector->dc_sink);
aconnector->dc_sink = NULL;
- aconnector->edid = NULL;
- aconnector->dsc_aux = NULL;
- port->passthrough_aux = NULL;
+ amdgpu_dm_mst_reset_mst_connector_setting(aconnector);
amdgpu_dm_set_mst_status(&aconnector->mst_status,
MST_REMOTE_EDID | MST_ALLOCATE_NEW_PAYLOAD | MST_CLEAR_ALLOCATED_PAYLOAD,
@@ -1815,9 +1822,18 @@ enum dc_status dm_dp_mst_is_port_support_mode(
struct drm_dp_mst_port *immediate_upstream_port = NULL;
uint32_t end_link_bw = 0;
- /*Get last DP link BW capability*/
- if (dp_get_link_current_set_bw(&aconnector->mst_output_port->aux, &end_link_bw)) {
- if (stream_kbps > end_link_bw) {
+ /*Get last DP link BW capability. Mode shall be supported by Legacy peer*/
+ if (aconnector->mst_output_port->pdt != DP_PEER_DEVICE_DP_LEGACY_CONV &&
+ aconnector->mst_output_port->pdt != DP_PEER_DEVICE_NONE) {
+ if (aconnector->vc_full_pbn != aconnector->mst_output_port->full_pbn) {
+ dp_get_link_current_set_bw(&aconnector->mst_output_port->aux, &end_link_bw);
+ aconnector->vc_full_pbn = aconnector->mst_output_port->full_pbn;
+ aconnector->mst_local_bw = end_link_bw;
+ } else {
+ end_link_bw = aconnector->mst_local_bw;
+ }
+
+ if (end_link_bw > 0 && stream_kbps > end_link_bw) {
DRM_DEBUG_DRIVER("MST_DSC dsc decode at last link."
"Mode required bw can't fit into last link\n");
return DC_FAIL_BANDWIDTH_VALIDATE;
--
2.37.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 6.12.y] drm/amd/display: Reduce accessing remote DPCD overhead
2025-02-04 10:13 ` [PATCH 6.12.y] drm/amd/display: Reduce accessing remote DPCD overhead Wayne Lin
@ 2025-02-04 10:22 ` Greg KH
2025-02-04 15:09 ` Mario Limonciello
2025-02-04 16:34 ` Sasha Levin
1 sibling, 1 reply; 5+ messages in thread
From: Greg KH @ 2025-02-04 10:22 UTC (permalink / raw)
To: Wayne Lin
Cc: stable, Mario Limonciello, Alex Deucher, Jerry Zuo, Tom Chung,
Daniel Wheeler
On Tue, Feb 04, 2025 at 06:13:36PM +0800, Wayne Lin wrote:
> [Why]
> Observed frame rate get dropped by tool like glxgear. Even though the
> output to monitor is 60Hz, the rendered frame rate drops to 30Hz lower.
>
> It's due to code path in some cases will trigger
> dm_dp_mst_is_port_support_mode() to read out remote Link status to
> assess the available bandwidth for dsc maniplation. Overhead of keep
> reading remote DPCD is considerable.
>
> [How]
> Store the remote link BW in mst_local_bw and use end-to-end full_pbn
> as an indicator to decide whether update the remote link bw or not.
>
> Whenever we need the info to assess the BW, visit the stored one first.
>
> Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3720
> Fixes: fa57924c76d9 ("drm/amd/display: Refactor function dm_dp_mst_is_port_support_mode()")
> Cc: Mario Limonciello <mario.limonciello@amd.com>
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Reviewed-by: Jerry Zuo <jerry.zuo@amd.com>
> Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
> Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> (cherry picked from commit 4a9a918545455a5979c6232fcf61ed3d8f0db3ae)
> Cc: stable@vger.kernel.org
> (cherry picked from commit adb4998f4928a17d91be054218a902ba9f8c1f93)
I'm confused, which commit is this exactly? Both of these seem to be
the same, and you can't have 2 "cherry picked from" lines in a commit,
right?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 6.12.y] drm/amd/display: Reduce accessing remote DPCD overhead
2025-02-04 10:22 ` Greg KH
@ 2025-02-04 15:09 ` Mario Limonciello
0 siblings, 0 replies; 5+ messages in thread
From: Mario Limonciello @ 2025-02-04 15:09 UTC (permalink / raw)
To: Greg KH, Wayne Lin
Cc: stable, Alex Deucher, Jerry Zuo, Tom Chung, Daniel Wheeler
On 2/4/2025 04:22, Greg KH wrote:
> On Tue, Feb 04, 2025 at 06:13:36PM +0800, Wayne Lin wrote:
>> [Why]
>> Observed frame rate get dropped by tool like glxgear. Even though the
>> output to monitor is 60Hz, the rendered frame rate drops to 30Hz lower.
>>
>> It's due to code path in some cases will trigger
>> dm_dp_mst_is_port_support_mode() to read out remote Link status to
>> assess the available bandwidth for dsc maniplation. Overhead of keep
>> reading remote DPCD is considerable.
>>
>> [How]
>> Store the remote link BW in mst_local_bw and use end-to-end full_pbn
>> as an indicator to decide whether update the remote link bw or not.
>>
>> Whenever we need the info to assess the BW, visit the stored one first.
>>
>> Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3720
>> Fixes: fa57924c76d9 ("drm/amd/display: Refactor function dm_dp_mst_is_port_support_mode()")
>> Cc: Mario Limonciello <mario.limonciello@amd.com>
>> Cc: Alex Deucher <alexander.deucher@amd.com>
>> Reviewed-by: Jerry Zuo <jerry.zuo@amd.com>
>> Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
>> Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
>> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
>> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
>> (cherry picked from commit 4a9a918545455a5979c6232fcf61ed3d8f0db3ae)
>> Cc: stable@vger.kernel.org
>> (cherry picked from commit adb4998f4928a17d91be054218a902ba9f8c1f93)
>
> I'm confused, which commit is this exactly? Both of these seem to be
> the same, and you can't have 2 "cherry picked from" lines in a commit,
> right?
>
> thanks,
>
> greg k-h
AFAICT what happened here is that this was a case that the same commit
landed in 6.13 final as well as 6.14-rc1. So when this was sent this
out it was cherry picked from adb4998f4928a17d91be054218a902ba9f8c1f93
which happens to already have a cherry-picked from line from
4a9a918545455a5979c6232fcf61ed3d8f0db3ae.
❯ git describe --contains adb4998f4928a17d91be054218a902ba9f8c1f93
v6.13~16^2~2^2~12
❯ git describe --contains 4a9a918545455a5979c6232fcf61ed3d8f0db3ae
v6.14-rc1~174^2~2^2~16
But it looks like you've got it sorted out as I saw it get added to the
6.12 queue.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 6.12.y] drm/amd/display: Reduce accessing remote DPCD overhead
2025-02-04 10:13 ` [PATCH 6.12.y] drm/amd/display: Reduce accessing remote DPCD overhead Wayne Lin
2025-02-04 10:22 ` Greg KH
@ 2025-02-04 16:34 ` Sasha Levin
1 sibling, 0 replies; 5+ messages in thread
From: Sasha Levin @ 2025-02-04 16:34 UTC (permalink / raw)
To: stable; +Cc: Wayne Lin, Sasha Levin
[ Sasha's backport helper bot ]
Hi,
Found matching upstream commit: adb4998f4928a17d91be054218a902ba9f8c1f93
Status in newer kernel trees:
6.13.y | Present (exact SHA1)
6.12.y | Not found
Note: The patch differs from the upstream commit:
---
1: adb4998f4928a ! 1: 0e5ffb81ed4e1 drm/amd/display: Reduce accessing remote DPCD overhead
@@ Commit message
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 4a9a918545455a5979c6232fcf61ed3d8f0db3ae)
Cc: stable@vger.kernel.org
+ (cherry picked from commit adb4998f4928a17d91be054218a902ba9f8c1f93)
+ Signed-off-by: Wayne Lin <Wayne.Lin@amd.com>
## drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h ##
@@ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h: struct amdgpu_dm_connector {
@@ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c: amdgpu_dm_mst_conne
+static inline void
+amdgpu_dm_mst_reset_mst_connector_setting(struct amdgpu_dm_connector *aconnector)
+{
-+ aconnector->drm_edid = NULL;
++ aconnector->edid = NULL;
+ aconnector->dsc_aux = NULL;
+ aconnector->mst_output_port->passthrough_aux = NULL;
+ aconnector->mst_local_bw = 0;
@@ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c: amdgpu_dm_mst_conne
dc_sink_release(dc_sink);
aconnector->dc_sink = NULL;
-- aconnector->drm_edid = NULL;
+- aconnector->edid = NULL;
- aconnector->dsc_aux = NULL;
- port->passthrough_aux = NULL;
+ amdgpu_dm_mst_reset_mst_connector_setting(aconnector);
@@ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c: dm_dp_mst_detect(st
dc_sink_release(aconnector->dc_sink);
aconnector->dc_sink = NULL;
-- aconnector->drm_edid = NULL;
+- aconnector->edid = NULL;
- aconnector->dsc_aux = NULL;
- port->passthrough_aux = NULL;
+ amdgpu_dm_mst_reset_mst_connector_setting(aconnector);
---
Results of testing on various branches:
| Branch | Patch Apply | Build Test |
|---------------------------|-------------|------------|
| stable/linux-6.12.y | Success | Success |
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-02-04 16:34 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-20 14:18 FAILED: patch "[PATCH] drm/amd/display: Reduce accessing remote DPCD overhead" failed to apply to 6.12-stable tree gregkh
2025-02-04 10:13 ` [PATCH 6.12.y] drm/amd/display: Reduce accessing remote DPCD overhead Wayne Lin
2025-02-04 10:22 ` Greg KH
2025-02-04 15:09 ` Mario Limonciello
2025-02-04 16:34 ` Sasha Levin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).