|
@@ -618,16 +618,19 @@ int cik_sdma_ring_test(struct radeon_device *rdev,
|
|
|
{
|
|
|
unsigned i;
|
|
|
int r;
|
|
|
- void __iomem *ptr = (void *)rdev->vram_scratch.ptr;
|
|
|
+ unsigned index;
|
|
|
u32 tmp;
|
|
|
+ u64 gpu_addr;
|
|
|
|
|
|
- if (!ptr) {
|
|
|
- DRM_ERROR("invalid vram scratch pointer\n");
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
+ if (ring->idx == R600_RING_TYPE_DMA_INDEX)
|
|
|
+ index = R600_WB_DMA_RING_TEST_OFFSET;
|
|
|
+ else
|
|
|
+ index = CAYMAN_WB_DMA1_RING_TEST_OFFSET;
|
|
|
+
|
|
|
+ gpu_addr = rdev->wb.gpu_addr + index;
|
|
|
|
|
|
tmp = 0xCAFEDEAD;
|
|
|
- writel(tmp, ptr);
|
|
|
+ rdev->wb.wb[index/4] = cpu_to_le32(tmp);
|
|
|
|
|
|
r = radeon_ring_lock(rdev, ring, 5);
|
|
|
if (r) {
|
|
@@ -635,14 +638,14 @@ int cik_sdma_ring_test(struct radeon_device *rdev,
|
|
|
return r;
|
|
|
}
|
|
|
radeon_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0));
|
|
|
- radeon_ring_write(ring, rdev->vram_scratch.gpu_addr & 0xfffffffc);
|
|
|
- radeon_ring_write(ring, upper_32_bits(rdev->vram_scratch.gpu_addr));
|
|
|
+ radeon_ring_write(ring, lower_32_bits(gpu_addr));
|
|
|
+ radeon_ring_write(ring, upper_32_bits(gpu_addr));
|
|
|
radeon_ring_write(ring, 1); /* number of DWs to follow */
|
|
|
radeon_ring_write(ring, 0xDEADBEEF);
|
|
|
radeon_ring_unlock_commit(rdev, ring, false);
|
|
|
|
|
|
for (i = 0; i < rdev->usec_timeout; i++) {
|
|
|
- tmp = readl(ptr);
|
|
|
+ tmp = le32_to_cpu(rdev->wb.wb[index/4]);
|
|
|
if (tmp == 0xDEADBEEF)
|
|
|
break;
|
|
|
DRM_UDELAY(1);
|