xref: /OK3568_Linux_fs/kernel/Documentation/fb/intel810.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun================================
2*4882a593SmuzhiyunIntel 810/815 Framebuffer driver
3*4882a593Smuzhiyun================================
4*4882a593Smuzhiyun
5*4882a593SmuzhiyunTony Daplas <adaplas@pol.net>
6*4882a593Smuzhiyun
7*4882a593Smuzhiyunhttp://i810fb.sourceforge.net
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunMarch 17, 2002
10*4882a593Smuzhiyun
11*4882a593SmuzhiyunFirst Released: July 2001
12*4882a593SmuzhiyunLast Update:    September 12, 2005
13*4882a593Smuzhiyun
14*4882a593SmuzhiyunA. Introduction
15*4882a593Smuzhiyun===============
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun	This is a framebuffer driver for various Intel 810/815 compatible
18*4882a593Smuzhiyun	graphics devices.  These include:
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun	- Intel 810
21*4882a593Smuzhiyun	- Intel 810E
22*4882a593Smuzhiyun	- Intel 810-DC100
23*4882a593Smuzhiyun	- Intel 815 Internal graphics only, 100Mhz FSB
24*4882a593Smuzhiyun	- Intel 815 Internal graphics only
25*4882a593Smuzhiyun	- Intel 815 Internal graphics and AGP
26*4882a593Smuzhiyun
27*4882a593SmuzhiyunB.  Features
28*4882a593Smuzhiyun============
29*4882a593Smuzhiyun
30*4882a593Smuzhiyun	- Choice of using Discrete Video Timings, VESA Generalized Timing
31*4882a593Smuzhiyun	  Formula, or a framebuffer specific database to set the video mode
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun	- Supports a variable range of horizontal and vertical resolution and
34*4882a593Smuzhiyun	  vertical refresh rates if the VESA Generalized Timing Formula is
35*4882a593Smuzhiyun	  enabled.
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun	- Supports color depths of 8, 16, 24 and 32 bits per pixel
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun	- Supports pseudocolor, directcolor, or truecolor visuals
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun	- Full and optimized hardware acceleration at 8, 16 and 24 bpp
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun	- Robust video state save and restore
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun	- MTRR support
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun	- Utilizes user-entered monitor specifications to automatically
48*4882a593Smuzhiyun	  calculate required video mode parameters.
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun	- Can concurrently run with xfree86 running with native i810 drivers
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun	- Hardware Cursor Support
53*4882a593Smuzhiyun
54*4882a593Smuzhiyun	- Supports EDID probing either by DDC/I2C or through the BIOS
55*4882a593Smuzhiyun
56*4882a593SmuzhiyunC.  List of available options
57*4882a593Smuzhiyun=============================
58*4882a593Smuzhiyun
59*4882a593Smuzhiyun   a. "video=i810fb"
60*4882a593Smuzhiyun	enables the i810 driver
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun	Recommendation: required
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun   b. "xres:<value>"
65*4882a593Smuzhiyun	select horizontal resolution in pixels. (This parameter will be
66*4882a593Smuzhiyun	ignored if 'mode_option' is specified.  See 'o' below).
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun	Recommendation: user preference
69*4882a593Smuzhiyun	(default = 640)
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun   c. "yres:<value>"
72*4882a593Smuzhiyun	select vertical resolution in scanlines. If Discrete Video Timings
73*4882a593Smuzhiyun	is enabled, this will be ignored and computed as 3*xres/4.  (This
74*4882a593Smuzhiyun	parameter will be ignored if 'mode_option' is specified.  See 'o'
75*4882a593Smuzhiyun	below)
76*4882a593Smuzhiyun
77*4882a593Smuzhiyun	Recommendation: user preference
78*4882a593Smuzhiyun	(default = 480)
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun   d. "vyres:<value>"
81*4882a593Smuzhiyun	select virtual vertical resolution in scanlines. If (0) or none
82*4882a593Smuzhiyun	is specified, this will be computed against maximum available memory.
83*4882a593Smuzhiyun
84*4882a593Smuzhiyun	Recommendation: do not set
85*4882a593Smuzhiyun	(default = 480)
86*4882a593Smuzhiyun
87*4882a593Smuzhiyun   e. "vram:<value>"
88*4882a593Smuzhiyun	select amount of system RAM in MB to allocate for the video memory
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun	Recommendation: 1 - 4 MB.
91*4882a593Smuzhiyun	(default = 4)
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun   f. "bpp:<value>"
94*4882a593Smuzhiyun	select desired pixel depth
95*4882a593Smuzhiyun
96*4882a593Smuzhiyun	Recommendation: 8
97*4882a593Smuzhiyun	(default = 8)
98*4882a593Smuzhiyun
99*4882a593Smuzhiyun   g. "hsync1/hsync2:<value>"
100*4882a593Smuzhiyun	select the minimum and maximum Horizontal Sync Frequency of the
101*4882a593Smuzhiyun	monitor in kHz.  If using a fixed frequency monitor, hsync1 must
102*4882a593Smuzhiyun	be equal to hsync2. If EDID probing is successful, these will be
103*4882a593Smuzhiyun	ignored and values will be taken from the EDID block.
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun	Recommendation: check monitor manual for correct values
106*4882a593Smuzhiyun	(default = 29/30)
107*4882a593Smuzhiyun
108*4882a593Smuzhiyun   h. "vsync1/vsync2:<value>"
109*4882a593Smuzhiyun	select the minimum and maximum Vertical Sync Frequency of the monitor
110*4882a593Smuzhiyun	in Hz. You can also use this option to lock your monitor's refresh
111*4882a593Smuzhiyun	rate. If EDID probing is successful, these will be ignored and values
112*4882a593Smuzhiyun	will be taken from the EDID block.
113*4882a593Smuzhiyun
114*4882a593Smuzhiyun	Recommendation: check monitor manual for correct values
115*4882a593Smuzhiyun	(default = 60/60)
116*4882a593Smuzhiyun
117*4882a593Smuzhiyun	IMPORTANT:  If you need to clamp your timings, try to give some
118*4882a593Smuzhiyun	leeway for computational errors (over/underflows).  Example: if
119*4882a593Smuzhiyun	using vsync1/vsync2 = 60/60, make sure hsync1/hsync2 has at least
120*4882a593Smuzhiyun	a 1 unit difference, and vice versa.
121*4882a593Smuzhiyun
122*4882a593Smuzhiyun   i. "voffset:<value>"
123*4882a593Smuzhiyun	select at what offset in MB of the logical memory to allocate the
124*4882a593Smuzhiyun	framebuffer memory.  The intent is to avoid the memory blocks
125*4882a593Smuzhiyun	used by standard graphics applications (XFree86).  The default
126*4882a593Smuzhiyun	offset (16 MB for a 64 MB aperture, 8 MB for a 32 MB aperture) will
127*4882a593Smuzhiyun	avoid XFree86's usage and allows up to 7 MB/15 MB of framebuffer
128*4882a593Smuzhiyun	memory.  Depending on your usage, adjust the value up or down
129*4882a593Smuzhiyun	(0 for maximum usage, 31/63 MB for the least amount).  Note, an
130*4882a593Smuzhiyun	arbitrary setting may conflict with XFree86.
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun	Recommendation: do not set
133*4882a593Smuzhiyun	(default = 8 or 16 MB)
134*4882a593Smuzhiyun
135*4882a593Smuzhiyun   j. "accel"
136*4882a593Smuzhiyun	enable text acceleration.  This can be enabled/reenabled anytime
137*4882a593Smuzhiyun	by using 'fbset -accel true/false'.
138*4882a593Smuzhiyun
139*4882a593Smuzhiyun	Recommendation: enable
140*4882a593Smuzhiyun	(default = not set)
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun   k. "mtrr"
143*4882a593Smuzhiyun	enable MTRR.  This allows data transfers to the framebuffer memory
144*4882a593Smuzhiyun	to occur in bursts which can significantly increase performance.
145*4882a593Smuzhiyun	Not very helpful with the i810/i815 because of 'shared memory'.
146*4882a593Smuzhiyun
147*4882a593Smuzhiyun	Recommendation: do not set
148*4882a593Smuzhiyun	(default = not set)
149*4882a593Smuzhiyun
150*4882a593Smuzhiyun   l. "extvga"
151*4882a593Smuzhiyun	if specified, secondary/external VGA output will always be enabled.
152*4882a593Smuzhiyun	Useful if the BIOS turns off the VGA port when no monitor is attached.
153*4882a593Smuzhiyun	The external VGA monitor can then be attached without rebooting.
154*4882a593Smuzhiyun
155*4882a593Smuzhiyun	Recommendation: do not set
156*4882a593Smuzhiyun	(default = not set)
157*4882a593Smuzhiyun
158*4882a593Smuzhiyun   m. "sync"
159*4882a593Smuzhiyun	Forces the hardware engine to do a "sync" or wait for the hardware
160*4882a593Smuzhiyun	to finish before starting another instruction. This will produce a
161*4882a593Smuzhiyun	more stable setup, but will be slower.
162*4882a593Smuzhiyun
163*4882a593Smuzhiyun	Recommendation: do not set
164*4882a593Smuzhiyun	(default = not set)
165*4882a593Smuzhiyun
166*4882a593Smuzhiyun   n. "dcolor"
167*4882a593Smuzhiyun	Use directcolor visual instead of truecolor for pixel depths greater
168*4882a593Smuzhiyun	than 8 bpp.  Useful for color tuning, such as gamma control.
169*4882a593Smuzhiyun
170*4882a593Smuzhiyun	Recommendation: do not set
171*4882a593Smuzhiyun	(default = not set)
172*4882a593Smuzhiyun
173*4882a593Smuzhiyun   o. <xres>x<yres>[-<bpp>][@<refresh>]
174*4882a593Smuzhiyun	The driver will now accept specification of boot mode option.  If this
175*4882a593Smuzhiyun	is specified, the options 'xres' and 'yres' will be ignored. See
176*4882a593Smuzhiyun	Documentation/fb/modedb.rst for usage.
177*4882a593Smuzhiyun
178*4882a593SmuzhiyunD. Kernel booting
179*4882a593Smuzhiyun=================
180*4882a593Smuzhiyun
181*4882a593SmuzhiyunSeparate each option/option-pair by commas (,) and the option from its value
182*4882a593Smuzhiyunwith a colon (:) as in the following::
183*4882a593Smuzhiyun
184*4882a593Smuzhiyun	video=i810fb:option1,option2:value2
185*4882a593Smuzhiyun
186*4882a593SmuzhiyunSample Usage
187*4882a593Smuzhiyun------------
188*4882a593Smuzhiyun
189*4882a593SmuzhiyunIn /etc/lilo.conf, add the line::
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun  append="video=i810fb:vram:2,xres:1024,yres:768,bpp:8,hsync1:30,hsync2:55, \
192*4882a593Smuzhiyun	  vsync1:50,vsync2:85,accel,mtrr"
193*4882a593Smuzhiyun
194*4882a593SmuzhiyunThis will initialize the framebuffer to 1024x768 at 8bpp.  The framebuffer
195*4882a593Smuzhiyunwill use 2 MB of System RAM. MTRR support will be enabled. The refresh rate
196*4882a593Smuzhiyunwill be computed based on the hsync1/hsync2 and vsync1/vsync2 values.
197*4882a593Smuzhiyun
198*4882a593SmuzhiyunIMPORTANT:
199*4882a593Smuzhiyun  You must include hsync1, hsync2, vsync1 and vsync2 to enable video modes
200*4882a593Smuzhiyun  better than 640x480 at 60Hz. HOWEVER, if your chipset/display combination
201*4882a593Smuzhiyun  supports I2C and has an EDID block, you can safely exclude hsync1, hsync2,
202*4882a593Smuzhiyun  vsync1 and vsync2 parameters.  These parameters will be taken from the EDID
203*4882a593Smuzhiyun  block.
204*4882a593Smuzhiyun
205*4882a593SmuzhiyunE.  Module options
206*4882a593Smuzhiyun==================
207*4882a593Smuzhiyun
208*4882a593SmuzhiyunThe module parameters are essentially similar to the kernel
209*4882a593Smuzhiyunparameters. The main difference is that you need to include a Boolean value
210*4882a593Smuzhiyun(1 for TRUE, and 0 for FALSE) for those options which don't need a value.
211*4882a593Smuzhiyun
212*4882a593SmuzhiyunExample, to enable MTRR, include "mtrr=1".
213*4882a593Smuzhiyun
214*4882a593SmuzhiyunSample Usage
215*4882a593Smuzhiyun------------
216*4882a593Smuzhiyun
217*4882a593SmuzhiyunUsing the same setup as described above, load the module like this::
218*4882a593Smuzhiyun
219*4882a593Smuzhiyun	modprobe i810fb vram=2 xres=1024 bpp=8 hsync1=30 hsync2=55 vsync1=50 \
220*4882a593Smuzhiyun		 vsync2=85 accel=1 mtrr=1
221*4882a593Smuzhiyun
222*4882a593SmuzhiyunOr just add the following to a configuration file in /etc/modprobe.d/::
223*4882a593Smuzhiyun
224*4882a593Smuzhiyun	options i810fb vram=2 xres=1024 bpp=16 hsync1=30 hsync2=55 vsync1=50 \
225*4882a593Smuzhiyun	vsync2=85 accel=1 mtrr=1
226*4882a593Smuzhiyun
227*4882a593Smuzhiyunand just do a::
228*4882a593Smuzhiyun
229*4882a593Smuzhiyun	modprobe i810fb
230*4882a593Smuzhiyun
231*4882a593Smuzhiyun
232*4882a593SmuzhiyunF.  Setup
233*4882a593Smuzhiyun=========
234*4882a593Smuzhiyun
235*4882a593Smuzhiyun	a. Do your usual method of configuring the kernel
236*4882a593Smuzhiyun
237*4882a593Smuzhiyun	   make menuconfig/xconfig/config
238*4882a593Smuzhiyun
239*4882a593Smuzhiyun	b. Under "Code maturity level options" enable "Prompt for development
240*4882a593Smuzhiyun	   and/or incomplete code/drivers".
241*4882a593Smuzhiyun
242*4882a593Smuzhiyun	c. Enable agpgart support for the Intel 810/815 on-board graphics.
243*4882a593Smuzhiyun	   This is required.  The option is under "Character Devices".
244*4882a593Smuzhiyun
245*4882a593Smuzhiyun	d. Under "Graphics Support", select "Intel 810/815" either statically
246*4882a593Smuzhiyun	   or as a module.  Choose "use VESA Generalized Timing Formula" if
247*4882a593Smuzhiyun	   you need to maximize the capability of your display.  To be on the
248*4882a593Smuzhiyun	   safe side, you can leave this unselected.
249*4882a593Smuzhiyun
250*4882a593Smuzhiyun	e. If you want support for DDC/I2C probing (Plug and Play Displays),
251*4882a593Smuzhiyun	   set 'Enable DDC Support' to 'y'. To make this option appear, set
252*4882a593Smuzhiyun	   'use VESA Generalized Timing Formula' to 'y'.
253*4882a593Smuzhiyun
254*4882a593Smuzhiyun	f. If you want a framebuffer console, enable it under "Console
255*4882a593Smuzhiyun	   Drivers".
256*4882a593Smuzhiyun
257*4882a593Smuzhiyun	g. Compile your kernel.
258*4882a593Smuzhiyun
259*4882a593Smuzhiyun	h. Load the driver as described in sections D and E.
260*4882a593Smuzhiyun
261*4882a593Smuzhiyun	i.  Try the DirectFB (http://www.directfb.org) + the i810 gfxdriver
262*4882a593Smuzhiyun	    patch to see the chipset in action (or inaction :-).
263*4882a593Smuzhiyun
264*4882a593SmuzhiyunG.  Acknowledgment:
265*4882a593Smuzhiyun===================
266*4882a593Smuzhiyun
267*4882a593Smuzhiyun	1.  Geert Uytterhoeven - his excellent howto and the virtual
268*4882a593Smuzhiyun	    framebuffer driver code made this possible.
269*4882a593Smuzhiyun
270*4882a593Smuzhiyun	2.  Jeff Hartmann for his agpgart code.
271*4882a593Smuzhiyun
272*4882a593Smuzhiyun	3.  The X developers.  Insights were provided just by reading the
273*4882a593Smuzhiyun	    XFree86 source code.
274*4882a593Smuzhiyun
275*4882a593Smuzhiyun	4.  Intel(c).  For this value-oriented chipset driver and for
276*4882a593Smuzhiyun	    providing documentation.
277*4882a593Smuzhiyun
278*4882a593Smuzhiyun	5. Matt Sottek.  His inputs and ideas  helped in making some
279*4882a593Smuzhiyun	   optimizations possible.
280*4882a593Smuzhiyun
281*4882a593SmuzhiyunH.  Home Page:
282*4882a593Smuzhiyun==============
283*4882a593Smuzhiyun
284*4882a593Smuzhiyun	A more complete, and probably updated information is provided at
285*4882a593Smuzhiyun	http://i810fb.sourceforge.net.
286*4882a593Smuzhiyun
287*4882a593SmuzhiyunTony
288