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