Commit b9ace36f authored by Alex Deucher's avatar Alex Deucher

drm/radeon: skip async dma init on r6xx

The hw is buggy and it's not currently used, but it's
currently still initialized by the driver.  Skip the init.
Skipping init also seems to improve stability with dpm on
some r6xx asics.

bug:
https://bugs.freedesktop.org/show_bug.cgi?id=66963Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
parent 9babd35a
...@@ -2612,6 +2612,11 @@ int r600_cp_resume(struct radeon_device *rdev) ...@@ -2612,6 +2612,11 @@ int r600_cp_resume(struct radeon_device *rdev)
ring->ready = false; ring->ready = false;
return r; return r;
} }
/* RV7xx+ uses dma for paging */
if (rdev->family < CHIP_RV770)
radeon_ttm_set_active_vram_size(rdev, rdev->mc.real_vram_size);
return 0; return 0;
} }
...@@ -2895,12 +2900,6 @@ static int r600_startup(struct radeon_device *rdev) ...@@ -2895,12 +2900,6 @@ static int r600_startup(struct radeon_device *rdev)
return r; return r;
} }
r = radeon_fence_driver_start_ring(rdev, R600_RING_TYPE_DMA_INDEX);
if (r) {
dev_err(rdev->dev, "failed initializing DMA fences (%d).\n", r);
return r;
}
/* Enable IRQ */ /* Enable IRQ */
if (!rdev->irq.installed) { if (!rdev->irq.installed) {
r = radeon_irq_kms_init(rdev); r = radeon_irq_kms_init(rdev);
...@@ -2922,12 +2921,6 @@ static int r600_startup(struct radeon_device *rdev) ...@@ -2922,12 +2921,6 @@ static int r600_startup(struct radeon_device *rdev)
if (r) if (r)
return r; return r;
ring = &rdev->ring[R600_RING_TYPE_DMA_INDEX];
r = radeon_ring_init(rdev, ring, ring->ring_size, R600_WB_DMA_RPTR_OFFSET,
DMA_PACKET(DMA_PACKET_NOP, 0, 0, 0));
if (r)
return r;
r = r600_cp_load_microcode(rdev); r = r600_cp_load_microcode(rdev);
if (r) if (r)
return r; return r;
...@@ -2935,10 +2928,6 @@ static int r600_startup(struct radeon_device *rdev) ...@@ -2935,10 +2928,6 @@ static int r600_startup(struct radeon_device *rdev)
if (r) if (r)
return r; return r;
r = r600_dma_resume(rdev);
if (r)
return r;
r = radeon_ib_pool_init(rdev); r = radeon_ib_pool_init(rdev);
if (r) { if (r) {
dev_err(rdev->dev, "IB initialization failed (%d).\n", r); dev_err(rdev->dev, "IB initialization failed (%d).\n", r);
...@@ -2997,7 +2986,6 @@ int r600_suspend(struct radeon_device *rdev) ...@@ -2997,7 +2986,6 @@ int r600_suspend(struct radeon_device *rdev)
radeon_pm_suspend(rdev); radeon_pm_suspend(rdev);
r600_audio_fini(rdev); r600_audio_fini(rdev);
r600_cp_stop(rdev); r600_cp_stop(rdev);
r600_dma_stop(rdev);
r600_irq_suspend(rdev); r600_irq_suspend(rdev);
radeon_wb_disable(rdev); radeon_wb_disable(rdev);
r600_pcie_gart_disable(rdev); r600_pcie_gart_disable(rdev);
...@@ -3077,9 +3065,6 @@ int r600_init(struct radeon_device *rdev) ...@@ -3077,9 +3065,6 @@ int r600_init(struct radeon_device *rdev)
rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL; rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL;
r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024); r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024);
rdev->ring[R600_RING_TYPE_DMA_INDEX].ring_obj = NULL;
r600_ring_init(rdev, &rdev->ring[R600_RING_TYPE_DMA_INDEX], 64 * 1024);
rdev->ih.ring_obj = NULL; rdev->ih.ring_obj = NULL;
r600_ih_ring_init(rdev, 64 * 1024); r600_ih_ring_init(rdev, 64 * 1024);
...@@ -3092,7 +3077,6 @@ int r600_init(struct radeon_device *rdev) ...@@ -3092,7 +3077,6 @@ int r600_init(struct radeon_device *rdev)
if (r) { if (r) {
dev_err(rdev->dev, "disabling GPU acceleration\n"); dev_err(rdev->dev, "disabling GPU acceleration\n");
r600_cp_fini(rdev); r600_cp_fini(rdev);
r600_dma_fini(rdev);
r600_irq_fini(rdev); r600_irq_fini(rdev);
radeon_wb_fini(rdev); radeon_wb_fini(rdev);
radeon_ib_pool_fini(rdev); radeon_ib_pool_fini(rdev);
...@@ -3109,7 +3093,6 @@ void r600_fini(struct radeon_device *rdev) ...@@ -3109,7 +3093,6 @@ void r600_fini(struct radeon_device *rdev)
radeon_pm_fini(rdev); radeon_pm_fini(rdev);
r600_audio_fini(rdev); r600_audio_fini(rdev);
r600_cp_fini(rdev); r600_cp_fini(rdev);
r600_dma_fini(rdev);
r600_irq_fini(rdev); r600_irq_fini(rdev);
radeon_wb_fini(rdev); radeon_wb_fini(rdev);
radeon_ib_pool_fini(rdev); radeon_ib_pool_fini(rdev);
......
...@@ -138,7 +138,7 @@ static int radeon_cs_get_ring(struct radeon_cs_parser *p, u32 ring, s32 priority ...@@ -138,7 +138,7 @@ static int radeon_cs_get_ring(struct radeon_cs_parser *p, u32 ring, s32 priority
p->ring = R600_RING_TYPE_DMA_INDEX; p->ring = R600_RING_TYPE_DMA_INDEX;
else else
p->ring = CAYMAN_RING_TYPE_DMA1_INDEX; p->ring = CAYMAN_RING_TYPE_DMA1_INDEX;
} else if (p->rdev->family >= CHIP_R600) { } else if (p->rdev->family >= CHIP_RV770) {
p->ring = R600_RING_TYPE_DMA_INDEX; p->ring = R600_RING_TYPE_DMA_INDEX;
} else { } else {
return -EINVAL; return -EINVAL;
......
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