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

drm/amdgpu: support to load RAS bad pages from PMFW



PMFW manages eeprom bad page records, update bad page loading
accrodingly.

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 1ad25fd2
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -3158,8 +3158,12 @@ static int __amdgpu_ras_convert_rec_from_rom(struct amdgpu_device *adev,
	int i = 0;
	enum amdgpu_memory_partition save_nps;

	if (!amdgpu_ras_smu_eeprom_supported(adev)) {
		save_nps = (bps->retired_page >> UMC_NPS_SHIFT) & UMC_NPS_MASK;
		bps->retired_page &= ~(UMC_NPS_MASK << UMC_NPS_SHIFT);
	} else {
		save_nps = nps;
	}

	if (save_nps == nps) {
		if (amdgpu_umc_pages_in_a_row(adev, err_data,
@@ -3225,7 +3229,8 @@ int amdgpu_ras_add_bad_pages(struct amdgpu_device *adev,

	if (from_rom) {
		/* there is no pa recs in V3, so skip pa recs processing */
		if (control->tbl_hdr.version < RAS_TABLE_VER_V3) {
		if ((control->tbl_hdr.version < RAS_TABLE_VER_V3) &&
		    !amdgpu_ras_smu_eeprom_supported(adev)) {
			for (i = 0; i < pages; i++) {
				if (control->ras_num_recs - i >= adev->umc.retire_unit) {
					if ((bps[i].address == bps[i + 1].address) &&
@@ -3356,7 +3361,8 @@ static int amdgpu_ras_load_bad_pages(struct amdgpu_device *adev)
			/*In V3, there is no pa recs, and some cases(when address==0) may be parsed
			as pa recs, so add verion check to avoid it.
			*/
			if (control->tbl_hdr.version < RAS_TABLE_VER_V3) {
			if ((control->tbl_hdr.version < RAS_TABLE_VER_V3) &&
			    !amdgpu_ras_smu_eeprom_supported(adev)) {
				for (i = 0; i < control->ras_num_recs; i++) {
					if ((control->ras_num_recs - i) >= adev->umc.retire_unit) {
						if ((bps[i].address == bps[i + 1].address) &&