How to use CoreCtrl to undervolt GPU

I’m running Bazzite 39 - Steam Deck & HTPC Edition
on a Ryzen 5700G with a RX 6600. It is a fresh install.

I finally manage to get CoreCtrl 1.3.8 running but in the "Performance ode: Advanced " I can only change

  • Power limit (W)
  • Power profile
  • GPU (x MHz)
  • Memory (x MHz)

Hi, you will need to add a kernel argument to enable more advanced features in the driver.
You can get the kernel argument to enable the default supported features for your card by using this command in the terminal

printf 'amdgpu.ppfeaturemask=0x%x\n' "$(($(cat /sys/module/amdgpu/parameters/ppfeaturemask)))"

if you want to get the kernel argument to enable all supported features for your card, run this instead (may cause issues on some cards)

printf 'amdgpu.ppfeaturemask=0x%x\n' "$(($(cat /sys/module/amdgpu/parameters/ppfeaturemask) | 0x4000))"

and then add that kernel argument to your system using (NOTE: replace amdgpu.ppfeaturemask= with the output from the command above)
rpm-ostree kargs --append-if-missing=amdgpu.ppfeaturemask=

to do it all in one go, using the cards default supported feature mask, you can do (if you're using the bash shell which is the default)
rpm-ostree kargs --append-if-missing=$(printf 'amdgpu.ppfeaturemask=0x%x\n' "$(($(cat /sys/module/amdgpu/parameters/ppfeaturemask)))")

once the kernel argument is added, reboot your system and corectrl should now have access to more features, undervolting potentially being one of them if the card supports it.
2 Likes

Thank you very much.

How did you get coreCtrl working?

Bazzite used to have a ujust command for CoreCtrl but replaced it with LACT.

lact is nice. But the inclusions of profiles in coreCtrl makes it more usefull. I’ll dig into it more. I’m still a linux newbie.

Can you link me to more information on using LACT?

On Bazzite, it’s a ujust command. ujust install-lact, but if you aren’t using Bazzite and are on another Fedora Atomic Desktop image:

Here is the bash script that the command above executes:

#!/usr/bin/bash

    IMAGE_INFO="/usr/share/ublue-os/image-info.json"
    BASE_IMAGE_NAME=$(jq -r '."base-image-name"' < $IMAGE_INFO)
    ublue-update --wait
    rpm-ostree kargs --append-if-missing=$(printf 'amdgpu.ppfeaturemask=0x%x\n' "$(($(cat /sys/module/amdgpu/parameters/ppfeaturemask) | 0x4000))")
    if [[ ${BASE_IMAGE_NAME} == 'silverblue' ]]; then
        echo 'Installing LACT Libadwaita...'
        wget \
          $(curl -s https://api.github.com/repos/ilya-zlobintsev/LACT/releases/latest | \
          jq -r ".assets[] | select(.name | test(\"lact-libadwaita.*fedora-$(rpm -E %fedora)\")) | .browser_download_url") \
          -O /tmp/lact.rpm
    else
        echo 'Installing LACT...'
        wget \
          $(curl -s https://api.github.com/repos/ilya-zlobintsev/LACT/releases/latest | \
          jq -r ".assets[] | select(.name | test(\"lact-[0-9].*fedora-$(rpm -E %fedora)\")) | .browser_download_url") \
          -O /tmp/lact.rpm
    fi
    rpm-ostree install --apply-live -y /tmp/lact.rpm
    sudo systemctl enable --now lactd
    rm /tmp/lact.rpm
    echo 'Complete.'
1 Like