From: YiPeng Chai <[email protected]>

Add interface to support parsing aca bank ecc info.

Signed-off-by: YiPeng Chai <[email protected]>
Reviewed-by: Hawking Zhang <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
---
 drivers/gpu/drm/amd/ras/core/aca.c | 18 ++++++++++++++++++
 drivers/gpu/drm/amd/ras/core/aca.h |  4 ++++
 2 files changed, 22 insertions(+)

diff --git a/drivers/gpu/drm/amd/ras/core/aca.c 
b/drivers/gpu/drm/amd/ras/core/aca.c
index 7c42a05b0207d..0b5d55e39e25a 100644
--- a/drivers/gpu/drm/amd/ras/core/aca.c
+++ b/drivers/gpu/drm/amd/ras/core/aca.c
@@ -170,6 +170,7 @@ static int aca_parse_bank(struct ras_core_context *ras_core,
        if (!bank_ops || !bank_ops->bank_parse)
                return -RAS_CORE_NOT_SUPPORTED;
 
+       ecc->block_id = aca_blk->blk_info->ras_block_id;
        return bank_ops->bank_parse(ras_core, aca_blk, bank, ecc);
 }
 
@@ -687,3 +688,20 @@ int ras_aca_hw_fini(struct ras_core_context *ras_core)
 
        return 0;
 }
+
+int ras_aca_parse_bank(struct ras_core_context *ras_core,
+                               struct aca_bank_reg *bank,
+                               struct aca_bank_ecc *ecc)
+{
+       struct aca_block *aca_blk;
+       int ret = -ENODATA;
+
+       if (!ras_core || !bank || !ecc)
+               return -EINVAL;
+
+       aca_blk = aca_get_bank_aca_block(ras_core, bank);
+       if (aca_blk)
+               ret = aca_parse_bank(ras_core, aca_blk, bank, ecc);
+
+       return ret;
+}
diff --git a/drivers/gpu/drm/amd/ras/core/aca.h 
b/drivers/gpu/drm/amd/ras/core/aca.h
index 3c1e691cd2ee0..c1a48e713044d 100644
--- a/drivers/gpu/drm/amd/ras/core/aca.h
+++ b/drivers/gpu/drm/amd/ras/core/aca.h
@@ -79,6 +79,7 @@ struct aca_ecc_info {
 };
 
 struct aca_bank_ecc {
+       u32 block_id;
        struct aca_ecc_info bank_info;
        u32 ce_count;
        u32 ue_count;
@@ -161,4 +162,7 @@ int ras_aca_clear_all_blocks_ecc_count(struct 
ras_core_context *ras_core);
 int ras_aca_update_ecc(struct ras_core_context *ras_core, u32 ecc_type, void 
*data);
 void ras_aca_mark_fatal_flag(struct ras_core_context *ras_core);
 void ras_aca_clear_fatal_flag(struct ras_core_context *ras_core);
+int ras_aca_parse_bank(struct ras_core_context *ras_core,
+                               struct aca_bank_reg *bank,
+                               struct aca_bank_ecc *ecc);
 #endif
-- 
2.55.0

Reply via email to