diff options
| author | Lijo Lazar <lijo.lazar@amd.com> | 2025-08-12 13:21:49 +0530 |
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2025-08-15 13:05:14 -0400 |
| commit | 8a358aaa5d171512c07e8eb87b4600ebc844e6c7 (patch) | |
| tree | fc1c8099b65fe05e6ce16d48e16e7dbe9208a2fe /drivers/gpu/drm | |
| parent | drm/amd/vcn: Add late_init callback for VCN v4.0.3 reset handling (diff) | |
| download | linux-8a358aaa5d171512c07e8eb87b4600ebc844e6c7.tar.gz linux-8a358aaa5d171512c07e8eb87b4600ebc844e6c7.zip | |
drm/amd/pm: Free SMUv13.0.6 resources on failure
Free the resources allocated if smu_v13_0_12_tables_init fails.
Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Fixes: 5bf93e1d6efd ("drm/amd/pm: Add caching to SMUv13.0.12 temp metric")
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm')
| -rw-r--r-- | drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c | 12 |
2 files changed, 13 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c index ea2682f9d579..32fd0be05cff 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_12_ppt.c @@ -161,8 +161,10 @@ int smu_v13_0_12_tables_init(struct smu_context *smu) /* Initialize GPU board temperature metrics */ ret = smu_table_cache_init(smu, SMU_TABLE_GPUBOARD_TEMP_METRICS, sizeof(*gpuboard_temp_metrics), 50); - if (ret) + if (ret) { + smu_table_cache_fini(smu, SMU_TABLE_BASEBOARD_TEMP_METRICS); return ret; + } cache = &(tables[SMU_TABLE_GPUBOARD_TEMP_METRICS].cache); gpuboard_temp_metrics = (struct amdgpu_gpuboard_temp_metrics_v1_0 *)cache->buffer; smu_cmn_init_gpuboard_temp_metrics(gpuboard_temp_metrics, 1, 0); diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c index cc59d884025f..627a8188d868 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c @@ -537,6 +537,7 @@ static int smu_v13_0_6_tables_init(struct smu_context *smu) struct smu_table *tables = smu_table->tables; struct amdgpu_device *adev = smu->adev; int gpu_metrcs_size = METRICS_TABLE_SIZE; + int ret; if (!(adev->flags & AMD_IS_APU)) SMU_TABLE_INIT(tables, SMU_TABLE_PMSTATUSLOG, SMU13_TOOL_SIZE, @@ -573,8 +574,15 @@ static int smu_v13_0_6_tables_init(struct smu_context *smu) return -ENOMEM; } - if (amdgpu_ip_version(smu->adev, MP1_HWIP, 0) == IP_VERSION(13, 0, 12)) - return smu_v13_0_12_tables_init(smu); + if (amdgpu_ip_version(smu->adev, MP1_HWIP, 0) == + IP_VERSION(13, 0, 12)) { + ret = smu_v13_0_12_tables_init(smu); + if (ret) { + kfree(smu_table->metrics_table); + kfree(smu_table->gpu_metrics_table); + return ret; + } + } return 0; } |
