atichip.c revision 32b578d3
1/* 2 * Copyright 1997 through 2004 by Marc Aurele La France (TSI @ UQV), tsi@xfree86.org 3 * 4 * Permission to use, copy, modify, distribute, and sell this software and its 5 * documentation for any purpose is hereby granted without fee, provided that 6 * the above copyright notice appear in all copies and that both that copyright 7 * notice and this permission notice appear in supporting documentation, and 8 * that the name of Marc Aurele La France not be used in advertising or 9 * publicity pertaining to distribution of the software without specific, 10 * written prior permission. Marc Aurele La France makes no representations 11 * about the suitability of this software for any purpose. It is provided 12 * "as-is" without express or implied warranty. 13 * 14 * MARC AURELE LA FRANCE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO 16 * EVENT SHALL MARC AURELE LA FRANCE BE LIABLE FOR ANY SPECIAL, INDIRECT OR 17 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 18 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 19 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 20 * PERFORMANCE OF THIS SOFTWARE. 21 */ 22 23#ifdef HAVE_CONFIG_H 24#include "config.h" 25#endif 26 27#include "ati.h" 28#include "atibus.h" 29#include "atichip.h" 30#include "atimach64io.h" 31#include "atimach64version.h" 32 33const char *ATIFoundryNames[] = 34 { "SGS", "NEC", "KCS", "UMC", "TSMC", "5", "6", "UMC" }; 35 36/* 37 * ATIMach64ChipID -- 38 * 39 * Set variables whose value is dependent upon a Mach64's CONFIG_CHIP_ID 40 * register. 41 */ 42void 43ATIMach64ChipID 44( 45 ATIPtr pATI, 46 const CARD16 ExpectedChipType 47) 48{ 49 pATI->config_chip_id = inr(CONFIG_CHIP_ID); 50 pATI->ChipType = GetBits(pATI->config_chip_id, CFG_CHIP_TYPE); 51 pATI->ChipClass = GetBits(pATI->config_chip_id, CFG_CHIP_CLASS); 52 pATI->ChipRev = GetBits(pATI->config_chip_id, CFG_CHIP_REV); 53 pATI->ChipVersion = GetBits(pATI->config_chip_id, CFG_CHIP_VERSION); 54 pATI->ChipFoundry = GetBits(pATI->config_chip_id, CFG_CHIP_FOUNDRY); 55 pATI->ChipRevision = GetBits(pATI->config_chip_id, CFG_CHIP_REVISION); 56 switch (pATI->ChipType) 57 { 58 case OldChipID('G', 'X'): 59 pATI->ChipType = OldToNewChipID(pATI->ChipType); 60 case NewChipID('G', 'X'): 61 switch (pATI->ChipRev) 62 { 63 case 0x00U: 64 pATI->Chip = ATI_CHIP_88800GXC; 65 break; 66 67 case 0x01U: 68 pATI->Chip = ATI_CHIP_88800GXD; 69 break; 70 71 case 0x02U: 72 pATI->Chip = ATI_CHIP_88800GXE; 73 break; 74 75 case 0x03U: 76 pATI->Chip = ATI_CHIP_88800GXF; 77 break; 78 79 default: 80 pATI->Chip = ATI_CHIP_88800GX; 81 break; 82 } 83 break; 84 85 case OldChipID('C', 'X'): 86 pATI->ChipType = OldToNewChipID(pATI->ChipType); 87 case NewChipID('C', 'X'): 88 pATI->Chip = ATI_CHIP_88800CX; 89 break; 90 91 case OldChipID('C', 'T'): 92 pATI->ChipType = OldToNewChipID(pATI->ChipType); 93 case NewChipID('C', 'T'): 94 pATI->Chip = ATI_CHIP_264CT; 95 pATI->BusType = ATI_BUS_PCI; 96 break; 97 98 case OldChipID('E', 'T'): 99 pATI->ChipType = OldToNewChipID(pATI->ChipType); 100 case NewChipID('E', 'T'): 101 pATI->Chip = ATI_CHIP_264ET; 102 pATI->BusType = ATI_BUS_PCI; 103 break; 104 105 case OldChipID('V', 'T'): 106 pATI->ChipType = OldToNewChipID(pATI->ChipType); 107 case NewChipID('V', 'T'): 108 pATI->Chip = ATI_CHIP_264VT; 109 pATI->BusType = ATI_BUS_PCI; 110 /* Some early GT's are detected as VT's */ 111 if (ExpectedChipType && (pATI->ChipType != ExpectedChipType)) 112 { 113 if (ExpectedChipType == NewChipID('G', 'T')) 114 pATI->Chip = ATI_CHIP_264GT; 115 else 116 xf86Msg(X_WARNING, 117 MACH64_NAME ": Mach64 chip type probe discrepancy" 118 " detected: PCI=0x%04X; CHIP_ID=0x%04X.\n", 119 ExpectedChipType, pATI->ChipType); 120 } 121 else if (pATI->ChipVersion) 122 pATI->Chip = ATI_CHIP_264VTB; 123 break; 124 125 case OldChipID('G', 'T'): 126 pATI->ChipType = OldToNewChipID(pATI->ChipType); 127 case NewChipID('G', 'T'): 128 pATI->BusType = ATI_BUS_PCI; 129 if (!pATI->ChipVersion) 130 pATI->Chip = ATI_CHIP_264GT; 131 else 132 pATI->Chip = ATI_CHIP_264GTB; 133 break; 134 135 case OldChipID('V', 'U'): 136 pATI->ChipType = OldToNewChipID(pATI->ChipType); 137 case NewChipID('V', 'U'): 138 pATI->Chip = ATI_CHIP_264VT3; 139 pATI->BusType = ATI_BUS_PCI; 140 break; 141 142 case OldChipID('G', 'U'): 143 pATI->ChipType = OldToNewChipID(pATI->ChipType); 144 case NewChipID('G', 'U'): 145 pATI->Chip = ATI_CHIP_264GTDVD; 146 pATI->BusType = ATI_BUS_PCI; 147 break; 148 149 case OldChipID('L', 'G'): 150 pATI->ChipType = OldToNewChipID(pATI->ChipType); 151 case NewChipID('L', 'G'): 152 pATI->Chip = ATI_CHIP_264LT; 153 pATI->BusType = ATI_BUS_PCI; 154 break; 155 156 case OldChipID('V', 'V'): 157 pATI->ChipType = OldToNewChipID(pATI->ChipType); 158 case NewChipID('V', 'V'): 159 pATI->Chip = ATI_CHIP_264VT4; 160 pATI->BusType = ATI_BUS_PCI; 161 break; 162 163 case OldChipID('G', 'V'): 164 case OldChipID('G', 'Y'): 165 pATI->ChipType = OldToNewChipID(pATI->ChipType); 166 case NewChipID('G', 'V'): 167 case NewChipID('G', 'Y'): 168 pATI->Chip = ATI_CHIP_264GT2C; 169 pATI->BusType = ATI_BUS_PCI; 170 break; 171 172 case OldChipID('G', 'W'): 173 case OldChipID('G', 'Z'): 174 pATI->ChipType = OldToNewChipID(pATI->ChipType); 175 case NewChipID('G', 'W'): 176 case NewChipID('G', 'Z'): 177 pATI->Chip = ATI_CHIP_264GT2C; 178 pATI->BusType = ATI_BUS_AGP; 179 break; 180 181 case OldChipID('G', 'I'): 182 case OldChipID('G', 'P'): 183 case OldChipID('G', 'Q'): 184 pATI->ChipType = OldToNewChipID(pATI->ChipType); 185 case NewChipID('G', 'I'): 186 case NewChipID('G', 'P'): 187 case NewChipID('G', 'Q'): 188 pATI->Chip = ATI_CHIP_264GTPRO; 189 pATI->BusType = ATI_BUS_PCI; 190 break; 191 192 case OldChipID('G', 'B'): 193 case OldChipID('G', 'D'): 194 pATI->ChipType = OldToNewChipID(pATI->ChipType); 195 case NewChipID('G', 'B'): 196 case NewChipID('G', 'D'): 197 pATI->Chip = ATI_CHIP_264GTPRO; 198 pATI->BusType = ATI_BUS_AGP; 199 break; 200 201 case OldChipID('L', 'I'): 202 case OldChipID('L', 'P'): 203 case OldChipID('L', 'Q'): 204 pATI->ChipType = OldToNewChipID(pATI->ChipType); 205 case NewChipID('L', 'I'): 206 case NewChipID('L', 'P'): 207 case NewChipID('L', 'Q'): 208 pATI->Chip = ATI_CHIP_264LTPRO; 209 pATI->BusType = ATI_BUS_PCI; 210 pATI->LCDVBlendFIFOSize = 800; 211 break; 212 213 case OldChipID('L', 'B'): 214 case OldChipID('L', 'D'): 215 pATI->ChipType = OldToNewChipID(pATI->ChipType); 216 case NewChipID('L', 'B'): 217 case NewChipID('L', 'D'): 218 pATI->Chip = ATI_CHIP_264LTPRO; 219 pATI->BusType = ATI_BUS_AGP; 220 pATI->LCDVBlendFIFOSize = 800; 221 break; 222 223 case OldChipID('G', 'L'): 224 case OldChipID('G', 'O'): 225 case OldChipID('G', 'R'): 226 case OldChipID('G', 'S'): 227 pATI->ChipType = OldToNewChipID(pATI->ChipType); 228 case NewChipID('G', 'L'): 229 case NewChipID('G', 'O'): 230 case NewChipID('G', 'R'): 231 case NewChipID('G', 'S'): 232 pATI->Chip = ATI_CHIP_264XL; 233 pATI->BusType = ATI_BUS_PCI; 234 pATI->LCDVBlendFIFOSize = 1024; 235 break; 236 237 case OldChipID('G', 'M'): 238 case OldChipID('G', 'N'): 239 pATI->ChipType = OldToNewChipID(pATI->ChipType); 240 case NewChipID('G', 'M'): 241 case NewChipID('G', 'N'): 242 pATI->Chip = ATI_CHIP_264XL; 243 pATI->BusType = ATI_BUS_AGP; 244 pATI->LCDVBlendFIFOSize = 1024; 245 break; 246 247 case OldChipID('L', 'R'): 248 case OldChipID('L', 'S'): 249 pATI->ChipType = OldToNewChipID(pATI->ChipType); 250 case NewChipID('L', 'R'): 251 case NewChipID('L', 'S'): 252 pATI->Chip = ATI_CHIP_MOBILITY; 253 pATI->BusType = ATI_BUS_PCI; 254 pATI->LCDVBlendFIFOSize = 1024; 255 break; 256 257 case OldChipID('L', 'M'): 258 case OldChipID('L', 'N'): 259 pATI->ChipType = OldToNewChipID(pATI->ChipType); 260 case NewChipID('L', 'M'): 261 case NewChipID('L', 'N'): 262 pATI->Chip = ATI_CHIP_MOBILITY; 263 pATI->BusType = ATI_BUS_AGP; 264 pATI->LCDVBlendFIFOSize = 1024; 265 break; 266 267 default: 268 pATI->Chip = ATI_CHIP_Mach64; 269 break; 270 } 271} 272