2003-07-28 20:11:18

by Sven Schnelle

[permalink] [raw]
Subject: Framebuffer Console

Hi,

while testing linux-2.6.0-test2 I have some strange framebuffer(rivafb,
but maybe this appears on other card's too)
behaviour:

1) Screen is not restored after switching from X11 back to textmode
2) Cursor shows wrong characters


This patch solve the problems for me:

-------------------------------------8<--------------------------------
diff -ur linux-2.6.0-test2/drivers/video/console/fbcon.c linux-2.6.0-test2-sv/drivers/video/console/fbcon.c
--- linux-2.6.0-test2/drivers/video/console/fbcon.c 2003-07-27 19:05:15.000000000 +0200
+++ linux-2.6.0-test2-sv/drivers/video/console/fbcon.c 2003-07-28 10:40:38.000000000 +0200
@@ -1056,7 +1056,7 @@
cursor.set |= FB_CUR_SETHOT;
}

- if ((cursor.set & FB_CUR_SETSIZE) || ((vc->vc_cursor_type & 0x0f) != p->cursor_shape)) {
+ if ((cursor.set & FB_CUR_SETSIZE) || (cursor.set & FB_CUR_SETCUR) || ((vc->vc_cursor_type & 0x0f) != p->cursor_shape)) {
char *mask = kmalloc(w*vc->vc_font.height, GFP_ATOMIC);
int cur_height, size, i = 0;

@@ -1704,8 +1704,13 @@
if (blank < 0) /* Entering graphics mode */
return 0;

+ /* FIXME: Dirty Hack */
+ info->cursor.image.height = 0; /* Need to set cursor size */
+ info->cursor.image.width = 0;
fbcon_cursor(vc, blank ? CM_ERASE : CM_DRAW);

+ fbcon_clear(vc, 0, 0, vc->vc_rows, vc->vc_cols);
+ update_screen(vc->vc_num);
if (!info->fbops->fb_blank) {
if (blank) {
unsigned short oldc;
-----------------------------------8<--------------------------------------

don't know if this is the right way, but it works...

Regards,
--
Sven Schnelle, <[email protected]>
-----------------------------------------


Attachments:
(No filename) (1.61 kB)
(No filename) (189.00 B)
Download all attachments

2003-07-29 07:19:33

by Gábor Lénárt

[permalink] [raw]
Subject: Re: Framebuffer Console

Though I did not check this patch below, with 2.6.0-test1 kernel MGA
framebuffer console is totally unusable. Eg scrolling and major screen
update tasks corrupt the screen heavily with vertical lines everywhere
and other even "funnier" effects occured. With plain text consol there is
no problem however I NEED framebuffer console (eg playing video on the
console without X). It as a Matrox G400 card.

On Mon, Jul 28, 2003 at 10:10:06PM +0200, Sven Schnelle wrote:
> Hi,
>
> while testing linux-2.6.0-test2 I have some strange framebuffer(rivafb,
> but maybe this appears on other card's too)
> behaviour:
>
> 1) Screen is not restored after switching from X11 back to textmode
> 2) Cursor shows wrong characters
>
>
> This patch solve the problems for me:
>
> -------------------------------------8<--------------------------------
> diff -ur linux-2.6.0-test2/drivers/video/console/fbcon.c linux-2.6.0-test2-sv/drivers/video/console/fbcon.c
> --- linux-2.6.0-test2/drivers/video/console/fbcon.c 2003-07-27 19:05:15.000000000 +0200
> +++ linux-2.6.0-test2-sv/drivers/video/console/fbcon.c 2003-07-28 10:40:38.000000000 +0200
> @@ -1056,7 +1056,7 @@
> cursor.set |= FB_CUR_SETHOT;
> }
>
> - if ((cursor.set & FB_CUR_SETSIZE) || ((vc->vc_cursor_type & 0x0f) != p->cursor_shape)) {
> + if ((cursor.set & FB_CUR_SETSIZE) || (cursor.set & FB_CUR_SETCUR) || ((vc->vc_cursor_type & 0x0f) != p->cursor_shape)) {
> char *mask = kmalloc(w*vc->vc_font.height, GFP_ATOMIC);
> int cur_height, size, i = 0;
>
> @@ -1704,8 +1704,13 @@
> if (blank < 0) /* Entering graphics mode */
> return 0;
>
> + /* FIXME: Dirty Hack */
> + info->cursor.image.height = 0; /* Need to set cursor size */
> + info->cursor.image.width = 0;
> fbcon_cursor(vc, blank ? CM_ERASE : CM_DRAW);
>
> + fbcon_clear(vc, 0, 0, vc->vc_rows, vc->vc_cols);
> + update_screen(vc->vc_num);
> if (!info->fbops->fb_blank) {
> if (blank) {
> unsigned short oldc;
> -----------------------------------8<--------------------------------------
>
> don't know if this is the right way, but it works...
>
> Regards,
> --
> Sven Schnelle, <[email protected]>
> -----------------------------------------



--
- G?bor (larta'H)

2003-07-29 17:46:25

by James Simmons

[permalink] [raw]
Subject: Re: Framebuffer Console


> while testing linux-2.6.0-test2 I have some strange framebuffer(rivafb,
> but maybe this appears on other card's too)
> behaviour:
>
> 1) Screen is not restored after switching from X11 back to textmode

Try adding UseFBDev "true" to your XF86Config file.

> 2) Cursor shows wrong characters

> This patch solve the problems for me:
>
> -------------------------------------8<--------------------------------
> diff -ur linux-2.6.0-test2/drivers/video/console/fbcon.c linux-2.6.0-test2-sv/drivers/video/console/fbcon.c
> --- linux-2.6.0-test2/drivers/video/console/fbcon.c 2003-07-27 19:05:15.000000000 +0200
> +++ linux-2.6.0-test2-sv/drivers/video/console/fbcon.c 2003-07-28 10:40:38.000000000 +0200
> @@ -1056,7 +1056,7 @@
> cursor.set |= FB_CUR_SETHOT;
> }
>
> - if ((cursor.set & FB_CUR_SETSIZE) || ((vc->vc_cursor_type & 0x0f) != p->cursor_shape)) {
> + if ((cursor.set & FB_CUR_SETSIZE) || (cursor.set & FB_CUR_SETCUR) || ((vc->vc_cursor_type & 0x0f) != p->cursor_shape)) {
> char *mask = kmalloc(w*vc->vc_font.height, GFP_ATOMIC);
> int cur_height, size, i = 0;

This is wrong. FB_CUR_SETCUR is used only by the userland cursor
interface. We use it to turn the cursor on and off via userland this way.
Internal to the kernel we just toggle the enable flag.

> @@ -1704,8 +1704,13 @@
> if (blank < 0) /* Entering graphics mode */
> return 0;
>
> + /* FIXME: Dirty Hack */
> + info->cursor.image.height = 0; /* Need to set cursor size */
> + info->cursor.image.width = 0;
> fbcon_cursor(vc, blank ? CM_ERASE : CM_DRAW);
>
> + fbcon_clear(vc, 0, 0, vc->vc_rows, vc->vc_cols);
> + update_screen(vc->vc_num);
> if (!info->fbops->fb_blank) {
> if (blank) {
> unsigned short oldc;

This is a fluke that it helps. The cursor shows wrong characters because
the code logic is wrong. I'm working on the new code.