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