Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

+21 -7
+21 -7
drivers/gpu/drm/radeon/kv_dpm.c
··· 33 33 #define KV_MINIMUM_ENGINE_CLOCK 800 34 34 #define SMC_RAM_END 0x40000 35 35 36 + static int kv_enable_nb_dpm(struct radeon_device *rdev, 37 + bool enable); 36 38 static void kv_init_graphics_levels(struct radeon_device *rdev); 37 39 static int kv_calculate_ds_divider(struct radeon_device *rdev); 38 40 static int kv_calculate_nbps_level_settings(struct radeon_device *rdev); ··· 1297 1295 { 1298 1296 kv_smc_bapm_enable(rdev, false); 1299 1297 1298 + if (rdev->family == CHIP_MULLINS) 1299 + kv_enable_nb_dpm(rdev, false); 1300 + 1300 1301 /* powerup blocks */ 1301 1302 kv_dpm_powergate_acp(rdev, false); 1302 1303 kv_dpm_powergate_samu(rdev, false); ··· 1774 1769 return ret; 1775 1770 } 1776 1771 1777 - static int kv_enable_nb_dpm(struct radeon_device *rdev) 1772 + static int kv_enable_nb_dpm(struct radeon_device *rdev, 1773 + bool enable) 1778 1774 { 1779 1775 struct kv_power_info *pi = kv_get_pi(rdev); 1780 1776 int ret = 0; 1781 1777 1782 - if (pi->enable_nb_dpm && !pi->nb_dpm_enabled) { 1783 - ret = kv_notify_message_to_smu(rdev, PPSMC_MSG_NBDPM_Enable); 1784 - if (ret == 0) 1785 - pi->nb_dpm_enabled = true; 1778 + if (enable) { 1779 + if (pi->enable_nb_dpm && !pi->nb_dpm_enabled) { 1780 + ret = kv_notify_message_to_smu(rdev, PPSMC_MSG_NBDPM_Enable); 1781 + if (ret == 0) 1782 + pi->nb_dpm_enabled = true; 1783 + } 1784 + } else { 1785 + if (pi->enable_nb_dpm && pi->nb_dpm_enabled) { 1786 + ret = kv_notify_message_to_smu(rdev, PPSMC_MSG_NBDPM_Disable); 1787 + if (ret == 0) 1788 + pi->nb_dpm_enabled = false; 1789 + } 1786 1790 } 1787 1791 1788 1792 return ret; ··· 1878 1864 } 1879 1865 kv_update_sclk_t(rdev); 1880 1866 if (rdev->family == CHIP_MULLINS) 1881 - kv_enable_nb_dpm(rdev); 1867 + kv_enable_nb_dpm(rdev, true); 1882 1868 } 1883 1869 } else { 1884 1870 if (pi->enable_dpm) { ··· 1903 1889 } 1904 1890 kv_update_acp_boot_level(rdev); 1905 1891 kv_update_sclk_t(rdev); 1906 - kv_enable_nb_dpm(rdev); 1892 + kv_enable_nb_dpm(rdev, true); 1907 1893 } 1908 1894 } 1909 1895