[EN/DE] Framework 16: Visual freezes on Cinnamon/X11 (Idle & Load)

[EN/DE] Framework 16: Visual freezes on Cinnamon/X11 (Idle & Load) - SOLVED

The Solution (Quick Fix)

The root cause is unstable PCIe Link Power Management (ASPM/L1 Substates). To stabilize the system, specific kernel parameters are required:

  1. Edit /etc/default/grub and update the boot line:
    GRUB_CMDLINE_LINUX_DEFAULT="... amdgpu.gpu_recovery=1 pcie_port_pm=off amd_pstate=active iommu=pt"
  2. Run sudo update-grub and reboot.

Searchable Error Logs

If you see these errors in dmesg or journalctl, this fix is for you:

Scenario A: Video Stream / Idle (Flip Timeout)

Click to view Error Logs
[drm:amdgpu_job_timedout [amdgpu]] *ERROR* ring gfx_0.0.0 timeout
[drm:amdgpu_dm_atomic_commit_tail [amdgpu]] *ERROR* Waiting for fences timed out!
amdgpu 0000:c4:00.0: [drm] *ERROR* [CRTC:79:crtc-0] flip_done timed out

Scenario B: High Load / PCIe Sync

Click to view Error Logs
amdgpu: [drm] Skip scheduling IBs!
amdgpu 0000:03:00.0: amdgpu: GPU reset begin!
pcieport 0000:00:01.1: PCIe Bus Error: severity=Corrected, type=Physical Layer

Scenario C: General Display Hang

Click to view Error Logs
amdgpu 0000:03:00.0: amdgpu: [drm] Cannot find any crtc or sizes

Technical Specs / Technische Daten

  • Laptop: Framework 16 (AMD Ryzen™ 7040 Series)
  • OS: Debian 13 (Trixie) - Fresh install 2026-02-03
  • Kernel: 6.12.63+deb13-amd64
  • Desktop: Cinnamon (X11) / SDDM
  • BIOS: 4.03 (Updated on 2026-02-12, coming from 3.05)
  • Firmware: Latest upstream amdgpu binaries from kernel.org.

[EN] Detailed Report: 50 Days of Troubleshooting

Summary

Hello Framework Community,

I’ve been fighting random freezes for over a month. In my case, it was a combination of Cinnamon, X11, and PCIe Bus power management.

The Backstory: Thermals vs. Stability
It started on Debian 12. The system was stable but had thermal issues (emergency shutdowns under full load). After cleaning the device, the thermal shutdowns persisted. To better manage power states and implement a 90°C limit via the kernel/P-states, I switched to Debian 13 (Trixie) on 2026-02-03. The thermal issue was solved, but this is exactly when the freezing started.

The Symptoms
The screen would suddenly freeze, but the system remained “alive” in the background:

  • Interaction: The mouse cursor often still moved and changed shape, and clicks still triggered actions. I could even blindly type messages into a Twitch chat and read them simultaneously on my phone.
  • Background: SSH access was stable. Heavy terminal workloads continued to run and finished without errors.
  • Variations: Sometimes the freeze happened during the screensaver – the frozen clock was a huge help for log analysis. Switching to TTY3 (CTRL+ALT+F3) was always possible.

The Desperate Search

  1. iGPU Thermal Load: Since the CPU was previously “boiling” at 100°C, I suspected iGPU failures. Setting a 90°C limit in BIOS didn’t help.
  2. GPU Sleep: I suspected the GPUs weren’t waking up fast enough from sleep modes.
  3. BIOS & Input Devices (2026-02-12): As a desperate measure, I updated the BIOS from 3.05 to 4.03 and updated the keyboard/numpad firmware. No effect.

The Breakthrough: The PCIe Bus
Since switching to TTY3 always worked, I could rule out a hardware defect. The focus shifted to the bridge between them: the PCIe bus.

Result
Since applying pcie_port_pm=off, amd_pstate=active, and iommu=pt, my system has been running absolutely stable for 4 days. Previously, a freeze within 24 hours was guaranteed.


[DE] AusfĂĽhrlicher Bericht: 50 Tage Fehlersuche

Zusammenfassung

Hallo liebe Framework-Gemeinschaft,

ich habe über einen Monat lang gegen willkürliche Freezes gekämpft. In meinem Fall war es eine tückische Kombination aus Cinnamon, X11 und dem Power-Management des PCIe-Bus.

Die Vorgeschichte: Thermik vs. Stabilität
Angefangen hat alles unter Debian 12. Das System lief stabil, hatte aber thermische Notabschaltungen unter Volllast. Um das Power-Management besser zu verwalten und die 90°C-Bremse via Kernel umzusetzen, entschied ich mich am 03.02.2026 für den Wechsel auf Debian 13 (Trixie). Das thermische Problem war gelöst – doch genau hier begann das Freezing-Thema.

Die Symptome
Der Bildschirm fror ein, aber das System “lebte” weiter:

  • Interaktion: Mauszeiger beweglich, Klicks lösten Aktionen aus. Ich konnte blind Nachrichten in einen Twitch-Chat tippen und am Handy mitlesen.
  • Hintergrund: SSH stabil, Workloads liefen fehlerfrei weiter.
  • Variationen: Freezes im Bildschirmschoner halfen durch die Uhrzeit bei der Log-Analyse. Wechsel auf TTY3 (STRG+ALT+F3) war immer möglich.

Die Fehlersuche

  1. iGPU Last: Vermutung von Aussetzern bei Hitze. Limitierung auf 90°C brachte keine Besserung.
  2. GPU-Sleep: Verdacht, dass Karten nicht schnell genug aufwachen.
  3. BIOS & Eingabegeräte (12.02.2026): Als Verzweiflungstat BIOS-Update von 3.05 auf 4.03 und Tastatur- sowie Nummernblock-Firmware eingespielt. Ohne Effekt.

Der Durchbruch: Der PCIe-Bus
Da TTY3 immer funktionierte, schloss ich einen Grafik-Hardwaredefekt aus. Der Fokus rĂĽckte auf die Kommunikation: den PCIe-Bus.

Ergebnis
Mit pcie_port_pm=off, amd_pstate=active und iommu=pt arbeitet mein System seit 4 Tagen absolut stabil. Zuvor war ein Freeze innerhalb von 24 Stunden garantiert – mal nach 2, mal nach 18 Stunden.

Technical Appendix / Technischer Anhang

Click to view Bridge Status

Bridge Status (sudo lspci -vv -s 00:01.1):
Verified disabled L1 substates (minus sign -):
L1SubCtl1: PCI-PM_L1.2- PCI-PM_L1.1- ASPM_L1.2- ASPM_L1.1-

Emergency Reset Script (via TTY):

