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