Introduction


To reduce power usage you will need to "undervolt", reducing the voltage of your GPU or limit the power states of the GPU.

Using a modern (4.17 or greater) kernel and the latest amdgpu driver with a Radeon GPU from 2015 or newer can allow you to overclock (and thus undervolt, reducing power usage (Watts)) you graphics card.

I will link to several resources that I have found on the subject but include snippets of the relevant information in this answer. The first section will assume you already have met the prerequistes and just want to get in and undervolt and move on. The rest of the answer will serve as a collection of AMD GPU tuning resources for those who need it.

As a forewarning, undervolting (or otherwise overclocking) the GPU can introduce stability issues. You will need to test your GPU for stability after changing any of the voltage and clock settings to make sure that it still operates in a "safe" manner (A tool like GpuTest using FurMark is a decent way to test performance and stability. Additionally there is the Phoronix Test Suite to benchmark your computer in Linux). The last thing you want to do in your efforts to reduce power draw is cause crashes, glitches, artifacts, or other degradations of performance.

Quick and Easy Undervolting


Following the Wiki guide on LinuxReviews.org you can change performance levels (and thus power usage) by doing the following:

The first thing you need to do before you can change anything is to set /sys/class/drm/card0/device/power_dpm_force_performance_level to manual to enable manual control. You will get write error: Invalid argument errors when writing clock values of you don't.

echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level

The available power_dpm_force_performance_level settings other than manual are:

auto Drivers chooses automatically low Forces the lowest possible clock and locks the GPU there high Forcest the highest possible clock and locks the GPU there
profile_standard
profile_min_sclk
profile_min_mclk
profile_peak "When the profiling modes are selected, clock and power gating are disabled and the clocks are set for different profiling cases. This mode is recommended for profiling specific work loads where you do not want clock or power gating for clock fluctuation to interfere with your results. profile_standard sets the clocks to a fixed clock level which varies from asic to asic. profile_min_sclk forces the sclk to the lowest level. profile_min_mclk forces the mclk to the lowest level. profile_peak sets all clocks (mclk, sclk, pcie) to the highest levels."

Just set the value to low, or the profile_min_sclk profile_min_mclk levels to reduce the core clock and memory clocks respectively to reduce power draw.

If you require more fine grain control than the rest of this post should satisfy your needs.

Prerequisites


You will need to make sure you install a kernel that is version 4.17 or greater and the latest supported AMDGPU driver. If necessary you will need to update your Debian install to Debian 10 (Buster) or add the buster-backports repository.

To add backports so you need to edit your /etc/apt/sources.list to include a line like this:

deb http://deb.debian.org/debian buster-backports 

and then run apt update to finalize the addition of the backports repository.

Install a new kernel by doing the following:

apt-cache search linux-image #Find the kernel and kernel headers available to you.
apt install linux-image-<flavor> #Use `apt-get -t buster-backports <package>` if necessary

Reboot and then install the xserver-xorg-video-amdgpu libgl1-mesa-dri libglx-mesa0 mesa-vulkan-drivers xserver-xorg-video-all packages.

If you need to enable to Southern Islands or Sea Islands support (GCN 1/GCN 2 AMD GPU), follow this ArchWiki page.

Lastly, it is required to unlock access to adjust clocks and voltages in sysfs by appending the Kernel parameter amdgpu.ppfeaturemask=0xffffffff (Note: this value could be different at the end based on testing and specific changes, this one is simply unlocking the card completely).

Edit the line following line in /etc/default/grub to:

 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amdgpu.ppfeaturemask=0xffffffff"  

Then run sudo update-grub.

Verify the current featuremask after reboot by checking here:

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

Overclocking/Undervolting


Warning: Double check the entered values, as mistakes might instantly cause fatal hardware damage!

With everything set up, you can adjust clocks and voltages two ways, manually or tool assisted.

Manually

Reddit user Pannuba outlines how to overclock your AMD GPU in this post.

You need to edit the contents of /sys/class/drm/card0/device/pp_od_clk_voltage

Find the location to edit using readlink -f /sys/class/drm/card0/device

We want to edit the P-state #7 for the core and #2 for the VRAM, as those are the values that our GPU is going to run at while under load.

sudo sh -c "echo 's 7 1450 1150' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"
sudo sh -c "echo 'm 2 2065 950' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"

Note that the file path is for their GPU. Use the previous command to discover the path for yours. The values you want for your clock speeds and voltages will also be different. To undervolt, change each P-State voltage for core and VRAM to be less than the default values. You might be able to keep the clock speeds the same but in some cases you will have to also reduce these values. This is where stability testing and benchmarking your GPU comes into play

As outlined in the ArchWiki, you can run the following to apply, verify, force certain P-states, and reset:

To apply, run

echo "c" > /sys/class/drm/card0/device/pp_od_clk_voltage

To check if it worked out, read out clocks and voltage under 3D load:

watch -n 0.5  cat /sys/kernel/debug/dri/0/amdgpu_pm_info

You can reset to the default values using this:

echo "r" > /sys/class/drm/card0/device/pp_od_clk_voltage

It is also possible to forbid the driver so switch to certain P-states, e.g. to workaround problems with deep powersaving P-states like flickering artifacts or stutter. To force the highest VRAM P-state on a Polaris RX 5xx card, while still allowing the GPU itself to run with lower clocks, run:

echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level
echo "2" >  /sys/class/drm/card0/device/pp_dpm_mclk

Allow only the three highest GPU P-states:

echo "5 6 7" >  /sys/class/drm/card0/device/pp_dpm_sclk

To set the allowed maximum power consumption of the GPU to e.g. 50 Watts, run

echo 50000000 > /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap

Until Linux kernel 4.20, it will only be possible to decrease the value, not increase.

To enable these changes to carry over across boots you will need to create a script and systemd service. Your script should use the values you have tested to work and the file path to your GPU.

Save this script in /usr/bin/ or a safe place for systemwide scripts:

#!/bin/sh
sudo sh -c "echo 's 7 <Your desired values here>' > /sys/devices/Your/Path/Here/pp_od_clk_voltage"
sudo sh -c "echo 'm 2 <Your desired values here' > /sys/devices/Your/Path/Here/pp_od_clk_voltage"
sudo sh -c "echo 'c' > /sys/devices/Your/Path/Here/pp_od_clk_voltage"

Create a file in /etc/systemd/system/ like undervolt.service with the following contents:

[Unit]
Description=Undervolting GPU

[Service]
Type=oneshot
ExecStart=/Path/To/Script.sh

[Install]
WantedBy=multi-user.target

Run sudo systemctl enable undervolt.service to enable. After rebooting, verify by running cat /sys/devices/Your/Path/Here/pp_od_clk_voltage.

User Pannuba also suggest making a script to revert things to default values. This does not have to be a SystemD service.

Tool Assisted

There exists several tools to assist in AMD GPU overclocking:

  • AMDGPU Clocks, a commandline tool.

  • CoreCtrl, GUI tool for total system tuning.

  • WattmanGTK, a GTK GUI recreating the functionality of Wattman on Linux.

  • TuxClocker, a Qt5 GUI overclocking tool for Nvidia and AMD GPUs on Linux.

Each one has specific prerequisites and settings that could be posts on their own. Please reference their guides on how to setup and tune your system.

Conclusion


As you can see, AMD GPU Linux tuning is becoming a first class experience. Many of the features available to Windows users is now available to Linux users, even using the open source driver too. There are many tweaks and options you can make. I will leave the specifics to you. If you want to reduce power usage, you reduce the voltages of the P-States and even limit the power of the card. Make sure you test the stability of the card and your computer after changing anything. Read more about Radeon open source driver features here.

Please comment if you have any questions or issues with this answer. I highly suggest you read through each link I have provided thoroughly before attempting the commands. I appreciate feedback to correct any misconceptions and to improve my posts. I can update my answer as needed.

Best of Luck!

Resources


  • ArchWiki

  • Reddit user Pannuba's post

  • Radeon Open Source Features

  • Linux Reviews

  • AMDGPU Clocks

  • CoreCtrl

  • WattmanGTK

  • TuxClocker

  • GPUTest

  • Phoronix Test Suite

Answer from kemotep on Stack Exchange
🌐
Reddit
reddit.com › r/linux_gaming › no more power limiting for amd gpu's because it "is potentially dangerous and might damage the hardware"
r/linux_gaming on Reddit: No more power limiting for AMD GPU's because it "is potentially dangerous and might damage the hardware"
March 4, 2024 - A 100 W minimum power limit on a 370 W card is very reasonable, whereas a 190 W limit on a 205 W card is next to useless. ... ohh thats for sure..i didnt actually read the whole discussions there.
Top answer
1 of 2
9

Introduction


To reduce power usage you will need to "undervolt", reducing the voltage of your GPU or limit the power states of the GPU.

Using a modern (4.17 or greater) kernel and the latest amdgpu driver with a Radeon GPU from 2015 or newer can allow you to overclock (and thus undervolt, reducing power usage (Watts)) you graphics card.

I will link to several resources that I have found on the subject but include snippets of the relevant information in this answer. The first section will assume you already have met the prerequistes and just want to get in and undervolt and move on. The rest of the answer will serve as a collection of AMD GPU tuning resources for those who need it.

As a forewarning, undervolting (or otherwise overclocking) the GPU can introduce stability issues. You will need to test your GPU for stability after changing any of the voltage and clock settings to make sure that it still operates in a "safe" manner (A tool like GpuTest using FurMark is a decent way to test performance and stability. Additionally there is the Phoronix Test Suite to benchmark your computer in Linux). The last thing you want to do in your efforts to reduce power draw is cause crashes, glitches, artifacts, or other degradations of performance.