#!/bin/bash
# dGPU entfernen und neu einlesen
# Remove and re-read dGPU
echo 1 | sudo tee /sys/bus/pci/devices/0000:03:00.0/remove
sleep 2
echo 1 | sudo tee /sys/bus/pci/rescan
sudo systemctl restart sddm

Update: Freeze after 6 days (Flip-Done Timeout)

I was really convinced that the search was over. After 4 days without a single freeze, I felt confident enough to share my solution with the community, hoping to help others with the same issue. I am very sorry to report that the problem is not yet fully resolved, as the system froze again after nearly 6 days of uptime.

The symptoms remain identical, but the interval has increased significantly.

New Error Log (2026-03-05)
[Do Mär  5 20:25:30 2026] [drm:amdgpu_dm_atomic_commit_tail [amdgpu]] *ERROR* Waiting for fences timed out!
[Do Mär  5 20:25:35 2026] amdgpu 0000:c4:00.0: [drm] *ERROR* [CRTC:79:crtc-0] flip_done timed out

Next Step: Disabling Scatter/Gather (S/G)

Since the PCIe power management fix only delayed the issue, I am now targeting a known bug in the Ryzen 7040 series memory handling (especially under X11/Cinnamon).

Action:
I added amdgpu.sg_display=0 to my kernel parameters to disable Scatter/Gather display buffers, which is a frequent culprit for these specific flip timeouts on Framework systems.

New GRUB string:
GRUB_CMDLINE_LINUX_DEFAULT="... amdgpu.gpu_recovery=1 pcie_port_pm=off amd_pstate=active iommu=pt amdgpu.sg_display=0"


Update: Freeze nach 6 Tagen (Flip-Done Timeout)

Ich war wirklich der festen Überzeugung, dass die Suche beendet sei. Nachdem der Fehler über 4 Tage nicht mehr aufgetreten war, war ich mir sicher genug, die Lösung mit der Community zu teilen, falls noch jemand mit den gleichen Problemen kämpft. Es tut mir sehr leid, dass ich nun berichten muss, dass das Thema doch noch nicht abgeschlossen ist. Das System ist nach fast 6 Tagen Laufzeit erneut eingefroren.

Die Symptome sind identisch, aber der zeitliche Abstand zwischen den Fehlern hat sich immerhin deutlich vergrößert.

New Error Log (2026-03-05)
[Do Mär  5 20:25:30 2026] [drm:amdgpu_dm_atomic_commit_tail [amdgpu]] *ERROR* Waiting for fences timed out!
[Do Mär  5 20:25:35 2026] amdgpu 0000:c4:00.0: [drm] *ERROR* [CRTC:79:crtc-0] flip_done timed out

Nächster Schritt:
Da die PCIe-Parameter allein nicht ausgereicht haben, gehe ich nun an das Speicher-Management der iGPU. Ein bekanntes Problem bei der Ryzen 7040 Serie unter Linux ist das “Scatter/Gather”-Display-Verfahren, das oft zu genau diesen Timeouts führt.

Aktion:
Ich habe amdgpu.sg_display=0 zu den Kernel-Parametern hinzugefügt. Damit wird die Puffer-Verwaltung für das Display stabilisiert (auf Kosten einer minimal höheren Speicherfragmentierung).

Neue GRUB-Zeile:
GRUB_CMDLINE_LINUX_DEFAULT="... amdgpu.gpu_recovery=1 pcie_port_pm=off amd_pstate=active iommu=pt amdgpu.sg_display=0"

[EN] Update: Desktop Environment and Display Server Ruled Out

Summary of Latest Findings

After intensive testing under KDE Plasma (Wayland), it is now confirmed: the freezes are independent of the chosen desktop environment or display server. The issue persists identically under Wayland, which finally shifts the troubleshooting focus to the kernel driver (amdgpu) and hardware communication (PCIe/iGPU).

  • Observation: Even in a pure Wayland session, the same “visual freezes” occur during high CPU load or while idle. The mouse cursor often remains movable, but the entire screen content stops updating.
  • Journal Error Messages (Wayland/Kernel): The logs show that even under Wayland, the kernel-level DRM (Direct Rendering Manager) fails with a timeout during a page flip. This confirms the issue is located within the amdgpu driver stack rather than the display server.
  • Log Comparison: The core error messages remain consistent across all desktop environments:
    • [drm:amdgpu_dm_atomic_commit_tail [amdgpu]] *ERROR* Waiting for fences timed out!
    • amdgpu 0000:c4:00.0: [drm] *ERROR* [CRTC:88:crtc-2] flip_done timed out
  • Conclusion: Since switching the entire graphics stack (from X11/Cinnamon to Wayland/KDE) did not change the failure symptoms, software bugs within the desktop environment can be ruled out. The focus is now back on kernel parameters (sg_display, pcie_port_pm) and firmware interaction.

[DE] Update: Desktop-Umgebung und Display-Server als Ursache ausgeschlossen

Zusammenfassung der neuesten Erkenntnisse

Nach intensiven Tests unter KDE Plasma (Wayland) steht fest: Die Freezes sind unabhängig von der gewählten Desktop-Umgebung oder dem Display-Server. Das Problem tritt unter Wayland identisch auf, was die Fehlersuche nun endgültig auf die Ebene des Kernel-Treibers (amdgpu) und die Hardware-Kommunikation (PCIe/iGPU) verschiebt.

  • Beobachtung: Selbst in einer reinen Wayland-Sitzung treten bei hoher CPU-Last oder im Idle dieselben “Visual Freezes” auf. Der Mauszeiger bleibt oft beweglich, aber der gesamte Bildinhalt friert ein.
  • Fehlermeldungen im Journal (Wayland/Kernel): Die Logs zeigen, dass auch unter Wayland der DRM-Stack (Direct Rendering Manager) auf Kernel-Ebene mit einem Timeout beim Pageflip scheitert. Dies bestätigt, dass der Fehler im amdgpu-Treiberstack liegt und nicht im Display-Server.
  • Vergleich der Logs: Die Kernfehlermeldungen bleiben ĂĽber alle Desktop-Umgebungen hinweg konsistent:
    • [drm:amdgpu_dm_atomic_commit_tail [amdgpu]] *ERROR* Waiting for fences timed out!
    • amdgpu 0000:c4:00.0: [drm] *ERROR* [CRTC:88:crtc-2] flip_done timed out
  • Fazit: Da der komplette Wechsel des Grafik-Stacks (von X11/Cinnamon zu Wayland/KDE) keine Ă„nderung am Fehlerbild bewirkt hat, können Software-Bugs innerhalb der Desktop-Umgebung ausgeschlossen werden. Der Fokus liegt nun wieder auf den Kernel-Parametern (sg_display, pcie_port_pm) und der Firmware-Interaktion.

Update: Technical Report: iGPU Timeout Analysis & Recovery under Sustained Load

1. System Configuration & Environment

