aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index 10c865087d0a..e37378fe1edc 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -2613,8 +2613,10 @@ static u32 gfx_v8_0_get_rb_active_bitmap(struct amdgpu_device *adev)
2613static void gfx_v8_0_setup_rb(struct amdgpu_device *adev) 2613static void gfx_v8_0_setup_rb(struct amdgpu_device *adev)
2614{ 2614{
2615 int i, j; 2615 int i, j;
2616 u32 data, tmp, num_rbs = 0; 2616 u32 data;
2617 u32 active_rbs = 0; 2617 u32 active_rbs = 0;
2618 u32 rb_bitmap_width_per_sh = adev->gfx.config.max_backends_per_se /
2619 adev->gfx.config.max_sh_per_se;
2618 2620
2619 mutex_lock(&adev->grbm_idx_mutex); 2621 mutex_lock(&adev->grbm_idx_mutex);
2620 for (i = 0; i < adev->gfx.config.max_shader_engines; i++) { 2622 for (i = 0; i < adev->gfx.config.max_shader_engines; i++) {
@@ -2622,17 +2624,14 @@ static void gfx_v8_0_setup_rb(struct amdgpu_device *adev)
2622 gfx_v8_0_select_se_sh(adev, i, j); 2624 gfx_v8_0_select_se_sh(adev, i, j);
2623 data = gfx_v8_0_get_rb_active_bitmap(adev); 2625 data = gfx_v8_0_get_rb_active_bitmap(adev);
2624 active_rbs |= data << ((i * adev->gfx.config.max_sh_per_se + j) * 2626 active_rbs |= data << ((i * adev->gfx.config.max_sh_per_se + j) *
2625 RB_BITMAP_WIDTH_PER_SH); 2627 rb_bitmap_width_per_sh);
2626 } 2628 }
2627 } 2629 }
2628 gfx_v8_0_select_se_sh(adev, 0xffffffff, 0xffffffff); 2630 gfx_v8_0_select_se_sh(adev, 0xffffffff, 0xffffffff);
2629 mutex_unlock(&adev->grbm_idx_mutex); 2631 mutex_unlock(&adev->grbm_idx_mutex);
2630 2632
2631 adev->gfx.config.backend_enable_mask = active_rbs; 2633 adev->gfx.config.backend_enable_mask = active_rbs;
2632 tmp = active_rbs; 2634 adev->gfx.config.num_rbs = hweight32(active_rbs);
2633 while (tmp >>= 1)
2634 num_rbs++;
2635 adev->gfx.config.num_rbs = num_rbs;
2636} 2635}
2637 2636
2638/** 2637/**
@@ -4622,8 +4621,7 @@ static void gfx_v8_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
4622 else 4621 else
4623 header = PACKET3(PACKET3_INDIRECT_BUFFER, 2); 4622 header = PACKET3(PACKET3_INDIRECT_BUFFER, 2);
4624 4623
4625 control |= ib->length_dw | 4624 control |= ib->length_dw | (ib->vm_id << 24);
4626 (ib->vm ? (ib->vm->ids[ring->idx].id << 24) : 0);
4627 4625
4628 amdgpu_ring_write(ring, header); 4626 amdgpu_ring_write(ring, header);
4629 amdgpu_ring_write(ring, 4627 amdgpu_ring_write(ring,
@@ -4652,8 +4650,7 @@ static void gfx_v8_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
4652 4650
4653 header = PACKET3(PACKET3_INDIRECT_BUFFER, 2); 4651 header = PACKET3(PACKET3_INDIRECT_BUFFER, 2);
4654 4652
4655 control |= ib->length_dw | 4653 control |= ib->length_dw | (ib->vm_id << 24);
4656 (ib->vm ? (ib->vm->ids[ring->idx].id << 24) : 0);
4657 4654
4658 amdgpu_ring_write(ring, header); 4655 amdgpu_ring_write(ring, header);
4659 amdgpu_ring_write(ring, 4656 amdgpu_ring_write(ring,
@@ -5131,8 +5128,7 @@ static u32 gfx_v8_0_get_cu_active_bitmap(struct amdgpu_device *adev)
5131 data &= CC_GC_SHADER_ARRAY_CONFIG__INACTIVE_CUS_MASK; 5128 data &= CC_GC_SHADER_ARRAY_CONFIG__INACTIVE_CUS_MASK;
5132 data >>= CC_GC_SHADER_ARRAY_CONFIG__INACTIVE_CUS__SHIFT; 5129 data >>= CC_GC_SHADER_ARRAY_CONFIG__INACTIVE_CUS__SHIFT;
5133 5130
5134 mask = gfx_v8_0_create_bitmask(adev->gfx.config.max_backends_per_se / 5131 mask = gfx_v8_0_create_bitmask(adev->gfx.config.max_cu_per_sh);
5135 adev->gfx.config.max_sh_per_se);
5136 5132
5137 return (~data) & mask; 5133 return (~data) & mask;
5138} 5134}
@@ -5146,6 +5142,8 @@ int gfx_v8_0_get_cu_info(struct amdgpu_device *adev,
5146 if (!adev || !cu_info) 5142 if (!adev || !cu_info)
5147 return -EINVAL; 5143 return -EINVAL;
5148 5144
5145 memset(cu_info, 0, sizeof(*cu_info));
5146
5149 mutex_lock(&adev->grbm_idx_mutex); 5147 mutex_lock(&adev->grbm_idx_mutex);
5150 for (i = 0; i < adev->gfx.config.max_shader_engines; i++) { 5148 for (i = 0; i < adev->gfx.config.max_shader_engines; i++) {
5151 for (j = 0; j < adev->gfx.config.max_sh_per_se; j++) { 5149 for (j = 0; j < adev->gfx.config.max_sh_per_se; j++) {