aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd
diff options
context:
space:
mode:
authorRex Zhu <Rex.Zhu@amd.com>2016-11-10 01:07:34 -0500
committerAlex Deucher <alexander.deucher@amd.com>2016-11-10 14:04:27 -0500
commit954e6bee03fea509a85aea4cbf45307fe4e3b43e (patch)
tree6a40e9edf66c087fe33a451a780519faf9223dfc /drivers/gpu/drm/amd
parent0f12f73c5175d39445fa10cdca4481f80efdef49 (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.c51
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}