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

From: lyude

Date: Thu Sep 17 2026 - 15:29:04 EST


Hi - apologies for missing the patch previously, and thank you for
bringing this to my attention!

Would you mind re-sending with the original authorship + a Co-authored-
by tag for yourself to make sure we give the original author credit?

On Thu, 2026-09-17 at 13:50 +0000, Tano Dzhinski wrote:
> 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.
>
> Giuseppe Ranieri posted a fix for this to the nouveau list on
> 2026-01-17, which received no review:
> https://ratatoskr.run/nouveau/2026/01/16963412
>
> Fixes: 6c6abab20b99 ("drm/nouveau/disp: add output hdmi config
> method")
> Signed-off-by: Tano Dzhinski <tano.dzhinski@xxxxxxxxx>
> ---
>  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) {