aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/rv770.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/radeon/rv770.c')
-rw-r--r--drivers/gpu/drm/radeon/rv770.c60
1 files changed, 7 insertions, 53 deletions
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
index 87cc1feee3a..a09049d1590 100644
--- a/drivers/gpu/drm/radeon/rv770.c
+++ b/drivers/gpu/drm/radeon/rv770.c
@@ -282,7 +282,7 @@ static void rv770_mc_program(struct radeon_device *rdev)
282 WREG32(MC_VM_SYSTEM_APERTURE_HIGH_ADDR, 282 WREG32(MC_VM_SYSTEM_APERTURE_HIGH_ADDR,
283 rdev->mc.vram_end >> 12); 283 rdev->mc.vram_end >> 12);
284 } 284 }
285 WREG32(MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR, 0); 285 WREG32(MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR, rdev->vram_scratch.gpu_addr >> 12);
286 tmp = ((rdev->mc.vram_end >> 24) & 0xFFFF) << 16; 286 tmp = ((rdev->mc.vram_end >> 24) & 0xFFFF) << 16;
287 tmp |= ((rdev->mc.vram_start >> 24) & 0xFFFF); 287 tmp |= ((rdev->mc.vram_start >> 24) & 0xFFFF);
288 WREG32(MC_VM_FB_LOCATION, tmp); 288 WREG32(MC_VM_FB_LOCATION, tmp);
@@ -959,54 +959,6 @@ static void rv770_gpu_init(struct radeon_device *rdev)
959 959
960} 960}
961 961
962static int rv770_vram_scratch_init(struct radeon_device *rdev)
963{
964 int r;
965 u64 gpu_addr;
966
967 if (rdev->vram_scratch.robj == NULL) {
968 r = radeon_bo_create(rdev, RADEON_GPU_PAGE_SIZE,
969 PAGE_SIZE, true, RADEON_GEM_DOMAIN_VRAM,
970 &rdev->vram_scratch.robj);
971 if (r) {
972 return r;
973 }
974 }
975
976 r = radeon_bo_reserve(rdev->vram_scratch.robj, false);
977 if (unlikely(r != 0))
978 return r;
979 r = radeon_bo_pin(rdev->vram_scratch.robj,
980 RADEON_GEM_DOMAIN_VRAM, &gpu_addr);
981 if (r) {
982 radeon_bo_unreserve(rdev->vram_scratch.robj);
983 return r;
984 }
985 r = radeon_bo_kmap(rdev->vram_scratch.robj,
986 (void **)&rdev->vram_scratch.ptr);
987 if (r)
988 radeon_bo_unpin(rdev->vram_scratch.robj);
989 radeon_bo_unreserve(rdev->vram_scratch.robj);
990
991 return r;
992}
993
994static void rv770_vram_scratch_fini(struct radeon_device *rdev)
995{
996 int r;
997
998 if (rdev->vram_scratch.robj == NULL) {
999 return;
1000 }
1001 r = radeon_bo_reserve(rdev->vram_scratch.robj, false);
1002 if (likely(r == 0)) {
1003 radeon_bo_kunmap(rdev->vram_scratch.robj);
1004 radeon_bo_unpin(rdev->vram_scratch.robj);
1005 radeon_bo_unreserve(rdev->vram_scratch.robj);
1006 }
1007 radeon_bo_unref(&rdev->vram_scratch.robj);
1008}
1009
1010void r700_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc) 962void r700_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc)
1011{ 963{
1012 u64 size_bf, size_af; 964 u64 size_bf, size_af;
@@ -1106,6 +1058,10 @@ static int rv770_startup(struct radeon_device *rdev)
1106 } 1058 }
1107 } 1059 }
1108 1060
1061 r = r600_vram_scratch_init(rdev);
1062 if (r)
1063 return r;
1064
1109 rv770_mc_program(rdev); 1065 rv770_mc_program(rdev);
1110 if (rdev->flags & RADEON_IS_AGP) { 1066 if (rdev->flags & RADEON_IS_AGP) {
1111 rv770_agp_enable(rdev); 1067 rv770_agp_enable(rdev);
@@ -1114,9 +1070,7 @@ static int rv770_startup(struct radeon_device *rdev)
1114 if (r) 1070 if (r)
1115 return r; 1071 return r;
1116 } 1072 }
1117 r = rv770_vram_scratch_init(rdev); 1073
1118 if (r)
1119 return r;
1120 rv770_gpu_init(rdev); 1074 rv770_gpu_init(rdev);
1121 r = r600_blit_init(rdev); 1075 r = r600_blit_init(rdev);
1122 if (r) { 1076 if (r) {
@@ -1316,7 +1270,7 @@ void rv770_fini(struct radeon_device *rdev)
1316 radeon_ib_pool_fini(rdev); 1270 radeon_ib_pool_fini(rdev);
1317 radeon_irq_kms_fini(rdev); 1271 radeon_irq_kms_fini(rdev);
1318 rv770_pcie_gart_fini(rdev); 1272 rv770_pcie_gart_fini(rdev);
1319 rv770_vram_scratch_fini(rdev); 1273 r600_vram_scratch_fini(rdev);
1320 radeon_gem_fini(rdev); 1274 radeon_gem_fini(rdev);
1321 radeon_fence_driver_fini(rdev); 1275 radeon_fence_driver_fini(rdev);
1322 radeon_agp_fini(rdev); 1276 radeon_agp_fini(rdev);