diff options
Diffstat (limited to 'Documentation/fb')
| -rw-r--r-- | Documentation/fb/cyblafb/bugs | 14 | ||||
| -rw-r--r-- | Documentation/fb/cyblafb/credits | 7 | ||||
| -rw-r--r-- | Documentation/fb/cyblafb/documentation | 17 | ||||
| -rw-r--r-- | Documentation/fb/cyblafb/fb.modes | 155 | ||||
| -rw-r--r-- | Documentation/fb/cyblafb/performance | 80 | ||||
| -rw-r--r-- | Documentation/fb/cyblafb/todo | 32 | ||||
| -rw-r--r-- | Documentation/fb/cyblafb/usage | 206 | ||||
| -rw-r--r-- | Documentation/fb/cyblafb/whycyblafb | 85 | ||||
| -rw-r--r-- | Documentation/fb/modedb.txt | 73 |
9 files changed, 668 insertions, 1 deletions
diff --git a/Documentation/fb/cyblafb/bugs b/Documentation/fb/cyblafb/bugs new file mode 100644 index 000000000000..f90cc66ea919 --- /dev/null +++ b/Documentation/fb/cyblafb/bugs | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | Bugs | ||
| 2 | ==== | ||
| 3 | |||
| 4 | I currently don't know of any bug. Please do send reports to: | ||
| 5 | - linux-fbdev-devel@lists.sourceforge.net | ||
| 6 | - Knut_Petersen@t-online.de. | ||
| 7 | |||
| 8 | |||
| 9 | Untested features | ||
| 10 | ================= | ||
| 11 | |||
| 12 | All LCD stuff is untested. If it worked in tridentfb, it should work in | ||
| 13 | cyblafb. Please test and report the results to Knut_Petersen@t-online.de. | ||
| 14 | |||
diff --git a/Documentation/fb/cyblafb/credits b/Documentation/fb/cyblafb/credits new file mode 100644 index 000000000000..0eb3b443dc2b --- /dev/null +++ b/Documentation/fb/cyblafb/credits | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | Thanks to | ||
| 2 | ========= | ||
| 3 | * Alan Hourihane, for writing the X trident driver | ||
| 4 | * Jani Monoses, for writing the tridentfb driver | ||
| 5 | * Antonino A. Daplas, for review of the first published | ||
| 6 | version of cyblafb and some code | ||
| 7 | * Jochen Hein, for testing and a helpfull bug report | ||
diff --git a/Documentation/fb/cyblafb/documentation b/Documentation/fb/cyblafb/documentation new file mode 100644 index 000000000000..bb1aac048425 --- /dev/null +++ b/Documentation/fb/cyblafb/documentation | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | Available Documentation | ||
| 2 | ======================= | ||
| 3 | |||
| 4 | Apollo PLE 133 Chipset VT8601A North Bridge Datasheet, Rev. 1.82, October 22, | ||
| 5 | 2001, available from VIA: | ||
| 6 | |||
| 7 | http://www.viavpsd.com/product/6/15/DS8601A182.pdf | ||
| 8 | |||
| 9 | The datasheet is incomplete, some registers that need to be programmed are not | ||
| 10 | explained at all and important bits are listed as "reserved". But you really | ||
| 11 | need the datasheet to understand the code. "p. xxx" comments refer to page | ||
| 12 | numbers of this document. | ||
| 13 | |||
| 14 | XFree/XOrg drivers are available and of good quality, looking at the code | ||
| 15 | there is a good idea if the datasheet does not provide enough information | ||
| 16 | or if the datasheet seems to be wrong. | ||
| 17 | |||
diff --git a/Documentation/fb/cyblafb/fb.modes b/Documentation/fb/cyblafb/fb.modes new file mode 100644 index 000000000000..cf4351fc32ff --- /dev/null +++ b/Documentation/fb/cyblafb/fb.modes | |||
| @@ -0,0 +1,155 @@ | |||
| 1 | # | ||
| 2 | # Sample fb.modes file | ||
| 3 | # | ||
| 4 | # Provides an incomplete list of working modes for | ||
| 5 | # the cyberblade/i1 graphics core. | ||
| 6 | # | ||
| 7 | # The value 4294967256 is used instead of -40. Of course, -40 is not | ||
| 8 | # a really reasonable value, but chip design does not always follow | ||
| 9 | # logic. Believe me, it's ok, and it's the way the BIOS does it. | ||
| 10 | # | ||
| 11 | # fbset requires 4294967256 in fb.modes and -40 as an argument to | ||
| 12 | # the -t parameter. That's also not too reasonable, and it might change | ||
| 13 | # in the future or might even be differt for your current version. | ||
| 14 | # | ||
| 15 | |||
| 16 | mode "640x480-50" | ||
| 17 | geometry 640 480 640 3756 8 | ||
| 18 | timings 47619 4294967256 24 17 0 216 3 | ||
| 19 | endmode | ||
| 20 | |||
| 21 | mode "640x480-60" | ||
| 22 | geometry 640 480 640 3756 8 | ||
| 23 | timings 39682 4294967256 24 17 0 216 3 | ||
| 24 | endmode | ||
| 25 | |||
| 26 | mode "640x480-70" | ||
| 27 | geometry 640 480 640 3756 8 | ||
| 28 | timings 34013 4294967256 24 17 0 216 3 | ||
| 29 | endmode | ||
| 30 | |||
| 31 | mode "640x480-72" | ||
| 32 | geometry 640 480 640 3756 8 | ||
| 33 | timings 33068 4294967256 24 17 0 216 3 | ||
| 34 | endmode | ||
| 35 | |||
| 36 | mode "640x480-75" | ||
| 37 | geometry 640 480 640 3756 8 | ||
| 38 | timings 31746 4294967256 24 17 0 216 3 | ||
| 39 | endmode | ||
| 40 | |||
| 41 | mode "640x480-80" | ||
| 42 | geometry 640 480 640 3756 8 | ||
| 43 | timings 29761 4294967256 24 17 0 216 3 | ||
| 44 | endmode | ||
| 45 | |||
| 46 | mode "640x480-85" | ||
| 47 | geometry 640 480 640 3756 8 | ||
| 48 | timings 28011 4294967256 24 17 0 216 3 | ||
| 49 | endmode | ||
| 50 | |||
| 51 | mode "800x600-50" | ||
| 52 | geometry 800 600 800 3221 8 | ||
| 53 | timings 30303 96 24 14 0 136 11 | ||
| 54 | endmode | ||
| 55 | |||
| 56 | mode "800x600-60" | ||
| 57 | geometry 800 600 800 3221 8 | ||
| 58 | timings 25252 96 24 14 0 136 11 | ||
| 59 | endmode | ||
| 60 | |||
| 61 | mode "800x600-70" | ||
| 62 | geometry 800 600 800 3221 8 | ||
| 63 | timings 21645 96 24 14 0 136 11 | ||
| 64 | endmode | ||
| 65 | |||
| 66 | mode "800x600-72" | ||
| 67 | geometry 800 600 800 3221 8 | ||
| 68 | timings 21043 96 24 14 0 136 11 | ||
| 69 | endmode | ||
| 70 | |||
| 71 | mode "800x600-75" | ||
| 72 | geometry 800 600 800 3221 8 | ||
| 73 | timings 20202 96 24 14 0 136 11 | ||
| 74 | endmode | ||
| 75 | |||
| 76 | mode "800x600-80" | ||
| 77 | geometry 800 600 800 3221 8 | ||
| 78 | timings 18939 96 24 14 0 136 11 | ||
| 79 | endmode | ||
| 80 | |||
| 81 | mode "800x600-85" | ||
| 82 | geometry 800 600 800 3221 8 | ||
| 83 | timings 17825 96 24 14 0 136 11 | ||
| 84 | endmode | ||
| 85 | |||
| 86 | mode "1024x768-50" | ||
| 87 | geometry 1024 768 1024 2815 8 | ||
| 88 | timings 19054 144 24 29 0 120 3 | ||
| 89 | endmode | ||
| 90 | |||
| 91 | mode "1024x768-60" | ||
| 92 | geometry 1024 768 1024 2815 8 | ||
| 93 | timings 15880 144 24 29 0 120 3 | ||
| 94 | endmode | ||
| 95 | |||
| 96 | mode "1024x768-70" | ||
| 97 | geometry 1024 768 1024 2815 8 | ||
| 98 | timings 13610 144 24 29 0 120 3 | ||
| 99 | endmode | ||
| 100 | |||
| 101 | mode "1024x768-72" | ||
| 102 | geometry 1024 768 1024 2815 8 | ||
| 103 | timings 13232 144 24 29 0 120 3 | ||
| 104 | endmode | ||
| 105 | |||
| 106 | mode "1024x768-75" | ||
| 107 | geometry 1024 768 1024 2815 8 | ||
| 108 | timings 12703 144 24 29 0 120 3 | ||
| 109 | endmode | ||
| 110 | |||
| 111 | mode "1024x768-80" | ||
| 112 | geometry 1024 768 1024 2815 8 | ||
| 113 | timings 11910 144 24 29 0 120 3 | ||
| 114 | endmode | ||
| 115 | |||
| 116 | mode "1024x768-85" | ||
| 117 | geometry 1024 768 1024 2815 8 | ||
| 118 | timings 11209 144 24 29 0 120 3 | ||
| 119 | endmode | ||
| 120 | |||
| 121 | mode "1280x1024-50" | ||
| 122 | geometry 1280 1024 1280 2662 8 | ||
| 123 | timings 11114 232 16 39 0 160 3 | ||
| 124 | endmode | ||
| 125 | |||
| 126 | mode "1280x1024-60" | ||
| 127 | geometry 1280 1024 1280 2662 8 | ||
| 128 | timings 9262 232 16 39 0 160 3 | ||
| 129 | endmode | ||
| 130 | |||
| 131 | mode "1280x1024-70" | ||
| 132 | geometry 1280 1024 1280 2662 8 | ||
| 133 | timings 7939 232 16 39 0 160 3 | ||
| 134 | endmode | ||
| 135 | |||
| 136 | mode "1280x1024-72" | ||
| 137 | geometry 1280 1024 1280 2662 8 | ||
| 138 | timings 7719 232 16 39 0 160 3 | ||
| 139 | endmode | ||
| 140 | |||
| 141 | mode "1280x1024-75" | ||
| 142 | geometry 1280 1024 1280 2662 8 | ||
| 143 | timings 7410 232 16 39 0 160 3 | ||
| 144 | endmode | ||
| 145 | |||
| 146 | mode "1280x1024-80" | ||
| 147 | geometry 1280 1024 1280 2662 8 | ||
| 148 | timings 6946 232 16 39 0 160 3 | ||
| 149 | endmode | ||
| 150 | |||
| 151 | mode "1280x1024-85" | ||
| 152 | geometry 1280 1024 1280 2662 8 | ||
| 153 | timings 6538 232 16 39 0 160 3 | ||
| 154 | endmode | ||
| 155 | |||
diff --git a/Documentation/fb/cyblafb/performance b/Documentation/fb/cyblafb/performance new file mode 100644 index 000000000000..eb4e47a9cea6 --- /dev/null +++ b/Documentation/fb/cyblafb/performance | |||
| @@ -0,0 +1,80 @@ | |||
| 1 | Speed | ||
| 2 | ===== | ||
| 3 | |||
| 4 | CyBlaFB is much faster than tridentfb and vesafb. Compare the performance data | ||
| 5 | for mode 1280x1024-[8,16,32]@61 Hz. | ||
| 6 | |||
| 7 | Test 1: Cat a file with 2000 lines of 0 characters. | ||
| 8 | Test 2: Cat a file with 2000 lines of 80 characters. | ||
| 9 | Test 3: Cat a file with 2000 lines of 160 characters. | ||
| 10 | |||
| 11 | All values show system time use in seconds, kernel 2.6.12 was used for | ||
| 12 | the measurements. 2.6.13 is a bit slower, 2.6.14 hopefully will include a | ||
| 13 | patch that speeds up kernel bitblitting a lot ( > 20%). | ||
| 14 | |||
| 15 | +-----------+-----------------------------------------------------+ | ||
| 16 | | | not accelerated | | ||
| 17 | | TRIDENTFB +-----------------+-----------------+-----------------+ | ||
| 18 | | of 2.6.12 | 8 bpp | 16 bpp | 32 bpp | | ||
| 19 | | | noypan | ypan | noypan | ypan | noypan | ypan | | ||
| 20 | +-----------+--------+--------+--------+--------+--------+--------+ | ||
| 21 | | Test 1 | 4.31 | 4.33 | 6.05 | 12.81 | ---- | ---- | | ||
| 22 | | Test 2 | 67.94 | 5.44 | 123.16 | 14.79 | ---- | ---- | | ||
| 23 | | Test 3 | 131.36 | 6.55 | 240.12 | 16.76 | ---- | ---- | | ||
| 24 | +-----------+--------+--------+--------+--------+--------+--------+ | ||
| 25 | | Comments | | | completely bro- | | ||
| 26 | | | | | ken, monitor | | ||
| 27 | | | | | switches off | | ||
| 28 | +-----------+-----------------+-----------------+-----------------+ | ||
| 29 | |||
| 30 | |||
| 31 | +-----------+-----------------------------------------------------+ | ||
| 32 | | | accelerated | | ||
| 33 | | TRIDENTFB +-----------------+-----------------+-----------------+ | ||
| 34 | | of 2.6.12 | 8 bpp | 16 bpp | 32 bpp | | ||
| 35 | | | noypan | ypan | noypan | ypan | noypan | ypan | | ||
| 36 | +-----------+--------+--------+--------+--------+--------+--------+ | ||
| 37 | | Test 1 | ---- | ---- | 20.62 | 1.22 | ---- | ---- | | ||
| 38 | | Test 2 | ---- | ---- | 22.61 | 3.19 | ---- | ---- | | ||
| 39 | | Test 3 | ---- | ---- | 24.59 | 5.16 | ---- | ---- | | ||
| 40 | +-----------+--------+--------+--------+--------+--------+--------+ | ||
| 41 | | Comments | broken, writing | broken, ok only | completely bro- | | ||
| 42 | | | to wrong places | if bgcolor is | ken, monitor | | ||
| 43 | | | on screen + bug | black, bug in | switches off | | ||
| 44 | | | in fillrect() | fillrect() | | | ||
| 45 | +-----------+-----------------+-----------------+-----------------+ | ||
| 46 | |||
| 47 | |||
| 48 | +-----------+-----------------------------------------------------+ | ||
| 49 | | | not accelerated | | ||
| 50 | | VESAFB +-----------------+-----------------+-----------------+ | ||
| 51 | | of 2.6.12 | 8 bpp | 16 bpp | 32 bpp | | ||
| 52 | | | noypan | ypan | noypan | ypan | noypan | ypan | | ||
| 53 | +-----------+--------+--------+--------+--------+--------+--------+ | ||
| 54 | | Test 1 | 4.26 | 3.76 | 5.99 | 7.23 | ---- | ---- | | ||
| 55 | | Test 2 | 65.65 | 4.89 | 120.88 | 9.08 | ---- | ---- | | ||
| 56 | | Test 3 | 126.91 | 5.94 | 235.77 | 11.03 | ---- | ---- | | ||
| 57 | +-----------+--------+--------+--------+--------+--------+--------+ | ||
| 58 | | Comments | vga=0x307 | vga=0x31a | vga=0x31b not | | ||
| 59 | | | fh=80kHz | fh=80kHz | supported by | | ||
| 60 | | | fv=75kHz | fv=75kHz | video BIOS and | | ||
| 61 | | | | | hardware | | ||
| 62 | +-----------+-----------------+-----------------+-----------------+ | ||
| 63 | |||
| 64 | |||
| 65 | +-----------+-----------------------------------------------------+ | ||
| 66 | | | accelerated | | ||
| 67 | | CYBLAFB +-----------------+-----------------+-----------------+ | ||
| 68 | | | 8 bpp | 16 bpp | 32 bpp | | ||
| 69 | | | noypan | ypan | noypan | ypan | noypan | ypan | | ||
| 70 | +-----------+--------+--------+--------+--------+--------+--------+ | ||
| 71 | | Test 1 | 8.02 | 0.23 | 19.04 | 0.61 | 57.12 | 2.74 | | ||
| 72 | | Test 2 | 8.38 | 0.55 | 19.39 | 0.92 | 57.54 | 3.13 | | ||
| 73 | | Test 3 | 8.73 | 0.86 | 19.74 | 1.24 | 57.95 | 3.51 | | ||
| 74 | +-----------+--------+--------+--------+--------+--------+--------+ | ||
| 75 | | Comments | | | | | ||
| 76 | | | | | | | ||
| 77 | | | | | | | ||
| 78 | | | | | | | ||
| 79 | +-----------+-----------------+-----------------+-----------------+ | ||
| 80 | |||
diff --git a/Documentation/fb/cyblafb/todo b/Documentation/fb/cyblafb/todo new file mode 100644 index 000000000000..80fb2f89b6c1 --- /dev/null +++ b/Documentation/fb/cyblafb/todo | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | TODO / Missing features | ||
| 2 | ======================= | ||
| 3 | |||
| 4 | Verify LCD stuff "stretch" and "center" options are | ||
| 5 | completely untested ... this code needs to be | ||
| 6 | verified. As I don't have access to such | ||
| 7 | hardware, please contact me if you are | ||
| 8 | willing run some tests. | ||
| 9 | |||
| 10 | Interlaced video modes The reason that interleaved | ||
| 11 | modes are disabled is that I do not know | ||
| 12 | the meaning of the vertical interlace | ||
| 13 | parameter. Also the datasheet mentions a | ||
| 14 | bit d8 of a horizontal interlace parameter, | ||
| 15 | but nowhere the lower 8 bits. Please help | ||
| 16 | if you can. | ||
| 17 | |||
| 18 | low-res double scan modes Who needs it? | ||
| 19 | |||
| 20 | accelerated color blitting Who needs it? The console driver does use color | ||
| 21 | blitting for nothing but drawing the penguine, | ||
| 22 | everything else is done using color expanding | ||
| 23 | blitting of 1bpp character bitmaps. | ||
| 24 | |||
| 25 | xpanning Who needs it? | ||
| 26 | |||
| 27 | ioctls Who needs it? | ||
| 28 | |||
| 29 | TV-out Will be done later | ||
| 30 | |||
| 31 | ??? Feel free to contact me if you have any | ||
| 32 | feature requests | ||
diff --git a/Documentation/fb/cyblafb/usage b/Documentation/fb/cyblafb/usage new file mode 100644 index 000000000000..e627c8f54211 --- /dev/null +++ b/Documentation/fb/cyblafb/usage | |||
| @@ -0,0 +1,206 @@ | |||
| 1 | CyBlaFB is a framebuffer driver for the Cyberblade/i1 graphics core integrated | ||
| 2 | into the VIA Apollo PLE133 (aka vt8601) south bridge. It is developed and | ||
| 3 | tested using a VIA EPIA 5000 board. | ||
| 4 | |||
| 5 | Cyblafb - compiled into the kernel or as a module? | ||
| 6 | ================================================== | ||
| 7 | |||
| 8 | You might compile cyblafb either as a module or compile it permanently into the | ||
| 9 | kernel. | ||
| 10 | |||
| 11 | Unless you have a real reason to do so you should not compile both vesafb and | ||
| 12 | cyblafb permanently into the kernel. It's possible and it helps during the | ||
| 13 | developement cycle, but it's useless and will at least block some otherwise | ||
| 14 | usefull memory for ordinary users. | ||
| 15 | |||
| 16 | Selecting Modes | ||
| 17 | =============== | ||
| 18 | |||
| 19 | Startup Mode | ||
| 20 | ============ | ||
| 21 | |||
| 22 | First of all, you might use the "vga=???" boot parameter as it is | ||
| 23 | documented in vesafb.txt and svga.txt. Cyblafb will detect the video | ||
| 24 | mode selected and will use the geometry and timings found by | ||
| 25 | inspecting the hardware registers. | ||
| 26 | |||
| 27 | video=cyblafb vga=0x317 | ||
| 28 | |||
| 29 | Alternatively you might use a combination of the mode, ref and bpp | ||
| 30 | parameters. If you compiled the driver into the kernel, add something | ||
| 31 | like this to the kernel command line: | ||
| 32 | |||
| 33 | video=cyblafb:1280x1024,bpp=16,ref=50 ... | ||
| 34 | |||
| 35 | If you compiled the driver as a module, the same mode would be | ||
| 36 | selected by the following command: | ||
| 37 | |||
| 38 | modprobe cyblafb mode=1280x1024 bpp=16 ref=50 ... | ||
| 39 | |||
| 40 | None of the modes possible to select as startup modes are affected by | ||
| 41 | the problems described at the end of the next subsection. | ||
| 42 | |||
| 43 | Mode changes using fbset | ||
| 44 | ======================== | ||
| 45 | |||
| 46 | You might use fbset to change the video mode, see "man fbset". Cyblafb | ||
| 47 | generally does assume that you know what you are doing. But it does | ||
| 48 | some checks, especially those that are needed to prevent you from | ||
| 49 | damaging your hardware. | ||
| 50 | |||
| 51 | - only 8, 16, 24 and 32 bpp video modes are accepted | ||
| 52 | - interlaced video modes are not accepted | ||
| 53 | - double scan video modes are not accepted | ||
| 54 | - if a flat panel is found, cyblafb does not allow you | ||
| 55 | to program a resolution higher than the physical | ||
| 56 | resolution of the flat panel monitor | ||
| 57 | - cyblafb does not allow xres to differ from xres_virtual | ||
| 58 | - cyblafb does not allow vclk to exceed 230 MHz. As 32 bpp | ||
| 59 | and (currently) 24 bit modes use a doubled vclk internally, | ||
| 60 | the dotclock limit as seen by fbset is 115 MHz for those | ||
| 61 | modes and 230 MHz for 8 and 16 bpp modes. | ||
| 62 | |||
| 63 | Any request that violates the rules given above will be ignored and | ||
| 64 | fbset will return an error. | ||
| 65 | |||
| 66 | If you program a virtual y resolution higher than the hardware limit, | ||
| 67 | cyblafb will silently decrease that value to the highest possible | ||
| 68 | value. | ||
| 69 | |||
| 70 | Attempts to disable acceleration are ignored. | ||
| 71 | |||
| 72 | Some video modes that should work do not work as expected. If you use | ||
| 73 | the standard fb.modes, fbset 640x480-60 will program that mode, but | ||
| 74 | you will see a vertical area, about two characters wide, with only | ||
| 75 | much darker characters than the other characters on the screen. | ||
| 76 | Cyblafb does allow that mode to be set, as it does not violate the | ||
| 77 | official specifications. It would need a lot of code to reliably sort | ||
| 78 | out all invalid modes, playing around with the margin values will | ||
| 79 | give a valid mode quickly. And if cyblafb would detect such an invalid | ||
| 80 | mode, should it silently alter the requested values or should it | ||
| 81 | report an error? Both options have some pros and cons. As stated | ||
| 82 | above, none of the startup modes are affected, and if you set | ||
| 83 | verbosity to 1 or higher, cyblafb will print the fbset command that | ||
| 84 | would be needed to program that mode using fbset. | ||
| 85 | |||
| 86 | |||
| 87 | Other Parameters | ||
| 88 | ================ | ||
| 89 | |||
| 90 | |||
| 91 | crt don't autodetect, assume monitor connected to | ||
| 92 | standard VGA connector | ||
| 93 | |||
| 94 | fp don't autodetect, assume flat panel display | ||
| 95 | connected to flat panel monitor interface | ||
| 96 | |||
| 97 | nativex inform driver about native x resolution of | ||
| 98 | flat panel monitor connected to special | ||
| 99 | interface (should be autodetected) | ||
| 100 | |||
| 101 | stretch stretch image to adapt low resolution modes to | ||
| 102 | higer resolutions of flat panel monitors | ||
| 103 | connected to special interface | ||
| 104 | |||
| 105 | center center image to adapt low resolution modes to | ||
| 106 | higer resolutions of flat panel monitors | ||
| 107 | connected to special interface | ||
| 108 | |||
| 109 | memsize use if autodetected memsize is wrong ... | ||
| 110 | should never be necessary | ||
| 111 | |||
| 112 | nopcirr disable PCI read retry | ||
| 113 | nopciwr disable PCI write retry | ||
| 114 | nopcirb disable PCI read bursts | ||
| 115 | nopciwb disable PCI write bursts | ||
| 116 | |||
| 117 | bpp bpp for specified modes | ||
| 118 | valid values: 8 || 16 || 24 || 32 | ||
| 119 | |||
| 120 | ref refresh rate for specified mode | ||
| 121 | valid values: 50 <= ref <= 85 | ||
| 122 | |||
| 123 | mode 640x480 or 800x600 or 1024x768 or 1280x1024 | ||
| 124 | if not specified, the startup mode will be detected | ||
| 125 | and used, so you might also use the vga=??? parameter | ||
| 126 | described in vesafb.txt. If you do not specify a mode, | ||
| 127 | bpp and ref parameters are ignored. | ||
| 128 | |||
| 129 | verbosity 0 is the default, increase to at least 2 for every | ||
| 130 | bug report! | ||
| 131 | |||
| 132 | vesafb allows cyblafb to be loaded after vesafb has been | ||
| 133 | loaded. See sections "Module unloading ...". | ||
| 134 | |||
| 135 | |||
| 136 | Development hints | ||
| 137 | ================= | ||
| 138 | |||
| 139 | It's much faster do compile a module and to load the new version after | ||
| 140 | unloading the old module than to compile a new kernel and to reboot. So if you | ||
| 141 | try to work on cyblafb, it might be a good idea to use cyblafb as a module. | ||
| 142 | In real life, fast often means dangerous, and that's also the case here. If | ||
| 143 | you introduce a serious bug when cyblafb is compiled into the kernel, the | ||
| 144 | kernel will lock or oops with a high probability before the file system is | ||
| 145 | mounted, and the danger for your data is low. If you load a broken own version | ||
| 146 | of cyblafb on a running system, the danger for the integrity of the file | ||
| 147 | system is much higher as you might need a hard reset afterwards. Decide | ||
| 148 | yourself. | ||
| 149 | |||
| 150 | Module unloading, the vfb method | ||
| 151 | ================================ | ||
| 152 | |||
| 153 | If you want to unload/reload cyblafb using the virtual framebuffer, you need | ||
| 154 | to enable vfb support in the kernel first. After that, load the modules as | ||
| 155 | shown below: | ||
| 156 | |||
| 157 | modprobe vfb vfb_enable=1 | ||
| 158 | modprobe fbcon | ||
| 159 | modprobe cyblafb | ||
| 160 | fbset -fb /dev/fb1 1280x1024-60 -vyres 2662 | ||
| 161 | con2fb /dev/fb1 /dev/tty1 | ||
| 162 | ... | ||
| 163 | |||
| 164 | If you now made some changes to cyblafb and want to reload it, you might do it | ||
| 165 | as show below: | ||
| 166 | |||
| 167 | con2fb /dev/fb0 /dev/tty1 | ||
| 168 | ... | ||
| 169 | rmmod cyblafb | ||
| 170 | modprobe cyblafb | ||
| 171 | con2fb /dev/fb1 /dev/tty1 | ||
| 172 | ... | ||
| 173 | |||
| 174 | Of course, you might choose another mode, and most certainly you also want to | ||
| 175 | map some other /dev/tty* to the real framebuffer device. You might also choose | ||
| 176 | to compile fbcon as a kernel module or place it permanently in the kernel. | ||
| 177 | |||
| 178 | I do not know of any way to unload fbcon, and fbcon will prevent the | ||
| 179 | framebuffer device loaded first from unloading. [If there is a way, then | ||
| 180 | please add a description here!] | ||
| 181 | |||
| 182 | Module unloading, the vesafb method | ||
| 183 | =================================== | ||
| 184 | |||
| 185 | Configure the kernel: | ||
| 186 | |||
| 187 | <*> Support for frame buffer devices | ||
| 188 | [*] VESA VGA graphics support | ||
| 189 | <M> Cyberblade/i1 support | ||
| 190 | |||
| 191 | Add e.g. "video=vesafb:ypan vga=0x307" to the kernel parameters. The ypan | ||
| 192 | parameter is important, choose any vga parameter you like as long as it is | ||
| 193 | a graphics mode. | ||
| 194 | |||
| 195 | After booting, load cyblafb without any mode and bpp parameter and assign | ||
| 196 | cyblafb to individual ttys using con2fb, e.g.: | ||
| 197 | |||
| 198 | modprobe cyblafb vesafb=1 | ||
| 199 | con2fb /dev/fb1 /dev/tty1 | ||
| 200 | |||
| 201 | Unloading cyblafb works without problems after you assign vesafb to all | ||
| 202 | ttys again, e.g.: | ||
| 203 | |||
| 204 | con2fb /dev/fb0 /dev/tty1 | ||
| 205 | rmmod cyblafb | ||
| 206 | |||
diff --git a/Documentation/fb/cyblafb/whycyblafb b/Documentation/fb/cyblafb/whycyblafb new file mode 100644 index 000000000000..a123bc11e698 --- /dev/null +++ b/Documentation/fb/cyblafb/whycyblafb | |||
| @@ -0,0 +1,85 @@ | |||
| 1 | I tried the following framebuffer drivers: | ||
| 2 | |||
| 3 | - TRIDENTFB is full of bugs. Acceleration is broken for Blade3D | ||
| 4 | graphics cores like the cyberblade/i1. It claims to support a great | ||
| 5 | number of devices, but documentation for most of these devices is | ||
| 6 | unfortunately not available. There is _no_ reason to use tridentfb | ||
| 7 | for cyberblade/i1 + CRT users. VESAFB is faster, and the one | ||
| 8 | advantage, mode switching, is broken in tridentfb. | ||
| 9 | |||
| 10 | - VESAFB is used by many distributions as a standard. Vesafb does | ||
| 11 | not support mode switching. VESAFB is a bit faster than the working | ||
| 12 | configurations of TRIDENTFB, but it is still too slow, even if you | ||
| 13 | use ypan. | ||
| 14 | |||
| 15 | - EPIAFB (you'll find it on sourceforge) supports the Cyberblade/i1 | ||
| 16 | graphics core, but it still has serious bugs and developement seems | ||
| 17 | to have stopped. This is the one driver with TV-out support. If you | ||
| 18 | do need this feature, try epiafb. | ||
| 19 | |||
| 20 | None of these drivers was a real option for me. | ||
| 21 | |||
| 22 | I believe that is unreasonable to change code that announces to support 20 | ||
| 23 | devices if I only have more or less sufficient documentation for exactly one | ||
| 24 | of these. The risk of breaking device foo while fixing device bar is too high. | ||
| 25 | |||
| 26 | So I decided to start CyBlaFB as a stripped down tridentfb. | ||
| 27 | |||
| 28 | All code specific to other Trident chips has been removed. After that there | ||
| 29 | were a lot of cosmetic changes to increase the readability of the code. All | ||
| 30 | register names were changed to those mnemonics used in the datasheet. Function | ||
| 31 | and macro names were changed if they hindered easy understanding of the code. | ||
| 32 | |||
| 33 | After that I debugged the code and implemented some new features. I'll try to | ||
| 34 | give a little summary of the main changes: | ||
| 35 | |||
| 36 | - calculation of vertical and horizontal timings was fixed | ||
| 37 | |||
| 38 | - video signal quality has been improved dramatically | ||
| 39 | |||
| 40 | - acceleration: | ||
| 41 | |||
| 42 | - fillrect and copyarea were fixed and reenabled | ||
| 43 | |||
| 44 | - color expanding imageblit was newly implemented, color | ||
| 45 | imageblit (only used to draw the penguine) still uses the | ||
| 46 | generic code. | ||
| 47 | |||
| 48 | - init of the acceleration engine was improved and moved to a | ||
| 49 | place where it really works ... | ||
| 50 | |||
| 51 | - sync function has a timeout now and tries to reset and | ||
| 52 | reinit the accel engine if necessary | ||
| 53 | |||
| 54 | - fewer slow copyarea calls when doing ypan scrolling by using | ||
| 55 | undocumented bit d21 of screen start address stored in | ||
| 56 | CR2B[5]. BIOS does use it also, so this should be safe. | ||
| 57 | |||
| 58 | - cyblafb rejects any attempt to set modes that would cause vclk | ||
| 59 | values above reasonable 230 MHz. 32bit modes use a clock | ||
| 60 | multiplicator of 2, so fbset does show the correct values for | ||
| 61 | pixclock but not for vclk in this case. The fbset limit is 115 MHz | ||
| 62 | for 32 bpp modes. | ||
| 63 | |||
| 64 | - cyblafb rejects modes known to be broken or unimplemented (all | ||
| 65 | interlaced modes, all doublescan modes for now) | ||
| 66 | |||
| 67 | - cyblafb now works independant of the video mode in effect at startup | ||
| 68 | time (tridentfb does not init all needed registers to reasonable | ||
| 69 | values) | ||
| 70 | |||
| 71 | - switching between video modes does work reliably now | ||
| 72 | |||
| 73 | - the first video mode now is the one selected on startup using the | ||
| 74 | vga=???? mechanism or any of | ||
| 75 | - 640x480, 800x600, 1024x768, 1280x1024 | ||
| 76 | - 8, 16, 24 or 32 bpp | ||
| 77 | - refresh between 50 Hz and 85 Hz, 1 Hz steps (1280x1024-32 | ||
| 78 | is limited to 63Hz) | ||
| 79 | |||
| 80 | - pci retry and pci burst mode are settable (try to disable if you | ||
| 81 | experience latency problems) | ||
| 82 | |||
| 83 | - built as a module cyblafb might be unloaded and reloaded using | ||
| 84 | the vfb module and con2vt or might be used together with vesafb | ||
| 85 | |||
diff --git a/Documentation/fb/modedb.txt b/Documentation/fb/modedb.txt index e04458b319d5..4fcdb4cf4cca 100644 --- a/Documentation/fb/modedb.txt +++ b/Documentation/fb/modedb.txt | |||
| @@ -20,12 +20,83 @@ in a video= option, fbmem considers that to be a global video mode option. | |||
| 20 | 20 | ||
| 21 | Valid mode specifiers (mode_option argument): | 21 | Valid mode specifiers (mode_option argument): |
| 22 | 22 | ||
| 23 | <xres>x<yres>[-<bpp>][@<refresh>] | 23 | <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m] |
| 24 | <name>[-<bpp>][@<refresh>] | 24 | <name>[-<bpp>][@<refresh>] |
| 25 | 25 | ||
| 26 | with <xres>, <yres>, <bpp> and <refresh> decimal numbers and <name> a string. | 26 | with <xres>, <yres>, <bpp> and <refresh> decimal numbers and <name> a string. |
| 27 | Things between square brackets are optional. | 27 | Things between square brackets are optional. |
| 28 | 28 | ||
| 29 | If 'M' is specified in the mode_option argument (after <yres> and before | ||
| 30 | <bpp> and <refresh>, if specified) the timings will be calculated using | ||
| 31 | VESA(TM) Coordinated Video Timings instead of looking up the mode from a table. | ||
| 32 | If 'R' is specified, do a 'reduced blanking' calculation for digital displays. | ||
| 33 | If 'i' is specified, calculate for an interlaced mode. And if 'm' is | ||
| 34 | specified, add margins to the calculation (1.8% of xres rounded down to 8 | ||
| 35 | pixels and 1.8% of yres). | ||
| 36 | |||
| 37 | Sample usage: 1024x768M@60m - CVT timing with margins | ||
| 38 | |||
| 39 | ***** oOo ***** oOo ***** oOo ***** oOo ***** oOo ***** oOo ***** oOo ***** | ||
| 40 | |||
| 41 | What is the VESA(TM) Coordinated Video Timings (CVT)? | ||
| 42 | |||
| 43 | From the VESA(TM) Website: | ||
| 44 | |||
| 45 | "The purpose of CVT is to provide a method for generating a consistent | ||
| 46 | and coordinated set of standard formats, display refresh rates, and | ||
| 47 | timing specifications for computer display products, both those | ||
| 48 | employing CRTs, and those using other display technologies. The | ||
| 49 | intention of CVT is to give both source and display manufacturers a | ||
| 50 | common set of tools to enable new timings to be developed in a | ||
| 51 | consistent manner that ensures greater compatibility." | ||
| 52 | |||
| 53 | This is the third standard approved by VESA(TM) concerning video timings. The | ||
| 54 | first was the Discrete Video Timings (DVT) which is a collection of | ||
| 55 | pre-defined modes approved by VESA(TM). The second is the Generalized Timing | ||
| 56 | Formula (GTF) which is an algorithm to calculate the timings, given the | ||
| 57 | pixelclock, the horizontal sync frequency, or the vertical refresh rate. | ||
| 58 | |||
| 59 | The GTF is limited by the fact that it is designed mainly for CRT displays. | ||
| 60 | It artificially increases the pixelclock because of its high blanking | ||
| 61 | requirement. This is inappropriate for digital display interface with its high | ||
| 62 | data rate which requires that it conserves the pixelclock as much as possible. | ||
| 63 | Also, GTF does not take into account the aspect ratio of the display. | ||
| 64 | |||
| 65 | The CVT addresses these limitations. If used with CRT's, the formula used | ||
| 66 | is a derivation of GTF with a few modifications. If used with digital | ||
| 67 | displays, the "reduced blanking" calculation can be used. | ||
| 68 | |||
| 69 | From the framebuffer subsystem perspective, new formats need not be added | ||
| 70 | to the global mode database whenever a new mode is released by display | ||
| 71 | manufacturers. Specifying for CVT will work for most, if not all, relatively | ||
| 72 | new CRT displays and probably with most flatpanels, if 'reduced blanking' | ||
| 73 | calculation is specified. (The CVT compatibility of the display can be | ||
| 74 | determined from its EDID. The version 1.3 of the EDID has extra 128-byte | ||
| 75 | blocks where additional timing information is placed. As of this time, there | ||
| 76 | is no support yet in the layer to parse this additional blocks.) | ||
| 77 | |||
| 78 | CVT also introduced a new naming convention (should be seen from dmesg output): | ||
| 79 | |||
| 80 | <pix>M<a>[-R] | ||
| 81 | |||
| 82 | where: pix = total amount of pixels in MB (xres x yres) | ||
| 83 | M = always present | ||
| 84 | a = aspect ratio (3 - 4:3; 4 - 5:4; 9 - 15:9, 16:9; A - 16:10) | ||
| 85 | -R = reduced blanking | ||
| 86 | |||
| 87 | example: .48M3-R - 800x600 with reduced blanking | ||
| 88 | |||
| 89 | Note: VESA(TM) has restrictions on what is a standard CVT timing: | ||
| 90 | |||
| 91 | - aspect ratio can only be one of the above values | ||
| 92 | - acceptable refresh rates are 50, 60, 70 or 85 Hz only | ||
| 93 | - if reduced blanking, the refresh rate must be at 60Hz | ||
| 94 | |||
| 95 | If one of the above are not satisfied, the kernel will print a warning but the | ||
| 96 | timings will still be calculated. | ||
| 97 | |||
| 98 | ***** oOo ***** oOo ***** oOo ***** oOo ***** oOo ***** oOo ***** oOo ***** | ||
| 99 | |||
| 29 | To find a suitable video mode, you just call | 100 | To find a suitable video mode, you just call |
| 30 | 101 | ||
| 31 | int __init fb_find_mode(struct fb_var_screeninfo *var, | 102 | int __init fb_find_mode(struct fb_var_screeninfo *var, |
