danos/system/devices
Daniel Samson ec6e888076
display: pace the frame clock by the panel's EDID refresh rate
Both EDID moments the system has are now captured and carried to the
compositor's frame clock:

- EFI: the loader derives refresh from the preferred detailed timing
  (pixel clock / total pixels) while GOP is still alive — the only moment
  it is readable — and hands it through the boot handoff into the
  display0 node's DisplayInfo (new refresh_hz field, 0 = unknown).
- GPU: the virtio-gpu driver derives the same figure from its own EDID
  read and carries it in the attach_scanout announce (request.y).

updateFrameClock() re-derives the interval from the active backend's
info at bring-up and again on every backend change — the boot
framebuffer's clock dies with the GOP floor at upgrade, replaced by the
GPU's rate. Unknown rate defaults to 60 Hz; the result is clamped to
[30, 120] Hz so a mis-parsed EDID can neither starve nor flood the
compositor. Rate only, never phase: without vblank, presents still
free-run (docs/display-v2.md, 'Fenced is not vsync').

Observed in QEMU: OVMF exposes no EDID for the VGA adapter, so the GOP
floor logs 'frame clock 62 Hz (default)' (real firmware does expose it);
the virtio-gpu EDID advertises 75 Hz and the upgrade logs 'frame clock
76 Hz (panel EDID)'. The display kernel test asserts refresh_hz rides
the seeded node; all 7 display QEMU cases pass.
2026-07-21 11:37:29 +01:00
..
aml Add runtime.time, drop demo drivers, harden TSC timekeeping 2026-07-13 11:56:43 +01:00
acpi-ids.zig Name ACPI hardware IDs instead of magic _HID strings 2026-07-11 23:23:16 +01:00
acpi.zig acpi: stop parsing AML in the kernel; power management is userspace's 2026-07-13 23:09:30 +01:00
device-abi.zig display: pace the frame clock by the panel's EDID refresh rate 2026-07-21 11:37:29 +01:00
device-model.zig zig fmt 2026-07-12 16:04:58 +01:00
device-tree.zig Re-organize the source tree as a monorepo mirroring the FHS 2026-07-10 12:55:56 +01:00
pci-class.zig Decode PCI/ACPI device identities and name their class codes as enums 2026-07-13 05:05:25 +01:00
platform.zig acpi: stop parsing AML in the kernel; power management is userspace's 2026-07-13 23:09:30 +01:00
power.zig acpi: stop parsing AML in the kernel; power management is userspace's 2026-07-13 23:09:30 +01:00
usb-abi.zig USB driver stack: xHCI transfers, HID keyboard/mouse, mass storage 2026-07-13 14:11:00 +01:00
usb-ids.zig USB driver stack: xHCI transfers, HID keyboard/mouse, mass storage 2026-07-13 14:11:00 +01:00