mirror of https://gitee.com/openkylin/linux.git
drm/amd/powerplay: revise reading/writing pptable on Tonga
Change the way we store pptables in the driver to better facilitate eventual runtime updates for debugging. Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Eric Huang <JinHuiEric.Huang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
65ba4f227c
commit
92dea67dd6
|
@ -4443,17 +4443,14 @@ int tonga_reset_asic_tasks(struct pp_hwmgr *hwmgr)
|
||||||
|
|
||||||
int tonga_hwmgr_backend_fini(struct pp_hwmgr *hwmgr)
|
int tonga_hwmgr_backend_fini(struct pp_hwmgr *hwmgr)
|
||||||
{
|
{
|
||||||
if (NULL != hwmgr->dyn_state.vddc_dep_on_dal_pwrl) {
|
struct tonga_hwmgr *data = (struct tonga_hwmgr *)(hwmgr->backend);
|
||||||
kfree(hwmgr->dyn_state.vddc_dep_on_dal_pwrl);
|
|
||||||
hwmgr->dyn_state.vddc_dep_on_dal_pwrl = NULL;
|
if (data->soft_pp_table) {
|
||||||
|
kfree(data->soft_pp_table);
|
||||||
|
data->soft_pp_table = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NULL != hwmgr->backend) {
|
return phm_hwmgr_backend_fini(hwmgr);
|
||||||
kfree(hwmgr->backend);
|
|
||||||
hwmgr->backend = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -6058,18 +6055,34 @@ static int tonga_get_pp_table(struct pp_hwmgr *hwmgr, char **table)
|
||||||
{
|
{
|
||||||
struct tonga_hwmgr *data = (struct tonga_hwmgr *)(hwmgr->backend);
|
struct tonga_hwmgr *data = (struct tonga_hwmgr *)(hwmgr->backend);
|
||||||
|
|
||||||
*table = (char *)&data->smc_state_table;
|
if (!data->soft_pp_table) {
|
||||||
|
data->soft_pp_table = kzalloc(hwmgr->soft_pp_table_size, GFP_KERNEL);
|
||||||
|
if (!data->soft_pp_table)
|
||||||
|
return -ENOMEM;
|
||||||
|
memcpy(data->soft_pp_table, hwmgr->soft_pp_table,
|
||||||
|
hwmgr->soft_pp_table_size);
|
||||||
|
}
|
||||||
|
|
||||||
return sizeof(struct SMU72_Discrete_DpmTable);
|
*table = (char *)&data->soft_pp_table;
|
||||||
|
|
||||||
|
return hwmgr->soft_pp_table_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tonga_set_pp_table(struct pp_hwmgr *hwmgr, const char *buf, size_t size)
|
static int tonga_set_pp_table(struct pp_hwmgr *hwmgr, const char *buf, size_t size)
|
||||||
{
|
{
|
||||||
struct tonga_hwmgr *data = (struct tonga_hwmgr *)(hwmgr->backend);
|
struct tonga_hwmgr *data = (struct tonga_hwmgr *)(hwmgr->backend);
|
||||||
|
|
||||||
void *table = (void *)&data->smc_state_table;
|
if (!data->soft_pp_table) {
|
||||||
|
data->soft_pp_table = kzalloc(hwmgr->soft_pp_table_size, GFP_KERNEL);
|
||||||
|
if (!data->soft_pp_table)
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
memcpy(table, buf, size);
|
memcpy(data->soft_pp_table, buf, size);
|
||||||
|
|
||||||
|
hwmgr->soft_pp_table = data->soft_pp_table;
|
||||||
|
|
||||||
|
/* TODO: re-init powerplay to implement modified pptable */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -353,6 +353,8 @@ struct tonga_hwmgr {
|
||||||
bool acp_power_gated; /* 1: gated, 0:not gated */
|
bool acp_power_gated; /* 1: gated, 0:not gated */
|
||||||
bool pg_acp_init;
|
bool pg_acp_init;
|
||||||
|
|
||||||
|
/* soft pptable for re-uploading into smu */
|
||||||
|
void *soft_pp_table;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct tonga_hwmgr tonga_hwmgr;
|
typedef struct tonga_hwmgr tonga_hwmgr;
|
||||||
|
|
Loading…
Reference in New Issue