To eliminate software-side interference and power management issues as potential causes, I operated the system with specific kernel parameters and custom process prioritization.

GRUB Configuration

GRUB_CMDLINE_LINUX_DEFAULT="... amdgpu.gpu_recovery=1 amdgpu.sg_display=0 pcie_port_pm=off amdgpu.psr=0 idle=nomwait"

  • gpu_recovery=1: Enables the driver’s autonomous hardware reset mechanism.
  • sg_display=0: Disables Scatter/Gather features to rule out memory addressing conflicts.
  • pcie_port_pm=off: Prevents instability caused by PCIe power management during load shifts.
  • idle=nomwait: Prevents deep C-states to minimize latency/instability when the CPU “wakes up.”

Desktop Prioritization (Watchdog)

To ensure that the desktop environment (KWin/Plasma) always has sufficient resources even under massive CPU load (8–10 hours at ~90°C), I implemented the following watchdog script. This rules out CPU starvation as a cause for the display freeze:

#!/bin/bash
# system_first.sh - Prioritizes the desktop environment
while true; do
    KWIN_PID=$(pidof kwin_wayland)
    # Set KWin to high priority (nice -11)
    [ ! -z "$KWIN_PID" ] && sudo renice -n -11 -p $KWIN_PID > /dev/null 2>&1
    sleep 300
done

2. Strategic Debugging: DPM “High” vs. “Auto”

I specifically tested whether the iGPU instability was caused by steep voltage transients during sudden load shifts. To do this, I temporarily locked the iGPU to “High” (2799 MHz) to force a constant high voltage and eliminate the “wake-up” latency from idle states. However, the freeze still occurred under sustained load.

3. Telemetry Analysis (Voltage Anomalies)

The logs capture critical voltage (VDD) instabilities immediately preceding the flip_done timed out error in both DPM modes.

Scenario A: Freeze at fixed “High” (2799 MHz)

A massive voltage drop to 715 mV at maximum clock was recorded, which is physically insufficient for this frequency and likely triggered the crash.

[06:19:26] | i1: 2799Mhz | V: 715.00 mV | CPU: 90.5°C | (Critical Drop)
[06:19:36] | i1: 2799Mhz | V: 1.07 V    | CPU: 90.5°C | (Attempted Correction)
[06:20:07] | i1: 2799Mhz | V: 1.07 V    | CPU: 90.6°C | !!! ERROR: flip_done timed out

Scenario B: Freeze at “Auto” (800 MHz at time of error)

Even at lower clocks, strong fluctuations and spikes were observed just before the failure.

[00:21:07] | i1: 800Mhz | V: 840.00 mV | CPU: 90.2°C
[00:21:28] | i1: 800Mhz | V: 928.00 mV | CPU: 90.2°C | (Voltage Spike)
[00:21:48] | i1: 800Mhz | V: 857.00 mV | CPU: 90.2°C | !!! ERROR: flip_done timed out

4. Successful Recovery (The Hardware Proof)

A central finding of my investigation: I was able to successfully revive the internal display via SSH. Restarting the compositor brought the image back, proving that no permanent hardware lock or physical failure occurred.

Recovery Script (via SSH):

export DISPLAY=:0
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export WAYLAND_DISPLAY=wayland-0

# Replace the hanging KWin process
kwin_wayland --replace & disown

Conclusion: The hardware remains physically intact and responsive. The issue is a breakdown in communication between the firmware (VBIOS/PSP) and the driver, which causes the autonomous ASIC reset (Error -110) to fail under peak thermal saturation of the SoC.


Update: Technischer Bericht: iGPU Timeout Analyse & Recovery unter Dauerlast

1. System-Konfiguration (Fundament)

Um Software-Seiteneffekte und Energiesparmechanismen als Fehlerquelle auszuschlieĂźen, habe ich das System mit folgenden Kernel-Parametern und Priorisierungen betrieben:

GRUB Konfiguration

GRUB_CMDLINE_LINUX_DEFAULT="... amdgpu.gpu_recovery=1 amdgpu.sg_display=0 pcie_port_pm=off amdgpu.psr=0 idle=nomwait"

  • gpu_recovery=1: Aktiviert den automatischen Hardware-Reset-Mechanismus des Treibers.
  • sg_display=0: Deaktiviert Scatter/Gather-Features, um Speicheradressierungskonflikte zu vermeiden.
  • pcie_port_pm=off: Verhindert Instabilitäten durch PCIe-Power-Management während Lastwechseln.
  • idle=nomwait: Verhindert tiefe C-States, um Latenz-Probleme beim CPU-Aufwachen zu minimieren.

Desktop-Priorisierung (Watchdog)

Um sicherzustellen, dass der Desktop (KWin/Plasma) auch unter massiver CPU-Last (8–10 Stunden bei ~90°C) immer genug Ressourcen hat, habe ich ein Watchdog-Skript implementiert. Ein “Einfrieren” durch bloßen Ressourcenmangel (Starvation) auf CPU-Ebene ist damit ausgeschlossen:

#!/bin/bash
# system_first.sh - Priorisiert das Desktopsystem
while true; do
    KWIN_PID=$(pidof kwin_wayland)
    # KWin auf hohe Prio setzen (nice -11)
    [ ! -z "$KWIN_PID" ] && sudo renice -n -11 -p $KWIN_PID > /dev/null 2>&1
    sleep 300
done

2. Strategisches Debugging: DPM “High” vs. “Auto”

Ich habe gezielt getestet, ob die iGPU-Instabilität durch zu steile Spannungsspitzen bei Lastwechseln entsteht. Dazu habe ich die iGPU zeitweise fest auf “High” (2799 MHz) gesetzt, um eine konstant hohe Spannung zu erzwingen und den “Einschlaf-Effekt” zu verhindern. Da der Freeze trotzdem auftrat, liegt das Problem vermutlich in der Spannungsregulation unter thermischer Sättigung.

3. Telemetrie-Analyse (Spannungs-Anomalien)

Die Logs zeigen in beiden DPM-Modi kritische Spannungs-Instabilitäten (VDD) unmittelbar vor dem flip_done timed out.

Szenario A: Freeze bei fixiertem “High” (2799 MHz)

Ein massiver Spannungseinbruch auf 715 mV bei maximalem Takt fĂĽhrt unmittelbar zum Timeout.

[06:19:26] | i1: 2799Mhz | V: 715.00 mV | CPU: 90.5°C | (Kritischer Abfall)
[06:19:36] | i1: 2799Mhz | V: 1.07 V    | CPU: 90.5°C | (Korrekturversuch)
[06:20:07] | i1: 2799Mhz | V: 1.07 V    | CPU: 90.6°C | !!! ERROR: flip_done timed out

Szenario B: Freeze bei “Auto” (800 MHz zum Zeitpunkt des Fehlers)

Auch bei niedrigerem Takt treten kurz vor dem Ausfall starke Schwankungen und Spitzen auf.

