Browse Source

[PATCH] Update cyblafb driver

This is a major update to the cyblafb framebuffer driver. Most
of the stuff has been tested in the mm tree.

Main advantages:
============
  - vxres > xres support
  - ywrap and xpan support
  - much faster for almost all modes (e.g. 1280x1024-16bpp
     draws more than 41 full screens of text instead of about 25
     full screens of text per second on authors Epia 5000)
  - module init/exit code fixed
  - bugs triggered by console rotation fixed
  - lots of minor improvements
  - startup modes suitable for high performance scrolling
     in all directions

This diff  also contains a lot of white space fixes.

No side effects are possible, only one single graphics core is affected.

Signed-off-by: Knut Petersen <Knut_Petersen@t-online.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Knut Petersen 19 years ago
parent
commit
44637a12f8

+ 0 - 1
Documentation/fb/cyblafb/bugs

@@ -11,4 +11,3 @@ Untested features
 
 
 All LCD stuff is untested. If it worked in tridentfb, it should work in
 All LCD stuff is untested. If it worked in tridentfb, it should work in
 cyblafb. Please test and report the results to Knut_Petersen@t-online.de.
 cyblafb. Please test and report the results to Knut_Petersen@t-online.de.
-

+ 28 - 29
Documentation/fb/cyblafb/fb.modes

@@ -14,142 +14,141 @@
 #
 #
 
 
 mode "640x480-50"
 mode "640x480-50"
-    geometry 640 480 640 3756 8
+    geometry 640 480 2048 4096 8
     timings 47619 4294967256 24 17 0 216 3
     timings 47619 4294967256 24 17 0 216 3
 endmode
 endmode
 
 
 mode "640x480-60"
 mode "640x480-60"
-    geometry 640 480 640 3756 8
+    geometry 640 480 2048 4096 8
     timings 39682 4294967256 24 17 0 216 3
     timings 39682 4294967256 24 17 0 216 3
 endmode
 endmode
 
 
 mode "640x480-70"
 mode "640x480-70"
-    geometry 640 480 640 3756 8
+    geometry 640 480 2048 4096 8
     timings 34013 4294967256 24 17 0 216 3
     timings 34013 4294967256 24 17 0 216 3
 endmode
 endmode
 
 
 mode "640x480-72"
 mode "640x480-72"
-    geometry 640 480 640 3756 8
+    geometry 640 480 2048 4096 8
     timings 33068 4294967256 24 17 0 216 3
     timings 33068 4294967256 24 17 0 216 3
 endmode
 endmode
 
 
 mode "640x480-75"
 mode "640x480-75"
-    geometry 640 480 640 3756 8
+    geometry 640 480 2048 4096 8
     timings 31746 4294967256 24 17 0 216 3
     timings 31746 4294967256 24 17 0 216 3
 endmode
 endmode
 
 
 mode "640x480-80"
 mode "640x480-80"
-    geometry 640 480 640 3756 8
+    geometry 640 480 2048 4096 8
     timings 29761 4294967256 24 17 0 216 3
     timings 29761 4294967256 24 17 0 216 3
 endmode
 endmode
 
 
 mode "640x480-85"
 mode "640x480-85"
-    geometry 640 480 640 3756 8
+    geometry 640 480 2048 4096 8
     timings 28011 4294967256 24 17 0 216 3
     timings 28011 4294967256 24 17 0 216 3
 endmode
 endmode
 
 
 mode "800x600-50"
 mode "800x600-50"
-    geometry 800 600 800 3221 8
+    geometry 800 600 2048 4096 8
     timings 30303 96 24 14 0 136 11
     timings 30303 96 24 14 0 136 11
 endmode
 endmode
 
 
 mode "800x600-60"
 mode "800x600-60"
-    geometry 800 600 800 3221 8
+    geometry 800 600 2048 4096 8
     timings 25252 96 24 14 0 136 11
     timings 25252 96 24 14 0 136 11
 endmode
 endmode
 
 
 mode "800x600-70"
 mode "800x600-70"
