Repository navigation
Releases: Twilight0/nouveau-dkms
Releases · Twilight0/nouveau-dkms
Release list
v2.2.3
v2.2.2: 256-Byte Render Target Alignment & Stable MMU Recovery
Highlights in v2.2.2
- Fermi 256-Byte Render Target Alignment:
- Enforces strict 256-byte (
0x100) base address alignment innouveau_bo.candnouveau_gem.cfor Fermi+ color targets. - Eliminates PGRAPH
DATA_ERROR 00000004 [INVALID_VALUE]on method0x0804(NV9097_SET_COLOR_TARGET_B) when modern compositors / Mesa allocate suballocated surfaces.
- Enforces strict 256-byte (
- 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.
- Prebuilt packages for Arch Linux (
v2.2.1
v2.2.0 - Zero-Stutter VBlank-Onset Memory Reclocking & Governor 2.0
[2.2.0] — Zero-Stutter VBlank-Onset Memory Reclocking & Governor 2.0
✨ Zero-Stutter VBlank-Onset Memory Reclocking (ramgf100.c)
- True NV50/GF100 Signed
vposVBlank Onset Sync (gf100_ram_calc_vpos/gf100_ram_wait_vblank):- Fixed hardware scanline coordinate bias where NV50/GF100
rgpos(0x616340) counts0from VSync onset (0..vblankeis VSync + Back Porch,vblanke+1..vblanks-1is Active Scanout, andvblanks..vtotal-1is the 5-line Front Porch). - Eliminates timeouts and mid-frame memory retraining during display scanout.
- Computes signed
vposfromvblanke(0x610ae8),vblanks(0x610af0), andvtotal(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).
- Fixed hardware scanline coordinate bias where NV50/GF100
- Zero Pre-Trigger Printk Latency & In-VBlank PHY Commit Latch (
0x001548):- Removed pre-trigger latency between
gf100_ram_wait_vblank()and0x10a084 = cmd. Replaced post-trigger sleep with tight polling so both resident Falcon execution and host0x001548PHY timing commit latch complete in ~470–535 µs entirely inside a single VBlank interval.
- Removed pre-trigger latency between
- 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.
- Pre-warms the 896-word resident Falcon microcode executor (
🛡️ 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, clampsidle_floorto07(202/324 MHz), matching NVIDIA390.157IMP checks (_nv002187kms). Drops to03only at low pixel clocks or when DPMS is blanked.
- Automatically detects active DRM CRTC modes via
- 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) withapps.conf.sample.
- Added drop-in application profile configuration allowing custom P-state targets (e.g.
- Bidirectional Manual Override Coordination (
/run/nouveau/mode) & 20 ms Interruptible Wakeup:- Coordinated manual locks between
nouveau-ctrl,nouveau-tui, andnouveau-dynclockdwithout stopping the daemon, keeping thermal runaway protection 100% active. - Manual lock requests applied and reflected within ~20–40 ms with zero
sudopassword prompts for normal users.
- Coordinated manual locks between
- Unprivileged Telemetry Snapshots & Real-Time TUI Reload:
- Governor mirrors debugfs
pstateandclientsinto world-readable/run/nouveau/snapshots. Non-rootnouveau-tuiandnouveau-ctrloperate with instant refresh and liveSIGHUPreload hotkey (R).
- Governor mirrors debugfs
- 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).
- Reads
v2.1.0
v2.0.1 — S3 Suspend Recovery, Cold Boot Clock & PCIe Link Sync
🐛 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 to0x00000000. - 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.
- Across system suspend/resume or Falcon hardware resets, PMU IMEM is cleared and
- Subdevice Resume Hook Reset:
- Automatically resets
fexec_resident_running = falseinsidegf100_ram_init(), ensuring every subdevice re-initialization cleanly refreshes driver state.
- Automatically resets
- Fast-Path Timeout Auto-Recovery:
- On any fast-path timeout or mailbox communication failure,
fexec_resident_runningis automatically reset tofalse, allowing subsequent state changes to self-heal and re-initialize via the cold path.
- On any fast-path timeout or mailbox communication failure,
2. ⚡ Cold Boot Clock Desync & Under-the-Carpet Ghost State
- Resolved Cold Boot Clock Lock:
- At cold boot, subdevice
.clkinitializes before.fband.volt. In upstream Nouveau,nvkm_pstate_prog()cachedclk->pstate = pstateieven when memory controller and voltage scaling were skipped. nvkm_pstate_prog()now only commitsclk->pstate = pstateiif(fb && fb->ram)are ready, leaving it as-1otherwise.nvkm_clk_ustate(),nvkm_clk_dstate(), andnvkm_clk_init()now explicitly resetclk->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.
- At cold boot, subdevice
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 (State07@ 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
[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) pollingSCRATCH1(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.
- Completely bypasses the legacy Tesla-era PMU MEMX queue interface (
- 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-State0f, and safely steps it down to 0.820 V when downclocking to07or03.
- Dynamically commands the Fermi PWM voltage controller (
- 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.
- Enables continuous VBlank pacing (
⚡ Dynamic Frequency Governor (nouveau-dynclockd)
- Flicker-Free Two-Stage Scaling:
- Stage 1 (Desktop / Browser / UI): Dynamically scales core/shader between
03(50 MHz) and07(202 MHz) while clamping memory at324 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 MHzcore /1180 MHzshader /900 MHzmemory @ 1.030 V) when dedicated 3D games, emulators, or benchmarks are launched.
- Stage 1 (Desktop / Browser / UI): Dynamically scales core/shader between
- Thermal Throttle Protection:
- Automatically caps maximum GPU clock state to
07when core temperature reaches throttle limit (default:80 °Cwith5 °Chysteresis).
- Automatically caps maximum GPU clock state to
- Persistent Configuration:
- Reads settings from
/etc/nouveau-dynclockd.confwith automatic 1-second file mtime change detection andSIGHUPsupport.
- Reads settings from
- Low-Power Startup:
- Immediately forces low-power idle state
03upon service startup and boot.
- Immediately forces low-power idle state
🎮 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
tto type a limit, or[/]to adjust interactively in Tab 1.
- CLI:
- Clean display: Removed all legacy "(target: ...)" references.
- Dell SMM Fan Speed: Real-time RPM reading via platform hardware monitor (
🛠️ 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
What's New in v1.2.0
nouveau-tuiInteractive 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 hotkeys03,07,0f). - Tab 2 (Governor): Background
nouveau-dynclockddaemon manager (start/stop/restart/auto). - Tab 3 (3D Clients): Live DRM client inspection with PIDs and active process names.
- Tab 4 (Telemetry): Instant
hwmoncore temperature & core voltage readouts.
- Packaging & Desktop Integration:
- Added
nouveau-tuitoPKGBUILDand.SRCINFO. - Integrates seamlessly with floating window managers (Qtile, Sway, etc.).
- Added
v1.1.1 - nouveau-ctrl Help Command & UX Improvements
🛠️ What's New in v1.1.1
nouveau-ctrlCLI:- Added dedicated
helpcommand:nouveau-ctrl helpand per-command details:nouveau-ctrl help set. - Running
nouveau-ctrlwithout arguments now cleanly prints an informative help and examples overview instead of an error. - Added command descriptions and syntax overview.
- Added dedicated
v1.1.0 - Unified Kernel Patch, Optimized Governor & Hardened Defaults
🚀 What's New in v1.1.0
- Unified Kernel Patch:
- Folded all previous Python
prepare()replacements directly intonouveau-fermi-reclock.patch. - Exposes
shaderclock domain (2x core hot clock) in debugfs. - Fixes
0fvoltage undervoltage rail (ensures full factory 1.030V). - Integrates synthetic OC P-State
0x10(700/1400/900 @ 1.030V, gated behindNvFermiOC). - Added hardware VBlank polling sync before DDR3 MEMX reclocking.
- Folded all previous Python
- Dynamic Clock Daemon (
nouveau-dynclockd) Optimization:- Replaced expensive
/proc/*/mapsglobal 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.) toDESKTOP_CLIENTSfor cool and quiet idle at P8 (202 MHz).
- Replaced expensive
- Safety & Documentation:
- Reverted
nouveau-fermi-reclock.confactive line to safe defaults. - Documented display hub clock locking in
RECLOCKING_NOTES.mdto explain eDP 120Hz link preservation. - Cleaned up obsolete benchmarking notes.
- Reverted