[00:21:07] | i1: 800Mhz | V: 840.00 mV | CPU: 90.2°C
[00:21:28] | i1: 800Mhz | V: 928.00 mV | CPU: 90.2°C | (Spannungsspitze)
[00:21:48] | i1: 800Mhz | V: 857.00 mV | CPU: 90.2°C | !!! ERROR: flip_done timed out

4. Erfolgreiche Wiederbelebung (Recovery-Beweis)

Ein zentrales Ergebnis meiner Untersuchung: Ich konnte das interne Display per SSH wiederbeleben. Ein Neustart des Compositors brachte das Bild zurĂĽck, was beweist, dass keine permanente Hardware-Blockade vorlag.

Recovery-Befehl (via SSH):

export DISPLAY=:0
export XDG_RUNTIME_DIR=/run/user/$(id -u)
export WAYLAND_DISPLAY=wayland-0
kwin_wayland --replace & disown

Schlussfolgerung: Die Hardware ist physisch intakt und ansprechbar. Der Fehler liegt in der Kommunikation zwischen Firmware (VBIOS/PSP) und Treiber, die unter thermischer Sättigung des SoCs den automatischen ASIC-Reset (Error -110) scheitern lässt.

[EN] [Analysis/Testing] Framework 16 iGPU Stability & SMU Firmware Spam Mitigation

I would like to share some findings regarding the iGPU stability issues on the Framework 16 (Phoenix/780M) and a custom kernel patch I am currently testing.

1. The SMU Versioning Spam

While running a custom debug kernel, I discovered a significant issue that was previously hidden: the kernel was querying the SMU (System Management Unit) version 30 times per second. The reason was a protocol mismatch. The firmware (v82.95.0) was offering version 5 metrics, but the driver was expecting version 4. This resulted in constant re-queries that put unnecessary load on the interface.

Technical Deep-Dive:

An excerpt from the debug logs before the patch showed this message appearing constantly:
[FW16-DEBUG] SMU_MSG: 0x42, Param: 0x5

0x42: Command SMU_MSG_GetMetricsVersion.

0x5: The Firmware reports Version 5 metrics.

The Problem: The driver was hardcoded to v2_1 (Version 4 max). It didn’t “understand” the response and kept asking. By updating to gpu_metrics_v2_3, the spam stops.

2. iGPU “Suffocation” & Voltage Drops

By monitoring the telemetry, I observed that under heavy CPU load, the iGPU is being “suffocated,” dropping the voltage so low that it leads to freezes. Since direct voltage control is restricted by AMD to prevent hardware damage, I am testing an alternative route.

  • The Approach: I implemented a “Power-Floor” by forcing a minimum GFX clock of 800 MHz via SMU_MSG_SetHardMinGfxClk.
  • The Logic: Based on the V/F (Voltage/Frequency) curve, 800 MHz should correspond to a voltage of at least 800 mV. The goal is to prevent the iGPU from dropping into the critical 700 mV range where the crashes occur.

It is too early to call this a definitive fix, but so far, the system feels much more stable. I am not an AMD developer, but this seems like a solid way to keep the iGPU from “starving” during high CPU stress.


[DE] [Analyse/Test] Framework 16 iGPU-Stabilität & SMU-Firmware-Spam-Abwehr

Ich möchte einige Erkenntnisse zu den iGPU-Stabilitätsproblemen beim Framework 16 (Phoenix/780M) teilen und einen Kernel-Patch vorstellen, den ich aktuell teste.

1. SMU-Versions-Spam

Durch den Einsatz eines eigenen Debug-Kernels konnte ich ein Problem identifizieren, das vorher unsichtbar war: Der Kernel fragte 30 Mal pro Sekunde die SMU-Version (System Management Unit) ab. Der Grund war ein Protokoll-Mismatch. Die Firmware (v82.95.0) bot Metriken der Version 5 an, während der Treiber Version 4 erwartete. Dies führte zu einem permanenten Abfrage-Spam.

Technischer Deep-Dive:

Ein Auszug aus den Debug-Logs vor dem Patch zeigt die ständige Wiederholung:
[FW16-DEBUG] SMU_MSG: 0x42, Param: 0x5

0x42: Befehl SMU_MSG_GetMetricsVersion.

0x5: Die Firmware meldet Version 5 Metriken.

Das Problem: Der Treiber war fest auf v2_1 (max. Version 4) eingestellt. Er verwarf die Antwort und fragte sofort erneut ab. Das Update auf gpu_metrics_v2_3 behebt dies.

2. iGPU-“Zwangsjacke” & Spannungseinbrüche

Durch die Analyse der Telemetrie habe ich gesehen, dass die CPU bei starker Belastung die iGPU massiv einschnürt und die Spannung so weit absenkt, dass es zu Freezes kommt. Da direkte Spannungsänderungen zum Schutz der Hardware untersagt sind, teste ich einen anderen Weg.

  • Der Ansatz: Ich habe einen “Power-Floor” implementiert, der einen Mindesttakt von 800 MHz via SMU_MSG_SetHardMinGfxClk erzwingt.
  • Die Logik: Laut Kennblatt (V/F-Kurve) entsprechen 800 MHz einer Spannung von mindestens 800 mV. Das Ziel ist, zu verhindern, dass die Spannung in den kritischen Bereich von 700 mV einbricht.

Man kann hier noch nicht von einem endgültigen Fix sprechen, aber die bisherigen Tests sind vielversprechend. Ich bin kein AMD-Entwickler, aber dieser Weg scheint die iGPU effektiv vor dem “Verhungern” bei hoher CPU-Last zu schützen.

The Patch (Kernel 6.19.x)

Diff

diff -Nru -x '*.o' -x '*.ko' -x '*.cmd' linux-6.19.10-orig/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_5_ppt.c linux-6.19.10/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_5_ppt.c
--- linux-6.19.10-orig/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_5_ppt.c	2026-03-25 11:13:32.000000000 +0100
+++ linux-6.19.10/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_5_ppt.c	2026-03-30 05:38:46.809377918 +0200
@@ -145,8 +145,12 @@
 	smu_table->watermarks_table = kzalloc(sizeof(Watermarks_t), GFP_KERNEL);
 	if (!smu_table->watermarks_table)
 		goto err2_out;
-
-	smu_table->gpu_metrics_table_size = sizeof(struct gpu_metrics_v2_1);
+	
+	/* Updated to gpu_metrics_v2_3 to support newer firmware versions (like SMU 82.95.0)
+	 * which report metrics version 5 or higher.
+	 */
+	smu_table->gpu_metrics_table_size = sizeof(struct gpu_metrics_v2_3);
 	smu_table->gpu_metrics_table = kzalloc(smu_table->gpu_metrics_table_size, GFP_KERNEL);
 	if (!smu_table->gpu_metrics_table)
 		goto err3_out;
