From: Hawking Zhang <[email protected]> Init compute partition mode for gfx v12_1
Signed-off-by: Hawking Zhang <[email protected]> Reviewed-by: Likun Gao <[email protected]> Signed-off-by: Alex Deucher <[email protected]> --- drivers/gpu/drm/amd/amdgpu/gfx_v12_1.c | 34 +++++++++++++++++++++----- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v12_1.c b/drivers/gpu/drm/amd/amdgpu/gfx_v12_1.c index d761150410083..5e9ab3a5184e5 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v12_1.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v12_1.c @@ -2447,17 +2447,39 @@ static int gfx_v12_1_xcc_cp_resume(struct amdgpu_device *adev, static int gfx_v12_1_cp_resume(struct amdgpu_device *adev) { - int i, r, num_xcc; + int num_xcc, num_xcp, num_xcc_per_xcp; + int r = 0; num_xcc = NUM_XCC(adev->gfx.xcc_mask); + if (amdgpu_sriov_vf(adev)) { + enum amdgpu_gfx_partition mode; - for (i = 0; i < num_xcc; i++) { - r = gfx_v12_1_xcc_cp_resume(adev, i); - if (r) - return r; + mode = amdgpu_xcp_query_partition_mode(adev->xcp_mgr, + AMDGPU_XCP_FL_NONE); + if (mode == AMDGPU_UNKNOWN_COMPUTE_PARTITION_MODE) + return -EINVAL; + if (adev->gfx.imu.funcs && + adev->gfx.imu.funcs->get_xccs_per_xcp) { + num_xcc_per_xcp = adev->gfx.imu.funcs->get_xccs_per_xcp(adev); + adev->gfx.num_xcc_per_xcp = num_xcc_per_xcp; + num_xcp = num_xcc / num_xcc_per_xcp; + } else { + return -EINVAL; + } + r = amdgpu_xcp_init(adev->xcp_mgr, num_xcp, mode); + + } else { + if (amdgpu_xcp_query_partition_mode(adev->xcp_mgr, + AMDGPU_XCP_FL_NONE) == + AMDGPU_UNKNOWN_COMPUTE_PARTITION_MODE) + r = amdgpu_xcp_switch_partition_mode(adev->xcp_mgr, + amdgpu_user_partt_mode); } - return 0; + if (r) + return r; + + return gfx_v12_1_xcc_cp_resume(adev, adev->gfx.xcc_mask); } static int gfx_v12_1_gfxhub_enable(struct amdgpu_device *adev) -- 2.51.1
