I have a solution to why I was running into problems with getting my Radeon 9000 in my laptop working. One of those things that when you realize what is going on - you feel really silly ;-)
The issue was that it wasn't using the r200 driver, but rather the standard radeon driver - which will *not* work. The r200 driver seems to work fairly well. I haven't done any major benchmark or testing, but it does render to the screen and most importantly - it doesn't hard lock my laptop. Attached is an addition to Scott Harrison's patch for the Radeon 9000 that will add CHIP_FAMILY_M9 to the list of chipsets that can use the r200 driver. Note: This diff is from the most recent "unified" ATI driver in the main XFree86 trunk, so the line numbers may be off a couple of lines for the DRI tree. -- //========================================================\\ || D. Hageman <[EMAIL PROTECTED]> || \\========================================================//
diff -ruN /home/dhageman/src/XFree86/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_dri.c ati/radeon_dri.c --- /home/dhageman/src/XFree86/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_dri.c 2002-11-02 15:31:41.000000000 -0600 +++ ati/radeon_dri.c 2002-11-03 15:59:58.000000000 -0600 @@ -1000,7 +1000,9 @@ memset(&drmInfo, 0, sizeof(drmRadeonInit)); - if (info->ChipFamily == CHIP_FAMILY_R200) + if ( (info->ChipFamily == CHIP_FAMILY_R200) || + (info->ChipFamily == CHIP_FAMILY_RV250) || + (info->ChipFamily == CHIP_FAMILY_M9) ) drmInfo.func = DRM_RADEON_INIT_R200_CP; else drmInfo.func = DRM_RADEON_INIT_CP; @@ -1222,6 +1224,9 @@ if (info->ChipFamily == CHIP_FAMILY_R200) pDRIInfo->clientDriverName = R200_DRIVER_NAME; + else if ((info->ChipFamily == CHIP_FAMILY_RV250) || + (info->ChipFamily == CHIP_FAMILY_M9)) + pDRIInfo->clientDriverName = RV250_DRIVER_NAME; else pDRIInfo->clientDriverName = RADEON_DRIVER_NAME; @@ -1345,7 +1350,9 @@ if (version) { int req_minor, req_patch; - if (info->ChipFamily == CHIP_FAMILY_R200) { + if ((info->ChipFamily == CHIP_FAMILY_R200) || + (info->ChipFamily == CHIP_FAMILY_RV250) || + (info->ChipFamily == CHIP_FAMILY_M9)) { req_minor = 5; req_patch = 0; } else { diff -ruN /home/dhageman/src/XFree86/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c ati/radeon_driver.c --- /home/dhageman/src/XFree86/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c 2002-11-02 15:31:41.000000000 -0600 +++ ati/radeon_driver.c 2002-11-03 16:02:10.000000000 -0600 @@ -3480,12 +3480,11 @@ (pScrn->displayWidth * pScrn->virtualY * info->CurrentLayout.pixel_bytes * 3 + 1023) / 1024); info->directRenderingEnabled = FALSE; - } else if (info->ChipFamily >= CHIP_FAMILY_RV250) { - /* Is this correct or do RV250's and M9's work? */ + } else if (info->ChipFamily >= CHIP_FAMILY_R300) { info->directRenderingEnabled = FALSE; xf86DrvMsg(scrnIndex, X_WARNING, "Direct rendering not yet supported on " - "Radeon 9000 and newer cards\n"); + "Radeon 9700 and newer cards\n"); } else { if (info->IsSecondary) info->directRenderingEnabled = FALSE; diff -ruN /home/dhageman/src/XFree86/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_version.h ati/radeon_version.h --- /home/dhageman/src/XFree86/xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_version.h 2002-10-30 12:16:22.000000000 -0600 +++ ati/radeon_version.h 2002-11-02 15:50:10.000000000 -0600 @@ -27,6 +27,7 @@ #define RADEON_NAME "RADEON" #define RADEON_DRIVER_NAME "radeon" #define R200_DRIVER_NAME "r200" +#define RV250_DRIVER_NAME "r200" #define RADEON_VERSION_MAJOR 4 #define RADEON_VERSION_MINOR 0