Skip to content

feat(nvidia): required each active head's link to be a serial link - #514

Merged
FlareCoding merged 1 commit into
pr/nvidia-window-surfacesfrom
pr/nvidia-head-serial-links
Oct 29, 2026
Merged

FlareCoding merged 1 commit into
pr/nvidia-window-surfacesfrom
pr/nvidia-head-serial-links

Conversation

@FlareCoding

@FlareCoding FlareCoding commented Oct 29, 2026 •

Copy link
Copy Markdown
Owner

Summary

Bring-up refuses as malformed an active head (one of the display engine's units that each generate one monitor's timing, left driving a monitor by the boot firmware) whose link is not one of the chip's serial links (NVIDIA's SORs, the units each driving one DisplayPort, HDMI or DVI connector), so a board whose firmware lit a head through another kind of link (a parallel input output resource or PIOR, a display serial interface or DSI, or an analog output resource or DAC) or through a serial link at index 4 or past on GA102 fails attach() with ERR_BAD_MESSAGE and keeps its boot framebuffer, where NVIDIA's driver goes on. The reason lands in the next PR, whose shutdown update stops each active head by writing its link's control, which must not name a link past the chip's serial links.

Changes

  • The chip table gives each chip's serial links: chip_display::serial_link_count (chip.h, chip.cpp) is 4 on GA102 (on the RTX 3080 the firmware answers its DisplayPort capabilities request, DP_GET_CAPS, for four SORs), and a static assertion keeps every chip's count within SERIAL_LINKS_MAX, the 8 NVIDIA's driver allows (NV_EVO_MAX_ORS).
  • An active head's link must be one of them: read_active_heads (display_active_heads.cpp) takes the count from display_engine::set_up and refuses with ERR_BAD_MESSAGE a reply of display common (the firmware's object for the display's connectors) that names, for a head's display id, a link of a type other than NVIDIA's serial output resource (rm::OUTPUT_RESOURCE_TYPE_SERIAL, 2) or an index at or past the count. It logs the link's index and type with the head and its display id and leaves the caller's heads as they were.
  • Departure, links that are not serial links: NVIDIA's driver goes on with a head lit through a PIOR or a DSI, which it drives, and only asserts on a DAC's, where this driver refuses all three, since it drives serial links alone.
  • Card: on the RTX 3080, run land-shutdown-update-v6-c1-card-1, a boot of f0d8a32, an earlier version whose kernel, stripped of debug information, is byte-identical to f0cf505's, logged nvidia: head 0 shows display id 0x100, which is output 0, through link 0 of NVIDIA's output resource type 2, then head 0 as the boot head owning window 0, and ended bring-up with the driver attached and 0 IOMMU or PCIe faults on the host.
  • Tests: nvidia_display_active_heads checks that a link naming a DAC, a PIOR, a DSI or a type NVIDIA's driver lacks, or a serial link at index 4, 256, 2147483647 or 4294967294, is refused as malformed with a crossbar, each logging the link's index and type, with no later request and the caller's heads kept, while its other tests and the display engine's give the chip 4 serial links.
  • Checked by no test: GA102's count of 4, which only the card's boot exercises, checking link 0 against it.

@cursor

cursor Bot commented Oct 29, 2026

Copy link
Copy Markdown

Current version of PR was reviewed by /review-bugbot with additional instructions on Oct 29, 06:20. It flagged 0 findings.

Bugbot on commit f0d8a32 is skipped.

A link reply naming anything but one of the chip's serial links is
refused as malformed, since detaching an active head writes its link's
control, which must not fall past the chip's links.
@FlareCoding
FlareCoding force-pushed the pr/nvidia-head-serial-links branch from f0d8a32 to f0cf505 Compare October 29, 2026 07:47
@FlareCoding
FlareCoding added this pull request to stack #519 October 29, 2026 17:48
@FlareCoding
FlareCoding merged commit 3cf7878 into master Oct 29, 2026
11 checks passed
@FlareCoding
FlareCoding deleted the pr/nvidia-head-serial-links branch October 29, 2026 17:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant