[PATCH v2] drm/nouveau/disp: don't reject HDMI config on cards without SCDC

From: Tano Dzhinski

Date: Thu Sep 17 2026 - 17:52:11 EST


From: Giuseppe Ranieri <giuseppe@xxxxxxxxxxx>

nv50_hdmi_enable() passes the sink's SCDC capability from its EDID
straight through to nvif_outp_hdmi(). On pre-Maxwell-2 cards there is no
hdmi->scdc callback, so nvkm_uoutp_mthd_hdmi() rejects the whole
configuration with -EINVAL, and nv50_hdmi_enable() returns before
hdmi->ctrl() runs and before the AVI and VSI infoframes are sent.

The result on such a card driving an SCDC-capable HDMI 2.0 sink is that
HDMI audio silently stops working. Video is unaffected, and nothing is
logged, which makes the failure hard to attribute.

SCDC is optional, and the hdmi->scdc() call further down is already
guarded against a missing callback. Requesting it on a card that cannot
do it need not invalidate the rest of the HDMI configuration, so drop
that term from the condition and let the existing guard skip SCDC alone.

Fixes: 6c6abab20b99 ("drm/nouveau/disp: add output hdmi config method")
Signed-off-by: Giuseppe Ranieri <giuseppe@xxxxxxxxxxx>
Co-authored-by: Tano Dzhinski <tano.dzhinski@xxxxxxxxx>
Signed-off-by: Tano Dzhinski <tano.dzhinski@xxxxxxxxx>
Tested-by: Tano Dzhinski <tano.dzhinski@xxxxxxxxx>
---
v2: restore Giuseppe Ranieri's original authorship and Signed-off-by
(he posted this fix to the nouveau list on 2026-01-17,
https://ratatoskr.run/nouveau/2026/01/16963412), per Lyude's
review of v1. Added Co-authored-by and Tested-by.
Tested on GK104 (GTX 670MX) with BenQ PD2700U and EW2790U.

drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c
index 377d0e0cef84..9887b3898505 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.c
@@ -253,8 +253,7 @@ nvkm_uoutp_mthd_hdmi(struct nvkm_outp *outp, void *argv, u32 argc)

if (!ior->func->hdmi ||
args->v0.max_ac_packet > 0x1f ||
- args->v0.rekey > 0x7f ||
- (args->v0.scdc && !ior->func->hdmi->scdc))
+ args->v0.rekey > 0x7f)
return -EINVAL;

if (!args->v0.enable) {
--
2.43.0