summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c
diff options
context:
space:
mode:
authorYang Wang <kevinyang.wang@amd.com>2024-02-06 13:24:16 +0800
committerAlex Deucher <alexander.deucher@amd.com>2024-03-20 13:38:14 -0400
commit949899cbacf54f1611a7c343093069462bbb6625 (patch)
tree4c38ba46a56f49c761957bd9fe483915711469e4 /drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c
parentabc3b5d21d34d21914b8e3caa75690f72baa2f36 (diff)
drm/amdgpu: add new api to save error count into aca cache
add new api to save error count into aca cache. Signed-off-by: Yang Wang <kevinyang.wang@amd.com> Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c33
1 files changed, 7 insertions, 26 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c
index 2ad2d874f42f..7cbff74c0f2f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c
@@ -274,25 +274,25 @@ static struct aca_bank_error *get_bank_error(struct aca_error *aerr, struct aca_
return new_bank_error(aerr, info);
}
-static int aca_log_errors(struct aca_handle *handle, enum aca_error_type type,
- struct aca_bank_report *report)
+int aca_error_cache_log_bank_error(struct aca_handle *handle, struct aca_bank_info *info,
+ enum aca_error_type type, u64 count)
{
struct aca_error_cache *error_cache = &handle->error_cache;
struct aca_bank_error *bank_error;
struct aca_error *aerr;
- if (!handle || !report)
+ if (!handle || !info || type >= ACA_ERROR_TYPE_COUNT)
return -EINVAL;
- if (!report->count[type])
+ if (!count)
return 0;
aerr = &error_cache->errors[type];
- bank_error = get_bank_error(aerr, &report->info);
+ bank_error = get_bank_error(aerr, info);
if (!bank_error)
return -ENOMEM;
- bank_error->count[type] += report->count[type];
+ bank_error->count += count;
return 0;
}
@@ -317,31 +317,12 @@ static int handler_aca_log_bank_error(struct aca_handle *handle, struct aca_bank
enum aca_smu_type smu_type, void *data)
{
struct aca_bank_report report;
- enum aca_error_type type;
int ret;
- switch (smu_type) {
- case ACA_SMU_TYPE_UE:
- type = ACA_ERROR_TYPE_UE;
- break;
- case ACA_SMU_TYPE_CE:
- type = ACA_ERROR_TYPE_CE;
- break;
- default:
- return -EINVAL;
- }
-
ret = aca_generate_bank_report(handle, bank, smu_type, &report);
if (ret)
return ret;
- if (!report.count[type])
- return 0;
-
- ret = aca_log_errors(handle, type, &report);
- if (ret)
- return ret;
-
return 0;
}
@@ -440,7 +421,7 @@ static int aca_log_aca_error_data(struct aca_bank_error *bank_error, enum aca_er
if (type >= ACA_ERROR_TYPE_COUNT)
return -EINVAL;
- count = bank_error->count[type];
+ count = bank_error->count;
if (!count)
return 0;