drm/radeon: use gart for DMA IB tests

Use gart rather than vram to avoid having to deal with
the HDP cache.

Port of adfed2b058
(drm/radeon: use gart memory for DMA ring tests)
to the IB tests.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
This commit is contained in:
Alex Deucher 2014-11-03 11:27:17 -05:00
parent 8efe82ca90
commit 0b021c5802
2 changed files with 22 additions and 19 deletions

View File

@ -667,17 +667,20 @@ int cik_sdma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
{ {
struct radeon_ib ib; struct radeon_ib ib;
unsigned i; unsigned i;
unsigned index;
int r; int r;
void __iomem *ptr = (void *)rdev->vram_scratch.ptr;
u32 tmp = 0; u32 tmp = 0;
u64 gpu_addr;
if (!ptr) { if (ring->idx == R600_RING_TYPE_DMA_INDEX)
DRM_ERROR("invalid vram scratch pointer\n"); index = R600_WB_DMA_RING_TEST_OFFSET;
return -EINVAL; else
} index = CAYMAN_WB_DMA1_RING_TEST_OFFSET;
gpu_addr = rdev->wb.gpu_addr + index;
tmp = 0xCAFEDEAD; tmp = 0xCAFEDEAD;
writel(tmp, ptr); rdev->wb.wb[index/4] = cpu_to_le32(tmp);
r = radeon_ib_get(rdev, ring->idx, &ib, NULL, 256); r = radeon_ib_get(rdev, ring->idx, &ib, NULL, 256);
if (r) { if (r) {
@ -686,8 +689,8 @@ int cik_sdma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
} }
ib.ptr[0] = SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0); ib.ptr[0] = SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0);
ib.ptr[1] = rdev->vram_scratch.gpu_addr & 0xfffffffc; ib.ptr[1] = lower_32_bits(gpu_addr);
ib.ptr[2] = upper_32_bits(rdev->vram_scratch.gpu_addr); ib.ptr[2] = upper_32_bits(gpu_addr);
ib.ptr[3] = 1; ib.ptr[3] = 1;
ib.ptr[4] = 0xDEADBEEF; ib.ptr[4] = 0xDEADBEEF;
ib.length_dw = 5; ib.length_dw = 5;
@ -704,7 +707,7 @@ int cik_sdma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
return r; return r;
} }
for (i = 0; i < rdev->usec_timeout; i++) { for (i = 0; i < rdev->usec_timeout; i++) {
tmp = readl(ptr); tmp = le32_to_cpu(rdev->wb.wb[index/4]);
if (tmp == 0xDEADBEEF) if (tmp == 0xDEADBEEF)
break; break;
DRM_UDELAY(1); DRM_UDELAY(1);

View File

@ -338,17 +338,17 @@ int r600_dma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
{ {
struct radeon_ib ib; struct radeon_ib ib;
unsigned i; unsigned i;
unsigned index;
int r; int r;
void __iomem *ptr = (void *)rdev->vram_scratch.ptr;
u32 tmp = 0; u32 tmp = 0;
u64 gpu_addr;
if (!ptr) { if (ring->idx == R600_RING_TYPE_DMA_INDEX)
DRM_ERROR("invalid vram scratch pointer\n"); index = R600_WB_DMA_RING_TEST_OFFSET;
return -EINVAL; else
} index = CAYMAN_WB_DMA1_RING_TEST_OFFSET;
tmp = 0xCAFEDEAD; gpu_addr = rdev->wb.gpu_addr + index;
writel(tmp, ptr);
r = radeon_ib_get(rdev, ring->idx, &ib, NULL, 256); r = radeon_ib_get(rdev, ring->idx, &ib, NULL, 256);
if (r) { if (r) {
@ -357,8 +357,8 @@ int r600_dma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
} }
ib.ptr[0] = DMA_PACKET(DMA_PACKET_WRITE, 0, 0, 1); ib.ptr[0] = DMA_PACKET(DMA_PACKET_WRITE, 0, 0, 1);
ib.ptr[1] = rdev->vram_scratch.gpu_addr & 0xfffffffc; ib.ptr[1] = lower_32_bits(gpu_addr);
ib.ptr[2] = upper_32_bits(rdev->vram_scratch.gpu_addr) & 0xff; ib.ptr[2] = upper_32_bits(gpu_addr) & 0xff;
ib.ptr[3] = 0xDEADBEEF; ib.ptr[3] = 0xDEADBEEF;
ib.length_dw = 4; ib.length_dw = 4;
@ -374,7 +374,7 @@ int r600_dma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring)
return r; return r;
} }
for (i = 0; i < rdev->usec_timeout; i++) { for (i = 0; i < rdev->usec_timeout; i++) {
tmp = readl(ptr); tmp = le32_to_cpu(rdev->wb.wb[index/4]);
if (tmp == 0xDEADBEEF) if (tmp == 0xDEADBEEF)
break; break;
DRM_UDELAY(1); DRM_UDELAY(1);