Skip to content

Commit e78b8e8

Browse files
committed
drm/i915/dp_mst: Enable HBLANK expansion quirk for UHBR rates
Enabling the 5k@60Hz uncompressed mode on the MediaTek/Dell U3224KBA monitor results in a blank screen, at least on MTL platforms on UHBR link rates with some (<30) uncompressed bpp values. Enabling compression fixes the problem, so do that for now. Windows enables DSC always if the sink supports it and forcing it to enable the mode without compression leads to the same problem above (which suggests a panel issue with uncompressed mode). The same 5k mode on non-UHBR link rates is not affected and lower resolution modes are not affected either. The problem is similar to the one fixed by the HBLANK expansion quirk on Synaptics hubs, with the difference that the problematic mode has a longer HBLANK duration. Also the monitor doesn't report supporting HBLANK expansion; either its internal MST hub does the expansion internally - similarly to the Synaptics hub - or the issue has another root cause, but still related to the mode's short HBLANK duration. Enable the quirk for the monitor adjusting the detection for the above differences. v2: Rebase on drm_dp_128132b_supported() change. Cc: [email protected] Reviewed-by: Ankit Nautiyal <[email protected]> Tested-by: Khaled Almahallawy <[email protected]> Acked-by: Maarten Lankhorst <[email protected]> Signed-off-by: Imre Deak <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 427c703 commit e78b8e8

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

drivers/gpu/drm/display/drm_dp_helper.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2281,6 +2281,8 @@ static const struct dpcd_quirk dpcd_quirk_list[] = {
22812281
{ OUI(0x90, 0xCC, 0x24), DEVICE_ID_ANY, true, BIT(DP_DPCD_QUIRK_DSC_WITHOUT_VIRTUAL_DPCD) },
22822282
/* Synaptics DP1.4 MST hubs require DSC for some modes on which it applies HBLANK expansion. */
22832283
{ OUI(0x90, 0xCC, 0x24), DEVICE_ID_ANY, true, BIT(DP_DPCD_QUIRK_HBLANK_EXPANSION_REQUIRES_DSC) },
2284+
/* MediaTek panels (at least in U3224KBA) require DSC for modes with a short HBLANK on UHBR links. */
2285+
{ OUI(0x00, 0x0C, 0xE7), DEVICE_ID_ANY, false, BIT(DP_DPCD_QUIRK_HBLANK_EXPANSION_REQUIRES_DSC) },
22842286
/* Apple MacBookPro 2017 15 inch eDP Retina panel reports too low DP_MAX_LINK_RATE */
22852287
{ OUI(0x00, 0x10, 0xfa), DEVICE_ID(101, 68, 21, 101, 98, 97), false, BIT(DP_DPCD_QUIRK_CAN_DO_MAX_LINK_RATE_3_24_GBPS) },
22862288
};

drivers/gpu/drm/i915/display/intel_dp_mst.c

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -421,15 +421,22 @@ static int mode_hblank_period_ns(const struct drm_display_mode *mode)
421421

422422
static bool
423423
hblank_expansion_quirk_needs_dsc(const struct intel_connector *connector,
424-
const struct intel_crtc_state *crtc_state)
424+
const struct intel_crtc_state *crtc_state,
425+
const struct link_config_limits *limits)
425426
{
426427
const struct drm_display_mode *adjusted_mode =
427428
&crtc_state->hw.adjusted_mode;
429+
bool is_uhbr_sink = connector->mst_port &&
430+
drm_dp_128b132b_supported(connector->mst_port->dpcd);
431+
int hblank_limit = is_uhbr_sink ? 500 : 300;
428432

429433
if (!connector->dp.dsc_hblank_expansion_quirk)
430434
return false;
431435

432-
if (mode_hblank_period_ns(adjusted_mode) > 300)
436+
if (is_uhbr_sink && !drm_dp_is_uhbr_rate(limits->max_rate))
437+
return false;
438+
439+
if (mode_hblank_period_ns(adjusted_mode) > hblank_limit)
433440
return false;
434441

435442
return true;
@@ -445,7 +452,7 @@ adjust_limits_for_dsc_hblank_expansion_quirk(const struct intel_connector *conne
445452
const struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
446453
int min_bpp_x16 = limits->link.min_bpp_x16;
447454

448-
if (!hblank_expansion_quirk_needs_dsc(connector, crtc_state))
455+
if (!hblank_expansion_quirk_needs_dsc(connector, crtc_state, limits))
449456
return true;
450457

451458
if (!dsc) {
@@ -1604,7 +1611,14 @@ static bool detect_dsc_hblank_expansion_quirk(const struct intel_connector *conn
16041611
DP_DPCD_QUIRK_HBLANK_EXPANSION_REQUIRES_DSC))
16051612
return false;
16061613

1607-
if (!(dpcd[DP_RECEIVE_PORT_0_CAP_0] & DP_HBLANK_EXPANSION_CAPABLE))
1614+
/*
1615+
* UHBR (MST sink) devices requiring this quirk don't advertise the
1616+
* HBLANK expansion support. Presuming that they perform HBLANK
1617+
* expansion internally, or are affected by this issue on modes with a
1618+
* short HBLANK for other reasons.
1619+
*/
1620+
if (!drm_dp_128b132b_supported(dpcd) &&
1621+
!(dpcd[DP_RECEIVE_PORT_0_CAP_0] & DP_HBLANK_EXPANSION_CAPABLE))
16081622
return false;
16091623

16101624
drm_dbg_kms(&i915->drm,

0 commit comments

Comments
 (0)