aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/rs600.c
diff options
context:
space:
mode:
authorJerome Glisse <jglisse@redhat.com>2009-11-20 08:29:23 -0500
committerDave Airlie <airlied@redhat.com>2009-12-01 23:00:18 -0500
commit4c7886791264f03428d5424befb1b96f08fc90f4 (patch)
tree2c644931001b06969fb3038e7beb68db436c4872 /drivers/gpu/drm/radeon/rs600.c
parent1614f8b17b8cc3ad143541d41569623d30dbc9ec (diff)
drm/radeon/kms: Rework radeon object handling
The locking & protection of radeon object was somewhat messy. This patch completely rework it to now use ttm reserve as a protection for the radeon object structure member. It also shrink down the various radeon object structure by removing field which were redondant with the ttm information. Last it converts few simple functions to inline which should with performances. airlied: rebase on top of r600 and other changes. 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.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
index 9b6303dd7d3a..c97eb63a21d2 100644
--- a/drivers/gpu/drm/radeon/rs600.c
+++ b/drivers/gpu/drm/radeon/rs600.c
@@ -146,15 +146,20 @@ int rs600_gart_enable(struct radeon_device *rdev)
146 146
147void rs600_gart_disable(struct radeon_device *rdev) 147void rs600_gart_disable(struct radeon_device *rdev)
148{ 148{
149 uint32_t tmp; 149 u32 tmp;
150 int r;
150 151
151 /* FIXME: disable out of gart access */ 152 /* FIXME: disable out of gart access */
152 WREG32_MC(R_000100_MC_PT0_CNTL, 0); 153 WREG32_MC(R_000100_MC_PT0_CNTL, 0);
153 tmp = RREG32_MC(R_000009_MC_CNTL1); 154 tmp = RREG32_MC(R_000009_MC_CNTL1);
154 WREG32_MC(R_000009_MC_CNTL1, tmp & C_000009_ENABLE_PAGE_TABLES); 155 WREG32_MC(R_000009_MC_CNTL1, tmp & C_000009_ENABLE_PAGE_TABLES);
155 if (rdev->gart.table.vram.robj) { 156 if (rdev->gart.table.vram.robj) {
156 radeon_object_kunmap(rdev->gart.table.vram.robj); 157 r = radeon_bo_reserve(rdev->gart.table.vram.robj, false);
157 radeon_object_unpin(rdev->gart.table.vram.robj); 158 if (r == 0) {
159 radeon_bo_kunmap(rdev->gart.table.vram.robj);
160 radeon_bo_unpin(rdev->gart.table.vram.robj);
161 radeon_bo_unreserve(rdev->gart.table.vram.robj);
162 }
158 } 163 }
159} 164}
160 165
@@ -444,7 +449,7 @@ void rs600_fini(struct radeon_device *rdev)
444 rs600_gart_fini(rdev); 449 rs600_gart_fini(rdev);
445 radeon_irq_kms_fini(rdev); 450 radeon_irq_kms_fini(rdev);
446 radeon_fence_driver_fini(rdev); 451 radeon_fence_driver_fini(rdev);
447 radeon_object_fini(rdev); 452 radeon_bo_fini(rdev);
448 radeon_atombios_fini(rdev); 453 radeon_atombios_fini(rdev);
449 kfree(rdev->bios); 454 kfree(rdev->bios);
450 rdev->bios = NULL; 455 rdev->bios = NULL;
@@ -503,7 +508,7 @@ int rs600_init(struct radeon_device *rdev)
503 if (r) 508 if (r)
504 return r; 509 return r;
505 /* Memory manager */ 510 /* Memory manager */
506 r = radeon_object_init(rdev); 511 r = radeon_bo_init(rdev);
507 if (r) 512 if (r)
508 return r; 513 return r;
509 r = rs600_gart_init(rdev); 514 r = rs600_gart_init(rdev);