-    geometry 800 600 800 3221 8
+    geometry 800 600 2048 4096 8
     timings 21645 96 24 14 0 136 11
     timings 21645 96 24 14 0 136 11
 endmode
 endmode
 
 
 mode "800x600-72"
 mode "800x600-72"
-    geometry 800 600 800 3221 8
+    geometry 800 600 2048 4096 8
     timings 21043 96 24 14 0 136 11
     timings 21043 96 24 14 0 136 11
 endmode
 endmode
 
 
 mode "800x600-75"
 mode "800x600-75"
-    geometry 800 600 800 3221 8
+    geometry 800 600 2048 4096 8
     timings 20202 96 24 14 0 136 11
     timings 20202 96 24 14 0 136 11
 endmode
 endmode
 
 
 mode "800x600-80"
 mode "800x600-80"
-    geometry 800 600 800 3221 8
+    geometry 800 600 2048 4096 8
     timings 18939 96 24 14 0 136 11
     timings 18939 96 24 14 0 136 11
 endmode
 endmode
 
 
 mode "800x600-85"
 mode "800x600-85"
-    geometry 800 600 800 3221 8
+    geometry 800 600 2048 4096 8
     timings 17825 96 24 14 0 136 11
     timings 17825 96 24 14 0 136 11
 endmode
 endmode
 
 
 mode "1024x768-50"
 mode "1024x768-50"
-    geometry 1024 768 1024 2815 8
+    geometry 1024 768 2048 4096 8
     timings 19054 144 24 29 0 120 3
     timings 19054 144 24 29 0 120 3
 endmode
 endmode
 
 
 mode "1024x768-60"
 mode "1024x768-60"
-    geometry 1024 768 1024 2815 8
+    geometry 1024 768 2048 4096 8
     timings 15880 144 24 29 0 120 3
     timings 15880 144 24 29 0 120 3
 endmode
 endmode
 
 
 mode "1024x768-70"
 mode "1024x768-70"
-    geometry 1024 768 1024 2815 8
+    geometry 1024 768 2048 4096 8
     timings 13610 144 24 29 0 120 3
     timings 13610 144 24 29 0 120 3
 endmode
 endmode
 
 
 mode "1024x768-72"
 mode "1024x768-72"
-    geometry 1024 768 1024 2815 8
+    geometry 1024 768 2048 4096 8
     timings 13232 144 24 29 0 120 3
     timings 13232 144 24 29 0 120 3
 endmode
 endmode
 
 
 mode "1024x768-75"
 mode "1024x768-75"
-    geometry 1024 768 1024 2815 8
+    geometry 1024 768 2048 4096 8
     timings 12703 144 24 29 0 120 3
     timings 12703 144 24 29 0 120 3
 endmode
 endmode
 
 
 mode "1024x768-80"
 mode "1024x768-80"
-    geometry 1024 768 1024 2815 8
+    geometry 1024 768 2048 4096 8
     timings 11910 144 24 29 0 120 3
     timings 11910 144 24 29 0 120 3
 endmode
 endmode
 
 
 mode "1024x768-85"
 mode "1024x768-85"
-    geometry 1024 768 1024 2815 8
+    geometry 1024 768 2048 4096 8
     timings 11209 144 24 29 0 120 3
     timings 11209 144 24 29 0 120 3
 endmode
 endmode
 
 
 mode "1280x1024-50"
 mode "1280x1024-50"
-    geometry 1280 1024 1280 2662 8
+    geometry 1280 1024 2048 4096 8
     timings 11114 232 16 39 0 160 3
     timings 11114 232 16 39 0 160 3
 endmode
 endmode
 
 
 mode "1280x1024-60"
 mode "1280x1024-60"
-    geometry 1280 1024 1280 2662 8
+    geometry 1280 1024 2048 4096 8
     timings 9262 232 16 39 0 160 3
     timings 9262 232 16 39 0 160 3
 endmode
 endmode
 
 
 mode "1280x1024-70"
 mode "1280x1024-70"
-    geometry 1280 1024 1280 2662 8
+    geometry 1280 1024 2048 4096 8
     timings 7939 232 16 39 0 160 3
     timings 7939 232 16 39 0 160 3
 endmode
 endmode
 
 
 mode "1280x1024-72"
 mode "1280x1024-72"
