summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/aticonfig.c2
-rw-r--r--src/atioption.c7
-rw-r--r--src/atioption.h1
-rw-r--r--src/atiprobe.c24
-rw-r--r--src/atistruct.h1
5 files changed, 35 insertions, 0 deletions
diff --git a/src/aticonfig.c b/src/aticonfig.c
index 604fbae..988edfd 100644
--- a/src/aticonfig.c
+++ b/src/aticonfig.c
@@ -112,6 +112,7 @@ ATIProcessOptions
(void)memcpy(PublicOption, ATIPublicOptions, ATIPublicOptionSize);
+# define ProbeSparse PublicOption[ATI_OPTION_PROBE_SPARSE].value.bool
# define Accel PublicOption[ATI_OPTION_ACCEL].value.bool
# define BIOSDisplay PrivateOption[ATI_OPTION_BIOS_DISPLAY].value.bool
# define Blend PrivateOption[ATI_OPTION_BLEND].value.bool
@@ -188,6 +189,7 @@ ATIProcessOptions
PrivateOption);
/* Move option values into driver private structure */
+ pATI->OptionProbeSparse = ProbeSparse;
pATI->OptionAccel = Accel;
pATI->OptionBIOSDisplay = BIOSDisplay;
pATI->OptionBlend = Blend;
diff --git a/src/atioption.c b/src/atioption.c
index 7ef580b..4cb965d 100644
--- a/src/atioption.c
+++ b/src/atioption.c
@@ -61,6 +61,13 @@ const char *ATITVStandardNames[ATI_TV_STDS_MAX_VALID+1] = {
const OptionInfoRec ATIPublicOptions[] =
{
{
+ ATI_OPTION_PROBE_SPARSE,
+ "probe_sparse",
+ OPTV_BOOLEAN,
+ {0, },
+ FALSE
+ },
+ {
ATI_OPTION_ACCEL,
"accel",
OPTV_BOOLEAN,
diff --git a/src/atioption.h b/src/atioption.h
index 569debd..f68f641 100644
--- a/src/atioption.h
+++ b/src/atioption.h
@@ -33,6 +33,7 @@
*/
typedef enum
{
+ ATI_OPTION_PROBE_SPARSE,
ATI_OPTION_ACCEL,
ATI_OPTION_CRT_DISPLAY,
ATI_OPTION_CSYNC,
diff --git a/src/atiprobe.c b/src/atiprobe.c
index 1cd62bd..e869bf0 100644
--- a/src/atiprobe.c
+++ b/src/atiprobe.c
@@ -67,6 +67,18 @@ ATIVGAWonderProbe
{
CARD8 IOValue1, IOValue2, IOValue3, IOValue4, IOValue5, IOValue6;
+ if (!pATI->OptionProbeSparse)
+ {
+ xf86Msg(X_WARNING,
+ ATI_NAME ": Expected VGA Wonder capability at I/O port"
+ " 0x%04lX will not be probed\n"
+ "set option \"probe_sparse\" to force probing.\n",
+ pATI->CPIO_VGAWonder);
+
+ pATI->CPIO_VGAWonder = 0;
+ return;
+ }
+
if (pVideo && !xf86IsPrimaryPci(pVideo) &&
(pATI->Chip <= ATI_CHIP_88800GXD))
{
@@ -414,7 +426,19 @@ ATIMach64ProbeIO
* build a list of registered I/O ports. If there was a conflict
* between a mach64 sparse I/O base and a registered I/0 port, probing
* that port was not allowed...
+ *
+ * We just add an option and let the user decide, this will not work
+ * with "X -configure" though...
*/
+ if (!pATI->OptionProbeSparse)
+ {
+ xf86Msg(X_WARNING, ATI_NAME ": "
+ "PCI Mach64 in slot %d:%d:%d will not be probed\n"
+ "set option \"probe_sparse\" to force sparse I/O probing.\n",
+ pVideo->bus, pVideo->device, pVideo->func);
+
+ goto SkipSparse;
+ }
/* Possibly fix block I/O indicator */
if (PciReg & 0x00000004U)
diff --git a/src/atistruct.h b/src/atistruct.h
index 4498e8e..430b565 100644
--- a/src/atistruct.h
+++ b/src/atistruct.h
@@ -454,6 +454,7 @@ typedef struct _ATIRec
/*
* Driver options.
*/
+ unsigned int OptionProbeSparse:1; /* Force probe for fixed (sparse) I/O */
unsigned int OptionAccel:1; /* Use hardware draw engine */
unsigned int OptionBIOSDisplay:1; /* Allow BIOS interference */
unsigned int OptionBlend:1; /* Force horizontal blending */