From: Hawking Zhang <[email protected]>

To enable switching compute partition mode

v2: cleanup (Alex)

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/amdgpu_imu.h |  2 ++
 drivers/gpu/drm/amd/amdgpu/imu_v12_1.c  | 19 +++++++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_imu.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_imu.h
index 932976b6f391d..1a9b4b24dcc60 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_imu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_imu.h
@@ -37,6 +37,8 @@ struct amdgpu_imu_funcs {
     void (*program_rlc_ram)(struct amdgpu_device *adev);
     int (*wait_for_reset_status)(struct amdgpu_device *adev);
     int (*get_xccs_per_xcp)(struct amdgpu_device *adev);
+    int (*switch_compute_partition)(struct amdgpu_device *adev,
+                                   int num_xccs_per_xcp);
 };
 
 struct imu_rlc_ram_golden {
diff --git a/drivers/gpu/drm/amd/amdgpu/imu_v12_1.c 
b/drivers/gpu/drm/amd/amdgpu/imu_v12_1.c
index 13108fd4584c8..2ccc5c0793bbf 100644
--- a/drivers/gpu/drm/amd/amdgpu/imu_v12_1.c
+++ b/drivers/gpu/drm/amd/amdgpu/imu_v12_1.c
@@ -143,8 +143,27 @@ static int imu_v12_1_get_xccs_per_xcp(struct amdgpu_device 
*adev)
        return REG_GET_FIELD(reg_data, GFX_IMU_PARTITION_SWITCH, 
TOTAL_XCCS_IN_XCP);
 }
 
+static int imu_v12_1_switch_compute_partition(struct amdgpu_device *adev,
+                                             int num_xccs_per_xcp)
+{
+       int ret;
+
+       if (adev->psp.funcs) {
+               ret = psp_spatial_partition(&adev->psp,
+                                           NUM_XCC(adev->gfx.xcc_mask) /
+                                                   num_xccs_per_xcp);
+               if (ret)
+                       return ret;
+       }
+
+       adev->gfx.num_xcc_per_xcp = num_xccs_per_xcp;
+
+       return 0;
+}
+
 const struct amdgpu_imu_funcs gfx_v12_1_imu_funcs = {
        .init_microcode = imu_v12_1_init_microcode,
        .load_microcode = imu_v12_1_load_microcode,
        .get_xccs_per_xcp = imu_v12_1_get_xccs_per_xcp,
+       .switch_compute_partition = imu_v12_1_switch_compute_partition,
 };
-- 
2.51.1

Reply via email to