xref: /OK3568_Linux_fs/kernel/Documentation/fb/matroxfb.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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