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