diff options
| author | Rex Zhu <Rex.Zhu@amd.com> | 2016-11-10 01:07:34 -0500 |
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2016-11-10 14:04:27 -0500 |
| commit | 954e6bee03fea509a85aea4cbf45307fe4e3b43e (patch) | |
| tree | 6a40e9edf66c087fe33a451a780519faf9223dfc /drivers/gpu/drm/amd | |
| parent | 0f12f73c5175d39445fa10cdca4481f80efdef49 (diff) | |
drm/amd/powerplay: implement get_clock_by_type for iceland.
iceland use pptable v0.
bugs:
https://bugzilla.kernel.org/show_bug.cgi?id=185681
https://bugs.freedesktop.org/show_bug.cgi?id=98357
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd')
| -rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c | 51 |
1 files changed, 33 insertions, 18 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c index f41cddf2a16b..b0c929dd8beb 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c | |||
| @@ -4233,18 +4233,26 @@ static int smu7_get_sclks(struct pp_hwmgr *hwmgr, struct amd_pp_clocks *clocks) | |||
| 4233 | { | 4233 | { |
| 4234 | struct phm_ppt_v1_information *table_info = | 4234 | struct phm_ppt_v1_information *table_info = |
| 4235 | (struct phm_ppt_v1_information *)hwmgr->pptable; | 4235 | (struct phm_ppt_v1_information *)hwmgr->pptable; |
| 4236 | struct phm_ppt_v1_clock_voltage_dependency_table *dep_sclk_table; | 4236 | struct phm_ppt_v1_clock_voltage_dependency_table *dep_sclk_table = NULL; |
| 4237 | struct phm_clock_voltage_dependency_table *sclk_table; | ||
| 4237 | int i; | 4238 | int i; |
| 4238 | 4239 | ||
| 4239 | if (table_info == NULL) | 4240 | if (hwmgr->pp_table_version == PP_TABLE_V1) { |
| 4240 | return -EINVAL; | 4241 | if (table_info == NULL || table_info->vdd_dep_on_sclk == NULL) |
| 4241 | 4242 | return -EINVAL; | |
| 4242 | dep_sclk_table = table_info->vdd_dep_on_sclk; | 4243 | dep_sclk_table = table_info->vdd_dep_on_sclk; |
| 4243 | 4244 | for (i = 0; i < dep_sclk_table->count; i++) { | |
| 4244 | for (i = 0; i < dep_sclk_table->count; i++) { | 4245 | clocks->clock[i] = dep_sclk_table->entries[i].clk; |
| 4245 | clocks->clock[i] = dep_sclk_table->entries[i].clk; | 4246 | clocks->count++; |
| 4246 | clocks->count++; | 4247 | } |
| 4248 | } else if (hwmgr->pp_table_version == PP_TABLE_V0) { | ||
| 4249 | sclk_table = hwmgr->dyn_state.vddc_dependency_on_sclk; | ||
| 4250 | for (i = 0; i < sclk_table->count; i++) { | ||
| 4251 | clocks->clock[i] = sclk_table->entries[i].clk; | ||
| 4252 | clocks->count++; | ||
| 4253 | } | ||
| 4247 | } | 4254 | } |
| 4255 | |||
| 4248 | return 0; | 4256 | return 0; |
| 4249 | } | 4257 | } |
| 4250 | 4258 | ||
| @@ -4266,17 +4274,24 @@ static int smu7_get_mclks(struct pp_hwmgr *hwmgr, struct amd_pp_clocks *clocks) | |||
| 4266 | (struct phm_ppt_v1_information *)hwmgr->pptable; | 4274 | (struct phm_ppt_v1_information *)hwmgr->pptable; |
| 4267 | struct phm_ppt_v1_clock_voltage_dependency_table *dep_mclk_table; | 4275 | struct phm_ppt_v1_clock_voltage_dependency_table *dep_mclk_table; |
| 4268 | int i; | 4276 | int i; |
| 4277 | struct phm_clock_voltage_dependency_table *mclk_table; | ||
| 4269 | 4278 | ||
| 4270 | if (table_info == NULL) | 4279 | if (hwmgr->pp_table_version == PP_TABLE_V1) { |
| 4271 | return -EINVAL; | 4280 | if (table_info == NULL) |
| 4272 | 4281 | return -EINVAL; | |
| 4273 | dep_mclk_table = table_info->vdd_dep_on_mclk; | 4282 | dep_mclk_table = table_info->vdd_dep_on_mclk; |
| 4274 | 4283 | for (i = 0; i < dep_mclk_table->count; i++) { | |
| 4275 | for (i = 0; i < dep_mclk_table->count; i++) { | 4284 | clocks->clock[i] = dep_mclk_table->entries[i].clk; |
| 4276 | clocks->clock[i] = dep_mclk_table->entries[i].clk; | 4285 | clocks->latency[i] = smu7_get_mem_latency(hwmgr, |
| 4277 | clocks->latency[i] = smu7_get_mem_latency(hwmgr, | ||
| 4278 | dep_mclk_table->entries[i].clk); | 4286 | dep_mclk_table->entries[i].clk); |
| 4279 | clocks->count++; | 4287 | clocks->count++; |
| 4288 | } | ||
| 4289 | } else if (hwmgr->pp_table_version == PP_TABLE_V0) { | ||
| 4290 | mclk_table = hwmgr->dyn_state.vddc_dependency_on_mclk; | ||
| 4291 | for (i = 0; i < mclk_table->count; i++) { | ||
| 4292 | clocks->clock[i] = mclk_table->entries[i].clk; | ||
| 4293 | clocks->count++; | ||
| 4294 | } | ||
| 4280 | } | 4295 | } |
| 4281 | return 0; | 4296 | return 0; |
| 4282 | } | 4297 | } |
