Hello,
I’m the developer of Saku Overclock, a Windows application for overclocking AMD Ryzen laptops and desktops. My project relies on WinRing0 and ZenStates-Core as a backend, but after antivirus issue I need to migrate to other solutions such as your project. But as for now with PawnIO I have encountered several blocking issues while working with the SMU module.
Environment
- CPU: AMD Raven Ridge
- SMU Version: 30.66.0
- PM Table Version: 0x001E0004
- PawnIO version: latest master
Issues
-
RyzenSmu module fails to load
- Error:
failed loading PawnIO module: 8007001f
- Repro: Compiling RyzenSmu.p and trying to load it with pawnio_load → always fails.
Your official compiled version is working but PM Table reading fails.
-
AMDFamily17.p compiles and passes tests but cannot be loaded in C#
- Call:
pawnio_load(handle, buffer, (IntPtr)buffer.Length)
- Exception:
System.ArgumentException: Value does not fall within the expected range
-
Incorrect command in transfer_table_to_dram()
-
PM Table reading fails
-
RyzenSMU Module isn't loading on Granite Ridge at all
- For Granite Ridge (Ryzen 9000, almost 80% of all AM5 CPUs) your official module isn't loading at all. Detecting CPU codename as Colfax and all commands return zero.
Feature Request: External SMU Command Interface
For my project (and possibly other tools built on PawnIO), I would like to request a clean and safe interface for sending SMU commands. My project is using SMU interface to do all work and I need this ability.
Proposal:
-
Add a new IOCTL definitions:
DEFINE_IOCTL_SIZED(ioctl_send_mp1_command, ...)
DEFINE_IOCTL_SIZED(ioctl_send_rsmu_command, ...)
-
Input:
- Command ID (restricted to 0x01 – 0xFF)
- 6 arguments
-
Output:
- Status code
- Up to 6 return arguments
-
For security, it is worth writing down all possible addresses and defining them during module initialization, so no one will have the opportunity to pre-define them. The actual SMU addresses should depend on the detected codename.
This would allow external software to interact with SMU safely. It would also enforce limits (command range 0x01–0xFF) to prevent unsafe usage.
Smu interface will not affect the antivirus software in any way
Why this matters
- My application Saku Overclock is actively used by Ryzen laptop users who need stable overclocking/undervolting features.
- Current implementation in PawnIO is incomplete and sometimes incorrect for certain CPU families (e.g., Raven Ridge, Granite Ridge).
- Without the ability to send SMU commands directly, integration is impossible — I need access to hardware.
- I can't contribute to this project - right now, nothing loads on my system, which blocks all progress. All my compiled modules are not working.
I’m ready to collaborate, provide detailed debug logs, screenshots, and test builds. But at the current state, it’s simply not possible to move forward unless at least a minimal SMU command interface exists and modules can be loaded reliably.
Thanks in advance, and I really appreciate the work you’ve already put into PawnIO!
Erruar
Hello,
I’m the developer of Saku Overclock, a Windows application for overclocking AMD Ryzen laptops and desktops. My project relies on WinRing0 and ZenStates-Core as a backend, but after antivirus issue I need to migrate to other solutions such as your project. But as for now with PawnIO I have encountered several blocking issues while working with the SMU module.
Environment
Issues
RyzenSmu module fails to load
failed loading PawnIO module: 8007001fYour official compiled version is working but PM Table reading fails.
AMDFamily17.p compiles and passes tests but cannot be loaded in C#
pawnio_load(handle, buffer, (IntPtr)buffer.Length)System.ArgumentException: Value does not fall within the expected rangeIncorrect command in transfer_table_to_dram()
For Raven Ridge, the correct command is 0x3D, not 0x06.
Current implementation:
Should be:
PM Table reading fails
Debug log:
The PM table base address and size are detected correctly, but actual reading crashes. I think it can be because of wrong command as I said above.
RyzenSMU Module isn't loading on Granite Ridge at all
Feature Request: External SMU Command Interface
For my project (and possibly other tools built on PawnIO), I would like to request a clean and safe interface for sending SMU commands. My project is using SMU interface to do all work and I need this ability.
Proposal:
Add a new IOCTL definitions:
Input:
Output:
For security, it is worth writing down all possible addresses and defining them during module initialization, so no one will have the opportunity to pre-define them. The actual SMU addresses should depend on the detected codename.
This would allow external software to interact with SMU safely. It would also enforce limits (command range 0x01–0xFF) to prevent unsafe usage.
Smu interface will not affect the antivirus software in any way
Why this matters
I’m ready to collaborate, provide detailed debug logs, screenshots, and test builds. But at the current state, it’s simply not possible to move forward unless at least a minimal SMU command interface exists and modules can be loaded reliably.
Thanks in advance, and I really appreciate the work you’ve already put into PawnIO!
Erruar