-    geometry 1280 1024 1280 2662 8
+    geometry 1280 1024 2048 4096 8
     timings 7719 232 16 39 0 160 3
     timings 7719 232 16 39 0 160 3
 endmode
 endmode
 
 
 mode "1280x1024-75"
 mode "1280x1024-75"
-    geometry 1280 1024 1280 2662 8
+    geometry 1280 1024 2048 4096 8
     timings 7410 232 16 39 0 160 3
     timings 7410 232 16 39 0 160 3
 endmode
 endmode
 
 
 mode "1280x1024-80"
 mode "1280x1024-80"
-    geometry 1280 1024 1280 2662 8
+    geometry 1280 1024 2048 4096 8
     timings 6946 232 16 39 0 160 3
     timings 6946 232 16 39 0 160 3
 endmode
 endmode
 
 
 mode "1280x1024-85"
 mode "1280x1024-85"
-    geometry 1280 1024 1280 2662 8
+    geometry 1280 1024 2048 4096 8
     timings 6538 232 16 39 0 160 3
     timings 6538 232 16 39 0 160 3
 endmode
 endmode
-

+ 0 - 1
Documentation/fb/cyblafb/performance

@@ -77,4 +77,3 @@ patch that speeds up kernel bitblitting a lot ( > 20%).
 |	    |		      | 		|		  |
 |	    |		      | 		|		  |
 |	    |		      | 		|		  |
 |	    |		      | 		|		  |
 +-----------+-----------------+-----------------+-----------------+
 +-----------+-----------------+-----------------+-----------------+
-

+ 2 - 3
Documentation/fb/cyblafb/todo

@@ -22,11 +22,10 @@ accelerated color blitting	Who needs it? The console driver does use color
 				everything else is done using color expanding
 				everything else is done using color expanding
 				blitting of 1bpp character bitmaps.
 				blitting of 1bpp character bitmaps.
 
 
-xpanning			Who needs it?
-
 ioctls				Who needs it?
 ioctls				Who needs it?
 
 
-TV-out				Will be done later
+TV-out				Will be done later. Use "vga= " at boot time
+				to set a suitable video mode.
 
 
 ???				Feel free to contact me if you have any
 ???				Feel free to contact me if you have any
 				feature requests
 				feature requests

+ 22 - 11
Documentation/fb/cyblafb/usage

@@ -40,6 +40,16 @@ Selecting Modes
 	None of the modes possible to select as startup modes are affected by
 	None of the modes possible to select as startup modes are affected by
 	the problems described at the end of the next subsection.
 	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
 	Mode changes using fbset
 	========================
 	========================
 
 
@@ -54,20 +64,26 @@ Selecting Modes
 		- if a flat panel is found, cyblafb does not allow you
 		- if a flat panel is found, cyblafb does not allow you
 		  to program a resolution higher than the physical
 		  to program a resolution higher than the physical
 		  resolution of the flat panel monitor
 		  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
 		- cyblafb does not allow vclk to exceed 230 MHz. As 32 bpp
 		  and (currently) 24 bit modes use a doubled vclk internally,
 		  and (currently) 24 bit modes use a doubled vclk internally,
 		  the dotclock limit as seen by fbset is 115 MHz for those
 		  the dotclock limit as seen by fbset is 115 MHz for those
 		  modes and 230 MHz for 8 and 16 bpp modes.
 		  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 ignored and
-	fbset will return an error.
+	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,
 	If you program a virtual y resolution higher than the hardware limit,
 	cyblafb will silently decrease that value to the highest possible
 	cyblafb will silently decrease that value to the highest possible
-	value.
+	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.
+	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
 	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
 	the standard fb.modes, fbset 640x480-60 will program that mode, but
@@ -129,10 +145,6 @@ mode		640x480 or 800x600 or 1024x768 or 1280x1024
 verbosity	0 is the default, increase to at least 2 for every
 verbosity	0 is the default, increase to at least 2 for every
 		bug report!
 		bug report!
 
 
