drm/amdgpu: Save nps to eeprom

nps info saved together with bad page makes bad page parsing more efficient

Signed-off-by: ganglxie <ganglxie@amd.com>
Reviewed-by: Tao Zhou <tao.zhou1@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
ganglxie 2025-02-24 11:17:33 +08:00 committed by Alex Deucher
parent ce615fe328
commit f2510355fb
2 changed files with 13 additions and 2 deletions

View File

@ -852,6 +852,7 @@ int amdgpu_ras_eeprom_append(struct amdgpu_ras_eeprom_control *control,
{
struct amdgpu_device *adev = to_amdgpu_device(control);
int res, i;
uint64_t nps = AMDGPU_NPS1_PARTITION_MODE;
if (!__is_ras_eeprom_supported(adev))
return 0;
@ -865,9 +866,12 @@ int amdgpu_ras_eeprom_append(struct amdgpu_ras_eeprom_control *control,
return -EINVAL;
}
if (adev->gmc.gmc_funcs->query_mem_partition_mode)
nps = adev->gmc.gmc_funcs->query_mem_partition_mode(adev);
/* set the new channel index flag */
for (i = 0; i < num; i++)
record[i].retired_page |= UMC_CHANNEL_IDX_V2;
record[i].retired_page |= (nps << UMC_NPS_SHIFT);
mutex_lock(&control->ras_tbl_mutex);
@ -881,7 +885,7 @@ int amdgpu_ras_eeprom_append(struct amdgpu_ras_eeprom_control *control,
/* clear channel index flag, the flag is only saved on eeprom */
for (i = 0; i < num; i++)
record[i].retired_page &= ~UMC_CHANNEL_IDX_V2;
record[i].retired_page &= ~(nps << UMC_NPS_SHIFT);
return res;
}

View File

@ -71,6 +71,13 @@
*/
#define UMC_CHANNEL_IDX_V2 BIT_ULL(47)
/*
* save nps value to eeprom_table_record.retired_page[47:40],
* the channel index flag above will be retired.
*/
#define UMC_NPS_SHIFT 40
#define UMC_NPS_MASK 0xffULL
typedef int (*umc_func)(struct amdgpu_device *adev, uint32_t node_inst,
uint32_t umc_inst, uint32_t ch_inst, void *data);