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

Mohamed Ahmed <[email protected]>
Newsgroups org.freedesktop.lists.nouveau,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
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/[email protected]/


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

-- 
2.55.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.