mirror of
https://github.com/torvalds/linux.git
synced 2024-11-17 01:22:07 +00:00
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:
parent
8efe82ca90
commit
0b021c5802
@ -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);
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user