Quick and Easy Undervolting


Following the Wiki guide on LinuxReviews.org you can change performance levels (and thus power usage) by doing the following:

The first thing you need to do before you can change anything is to set /sys/class/drm/card0/device/power_dpm_force_performance_level to manual to enable manual control. You will get write error: Invalid argument errors when writing clock values of you don't.

echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level

The available power_dpm_force_performance_level settings other than manual are:

auto Drivers chooses automatically low Forces the lowest possible clock and locks the GPU there high Forcest the highest possible clock and locks the GPU there
profile_standard
profile_min_sclk
profile_min_mclk
profile_peak "When the profiling modes are selected, clock and power gating are disabled and the clocks are set for different profiling cases. This mode is recommended for profiling specific work loads where you do not want clock or power gating for clock fluctuation to interfere with your results. profile_standard sets the clocks to a fixed clock level which varies from asic to asic. profile_min_sclk forces the sclk to the lowest level. profile_min_mclk forces the mclk to the lowest level. profile_peak sets all clocks (mclk, sclk, pcie) to the highest levels."

Just set the value to low, or the profile_min_sclk profile_min_mclk levels to reduce the core clock and memory clocks respectively to reduce power draw.

If you require more fine grain control than the rest of this post should satisfy your needs.

Prerequisites


You will need to make sure you install a kernel that is version 4.17 or greater and the latest supported AMDGPU driver. If necessary you will need to update your Debian install to Debian 10 (Buster) or add the buster-backports repository.

To add backports so you need to edit your /etc/apt/sources.list to include a line like this:

deb http://deb.debian.org/debian buster-backports 

and then run apt update to finalize the addition of the backports repository.

Install a new kernel by doing the following:

apt-cache search linux-image #Find the kernel and kernel headers available to you.
apt install linux-image-<flavor> #Use `apt-get -t buster-backports <package>` if necessary

Reboot and then install the xserver-xorg-video-amdgpu libgl1-mesa-dri libglx-mesa0 mesa-vulkan-drivers xserver-xorg-video-all packages.

If you need to enable to Southern Islands or Sea Islands support (GCN 1/GCN 2 AMD GPU), follow this ArchWiki page.

Lastly, it is required to unlock access to adjust clocks and voltages in sysfs by appending the Kernel parameter amdgpu.ppfeaturemask=0xffffffff (Note: this value could be different at the end based on testing and specific changes, this one is simply unlocking the card completely).

Edit the line following line in /etc/default/grub to:

 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amdgpu.ppfeaturemask=0xffffffff"  

Then run sudo update-grub.

Verify the current featuremask after reboot by checking here:

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

Overclocking/Undervolting


Warning: Double check the entered values, as mistakes might instantly cause fatal hardware damage!

With everything set up, you can adjust clocks and voltages two ways, manually or tool assisted.

Manually

Reddit user Pannuba outlines how to overclock your AMD GPU in this post.

You need to edit the contents of /sys/class/drm/card0/device/pp_od_clk_voltage

Find the location to edit using readlink -f /sys/class/drm/card0/device

We want to edit the P-state #7 for the core and #2 for the VRAM, as those are the values that our GPU is going to run at while under load.

sudo sh -c "echo 's 7 1450 1150' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"
sudo sh -c "echo 'm 2 2065 950' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"

Note that the file path is for their GPU. Use the previous command to discover the path for yours. The values you want for your clock speeds and voltages will also be different. To undervolt, change each P-State voltage for core and VRAM to be less than the default values. You might be able to keep the clock speeds the same but in some cases you will have to also reduce these values. This is where stability testing and benchmarking your GPU comes into play

As outlined in the ArchWiki, you can run the following to apply, verify, force certain P-states, and reset:

To apply, run

echo "c" > /sys/class/drm/card0/device/pp_od_clk_voltage

To check if it worked out, read out clocks and voltage under 3D load:

watch -n 0.5  cat /sys/kernel/debug/dri/0/amdgpu_pm_info

You can reset to the default values using this:

echo "r" > /sys/class/drm/card0/device/pp_od_clk_voltage

It is also possible to forbid the driver so switch to certain P-states, e.g. to workaround problems with deep powersaving P-states like flickering artifacts or stutter. To force the highest VRAM P-state on a Polaris RX 5xx card, while still allowing the GPU itself to run with lower clocks, run:

echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level
echo "2" >  /sys/class/drm/card0/device/pp_dpm_mclk

Allow only the three highest GPU P-states:

echo "5 6 7" >  /sys/class/drm/card0/device/pp_dpm_sclk

To set the allowed maximum power consumption of the GPU to e.g. 50 Watts, run

echo 50000000 > /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap

Until Linux kernel 4.20, it will only be possible to decrease the value, not increase.

