UPP: Uplift Power Play
A tool for parsing, dumping and modifying data in Radeon PowerPlay tables
UPP is able to parse and modify binary data structures of PowerPlay tables
commonly found on certain AMD Radeon GPUs. Drivers on recent AMD GPUs
allow PowerPlay tables to be dynamically modified on runtime, which may be
known as "soft" PowerPlay table. On Linux, the PowerPlay table is by default
Alternatively, one can use this tool to get PowerPlay data by:
This tool currently supports parsing and modifying PowerPlay tables found on the following AMD GPU families:
Note: iGPUs found in many recent AMD APUs are using completely different PowerPlay control methods, this tool does not support them.
WARNING: Authors of this tool are in no way responsible for any damage that may happen to your expansive graphics card if you choose to modify card voltages, power limits, or any other PowerPlay parameters. Always remember that you are doing it entierly on your own risk!
If you have bugs to report or features to request please create an issue on: https://github.com/sibradzic/upp
Python 3.6+, click library. Optionally, for reading "soft" PowerPlay table from Windows registry: python-registry. Should work on Windows as well (testers wanted).
At its current form this is a CLI only tool. Getting help:
upp <command> --help
Upp will only work by specifying a command which tells it what to do to one's Radeon PowerPlay table data. Currently available commands are:
So, an usage pattern would be like this:
upp [OPTIONS] COMMAND [ARGS]...
Some generic options applicable to all commands may be used, but please note that they have to be specified before an actual command:
-p, --pp-file <filename> Input/output PP table file. -f, --from-registry <filename> Import PP_PhmSoftPowerPlayTable from Windows -d, --debug / --no-debug Debug mode. -h, --help Show help.
The dump command de-serializes PowerPlay binary data into a human-readable text output. For example:
In standard mode all data will be dumped to console, where data tree hierarchy is indicated by indentation. In raw mode a table showing all hex and binary data, as well as variable names and values, will be dumped.
Use extract command for this. The source video ROM binary must be specified
-r/--video-rom parameter, and extracted PowerPlay table will be saved
into file specified with generic
-p/--pp-file option. For example:
upp --pp-file=extracted.pp_table extract -r VIDEO.rom
Default output file name will be an original ROM file name with an additional .pp_table extension.
Use inject command for this. The input video ROM binary must be specified
-i/--input-rom parameter, and the output ROM can be specified with an
-o/--output-rom parameter. For example:
upp -p modded.pp_table inject -i original.rom -o modded.rom
WARNING: Modified vROM image is probalby not going to work if flashed as is to your card, due to ROM signature checks on recent Radeon cards. Authors of this tool are in no way responsible for any damage that may happen to your expansive graphics card if you choose to flash the modified video ROM, you are doing it entierly on your own risk.
The get command retrieves current value of one or multiple PowerPlay table
parameter value(s). The parameter variable path must be specified in
notation, for example:
upp get smc_pptable/FreqTableGfx/1 smc_pptable/FreqTableGfx/2 1850 1400
The order of the output values will match the order of the parameter variable paths specified.
The set command sets value to one or multiple PowerPlay table
parameter(s). The parameter path and value must be specified in
/<param>=<value> notation, for example:
upp -p /tmp/custom-pp_table set --write \ smc_pptable/SocketPowerLimitAc/0=100 \ smc_pptable/SocketPowerLimitDc/0=100 \ smc_pptable/FanStartTemp=100 \ smc_pptable/FreqTableGfx/1=1550
--write parameter, which has to be specified to actually commit
changes to the PowerPlay table file.
Note that if you need to run upp deployed with pip in
--user mode with
sudo, you'll need to add some parameters to sudo command to make user env
available to super-user. For example:
sudo -E env "PATH=$PATH" upp --help