| 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. | |
| For all startup modes cyblafb chooses a virtual x resolution of 2048, | |
| the only exception is mode 1280x1024 in combination with 32 bpp. This | |
| allows ywrap scrolling for all those modes if rotation is 0 or 2, and | |
| also fast scrolling if rotation is 1 or 3. The default virtual y reso- | |
| lution is 4096 for bpp == 8, 2048 for bpp==16 and 1024 for bpp == 32, | |
| again with the only exception of 1280x1024 at 32 bpp. | |
| Please do set your video memory size to 8 Mb in the Bios setup. Other | |
| values will work, but performace is decreased for a lot of modes. | |
| 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 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. | |
| - cyblafb will allow you to select very high resolutions as | |
| long as the hardware can be programmed to these modes. The | |
| documented limit 1600x1200 is not enforced, but don't expect | |
| perfect signal quality. | |
| Any request that violates the rules given above will be either changed | |
| to something the hardware supports or an error value will be returned. | |
| If you program a virtual y resolution higher than the hardware limit, | |
| cyblafb will silently decrease that value to the highest possible | |
| value. The same is true for a virtual x resolution that is not | |
| supported by the hardware. Cyblafb tries to adapt vyres first because | |
| vxres decides if ywrap scrolling is possible or not. | |
| Attempts to disable acceleration are ignored, I believe that this is | |
| safe. | |
| 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! | |
| 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 | |
| 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 |