diff options
Diffstat (limited to 'drivers/gpu/drm/amd/powerplay')
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/smu7_powertune.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c | 32 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega10_powertune.c | 36 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c | 192 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/inc/hwmgr.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/inc/smu7_common.h | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/inc/vega20_ppsmc.h | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/smumgr/smu10_smumgr.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/smumgr/smu8_smumgr.c | 49 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/smumgr/smumgr.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/smumgr/vegam_smumgr.c | 1 |
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; |
1021 | error: | 1021 | error: |
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; |
1053 | error: | 1053 | error: |
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 | ||
833 | static 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 | |||
845 | static 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 | |||
832 | static int vega20_disable_all_smu_features(struct pp_hwmgr *hwmgr) | 855 | static 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 | ||
1975 | static 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 | |||
1988 | int vega20_display_clock_voltage_request(struct pp_hwmgr *hwmgr, | 2008 | int 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 | ||
3442 | static const struct pp_hwmgr_func vega20_hwmgr_funcs = { | 3455 | static 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 | ||
3549 | int vega20_hwmgr_init(struct pp_hwmgr *hwmgr) | 3517 | int 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 | ||
64 | static 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.*/ |
66 | static 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.*/ | ||
89 | static int smu8_send_msg_to_smc(struct pp_hwmgr *hwmgr, uint16_t msg) | 104 | static 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 | ||
101 | static int smu8_set_smc_sram_address(struct pp_hwmgr *hwmgr, | 109 | static 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 | ||
138 | static 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 | |||
149 | static int smu8_check_fw_load_finish(struct pp_hwmgr *hwmgr, | 146 | static 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"); | |||
37 | MODULE_FIRMWARE("amdgpu/polaris10_smc.bin"); | 37 | MODULE_FIRMWARE("amdgpu/polaris10_smc.bin"); |
38 | MODULE_FIRMWARE("amdgpu/polaris10_smc_sk.bin"); | 38 | MODULE_FIRMWARE("amdgpu/polaris10_smc_sk.bin"); |
39 | MODULE_FIRMWARE("amdgpu/polaris10_k_smc.bin"); | 39 | MODULE_FIRMWARE("amdgpu/polaris10_k_smc.bin"); |
40 | MODULE_FIRMWARE("amdgpu/polaris10_k2_smc.bin"); | ||
40 | MODULE_FIRMWARE("amdgpu/polaris11_smc.bin"); | 41 | MODULE_FIRMWARE("amdgpu/polaris11_smc.bin"); |
41 | MODULE_FIRMWARE("amdgpu/polaris11_smc_sk.bin"); | 42 | MODULE_FIRMWARE("amdgpu/polaris11_smc_sk.bin"); |
42 | MODULE_FIRMWARE("amdgpu/polaris11_k_smc.bin"); | 43 | MODULE_FIRMWARE("amdgpu/polaris11_k_smc.bin"); |
44 | MODULE_FIRMWARE("amdgpu/polaris11_k2_smc.bin"); | ||
43 | MODULE_FIRMWARE("amdgpu/polaris12_smc.bin"); | 45 | MODULE_FIRMWARE("amdgpu/polaris12_smc.bin"); |
46 | MODULE_FIRMWARE("amdgpu/polaris12_k_smc.bin"); | ||
44 | MODULE_FIRMWARE("amdgpu/vegam_smc.bin"); | 47 | MODULE_FIRMWARE("amdgpu/vegam_smc.bin"); |
45 | MODULE_FIRMWARE("amdgpu/vega10_smc.bin"); | 48 | MODULE_FIRMWARE("amdgpu/vega10_smc.bin"); |
46 | MODULE_FIRMWARE("amdgpu/vega10_acg_smc.bin"); | 49 | MODULE_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 | ||