diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2011-08-25 13:39:48 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-12-20 14:49:28 -0500 |
commit | 7465280c076d6440e5908c158c83b542dc063a30 (patch) | |
tree | 7781cffcc3784293e5bb97f20fb4a6c8109684ec /drivers/gpu/drm/radeon/r600.c | |
parent | 851a6bd99edda0094def3b0b81bb1c7c0e886e65 (diff) |
drm/radeon/kms: add support for multiple fence queues v2
For supporting multiple CP ring buffers, async DMA
engines and UVD. We still need a way to synchronize
between engines.
v2 initialize unused fence driver ring to avoid issue in
suspend/unload
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Christian König <deathsimple@vodafone.de>
Reviewed-by: Jerome Glisse <jglisse@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/r600.c')
-rw-r--r-- | drivers/gpu/drm/radeon/r600.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index 9cdda0b3b081..2fff8cec723c 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c | |||
@@ -2316,7 +2316,7 @@ void r600_fence_ring_emit(struct radeon_device *rdev, | |||
2316 | { | 2316 | { |
2317 | if (rdev->wb.use_event) { | 2317 | if (rdev->wb.use_event) { |
2318 | u64 addr = rdev->wb.gpu_addr + R600_WB_EVENT_OFFSET + | 2318 | u64 addr = rdev->wb.gpu_addr + R600_WB_EVENT_OFFSET + |
2319 | (u64)(rdev->fence_drv.scratch_reg - rdev->scratch.reg_base); | 2319 | (u64)(rdev->fence_drv[fence->ring].scratch_reg - rdev->scratch.reg_base); |
2320 | /* flush read cache over gart */ | 2320 | /* flush read cache over gart */ |
2321 | radeon_ring_write(rdev, PACKET3(PACKET3_SURFACE_SYNC, 3)); | 2321 | radeon_ring_write(rdev, PACKET3(PACKET3_SURFACE_SYNC, 3)); |
2322 | radeon_ring_write(rdev, PACKET3_TC_ACTION_ENA | | 2322 | radeon_ring_write(rdev, PACKET3_TC_ACTION_ENA | |
@@ -2349,7 +2349,7 @@ void r600_fence_ring_emit(struct radeon_device *rdev, | |||
2349 | radeon_ring_write(rdev, WAIT_3D_IDLE_bit | WAIT_3D_IDLECLEAN_bit); | 2349 | radeon_ring_write(rdev, WAIT_3D_IDLE_bit | WAIT_3D_IDLECLEAN_bit); |
2350 | /* Emit fence sequence & fire IRQ */ | 2350 | /* Emit fence sequence & fire IRQ */ |
2351 | radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONFIG_REG, 1)); | 2351 | radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONFIG_REG, 1)); |
2352 | radeon_ring_write(rdev, ((rdev->fence_drv.scratch_reg - PACKET3_SET_CONFIG_REG_OFFSET) >> 2)); | 2352 | radeon_ring_write(rdev, ((rdev->fence_drv[fence->ring].scratch_reg - PACKET3_SET_CONFIG_REG_OFFSET) >> 2)); |
2353 | radeon_ring_write(rdev, fence->seq); | 2353 | radeon_ring_write(rdev, fence->seq); |
2354 | /* CP_INTERRUPT packet 3 no longer exists, use packet 0 */ | 2354 | /* CP_INTERRUPT packet 3 no longer exists, use packet 0 */ |
2355 | radeon_ring_write(rdev, PACKET0(CP_INT_STATUS, 0)); | 2355 | radeon_ring_write(rdev, PACKET0(CP_INT_STATUS, 0)); |
@@ -2575,7 +2575,7 @@ int r600_init(struct radeon_device *rdev) | |||
2575 | /* Initialize clocks */ | 2575 | /* Initialize clocks */ |
2576 | radeon_get_clock_info(rdev->ddev); | 2576 | radeon_get_clock_info(rdev->ddev); |
2577 | /* Fence driver */ | 2577 | /* Fence driver */ |
2578 | r = radeon_fence_driver_init(rdev); | 2578 | r = radeon_fence_driver_init(rdev, 1); |
2579 | if (r) | 2579 | if (r) |
2580 | return r; | 2580 | return r; |
2581 | if (rdev->flags & RADEON_IS_AGP) { | 2581 | if (rdev->flags & RADEON_IS_AGP) { |
@@ -3459,11 +3459,11 @@ restart_ih: | |||
3459 | case 177: /* CP_INT in IB1 */ | 3459 | case 177: /* CP_INT in IB1 */ |
3460 | case 178: /* CP_INT in IB2 */ | 3460 | case 178: /* CP_INT in IB2 */ |
3461 | DRM_DEBUG("IH: CP int: 0x%08x\n", src_data); | 3461 | DRM_DEBUG("IH: CP int: 0x%08x\n", src_data); |
3462 | radeon_fence_process(rdev); | 3462 | radeon_fence_process(rdev, RADEON_RING_TYPE_GFX_INDEX); |
3463 | break; | 3463 | break; |
3464 | case 181: /* CP EOP event */ | 3464 | case 181: /* CP EOP event */ |
3465 | DRM_DEBUG("IH: CP EOP\n"); | 3465 | DRM_DEBUG("IH: CP EOP\n"); |
3466 | radeon_fence_process(rdev); | 3466 | radeon_fence_process(rdev, RADEON_RING_TYPE_GFX_INDEX); |
3467 | break; | 3467 | break; |
3468 | case 233: /* GUI IDLE */ | 3468 | case 233: /* GUI IDLE */ |
3469 | DRM_DEBUG("IH: GUI idle\n"); | 3469 | DRM_DEBUG("IH: GUI idle\n"); |