diff options
| author | Tao Zhou <tao.zhou1@amd.com> | 2022-12-06 10:46:09 +0800 | 
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2022-12-15 12:18:19 -0500 | 
| commit | 2dd9032beb699016f8c3076c98a1d457a13abb10 (patch) | |
| tree | 2d884781776f9a70a16bb74ca45a02893166762d /drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | |
| parent | 3189501e6f024931079936a592d677128826ef14 (diff) | |
drm/amdgpu: define RAS query poison mode function
1. no need to query poison mode on SRIOV guest side, host can handle it.
2. define the function to simplify code.
v2: rename amdgpu_ras_poison_mode_query to amdgpu_ras_query_poison_mode.
Signed-off-by: Tao Zhou <tao.zhou1@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 54 | 
1 files changed, 33 insertions, 21 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c index 56d2c581f545..0735dfd72c99 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c @@ -2411,11 +2411,42 @@ Out:  	pm_runtime_put_autosuspend(dev->dev);  } +static void amdgpu_ras_query_poison_mode(struct amdgpu_device *adev) +{ +	struct amdgpu_ras *con = amdgpu_ras_get_context(adev); +	bool df_poison, umc_poison; + +	/* poison setting is useless on SRIOV guest */ +	if (amdgpu_sriov_vf(adev) || !con) +		return; + +	/* Init poison supported flag, the default value is false */ +	if (adev->gmc.xgmi.connected_to_cpu) { +		/* enabled by default when GPU is connected to CPU */ +		con->poison_supported = true; +	} else if (adev->df.funcs && +	    adev->df.funcs->query_ras_poison_mode && +	    adev->umc.ras && +	    adev->umc.ras->query_ras_poison_mode) { +		df_poison = +			adev->df.funcs->query_ras_poison_mode(adev); +		umc_poison = +			adev->umc.ras->query_ras_poison_mode(adev); + +		/* Only poison is set in both DF and UMC, we can support it */ +		if (df_poison && umc_poison) +			con->poison_supported = true; +		else if (df_poison != umc_poison) +			dev_warn(adev->dev, +				"Poison setting is inconsistent in DF/UMC(%d:%d)!\n", +				df_poison, umc_poison); +	} +} +  int amdgpu_ras_init(struct amdgpu_device *adev)  {  	struct amdgpu_ras *con = amdgpu_ras_get_context(adev);  	int r; -	bool df_poison, umc_poison;  	if (con)  		return 0; @@ -2490,26 +2521,7 @@ int amdgpu_ras_init(struct amdgpu_device *adev)  			goto release_con;  	} -	/* Init poison supported flag, the default value is false */ -	if (adev->gmc.xgmi.connected_to_cpu) { -		/* enabled by default when GPU is connected to CPU */ -		con->poison_supported = true; -	} -	else if (adev->df.funcs && -	    adev->df.funcs->query_ras_poison_mode && -	    adev->umc.ras && -	    adev->umc.ras->query_ras_poison_mode) { -		df_poison = -			adev->df.funcs->query_ras_poison_mode(adev); -		umc_poison = -			adev->umc.ras->query_ras_poison_mode(adev); -		/* Only poison is set in both DF and UMC, we can support it */ -		if (df_poison && umc_poison) -			con->poison_supported = true; -		else if (df_poison != umc_poison) -			dev_warn(adev->dev, "Poison setting is inconsistent in DF/UMC(%d:%d)!\n", -					df_poison, umc_poison); -	} +	amdgpu_ras_query_poison_mode(adev);  	if (amdgpu_ras_fs_init(adev)) {  		r = -EINVAL; | 
