summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/radeon_dri.c77
1 files changed, 45 insertions, 32 deletions
diff --git a/src/radeon_dri.c b/src/radeon_dri.c
index d67d649e..874b49ab 100644
--- a/src/radeon_dri.c
+++ b/src/radeon_dri.c
@@ -1383,7 +1383,7 @@ Bool RADEONDRIGetVersion(ScrnInfoPtr pScrn)
{
RADEONInfoPtr info = RADEONPTR(pScrn);
int major, minor, patch, fd;
- int req_minor, req_patch;
+ int req_major, req_minor, req_patch;
char *busId;
/* Check that the GLX, DRI, and DRM modules have been loaded by testing
@@ -1400,16 +1400,26 @@ Bool RADEONDRIGetVersion(ScrnInfoPtr pScrn)
/* Check the DRI version */
DRIQueryVersion(&major, &minor, &patch);
- if (major != DRIINFO_MAJOR_VERSION || minor < 0) {
- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
- "[dri] RADEONDRIGetVersion failed because of a version "
- "mismatch.\n"
- "[dri] libdri version is %d.%d.%d but version %d.%d.x is "
- "needed.\n"
- "[dri] Disabling DRI.\n",
- major, minor, patch,
- DRIINFO_MAJOR_VERSION, 0);
- return FALSE;
+ if (major < DRIINFO_MAJOR_VERSION) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "[dri] RADEONDRIGetVersion failed because of a version mismatch.\n"
+ "[dri] This driver was built with %d.%d.x, which is too new;\n"
+ "[dri] libdri reports a version of %d.%d.%d."
+ "[dri] A server upgrade may be needed.\n"
+ "[dri] Disabling DRI.\n",
+ DRIINFO_MAJOR_VERSION, 0,
+ major, minor, patch);
+ return FALSE;
+ } else if (major > DRIINFO_MAJOR_VERSION) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "[dri] RADEONDRIGetVersion failed because of a version mismatch.\n"
+ "[dri] This driver was built with %d.%d.x, which is too old;\n"
+ "[dri] libdri reports a version of %d.%d.%d."
+ "[dri] This driver needs to be upgraded/rebuilt.\n"
+ "[dri] Disabling DRI.\n",
+ DRIINFO_MAJOR_VERSION, 0,
+ major, minor, patch);
+ return FALSE;
}
/* Check the lib version */
@@ -1472,37 +1482,40 @@ Bool RADEONDRIGetVersion(ScrnInfoPtr pScrn)
}
/* Now check if we qualify */
+ req_major = 1;
if (info->ChipFamily >= CHIP_FAMILY_R300) {
req_minor = 17;
req_patch = 0;
} else if (info->IsIGP) {
req_minor = 10;
- req_patch = 0;
+ req_patch = 0;
} else { /* Many problems have been reported with 1.7 in the 2.4 kernel */
- req_minor = 8;
- req_patch = 0;
+ req_minor = 8;
+ req_patch = 0;
}
/* We don't, bummer ! */
- if (info->dri->pKernelDRMVersion->version_major != 1 ||
- info->dri->pKernelDRMVersion->version_minor < req_minor ||
- (info->dri->pKernelDRMVersion->version_minor == req_minor &&
- info->dri->pKernelDRMVersion->version_patchlevel < req_patch)) {
+ if (info->dri->pKernelDRMVersion->version_major != req_major ||
+ info->dri->pKernelDRMVersion->version_minor < req_minor ||
+ (info->dri->pKernelDRMVersion->version_minor == req_minor &&
+ info->dri->pKernelDRMVersion->version_patchlevel < req_patch)) {
/* Incompatible drm version */
- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
- "[dri] RADEONDRIGetVersion failed because of a version "
- "mismatch.\n"
- "[dri] radeon kernel module version is %d.%d.%d "
- "but version 1.%d.%d or newer is needed.\n"
- "[dri] Disabling DRI.\n",
- info->dri->pKernelDRMVersion->version_major,
- info->dri->pKernelDRMVersion->version_minor,
- info->dri->pKernelDRMVersion->version_patchlevel,
- req_minor,
- req_patch);
- drmFreeVersion(info->dri->pKernelDRMVersion);
- info->dri->pKernelDRMVersion = NULL;
- return FALSE;
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "[dri] RADEONDRIGetVersion failed because of a version mismatch.\n"
+ "[dri] This chipset requires a kernel module version of %d.%d.%d,\n"
+ "[dri] but the kernel reports a version of %d.%d.%d."
+ "[dri] If using legacy modesetting, upgrade your kernel.\n"
+ "[dri] If using kernel modesetting, make sure your module is\n"
+ "[dri] loaded prior to starting X, and that this driver was built\n"
+ "[dri] with support for KMS.\n"
+ "[dri] Disabling DRI.\n",
+ req_major, req_minor, req_patch,
+ info->dri->pKernelDRMVersion->version_major,
+ info->dri->pKernelDRMVersion->version_minor,
+ info->dri->pKernelDRMVersion->version_patchlevel);
+ drmFreeVersion(info->dri->pKernelDRMVersion);
+ info->dri->pKernelDRMVersion = NULL;
+ return FALSE;
}
return TRUE;