drm/amdgpu: Derive active clusters from SDMA
authorLijo Lazar <lijo.lazar@amd.com>
Mon, 28 Nov 2022 05:47:15 +0000 (11:17 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 9 Jun 2023 13:50:06 +0000 (09:50 -0400)
SDMA instances per active cluster and SDMA instance mask are used
to find the number of active clusters.

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

index a6204b5..6f7226b 100644 (file)
@@ -357,12 +357,22 @@ static int aqua_vanjaram_xcp_mgr_init(struct amdgpu_device *adev)
 
 int aqua_vanjaram_init_soc_config(struct amdgpu_device *adev)
 {
+       u32 inst_mask = adev->sdma.sdma_mask;
        int ret;
 
        /* generally 1 AID supports 4 instances */
        adev->sdma.num_inst_per_aid = 4;
        adev->sdma.num_instances = NUM_SDMA(adev->sdma.sdma_mask);
 
+       adev->num_aid = 1;
+       inst_mask >>= adev->sdma.num_inst_per_aid;
+
+       for (const u32 mask = (1 << adev->sdma.num_inst_per_aid) - 1; inst_mask;
+            inst_mask >>= adev->sdma.num_inst_per_aid) {
+               if ((inst_mask & mask) == mask)
+                       adev->num_aid++;
+       }
+
        adev->vcn.num_inst_per_aid = 1;
        adev->vcn.num_vcn_inst = adev->vcn.num_inst_per_aid * adev->num_aid;
        adev->jpeg.num_inst_per_aid = 1;