24.09.2013, 00:11, "Konrad Rzeszutek Wilk" <konrad.w...@oracle.com>:
> On Sat, Sep 21, 2013 at 07:39:10AM +0400, Alex Ivanov wrote:
>
>>  21.09.2013, в 1:27, Alex Deucher <alexdeuc...@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.
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to