diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/rv770.c')
-rw-r--r-- | drivers/gpu/drm/radeon/rv770.c | 60 |
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 | ||
962 | static 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 | |||
994 | static 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 | |||
1010 | void r700_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc) | 962 | void 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); |