forked from luck/tmp_suning_uos_patched
drm/amd/powerplay: support SMU metrics table on Vega12
That should provide some necessary sensor information. Signed-off-by: Evan Quan <evan.quan@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
901cb599db
commit
ada2b8f1c8
|
@ -1237,6 +1237,27 @@ static uint32_t vega12_dpm_get_mclk(struct pp_hwmgr *hwmgr, bool low)
|
|||
return (mem_clk * 100);
|
||||
}
|
||||
|
||||
static int vega12_get_metrics_table(struct pp_hwmgr *hwmgr, SmuMetrics_t *metrics_table)
|
||||
{
|
||||
struct vega12_hwmgr *data =
|
||||
(struct vega12_hwmgr *)(hwmgr->backend);
|
||||
int ret = 0;
|
||||
|
||||
if (!data->metrics_time || time_after(jiffies, data->metrics_time + HZ / 2)) {
|
||||
ret = smum_smc_table_manager(hwmgr, (uint8_t *)metrics_table,
|
||||
TABLE_SMU_METRICS, true);
|
||||
if (ret) {
|
||||
pr_info("Failed to export SMU metrics table!\n");
|
||||
return ret;
|
||||
}
|
||||
memcpy(&data->metrics_table, metrics_table, sizeof(SmuMetrics_t));
|
||||
data->metrics_time = jiffies;
|
||||
} else
|
||||
memcpy(metrics_table, &data->metrics_table, sizeof(SmuMetrics_t));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int vega12_get_gpu_power(struct pp_hwmgr *hwmgr, uint32_t *query)
|
||||
{
|
||||
#if 0
|
||||
|
|
|
@ -396,6 +396,9 @@ struct vega12_hwmgr {
|
|||
|
||||
/* ---- Gfxoff ---- */
|
||||
bool gfxoff_controlled_by_driver;
|
||||
|
||||
unsigned long metrics_time;
|
||||
SmuMetrics_t metrics_table;
|
||||
};
|
||||
|
||||
#define VEGA12_DPM2_NEAR_TDP_DEC 10
|
||||
|
|
|
@ -287,8 +287,26 @@ static int vega12_smu_init(struct pp_hwmgr *hwmgr)
|
|||
priv->smu_tables.entry[TABLE_OVERDRIVE].version = 0x01;
|
||||
priv->smu_tables.entry[TABLE_OVERDRIVE].size = sizeof(OverDriveTable_t);
|
||||
|
||||
/* allocate space for SMU_METRICS table */
|
||||
ret = amdgpu_bo_create_kernel((struct amdgpu_device *)hwmgr->adev,
|
||||
sizeof(SmuMetrics_t),
|
||||
PAGE_SIZE,
|
||||
AMDGPU_GEM_DOMAIN_VRAM,
|
||||
&priv->smu_tables.entry[TABLE_SMU_METRICS].handle,
|
||||
&priv->smu_tables.entry[TABLE_SMU_METRICS].mc_addr,
|
||||
&priv->smu_tables.entry[TABLE_SMU_METRICS].table);
|
||||
if (ret)
|
||||
goto err4;
|
||||
|
||||
priv->smu_tables.entry[TABLE_SMU_METRICS].version = 0x01;
|
||||
priv->smu_tables.entry[TABLE_SMU_METRICS].size = sizeof(SmuMetrics_t);
|
||||
|
||||
return 0;
|
||||
|
||||
err4:
|
||||
amdgpu_bo_free_kernel(&priv->smu_tables.entry[TABLE_OVERDRIVE].handle,
|
||||
&priv->smu_tables.entry[TABLE_OVERDRIVE].mc_addr,
|
||||
&priv->smu_tables.entry[TABLE_OVERDRIVE].table);
|
||||
err3:
|
||||
amdgpu_bo_free_kernel(&priv->smu_tables.entry[TABLE_AVFS_FUSE_OVERRIDE].handle,
|
||||
&priv->smu_tables.entry[TABLE_AVFS_FUSE_OVERRIDE].mc_addr,
|
||||
|
@ -334,6 +352,9 @@ static int vega12_smu_fini(struct pp_hwmgr *hwmgr)
|
|||
amdgpu_bo_free_kernel(&priv->smu_tables.entry[TABLE_OVERDRIVE].handle,
|
||||
&priv->smu_tables.entry[TABLE_OVERDRIVE].mc_addr,
|
||||
&priv->smu_tables.entry[TABLE_OVERDRIVE].table);
|
||||
amdgpu_bo_free_kernel(&priv->smu_tables.entry[TABLE_SMU_METRICS].handle,
|
||||
&priv->smu_tables.entry[TABLE_SMU_METRICS].mc_addr,
|
||||
&priv->smu_tables.entry[TABLE_SMU_METRICS].table);
|
||||
kfree(hwmgr->smu_backend);
|
||||
hwmgr->smu_backend = NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user