Mach64 DRI on Linux 2.6

20 January 2004

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