On Thu, 19 Mar 2009, Robert Noland wrote:
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.
It's still garbled with this patch too. Any other ideas? Just let me
know when it's time for me to buy a different video card. :-)
--
Greg Rivers
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);
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[email protected]"