<feed xmlns='http://www.w3.org/2005/Atom'>
<title>open-iov.git/kernel/include/gsp_display_engine.h, branch master</title>
<subtitle>Open-IOV vGPU-IO: host-side GSP emulation for unmodified NVIDIA guest drivers
</subtitle>
<id>https://git.vgpu.io/open-iov.git/atom?h=master</id>
<link rel='self' href='https://git.vgpu.io/open-iov.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/'/>
<updated>2026-11-08T10:57:26+00:00</updated>
<entry>
<title>vgsp-disp: resolve the notifier via the announced display instance memory</title>
<updated>2026-11-08T10:57:26+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-11-08T10:57:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=7c7d4c15a09556ff79c19c8d4890f25af43e531d'/>
<id>urn:sha1:7c7d4c15a09556ff79c19c8d4890f25af43e531d</id>
<content type='text'>
The guest announces the display instance-memory block (8 KB
context-DMA hash table + entries, vidmem PA 0x1fff0000 on r1627) via
NV2080_CTRL_CMD_INTERNAL_DISPLAY_WRITE_INST_MEM (0x20800a49), but the
engine ignored it and scanned its FB shadow blindly, never finding the
hash entry - so SET_NOTIFIER_DMA handle 0x10013 resolved to pa=0 and
UPDATE never wrote FINISHED (r1627: UPDATE armed=1 notifier=0x0/0).
Handle 0xa49, record pa/size/address space per guest, read the block
through the FB shadow (or guest RAM for sysmem), and parse the hash
table from the announced location with bounded diagnostics.
</content>
</entry>
<entry>
<title>vgsp-disp: host-side EVO display engine (channels, push buffer, notifier, raster)</title>
<updated>2026-11-07T23:44:21+00:00</updated>
<author>
<name>Arthur Hanson Rasmusson</name>
<email>arthur@vgpu.io</email>
</author>
<published>2026-11-07T23:44:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vgpu.io/open-iov.git/commit/?id=035d033c5a047e395a7b06bceea1dc5b594c3b90'/>
<id>urn:sha1:035d033c5a047e395a7b06bceea1dc5b594c3b90</id>
<content type='text'>
The guest nvidia-modeset drives the display through per-channel NV-DMA
push buffers kicked via the BAR0 UDISP control windows.  Emulate that
engine contract host-side, unmodified guest:

- channel registration: display-channel RM objects (core 0xc57d, window
  0xc57e, cursor 0xc57b, 0xc57a) are noted from the alloc stream, and the
  internal control NV2080_CTRL_CMD_INTERNAL_DISPLAY_CHANNEL_PUSHBUFFER
  (0x20800a58) records each push buffer (guest PA, size, class,
  instance, validity);
- PUT polling + GET publication in the channel control pages (core
  0x680000, window 0x690000+n*0x1000, cursor 0x6D8000+n*0x1000);
- NV-DMA method parser (METHOD/ONE_INC/NONINC/JUMP/SET_SUBDEVICE_MASK)
  with the wrap-JUMP follow;
- completion: SET_CONTEXT_DMA_NOTIFIER / SET_NOTIFIER_CONTROL tracking,
  exact notifier-surface resolution through the display instance hash
  table (no heuristic writes), NV_DISP_NOTIFIER FINISHED on UPDATE
  (0x200), and the channel completion event post;
- free-running 1080p60 raster line for NVC57E_GET_LINE.

All effects are behind independent knobs (disp_engine, disp_finish,
disp_vblank, disp_events, disp_notifier_pa) with verbose diagnostics
(disp_dbg, disp_dump), so the previous behaviour stays one load away.
</content>
</entry>
</feed>
