diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 28 | 
1 files changed, 25 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c index dc07936d2fcb..de0944947eaf 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c @@ -2859,6 +2859,15 @@ static int __amdgpu_ras_convert_rec_array_from_rom(struct amdgpu_device *adev,  				return -EINVAL;  		}  	} else { +		if (bps[0].address == 0) { +			/* for specific old eeprom data, mca address is not stored, +			 * calc it from pa +			 */ +			if (amdgpu_umc_pa2mca(adev, bps[0].retired_page << AMDGPU_GPU_PAGE_SHIFT, +				&(bps[0].address), AMDGPU_NPS1_PARTITION_MODE)) +				return -EINVAL; +		} +  		if (amdgpu_ras_mca2pa(adev, &bps[0], err_data)) {  			if (nps == AMDGPU_NPS1_PARTITION_MODE)  				memcpy(err_data->err_addr, bps, @@ -2886,8 +2895,20 @@ static int __amdgpu_ras_convert_rec_from_rom(struct amdgpu_device *adev,  				bps->retired_page << AMDGPU_GPU_PAGE_SHIFT))  			return -EINVAL;  	} else { -		if (amdgpu_ras_mca2pa_by_idx(adev, bps, err_data)) -			return -EINVAL; +		if (bps->address) { +			if (amdgpu_ras_mca2pa_by_idx(adev, bps, err_data)) +				return -EINVAL; +		} else { +			/* for specific old eeprom data, mca address is not stored, +			 * calc it from pa +			 */ +			if (amdgpu_umc_pa2mca(adev, bps->retired_page << AMDGPU_GPU_PAGE_SHIFT, +				&(bps->address), AMDGPU_NPS1_PARTITION_MODE)) +				return -EINVAL; + +			if (amdgpu_ras_mca2pa(adev, bps, err_data)) +				return -EOPNOTSUPP; +		}  	}  	return __amdgpu_ras_restore_bad_pages(adev, err_data->err_addr, @@ -3708,7 +3729,8 @@ static void amdgpu_ras_query_ras_capablity_from_vbios(struct amdgpu_device *adev  		 */  		if (amdgpu_ip_version(adev, VCN_HWIP, 0) == IP_VERSION(2, 6, 0) ||  		    amdgpu_ip_version(adev, VCN_HWIP, 0) == IP_VERSION(4, 0, 0) || -		    amdgpu_ip_version(adev, VCN_HWIP, 0) == IP_VERSION(4, 0, 3)) +		    amdgpu_ip_version(adev, VCN_HWIP, 0) == IP_VERSION(4, 0, 3) || +		    amdgpu_ip_version(adev, VCN_HWIP, 0) == IP_VERSION(5, 0, 1))  			adev->ras_hw_enabled |= (1 << AMDGPU_RAS_BLOCK__VCN |  						 1 << AMDGPU_RAS_BLOCK__JPEG);  		else  | 
