]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: update mcm_addr_lut data for imu v12_1
authorLikun Gao <Likun.Gao@amd.com>
Mon, 18 Aug 2025 07:29:07 +0000 (15:29 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 5 Jan 2026 21:59:55 +0000 (16:59 -0500)
Support for partition mode to program MCM_ADDR_LUT.

v2: clean up (Alex)

Signed-off-by: Likun Gao <Likun.Gao@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/gfx_v12_1.c
drivers/gpu/drm/amd/amdgpu/soc_v1_0.c

index a904edc2869c25f99b5236ed8b64a0904692e965..1f567bd6cc4602d5f29c789d8b3d45d85ee22745 100644 (file)
@@ -2666,11 +2666,6 @@ static void gfx_v12_1_init_golden_registers(struct amdgpu_device *adev)
                gfx_v12_1_xcc_enable_atomics(adev, i);
                gfx_v12_1_xcc_setup_tcp_thrashing_ctrl(adev, i);
        }
-
-       if (adev->gfx.imu.funcs &&
-           adev->gfx.imu.funcs->init_mcm_addr_lut &&
-           amdgpu_emu_mode)
-               adev->gfx.imu.funcs->init_mcm_addr_lut(adev);
 }
 
 static int gfx_v12_1_hw_init(struct amdgpu_ip_block *ip_block)
index baa353ee7d1c130c3b24624d41ca468e3d774c6c..628abd25ac0911edcc19c513f74bdc3ecfcc4988 100644 (file)
@@ -658,8 +658,15 @@ static int soc_v1_0_switch_partition_mode(struct amdgpu_xcp_mgr *xcp_mgr,
 
        num_xcc_per_xcp = __soc_v1_0_get_xcc_per_xcp(xcp_mgr, mode);
        if (adev->gfx.imu.funcs &&
-           adev->gfx.imu.funcs->switch_compute_partition)
-               adev->gfx.imu.funcs->switch_compute_partition(xcp_mgr->adev, num_xcc_per_xcp, mode);
+           adev->gfx.imu.funcs->switch_compute_partition) {
+               ret = adev->gfx.imu.funcs->switch_compute_partition(xcp_mgr->adev, num_xcc_per_xcp, mode);
+               if (ret)
+                       goto out;
+       }
+       if (adev->gfx.imu.funcs &&
+           adev->gfx.imu.funcs->init_mcm_addr_lut &&
+           amdgpu_emu_mode)
+               adev->gfx.imu.funcs->init_mcm_addr_lut(adev);
 
        /* Init info about new xcps */
        *num_xcps = num_xcc / num_xcc_per_xcp;