aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/radeon/evergreen.c10
-rw-r--r--drivers/gpu/drm/radeon/ni.c10
-rw-r--r--drivers/gpu/drm/radeon/r600.c26
-rw-r--r--drivers/gpu/drm/radeon/radeon.h2
-rw-r--r--drivers/gpu/drm/radeon/rv770.c12
5 files changed, 22 insertions, 38 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
index b37b6a0bbec9..35b5673d432d 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -3153,21 +3153,13 @@ int evergreen_resume(struct radeon_device *rdev)
3153 3153
3154int evergreen_suspend(struct radeon_device *rdev) 3154int evergreen_suspend(struct radeon_device *rdev)
3155{ 3155{
3156 int r;
3157
3158 /* FIXME: we should wait for ring to be empty */ 3156 /* FIXME: we should wait for ring to be empty */
3159 r700_cp_stop(rdev); 3157 r700_cp_stop(rdev);
3160 rdev->cp.ready = false; 3158 rdev->cp.ready = false;
3161 evergreen_irq_suspend(rdev); 3159 evergreen_irq_suspend(rdev);
3162 radeon_wb_disable(rdev); 3160 radeon_wb_disable(rdev);
3163 evergreen_pcie_gart_disable(rdev); 3161 evergreen_pcie_gart_disable(rdev);
3164 3162 r600_blit_suspend(rdev);
3165 /* unpin shaders bo */
3166 r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false);
3167 if (likely(r == 0)) {
3168 radeon_bo_unpin(rdev->r600_blit.shader_obj);
3169 radeon_bo_unreserve(rdev->r600_blit.shader_obj);
3170 }
3171 3163
3172 return 0; 3164 return 0;
3173} 3165}
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index b5da6dab5682..770cc2ab088a 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -1462,21 +1462,13 @@ int cayman_resume(struct radeon_device *rdev)
1462 1462
1463int cayman_suspend(struct radeon_device *rdev) 1463int cayman_suspend(struct radeon_device *rdev)
1464{ 1464{
1465 int r;
1466
1467 /* FIXME: we should wait for ring to be empty */ 1465 /* FIXME: we should wait for ring to be empty */
1468 cayman_cp_enable(rdev, false); 1466 cayman_cp_enable(rdev, false);
1469 rdev->cp.ready = false; 1467 rdev->cp.ready = false;
1470 evergreen_irq_suspend(rdev); 1468 evergreen_irq_suspend(rdev);
1471 radeon_wb_disable(rdev); 1469 radeon_wb_disable(rdev);
1472 cayman_pcie_gart_disable(rdev); 1470 cayman_pcie_gart_disable(rdev);
1473 1471 r600_blit_suspend(rdev);
1474 /* unpin shaders bo */
1475 r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false);
1476 if (likely(r == 0)) {
1477 radeon_bo_unpin(rdev->r600_blit.shader_obj);
1478 radeon_bo_unreserve(rdev->r600_blit.shader_obj);
1479 }
1480 1472
1481 return 0; 1473 return 0;
1482} 1474}
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index e106f30787fd..e87f5662a104 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -2376,6 +2376,20 @@ int r600_copy_blit(struct radeon_device *rdev,
2376 return 0; 2376 return 0;
2377} 2377}
2378 2378
2379void r600_blit_suspend(struct radeon_device *rdev)
2380{
2381 int r;
2382
2383 /* unpin shaders bo */
2384 if (rdev->r600_blit.shader_obj) {
2385 r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false);
2386 if (!r) {
2387 radeon_bo_unpin(rdev->r600_blit.shader_obj);
2388 radeon_bo_unreserve(rdev->r600_blit.shader_obj);
2389 }
2390 }
2391}
2392
2379int r600_set_surface_reg(struct radeon_device *rdev, int reg, 2393int r600_set_surface_reg(struct radeon_device *rdev, int reg,
2380 uint32_t tiling_flags, uint32_t pitch, 2394 uint32_t tiling_flags, uint32_t pitch,
2381 uint32_t offset, uint32_t obj_size) 2395 uint32_t offset, uint32_t obj_size)
@@ -2495,8 +2509,6 @@ int r600_resume(struct radeon_device *rdev)
2495 2509
2496int r600_suspend(struct radeon_device *rdev) 2510int r600_suspend(struct radeon_device *rdev)
2497{ 2511{
2498 int r;
2499
2500 r600_audio_fini(rdev); 2512 r600_audio_fini(rdev);
2501 /* FIXME: we should wait for ring to be empty */ 2513 /* FIXME: we should wait for ring to be empty */
2502 r600_cp_stop(rdev); 2514 r600_cp_stop(rdev);
@@ -2504,14 +2516,8 @@ int r600_suspend(struct radeon_device *rdev)
2504 r600_irq_suspend(rdev); 2516 r600_irq_suspend(rdev);
2505 radeon_wb_disable(rdev); 2517 radeon_wb_disable(rdev);
2506 r600_pcie_gart_disable(rdev); 2518 r600_pcie_gart_disable(rdev);
2507 /* unpin shaders bo */ 2519 r600_blit_suspend(rdev);
2508 if (rdev->r600_blit.shader_obj) { 2520
2509 r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false);
2510 if (!r) {
2511 radeon_bo_unpin(rdev->r600_blit.shader_obj);
2512 radeon_bo_unreserve(rdev->r600_blit.shader_obj);
2513 }
2514 }
2515 return 0; 2521 return 0;
2516} 2522}
2517 2523
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 6b1d09904e1f..3cf983c5243f 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -554,6 +554,8 @@ struct r600_blit {
554 struct radeon_ib *vb_ib; 554 struct radeon_ib *vb_ib;
555}; 555};
556 556
557void r600_blit_suspend(struct radeon_device *rdev);
558
557int radeon_ib_get(struct radeon_device *rdev, struct radeon_ib **ib); 559int radeon_ib_get(struct radeon_device *rdev, struct radeon_ib **ib);
558void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib); 560void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib);
559int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib); 561int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib);
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
index 80928f9ff80f..298feaec6d56 100644
--- a/drivers/gpu/drm/radeon/rv770.c
+++ b/drivers/gpu/drm/radeon/rv770.c
@@ -1238,8 +1238,6 @@ int rv770_resume(struct radeon_device *rdev)
1238 1238
1239int rv770_suspend(struct radeon_device *rdev) 1239int rv770_suspend(struct radeon_device *rdev)
1240{ 1240{
1241 int r;
1242
1243 r600_audio_fini(rdev); 1241 r600_audio_fini(rdev);
1244 /* FIXME: we should wait for ring to be empty */ 1242 /* FIXME: we should wait for ring to be empty */
1245 r700_cp_stop(rdev); 1243 r700_cp_stop(rdev);
@@ -1247,14 +1245,8 @@ int rv770_suspend(struct radeon_device *rdev)
1247 r600_irq_suspend(rdev); 1245 r600_irq_suspend(rdev);
1248 radeon_wb_disable(rdev); 1246 radeon_wb_disable(rdev);
1249 rv770_pcie_gart_disable(rdev); 1247 rv770_pcie_gart_disable(rdev);
1250 /* unpin shaders bo */ 1248 r600_blit_suspend(rdev);
1251 if (rdev->r600_blit.shader_obj) { 1249
1252 r = radeon_bo_reserve(rdev->r600_blit.shader_obj, false);
1253 if (likely(r == 0)) {
1254 radeon_bo_unpin(rdev->r600_blit.shader_obj);
1255 radeon_bo_unreserve(rdev->r600_blit.shader_obj);
1256 }
1257 }
1258 return 0; 1250 return 0;
1259} 1251}
1260 1252