-vesafb		allows cyblafb to be loaded after vesafb has been
-		loaded. See sections "Module unloading ...".
-
-
 Development hints
 Development hints
 =================
 =================
 
 
@@ -195,7 +207,7 @@ a graphics mode.
 After booting, load cyblafb without any mode and bpp parameter and assign
 After booting, load cyblafb without any mode and bpp parameter and assign
 cyblafb to individual ttys using con2fb, e.g.:
 cyblafb to individual ttys using con2fb, e.g.:
 
 
-	modprobe cyblafb vesafb=1
+	modprobe cyblafb
 	con2fb /dev/fb1 /dev/tty1
 	con2fb /dev/fb1 /dev/tty1
 
 
 Unloading cyblafb works without problems after you assign vesafb to all
 Unloading cyblafb works without problems after you assign vesafb to all
@@ -203,4 +215,3 @@ ttys again, e.g.:
 
 
 	con2fb /dev/fb0 /dev/tty1
 	con2fb /dev/fb0 /dev/tty1
 	rmmod cyblafb
 	rmmod cyblafb
-

+ 29 - 0
Documentation/fb/cyblafb/whatsnew

@@ -0,0 +1,29 @@
+0.62
+====
+
+      - the vesafb parameter has been removed as I decided to allow the
+      	feature without any special parameter.
+
+      - Cyblafb does not use the vga style of panning any longer, now the
+      	"right view" register in the graphics engine IO space is used. Without
+	that change it was impossible to use all available memory, and without
+	access to all available memory it is impossible to ywrap.
+
+      - The imageblit function now uses hardware acceleration for all font
+        widths. Hardware blitting across pixel column 2048 is broken in the
+	cyberblade/i1 graphics core, but we work around that hardware bug.
+
+      - modes with vxres != xres are supported now.
+
+      - ywrap scrolling is supported now and the default. This is a big
+        performance gain.
+
+      - default video modes use vyres > yres and vxres > xres to allow
+        almost optimal scrolling speed for normal and rotated screens
+
+      - some features mainly usefull for debugging the upper layers of the
+        framebuffer system have been added, have a look at the code
+
+      - fixed: Oops after unloading cyblafb when reading /proc/io*
+
+      - we work around some bugs of the higher framebuffer layers.

+ 1 - 1
drivers/video/Kconfig

@@ -1151,7 +1151,7 @@ config FB_VOODOO1
 
 
 config FB_CYBLA
 config FB_CYBLA
 	tristate "Cyberblade/i1 support"
 	tristate "Cyberblade/i1 support"
-	depends on FB && PCI
+	depends on FB && PCI && X86_32 && !64BIT
 	select FB_CFB_IMAGEBLIT
 	select FB_CFB_IMAGEBLIT
 	select VIDEO_SELECT
 	select VIDEO_SELECT
 	---help---
 	---help---

File diff suppressed because it is too large
+ 451 - 299
drivers/video/cyblafb.c


+ 4 - 0
include/video/cyblafb.h

@@ -153,6 +153,10 @@
 #define GE04	(GEBase+0x04)	// source 2, p 111
 #define GE04	(GEBase+0x04)	// source 2, p 111
 #define GE08	(GEBase+0x08)	// destination 1, p 111
 #define GE08	(GEBase+0x08)	// destination 1, p 111
 #define GE0C	(GEBase+0x0C)	// destination 2, p 112
 #define GE0C	(GEBase+0x0C)	// destination 2, p 112
+#define GE10	(GEBase+0x10)	// right view base & enable, p 112
+#define GE13	(GEBase+0x13)	// left view base & enable, p 112
+#define GE18	(GEBase+0x18)	// block write start address, p 112
+#define GE1C	(GEBase+0x1C)	// block write end address, p 112
 #define GE20	(GEBase+0x20)	// engine status, p 113
 #define GE20	(GEBase+0x20)	// engine status, p 113
 #define GE24	(GEBase+0x24)	// reset all GE pointers
 #define GE24	(GEBase+0x24)	// reset all GE pointers
 #define GE44	(GEBase+0x44)	// command register, p 126
 #define GE44	(GEBase+0x44)	// command register, p 126

Some files were not shown because too many files changed in this diff