aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/rs690.c
diff options
context:
space:
mode:
authorJerome Glisse <jglisse@redhat.com>2011-11-15 11:48:34 -0500
committerDave Airlie <airlied@redhat.com>2011-12-20 14:52:12 -0500
commitb15ba51207e54245409d6f46e20dab36f906eed1 (patch)
treeb34a37395efa5be0a9af4ba5b627e43813713ed3 /drivers/gpu/drm/radeon/rs690.c
parent1b37078b7ddf35cab12ac6544187e3636d50c0dc (diff)
drm/radeon: introduce a sub allocator and convert ib pool to it v4
Somewhat specializaed sub-allocator designed to perform sub-allocation for command buffer not only for current cs ioctl but for future command submission ioctl as well. Patch also convert current ib pool to use the sub allocator. Idea is that ib poll buffer can be share with other command buffer submission not having 64K granularity. v2 Harmonize pool handling and add suspend/resume callback to pin/unpin sa bo (tested on rv280, rv370, r420, rv515, rv610, rv710, redwood, cayman, rs480, rs690, rs880) v3 Simplify allocator v4 Fix radeon_ib_get error path to properly free fence Signed-off-by: Jerome Glisse <jglisse@redhat.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/rs690.c')
-rw-r--r--drivers/gpu/drm/radeon/rs690.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c
index ae941d196d3..4f24a0fa8c8 100644
--- a/drivers/gpu/drm/radeon/rs690.c
+++ b/drivers/gpu/drm/radeon/rs690.c
@@ -636,15 +636,21 @@ static int rs690_startup(struct radeon_device *rdev)
636 dev_err(rdev->dev, "failed initializing CP (%d).\n", r); 636 dev_err(rdev->dev, "failed initializing CP (%d).\n", r);
637 return r; 637 return r;
638 } 638 }
639 r = r100_ib_init(rdev); 639
640 r = r600_audio_init(rdev);
640 if (r) { 641 if (r) {
641 dev_err(rdev->dev, "failed initializing IB (%d).\n", r); 642 dev_err(rdev->dev, "failed initializing audio\n");
642 return r; 643 return r;
643 } 644 }
644 645
645 r = r600_audio_init(rdev); 646 r = radeon_ib_pool_start(rdev);
647 if (r)
648 return r;
649
650 r = r100_ib_test(rdev);
646 if (r) { 651 if (r) {
647 dev_err(rdev->dev, "failed initializing audio\n"); 652 dev_err(rdev->dev, "failed testing IB (%d).\n", r);
653 rdev->accel_working = false;
648 return r; 654 return r;
649 } 655 }
650 656
@@ -669,11 +675,14 @@ int rs690_resume(struct radeon_device *rdev)
669 rv515_clock_startup(rdev); 675 rv515_clock_startup(rdev);
670 /* Initialize surface registers */ 676 /* Initialize surface registers */
671 radeon_surface_init(rdev); 677 radeon_surface_init(rdev);
678
679 rdev->accel_working = true;
672 return rs690_startup(rdev); 680 return rs690_startup(rdev);
673} 681}
674 682
675int rs690_suspend(struct radeon_device *rdev) 683int rs690_suspend(struct radeon_device *rdev)
676{ 684{
685 radeon_ib_pool_suspend(rdev);
677 r600_audio_fini(rdev); 686 r600_audio_fini(rdev);
678 r100_cp_disable(rdev); 687 r100_cp_disable(rdev);
679 radeon_wb_disable(rdev); 688 radeon_wb_disable(rdev);
@@ -755,7 +764,14 @@ int rs690_init(struct radeon_device *rdev)
755 if (r) 764 if (r)
756 return r; 765 return r;
757 rs600_set_safe_registers(rdev); 766 rs600_set_safe_registers(rdev);
767
768 r = radeon_ib_pool_init(rdev);
758 rdev->accel_working = true; 769 rdev->accel_working = true;
770 if (r) {
771 dev_err(rdev->dev, "IB initialization failed (%d).\n", r);
772 rdev->accel_working = false;
773 }
774
759 r = rs690_startup(rdev); 775 r = rs690_startup(rdev);
760 if (r) { 776 if (r) {
761 /* Somethings want wront with the accel init stop accel */ 777 /* Somethings want wront with the accel init stop accel */