David Dawes dawes@XFree86.Org
I no longer have access either to the hardware or the specs related to this driver, so my support for it is limited to things that require neither.
The latest version of this driver is available in source from the trunk of the XFree86 CVS repository. The version from 29 February is included in the XFree86 4.4.0 release.
The most recent fixes will be included in the 4.5.0 release, scheduled for later in 2004.
Binaries of this driver are included in the 4.3.0 release and in the latest 4.4.0 release candidate. If binaries are not available for your platform, you will need to be willing and able to build XFree86 from source in order to use this driver.
In addition to building/installing XFree86 CVS code, a recent 2.4.x kernel is needed. 2.4.19 or later is recommended. If you want to use the DRI support, an updated i830 DRM module is also required, and it is best to build one from either the XFree86 or DRI source tree. To do this you will also need your kernel source installed. Here is an example of how to build and load the i830 DRM module:
# cd xc/programs/Xserver/hw/xfree86/os-support/linux/drm/kernel # make -f Makefile.linux i830.o # modprobe agpgart # rmmod i830 # insmod i830.o
Here is an example of how to install the i830 DRM module so that it will be loaded automatically when needed:
# mv /lib/module/`uname -r`/kernel/drivers/char/drm/i830.o \ /lib/module/`uname -r`/kernel/drivers/char/drm/i830.o.save # cp i830.o /lib/module/`uname -r`/kernel/drivers/char/drm
For full functionality when using the 852GM, 855GM or 865G chipsets, an updated agpgart kernel module is also required. A patch for the 2.4.20 kernel can be found here, a patch for the 2.5.56 kernel is here, and a tarball with the complete source for the agpgart driver in a form that can be built standalone for 2.4.x and older 2.5.x kernels can be found here. The 852GM, 855GM and 865G support should be included with future 2.5.6x kernels.
In addition to building/installing XFree86 CVS development code, you will need an agp kernel module that has support for the 830M and 845G. The agp module that comes with FreeBSD 4.7 (and later) and FreeBSD 5.0-RELEASE (and later) has this support by default, so there's no need to build a new module if you're running those versions. If you are running an older FreeBSD 4.x release, you will need to patch the agp module to add 830M and 845G support. Eric Anholt and I have patches for this. I also have a tarball of the patched agp driver source in a form that can be built outside of the kernel (you still need to have the kernel source installed though).
The source in this tarball also includes the 852GM, 855GM and 865G support. An agp kernel module patch that adds 852GM, 855GM and 865G support to the driver in the FreeBSD 4.7 and FreeBSD 5.0 releases is available here. Support for these chipsets should be included in the agp module that comes with FreeBSD 4.8 (and later) and FreeBSD 5.1 (and later).
DRI support has not yet been ported to or tested on FreeBSD.
As of 13 December 2002, NetBSD-current has picked up the 830M/845G agp kernel support from FreeBSD. Although I haven't had any reports yet from people using this, it should function equivalently to the FreeBSD version.
I have had one or two reports of people successfully using this driver on Solaris. There is no agpgart module available for Solaris, so the amount of video memory available and hence the maximum mode resolution/depth is limited to what can be set from the system BIOS configuration. Some systems do not allow this value to be changed from the BIOS config and in these cases the video modes available may be quite limited.
Not tested. If you do test the driver on other platforms, please let me know how it goes. Those platforms without agpgart-like support at the OS level will be subject to the same restrictions as those outlined for Solaris.
If you find any bugs, send me details.
Does this driver support the 852GME and 855GME?
Yes. The driver has the same level of support for the 852GME and 855GME as for the 852GM and 855GM.
Why can't I get high resolution/depth modes?
Unfortunately this driver relies exclusively on the video BIOS to set video modes. The video BIOS will only program video modes for which it believes there is sufficient video memory for. The Intel integrated video hardware uses a "unified memory architecture", which means that video memory is allocated from normal system memory. Most BIOSes have an option in one of the configuration screens to set the amount of system memory that is set aside for use as video memory at boot time. If you are having problems using high resolution or high colour depth modes, this is the first thing to check. If your BIOS configuration has such option, change the video memory amount to 8MB or higher, and the problem should be solved.
Unfortunately not all machines have such a BIOS configuration option. It if often the case with laptops that the amount of memory that gets allocated at boot time is fixed at 1MB (actually 832KB). Although the XFree86 driver can and will allocate more (if the correct agpgart kernel support is present), the mechanism used to inform the video BIOS of the additional allocation doesn't seem to be implemented on these laptops. This results in the video BIOS refusing to program video modes that require more than 832KB.
NEW: DELL has a BIOS update (A29) for its 852GM/855GM laptops that adds this configuration option.
A patch based on a utility that Christian Zietz wrote to workaround this problem for 852GM/855GM/865G systems was committed to the XFree86 CVS trunk on 8 October 2003, is included in recent XFree86 snapshots, and will be in the XFree86 4.4 release due out late in 2003. This method directly edits the video memory parameter in the BIOS (actually an in-RAM copy thereof). The main limitation of this method is that it may not work with a BIOS that has a different layout. It appears to work for most current laptops that need it.
Another variation of this problem is video BIOSes that see all of the video memory, but simply do not allow higher resolution modes to be programmed. The only option in this case is to get a video BIOS update to fix this BIOS bug.
Why can't I use my laptop at its native resolution?
I often get questions about using "non-standard" video modes with this driver. The driver currently does all video mode initialisation by using the video BIOS. A limitation of this is that only those video mode resolutions supported by the video BIOS can be used. Unfortunately some laptops that come with screens with non-traditional resolutions (like 1400x1050) don't also come with a video BIOS that supports those resolutions. There is no workaround for this in the current driver. Since I no longer have access to hardware or documentation, not to mention free time, I don't currently have any plans to work on this problem.
Why can I only get 60Hz refresh rates with my 845G/865G?
Versions of the driver before 25 January 2004 assumed that the Intel-specific extended BIOS calls for setting the refresh rate would always be available. Some recent video BIOSes do not support them. The driver has now been updated to check for these extended BIOS calls before relying on them. When they are not available, the standard VBE 3 method for setting the refresh rate is used. The easiest way to check if this is your problem is to try the "vesa" driver and see if it correctly sets higher refresh rates. If it does, this is the problem you are seeing.
Why doesn't DRI work?
If you have problems enabling DRI, check the XFree86 log file (/var/log/XFree86.0.log) and your XF86Config file. If DRI is disabled because of insufficient video memory, there will be a message in the log file saying how much extra is needed. The driver now defaults to 32MB of VideoRam when the DRI is enabled (and 8MB when DRI is not enabled), so make sure that a VideoRam line in your XF86Config file is not forcing a smaller value. It should only be necessary to specify the VideoRam amount explicitly in your XF86Config file when you want to allocate more than the default.
Why do I get a blue window when I run an application that uses XVideo?
The video overlay used for XVideo does not work above certain mode resolution/refresh rate limits. The limit for the 845G is 1280x1024@85Hz and 1600x1200@60Hz, and the limit for the 830M driving a CRT is 1024x768@85Hz and 1280x1024@60Hz. The video overlay is disabled when these limits are exceeded. If you see an empty (blue) window where the video should be, try switching to a lower resolution/refresh video mode.
Can this driver be used with an existing 4.2.0 or 4.2.1 installation?
The short answer is "no". This driver make use of several post-4.2.x changes. Upgrade to 4.3.0. If you experience problems that have been fixed since 4.3.0, consider building/installing one of the recent XFree86 snapshots, or wait for the 4.4.0 release in December 2003.
Does XFree86 4.2.0 or 4.2.1 support the 845G?
No. The 845G was released after 4.2.0, and 4.2.1 adds no new features over 4.2.0. Support for the 845G is only available in XFree86 4.3.0 and later.
Why does the XFree86 server crash sometimes when VT switching?
There have been several issues in the driver that have resulted in crashes related to "ring lockups" when VT switching or exiting. I believe that all of them that can be fixed or worked around in the core 2D driver have been dealt with in the XFree86 CVS trunk as of 20 October 2003. If you're experiencing this problem, update to a recent XFree86 snapshot if you can, or look out for the XFree86 4.4 release in December 2003.
In the meantime, I've had a report that (on Linux) if you use the vesafb console instead of the default text-mode console, the VT switching problem can be avoided. As Calum Mackay suggested, this is a good workaround if you're being bitten by this problem and can't update to the latest CVS version.
There may still be some "ring lockup" problems with the 3D (DRI) driver. If you've updated and still see the problems, try again with DRI disabled.
Why does the XFree86 server fail saying that it can't find the i830 module or that no drivers are available?
The XFree86 server driver for the 830M and 845G is part of the "i810" driver. It's only the DRI/DRM components that are different for the 830M and 845G compared with the 810 and 815. To fix this problem, make sure that your XF86Config file references the "i810" driver, not "i830". The table below summarises what is what:
|Chipset||XFree86 server driver||DRM kernel driver|
Why does my XFree86 server suddenly refuse to start?
There is a problem with some kernels distributed by Red Hat (in particular with 8.1 beta versions) that causes system memory allocated for use as video memory to not be freed when the XFree86 server exits. Every time the XFree86 server is started, more memory is allocated and never freed. Eventually the allocation will fail and cause a system lockup. The exact cause of this problem within the kernel hasn't to my knowledge been identified yet, but the problem isn't present with standard Linux kernels from ftp.kernel.org. If you have any additional information about the source of this problem, please let me know.
Copyright © 2002-2004 by David H. Dawes. All Rights Reserved.
Intel is a registered trademark of Intel Corporation.
XFree86 is a registered trademark of The XFree86 Project, Inc.
Linux is a registered trademark of Linus Torvalds.
FreeBSD is a registered trademark of The FreeBSD Foundation.
NetBSD is a registered trademark of The NetBSD Foundation.
Solaris is a trademark of Sun Microsystems, Inc.
Last modified: 3 April 2004