aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c33
1 files changed, 14 insertions, 19 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 99f158e1baff..42d1a22c1199 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -55,6 +55,7 @@ static const char *amdgpu_asic_name[] = {
55 "MULLINS", 55 "MULLINS",
56 "TOPAZ", 56 "TOPAZ",
57 "TONGA", 57 "TONGA",
58 "FIJI",
58 "CARRIZO", 59 "CARRIZO",
59 "LAST", 60 "LAST",
60}; 61};
@@ -63,7 +64,7 @@ bool amdgpu_device_is_px(struct drm_device *dev)
63{ 64{
64 struct amdgpu_device *adev = dev->dev_private; 65 struct amdgpu_device *adev = dev->dev_private;
65 66
66 if (adev->flags & AMDGPU_IS_PX) 67 if (adev->flags & AMD_IS_PX)
67 return true; 68 return true;
68 return false; 69 return false;
69} 70}
@@ -1160,6 +1161,7 @@ static int amdgpu_early_init(struct amdgpu_device *adev)
1160 switch (adev->asic_type) { 1161 switch (adev->asic_type) {
1161 case CHIP_TOPAZ: 1162 case CHIP_TOPAZ:
1162 case CHIP_TONGA: 1163 case CHIP_TONGA:
1164 case CHIP_FIJI:
1163 case CHIP_CARRIZO: 1165 case CHIP_CARRIZO:
1164 if (adev->asic_type == CHIP_CARRIZO) 1166 if (adev->asic_type == CHIP_CARRIZO)
1165 adev->family = AMDGPU_FAMILY_CZ; 1167 adev->family = AMDGPU_FAMILY_CZ;
@@ -1377,7 +1379,7 @@ int amdgpu_device_init(struct amdgpu_device *adev,
1377 adev->ddev = ddev; 1379 adev->ddev = ddev;
1378 adev->pdev = pdev; 1380 adev->pdev = pdev;
1379 adev->flags = flags; 1381 adev->flags = flags;
1380 adev->asic_type = flags & AMDGPU_ASIC_MASK; 1382 adev->asic_type = flags & AMD_ASIC_MASK;
1381 adev->is_atom_bios = false; 1383 adev->is_atom_bios = false;
1382 adev->usec_timeout = AMDGPU_MAX_USEC_TIMEOUT; 1384 adev->usec_timeout = AMDGPU_MAX_USEC_TIMEOUT;
1383 adev->mc.gtt_size = 512 * 1024 * 1024; 1385 adev->mc.gtt_size = 512 * 1024 * 1024;
@@ -1523,6 +1525,11 @@ int amdgpu_device_init(struct amdgpu_device *adev,
1523 return r; 1525 return r;
1524 } 1526 }
1525 1527
1528 r = amdgpu_ctx_init(adev, true, &adev->kernel_ctx);
1529 if (r) {
1530 dev_err(adev->dev, "failed to create kernel context (%d).\n", r);
1531 return r;
1532 }
1526 r = amdgpu_ib_ring_tests(adev); 1533 r = amdgpu_ib_ring_tests(adev);
1527 if (r) 1534 if (r)
1528 DRM_ERROR("ib ring test failed (%d).\n", r); 1535 DRM_ERROR("ib ring test failed (%d).\n", r);
@@ -1584,6 +1591,7 @@ void amdgpu_device_fini(struct amdgpu_device *adev)
1584 adev->shutdown = true; 1591 adev->shutdown = true;
1585 /* evict vram memory */ 1592 /* evict vram memory */
1586 amdgpu_bo_evict_vram(adev); 1593 amdgpu_bo_evict_vram(adev);
1594 amdgpu_ctx_fini(&adev->kernel_ctx);
1587 amdgpu_ib_pool_fini(adev); 1595 amdgpu_ib_pool_fini(adev);
1588 amdgpu_fence_driver_fini(adev); 1596 amdgpu_fence_driver_fini(adev);
1589 amdgpu_fbdev_fini(adev); 1597 amdgpu_fbdev_fini(adev);
@@ -1627,8 +1635,7 @@ int amdgpu_suspend_kms(struct drm_device *dev, bool suspend, bool fbcon)
1627 struct amdgpu_device *adev; 1635 struct amdgpu_device *adev;
1628 struct drm_crtc *crtc; 1636 struct drm_crtc *crtc;
1629 struct drm_connector *connector; 1637 struct drm_connector *connector;
1630 int i, r; 1638 int r;
1631 bool force_completion = false;
1632 1639
1633 if (dev == NULL || dev->dev_private == NULL) { 1640 if (dev == NULL || dev->dev_private == NULL) {
1634 return -ENODEV; 1641 return -ENODEV;
@@ -1667,21 +1674,7 @@ int amdgpu_suspend_kms(struct drm_device *dev, bool suspend, bool fbcon)
1667 /* evict vram memory */ 1674 /* evict vram memory */
1668 amdgpu_bo_evict_vram(adev); 1675 amdgpu_bo_evict_vram(adev);
1669 1676
1670 /* wait for gpu to finish processing current batch */ 1677 amdgpu_fence_driver_suspend(adev);
1671 for (i = 0; i < AMDGPU_MAX_RINGS; i++) {
1672 struct amdgpu_ring *ring = adev->rings[i];
1673 if (!ring)
1674 continue;
1675
1676 r = amdgpu_fence_wait_empty(ring);
1677 if (r) {
1678 /* delay GPU reset to resume */
1679 force_completion = true;
1680 }
1681 }
1682 if (force_completion) {
1683 amdgpu_fence_driver_force_completion(adev);
1684 }
1685 1678
1686 r = amdgpu_suspend(adev); 1679 r = amdgpu_suspend(adev);
1687 1680
@@ -1739,6 +1732,8 @@ int amdgpu_resume_kms(struct drm_device *dev, bool resume, bool fbcon)
1739 1732
1740 r = amdgpu_resume(adev); 1733 r = amdgpu_resume(adev);
1741 1734
1735 amdgpu_fence_driver_resume(adev);
1736
1742 r = amdgpu_ib_ring_tests(adev); 1737 r = amdgpu_ib_ring_tests(adev);
1743 if (r) 1738 if (r)
1744 DRM_ERROR("ib ring test failed (%d).\n", r); 1739 DRM_ERROR("ib ring test failed (%d).\n", r);