To enable these changes to carry over across boots you will need to create a script and systemd service. Your script should use the values you have tested to work and the file path to your GPU.

Save this script in /usr/bin/ or a safe place for systemwide scripts:

#!/bin/sh
sudo sh -c "echo 's 7 <Your desired values here>' > /sys/devices/Your/Path/Here/pp_od_clk_voltage"
sudo sh -c "echo 'm 2 <Your desired values here' > /sys/devices/Your/Path/Here/pp_od_clk_voltage"
sudo sh -c "echo 'c' > /sys/devices/Your/Path/Here/pp_od_clk_voltage"

Create a file in /etc/systemd/system/ like undervolt.service with the following contents:

[Unit]
Description=Undervolting GPU

[Service]
Type=oneshot
ExecStart=/Path/To/Script.sh

[Install]
WantedBy=multi-user.target

Run sudo systemctl enable undervolt.service to enable. After rebooting, verify by running cat /sys/devices/Your/Path/Here/pp_od_clk_voltage.

User Pannuba also suggest making a script to revert things to default values. This does not have to be a SystemD service.

Tool Assisted

There exists several tools to assist in AMD GPU overclocking:

  • AMDGPU Clocks, a commandline tool.

  • CoreCtrl, GUI tool for total system tuning.

  • WattmanGTK, a GTK GUI recreating the functionality of Wattman on Linux.

  • TuxClocker, a Qt5 GUI overclocking tool for Nvidia and AMD GPUs on Linux.

Each one has specific prerequisites and settings that could be posts on their own. Please reference their guides on how to setup and tune your system.

Conclusion


As you can see, AMD GPU Linux tuning is becoming a first class experience. Many of the features available to Windows users is now available to Linux users, even using the open source driver too. There are many tweaks and options you can make. I will leave the specifics to you. If you want to reduce power usage, you reduce the voltages of the P-States and even limit the power of the card. Make sure you test the stability of the card and your computer after changing anything. Read more about Radeon open source driver features here.

Please comment if you have any questions or issues with this answer. I highly suggest you read through each link I have provided thoroughly before attempting the commands. I appreciate feedback to correct any misconceptions and to improve my posts. I can update my answer as needed.

Best of Luck!

Resources


  • ArchWiki

  • Reddit user Pannuba's post

  • Radeon Open Source Features

  • Linux Reviews

  • AMDGPU Clocks

  • CoreCtrl

  • WattmanGTK

  • TuxClocker

  • GPUTest

  • Phoronix Test Suite

2 of 2
5

I'm going to complement kemotep's answer, in connection with my observations.

A small preface: English is not my native language. Please ignore semantic, syntactical errors and incorrectly chosen words.

Firstly, to limit the maximum consumption level of the card, you need to change the power1_cap file located along the path /sys/class/drm/card0/device/hwmon/hwmon*/ where an asterisk is a number, usually from 0 to 9. In the same directory, you can adjust the voltage of the card, find out the maximum allowable consumption limit of the card, and much more.

More details can be found at the following link: https://docs.kernel.org/gpu/amdgpu/thermal.html

Secondly, to write values, it is better to use the following type of command:

echo "10000000" | sudo tee /sys/class/drm/card0/device/hwmon/hwmon*/power1_cap

Let me explain why I think so. When executing the following script:

sudo sh -c "{your_commands and/some/random/path*/}"

the asterisk will not be replaced by the missing part of the name, but will be treated as a directory name. The problem is that inside the first hwmon folder, the next nested folder has a random number in its name (example: hwmon0, hwmon3, and so on). So it's important that the asterisk works as a command, not text.

Thirdly, there is probably an error in the method of saving changes described by kemotep.

When running a systemd Unit with the options given in the example, the scripts were not executed. In my opinion, the scripts are triggered before the video adapter in the system is initialized, which is why the specified paths simply do not exist. Or, there is another irresistible force, because of which the scripts refuse to be executed, I'm not an expert.

I will give an example of my unit file, and then I will explain for the parameters:

[Unit]
Description=Limit GPU Wattage

[Service]
Type=idle
ExecStart=/usr/bin/my_script.sh
ExecStartPost=/usr/bin/my_another_script.sh
Restart=on-failure
RestartSec=5
TimeoutSec=300

[Install]
WantedBy=multi-user.target
  • The "idle" value of the Type parameter is as stated on the DigitalOcean site - https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

The [Service] Section

The Type= directive can be one of the following:

... idle: This indicates that the service will not be run until all jobs are dispatched.

I understand it as "your Unit will be executed when all elements of the system are loaded". I may be wrong, but it works.

  • ExecStartPost - I added when I was looking into the cause of Unit execution errors. I split my script into two files, and here I have indicated the path to the second one. All commands can be placed in one script, but I decided to leave everything as it is.
  • Restart - responsible for restarting the script. Just in case I misunderstood the meaning of the "idle" parameter, this option should restart the Unit if it failed. It is possible to specify other restart conditions - read more at the link above.
  • RestartSec - this specifies the time to wait before performing a restart.
  • TimeoutSec - if I understand correctly, the unit's lifetime is indicated here. I specified 300 seconds. If it does not succeed within this time, the Unit's execution will abort.

