From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Michael Strauss <michael.strauss@amd.com>,
Wenjing Liu <wenjing.liu@amd.com>,
Zaeem Mohamed <zaeem.mohamed@amd.com>,
Daniel Wheeler <daniel.wheeler@amd.com>,
Alex Deucher <alexander.deucher@amd.com>,
Sasha Levin <sashal@kernel.org>,
harry.wentland@amd.com, sunpeng.li@amd.com,
christian.koenig@amd.com, airlied@gmail.com, simona@ffwll.ch,
roman.li@amd.com, wayne.lin@amd.com, george.shen@amd.com,
siqueira@igalia.com, Cruise.Hung@amd.com, robin.chen@amd.com,
Fudong.Wang@amd.com, ryanseto@amd.com, alex.hung@amd.com,
PeiChen.Huang@amd.com, Ausef.Yousof@amd.com,
amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: [PATCH AUTOSEL 6.13 15/37] drm/amd/display: Update FIXED_VS Link Rate Toggle Workaround Usage
Date: Thu, 3 Apr 2025 15:14:51 -0400 [thread overview]
Message-ID: <20250403191513.2680235-15-sashal@kernel.org> (raw)
In-Reply-To: <20250403191513.2680235-1-sashal@kernel.org>
From: Michael Strauss <michael.strauss@amd.com>
[ Upstream commit 7c6518c1c73199a230b5fc55ddfed3e5b9dc3290 ]
[WHY]
Previously the 128b/132b LTTPR support DPCD field was used to decide if
FIXED_VS training sequence required a rate toggle before initiating LT.
When running DP2.1 4.9.x.x compliance tests, emulated LTTPRs can report
no-128b/132b support which is then forwarded by the FIXED_VS retimer.
As a result this test exposes the rate toggle again, erroneously causing
failures as certain compliance sinks don't expect this behaviour.
[HOW]
Add new DPCD register defines/reads to read LTTPR IEEE OUI and device ID.
Decide whether to perform the rate toggle based on the LTTPR's IEEE OUI
which guarantees that we only perform the toggle on affected retimers.
Reviewed-by: Wenjing Liu <wenjing.liu@amd.com>
Signed-off-by: Michael Strauss <michael.strauss@amd.com>
Signed-off-by: Zaeem Mohamed <zaeem.mohamed@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/gpu/drm/amd/display/dc/dc_dp_types.h | 8 ++++++++
.../display/dc/link/protocols/link_dp_capability.c | 12 ++++++++++--
.../protocols/link_dp_training_fixed_vs_pe_retimer.c | 3 ++-
3 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/dc/dc_dp_types.h b/drivers/gpu/drm/amd/display/dc/dc_dp_types.h
index 8dd6eb044829a..aecaf06ba9990 100644
--- a/drivers/gpu/drm/amd/display/dc/dc_dp_types.h
+++ b/drivers/gpu/drm/amd/display/dc/dc_dp_types.h
@@ -1104,6 +1104,8 @@ struct dc_lttpr_caps {
union dp_main_link_channel_coding_lttpr_cap main_link_channel_coding;
union dp_128b_132b_supported_lttpr_link_rates supported_128b_132b_rates;
uint8_t aux_rd_interval[MAX_REPEATER_CNT - 1];
+ uint8_t lttpr_ieee_oui[3];
+ uint8_t lttpr_device_id[6];
};
struct dc_dongle_dfp_cap_ext {
@@ -1363,6 +1365,12 @@ struct dp_trace {
#ifndef DP_BRANCH_VENDOR_SPECIFIC_START
#define DP_BRANCH_VENDOR_SPECIFIC_START 0x50C
#endif
+#ifndef DP_LTTPR_IEEE_OUI
+#define DP_LTTPR_IEEE_OUI 0xF003D
+#endif
+#ifndef DP_LTTPR_DEVICE_ID
+#define DP_LTTPR_DEVICE_ID 0xF0040
+#endif
/** USB4 DPCD BW Allocation Registers Chapter 10.7 **/
#ifndef DP_TUNNELING_CAPABILITIES
#define DP_TUNNELING_CAPABILITIES 0xE000D /* 1.4a */
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
index 9dabaf682171d..d5d1f5ffd4fd8 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
@@ -1568,10 +1568,18 @@ enum dc_status dp_retrieve_lttpr_cap(struct dc_link *link)
/* Attempt to train in LTTPR transparent mode if repeater count exceeds 8. */
is_lttpr_present = dp_is_lttpr_present(link);
- if (is_lttpr_present)
+ DC_LOG_DC("is_lttpr_present = %d\n", is_lttpr_present);
+
+ if (is_lttpr_present) {
CONN_DATA_DETECT(link, lttpr_dpcd_data, sizeof(lttpr_dpcd_data), "LTTPR Caps: ");
- DC_LOG_DC("is_lttpr_present = %d\n", is_lttpr_present);
+ core_link_read_dpcd(link, DP_LTTPR_IEEE_OUI, link->dpcd_caps.lttpr_caps.lttpr_ieee_oui, sizeof(link->dpcd_caps.lttpr_caps.lttpr_ieee_oui));
+ CONN_DATA_DETECT(link, link->dpcd_caps.lttpr_caps.lttpr_ieee_oui, sizeof(link->dpcd_caps.lttpr_caps.lttpr_ieee_oui), "LTTPR IEEE OUI: ");
+
+ core_link_read_dpcd(link, DP_LTTPR_DEVICE_ID, link->dpcd_caps.lttpr_caps.lttpr_device_id, sizeof(link->dpcd_caps.lttpr_caps.lttpr_device_id));
+ CONN_DATA_DETECT(link, link->dpcd_caps.lttpr_caps.lttpr_device_id, sizeof(link->dpcd_caps.lttpr_caps.lttpr_device_id), "LTTPR Device ID: ");
+ }
+
return status;
}
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_training_fixed_vs_pe_retimer.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_training_fixed_vs_pe_retimer.c
index ccf8096dde290..ce174ce5579c0 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_training_fixed_vs_pe_retimer.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_training_fixed_vs_pe_retimer.c
@@ -270,7 +270,8 @@ enum link_training_result dp_perform_fixed_vs_pe_training_sequence(
rate = get_dpcd_link_rate(<_settings->link_settings);
- if (!link->dpcd_caps.lttpr_caps.main_link_channel_coding.bits.DP_128b_132b_SUPPORTED) {
+ // Only perform toggle if FIXED_VS LTTPR reports no IEEE OUI
+ if (memcmp("\x0,\x0,\x0", &link->dpcd_caps.lttpr_caps.lttpr_ieee_oui[0], 3) == 0) {
/* Vendor specific: Toggle link rate */
toggle_rate = (rate == 0x6) ? 0xA : 0x6;
--
2.39.5
next prev parent reply other threads:[~2025-04-03 19:16 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-03 19:14 [PATCH AUTOSEL 6.13 01/37] drm: allow encoder mode_set even when connectors change for crtc Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 02/37] drm/xe/bmg: Add new PCI IDs Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 03/37] drm/xe/pf: Don't send BEGIN_ID if VF has no context/doorbells Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 04/37] drm/xe/vf: Don't try to trigger a full GT reset if VF Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 05/37] drm/amd/display: Update Cursor request mode to the beginning prefetch always Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 06/37] drm/amd/display: add workaround flag to link to force FFE preset Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 07/37] drm/amdgpu: Unlocked unmap only clear page table leaves Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 08/37] drm: panel-orientation-quirks: Add support for AYANEO 2S Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 09/37] drm: panel-orientation-quirks: Add quirks for AYA NEO Flip DS and KB Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 10/37] drm: panel-orientation-quirks: Add quirk for AYA NEO Slide Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 11/37] drm: panel-orientation-quirks: Add new quirk for GPD Win 2 Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 12/37] drm: panel-orientation-quirks: Add quirk for OneXPlayer Mini (Intel) Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 13/37] drm/debugfs: fix printk format for bridge index Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 14/37] drm/bridge: panel: forbid initializing a panel with unknown connector type Sasha Levin
2025-04-03 19:14 ` Sasha Levin [this message]
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 16/37] drm/amd/display: stop DML2 from removing pipes based on planes Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 17/37] drivers: base: devres: Allow to release group on device release Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 18/37] drm/amdkfd: clamp queue size to minimum Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 19/37] drm/amdkfd: Fix mode1 reset crash issue Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 20/37] drm/amdkfd: Fix pqm_destroy_queue race with GPU reset Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 21/37] drm/amdkfd: debugfs hang_hws skip GPU with MES Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 22/37] drm/xe/xelp: Move Wa_16011163337 from tunings to workarounds Sasha Levin
2025-04-03 19:14 ` [PATCH AUTOSEL 6.13 23/37] drm/mediatek: mtk_dpi: Move the input_2p_en bit to platform data Sasha Levin
2025-04-03 19:15 ` [PATCH AUTOSEL 6.13 24/37] drm/mediatek: mtk_dpi: Explicitly manage TVD clock in power on/off Sasha Levin
2025-04-03 19:15 ` [PATCH AUTOSEL 6.13 25/37] PCI: Add Rockchip Vendor ID Sasha Levin
2025-04-03 19:15 ` [PATCH AUTOSEL 6.13 26/37] drm/amdgpu: handle amdgpu_cgs_create_device() errors in amd_powerplay_create() Sasha Levin
2025-04-03 19:15 ` [PATCH AUTOSEL 6.13 27/37] drm/amd/display: Prevent VStartup Overflow Sasha Levin
2025-04-03 19:15 ` [PATCH AUTOSEL 6.13 28/37] PCI: Enable Configuration RRS SV early Sasha Levin
2025-04-03 19:15 ` [PATCH AUTOSEL 6.13 29/37] drm/amdgpu: Fix the race condition for draining retry fault Sasha Levin
2025-04-03 19:15 ` [PATCH AUTOSEL 6.13 30/37] PCI: Check BAR index for validity Sasha Levin
2025-04-03 19:15 ` [PATCH AUTOSEL 6.13 31/37] PCI: vmd: Make vmd_dev::cfg_lock a raw_spinlock_t type Sasha Levin
2025-04-03 19:15 ` [PATCH AUTOSEL 6.13 32/37] drm/amdgpu: grab an additional reference on the gang fence v2 Sasha Levin
2025-04-03 19:15 ` [PATCH AUTOSEL 6.13 33/37] fbdev: omapfb: Add 'plane' value check Sasha Levin
2025-04-03 19:15 ` [PATCH AUTOSEL 6.13 34/37] tracing: probe-events: Add comments about entry data storing code Sasha Levin
2025-04-03 19:15 ` [PATCH AUTOSEL 6.13 35/37] ktest: Fix Test Failures Due to Missing LOG_FILE Directories Sasha Levin
2025-04-03 19:15 ` [PATCH AUTOSEL 6.13 36/37] tpm, tpm_tis: Workaround failed command reception on Infineon devices Sasha Levin
2025-04-03 19:15 ` [PATCH AUTOSEL 6.13 37/37] tpm: End any active auth session before shutdown Sasha Levin
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=20250403191513.2680235-15-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=Ausef.Yousof@amd.com \
--cc=Cruise.Hung@amd.com \
--cc=Fudong.Wang@amd.com \
--cc=PeiChen.Huang@amd.com \
--cc=airlied@gmail.com \
--cc=alex.hung@amd.com \
--cc=alexander.deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=christian.koenig@amd.com \
--cc=daniel.wheeler@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=george.shen@amd.com \
--cc=harry.wentland@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=michael.strauss@amd.com \
--cc=robin.chen@amd.com \
--cc=roman.li@amd.com \
--cc=ryanseto@amd.com \
--cc=simona@ffwll.ch \
--cc=siqueira@igalia.com \
--cc=stable@vger.kernel.org \
--cc=sunpeng.li@amd.com \
--cc=wayne.lin@amd.com \
--cc=wenjing.liu@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
all inboxes | Powered by JetHome®