diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/ni.c')
-rw-r--r-- | drivers/gpu/drm/radeon/ni.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c index 1d3209ffbbdc..5a33ca681867 100644 --- a/drivers/gpu/drm/radeon/ni.c +++ b/drivers/gpu/drm/radeon/ni.c | |||
@@ -1057,6 +1057,18 @@ static void cayman_gpu_init(struct radeon_device *rdev) | |||
1057 | disabled_rb_mask &= ~(1 << i); | 1057 | disabled_rb_mask &= ~(1 << i); |
1058 | } | 1058 | } |
1059 | 1059 | ||
1060 | for (i = 0; i < rdev->config.cayman.max_shader_engines; i++) { | ||
1061 | u32 simd_disable_bitmap; | ||
1062 | |||
1063 | WREG32(GRBM_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_INDEX(i)); | ||
1064 | WREG32(RLC_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_INDEX(i)); | ||
1065 | simd_disable_bitmap = (RREG32(CC_GC_SHADER_PIPE_CONFIG) & 0xffff0000) >> 16; | ||
1066 | simd_disable_bitmap |= 0xffffffff << rdev->config.cayman.max_simds_per_se; | ||
1067 | tmp <<= 16; | ||
1068 | tmp |= simd_disable_bitmap; | ||
1069 | } | ||
1070 | rdev->config.cayman.active_simds = hweight32(~tmp); | ||
1071 | |||
1060 | WREG32(GRBM_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_BROADCAST_WRITES); | 1072 | WREG32(GRBM_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_BROADCAST_WRITES); |
1061 | WREG32(RLC_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_BROADCAST_WRITES); | 1073 | WREG32(RLC_GFX_INDEX, INSTANCE_BROADCAST_WRITES | SE_BROADCAST_WRITES); |
1062 | 1074 | ||
@@ -1268,7 +1280,7 @@ static int cayman_pcie_gart_enable(struct radeon_device *rdev) | |||
1268 | (u32)(rdev->dummy_page.addr >> 12)); | 1280 | (u32)(rdev->dummy_page.addr >> 12)); |
1269 | WREG32(VM_CONTEXT1_CNTL2, 4); | 1281 | WREG32(VM_CONTEXT1_CNTL2, 4); |
1270 | WREG32(VM_CONTEXT1_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(1) | | 1282 | WREG32(VM_CONTEXT1_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(1) | |
1271 | PAGE_TABLE_BLOCK_SIZE(RADEON_VM_BLOCK_SIZE - 9) | | 1283 | PAGE_TABLE_BLOCK_SIZE(radeon_vm_block_size - 9) | |
1272 | RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT | | 1284 | RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT | |
1273 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT | | 1285 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT | |
1274 | DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT | | 1286 | DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT | |
@@ -1346,7 +1358,7 @@ void cayman_fence_ring_emit(struct radeon_device *rdev, | |||
1346 | /* EVENT_WRITE_EOP - flush caches, send int */ | 1358 | /* EVENT_WRITE_EOP - flush caches, send int */ |
1347 | radeon_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE_EOP, 4)); | 1359 | radeon_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE_EOP, 4)); |
1348 | radeon_ring_write(ring, EVENT_TYPE(CACHE_FLUSH_AND_INV_EVENT_TS) | EVENT_INDEX(5)); | 1360 | radeon_ring_write(ring, EVENT_TYPE(CACHE_FLUSH_AND_INV_EVENT_TS) | EVENT_INDEX(5)); |
1349 | radeon_ring_write(ring, addr & 0xffffffff); | 1361 | radeon_ring_write(ring, lower_32_bits(addr)); |
1350 | radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | DATA_SEL(1) | INT_SEL(2)); | 1362 | radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | DATA_SEL(1) | INT_SEL(2)); |
1351 | radeon_ring_write(ring, fence->seq); | 1363 | radeon_ring_write(ring, fence->seq); |
1352 | radeon_ring_write(ring, 0); | 1364 | radeon_ring_write(ring, 0); |