@@ -469,8 +473,11 @@
 						void **table)
 {
 	struct smu_table_context *smu_table = &smu->smu_table;
-	struct gpu_metrics_v2_1 *gpu_metrics =
-		(struct gpu_metrics_v2_1 *)smu_table->gpu_metrics_table;
+	/* UPDATED: Changed pointer type to v2_3 to support SMU 82.95.0 / Version 5 metrics */
+	struct gpu_metrics_v2_3 *gpu_metrics =
+		(struct gpu_metrics_v2_3 *)smu_table->gpu_metrics_table;
 	SmuMetrics_t metrics;
 	int ret = 0;
 
@@ -478,7 +485,11 @@
 	if (ret)
 		return ret;
 
-	smu_cmn_init_soft_gpu_metrics(gpu_metrics, 2, 1);
+	/* UPDATED: Initialize as version 2.3. 
+	 * This tells the system that the buffer follows the v2.3 layout. 
+	 */
+	smu_cmn_init_soft_gpu_metrics(gpu_metrics, 2, 3);
 
 	gpu_metrics->temperature_gfx = metrics.GfxTemperature;
 	gpu_metrics->temperature_soc = metrics.SocTemperature;
@@ -500,15 +511,50 @@
 
 	*table = (void *)gpu_metrics;
 
-	return sizeof(struct gpu_metrics_v2_1);
+	/* UPDATED: Return the size of the larger v2.3 structure */
+	return sizeof(struct gpu_metrics_v2_3);
+}
+
+/* Framework 16 Fix: Enforce minimum GFX clock to prevent voltage drop under heavy CPU load. */
+static int smu_v13_0_5_force_igpu_floor(struct smu_context *smu)
+{
+	int ret = 0;
+	uint32_t min_gfx_clk = 800; /* 800 MHz base value to keep the voltage rail stable. */
+
+	dev_info(smu->adev->dev, "[FW16-Patch] Applying iGPU Power-Floor: %u MHz\n", min_gfx_clk);
+
+	/* Command SMU not to drop GFX clock below 800MHz. */
+	ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetHardMinGfxClk, min_gfx_clk, NULL);
+	
+	if (ret)
+		dev_err(smu->adev->dev, "[FW16-Patch] Failed to set iGPU Floor! (Error: %d)\n", ret);
+
+	return ret;
 }
 
 static int smu_v13_0_5_set_default_dpm_tables(struct smu_context *smu)
 {
 	struct smu_table_context *smu_table = &smu->smu_table;
+	int ret;
 
-	return smu_cmn_update_table(smu, SMU_TABLE_DPMCLOCKS, 0, smu_table->clocks_table, false);
+	/* 1. Load standard DPM tables */
+	ret = smu_cmn_update_table(smu, SMU_TABLE_DPMCLOCKS, 0, smu_table->clocks_table, false);
+	if (ret)
+		return ret;
+
+	/* Short pause (100ms) to allow the display controllers to stabilize. */
+	msleep(100);
+
+	/* 2. Apply Framework 16 voltage floor fix immediately after defaults. */
+	return smu_v13_0_5_force_igpu_floor(smu);
 }
 
 static int smu_v13_0_5_od_edit_dpm_table(struct smu_context *smu, enum PP_OD_DPM_TABLE_COMMAND type,
 					long input[], uint32_t size)

Hello! I’m wondering if this issue was fixed? I applied your above commands and so far so good. I’m wondering if there will be a permanent fix? I’m on Fedora 43 AMD Ryzen 7 Framework 16. I should mention that I still see visual artefacts sometimes probably related to this particular issue, are you experiencing the same?

Hello,

I am still investigating and optimizing. After experiencing two more freezes over Easter, I stumbled upon an interesting fact. My debug kernel provided a new lead regarding the potential root cause.

I only experienced the visual artifacts you mentioned briefly when my kernel had trouble communicating with the AMD firmware due to mismatched versions. I no longer have issues with artifacts now.

Could you check the output of:

sensors spd5118-* | grep "temp1" | awk '{print $2}' | tr -d '+°C' | sort -n

Please make sure to run these commands specifically when you notice the visual artifacts.

If the sensors command doesn’t show the RAM temperatures, you might need to install the tools and load the driver first:

sudo dnf install lm_sensors
sudo modprobe spd5118
# Then run the sensor command again

If sensors still shows nothing after the modprobe, you need to grant sensors permission to read the sensors. To do this, execute the following command and answer all questions with “YES” (Enter).:

sudo sensors-detect

I’ve discovered that my freezes consistently occur when the RAM exceeds 58°C. Unfortunately, the Framework 16 mainboard design places the RAM in a “dead zone” with very little active airflow, while being positioned directly next to the CPU heatpipes.

Also, what does this command return for you?

sudo dmesg | grep -i "smu"

Addendum:
Correction: By “reproducible” I mean “highly likely.” It depends on the specific workload, but the correlation between 58°C+ and the freezes is very strong on my machine.


Hallo,

ich bin noch immer am Suchen und Optimieren. Durch zwei weitere Freezes über Ostern bin ich auf eine interessante Tatsache gestoßen. Mein Debug-Kernel hat mir einen neuen Hinweis geliefert, wodurch das Problem ausgelöst werden könnte.

Die von dir beschriebenen Artefakte hatte ich nur einmal kurzzeitig, als mein Kernel nicht korrekt mit der AMD-Firmware kommunizieren konnte (inkompatible Versionen). Aktuell habe ich keine Probleme mehr mit Artefakten.

Was sagt bei dir die Ausgabe von:

sensors spd5118-* | grep "temp1" | awk '{print $2}' | tr -d '+°C' | sort -n

Bitte teste diese Befehle vor allem dann, wenn die Artefakte gerade auftreten.

Falls der Befehl sensors die RAM-Temperaturen nicht anzeigt, musst du möglicherweise zuerst die Tools installieren und das Modul laden:

sudo dnf install lm_sensors
sudo modprobe spd5118

Falls sensors nach dem Modprobe immer noch nichts zeigt, muss du sensors noch die Berechtigung zum auslesen der Sensoren geben. Führe dazu folgenden Befehl aus und alle Fragen mit “YES” (Enter) beantworten:

sudo sensors-detect

Ich habe festgestellt, dass meine Freezes reproduzierbar auftreten, wenn der RAM über 58°C warm wird. Leider ist das Mainboard des Framework 16 so konstruiert, dass der RAM in einer “toten Zone” mit sehr wenig aktivem Luftstrom liegt und zudem direkt neben den CPU-Heatpipes sitzt.

Was gibt zudem dieser Befehl bei dir aus?

sudo dmesg | grep -i "smu"

