Skip to content

Releases: Twilight0/nouveau-dkms

v2.2.3

Choose a tag to compare

@github-actions github-actions released this 27 Oct 14:08

Release v2.2.3: Packaging and code separation

v2.2.2: 256-Byte Render Target Alignment & Stable MMU Recovery

Choose a tag to compare

@github-actions github-actions released this 26 Oct 16:23

Highlights in v2.2.2

  • Fermi 256-Byte Render Target Alignment:
    • Enforces strict 256-byte (0x100) base address alignment in nouveau_bo.c and nouveau_gem.c for Fermi+ color targets.
    • Eliminates PGRAPH DATA_ERROR 00000004 [INVALID_VALUE] on method 0x0804 (NV9097_SET_COLOR_TARGET_B) when modern compositors / Mesa allocate suballocated surfaces.
  • Graceful MMU Recovery:
    • Reverts experimental soft-reset interrupts in favor of solid upstream engine reset, cleanly isolating client faults without freezing the compositor or desktop pipeline.
  • Automated Packages:
    • Prebuilt packages for Arch Linux (.pkg.tar.zst), Debian/Ubuntu (.deb), and Fedora/RHEL (.rpm) attached below with verified checksums.

v2.2.1

Choose a tag to compare

@Twilight0 Twilight0 released this 26 Oct 07:49

Release v2.2.1: Packaging and code separation. Pure DKMS kernel module decoupled from userspace nouveau-utils suite.

v2.2.0 - Zero-Stutter VBlank-Onset Memory Reclocking & Governor 2.0

Choose a tag to compare

@Twilight0 Twilight0 released this 25 Oct 14:35

[2.2.0] — Zero-Stutter VBlank-Onset Memory Reclocking & Governor 2.0

✨ Zero-Stutter VBlank-Onset Memory Reclocking (ramgf100.c)

  • True NV50/GF100 Signed vpos VBlank Onset Sync (gf100_ram_calc_vpos / gf100_ram_wait_vblank):
    • Fixed hardware scanline coordinate bias where NV50/GF100 rgpos (0x616340) counts 0 from VSync onset (0..vblanke is VSync + Back Porch, vblanke+1..vblanks-1 is Active Scanout, and vblanks..vtotal-1 is the 5-line Front Porch).
    • Eliminates timeouts and mid-frame memory retraining during display scanout.
    • Computes signed vpos from vblanke (0x610ae8), vblanks (0x610af0), and vtotal (0x610af8), steps in short 80–150 µs sleeps into the pre-VBlank approach zone, and tight-polls for the exact leading edge of VBlank (vpos == 1077 -> -46).
  • Zero Pre-Trigger Printk Latency & In-VBlank PHY Commit Latch (0x001548):
    • Removed pre-trigger latency between gf100_ram_wait_vblank() and 0x10a084 = cmd. Replaced post-trigger sleep with tight polling so both resident Falcon execution and host 0x001548 PHY timing commit latch complete in ~470–535 µs entirely inside a single VBlank interval.
  • Boot-Time Resident Falcon Pre-Warm (gf100_ram_calc_ddr3):
    • Pre-warms the 896-word resident Falcon microcode executor (fexec_code.inc) during boot initialization so the first P-state transition executes instantly on the sub-millisecond fast-path without a cold PDAEMON reset.

