]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amdgpu: correct SDMA instance number for soc v1_0
authorLikun Gao <Likun.Gao@amd.com>
Fri, 6 Feb 2026 01:09:47 +0000 (09:09 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 11 Mar 2026 17:58:08 +0000 (13:58 -0400)
Calculate sdma instance number according to xcc_mask and
num_inst_per_xcc, and correct adev->sdma.sdma_mask according
to totally sdma instance number.

Signed-off-by: Likun Gao <Likun.Gao@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/soc_v1_0.c

index a0e10dbf07337e7404c1e147158f029ab0213d41..90a69ef41c4b0e8ecc7ebf37bbedf677a4b9c41a 100644 (file)
@@ -823,7 +823,7 @@ int soc_v1_0_init_soc_config(struct amdgpu_device *adev)
 {
        int ret, i;
        int xcc_inst_per_aid = 4;
-       uint16_t xcc_mask;
+       uint16_t xcc_mask, sdma_mask = 0;
 
        xcc_mask = adev->gfx.xcc_mask;
        adev->aid_mask = 0;
@@ -833,10 +833,12 @@ int soc_v1_0_init_soc_config(struct amdgpu_device *adev)
        }
 
        adev->sdma.num_inst_per_xcc = 2;
-       adev->sdma.num_instances =
-               NUM_XCC(adev->gfx.xcc_mask) * adev->sdma.num_inst_per_xcc;
-       adev->sdma.sdma_mask =
-               GENMASK(adev->sdma.num_instances - 1, 0);
+       for_each_inst(i, adev->gfx.xcc_mask)
+               sdma_mask |=
+                       GENMASK(adev->sdma.num_inst_per_xcc - 1, 0) <<
+                       (i * adev->sdma.num_inst_per_xcc);
+       adev->sdma.sdma_mask = sdma_mask;
+       adev->sdma.num_instances = NUM_XCC(adev->sdma.sdma_mask);
 
        ret = soc_v1_0_xcp_mgr_init(adev);
        if (ret)