aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
index 250bcbce7fdc..8fb7ebf3be3e 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
@@ -1635,30 +1635,25 @@ static u32 gfx_v7_0_get_rb_active_bitmap(struct amdgpu_device *adev)
1635static void gfx_v7_0_setup_rb(struct amdgpu_device *adev) 1635static void gfx_v7_0_setup_rb(struct amdgpu_device *adev)
1636{ 1636{
1637 int i, j; 1637 int i, j;
1638 u32 data, tmp, num_rbs = 0; 1638 u32 data;
1639 u32 active_rbs = 0; 1639 u32 active_rbs = 0;
1640 u32 rb_bitmap_width_per_sh = adev->gfx.config.max_backends_per_se /
1641 adev->gfx.config.max_sh_per_se;
1640 1642
1641 mutex_lock(&adev->grbm_idx_mutex); 1643 mutex_lock(&adev->grbm_idx_mutex);
1642 for (i = 0; i < adev->gfx.config.max_shader_engines; i++) { 1644 for (i = 0; i < adev->gfx.config.max_shader_engines; i++) {
1643 for (j = 0; j < adev->gfx.config.max_sh_per_se; j++) { 1645 for (j = 0; j < adev->gfx.config.max_sh_per_se; j++) {
1644 gfx_v7_0_select_se_sh(adev, i, j); 1646 gfx_v7_0_select_se_sh(adev, i, j);
1645 data = gfx_v7_0_get_rb_active_bitmap(adev); 1647 data = gfx_v7_0_get_rb_active_bitmap(adev);
1646 if (adev->asic_type == CHIP_HAWAII) 1648 active_rbs |= data << ((i * adev->gfx.config.max_sh_per_se + j) *
1647 active_rbs |= data << ((i * adev->gfx.config.max_sh_per_se + j) * 1649 rb_bitmap_width_per_sh);
1648 HAWAII_RB_BITMAP_WIDTH_PER_SH);
1649 else
1650 active_rbs |= data << ((i * adev->gfx.config.max_sh_per_se + j) *
1651 CIK_RB_BITMAP_WIDTH_PER_SH);
1652 } 1650 }
1653 } 1651 }
1654 gfx_v7_0_select_se_sh(adev, 0xffffffff, 0xffffffff); 1652 gfx_v7_0_select_se_sh(adev, 0xffffffff, 0xffffffff);
1655 mutex_unlock(&adev->grbm_idx_mutex); 1653 mutex_unlock(&adev->grbm_idx_mutex);
1656 1654
1657 adev->gfx.config.backend_enable_mask = active_rbs; 1655 adev->gfx.config.backend_enable_mask = active_rbs;
1658 tmp = active_rbs; 1656 adev->gfx.config.num_rbs = hweight32(active_rbs);
1659 while (tmp >>= 1)
1660 num_rbs++;
1661 adev->gfx.config.num_rbs = num_rbs;
1662} 1657}
1663 1658
1664/** 1659/**
@@ -2046,8 +2041,7 @@ static void gfx_v7_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
2046 else 2041 else
2047 header = PACKET3(PACKET3_INDIRECT_BUFFER, 2); 2042 header = PACKET3(PACKET3_INDIRECT_BUFFER, 2);
2048 2043
2049 control |= ib->length_dw | 2044 control |= ib->length_dw | (ib->vm_id << 24);
2050 (ib->vm ? (ib->vm->ids[ring->idx].id << 24) : 0);
2051 2045
2052 amdgpu_ring_write(ring, header); 2046 amdgpu_ring_write(ring, header);
2053 amdgpu_ring_write(ring, 2047 amdgpu_ring_write(ring,
@@ -2075,8 +2069,7 @@ static void gfx_v7_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
2075 2069
2076 header = PACKET3(PACKET3_INDIRECT_BUFFER, 2); 2070 header = PACKET3(PACKET3_INDIRECT_BUFFER, 2);
2077 2071
2078 control |= ib->length_dw | 2072 control |= ib->length_dw | (ib->vm_id << 24);
2079 (ib->vm ? (ib->vm->ids[ring->idx].id << 24) : 0);
2080 2073
2081 amdgpu_ring_write(ring, header); 2074 amdgpu_ring_write(ring, header);
2082 amdgpu_ring_write(ring, 2075 amdgpu_ring_write(ring,
@@ -3825,8 +3818,7 @@ static u32 gfx_v7_0_get_cu_active_bitmap(struct amdgpu_device *adev)
3825 data &= CC_GC_SHADER_ARRAY_CONFIG__INACTIVE_CUS_MASK; 3818 data &= CC_GC_SHADER_ARRAY_CONFIG__INACTIVE_CUS_MASK;
3826 data >>= CC_GC_SHADER_ARRAY_CONFIG__INACTIVE_CUS__SHIFT; 3819 data >>= CC_GC_SHADER_ARRAY_CONFIG__INACTIVE_CUS__SHIFT;
3827 3820
3828 mask = gfx_v7_0_create_bitmask(adev->gfx.config.max_backends_per_se / 3821 mask = gfx_v7_0_create_bitmask(adev->gfx.config.max_cu_per_sh);
3829 adev->gfx.config.max_sh_per_se);
3830 3822
3831 return (~data) & mask; 3823 return (~data) & mask;
3832} 3824}
@@ -5237,6 +5229,8 @@ int gfx_v7_0_get_cu_info(struct amdgpu_device *adev,
5237 if (!adev || !cu_info) 5229 if (!adev || !cu_info)
5238 return -EINVAL; 5230 return -EINVAL;
5239 5231
5232 memset(cu_info, 0, sizeof(*cu_info));
5233
5240 mutex_lock(&adev->grbm_idx_mutex); 5234 mutex_lock(&adev->grbm_idx_mutex);
5241 for (i = 0; i < adev->gfx.config.max_shader_engines; i++) { 5235 for (i = 0; i < adev->gfx.config.max_shader_engines; i++) {
5242 for (j = 0; j < adev->gfx.config.max_sh_per_se; j++) { 5236 for (j = 0; j < adev->gfx.config.max_sh_per_se; j++) {