[PATCH v3 00/10] nouveau: assorted display fixes (GB20x, r570 DP_CONFIG_STREAM, HF-EEODB EDIDs)

From: Mohamed Ahmed

Date: Mon Aug 24 2026 - 20:15:09 EST


Several fixes for GSP-driven displays consisting of four independent
groups. These were created as part of ongoing HDMI 2.1 bring up and
display handling clean-up work, so some of them are not issues now
(e.g., the 2.147GHz pixel clock cap) but fixing them is required to get
advanced features such as FRL, DSC, VRR, etc working properly.

The v2 review asked for a few style changes and pointed out a cleaner
struct alternative, so this v3 does that along with adding the requested
Fixes: and stable tags.

Changes in v3:
- Patch 3: the four .gsp head hooks collapse into a single "const struct
nvkm_head_func *head" as suggested. r535_head and its four forwarders
are gone and the chip's own table is handed to nvkm_head_new_(). New
tu102_gsp_head and (patch 7) gb202_gsp_head. gsp.intr_low_latency moved
to patch 8, where its only user is.

- Patch 7: depth switch condensed to gv100_head_state()'s form. Commit
message has also been edited to no longer say the readback is supplied
through gb202_gsp_dsp.

- Patch 8: GB20x was the last cross-file user of the TU102 vblank enables
so those are static now and their head.h prototypes are gone.

- Patch 10: a VBIOS embedded EDID that fails drm_edid_valid() no longer
flips the LVDS connector to disconnected and the probe helper's default
fallback is no longer skipped. ACPI EDIDs are no longer clamped before
validation, the returned length is tried first and the clamp is only a
fallback.

Link to v2:
https://lore.kernel.org/all/20260820164929.17117-1-mohamedahmedegypt2001@xxxxxxxxx/
Link to v1:
https://lore.kernel.org/all/20260814235705.59132-1-mohamedahmedegypt2001@xxxxxxxxx/

Mohamed Ahmed (10):
drm/nouveau/disp: move GSP head-timing ISR and vblank helpers to
tu102.c
drm/nouveau/disp: move the GSP HDMI GCP AVMute write to engine/disp
drm/nouveau/disp: route GSP-RM display MMIO through nvkm_disp_func
hooks
drm/nouveau/disp: fix HDMI vendor infoframes on GB20x
drm/nouveau/disp: fix HDMI GCP AVMute register offsets on GB20x
drm/nouveau/gsp: use per-version DP_CONFIG_STREAM params on r570
firmware
drm/nouveau/disp: fix head state readback on GB20x
drm/nouveau/gsp: fix vblank interrupts on GB20x
drm/nouveau/dispnv50: program pixel clocks above 2.147GHz on GB20x
drm/nouveau: honor HF-EEODB EDIDs by converting to struct drm_edid

drivers/gpu/drm/nouveau/dispnv04/dfp.c | 5 +-
drivers/gpu/drm/nouveau/dispnv50/disp.c | 4 +-
drivers/gpu/drm/nouveau/dispnv50/headca7d.c | 21 +-
.../drm/nouveau/include/nvhw/class/clca7d.h | 4 +
.../drm/nouveau/include/nvkm/engine/disp.h | 1 +
drivers/gpu/drm/nouveau/nouveau_acpi.c | 32 ++-
drivers/gpu/drm/nouveau/nouveau_acpi.h | 10 +-
drivers/gpu/drm/nouveau/nouveau_connector.c | 148 ++++++++++----
drivers/gpu/drm/nouveau/nouveau_connector.h | 12 +-
.../gpu/drm/nouveau/nvkm/engine/device/base.c | 10 +-
.../gpu/drm/nouveau/nvkm/engine/disp/Kbuild | 1 +
.../gpu/drm/nouveau/nvkm/engine/disp/ga102.c | 13 +-
.../gpu/drm/nouveau/nvkm/engine/disp/gb202.c | 191 ++++++++++++++++++
.../gpu/drm/nouveau/nvkm/engine/disp/head.h | 2 +
.../gpu/drm/nouveau/nvkm/engine/disp/ior.h | 1 +
.../gpu/drm/nouveau/nvkm/engine/disp/priv.h | 17 ++
.../gpu/drm/nouveau/nvkm/engine/disp/tu102.c | 86 +++++++-
.../nouveau/nvkm/subdev/gsp/rm/r535/disp.c | 125 +++++-------
.../nouveau/nvkm/subdev/gsp/rm/r570/disp.c | 64 ++++++
.../drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c | 9 +
.../nvkm/subdev/gsp/rm/r570/nvrm/disp.h | 2 +
.../gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h | 5 +
22 files changed, 632 insertions(+), 131 deletions(-)
create mode 100644 drivers/gpu/drm/nouveau/nvkm/engine/disp/gb202.c

--
2.55.0