🛡️ Governor Modernization & Zero-Sudo Telemetry (nouveau-dynclockd 2.0, nouveau-ctrl, nouveau-tui)

  • 120 Hz Display Floor Guard (DISPLAY_120HZ_FLOOR=true):
    • Automatically detects active DRM CRTC modes via libdrm.so.2. When high-refresh or high-dot-clock displays (>135 MHz pixel clock, e.g. 1920x1080 @ 120 Hz) are active, clamps idle_floor to 07 (202/324 MHz), matching NVIDIA 390.157 IMP checks (_nv002187kms). Drops to 03 only at low pixel clocks or when DPMS is blanked.
  • Per-Application Profile Engine (/etc/nouveau-dynclockd.d/*.conf):
    • Added drop-in application profile configuration allowing custom P-state targets (e.g. steam = 0f, blender = 10, mpv = 07) with apps.conf.sample.
  • Bidirectional Manual Override Coordination (/run/nouveau/mode) & 20 ms Interruptible Wakeup:
    • Coordinated manual locks between nouveau-ctrl, nouveau-tui, and nouveau-dynclockd without stopping the daemon, keeping thermal runaway protection 100% active.
    • Manual lock requests applied and reflected within ~20–40 ms with zero sudo password prompts for normal users.
  • Unprivileged Telemetry Snapshots & Real-Time TUI Reload:
    • Governor mirrors debugfs pstate and clients into world-readable /run/nouveau/ snapshots. Non-root nouveau-tui and nouveau-ctrl operate with instant refresh and live SIGHUP reload hotkey (R).
  • Hardware GPU Interrupt Tracking & Hysteresis:
    • Reads /proc/interrupts (nvkm) for sub-millisecond GPU load detection, combined with per-PID tick delta verification and PowerMizer hold-down timers (HOLD_0F_SECONDS=8, HOLD_07_SECONDS=5).

v2.1.0

Choose a tag to compare

@Twilight0 Twilight0 released this 04 Oct 19:25

6.18.55 rebase, VRAM telemetry, battery cap, VBlank alignment. See CHANGELOG.md.

v2.0.1 — S3 Suspend Recovery, Cold Boot Clock & PCIe Link Sync

Choose a tag to compare

@Twilight0 Twilight0 released this 19 Sep 06:33

🐛 Bug Fixes & Architecture Refinements in v2.0.1

This release resolves critical hardware synchronization and state-tracking issues across system power states:

1. 🔄 Falcon DDR3 Executor S3 Suspend / Resume Self-Healing

  • Zero-Overhead S3 Resume Handshake Signature Detection:
    • Across system suspend/resume or Falcon hardware resets, PMU IMEM is cleared and SCRATCH0 (0x10a080) drops to 0x00000000.
    • The driver now verifies the resident microcode handshake signature (0xE1EC0001) before submitting fast-path mailbox commands.
    • If the signature is absent, the driver instantly detects the lost resident state, clears fexec_resident_running = false, and falls back to the cold initialization path without waiting for the 2-second fast-path timeout.
  • Subdevice Resume Hook Reset:
    • Automatically resets fexec_resident_running = false inside gf100_ram_init(), ensuring every subdevice re-initialization cleanly refreshes driver state.
  • Fast-Path Timeout Auto-Recovery:
    • On any fast-path timeout or mailbox communication failure, fexec_resident_running is automatically reset to false, allowing subsequent state changes to self-heal and re-initialize via the cold path.

2. ⚡ Cold Boot Clock Desync & Under-the-Carpet Ghost State

  • Resolved Cold Boot Clock Lock:
    • At cold boot, subdevice .clk initializes before .fb and .volt. In upstream Nouveau, nvkm_pstate_prog() cached clk->pstate = pstatei even when memory controller and voltage scaling were skipped.
    • nvkm_pstate_prog() now only commits clk->pstate = pstatei if (fb && fb->ram) are ready, leaving it as -1 otherwise.
    • nvkm_clk_ustate(), nvkm_clk_dstate(), and nvkm_clk_init() now explicitly reset clk->pstate = -1; when state requests occur, guaranteeing that user commands (nouveau-ctrl set 0f) and daemon events will always force hardware clock reprogramming rather than being skipped as cached no-ops.

3. 🔌 Cold Boot PCIe Link Speed Synchronization

  • In nvkm_clk_init(), the driver now detects cold boot (pci->pcie.speed == -1) and automatically synchronizes the initial PCIe link speed and width to match the active boot state (State 07 @ Gen1 2.5 GT/s).
  • Eliminates the mismatch where the PCIe bus link negotiated at Gen2 (5.0 GT/s) while clocks were at standard 2D idle.

v2.0.0 - Full Bidirectional DDR3 Memory Reclocking & Telemetry Suite

Choose a tag to compare

@Twilight0 Twilight0 released this 18 Sep 13:42

[2.0.0] - 2026-09-18

🚀 Major Milestone: Full Bidirectional DDR3 Memory Reclocking & Telemetry Suite

This major release achieves the long-sought milestone of fully working, bidirectional DDR3 memory reclocking (324 MHz ↔ 900 MHz) on NVIDIA Fermi (GF100–GF119) GPUs under Linux, paired with a flicker-free two-stage dynamic governor and a comprehensive telemetry management suite.

🧠 Kernel Module & Custom Falcon Executor Engine

  • Custom Resident Falcon Microcode Executor (ramgf100.c / gf100.fuc3):
    • Completely bypasses the legacy Tesla-era PMU MEMX queue interface (gt215_pmu_send) that previously failed on Fermi with PRIVRING hardware faults.
    • Implements a dedicated resident microcode loop (resident_idle) polling SCRATCH1 (0x10a084), executing bidirectional memory reclocking in sub-millisecond fast-path via MMIO mailboxes.
    • Eliminates destructive PMC hardware resets (0x000200) and IMEM re-uploads during runtime state transitions.
    • Hardware PHY Commit Latch (0x001548 = 0x80000101): Asserts bit-31 commit strobe immediately after DDR3 PHY register writes, eliminating data-eye phase jitter, page-table corruption, and storage-type faults under 3D load.
    • Interrupt & Timer Masking: Masks Falcon periodic timers, watchdogs, and interrupt lines, preventing unhandled double-trap exits into STOPPED (UC=0x10).
    • PMU Falcon Clock Domain Protection: Excludes domain 0x0c (nv_clk_src_pmu) from clock calculation, preventing asynchronous PLL multiplexer switching from glitching the running PDAEMON microcontroller.
  • Synchronous Voltage Regulation (nvkm_volt):
    • Dynamically commands the Fermi PWM voltage controller (0x1373f0) to step core voltage up to factory 1.030 V before entering P-State 0f, and safely steps it down to 0.820 V when downclocking to 07 or 03.
  • Native 120 Hz eDP Display Support:
    • Enables continuous VBlank pacing (vblank_continuous=1) and 6 bpc color clamp for full 119.97 Hz refresh on internal laptop panels.

⚡ Dynamic Frequency Governor (nouveau-dynclockd)

  • Flicker-Free Two-Stage Scaling:
    • Stage 1 (Desktop / Browser / UI): Dynamically scales core/shader between 03 (50 MHz) and 07 (202 MHz) while clamping memory at 324 MHz. Transitions occur without DRAM retiming or scanout delay, achieving 100% flicker-free operation at 120 Hz.
    • Stage 2 (Dedicated 3D Graphics): Automatically boosts to 0f (590 MHz core / 1180 MHz shader / 900 MHz memory @ 1.030 V) when dedicated 3D games, emulators, or benchmarks are launched.
  • Thermal Throttle Protection:
    • Automatically caps maximum GPU clock state to 07 when core temperature reaches throttle limit (default: 80 °C with 5 °C hysteresis).
  • Persistent Configuration:
    • Reads settings from /etc/nouveau-dynclockd.conf with automatic 1-second file mtime change detection and SIGHUP support.
  • Low-Power Startup:
    • Immediately forces low-power idle state 03 upon service startup and boot.

🎮 Management & Telemetry Utilities (nouveau-ctrl & nouveau-tui)

  • Hardware Telemetry Integration:
    • Dell SMM Fan Speed: Real-time RPM reading via platform hardware monitor (dell_smm fan1_input).
    • PCIe Link Telemetry: Real-time PCIe generation and lane width status (2.5 GT/s Gen1 x16 [Max: 5.0 GT/s Gen2 x16]).
    • Colorized Thermal Indicators: Three-tier status coloring (<65 °C Bold Green, 65–75 °C Bold Yellow, >75 °C Bold Red).
    • Runtime Throttle Configuration:
      • CLI: nouveau-ctrl set_throttle_temp <temp>
      • TUI: Press t to type a limit, or [ / ] to adjust interactively in Tab 1.
    • Clean display: Removed all legacy "(target: ...)" references.

🛠️ Reproducible Workflow Tools (tools/)

  • tools/nouveau-fermi-diag.py: Standalone diagnostic tool dumping PCI IDs, VBIOS BIT tables (P, M, U, C), MMIO registers, and DRM clients.
  • tools/sniff-memory-reclock.py: Direct BAR0 memory controller (PFB) and PHY DLL register delta sniffer.
  • tools/run-mmiotrace.sh: Automated kernel MMIO tracing script for proprietary 390.xx driver analysis.

v1.2.0 - nouveau-tui Interactive Management Utility

Choose a tag to compare

@Twilight0 Twilight0 released this 06 Sep 09:33

What's New in v1.2.0

  • nouveau-tui Interactive Curses Dashboard:
    • Pulsemixer-styled multi-tab TUI designed for Wayland & Qtile environments.
    • Tab 1 (P-States): Dynamic core frequency bar charts, live status badges, and one-key locking (Space / Enter, or hotkeys 03, 07, 0f).
    • Tab 2 (Governor): Background nouveau-dynclockd daemon manager (start/stop/restart/auto).
    • Tab 3 (3D Clients): Live DRM client inspection with PIDs and active process names.
    • Tab 4 (Telemetry): Instant hwmon core temperature & core voltage readouts.
  • Packaging & Desktop Integration:
    • Added nouveau-tui to PKGBUILD and .SRCINFO.
    • Integrates seamlessly with floating window managers (Qtile, Sway, etc.).

v1.1.1 - nouveau-ctrl Help Command & UX Improvements

Choose a tag to compare

@Twilight0 Twilight0 released this 05 Sep 12:16

🛠️ What's New in v1.1.1

  • nouveau-ctrl CLI:
    • Added dedicated help command: nouveau-ctrl help and per-command details: nouveau-ctrl help set.
    • Running nouveau-ctrl without arguments now cleanly prints an informative help and examples overview instead of an error.
    • Added command descriptions and syntax overview.

v1.1.0 - Unified Kernel Patch, Optimized Governor & Hardened Defaults

Choose a tag to compare

@Twilight0 Twilight0 released this 04 Sep 18:59

🚀 What's New in v1.1.0

  • Unified Kernel Patch:
    • Folded all previous Python prepare() replacements directly into nouveau-fermi-reclock.patch.
    • Exposes shader clock domain (2x core hot clock) in debugfs.
    • Fixes 0f voltage undervoltage rail (ensures full factory 1.030V).
    • Integrates synthetic OC P-State 0x10 (700/1400/900 @ 1.030V, gated behind NvFermiOC).
    • Added hardware VBlank polling sync before DDR3 MEMX reclocking.
  • Dynamic Clock Daemon (nouveau-dynclockd) Optimization:
    • Replaced expensive /proc/*/maps global process crawling with ultra-fast direct DRM client table tracking (<0.3ms latency).
    • CPU utilization dropped from ~5-6% down to < 0.1%, completely preventing desktop stalls.
    • Added modern compositors and terminals (qtile, swayosd-server, wezterm-gui, etc.) to DESKTOP_CLIENTS for cool and quiet idle at P8 (202 MHz).
  • Safety & Documentation:
    • Reverted nouveau-fermi-reclock.conf active line to safe defaults.
    • Documented display hub clock locking in RECLOCKING_NOTES.md to explain eDP 120Hz link preservation.
    • Cleaned up obsolete benchmarking notes.