diff options
Diffstat (limited to 'Documentation/fb/matroxfb.rst')
-rw-r--r-- | Documentation/fb/matroxfb.rst | 441 |
1 files changed, 441 insertions, 0 deletions
diff --git a/Documentation/fb/matroxfb.rst b/Documentation/fb/matroxfb.rst new file mode 100644 index 0000000000..6158c49c85 --- /dev/null +++ b/Documentation/fb/matroxfb.rst @@ -0,0 +1,441 @@ +================= +What is matroxfb? +================= + +.. [This file is cloned from VesaFB. Thanks go to Gerd Knorr] + + +This is a driver for a graphic framebuffer for Matrox devices on +Alpha, Intel and PPC boxes. + +Advantages: + + * It provides a nice large console (128 cols + 48 lines with 1024x768) + without using tiny, unreadable fonts. + * You can run XF{68,86}_FBDev or XFree86 fbdev driver on top of /dev/fb0 + * Most important: boot logo :-) + +Disadvantages: + + * graphic mode is slower than text mode... but you should not notice + if you use same resolution as you used in textmode. + + +How to use it? +============== + +Switching modes is done using the video=matroxfb:vesa:... boot parameter +or using `fbset` program. + +If you want, for example, enable a resolution of 1280x1024x24bpp you should +pass to the kernel this command line: "video=matroxfb:vesa:0x1BB". + +You should compile in both vgacon (to boot if you remove you Matrox from +box) and matroxfb (for graphics mode). You should not compile-in vesafb +unless you have primary display on non-Matrox VBE2.0 device (see +Documentation/fb/vesafb.rst for details). + +Currently supported video modes are (through vesa:... interface, PowerMac +has [as addon] compatibility code): + + +Graphic modes +------------- + +=== ======= ======= ======= ======= ======= +bpp 640x400 640x480 768x576 800x600 960x720 +=== ======= ======= ======= ======= ======= + 4 0x12 0x102 + 8 0x100 0x101 0x180 0x103 0x188 + 15 0x110 0x181 0x113 0x189 + 16 0x111 0x182 0x114 0x18A + 24 0x1B2 0x184 0x1B5 0x18C + 32 0x112 0x183 0x115 0x18B +=== ======= ======= ======= ======= ======= + + +Graphic modes (continued) +------------------------- + +=== ======== ======== ========= ========= ========= +bpp 1024x768 1152x864 1280x1024 1408x1056 1600x1200 +=== ======== ======== ========= ========= ========= + 4 0x104 0x106 + 8 0x105 0x190 0x107 0x198 0x11C + 15 0x116 0x191 0x119 0x199 0x11D + 16 0x117 0x192 0x11A 0x19A 0x11E + 24 0x1B8 0x194 0x1BB 0x19C 0x1BF + 32 0x118 0x193 0x11B 0x19B +=== ======== ======== ========= ========= ========= + + +Text modes +---------- + +==== ======= ======= ======== ======== ======== +text 640x400 640x480 1056x344 1056x400 1056x480 +==== ======= ======= ======== ======== ======== + 8x8 0x1C0 0x108 0x10A 0x10B 0x10C +8x16 2, 3, 7 0x109 +==== ======= ======= ======== ======== ======== + +You can enter these number either hexadecimal (leading `0x`) or decimal +(0x100 = 256). You can also use value + 512 to achieve compatibility +with your old number passed to vesafb. + +Non-listed number can be achieved by more complicated command-line, for +example 1600x1200x32bpp can be specified by `video=matroxfb:vesa:0x11C,depth:32`. + + +X11 +=== + +XF{68,86}_FBDev should work just fine, but it is non-accelerated. On non-intel +architectures there are some glitches for 24bpp videomodes. 8, 16 and 32bpp +works fine. + +Running another (accelerated) X-Server like XF86_SVGA works too. But (at least) +XFree servers have big troubles in multihead configurations (even on first +head, not even talking about second). Running XFree86 4.x accelerated mga +driver is possible, but you must not enable DRI - if you do, resolution and +color depth of your X desktop must match resolution and color depths of your +virtual consoles, otherwise X will corrupt accelerator settings. + + +SVGALib +======= + +Driver contains SVGALib compatibility code. It is turned on by choosing textual +mode for console. You can do it at boot time by using videomode +2,3,7,0x108-0x10C or 0x1C0. At runtime, `fbset -depth 0` does this work. +Unfortunately, after SVGALib application exits, screen contents is corrupted. +Switching to another console and back fixes it. I hope that it is SVGALib's +problem and not mine, but I'm not sure. + + +Configuration +============= + +You can pass kernel command line options to matroxfb with +`video=matroxfb:option1,option2:value2,option3` (multiple options should be +separated by comma, values are separated from options by `:`). +Accepted options: + +============ =================================================================== +mem:X size of memory (X can be in megabytes, kilobytes or bytes) + You can only decrease value determined by driver because of + it always probe for memory. Default is to use whole detected + memory usable for on-screen display (i.e. max. 8 MB). +disabled do not load driver; you can use also `off`, but `disabled` + is here too. +enabled load driver, if you have `video=matroxfb:disabled` in LILO + configuration, you can override it by this (you cannot override + `off`). It is default. +noaccel do not use acceleration engine. It does not work on Alphas. +accel use acceleration engine. It is default. +nopan create initial consoles with vyres = yres, thus disabling virtual + scrolling. +pan create initial consoles as tall as possible (vyres = memory/vxres). + It is default. +nopciretry disable PCI retries. It is needed for some broken chipsets, + it is autodetected for intel's 82437. In this case device does + not comply to PCI 2.1 specs (it will not guarantee that every + transaction terminate with success or retry in 32 PCLK). +pciretry enable PCI retries. It is default, except for intel's 82437. +novga disables VGA I/O ports. It is default if BIOS did not enable + device. You should not use this option, some boards then do not + restart without power off. +vga preserve state of VGA I/O ports. It is default. Driver does not + enable VGA I/O if BIOS did not it (it is not safe to enable it in + most cases). +nobios disables BIOS ROM. It is default if BIOS did not enable BIOS + itself. You should not use this option, some boards then do not + restart without power off. +bios preserve state of BIOS ROM. It is default. Driver does not enable + BIOS if BIOS was not enabled before. +noinit tells driver, that devices were already initialized. You should use + it if you have G100 and/or if driver cannot detect memory, you see + strange pattern on screen and so on. Devices not enabled by BIOS + are still initialized. It is default. +init driver initializes every device it knows about. +memtype specifies memory type, implies 'init'. This is valid only for G200 + and G400 and has following meaning: + + G200: + - 0 -> 2x128Kx32 chips, 2MB onboard, probably sgram + - 1 -> 2x128Kx32 chips, 4MB onboard, probably sgram + - 2 -> 2x256Kx32 chips, 4MB onboard, probably sgram + - 3 -> 2x256Kx32 chips, 8MB onboard, probably sgram + - 4 -> 2x512Kx16 chips, 8/16MB onboard, probably sdram only + - 5 -> same as above + - 6 -> 4x128Kx32 chips, 4MB onboard, probably sgram + - 7 -> 4x128Kx32 chips, 8MB onboard, probably sgram + G400: + - 0 -> 2x512Kx16 SDRAM, 16/32MB + - 2x512Kx32 SGRAM, 16/32MB + - 1 -> 2x256Kx32 SGRAM, 8/16MB + - 2 -> 4x128Kx32 SGRAM, 8/16MB + - 3 -> 4x512Kx32 SDRAM, 32MB + - 4 -> 4x256Kx32 SGRAM, 16/32MB + - 5 -> 2x1Mx32 SDRAM, 32MB + - 6 -> reserved + - 7 -> reserved + + You should use sdram or sgram parameter in addition to memtype + parameter. +nomtrr disables write combining on frame buffer. This slows down driver + but there is reported minor incompatibility between GUS DMA and + XFree under high loads if write combining is enabled (sound + dropouts). +mtrr enables write combining on frame buffer. It speeds up video + accesses much. It is default. You must have MTRR support enabled + in kernel and your CPU must have MTRR (f.e. Pentium II have them). +sgram tells to driver that you have Gxx0 with SGRAM memory. It has no + effect without `init`. +sdram tells to driver that you have Gxx0 with SDRAM memory. + It is a default. +inv24 change timings parameters for 24bpp modes on Millennium and + Millennium II. Specify this if you see strange color shadows + around characters. +noinv24 use standard timings. It is the default. +inverse invert colors on screen (for LCD displays) +noinverse show true colors on screen. It is default. +dev:X bind driver to device X. Driver numbers device from 0 up to N, + where device 0 is first `known` device found, 1 second and so on. + lspci lists devices in this order. + Default is `every` known device. +nohwcursor disables hardware cursor (use software cursor instead). +hwcursor enables hardware cursor. It is default. If you are using + non-accelerated mode (`noaccel` or `fbset -accel false`), software + cursor is used (except for text mode). +noblink disables cursor blinking. Cursor in text mode always blinks (hw + limitation). +blink enables cursor blinking. It is default. +nofastfont disables fastfont feature. It is default. +fastfont:X enables fastfont feature. X specifies size of memory reserved for + font data, it must be >= (fontwidth*fontheight*chars_in_font)/8. + It is faster on Gx00 series, but slower on older cards. +grayscale enable grayscale summing. It works in PSEUDOCOLOR modes (text, + 4bpp, 8bpp). In DIRECTCOLOR modes it is limited to characters + displayed through putc/putcs. Direct accesses to framebuffer + can paint colors. +nograyscale disable grayscale summing. It is default. +cross4MB enables that pixel line can cross 4MB boundary. It is default for + non-Millennium. +nocross4MB pixel line must not cross 4MB boundary. It is default for + Millennium I or II, because of these devices have hardware + limitations which do not allow this. But this option is + incompatible with some (if not all yet released) versions of + XF86_FBDev. +dfp enables digital flat panel interface. This option is incompatible + with secondary (TV) output - if DFP is active, TV output must be + inactive and vice versa. DFP always uses same timing as primary + (monitor) output. +dfp:X use settings X for digital flat panel interface. X is number from + 0 to 0xFF, and meaning of each individual bit is described in + G400 manual, in description of DAC register 0x1F. For normal + operation you should set all bits to zero, except lowest bit. This + lowest bit selects who is source of display clocks, whether G400, + or panel. Default value is now read back from hardware - so you + should specify this value only if you are also using `init` + parameter. +outputs:XYZ set mapping between CRTC and outputs. Each letter can have value + of 0 (for no CRTC), 1 (CRTC1) or 2 (CRTC2), and first letter + corresponds to primary analog output, second letter to the + secondary analog output and third letter to the DVI output. + Default setting is 100 for cards below G400 or G400 without DFP, + 101 for G400 with DFP, and 111 for G450 and G550. You can set + mapping only on first card, use matroxset for setting up other + devices. +vesa:X selects startup videomode. X is number from 0 to 0x1FF, see table + above for detailed explanation. Default is 640x480x8bpp if driver + has 8bpp support. Otherwise first available of 640x350x4bpp, + 640x480x15bpp, 640x480x24bpp, 640x480x32bpp or 80x25 text + (80x25 text is always available). +============ =================================================================== + +If you are not satisfied with videomode selected by `vesa` option, you +can modify it with these options: + +============ =================================================================== +xres:X horizontal resolution, in pixels. Default is derived from `vesa` + option. +yres:X vertical resolution, in pixel lines. Default is derived from `vesa` + option. +upper:X top boundary: lines between end of VSYNC pulse and start of first + pixel line of picture. Default is derived from `vesa` option. +lower:X bottom boundary: lines between end of picture and start of VSYNC + pulse. Default is derived from `vesa` option. +vslen:X length of VSYNC pulse, in lines. Default is derived from `vesa` + option. +left:X left boundary: pixels between end of HSYNC pulse and first pixel. + Default is derived from `vesa` option. +right:X right boundary: pixels between end of picture and start of HSYNC + pulse. Default is derived from `vesa` option. +hslen:X length of HSYNC pulse, in pixels. Default is derived from `vesa` + option. +pixclock:X dotclocks, in ps (picoseconds). Default is derived from `vesa` + option and from `fh` and `fv` options. +sync:X sync. pulse - bit 0 inverts HSYNC polarity, bit 1 VSYNC polarity. + If bit 3 (value 0x08) is set, composite sync instead of HSYNC is + generated. If bit 5 (value 0x20) is set, sync on green is turned + on. Do not forget that if you want sync on green, you also probably + want composite sync. + Default depends on `vesa`. +depth:X Bits per pixel: 0=text, 4,8,15,16,24 or 32. Default depends on + `vesa`. +============ =================================================================== + +If you know capabilities of your monitor, you can specify some (or all) of +`maxclk`, `fh` and `fv`. In this case, `pixclock` is computed so that +pixclock <= maxclk, real_fh <= fh and real_fv <= fv. + +============ ================================================================== +maxclk:X maximum dotclock. X can be specified in MHz, kHz or Hz. Default is + `don`t care`. +fh:X maximum horizontal synchronization frequency. X can be specified + in kHz or Hz. Default is `don't care`. +fv:X maximum vertical frequency. X must be specified in Hz. Default is + 70 for modes derived from `vesa` with yres <= 400, 60Hz for + yres > 400. +============ ================================================================== + + +Limitations +=========== + +There are known and unknown bugs, features and misfeatures. +Currently there are following known bugs: + + - SVGALib does not restore screen on exit + - generic fbcon-cfbX procedures do not work on Alphas. Due to this, + `noaccel` (and cfb4 accel) driver does not work on Alpha. So everyone + with access to `/dev/fb*` on Alpha can hang machine (you should restrict + access to `/dev/fb*` - everyone with access to this device can destroy + your monitor, believe me...). + - 24bpp does not support correctly XF-FBDev on big-endian architectures. + - interlaced text mode is not supported; it looks like hardware limitation, + but I'm not sure. + - Gxx0 SGRAM/SDRAM is not autodetected. + - maybe more... + +And following misfeatures: + + - SVGALib does not restore screen on exit. + - pixclock for text modes is limited by hardware to + + - 83 MHz on G200 + - 66 MHz on Millennium I + - 60 MHz on Millennium II + + Because I have no access to other devices, I do not know specific + frequencies for them. So driver does not check this and allows you to + set frequency higher that this. It causes sparks, black holes and other + pretty effects on screen. Device was not destroyed during tests. :-) + - my Millennium G200 oscillator has frequency range from 35 MHz to 380 MHz + (and it works with 8bpp on about 320 MHz dotclocks (and changed mclk)). + But Matrox says on product sheet that VCO limit is 50-250 MHz, so I believe + them (maybe that chip overheats, but it has a very big cooler (G100 has + none), so it should work). + - special mixed video/graphics videomodes of Mystique and Gx00 - 2G8V16 and + G16V16 are not supported + - color keying is not supported + - feature connector of Mystique and Gx00 is set to VGA mode (it is disabled + by BIOS) + - DDC (monitor detection) is supported through dualhead driver + - some check for input values are not so strict how it should be (you can + specify vslen=4000 and so on). + - maybe more... + +And following features: + + - 4bpp is available only on Millennium I and Millennium II. It is hardware + limitation. + - selection between 1:5:5:5 and 5:6:5 16bpp videomode is done by -rgba + option of fbset: "fbset -depth 16 -rgba 5,5,5" selects 1:5:5:5, anything + else selects 5:6:5 mode. + - text mode uses 6 bit VGA palette instead of 8 bit (one of 262144 colors + instead of one of 16M colors). It is due to hardware limitation of + Millennium I/II and SVGALib compatibility. + + +Benchmarks +========== +It is time to redraw whole screen 1000 times in 1024x768, 60Hz. It is +time for draw 6144000 characters on screen through /dev/vcsa +(for 32bpp it is about 3GB of data (exactly 3000 MB); for 8x16 font in +16 seconds, i.e. 187 MBps). +Times were obtained from one older version of driver, now they are about 3% +faster, it is kernel-space only time on P-II/350 MHz, Millennium I in 33 MHz +PCI slot, G200 in AGP 2x slot. I did not test vgacon:: + + NOACCEL + 8x16 12x22 + Millennium I G200 Millennium I G200 + 8bpp 16.42 9.54 12.33 9.13 + 16bpp 21.00 15.70 19.11 15.02 + 24bpp 36.66 36.66 35.00 35.00 + 32bpp 35.00 30.00 33.85 28.66 + + ACCEL, nofastfont + 8x16 12x22 6x11 + Millennium I G200 Millennium I G200 Millennium I G200 + 8bpp 7.79 7.24 13.55 7.78 30.00 21.01 + 16bpp 9.13 7.78 16.16 7.78 30.00 21.01 + 24bpp 14.17 10.72 18.69 10.24 34.99 21.01 + 32bpp 16.15 16.16 18.73 13.09 34.99 21.01 + + ACCEL, fastfont + 8x16 12x22 6x11 + Millennium I G200 Millennium I G200 Millennium I G200 + 8bpp 8.41 6.01 6.54 4.37 16.00 10.51 + 16bpp 9.54 9.12 8.76 6.17 17.52 14.01 + 24bpp 15.00 12.36 11.67 10.00 22.01 18.32 + 32bpp 16.18 18.29* 12.71 12.74 24.44 21.00 + + TEXT + 8x16 + Millennium I G200 + TEXT 3.29 1.50 + + * Yes, it is slower than Millennium I. + + +Dualhead G400 +============= +Driver supports dualhead G400 with some limitations: + + secondary head shares videomemory with primary head. It is not problem + if you have 32MB of videoram, but if you have only 16MB, you may have + to think twice before choosing videomode (for example twice 1880x1440x32bpp + is not possible). + + due to hardware limitation, secondary head can use only 16 and 32bpp + videomodes. + + secondary head is not accelerated. There were bad problems with accelerated + XFree when secondary head used to use acceleration. + + secondary head always powerups in 640x480@60-32 videomode. You have to use + fbset to change this mode. + + secondary head always powerups in monitor mode. You have to use fbmatroxset + to change it to TV mode. Also, you must select at least 525 lines for + NTSC output and 625 lines for PAL output. + + kernel is not fully multihead ready. So some things are impossible to do. + + if you compiled it as module, you must insert i2c-matroxfb, matroxfb_maven + and matroxfb_crtc2 into kernel. + + +Dualhead G450 +============= +Driver supports dualhead G450 with some limitations: + + secondary head shares videomemory with primary head. It is not problem + if you have 32MB of videoram, but if you have only 16MB, you may have + to think twice before choosing videomode. + + due to hardware limitation, secondary head can use only 16 and 32bpp + videomodes. + + secondary head is not accelerated. + + secondary head always powerups in 640x480@60-32 videomode. You have to use + fbset to change this mode. + + TV output is not supported + + kernel is not fully multihead ready, so some things are impossible to do. + + if you compiled it as module, you must insert matroxfb_g450 and matroxfb_crtc2 + into kernel. + +Petr Vandrovec <vandrove@vc.cvut.cz> |