drm/radeon/kms: make r600-NI blit suspend code common
authorAlex Deucher <alexander.deucher@amd.com>
Fri, 14 Oct 2011 14:51:22 +0000 (10:51 -0400)
committerDave Airlie <airlied@redhat.com>
Tue, 18 Oct 2011 09:12:51 +0000 (10:12 +0100)
r600-NI shared the same blit suspend code.  Clean it up
and make it a shared function.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Ilija Hadzic <ihadzic@research.bell-labs.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/radeon/evergreen.c
drivers/gpu/drm/radeon/ni.c
drivers/gpu/drm/radeon/r600.c
drivers/gpu/drm/radeon/radeon.h
drivers/gpu/drm/radeon/rv770.c

index b37b6a0bbec93dce15f97e3ba9b9c4271a353a45..35b5673d432d2518166ef862b18119ef04e90a66 100644 (file)
@@ -3153,21 +3153,13 @@ int evergreen_resume(struct radeon_device *rdev)
 
 int evergreen_suspend(struct radeon_device *rdev)
 {
-       int r;
-
        /* FIXME: we should wait for ring to be empty */
        r700_cp_stop(rdev);
        rdev->cp.ready = false;
        evergreen_irq_suspend(rdev);
        radeon_wb_disable(rdev);
        evergreen_pcie_gart_disable(rdev);
-
-       /* unpin shaders bo */
-       r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false);
-       if (likely(r == 0)) {
-               radeon_bo_unpin(rdev->r600_blit.shader_obj);
-               radeon_bo_unreserve(rdev->r600_blit.shader_obj);
-       }
+       r600_blit_suspend(rdev);
 
        return 0;
 }
index b5da6dab56828857924731625347b80fab48374d..770cc2ab088a80c88423a75ff762aa76c1507d19 100644 (file)
@@ -1462,21 +1462,13 @@ int cayman_resume(struct radeon_device *rdev)
 
 int cayman_suspend(struct radeon_device *rdev)
 {
-       int r;
-
        /* FIXME: we should wait for ring to be empty */
        cayman_cp_enable(rdev, false);
        rdev->cp.ready = false;
        evergreen_irq_suspend(rdev);
        radeon_wb_disable(rdev);
        cayman_pcie_gart_disable(rdev);
-
-       /* unpin shaders bo */
-       r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false);
-       if (likely(r == 0)) {
-               radeon_bo_unpin(rdev->r600_blit.shader_obj);
-               radeon_bo_unreserve(rdev->r600_blit.shader_obj);
-       }
+       r600_blit_suspend(rdev);
 
        return 0;
 }
index e106f30787fdae850e840ef91b4028f720ed0786..e87f5662a1046eb312cf23298171f8569a99a5da 100644 (file)
@@ -2376,6 +2376,20 @@ int r600_copy_blit(struct radeon_device *rdev,
        return 0;
 }
 
+void r600_blit_suspend(struct radeon_device *rdev)
+{
+       int r;
+
+       /* unpin shaders bo */
+       if (rdev->r600_blit.shader_obj) {
+               r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false);
+               if (!r) {
+                       radeon_bo_unpin(rdev->r600_blit.shader_obj);
+                       radeon_bo_unreserve(rdev->r600_blit.shader_obj);
+               }
+       }
+}
+
 int r600_set_surface_reg(struct radeon_device *rdev, int reg,
                         uint32_t tiling_flags, uint32_t pitch,
                         uint32_t offset, uint32_t obj_size)
@@ -2495,8 +2509,6 @@ int r600_resume(struct radeon_device *rdev)
 
 int r600_suspend(struct radeon_device *rdev)
 {
-       int r;
-
        r600_audio_fini(rdev);
        /* FIXME: we should wait for ring to be empty */
        r600_cp_stop(rdev);
@@ -2504,14 +2516,8 @@ int r600_suspend(struct radeon_device *rdev)
        r600_irq_suspend(rdev);
        radeon_wb_disable(rdev);
        r600_pcie_gart_disable(rdev);
-       /* unpin shaders bo */
-       if (rdev->r600_blit.shader_obj) {
-               r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false);
-               if (!r) {
-                       radeon_bo_unpin(rdev->r600_blit.shader_obj);
-                       radeon_bo_unreserve(rdev->r600_blit.shader_obj);
-               }
-       }
+       r600_blit_suspend(rdev);
+
        return 0;
 }
 
index 6b1d09904e1f77bd581e679e073f019f9b26921f..3cf983c5243ff8f6160226a3067b528836d85f33 100644 (file)
@@ -554,6 +554,8 @@ struct r600_blit {
        struct radeon_ib *vb_ib;
 };
 
+void r600_blit_suspend(struct radeon_device *rdev);
+
 int radeon_ib_get(struct radeon_device *rdev, struct radeon_ib **ib);
 void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib);
 int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib);
index 80928f9ff80f7bd2a6b7545c70d79773d57aaef8..298feaec6d56a6112c6996d25d8b54cc6aeac5dd 100644 (file)
@@ -1238,8 +1238,6 @@ int rv770_resume(struct radeon_device *rdev)
 
 int rv770_suspend(struct radeon_device *rdev)
 {
-       int r;
-
        r600_audio_fini(rdev);
        /* FIXME: we should wait for ring to be empty */
        r700_cp_stop(rdev);
@@ -1247,14 +1245,8 @@ int rv770_suspend(struct radeon_device *rdev)
        r600_irq_suspend(rdev);
        radeon_wb_disable(rdev);
        rv770_pcie_gart_disable(rdev);
-       /* unpin shaders bo */
-       if (rdev->r600_blit.shader_obj) {
-               r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false);
-               if (likely(r == 0)) {
-                       radeon_bo_unpin(rdev->r600_blit.shader_obj);
-                       radeon_bo_unreserve(rdev->r600_blit.shader_obj);
-               }
-       }
+       r600_blit_suspend(rdev);
+
        return 0;
 }