aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/rv770.c
diff options
context:
space:
mode:
authorJens Axboe <jaxboe@fusionio.com>2010-10-19 03:13:04 -0400
committerJens Axboe <jaxboe@fusionio.com>2010-10-19 03:13:04 -0400
commitfa251f89903d73989e2f63e13d0eaed1e07ce0da (patch)
tree3f7fe779941e3b6d67754dd7c44a32f48ea47c74 /drivers/gpu/drm/radeon/rv770.c
parentdd3932eddf428571762596e17b65f5dc92ca361b (diff)
parentcd07202cc8262e1669edff0d97715f3dd9260917 (diff)
Merge branch 'v2.6.36-rc8' into for-2.6.37/barrier
Conflicts: block/blk-core.c drivers/block/loop.c mm/swapfile.c Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/rv770.c')
-rw-r--r--drivers/gpu/drm/radeon/rv770.c63
1 files changed, 54 insertions, 9 deletions
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
index f1c796810117..9490da700749 100644
--- a/drivers/gpu/drm/radeon/rv770.c
+++ b/drivers/gpu/drm/radeon/rv770.c
@@ -267,6 +267,7 @@ static void rv770_mc_program(struct radeon_device *rdev)
267 */ 267 */
268void r700_cp_stop(struct radeon_device *rdev) 268void r700_cp_stop(struct radeon_device *rdev)
269{ 269{
270 rdev->mc.active_vram_size = rdev->mc.visible_vram_size;
270 WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT)); 271 WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT));
271} 272}
272 273
@@ -905,6 +906,54 @@ static void rv770_gpu_init(struct radeon_device *rdev)
905 906
906} 907}
907 908
909static int rv770_vram_scratch_init(struct radeon_device *rdev)
910{
911 int r;
912 u64 gpu_addr;
913
914 if (rdev->vram_scratch.robj == NULL) {
915 r = radeon_bo_create(rdev, NULL, RADEON_GPU_PAGE_SIZE,
916 true, RADEON_GEM_DOMAIN_VRAM,
917 &rdev->vram_scratch.robj);
918 if (r) {
919 return r;
920 }
921 }
922
923 r = radeon_bo_reserve(rdev->vram_scratch.robj, false);
924 if (unlikely(r != 0))
925 return r;
926 r = radeon_bo_pin(rdev->vram_scratch.robj,
927 RADEON_GEM_DOMAIN_VRAM, &gpu_addr);
928 if (r) {
929 radeon_bo_unreserve(rdev->vram_scratch.robj);
930 return r;
931 }
932 r = radeon_bo_kmap(rdev->vram_scratch.robj,
933 (void **)&rdev->vram_scratch.ptr);
934 if (r)
935 radeon_bo_unpin(rdev->vram_scratch.robj);
936 radeon_bo_unreserve(rdev->vram_scratch.robj);
937
938 return r;
939}
940
941static void rv770_vram_scratch_fini(struct radeon_device *rdev)
942{
943 int r;
944
945 if (rdev->vram_scratch.robj == NULL) {
946 return;
947 }
948 r = radeon_bo_reserve(rdev->vram_scratch.robj, false);
949 if (likely(r == 0)) {
950 radeon_bo_kunmap(rdev->vram_scratch.robj);
951 radeon_bo_unpin(rdev->vram_scratch.robj);
952 radeon_bo_unreserve(rdev->vram_scratch.robj);
953 }
954 radeon_bo_unref(&rdev->vram_scratch.robj);
955}
956
908int rv770_mc_init(struct radeon_device *rdev) 957int rv770_mc_init(struct radeon_device *rdev)
909{ 958{
910 u32 tmp; 959 u32 tmp;
@@ -944,6 +993,7 @@ int rv770_mc_init(struct radeon_device *rdev)
944 rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE); 993 rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE);
945 rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE); 994 rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE);
946 rdev->mc.visible_vram_size = rdev->mc.aper_size; 995 rdev->mc.visible_vram_size = rdev->mc.aper_size;
996 rdev->mc.active_vram_size = rdev->mc.visible_vram_size;
947 r600_vram_gtt_location(rdev, &rdev->mc); 997 r600_vram_gtt_location(rdev, &rdev->mc);
948 radeon_update_bandwidth_info(rdev); 998 radeon_update_bandwidth_info(rdev);
949 999
@@ -970,6 +1020,9 @@ static int rv770_startup(struct radeon_device *rdev)
970 if (r) 1020 if (r)
971 return r; 1021 return r;
972 } 1022 }
1023 r = rv770_vram_scratch_init(rdev);
1024 if (r)
1025 return r;
973 rv770_gpu_init(rdev); 1026 rv770_gpu_init(rdev);
974 r = r600_blit_init(rdev); 1027 r = r600_blit_init(rdev);
975 if (r) { 1028 if (r) {
@@ -1023,11 +1076,6 @@ int rv770_resume(struct radeon_device *rdev)
1023 */ 1076 */
1024 /* post card */ 1077 /* post card */
1025 atom_asic_init(rdev->mode_info.atom_context); 1078 atom_asic_init(rdev->mode_info.atom_context);
1026 /* Initialize clocks */
1027 r = radeon_clocks_init(rdev);
1028 if (r) {
1029 return r;
1030 }
1031 1079
1032 r = rv770_startup(rdev); 1080 r = rv770_startup(rdev);
1033 if (r) { 1081 if (r) {
@@ -1118,9 +1166,6 @@ int rv770_init(struct radeon_device *rdev)
1118 radeon_surface_init(rdev); 1166 radeon_surface_init(rdev);
1119 /* Initialize clocks */ 1167 /* Initialize clocks */
1120 radeon_get_clock_info(rdev->ddev); 1168 radeon_get_clock_info(rdev->ddev);
1121 r = radeon_clocks_init(rdev);
1122 if (r)
1123 return r;
1124 /* Fence driver */ 1169 /* Fence driver */
1125 r = radeon_fence_driver_init(rdev); 1170 r = radeon_fence_driver_init(rdev);
1126 if (r) 1171 if (r)
@@ -1195,9 +1240,9 @@ void rv770_fini(struct radeon_device *rdev)
1195 r600_irq_fini(rdev); 1240 r600_irq_fini(rdev);
1196 radeon_irq_kms_fini(rdev); 1241 radeon_irq_kms_fini(rdev);
1197 rv770_pcie_gart_fini(rdev); 1242 rv770_pcie_gart_fini(rdev);
1243 rv770_vram_scratch_fini(rdev);
1198 radeon_gem_fini(rdev); 1244 radeon_gem_fini(rdev);
1199 radeon_fence_driver_fini(rdev); 1245 radeon_fence_driver_fini(rdev);
1200 radeon_clocks_fini(rdev);
1201 radeon_agp_fini(rdev); 1246 radeon_agp_fini(rdev);
1202 radeon_bo_fini(rdev); 1247 radeon_bo_fini(rdev);
1203 radeon_atombios_fini(rdev); 1248 radeon_atombios_fini(rdev);