Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 Sep 2009 12:16:43 -0500
From:      Robert Noland <rnoland@FreeBSD.org>
To:        Richard Kolkovich <sarumont@sigil.org>
Cc:        freebsd-x11@freebsd.org
Subject:   Re: HD4550 DRI issues
Message-ID:  <1253812603.2031.1528.camel@balrog.2hip.net>
In-Reply-To: <20090924145417.GA2539@magus.portal.sigil.org>
References:  <20090923210626.GC46493@magus.portal.sigil.org> <1253741283.2031.334.camel@balrog.2hip.net> <20090924145417.GA2539@magus.portal.sigil.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--=-ZpCEpZkhvLw6n6zInb1v
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

On Thu, 2009-09-24 at 09:54 -0500, Richard Kolkovich wrote:
> (II) RADEON(0): [pci] 32768 kB allocated with handle 0xdc85e000
> (II) RADEON(0): [pci] ring handle = 0xdc85e000
> (II) RADEON(0): [pci] Ring mapped at 0x28a2c000
> (II) RADEON(0): [pci] Ring contents 0x4cf0c1f7
> (II) RADEON(0): [pci] ring read ptr handle = 0xdc95f000
> (II) RADEON(0): [pci] Ring read ptr mapped at 0x286fb000
> (II) RADEON(0): [pci] Ring read ptr contents 0x1fa2f22c
> (II) RADEON(0): [pci] vertex/indirect buffers handle = 0xdc960000
> (II) RADEON(0): [pci] Vertex/indirect buffers mapped at 0x38c00000
> (II) RADEON(0): [pci] Vertex/indirect buffers contents 0x79940699
> (II) RADEON(0): [pci] GART texture map handle = 0xdcb60000
> (II) RADEON(0): [pci] GART Texture map mapped at 0x38f60000

Ok, I think this is where the problem is...  All of the "contents"
registers should be 0 at start up.  I've seen this before, but never
been able to reproduce it locally.  Could you try the attached patch and
see if it makes a difference?

robert.

-- 
Robert Noland <rnoland@FreeBSD.org>
FreeBSD

--=-ZpCEpZkhvLw6n6zInb1v
Content-Disposition: attachment; filename="drm_memattr.patch"
Content-Type: text/x-patch; name="drm_memattr.patch"; charset="us-ascii"
Content-Transfer-Encoding: 7bit

diff --git a/sys/dev/drm/drmP.h b/sys/dev/drm/drmP.h
index 04b77f7..fac2bff 100644
--- a/sys/dev/drm/drmP.h
+++ b/sys/dev/drm/drmP.h
@@ -757,7 +757,7 @@ d_ioctl_t drm_ioctl;
 d_open_t drm_open;
 d_read_t drm_read;
 d_poll_t drm_poll;
-d_mmap_t drm_mmap;
+d_mmap2_t drm_mmap;
 extern drm_local_map_t	*drm_getsarea(struct drm_device *dev);
 
 /* File operations helpers (drm_fops.c) */
diff --git a/sys/dev/drm/drm_drv.c b/sys/dev/drm/drm_drv.c
index c690c34..c6602c3 100644
--- a/sys/dev/drm/drm_drv.c
+++ b/sys/dev/drm/drm_drv.c
@@ -126,9 +126,9 @@ static struct cdevsw drm_cdevsw = {
 	.d_read =	drm_read,
 	.d_ioctl =	drm_ioctl,
 	.d_poll =	drm_poll,
-	.d_mmap =	drm_mmap,
+	.d_mmap2 =	drm_mmap,
 	.d_name =	"drm",
-	.d_flags =	D_TRACKCLOSE
+	.d_flags =	D_TRACKCLOSE | D_MMAP2
 };
 
 static int drm_msi = 1;	/* Enable by default. */
diff --git a/sys/dev/drm/drm_vm.c b/sys/dev/drm/drm_vm.c
index 7d5cd8d..55ad51e 100644
--- a/sys/dev/drm/drm_vm.c
+++ b/sys/dev/drm/drm_vm.c
@@ -32,7 +32,7 @@ __FBSDID("$FreeBSD$");
 #include "dev/drm/drm.h"
 
 int drm_mmap(struct cdev *kdev, vm_offset_t offset, vm_paddr_t *paddr,
-    int prot)
+    int prot, vm_memattr_t *memattr)
 {
 	struct drm_device *dev = drm_get_device_from_kdev(kdev);
 	struct drm_file *file_priv = NULL;
@@ -114,6 +114,10 @@ int drm_mmap(struct cdev *kdev, vm_offset_t offset, vm_paddr_t *paddr,
 		phys = vtophys((char *)map->handle + (offset - map->offset));
 		break;
 	case _DRM_SCATTER_GATHER:
+#ifdef VM_MEMATTR_UNCACHEABLE
+		*memattr = VM_MEMATTR_UNCACHEABLE;
+#endif
+		/* FALLTHROUGH */
 	case _DRM_SHM:
 		phys = vtophys(offset);
 		break;

--=-ZpCEpZkhvLw6n6zInb1v--




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1253812603.2031.1528.camel>