Commit 699bff37 authored by Tao Zhou's avatar Tao Zhou Committed by Alex Deucher
Browse files

drm/amdgpu: add get_retire_flip_bits for UMC



Add the general interface to get flip bits for RAS bad page retirement.

Signed-off-by: default avatarTao Zhou <tao.zhou1@amd.com>
Reviewed-by: default avatarHawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 80f66ca7
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -3473,6 +3473,10 @@ int amdgpu_ras_init_badpage_info(struct amdgpu_device *adev)
	if (!adev->umc.ras || !adev->umc.ras->convert_ras_err_addr)
		control->ras_num_pa_recs = control->ras_num_recs;

	if (adev->umc.ras &&
	    adev->umc.ras->get_retire_flip_bits)
		adev->umc.ras->get_retire_flip_bits(adev);

	if (control->ras_num_recs) {
		ret = amdgpu_ras_load_bad_pages(adev);
		if (ret)
+15 −0
Original line number Diff line number Diff line
@@ -78,6 +78,18 @@
#define UMC_NPS_SHIFT 40
#define UMC_NPS_MASK 0xffULL

/* three column bits and one row bit in MCA address flip
 * in bad page retirement
 */
#define RETIRE_FLIP_BITS_NUM 4

struct amdgpu_umc_flip_bits {
	uint32_t flip_bits_in_pa[RETIRE_FLIP_BITS_NUM];
	uint32_t flip_row_bit;
	uint32_t r13_in_pa;
	uint32_t bit_num;
};

typedef int (*umc_func)(struct amdgpu_device *adev, uint32_t node_inst,
			uint32_t umc_inst, uint32_t ch_inst, void *data);

@@ -100,6 +112,7 @@ struct amdgpu_umc_ras {
			bool dump_addr);
	uint32_t (*get_die_id_from_pa)(struct amdgpu_device *adev,
			uint64_t mca_addr, uint64_t retired_page);
	void (*get_retire_flip_bits)(struct amdgpu_device *adev);
};

struct amdgpu_umc_funcs {
@@ -130,6 +143,8 @@ struct amdgpu_umc {

	/* active mask for umc node instance */
	unsigned long active_mask;

	struct amdgpu_umc_flip_bits flip_bits;
};

int amdgpu_umc_ras_sw_init(struct amdgpu_device *adev);