drm/amdgpu: fix incorrect number of active RBs for gfx12
authorTim Huang <tim.huang@amd.com>
Mon, 6 Jan 2025 05:30:06 +0000 (13:30 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 9 Jan 2025 21:02:56 +0000 (16:02 -0500)
The RB bitmap should be global active RB bitmap &
active RB bitmap based on active SA.

Signed-off-by: Tim Huang <tim.huang@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c

index 814fbef78133f6de4a48c1df956c4d387b19df0b..4b6e057506541d47901bb5ac44981859ccf935a9 100644 (file)
@@ -1623,6 +1623,7 @@ static u32 gfx_v12_0_get_rb_active_bitmap(struct amdgpu_device *adev)
 
 static void gfx_v12_0_setup_rb(struct amdgpu_device *adev)
 {
+       u32 rb_bitmap_per_sa;
        u32 rb_bitmap_width_per_sa;
        u32 max_sa;
        u32 active_sa_bitmap;
@@ -1640,12 +1641,14 @@ static void gfx_v12_0_setup_rb(struct amdgpu_device *adev)
                 adev->gfx.config.max_sh_per_se;
        rb_bitmap_width_per_sa = adev->gfx.config.max_backends_per_se /
                                 adev->gfx.config.max_sh_per_se;
+       rb_bitmap_per_sa = amdgpu_gfx_create_bitmask(rb_bitmap_width_per_sa);
+
        for (i = 0; i < max_sa; i++) {
                if (active_sa_bitmap & (1 << i))
-                       active_rb_bitmap |= (0x3 << (i * rb_bitmap_width_per_sa));
+                       active_rb_bitmap |= (rb_bitmap_per_sa << (i * rb_bitmap_width_per_sa));
        }
 
-       active_rb_bitmap |= global_active_rb_bitmap;
+       active_rb_bitmap &= global_active_rb_bitmap;
        adev->gfx.config.backend_enable_mask = active_rb_bitmap;
        adev->gfx.config.num_rbs = hweight32(active_rb_bitmap);
 }