Announcement

Collapse
No announcement yet.

ATI Radeon HD6970 (Cayman) power saving doesn't work with open source radeon driver

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

  • ATI Radeon HD6970 (Cayman) power saving doesn't work with open source radeon driver

    After googling and searching various forums for help didn't solve my problem, I now post here:

    I'm running Kubuntu 12.04.01, Kernel 3.2, and using a Radeon 6970 (Cayman chip). Using two monitors side by side. The open source driver that comes with Ubuntu 12.04.01 is used. No xorg.conf exists.

    I tried to set power save as per: http://askubuntu.com/questions/16207...aining-it-afte via:

    Code:
    echo profile > /sys/class/drm/card0/device/power_method
    echo low > /sys/class/drm/card0/device/power_profile
    However
    Code:
    cat /sys/kernel/debug/dri/0/radeon_pm_info
    shows no change wether I set low, mid, high or auto profile. Using dynpm as power_method has no effect either.

    Any ideas what might cause this and how to proceed?

    Thanks and best regards
    Drake

  • #2
    It's a bug I've been looking at lately: https://bugs.freedesktop.org/show_bug.cgi?id=49981

    It's because the card use different power states depending on whether it's running one or two heads. The problem seems to be that for HD6000s there doesn't appear to be a second 'performance' power state in the atombios, or if there is, it doesn't allow the clock to be altered. If you grab the kernel source and alter the numbers I mention in the last post it will fix it, but all it's really doing is using the same low power mode as single-head configuration uses. The source file you want is drivers/gpu/drm/radeon/r600.c, line 510.
    Code:
    if (rdev->flags & RADEON_IS_MOBILITY)
    	idx = radeon_pm_get_type_index(rdev, POWER_STATE_TYPE_BATTERY, [COLOR="#000080"]1[/COLOR]); // change to [COLOR="#000080"]0[/COLOR]
    else
    	idx = radeon_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, [COLOR="#000080"]1[/COLOR]); // change to [COLOR="#000080"]0[/COLOR]
    Can't really do much about the bug without knowing what power states the HD6000 series supports, and whether they are different from all the other families that use the r600 profile settings.

    Comment


    • #3
      Power-management is broken by design for the radeon driver and this is a explicit management decision say "hello" to "Bridgman".
      maybe ask the new guy "twriter" (tim writer)

      But I think he is not allowed to chance anything because he is forced to act inside of the corporatism logic and this drains the support money inside of the market-share to a useless and pointless contribution.

      But maybe Bridgman is innocent and he only act like this because the consumers force them (amd) to act like this.

      The best you can do is sell your AMD hardware on ebay and buy Loongson,ARM and Intel hardware.

      And don't even try to argue with these people because : resistance against corporatism is futile

      Comment


      • #5
        Power management does not work so well with multiple monitors attached. Try booting with only one monitor attached, and see if that allows you to change the power profile. Also, use a more recent kernel if you can.

        Comment


        • #6
          Originally posted by chithanh View Post
          Power management does not work so well with multiple monitors attached. Try booting with only one monitor attached, and see if that allows you to change the power profile.
          I can confirm that the problem is related to the dualhead setup. Disabling the second monitor via
          Code:
          xrandr
          alows to the card to use low power profile imeadiately, no reboot required. Temperature difference is 10?C. Upon reenabling the second monitor the low power state does however not presist, but the card siwtches to high again.

          Thanks for your pointers. Now I'm goingt to search for the easiest way around, maintaining my own kernel is more work than I would like ... Maybe the new kernel from Ubuntu 12.10 (linux-3.5.3) solves the problem?

          Comment


          • #7
            Originally posted by Ares Drake View Post
            Maybe the new kernel from Ubuntu 12.10 (linux-3.5.3) solves the problem?
            Nope, the bad PM code is still in the latest kernel source. Doesn't seem as if anyone wants to touch it. I could submit a patch, but the r600 profile affects so many cards, I wouldn't know if I was breaking the power profiles for all the others or not.

            Comment


            • #8
              Any chance anyone with an hd6k can add drm.debug=2 to the kernel options and print the output of
              dmesg | grep "radeon_pm_print_states"

              For me it results in:
              Code:
              [    7.946934] [drm:radeon_pm_print_states], State 0: Default
              [    7.946935] [drm:radeon_pm_print_states],    Default
              [    7.946936] [drm:radeon_pm_print_states], 
              [    7.946938] [drm:radeon_pm_print_states],    3 Clock Mode(s)
              [    7.946939] [drm:radeon_pm_print_states],            0 e: 900000     m: 1050000      v: 1175 No display only
              [    7.946940] [drm:radeon_pm_print_states],            1 e: 900000     m: 1050000      v: 1175
              [    7.946942] [drm:radeon_pm_print_states],            2 e: 900000     m: 1050000      v: 1175
              [    7.946943] [drm:radeon_pm_print_states], State 1: Performance
              [    7.946944] [drm:radeon_pm_print_states],    16 PCIE Lanes
              [    7.946945] [drm:radeon_pm_print_states],    3 Clock Mode(s)
              [    7.946946] [drm:radeon_pm_print_states],            0 e: 100000     m: 150000       v: 950  No display only
              [    7.946947] [drm:radeon_pm_print_states],            1 e: 775000     m: 1050000      v: 1100
              [    7.946948] [drm:radeon_pm_print_states],            2 e: 900000     m: 1050000      v: 1175
              [    7.946950] [drm:radeon_pm_print_states], State 2: Default
              [    7.946950] [drm:radeon_pm_print_states],    16 PCIE Lanes
              [    7.946951] [drm:radeon_pm_print_states],    3 Clock Mode(s)
              [    7.946952] [drm:radeon_pm_print_states],            0 e: 300000     m: 1050000      v: 950  No display only
              [    7.946953] [drm:radeon_pm_print_states],            1 e: 300000     m: 1050000      v: 950
              [    7.946955] [drm:radeon_pm_print_states],            2 e: 900000     m: 1050000      v: 1175
              [    7.946956] [drm:radeon_pm_print_states], State 3: Default
              [    7.946957] [drm:radeon_pm_print_states],    16 PCIE Lanes
              [    7.946958] [drm:radeon_pm_print_states],    3 Clock Mode(s)
              [    7.946959] [drm:radeon_pm_print_states],            0 e: 600000     m: 1050000      v: 1000 No display only
              [    7.946960] [drm:radeon_pm_print_states],            1 e: 600000     m: 1050000      v: 1000
              [    7.946961] [drm:radeon_pm_print_states],            2 e: 900000     m: 1050000      v: 1175
              So there is only one performance state, on my card at least, but it seems weird that there are 3 default states. That suggests there is something wrong in atombios I think. It would appear that the first default state is being used after failing to find the 2nd performance state. Even with the performance mode being used for single head mode, I don't think it should be using the first clock mode as that seems reserved for when dpms is off. If anything I think it should be using the second default with the clock at 300k.

              Comment


              • #9
                Originally posted by c0ld View Post
                Any chance anyone with an hd6k can add drm.debug=2 to the kernel options and print the output of
                dmesg | grep "radeon_pm_print_states"
                Hi! I'm running Debian GNU/Linux testing+unstable on HP laptop with integrated and discrete radeons. Linux kernel 3.2.30-1 amd64 (debian stock). I'm running with low profile and discrete card switched off with vgaswitcheroo (switches after initialization).

                Here is my output:

                1. For IGP (Radeon 4200):
                [ 1.429314] [drm:radeon_pm_print_states], 6 Power State(s)
                [ 1.429316] [drm:radeon_pm_print_states], State 0: Default
                [ 1.429318] [drm:radeon_pm_print_states], Default
                [ 1.429319] [drm:radeon_pm_print_states], 1 Clock Mode(s)
                [ 1.429321] [drm:radeon_pm_print_states], 0 e: 500000
                [ 1.429323] [drm:radeon_pm_print_states], State 1: Performance
                [ 1.429325] [drm:radeon_pm_print_states], 1 Clock Mode(s)
                [ 1.429327] [drm:radeon_pm_print_states], 0 e: 200000
                [ 1.429329] [drm:radeon_pm_print_states], State 2: Battery
                [ 1.429330] [drm:radeon_pm_print_states], Single display only
                [ 1.429332] [drm:radeon_pm_print_states], 1 Clock Mode(s)
                [ 1.429334] [drm:radeon_pm_print_states], 0 e: 200000
                [ 1.429335] [drm:radeon_pm_print_states], State 3: Default
                [ 1.429337] [drm:radeon_pm_print_states], 1 Clock Mode(s)
                [ 1.429339] [drm:radeon_pm_print_states], 0 e: 500000
                [ 1.429340] [drm:radeon_pm_print_states], State 4: Battery
                [ 1.429342] [drm:radeon_pm_print_states], Single display only
                [ 1.429344] [drm:radeon_pm_print_states], 1 Clock Mode(s)
                [ 1.429345] [drm:radeon_pm_print_states], 0 e: 380000
                [ 1.429347] [drm:radeon_pm_print_states], State 5: Battery
                [ 1.429349] [drm:radeon_pm_print_states], Single display only
                [ 1.429351] [drm:radeon_pm_print_states], 1 Clock Mode(s)
                [ 1.429352] [drm:radeon_pm_print_states], 0 e: 380000
                [ 1.429361] [drm] radeon: power management initialized

                2. For discrete (Radeon 6650M):
                [ 3.746209] [drm:radeon_pm_print_states], 6 Power State(s)
                [ 3.746211] [drm:radeon_pm_print_states], State 0: Default
                [ 3.746213] [drm:radeon_pm_print_states], Default
                [ 3.746214] [drm:radeon_pm_print_states], 16 PCIE Lanes
                [ 3.746216] [drm:radeon_pm_print_states], 3 Clock Mode(s)
                [ 3.746218] [drm:radeon_pm_print_states], 0 e: 600000 m: 900000 v: 1000 No display only
                [ 3.746220] [drm:radeon_pm_print_states], 1 e: 600000 m: 900000 v: 1000
                [ 3.746222] [drm:radeon_pm_print_states], 2 e: 600000 m: 900000 v: 1000
                [ 3.746225] [drm:radeon_pm_print_states], State 1: Performance
                [ 3.746226] [drm:radeon_pm_print_states], 16 PCIE Lanes
                [ 3.746228] [drm:radeon_pm_print_states], 3 Clock Mode(s)
                [ 3.746230] [drm:radeon_pm_print_states], 0 e: 100000 m: 150000 v: 900 No display only
                [ 3.746232] [drm:radeon_pm_print_states], 1 e: 400000 m: 900000 v: 1000
                [ 3.746234] [drm:radeon_pm_print_states], 2 e: 600000 m: 900000 v: 1000
                [ 3.746236] [drm:radeon_pm_print_states], State 2: Default
                [ 3.746238] [drm:radeon_pm_print_states], 16 PCIE Lanes
                [ 3.746239] [drm:radeon_pm_print_states], 3 Clock Mode(s)
                [ 3.746241] [drm:radeon_pm_print_states], 0 e: 600000 m: 900000 v: 1000 No display only
                [ 3.746243] [drm:radeon_pm_print_states], 1 e: 600000 m: 900000 v: 1000
                [ 3.746246] [drm:radeon_pm_print_states], 2 e: 600000 m: 900000 v: 1000
                [ 3.746248] [drm:radeon_pm_print_states], State 3: Battery
                [ 3.746249] [drm:radeon_pm_print_states], 4 PCIE Lanes
                [ 3.746251] [drm:radeon_pm_print_states], 3 Clock Mode(s)
                [ 3.746252] [drm:radeon_pm_print_states], 0 e: 100000 m: 150000 v: 900 No display only
                [ 3.746255] [drm:radeon_pm_print_states], 1 e: 100000 m: 150000 v: 900
                [ 3.746257] [drm:radeon_pm_print_states], 2 e: 300000 m: 300000 v: 900
                [ 3.746259] [drm:radeon_pm_print_states], State 4: Battery
                [ 3.746260] [drm:radeon_pm_print_states], 4 PCIE Lanes
                [ 3.746262] [drm:radeon_pm_print_states], 3 Clock Mode(s)
                [ 3.746264] [drm:radeon_pm_print_states], 0 e: 600000 m: 900000 v: 1000 No display only
                [ 3.746266] [drm:radeon_pm_print_states], 1 e: 600000 m: 900000 v: 1000
                [ 3.746268] [drm:radeon_pm_print_states], 2 e: 600000 m: 900000 v: 1000
                [ 3.746270] [drm:radeon_pm_print_states], State 5: Battery
                [ 3.746272] [drm:radeon_pm_print_states], 4 PCIE Lanes
                [ 3.746273] [drm:radeon_pm_print_states], 3 Clock Mode(s)
                [ 3.746275] [drm:radeon_pm_print_states], 0 e: 300000 m: 300000 v: 900 No display only
                [ 3.746277] [drm:radeon_pm_print_states], 1 e: 300000 m: 300000 v: 900
                [ 3.746279] [drm:radeon_pm_print_states], 2 e: 300000 m: 300000 v: 900
                [ 3.747499] [drm] radeon: power management initialized

                Hope this will help.

                Comment


                • #10
                  Originally posted by necro-lover View Post
                  The best you can do is sell your AMD hardware on ebay and buy Loongson,ARM and Intel hardware.
                  lolwut?

                  Loongson = Underpowered chip for which you still need a GPU. (ATI nVidia)

                  ARM = Underpowered chip for which you still need a GPU. (bonus closed drivers for every GPU related to ARM)

                  Intel = Buggy firmware mobos for which they don't give a fuck about linux. They don't support it. (+ GPUS not on par with AMD nVidia)

                  Enjoy.

                  Comment

                  Working...
                  X