One eeprom record may not map to unit number of bad pages, Correct the relevant update logic accordingly
Signed-off-by: Ce Sun <[email protected]> --- drivers/gpu/drm/amd/ras/rascore/ras_umc.c | 5 +++-- drivers/gpu/drm/amd/ras/rascore/ras_umc.h | 2 ++ drivers/gpu/drm/amd/ras/rascore/ras_umc_v12_0.c | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/amd/ras/rascore/ras_umc.c b/drivers/gpu/drm/amd/ras/rascore/ras_umc.c index cff6245d8add..b03f72735878 100644 --- a/drivers/gpu/drm/amd/ras/rascore/ras_umc.c +++ b/drivers/gpu/drm/amd/ras/rascore/ras_umc.c @@ -525,7 +525,7 @@ static int ras_umc_save_bad_pages(struct ras_core_context *ras_core) struct ras_umc *ras_umc = &ras_core->ras_umc; struct eeprom_store_record *data = &ras_umc->umc_err_data.rom_data; uint32_t eeprom_record_num; - int save_count; + int save_count,map_save_count; int ret = 0; if (!data->bps) @@ -537,6 +537,7 @@ static int ras_umc_save_bad_pages(struct ras_core_context *ras_core) eeprom_record_num = ras_eeprom_get_record_count(ras_core); mutex_lock(&ras_umc->umc_lock); save_count = data->count - eeprom_record_num; + map_save_count = save_count * ras_core->ras_umc.retire_unit; /* only new entries are saved */ if (save_count > 0) { if (ras_fw_eeprom_supported(ras_core)) @@ -551,7 +552,7 @@ static int ras_umc_save_bad_pages(struct ras_core_context *ras_core) goto exit; } - RAS_DEV_INFO(ras_core->dev, "Saved %d pages to EEPROM table.\n", save_count); + RAS_DEV_INFO(ras_core->dev, "Saved %d pages to EEPROM table.\n", map_save_count); } exit: diff --git a/drivers/gpu/drm/amd/ras/rascore/ras_umc.h b/drivers/gpu/drm/amd/ras/rascore/ras_umc.h index 4a693865a9be..48131bbca00e 100644 --- a/drivers/gpu/drm/amd/ras/rascore/ras_umc.h +++ b/drivers/gpu/drm/amd/ras/rascore/ras_umc.h @@ -144,6 +144,8 @@ struct ras_umc { u32 pending_ecc_count; /* number of entries dropped because pending_ecc_list was full */ u32 pending_ecc_dropped; + /* how many pages are retired */ + u32 retire_unit; }; /* diff --git a/drivers/gpu/drm/amd/ras/rascore/ras_umc_v12_0.c b/drivers/gpu/drm/amd/ras/rascore/ras_umc_v12_0.c index a272e0d80cdb..8861cb0f01f4 100644 --- a/drivers/gpu/drm/amd/ras/rascore/ras_umc_v12_0.c +++ b/drivers/gpu/drm/amd/ras/rascore/ras_umc_v12_0.c @@ -110,6 +110,7 @@ static void __get_nps_pa_flip_bits(struct ras_core_context *ras_core, "Unknown HBM type, set RAS retire flip bits to the value in NPS1 mode.\n"); break; } + ras_core->ras_umc.retire_unit = 0x1 << flip_bits->bit_num; } static uint64_t convert_nps_pa_to_row_pa(struct ras_core_context *ras_core, @@ -166,7 +167,7 @@ static int lookup_bad_pages_in_a_row(struct ras_core_context *ras_core, idx = 0; row = 0; - retire_unit = 0x1 << flip_bits.bit_num; + retire_unit = ras_core->ras_umc.retire_unit; /* loop for all possibilities of retire bits */ for (column = 0; column < retire_unit; column++) { soc_pa = row_pa; -- 2.34.1
