
uvesafb - A Generic Driver for VBE2+ compliant video cards
==========================================================

1. Requirements
---------------

uvesafb should work with any video card that has a Video BIOS compliant
with the VBE 2.0 standard.

Unlike other drivers, uvesafb makes use of a userspace helper called
v86d.  v86d is used to run the x86 Video BIOS code in a simulated and
controlled environment.  This allows uvesafb to function on arches other
than x86.  Check the v86d documentation for a list of currently supported
arches.

v86d source code can be downloaded from the following website:
  http://dev.gentoo.org/~spock/projects/uvesafb

Please refer to the v86d documentation for detailed configuration and
installation instructions.

Note that the v86d userspace helper has to be available at all times in
order for uvesafb to work properly.  If you want to use uvesafb during
early boot, you will have to include v86d into an initramfs image, and
either compile it into the kernel or use it as an initrd.

2. Caveats and limitations
--------------------------

uvesafb is a _generic_ driver which supports a wide variety of video
cards, but which is ultimately limited by the Video BIOS interface.
The most important limitations are:

- Lack of any type of acceleration.
- A strict and limited set of supported video modes.  Often the native
  or most optimal resolution/refresh rate for your setup will not work
  with uvesafb, simply because the Video BIOS doesn't support the
  video mode you want to use.  This can be especially painful with
  widescreen panels, where native video modes don't have the 4:3 aspect
  ratio, which is what most BIOS-es are limited to.
- Adjusting the refresh rate is only possible with a VBE 3.0 compliant
  Video BIOS.  Note that many nVidia Video BIOS-es claim to be VBE 3.0
  compliant, while they simply ignore any refresh rate settings.

3. Configuration
----------------

uvesafb can be compiled either as a module, or directly into the kernel.
In both cases it supports the same set of configuration options, which
are either given on the kernel command line or as module parameters, e.g.:

 video=uvesafb:1024x768-32,mtrr:3,ywrap (compiled into the kernel)

 # modprobe uvesafb mode=1024x768-32 mtrr=3 scroll=ywrap  (module)

Accepted options:

ypan    Enable display panning using the VESA protected mode
        interface.  The visible screen is just a window of the
        video memory, console scrolling is done by changing the
        start of the window.  Available on x86 only.

ywrap   Same as ypan, but assumes your gfx board can wrap-around
        the video memory (i.e. starts reading from top if it
        reaches the end of video memory).  Faster than ypan.
        Available on x86 only.

redraw  Scroll by redrawing the affected part of the screen, this
        is the safe (and slow) default.

(If you're using uvesafb as a module, the above three options are
 used a parameter of the scroll option, e.g. scroll=ypan.)

vgapal  Use the standard VGA registers for palette changes.

pmipal  Use the protected mode interface for palette changes.
        This is the default if the protected mode interface is
        available.  Available on x86 only.

mtrr:n  Setup memory type range registers for the framebuffer
        where n:
              0 - disabled (equivalent to nomtrr) (default)
              1 - uncachable
              2 - write-back
              3 - write-combining
              4 - write-through

        If you see the following in dmesg, choose the type that matches
        the old one.  In this example, use "mtrr:2".
...
mtrr: type mismatch for e0000000,8000000 old: write-back new: write-combining
...

nomtrr  Do not use memory type range registers.

vremap:n
        Remap 'n' MiB of video RAM.  If 0 or not specified, remap memory
        according to video mode.

vtotal:n
        If the video BIOS of your card incorrectly determines the total
        amount of video RAM, use this option to override the BIOS (in MiB).

<mode>  The mode you want to set, in the standard modedb format.  Refer to
        modedb.txt for a detailed description.  When uvesafb is compiled as
        a module, the mode string should be provided as a value of the
        'mode' option.

vbemode:x
        Force the use of VBE mode x.  The mode will only be set if it's
        found in the VBE-provided list of supported modes.
        NOTE: The mode number 'x' should be specified in VESA mode number
        notation, not the Linux kernel one (eg. 257 instead of 769).
        HINT: If you use this option because normal <mode> parameter does
        not work for you and you use a X server, you'll probably want to
        set the 'nocrtc' option to ensure that the video mode is properly
        restored after console <-> X switches.

nocrtc  Do not use CRTC timings while setting the video mode.  This option
        has any effect only if the Video BIOS is VBE 3.0 compliant.  Use it
        if you have problems with modes set the standard way.  Note that
        using this option implies that any refresh rate adjustments will
        be ignored and the refresh rate will stay at your BIOS default (60 Hz).

noedid  Do not try to fetch and use EDID-provided modes.

noblank Disable hardware blanking.

v86d:path
        Set path to the v86d executable. This option is only available as
        a module parameter, and not as a part of the video= string.  If you
        need to use it and have uvesafb built into the kernel, use
        uvesafb.v86d="path".

Additionally, the following parameters may be provided.  They all override the
EDID-provided values and BIOS defaults.  Refer to your monitor's specs to get
the correct values for maxhf, maxvf and maxclk for your hardware.

maxhf:n     Maximum horizontal frequency (in kHz).
maxvf:n     Maximum vertical frequency (in Hz).
maxclk:n    Maximum pixel clock (in MHz).

4. The sysfs interface
----------------------

uvesafb provides several sysfs nodes for configurable parameters and
additional information.

Driver attributes:

/sys/bus/platform/drivers/uvesafb
  - v86d (default: /sbin/v86d)
    Path to the v86d executable. v86d is started by uvesafb
    if an instance of the daemon isn't already running.

Device attributes:

/sys/bus/platform/drivers/uvesafb/uvesafb.0
  - nocrtc
    Use the default refresh rate (60 Hz) if set to 1.

  - oem_product_name
  - oem_product_rev
  - oem_string
  - oem_vendor
    Information about the card and its maker.

  - vbe_modes
    A list of video modes supported by the Video BIOS along with their
    VBE mode numbers in hex.

  - vbe_version
    A BCD value indicating the implemented VBE standard.

5. Miscellaneous
----------------

Uvesafb will set a video mode with the default refresh rate and timings
from the Video BIOS if you set pixclock to 0 in fb_var_screeninfo.


--
 Michal Januszewski <spock@gentoo.org>
 Last updated: 2007-06-16

 Documentation of the uvesafb options is loosely based on vesafb.txt.

