drm/radeon: "ring test failed" on PA-RISC Linux
Alex Ivanov
gnidorah at p0n4ik.tk
Wed Sep 25 09:29:07 PDT 2013
24.09.2013, 00:11, "Konrad Rzeszutek Wilk" <konrad.wilk at oracle.com>:
> On Sat, Sep 21, 2013 at 07:39:10AM +0400, Alex Ivanov wrote:
>
>> 21.09.2013, в 1:27, Alex Deucher <alexdeucher at gmail.com> написал(а):
>>> The register writes seems to be going through the register backbone correctly:
>>>
>>> [0x00B] 0x15E0=0x00000000
>>> [0x00C] 0x15E4=0xCAFEDEAD
>>> [0x00D] 0x4274=0x0000000F
>>> [0x00E] 0x42C8=0x00000007
>>> [0x00F] 0x4018=0x0000001D
>>> [0x010] 0x170C=0x80000000
>>> [0x011] 0x3428=0x00020100
>>> [0x012] 0x15E4=0xCAFEDEAD
>>>
>>> You can see the 0xCAFEDEAD written to the scratch register via MMIO
>>> from the ring_test(). The CP fifo however seems to be full of garbage.
>>> The CP is busy though, so it seems to be functional. I guess it's
>>> just fetching garbage rather than commands.
>
> If it is fetching garbage, that would imply the DMA (or bus addresses)
> that are programmed in the GART are bogus. If you dump them and try
> to figure out if bus adress -> physical address -> virtual address ==
> virtual address -> bus address that could help. And perhaps seeing what
> the virtual address has - and or poisoning it with known data?
>
> Or perhaps the the card has picked up an incorrect page table? Meaning
> the (bus) address given to it is not the correct one?
>
Konrad,
Let's see. Please notice that i'm not PA-RISC or general linux kernel
developer, just the user, so i may do things completely wrong.
I was hoping that PA-RISC smarties will join me here, but they seem
to be busy with other duties. Even port's mail list activity is low
during last weeks.
> If you dump them and try
> to figure out if bus adress -> physical address -> virtual address ==
> virtual address -> bus address that could help
With following
radeon/radeon_ttm.c:
radeon_ttm_tt_populate():
...
for (i = 0; i < ttm->num_pages; i++) {
gtt->ttm.dma_address[i] = pci_map_page(rdev->pdev, ttm->pages[i],
0, PAGE_SIZE,
PCI_DMA_BIDIRECTIONAL);
void *va = bus_to_virt(gtt->ttm.dma_address[i]);
if ((phys_addr_t) va != virt_to_bus(va)) {
DRM_INFO("MISMATCH: %p != %p\n", va, (void *) virt_to_bus(va));
/*DRM_INFO("CONTENTS: %x\n", *((uint32_t *)va));*/ // Leads to a Kernel Fault
...
}
I'm getting the output:
[drm] MISMATCH: 0000000080280000 != 0000000040280000
[drm] MISMATCH: 0000000080281000 != 0000000040281000
...
How can i check the same for an AGP mode?
> Or perhaps the the card has picked up an incorrect page table? Meaning
> the (bus) address given to it is not the correct one?
I'll see.
More information about the dri-devel
mailing list