aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/powerplay
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/powerplay')
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/smu7_powertune.c12
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c32
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c36
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c192
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h1
-rw-r--r--drivers/gpu/drm/amd/powerplay/inc/hwmgr.h1
-rw-r--r--drivers/gpu/drm/amd/powerplay/inc/smu7_common.h4
-rw-r--r--drivers/gpu/drm/amd/powerplay/inc/vega20_ppsmc.h3
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c1
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/smu10_smumgr.c1
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/smu8_smumgr.c49
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/smumgr.c3
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/vegam_smumgr.c1
13 files changed, 151 insertions, 185 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_powertune.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_powertune.c
index 5e19f5977eb1..d138ddae563d 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_powertune.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_powertune.c
@@ -967,7 +967,7 @@ int smu7_enable_didt_config(struct pp_hwmgr *hwmgr)
967 PP_CAP(PHM_PlatformCaps_TDRamping) || 967 PP_CAP(PHM_PlatformCaps_TDRamping) ||
968 PP_CAP(PHM_PlatformCaps_TCPRamping)) { 968 PP_CAP(PHM_PlatformCaps_TCPRamping)) {
969 969
970 adev->gfx.rlc.funcs->enter_safe_mode(adev); 970 amdgpu_gfx_rlc_enter_safe_mode(adev);
971 mutex_lock(&adev->grbm_idx_mutex); 971 mutex_lock(&adev->grbm_idx_mutex);
972 value = 0; 972 value = 0;
973 value2 = cgs_read_register(hwmgr->device, mmGRBM_GFX_INDEX); 973 value2 = cgs_read_register(hwmgr->device, mmGRBM_GFX_INDEX);
@@ -1014,13 +1014,13 @@ int smu7_enable_didt_config(struct pp_hwmgr *hwmgr)
1014 "Failed to enable DPM DIDT.", goto error); 1014 "Failed to enable DPM DIDT.", goto error);
1015 } 1015 }
1016 mutex_unlock(&adev->grbm_idx_mutex); 1016 mutex_unlock(&adev->grbm_idx_mutex);
1017 adev->gfx.rlc.funcs->exit_safe_mode(adev); 1017 amdgpu_gfx_rlc_exit_safe_mode(adev);
1018 } 1018 }
1019 1019
1020 return 0; 1020 return 0;
1021error: 1021error:
1022 mutex_unlock(&adev->grbm_idx_mutex); 1022 mutex_unlock(&adev->grbm_idx_mutex);
1023 adev->gfx.rlc.funcs->exit_safe_mode(adev); 1023 amdgpu_gfx_rlc_exit_safe_mode(adev);
1024 return result; 1024 return result;
1025} 1025}
1026 1026
@@ -1034,7 +1034,7 @@ int smu7_disable_didt_config(struct pp_hwmgr *hwmgr)
1034 PP_CAP(PHM_PlatformCaps_TDRamping) || 1034 PP_CAP(PHM_PlatformCaps_TDRamping) ||
1035 PP_CAP(PHM_PlatformCaps_TCPRamping)) { 1035 PP_CAP(PHM_PlatformCaps_TCPRamping)) {
1036 1036
1037 adev->gfx.rlc.funcs->enter_safe_mode(adev); 1037 amdgpu_gfx_rlc_enter_safe_mode(adev);
1038 1038
1039 result = smu7_enable_didt(hwmgr, false); 1039 result = smu7_enable_didt(hwmgr, false);
1040 PP_ASSERT_WITH_CODE((result == 0), 1040 PP_ASSERT_WITH_CODE((result == 0),
@@ -1046,12 +1046,12 @@ int smu7_disable_didt_config(struct pp_hwmgr *hwmgr)
1046 PP_ASSERT_WITH_CODE((0 == result), 1046 PP_ASSERT_WITH_CODE((0 == result),
1047 "Failed to disable DPM DIDT.", goto error); 1047 "Failed to disable DPM DIDT.", goto error);
1048 } 1048 }
1049 adev->gfx.rlc.funcs->exit_safe_mode(adev); 1049 amdgpu_gfx_rlc_exit_safe_mode(adev);
1050 } 1050 }
1051 1051
1052 return 0; 1052 return 0;
1053error: 1053error:
1054 adev->gfx.rlc.funcs->exit_safe_mode(adev); 1054 amdgpu_gfx_rlc_exit_safe_mode(adev);
1055 return result; 1055 return result;
1056} 1056}
1057 1057
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c
index 99a33c33a32c..101c09b212ad 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c
@@ -713,20 +713,20 @@ int smu_set_watermarks_for_clocks_ranges(void *wt_table,
713 for (i = 0; i < wm_with_clock_ranges->num_wm_dmif_sets; i++) { 713 for (i = 0; i < wm_with_clock_ranges->num_wm_dmif_sets; i++) {
714 table->WatermarkRow[1][i].MinClock = 714 table->WatermarkRow[1][i].MinClock =
715 cpu_to_le16((uint16_t) 715 cpu_to_le16((uint16_t)
716 (wm_with_clock_ranges->wm_dmif_clocks_ranges[i].wm_min_dcfclk_clk_in_khz) / 716 (wm_with_clock_ranges->wm_dmif_clocks_ranges[i].wm_min_dcfclk_clk_in_khz /
717 1000); 717 1000));
718 table->WatermarkRow[1][i].MaxClock = 718 table->WatermarkRow[1][i].MaxClock =
719 cpu_to_le16((uint16_t) 719 cpu_to_le16((uint16_t)
720 (wm_with_clock_ranges->wm_dmif_clocks_ranges[i].wm_max_dcfclk_clk_in_khz) / 720 (wm_with_clock_ranges->wm_dmif_clocks_ranges[i].wm_max_dcfclk_clk_in_khz /
721 1000); 721 1000));
722 table->WatermarkRow[1][i].MinUclk = 722 table->WatermarkRow[1][i].MinUclk =
723 cpu_to_le16((uint16_t) 723 cpu_to_le16((uint16_t)
724 (wm_with_clock_ranges->wm_dmif_clocks_ranges[i].wm_min_mem_clk_in_khz) / 724 (wm_with_clock_ranges->wm_dmif_clocks_ranges[i].wm_min_mem_clk_in_khz /
725 1000); 725 1000));
726 table->WatermarkRow[1][i].MaxUclk = 726 table->WatermarkRow[1][i].MaxUclk =
727 cpu_to_le16((uint16_t) 727 cpu_to_le16((uint16_t)
728 (wm_with_clock_ranges->wm_dmif_clocks_ranges[i].wm_max_mem_clk_in_khz) / 728 (wm_with_clock_ranges->wm_dmif_clocks_ranges[i].wm_max_mem_clk_in_khz /
729 1000); 729 1000));
730 table->WatermarkRow[1][i].WmSetting = (uint8_t) 730 table->WatermarkRow[1][i].WmSetting = (uint8_t)
731 wm_with_clock_ranges->wm_dmif_clocks_ranges[i].wm_set_id; 731 wm_with_clock_ranges->wm_dmif_clocks_ranges[i].wm_set_id;
732 } 732 }
@@ -734,20 +734,20 @@ int smu_set_watermarks_for_clocks_ranges(void *wt_table,
734 for (i = 0; i < wm_with_clock_ranges->num_wm_mcif_sets; i++) { 734 for (i = 0; i < wm_with_clock_ranges->num_wm_mcif_sets; i++) {
735 table->WatermarkRow[0][i].MinClock = 735 table->WatermarkRow[0][i].MinClock =
736 cpu_to_le16((uint16_t) 736 cpu_to_le16((uint16_t)
737 (wm_with_clock_ranges->wm_mcif_clocks_ranges[i].wm_min_socclk_clk_in_khz) / 737 (wm_with_clock_ranges->wm_mcif_clocks_ranges[i].wm_min_socclk_clk_in_khz /
738 1000); 738 1000));
739 table->WatermarkRow[0][i].MaxClock = 739 table->WatermarkRow[0][i].MaxClock =
740 cpu_to_le16((uint16_t) 740 cpu_to_le16((uint16_t)
741 (wm_with_clock_ranges->wm_mcif_clocks_ranges[i].wm_max_socclk_clk_in_khz) / 741 (wm_with_clock_ranges->wm_mcif_clocks_ranges[i].wm_max_socclk_clk_in_khz /
742 1000); 742 1000));
743 table->WatermarkRow[0][i].MinUclk = 743 table->WatermarkRow[0][i].MinUclk =
744 cpu_to_le16((uint16_t) 744 cpu_to_le16((uint16_t)
745 (wm_with_clock_ranges->wm_mcif_clocks_ranges[i].wm_min_mem_clk_in_khz) / 745 (wm_with_clock_ranges->wm_mcif_clocks_ranges[i].wm_min_mem_clk_in_khz /
746 1000); 746 1000));
747 table->WatermarkRow[0][i].MaxUclk = 747 table->WatermarkRow[0][i].MaxUclk =
748 cpu_to_le16((uint16_t) 748 cpu_to_le16((uint16_t)
749 (wm_with_clock_ranges->wm_mcif_clocks_ranges[i].wm_max_mem_clk_in_khz) / 749 (wm_with_clock_ranges->wm_mcif_clocks_ranges[i].wm_max_mem_clk_in_khz /
750 1000); 750 1000));
751 table->WatermarkRow[0][i].WmSetting = (uint8_t) 751 table->WatermarkRow[0][i].WmSetting = (uint8_t)
752 wm_with_clock_ranges->wm_mcif_clocks_ranges[i].wm_set_id; 752 wm_with_clock_ranges->wm_mcif_clocks_ranges[i].wm_set_id;
753 } 753 }
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c
index 2d88abf97e7b..6f26cb241ecc 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c
@@ -937,7 +937,7 @@ static int vega10_enable_cac_driving_se_didt_config(struct pp_hwmgr *hwmgr)
937 937
938 num_se = adev->gfx.config.max_shader_engines; 938 num_se = adev->gfx.config.max_shader_engines;
939 939
940 adev->gfx.rlc.funcs->enter_safe_mode(adev); 940 amdgpu_gfx_rlc_enter_safe_mode(adev);
941 941
942 mutex_lock(&adev->grbm_idx_mutex); 942 mutex_lock(&adev->grbm_idx_mutex);
943 for (count = 0; count < num_se; count++) { 943 for (count = 0; count < num_se; count++) {
@@ -962,7 +962,7 @@ static int vega10_enable_cac_driving_se_didt_config(struct pp_hwmgr *hwmgr)
962 962
963 vega10_didt_set_mask(hwmgr, true); 963 vega10_didt_set_mask(hwmgr, true);
964 964
965 adev->gfx.rlc.funcs->exit_safe_mode(adev); 965 amdgpu_gfx_rlc_exit_safe_mode(adev);
966 966
967 return 0; 967 return 0;
968} 968}
@@ -971,11 +971,11 @@ static int vega10_disable_cac_driving_se_didt_config(struct pp_hwmgr *hwmgr)
971{ 971{
972 struct amdgpu_device *adev = hwmgr->adev; 972 struct amdgpu_device *adev = hwmgr->adev;
973 973
974 adev->gfx.rlc.funcs->enter_safe_mode(adev); 974 amdgpu_gfx_rlc_enter_safe_mode(adev);
975 975
976 vega10_didt_set_mask(hwmgr, false); 976 vega10_didt_set_mask(hwmgr, false);
977 977
978 adev->gfx.rlc.funcs->exit_safe_mode(adev); 978 amdgpu_gfx_rlc_exit_safe_mode(adev);
979 979
980 return 0; 980 return 0;
981} 981}
@@ -988,7 +988,7 @@ static int vega10_enable_psm_gc_didt_config(struct pp_hwmgr *hwmgr)
988 988
989 num_se = adev->gfx.config.max_shader_engines; 989 num_se = adev->gfx.config.max_shader_engines;
990 990
991 adev->gfx.rlc.funcs->enter_safe_mode(adev); 991 amdgpu_gfx_rlc_enter_safe_mode(adev);
992 992
993 mutex_lock(&adev->grbm_idx_mutex); 993 mutex_lock(&adev->grbm_idx_mutex);
994 for (count = 0; count < num_se; count++) { 994 for (count = 0; count < num_se; count++) {
@@ -1007,7 +1007,7 @@ static int vega10_enable_psm_gc_didt_config(struct pp_hwmgr *hwmgr)
1007 1007
1008 vega10_didt_set_mask(hwmgr, true); 1008 vega10_didt_set_mask(hwmgr, true);
1009 1009
1010 adev->gfx.rlc.funcs->exit_safe_mode(adev); 1010 amdgpu_gfx_rlc_exit_safe_mode(adev);
1011 1011
1012 vega10_program_gc_didt_config_registers(hwmgr, GCDiDtDroopCtrlConfig_vega10); 1012 vega10_program_gc_didt_config_registers(hwmgr, GCDiDtDroopCtrlConfig_vega10);
1013 if (PP_CAP(PHM_PlatformCaps_GCEDC)) 1013 if (PP_CAP(PHM_PlatformCaps_GCEDC))
@@ -1024,11 +1024,11 @@ static int vega10_disable_psm_gc_didt_config(struct pp_hwmgr *hwmgr)
1024 struct amdgpu_device *adev = hwmgr->adev; 1024 struct amdgpu_device *adev = hwmgr->adev;
1025 uint32_t data; 1025 uint32_t data;
1026 1026
1027 adev->gfx.rlc.funcs->enter_safe_mode(adev); 1027 amdgpu_gfx_rlc_enter_safe_mode(adev);
1028 1028
1029 vega10_didt_set_mask(hwmgr, false); 1029 vega10_didt_set_mask(hwmgr, false);
1030 1030
1031 adev->gfx.rlc.funcs->exit_safe_mode(adev); 1031 amdgpu_gfx_rlc_exit_safe_mode(adev);
1032 1032
1033 if (PP_CAP(PHM_PlatformCaps_GCEDC)) { 1033 if (PP_CAP(PHM_PlatformCaps_GCEDC)) {
1034 data = 0x00000000; 1034 data = 0x00000000;
@@ -1049,7 +1049,7 @@ static int vega10_enable_se_edc_config(struct pp_hwmgr *hwmgr)
1049 1049
1050 num_se = adev->gfx.config.max_shader_engines; 1050 num_se = adev->gfx.config.max_shader_engines;
1051 1051
1052 adev->gfx.rlc.funcs->enter_safe_mode(adev); 1052 amdgpu_gfx_rlc_enter_safe_mode(adev);
1053 1053
1054 mutex_lock(&adev->grbm_idx_mutex); 1054 mutex_lock(&adev->grbm_idx_mutex);
1055 for (count = 0; count < num_se; count++) { 1055 for (count = 0; count < num_se; count++) {
@@ -1070,7 +1070,7 @@ static int vega10_enable_se_edc_config(struct pp_hwmgr *hwmgr)
1070 1070
1071 vega10_didt_set_mask(hwmgr, true); 1071 vega10_didt_set_mask(hwmgr, true);
1072 1072
1073 adev->gfx.rlc.funcs->exit_safe_mode(adev); 1073 amdgpu_gfx_rlc_exit_safe_mode(adev);
1074 1074
1075 return 0; 1075 return 0;
1076} 1076}
@@ -1079,11 +1079,11 @@ static int vega10_disable_se_edc_config(struct pp_hwmgr *hwmgr)
1079{ 1079{
1080 struct amdgpu_device *adev = hwmgr->adev; 1080 struct amdgpu_device *adev = hwmgr->adev;
1081 1081
1082 adev->gfx.rlc.funcs->enter_safe_mode(adev); 1082 amdgpu_gfx_rlc_enter_safe_mode(adev);
1083 1083
1084 vega10_didt_set_mask(hwmgr, false); 1084 vega10_didt_set_mask(hwmgr, false);
1085 1085
1086 adev->gfx.rlc.funcs->exit_safe_mode(adev); 1086 amdgpu_gfx_rlc_exit_safe_mode(adev);
1087 1087
1088 return 0; 1088 return 0;
1089} 1089}
@@ -1097,7 +1097,7 @@ static int vega10_enable_psm_gc_edc_config(struct pp_hwmgr *hwmgr)
1097 1097
1098 num_se = adev->gfx.config.max_shader_engines; 1098 num_se = adev->gfx.config.max_shader_engines;
1099 1099
1100 adev->gfx.rlc.funcs->enter_safe_mode(adev); 1100 amdgpu_gfx_rlc_enter_safe_mode(adev);
1101 1101
1102 vega10_program_gc_didt_config_registers(hwmgr, AvfsPSMResetConfig_vega10); 1102 vega10_program_gc_didt_config_registers(hwmgr, AvfsPSMResetConfig_vega10);
1103 1103
@@ -1118,7 +1118,7 @@ static int vega10_enable_psm_gc_edc_config(struct pp_hwmgr *hwmgr)
1118 1118
1119 vega10_didt_set_mask(hwmgr, true); 1119 vega10_didt_set_mask(hwmgr, true);
1120 1120
1121 adev->gfx.rlc.funcs->exit_safe_mode(adev); 1121 amdgpu_gfx_rlc_exit_safe_mode(adev);
1122 1122
1123 vega10_program_gc_didt_config_registers(hwmgr, PSMGCEDCDroopCtrlConfig_vega10); 1123 vega10_program_gc_didt_config_registers(hwmgr, PSMGCEDCDroopCtrlConfig_vega10);
1124 1124
@@ -1138,11 +1138,11 @@ static int vega10_disable_psm_gc_edc_config(struct pp_hwmgr *hwmgr)
1138 struct amdgpu_device *adev = hwmgr->adev; 1138 struct amdgpu_device *adev = hwmgr->adev;
1139 uint32_t data; 1139 uint32_t data;
1140 1140
1141 adev->gfx.rlc.funcs->enter_safe_mode(adev); 1141 amdgpu_gfx_rlc_enter_safe_mode(adev);
1142 1142
1143 vega10_didt_set_mask(hwmgr, false); 1143 vega10_didt_set_mask(hwmgr, false);
1144 1144
1145 adev->gfx.rlc.funcs->exit_safe_mode(adev); 1145 amdgpu_gfx_rlc_exit_safe_mode(adev);
1146 1146
1147 if (PP_CAP(PHM_PlatformCaps_GCEDC)) { 1147 if (PP_CAP(PHM_PlatformCaps_GCEDC)) {
1148 data = 0x00000000; 1148 data = 0x00000000;
@@ -1160,7 +1160,7 @@ static int vega10_enable_se_edc_force_stall_config(struct pp_hwmgr *hwmgr)
1160 struct amdgpu_device *adev = hwmgr->adev; 1160 struct amdgpu_device *adev = hwmgr->adev;
1161 int result; 1161 int result;
1162 1162
1163 adev->gfx.rlc.funcs->enter_safe_mode(adev); 1163 amdgpu_gfx_rlc_enter_safe_mode(adev);
1164 1164
1165 mutex_lock(&adev->grbm_idx_mutex); 1165 mutex_lock(&adev->grbm_idx_mutex);
1166 WREG32_SOC15(GC, 0, mmGRBM_GFX_INDEX, 0xE0000000); 1166 WREG32_SOC15(GC, 0, mmGRBM_GFX_INDEX, 0xE0000000);
@@ -1173,7 +1173,7 @@ static int vega10_enable_se_edc_force_stall_config(struct pp_hwmgr *hwmgr)
1173 1173
1174 vega10_didt_set_mask(hwmgr, false); 1174 vega10_didt_set_mask(hwmgr, false);
1175 1175
1176 adev->gfx.rlc.funcs->exit_safe_mode(adev); 1176 amdgpu_gfx_rlc_exit_safe_mode(adev);
1177 1177
1178 return 0; 1178 return 0;
1179} 1179}
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
index 57143d51e3ee..f2daf00cc911 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
@@ -120,6 +120,7 @@ static void vega20_set_default_registry_data(struct pp_hwmgr *hwmgr)
120 data->registry_data.disable_auto_wattman = 1; 120 data->registry_data.disable_auto_wattman = 1;
121 data->registry_data.auto_wattman_debug = 0; 121 data->registry_data.auto_wattman_debug = 0;
122 data->registry_data.auto_wattman_sample_period = 100; 122 data->registry_data.auto_wattman_sample_period = 100;
123 data->registry_data.fclk_gfxclk_ratio = 0x3F6CCCCD;
123 data->registry_data.auto_wattman_threshold = 50; 124 data->registry_data.auto_wattman_threshold = 50;
124 data->registry_data.gfxoff_controlled_by_driver = 1; 125 data->registry_data.gfxoff_controlled_by_driver = 1;
125 data->gfxoff_allowed = false; 126 data->gfxoff_allowed = false;
@@ -829,6 +830,28 @@ static int vega20_enable_all_smu_features(struct pp_hwmgr *hwmgr)
829 return 0; 830 return 0;
830} 831}
831 832
833static int vega20_notify_smc_display_change(struct pp_hwmgr *hwmgr)
834{
835 struct vega20_hwmgr *data = (struct vega20_hwmgr *)(hwmgr->backend);
836
837 if (data->smu_features[GNLD_DPM_UCLK].enabled)
838 return smum_send_msg_to_smc_with_parameter(hwmgr,
839 PPSMC_MSG_SetUclkFastSwitch,
840 1);
841
842 return 0;
843}
844
845static int vega20_send_clock_ratio(struct pp_hwmgr *hwmgr)
846{
847 struct vega20_hwmgr *data =
848 (struct vega20_hwmgr *)(hwmgr->backend);
849
850 return smum_send_msg_to_smc_with_parameter(hwmgr,
851 PPSMC_MSG_SetFclkGfxClkRatio,
852 data->registry_data.fclk_gfxclk_ratio);
853}
854
832static int vega20_disable_all_smu_features(struct pp_hwmgr *hwmgr) 855static int vega20_disable_all_smu_features(struct pp_hwmgr *hwmgr)
833{ 856{
834 struct vega20_hwmgr *data = 857 struct vega20_hwmgr *data =
@@ -1532,6 +1555,16 @@ static int vega20_enable_dpm_tasks(struct pp_hwmgr *hwmgr)
1532 "[EnableDPMTasks] Failed to enable all smu features!", 1555 "[EnableDPMTasks] Failed to enable all smu features!",
1533 return result); 1556 return result);
1534 1557
1558 result = vega20_notify_smc_display_change(hwmgr);
1559 PP_ASSERT_WITH_CODE(!result,
1560 "[EnableDPMTasks] Failed to notify smc display change!",
1561 return result);
1562
1563 result = vega20_send_clock_ratio(hwmgr);
1564 PP_ASSERT_WITH_CODE(!result,
1565 "[EnableDPMTasks] Failed to send clock ratio!",
1566 return result);
1567
1535 /* Initialize UVD/VCE powergating state */ 1568 /* Initialize UVD/VCE powergating state */
1536 vega20_init_powergate_state(hwmgr); 1569 vega20_init_powergate_state(hwmgr);
1537 1570
@@ -1972,19 +2005,6 @@ static int vega20_read_sensor(struct pp_hwmgr *hwmgr, int idx,
1972 return ret; 2005 return ret;
1973} 2006}
1974 2007
1975static int vega20_notify_smc_display_change(struct pp_hwmgr *hwmgr,
1976 bool has_disp)
1977{
1978 struct vega20_hwmgr *data = (struct vega20_hwmgr *)(hwmgr->backend);
1979
1980 if (data->smu_features[GNLD_DPM_UCLK].enabled)
1981 return smum_send_msg_to_smc_with_parameter(hwmgr,
1982 PPSMC_MSG_SetUclkFastSwitch,
1983 has_disp ? 1 : 0);
1984
1985 return 0;
1986}
1987
1988int vega20_display_clock_voltage_request(struct pp_hwmgr *hwmgr, 2008int vega20_display_clock_voltage_request(struct pp_hwmgr *hwmgr,
1989 struct pp_display_clock_request *clock_req) 2009 struct pp_display_clock_request *clock_req)
1990{ 2010{
@@ -2044,13 +2064,6 @@ static int vega20_notify_smc_display_config_after_ps_adjustment(
2044 struct pp_display_clock_request clock_req; 2064 struct pp_display_clock_request clock_req;
2045 int ret = 0; 2065 int ret = 0;
2046 2066
2047 if ((hwmgr->display_config->num_display > 1) &&
2048 !hwmgr->display_config->multi_monitor_in_sync &&
2049 !hwmgr->display_config->nb_pstate_switch_disable)
2050 vega20_notify_smc_display_change(hwmgr, false);
2051 else
2052 vega20_notify_smc_display_change(hwmgr, true);
2053
2054 min_clocks.dcefClock = hwmgr->display_config->min_dcef_set_clk; 2067 min_clocks.dcefClock = hwmgr->display_config->min_dcef_set_clk;
2055 min_clocks.dcefClockInSR = hwmgr->display_config->min_dcef_deep_sleep_set_clk; 2068 min_clocks.dcefClockInSR = hwmgr->display_config->min_dcef_deep_sleep_set_clk;
2056 min_clocks.memoryClock = hwmgr->display_config->min_mem_set_clock; 2069 min_clocks.memoryClock = hwmgr->display_config->min_mem_set_clock;
@@ -2742,7 +2755,7 @@ static int vega20_print_clock_levels(struct pp_hwmgr *hwmgr,
2742 for (i = 0; i < clocks.num_levels; i++) 2755 for (i = 0; i < clocks.num_levels; i++)
2743 size += sprintf(buf + size, "%d: %uMhz %s\n", 2756 size += sprintf(buf + size, "%d: %uMhz %s\n",
2744 i, clocks.data[i].clocks_in_khz / 1000, 2757 i, clocks.data[i].clocks_in_khz / 1000,
2745 (clocks.data[i].clocks_in_khz == now) ? "*" : ""); 2758 (clocks.data[i].clocks_in_khz == now * 10) ? "*" : "");
2746 break; 2759 break;
2747 2760
2748 case PP_MCLK: 2761 case PP_MCLK:
@@ -2759,7 +2772,7 @@ static int vega20_print_clock_levels(struct pp_hwmgr *hwmgr,
2759 for (i = 0; i < clocks.num_levels; i++) 2772 for (i = 0; i < clocks.num_levels; i++)
2760 size += sprintf(buf + size, "%d: %uMhz %s\n", 2773 size += sprintf(buf + size, "%d: %uMhz %s\n",
2761 i, clocks.data[i].clocks_in_khz / 1000, 2774 i, clocks.data[i].clocks_in_khz / 1000,
2762 (clocks.data[i].clocks_in_khz == now) ? "*" : ""); 2775 (clocks.data[i].clocks_in_khz == now * 10) ? "*" : "");
2763 break; 2776 break;
2764 2777
2765 case PP_PCIE: 2778 case PP_PCIE:
@@ -3441,109 +3454,64 @@ static int vega20_get_thermal_temperature_range(struct pp_hwmgr *hwmgr,
3441 3454
3442static const struct pp_hwmgr_func vega20_hwmgr_funcs = { 3455static const struct pp_hwmgr_func vega20_hwmgr_funcs = {
3443 /* init/fini related */ 3456 /* init/fini related */
3444 .backend_init = 3457 .backend_init = vega20_hwmgr_backend_init,
3445 vega20_hwmgr_backend_init, 3458 .backend_fini = vega20_hwmgr_backend_fini,
3446 .backend_fini = 3459 .asic_setup = vega20_setup_asic_task,
3447 vega20_hwmgr_backend_fini, 3460 .power_off_asic = vega20_power_off_asic,
3448 .asic_setup = 3461 .dynamic_state_management_enable = vega20_enable_dpm_tasks,
3449 vega20_setup_asic_task, 3462 .dynamic_state_management_disable = vega20_disable_dpm_tasks,
3450 .power_off_asic =
3451 vega20_power_off_asic,
3452 .dynamic_state_management_enable =
3453 vega20_enable_dpm_tasks,
3454 .dynamic_state_management_disable =
3455 vega20_disable_dpm_tasks,
3456 /* power state related */ 3463 /* power state related */
3457 .apply_clocks_adjust_rules = 3464 .apply_clocks_adjust_rules = vega20_apply_clocks_adjust_rules,
3458 vega20_apply_clocks_adjust_rules, 3465 .pre_display_config_changed = vega20_pre_display_configuration_changed_task,
3459 .pre_display_config_changed = 3466 .display_config_changed = vega20_display_configuration_changed_task,
3460 vega20_pre_display_configuration_changed_task,
3461 .display_config_changed =
3462 vega20_display_configuration_changed_task,
3463 .check_smc_update_required_for_display_configuration = 3467 .check_smc_update_required_for_display_configuration =
3464 vega20_check_smc_update_required_for_display_configuration, 3468 vega20_check_smc_update_required_for_display_configuration,
3465 .notify_smc_display_config_after_ps_adjustment = 3469 .notify_smc_display_config_after_ps_adjustment =
3466 vega20_notify_smc_display_config_after_ps_adjustment, 3470 vega20_notify_smc_display_config_after_ps_adjustment,
3467 /* export to DAL */ 3471 /* export to DAL */
3468 .get_sclk = 3472 .get_sclk = vega20_dpm_get_sclk,
3469 vega20_dpm_get_sclk, 3473 .get_mclk = vega20_dpm_get_mclk,
3470 .get_mclk = 3474 .get_dal_power_level = vega20_get_dal_power_level,
3471 vega20_dpm_get_mclk, 3475 .get_clock_by_type_with_latency = vega20_get_clock_by_type_with_latency,
3472 .get_dal_power_level = 3476 .get_clock_by_type_with_voltage = vega20_get_clock_by_type_with_voltage,
3473 vega20_get_dal_power_level, 3477 .set_watermarks_for_clocks_ranges = vega20_set_watermarks_for_clocks_ranges,
3474 .get_clock_by_type_with_latency = 3478 .display_clock_voltage_request = vega20_display_clock_voltage_request,
3475 vega20_get_clock_by_type_with_latency, 3479 .get_performance_level = vega20_get_performance_level,
3476 .get_clock_by_type_with_voltage =
3477 vega20_get_clock_by_type_with_voltage,
3478 .set_watermarks_for_clocks_ranges =
3479 vega20_set_watermarks_for_clocks_ranges,
3480 .display_clock_voltage_request =
3481 vega20_display_clock_voltage_request,
3482 .get_performance_level =
3483 vega20_get_performance_level,
3484 /* UMD pstate, profile related */ 3480 /* UMD pstate, profile related */
3485 .force_dpm_level = 3481 .force_dpm_level = vega20_dpm_force_dpm_level,
3486 vega20_dpm_force_dpm_level, 3482 .get_power_profile_mode = vega20_get_power_profile_mode,
3487 .get_power_profile_mode = 3483 .set_power_profile_mode = vega20_set_power_profile_mode,
3488 vega20_get_power_profile_mode,
3489 .set_power_profile_mode =
3490 vega20_set_power_profile_mode,
3491 /* od related */ 3484 /* od related */
3492 .set_power_limit = 3485 .set_power_limit = vega20_set_power_limit,
3493 vega20_set_power_limit, 3486 .get_sclk_od = vega20_get_sclk_od,
3494 .get_sclk_od = 3487 .set_sclk_od = vega20_set_sclk_od,
3495 vega20_get_sclk_od, 3488 .get_mclk_od = vega20_get_mclk_od,
3496 .set_sclk_od = 3489 .set_mclk_od = vega20_set_mclk_od,
3497 vega20_set_sclk_od, 3490 .odn_edit_dpm_table = vega20_odn_edit_dpm_table,
3498 .get_mclk_od =
3499 vega20_get_mclk_od,
3500 .set_mclk_od =
3501 vega20_set_mclk_od,
3502 .odn_edit_dpm_table =
3503 vega20_odn_edit_dpm_table,
3504 /* for sysfs to retrive/set gfxclk/memclk */ 3491 /* for sysfs to retrive/set gfxclk/memclk */
3505 .force_clock_level = 3492 .force_clock_level = vega20_force_clock_level,
3506 vega20_force_clock_level, 3493 .print_clock_levels = vega20_print_clock_levels,
3507 .print_clock_levels = 3494 .read_sensor = vega20_read_sensor,
3508 vega20_print_clock_levels,
3509 .read_sensor =
3510 vega20_read_sensor,
3511 /* powergate related */ 3495 /* powergate related */
3512 .powergate_uvd = 3496 .powergate_uvd = vega20_power_gate_uvd,
3513 vega20_power_gate_uvd, 3497 .powergate_vce = vega20_power_gate_vce,
3514 .powergate_vce =
3515 vega20_power_gate_vce,
3516 /* thermal related */ 3498 /* thermal related */
3517 .start_thermal_controller = 3499 .start_thermal_controller = vega20_start_thermal_controller,
3518 vega20_start_thermal_controller, 3500 .stop_thermal_controller = vega20_thermal_stop_thermal_controller,
3519 .stop_thermal_controller = 3501 .get_thermal_temperature_range = vega20_get_thermal_temperature_range,
3520 vega20_thermal_stop_thermal_controller, 3502 .register_irq_handlers = smu9_register_irq_handlers,
3521 .get_thermal_temperature_range = 3503 .disable_smc_firmware_ctf = vega20_thermal_disable_alert,
3522 vega20_get_thermal_temperature_range,
3523 .register_irq_handlers =
3524 smu9_register_irq_handlers,
3525 .disable_smc_firmware_ctf =
3526 vega20_thermal_disable_alert,
3527 /* fan control related */ 3504 /* fan control related */
3528 .get_fan_speed_percent = 3505 .get_fan_speed_percent = vega20_fan_ctrl_get_fan_speed_percent,
3529 vega20_fan_ctrl_get_fan_speed_percent, 3506 .set_fan_speed_percent = vega20_fan_ctrl_set_fan_speed_percent,
3530 .set_fan_speed_percent = 3507 .get_fan_speed_info = vega20_fan_ctrl_get_fan_speed_info,
3531 vega20_fan_ctrl_set_fan_speed_percent, 3508 .get_fan_speed_rpm = vega20_fan_ctrl_get_fan_speed_rpm,
3532 .get_fan_speed_info = 3509 .set_fan_speed_rpm = vega20_fan_ctrl_set_fan_speed_rpm,
3533 vega20_fan_ctrl_get_fan_speed_info, 3510 .get_fan_control_mode = vega20_get_fan_control_mode,
3534 .get_fan_speed_rpm = 3511 .set_fan_control_mode = vega20_set_fan_control_mode,
3535 vega20_fan_ctrl_get_fan_speed_rpm,
3536 .set_fan_speed_rpm =
3537 vega20_fan_ctrl_set_fan_speed_rpm,
3538 .get_fan_control_mode =
3539 vega20_get_fan_control_mode,
3540 .set_fan_control_mode =
3541 vega20_set_fan_control_mode,
3542 /* smu memory related */ 3512 /* smu memory related */
3543 .notify_cac_buffer_info = 3513 .notify_cac_buffer_info = vega20_notify_cac_buffer_info,
3544 vega20_notify_cac_buffer_info, 3514 .enable_mgpu_fan_boost = vega20_enable_mgpu_fan_boost,
3545 .enable_mgpu_fan_boost =
3546 vega20_enable_mgpu_fan_boost,
3547}; 3515};
3548 3516
3549int vega20_hwmgr_init(struct pp_hwmgr *hwmgr) 3517int vega20_hwmgr_init(struct pp_hwmgr *hwmgr)
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h
index 56fe6a0d42e8..25faaa5c5b10 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h
@@ -328,6 +328,7 @@ struct vega20_registry_data {
328 uint8_t disable_auto_wattman; 328 uint8_t disable_auto_wattman;
329 uint32_t auto_wattman_debug; 329 uint32_t auto_wattman_debug;
330 uint32_t auto_wattman_sample_period; 330 uint32_t auto_wattman_sample_period;
331 uint32_t fclk_gfxclk_ratio;
331 uint8_t auto_wattman_threshold; 332 uint8_t auto_wattman_threshold;
332 uint8_t log_avfs_param; 333 uint8_t log_avfs_param;
333 uint8_t enable_enginess; 334 uint8_t enable_enginess;
diff --git a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h
index e5a60aa44b5d..07d180ce4d18 100644
--- a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h
+++ b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h
@@ -28,7 +28,6 @@
28#include "hardwaremanager.h" 28#include "hardwaremanager.h"
29#include "hwmgr_ppt.h" 29#include "hwmgr_ppt.h"
30#include "ppatomctrl.h" 30#include "ppatomctrl.h"
31#include "hwmgr_ppt.h"
32#include "power_state.h" 31#include "power_state.h"
33#include "smu_helper.h" 32#include "smu_helper.h"
34 33
diff --git a/drivers/gpu/drm/amd/powerplay/inc/smu7_common.h b/drivers/gpu/drm/amd/powerplay/inc/smu7_common.h
index 65eb630bfea3..94bf7b649c20 100644
--- a/drivers/gpu/drm/amd/powerplay/inc/smu7_common.h
+++ b/drivers/gpu/drm/amd/powerplay/inc/smu7_common.h
@@ -40,10 +40,6 @@
40#include "bif/bif_5_0_d.h" 40#include "bif/bif_5_0_d.h"
41#include "bif/bif_5_0_sh_mask.h" 41#include "bif/bif_5_0_sh_mask.h"
42 42
43
44#include "bif/bif_5_0_d.h"
45#include "bif/bif_5_0_sh_mask.h"
46
47#include "dce/dce_10_0_d.h" 43#include "dce/dce_10_0_d.h"
48#include "dce/dce_10_0_sh_mask.h" 44#include "dce/dce_10_0_sh_mask.h"
49 45
diff --git a/drivers/gpu/drm/amd/powerplay/inc/vega20_ppsmc.h b/drivers/gpu/drm/amd/powerplay/inc/vega20_ppsmc.h
index 45d64a81e945..4f63a736ea0e 100644
--- a/drivers/gpu/drm/amd/powerplay/inc/vega20_ppsmc.h
+++ b/drivers/gpu/drm/amd/powerplay/inc/vega20_ppsmc.h
@@ -105,7 +105,8 @@
105#define PPSMC_MSG_SetSystemVirtualDramAddrHigh 0x4B 105#define PPSMC_MSG_SetSystemVirtualDramAddrHigh 0x4B
106#define PPSMC_MSG_SetSystemVirtualDramAddrLow 0x4C 106#define PPSMC_MSG_SetSystemVirtualDramAddrLow 0x4C
107#define PPSMC_MSG_WaflTest 0x4D 107#define PPSMC_MSG_WaflTest 0x4D
108// Unused ID 0x4E to 0x50 108#define PPSMC_MSG_SetFclkGfxClkRatio 0x4E
109// Unused ID 0x4F to 0x50
109#define PPSMC_MSG_AllowGfxOff 0x51 110#define PPSMC_MSG_AllowGfxOff 0x51
110#define PPSMC_MSG_DisallowGfxOff 0x52 111#define PPSMC_MSG_DisallowGfxOff 0x52
111#define PPSMC_MSG_GetPptLimit 0x53 112#define PPSMC_MSG_GetPptLimit 0x53
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
index 872d3824337b..2b2c26616902 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
@@ -44,7 +44,6 @@
44 44
45#include "smu7_hwmgr.h" 45#include "smu7_hwmgr.h"
46#include "hardwaremanager.h" 46#include "hardwaremanager.h"
47#include "ppatomctrl.h"
48#include "atombios.h" 47#include "atombios.h"
49#include "pppcielanes.h" 48#include "pppcielanes.h"
50 49
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/smu10_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/smu10_smumgr.c
index d0eb8ab50148..d111dd4e03d7 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/smu10_smumgr.c
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/smu10_smumgr.c
@@ -29,7 +29,6 @@
29#include "rv_ppsmc.h" 29#include "rv_ppsmc.h"
30#include "smu10_driver_if.h" 30#include "smu10_driver_if.h"
31#include "smu10.h" 31#include "smu10.h"
32#include "ppatomctrl.h"
33#include "pp_debug.h" 32#include "pp_debug.h"
34 33
35 34
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/smu8_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/smu8_smumgr.c
index 09b844ec3eab..e2787e14a500 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/smu8_smumgr.c
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/smu8_smumgr.c
@@ -24,6 +24,7 @@
24#include <linux/delay.h> 24#include <linux/delay.h>
25#include <linux/gfp.h> 25#include <linux/gfp.h>
26#include <linux/kernel.h> 26#include <linux/kernel.h>
27#include <linux/ktime.h>
27#include <linux/slab.h> 28#include <linux/slab.h>
28#include <linux/types.h> 29#include <linux/types.h>
29 30
@@ -61,9 +62,13 @@ static uint32_t smu8_get_argument(struct pp_hwmgr *hwmgr)
61 mmSMU_MP1_SRBM2P_ARG_0); 62 mmSMU_MP1_SRBM2P_ARG_0);
62} 63}
63 64
64static int smu8_send_msg_to_smc_async(struct pp_hwmgr *hwmgr, uint16_t msg) 65/* Send a message to the SMC, and wait for its response.*/
66static int smu8_send_msg_to_smc_with_parameter(struct pp_hwmgr *hwmgr,
67 uint16_t msg, uint32_t parameter)
65{ 68{
66 int result = 0; 69 int result = 0;
70 ktime_t t_start;
71 s64 elapsed_us;
67 72
68 if (hwmgr == NULL || hwmgr->device == NULL) 73 if (hwmgr == NULL || hwmgr->device == NULL)
69 return -EINVAL; 74 return -EINVAL;
@@ -74,28 +79,31 @@ static int smu8_send_msg_to_smc_async(struct pp_hwmgr *hwmgr, uint16_t msg)
74 /* Read the last message to SMU, to report actual cause */ 79 /* Read the last message to SMU, to report actual cause */
75 uint32_t val = cgs_read_register(hwmgr->device, 80 uint32_t val = cgs_read_register(hwmgr->device,
76 mmSMU_MP1_SRBM2P_MSG_0); 81 mmSMU_MP1_SRBM2P_MSG_0);
77 pr_err("smu8_send_msg_to_smc_async (0x%04x) failed\n", msg); 82 pr_err("%s(0x%04x) aborted; SMU still servicing msg (0x%04x)\n",
78 pr_err("SMU still servicing msg (0x%04x)\n", val); 83 __func__, msg, val);
79 return result; 84 return result;
80 } 85 }
86 t_start = ktime_get();
87
88 cgs_write_register(hwmgr->device, mmSMU_MP1_SRBM2P_ARG_0, parameter);
81 89
82 cgs_write_register(hwmgr->device, mmSMU_MP1_SRBM2P_RESP_0, 0); 90 cgs_write_register(hwmgr->device, mmSMU_MP1_SRBM2P_RESP_0, 0);
83 cgs_write_register(hwmgr->device, mmSMU_MP1_SRBM2P_MSG_0, msg); 91 cgs_write_register(hwmgr->device, mmSMU_MP1_SRBM2P_MSG_0, msg);
84 92
85 return 0; 93 result = PHM_WAIT_FIELD_UNEQUAL(hwmgr,
94 SMU_MP1_SRBM2P_RESP_0, CONTENT, 0);
95
96 elapsed_us = ktime_us_delta(ktime_get(), t_start);
97
98 WARN(result, "%s(0x%04x, %#x) timed out after %lld us\n",
99 __func__, msg, parameter, elapsed_us);
100
101 return result;
86} 102}
87 103
88/* Send a message to the SMC, and wait for its response.*/
89static int smu8_send_msg_to_smc(struct pp_hwmgr *hwmgr, uint16_t msg) 104static int smu8_send_msg_to_smc(struct pp_hwmgr *hwmgr, uint16_t msg)
90{ 105{
91 int result = 0; 106 return smu8_send_msg_to_smc_with_parameter(hwmgr, msg, 0);
92
93 result = smu8_send_msg_to_smc_async(hwmgr, msg);
94 if (result != 0)
95 return result;
96
97 return PHM_WAIT_FIELD_UNEQUAL(hwmgr,
98 SMU_MP1_SRBM2P_RESP_0, CONTENT, 0);
99} 107}
100 108
101static int smu8_set_smc_sram_address(struct pp_hwmgr *hwmgr, 109static int smu8_set_smc_sram_address(struct pp_hwmgr *hwmgr,
@@ -135,17 +143,6 @@ static int smu8_write_smc_sram_dword(struct pp_hwmgr *hwmgr,
135 return result; 143 return result;
136} 144}
137 145
138static int smu8_send_msg_to_smc_with_parameter(struct pp_hwmgr *hwmgr,
139 uint16_t msg, uint32_t parameter)
140{
141 if (hwmgr == NULL || hwmgr->device == NULL)
142 return -EINVAL;
143
144 cgs_write_register(hwmgr->device, mmSMU_MP1_SRBM2P_ARG_0, parameter);
145
146 return smu8_send_msg_to_smc(hwmgr, msg);
147}
148
149static int smu8_check_fw_load_finish(struct pp_hwmgr *hwmgr, 146static int smu8_check_fw_load_finish(struct pp_hwmgr *hwmgr,
150 uint32_t firmware) 147 uint32_t firmware)
151{ 148{
@@ -737,6 +734,10 @@ static int smu8_start_smu(struct pp_hwmgr *hwmgr)
737 734
738 cgs_write_register(hwmgr->device, mmMP0PUB_IND_INDEX, index); 735 cgs_write_register(hwmgr->device, mmMP0PUB_IND_INDEX, index);
739 hwmgr->smu_version = cgs_read_register(hwmgr->device, mmMP0PUB_IND_DATA); 736 hwmgr->smu_version = cgs_read_register(hwmgr->device, mmMP0PUB_IND_DATA);
737 pr_info("smu version %02d.%02d.%02d\n",
738 ((hwmgr->smu_version >> 16) & 0xFF),
739 ((hwmgr->smu_version >> 8) & 0xFF),
740 (hwmgr->smu_version & 0xFF));
740 adev->pm.fw_version = hwmgr->smu_version >> 8; 741 adev->pm.fw_version = hwmgr->smu_version >> 8;
741 742
742 return smu8_request_smu_load_fw(hwmgr); 743 return smu8_request_smu_load_fw(hwmgr);
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/smumgr.c
index 99d5e4f98f49..a6edd5df33b0 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/smumgr.c
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/smumgr.c
@@ -37,10 +37,13 @@ MODULE_FIRMWARE("amdgpu/fiji_smc.bin");
37MODULE_FIRMWARE("amdgpu/polaris10_smc.bin"); 37MODULE_FIRMWARE("amdgpu/polaris10_smc.bin");
38MODULE_FIRMWARE("amdgpu/polaris10_smc_sk.bin"); 38MODULE_FIRMWARE("amdgpu/polaris10_smc_sk.bin");
39MODULE_FIRMWARE("amdgpu/polaris10_k_smc.bin"); 39MODULE_FIRMWARE("amdgpu/polaris10_k_smc.bin");
40MODULE_FIRMWARE("amdgpu/polaris10_k2_smc.bin");
40MODULE_FIRMWARE("amdgpu/polaris11_smc.bin"); 41MODULE_FIRMWARE("amdgpu/polaris11_smc.bin");
41MODULE_FIRMWARE("amdgpu/polaris11_smc_sk.bin"); 42MODULE_FIRMWARE("amdgpu/polaris11_smc_sk.bin");
42MODULE_FIRMWARE("amdgpu/polaris11_k_smc.bin"); 43MODULE_FIRMWARE("amdgpu/polaris11_k_smc.bin");
44MODULE_FIRMWARE("amdgpu/polaris11_k2_smc.bin");
43MODULE_FIRMWARE("amdgpu/polaris12_smc.bin"); 45MODULE_FIRMWARE("amdgpu/polaris12_smc.bin");
46MODULE_FIRMWARE("amdgpu/polaris12_k_smc.bin");
44MODULE_FIRMWARE("amdgpu/vegam_smc.bin"); 47MODULE_FIRMWARE("amdgpu/vegam_smc.bin");
45MODULE_FIRMWARE("amdgpu/vega10_smc.bin"); 48MODULE_FIRMWARE("amdgpu/vega10_smc.bin");
46MODULE_FIRMWARE("amdgpu/vega10_acg_smc.bin"); 49MODULE_FIRMWARE("amdgpu/vega10_acg_smc.bin");
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/vegam_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/vegam_smumgr.c
index 9f71512b2510..1e69300f6175 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/vegam_smumgr.c
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/vegam_smumgr.c
@@ -40,7 +40,6 @@
40 40
41#include "smu7_hwmgr.h" 41#include "smu7_hwmgr.h"
42#include "hardwaremanager.h" 42#include "hardwaremanager.h"
43#include "ppatomctrl.h"
44#include "atombios.h" 43#include "atombios.h"
45#include "pppcielanes.h" 44#include "pppcielanes.h"
46 45