deeper_blue Posted July 13, 2016 Posted July 13, 2016 (edited) 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, 2016 by deeper_blue 1 Quote
Lucky_n00b Posted July 14, 2016 Posted July 14, 2016 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, Quote
elmor Posted July 14, 2016 Posted July 14, 2016 Cool You're using AMD ADL or GPUPerfAPIs? I'll send you a PM with further register information. Quote
deeper_blue Posted July 14, 2016 Author Posted July 14, 2016 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. Quote
xoqolatl Posted July 14, 2016 Posted July 14, 2016 Pls compile again in Release configuration - right now it requires debug DLLs (*ud.dll) Quote
deeper_blue Posted July 14, 2016 Author Posted July 14, 2016 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? Quote
deeper_blue Posted July 17, 2016 Author Posted July 17, 2016 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 Quote
Mack4033 Posted July 18, 2016 Posted July 18, 2016 I am willing to send you some cards to test. Quote
deeper_blue Posted July 18, 2016 Author Posted July 18, 2016 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. Quote
gupsterg Posted July 21, 2016 Posted July 21, 2016 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 . Quote
buildzoid Posted July 21, 2016 Posted July 21, 2016 (edited) 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, 2016 by buildzoid Quote
gupsterg Posted July 21, 2016 Posted July 21, 2016 Buildzoid, MSI AB has an inbuilt i2c tool, via command line you can send register/data value you wish to set. Quote
deeper_blue Posted July 21, 2016 Author Posted July 21, 2016 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 Quote
gupsterg Posted July 21, 2016 Posted July 21, 2016 (edited) 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, 2016 by gupsterg Quote
buildzoid Posted July 21, 2016 Posted July 21, 2016 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. Quote
deeper_blue Posted July 22, 2016 Author Posted July 22, 2016 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. Quote
deeper_blue Posted July 22, 2016 Author Posted July 22, 2016 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. Quote
buildzoid Posted July 22, 2016 Posted July 22, 2016 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. Quote
deeper_blue Posted July 22, 2016 Author Posted July 22, 2016 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? Quote
buildzoid Posted July 22, 2016 Posted July 22, 2016 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. Quote
gupsterg Posted July 23, 2016 Posted July 23, 2016 (edited) Thank you! I'll have to take a closer look at those addition registers. WIP . Edited July 23, 2016 by gupsterg Quote
deeper_blue Posted July 24, 2016 Author Posted July 24, 2016 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. Quote
gupsterg Posted July 24, 2016 Posted July 24, 2016 Added you access , I think I have found OTP , VR_Hot is evading me . Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.