Jump to content
HWBOT Community Forums

VRMtool - a simple tool to read and write to I2C VRM controllers


deeper_blue

Recommended Posts

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.

 

 

attachment.php?attachmentid=4499&d=1468787674

Edited by deeper_blue
  • Confused 1
Link to comment
Share on other sites

Interesting tool you have there man, thanks for sharing it :D

 

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,

Link to comment
Share on other sites

Interesting tool you have there man, thanks for sharing it :D

 

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.

Link to comment
Share on other sites

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

 

attachment.php?attachmentid=4500&d=1468788458

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

 

 

LvpKyEY.jpg

 

 

Do you have any registers information besides ones in your app/my image?

 

Cheers :) .

Link to comment
Share on other sites

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 by buildzoid
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 by gupsterg
Link to comment
Share on other sites

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.

 

 

LvpKyEY.jpg

 

 

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

 

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...