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

From: lyude

Date: Fri Aug 21 2026 - 18:09:24 EST


Thinking about it more - we should probably cc patches 1-8 to stable.
Mind doing that on the next respin?

(unsure if you have done this before or not, but
https://drm.pages.freedesktop.org/maintainer-tools/committer/getting-started.html
dim is a good tool for fixes, if you have the commit a patch fixes you
can just run `dim fixes $COMMIT` and it will spit out a tag + some CCs.
I usually drop all but the stable cc, which gets a nice little comment
added on the side indicating which kernel version to backport against.

On Thu, 2026-08-20 at 20:49 +0400, Mohamed Ahmed wrote:
> 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 v1 review asked for the RM vs register programming split to be
> made
> explicit instead of growing more per-chip code inside the RM layer,
> so
> patches 1-3 do that first. No functional change, and then each GB20x
> fix
> (patches 4-8) supplies its hook from a new engine/disp/gb202.c.
>
> Changes in v2:
> - Rebased onto drm-misc-next.
>
> - New patches 1-3: move the GSP path's direct MMIO helpers to
>   engine/disp/ and route them through a per-chip nvkm_disp_func.gsp
> hook
>   table. GB20x now has its own gb202_disp_new() instead of display-
> class
>   checks in rm/r535/disp.c.
>
> - Patch 4 (was 1+2): merged. Dropped a stray .frl_train reference
> that
>   broke the build, no longer drops .scdc, and fixed an undefined
> shift
>   when packing byte 3 of each infoframe data word.
>
> - Patch 5 (was 3): the GCP subpack write is now a masked write so
>   SB1_CTRL keeps its hardware-controlled default.
>
> - Patch 6 (was 4): the vcpi hook returns its control status like the
>   other RM API entries instead of WARN_ONs under the HAL.
>
> - New patch 7: the head-state readback fix is split out. The core
> channel
>   state mirror uses a 0x800 per-head stride on GB20x, fixing scanout
> pos
>   and timings readback for heads >= 1.
>
> - Patch 8 (was 5): reworked onto the new hook table. The low-latency
>   vector is exposed as a second DISP interrupt instance by the r570
>   engine index translation and re-armed after servicing.
>
> - Patch 9 (was 6): the two HI methods are pushed as one method pair,
> and
>   the class-header defines stay offset-sorted.
>
> - Patch 10 (was 7): OF EDIDs now go through
> drm_edid_connector_update(),
>   and all firmware provided EDIDs (OF, ACPI, VBIOS embedded) are
>   validated with drm_edid_valid(). ACPI reads are bounded by the
> length
>   _DDC actually returned. Fixed a runtime-PM reference leak when the
> RM
>   EDID read fails. No raw struct edid is kept anymore and all the old
>   raw struct edid consumers are converted to the new API (the SPWG
>   dual-link byte is cached at EDID-set time as there is no new drm
> API
>   alternative for it). get_modes() re-syncs the EDID property only
> when
>   the probe helper cleared it.
>
> - Commit messages reworded throughout.
>
> 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        |  21 +-
>  drivers/gpu/drm/nouveau/nouveau_acpi.h        |  10 +-
>  drivers/gpu/drm/nouveau/nouveau_connector.c   | 147 ++++++++++----
>  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  |  16 +-
>  .../gpu/drm/nouveau/nvkm/engine/disp/gb202.c  | 192
> ++++++++++++++++++
>  .../gpu/drm/nouveau/nvkm/engine/disp/head.h   |   3 +
>  .../gpu/drm/nouveau/nvkm/engine/disp/ior.h    |   1 +
>  .../gpu/drm/nouveau/nvkm/engine/disp/priv.h   |  20 ++
>  .../gpu/drm/nouveau/nvkm/engine/disp/tu102.c  |  81 +++++++-
>  .../nouveau/nvkm/subdev/gsp/rm/r535/disp.c    | 121 ++++++-----
>  .../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, 637 insertions(+), 113 deletions(-)
>  create mode 100644 drivers/gpu/drm/nouveau/nvkm/engine/disp/gb202.c