diff options
| author | Alex Deucher <alexander.deucher@amd.com> | 2014-09-18 11:16:31 -0400 |
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2014-09-18 18:57:07 -0400 |
| commit | 39da038479a81a35a7f8af3ab2c90effd5c8eff1 (patch) | |
| tree | 17cf87e571a64c6b72671715c1b119eb906ccb70 /drivers/gpu | |
| parent | 897eba827e8659a03a1b2f4e74389691f824783f (diff) | |
drm/radeon/dpm: fix resume on mullins
Need to properly disable nb dpm on dpm disable.
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/radeon/kv_dpm.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/drivers/gpu/drm/radeon/kv_dpm.c b/drivers/gpu/drm/radeon/kv_dpm.c index 8b58e11b64fa..67cb472d188c 100644 --- a/drivers/gpu/drm/radeon/kv_dpm.c +++ b/drivers/gpu/drm/radeon/kv_dpm.c | |||
| @@ -33,6 +33,8 @@ | |||
| 33 | #define KV_MINIMUM_ENGINE_CLOCK 800 | 33 | #define KV_MINIMUM_ENGINE_CLOCK 800 |
| 34 | #define SMC_RAM_END 0x40000 | 34 | #define SMC_RAM_END 0x40000 |
| 35 | 35 | ||
| 36 | static int kv_enable_nb_dpm(struct radeon_device *rdev, | ||
| 37 | bool enable); | ||
| 36 | static void kv_init_graphics_levels(struct radeon_device *rdev); | 38 | static void kv_init_graphics_levels(struct radeon_device *rdev); |
| 37 | static int kv_calculate_ds_divider(struct radeon_device *rdev); | 39 | static int kv_calculate_ds_divider(struct radeon_device *rdev); |
| 38 | static int kv_calculate_nbps_level_settings(struct radeon_device *rdev); | 40 | static int kv_calculate_nbps_level_settings(struct radeon_device *rdev); |
| @@ -1295,6 +1297,9 @@ void kv_dpm_disable(struct radeon_device *rdev) | |||
| 1295 | { | 1297 | { |
| 1296 | kv_smc_bapm_enable(rdev, false); | 1298 | kv_smc_bapm_enable(rdev, false); |
| 1297 | 1299 | ||
| 1300 | if (rdev->family == CHIP_MULLINS) | ||
| 1301 | kv_enable_nb_dpm(rdev, false); | ||
| 1302 | |||
| 1298 | /* powerup blocks */ | 1303 | /* powerup blocks */ |
| 1299 | kv_dpm_powergate_acp(rdev, false); | 1304 | kv_dpm_powergate_acp(rdev, false); |
| 1300 | kv_dpm_powergate_samu(rdev, false); | 1305 | kv_dpm_powergate_samu(rdev, false); |
| @@ -1769,15 +1774,24 @@ static int kv_update_dfs_bypass_settings(struct radeon_device *rdev, | |||
| 1769 | return ret; | 1774 | return ret; |
| 1770 | } | 1775 | } |
| 1771 | 1776 | ||
| 1772 | static int kv_enable_nb_dpm(struct radeon_device *rdev) | 1777 | static int kv_enable_nb_dpm(struct radeon_device *rdev, |
| 1778 | bool enable) | ||
| 1773 | { | 1779 | { |
| 1774 | struct kv_power_info *pi = kv_get_pi(rdev); | 1780 | struct kv_power_info *pi = kv_get_pi(rdev); |
| 1775 | int ret = 0; | 1781 | int ret = 0; |
| 1776 | 1782 | ||
| 1777 | if (pi->enable_nb_dpm && !pi->nb_dpm_enabled) { | 1783 | if (enable) { |
| 1778 | ret = kv_notify_message_to_smu(rdev, PPSMC_MSG_NBDPM_Enable); | 1784 | if (pi->enable_nb_dpm && !pi->nb_dpm_enabled) { |
| 1779 | if (ret == 0) | 1785 | ret = kv_notify_message_to_smu(rdev, PPSMC_MSG_NBDPM_Enable); |
| 1780 | pi->nb_dpm_enabled = true; | 1786 | if (ret == 0) |
| 1787 | pi->nb_dpm_enabled = true; | ||
| 1788 | } | ||
| 1789 | } else { | ||
| 1790 | if (pi->enable_nb_dpm && pi->nb_dpm_enabled) { | ||
| 1791 | ret = kv_notify_message_to_smu(rdev, PPSMC_MSG_NBDPM_Disable); | ||
| 1792 | if (ret == 0) | ||
| 1793 | pi->nb_dpm_enabled = false; | ||
| 1794 | } | ||
| 1781 | } | 1795 | } |
| 1782 | 1796 | ||
| 1783 | return ret; | 1797 | return ret; |
| @@ -1864,7 +1878,7 @@ int kv_dpm_set_power_state(struct radeon_device *rdev) | |||
| 1864 | } | 1878 | } |
| 1865 | kv_update_sclk_t(rdev); | 1879 | kv_update_sclk_t(rdev); |
| 1866 | if (rdev->family == CHIP_MULLINS) | 1880 | if (rdev->family == CHIP_MULLINS) |
| 1867 | kv_enable_nb_dpm(rdev); | 1881 | kv_enable_nb_dpm(rdev, true); |
| 1868 | } | 1882 | } |
| 1869 | } else { | 1883 | } else { |
| 1870 | if (pi->enable_dpm) { | 1884 | if (pi->enable_dpm) { |
| @@ -1889,7 +1903,7 @@ int kv_dpm_set_power_state(struct radeon_device *rdev) | |||
| 1889 | } | 1903 | } |
| 1890 | kv_update_acp_boot_level(rdev); | 1904 | kv_update_acp_boot_level(rdev); |
| 1891 | kv_update_sclk_t(rdev); | 1905 | kv_update_sclk_t(rdev); |
| 1892 | kv_enable_nb_dpm(rdev); | 1906 | kv_enable_nb_dpm(rdev, true); |
| 1893 | } | 1907 | } |
| 1894 | } | 1908 | } |
| 1895 | 1909 | ||