Nachtrag:
Korrektur: Mit “reproduzierbar” meine ich “sehr wahrscheinlich”. Es hängt von der jeweiligen Arbeitslast ab, aber die Korrelation zwischen 58 °C+ und den Freezes ist auf meinem Rechner sehr stark.

So for the temperature command, I got this:

43.2
47.0

For the dmseg command, I got this:

0.623293] evm: security.SMACK64TRANSMUTE (disabled)
[ 3.291055] amdgpu 0000:c1:00.0: amdgpu: detected ip block number 4 <smu_v13_0_0> (smu)
[ 3.972311] amdgpu 0000:c1:00.0: amdgpu: SMU is initialized successfully!

Also, I added this: sudo grubby --update-kernel=ALL --args=“amdgpu.dcdebugmask=0x410”

Which seems to have completely eliminated the the artefacts.

Another thing I’ve noticed is that when the laptop freezes the fans continue spinning, and according to claude this might indicate a continuous cpu loop/usage that doesn’t stop.

Also, would installing fedora workstation instead of kde or another linux distro altogether fix this issue?

Is this a hardware issue? Would replacing the motherboard be worth while? My current machine was assembled in September 2025.


Also fĂĽr den Temperaturbefehl habe ich folgendes erhalten: 43.2 47.0

FĂĽr den dmesg-Befehl habe ich folgendes erhalten: 0.623293] evm: security.SMACK64TRANSMUTE (disabled) [ 3.291055] amdgpu 0000:c1:00.0: amdgpu: detected ip block number 4 <smu_v13_0_0> (smu) [ 3.972311] amdgpu 0000:c1:00.0: amdgpu: SMU is initialized successfully!

Außerdem habe ich folgendes hinzugefügt: sudo grubby --update-kernel=ALL --args=“amdgpu.dcdebugmask=0x410” Was die Artefakte anscheinend vollständig beseitigt hat.

Mir ist außerdem aufgefallen, dass wenn der Laptop einfriert, die Lüfter weiterhin drehen, und laut Claude könnte dies auf eine kontinuierliche CPU-Schleife/Auslastung hinweisen, die nicht stoppt. Würde die Installation von Fedora Workstation anstelle von KDE oder einer anderen Linux-Distribution dieses Problem beheben? Ist das ein Hardwareproblem? Wäre es sinnvoll, das Motherboard zu ersetzen? Mein aktuelles Gerät wurde im September 2025 zusammengebaut.

(Translation was done by Claude could be wrong, just trying to be helpful :+1:)

Hey so quick update, I was playing a game and ran a watch on the temperature command, and hit 58 and 62 degrees on my ram sticks, and not crash.


Hey, nur ein kurzes Update: Ich habe ein Spiel gespielt und die Temperatur überwacht – meine RAM-Riegel haben 58 und 62 Grad erreicht, aber es gab keinen Absturz.

Hello Artagis_Thorne,

Interesting results! Your temperatures (43.2°C / 47.0°C) are actually quite good. It is important to note: Checking the temperatures with the first command only really makes sense at the exact moment the artifacts appear. However, since your GRUB parameter seems to have eliminated the artifacts entirely, it confirms that your cause is likely different from mine.

As far as I have been able to narrow it down so far, my case seems to be a thermal issue, my freezes are highly correlated with the RAM hitting 58°C+ during heavy workloads. In your case, the success with the debug mask points much more toward a software/firmware bug in the display stack.

Regarding your other points:

  • The “SSH Test”: Even without artifacts now, if you experience a freeze again, try accessing the machine via SSH. If you can still log in, it confirms the CPU/Kernel is alive and only the display driver crashed.
  • Distro Hopping: Switching distros usually won’t fix a kernel-level bug, as they all share the same AMD firmware blobs. The only difference might be how the specific compositor triggers the bug.
  • Fans spinning during freeze: This indicates a “Hard Lockup” where the Embedded Controller (EC) just keeps the last fan speed.
  • Hardware Replacement: That is a tough call and ultimately your decision. While your success with dcdebugmask points toward software, we can only speculate. If the issues persist despite BIOS updates and tweaks, contacting support is the right path.

Recommendation: Check for BIOS updates. They often include newer SMU or PSP (Platform Security Processor) firmware, which can resolve these types of hangs.

P.S.: I also really appreciated that you translated your message into German as well :wink:


Hallo Artagis_Thorne,

interessante Ergebnisse! Deine Temperaturen (43.2°C / 47.0°C) sind eigentlich ziemlich gut. Wichtig zu beachten: Den ersten Befehl zur Temperaturprüfung zu testen, macht eigentlich nur in dem Moment Sinn, in dem die Artefakte auch wirklich auftreten. Da du diese aber seit dem GRUB-Parameter nicht mehr hast, bestätigt das, dass bei dir scheinbar eine andere Ursache vorliegt als bei mir.

Soweit ich das bisher eingrenzen konnte, scheint es sich bei mir um eine thermische Problematik zu handeln, meine Freezes hängen direkt damit zusammen, wenn der RAM bei hoher Last die 58°C überschreitet. Bei dir deutet der Erfolg mit der Debug-Maske viel stärker auf einen Software/Firmware-Bug im Display-Stack hin.

Zu den weiteren Punkten:

  • Der “SSH-Test”: Auch wenn du jetzt keine Artefakte mehr hast: Falls das System wieder einfriert, versuch dich per SSH einzuloggen. Klappt das, läuft das System im Hintergrund noch und nur der Grafiktreiber ist abgestĂĽrzt.
  • Distro-Wechsel: Ein Wechsel der Distribution hilft meist nicht gegen Kernel-Fehler, da alle die gleichen AMD-Firmware-Dateien nutzen.
  • LĂĽfter drehen weiter: Das deutet auf einen “Hard Lockup” hin, bei dem der LĂĽfter-Controller einfach die letzte Geschwindigkeit beibehält.
  • Hardware-Tausch: Das ist eine schwierige Entscheidung, die bei dir liegt. Da der dcdebugmask-Tweak geholfen hat, liegt Software/Firmware nahe, aber wir können hier nur mutmaĂźen. Bleiben die Probleme trotz BIOS-Updates bestehen, ist der Support der richtige Weg.

Empfehlung: Prüfe dein BIOS auf Updates. Diese enthalten oft neuere SMU- oder PSP (Platform Security Processor) Firmware, die genau solche “Hangs” beheben kann.

P.S.: Ich fand es ĂĽbrigens total lieb, dass du deinen Text auch auf Deutsch ĂĽbersetzt hast :wink:

Wow, that is a game changer!

If you can hit 62°C without a crash, it’s a clear sign that your RAM modules and motherboard are much more heat-tolerant than mine. On my specific Framework 16, anything above 58°C leads to an almost immediate freeze. This confirms that we are likely dealing with two different issues:

This is very helpful to know! It means you don’t need to worry about the temperatures as much as I do. You should focus on the AMDGPU stability and BIOS updates.

