aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/rs600.c
diff options
context:
space:
mode:
authorJerome Glisse <jglisse@redhat.com>2011-11-20 15:45:34 -0500
committerDave Airlie <airlied@redhat.com>2011-12-20 14:51:19 -0500
commit30eb77f4e6ba20f797af4ff79807fae7cb67429e (patch)
tree0143bb70c00f3080d70cf8e2a966cf8d7f137dfc /drivers/gpu/drm/radeon/rs600.c
parentaf9720f4907e0a4a4341a015efe08026b3d3eb2e (diff)
drm/radeon: precompute fence cpu/gpu addr once v3
Add a start fence driver helper function which will be call once for each ring and will compute cpu/gpu addr for fence depending on wether to use wb buffer or scratch reg. This patch replace initialize fence driver separately which was broken in regard of GPU lockup. The fence list for created, emited, signaled must be initialize once and only from the asic init callback not from the startup call back which is call from the gpu reset. v2: With this in place we no longer need to know the number of rings in fence_driver_init, also writing to the scratch reg before knowing its offset is a bad idea. v3: rebase on top of change to previous patch in the serie Signed-off-by: Christian König <deathsimple@vodafone.de> Signed-off-by: Jerome Glisse <jglisse@redhat.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/rs600.c')
-rw-r--r--drivers/gpu/drm/radeon/rs600.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
index 1c9ab9409531..3fe384741fc0 100644
--- a/drivers/gpu/drm/radeon/rs600.c
+++ b/drivers/gpu/drm/radeon/rs600.c
@@ -849,6 +849,12 @@ static int rs600_startup(struct radeon_device *rdev)
849 if (r) 849 if (r)
850 return r; 850 return r;
851 851
852 r = radeon_fence_driver_start_ring(rdev, RADEON_RING_TYPE_GFX_INDEX);
853 if (r) {
854 dev_err(rdev->dev, "failed initializing CP fences (%d).\n", r);
855 return r;
856 }
857
852 /* Enable IRQ */ 858 /* Enable IRQ */
853 rs600_irq_set(rdev); 859 rs600_irq_set(rdev);
854 rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); 860 rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
@@ -962,7 +968,7 @@ int rs600_init(struct radeon_device *rdev)
962 rs600_mc_init(rdev); 968 rs600_mc_init(rdev);
963 rs600_debugfs(rdev); 969 rs600_debugfs(rdev);
964 /* Fence driver */ 970 /* Fence driver */
965 r = radeon_fence_driver_init(rdev, 1); 971 r = radeon_fence_driver_init(rdev);
966 if (r) 972 if (r)
967 return r; 973 return r;
968 r = radeon_irq_kms_init(rdev); 974 r = radeon_irq_kms_init(rdev);