summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuc Verhaegen <libv@skynet.be>2006-04-17 15:56:41 +0200
committerLuc Verhaegen <libv@skynet.be>2006-04-17 15:56:41 +0200
commit8e87a79089cef494c8e6669ddf4e314af6bbca49 (patch)
tree83b27e4ed58b1f1828b8156297180d491588b9c7
parent484262fdcffdc1ba008d324561543dd723ad3e57 (diff)
Split up Mach64ChipIDInfo:
- chip version on the basis of revision -> Mach64ChipRevisionId. - Bus checking -> Mach64BusType. - LCDVBlendFIFOSize -> Mach64PanelInfoGet.
-rw-r--r--src/ati.c48
-rw-r--r--src/atipreinit.c84
2 files changed, 74 insertions, 58 deletions
diff --git a/src/ati.c b/src/ati.c
index 75c1a5e..8013926 100644
--- a/src/ati.c
+++ b/src/ati.c
@@ -357,6 +357,52 @@ Mach64PciChipsets[] = {
};
/*
+ * Handle sub versions, from revision data, here already.
+ */
+static void
+Mach64ChipRevisionId(int entityIndex)
+{
+ EntityInfoPtr pEnt = xf86GetEntityInfo(entityIndex);
+ pciVideoPtr pPCI = xf86GetPciInfoForEntity(entityIndex);
+
+ switch (pEnt->chipset) {
+ case ATI_CHIP_88800GX:
+ switch (pPCI->chipRev) {
+ case 0x00:
+ pEnt->chipset = ATI_CHIP_88800GXC;
+ break;
+ case 0x01:
+ pEnt->chipset = ATI_CHIP_88800GXD;
+ break;
+ case 0x02:
+ pEnt->chipset = ATI_CHIP_88800GXE;
+ break;
+ case 0x03:
+ pEnt->chipset = ATI_CHIP_88800GXF;
+ default:
+ pEnt->chipset = ATI_CHIP_88800GX;
+ break;
+ }
+ break;
+ case ATI_CHIP_264VT:
+ if ((pPCI->chipRev & GetBits(CFG_CHIP_VERSION, CFG_CHIP_REV)))
+ pEnt->chipset = ATI_CHIP_264VTB;
+ else
+ pEnt->chipset = ATI_CHIP_264VT;
+
+ break;
+ case ATI_CHIP_264GT:
+ if ((pPCI->chipRev & GetBits(CFG_CHIP_VERSION, CFG_CHIP_REV)))
+ pEnt->chipset = ATI_CHIP_264GTB;
+ else
+ pEnt->chipset = ATI_CHIP_264GT;
+ break;
+ default:
+ break;
+ }
+}
+
+/*
* ATIProbe --
*
* This function is called once, at the start of the first server generation to
@@ -401,6 +447,8 @@ Mach64Probe(DriverPtr pDriver, int flags)
if (!pScrn)
continue;
+ Mach64ChipRevisionId(usedChips[i]);
+
pScrn->driverVersion = ATI_VERSION_CURRENT;
pScrn->driverName = ATI_DRIVER_NAME;
pScrn->name = ATI_NAME;
diff --git a/src/atipreinit.c b/src/atipreinit.c
index f457424..e57d075 100644
--- a/src/atipreinit.c
+++ b/src/atipreinit.c
@@ -261,10 +261,6 @@ ATIMach64Probe(ATIPtr pATI)
CARD32 IOValue;
IOValue = inr(CONFIG_STATUS64_0);
- pATI->BusType = GetBits(IOValue, CFG_BUS_TYPE);
- if (pATI->BusType != ATI_BUS_PCI)
- xf86Msg(X_WARNING, "Mach64 GX/CX claims not to be a PCI device.\n");
-
IOValue &= (CFG_VGA_EN | CFG_CHIP_EN);
if (pATI->Chip == ATI_CHIP_88800CX)
@@ -314,53 +310,23 @@ ATIClaimVGAResources(ATIPtr pATI)
#endif /* AVOID_CPIO */
/*
- * Further Chip level information.
+ *
*/
static void
-Mach64ChipIDInfo(ATIPtr pATI)
+Mach64BusType(ATIPtr pATI)
{
- /* Get some revision data */
- switch (pATI->Chip) {
- case ATI_CHIP_88800GX:
- switch (pATI->PCIInfo->chipRev) {
- case 0x00:
- pATI->Chip = ATI_CHIP_88800GXC;
- break;
- case 0x01:
- pATI->Chip = ATI_CHIP_88800GXD;
- break;
- case 0x02:
- pATI->Chip = ATI_CHIP_88800GXE;
- break;
- case 0x03:
- pATI->Chip = ATI_CHIP_88800GXF;
- default:
- pATI->Chip = ATI_CHIP_88800GX;
- break;
- }
- break;
- case ATI_CHIP_264VT:
- if ((pATI->PCIInfo->chipRev & GetBits(CFG_CHIP_VERSION, CFG_CHIP_REV)))
- pATI->Chip = ATI_CHIP_264VTB;
- else
- pATI->Chip = ATI_CHIP_264VT;
-
- break;
- case ATI_CHIP_264GT:
- if ((pATI->PCIInfo->chipRev & GetBits(CFG_CHIP_VERSION, CFG_CHIP_REV)))
- pATI->Chip = ATI_CHIP_264GTB;
- else
- pATI->Chip = ATI_CHIP_264GT;
- break;
- default:
- break;
- }
-
/* Bus? */
switch (pATI->PCIInfo->chipType) {
case PCI_CHIP_MACH64GX:
case PCI_CHIP_MACH64CX:
- /* we have no idea here */
+#ifndef AVOID_CPIO
+ pATI->BusType = GetBits(inr(CONFIG_STATUS64_0), CFG_BUS_TYPE);
+ if (pATI->BusType != ATI_BUS_PCI)
+ xf86DrvMsg(pATI->scrnIndex, X_WARNING,
+ "Mach64 GX/CX claims not to be a PCI device.\n");
+#else
+ pATI->BusType = ATI_BUS_PCI; /* Guess. */
+#endif
break;
case PCI_CHIP_MACH64GW:
case PCI_CHIP_MACH64GZ:
@@ -378,19 +344,6 @@ Mach64ChipIDInfo(ATIPtr pATI)
pATI->BusType = ATI_BUS_PCI;
break;
}
-
- /* LCD blending FIFO */
- switch (pATI->Chip) {
- case ATI_CHIP_264LTPRO:
- pATI->LCDVBlendFIFOSize = 800;
- break;
- case ATI_CHIP_264XL:
- case ATI_CHIP_MOBILITY:
- pATI->LCDVBlendFIFOSize = 1024;
- break;
- default:
- break;
- }
}
/*
@@ -1341,6 +1294,20 @@ Mach64PanelInfoGet(ATIPtr pATI)
xf86DrvMsg(pATI->scrnIndex, X_PROBED, "Panel clock is %.3f MHz.\n",
(double)(pATI->LCDClock) / 1000.0);
+
+ /* LCD blending FIFO */
+ switch (pATI->Chip) {
+ case ATI_CHIP_264LTPRO:
+ pATI->LCDVBlendFIFOSize = 800;
+ break;
+ case ATI_CHIP_264XL:
+ case ATI_CHIP_MOBILITY:
+ pATI->LCDVBlendFIFOSize = 1024;
+ break;
+ default:
+ break;
+ }
+
xf86DrvMsg(pATI->scrnIndex, X_INFO, "Using digital flat panel interface%s.\n",
pATI->OptionCRTDisplay ? " to display on both CRT and panel" : "");
return TRUE;
@@ -1604,7 +1571,6 @@ ATIPreInit(ScrnInfoPtr pScreenInfo, int flags)
xfree(pEntity);
pATI->Chip = pEntity->chipset;
- Mach64ChipIDInfo(pATI);
Mach64IOSetup(pATI);
@@ -1617,6 +1583,8 @@ ATIPreInit(ScrnInfoPtr pScreenInfo, int flags)
return FALSE;
}
+ Mach64BusType(pATI);
+
#ifndef AVOID_CPIO
if (pATI->IsVGA)
ATIClaimVGAResources(pATI);