aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2014-01-27 11:26:33 -0500
committerAlex Deucher <alexander.deucher@amd.com>2014-01-29 15:23:05 -0500
commit50efa51afddb50a6ab47ee15614fcf180130888c (patch)
tree5f80ce2157217fe83c3569a484e03c2e15f5e4d7
parentb9ace36f13c6fc46391c9d40edc648eef3a59ab0 (diff)
drm/radeon: clean up active vram sizing
If we are not able to properly initialize one of the gpu engines for buffer paging, we limit vram to the size of the cpu visible aperture. We generally either use the gfx or dma engine to do this. Clean up the size limiting code to only adjust the size based on what ring is selected for buffer paging rather than making assumptions about which engine is selected for paging. Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com>
-rw-r--r--drivers/gpu/drm/radeon/cik.c6
-rw-r--r--drivers/gpu/drm/radeon/cik_sdma.c8
-rw-r--r--drivers/gpu/drm/radeon/ni.c6
-rw-r--r--drivers/gpu/drm/radeon/ni_dma.c8
-rw-r--r--drivers/gpu/drm/radeon/r600.c6
-rw-r--r--drivers/gpu/drm/radeon/r600_dma.c6
-rw-r--r--drivers/gpu/drm/radeon/rv770.c3
-rw-r--r--drivers/gpu/drm/radeon/si.c6
8 files changed, 37 insertions, 12 deletions
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
index 6ffe824624fb..e6419ca7cd37 100644
--- a/drivers/gpu/drm/radeon/cik.c
+++ b/drivers/gpu/drm/radeon/cik.c
@@ -3840,6 +3840,8 @@ static void cik_cp_gfx_enable(struct radeon_device *rdev, bool enable)
3840 if (enable) 3840 if (enable)
3841 WREG32(CP_ME_CNTL, 0); 3841 WREG32(CP_ME_CNTL, 0);
3842 else { 3842 else {
3843 if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
3844 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
3843 WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT)); 3845 WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT));
3844 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false; 3846 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
3845 } 3847 }
@@ -4038,6 +4040,10 @@ static int cik_cp_gfx_resume(struct radeon_device *rdev)
4038 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false; 4040 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
4039 return r; 4041 return r;
4040 } 4042 }
4043
4044 if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
4045 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
4046
4041 return 0; 4047 return 0;
4042} 4048}
4043 4049
diff --git a/drivers/gpu/drm/radeon/cik_sdma.c b/drivers/gpu/drm/radeon/cik_sdma.c
index 9abea87a9213..1ecb3f1070e3 100644
--- a/drivers/gpu/drm/radeon/cik_sdma.c
+++ b/drivers/gpu/drm/radeon/cik_sdma.c
@@ -250,7 +250,9 @@ static void cik_sdma_gfx_stop(struct radeon_device *rdev)
250 u32 rb_cntl, reg_offset; 250 u32 rb_cntl, reg_offset;
251 int i; 251 int i;
252 252
253 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); 253 if ((rdev->asic->copy.copy_ring_index == R600_RING_TYPE_DMA_INDEX) ||
254 (rdev->asic->copy.copy_ring_index == CAYMAN_RING_TYPE_DMA1_INDEX))
255 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
254 256
255 for (i = 0; i < 2; i++) { 257 for (i = 0; i < 2; i++) {
256 if (i == 0) 258 if (i == 0)
@@ -381,7 +383,9 @@ static int cik_sdma_gfx_resume(struct radeon_device *rdev)
381 } 383 }
382 } 384 }
383 385
384 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size); 386 if ((rdev->asic->copy.copy_ring_index == R600_RING_TYPE_DMA_INDEX) ||
387 (rdev->asic->copy.copy_ring_index == CAYMAN_RING_TYPE_DMA1_INDEX))
388 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
385 389
386 return 0; 390 return 0;
387} 391}
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index 647b1d0fa62c..ea932ac66fc6 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -1390,7 +1390,8 @@ static void cayman_cp_enable(struct radeon_device *rdev, bool enable)
1390 if (enable) 1390 if (enable)
1391 WREG32(CP_ME_CNTL, 0); 1391 WREG32(CP_ME_CNTL, 0);
1392 else { 1392 else {
1393 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); 1393 if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
1394 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
1394 WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT)); 1395 WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT));
1395 WREG32(SCRATCH_UMSK, 0); 1396 WREG32(SCRATCH_UMSK, 0);
1396 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false; 1397 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
@@ -1663,6 +1664,9 @@ static int cayman_cp_resume(struct radeon_device *rdev)
1663 return r; 1664 return r;
1664 } 1665 }
1665 1666
1667 if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
1668 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
1669
1666 return 0; 1670 return 0;
1667} 1671}
1668 1672
diff --git a/drivers/gpu/drm/radeon/ni_dma.c b/drivers/gpu/drm/radeon/ni_dma.c
index 51424ab79432..7cf96b15377f 100644
--- a/drivers/gpu/drm/radeon/ni_dma.c
+++ b/drivers/gpu/drm/radeon/ni_dma.c
@@ -157,7 +157,9 @@ void cayman_dma_stop(struct radeon_device *rdev)
157{ 157{
158 u32 rb_cntl; 158 u32 rb_cntl;
159 159
160 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); 160 if ((rdev->asic->copy.copy_ring_index == R600_RING_TYPE_DMA_INDEX) ||
161 (rdev->asic->copy.copy_ring_index == CAYMAN_RING_TYPE_DMA1_INDEX))
162 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
161 163
162 /* dma0 */ 164 /* dma0 */
163 rb_cntl = RREG32(DMA_RB_CNTL + DMA0_REGISTER_OFFSET); 165 rb_cntl = RREG32(DMA_RB_CNTL + DMA0_REGISTER_OFFSET);
@@ -259,7 +261,9 @@ int cayman_dma_resume(struct radeon_device *rdev)
259 } 261 }
260 } 262 }
261 263
262 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size); 264 if ((rdev->asic->copy.copy_ring_index == R600_RING_TYPE_DMA_INDEX) ||
265 (rdev->asic->copy.copy_ring_index == CAYMAN_RING_TYPE_DMA1_INDEX))
266 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
263 267
264 return 0; 268 return 0;
265} 269}
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 4d69d1745d54..56140b4e5bb2 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -2254,7 +2254,8 @@ void r600_pciep_wreg(struct radeon_device *rdev, u32 reg, u32 v)
2254 */ 2254 */
2255void r600_cp_stop(struct radeon_device *rdev) 2255void r600_cp_stop(struct radeon_device *rdev)
2256{ 2256{
2257 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); 2257 if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
2258 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
2258 WREG32(R_0086D8_CP_ME_CNTL, S_0086D8_CP_ME_HALT(1)); 2259 WREG32(R_0086D8_CP_ME_CNTL, S_0086D8_CP_ME_HALT(1));
2259 WREG32(SCRATCH_UMSK, 0); 2260 WREG32(SCRATCH_UMSK, 0);
2260 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false; 2261 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
@@ -2613,8 +2614,7 @@ int r600_cp_resume(struct radeon_device *rdev)
2613 return r; 2614 return r;
2614 } 2615 }
2615 2616
2616 /* RV7xx+ uses dma for paging */ 2617 if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
2617 if (rdev->family < CHIP_RV770)
2618 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size); 2618 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
2619 2619
2620 return 0; 2620 return 0;
diff --git a/drivers/gpu/drm/radeon/r600_dma.c b/drivers/gpu/drm/radeon/r600_dma.c
index 3452c8410bd7..b2d4c91e6272 100644
--- a/drivers/gpu/drm/radeon/r600_dma.c
+++ b/drivers/gpu/drm/radeon/r600_dma.c
@@ -100,7 +100,8 @@ void r600_dma_stop(struct radeon_device *rdev)
100{ 100{
101 u32 rb_cntl = RREG32(DMA_RB_CNTL); 101 u32 rb_cntl = RREG32(DMA_RB_CNTL);
102 102
103 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); 103 if (rdev->asic->copy.copy_ring_index == R600_RING_TYPE_DMA_INDEX)
104 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
104 105
105 rb_cntl &= ~DMA_RB_ENABLE; 106 rb_cntl &= ~DMA_RB_ENABLE;
106 WREG32(DMA_RB_CNTL, rb_cntl); 107 WREG32(DMA_RB_CNTL, rb_cntl);
@@ -187,7 +188,8 @@ int r600_dma_resume(struct radeon_device *rdev)
187 return r; 188 return r;
188 } 189 }
189 190
190 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size); 191 if (rdev->asic->copy.copy_ring_index == R600_RING_TYPE_DMA_INDEX)
192 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
191 193
192 return 0; 194 return 0;
193} 195}
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
index 18e02889ec7d..6c772e58c784 100644
--- a/drivers/gpu/drm/radeon/rv770.c
+++ b/drivers/gpu/drm/radeon/rv770.c
@@ -1071,7 +1071,8 @@ static void rv770_mc_program(struct radeon_device *rdev)
1071 */ 1071 */
1072void r700_cp_stop(struct radeon_device *rdev) 1072void r700_cp_stop(struct radeon_device *rdev)
1073{ 1073{
1074 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); 1074 if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
1075 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
1075 WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT)); 1076 WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT));
1076 WREG32(SCRATCH_UMSK, 0); 1077 WREG32(SCRATCH_UMSK, 0);
1077 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false; 1078 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index 07ce58716e44..e641725ae543 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -3249,7 +3249,8 @@ static void si_cp_enable(struct radeon_device *rdev, bool enable)
3249 if (enable) 3249 if (enable)
3250 WREG32(CP_ME_CNTL, 0); 3250 WREG32(CP_ME_CNTL, 0);
3251 else { 3251 else {
3252 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); 3252 if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
3253 radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
3253 WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT)); 3254 WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT));
3254 WREG32(SCRATCH_UMSK, 0); 3255 WREG32(SCRATCH_UMSK, 0);
3255 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false; 3256 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
@@ -3510,6 +3511,9 @@ static int si_cp_resume(struct radeon_device *rdev)
3510 3511
3511 si_enable_gui_idle_interrupt(rdev, true); 3512 si_enable_gui_idle_interrupt(rdev, true);
3512 3513
3514 if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
3515 radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
3516
3513 return 0; 3517 return 0;
3514} 3518}
3515 3519