[PATCH 0/7] nouveau: assorted display fixes (GB20x, r570 DP_CONFIG_STREAM, HF-EEODB EDIDs)
Mohamed Ahmed <[email protected]>
| Newsgroups | gmane.linux.kernel,gmane.comp.video.dri.devel,gmane.comp.freedesktop.xorg.nouveau |
|---|---|
| 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 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. Patches 1-3 fix HDMI infoframes on GB20x. Blackwell removed the legacy SF vendor-infoframe and GCP packet registers, so the MMIO writes land on dead or moved offsets. Patch 1 adds a vendor infoframe writer for the new layout, patch 2 switches GB20x over to it, and patch 3 corrects the GCP AVMute offsets. Patch 4 fixes DP modesets on r570 firmware. r570 shrank NV0073_CTRL_CMD_DP_CONFIG_STREAM_PARAMS, so every call built against the r535 struct is sent with a wrong paramsSize. Route the .sst/.vcpi paths through per-version RM API hooks built against each firmware's struct. Patch 5 fixes vblank interrupts on GB20x. The vblank enable moved to a second top level FE interrupt enable and fires on a separate low-latency vector that also needs a retrigger write. Without both, heads don't report vblanks. Patch 6 fixes pixel clocks above 2.147GHz on GB20x. HEAD_SET_PIXEL_CLOCK_FREQUENCY carries 31 bits of Hz, and the CA7D class adds FREQUENCY_HI for the upper bits. Program it instead of truncating the clock. Patch 7 converts nouveau's EDID handling to struct drm_edid, reading through drm_edid_read_custom() on the GSP path. HDMI 2.1 sinks that declare their real extension-block count through the EEODB no longer have their EDIDs truncated to the base block's count. Mohamed Ahmed (7): nouveau/disp: add GB20x HDMI vendor infoframe writer nouveau/gsp: fix HDMI vendor infoframes on GB20x nouveau/gsp: fix HDMI GCP AVMute register offsets on GB20x nouveau/gsp: use per-version DP_CONFIG_STREAM params on r570 firmware nouveau/gsp: fix vblank interrupts on GB20x nouveau/dispnv50: program pixel clocks above 2.147GHz on GB20x nouveau: honor HF-EEODB EDIDs by converting to struct drm_edid drivers/gpu/drm/nouveau/dispnv50/disp.c | 2 +- drivers/gpu/drm/nouveau/dispnv50/headca7d.c | 21 ++- .../drm/nouveau/include/nvhw/class/clca7d.h | 4 + drivers/gpu/drm/nouveau/nouveau_connector.c | 95 ++++++++++--- drivers/gpu/drm/nouveau/nouveau_connector.h | 7 +- .../gpu/drm/nouveau/nvkm/engine/disp/Kbuild | 1 + .../gpu/drm/nouveau/nvkm/engine/disp/gb202.c | 62 ++++++++ .../gpu/drm/nouveau/nvkm/engine/disp/ior.h | 2 + .../nouveau/nvkm/subdev/gsp/rm/r535/disp.c | 132 +++++++++++++++++- .../nouveau/nvkm/subdev/gsp/rm/r570/disp.c | 64 +++++++++ .../drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c | 8 ++ .../nvkm/subdev/gsp/rm/r570/nvrm/disp.h | 2 + .../gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h | 5 + 13 files changed, 371 insertions(+), 34 deletions(-) create mode 100644 drivers/gpu/drm/nouveau/nvkm/engine/disp/gb202.c -- 2.55.0