]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
drm/radeon: fix multi-head power profile stability on BTC+ asics
authorAlex Deucher <alexander.deucher@amd.com>
Mon, 11 Feb 2013 13:44:48 +0000 (08:44 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 28 Feb 2013 13:38:34 +0000 (05:38 -0800)
commit 7ae764b11ed63279e9dcf25be972ff4ca21a9875 upstream.

vddci needs to track mclk for multi-head.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/radeon/evergreen.c
drivers/gpu/drm/radeon/radeon_pm.c

index a2d478e8692a0ea4e0bf0300164c400045b4c655..1b0a4eca922a8d0e0399451cc7eeeadd9cbb590e 100644 (file)
@@ -403,6 +403,19 @@ void evergreen_pm_misc(struct radeon_device *rdev)
                        rdev->pm.current_vddc = voltage->voltage;
                        DRM_DEBUG("Setting: vddc: %d\n", voltage->voltage);
                }
+
+               /* starting with BTC, there is one state that is used for both
+                * MH and SH.  Difference is that we always use the high clock index for
+                * mclk and vddci.
+                */
+               if ((rdev->pm.pm_method == PM_METHOD_PROFILE) &&
+                   (rdev->family >= CHIP_BARTS) &&
+                   rdev->pm.active_crtc_count &&
+                   ((rdev->pm.profile_index == PM_PROFILE_MID_MH_IDX) ||
+                    (rdev->pm.profile_index == PM_PROFILE_LOW_MH_IDX)))
+                       voltage = &rdev->pm.power_state[req_ps_idx].
+                               clock_info[rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx].voltage;
+
                /* 0xff01 is a flag rather then an actual voltage */
                if (voltage->vddci == 0xff01)
                        return;
index 0bfa656aa87d482fead90b86c73aac94e94849de..338fd6a74e8715e8db2335a90043242870e094f6 100644 (file)
@@ -169,7 +169,7 @@ static void radeon_set_power_state(struct radeon_device *rdev)
 
                /* starting with BTC, there is one state that is used for both
                 * MH and SH.  Difference is that we always use the high clock index for
-                * mclk.
+                * mclk and vddci.
                 */
                if ((rdev->pm.pm_method == PM_METHOD_PROFILE) &&
                    (rdev->family >= CHIP_BARTS) &&