Finally, I will describe what I did.

After setting up amdgpu.ppfeaturemask (more info can be found all over the internet), in the /usr/bin/ directory, I created two files:

my_script.sh

#!/bin/sh
sudo sh -c "echo 'low' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/power_dpm_force_performance_level"

my_another_script.sh

#!/bin/bash

echo "6000000" | sudo tee /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/hwmon/hwmon*/power1_cap

In the /etc/systemd/system/ directory, I created the my-gpu-setup.service file (the content was shown above).

Then, I started the service (only needs to be activated once) with the command:

sudo systemctl enable my-gpu-setup.service

And restarted the pc.

That's all.

To view information about the execution of a Unit, you can type the command:

sudo systemctl status my-gpu-setup.sevice

To roll back changes and disable the service:

  1. Type the command

    sudo systemctl disable my-gpu-setup.service

  2. Delete file from /etc/systemd/system/ directory (this action is optional).

  3. Restart a computer.

I don't see the point in creating a script to roll back the changes, since settings will be reset upon restart anyway, if you don't perform a new setup every time the system starts.

🌐
Phoronix
phoronix.com › news › AMDGPU-Lower-Power-Limit
AMDGPU Linux Driver No Longer Lets You Have Unlimited Control To Lower Your Power Limit - Phoronix
The AMDGPU Linux driver up until the recent Linux 6.7 kernel release has let you lower the power limit of your graphics card with, well, no limits... This has allowed AMD Radeon Linux users to limit their GPU power draw when desiring for power/efficiency reasons.
🌐
Level1Techs
forum.level1techs.com › operating systems & open source › linux
AMDGPU Power limits vs Windows - Linux - Level1Techs Forums
December 8, 2025 - Hi, I have a 7900xtx and running Bazzite. I noticed in LACT that my gpu has a power limit set to 291W / 350W. I remember in windows seeing my GPU reach 340W+ in games in adrenline software. Why does the amdgpu driver s…
🌐
GamingOnLinux
gamingonlinux.com › 2024 › 03 › amdgpu-driver-for-linux-67-enforces-lower-power-limits-from-vbios
AMDGPU driver for Linux 6.7 enforces lower power limits from vBIOS | GamingOnLinux
March 5, 2024 - This has been discussed on the amd-gfx M/L, and the conclusion was that under-powering outside of the bounding box is potentially dangerous and might damage the hardware. This won't be added back in. ... The change aligns the driver what has been validated on each board design. Windows uses the same limits. Using values lower than the validated range can lead to undefined behavior and could potentially damage your hardware. The other interesting information extracted from that mail list discussion is that the AMDGPU Linux driver will basically work the same way as the Windows driver, obeying the values stated at vBIOS level.
🌐
Super User
superuser.com › questions › 1747746 › amd-gpu-radeon-instinct-mi25-accelerator-has-a-power-limit-of-110w-but-it-shou
linux - AMD GPU (Radeon Instinct MI25 accelerator) has a power limit of 110W but it should be able to do 300W - Super User
October 16, 2022 - To play it safe, if your card is rated for a TDP of 300W, set your power limit well below 300W. (Thanks Tim Roberts for bringing this up!). Also I think you might need to add amdgpu.ppfeaturemask=0xffffffff to your kernel commandline parameters ...
🌐
Reddit
reddit.com › r/fedora › amd gpu power limit
r/Fedora on Reddit: AMD gpu power limit
July 20, 2022 -

Hey everyone, I'm having some trouble. I recently ran sensors and saw a sensor called ppt on my gpu that indicates that the power limit of my gpu is 186W. The gpu is a 6700xt and I'm using mesa drivers. Afaik that limit is low because I think that gpu's actual max is somewhere in the 200 range? is there a way to raise it?

🌐
Meefik
meefik.dev › 2025 › 09 › 20 › amdgpu-power-consumption
How to reduce AMD GPU power consumption on Linux | Meefik’s Blog
September 20, 2025 - echo "low" | sudo tee /sys/class/drm/card0/device/power_dpm_force_performance_level echo "auto" | sudo tee /sys/class/drm/card0/device/power_dpm_force_performance_level · To make this change permanent, create a udev rule: cat << EOF | sudo tee /etc/udev/rules.d/30-amdgpu-low-power.rules SUBSYSTEM=="pci", DRIVER=="amdgpu", ATTR{power_dpm_force_performance_level}="low" EOF
Find elsewhere
🌐
Reddit
reddit.com › r/amd › amdpwrman is a bash shell script for managing amd gpu's power limits and fan speeds under linux via the sysfs interface of the amdgpu driver.
r/Amd on Reddit: amdpwrman is a BASH shell script for managing AMD GPU's power limits and fan speeds under Linux via the sysfs interface of the amdgpu driver.
August 22, 2019 -

