aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorMikita Lipski <mikita.lipski@amd.com>2018-05-29 17:44:36 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-05-30 13:37:51 -0400
commit762f52e9e4d237d8d378b5bb495f64073a9ba481 (patch)
treef359387158c3d2a9e5e437feec0ef335e7c3e4cb /drivers/gpu
parent102e494001c70901a1de212469d3c8d48dbb301a (diff)
drm/amd/pp: Connect display_clock_voltage_request to a function pointer
Get rid of an empty dublicate of smu10_display_clock_voltage_request Add display_clock_voltage_request to smu10 functions struct so it can be called from outside the class and connect the pointer to the function. That way Display driver can finally apply clock voltage requests when needed. Signed-off-by: Mikita Lipski <mikita.lipski@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/smu10_hwmgr.c64
1 files changed, 31 insertions, 33 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu10_hwmgr.c
index e160b0577e66..6a6367190bed 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu10_hwmgr.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu10_hwmgr.c
@@ -53,8 +53,37 @@ static const unsigned long SMU10_Magic = (unsigned long) PHM_Rv_Magic;
53 53
54 54
55static int smu10_display_clock_voltage_request(struct pp_hwmgr *hwmgr, 55static int smu10_display_clock_voltage_request(struct pp_hwmgr *hwmgr,
56 struct pp_display_clock_request *clock_req); 56 struct pp_display_clock_request *clock_req)
57{
58 struct smu10_hwmgr *smu10_data = (struct smu10_hwmgr *)(hwmgr->backend);
59 enum amd_pp_clock_type clk_type = clock_req->clock_type;
60 uint32_t clk_freq = clock_req->clock_freq_in_khz / 1000;
61 PPSMC_Msg msg;
57 62
63 switch (clk_type) {
64 case amd_pp_dcf_clock:
65 if (clk_freq == smu10_data->dcf_actual_hard_min_freq)
66 return 0;
67 msg = PPSMC_MSG_SetHardMinDcefclkByFreq;
68 smu10_data->dcf_actual_hard_min_freq = clk_freq;
69 break;
70 case amd_pp_soc_clock:
71 msg = PPSMC_MSG_SetHardMinSocclkByFreq;
72 break;
73 case amd_pp_f_clock:
74 if (clk_freq == smu10_data->f_actual_hard_min_freq)
75 return 0;
76 smu10_data->f_actual_hard_min_freq = clk_freq;
77 msg = PPSMC_MSG_SetHardMinFclkByFreq;
78 break;
79 default:
80 pr_info("[DisplayClockVoltageRequest]Invalid Clock Type!");
81 return -EINVAL;
82 }
83 smum_send_msg_to_smc_with_parameter(hwmgr, msg, clk_freq);
84
85 return 0;
86}
58 87
59static struct smu10_power_state *cast_smu10_ps(struct pp_hw_power_state *hw_ps) 88static struct smu10_power_state *cast_smu10_ps(struct pp_hw_power_state *hw_ps)
60{ 89{
@@ -1023,39 +1052,7 @@ static int smu10_get_clock_by_type_with_voltage(struct pp_hwmgr *hwmgr,
1023 return 0; 1052 return 0;
1024} 1053}
1025 1054
1026static int smu10_display_clock_voltage_request(struct pp_hwmgr *hwmgr,
1027 struct pp_display_clock_request *clock_req)
1028{
1029 struct smu10_hwmgr *smu10_data = (struct smu10_hwmgr *)(hwmgr->backend);
1030 enum amd_pp_clock_type clk_type = clock_req->clock_type;
1031 uint32_t clk_freq = clock_req->clock_freq_in_khz / 1000;
1032 PPSMC_Msg msg;
1033
1034 switch (clk_type) {
1035 case amd_pp_dcf_clock:
1036 if (clk_freq == smu10_data->dcf_actual_hard_min_freq)
1037 return 0;
1038 msg = PPSMC_MSG_SetHardMinDcefclkByFreq;
1039 smu10_data->dcf_actual_hard_min_freq = clk_freq;
1040 break;
1041 case amd_pp_soc_clock:
1042 msg = PPSMC_MSG_SetHardMinSocclkByFreq;
1043 break;
1044 case amd_pp_f_clock:
1045 if (clk_freq == smu10_data->f_actual_hard_min_freq)
1046 return 0;
1047 smu10_data->f_actual_hard_min_freq = clk_freq;
1048 msg = PPSMC_MSG_SetHardMinFclkByFreq;
1049 break;
1050 default:
1051 pr_info("[DisplayClockVoltageRequest]Invalid Clock Type!");
1052 return -EINVAL;
1053 }
1054 1055
1055 smum_send_msg_to_smc_with_parameter(hwmgr, msg, clk_freq);
1056
1057 return 0;
1058}
1059 1056
1060static int smu10_get_max_high_clocks(struct pp_hwmgr *hwmgr, struct amd_pp_simple_clock_info *clocks) 1057static int smu10_get_max_high_clocks(struct pp_hwmgr *hwmgr, struct amd_pp_simple_clock_info *clocks)
1061{ 1058{
@@ -1188,6 +1185,7 @@ static const struct pp_hwmgr_func smu10_hwmgr_funcs = {
1188 .set_mmhub_powergating_by_smu = smu10_set_mmhub_powergating_by_smu, 1185 .set_mmhub_powergating_by_smu = smu10_set_mmhub_powergating_by_smu,
1189 .smus_notify_pwe = smu10_smus_notify_pwe, 1186 .smus_notify_pwe = smu10_smus_notify_pwe,
1190 .gfx_off_control = smu10_gfx_off_control, 1187 .gfx_off_control = smu10_gfx_off_control,
1188 .display_clock_voltage_request = smu10_display_clock_voltage_request,
1191}; 1189};
1192 1190
1193int smu10_init_function_pointers(struct pp_hwmgr *hwmgr) 1191int smu10_init_function_pointers(struct pp_hwmgr *hwmgr)