[Solved] Framework 16: Visual freezes on KDE/Wayland (Idle & Load)
Hi everyone,
I want to share the final update regarding the visual freezes on the Framework 16 running KDE (Wayland) under Debian 13.
Contrary to initial assumptions, the system RAM was not the cause of these freezes. Stability was achieved by adjusting the fan-dependent thermal management. Additionally, I am running a custom kernel 7.0.6 with a specific patch applied to the dGPU (0x7480) that enforces a minimum graphics frequency and corrects the APU flag. The AMD graphics firmware is sourced directly from the official linux-firmware repository.
System Configuration
The Applied Patch (kernel/7.0.6_dgpu_stable_min.patch)
--- drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c_orig 2026-05-11 08:21:59.000000000 +0200
+++ drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c 2026-05-14 05:19:18.668076817 +0200
@@ -473,6 +473,10 @@
struct smu_table_context *smu_table = &smu->smu_table;
struct amdgpu_device *adev = smu->adev;
int ret = 0;
+ if (adev->pdev->device == 0x7480) {
+ adev->flags &= ~AMD_IS_APU;
+ smu->gfx_actual_hard_min_freq = 800;
+ }
/*
* With SCPM enabled, the pptable used will be signed. It cannot
Hardware Limits & Automation (cpu-limit-90.service)
To control the temperatures and force proper GPU power management, ryzenadj is used to limit the CPU temperature to 90°C. Additionally, both GPUs are explicitly set to auto level. Thanks to the custom kernel patch, the iGPU remains safely locked at a minimum of 800 MHz while allowing standard energy management policies.
1. Create the systemd service file
Save the following configuration into /etc/systemd/system/cpu-limit-90.service:
[Unit]
Description=Set CPU Temperature Limit to 90C
# Wait until the system is fully up
After=multi-user.target
# If power-profiles-daemon is running, wait for it
After=power-profiles-daemon.service
[Service]
Type=exec
ExecStart=/usr/local/bin/ryzenadj --tctl-temp=90
# Set both GPUs to 'auto'
# The iGPU will stays at 800 MHz minimum
ExecStartPost=/bin/sh -c 'echo auto > /sys/class/drm/card0/device/power_dpm_force_performance_level'
ExecStartPost=/bin/sh -c 'echo auto > /sys/class/drm/card1/device/power_dpm_force_performance_level'
RemainAfterExit=yes
CPUSchedulingPolicy=idle
IOSchedulingClass=idle
[Install]
WantedBy=graphical.target
2. Enable and start the daemon
Run these commands to reload the systemd manager configuration, enable the service to start automatically at boot, and trigger it immediately:
sudo systemctl daemon-reload
sudo systemctl enable cpu-limit-90.service
sudo systemctl start cpu-limit-90.service
Downloads / Resources
Since adjusting the fan control and switching to the custom patched kernel with up-to-date firmware, no further visual freezes have occurred.
[Gelöst] Framework 16: Visual freezes on KDE/Wayland (Idle & Load)
Hallo zusammen,
ich möchte hier den abschließenden Bericht zur Lösung der visuellen Freezes auf dem Framework 16 unter KDE (Wayland) und Debian 13 zur Verfügung stellen.
Der Arbeitsspeicher (RAM) war entgegen anfänglicher Annahmen nicht die Ursache für diese Freezes. Die Stabilisierung des Systems wurde ist stattdessen durch die Anpassung der lüfterabhängigen Temperatursteuerung erreicht. Zusätzlich verwende ich einen angepassten Kernel 7.0.6 mit einem spezifischen Patch für die dGPU (0x7480), der die minimale Grafikfrequenz festlegt und das APU-Flag korrigiert. Die AMD-Grafik-Firmware wird direkt aus dem offiziellen linux-firmware Repository bezogen.
Systemkonfiguration
Der angewendete Patch (kernel/7.0.6_dgpu_stable_min.patch)
--- drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c_orig 2026-05-11 08:21:59.000000000 +0200
+++ drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c 2026-05-14 05:19:18.668076817 +0200
@@ -473,6 +473,10 @@
struct smu_table_context *smu_table = &smu->smu_table;
struct amdgpu_device *adev = smu->adev;
int ret = 0;
+ if (adev->pdev->device == 0x7480) {
+ adev->flags &= ~AMD_IS_APU;
+ smu->gfx_actual_hard_min_freq = 800;
+ }
/*
* With SCPM enabled, the pptable used will be signed. It cannot
Hardware-Limits & Automatisierung (cpu-limit-90.service)
Um die Temperaturen zu kontrollieren und das Energiemanagement der GPUs sauber zu regeln, wird ryzenadj genutzt, um das CPU-Temperaturlimit fest auf 90°C zu drosseln. Zusätzlich werden beide Grafikkarten auf auto gesetzt. Dank des Kernel-Patches verbleibt die iGPU trotzdem stabil bei ihren minimalen 800 MHz, erlaubt dem System aber das ganz normale Standard-Energiemanagement.
1. Systemd-Service-Datei anlegen
Speichere die folgende Konfiguration unter dem Pfad /etc/systemd/system/cpu-limit-90.service ab:
[Unit]
Description=Set CPU Temperature Limit to 90C
# Wir warten, bis das System wirklich bereit ist
After=multi-user.target
# Falls der power-profiles-daemon läuft, warten wir auf ihn
After=power-profiles-daemon.service
[Service]
Type=exec
ExecStart=/usr/local/bin/ryzenadj --tctl-temp=90
# Setzt beide GPUs auf 'auto'.
# Dank des Kernel-Patches bleibt die iGPU trotzdem bei 800 MHz,
ExecStartPost=/bin/sh -c 'echo auto > /sys/class/drm/card0/device/power_dpm_force_performance_level'
ExecStartPost=/bin/sh -c 'echo auto > /sys/class/drm/card1/device/power_dpm_force_performance_level'
RemainAfterExit=yes
# Sorgt dafür, dass der Dienst andere wichtige Boot-Prozesse nicht stört
CPUSchedulingPolicy=idle
IOSchedulingClass=idle
[Install]
WantedBy=graphical.target
2. Daemon einbinden und aktivieren
Nutze die folgenden Befehle, um die systemd-Konfiguration neu zu laden, den automatischen Start des Dienstes beim Booten einzurichten und ihn direkt im laufenden Betrieb zu aktivieren:
sudo systemctl daemon-reload
sudo systemctl enable cpu-limit-90.service
sudo systemctl start cpu-limit-90.service
Downloads / Ressourcen
Seit den Anpassungen an der Lüftersteuerung und dem Einsatz des gepatchten Kernels inklusive der aktuellen Firmware traten keine visuellen Freezes mehr auf.