Mach64 DRI on Linux 2.6
I got my Mach64-based video chip (ATI Rage Mobility) doing DRI again on my Inspiron 3800 running Linux 2.6.1. I installed the applicable Mach64 library debs and module source debs from http://people.debian.org/~daenzer/dri-mach64-sid/, unpacked the source, patched it up a bit by hand, reconfigured X a bit, and it seems I have 3D support again.
I had to drop back to 16bpp default depth to get enough memory for DRI to stay enabled.
To get it to even build against 26, I came up with this minimal patch to the drm-mach64-module source as unpacked from daenzer's deb file:
diff -rc drm-mach64/Makefile.kernel drm-mach64-2.6/Makefile.kernel
*** drm-mach64/Makefile.kernel Tue Jan 20 14:21:52 2004
--- drm-mach64-2.6/Makefile.kernel Tue Jan 20 14:22:29 2004
***************
*** 49,55 ****
obj-$(CONFIG_DRM_FFB) += ffb.o
ifeq ($(BELOW2552),y)
! include $(TOPDIR)/Rules.make
endif
ifeq ($(BELOW25),y)
--- 49,55 ----
obj-$(CONFIG_DRM_FFB) += ffb.o
ifeq ($(BELOW2552),y)
! include $(TOPDIR)/debian/rules
endif
ifeq ($(BELOW25),y)
diff -rc drm-mach64/debian/control.m4 drm-mach64-2.6/debian/control.m4
*** drm-mach64/debian/control.m4 Sun May 4 11:35:50 2003
--- drm-mach64-2.6/debian/control.m4 Tue Jan 20 14:05:10 2004
***************
*** 1,3 ****
--- 1,4 ----
+ Source: drm-mach64-module-KVERS
Section: graphics
Priority: extra
Maintainer: KMAINT <KEMAIL>
diff -rc drm-mach64/drmP.h drm-mach64-2.6/drmP.h
*** drm-mach64/drmP.h Sun May 4 12:28:46 2003
--- drm-mach64-2.6/drmP.h Tue Jan 20 13:58:13 2004
***************
*** 48,54 ****
#include <linux/init.h>
#include <linux/file.h>
#include <linux/pci.h>
! #include <linux/wrapper.h>
#include <linux/version.h>
#include <linux/sched.h>
#include <linux/smp_lock.h> /* For (un)lock_kernel */
--- 48,54 ----
#include <linux/init.h>
#include <linux/file.h>
#include <linux/pci.h>
! /* include <linux/wrapper.h> */
#include <linux/version.h>
#include <linux/sched.h>
#include <linux/smp_lock.h> /* For (un)lock_kernel */
***************
*** 470,475 ****
--- 470,477 ----
} drm_device_dma_t;
#if __REALLY_HAVE_AGP
+ typedef struct agp_memory agp_memory;
+
typedef struct drm_agp_mem {
unsigned long handle;
agp_memory *memory;
***************
*** 479,484 ****
--- 481,488 ----
struct drm_agp_mem *next;
} drm_agp_mem_t;
+ typedef struct agp_kern_info agp_kern_info;
+
typedef struct drm_agp_head {
agp_kern_info agp_info;
drm_agp_mem_t *memory;
Once it builds, the resulting deb package installs the module as /lib/module/2.6.1/kernel/drivers/char/drm/mach64.o. It needs to be renamed to mach64.ko. I couldn't figure out how to get the Makefile to do that for me, so I just did it by hand.
After the X server's reconfigured, the module is installed and renamed, I restart my X server and I was in business. Of course, my path to discovering this clear-cut method was not near as direct.
Update: Some people reported having trouble with my patch as presented above, so here's a link: drm-mach64-2.6.patch.txt.
Filed Under: Linux