Commit 816d61d5 authored by Evan Quan's avatar Evan Quan Committed by Alex Deucher

drm/amd/pm: fulfill the support for DriverSmuConfig table

Enable the support for DriverSmuConfig table on Navi1x and
Sienna_Cichlid.
Signed-off-by: default avatarEvan Quan <evan.quan@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 60aac460
...@@ -337,6 +337,7 @@ struct smu_table_context ...@@ -337,6 +337,7 @@ struct smu_table_context
struct smu_bios_boot_up_values boot_values; struct smu_bios_boot_up_values boot_values;
void *driver_pptable; void *driver_pptable;
void *ecc_table; void *ecc_table;
void *driver_smu_config_table;
struct smu_table tables[SMU_TABLE_COUNT]; struct smu_table tables[SMU_TABLE_COUNT];
/* /*
* The driver table is just a staging buffer for * The driver table is just a staging buffer for
......
...@@ -510,6 +510,8 @@ static int navi10_tables_init(struct smu_context *smu) ...@@ -510,6 +510,8 @@ static int navi10_tables_init(struct smu_context *smu)
SMU_TABLE_INIT(tables, SMU_TABLE_ACTIVITY_MONITOR_COEFF, SMU_TABLE_INIT(tables, SMU_TABLE_ACTIVITY_MONITOR_COEFF,
sizeof(DpmActivityMonitorCoeffInt_t), PAGE_SIZE, sizeof(DpmActivityMonitorCoeffInt_t), PAGE_SIZE,
AMDGPU_GEM_DOMAIN_VRAM); AMDGPU_GEM_DOMAIN_VRAM);
SMU_TABLE_INIT(tables, SMU_TABLE_DRIVER_SMU_CONFIG, sizeof(DriverSmuConfig_t),
PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM);
smu_table->metrics_table = kzalloc(sizeof(SmuMetrics_NV1X_t), smu_table->metrics_table = kzalloc(sizeof(SmuMetrics_NV1X_t),
GFP_KERNEL); GFP_KERNEL);
...@@ -526,8 +528,15 @@ static int navi10_tables_init(struct smu_context *smu) ...@@ -526,8 +528,15 @@ static int navi10_tables_init(struct smu_context *smu)
if (!smu_table->watermarks_table) if (!smu_table->watermarks_table)
goto err2_out; goto err2_out;
smu_table->driver_smu_config_table =
kzalloc(tables[SMU_TABLE_DRIVER_SMU_CONFIG].size, GFP_KERNEL);
if (!smu_table->driver_smu_config_table)
goto err3_out;
return 0; return 0;
err3_out:
kfree(smu_table->watermarks_table);
err2_out: err2_out:
kfree(smu_table->gpu_metrics_table); kfree(smu_table->gpu_metrics_table);
err1_out: err1_out:
......
...@@ -475,6 +475,8 @@ static int sienna_cichlid_tables_init(struct smu_context *smu) ...@@ -475,6 +475,8 @@ static int sienna_cichlid_tables_init(struct smu_context *smu)
AMDGPU_GEM_DOMAIN_VRAM); AMDGPU_GEM_DOMAIN_VRAM);
SMU_TABLE_INIT(tables, SMU_TABLE_ECCINFO, sizeof(EccInfoTable_t), SMU_TABLE_INIT(tables, SMU_TABLE_ECCINFO, sizeof(EccInfoTable_t),
PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM); PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM);
SMU_TABLE_INIT(tables, SMU_TABLE_DRIVER_SMU_CONFIG, sizeof(DriverSmuConfigExternal_t),
PAGE_SIZE, AMDGPU_GEM_DOMAIN_VRAM);
smu_table->metrics_table = kzalloc(sizeof(SmuMetricsExternal_t), GFP_KERNEL); smu_table->metrics_table = kzalloc(sizeof(SmuMetricsExternal_t), GFP_KERNEL);
if (!smu_table->metrics_table) if (!smu_table->metrics_table)
...@@ -492,10 +494,19 @@ static int sienna_cichlid_tables_init(struct smu_context *smu) ...@@ -492,10 +494,19 @@ static int sienna_cichlid_tables_init(struct smu_context *smu)
smu_table->ecc_table = kzalloc(tables[SMU_TABLE_ECCINFO].size, GFP_KERNEL); smu_table->ecc_table = kzalloc(tables[SMU_TABLE_ECCINFO].size, GFP_KERNEL);
if (!smu_table->ecc_table) if (!smu_table->ecc_table)
return -ENOMEM; goto err3_out;
smu_table->driver_smu_config_table =
kzalloc(tables[SMU_TABLE_DRIVER_SMU_CONFIG].size, GFP_KERNEL);
if (!smu_table->driver_smu_config_table)
goto err4_out;
return 0; return 0;
err4_out:
kfree(smu_table->ecc_table);
err3_out:
kfree(smu_table->watermarks_table);
err2_out: err2_out:
kfree(smu_table->gpu_metrics_table); kfree(smu_table->gpu_metrics_table);
err1_out: err1_out:
......
...@@ -473,9 +473,11 @@ int smu_v11_0_fini_smc_tables(struct smu_context *smu) ...@@ -473,9 +473,11 @@ int smu_v11_0_fini_smc_tables(struct smu_context *smu)
kfree(smu_table->hardcode_pptable); kfree(smu_table->hardcode_pptable);
smu_table->hardcode_pptable = NULL; smu_table->hardcode_pptable = NULL;
kfree(smu_table->driver_smu_config_table);
kfree(smu_table->ecc_table); kfree(smu_table->ecc_table);
kfree(smu_table->metrics_table); kfree(smu_table->metrics_table);
kfree(smu_table->watermarks_table); kfree(smu_table->watermarks_table);
smu_table->driver_smu_config_table = NULL;
smu_table->ecc_table = NULL; smu_table->ecc_table = NULL;
smu_table->metrics_table = NULL; smu_table->metrics_table = NULL;
smu_table->watermarks_table = NULL; smu_table->watermarks_table = NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment