aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/ni.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/ni.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/ni.c')
-rw-r--r--drivers/gpu/drm/radeon/ni.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index 022a606c783b..a9b0e615804f 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -1384,6 +1384,24 @@ static int cayman_startup(struct radeon_device *rdev)
1384 if (r) 1384 if (r)
1385 return r; 1385 return r;
1386 1386
1387 r = radeon_fence_driver_start_ring(rdev, RADEON_RING_TYPE_GFX_INDEX);
1388 if (r) {
1389 dev_err(rdev->dev, "failed initializing CP fences (%d).\n", r);
1390 return r;
1391 }
1392
1393 r = radeon_fence_driver_start_ring(rdev, CAYMAN_RING_TYPE_CP1_INDEX);
1394 if (r) {
1395 dev_err(rdev->dev, "failed initializing CP fences (%d).\n", r);
1396 return r;
1397 }
1398
1399 r = radeon_fence_driver_start_ring(rdev, CAYMAN_RING_TYPE_CP2_INDEX);
1400 if (r) {
1401 dev_err(rdev->dev, "failed initializing CP fences (%d).\n", r);
1402 return r;
1403 }
1404
1387 /* Enable IRQ */ 1405 /* Enable IRQ */
1388 r = r600_irq_init(rdev); 1406 r = r600_irq_init(rdev);
1389 if (r) { 1407 if (r) {
@@ -1492,7 +1510,7 @@ int cayman_init(struct radeon_device *rdev)
1492 /* Initialize clocks */ 1510 /* Initialize clocks */
1493 radeon_get_clock_info(rdev->ddev); 1511 radeon_get_clock_info(rdev->ddev);
1494 /* Fence driver */ 1512 /* Fence driver */
1495 r = radeon_fence_driver_init(rdev, 3); 1513 r = radeon_fence_driver_init(rdev);
1496 if (r) 1514 if (r)
1497 return r; 1515 return r;
1498 /* initialize memory controller */ 1516 /* initialize memory controller */