All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Alex Ivanov <gnidorah@p0n4ik.tk>
Cc: Maling list - DRI developers <dri-devel@lists.freedesktop.org>
Subject: Re: drm/radeon: "ring test failed" on PA-RISC Linux
Date: Tue, 10 Sep 2013 09:25:29 -0400	[thread overview]
Message-ID: <20130910132529.GF5038@phenom.dumpdata.com> (raw)
In-Reply-To: <C501E045-BE57-46B9-A1A9-9BD652964F3A@p0n4ik.tk>

On Tue, Sep 10, 2013 at 01:20:57PM +0400, Alex Ivanov wrote:
> Alex,
> 
> 09.09.2013, в 21:43, Alex Deucher <alexdeucher@gmail.com> написал(а):
> 
> > On Mon, Sep 9, 2013 at 12:44 PM, Alex Ivanov <gnidorah@p0n4ik.tk> wrote:
> >> Folks,
> >> 
> >> We (people at linux-parisc @ vger.kernel.org mail list) are trying to make
> >> native video options of the latest PA-RISC servers and workstations
> >> (these are ATIs, most of which are based on R100/R300/R420 chips) work
> >> correctly on this platform (big endian pa-risc).
> >> 
> >> However, we hadn't much success. DRM fails every time with
> >> "ring test failed" for both AGP & PCI.
> >> 
> >> Maybe you would give us some suggestions that we could check?
> >> 
> >> Topic started here:
> >> http://www.spinics.net/lists/linux-parisc/msg04908.html
> >> And continued there:
> >> http://www.spinics.net/lists/linux-parisc/msg04995.html
> >> http://www.spinics.net/lists/linux-parisc/msg05006.html
> >> 
> >> Problems we've already resolved without any signs of progress:
> >> - Checked the successful microcode load
> >> "parisc AGP GART code writes IOMMU entries in the wrong byte order and
> >> doesn't add the coherency information SBA code adds"
> >> "our PCI BAR setup doesn't really work very well together with the Radeon
> >> DRM address setup. DRM will generate addresses, which are even outside
> >> of the connected LBA"
> >> 
> >> Things planned for a check:
> >> "The drivers/video/aty uses
> >> an endian config bit DRM doesn't use, but I haven't tested whether
> >> this makes a difference and how it is connected to the overall picture."
> > 
> > I don't think that will any difference.  radeon kms works fine on
> > other big endian platforms such as powerpc.
> 
> Good! I'll opt it out then.
> 
> > 
> >> 
> >> "The Rage128 product revealed a weakness in some motherboard
> >> chipsets in that there is no mechanism to guarantee
> >> that data written by the CPU to memory is actually in a readable
> >> state before the Graphics Controller receives an
> >> update to its copy of the Write Pointer. In an effort to alleviate this
> >> problem, we"ve introduced a mechanism into the
> >> Graphics Controller that will delay the actual write to the Write Pointer
> >> for some programmable amount of time, in
> >> order to give the chipset time to flush its internal write buffers to
> >> memory.
> >> There are two register fields that control this mechanism:
> >> PRE_WRITE_TIMER and PRE_WRITE_LIMIT.
> >> 
> >> In the radeon DRM codebase I didn't found anyone using/setting
> >> those registers. Maybe PA-RISC has some problem here?..."
> > 
> > I doubt it.  If you are using AGP, I'd suggest disabling it and first
> > try to get things working using the on chip gart rather than AGP.
> > Load radeon with agpmode=-1.  
> 
> Already tried this without any luck. Anyway, a radeon driver fallbacks
> to the PCI mode in our case, so does it really matter?
> 
> In addition, people with PCI cards experiencing the same issue...
> 
> > The on chip gart always uses cache
> > snooped pci transactions and the driver assumes pci is cache coherent.
> > On AGP/PCI chips, the on-chip gart mechanism stores the gart table in
> > system ram.  On PCIE asics, the gart table is stored in vram.  The
> > gart page table maps system pages to a contiguous aperture in the
> > GPU's address space.  The ring lives in gart memory.  The GPU sees a
> > contiguous buffer and the gart mechanism handles the access to the
> > backing pages via the page table.  I'd suggest verifying that the
> > entries written to the gart page table are valid and then the
> > information written to the ring buffer is valid before updating the
> > ring's wptr in radeon_ring_unlock_commit().  Changing the wptr is what
> > causes the CP to start fetching data from the ring.
> 
> Thanks! I'll try. Meanwhile i've tried a switch from page_alloc() to
> dma_alloc_coherent() in radeon_dummy_page_*(), which didn't help :(

