Announcement

Collapse
No announcement yet.

Is there a way to undervolt a Polaris GPU without patching the kernel driver?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Is there a way to undervolt a Polaris GPU without patching the kernel driver?

    Hello all,

    I have a reference design RX480 8Gb ever since it came out - or pretty much. It's a nice card, well supported with the open source driver, however it's NOISY at load. I tested AMD's tuning utility on Windows, and I could undervolt power states 6 and 7 to 1050mV without any loss neither in performance nor stability - but the card sure got quieter!

    I'm wondering if there's a way to define the card's power state voltages through a kernel parameter, a configuration file or at worst through editing the card's VBIOS (I did that on my RadeonHD 4850 back in the day, to lower the idle clock speeds and max power voltages, to great success), as I mainly play games under Linux nowadays.

    Thanks!

  • #2
    So I guess I could echo some values, due to the way they're named I guess it'd be somewhere in /sys/class/graphics/fb0/device/i2c-[6-7] - thing is, I have no idea which, what, where, how nor when.

    Comment


    • #3
      In the 2xx series you could flash a firmware with lower voltage. If there's a less problematic solution it'd probably be better.

      Comment


      • #4
        Originally posted by debianxfce View Post

        Surf in the sources, you will find commands that sysfs supports.
        https://cgit.freedesktop.org/~agd5f/...-next-4.12-wip
        I don't mind "RTFM", but I'm no C programmer and I have no idea how's the project resource files are dispatched - reading pages and pages of code I don't understand looking for an eventual tidbit of information (forget about grepping it as I have no idea what keyword to look for - and no, 'sysfs' isn't a given) is not exactly user-friendly. Even worse, considering radeonsi has a dedicated page on freedesktop.org, THAT's where it should be documented.

        Comment


        • #5
          Has anyone figured out the answer?

          Comment


          • #6
            Originally posted by atmartens View Post
            Has anyone figured out the answer?
            The post above is to just set the DPM peformance level, which will just set it to a lower DPM state and reduce clock/voltage. Real over/under volting is exposed here:

            /sys/class/drm/card0/device/pp_table

            The voltage table is in there, so just a matter of finding the offset for the highest state and putting your desired voltage value in there in little endian hex. Im not sure this pp_table responds to changes on the stock 4.4 kernel, but pretty sure it works on the latest kernels.

            Comment


            • #7
              Originally posted by jstefanop View Post

              The post above is to just set the DPM peformance level, which will just set it to a lower DPM state and reduce clock/voltage. Real over/under volting is exposed here:

              /sys/class/drm/card0/device/pp_table

              The voltage table is in there, so just a matter of finding the offset for the highest state and putting your desired voltage value in there in little endian hex. Im not sure this pp_table responds to changes on the stock 4.4 kernel, but pretty sure it works on the latest kernels.
              That's good to know, I'll have a look at it next. Though at this rate I'm more headed towards a VBIOS patch.

              Comment


              • #8
                Hi!

                Any updates on investigations of /sys/class/drm/card0/device/pp_table ? Did you manage to downvolt the card without VBIOS patch? How can I see what is what in that file? Who creates it?

                There are lots of questions as I'm new to all of this driver, gpu, linux stuff, but I want to optimize my card Thanks!

                Comment


                • #9
                  Originally posted by jstefanop View Post

                  The post above is to just set the DPM peformance level, which will just set it to a lower DPM state and reduce clock/voltage. Real over/under volting is exposed here:

                  /sys/class/drm/card0/device/pp_table

                  The voltage table is in there, so just a matter of finding the offset for the highest state and putting your desired voltage value in there in little endian hex. Im not sure this pp_table responds to changes on the stock 4.4 kernel, but pretty sure it works on the latest kernels.
                  But how do I read that? If I do cat /sys/class/drm/card0/device/pp_table, I guess binary noise... How can I parse, then pass values, to that?

                  Comment


                  • #10
                    Originally posted by mitch074 View Post

                    But how do I read that? If I do cat /sys/class/drm/card0/device/pp_table, I guess binary noise... How can I parse, then pass values, to that?
                    At least under root you can save it and write saved file back to pp_table.

                    Comment

                    Working...
                    X