From: Lee Shawn C <shawn.c.lee@intel.com>
To: intel-gfx@lists.freedesktop.org
Cc: "Lee Shawn C" <shawn.c.lee@intel.com>,
"Shankar Uma" <uma.shankar@intel.com>,
"Jani Nikula" <jani.nikula@linux.intel.com>,
"Ville Syrjälä" <ville.syrjala@linux.intel.com>
Subject: [v2] drm/i915/dp: Enable DSC on external DP display if VBT allows
Date: Tue, 27 May 2025 15:18:55 +0000 [thread overview]
Message-ID: <20250527151855.68325-1-shawn.c.lee@intel.com> (raw)
In-Reply-To: <20250527075906.65542-1-shawn.c.lee@intel.com>
A DSC setting has been available in VBT since version 251, which allows
users to enable or disable the DSC feature based on their system design.
With this in mind, DP driver should reference this setting and avoid
enabling DSC if this value is not allowed.
v2:
- Remove some const for intel_connector to fix compile error.
- Check this VBT setting for external HDMI/DP only. DSC will be allowed
in all other cases.
Cc: Shankar Uma <uma.shankar@intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Lee Shawn C <shawn.c.lee@intel.com>
---
drivers/gpu/drm/i915/display/intel_bios.c | 12 ++++++++++++
drivers/gpu/drm/i915/display/intel_bios.h | 1 +
drivers/gpu/drm/i915/display/intel_dp.c | 9 +++++++--
drivers/gpu/drm/i915/display/intel_dp.h | 4 ++--
drivers/gpu/drm/i915/display/intel_dp_mst.c | 2 +-
5 files changed, 23 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
index 9ce41e689d50..b2e59ca1bd6f 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.c
+++ b/drivers/gpu/drm/i915/display/intel_bios.c
@@ -3549,6 +3549,18 @@ bool intel_bios_get_dsc_params(struct intel_encoder *encoder,
return false;
}
+bool intel_bios_encoder_supports_dsc(const struct intel_bios_encoder_data *devdata)
+{
+ if (!devdata || devdata->display->vbt.version < 251)
+ return true;
+
+ if ((intel_bios_encoder_supports_dp(devdata) && !intel_bios_encoder_supports_edp(devdata)) ||
+ intel_bios_encoder_supports_hdmi(devdata))
+ return !devdata->child.disable_compression_for_ext_disp;
+
+ return true;
+}
+
static const u8 adlp_aux_ch_map[] = {
[AUX_CH_A] = DP_AUX_A,
[AUX_CH_B] = DP_AUX_B,
diff --git a/drivers/gpu/drm/i915/display/intel_bios.h b/drivers/gpu/drm/i915/display/intel_bios.h
index 6cd7a011b8c4..d501070abafd 100644
--- a/drivers/gpu/drm/i915/display/intel_bios.h
+++ b/drivers/gpu/drm/i915/display/intel_bios.h
@@ -258,6 +258,7 @@ bool intel_bios_encoder_supports_dp_dual_mode(const struct intel_bios_encoder_da
bool intel_bios_encoder_is_lspcon(const struct intel_bios_encoder_data *devdata);
bool intel_bios_encoder_lane_reversal(const struct intel_bios_encoder_data *devdata);
bool intel_bios_encoder_hpd_invert(const struct intel_bios_encoder_data *devdata);
+bool intel_bios_encoder_supports_dsc(const struct intel_bios_encoder_data *devdata);
enum port intel_bios_encoder_port(const struct intel_bios_encoder_data *devdata);
enum aux_ch intel_bios_dp_aux_ch(const struct intel_bios_encoder_data *devdata);
int intel_bios_dp_boost_level(const struct intel_bios_encoder_data *devdata);
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 208a953b04a2..f62570c1d346 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -1392,9 +1392,11 @@ int intel_dp_num_joined_pipes(struct intel_dp *intel_dp,
return 1;
}
-bool intel_dp_has_dsc(const struct intel_connector *connector)
+bool intel_dp_has_dsc(struct intel_connector *connector)
{
struct intel_display *display = to_intel_display(connector);
+ struct intel_dp *intel_dp = intel_attached_dp(connector);
+ const struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
if (!HAS_DSC(display))
return false;
@@ -1406,6 +1408,9 @@ bool intel_dp_has_dsc(const struct intel_connector *connector)
connector->panel.vbt.edp.dsc_disable)
return false;
+ if (!intel_bios_encoder_supports_dsc(encoder->devdata))
+ return false;
+
if (!drm_dp_sink_supports_dsc(connector->dp.dsc_dpcd))
return false;
@@ -1650,7 +1655,7 @@ bool intel_dp_supports_fec(struct intel_dp *intel_dp,
}
bool intel_dp_supports_dsc(struct intel_dp *intel_dp,
- const struct intel_connector *connector,
+ struct intel_connector *connector,
const struct intel_crtc_state *crtc_state)
{
if (!intel_dp_has_dsc(connector))
diff --git a/drivers/gpu/drm/i915/display/intel_dp.h b/drivers/gpu/drm/i915/display/intel_dp.h
index eff3414c05db..876e70246dfb 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.h
+++ b/drivers/gpu/drm/i915/display/intel_dp.h
@@ -83,7 +83,7 @@ void intel_dp_audio_compute_config(struct intel_encoder *encoder,
bool intel_dp_has_hdmi_sink(struct intel_dp *intel_dp);
bool intel_dp_is_edp(struct intel_dp *intel_dp);
bool intel_dp_is_uhbr(const struct intel_crtc_state *crtc_state);
-bool intel_dp_has_dsc(const struct intel_connector *connector);
+bool intel_dp_has_dsc(struct intel_connector *connector);
int intel_dp_link_symbol_size(int rate);
int intel_dp_link_symbol_clock(int rate);
bool intel_dp_is_port_edp(struct intel_display *display, enum port port);
@@ -171,7 +171,7 @@ bool intel_dp_supports_fec(struct intel_dp *intel_dp,
const struct intel_crtc_state *pipe_config);
bool intel_dp_supports_dsc(struct intel_dp *intel_dp,
- const struct intel_connector *connector,
+ struct intel_connector *connector,
const struct intel_crtc_state *crtc_state);
void intel_ddi_update_pipe(struct intel_atomic_state *state,
diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index cc00a73898f1..bf613562feab 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -551,7 +551,7 @@ hblank_expansion_quirk_needs_dsc(const struct intel_connector *connector,
static bool
adjust_limits_for_dsc_hblank_expansion_quirk(struct intel_dp *intel_dp,
- const struct intel_connector *connector,
+ struct intel_connector *connector,
const struct intel_crtc_state *crtc_state,
struct link_config_limits *limits,
bool dsc)
--
2.34.1
next prev parent reply other threads:[~2025-05-27 15:19 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-27 7:59 [PATCH] drm/i915/dp: Enable DSC on external DP display if VBT allows Lee Shawn C
2025-05-27 8:20 ` Jani Nikula
2025-05-27 8:46 ` Lee, Shawn C
2025-05-27 9:04 ` Jani Nikula
2025-05-27 10:37 ` ✗ Fi.CI.BUILD: failure for " Patchwork
2025-05-27 15:18 ` Lee Shawn C [this message]
2025-05-27 16:57 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/dp: Enable DSC on external DP display if VBT allows (rev2) Patchwork
2025-05-27 17:21 ` ✓ i915.CI.BAT: success " Patchwork
2025-05-27 19:59 ` ✗ i915.CI.Full: failure " Patchwork
2025-05-28 10:59 ` [PATCH] drm/i915/dp: Enable DSC on external DP display if VBT allows Ville Syrjälä
2025-05-28 13:24 ` Lee, Shawn C
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=20250527151855.68325-1-shawn.c.lee@intel.com \
--to=shawn.c.lee@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=jani.nikula@linux.intel.com \
--cc=uma.shankar@intel.com \
--cc=ville.syrjala@linux.intel.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