Is this platform enabling the SWIOTLB layer? The reason I am asking is
b/c if you do indeed enable it you end up using the TTM DMA pool
which allocates pages using the dma_alloc_coherent - which means that
all of the pages that come out of TTM are already 'DMA' mapped.

And that means the radeon_gart_bind and all its friends 
use the DMA addresses that have been constructed by SWIOTLB IOMMU.

Perhaps the PA-RISC IOMMU creates the DMA addresses differently?

When the card gets programmed, you do end up using ttm_agp_bind right?
I am wondering if something like this:

https://lkml.org/lkml/2010/12/6/512

is needed to pass in the right DMA address?

> 
> --- radeon_device.c.orig	2013-09-10 08:55:05.000000000 +0000
> +++ radeon_device.c	2013-09-10 09:12:17.000000000 +0000
> @@ -673,15 +673,13 @@ int radeon_dummy_page_init(struct radeon
>  {
>  	if (rdev->dummy_page.page)
>  		return 0;
> -	rdev->dummy_page.page = alloc_page(GFP_DMA32 | GFP_KERNEL | __GFP_ZERO);
> -	if (rdev->dummy_page.page == NULL)
> +	rdev->dummy_page.page = dma_alloc_coherent(&rdev->pdev->dev, PAGE_SIZE,
> +		&rdev->dummy_page.addr, GFP_DMA32|GFP_KERNEL);
> +	if (!rdev->dummy_page.page)
>  		return -ENOMEM;
> -	rdev->dummy_page.addr = pci_map_page(rdev->pdev, rdev->dummy_page.page,
> -					0, PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
>  	if (pci_dma_mapping_error(rdev->pdev, rdev->dummy_page.addr)) {
>  		dev_err(&rdev->pdev->dev, "Failed to DMA MAP the dummy page\n");
> -		__free_page(rdev->dummy_page.page);
> -		rdev->dummy_page.page = NULL;
> +		radeon_dummy_page_fini(rdev);
>  		return -ENOMEM;
>  	}
>  	return 0;
> @@ -698,9 +696,8 @@ void radeon_dummy_page_fini(struct radeo
>  {
>  	if (rdev->dummy_page.page == NULL)
>  		return;
> -	pci_unmap_page(rdev->pdev, rdev->dummy_page.addr,
> -			PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
> -	__free_page(rdev->dummy_page.page);
> +	dma_free_coherent(&rdev->pdev->dev, PAGE_SIZE,
> +		rdev->dummy_page.page, rdev->dummy_page.addr);
>  	rdev->dummy_page.page = NULL;
>  }
> 
> > 
> > Alex
> > 
> >> 
> >> Thanks.
> >> 
> >> -------- Пересылаемое сообщение  --------
> >> 04.08.2013, 15:06, "Alex Ivanov" <gnidorah@p0n4ik.tk>:
> >> 
> >> 11.07.2013, 23:48, "Helge Deller" <deller@gmx.de>:
> >> 
> >>> adding linux parisc mailing list...:
> >>> 
> >>> On 07/11/2013 09:46 PM, Helge Deller wrote:
> >>>>  On 07/10/2013 11:29 PM, Alex Ivanov wrote:
> >>>>>  11.07.2013, 01:14, "Matt Turner" <mattst88@gmail.com>:
> >>>>>>  On Wed, Jul 10, 2013 at 1:19 PM, Alex Ivanov <gnidorah@p0n4ik.tk> wrote:
> >>>>>>>   Thank you so much! Your guess looks to be right. After applying of your
> >>>>>>>   patch there was no more KP and X just worked.
> >>>>>>  Nice! Does DRI work?
> >>>>>  Not on my side. Plus i can't visually jump over 8bit depth, although Xorg
> >>>>>  states 24bit in it's log.
> >>>>>  As for DRI, i'm experiencing
> >>>>>  "ring test failed (scratch(0x15E4)=0xCAFEDEAD)" with a firegl x3.
> >>>>  FWIW, I'm seeing the same failure on my FireGL X1:
> >>>>  80:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI Radeon R300 NG [FireGL X1] (rev 80)
> >>>> 
> >>>>  [drm] radeon: irq initialized.
> >>>>  [drm] Loading R300 Microcode
> >>>>  [drm] radeon: ring at 0x0000000060001000
> >>>>  [drm:r100_ring_test] *ERROR* radeon: ring test failed (scratch(0x15E4)=0xCAFEDEAD)
> >>>>  [drm:r100_cp_init] *ERROR* radeon: cp isn't working (-22).
> >>>>  radeon 0000:80:00.0: failed initializing CP (-22).
> >>>>  radeon 0000:80:00.0: Disabling GPU acceleration
> >>>>  [drm:r100_cp_fini] *ERROR* Wait for CP idle timeout, shutting down CP.
> >>>>  [drm] radeon: cp finalized
> >>>>  [drm] radeon: cp finalized
> >> 
> >> I still have no clue why this happens. Broken SBA IOMMU / DRM code? Missing syncing primitives?
> >> Should we forward this to dri-devel mail list?
> >> --
> >> To unsubscribe from this list: send the line "unsubscribe linux-parisc" in
> >> the body of a message to majordomo@vger.kernel.org
> >> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> >> -------- Завершение пересылаемого сообщения --------
> >> _______________________________________________
> >> dri-devel mailing list
> >> dri-devel@lists.freedesktop.org
> >> http://lists.freedesktop.org/mailman/listinfo/dri-devel
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2013-09-10 13:25 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-14  7:11 [PATCH] parisc: fix LMMIO mismatch between PAT length and MASK register Helge Deller
2013-06-14  7:28 ` Matt Turner
2013-06-14  7:38   ` Helge Deller
2013-06-14  7:40     ` Helge Deller
2013-06-14  8:38     ` Thomas Bogendoerfer
2013-07-09  5:34     ` Alex Ivanov
2013-07-09 15:18       ` John David Anglin
2013-07-09 19:45         ` Alex Ivanov
2013-07-09 20:59           ` John David Anglin
2013-07-09 23:35             ` John David Anglin
2013-07-10 20:19               ` Alex Ivanov
2013-07-10 20:28                 ` John David Anglin
2013-07-10 21:14                 ` Matt Turner
2013-07-10 21:29                   ` Alex Ivanov
     [not found]                     ` <51DF0B90.3040506@gmx.de>
2013-07-11 19:47                       ` Helge Deller
2013-08-04 11:00                         ` Alex Ivanov
2013-08-04 15:44                           ` John David Anglin
2013-08-04 16:28                             ` Matt Turner
2013-08-10 19:41                           ` John David Anglin
2013-09-09 16:44                           ` drm/radeon: "ring test failed" on PA-RISC Linux Alex Ivanov
2013-09-09 17:43                             ` Alex Deucher
2013-09-10  9:20                               ` Alex Ivanov
2013-09-10 12:37                                 ` Alex Deucher
2013-09-10 13:03                                   ` Hans Verkuil
2013-09-10 13:25                                 ` Konrad Rzeszutek Wilk [this message]
2013-09-11 11:11                                   ` Fwd: " Alex Ivanov
2013-09-17  8:13                                     ` Alex Ivanov
2013-09-17  9:23                                   ` Alex Ivanov
2013-09-17 14:24                                     ` Alex Deucher
2013-09-17 19:33                                       ` Alex Ivanov
2013-09-20  6:52                                         ` Alex Ivanov
2013-09-20 21:27                                         ` Alex Deucher
2013-09-21  3:39                                           ` Alex Ivanov
2013-09-23 20:11                                             ` Konrad Rzeszutek Wilk
2013-09-25 16:29                                               ` Alex Ivanov
2013-09-25 17:28                                                 ` Konrad Rzeszutek Wilk
2013-09-25 18:17                                                   ` Alex Deucher
2013-09-25 18:51                                                   ` Alex Ivanov
2013-09-26  8:39                                                     ` Alex Ivanov
2013-09-10 15:45                             ` Michel Dänzer
2013-06-14  8:39 ` [PATCH] parisc: fix LMMIO mismatch between PAT length and MASK register Thomas Bogendoerfer
2013-06-18 21:21 ` Helge Deller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130910132529.GF5038@phenom.dumpdata.com \
    --to=konrad.wilk@oracle.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gnidorah@p0n4ik.tk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.