On Thu, 2009-03-19 at 15:01 -0500, Greg Rivers wrote:
> On Wed, 18 Mar 2009, Robert Noland wrote:
> 
> > Ok, so it isn't the gart caching... Can you get me a pointer to a 
> > screenshot?
> >
> 
> fetch http://www.tharned.org/rv380-drm-issue.tbz
> This archive contains various logs and system configuration files as well 
> as screen shot images.  Look at the README file for a description of the 
> images.
> 
> 
> > What is garbled exactly?  Is the damage constrained to specific windows 
> > or it it the entire framebuffer?
> >
> 
> The entire frame buffer is garbled; switching to syscons and back seems to 
> change the way it's garbled.  However, the interior of an xterm window is 
> never garbled.  I'm running a dual-head configuration with the frame 
> buffer spanning both monitors.

Ok, I thought that I had already fixed this up, but I missed this
spot...  Please try this patch.

robert.

-- 
Robert Noland <rnol...@freebsd.org>
FreeBSD
Index: dev/drm/ati_pcigart.c
===================================================================
--- dev/drm/ati_pcigart.c	(revision 190096)
+++ dev/drm/ati_pcigart.c	(working copy)
@@ -75,18 +75,15 @@
 	    NULL, NULL, /* filtfunc, filtfuncargs */
 	    gart_info->table_size, 1, /* maxsize, nsegs */
 	    gart_info->table_size, /* maxsegsize */
-	    BUS_DMA_ALLOCNOW, NULL, NULL, /* flags, lockfunc, lockfuncargs */
+	    0, NULL, NULL, /* flags, lockfunc, lockfuncargs */
 	    &dmah->tag);
 	if (ret != 0) {
 		free(dmah, DRM_MEM_DMA);
 		return ENOMEM;
 	}
 
-	flags = BUS_DMA_NOWAIT | BUS_DMA_ZERO;
-	if (gart_info->gart_reg_if == DRM_ATI_GART_IGP)
-	    flags |= BUS_DMA_NOCACHE;
-	
-	ret = bus_dmamem_alloc(dmah->tag, &dmah->vaddr, flags, &dmah->map);
+	ret = bus_dmamem_alloc(dmah->tag, &dmah->vaddr,
+	    BUS_DMA_WAITOK | BUS_DMA_ZERO, &dmah->map);
 	if (ret != 0) {
 		bus_dma_tag_destroy(dmah->tag);
 		free(dmah, DRM_MEM_DMA);
@@ -94,8 +91,12 @@
 	}
 	DRM_LOCK();
 
+	flags = BUS_DMA_NOWAIT;
+	if (gart_info->gart_reg_if == DRM_ATI_GART_IGP)
+	    flags |= BUS_DMA_NOCACHE;
+	
 	ret = bus_dmamap_load(dmah->tag, dmah->map, dmah->vaddr,
-	    gart_info->table_size, drm_ati_alloc_pcigart_table_cb, dmah, 0);
+	    gart_info->table_size, drm_ati_alloc_pcigart_table_cb, dmah, flags);
 	if (ret != 0) {
 		bus_dmamem_free(dmah->tag, dmah->vaddr, dmah->map);
 		bus_dma_tag_destroy(dmah->tag);

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to