Commit 50efa51a authored by Alex Deucher's avatar Alex Deucher

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: default avatarAlex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
parent b9ace36f
...@@ -3840,6 +3840,8 @@ static void cik_cp_gfx_enable(struct radeon_device *rdev, bool enable) ...@@ -3840,6 +3840,8 @@ static void cik_cp_gfx_enable(struct radeon_device *rdev, bool enable)
if (enable) if (enable)
WREG32(CP_ME_CNTL, 0); WREG32(CP_ME_CNTL, 0);
else { else {
if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT)); WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT));
rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false; rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
} }
...@@ -4038,6 +4040,10 @@ static int cik_cp_gfx_resume(struct radeon_device *rdev) ...@@ -4038,6 +4040,10 @@ static int cik_cp_gfx_resume(struct radeon_device *rdev)
rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false; rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
return r; return r;
} }
if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
return 0; return 0;
} }
......
...@@ -250,6 +250,8 @@ static void cik_sdma_gfx_stop(struct radeon_device *rdev) ...@@ -250,6 +250,8 @@ static void cik_sdma_gfx_stop(struct radeon_device *rdev)
u32 rb_cntl, reg_offset; u32 rb_cntl, reg_offset;
int i; int i;
if ((rdev->asic->copy.copy_ring_index == R600_RING_TYPE_DMA_INDEX) ||
(rdev->asic->copy.copy_ring_index == CAYMAN_RING_TYPE_DMA1_INDEX))
radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
...@@ -381,6 +383,8 @@ static int cik_sdma_gfx_resume(struct radeon_device *rdev) ...@@ -381,6 +383,8 @@ static int cik_sdma_gfx_resume(struct radeon_device *rdev)
} }
} }
if ((rdev->asic->copy.copy_ring_index == R600_RING_TYPE_DMA_INDEX) ||
(rdev->asic->copy.copy_ring_index == CAYMAN_RING_TYPE_DMA1_INDEX))
radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size); radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
return 0; return 0;
......
...@@ -1390,6 +1390,7 @@ static void cayman_cp_enable(struct radeon_device *rdev, bool enable) ...@@ -1390,6 +1390,7 @@ static void cayman_cp_enable(struct radeon_device *rdev, bool enable)
if (enable) if (enable)
WREG32(CP_ME_CNTL, 0); WREG32(CP_ME_CNTL, 0);
else { else {
if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT)); WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT));
WREG32(SCRATCH_UMSK, 0); WREG32(SCRATCH_UMSK, 0);
...@@ -1663,6 +1664,9 @@ static int cayman_cp_resume(struct radeon_device *rdev) ...@@ -1663,6 +1664,9 @@ static int cayman_cp_resume(struct radeon_device *rdev)
return r; return r;
} }
if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
return 0; return 0;
} }
......
...@@ -157,6 +157,8 @@ void cayman_dma_stop(struct radeon_device *rdev) ...@@ -157,6 +157,8 @@ void cayman_dma_stop(struct radeon_device *rdev)
{ {
u32 rb_cntl; u32 rb_cntl;
if ((rdev->asic->copy.copy_ring_index == R600_RING_TYPE_DMA_INDEX) ||
(rdev->asic->copy.copy_ring_index == CAYMAN_RING_TYPE_DMA1_INDEX))
radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
/* dma0 */ /* dma0 */
...@@ -259,6 +261,8 @@ int cayman_dma_resume(struct radeon_device *rdev) ...@@ -259,6 +261,8 @@ int cayman_dma_resume(struct radeon_device *rdev)
} }
} }
if ((rdev->asic->copy.copy_ring_index == R600_RING_TYPE_DMA_INDEX) ||
(rdev->asic->copy.copy_ring_index == CAYMAN_RING_TYPE_DMA1_INDEX))
radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size); radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
return 0; return 0;
......
...@@ -2254,6 +2254,7 @@ void r600_pciep_wreg(struct radeon_device *rdev, u32 reg, u32 v) ...@@ -2254,6 +2254,7 @@ void r600_pciep_wreg(struct radeon_device *rdev, u32 reg, u32 v)
*/ */
void r600_cp_stop(struct radeon_device *rdev) void r600_cp_stop(struct radeon_device *rdev)
{ {
if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
WREG32(R_0086D8_CP_ME_CNTL, S_0086D8_CP_ME_HALT(1)); WREG32(R_0086D8_CP_ME_CNTL, S_0086D8_CP_ME_HALT(1));
WREG32(SCRATCH_UMSK, 0); WREG32(SCRATCH_UMSK, 0);
...@@ -2613,8 +2614,7 @@ int r600_cp_resume(struct radeon_device *rdev) ...@@ -2613,8 +2614,7 @@ int r600_cp_resume(struct radeon_device *rdev)
return r; return r;
} }
/* RV7xx+ uses dma for paging */ if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
if (rdev->family < CHIP_RV770)
radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size); radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
return 0; return 0;
......
...@@ -100,6 +100,7 @@ void r600_dma_stop(struct radeon_device *rdev) ...@@ -100,6 +100,7 @@ void r600_dma_stop(struct radeon_device *rdev)
{ {
u32 rb_cntl = RREG32(DMA_RB_CNTL); u32 rb_cntl = RREG32(DMA_RB_CNTL);
if (rdev->asic->copy.copy_ring_index == R600_RING_TYPE_DMA_INDEX)
radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
rb_cntl &= ~DMA_RB_ENABLE; rb_cntl &= ~DMA_RB_ENABLE;
...@@ -187,6 +188,7 @@ int r600_dma_resume(struct radeon_device *rdev) ...@@ -187,6 +188,7 @@ int r600_dma_resume(struct radeon_device *rdev)
return r; return r;
} }
if (rdev->asic->copy.copy_ring_index == R600_RING_TYPE_DMA_INDEX)
radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size); radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
return 0; return 0;
......
...@@ -1071,6 +1071,7 @@ static void rv770_mc_program(struct radeon_device *rdev) ...@@ -1071,6 +1071,7 @@ static void rv770_mc_program(struct radeon_device *rdev)
*/ */
void r700_cp_stop(struct radeon_device *rdev) void r700_cp_stop(struct radeon_device *rdev)
{ {
if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT)); WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT));
WREG32(SCRATCH_UMSK, 0); WREG32(SCRATCH_UMSK, 0);
......
...@@ -3249,6 +3249,7 @@ static void si_cp_enable(struct radeon_device *rdev, bool enable) ...@@ -3249,6 +3249,7 @@ static void si_cp_enable(struct radeon_device *rdev, bool enable)
if (enable) if (enable)
WREG32(CP_ME_CNTL, 0); WREG32(CP_ME_CNTL, 0);
else { else {
if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size); radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT)); WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT | CP_CE_HALT));
WREG32(SCRATCH_UMSK, 0); WREG32(SCRATCH_UMSK, 0);
...@@ -3510,6 +3511,9 @@ static int si_cp_resume(struct radeon_device *rdev) ...@@ -3510,6 +3511,9 @@ static int si_cp_resume(struct radeon_device *rdev)
si_enable_gui_idle_interrupt(rdev, true); si_enable_gui_idle_interrupt(rdev, true);
if (rdev->asic->copy.copy_ring_index == RADEON_RING_TYPE_GFX_INDEX)
radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment