1 /* 2 * drivers/video/aty/radeon_base.c 3 * 4 * framebuffer driver for ATI Radeon chipset video boards 5 * 6 * Copyright 2003 Ben. Herrenschmidt <benh@kernel.crashing.org> 7 * Copyright 2000 Ani Joshi <ajoshi@kernel.crashing.org> 8 * 9 * i2c bits from Luca Tettamanti <kronos@kronoz.cjb.net> 10 * 11 * Special thanks to ATI DevRel team for their hardware donations. 12 * 13 * ...Insert GPL boilerplate here... 14 * 15 * Significant portions of this driver apdated from XFree86 Radeon 16 * driver which has the following copyright notice: 17 * 18 * Copyright 2000 ATI Technologies Inc., Markham, Ontario, and 19 * VA Linux Systems Inc., Fremont, California. 20 * 21 * All Rights Reserved. 22 * 23 * Permission is hereby granted, free of charge, to any person obtaining 24 * a copy of this software and associated documentation files (the 25 * "Software"), to deal in the Software without restriction, including 26 * without limitation on the rights to use, copy, modify, merge, 27 * publish, distribute, sublicense, and/or sell copies of the Software, 28 * and to permit persons to whom the Software is furnished to do so, 29 * subject to the following conditions: 30 * 31 * The above copyright notice and this permission notice (including the 32 * next paragraph) shall be included in all copies or substantial 33 * portions of the Software. 34 * 35 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 36 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 37 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 38 * NON-INFRINGEMENT. IN NO EVENT SHALL ATI, VA LINUX SYSTEMS AND/OR 39 * THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 40 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 41 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 42 * DEALINGS IN THE SOFTWARE. 43 * 44 * XFree86 driver authors: 45 * 46 * Kevin E. Martin <martin@xfree86.org> 47 * Rickard E. Faith <faith@valinux.com> 48 * Alan Hourihane <alanh@fairlite.demon.co.uk> 49 * 50 */ 51 52 53 #define RADEON_VERSION "0.2.0" 54 55 #include "radeonfb.h" 56 57 #include <linux/aperture.h> 58 #include <linux/module.h> 59 #include <linux/moduleparam.h> 60 #include <linux/kernel.h> 61 #include <linux/errno.h> 62 #include <linux/string.h> 63 #include <linux/ctype.h> 64 #include <linux/mm.h> 65 #include <linux/slab.h> 66 #include <linux/delay.h> 67 #include <linux/time.h> 68 #include <linux/fb.h> 69 #include <linux/ioport.h> 70 #include <linux/init.h> 71 #include <linux/pci.h> 72 #include <linux/vmalloc.h> 73 #include <linux/device.h> 74 75 #include <asm/io.h> 76 #include <linux/uaccess.h> 77 78 #ifdef CONFIG_PPC 79 80 #include "../macmodes.h" 81 82 #ifdef CONFIG_BOOTX_TEXT 83 #include <asm/btext.h> 84 #endif 85 86 #endif /* CONFIG_PPC */ 87 88 #include <video/radeon.h> 89 #include <linux/radeonfb.h> 90 91 #include "../edid.h" // MOVE THAT TO include/video 92 #include "ati_ids.h" 93 94 #define MAX_MAPPED_VRAM (2048*2048*4) 95 #define MIN_MAPPED_VRAM (1024*768*1) 96 97 #define CHIP_DEF(id, family, flags) \ 98 { PCI_VENDOR_ID_ATI, id, PCI_ANY_ID, PCI_ANY_ID, 0, 0, (flags) | (CHIP_FAMILY_##family) } 99 100 static const struct pci_device_id radeonfb_pci_table[] = { 101 /* Radeon Xpress 200m */ 102 CHIP_DEF(PCI_CHIP_RS480_5955, RS480, CHIP_HAS_CRTC2 | CHIP_IS_IGP | CHIP_IS_MOBILITY), 103 CHIP_DEF(PCI_CHIP_RS482_5975, RS480, CHIP_HAS_CRTC2 | CHIP_IS_IGP | CHIP_IS_MOBILITY), 104 /* Mobility M6 */ 105 CHIP_DEF(PCI_CHIP_RADEON_LY, RV100, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 106 CHIP_DEF(PCI_CHIP_RADEON_LZ, RV100, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 107 /* Radeon VE/7000 */ 108 CHIP_DEF(PCI_CHIP_RV100_QY, RV100, CHIP_HAS_CRTC2), 109 CHIP_DEF(PCI_CHIP_RV100_QZ, RV100, CHIP_HAS_CRTC2), 110 CHIP_DEF(PCI_CHIP_RN50, RV100, CHIP_HAS_CRTC2), 111 /* Radeon IGP320M (U1) */ 112 CHIP_DEF(PCI_CHIP_RS100_4336, RS100, CHIP_HAS_CRTC2 | CHIP_IS_IGP | CHIP_IS_MOBILITY), 113 /* Radeon IGP320 (A3) */ 114 CHIP_DEF(PCI_CHIP_RS100_4136, RS100, CHIP_HAS_CRTC2 | CHIP_IS_IGP), 115 /* IGP330M/340M/350M (U2) */ 116 CHIP_DEF(PCI_CHIP_RS200_4337, RS200, CHIP_HAS_CRTC2 | CHIP_IS_IGP | CHIP_IS_MOBILITY), 117 /* IGP330/340/350 (A4) */ 118 CHIP_DEF(PCI_CHIP_RS200_4137, RS200, CHIP_HAS_CRTC2 | CHIP_IS_IGP), 119 /* Mobility 7000 IGP */ 120 CHIP_DEF(PCI_CHIP_RS250_4437, RS200, CHIP_HAS_CRTC2 | CHIP_IS_IGP | CHIP_IS_MOBILITY), 121 /* 7000 IGP (A4+) */ 122 CHIP_DEF(PCI_CHIP_RS250_4237, RS200, CHIP_HAS_CRTC2 | CHIP_IS_IGP), 123 /* 8500 AIW */ 124 CHIP_DEF(PCI_CHIP_R200_BB, R200, CHIP_HAS_CRTC2), 125 CHIP_DEF(PCI_CHIP_R200_BC, R200, CHIP_HAS_CRTC2), 126 /* 8700/8800 */ 127 CHIP_DEF(PCI_CHIP_R200_QH, R200, CHIP_HAS_CRTC2), 128 /* 8500 */ 129 CHIP_DEF(PCI_CHIP_R200_QL, R200, CHIP_HAS_CRTC2), 130 /* 9100 */ 131 CHIP_DEF(PCI_CHIP_R200_QM, R200, CHIP_HAS_CRTC2), 132 /* Mobility M7 */ 133 CHIP_DEF(PCI_CHIP_RADEON_LW, RV200, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 134 CHIP_DEF(PCI_CHIP_RADEON_LX, RV200, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 135 /* 7500 */ 136 CHIP_DEF(PCI_CHIP_RV200_QW, RV200, CHIP_HAS_CRTC2), 137 CHIP_DEF(PCI_CHIP_RV200_QX, RV200, CHIP_HAS_CRTC2), 138 /* Mobility M9 */ 139 CHIP_DEF(PCI_CHIP_RV250_Ld, RV250, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 140 CHIP_DEF(PCI_CHIP_RV250_Le, RV250, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 141 CHIP_DEF(PCI_CHIP_RV250_Lf, RV250, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 142 CHIP_DEF(PCI_CHIP_RV250_Lg, RV250, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 143 /* 9000/Pro */ 144 CHIP_DEF(PCI_CHIP_RV250_If, RV250, CHIP_HAS_CRTC2), 145 CHIP_DEF(PCI_CHIP_RV250_Ig, RV250, CHIP_HAS_CRTC2), 146 147 CHIP_DEF(PCI_CHIP_RC410_5A62, RC410, CHIP_HAS_CRTC2 | CHIP_IS_IGP | CHIP_IS_MOBILITY), 148 /* Mobility 9100 IGP (U3) */ 149 CHIP_DEF(PCI_CHIP_RS300_5835, RS300, CHIP_HAS_CRTC2 | CHIP_IS_IGP | CHIP_IS_MOBILITY), 150 CHIP_DEF(PCI_CHIP_RS350_7835, RS300, CHIP_HAS_CRTC2 | CHIP_IS_IGP | CHIP_IS_MOBILITY), 151 /* 9100 IGP (A5) */ 152 CHIP_DEF(PCI_CHIP_RS300_5834, RS300, CHIP_HAS_CRTC2 | CHIP_IS_IGP), 153 CHIP_DEF(PCI_CHIP_RS350_7834, RS300, CHIP_HAS_CRTC2 | CHIP_IS_IGP), 154 /* Mobility 9200 (M9+) */ 155 CHIP_DEF(PCI_CHIP_RV280_5C61, RV280, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 156 CHIP_DEF(PCI_CHIP_RV280_5C63, RV280, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 157 /* 9200 */ 158 CHIP_DEF(PCI_CHIP_RV280_5960, RV280, CHIP_HAS_CRTC2), 159 CHIP_DEF(PCI_CHIP_RV280_5961, RV280, CHIP_HAS_CRTC2), 160 CHIP_DEF(PCI_CHIP_RV280_5962, RV280, CHIP_HAS_CRTC2), 161 CHIP_DEF(PCI_CHIP_RV280_5964, RV280, CHIP_HAS_CRTC2), 162 /* 9500 */ 163 CHIP_DEF(PCI_CHIP_R300_AD, R300, CHIP_HAS_CRTC2), 164 CHIP_DEF(PCI_CHIP_R300_AE, R300, CHIP_HAS_CRTC2), 165 /* 9600TX / FireGL Z1 */ 166 CHIP_DEF(PCI_CHIP_R300_AF, R300, CHIP_HAS_CRTC2), 167 CHIP_DEF(PCI_CHIP_R300_AG, R300, CHIP_HAS_CRTC2), 168 /* 9700/9500/Pro/FireGL X1 */ 169 CHIP_DEF(PCI_CHIP_R300_ND, R300, CHIP_HAS_CRTC2), 170 CHIP_DEF(PCI_CHIP_R300_NE, R300, CHIP_HAS_CRTC2), 171 CHIP_DEF(PCI_CHIP_R300_NF, R300, CHIP_HAS_CRTC2), 172 CHIP_DEF(PCI_CHIP_R300_NG, R300, CHIP_HAS_CRTC2), 173 /* Mobility M10/M11 */ 174 CHIP_DEF(PCI_CHIP_RV350_NP, RV350, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 175 CHIP_DEF(PCI_CHIP_RV350_NQ, RV350, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 176 CHIP_DEF(PCI_CHIP_RV350_NR, RV350, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 177 CHIP_DEF(PCI_CHIP_RV350_NS, RV350, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 178 CHIP_DEF(PCI_CHIP_RV350_NT, RV350, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 179 CHIP_DEF(PCI_CHIP_RV350_NV, RV350, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 180 /* 9600/FireGL T2 */ 181 CHIP_DEF(PCI_CHIP_RV350_AP, RV350, CHIP_HAS_CRTC2), 182 CHIP_DEF(PCI_CHIP_RV350_AQ, RV350, CHIP_HAS_CRTC2), 183 CHIP_DEF(PCI_CHIP_RV360_AR, RV350, CHIP_HAS_CRTC2), 184 CHIP_DEF(PCI_CHIP_RV350_AS, RV350, CHIP_HAS_CRTC2), 185 CHIP_DEF(PCI_CHIP_RV350_AT, RV350, CHIP_HAS_CRTC2), 186 CHIP_DEF(PCI_CHIP_RV350_AV, RV350, CHIP_HAS_CRTC2), 187 /* 9800/Pro/FileGL X2 */ 188 CHIP_DEF(PCI_CHIP_R350_AH, R350, CHIP_HAS_CRTC2), 189 CHIP_DEF(PCI_CHIP_R350_AI, R350, CHIP_HAS_CRTC2), 190 CHIP_DEF(PCI_CHIP_R350_AJ, R350, CHIP_HAS_CRTC2), 191 CHIP_DEF(PCI_CHIP_R350_AK, R350, CHIP_HAS_CRTC2), 192 CHIP_DEF(PCI_CHIP_R350_NH, R350, CHIP_HAS_CRTC2), 193 CHIP_DEF(PCI_CHIP_R350_NI, R350, CHIP_HAS_CRTC2), 194 CHIP_DEF(PCI_CHIP_R360_NJ, R350, CHIP_HAS_CRTC2), 195 CHIP_DEF(PCI_CHIP_R350_NK, R350, CHIP_HAS_CRTC2), 196 /* Newer stuff */ 197 CHIP_DEF(PCI_CHIP_RV380_3E50, RV380, CHIP_HAS_CRTC2), 198 CHIP_DEF(PCI_CHIP_RV380_3E54, RV380, CHIP_HAS_CRTC2), 199 CHIP_DEF(PCI_CHIP_RV380_3150, RV380, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 200 CHIP_DEF(PCI_CHIP_RV380_3154, RV380, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 201 CHIP_DEF(PCI_CHIP_RV370_5B60, RV380, CHIP_HAS_CRTC2), 202 CHIP_DEF(PCI_CHIP_RV370_5B62, RV380, CHIP_HAS_CRTC2), 203 CHIP_DEF(PCI_CHIP_RV370_5B63, RV380, CHIP_HAS_CRTC2), 204 CHIP_DEF(PCI_CHIP_RV370_5B64, RV380, CHIP_HAS_CRTC2), 205 CHIP_DEF(PCI_CHIP_RV370_5B65, RV380, CHIP_HAS_CRTC2), 206 CHIP_DEF(PCI_CHIP_RV370_5460, RV380, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 207 CHIP_DEF(PCI_CHIP_RV370_5464, RV380, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 208 CHIP_DEF(PCI_CHIP_R420_JH, R420, CHIP_HAS_CRTC2), 209 CHIP_DEF(PCI_CHIP_R420_JI, R420, CHIP_HAS_CRTC2), 210 CHIP_DEF(PCI_CHIP_R420_JJ, R420, CHIP_HAS_CRTC2), 211 CHIP_DEF(PCI_CHIP_R420_JK, R420, CHIP_HAS_CRTC2), 212 CHIP_DEF(PCI_CHIP_R420_JL, R420, CHIP_HAS_CRTC2), 213 CHIP_DEF(PCI_CHIP_R420_JM, R420, CHIP_HAS_CRTC2), 214 CHIP_DEF(PCI_CHIP_R420_JN, R420, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY), 215 CHIP_DEF(PCI_CHIP_R420_JP, R420, CHIP_HAS_CRTC2), 216 CHIP_DEF(PCI_CHIP_R423_UH, R420, CHIP_HAS_CRTC2), 217 CHIP_DEF(PCI_CHIP_R423_UI, R420, CHIP_HAS_CRTC2), 218 CHIP_DEF(PCI_CHIP_R423_UJ, R420, CHIP_HAS_CRTC2), 219 CHIP_DEF(PCI_CHIP_R423_UK, R420, CHIP_HAS_CRTC2), 220 CHIP_DEF(PCI_CHIP_R423_UQ, R420, CHIP_HAS_CRTC2), 221 CHIP_DEF(PCI_CHIP_R423_UR, R420, CHIP_HAS_CRTC2), 222 CHIP_DEF(PCI_CHIP_R423_UT, R420, CHIP_HAS_CRTC2), 223 CHIP_DEF(PCI_CHIP_R423_5D57, R420, CHIP_HAS_CRTC2), 224 /* Original Radeon/7200 */ 225 CHIP_DEF(PCI_CHIP_RADEON_QD, RADEON, 0), 226 CHIP_DEF(PCI_CHIP_RADEON_QE, RADEON, 0), 227 CHIP_DEF(PCI_CHIP_RADEON_QF, RADEON, 0), 228 CHIP_DEF(PCI_CHIP_RADEON_QG, RADEON, 0), 229 { 0, } 230 }; 231 MODULE_DEVICE_TABLE(pci, radeonfb_pci_table); 232 233 234 typedef struct { 235 u16 reg; 236 u32 val; 237 } reg_val; 238 239 240 /* these common regs are cleared before mode setting so they do not 241 * interfere with anything 242 */ 243 static reg_val common_regs[] = { 244 { OVR_CLR, 0 }, 245 { OVR_WID_LEFT_RIGHT, 0 }, 246 { OVR_WID_TOP_BOTTOM, 0 }, 247 { OV0_SCALE_CNTL, 0 }, 248 { SUBPIC_CNTL, 0 }, 249 { VIPH_CONTROL, 0 }, 250 { I2C_CNTL_1, 0 }, 251 { GEN_INT_CNTL, 0 }, 252 { CAP0_TRIG_CNTL, 0 }, 253 { CAP1_TRIG_CNTL, 0 }, 254 }; 255 256 /* 257 * globals 258 */ 259 260 static char *mode_option; 261 static char *monitor_layout; 262 static bool noaccel = 0; 263 static int default_dynclk = -2; 264 static bool nomodeset = 0; 265 static bool ignore_edid = 0; 266 static bool mirror = 0; 267 static int panel_yres = 0; 268 static bool force_dfp = 0; 269 static bool force_measure_pll = 0; 270 static bool nomtrr = 0; 271 static bool force_sleep; 272 static bool ignore_devlist; 273 static int backlight = IS_BUILTIN(CONFIG_PMAC_BACKLIGHT); 274 275 /* Note about this function: we have some rare cases where we must not schedule, 276 * this typically happen with our special "wake up early" hook which allows us to 277 * wake up the graphic chip (and thus get the console back) before everything else 278 * on some machines that support that mechanism. At this point, interrupts are off 279 * and scheduling is not permitted 280 */ 281 void _radeon_msleep(struct radeonfb_info *rinfo, unsigned long ms) 282 { 283 if (rinfo->no_schedule || oops_in_progress) 284 mdelay(ms); 285 else 286 msleep(ms); 287 } 288 289 void radeon_pll_errata_after_index_slow(struct radeonfb_info *rinfo) 290 { 291 /* Called if (rinfo->errata & CHIP_ERRATA_PLL_DUMMYREADS) is set */ 292 (void)INREG(CLOCK_CNTL_DATA); 293 (void)INREG(CRTC_GEN_CNTL); 294 } 295 296 void radeon_pll_errata_after_data_slow(struct radeonfb_info *rinfo) 297 { 298 if (rinfo->errata & CHIP_ERRATA_PLL_DELAY) { 299 /* we can't deal with posted writes here ... */ 300 _radeon_msleep(rinfo, 5); 301 } 302 if (rinfo->errata & CHIP_ERRATA_R300_CG) { 303 u32 save, tmp; 304 save = INREG(CLOCK_CNTL_INDEX); 305 tmp = save & ~(0x3f | PLL_WR_EN); 306 OUTREG(CLOCK_CNTL_INDEX, tmp); 307 tmp = INREG(CLOCK_CNTL_DATA); 308 OUTREG(CLOCK_CNTL_INDEX, save); 309 } 310 } 311 312 void _OUTREGP(struct radeonfb_info *rinfo, u32 addr, u32 val, u32 mask) 313 { 314 unsigned long flags; 315 unsigned int tmp; 316 317 spin_lock_irqsave(&rinfo->reg_lock, flags); 318 tmp = INREG(addr); 319 tmp &= (mask); 320 tmp |= (val); 321 OUTREG(addr, tmp); 322 spin_unlock_irqrestore(&rinfo->reg_lock, flags); 323 } 324 325 u32 __INPLL(struct radeonfb_info *rinfo, u32 addr) 326 { 327 u32 data; 328 329 OUTREG8(CLOCK_CNTL_INDEX, addr & 0x0000003f); 330 radeon_pll_errata_after_index(rinfo); 331 data = INREG(CLOCK_CNTL_DATA); 332 radeon_pll_errata_after_data(rinfo); 333 return data; 334 } 335 336 void __OUTPLL(struct radeonfb_info *rinfo, unsigned int index, u32 val) 337 { 338 OUTREG8(CLOCK_CNTL_INDEX, (index & 0x0000003f) | 0x00000080); 339 radeon_pll_errata_after_index(rinfo); 340 OUTREG(CLOCK_CNTL_DATA, val); 341 radeon_pll_errata_after_data(rinfo); 342 } 343 344 void __OUTPLLP(struct radeonfb_info *rinfo, unsigned int index, 345 u32 val, u32 mask) 346 { 347 unsigned int tmp; 348 349 tmp = __INPLL(rinfo, index); 350 tmp &= (mask); 351 tmp |= (val); 352 __OUTPLL(rinfo, index, tmp); 353 } 354 355 void _radeon_fifo_wait(struct radeonfb_info *rinfo, int entries) 356 { 357 int i; 358 359 for (i=0; i<2000000; i++) { 360 if ((INREG(RBBM_STATUS) & 0x7f) >= entries) 361 return; 362 udelay(1); 363 } 364 printk(KERN_ERR "radeonfb: FIFO Timeout !\n"); 365 } 366 367 void radeon_engine_flush(struct radeonfb_info *rinfo) 368 { 369 int i; 370 371 /* Initiate flush */ 372 OUTREGP(DSTCACHE_CTLSTAT, RB2D_DC_FLUSH_ALL, 373 ~RB2D_DC_FLUSH_ALL); 374 375 /* Ensure FIFO is empty, ie, make sure the flush commands 376 * has reached the cache 377 */ 378 _radeon_fifo_wait(rinfo, 64); 379 380 /* Wait for the flush to complete */ 381 for (i=0; i < 2000000; i++) { 382 if (!(INREG(DSTCACHE_CTLSTAT) & RB2D_DC_BUSY)) 383 return; 384 udelay(1); 385 } 386 printk(KERN_ERR "radeonfb: Flush Timeout !\n"); 387 } 388 389 void _radeon_engine_idle(struct radeonfb_info *rinfo) 390 { 391 int i; 392 393 /* ensure FIFO is empty before waiting for idle */ 394 _radeon_fifo_wait(rinfo, 64); 395 396 for (i=0; i<2000000; i++) { 397 if (((INREG(RBBM_STATUS) & GUI_ACTIVE)) == 0) { 398 radeon_engine_flush(rinfo); 399 return; 400 } 401 udelay(1); 402 } 403 printk(KERN_ERR "radeonfb: Idle Timeout !\n"); 404 } 405 406 407 408 static void radeon_unmap_ROM(struct radeonfb_info *rinfo, struct pci_dev *dev) 409 { 410 if (!rinfo->bios_seg) 411 return; 412 pci_unmap_rom(dev, rinfo->bios_seg); 413 } 414 415 static int radeon_map_ROM(struct radeonfb_info *rinfo, struct pci_dev *dev) 416 { 417 void __iomem *rom; 418 u16 dptr; 419 u8 rom_type; 420 size_t rom_size; 421 422 /* If this is a primary card, there is a shadow copy of the 423 * ROM somewhere in the first meg. We will just ignore the copy 424 * and use the ROM directly. 425 */ 426 427 /* Fix from ATI for problem with Radeon hardware not leaving ROM enabled */ 428 unsigned int temp; 429 temp = INREG(MPP_TB_CONFIG); 430 temp &= 0x00ffffffu; 431 temp |= 0x04 << 24; 432 OUTREG(MPP_TB_CONFIG, temp); 433 temp = INREG(MPP_TB_CONFIG); 434 435 rom = pci_map_rom(dev, &rom_size); 436 if (!rom) { 437 printk(KERN_ERR "radeonfb (%s): ROM failed to map\n", 438 pci_name(rinfo->pdev)); 439 return -ENOMEM; 440 } 441 442 rinfo->bios_seg = rom; 443 444 /* Very simple test to make sure it appeared */ 445 if (BIOS_IN16(0) != 0xaa55) { 446 printk(KERN_DEBUG "radeonfb (%s): Invalid ROM signature %x " 447 "should be 0xaa55\n", 448 pci_name(rinfo->pdev), BIOS_IN16(0)); 449 goto failed; 450 } 451 /* Look for the PCI data to check the ROM type */ 452 dptr = BIOS_IN16(0x18); 453 454 /* Check the PCI data signature. If it's wrong, we still assume a normal x86 ROM 455 * for now, until I've verified this works everywhere. The goal here is more 456 * to phase out Open Firmware images. 457 * 458 * Currently, we only look at the first PCI data, we could iteratre and deal with 459 * them all, and we should use fb_bios_start relative to start of image and not 460 * relative start of ROM, but so far, I never found a dual-image ATI card 461 * 462 * typedef struct { 463 * u32 signature; + 0x00 464 * u16 vendor; + 0x04 465 * u16 device; + 0x06 466 * u16 reserved_1; + 0x08 467 * u16 dlen; + 0x0a 468 * u8 drevision; + 0x0c 469 * u8 class_hi; + 0x0d 470 * u16 class_lo; + 0x0e 471 * u16 ilen; + 0x10 472 * u16 irevision; + 0x12 473 * u8 type; + 0x14 474 * u8 indicator; + 0x15 475 * u16 reserved_2; + 0x16 476 * } pci_data_t; 477 */ 478 if (BIOS_IN32(dptr) != (('R' << 24) | ('I' << 16) | ('C' << 8) | 'P')) { 479 printk(KERN_WARNING "radeonfb (%s): PCI DATA signature in ROM" 480 "incorrect: %08x\n", pci_name(rinfo->pdev), BIOS_IN32(dptr)); 481 goto anyway; 482 } 483 rom_type = BIOS_IN8(dptr + 0x14); 484 switch(rom_type) { 485 case 0: 486 printk(KERN_INFO "radeonfb: Found Intel x86 BIOS ROM Image\n"); 487 break; 488 case 1: 489 printk(KERN_INFO "radeonfb: Found Open Firmware ROM Image\n"); 490 goto failed; 491 case 2: 492 printk(KERN_INFO "radeonfb: Found HP PA-RISC ROM Image\n"); 493 goto failed; 494 default: 495 printk(KERN_INFO "radeonfb: Found unknown type %d ROM Image\n", rom_type); 496 goto failed; 497 } 498 anyway: 499 /* Locate the flat panel infos, do some sanity checking !!! */ 500 rinfo->fp_bios_start = BIOS_IN16(0x48); 501 return 0; 502 503 failed: 504 rinfo->bios_seg = NULL; 505 radeon_unmap_ROM(rinfo, dev); 506 return -ENXIO; 507 } 508 509 #ifdef CONFIG_X86 510 static int radeon_find_mem_vbios(struct radeonfb_info *rinfo) 511 { 512 /* I simplified this code as we used to miss the signatures in 513 * a lot of case. It's now closer to XFree, we just don't check 514 * for signatures at all... Something better will have to be done 515 * if we end up having conflicts 516 */ 517 u32 segstart; 518 void __iomem *rom_base = NULL; 519 520 for(segstart=0x000c0000; segstart<0x000f0000; segstart+=0x00001000) { 521 rom_base = ioremap(segstart, 0x10000); 522 if (rom_base == NULL) 523 return -ENOMEM; 524 if (readb(rom_base) == 0x55 && readb(rom_base + 1) == 0xaa) 525 break; 526 iounmap(rom_base); 527 rom_base = NULL; 528 } 529 if (rom_base == NULL) 530 return -ENXIO; 531 532 /* Locate the flat panel infos, do some sanity checking !!! */ 533 rinfo->bios_seg = rom_base; 534 rinfo->fp_bios_start = BIOS_IN16(0x48); 535 536 return 0; 537 } 538 #endif 539 540 #if defined(CONFIG_PPC) || defined(CONFIG_SPARC) 541 /* 542 * Read XTAL (ref clock), SCLK and MCLK from Open Firmware device 543 * tree. Hopefully, ATI OF driver is kind enough to fill these 544 */ 545 static int radeon_read_xtal_OF(struct radeonfb_info *rinfo) 546 { 547 struct device_node *dp = rinfo->of_node; 548 const u32 *val; 549 550 if (dp == NULL) 551 return -ENODEV; 552 val = of_get_property(dp, "ATY,RefCLK", NULL); 553 if (!val || !*val) { 554 printk(KERN_WARNING "radeonfb: No ATY,RefCLK property !\n"); 555 return -EINVAL; 556 } 557 558 rinfo->pll.ref_clk = (*val) / 10; 559 560 val = of_get_property(dp, "ATY,SCLK", NULL); 561 if (val && *val) 562 rinfo->pll.sclk = (*val) / 10; 563 564 val = of_get_property(dp, "ATY,MCLK", NULL); 565 if (val && *val) 566 rinfo->pll.mclk = (*val) / 10; 567 568 return 0; 569 } 570 #endif /* CONFIG_PPC || CONFIG_SPARC */ 571 572 /* 573 * Read PLL infos from chip registers 574 */ 575 static int radeon_probe_pll_params(struct radeonfb_info *rinfo) 576 { 577 unsigned char ppll_div_sel; 578 unsigned Ns, Nm, M; 579 unsigned sclk, mclk, tmp, ref_div; 580 int hTotal, vTotal, num, denom, m, n; 581 unsigned long long hz, vclk; 582 long xtal; 583 ktime_t start_time, stop_time; 584 u64 total_usecs; 585 int i; 586 587 /* Ugh, we cut interrupts, bad bad bad, but we want some precision 588 * here, so... --BenH 589 */ 590 591 /* Flush PCI buffers ? */ 592 tmp = INREG16(DEVICE_ID); 593 594 local_irq_disable(); 595 596 for(i=0; i<1000000; i++) 597 if (((INREG(CRTC_VLINE_CRNT_VLINE) >> 16) & 0x3ff) == 0) 598 break; 599 600 start_time = ktime_get(); 601 602 for(i=0; i<1000000; i++) 603 if (((INREG(CRTC_VLINE_CRNT_VLINE) >> 16) & 0x3ff) != 0) 604 break; 605 606 for(i=0; i<1000000; i++) 607 if (((INREG(CRTC_VLINE_CRNT_VLINE) >> 16) & 0x3ff) == 0) 608 break; 609 610 stop_time = ktime_get(); 611 612 local_irq_enable(); 613 614 total_usecs = ktime_us_delta(stop_time, start_time); 615 if (total_usecs >= 10 * USEC_PER_SEC || total_usecs == 0) 616 return -1; 617 hz = USEC_PER_SEC/(u32)total_usecs; 618 619 hTotal = ((INREG(CRTC_H_TOTAL_DISP) & 0x1ff) + 1) * 8; 620 vTotal = ((INREG(CRTC_V_TOTAL_DISP) & 0x3ff) + 1); 621 vclk = (long long)hTotal * (long long)vTotal * hz; 622 623 switch((INPLL(PPLL_REF_DIV) & 0x30000) >> 16) { 624 case 0: 625 default: 626 num = 1; 627 denom = 1; 628 break; 629 case 1: 630 n = ((INPLL(M_SPLL_REF_FB_DIV) >> 16) & 0xff); 631 m = (INPLL(M_SPLL_REF_FB_DIV) & 0xff); 632 num = 2*n; 633 denom = 2*m; 634 break; 635 case 2: 636 n = ((INPLL(M_SPLL_REF_FB_DIV) >> 8) & 0xff); 637 m = (INPLL(M_SPLL_REF_FB_DIV) & 0xff); 638 num = 2*n; 639 denom = 2*m; 640 break; 641 } 642 643 ppll_div_sel = INREG8(CLOCK_CNTL_INDEX + 1) & 0x3; 644 radeon_pll_errata_after_index(rinfo); 645 646 n = (INPLL(PPLL_DIV_0 + ppll_div_sel) & 0x7ff); 647 m = (INPLL(PPLL_REF_DIV) & 0x3ff); 648 649 num *= n; 650 denom *= m; 651 652 switch ((INPLL(PPLL_DIV_0 + ppll_div_sel) >> 16) & 0x7) { 653 case 1: 654 denom *= 2; 655 break; 656 case 2: 657 denom *= 4; 658 break; 659 case 3: 660 denom *= 8; 661 break; 662 case 4: 663 denom *= 3; 664 break; 665 case 6: 666 denom *= 6; 667 break; 668 case 7: 669 denom *= 12; 670 break; 671 } 672 673 vclk *= denom; 674 do_div(vclk, 1000 * num); 675 xtal = vclk; 676 677 if ((xtal > 26900) && (xtal < 27100)) 678 xtal = 2700; 679 else if ((xtal > 14200) && (xtal < 14400)) 680 xtal = 1432; 681 else if ((xtal > 29400) && (xtal < 29600)) 682 xtal = 2950; 683 else { 684 printk(KERN_WARNING "xtal calculation failed: %ld\n", xtal); 685 return -1; 686 } 687 688 tmp = INPLL(M_SPLL_REF_FB_DIV); 689 ref_div = INPLL(PPLL_REF_DIV) & 0x3ff; 690 691 Ns = (tmp & 0xff0000) >> 16; 692 Nm = (tmp & 0xff00) >> 8; 693 M = (tmp & 0xff); 694 sclk = round_div((2 * Ns * xtal), (2 * M)); 695 mclk = round_div((2 * Nm * xtal), (2 * M)); 696 697 /* we're done, hopefully these are sane values */ 698 rinfo->pll.ref_clk = xtal; 699 rinfo->pll.ref_div = ref_div; 700 rinfo->pll.sclk = sclk; 701 rinfo->pll.mclk = mclk; 702 703 return 0; 704 } 705 706 /* 707 * Retrieve PLL infos by different means (BIOS, Open Firmware, register probing...) 708 */ 709 static void radeon_get_pllinfo(struct radeonfb_info *rinfo) 710 { 711 /* 712 * In the case nothing works, these are defaults; they are mostly 713 * incomplete, however. It does provide ppll_max and _min values 714 * even for most other methods, however. 715 */ 716 switch (rinfo->chipset) { 717 case PCI_DEVICE_ID_ATI_RADEON_QW: 718 case PCI_DEVICE_ID_ATI_RADEON_QX: 719 rinfo->pll.ppll_max = 35000; 720 rinfo->pll.ppll_min = 12000; 721 rinfo->pll.mclk = 23000; 722 rinfo->pll.sclk = 23000; 723 rinfo->pll.ref_clk = 2700; 724 break; 725 case PCI_DEVICE_ID_ATI_RADEON_QL: 726 case PCI_DEVICE_ID_ATI_RADEON_QN: 727 case PCI_DEVICE_ID_ATI_RADEON_QO: 728 case PCI_DEVICE_ID_ATI_RADEON_Ql: 729 case PCI_DEVICE_ID_ATI_RADEON_BB: 730 rinfo->pll.ppll_max = 35000; 731 rinfo->pll.ppll_min = 12000; 732 rinfo->pll.mclk = 27500; 733 rinfo->pll.sclk = 27500; 734 rinfo->pll.ref_clk = 2700; 735 break; 736 case PCI_DEVICE_ID_ATI_RADEON_Id: 737 case PCI_DEVICE_ID_ATI_RADEON_Ie: 738 case PCI_DEVICE_ID_ATI_RADEON_If: 739 case PCI_DEVICE_ID_ATI_RADEON_Ig: 740 rinfo->pll.ppll_max = 35000; 741 rinfo->pll.ppll_min = 12000; 742 rinfo->pll.mclk = 25000; 743 rinfo->pll.sclk = 25000; 744 rinfo->pll.ref_clk = 2700; 745 break; 746 case PCI_DEVICE_ID_ATI_RADEON_ND: 747 case PCI_DEVICE_ID_ATI_RADEON_NE: 748 case PCI_DEVICE_ID_ATI_RADEON_NF: 749 case PCI_DEVICE_ID_ATI_RADEON_NG: 750 rinfo->pll.ppll_max = 40000; 751 rinfo->pll.ppll_min = 20000; 752 rinfo->pll.mclk = 27000; 753 rinfo->pll.sclk = 27000; 754 rinfo->pll.ref_clk = 2700; 755 break; 756 case PCI_DEVICE_ID_ATI_RADEON_QD: 757 case PCI_DEVICE_ID_ATI_RADEON_QE: 758 case PCI_DEVICE_ID_ATI_RADEON_QF: 759 case PCI_DEVICE_ID_ATI_RADEON_QG: 760 default: 761 rinfo->pll.ppll_max = 35000; 762 rinfo->pll.ppll_min = 12000; 763 rinfo->pll.mclk = 16600; 764 rinfo->pll.sclk = 16600; 765 rinfo->pll.ref_clk = 2700; 766 break; 767 } 768 rinfo->pll.ref_div = INPLL(PPLL_REF_DIV) & PPLL_REF_DIV_MASK; 769 770 771 #if defined(CONFIG_PPC) || defined(CONFIG_SPARC) 772 /* 773 * Retrieve PLL infos from Open Firmware first 774 */ 775 if (!force_measure_pll && radeon_read_xtal_OF(rinfo) == 0) { 776 printk(KERN_INFO "radeonfb: Retrieved PLL infos from Open Firmware\n"); 777 goto found; 778 } 779 #endif /* CONFIG_PPC || CONFIG_SPARC */ 780 781 /* 782 * Check out if we have an X86 which gave us some PLL informations 783 * and if yes, retrieve them 784 */ 785 if (!force_measure_pll && rinfo->bios_seg) { 786 u16 pll_info_block = BIOS_IN16(rinfo->fp_bios_start + 0x30); 787 788 rinfo->pll.sclk = BIOS_IN16(pll_info_block + 0x08); 789 rinfo->pll.mclk = BIOS_IN16(pll_info_block + 0x0a); 790 rinfo->pll.ref_clk = BIOS_IN16(pll_info_block + 0x0e); 791 rinfo->pll.ref_div = BIOS_IN16(pll_info_block + 0x10); 792 rinfo->pll.ppll_min = BIOS_IN32(pll_info_block + 0x12); 793 rinfo->pll.ppll_max = BIOS_IN32(pll_info_block + 0x16); 794 795 printk(KERN_INFO "radeonfb: Retrieved PLL infos from BIOS\n"); 796 goto found; 797 } 798 799 /* 800 * We didn't get PLL parameters from either OF or BIOS, we try to 801 * probe them 802 */ 803 if (radeon_probe_pll_params(rinfo) == 0) { 804 printk(KERN_INFO "radeonfb: Retrieved PLL infos from registers\n"); 805 goto found; 806 } 807 808 /* 809 * Fall back to already-set defaults... 810 */ 811 printk(KERN_INFO "radeonfb: Used default PLL infos\n"); 812 813 found: 814 /* 815 * Some methods fail to retrieve SCLK and MCLK values, we apply default 816 * settings in this case (200Mhz). If that really happens often, we 817 * could fetch from registers instead... 818 */ 819 if (rinfo->pll.mclk == 0) 820 rinfo->pll.mclk = 20000; 821 if (rinfo->pll.sclk == 0) 822 rinfo->pll.sclk = 20000; 823 824 printk("radeonfb: Reference=%d.%02d MHz (RefDiv=%d) Memory=%d.%02d Mhz, System=%d.%02d MHz\n", 825 rinfo->pll.ref_clk / 100, rinfo->pll.ref_clk % 100, 826 rinfo->pll.ref_div, 827 rinfo->pll.mclk / 100, rinfo->pll.mclk % 100, 828 rinfo->pll.sclk / 100, rinfo->pll.sclk % 100); 829 printk("radeonfb: PLL min %d max %d\n", rinfo->pll.ppll_min, rinfo->pll.ppll_max); 830 } 831 832 static int radeonfb_check_var (struct fb_var_screeninfo *var, struct fb_info *info) 833 { 834 struct radeonfb_info *rinfo = info->par; 835 struct fb_var_screeninfo v; 836 int nom, den; 837 unsigned int pitch; 838 839 if (radeon_match_mode(rinfo, &v, var)) 840 return -EINVAL; 841 842 switch (v.bits_per_pixel) { 843 case 0 ... 8: 844 v.bits_per_pixel = 8; 845 break; 846 case 9 ... 16: 847 v.bits_per_pixel = 16; 848 break; 849 case 25 ... 32: 850 v.bits_per_pixel = 32; 851 break; 852 default: 853 return -EINVAL; 854 } 855 856 switch (var_to_depth(&v)) { 857 case 8: 858 nom = den = 1; 859 v.red.offset = v.green.offset = v.blue.offset = 0; 860 v.red.length = v.green.length = v.blue.length = 8; 861 v.transp.offset = v.transp.length = 0; 862 break; 863 case 15: 864 nom = 2; 865 den = 1; 866 v.red.offset = 10; 867 v.green.offset = 5; 868 v.blue.offset = 0; 869 v.red.length = v.green.length = v.blue.length = 5; 870 v.transp.offset = v.transp.length = 0; 871 break; 872 case 16: 873 nom = 2; 874 den = 1; 875 v.red.offset = 11; 876 v.green.offset = 5; 877 v.blue.offset = 0; 878 v.red.length = 5; 879 v.green.length = 6; 880 v.blue.length = 5; 881 v.transp.offset = v.transp.length = 0; 882 break; 883 case 24: 884 nom = 4; 885 den = 1; 886 v.red.offset = 16; 887 v.green.offset = 8; 888 v.blue.offset = 0; 889 v.red.length = v.blue.length = v.green.length = 8; 890 v.transp.offset = v.transp.length = 0; 891 break; 892 case 32: 893 nom = 4; 894 den = 1; 895 v.red.offset = 16; 896 v.green.offset = 8; 897 v.blue.offset = 0; 898 v.red.length = v.blue.length = v.green.length = 8; 899 v.transp.offset = 24; 900 v.transp.length = 8; 901 break; 902 default: 903 printk ("radeonfb: mode %dx%dx%d rejected, color depth invalid\n", 904 var->xres, var->yres, var->bits_per_pixel); 905 return -EINVAL; 906 } 907 908 if (v.yres_virtual < v.yres) 909 v.yres_virtual = v.yres; 910 if (v.xres_virtual < v.xres) 911 v.xres_virtual = v.xres; 912 913 914 /* XXX I'm adjusting xres_virtual to the pitch, that may help XFree 915 * with some panels, though I don't quite like this solution 916 */ 917 if (rinfo->info->flags & FBINFO_HWACCEL_DISABLED) { 918 v.xres_virtual = v.xres_virtual & ~7ul; 919 } else { 920 pitch = ((v.xres_virtual * ((v.bits_per_pixel + 1) / 8) + 0x3f) 921 & ~(0x3f)) >> 6; 922 v.xres_virtual = (pitch << 6) / ((v.bits_per_pixel + 1) / 8); 923 } 924 925 if (((v.xres_virtual * v.yres_virtual * nom) / den) > rinfo->mapped_vram) 926 return -EINVAL; 927 928 if (v.xres_virtual < v.xres) 929 v.xres = v.xres_virtual; 930 931 if (v.xoffset > v.xres_virtual - v.xres) 932 v.xoffset = v.xres_virtual - v.xres - 1; 933 934 if (v.yoffset > v.yres_virtual - v.yres) 935 v.yoffset = v.yres_virtual - v.yres - 1; 936 937 v.red.msb_right = v.green.msb_right = v.blue.msb_right = 938 v.transp.offset = v.transp.length = 939 v.transp.msb_right = 0; 940 941 memcpy(var, &v, sizeof(v)); 942 943 return 0; 944 } 945 946 947 static int radeonfb_pan_display (struct fb_var_screeninfo *var, 948 struct fb_info *info) 949 { 950 struct radeonfb_info *rinfo = info->par; 951 952 if ((var->xoffset + info->var.xres > info->var.xres_virtual) 953 || (var->yoffset + info->var.yres > info->var.yres_virtual)) 954 return -EINVAL; 955 956 if (rinfo->asleep) 957 return 0; 958 959 radeon_fifo_wait(2); 960 OUTREG(CRTC_OFFSET, (var->yoffset * info->fix.line_length + 961 var->xoffset * info->var.bits_per_pixel / 8) & ~7); 962 return 0; 963 } 964 965 966 static int radeonfb_ioctl (struct fb_info *info, unsigned int cmd, 967 unsigned long arg) 968 { 969 struct radeonfb_info *rinfo = info->par; 970 unsigned int tmp; 971 u32 value = 0; 972 int rc; 973 974 switch (cmd) { 975 /* 976 * TODO: set mirror accordingly for non-Mobility chipsets with 2 CRTC's 977 * and do something better using 2nd CRTC instead of just hackish 978 * routing to second output 979 */ 980 case FBIO_RADEON_SET_MIRROR: 981 if (!rinfo->is_mobility) 982 return -EINVAL; 983 984 rc = get_user(value, (__u32 __user *)arg); 985 986 if (rc) 987 return rc; 988 989 radeon_fifo_wait(2); 990 if (value & 0x01) { 991 tmp = INREG(LVDS_GEN_CNTL); 992 993 tmp |= (LVDS_ON | LVDS_BLON); 994 } else { 995 tmp = INREG(LVDS_GEN_CNTL); 996 997 tmp &= ~(LVDS_ON | LVDS_BLON); 998 } 999 1000 OUTREG(LVDS_GEN_CNTL, tmp); 1001 1002 if (value & 0x02) { 1003 tmp = INREG(CRTC_EXT_CNTL); 1004 tmp |= CRTC_CRT_ON; 1005 1006 mirror = 1; 1007 } else { 1008 tmp = INREG(CRTC_EXT_CNTL); 1009 tmp &= ~CRTC_CRT_ON; 1010 1011 mirror = 0; 1012 } 1013 1014 OUTREG(CRTC_EXT_CNTL, tmp); 1015 1016 return 0; 1017 case FBIO_RADEON_GET_MIRROR: 1018 if (!rinfo->is_mobility) 1019 return -EINVAL; 1020 1021 tmp = INREG(LVDS_GEN_CNTL); 1022 if ((LVDS_ON | LVDS_BLON) & tmp) 1023 value |= 0x01; 1024 1025 tmp = INREG(CRTC_EXT_CNTL); 1026 if (CRTC_CRT_ON & tmp) 1027 value |= 0x02; 1028 1029 return put_user(value, (__u32 __user *)arg); 1030 default: 1031 return -EINVAL; 1032 } 1033 1034 return -EINVAL; 1035 } 1036 1037 1038 int radeon_screen_blank(struct radeonfb_info *rinfo, int blank, int mode_switch) 1039 { 1040 u32 val; 1041 u32 tmp_pix_clks; 1042 int unblank = 0; 1043 1044 if (rinfo->lock_blank) 1045 return 0; 1046 1047 radeon_engine_idle(); 1048 1049 val = INREG(CRTC_EXT_CNTL); 1050 val &= ~(CRTC_DISPLAY_DIS | CRTC_HSYNC_DIS | 1051 CRTC_VSYNC_DIS); 1052 switch (blank) { 1053 case FB_BLANK_VSYNC_SUSPEND: 1054 val |= (CRTC_DISPLAY_DIS | CRTC_VSYNC_DIS); 1055 break; 1056 case FB_BLANK_HSYNC_SUSPEND: 1057 val |= (CRTC_DISPLAY_DIS | CRTC_HSYNC_DIS); 1058 break; 1059 case FB_BLANK_POWERDOWN: 1060 val |= (CRTC_DISPLAY_DIS | CRTC_VSYNC_DIS | 1061 CRTC_HSYNC_DIS); 1062 break; 1063 case FB_BLANK_NORMAL: 1064 val |= CRTC_DISPLAY_DIS; 1065 break; 1066 case FB_BLANK_UNBLANK: 1067 default: 1068 unblank = 1; 1069 } 1070 OUTREG(CRTC_EXT_CNTL, val); 1071 1072 1073 switch (rinfo->mon1_type) { 1074 case MT_DFP: 1075 if (unblank) 1076 OUTREGP(FP_GEN_CNTL, (FP_FPON | FP_TMDS_EN), 1077 ~(FP_FPON | FP_TMDS_EN)); 1078 else { 1079 if (mode_switch || blank == FB_BLANK_NORMAL) 1080 break; 1081 OUTREGP(FP_GEN_CNTL, 0, ~(FP_FPON | FP_TMDS_EN)); 1082 } 1083 break; 1084 case MT_LCD: 1085 del_timer_sync(&rinfo->lvds_timer); 1086 val = INREG(LVDS_GEN_CNTL); 1087 if (unblank) { 1088 u32 target_val = (val & ~LVDS_DISPLAY_DIS) | LVDS_BLON | LVDS_ON 1089 | LVDS_EN | (rinfo->init_state.lvds_gen_cntl 1090 & (LVDS_DIGON | LVDS_BL_MOD_EN)); 1091 if ((val ^ target_val) == LVDS_DISPLAY_DIS) 1092 OUTREG(LVDS_GEN_CNTL, target_val); 1093 else if ((val ^ target_val) != 0) { 1094 OUTREG(LVDS_GEN_CNTL, target_val 1095 & ~(LVDS_ON | LVDS_BL_MOD_EN)); 1096 rinfo->init_state.lvds_gen_cntl &= ~LVDS_STATE_MASK; 1097 rinfo->init_state.lvds_gen_cntl |= 1098 target_val & LVDS_STATE_MASK; 1099 if (mode_switch) { 1100 radeon_msleep(rinfo->panel_info.pwr_delay); 1101 OUTREG(LVDS_GEN_CNTL, target_val); 1102 } 1103 else { 1104 rinfo->pending_lvds_gen_cntl = target_val; 1105 mod_timer(&rinfo->lvds_timer, 1106 jiffies + 1107 msecs_to_jiffies(rinfo->panel_info.pwr_delay)); 1108 } 1109 } 1110 } else { 1111 val |= LVDS_DISPLAY_DIS; 1112 OUTREG(LVDS_GEN_CNTL, val); 1113 1114 /* We don't do a full switch-off on a simple mode switch */ 1115 if (mode_switch || blank == FB_BLANK_NORMAL) 1116 break; 1117 1118 /* Asic bug, when turning off LVDS_ON, we have to make sure 1119 * RADEON_PIXCLK_LVDS_ALWAYS_ON bit is off 1120 */ 1121 tmp_pix_clks = INPLL(PIXCLKS_CNTL); 1122 if (rinfo->is_mobility || rinfo->is_IGP) 1123 OUTPLLP(PIXCLKS_CNTL, 0, ~PIXCLK_LVDS_ALWAYS_ONb); 1124 val &= ~(LVDS_BL_MOD_EN); 1125 OUTREG(LVDS_GEN_CNTL, val); 1126 udelay(100); 1127 val &= ~(LVDS_ON | LVDS_EN); 1128 OUTREG(LVDS_GEN_CNTL, val); 1129 val &= ~LVDS_DIGON; 1130 rinfo->pending_lvds_gen_cntl = val; 1131 mod_timer(&rinfo->lvds_timer, 1132 jiffies + 1133 msecs_to_jiffies(rinfo->panel_info.pwr_delay)); 1134 rinfo->init_state.lvds_gen_cntl &= ~LVDS_STATE_MASK; 1135 rinfo->init_state.lvds_gen_cntl |= val & LVDS_STATE_MASK; 1136 if (rinfo->is_mobility || rinfo->is_IGP) 1137 OUTPLL(PIXCLKS_CNTL, tmp_pix_clks); 1138 } 1139 break; 1140 case MT_CRT: 1141 // todo: powerdown DAC 1142 default: 1143 break; 1144 } 1145 1146 return 0; 1147 } 1148 1149 static int radeonfb_blank (int blank, struct fb_info *info) 1150 { 1151 struct radeonfb_info *rinfo = info->par; 1152 1153 if (rinfo->asleep) 1154 return 0; 1155 1156 return radeon_screen_blank(rinfo, blank, 0); 1157 } 1158 1159 static int radeon_setcolreg (unsigned regno, unsigned red, unsigned green, 1160 unsigned blue, unsigned transp, 1161 struct radeonfb_info *rinfo) 1162 { 1163 u32 pindex; 1164 unsigned int i; 1165 1166 1167 if (regno > 255) 1168 return -EINVAL; 1169 1170 red >>= 8; 1171 green >>= 8; 1172 blue >>= 8; 1173 rinfo->palette[regno].red = red; 1174 rinfo->palette[regno].green = green; 1175 rinfo->palette[regno].blue = blue; 1176 1177 /* default */ 1178 pindex = regno; 1179 1180 if (!rinfo->asleep) { 1181 radeon_fifo_wait(9); 1182 1183 if (rinfo->bpp == 16) { 1184 pindex = regno * 8; 1185 1186 if (rinfo->depth == 16 && regno > 63) 1187 return -EINVAL; 1188 if (rinfo->depth == 15 && regno > 31) 1189 return -EINVAL; 1190 1191 /* For 565, the green component is mixed one order 1192 * below 1193 */ 1194 if (rinfo->depth == 16) { 1195 OUTREG(PALETTE_INDEX, pindex>>1); 1196 OUTREG(PALETTE_DATA, 1197 (rinfo->palette[regno>>1].red << 16) | 1198 (green << 8) | 1199 (rinfo->palette[regno>>1].blue)); 1200 green = rinfo->palette[regno<<1].green; 1201 } 1202 } 1203 1204 if (rinfo->depth != 16 || regno < 32) { 1205 OUTREG(PALETTE_INDEX, pindex); 1206 OUTREG(PALETTE_DATA, (red << 16) | 1207 (green << 8) | blue); 1208 } 1209 } 1210 if (regno < 16) { 1211 u32 *pal = rinfo->info->pseudo_palette; 1212 switch (rinfo->depth) { 1213 case 15: 1214 pal[regno] = (regno << 10) | (regno << 5) | regno; 1215 break; 1216 case 16: 1217 pal[regno] = (regno << 11) | (regno << 5) | regno; 1218 break; 1219 case 24: 1220 pal[regno] = (regno << 16) | (regno << 8) | regno; 1221 break; 1222 case 32: 1223 i = (regno << 8) | regno; 1224 pal[regno] = (i << 16) | i; 1225 break; 1226 } 1227 } 1228 return 0; 1229 } 1230 1231 static int radeonfb_setcolreg (unsigned regno, unsigned red, unsigned green, 1232 unsigned blue, unsigned transp, 1233 struct fb_info *info) 1234 { 1235 struct radeonfb_info *rinfo = info->par; 1236 u32 dac_cntl2, vclk_cntl = 0; 1237 int rc; 1238 1239 if (!rinfo->asleep) { 1240 if (rinfo->is_mobility) { 1241 vclk_cntl = INPLL(VCLK_ECP_CNTL); 1242 OUTPLL(VCLK_ECP_CNTL, 1243 vclk_cntl & ~PIXCLK_DAC_ALWAYS_ONb); 1244 } 1245 1246 /* Make sure we are on first palette */ 1247 if (rinfo->has_CRTC2) { 1248 dac_cntl2 = INREG(DAC_CNTL2); 1249 dac_cntl2 &= ~DAC2_PALETTE_ACCESS_CNTL; 1250 OUTREG(DAC_CNTL2, dac_cntl2); 1251 } 1252 } 1253 1254 rc = radeon_setcolreg (regno, red, green, blue, transp, rinfo); 1255 1256 if (!rinfo->asleep && rinfo->is_mobility) 1257 OUTPLL(VCLK_ECP_CNTL, vclk_cntl); 1258 1259 return rc; 1260 } 1261 1262 static int radeonfb_setcmap(struct fb_cmap *cmap, struct fb_info *info) 1263 { 1264 struct radeonfb_info *rinfo = info->par; 1265 u16 *red, *green, *blue, *transp; 1266 u32 dac_cntl2, vclk_cntl = 0; 1267 int i, start, rc = 0; 1268 1269 if (!rinfo->asleep) { 1270 if (rinfo->is_mobility) { 1271 vclk_cntl = INPLL(VCLK_ECP_CNTL); 1272 OUTPLL(VCLK_ECP_CNTL, 1273 vclk_cntl & ~PIXCLK_DAC_ALWAYS_ONb); 1274 } 1275 1276 /* Make sure we are on first palette */ 1277 if (rinfo->has_CRTC2) { 1278 dac_cntl2 = INREG(DAC_CNTL2); 1279 dac_cntl2 &= ~DAC2_PALETTE_ACCESS_CNTL; 1280 OUTREG(DAC_CNTL2, dac_cntl2); 1281 } 1282 } 1283 1284 red = cmap->red; 1285 green = cmap->green; 1286 blue = cmap->blue; 1287 transp = cmap->transp; 1288 start = cmap->start; 1289 1290 for (i = 0; i < cmap->len; i++) { 1291 u_int hred, hgreen, hblue, htransp = 0xffff; 1292 1293 hred = *red++; 1294 hgreen = *green++; 1295 hblue = *blue++; 1296 if (transp) 1297 htransp = *transp++; 1298 rc = radeon_setcolreg (start++, hred, hgreen, hblue, htransp, 1299 rinfo); 1300 if (rc) 1301 break; 1302 } 1303 1304 if (!rinfo->asleep && rinfo->is_mobility) 1305 OUTPLL(VCLK_ECP_CNTL, vclk_cntl); 1306 1307 return rc; 1308 } 1309 1310 static void radeon_save_state (struct radeonfb_info *rinfo, 1311 struct radeon_regs *save) 1312 { 1313 /* CRTC regs */ 1314 save->crtc_gen_cntl = INREG(CRTC_GEN_CNTL); 1315 save->crtc_ext_cntl = INREG(CRTC_EXT_CNTL); 1316 save->crtc_more_cntl = INREG(CRTC_MORE_CNTL); 1317 save->dac_cntl = INREG(DAC_CNTL); 1318 save->crtc_h_total_disp = INREG(CRTC_H_TOTAL_DISP); 1319 save->crtc_h_sync_strt_wid = INREG(CRTC_H_SYNC_STRT_WID); 1320 save->crtc_v_total_disp = INREG(CRTC_V_TOTAL_DISP); 1321 save->crtc_v_sync_strt_wid = INREG(CRTC_V_SYNC_STRT_WID); 1322 save->crtc_pitch = INREG(CRTC_PITCH); 1323 save->surface_cntl = INREG(SURFACE_CNTL); 1324 1325 /* FP regs */ 1326 save->fp_crtc_h_total_disp = INREG(FP_CRTC_H_TOTAL_DISP); 1327 save->fp_crtc_v_total_disp = INREG(FP_CRTC_V_TOTAL_DISP); 1328 save->fp_gen_cntl = INREG(FP_GEN_CNTL); 1329 save->fp_h_sync_strt_wid = INREG(FP_H_SYNC_STRT_WID); 1330 save->fp_horz_stretch = INREG(FP_HORZ_STRETCH); 1331 save->fp_v_sync_strt_wid = INREG(FP_V_SYNC_STRT_WID); 1332 save->fp_vert_stretch = INREG(FP_VERT_STRETCH); 1333 save->lvds_gen_cntl = INREG(LVDS_GEN_CNTL); 1334 save->lvds_pll_cntl = INREG(LVDS_PLL_CNTL); 1335 save->tmds_crc = INREG(TMDS_CRC); 1336 save->tmds_transmitter_cntl = INREG(TMDS_TRANSMITTER_CNTL); 1337 save->vclk_ecp_cntl = INPLL(VCLK_ECP_CNTL); 1338 1339 /* PLL regs */ 1340 save->clk_cntl_index = INREG(CLOCK_CNTL_INDEX) & ~0x3f; 1341 radeon_pll_errata_after_index(rinfo); 1342 save->ppll_div_3 = INPLL(PPLL_DIV_3); 1343 save->ppll_ref_div = INPLL(PPLL_REF_DIV); 1344 } 1345 1346 1347 static void radeon_write_pll_regs(struct radeonfb_info *rinfo, struct radeon_regs *mode) 1348 { 1349 int i; 1350 1351 radeon_fifo_wait(20); 1352 1353 /* Workaround from XFree */ 1354 if (rinfo->is_mobility) { 1355 /* A temporal workaround for the occasional blanking on certain laptop 1356 * panels. This appears to related to the PLL divider registers 1357 * (fail to lock?). It occurs even when all dividers are the same 1358 * with their old settings. In this case we really don't need to 1359 * fiddle with PLL registers. By doing this we can avoid the blanking 1360 * problem with some panels. 1361 */ 1362 if ((mode->ppll_ref_div == (INPLL(PPLL_REF_DIV) & PPLL_REF_DIV_MASK)) && 1363 (mode->ppll_div_3 == (INPLL(PPLL_DIV_3) & 1364 (PPLL_POST3_DIV_MASK | PPLL_FB3_DIV_MASK)))) { 1365 /* We still have to force a switch to selected PPLL div thanks to 1366 * an XFree86 driver bug which will switch it away in some cases 1367 * even when using UseFDev */ 1368 OUTREGP(CLOCK_CNTL_INDEX, 1369 mode->clk_cntl_index & PPLL_DIV_SEL_MASK, 1370 ~PPLL_DIV_SEL_MASK); 1371 radeon_pll_errata_after_index(rinfo); 1372 radeon_pll_errata_after_data(rinfo); 1373 return; 1374 } 1375 } 1376 1377 /* Swich VCKL clock input to CPUCLK so it stays fed while PPLL updates*/ 1378 OUTPLLP(VCLK_ECP_CNTL, VCLK_SRC_SEL_CPUCLK, ~VCLK_SRC_SEL_MASK); 1379 1380 /* Reset PPLL & enable atomic update */ 1381 OUTPLLP(PPLL_CNTL, 1382 PPLL_RESET | PPLL_ATOMIC_UPDATE_EN | PPLL_VGA_ATOMIC_UPDATE_EN, 1383 ~(PPLL_RESET | PPLL_ATOMIC_UPDATE_EN | PPLL_VGA_ATOMIC_UPDATE_EN)); 1384 1385 /* Switch to selected PPLL divider */ 1386 OUTREGP(CLOCK_CNTL_INDEX, 1387 mode->clk_cntl_index & PPLL_DIV_SEL_MASK, 1388 ~PPLL_DIV_SEL_MASK); 1389 radeon_pll_errata_after_index(rinfo); 1390 radeon_pll_errata_after_data(rinfo); 1391 1392 /* Set PPLL ref. div */ 1393 if (IS_R300_VARIANT(rinfo) || 1394 rinfo->family == CHIP_FAMILY_RS300 || 1395 rinfo->family == CHIP_FAMILY_RS400 || 1396 rinfo->family == CHIP_FAMILY_RS480) { 1397 if (mode->ppll_ref_div & R300_PPLL_REF_DIV_ACC_MASK) { 1398 /* When restoring console mode, use saved PPLL_REF_DIV 1399 * setting. 1400 */ 1401 OUTPLLP(PPLL_REF_DIV, mode->ppll_ref_div, 0); 1402 } else { 1403 /* R300 uses ref_div_acc field as real ref divider */ 1404 OUTPLLP(PPLL_REF_DIV, 1405 (mode->ppll_ref_div << R300_PPLL_REF_DIV_ACC_SHIFT), 1406 ~R300_PPLL_REF_DIV_ACC_MASK); 1407 } 1408 } else 1409 OUTPLLP(PPLL_REF_DIV, mode->ppll_ref_div, ~PPLL_REF_DIV_MASK); 1410 1411 /* Set PPLL divider 3 & post divider*/ 1412 OUTPLLP(PPLL_DIV_3, mode->ppll_div_3, ~PPLL_FB3_DIV_MASK); 1413 OUTPLLP(PPLL_DIV_3, mode->ppll_div_3, ~PPLL_POST3_DIV_MASK); 1414 1415 /* Write update */ 1416 while (INPLL(PPLL_REF_DIV) & PPLL_ATOMIC_UPDATE_R) 1417 ; 1418 OUTPLLP(PPLL_REF_DIV, PPLL_ATOMIC_UPDATE_W, ~PPLL_ATOMIC_UPDATE_W); 1419 1420 /* Wait read update complete */ 1421 /* FIXME: Certain revisions of R300 can't recover here. Not sure of 1422 the cause yet, but this workaround will mask the problem for now. 1423 Other chips usually will pass at the very first test, so the 1424 workaround shouldn't have any effect on them. */ 1425 for (i = 0; (i < 10000 && INPLL(PPLL_REF_DIV) & PPLL_ATOMIC_UPDATE_R); i++) 1426 ; 1427 1428 OUTPLL(HTOTAL_CNTL, 0); 1429 1430 /* Clear reset & atomic update */ 1431 OUTPLLP(PPLL_CNTL, 0, 1432 ~(PPLL_RESET | PPLL_SLEEP | PPLL_ATOMIC_UPDATE_EN | PPLL_VGA_ATOMIC_UPDATE_EN)); 1433 1434 /* We may want some locking ... oh well */ 1435 radeon_msleep(5); 1436 1437 /* Switch back VCLK source to PPLL */ 1438 OUTPLLP(VCLK_ECP_CNTL, VCLK_SRC_SEL_PPLLCLK, ~VCLK_SRC_SEL_MASK); 1439 } 1440 1441 /* 1442 * Timer function for delayed LVDS panel power up/down 1443 */ 1444 static void radeon_lvds_timer_func(struct timer_list *t) 1445 { 1446 struct radeonfb_info *rinfo = from_timer(rinfo, t, lvds_timer); 1447 1448 radeon_engine_idle(); 1449 1450 OUTREG(LVDS_GEN_CNTL, rinfo->pending_lvds_gen_cntl); 1451 } 1452 1453 /* 1454 * Apply a video mode. This will apply the whole register set, including 1455 * the PLL registers, to the card 1456 */ 1457 void radeon_write_mode (struct radeonfb_info *rinfo, struct radeon_regs *mode, 1458 int regs_only) 1459 { 1460 int i; 1461 int primary_mon = PRIMARY_MONITOR(rinfo); 1462 1463 if (nomodeset) 1464 return; 1465 1466 if (!regs_only) 1467 radeon_screen_blank(rinfo, FB_BLANK_NORMAL, 0); 1468 1469 radeon_fifo_wait(31); 1470 for (i=0; i<10; i++) 1471 OUTREG(common_regs[i].reg, common_regs[i].val); 1472 1473 /* Apply surface registers */ 1474 for (i=0; i<8; i++) { 1475 OUTREG(SURFACE0_LOWER_BOUND + 0x10*i, mode->surf_lower_bound[i]); 1476 OUTREG(SURFACE0_UPPER_BOUND + 0x10*i, mode->surf_upper_bound[i]); 1477 OUTREG(SURFACE0_INFO + 0x10*i, mode->surf_info[i]); 1478 } 1479 1480 OUTREG(CRTC_GEN_CNTL, mode->crtc_gen_cntl); 1481 OUTREGP(CRTC_EXT_CNTL, mode->crtc_ext_cntl, 1482 ~(CRTC_HSYNC_DIS | CRTC_VSYNC_DIS | CRTC_DISPLAY_DIS)); 1483 OUTREG(CRTC_MORE_CNTL, mode->crtc_more_cntl); 1484 OUTREGP(DAC_CNTL, mode->dac_cntl, DAC_RANGE_CNTL | DAC_BLANKING); 1485 OUTREG(CRTC_H_TOTAL_DISP, mode->crtc_h_total_disp); 1486 OUTREG(CRTC_H_SYNC_STRT_WID, mode->crtc_h_sync_strt_wid); 1487 OUTREG(CRTC_V_TOTAL_DISP, mode->crtc_v_total_disp); 1488 OUTREG(CRTC_V_SYNC_STRT_WID, mode->crtc_v_sync_strt_wid); 1489 OUTREG(CRTC_OFFSET, 0); 1490 OUTREG(CRTC_OFFSET_CNTL, 0); 1491 OUTREG(CRTC_PITCH, mode->crtc_pitch); 1492 OUTREG(SURFACE_CNTL, mode->surface_cntl); 1493 1494 radeon_write_pll_regs(rinfo, mode); 1495 1496 if ((primary_mon == MT_DFP) || (primary_mon == MT_LCD)) { 1497 radeon_fifo_wait(10); 1498 OUTREG(FP_CRTC_H_TOTAL_DISP, mode->fp_crtc_h_total_disp); 1499 OUTREG(FP_CRTC_V_TOTAL_DISP, mode->fp_crtc_v_total_disp); 1500 OUTREG(FP_H_SYNC_STRT_WID, mode->fp_h_sync_strt_wid); 1501 OUTREG(FP_V_SYNC_STRT_WID, mode->fp_v_sync_strt_wid); 1502 OUTREG(FP_HORZ_STRETCH, mode->fp_horz_stretch); 1503 OUTREG(FP_VERT_STRETCH, mode->fp_vert_stretch); 1504 OUTREG(FP_GEN_CNTL, mode->fp_gen_cntl); 1505 OUTREG(TMDS_CRC, mode->tmds_crc); 1506 OUTREG(TMDS_TRANSMITTER_CNTL, mode->tmds_transmitter_cntl); 1507 } 1508 1509 if (!regs_only) 1510 radeon_screen_blank(rinfo, FB_BLANK_UNBLANK, 0); 1511 1512 radeon_fifo_wait(2); 1513 OUTPLL(VCLK_ECP_CNTL, mode->vclk_ecp_cntl); 1514 1515 return; 1516 } 1517 1518 /* 1519 * Calculate the PLL values for a given mode 1520 */ 1521 static void radeon_calc_pll_regs(struct radeonfb_info *rinfo, struct radeon_regs *regs, 1522 unsigned long freq) 1523 { 1524 static const struct { 1525 int divider; 1526 int bitvalue; 1527 } *post_div, 1528 post_divs[] = { 1529 { 1, 0 }, 1530 { 2, 1 }, 1531 { 4, 2 }, 1532 { 8, 3 }, 1533 { 3, 4 }, 1534 { 16, 5 }, 1535 { 6, 6 }, 1536 { 12, 7 }, 1537 { 0, 0 }, 1538 }; 1539 int fb_div, pll_output_freq = 0; 1540 int uses_dvo = 0; 1541 1542 /* Check if the DVO port is enabled and sourced from the primary CRTC. I'm 1543 * not sure which model starts having FP2_GEN_CNTL, I assume anything more 1544 * recent than an r(v)100... 1545 */ 1546 #if 1 1547 /* XXX I had reports of flicker happening with the cinema display 1548 * on TMDS1 that seem to be fixed if I also forbit odd dividers in 1549 * this case. This could just be a bandwidth calculation issue, I 1550 * haven't implemented the bandwidth code yet, but in the meantime, 1551 * forcing uses_dvo to 1 fixes it and shouln't have bad side effects, 1552 * I haven't seen a case were were absolutely needed an odd PLL 1553 * divider. I'll find a better fix once I have more infos on the 1554 * real cause of the problem. 1555 */ 1556 while (rinfo->has_CRTC2) { 1557 u32 fp2_gen_cntl = INREG(FP2_GEN_CNTL); 1558 u32 disp_output_cntl; 1559 int source; 1560 1561 /* FP2 path not enabled */ 1562 if ((fp2_gen_cntl & FP2_ON) == 0) 1563 break; 1564 /* Not all chip revs have the same format for this register, 1565 * extract the source selection 1566 */ 1567 if (rinfo->family == CHIP_FAMILY_R200 || IS_R300_VARIANT(rinfo)) { 1568 source = (fp2_gen_cntl >> 10) & 0x3; 1569 /* sourced from transform unit, check for transform unit 1570 * own source 1571 */ 1572 if (source == 3) { 1573 disp_output_cntl = INREG(DISP_OUTPUT_CNTL); 1574 source = (disp_output_cntl >> 12) & 0x3; 1575 } 1576 } else 1577 source = (fp2_gen_cntl >> 13) & 0x1; 1578 /* sourced from CRTC2 -> exit */ 1579 if (source == 1) 1580 break; 1581 1582 /* so we end up on CRTC1, let's set uses_dvo to 1 now */ 1583 uses_dvo = 1; 1584 break; 1585 } 1586 #else 1587 uses_dvo = 1; 1588 #endif 1589 if (freq > rinfo->pll.ppll_max) 1590 freq = rinfo->pll.ppll_max; 1591 if (freq*12 < rinfo->pll.ppll_min) 1592 freq = rinfo->pll.ppll_min / 12; 1593 pr_debug("freq = %lu, PLL min = %u, PLL max = %u\n", 1594 freq, rinfo->pll.ppll_min, rinfo->pll.ppll_max); 1595 1596 for (post_div = &post_divs[0]; post_div->divider; ++post_div) { 1597 pll_output_freq = post_div->divider * freq; 1598 /* If we output to the DVO port (external TMDS), we don't allow an 1599 * odd PLL divider as those aren't supported on this path 1600 */ 1601 if (uses_dvo && (post_div->divider & 1)) 1602 continue; 1603 if (pll_output_freq >= rinfo->pll.ppll_min && 1604 pll_output_freq <= rinfo->pll.ppll_max) 1605 break; 1606 } 1607 1608 /* If we fall through the bottom, try the "default value" 1609 given by the terminal post_div->bitvalue */ 1610 if ( !post_div->divider ) { 1611 post_div = &post_divs[post_div->bitvalue]; 1612 pll_output_freq = post_div->divider * freq; 1613 } 1614 pr_debug("ref_div = %d, ref_clk = %d, output_freq = %d\n", 1615 rinfo->pll.ref_div, rinfo->pll.ref_clk, 1616 pll_output_freq); 1617 1618 /* If we fall through the bottom, try the "default value" 1619 given by the terminal post_div->bitvalue */ 1620 if ( !post_div->divider ) { 1621 post_div = &post_divs[post_div->bitvalue]; 1622 pll_output_freq = post_div->divider * freq; 1623 } 1624 pr_debug("ref_div = %d, ref_clk = %d, output_freq = %d\n", 1625 rinfo->pll.ref_div, rinfo->pll.ref_clk, 1626 pll_output_freq); 1627 1628 fb_div = round_div(rinfo->pll.ref_div*pll_output_freq, 1629 rinfo->pll.ref_clk); 1630 regs->ppll_ref_div = rinfo->pll.ref_div; 1631 regs->ppll_div_3 = fb_div | (post_div->bitvalue << 16); 1632 1633 pr_debug("post div = 0x%x\n", post_div->bitvalue); 1634 pr_debug("fb_div = 0x%x\n", fb_div); 1635 pr_debug("ppll_div_3 = 0x%x\n", regs->ppll_div_3); 1636 } 1637 1638 static int radeonfb_set_par(struct fb_info *info) 1639 { 1640 struct radeonfb_info *rinfo = info->par; 1641 struct fb_var_screeninfo *mode = &info->var; 1642 struct radeon_regs *newmode; 1643 int hTotal, vTotal, hSyncStart, hSyncEnd, 1644 vSyncStart, vSyncEnd; 1645 u8 hsync_adj_tab[] = {0, 0x12, 9, 9, 6, 5}; 1646 u8 hsync_fudge_fp[] = {2, 2, 0, 0, 5, 5}; 1647 u32 sync, h_sync_pol, v_sync_pol, dotClock, pixClock; 1648 int i, freq; 1649 int format = 0; 1650 int nopllcalc = 0; 1651 int hsync_start, hsync_fudge, hsync_wid, vsync_wid; 1652 int primary_mon = PRIMARY_MONITOR(rinfo); 1653 int depth = var_to_depth(mode); 1654 int use_rmx = 0; 1655 1656 newmode = kmalloc(sizeof(struct radeon_regs), GFP_KERNEL); 1657 if (!newmode) 1658 return -ENOMEM; 1659 1660 /* We always want engine to be idle on a mode switch, even 1661 * if we won't actually change the mode 1662 */ 1663 radeon_engine_idle(); 1664 1665 hSyncStart = mode->xres + mode->right_margin; 1666 hSyncEnd = hSyncStart + mode->hsync_len; 1667 hTotal = hSyncEnd + mode->left_margin; 1668 1669 vSyncStart = mode->yres + mode->lower_margin; 1670 vSyncEnd = vSyncStart + mode->vsync_len; 1671 vTotal = vSyncEnd + mode->upper_margin; 1672 pixClock = mode->pixclock; 1673 1674 sync = mode->sync; 1675 h_sync_pol = sync & FB_SYNC_HOR_HIGH_ACT ? 0 : 1; 1676 v_sync_pol = sync & FB_SYNC_VERT_HIGH_ACT ? 0 : 1; 1677 1678 if (primary_mon == MT_DFP || primary_mon == MT_LCD) { 1679 if (rinfo->panel_info.xres < mode->xres) 1680 mode->xres = rinfo->panel_info.xres; 1681 if (rinfo->panel_info.yres < mode->yres) 1682 mode->yres = rinfo->panel_info.yres; 1683 1684 hTotal = mode->xres + rinfo->panel_info.hblank; 1685 hSyncStart = mode->xres + rinfo->panel_info.hOver_plus; 1686 hSyncEnd = hSyncStart + rinfo->panel_info.hSync_width; 1687 1688 vTotal = mode->yres + rinfo->panel_info.vblank; 1689 vSyncStart = mode->yres + rinfo->panel_info.vOver_plus; 1690 vSyncEnd = vSyncStart + rinfo->panel_info.vSync_width; 1691 1692 h_sync_pol = !rinfo->panel_info.hAct_high; 1693 v_sync_pol = !rinfo->panel_info.vAct_high; 1694 1695 pixClock = 100000000 / rinfo->panel_info.clock; 1696 1697 if (rinfo->panel_info.use_bios_dividers) { 1698 nopllcalc = 1; 1699 newmode->ppll_div_3 = rinfo->panel_info.fbk_divider | 1700 (rinfo->panel_info.post_divider << 16); 1701 newmode->ppll_ref_div = rinfo->panel_info.ref_divider; 1702 } 1703 } 1704 dotClock = 1000000000 / pixClock; 1705 freq = dotClock / 10; /* x100 */ 1706 1707 pr_debug("hStart = %d, hEnd = %d, hTotal = %d\n", 1708 hSyncStart, hSyncEnd, hTotal); 1709 pr_debug("vStart = %d, vEnd = %d, vTotal = %d\n", 1710 vSyncStart, vSyncEnd, vTotal); 1711 1712 hsync_wid = (hSyncEnd - hSyncStart) / 8; 1713 vsync_wid = vSyncEnd - vSyncStart; 1714 if (hsync_wid == 0) 1715 hsync_wid = 1; 1716 else if (hsync_wid > 0x3f) /* max */ 1717 hsync_wid = 0x3f; 1718 1719 if (vsync_wid == 0) 1720 vsync_wid = 1; 1721 else if (vsync_wid > 0x1f) /* max */ 1722 vsync_wid = 0x1f; 1723 1724 format = radeon_get_dstbpp(depth); 1725 1726 if ((primary_mon == MT_DFP) || (primary_mon == MT_LCD)) 1727 hsync_fudge = hsync_fudge_fp[format-1]; 1728 else 1729 hsync_fudge = hsync_adj_tab[format-1]; 1730 1731 hsync_start = hSyncStart - 8 + hsync_fudge; 1732 1733 newmode->crtc_gen_cntl = CRTC_EXT_DISP_EN | CRTC_EN | 1734 (format << 8); 1735 1736 /* Clear auto-center etc... */ 1737 newmode->crtc_more_cntl = rinfo->init_state.crtc_more_cntl; 1738 newmode->crtc_more_cntl &= 0xfffffff0; 1739 1740 if ((primary_mon == MT_DFP) || (primary_mon == MT_LCD)) { 1741 newmode->crtc_ext_cntl = VGA_ATI_LINEAR | XCRT_CNT_EN; 1742 if (mirror) 1743 newmode->crtc_ext_cntl |= CRTC_CRT_ON; 1744 1745 newmode->crtc_gen_cntl &= ~(CRTC_DBL_SCAN_EN | 1746 CRTC_INTERLACE_EN); 1747 } else { 1748 newmode->crtc_ext_cntl = VGA_ATI_LINEAR | XCRT_CNT_EN | 1749 CRTC_CRT_ON; 1750 } 1751 1752 newmode->dac_cntl = /* INREG(DAC_CNTL) | */ DAC_MASK_ALL | DAC_VGA_ADR_EN | 1753 DAC_8BIT_EN; 1754 1755 newmode->crtc_h_total_disp = ((((hTotal / 8) - 1) & 0x3ff) | 1756 (((mode->xres / 8) - 1) << 16)); 1757 1758 newmode->crtc_h_sync_strt_wid = ((hsync_start & 0x1fff) | 1759 (hsync_wid << 16) | (h_sync_pol << 23)); 1760 1761 newmode->crtc_v_total_disp = ((vTotal - 1) & 0xffff) | 1762 ((mode->yres - 1) << 16); 1763 1764 newmode->crtc_v_sync_strt_wid = (((vSyncStart - 1) & 0xfff) | 1765 (vsync_wid << 16) | (v_sync_pol << 23)); 1766 1767 if (!(info->flags & FBINFO_HWACCEL_DISABLED)) { 1768 /* We first calculate the engine pitch */ 1769 rinfo->pitch = ((mode->xres_virtual * ((mode->bits_per_pixel + 1) / 8) + 0x3f) 1770 & ~(0x3f)) >> 6; 1771 1772 /* Then, re-multiply it to get the CRTC pitch */ 1773 newmode->crtc_pitch = (rinfo->pitch << 3) / ((mode->bits_per_pixel + 1) / 8); 1774 } else 1775 newmode->crtc_pitch = (mode->xres_virtual >> 3); 1776 1777 newmode->crtc_pitch |= (newmode->crtc_pitch << 16); 1778 1779 /* 1780 * It looks like recent chips have a problem with SURFACE_CNTL, 1781 * setting SURF_TRANSLATION_DIS completely disables the 1782 * swapper as well, so we leave it unset now. 1783 */ 1784 newmode->surface_cntl = 0; 1785 1786 #if defined(__BIG_ENDIAN) 1787 1788 /* Setup swapping on both apertures, though we currently 1789 * only use aperture 0, enabling swapper on aperture 1 1790 * won't harm 1791 */ 1792 switch (mode->bits_per_pixel) { 1793 case 16: 1794 newmode->surface_cntl |= NONSURF_AP0_SWP_16BPP; 1795 newmode->surface_cntl |= NONSURF_AP1_SWP_16BPP; 1796 break; 1797 case 24: 1798 case 32: 1799 newmode->surface_cntl |= NONSURF_AP0_SWP_32BPP; 1800 newmode->surface_cntl |= NONSURF_AP1_SWP_32BPP; 1801 break; 1802 } 1803 #endif 1804 1805 /* Clear surface registers */ 1806 for (i=0; i<8; i++) { 1807 newmode->surf_lower_bound[i] = 0; 1808 newmode->surf_upper_bound[i] = 0x1f; 1809 newmode->surf_info[i] = 0; 1810 } 1811 1812 pr_debug("h_total_disp = 0x%x\t hsync_strt_wid = 0x%x\n", 1813 newmode->crtc_h_total_disp, newmode->crtc_h_sync_strt_wid); 1814 pr_debug("v_total_disp = 0x%x\t vsync_strt_wid = 0x%x\n", 1815 newmode->crtc_v_total_disp, newmode->crtc_v_sync_strt_wid); 1816 1817 rinfo->bpp = mode->bits_per_pixel; 1818 rinfo->depth = depth; 1819 1820 pr_debug("pixclock = %lu\n", (unsigned long)pixClock); 1821 pr_debug("freq = %lu\n", (unsigned long)freq); 1822 1823 /* We use PPLL_DIV_3 */ 1824 newmode->clk_cntl_index = 0x300; 1825 1826 /* Calculate PPLL value if necessary */ 1827 if (!nopllcalc) 1828 radeon_calc_pll_regs(rinfo, newmode, freq); 1829 1830 newmode->vclk_ecp_cntl = rinfo->init_state.vclk_ecp_cntl; 1831 1832 if ((primary_mon == MT_DFP) || (primary_mon == MT_LCD)) { 1833 unsigned int hRatio, vRatio; 1834 1835 if (mode->xres > rinfo->panel_info.xres) 1836 mode->xres = rinfo->panel_info.xres; 1837 if (mode->yres > rinfo->panel_info.yres) 1838 mode->yres = rinfo->panel_info.yres; 1839 1840 newmode->fp_horz_stretch = (((rinfo->panel_info.xres / 8) - 1) 1841 << HORZ_PANEL_SHIFT); 1842 newmode->fp_vert_stretch = ((rinfo->panel_info.yres - 1) 1843 << VERT_PANEL_SHIFT); 1844 1845 if (mode->xres != rinfo->panel_info.xres) { 1846 hRatio = round_div(mode->xres * HORZ_STRETCH_RATIO_MAX, 1847 rinfo->panel_info.xres); 1848 newmode->fp_horz_stretch = (((((unsigned long)hRatio) & HORZ_STRETCH_RATIO_MASK)) | 1849 (newmode->fp_horz_stretch & 1850 (HORZ_PANEL_SIZE | HORZ_FP_LOOP_STRETCH | 1851 HORZ_AUTO_RATIO_INC))); 1852 newmode->fp_horz_stretch |= (HORZ_STRETCH_BLEND | 1853 HORZ_STRETCH_ENABLE); 1854 use_rmx = 1; 1855 } 1856 newmode->fp_horz_stretch &= ~HORZ_AUTO_RATIO; 1857 1858 if (mode->yres != rinfo->panel_info.yres) { 1859 vRatio = round_div(mode->yres * VERT_STRETCH_RATIO_MAX, 1860 rinfo->panel_info.yres); 1861 newmode->fp_vert_stretch = (((((unsigned long)vRatio) & VERT_STRETCH_RATIO_MASK)) | 1862 (newmode->fp_vert_stretch & 1863 (VERT_PANEL_SIZE | VERT_STRETCH_RESERVED))); 1864 newmode->fp_vert_stretch |= (VERT_STRETCH_BLEND | 1865 VERT_STRETCH_ENABLE); 1866 use_rmx = 1; 1867 } 1868 newmode->fp_vert_stretch &= ~VERT_AUTO_RATIO_EN; 1869 1870 newmode->fp_gen_cntl = (rinfo->init_state.fp_gen_cntl & (u32) 1871 ~(FP_SEL_CRTC2 | 1872 FP_RMX_HVSYNC_CONTROL_EN | 1873 FP_DFP_SYNC_SEL | 1874 FP_CRT_SYNC_SEL | 1875 FP_CRTC_LOCK_8DOT | 1876 FP_USE_SHADOW_EN | 1877 FP_CRTC_USE_SHADOW_VEND | 1878 FP_CRT_SYNC_ALT)); 1879 1880 newmode->fp_gen_cntl |= (FP_CRTC_DONT_SHADOW_VPAR | 1881 FP_CRTC_DONT_SHADOW_HEND | 1882 FP_PANEL_FORMAT); 1883 1884 if (IS_R300_VARIANT(rinfo) || 1885 (rinfo->family == CHIP_FAMILY_R200)) { 1886 newmode->fp_gen_cntl &= ~R200_FP_SOURCE_SEL_MASK; 1887 if (use_rmx) 1888 newmode->fp_gen_cntl |= R200_FP_SOURCE_SEL_RMX; 1889 else 1890 newmode->fp_gen_cntl |= R200_FP_SOURCE_SEL_CRTC1; 1891 } else 1892 newmode->fp_gen_cntl |= FP_SEL_CRTC1; 1893 1894 newmode->lvds_gen_cntl = rinfo->init_state.lvds_gen_cntl; 1895 newmode->lvds_pll_cntl = rinfo->init_state.lvds_pll_cntl; 1896 newmode->tmds_crc = rinfo->init_state.tmds_crc; 1897 newmode->tmds_transmitter_cntl = rinfo->init_state.tmds_transmitter_cntl; 1898 1899 if (primary_mon == MT_LCD) { 1900 newmode->lvds_gen_cntl |= (LVDS_ON | LVDS_BLON); 1901 newmode->fp_gen_cntl &= ~(FP_FPON | FP_TMDS_EN); 1902 } else { 1903 /* DFP */ 1904 newmode->fp_gen_cntl |= (FP_FPON | FP_TMDS_EN); 1905 newmode->tmds_transmitter_cntl &= ~(TMDS_PLLRST); 1906 /* TMDS_PLL_EN bit is reversed on RV (and mobility) chips */ 1907 if (IS_R300_VARIANT(rinfo) || 1908 (rinfo->family == CHIP_FAMILY_R200) || !rinfo->has_CRTC2) 1909 newmode->tmds_transmitter_cntl &= ~TMDS_PLL_EN; 1910 else 1911 newmode->tmds_transmitter_cntl |= TMDS_PLL_EN; 1912 newmode->crtc_ext_cntl &= ~CRTC_CRT_ON; 1913 } 1914 1915 newmode->fp_crtc_h_total_disp = (((rinfo->panel_info.hblank / 8) & 0x3ff) | 1916 (((mode->xres / 8) - 1) << 16)); 1917 newmode->fp_crtc_v_total_disp = (rinfo->panel_info.vblank & 0xffff) | 1918 ((mode->yres - 1) << 16); 1919 newmode->fp_h_sync_strt_wid = ((rinfo->panel_info.hOver_plus & 0x1fff) | 1920 (hsync_wid << 16) | (h_sync_pol << 23)); 1921 newmode->fp_v_sync_strt_wid = ((rinfo->panel_info.vOver_plus & 0xfff) | 1922 (vsync_wid << 16) | (v_sync_pol << 23)); 1923 } 1924 1925 /* do it! */ 1926 if (!rinfo->asleep) { 1927 memcpy(&rinfo->state, newmode, sizeof(*newmode)); 1928 radeon_write_mode (rinfo, newmode, 0); 1929 /* (re)initialize the engine */ 1930 if (!(info->flags & FBINFO_HWACCEL_DISABLED)) 1931 radeonfb_engine_init (rinfo); 1932 } 1933 /* Update fix */ 1934 if (!(info->flags & FBINFO_HWACCEL_DISABLED)) 1935 info->fix.line_length = rinfo->pitch*64; 1936 else 1937 info->fix.line_length = mode->xres_virtual 1938 * ((mode->bits_per_pixel + 1) / 8); 1939 info->fix.visual = rinfo->depth == 8 ? FB_VISUAL_PSEUDOCOLOR 1940 : FB_VISUAL_DIRECTCOLOR; 1941 1942 #ifdef CONFIG_BOOTX_TEXT 1943 /* Update debug text engine */ 1944 btext_update_display(rinfo->fb_base_phys, mode->xres, mode->yres, 1945 rinfo->depth, info->fix.line_length); 1946 #endif 1947 1948 kfree(newmode); 1949 return 0; 1950 } 1951 1952 1953 static const struct fb_ops radeonfb_ops = { 1954 .owner = THIS_MODULE, 1955 .fb_check_var = radeonfb_check_var, 1956 .fb_set_par = radeonfb_set_par, 1957 .fb_setcolreg = radeonfb_setcolreg, 1958 .fb_setcmap = radeonfb_setcmap, 1959 .fb_pan_display = radeonfb_pan_display, 1960 .fb_blank = radeonfb_blank, 1961 .fb_ioctl = radeonfb_ioctl, 1962 .fb_sync = radeonfb_sync, 1963 .fb_fillrect = radeonfb_fillrect, 1964 .fb_copyarea = radeonfb_copyarea, 1965 .fb_imageblit = radeonfb_imageblit, 1966 }; 1967 1968 1969 static int radeon_set_fbinfo(struct radeonfb_info *rinfo) 1970 { 1971 struct fb_info *info = rinfo->info; 1972 1973 info->par = rinfo; 1974 info->pseudo_palette = rinfo->pseudo_palette; 1975 info->flags = FBINFO_DEFAULT 1976 | FBINFO_HWACCEL_COPYAREA 1977 | FBINFO_HWACCEL_FILLRECT 1978 | FBINFO_HWACCEL_XPAN 1979 | FBINFO_HWACCEL_YPAN; 1980 info->fbops = &radeonfb_ops; 1981 info->screen_base = rinfo->fb_base; 1982 info->screen_size = rinfo->mapped_vram; 1983 /* Fill fix common fields */ 1984 strscpy(info->fix.id, rinfo->name, sizeof(info->fix.id)); 1985 info->fix.smem_start = rinfo->fb_base_phys; 1986 info->fix.smem_len = rinfo->video_ram; 1987 info->fix.type = FB_TYPE_PACKED_PIXELS; 1988 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; 1989 info->fix.xpanstep = 8; 1990 info->fix.ypanstep = 1; 1991 info->fix.ywrapstep = 0; 1992 info->fix.type_aux = 0; 1993 info->fix.mmio_start = rinfo->mmio_base_phys; 1994 info->fix.mmio_len = RADEON_REGSIZE; 1995 info->fix.accel = FB_ACCEL_ATI_RADEON; 1996 1997 fb_alloc_cmap(&info->cmap, 256, 0); 1998 1999 if (noaccel) 2000 info->flags |= FBINFO_HWACCEL_DISABLED; 2001 2002 return 0; 2003 } 2004 2005 /* 2006 * This reconfigure the card's internal memory map. In theory, we'd like 2007 * to setup the card's memory at the same address as it's PCI bus address, 2008 * and the AGP aperture right after that so that system RAM on 32 bits 2009 * machines at least, is directly accessible. However, doing so would 2010 * conflict with the current XFree drivers... 2011 * Ultimately, I hope XFree, GATOS and ATI binary drivers will all agree 2012 * on the proper way to set this up and duplicate this here. In the meantime, 2013 * I put the card's memory at 0 in card space and AGP at some random high 2014 * local (0xe0000000 for now) that will be changed by XFree/DRI anyway 2015 */ 2016 #ifdef CONFIG_PPC 2017 #undef SET_MC_FB_FROM_APERTURE 2018 static void fixup_memory_mappings(struct radeonfb_info *rinfo) 2019 { 2020 u32 save_crtc_gen_cntl, save_crtc2_gen_cntl = 0; 2021 u32 save_crtc_ext_cntl; 2022 u32 aper_base, aper_size; 2023 u32 agp_base; 2024 2025 /* First, we disable display to avoid interfering */ 2026 if (rinfo->has_CRTC2) { 2027 save_crtc2_gen_cntl = INREG(CRTC2_GEN_CNTL); 2028 OUTREG(CRTC2_GEN_CNTL, save_crtc2_gen_cntl | CRTC2_DISP_REQ_EN_B); 2029 } 2030 save_crtc_gen_cntl = INREG(CRTC_GEN_CNTL); 2031 save_crtc_ext_cntl = INREG(CRTC_EXT_CNTL); 2032 2033 OUTREG(CRTC_EXT_CNTL, save_crtc_ext_cntl | CRTC_DISPLAY_DIS); 2034 OUTREG(CRTC_GEN_CNTL, save_crtc_gen_cntl | CRTC_DISP_REQ_EN_B); 2035 mdelay(100); 2036 2037 aper_base = INREG(CNFG_APER_0_BASE); 2038 aper_size = INREG(CNFG_APER_SIZE); 2039 2040 #ifdef SET_MC_FB_FROM_APERTURE 2041 /* Set framebuffer to be at the same address as set in PCI BAR */ 2042 OUTREG(MC_FB_LOCATION, 2043 ((aper_base + aper_size - 1) & 0xffff0000) | (aper_base >> 16)); 2044 rinfo->fb_local_base = aper_base; 2045 #else 2046 OUTREG(MC_FB_LOCATION, 0x7fff0000); 2047 rinfo->fb_local_base = 0; 2048 #endif 2049 agp_base = aper_base + aper_size; 2050 if (agp_base & 0xf0000000) 2051 agp_base = (aper_base | 0x0fffffff) + 1; 2052 2053 /* Set AGP to be just after the framebuffer on a 256Mb boundary. This 2054 * assumes the FB isn't mapped to 0xf0000000 or above, but this is 2055 * always the case on PPCs afaik. 2056 */ 2057 #ifdef SET_MC_FB_FROM_APERTURE 2058 OUTREG(MC_AGP_LOCATION, 0xffff0000 | (agp_base >> 16)); 2059 #else 2060 OUTREG(MC_AGP_LOCATION, 0xffffe000); 2061 #endif 2062 2063 /* Fixup the display base addresses & engine offsets while we 2064 * are at it as well 2065 */ 2066 #ifdef SET_MC_FB_FROM_APERTURE 2067 OUTREG(DISPLAY_BASE_ADDR, aper_base); 2068 if (rinfo->has_CRTC2) 2069 OUTREG(CRTC2_DISPLAY_BASE_ADDR, aper_base); 2070 OUTREG(OV0_BASE_ADDR, aper_base); 2071 #else 2072 OUTREG(DISPLAY_BASE_ADDR, 0); 2073 if (rinfo->has_CRTC2) 2074 OUTREG(CRTC2_DISPLAY_BASE_ADDR, 0); 2075 OUTREG(OV0_BASE_ADDR, 0); 2076 #endif 2077 mdelay(100); 2078 2079 /* Restore display settings */ 2080 OUTREG(CRTC_GEN_CNTL, save_crtc_gen_cntl); 2081 OUTREG(CRTC_EXT_CNTL, save_crtc_ext_cntl); 2082 if (rinfo->has_CRTC2) 2083 OUTREG(CRTC2_GEN_CNTL, save_crtc2_gen_cntl); 2084 2085 pr_debug("aper_base: %08x MC_FB_LOC to: %08x, MC_AGP_LOC to: %08x\n", 2086 aper_base, 2087 ((aper_base + aper_size - 1) & 0xffff0000) | (aper_base >> 16), 2088 0xffff0000 | (agp_base >> 16)); 2089 } 2090 #endif /* CONFIG_PPC */ 2091 2092 2093 static void radeon_identify_vram(struct radeonfb_info *rinfo) 2094 { 2095 u32 tmp; 2096 2097 /* framebuffer size */ 2098 if ((rinfo->family == CHIP_FAMILY_RS100) || 2099 (rinfo->family == CHIP_FAMILY_RS200) || 2100 (rinfo->family == CHIP_FAMILY_RS300) || 2101 (rinfo->family == CHIP_FAMILY_RC410) || 2102 (rinfo->family == CHIP_FAMILY_RS400) || 2103 (rinfo->family == CHIP_FAMILY_RS480) ) { 2104 u32 tom = INREG(NB_TOM); 2105 2106 tmp = ((((tom >> 16) - (tom & 0xffff) + 1) << 6) * 1024); 2107 radeon_fifo_wait(6); 2108 OUTREG(MC_FB_LOCATION, tom); 2109 OUTREG(DISPLAY_BASE_ADDR, (tom & 0xffff) << 16); 2110 OUTREG(CRTC2_DISPLAY_BASE_ADDR, (tom & 0xffff) << 16); 2111 OUTREG(OV0_BASE_ADDR, (tom & 0xffff) << 16); 2112 2113 /* This is supposed to fix the crtc2 noise problem. */ 2114 OUTREG(GRPH2_BUFFER_CNTL, INREG(GRPH2_BUFFER_CNTL) & ~0x7f0000); 2115 2116 if ((rinfo->family == CHIP_FAMILY_RS100) || 2117 (rinfo->family == CHIP_FAMILY_RS200)) { 2118 /* This is to workaround the asic bug for RMX, some versions 2119 * of BIOS doesn't have this register initialized correctly. 2120 */ 2121 OUTREGP(CRTC_MORE_CNTL, CRTC_H_CUTOFF_ACTIVE_EN, 2122 ~CRTC_H_CUTOFF_ACTIVE_EN); 2123 } 2124 } else { 2125 tmp = INREG(CNFG_MEMSIZE); 2126 } 2127 2128 /* mem size is bits [28:0], mask off the rest */ 2129 rinfo->video_ram = tmp & CNFG_MEMSIZE_MASK; 2130 2131 /* 2132 * Hack to get around some busted production M6's 2133 * reporting no ram 2134 */ 2135 if (rinfo->video_ram == 0) { 2136 switch (rinfo->pdev->device) { 2137 case PCI_CHIP_RADEON_LY: 2138 case PCI_CHIP_RADEON_LZ: 2139 rinfo->video_ram = 8192 * 1024; 2140 break; 2141 default: 2142 break; 2143 } 2144 } 2145 2146 2147 /* 2148 * Now try to identify VRAM type 2149 */ 2150 if (rinfo->is_IGP || (rinfo->family >= CHIP_FAMILY_R300) || 2151 (INREG(MEM_SDRAM_MODE_REG) & (1<<30))) 2152 rinfo->vram_ddr = 1; 2153 else 2154 rinfo->vram_ddr = 0; 2155 2156 tmp = INREG(MEM_CNTL); 2157 if (IS_R300_VARIANT(rinfo)) { 2158 tmp &= R300_MEM_NUM_CHANNELS_MASK; 2159 switch (tmp) { 2160 case 0: rinfo->vram_width = 64; break; 2161 case 1: rinfo->vram_width = 128; break; 2162 case 2: rinfo->vram_width = 256; break; 2163 default: rinfo->vram_width = 128; break; 2164 } 2165 } else if ((rinfo->family == CHIP_FAMILY_RV100) || 2166 (rinfo->family == CHIP_FAMILY_RS100) || 2167 (rinfo->family == CHIP_FAMILY_RS200)){ 2168 if (tmp & RV100_MEM_HALF_MODE) 2169 rinfo->vram_width = 32; 2170 else 2171 rinfo->vram_width = 64; 2172 } else { 2173 if (tmp & MEM_NUM_CHANNELS_MASK) 2174 rinfo->vram_width = 128; 2175 else 2176 rinfo->vram_width = 64; 2177 } 2178 2179 /* This may not be correct, as some cards can have half of channel disabled 2180 * ToDo: identify these cases 2181 */ 2182 2183 pr_debug("radeonfb (%s): Found %ldk of %s %d bits wide videoram\n", 2184 pci_name(rinfo->pdev), 2185 rinfo->video_ram / 1024, 2186 rinfo->vram_ddr ? "DDR" : "SDRAM", 2187 rinfo->vram_width); 2188 } 2189 2190 /* 2191 * Sysfs 2192 */ 2193 2194 static ssize_t radeon_show_one_edid(char *buf, loff_t off, size_t count, const u8 *edid) 2195 { 2196 return memory_read_from_buffer(buf, count, &off, edid, EDID_LENGTH); 2197 } 2198 2199 2200 static ssize_t radeon_show_edid1(struct file *filp, struct kobject *kobj, 2201 struct bin_attribute *bin_attr, 2202 char *buf, loff_t off, size_t count) 2203 { 2204 struct device *dev = kobj_to_dev(kobj); 2205 struct fb_info *info = dev_get_drvdata(dev); 2206 struct radeonfb_info *rinfo = info->par; 2207 2208 return radeon_show_one_edid(buf, off, count, rinfo->mon1_EDID); 2209 } 2210 2211 2212 static ssize_t radeon_show_edid2(struct file *filp, struct kobject *kobj, 2213 struct bin_attribute *bin_attr, 2214 char *buf, loff_t off, size_t count) 2215 { 2216 struct device *dev = kobj_to_dev(kobj); 2217 struct fb_info *info = dev_get_drvdata(dev); 2218 struct radeonfb_info *rinfo = info->par; 2219 2220 return radeon_show_one_edid(buf, off, count, rinfo->mon2_EDID); 2221 } 2222 2223 static const struct bin_attribute edid1_attr = { 2224 .attr = { 2225 .name = "edid1", 2226 .mode = 0444, 2227 }, 2228 .size = EDID_LENGTH, 2229 .read = radeon_show_edid1, 2230 }; 2231 2232 static const struct bin_attribute edid2_attr = { 2233 .attr = { 2234 .name = "edid2", 2235 .mode = 0444, 2236 }, 2237 .size = EDID_LENGTH, 2238 .read = radeon_show_edid2, 2239 }; 2240 2241 static int radeon_kick_out_firmware_fb(struct pci_dev *pdev) 2242 { 2243 resource_size_t base = pci_resource_start(pdev, 0); 2244 resource_size_t size = pci_resource_len(pdev, 0); 2245 2246 return aperture_remove_conflicting_devices(base, size, false, KBUILD_MODNAME); 2247 } 2248 2249 static int radeonfb_pci_register(struct pci_dev *pdev, 2250 const struct pci_device_id *ent) 2251 { 2252 struct fb_info *info; 2253 struct radeonfb_info *rinfo; 2254 int ret; 2255 unsigned char c1, c2; 2256 int err = 0; 2257 2258 pr_debug("radeonfb_pci_register BEGIN\n"); 2259 2260 /* Enable device in PCI config */ 2261 ret = pci_enable_device(pdev); 2262 if (ret < 0) { 2263 printk(KERN_ERR "radeonfb (%s): Cannot enable PCI device\n", 2264 pci_name(pdev)); 2265 goto err_out; 2266 } 2267 2268 info = framebuffer_alloc(sizeof(struct radeonfb_info), &pdev->dev); 2269 if (!info) { 2270 ret = -ENOMEM; 2271 goto err_disable; 2272 } 2273 rinfo = info->par; 2274 rinfo->info = info; 2275 rinfo->pdev = pdev; 2276 2277 spin_lock_init(&rinfo->reg_lock); 2278 timer_setup(&rinfo->lvds_timer, radeon_lvds_timer_func, 0); 2279 2280 c1 = ent->device >> 8; 2281 c2 = ent->device & 0xff; 2282 if (isprint(c1) && isprint(c2)) 2283 snprintf(rinfo->name, sizeof(rinfo->name), 2284 "ATI Radeon %x \"%c%c\"", ent->device & 0xffff, c1, c2); 2285 else 2286 snprintf(rinfo->name, sizeof(rinfo->name), 2287 "ATI Radeon %x", ent->device & 0xffff); 2288 2289 rinfo->family = ent->driver_data & CHIP_FAMILY_MASK; 2290 rinfo->chipset = pdev->device; 2291 rinfo->has_CRTC2 = (ent->driver_data & CHIP_HAS_CRTC2) != 0; 2292 rinfo->is_mobility = (ent->driver_data & CHIP_IS_MOBILITY) != 0; 2293 rinfo->is_IGP = (ent->driver_data & CHIP_IS_IGP) != 0; 2294 2295 /* Set base addrs */ 2296 rinfo->fb_base_phys = pci_resource_start (pdev, 0); 2297 rinfo->mmio_base_phys = pci_resource_start (pdev, 2); 2298 2299 ret = radeon_kick_out_firmware_fb(pdev); 2300 if (ret) 2301 goto err_release_fb; 2302 2303 /* request the mem regions */ 2304 ret = pci_request_region(pdev, 0, "radeonfb framebuffer"); 2305 if (ret < 0) { 2306 printk( KERN_ERR "radeonfb (%s): cannot request region 0.\n", 2307 pci_name(rinfo->pdev)); 2308 goto err_release_fb; 2309 } 2310 2311 ret = pci_request_region(pdev, 2, "radeonfb mmio"); 2312 if (ret < 0) { 2313 printk( KERN_ERR "radeonfb (%s): cannot request region 2.\n", 2314 pci_name(rinfo->pdev)); 2315 goto err_release_pci0; 2316 } 2317 2318 /* map the regions */ 2319 rinfo->mmio_base = ioremap(rinfo->mmio_base_phys, RADEON_REGSIZE); 2320 if (!rinfo->mmio_base) { 2321 printk(KERN_ERR "radeonfb (%s): cannot map MMIO\n", 2322 pci_name(rinfo->pdev)); 2323 ret = -EIO; 2324 goto err_release_pci2; 2325 } 2326 2327 rinfo->fb_local_base = INREG(MC_FB_LOCATION) << 16; 2328 2329 /* 2330 * Check for errata 2331 */ 2332 rinfo->errata = 0; 2333 if (rinfo->family == CHIP_FAMILY_R300 && 2334 (INREG(CNFG_CNTL) & CFG_ATI_REV_ID_MASK) 2335 == CFG_ATI_REV_A11) 2336 rinfo->errata |= CHIP_ERRATA_R300_CG; 2337 2338 if (rinfo->family == CHIP_FAMILY_RV200 || 2339 rinfo->family == CHIP_FAMILY_RS200) 2340 rinfo->errata |= CHIP_ERRATA_PLL_DUMMYREADS; 2341 2342 if (rinfo->family == CHIP_FAMILY_RV100 || 2343 rinfo->family == CHIP_FAMILY_RS100 || 2344 rinfo->family == CHIP_FAMILY_RS200) 2345 rinfo->errata |= CHIP_ERRATA_PLL_DELAY; 2346 2347 #if defined(CONFIG_PPC) || defined(CONFIG_SPARC) 2348 /* On PPC, we obtain the OF device-node pointer to the firmware 2349 * data for this chip 2350 */ 2351 rinfo->of_node = pci_device_to_OF_node(pdev); 2352 if (rinfo->of_node == NULL) 2353 printk(KERN_WARNING "radeonfb (%s): Cannot match card to OF node !\n", 2354 pci_name(rinfo->pdev)); 2355 2356 #endif /* CONFIG_PPC || CONFIG_SPARC */ 2357 #ifdef CONFIG_PPC 2358 /* On PPC, the firmware sets up a memory mapping that tends 2359 * to cause lockups when enabling the engine. We reconfigure 2360 * the card internal memory mappings properly 2361 */ 2362 fixup_memory_mappings(rinfo); 2363 #endif /* CONFIG_PPC */ 2364 2365 /* Get VRAM size and type */ 2366 radeon_identify_vram(rinfo); 2367 2368 rinfo->mapped_vram = min_t(unsigned long, MAX_MAPPED_VRAM, rinfo->video_ram); 2369 2370 do { 2371 rinfo->fb_base = ioremap_wc(rinfo->fb_base_phys, 2372 rinfo->mapped_vram); 2373 } while (rinfo->fb_base == NULL && 2374 ((rinfo->mapped_vram /= 2) >= MIN_MAPPED_VRAM)); 2375 2376 if (rinfo->fb_base == NULL) { 2377 printk (KERN_ERR "radeonfb (%s): cannot map FB\n", 2378 pci_name(rinfo->pdev)); 2379 ret = -EIO; 2380 goto err_unmap_rom; 2381 } 2382 2383 pr_debug("radeonfb (%s): mapped %ldk videoram\n", pci_name(rinfo->pdev), 2384 rinfo->mapped_vram/1024); 2385 2386 /* 2387 * Map the BIOS ROM if any and retrieve PLL parameters from 2388 * the BIOS. We skip that on mobility chips as the real panel 2389 * values we need aren't in the ROM but in the BIOS image in 2390 * memory. This is definitely not the best meacnism though, 2391 * we really need the arch code to tell us which is the "primary" 2392 * video adapter to use the memory image (or better, the arch 2393 * should provide us a copy of the BIOS image to shield us from 2394 * archs who would store that elsewhere and/or could initialize 2395 * more than one adapter during boot). 2396 */ 2397 if (!rinfo->is_mobility) 2398 radeon_map_ROM(rinfo, pdev); 2399 2400 /* 2401 * On x86, the primary display on laptop may have it's BIOS 2402 * ROM elsewhere, try to locate it at the legacy memory hole. 2403 * We probably need to make sure this is the primary display, 2404 * but that is difficult without some arch support. 2405 */ 2406 #ifdef CONFIG_X86 2407 if (rinfo->bios_seg == NULL) 2408 radeon_find_mem_vbios(rinfo); 2409 #endif 2410 2411 /* If both above failed, try the BIOS ROM again for mobility 2412 * chips 2413 */ 2414 if (rinfo->bios_seg == NULL && rinfo->is_mobility) 2415 radeon_map_ROM(rinfo, pdev); 2416 2417 /* Get informations about the board's PLL */ 2418 radeon_get_pllinfo(rinfo); 2419 2420 #ifdef CONFIG_FB_RADEON_I2C 2421 /* Register I2C bus */ 2422 radeon_create_i2c_busses(rinfo); 2423 #endif 2424 2425 /* set all the vital stuff */ 2426 radeon_set_fbinfo (rinfo); 2427 2428 /* Probe screen types */ 2429 radeon_probe_screens(rinfo, monitor_layout, ignore_edid); 2430 2431 /* Build mode list, check out panel native model */ 2432 radeon_check_modes(rinfo, mode_option); 2433 2434 /* Register some sysfs stuff (should be done better) */ 2435 if (rinfo->mon1_EDID) 2436 err |= sysfs_create_bin_file(&rinfo->pdev->dev.kobj, 2437 &edid1_attr); 2438 if (rinfo->mon2_EDID) 2439 err |= sysfs_create_bin_file(&rinfo->pdev->dev.kobj, 2440 &edid2_attr); 2441 if (err) 2442 pr_warn("%s() Creating sysfs files failed, continuing\n", 2443 __func__); 2444 2445 /* save current mode regs before we switch into the new one 2446 * so we can restore this upon __exit 2447 */ 2448 radeon_save_state (rinfo, &rinfo->init_state); 2449 memcpy(&rinfo->state, &rinfo->init_state, sizeof(struct radeon_regs)); 2450 2451 /* Setup Power Management capabilities */ 2452 if (default_dynclk < -1) { 2453 /* -2 is special: means ON on mobility chips and do not 2454 * change on others 2455 */ 2456 radeonfb_pm_init(rinfo, rinfo->is_mobility ? 1 : -1, ignore_devlist, force_sleep); 2457 } else 2458 radeonfb_pm_init(rinfo, default_dynclk, ignore_devlist, force_sleep); 2459 2460 pci_set_drvdata(pdev, info); 2461 2462 /* Register with fbdev layer */ 2463 ret = register_framebuffer(info); 2464 if (ret < 0) { 2465 printk (KERN_ERR "radeonfb (%s): could not register framebuffer\n", 2466 pci_name(rinfo->pdev)); 2467 goto err_unmap_fb; 2468 } 2469 2470 if (!nomtrr) 2471 rinfo->wc_cookie = arch_phys_wc_add(rinfo->fb_base_phys, 2472 rinfo->video_ram); 2473 2474 if (backlight) 2475 radeonfb_bl_init(rinfo); 2476 2477 printk ("radeonfb (%s): %s\n", pci_name(rinfo->pdev), rinfo->name); 2478 2479 if (rinfo->bios_seg) 2480 radeon_unmap_ROM(rinfo, pdev); 2481 pr_debug("radeonfb_pci_register END\n"); 2482 2483 return 0; 2484 err_unmap_fb: 2485 iounmap(rinfo->fb_base); 2486 err_unmap_rom: 2487 kfree(rinfo->mon1_EDID); 2488 kfree(rinfo->mon2_EDID); 2489 if (rinfo->mon1_modedb) 2490 fb_destroy_modedb(rinfo->mon1_modedb); 2491 fb_dealloc_cmap(&info->cmap); 2492 #ifdef CONFIG_FB_RADEON_I2C 2493 radeon_delete_i2c_busses(rinfo); 2494 #endif 2495 if (rinfo->bios_seg) 2496 radeon_unmap_ROM(rinfo, pdev); 2497 iounmap(rinfo->mmio_base); 2498 err_release_pci2: 2499 pci_release_region(pdev, 2); 2500 err_release_pci0: 2501 pci_release_region(pdev, 0); 2502 err_release_fb: 2503 framebuffer_release(info); 2504 err_disable: 2505 err_out: 2506 return ret; 2507 } 2508 2509 2510 2511 static void radeonfb_pci_unregister(struct pci_dev *pdev) 2512 { 2513 struct fb_info *info = pci_get_drvdata(pdev); 2514 struct radeonfb_info *rinfo = info->par; 2515 2516 if (!rinfo) 2517 return; 2518 2519 radeonfb_pm_exit(rinfo); 2520 2521 if (rinfo->mon1_EDID) 2522 sysfs_remove_bin_file(&rinfo->pdev->dev.kobj, &edid1_attr); 2523 if (rinfo->mon2_EDID) 2524 sysfs_remove_bin_file(&rinfo->pdev->dev.kobj, &edid2_attr); 2525 2526 del_timer_sync(&rinfo->lvds_timer); 2527 arch_phys_wc_del(rinfo->wc_cookie); 2528 unregister_framebuffer(info); 2529 2530 radeonfb_bl_exit(rinfo); 2531 2532 iounmap(rinfo->mmio_base); 2533 iounmap(rinfo->fb_base); 2534 2535 pci_release_region(pdev, 2); 2536 pci_release_region(pdev, 0); 2537 2538 kfree(rinfo->mon1_EDID); 2539 kfree(rinfo->mon2_EDID); 2540 if (rinfo->mon1_modedb) 2541 fb_destroy_modedb(rinfo->mon1_modedb); 2542 #ifdef CONFIG_FB_RADEON_I2C 2543 radeon_delete_i2c_busses(rinfo); 2544 #endif 2545 fb_dealloc_cmap(&info->cmap); 2546 framebuffer_release(info); 2547 } 2548 2549 #ifdef CONFIG_PM 2550 #define RADEONFB_PCI_PM_OPS (&radeonfb_pci_pm_ops) 2551 #else 2552 #define RADEONFB_PCI_PM_OPS NULL 2553 #endif 2554 2555 static struct pci_driver radeonfb_driver = { 2556 .name = "radeonfb", 2557 .id_table = radeonfb_pci_table, 2558 .probe = radeonfb_pci_register, 2559 .remove = radeonfb_pci_unregister, 2560 .driver.pm = RADEONFB_PCI_PM_OPS, 2561 }; 2562 2563 #ifndef MODULE 2564 static int __init radeonfb_setup (char *options) 2565 { 2566 char *this_opt; 2567 2568 if (!options || !*options) 2569 return 0; 2570 2571 while ((this_opt = strsep (&options, ",")) != NULL) { 2572 if (!*this_opt) 2573 continue; 2574 2575 if (!strncmp(this_opt, "noaccel", 7)) { 2576 noaccel = 1; 2577 } else if (!strncmp(this_opt, "mirror", 6)) { 2578 mirror = 1; 2579 } else if (!strncmp(this_opt, "force_dfp", 9)) { 2580 force_dfp = 1; 2581 } else if (!strncmp(this_opt, "panel_yres:", 11)) { 2582 panel_yres = simple_strtoul((this_opt+11), NULL, 0); 2583 } else if (!strncmp(this_opt, "backlight:", 10)) { 2584 backlight = simple_strtoul(this_opt+10, NULL, 0); 2585 } else if (!strncmp(this_opt, "nomtrr", 6)) { 2586 nomtrr = 1; 2587 } else if (!strncmp(this_opt, "nomodeset", 9)) { 2588 nomodeset = 1; 2589 } else if (!strncmp(this_opt, "force_measure_pll", 17)) { 2590 force_measure_pll = 1; 2591 } else if (!strncmp(this_opt, "ignore_edid", 11)) { 2592 ignore_edid = 1; 2593 #if defined(CONFIG_PM) && defined(CONFIG_X86) 2594 } else if (!strncmp(this_opt, "force_sleep", 11)) { 2595 force_sleep = 1; 2596 } else if (!strncmp(this_opt, "ignore_devlist", 14)) { 2597 ignore_devlist = 1; 2598 #endif 2599 } else 2600 mode_option = this_opt; 2601 } 2602 return 0; 2603 } 2604 #endif /* MODULE */ 2605 2606 static int __init radeonfb_init (void) 2607 { 2608 #ifndef MODULE 2609 char *option = NULL; 2610 #endif 2611 2612 if (fb_modesetting_disabled("radeonfb")) 2613 return -ENODEV; 2614 2615 #ifndef MODULE 2616 if (fb_get_options("radeonfb", &option)) 2617 return -ENODEV; 2618 radeonfb_setup(option); 2619 #endif 2620 return pci_register_driver (&radeonfb_driver); 2621 } 2622 2623 2624 static void __exit radeonfb_exit (void) 2625 { 2626 pci_unregister_driver (&radeonfb_driver); 2627 } 2628 2629 module_init(radeonfb_init); 2630 module_exit(radeonfb_exit); 2631 2632 MODULE_AUTHOR("Ani Joshi"); 2633 MODULE_DESCRIPTION("framebuffer driver for ATI Radeon chipset"); 2634 MODULE_LICENSE("GPL"); 2635 module_param(noaccel, bool, 0); 2636 module_param(default_dynclk, int, 0); 2637 MODULE_PARM_DESC(default_dynclk, "int: -2=enable on mobility only,-1=do not change,0=off,1=on"); 2638 MODULE_PARM_DESC(noaccel, "bool: disable acceleration"); 2639 module_param(nomodeset, bool, 0); 2640 MODULE_PARM_DESC(nomodeset, "bool: disable actual setting of video mode"); 2641 module_param(mirror, bool, 0); 2642 MODULE_PARM_DESC(mirror, "bool: mirror the display to both monitors"); 2643 module_param(force_dfp, bool, 0); 2644 MODULE_PARM_DESC(force_dfp, "bool: force display to dfp"); 2645 module_param(ignore_edid, bool, 0); 2646 MODULE_PARM_DESC(ignore_edid, "bool: Ignore EDID data when doing DDC probe"); 2647 module_param(monitor_layout, charp, 0); 2648 MODULE_PARM_DESC(monitor_layout, "Specify monitor mapping (like XFree86)"); 2649 module_param(force_measure_pll, bool, 0); 2650 MODULE_PARM_DESC(force_measure_pll, "Force measurement of PLL (debug)"); 2651 module_param(nomtrr, bool, 0); 2652 MODULE_PARM_DESC(nomtrr, "bool: disable use of MTRR registers"); 2653 module_param(panel_yres, int, 0); 2654 MODULE_PARM_DESC(panel_yres, "int: set panel yres"); 2655 module_param(mode_option, charp, 0); 2656 MODULE_PARM_DESC(mode_option, "Specify resolution as \"<xres>x<yres>[-<bpp>][@<refresh>]\" "); 2657 #if defined(CONFIG_PM) && defined(CONFIG_X86) 2658 module_param(force_sleep, bool, 0); 2659 MODULE_PARM_DESC(force_sleep, "bool: force D2 sleep mode on all hardware"); 2660 module_param(ignore_devlist, bool, 0); 2661 MODULE_PARM_DESC(ignore_devlist, "bool: ignore workarounds for bugs in specific laptops"); 2662 #endif 2663