Posted July 13, 20168 yr VRMtool 0.04 (2016-07-17) To simplify poking around in I2C registers I wrote a simple tool to dump and modify the I2C registers of VRM controllers connected to AMD/ATI cards. This now evolved into a handy tool to control many aspects of supported VRM chips. Currently I only have the RX 480 reference card to test and as such only for the IR3567B the tool is able to interpret and change some of the PMBus commands and I2C registers. Additional information about registers of this and other voltage controller chips are very welcome. Special thanks go to elmor for helping with the IR3567B PMBus commands. The tool makes intense use of the I2C bus while it is running so you will likely notice microstutters in 3d games/benchmarks. A future version will allow to start/stop live monitoring to allow benchmark runs without needing to close the tool. RX 480 + IR3567B specific support live graphs for temperature, output voltage, output current and input power override VID change voltage offset change output current scaling phase load balancing/gain (move more/less load to PCIe 6pin) enable/disable load line change load line slope change VRM PWM frequency Changelog v0.04 live graphs for temperature, output voltage, output current and input power added controls to override VID, add a voltage offset, change output current scaling, phase load balancing (move more load to PCIe 6pin), load line enable/disable + slope, VRM PWM frequency v0.03 minor bugfixes including not uploading the debug version DISCLAIMER: I take no responsibility at all. I can not be held responsible. Everything you do is on your own risk. Edited July 18, 20168 yr by deeper_blue
July 14, 20168 yr Interesting tool you have there man, thanks for sharing it Previously, I use afterburner to send i2c command (simple command like MSIafterburner.exe /wi6,08,8D,xx where xx is the value you wanted, wrote the test in Indonesian here), so a tool like yours could come in handy indeed Out of some RX480 that I tried, some actually scales with volts, my random reference that hits 1360Mhz on 1.15v(1.125v after loadline), can be pushed further to hit 1400Mhz @ 1.17v. But adding volts really make that GPU draws a LOT more power, I think we can expect 250W power draw at around 1500Mhz 1.25V-1.275v - pretty sad efficiency for 14nm, guess that 14nm LPP isn't that good at the high voltage range. Maybe I'll try it after I got time to play with RX480 on cold Cheers,
July 14, 20168 yr Cool You're using AMD ADL or GPUPerfAPIs? I'll send you a PM with further register information.
July 14, 20168 yr Author Interesting tool you have there man, thanks for sharing it Previously, I use afterburner to send i2c command (simple command like MSIafterburner.exe /wi6,08,8D,xx where xx is the value you wanted, wrote the test in Indonesian here), so a tool like yours could come in handy indeed Thanks! I was annoyed by using AB to send i2c commands and wanted to quickly change registers - hence I hacked up this too. Cool You're using AMD ADL or GPUPerfAPIs? I'll send you a PM with further register information. So far I'm using AMD ADL as I haven't yet figured out a way to directly access the I2C buses. And as it seems I can't use ADL to send PMBus formatted commands to the chip as it is pure I2C only - but I assume the I2C registers should contain all information that is also available over PMBus.
July 14, 20168 yr Pls compile again in Release configuration - right now it requires debug DLLs (*ud.dll)
July 14, 20168 yr Author Pls compile again in Release configuration - right now it requires debug DLLs (*ud.dll) Oh my. Thanks for pointing that out! I uploaded a new version, this time compiled as release. Could you give it a try?
July 17, 20168 yr Author I just uploaded version 0.04 which is basically a complete overhaul. Now has live graphs and tons of controls: RX 480 + IR3567B specific support live graphs for temperature, output voltage, output current and input power override VID change voltage offset change output current scaling phase load balancing/gain (move more/less load to PCIe 6pin) enable/disable load line change load line slope change VRM PWM frequency
July 18, 20168 yr Author I am willing to send you some cards to test. Thanks for the offer! But since I'm currently living in Germany that might be a little expensive. AFAIK some of the other AMD designs for Hawaii and Fiji also use the IR3567B, so if someone with one of those cards could try running the tool that would be great. Maybe restrain yourself from pressing any of the buttons for now.
July 21, 20168 yr deeper-blue Thanks for app creation . I would like to share some register data which I have collected:- i) some from testing myself. ii) some from ROM (VoltageObjectInfo) / i2cdump compares of various cards. iii) some from posts by The Stilt, Unwinder (author of MSI AB) and elmor/der8auer RX 480 ROM. Do you have any registers information besides ones in your app/my image? Cheers .
July 21, 20168 yr Thanks for the offer! But since I'm currently living in Germany that might be a little expensive. AFAIK some of the other AMD designs for Hawaii and Fiji also use the IR3567B, so if someone with one of those cards could try running the tool that would be great. Maybe restrain yourself from pressing any of the buttons for now. All 290/290X/390/390X/Fury/FuryX cards use the 3567B. The 3567B is the only controller that supports AMD's new power management systems on those cards and so all of them have to use it. Is there anything I can pull from my cards so that you can make the tool Fury X compatible? I tried the current version and trying to do anything with the tool causes the card to crash and shut down the voltage controller. Edited July 21, 20168 yr by buildzoid
July 21, 20168 yr Buildzoid, MSI AB has an inbuilt i2c tool, via command line you can send register/data value you wish to set.
July 21, 20168 yr Author All 290/290X/390/390X/Fury/FuryX cards use the 3567B. The 3567B is the only controller that supports AMD's new power management systems on those cards and so all of them have to use it. Is there anything I can pull from my cards so that you can make the tool Fury X compatible? I tried the current version and trying to do anything with the tool causes the card to crash and shut down the voltage controller. Oh well, looks like I have to get my hand on another card. I fear using I2C on Fiji based cards might be very unstable and not reliably possible: Enabling ADL makes the AMD Fury crash
July 21, 20168 yr I've had no issues sending i2c commands to Fury X via MSI AB . I've done voltage offset loop 1 & 2 (ie registers 8D and 8E), I've also played with the dual voltage offset (register 26). Why I think HWiNFO had issue with using i2c bus for monitoring is that the SMC keeps bus busy between it and IR3567B, sending one off command is different than constantly communicating with IR3567B IMO. If I do an i2cdump via MSI AB it takes ages compared with a Hawaii card, again as the dump process is constantly trying to use the i2c bus. If I use the read command for specific registers via MSI AB command line it is instantaneous read back. Only Unwinder on Guru3D has warned me against using i2c on Fury X due to SMC, but on The Stilt's instructions for a query I had on register 26 I used it, as he gave no warning I would think it's ok. I only send i2c commands when no monitoring in background/idling @ desktop. Edited July 21, 20168 yr by gupsterg
July 21, 20168 yr Oh well, looks like I have to get my hand on another card.I fear using I2C on Fiji based cards might be very unstable and not reliably possible: Enabling ADL makes the AMD Fury crash That must be why it crashes for me. Oh well I guess I'll just have to go through afterburner.
July 22, 20168 yr Author deeper-blue Thanks for app creation . I would like to share some register data which I have collected:- i) some from testing myself. ii) some from ROM (VoltageObjectInfo) / i2cdump compares of various cards. iii) some from posts by The Stilt, Unwinder (author of MSI AB) and elmor/der8auer RX 480 ROM. Do you have any registers information besides ones in your app/my image? Cheers . Thank you! I'll have to take a closer look at those addition registers. The tool lists all the registers and how to read them that I'm currently sure about. In addition to that there're some PMBus commands used to talk to the PMBus interface of the VRM (the chip shows up as both an I2C device for direct register access and as a PMBus device that gives a certain level of abstraction.
July 22, 20168 yr Author That must be why it crashes for me. Oh well I guess I'll just have to go through afterburner. Does it already crash from just opening the tool and it live updating the graphs/data? I have to see if I can get ahold of a Fiji based card or find someone near me that has one.
July 22, 20168 yr Does it already crash from just opening the tool and it live updating the graphs/data?I have to see if I can get ahold of a Fiji based card or find someone near me that has one. Pretty much it crashes after running for a bit. The time interval for the crash is random. I tried using afterburner's I2C to change Iscale but it didn't do anything for the negative performance scaling.
July 22, 20168 yr Author Pretty much it crashes after running for a bit. The time interval for the crash is random.I tried using afterburner's I2C to change Iscale but it didn't do anything for the negative performance scaling. Could you see a drop in reported power usage in the GPU-Z sensors tab when changing the lscale value? Also what is the default register value on the Fury X?
July 22, 20168 yr Could you see a drop in reported power usage in the GPU-Z sensors tab when changing the lscale value? Also what is the default register value on the Fury X? GPU-z doesn't have power readouts for the Fury X. So I can't check. I just went of your data for the registers so I just changed 4D from 60 to 20.
July 23, 20168 yr Thank you! I'll have to take a closer look at those addition registers. WIP . Edited July 23, 20168 yr by gupsterg
July 24, 20168 yr Author WIP . Awesome work! I started a similar document before working on the tool - I will see that I can implement all those additional registers. What is missing is that in addition to the i2c interface that allows the register access the IR3567B also has an i2c PMBus interface (maybe two on devices on which both loops are used) that is mainly used by other tools to read voltage/current/power. But it also has some functions that can be called and are useful. I send you a request for write access on the document.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.