The fact that your fans keep spinning even though your system is stable at 62°C (during the game) shows that the thermal management is working as intended—it’s just that your “limit” is much higher than mine.


Wow, das ändert alles!

Wenn du 62°C erreichst, ohne dass das System abstürzt, ist das ein klares Zeichen dafür, dass deine RAM-Module und dein Mainboard deutlich hitzetoleranter sind als meine. Bei meinem spezifischen Framework 16 führt alles über 58°C fast unmittelbar zu einem Freeze. Das bestätigt, dass wir es wahrscheinlich mit zwei verschiedenen Problemen zu tun haben:

Das ist sehr hilfreich zu wissen! Es bedeutet, dass du dir um die Temperaturen nicht so viele Sorgen machen musst wie ich. Du solltest dich voll auf die AMDGPU-Stabilität und BIOS-Updates konzentrieren.

Dass deine Lüfter weiterdrehen, während das System bei 62°C im Spiel stabil bleibt, zeigt, dass das Thermomanagement wie vorgesehen arbeitet – nur dass dein “Limit” eben viel höher liegt als meines.

Hey so just to keep you updated, turns out my problems where related to bad ram. I did a memtest86 on my ram sticks and one of them was completely busted (527+ errors found) so i removed it and for now I’m just using one ram stick. Now everything works well on my end (I had issues with s2idle too)


Hey, nur um euch auf dem Laufenden zu halten: Es hat sich herausgestellt, dass meine Probleme auf defekten Arbeitsspeicher zurückzuführen waren. Ich habe meine RAM-Riegel mit memtest86 getestet und einer davon war komplett kaputt (über 527 Fehler gefunden), also habe ich ihn entfernt und benutze vorerst nur einen RAM-Riegel. Jetzt läuft bei mir alles einwandfrei (ich hatte auch Probleme mit s2idle).

1 Like

Regarding the bad ram chip.
Was there no way for the OS to know the ram was bad? Only memtest showed it?

I guess this is another reason why we need full ECC ram end-to-end on laptops.

DDR5 ram has ECC internally, but not on the physical link between ram and cpu.

Your problem might have been fixed by reseating the ram chips.

I mean the os was constantly freezing. Had me guess quite a bit as to what was the issue.

Hello Artagis_Thorne,

That is a great find! 500+ errors in Memtest86 is a very clear sign.

Regarding my case:
Your update is very interesting to me because my Framework 16 ran perfectly for 1.5 years without a single issue. Then, suddenly, these problems started appearing “overnight.” It makes me wonder if long-term thermal stress eventually caused a degradation of my RAM modules, leading to the thermal sensitivity I am seeing now (instability exactly at 58°C+).

Even if my long search since mid-January was just a long detour to finally identify the RAM as the culprit, it was definitely worth it. Now I have a much better understanding of how the system behaves under load. I will definitely run a full Memtest86 as well to see if my modules are starting to fail like yours.

To James3: I totally agree with you. The lack of full end-to-end ECC on the physical link is exactly why diagnosing this is so painful. Since DDR5 only protects the data “on-die,” any bit-flip on the way to the CPU causes an immediate hard freeze without any error logs. If we had full ECC on laptops, the system could actually report these errors instead of just dying.

Enjoy your stable system, Artagis_Thorne!


Hallo Artagis_Thorne,

das ist ein super Fund! Ăśber 500 Fehler in Memtest86 sind ein sehr eindeutiges Zeichen.

Zu meinem Fall:
Dein Update ist für mich sehr interessant, da mein Framework 16 ca. 1,5 Jahre lang ohne jedes Problem lief. Dann, von heute auf morgen, fingen diese Probleme plötzlich an. Das lässt mich vermuten, dass die dauerhafte thermische Belastung eventuell zu einer schleichenden Degradation meines Speichers geführt hat, was nun zu dieser extremen Hitzeempfindlichkeit führt (Instabilität exakt ab 58°C+).

Selbst wenn meine lange Suche seit Mitte Januar nur ein riesiger Umweg war, um am Ende doch beim RAM als Ursache zu landen, hat es sich trotzdem gelohnt. Ich verstehe jetzt viel besser, wie das System unter Last reagiert. Ich werde jetzt definitiv auch einen kompletten Memtest86 machen, um zu sehen, ob meine Riegel auch langsam den Geist aufgeben.

An James3: Ich stimme dir vollkommen zu. Das Fehlen von echtem End-to-End ECC auf der physischen Verbindung ist genau der Grund, warum diese Diagnose so schmerzhaft ist. Da DDR5 die Daten nur “on-die” schützt, führt jeder Bit-Flip auf dem Weg zur CPU zu einem sofortigen Hard-Freeze ohne Fehlermeldung. Hätten wir echtes ECC in Laptops, könnte das System diese Fehler einfach melden, anstatt einfach abzustürzen.

Viel SpaĂź mit deinem stabilen System, Artagis_Thorne!

[EN][DRAFT] Experimental Thermal Mitigation: RAM-Cooling via Framework-EC

Status: Experimental / Preliminary / Work-in-Progress

1. Introduction
To address hard freezes occurring when my RAM exceeds 58°C, I am using this setup to actively keep temperatures below 55°C. Since my device ran perfectly for 1.5 years before this started, this serves as a mitigation strategy while I investigate potential hardware degradation.

2. Requirements

  • Tool: ectool located at /usr/local/bin/ectool.
  • Kernel: cros_ec_lpcs module must be active.
  • Sensors: lm-sensors (targeting spd5118 DDR5 thermal sensors).

3. Fan Control Helper (fan-control.sh)
This script manages the manual override and the return to automatic control based on the framework-ec syntax.

#!/bin/bash
# Path to ectool
ECTOOL="/usr/local/bin/ectool"

function turbo_set() {
    VAL=$1
    if [[ "$VAL" =~ ^[0-9]+$ ]] && [ "$VAL" -le 100 ]; then
        echo "--- Mode: MANUAL ($VAL%) ---"
        # Setting fanduty usually overrides the automatic control
        sudo $ECTOOL fanduty $VAL
        sudo $ECTOOL pwmgetfanrpm all
    else
        echo "Error: Please provide a value between 0 and 100."
    fi
}

function turbo_auto() {
    echo "--- Mode: AUTOMATIC ---"
    # Re-enable automatic control for all fans
    sudo $ECTOOL autofanctrl >/dev/null
    sleep 2
    sudo $ECTOOL pwmgetfanrpm all
}

case "$1" in
    set)
        turbo_set $2
        ;;
    auto)
        turbo_auto
        ;;
    status)
        sudo $ECTOOL pwmgetfanrpm all
        ;;
    *)
        echo "Usage: $0 {set %|auto|status}"
        exit 1
esac

4. The Monitoring Daemon (ram-cooling.sh)
Uses a hysteresis (Trigger at 55°C, back to auto at 50°C) to prevent oscillating fan speeds.

