AMD Ryzen: Problems and Fixes
Many of the problems concerning AMD Ryzen CPUs and APUs seems to have solutions/workarounds now. Here are some of the most disabling problems with possible fixes. As a newbie I had to do quite a bit of research to solve these for my self, hopefully it can be of use for others as well!
Depending on the age of the CPU or APU an installation media running a kernel (the live session) that supports the CPU (and GPU) is needed. This has not always been the case, especially for the APUs (which needs drivers for the new GPUs for the live GUI). A solution that has usually worked is to use Manjaro Architect. Please see this tutorial.
There are many different types of lockups that has plagued the now many different AMD Ryzen CPUs and APUs. Many probably have had more than one type and therefore several solutions have been needed. A common error message in the
journalctl (for different types of CPU/APU and problems it seems) have looked like:
NMI watchdog: BUG: soft lockup - CPU#12 stuck for 23s! [DOM Worker:1364]
First, make sure that:
- Update the kernel if possible (latest stable should be fine at the time of writing).
- Update UEFI (BIOS) if possible.
Most of these soft lockups seem to be solved by a combination of the following three solutions (or workarounds):
- In UEFI (BIOS) set
Power Supply Idle Control(or something similar) to
Typical Current Idle(or something similar) .
- Add the kernel boot parameter:
C6 states(both core and package) with Zenstates.py.
Kernel Boot Parameter
Adding a kernel boot parameter for GRUB in Manjaro:
- Open the file
/etc/default/grubin a text editor.
- Add the parameter, in this case
m), to the line starting with
GRUB_CMDLINE_LINUX_DEFAULT=, at the end, within the quotes, like so:
GRUB_CMDLINE_LINUX_DEFAULT="<current parameters ...> idle=nomwait".
- Save the file.
- Update GRUB:
- Upon next reboot the default boot option should include the parameter.
Disabling C6 states in Manjaro (modified and extended this):
- Install zenstates-git from AUR (for example with Pamac, Octopi, or bmenu).
- The kernel module
msris needed for Zenstates. To load this module permanently (every boot): add
msrto the file
- To disable C6 states permanently (every boot), we need to create a system.d unit. To do this create a file in
/etc/systemd/systemcalled something like
- Add the following contents to the file:
[Unit] Description=Ryzen Disable C6 DefaultDependencies=no After=sysinit.target local-fs.target Before=basic.target [Service] Type=oneshot ExecStart=/usr/bin/zenstates --c6-disable [Install] WantedBy=basic.target
sudo systemctl enable disable_c6.serviceto enable the system.d unit.
- At the next reboot
msrshould be loaded, to check this run:
lsmod | grep msrwhich should return a line starting with
- At the next reboot zenstates should also have run, and thus C6 states disabled. To check this run
sudo zenstates -land it should return something ending with:
... C6 State - Package - Disabled C6 State - Core - Disabled