aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2017-07-07 07:16:37 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-07-14 11:06:30 -0400
commitbb84284e10ec3447b4bb74cfa493d5c384a0b798 (patch)
tree421bc521cda998d38963c30abc5eea0fc75f56da /drivers/gpu/drm/amd/amdgpu
parent6f02a69648f14024213ab65cd4a4a701e40e46ff (diff)
drm/amdgpu: limit the GTT manager address space
We should only cover the GART size with the GTT manager. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
index f46a97d91675..5e6b90c6794f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
@@ -42,6 +42,7 @@ struct amdgpu_gtt_mgr {
42static int amdgpu_gtt_mgr_init(struct ttm_mem_type_manager *man, 42static int amdgpu_gtt_mgr_init(struct ttm_mem_type_manager *man,
43 unsigned long p_size) 43 unsigned long p_size)
44{ 44{
45 struct amdgpu_device *adev = amdgpu_ttm_adev(man->bdev);
45 struct amdgpu_gtt_mgr *mgr; 46 struct amdgpu_gtt_mgr *mgr;
46 uint64_t start, size; 47 uint64_t start, size;
47 48
@@ -50,7 +51,7 @@ static int amdgpu_gtt_mgr_init(struct ttm_mem_type_manager *man,
50 return -ENOMEM; 51 return -ENOMEM;
51 52
52 start = AMDGPU_GTT_MAX_TRANSFER_SIZE * AMDGPU_GTT_NUM_TRANSFER_WINDOWS; 53 start = AMDGPU_GTT_MAX_TRANSFER_SIZE * AMDGPU_GTT_NUM_TRANSFER_WINDOWS;
53 size = p_size - start; 54 size = (adev->mc.gart_size >> PAGE_SHIFT) - start;
54 drm_mm_init(&mgr->mm, start, size); 55 drm_mm_init(&mgr->mm, start, size);
55 spin_lock_init(&mgr->lock); 56 spin_lock_init(&mgr->lock);
56 mgr->available = p_size; 57 mgr->available = p_size;
@@ -112,6 +113,7 @@ int amdgpu_gtt_mgr_alloc(struct ttm_mem_type_manager *man,
112 const struct ttm_place *place, 113 const struct ttm_place *place,
113 struct ttm_mem_reg *mem) 114 struct ttm_mem_reg *mem)
114{ 115{
116 struct amdgpu_device *adev = amdgpu_ttm_adev(man->bdev);
115 struct amdgpu_gtt_mgr *mgr = man->priv; 117 struct amdgpu_gtt_mgr *mgr = man->priv;
116 struct drm_mm_node *node = mem->mm_node; 118 struct drm_mm_node *node = mem->mm_node;
117 enum drm_mm_insert_mode mode; 119 enum drm_mm_insert_mode mode;
@@ -129,7 +131,7 @@ int amdgpu_gtt_mgr_alloc(struct ttm_mem_type_manager *man,
129 if (place && place->lpfn) 131 if (place && place->lpfn)
130 lpfn = place->lpfn; 132 lpfn = place->lpfn;
131 else 133 else
132 lpfn = man->size; 134 lpfn = adev->gart.num_cpu_pages;
133 135
134 mode = DRM_MM_INSERT_BEST; 136 mode = DRM_MM_INSERT_BEST;
135 if (place && place->flags & TTM_PL_FLAG_TOPDOWN) 137 if (place && place->flags & TTM_PL_FLAG_TOPDOWN)