Skip to content
Falcosc edited this page Nov 26, 2023 · 13 revisions

Functional Questions

Is Ryzen Desktop supported?

Because most Desktop motherboards have possibilities to properly tweak all limits, this project does focus on mobile platforms with limited BIOS options.

Please use your BIOS or Ryzen Master. If both do not work for you, have a look on ZenStates or ZenStates-Linux these are focused on Desktop support.

If you have a good reason to not use ZenStates, please tell us. Compelling reasons could convince us to spend time porting something over from ZenStates to RyzenAdj.

Undervolting Support?

We didn’t found any ways to change voltage on mobile platforms so far.

Does it keep the values after restart?

No, during boot factory settings gets applied.

Why do I lose my values even without restart?

Each power change like disconnecting power cord or changing energy saving modes does trigger setting of vendor defined limits and will overwrite your values. You need to reapply values after each change.

On some devices values get reset regularly after some time, even without power mode change.

That’s not a problem with RyzenAdj but probably your ACPI table or EC or AMD SMU itself. Since the RyzenAdj is doing basically identical with what DSDT injection did. There must be something that is fighting against your adjustments.

Execute ryzenAdj --info from time to time to check if your limits are still in place.

Temperature or Power limit does not work

There are at least 2 different Problems:

  • You hit other limits

  • Your limit was not adjusted despite getting the applied successful message

CPU Power management is the result of more than 10 parameters, any of them does affect your CPU clock, not only the ones you try to adjust. To analyze what is happening on your system you need to check the Power Metrics Table (PMTable). You don’t need to check all 500 values, for a quick overview, we did arrange the most important metrics as table output of ryzenAdj --info

Other Limits

If your custom limit value is reported in PMTable, but it shows that the actual value is below your custom limit definition

  • you maybe hitting other limits reported by PMTable, run a benchmark and execute ryzenAdj --info during peak load to check which limit is holding you back

  • or you are hitting hidden limits which are not reported by PMTable

  • Maybe ACPI/EC is pulling the limit. Probably ACPI edit or other hacks can disable this limit. But we don’t cover these types of hacks here.

Misleading applied successful message

Sometimes you get successful messages even if the value was not changed or if the value was capped during adjustment Check if your limit got applied by inspect the power metric table values by using ryzenAdj --info

If your custom value is not shown in the PMTable:

  • your command did not work because it is not supported by your device

  • value got capped by the allowed value range

  • value got already overwritten by something else

If --info doesn’t contain your option name or if you can not identity if the problem was a value range or if it was overwritten by something else --dump-table will show all PMTable entries. To differentiate between "value was overwritten" and "value was capped by value range" you should append the --dump-table option to your adjustment parameter list. This will print PMTable before and after Adjustment. This is happening so fast that nothing can overwrite your value in this split second.

Would it be possible to add fan control functionality?

Well that’s out of our scope.

Different platforms have their own ways to control fans, we don’t want to adopt thousands of platforms. RyzenAdj intends to be utility to adjust CPU power management settings.

You may check nbfc and other tools.

Would it be possible to reset values without restart?

No because we don’t know if something did already change the limits. You can output the actual limits with ryzenAdj --info It is not possible to read the real default values. Default values get set during boot process via BIOS. But anything can overwrite these values like for example when you change to battery power some values already get overwritten.

It is only possible to read the actual limits from PMTable. But we will not implement any kind of automatic reset functionality because: - PMTable does not have values for all adjustment options - a reset function raises wrong expectations by the user. There is always a risk that some option does not work on all possible platforms, so reset will always be incomplete, - PMTable does exist in multiple versions, readout errors could lead into wrong resets. Or more clearly setting random values totally uncontrolled by the user which could harm your system even more.

It is more easy to just restart your system to apply default values. Or just run ryzenAdj --info before adjusting anything and write down what values are default.

We did include python examples for PM Table monitoring as well.

How to fix the boost delay issue?

This is a battery only topic. You may have heard about that AMD Notebooks are running slow in the first 10s. That’s true for at least Zen+ and Zen2. You can use the --max-performance option to load the AC-Power Profile. On most devices this will only change the boost delay. AMD did introduce it because at the start of any workload CPU doesn’t know if you do some heavy number crunching or if it is just refresh of all your communication apps. To avoid unnecessary boosts, the most efficient way is to limit the CPU clock between 1500Mhz and 3000Mhz. AMD choose 2400Mhz for Zen+ and 2500Mhz for Zen2.

Can I use --max-performance while on Cable?

--max-performance is basically the cable power profile, it would not make sense to set this option for usage while on AC power source. Your Laptop does already set it automatically. On all tested laptops, power saving and max performance bits are never set both at the same time during power state change. The behavior lets us believe that max-performance power-saving does counter each other.

Does --power-saving improve battery runtime?

No, it doesn’t because your laptop does set this option automatically each time you unplug the power cord. So technical it does, but you don’t need to set it because it gets set automatically.

But if you are running on cable, you might want to use it. It is possible to enable this battery tuning mode while connected to AC power source. It does cut your idle power consumption in half. So on things like youtube or other light workloads your system will run cooler, and you are doing something for the environment. The downside is a minor performance reduction in the first 10 seconds of each workload. After 10s of load you are back at peak performance.

Zen3 limits cannot be raised enough, why is it not working?

Vendors got a new way to lock the power management on Zen3, read more about it here: Custom value range for Zen3

There is a workaround, you can do a trick to never hit the STAPM Limit by resetting the STAPM usage. The trick works best if you set the maximum STAPM duration. We did include it in the readjustService.ps1 example script, where it does execute this workaround every ~2-3 minutes of constant CPU load. Just enable the feature by setting it to true.

# some Zen3 devices have a locked STAPM limit, this workarround resets the stapm timer to have unlimited stapm.
$resetSTAPMUsage = $true

Error Handling

Error Message pcilib: sysfs_write: write failed: Operation not permitted

Try to turn off secure boot.

Error Message WinRing0 Err: 0x2 Unable to get PCI Obj

You need to run ryzenAdj as administrator because accessing PCI isn’t allowed in user mode If you’re already running as administrator, check if you have enabled Windows Defender> Device Security > Core Isolation > Memory Integrity because ryzenadj doesn’t work with this enabled for some users.

WinRing0 Err: Driver not loaded Unable to get PCI Obj, check permission

You need to run ryzenAdj as administrator because accessing PCI isn’t allowed in user mode. WinRing0 driver will refuse to load if you don’t have enough permissions. Maybe Anti Cheat or Anti Virus software can prevent the Winring0 driver from loading, too. But we are not sure about this.

Error Message Unable to init ryzenadj, check permission

This message is used for all kinds of initialization errors. Please try to fix it by going through the solution descriptions of the other error messages.

inpoutx64 got blocked by Anti Cheat software

inpoutx64.dll contains inpoutx64.sys which is a driver to enable access to the whole physical memory. It is used to access the PM Table to enable monitoring. You can remove the file if you have trouble with it, adjustments will still work. Only --info and --dump-table does use the PM Table. If you are using the PowerShell script, you need to disable monitorField because monitoring will not work without inpoutx64.dll