How intel/intel-edge-graphics-driver works
IEGD is a lightweight reference driver for Intel Xe integrated GPUs, with a Linux out-of-tree module as its reference port. Its main workflow begins with the kernel detecting and initializing a device, then exposes IOCTLs for applications to allocate or share buffers, submit GPU work, and configure scanout. GPU execution uses GuC submission; display setup includes protocol-specific link handling and pipe/plane programming. The README also documents PMU utilization and an optional source-bundle configurator. The tree and sampled excerpts support these subsystem boundaries, but not every internal call edge, so uncertain wiring is omitted.
Main entry points: init.c Display bringup · iegd_ioctl.c IOCTL interface · guc_submit.c GuC submission · buffer.c Buffer management
Components 26
Driver interface
- Device lifecycle
ial/iegd.c - PCI matching
ial/iegd_pci.c - IOCTL interface
ial/iegd_ioctl.c - Sysfs interface
ial/iegd_sysfs.c
GPU memory
- Buffer management
hal/buffer.c - Per-process GPU VA
hal/ppgtt.c - Global GPU VA
hal/ggtt.c - Virtual address management
hal/vam.c
GPU execution
- Execution queues
hal/exec_queue.c - GuC control
hal/guc.c - GuC submission
hal/guc_submit.c - Hardware engines
hal/hw_engine.c - Hardware fences
hal/hw_fence.c - Engine utilization
hal/pmu/pmu_engines.c
Display subsystem
- Display bringup
hal/display/init.c - DisplayPort link
hal/display/dp.c - HDMI handling
hal/display/hdmi.c - Display identification
hal/display/edid.c - Display PHY
hal/display/phy.c - Pipe and plane
hal/display/pipe.c
Optional tooling
- Bundle configurator
tools/configurator/server.py - Configured source archive
Other components
- Linux kernel
- User application
- Xe GPU
- Display hardware
Connections 25
- Linux kernel → PCI matching: probes device
- PCI matching → Device lifecycle: initializes
- Linux kernel → Sysfs interface: accesses
- User application → IOCTL interface: issues requests
- IOCTL interface → Buffer management: allocates or imports
- IOCTL interface → Execution queues: manages queues
- IOCTL interface → Display bringup: requests display operations
- Buffer management → Per-process GPU VA: uses address space
- Buffer management → Global GPU VA: binds global mappings
- Per-process GPU VA → Virtual address management: allocates GPU ranges
- Execution queues → GuC submission: submits work
- GuC submission → GuC control: uses GuC control
- GuC submission → Hardware engines: targets engines
- Hardware engines → Global GPU VA: binds status buffers
- Hardware engines → Hardware fences: sets up fence IRQ
- GuC submission → Engine utilization: accounts submissions
- Display bringup → Display identification: reads display data
- Display bringup → DisplayPort link: sets up DP link
- Display bringup → HDMI handling: configures HDMI
- Display bringup → Display PHY: configures PHY
- Display bringup → Pipe and plane: programs pipe
- DisplayPort link → Display hardware: trains link
- HDMI handling → Display hardware: configures link
- User application → Bundle configurator: selects components
- Bundle configurator → Configured source archive: creates archive