mbox series

[v3,00/44] drm/nouveau: initial support for GSP-RM 535.54.04 (and Ada GPUs)

Message ID 20230919220442.202488-1-lyude@redhat.com (mailing list archive)
Headers show
Series drm/nouveau: initial support for GSP-RM 535.54.04 (and Ada GPUs) | expand

Message

Lyude Paul Sept. 19, 2023, 9:55 p.m. UTC
Hey everyone! I'm just going through and rebasing Ben's display patches
so I can push them in just a moment :).

(*the rest of this email can be read in Ben Skegg's voice*)

The primary issue being tackled here is that, for historical reasons (we
didn't know any better / couldn't make it work reliably otherwise), some
operations (SOR routing, DP link training) were performed during the 2nd
HW supervisor interrupt.

We don't have control of the display supervisor when running on top of
RM, so this needed to be untangled and fixed - which, is one of the main
aims of this patch series.

The ordering of this series is pretty important, so take care if/when
backporting patches from it.

Beyond that main goal, various other interfaces have been added or
extended to provide the information that RM will need for its version of
similar interfaces.

Ben Skeggs (43):
  drm/nouveau/devinit/tu102-: remove attempt at loading PreOS
  drm/nouveau/imem: support allocations not preserved across suspend
  drm/nouveau/gr/gf100-: lose contents of global ctxbufs across suspend
  drm/nouveau/mmu/gp100-: always invalidate TLBs at CACHE_LEVEL_ALL
  drm/nouveau/kms/nv50-: fix mst payload alloc fail crashing evo
  drm/nouveau/disp: rearrange output methods
  drm/nouveau/disp: add output detect method
  drm/nouveau/disp: add output method to fetch edid
  drm/nouveau/disp: rename internal output acquire/release functions
  drm/nouveau/disp: shuffle to make upcoming diffs prettier
  drm/nouveau/disp: add acquire_dac()
  drm/nouveau/disp: add acquire_sor/pior()
  drm/nouveau/disp: update SOR routing immediately on acquire()
  drm/nouveau/kms/nv50-: pull some common init out of OR-specific code
  drm/nouveau/kms/nv50-: remove nv_encoder.audio.connector
  drm/nouveau/kms/nv50-: keep output state around until modeset complete
  drm/nouveau/kms/nv50-: move audio enable post-modeset
  drm/nouveau/disp: add output hdmi config method
  drm/nouveau/disp: move hdmi disable out of release()
  drm/nouveau/disp: release outputs post-modeset
  drm/nouveau/disp: remove SOR routing updates from supervisor
  drm/nouveau/disp: add output backlight control methods
  drm/nouveau/disp: add output lvds config method
  drm/nouveau/disp: add hdmi audio hal function
  drm/nouveau/disp: move dp aux pwr method to HAL
  drm/nouveau/disp: add dp aux xfer method
  drm/nouveau/disp: add dp rates method
  drm/nouveau/kms/nv50-: split DP disable+enable into two modesets
  drm/nouveau/kms/nv50-: flush mst disables together
  drm/nouveau/kms/nv50-: fixup sink D3 before tearing down link
  drm/nouveau/disp: add dp train method
  drm/nouveau/disp: move link training out of supervisor
  drm/nouveau/disp: add dp sst config method
  drm/nouveau/disp: add dp mst id get/put methods
  drm/nouveau/disp: move outp/conn construction to chipset code
  drm/nouveau/disp: move outp init/fini paths to chipset code
  drm/nouveau/disp/nv50-: skip DCB_OUTPUT_TV
  drm/nouveau/kms/nv50-: create heads based on nvkm head mask
  drm/nouveau/kms/nv50-: create heads after outps/conns
  drm/nouveau/kms/nv50-: name aux channels after their connector
  drm/nouveau/kms/nv50-: create connectors based on nvkm info
  drm/nouveau/kms/nv50-: create outputs based on nvkm info
  drm/nouveau/kms/nv50-: disable dcb parsing

Lyude Paul (1):
  drm/nouveau/kms: Add INHERIT ioctl to nvkm/nvif for reading IOR state

 drivers/gpu/drm/nouveau/dispnv04/disp.c       |   2 +-
 drivers/gpu/drm/nouveau/dispnv50/disp.c       | 511 +++++++++++-------
 drivers/gpu/drm/nouveau/dispnv50/disp.h       |   6 +-
 drivers/gpu/drm/nouveau/dispnv50/head.h       |   1 +
 drivers/gpu/drm/nouveau/dispnv50/headc57d.c   |  14 +
 drivers/gpu/drm/nouveau/include/nvif/conn.h   |  20 +-
 drivers/gpu/drm/nouveau/include/nvif/if0011.h |  21 +-
 drivers/gpu/drm/nouveau/include/nvif/if0012.h | 249 +++++++--
 drivers/gpu/drm/nouveau/include/nvif/outp.h   |  96 +++-
 .../drm/nouveau/include/nvkm/core/memory.h    |   1 +
 .../drm/nouveau/include/nvkm/subdev/instmem.h |   2 +-
 drivers/gpu/drm/nouveau/nouveau_backlight.c   |  90 +--
 drivers/gpu/drm/nouveau/nouveau_bios.c        |   8 +-
 drivers/gpu/drm/nouveau/nouveau_connector.c   | 252 ++++-----
 drivers/gpu/drm/nouveau/nouveau_connector.h   |   3 +-
 drivers/gpu/drm/nouveau/nouveau_display.c     |   8 +-
 drivers/gpu/drm/nouveau/nouveau_dp.c          | 345 ++++++++++--
 drivers/gpu/drm/nouveau/nouveau_encoder.h     |  30 +-
 drivers/gpu/drm/nouveau/nvif/conn.c           |  36 +-
 drivers/gpu/drm/nouveau/nvif/disp.c           |   2 +-
 drivers/gpu/drm/nouveau/nvif/outp.c           | 412 ++++++++++++--
 drivers/gpu/drm/nouveau/nvkm/core/memory.c    |  15 +-
 .../gpu/drm/nouveau/nvkm/engine/disp/base.c   | 146 +----
 .../gpu/drm/nouveau/nvkm/engine/disp/conn.c   |  10 -
 .../gpu/drm/nouveau/nvkm/engine/disp/conn.h   |   2 -
 drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.c | 362 ++++---------
 .../gpu/drm/nouveau/nvkm/engine/disp/g84.c    |   1 +
 .../gpu/drm/nouveau/nvkm/engine/disp/g94.c    |   1 +
 .../gpu/drm/nouveau/nvkm/engine/disp/ga102.c  |   1 +
 .../gpu/drm/nouveau/nvkm/engine/disp/gf119.c  |   2 +-
 .../gpu/drm/nouveau/nvkm/engine/disp/gk104.c  |   1 +
 .../gpu/drm/nouveau/nvkm/engine/disp/gm107.c  |   1 +
 .../gpu/drm/nouveau/nvkm/engine/disp/gm200.c  |  17 +-
 .../gpu/drm/nouveau/nvkm/engine/disp/gp100.c  |   1 +
 .../gpu/drm/nouveau/nvkm/engine/disp/gt215.c  |  38 ++
 .../gpu/drm/nouveau/nvkm/engine/disp/gv100.c  |   2 +-
 .../gpu/drm/nouveau/nvkm/engine/disp/ior.h    |  15 +-
 .../gpu/drm/nouveau/nvkm/engine/disp/mcp89.c  |   1 +
 .../gpu/drm/nouveau/nvkm/engine/disp/nv50.c   | 182 ++++++-
 .../gpu/drm/nouveau/nvkm/engine/disp/outp.c   | 144 ++++-
 .../gpu/drm/nouveau/nvkm/engine/disp/outp.h   |  43 +-
 .../gpu/drm/nouveau/nvkm/engine/disp/tu102.c  |   1 +
 .../gpu/drm/nouveau/nvkm/engine/disp/uconn.c  |  67 +--
 .../gpu/drm/nouveau/nvkm/engine/disp/uoutp.c  | 460 +++++++++++++---
 .../gpu/drm/nouveau/nvkm/engine/gr/gf100.c    |  10 +-
 .../drm/nouveau/nvkm/subdev/devinit/tu102.c   |  12 +-
 .../drm/nouveau/nvkm/subdev/instmem/base.c    |  19 +-
 .../drm/nouveau/nvkm/subdev/instmem/priv.h    |   1 +
 .../drm/nouveau/nvkm/subdev/mmu/vmmgp100.c    |   2 +-
 .../drm/nouveau/nvkm/subdev/mmu/vmmtu102.c    |   2 +-
 50 files changed, 2461 insertions(+), 1207 deletions(-)

Comments

Timur Tabi Sept. 20, 2023, 9:42 p.m. UTC | #1
On Tue, 2023-09-19 at 17:55 -0400, Lyude Paul wrote:
> Hey everyone! I'm just going through and rebasing Ben's display patches
> so I can push them in just a moment :).
> 
> (*the rest of this email can be read in Ben Skegg's voice*)
> 
> The primary issue being tackled here is that, for historical reasons (we
> didn't know any better / couldn't make it work reliably otherwise), some
> operations (SOR routing, DP link training) were performed during the 2nd
> HW supervisor interrupt.

I understand very little about Nouveau internals (or DRM drivers), so I
can't do a thorough review, but I did look over the patches and provided
some feedback.  

So, for what it's worth,

Reviewed-by: Timur Tabi <ttabi@nvidia.com>