#!/bin/bash
# THRESHOLDS
RAM_LIMIT_HIGH=55
RAM_LIMIT_LOW=50
CHECK_INTERVAL=5
STATE="auto"

while true; do
    # Targeted reading of spd5118 sensors
    RAM_TEMP=$(sensors spd5118-* | grep "temp1" | awk '{print $2}' | tr -d '+°C' | sort -n | tail -1 | cut -d. -f1)

    if [[ -z "$RAM_TEMP" ]]; then
        sleep $CHECK_INTERVAL
        continue
    fi

    if [[ "$RAM_TEMP" -ge "$RAM_LIMIT_HIGH" ]] && [[ "$STATE" == "auto" ]]; then
        echo "[$(date +%T)] ALARM: RAM at $RAM_TEMP°C -> Full Speed!"
        fan-control set 100
        STATE="manual"
    elif [[ "$RAM_TEMP" -le "$RAM_LIMIT_LOW" ]] && [[ "$STATE" == "manual" ]]; then
        echo "[$(date +%T)] Cooling: RAM at $RAM_TEMP°C -> Back to Auto."
        fan-control auto
        STATE="auto"
    fi
    sleep $CHECK_INTERVAL
done

5. System Integration (systemd)
Service file located at /etc/systemd/system/ram-cooling.service:

[Unit]
Description=Framework RAM Cooling Daemon
After=multi-user.target

[Service]
ExecStart=/usr/local/bin/ram-cooling.sh
Restart=always
User=root

[Install]
WantedBy=multi-user.target

Activating the background service:

sudo systemctl daemon-reload
sudo systemctl enable --now ram-cooling.service

With this workaround, my system has now been running under full load for 4 days straight without a single freeze.
I am not yet certain if this is the definitive solution, but if it remains stable, I will post my complete setup (including GRUB parameters, etc.) here as a final conclusion.


[DE][ENTWURF] Experimentelle thermische KĂĽhlung: RAM-KĂĽhlung mittels Framework-EC

Status: Experimentell / Vorläufig / In Arbeit

1. Einleitung
Um Hard-Freezes zu vermeiden, die auftreten, sobald mein RAM 58°C erreicht, nutze ich dieses Setup, um die Temperatur aktiv unter 55°C zu halten. Da mein Gerät 1,5 Jahre fehlerfrei lief, dient dies zur Überbrückung, während ich Hardware-Degradation prüfe.

2. Voraussetzungen

  • Tool: ectool unter /usr/local/bin/ectool.
  • Kernel: Modul cros_ec_lpcs muss aktiv sein.
  • Sensoren: lm-sensors (speziell fĂĽr spd5118 DDR5-Sensoren).

3. LĂĽfter-Steuerung (fan-control.sh)
Dieses Skript steuert den Embedded Controller (EC) und schaltet zwischen manuellem Duty-Cycle und Automatik um.

(Code siehe oben unter Punkt 3)

4. Ăśberwachungs-Daemon (ram-cooling.sh)
Nutzt eine Hysterese (Aktivierung bei 55°C, Deaktivierung erst bei 50°C), um unruhiges Lüfterverhalten zu vermeiden.

(Code siehe oben unter Punkt 4)

5. System-Integration (systemd)

[Unit]
Description=Framework RAM Cooling Daemon
After=multi-user.target

[Service]
ExecStart=/usr/local/bin/ram-cooling.sh
Restart=always
User=root

[Install]
WantedBy=multi-user.target

Aktivierung des Hintergrund-Dienstes:

sudo systemctl daemon-reload
sudo systemctl enable --now ram-cooling.service

Mit diesem Workaround läuft mein System nun seit 4 Tagen unter Volllast, ohne dass es zu einem einzigen Freeze gekommen ist.
Ich weiß noch nicht sicher, ob das die endgültige Lösung ist, aber wenn das stabil bleibt, werde ich mein komplettes Setup (GRUB-Parameter, etc.) noch einmal abschließend hier als Lösung bekannt geben.

What make/model of ram do you have installed?
I think they are supposed to work above 58C

I am using this specific kit: Kingston Branded Memory 64GB (2x 32GB) DDR5 5600MT/s SODIMM (KCP556SD8K2-64)

Actually, the 55°C limit is not just my personal observation. it is hard-coded into the SPD (Serial Presence Detect) of these Kingston modules. Running sensors on my system reveals the manufacturer-defined thresholds:

temp1: +43.5°C (low = +0.0°C, high = +55.0°C, crit = +85.0°C)

While the critical shutdown (crit) is set at 85°C, Kingston clearly defines the operating “high” limit at 55°C. My freezes at 58°C happen exactly when I exceed this manufacturer-defined warning threshold.

After 1.5 years of flawless operation, it seems the hardware has reached a point where it can no longer maintain signal integrity once it leaves the optimal thermal range defined by the SPD.


Ich verwende dieses spezifische Kit: Kingston Branded Memory 64GB (2x 32GB) DDR5 5600MT/s SODIMM (KCP556SD8K2-64)

Tatsächlich ist die 55°C-Grenze nicht nur meine persönliche Beobachtung - sie ist fest im SPD (Serial Presence Detect) dieser Kingston-Module hinterlegt. Ein Blick in sensors zeigt die vom Hersteller definierten Schwellenwerte:

temp1: +43.5°C (low = +0.0°C, high = +55.0°C, crit = +85.0°C)

Während der kritische Abschaltwert (crit) erst bei 85°C liegt, definiert Kingston das reguläre “High”-Limit klar bei 55°C. Meine Freezes bei 58°C treten exakt dann auf, wenn dieser vom Hersteller definierte Warnschwellenwert überschritten wird.

Nach 1,5 Jahren fehlerfreiem Betrieb scheint die Hardware einen Punkt erreicht zu haben, an dem die Signalintegrität nicht mehr aufrechterhalten werden kann, sobald der vom SPD definierte optimale thermische Bereich verlassen wird.

The data sheet says operating temp 0 - 85C
So, I would ask to get them replaced.
Kingston, I think, give a lifetime warranty with them.

Another thing to note, the RAM chips you have are not in the compatibility list here:

I think the AMD CPUs are quite fussy about the RAM.
For example the new AMD AI 300 CPUs don’t like Kingston RAM at all really.
I have a 7840HS AMD CPU with Ram chips: KF556S40-32, so at least they are in the compatibility list.

The most times I have seen problems have been in relation to playing Videos, so that obviously uses the RAM a lot for each Video frame. My best guess at the moment is some sort of occasional problem when the iGPU reads the RAM.
I have written various programs that use the iGPU and then does a verify step at the end to see if any errors occured, and it has not detected any errors yet. So, still a mystery to me at the moment.

What about putting some kind of heatsink or active cooling on the ram?