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