diff options
| author | YiPeng Chai <YiPeng.Chai@amd.com> | 2025-11-03 16:32:18 +0800 |
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2025-12-08 13:56:34 -0500 |
| commit | 54c2d9739bb748d0f7d6aaa101562cfa5963551d (patch) | |
| tree | a786db1598e387e42a3ecc369633f68d1fc906b1 /drivers/gpu/drm/amd/ras | |
| parent | 73c6c22694430089a6f39f1677fbf598785376d3 (diff) | |
drm/amd/ras: Compatible with legacy sriov host
If sriov host is legacy, the guest uniras will
be disabled.
Signed-off-by: YiPeng Chai <YiPeng.Chai@amd.com>
Reviewed-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/ras')
| -rw-r--r-- | drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.c | 30 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.h | 3 |
3 files changed, 36 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c index cb7fbc791c3c..923bddd0af3a 100644 --- a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c +++ b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_ras_mgr.c @@ -452,6 +452,9 @@ bool amdgpu_uniras_enabled(struct amdgpu_device *adev) { struct amdgpu_ras_mgr *ras_mgr = amdgpu_ras_mgr_get_context(adev); + if (amdgpu_sriov_vf(adev)) + return amdgpu_virt_ras_remote_uniras_enabled(adev); + if (!ras_mgr || !ras_mgr->ras_core) return false; diff --git a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.c b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.c index 895b68785849..5e90a187155b 100644 --- a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.c +++ b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.c @@ -380,6 +380,8 @@ int amdgpu_virt_ras_hw_init(struct amdgpu_device *adev) (struct amdgpu_virt_ras_cmd *)ras_mgr->virt_ras_cmd; struct vram_blocks_ecc *blks_ecc = &virt_ras->blocks_ecc; + amdgpu_virt_get_ras_capability(adev); + memset(blks_ecc, 0, sizeof(*blks_ecc)); blks_ecc->size = PAGE_SIZE; if (amdgpu_bo_create_kernel(adev, blks_ecc->size, @@ -428,3 +430,31 @@ int amdgpu_virt_ras_post_reset(struct amdgpu_device *adev) { return 0; } + +void amdgpu_virt_ras_set_remote_uniras(struct amdgpu_device *adev, bool en) +{ + struct amdgpu_ras_mgr *ras_mgr = amdgpu_ras_mgr_get_context(adev); + struct amdgpu_virt_ras_cmd *virt_ras; + + if (!ras_mgr || !ras_mgr->virt_ras_cmd) + return; + + virt_ras = (struct amdgpu_virt_ras_cmd *)ras_mgr->virt_ras_cmd; + virt_ras->remote_uniras_supported = en; +} + +bool amdgpu_virt_ras_remote_uniras_enabled(struct amdgpu_device *adev) +{ + struct amdgpu_ras_mgr *ras_mgr = amdgpu_ras_mgr_get_context(adev); + struct amdgpu_virt_ras_cmd *virt_ras; + + if (amdgpu_in_reset(adev)) + return false; + + if (!ras_mgr || !ras_mgr->virt_ras_cmd) + return false; + + virt_ras = (struct amdgpu_virt_ras_cmd *)ras_mgr->virt_ras_cmd; + + return virt_ras->remote_uniras_supported; +} diff --git a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.h b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.h index 03c3cf8363ca..53b0f3f60103 100644 --- a/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.h +++ b/drivers/gpu/drm/amd/ras/ras_mgr/amdgpu_virt_ras_cmd.h @@ -39,6 +39,7 @@ struct vram_blocks_ecc { }; struct amdgpu_virt_ras_cmd { + bool remote_uniras_supported; struct remote_batch_trace_mgr batch_mgr; struct vram_blocks_ecc blocks_ecc; }; @@ -51,4 +52,6 @@ int amdgpu_virt_ras_handle_cmd(struct ras_core_context *ras_core, struct ras_cmd_ctx *cmd); int amdgpu_virt_ras_pre_reset(struct amdgpu_device *adev); int amdgpu_virt_ras_post_reset(struct amdgpu_device *adev); +void amdgpu_virt_ras_set_remote_uniras(struct amdgpu_device *adev, bool en); +bool amdgpu_virt_ras_remote_uniras_enabled(struct amdgpu_device *adev); #endif |