12/09/21: Decided to start fresh from scratch for all GPU types and adding a web interface on top of the command line interface. New program is called 'gpumgr' at https://github.com/Shaped/gpumgr.

12/07/21: Uploaded 0.05b with some fixes for having multiple GPUs/mixed GPUs in the system; fixes issues #1/#2 on github.

08/29/19: Uploaded 0.04a with alpha fan curve control support. only works on a single gpu at the moment.

08/27/19: Uploaded 0.03a with some more important details in 'show' .. Should be able to at least choose performance profile in next version..

Edit (08/24/19): Seems like quite a few people have found this useful, thus I will work to add a few more things such as performance profile/freq/OC control, fan curves and possibly NVidia support. (I'd have to throw an NV card into a Linux box to test though and I only have my RTX2060 on my main rig ATM, my 960 died :( ) -- I just moved into a new place and was setting up my miners so I threw this together but originally had not even set up my desk yet so was literally coded twisting my neck, sitting on my bed using my projector as a screen - now I have my desk setup so I should be able to nail out some good code for this once I have a minute.

I got bored. Wrote a shell script to make things easier for me to manage my AMD GPUs on Linux, mostly for mining/gpgpu purposes but will work for anyone. Figured I'd share it with the world.

This script makes it easy to change power limits and set fan speeds on AMD GPUs on Linux with the amdgpu driver installed. Just whipped this up in a few hours, so I will be adding support to change multiple GPUs at once soon (though you can still change any GPU you want)

It can also show some statistics about the GPU like temperature, current power usage, voltage and fan speeds.

https://github.com/Shaped/amdpwrman

This script is essentially a nice interface to the sysfs stuff exposed by the amdgpu driver available in /sys/class/drm/cardX/device and /sys/kernel/debug/dri/X.

Usage:

If <gpu> is ommitted from any command, GPU0 is used.

amdpwrman help | -h              Display this help message.
amdpwrman show <gpu>             Shows detailed statistics for <gpu>
amdpwrman status <gpu>           Same as above
amdpwrman power <limit> <gpu>    Sets power limit to <limit> in watts for <gpu>
amdpwrman power reset <gpu>      Resets power limit for <gpu>
amdpwrman recover <gpu>          Attempt to recover a halted or crashed <gpu>
amdpwrman fan enable <gpu>       Enables manual fan speed control for <gpu>
amdpwrman fan disable <gpu>      Disables manual fan speed control for <gpu>
amdpwrman fan <speed> <gpu>      Sets fan speed for <gpu>
amdpwrman fancurve enable <gpu>  Enables fan curve daemon for <gpu>
amdpwrman fancurve disable <gpu> Disables the fancurve daemon for <gpu>

<gpu> refers to the number of the GPU reported by the amdgpu driver.

The fan curve daemon does not need to be running for manual fan control,
it only needs to run if you want to define custom fan curves, in which
case the daemon will read from ~/.amdpwrfan to determine the curves,
which can be set by manually editing the file or using the fancurve set
command, which will create the file for you. See README.md for an
example config, or simply 'use amdpwrman fancurve enable' without a
config and amdpwrman will create a default one for you.

[fancurves] should be formatted as follows:
temp:speed for every temperature/speed you want to add
values between specified values will be interpolated

Example: To set the fan curve to 0% at 25 C, 25% at 40 C, 50% at 50 C
and 75% at 60 C, updating every 5 seconds for GPU 0, you would use:

sudo amdpwrman fancurve set 5 25:0 40:25 50:50 60:75 65:100 0

Examples:

  #$ ./amdpwrman show		Show stats for GPU0 (TODO: show stats for all gpus)
  #$ ./amdpwrman power 100		Sets power limit to 100W for GPU0
  #$ ./amdpwrman power 100 3	Sets power limit to 100W for GPU3
  #$ ./amdpwrman fan enable 3	Enables manual fan control of GPU3
  #$ ./amdpwrman fan 100 3		Sets GPU3's fan speed to 100%
  #$ ./amdpwrman fan disable	Disables manual fan control of GPU0
  #$ ./amdpwrman power reset	Resets the power limit of GPU0

Examples of Usage:
#$ ./amdpwrman show
amdpwrman 0.05b        (C) 2022 Jai B. (Shaped Technologies)        MIT License

GPU0: amdgpu dev=0000:08:00.0 unique=0000:08:00.0
GPU0: PCIe Device 0000:08:00.0 Link Speed is 4x 2.5 GT/s (GPU Max: 16x 8 GT/s)
GPU0: Vendor ID: 0x1002 / Advanced Micro Devices, Inc. [AMD/ATI]
GPU0: Device ID: 0x67df / Radeon RX570 (4GB)
GPU0: Sub-Vendor ID: 0x1462 / Micro-Star International Co., Ltd. [MSI]
GPU0: Sub-Device ID: 0x341a / RX470 Armor (4GB)
GPU0: Current GPU Usage is 100% (gpu_busy)
GPU0: Current GPU clock speed is 1036.39 mHz (sclk - freq1)
GPU0: Current Memory clock speed is 2050.00 mHz (mclk - freq2)
GPU0: Power Profile GPU Clocks: 300Mhz 588Mhz 971Mhz 1061Mhz* 1128Mhz 1191Mhz 1195Mhz 1200Mhz
GPU0: Power Profile Mem Clocks: 300Mhz 1000Mhz 2050Mhz*
GPU0: Current GPU Power Profile: 3 @ 1061Mhz mHz (1036.39 mHz actual)
GPU0: Current Mem Power Profile: 2 @ 2050Mhz mHz (2050.00 mHz actual)
GPU0: Current VRAM Activity is 97% (mem_busy)
GPU0: VRAM Used: 81.14% used 3323.75 MB (3485212672 bytes)
GPU0: VRAM Total: 18.85% free 4096.00 MB (4294967296 bytes)
GPU0: Temperature is 67 deg. C (152.60 deg. F)
GPU0: Power limit is 100 watts (Min: 0w - Max: 180w)
GPU0: Power usage is 99.16 watts (99,167 mW)
GPU0: Voltage is currently 900 mV (0.900 V)
GPU0: Fan speed for is 100% (3,130 RPM, Min: 0 RPM - Max: 5,300 RPM)
GPU0: Fan control is set to manual

#$ sudo ./amdpwrman power 100
Setting power cap for GPU0 to 100 watts
Checking if applied successfully ...... OK

#$ sudo ./amdpwrman fan 75
Current fan speed: 100% (255 / 255)
Attempting to set fan speed for GPU0 to 75% (191 / 255) ...... FAN SPEED CHANGED
Requested Speed: 75% (191 / 255)
New speed: 72% (186 / 255)

#$ sudo ./amdpwrman recover
Attempting to recover GPU0 .... SUCCESS
Note: A reboot may still be needed to fully recover GPU0.

#$ sudo ./amdpwrman power reset
Attempting to reset power cap to default .......... Power cap changed
Previous Power Cap: 100 watts
New Power Cap: 120 watts (set by driver)

Use it if you want, or don't. If you have any ideas or additions or see any issues let me know. I have only tested this so far on Ubuntu 18.04.3 (using Ubuntu's amdgpu package) with a RX570 4GB.

