Native RyzenAdj STAPM continuous override for lower overhead implemented in C
uses https://github.com/FlyGoat/RyzenAdj library
Ported powershell script here FlyGoat/RyzenAdj#145
additional modification for force resetting stapm_limit every loop for some AMD Laptop UEFIs that restricts it.
Tested on Thinkpad L15 Gen 1 w/ 4750u, L15 Gen 2 w/ 5850u, T14 G2 20XK0015US with 5650u. (balanced power profile with power slider at Best performance, Windows 10 22H2, Windows 11 22H2) Reaches up to manufacturer limited 48w for fast power limit Uses 12ms sleep interval to hit specified fast power limit exactly, but if a target power is desired that's less than fast power limit, can modulate sleep interval with fast at max, in order to hit a slightly higher average power than manufacturer restricted slow limit (this way it's less overhead and calls to set limits, in a way it's like PWM)
Parameter dump and info
ryzenadjtimer.exe -D 0
(4 is default log level, which will show when it resets, 0 disables logs, but errors are printed to stderr)
[Q]-Quit [Backspace]-Show vals in title [DEL]-Print vals [INS]-Print args
[ 0] (1:reset) (setfn:1) -a --stapm_normal_limit 100000 (0x186a0)
[ 1] (0:init) (setfn:1) -b --fast_normal_limit 100000 (0x186a0)
[ 2] (0:init) (setfn:1) -c --slow_normal_limit 100000 (0x186a0)
[ 3] (0:init) (setfn:1) -d --slow_time_target 500 (0x1f4)
[ 4] (0:init) (setfn:1) -e --stapm_time_target 500 (0x1f4)
[ 5] (0:init) (setfn:1) -f --tctl_temp 100 (0x64)
[ 6] (0:init) (setfn:1) -g --vrmmax_current 100000 (0x186a0)
[ 7] (0:init) (setfn:0) -h --slow_reset_limit 32000 (0x7d00)
[ 8] (0:init) (setfn:0) -i --stapm_reset_limit 20000 (0x4e20)
[ 9] (0:init) (setfn:0) -D --debuglevel 0 (0x0)
[10] (0:init) (setfn:0) -S --sleepms 12 (0xc)
[11] (0:init) (setfn:0) -E --statusdelay 970 (0x3ca)
[12] (0:init) (setfn:0) -T --dispstatus 0 (0x0)
[13] (0:init) (setfn:0) -I --titlestatus 0 (0x0)
[14] (0:init) (setfn:0) -H --hotkeys 1 (0x1)
[15] (0:init) (setfn:0) -R --resetvalbitmask 1 (0x1)
Running ryzenadj
Defaults max out to 100 watts, max current, use at your own risk, and watch temps.