* 2 more fbcon rotation bugs
@ 2005-11-18 15:23 Knut Petersen
2005-11-18 20:23 ` Antonino A. Daplas
0 siblings, 1 reply; 12+ messages in thread
From: Knut Petersen @ 2005-11-18 15:23 UTC (permalink / raw)
To: Antonino A. Daplas; +Cc: linux-fbdev-devel
Hi Antonino,
For rotation values of 1 and 3 in combination with unusual font heights
there are
serious cursor problems:
standard 8x16 and arial 22x24: ok
comic 16x26 and bitstream 16x30: broken as described below.
1: Load e.g. bitstream 16x30 font and switch to rotation 1.
2: At the bash prompt, type "asdf > qwer" without the quotation marks
and without
hitting enter.
3: Try to delete the letters q,w,e,r and reenter them. Everything works
fine.
4: Now place the cursor immediately behind the letter f and delete it.
Everything ok.
5. Hit the key f to reenter that letter .... now something breaks:
a: an f is inserted at the correct position
b: an f flashes for a short period at the place of the first space,
then it is overwritten
by the correct space character and the blinking cursor
c: the > at the right of the cursor is permanently overwritten with
a blank and a
frozen underline of the cursor, the line now reads asdf _ _ qwer.
Deleting and reinserting the other characters before the > gives similar
results, e.g.
for the letter s the result is "asdd > qwer", the first d switching from
s to d fast but
visible and with the blinking cursor, the 2nd d (that should be an f)
permanently
underlined.
No problems are visible if only one string of letters (even a long one)
is entered and
edited at the bash prompt.
Any idea where to start? Can you reproduce the odd behaviour? My first
idea was
to look into ccw_cursor() and cw_cursor(), but as there are no errors
for long strings
if they do not contain spaces, > or other signs of a special meaning to
bash, I suppose
that this is not the right/only place to start. My system is slow (Via
Eden cpu, 533Mhz),
could it be that the bug is invisible on faster machines? ...
cu,
Knut
-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc. Get Certified Today
Register for a JBoss Training Course. Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: 2 more fbcon rotation bugs
2005-11-18 15:23 2 more fbcon rotation bugs Knut Petersen
@ 2005-11-18 20:23 ` Antonino A. Daplas
2005-11-19 10:12 ` Knut Petersen
2005-11-22 6:34 ` Knut Petersen
0 siblings, 2 replies; 12+ messages in thread
From: Antonino A. Daplas @ 2005-11-18 20:23 UTC (permalink / raw)
To: Knut Petersen; +Cc: linux-fbdev-devel
Knut Petersen wrote:
> Hi Antonino,
>
> For rotation values of 1 and 3 in combination with unusual font heights
> there are
> serious cursor problems:
>
> standard 8x16 and arial 22x24: ok
> comic 16x26 and bitstream 16x30: broken as described below.
>
> 1: Load e.g. bitstream 16x30 font and switch to rotation 1.
> 2: At the bash prompt, type "asdf > qwer" without the quotation marks
> and without
> hitting enter.
> 3: Try to delete the letters q,w,e,r and reenter them. Everything works
> fine.
> 4: Now place the cursor immediately behind the letter f and delete it.
> Everything ok.
> 5. Hit the key f to reenter that letter .... now something breaks:
> a: an f is inserted at the correct position
> b: an f flashes for a short period at the place of the first space,
> then it is overwritten
> by the correct space character and the blinking cursor
> c: the > at the right of the cursor is permanently overwritten with a
> blank and a
> frozen underline of the cursor, the line now reads asdf _ _ qwer.
>
> Deleting and reinserting the other characters before the > gives similar
> results, e.g.
> for the letter s the result is "asdd > qwer", the first d switching from
> s to d fast but
> visible and with the blinking cursor, the 2nd d (that should be an f)
> permanently
> underlined.
>
> No problems are visible if only one string of letters (even a long one)
> is entered and
> edited at the bash prompt.
>
> Any idea where to start? Can you reproduce the odd behaviour?
This one I cannot reproduce. Have you tried reproducing it with vesafb?
Any message in the log, such as a kernel oops? Your description sounds
like a corruption of cursor->mask and cursor->image.data.
> My first
> idea was
> to look into ccw_cursor() and cw_cursor(), but as there are no errors
> for long strings
> if they do not contain spaces, > or other signs of a special meaning to
> bash, I suppose
> that this is not the right/only place to start. My system is slow (Via
> Eden cpu, 533Mhz),
> could it be that the bug is invisible on faster machines? ...
You can also try enabling a non-blinking block cursor
(Documentation/VGA-softcursor.txt) to isolate the problem. With a
non-blinking block cursor, fbcon's cursor is disabled and vt.c's softcursor
takes over.
You also said that the cursor becomes fixed. You can comment out the call
to ops->cursor in fb_flashcursor in fbcon.c so you get a fixed cursor and
eliminate the cursor blink pathway from the debugging.
Tony
-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc. Get Certified Today
Register for a JBoss Training Course. Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: 2 more fbcon rotation bugs
2005-11-18 20:23 ` Antonino A. Daplas
@ 2005-11-19 10:12 ` Knut Petersen
2005-11-19 10:48 ` Antonino A. Daplas
` (2 more replies)
2005-11-22 6:34 ` Knut Petersen
1 sibling, 3 replies; 12+ messages in thread
From: Knut Petersen @ 2005-11-19 10:12 UTC (permalink / raw)
To: Antonino A. Daplas; +Cc: linux-fbdev-devel
Antonino A. Daplas schrieb:
>>For rotation values of 1 and 3 in combination with unusual font heights
>>there are
>>serious cursor problems:
>>
>>
>This one I cannot reproduce. Have you tried reproducing it with vesafb?
>Any message in the log, such as a kernel oops? Your description sounds
>like a corruption of cursor->mask and cursor->image.data.
>
>
I tried to reproduce it with vesafb ... vesafb does not show this bug.
Reproducability with cyblafb
is 100%. But cyblafb does not provide cursor functions, so both really
should show the same
behaviour, shouldn´t they? No messages in the log, no oops, no side
effects. Screen is restored
to the correct display if the gpm mouse cursor or the normal cursor is
moved to the wrong character
cell.
New bug: Vesafb & rotation does show a bug that is not present using
cyblafb & rotation and the 16x30
bitstream font: When I start my favourite text editor sedt, the top row
is coloured and contains some
status information. Line two is in a different colour. Those areas of
line 1 drawn with the bitblit
functions are ok, but those areas drawn with the fillrect function are
not completely coloured, the last
(maybe the 2 last, don´t know) pixel rows of the area that should be
coloured are still black.
Additional bug: I am used to compile vesafb into the kernel and to load
and remove the cyblafb
module during the developement process, switching to and from vesafb
using con2fb. That´s still
possible with rotation == 0, but it locks the computer if at least one
framebuffer is set to rotation 1.
I have not tested that for rotation == 2 or 3.
>
>You can also try enabling a non-blinking block cursor
>(Documentation/VGA-softcursor.txt) to isolate the problem. With a
>non-blinking block cursor, fbcon's cursor is disabled and vt.c's softcursor
>takes over.
>
>You also said that the cursor becomes fixed. You can comment out the call
>to ops->cursor in fb_flashcursor in fbcon.c so you get a fixed cursor and
>eliminate the cursor blink pathway from the debugging.
>
>Tony
>
>
>
As you cannot reproduce the cursor/delete bug, I´ll try to find the
cause and to fix it then. Please
have a look at the other bugs.
cu,
Knut
-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc. Get Certified Today
Register for a JBoss Training Course. Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: 2 more fbcon rotation bugs
2005-11-19 10:12 ` Knut Petersen
@ 2005-11-19 10:48 ` Antonino A. Daplas
2005-11-19 11:35 ` Antonino A. Daplas
2005-11-20 3:48 ` Antonino A. Daplas
2 siblings, 0 replies; 12+ messages in thread
From: Antonino A. Daplas @ 2005-11-19 10:48 UTC (permalink / raw)
To: Knut Petersen; +Cc: linux-fbdev-devel
Knut Petersen wrote:
> Antonino A. Daplas schrieb:
>
>>> For rotation values of 1 and 3 in combination with unusual font heights
>>> there are
>>> serious cursor problems:
>>>
>> This one I cannot reproduce. Have you tried reproducing it with vesafb?
>> Any message in the log, such as a kernel oops? Your description sounds
>> like a corruption of cursor->mask and cursor->image.data.
>>
>>
>
> I tried to reproduce it with vesafb ... vesafb does not show this bug.
> Reproducability with cyblafb
> is 100%. But cyblafb does not provide cursor functions, so both really
> should show the same
> behaviour, shouldn´t they?
soft_cursor is just a wrapper to fb_imageblit, so behavior will depend
on the drivers implementation.
No messages in the log, no oops, no side
> effects. Screen is restored
> to the correct display if the gpm mouse cursor or the normal cursor is
> moved to the wrong character
> cell.
>
> New bug: Vesafb & rotation does show a bug that is not present using
> cyblafb & rotation and the 16x30
> bitstream font: When I start my favourite text editor sedt, the top row
> is coloured and contains some
> status information. Line two is in a different colour. Those areas of
> line 1 drawn with the bitblit
> functions are ok, but those areas drawn with the fillrect function are
> not completely coloured, the last
> (maybe the 2 last, don´t know) pixel rows of the area that should be
> coloured are still black.
Yes, I think I mentioned this in the changelog, that there might be a
bug in the generic fillrect. I haven't looked at it yet.
>
> Additional bug: I am used to compile vesafb into the kernel and to load
> and remove the cyblafb
> module during the developement process, switching to and from vesafb
> using con2fb. That´s still
> possible with rotation == 0, but it locks the computer if at least one
> framebuffer is set to rotation 1.
Okay, will check on this.
Tony
-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc. Get Certified Today
Register for a JBoss Training Course. Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: 2 more fbcon rotation bugs
2005-11-19 10:12 ` Knut Petersen
2005-11-19 10:48 ` Antonino A. Daplas
@ 2005-11-19 11:35 ` Antonino A. Daplas
2005-11-20 3:48 ` Antonino A. Daplas
2 siblings, 0 replies; 12+ messages in thread
From: Antonino A. Daplas @ 2005-11-19 11:35 UTC (permalink / raw)
To: Knut Petersen; +Cc: linux-fbdev-devel
Knut Petersen wrote:
> Antonino A. Daplas schrieb:
> Additional bug: I am used to compile vesafb into the kernel and to load
> and remove the cyblafb
> module during the developement process, switching to and from vesafb
> using con2fb. That´s still
> possible with rotation == 0, but it locks the computer if at least one
> framebuffer is set to rotation 1.
> I have not tested that for rotation == 2 or 3.
I tried with savagefb and vga16fb. vga16fb is mapped to all consoles with
fbcon=map:1. Set different tty's at different angles of rotation. Then
used con2fbmap to make savagefb take over the entire console. I don't
experience any hang, and all the consoles are properly rotated at their
respective angles.
I also tried mapping vga16fb back. The resulting screen becomes corrupted
of course, but no hang. I can map savagefb back again without problems.
(The only bad thing that happened is when I tried switching consoles when
vga16fb owns the console and the display is corrupted. The machine
reboots.)
Tony
-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc. Get Certified Today
Register for a JBoss Training Course. Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: 2 more fbcon rotation bugs
2005-11-19 10:12 ` Knut Petersen
2005-11-19 10:48 ` Antonino A. Daplas
2005-11-19 11:35 ` Antonino A. Daplas
@ 2005-11-20 3:48 ` Antonino A. Daplas
2005-11-20 9:03 ` Knut Petersen
2 siblings, 1 reply; 12+ messages in thread
From: Antonino A. Daplas @ 2005-11-20 3:48 UTC (permalink / raw)
To: Knut Petersen; +Cc: linux-fbdev-devel
Knut Petersen wrote:
> Antonino A. Daplas schrieb:
>
> New bug: Vesafb & rotation does show a bug that is not present using
> cyblafb & rotation and the 16x30
> bitstream font: When I start my favourite text editor sedt, the top row
> is coloured and contains some
> status information. Line two is in a different colour. Those areas of
> line 1 drawn with the bitblit
> functions are ok, but those areas drawn with the fillrect function are
> not completely coloured, the last
> (maybe the 2 last, don´t know) pixel rows of the area that should be
> coloured are still black.
It seems that cfbfillrect and cfbcopyarea were written in a big-endian
machine (if I'm not mistaken, by Geert on m68k?) as unaligned access in
little endian produces this bug.
Try this patch and let me know if this solves your problem.
Tony
diff --git a/drivers/video/cfbcopyarea.c b/drivers/video/cfbcopyarea.c
index cdc7157..dc7e210 100644
--- a/drivers/video/cfbcopyarea.c
+++ b/drivers/video/cfbcopyarea.c
@@ -64,8 +64,8 @@ bitcpy(unsigned long __iomem *dst, int d
int const shift = dst_idx-src_idx;
int left, right;
- first = ~0UL >> dst_idx;
- last = ~(~0UL >> ((dst_idx+n) % bits));
+ first = SHIFT_HIGH(~0UL, dst_idx);
+ last = ~(SHIFT_HIGH(~0UL, (dst_idx+n) % bits));
if (!shift) {
// Same alignment for source and dest
@@ -216,8 +216,8 @@ bitcpy_rev(unsigned long __iomem *dst, i
shift = dst_idx-src_idx;
- first = ~0UL << (bits - 1 - dst_idx);
- last = ~(~0UL << (bits - 1 - ((dst_idx-n) % bits)));
+ first = SHIFT_LOW(~0UL, bits - 1 - dst_idx);
+ last = ~(SHIFT_LOW(~0UL, bits - 1 - ((dst_idx-n) % bits)));
if (!shift) {
// Same alignment for source and dest
diff --git a/drivers/video/cfbfillrect.c b/drivers/video/cfbfillrect.c
index 167d931..495cdaf 100644
--- a/drivers/video/cfbfillrect.c
+++ b/drivers/video/cfbfillrect.c
@@ -110,8 +110,8 @@ bitfill_aligned(unsigned long __iomem *d
if (!n)
return;
- first = ~0UL >> dst_idx;
- last = ~(~0UL >> ((dst_idx+n) % bits));
+ first = SHIFT_HIGH(~0UL, dst_idx);
+ last = ~(SHIFT_HIGH(~0UL, (dst_idx+n) % bits));
if (dst_idx+n <= bits) {
// Single word
@@ -167,8 +167,8 @@ bitfill_unaligned(unsigned long __iomem
if (!n)
return;
- first = ~0UL >> dst_idx;
- last = ~(~0UL >> ((dst_idx+n) % bits));
+ first = SHIFT_HIGH(~0UL, dst_idx);
+ last = ~(SHIFT_HIGH(~0UL, (dst_idx+n) % bits));
if (dst_idx+n <= bits) {
// Single word
@@ -221,8 +221,8 @@ bitfill_aligned_rev(unsigned long __iome
if (!n)
return;
- first = ~0UL >> dst_idx;
- last = ~(~0UL >> ((dst_idx+n) % bits));
+ first = SHIFT_HIGH(~0UL, dst_idx);
+ last = ~(SHIFT_HIGH(~0UL, (dst_idx+n) % bits));
if (dst_idx+n <= bits) {
// Single word
@@ -290,8 +290,8 @@ bitfill_unaligned_rev(unsigned long __io
if (!n)
return;
- first = ~0UL >> dst_idx;
- last = ~(~0UL >> ((dst_idx+n) % bits));
+ first = SHIFT_HIGH(~0UL, dst_idx);
+ last = ~(SHIFT_HIGH(~0UL, (dst_idx+n) % bits));
if (dst_idx+n <= bits) {
// Single word
diff --git a/drivers/video/cfbimgblt.c b/drivers/video/cfbimgblt.c
index 7a01742..6a78340 100644
--- a/drivers/video/cfbimgblt.c
+++ b/drivers/video/cfbimgblt.c
@@ -76,18 +76,6 @@ static u32 cfb_tab32[] = {
#define FB_WRITEL fb_writel
#define FB_READL fb_readl
-#if defined (__BIG_ENDIAN)
-#define LEFT_POS(bpp) (32 - bpp)
-#define SHIFT_HIGH(val, bits) ((val) >> (bits))
-#define SHIFT_LOW(val, bits) ((val) << (bits))
-#define BIT_NR(b) (7 - (b))
-#else
-#define LEFT_POS(bpp) (0)
-#define SHIFT_HIGH(val, bits) ((val) << (bits))
-#define SHIFT_LOW(val, bits) ((val) >> (bits))
-#define BIT_NR(b) (b)
-#endif
-
static inline void color_imageblit(const struct fb_image *image,
struct fb_info *p, u8 __iomem *dst1,
u32 start_index,
diff --git a/include/linux/fb.h b/include/linux/fb.h
index 04a58f3..e44950e 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -817,6 +817,18 @@ struct fb_info {
#endif
+#if defined (__BIG_ENDIAN)
+#define LEFT_POS(bpp) (32 - bpp)
+#define SHIFT_HIGH(val, bits) ((val) >> (bits))
+#define SHIFT_LOW(val, bits) ((val) << (bits))
+#define BIT_NR(b) (7 - (b))
+#else
+#define LEFT_POS(bpp) (0)
+#define SHIFT_HIGH(val, bits) ((val) << (bits))
+#define SHIFT_LOW(val, bits) ((val) >> (bits))
+#define BIT_NR(b) (b)
+#endif
+
/*
* `Generic' versions of the frame buffer device operations
*/
-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc. Get Certified Today
Register for a JBoss Training Course. Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: 2 more fbcon rotation bugs
2005-11-20 3:48 ` Antonino A. Daplas
@ 2005-11-20 9:03 ` Knut Petersen
2005-11-20 9:58 ` Geert Uytterhoeven
2005-11-20 22:04 ` Antonino A. Daplas
0 siblings, 2 replies; 12+ messages in thread
From: Knut Petersen @ 2005-11-20 9:03 UTC (permalink / raw)
To: Antonino A. Daplas; +Cc: linux-fbdev-devel
>It seems that cfbfillrect and cfbcopyarea were written in a big-endian
>machine (if I'm not mistaken, by Geert on m68k?) as unaligned access in
>little endian produces this bug.
>
>
>
That patch set fixes my problems with vesafb. For the tested subset of
possible
font dimensions and rotation values everything seems to be ok now. But maybe
someone with a big-endian machine should also verify the code.
Isn´t it amazing that code as old as this still contains undetected bugs?
Is there anything like a framebuffer test suite that could be used for a
quick verification
of especially the seldom used features?
btw: my favourite text editor sedt fails if the number of lines exceeds
an internal
limit hit by rotation == 1 or 3 and small fonts, but it complains that
it cannot read
its perfectly readable initialization file in that case ... I wonder if
there are more
applications like that.
cu,
Knut
-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc. Get Certified Today
Register for a JBoss Training Course. Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Re: 2 more fbcon rotation bugs
2005-11-20 9:03 ` Knut Petersen
@ 2005-11-20 9:58 ` Geert Uytterhoeven
2005-11-20 22:04 ` Antonino A. Daplas
1 sibling, 0 replies; 12+ messages in thread
From: Geert Uytterhoeven @ 2005-11-20 9:58 UTC (permalink / raw)
To: Linux Frame Buffer Device Development; +Cc: Antonino A. Daplas
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: TEXT/PLAIN; charset=UTF-8, Size: 1276 bytes --]
On Sun, 20 Nov 2005, Knut Petersen wrote:
> > It seems that cfbfillrect and cfbcopyarea were written in a big-endian
> > machine (if I'm not mistaken, by Geert on m68k?) as unaligned access in
> > little endian produces this bug.
> >
> That patch set fixes my problems with vesafb. For the tested subset of
> possible
> font dimensions and rotation values everything seems to be ok now. But maybe
> someone with a big-endian machine should also verify the code.
>
> Isn´t it amazing that code as old as this still contains undetected bugs?
It's not _that_ old, it was written in the 2.5 timeframe ;-)
And it's about corner cases. Rotation opens up some parts of the code that were
never used with 8x8, 8x16, and 12x22 fonts.
> Is there anything like a framebuffer test suite that could be used for a quick
> verification
> of especially the seldom used features?
There exists fbtest, but it doesn't test the internal drawing routines.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: 2 more fbcon rotation bugs
2005-11-20 9:03 ` Knut Petersen
2005-11-20 9:58 ` Geert Uytterhoeven
@ 2005-11-20 22:04 ` Antonino A. Daplas
1 sibling, 0 replies; 12+ messages in thread
From: Antonino A. Daplas @ 2005-11-20 22:04 UTC (permalink / raw)
To: Knut Petersen; +Cc: linux-fbdev-devel
Knut Petersen wrote:
>
>> It seems that cfbfillrect and cfbcopyarea were written in a big-endian
>> machine (if I'm not mistaken, by Geert on m68k?) as unaligned access in
>> little endian produces this bug.
>>
>>
>>
> That patch set fixes my problems with vesafb. For the tested subset of
> possible
> font dimensions and rotation values everything seems to be ok now. But
> maybe
> someone with a big-endian machine should also verify the code.
In big-endian, the original code gets compiled, so there would be no
regressions. But does the original code work on them? I don't know yet.
>
> Isn´t it amazing that code as old as this still contains undetected bugs?
It's quite hard to trigger this bug in an unrotated display because the
usual combination of fontwidths and bpp's typically results in 32-bit
aligned access. And even if the bug is triggered, it is very difficult to
detect as the result will be random pixels at the end of a row of text
which the cursor will overwrite eventually anyway.
Tony
PS: Someone did report before that cfbcopyarea and cfbfillrect does not work
correctly at bpp of 24, but I did not look into it then as I was too lazy
to create a test :-).
-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc. Get Certified Today
Register for a JBoss Training Course. Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: 2 more fbcon rotation bugs
2005-11-18 20:23 ` Antonino A. Daplas
2005-11-19 10:12 ` Knut Petersen
@ 2005-11-22 6:34 ` Knut Petersen
2005-11-22 7:48 ` Antonino A. Daplas
1 sibling, 1 reply; 12+ messages in thread
From: Knut Petersen @ 2005-11-22 6:34 UTC (permalink / raw)
To: Antonino A. Daplas; +Cc: linux-fbdev-devel
Hi Antonino,
>>Any idea where to start? Can you reproduce the odd behaviour?
>>
>>
>
>This one I cannot reproduce. Have you tried reproducing it with vesafb?
>Any message in the log, such as a kernel oops? Your description sounds
>like a corruption of cursor->mask and cursor->image.data.
>
>
I found the bug, it is specific to cyblafb.
The problem is that the 16x30 font causes the cyblafb imageblit to fall
back to
cfb_imageblit for rotation 1 and 3 while the accelerated copyarea
function is
still used. That breaks the private sync mechanism of cyblafb and causes
the
erroneous behaviour.
I´ll publish a patch soon.
cu,
Knut
-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc. Get Certified Today
Register for a JBoss Training Course. Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: 2 more fbcon rotation bugs
2005-11-22 6:34 ` Knut Petersen
@ 2005-11-22 7:48 ` Antonino A. Daplas
2005-11-22 8:01 ` Knut Petersen
0 siblings, 1 reply; 12+ messages in thread
From: Antonino A. Daplas @ 2005-11-22 7:48 UTC (permalink / raw)
To: Knut Petersen; +Cc: linux-fbdev-devel
Knut Petersen wrote:
> Hi Antonino,
>
>>> Any idea where to start? Can you reproduce the odd behaviour?
>>>
>>
>> This one I cannot reproduce. Have you tried reproducing it with vesafb?
>> Any message in the log, such as a kernel oops? Your description sounds
>> like a corruption of cursor->mask and cursor->image.data.
>>
>>
> I found the bug, it is specific to cyblafb.
>
> The problem is that the 16x30 font causes the cyblafb imageblit to fall
> back to
> cfb_imageblit for rotation 1 and 3 while the accelerated copyarea
> function is
> still used. That breaks the private sync mechanism of cyblafb and causes
> the
> erroneous behaviour.
Shouldn't the accelerator be intelligent enough to handle bitmaps with
variable widths? Will something like the one attached work?
Tony
diff --git a/drivers/video/cyblafb.c b/drivers/video/cyblafb.c
index 03fbe83..175f4d4 100644
--- a/drivers/video/cyblafb.c
+++ b/drivers/video/cyblafb.c
@@ -364,17 +364,12 @@ static void cyblafb_imageblit(struct fb_
const struct fb_image *image)
{
- u32 fgcol, bgcol;
-
- int i;
+ u32 fgcol, bgcol, *data = (u32 *) image->data;
int bpp = info->var.bits_per_pixel;
int index = 0;
- int index_end=image->height * image->width / 8;
- int width_dds=image->width / 32;
- int width_dbs=image->width % 32;
- if (image->depth != 1 || bpp < 8 || bpp > 32 || bpp % 8 != 0 ||
- image->width % 8 != 0 || image->width == 0 || image->height == 0) {
+ if (image->depth != 1 || bpp < 8 || bpp > 32 ||
+ image->width == 0 || image->height == 0) {
cfb_imageblit(info,image);
return;
}
@@ -403,32 +398,18 @@ static void cyblafb_imageblit(struct fb_
cyblafb_sync(info);
+ index = (image->width + 31) & ~31;
+ index *= image->height;
+ index >>= 5;
+
out32(GE60,fgcol);
out32(GE64,bgcol);
out32(GE44,0xa0000000 | 1<<20 | 1<<19);
out32(GE08,point(image->dx,image->dy));
out32(GE0C,point(image->dx+image->width-1,image->dy+image->height-1));
- while(index < index_end) {
- const char *p = image->data + index;
- for(i=0;i<width_dds;i++) {
- out32(GE9C,*(u32*)p);
- p+=4;
- index+=4;
- }
- switch(width_dbs) {
- case 0: break;
- case 8: out32(GE9C,*(u8*)p);
- index+=1;
- break;
- case 16: out32(GE9C,*(u16*)p);
- index+=2;
- break;
- case 24: out32(GE9C,*(u16*)p | *(u8*)(p+2)<<16);
- index+=3;
- break;
- }
- }
+ while (index--)
+ out32(GE9C, *data++);
}
//==========================================================
@@ -1319,6 +1300,17 @@ static int __devinit cybla_pci_probe(str
fb_alloc_cmap(&info->cmap,256,0);
+ info->pixmap.addr = kmalloc(8 * 1024, GFP_KERNEL);
+
+ if (!info->pixmap.addr)
+ goto errout_pixmap;
+
+ info->pixmap.scan_align = 4;
+ info->pixmap.buf_align = 4;
+ info->pixmap.access_align = 32;
+ info->pixmap.size = 8 * 1024;
+ info->pixmap.flags = FB_PIXMAP_SYSTEM;
+
if (register_framebuffer(info)) {
output("Could not register CyBla framebuffer\n");
goto errout_register;
@@ -1333,6 +1325,8 @@ static int __devinit cybla_pci_probe(str
return 0;
errout_register:
+ kfree(info->pixmap.addr);
+ errout_pixmap:
errout_findmode:
iounmap(info->screen_base);
errout_smem_remap:
@@ -1362,6 +1356,7 @@ static void __devexit cybla_pci_remove(s
release_mem_region(info->fix.smem_start,info->fix.smem_len);
release_mem_region(info->fix.mmio_start,info->fix.mmio_len);
fb_dealloc_cmap(&info->cmap);
+ kfree(info->pixmap.addr);
framebuffer_release(info);
output("CyblaFB version %s normal exit.\n",VERSION);
}
-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc. Get Certified Today
Register for a JBoss Training Course. Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: 2 more fbcon rotation bugs
2005-11-22 7:48 ` Antonino A. Daplas
@ 2005-11-22 8:01 ` Knut Petersen
0 siblings, 0 replies; 12+ messages in thread
From: Knut Petersen @ 2005-11-22 8:01 UTC (permalink / raw)
To: Antonino A. Daplas; +Cc: linux-fbdev-devel
Antonino A. Daplas schrieb:
>Shouldn't the accelerator be intelligent enough to handle bitmaps with
>variable widths? Will something like the one attached work?
>
>
>
Well, the accelerator can handle it, but it needs some precautions. Also
xres != vxres
is possible, although it is currently disabled as I was too lazy to put
work in an
unused feature. But now there is the rotation code that can benefit from
x-panning,
and so it will be included soon.
cu,
Knut
-------------------------------------------------------
This SF.Net email is sponsored by the JBoss Inc. Get Certified Today
Register for a JBoss Training Course. Free Certification Exam
for All Training Attendees Through End of 2005. For more info visit:
http://ads.osdn.com/?ad_id=7628&alloc_id=16845&op=click
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2005-11-22 8:01 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-11-18 15:23 2 more fbcon rotation bugs Knut Petersen
2005-11-18 20:23 ` Antonino A. Daplas
2005-11-19 10:12 ` Knut Petersen
2005-11-19 10:48 ` Antonino A. Daplas
2005-11-19 11:35 ` Antonino A. Daplas
2005-11-20 3:48 ` Antonino A. Daplas
2005-11-20 9:03 ` Knut Petersen
2005-11-20 9:58 ` Geert Uytterhoeven
2005-11-20 22:04 ` Antonino A. Daplas
2005-11-22 6:34 ` Knut Petersen
2005-11-22 7:48 ` Antonino A. Daplas
2005-11-22 8:01 ` Knut Petersen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).