1*4882a593Smuzhiyun================= 2*4882a593SmuzhiyunWhat is matroxfb? 3*4882a593Smuzhiyun================= 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun.. [This file is cloned from VesaFB. Thanks go to Gerd Knorr] 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunThis is a driver for a graphic framebuffer for Matrox devices on 9*4882a593SmuzhiyunAlpha, Intel and PPC boxes. 10*4882a593Smuzhiyun 11*4882a593SmuzhiyunAdvantages: 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun * It provides a nice large console (128 cols + 48 lines with 1024x768) 14*4882a593Smuzhiyun without using tiny, unreadable fonts. 15*4882a593Smuzhiyun * You can run XF{68,86}_FBDev or XFree86 fbdev driver on top of /dev/fb0 16*4882a593Smuzhiyun * Most important: boot logo :-) 17*4882a593Smuzhiyun 18*4882a593SmuzhiyunDisadvantages: 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun * graphic mode is slower than text mode... but you should not notice 21*4882a593Smuzhiyun if you use same resolution as you used in textmode. 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun 24*4882a593SmuzhiyunHow to use it? 25*4882a593Smuzhiyun============== 26*4882a593Smuzhiyun 27*4882a593SmuzhiyunSwitching modes is done using the video=matroxfb:vesa:... boot parameter 28*4882a593Smuzhiyunor using `fbset` program. 29*4882a593Smuzhiyun 30*4882a593SmuzhiyunIf you want, for example, enable a resolution of 1280x1024x24bpp you should 31*4882a593Smuzhiyunpass to the kernel this command line: "video=matroxfb:vesa:0x1BB". 32*4882a593Smuzhiyun 33*4882a593SmuzhiyunYou should compile in both vgacon (to boot if you remove you Matrox from 34*4882a593Smuzhiyunbox) and matroxfb (for graphics mode). You should not compile-in vesafb 35*4882a593Smuzhiyununless you have primary display on non-Matrox VBE2.0 device (see 36*4882a593SmuzhiyunDocumentation/fb/vesafb.rst for details). 37*4882a593Smuzhiyun 38*4882a593SmuzhiyunCurrently supported video modes are (through vesa:... interface, PowerMac 39*4882a593Smuzhiyunhas [as addon] compatibility code): 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun 42*4882a593SmuzhiyunGraphic modes 43*4882a593Smuzhiyun------------- 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun=== ======= ======= ======= ======= ======= 46*4882a593Smuzhiyunbpp 640x400 640x480 768x576 800x600 960x720 47*4882a593Smuzhiyun=== ======= ======= ======= ======= ======= 48*4882a593Smuzhiyun 4 0x12 0x102 49*4882a593Smuzhiyun 8 0x100 0x101 0x180 0x103 0x188 50*4882a593Smuzhiyun 15 0x110 0x181 0x113 0x189 51*4882a593Smuzhiyun 16 0x111 0x182 0x114 0x18A 52*4882a593Smuzhiyun 24 0x1B2 0x184 0x1B5 0x18C 53*4882a593Smuzhiyun 32 0x112 0x183 0x115 0x18B 54*4882a593Smuzhiyun=== ======= ======= ======= ======= ======= 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun 57*4882a593SmuzhiyunGraphic modes (continued) 58*4882a593Smuzhiyun------------------------- 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun=== ======== ======== ========= ========= ========= 61*4882a593Smuzhiyunbpp 1024x768 1152x864 1280x1024 1408x1056 1600x1200 62*4882a593Smuzhiyun=== ======== ======== ========= ========= ========= 63*4882a593Smuzhiyun 4 0x104 0x106 64*4882a593Smuzhiyun 8 0x105 0x190 0x107 0x198 0x11C 65*4882a593Smuzhiyun 15 0x116 0x191 0x119 0x199 0x11D 66*4882a593Smuzhiyun 16 0x117 0x192 0x11A 0x19A 0x11E 67*4882a593Smuzhiyun 24 0x1B8 0x194 0x1BB 0x19C 0x1BF 68*4882a593Smuzhiyun 32 0x118 0x193 0x11B 0x19B 69*4882a593Smuzhiyun=== ======== ======== ========= ========= ========= 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun 72*4882a593SmuzhiyunText modes 73*4882a593Smuzhiyun---------- 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun==== ======= ======= ======== ======== ======== 76*4882a593Smuzhiyuntext 640x400 640x480 1056x344 1056x400 1056x480 77*4882a593Smuzhiyun==== ======= ======= ======== ======== ======== 78*4882a593Smuzhiyun 8x8 0x1C0 0x108 0x10A 0x10B 0x10C 79*4882a593Smuzhiyun8x16 2, 3, 7 0x109 80*4882a593Smuzhiyun==== ======= ======= ======== ======== ======== 81*4882a593Smuzhiyun 82*4882a593SmuzhiyunYou can enter these number either hexadecimal (leading `0x`) or decimal 83*4882a593Smuzhiyun(0x100 = 256). You can also use value + 512 to achieve compatibility 84*4882a593Smuzhiyunwith your old number passed to vesafb. 85*4882a593Smuzhiyun 86*4882a593SmuzhiyunNon-listed number can be achieved by more complicated command-line, for 87*4882a593Smuzhiyunexample 1600x1200x32bpp can be specified by `video=matroxfb:vesa:0x11C,depth:32`. 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun 90*4882a593SmuzhiyunX11 91*4882a593Smuzhiyun=== 92*4882a593Smuzhiyun 93*4882a593SmuzhiyunXF{68,86}_FBDev should work just fine, but it is non-accelerated. On non-intel 94*4882a593Smuzhiyunarchitectures there are some glitches for 24bpp videomodes. 8, 16 and 32bpp 95*4882a593Smuzhiyunworks fine. 96*4882a593Smuzhiyun 97*4882a593SmuzhiyunRunning another (accelerated) X-Server like XF86_SVGA works too. But (at least) 98*4882a593SmuzhiyunXFree servers have big troubles in multihead configurations (even on first 99*4882a593Smuzhiyunhead, not even talking about second). Running XFree86 4.x accelerated mga 100*4882a593Smuzhiyundriver is possible, but you must not enable DRI - if you do, resolution and 101*4882a593Smuzhiyuncolor depth of your X desktop must match resolution and color depths of your 102*4882a593Smuzhiyunvirtual consoles, otherwise X will corrupt accelerator settings. 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun 105*4882a593SmuzhiyunSVGALib 106*4882a593Smuzhiyun======= 107*4882a593Smuzhiyun 108*4882a593SmuzhiyunDriver contains SVGALib compatibility code. It is turned on by choosing textual 109*4882a593Smuzhiyunmode for console. You can do it at boot time by using videomode 110*4882a593Smuzhiyun2,3,7,0x108-0x10C or 0x1C0. At runtime, `fbset -depth 0` does this work. 111*4882a593SmuzhiyunUnfortunately, after SVGALib application exits, screen contents is corrupted. 112*4882a593SmuzhiyunSwitching to another console and back fixes it. I hope that it is SVGALib's 113*4882a593Smuzhiyunproblem and not mine, but I'm not sure. 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun 116*4882a593SmuzhiyunConfiguration 117*4882a593Smuzhiyun============= 118*4882a593Smuzhiyun 119*4882a593SmuzhiyunYou can pass kernel command line options to matroxfb with 120*4882a593Smuzhiyun`video=matroxfb:option1,option2:value2,option3` (multiple options should be 121*4882a593Smuzhiyunseparated by comma, values are separated from options by `:`). 122*4882a593SmuzhiyunAccepted options: 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun============ =================================================================== 125*4882a593Smuzhiyunmem:X size of memory (X can be in megabytes, kilobytes or bytes) 126*4882a593Smuzhiyun You can only decrease value determined by driver because of 127*4882a593Smuzhiyun it always probe for memory. Default is to use whole detected 128*4882a593Smuzhiyun memory usable for on-screen display (i.e. max. 8 MB). 129*4882a593Smuzhiyundisabled do not load driver; you can use also `off`, but `disabled` 130*4882a593Smuzhiyun is here too. 131*4882a593Smuzhiyunenabled load driver, if you have `video=matroxfb:disabled` in LILO 132*4882a593Smuzhiyun configuration, you can override it by this (you cannot override 133*4882a593Smuzhiyun `off`). It is default. 134*4882a593Smuzhiyunnoaccel do not use acceleration engine. It does not work on Alphas. 135*4882a593Smuzhiyunaccel use acceleration engine. It is default. 136*4882a593Smuzhiyunnopan create initial consoles with vyres = yres, thus disabling virtual 137*4882a593Smuzhiyun scrolling. 138*4882a593Smuzhiyunpan create initial consoles as tall as possible (vyres = memory/vxres). 139*4882a593Smuzhiyun It is default. 140*4882a593Smuzhiyunnopciretry disable PCI retries. It is needed for some broken chipsets, 141*4882a593Smuzhiyun it is autodetected for intel's 82437. In this case device does 142*4882a593Smuzhiyun not comply to PCI 2.1 specs (it will not guarantee that every 143*4882a593Smuzhiyun transaction terminate with success or retry in 32 PCLK). 144*4882a593Smuzhiyunpciretry enable PCI retries. It is default, except for intel's 82437. 145*4882a593Smuzhiyunnovga disables VGA I/O ports. It is default if BIOS did not enable 146*4882a593Smuzhiyun device. You should not use this option, some boards then do not 147*4882a593Smuzhiyun restart without power off. 148*4882a593Smuzhiyunvga preserve state of VGA I/O ports. It is default. Driver does not 149*4882a593Smuzhiyun enable VGA I/O if BIOS did not it (it is not safe to enable it in 150*4882a593Smuzhiyun most cases). 151*4882a593Smuzhiyunnobios disables BIOS ROM. It is default if BIOS did not enable BIOS 152*4882a593Smuzhiyun itself. You should not use this option, some boards then do not 153*4882a593Smuzhiyun restart without power off. 154*4882a593Smuzhiyunbios preserve state of BIOS ROM. It is default. Driver does not enable 155*4882a593Smuzhiyun BIOS if BIOS was not enabled before. 156*4882a593Smuzhiyunnoinit tells driver, that devices were already initialized. You should use 157*4882a593Smuzhiyun it if you have G100 and/or if driver cannot detect memory, you see 158*4882a593Smuzhiyun strange pattern on screen and so on. Devices not enabled by BIOS 159*4882a593Smuzhiyun are still initialized. It is default. 160*4882a593Smuzhiyuninit driver initializes every device it knows about. 161*4882a593Smuzhiyunmemtype specifies memory type, implies 'init'. This is valid only for G200 162*4882a593Smuzhiyun and G400 and has following meaning: 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun G200: 165*4882a593Smuzhiyun - 0 -> 2x128Kx32 chips, 2MB onboard, probably sgram 166*4882a593Smuzhiyun - 1 -> 2x128Kx32 chips, 4MB onboard, probably sgram 167*4882a593Smuzhiyun - 2 -> 2x256Kx32 chips, 4MB onboard, probably sgram 168*4882a593Smuzhiyun - 3 -> 2x256Kx32 chips, 8MB onboard, probably sgram 169*4882a593Smuzhiyun - 4 -> 2x512Kx16 chips, 8/16MB onboard, probably sdram only 170*4882a593Smuzhiyun - 5 -> same as above 171*4882a593Smuzhiyun - 6 -> 4x128Kx32 chips, 4MB onboard, probably sgram 172*4882a593Smuzhiyun - 7 -> 4x128Kx32 chips, 8MB onboard, probably sgram 173*4882a593Smuzhiyun G400: 174*4882a593Smuzhiyun - 0 -> 2x512Kx16 SDRAM, 16/32MB 175*4882a593Smuzhiyun - 2x512Kx32 SGRAM, 16/32MB 176*4882a593Smuzhiyun - 1 -> 2x256Kx32 SGRAM, 8/16MB 177*4882a593Smuzhiyun - 2 -> 4x128Kx32 SGRAM, 8/16MB 178*4882a593Smuzhiyun - 3 -> 4x512Kx32 SDRAM, 32MB 179*4882a593Smuzhiyun - 4 -> 4x256Kx32 SGRAM, 16/32MB 180*4882a593Smuzhiyun - 5 -> 2x1Mx32 SDRAM, 32MB 181*4882a593Smuzhiyun - 6 -> reserved 182*4882a593Smuzhiyun - 7 -> reserved 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun You should use sdram or sgram parameter in addition to memtype 185*4882a593Smuzhiyun parameter. 186*4882a593Smuzhiyunnomtrr disables write combining on frame buffer. This slows down driver 187*4882a593Smuzhiyun but there is reported minor incompatibility between GUS DMA and 188*4882a593Smuzhiyun XFree under high loads if write combining is enabled (sound 189*4882a593Smuzhiyun dropouts). 190*4882a593Smuzhiyunmtrr enables write combining on frame buffer. It speeds up video 191*4882a593Smuzhiyun accesses much. It is default. You must have MTRR support enabled 192*4882a593Smuzhiyun in kernel and your CPU must have MTRR (f.e. Pentium II have them). 193*4882a593Smuzhiyunsgram tells to driver that you have Gxx0 with SGRAM memory. It has no 194*4882a593Smuzhiyun effect without `init`. 195*4882a593Smuzhiyunsdram tells to driver that you have Gxx0 with SDRAM memory. 196*4882a593Smuzhiyun It is a default. 197*4882a593Smuzhiyuninv24 change timings parameters for 24bpp modes on Millennium and 198*4882a593Smuzhiyun Millennium II. Specify this if you see strange color shadows 199*4882a593Smuzhiyun around characters. 200*4882a593Smuzhiyunnoinv24 use standard timings. It is the default. 201*4882a593Smuzhiyuninverse invert colors on screen (for LCD displays) 202*4882a593Smuzhiyunnoinverse show true colors on screen. It is default. 203*4882a593Smuzhiyundev:X bind driver to device X. Driver numbers device from 0 up to N, 204*4882a593Smuzhiyun where device 0 is first `known` device found, 1 second and so on. 205*4882a593Smuzhiyun lspci lists devices in this order. 206*4882a593Smuzhiyun Default is `every` known device. 207*4882a593Smuzhiyunnohwcursor disables hardware cursor (use software cursor instead). 208*4882a593Smuzhiyunhwcursor enables hardware cursor. It is default. If you are using 209*4882a593Smuzhiyun non-accelerated mode (`noaccel` or `fbset -accel false`), software 210*4882a593Smuzhiyun cursor is used (except for text mode). 211*4882a593Smuzhiyunnoblink disables cursor blinking. Cursor in text mode always blinks (hw 212*4882a593Smuzhiyun limitation). 213*4882a593Smuzhiyunblink enables cursor blinking. It is default. 214*4882a593Smuzhiyunnofastfont disables fastfont feature. It is default. 215*4882a593Smuzhiyunfastfont:X enables fastfont feature. X specifies size of memory reserved for 216*4882a593Smuzhiyun font data, it must be >= (fontwidth*fontheight*chars_in_font)/8. 217*4882a593Smuzhiyun It is faster on Gx00 series, but slower on older cards. 218*4882a593Smuzhiyungrayscale enable grayscale summing. It works in PSEUDOCOLOR modes (text, 219*4882a593Smuzhiyun 4bpp, 8bpp). In DIRECTCOLOR modes it is limited to characters 220*4882a593Smuzhiyun displayed through putc/putcs. Direct accesses to framebuffer 221*4882a593Smuzhiyun can paint colors. 222*4882a593Smuzhiyunnograyscale disable grayscale summing. It is default. 223*4882a593Smuzhiyuncross4MB enables that pixel line can cross 4MB boundary. It is default for 224*4882a593Smuzhiyun non-Millennium. 225*4882a593Smuzhiyunnocross4MB pixel line must not cross 4MB boundary. It is default for 226*4882a593Smuzhiyun Millennium I or II, because of these devices have hardware 227*4882a593Smuzhiyun limitations which do not allow this. But this option is 228*4882a593Smuzhiyun incompatible with some (if not all yet released) versions of 229*4882a593Smuzhiyun XF86_FBDev. 230*4882a593Smuzhiyundfp enables digital flat panel interface. This option is incompatible 231*4882a593Smuzhiyun with secondary (TV) output - if DFP is active, TV output must be 232*4882a593Smuzhiyun inactive and vice versa. DFP always uses same timing as primary 233*4882a593Smuzhiyun (monitor) output. 234*4882a593Smuzhiyundfp:X use settings X for digital flat panel interface. X is number from 235*4882a593Smuzhiyun 0 to 0xFF, and meaning of each individual bit is described in 236*4882a593Smuzhiyun G400 manual, in description of DAC register 0x1F. For normal 237*4882a593Smuzhiyun operation you should set all bits to zero, except lowest bit. This 238*4882a593Smuzhiyun lowest bit selects who is source of display clocks, whether G400, 239*4882a593Smuzhiyun or panel. Default value is now read back from hardware - so you 240*4882a593Smuzhiyun should specify this value only if you are also using `init` 241*4882a593Smuzhiyun parameter. 242*4882a593Smuzhiyunoutputs:XYZ set mapping between CRTC and outputs. Each letter can have value 243*4882a593Smuzhiyun of 0 (for no CRTC), 1 (CRTC1) or 2 (CRTC2), and first letter 244*4882a593Smuzhiyun corresponds to primary analog output, second letter to the 245*4882a593Smuzhiyun secondary analog output and third letter to the DVI output. 246*4882a593Smuzhiyun Default setting is 100 for cards below G400 or G400 without DFP, 247*4882a593Smuzhiyun 101 for G400 with DFP, and 111 for G450 and G550. You can set 248*4882a593Smuzhiyun mapping only on first card, use matroxset for setting up other 249*4882a593Smuzhiyun devices. 250*4882a593Smuzhiyunvesa:X selects startup videomode. X is number from 0 to 0x1FF, see table 251*4882a593Smuzhiyun above for detailed explanation. Default is 640x480x8bpp if driver 252*4882a593Smuzhiyun has 8bpp support. Otherwise first available of 640x350x4bpp, 253*4882a593Smuzhiyun 640x480x15bpp, 640x480x24bpp, 640x480x32bpp or 80x25 text 254*4882a593Smuzhiyun (80x25 text is always available). 255*4882a593Smuzhiyun============ =================================================================== 256*4882a593Smuzhiyun 257*4882a593SmuzhiyunIf you are not satisfied with videomode selected by `vesa` option, you 258*4882a593Smuzhiyuncan modify it with these options: 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun============ =================================================================== 261*4882a593Smuzhiyunxres:X horizontal resolution, in pixels. Default is derived from `vesa` 262*4882a593Smuzhiyun option. 263*4882a593Smuzhiyunyres:X vertical resolution, in pixel lines. Default is derived from `vesa` 264*4882a593Smuzhiyun option. 265*4882a593Smuzhiyunupper:X top boundary: lines between end of VSYNC pulse and start of first 266*4882a593Smuzhiyun pixel line of picture. Default is derived from `vesa` option. 267*4882a593Smuzhiyunlower:X bottom boundary: lines between end of picture and start of VSYNC 268*4882a593Smuzhiyun pulse. Default is derived from `vesa` option. 269*4882a593Smuzhiyunvslen:X length of VSYNC pulse, in lines. Default is derived from `vesa` 270*4882a593Smuzhiyun option. 271*4882a593Smuzhiyunleft:X left boundary: pixels between end of HSYNC pulse and first pixel. 272*4882a593Smuzhiyun Default is derived from `vesa` option. 273*4882a593Smuzhiyunright:X right boundary: pixels between end of picture and start of HSYNC 274*4882a593Smuzhiyun pulse. Default is derived from `vesa` option. 275*4882a593Smuzhiyunhslen:X length of HSYNC pulse, in pixels. Default is derived from `vesa` 276*4882a593Smuzhiyun option. 277*4882a593Smuzhiyunpixclock:X dotclocks, in ps (picoseconds). Default is derived from `vesa` 278*4882a593Smuzhiyun option and from `fh` and `fv` options. 279*4882a593Smuzhiyunsync:X sync. pulse - bit 0 inverts HSYNC polarity, bit 1 VSYNC polarity. 280*4882a593Smuzhiyun If bit 3 (value 0x08) is set, composite sync instead of HSYNC is 281*4882a593Smuzhiyun generated. If bit 5 (value 0x20) is set, sync on green is turned 282*4882a593Smuzhiyun on. Do not forget that if you want sync on green, you also probably 283*4882a593Smuzhiyun want composite sync. 284*4882a593Smuzhiyun Default depends on `vesa`. 285*4882a593Smuzhiyundepth:X Bits per pixel: 0=text, 4,8,15,16,24 or 32. Default depends on 286*4882a593Smuzhiyun `vesa`. 287*4882a593Smuzhiyun============ =================================================================== 288*4882a593Smuzhiyun 289*4882a593SmuzhiyunIf you know capabilities of your monitor, you can specify some (or all) of 290*4882a593Smuzhiyun`maxclk`, `fh` and `fv`. In this case, `pixclock` is computed so that 291*4882a593Smuzhiyunpixclock <= maxclk, real_fh <= fh and real_fv <= fv. 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun============ ================================================================== 294*4882a593Smuzhiyunmaxclk:X maximum dotclock. X can be specified in MHz, kHz or Hz. Default is 295*4882a593Smuzhiyun `don`t care`. 296*4882a593Smuzhiyunfh:X maximum horizontal synchronization frequency. X can be specified 297*4882a593Smuzhiyun in kHz or Hz. Default is `don't care`. 298*4882a593Smuzhiyunfv:X maximum vertical frequency. X must be specified in Hz. Default is 299*4882a593Smuzhiyun 70 for modes derived from `vesa` with yres <= 400, 60Hz for 300*4882a593Smuzhiyun yres > 400. 301*4882a593Smuzhiyun============ ================================================================== 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun 304*4882a593SmuzhiyunLimitations 305*4882a593Smuzhiyun=========== 306*4882a593Smuzhiyun 307*4882a593SmuzhiyunThere are known and unknown bugs, features and misfeatures. 308*4882a593SmuzhiyunCurrently there are following known bugs: 309*4882a593Smuzhiyun 310*4882a593Smuzhiyun - SVGALib does not restore screen on exit 311*4882a593Smuzhiyun - generic fbcon-cfbX procedures do not work on Alphas. Due to this, 312*4882a593Smuzhiyun `noaccel` (and cfb4 accel) driver does not work on Alpha. So everyone 313*4882a593Smuzhiyun with access to `/dev/fb*` on Alpha can hang machine (you should restrict 314*4882a593Smuzhiyun access to `/dev/fb*` - everyone with access to this device can destroy 315*4882a593Smuzhiyun your monitor, believe me...). 316*4882a593Smuzhiyun - 24bpp does not support correctly XF-FBDev on big-endian architectures. 317*4882a593Smuzhiyun - interlaced text mode is not supported; it looks like hardware limitation, 318*4882a593Smuzhiyun but I'm not sure. 319*4882a593Smuzhiyun - Gxx0 SGRAM/SDRAM is not autodetected. 320*4882a593Smuzhiyun - maybe more... 321*4882a593Smuzhiyun 322*4882a593SmuzhiyunAnd following misfeatures: 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun - SVGALib does not restore screen on exit. 325*4882a593Smuzhiyun - pixclock for text modes is limited by hardware to 326*4882a593Smuzhiyun 327*4882a593Smuzhiyun - 83 MHz on G200 328*4882a593Smuzhiyun - 66 MHz on Millennium I 329*4882a593Smuzhiyun - 60 MHz on Millennium II 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun Because I have no access to other devices, I do not know specific 332*4882a593Smuzhiyun frequencies for them. So driver does not check this and allows you to 333*4882a593Smuzhiyun set frequency higher that this. It causes sparks, black holes and other 334*4882a593Smuzhiyun pretty effects on screen. Device was not destroyed during tests. :-) 335*4882a593Smuzhiyun - my Millennium G200 oscillator has frequency range from 35 MHz to 380 MHz 336*4882a593Smuzhiyun (and it works with 8bpp on about 320 MHz dotclocks (and changed mclk)). 337*4882a593Smuzhiyun But Matrox says on product sheet that VCO limit is 50-250 MHz, so I believe 338*4882a593Smuzhiyun them (maybe that chip overheats, but it has a very big cooler (G100 has 339*4882a593Smuzhiyun none), so it should work). 340*4882a593Smuzhiyun - special mixed video/graphics videomodes of Mystique and Gx00 - 2G8V16 and 341*4882a593Smuzhiyun G16V16 are not supported 342*4882a593Smuzhiyun - color keying is not supported 343*4882a593Smuzhiyun - feature connector of Mystique and Gx00 is set to VGA mode (it is disabled 344*4882a593Smuzhiyun by BIOS) 345*4882a593Smuzhiyun - DDC (monitor detection) is supported through dualhead driver 346*4882a593Smuzhiyun - some check for input values are not so strict how it should be (you can 347*4882a593Smuzhiyun specify vslen=4000 and so on). 348*4882a593Smuzhiyun - maybe more... 349*4882a593Smuzhiyun 350*4882a593SmuzhiyunAnd following features: 351*4882a593Smuzhiyun 352*4882a593Smuzhiyun - 4bpp is available only on Millennium I and Millennium II. It is hardware 353*4882a593Smuzhiyun limitation. 354*4882a593Smuzhiyun - selection between 1:5:5:5 and 5:6:5 16bpp videomode is done by -rgba 355*4882a593Smuzhiyun option of fbset: "fbset -depth 16 -rgba 5,5,5" selects 1:5:5:5, anything 356*4882a593Smuzhiyun else selects 5:6:5 mode. 357*4882a593Smuzhiyun - text mode uses 6 bit VGA palette instead of 8 bit (one of 262144 colors 358*4882a593Smuzhiyun instead of one of 16M colors). It is due to hardware limitation of 359*4882a593Smuzhiyun Millennium I/II and SVGALib compatibility. 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun 362*4882a593SmuzhiyunBenchmarks 363*4882a593Smuzhiyun========== 364*4882a593SmuzhiyunIt is time to redraw whole screen 1000 times in 1024x768, 60Hz. It is 365*4882a593Smuzhiyuntime for draw 6144000 characters on screen through /dev/vcsa 366*4882a593Smuzhiyun(for 32bpp it is about 3GB of data (exactly 3000 MB); for 8x16 font in 367*4882a593Smuzhiyun16 seconds, i.e. 187 MBps). 368*4882a593SmuzhiyunTimes were obtained from one older version of driver, now they are about 3% 369*4882a593Smuzhiyunfaster, it is kernel-space only time on P-II/350 MHz, Millennium I in 33 MHz 370*4882a593SmuzhiyunPCI slot, G200 in AGP 2x slot. I did not test vgacon:: 371*4882a593Smuzhiyun 372*4882a593Smuzhiyun NOACCEL 373*4882a593Smuzhiyun 8x16 12x22 374*4882a593Smuzhiyun Millennium I G200 Millennium I G200 375*4882a593Smuzhiyun 8bpp 16.42 9.54 12.33 9.13 376*4882a593Smuzhiyun 16bpp 21.00 15.70 19.11 15.02 377*4882a593Smuzhiyun 24bpp 36.66 36.66 35.00 35.00 378*4882a593Smuzhiyun 32bpp 35.00 30.00 33.85 28.66 379*4882a593Smuzhiyun 380*4882a593Smuzhiyun ACCEL, nofastfont 381*4882a593Smuzhiyun 8x16 12x22 6x11 382*4882a593Smuzhiyun Millennium I G200 Millennium I G200 Millennium I G200 383*4882a593Smuzhiyun 8bpp 7.79 7.24 13.55 7.78 30.00 21.01 384*4882a593Smuzhiyun 16bpp 9.13 7.78 16.16 7.78 30.00 21.01 385*4882a593Smuzhiyun 24bpp 14.17 10.72 18.69 10.24 34.99 21.01 386*4882a593Smuzhiyun 32bpp 16.15 16.16 18.73 13.09 34.99 21.01 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun ACCEL, fastfont 389*4882a593Smuzhiyun 8x16 12x22 6x11 390*4882a593Smuzhiyun Millennium I G200 Millennium I G200 Millennium I G200 391*4882a593Smuzhiyun 8bpp 8.41 6.01 6.54 4.37 16.00 10.51 392*4882a593Smuzhiyun 16bpp 9.54 9.12 8.76 6.17 17.52 14.01 393*4882a593Smuzhiyun 24bpp 15.00 12.36 11.67 10.00 22.01 18.32 394*4882a593Smuzhiyun 32bpp 16.18 18.29* 12.71 12.74 24.44 21.00 395*4882a593Smuzhiyun 396*4882a593Smuzhiyun TEXT 397*4882a593Smuzhiyun 8x16 398*4882a593Smuzhiyun Millennium I G200 399*4882a593Smuzhiyun TEXT 3.29 1.50 400*4882a593Smuzhiyun 401*4882a593Smuzhiyun * Yes, it is slower than Millennium I. 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun 404*4882a593SmuzhiyunDualhead G400 405*4882a593Smuzhiyun============= 406*4882a593SmuzhiyunDriver supports dualhead G400 with some limitations: 407*4882a593Smuzhiyun + secondary head shares videomemory with primary head. It is not problem 408*4882a593Smuzhiyun if you have 32MB of videoram, but if you have only 16MB, you may have 409*4882a593Smuzhiyun to think twice before choosing videomode (for example twice 1880x1440x32bpp 410*4882a593Smuzhiyun is not possible). 411*4882a593Smuzhiyun + due to hardware limitation, secondary head can use only 16 and 32bpp 412*4882a593Smuzhiyun videomodes. 413*4882a593Smuzhiyun + secondary head is not accelerated. There were bad problems with accelerated 414*4882a593Smuzhiyun XFree when secondary head used to use acceleration. 415*4882a593Smuzhiyun + secondary head always powerups in 640x480@60-32 videomode. You have to use 416*4882a593Smuzhiyun fbset to change this mode. 417*4882a593Smuzhiyun + secondary head always powerups in monitor mode. You have to use fbmatroxset 418*4882a593Smuzhiyun to change it to TV mode. Also, you must select at least 525 lines for 419*4882a593Smuzhiyun NTSC output and 625 lines for PAL output. 420*4882a593Smuzhiyun + kernel is not fully multihead ready. So some things are impossible to do. 421*4882a593Smuzhiyun + if you compiled it as module, you must insert i2c-matroxfb, matroxfb_maven 422*4882a593Smuzhiyun and matroxfb_crtc2 into kernel. 423*4882a593Smuzhiyun 424*4882a593Smuzhiyun 425*4882a593SmuzhiyunDualhead G450 426*4882a593Smuzhiyun============= 427*4882a593SmuzhiyunDriver supports dualhead G450 with some limitations: 428*4882a593Smuzhiyun + secondary head shares videomemory with primary head. It is not problem 429*4882a593Smuzhiyun if you have 32MB of videoram, but if you have only 16MB, you may have 430*4882a593Smuzhiyun to think twice before choosing videomode. 431*4882a593Smuzhiyun + due to hardware limitation, secondary head can use only 16 and 32bpp 432*4882a593Smuzhiyun videomodes. 433*4882a593Smuzhiyun + secondary head is not accelerated. 434*4882a593Smuzhiyun + secondary head always powerups in 640x480@60-32 videomode. You have to use 435*4882a593Smuzhiyun fbset to change this mode. 436*4882a593Smuzhiyun + TV output is not supported 437*4882a593Smuzhiyun + kernel is not fully multihead ready, so some things are impossible to do. 438*4882a593Smuzhiyun + if you compiled it as module, you must insert matroxfb_g450 and matroxfb_crtc2 439*4882a593Smuzhiyun into kernel. 440*4882a593Smuzhiyun 441*4882a593SmuzhiyunPetr Vandrovec <vandrove@vc.cvut.cz> 442