Power Control Settings aka PowerTune

  • krumplee

    krumplee - 2011-05-15

    Hello developers,

    There is a 'Power Control Settings' option in the Windows version of CCC and can be set between -20% to +20%
    Does AmdOverdriveCtrl can do the same to achieve that extra performance on my Radeon HD 6970 under linux?
    May be setting the voltage is the same?


  • Thorsten Gilling


    I'm not entirely sure, what Powertune really does. As far as I know it's a windows only thing.  It must be some sort of dynamic adjustement of frequencies and voltages based on the current temperature, load and other values of the card.

    Setting parameters of the graphic card with AMDOverdriveCtrl is more static and only possible within the range the ADL/BIOS allows.

  • krumplee

    krumplee - 2011-05-16


    Yes, dynamic adjustment, but you still can set the limits when triggered…

    After checking libatiadlxx.so I found 2 methods to set PowerControl.
    Then I have disassembled to find how to parameter them,
    These two are tested with Catalyst 11.5 with ADL_SDK 3.0 under Linux.

    int ADL_Overdrive5_PowerControl_Set( int adapterIndex, int percent );
    int ADL_Overdrive5_PowerControl_Get( int adapterIndex, int *result_percent, int *result_unknown );

    Percent value can be between -20 and +20 as on Windows.

    Raising to 20% sets the new maximum TDP to 300W on HD6970 which is still within ATX specifications.

    I did not figure out yet what is the 3rd parameter in PowerControl_Get, but not really interested since now I can get that extra performance I need.

    I hope you will implement setting these values into AMDOverdriveCtrl

  • Thorsten Gilling

    Good job!

    Let's see what we can do with these functions…

  • Thorsten Gilling


    added Powertune settings in Version 1.2.0.

    May I ask you to test it because I only have a 4870 which does of course not support this feature.

    Thanks in advance.

  • krumplee

    krumplee - 2011-05-24


    Yes I will do it, but need to install wxwindows tomorrow.
    Anyway the ATI driver and the PowerControl_Set command works for me in my application as expected.

  • krumplee

    krumplee - 2011-05-27

    Haven't played with your software, but instead I did some further research.
    After debugging aticonfig I found that it uses different method to get/set clocks of a device.

    int ADL_OD_Clocks_Get(0, &clk, 256 or 512);
    First parameter is always 0, but it is the adapter index.
    The second parameter is a structure
    typedef struct
    int engineClock;
    int memoryClock;
    int vddc;
    int engineClockMin;
    int engineClockMax;
    int memoryClockMin;
    int memoryClockMax;
    int cpuUsagePercent;
    int unknown3;
    int unknown4;
    } sClock;
    The last parameter can be either 256 or 512 and if you have more than 2 cards 768 or 1024

    Lets look at how to change the values:

    int ADL_OD_Clocks_Set(0, 950, 1375, 0, 256 or 512);
    The first parameter is looks like the adapter index, but aticonfig always sets this to 0
    Second parameter is the GPU engine clock. In my case for HD6970 it can be 950.
    Third one is memory clock. This is the lowest value I can set for my card.
    Fourth is unknown for me, but must be 0 to avoid error.
    The last one is interesting. For adapter 0 it must be 256 and for adapter 1 it must be 512.

    If you want you can try implement these as well.

  • krumplee

    krumplee - 2011-05-30

    In the functions ADL_OD_Clocks_Get, and ADL_OD_Clocks_Set the last parameter is the pci bus identifier.
    A function is required to read /proc/bus/pci/devices and based on the vendor id must read files /proc/bus/pci/xx/yy and check their content for graphics display device. If you want to go on this way I will provide the details to properly find radeon devices.
    Until that you can check these ADL functions by getting the pci id by lspci command.
    Example: 03:00.0 0300: 1002:689c (prog-if 00 )
    In this case the pci id is 0x300


Log in to post a comment.