diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/ni.c')
-rw-r--r-- | drivers/gpu/drm/radeon/ni.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c index d246e043421a..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 | ||
@@ -1228,12 +1240,14 @@ static int cayman_pcie_gart_enable(struct radeon_device *rdev) | |||
1228 | SYSTEM_APERTURE_UNMAPPED_ACCESS_PASS_THRU); | 1240 | SYSTEM_APERTURE_UNMAPPED_ACCESS_PASS_THRU); |
1229 | /* Setup L2 cache */ | 1241 | /* Setup L2 cache */ |
1230 | WREG32(VM_L2_CNTL, ENABLE_L2_CACHE | | 1242 | WREG32(VM_L2_CNTL, ENABLE_L2_CACHE | |
1243 | ENABLE_L2_FRAGMENT_PROCESSING | | ||
1231 | ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE | | 1244 | ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE | |
1232 | ENABLE_L2_PDE0_CACHE_LRU_UPDATE_BY_WRITE | | 1245 | ENABLE_L2_PDE0_CACHE_LRU_UPDATE_BY_WRITE | |
1233 | EFFECTIVE_L2_QUEUE_SIZE(7) | | 1246 | EFFECTIVE_L2_QUEUE_SIZE(7) | |
1234 | CONTEXT1_IDENTITY_ACCESS_MODE(1)); | 1247 | CONTEXT1_IDENTITY_ACCESS_MODE(1)); |
1235 | WREG32(VM_L2_CNTL2, INVALIDATE_ALL_L1_TLBS | INVALIDATE_L2_CACHE); | 1248 | WREG32(VM_L2_CNTL2, INVALIDATE_ALL_L1_TLBS | INVALIDATE_L2_CACHE); |
1236 | WREG32(VM_L2_CNTL3, L2_CACHE_BIGK_ASSOCIATIVITY | | 1249 | WREG32(VM_L2_CNTL3, L2_CACHE_BIGK_ASSOCIATIVITY | |
1250 | BANK_SELECT(6) | | ||
1237 | L2_CACHE_BIGK_FRAGMENT_SIZE(6)); | 1251 | L2_CACHE_BIGK_FRAGMENT_SIZE(6)); |
1238 | /* setup context0 */ | 1252 | /* setup context0 */ |
1239 | WREG32(VM_CONTEXT0_PAGE_TABLE_START_ADDR, rdev->mc.gtt_start >> 12); | 1253 | WREG32(VM_CONTEXT0_PAGE_TABLE_START_ADDR, rdev->mc.gtt_start >> 12); |
@@ -1266,6 +1280,7 @@ static int cayman_pcie_gart_enable(struct radeon_device *rdev) | |||
1266 | (u32)(rdev->dummy_page.addr >> 12)); | 1280 | (u32)(rdev->dummy_page.addr >> 12)); |
1267 | WREG32(VM_CONTEXT1_CNTL2, 4); | 1281 | WREG32(VM_CONTEXT1_CNTL2, 4); |
1268 | WREG32(VM_CONTEXT1_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(1) | | 1282 | WREG32(VM_CONTEXT1_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(1) | |
1283 | PAGE_TABLE_BLOCK_SIZE(radeon_vm_block_size - 9) | | ||
1269 | RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT | | 1284 | RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT | |
1270 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT | | 1285 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT | |
1271 | DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT | | 1286 | DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT | |
@@ -1343,7 +1358,7 @@ void cayman_fence_ring_emit(struct radeon_device *rdev, | |||
1343 | /* EVENT_WRITE_EOP - flush caches, send int */ | 1358 | /* EVENT_WRITE_EOP - flush caches, send int */ |
1344 | radeon_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE_EOP, 4)); | 1359 | radeon_ring_write(ring, PACKET3(PACKET3_EVENT_WRITE_EOP, 4)); |
1345 | 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)); |
1346 | radeon_ring_write(ring, addr & 0xffffffff); | 1361 | radeon_ring_write(ring, lower_32_bits(addr)); |
1347 | 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)); |
1348 | radeon_ring_write(ring, fence->seq); | 1363 | radeon_ring_write(ring, fence->seq); |
1349 | radeon_ring_write(ring, 0); | 1364 | radeon_ring_write(ring, 0); |