| CyBlaFB is a framebuffer driver for the Cyberblade/i1 graphics core integrated |
| into the VIA Apollo PLE133 (aka vt8601) south bridge. It is developed and |
| tested using a VIA EPIA 5000 board. |
| |
| Cyblafb - compiled into the kernel or as a module? |
| ================================================== |
| |
| You might compile cyblafb either as a module or compile it permanently into the |
| kernel. |
| |
| Unless you have a real reason to do so you should not compile both vesafb and |
| cyblafb permanently into the kernel. It's possible and it helps during the |
| developement cycle, but it's useless and will at least block some otherwise |
| usefull memory for ordinary users. |
| |
| Selecting Modes |
| =============== |
| |
| Startup Mode |
| ============ |
| |
| First of all, you might use the "vga=???" boot parameter as it is |
| documented in vesafb.txt and svga.txt. Cyblafb will detect the video |
| mode selected and will use the geometry and timings found by |
| inspecting the hardware registers. |
| |
| video=cyblafb vga=0x317 |
| |
| Alternatively you might use a combination of the mode, ref and bpp |
| parameters. If you compiled the driver into the kernel, add something |
| like this to the kernel command line: |
| |
| video=cyblafb:1280x1024,bpp=16,ref=50 ... |
| |
| If you compiled the driver as a module, the same mode would be |
| selected by the following command: |
| |
| modprobe cyblafb mode=1280x1024 bpp=16 ref=50 ... |
| |
| None of the modes possible to select as startup modes are affected by |
| the problems described at the end of the next subsection. |
| |
| Mode changes using fbset |
| ======================== |
| |
| You might use fbset to change the video mode, see "man fbset". Cyblafb |
| generally does assume that you know what you are doing. But it does |
| some checks, especially those that are needed to prevent you from |
| damaging your hardware. |
| |
| - only 8, 16, 24 and 32 bpp video modes are accepted |
| - interlaced video modes are not accepted |
| - double scan video modes are not accepted |
| - if a flat panel is found, cyblafb does not allow you |
| to program a resolution higher than the physical |
| resolution of the flat panel monitor |
| - cyblafb does not allow xres to differ from xres_virtual |
| - cyblafb does not allow vclk to exceed 230 MHz. As 32 bpp |
| and (currently) 24 bit modes use a doubled vclk internally, |
| the dotclock limit as seen by fbset is 115 MHz for those |
| modes and 230 MHz for 8 and 16 bpp modes. |
| |
| Any request that violates the rules given above will be ignored and |
| fbset will return an error. |
| |
| If you program a virtual y resolution higher than the hardware limit, |
| cyblafb will silently decrease that value to the highest possible |
| value. |
| |
| Attempts to disable acceleration are ignored. |
| |
| Some video modes that should work do not work as expected. If you use |
| the standard fb.modes, fbset 640x480-60 will program that mode, but |
| you will see a vertical area, about two characters wide, with only |
| much darker characters than the other characters on the screen. |
| Cyblafb does allow that mode to be set, as it does not violate the |
| official specifications. It would need a lot of code to reliably sort |
| out all invalid modes, playing around with the margin values will |
| give a valid mode quickly. And if cyblafb would detect such an invalid |
| mode, should it silently alter the requested values or should it |
| report an error? Both options have some pros and cons. As stated |
| above, none of the startup modes are affected, and if you set |
| verbosity to 1 or higher, cyblafb will print the fbset command that |
| would be needed to program that mode using fbset. |
| |
| |
| Other Parameters |
| ================ |
| |
| |
| crt don't autodetect, assume monitor connected to |
| standard VGA connector |
| |
| fp don't autodetect, assume flat panel display |
| connected to flat panel monitor interface |
| |
| nativex inform driver about native x resolution of |
| flat panel monitor connected to special |
| interface (should be autodetected) |
| |
| stretch stretch image to adapt low resolution modes to |
| higer resolutions of flat panel monitors |
| connected to special interface |
| |
| center center image to adapt low resolution modes to |
| higer resolutions of flat panel monitors |
| connected to special interface |
| |
| memsize use if autodetected memsize is wrong ... |
| should never be necessary |
| |
| nopcirr disable PCI read retry |
| nopciwr disable PCI write retry |
| nopcirb disable PCI read bursts |
| nopciwb disable PCI write bursts |
| |
| bpp bpp for specified modes |
| valid values: 8 || 16 || 24 || 32 |
| |
| ref refresh rate for specified mode |
| valid values: 50 <= ref <= 85 |
| |
| mode 640x480 or 800x600 or 1024x768 or 1280x1024 |
| if not specified, the startup mode will be detected |
| and used, so you might also use the vga=??? parameter |
| described in vesafb.txt. If you do not specify a mode, |
| bpp and ref parameters are ignored. |
| |
| verbosity 0 is the default, increase to at least 2 for every |
| bug report! |
| |
| vesafb allows cyblafb to be loaded after vesafb has been |
| loaded. See sections "Module unloading ...". |
| |
| |
| Development hints |
| ================= |
| |
| It's much faster do compile a module and to load the new version after |
| unloading the old module than to compile a new kernel and to reboot. So if you |
| try to work on cyblafb, it might be a good idea to use cyblafb as a module. |
| In real life, fast often means dangerous, and that's also the case here. If |
| you introduce a serious bug when cyblafb is compiled into the kernel, the |
| kernel will lock or oops with a high probability before the file system is |
| mounted, and the danger for your data is low. If you load a broken own version |
| of cyblafb on a running system, the danger for the integrity of the file |
| system is much higher as you might need a hard reset afterwards. Decide |
| yourself. |
| |
| Module unloading, the vfb method |
| ================================ |
| |
| If you want to unload/reload cyblafb using the virtual framebuffer, you need |
| to enable vfb support in the kernel first. After that, load the modules as |
| shown below: |
| |
| modprobe vfb vfb_enable=1 |
| modprobe fbcon |
| modprobe cyblafb |
| fbset -fb /dev/fb1 1280x1024-60 -vyres 2662 |
| con2fb /dev/fb1 /dev/tty1 |
| ... |
| |
| If you now made some changes to cyblafb and want to reload it, you might do it |
| as show below: |
| |
| con2fb /dev/fb0 /dev/tty1 |
| ... |
| rmmod cyblafb |
| modprobe cyblafb |
| con2fb /dev/fb1 /dev/tty1 |
| ... |
| |
| Of course, you might choose another mode, and most certainly you also want to |
| map some other /dev/tty* to the real framebuffer device. You might also choose |
| to compile fbcon as a kernel module or place it permanently in the kernel. |
| |
| I do not know of any way to unload fbcon, and fbcon will prevent the |
| framebuffer device loaded first from unloading. [If there is a way, then |
| please add a description here!] |
| |
| Module unloading, the vesafb method |
| =================================== |
| |
| Configure the kernel: |
| |
| <*> Support for frame buffer devices |
| [*] VESA VGA graphics support |
| <M> Cyberblade/i1 support |
| |
| Add e.g. "video=vesafb:ypan vga=0x307" to the kernel parameters. The ypan |
| parameter is important, choose any vga parameter you like as long as it is |
| a graphics mode. |
| |
| After booting, load cyblafb without any mode and bpp parameter and assign |
| cyblafb to individual ttys using con2fb, e.g.: |
| |
| modprobe cyblafb vesafb=1 |
| con2fb /dev/fb1 /dev/tty1 |
| |
| Unloading cyblafb works without problems after you assign vesafb to all |
| ttys again, e.g.: |
| |
| con2fb /dev/fb0 /dev/tty1 |
| rmmod cyblafb |
| |