diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 22 |
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) | |||
2613 | static void gfx_v8_0_setup_rb(struct amdgpu_device *adev) | 2613 | static 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++) { |