I plan to add the ability to view and modify clocks and performance profiles. I am also looking into the ability to manage fan curves, ideally without any full time daemon required.

If there are any other features you may want, please post them and I'll see what I can do. Please note that this is meant to be kept as a simple to use script that is easy to install and has few or no dependencies other than obviously the amdgpu driver and an AMD GPU. :-)

🌐
Lunnova
lunnova.dev › ~lunnova › articles
AMDGPU 5.15/6.x Power Limit Issues and a Bodge | lunnova.dev
September 14, 2024 - WARNING: This patch willfully ignores power limit tables and may cause your GPU to fail or damage the system it is connected to. By applying this patch you agree that you will not hold the author liable for any damage to your system. Use at your own risk. --- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c +++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c @@ -983,6 +983,7 @@ static int amdgpu_set_power_limit(void *handle, uint32_t limit) limit = hwmgr->default_power_limit; max_power_limit = hwmgr->default_power_limit; + max_power_limit = (max_power_limit * 3) / 2; if (hwmgr->od_enabled
🌐
Reddit
reddit.com › r/linux_gaming › lowering power limit of amd 7000 gpus?
r/linux_gaming on Reddit: Lowering power limit of AMD 7000 GPUs?
February 8, 2024 -

After initial install of corectrl I was able to only change my GPU limits below the original ones and it was super useful. I set it to 85W on my 7900 XTX and I was still able to game on 1440p 120Hz most of my games.

However, I wanted to also tune some other params, so I set amdgpu.ppfeaturemask to the result of printf 'amdgpu.ppfeaturemask=0x%x\n' "$(($(cat /sys/module/amdgpu/parameters/ppfeaturemask) | 0x4000))", which was amdgpu.ppfeaturemask=0xfff7ffff.

Now I can control voltage offsets, GPU clock and mem speeds, but the power limit now only goes from 294W to 402W. Any way I can keep all the custom tuning capabilities, but also reenable going lower than 294W?

EDIT: Long story short, linux kernel had some "bugfixes" that ruined TDP lowering, check out this post for solutions: https://www.reddit.com/r/linux_gaming/comments/1bgtftb/you_can_now_disable_amd_gpu_lower_power_limit/

🌐
Reddit
reddit.com › r/linux_gaming › how do i set amd gpu power limit in linux?
r/linux_gaming on Reddit: How do i set AMD GPU power limit in Linux?
May 20, 2025 -

I'm trying to play modded Skyrim, but the GPU i think is getting power spikes, this also happened on windows. There i solved it by just limiting GPU power to -2% and it seemed to work.

How do i do that here? Because i think my GPU is triggering the PSU overdraw protection, and my computer resets mid gameplay. It's not overheating because i set the fan curve to be pretty aggressive and i haven't seen it go past 80C on the hotspot so it must be the power thing.

Weirdly enough, Skyrim seems to be the only game doing this. I guess modded Skyrim is the GPU final boss. That or modded Minecraft. :P

🌐
Reddit
reddit.com › r/linux_gaming › you can now disable amd gpu lower power limit enforcement on linux-zen using amdgpu.ignore_min_pcap=1 kernel boot parameter
r/linux_gaming on Reddit: You can now disable AMD GPU lower power limit enforcement on linux-zen using amdgpu.ignore_min_pcap=1 kernel boot parameter
March 17, 2024 - I noticed the power cap on the GPU seems to be limited to ~240W in vBIOS, although there is not much more performance than at 200W. 120-165 FPS @ 1440p High w/ 2x SSAA set in a locked config.blk.
🌐
Manjaro Linux
forum.manjaro.org › support › graphics & display
Raising the power limit on my AMD RedDevil 6900XT - Graphics & Display - Manjaro Linux Forum
May 1, 2023 - Hello everyone. I am trying to raise the power limit on my AMD GPU. I’ve tried CoreCtrl, but it didn’t let me raise it as high as I wanted. I also tried to change it like the arch wiki mentions on the manual overclocking section, but it seemingly doesn’t support going higher than 293W?
🌐
ArchWiki
wiki.archlinux.org › title › AMDGPU
AMDGPU - ArchWiki
May 28, 2026 - The exact values and limits of power profiles is managed through the powerplay table system. Use upliftpowerplayAUR to modify the table for supported models (Polaris to Navi2x; Navi3x and Navi4x are bugged on kernel side). Note Power profile changes should be reapplied at every boot, see #Startup on boot to automate this. This article or section is a candidate for merging with xrandr. Notes: Not specific to AMDGPU...
🌐
Reddit
reddit.com › r/linux_gaming › gpu power limiting on amd is effectively broken with linux 6.7+
r/linux_gaming on Reddit: GPU power limiting on AMD is effectively broken with Linux 6.7+
February 17, 2024 - Most vendors are aware their cards will usually get overclocked and they plan for that with their power envelopes. The broken part is this: prior to linux 6.7 you were able to undervolt freely, now you can't past those arbitrarily high power limits set by the vendors.
🌐
Linux Mint Forums
forums.linuxmint.com › board index › main edition support › hardware support › graphics cards & monitors
Where in the file system is the setting to tune the power limit of my old AMD GPU ? - Linux Mint Forums
March 24, 2024 - MLG-443 wrote: ⤴Sun Mar 24, 2024 ... the power limit of my crusty old AMD Radeon R9 280 to prevent overheating just like I could do in Windows OSes using the AMD Radeon Software. I'm not sure why you think you need to exactly duplicate what you were doing in Windows, but Tahiti is GCN1.0+ which has experimental support for amdgpu through the use of kernel parameters. You do not need to be using the radeon driver and you do not need to be installing proprietary drivers. Linux Mint is not ...
🌐
Reddit
reddit.com › r/linux_gaming › increasing power limit in amd rx series?
r/linux_gaming on Reddit: Increasing power limit in AMD RX series?
August 29, 2018 -

Hi!

I own a RX 480 and the only way to make the GPU not throttle is by increasing the power limit, is there a way to do this on Linux or am I doomed? I searched for hours and couldn't find anything... Thanks in advance

🌐
Reddit
reddit.com › r/linux_gaming › upper bounds power limit on amd cards?
r/linux_gaming on Reddit: Upper bounds Power Limit on AMD cards?
May 19, 2024 -

Greetings, does anyone know a way to unlock the power limit for AMDs 7000 series GPUs? I have a XFX 7900 XTX Merc 310. On windows I am able to achieve power in the range of 450 watts.. however in either Arch Linux or Fedora 40, it seems that no matter what I set corectrl to it will not draw more than 350 watts, resulting in a noticeable performance difference between Windows 11 and Linux in more recent games like Ghost of Tsushima, Horizon Forbidden West and others.

I can consistently hit 3100 Mhz on the clock in Windows where it tends to cap out around 28-2900 on the Linux side. Using the latest Linux Kernel and Mesa. I've unlocked power control through the ppfesturemask kernel boot arguments. Is this just a hard coded limit imposed by AMD? A bug in the open source driver? I apologize if this has been asked but all my googling turns up AMD limiting minimum power levels not maximum.