drm/amdgpu: correct the cu and rb info for sienna cichlid
authorLikun Gao <Likun.Gao@amd.com>
Wed, 21 Oct 2020 16:50:07 +0000 (00:50 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 22 Oct 2020 03:06:23 +0000 (23:06 -0400)
Skip disabled sa to correct the cu_info and active_rbs for sienna cichlid.

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>
Cc: stable@vger.kernel.org # 5.9.x
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c

index 1c98b24..56fdbe6 100644 (file)
@@ -4582,12 +4582,17 @@ static void gfx_v10_0_setup_rb(struct amdgpu_device *adev)
        int i, j;
        u32 data;
        u32 active_rbs = 0;
+       u32 bitmap;
        u32 rb_bitmap_width_per_sh = adev->gfx.config.max_backends_per_se /
                                        adev->gfx.config.max_sh_per_se;
 
        mutex_lock(&adev->grbm_idx_mutex);
        for (i = 0; i < adev->gfx.config.max_shader_engines; i++) {
                for (j = 0; j < adev->gfx.config.max_sh_per_se; j++) {
+                       bitmap = i * adev->gfx.config.max_sh_per_se + j;
+                       if ((adev->asic_type == CHIP_SIENNA_CICHLID) &&
+                           ((gfx_v10_3_get_disabled_sa(adev) >> bitmap) & 1))
+                               continue;
                        gfx_v10_0_select_se_sh(adev, i, j, 0xffffffff);
                        data = gfx_v10_0_get_rb_active_bitmap(adev);
                        active_rbs |= data << ((i * adev->gfx.config.max_sh_per_se + j) *
@@ -8812,6 +8817,10 @@ static int gfx_v10_0_get_cu_info(struct amdgpu_device *adev,
        mutex_lock(&adev->grbm_idx_mutex);
        for (i = 0; i < adev->gfx.config.max_shader_engines; i++) {
                for (j = 0; j < adev->gfx.config.max_sh_per_se; j++) {
+                       bitmap = i * adev->gfx.config.max_sh_per_se + j;
+                       if ((adev->asic_type == CHIP_SIENNA_CICHLID) &&
+                           ((gfx_v10_3_get_disabled_sa(adev) >> bitmap) & 1))
+                               continue;
                        mask = 1;
                        ao_bitmap = 0;
                        counter = 0;